From 5b2241aaaf8f52c3ba425233e8d8cb815197fbb8 Mon Sep 17 00:00:00 2001 From: Antoine Keranflec'h Date: Thu, 10 Oct 2024 15:38:48 +0200 Subject: [PATCH 001/152] fix(17542) add contact to tunnels --- netbox/vpn/models/tunnels.py | 6 +++--- netbox/vpn/views.py | 6 ++++++ 2 files changed, 9 insertions(+), 3 deletions(-) diff --git a/netbox/vpn/models/tunnels.py b/netbox/vpn/models/tunnels.py index 6f4fa4182..6224959eb 100644 --- a/netbox/vpn/models/tunnels.py +++ b/netbox/vpn/models/tunnels.py @@ -6,7 +6,7 @@ from django.urls import reverse from django.utils.translation import gettext_lazy as _ from netbox.models import ChangeLoggedModel, OrganizationalModel, PrimaryModel -from netbox.models.features import CustomFieldsMixin, CustomLinksMixin, TagsMixin +from netbox.models.features import CustomFieldsMixin, CustomLinksMixin, TagsMixin, ContactsMixin from vpn.choices import * __all__ = ( @@ -16,7 +16,7 @@ __all__ = ( ) -class TunnelGroup(OrganizationalModel): +class TunnelGroup(ContactsMixin, OrganizationalModel): """ An administrative grouping of Tunnels. This can be used to correlate peer-to-peer tunnels which form a mesh, for example. @@ -30,7 +30,7 @@ class TunnelGroup(OrganizationalModel): return reverse('vpn:tunnelgroup', args=[self.pk]) -class Tunnel(PrimaryModel): +class Tunnel(ContactsMixin, PrimaryModel): name = models.CharField( verbose_name=_('name'), max_length=100, diff --git a/netbox/vpn/views.py b/netbox/vpn/views.py index ac8ce3667..73b2b04c0 100644 --- a/netbox/vpn/views.py +++ b/netbox/vpn/views.py @@ -62,6 +62,9 @@ class TunnelGroupBulkDeleteView(generic.BulkDeleteView): filterset = filtersets.TunnelGroupFilterSet table = tables.TunnelGroupTable +@register_model_view(Tunnel, 'contacts') +class TunnelGroupContactsView(ObjectContactsView): + queryset = TunnelGroup.objects.all() # # Tunnels @@ -121,6 +124,9 @@ class TunnelBulkDeleteView(generic.BulkDeleteView): filterset = filtersets.TunnelFilterSet table = tables.TunnelTable +@register_model_view(Tunnel, 'contacts') +class TunnelContactsView(ObjectContactsView): + queryset = Tunnel.objects.all() # # Tunnel terminations From b7610971c0a53ac1841131a7fa12d0bc1812ac43 Mon Sep 17 00:00:00 2001 From: Jeremy Stretch Date: Mon, 6 Jan 2025 15:29:03 -0500 Subject: [PATCH 002/152] Closes #13366: Update documentation for `main` branch (#18309) * Closes #13366: Update documentation for main branch * Clarify wording --- .github/ISSUE_TEMPLATE/config.yml | 2 +- .github/workflows/close-stale-issues.yml | 2 +- README.md | 6 +++--- docs/development/getting-started.md | 12 ++++------- docs/development/git-cheat-sheet.md | 4 ++-- docs/development/index.md | 9 ++++---- docs/development/release-checklist.md | 27 ++++++++++++++++-------- docs/development/translations.md | 4 ++-- docs/installation/3-netbox.md | 20 ++++++++++-------- docs/installation/upgrading.md | 27 +++++++++++------------- 10 files changed, 58 insertions(+), 55 deletions(-) diff --git a/.github/ISSUE_TEMPLATE/config.yml b/.github/ISSUE_TEMPLATE/config.yml index efbf38932..5b18f4525 100644 --- a/.github/ISSUE_TEMPLATE/config.yml +++ b/.github/ISSUE_TEMPLATE/config.yml @@ -2,7 +2,7 @@ blank_issues_enabled: false contact_links: - name: 📖 Contributing Policy - url: https://github.com/netbox-community/netbox/blob/develop/CONTRIBUTING.md + url: https://github.com/netbox-community/netbox/blob/main/CONTRIBUTING.md about: "Please read through our contributing policy before opening an issue or pull request." - name: ❓ Discussion url: https://github.com/netbox-community/netbox/discussions diff --git a/.github/workflows/close-stale-issues.yml b/.github/workflows/close-stale-issues.yml index 1e0e193df..89b3d5f9a 100644 --- a/.github/workflows/close-stale-issues.yml +++ b/.github/workflows/close-stale-issues.yml @@ -38,7 +38,7 @@ jobs: issues may receive direct feedback. **Do not** attempt to circumvent this process by "bumping" the issue; doing so will result in its immediate closure and you may be barred from participating in any future discussions. Please see - our [contributing guide](https://github.com/netbox-community/netbox/blob/develop/CONTRIBUTING.md). + our [contributing guide](https://github.com/netbox-community/netbox/blob/main/CONTRIBUTING.md). # Pull request parameters close-pr-message: > diff --git a/README.md b/README.md index e3829c2cc..3a29a6fd2 100644 --- a/README.md +++ b/README.md @@ -1,12 +1,12 @@
- NetBox logo + NetBox logo

The cornerstone of every automated network

Latest release - License + License Contributors GitHub stars Languages supported - CI status + CI status

NetBox Community | NetBox Cloud | diff --git a/docs/development/getting-started.md b/docs/development/getting-started.md index 6e425d5a3..0b77bfd4d 100644 --- a/docs/development/getting-started.md +++ b/docs/development/getting-started.md @@ -37,16 +37,12 @@ CHANGELOG.md CONTRIBUTING.md LICENSE.txt netbox README.md scri ### 2. Create a New Branch -The NetBox project utilizes three persistent git branches to track work: +The NetBox project utilizes two persistent git branches to track work: -* `master` - Serves as a snapshot of the current stable release -* `develop` - All development on the upcoming stable (patch) release occurs here -* `feature` - Tracks work on an upcoming minor release +* `main` - All development on the upcoming stable (patch) release occurs here. Releases are published from this branch. +* `feature` - All work planned for the upcoming minor release is done here. -Typically, you'll base pull requests off of the `develop` branch, or off of `feature` if you're working on a new major release. For example, assume that the current NetBox release is v3.3.5. Work applied to the `develop` branch will appear in v3.3.6, and work done under the `feature` branch will be included in the next minor release (v3.4.0). - -!!! warning - **Never** merge pull requests into the `master` branch: This branch only ever merges pull requests from the `develop` branch, to effect a new release. +Typically, you'll base pull requests off of the `main` branch, or off of `feature` if you're working on the upcoming minor or major release. For example, assume that the current NetBox release is v4.2.3. Work applied to the `main` branch will appear in v4.2.4, and work done under the `feature` branch will be included in the next minor release (v4.3.0). To create a new branch, first ensure that you've checked out the desired base branch, then run: diff --git a/docs/development/git-cheat-sheet.md b/docs/development/git-cheat-sheet.md index 35b8e90b5..794b25c65 100644 --- a/docs/development/git-cheat-sheet.md +++ b/docs/development/git-cheat-sheet.md @@ -128,7 +128,7 @@ Fast-forward ``` !!! warning "Avoid Merging Remote Branches" - You generally want to avoid merging branches that exist on the remote (upstream) repository, such as `develop` and `feature`: Merges into these branches should be done via a pull request on GitHub. Only merge branches when it is necessary to consolidate work you've done locally. + You generally want to avoid merging branches that exist on the remote (upstream) repository, namely `main` and `feature`: Merges into these branches should be done via a pull request on GitHub. Only merge branches when it is necessary to consolidate work you've done locally. ### Show Pending Changes @@ -196,7 +196,7 @@ index 93e125079..4344fb514 100644 +and here too +

- NetBox logo + NetBox logo
diff --git a/foo.py b/foo.py new file mode 100644 diff --git a/docs/development/index.md b/docs/development/index.md index 0d570abe6..09489ebdd 100644 --- a/docs/development/index.md +++ b/docs/development/index.md @@ -8,11 +8,10 @@ NetBox and many of its related projects are maintained on [GitHub](https://githu ![GitHub](../media/development/github.png) -There are three permanent branches in the repository: +There are two permanent branches in the repository: -* `master` - The current stable release. Individual changes should never be pushed directly to this branch, but rather merged from `develop`. -* `develop` - Active development for the upcoming patch release. Pull requests will typically be based on this branch unless they introduce breaking changes that must be deferred until the next minor release. -* `feature` - New feature work to be introduced in the next minor release (e.g. from v3.3 to v3.4). +* `main` - Active development for the upcoming patch release. Pull requests will typically be based on this branch unless they introduce breaking changes that must be deferred until the next minor release. +* `feature` - New feature work to be introduced in the next minor release (e.g. from v4.2 to v4.3). NetBox components are arranged into Django apps. Each app holds the models, views, and other resources relevant to a particular function: @@ -57,4 +56,4 @@ NetBox follows the [benevolent dictator](http://oss-watch.ac.uk/resources/benevo ## Licensing -The entire NetBox project is licensed as open source under the [Apache 2.0 license](https://github.com/netbox-community/netbox/blob/master/LICENSE.txt). This is a very permissive license which allows unlimited redistribution of all code within the project. Note that all submissions to the project are subject to the same license. +The entire NetBox project is licensed as open source under the [Apache 2.0 license](https://github.com/netbox-community/netbox/blob/main/LICENSE.txt). This is a very permissive license which allows unlimited redistribution of all code within the project. Note that all submissions to the project are subject to the same license. diff --git a/docs/development/release-checklist.md b/docs/development/release-checklist.md index 4e5fdeca8..557d01671 100644 --- a/docs/development/release-checklist.md +++ b/docs/development/release-checklist.md @@ -43,9 +43,9 @@ Follow these instructions to perform a new installation of NetBox in a temporary Upgrading from a previous version typically involves database migrations, which must work without errors. Supported upgrade paths include from one minor version to another within the same major version (i.e. 4.0 to 4.1), as well as from the latest patch version of the previous minor version (i.e. 3.7 to 4.0 or to 4.1). Prior to release, test all these supported paths by loading demo data from the source version and performing a `./manage.py migrate`. -### Merge the Release Branch +### Merge the `feature` Branch -Submit a pull request to merge the `feature` branch into the `develop` branch in preparation for its release. Once it has been merged, continue with the section for patch releases below. +Submit a pull request to merge the `feature` branch into the `main` branch in preparation for its release. Once it has been merged, continue with the section for patch releases below. ### Rebuild Demo Data (After Release) @@ -55,6 +55,15 @@ After the release of a new minor version, generate a new demo data snapshot comp ## Patch Releases +### Create a Release Branch + +Begin by creating a new branch (based off of `main`) to effect the release. This will comprise the changes listed below. + +``` +git checkout main +git checkout -B release-vX.Y.Z +``` + ### Notify netbox-docker Project of Any Relevant Changes Notify the [`netbox-docker`](https://github.com/netbox-community/netbox-docker) maintainers (in **#netbox-docker**) of any changes that may be relevant to their build process, including: @@ -111,25 +120,25 @@ Then, compile these portable (`.po`) files for use in the application: * Update the example version numbers in the feature request and bug report templates under `.github/ISSUE_TEMPLATES/`. * Replace the "FUTURE" placeholder in the release notes with the current date. -Commit these changes to the `develop` branch and push upstream. +Commit these changes to the `main` branch and push upstream. ### Verify CI Build Status -Ensure that continuous integration testing on the `develop` branch is completing successfully. If it fails, take action to correct the failure before proceeding with the release. +Ensure that continuous integration testing on the `main` branch is completing successfully. If it fails, take action to correct the failure before proceeding with the release. ### Submit a Pull Request -Submit a pull request titled **"Release vX.Y.Z"** to merge the `develop` branch into `master`. Copy the documented release notes into the pull request's body. +Submit a pull request titled **"Release vX.Y.Z"** to merge the current release branch (e.g. `release-vX.Y.Z`) into `main`. Copy the documented release notes into the pull request's body. -Once CI has completed on the PR, merge it. This effects a new release in the `master` branch. +Once CI has completed and a colleague has reviewed the PR, merge it. This effects a new release in the `main` branch. ### Create a New Release Create a [new release](https://github.com/netbox-community/netbox/releases/new) on GitHub with the following parameters. -* **Tag:** Current version (e.g. `v3.3.1`) -* **Target:** `master` -* **Title:** Version and date (e.g. `v3.3.1 - 2022-08-25`) +* **Tag:** Current version (e.g. `v4.2.1`) +* **Target:** `main` +* **Title:** Version and date (e.g. `v4.2.1 - 2025-01-17`) * **Description:** Copy from the pull request body, then promote the `###` headers to `##` ones Once created, the release will become available for users to install. diff --git a/docs/development/translations.md b/docs/development/translations.md index 43733c6d1..de8545b97 100644 --- a/docs/development/translations.md +++ b/docs/development/translations.md @@ -14,10 +14,10 @@ To update the English `.po` file from which all translations are derived, use th ./manage.py makemessages -l en -i "project-static/*" ``` -Then, commit the change and push to the `develop` branch on GitHub. Any new strings will appear for translation on Transifex automatically. +Then, commit the change and push to the `main` branch on GitHub. Any new strings will appear for translation on Transifex automatically. !!! note - It is typically not necessary to update source strings manually, as this is done nightly by a [GitHub action](https://github.com/netbox-community/netbox/blob/develop/.github/workflows/update-translation-strings.yml). + It is typically not necessary to update source strings manually, as this is done nightly by a [GitHub action](https://github.com/netbox-community/netbox/blob/main/.github/workflows/update-translation-strings.yml). ## Updating Translated Strings diff --git a/docs/installation/3-netbox.md b/docs/installation/3-netbox.md index 9a143319d..60d60d4f0 100644 --- a/docs/installation/3-netbox.md +++ b/docs/installation/3-netbox.md @@ -29,7 +29,7 @@ python3 -V ## Download NetBox -This documentation provides two options for installing NetBox: from a downloadable archive, or from the git repository. Installing from a package (option A below) requires manually fetching and extracting the archive for every future update, whereas installation via git (option B) allows for seamless upgrades by re-pulling the `master` branch. +This documentation provides two options for installing NetBox: from a downloadable archive, or from the git repository. Installing from a package (option A below) requires manually fetching and extracting the archive for every future update, whereas installation via git (option B) allows for seamless upgrades by checking out the latest release tag. ### Option A: Download a Release Archive @@ -67,16 +67,13 @@ If `git` is not already installed, install it: sudo yum install -y git ``` -Next, clone the **master** branch of the NetBox GitHub repository into the current directory. (This branch always holds the current stable release.) +Next, clone the git repository: ```no-highlight -sudo git clone -b master --depth 1 https://github.com/netbox-community/netbox.git . +sudo git clone https://github.com/netbox-community/netbox.git . ``` -!!! note - The `git clone` command above utilizes a "shallow clone" to retrieve only the most recent commit. If you need to download the entire history, omit the `--depth 1` argument. - -The `git clone` command should generate output similar to the following: +This command should generate output similar to the following: ``` Cloning into '.'... @@ -88,8 +85,13 @@ Receiving objects: 100% (996/996), 4.26 MiB | 9.81 MiB/s, done. Resolving deltas: 100% (148/148), done. ``` -!!! note - Installation via git also allows you to easily try out different versions of NetBox. To check out a [specific NetBox release](https://github.com/netbox-community/netbox/releases), use the `git checkout` command with the desired release tag. For example, `git checkout v3.0.8`. +Finally, check out the tag for the desired release. You can find these on our [releases page](https://github.com/netbox-community/netbox/releases). Replace `vX.Y.Z` with your selected release tag below. + +``` +sudo git checkout vX.Y.Z +``` + +Using this installation method enables easy upgrades in the future by simply checking out the latest release tag. ## Create the NetBox System User diff --git a/docs/installation/upgrading.md b/docs/installation/upgrading.md index 6093b226e..5b844f1c3 100644 --- a/docs/installation/upgrading.md +++ b/docs/installation/upgrading.md @@ -25,10 +25,10 @@ NetBox requires the following dependencies: ## 3. Install the Latest Release -As with the initial installation, you can upgrade NetBox by either downloading the latest release package or by cloning the `master` branch of the git repository. +As with the initial installation, you can upgrade NetBox by either downloading the latest release package or by checking out the latest production release from the git repository. !!! warning - Use the same method as you used to install NetBox originally + Use the same method as you used to install NetBox originally. If you are not sure how NetBox was installed originally, check with this command: @@ -36,10 +36,7 @@ If you are not sure how NetBox was installed originally, check with this command ls -ld /opt/netbox /opt/netbox/.git ``` -If NetBox was installed from a release package, then `/opt/netbox` will be a -symlink pointing to the current version, and `/opt/netbox/.git` will not -exist. If it was installed from git, then `/opt/netbox` and -`/opt/netbox/.git` will both exist as normal directories. +If NetBox was installed from a release package, then `/opt/netbox` will be a symlink pointing to the current version, and `/opt/netbox/.git` will not exist. If it was installed from git, then `/opt/netbox` and `/opt/netbox/.git` will both exist as normal directories. ### Option A: Download a Release @@ -84,20 +81,20 @@ If you followed the original installation guide to set up gunicorn, be sure to c sudo cp /opt/netbox-$OLDVER/gunicorn.py /opt/netbox/ ``` -### Option B: Clone the Git Repository +### Option B: Check Out a Git Release -This guide assumes that NetBox is installed at `/opt/netbox`. Pull down the most recent iteration of the master branch: +This guide assumes that NetBox is installed at `/opt/netbox`. First, determine the latest release either by visiting our [releases page](https://github.com/netbox-community/netbox/releases) or by running the following `git` commands: -```no-highlight -cd /opt/netbox -sudo git checkout master -sudo git pull origin master +``` +sudo git fetch --tags +git describe --tags $(git rev-list --tags --max-count=1) ``` -!!! info "Checking out an older release" - If you need to upgrade to an older version rather than the current stable release, you can check out any valid [git tag](https://github.com/netbox-community/netbox/tags), each of which represents a release. For example, to checkout the code for NetBox v2.11.11, do: +Check out the desired release by specifying its tag: - sudo git checkout v2.11.11 +``` +sudo git checkout v4.2.0 +``` ## 4. Run the Upgrade Script From 9d82a668a4a8a2762d8f1f6a9754234a99888313 Mon Sep 17 00:00:00 2001 From: Jeremy Stretch Date: Mon, 6 Jan 2025 15:54:16 -0500 Subject: [PATCH 003/152] Release v4.2.0 --- .../ISSUE_TEMPLATE/01-feature_request.yaml | 2 +- .github/ISSUE_TEMPLATE/02-bug_report.yaml | 2 +- docs/development/release-checklist.md | 8 +- docs/release-notes/version-4.2.md | 5 +- mkdocs.yml | 1 + .../dist/graphiql/graphiql.min.js | 45260 +++++++++------- netbox/project-static/dist/netbox.js | Bin 390582 -> 390886 bytes netbox/project-static/dist/netbox.js.map | Bin 525040 -> 525356 bytes .../netbox-graphiql/package.json | 6 +- netbox/project-static/package.json | 4 +- netbox/project-static/yarn.lock | 66 +- netbox/translations/fr/LC_MESSAGES/django.mo | Bin 237343 -> 237945 bytes netbox/translations/fr/LC_MESSAGES/django.po | 244 +- requirements.txt | 2 +- 14 files changed, 25465 insertions(+), 20135 deletions(-) diff --git a/.github/ISSUE_TEMPLATE/01-feature_request.yaml b/.github/ISSUE_TEMPLATE/01-feature_request.yaml index cb39ae9be..7cb6057ea 100644 --- a/.github/ISSUE_TEMPLATE/01-feature_request.yaml +++ b/.github/ISSUE_TEMPLATE/01-feature_request.yaml @@ -14,7 +14,7 @@ body: attributes: label: NetBox version description: What version of NetBox are you currently running? - placeholder: v4.1.11 + placeholder: v4.2.0 validations: required: true - type: dropdown diff --git a/.github/ISSUE_TEMPLATE/02-bug_report.yaml b/.github/ISSUE_TEMPLATE/02-bug_report.yaml index e42ff3045..e2145543d 100644 --- a/.github/ISSUE_TEMPLATE/02-bug_report.yaml +++ b/.github/ISSUE_TEMPLATE/02-bug_report.yaml @@ -39,7 +39,7 @@ body: attributes: label: NetBox Version description: What version of NetBox are you currently running? - placeholder: v4.1.11 + placeholder: v4.2.0 validations: required: true - type: dropdown diff --git a/docs/development/release-checklist.md b/docs/development/release-checklist.md index 557d01671..c74fcf8f6 100644 --- a/docs/development/release-checklist.md +++ b/docs/development/release-checklist.md @@ -120,15 +120,9 @@ Then, compile these portable (`.po`) files for use in the application: * Update the example version numbers in the feature request and bug report templates under `.github/ISSUE_TEMPLATES/`. * Replace the "FUTURE" placeholder in the release notes with the current date. -Commit these changes to the `main` branch and push upstream. - -### Verify CI Build Status - -Ensure that continuous integration testing on the `main` branch is completing successfully. If it fails, take action to correct the failure before proceeding with the release. - ### Submit a Pull Request -Submit a pull request titled **"Release vX.Y.Z"** to merge the current release branch (e.g. `release-vX.Y.Z`) into `main`. Copy the documented release notes into the pull request's body. +Commit the above changes and submit a pull request titled **"Release vX.Y.Z"** to merge the current release branch (e.g. `release-vX.Y.Z`) into `main`. Copy the documented release notes into the pull request's body. Once CI has completed and a colleague has reviewed the PR, merge it. This effects a new release in the `main` branch. diff --git a/docs/release-notes/version-4.2.md b/docs/release-notes/version-4.2.md index f0ad3766c..75a776573 100644 --- a/docs/release-notes/version-4.2.md +++ b/docs/release-notes/version-4.2.md @@ -1,9 +1,6 @@ # NetBox v4.2 -## v4.2-beta1 (2024-12-02) - -!!! danger "Not for Production Use" - This is a beta release of NetBox intended for testing and evaluation. **Do not use this software in production.** Also be aware that no upgrade path is provided to future releases. +## v4.2.0 (2025-01-06) ### Breaking Changes diff --git a/mkdocs.yml b/mkdocs.yml index f870b69d6..db6798eae 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -176,6 +176,7 @@ nav: - Provider Network: 'models/circuits/providernetwork.md' - Virtual Circuit: 'models/circuits/virtualcircuit.md' - Virtual Circuit Termination: 'models/circuits/virtualcircuittermination.md' + - Virtual Circuit Type: 'models/circuits/virtualcircuittype.md' - Core: - DataFile: 'models/core/datafile.md' - DataSource: 'models/core/datasource.md' diff --git a/netbox/project-static/dist/graphiql/graphiql.min.js b/netbox/project-static/dist/graphiql/graphiql.min.js index 03d4ac1e1..229d3ebe6 100644 --- a/netbox/project-static/dist/graphiql/graphiql.min.js +++ b/netbox/project-static/dist/graphiql/graphiql.min.js @@ -1,5 +1,4 @@ /******/ (function() { // webpackBootstrap -/******/ "use strict"; /******/ var __webpack_modules__ = ({ /***/ "../../../node_modules/@emotion/is-prop-valid/dist/is-prop-valid.browser.esm.js": @@ -8,6 +7,7 @@ \**************************************************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -34,6 +34,7 @@ var _default = exports["default"] = index; \**************************************************************************/ /***/ (function(__unused_webpack_module, exports) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -57,6 +58,7 @@ var _default = exports["default"] = memoize; \****************************************************************************/ /***/ (function(__unused_webpack_module, exports) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -1194,6 +1196,7 @@ exports.size = size; \**************************************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -1901,6 +1904,7 @@ exports.computePosition = computePosition; \**************************************************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -2256,6 +2260,7 @@ function useFloating(options) { \***********************************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -2432,6 +2437,7 @@ exports.Animation = Animation; \*******************************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -2460,6 +2466,7 @@ var _easingEs = __webpack_require__(/*! ./utils/easing.es.js */ "../../../node_m \**************************************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -2501,6 +2508,7 @@ function getEasingFunction(definition) { \*****************************************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -2698,6 +2706,7 @@ function animateStyle(element, key, keyframesDefinition, options = {}) { \********************************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -2731,6 +2740,7 @@ function getMotionValue(motionValues, name) { \*********************************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -2779,6 +2789,7 @@ function animate(elements, keyframes, options = {}) { \*********************************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -2816,6 +2827,7 @@ const style = exports.style = { \******************************************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -2895,6 +2907,7 @@ const selectFinished = animation => animation.finished; \*****************************************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -2932,6 +2945,7 @@ function registerCssVariable(name) { \****************************************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -2952,6 +2966,7 @@ exports.cubicBezierAsString = cubicBezierAsString; \***************************************************************************************/ /***/ (function(__unused_webpack_module, exports) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -2995,6 +3010,7 @@ for (const key in featureTests) { \************************************************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -3015,6 +3031,7 @@ function getStyleName(key) { \*******************************************************************************/ /***/ (function(__unused_webpack_module, exports) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -3041,6 +3058,7 @@ exports.keyframesList = keyframesList; \*****************************************************************************/ /***/ (function(__unused_webpack_module, exports) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -3064,6 +3082,7 @@ exports.getOptions = getOptions; \************************************************************************************/ /***/ (function(__unused_webpack_module, exports) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -3091,6 +3110,7 @@ function stopAnimation(animation, needsCommit = true) { \**********************************************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -3134,6 +3154,7 @@ function createStyles(keyframes) { \**********************************************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -3161,6 +3182,7 @@ function createStyleString(target = {}) { \********************************************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -3253,6 +3275,7 @@ const transformListToString = (template, name) => `${template} ${name}(var(${asT \**************************************************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -3346,6 +3369,7 @@ const isNumberOrNull = value => typeof value !== "string"; \**************************************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -3364,6 +3388,7 @@ const glide = exports.glide = (0, _createGeneratorEasingEs.createGeneratorEasing \***************************************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -3382,6 +3407,7 @@ const spring = exports.spring = (0, _createGeneratorEasingEs.createGeneratorEasi \************************************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -3447,6 +3473,7 @@ function inView(elementOrSelector, onStart, { \**************************************************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -3529,6 +3556,7 @@ function resizeElement(target, handler) { \*************************************************************************************/ /***/ (function(__unused_webpack_module, exports) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -3571,6 +3599,7 @@ function resizeWindow(callback) { \*****************************************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -3591,6 +3620,7 @@ function resize(a, b) { \*****************************************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -3682,6 +3712,7 @@ function scroll(onScroll, _a = {}) { \****************************************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -3751,6 +3782,7 @@ function updateScrollInfo(element, info, time) { \************************************************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -3807,6 +3839,7 @@ function resolveEdge(edge, length, inset = 0) { \*************************************************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -3884,6 +3917,7 @@ function resolveOffsets(container, info, options) { \*************************************************************************************/ /***/ (function(__unused_webpack_module, exports) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -3927,6 +3961,7 @@ function calcInset(element, container) { \**************************************************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -3973,6 +4008,7 @@ function resolveOffset(offset, containerLength, targetLength, targetInset) { \***************************************************************************************/ /***/ (function(__unused_webpack_module, exports) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -3994,6 +4030,7 @@ const ScrollOffset = exports.ScrollOffset = { \*****************************************************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -4065,6 +4102,7 @@ function scrubAnimation(controls, axisInfo) { \*************************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -4204,6 +4242,7 @@ var _styleStringEs = __webpack_require__(/*! ./animate/utils/style-string.es.js \****************************************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -4241,6 +4280,7 @@ const hover = exports.hover = { \******************************************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -4283,6 +4323,7 @@ const inView = exports.inView = { \****************************************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -4322,6 +4363,7 @@ const press = exports.press = { \*******************************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -4511,6 +4553,7 @@ function createMotionState(options = {}, parent) { \**************************************************************************/ /***/ (function(__unused_webpack_module, exports) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -4548,6 +4591,7 @@ function dispatchViewEvent(element, name, entry) { \*******************************************************************************/ /***/ (function(__unused_webpack_module, exports) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -4577,6 +4621,7 @@ function shallowCompare(next, prev) { \******************************************************************************/ /***/ (function(__unused_webpack_module, exports) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -4595,6 +4640,7 @@ function isVariant(definition) { \***********************************************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -4618,6 +4664,7 @@ function resolveVariant(definition, variants) { \****************************************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -4657,6 +4704,7 @@ const fireNext = iterator => iterator.next(); \**********************************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -4869,6 +4917,7 @@ function getValueSequence(name, sequences) { \********************************************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -4897,6 +4946,7 @@ function calcNextTime(current, next, prev, labels) { \***************************************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -4939,6 +4989,7 @@ function addKeyframes(sequence, keyframes, easing, offset, startTime, endTime) { \***************************************************************************/ /***/ (function(__unused_webpack_module, exports) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -4961,6 +5012,7 @@ function compareByTime(a, b) { \******************************************************************************/ /***/ (function(__unused_webpack_module, exports) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -4993,6 +5045,7 @@ function resolveElements(elements, selectorCache) { \*********************************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -5040,6 +5093,7 @@ function resolveOption(option, i, total) { \***********************************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -5102,6 +5156,7 @@ function cubicBezier(mX1, mY1, mX2, mY2) { \****************************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -5130,6 +5185,7 @@ var _stepsEs = __webpack_require__(/*! ./steps.es.js */ "../../../node_modules/@ \****************************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -5153,6 +5209,7 @@ exports.steps = steps; \**************************************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -5264,6 +5321,7 @@ exports.glide = glide; \********************************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -5306,6 +5364,7 @@ var _velocityEs = __webpack_require__(/*! ./utils/velocity.es.js */ "../../../no \******************************************************************************/ /***/ (function(__unused_webpack_module, exports) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -5326,6 +5385,7 @@ const defaults = exports.defaults = { \***************************************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -5388,6 +5448,7 @@ exports.spring = spring; \***************************************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -5406,6 +5467,7 @@ exports.calcDampingRatio = calcDampingRatio; \***************************************************************************************/ /***/ (function(__unused_webpack_module, exports) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -5424,6 +5486,7 @@ function hasReachedTarget(origin, target, current) { \******************************************************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -5467,6 +5530,7 @@ function pregenerateKeyframes(generator, toUnit = _utils.noopReturn) { \*****************************************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -5488,6 +5552,7 @@ function calcGeneratorVelocity(resolveValue, t, current) { \*********************************************************************/ /***/ (function(__unused_webpack_module, exports) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -5519,6 +5584,7 @@ exports.MotionValue = MotionValue; \***************************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -5540,6 +5606,7 @@ var _MotionValueEs = __webpack_require__(/*! ./MotionValue.es.js */ "../../../no \***************************************************************/ /***/ (function(__unused_webpack_module, exports) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -5563,6 +5630,7 @@ function removeItem(arr, item) { \***************************************************************/ /***/ (function(__unused_webpack_module, exports) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -5580,6 +5648,7 @@ exports.clamp = clamp; \******************************************************************/ /***/ (function(__unused_webpack_module, exports) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -5602,6 +5671,7 @@ const defaults = exports.defaults = { \****************************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -5622,6 +5692,7 @@ function getEasingForSegment(easing, i) { \***************************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -5780,6 +5851,7 @@ var _wrapEs = __webpack_require__(/*! ./wrap.es.js */ "../../../node_modules/@mo \*********************************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -5822,6 +5894,7 @@ function interpolate(output, input = (0, _offsetEs.defaultOffset)(output.length) \*************************************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -5840,6 +5913,7 @@ exports.isCubicBezier = isCubicBezier; \*****************************************************************************/ /***/ (function(__unused_webpack_module, exports) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -5857,6 +5931,7 @@ exports.isEasingGenerator = isEasingGenerator; \************************************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -5875,6 +5950,7 @@ exports.isEasingList = isEasingList; \*********************************************************************/ /***/ (function(__unused_webpack_module, exports) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -5892,6 +5968,7 @@ exports.isFunction = isFunction; \*******************************************************************/ /***/ (function(__unused_webpack_module, exports) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -5909,6 +5986,7 @@ exports.isNumber = isNumber; \*******************************************************************/ /***/ (function(__unused_webpack_module, exports) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -5926,6 +6004,7 @@ exports.isString = isString; \*************************************************************/ /***/ (function(__unused_webpack_module, exports) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -5943,6 +6022,7 @@ exports.mix = mix; \**************************************************************/ /***/ (function(__unused_webpack_module, exports) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -5962,6 +6042,7 @@ exports.noopReturn = noopReturn; \****************************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -5992,6 +6073,7 @@ function defaultOffset(length) { \******************************************************************/ /***/ (function(__unused_webpack_module, exports) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -6009,6 +6091,7 @@ exports.progress = progress; \**************************************************************/ /***/ (function(__unused_webpack_module, exports) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -6028,6 +6111,7 @@ const time = exports.time = { \******************************************************************/ /***/ (function(__unused_webpack_module, exports) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -6052,6 +6136,7 @@ function velocityPerSecond(velocity, frameDuration) { \**************************************************************/ /***/ (function(__unused_webpack_module, exports) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -6072,6 +6157,7 @@ exports.wrap = wrap; \********************************************************************************/ /***/ (function(__unused_webpack_module, exports) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -6214,6 +6300,7 @@ exports.makePushPullAsyncIterableIterator = makePushPullAsyncIterableIterator; \***************************************************************/ /***/ (function(module) { +"use strict"; function $parcel$export(e, n, v, s) { @@ -6242,6 +6329,7 @@ function $1a6a90a521dcd173$export$b9ecd428b558ff10(originalEventHandler, ourEven \*****************************************************************/ /***/ (function(module, __unused_webpack_exports, __webpack_require__) { +"use strict"; var $eQpDd$babelruntimehelpersextends = __webpack_require__(/*! @babel/runtime/helpers/extends */ "../../../node_modules/@babel/runtime/helpers/extends.js"); @@ -6297,6 +6385,7 @@ const $09f4ad68a9251bc3$export$be92b6f5f03c0fe9 = $09f4ad68a9251bc3$export$21b07 \**********************************************************************/ /***/ (function(module, __unused_webpack_exports, __webpack_require__) { +"use strict"; var $hnlpS$react = __webpack_require__(/*! react */ "react"); @@ -6428,6 +6517,7 @@ function $1a96635ec239608b$export$c74125a8e3af6bb2(name) { \************************************************************************/ /***/ (function(module, __unused_webpack_exports, __webpack_require__) { +"use strict"; var $dJwbH$react = __webpack_require__(/*! react */ "react"); @@ -6473,6 +6563,7 @@ function $9c2aaba23466b352$export$c7b2cbe3552a0d05(...refs) { \*******************************************************************/ /***/ (function(module, __unused_webpack_exports, __webpack_require__) { +"use strict"; var $4O1Ne$react = __webpack_require__(/*! react */ "react"); @@ -6606,6 +6697,7 @@ function $dec3cc0142d4f286$var$composeContextScopes(...scopes) { \******************************************************************/ /***/ (function(module, __unused_webpack_exports, __webpack_require__) { +"use strict"; var $aJCrN$babelruntimehelpersextends = __webpack_require__(/*! @babel/runtime/helpers/extends */ "../../../node_modules/@babel/runtime/helpers/extends.js"); @@ -7041,6 +7133,7 @@ const $f4833395aa1bca1a$export$f39c2d165cd861fe = $f4833395aa1bca1a$export$fba2f \*********************************************************************/ /***/ (function(module, __unused_webpack_exports, __webpack_require__) { +"use strict"; var $9g4ps$react = __webpack_require__(/*! react */ "react"); @@ -7083,6 +7176,7 @@ const $cc45c1b701a63adc$export$2881499e37b75b9a = $cc45c1b701a63adc$export$c760c \*****************************************************************************/ /***/ (function(module, __unused_webpack_exports, __webpack_require__) { +"use strict"; var $g2vWm$babelruntimehelpersextends = __webpack_require__(/*! @babel/runtime/helpers/extends */ "../../../node_modules/@babel/runtime/helpers/extends.js"); @@ -7366,6 +7460,7 @@ const $d715e0554b679f1f$export$aecb2ddcb55c95be = $d715e0554b679f1f$export$4d5eb \*************************************************************************/ /***/ (function(module, __unused_webpack_exports, __webpack_require__) { +"use strict"; var $7dQ7Q$babelruntimehelpersextends = __webpack_require__(/*! @babel/runtime/helpers/extends */ "../../../node_modules/@babel/runtime/helpers/extends.js"); @@ -7826,6 +7921,7 @@ const $d1bf075a6b218014$export$6d4de93b380beddf = $d1bf075a6b218014$export$f34ec \************************************************************************/ /***/ (function(module, __unused_webpack_exports, __webpack_require__) { +"use strict"; var $cnctE$react = __webpack_require__(/*! react */ "react"); @@ -7881,6 +7977,7 @@ const $71476a6ed7dbbaf3$export$be92b6f5f03c0fe9 = $71476a6ed7dbbaf3$export$ac5b5 \***********************************************************************/ /***/ (function(module, __unused_webpack_exports, __webpack_require__) { +"use strict"; var $buum9$babelruntimehelpersextends = __webpack_require__(/*! @babel/runtime/helpers/extends */ "../../../node_modules/@babel/runtime/helpers/extends.js"); @@ -8186,6 +8283,7 @@ const $2bc01e66e04aa9ed$export$be92b6f5f03c0fe9 = $2bc01e66e04aa9ed$export$20e40 \**************************************************************/ /***/ (function(module, __unused_webpack_exports, __webpack_require__) { +"use strict"; var $47woD$react = __webpack_require__(/*! react */ "react"); @@ -8217,6 +8315,7 @@ function $dc478e4659f630c5$export$f680877a34711e37(deterministicId) { \****************************************************************/ /***/ (function(module, __unused_webpack_exports, __webpack_require__) { +"use strict"; var $cnSS2$babelruntimehelpersextends = __webpack_require__(/*! @babel/runtime/helpers/extends */ "../../../node_modules/@babel/runtime/helpers/extends.js"); @@ -9284,6 +9383,7 @@ const $213e4d2df823067d$export$6d4de93b380beddf = $213e4d2df823067d$export$e7142 \******************************************************************/ /***/ (function(module, __unused_webpack_exports, __webpack_require__) { +"use strict"; var $50Iv9$babelruntimehelpersextends = __webpack_require__(/*! @babel/runtime/helpers/extends */ "../../../node_modules/@babel/runtime/helpers/extends.js"); @@ -9639,6 +9739,7 @@ const $34310caa050a8d63$export$21b07c8f274aebd5 = $34310caa050a8d63$export$79d62 \******************************************************************/ /***/ (function(module, __unused_webpack_exports, __webpack_require__) { +"use strict"; var $amzHf$babelruntimehelpersextends = __webpack_require__(/*! @babel/runtime/helpers/extends */ "../../../node_modules/@babel/runtime/helpers/extends.js"); @@ -9688,6 +9789,7 @@ const $913a70b877676c16$export$be92b6f5f03c0fe9 = $913a70b877676c16$export$602ea \********************************************************************/ /***/ (function(module, __unused_webpack_exports, __webpack_require__) { +"use strict"; var $fnLeV$react = __webpack_require__(/*! react */ "react"); @@ -9829,6 +9931,7 @@ function $a2fa0214bb2735a1$var$getAnimationName(styles) { \*********************************************************************/ /***/ (function(module, __unused_webpack_exports, __webpack_require__) { +"use strict"; var $iMixA$babelruntimehelpersextends = __webpack_require__(/*! @babel/runtime/helpers/extends */ "../../../node_modules/@babel/runtime/helpers/extends.js"); @@ -9927,6 +10030,7 @@ const $c3def6332c2749a6$export$be92b6f5f03c0fe9 = $c3def6332c2749a6$export$250ff \************************************************************************/ /***/ (function(module, __unused_webpack_exports, __webpack_require__) { +"use strict"; var $9QJ9Y$babelruntimehelpersextends = __webpack_require__(/*! @babel/runtime/helpers/extends */ "../../../node_modules/@babel/runtime/helpers/extends.js"); @@ -10180,6 +10284,7 @@ const $0063afae63b3fa70$export$6d08773d2e66f8f2 = $0063afae63b3fa70$export$ab9df \****************************************************************/ /***/ (function(module, __unused_webpack_exports, __webpack_require__) { +"use strict"; var $dAvBt$babelruntimehelpersextends = __webpack_require__(/*! @babel/runtime/helpers/extends */ "../../../node_modules/@babel/runtime/helpers/extends.js"); @@ -10292,6 +10397,7 @@ const $82dc8d030dec7549$export$be92b6f5f03c0fe9 = $82dc8d030dec7549$export$8c6ed \*******************************************************************/ /***/ (function(module, __unused_webpack_exports, __webpack_require__) { +"use strict"; var $iVrL9$babelruntimehelpersextends = __webpack_require__(/*! @babel/runtime/helpers/extends */ "../../../node_modules/@babel/runtime/helpers/extends.js"); @@ -10873,6 +10979,7 @@ const $c34afbc43c90cc6f$export$21b07c8f274aebd5 = $c34afbc43c90cc6f$export$c27ee \****************************************************************************/ /***/ (function(module, __unused_webpack_exports, __webpack_require__) { +"use strict"; var $92muK$react = __webpack_require__(/*! react */ "react"); @@ -10909,6 +11016,7 @@ function $28e03942f763e819$export$25bec8c6f54ee79a(callback) { \**********************************************************************************/ /***/ (function(module, __unused_webpack_exports, __webpack_require__) { +"use strict"; var $ijazI$react = __webpack_require__(/*! react */ "react"); @@ -10968,6 +11076,7 @@ function $b84d42d44371bff7$var$useUncontrolledState({ \******************************************************************************/ /***/ (function(module, __unused_webpack_exports, __webpack_require__) { +"use strict"; var $b0gz3$react = __webpack_require__(/*! react */ "react"); @@ -11004,6 +11113,7 @@ function $24c84e9f83c4454f$export$3a72a57244d6e765(onEscapeKeyDownProp, ownerDoc \*****************************************************************************/ /***/ (function(module, __unused_webpack_exports, __webpack_require__) { +"use strict"; var $caHyQ$react = __webpack_require__(/*! react */ "react"); @@ -11034,6 +11144,7 @@ const $ca21affb0542a8a4$export$e5c5a5f917a5871c = Boolean(globalThis === null || \********************************************************************/ /***/ (function(module, __unused_webpack_exports, __webpack_require__) { +"use strict"; var $ksDzM$react = __webpack_require__(/*! react */ "react"); @@ -11100,6 +11211,7 @@ function $d2c1d285af17635b$export$1ab7ae714698c4b8(element) { \***************************************************************************/ /***/ (function(module, __unused_webpack_exports, __webpack_require__) { +"use strict"; var $awrN2$babelruntimehelpersextends = __webpack_require__(/*! @babel/runtime/helpers/extends */ "../../../node_modules/@babel/runtime/helpers/extends.js"); @@ -11157,6 +11269,7 @@ const $685371e9c20848e2$export$be92b6f5f03c0fe9 = $685371e9c20848e2$export$439d2 \**************************************************************/ /***/ (function(__unused_webpack_module, exports) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -11346,6 +11459,7 @@ exports.suppressOthers = suppressOthers; \*************************************************/ /***/ (function(__unused_webpack_module, exports) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -11368,12 +11482,17149 @@ var _default = exports["default"] = clsx; /***/ }), +/***/ "../../../node_modules/codemirror/addon/comment/comment.js": +/*!*****************************************************************!*\ + !*** ../../../node_modules/codemirror/addon/comment/comment.js ***! + \*****************************************************************/ +/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) { + +"use strict"; + + +// CodeMirror, copyright (c) by Marijn Haverbeke and others +// Distributed under an MIT license: https://codemirror.net/LICENSE + +(function (mod) { + if (true) + // CommonJS + mod(__webpack_require__(/*! ../../lib/codemirror */ "../../../node_modules/codemirror/lib/codemirror.js"));else {} +})(function (CodeMirror) { + "use strict"; + + var noOptions = {}; + var nonWS = /[^\s\u00a0]/; + var Pos = CodeMirror.Pos, + cmp = CodeMirror.cmpPos; + function firstNonWS(str) { + var found = str.search(nonWS); + return found == -1 ? 0 : found; + } + CodeMirror.commands.toggleComment = function (cm) { + cm.toggleComment(); + }; + CodeMirror.defineExtension("toggleComment", function (options) { + if (!options) options = noOptions; + var cm = this; + var minLine = Infinity, + ranges = this.listSelections(), + mode = null; + for (var i = ranges.length - 1; i >= 0; i--) { + var from = ranges[i].from(), + to = ranges[i].to(); + if (from.line >= minLine) continue; + if (to.line >= minLine) to = Pos(minLine, 0); + minLine = from.line; + if (mode == null) { + if (cm.uncomment(from, to, options)) mode = "un";else { + cm.lineComment(from, to, options); + mode = "line"; + } + } else if (mode == "un") { + cm.uncomment(from, to, options); + } else { + cm.lineComment(from, to, options); + } + } + }); + + // Rough heuristic to try and detect lines that are part of multi-line string + function probablyInsideString(cm, pos, line) { + return /\bstring\b/.test(cm.getTokenTypeAt(Pos(pos.line, 0))) && !/^[\'\"\`]/.test(line); + } + function getMode(cm, pos) { + var mode = cm.getMode(); + return mode.useInnerComments === false || !mode.innerMode ? mode : cm.getModeAt(pos); + } + CodeMirror.defineExtension("lineComment", function (from, to, options) { + if (!options) options = noOptions; + var self = this, + mode = getMode(self, from); + var firstLine = self.getLine(from.line); + if (firstLine == null || probablyInsideString(self, from, firstLine)) return; + var commentString = options.lineComment || mode.lineComment; + if (!commentString) { + if (options.blockCommentStart || mode.blockCommentStart) { + options.fullLines = true; + self.blockComment(from, to, options); + } + return; + } + var end = Math.min(to.ch != 0 || to.line == from.line ? to.line + 1 : to.line, self.lastLine() + 1); + var pad = options.padding == null ? " " : options.padding; + var blankLines = options.commentBlankLines || from.line == to.line; + self.operation(function () { + if (options.indent) { + var baseString = null; + for (var i = from.line; i < end; ++i) { + var line = self.getLine(i); + var whitespace = line.slice(0, firstNonWS(line)); + if (baseString == null || baseString.length > whitespace.length) { + baseString = whitespace; + } + } + for (var i = from.line; i < end; ++i) { + var line = self.getLine(i), + cut = baseString.length; + if (!blankLines && !nonWS.test(line)) continue; + if (line.slice(0, cut) != baseString) cut = firstNonWS(line); + self.replaceRange(baseString + commentString + pad, Pos(i, 0), Pos(i, cut)); + } + } else { + for (var i = from.line; i < end; ++i) { + if (blankLines || nonWS.test(self.getLine(i))) self.replaceRange(commentString + pad, Pos(i, 0)); + } + } + }); + }); + CodeMirror.defineExtension("blockComment", function (from, to, options) { + if (!options) options = noOptions; + var self = this, + mode = getMode(self, from); + var startString = options.blockCommentStart || mode.blockCommentStart; + var endString = options.blockCommentEnd || mode.blockCommentEnd; + if (!startString || !endString) { + if ((options.lineComment || mode.lineComment) && options.fullLines != false) self.lineComment(from, to, options); + return; + } + if (/\bcomment\b/.test(self.getTokenTypeAt(Pos(from.line, 0)))) return; + var end = Math.min(to.line, self.lastLine()); + if (end != from.line && to.ch == 0 && nonWS.test(self.getLine(end))) --end; + var pad = options.padding == null ? " " : options.padding; + if (from.line > end) return; + self.operation(function () { + if (options.fullLines != false) { + var lastLineHasText = nonWS.test(self.getLine(end)); + self.replaceRange(pad + endString, Pos(end)); + self.replaceRange(startString + pad, Pos(from.line, 0)); + var lead = options.blockCommentLead || mode.blockCommentLead; + if (lead != null) for (var i = from.line + 1; i <= end; ++i) if (i != end || lastLineHasText) self.replaceRange(lead + pad, Pos(i, 0)); + } else { + var atCursor = cmp(self.getCursor("to"), to) == 0, + empty = !self.somethingSelected(); + self.replaceRange(endString, to); + if (atCursor) self.setSelection(empty ? to : self.getCursor("from"), to); + self.replaceRange(startString, from); + } + }); + }); + CodeMirror.defineExtension("uncomment", function (from, to, options) { + if (!options) options = noOptions; + var self = this, + mode = getMode(self, from); + var end = Math.min(to.ch != 0 || to.line == from.line ? to.line : to.line - 1, self.lastLine()), + start = Math.min(from.line, end); + + // Try finding line comments + var lineString = options.lineComment || mode.lineComment, + lines = []; + var pad = options.padding == null ? " " : options.padding, + didSomething; + lineComment: { + if (!lineString) break lineComment; + for (var i = start; i <= end; ++i) { + var line = self.getLine(i); + var found = line.indexOf(lineString); + if (found > -1 && !/comment/.test(self.getTokenTypeAt(Pos(i, found + 1)))) found = -1; + if (found == -1 && nonWS.test(line)) break lineComment; + if (found > -1 && nonWS.test(line.slice(0, found))) break lineComment; + lines.push(line); + } + self.operation(function () { + for (var i = start; i <= end; ++i) { + var line = lines[i - start]; + var pos = line.indexOf(lineString), + endPos = pos + lineString.length; + if (pos < 0) continue; + if (line.slice(endPos, endPos + pad.length) == pad) endPos += pad.length; + didSomething = true; + self.replaceRange("", Pos(i, pos), Pos(i, endPos)); + } + }); + if (didSomething) return true; + } + + // Try block comments + var startString = options.blockCommentStart || mode.blockCommentStart; + var endString = options.blockCommentEnd || mode.blockCommentEnd; + if (!startString || !endString) return false; + var lead = options.blockCommentLead || mode.blockCommentLead; + var startLine = self.getLine(start), + open = startLine.indexOf(startString); + if (open == -1) return false; + var endLine = end == start ? startLine : self.getLine(end); + var close = endLine.indexOf(endString, end == start ? open + startString.length : 0); + var insideStart = Pos(start, open + 1), + insideEnd = Pos(end, close + 1); + if (close == -1 || !/comment/.test(self.getTokenTypeAt(insideStart)) || !/comment/.test(self.getTokenTypeAt(insideEnd)) || self.getRange(insideStart, insideEnd, "\n").indexOf(endString) > -1) return false; + + // Avoid killing block comments completely outside the selection. + // Positions of the last startString before the start of the selection, and the first endString after it. + var lastStart = startLine.lastIndexOf(startString, from.ch); + var firstEnd = lastStart == -1 ? -1 : startLine.slice(0, from.ch).indexOf(endString, lastStart + startString.length); + if (lastStart != -1 && firstEnd != -1 && firstEnd + endString.length != from.ch) return false; + // Positions of the first endString after the end of the selection, and the last startString before it. + firstEnd = endLine.indexOf(endString, to.ch); + var almostLastStart = endLine.slice(to.ch).lastIndexOf(startString, firstEnd - to.ch); + lastStart = firstEnd == -1 || almostLastStart == -1 ? -1 : to.ch + almostLastStart; + if (firstEnd != -1 && lastStart != -1 && lastStart != to.ch) return false; + self.operation(function () { + self.replaceRange("", Pos(end, close - (pad && endLine.slice(close - pad.length, close) == pad ? pad.length : 0)), Pos(end, close + endString.length)); + var openEnd = open + startString.length; + if (pad && startLine.slice(openEnd, openEnd + pad.length) == pad) openEnd += pad.length; + self.replaceRange("", Pos(start, open), Pos(start, openEnd)); + if (lead) for (var i = start + 1; i <= end; ++i) { + var line = self.getLine(i), + found = line.indexOf(lead); + if (found == -1 || nonWS.test(line.slice(0, found))) continue; + var foundEnd = found + lead.length; + if (pad && line.slice(foundEnd, foundEnd + pad.length) == pad) foundEnd += pad.length; + self.replaceRange("", Pos(i, found), Pos(i, foundEnd)); + } + }); + return true; + }); +}); + +/***/ }), + +/***/ "../../../node_modules/codemirror/addon/dialog/dialog.js": +/*!***************************************************************!*\ + !*** ../../../node_modules/codemirror/addon/dialog/dialog.js ***! + \***************************************************************/ +/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) { + +"use strict"; + + +// CodeMirror, copyright (c) by Marijn Haverbeke and others +// Distributed under an MIT license: https://codemirror.net/LICENSE + +// Open simple dialogs on top of an editor. Relies on dialog.css. + +(function (mod) { + if (true) + // CommonJS + mod(__webpack_require__(/*! ../../lib/codemirror */ "../../../node_modules/codemirror/lib/codemirror.js"));else {} +})(function (CodeMirror) { + function dialogDiv(cm, template, bottom) { + var wrap = cm.getWrapperElement(); + var dialog; + dialog = wrap.appendChild(document.createElement("div")); + if (bottom) dialog.className = "CodeMirror-dialog CodeMirror-dialog-bottom";else dialog.className = "CodeMirror-dialog CodeMirror-dialog-top"; + if (typeof template == "string") { + dialog.innerHTML = template; + } else { + // Assuming it's a detached DOM element. + dialog.appendChild(template); + } + CodeMirror.addClass(wrap, 'dialog-opened'); + return dialog; + } + function closeNotification(cm, newVal) { + if (cm.state.currentNotificationClose) cm.state.currentNotificationClose(); + cm.state.currentNotificationClose = newVal; + } + CodeMirror.defineExtension("openDialog", function (template, callback, options) { + if (!options) options = {}; + closeNotification(this, null); + var dialog = dialogDiv(this, template, options.bottom); + var closed = false, + me = this; + function close(newVal) { + if (typeof newVal == 'string') { + inp.value = newVal; + } else { + if (closed) return; + closed = true; + CodeMirror.rmClass(dialog.parentNode, 'dialog-opened'); + dialog.parentNode.removeChild(dialog); + me.focus(); + if (options.onClose) options.onClose(dialog); + } + } + var inp = dialog.getElementsByTagName("input")[0], + button; + if (inp) { + inp.focus(); + if (options.value) { + inp.value = options.value; + if (options.selectValueOnOpen !== false) { + inp.select(); + } + } + if (options.onInput) CodeMirror.on(inp, "input", function (e) { + options.onInput(e, inp.value, close); + }); + if (options.onKeyUp) CodeMirror.on(inp, "keyup", function (e) { + options.onKeyUp(e, inp.value, close); + }); + CodeMirror.on(inp, "keydown", function (e) { + if (options && options.onKeyDown && options.onKeyDown(e, inp.value, close)) { + return; + } + if (e.keyCode == 27 || options.closeOnEnter !== false && e.keyCode == 13) { + inp.blur(); + CodeMirror.e_stop(e); + close(); + } + if (e.keyCode == 13) callback(inp.value, e); + }); + if (options.closeOnBlur !== false) CodeMirror.on(dialog, "focusout", function (evt) { + if (evt.relatedTarget !== null) close(); + }); + } else if (button = dialog.getElementsByTagName("button")[0]) { + CodeMirror.on(button, "click", function () { + close(); + me.focus(); + }); + if (options.closeOnBlur !== false) CodeMirror.on(button, "blur", close); + button.focus(); + } + return close; + }); + CodeMirror.defineExtension("openConfirm", function (template, callbacks, options) { + closeNotification(this, null); + var dialog = dialogDiv(this, template, options && options.bottom); + var buttons = dialog.getElementsByTagName("button"); + var closed = false, + me = this, + blurring = 1; + function close() { + if (closed) return; + closed = true; + CodeMirror.rmClass(dialog.parentNode, 'dialog-opened'); + dialog.parentNode.removeChild(dialog); + me.focus(); + } + buttons[0].focus(); + for (var i = 0; i < buttons.length; ++i) { + var b = buttons[i]; + (function (callback) { + CodeMirror.on(b, "click", function (e) { + CodeMirror.e_preventDefault(e); + close(); + if (callback) callback(me); + }); + })(callbacks[i]); + CodeMirror.on(b, "blur", function () { + --blurring; + setTimeout(function () { + if (blurring <= 0) close(); + }, 200); + }); + CodeMirror.on(b, "focus", function () { + ++blurring; + }); + } + }); + + /* + * openNotification + * Opens a notification, that can be closed with an optional timer + * (default 5000ms timer) and always closes on click. + * + * If a notification is opened while another is opened, it will close the + * currently opened one and open the new one immediately. + */ + CodeMirror.defineExtension("openNotification", function (template, options) { + closeNotification(this, close); + var dialog = dialogDiv(this, template, options && options.bottom); + var closed = false, + doneTimer; + var duration = options && typeof options.duration !== "undefined" ? options.duration : 5000; + function close() { + if (closed) return; + closed = true; + clearTimeout(doneTimer); + CodeMirror.rmClass(dialog.parentNode, 'dialog-opened'); + dialog.parentNode.removeChild(dialog); + } + CodeMirror.on(dialog, 'click', function (e) { + CodeMirror.e_preventDefault(e); + close(); + }); + if (duration) doneTimer = setTimeout(close, duration); + return close; + }); +}); + +/***/ }), + +/***/ "../../../node_modules/codemirror/addon/edit/closebrackets.js": +/*!********************************************************************!*\ + !*** ../../../node_modules/codemirror/addon/edit/closebrackets.js ***! + \********************************************************************/ +/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) { + +"use strict"; + + +// CodeMirror, copyright (c) by Marijn Haverbeke and others +// Distributed under an MIT license: https://codemirror.net/LICENSE + +(function (mod) { + if (true) + // CommonJS + mod(__webpack_require__(/*! ../../lib/codemirror */ "../../../node_modules/codemirror/lib/codemirror.js"));else {} +})(function (CodeMirror) { + var defaults = { + pairs: "()[]{}''\"\"", + closeBefore: ")]}'\":;>", + triples: "", + explode: "[]{}" + }; + var Pos = CodeMirror.Pos; + CodeMirror.defineOption("autoCloseBrackets", false, function (cm, val, old) { + if (old && old != CodeMirror.Init) { + cm.removeKeyMap(keyMap); + cm.state.closeBrackets = null; + } + if (val) { + ensureBound(getOption(val, "pairs")); + cm.state.closeBrackets = val; + cm.addKeyMap(keyMap); + } + }); + function getOption(conf, name) { + if (name == "pairs" && typeof conf == "string") return conf; + if (typeof conf == "object" && conf[name] != null) return conf[name]; + return defaults[name]; + } + var keyMap = { + Backspace: handleBackspace, + Enter: handleEnter + }; + function ensureBound(chars) { + for (var i = 0; i < chars.length; i++) { + var ch = chars.charAt(i), + key = "'" + ch + "'"; + if (!keyMap[key]) keyMap[key] = handler(ch); + } + } + ensureBound(defaults.pairs + "`"); + function handler(ch) { + return function (cm) { + return handleChar(cm, ch); + }; + } + function getConfig(cm) { + var deflt = cm.state.closeBrackets; + if (!deflt || deflt.override) return deflt; + var mode = cm.getModeAt(cm.getCursor()); + return mode.closeBrackets || deflt; + } + function handleBackspace(cm) { + var conf = getConfig(cm); + if (!conf || cm.getOption("disableInput")) return CodeMirror.Pass; + var pairs = getOption(conf, "pairs"); + var ranges = cm.listSelections(); + for (var i = 0; i < ranges.length; i++) { + if (!ranges[i].empty()) return CodeMirror.Pass; + var around = charsAround(cm, ranges[i].head); + if (!around || pairs.indexOf(around) % 2 != 0) return CodeMirror.Pass; + } + for (var i = ranges.length - 1; i >= 0; i--) { + var cur = ranges[i].head; + cm.replaceRange("", Pos(cur.line, cur.ch - 1), Pos(cur.line, cur.ch + 1), "+delete"); + } + } + function handleEnter(cm) { + var conf = getConfig(cm); + var explode = conf && getOption(conf, "explode"); + if (!explode || cm.getOption("disableInput")) return CodeMirror.Pass; + var ranges = cm.listSelections(); + for (var i = 0; i < ranges.length; i++) { + if (!ranges[i].empty()) return CodeMirror.Pass; + var around = charsAround(cm, ranges[i].head); + if (!around || explode.indexOf(around) % 2 != 0) return CodeMirror.Pass; + } + cm.operation(function () { + var linesep = cm.lineSeparator() || "\n"; + cm.replaceSelection(linesep + linesep, null); + moveSel(cm, -1); + ranges = cm.listSelections(); + for (var i = 0; i < ranges.length; i++) { + var line = ranges[i].head.line; + cm.indentLine(line, null, true); + cm.indentLine(line + 1, null, true); + } + }); + } + function moveSel(cm, dir) { + var newRanges = [], + ranges = cm.listSelections(), + primary = 0; + for (var i = 0; i < ranges.length; i++) { + var range = ranges[i]; + if (range.head == cm.getCursor()) primary = i; + var pos = range.head.ch || dir > 0 ? { + line: range.head.line, + ch: range.head.ch + dir + } : { + line: range.head.line - 1 + }; + newRanges.push({ + anchor: pos, + head: pos + }); + } + cm.setSelections(newRanges, primary); + } + function contractSelection(sel) { + var inverted = CodeMirror.cmpPos(sel.anchor, sel.head) > 0; + return { + anchor: new Pos(sel.anchor.line, sel.anchor.ch + (inverted ? -1 : 1)), + head: new Pos(sel.head.line, sel.head.ch + (inverted ? 1 : -1)) + }; + } + function handleChar(cm, ch) { + var conf = getConfig(cm); + if (!conf || cm.getOption("disableInput")) return CodeMirror.Pass; + var pairs = getOption(conf, "pairs"); + var pos = pairs.indexOf(ch); + if (pos == -1) return CodeMirror.Pass; + var closeBefore = getOption(conf, "closeBefore"); + var triples = getOption(conf, "triples"); + var identical = pairs.charAt(pos + 1) == ch; + var ranges = cm.listSelections(); + var opening = pos % 2 == 0; + var type; + for (var i = 0; i < ranges.length; i++) { + var range = ranges[i], + cur = range.head, + curType; + var next = cm.getRange(cur, Pos(cur.line, cur.ch + 1)); + if (opening && !range.empty()) { + curType = "surround"; + } else if ((identical || !opening) && next == ch) { + if (identical && stringStartsAfter(cm, cur)) curType = "both";else if (triples.indexOf(ch) >= 0 && cm.getRange(cur, Pos(cur.line, cur.ch + 3)) == ch + ch + ch) curType = "skipThree";else curType = "skip"; + } else if (identical && cur.ch > 1 && triples.indexOf(ch) >= 0 && cm.getRange(Pos(cur.line, cur.ch - 2), cur) == ch + ch) { + if (cur.ch > 2 && /\bstring/.test(cm.getTokenTypeAt(Pos(cur.line, cur.ch - 2)))) return CodeMirror.Pass; + curType = "addFour"; + } else if (identical) { + var prev = cur.ch == 0 ? " " : cm.getRange(Pos(cur.line, cur.ch - 1), cur); + if (!CodeMirror.isWordChar(next) && prev != ch && !CodeMirror.isWordChar(prev)) curType = "both";else return CodeMirror.Pass; + } else if (opening && (next.length === 0 || /\s/.test(next) || closeBefore.indexOf(next) > -1)) { + curType = "both"; + } else { + return CodeMirror.Pass; + } + if (!type) type = curType;else if (type != curType) return CodeMirror.Pass; + } + var left = pos % 2 ? pairs.charAt(pos - 1) : ch; + var right = pos % 2 ? ch : pairs.charAt(pos + 1); + cm.operation(function () { + if (type == "skip") { + moveSel(cm, 1); + } else if (type == "skipThree") { + moveSel(cm, 3); + } else if (type == "surround") { + var sels = cm.getSelections(); + for (var i = 0; i < sels.length; i++) sels[i] = left + sels[i] + right; + cm.replaceSelections(sels, "around"); + sels = cm.listSelections().slice(); + for (var i = 0; i < sels.length; i++) sels[i] = contractSelection(sels[i]); + cm.setSelections(sels); + } else if (type == "both") { + cm.replaceSelection(left + right, null); + cm.triggerElectric(left + right); + moveSel(cm, -1); + } else if (type == "addFour") { + cm.replaceSelection(left + left + left + left, "before"); + moveSel(cm, 1); + } + }); + } + function charsAround(cm, pos) { + var str = cm.getRange(Pos(pos.line, pos.ch - 1), Pos(pos.line, pos.ch + 1)); + return str.length == 2 ? str : null; + } + function stringStartsAfter(cm, pos) { + var token = cm.getTokenAt(Pos(pos.line, pos.ch + 1)); + return /\bstring/.test(token.type) && token.start == pos.ch && (pos.ch == 0 || !/\bstring/.test(cm.getTokenTypeAt(pos))); + } +}); + +/***/ }), + +/***/ "../../../node_modules/codemirror/addon/edit/matchbrackets.js": +/*!********************************************************************!*\ + !*** ../../../node_modules/codemirror/addon/edit/matchbrackets.js ***! + \********************************************************************/ +/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) { + +"use strict"; + + +// CodeMirror, copyright (c) by Marijn Haverbeke and others +// Distributed under an MIT license: https://codemirror.net/LICENSE + +(function (mod) { + if (true) + // CommonJS + mod(__webpack_require__(/*! ../../lib/codemirror */ "../../../node_modules/codemirror/lib/codemirror.js"));else {} +})(function (CodeMirror) { + var ie_lt8 = /MSIE \d/.test(navigator.userAgent) && (document.documentMode == null || document.documentMode < 8); + var Pos = CodeMirror.Pos; + var matching = { + "(": ")>", + ")": "(<", + "[": "]>", + "]": "[<", + "{": "}>", + "}": "{<", + "<": ">>", + ">": "<<" + }; + function bracketRegex(config) { + return config && config.bracketRegex || /[(){}[\]]/; + } + function findMatchingBracket(cm, where, config) { + var line = cm.getLineHandle(where.line), + pos = where.ch - 1; + var afterCursor = config && config.afterCursor; + if (afterCursor == null) afterCursor = /(^| )cm-fat-cursor($| )/.test(cm.getWrapperElement().className); + var re = bracketRegex(config); + + // A cursor is defined as between two characters, but in in vim command mode + // (i.e. not insert mode), the cursor is visually represented as a + // highlighted box on top of the 2nd character. Otherwise, we allow matches + // from before or after the cursor. + var match = !afterCursor && pos >= 0 && re.test(line.text.charAt(pos)) && matching[line.text.charAt(pos)] || re.test(line.text.charAt(pos + 1)) && matching[line.text.charAt(++pos)]; + if (!match) return null; + var dir = match.charAt(1) == ">" ? 1 : -1; + if (config && config.strict && dir > 0 != (pos == where.ch)) return null; + var style = cm.getTokenTypeAt(Pos(where.line, pos + 1)); + var found = scanForBracket(cm, Pos(where.line, pos + (dir > 0 ? 1 : 0)), dir, style, config); + if (found == null) return null; + return { + from: Pos(where.line, pos), + to: found && found.pos, + match: found && found.ch == match.charAt(0), + forward: dir > 0 + }; + } + + // bracketRegex is used to specify which type of bracket to scan + // should be a regexp, e.g. /[[\]]/ + // + // Note: If "where" is on an open bracket, then this bracket is ignored. + // + // Returns false when no bracket was found, null when it reached + // maxScanLines and gave up + function scanForBracket(cm, where, dir, style, config) { + var maxScanLen = config && config.maxScanLineLength || 10000; + var maxScanLines = config && config.maxScanLines || 1000; + var stack = []; + var re = bracketRegex(config); + var lineEnd = dir > 0 ? Math.min(where.line + maxScanLines, cm.lastLine() + 1) : Math.max(cm.firstLine() - 1, where.line - maxScanLines); + for (var lineNo = where.line; lineNo != lineEnd; lineNo += dir) { + var line = cm.getLine(lineNo); + if (!line) continue; + var pos = dir > 0 ? 0 : line.length - 1, + end = dir > 0 ? line.length : -1; + if (line.length > maxScanLen) continue; + if (lineNo == where.line) pos = where.ch - (dir < 0 ? 1 : 0); + for (; pos != end; pos += dir) { + var ch = line.charAt(pos); + if (re.test(ch) && (style === undefined || (cm.getTokenTypeAt(Pos(lineNo, pos + 1)) || "") == (style || ""))) { + var match = matching[ch]; + if (match && match.charAt(1) == ">" == dir > 0) stack.push(ch);else if (!stack.length) return { + pos: Pos(lineNo, pos), + ch: ch + };else stack.pop(); + } + } + } + return lineNo - dir == (dir > 0 ? cm.lastLine() : cm.firstLine()) ? false : null; + } + function matchBrackets(cm, autoclear, config) { + // Disable brace matching in long lines, since it'll cause hugely slow updates + var maxHighlightLen = cm.state.matchBrackets.maxHighlightLineLength || 1000, + highlightNonMatching = config && config.highlightNonMatching; + var marks = [], + ranges = cm.listSelections(); + for (var i = 0; i < ranges.length; i++) { + var match = ranges[i].empty() && findMatchingBracket(cm, ranges[i].head, config); + if (match && (match.match || highlightNonMatching !== false) && cm.getLine(match.from.line).length <= maxHighlightLen) { + var style = match.match ? "CodeMirror-matchingbracket" : "CodeMirror-nonmatchingbracket"; + marks.push(cm.markText(match.from, Pos(match.from.line, match.from.ch + 1), { + className: style + })); + if (match.to && cm.getLine(match.to.line).length <= maxHighlightLen) marks.push(cm.markText(match.to, Pos(match.to.line, match.to.ch + 1), { + className: style + })); + } + } + if (marks.length) { + // Kludge to work around the IE bug from issue #1193, where text + // input stops going to the textarea whenever this fires. + if (ie_lt8 && cm.state.focused) cm.focus(); + var clear = function () { + cm.operation(function () { + for (var i = 0; i < marks.length; i++) marks[i].clear(); + }); + }; + if (autoclear) setTimeout(clear, 800);else return clear; + } + } + function doMatchBrackets(cm) { + cm.operation(function () { + if (cm.state.matchBrackets.currentlyHighlighted) { + cm.state.matchBrackets.currentlyHighlighted(); + cm.state.matchBrackets.currentlyHighlighted = null; + } + cm.state.matchBrackets.currentlyHighlighted = matchBrackets(cm, false, cm.state.matchBrackets); + }); + } + function clearHighlighted(cm) { + if (cm.state.matchBrackets && cm.state.matchBrackets.currentlyHighlighted) { + cm.state.matchBrackets.currentlyHighlighted(); + cm.state.matchBrackets.currentlyHighlighted = null; + } + } + CodeMirror.defineOption("matchBrackets", false, function (cm, val, old) { + if (old && old != CodeMirror.Init) { + cm.off("cursorActivity", doMatchBrackets); + cm.off("focus", doMatchBrackets); + cm.off("blur", clearHighlighted); + clearHighlighted(cm); + } + if (val) { + cm.state.matchBrackets = typeof val == "object" ? val : {}; + cm.on("cursorActivity", doMatchBrackets); + cm.on("focus", doMatchBrackets); + cm.on("blur", clearHighlighted); + } + }); + CodeMirror.defineExtension("matchBrackets", function () { + matchBrackets(this, true); + }); + CodeMirror.defineExtension("findMatchingBracket", function (pos, config, oldConfig) { + // Backwards-compatibility kludge + if (oldConfig || typeof config == "boolean") { + if (!oldConfig) { + config = config ? { + strict: true + } : null; + } else { + oldConfig.strict = config; + config = oldConfig; + } + } + return findMatchingBracket(this, pos, config); + }); + CodeMirror.defineExtension("scanForBracket", function (pos, dir, style, config) { + return scanForBracket(this, pos, dir, style, config); + }); +}); + +/***/ }), + +/***/ "../../../node_modules/codemirror/addon/fold/brace-fold.js": +/*!*****************************************************************!*\ + !*** ../../../node_modules/codemirror/addon/fold/brace-fold.js ***! + \*****************************************************************/ +/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) { + +"use strict"; + + +// CodeMirror, copyright (c) by Marijn Haverbeke and others +// Distributed under an MIT license: https://codemirror.net/LICENSE + +(function (mod) { + if (true) + // CommonJS + mod(__webpack_require__(/*! ../../lib/codemirror */ "../../../node_modules/codemirror/lib/codemirror.js"));else {} +})(function (CodeMirror) { + "use strict"; + + function bracketFolding(pairs) { + return function (cm, start) { + var line = start.line, + lineText = cm.getLine(line); + function findOpening(pair) { + var tokenType; + for (var at = start.ch, pass = 0;;) { + var found = at <= 0 ? -1 : lineText.lastIndexOf(pair[0], at - 1); + if (found == -1) { + if (pass == 1) break; + pass = 1; + at = lineText.length; + continue; + } + if (pass == 1 && found < start.ch) break; + tokenType = cm.getTokenTypeAt(CodeMirror.Pos(line, found + 1)); + if (!/^(comment|string)/.test(tokenType)) return { + ch: found + 1, + tokenType: tokenType, + pair: pair + }; + at = found - 1; + } + } + function findRange(found) { + var count = 1, + lastLine = cm.lastLine(), + end, + startCh = found.ch, + endCh; + outer: for (var i = line; i <= lastLine; ++i) { + var text = cm.getLine(i), + pos = i == line ? startCh : 0; + for (;;) { + var nextOpen = text.indexOf(found.pair[0], pos), + nextClose = text.indexOf(found.pair[1], pos); + if (nextOpen < 0) nextOpen = text.length; + if (nextClose < 0) nextClose = text.length; + pos = Math.min(nextOpen, nextClose); + if (pos == text.length) break; + if (cm.getTokenTypeAt(CodeMirror.Pos(i, pos + 1)) == found.tokenType) { + if (pos == nextOpen) ++count;else if (! --count) { + end = i; + endCh = pos; + break outer; + } + } + ++pos; + } + } + if (end == null || line == end) return null; + return { + from: CodeMirror.Pos(line, startCh), + to: CodeMirror.Pos(end, endCh) + }; + } + var found = []; + for (var i = 0; i < pairs.length; i++) { + var open = findOpening(pairs[i]); + if (open) found.push(open); + } + found.sort(function (a, b) { + return a.ch - b.ch; + }); + for (var i = 0; i < found.length; i++) { + var range = findRange(found[i]); + if (range) return range; + } + return null; + }; + } + CodeMirror.registerHelper("fold", "brace", bracketFolding([["{", "}"], ["[", "]"]])); + CodeMirror.registerHelper("fold", "brace-paren", bracketFolding([["{", "}"], ["[", "]"], ["(", ")"]])); + CodeMirror.registerHelper("fold", "import", function (cm, start) { + function hasImport(line) { + if (line < cm.firstLine() || line > cm.lastLine()) return null; + var start = cm.getTokenAt(CodeMirror.Pos(line, 1)); + if (!/\S/.test(start.string)) start = cm.getTokenAt(CodeMirror.Pos(line, start.end + 1)); + if (start.type != "keyword" || start.string != "import") return null; + // Now find closing semicolon, return its position + for (var i = line, e = Math.min(cm.lastLine(), line + 10); i <= e; ++i) { + var text = cm.getLine(i), + semi = text.indexOf(";"); + if (semi != -1) return { + startCh: start.end, + end: CodeMirror.Pos(i, semi) + }; + } + } + var startLine = start.line, + has = hasImport(startLine), + prev; + if (!has || hasImport(startLine - 1) || (prev = hasImport(startLine - 2)) && prev.end.line == startLine - 1) return null; + for (var end = has.end;;) { + var next = hasImport(end.line + 1); + if (next == null) break; + end = next.end; + } + return { + from: cm.clipPos(CodeMirror.Pos(startLine, has.startCh + 1)), + to: end + }; + }); + CodeMirror.registerHelper("fold", "include", function (cm, start) { + function hasInclude(line) { + if (line < cm.firstLine() || line > cm.lastLine()) return null; + var start = cm.getTokenAt(CodeMirror.Pos(line, 1)); + if (!/\S/.test(start.string)) start = cm.getTokenAt(CodeMirror.Pos(line, start.end + 1)); + if (start.type == "meta" && start.string.slice(0, 8) == "#include") return start.start + 8; + } + var startLine = start.line, + has = hasInclude(startLine); + if (has == null || hasInclude(startLine - 1) != null) return null; + for (var end = startLine;;) { + var next = hasInclude(end + 1); + if (next == null) break; + ++end; + } + return { + from: CodeMirror.Pos(startLine, has + 1), + to: cm.clipPos(CodeMirror.Pos(end)) + }; + }); +}); + +/***/ }), + +/***/ "../../../node_modules/codemirror/addon/fold/foldcode.js": +/*!***************************************************************!*\ + !*** ../../../node_modules/codemirror/addon/fold/foldcode.js ***! + \***************************************************************/ +/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) { + +"use strict"; + + +// CodeMirror, copyright (c) by Marijn Haverbeke and others +// Distributed under an MIT license: https://codemirror.net/LICENSE + +(function (mod) { + if (true) + // CommonJS + mod(__webpack_require__(/*! ../../lib/codemirror */ "../../../node_modules/codemirror/lib/codemirror.js"));else {} +})(function (CodeMirror) { + "use strict"; + + function doFold(cm, pos, options, force) { + if (options && options.call) { + var finder = options; + options = null; + } else { + var finder = getOption(cm, options, "rangeFinder"); + } + if (typeof pos == "number") pos = CodeMirror.Pos(pos, 0); + var minSize = getOption(cm, options, "minFoldSize"); + function getRange(allowFolded) { + var range = finder(cm, pos); + if (!range || range.to.line - range.from.line < minSize) return null; + if (force === "fold") return range; + var marks = cm.findMarksAt(range.from); + for (var i = 0; i < marks.length; ++i) { + if (marks[i].__isFold) { + if (!allowFolded) return null; + range.cleared = true; + marks[i].clear(); + } + } + return range; + } + var range = getRange(true); + if (getOption(cm, options, "scanUp")) while (!range && pos.line > cm.firstLine()) { + pos = CodeMirror.Pos(pos.line - 1, 0); + range = getRange(false); + } + if (!range || range.cleared || force === "unfold") return; + var myWidget = makeWidget(cm, options, range); + CodeMirror.on(myWidget, "mousedown", function (e) { + myRange.clear(); + CodeMirror.e_preventDefault(e); + }); + var myRange = cm.markText(range.from, range.to, { + replacedWith: myWidget, + clearOnEnter: getOption(cm, options, "clearOnEnter"), + __isFold: true + }); + myRange.on("clear", function (from, to) { + CodeMirror.signal(cm, "unfold", cm, from, to); + }); + CodeMirror.signal(cm, "fold", cm, range.from, range.to); + } + function makeWidget(cm, options, range) { + var widget = getOption(cm, options, "widget"); + if (typeof widget == "function") { + widget = widget(range.from, range.to); + } + if (typeof widget == "string") { + var text = document.createTextNode(widget); + widget = document.createElement("span"); + widget.appendChild(text); + widget.className = "CodeMirror-foldmarker"; + } else if (widget) { + widget = widget.cloneNode(true); + } + return widget; + } + + // Clumsy backwards-compatible interface + CodeMirror.newFoldFunction = function (rangeFinder, widget) { + return function (cm, pos) { + doFold(cm, pos, { + rangeFinder: rangeFinder, + widget: widget + }); + }; + }; + + // New-style interface + CodeMirror.defineExtension("foldCode", function (pos, options, force) { + doFold(this, pos, options, force); + }); + CodeMirror.defineExtension("isFolded", function (pos) { + var marks = this.findMarksAt(pos); + for (var i = 0; i < marks.length; ++i) if (marks[i].__isFold) return true; + }); + CodeMirror.commands.toggleFold = function (cm) { + cm.foldCode(cm.getCursor()); + }; + CodeMirror.commands.fold = function (cm) { + cm.foldCode(cm.getCursor(), null, "fold"); + }; + CodeMirror.commands.unfold = function (cm) { + cm.foldCode(cm.getCursor(), { + scanUp: false + }, "unfold"); + }; + CodeMirror.commands.foldAll = function (cm) { + cm.operation(function () { + for (var i = cm.firstLine(), e = cm.lastLine(); i <= e; i++) cm.foldCode(CodeMirror.Pos(i, 0), { + scanUp: false + }, "fold"); + }); + }; + CodeMirror.commands.unfoldAll = function (cm) { + cm.operation(function () { + for (var i = cm.firstLine(), e = cm.lastLine(); i <= e; i++) cm.foldCode(CodeMirror.Pos(i, 0), { + scanUp: false + }, "unfold"); + }); + }; + CodeMirror.registerHelper("fold", "combine", function () { + var funcs = Array.prototype.slice.call(arguments, 0); + return function (cm, start) { + for (var i = 0; i < funcs.length; ++i) { + var found = funcs[i](cm, start); + if (found) return found; + } + }; + }); + CodeMirror.registerHelper("fold", "auto", function (cm, start) { + var helpers = cm.getHelpers(start, "fold"); + for (var i = 0; i < helpers.length; i++) { + var cur = helpers[i](cm, start); + if (cur) return cur; + } + }); + var defaultOptions = { + rangeFinder: CodeMirror.fold.auto, + widget: "\u2194", + minFoldSize: 0, + scanUp: false, + clearOnEnter: true + }; + CodeMirror.defineOption("foldOptions", null); + function getOption(cm, options, name) { + if (options && options[name] !== undefined) return options[name]; + var editorOptions = cm.options.foldOptions; + if (editorOptions && editorOptions[name] !== undefined) return editorOptions[name]; + return defaultOptions[name]; + } + CodeMirror.defineExtension("foldOption", function (options, name) { + return getOption(this, options, name); + }); +}); + +/***/ }), + +/***/ "../../../node_modules/codemirror/addon/fold/foldgutter.js": +/*!*****************************************************************!*\ + !*** ../../../node_modules/codemirror/addon/fold/foldgutter.js ***! + \*****************************************************************/ +/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) { + +"use strict"; + + +// CodeMirror, copyright (c) by Marijn Haverbeke and others +// Distributed under an MIT license: https://codemirror.net/LICENSE + +(function (mod) { + if (true) + // CommonJS + mod(__webpack_require__(/*! ../../lib/codemirror */ "../../../node_modules/codemirror/lib/codemirror.js"), __webpack_require__(/*! ./foldcode */ "../../../node_modules/codemirror/addon/fold/foldcode.js"));else {} +})(function (CodeMirror) { + "use strict"; + + CodeMirror.defineOption("foldGutter", false, function (cm, val, old) { + if (old && old != CodeMirror.Init) { + cm.clearGutter(cm.state.foldGutter.options.gutter); + cm.state.foldGutter = null; + cm.off("gutterClick", onGutterClick); + cm.off("changes", onChange); + cm.off("viewportChange", onViewportChange); + cm.off("fold", onFold); + cm.off("unfold", onFold); + cm.off("swapDoc", onChange); + } + if (val) { + cm.state.foldGutter = new State(parseOptions(val)); + updateInViewport(cm); + cm.on("gutterClick", onGutterClick); + cm.on("changes", onChange); + cm.on("viewportChange", onViewportChange); + cm.on("fold", onFold); + cm.on("unfold", onFold); + cm.on("swapDoc", onChange); + } + }); + var Pos = CodeMirror.Pos; + function State(options) { + this.options = options; + this.from = this.to = 0; + } + function parseOptions(opts) { + if (opts === true) opts = {}; + if (opts.gutter == null) opts.gutter = "CodeMirror-foldgutter"; + if (opts.indicatorOpen == null) opts.indicatorOpen = "CodeMirror-foldgutter-open"; + if (opts.indicatorFolded == null) opts.indicatorFolded = "CodeMirror-foldgutter-folded"; + return opts; + } + function isFolded(cm, line) { + var marks = cm.findMarks(Pos(line, 0), Pos(line + 1, 0)); + for (var i = 0; i < marks.length; ++i) { + if (marks[i].__isFold) { + var fromPos = marks[i].find(-1); + if (fromPos && fromPos.line === line) return marks[i]; + } + } + } + function marker(spec) { + if (typeof spec == "string") { + var elt = document.createElement("div"); + elt.className = spec + " CodeMirror-guttermarker-subtle"; + return elt; + } else { + return spec.cloneNode(true); + } + } + function updateFoldInfo(cm, from, to) { + var opts = cm.state.foldGutter.options, + cur = from - 1; + var minSize = cm.foldOption(opts, "minFoldSize"); + var func = cm.foldOption(opts, "rangeFinder"); + // we can reuse the built-in indicator element if its className matches the new state + var clsFolded = typeof opts.indicatorFolded == "string" && classTest(opts.indicatorFolded); + var clsOpen = typeof opts.indicatorOpen == "string" && classTest(opts.indicatorOpen); + cm.eachLine(from, to, function (line) { + ++cur; + var mark = null; + var old = line.gutterMarkers; + if (old) old = old[opts.gutter]; + if (isFolded(cm, cur)) { + if (clsFolded && old && clsFolded.test(old.className)) return; + mark = marker(opts.indicatorFolded); + } else { + var pos = Pos(cur, 0); + var range = func && func(cm, pos); + if (range && range.to.line - range.from.line >= minSize) { + if (clsOpen && old && clsOpen.test(old.className)) return; + mark = marker(opts.indicatorOpen); + } + } + if (!mark && !old) return; + cm.setGutterMarker(line, opts.gutter, mark); + }); + } + + // copied from CodeMirror/src/util/dom.js + function classTest(cls) { + return new RegExp("(^|\\s)" + cls + "(?:$|\\s)\\s*"); + } + function updateInViewport(cm) { + var vp = cm.getViewport(), + state = cm.state.foldGutter; + if (!state) return; + cm.operation(function () { + updateFoldInfo(cm, vp.from, vp.to); + }); + state.from = vp.from; + state.to = vp.to; + } + function onGutterClick(cm, line, gutter) { + var state = cm.state.foldGutter; + if (!state) return; + var opts = state.options; + if (gutter != opts.gutter) return; + var folded = isFolded(cm, line); + if (folded) folded.clear();else cm.foldCode(Pos(line, 0), opts); + } + function onChange(cm) { + var state = cm.state.foldGutter; + if (!state) return; + var opts = state.options; + state.from = state.to = 0; + clearTimeout(state.changeUpdate); + state.changeUpdate = setTimeout(function () { + updateInViewport(cm); + }, opts.foldOnChangeTimeSpan || 600); + } + function onViewportChange(cm) { + var state = cm.state.foldGutter; + if (!state) return; + var opts = state.options; + clearTimeout(state.changeUpdate); + state.changeUpdate = setTimeout(function () { + var vp = cm.getViewport(); + if (state.from == state.to || vp.from - state.to > 20 || state.from - vp.to > 20) { + updateInViewport(cm); + } else { + cm.operation(function () { + if (vp.from < state.from) { + updateFoldInfo(cm, vp.from, state.from); + state.from = vp.from; + } + if (vp.to > state.to) { + updateFoldInfo(cm, state.to, vp.to); + state.to = vp.to; + } + }); + } + }, opts.updateViewportTimeSpan || 400); + } + function onFold(cm, from) { + var state = cm.state.foldGutter; + if (!state) return; + var line = from.line; + if (line >= state.from && line < state.to) updateFoldInfo(cm, line, line + 1); + } +}); + +/***/ }), + +/***/ "../../../node_modules/codemirror/addon/hint/show-hint.js": +/*!****************************************************************!*\ + !*** ../../../node_modules/codemirror/addon/hint/show-hint.js ***! + \****************************************************************/ +/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) { + +"use strict"; + + +// CodeMirror, copyright (c) by Marijn Haverbeke and others +// Distributed under an MIT license: https://codemirror.net/LICENSE + +// declare global: DOMRect + +(function (mod) { + if (true) + // CommonJS + mod(__webpack_require__(/*! ../../lib/codemirror */ "../../../node_modules/codemirror/lib/codemirror.js"));else {} +})(function (CodeMirror) { + "use strict"; + + var HINT_ELEMENT_CLASS = "CodeMirror-hint"; + var ACTIVE_HINT_ELEMENT_CLASS = "CodeMirror-hint-active"; + + // This is the old interface, kept around for now to stay + // backwards-compatible. + CodeMirror.showHint = function (cm, getHints, options) { + if (!getHints) return cm.showHint(options); + if (options && options.async) getHints.async = true; + var newOpts = { + hint: getHints + }; + if (options) for (var prop in options) newOpts[prop] = options[prop]; + return cm.showHint(newOpts); + }; + CodeMirror.defineExtension("showHint", function (options) { + options = parseOptions(this, this.getCursor("start"), options); + var selections = this.listSelections(); + if (selections.length > 1) return; + // By default, don't allow completion when something is selected. + // A hint function can have a `supportsSelection` property to + // indicate that it can handle selections. + if (this.somethingSelected()) { + if (!options.hint.supportsSelection) return; + // Don't try with cross-line selections + for (var i = 0; i < selections.length; i++) if (selections[i].head.line != selections[i].anchor.line) return; + } + if (this.state.completionActive) this.state.completionActive.close(); + var completion = this.state.completionActive = new Completion(this, options); + if (!completion.options.hint) return; + CodeMirror.signal(this, "startCompletion", this); + completion.update(true); + }); + CodeMirror.defineExtension("closeHint", function () { + if (this.state.completionActive) this.state.completionActive.close(); + }); + function Completion(cm, options) { + this.cm = cm; + this.options = options; + this.widget = null; + this.debounce = 0; + this.tick = 0; + this.startPos = this.cm.getCursor("start"); + this.startLen = this.cm.getLine(this.startPos.line).length - this.cm.getSelection().length; + if (this.options.updateOnCursorActivity) { + var self = this; + cm.on("cursorActivity", this.activityFunc = function () { + self.cursorActivity(); + }); + } + } + var requestAnimationFrame = window.requestAnimationFrame || function (fn) { + return setTimeout(fn, 1000 / 60); + }; + var cancelAnimationFrame = window.cancelAnimationFrame || clearTimeout; + Completion.prototype = { + close: function () { + if (!this.active()) return; + this.cm.state.completionActive = null; + this.tick = null; + if (this.options.updateOnCursorActivity) { + this.cm.off("cursorActivity", this.activityFunc); + } + if (this.widget && this.data) CodeMirror.signal(this.data, "close"); + if (this.widget) this.widget.close(); + CodeMirror.signal(this.cm, "endCompletion", this.cm); + }, + active: function () { + return this.cm.state.completionActive == this; + }, + pick: function (data, i) { + var completion = data.list[i], + self = this; + this.cm.operation(function () { + if (completion.hint) completion.hint(self.cm, data, completion);else self.cm.replaceRange(getText(completion), completion.from || data.from, completion.to || data.to, "complete"); + CodeMirror.signal(data, "pick", completion); + self.cm.scrollIntoView(); + }); + if (this.options.closeOnPick) { + this.close(); + } + }, + cursorActivity: function () { + if (this.debounce) { + cancelAnimationFrame(this.debounce); + this.debounce = 0; + } + var identStart = this.startPos; + if (this.data) { + identStart = this.data.from; + } + var pos = this.cm.getCursor(), + line = this.cm.getLine(pos.line); + if (pos.line != this.startPos.line || line.length - pos.ch != this.startLen - this.startPos.ch || pos.ch < identStart.ch || this.cm.somethingSelected() || !pos.ch || this.options.closeCharacters.test(line.charAt(pos.ch - 1))) { + this.close(); + } else { + var self = this; + this.debounce = requestAnimationFrame(function () { + self.update(); + }); + if (this.widget) this.widget.disable(); + } + }, + update: function (first) { + if (this.tick == null) return; + var self = this, + myTick = ++this.tick; + fetchHints(this.options.hint, this.cm, this.options, function (data) { + if (self.tick == myTick) self.finishUpdate(data, first); + }); + }, + finishUpdate: function (data, first) { + if (this.data) CodeMirror.signal(this.data, "update"); + var picked = this.widget && this.widget.picked || first && this.options.completeSingle; + if (this.widget) this.widget.close(); + this.data = data; + if (data && data.list.length) { + if (picked && data.list.length == 1) { + this.pick(data, 0); + } else { + this.widget = new Widget(this, data); + CodeMirror.signal(data, "shown"); + } + } + } + }; + function parseOptions(cm, pos, options) { + var editor = cm.options.hintOptions; + var out = {}; + for (var prop in defaultOptions) out[prop] = defaultOptions[prop]; + if (editor) for (var prop in editor) if (editor[prop] !== undefined) out[prop] = editor[prop]; + if (options) for (var prop in options) if (options[prop] !== undefined) out[prop] = options[prop]; + if (out.hint.resolve) out.hint = out.hint.resolve(cm, pos); + return out; + } + function getText(completion) { + if (typeof completion == "string") return completion;else return completion.text; + } + function buildKeyMap(completion, handle) { + var baseMap = { + Up: function () { + handle.moveFocus(-1); + }, + Down: function () { + handle.moveFocus(1); + }, + PageUp: function () { + handle.moveFocus(-handle.menuSize() + 1, true); + }, + PageDown: function () { + handle.moveFocus(handle.menuSize() - 1, true); + }, + Home: function () { + handle.setFocus(0); + }, + End: function () { + handle.setFocus(handle.length - 1); + }, + Enter: handle.pick, + Tab: handle.pick, + Esc: handle.close + }; + var mac = /Mac/.test(navigator.platform); + if (mac) { + baseMap["Ctrl-P"] = function () { + handle.moveFocus(-1); + }; + baseMap["Ctrl-N"] = function () { + handle.moveFocus(1); + }; + } + var custom = completion.options.customKeys; + var ourMap = custom ? {} : baseMap; + function addBinding(key, val) { + var bound; + if (typeof val != "string") bound = function (cm) { + return val(cm, handle); + }; + // This mechanism is deprecated + else if (baseMap.hasOwnProperty(val)) bound = baseMap[val];else bound = val; + ourMap[key] = bound; + } + if (custom) for (var key in custom) if (custom.hasOwnProperty(key)) addBinding(key, custom[key]); + var extra = completion.options.extraKeys; + if (extra) for (var key in extra) if (extra.hasOwnProperty(key)) addBinding(key, extra[key]); + return ourMap; + } + function getHintElement(hintsElement, el) { + while (el && el != hintsElement) { + if (el.nodeName.toUpperCase() === "LI" && el.parentNode == hintsElement) return el; + el = el.parentNode; + } + } + function Widget(completion, data) { + this.id = "cm-complete-" + Math.floor(Math.random(1e6)); + this.completion = completion; + this.data = data; + this.picked = false; + var widget = this, + cm = completion.cm; + var ownerDocument = cm.getInputField().ownerDocument; + var parentWindow = ownerDocument.defaultView || ownerDocument.parentWindow; + var hints = this.hints = ownerDocument.createElement("ul"); + hints.setAttribute("role", "listbox"); + hints.setAttribute("aria-expanded", "true"); + hints.id = this.id; + var theme = completion.cm.options.theme; + hints.className = "CodeMirror-hints " + theme; + this.selectedHint = data.selectedHint || 0; + var completions = data.list; + for (var i = 0; i < completions.length; ++i) { + var elt = hints.appendChild(ownerDocument.createElement("li")), + cur = completions[i]; + var className = HINT_ELEMENT_CLASS + (i != this.selectedHint ? "" : " " + ACTIVE_HINT_ELEMENT_CLASS); + if (cur.className != null) className = cur.className + " " + className; + elt.className = className; + if (i == this.selectedHint) elt.setAttribute("aria-selected", "true"); + elt.id = this.id + "-" + i; + elt.setAttribute("role", "option"); + if (cur.render) cur.render(elt, data, cur);else elt.appendChild(ownerDocument.createTextNode(cur.displayText || getText(cur))); + elt.hintId = i; + } + var container = completion.options.container || ownerDocument.body; + var pos = cm.cursorCoords(completion.options.alignWithWord ? data.from : null); + var left = pos.left, + top = pos.bottom, + below = true; + var offsetLeft = 0, + offsetTop = 0; + if (container !== ownerDocument.body) { + // We offset the cursor position because left and top are relative to the offsetParent's top left corner. + var isContainerPositioned = ['absolute', 'relative', 'fixed'].indexOf(parentWindow.getComputedStyle(container).position) !== -1; + var offsetParent = isContainerPositioned ? container : container.offsetParent; + var offsetParentPosition = offsetParent.getBoundingClientRect(); + var bodyPosition = ownerDocument.body.getBoundingClientRect(); + offsetLeft = offsetParentPosition.left - bodyPosition.left - offsetParent.scrollLeft; + offsetTop = offsetParentPosition.top - bodyPosition.top - offsetParent.scrollTop; + } + hints.style.left = left - offsetLeft + "px"; + hints.style.top = top - offsetTop + "px"; + + // If we're at the edge of the screen, then we want the menu to appear on the left of the cursor. + var winW = parentWindow.innerWidth || Math.max(ownerDocument.body.offsetWidth, ownerDocument.documentElement.offsetWidth); + var winH = parentWindow.innerHeight || Math.max(ownerDocument.body.offsetHeight, ownerDocument.documentElement.offsetHeight); + container.appendChild(hints); + cm.getInputField().setAttribute("aria-autocomplete", "list"); + cm.getInputField().setAttribute("aria-owns", this.id); + cm.getInputField().setAttribute("aria-activedescendant", this.id + "-" + this.selectedHint); + var box = completion.options.moveOnOverlap ? hints.getBoundingClientRect() : new DOMRect(); + var scrolls = completion.options.paddingForScrollbar ? hints.scrollHeight > hints.clientHeight + 1 : false; + + // Compute in the timeout to avoid reflow on init + var startScroll; + setTimeout(function () { + startScroll = cm.getScrollInfo(); + }); + var overlapY = box.bottom - winH; + if (overlapY > 0) { + var height = box.bottom - box.top, + curTop = pos.top - (pos.bottom - box.top); + if (curTop - height > 0) { + // Fits above cursor + hints.style.top = (top = pos.top - height - offsetTop) + "px"; + below = false; + } else if (height > winH) { + hints.style.height = winH - 5 + "px"; + hints.style.top = (top = pos.bottom - box.top - offsetTop) + "px"; + var cursor = cm.getCursor(); + if (data.from.ch != cursor.ch) { + pos = cm.cursorCoords(cursor); + hints.style.left = (left = pos.left - offsetLeft) + "px"; + box = hints.getBoundingClientRect(); + } + } + } + var overlapX = box.right - winW; + if (scrolls) overlapX += cm.display.nativeBarWidth; + if (overlapX > 0) { + if (box.right - box.left > winW) { + hints.style.width = winW - 5 + "px"; + overlapX -= box.right - box.left - winW; + } + hints.style.left = (left = pos.left - overlapX - offsetLeft) + "px"; + } + if (scrolls) for (var node = hints.firstChild; node; node = node.nextSibling) node.style.paddingRight = cm.display.nativeBarWidth + "px"; + cm.addKeyMap(this.keyMap = buildKeyMap(completion, { + moveFocus: function (n, avoidWrap) { + widget.changeActive(widget.selectedHint + n, avoidWrap); + }, + setFocus: function (n) { + widget.changeActive(n); + }, + menuSize: function () { + return widget.screenAmount(); + }, + length: completions.length, + close: function () { + completion.close(); + }, + pick: function () { + widget.pick(); + }, + data: data + })); + if (completion.options.closeOnUnfocus) { + var closingOnBlur; + cm.on("blur", this.onBlur = function () { + closingOnBlur = setTimeout(function () { + completion.close(); + }, 100); + }); + cm.on("focus", this.onFocus = function () { + clearTimeout(closingOnBlur); + }); + } + cm.on("scroll", this.onScroll = function () { + var curScroll = cm.getScrollInfo(), + editor = cm.getWrapperElement().getBoundingClientRect(); + if (!startScroll) startScroll = cm.getScrollInfo(); + var newTop = top + startScroll.top - curScroll.top; + var point = newTop - (parentWindow.pageYOffset || (ownerDocument.documentElement || ownerDocument.body).scrollTop); + if (!below) point += hints.offsetHeight; + if (point <= editor.top || point >= editor.bottom) return completion.close(); + hints.style.top = newTop + "px"; + hints.style.left = left + startScroll.left - curScroll.left + "px"; + }); + CodeMirror.on(hints, "dblclick", function (e) { + var t = getHintElement(hints, e.target || e.srcElement); + if (t && t.hintId != null) { + widget.changeActive(t.hintId); + widget.pick(); + } + }); + CodeMirror.on(hints, "click", function (e) { + var t = getHintElement(hints, e.target || e.srcElement); + if (t && t.hintId != null) { + widget.changeActive(t.hintId); + if (completion.options.completeOnSingleClick) widget.pick(); + } + }); + CodeMirror.on(hints, "mousedown", function () { + setTimeout(function () { + cm.focus(); + }, 20); + }); + + // The first hint doesn't need to be scrolled to on init + var selectedHintRange = this.getSelectedHintRange(); + if (selectedHintRange.from !== 0 || selectedHintRange.to !== 0) { + this.scrollToActive(); + } + CodeMirror.signal(data, "select", completions[this.selectedHint], hints.childNodes[this.selectedHint]); + return true; + } + Widget.prototype = { + close: function () { + if (this.completion.widget != this) return; + this.completion.widget = null; + if (this.hints.parentNode) this.hints.parentNode.removeChild(this.hints); + this.completion.cm.removeKeyMap(this.keyMap); + var input = this.completion.cm.getInputField(); + input.removeAttribute("aria-activedescendant"); + input.removeAttribute("aria-owns"); + var cm = this.completion.cm; + if (this.completion.options.closeOnUnfocus) { + cm.off("blur", this.onBlur); + cm.off("focus", this.onFocus); + } + cm.off("scroll", this.onScroll); + }, + disable: function () { + this.completion.cm.removeKeyMap(this.keyMap); + var widget = this; + this.keyMap = { + Enter: function () { + widget.picked = true; + } + }; + this.completion.cm.addKeyMap(this.keyMap); + }, + pick: function () { + this.completion.pick(this.data, this.selectedHint); + }, + changeActive: function (i, avoidWrap) { + if (i >= this.data.list.length) i = avoidWrap ? this.data.list.length - 1 : 0;else if (i < 0) i = avoidWrap ? 0 : this.data.list.length - 1; + if (this.selectedHint == i) return; + var node = this.hints.childNodes[this.selectedHint]; + if (node) { + node.className = node.className.replace(" " + ACTIVE_HINT_ELEMENT_CLASS, ""); + node.removeAttribute("aria-selected"); + } + node = this.hints.childNodes[this.selectedHint = i]; + node.className += " " + ACTIVE_HINT_ELEMENT_CLASS; + node.setAttribute("aria-selected", "true"); + this.completion.cm.getInputField().setAttribute("aria-activedescendant", node.id); + this.scrollToActive(); + CodeMirror.signal(this.data, "select", this.data.list[this.selectedHint], node); + }, + scrollToActive: function () { + var selectedHintRange = this.getSelectedHintRange(); + var node1 = this.hints.childNodes[selectedHintRange.from]; + var node2 = this.hints.childNodes[selectedHintRange.to]; + var firstNode = this.hints.firstChild; + if (node1.offsetTop < this.hints.scrollTop) this.hints.scrollTop = node1.offsetTop - firstNode.offsetTop;else if (node2.offsetTop + node2.offsetHeight > this.hints.scrollTop + this.hints.clientHeight) this.hints.scrollTop = node2.offsetTop + node2.offsetHeight - this.hints.clientHeight + firstNode.offsetTop; + }, + screenAmount: function () { + return Math.floor(this.hints.clientHeight / this.hints.firstChild.offsetHeight) || 1; + }, + getSelectedHintRange: function () { + var margin = this.completion.options.scrollMargin || 0; + return { + from: Math.max(0, this.selectedHint - margin), + to: Math.min(this.data.list.length - 1, this.selectedHint + margin) + }; + } + }; + function applicableHelpers(cm, helpers) { + if (!cm.somethingSelected()) return helpers; + var result = []; + for (var i = 0; i < helpers.length; i++) if (helpers[i].supportsSelection) result.push(helpers[i]); + return result; + } + function fetchHints(hint, cm, options, callback) { + if (hint.async) { + hint(cm, callback, options); + } else { + var result = hint(cm, options); + if (result && result.then) result.then(callback);else callback(result); + } + } + function resolveAutoHints(cm, pos) { + var helpers = cm.getHelpers(pos, "hint"), + words; + if (helpers.length) { + var resolved = function (cm, callback, options) { + var app = applicableHelpers(cm, helpers); + function run(i) { + if (i == app.length) return callback(null); + fetchHints(app[i], cm, options, function (result) { + if (result && result.list.length > 0) callback(result);else run(i + 1); + }); + } + run(0); + }; + resolved.async = true; + resolved.supportsSelection = true; + return resolved; + } else if (words = cm.getHelper(cm.getCursor(), "hintWords")) { + return function (cm) { + return CodeMirror.hint.fromList(cm, { + words: words + }); + }; + } else if (CodeMirror.hint.anyword) { + return function (cm, options) { + return CodeMirror.hint.anyword(cm, options); + }; + } else { + return function () {}; + } + } + CodeMirror.registerHelper("hint", "auto", { + resolve: resolveAutoHints + }); + CodeMirror.registerHelper("hint", "fromList", function (cm, options) { + var cur = cm.getCursor(), + token = cm.getTokenAt(cur); + var term, + from = CodeMirror.Pos(cur.line, token.start), + to = cur; + if (token.start < cur.ch && /\w/.test(token.string.charAt(cur.ch - token.start - 1))) { + term = token.string.substr(0, cur.ch - token.start); + } else { + term = ""; + from = cur; + } + var found = []; + for (var i = 0; i < options.words.length; i++) { + var word = options.words[i]; + if (word.slice(0, term.length) == term) found.push(word); + } + if (found.length) return { + list: found, + from: from, + to: to + }; + }); + CodeMirror.commands.autocomplete = CodeMirror.showHint; + var defaultOptions = { + hint: CodeMirror.hint.auto, + completeSingle: true, + alignWithWord: true, + closeCharacters: /[\s()\[\]{};:>,]/, + closeOnPick: true, + closeOnUnfocus: true, + updateOnCursorActivity: true, + completeOnSingleClick: true, + container: null, + customKeys: null, + extraKeys: null, + paddingForScrollbar: true, + moveOnOverlap: true + }; + CodeMirror.defineOption("hintOptions", null); +}); + +/***/ }), + +/***/ "../../../node_modules/codemirror/addon/lint/lint.js": +/*!***********************************************************!*\ + !*** ../../../node_modules/codemirror/addon/lint/lint.js ***! + \***********************************************************/ +/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) { + +"use strict"; + + +// CodeMirror, copyright (c) by Marijn Haverbeke and others +// Distributed under an MIT license: https://codemirror.net/LICENSE + +(function (mod) { + if (true) + // CommonJS + mod(__webpack_require__(/*! ../../lib/codemirror */ "../../../node_modules/codemirror/lib/codemirror.js"));else {} +})(function (CodeMirror) { + "use strict"; + + var GUTTER_ID = "CodeMirror-lint-markers"; + var LINT_LINE_ID = "CodeMirror-lint-line-"; + function showTooltip(cm, e, content) { + var tt = document.createElement("div"); + tt.className = "CodeMirror-lint-tooltip cm-s-" + cm.options.theme; + tt.appendChild(content.cloneNode(true)); + if (cm.state.lint.options.selfContain) cm.getWrapperElement().appendChild(tt);else document.body.appendChild(tt); + function position(e) { + if (!tt.parentNode) return CodeMirror.off(document, "mousemove", position); + tt.style.top = Math.max(0, e.clientY - tt.offsetHeight - 5) + "px"; + tt.style.left = e.clientX + 5 + "px"; + } + CodeMirror.on(document, "mousemove", position); + position(e); + if (tt.style.opacity != null) tt.style.opacity = 1; + return tt; + } + function rm(elt) { + if (elt.parentNode) elt.parentNode.removeChild(elt); + } + function hideTooltip(tt) { + if (!tt.parentNode) return; + if (tt.style.opacity == null) rm(tt); + tt.style.opacity = 0; + setTimeout(function () { + rm(tt); + }, 600); + } + function showTooltipFor(cm, e, content, node) { + var tooltip = showTooltip(cm, e, content); + function hide() { + CodeMirror.off(node, "mouseout", hide); + if (tooltip) { + hideTooltip(tooltip); + tooltip = null; + } + } + var poll = setInterval(function () { + if (tooltip) for (var n = node;; n = n.parentNode) { + if (n && n.nodeType == 11) n = n.host; + if (n == document.body) return; + if (!n) { + hide(); + break; + } + } + if (!tooltip) return clearInterval(poll); + }, 400); + CodeMirror.on(node, "mouseout", hide); + } + function LintState(cm, conf, hasGutter) { + this.marked = []; + if (conf instanceof Function) conf = { + getAnnotations: conf + }; + if (!conf || conf === true) conf = {}; + this.options = {}; + this.linterOptions = conf.options || {}; + for (var prop in defaults) this.options[prop] = defaults[prop]; + for (var prop in conf) { + if (defaults.hasOwnProperty(prop)) { + if (conf[prop] != null) this.options[prop] = conf[prop]; + } else if (!conf.options) { + this.linterOptions[prop] = conf[prop]; + } + } + this.timeout = null; + this.hasGutter = hasGutter; + this.onMouseOver = function (e) { + onMouseOver(cm, e); + }; + this.waitingFor = 0; + } + var defaults = { + highlightLines: false, + tooltips: true, + delay: 500, + lintOnChange: true, + getAnnotations: null, + async: false, + selfContain: null, + formatAnnotation: null, + onUpdateLinting: null + }; + function clearMarks(cm) { + var state = cm.state.lint; + if (state.hasGutter) cm.clearGutter(GUTTER_ID); + if (state.options.highlightLines) clearErrorLines(cm); + for (var i = 0; i < state.marked.length; ++i) state.marked[i].clear(); + state.marked.length = 0; + } + function clearErrorLines(cm) { + cm.eachLine(function (line) { + var has = line.wrapClass && /\bCodeMirror-lint-line-\w+\b/.exec(line.wrapClass); + if (has) cm.removeLineClass(line, "wrap", has[0]); + }); + } + function makeMarker(cm, labels, severity, multiple, tooltips) { + var marker = document.createElement("div"), + inner = marker; + marker.className = "CodeMirror-lint-marker CodeMirror-lint-marker-" + severity; + if (multiple) { + inner = marker.appendChild(document.createElement("div")); + inner.className = "CodeMirror-lint-marker CodeMirror-lint-marker-multiple"; + } + if (tooltips != false) CodeMirror.on(inner, "mouseover", function (e) { + showTooltipFor(cm, e, labels, inner); + }); + return marker; + } + function getMaxSeverity(a, b) { + if (a == "error") return a;else return b; + } + function groupByLine(annotations) { + var lines = []; + for (var i = 0; i < annotations.length; ++i) { + var ann = annotations[i], + line = ann.from.line; + (lines[line] || (lines[line] = [])).push(ann); + } + return lines; + } + function annotationTooltip(ann) { + var severity = ann.severity; + if (!severity) severity = "error"; + var tip = document.createElement("div"); + tip.className = "CodeMirror-lint-message CodeMirror-lint-message-" + severity; + if (typeof ann.messageHTML != 'undefined') { + tip.innerHTML = ann.messageHTML; + } else { + tip.appendChild(document.createTextNode(ann.message)); + } + return tip; + } + function lintAsync(cm, getAnnotations) { + var state = cm.state.lint; + var id = ++state.waitingFor; + function abort() { + id = -1; + cm.off("change", abort); + } + cm.on("change", abort); + getAnnotations(cm.getValue(), function (annotations, arg2) { + cm.off("change", abort); + if (state.waitingFor != id) return; + if (arg2 && annotations instanceof CodeMirror) annotations = arg2; + cm.operation(function () { + updateLinting(cm, annotations); + }); + }, state.linterOptions, cm); + } + function startLinting(cm) { + var state = cm.state.lint; + if (!state) return; + var options = state.options; + /* + * Passing rules in `options` property prevents JSHint (and other linters) from complaining + * about unrecognized rules like `onUpdateLinting`, `delay`, `lintOnChange`, etc. + */ + var getAnnotations = options.getAnnotations || cm.getHelper(CodeMirror.Pos(0, 0), "lint"); + if (!getAnnotations) return; + if (options.async || getAnnotations.async) { + lintAsync(cm, getAnnotations); + } else { + var annotations = getAnnotations(cm.getValue(), state.linterOptions, cm); + if (!annotations) return; + if (annotations.then) annotations.then(function (issues) { + cm.operation(function () { + updateLinting(cm, issues); + }); + });else cm.operation(function () { + updateLinting(cm, annotations); + }); + } + } + function updateLinting(cm, annotationsNotSorted) { + var state = cm.state.lint; + if (!state) return; + var options = state.options; + clearMarks(cm); + var annotations = groupByLine(annotationsNotSorted); + for (var line = 0; line < annotations.length; ++line) { + var anns = annotations[line]; + if (!anns) continue; + + // filter out duplicate messages + var message = []; + anns = anns.filter(function (item) { + return message.indexOf(item.message) > -1 ? false : message.push(item.message); + }); + var maxSeverity = null; + var tipLabel = state.hasGutter && document.createDocumentFragment(); + for (var i = 0; i < anns.length; ++i) { + var ann = anns[i]; + var severity = ann.severity; + if (!severity) severity = "error"; + maxSeverity = getMaxSeverity(maxSeverity, severity); + if (options.formatAnnotation) ann = options.formatAnnotation(ann); + if (state.hasGutter) tipLabel.appendChild(annotationTooltip(ann)); + if (ann.to) state.marked.push(cm.markText(ann.from, ann.to, { + className: "CodeMirror-lint-mark CodeMirror-lint-mark-" + severity, + __annotation: ann + })); + } + // use original annotations[line] to show multiple messages + if (state.hasGutter) cm.setGutterMarker(line, GUTTER_ID, makeMarker(cm, tipLabel, maxSeverity, annotations[line].length > 1, options.tooltips)); + if (options.highlightLines) cm.addLineClass(line, "wrap", LINT_LINE_ID + maxSeverity); + } + if (options.onUpdateLinting) options.onUpdateLinting(annotationsNotSorted, annotations, cm); + } + function onChange(cm) { + var state = cm.state.lint; + if (!state) return; + clearTimeout(state.timeout); + state.timeout = setTimeout(function () { + startLinting(cm); + }, state.options.delay); + } + function popupTooltips(cm, annotations, e) { + var target = e.target || e.srcElement; + var tooltip = document.createDocumentFragment(); + for (var i = 0; i < annotations.length; i++) { + var ann = annotations[i]; + tooltip.appendChild(annotationTooltip(ann)); + } + showTooltipFor(cm, e, tooltip, target); + } + function onMouseOver(cm, e) { + var target = e.target || e.srcElement; + if (!/\bCodeMirror-lint-mark-/.test(target.className)) return; + var box = target.getBoundingClientRect(), + x = (box.left + box.right) / 2, + y = (box.top + box.bottom) / 2; + var spans = cm.findMarksAt(cm.coordsChar({ + left: x, + top: y + }, "client")); + var annotations = []; + for (var i = 0; i < spans.length; ++i) { + var ann = spans[i].__annotation; + if (ann) annotations.push(ann); + } + if (annotations.length) popupTooltips(cm, annotations, e); + } + CodeMirror.defineOption("lint", false, function (cm, val, old) { + if (old && old != CodeMirror.Init) { + clearMarks(cm); + if (cm.state.lint.options.lintOnChange !== false) cm.off("change", onChange); + CodeMirror.off(cm.getWrapperElement(), "mouseover", cm.state.lint.onMouseOver); + clearTimeout(cm.state.lint.timeout); + delete cm.state.lint; + } + if (val) { + var gutters = cm.getOption("gutters"), + hasLintGutter = false; + for (var i = 0; i < gutters.length; ++i) if (gutters[i] == GUTTER_ID) hasLintGutter = true; + var state = cm.state.lint = new LintState(cm, val, hasLintGutter); + if (state.options.lintOnChange) cm.on("change", onChange); + if (state.options.tooltips != false && state.options.tooltips != "gutter") CodeMirror.on(cm.getWrapperElement(), "mouseover", state.onMouseOver); + startLinting(cm); + } + }); + CodeMirror.defineExtension("performLint", function () { + startLinting(this); + }); +}); + +/***/ }), + +/***/ "../../../node_modules/codemirror/addon/search/jump-to-line.js": +/*!*********************************************************************!*\ + !*** ../../../node_modules/codemirror/addon/search/jump-to-line.js ***! + \*********************************************************************/ +/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) { + +"use strict"; + + +// CodeMirror, copyright (c) by Marijn Haverbeke and others +// Distributed under an MIT license: https://codemirror.net/LICENSE + +// Defines jumpToLine command. Uses dialog.js if present. + +(function (mod) { + if (true) + // CommonJS + mod(__webpack_require__(/*! ../../lib/codemirror */ "../../../node_modules/codemirror/lib/codemirror.js"), __webpack_require__(/*! ../dialog/dialog */ "../../../node_modules/codemirror/addon/dialog/dialog.js"));else {} +})(function (CodeMirror) { + "use strict"; + + // default search panel location + CodeMirror.defineOption("search", { + bottom: false + }); + function dialog(cm, text, shortText, deflt, f) { + if (cm.openDialog) cm.openDialog(text, f, { + value: deflt, + selectValueOnOpen: true, + bottom: cm.options.search.bottom + });else f(prompt(shortText, deflt)); + } + function getJumpDialog(cm) { + return cm.phrase("Jump to line:") + ' ' + cm.phrase("(Use line:column or scroll% syntax)") + ''; + } + function interpretLine(cm, string) { + var num = Number(string); + if (/^[-+]/.test(string)) return cm.getCursor().line + num;else return num - 1; + } + CodeMirror.commands.jumpToLine = function (cm) { + var cur = cm.getCursor(); + dialog(cm, getJumpDialog(cm), cm.phrase("Jump to line:"), cur.line + 1 + ":" + cur.ch, function (posStr) { + if (!posStr) return; + var match; + if (match = /^\s*([\+\-]?\d+)\s*\:\s*(\d+)\s*$/.exec(posStr)) { + cm.setCursor(interpretLine(cm, match[1]), Number(match[2])); + } else if (match = /^\s*([\+\-]?\d+(\.\d+)?)\%\s*/.exec(posStr)) { + var line = Math.round(cm.lineCount() * Number(match[1]) / 100); + if (/^[-+]/.test(match[1])) line = cur.line + line + 1; + cm.setCursor(line - 1, cur.ch); + } else if (match = /^\s*\:?\s*([\+\-]?\d+)\s*/.exec(posStr)) { + cm.setCursor(interpretLine(cm, match[1]), cur.ch); + } + }); + }; + CodeMirror.keyMap["default"]["Alt-G"] = "jumpToLine"; +}); + +/***/ }), + +/***/ "../../../node_modules/codemirror/addon/search/search.js": +/*!***************************************************************!*\ + !*** ../../../node_modules/codemirror/addon/search/search.js ***! + \***************************************************************/ +/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) { + +"use strict"; + + +// CodeMirror, copyright (c) by Marijn Haverbeke and others +// Distributed under an MIT license: https://codemirror.net/LICENSE + +// Define search commands. Depends on dialog.js or another +// implementation of the openDialog method. + +// Replace works a little oddly -- it will do the replace on the next +// Ctrl-G (or whatever is bound to findNext) press. You prevent a +// replace by making sure the match is no longer selected when hitting +// Ctrl-G. + +(function (mod) { + if (true) + // CommonJS + mod(__webpack_require__(/*! ../../lib/codemirror */ "../../../node_modules/codemirror/lib/codemirror.js"), __webpack_require__(/*! ./searchcursor */ "../../../node_modules/codemirror/addon/search/searchcursor.js"), __webpack_require__(/*! ../dialog/dialog */ "../../../node_modules/codemirror/addon/dialog/dialog.js"));else {} +})(function (CodeMirror) { + "use strict"; + + // default search panel location + CodeMirror.defineOption("search", { + bottom: false + }); + function searchOverlay(query, caseInsensitive) { + if (typeof query == "string") query = new RegExp(query.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g, "\\$&"), caseInsensitive ? "gi" : "g");else if (!query.global) query = new RegExp(query.source, query.ignoreCase ? "gi" : "g"); + return { + token: function (stream) { + query.lastIndex = stream.pos; + var match = query.exec(stream.string); + if (match && match.index == stream.pos) { + stream.pos += match[0].length || 1; + return "searching"; + } else if (match) { + stream.pos = match.index; + } else { + stream.skipToEnd(); + } + } + }; + } + function SearchState() { + this.posFrom = this.posTo = this.lastQuery = this.query = null; + this.overlay = null; + } + function getSearchState(cm) { + return cm.state.search || (cm.state.search = new SearchState()); + } + function queryCaseInsensitive(query) { + return typeof query == "string" && query == query.toLowerCase(); + } + function getSearchCursor(cm, query, pos) { + // Heuristic: if the query string is all lowercase, do a case insensitive search. + return cm.getSearchCursor(query, pos, { + caseFold: queryCaseInsensitive(query), + multiline: true + }); + } + function persistentDialog(cm, text, deflt, onEnter, onKeyDown) { + cm.openDialog(text, onEnter, { + value: deflt, + selectValueOnOpen: true, + closeOnEnter: false, + onClose: function () { + clearSearch(cm); + }, + onKeyDown: onKeyDown, + bottom: cm.options.search.bottom + }); + } + function dialog(cm, text, shortText, deflt, f) { + if (cm.openDialog) cm.openDialog(text, f, { + value: deflt, + selectValueOnOpen: true, + bottom: cm.options.search.bottom + });else f(prompt(shortText, deflt)); + } + function confirmDialog(cm, text, shortText, fs) { + if (cm.openConfirm) cm.openConfirm(text, fs);else if (confirm(shortText)) fs[0](); + } + function parseString(string) { + return string.replace(/\\([nrt\\])/g, function (match, ch) { + if (ch == "n") return "\n"; + if (ch == "r") return "\r"; + if (ch == "t") return "\t"; + if (ch == "\\") return "\\"; + return match; + }); + } + function parseQuery(query) { + var isRE = query.match(/^\/(.*)\/([a-z]*)$/); + if (isRE) { + try { + query = new RegExp(isRE[1], isRE[2].indexOf("i") == -1 ? "" : "i"); + } catch (e) {} // Not a regular expression after all, do a string search + } else { + query = parseString(query); + } + if (typeof query == "string" ? query == "" : query.test("")) query = /x^/; + return query; + } + function startSearch(cm, state, query) { + state.queryText = query; + state.query = parseQuery(query); + cm.removeOverlay(state.overlay, queryCaseInsensitive(state.query)); + state.overlay = searchOverlay(state.query, queryCaseInsensitive(state.query)); + cm.addOverlay(state.overlay); + if (cm.showMatchesOnScrollbar) { + if (state.annotate) { + state.annotate.clear(); + state.annotate = null; + } + state.annotate = cm.showMatchesOnScrollbar(state.query, queryCaseInsensitive(state.query)); + } + } + function doSearch(cm, rev, persistent, immediate) { + var state = getSearchState(cm); + if (state.query) return findNext(cm, rev); + var q = cm.getSelection() || state.lastQuery; + if (q instanceof RegExp && q.source == "x^") q = null; + if (persistent && cm.openDialog) { + var hiding = null; + var searchNext = function (query, event) { + CodeMirror.e_stop(event); + if (!query) return; + if (query != state.queryText) { + startSearch(cm, state, query); + state.posFrom = state.posTo = cm.getCursor(); + } + if (hiding) hiding.style.opacity = 1; + findNext(cm, event.shiftKey, function (_, to) { + var dialog; + if (to.line < 3 && document.querySelector && (dialog = cm.display.wrapper.querySelector(".CodeMirror-dialog")) && dialog.getBoundingClientRect().bottom - 4 > cm.cursorCoords(to, "window").top) (hiding = dialog).style.opacity = .4; + }); + }; + persistentDialog(cm, getQueryDialog(cm), q, searchNext, function (event, query) { + var keyName = CodeMirror.keyName(event); + var extra = cm.getOption('extraKeys'), + cmd = extra && extra[keyName] || CodeMirror.keyMap[cm.getOption("keyMap")][keyName]; + if (cmd == "findNext" || cmd == "findPrev" || cmd == "findPersistentNext" || cmd == "findPersistentPrev") { + CodeMirror.e_stop(event); + startSearch(cm, getSearchState(cm), query); + cm.execCommand(cmd); + } else if (cmd == "find" || cmd == "findPersistent") { + CodeMirror.e_stop(event); + searchNext(query, event); + } + }); + if (immediate && q) { + startSearch(cm, state, q); + findNext(cm, rev); + } + } else { + dialog(cm, getQueryDialog(cm), "Search for:", q, function (query) { + if (query && !state.query) cm.operation(function () { + startSearch(cm, state, query); + state.posFrom = state.posTo = cm.getCursor(); + findNext(cm, rev); + }); + }); + } + } + function findNext(cm, rev, callback) { + cm.operation(function () { + var state = getSearchState(cm); + var cursor = getSearchCursor(cm, state.query, rev ? state.posFrom : state.posTo); + if (!cursor.find(rev)) { + cursor = getSearchCursor(cm, state.query, rev ? CodeMirror.Pos(cm.lastLine()) : CodeMirror.Pos(cm.firstLine(), 0)); + if (!cursor.find(rev)) return; + } + cm.setSelection(cursor.from(), cursor.to()); + cm.scrollIntoView({ + from: cursor.from(), + to: cursor.to() + }, 20); + state.posFrom = cursor.from(); + state.posTo = cursor.to(); + if (callback) callback(cursor.from(), cursor.to()); + }); + } + function clearSearch(cm) { + cm.operation(function () { + var state = getSearchState(cm); + state.lastQuery = state.query; + if (!state.query) return; + state.query = state.queryText = null; + cm.removeOverlay(state.overlay); + if (state.annotate) { + state.annotate.clear(); + state.annotate = null; + } + }); + } + function el(tag, attrs) { + var element = tag ? document.createElement(tag) : document.createDocumentFragment(); + for (var key in attrs) { + element[key] = attrs[key]; + } + for (var i = 2; i < arguments.length; i++) { + var child = arguments[i]; + element.appendChild(typeof child == "string" ? document.createTextNode(child) : child); + } + return element; + } + function getQueryDialog(cm) { + return el("", null, el("span", { + className: "CodeMirror-search-label" + }, cm.phrase("Search:")), " ", el("input", { + type: "text", + "style": "width: 10em", + className: "CodeMirror-search-field" + }), " ", el("span", { + style: "color: #888", + className: "CodeMirror-search-hint" + }, cm.phrase("(Use /re/ syntax for regexp search)"))); + } + function getReplaceQueryDialog(cm) { + return el("", null, " ", el("input", { + type: "text", + "style": "width: 10em", + className: "CodeMirror-search-field" + }), " ", el("span", { + style: "color: #888", + className: "CodeMirror-search-hint" + }, cm.phrase("(Use /re/ syntax for regexp search)"))); + } + function getReplacementQueryDialog(cm) { + return el("", null, el("span", { + className: "CodeMirror-search-label" + }, cm.phrase("With:")), " ", el("input", { + type: "text", + "style": "width: 10em", + className: "CodeMirror-search-field" + })); + } + function getDoReplaceConfirm(cm) { + return el("", null, el("span", { + className: "CodeMirror-search-label" + }, cm.phrase("Replace?")), " ", el("button", {}, cm.phrase("Yes")), " ", el("button", {}, cm.phrase("No")), " ", el("button", {}, cm.phrase("All")), " ", el("button", {}, cm.phrase("Stop"))); + } + function replaceAll(cm, query, text) { + cm.operation(function () { + for (var cursor = getSearchCursor(cm, query); cursor.findNext();) { + if (typeof query != "string") { + var match = cm.getRange(cursor.from(), cursor.to()).match(query); + cursor.replace(text.replace(/\$(\d)/g, function (_, i) { + return match[i]; + })); + } else cursor.replace(text); + } + }); + } + function replace(cm, all) { + if (cm.getOption("readOnly")) return; + var query = cm.getSelection() || getSearchState(cm).lastQuery; + var dialogText = all ? cm.phrase("Replace all:") : cm.phrase("Replace:"); + var fragment = el("", null, el("span", { + className: "CodeMirror-search-label" + }, dialogText), getReplaceQueryDialog(cm)); + dialog(cm, fragment, dialogText, query, function (query) { + if (!query) return; + query = parseQuery(query); + dialog(cm, getReplacementQueryDialog(cm), cm.phrase("Replace with:"), "", function (text) { + text = parseString(text); + if (all) { + replaceAll(cm, query, text); + } else { + clearSearch(cm); + var cursor = getSearchCursor(cm, query, cm.getCursor("from")); + var advance = function () { + var start = cursor.from(), + match; + if (!(match = cursor.findNext())) { + cursor = getSearchCursor(cm, query); + if (!(match = cursor.findNext()) || start && cursor.from().line == start.line && cursor.from().ch == start.ch) return; + } + cm.setSelection(cursor.from(), cursor.to()); + cm.scrollIntoView({ + from: cursor.from(), + to: cursor.to() + }); + confirmDialog(cm, getDoReplaceConfirm(cm), cm.phrase("Replace?"), [function () { + doReplace(match); + }, advance, function () { + replaceAll(cm, query, text); + }]); + }; + var doReplace = function (match) { + cursor.replace(typeof query == "string" ? text : text.replace(/\$(\d)/g, function (_, i) { + return match[i]; + })); + advance(); + }; + advance(); + } + }); + }); + } + CodeMirror.commands.find = function (cm) { + clearSearch(cm); + doSearch(cm); + }; + CodeMirror.commands.findPersistent = function (cm) { + clearSearch(cm); + doSearch(cm, false, true); + }; + CodeMirror.commands.findPersistentNext = function (cm) { + doSearch(cm, false, true, true); + }; + CodeMirror.commands.findPersistentPrev = function (cm) { + doSearch(cm, true, true, true); + }; + CodeMirror.commands.findNext = doSearch; + CodeMirror.commands.findPrev = function (cm) { + doSearch(cm, true); + }; + CodeMirror.commands.clearSearch = clearSearch; + CodeMirror.commands.replace = replace; + CodeMirror.commands.replaceAll = function (cm) { + replace(cm, true); + }; +}); + +/***/ }), + +/***/ "../../../node_modules/codemirror/addon/search/searchcursor.js": +/*!*********************************************************************!*\ + !*** ../../../node_modules/codemirror/addon/search/searchcursor.js ***! + \*********************************************************************/ +/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) { + +"use strict"; + + +// CodeMirror, copyright (c) by Marijn Haverbeke and others +// Distributed under an MIT license: https://codemirror.net/LICENSE + +(function (mod) { + if (true) + // CommonJS + mod(__webpack_require__(/*! ../../lib/codemirror */ "../../../node_modules/codemirror/lib/codemirror.js"));else {} +})(function (CodeMirror) { + "use strict"; + + var Pos = CodeMirror.Pos; + function regexpFlags(regexp) { + var flags = regexp.flags; + return flags != null ? flags : (regexp.ignoreCase ? "i" : "") + (regexp.global ? "g" : "") + (regexp.multiline ? "m" : ""); + } + function ensureFlags(regexp, flags) { + var current = regexpFlags(regexp), + target = current; + for (var i = 0; i < flags.length; i++) if (target.indexOf(flags.charAt(i)) == -1) target += flags.charAt(i); + return current == target ? regexp : new RegExp(regexp.source, target); + } + function maybeMultiline(regexp) { + return /\\s|\\n|\n|\\W|\\D|\[\^/.test(regexp.source); + } + function searchRegexpForward(doc, regexp, start) { + regexp = ensureFlags(regexp, "g"); + for (var line = start.line, ch = start.ch, last = doc.lastLine(); line <= last; line++, ch = 0) { + regexp.lastIndex = ch; + var string = doc.getLine(line), + match = regexp.exec(string); + if (match) return { + from: Pos(line, match.index), + to: Pos(line, match.index + match[0].length), + match: match + }; + } + } + function searchRegexpForwardMultiline(doc, regexp, start) { + if (!maybeMultiline(regexp)) return searchRegexpForward(doc, regexp, start); + regexp = ensureFlags(regexp, "gm"); + var string, + chunk = 1; + for (var line = start.line, last = doc.lastLine(); line <= last;) { + // This grows the search buffer in exponentially-sized chunks + // between matches, so that nearby matches are fast and don't + // require concatenating the whole document (in case we're + // searching for something that has tons of matches), but at the + // same time, the amount of retries is limited. + for (var i = 0; i < chunk; i++) { + if (line > last) break; + var curLine = doc.getLine(line++); + string = string == null ? curLine : string + "\n" + curLine; + } + chunk = chunk * 2; + regexp.lastIndex = start.ch; + var match = regexp.exec(string); + if (match) { + var before = string.slice(0, match.index).split("\n"), + inside = match[0].split("\n"); + var startLine = start.line + before.length - 1, + startCh = before[before.length - 1].length; + return { + from: Pos(startLine, startCh), + to: Pos(startLine + inside.length - 1, inside.length == 1 ? startCh + inside[0].length : inside[inside.length - 1].length), + match: match + }; + } + } + } + function lastMatchIn(string, regexp, endMargin) { + var match, + from = 0; + while (from <= string.length) { + regexp.lastIndex = from; + var newMatch = regexp.exec(string); + if (!newMatch) break; + var end = newMatch.index + newMatch[0].length; + if (end > string.length - endMargin) break; + if (!match || end > match.index + match[0].length) match = newMatch; + from = newMatch.index + 1; + } + return match; + } + function searchRegexpBackward(doc, regexp, start) { + regexp = ensureFlags(regexp, "g"); + for (var line = start.line, ch = start.ch, first = doc.firstLine(); line >= first; line--, ch = -1) { + var string = doc.getLine(line); + var match = lastMatchIn(string, regexp, ch < 0 ? 0 : string.length - ch); + if (match) return { + from: Pos(line, match.index), + to: Pos(line, match.index + match[0].length), + match: match + }; + } + } + function searchRegexpBackwardMultiline(doc, regexp, start) { + if (!maybeMultiline(regexp)) return searchRegexpBackward(doc, regexp, start); + regexp = ensureFlags(regexp, "gm"); + var string, + chunkSize = 1, + endMargin = doc.getLine(start.line).length - start.ch; + for (var line = start.line, first = doc.firstLine(); line >= first;) { + for (var i = 0; i < chunkSize && line >= first; i++) { + var curLine = doc.getLine(line--); + string = string == null ? curLine : curLine + "\n" + string; + } + chunkSize *= 2; + var match = lastMatchIn(string, regexp, endMargin); + if (match) { + var before = string.slice(0, match.index).split("\n"), + inside = match[0].split("\n"); + var startLine = line + before.length, + startCh = before[before.length - 1].length; + return { + from: Pos(startLine, startCh), + to: Pos(startLine + inside.length - 1, inside.length == 1 ? startCh + inside[0].length : inside[inside.length - 1].length), + match: match + }; + } + } + } + var doFold, noFold; + if (String.prototype.normalize) { + doFold = function (str) { + return str.normalize("NFD").toLowerCase(); + }; + noFold = function (str) { + return str.normalize("NFD"); + }; + } else { + doFold = function (str) { + return str.toLowerCase(); + }; + noFold = function (str) { + return str; + }; + } + + // Maps a position in a case-folded line back to a position in the original line + // (compensating for codepoints increasing in number during folding) + function adjustPos(orig, folded, pos, foldFunc) { + if (orig.length == folded.length) return pos; + for (var min = 0, max = pos + Math.max(0, orig.length - folded.length);;) { + if (min == max) return min; + var mid = min + max >> 1; + var len = foldFunc(orig.slice(0, mid)).length; + if (len == pos) return mid;else if (len > pos) max = mid;else min = mid + 1; + } + } + function searchStringForward(doc, query, start, caseFold) { + // Empty string would match anything and never progress, so we + // define it to match nothing instead. + if (!query.length) return null; + var fold = caseFold ? doFold : noFold; + var lines = fold(query).split(/\r|\n\r?/); + search: for (var line = start.line, ch = start.ch, last = doc.lastLine() + 1 - lines.length; line <= last; line++, ch = 0) { + var orig = doc.getLine(line).slice(ch), + string = fold(orig); + if (lines.length == 1) { + var found = string.indexOf(lines[0]); + if (found == -1) continue search; + var start = adjustPos(orig, string, found, fold) + ch; + return { + from: Pos(line, adjustPos(orig, string, found, fold) + ch), + to: Pos(line, adjustPos(orig, string, found + lines[0].length, fold) + ch) + }; + } else { + var cutFrom = string.length - lines[0].length; + if (string.slice(cutFrom) != lines[0]) continue search; + for (var i = 1; i < lines.length - 1; i++) if (fold(doc.getLine(line + i)) != lines[i]) continue search; + var end = doc.getLine(line + lines.length - 1), + endString = fold(end), + lastLine = lines[lines.length - 1]; + if (endString.slice(0, lastLine.length) != lastLine) continue search; + return { + from: Pos(line, adjustPos(orig, string, cutFrom, fold) + ch), + to: Pos(line + lines.length - 1, adjustPos(end, endString, lastLine.length, fold)) + }; + } + } + } + function searchStringBackward(doc, query, start, caseFold) { + if (!query.length) return null; + var fold = caseFold ? doFold : noFold; + var lines = fold(query).split(/\r|\n\r?/); + search: for (var line = start.line, ch = start.ch, first = doc.firstLine() - 1 + lines.length; line >= first; line--, ch = -1) { + var orig = doc.getLine(line); + if (ch > -1) orig = orig.slice(0, ch); + var string = fold(orig); + if (lines.length == 1) { + var found = string.lastIndexOf(lines[0]); + if (found == -1) continue search; + return { + from: Pos(line, adjustPos(orig, string, found, fold)), + to: Pos(line, adjustPos(orig, string, found + lines[0].length, fold)) + }; + } else { + var lastLine = lines[lines.length - 1]; + if (string.slice(0, lastLine.length) != lastLine) continue search; + for (var i = 1, start = line - lines.length + 1; i < lines.length - 1; i++) if (fold(doc.getLine(start + i)) != lines[i]) continue search; + var top = doc.getLine(line + 1 - lines.length), + topString = fold(top); + if (topString.slice(topString.length - lines[0].length) != lines[0]) continue search; + return { + from: Pos(line + 1 - lines.length, adjustPos(top, topString, top.length - lines[0].length, fold)), + to: Pos(line, adjustPos(orig, string, lastLine.length, fold)) + }; + } + } + } + function SearchCursor(doc, query, pos, options) { + this.atOccurrence = false; + this.afterEmptyMatch = false; + this.doc = doc; + pos = pos ? doc.clipPos(pos) : Pos(0, 0); + this.pos = { + from: pos, + to: pos + }; + var caseFold; + if (typeof options == "object") { + caseFold = options.caseFold; + } else { + // Backwards compat for when caseFold was the 4th argument + caseFold = options; + options = null; + } + if (typeof query == "string") { + if (caseFold == null) caseFold = false; + this.matches = function (reverse, pos) { + return (reverse ? searchStringBackward : searchStringForward)(doc, query, pos, caseFold); + }; + } else { + query = ensureFlags(query, "gm"); + if (!options || options.multiline !== false) this.matches = function (reverse, pos) { + return (reverse ? searchRegexpBackwardMultiline : searchRegexpForwardMultiline)(doc, query, pos); + };else this.matches = function (reverse, pos) { + return (reverse ? searchRegexpBackward : searchRegexpForward)(doc, query, pos); + }; + } + } + SearchCursor.prototype = { + findNext: function () { + return this.find(false); + }, + findPrevious: function () { + return this.find(true); + }, + find: function (reverse) { + var head = this.doc.clipPos(reverse ? this.pos.from : this.pos.to); + if (this.afterEmptyMatch && this.atOccurrence) { + // do not return the same 0 width match twice + head = Pos(head.line, head.ch); + if (reverse) { + head.ch--; + if (head.ch < 0) { + head.line--; + head.ch = (this.doc.getLine(head.line) || "").length; + } + } else { + head.ch++; + if (head.ch > (this.doc.getLine(head.line) || "").length) { + head.ch = 0; + head.line++; + } + } + if (CodeMirror.cmpPos(head, this.doc.clipPos(head)) != 0) { + return this.atOccurrence = false; + } + } + var result = this.matches(reverse, head); + this.afterEmptyMatch = result && CodeMirror.cmpPos(result.from, result.to) == 0; + if (result) { + this.pos = result; + this.atOccurrence = true; + return this.pos.match || true; + } else { + var end = Pos(reverse ? this.doc.firstLine() : this.doc.lastLine() + 1, 0); + this.pos = { + from: end, + to: end + }; + return this.atOccurrence = false; + } + }, + from: function () { + if (this.atOccurrence) return this.pos.from; + }, + to: function () { + if (this.atOccurrence) return this.pos.to; + }, + replace: function (newText, origin) { + if (!this.atOccurrence) return; + var lines = CodeMirror.splitLines(newText); + this.doc.replaceRange(lines, this.pos.from, this.pos.to, origin); + this.pos.to = Pos(this.pos.from.line + lines.length - 1, lines[lines.length - 1].length + (lines.length == 1 ? this.pos.from.ch : 0)); + } + }; + CodeMirror.defineExtension("getSearchCursor", function (query, pos, caseFold) { + return new SearchCursor(this.doc, query, pos, caseFold); + }); + CodeMirror.defineDocExtension("getSearchCursor", function (query, pos, caseFold) { + return new SearchCursor(this, query, pos, caseFold); + }); + CodeMirror.defineExtension("selectMatches", function (query, caseFold) { + var ranges = []; + var cur = this.getSearchCursor(query, this.getCursor("from"), caseFold); + while (cur.findNext()) { + if (CodeMirror.cmpPos(cur.to(), this.getCursor("to")) > 0) break; + ranges.push({ + anchor: cur.from(), + head: cur.to() + }); + } + if (ranges.length) this.setSelections(ranges, 0); + }); +}); + +/***/ }), + +/***/ "../../../node_modules/codemirror/keymap/sublime.js": +/*!**********************************************************!*\ + !*** ../../../node_modules/codemirror/keymap/sublime.js ***! + \**********************************************************/ +/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) { + +"use strict"; + + +// CodeMirror, copyright (c) by Marijn Haverbeke and others +// Distributed under an MIT license: https://codemirror.net/LICENSE + +// A rough approximation of Sublime Text's keybindings +// Depends on addon/search/searchcursor.js and optionally addon/dialog/dialogs.js + +(function (mod) { + if (true) + // CommonJS + mod(__webpack_require__(/*! ../lib/codemirror */ "../../../node_modules/codemirror/lib/codemirror.js"), __webpack_require__(/*! ../addon/search/searchcursor */ "../../../node_modules/codemirror/addon/search/searchcursor.js"), __webpack_require__(/*! ../addon/edit/matchbrackets */ "../../../node_modules/codemirror/addon/edit/matchbrackets.js"));else {} +})(function (CodeMirror) { + "use strict"; + + var cmds = CodeMirror.commands; + var Pos = CodeMirror.Pos; + + // This is not exactly Sublime's algorithm. I couldn't make heads or tails of that. + function findPosSubword(doc, start, dir) { + if (dir < 0 && start.ch == 0) return doc.clipPos(Pos(start.line - 1)); + var line = doc.getLine(start.line); + if (dir > 0 && start.ch >= line.length) return doc.clipPos(Pos(start.line + 1, 0)); + var state = "start", + type, + startPos = start.ch; + for (var pos = startPos, e = dir < 0 ? 0 : line.length, i = 0; pos != e; pos += dir, i++) { + var next = line.charAt(dir < 0 ? pos - 1 : pos); + var cat = next != "_" && CodeMirror.isWordChar(next) ? "w" : "o"; + if (cat == "w" && next.toUpperCase() == next) cat = "W"; + if (state == "start") { + if (cat != "o") { + state = "in"; + type = cat; + } else startPos = pos + dir; + } else if (state == "in") { + if (type != cat) { + if (type == "w" && cat == "W" && dir < 0) pos--; + if (type == "W" && cat == "w" && dir > 0) { + // From uppercase to lowercase + if (pos == startPos + 1) { + type = "w"; + continue; + } else pos--; + } + break; + } + } + } + return Pos(start.line, pos); + } + function moveSubword(cm, dir) { + cm.extendSelectionsBy(function (range) { + if (cm.display.shift || cm.doc.extend || range.empty()) return findPosSubword(cm.doc, range.head, dir);else return dir < 0 ? range.from() : range.to(); + }); + } + cmds.goSubwordLeft = function (cm) { + moveSubword(cm, -1); + }; + cmds.goSubwordRight = function (cm) { + moveSubword(cm, 1); + }; + cmds.scrollLineUp = function (cm) { + var info = cm.getScrollInfo(); + if (!cm.somethingSelected()) { + var visibleBottomLine = cm.lineAtHeight(info.top + info.clientHeight, "local"); + if (cm.getCursor().line >= visibleBottomLine) cm.execCommand("goLineUp"); + } + cm.scrollTo(null, info.top - cm.defaultTextHeight()); + }; + cmds.scrollLineDown = function (cm) { + var info = cm.getScrollInfo(); + if (!cm.somethingSelected()) { + var visibleTopLine = cm.lineAtHeight(info.top, "local") + 1; + if (cm.getCursor().line <= visibleTopLine) cm.execCommand("goLineDown"); + } + cm.scrollTo(null, info.top + cm.defaultTextHeight()); + }; + cmds.splitSelectionByLine = function (cm) { + var ranges = cm.listSelections(), + lineRanges = []; + for (var i = 0; i < ranges.length; i++) { + var from = ranges[i].from(), + to = ranges[i].to(); + for (var line = from.line; line <= to.line; ++line) if (!(to.line > from.line && line == to.line && to.ch == 0)) lineRanges.push({ + anchor: line == from.line ? from : Pos(line, 0), + head: line == to.line ? to : Pos(line) + }); + } + cm.setSelections(lineRanges, 0); + }; + cmds.singleSelectionTop = function (cm) { + var range = cm.listSelections()[0]; + cm.setSelection(range.anchor, range.head, { + scroll: false + }); + }; + cmds.selectLine = function (cm) { + var ranges = cm.listSelections(), + extended = []; + for (var i = 0; i < ranges.length; i++) { + var range = ranges[i]; + extended.push({ + anchor: Pos(range.from().line, 0), + head: Pos(range.to().line + 1, 0) + }); + } + cm.setSelections(extended); + }; + function insertLine(cm, above) { + if (cm.isReadOnly()) return CodeMirror.Pass; + cm.operation(function () { + var len = cm.listSelections().length, + newSelection = [], + last = -1; + for (var i = 0; i < len; i++) { + var head = cm.listSelections()[i].head; + if (head.line <= last) continue; + var at = Pos(head.line + (above ? 0 : 1), 0); + cm.replaceRange("\n", at, null, "+insertLine"); + cm.indentLine(at.line, null, true); + newSelection.push({ + head: at, + anchor: at + }); + last = head.line + 1; + } + cm.setSelections(newSelection); + }); + cm.execCommand("indentAuto"); + } + cmds.insertLineAfter = function (cm) { + return insertLine(cm, false); + }; + cmds.insertLineBefore = function (cm) { + return insertLine(cm, true); + }; + function wordAt(cm, pos) { + var start = pos.ch, + end = start, + line = cm.getLine(pos.line); + while (start && CodeMirror.isWordChar(line.charAt(start - 1))) --start; + while (end < line.length && CodeMirror.isWordChar(line.charAt(end))) ++end; + return { + from: Pos(pos.line, start), + to: Pos(pos.line, end), + word: line.slice(start, end) + }; + } + cmds.selectNextOccurrence = function (cm) { + var from = cm.getCursor("from"), + to = cm.getCursor("to"); + var fullWord = cm.state.sublimeFindFullWord == cm.doc.sel; + if (CodeMirror.cmpPos(from, to) == 0) { + var word = wordAt(cm, from); + if (!word.word) return; + cm.setSelection(word.from, word.to); + fullWord = true; + } else { + var text = cm.getRange(from, to); + var query = fullWord ? new RegExp("\\b" + text + "\\b") : text; + var cur = cm.getSearchCursor(query, to); + var found = cur.findNext(); + if (!found) { + cur = cm.getSearchCursor(query, Pos(cm.firstLine(), 0)); + found = cur.findNext(); + } + if (!found || isSelectedRange(cm.listSelections(), cur.from(), cur.to())) return; + cm.addSelection(cur.from(), cur.to()); + } + if (fullWord) cm.state.sublimeFindFullWord = cm.doc.sel; + }; + cmds.skipAndSelectNextOccurrence = function (cm) { + var prevAnchor = cm.getCursor("anchor"), + prevHead = cm.getCursor("head"); + cmds.selectNextOccurrence(cm); + if (CodeMirror.cmpPos(prevAnchor, prevHead) != 0) { + cm.doc.setSelections(cm.doc.listSelections().filter(function (sel) { + return sel.anchor != prevAnchor || sel.head != prevHead; + })); + } + }; + function addCursorToSelection(cm, dir) { + var ranges = cm.listSelections(), + newRanges = []; + for (var i = 0; i < ranges.length; i++) { + var range = ranges[i]; + var newAnchor = cm.findPosV(range.anchor, dir, "line", range.anchor.goalColumn); + var newHead = cm.findPosV(range.head, dir, "line", range.head.goalColumn); + newAnchor.goalColumn = range.anchor.goalColumn != null ? range.anchor.goalColumn : cm.cursorCoords(range.anchor, "div").left; + newHead.goalColumn = range.head.goalColumn != null ? range.head.goalColumn : cm.cursorCoords(range.head, "div").left; + var newRange = { + anchor: newAnchor, + head: newHead + }; + newRanges.push(range); + newRanges.push(newRange); + } + cm.setSelections(newRanges); + } + cmds.addCursorToPrevLine = function (cm) { + addCursorToSelection(cm, -1); + }; + cmds.addCursorToNextLine = function (cm) { + addCursorToSelection(cm, 1); + }; + function isSelectedRange(ranges, from, to) { + for (var i = 0; i < ranges.length; i++) if (CodeMirror.cmpPos(ranges[i].from(), from) == 0 && CodeMirror.cmpPos(ranges[i].to(), to) == 0) return true; + return false; + } + var mirror = "(){}[]"; + function selectBetweenBrackets(cm) { + var ranges = cm.listSelections(), + newRanges = []; + for (var i = 0; i < ranges.length; i++) { + var range = ranges[i], + pos = range.head, + opening = cm.scanForBracket(pos, -1); + if (!opening) return false; + for (;;) { + var closing = cm.scanForBracket(pos, 1); + if (!closing) return false; + if (closing.ch == mirror.charAt(mirror.indexOf(opening.ch) + 1)) { + var startPos = Pos(opening.pos.line, opening.pos.ch + 1); + if (CodeMirror.cmpPos(startPos, range.from()) == 0 && CodeMirror.cmpPos(closing.pos, range.to()) == 0) { + opening = cm.scanForBracket(opening.pos, -1); + if (!opening) return false; + } else { + newRanges.push({ + anchor: startPos, + head: closing.pos + }); + break; + } + } + pos = Pos(closing.pos.line, closing.pos.ch + 1); + } + } + cm.setSelections(newRanges); + return true; + } + cmds.selectScope = function (cm) { + selectBetweenBrackets(cm) || cm.execCommand("selectAll"); + }; + cmds.selectBetweenBrackets = function (cm) { + if (!selectBetweenBrackets(cm)) return CodeMirror.Pass; + }; + function puncType(type) { + return !type ? null : /\bpunctuation\b/.test(type) ? type : undefined; + } + cmds.goToBracket = function (cm) { + cm.extendSelectionsBy(function (range) { + var next = cm.scanForBracket(range.head, 1, puncType(cm.getTokenTypeAt(range.head))); + if (next && CodeMirror.cmpPos(next.pos, range.head) != 0) return next.pos; + var prev = cm.scanForBracket(range.head, -1, puncType(cm.getTokenTypeAt(Pos(range.head.line, range.head.ch + 1)))); + return prev && Pos(prev.pos.line, prev.pos.ch + 1) || range.head; + }); + }; + cmds.swapLineUp = function (cm) { + if (cm.isReadOnly()) return CodeMirror.Pass; + var ranges = cm.listSelections(), + linesToMove = [], + at = cm.firstLine() - 1, + newSels = []; + for (var i = 0; i < ranges.length; i++) { + var range = ranges[i], + from = range.from().line - 1, + to = range.to().line; + newSels.push({ + anchor: Pos(range.anchor.line - 1, range.anchor.ch), + head: Pos(range.head.line - 1, range.head.ch) + }); + if (range.to().ch == 0 && !range.empty()) --to; + if (from > at) linesToMove.push(from, to);else if (linesToMove.length) linesToMove[linesToMove.length - 1] = to; + at = to; + } + cm.operation(function () { + for (var i = 0; i < linesToMove.length; i += 2) { + var from = linesToMove[i], + to = linesToMove[i + 1]; + var line = cm.getLine(from); + cm.replaceRange("", Pos(from, 0), Pos(from + 1, 0), "+swapLine"); + if (to > cm.lastLine()) cm.replaceRange("\n" + line, Pos(cm.lastLine()), null, "+swapLine");else cm.replaceRange(line + "\n", Pos(to, 0), null, "+swapLine"); + } + cm.setSelections(newSels); + cm.scrollIntoView(); + }); + }; + cmds.swapLineDown = function (cm) { + if (cm.isReadOnly()) return CodeMirror.Pass; + var ranges = cm.listSelections(), + linesToMove = [], + at = cm.lastLine() + 1; + for (var i = ranges.length - 1; i >= 0; i--) { + var range = ranges[i], + from = range.to().line + 1, + to = range.from().line; + if (range.to().ch == 0 && !range.empty()) from--; + if (from < at) linesToMove.push(from, to);else if (linesToMove.length) linesToMove[linesToMove.length - 1] = to; + at = to; + } + cm.operation(function () { + for (var i = linesToMove.length - 2; i >= 0; i -= 2) { + var from = linesToMove[i], + to = linesToMove[i + 1]; + var line = cm.getLine(from); + if (from == cm.lastLine()) cm.replaceRange("", Pos(from - 1), Pos(from), "+swapLine");else cm.replaceRange("", Pos(from, 0), Pos(from + 1, 0), "+swapLine"); + cm.replaceRange(line + "\n", Pos(to, 0), null, "+swapLine"); + } + cm.scrollIntoView(); + }); + }; + cmds.toggleCommentIndented = function (cm) { + cm.toggleComment({ + indent: true + }); + }; + cmds.joinLines = function (cm) { + var ranges = cm.listSelections(), + joined = []; + for (var i = 0; i < ranges.length; i++) { + var range = ranges[i], + from = range.from(); + var start = from.line, + end = range.to().line; + while (i < ranges.length - 1 && ranges[i + 1].from().line == end) end = ranges[++i].to().line; + joined.push({ + start: start, + end: end, + anchor: !range.empty() && from + }); + } + cm.operation(function () { + var offset = 0, + ranges = []; + for (var i = 0; i < joined.length; i++) { + var obj = joined[i]; + var anchor = obj.anchor && Pos(obj.anchor.line - offset, obj.anchor.ch), + head; + for (var line = obj.start; line <= obj.end; line++) { + var actual = line - offset; + if (line == obj.end) head = Pos(actual, cm.getLine(actual).length + 1); + if (actual < cm.lastLine()) { + cm.replaceRange(" ", Pos(actual), Pos(actual + 1, /^\s*/.exec(cm.getLine(actual + 1))[0].length)); + ++offset; + } + } + ranges.push({ + anchor: anchor || head, + head: head + }); + } + cm.setSelections(ranges, 0); + }); + }; + cmds.duplicateLine = function (cm) { + cm.operation(function () { + var rangeCount = cm.listSelections().length; + for (var i = 0; i < rangeCount; i++) { + var range = cm.listSelections()[i]; + if (range.empty()) cm.replaceRange(cm.getLine(range.head.line) + "\n", Pos(range.head.line, 0));else cm.replaceRange(cm.getRange(range.from(), range.to()), range.from()); + } + cm.scrollIntoView(); + }); + }; + function sortLines(cm, caseSensitive, direction) { + if (cm.isReadOnly()) return CodeMirror.Pass; + var ranges = cm.listSelections(), + toSort = [], + selected; + for (var i = 0; i < ranges.length; i++) { + var range = ranges[i]; + if (range.empty()) continue; + var from = range.from().line, + to = range.to().line; + while (i < ranges.length - 1 && ranges[i + 1].from().line == to) to = ranges[++i].to().line; + if (!ranges[i].to().ch) to--; + toSort.push(from, to); + } + if (toSort.length) selected = true;else toSort.push(cm.firstLine(), cm.lastLine()); + cm.operation(function () { + var ranges = []; + for (var i = 0; i < toSort.length; i += 2) { + var from = toSort[i], + to = toSort[i + 1]; + var start = Pos(from, 0), + end = Pos(to); + var lines = cm.getRange(start, end, false); + if (caseSensitive) lines.sort(function (a, b) { + return a < b ? -direction : a == b ? 0 : direction; + });else lines.sort(function (a, b) { + var au = a.toUpperCase(), + bu = b.toUpperCase(); + if (au != bu) { + a = au; + b = bu; + } + return a < b ? -direction : a == b ? 0 : direction; + }); + cm.replaceRange(lines, start, end); + if (selected) ranges.push({ + anchor: start, + head: Pos(to + 1, 0) + }); + } + if (selected) cm.setSelections(ranges, 0); + }); + } + cmds.sortLines = function (cm) { + sortLines(cm, true, 1); + }; + cmds.reverseSortLines = function (cm) { + sortLines(cm, true, -1); + }; + cmds.sortLinesInsensitive = function (cm) { + sortLines(cm, false, 1); + }; + cmds.reverseSortLinesInsensitive = function (cm) { + sortLines(cm, false, -1); + }; + cmds.nextBookmark = function (cm) { + var marks = cm.state.sublimeBookmarks; + if (marks) while (marks.length) { + var current = marks.shift(); + var found = current.find(); + if (found) { + marks.push(current); + return cm.setSelection(found.from, found.to); + } + } + }; + cmds.prevBookmark = function (cm) { + var marks = cm.state.sublimeBookmarks; + if (marks) while (marks.length) { + marks.unshift(marks.pop()); + var found = marks[marks.length - 1].find(); + if (!found) marks.pop();else return cm.setSelection(found.from, found.to); + } + }; + cmds.toggleBookmark = function (cm) { + var ranges = cm.listSelections(); + var marks = cm.state.sublimeBookmarks || (cm.state.sublimeBookmarks = []); + for (var i = 0; i < ranges.length; i++) { + var from = ranges[i].from(), + to = ranges[i].to(); + var found = ranges[i].empty() ? cm.findMarksAt(from) : cm.findMarks(from, to); + for (var j = 0; j < found.length; j++) { + if (found[j].sublimeBookmark) { + found[j].clear(); + for (var k = 0; k < marks.length; k++) if (marks[k] == found[j]) marks.splice(k--, 1); + break; + } + } + if (j == found.length) marks.push(cm.markText(from, to, { + sublimeBookmark: true, + clearWhenEmpty: false + })); + } + }; + cmds.clearBookmarks = function (cm) { + var marks = cm.state.sublimeBookmarks; + if (marks) for (var i = 0; i < marks.length; i++) marks[i].clear(); + marks.length = 0; + }; + cmds.selectBookmarks = function (cm) { + var marks = cm.state.sublimeBookmarks, + ranges = []; + if (marks) for (var i = 0; i < marks.length; i++) { + var found = marks[i].find(); + if (!found) marks.splice(i--, 0);else ranges.push({ + anchor: found.from, + head: found.to + }); + } + if (ranges.length) cm.setSelections(ranges, 0); + }; + function modifyWordOrSelection(cm, mod) { + cm.operation(function () { + var ranges = cm.listSelections(), + indices = [], + replacements = []; + for (var i = 0; i < ranges.length; i++) { + var range = ranges[i]; + if (range.empty()) { + indices.push(i); + replacements.push(""); + } else replacements.push(mod(cm.getRange(range.from(), range.to()))); + } + cm.replaceSelections(replacements, "around", "case"); + for (var i = indices.length - 1, at; i >= 0; i--) { + var range = ranges[indices[i]]; + if (at && CodeMirror.cmpPos(range.head, at) > 0) continue; + var word = wordAt(cm, range.head); + at = word.from; + cm.replaceRange(mod(word.word), word.from, word.to); + } + }); + } + cmds.smartBackspace = function (cm) { + if (cm.somethingSelected()) return CodeMirror.Pass; + cm.operation(function () { + var cursors = cm.listSelections(); + var indentUnit = cm.getOption("indentUnit"); + for (var i = cursors.length - 1; i >= 0; i--) { + var cursor = cursors[i].head; + var toStartOfLine = cm.getRange({ + line: cursor.line, + ch: 0 + }, cursor); + var column = CodeMirror.countColumn(toStartOfLine, null, cm.getOption("tabSize")); + + // Delete by one character by default + var deletePos = cm.findPosH(cursor, -1, "char", false); + if (toStartOfLine && !/\S/.test(toStartOfLine) && column % indentUnit == 0) { + var prevIndent = new Pos(cursor.line, CodeMirror.findColumn(toStartOfLine, column - indentUnit, indentUnit)); + + // Smart delete only if we found a valid prevIndent location + if (prevIndent.ch != cursor.ch) deletePos = prevIndent; + } + cm.replaceRange("", deletePos, cursor, "+delete"); + } + }); + }; + cmds.delLineRight = function (cm) { + cm.operation(function () { + var ranges = cm.listSelections(); + for (var i = ranges.length - 1; i >= 0; i--) cm.replaceRange("", ranges[i].anchor, Pos(ranges[i].to().line), "+delete"); + cm.scrollIntoView(); + }); + }; + cmds.upcaseAtCursor = function (cm) { + modifyWordOrSelection(cm, function (str) { + return str.toUpperCase(); + }); + }; + cmds.downcaseAtCursor = function (cm) { + modifyWordOrSelection(cm, function (str) { + return str.toLowerCase(); + }); + }; + cmds.setSublimeMark = function (cm) { + if (cm.state.sublimeMark) cm.state.sublimeMark.clear(); + cm.state.sublimeMark = cm.setBookmark(cm.getCursor()); + }; + cmds.selectToSublimeMark = function (cm) { + var found = cm.state.sublimeMark && cm.state.sublimeMark.find(); + if (found) cm.setSelection(cm.getCursor(), found); + }; + cmds.deleteToSublimeMark = function (cm) { + var found = cm.state.sublimeMark && cm.state.sublimeMark.find(); + if (found) { + var from = cm.getCursor(), + to = found; + if (CodeMirror.cmpPos(from, to) > 0) { + var tmp = to; + to = from; + from = tmp; + } + cm.state.sublimeKilled = cm.getRange(from, to); + cm.replaceRange("", from, to); + } + }; + cmds.swapWithSublimeMark = function (cm) { + var found = cm.state.sublimeMark && cm.state.sublimeMark.find(); + if (found) { + cm.state.sublimeMark.clear(); + cm.state.sublimeMark = cm.setBookmark(cm.getCursor()); + cm.setCursor(found); + } + }; + cmds.sublimeYank = function (cm) { + if (cm.state.sublimeKilled != null) cm.replaceSelection(cm.state.sublimeKilled, null, "paste"); + }; + cmds.showInCenter = function (cm) { + var pos = cm.cursorCoords(null, "local"); + cm.scrollTo(null, (pos.top + pos.bottom) / 2 - cm.getScrollInfo().clientHeight / 2); + }; + function getTarget(cm) { + var from = cm.getCursor("from"), + to = cm.getCursor("to"); + if (CodeMirror.cmpPos(from, to) == 0) { + var word = wordAt(cm, from); + if (!word.word) return; + from = word.from; + to = word.to; + } + return { + from: from, + to: to, + query: cm.getRange(from, to), + word: word + }; + } + function findAndGoTo(cm, forward) { + var target = getTarget(cm); + if (!target) return; + var query = target.query; + var cur = cm.getSearchCursor(query, forward ? target.to : target.from); + if (forward ? cur.findNext() : cur.findPrevious()) { + cm.setSelection(cur.from(), cur.to()); + } else { + cur = cm.getSearchCursor(query, forward ? Pos(cm.firstLine(), 0) : cm.clipPos(Pos(cm.lastLine()))); + if (forward ? cur.findNext() : cur.findPrevious()) cm.setSelection(cur.from(), cur.to());else if (target.word) cm.setSelection(target.from, target.to); + } + } + ; + cmds.findUnder = function (cm) { + findAndGoTo(cm, true); + }; + cmds.findUnderPrevious = function (cm) { + findAndGoTo(cm, false); + }; + cmds.findAllUnder = function (cm) { + var target = getTarget(cm); + if (!target) return; + var cur = cm.getSearchCursor(target.query); + var matches = []; + var primaryIndex = -1; + while (cur.findNext()) { + matches.push({ + anchor: cur.from(), + head: cur.to() + }); + if (cur.from().line <= target.from.line && cur.from().ch <= target.from.ch) primaryIndex++; + } + cm.setSelections(matches, primaryIndex); + }; + var keyMap = CodeMirror.keyMap; + keyMap.macSublime = { + "Cmd-Left": "goLineStartSmart", + "Shift-Tab": "indentLess", + "Shift-Ctrl-K": "deleteLine", + "Alt-Q": "wrapLines", + "Ctrl-Left": "goSubwordLeft", + "Ctrl-Right": "goSubwordRight", + "Ctrl-Alt-Up": "scrollLineUp", + "Ctrl-Alt-Down": "scrollLineDown", + "Cmd-L": "selectLine", + "Shift-Cmd-L": "splitSelectionByLine", + "Esc": "singleSelectionTop", + "Cmd-Enter": "insertLineAfter", + "Shift-Cmd-Enter": "insertLineBefore", + "Cmd-D": "selectNextOccurrence", + "Shift-Cmd-Space": "selectScope", + "Shift-Cmd-M": "selectBetweenBrackets", + "Cmd-M": "goToBracket", + "Cmd-Ctrl-Up": "swapLineUp", + "Cmd-Ctrl-Down": "swapLineDown", + "Cmd-/": "toggleCommentIndented", + "Cmd-J": "joinLines", + "Shift-Cmd-D": "duplicateLine", + "F5": "sortLines", + "Shift-F5": "reverseSortLines", + "Cmd-F5": "sortLinesInsensitive", + "Shift-Cmd-F5": "reverseSortLinesInsensitive", + "F2": "nextBookmark", + "Shift-F2": "prevBookmark", + "Cmd-F2": "toggleBookmark", + "Shift-Cmd-F2": "clearBookmarks", + "Alt-F2": "selectBookmarks", + "Backspace": "smartBackspace", + "Cmd-K Cmd-D": "skipAndSelectNextOccurrence", + "Cmd-K Cmd-K": "delLineRight", + "Cmd-K Cmd-U": "upcaseAtCursor", + "Cmd-K Cmd-L": "downcaseAtCursor", + "Cmd-K Cmd-Space": "setSublimeMark", + "Cmd-K Cmd-A": "selectToSublimeMark", + "Cmd-K Cmd-W": "deleteToSublimeMark", + "Cmd-K Cmd-X": "swapWithSublimeMark", + "Cmd-K Cmd-Y": "sublimeYank", + "Cmd-K Cmd-C": "showInCenter", + "Cmd-K Cmd-G": "clearBookmarks", + "Cmd-K Cmd-Backspace": "delLineLeft", + "Cmd-K Cmd-1": "foldAll", + "Cmd-K Cmd-0": "unfoldAll", + "Cmd-K Cmd-J": "unfoldAll", + "Ctrl-Shift-Up": "addCursorToPrevLine", + "Ctrl-Shift-Down": "addCursorToNextLine", + "Cmd-F3": "findUnder", + "Shift-Cmd-F3": "findUnderPrevious", + "Alt-F3": "findAllUnder", + "Shift-Cmd-[": "fold", + "Shift-Cmd-]": "unfold", + "Cmd-I": "findIncremental", + "Shift-Cmd-I": "findIncrementalReverse", + "Cmd-H": "replace", + "F3": "findNext", + "Shift-F3": "findPrev", + "fallthrough": "macDefault" + }; + CodeMirror.normalizeKeyMap(keyMap.macSublime); + keyMap.pcSublime = { + "Shift-Tab": "indentLess", + "Shift-Ctrl-K": "deleteLine", + "Alt-Q": "wrapLines", + "Ctrl-T": "transposeChars", + "Alt-Left": "goSubwordLeft", + "Alt-Right": "goSubwordRight", + "Ctrl-Up": "scrollLineUp", + "Ctrl-Down": "scrollLineDown", + "Ctrl-L": "selectLine", + "Shift-Ctrl-L": "splitSelectionByLine", + "Esc": "singleSelectionTop", + "Ctrl-Enter": "insertLineAfter", + "Shift-Ctrl-Enter": "insertLineBefore", + "Ctrl-D": "selectNextOccurrence", + "Shift-Ctrl-Space": "selectScope", + "Shift-Ctrl-M": "selectBetweenBrackets", + "Ctrl-M": "goToBracket", + "Shift-Ctrl-Up": "swapLineUp", + "Shift-Ctrl-Down": "swapLineDown", + "Ctrl-/": "toggleCommentIndented", + "Ctrl-J": "joinLines", + "Shift-Ctrl-D": "duplicateLine", + "F9": "sortLines", + "Shift-F9": "reverseSortLines", + "Ctrl-F9": "sortLinesInsensitive", + "Shift-Ctrl-F9": "reverseSortLinesInsensitive", + "F2": "nextBookmark", + "Shift-F2": "prevBookmark", + "Ctrl-F2": "toggleBookmark", + "Shift-Ctrl-F2": "clearBookmarks", + "Alt-F2": "selectBookmarks", + "Backspace": "smartBackspace", + "Ctrl-K Ctrl-D": "skipAndSelectNextOccurrence", + "Ctrl-K Ctrl-K": "delLineRight", + "Ctrl-K Ctrl-U": "upcaseAtCursor", + "Ctrl-K Ctrl-L": "downcaseAtCursor", + "Ctrl-K Ctrl-Space": "setSublimeMark", + "Ctrl-K Ctrl-A": "selectToSublimeMark", + "Ctrl-K Ctrl-W": "deleteToSublimeMark", + "Ctrl-K Ctrl-X": "swapWithSublimeMark", + "Ctrl-K Ctrl-Y": "sublimeYank", + "Ctrl-K Ctrl-C": "showInCenter", + "Ctrl-K Ctrl-G": "clearBookmarks", + "Ctrl-K Ctrl-Backspace": "delLineLeft", + "Ctrl-K Ctrl-1": "foldAll", + "Ctrl-K Ctrl-0": "unfoldAll", + "Ctrl-K Ctrl-J": "unfoldAll", + "Ctrl-Alt-Up": "addCursorToPrevLine", + "Ctrl-Alt-Down": "addCursorToNextLine", + "Ctrl-F3": "findUnder", + "Shift-Ctrl-F3": "findUnderPrevious", + "Alt-F3": "findAllUnder", + "Shift-Ctrl-[": "fold", + "Shift-Ctrl-]": "unfold", + "Ctrl-I": "findIncremental", + "Shift-Ctrl-I": "findIncrementalReverse", + "Ctrl-H": "replace", + "F3": "findNext", + "Shift-F3": "findPrev", + "fallthrough": "pcDefault" + }; + CodeMirror.normalizeKeyMap(keyMap.pcSublime); + var mac = keyMap.default == keyMap.macDefault; + keyMap.sublime = mac ? keyMap.macSublime : keyMap.pcSublime; +}); + +/***/ }), + +/***/ "../../../node_modules/codemirror/lib/codemirror.js": +/*!**********************************************************!*\ + !*** ../../../node_modules/codemirror/lib/codemirror.js ***! + \**********************************************************/ +/***/ (function(module) { + +"use strict"; + + +// CodeMirror, copyright (c) by Marijn Haverbeke and others +// Distributed under an MIT license: https://codemirror.net/LICENSE + +// This is CodeMirror (https://codemirror.net), a code editor +// implemented in JavaScript on top of the browser's DOM. +// +// You can find some technical background for some of the code below +// at http://marijnhaverbeke.nl/blog/#cm-internals . + +(function (global, factory) { + true ? module.exports = factory() : 0; +})(void 0, function () { + 'use strict'; + + // Kludges for bugs and behavior differences that can't be feature + // detected are enabled based on userAgent etc sniffing. + var userAgent = navigator.userAgent; + var platform = navigator.platform; + var gecko = /gecko\/\d/i.test(userAgent); + var ie_upto10 = /MSIE \d/.test(userAgent); + var ie_11up = /Trident\/(?:[7-9]|\d{2,})\..*rv:(\d+)/.exec(userAgent); + var edge = /Edge\/(\d+)/.exec(userAgent); + var ie = ie_upto10 || ie_11up || edge; + var ie_version = ie && (ie_upto10 ? document.documentMode || 6 : +(edge || ie_11up)[1]); + var webkit = !edge && /WebKit\//.test(userAgent); + var qtwebkit = webkit && /Qt\/\d+\.\d+/.test(userAgent); + var chrome = !edge && /Chrome\//.test(userAgent); + var presto = /Opera\//.test(userAgent); + var safari = /Apple Computer/.test(navigator.vendor); + var mac_geMountainLion = /Mac OS X 1\d\D([8-9]|\d\d)\D/.test(userAgent); + var phantom = /PhantomJS/.test(userAgent); + var ios = safari && (/Mobile\/\w+/.test(userAgent) || navigator.maxTouchPoints > 2); + var android = /Android/.test(userAgent); + // This is woefully incomplete. Suggestions for alternative methods welcome. + var mobile = ios || android || /webOS|BlackBerry|Opera Mini|Opera Mobi|IEMobile/i.test(userAgent); + var mac = ios || /Mac/.test(platform); + var chromeOS = /\bCrOS\b/.test(userAgent); + var windows = /win/i.test(platform); + var presto_version = presto && userAgent.match(/Version\/(\d*\.\d*)/); + if (presto_version) { + presto_version = Number(presto_version[1]); + } + if (presto_version && presto_version >= 15) { + presto = false; + webkit = true; + } + // Some browsers use the wrong event properties to signal cmd/ctrl on OS X + var flipCtrlCmd = mac && (qtwebkit || presto && (presto_version == null || presto_version < 12.11)); + var captureRightClick = gecko || ie && ie_version >= 9; + function classTest(cls) { + return new RegExp("(^|\\s)" + cls + "(?:$|\\s)\\s*"); + } + var rmClass = function (node, cls) { + var current = node.className; + var match = classTest(cls).exec(current); + if (match) { + var after = current.slice(match.index + match[0].length); + node.className = current.slice(0, match.index) + (after ? match[1] + after : ""); + } + }; + function removeChildren(e) { + for (var count = e.childNodes.length; count > 0; --count) { + e.removeChild(e.firstChild); + } + return e; + } + function removeChildrenAndAdd(parent, e) { + return removeChildren(parent).appendChild(e); + } + function elt(tag, content, className, style) { + var e = document.createElement(tag); + if (className) { + e.className = className; + } + if (style) { + e.style.cssText = style; + } + if (typeof content == "string") { + e.appendChild(document.createTextNode(content)); + } else if (content) { + for (var i = 0; i < content.length; ++i) { + e.appendChild(content[i]); + } + } + return e; + } + // wrapper for elt, which removes the elt from the accessibility tree + function eltP(tag, content, className, style) { + var e = elt(tag, content, className, style); + e.setAttribute("role", "presentation"); + return e; + } + var range; + if (document.createRange) { + range = function (node, start, end, endNode) { + var r = document.createRange(); + r.setEnd(endNode || node, end); + r.setStart(node, start); + return r; + }; + } else { + range = function (node, start, end) { + var r = document.body.createTextRange(); + try { + r.moveToElementText(node.parentNode); + } catch (e) { + return r; + } + r.collapse(true); + r.moveEnd("character", end); + r.moveStart("character", start); + return r; + }; + } + function contains(parent, child) { + if (child.nodeType == 3) + // Android browser always returns false when child is a textnode + { + child = child.parentNode; + } + if (parent.contains) { + return parent.contains(child); + } + do { + if (child.nodeType == 11) { + child = child.host; + } + if (child == parent) { + return true; + } + } while (child = child.parentNode); + } + function activeElt() { + // IE and Edge may throw an "Unspecified Error" when accessing document.activeElement. + // IE < 10 will throw when accessed while the page is loading or in an iframe. + // IE > 9 and Edge will throw when accessed in an iframe if document.body is unavailable. + var activeElement; + try { + activeElement = document.activeElement; + } catch (e) { + activeElement = document.body || null; + } + while (activeElement && activeElement.shadowRoot && activeElement.shadowRoot.activeElement) { + activeElement = activeElement.shadowRoot.activeElement; + } + return activeElement; + } + function addClass(node, cls) { + var current = node.className; + if (!classTest(cls).test(current)) { + node.className += (current ? " " : "") + cls; + } + } + function joinClasses(a, b) { + var as = a.split(" "); + for (var i = 0; i < as.length; i++) { + if (as[i] && !classTest(as[i]).test(b)) { + b += " " + as[i]; + } + } + return b; + } + var selectInput = function (node) { + node.select(); + }; + if (ios) + // Mobile Safari apparently has a bug where select() is broken. + { + selectInput = function (node) { + node.selectionStart = 0; + node.selectionEnd = node.value.length; + }; + } else if (ie) + // Suppress mysterious IE10 errors + { + selectInput = function (node) { + try { + node.select(); + } catch (_e) {} + }; + } + function bind(f) { + var args = Array.prototype.slice.call(arguments, 1); + return function () { + return f.apply(null, args); + }; + } + function copyObj(obj, target, overwrite) { + if (!target) { + target = {}; + } + for (var prop in obj) { + if (obj.hasOwnProperty(prop) && (overwrite !== false || !target.hasOwnProperty(prop))) { + target[prop] = obj[prop]; + } + } + return target; + } + + // Counts the column offset in a string, taking tabs into account. + // Used mostly to find indentation. + function countColumn(string, end, tabSize, startIndex, startValue) { + if (end == null) { + end = string.search(/[^\s\u00a0]/); + if (end == -1) { + end = string.length; + } + } + for (var i = startIndex || 0, n = startValue || 0;;) { + var nextTab = string.indexOf("\t", i); + if (nextTab < 0 || nextTab >= end) { + return n + (end - i); + } + n += nextTab - i; + n += tabSize - n % tabSize; + i = nextTab + 1; + } + } + var Delayed = function () { + this.id = null; + this.f = null; + this.time = 0; + this.handler = bind(this.onTimeout, this); + }; + Delayed.prototype.onTimeout = function (self) { + self.id = 0; + if (self.time <= +new Date()) { + self.f(); + } else { + setTimeout(self.handler, self.time - +new Date()); + } + }; + Delayed.prototype.set = function (ms, f) { + this.f = f; + var time = +new Date() + ms; + if (!this.id || time < this.time) { + clearTimeout(this.id); + this.id = setTimeout(this.handler, ms); + this.time = time; + } + }; + function indexOf(array, elt) { + for (var i = 0; i < array.length; ++i) { + if (array[i] == elt) { + return i; + } + } + return -1; + } + + // Number of pixels added to scroller and sizer to hide scrollbar + var scrollerGap = 50; + + // Returned or thrown by various protocols to signal 'I'm not + // handling this'. + var Pass = { + toString: function () { + return "CodeMirror.Pass"; + } + }; + + // Reused option objects for setSelection & friends + var sel_dontScroll = { + scroll: false + }, + sel_mouse = { + origin: "*mouse" + }, + sel_move = { + origin: "+move" + }; + + // The inverse of countColumn -- find the offset that corresponds to + // a particular column. + function findColumn(string, goal, tabSize) { + for (var pos = 0, col = 0;;) { + var nextTab = string.indexOf("\t", pos); + if (nextTab == -1) { + nextTab = string.length; + } + var skipped = nextTab - pos; + if (nextTab == string.length || col + skipped >= goal) { + return pos + Math.min(skipped, goal - col); + } + col += nextTab - pos; + col += tabSize - col % tabSize; + pos = nextTab + 1; + if (col >= goal) { + return pos; + } + } + } + var spaceStrs = [""]; + function spaceStr(n) { + while (spaceStrs.length <= n) { + spaceStrs.push(lst(spaceStrs) + " "); + } + return spaceStrs[n]; + } + function lst(arr) { + return arr[arr.length - 1]; + } + function map(array, f) { + var out = []; + for (var i = 0; i < array.length; i++) { + out[i] = f(array[i], i); + } + return out; + } + function insertSorted(array, value, score) { + var pos = 0, + priority = score(value); + while (pos < array.length && score(array[pos]) <= priority) { + pos++; + } + array.splice(pos, 0, value); + } + function nothing() {} + function createObj(base, props) { + var inst; + if (Object.create) { + inst = Object.create(base); + } else { + nothing.prototype = base; + inst = new nothing(); + } + if (props) { + copyObj(props, inst); + } + return inst; + } + var nonASCIISingleCaseWordChar = /[\u00df\u0587\u0590-\u05f4\u0600-\u06ff\u3040-\u309f\u30a0-\u30ff\u3400-\u4db5\u4e00-\u9fcc\uac00-\ud7af]/; + function isWordCharBasic(ch) { + return /\w/.test(ch) || ch > "\x80" && (ch.toUpperCase() != ch.toLowerCase() || nonASCIISingleCaseWordChar.test(ch)); + } + function isWordChar(ch, helper) { + if (!helper) { + return isWordCharBasic(ch); + } + if (helper.source.indexOf("\\w") > -1 && isWordCharBasic(ch)) { + return true; + } + return helper.test(ch); + } + function isEmpty(obj) { + for (var n in obj) { + if (obj.hasOwnProperty(n) && obj[n]) { + return false; + } + } + return true; + } + + // Extending unicode characters. A series of a non-extending char + + // any number of extending chars is treated as a single unit as far + // as editing and measuring is concerned. This is not fully correct, + // since some scripts/fonts/browsers also treat other configurations + // of code points as a group. + var extendingChars = /[\u0300-\u036f\u0483-\u0489\u0591-\u05bd\u05bf\u05c1\u05c2\u05c4\u05c5\u05c7\u0610-\u061a\u064b-\u065e\u0670\u06d6-\u06dc\u06de-\u06e4\u06e7\u06e8\u06ea-\u06ed\u0711\u0730-\u074a\u07a6-\u07b0\u07eb-\u07f3\u0816-\u0819\u081b-\u0823\u0825-\u0827\u0829-\u082d\u0900-\u0902\u093c\u0941-\u0948\u094d\u0951-\u0955\u0962\u0963\u0981\u09bc\u09be\u09c1-\u09c4\u09cd\u09d7\u09e2\u09e3\u0a01\u0a02\u0a3c\u0a41\u0a42\u0a47\u0a48\u0a4b-\u0a4d\u0a51\u0a70\u0a71\u0a75\u0a81\u0a82\u0abc\u0ac1-\u0ac5\u0ac7\u0ac8\u0acd\u0ae2\u0ae3\u0b01\u0b3c\u0b3e\u0b3f\u0b41-\u0b44\u0b4d\u0b56\u0b57\u0b62\u0b63\u0b82\u0bbe\u0bc0\u0bcd\u0bd7\u0c3e-\u0c40\u0c46-\u0c48\u0c4a-\u0c4d\u0c55\u0c56\u0c62\u0c63\u0cbc\u0cbf\u0cc2\u0cc6\u0ccc\u0ccd\u0cd5\u0cd6\u0ce2\u0ce3\u0d3e\u0d41-\u0d44\u0d4d\u0d57\u0d62\u0d63\u0dca\u0dcf\u0dd2-\u0dd4\u0dd6\u0ddf\u0e31\u0e34-\u0e3a\u0e47-\u0e4e\u0eb1\u0eb4-\u0eb9\u0ebb\u0ebc\u0ec8-\u0ecd\u0f18\u0f19\u0f35\u0f37\u0f39\u0f71-\u0f7e\u0f80-\u0f84\u0f86\u0f87\u0f90-\u0f97\u0f99-\u0fbc\u0fc6\u102d-\u1030\u1032-\u1037\u1039\u103a\u103d\u103e\u1058\u1059\u105e-\u1060\u1071-\u1074\u1082\u1085\u1086\u108d\u109d\u135f\u1712-\u1714\u1732-\u1734\u1752\u1753\u1772\u1773\u17b7-\u17bd\u17c6\u17c9-\u17d3\u17dd\u180b-\u180d\u18a9\u1920-\u1922\u1927\u1928\u1932\u1939-\u193b\u1a17\u1a18\u1a56\u1a58-\u1a5e\u1a60\u1a62\u1a65-\u1a6c\u1a73-\u1a7c\u1a7f\u1b00-\u1b03\u1b34\u1b36-\u1b3a\u1b3c\u1b42\u1b6b-\u1b73\u1b80\u1b81\u1ba2-\u1ba5\u1ba8\u1ba9\u1c2c-\u1c33\u1c36\u1c37\u1cd0-\u1cd2\u1cd4-\u1ce0\u1ce2-\u1ce8\u1ced\u1dc0-\u1de6\u1dfd-\u1dff\u200c\u200d\u20d0-\u20f0\u2cef-\u2cf1\u2de0-\u2dff\u302a-\u302f\u3099\u309a\ua66f-\ua672\ua67c\ua67d\ua6f0\ua6f1\ua802\ua806\ua80b\ua825\ua826\ua8c4\ua8e0-\ua8f1\ua926-\ua92d\ua947-\ua951\ua980-\ua982\ua9b3\ua9b6-\ua9b9\ua9bc\uaa29-\uaa2e\uaa31\uaa32\uaa35\uaa36\uaa43\uaa4c\uaab0\uaab2-\uaab4\uaab7\uaab8\uaabe\uaabf\uaac1\uabe5\uabe8\uabed\udc00-\udfff\ufb1e\ufe00-\ufe0f\ufe20-\ufe26\uff9e\uff9f]/; + function isExtendingChar(ch) { + return ch.charCodeAt(0) >= 768 && extendingChars.test(ch); + } + + // Returns a number from the range [`0`; `str.length`] unless `pos` is outside that range. + function skipExtendingChars(str, pos, dir) { + while ((dir < 0 ? pos > 0 : pos < str.length) && isExtendingChar(str.charAt(pos))) { + pos += dir; + } + return pos; + } + + // Returns the value from the range [`from`; `to`] that satisfies + // `pred` and is closest to `from`. Assumes that at least `to` + // satisfies `pred`. Supports `from` being greater than `to`. + function findFirst(pred, from, to) { + // At any point we are certain `to` satisfies `pred`, don't know + // whether `from` does. + var dir = from > to ? -1 : 1; + for (;;) { + if (from == to) { + return from; + } + var midF = (from + to) / 2, + mid = dir < 0 ? Math.ceil(midF) : Math.floor(midF); + if (mid == from) { + return pred(mid) ? from : to; + } + if (pred(mid)) { + to = mid; + } else { + from = mid + dir; + } + } + } + + // BIDI HELPERS + + function iterateBidiSections(order, from, to, f) { + if (!order) { + return f(from, to, "ltr", 0); + } + var found = false; + for (var i = 0; i < order.length; ++i) { + var part = order[i]; + if (part.from < to && part.to > from || from == to && part.to == from) { + f(Math.max(part.from, from), Math.min(part.to, to), part.level == 1 ? "rtl" : "ltr", i); + found = true; + } + } + if (!found) { + f(from, to, "ltr"); + } + } + var bidiOther = null; + function getBidiPartAt(order, ch, sticky) { + var found; + bidiOther = null; + for (var i = 0; i < order.length; ++i) { + var cur = order[i]; + if (cur.from < ch && cur.to > ch) { + return i; + } + if (cur.to == ch) { + if (cur.from != cur.to && sticky == "before") { + found = i; + } else { + bidiOther = i; + } + } + if (cur.from == ch) { + if (cur.from != cur.to && sticky != "before") { + found = i; + } else { + bidiOther = i; + } + } + } + return found != null ? found : bidiOther; + } + + // Bidirectional ordering algorithm + // See http://unicode.org/reports/tr9/tr9-13.html for the algorithm + // that this (partially) implements. + + // One-char codes used for character types: + // L (L): Left-to-Right + // R (R): Right-to-Left + // r (AL): Right-to-Left Arabic + // 1 (EN): European Number + // + (ES): European Number Separator + // % (ET): European Number Terminator + // n (AN): Arabic Number + // , (CS): Common Number Separator + // m (NSM): Non-Spacing Mark + // b (BN): Boundary Neutral + // s (B): Paragraph Separator + // t (S): Segment Separator + // w (WS): Whitespace + // N (ON): Other Neutrals + + // Returns null if characters are ordered as they appear + // (left-to-right), or an array of sections ({from, to, level} + // objects) in the order in which they occur visually. + var bidiOrdering = function () { + // Character types for codepoints 0 to 0xff + var lowTypes = "bbbbbbbbbtstwsbbbbbbbbbbbbbbssstwNN%%%NNNNNN,N,N1111111111NNNNNNNLLLLLLLLLLLLLLLLLLLLLLLLLLNNNNNNLLLLLLLLLLLLLLLLLLLLLLLLLLNNNNbbbbbbsbbbbbbbbbbbbbbbbbbbbbbbbbb,N%%%%NNNNLNNNNN%%11NLNNN1LNNNNNLLLLLLLLLLLLLLLLLLLLLLLNLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLN"; + // Character types for codepoints 0x600 to 0x6f9 + var arabicTypes = "nnnnnnNNr%%r,rNNmmmmmmmmmmmrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrmmmmmmmmmmmmmmmmmmmmmnnnnnnnnnn%nnrrrmrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrmmmmmmmnNmmmmmmrrmmNmmmmrr1111111111"; + function charType(code) { + if (code <= 0xf7) { + return lowTypes.charAt(code); + } else if (0x590 <= code && code <= 0x5f4) { + return "R"; + } else if (0x600 <= code && code <= 0x6f9) { + return arabicTypes.charAt(code - 0x600); + } else if (0x6ee <= code && code <= 0x8ac) { + return "r"; + } else if (0x2000 <= code && code <= 0x200b) { + return "w"; + } else if (code == 0x200c) { + return "b"; + } else { + return "L"; + } + } + var bidiRE = /[\u0590-\u05f4\u0600-\u06ff\u0700-\u08ac]/; + var isNeutral = /[stwN]/, + isStrong = /[LRr]/, + countsAsLeft = /[Lb1n]/, + countsAsNum = /[1n]/; + function BidiSpan(level, from, to) { + this.level = level; + this.from = from; + this.to = to; + } + return function (str, direction) { + var outerType = direction == "ltr" ? "L" : "R"; + if (str.length == 0 || direction == "ltr" && !bidiRE.test(str)) { + return false; + } + var len = str.length, + types = []; + for (var i = 0; i < len; ++i) { + types.push(charType(str.charCodeAt(i))); + } + + // W1. Examine each non-spacing mark (NSM) in the level run, and + // change the type of the NSM to the type of the previous + // character. If the NSM is at the start of the level run, it will + // get the type of sor. + for (var i$1 = 0, prev = outerType; i$1 < len; ++i$1) { + var type = types[i$1]; + if (type == "m") { + types[i$1] = prev; + } else { + prev = type; + } + } + + // W2. Search backwards from each instance of a European number + // until the first strong type (R, L, AL, or sor) is found. If an + // AL is found, change the type of the European number to Arabic + // number. + // W3. Change all ALs to R. + for (var i$2 = 0, cur = outerType; i$2 < len; ++i$2) { + var type$1 = types[i$2]; + if (type$1 == "1" && cur == "r") { + types[i$2] = "n"; + } else if (isStrong.test(type$1)) { + cur = type$1; + if (type$1 == "r") { + types[i$2] = "R"; + } + } + } + + // W4. A single European separator between two European numbers + // changes to a European number. A single common separator between + // two numbers of the same type changes to that type. + for (var i$3 = 1, prev$1 = types[0]; i$3 < len - 1; ++i$3) { + var type$2 = types[i$3]; + if (type$2 == "+" && prev$1 == "1" && types[i$3 + 1] == "1") { + types[i$3] = "1"; + } else if (type$2 == "," && prev$1 == types[i$3 + 1] && (prev$1 == "1" || prev$1 == "n")) { + types[i$3] = prev$1; + } + prev$1 = type$2; + } + + // W5. A sequence of European terminators adjacent to European + // numbers changes to all European numbers. + // W6. Otherwise, separators and terminators change to Other + // Neutral. + for (var i$4 = 0; i$4 < len; ++i$4) { + var type$3 = types[i$4]; + if (type$3 == ",") { + types[i$4] = "N"; + } else if (type$3 == "%") { + var end = void 0; + for (end = i$4 + 1; end < len && types[end] == "%"; ++end) {} + var replace = i$4 && types[i$4 - 1] == "!" || end < len && types[end] == "1" ? "1" : "N"; + for (var j = i$4; j < end; ++j) { + types[j] = replace; + } + i$4 = end - 1; + } + } + + // W7. Search backwards from each instance of a European number + // until the first strong type (R, L, or sor) is found. If an L is + // found, then change the type of the European number to L. + for (var i$5 = 0, cur$1 = outerType; i$5 < len; ++i$5) { + var type$4 = types[i$5]; + if (cur$1 == "L" && type$4 == "1") { + types[i$5] = "L"; + } else if (isStrong.test(type$4)) { + cur$1 = type$4; + } + } + + // N1. A sequence of neutrals takes the direction of the + // surrounding strong text if the text on both sides has the same + // direction. European and Arabic numbers act as if they were R in + // terms of their influence on neutrals. Start-of-level-run (sor) + // and end-of-level-run (eor) are used at level run boundaries. + // N2. Any remaining neutrals take the embedding direction. + for (var i$6 = 0; i$6 < len; ++i$6) { + if (isNeutral.test(types[i$6])) { + var end$1 = void 0; + for (end$1 = i$6 + 1; end$1 < len && isNeutral.test(types[end$1]); ++end$1) {} + var before = (i$6 ? types[i$6 - 1] : outerType) == "L"; + var after = (end$1 < len ? types[end$1] : outerType) == "L"; + var replace$1 = before == after ? before ? "L" : "R" : outerType; + for (var j$1 = i$6; j$1 < end$1; ++j$1) { + types[j$1] = replace$1; + } + i$6 = end$1 - 1; + } + } + + // Here we depart from the documented algorithm, in order to avoid + // building up an actual levels array. Since there are only three + // levels (0, 1, 2) in an implementation that doesn't take + // explicit embedding into account, we can build up the order on + // the fly, without following the level-based algorithm. + var order = [], + m; + for (var i$7 = 0; i$7 < len;) { + if (countsAsLeft.test(types[i$7])) { + var start = i$7; + for (++i$7; i$7 < len && countsAsLeft.test(types[i$7]); ++i$7) {} + order.push(new BidiSpan(0, start, i$7)); + } else { + var pos = i$7, + at = order.length, + isRTL = direction == "rtl" ? 1 : 0; + for (++i$7; i$7 < len && types[i$7] != "L"; ++i$7) {} + for (var j$2 = pos; j$2 < i$7;) { + if (countsAsNum.test(types[j$2])) { + if (pos < j$2) { + order.splice(at, 0, new BidiSpan(1, pos, j$2)); + at += isRTL; + } + var nstart = j$2; + for (++j$2; j$2 < i$7 && countsAsNum.test(types[j$2]); ++j$2) {} + order.splice(at, 0, new BidiSpan(2, nstart, j$2)); + at += isRTL; + pos = j$2; + } else { + ++j$2; + } + } + if (pos < i$7) { + order.splice(at, 0, new BidiSpan(1, pos, i$7)); + } + } + } + if (direction == "ltr") { + if (order[0].level == 1 && (m = str.match(/^\s+/))) { + order[0].from = m[0].length; + order.unshift(new BidiSpan(0, 0, m[0].length)); + } + if (lst(order).level == 1 && (m = str.match(/\s+$/))) { + lst(order).to -= m[0].length; + order.push(new BidiSpan(0, len - m[0].length, len)); + } + } + return direction == "rtl" ? order.reverse() : order; + }; + }(); + + // Get the bidi ordering for the given line (and cache it). Returns + // false for lines that are fully left-to-right, and an array of + // BidiSpan objects otherwise. + function getOrder(line, direction) { + var order = line.order; + if (order == null) { + order = line.order = bidiOrdering(line.text, direction); + } + return order; + } + + // EVENT HANDLING + + // Lightweight event framework. on/off also work on DOM nodes, + // registering native DOM handlers. + + var noHandlers = []; + var on = function (emitter, type, f) { + if (emitter.addEventListener) { + emitter.addEventListener(type, f, false); + } else if (emitter.attachEvent) { + emitter.attachEvent("on" + type, f); + } else { + var map = emitter._handlers || (emitter._handlers = {}); + map[type] = (map[type] || noHandlers).concat(f); + } + }; + function getHandlers(emitter, type) { + return emitter._handlers && emitter._handlers[type] || noHandlers; + } + function off(emitter, type, f) { + if (emitter.removeEventListener) { + emitter.removeEventListener(type, f, false); + } else if (emitter.detachEvent) { + emitter.detachEvent("on" + type, f); + } else { + var map = emitter._handlers, + arr = map && map[type]; + if (arr) { + var index = indexOf(arr, f); + if (index > -1) { + map[type] = arr.slice(0, index).concat(arr.slice(index + 1)); + } + } + } + } + function signal(emitter, type /*, values...*/) { + var handlers = getHandlers(emitter, type); + if (!handlers.length) { + return; + } + var args = Array.prototype.slice.call(arguments, 2); + for (var i = 0; i < handlers.length; ++i) { + handlers[i].apply(null, args); + } + } + + // The DOM events that CodeMirror handles can be overridden by + // registering a (non-DOM) handler on the editor for the event name, + // and preventDefault-ing the event in that handler. + function signalDOMEvent(cm, e, override) { + if (typeof e == "string") { + e = { + type: e, + preventDefault: function () { + this.defaultPrevented = true; + } + }; + } + signal(cm, override || e.type, cm, e); + return e_defaultPrevented(e) || e.codemirrorIgnore; + } + function signalCursorActivity(cm) { + var arr = cm._handlers && cm._handlers.cursorActivity; + if (!arr) { + return; + } + var set = cm.curOp.cursorActivityHandlers || (cm.curOp.cursorActivityHandlers = []); + for (var i = 0; i < arr.length; ++i) { + if (indexOf(set, arr[i]) == -1) { + set.push(arr[i]); + } + } + } + function hasHandler(emitter, type) { + return getHandlers(emitter, type).length > 0; + } + + // Add on and off methods to a constructor's prototype, to make + // registering events on such objects more convenient. + function eventMixin(ctor) { + ctor.prototype.on = function (type, f) { + on(this, type, f); + }; + ctor.prototype.off = function (type, f) { + off(this, type, f); + }; + } + + // Due to the fact that we still support jurassic IE versions, some + // compatibility wrappers are needed. + + function e_preventDefault(e) { + if (e.preventDefault) { + e.preventDefault(); + } else { + e.returnValue = false; + } + } + function e_stopPropagation(e) { + if (e.stopPropagation) { + e.stopPropagation(); + } else { + e.cancelBubble = true; + } + } + function e_defaultPrevented(e) { + return e.defaultPrevented != null ? e.defaultPrevented : e.returnValue == false; + } + function e_stop(e) { + e_preventDefault(e); + e_stopPropagation(e); + } + function e_target(e) { + return e.target || e.srcElement; + } + function e_button(e) { + var b = e.which; + if (b == null) { + if (e.button & 1) { + b = 1; + } else if (e.button & 2) { + b = 3; + } else if (e.button & 4) { + b = 2; + } + } + if (mac && e.ctrlKey && b == 1) { + b = 3; + } + return b; + } + + // Detect drag-and-drop + var dragAndDrop = function () { + // There is *some* kind of drag-and-drop support in IE6-8, but I + // couldn't get it to work yet. + if (ie && ie_version < 9) { + return false; + } + var div = elt('div'); + return "draggable" in div || "dragDrop" in div; + }(); + var zwspSupported; + function zeroWidthElement(measure) { + if (zwspSupported == null) { + var test = elt("span", "\u200b"); + removeChildrenAndAdd(measure, elt("span", [test, document.createTextNode("x")])); + if (measure.firstChild.offsetHeight != 0) { + zwspSupported = test.offsetWidth <= 1 && test.offsetHeight > 2 && !(ie && ie_version < 8); + } + } + var node = zwspSupported ? elt("span", "\u200b") : elt("span", "\u00a0", null, "display: inline-block; width: 1px; margin-right: -1px"); + node.setAttribute("cm-text", ""); + return node; + } + + // Feature-detect IE's crummy client rect reporting for bidi text + var badBidiRects; + function hasBadBidiRects(measure) { + if (badBidiRects != null) { + return badBidiRects; + } + var txt = removeChildrenAndAdd(measure, document.createTextNode("A\u062eA")); + var r0 = range(txt, 0, 1).getBoundingClientRect(); + var r1 = range(txt, 1, 2).getBoundingClientRect(); + removeChildren(measure); + if (!r0 || r0.left == r0.right) { + return false; + } // Safari returns null in some cases (#2780) + return badBidiRects = r1.right - r0.right < 3; + } + + // See if "".split is the broken IE version, if so, provide an + // alternative way to split lines. + var splitLinesAuto = "\n\nb".split(/\n/).length != 3 ? function (string) { + var pos = 0, + result = [], + l = string.length; + while (pos <= l) { + var nl = string.indexOf("\n", pos); + if (nl == -1) { + nl = string.length; + } + var line = string.slice(pos, string.charAt(nl - 1) == "\r" ? nl - 1 : nl); + var rt = line.indexOf("\r"); + if (rt != -1) { + result.push(line.slice(0, rt)); + pos += rt + 1; + } else { + result.push(line); + pos = nl + 1; + } + } + return result; + } : function (string) { + return string.split(/\r\n?|\n/); + }; + var hasSelection = window.getSelection ? function (te) { + try { + return te.selectionStart != te.selectionEnd; + } catch (e) { + return false; + } + } : function (te) { + var range; + try { + range = te.ownerDocument.selection.createRange(); + } catch (e) {} + if (!range || range.parentElement() != te) { + return false; + } + return range.compareEndPoints("StartToEnd", range) != 0; + }; + var hasCopyEvent = function () { + var e = elt("div"); + if ("oncopy" in e) { + return true; + } + e.setAttribute("oncopy", "return;"); + return typeof e.oncopy == "function"; + }(); + var badZoomedRects = null; + function hasBadZoomedRects(measure) { + if (badZoomedRects != null) { + return badZoomedRects; + } + var node = removeChildrenAndAdd(measure, elt("span", "x")); + var normal = node.getBoundingClientRect(); + var fromRange = range(node, 0, 1).getBoundingClientRect(); + return badZoomedRects = Math.abs(normal.left - fromRange.left) > 1; + } + + // Known modes, by name and by MIME + var modes = {}, + mimeModes = {}; + + // Extra arguments are stored as the mode's dependencies, which is + // used by (legacy) mechanisms like loadmode.js to automatically + // load a mode. (Preferred mechanism is the require/define calls.) + function defineMode(name, mode) { + if (arguments.length > 2) { + mode.dependencies = Array.prototype.slice.call(arguments, 2); + } + modes[name] = mode; + } + function defineMIME(mime, spec) { + mimeModes[mime] = spec; + } + + // Given a MIME type, a {name, ...options} config object, or a name + // string, return a mode config object. + function resolveMode(spec) { + if (typeof spec == "string" && mimeModes.hasOwnProperty(spec)) { + spec = mimeModes[spec]; + } else if (spec && typeof spec.name == "string" && mimeModes.hasOwnProperty(spec.name)) { + var found = mimeModes[spec.name]; + if (typeof found == "string") { + found = { + name: found + }; + } + spec = createObj(found, spec); + spec.name = found.name; + } else if (typeof spec == "string" && /^[\w\-]+\/[\w\-]+\+xml$/.test(spec)) { + return resolveMode("application/xml"); + } else if (typeof spec == "string" && /^[\w\-]+\/[\w\-]+\+json$/.test(spec)) { + return resolveMode("application/json"); + } + if (typeof spec == "string") { + return { + name: spec + }; + } else { + return spec || { + name: "null" + }; + } + } + + // Given a mode spec (anything that resolveMode accepts), find and + // initialize an actual mode object. + function getMode(options, spec) { + spec = resolveMode(spec); + var mfactory = modes[spec.name]; + if (!mfactory) { + return getMode(options, "text/plain"); + } + var modeObj = mfactory(options, spec); + if (modeExtensions.hasOwnProperty(spec.name)) { + var exts = modeExtensions[spec.name]; + for (var prop in exts) { + if (!exts.hasOwnProperty(prop)) { + continue; + } + if (modeObj.hasOwnProperty(prop)) { + modeObj["_" + prop] = modeObj[prop]; + } + modeObj[prop] = exts[prop]; + } + } + modeObj.name = spec.name; + if (spec.helperType) { + modeObj.helperType = spec.helperType; + } + if (spec.modeProps) { + for (var prop$1 in spec.modeProps) { + modeObj[prop$1] = spec.modeProps[prop$1]; + } + } + return modeObj; + } + + // This can be used to attach properties to mode objects from + // outside the actual mode definition. + var modeExtensions = {}; + function extendMode(mode, properties) { + var exts = modeExtensions.hasOwnProperty(mode) ? modeExtensions[mode] : modeExtensions[mode] = {}; + copyObj(properties, exts); + } + function copyState(mode, state) { + if (state === true) { + return state; + } + if (mode.copyState) { + return mode.copyState(state); + } + var nstate = {}; + for (var n in state) { + var val = state[n]; + if (val instanceof Array) { + val = val.concat([]); + } + nstate[n] = val; + } + return nstate; + } + + // Given a mode and a state (for that mode), find the inner mode and + // state at the position that the state refers to. + function innerMode(mode, state) { + var info; + while (mode.innerMode) { + info = mode.innerMode(state); + if (!info || info.mode == mode) { + break; + } + state = info.state; + mode = info.mode; + } + return info || { + mode: mode, + state: state + }; + } + function startState(mode, a1, a2) { + return mode.startState ? mode.startState(a1, a2) : true; + } + + // STRING STREAM + + // Fed to the mode parsers, provides helper functions to make + // parsers more succinct. + + var StringStream = function (string, tabSize, lineOracle) { + this.pos = this.start = 0; + this.string = string; + this.tabSize = tabSize || 8; + this.lastColumnPos = this.lastColumnValue = 0; + this.lineStart = 0; + this.lineOracle = lineOracle; + }; + StringStream.prototype.eol = function () { + return this.pos >= this.string.length; + }; + StringStream.prototype.sol = function () { + return this.pos == this.lineStart; + }; + StringStream.prototype.peek = function () { + return this.string.charAt(this.pos) || undefined; + }; + StringStream.prototype.next = function () { + if (this.pos < this.string.length) { + return this.string.charAt(this.pos++); + } + }; + StringStream.prototype.eat = function (match) { + var ch = this.string.charAt(this.pos); + var ok; + if (typeof match == "string") { + ok = ch == match; + } else { + ok = ch && (match.test ? match.test(ch) : match(ch)); + } + if (ok) { + ++this.pos; + return ch; + } + }; + StringStream.prototype.eatWhile = function (match) { + var start = this.pos; + while (this.eat(match)) {} + return this.pos > start; + }; + StringStream.prototype.eatSpace = function () { + var start = this.pos; + while (/[\s\u00a0]/.test(this.string.charAt(this.pos))) { + ++this.pos; + } + return this.pos > start; + }; + StringStream.prototype.skipToEnd = function () { + this.pos = this.string.length; + }; + StringStream.prototype.skipTo = function (ch) { + var found = this.string.indexOf(ch, this.pos); + if (found > -1) { + this.pos = found; + return true; + } + }; + StringStream.prototype.backUp = function (n) { + this.pos -= n; + }; + StringStream.prototype.column = function () { + if (this.lastColumnPos < this.start) { + this.lastColumnValue = countColumn(this.string, this.start, this.tabSize, this.lastColumnPos, this.lastColumnValue); + this.lastColumnPos = this.start; + } + return this.lastColumnValue - (this.lineStart ? countColumn(this.string, this.lineStart, this.tabSize) : 0); + }; + StringStream.prototype.indentation = function () { + return countColumn(this.string, null, this.tabSize) - (this.lineStart ? countColumn(this.string, this.lineStart, this.tabSize) : 0); + }; + StringStream.prototype.match = function (pattern, consume, caseInsensitive) { + if (typeof pattern == "string") { + var cased = function (str) { + return caseInsensitive ? str.toLowerCase() : str; + }; + var substr = this.string.substr(this.pos, pattern.length); + if (cased(substr) == cased(pattern)) { + if (consume !== false) { + this.pos += pattern.length; + } + return true; + } + } else { + var match = this.string.slice(this.pos).match(pattern); + if (match && match.index > 0) { + return null; + } + if (match && consume !== false) { + this.pos += match[0].length; + } + return match; + } + }; + StringStream.prototype.current = function () { + return this.string.slice(this.start, this.pos); + }; + StringStream.prototype.hideFirstChars = function (n, inner) { + this.lineStart += n; + try { + return inner(); + } finally { + this.lineStart -= n; + } + }; + StringStream.prototype.lookAhead = function (n) { + var oracle = this.lineOracle; + return oracle && oracle.lookAhead(n); + }; + StringStream.prototype.baseToken = function () { + var oracle = this.lineOracle; + return oracle && oracle.baseToken(this.pos); + }; + + // Find the line object corresponding to the given line number. + function getLine(doc, n) { + n -= doc.first; + if (n < 0 || n >= doc.size) { + throw new Error("There is no line " + (n + doc.first) + " in the document."); + } + var chunk = doc; + while (!chunk.lines) { + for (var i = 0;; ++i) { + var child = chunk.children[i], + sz = child.chunkSize(); + if (n < sz) { + chunk = child; + break; + } + n -= sz; + } + } + return chunk.lines[n]; + } + + // Get the part of a document between two positions, as an array of + // strings. + function getBetween(doc, start, end) { + var out = [], + n = start.line; + doc.iter(start.line, end.line + 1, function (line) { + var text = line.text; + if (n == end.line) { + text = text.slice(0, end.ch); + } + if (n == start.line) { + text = text.slice(start.ch); + } + out.push(text); + ++n; + }); + return out; + } + // Get the lines between from and to, as array of strings. + function getLines(doc, from, to) { + var out = []; + doc.iter(from, to, function (line) { + out.push(line.text); + }); // iter aborts when callback returns truthy value + return out; + } + + // Update the height of a line, propagating the height change + // upwards to parent nodes. + function updateLineHeight(line, height) { + var diff = height - line.height; + if (diff) { + for (var n = line; n; n = n.parent) { + n.height += diff; + } + } + } + + // Given a line object, find its line number by walking up through + // its parent links. + function lineNo(line) { + if (line.parent == null) { + return null; + } + var cur = line.parent, + no = indexOf(cur.lines, line); + for (var chunk = cur.parent; chunk; cur = chunk, chunk = chunk.parent) { + for (var i = 0;; ++i) { + if (chunk.children[i] == cur) { + break; + } + no += chunk.children[i].chunkSize(); + } + } + return no + cur.first; + } + + // Find the line at the given vertical position, using the height + // information in the document tree. + function lineAtHeight(chunk, h) { + var n = chunk.first; + outer: do { + for (var i$1 = 0; i$1 < chunk.children.length; ++i$1) { + var child = chunk.children[i$1], + ch = child.height; + if (h < ch) { + chunk = child; + continue outer; + } + h -= ch; + n += child.chunkSize(); + } + return n; + } while (!chunk.lines); + var i = 0; + for (; i < chunk.lines.length; ++i) { + var line = chunk.lines[i], + lh = line.height; + if (h < lh) { + break; + } + h -= lh; + } + return n + i; + } + function isLine(doc, l) { + return l >= doc.first && l < doc.first + doc.size; + } + function lineNumberFor(options, i) { + return String(options.lineNumberFormatter(i + options.firstLineNumber)); + } + + // A Pos instance represents a position within the text. + function Pos(line, ch, sticky) { + if (sticky === void 0) sticky = null; + if (!(this instanceof Pos)) { + return new Pos(line, ch, sticky); + } + this.line = line; + this.ch = ch; + this.sticky = sticky; + } + + // Compare two positions, return 0 if they are the same, a negative + // number when a is less, and a positive number otherwise. + function cmp(a, b) { + return a.line - b.line || a.ch - b.ch; + } + function equalCursorPos(a, b) { + return a.sticky == b.sticky && cmp(a, b) == 0; + } + function copyPos(x) { + return Pos(x.line, x.ch); + } + function maxPos(a, b) { + return cmp(a, b) < 0 ? b : a; + } + function minPos(a, b) { + return cmp(a, b) < 0 ? a : b; + } + + // Most of the external API clips given positions to make sure they + // actually exist within the document. + function clipLine(doc, n) { + return Math.max(doc.first, Math.min(n, doc.first + doc.size - 1)); + } + function clipPos(doc, pos) { + if (pos.line < doc.first) { + return Pos(doc.first, 0); + } + var last = doc.first + doc.size - 1; + if (pos.line > last) { + return Pos(last, getLine(doc, last).text.length); + } + return clipToLen(pos, getLine(doc, pos.line).text.length); + } + function clipToLen(pos, linelen) { + var ch = pos.ch; + if (ch == null || ch > linelen) { + return Pos(pos.line, linelen); + } else if (ch < 0) { + return Pos(pos.line, 0); + } else { + return pos; + } + } + function clipPosArray(doc, array) { + var out = []; + for (var i = 0; i < array.length; i++) { + out[i] = clipPos(doc, array[i]); + } + return out; + } + var SavedContext = function (state, lookAhead) { + this.state = state; + this.lookAhead = lookAhead; + }; + var Context = function (doc, state, line, lookAhead) { + this.state = state; + this.doc = doc; + this.line = line; + this.maxLookAhead = lookAhead || 0; + this.baseTokens = null; + this.baseTokenPos = 1; + }; + Context.prototype.lookAhead = function (n) { + var line = this.doc.getLine(this.line + n); + if (line != null && n > this.maxLookAhead) { + this.maxLookAhead = n; + } + return line; + }; + Context.prototype.baseToken = function (n) { + if (!this.baseTokens) { + return null; + } + while (this.baseTokens[this.baseTokenPos] <= n) { + this.baseTokenPos += 2; + } + var type = this.baseTokens[this.baseTokenPos + 1]; + return { + type: type && type.replace(/( |^)overlay .*/, ""), + size: this.baseTokens[this.baseTokenPos] - n + }; + }; + Context.prototype.nextLine = function () { + this.line++; + if (this.maxLookAhead > 0) { + this.maxLookAhead--; + } + }; + Context.fromSaved = function (doc, saved, line) { + if (saved instanceof SavedContext) { + return new Context(doc, copyState(doc.mode, saved.state), line, saved.lookAhead); + } else { + return new Context(doc, copyState(doc.mode, saved), line); + } + }; + Context.prototype.save = function (copy) { + var state = copy !== false ? copyState(this.doc.mode, this.state) : this.state; + return this.maxLookAhead > 0 ? new SavedContext(state, this.maxLookAhead) : state; + }; + + // Compute a style array (an array starting with a mode generation + // -- for invalidation -- followed by pairs of end positions and + // style strings), which is used to highlight the tokens on the + // line. + function highlightLine(cm, line, context, forceToEnd) { + // A styles array always starts with a number identifying the + // mode/overlays that it is based on (for easy invalidation). + var st = [cm.state.modeGen], + lineClasses = {}; + // Compute the base array of styles + runMode(cm, line.text, cm.doc.mode, context, function (end, style) { + return st.push(end, style); + }, lineClasses, forceToEnd); + var state = context.state; + + // Run overlays, adjust style array. + var loop = function (o) { + context.baseTokens = st; + var overlay = cm.state.overlays[o], + i = 1, + at = 0; + context.state = true; + runMode(cm, line.text, overlay.mode, context, function (end, style) { + var start = i; + // Ensure there's a token end at the current position, and that i points at it + while (at < end) { + var i_end = st[i]; + if (i_end > end) { + st.splice(i, 1, end, st[i + 1], i_end); + } + i += 2; + at = Math.min(end, i_end); + } + if (!style) { + return; + } + if (overlay.opaque) { + st.splice(start, i - start, end, "overlay " + style); + i = start + 2; + } else { + for (; start < i; start += 2) { + var cur = st[start + 1]; + st[start + 1] = (cur ? cur + " " : "") + "overlay " + style; + } + } + }, lineClasses); + context.state = state; + context.baseTokens = null; + context.baseTokenPos = 1; + }; + for (var o = 0; o < cm.state.overlays.length; ++o) loop(o); + return { + styles: st, + classes: lineClasses.bgClass || lineClasses.textClass ? lineClasses : null + }; + } + function getLineStyles(cm, line, updateFrontier) { + if (!line.styles || line.styles[0] != cm.state.modeGen) { + var context = getContextBefore(cm, lineNo(line)); + var resetState = line.text.length > cm.options.maxHighlightLength && copyState(cm.doc.mode, context.state); + var result = highlightLine(cm, line, context); + if (resetState) { + context.state = resetState; + } + line.stateAfter = context.save(!resetState); + line.styles = result.styles; + if (result.classes) { + line.styleClasses = result.classes; + } else if (line.styleClasses) { + line.styleClasses = null; + } + if (updateFrontier === cm.doc.highlightFrontier) { + cm.doc.modeFrontier = Math.max(cm.doc.modeFrontier, ++cm.doc.highlightFrontier); + } + } + return line.styles; + } + function getContextBefore(cm, n, precise) { + var doc = cm.doc, + display = cm.display; + if (!doc.mode.startState) { + return new Context(doc, true, n); + } + var start = findStartLine(cm, n, precise); + var saved = start > doc.first && getLine(doc, start - 1).stateAfter; + var context = saved ? Context.fromSaved(doc, saved, start) : new Context(doc, startState(doc.mode), start); + doc.iter(start, n, function (line) { + processLine(cm, line.text, context); + var pos = context.line; + line.stateAfter = pos == n - 1 || pos % 5 == 0 || pos >= display.viewFrom && pos < display.viewTo ? context.save() : null; + context.nextLine(); + }); + if (precise) { + doc.modeFrontier = context.line; + } + return context; + } + + // Lightweight form of highlight -- proceed over this line and + // update state, but don't save a style array. Used for lines that + // aren't currently visible. + function processLine(cm, text, context, startAt) { + var mode = cm.doc.mode; + var stream = new StringStream(text, cm.options.tabSize, context); + stream.start = stream.pos = startAt || 0; + if (text == "") { + callBlankLine(mode, context.state); + } + while (!stream.eol()) { + readToken(mode, stream, context.state); + stream.start = stream.pos; + } + } + function callBlankLine(mode, state) { + if (mode.blankLine) { + return mode.blankLine(state); + } + if (!mode.innerMode) { + return; + } + var inner = innerMode(mode, state); + if (inner.mode.blankLine) { + return inner.mode.blankLine(inner.state); + } + } + function readToken(mode, stream, state, inner) { + for (var i = 0; i < 10; i++) { + if (inner) { + inner[0] = innerMode(mode, state).mode; + } + var style = mode.token(stream, state); + if (stream.pos > stream.start) { + return style; + } + } + throw new Error("Mode " + mode.name + " failed to advance stream."); + } + var Token = function (stream, type, state) { + this.start = stream.start; + this.end = stream.pos; + this.string = stream.current(); + this.type = type || null; + this.state = state; + }; + + // Utility for getTokenAt and getLineTokens + function takeToken(cm, pos, precise, asArray) { + var doc = cm.doc, + mode = doc.mode, + style; + pos = clipPos(doc, pos); + var line = getLine(doc, pos.line), + context = getContextBefore(cm, pos.line, precise); + var stream = new StringStream(line.text, cm.options.tabSize, context), + tokens; + if (asArray) { + tokens = []; + } + while ((asArray || stream.pos < pos.ch) && !stream.eol()) { + stream.start = stream.pos; + style = readToken(mode, stream, context.state); + if (asArray) { + tokens.push(new Token(stream, style, copyState(doc.mode, context.state))); + } + } + return asArray ? tokens : new Token(stream, style, context.state); + } + function extractLineClasses(type, output) { + if (type) { + for (;;) { + var lineClass = type.match(/(?:^|\s+)line-(background-)?(\S+)/); + if (!lineClass) { + break; + } + type = type.slice(0, lineClass.index) + type.slice(lineClass.index + lineClass[0].length); + var prop = lineClass[1] ? "bgClass" : "textClass"; + if (output[prop] == null) { + output[prop] = lineClass[2]; + } else if (!new RegExp("(?:^|\\s)" + lineClass[2] + "(?:$|\\s)").test(output[prop])) { + output[prop] += " " + lineClass[2]; + } + } + } + return type; + } + + // Run the given mode's parser over a line, calling f for each token. + function runMode(cm, text, mode, context, f, lineClasses, forceToEnd) { + var flattenSpans = mode.flattenSpans; + if (flattenSpans == null) { + flattenSpans = cm.options.flattenSpans; + } + var curStart = 0, + curStyle = null; + var stream = new StringStream(text, cm.options.tabSize, context), + style; + var inner = cm.options.addModeClass && [null]; + if (text == "") { + extractLineClasses(callBlankLine(mode, context.state), lineClasses); + } + while (!stream.eol()) { + if (stream.pos > cm.options.maxHighlightLength) { + flattenSpans = false; + if (forceToEnd) { + processLine(cm, text, context, stream.pos); + } + stream.pos = text.length; + style = null; + } else { + style = extractLineClasses(readToken(mode, stream, context.state, inner), lineClasses); + } + if (inner) { + var mName = inner[0].name; + if (mName) { + style = "m-" + (style ? mName + " " + style : mName); + } + } + if (!flattenSpans || curStyle != style) { + while (curStart < stream.start) { + curStart = Math.min(stream.start, curStart + 5000); + f(curStart, curStyle); + } + curStyle = style; + } + stream.start = stream.pos; + } + while (curStart < stream.pos) { + // Webkit seems to refuse to render text nodes longer than 57444 + // characters, and returns inaccurate measurements in nodes + // starting around 5000 chars. + var pos = Math.min(stream.pos, curStart + 5000); + f(pos, curStyle); + curStart = pos; + } + } + + // Finds the line to start with when starting a parse. Tries to + // find a line with a stateAfter, so that it can start with a + // valid state. If that fails, it returns the line with the + // smallest indentation, which tends to need the least context to + // parse correctly. + function findStartLine(cm, n, precise) { + var minindent, + minline, + doc = cm.doc; + var lim = precise ? -1 : n - (cm.doc.mode.innerMode ? 1000 : 100); + for (var search = n; search > lim; --search) { + if (search <= doc.first) { + return doc.first; + } + var line = getLine(doc, search - 1), + after = line.stateAfter; + if (after && (!precise || search + (after instanceof SavedContext ? after.lookAhead : 0) <= doc.modeFrontier)) { + return search; + } + var indented = countColumn(line.text, null, cm.options.tabSize); + if (minline == null || minindent > indented) { + minline = search - 1; + minindent = indented; + } + } + return minline; + } + function retreatFrontier(doc, n) { + doc.modeFrontier = Math.min(doc.modeFrontier, n); + if (doc.highlightFrontier < n - 10) { + return; + } + var start = doc.first; + for (var line = n - 1; line > start; line--) { + var saved = getLine(doc, line).stateAfter; + // change is on 3 + // state on line 1 looked ahead 2 -- so saw 3 + // test 1 + 2 < 3 should cover this + if (saved && (!(saved instanceof SavedContext) || line + saved.lookAhead < n)) { + start = line + 1; + break; + } + } + doc.highlightFrontier = Math.min(doc.highlightFrontier, start); + } + + // Optimize some code when these features are not used. + var sawReadOnlySpans = false, + sawCollapsedSpans = false; + function seeReadOnlySpans() { + sawReadOnlySpans = true; + } + function seeCollapsedSpans() { + sawCollapsedSpans = true; + } + + // TEXTMARKER SPANS + + function MarkedSpan(marker, from, to) { + this.marker = marker; + this.from = from; + this.to = to; + } + + // Search an array of spans for a span matching the given marker. + function getMarkedSpanFor(spans, marker) { + if (spans) { + for (var i = 0; i < spans.length; ++i) { + var span = spans[i]; + if (span.marker == marker) { + return span; + } + } + } + } + + // Remove a span from an array, returning undefined if no spans are + // left (we don't store arrays for lines without spans). + function removeMarkedSpan(spans, span) { + var r; + for (var i = 0; i < spans.length; ++i) { + if (spans[i] != span) { + (r || (r = [])).push(spans[i]); + } + } + return r; + } + + // Add a span to a line. + function addMarkedSpan(line, span, op) { + var inThisOp = op && window.WeakSet && (op.markedSpans || (op.markedSpans = new WeakSet())); + if (inThisOp && line.markedSpans && inThisOp.has(line.markedSpans)) { + line.markedSpans.push(span); + } else { + line.markedSpans = line.markedSpans ? line.markedSpans.concat([span]) : [span]; + if (inThisOp) { + inThisOp.add(line.markedSpans); + } + } + span.marker.attachLine(line); + } + + // Used for the algorithm that adjusts markers for a change in the + // document. These functions cut an array of spans at a given + // character position, returning an array of remaining chunks (or + // undefined if nothing remains). + function markedSpansBefore(old, startCh, isInsert) { + var nw; + if (old) { + for (var i = 0; i < old.length; ++i) { + var span = old[i], + marker = span.marker; + var startsBefore = span.from == null || (marker.inclusiveLeft ? span.from <= startCh : span.from < startCh); + if (startsBefore || span.from == startCh && marker.type == "bookmark" && (!isInsert || !span.marker.insertLeft)) { + var endsAfter = span.to == null || (marker.inclusiveRight ? span.to >= startCh : span.to > startCh); + (nw || (nw = [])).push(new MarkedSpan(marker, span.from, endsAfter ? null : span.to)); + } + } + } + return nw; + } + function markedSpansAfter(old, endCh, isInsert) { + var nw; + if (old) { + for (var i = 0; i < old.length; ++i) { + var span = old[i], + marker = span.marker; + var endsAfter = span.to == null || (marker.inclusiveRight ? span.to >= endCh : span.to > endCh); + if (endsAfter || span.from == endCh && marker.type == "bookmark" && (!isInsert || span.marker.insertLeft)) { + var startsBefore = span.from == null || (marker.inclusiveLeft ? span.from <= endCh : span.from < endCh); + (nw || (nw = [])).push(new MarkedSpan(marker, startsBefore ? null : span.from - endCh, span.to == null ? null : span.to - endCh)); + } + } + } + return nw; + } + + // Given a change object, compute the new set of marker spans that + // cover the line in which the change took place. Removes spans + // entirely within the change, reconnects spans belonging to the + // same marker that appear on both sides of the change, and cuts off + // spans partially within the change. Returns an array of span + // arrays with one element for each line in (after) the change. + function stretchSpansOverChange(doc, change) { + if (change.full) { + return null; + } + var oldFirst = isLine(doc, change.from.line) && getLine(doc, change.from.line).markedSpans; + var oldLast = isLine(doc, change.to.line) && getLine(doc, change.to.line).markedSpans; + if (!oldFirst && !oldLast) { + return null; + } + var startCh = change.from.ch, + endCh = change.to.ch, + isInsert = cmp(change.from, change.to) == 0; + // Get the spans that 'stick out' on both sides + var first = markedSpansBefore(oldFirst, startCh, isInsert); + var last = markedSpansAfter(oldLast, endCh, isInsert); + + // Next, merge those two ends + var sameLine = change.text.length == 1, + offset = lst(change.text).length + (sameLine ? startCh : 0); + if (first) { + // Fix up .to properties of first + for (var i = 0; i < first.length; ++i) { + var span = first[i]; + if (span.to == null) { + var found = getMarkedSpanFor(last, span.marker); + if (!found) { + span.to = startCh; + } else if (sameLine) { + span.to = found.to == null ? null : found.to + offset; + } + } + } + } + if (last) { + // Fix up .from in last (or move them into first in case of sameLine) + for (var i$1 = 0; i$1 < last.length; ++i$1) { + var span$1 = last[i$1]; + if (span$1.to != null) { + span$1.to += offset; + } + if (span$1.from == null) { + var found$1 = getMarkedSpanFor(first, span$1.marker); + if (!found$1) { + span$1.from = offset; + if (sameLine) { + (first || (first = [])).push(span$1); + } + } + } else { + span$1.from += offset; + if (sameLine) { + (first || (first = [])).push(span$1); + } + } + } + } + // Make sure we didn't create any zero-length spans + if (first) { + first = clearEmptySpans(first); + } + if (last && last != first) { + last = clearEmptySpans(last); + } + var newMarkers = [first]; + if (!sameLine) { + // Fill gap with whole-line-spans + var gap = change.text.length - 2, + gapMarkers; + if (gap > 0 && first) { + for (var i$2 = 0; i$2 < first.length; ++i$2) { + if (first[i$2].to == null) { + (gapMarkers || (gapMarkers = [])).push(new MarkedSpan(first[i$2].marker, null, null)); + } + } + } + for (var i$3 = 0; i$3 < gap; ++i$3) { + newMarkers.push(gapMarkers); + } + newMarkers.push(last); + } + return newMarkers; + } + + // Remove spans that are empty and don't have a clearWhenEmpty + // option of false. + function clearEmptySpans(spans) { + for (var i = 0; i < spans.length; ++i) { + var span = spans[i]; + if (span.from != null && span.from == span.to && span.marker.clearWhenEmpty !== false) { + spans.splice(i--, 1); + } + } + if (!spans.length) { + return null; + } + return spans; + } + + // Used to 'clip' out readOnly ranges when making a change. + function removeReadOnlyRanges(doc, from, to) { + var markers = null; + doc.iter(from.line, to.line + 1, function (line) { + if (line.markedSpans) { + for (var i = 0; i < line.markedSpans.length; ++i) { + var mark = line.markedSpans[i].marker; + if (mark.readOnly && (!markers || indexOf(markers, mark) == -1)) { + (markers || (markers = [])).push(mark); + } + } + } + }); + if (!markers) { + return null; + } + var parts = [{ + from: from, + to: to + }]; + for (var i = 0; i < markers.length; ++i) { + var mk = markers[i], + m = mk.find(0); + for (var j = 0; j < parts.length; ++j) { + var p = parts[j]; + if (cmp(p.to, m.from) < 0 || cmp(p.from, m.to) > 0) { + continue; + } + var newParts = [j, 1], + dfrom = cmp(p.from, m.from), + dto = cmp(p.to, m.to); + if (dfrom < 0 || !mk.inclusiveLeft && !dfrom) { + newParts.push({ + from: p.from, + to: m.from + }); + } + if (dto > 0 || !mk.inclusiveRight && !dto) { + newParts.push({ + from: m.to, + to: p.to + }); + } + parts.splice.apply(parts, newParts); + j += newParts.length - 3; + } + } + return parts; + } + + // Connect or disconnect spans from a line. + function detachMarkedSpans(line) { + var spans = line.markedSpans; + if (!spans) { + return; + } + for (var i = 0; i < spans.length; ++i) { + spans[i].marker.detachLine(line); + } + line.markedSpans = null; + } + function attachMarkedSpans(line, spans) { + if (!spans) { + return; + } + for (var i = 0; i < spans.length; ++i) { + spans[i].marker.attachLine(line); + } + line.markedSpans = spans; + } + + // Helpers used when computing which overlapping collapsed span + // counts as the larger one. + function extraLeft(marker) { + return marker.inclusiveLeft ? -1 : 0; + } + function extraRight(marker) { + return marker.inclusiveRight ? 1 : 0; + } + + // Returns a number indicating which of two overlapping collapsed + // spans is larger (and thus includes the other). Falls back to + // comparing ids when the spans cover exactly the same range. + function compareCollapsedMarkers(a, b) { + var lenDiff = a.lines.length - b.lines.length; + if (lenDiff != 0) { + return lenDiff; + } + var aPos = a.find(), + bPos = b.find(); + var fromCmp = cmp(aPos.from, bPos.from) || extraLeft(a) - extraLeft(b); + if (fromCmp) { + return -fromCmp; + } + var toCmp = cmp(aPos.to, bPos.to) || extraRight(a) - extraRight(b); + if (toCmp) { + return toCmp; + } + return b.id - a.id; + } + + // Find out whether a line ends or starts in a collapsed span. If + // so, return the marker for that span. + function collapsedSpanAtSide(line, start) { + var sps = sawCollapsedSpans && line.markedSpans, + found; + if (sps) { + for (var sp = void 0, i = 0; i < sps.length; ++i) { + sp = sps[i]; + if (sp.marker.collapsed && (start ? sp.from : sp.to) == null && (!found || compareCollapsedMarkers(found, sp.marker) < 0)) { + found = sp.marker; + } + } + } + return found; + } + function collapsedSpanAtStart(line) { + return collapsedSpanAtSide(line, true); + } + function collapsedSpanAtEnd(line) { + return collapsedSpanAtSide(line, false); + } + function collapsedSpanAround(line, ch) { + var sps = sawCollapsedSpans && line.markedSpans, + found; + if (sps) { + for (var i = 0; i < sps.length; ++i) { + var sp = sps[i]; + if (sp.marker.collapsed && (sp.from == null || sp.from < ch) && (sp.to == null || sp.to > ch) && (!found || compareCollapsedMarkers(found, sp.marker) < 0)) { + found = sp.marker; + } + } + } + return found; + } + + // Test whether there exists a collapsed span that partially + // overlaps (covers the start or end, but not both) of a new span. + // Such overlap is not allowed. + function conflictingCollapsedRange(doc, lineNo, from, to, marker) { + var line = getLine(doc, lineNo); + var sps = sawCollapsedSpans && line.markedSpans; + if (sps) { + for (var i = 0; i < sps.length; ++i) { + var sp = sps[i]; + if (!sp.marker.collapsed) { + continue; + } + var found = sp.marker.find(0); + var fromCmp = cmp(found.from, from) || extraLeft(sp.marker) - extraLeft(marker); + var toCmp = cmp(found.to, to) || extraRight(sp.marker) - extraRight(marker); + if (fromCmp >= 0 && toCmp <= 0 || fromCmp <= 0 && toCmp >= 0) { + continue; + } + if (fromCmp <= 0 && (sp.marker.inclusiveRight && marker.inclusiveLeft ? cmp(found.to, from) >= 0 : cmp(found.to, from) > 0) || fromCmp >= 0 && (sp.marker.inclusiveRight && marker.inclusiveLeft ? cmp(found.from, to) <= 0 : cmp(found.from, to) < 0)) { + return true; + } + } + } + } + + // A visual line is a line as drawn on the screen. Folding, for + // example, can cause multiple logical lines to appear on the same + // visual line. This finds the start of the visual line that the + // given line is part of (usually that is the line itself). + function visualLine(line) { + var merged; + while (merged = collapsedSpanAtStart(line)) { + line = merged.find(-1, true).line; + } + return line; + } + function visualLineEnd(line) { + var merged; + while (merged = collapsedSpanAtEnd(line)) { + line = merged.find(1, true).line; + } + return line; + } + + // Returns an array of logical lines that continue the visual line + // started by the argument, or undefined if there are no such lines. + function visualLineContinued(line) { + var merged, lines; + while (merged = collapsedSpanAtEnd(line)) { + line = merged.find(1, true).line; + (lines || (lines = [])).push(line); + } + return lines; + } + + // Get the line number of the start of the visual line that the + // given line number is part of. + function visualLineNo(doc, lineN) { + var line = getLine(doc, lineN), + vis = visualLine(line); + if (line == vis) { + return lineN; + } + return lineNo(vis); + } + + // Get the line number of the start of the next visual line after + // the given line. + function visualLineEndNo(doc, lineN) { + if (lineN > doc.lastLine()) { + return lineN; + } + var line = getLine(doc, lineN), + merged; + if (!lineIsHidden(doc, line)) { + return lineN; + } + while (merged = collapsedSpanAtEnd(line)) { + line = merged.find(1, true).line; + } + return lineNo(line) + 1; + } + + // Compute whether a line is hidden. Lines count as hidden when they + // are part of a visual line that starts with another line, or when + // they are entirely covered by collapsed, non-widget span. + function lineIsHidden(doc, line) { + var sps = sawCollapsedSpans && line.markedSpans; + if (sps) { + for (var sp = void 0, i = 0; i < sps.length; ++i) { + sp = sps[i]; + if (!sp.marker.collapsed) { + continue; + } + if (sp.from == null) { + return true; + } + if (sp.marker.widgetNode) { + continue; + } + if (sp.from == 0 && sp.marker.inclusiveLeft && lineIsHiddenInner(doc, line, sp)) { + return true; + } + } + } + } + function lineIsHiddenInner(doc, line, span) { + if (span.to == null) { + var end = span.marker.find(1, true); + return lineIsHiddenInner(doc, end.line, getMarkedSpanFor(end.line.markedSpans, span.marker)); + } + if (span.marker.inclusiveRight && span.to == line.text.length) { + return true; + } + for (var sp = void 0, i = 0; i < line.markedSpans.length; ++i) { + sp = line.markedSpans[i]; + if (sp.marker.collapsed && !sp.marker.widgetNode && sp.from == span.to && (sp.to == null || sp.to != span.from) && (sp.marker.inclusiveLeft || span.marker.inclusiveRight) && lineIsHiddenInner(doc, line, sp)) { + return true; + } + } + } + + // Find the height above the given line. + function heightAtLine(lineObj) { + lineObj = visualLine(lineObj); + var h = 0, + chunk = lineObj.parent; + for (var i = 0; i < chunk.lines.length; ++i) { + var line = chunk.lines[i]; + if (line == lineObj) { + break; + } else { + h += line.height; + } + } + for (var p = chunk.parent; p; chunk = p, p = chunk.parent) { + for (var i$1 = 0; i$1 < p.children.length; ++i$1) { + var cur = p.children[i$1]; + if (cur == chunk) { + break; + } else { + h += cur.height; + } + } + } + return h; + } + + // Compute the character length of a line, taking into account + // collapsed ranges (see markText) that might hide parts, and join + // other lines onto it. + function lineLength(line) { + if (line.height == 0) { + return 0; + } + var len = line.text.length, + merged, + cur = line; + while (merged = collapsedSpanAtStart(cur)) { + var found = merged.find(0, true); + cur = found.from.line; + len += found.from.ch - found.to.ch; + } + cur = line; + while (merged = collapsedSpanAtEnd(cur)) { + var found$1 = merged.find(0, true); + len -= cur.text.length - found$1.from.ch; + cur = found$1.to.line; + len += cur.text.length - found$1.to.ch; + } + return len; + } + + // Find the longest line in the document. + function findMaxLine(cm) { + var d = cm.display, + doc = cm.doc; + d.maxLine = getLine(doc, doc.first); + d.maxLineLength = lineLength(d.maxLine); + d.maxLineChanged = true; + doc.iter(function (line) { + var len = lineLength(line); + if (len > d.maxLineLength) { + d.maxLineLength = len; + d.maxLine = line; + } + }); + } + + // LINE DATA STRUCTURE + + // Line objects. These hold state related to a line, including + // highlighting info (the styles array). + var Line = function (text, markedSpans, estimateHeight) { + this.text = text; + attachMarkedSpans(this, markedSpans); + this.height = estimateHeight ? estimateHeight(this) : 1; + }; + Line.prototype.lineNo = function () { + return lineNo(this); + }; + eventMixin(Line); + + // Change the content (text, markers) of a line. Automatically + // invalidates cached information and tries to re-estimate the + // line's height. + function updateLine(line, text, markedSpans, estimateHeight) { + line.text = text; + if (line.stateAfter) { + line.stateAfter = null; + } + if (line.styles) { + line.styles = null; + } + if (line.order != null) { + line.order = null; + } + detachMarkedSpans(line); + attachMarkedSpans(line, markedSpans); + var estHeight = estimateHeight ? estimateHeight(line) : 1; + if (estHeight != line.height) { + updateLineHeight(line, estHeight); + } + } + + // Detach a line from the document tree and its markers. + function cleanUpLine(line) { + line.parent = null; + detachMarkedSpans(line); + } + + // Convert a style as returned by a mode (either null, or a string + // containing one or more styles) to a CSS style. This is cached, + // and also looks for line-wide styles. + var styleToClassCache = {}, + styleToClassCacheWithMode = {}; + function interpretTokenStyle(style, options) { + if (!style || /^\s*$/.test(style)) { + return null; + } + var cache = options.addModeClass ? styleToClassCacheWithMode : styleToClassCache; + return cache[style] || (cache[style] = style.replace(/\S+/g, "cm-$&")); + } + + // Render the DOM representation of the text of a line. Also builds + // up a 'line map', which points at the DOM nodes that represent + // specific stretches of text, and is used by the measuring code. + // The returned object contains the DOM node, this map, and + // information about line-wide styles that were set by the mode. + function buildLineContent(cm, lineView) { + // The padding-right forces the element to have a 'border', which + // is needed on Webkit to be able to get line-level bounding + // rectangles for it (in measureChar). + var content = eltP("span", null, null, webkit ? "padding-right: .1px" : null); + var builder = { + pre: eltP("pre", [content], "CodeMirror-line"), + content: content, + col: 0, + pos: 0, + cm: cm, + trailingSpace: false, + splitSpaces: cm.getOption("lineWrapping") + }; + lineView.measure = {}; + + // Iterate over the logical lines that make up this visual line. + for (var i = 0; i <= (lineView.rest ? lineView.rest.length : 0); i++) { + var line = i ? lineView.rest[i - 1] : lineView.line, + order = void 0; + builder.pos = 0; + builder.addToken = buildToken; + // Optionally wire in some hacks into the token-rendering + // algorithm, to deal with browser quirks. + if (hasBadBidiRects(cm.display.measure) && (order = getOrder(line, cm.doc.direction))) { + builder.addToken = buildTokenBadBidi(builder.addToken, order); + } + builder.map = []; + var allowFrontierUpdate = lineView != cm.display.externalMeasured && lineNo(line); + insertLineContent(line, builder, getLineStyles(cm, line, allowFrontierUpdate)); + if (line.styleClasses) { + if (line.styleClasses.bgClass) { + builder.bgClass = joinClasses(line.styleClasses.bgClass, builder.bgClass || ""); + } + if (line.styleClasses.textClass) { + builder.textClass = joinClasses(line.styleClasses.textClass, builder.textClass || ""); + } + } + + // Ensure at least a single node is present, for measuring. + if (builder.map.length == 0) { + builder.map.push(0, 0, builder.content.appendChild(zeroWidthElement(cm.display.measure))); + } + + // Store the map and a cache object for the current logical line + if (i == 0) { + lineView.measure.map = builder.map; + lineView.measure.cache = {}; + } else { + (lineView.measure.maps || (lineView.measure.maps = [])).push(builder.map); + (lineView.measure.caches || (lineView.measure.caches = [])).push({}); + } + } + + // See issue #2901 + if (webkit) { + var last = builder.content.lastChild; + if (/\bcm-tab\b/.test(last.className) || last.querySelector && last.querySelector(".cm-tab")) { + builder.content.className = "cm-tab-wrap-hack"; + } + } + signal(cm, "renderLine", cm, lineView.line, builder.pre); + if (builder.pre.className) { + builder.textClass = joinClasses(builder.pre.className, builder.textClass || ""); + } + return builder; + } + function defaultSpecialCharPlaceholder(ch) { + var token = elt("span", "\u2022", "cm-invalidchar"); + token.title = "\\u" + ch.charCodeAt(0).toString(16); + token.setAttribute("aria-label", token.title); + return token; + } + + // Build up the DOM representation for a single token, and add it to + // the line map. Takes care to render special characters separately. + function buildToken(builder, text, style, startStyle, endStyle, css, attributes) { + if (!text) { + return; + } + var displayText = builder.splitSpaces ? splitSpaces(text, builder.trailingSpace) : text; + var special = builder.cm.state.specialChars, + mustWrap = false; + var content; + if (!special.test(text)) { + builder.col += text.length; + content = document.createTextNode(displayText); + builder.map.push(builder.pos, builder.pos + text.length, content); + if (ie && ie_version < 9) { + mustWrap = true; + } + builder.pos += text.length; + } else { + content = document.createDocumentFragment(); + var pos = 0; + while (true) { + special.lastIndex = pos; + var m = special.exec(text); + var skipped = m ? m.index - pos : text.length - pos; + if (skipped) { + var txt = document.createTextNode(displayText.slice(pos, pos + skipped)); + if (ie && ie_version < 9) { + content.appendChild(elt("span", [txt])); + } else { + content.appendChild(txt); + } + builder.map.push(builder.pos, builder.pos + skipped, txt); + builder.col += skipped; + builder.pos += skipped; + } + if (!m) { + break; + } + pos += skipped + 1; + var txt$1 = void 0; + if (m[0] == "\t") { + var tabSize = builder.cm.options.tabSize, + tabWidth = tabSize - builder.col % tabSize; + txt$1 = content.appendChild(elt("span", spaceStr(tabWidth), "cm-tab")); + txt$1.setAttribute("role", "presentation"); + txt$1.setAttribute("cm-text", "\t"); + builder.col += tabWidth; + } else if (m[0] == "\r" || m[0] == "\n") { + txt$1 = content.appendChild(elt("span", m[0] == "\r" ? "\u240d" : "\u2424", "cm-invalidchar")); + txt$1.setAttribute("cm-text", m[0]); + builder.col += 1; + } else { + txt$1 = builder.cm.options.specialCharPlaceholder(m[0]); + txt$1.setAttribute("cm-text", m[0]); + if (ie && ie_version < 9) { + content.appendChild(elt("span", [txt$1])); + } else { + content.appendChild(txt$1); + } + builder.col += 1; + } + builder.map.push(builder.pos, builder.pos + 1, txt$1); + builder.pos++; + } + } + builder.trailingSpace = displayText.charCodeAt(text.length - 1) == 32; + if (style || startStyle || endStyle || mustWrap || css || attributes) { + var fullStyle = style || ""; + if (startStyle) { + fullStyle += startStyle; + } + if (endStyle) { + fullStyle += endStyle; + } + var token = elt("span", [content], fullStyle, css); + if (attributes) { + for (var attr in attributes) { + if (attributes.hasOwnProperty(attr) && attr != "style" && attr != "class") { + token.setAttribute(attr, attributes[attr]); + } + } + } + return builder.content.appendChild(token); + } + builder.content.appendChild(content); + } + + // Change some spaces to NBSP to prevent the browser from collapsing + // trailing spaces at the end of a line when rendering text (issue #1362). + function splitSpaces(text, trailingBefore) { + if (text.length > 1 && !/ /.test(text)) { + return text; + } + var spaceBefore = trailingBefore, + result = ""; + for (var i = 0; i < text.length; i++) { + var ch = text.charAt(i); + if (ch == " " && spaceBefore && (i == text.length - 1 || text.charCodeAt(i + 1) == 32)) { + ch = "\u00a0"; + } + result += ch; + spaceBefore = ch == " "; + } + return result; + } + + // Work around nonsense dimensions being reported for stretches of + // right-to-left text. + function buildTokenBadBidi(inner, order) { + return function (builder, text, style, startStyle, endStyle, css, attributes) { + style = style ? style + " cm-force-border" : "cm-force-border"; + var start = builder.pos, + end = start + text.length; + for (;;) { + // Find the part that overlaps with the start of this text + var part = void 0; + for (var i = 0; i < order.length; i++) { + part = order[i]; + if (part.to > start && part.from <= start) { + break; + } + } + if (part.to >= end) { + return inner(builder, text, style, startStyle, endStyle, css, attributes); + } + inner(builder, text.slice(0, part.to - start), style, startStyle, null, css, attributes); + startStyle = null; + text = text.slice(part.to - start); + start = part.to; + } + }; + } + function buildCollapsedSpan(builder, size, marker, ignoreWidget) { + var widget = !ignoreWidget && marker.widgetNode; + if (widget) { + builder.map.push(builder.pos, builder.pos + size, widget); + } + if (!ignoreWidget && builder.cm.display.input.needsContentAttribute) { + if (!widget) { + widget = builder.content.appendChild(document.createElement("span")); + } + widget.setAttribute("cm-marker", marker.id); + } + if (widget) { + builder.cm.display.input.setUneditable(widget); + builder.content.appendChild(widget); + } + builder.pos += size; + builder.trailingSpace = false; + } + + // Outputs a number of spans to make up a line, taking highlighting + // and marked text into account. + function insertLineContent(line, builder, styles) { + var spans = line.markedSpans, + allText = line.text, + at = 0; + if (!spans) { + for (var i$1 = 1; i$1 < styles.length; i$1 += 2) { + builder.addToken(builder, allText.slice(at, at = styles[i$1]), interpretTokenStyle(styles[i$1 + 1], builder.cm.options)); + } + return; + } + var len = allText.length, + pos = 0, + i = 1, + text = "", + style, + css; + var nextChange = 0, + spanStyle, + spanEndStyle, + spanStartStyle, + collapsed, + attributes; + for (;;) { + if (nextChange == pos) { + // Update current marker set + spanStyle = spanEndStyle = spanStartStyle = css = ""; + attributes = null; + collapsed = null; + nextChange = Infinity; + var foundBookmarks = [], + endStyles = void 0; + for (var j = 0; j < spans.length; ++j) { + var sp = spans[j], + m = sp.marker; + if (m.type == "bookmark" && sp.from == pos && m.widgetNode) { + foundBookmarks.push(m); + } else if (sp.from <= pos && (sp.to == null || sp.to > pos || m.collapsed && sp.to == pos && sp.from == pos)) { + if (sp.to != null && sp.to != pos && nextChange > sp.to) { + nextChange = sp.to; + spanEndStyle = ""; + } + if (m.className) { + spanStyle += " " + m.className; + } + if (m.css) { + css = (css ? css + ";" : "") + m.css; + } + if (m.startStyle && sp.from == pos) { + spanStartStyle += " " + m.startStyle; + } + if (m.endStyle && sp.to == nextChange) { + (endStyles || (endStyles = [])).push(m.endStyle, sp.to); + } + // support for the old title property + // https://github.com/codemirror/CodeMirror/pull/5673 + if (m.title) { + (attributes || (attributes = {})).title = m.title; + } + if (m.attributes) { + for (var attr in m.attributes) { + (attributes || (attributes = {}))[attr] = m.attributes[attr]; + } + } + if (m.collapsed && (!collapsed || compareCollapsedMarkers(collapsed.marker, m) < 0)) { + collapsed = sp; + } + } else if (sp.from > pos && nextChange > sp.from) { + nextChange = sp.from; + } + } + if (endStyles) { + for (var j$1 = 0; j$1 < endStyles.length; j$1 += 2) { + if (endStyles[j$1 + 1] == nextChange) { + spanEndStyle += " " + endStyles[j$1]; + } + } + } + if (!collapsed || collapsed.from == pos) { + for (var j$2 = 0; j$2 < foundBookmarks.length; ++j$2) { + buildCollapsedSpan(builder, 0, foundBookmarks[j$2]); + } + } + if (collapsed && (collapsed.from || 0) == pos) { + buildCollapsedSpan(builder, (collapsed.to == null ? len + 1 : collapsed.to) - pos, collapsed.marker, collapsed.from == null); + if (collapsed.to == null) { + return; + } + if (collapsed.to == pos) { + collapsed = false; + } + } + } + if (pos >= len) { + break; + } + var upto = Math.min(len, nextChange); + while (true) { + if (text) { + var end = pos + text.length; + if (!collapsed) { + var tokenText = end > upto ? text.slice(0, upto - pos) : text; + builder.addToken(builder, tokenText, style ? style + spanStyle : spanStyle, spanStartStyle, pos + tokenText.length == nextChange ? spanEndStyle : "", css, attributes); + } + if (end >= upto) { + text = text.slice(upto - pos); + pos = upto; + break; + } + pos = end; + spanStartStyle = ""; + } + text = allText.slice(at, at = styles[i++]); + style = interpretTokenStyle(styles[i++], builder.cm.options); + } + } + } + + // These objects are used to represent the visible (currently drawn) + // part of the document. A LineView may correspond to multiple + // logical lines, if those are connected by collapsed ranges. + function LineView(doc, line, lineN) { + // The starting line + this.line = line; + // Continuing lines, if any + this.rest = visualLineContinued(line); + // Number of logical lines in this visual line + this.size = this.rest ? lineNo(lst(this.rest)) - lineN + 1 : 1; + this.node = this.text = null; + this.hidden = lineIsHidden(doc, line); + } + + // Create a range of LineView objects for the given lines. + function buildViewArray(cm, from, to) { + var array = [], + nextPos; + for (var pos = from; pos < to; pos = nextPos) { + var view = new LineView(cm.doc, getLine(cm.doc, pos), pos); + nextPos = pos + view.size; + array.push(view); + } + return array; + } + var operationGroup = null; + function pushOperation(op) { + if (operationGroup) { + operationGroup.ops.push(op); + } else { + op.ownsGroup = operationGroup = { + ops: [op], + delayedCallbacks: [] + }; + } + } + function fireCallbacksForOps(group) { + // Calls delayed callbacks and cursorActivity handlers until no + // new ones appear + var callbacks = group.delayedCallbacks, + i = 0; + do { + for (; i < callbacks.length; i++) { + callbacks[i].call(null); + } + for (var j = 0; j < group.ops.length; j++) { + var op = group.ops[j]; + if (op.cursorActivityHandlers) { + while (op.cursorActivityCalled < op.cursorActivityHandlers.length) { + op.cursorActivityHandlers[op.cursorActivityCalled++].call(null, op.cm); + } + } + } + } while (i < callbacks.length); + } + function finishOperation(op, endCb) { + var group = op.ownsGroup; + if (!group) { + return; + } + try { + fireCallbacksForOps(group); + } finally { + operationGroup = null; + endCb(group); + } + } + var orphanDelayedCallbacks = null; + + // Often, we want to signal events at a point where we are in the + // middle of some work, but don't want the handler to start calling + // other methods on the editor, which might be in an inconsistent + // state or simply not expect any other events to happen. + // signalLater looks whether there are any handlers, and schedules + // them to be executed when the last operation ends, or, if no + // operation is active, when a timeout fires. + function signalLater(emitter, type /*, values...*/) { + var arr = getHandlers(emitter, type); + if (!arr.length) { + return; + } + var args = Array.prototype.slice.call(arguments, 2), + list; + if (operationGroup) { + list = operationGroup.delayedCallbacks; + } else if (orphanDelayedCallbacks) { + list = orphanDelayedCallbacks; + } else { + list = orphanDelayedCallbacks = []; + setTimeout(fireOrphanDelayed, 0); + } + var loop = function (i) { + list.push(function () { + return arr[i].apply(null, args); + }); + }; + for (var i = 0; i < arr.length; ++i) loop(i); + } + function fireOrphanDelayed() { + var delayed = orphanDelayedCallbacks; + orphanDelayedCallbacks = null; + for (var i = 0; i < delayed.length; ++i) { + delayed[i](); + } + } + + // When an aspect of a line changes, a string is added to + // lineView.changes. This updates the relevant part of the line's + // DOM structure. + function updateLineForChanges(cm, lineView, lineN, dims) { + for (var j = 0; j < lineView.changes.length; j++) { + var type = lineView.changes[j]; + if (type == "text") { + updateLineText(cm, lineView); + } else if (type == "gutter") { + updateLineGutter(cm, lineView, lineN, dims); + } else if (type == "class") { + updateLineClasses(cm, lineView); + } else if (type == "widget") { + updateLineWidgets(cm, lineView, dims); + } + } + lineView.changes = null; + } + + // Lines with gutter elements, widgets or a background class need to + // be wrapped, and have the extra elements added to the wrapper div + function ensureLineWrapped(lineView) { + if (lineView.node == lineView.text) { + lineView.node = elt("div", null, null, "position: relative"); + if (lineView.text.parentNode) { + lineView.text.parentNode.replaceChild(lineView.node, lineView.text); + } + lineView.node.appendChild(lineView.text); + if (ie && ie_version < 8) { + lineView.node.style.zIndex = 2; + } + } + return lineView.node; + } + function updateLineBackground(cm, lineView) { + var cls = lineView.bgClass ? lineView.bgClass + " " + (lineView.line.bgClass || "") : lineView.line.bgClass; + if (cls) { + cls += " CodeMirror-linebackground"; + } + if (lineView.background) { + if (cls) { + lineView.background.className = cls; + } else { + lineView.background.parentNode.removeChild(lineView.background); + lineView.background = null; + } + } else if (cls) { + var wrap = ensureLineWrapped(lineView); + lineView.background = wrap.insertBefore(elt("div", null, cls), wrap.firstChild); + cm.display.input.setUneditable(lineView.background); + } + } + + // Wrapper around buildLineContent which will reuse the structure + // in display.externalMeasured when possible. + function getLineContent(cm, lineView) { + var ext = cm.display.externalMeasured; + if (ext && ext.line == lineView.line) { + cm.display.externalMeasured = null; + lineView.measure = ext.measure; + return ext.built; + } + return buildLineContent(cm, lineView); + } + + // Redraw the line's text. Interacts with the background and text + // classes because the mode may output tokens that influence these + // classes. + function updateLineText(cm, lineView) { + var cls = lineView.text.className; + var built = getLineContent(cm, lineView); + if (lineView.text == lineView.node) { + lineView.node = built.pre; + } + lineView.text.parentNode.replaceChild(built.pre, lineView.text); + lineView.text = built.pre; + if (built.bgClass != lineView.bgClass || built.textClass != lineView.textClass) { + lineView.bgClass = built.bgClass; + lineView.textClass = built.textClass; + updateLineClasses(cm, lineView); + } else if (cls) { + lineView.text.className = cls; + } + } + function updateLineClasses(cm, lineView) { + updateLineBackground(cm, lineView); + if (lineView.line.wrapClass) { + ensureLineWrapped(lineView).className = lineView.line.wrapClass; + } else if (lineView.node != lineView.text) { + lineView.node.className = ""; + } + var textClass = lineView.textClass ? lineView.textClass + " " + (lineView.line.textClass || "") : lineView.line.textClass; + lineView.text.className = textClass || ""; + } + function updateLineGutter(cm, lineView, lineN, dims) { + if (lineView.gutter) { + lineView.node.removeChild(lineView.gutter); + lineView.gutter = null; + } + if (lineView.gutterBackground) { + lineView.node.removeChild(lineView.gutterBackground); + lineView.gutterBackground = null; + } + if (lineView.line.gutterClass) { + var wrap = ensureLineWrapped(lineView); + lineView.gutterBackground = elt("div", null, "CodeMirror-gutter-background " + lineView.line.gutterClass, "left: " + (cm.options.fixedGutter ? dims.fixedPos : -dims.gutterTotalWidth) + "px; width: " + dims.gutterTotalWidth + "px"); + cm.display.input.setUneditable(lineView.gutterBackground); + wrap.insertBefore(lineView.gutterBackground, lineView.text); + } + var markers = lineView.line.gutterMarkers; + if (cm.options.lineNumbers || markers) { + var wrap$1 = ensureLineWrapped(lineView); + var gutterWrap = lineView.gutter = elt("div", null, "CodeMirror-gutter-wrapper", "left: " + (cm.options.fixedGutter ? dims.fixedPos : -dims.gutterTotalWidth) + "px"); + gutterWrap.setAttribute("aria-hidden", "true"); + cm.display.input.setUneditable(gutterWrap); + wrap$1.insertBefore(gutterWrap, lineView.text); + if (lineView.line.gutterClass) { + gutterWrap.className += " " + lineView.line.gutterClass; + } + if (cm.options.lineNumbers && (!markers || !markers["CodeMirror-linenumbers"])) { + lineView.lineNumber = gutterWrap.appendChild(elt("div", lineNumberFor(cm.options, lineN), "CodeMirror-linenumber CodeMirror-gutter-elt", "left: " + dims.gutterLeft["CodeMirror-linenumbers"] + "px; width: " + cm.display.lineNumInnerWidth + "px")); + } + if (markers) { + for (var k = 0; k < cm.display.gutterSpecs.length; ++k) { + var id = cm.display.gutterSpecs[k].className, + found = markers.hasOwnProperty(id) && markers[id]; + if (found) { + gutterWrap.appendChild(elt("div", [found], "CodeMirror-gutter-elt", "left: " + dims.gutterLeft[id] + "px; width: " + dims.gutterWidth[id] + "px")); + } + } + } + } + } + function updateLineWidgets(cm, lineView, dims) { + if (lineView.alignable) { + lineView.alignable = null; + } + var isWidget = classTest("CodeMirror-linewidget"); + for (var node = lineView.node.firstChild, next = void 0; node; node = next) { + next = node.nextSibling; + if (isWidget.test(node.className)) { + lineView.node.removeChild(node); + } + } + insertLineWidgets(cm, lineView, dims); + } + + // Build a line's DOM representation from scratch + function buildLineElement(cm, lineView, lineN, dims) { + var built = getLineContent(cm, lineView); + lineView.text = lineView.node = built.pre; + if (built.bgClass) { + lineView.bgClass = built.bgClass; + } + if (built.textClass) { + lineView.textClass = built.textClass; + } + updateLineClasses(cm, lineView); + updateLineGutter(cm, lineView, lineN, dims); + insertLineWidgets(cm, lineView, dims); + return lineView.node; + } + + // A lineView may contain multiple logical lines (when merged by + // collapsed spans). The widgets for all of them need to be drawn. + function insertLineWidgets(cm, lineView, dims) { + insertLineWidgetsFor(cm, lineView.line, lineView, dims, true); + if (lineView.rest) { + for (var i = 0; i < lineView.rest.length; i++) { + insertLineWidgetsFor(cm, lineView.rest[i], lineView, dims, false); + } + } + } + function insertLineWidgetsFor(cm, line, lineView, dims, allowAbove) { + if (!line.widgets) { + return; + } + var wrap = ensureLineWrapped(lineView); + for (var i = 0, ws = line.widgets; i < ws.length; ++i) { + var widget = ws[i], + node = elt("div", [widget.node], "CodeMirror-linewidget" + (widget.className ? " " + widget.className : "")); + if (!widget.handleMouseEvents) { + node.setAttribute("cm-ignore-events", "true"); + } + positionLineWidget(widget, node, lineView, dims); + cm.display.input.setUneditable(node); + if (allowAbove && widget.above) { + wrap.insertBefore(node, lineView.gutter || lineView.text); + } else { + wrap.appendChild(node); + } + signalLater(widget, "redraw"); + } + } + function positionLineWidget(widget, node, lineView, dims) { + if (widget.noHScroll) { + (lineView.alignable || (lineView.alignable = [])).push(node); + var width = dims.wrapperWidth; + node.style.left = dims.fixedPos + "px"; + if (!widget.coverGutter) { + width -= dims.gutterTotalWidth; + node.style.paddingLeft = dims.gutterTotalWidth + "px"; + } + node.style.width = width + "px"; + } + if (widget.coverGutter) { + node.style.zIndex = 5; + node.style.position = "relative"; + if (!widget.noHScroll) { + node.style.marginLeft = -dims.gutterTotalWidth + "px"; + } + } + } + function widgetHeight(widget) { + if (widget.height != null) { + return widget.height; + } + var cm = widget.doc.cm; + if (!cm) { + return 0; + } + if (!contains(document.body, widget.node)) { + var parentStyle = "position: relative;"; + if (widget.coverGutter) { + parentStyle += "margin-left: -" + cm.display.gutters.offsetWidth + "px;"; + } + if (widget.noHScroll) { + parentStyle += "width: " + cm.display.wrapper.clientWidth + "px;"; + } + removeChildrenAndAdd(cm.display.measure, elt("div", [widget.node], null, parentStyle)); + } + return widget.height = widget.node.parentNode.offsetHeight; + } + + // Return true when the given mouse event happened in a widget + function eventInWidget(display, e) { + for (var n = e_target(e); n != display.wrapper; n = n.parentNode) { + if (!n || n.nodeType == 1 && n.getAttribute("cm-ignore-events") == "true" || n.parentNode == display.sizer && n != display.mover) { + return true; + } + } + } + + // POSITION MEASUREMENT + + function paddingTop(display) { + return display.lineSpace.offsetTop; + } + function paddingVert(display) { + return display.mover.offsetHeight - display.lineSpace.offsetHeight; + } + function paddingH(display) { + if (display.cachedPaddingH) { + return display.cachedPaddingH; + } + var e = removeChildrenAndAdd(display.measure, elt("pre", "x", "CodeMirror-line-like")); + var style = window.getComputedStyle ? window.getComputedStyle(e) : e.currentStyle; + var data = { + left: parseInt(style.paddingLeft), + right: parseInt(style.paddingRight) + }; + if (!isNaN(data.left) && !isNaN(data.right)) { + display.cachedPaddingH = data; + } + return data; + } + function scrollGap(cm) { + return scrollerGap - cm.display.nativeBarWidth; + } + function displayWidth(cm) { + return cm.display.scroller.clientWidth - scrollGap(cm) - cm.display.barWidth; + } + function displayHeight(cm) { + return cm.display.scroller.clientHeight - scrollGap(cm) - cm.display.barHeight; + } + + // Ensure the lineView.wrapping.heights array is populated. This is + // an array of bottom offsets for the lines that make up a drawn + // line. When lineWrapping is on, there might be more than one + // height. + function ensureLineHeights(cm, lineView, rect) { + var wrapping = cm.options.lineWrapping; + var curWidth = wrapping && displayWidth(cm); + if (!lineView.measure.heights || wrapping && lineView.measure.width != curWidth) { + var heights = lineView.measure.heights = []; + if (wrapping) { + lineView.measure.width = curWidth; + var rects = lineView.text.firstChild.getClientRects(); + for (var i = 0; i < rects.length - 1; i++) { + var cur = rects[i], + next = rects[i + 1]; + if (Math.abs(cur.bottom - next.bottom) > 2) { + heights.push((cur.bottom + next.top) / 2 - rect.top); + } + } + } + heights.push(rect.bottom - rect.top); + } + } + + // Find a line map (mapping character offsets to text nodes) and a + // measurement cache for the given line number. (A line view might + // contain multiple lines when collapsed ranges are present.) + function mapFromLineView(lineView, line, lineN) { + if (lineView.line == line) { + return { + map: lineView.measure.map, + cache: lineView.measure.cache + }; + } + if (lineView.rest) { + for (var i = 0; i < lineView.rest.length; i++) { + if (lineView.rest[i] == line) { + return { + map: lineView.measure.maps[i], + cache: lineView.measure.caches[i] + }; + } + } + for (var i$1 = 0; i$1 < lineView.rest.length; i$1++) { + if (lineNo(lineView.rest[i$1]) > lineN) { + return { + map: lineView.measure.maps[i$1], + cache: lineView.measure.caches[i$1], + before: true + }; + } + } + } + } + + // Render a line into the hidden node display.externalMeasured. Used + // when measurement is needed for a line that's not in the viewport. + function updateExternalMeasurement(cm, line) { + line = visualLine(line); + var lineN = lineNo(line); + var view = cm.display.externalMeasured = new LineView(cm.doc, line, lineN); + view.lineN = lineN; + var built = view.built = buildLineContent(cm, view); + view.text = built.pre; + removeChildrenAndAdd(cm.display.lineMeasure, built.pre); + return view; + } + + // Get a {top, bottom, left, right} box (in line-local coordinates) + // for a given character. + function measureChar(cm, line, ch, bias) { + return measureCharPrepared(cm, prepareMeasureForLine(cm, line), ch, bias); + } + + // Find a line view that corresponds to the given line number. + function findViewForLine(cm, lineN) { + if (lineN >= cm.display.viewFrom && lineN < cm.display.viewTo) { + return cm.display.view[findViewIndex(cm, lineN)]; + } + var ext = cm.display.externalMeasured; + if (ext && lineN >= ext.lineN && lineN < ext.lineN + ext.size) { + return ext; + } + } + + // Measurement can be split in two steps, the set-up work that + // applies to the whole line, and the measurement of the actual + // character. Functions like coordsChar, that need to do a lot of + // measurements in a row, can thus ensure that the set-up work is + // only done once. + function prepareMeasureForLine(cm, line) { + var lineN = lineNo(line); + var view = findViewForLine(cm, lineN); + if (view && !view.text) { + view = null; + } else if (view && view.changes) { + updateLineForChanges(cm, view, lineN, getDimensions(cm)); + cm.curOp.forceUpdate = true; + } + if (!view) { + view = updateExternalMeasurement(cm, line); + } + var info = mapFromLineView(view, line, lineN); + return { + line: line, + view: view, + rect: null, + map: info.map, + cache: info.cache, + before: info.before, + hasHeights: false + }; + } + + // Given a prepared measurement object, measures the position of an + // actual character (or fetches it from the cache). + function measureCharPrepared(cm, prepared, ch, bias, varHeight) { + if (prepared.before) { + ch = -1; + } + var key = ch + (bias || ""), + found; + if (prepared.cache.hasOwnProperty(key)) { + found = prepared.cache[key]; + } else { + if (!prepared.rect) { + prepared.rect = prepared.view.text.getBoundingClientRect(); + } + if (!prepared.hasHeights) { + ensureLineHeights(cm, prepared.view, prepared.rect); + prepared.hasHeights = true; + } + found = measureCharInner(cm, prepared, ch, bias); + if (!found.bogus) { + prepared.cache[key] = found; + } + } + return { + left: found.left, + right: found.right, + top: varHeight ? found.rtop : found.top, + bottom: varHeight ? found.rbottom : found.bottom + }; + } + var nullRect = { + left: 0, + right: 0, + top: 0, + bottom: 0 + }; + function nodeAndOffsetInLineMap(map, ch, bias) { + var node, start, end, collapse, mStart, mEnd; + // First, search the line map for the text node corresponding to, + // or closest to, the target character. + for (var i = 0; i < map.length; i += 3) { + mStart = map[i]; + mEnd = map[i + 1]; + if (ch < mStart) { + start = 0; + end = 1; + collapse = "left"; + } else if (ch < mEnd) { + start = ch - mStart; + end = start + 1; + } else if (i == map.length - 3 || ch == mEnd && map[i + 3] > ch) { + end = mEnd - mStart; + start = end - 1; + if (ch >= mEnd) { + collapse = "right"; + } + } + if (start != null) { + node = map[i + 2]; + if (mStart == mEnd && bias == (node.insertLeft ? "left" : "right")) { + collapse = bias; + } + if (bias == "left" && start == 0) { + while (i && map[i - 2] == map[i - 3] && map[i - 1].insertLeft) { + node = map[(i -= 3) + 2]; + collapse = "left"; + } + } + if (bias == "right" && start == mEnd - mStart) { + while (i < map.length - 3 && map[i + 3] == map[i + 4] && !map[i + 5].insertLeft) { + node = map[(i += 3) + 2]; + collapse = "right"; + } + } + break; + } + } + return { + node: node, + start: start, + end: end, + collapse: collapse, + coverStart: mStart, + coverEnd: mEnd + }; + } + function getUsefulRect(rects, bias) { + var rect = nullRect; + if (bias == "left") { + for (var i = 0; i < rects.length; i++) { + if ((rect = rects[i]).left != rect.right) { + break; + } + } + } else { + for (var i$1 = rects.length - 1; i$1 >= 0; i$1--) { + if ((rect = rects[i$1]).left != rect.right) { + break; + } + } + } + return rect; + } + function measureCharInner(cm, prepared, ch, bias) { + var place = nodeAndOffsetInLineMap(prepared.map, ch, bias); + var node = place.node, + start = place.start, + end = place.end, + collapse = place.collapse; + var rect; + if (node.nodeType == 3) { + // If it is a text node, use a range to retrieve the coordinates. + for (var i$1 = 0; i$1 < 4; i$1++) { + // Retry a maximum of 4 times when nonsense rectangles are returned + while (start && isExtendingChar(prepared.line.text.charAt(place.coverStart + start))) { + --start; + } + while (place.coverStart + end < place.coverEnd && isExtendingChar(prepared.line.text.charAt(place.coverStart + end))) { + ++end; + } + if (ie && ie_version < 9 && start == 0 && end == place.coverEnd - place.coverStart) { + rect = node.parentNode.getBoundingClientRect(); + } else { + rect = getUsefulRect(range(node, start, end).getClientRects(), bias); + } + if (rect.left || rect.right || start == 0) { + break; + } + end = start; + start = start - 1; + collapse = "right"; + } + if (ie && ie_version < 11) { + rect = maybeUpdateRectForZooming(cm.display.measure, rect); + } + } else { + // If it is a widget, simply get the box for the whole widget. + if (start > 0) { + collapse = bias = "right"; + } + var rects; + if (cm.options.lineWrapping && (rects = node.getClientRects()).length > 1) { + rect = rects[bias == "right" ? rects.length - 1 : 0]; + } else { + rect = node.getBoundingClientRect(); + } + } + if (ie && ie_version < 9 && !start && (!rect || !rect.left && !rect.right)) { + var rSpan = node.parentNode.getClientRects()[0]; + if (rSpan) { + rect = { + left: rSpan.left, + right: rSpan.left + charWidth(cm.display), + top: rSpan.top, + bottom: rSpan.bottom + }; + } else { + rect = nullRect; + } + } + var rtop = rect.top - prepared.rect.top, + rbot = rect.bottom - prepared.rect.top; + var mid = (rtop + rbot) / 2; + var heights = prepared.view.measure.heights; + var i = 0; + for (; i < heights.length - 1; i++) { + if (mid < heights[i]) { + break; + } + } + var top = i ? heights[i - 1] : 0, + bot = heights[i]; + var result = { + left: (collapse == "right" ? rect.right : rect.left) - prepared.rect.left, + right: (collapse == "left" ? rect.left : rect.right) - prepared.rect.left, + top: top, + bottom: bot + }; + if (!rect.left && !rect.right) { + result.bogus = true; + } + if (!cm.options.singleCursorHeightPerLine) { + result.rtop = rtop; + result.rbottom = rbot; + } + return result; + } + + // Work around problem with bounding client rects on ranges being + // returned incorrectly when zoomed on IE10 and below. + function maybeUpdateRectForZooming(measure, rect) { + if (!window.screen || screen.logicalXDPI == null || screen.logicalXDPI == screen.deviceXDPI || !hasBadZoomedRects(measure)) { + return rect; + } + var scaleX = screen.logicalXDPI / screen.deviceXDPI; + var scaleY = screen.logicalYDPI / screen.deviceYDPI; + return { + left: rect.left * scaleX, + right: rect.right * scaleX, + top: rect.top * scaleY, + bottom: rect.bottom * scaleY + }; + } + function clearLineMeasurementCacheFor(lineView) { + if (lineView.measure) { + lineView.measure.cache = {}; + lineView.measure.heights = null; + if (lineView.rest) { + for (var i = 0; i < lineView.rest.length; i++) { + lineView.measure.caches[i] = {}; + } + } + } + } + function clearLineMeasurementCache(cm) { + cm.display.externalMeasure = null; + removeChildren(cm.display.lineMeasure); + for (var i = 0; i < cm.display.view.length; i++) { + clearLineMeasurementCacheFor(cm.display.view[i]); + } + } + function clearCaches(cm) { + clearLineMeasurementCache(cm); + cm.display.cachedCharWidth = cm.display.cachedTextHeight = cm.display.cachedPaddingH = null; + if (!cm.options.lineWrapping) { + cm.display.maxLineChanged = true; + } + cm.display.lineNumChars = null; + } + function pageScrollX() { + // Work around https://bugs.chromium.org/p/chromium/issues/detail?id=489206 + // which causes page_Offset and bounding client rects to use + // different reference viewports and invalidate our calculations. + if (chrome && android) { + return -(document.body.getBoundingClientRect().left - parseInt(getComputedStyle(document.body).marginLeft)); + } + return window.pageXOffset || (document.documentElement || document.body).scrollLeft; + } + function pageScrollY() { + if (chrome && android) { + return -(document.body.getBoundingClientRect().top - parseInt(getComputedStyle(document.body).marginTop)); + } + return window.pageYOffset || (document.documentElement || document.body).scrollTop; + } + function widgetTopHeight(lineObj) { + var ref = visualLine(lineObj); + var widgets = ref.widgets; + var height = 0; + if (widgets) { + for (var i = 0; i < widgets.length; ++i) { + if (widgets[i].above) { + height += widgetHeight(widgets[i]); + } + } + } + return height; + } + + // Converts a {top, bottom, left, right} box from line-local + // coordinates into another coordinate system. Context may be one of + // "line", "div" (display.lineDiv), "local"./null (editor), "window", + // or "page". + function intoCoordSystem(cm, lineObj, rect, context, includeWidgets) { + if (!includeWidgets) { + var height = widgetTopHeight(lineObj); + rect.top += height; + rect.bottom += height; + } + if (context == "line") { + return rect; + } + if (!context) { + context = "local"; + } + var yOff = heightAtLine(lineObj); + if (context == "local") { + yOff += paddingTop(cm.display); + } else { + yOff -= cm.display.viewOffset; + } + if (context == "page" || context == "window") { + var lOff = cm.display.lineSpace.getBoundingClientRect(); + yOff += lOff.top + (context == "window" ? 0 : pageScrollY()); + var xOff = lOff.left + (context == "window" ? 0 : pageScrollX()); + rect.left += xOff; + rect.right += xOff; + } + rect.top += yOff; + rect.bottom += yOff; + return rect; + } + + // Coverts a box from "div" coords to another coordinate system. + // Context may be "window", "page", "div", or "local"./null. + function fromCoordSystem(cm, coords, context) { + if (context == "div") { + return coords; + } + var left = coords.left, + top = coords.top; + // First move into "page" coordinate system + if (context == "page") { + left -= pageScrollX(); + top -= pageScrollY(); + } else if (context == "local" || !context) { + var localBox = cm.display.sizer.getBoundingClientRect(); + left += localBox.left; + top += localBox.top; + } + var lineSpaceBox = cm.display.lineSpace.getBoundingClientRect(); + return { + left: left - lineSpaceBox.left, + top: top - lineSpaceBox.top + }; + } + function charCoords(cm, pos, context, lineObj, bias) { + if (!lineObj) { + lineObj = getLine(cm.doc, pos.line); + } + return intoCoordSystem(cm, lineObj, measureChar(cm, lineObj, pos.ch, bias), context); + } + + // Returns a box for a given cursor position, which may have an + // 'other' property containing the position of the secondary cursor + // on a bidi boundary. + // A cursor Pos(line, char, "before") is on the same visual line as `char - 1` + // and after `char - 1` in writing order of `char - 1` + // A cursor Pos(line, char, "after") is on the same visual line as `char` + // and before `char` in writing order of `char` + // Examples (upper-case letters are RTL, lower-case are LTR): + // Pos(0, 1, ...) + // before after + // ab a|b a|b + // aB a|B aB| + // Ab |Ab A|b + // AB B|A B|A + // Every position after the last character on a line is considered to stick + // to the last character on the line. + function cursorCoords(cm, pos, context, lineObj, preparedMeasure, varHeight) { + lineObj = lineObj || getLine(cm.doc, pos.line); + if (!preparedMeasure) { + preparedMeasure = prepareMeasureForLine(cm, lineObj); + } + function get(ch, right) { + var m = measureCharPrepared(cm, preparedMeasure, ch, right ? "right" : "left", varHeight); + if (right) { + m.left = m.right; + } else { + m.right = m.left; + } + return intoCoordSystem(cm, lineObj, m, context); + } + var order = getOrder(lineObj, cm.doc.direction), + ch = pos.ch, + sticky = pos.sticky; + if (ch >= lineObj.text.length) { + ch = lineObj.text.length; + sticky = "before"; + } else if (ch <= 0) { + ch = 0; + sticky = "after"; + } + if (!order) { + return get(sticky == "before" ? ch - 1 : ch, sticky == "before"); + } + function getBidi(ch, partPos, invert) { + var part = order[partPos], + right = part.level == 1; + return get(invert ? ch - 1 : ch, right != invert); + } + var partPos = getBidiPartAt(order, ch, sticky); + var other = bidiOther; + var val = getBidi(ch, partPos, sticky == "before"); + if (other != null) { + val.other = getBidi(ch, other, sticky != "before"); + } + return val; + } + + // Used to cheaply estimate the coordinates for a position. Used for + // intermediate scroll updates. + function estimateCoords(cm, pos) { + var left = 0; + pos = clipPos(cm.doc, pos); + if (!cm.options.lineWrapping) { + left = charWidth(cm.display) * pos.ch; + } + var lineObj = getLine(cm.doc, pos.line); + var top = heightAtLine(lineObj) + paddingTop(cm.display); + return { + left: left, + right: left, + top: top, + bottom: top + lineObj.height + }; + } + + // Positions returned by coordsChar contain some extra information. + // xRel is the relative x position of the input coordinates compared + // to the found position (so xRel > 0 means the coordinates are to + // the right of the character position, for example). When outside + // is true, that means the coordinates lie outside the line's + // vertical range. + function PosWithInfo(line, ch, sticky, outside, xRel) { + var pos = Pos(line, ch, sticky); + pos.xRel = xRel; + if (outside) { + pos.outside = outside; + } + return pos; + } + + // Compute the character position closest to the given coordinates. + // Input must be lineSpace-local ("div" coordinate system). + function coordsChar(cm, x, y) { + var doc = cm.doc; + y += cm.display.viewOffset; + if (y < 0) { + return PosWithInfo(doc.first, 0, null, -1, -1); + } + var lineN = lineAtHeight(doc, y), + last = doc.first + doc.size - 1; + if (lineN > last) { + return PosWithInfo(doc.first + doc.size - 1, getLine(doc, last).text.length, null, 1, 1); + } + if (x < 0) { + x = 0; + } + var lineObj = getLine(doc, lineN); + for (;;) { + var found = coordsCharInner(cm, lineObj, lineN, x, y); + var collapsed = collapsedSpanAround(lineObj, found.ch + (found.xRel > 0 || found.outside > 0 ? 1 : 0)); + if (!collapsed) { + return found; + } + var rangeEnd = collapsed.find(1); + if (rangeEnd.line == lineN) { + return rangeEnd; + } + lineObj = getLine(doc, lineN = rangeEnd.line); + } + } + function wrappedLineExtent(cm, lineObj, preparedMeasure, y) { + y -= widgetTopHeight(lineObj); + var end = lineObj.text.length; + var begin = findFirst(function (ch) { + return measureCharPrepared(cm, preparedMeasure, ch - 1).bottom <= y; + }, end, 0); + end = findFirst(function (ch) { + return measureCharPrepared(cm, preparedMeasure, ch).top > y; + }, begin, end); + return { + begin: begin, + end: end + }; + } + function wrappedLineExtentChar(cm, lineObj, preparedMeasure, target) { + if (!preparedMeasure) { + preparedMeasure = prepareMeasureForLine(cm, lineObj); + } + var targetTop = intoCoordSystem(cm, lineObj, measureCharPrepared(cm, preparedMeasure, target), "line").top; + return wrappedLineExtent(cm, lineObj, preparedMeasure, targetTop); + } + + // Returns true if the given side of a box is after the given + // coordinates, in top-to-bottom, left-to-right order. + function boxIsAfter(box, x, y, left) { + return box.bottom <= y ? false : box.top > y ? true : (left ? box.left : box.right) > x; + } + function coordsCharInner(cm, lineObj, lineNo, x, y) { + // Move y into line-local coordinate space + y -= heightAtLine(lineObj); + var preparedMeasure = prepareMeasureForLine(cm, lineObj); + // When directly calling `measureCharPrepared`, we have to adjust + // for the widgets at this line. + var widgetHeight = widgetTopHeight(lineObj); + var begin = 0, + end = lineObj.text.length, + ltr = true; + var order = getOrder(lineObj, cm.doc.direction); + // If the line isn't plain left-to-right text, first figure out + // which bidi section the coordinates fall into. + if (order) { + var part = (cm.options.lineWrapping ? coordsBidiPartWrapped : coordsBidiPart)(cm, lineObj, lineNo, preparedMeasure, order, x, y); + ltr = part.level != 1; + // The awkward -1 offsets are needed because findFirst (called + // on these below) will treat its first bound as inclusive, + // second as exclusive, but we want to actually address the + // characters in the part's range + begin = ltr ? part.from : part.to - 1; + end = ltr ? part.to : part.from - 1; + } + + // A binary search to find the first character whose bounding box + // starts after the coordinates. If we run across any whose box wrap + // the coordinates, store that. + var chAround = null, + boxAround = null; + var ch = findFirst(function (ch) { + var box = measureCharPrepared(cm, preparedMeasure, ch); + box.top += widgetHeight; + box.bottom += widgetHeight; + if (!boxIsAfter(box, x, y, false)) { + return false; + } + if (box.top <= y && box.left <= x) { + chAround = ch; + boxAround = box; + } + return true; + }, begin, end); + var baseX, + sticky, + outside = false; + // If a box around the coordinates was found, use that + if (boxAround) { + // Distinguish coordinates nearer to the left or right side of the box + var atLeft = x - boxAround.left < boxAround.right - x, + atStart = atLeft == ltr; + ch = chAround + (atStart ? 0 : 1); + sticky = atStart ? "after" : "before"; + baseX = atLeft ? boxAround.left : boxAround.right; + } else { + // (Adjust for extended bound, if necessary.) + if (!ltr && (ch == end || ch == begin)) { + ch++; + } + // To determine which side to associate with, get the box to the + // left of the character and compare it's vertical position to the + // coordinates + sticky = ch == 0 ? "after" : ch == lineObj.text.length ? "before" : measureCharPrepared(cm, preparedMeasure, ch - (ltr ? 1 : 0)).bottom + widgetHeight <= y == ltr ? "after" : "before"; + // Now get accurate coordinates for this place, in order to get a + // base X position + var coords = cursorCoords(cm, Pos(lineNo, ch, sticky), "line", lineObj, preparedMeasure); + baseX = coords.left; + outside = y < coords.top ? -1 : y >= coords.bottom ? 1 : 0; + } + ch = skipExtendingChars(lineObj.text, ch, 1); + return PosWithInfo(lineNo, ch, sticky, outside, x - baseX); + } + function coordsBidiPart(cm, lineObj, lineNo, preparedMeasure, order, x, y) { + // Bidi parts are sorted left-to-right, and in a non-line-wrapping + // situation, we can take this ordering to correspond to the visual + // ordering. This finds the first part whose end is after the given + // coordinates. + var index = findFirst(function (i) { + var part = order[i], + ltr = part.level != 1; + return boxIsAfter(cursorCoords(cm, Pos(lineNo, ltr ? part.to : part.from, ltr ? "before" : "after"), "line", lineObj, preparedMeasure), x, y, true); + }, 0, order.length - 1); + var part = order[index]; + // If this isn't the first part, the part's start is also after + // the coordinates, and the coordinates aren't on the same line as + // that start, move one part back. + if (index > 0) { + var ltr = part.level != 1; + var start = cursorCoords(cm, Pos(lineNo, ltr ? part.from : part.to, ltr ? "after" : "before"), "line", lineObj, preparedMeasure); + if (boxIsAfter(start, x, y, true) && start.top > y) { + part = order[index - 1]; + } + } + return part; + } + function coordsBidiPartWrapped(cm, lineObj, _lineNo, preparedMeasure, order, x, y) { + // In a wrapped line, rtl text on wrapping boundaries can do things + // that don't correspond to the ordering in our `order` array at + // all, so a binary search doesn't work, and we want to return a + // part that only spans one line so that the binary search in + // coordsCharInner is safe. As such, we first find the extent of the + // wrapped line, and then do a flat search in which we discard any + // spans that aren't on the line. + var ref = wrappedLineExtent(cm, lineObj, preparedMeasure, y); + var begin = ref.begin; + var end = ref.end; + if (/\s/.test(lineObj.text.charAt(end - 1))) { + end--; + } + var part = null, + closestDist = null; + for (var i = 0; i < order.length; i++) { + var p = order[i]; + if (p.from >= end || p.to <= begin) { + continue; + } + var ltr = p.level != 1; + var endX = measureCharPrepared(cm, preparedMeasure, ltr ? Math.min(end, p.to) - 1 : Math.max(begin, p.from)).right; + // Weigh against spans ending before this, so that they are only + // picked if nothing ends after + var dist = endX < x ? x - endX + 1e9 : endX - x; + if (!part || closestDist > dist) { + part = p; + closestDist = dist; + } + } + if (!part) { + part = order[order.length - 1]; + } + // Clip the part to the wrapped line. + if (part.from < begin) { + part = { + from: begin, + to: part.to, + level: part.level + }; + } + if (part.to > end) { + part = { + from: part.from, + to: end, + level: part.level + }; + } + return part; + } + var measureText; + // Compute the default text height. + function textHeight(display) { + if (display.cachedTextHeight != null) { + return display.cachedTextHeight; + } + if (measureText == null) { + measureText = elt("pre", null, "CodeMirror-line-like"); + // Measure a bunch of lines, for browsers that compute + // fractional heights. + for (var i = 0; i < 49; ++i) { + measureText.appendChild(document.createTextNode("x")); + measureText.appendChild(elt("br")); + } + measureText.appendChild(document.createTextNode("x")); + } + removeChildrenAndAdd(display.measure, measureText); + var height = measureText.offsetHeight / 50; + if (height > 3) { + display.cachedTextHeight = height; + } + removeChildren(display.measure); + return height || 1; + } + + // Compute the default character width. + function charWidth(display) { + if (display.cachedCharWidth != null) { + return display.cachedCharWidth; + } + var anchor = elt("span", "xxxxxxxxxx"); + var pre = elt("pre", [anchor], "CodeMirror-line-like"); + removeChildrenAndAdd(display.measure, pre); + var rect = anchor.getBoundingClientRect(), + width = (rect.right - rect.left) / 10; + if (width > 2) { + display.cachedCharWidth = width; + } + return width || 10; + } + + // Do a bulk-read of the DOM positions and sizes needed to draw the + // view, so that we don't interleave reading and writing to the DOM. + function getDimensions(cm) { + var d = cm.display, + left = {}, + width = {}; + var gutterLeft = d.gutters.clientLeft; + for (var n = d.gutters.firstChild, i = 0; n; n = n.nextSibling, ++i) { + var id = cm.display.gutterSpecs[i].className; + left[id] = n.offsetLeft + n.clientLeft + gutterLeft; + width[id] = n.clientWidth; + } + return { + fixedPos: compensateForHScroll(d), + gutterTotalWidth: d.gutters.offsetWidth, + gutterLeft: left, + gutterWidth: width, + wrapperWidth: d.wrapper.clientWidth + }; + } + + // Computes display.scroller.scrollLeft + display.gutters.offsetWidth, + // but using getBoundingClientRect to get a sub-pixel-accurate + // result. + function compensateForHScroll(display) { + return display.scroller.getBoundingClientRect().left - display.sizer.getBoundingClientRect().left; + } + + // Returns a function that estimates the height of a line, to use as + // first approximation until the line becomes visible (and is thus + // properly measurable). + function estimateHeight(cm) { + var th = textHeight(cm.display), + wrapping = cm.options.lineWrapping; + var perLine = wrapping && Math.max(5, cm.display.scroller.clientWidth / charWidth(cm.display) - 3); + return function (line) { + if (lineIsHidden(cm.doc, line)) { + return 0; + } + var widgetsHeight = 0; + if (line.widgets) { + for (var i = 0; i < line.widgets.length; i++) { + if (line.widgets[i].height) { + widgetsHeight += line.widgets[i].height; + } + } + } + if (wrapping) { + return widgetsHeight + (Math.ceil(line.text.length / perLine) || 1) * th; + } else { + return widgetsHeight + th; + } + }; + } + function estimateLineHeights(cm) { + var doc = cm.doc, + est = estimateHeight(cm); + doc.iter(function (line) { + var estHeight = est(line); + if (estHeight != line.height) { + updateLineHeight(line, estHeight); + } + }); + } + + // Given a mouse event, find the corresponding position. If liberal + // is false, it checks whether a gutter or scrollbar was clicked, + // and returns null if it was. forRect is used by rectangular + // selections, and tries to estimate a character position even for + // coordinates beyond the right of the text. + function posFromMouse(cm, e, liberal, forRect) { + var display = cm.display; + if (!liberal && e_target(e).getAttribute("cm-not-content") == "true") { + return null; + } + var x, + y, + space = display.lineSpace.getBoundingClientRect(); + // Fails unpredictably on IE[67] when mouse is dragged around quickly. + try { + x = e.clientX - space.left; + y = e.clientY - space.top; + } catch (e$1) { + return null; + } + var coords = coordsChar(cm, x, y), + line; + if (forRect && coords.xRel > 0 && (line = getLine(cm.doc, coords.line).text).length == coords.ch) { + var colDiff = countColumn(line, line.length, cm.options.tabSize) - line.length; + coords = Pos(coords.line, Math.max(0, Math.round((x - paddingH(cm.display).left) / charWidth(cm.display)) - colDiff)); + } + return coords; + } + + // Find the view element corresponding to a given line. Return null + // when the line isn't visible. + function findViewIndex(cm, n) { + if (n >= cm.display.viewTo) { + return null; + } + n -= cm.display.viewFrom; + if (n < 0) { + return null; + } + var view = cm.display.view; + for (var i = 0; i < view.length; i++) { + n -= view[i].size; + if (n < 0) { + return i; + } + } + } + + // Updates the display.view data structure for a given change to the + // document. From and to are in pre-change coordinates. Lendiff is + // the amount of lines added or subtracted by the change. This is + // used for changes that span multiple lines, or change the way + // lines are divided into visual lines. regLineChange (below) + // registers single-line changes. + function regChange(cm, from, to, lendiff) { + if (from == null) { + from = cm.doc.first; + } + if (to == null) { + to = cm.doc.first + cm.doc.size; + } + if (!lendiff) { + lendiff = 0; + } + var display = cm.display; + if (lendiff && to < display.viewTo && (display.updateLineNumbers == null || display.updateLineNumbers > from)) { + display.updateLineNumbers = from; + } + cm.curOp.viewChanged = true; + if (from >= display.viewTo) { + // Change after + if (sawCollapsedSpans && visualLineNo(cm.doc, from) < display.viewTo) { + resetView(cm); + } + } else if (to <= display.viewFrom) { + // Change before + if (sawCollapsedSpans && visualLineEndNo(cm.doc, to + lendiff) > display.viewFrom) { + resetView(cm); + } else { + display.viewFrom += lendiff; + display.viewTo += lendiff; + } + } else if (from <= display.viewFrom && to >= display.viewTo) { + // Full overlap + resetView(cm); + } else if (from <= display.viewFrom) { + // Top overlap + var cut = viewCuttingPoint(cm, to, to + lendiff, 1); + if (cut) { + display.view = display.view.slice(cut.index); + display.viewFrom = cut.lineN; + display.viewTo += lendiff; + } else { + resetView(cm); + } + } else if (to >= display.viewTo) { + // Bottom overlap + var cut$1 = viewCuttingPoint(cm, from, from, -1); + if (cut$1) { + display.view = display.view.slice(0, cut$1.index); + display.viewTo = cut$1.lineN; + } else { + resetView(cm); + } + } else { + // Gap in the middle + var cutTop = viewCuttingPoint(cm, from, from, -1); + var cutBot = viewCuttingPoint(cm, to, to + lendiff, 1); + if (cutTop && cutBot) { + display.view = display.view.slice(0, cutTop.index).concat(buildViewArray(cm, cutTop.lineN, cutBot.lineN)).concat(display.view.slice(cutBot.index)); + display.viewTo += lendiff; + } else { + resetView(cm); + } + } + var ext = display.externalMeasured; + if (ext) { + if (to < ext.lineN) { + ext.lineN += lendiff; + } else if (from < ext.lineN + ext.size) { + display.externalMeasured = null; + } + } + } + + // Register a change to a single line. Type must be one of "text", + // "gutter", "class", "widget" + function regLineChange(cm, line, type) { + cm.curOp.viewChanged = true; + var display = cm.display, + ext = cm.display.externalMeasured; + if (ext && line >= ext.lineN && line < ext.lineN + ext.size) { + display.externalMeasured = null; + } + if (line < display.viewFrom || line >= display.viewTo) { + return; + } + var lineView = display.view[findViewIndex(cm, line)]; + if (lineView.node == null) { + return; + } + var arr = lineView.changes || (lineView.changes = []); + if (indexOf(arr, type) == -1) { + arr.push(type); + } + } + + // Clear the view. + function resetView(cm) { + cm.display.viewFrom = cm.display.viewTo = cm.doc.first; + cm.display.view = []; + cm.display.viewOffset = 0; + } + function viewCuttingPoint(cm, oldN, newN, dir) { + var index = findViewIndex(cm, oldN), + diff, + view = cm.display.view; + if (!sawCollapsedSpans || newN == cm.doc.first + cm.doc.size) { + return { + index: index, + lineN: newN + }; + } + var n = cm.display.viewFrom; + for (var i = 0; i < index; i++) { + n += view[i].size; + } + if (n != oldN) { + if (dir > 0) { + if (index == view.length - 1) { + return null; + } + diff = n + view[index].size - oldN; + index++; + } else { + diff = n - oldN; + } + oldN += diff; + newN += diff; + } + while (visualLineNo(cm.doc, newN) != newN) { + if (index == (dir < 0 ? 0 : view.length - 1)) { + return null; + } + newN += dir * view[index - (dir < 0 ? 1 : 0)].size; + index += dir; + } + return { + index: index, + lineN: newN + }; + } + + // Force the view to cover a given range, adding empty view element + // or clipping off existing ones as needed. + function adjustView(cm, from, to) { + var display = cm.display, + view = display.view; + if (view.length == 0 || from >= display.viewTo || to <= display.viewFrom) { + display.view = buildViewArray(cm, from, to); + display.viewFrom = from; + } else { + if (display.viewFrom > from) { + display.view = buildViewArray(cm, from, display.viewFrom).concat(display.view); + } else if (display.viewFrom < from) { + display.view = display.view.slice(findViewIndex(cm, from)); + } + display.viewFrom = from; + if (display.viewTo < to) { + display.view = display.view.concat(buildViewArray(cm, display.viewTo, to)); + } else if (display.viewTo > to) { + display.view = display.view.slice(0, findViewIndex(cm, to)); + } + } + display.viewTo = to; + } + + // Count the number of lines in the view whose DOM representation is + // out of date (or nonexistent). + function countDirtyView(cm) { + var view = cm.display.view, + dirty = 0; + for (var i = 0; i < view.length; i++) { + var lineView = view[i]; + if (!lineView.hidden && (!lineView.node || lineView.changes)) { + ++dirty; + } + } + return dirty; + } + function updateSelection(cm) { + cm.display.input.showSelection(cm.display.input.prepareSelection()); + } + function prepareSelection(cm, primary) { + if (primary === void 0) primary = true; + var doc = cm.doc, + result = {}; + var curFragment = result.cursors = document.createDocumentFragment(); + var selFragment = result.selection = document.createDocumentFragment(); + var customCursor = cm.options.$customCursor; + if (customCursor) { + primary = true; + } + for (var i = 0; i < doc.sel.ranges.length; i++) { + if (!primary && i == doc.sel.primIndex) { + continue; + } + var range = doc.sel.ranges[i]; + if (range.from().line >= cm.display.viewTo || range.to().line < cm.display.viewFrom) { + continue; + } + var collapsed = range.empty(); + if (customCursor) { + var head = customCursor(cm, range); + if (head) { + drawSelectionCursor(cm, head, curFragment); + } + } else if (collapsed || cm.options.showCursorWhenSelecting) { + drawSelectionCursor(cm, range.head, curFragment); + } + if (!collapsed) { + drawSelectionRange(cm, range, selFragment); + } + } + return result; + } + + // Draws a cursor for the given range + function drawSelectionCursor(cm, head, output) { + var pos = cursorCoords(cm, head, "div", null, null, !cm.options.singleCursorHeightPerLine); + var cursor = output.appendChild(elt("div", "\u00a0", "CodeMirror-cursor")); + cursor.style.left = pos.left + "px"; + cursor.style.top = pos.top + "px"; + cursor.style.height = Math.max(0, pos.bottom - pos.top) * cm.options.cursorHeight + "px"; + if (/\bcm-fat-cursor\b/.test(cm.getWrapperElement().className)) { + var charPos = charCoords(cm, head, "div", null, null); + var width = charPos.right - charPos.left; + cursor.style.width = (width > 0 ? width : cm.defaultCharWidth()) + "px"; + } + if (pos.other) { + // Secondary cursor, shown when on a 'jump' in bi-directional text + var otherCursor = output.appendChild(elt("div", "\u00a0", "CodeMirror-cursor CodeMirror-secondarycursor")); + otherCursor.style.display = ""; + otherCursor.style.left = pos.other.left + "px"; + otherCursor.style.top = pos.other.top + "px"; + otherCursor.style.height = (pos.other.bottom - pos.other.top) * .85 + "px"; + } + } + function cmpCoords(a, b) { + return a.top - b.top || a.left - b.left; + } + + // Draws the given range as a highlighted selection + function drawSelectionRange(cm, range, output) { + var display = cm.display, + doc = cm.doc; + var fragment = document.createDocumentFragment(); + var padding = paddingH(cm.display), + leftSide = padding.left; + var rightSide = Math.max(display.sizerWidth, displayWidth(cm) - display.sizer.offsetLeft) - padding.right; + var docLTR = doc.direction == "ltr"; + function add(left, top, width, bottom) { + if (top < 0) { + top = 0; + } + top = Math.round(top); + bottom = Math.round(bottom); + fragment.appendChild(elt("div", null, "CodeMirror-selected", "position: absolute; left: " + left + "px;\n top: " + top + "px; width: " + (width == null ? rightSide - left : width) + "px;\n height: " + (bottom - top) + "px")); + } + function drawForLine(line, fromArg, toArg) { + var lineObj = getLine(doc, line); + var lineLen = lineObj.text.length; + var start, end; + function coords(ch, bias) { + return charCoords(cm, Pos(line, ch), "div", lineObj, bias); + } + function wrapX(pos, dir, side) { + var extent = wrappedLineExtentChar(cm, lineObj, null, pos); + var prop = dir == "ltr" == (side == "after") ? "left" : "right"; + var ch = side == "after" ? extent.begin : extent.end - (/\s/.test(lineObj.text.charAt(extent.end - 1)) ? 2 : 1); + return coords(ch, prop)[prop]; + } + var order = getOrder(lineObj, doc.direction); + iterateBidiSections(order, fromArg || 0, toArg == null ? lineLen : toArg, function (from, to, dir, i) { + var ltr = dir == "ltr"; + var fromPos = coords(from, ltr ? "left" : "right"); + var toPos = coords(to - 1, ltr ? "right" : "left"); + var openStart = fromArg == null && from == 0, + openEnd = toArg == null && to == lineLen; + var first = i == 0, + last = !order || i == order.length - 1; + if (toPos.top - fromPos.top <= 3) { + // Single line + var openLeft = (docLTR ? openStart : openEnd) && first; + var openRight = (docLTR ? openEnd : openStart) && last; + var left = openLeft ? leftSide : (ltr ? fromPos : toPos).left; + var right = openRight ? rightSide : (ltr ? toPos : fromPos).right; + add(left, fromPos.top, right - left, fromPos.bottom); + } else { + // Multiple lines + var topLeft, topRight, botLeft, botRight; + if (ltr) { + topLeft = docLTR && openStart && first ? leftSide : fromPos.left; + topRight = docLTR ? rightSide : wrapX(from, dir, "before"); + botLeft = docLTR ? leftSide : wrapX(to, dir, "after"); + botRight = docLTR && openEnd && last ? rightSide : toPos.right; + } else { + topLeft = !docLTR ? leftSide : wrapX(from, dir, "before"); + topRight = !docLTR && openStart && first ? rightSide : fromPos.right; + botLeft = !docLTR && openEnd && last ? leftSide : toPos.left; + botRight = !docLTR ? rightSide : wrapX(to, dir, "after"); + } + add(topLeft, fromPos.top, topRight - topLeft, fromPos.bottom); + if (fromPos.bottom < toPos.top) { + add(leftSide, fromPos.bottom, null, toPos.top); + } + add(botLeft, toPos.top, botRight - botLeft, toPos.bottom); + } + if (!start || cmpCoords(fromPos, start) < 0) { + start = fromPos; + } + if (cmpCoords(toPos, start) < 0) { + start = toPos; + } + if (!end || cmpCoords(fromPos, end) < 0) { + end = fromPos; + } + if (cmpCoords(toPos, end) < 0) { + end = toPos; + } + }); + return { + start: start, + end: end + }; + } + var sFrom = range.from(), + sTo = range.to(); + if (sFrom.line == sTo.line) { + drawForLine(sFrom.line, sFrom.ch, sTo.ch); + } else { + var fromLine = getLine(doc, sFrom.line), + toLine = getLine(doc, sTo.line); + var singleVLine = visualLine(fromLine) == visualLine(toLine); + var leftEnd = drawForLine(sFrom.line, sFrom.ch, singleVLine ? fromLine.text.length + 1 : null).end; + var rightStart = drawForLine(sTo.line, singleVLine ? 0 : null, sTo.ch).start; + if (singleVLine) { + if (leftEnd.top < rightStart.top - 2) { + add(leftEnd.right, leftEnd.top, null, leftEnd.bottom); + add(leftSide, rightStart.top, rightStart.left, rightStart.bottom); + } else { + add(leftEnd.right, leftEnd.top, rightStart.left - leftEnd.right, leftEnd.bottom); + } + } + if (leftEnd.bottom < rightStart.top) { + add(leftSide, leftEnd.bottom, null, rightStart.top); + } + } + output.appendChild(fragment); + } + + // Cursor-blinking + function restartBlink(cm) { + if (!cm.state.focused) { + return; + } + var display = cm.display; + clearInterval(display.blinker); + var on = true; + display.cursorDiv.style.visibility = ""; + if (cm.options.cursorBlinkRate > 0) { + display.blinker = setInterval(function () { + if (!cm.hasFocus()) { + onBlur(cm); + } + display.cursorDiv.style.visibility = (on = !on) ? "" : "hidden"; + }, cm.options.cursorBlinkRate); + } else if (cm.options.cursorBlinkRate < 0) { + display.cursorDiv.style.visibility = "hidden"; + } + } + function ensureFocus(cm) { + if (!cm.hasFocus()) { + cm.display.input.focus(); + if (!cm.state.focused) { + onFocus(cm); + } + } + } + function delayBlurEvent(cm) { + cm.state.delayingBlurEvent = true; + setTimeout(function () { + if (cm.state.delayingBlurEvent) { + cm.state.delayingBlurEvent = false; + if (cm.state.focused) { + onBlur(cm); + } + } + }, 100); + } + function onFocus(cm, e) { + if (cm.state.delayingBlurEvent && !cm.state.draggingText) { + cm.state.delayingBlurEvent = false; + } + if (cm.options.readOnly == "nocursor") { + return; + } + if (!cm.state.focused) { + signal(cm, "focus", cm, e); + cm.state.focused = true; + addClass(cm.display.wrapper, "CodeMirror-focused"); + // This test prevents this from firing when a context + // menu is closed (since the input reset would kill the + // select-all detection hack) + if (!cm.curOp && cm.display.selForContextMenu != cm.doc.sel) { + cm.display.input.reset(); + if (webkit) { + setTimeout(function () { + return cm.display.input.reset(true); + }, 20); + } // Issue #1730 + } + cm.display.input.receivedFocus(); + } + restartBlink(cm); + } + function onBlur(cm, e) { + if (cm.state.delayingBlurEvent) { + return; + } + if (cm.state.focused) { + signal(cm, "blur", cm, e); + cm.state.focused = false; + rmClass(cm.display.wrapper, "CodeMirror-focused"); + } + clearInterval(cm.display.blinker); + setTimeout(function () { + if (!cm.state.focused) { + cm.display.shift = false; + } + }, 150); + } + + // Read the actual heights of the rendered lines, and update their + // stored heights to match. + function updateHeightsInViewport(cm) { + var display = cm.display; + var prevBottom = display.lineDiv.offsetTop; + var viewTop = Math.max(0, display.scroller.getBoundingClientRect().top); + var oldHeight = display.lineDiv.getBoundingClientRect().top; + var mustScroll = 0; + for (var i = 0; i < display.view.length; i++) { + var cur = display.view[i], + wrapping = cm.options.lineWrapping; + var height = void 0, + width = 0; + if (cur.hidden) { + continue; + } + oldHeight += cur.line.height; + if (ie && ie_version < 8) { + var bot = cur.node.offsetTop + cur.node.offsetHeight; + height = bot - prevBottom; + prevBottom = bot; + } else { + var box = cur.node.getBoundingClientRect(); + height = box.bottom - box.top; + // Check that lines don't extend past the right of the current + // editor width + if (!wrapping && cur.text.firstChild) { + width = cur.text.firstChild.getBoundingClientRect().right - box.left - 1; + } + } + var diff = cur.line.height - height; + if (diff > .005 || diff < -.005) { + if (oldHeight < viewTop) { + mustScroll -= diff; + } + updateLineHeight(cur.line, height); + updateWidgetHeight(cur.line); + if (cur.rest) { + for (var j = 0; j < cur.rest.length; j++) { + updateWidgetHeight(cur.rest[j]); + } + } + } + if (width > cm.display.sizerWidth) { + var chWidth = Math.ceil(width / charWidth(cm.display)); + if (chWidth > cm.display.maxLineLength) { + cm.display.maxLineLength = chWidth; + cm.display.maxLine = cur.line; + cm.display.maxLineChanged = true; + } + } + } + if (Math.abs(mustScroll) > 2) { + display.scroller.scrollTop += mustScroll; + } + } + + // Read and store the height of line widgets associated with the + // given line. + function updateWidgetHeight(line) { + if (line.widgets) { + for (var i = 0; i < line.widgets.length; ++i) { + var w = line.widgets[i], + parent = w.node.parentNode; + if (parent) { + w.height = parent.offsetHeight; + } + } + } + } + + // Compute the lines that are visible in a given viewport (defaults + // the the current scroll position). viewport may contain top, + // height, and ensure (see op.scrollToPos) properties. + function visibleLines(display, doc, viewport) { + var top = viewport && viewport.top != null ? Math.max(0, viewport.top) : display.scroller.scrollTop; + top = Math.floor(top - paddingTop(display)); + var bottom = viewport && viewport.bottom != null ? viewport.bottom : top + display.wrapper.clientHeight; + var from = lineAtHeight(doc, top), + to = lineAtHeight(doc, bottom); + // Ensure is a {from: {line, ch}, to: {line, ch}} object, and + // forces those lines into the viewport (if possible). + if (viewport && viewport.ensure) { + var ensureFrom = viewport.ensure.from.line, + ensureTo = viewport.ensure.to.line; + if (ensureFrom < from) { + from = ensureFrom; + to = lineAtHeight(doc, heightAtLine(getLine(doc, ensureFrom)) + display.wrapper.clientHeight); + } else if (Math.min(ensureTo, doc.lastLine()) >= to) { + from = lineAtHeight(doc, heightAtLine(getLine(doc, ensureTo)) - display.wrapper.clientHeight); + to = ensureTo; + } + } + return { + from: from, + to: Math.max(to, from + 1) + }; + } + + // SCROLLING THINGS INTO VIEW + + // If an editor sits on the top or bottom of the window, partially + // scrolled out of view, this ensures that the cursor is visible. + function maybeScrollWindow(cm, rect) { + if (signalDOMEvent(cm, "scrollCursorIntoView")) { + return; + } + var display = cm.display, + box = display.sizer.getBoundingClientRect(), + doScroll = null; + if (rect.top + box.top < 0) { + doScroll = true; + } else if (rect.bottom + box.top > (window.innerHeight || document.documentElement.clientHeight)) { + doScroll = false; + } + if (doScroll != null && !phantom) { + var scrollNode = elt("div", "\u200b", null, "position: absolute;\n top: " + (rect.top - display.viewOffset - paddingTop(cm.display)) + "px;\n height: " + (rect.bottom - rect.top + scrollGap(cm) + display.barHeight) + "px;\n left: " + rect.left + "px; width: " + Math.max(2, rect.right - rect.left) + "px;"); + cm.display.lineSpace.appendChild(scrollNode); + scrollNode.scrollIntoView(doScroll); + cm.display.lineSpace.removeChild(scrollNode); + } + } + + // Scroll a given position into view (immediately), verifying that + // it actually became visible (as line heights are accurately + // measured, the position of something may 'drift' during drawing). + function scrollPosIntoView(cm, pos, end, margin) { + if (margin == null) { + margin = 0; + } + var rect; + if (!cm.options.lineWrapping && pos == end) { + // Set pos and end to the cursor positions around the character pos sticks to + // If pos.sticky == "before", that is around pos.ch - 1, otherwise around pos.ch + // If pos == Pos(_, 0, "before"), pos and end are unchanged + end = pos.sticky == "before" ? Pos(pos.line, pos.ch + 1, "before") : pos; + pos = pos.ch ? Pos(pos.line, pos.sticky == "before" ? pos.ch - 1 : pos.ch, "after") : pos; + } + for (var limit = 0; limit < 5; limit++) { + var changed = false; + var coords = cursorCoords(cm, pos); + var endCoords = !end || end == pos ? coords : cursorCoords(cm, end); + rect = { + left: Math.min(coords.left, endCoords.left), + top: Math.min(coords.top, endCoords.top) - margin, + right: Math.max(coords.left, endCoords.left), + bottom: Math.max(coords.bottom, endCoords.bottom) + margin + }; + var scrollPos = calculateScrollPos(cm, rect); + var startTop = cm.doc.scrollTop, + startLeft = cm.doc.scrollLeft; + if (scrollPos.scrollTop != null) { + updateScrollTop(cm, scrollPos.scrollTop); + if (Math.abs(cm.doc.scrollTop - startTop) > 1) { + changed = true; + } + } + if (scrollPos.scrollLeft != null) { + setScrollLeft(cm, scrollPos.scrollLeft); + if (Math.abs(cm.doc.scrollLeft - startLeft) > 1) { + changed = true; + } + } + if (!changed) { + break; + } + } + return rect; + } + + // Scroll a given set of coordinates into view (immediately). + function scrollIntoView(cm, rect) { + var scrollPos = calculateScrollPos(cm, rect); + if (scrollPos.scrollTop != null) { + updateScrollTop(cm, scrollPos.scrollTop); + } + if (scrollPos.scrollLeft != null) { + setScrollLeft(cm, scrollPos.scrollLeft); + } + } + + // Calculate a new scroll position needed to scroll the given + // rectangle into view. Returns an object with scrollTop and + // scrollLeft properties. When these are undefined, the + // vertical/horizontal position does not need to be adjusted. + function calculateScrollPos(cm, rect) { + var display = cm.display, + snapMargin = textHeight(cm.display); + if (rect.top < 0) { + rect.top = 0; + } + var screentop = cm.curOp && cm.curOp.scrollTop != null ? cm.curOp.scrollTop : display.scroller.scrollTop; + var screen = displayHeight(cm), + result = {}; + if (rect.bottom - rect.top > screen) { + rect.bottom = rect.top + screen; + } + var docBottom = cm.doc.height + paddingVert(display); + var atTop = rect.top < snapMargin, + atBottom = rect.bottom > docBottom - snapMargin; + if (rect.top < screentop) { + result.scrollTop = atTop ? 0 : rect.top; + } else if (rect.bottom > screentop + screen) { + var newTop = Math.min(rect.top, (atBottom ? docBottom : rect.bottom) - screen); + if (newTop != screentop) { + result.scrollTop = newTop; + } + } + var gutterSpace = cm.options.fixedGutter ? 0 : display.gutters.offsetWidth; + var screenleft = cm.curOp && cm.curOp.scrollLeft != null ? cm.curOp.scrollLeft : display.scroller.scrollLeft - gutterSpace; + var screenw = displayWidth(cm) - display.gutters.offsetWidth; + var tooWide = rect.right - rect.left > screenw; + if (tooWide) { + rect.right = rect.left + screenw; + } + if (rect.left < 10) { + result.scrollLeft = 0; + } else if (rect.left < screenleft) { + result.scrollLeft = Math.max(0, rect.left + gutterSpace - (tooWide ? 0 : 10)); + } else if (rect.right > screenw + screenleft - 3) { + result.scrollLeft = rect.right + (tooWide ? 0 : 10) - screenw; + } + return result; + } + + // Store a relative adjustment to the scroll position in the current + // operation (to be applied when the operation finishes). + function addToScrollTop(cm, top) { + if (top == null) { + return; + } + resolveScrollToPos(cm); + cm.curOp.scrollTop = (cm.curOp.scrollTop == null ? cm.doc.scrollTop : cm.curOp.scrollTop) + top; + } + + // Make sure that at the end of the operation the current cursor is + // shown. + function ensureCursorVisible(cm) { + resolveScrollToPos(cm); + var cur = cm.getCursor(); + cm.curOp.scrollToPos = { + from: cur, + to: cur, + margin: cm.options.cursorScrollMargin + }; + } + function scrollToCoords(cm, x, y) { + if (x != null || y != null) { + resolveScrollToPos(cm); + } + if (x != null) { + cm.curOp.scrollLeft = x; + } + if (y != null) { + cm.curOp.scrollTop = y; + } + } + function scrollToRange(cm, range) { + resolveScrollToPos(cm); + cm.curOp.scrollToPos = range; + } + + // When an operation has its scrollToPos property set, and another + // scroll action is applied before the end of the operation, this + // 'simulates' scrolling that position into view in a cheap way, so + // that the effect of intermediate scroll commands is not ignored. + function resolveScrollToPos(cm) { + var range = cm.curOp.scrollToPos; + if (range) { + cm.curOp.scrollToPos = null; + var from = estimateCoords(cm, range.from), + to = estimateCoords(cm, range.to); + scrollToCoordsRange(cm, from, to, range.margin); + } + } + function scrollToCoordsRange(cm, from, to, margin) { + var sPos = calculateScrollPos(cm, { + left: Math.min(from.left, to.left), + top: Math.min(from.top, to.top) - margin, + right: Math.max(from.right, to.right), + bottom: Math.max(from.bottom, to.bottom) + margin + }); + scrollToCoords(cm, sPos.scrollLeft, sPos.scrollTop); + } + + // Sync the scrollable area and scrollbars, ensure the viewport + // covers the visible area. + function updateScrollTop(cm, val) { + if (Math.abs(cm.doc.scrollTop - val) < 2) { + return; + } + if (!gecko) { + updateDisplaySimple(cm, { + top: val + }); + } + setScrollTop(cm, val, true); + if (gecko) { + updateDisplaySimple(cm); + } + startWorker(cm, 100); + } + function setScrollTop(cm, val, forceScroll) { + val = Math.max(0, Math.min(cm.display.scroller.scrollHeight - cm.display.scroller.clientHeight, val)); + if (cm.display.scroller.scrollTop == val && !forceScroll) { + return; + } + cm.doc.scrollTop = val; + cm.display.scrollbars.setScrollTop(val); + if (cm.display.scroller.scrollTop != val) { + cm.display.scroller.scrollTop = val; + } + } + + // Sync scroller and scrollbar, ensure the gutter elements are + // aligned. + function setScrollLeft(cm, val, isScroller, forceScroll) { + val = Math.max(0, Math.min(val, cm.display.scroller.scrollWidth - cm.display.scroller.clientWidth)); + if ((isScroller ? val == cm.doc.scrollLeft : Math.abs(cm.doc.scrollLeft - val) < 2) && !forceScroll) { + return; + } + cm.doc.scrollLeft = val; + alignHorizontally(cm); + if (cm.display.scroller.scrollLeft != val) { + cm.display.scroller.scrollLeft = val; + } + cm.display.scrollbars.setScrollLeft(val); + } + + // SCROLLBARS + + // Prepare DOM reads needed to update the scrollbars. Done in one + // shot to minimize update/measure roundtrips. + function measureForScrollbars(cm) { + var d = cm.display, + gutterW = d.gutters.offsetWidth; + var docH = Math.round(cm.doc.height + paddingVert(cm.display)); + return { + clientHeight: d.scroller.clientHeight, + viewHeight: d.wrapper.clientHeight, + scrollWidth: d.scroller.scrollWidth, + clientWidth: d.scroller.clientWidth, + viewWidth: d.wrapper.clientWidth, + barLeft: cm.options.fixedGutter ? gutterW : 0, + docHeight: docH, + scrollHeight: docH + scrollGap(cm) + d.barHeight, + nativeBarWidth: d.nativeBarWidth, + gutterWidth: gutterW + }; + } + var NativeScrollbars = function (place, scroll, cm) { + this.cm = cm; + var vert = this.vert = elt("div", [elt("div", null, null, "min-width: 1px")], "CodeMirror-vscrollbar"); + var horiz = this.horiz = elt("div", [elt("div", null, null, "height: 100%; min-height: 1px")], "CodeMirror-hscrollbar"); + vert.tabIndex = horiz.tabIndex = -1; + place(vert); + place(horiz); + on(vert, "scroll", function () { + if (vert.clientHeight) { + scroll(vert.scrollTop, "vertical"); + } + }); + on(horiz, "scroll", function () { + if (horiz.clientWidth) { + scroll(horiz.scrollLeft, "horizontal"); + } + }); + this.checkedZeroWidth = false; + // Need to set a minimum width to see the scrollbar on IE7 (but must not set it on IE8). + if (ie && ie_version < 8) { + this.horiz.style.minHeight = this.vert.style.minWidth = "18px"; + } + }; + NativeScrollbars.prototype.update = function (measure) { + var needsH = measure.scrollWidth > measure.clientWidth + 1; + var needsV = measure.scrollHeight > measure.clientHeight + 1; + var sWidth = measure.nativeBarWidth; + if (needsV) { + this.vert.style.display = "block"; + this.vert.style.bottom = needsH ? sWidth + "px" : "0"; + var totalHeight = measure.viewHeight - (needsH ? sWidth : 0); + // A bug in IE8 can cause this value to be negative, so guard it. + this.vert.firstChild.style.height = Math.max(0, measure.scrollHeight - measure.clientHeight + totalHeight) + "px"; + } else { + this.vert.scrollTop = 0; + this.vert.style.display = ""; + this.vert.firstChild.style.height = "0"; + } + if (needsH) { + this.horiz.style.display = "block"; + this.horiz.style.right = needsV ? sWidth + "px" : "0"; + this.horiz.style.left = measure.barLeft + "px"; + var totalWidth = measure.viewWidth - measure.barLeft - (needsV ? sWidth : 0); + this.horiz.firstChild.style.width = Math.max(0, measure.scrollWidth - measure.clientWidth + totalWidth) + "px"; + } else { + this.horiz.style.display = ""; + this.horiz.firstChild.style.width = "0"; + } + if (!this.checkedZeroWidth && measure.clientHeight > 0) { + if (sWidth == 0) { + this.zeroWidthHack(); + } + this.checkedZeroWidth = true; + } + return { + right: needsV ? sWidth : 0, + bottom: needsH ? sWidth : 0 + }; + }; + NativeScrollbars.prototype.setScrollLeft = function (pos) { + if (this.horiz.scrollLeft != pos) { + this.horiz.scrollLeft = pos; + } + if (this.disableHoriz) { + this.enableZeroWidthBar(this.horiz, this.disableHoriz, "horiz"); + } + }; + NativeScrollbars.prototype.setScrollTop = function (pos) { + if (this.vert.scrollTop != pos) { + this.vert.scrollTop = pos; + } + if (this.disableVert) { + this.enableZeroWidthBar(this.vert, this.disableVert, "vert"); + } + }; + NativeScrollbars.prototype.zeroWidthHack = function () { + var w = mac && !mac_geMountainLion ? "12px" : "18px"; + this.horiz.style.height = this.vert.style.width = w; + this.horiz.style.pointerEvents = this.vert.style.pointerEvents = "none"; + this.disableHoriz = new Delayed(); + this.disableVert = new Delayed(); + }; + NativeScrollbars.prototype.enableZeroWidthBar = function (bar, delay, type) { + bar.style.pointerEvents = "auto"; + function maybeDisable() { + // To find out whether the scrollbar is still visible, we + // check whether the element under the pixel in the bottom + // right corner of the scrollbar box is the scrollbar box + // itself (when the bar is still visible) or its filler child + // (when the bar is hidden). If it is still visible, we keep + // it enabled, if it's hidden, we disable pointer events. + var box = bar.getBoundingClientRect(); + var elt = type == "vert" ? document.elementFromPoint(box.right - 1, (box.top + box.bottom) / 2) : document.elementFromPoint((box.right + box.left) / 2, box.bottom - 1); + if (elt != bar) { + bar.style.pointerEvents = "none"; + } else { + delay.set(1000, maybeDisable); + } + } + delay.set(1000, maybeDisable); + }; + NativeScrollbars.prototype.clear = function () { + var parent = this.horiz.parentNode; + parent.removeChild(this.horiz); + parent.removeChild(this.vert); + }; + var NullScrollbars = function () {}; + NullScrollbars.prototype.update = function () { + return { + bottom: 0, + right: 0 + }; + }; + NullScrollbars.prototype.setScrollLeft = function () {}; + NullScrollbars.prototype.setScrollTop = function () {}; + NullScrollbars.prototype.clear = function () {}; + function updateScrollbars(cm, measure) { + if (!measure) { + measure = measureForScrollbars(cm); + } + var startWidth = cm.display.barWidth, + startHeight = cm.display.barHeight; + updateScrollbarsInner(cm, measure); + for (var i = 0; i < 4 && startWidth != cm.display.barWidth || startHeight != cm.display.barHeight; i++) { + if (startWidth != cm.display.barWidth && cm.options.lineWrapping) { + updateHeightsInViewport(cm); + } + updateScrollbarsInner(cm, measureForScrollbars(cm)); + startWidth = cm.display.barWidth; + startHeight = cm.display.barHeight; + } + } + + // Re-synchronize the fake scrollbars with the actual size of the + // content. + function updateScrollbarsInner(cm, measure) { + var d = cm.display; + var sizes = d.scrollbars.update(measure); + d.sizer.style.paddingRight = (d.barWidth = sizes.right) + "px"; + d.sizer.style.paddingBottom = (d.barHeight = sizes.bottom) + "px"; + d.heightForcer.style.borderBottom = sizes.bottom + "px solid transparent"; + if (sizes.right && sizes.bottom) { + d.scrollbarFiller.style.display = "block"; + d.scrollbarFiller.style.height = sizes.bottom + "px"; + d.scrollbarFiller.style.width = sizes.right + "px"; + } else { + d.scrollbarFiller.style.display = ""; + } + if (sizes.bottom && cm.options.coverGutterNextToScrollbar && cm.options.fixedGutter) { + d.gutterFiller.style.display = "block"; + d.gutterFiller.style.height = sizes.bottom + "px"; + d.gutterFiller.style.width = measure.gutterWidth + "px"; + } else { + d.gutterFiller.style.display = ""; + } + } + var scrollbarModel = { + "native": NativeScrollbars, + "null": NullScrollbars + }; + function initScrollbars(cm) { + if (cm.display.scrollbars) { + cm.display.scrollbars.clear(); + if (cm.display.scrollbars.addClass) { + rmClass(cm.display.wrapper, cm.display.scrollbars.addClass); + } + } + cm.display.scrollbars = new scrollbarModel[cm.options.scrollbarStyle](function (node) { + cm.display.wrapper.insertBefore(node, cm.display.scrollbarFiller); + // Prevent clicks in the scrollbars from killing focus + on(node, "mousedown", function () { + if (cm.state.focused) { + setTimeout(function () { + return cm.display.input.focus(); + }, 0); + } + }); + node.setAttribute("cm-not-content", "true"); + }, function (pos, axis) { + if (axis == "horizontal") { + setScrollLeft(cm, pos); + } else { + updateScrollTop(cm, pos); + } + }, cm); + if (cm.display.scrollbars.addClass) { + addClass(cm.display.wrapper, cm.display.scrollbars.addClass); + } + } + + // Operations are used to wrap a series of changes to the editor + // state in such a way that each change won't have to update the + // cursor and display (which would be awkward, slow, and + // error-prone). Instead, display updates are batched and then all + // combined and executed at once. + + var nextOpId = 0; + // Start a new operation. + function startOperation(cm) { + cm.curOp = { + cm: cm, + viewChanged: false, + // Flag that indicates that lines might need to be redrawn + startHeight: cm.doc.height, + // Used to detect need to update scrollbar + forceUpdate: false, + // Used to force a redraw + updateInput: 0, + // Whether to reset the input textarea + typing: false, + // Whether this reset should be careful to leave existing text (for compositing) + changeObjs: null, + // Accumulated changes, for firing change events + cursorActivityHandlers: null, + // Set of handlers to fire cursorActivity on + cursorActivityCalled: 0, + // Tracks which cursorActivity handlers have been called already + selectionChanged: false, + // Whether the selection needs to be redrawn + updateMaxLine: false, + // Set when the widest line needs to be determined anew + scrollLeft: null, + scrollTop: null, + // Intermediate scroll position, not pushed to DOM yet + scrollToPos: null, + // Used to scroll to a specific position + focus: false, + id: ++nextOpId, + // Unique ID + markArrays: null // Used by addMarkedSpan + }; + pushOperation(cm.curOp); + } + + // Finish an operation, updating the display and signalling delayed events + function endOperation(cm) { + var op = cm.curOp; + if (op) { + finishOperation(op, function (group) { + for (var i = 0; i < group.ops.length; i++) { + group.ops[i].cm.curOp = null; + } + endOperations(group); + }); + } + } + + // The DOM updates done when an operation finishes are batched so + // that the minimum number of relayouts are required. + function endOperations(group) { + var ops = group.ops; + for (var i = 0; i < ops.length; i++) + // Read DOM + { + endOperation_R1(ops[i]); + } + for (var i$1 = 0; i$1 < ops.length; i$1++) + // Write DOM (maybe) + { + endOperation_W1(ops[i$1]); + } + for (var i$2 = 0; i$2 < ops.length; i$2++) + // Read DOM + { + endOperation_R2(ops[i$2]); + } + for (var i$3 = 0; i$3 < ops.length; i$3++) + // Write DOM (maybe) + { + endOperation_W2(ops[i$3]); + } + for (var i$4 = 0; i$4 < ops.length; i$4++) + // Read DOM + { + endOperation_finish(ops[i$4]); + } + } + function endOperation_R1(op) { + var cm = op.cm, + display = cm.display; + maybeClipScrollbars(cm); + if (op.updateMaxLine) { + findMaxLine(cm); + } + op.mustUpdate = op.viewChanged || op.forceUpdate || op.scrollTop != null || op.scrollToPos && (op.scrollToPos.from.line < display.viewFrom || op.scrollToPos.to.line >= display.viewTo) || display.maxLineChanged && cm.options.lineWrapping; + op.update = op.mustUpdate && new DisplayUpdate(cm, op.mustUpdate && { + top: op.scrollTop, + ensure: op.scrollToPos + }, op.forceUpdate); + } + function endOperation_W1(op) { + op.updatedDisplay = op.mustUpdate && updateDisplayIfNeeded(op.cm, op.update); + } + function endOperation_R2(op) { + var cm = op.cm, + display = cm.display; + if (op.updatedDisplay) { + updateHeightsInViewport(cm); + } + op.barMeasure = measureForScrollbars(cm); + + // If the max line changed since it was last measured, measure it, + // and ensure the document's width matches it. + // updateDisplay_W2 will use these properties to do the actual resizing + if (display.maxLineChanged && !cm.options.lineWrapping) { + op.adjustWidthTo = measureChar(cm, display.maxLine, display.maxLine.text.length).left + 3; + cm.display.sizerWidth = op.adjustWidthTo; + op.barMeasure.scrollWidth = Math.max(display.scroller.clientWidth, display.sizer.offsetLeft + op.adjustWidthTo + scrollGap(cm) + cm.display.barWidth); + op.maxScrollLeft = Math.max(0, display.sizer.offsetLeft + op.adjustWidthTo - displayWidth(cm)); + } + if (op.updatedDisplay || op.selectionChanged) { + op.preparedSelection = display.input.prepareSelection(); + } + } + function endOperation_W2(op) { + var cm = op.cm; + if (op.adjustWidthTo != null) { + cm.display.sizer.style.minWidth = op.adjustWidthTo + "px"; + if (op.maxScrollLeft < cm.doc.scrollLeft) { + setScrollLeft(cm, Math.min(cm.display.scroller.scrollLeft, op.maxScrollLeft), true); + } + cm.display.maxLineChanged = false; + } + var takeFocus = op.focus && op.focus == activeElt(); + if (op.preparedSelection) { + cm.display.input.showSelection(op.preparedSelection, takeFocus); + } + if (op.updatedDisplay || op.startHeight != cm.doc.height) { + updateScrollbars(cm, op.barMeasure); + } + if (op.updatedDisplay) { + setDocumentHeight(cm, op.barMeasure); + } + if (op.selectionChanged) { + restartBlink(cm); + } + if (cm.state.focused && op.updateInput) { + cm.display.input.reset(op.typing); + } + if (takeFocus) { + ensureFocus(op.cm); + } + } + function endOperation_finish(op) { + var cm = op.cm, + display = cm.display, + doc = cm.doc; + if (op.updatedDisplay) { + postUpdateDisplay(cm, op.update); + } + + // Abort mouse wheel delta measurement, when scrolling explicitly + if (display.wheelStartX != null && (op.scrollTop != null || op.scrollLeft != null || op.scrollToPos)) { + display.wheelStartX = display.wheelStartY = null; + } + + // Propagate the scroll position to the actual DOM scroller + if (op.scrollTop != null) { + setScrollTop(cm, op.scrollTop, op.forceScroll); + } + if (op.scrollLeft != null) { + setScrollLeft(cm, op.scrollLeft, true, true); + } + // If we need to scroll a specific position into view, do so. + if (op.scrollToPos) { + var rect = scrollPosIntoView(cm, clipPos(doc, op.scrollToPos.from), clipPos(doc, op.scrollToPos.to), op.scrollToPos.margin); + maybeScrollWindow(cm, rect); + } + + // Fire events for markers that are hidden/unidden by editing or + // undoing + var hidden = op.maybeHiddenMarkers, + unhidden = op.maybeUnhiddenMarkers; + if (hidden) { + for (var i = 0; i < hidden.length; ++i) { + if (!hidden[i].lines.length) { + signal(hidden[i], "hide"); + } + } + } + if (unhidden) { + for (var i$1 = 0; i$1 < unhidden.length; ++i$1) { + if (unhidden[i$1].lines.length) { + signal(unhidden[i$1], "unhide"); + } + } + } + if (display.wrapper.offsetHeight) { + doc.scrollTop = cm.display.scroller.scrollTop; + } + + // Fire change events, and delayed event handlers + if (op.changeObjs) { + signal(cm, "changes", cm, op.changeObjs); + } + if (op.update) { + op.update.finish(); + } + } + + // Run the given function in an operation + function runInOp(cm, f) { + if (cm.curOp) { + return f(); + } + startOperation(cm); + try { + return f(); + } finally { + endOperation(cm); + } + } + // Wraps a function in an operation. Returns the wrapped function. + function operation(cm, f) { + return function () { + if (cm.curOp) { + return f.apply(cm, arguments); + } + startOperation(cm); + try { + return f.apply(cm, arguments); + } finally { + endOperation(cm); + } + }; + } + // Used to add methods to editor and doc instances, wrapping them in + // operations. + function methodOp(f) { + return function () { + if (this.curOp) { + return f.apply(this, arguments); + } + startOperation(this); + try { + return f.apply(this, arguments); + } finally { + endOperation(this); + } + }; + } + function docMethodOp(f) { + return function () { + var cm = this.cm; + if (!cm || cm.curOp) { + return f.apply(this, arguments); + } + startOperation(cm); + try { + return f.apply(this, arguments); + } finally { + endOperation(cm); + } + }; + } + + // HIGHLIGHT WORKER + + function startWorker(cm, time) { + if (cm.doc.highlightFrontier < cm.display.viewTo) { + cm.state.highlight.set(time, bind(highlightWorker, cm)); + } + } + function highlightWorker(cm) { + var doc = cm.doc; + if (doc.highlightFrontier >= cm.display.viewTo) { + return; + } + var end = +new Date() + cm.options.workTime; + var context = getContextBefore(cm, doc.highlightFrontier); + var changedLines = []; + doc.iter(context.line, Math.min(doc.first + doc.size, cm.display.viewTo + 500), function (line) { + if (context.line >= cm.display.viewFrom) { + // Visible + var oldStyles = line.styles; + var resetState = line.text.length > cm.options.maxHighlightLength ? copyState(doc.mode, context.state) : null; + var highlighted = highlightLine(cm, line, context, true); + if (resetState) { + context.state = resetState; + } + line.styles = highlighted.styles; + var oldCls = line.styleClasses, + newCls = highlighted.classes; + if (newCls) { + line.styleClasses = newCls; + } else if (oldCls) { + line.styleClasses = null; + } + var ischange = !oldStyles || oldStyles.length != line.styles.length || oldCls != newCls && (!oldCls || !newCls || oldCls.bgClass != newCls.bgClass || oldCls.textClass != newCls.textClass); + for (var i = 0; !ischange && i < oldStyles.length; ++i) { + ischange = oldStyles[i] != line.styles[i]; + } + if (ischange) { + changedLines.push(context.line); + } + line.stateAfter = context.save(); + context.nextLine(); + } else { + if (line.text.length <= cm.options.maxHighlightLength) { + processLine(cm, line.text, context); + } + line.stateAfter = context.line % 5 == 0 ? context.save() : null; + context.nextLine(); + } + if (+new Date() > end) { + startWorker(cm, cm.options.workDelay); + return true; + } + }); + doc.highlightFrontier = context.line; + doc.modeFrontier = Math.max(doc.modeFrontier, context.line); + if (changedLines.length) { + runInOp(cm, function () { + for (var i = 0; i < changedLines.length; i++) { + regLineChange(cm, changedLines[i], "text"); + } + }); + } + } + + // DISPLAY DRAWING + + var DisplayUpdate = function (cm, viewport, force) { + var display = cm.display; + this.viewport = viewport; + // Store some values that we'll need later (but don't want to force a relayout for) + this.visible = visibleLines(display, cm.doc, viewport); + this.editorIsHidden = !display.wrapper.offsetWidth; + this.wrapperHeight = display.wrapper.clientHeight; + this.wrapperWidth = display.wrapper.clientWidth; + this.oldDisplayWidth = displayWidth(cm); + this.force = force; + this.dims = getDimensions(cm); + this.events = []; + }; + DisplayUpdate.prototype.signal = function (emitter, type) { + if (hasHandler(emitter, type)) { + this.events.push(arguments); + } + }; + DisplayUpdate.prototype.finish = function () { + for (var i = 0; i < this.events.length; i++) { + signal.apply(null, this.events[i]); + } + }; + function maybeClipScrollbars(cm) { + var display = cm.display; + if (!display.scrollbarsClipped && display.scroller.offsetWidth) { + display.nativeBarWidth = display.scroller.offsetWidth - display.scroller.clientWidth; + display.heightForcer.style.height = scrollGap(cm) + "px"; + display.sizer.style.marginBottom = -display.nativeBarWidth + "px"; + display.sizer.style.borderRightWidth = scrollGap(cm) + "px"; + display.scrollbarsClipped = true; + } + } + function selectionSnapshot(cm) { + if (cm.hasFocus()) { + return null; + } + var active = activeElt(); + if (!active || !contains(cm.display.lineDiv, active)) { + return null; + } + var result = { + activeElt: active + }; + if (window.getSelection) { + var sel = window.getSelection(); + if (sel.anchorNode && sel.extend && contains(cm.display.lineDiv, sel.anchorNode)) { + result.anchorNode = sel.anchorNode; + result.anchorOffset = sel.anchorOffset; + result.focusNode = sel.focusNode; + result.focusOffset = sel.focusOffset; + } + } + return result; + } + function restoreSelection(snapshot) { + if (!snapshot || !snapshot.activeElt || snapshot.activeElt == activeElt()) { + return; + } + snapshot.activeElt.focus(); + if (!/^(INPUT|TEXTAREA)$/.test(snapshot.activeElt.nodeName) && snapshot.anchorNode && contains(document.body, snapshot.anchorNode) && contains(document.body, snapshot.focusNode)) { + var sel = window.getSelection(), + range = document.createRange(); + range.setEnd(snapshot.anchorNode, snapshot.anchorOffset); + range.collapse(false); + sel.removeAllRanges(); + sel.addRange(range); + sel.extend(snapshot.focusNode, snapshot.focusOffset); + } + } + + // Does the actual updating of the line display. Bails out + // (returning false) when there is nothing to be done and forced is + // false. + function updateDisplayIfNeeded(cm, update) { + var display = cm.display, + doc = cm.doc; + if (update.editorIsHidden) { + resetView(cm); + return false; + } + + // Bail out if the visible area is already rendered and nothing changed. + if (!update.force && update.visible.from >= display.viewFrom && update.visible.to <= display.viewTo && (display.updateLineNumbers == null || display.updateLineNumbers >= display.viewTo) && display.renderedView == display.view && countDirtyView(cm) == 0) { + return false; + } + if (maybeUpdateLineNumberWidth(cm)) { + resetView(cm); + update.dims = getDimensions(cm); + } + + // Compute a suitable new viewport (from & to) + var end = doc.first + doc.size; + var from = Math.max(update.visible.from - cm.options.viewportMargin, doc.first); + var to = Math.min(end, update.visible.to + cm.options.viewportMargin); + if (display.viewFrom < from && from - display.viewFrom < 20) { + from = Math.max(doc.first, display.viewFrom); + } + if (display.viewTo > to && display.viewTo - to < 20) { + to = Math.min(end, display.viewTo); + } + if (sawCollapsedSpans) { + from = visualLineNo(cm.doc, from); + to = visualLineEndNo(cm.doc, to); + } + var different = from != display.viewFrom || to != display.viewTo || display.lastWrapHeight != update.wrapperHeight || display.lastWrapWidth != update.wrapperWidth; + adjustView(cm, from, to); + display.viewOffset = heightAtLine(getLine(cm.doc, display.viewFrom)); + // Position the mover div to align with the current scroll position + cm.display.mover.style.top = display.viewOffset + "px"; + var toUpdate = countDirtyView(cm); + if (!different && toUpdate == 0 && !update.force && display.renderedView == display.view && (display.updateLineNumbers == null || display.updateLineNumbers >= display.viewTo)) { + return false; + } + + // For big changes, we hide the enclosing element during the + // update, since that speeds up the operations on most browsers. + var selSnapshot = selectionSnapshot(cm); + if (toUpdate > 4) { + display.lineDiv.style.display = "none"; + } + patchDisplay(cm, display.updateLineNumbers, update.dims); + if (toUpdate > 4) { + display.lineDiv.style.display = ""; + } + display.renderedView = display.view; + // There might have been a widget with a focused element that got + // hidden or updated, if so re-focus it. + restoreSelection(selSnapshot); + + // Prevent selection and cursors from interfering with the scroll + // width and height. + removeChildren(display.cursorDiv); + removeChildren(display.selectionDiv); + display.gutters.style.height = display.sizer.style.minHeight = 0; + if (different) { + display.lastWrapHeight = update.wrapperHeight; + display.lastWrapWidth = update.wrapperWidth; + startWorker(cm, 400); + } + display.updateLineNumbers = null; + return true; + } + function postUpdateDisplay(cm, update) { + var viewport = update.viewport; + for (var first = true;; first = false) { + if (!first || !cm.options.lineWrapping || update.oldDisplayWidth == displayWidth(cm)) { + // Clip forced viewport to actual scrollable area. + if (viewport && viewport.top != null) { + viewport = { + top: Math.min(cm.doc.height + paddingVert(cm.display) - displayHeight(cm), viewport.top) + }; + } + // Updated line heights might result in the drawn area not + // actually covering the viewport. Keep looping until it does. + update.visible = visibleLines(cm.display, cm.doc, viewport); + if (update.visible.from >= cm.display.viewFrom && update.visible.to <= cm.display.viewTo) { + break; + } + } else if (first) { + update.visible = visibleLines(cm.display, cm.doc, viewport); + } + if (!updateDisplayIfNeeded(cm, update)) { + break; + } + updateHeightsInViewport(cm); + var barMeasure = measureForScrollbars(cm); + updateSelection(cm); + updateScrollbars(cm, barMeasure); + setDocumentHeight(cm, barMeasure); + update.force = false; + } + update.signal(cm, "update", cm); + if (cm.display.viewFrom != cm.display.reportedViewFrom || cm.display.viewTo != cm.display.reportedViewTo) { + update.signal(cm, "viewportChange", cm, cm.display.viewFrom, cm.display.viewTo); + cm.display.reportedViewFrom = cm.display.viewFrom; + cm.display.reportedViewTo = cm.display.viewTo; + } + } + function updateDisplaySimple(cm, viewport) { + var update = new DisplayUpdate(cm, viewport); + if (updateDisplayIfNeeded(cm, update)) { + updateHeightsInViewport(cm); + postUpdateDisplay(cm, update); + var barMeasure = measureForScrollbars(cm); + updateSelection(cm); + updateScrollbars(cm, barMeasure); + setDocumentHeight(cm, barMeasure); + update.finish(); + } + } + + // Sync the actual display DOM structure with display.view, removing + // nodes for lines that are no longer in view, and creating the ones + // that are not there yet, and updating the ones that are out of + // date. + function patchDisplay(cm, updateNumbersFrom, dims) { + var display = cm.display, + lineNumbers = cm.options.lineNumbers; + var container = display.lineDiv, + cur = container.firstChild; + function rm(node) { + var next = node.nextSibling; + // Works around a throw-scroll bug in OS X Webkit + if (webkit && mac && cm.display.currentWheelTarget == node) { + node.style.display = "none"; + } else { + node.parentNode.removeChild(node); + } + return next; + } + var view = display.view, + lineN = display.viewFrom; + // Loop over the elements in the view, syncing cur (the DOM nodes + // in display.lineDiv) with the view as we go. + for (var i = 0; i < view.length; i++) { + var lineView = view[i]; + if (lineView.hidden) ;else if (!lineView.node || lineView.node.parentNode != container) { + // Not drawn yet + var node = buildLineElement(cm, lineView, lineN, dims); + container.insertBefore(node, cur); + } else { + // Already drawn + while (cur != lineView.node) { + cur = rm(cur); + } + var updateNumber = lineNumbers && updateNumbersFrom != null && updateNumbersFrom <= lineN && lineView.lineNumber; + if (lineView.changes) { + if (indexOf(lineView.changes, "gutter") > -1) { + updateNumber = false; + } + updateLineForChanges(cm, lineView, lineN, dims); + } + if (updateNumber) { + removeChildren(lineView.lineNumber); + lineView.lineNumber.appendChild(document.createTextNode(lineNumberFor(cm.options, lineN))); + } + cur = lineView.node.nextSibling; + } + lineN += lineView.size; + } + while (cur) { + cur = rm(cur); + } + } + function updateGutterSpace(display) { + var width = display.gutters.offsetWidth; + display.sizer.style.marginLeft = width + "px"; + // Send an event to consumers responding to changes in gutter width. + signalLater(display, "gutterChanged", display); + } + function setDocumentHeight(cm, measure) { + cm.display.sizer.style.minHeight = measure.docHeight + "px"; + cm.display.heightForcer.style.top = measure.docHeight + "px"; + cm.display.gutters.style.height = measure.docHeight + cm.display.barHeight + scrollGap(cm) + "px"; + } + + // Re-align line numbers and gutter marks to compensate for + // horizontal scrolling. + function alignHorizontally(cm) { + var display = cm.display, + view = display.view; + if (!display.alignWidgets && (!display.gutters.firstChild || !cm.options.fixedGutter)) { + return; + } + var comp = compensateForHScroll(display) - display.scroller.scrollLeft + cm.doc.scrollLeft; + var gutterW = display.gutters.offsetWidth, + left = comp + "px"; + for (var i = 0; i < view.length; i++) { + if (!view[i].hidden) { + if (cm.options.fixedGutter) { + if (view[i].gutter) { + view[i].gutter.style.left = left; + } + if (view[i].gutterBackground) { + view[i].gutterBackground.style.left = left; + } + } + var align = view[i].alignable; + if (align) { + for (var j = 0; j < align.length; j++) { + align[j].style.left = left; + } + } + } + } + if (cm.options.fixedGutter) { + display.gutters.style.left = comp + gutterW + "px"; + } + } + + // Used to ensure that the line number gutter is still the right + // size for the current document size. Returns true when an update + // is needed. + function maybeUpdateLineNumberWidth(cm) { + if (!cm.options.lineNumbers) { + return false; + } + var doc = cm.doc, + last = lineNumberFor(cm.options, doc.first + doc.size - 1), + display = cm.display; + if (last.length != display.lineNumChars) { + var test = display.measure.appendChild(elt("div", [elt("div", last)], "CodeMirror-linenumber CodeMirror-gutter-elt")); + var innerW = test.firstChild.offsetWidth, + padding = test.offsetWidth - innerW; + display.lineGutter.style.width = ""; + display.lineNumInnerWidth = Math.max(innerW, display.lineGutter.offsetWidth - padding) + 1; + display.lineNumWidth = display.lineNumInnerWidth + padding; + display.lineNumChars = display.lineNumInnerWidth ? last.length : -1; + display.lineGutter.style.width = display.lineNumWidth + "px"; + updateGutterSpace(cm.display); + return true; + } + return false; + } + function getGutters(gutters, lineNumbers) { + var result = [], + sawLineNumbers = false; + for (var i = 0; i < gutters.length; i++) { + var name = gutters[i], + style = null; + if (typeof name != "string") { + style = name.style; + name = name.className; + } + if (name == "CodeMirror-linenumbers") { + if (!lineNumbers) { + continue; + } else { + sawLineNumbers = true; + } + } + result.push({ + className: name, + style: style + }); + } + if (lineNumbers && !sawLineNumbers) { + result.push({ + className: "CodeMirror-linenumbers", + style: null + }); + } + return result; + } + + // Rebuild the gutter elements, ensure the margin to the left of the + // code matches their width. + function renderGutters(display) { + var gutters = display.gutters, + specs = display.gutterSpecs; + removeChildren(gutters); + display.lineGutter = null; + for (var i = 0; i < specs.length; ++i) { + var ref = specs[i]; + var className = ref.className; + var style = ref.style; + var gElt = gutters.appendChild(elt("div", null, "CodeMirror-gutter " + className)); + if (style) { + gElt.style.cssText = style; + } + if (className == "CodeMirror-linenumbers") { + display.lineGutter = gElt; + gElt.style.width = (display.lineNumWidth || 1) + "px"; + } + } + gutters.style.display = specs.length ? "" : "none"; + updateGutterSpace(display); + } + function updateGutters(cm) { + renderGutters(cm.display); + regChange(cm); + alignHorizontally(cm); + } + + // The display handles the DOM integration, both for input reading + // and content drawing. It holds references to DOM nodes and + // display-related state. + + function Display(place, doc, input, options) { + var d = this; + this.input = input; + + // Covers bottom-right square when both scrollbars are present. + d.scrollbarFiller = elt("div", null, "CodeMirror-scrollbar-filler"); + d.scrollbarFiller.setAttribute("cm-not-content", "true"); + // Covers bottom of gutter when coverGutterNextToScrollbar is on + // and h scrollbar is present. + d.gutterFiller = elt("div", null, "CodeMirror-gutter-filler"); + d.gutterFiller.setAttribute("cm-not-content", "true"); + // Will contain the actual code, positioned to cover the viewport. + d.lineDiv = eltP("div", null, "CodeMirror-code"); + // Elements are added to these to represent selection and cursors. + d.selectionDiv = elt("div", null, null, "position: relative; z-index: 1"); + d.cursorDiv = elt("div", null, "CodeMirror-cursors"); + // A visibility: hidden element used to find the size of things. + d.measure = elt("div", null, "CodeMirror-measure"); + // When lines outside of the viewport are measured, they are drawn in this. + d.lineMeasure = elt("div", null, "CodeMirror-measure"); + // Wraps everything that needs to exist inside the vertically-padded coordinate system + d.lineSpace = eltP("div", [d.measure, d.lineMeasure, d.selectionDiv, d.cursorDiv, d.lineDiv], null, "position: relative; outline: none"); + var lines = eltP("div", [d.lineSpace], "CodeMirror-lines"); + // Moved around its parent to cover visible view. + d.mover = elt("div", [lines], null, "position: relative"); + // Set to the height of the document, allowing scrolling. + d.sizer = elt("div", [d.mover], "CodeMirror-sizer"); + d.sizerWidth = null; + // Behavior of elts with overflow: auto and padding is + // inconsistent across browsers. This is used to ensure the + // scrollable area is big enough. + d.heightForcer = elt("div", null, null, "position: absolute; height: " + scrollerGap + "px; width: 1px;"); + // Will contain the gutters, if any. + d.gutters = elt("div", null, "CodeMirror-gutters"); + d.lineGutter = null; + // Actual scrollable element. + d.scroller = elt("div", [d.sizer, d.heightForcer, d.gutters], "CodeMirror-scroll"); + d.scroller.setAttribute("tabIndex", "-1"); + // The element in which the editor lives. + d.wrapper = elt("div", [d.scrollbarFiller, d.gutterFiller, d.scroller], "CodeMirror"); + + // This attribute is respected by automatic translation systems such as Google Translate, + // and may also be respected by tools used by human translators. + d.wrapper.setAttribute('translate', 'no'); + + // Work around IE7 z-index bug (not perfect, hence IE7 not really being supported) + if (ie && ie_version < 8) { + d.gutters.style.zIndex = -1; + d.scroller.style.paddingRight = 0; + } + if (!webkit && !(gecko && mobile)) { + d.scroller.draggable = true; + } + if (place) { + if (place.appendChild) { + place.appendChild(d.wrapper); + } else { + place(d.wrapper); + } + } + + // Current rendered range (may be bigger than the view window). + d.viewFrom = d.viewTo = doc.first; + d.reportedViewFrom = d.reportedViewTo = doc.first; + // Information about the rendered lines. + d.view = []; + d.renderedView = null; + // Holds info about a single rendered line when it was rendered + // for measurement, while not in view. + d.externalMeasured = null; + // Empty space (in pixels) above the view + d.viewOffset = 0; + d.lastWrapHeight = d.lastWrapWidth = 0; + d.updateLineNumbers = null; + d.nativeBarWidth = d.barHeight = d.barWidth = 0; + d.scrollbarsClipped = false; + + // Used to only resize the line number gutter when necessary (when + // the amount of lines crosses a boundary that makes its width change) + d.lineNumWidth = d.lineNumInnerWidth = d.lineNumChars = null; + // Set to true when a non-horizontal-scrolling line widget is + // added. As an optimization, line widget aligning is skipped when + // this is false. + d.alignWidgets = false; + d.cachedCharWidth = d.cachedTextHeight = d.cachedPaddingH = null; + + // Tracks the maximum line length so that the horizontal scrollbar + // can be kept static when scrolling. + d.maxLine = null; + d.maxLineLength = 0; + d.maxLineChanged = false; + + // Used for measuring wheel scrolling granularity + d.wheelDX = d.wheelDY = d.wheelStartX = d.wheelStartY = null; + + // True when shift is held down. + d.shift = false; + + // Used to track whether anything happened since the context menu + // was opened. + d.selForContextMenu = null; + d.activeTouch = null; + d.gutterSpecs = getGutters(options.gutters, options.lineNumbers); + renderGutters(d); + input.init(d); + } + + // Since the delta values reported on mouse wheel events are + // unstandardized between browsers and even browser versions, and + // generally horribly unpredictable, this code starts by measuring + // the scroll effect that the first few mouse wheel events have, + // and, from that, detects the way it can convert deltas to pixel + // offsets afterwards. + // + // The reason we want to know the amount a wheel event will scroll + // is that it gives us a chance to update the display before the + // actual scrolling happens, reducing flickering. + + var wheelSamples = 0, + wheelPixelsPerUnit = null; + // Fill in a browser-detected starting value on browsers where we + // know one. These don't have to be accurate -- the result of them + // being wrong would just be a slight flicker on the first wheel + // scroll (if it is large enough). + if (ie) { + wheelPixelsPerUnit = -.53; + } else if (gecko) { + wheelPixelsPerUnit = 15; + } else if (chrome) { + wheelPixelsPerUnit = -.7; + } else if (safari) { + wheelPixelsPerUnit = -1 / 3; + } + function wheelEventDelta(e) { + var dx = e.wheelDeltaX, + dy = e.wheelDeltaY; + if (dx == null && e.detail && e.axis == e.HORIZONTAL_AXIS) { + dx = e.detail; + } + if (dy == null && e.detail && e.axis == e.VERTICAL_AXIS) { + dy = e.detail; + } else if (dy == null) { + dy = e.wheelDelta; + } + return { + x: dx, + y: dy + }; + } + function wheelEventPixels(e) { + var delta = wheelEventDelta(e); + delta.x *= wheelPixelsPerUnit; + delta.y *= wheelPixelsPerUnit; + return delta; + } + function onScrollWheel(cm, e) { + var delta = wheelEventDelta(e), + dx = delta.x, + dy = delta.y; + var pixelsPerUnit = wheelPixelsPerUnit; + if (e.deltaMode === 0) { + dx = e.deltaX; + dy = e.deltaY; + pixelsPerUnit = 1; + } + var display = cm.display, + scroll = display.scroller; + // Quit if there's nothing to scroll here + var canScrollX = scroll.scrollWidth > scroll.clientWidth; + var canScrollY = scroll.scrollHeight > scroll.clientHeight; + if (!(dx && canScrollX || dy && canScrollY)) { + return; + } + + // Webkit browsers on OS X abort momentum scrolls when the target + // of the scroll event is removed from the scrollable element. + // This hack (see related code in patchDisplay) makes sure the + // element is kept around. + if (dy && mac && webkit) { + outer: for (var cur = e.target, view = display.view; cur != scroll; cur = cur.parentNode) { + for (var i = 0; i < view.length; i++) { + if (view[i].node == cur) { + cm.display.currentWheelTarget = cur; + break outer; + } + } + } + } + + // On some browsers, horizontal scrolling will cause redraws to + // happen before the gutter has been realigned, causing it to + // wriggle around in a most unseemly way. When we have an + // estimated pixels/delta value, we just handle horizontal + // scrolling entirely here. It'll be slightly off from native, but + // better than glitching out. + if (dx && !gecko && !presto && pixelsPerUnit != null) { + if (dy && canScrollY) { + updateScrollTop(cm, Math.max(0, scroll.scrollTop + dy * pixelsPerUnit)); + } + setScrollLeft(cm, Math.max(0, scroll.scrollLeft + dx * pixelsPerUnit)); + // Only prevent default scrolling if vertical scrolling is + // actually possible. Otherwise, it causes vertical scroll + // jitter on OSX trackpads when deltaX is small and deltaY + // is large (issue #3579) + if (!dy || dy && canScrollY) { + e_preventDefault(e); + } + display.wheelStartX = null; // Abort measurement, if in progress + return; + } + + // 'Project' the visible viewport to cover the area that is being + // scrolled into view (if we know enough to estimate it). + if (dy && pixelsPerUnit != null) { + var pixels = dy * pixelsPerUnit; + var top = cm.doc.scrollTop, + bot = top + display.wrapper.clientHeight; + if (pixels < 0) { + top = Math.max(0, top + pixels - 50); + } else { + bot = Math.min(cm.doc.height, bot + pixels + 50); + } + updateDisplaySimple(cm, { + top: top, + bottom: bot + }); + } + if (wheelSamples < 20 && e.deltaMode !== 0) { + if (display.wheelStartX == null) { + display.wheelStartX = scroll.scrollLeft; + display.wheelStartY = scroll.scrollTop; + display.wheelDX = dx; + display.wheelDY = dy; + setTimeout(function () { + if (display.wheelStartX == null) { + return; + } + var movedX = scroll.scrollLeft - display.wheelStartX; + var movedY = scroll.scrollTop - display.wheelStartY; + var sample = movedY && display.wheelDY && movedY / display.wheelDY || movedX && display.wheelDX && movedX / display.wheelDX; + display.wheelStartX = display.wheelStartY = null; + if (!sample) { + return; + } + wheelPixelsPerUnit = (wheelPixelsPerUnit * wheelSamples + sample) / (wheelSamples + 1); + ++wheelSamples; + }, 200); + } else { + display.wheelDX += dx; + display.wheelDY += dy; + } + } + } + + // Selection objects are immutable. A new one is created every time + // the selection changes. A selection is one or more non-overlapping + // (and non-touching) ranges, sorted, and an integer that indicates + // which one is the primary selection (the one that's scrolled into + // view, that getCursor returns, etc). + var Selection = function (ranges, primIndex) { + this.ranges = ranges; + this.primIndex = primIndex; + }; + Selection.prototype.primary = function () { + return this.ranges[this.primIndex]; + }; + Selection.prototype.equals = function (other) { + if (other == this) { + return true; + } + if (other.primIndex != this.primIndex || other.ranges.length != this.ranges.length) { + return false; + } + for (var i = 0; i < this.ranges.length; i++) { + var here = this.ranges[i], + there = other.ranges[i]; + if (!equalCursorPos(here.anchor, there.anchor) || !equalCursorPos(here.head, there.head)) { + return false; + } + } + return true; + }; + Selection.prototype.deepCopy = function () { + var out = []; + for (var i = 0; i < this.ranges.length; i++) { + out[i] = new Range(copyPos(this.ranges[i].anchor), copyPos(this.ranges[i].head)); + } + return new Selection(out, this.primIndex); + }; + Selection.prototype.somethingSelected = function () { + for (var i = 0; i < this.ranges.length; i++) { + if (!this.ranges[i].empty()) { + return true; + } + } + return false; + }; + Selection.prototype.contains = function (pos, end) { + if (!end) { + end = pos; + } + for (var i = 0; i < this.ranges.length; i++) { + var range = this.ranges[i]; + if (cmp(end, range.from()) >= 0 && cmp(pos, range.to()) <= 0) { + return i; + } + } + return -1; + }; + var Range = function (anchor, head) { + this.anchor = anchor; + this.head = head; + }; + Range.prototype.from = function () { + return minPos(this.anchor, this.head); + }; + Range.prototype.to = function () { + return maxPos(this.anchor, this.head); + }; + Range.prototype.empty = function () { + return this.head.line == this.anchor.line && this.head.ch == this.anchor.ch; + }; + + // Take an unsorted, potentially overlapping set of ranges, and + // build a selection out of it. 'Consumes' ranges array (modifying + // it). + function normalizeSelection(cm, ranges, primIndex) { + var mayTouch = cm && cm.options.selectionsMayTouch; + var prim = ranges[primIndex]; + ranges.sort(function (a, b) { + return cmp(a.from(), b.from()); + }); + primIndex = indexOf(ranges, prim); + for (var i = 1; i < ranges.length; i++) { + var cur = ranges[i], + prev = ranges[i - 1]; + var diff = cmp(prev.to(), cur.from()); + if (mayTouch && !cur.empty() ? diff > 0 : diff >= 0) { + var from = minPos(prev.from(), cur.from()), + to = maxPos(prev.to(), cur.to()); + var inv = prev.empty() ? cur.from() == cur.head : prev.from() == prev.head; + if (i <= primIndex) { + --primIndex; + } + ranges.splice(--i, 2, new Range(inv ? to : from, inv ? from : to)); + } + } + return new Selection(ranges, primIndex); + } + function simpleSelection(anchor, head) { + return new Selection([new Range(anchor, head || anchor)], 0); + } + + // Compute the position of the end of a change (its 'to' property + // refers to the pre-change end). + function changeEnd(change) { + if (!change.text) { + return change.to; + } + return Pos(change.from.line + change.text.length - 1, lst(change.text).length + (change.text.length == 1 ? change.from.ch : 0)); + } + + // Adjust a position to refer to the post-change position of the + // same text, or the end of the change if the change covers it. + function adjustForChange(pos, change) { + if (cmp(pos, change.from) < 0) { + return pos; + } + if (cmp(pos, change.to) <= 0) { + return changeEnd(change); + } + var line = pos.line + change.text.length - (change.to.line - change.from.line) - 1, + ch = pos.ch; + if (pos.line == change.to.line) { + ch += changeEnd(change).ch - change.to.ch; + } + return Pos(line, ch); + } + function computeSelAfterChange(doc, change) { + var out = []; + for (var i = 0; i < doc.sel.ranges.length; i++) { + var range = doc.sel.ranges[i]; + out.push(new Range(adjustForChange(range.anchor, change), adjustForChange(range.head, change))); + } + return normalizeSelection(doc.cm, out, doc.sel.primIndex); + } + function offsetPos(pos, old, nw) { + if (pos.line == old.line) { + return Pos(nw.line, pos.ch - old.ch + nw.ch); + } else { + return Pos(nw.line + (pos.line - old.line), pos.ch); + } + } + + // Used by replaceSelections to allow moving the selection to the + // start or around the replaced test. Hint may be "start" or "around". + function computeReplacedSel(doc, changes, hint) { + var out = []; + var oldPrev = Pos(doc.first, 0), + newPrev = oldPrev; + for (var i = 0; i < changes.length; i++) { + var change = changes[i]; + var from = offsetPos(change.from, oldPrev, newPrev); + var to = offsetPos(changeEnd(change), oldPrev, newPrev); + oldPrev = change.to; + newPrev = to; + if (hint == "around") { + var range = doc.sel.ranges[i], + inv = cmp(range.head, range.anchor) < 0; + out[i] = new Range(inv ? to : from, inv ? from : to); + } else { + out[i] = new Range(from, from); + } + } + return new Selection(out, doc.sel.primIndex); + } + + // Used to get the editor into a consistent state again when options change. + + function loadMode(cm) { + cm.doc.mode = getMode(cm.options, cm.doc.modeOption); + resetModeState(cm); + } + function resetModeState(cm) { + cm.doc.iter(function (line) { + if (line.stateAfter) { + line.stateAfter = null; + } + if (line.styles) { + line.styles = null; + } + }); + cm.doc.modeFrontier = cm.doc.highlightFrontier = cm.doc.first; + startWorker(cm, 100); + cm.state.modeGen++; + if (cm.curOp) { + regChange(cm); + } + } + + // DOCUMENT DATA STRUCTURE + + // By default, updates that start and end at the beginning of a line + // are treated specially, in order to make the association of line + // widgets and marker elements with the text behave more intuitive. + function isWholeLineUpdate(doc, change) { + return change.from.ch == 0 && change.to.ch == 0 && lst(change.text) == "" && (!doc.cm || doc.cm.options.wholeLineUpdateBefore); + } + + // Perform a change on the document data structure. + function updateDoc(doc, change, markedSpans, estimateHeight) { + function spansFor(n) { + return markedSpans ? markedSpans[n] : null; + } + function update(line, text, spans) { + updateLine(line, text, spans, estimateHeight); + signalLater(line, "change", line, change); + } + function linesFor(start, end) { + var result = []; + for (var i = start; i < end; ++i) { + result.push(new Line(text[i], spansFor(i), estimateHeight)); + } + return result; + } + var from = change.from, + to = change.to, + text = change.text; + var firstLine = getLine(doc, from.line), + lastLine = getLine(doc, to.line); + var lastText = lst(text), + lastSpans = spansFor(text.length - 1), + nlines = to.line - from.line; + + // Adjust the line structure + if (change.full) { + doc.insert(0, linesFor(0, text.length)); + doc.remove(text.length, doc.size - text.length); + } else if (isWholeLineUpdate(doc, change)) { + // This is a whole-line replace. Treated specially to make + // sure line objects move the way they are supposed to. + var added = linesFor(0, text.length - 1); + update(lastLine, lastLine.text, lastSpans); + if (nlines) { + doc.remove(from.line, nlines); + } + if (added.length) { + doc.insert(from.line, added); + } + } else if (firstLine == lastLine) { + if (text.length == 1) { + update(firstLine, firstLine.text.slice(0, from.ch) + lastText + firstLine.text.slice(to.ch), lastSpans); + } else { + var added$1 = linesFor(1, text.length - 1); + added$1.push(new Line(lastText + firstLine.text.slice(to.ch), lastSpans, estimateHeight)); + update(firstLine, firstLine.text.slice(0, from.ch) + text[0], spansFor(0)); + doc.insert(from.line + 1, added$1); + } + } else if (text.length == 1) { + update(firstLine, firstLine.text.slice(0, from.ch) + text[0] + lastLine.text.slice(to.ch), spansFor(0)); + doc.remove(from.line + 1, nlines); + } else { + update(firstLine, firstLine.text.slice(0, from.ch) + text[0], spansFor(0)); + update(lastLine, lastText + lastLine.text.slice(to.ch), lastSpans); + var added$2 = linesFor(1, text.length - 1); + if (nlines > 1) { + doc.remove(from.line + 1, nlines - 1); + } + doc.insert(from.line + 1, added$2); + } + signalLater(doc, "change", doc, change); + } + + // Call f for all linked documents. + function linkedDocs(doc, f, sharedHistOnly) { + function propagate(doc, skip, sharedHist) { + if (doc.linked) { + for (var i = 0; i < doc.linked.length; ++i) { + var rel = doc.linked[i]; + if (rel.doc == skip) { + continue; + } + var shared = sharedHist && rel.sharedHist; + if (sharedHistOnly && !shared) { + continue; + } + f(rel.doc, shared); + propagate(rel.doc, doc, shared); + } + } + } + propagate(doc, null, true); + } + + // Attach a document to an editor. + function attachDoc(cm, doc) { + if (doc.cm) { + throw new Error("This document is already in use."); + } + cm.doc = doc; + doc.cm = cm; + estimateLineHeights(cm); + loadMode(cm); + setDirectionClass(cm); + cm.options.direction = doc.direction; + if (!cm.options.lineWrapping) { + findMaxLine(cm); + } + cm.options.mode = doc.modeOption; + regChange(cm); + } + function setDirectionClass(cm) { + (cm.doc.direction == "rtl" ? addClass : rmClass)(cm.display.lineDiv, "CodeMirror-rtl"); + } + function directionChanged(cm) { + runInOp(cm, function () { + setDirectionClass(cm); + regChange(cm); + }); + } + function History(prev) { + // Arrays of change events and selections. Doing something adds an + // event to done and clears undo. Undoing moves events from done + // to undone, redoing moves them in the other direction. + this.done = []; + this.undone = []; + this.undoDepth = prev ? prev.undoDepth : Infinity; + // Used to track when changes can be merged into a single undo + // event + this.lastModTime = this.lastSelTime = 0; + this.lastOp = this.lastSelOp = null; + this.lastOrigin = this.lastSelOrigin = null; + // Used by the isClean() method + this.generation = this.maxGeneration = prev ? prev.maxGeneration : 1; + } + + // Create a history change event from an updateDoc-style change + // object. + function historyChangeFromChange(doc, change) { + var histChange = { + from: copyPos(change.from), + to: changeEnd(change), + text: getBetween(doc, change.from, change.to) + }; + attachLocalSpans(doc, histChange, change.from.line, change.to.line + 1); + linkedDocs(doc, function (doc) { + return attachLocalSpans(doc, histChange, change.from.line, change.to.line + 1); + }, true); + return histChange; + } + + // Pop all selection events off the end of a history array. Stop at + // a change event. + function clearSelectionEvents(array) { + while (array.length) { + var last = lst(array); + if (last.ranges) { + array.pop(); + } else { + break; + } + } + } + + // Find the top change event in the history. Pop off selection + // events that are in the way. + function lastChangeEvent(hist, force) { + if (force) { + clearSelectionEvents(hist.done); + return lst(hist.done); + } else if (hist.done.length && !lst(hist.done).ranges) { + return lst(hist.done); + } else if (hist.done.length > 1 && !hist.done[hist.done.length - 2].ranges) { + hist.done.pop(); + return lst(hist.done); + } + } + + // Register a change in the history. Merges changes that are within + // a single operation, or are close together with an origin that + // allows merging (starting with "+") into a single event. + function addChangeToHistory(doc, change, selAfter, opId) { + var hist = doc.history; + hist.undone.length = 0; + var time = +new Date(), + cur; + var last; + if ((hist.lastOp == opId || hist.lastOrigin == change.origin && change.origin && (change.origin.charAt(0) == "+" && hist.lastModTime > time - (doc.cm ? doc.cm.options.historyEventDelay : 500) || change.origin.charAt(0) == "*")) && (cur = lastChangeEvent(hist, hist.lastOp == opId))) { + // Merge this change into the last event + last = lst(cur.changes); + if (cmp(change.from, change.to) == 0 && cmp(change.from, last.to) == 0) { + // Optimized case for simple insertion -- don't want to add + // new changesets for every character typed + last.to = changeEnd(change); + } else { + // Add new sub-event + cur.changes.push(historyChangeFromChange(doc, change)); + } + } else { + // Can not be merged, start a new event. + var before = lst(hist.done); + if (!before || !before.ranges) { + pushSelectionToHistory(doc.sel, hist.done); + } + cur = { + changes: [historyChangeFromChange(doc, change)], + generation: hist.generation + }; + hist.done.push(cur); + while (hist.done.length > hist.undoDepth) { + hist.done.shift(); + if (!hist.done[0].ranges) { + hist.done.shift(); + } + } + } + hist.done.push(selAfter); + hist.generation = ++hist.maxGeneration; + hist.lastModTime = hist.lastSelTime = time; + hist.lastOp = hist.lastSelOp = opId; + hist.lastOrigin = hist.lastSelOrigin = change.origin; + if (!last) { + signal(doc, "historyAdded"); + } + } + function selectionEventCanBeMerged(doc, origin, prev, sel) { + var ch = origin.charAt(0); + return ch == "*" || ch == "+" && prev.ranges.length == sel.ranges.length && prev.somethingSelected() == sel.somethingSelected() && new Date() - doc.history.lastSelTime <= (doc.cm ? doc.cm.options.historyEventDelay : 500); + } + + // Called whenever the selection changes, sets the new selection as + // the pending selection in the history, and pushes the old pending + // selection into the 'done' array when it was significantly + // different (in number of selected ranges, emptiness, or time). + function addSelectionToHistory(doc, sel, opId, options) { + var hist = doc.history, + origin = options && options.origin; + + // A new event is started when the previous origin does not match + // the current, or the origins don't allow matching. Origins + // starting with * are always merged, those starting with + are + // merged when similar and close together in time. + if (opId == hist.lastSelOp || origin && hist.lastSelOrigin == origin && (hist.lastModTime == hist.lastSelTime && hist.lastOrigin == origin || selectionEventCanBeMerged(doc, origin, lst(hist.done), sel))) { + hist.done[hist.done.length - 1] = sel; + } else { + pushSelectionToHistory(sel, hist.done); + } + hist.lastSelTime = +new Date(); + hist.lastSelOrigin = origin; + hist.lastSelOp = opId; + if (options && options.clearRedo !== false) { + clearSelectionEvents(hist.undone); + } + } + function pushSelectionToHistory(sel, dest) { + var top = lst(dest); + if (!(top && top.ranges && top.equals(sel))) { + dest.push(sel); + } + } + + // Used to store marked span information in the history. + function attachLocalSpans(doc, change, from, to) { + var existing = change["spans_" + doc.id], + n = 0; + doc.iter(Math.max(doc.first, from), Math.min(doc.first + doc.size, to), function (line) { + if (line.markedSpans) { + (existing || (existing = change["spans_" + doc.id] = {}))[n] = line.markedSpans; + } + ++n; + }); + } + + // When un/re-doing restores text containing marked spans, those + // that have been explicitly cleared should not be restored. + function removeClearedSpans(spans) { + if (!spans) { + return null; + } + var out; + for (var i = 0; i < spans.length; ++i) { + if (spans[i].marker.explicitlyCleared) { + if (!out) { + out = spans.slice(0, i); + } + } else if (out) { + out.push(spans[i]); + } + } + return !out ? spans : out.length ? out : null; + } + + // Retrieve and filter the old marked spans stored in a change event. + function getOldSpans(doc, change) { + var found = change["spans_" + doc.id]; + if (!found) { + return null; + } + var nw = []; + for (var i = 0; i < change.text.length; ++i) { + nw.push(removeClearedSpans(found[i])); + } + return nw; + } + + // Used for un/re-doing changes from the history. Combines the + // result of computing the existing spans with the set of spans that + // existed in the history (so that deleting around a span and then + // undoing brings back the span). + function mergeOldSpans(doc, change) { + var old = getOldSpans(doc, change); + var stretched = stretchSpansOverChange(doc, change); + if (!old) { + return stretched; + } + if (!stretched) { + return old; + } + for (var i = 0; i < old.length; ++i) { + var oldCur = old[i], + stretchCur = stretched[i]; + if (oldCur && stretchCur) { + spans: for (var j = 0; j < stretchCur.length; ++j) { + var span = stretchCur[j]; + for (var k = 0; k < oldCur.length; ++k) { + if (oldCur[k].marker == span.marker) { + continue spans; + } + } + oldCur.push(span); + } + } else if (stretchCur) { + old[i] = stretchCur; + } + } + return old; + } + + // Used both to provide a JSON-safe object in .getHistory, and, when + // detaching a document, to split the history in two + function copyHistoryArray(events, newGroup, instantiateSel) { + var copy = []; + for (var i = 0; i < events.length; ++i) { + var event = events[i]; + if (event.ranges) { + copy.push(instantiateSel ? Selection.prototype.deepCopy.call(event) : event); + continue; + } + var changes = event.changes, + newChanges = []; + copy.push({ + changes: newChanges + }); + for (var j = 0; j < changes.length; ++j) { + var change = changes[j], + m = void 0; + newChanges.push({ + from: change.from, + to: change.to, + text: change.text + }); + if (newGroup) { + for (var prop in change) { + if (m = prop.match(/^spans_(\d+)$/)) { + if (indexOf(newGroup, Number(m[1])) > -1) { + lst(newChanges)[prop] = change[prop]; + delete change[prop]; + } + } + } + } + } + } + return copy; + } + + // The 'scroll' parameter given to many of these indicated whether + // the new cursor position should be scrolled into view after + // modifying the selection. + + // If shift is held or the extend flag is set, extends a range to + // include a given position (and optionally a second position). + // Otherwise, simply returns the range between the given positions. + // Used for cursor motion and such. + function extendRange(range, head, other, extend) { + if (extend) { + var anchor = range.anchor; + if (other) { + var posBefore = cmp(head, anchor) < 0; + if (posBefore != cmp(other, anchor) < 0) { + anchor = head; + head = other; + } else if (posBefore != cmp(head, other) < 0) { + head = other; + } + } + return new Range(anchor, head); + } else { + return new Range(other || head, head); + } + } + + // Extend the primary selection range, discard the rest. + function extendSelection(doc, head, other, options, extend) { + if (extend == null) { + extend = doc.cm && (doc.cm.display.shift || doc.extend); + } + setSelection(doc, new Selection([extendRange(doc.sel.primary(), head, other, extend)], 0), options); + } + + // Extend all selections (pos is an array of selections with length + // equal the number of selections) + function extendSelections(doc, heads, options) { + var out = []; + var extend = doc.cm && (doc.cm.display.shift || doc.extend); + for (var i = 0; i < doc.sel.ranges.length; i++) { + out[i] = extendRange(doc.sel.ranges[i], heads[i], null, extend); + } + var newSel = normalizeSelection(doc.cm, out, doc.sel.primIndex); + setSelection(doc, newSel, options); + } + + // Updates a single range in the selection. + function replaceOneSelection(doc, i, range, options) { + var ranges = doc.sel.ranges.slice(0); + ranges[i] = range; + setSelection(doc, normalizeSelection(doc.cm, ranges, doc.sel.primIndex), options); + } + + // Reset the selection to a single range. + function setSimpleSelection(doc, anchor, head, options) { + setSelection(doc, simpleSelection(anchor, head), options); + } + + // Give beforeSelectionChange handlers a change to influence a + // selection update. + function filterSelectionChange(doc, sel, options) { + var obj = { + ranges: sel.ranges, + update: function (ranges) { + this.ranges = []; + for (var i = 0; i < ranges.length; i++) { + this.ranges[i] = new Range(clipPos(doc, ranges[i].anchor), clipPos(doc, ranges[i].head)); + } + }, + origin: options && options.origin + }; + signal(doc, "beforeSelectionChange", doc, obj); + if (doc.cm) { + signal(doc.cm, "beforeSelectionChange", doc.cm, obj); + } + if (obj.ranges != sel.ranges) { + return normalizeSelection(doc.cm, obj.ranges, obj.ranges.length - 1); + } else { + return sel; + } + } + function setSelectionReplaceHistory(doc, sel, options) { + var done = doc.history.done, + last = lst(done); + if (last && last.ranges) { + done[done.length - 1] = sel; + setSelectionNoUndo(doc, sel, options); + } else { + setSelection(doc, sel, options); + } + } + + // Set a new selection. + function setSelection(doc, sel, options) { + setSelectionNoUndo(doc, sel, options); + addSelectionToHistory(doc, doc.sel, doc.cm ? doc.cm.curOp.id : NaN, options); + } + function setSelectionNoUndo(doc, sel, options) { + if (hasHandler(doc, "beforeSelectionChange") || doc.cm && hasHandler(doc.cm, "beforeSelectionChange")) { + sel = filterSelectionChange(doc, sel, options); + } + var bias = options && options.bias || (cmp(sel.primary().head, doc.sel.primary().head) < 0 ? -1 : 1); + setSelectionInner(doc, skipAtomicInSelection(doc, sel, bias, true)); + if (!(options && options.scroll === false) && doc.cm && doc.cm.getOption("readOnly") != "nocursor") { + ensureCursorVisible(doc.cm); + } + } + function setSelectionInner(doc, sel) { + if (sel.equals(doc.sel)) { + return; + } + doc.sel = sel; + if (doc.cm) { + doc.cm.curOp.updateInput = 1; + doc.cm.curOp.selectionChanged = true; + signalCursorActivity(doc.cm); + } + signalLater(doc, "cursorActivity", doc); + } + + // Verify that the selection does not partially select any atomic + // marked ranges. + function reCheckSelection(doc) { + setSelectionInner(doc, skipAtomicInSelection(doc, doc.sel, null, false)); + } + + // Return a selection that does not partially select any atomic + // ranges. + function skipAtomicInSelection(doc, sel, bias, mayClear) { + var out; + for (var i = 0; i < sel.ranges.length; i++) { + var range = sel.ranges[i]; + var old = sel.ranges.length == doc.sel.ranges.length && doc.sel.ranges[i]; + var newAnchor = skipAtomic(doc, range.anchor, old && old.anchor, bias, mayClear); + var newHead = skipAtomic(doc, range.head, old && old.head, bias, mayClear); + if (out || newAnchor != range.anchor || newHead != range.head) { + if (!out) { + out = sel.ranges.slice(0, i); + } + out[i] = new Range(newAnchor, newHead); + } + } + return out ? normalizeSelection(doc.cm, out, sel.primIndex) : sel; + } + function skipAtomicInner(doc, pos, oldPos, dir, mayClear) { + var line = getLine(doc, pos.line); + if (line.markedSpans) { + for (var i = 0; i < line.markedSpans.length; ++i) { + var sp = line.markedSpans[i], + m = sp.marker; + + // Determine if we should prevent the cursor being placed to the left/right of an atomic marker + // Historically this was determined using the inclusiveLeft/Right option, but the new way to control it + // is with selectLeft/Right + var preventCursorLeft = "selectLeft" in m ? !m.selectLeft : m.inclusiveLeft; + var preventCursorRight = "selectRight" in m ? !m.selectRight : m.inclusiveRight; + if ((sp.from == null || (preventCursorLeft ? sp.from <= pos.ch : sp.from < pos.ch)) && (sp.to == null || (preventCursorRight ? sp.to >= pos.ch : sp.to > pos.ch))) { + if (mayClear) { + signal(m, "beforeCursorEnter"); + if (m.explicitlyCleared) { + if (!line.markedSpans) { + break; + } else { + --i; + continue; + } + } + } + if (!m.atomic) { + continue; + } + if (oldPos) { + var near = m.find(dir < 0 ? 1 : -1), + diff = void 0; + if (dir < 0 ? preventCursorRight : preventCursorLeft) { + near = movePos(doc, near, -dir, near && near.line == pos.line ? line : null); + } + if (near && near.line == pos.line && (diff = cmp(near, oldPos)) && (dir < 0 ? diff < 0 : diff > 0)) { + return skipAtomicInner(doc, near, pos, dir, mayClear); + } + } + var far = m.find(dir < 0 ? -1 : 1); + if (dir < 0 ? preventCursorLeft : preventCursorRight) { + far = movePos(doc, far, dir, far.line == pos.line ? line : null); + } + return far ? skipAtomicInner(doc, far, pos, dir, mayClear) : null; + } + } + } + return pos; + } + + // Ensure a given position is not inside an atomic range. + function skipAtomic(doc, pos, oldPos, bias, mayClear) { + var dir = bias || 1; + var found = skipAtomicInner(doc, pos, oldPos, dir, mayClear) || !mayClear && skipAtomicInner(doc, pos, oldPos, dir, true) || skipAtomicInner(doc, pos, oldPos, -dir, mayClear) || !mayClear && skipAtomicInner(doc, pos, oldPos, -dir, true); + if (!found) { + doc.cantEdit = true; + return Pos(doc.first, 0); + } + return found; + } + function movePos(doc, pos, dir, line) { + if (dir < 0 && pos.ch == 0) { + if (pos.line > doc.first) { + return clipPos(doc, Pos(pos.line - 1)); + } else { + return null; + } + } else if (dir > 0 && pos.ch == (line || getLine(doc, pos.line)).text.length) { + if (pos.line < doc.first + doc.size - 1) { + return Pos(pos.line + 1, 0); + } else { + return null; + } + } else { + return new Pos(pos.line, pos.ch + dir); + } + } + function selectAll(cm) { + cm.setSelection(Pos(cm.firstLine(), 0), Pos(cm.lastLine()), sel_dontScroll); + } + + // UPDATING + + // Allow "beforeChange" event handlers to influence a change + function filterChange(doc, change, update) { + var obj = { + canceled: false, + from: change.from, + to: change.to, + text: change.text, + origin: change.origin, + cancel: function () { + return obj.canceled = true; + } + }; + if (update) { + obj.update = function (from, to, text, origin) { + if (from) { + obj.from = clipPos(doc, from); + } + if (to) { + obj.to = clipPos(doc, to); + } + if (text) { + obj.text = text; + } + if (origin !== undefined) { + obj.origin = origin; + } + }; + } + signal(doc, "beforeChange", doc, obj); + if (doc.cm) { + signal(doc.cm, "beforeChange", doc.cm, obj); + } + if (obj.canceled) { + if (doc.cm) { + doc.cm.curOp.updateInput = 2; + } + return null; + } + return { + from: obj.from, + to: obj.to, + text: obj.text, + origin: obj.origin + }; + } + + // Apply a change to a document, and add it to the document's + // history, and propagating it to all linked documents. + function makeChange(doc, change, ignoreReadOnly) { + if (doc.cm) { + if (!doc.cm.curOp) { + return operation(doc.cm, makeChange)(doc, change, ignoreReadOnly); + } + if (doc.cm.state.suppressEdits) { + return; + } + } + if (hasHandler(doc, "beforeChange") || doc.cm && hasHandler(doc.cm, "beforeChange")) { + change = filterChange(doc, change, true); + if (!change) { + return; + } + } + + // Possibly split or suppress the update based on the presence + // of read-only spans in its range. + var split = sawReadOnlySpans && !ignoreReadOnly && removeReadOnlyRanges(doc, change.from, change.to); + if (split) { + for (var i = split.length - 1; i >= 0; --i) { + makeChangeInner(doc, { + from: split[i].from, + to: split[i].to, + text: i ? [""] : change.text, + origin: change.origin + }); + } + } else { + makeChangeInner(doc, change); + } + } + function makeChangeInner(doc, change) { + if (change.text.length == 1 && change.text[0] == "" && cmp(change.from, change.to) == 0) { + return; + } + var selAfter = computeSelAfterChange(doc, change); + addChangeToHistory(doc, change, selAfter, doc.cm ? doc.cm.curOp.id : NaN); + makeChangeSingleDoc(doc, change, selAfter, stretchSpansOverChange(doc, change)); + var rebased = []; + linkedDocs(doc, function (doc, sharedHist) { + if (!sharedHist && indexOf(rebased, doc.history) == -1) { + rebaseHist(doc.history, change); + rebased.push(doc.history); + } + makeChangeSingleDoc(doc, change, null, stretchSpansOverChange(doc, change)); + }); + } + + // Revert a change stored in a document's history. + function makeChangeFromHistory(doc, type, allowSelectionOnly) { + var suppress = doc.cm && doc.cm.state.suppressEdits; + if (suppress && !allowSelectionOnly) { + return; + } + var hist = doc.history, + event, + selAfter = doc.sel; + var source = type == "undo" ? hist.done : hist.undone, + dest = type == "undo" ? hist.undone : hist.done; + + // Verify that there is a useable event (so that ctrl-z won't + // needlessly clear selection events) + var i = 0; + for (; i < source.length; i++) { + event = source[i]; + if (allowSelectionOnly ? event.ranges && !event.equals(doc.sel) : !event.ranges) { + break; + } + } + if (i == source.length) { + return; + } + hist.lastOrigin = hist.lastSelOrigin = null; + for (;;) { + event = source.pop(); + if (event.ranges) { + pushSelectionToHistory(event, dest); + if (allowSelectionOnly && !event.equals(doc.sel)) { + setSelection(doc, event, { + clearRedo: false + }); + return; + } + selAfter = event; + } else if (suppress) { + source.push(event); + return; + } else { + break; + } + } + + // Build up a reverse change object to add to the opposite history + // stack (redo when undoing, and vice versa). + var antiChanges = []; + pushSelectionToHistory(selAfter, dest); + dest.push({ + changes: antiChanges, + generation: hist.generation + }); + hist.generation = event.generation || ++hist.maxGeneration; + var filter = hasHandler(doc, "beforeChange") || doc.cm && hasHandler(doc.cm, "beforeChange"); + var loop = function (i) { + var change = event.changes[i]; + change.origin = type; + if (filter && !filterChange(doc, change, false)) { + source.length = 0; + return {}; + } + antiChanges.push(historyChangeFromChange(doc, change)); + var after = i ? computeSelAfterChange(doc, change) : lst(source); + makeChangeSingleDoc(doc, change, after, mergeOldSpans(doc, change)); + if (!i && doc.cm) { + doc.cm.scrollIntoView({ + from: change.from, + to: changeEnd(change) + }); + } + var rebased = []; + + // Propagate to the linked documents + linkedDocs(doc, function (doc, sharedHist) { + if (!sharedHist && indexOf(rebased, doc.history) == -1) { + rebaseHist(doc.history, change); + rebased.push(doc.history); + } + makeChangeSingleDoc(doc, change, null, mergeOldSpans(doc, change)); + }); + }; + for (var i$1 = event.changes.length - 1; i$1 >= 0; --i$1) { + var returned = loop(i$1); + if (returned) return returned.v; + } + } + + // Sub-views need their line numbers shifted when text is added + // above or below them in the parent document. + function shiftDoc(doc, distance) { + if (distance == 0) { + return; + } + doc.first += distance; + doc.sel = new Selection(map(doc.sel.ranges, function (range) { + return new Range(Pos(range.anchor.line + distance, range.anchor.ch), Pos(range.head.line + distance, range.head.ch)); + }), doc.sel.primIndex); + if (doc.cm) { + regChange(doc.cm, doc.first, doc.first - distance, distance); + for (var d = doc.cm.display, l = d.viewFrom; l < d.viewTo; l++) { + regLineChange(doc.cm, l, "gutter"); + } + } + } + + // More lower-level change function, handling only a single document + // (not linked ones). + function makeChangeSingleDoc(doc, change, selAfter, spans) { + if (doc.cm && !doc.cm.curOp) { + return operation(doc.cm, makeChangeSingleDoc)(doc, change, selAfter, spans); + } + if (change.to.line < doc.first) { + shiftDoc(doc, change.text.length - 1 - (change.to.line - change.from.line)); + return; + } + if (change.from.line > doc.lastLine()) { + return; + } + + // Clip the change to the size of this doc + if (change.from.line < doc.first) { + var shift = change.text.length - 1 - (doc.first - change.from.line); + shiftDoc(doc, shift); + change = { + from: Pos(doc.first, 0), + to: Pos(change.to.line + shift, change.to.ch), + text: [lst(change.text)], + origin: change.origin + }; + } + var last = doc.lastLine(); + if (change.to.line > last) { + change = { + from: change.from, + to: Pos(last, getLine(doc, last).text.length), + text: [change.text[0]], + origin: change.origin + }; + } + change.removed = getBetween(doc, change.from, change.to); + if (!selAfter) { + selAfter = computeSelAfterChange(doc, change); + } + if (doc.cm) { + makeChangeSingleDocInEditor(doc.cm, change, spans); + } else { + updateDoc(doc, change, spans); + } + setSelectionNoUndo(doc, selAfter, sel_dontScroll); + if (doc.cantEdit && skipAtomic(doc, Pos(doc.firstLine(), 0))) { + doc.cantEdit = false; + } + } + + // Handle the interaction of a change to a document with the editor + // that this document is part of. + function makeChangeSingleDocInEditor(cm, change, spans) { + var doc = cm.doc, + display = cm.display, + from = change.from, + to = change.to; + var recomputeMaxLength = false, + checkWidthStart = from.line; + if (!cm.options.lineWrapping) { + checkWidthStart = lineNo(visualLine(getLine(doc, from.line))); + doc.iter(checkWidthStart, to.line + 1, function (line) { + if (line == display.maxLine) { + recomputeMaxLength = true; + return true; + } + }); + } + if (doc.sel.contains(change.from, change.to) > -1) { + signalCursorActivity(cm); + } + updateDoc(doc, change, spans, estimateHeight(cm)); + if (!cm.options.lineWrapping) { + doc.iter(checkWidthStart, from.line + change.text.length, function (line) { + var len = lineLength(line); + if (len > display.maxLineLength) { + display.maxLine = line; + display.maxLineLength = len; + display.maxLineChanged = true; + recomputeMaxLength = false; + } + }); + if (recomputeMaxLength) { + cm.curOp.updateMaxLine = true; + } + } + retreatFrontier(doc, from.line); + startWorker(cm, 400); + var lendiff = change.text.length - (to.line - from.line) - 1; + // Remember that these lines changed, for updating the display + if (change.full) { + regChange(cm); + } else if (from.line == to.line && change.text.length == 1 && !isWholeLineUpdate(cm.doc, change)) { + regLineChange(cm, from.line, "text"); + } else { + regChange(cm, from.line, to.line + 1, lendiff); + } + var changesHandler = hasHandler(cm, "changes"), + changeHandler = hasHandler(cm, "change"); + if (changeHandler || changesHandler) { + var obj = { + from: from, + to: to, + text: change.text, + removed: change.removed, + origin: change.origin + }; + if (changeHandler) { + signalLater(cm, "change", cm, obj); + } + if (changesHandler) { + (cm.curOp.changeObjs || (cm.curOp.changeObjs = [])).push(obj); + } + } + cm.display.selForContextMenu = null; + } + function replaceRange(doc, code, from, to, origin) { + var assign; + if (!to) { + to = from; + } + if (cmp(to, from) < 0) { + assign = [to, from], from = assign[0], to = assign[1]; + } + if (typeof code == "string") { + code = doc.splitLines(code); + } + makeChange(doc, { + from: from, + to: to, + text: code, + origin: origin + }); + } + + // Rebasing/resetting history to deal with externally-sourced changes + + function rebaseHistSelSingle(pos, from, to, diff) { + if (to < pos.line) { + pos.line += diff; + } else if (from < pos.line) { + pos.line = from; + pos.ch = 0; + } + } + + // Tries to rebase an array of history events given a change in the + // document. If the change touches the same lines as the event, the + // event, and everything 'behind' it, is discarded. If the change is + // before the event, the event's positions are updated. Uses a + // copy-on-write scheme for the positions, to avoid having to + // reallocate them all on every rebase, but also avoid problems with + // shared position objects being unsafely updated. + function rebaseHistArray(array, from, to, diff) { + for (var i = 0; i < array.length; ++i) { + var sub = array[i], + ok = true; + if (sub.ranges) { + if (!sub.copied) { + sub = array[i] = sub.deepCopy(); + sub.copied = true; + } + for (var j = 0; j < sub.ranges.length; j++) { + rebaseHistSelSingle(sub.ranges[j].anchor, from, to, diff); + rebaseHistSelSingle(sub.ranges[j].head, from, to, diff); + } + continue; + } + for (var j$1 = 0; j$1 < sub.changes.length; ++j$1) { + var cur = sub.changes[j$1]; + if (to < cur.from.line) { + cur.from = Pos(cur.from.line + diff, cur.from.ch); + cur.to = Pos(cur.to.line + diff, cur.to.ch); + } else if (from <= cur.to.line) { + ok = false; + break; + } + } + if (!ok) { + array.splice(0, i + 1); + i = 0; + } + } + } + function rebaseHist(hist, change) { + var from = change.from.line, + to = change.to.line, + diff = change.text.length - (to - from) - 1; + rebaseHistArray(hist.done, from, to, diff); + rebaseHistArray(hist.undone, from, to, diff); + } + + // Utility for applying a change to a line by handle or number, + // returning the number and optionally registering the line as + // changed. + function changeLine(doc, handle, changeType, op) { + var no = handle, + line = handle; + if (typeof handle == "number") { + line = getLine(doc, clipLine(doc, handle)); + } else { + no = lineNo(handle); + } + if (no == null) { + return null; + } + if (op(line, no) && doc.cm) { + regLineChange(doc.cm, no, changeType); + } + return line; + } + + // The document is represented as a BTree consisting of leaves, with + // chunk of lines in them, and branches, with up to ten leaves or + // other branch nodes below them. The top node is always a branch + // node, and is the document object itself (meaning it has + // additional methods and properties). + // + // All nodes have parent links. The tree is used both to go from + // line numbers to line objects, and to go from objects to numbers. + // It also indexes by height, and is used to convert between height + // and line object, and to find the total height of the document. + // + // See also http://marijnhaverbeke.nl/blog/codemirror-line-tree.html + + function LeafChunk(lines) { + this.lines = lines; + this.parent = null; + var height = 0; + for (var i = 0; i < lines.length; ++i) { + lines[i].parent = this; + height += lines[i].height; + } + this.height = height; + } + LeafChunk.prototype = { + chunkSize: function () { + return this.lines.length; + }, + // Remove the n lines at offset 'at'. + removeInner: function (at, n) { + for (var i = at, e = at + n; i < e; ++i) { + var line = this.lines[i]; + this.height -= line.height; + cleanUpLine(line); + signalLater(line, "delete"); + } + this.lines.splice(at, n); + }, + // Helper used to collapse a small branch into a single leaf. + collapse: function (lines) { + lines.push.apply(lines, this.lines); + }, + // Insert the given array of lines at offset 'at', count them as + // having the given height. + insertInner: function (at, lines, height) { + this.height += height; + this.lines = this.lines.slice(0, at).concat(lines).concat(this.lines.slice(at)); + for (var i = 0; i < lines.length; ++i) { + lines[i].parent = this; + } + }, + // Used to iterate over a part of the tree. + iterN: function (at, n, op) { + for (var e = at + n; at < e; ++at) { + if (op(this.lines[at])) { + return true; + } + } + } + }; + function BranchChunk(children) { + this.children = children; + var size = 0, + height = 0; + for (var i = 0; i < children.length; ++i) { + var ch = children[i]; + size += ch.chunkSize(); + height += ch.height; + ch.parent = this; + } + this.size = size; + this.height = height; + this.parent = null; + } + BranchChunk.prototype = { + chunkSize: function () { + return this.size; + }, + removeInner: function (at, n) { + this.size -= n; + for (var i = 0; i < this.children.length; ++i) { + var child = this.children[i], + sz = child.chunkSize(); + if (at < sz) { + var rm = Math.min(n, sz - at), + oldHeight = child.height; + child.removeInner(at, rm); + this.height -= oldHeight - child.height; + if (sz == rm) { + this.children.splice(i--, 1); + child.parent = null; + } + if ((n -= rm) == 0) { + break; + } + at = 0; + } else { + at -= sz; + } + } + // If the result is smaller than 25 lines, ensure that it is a + // single leaf node. + if (this.size - n < 25 && (this.children.length > 1 || !(this.children[0] instanceof LeafChunk))) { + var lines = []; + this.collapse(lines); + this.children = [new LeafChunk(lines)]; + this.children[0].parent = this; + } + }, + collapse: function (lines) { + for (var i = 0; i < this.children.length; ++i) { + this.children[i].collapse(lines); + } + }, + insertInner: function (at, lines, height) { + this.size += lines.length; + this.height += height; + for (var i = 0; i < this.children.length; ++i) { + var child = this.children[i], + sz = child.chunkSize(); + if (at <= sz) { + child.insertInner(at, lines, height); + if (child.lines && child.lines.length > 50) { + // To avoid memory thrashing when child.lines is huge (e.g. first view of a large file), it's never spliced. + // Instead, small slices are taken. They're taken in order because sequential memory accesses are fastest. + var remaining = child.lines.length % 25 + 25; + for (var pos = remaining; pos < child.lines.length;) { + var leaf = new LeafChunk(child.lines.slice(pos, pos += 25)); + child.height -= leaf.height; + this.children.splice(++i, 0, leaf); + leaf.parent = this; + } + child.lines = child.lines.slice(0, remaining); + this.maybeSpill(); + } + break; + } + at -= sz; + } + }, + // When a node has grown, check whether it should be split. + maybeSpill: function () { + if (this.children.length <= 10) { + return; + } + var me = this; + do { + var spilled = me.children.splice(me.children.length - 5, 5); + var sibling = new BranchChunk(spilled); + if (!me.parent) { + // Become the parent node + var copy = new BranchChunk(me.children); + copy.parent = me; + me.children = [copy, sibling]; + me = copy; + } else { + me.size -= sibling.size; + me.height -= sibling.height; + var myIndex = indexOf(me.parent.children, me); + me.parent.children.splice(myIndex + 1, 0, sibling); + } + sibling.parent = me.parent; + } while (me.children.length > 10); + me.parent.maybeSpill(); + }, + iterN: function (at, n, op) { + for (var i = 0; i < this.children.length; ++i) { + var child = this.children[i], + sz = child.chunkSize(); + if (at < sz) { + var used = Math.min(n, sz - at); + if (child.iterN(at, used, op)) { + return true; + } + if ((n -= used) == 0) { + break; + } + at = 0; + } else { + at -= sz; + } + } + } + }; + + // Line widgets are block elements displayed above or below a line. + + var LineWidget = function (doc, node, options) { + if (options) { + for (var opt in options) { + if (options.hasOwnProperty(opt)) { + this[opt] = options[opt]; + } + } + } + this.doc = doc; + this.node = node; + }; + LineWidget.prototype.clear = function () { + var cm = this.doc.cm, + ws = this.line.widgets, + line = this.line, + no = lineNo(line); + if (no == null || !ws) { + return; + } + for (var i = 0; i < ws.length; ++i) { + if (ws[i] == this) { + ws.splice(i--, 1); + } + } + if (!ws.length) { + line.widgets = null; + } + var height = widgetHeight(this); + updateLineHeight(line, Math.max(0, line.height - height)); + if (cm) { + runInOp(cm, function () { + adjustScrollWhenAboveVisible(cm, line, -height); + regLineChange(cm, no, "widget"); + }); + signalLater(cm, "lineWidgetCleared", cm, this, no); + } + }; + LineWidget.prototype.changed = function () { + var this$1 = this; + var oldH = this.height, + cm = this.doc.cm, + line = this.line; + this.height = null; + var diff = widgetHeight(this) - oldH; + if (!diff) { + return; + } + if (!lineIsHidden(this.doc, line)) { + updateLineHeight(line, line.height + diff); + } + if (cm) { + runInOp(cm, function () { + cm.curOp.forceUpdate = true; + adjustScrollWhenAboveVisible(cm, line, diff); + signalLater(cm, "lineWidgetChanged", cm, this$1, lineNo(line)); + }); + } + }; + eventMixin(LineWidget); + function adjustScrollWhenAboveVisible(cm, line, diff) { + if (heightAtLine(line) < (cm.curOp && cm.curOp.scrollTop || cm.doc.scrollTop)) { + addToScrollTop(cm, diff); + } + } + function addLineWidget(doc, handle, node, options) { + var widget = new LineWidget(doc, node, options); + var cm = doc.cm; + if (cm && widget.noHScroll) { + cm.display.alignWidgets = true; + } + changeLine(doc, handle, "widget", function (line) { + var widgets = line.widgets || (line.widgets = []); + if (widget.insertAt == null) { + widgets.push(widget); + } else { + widgets.splice(Math.min(widgets.length, Math.max(0, widget.insertAt)), 0, widget); + } + widget.line = line; + if (cm && !lineIsHidden(doc, line)) { + var aboveVisible = heightAtLine(line) < doc.scrollTop; + updateLineHeight(line, line.height + widgetHeight(widget)); + if (aboveVisible) { + addToScrollTop(cm, widget.height); + } + cm.curOp.forceUpdate = true; + } + return true; + }); + if (cm) { + signalLater(cm, "lineWidgetAdded", cm, widget, typeof handle == "number" ? handle : lineNo(handle)); + } + return widget; + } + + // TEXTMARKERS + + // Created with markText and setBookmark methods. A TextMarker is a + // handle that can be used to clear or find a marked position in the + // document. Line objects hold arrays (markedSpans) containing + // {from, to, marker} object pointing to such marker objects, and + // indicating that such a marker is present on that line. Multiple + // lines may point to the same marker when it spans across lines. + // The spans will have null for their from/to properties when the + // marker continues beyond the start/end of the line. Markers have + // links back to the lines they currently touch. + + // Collapsed markers have unique ids, in order to be able to order + // them, which is needed for uniquely determining an outer marker + // when they overlap (they may nest, but not partially overlap). + var nextMarkerId = 0; + var TextMarker = function (doc, type) { + this.lines = []; + this.type = type; + this.doc = doc; + this.id = ++nextMarkerId; + }; + + // Clear the marker. + TextMarker.prototype.clear = function () { + if (this.explicitlyCleared) { + return; + } + var cm = this.doc.cm, + withOp = cm && !cm.curOp; + if (withOp) { + startOperation(cm); + } + if (hasHandler(this, "clear")) { + var found = this.find(); + if (found) { + signalLater(this, "clear", found.from, found.to); + } + } + var min = null, + max = null; + for (var i = 0; i < this.lines.length; ++i) { + var line = this.lines[i]; + var span = getMarkedSpanFor(line.markedSpans, this); + if (cm && !this.collapsed) { + regLineChange(cm, lineNo(line), "text"); + } else if (cm) { + if (span.to != null) { + max = lineNo(line); + } + if (span.from != null) { + min = lineNo(line); + } + } + line.markedSpans = removeMarkedSpan(line.markedSpans, span); + if (span.from == null && this.collapsed && !lineIsHidden(this.doc, line) && cm) { + updateLineHeight(line, textHeight(cm.display)); + } + } + if (cm && this.collapsed && !cm.options.lineWrapping) { + for (var i$1 = 0; i$1 < this.lines.length; ++i$1) { + var visual = visualLine(this.lines[i$1]), + len = lineLength(visual); + if (len > cm.display.maxLineLength) { + cm.display.maxLine = visual; + cm.display.maxLineLength = len; + cm.display.maxLineChanged = true; + } + } + } + if (min != null && cm && this.collapsed) { + regChange(cm, min, max + 1); + } + this.lines.length = 0; + this.explicitlyCleared = true; + if (this.atomic && this.doc.cantEdit) { + this.doc.cantEdit = false; + if (cm) { + reCheckSelection(cm.doc); + } + } + if (cm) { + signalLater(cm, "markerCleared", cm, this, min, max); + } + if (withOp) { + endOperation(cm); + } + if (this.parent) { + this.parent.clear(); + } + }; + + // Find the position of the marker in the document. Returns a {from, + // to} object by default. Side can be passed to get a specific side + // -- 0 (both), -1 (left), or 1 (right). When lineObj is true, the + // Pos objects returned contain a line object, rather than a line + // number (used to prevent looking up the same line twice). + TextMarker.prototype.find = function (side, lineObj) { + if (side == null && this.type == "bookmark") { + side = 1; + } + var from, to; + for (var i = 0; i < this.lines.length; ++i) { + var line = this.lines[i]; + var span = getMarkedSpanFor(line.markedSpans, this); + if (span.from != null) { + from = Pos(lineObj ? line : lineNo(line), span.from); + if (side == -1) { + return from; + } + } + if (span.to != null) { + to = Pos(lineObj ? line : lineNo(line), span.to); + if (side == 1) { + return to; + } + } + } + return from && { + from: from, + to: to + }; + }; + + // Signals that the marker's widget changed, and surrounding layout + // should be recomputed. + TextMarker.prototype.changed = function () { + var this$1 = this; + var pos = this.find(-1, true), + widget = this, + cm = this.doc.cm; + if (!pos || !cm) { + return; + } + runInOp(cm, function () { + var line = pos.line, + lineN = lineNo(pos.line); + var view = findViewForLine(cm, lineN); + if (view) { + clearLineMeasurementCacheFor(view); + cm.curOp.selectionChanged = cm.curOp.forceUpdate = true; + } + cm.curOp.updateMaxLine = true; + if (!lineIsHidden(widget.doc, line) && widget.height != null) { + var oldHeight = widget.height; + widget.height = null; + var dHeight = widgetHeight(widget) - oldHeight; + if (dHeight) { + updateLineHeight(line, line.height + dHeight); + } + } + signalLater(cm, "markerChanged", cm, this$1); + }); + }; + TextMarker.prototype.attachLine = function (line) { + if (!this.lines.length && this.doc.cm) { + var op = this.doc.cm.curOp; + if (!op.maybeHiddenMarkers || indexOf(op.maybeHiddenMarkers, this) == -1) { + (op.maybeUnhiddenMarkers || (op.maybeUnhiddenMarkers = [])).push(this); + } + } + this.lines.push(line); + }; + TextMarker.prototype.detachLine = function (line) { + this.lines.splice(indexOf(this.lines, line), 1); + if (!this.lines.length && this.doc.cm) { + var op = this.doc.cm.curOp; + (op.maybeHiddenMarkers || (op.maybeHiddenMarkers = [])).push(this); + } + }; + eventMixin(TextMarker); + + // Create a marker, wire it up to the right lines, and + function markText(doc, from, to, options, type) { + // Shared markers (across linked documents) are handled separately + // (markTextShared will call out to this again, once per + // document). + if (options && options.shared) { + return markTextShared(doc, from, to, options, type); + } + // Ensure we are in an operation. + if (doc.cm && !doc.cm.curOp) { + return operation(doc.cm, markText)(doc, from, to, options, type); + } + var marker = new TextMarker(doc, type), + diff = cmp(from, to); + if (options) { + copyObj(options, marker, false); + } + // Don't connect empty markers unless clearWhenEmpty is false + if (diff > 0 || diff == 0 && marker.clearWhenEmpty !== false) { + return marker; + } + if (marker.replacedWith) { + // Showing up as a widget implies collapsed (widget replaces text) + marker.collapsed = true; + marker.widgetNode = eltP("span", [marker.replacedWith], "CodeMirror-widget"); + if (!options.handleMouseEvents) { + marker.widgetNode.setAttribute("cm-ignore-events", "true"); + } + if (options.insertLeft) { + marker.widgetNode.insertLeft = true; + } + } + if (marker.collapsed) { + if (conflictingCollapsedRange(doc, from.line, from, to, marker) || from.line != to.line && conflictingCollapsedRange(doc, to.line, from, to, marker)) { + throw new Error("Inserting collapsed marker partially overlapping an existing one"); + } + seeCollapsedSpans(); + } + if (marker.addToHistory) { + addChangeToHistory(doc, { + from: from, + to: to, + origin: "markText" + }, doc.sel, NaN); + } + var curLine = from.line, + cm = doc.cm, + updateMaxLine; + doc.iter(curLine, to.line + 1, function (line) { + if (cm && marker.collapsed && !cm.options.lineWrapping && visualLine(line) == cm.display.maxLine) { + updateMaxLine = true; + } + if (marker.collapsed && curLine != from.line) { + updateLineHeight(line, 0); + } + addMarkedSpan(line, new MarkedSpan(marker, curLine == from.line ? from.ch : null, curLine == to.line ? to.ch : null), doc.cm && doc.cm.curOp); + ++curLine; + }); + // lineIsHidden depends on the presence of the spans, so needs a second pass + if (marker.collapsed) { + doc.iter(from.line, to.line + 1, function (line) { + if (lineIsHidden(doc, line)) { + updateLineHeight(line, 0); + } + }); + } + if (marker.clearOnEnter) { + on(marker, "beforeCursorEnter", function () { + return marker.clear(); + }); + } + if (marker.readOnly) { + seeReadOnlySpans(); + if (doc.history.done.length || doc.history.undone.length) { + doc.clearHistory(); + } + } + if (marker.collapsed) { + marker.id = ++nextMarkerId; + marker.atomic = true; + } + if (cm) { + // Sync editor state + if (updateMaxLine) { + cm.curOp.updateMaxLine = true; + } + if (marker.collapsed) { + regChange(cm, from.line, to.line + 1); + } else if (marker.className || marker.startStyle || marker.endStyle || marker.css || marker.attributes || marker.title) { + for (var i = from.line; i <= to.line; i++) { + regLineChange(cm, i, "text"); + } + } + if (marker.atomic) { + reCheckSelection(cm.doc); + } + signalLater(cm, "markerAdded", cm, marker); + } + return marker; + } + + // SHARED TEXTMARKERS + + // A shared marker spans multiple linked documents. It is + // implemented as a meta-marker-object controlling multiple normal + // markers. + var SharedTextMarker = function (markers, primary) { + this.markers = markers; + this.primary = primary; + for (var i = 0; i < markers.length; ++i) { + markers[i].parent = this; + } + }; + SharedTextMarker.prototype.clear = function () { + if (this.explicitlyCleared) { + return; + } + this.explicitlyCleared = true; + for (var i = 0; i < this.markers.length; ++i) { + this.markers[i].clear(); + } + signalLater(this, "clear"); + }; + SharedTextMarker.prototype.find = function (side, lineObj) { + return this.primary.find(side, lineObj); + }; + eventMixin(SharedTextMarker); + function markTextShared(doc, from, to, options, type) { + options = copyObj(options); + options.shared = false; + var markers = [markText(doc, from, to, options, type)], + primary = markers[0]; + var widget = options.widgetNode; + linkedDocs(doc, function (doc) { + if (widget) { + options.widgetNode = widget.cloneNode(true); + } + markers.push(markText(doc, clipPos(doc, from), clipPos(doc, to), options, type)); + for (var i = 0; i < doc.linked.length; ++i) { + if (doc.linked[i].isParent) { + return; + } + } + primary = lst(markers); + }); + return new SharedTextMarker(markers, primary); + } + function findSharedMarkers(doc) { + return doc.findMarks(Pos(doc.first, 0), doc.clipPos(Pos(doc.lastLine())), function (m) { + return m.parent; + }); + } + function copySharedMarkers(doc, markers) { + for (var i = 0; i < markers.length; i++) { + var marker = markers[i], + pos = marker.find(); + var mFrom = doc.clipPos(pos.from), + mTo = doc.clipPos(pos.to); + if (cmp(mFrom, mTo)) { + var subMark = markText(doc, mFrom, mTo, marker.primary, marker.primary.type); + marker.markers.push(subMark); + subMark.parent = marker; + } + } + } + function detachSharedMarkers(markers) { + var loop = function (i) { + var marker = markers[i], + linked = [marker.primary.doc]; + linkedDocs(marker.primary.doc, function (d) { + return linked.push(d); + }); + for (var j = 0; j < marker.markers.length; j++) { + var subMarker = marker.markers[j]; + if (indexOf(linked, subMarker.doc) == -1) { + subMarker.parent = null; + marker.markers.splice(j--, 1); + } + } + }; + for (var i = 0; i < markers.length; i++) loop(i); + } + var nextDocId = 0; + var Doc = function (text, mode, firstLine, lineSep, direction) { + if (!(this instanceof Doc)) { + return new Doc(text, mode, firstLine, lineSep, direction); + } + if (firstLine == null) { + firstLine = 0; + } + BranchChunk.call(this, [new LeafChunk([new Line("", null)])]); + this.first = firstLine; + this.scrollTop = this.scrollLeft = 0; + this.cantEdit = false; + this.cleanGeneration = 1; + this.modeFrontier = this.highlightFrontier = firstLine; + var start = Pos(firstLine, 0); + this.sel = simpleSelection(start); + this.history = new History(null); + this.id = ++nextDocId; + this.modeOption = mode; + this.lineSep = lineSep; + this.direction = direction == "rtl" ? "rtl" : "ltr"; + this.extend = false; + if (typeof text == "string") { + text = this.splitLines(text); + } + updateDoc(this, { + from: start, + to: start, + text: text + }); + setSelection(this, simpleSelection(start), sel_dontScroll); + }; + Doc.prototype = createObj(BranchChunk.prototype, { + constructor: Doc, + // Iterate over the document. Supports two forms -- with only one + // argument, it calls that for each line in the document. With + // three, it iterates over the range given by the first two (with + // the second being non-inclusive). + iter: function (from, to, op) { + if (op) { + this.iterN(from - this.first, to - from, op); + } else { + this.iterN(this.first, this.first + this.size, from); + } + }, + // Non-public interface for adding and removing lines. + insert: function (at, lines) { + var height = 0; + for (var i = 0; i < lines.length; ++i) { + height += lines[i].height; + } + this.insertInner(at - this.first, lines, height); + }, + remove: function (at, n) { + this.removeInner(at - this.first, n); + }, + // From here, the methods are part of the public interface. Most + // are also available from CodeMirror (editor) instances. + + getValue: function (lineSep) { + var lines = getLines(this, this.first, this.first + this.size); + if (lineSep === false) { + return lines; + } + return lines.join(lineSep || this.lineSeparator()); + }, + setValue: docMethodOp(function (code) { + var top = Pos(this.first, 0), + last = this.first + this.size - 1; + makeChange(this, { + from: top, + to: Pos(last, getLine(this, last).text.length), + text: this.splitLines(code), + origin: "setValue", + full: true + }, true); + if (this.cm) { + scrollToCoords(this.cm, 0, 0); + } + setSelection(this, simpleSelection(top), sel_dontScroll); + }), + replaceRange: function (code, from, to, origin) { + from = clipPos(this, from); + to = to ? clipPos(this, to) : from; + replaceRange(this, code, from, to, origin); + }, + getRange: function (from, to, lineSep) { + var lines = getBetween(this, clipPos(this, from), clipPos(this, to)); + if (lineSep === false) { + return lines; + } + if (lineSep === '') { + return lines.join(''); + } + return lines.join(lineSep || this.lineSeparator()); + }, + getLine: function (line) { + var l = this.getLineHandle(line); + return l && l.text; + }, + getLineHandle: function (line) { + if (isLine(this, line)) { + return getLine(this, line); + } + }, + getLineNumber: function (line) { + return lineNo(line); + }, + getLineHandleVisualStart: function (line) { + if (typeof line == "number") { + line = getLine(this, line); + } + return visualLine(line); + }, + lineCount: function () { + return this.size; + }, + firstLine: function () { + return this.first; + }, + lastLine: function () { + return this.first + this.size - 1; + }, + clipPos: function (pos) { + return clipPos(this, pos); + }, + getCursor: function (start) { + var range = this.sel.primary(), + pos; + if (start == null || start == "head") { + pos = range.head; + } else if (start == "anchor") { + pos = range.anchor; + } else if (start == "end" || start == "to" || start === false) { + pos = range.to(); + } else { + pos = range.from(); + } + return pos; + }, + listSelections: function () { + return this.sel.ranges; + }, + somethingSelected: function () { + return this.sel.somethingSelected(); + }, + setCursor: docMethodOp(function (line, ch, options) { + setSimpleSelection(this, clipPos(this, typeof line == "number" ? Pos(line, ch || 0) : line), null, options); + }), + setSelection: docMethodOp(function (anchor, head, options) { + setSimpleSelection(this, clipPos(this, anchor), clipPos(this, head || anchor), options); + }), + extendSelection: docMethodOp(function (head, other, options) { + extendSelection(this, clipPos(this, head), other && clipPos(this, other), options); + }), + extendSelections: docMethodOp(function (heads, options) { + extendSelections(this, clipPosArray(this, heads), options); + }), + extendSelectionsBy: docMethodOp(function (f, options) { + var heads = map(this.sel.ranges, f); + extendSelections(this, clipPosArray(this, heads), options); + }), + setSelections: docMethodOp(function (ranges, primary, options) { + if (!ranges.length) { + return; + } + var out = []; + for (var i = 0; i < ranges.length; i++) { + out[i] = new Range(clipPos(this, ranges[i].anchor), clipPos(this, ranges[i].head || ranges[i].anchor)); + } + if (primary == null) { + primary = Math.min(ranges.length - 1, this.sel.primIndex); + } + setSelection(this, normalizeSelection(this.cm, out, primary), options); + }), + addSelection: docMethodOp(function (anchor, head, options) { + var ranges = this.sel.ranges.slice(0); + ranges.push(new Range(clipPos(this, anchor), clipPos(this, head || anchor))); + setSelection(this, normalizeSelection(this.cm, ranges, ranges.length - 1), options); + }), + getSelection: function (lineSep) { + var ranges = this.sel.ranges, + lines; + for (var i = 0; i < ranges.length; i++) { + var sel = getBetween(this, ranges[i].from(), ranges[i].to()); + lines = lines ? lines.concat(sel) : sel; + } + if (lineSep === false) { + return lines; + } else { + return lines.join(lineSep || this.lineSeparator()); + } + }, + getSelections: function (lineSep) { + var parts = [], + ranges = this.sel.ranges; + for (var i = 0; i < ranges.length; i++) { + var sel = getBetween(this, ranges[i].from(), ranges[i].to()); + if (lineSep !== false) { + sel = sel.join(lineSep || this.lineSeparator()); + } + parts[i] = sel; + } + return parts; + }, + replaceSelection: function (code, collapse, origin) { + var dup = []; + for (var i = 0; i < this.sel.ranges.length; i++) { + dup[i] = code; + } + this.replaceSelections(dup, collapse, origin || "+input"); + }, + replaceSelections: docMethodOp(function (code, collapse, origin) { + var changes = [], + sel = this.sel; + for (var i = 0; i < sel.ranges.length; i++) { + var range = sel.ranges[i]; + changes[i] = { + from: range.from(), + to: range.to(), + text: this.splitLines(code[i]), + origin: origin + }; + } + var newSel = collapse && collapse != "end" && computeReplacedSel(this, changes, collapse); + for (var i$1 = changes.length - 1; i$1 >= 0; i$1--) { + makeChange(this, changes[i$1]); + } + if (newSel) { + setSelectionReplaceHistory(this, newSel); + } else if (this.cm) { + ensureCursorVisible(this.cm); + } + }), + undo: docMethodOp(function () { + makeChangeFromHistory(this, "undo"); + }), + redo: docMethodOp(function () { + makeChangeFromHistory(this, "redo"); + }), + undoSelection: docMethodOp(function () { + makeChangeFromHistory(this, "undo", true); + }), + redoSelection: docMethodOp(function () { + makeChangeFromHistory(this, "redo", true); + }), + setExtending: function (val) { + this.extend = val; + }, + getExtending: function () { + return this.extend; + }, + historySize: function () { + var hist = this.history, + done = 0, + undone = 0; + for (var i = 0; i < hist.done.length; i++) { + if (!hist.done[i].ranges) { + ++done; + } + } + for (var i$1 = 0; i$1 < hist.undone.length; i$1++) { + if (!hist.undone[i$1].ranges) { + ++undone; + } + } + return { + undo: done, + redo: undone + }; + }, + clearHistory: function () { + var this$1 = this; + this.history = new History(this.history); + linkedDocs(this, function (doc) { + return doc.history = this$1.history; + }, true); + }, + markClean: function () { + this.cleanGeneration = this.changeGeneration(true); + }, + changeGeneration: function (forceSplit) { + if (forceSplit) { + this.history.lastOp = this.history.lastSelOp = this.history.lastOrigin = null; + } + return this.history.generation; + }, + isClean: function (gen) { + return this.history.generation == (gen || this.cleanGeneration); + }, + getHistory: function () { + return { + done: copyHistoryArray(this.history.done), + undone: copyHistoryArray(this.history.undone) + }; + }, + setHistory: function (histData) { + var hist = this.history = new History(this.history); + hist.done = copyHistoryArray(histData.done.slice(0), null, true); + hist.undone = copyHistoryArray(histData.undone.slice(0), null, true); + }, + setGutterMarker: docMethodOp(function (line, gutterID, value) { + return changeLine(this, line, "gutter", function (line) { + var markers = line.gutterMarkers || (line.gutterMarkers = {}); + markers[gutterID] = value; + if (!value && isEmpty(markers)) { + line.gutterMarkers = null; + } + return true; + }); + }), + clearGutter: docMethodOp(function (gutterID) { + var this$1 = this; + this.iter(function (line) { + if (line.gutterMarkers && line.gutterMarkers[gutterID]) { + changeLine(this$1, line, "gutter", function () { + line.gutterMarkers[gutterID] = null; + if (isEmpty(line.gutterMarkers)) { + line.gutterMarkers = null; + } + return true; + }); + } + }); + }), + lineInfo: function (line) { + var n; + if (typeof line == "number") { + if (!isLine(this, line)) { + return null; + } + n = line; + line = getLine(this, line); + if (!line) { + return null; + } + } else { + n = lineNo(line); + if (n == null) { + return null; + } + } + return { + line: n, + handle: line, + text: line.text, + gutterMarkers: line.gutterMarkers, + textClass: line.textClass, + bgClass: line.bgClass, + wrapClass: line.wrapClass, + widgets: line.widgets + }; + }, + addLineClass: docMethodOp(function (handle, where, cls) { + return changeLine(this, handle, where == "gutter" ? "gutter" : "class", function (line) { + var prop = where == "text" ? "textClass" : where == "background" ? "bgClass" : where == "gutter" ? "gutterClass" : "wrapClass"; + if (!line[prop]) { + line[prop] = cls; + } else if (classTest(cls).test(line[prop])) { + return false; + } else { + line[prop] += " " + cls; + } + return true; + }); + }), + removeLineClass: docMethodOp(function (handle, where, cls) { + return changeLine(this, handle, where == "gutter" ? "gutter" : "class", function (line) { + var prop = where == "text" ? "textClass" : where == "background" ? "bgClass" : where == "gutter" ? "gutterClass" : "wrapClass"; + var cur = line[prop]; + if (!cur) { + return false; + } else if (cls == null) { + line[prop] = null; + } else { + var found = cur.match(classTest(cls)); + if (!found) { + return false; + } + var end = found.index + found[0].length; + line[prop] = cur.slice(0, found.index) + (!found.index || end == cur.length ? "" : " ") + cur.slice(end) || null; + } + return true; + }); + }), + addLineWidget: docMethodOp(function (handle, node, options) { + return addLineWidget(this, handle, node, options); + }), + removeLineWidget: function (widget) { + widget.clear(); + }, + markText: function (from, to, options) { + return markText(this, clipPos(this, from), clipPos(this, to), options, options && options.type || "range"); + }, + setBookmark: function (pos, options) { + var realOpts = { + replacedWith: options && (options.nodeType == null ? options.widget : options), + insertLeft: options && options.insertLeft, + clearWhenEmpty: false, + shared: options && options.shared, + handleMouseEvents: options && options.handleMouseEvents + }; + pos = clipPos(this, pos); + return markText(this, pos, pos, realOpts, "bookmark"); + }, + findMarksAt: function (pos) { + pos = clipPos(this, pos); + var markers = [], + spans = getLine(this, pos.line).markedSpans; + if (spans) { + for (var i = 0; i < spans.length; ++i) { + var span = spans[i]; + if ((span.from == null || span.from <= pos.ch) && (span.to == null || span.to >= pos.ch)) { + markers.push(span.marker.parent || span.marker); + } + } + } + return markers; + }, + findMarks: function (from, to, filter) { + from = clipPos(this, from); + to = clipPos(this, to); + var found = [], + lineNo = from.line; + this.iter(from.line, to.line + 1, function (line) { + var spans = line.markedSpans; + if (spans) { + for (var i = 0; i < spans.length; i++) { + var span = spans[i]; + if (!(span.to != null && lineNo == from.line && from.ch >= span.to || span.from == null && lineNo != from.line || span.from != null && lineNo == to.line && span.from >= to.ch) && (!filter || filter(span.marker))) { + found.push(span.marker.parent || span.marker); + } + } + } + ++lineNo; + }); + return found; + }, + getAllMarks: function () { + var markers = []; + this.iter(function (line) { + var sps = line.markedSpans; + if (sps) { + for (var i = 0; i < sps.length; ++i) { + if (sps[i].from != null) { + markers.push(sps[i].marker); + } + } + } + }); + return markers; + }, + posFromIndex: function (off) { + var ch, + lineNo = this.first, + sepSize = this.lineSeparator().length; + this.iter(function (line) { + var sz = line.text.length + sepSize; + if (sz > off) { + ch = off; + return true; + } + off -= sz; + ++lineNo; + }); + return clipPos(this, Pos(lineNo, ch)); + }, + indexFromPos: function (coords) { + coords = clipPos(this, coords); + var index = coords.ch; + if (coords.line < this.first || coords.ch < 0) { + return 0; + } + var sepSize = this.lineSeparator().length; + this.iter(this.first, coords.line, function (line) { + // iter aborts when callback returns a truthy value + index += line.text.length + sepSize; + }); + return index; + }, + copy: function (copyHistory) { + var doc = new Doc(getLines(this, this.first, this.first + this.size), this.modeOption, this.first, this.lineSep, this.direction); + doc.scrollTop = this.scrollTop; + doc.scrollLeft = this.scrollLeft; + doc.sel = this.sel; + doc.extend = false; + if (copyHistory) { + doc.history.undoDepth = this.history.undoDepth; + doc.setHistory(this.getHistory()); + } + return doc; + }, + linkedDoc: function (options) { + if (!options) { + options = {}; + } + var from = this.first, + to = this.first + this.size; + if (options.from != null && options.from > from) { + from = options.from; + } + if (options.to != null && options.to < to) { + to = options.to; + } + var copy = new Doc(getLines(this, from, to), options.mode || this.modeOption, from, this.lineSep, this.direction); + if (options.sharedHist) { + copy.history = this.history; + } + (this.linked || (this.linked = [])).push({ + doc: copy, + sharedHist: options.sharedHist + }); + copy.linked = [{ + doc: this, + isParent: true, + sharedHist: options.sharedHist + }]; + copySharedMarkers(copy, findSharedMarkers(this)); + return copy; + }, + unlinkDoc: function (other) { + if (other instanceof CodeMirror) { + other = other.doc; + } + if (this.linked) { + for (var i = 0; i < this.linked.length; ++i) { + var link = this.linked[i]; + if (link.doc != other) { + continue; + } + this.linked.splice(i, 1); + other.unlinkDoc(this); + detachSharedMarkers(findSharedMarkers(this)); + break; + } + } + // If the histories were shared, split them again + if (other.history == this.history) { + var splitIds = [other.id]; + linkedDocs(other, function (doc) { + return splitIds.push(doc.id); + }, true); + other.history = new History(null); + other.history.done = copyHistoryArray(this.history.done, splitIds); + other.history.undone = copyHistoryArray(this.history.undone, splitIds); + } + }, + iterLinkedDocs: function (f) { + linkedDocs(this, f); + }, + getMode: function () { + return this.mode; + }, + getEditor: function () { + return this.cm; + }, + splitLines: function (str) { + if (this.lineSep) { + return str.split(this.lineSep); + } + return splitLinesAuto(str); + }, + lineSeparator: function () { + return this.lineSep || "\n"; + }, + setDirection: docMethodOp(function (dir) { + if (dir != "rtl") { + dir = "ltr"; + } + if (dir == this.direction) { + return; + } + this.direction = dir; + this.iter(function (line) { + return line.order = null; + }); + if (this.cm) { + directionChanged(this.cm); + } + }) + }); + + // Public alias. + Doc.prototype.eachLine = Doc.prototype.iter; + + // Kludge to work around strange IE behavior where it'll sometimes + // re-fire a series of drag-related events right after the drop (#1551) + var lastDrop = 0; + function onDrop(e) { + var cm = this; + clearDragCursor(cm); + if (signalDOMEvent(cm, e) || eventInWidget(cm.display, e)) { + return; + } + e_preventDefault(e); + if (ie) { + lastDrop = +new Date(); + } + var pos = posFromMouse(cm, e, true), + files = e.dataTransfer.files; + if (!pos || cm.isReadOnly()) { + return; + } + // Might be a file drop, in which case we simply extract the text + // and insert it. + if (files && files.length && window.FileReader && window.File) { + var n = files.length, + text = Array(n), + read = 0; + var markAsReadAndPasteIfAllFilesAreRead = function () { + if (++read == n) { + operation(cm, function () { + pos = clipPos(cm.doc, pos); + var change = { + from: pos, + to: pos, + text: cm.doc.splitLines(text.filter(function (t) { + return t != null; + }).join(cm.doc.lineSeparator())), + origin: "paste" + }; + makeChange(cm.doc, change); + setSelectionReplaceHistory(cm.doc, simpleSelection(clipPos(cm.doc, pos), clipPos(cm.doc, changeEnd(change)))); + })(); + } + }; + var readTextFromFile = function (file, i) { + if (cm.options.allowDropFileTypes && indexOf(cm.options.allowDropFileTypes, file.type) == -1) { + markAsReadAndPasteIfAllFilesAreRead(); + return; + } + var reader = new FileReader(); + reader.onerror = function () { + return markAsReadAndPasteIfAllFilesAreRead(); + }; + reader.onload = function () { + var content = reader.result; + if (/[\x00-\x08\x0e-\x1f]{2}/.test(content)) { + markAsReadAndPasteIfAllFilesAreRead(); + return; + } + text[i] = content; + markAsReadAndPasteIfAllFilesAreRead(); + }; + reader.readAsText(file); + }; + for (var i = 0; i < files.length; i++) { + readTextFromFile(files[i], i); + } + } else { + // Normal drop + // Don't do a replace if the drop happened inside of the selected text. + if (cm.state.draggingText && cm.doc.sel.contains(pos) > -1) { + cm.state.draggingText(e); + // Ensure the editor is re-focused + setTimeout(function () { + return cm.display.input.focus(); + }, 20); + return; + } + try { + var text$1 = e.dataTransfer.getData("Text"); + if (text$1) { + var selected; + if (cm.state.draggingText && !cm.state.draggingText.copy) { + selected = cm.listSelections(); + } + setSelectionNoUndo(cm.doc, simpleSelection(pos, pos)); + if (selected) { + for (var i$1 = 0; i$1 < selected.length; ++i$1) { + replaceRange(cm.doc, "", selected[i$1].anchor, selected[i$1].head, "drag"); + } + } + cm.replaceSelection(text$1, "around", "paste"); + cm.display.input.focus(); + } + } catch (e$1) {} + } + } + function onDragStart(cm, e) { + if (ie && (!cm.state.draggingText || +new Date() - lastDrop < 100)) { + e_stop(e); + return; + } + if (signalDOMEvent(cm, e) || eventInWidget(cm.display, e)) { + return; + } + e.dataTransfer.setData("Text", cm.getSelection()); + e.dataTransfer.effectAllowed = "copyMove"; + + // Use dummy image instead of default browsers image. + // Recent Safari (~6.0.2) have a tendency to segfault when this happens, so we don't do it there. + if (e.dataTransfer.setDragImage && !safari) { + var img = elt("img", null, null, "position: fixed; left: 0; top: 0;"); + img.src = "data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw=="; + if (presto) { + img.width = img.height = 1; + cm.display.wrapper.appendChild(img); + // Force a relayout, or Opera won't use our image for some obscure reason + img._top = img.offsetTop; + } + e.dataTransfer.setDragImage(img, 0, 0); + if (presto) { + img.parentNode.removeChild(img); + } + } + } + function onDragOver(cm, e) { + var pos = posFromMouse(cm, e); + if (!pos) { + return; + } + var frag = document.createDocumentFragment(); + drawSelectionCursor(cm, pos, frag); + if (!cm.display.dragCursor) { + cm.display.dragCursor = elt("div", null, "CodeMirror-cursors CodeMirror-dragcursors"); + cm.display.lineSpace.insertBefore(cm.display.dragCursor, cm.display.cursorDiv); + } + removeChildrenAndAdd(cm.display.dragCursor, frag); + } + function clearDragCursor(cm) { + if (cm.display.dragCursor) { + cm.display.lineSpace.removeChild(cm.display.dragCursor); + cm.display.dragCursor = null; + } + } + + // These must be handled carefully, because naively registering a + // handler for each editor will cause the editors to never be + // garbage collected. + + function forEachCodeMirror(f) { + if (!document.getElementsByClassName) { + return; + } + var byClass = document.getElementsByClassName("CodeMirror"), + editors = []; + for (var i = 0; i < byClass.length; i++) { + var cm = byClass[i].CodeMirror; + if (cm) { + editors.push(cm); + } + } + if (editors.length) { + editors[0].operation(function () { + for (var i = 0; i < editors.length; i++) { + f(editors[i]); + } + }); + } + } + var globalsRegistered = false; + function ensureGlobalHandlers() { + if (globalsRegistered) { + return; + } + registerGlobalHandlers(); + globalsRegistered = true; + } + function registerGlobalHandlers() { + // When the window resizes, we need to refresh active editors. + var resizeTimer; + on(window, "resize", function () { + if (resizeTimer == null) { + resizeTimer = setTimeout(function () { + resizeTimer = null; + forEachCodeMirror(onResize); + }, 100); + } + }); + // When the window loses focus, we want to show the editor as blurred + on(window, "blur", function () { + return forEachCodeMirror(onBlur); + }); + } + // Called when the window resizes + function onResize(cm) { + var d = cm.display; + // Might be a text scaling operation, clear size caches. + d.cachedCharWidth = d.cachedTextHeight = d.cachedPaddingH = null; + d.scrollbarsClipped = false; + cm.setSize(); + } + var keyNames = { + 3: "Pause", + 8: "Backspace", + 9: "Tab", + 13: "Enter", + 16: "Shift", + 17: "Ctrl", + 18: "Alt", + 19: "Pause", + 20: "CapsLock", + 27: "Esc", + 32: "Space", + 33: "PageUp", + 34: "PageDown", + 35: "End", + 36: "Home", + 37: "Left", + 38: "Up", + 39: "Right", + 40: "Down", + 44: "PrintScrn", + 45: "Insert", + 46: "Delete", + 59: ";", + 61: "=", + 91: "Mod", + 92: "Mod", + 93: "Mod", + 106: "*", + 107: "=", + 109: "-", + 110: ".", + 111: "/", + 145: "ScrollLock", + 173: "-", + 186: ";", + 187: "=", + 188: ",", + 189: "-", + 190: ".", + 191: "/", + 192: "`", + 219: "[", + 220: "\\", + 221: "]", + 222: "'", + 224: "Mod", + 63232: "Up", + 63233: "Down", + 63234: "Left", + 63235: "Right", + 63272: "Delete", + 63273: "Home", + 63275: "End", + 63276: "PageUp", + 63277: "PageDown", + 63302: "Insert" + }; + + // Number keys + for (var i = 0; i < 10; i++) { + keyNames[i + 48] = keyNames[i + 96] = String(i); + } + // Alphabetic keys + for (var i$1 = 65; i$1 <= 90; i$1++) { + keyNames[i$1] = String.fromCharCode(i$1); + } + // Function keys + for (var i$2 = 1; i$2 <= 12; i$2++) { + keyNames[i$2 + 111] = keyNames[i$2 + 63235] = "F" + i$2; + } + var keyMap = {}; + keyMap.basic = { + "Left": "goCharLeft", + "Right": "goCharRight", + "Up": "goLineUp", + "Down": "goLineDown", + "End": "goLineEnd", + "Home": "goLineStartSmart", + "PageUp": "goPageUp", + "PageDown": "goPageDown", + "Delete": "delCharAfter", + "Backspace": "delCharBefore", + "Shift-Backspace": "delCharBefore", + "Tab": "defaultTab", + "Shift-Tab": "indentAuto", + "Enter": "newlineAndIndent", + "Insert": "toggleOverwrite", + "Esc": "singleSelection" + }; + // Note that the save and find-related commands aren't defined by + // default. User code or addons can define them. Unknown commands + // are simply ignored. + keyMap.pcDefault = { + "Ctrl-A": "selectAll", + "Ctrl-D": "deleteLine", + "Ctrl-Z": "undo", + "Shift-Ctrl-Z": "redo", + "Ctrl-Y": "redo", + "Ctrl-Home": "goDocStart", + "Ctrl-End": "goDocEnd", + "Ctrl-Up": "goLineUp", + "Ctrl-Down": "goLineDown", + "Ctrl-Left": "goGroupLeft", + "Ctrl-Right": "goGroupRight", + "Alt-Left": "goLineStart", + "Alt-Right": "goLineEnd", + "Ctrl-Backspace": "delGroupBefore", + "Ctrl-Delete": "delGroupAfter", + "Ctrl-S": "save", + "Ctrl-F": "find", + "Ctrl-G": "findNext", + "Shift-Ctrl-G": "findPrev", + "Shift-Ctrl-F": "replace", + "Shift-Ctrl-R": "replaceAll", + "Ctrl-[": "indentLess", + "Ctrl-]": "indentMore", + "Ctrl-U": "undoSelection", + "Shift-Ctrl-U": "redoSelection", + "Alt-U": "redoSelection", + "fallthrough": "basic" + }; + // Very basic readline/emacs-style bindings, which are standard on Mac. + keyMap.emacsy = { + "Ctrl-F": "goCharRight", + "Ctrl-B": "goCharLeft", + "Ctrl-P": "goLineUp", + "Ctrl-N": "goLineDown", + "Ctrl-A": "goLineStart", + "Ctrl-E": "goLineEnd", + "Ctrl-V": "goPageDown", + "Shift-Ctrl-V": "goPageUp", + "Ctrl-D": "delCharAfter", + "Ctrl-H": "delCharBefore", + "Alt-Backspace": "delWordBefore", + "Ctrl-K": "killLine", + "Ctrl-T": "transposeChars", + "Ctrl-O": "openLine" + }; + keyMap.macDefault = { + "Cmd-A": "selectAll", + "Cmd-D": "deleteLine", + "Cmd-Z": "undo", + "Shift-Cmd-Z": "redo", + "Cmd-Y": "redo", + "Cmd-Home": "goDocStart", + "Cmd-Up": "goDocStart", + "Cmd-End": "goDocEnd", + "Cmd-Down": "goDocEnd", + "Alt-Left": "goGroupLeft", + "Alt-Right": "goGroupRight", + "Cmd-Left": "goLineLeft", + "Cmd-Right": "goLineRight", + "Alt-Backspace": "delGroupBefore", + "Ctrl-Alt-Backspace": "delGroupAfter", + "Alt-Delete": "delGroupAfter", + "Cmd-S": "save", + "Cmd-F": "find", + "Cmd-G": "findNext", + "Shift-Cmd-G": "findPrev", + "Cmd-Alt-F": "replace", + "Shift-Cmd-Alt-F": "replaceAll", + "Cmd-[": "indentLess", + "Cmd-]": "indentMore", + "Cmd-Backspace": "delWrappedLineLeft", + "Cmd-Delete": "delWrappedLineRight", + "Cmd-U": "undoSelection", + "Shift-Cmd-U": "redoSelection", + "Ctrl-Up": "goDocStart", + "Ctrl-Down": "goDocEnd", + "fallthrough": ["basic", "emacsy"] + }; + keyMap["default"] = mac ? keyMap.macDefault : keyMap.pcDefault; + + // KEYMAP DISPATCH + + function normalizeKeyName(name) { + var parts = name.split(/-(?!$)/); + name = parts[parts.length - 1]; + var alt, ctrl, shift, cmd; + for (var i = 0; i < parts.length - 1; i++) { + var mod = parts[i]; + if (/^(cmd|meta|m)$/i.test(mod)) { + cmd = true; + } else if (/^a(lt)?$/i.test(mod)) { + alt = true; + } else if (/^(c|ctrl|control)$/i.test(mod)) { + ctrl = true; + } else if (/^s(hift)?$/i.test(mod)) { + shift = true; + } else { + throw new Error("Unrecognized modifier name: " + mod); + } + } + if (alt) { + name = "Alt-" + name; + } + if (ctrl) { + name = "Ctrl-" + name; + } + if (cmd) { + name = "Cmd-" + name; + } + if (shift) { + name = "Shift-" + name; + } + return name; + } + + // This is a kludge to keep keymaps mostly working as raw objects + // (backwards compatibility) while at the same time support features + // like normalization and multi-stroke key bindings. It compiles a + // new normalized keymap, and then updates the old object to reflect + // this. + function normalizeKeyMap(keymap) { + var copy = {}; + for (var keyname in keymap) { + if (keymap.hasOwnProperty(keyname)) { + var value = keymap[keyname]; + if (/^(name|fallthrough|(de|at)tach)$/.test(keyname)) { + continue; + } + if (value == "...") { + delete keymap[keyname]; + continue; + } + var keys = map(keyname.split(" "), normalizeKeyName); + for (var i = 0; i < keys.length; i++) { + var val = void 0, + name = void 0; + if (i == keys.length - 1) { + name = keys.join(" "); + val = value; + } else { + name = keys.slice(0, i + 1).join(" "); + val = "..."; + } + var prev = copy[name]; + if (!prev) { + copy[name] = val; + } else if (prev != val) { + throw new Error("Inconsistent bindings for " + name); + } + } + delete keymap[keyname]; + } + } + for (var prop in copy) { + keymap[prop] = copy[prop]; + } + return keymap; + } + function lookupKey(key, map, handle, context) { + map = getKeyMap(map); + var found = map.call ? map.call(key, context) : map[key]; + if (found === false) { + return "nothing"; + } + if (found === "...") { + return "multi"; + } + if (found != null && handle(found)) { + return "handled"; + } + if (map.fallthrough) { + if (Object.prototype.toString.call(map.fallthrough) != "[object Array]") { + return lookupKey(key, map.fallthrough, handle, context); + } + for (var i = 0; i < map.fallthrough.length; i++) { + var result = lookupKey(key, map.fallthrough[i], handle, context); + if (result) { + return result; + } + } + } + } + + // Modifier key presses don't count as 'real' key presses for the + // purpose of keymap fallthrough. + function isModifierKey(value) { + var name = typeof value == "string" ? value : keyNames[value.keyCode]; + return name == "Ctrl" || name == "Alt" || name == "Shift" || name == "Mod"; + } + function addModifierNames(name, event, noShift) { + var base = name; + if (event.altKey && base != "Alt") { + name = "Alt-" + name; + } + if ((flipCtrlCmd ? event.metaKey : event.ctrlKey) && base != "Ctrl") { + name = "Ctrl-" + name; + } + if ((flipCtrlCmd ? event.ctrlKey : event.metaKey) && base != "Mod") { + name = "Cmd-" + name; + } + if (!noShift && event.shiftKey && base != "Shift") { + name = "Shift-" + name; + } + return name; + } + + // Look up the name of a key as indicated by an event object. + function keyName(event, noShift) { + if (presto && event.keyCode == 34 && event["char"]) { + return false; + } + var name = keyNames[event.keyCode]; + if (name == null || event.altGraphKey) { + return false; + } + // Ctrl-ScrollLock has keyCode 3, same as Ctrl-Pause, + // so we'll use event.code when available (Chrome 48+, FF 38+, Safari 10.1+) + if (event.keyCode == 3 && event.code) { + name = event.code; + } + return addModifierNames(name, event, noShift); + } + function getKeyMap(val) { + return typeof val == "string" ? keyMap[val] : val; + } + + // Helper for deleting text near the selection(s), used to implement + // backspace, delete, and similar functionality. + function deleteNearSelection(cm, compute) { + var ranges = cm.doc.sel.ranges, + kill = []; + // Build up a set of ranges to kill first, merging overlapping + // ranges. + for (var i = 0; i < ranges.length; i++) { + var toKill = compute(ranges[i]); + while (kill.length && cmp(toKill.from, lst(kill).to) <= 0) { + var replaced = kill.pop(); + if (cmp(replaced.from, toKill.from) < 0) { + toKill.from = replaced.from; + break; + } + } + kill.push(toKill); + } + // Next, remove those actual ranges. + runInOp(cm, function () { + for (var i = kill.length - 1; i >= 0; i--) { + replaceRange(cm.doc, "", kill[i].from, kill[i].to, "+delete"); + } + ensureCursorVisible(cm); + }); + } + function moveCharLogically(line, ch, dir) { + var target = skipExtendingChars(line.text, ch + dir, dir); + return target < 0 || target > line.text.length ? null : target; + } + function moveLogically(line, start, dir) { + var ch = moveCharLogically(line, start.ch, dir); + return ch == null ? null : new Pos(start.line, ch, dir < 0 ? "after" : "before"); + } + function endOfLine(visually, cm, lineObj, lineNo, dir) { + if (visually) { + if (cm.doc.direction == "rtl") { + dir = -dir; + } + var order = getOrder(lineObj, cm.doc.direction); + if (order) { + var part = dir < 0 ? lst(order) : order[0]; + var moveInStorageOrder = dir < 0 == (part.level == 1); + var sticky = moveInStorageOrder ? "after" : "before"; + var ch; + // With a wrapped rtl chunk (possibly spanning multiple bidi parts), + // it could be that the last bidi part is not on the last visual line, + // since visual lines contain content order-consecutive chunks. + // Thus, in rtl, we are looking for the first (content-order) character + // in the rtl chunk that is on the last line (that is, the same line + // as the last (content-order) character). + if (part.level > 0 || cm.doc.direction == "rtl") { + var prep = prepareMeasureForLine(cm, lineObj); + ch = dir < 0 ? lineObj.text.length - 1 : 0; + var targetTop = measureCharPrepared(cm, prep, ch).top; + ch = findFirst(function (ch) { + return measureCharPrepared(cm, prep, ch).top == targetTop; + }, dir < 0 == (part.level == 1) ? part.from : part.to - 1, ch); + if (sticky == "before") { + ch = moveCharLogically(lineObj, ch, 1); + } + } else { + ch = dir < 0 ? part.to : part.from; + } + return new Pos(lineNo, ch, sticky); + } + } + return new Pos(lineNo, dir < 0 ? lineObj.text.length : 0, dir < 0 ? "before" : "after"); + } + function moveVisually(cm, line, start, dir) { + var bidi = getOrder(line, cm.doc.direction); + if (!bidi) { + return moveLogically(line, start, dir); + } + if (start.ch >= line.text.length) { + start.ch = line.text.length; + start.sticky = "before"; + } else if (start.ch <= 0) { + start.ch = 0; + start.sticky = "after"; + } + var partPos = getBidiPartAt(bidi, start.ch, start.sticky), + part = bidi[partPos]; + if (cm.doc.direction == "ltr" && part.level % 2 == 0 && (dir > 0 ? part.to > start.ch : part.from < start.ch)) { + // Case 1: We move within an ltr part in an ltr editor. Even with wrapped lines, + // nothing interesting happens. + return moveLogically(line, start, dir); + } + var mv = function (pos, dir) { + return moveCharLogically(line, pos instanceof Pos ? pos.ch : pos, dir); + }; + var prep; + var getWrappedLineExtent = function (ch) { + if (!cm.options.lineWrapping) { + return { + begin: 0, + end: line.text.length + }; + } + prep = prep || prepareMeasureForLine(cm, line); + return wrappedLineExtentChar(cm, line, prep, ch); + }; + var wrappedLineExtent = getWrappedLineExtent(start.sticky == "before" ? mv(start, -1) : start.ch); + if (cm.doc.direction == "rtl" || part.level == 1) { + var moveInStorageOrder = part.level == 1 == dir < 0; + var ch = mv(start, moveInStorageOrder ? 1 : -1); + if (ch != null && (!moveInStorageOrder ? ch >= part.from && ch >= wrappedLineExtent.begin : ch <= part.to && ch <= wrappedLineExtent.end)) { + // Case 2: We move within an rtl part or in an rtl editor on the same visual line + var sticky = moveInStorageOrder ? "before" : "after"; + return new Pos(start.line, ch, sticky); + } + } + + // Case 3: Could not move within this bidi part in this visual line, so leave + // the current bidi part + + var searchInVisualLine = function (partPos, dir, wrappedLineExtent) { + var getRes = function (ch, moveInStorageOrder) { + return moveInStorageOrder ? new Pos(start.line, mv(ch, 1), "before") : new Pos(start.line, ch, "after"); + }; + for (; partPos >= 0 && partPos < bidi.length; partPos += dir) { + var part = bidi[partPos]; + var moveInStorageOrder = dir > 0 == (part.level != 1); + var ch = moveInStorageOrder ? wrappedLineExtent.begin : mv(wrappedLineExtent.end, -1); + if (part.from <= ch && ch < part.to) { + return getRes(ch, moveInStorageOrder); + } + ch = moveInStorageOrder ? part.from : mv(part.to, -1); + if (wrappedLineExtent.begin <= ch && ch < wrappedLineExtent.end) { + return getRes(ch, moveInStorageOrder); + } + } + }; + + // Case 3a: Look for other bidi parts on the same visual line + var res = searchInVisualLine(partPos + dir, dir, wrappedLineExtent); + if (res) { + return res; + } + + // Case 3b: Look for other bidi parts on the next visual line + var nextCh = dir > 0 ? wrappedLineExtent.end : mv(wrappedLineExtent.begin, -1); + if (nextCh != null && !(dir > 0 && nextCh == line.text.length)) { + res = searchInVisualLine(dir > 0 ? 0 : bidi.length - 1, dir, getWrappedLineExtent(nextCh)); + if (res) { + return res; + } + } + + // Case 4: Nowhere to move + return null; + } + + // Commands are parameter-less actions that can be performed on an + // editor, mostly used for keybindings. + var commands = { + selectAll: selectAll, + singleSelection: function (cm) { + return cm.setSelection(cm.getCursor("anchor"), cm.getCursor("head"), sel_dontScroll); + }, + killLine: function (cm) { + return deleteNearSelection(cm, function (range) { + if (range.empty()) { + var len = getLine(cm.doc, range.head.line).text.length; + if (range.head.ch == len && range.head.line < cm.lastLine()) { + return { + from: range.head, + to: Pos(range.head.line + 1, 0) + }; + } else { + return { + from: range.head, + to: Pos(range.head.line, len) + }; + } + } else { + return { + from: range.from(), + to: range.to() + }; + } + }); + }, + deleteLine: function (cm) { + return deleteNearSelection(cm, function (range) { + return { + from: Pos(range.from().line, 0), + to: clipPos(cm.doc, Pos(range.to().line + 1, 0)) + }; + }); + }, + delLineLeft: function (cm) { + return deleteNearSelection(cm, function (range) { + return { + from: Pos(range.from().line, 0), + to: range.from() + }; + }); + }, + delWrappedLineLeft: function (cm) { + return deleteNearSelection(cm, function (range) { + var top = cm.charCoords(range.head, "div").top + 5; + var leftPos = cm.coordsChar({ + left: 0, + top: top + }, "div"); + return { + from: leftPos, + to: range.from() + }; + }); + }, + delWrappedLineRight: function (cm) { + return deleteNearSelection(cm, function (range) { + var top = cm.charCoords(range.head, "div").top + 5; + var rightPos = cm.coordsChar({ + left: cm.display.lineDiv.offsetWidth + 100, + top: top + }, "div"); + return { + from: range.from(), + to: rightPos + }; + }); + }, + undo: function (cm) { + return cm.undo(); + }, + redo: function (cm) { + return cm.redo(); + }, + undoSelection: function (cm) { + return cm.undoSelection(); + }, + redoSelection: function (cm) { + return cm.redoSelection(); + }, + goDocStart: function (cm) { + return cm.extendSelection(Pos(cm.firstLine(), 0)); + }, + goDocEnd: function (cm) { + return cm.extendSelection(Pos(cm.lastLine())); + }, + goLineStart: function (cm) { + return cm.extendSelectionsBy(function (range) { + return lineStart(cm, range.head.line); + }, { + origin: "+move", + bias: 1 + }); + }, + goLineStartSmart: function (cm) { + return cm.extendSelectionsBy(function (range) { + return lineStartSmart(cm, range.head); + }, { + origin: "+move", + bias: 1 + }); + }, + goLineEnd: function (cm) { + return cm.extendSelectionsBy(function (range) { + return lineEnd(cm, range.head.line); + }, { + origin: "+move", + bias: -1 + }); + }, + goLineRight: function (cm) { + return cm.extendSelectionsBy(function (range) { + var top = cm.cursorCoords(range.head, "div").top + 5; + return cm.coordsChar({ + left: cm.display.lineDiv.offsetWidth + 100, + top: top + }, "div"); + }, sel_move); + }, + goLineLeft: function (cm) { + return cm.extendSelectionsBy(function (range) { + var top = cm.cursorCoords(range.head, "div").top + 5; + return cm.coordsChar({ + left: 0, + top: top + }, "div"); + }, sel_move); + }, + goLineLeftSmart: function (cm) { + return cm.extendSelectionsBy(function (range) { + var top = cm.cursorCoords(range.head, "div").top + 5; + var pos = cm.coordsChar({ + left: 0, + top: top + }, "div"); + if (pos.ch < cm.getLine(pos.line).search(/\S/)) { + return lineStartSmart(cm, range.head); + } + return pos; + }, sel_move); + }, + goLineUp: function (cm) { + return cm.moveV(-1, "line"); + }, + goLineDown: function (cm) { + return cm.moveV(1, "line"); + }, + goPageUp: function (cm) { + return cm.moveV(-1, "page"); + }, + goPageDown: function (cm) { + return cm.moveV(1, "page"); + }, + goCharLeft: function (cm) { + return cm.moveH(-1, "char"); + }, + goCharRight: function (cm) { + return cm.moveH(1, "char"); + }, + goColumnLeft: function (cm) { + return cm.moveH(-1, "column"); + }, + goColumnRight: function (cm) { + return cm.moveH(1, "column"); + }, + goWordLeft: function (cm) { + return cm.moveH(-1, "word"); + }, + goGroupRight: function (cm) { + return cm.moveH(1, "group"); + }, + goGroupLeft: function (cm) { + return cm.moveH(-1, "group"); + }, + goWordRight: function (cm) { + return cm.moveH(1, "word"); + }, + delCharBefore: function (cm) { + return cm.deleteH(-1, "codepoint"); + }, + delCharAfter: function (cm) { + return cm.deleteH(1, "char"); + }, + delWordBefore: function (cm) { + return cm.deleteH(-1, "word"); + }, + delWordAfter: function (cm) { + return cm.deleteH(1, "word"); + }, + delGroupBefore: function (cm) { + return cm.deleteH(-1, "group"); + }, + delGroupAfter: function (cm) { + return cm.deleteH(1, "group"); + }, + indentAuto: function (cm) { + return cm.indentSelection("smart"); + }, + indentMore: function (cm) { + return cm.indentSelection("add"); + }, + indentLess: function (cm) { + return cm.indentSelection("subtract"); + }, + insertTab: function (cm) { + return cm.replaceSelection("\t"); + }, + insertSoftTab: function (cm) { + var spaces = [], + ranges = cm.listSelections(), + tabSize = cm.options.tabSize; + for (var i = 0; i < ranges.length; i++) { + var pos = ranges[i].from(); + var col = countColumn(cm.getLine(pos.line), pos.ch, tabSize); + spaces.push(spaceStr(tabSize - col % tabSize)); + } + cm.replaceSelections(spaces); + }, + defaultTab: function (cm) { + if (cm.somethingSelected()) { + cm.indentSelection("add"); + } else { + cm.execCommand("insertTab"); + } + }, + // Swap the two chars left and right of each selection's head. + // Move cursor behind the two swapped characters afterwards. + // + // Doesn't consider line feeds a character. + // Doesn't scan more than one line above to find a character. + // Doesn't do anything on an empty line. + // Doesn't do anything with non-empty selections. + transposeChars: function (cm) { + return runInOp(cm, function () { + var ranges = cm.listSelections(), + newSel = []; + for (var i = 0; i < ranges.length; i++) { + if (!ranges[i].empty()) { + continue; + } + var cur = ranges[i].head, + line = getLine(cm.doc, cur.line).text; + if (line) { + if (cur.ch == line.length) { + cur = new Pos(cur.line, cur.ch - 1); + } + if (cur.ch > 0) { + cur = new Pos(cur.line, cur.ch + 1); + cm.replaceRange(line.charAt(cur.ch - 1) + line.charAt(cur.ch - 2), Pos(cur.line, cur.ch - 2), cur, "+transpose"); + } else if (cur.line > cm.doc.first) { + var prev = getLine(cm.doc, cur.line - 1).text; + if (prev) { + cur = new Pos(cur.line, 1); + cm.replaceRange(line.charAt(0) + cm.doc.lineSeparator() + prev.charAt(prev.length - 1), Pos(cur.line - 1, prev.length - 1), cur, "+transpose"); + } + } + } + newSel.push(new Range(cur, cur)); + } + cm.setSelections(newSel); + }); + }, + newlineAndIndent: function (cm) { + return runInOp(cm, function () { + var sels = cm.listSelections(); + for (var i = sels.length - 1; i >= 0; i--) { + cm.replaceRange(cm.doc.lineSeparator(), sels[i].anchor, sels[i].head, "+input"); + } + sels = cm.listSelections(); + for (var i$1 = 0; i$1 < sels.length; i$1++) { + cm.indentLine(sels[i$1].from().line, null, true); + } + ensureCursorVisible(cm); + }); + }, + openLine: function (cm) { + return cm.replaceSelection("\n", "start"); + }, + toggleOverwrite: function (cm) { + return cm.toggleOverwrite(); + } + }; + function lineStart(cm, lineN) { + var line = getLine(cm.doc, lineN); + var visual = visualLine(line); + if (visual != line) { + lineN = lineNo(visual); + } + return endOfLine(true, cm, visual, lineN, 1); + } + function lineEnd(cm, lineN) { + var line = getLine(cm.doc, lineN); + var visual = visualLineEnd(line); + if (visual != line) { + lineN = lineNo(visual); + } + return endOfLine(true, cm, line, lineN, -1); + } + function lineStartSmart(cm, pos) { + var start = lineStart(cm, pos.line); + var line = getLine(cm.doc, start.line); + var order = getOrder(line, cm.doc.direction); + if (!order || order[0].level == 0) { + var firstNonWS = Math.max(start.ch, line.text.search(/\S/)); + var inWS = pos.line == start.line && pos.ch <= firstNonWS && pos.ch; + return Pos(start.line, inWS ? 0 : firstNonWS, start.sticky); + } + return start; + } + + // Run a handler that was bound to a key. + function doHandleBinding(cm, bound, dropShift) { + if (typeof bound == "string") { + bound = commands[bound]; + if (!bound) { + return false; + } + } + // Ensure previous input has been read, so that the handler sees a + // consistent view of the document + cm.display.input.ensurePolled(); + var prevShift = cm.display.shift, + done = false; + try { + if (cm.isReadOnly()) { + cm.state.suppressEdits = true; + } + if (dropShift) { + cm.display.shift = false; + } + done = bound(cm) != Pass; + } finally { + cm.display.shift = prevShift; + cm.state.suppressEdits = false; + } + return done; + } + function lookupKeyForEditor(cm, name, handle) { + for (var i = 0; i < cm.state.keyMaps.length; i++) { + var result = lookupKey(name, cm.state.keyMaps[i], handle, cm); + if (result) { + return result; + } + } + return cm.options.extraKeys && lookupKey(name, cm.options.extraKeys, handle, cm) || lookupKey(name, cm.options.keyMap, handle, cm); + } + + // Note that, despite the name, this function is also used to check + // for bound mouse clicks. + + var stopSeq = new Delayed(); + function dispatchKey(cm, name, e, handle) { + var seq = cm.state.keySeq; + if (seq) { + if (isModifierKey(name)) { + return "handled"; + } + if (/\'$/.test(name)) { + cm.state.keySeq = null; + } else { + stopSeq.set(50, function () { + if (cm.state.keySeq == seq) { + cm.state.keySeq = null; + cm.display.input.reset(); + } + }); + } + if (dispatchKeyInner(cm, seq + " " + name, e, handle)) { + return true; + } + } + return dispatchKeyInner(cm, name, e, handle); + } + function dispatchKeyInner(cm, name, e, handle) { + var result = lookupKeyForEditor(cm, name, handle); + if (result == "multi") { + cm.state.keySeq = name; + } + if (result == "handled") { + signalLater(cm, "keyHandled", cm, name, e); + } + if (result == "handled" || result == "multi") { + e_preventDefault(e); + restartBlink(cm); + } + return !!result; + } + + // Handle a key from the keydown event. + function handleKeyBinding(cm, e) { + var name = keyName(e, true); + if (!name) { + return false; + } + if (e.shiftKey && !cm.state.keySeq) { + // First try to resolve full name (including 'Shift-'). Failing + // that, see if there is a cursor-motion command (starting with + // 'go') bound to the keyname without 'Shift-'. + return dispatchKey(cm, "Shift-" + name, e, function (b) { + return doHandleBinding(cm, b, true); + }) || dispatchKey(cm, name, e, function (b) { + if (typeof b == "string" ? /^go[A-Z]/.test(b) : b.motion) { + return doHandleBinding(cm, b); + } + }); + } else { + return dispatchKey(cm, name, e, function (b) { + return doHandleBinding(cm, b); + }); + } + } + + // Handle a key from the keypress event + function handleCharBinding(cm, e, ch) { + return dispatchKey(cm, "'" + ch + "'", e, function (b) { + return doHandleBinding(cm, b, true); + }); + } + var lastStoppedKey = null; + function onKeyDown(e) { + var cm = this; + if (e.target && e.target != cm.display.input.getField()) { + return; + } + cm.curOp.focus = activeElt(); + if (signalDOMEvent(cm, e)) { + return; + } + // IE does strange things with escape. + if (ie && ie_version < 11 && e.keyCode == 27) { + e.returnValue = false; + } + var code = e.keyCode; + cm.display.shift = code == 16 || e.shiftKey; + var handled = handleKeyBinding(cm, e); + if (presto) { + lastStoppedKey = handled ? code : null; + // Opera has no cut event... we try to at least catch the key combo + if (!handled && code == 88 && !hasCopyEvent && (mac ? e.metaKey : e.ctrlKey)) { + cm.replaceSelection("", null, "cut"); + } + } + if (gecko && !mac && !handled && code == 46 && e.shiftKey && !e.ctrlKey && document.execCommand) { + document.execCommand("cut"); + } + + // Turn mouse into crosshair when Alt is held on Mac. + if (code == 18 && !/\bCodeMirror-crosshair\b/.test(cm.display.lineDiv.className)) { + showCrossHair(cm); + } + } + function showCrossHair(cm) { + var lineDiv = cm.display.lineDiv; + addClass(lineDiv, "CodeMirror-crosshair"); + function up(e) { + if (e.keyCode == 18 || !e.altKey) { + rmClass(lineDiv, "CodeMirror-crosshair"); + off(document, "keyup", up); + off(document, "mouseover", up); + } + } + on(document, "keyup", up); + on(document, "mouseover", up); + } + function onKeyUp(e) { + if (e.keyCode == 16) { + this.doc.sel.shift = false; + } + signalDOMEvent(this, e); + } + function onKeyPress(e) { + var cm = this; + if (e.target && e.target != cm.display.input.getField()) { + return; + } + if (eventInWidget(cm.display, e) || signalDOMEvent(cm, e) || e.ctrlKey && !e.altKey || mac && e.metaKey) { + return; + } + var keyCode = e.keyCode, + charCode = e.charCode; + if (presto && keyCode == lastStoppedKey) { + lastStoppedKey = null; + e_preventDefault(e); + return; + } + if (presto && (!e.which || e.which < 10) && handleKeyBinding(cm, e)) { + return; + } + var ch = String.fromCharCode(charCode == null ? keyCode : charCode); + // Some browsers fire keypress events for backspace + if (ch == "\x08") { + return; + } + if (handleCharBinding(cm, e, ch)) { + return; + } + cm.display.input.onKeyPress(e); + } + var DOUBLECLICK_DELAY = 400; + var PastClick = function (time, pos, button) { + this.time = time; + this.pos = pos; + this.button = button; + }; + PastClick.prototype.compare = function (time, pos, button) { + return this.time + DOUBLECLICK_DELAY > time && cmp(pos, this.pos) == 0 && button == this.button; + }; + var lastClick, lastDoubleClick; + function clickRepeat(pos, button) { + var now = +new Date(); + if (lastDoubleClick && lastDoubleClick.compare(now, pos, button)) { + lastClick = lastDoubleClick = null; + return "triple"; + } else if (lastClick && lastClick.compare(now, pos, button)) { + lastDoubleClick = new PastClick(now, pos, button); + lastClick = null; + return "double"; + } else { + lastClick = new PastClick(now, pos, button); + lastDoubleClick = null; + return "single"; + } + } + + // A mouse down can be a single click, double click, triple click, + // start of selection drag, start of text drag, new cursor + // (ctrl-click), rectangle drag (alt-drag), or xwin + // middle-click-paste. Or it might be a click on something we should + // not interfere with, such as a scrollbar or widget. + function onMouseDown(e) { + var cm = this, + display = cm.display; + if (signalDOMEvent(cm, e) || display.activeTouch && display.input.supportsTouch()) { + return; + } + display.input.ensurePolled(); + display.shift = e.shiftKey; + if (eventInWidget(display, e)) { + if (!webkit) { + // Briefly turn off draggability, to allow widgets to do + // normal dragging things. + display.scroller.draggable = false; + setTimeout(function () { + return display.scroller.draggable = true; + }, 100); + } + return; + } + if (clickInGutter(cm, e)) { + return; + } + var pos = posFromMouse(cm, e), + button = e_button(e), + repeat = pos ? clickRepeat(pos, button) : "single"; + window.focus(); + + // #3261: make sure, that we're not starting a second selection + if (button == 1 && cm.state.selectingText) { + cm.state.selectingText(e); + } + if (pos && handleMappedButton(cm, button, pos, repeat, e)) { + return; + } + if (button == 1) { + if (pos) { + leftButtonDown(cm, pos, repeat, e); + } else if (e_target(e) == display.scroller) { + e_preventDefault(e); + } + } else if (button == 2) { + if (pos) { + extendSelection(cm.doc, pos); + } + setTimeout(function () { + return display.input.focus(); + }, 20); + } else if (button == 3) { + if (captureRightClick) { + cm.display.input.onContextMenu(e); + } else { + delayBlurEvent(cm); + } + } + } + function handleMappedButton(cm, button, pos, repeat, event) { + var name = "Click"; + if (repeat == "double") { + name = "Double" + name; + } else if (repeat == "triple") { + name = "Triple" + name; + } + name = (button == 1 ? "Left" : button == 2 ? "Middle" : "Right") + name; + return dispatchKey(cm, addModifierNames(name, event), event, function (bound) { + if (typeof bound == "string") { + bound = commands[bound]; + } + if (!bound) { + return false; + } + var done = false; + try { + if (cm.isReadOnly()) { + cm.state.suppressEdits = true; + } + done = bound(cm, pos) != Pass; + } finally { + cm.state.suppressEdits = false; + } + return done; + }); + } + function configureMouse(cm, repeat, event) { + var option = cm.getOption("configureMouse"); + var value = option ? option(cm, repeat, event) : {}; + if (value.unit == null) { + var rect = chromeOS ? event.shiftKey && event.metaKey : event.altKey; + value.unit = rect ? "rectangle" : repeat == "single" ? "char" : repeat == "double" ? "word" : "line"; + } + if (value.extend == null || cm.doc.extend) { + value.extend = cm.doc.extend || event.shiftKey; + } + if (value.addNew == null) { + value.addNew = mac ? event.metaKey : event.ctrlKey; + } + if (value.moveOnDrag == null) { + value.moveOnDrag = !(mac ? event.altKey : event.ctrlKey); + } + return value; + } + function leftButtonDown(cm, pos, repeat, event) { + if (ie) { + setTimeout(bind(ensureFocus, cm), 0); + } else { + cm.curOp.focus = activeElt(); + } + var behavior = configureMouse(cm, repeat, event); + var sel = cm.doc.sel, + contained; + if (cm.options.dragDrop && dragAndDrop && !cm.isReadOnly() && repeat == "single" && (contained = sel.contains(pos)) > -1 && (cmp((contained = sel.ranges[contained]).from(), pos) < 0 || pos.xRel > 0) && (cmp(contained.to(), pos) > 0 || pos.xRel < 0)) { + leftButtonStartDrag(cm, event, pos, behavior); + } else { + leftButtonSelect(cm, event, pos, behavior); + } + } + + // Start a text drag. When it ends, see if any dragging actually + // happen, and treat as a click if it didn't. + function leftButtonStartDrag(cm, event, pos, behavior) { + var display = cm.display, + moved = false; + var dragEnd = operation(cm, function (e) { + if (webkit) { + display.scroller.draggable = false; + } + cm.state.draggingText = false; + if (cm.state.delayingBlurEvent) { + if (cm.hasFocus()) { + cm.state.delayingBlurEvent = false; + } else { + delayBlurEvent(cm); + } + } + off(display.wrapper.ownerDocument, "mouseup", dragEnd); + off(display.wrapper.ownerDocument, "mousemove", mouseMove); + off(display.scroller, "dragstart", dragStart); + off(display.scroller, "drop", dragEnd); + if (!moved) { + e_preventDefault(e); + if (!behavior.addNew) { + extendSelection(cm.doc, pos, null, null, behavior.extend); + } + // Work around unexplainable focus problem in IE9 (#2127) and Chrome (#3081) + if (webkit && !safari || ie && ie_version == 9) { + setTimeout(function () { + display.wrapper.ownerDocument.body.focus({ + preventScroll: true + }); + display.input.focus(); + }, 20); + } else { + display.input.focus(); + } + } + }); + var mouseMove = function (e2) { + moved = moved || Math.abs(event.clientX - e2.clientX) + Math.abs(event.clientY - e2.clientY) >= 10; + }; + var dragStart = function () { + return moved = true; + }; + // Let the drag handler handle this. + if (webkit) { + display.scroller.draggable = true; + } + cm.state.draggingText = dragEnd; + dragEnd.copy = !behavior.moveOnDrag; + on(display.wrapper.ownerDocument, "mouseup", dragEnd); + on(display.wrapper.ownerDocument, "mousemove", mouseMove); + on(display.scroller, "dragstart", dragStart); + on(display.scroller, "drop", dragEnd); + cm.state.delayingBlurEvent = true; + setTimeout(function () { + return display.input.focus(); + }, 20); + // IE's approach to draggable + if (display.scroller.dragDrop) { + display.scroller.dragDrop(); + } + } + function rangeForUnit(cm, pos, unit) { + if (unit == "char") { + return new Range(pos, pos); + } + if (unit == "word") { + return cm.findWordAt(pos); + } + if (unit == "line") { + return new Range(Pos(pos.line, 0), clipPos(cm.doc, Pos(pos.line + 1, 0))); + } + var result = unit(cm, pos); + return new Range(result.from, result.to); + } + + // Normal selection, as opposed to text dragging. + function leftButtonSelect(cm, event, start, behavior) { + if (ie) { + delayBlurEvent(cm); + } + var display = cm.display, + doc = cm.doc; + e_preventDefault(event); + var ourRange, + ourIndex, + startSel = doc.sel, + ranges = startSel.ranges; + if (behavior.addNew && !behavior.extend) { + ourIndex = doc.sel.contains(start); + if (ourIndex > -1) { + ourRange = ranges[ourIndex]; + } else { + ourRange = new Range(start, start); + } + } else { + ourRange = doc.sel.primary(); + ourIndex = doc.sel.primIndex; + } + if (behavior.unit == "rectangle") { + if (!behavior.addNew) { + ourRange = new Range(start, start); + } + start = posFromMouse(cm, event, true, true); + ourIndex = -1; + } else { + var range = rangeForUnit(cm, start, behavior.unit); + if (behavior.extend) { + ourRange = extendRange(ourRange, range.anchor, range.head, behavior.extend); + } else { + ourRange = range; + } + } + if (!behavior.addNew) { + ourIndex = 0; + setSelection(doc, new Selection([ourRange], 0), sel_mouse); + startSel = doc.sel; + } else if (ourIndex == -1) { + ourIndex = ranges.length; + setSelection(doc, normalizeSelection(cm, ranges.concat([ourRange]), ourIndex), { + scroll: false, + origin: "*mouse" + }); + } else if (ranges.length > 1 && ranges[ourIndex].empty() && behavior.unit == "char" && !behavior.extend) { + setSelection(doc, normalizeSelection(cm, ranges.slice(0, ourIndex).concat(ranges.slice(ourIndex + 1)), 0), { + scroll: false, + origin: "*mouse" + }); + startSel = doc.sel; + } else { + replaceOneSelection(doc, ourIndex, ourRange, sel_mouse); + } + var lastPos = start; + function extendTo(pos) { + if (cmp(lastPos, pos) == 0) { + return; + } + lastPos = pos; + if (behavior.unit == "rectangle") { + var ranges = [], + tabSize = cm.options.tabSize; + var startCol = countColumn(getLine(doc, start.line).text, start.ch, tabSize); + var posCol = countColumn(getLine(doc, pos.line).text, pos.ch, tabSize); + var left = Math.min(startCol, posCol), + right = Math.max(startCol, posCol); + for (var line = Math.min(start.line, pos.line), end = Math.min(cm.lastLine(), Math.max(start.line, pos.line)); line <= end; line++) { + var text = getLine(doc, line).text, + leftPos = findColumn(text, left, tabSize); + if (left == right) { + ranges.push(new Range(Pos(line, leftPos), Pos(line, leftPos))); + } else if (text.length > leftPos) { + ranges.push(new Range(Pos(line, leftPos), Pos(line, findColumn(text, right, tabSize)))); + } + } + if (!ranges.length) { + ranges.push(new Range(start, start)); + } + setSelection(doc, normalizeSelection(cm, startSel.ranges.slice(0, ourIndex).concat(ranges), ourIndex), { + origin: "*mouse", + scroll: false + }); + cm.scrollIntoView(pos); + } else { + var oldRange = ourRange; + var range = rangeForUnit(cm, pos, behavior.unit); + var anchor = oldRange.anchor, + head; + if (cmp(range.anchor, anchor) > 0) { + head = range.head; + anchor = minPos(oldRange.from(), range.anchor); + } else { + head = range.anchor; + anchor = maxPos(oldRange.to(), range.head); + } + var ranges$1 = startSel.ranges.slice(0); + ranges$1[ourIndex] = bidiSimplify(cm, new Range(clipPos(doc, anchor), head)); + setSelection(doc, normalizeSelection(cm, ranges$1, ourIndex), sel_mouse); + } + } + var editorSize = display.wrapper.getBoundingClientRect(); + // Used to ensure timeout re-tries don't fire when another extend + // happened in the meantime (clearTimeout isn't reliable -- at + // least on Chrome, the timeouts still happen even when cleared, + // if the clear happens after their scheduled firing time). + var counter = 0; + function extend(e) { + var curCount = ++counter; + var cur = posFromMouse(cm, e, true, behavior.unit == "rectangle"); + if (!cur) { + return; + } + if (cmp(cur, lastPos) != 0) { + cm.curOp.focus = activeElt(); + extendTo(cur); + var visible = visibleLines(display, doc); + if (cur.line >= visible.to || cur.line < visible.from) { + setTimeout(operation(cm, function () { + if (counter == curCount) { + extend(e); + } + }), 150); + } + } else { + var outside = e.clientY < editorSize.top ? -20 : e.clientY > editorSize.bottom ? 20 : 0; + if (outside) { + setTimeout(operation(cm, function () { + if (counter != curCount) { + return; + } + display.scroller.scrollTop += outside; + extend(e); + }), 50); + } + } + } + function done(e) { + cm.state.selectingText = false; + counter = Infinity; + // If e is null or undefined we interpret this as someone trying + // to explicitly cancel the selection rather than the user + // letting go of the mouse button. + if (e) { + e_preventDefault(e); + display.input.focus(); + } + off(display.wrapper.ownerDocument, "mousemove", move); + off(display.wrapper.ownerDocument, "mouseup", up); + doc.history.lastSelOrigin = null; + } + var move = operation(cm, function (e) { + if (e.buttons === 0 || !e_button(e)) { + done(e); + } else { + extend(e); + } + }); + var up = operation(cm, done); + cm.state.selectingText = up; + on(display.wrapper.ownerDocument, "mousemove", move); + on(display.wrapper.ownerDocument, "mouseup", up); + } + + // Used when mouse-selecting to adjust the anchor to the proper side + // of a bidi jump depending on the visual position of the head. + function bidiSimplify(cm, range) { + var anchor = range.anchor; + var head = range.head; + var anchorLine = getLine(cm.doc, anchor.line); + if (cmp(anchor, head) == 0 && anchor.sticky == head.sticky) { + return range; + } + var order = getOrder(anchorLine); + if (!order) { + return range; + } + var index = getBidiPartAt(order, anchor.ch, anchor.sticky), + part = order[index]; + if (part.from != anchor.ch && part.to != anchor.ch) { + return range; + } + var boundary = index + (part.from == anchor.ch == (part.level != 1) ? 0 : 1); + if (boundary == 0 || boundary == order.length) { + return range; + } + + // Compute the relative visual position of the head compared to the + // anchor (<0 is to the left, >0 to the right) + var leftSide; + if (head.line != anchor.line) { + leftSide = (head.line - anchor.line) * (cm.doc.direction == "ltr" ? 1 : -1) > 0; + } else { + var headIndex = getBidiPartAt(order, head.ch, head.sticky); + var dir = headIndex - index || (head.ch - anchor.ch) * (part.level == 1 ? -1 : 1); + if (headIndex == boundary - 1 || headIndex == boundary) { + leftSide = dir < 0; + } else { + leftSide = dir > 0; + } + } + var usePart = order[boundary + (leftSide ? -1 : 0)]; + var from = leftSide == (usePart.level == 1); + var ch = from ? usePart.from : usePart.to, + sticky = from ? "after" : "before"; + return anchor.ch == ch && anchor.sticky == sticky ? range : new Range(new Pos(anchor.line, ch, sticky), head); + } + + // Determines whether an event happened in the gutter, and fires the + // handlers for the corresponding event. + function gutterEvent(cm, e, type, prevent) { + var mX, mY; + if (e.touches) { + mX = e.touches[0].clientX; + mY = e.touches[0].clientY; + } else { + try { + mX = e.clientX; + mY = e.clientY; + } catch (e$1) { + return false; + } + } + if (mX >= Math.floor(cm.display.gutters.getBoundingClientRect().right)) { + return false; + } + if (prevent) { + e_preventDefault(e); + } + var display = cm.display; + var lineBox = display.lineDiv.getBoundingClientRect(); + if (mY > lineBox.bottom || !hasHandler(cm, type)) { + return e_defaultPrevented(e); + } + mY -= lineBox.top - display.viewOffset; + for (var i = 0; i < cm.display.gutterSpecs.length; ++i) { + var g = display.gutters.childNodes[i]; + if (g && g.getBoundingClientRect().right >= mX) { + var line = lineAtHeight(cm.doc, mY); + var gutter = cm.display.gutterSpecs[i]; + signal(cm, type, cm, line, gutter.className, e); + return e_defaultPrevented(e); + } + } + } + function clickInGutter(cm, e) { + return gutterEvent(cm, e, "gutterClick", true); + } + + // CONTEXT MENU HANDLING + + // To make the context menu work, we need to briefly unhide the + // textarea (making it as unobtrusive as possible) to let the + // right-click take effect on it. + function onContextMenu(cm, e) { + if (eventInWidget(cm.display, e) || contextMenuInGutter(cm, e)) { + return; + } + if (signalDOMEvent(cm, e, "contextmenu")) { + return; + } + if (!captureRightClick) { + cm.display.input.onContextMenu(e); + } + } + function contextMenuInGutter(cm, e) { + if (!hasHandler(cm, "gutterContextMenu")) { + return false; + } + return gutterEvent(cm, e, "gutterContextMenu", false); + } + function themeChanged(cm) { + cm.display.wrapper.className = cm.display.wrapper.className.replace(/\s*cm-s-\S+/g, "") + cm.options.theme.replace(/(^|\s)\s*/g, " cm-s-"); + clearCaches(cm); + } + var Init = { + toString: function () { + return "CodeMirror.Init"; + } + }; + var defaults = {}; + var optionHandlers = {}; + function defineOptions(CodeMirror) { + var optionHandlers = CodeMirror.optionHandlers; + function option(name, deflt, handle, notOnInit) { + CodeMirror.defaults[name] = deflt; + if (handle) { + optionHandlers[name] = notOnInit ? function (cm, val, old) { + if (old != Init) { + handle(cm, val, old); + } + } : handle; + } + } + CodeMirror.defineOption = option; + + // Passed to option handlers when there is no old value. + CodeMirror.Init = Init; + + // These two are, on init, called from the constructor because they + // have to be initialized before the editor can start at all. + option("value", "", function (cm, val) { + return cm.setValue(val); + }, true); + option("mode", null, function (cm, val) { + cm.doc.modeOption = val; + loadMode(cm); + }, true); + option("indentUnit", 2, loadMode, true); + option("indentWithTabs", false); + option("smartIndent", true); + option("tabSize", 4, function (cm) { + resetModeState(cm); + clearCaches(cm); + regChange(cm); + }, true); + option("lineSeparator", null, function (cm, val) { + cm.doc.lineSep = val; + if (!val) { + return; + } + var newBreaks = [], + lineNo = cm.doc.first; + cm.doc.iter(function (line) { + for (var pos = 0;;) { + var found = line.text.indexOf(val, pos); + if (found == -1) { + break; + } + pos = found + val.length; + newBreaks.push(Pos(lineNo, found)); + } + lineNo++; + }); + for (var i = newBreaks.length - 1; i >= 0; i--) { + replaceRange(cm.doc, val, newBreaks[i], Pos(newBreaks[i].line, newBreaks[i].ch + val.length)); + } + }); + option("specialChars", /[\u0000-\u001f\u007f-\u009f\u00ad\u061c\u200b\u200e\u200f\u2028\u2029\ufeff\ufff9-\ufffc]/g, function (cm, val, old) { + cm.state.specialChars = new RegExp(val.source + (val.test("\t") ? "" : "|\t"), "g"); + if (old != Init) { + cm.refresh(); + } + }); + option("specialCharPlaceholder", defaultSpecialCharPlaceholder, function (cm) { + return cm.refresh(); + }, true); + option("electricChars", true); + option("inputStyle", mobile ? "contenteditable" : "textarea", function () { + throw new Error("inputStyle can not (yet) be changed in a running editor"); // FIXME + }, true); + option("spellcheck", false, function (cm, val) { + return cm.getInputField().spellcheck = val; + }, true); + option("autocorrect", false, function (cm, val) { + return cm.getInputField().autocorrect = val; + }, true); + option("autocapitalize", false, function (cm, val) { + return cm.getInputField().autocapitalize = val; + }, true); + option("rtlMoveVisually", !windows); + option("wholeLineUpdateBefore", true); + option("theme", "default", function (cm) { + themeChanged(cm); + updateGutters(cm); + }, true); + option("keyMap", "default", function (cm, val, old) { + var next = getKeyMap(val); + var prev = old != Init && getKeyMap(old); + if (prev && prev.detach) { + prev.detach(cm, next); + } + if (next.attach) { + next.attach(cm, prev || null); + } + }); + option("extraKeys", null); + option("configureMouse", null); + option("lineWrapping", false, wrappingChanged, true); + option("gutters", [], function (cm, val) { + cm.display.gutterSpecs = getGutters(val, cm.options.lineNumbers); + updateGutters(cm); + }, true); + option("fixedGutter", true, function (cm, val) { + cm.display.gutters.style.left = val ? compensateForHScroll(cm.display) + "px" : "0"; + cm.refresh(); + }, true); + option("coverGutterNextToScrollbar", false, function (cm) { + return updateScrollbars(cm); + }, true); + option("scrollbarStyle", "native", function (cm) { + initScrollbars(cm); + updateScrollbars(cm); + cm.display.scrollbars.setScrollTop(cm.doc.scrollTop); + cm.display.scrollbars.setScrollLeft(cm.doc.scrollLeft); + }, true); + option("lineNumbers", false, function (cm, val) { + cm.display.gutterSpecs = getGutters(cm.options.gutters, val); + updateGutters(cm); + }, true); + option("firstLineNumber", 1, updateGutters, true); + option("lineNumberFormatter", function (integer) { + return integer; + }, updateGutters, true); + option("showCursorWhenSelecting", false, updateSelection, true); + option("resetSelectionOnContextMenu", true); + option("lineWiseCopyCut", true); + option("pasteLinesPerSelection", true); + option("selectionsMayTouch", false); + option("readOnly", false, function (cm, val) { + if (val == "nocursor") { + onBlur(cm); + cm.display.input.blur(); + } + cm.display.input.readOnlyChanged(val); + }); + option("screenReaderLabel", null, function (cm, val) { + val = val === '' ? null : val; + cm.display.input.screenReaderLabelChanged(val); + }); + option("disableInput", false, function (cm, val) { + if (!val) { + cm.display.input.reset(); + } + }, true); + option("dragDrop", true, dragDropChanged); + option("allowDropFileTypes", null); + option("cursorBlinkRate", 530); + option("cursorScrollMargin", 0); + option("cursorHeight", 1, updateSelection, true); + option("singleCursorHeightPerLine", true, updateSelection, true); + option("workTime", 100); + option("workDelay", 100); + option("flattenSpans", true, resetModeState, true); + option("addModeClass", false, resetModeState, true); + option("pollInterval", 100); + option("undoDepth", 200, function (cm, val) { + return cm.doc.history.undoDepth = val; + }); + option("historyEventDelay", 1250); + option("viewportMargin", 10, function (cm) { + return cm.refresh(); + }, true); + option("maxHighlightLength", 10000, resetModeState, true); + option("moveInputWithCursor", true, function (cm, val) { + if (!val) { + cm.display.input.resetPosition(); + } + }); + option("tabindex", null, function (cm, val) { + return cm.display.input.getField().tabIndex = val || ""; + }); + option("autofocus", null); + option("direction", "ltr", function (cm, val) { + return cm.doc.setDirection(val); + }, true); + option("phrases", null); + } + function dragDropChanged(cm, value, old) { + var wasOn = old && old != Init; + if (!value != !wasOn) { + var funcs = cm.display.dragFunctions; + var toggle = value ? on : off; + toggle(cm.display.scroller, "dragstart", funcs.start); + toggle(cm.display.scroller, "dragenter", funcs.enter); + toggle(cm.display.scroller, "dragover", funcs.over); + toggle(cm.display.scroller, "dragleave", funcs.leave); + toggle(cm.display.scroller, "drop", funcs.drop); + } + } + function wrappingChanged(cm) { + if (cm.options.lineWrapping) { + addClass(cm.display.wrapper, "CodeMirror-wrap"); + cm.display.sizer.style.minWidth = ""; + cm.display.sizerWidth = null; + } else { + rmClass(cm.display.wrapper, "CodeMirror-wrap"); + findMaxLine(cm); + } + estimateLineHeights(cm); + regChange(cm); + clearCaches(cm); + setTimeout(function () { + return updateScrollbars(cm); + }, 100); + } + + // A CodeMirror instance represents an editor. This is the object + // that user code is usually dealing with. + + function CodeMirror(place, options) { + var this$1 = this; + if (!(this instanceof CodeMirror)) { + return new CodeMirror(place, options); + } + this.options = options = options ? copyObj(options) : {}; + // Determine effective options based on given values and defaults. + copyObj(defaults, options, false); + var doc = options.value; + if (typeof doc == "string") { + doc = new Doc(doc, options.mode, null, options.lineSeparator, options.direction); + } else if (options.mode) { + doc.modeOption = options.mode; + } + this.doc = doc; + var input = new CodeMirror.inputStyles[options.inputStyle](this); + var display = this.display = new Display(place, doc, input, options); + display.wrapper.CodeMirror = this; + themeChanged(this); + if (options.lineWrapping) { + this.display.wrapper.className += " CodeMirror-wrap"; + } + initScrollbars(this); + this.state = { + keyMaps: [], + // stores maps added by addKeyMap + overlays: [], + // highlighting overlays, as added by addOverlay + modeGen: 0, + // bumped when mode/overlay changes, used to invalidate highlighting info + overwrite: false, + delayingBlurEvent: false, + focused: false, + suppressEdits: false, + // used to disable editing during key handlers when in readOnly mode + pasteIncoming: -1, + cutIncoming: -1, + // help recognize paste/cut edits in input.poll + selectingText: false, + draggingText: false, + highlight: new Delayed(), + // stores highlight worker timeout + keySeq: null, + // Unfinished key sequence + specialChars: null + }; + if (options.autofocus && !mobile) { + display.input.focus(); + } + + // Override magic textarea content restore that IE sometimes does + // on our hidden textarea on reload + if (ie && ie_version < 11) { + setTimeout(function () { + return this$1.display.input.reset(true); + }, 20); + } + registerEventHandlers(this); + ensureGlobalHandlers(); + startOperation(this); + this.curOp.forceUpdate = true; + attachDoc(this, doc); + if (options.autofocus && !mobile || this.hasFocus()) { + setTimeout(function () { + if (this$1.hasFocus() && !this$1.state.focused) { + onFocus(this$1); + } + }, 20); + } else { + onBlur(this); + } + for (var opt in optionHandlers) { + if (optionHandlers.hasOwnProperty(opt)) { + optionHandlers[opt](this, options[opt], Init); + } + } + maybeUpdateLineNumberWidth(this); + if (options.finishInit) { + options.finishInit(this); + } + for (var i = 0; i < initHooks.length; ++i) { + initHooks[i](this); + } + endOperation(this); + // Suppress optimizelegibility in Webkit, since it breaks text + // measuring on line wrapping boundaries. + if (webkit && options.lineWrapping && getComputedStyle(display.lineDiv).textRendering == "optimizelegibility") { + display.lineDiv.style.textRendering = "auto"; + } + } + + // The default configuration options. + CodeMirror.defaults = defaults; + // Functions to run when options are changed. + CodeMirror.optionHandlers = optionHandlers; + + // Attach the necessary event handlers when initializing the editor + function registerEventHandlers(cm) { + var d = cm.display; + on(d.scroller, "mousedown", operation(cm, onMouseDown)); + // Older IE's will not fire a second mousedown for a double click + if (ie && ie_version < 11) { + on(d.scroller, "dblclick", operation(cm, function (e) { + if (signalDOMEvent(cm, e)) { + return; + } + var pos = posFromMouse(cm, e); + if (!pos || clickInGutter(cm, e) || eventInWidget(cm.display, e)) { + return; + } + e_preventDefault(e); + var word = cm.findWordAt(pos); + extendSelection(cm.doc, word.anchor, word.head); + })); + } else { + on(d.scroller, "dblclick", function (e) { + return signalDOMEvent(cm, e) || e_preventDefault(e); + }); + } + // Some browsers fire contextmenu *after* opening the menu, at + // which point we can't mess with it anymore. Context menu is + // handled in onMouseDown for these browsers. + on(d.scroller, "contextmenu", function (e) { + return onContextMenu(cm, e); + }); + on(d.input.getField(), "contextmenu", function (e) { + if (!d.scroller.contains(e.target)) { + onContextMenu(cm, e); + } + }); + + // Used to suppress mouse event handling when a touch happens + var touchFinished, + prevTouch = { + end: 0 + }; + function finishTouch() { + if (d.activeTouch) { + touchFinished = setTimeout(function () { + return d.activeTouch = null; + }, 1000); + prevTouch = d.activeTouch; + prevTouch.end = +new Date(); + } + } + function isMouseLikeTouchEvent(e) { + if (e.touches.length != 1) { + return false; + } + var touch = e.touches[0]; + return touch.radiusX <= 1 && touch.radiusY <= 1; + } + function farAway(touch, other) { + if (other.left == null) { + return true; + } + var dx = other.left - touch.left, + dy = other.top - touch.top; + return dx * dx + dy * dy > 20 * 20; + } + on(d.scroller, "touchstart", function (e) { + if (!signalDOMEvent(cm, e) && !isMouseLikeTouchEvent(e) && !clickInGutter(cm, e)) { + d.input.ensurePolled(); + clearTimeout(touchFinished); + var now = +new Date(); + d.activeTouch = { + start: now, + moved: false, + prev: now - prevTouch.end <= 300 ? prevTouch : null + }; + if (e.touches.length == 1) { + d.activeTouch.left = e.touches[0].pageX; + d.activeTouch.top = e.touches[0].pageY; + } + } + }); + on(d.scroller, "touchmove", function () { + if (d.activeTouch) { + d.activeTouch.moved = true; + } + }); + on(d.scroller, "touchend", function (e) { + var touch = d.activeTouch; + if (touch && !eventInWidget(d, e) && touch.left != null && !touch.moved && new Date() - touch.start < 300) { + var pos = cm.coordsChar(d.activeTouch, "page"), + range; + if (!touch.prev || farAway(touch, touch.prev)) + // Single tap + { + range = new Range(pos, pos); + } else if (!touch.prev.prev || farAway(touch, touch.prev.prev)) + // Double tap + { + range = cm.findWordAt(pos); + } else + // Triple tap + { + range = new Range(Pos(pos.line, 0), clipPos(cm.doc, Pos(pos.line + 1, 0))); + } + cm.setSelection(range.anchor, range.head); + cm.focus(); + e_preventDefault(e); + } + finishTouch(); + }); + on(d.scroller, "touchcancel", finishTouch); + + // Sync scrolling between fake scrollbars and real scrollable + // area, ensure viewport is updated when scrolling. + on(d.scroller, "scroll", function () { + if (d.scroller.clientHeight) { + updateScrollTop(cm, d.scroller.scrollTop); + setScrollLeft(cm, d.scroller.scrollLeft, true); + signal(cm, "scroll", cm); + } + }); + + // Listen to wheel events in order to try and update the viewport on time. + on(d.scroller, "mousewheel", function (e) { + return onScrollWheel(cm, e); + }); + on(d.scroller, "DOMMouseScroll", function (e) { + return onScrollWheel(cm, e); + }); + + // Prevent wrapper from ever scrolling + on(d.wrapper, "scroll", function () { + return d.wrapper.scrollTop = d.wrapper.scrollLeft = 0; + }); + d.dragFunctions = { + enter: function (e) { + if (!signalDOMEvent(cm, e)) { + e_stop(e); + } + }, + over: function (e) { + if (!signalDOMEvent(cm, e)) { + onDragOver(cm, e); + e_stop(e); + } + }, + start: function (e) { + return onDragStart(cm, e); + }, + drop: operation(cm, onDrop), + leave: function (e) { + if (!signalDOMEvent(cm, e)) { + clearDragCursor(cm); + } + } + }; + var inp = d.input.getField(); + on(inp, "keyup", function (e) { + return onKeyUp.call(cm, e); + }); + on(inp, "keydown", operation(cm, onKeyDown)); + on(inp, "keypress", operation(cm, onKeyPress)); + on(inp, "focus", function (e) { + return onFocus(cm, e); + }); + on(inp, "blur", function (e) { + return onBlur(cm, e); + }); + } + var initHooks = []; + CodeMirror.defineInitHook = function (f) { + return initHooks.push(f); + }; + + // Indent the given line. The how parameter can be "smart", + // "add"/null, "subtract", or "prev". When aggressive is false + // (typically set to true for forced single-line indents), empty + // lines are not indented, and places where the mode returns Pass + // are left alone. + function indentLine(cm, n, how, aggressive) { + var doc = cm.doc, + state; + if (how == null) { + how = "add"; + } + if (how == "smart") { + // Fall back to "prev" when the mode doesn't have an indentation + // method. + if (!doc.mode.indent) { + how = "prev"; + } else { + state = getContextBefore(cm, n).state; + } + } + var tabSize = cm.options.tabSize; + var line = getLine(doc, n), + curSpace = countColumn(line.text, null, tabSize); + if (line.stateAfter) { + line.stateAfter = null; + } + var curSpaceString = line.text.match(/^\s*/)[0], + indentation; + if (!aggressive && !/\S/.test(line.text)) { + indentation = 0; + how = "not"; + } else if (how == "smart") { + indentation = doc.mode.indent(state, line.text.slice(curSpaceString.length), line.text); + if (indentation == Pass || indentation > 150) { + if (!aggressive) { + return; + } + how = "prev"; + } + } + if (how == "prev") { + if (n > doc.first) { + indentation = countColumn(getLine(doc, n - 1).text, null, tabSize); + } else { + indentation = 0; + } + } else if (how == "add") { + indentation = curSpace + cm.options.indentUnit; + } else if (how == "subtract") { + indentation = curSpace - cm.options.indentUnit; + } else if (typeof how == "number") { + indentation = curSpace + how; + } + indentation = Math.max(0, indentation); + var indentString = "", + pos = 0; + if (cm.options.indentWithTabs) { + for (var i = Math.floor(indentation / tabSize); i; --i) { + pos += tabSize; + indentString += "\t"; + } + } + if (pos < indentation) { + indentString += spaceStr(indentation - pos); + } + if (indentString != curSpaceString) { + replaceRange(doc, indentString, Pos(n, 0), Pos(n, curSpaceString.length), "+input"); + line.stateAfter = null; + return true; + } else { + // Ensure that, if the cursor was in the whitespace at the start + // of the line, it is moved to the end of that space. + for (var i$1 = 0; i$1 < doc.sel.ranges.length; i$1++) { + var range = doc.sel.ranges[i$1]; + if (range.head.line == n && range.head.ch < curSpaceString.length) { + var pos$1 = Pos(n, curSpaceString.length); + replaceOneSelection(doc, i$1, new Range(pos$1, pos$1)); + break; + } + } + } + } + + // This will be set to a {lineWise: bool, text: [string]} object, so + // that, when pasting, we know what kind of selections the copied + // text was made out of. + var lastCopied = null; + function setLastCopied(newLastCopied) { + lastCopied = newLastCopied; + } + function applyTextInput(cm, inserted, deleted, sel, origin) { + var doc = cm.doc; + cm.display.shift = false; + if (!sel) { + sel = doc.sel; + } + var recent = +new Date() - 200; + var paste = origin == "paste" || cm.state.pasteIncoming > recent; + var textLines = splitLinesAuto(inserted), + multiPaste = null; + // When pasting N lines into N selections, insert one line per selection + if (paste && sel.ranges.length > 1) { + if (lastCopied && lastCopied.text.join("\n") == inserted) { + if (sel.ranges.length % lastCopied.text.length == 0) { + multiPaste = []; + for (var i = 0; i < lastCopied.text.length; i++) { + multiPaste.push(doc.splitLines(lastCopied.text[i])); + } + } + } else if (textLines.length == sel.ranges.length && cm.options.pasteLinesPerSelection) { + multiPaste = map(textLines, function (l) { + return [l]; + }); + } + } + var updateInput = cm.curOp.updateInput; + // Normal behavior is to insert the new text into every selection + for (var i$1 = sel.ranges.length - 1; i$1 >= 0; i$1--) { + var range = sel.ranges[i$1]; + var from = range.from(), + to = range.to(); + if (range.empty()) { + if (deleted && deleted > 0) + // Handle deletion + { + from = Pos(from.line, from.ch - deleted); + } else if (cm.state.overwrite && !paste) + // Handle overwrite + { + to = Pos(to.line, Math.min(getLine(doc, to.line).text.length, to.ch + lst(textLines).length)); + } else if (paste && lastCopied && lastCopied.lineWise && lastCopied.text.join("\n") == textLines.join("\n")) { + from = to = Pos(from.line, 0); + } + } + var changeEvent = { + from: from, + to: to, + text: multiPaste ? multiPaste[i$1 % multiPaste.length] : textLines, + origin: origin || (paste ? "paste" : cm.state.cutIncoming > recent ? "cut" : "+input") + }; + makeChange(cm.doc, changeEvent); + signalLater(cm, "inputRead", cm, changeEvent); + } + if (inserted && !paste) { + triggerElectric(cm, inserted); + } + ensureCursorVisible(cm); + if (cm.curOp.updateInput < 2) { + cm.curOp.updateInput = updateInput; + } + cm.curOp.typing = true; + cm.state.pasteIncoming = cm.state.cutIncoming = -1; + } + function handlePaste(e, cm) { + var pasted = e.clipboardData && e.clipboardData.getData("Text"); + if (pasted) { + e.preventDefault(); + if (!cm.isReadOnly() && !cm.options.disableInput) { + runInOp(cm, function () { + return applyTextInput(cm, pasted, 0, null, "paste"); + }); + } + return true; + } + } + function triggerElectric(cm, inserted) { + // When an 'electric' character is inserted, immediately trigger a reindent + if (!cm.options.electricChars || !cm.options.smartIndent) { + return; + } + var sel = cm.doc.sel; + for (var i = sel.ranges.length - 1; i >= 0; i--) { + var range = sel.ranges[i]; + if (range.head.ch > 100 || i && sel.ranges[i - 1].head.line == range.head.line) { + continue; + } + var mode = cm.getModeAt(range.head); + var indented = false; + if (mode.electricChars) { + for (var j = 0; j < mode.electricChars.length; j++) { + if (inserted.indexOf(mode.electricChars.charAt(j)) > -1) { + indented = indentLine(cm, range.head.line, "smart"); + break; + } + } + } else if (mode.electricInput) { + if (mode.electricInput.test(getLine(cm.doc, range.head.line).text.slice(0, range.head.ch))) { + indented = indentLine(cm, range.head.line, "smart"); + } + } + if (indented) { + signalLater(cm, "electricInput", cm, range.head.line); + } + } + } + function copyableRanges(cm) { + var text = [], + ranges = []; + for (var i = 0; i < cm.doc.sel.ranges.length; i++) { + var line = cm.doc.sel.ranges[i].head.line; + var lineRange = { + anchor: Pos(line, 0), + head: Pos(line + 1, 0) + }; + ranges.push(lineRange); + text.push(cm.getRange(lineRange.anchor, lineRange.head)); + } + return { + text: text, + ranges: ranges + }; + } + function disableBrowserMagic(field, spellcheck, autocorrect, autocapitalize) { + field.setAttribute("autocorrect", autocorrect ? "" : "off"); + field.setAttribute("autocapitalize", autocapitalize ? "" : "off"); + field.setAttribute("spellcheck", !!spellcheck); + } + function hiddenTextarea() { + var te = elt("textarea", null, null, "position: absolute; bottom: -1em; padding: 0; width: 1px; height: 1em; min-height: 1em; outline: none"); + var div = elt("div", [te], null, "overflow: hidden; position: relative; width: 3px; height: 0px;"); + // The textarea is kept positioned near the cursor to prevent the + // fact that it'll be scrolled into view on input from scrolling + // our fake cursor out of view. On webkit, when wrap=off, paste is + // very slow. So make the area wide instead. + if (webkit) { + te.style.width = "1000px"; + } else { + te.setAttribute("wrap", "off"); + } + // If border: 0; -- iOS fails to open keyboard (issue #1287) + if (ios) { + te.style.border = "1px solid black"; + } + disableBrowserMagic(te); + return div; + } + + // The publicly visible API. Note that methodOp(f) means + // 'wrap f in an operation, performed on its `this` parameter'. + + // This is not the complete set of editor methods. Most of the + // methods defined on the Doc type are also injected into + // CodeMirror.prototype, for backwards compatibility and + // convenience. + + function addEditorMethods(CodeMirror) { + var optionHandlers = CodeMirror.optionHandlers; + var helpers = CodeMirror.helpers = {}; + CodeMirror.prototype = { + constructor: CodeMirror, + focus: function () { + window.focus(); + this.display.input.focus(); + }, + setOption: function (option, value) { + var options = this.options, + old = options[option]; + if (options[option] == value && option != "mode") { + return; + } + options[option] = value; + if (optionHandlers.hasOwnProperty(option)) { + operation(this, optionHandlers[option])(this, value, old); + } + signal(this, "optionChange", this, option); + }, + getOption: function (option) { + return this.options[option]; + }, + getDoc: function () { + return this.doc; + }, + addKeyMap: function (map, bottom) { + this.state.keyMaps[bottom ? "push" : "unshift"](getKeyMap(map)); + }, + removeKeyMap: function (map) { + var maps = this.state.keyMaps; + for (var i = 0; i < maps.length; ++i) { + if (maps[i] == map || maps[i].name == map) { + maps.splice(i, 1); + return true; + } + } + }, + addOverlay: methodOp(function (spec, options) { + var mode = spec.token ? spec : CodeMirror.getMode(this.options, spec); + if (mode.startState) { + throw new Error("Overlays may not be stateful."); + } + insertSorted(this.state.overlays, { + mode: mode, + modeSpec: spec, + opaque: options && options.opaque, + priority: options && options.priority || 0 + }, function (overlay) { + return overlay.priority; + }); + this.state.modeGen++; + regChange(this); + }), + removeOverlay: methodOp(function (spec) { + var overlays = this.state.overlays; + for (var i = 0; i < overlays.length; ++i) { + var cur = overlays[i].modeSpec; + if (cur == spec || typeof spec == "string" && cur.name == spec) { + overlays.splice(i, 1); + this.state.modeGen++; + regChange(this); + return; + } + } + }), + indentLine: methodOp(function (n, dir, aggressive) { + if (typeof dir != "string" && typeof dir != "number") { + if (dir == null) { + dir = this.options.smartIndent ? "smart" : "prev"; + } else { + dir = dir ? "add" : "subtract"; + } + } + if (isLine(this.doc, n)) { + indentLine(this, n, dir, aggressive); + } + }), + indentSelection: methodOp(function (how) { + var ranges = this.doc.sel.ranges, + end = -1; + for (var i = 0; i < ranges.length; i++) { + var range = ranges[i]; + if (!range.empty()) { + var from = range.from(), + to = range.to(); + var start = Math.max(end, from.line); + end = Math.min(this.lastLine(), to.line - (to.ch ? 0 : 1)) + 1; + for (var j = start; j < end; ++j) { + indentLine(this, j, how); + } + var newRanges = this.doc.sel.ranges; + if (from.ch == 0 && ranges.length == newRanges.length && newRanges[i].from().ch > 0) { + replaceOneSelection(this.doc, i, new Range(from, newRanges[i].to()), sel_dontScroll); + } + } else if (range.head.line > end) { + indentLine(this, range.head.line, how, true); + end = range.head.line; + if (i == this.doc.sel.primIndex) { + ensureCursorVisible(this); + } + } + } + }), + // Fetch the parser token for a given character. Useful for hacks + // that want to inspect the mode state (say, for completion). + getTokenAt: function (pos, precise) { + return takeToken(this, pos, precise); + }, + getLineTokens: function (line, precise) { + return takeToken(this, Pos(line), precise, true); + }, + getTokenTypeAt: function (pos) { + pos = clipPos(this.doc, pos); + var styles = getLineStyles(this, getLine(this.doc, pos.line)); + var before = 0, + after = (styles.length - 1) / 2, + ch = pos.ch; + var type; + if (ch == 0) { + type = styles[2]; + } else { + for (;;) { + var mid = before + after >> 1; + if ((mid ? styles[mid * 2 - 1] : 0) >= ch) { + after = mid; + } else if (styles[mid * 2 + 1] < ch) { + before = mid + 1; + } else { + type = styles[mid * 2 + 2]; + break; + } + } + } + var cut = type ? type.indexOf("overlay ") : -1; + return cut < 0 ? type : cut == 0 ? null : type.slice(0, cut - 1); + }, + getModeAt: function (pos) { + var mode = this.doc.mode; + if (!mode.innerMode) { + return mode; + } + return CodeMirror.innerMode(mode, this.getTokenAt(pos).state).mode; + }, + getHelper: function (pos, type) { + return this.getHelpers(pos, type)[0]; + }, + getHelpers: function (pos, type) { + var found = []; + if (!helpers.hasOwnProperty(type)) { + return found; + } + var help = helpers[type], + mode = this.getModeAt(pos); + if (typeof mode[type] == "string") { + if (help[mode[type]]) { + found.push(help[mode[type]]); + } + } else if (mode[type]) { + for (var i = 0; i < mode[type].length; i++) { + var val = help[mode[type][i]]; + if (val) { + found.push(val); + } + } + } else if (mode.helperType && help[mode.helperType]) { + found.push(help[mode.helperType]); + } else if (help[mode.name]) { + found.push(help[mode.name]); + } + for (var i$1 = 0; i$1 < help._global.length; i$1++) { + var cur = help._global[i$1]; + if (cur.pred(mode, this) && indexOf(found, cur.val) == -1) { + found.push(cur.val); + } + } + return found; + }, + getStateAfter: function (line, precise) { + var doc = this.doc; + line = clipLine(doc, line == null ? doc.first + doc.size - 1 : line); + return getContextBefore(this, line + 1, precise).state; + }, + cursorCoords: function (start, mode) { + var pos, + range = this.doc.sel.primary(); + if (start == null) { + pos = range.head; + } else if (typeof start == "object") { + pos = clipPos(this.doc, start); + } else { + pos = start ? range.from() : range.to(); + } + return cursorCoords(this, pos, mode || "page"); + }, + charCoords: function (pos, mode) { + return charCoords(this, clipPos(this.doc, pos), mode || "page"); + }, + coordsChar: function (coords, mode) { + coords = fromCoordSystem(this, coords, mode || "page"); + return coordsChar(this, coords.left, coords.top); + }, + lineAtHeight: function (height, mode) { + height = fromCoordSystem(this, { + top: height, + left: 0 + }, mode || "page").top; + return lineAtHeight(this.doc, height + this.display.viewOffset); + }, + heightAtLine: function (line, mode, includeWidgets) { + var end = false, + lineObj; + if (typeof line == "number") { + var last = this.doc.first + this.doc.size - 1; + if (line < this.doc.first) { + line = this.doc.first; + } else if (line > last) { + line = last; + end = true; + } + lineObj = getLine(this.doc, line); + } else { + lineObj = line; + } + return intoCoordSystem(this, lineObj, { + top: 0, + left: 0 + }, mode || "page", includeWidgets || end).top + (end ? this.doc.height - heightAtLine(lineObj) : 0); + }, + defaultTextHeight: function () { + return textHeight(this.display); + }, + defaultCharWidth: function () { + return charWidth(this.display); + }, + getViewport: function () { + return { + from: this.display.viewFrom, + to: this.display.viewTo + }; + }, + addWidget: function (pos, node, scroll, vert, horiz) { + var display = this.display; + pos = cursorCoords(this, clipPos(this.doc, pos)); + var top = pos.bottom, + left = pos.left; + node.style.position = "absolute"; + node.setAttribute("cm-ignore-events", "true"); + this.display.input.setUneditable(node); + display.sizer.appendChild(node); + if (vert == "over") { + top = pos.top; + } else if (vert == "above" || vert == "near") { + var vspace = Math.max(display.wrapper.clientHeight, this.doc.height), + hspace = Math.max(display.sizer.clientWidth, display.lineSpace.clientWidth); + // Default to positioning above (if specified and possible); otherwise default to positioning below + if ((vert == 'above' || pos.bottom + node.offsetHeight > vspace) && pos.top > node.offsetHeight) { + top = pos.top - node.offsetHeight; + } else if (pos.bottom + node.offsetHeight <= vspace) { + top = pos.bottom; + } + if (left + node.offsetWidth > hspace) { + left = hspace - node.offsetWidth; + } + } + node.style.top = top + "px"; + node.style.left = node.style.right = ""; + if (horiz == "right") { + left = display.sizer.clientWidth - node.offsetWidth; + node.style.right = "0px"; + } else { + if (horiz == "left") { + left = 0; + } else if (horiz == "middle") { + left = (display.sizer.clientWidth - node.offsetWidth) / 2; + } + node.style.left = left + "px"; + } + if (scroll) { + scrollIntoView(this, { + left: left, + top: top, + right: left + node.offsetWidth, + bottom: top + node.offsetHeight + }); + } + }, + triggerOnKeyDown: methodOp(onKeyDown), + triggerOnKeyPress: methodOp(onKeyPress), + triggerOnKeyUp: onKeyUp, + triggerOnMouseDown: methodOp(onMouseDown), + execCommand: function (cmd) { + if (commands.hasOwnProperty(cmd)) { + return commands[cmd].call(null, this); + } + }, + triggerElectric: methodOp(function (text) { + triggerElectric(this, text); + }), + findPosH: function (from, amount, unit, visually) { + var dir = 1; + if (amount < 0) { + dir = -1; + amount = -amount; + } + var cur = clipPos(this.doc, from); + for (var i = 0; i < amount; ++i) { + cur = findPosH(this.doc, cur, dir, unit, visually); + if (cur.hitSide) { + break; + } + } + return cur; + }, + moveH: methodOp(function (dir, unit) { + var this$1 = this; + this.extendSelectionsBy(function (range) { + if (this$1.display.shift || this$1.doc.extend || range.empty()) { + return findPosH(this$1.doc, range.head, dir, unit, this$1.options.rtlMoveVisually); + } else { + return dir < 0 ? range.from() : range.to(); + } + }, sel_move); + }), + deleteH: methodOp(function (dir, unit) { + var sel = this.doc.sel, + doc = this.doc; + if (sel.somethingSelected()) { + doc.replaceSelection("", null, "+delete"); + } else { + deleteNearSelection(this, function (range) { + var other = findPosH(doc, range.head, dir, unit, false); + return dir < 0 ? { + from: other, + to: range.head + } : { + from: range.head, + to: other + }; + }); + } + }), + findPosV: function (from, amount, unit, goalColumn) { + var dir = 1, + x = goalColumn; + if (amount < 0) { + dir = -1; + amount = -amount; + } + var cur = clipPos(this.doc, from); + for (var i = 0; i < amount; ++i) { + var coords = cursorCoords(this, cur, "div"); + if (x == null) { + x = coords.left; + } else { + coords.left = x; + } + cur = findPosV(this, coords, dir, unit); + if (cur.hitSide) { + break; + } + } + return cur; + }, + moveV: methodOp(function (dir, unit) { + var this$1 = this; + var doc = this.doc, + goals = []; + var collapse = !this.display.shift && !doc.extend && doc.sel.somethingSelected(); + doc.extendSelectionsBy(function (range) { + if (collapse) { + return dir < 0 ? range.from() : range.to(); + } + var headPos = cursorCoords(this$1, range.head, "div"); + if (range.goalColumn != null) { + headPos.left = range.goalColumn; + } + goals.push(headPos.left); + var pos = findPosV(this$1, headPos, dir, unit); + if (unit == "page" && range == doc.sel.primary()) { + addToScrollTop(this$1, charCoords(this$1, pos, "div").top - headPos.top); + } + return pos; + }, sel_move); + if (goals.length) { + for (var i = 0; i < doc.sel.ranges.length; i++) { + doc.sel.ranges[i].goalColumn = goals[i]; + } + } + }), + // Find the word at the given position (as returned by coordsChar). + findWordAt: function (pos) { + var doc = this.doc, + line = getLine(doc, pos.line).text; + var start = pos.ch, + end = pos.ch; + if (line) { + var helper = this.getHelper(pos, "wordChars"); + if ((pos.sticky == "before" || end == line.length) && start) { + --start; + } else { + ++end; + } + var startChar = line.charAt(start); + var check = isWordChar(startChar, helper) ? function (ch) { + return isWordChar(ch, helper); + } : /\s/.test(startChar) ? function (ch) { + return /\s/.test(ch); + } : function (ch) { + return !/\s/.test(ch) && !isWordChar(ch); + }; + while (start > 0 && check(line.charAt(start - 1))) { + --start; + } + while (end < line.length && check(line.charAt(end))) { + ++end; + } + } + return new Range(Pos(pos.line, start), Pos(pos.line, end)); + }, + toggleOverwrite: function (value) { + if (value != null && value == this.state.overwrite) { + return; + } + if (this.state.overwrite = !this.state.overwrite) { + addClass(this.display.cursorDiv, "CodeMirror-overwrite"); + } else { + rmClass(this.display.cursorDiv, "CodeMirror-overwrite"); + } + signal(this, "overwriteToggle", this, this.state.overwrite); + }, + hasFocus: function () { + return this.display.input.getField() == activeElt(); + }, + isReadOnly: function () { + return !!(this.options.readOnly || this.doc.cantEdit); + }, + scrollTo: methodOp(function (x, y) { + scrollToCoords(this, x, y); + }), + getScrollInfo: function () { + var scroller = this.display.scroller; + return { + left: scroller.scrollLeft, + top: scroller.scrollTop, + height: scroller.scrollHeight - scrollGap(this) - this.display.barHeight, + width: scroller.scrollWidth - scrollGap(this) - this.display.barWidth, + clientHeight: displayHeight(this), + clientWidth: displayWidth(this) + }; + }, + scrollIntoView: methodOp(function (range, margin) { + if (range == null) { + range = { + from: this.doc.sel.primary().head, + to: null + }; + if (margin == null) { + margin = this.options.cursorScrollMargin; + } + } else if (typeof range == "number") { + range = { + from: Pos(range, 0), + to: null + }; + } else if (range.from == null) { + range = { + from: range, + to: null + }; + } + if (!range.to) { + range.to = range.from; + } + range.margin = margin || 0; + if (range.from.line != null) { + scrollToRange(this, range); + } else { + scrollToCoordsRange(this, range.from, range.to, range.margin); + } + }), + setSize: methodOp(function (width, height) { + var this$1 = this; + var interpret = function (val) { + return typeof val == "number" || /^\d+$/.test(String(val)) ? val + "px" : val; + }; + if (width != null) { + this.display.wrapper.style.width = interpret(width); + } + if (height != null) { + this.display.wrapper.style.height = interpret(height); + } + if (this.options.lineWrapping) { + clearLineMeasurementCache(this); + } + var lineNo = this.display.viewFrom; + this.doc.iter(lineNo, this.display.viewTo, function (line) { + if (line.widgets) { + for (var i = 0; i < line.widgets.length; i++) { + if (line.widgets[i].noHScroll) { + regLineChange(this$1, lineNo, "widget"); + break; + } + } + } + ++lineNo; + }); + this.curOp.forceUpdate = true; + signal(this, "refresh", this); + }), + operation: function (f) { + return runInOp(this, f); + }, + startOperation: function () { + return startOperation(this); + }, + endOperation: function () { + return endOperation(this); + }, + refresh: methodOp(function () { + var oldHeight = this.display.cachedTextHeight; + regChange(this); + this.curOp.forceUpdate = true; + clearCaches(this); + scrollToCoords(this, this.doc.scrollLeft, this.doc.scrollTop); + updateGutterSpace(this.display); + if (oldHeight == null || Math.abs(oldHeight - textHeight(this.display)) > .5 || this.options.lineWrapping) { + estimateLineHeights(this); + } + signal(this, "refresh", this); + }), + swapDoc: methodOp(function (doc) { + var old = this.doc; + old.cm = null; + // Cancel the current text selection if any (#5821) + if (this.state.selectingText) { + this.state.selectingText(); + } + attachDoc(this, doc); + clearCaches(this); + this.display.input.reset(); + scrollToCoords(this, doc.scrollLeft, doc.scrollTop); + this.curOp.forceScroll = true; + signalLater(this, "swapDoc", this, old); + return old; + }), + phrase: function (phraseText) { + var phrases = this.options.phrases; + return phrases && Object.prototype.hasOwnProperty.call(phrases, phraseText) ? phrases[phraseText] : phraseText; + }, + getInputField: function () { + return this.display.input.getField(); + }, + getWrapperElement: function () { + return this.display.wrapper; + }, + getScrollerElement: function () { + return this.display.scroller; + }, + getGutterElement: function () { + return this.display.gutters; + } + }; + eventMixin(CodeMirror); + CodeMirror.registerHelper = function (type, name, value) { + if (!helpers.hasOwnProperty(type)) { + helpers[type] = CodeMirror[type] = { + _global: [] + }; + } + helpers[type][name] = value; + }; + CodeMirror.registerGlobalHelper = function (type, name, predicate, value) { + CodeMirror.registerHelper(type, name, value); + helpers[type]._global.push({ + pred: predicate, + val: value + }); + }; + } + + // Used for horizontal relative motion. Dir is -1 or 1 (left or + // right), unit can be "codepoint", "char", "column" (like char, but + // doesn't cross line boundaries), "word" (across next word), or + // "group" (to the start of next group of word or + // non-word-non-whitespace chars). The visually param controls + // whether, in right-to-left text, direction 1 means to move towards + // the next index in the string, or towards the character to the right + // of the current position. The resulting position will have a + // hitSide=true property if it reached the end of the document. + function findPosH(doc, pos, dir, unit, visually) { + var oldPos = pos; + var origDir = dir; + var lineObj = getLine(doc, pos.line); + var lineDir = visually && doc.direction == "rtl" ? -dir : dir; + function findNextLine() { + var l = pos.line + lineDir; + if (l < doc.first || l >= doc.first + doc.size) { + return false; + } + pos = new Pos(l, pos.ch, pos.sticky); + return lineObj = getLine(doc, l); + } + function moveOnce(boundToLine) { + var next; + if (unit == "codepoint") { + var ch = lineObj.text.charCodeAt(pos.ch + (dir > 0 ? 0 : -1)); + if (isNaN(ch)) { + next = null; + } else { + var astral = dir > 0 ? ch >= 0xD800 && ch < 0xDC00 : ch >= 0xDC00 && ch < 0xDFFF; + next = new Pos(pos.line, Math.max(0, Math.min(lineObj.text.length, pos.ch + dir * (astral ? 2 : 1))), -dir); + } + } else if (visually) { + next = moveVisually(doc.cm, lineObj, pos, dir); + } else { + next = moveLogically(lineObj, pos, dir); + } + if (next == null) { + if (!boundToLine && findNextLine()) { + pos = endOfLine(visually, doc.cm, lineObj, pos.line, lineDir); + } else { + return false; + } + } else { + pos = next; + } + return true; + } + if (unit == "char" || unit == "codepoint") { + moveOnce(); + } else if (unit == "column") { + moveOnce(true); + } else if (unit == "word" || unit == "group") { + var sawType = null, + group = unit == "group"; + var helper = doc.cm && doc.cm.getHelper(pos, "wordChars"); + for (var first = true;; first = false) { + if (dir < 0 && !moveOnce(!first)) { + break; + } + var cur = lineObj.text.charAt(pos.ch) || "\n"; + var type = isWordChar(cur, helper) ? "w" : group && cur == "\n" ? "n" : !group || /\s/.test(cur) ? null : "p"; + if (group && !first && !type) { + type = "s"; + } + if (sawType && sawType != type) { + if (dir < 0) { + dir = 1; + moveOnce(); + pos.sticky = "after"; + } + break; + } + if (type) { + sawType = type; + } + if (dir > 0 && !moveOnce(!first)) { + break; + } + } + } + var result = skipAtomic(doc, pos, oldPos, origDir, true); + if (equalCursorPos(oldPos, result)) { + result.hitSide = true; + } + return result; + } + + // For relative vertical movement. Dir may be -1 or 1. Unit can be + // "page" or "line". The resulting position will have a hitSide=true + // property if it reached the end of the document. + function findPosV(cm, pos, dir, unit) { + var doc = cm.doc, + x = pos.left, + y; + if (unit == "page") { + var pageSize = Math.min(cm.display.wrapper.clientHeight, window.innerHeight || document.documentElement.clientHeight); + var moveAmount = Math.max(pageSize - .5 * textHeight(cm.display), 3); + y = (dir > 0 ? pos.bottom : pos.top) + dir * moveAmount; + } else if (unit == "line") { + y = dir > 0 ? pos.bottom + 3 : pos.top - 3; + } + var target; + for (;;) { + target = coordsChar(cm, x, y); + if (!target.outside) { + break; + } + if (dir < 0 ? y <= 0 : y >= doc.height) { + target.hitSide = true; + break; + } + y += dir * 5; + } + return target; + } + + // CONTENTEDITABLE INPUT STYLE + + var ContentEditableInput = function (cm) { + this.cm = cm; + this.lastAnchorNode = this.lastAnchorOffset = this.lastFocusNode = this.lastFocusOffset = null; + this.polling = new Delayed(); + this.composing = null; + this.gracePeriod = false; + this.readDOMTimeout = null; + }; + ContentEditableInput.prototype.init = function (display) { + var this$1 = this; + var input = this, + cm = input.cm; + var div = input.div = display.lineDiv; + div.contentEditable = true; + disableBrowserMagic(div, cm.options.spellcheck, cm.options.autocorrect, cm.options.autocapitalize); + function belongsToInput(e) { + for (var t = e.target; t; t = t.parentNode) { + if (t == div) { + return true; + } + if (/\bCodeMirror-(?:line)?widget\b/.test(t.className)) { + break; + } + } + return false; + } + on(div, "paste", function (e) { + if (!belongsToInput(e) || signalDOMEvent(cm, e) || handlePaste(e, cm)) { + return; + } + // IE doesn't fire input events, so we schedule a read for the pasted content in this way + if (ie_version <= 11) { + setTimeout(operation(cm, function () { + return this$1.updateFromDOM(); + }), 20); + } + }); + on(div, "compositionstart", function (e) { + this$1.composing = { + data: e.data, + done: false + }; + }); + on(div, "compositionupdate", function (e) { + if (!this$1.composing) { + this$1.composing = { + data: e.data, + done: false + }; + } + }); + on(div, "compositionend", function (e) { + if (this$1.composing) { + if (e.data != this$1.composing.data) { + this$1.readFromDOMSoon(); + } + this$1.composing.done = true; + } + }); + on(div, "touchstart", function () { + return input.forceCompositionEnd(); + }); + on(div, "input", function () { + if (!this$1.composing) { + this$1.readFromDOMSoon(); + } + }); + function onCopyCut(e) { + if (!belongsToInput(e) || signalDOMEvent(cm, e)) { + return; + } + if (cm.somethingSelected()) { + setLastCopied({ + lineWise: false, + text: cm.getSelections() + }); + if (e.type == "cut") { + cm.replaceSelection("", null, "cut"); + } + } else if (!cm.options.lineWiseCopyCut) { + return; + } else { + var ranges = copyableRanges(cm); + setLastCopied({ + lineWise: true, + text: ranges.text + }); + if (e.type == "cut") { + cm.operation(function () { + cm.setSelections(ranges.ranges, 0, sel_dontScroll); + cm.replaceSelection("", null, "cut"); + }); + } + } + if (e.clipboardData) { + e.clipboardData.clearData(); + var content = lastCopied.text.join("\n"); + // iOS exposes the clipboard API, but seems to discard content inserted into it + e.clipboardData.setData("Text", content); + if (e.clipboardData.getData("Text") == content) { + e.preventDefault(); + return; + } + } + // Old-fashioned briefly-focus-a-textarea hack + var kludge = hiddenTextarea(), + te = kludge.firstChild; + cm.display.lineSpace.insertBefore(kludge, cm.display.lineSpace.firstChild); + te.value = lastCopied.text.join("\n"); + var hadFocus = activeElt(); + selectInput(te); + setTimeout(function () { + cm.display.lineSpace.removeChild(kludge); + hadFocus.focus(); + if (hadFocus == div) { + input.showPrimarySelection(); + } + }, 50); + } + on(div, "copy", onCopyCut); + on(div, "cut", onCopyCut); + }; + ContentEditableInput.prototype.screenReaderLabelChanged = function (label) { + // Label for screenreaders, accessibility + if (label) { + this.div.setAttribute('aria-label', label); + } else { + this.div.removeAttribute('aria-label'); + } + }; + ContentEditableInput.prototype.prepareSelection = function () { + var result = prepareSelection(this.cm, false); + result.focus = activeElt() == this.div; + return result; + }; + ContentEditableInput.prototype.showSelection = function (info, takeFocus) { + if (!info || !this.cm.display.view.length) { + return; + } + if (info.focus || takeFocus) { + this.showPrimarySelection(); + } + this.showMultipleSelections(info); + }; + ContentEditableInput.prototype.getSelection = function () { + return this.cm.display.wrapper.ownerDocument.getSelection(); + }; + ContentEditableInput.prototype.showPrimarySelection = function () { + var sel = this.getSelection(), + cm = this.cm, + prim = cm.doc.sel.primary(); + var from = prim.from(), + to = prim.to(); + if (cm.display.viewTo == cm.display.viewFrom || from.line >= cm.display.viewTo || to.line < cm.display.viewFrom) { + sel.removeAllRanges(); + return; + } + var curAnchor = domToPos(cm, sel.anchorNode, sel.anchorOffset); + var curFocus = domToPos(cm, sel.focusNode, sel.focusOffset); + if (curAnchor && !curAnchor.bad && curFocus && !curFocus.bad && cmp(minPos(curAnchor, curFocus), from) == 0 && cmp(maxPos(curAnchor, curFocus), to) == 0) { + return; + } + var view = cm.display.view; + var start = from.line >= cm.display.viewFrom && posToDOM(cm, from) || { + node: view[0].measure.map[2], + offset: 0 + }; + var end = to.line < cm.display.viewTo && posToDOM(cm, to); + if (!end) { + var measure = view[view.length - 1].measure; + var map = measure.maps ? measure.maps[measure.maps.length - 1] : measure.map; + end = { + node: map[map.length - 1], + offset: map[map.length - 2] - map[map.length - 3] + }; + } + if (!start || !end) { + sel.removeAllRanges(); + return; + } + var old = sel.rangeCount && sel.getRangeAt(0), + rng; + try { + rng = range(start.node, start.offset, end.offset, end.node); + } catch (e) {} // Our model of the DOM might be outdated, in which case the range we try to set can be impossible + if (rng) { + if (!gecko && cm.state.focused) { + sel.collapse(start.node, start.offset); + if (!rng.collapsed) { + sel.removeAllRanges(); + sel.addRange(rng); + } + } else { + sel.removeAllRanges(); + sel.addRange(rng); + } + if (old && sel.anchorNode == null) { + sel.addRange(old); + } else if (gecko) { + this.startGracePeriod(); + } + } + this.rememberSelection(); + }; + ContentEditableInput.prototype.startGracePeriod = function () { + var this$1 = this; + clearTimeout(this.gracePeriod); + this.gracePeriod = setTimeout(function () { + this$1.gracePeriod = false; + if (this$1.selectionChanged()) { + this$1.cm.operation(function () { + return this$1.cm.curOp.selectionChanged = true; + }); + } + }, 20); + }; + ContentEditableInput.prototype.showMultipleSelections = function (info) { + removeChildrenAndAdd(this.cm.display.cursorDiv, info.cursors); + removeChildrenAndAdd(this.cm.display.selectionDiv, info.selection); + }; + ContentEditableInput.prototype.rememberSelection = function () { + var sel = this.getSelection(); + this.lastAnchorNode = sel.anchorNode; + this.lastAnchorOffset = sel.anchorOffset; + this.lastFocusNode = sel.focusNode; + this.lastFocusOffset = sel.focusOffset; + }; + ContentEditableInput.prototype.selectionInEditor = function () { + var sel = this.getSelection(); + if (!sel.rangeCount) { + return false; + } + var node = sel.getRangeAt(0).commonAncestorContainer; + return contains(this.div, node); + }; + ContentEditableInput.prototype.focus = function () { + if (this.cm.options.readOnly != "nocursor") { + if (!this.selectionInEditor() || activeElt() != this.div) { + this.showSelection(this.prepareSelection(), true); + } + this.div.focus(); + } + }; + ContentEditableInput.prototype.blur = function () { + this.div.blur(); + }; + ContentEditableInput.prototype.getField = function () { + return this.div; + }; + ContentEditableInput.prototype.supportsTouch = function () { + return true; + }; + ContentEditableInput.prototype.receivedFocus = function () { + var this$1 = this; + var input = this; + if (this.selectionInEditor()) { + setTimeout(function () { + return this$1.pollSelection(); + }, 20); + } else { + runInOp(this.cm, function () { + return input.cm.curOp.selectionChanged = true; + }); + } + function poll() { + if (input.cm.state.focused) { + input.pollSelection(); + input.polling.set(input.cm.options.pollInterval, poll); + } + } + this.polling.set(this.cm.options.pollInterval, poll); + }; + ContentEditableInput.prototype.selectionChanged = function () { + var sel = this.getSelection(); + return sel.anchorNode != this.lastAnchorNode || sel.anchorOffset != this.lastAnchorOffset || sel.focusNode != this.lastFocusNode || sel.focusOffset != this.lastFocusOffset; + }; + ContentEditableInput.prototype.pollSelection = function () { + if (this.readDOMTimeout != null || this.gracePeriod || !this.selectionChanged()) { + return; + } + var sel = this.getSelection(), + cm = this.cm; + // On Android Chrome (version 56, at least), backspacing into an + // uneditable block element will put the cursor in that element, + // and then, because it's not editable, hide the virtual keyboard. + // Because Android doesn't allow us to actually detect backspace + // presses in a sane way, this code checks for when that happens + // and simulates a backspace press in this case. + if (android && chrome && this.cm.display.gutterSpecs.length && isInGutter(sel.anchorNode)) { + this.cm.triggerOnKeyDown({ + type: "keydown", + keyCode: 8, + preventDefault: Math.abs + }); + this.blur(); + this.focus(); + return; + } + if (this.composing) { + return; + } + this.rememberSelection(); + var anchor = domToPos(cm, sel.anchorNode, sel.anchorOffset); + var head = domToPos(cm, sel.focusNode, sel.focusOffset); + if (anchor && head) { + runInOp(cm, function () { + setSelection(cm.doc, simpleSelection(anchor, head), sel_dontScroll); + if (anchor.bad || head.bad) { + cm.curOp.selectionChanged = true; + } + }); + } + }; + ContentEditableInput.prototype.pollContent = function () { + if (this.readDOMTimeout != null) { + clearTimeout(this.readDOMTimeout); + this.readDOMTimeout = null; + } + var cm = this.cm, + display = cm.display, + sel = cm.doc.sel.primary(); + var from = sel.from(), + to = sel.to(); + if (from.ch == 0 && from.line > cm.firstLine()) { + from = Pos(from.line - 1, getLine(cm.doc, from.line - 1).length); + } + if (to.ch == getLine(cm.doc, to.line).text.length && to.line < cm.lastLine()) { + to = Pos(to.line + 1, 0); + } + if (from.line < display.viewFrom || to.line > display.viewTo - 1) { + return false; + } + var fromIndex, fromLine, fromNode; + if (from.line == display.viewFrom || (fromIndex = findViewIndex(cm, from.line)) == 0) { + fromLine = lineNo(display.view[0].line); + fromNode = display.view[0].node; + } else { + fromLine = lineNo(display.view[fromIndex].line); + fromNode = display.view[fromIndex - 1].node.nextSibling; + } + var toIndex = findViewIndex(cm, to.line); + var toLine, toNode; + if (toIndex == display.view.length - 1) { + toLine = display.viewTo - 1; + toNode = display.lineDiv.lastChild; + } else { + toLine = lineNo(display.view[toIndex + 1].line) - 1; + toNode = display.view[toIndex + 1].node.previousSibling; + } + if (!fromNode) { + return false; + } + var newText = cm.doc.splitLines(domTextBetween(cm, fromNode, toNode, fromLine, toLine)); + var oldText = getBetween(cm.doc, Pos(fromLine, 0), Pos(toLine, getLine(cm.doc, toLine).text.length)); + while (newText.length > 1 && oldText.length > 1) { + if (lst(newText) == lst(oldText)) { + newText.pop(); + oldText.pop(); + toLine--; + } else if (newText[0] == oldText[0]) { + newText.shift(); + oldText.shift(); + fromLine++; + } else { + break; + } + } + var cutFront = 0, + cutEnd = 0; + var newTop = newText[0], + oldTop = oldText[0], + maxCutFront = Math.min(newTop.length, oldTop.length); + while (cutFront < maxCutFront && newTop.charCodeAt(cutFront) == oldTop.charCodeAt(cutFront)) { + ++cutFront; + } + var newBot = lst(newText), + oldBot = lst(oldText); + var maxCutEnd = Math.min(newBot.length - (newText.length == 1 ? cutFront : 0), oldBot.length - (oldText.length == 1 ? cutFront : 0)); + while (cutEnd < maxCutEnd && newBot.charCodeAt(newBot.length - cutEnd - 1) == oldBot.charCodeAt(oldBot.length - cutEnd - 1)) { + ++cutEnd; + } + // Try to move start of change to start of selection if ambiguous + if (newText.length == 1 && oldText.length == 1 && fromLine == from.line) { + while (cutFront && cutFront > from.ch && newBot.charCodeAt(newBot.length - cutEnd - 1) == oldBot.charCodeAt(oldBot.length - cutEnd - 1)) { + cutFront--; + cutEnd++; + } + } + newText[newText.length - 1] = newBot.slice(0, newBot.length - cutEnd).replace(/^\u200b+/, ""); + newText[0] = newText[0].slice(cutFront).replace(/\u200b+$/, ""); + var chFrom = Pos(fromLine, cutFront); + var chTo = Pos(toLine, oldText.length ? lst(oldText).length - cutEnd : 0); + if (newText.length > 1 || newText[0] || cmp(chFrom, chTo)) { + replaceRange(cm.doc, newText, chFrom, chTo, "+input"); + return true; + } + }; + ContentEditableInput.prototype.ensurePolled = function () { + this.forceCompositionEnd(); + }; + ContentEditableInput.prototype.reset = function () { + this.forceCompositionEnd(); + }; + ContentEditableInput.prototype.forceCompositionEnd = function () { + if (!this.composing) { + return; + } + clearTimeout(this.readDOMTimeout); + this.composing = null; + this.updateFromDOM(); + this.div.blur(); + this.div.focus(); + }; + ContentEditableInput.prototype.readFromDOMSoon = function () { + var this$1 = this; + if (this.readDOMTimeout != null) { + return; + } + this.readDOMTimeout = setTimeout(function () { + this$1.readDOMTimeout = null; + if (this$1.composing) { + if (this$1.composing.done) { + this$1.composing = null; + } else { + return; + } + } + this$1.updateFromDOM(); + }, 80); + }; + ContentEditableInput.prototype.updateFromDOM = function () { + var this$1 = this; + if (this.cm.isReadOnly() || !this.pollContent()) { + runInOp(this.cm, function () { + return regChange(this$1.cm); + }); + } + }; + ContentEditableInput.prototype.setUneditable = function (node) { + node.contentEditable = "false"; + }; + ContentEditableInput.prototype.onKeyPress = function (e) { + if (e.charCode == 0 || this.composing) { + return; + } + e.preventDefault(); + if (!this.cm.isReadOnly()) { + operation(this.cm, applyTextInput)(this.cm, String.fromCharCode(e.charCode == null ? e.keyCode : e.charCode), 0); + } + }; + ContentEditableInput.prototype.readOnlyChanged = function (val) { + this.div.contentEditable = String(val != "nocursor"); + }; + ContentEditableInput.prototype.onContextMenu = function () {}; + ContentEditableInput.prototype.resetPosition = function () {}; + ContentEditableInput.prototype.needsContentAttribute = true; + function posToDOM(cm, pos) { + var view = findViewForLine(cm, pos.line); + if (!view || view.hidden) { + return null; + } + var line = getLine(cm.doc, pos.line); + var info = mapFromLineView(view, line, pos.line); + var order = getOrder(line, cm.doc.direction), + side = "left"; + if (order) { + var partPos = getBidiPartAt(order, pos.ch); + side = partPos % 2 ? "right" : "left"; + } + var result = nodeAndOffsetInLineMap(info.map, pos.ch, side); + result.offset = result.collapse == "right" ? result.end : result.start; + return result; + } + function isInGutter(node) { + for (var scan = node; scan; scan = scan.parentNode) { + if (/CodeMirror-gutter-wrapper/.test(scan.className)) { + return true; + } + } + return false; + } + function badPos(pos, bad) { + if (bad) { + pos.bad = true; + } + return pos; + } + function domTextBetween(cm, from, to, fromLine, toLine) { + var text = "", + closing = false, + lineSep = cm.doc.lineSeparator(), + extraLinebreak = false; + function recognizeMarker(id) { + return function (marker) { + return marker.id == id; + }; + } + function close() { + if (closing) { + text += lineSep; + if (extraLinebreak) { + text += lineSep; + } + closing = extraLinebreak = false; + } + } + function addText(str) { + if (str) { + close(); + text += str; + } + } + function walk(node) { + if (node.nodeType == 1) { + var cmText = node.getAttribute("cm-text"); + if (cmText) { + addText(cmText); + return; + } + var markerID = node.getAttribute("cm-marker"), + range; + if (markerID) { + var found = cm.findMarks(Pos(fromLine, 0), Pos(toLine + 1, 0), recognizeMarker(+markerID)); + if (found.length && (range = found[0].find(0))) { + addText(getBetween(cm.doc, range.from, range.to).join(lineSep)); + } + return; + } + if (node.getAttribute("contenteditable") == "false") { + return; + } + var isBlock = /^(pre|div|p|li|table|br)$/i.test(node.nodeName); + if (!/^br$/i.test(node.nodeName) && node.textContent.length == 0) { + return; + } + if (isBlock) { + close(); + } + for (var i = 0; i < node.childNodes.length; i++) { + walk(node.childNodes[i]); + } + if (/^(pre|p)$/i.test(node.nodeName)) { + extraLinebreak = true; + } + if (isBlock) { + closing = true; + } + } else if (node.nodeType == 3) { + addText(node.nodeValue.replace(/\u200b/g, "").replace(/\u00a0/g, " ")); + } + } + for (;;) { + walk(from); + if (from == to) { + break; + } + from = from.nextSibling; + extraLinebreak = false; + } + return text; + } + function domToPos(cm, node, offset) { + var lineNode; + if (node == cm.display.lineDiv) { + lineNode = cm.display.lineDiv.childNodes[offset]; + if (!lineNode) { + return badPos(cm.clipPos(Pos(cm.display.viewTo - 1)), true); + } + node = null; + offset = 0; + } else { + for (lineNode = node;; lineNode = lineNode.parentNode) { + if (!lineNode || lineNode == cm.display.lineDiv) { + return null; + } + if (lineNode.parentNode && lineNode.parentNode == cm.display.lineDiv) { + break; + } + } + } + for (var i = 0; i < cm.display.view.length; i++) { + var lineView = cm.display.view[i]; + if (lineView.node == lineNode) { + return locateNodeInLineView(lineView, node, offset); + } + } + } + function locateNodeInLineView(lineView, node, offset) { + var wrapper = lineView.text.firstChild, + bad = false; + if (!node || !contains(wrapper, node)) { + return badPos(Pos(lineNo(lineView.line), 0), true); + } + if (node == wrapper) { + bad = true; + node = wrapper.childNodes[offset]; + offset = 0; + if (!node) { + var line = lineView.rest ? lst(lineView.rest) : lineView.line; + return badPos(Pos(lineNo(line), line.text.length), bad); + } + } + var textNode = node.nodeType == 3 ? node : null, + topNode = node; + if (!textNode && node.childNodes.length == 1 && node.firstChild.nodeType == 3) { + textNode = node.firstChild; + if (offset) { + offset = textNode.nodeValue.length; + } + } + while (topNode.parentNode != wrapper) { + topNode = topNode.parentNode; + } + var measure = lineView.measure, + maps = measure.maps; + function find(textNode, topNode, offset) { + for (var i = -1; i < (maps ? maps.length : 0); i++) { + var map = i < 0 ? measure.map : maps[i]; + for (var j = 0; j < map.length; j += 3) { + var curNode = map[j + 2]; + if (curNode == textNode || curNode == topNode) { + var line = lineNo(i < 0 ? lineView.line : lineView.rest[i]); + var ch = map[j] + offset; + if (offset < 0 || curNode != textNode) { + ch = map[j + (offset ? 1 : 0)]; + } + return Pos(line, ch); + } + } + } + } + var found = find(textNode, topNode, offset); + if (found) { + return badPos(found, bad); + } + + // FIXME this is all really shaky. might handle the few cases it needs to handle, but likely to cause problems + for (var after = topNode.nextSibling, dist = textNode ? textNode.nodeValue.length - offset : 0; after; after = after.nextSibling) { + found = find(after, after.firstChild, 0); + if (found) { + return badPos(Pos(found.line, found.ch - dist), bad); + } else { + dist += after.textContent.length; + } + } + for (var before = topNode.previousSibling, dist$1 = offset; before; before = before.previousSibling) { + found = find(before, before.firstChild, -1); + if (found) { + return badPos(Pos(found.line, found.ch + dist$1), bad); + } else { + dist$1 += before.textContent.length; + } + } + } + + // TEXTAREA INPUT STYLE + + var TextareaInput = function (cm) { + this.cm = cm; + // See input.poll and input.reset + this.prevInput = ""; + + // Flag that indicates whether we expect input to appear real soon + // now (after some event like 'keypress' or 'input') and are + // polling intensively. + this.pollingFast = false; + // Self-resetting timeout for the poller + this.polling = new Delayed(); + // Used to work around IE issue with selection being forgotten when focus moves away from textarea + this.hasSelection = false; + this.composing = null; + }; + TextareaInput.prototype.init = function (display) { + var this$1 = this; + var input = this, + cm = this.cm; + this.createField(display); + var te = this.textarea; + display.wrapper.insertBefore(this.wrapper, display.wrapper.firstChild); + + // Needed to hide big blue blinking cursor on Mobile Safari (doesn't seem to work in iOS 8 anymore) + if (ios) { + te.style.width = "0px"; + } + on(te, "input", function () { + if (ie && ie_version >= 9 && this$1.hasSelection) { + this$1.hasSelection = null; + } + input.poll(); + }); + on(te, "paste", function (e) { + if (signalDOMEvent(cm, e) || handlePaste(e, cm)) { + return; + } + cm.state.pasteIncoming = +new Date(); + input.fastPoll(); + }); + function prepareCopyCut(e) { + if (signalDOMEvent(cm, e)) { + return; + } + if (cm.somethingSelected()) { + setLastCopied({ + lineWise: false, + text: cm.getSelections() + }); + } else if (!cm.options.lineWiseCopyCut) { + return; + } else { + var ranges = copyableRanges(cm); + setLastCopied({ + lineWise: true, + text: ranges.text + }); + if (e.type == "cut") { + cm.setSelections(ranges.ranges, null, sel_dontScroll); + } else { + input.prevInput = ""; + te.value = ranges.text.join("\n"); + selectInput(te); + } + } + if (e.type == "cut") { + cm.state.cutIncoming = +new Date(); + } + } + on(te, "cut", prepareCopyCut); + on(te, "copy", prepareCopyCut); + on(display.scroller, "paste", function (e) { + if (eventInWidget(display, e) || signalDOMEvent(cm, e)) { + return; + } + if (!te.dispatchEvent) { + cm.state.pasteIncoming = +new Date(); + input.focus(); + return; + } + + // Pass the `paste` event to the textarea so it's handled by its event listener. + var event = new Event("paste"); + event.clipboardData = e.clipboardData; + te.dispatchEvent(event); + }); + + // Prevent normal selection in the editor (we handle our own) + on(display.lineSpace, "selectstart", function (e) { + if (!eventInWidget(display, e)) { + e_preventDefault(e); + } + }); + on(te, "compositionstart", function () { + var start = cm.getCursor("from"); + if (input.composing) { + input.composing.range.clear(); + } + input.composing = { + start: start, + range: cm.markText(start, cm.getCursor("to"), { + className: "CodeMirror-composing" + }) + }; + }); + on(te, "compositionend", function () { + if (input.composing) { + input.poll(); + input.composing.range.clear(); + input.composing = null; + } + }); + }; + TextareaInput.prototype.createField = function (_display) { + // Wraps and hides input textarea + this.wrapper = hiddenTextarea(); + // The semihidden textarea that is focused when the editor is + // focused, and receives input. + this.textarea = this.wrapper.firstChild; + }; + TextareaInput.prototype.screenReaderLabelChanged = function (label) { + // Label for screenreaders, accessibility + if (label) { + this.textarea.setAttribute('aria-label', label); + } else { + this.textarea.removeAttribute('aria-label'); + } + }; + TextareaInput.prototype.prepareSelection = function () { + // Redraw the selection and/or cursor + var cm = this.cm, + display = cm.display, + doc = cm.doc; + var result = prepareSelection(cm); + + // Move the hidden textarea near the cursor to prevent scrolling artifacts + if (cm.options.moveInputWithCursor) { + var headPos = cursorCoords(cm, doc.sel.primary().head, "div"); + var wrapOff = display.wrapper.getBoundingClientRect(), + lineOff = display.lineDiv.getBoundingClientRect(); + result.teTop = Math.max(0, Math.min(display.wrapper.clientHeight - 10, headPos.top + lineOff.top - wrapOff.top)); + result.teLeft = Math.max(0, Math.min(display.wrapper.clientWidth - 10, headPos.left + lineOff.left - wrapOff.left)); + } + return result; + }; + TextareaInput.prototype.showSelection = function (drawn) { + var cm = this.cm, + display = cm.display; + removeChildrenAndAdd(display.cursorDiv, drawn.cursors); + removeChildrenAndAdd(display.selectionDiv, drawn.selection); + if (drawn.teTop != null) { + this.wrapper.style.top = drawn.teTop + "px"; + this.wrapper.style.left = drawn.teLeft + "px"; + } + }; + + // Reset the input to correspond to the selection (or to be empty, + // when not typing and nothing is selected) + TextareaInput.prototype.reset = function (typing) { + if (this.contextMenuPending || this.composing) { + return; + } + var cm = this.cm; + if (cm.somethingSelected()) { + this.prevInput = ""; + var content = cm.getSelection(); + this.textarea.value = content; + if (cm.state.focused) { + selectInput(this.textarea); + } + if (ie && ie_version >= 9) { + this.hasSelection = content; + } + } else if (!typing) { + this.prevInput = this.textarea.value = ""; + if (ie && ie_version >= 9) { + this.hasSelection = null; + } + } + }; + TextareaInput.prototype.getField = function () { + return this.textarea; + }; + TextareaInput.prototype.supportsTouch = function () { + return false; + }; + TextareaInput.prototype.focus = function () { + if (this.cm.options.readOnly != "nocursor" && (!mobile || activeElt() != this.textarea)) { + try { + this.textarea.focus(); + } catch (e) {} // IE8 will throw if the textarea is display: none or not in DOM + } + }; + TextareaInput.prototype.blur = function () { + this.textarea.blur(); + }; + TextareaInput.prototype.resetPosition = function () { + this.wrapper.style.top = this.wrapper.style.left = 0; + }; + TextareaInput.prototype.receivedFocus = function () { + this.slowPoll(); + }; + + // Poll for input changes, using the normal rate of polling. This + // runs as long as the editor is focused. + TextareaInput.prototype.slowPoll = function () { + var this$1 = this; + if (this.pollingFast) { + return; + } + this.polling.set(this.cm.options.pollInterval, function () { + this$1.poll(); + if (this$1.cm.state.focused) { + this$1.slowPoll(); + } + }); + }; + + // When an event has just come in that is likely to add or change + // something in the input textarea, we poll faster, to ensure that + // the change appears on the screen quickly. + TextareaInput.prototype.fastPoll = function () { + var missed = false, + input = this; + input.pollingFast = true; + function p() { + var changed = input.poll(); + if (!changed && !missed) { + missed = true; + input.polling.set(60, p); + } else { + input.pollingFast = false; + input.slowPoll(); + } + } + input.polling.set(20, p); + }; + + // Read input from the textarea, and update the document to match. + // When something is selected, it is present in the textarea, and + // selected (unless it is huge, in which case a placeholder is + // used). When nothing is selected, the cursor sits after previously + // seen text (can be empty), which is stored in prevInput (we must + // not reset the textarea when typing, because that breaks IME). + TextareaInput.prototype.poll = function () { + var this$1 = this; + var cm = this.cm, + input = this.textarea, + prevInput = this.prevInput; + // Since this is called a *lot*, try to bail out as cheaply as + // possible when it is clear that nothing happened. hasSelection + // will be the case when there is a lot of text in the textarea, + // in which case reading its value would be expensive. + if (this.contextMenuPending || !cm.state.focused || hasSelection(input) && !prevInput && !this.composing || cm.isReadOnly() || cm.options.disableInput || cm.state.keySeq) { + return false; + } + var text = input.value; + // If nothing changed, bail. + if (text == prevInput && !cm.somethingSelected()) { + return false; + } + // Work around nonsensical selection resetting in IE9/10, and + // inexplicable appearance of private area unicode characters on + // some key combos in Mac (#2689). + if (ie && ie_version >= 9 && this.hasSelection === text || mac && /[\uf700-\uf7ff]/.test(text)) { + cm.display.input.reset(); + return false; + } + if (cm.doc.sel == cm.display.selForContextMenu) { + var first = text.charCodeAt(0); + if (first == 0x200b && !prevInput) { + prevInput = "\u200b"; + } + if (first == 0x21da) { + this.reset(); + return this.cm.execCommand("undo"); + } + } + // Find the part of the input that is actually new + var same = 0, + l = Math.min(prevInput.length, text.length); + while (same < l && prevInput.charCodeAt(same) == text.charCodeAt(same)) { + ++same; + } + runInOp(cm, function () { + applyTextInput(cm, text.slice(same), prevInput.length - same, null, this$1.composing ? "*compose" : null); + + // Don't leave long text in the textarea, since it makes further polling slow + if (text.length > 1000 || text.indexOf("\n") > -1) { + input.value = this$1.prevInput = ""; + } else { + this$1.prevInput = text; + } + if (this$1.composing) { + this$1.composing.range.clear(); + this$1.composing.range = cm.markText(this$1.composing.start, cm.getCursor("to"), { + className: "CodeMirror-composing" + }); + } + }); + return true; + }; + TextareaInput.prototype.ensurePolled = function () { + if (this.pollingFast && this.poll()) { + this.pollingFast = false; + } + }; + TextareaInput.prototype.onKeyPress = function () { + if (ie && ie_version >= 9) { + this.hasSelection = null; + } + this.fastPoll(); + }; + TextareaInput.prototype.onContextMenu = function (e) { + var input = this, + cm = input.cm, + display = cm.display, + te = input.textarea; + if (input.contextMenuPending) { + input.contextMenuPending(); + } + var pos = posFromMouse(cm, e), + scrollPos = display.scroller.scrollTop; + if (!pos || presto) { + return; + } // Opera is difficult. + + // Reset the current text selection only if the click is done outside of the selection + // and 'resetSelectionOnContextMenu' option is true. + var reset = cm.options.resetSelectionOnContextMenu; + if (reset && cm.doc.sel.contains(pos) == -1) { + operation(cm, setSelection)(cm.doc, simpleSelection(pos), sel_dontScroll); + } + var oldCSS = te.style.cssText, + oldWrapperCSS = input.wrapper.style.cssText; + var wrapperBox = input.wrapper.offsetParent.getBoundingClientRect(); + input.wrapper.style.cssText = "position: static"; + te.style.cssText = "position: absolute; width: 30px; height: 30px;\n top: " + (e.clientY - wrapperBox.top - 5) + "px; left: " + (e.clientX - wrapperBox.left - 5) + "px;\n z-index: 1000; background: " + (ie ? "rgba(255, 255, 255, .05)" : "transparent") + ";\n outline: none; border-width: 0; outline: none; overflow: hidden; opacity: .05; filter: alpha(opacity=5);"; + var oldScrollY; + if (webkit) { + oldScrollY = window.scrollY; + } // Work around Chrome issue (#2712) + display.input.focus(); + if (webkit) { + window.scrollTo(null, oldScrollY); + } + display.input.reset(); + // Adds "Select all" to context menu in FF + if (!cm.somethingSelected()) { + te.value = input.prevInput = " "; + } + input.contextMenuPending = rehide; + display.selForContextMenu = cm.doc.sel; + clearTimeout(display.detectingSelectAll); + + // Select-all will be greyed out if there's nothing to select, so + // this adds a zero-width space so that we can later check whether + // it got selected. + function prepareSelectAllHack() { + if (te.selectionStart != null) { + var selected = cm.somethingSelected(); + var extval = "\u200b" + (selected ? te.value : ""); + te.value = "\u21da"; // Used to catch context-menu undo + te.value = extval; + input.prevInput = selected ? "" : "\u200b"; + te.selectionStart = 1; + te.selectionEnd = extval.length; + // Re-set this, in case some other handler touched the + // selection in the meantime. + display.selForContextMenu = cm.doc.sel; + } + } + function rehide() { + if (input.contextMenuPending != rehide) { + return; + } + input.contextMenuPending = false; + input.wrapper.style.cssText = oldWrapperCSS; + te.style.cssText = oldCSS; + if (ie && ie_version < 9) { + display.scrollbars.setScrollTop(display.scroller.scrollTop = scrollPos); + } + + // Try to detect the user choosing select-all + if (te.selectionStart != null) { + if (!ie || ie && ie_version < 9) { + prepareSelectAllHack(); + } + var i = 0, + poll = function () { + if (display.selForContextMenu == cm.doc.sel && te.selectionStart == 0 && te.selectionEnd > 0 && input.prevInput == "\u200b") { + operation(cm, selectAll)(cm); + } else if (i++ < 10) { + display.detectingSelectAll = setTimeout(poll, 500); + } else { + display.selForContextMenu = null; + display.input.reset(); + } + }; + display.detectingSelectAll = setTimeout(poll, 200); + } + } + if (ie && ie_version >= 9) { + prepareSelectAllHack(); + } + if (captureRightClick) { + e_stop(e); + var mouseup = function () { + off(window, "mouseup", mouseup); + setTimeout(rehide, 20); + }; + on(window, "mouseup", mouseup); + } else { + setTimeout(rehide, 50); + } + }; + TextareaInput.prototype.readOnlyChanged = function (val) { + if (!val) { + this.reset(); + } + this.textarea.disabled = val == "nocursor"; + this.textarea.readOnly = !!val; + }; + TextareaInput.prototype.setUneditable = function () {}; + TextareaInput.prototype.needsContentAttribute = false; + function fromTextArea(textarea, options) { + options = options ? copyObj(options) : {}; + options.value = textarea.value; + if (!options.tabindex && textarea.tabIndex) { + options.tabindex = textarea.tabIndex; + } + if (!options.placeholder && textarea.placeholder) { + options.placeholder = textarea.placeholder; + } + // Set autofocus to true if this textarea is focused, or if it has + // autofocus and no other element is focused. + if (options.autofocus == null) { + var hasFocus = activeElt(); + options.autofocus = hasFocus == textarea || textarea.getAttribute("autofocus") != null && hasFocus == document.body; + } + function save() { + textarea.value = cm.getValue(); + } + var realSubmit; + if (textarea.form) { + on(textarea.form, "submit", save); + // Deplorable hack to make the submit method do the right thing. + if (!options.leaveSubmitMethodAlone) { + var form = textarea.form; + realSubmit = form.submit; + try { + var wrappedSubmit = form.submit = function () { + save(); + form.submit = realSubmit; + form.submit(); + form.submit = wrappedSubmit; + }; + } catch (e) {} + } + } + options.finishInit = function (cm) { + cm.save = save; + cm.getTextArea = function () { + return textarea; + }; + cm.toTextArea = function () { + cm.toTextArea = isNaN; // Prevent this from being ran twice + save(); + textarea.parentNode.removeChild(cm.getWrapperElement()); + textarea.style.display = ""; + if (textarea.form) { + off(textarea.form, "submit", save); + if (!options.leaveSubmitMethodAlone && typeof textarea.form.submit == "function") { + textarea.form.submit = realSubmit; + } + } + }; + }; + textarea.style.display = "none"; + var cm = CodeMirror(function (node) { + return textarea.parentNode.insertBefore(node, textarea.nextSibling); + }, options); + return cm; + } + function addLegacyProps(CodeMirror) { + CodeMirror.off = off; + CodeMirror.on = on; + CodeMirror.wheelEventPixels = wheelEventPixels; + CodeMirror.Doc = Doc; + CodeMirror.splitLines = splitLinesAuto; + CodeMirror.countColumn = countColumn; + CodeMirror.findColumn = findColumn; + CodeMirror.isWordChar = isWordCharBasic; + CodeMirror.Pass = Pass; + CodeMirror.signal = signal; + CodeMirror.Line = Line; + CodeMirror.changeEnd = changeEnd; + CodeMirror.scrollbarModel = scrollbarModel; + CodeMirror.Pos = Pos; + CodeMirror.cmpPos = cmp; + CodeMirror.modes = modes; + CodeMirror.mimeModes = mimeModes; + CodeMirror.resolveMode = resolveMode; + CodeMirror.getMode = getMode; + CodeMirror.modeExtensions = modeExtensions; + CodeMirror.extendMode = extendMode; + CodeMirror.copyState = copyState; + CodeMirror.startState = startState; + CodeMirror.innerMode = innerMode; + CodeMirror.commands = commands; + CodeMirror.keyMap = keyMap; + CodeMirror.keyName = keyName; + CodeMirror.isModifierKey = isModifierKey; + CodeMirror.lookupKey = lookupKey; + CodeMirror.normalizeKeyMap = normalizeKeyMap; + CodeMirror.StringStream = StringStream; + CodeMirror.SharedTextMarker = SharedTextMarker; + CodeMirror.TextMarker = TextMarker; + CodeMirror.LineWidget = LineWidget; + CodeMirror.e_preventDefault = e_preventDefault; + CodeMirror.e_stopPropagation = e_stopPropagation; + CodeMirror.e_stop = e_stop; + CodeMirror.addClass = addClass; + CodeMirror.contains = contains; + CodeMirror.rmClass = rmClass; + CodeMirror.keyNames = keyNames; + } + + // EDITOR CONSTRUCTOR + + defineOptions(CodeMirror); + addEditorMethods(CodeMirror); + + // Set up methods on CodeMirror's prototype to redirect to the editor's document. + var dontDelegate = "iter insert remove copy getEditor constructor".split(" "); + for (var prop in Doc.prototype) { + if (Doc.prototype.hasOwnProperty(prop) && indexOf(dontDelegate, prop) < 0) { + CodeMirror.prototype[prop] = function (method) { + return function () { + return method.apply(this.doc, arguments); + }; + }(Doc.prototype[prop]); + } + } + eventMixin(Doc); + CodeMirror.inputStyles = { + "textarea": TextareaInput, + "contenteditable": ContentEditableInput + }; + + // Extra arguments are stored as the mode's dependencies, which is + // used by (legacy) mechanisms like loadmode.js to automatically + // load a mode. (Preferred mechanism is the require/define calls.) + CodeMirror.defineMode = function (name /*, mode, …*/) { + if (!CodeMirror.defaults.mode && name != "null") { + CodeMirror.defaults.mode = name; + } + defineMode.apply(this, arguments); + }; + CodeMirror.defineMIME = defineMIME; + + // Minimal default mode. + CodeMirror.defineMode("null", function () { + return { + token: function (stream) { + return stream.skipToEnd(); + } + }; + }); + CodeMirror.defineMIME("text/plain", "null"); + + // EXTENSIONS + + CodeMirror.defineExtension = function (name, func) { + CodeMirror.prototype[name] = func; + }; + CodeMirror.defineDocExtension = function (name, func) { + Doc.prototype[name] = func; + }; + CodeMirror.fromTextArea = fromTextArea; + addLegacyProps(CodeMirror); + CodeMirror.version = "5.65.3"; + return CodeMirror; +}); + +/***/ }), + +/***/ "../../../node_modules/codemirror/mode/javascript/javascript.js": +/*!**********************************************************************!*\ + !*** ../../../node_modules/codemirror/mode/javascript/javascript.js ***! + \**********************************************************************/ +/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) { + +"use strict"; + + +// CodeMirror, copyright (c) by Marijn Haverbeke and others +// Distributed under an MIT license: https://codemirror.net/LICENSE + +(function (mod) { + if (true) + // CommonJS + mod(__webpack_require__(/*! ../../lib/codemirror */ "../../../node_modules/codemirror/lib/codemirror.js"));else {} +})(function (CodeMirror) { + "use strict"; + + CodeMirror.defineMode("javascript", function (config, parserConfig) { + var indentUnit = config.indentUnit; + var statementIndent = parserConfig.statementIndent; + var jsonldMode = parserConfig.jsonld; + var jsonMode = parserConfig.json || jsonldMode; + var trackScope = parserConfig.trackScope !== false; + var isTS = parserConfig.typescript; + var wordRE = parserConfig.wordCharacters || /[\w$\xa1-\uffff]/; + + // Tokenizer + + var keywords = function () { + function kw(type) { + return { + type: type, + style: "keyword" + }; + } + var A = kw("keyword a"), + B = kw("keyword b"), + C = kw("keyword c"), + D = kw("keyword d"); + var operator = kw("operator"), + atom = { + type: "atom", + style: "atom" + }; + return { + "if": kw("if"), + "while": A, + "with": A, + "else": B, + "do": B, + "try": B, + "finally": B, + "return": D, + "break": D, + "continue": D, + "new": kw("new"), + "delete": C, + "void": C, + "throw": C, + "debugger": kw("debugger"), + "var": kw("var"), + "const": kw("var"), + "let": kw("var"), + "function": kw("function"), + "catch": kw("catch"), + "for": kw("for"), + "switch": kw("switch"), + "case": kw("case"), + "default": kw("default"), + "in": operator, + "typeof": operator, + "instanceof": operator, + "true": atom, + "false": atom, + "null": atom, + "undefined": atom, + "NaN": atom, + "Infinity": atom, + "this": kw("this"), + "class": kw("class"), + "super": kw("atom"), + "yield": C, + "export": kw("export"), + "import": kw("import"), + "extends": C, + "await": C + }; + }(); + var isOperatorChar = /[+\-*&%=<>!?|~^@]/; + var isJsonldKeyword = /^@(context|id|value|language|type|container|list|set|reverse|index|base|vocab|graph)"/; + function readRegexp(stream) { + var escaped = false, + next, + inSet = false; + while ((next = stream.next()) != null) { + if (!escaped) { + if (next == "/" && !inSet) return; + if (next == "[") inSet = true;else if (inSet && next == "]") inSet = false; + } + escaped = !escaped && next == "\\"; + } + } + + // Used as scratch variables to communicate multiple values without + // consing up tons of objects. + var type, content; + function ret(tp, style, cont) { + type = tp; + content = cont; + return style; + } + function tokenBase(stream, state) { + var ch = stream.next(); + if (ch == '"' || ch == "'") { + state.tokenize = tokenString(ch); + return state.tokenize(stream, state); + } else if (ch == "." && stream.match(/^\d[\d_]*(?:[eE][+\-]?[\d_]+)?/)) { + return ret("number", "number"); + } else if (ch == "." && stream.match("..")) { + return ret("spread", "meta"); + } else if (/[\[\]{}\(\),;\:\.]/.test(ch)) { + return ret(ch); + } else if (ch == "=" && stream.eat(">")) { + return ret("=>", "operator"); + } else if (ch == "0" && stream.match(/^(?:x[\dA-Fa-f_]+|o[0-7_]+|b[01_]+)n?/)) { + return ret("number", "number"); + } else if (/\d/.test(ch)) { + stream.match(/^[\d_]*(?:n|(?:\.[\d_]*)?(?:[eE][+\-]?[\d_]+)?)?/); + return ret("number", "number"); + } else if (ch == "/") { + if (stream.eat("*")) { + state.tokenize = tokenComment; + return tokenComment(stream, state); + } else if (stream.eat("/")) { + stream.skipToEnd(); + return ret("comment", "comment"); + } else if (expressionAllowed(stream, state, 1)) { + readRegexp(stream); + stream.match(/^\b(([gimyus])(?![gimyus]*\2))+\b/); + return ret("regexp", "string-2"); + } else { + stream.eat("="); + return ret("operator", "operator", stream.current()); + } + } else if (ch == "`") { + state.tokenize = tokenQuasi; + return tokenQuasi(stream, state); + } else if (ch == "#" && stream.peek() == "!") { + stream.skipToEnd(); + return ret("meta", "meta"); + } else if (ch == "#" && stream.eatWhile(wordRE)) { + return ret("variable", "property"); + } else if (ch == "<" && stream.match("!--") || ch == "-" && stream.match("->") && !/\S/.test(stream.string.slice(0, stream.start))) { + stream.skipToEnd(); + return ret("comment", "comment"); + } else if (isOperatorChar.test(ch)) { + if (ch != ">" || !state.lexical || state.lexical.type != ">") { + if (stream.eat("=")) { + if (ch == "!" || ch == "=") stream.eat("="); + } else if (/[<>*+\-|&?]/.test(ch)) { + stream.eat(ch); + if (ch == ">") stream.eat(ch); + } + } + if (ch == "?" && stream.eat(".")) return ret("."); + return ret("operator", "operator", stream.current()); + } else if (wordRE.test(ch)) { + stream.eatWhile(wordRE); + var word = stream.current(); + if (state.lastType != ".") { + if (keywords.propertyIsEnumerable(word)) { + var kw = keywords[word]; + return ret(kw.type, kw.style, word); + } + if (word == "async" && stream.match(/^(\s|\/\*([^*]|\*(?!\/))*?\*\/)*[\[\(\w]/, false)) return ret("async", "keyword", word); + } + return ret("variable", "variable", word); + } + } + function tokenString(quote) { + return function (stream, state) { + var escaped = false, + next; + if (jsonldMode && stream.peek() == "@" && stream.match(isJsonldKeyword)) { + state.tokenize = tokenBase; + return ret("jsonld-keyword", "meta"); + } + while ((next = stream.next()) != null) { + if (next == quote && !escaped) break; + escaped = !escaped && next == "\\"; + } + if (!escaped) state.tokenize = tokenBase; + return ret("string", "string"); + }; + } + function tokenComment(stream, state) { + var maybeEnd = false, + ch; + while (ch = stream.next()) { + if (ch == "/" && maybeEnd) { + state.tokenize = tokenBase; + break; + } + maybeEnd = ch == "*"; + } + return ret("comment", "comment"); + } + function tokenQuasi(stream, state) { + var escaped = false, + next; + while ((next = stream.next()) != null) { + if (!escaped && (next == "`" || next == "$" && stream.eat("{"))) { + state.tokenize = tokenBase; + break; + } + escaped = !escaped && next == "\\"; + } + return ret("quasi", "string-2", stream.current()); + } + var brackets = "([{}])"; + // This is a crude lookahead trick to try and notice that we're + // parsing the argument patterns for a fat-arrow function before we + // actually hit the arrow token. It only works if the arrow is on + // the same line as the arguments and there's no strange noise + // (comments) in between. Fallback is to only notice when we hit the + // arrow, and not declare the arguments as locals for the arrow + // body. + function findFatArrow(stream, state) { + if (state.fatArrowAt) state.fatArrowAt = null; + var arrow = stream.string.indexOf("=>", stream.start); + if (arrow < 0) return; + if (isTS) { + // Try to skip TypeScript return type declarations after the arguments + var m = /:\s*(?:\w+(?:<[^>]*>|\[\])?|\{[^}]*\})\s*$/.exec(stream.string.slice(stream.start, arrow)); + if (m) arrow = m.index; + } + var depth = 0, + sawSomething = false; + for (var pos = arrow - 1; pos >= 0; --pos) { + var ch = stream.string.charAt(pos); + var bracket = brackets.indexOf(ch); + if (bracket >= 0 && bracket < 3) { + if (!depth) { + ++pos; + break; + } + if (--depth == 0) { + if (ch == "(") sawSomething = true; + break; + } + } else if (bracket >= 3 && bracket < 6) { + ++depth; + } else if (wordRE.test(ch)) { + sawSomething = true; + } else if (/["'\/`]/.test(ch)) { + for (;; --pos) { + if (pos == 0) return; + var next = stream.string.charAt(pos - 1); + if (next == ch && stream.string.charAt(pos - 2) != "\\") { + pos--; + break; + } + } + } else if (sawSomething && !depth) { + ++pos; + break; + } + } + if (sawSomething && !depth) state.fatArrowAt = pos; + } + + // Parser + + var atomicTypes = { + "atom": true, + "number": true, + "variable": true, + "string": true, + "regexp": true, + "this": true, + "import": true, + "jsonld-keyword": true + }; + function JSLexical(indented, column, type, align, prev, info) { + this.indented = indented; + this.column = column; + this.type = type; + this.prev = prev; + this.info = info; + if (align != null) this.align = align; + } + function inScope(state, varname) { + if (!trackScope) return false; + for (var v = state.localVars; v; v = v.next) if (v.name == varname) return true; + for (var cx = state.context; cx; cx = cx.prev) { + for (var v = cx.vars; v; v = v.next) if (v.name == varname) return true; + } + } + function parseJS(state, style, type, content, stream) { + var cc = state.cc; + // Communicate our context to the combinators. + // (Less wasteful than consing up a hundred closures on every call.) + cx.state = state; + cx.stream = stream; + cx.marked = null, cx.cc = cc; + cx.style = style; + if (!state.lexical.hasOwnProperty("align")) state.lexical.align = true; + while (true) { + var combinator = cc.length ? cc.pop() : jsonMode ? expression : statement; + if (combinator(type, content)) { + while (cc.length && cc[cc.length - 1].lex) cc.pop()(); + if (cx.marked) return cx.marked; + if (type == "variable" && inScope(state, content)) return "variable-2"; + return style; + } + } + } + + // Combinator utils + + var cx = { + state: null, + column: null, + marked: null, + cc: null + }; + function pass() { + for (var i = arguments.length - 1; i >= 0; i--) cx.cc.push(arguments[i]); + } + function cont() { + pass.apply(null, arguments); + return true; + } + function inList(name, list) { + for (var v = list; v; v = v.next) if (v.name == name) return true; + return false; + } + function register(varname) { + var state = cx.state; + cx.marked = "def"; + if (!trackScope) return; + if (state.context) { + if (state.lexical.info == "var" && state.context && state.context.block) { + // FIXME function decls are also not block scoped + var newContext = registerVarScoped(varname, state.context); + if (newContext != null) { + state.context = newContext; + return; + } + } else if (!inList(varname, state.localVars)) { + state.localVars = new Var(varname, state.localVars); + return; + } + } + // Fall through means this is global + if (parserConfig.globalVars && !inList(varname, state.globalVars)) state.globalVars = new Var(varname, state.globalVars); + } + function registerVarScoped(varname, context) { + if (!context) { + return null; + } else if (context.block) { + var inner = registerVarScoped(varname, context.prev); + if (!inner) return null; + if (inner == context.prev) return context; + return new Context(inner, context.vars, true); + } else if (inList(varname, context.vars)) { + return context; + } else { + return new Context(context.prev, new Var(varname, context.vars), false); + } + } + function isModifier(name) { + return name == "public" || name == "private" || name == "protected" || name == "abstract" || name == "readonly"; + } + + // Combinators + + function Context(prev, vars, block) { + this.prev = prev; + this.vars = vars; + this.block = block; + } + function Var(name, next) { + this.name = name; + this.next = next; + } + var defaultVars = new Var("this", new Var("arguments", null)); + function pushcontext() { + cx.state.context = new Context(cx.state.context, cx.state.localVars, false); + cx.state.localVars = defaultVars; + } + function pushblockcontext() { + cx.state.context = new Context(cx.state.context, cx.state.localVars, true); + cx.state.localVars = null; + } + pushcontext.lex = pushblockcontext.lex = true; + function popcontext() { + cx.state.localVars = cx.state.context.vars; + cx.state.context = cx.state.context.prev; + } + popcontext.lex = true; + function pushlex(type, info) { + var result = function () { + var state = cx.state, + indent = state.indented; + if (state.lexical.type == "stat") indent = state.lexical.indented;else for (var outer = state.lexical; outer && outer.type == ")" && outer.align; outer = outer.prev) indent = outer.indented; + state.lexical = new JSLexical(indent, cx.stream.column(), type, null, state.lexical, info); + }; + result.lex = true; + return result; + } + function poplex() { + var state = cx.state; + if (state.lexical.prev) { + if (state.lexical.type == ")") state.indented = state.lexical.indented; + state.lexical = state.lexical.prev; + } + } + poplex.lex = true; + function expect(wanted) { + function exp(type) { + if (type == wanted) return cont();else if (wanted == ";" || type == "}" || type == ")" || type == "]") return pass();else return cont(exp); + } + ; + return exp; + } + function statement(type, value) { + if (type == "var") return cont(pushlex("vardef", value), vardef, expect(";"), poplex); + if (type == "keyword a") return cont(pushlex("form"), parenExpr, statement, poplex); + if (type == "keyword b") return cont(pushlex("form"), statement, poplex); + if (type == "keyword d") return cx.stream.match(/^\s*$/, false) ? cont() : cont(pushlex("stat"), maybeexpression, expect(";"), poplex); + if (type == "debugger") return cont(expect(";")); + if (type == "{") return cont(pushlex("}"), pushblockcontext, block, poplex, popcontext); + if (type == ";") return cont(); + if (type == "if") { + if (cx.state.lexical.info == "else" && cx.state.cc[cx.state.cc.length - 1] == poplex) cx.state.cc.pop()(); + return cont(pushlex("form"), parenExpr, statement, poplex, maybeelse); + } + if (type == "function") return cont(functiondef); + if (type == "for") return cont(pushlex("form"), pushblockcontext, forspec, statement, popcontext, poplex); + if (type == "class" || isTS && value == "interface") { + cx.marked = "keyword"; + return cont(pushlex("form", type == "class" ? type : value), className, poplex); + } + if (type == "variable") { + if (isTS && value == "declare") { + cx.marked = "keyword"; + return cont(statement); + } else if (isTS && (value == "module" || value == "enum" || value == "type") && cx.stream.match(/^\s*\w/, false)) { + cx.marked = "keyword"; + if (value == "enum") return cont(enumdef);else if (value == "type") return cont(typename, expect("operator"), typeexpr, expect(";"));else return cont(pushlex("form"), pattern, expect("{"), pushlex("}"), block, poplex, poplex); + } else if (isTS && value == "namespace") { + cx.marked = "keyword"; + return cont(pushlex("form"), expression, statement, poplex); + } else if (isTS && value == "abstract") { + cx.marked = "keyword"; + return cont(statement); + } else { + return cont(pushlex("stat"), maybelabel); + } + } + if (type == "switch") return cont(pushlex("form"), parenExpr, expect("{"), pushlex("}", "switch"), pushblockcontext, block, poplex, poplex, popcontext); + if (type == "case") return cont(expression, expect(":")); + if (type == "default") return cont(expect(":")); + if (type == "catch") return cont(pushlex("form"), pushcontext, maybeCatchBinding, statement, poplex, popcontext); + if (type == "export") return cont(pushlex("stat"), afterExport, poplex); + if (type == "import") return cont(pushlex("stat"), afterImport, poplex); + if (type == "async") return cont(statement); + if (value == "@") return cont(expression, statement); + return pass(pushlex("stat"), expression, expect(";"), poplex); + } + function maybeCatchBinding(type) { + if (type == "(") return cont(funarg, expect(")")); + } + function expression(type, value) { + return expressionInner(type, value, false); + } + function expressionNoComma(type, value) { + return expressionInner(type, value, true); + } + function parenExpr(type) { + if (type != "(") return pass(); + return cont(pushlex(")"), maybeexpression, expect(")"), poplex); + } + function expressionInner(type, value, noComma) { + if (cx.state.fatArrowAt == cx.stream.start) { + var body = noComma ? arrowBodyNoComma : arrowBody; + if (type == "(") return cont(pushcontext, pushlex(")"), commasep(funarg, ")"), poplex, expect("=>"), body, popcontext);else if (type == "variable") return pass(pushcontext, pattern, expect("=>"), body, popcontext); + } + var maybeop = noComma ? maybeoperatorNoComma : maybeoperatorComma; + if (atomicTypes.hasOwnProperty(type)) return cont(maybeop); + if (type == "function") return cont(functiondef, maybeop); + if (type == "class" || isTS && value == "interface") { + cx.marked = "keyword"; + return cont(pushlex("form"), classExpression, poplex); + } + if (type == "keyword c" || type == "async") return cont(noComma ? expressionNoComma : expression); + if (type == "(") return cont(pushlex(")"), maybeexpression, expect(")"), poplex, maybeop); + if (type == "operator" || type == "spread") return cont(noComma ? expressionNoComma : expression); + if (type == "[") return cont(pushlex("]"), arrayLiteral, poplex, maybeop); + if (type == "{") return contCommasep(objprop, "}", null, maybeop); + if (type == "quasi") return pass(quasi, maybeop); + if (type == "new") return cont(maybeTarget(noComma)); + return cont(); + } + function maybeexpression(type) { + if (type.match(/[;\}\)\],]/)) return pass(); + return pass(expression); + } + function maybeoperatorComma(type, value) { + if (type == ",") return cont(maybeexpression); + return maybeoperatorNoComma(type, value, false); + } + function maybeoperatorNoComma(type, value, noComma) { + var me = noComma == false ? maybeoperatorComma : maybeoperatorNoComma; + var expr = noComma == false ? expression : expressionNoComma; + if (type == "=>") return cont(pushcontext, noComma ? arrowBodyNoComma : arrowBody, popcontext); + if (type == "operator") { + if (/\+\+|--/.test(value) || isTS && value == "!") return cont(me); + if (isTS && value == "<" && cx.stream.match(/^([^<>]|<[^<>]*>)*>\s*\(/, false)) return cont(pushlex(">"), commasep(typeexpr, ">"), poplex, me); + if (value == "?") return cont(expression, expect(":"), expr); + return cont(expr); + } + if (type == "quasi") { + return pass(quasi, me); + } + if (type == ";") return; + if (type == "(") return contCommasep(expressionNoComma, ")", "call", me); + if (type == ".") return cont(property, me); + if (type == "[") return cont(pushlex("]"), maybeexpression, expect("]"), poplex, me); + if (isTS && value == "as") { + cx.marked = "keyword"; + return cont(typeexpr, me); + } + if (type == "regexp") { + cx.state.lastType = cx.marked = "operator"; + cx.stream.backUp(cx.stream.pos - cx.stream.start - 1); + return cont(expr); + } + } + function quasi(type, value) { + if (type != "quasi") return pass(); + if (value.slice(value.length - 2) != "${") return cont(quasi); + return cont(maybeexpression, continueQuasi); + } + function continueQuasi(type) { + if (type == "}") { + cx.marked = "string-2"; + cx.state.tokenize = tokenQuasi; + return cont(quasi); + } + } + function arrowBody(type) { + findFatArrow(cx.stream, cx.state); + return pass(type == "{" ? statement : expression); + } + function arrowBodyNoComma(type) { + findFatArrow(cx.stream, cx.state); + return pass(type == "{" ? statement : expressionNoComma); + } + function maybeTarget(noComma) { + return function (type) { + if (type == ".") return cont(noComma ? targetNoComma : target);else if (type == "variable" && isTS) return cont(maybeTypeArgs, noComma ? maybeoperatorNoComma : maybeoperatorComma);else return pass(noComma ? expressionNoComma : expression); + }; + } + function target(_, value) { + if (value == "target") { + cx.marked = "keyword"; + return cont(maybeoperatorComma); + } + } + function targetNoComma(_, value) { + if (value == "target") { + cx.marked = "keyword"; + return cont(maybeoperatorNoComma); + } + } + function maybelabel(type) { + if (type == ":") return cont(poplex, statement); + return pass(maybeoperatorComma, expect(";"), poplex); + } + function property(type) { + if (type == "variable") { + cx.marked = "property"; + return cont(); + } + } + function objprop(type, value) { + if (type == "async") { + cx.marked = "property"; + return cont(objprop); + } else if (type == "variable" || cx.style == "keyword") { + cx.marked = "property"; + if (value == "get" || value == "set") return cont(getterSetter); + var m; // Work around fat-arrow-detection complication for detecting typescript typed arrow params + if (isTS && cx.state.fatArrowAt == cx.stream.start && (m = cx.stream.match(/^\s*:\s*/, false))) cx.state.fatArrowAt = cx.stream.pos + m[0].length; + return cont(afterprop); + } else if (type == "number" || type == "string") { + cx.marked = jsonldMode ? "property" : cx.style + " property"; + return cont(afterprop); + } else if (type == "jsonld-keyword") { + return cont(afterprop); + } else if (isTS && isModifier(value)) { + cx.marked = "keyword"; + return cont(objprop); + } else if (type == "[") { + return cont(expression, maybetype, expect("]"), afterprop); + } else if (type == "spread") { + return cont(expressionNoComma, afterprop); + } else if (value == "*") { + cx.marked = "keyword"; + return cont(objprop); + } else if (type == ":") { + return pass(afterprop); + } + } + function getterSetter(type) { + if (type != "variable") return pass(afterprop); + cx.marked = "property"; + return cont(functiondef); + } + function afterprop(type) { + if (type == ":") return cont(expressionNoComma); + if (type == "(") return pass(functiondef); + } + function commasep(what, end, sep) { + function proceed(type, value) { + if (sep ? sep.indexOf(type) > -1 : type == ",") { + var lex = cx.state.lexical; + if (lex.info == "call") lex.pos = (lex.pos || 0) + 1; + return cont(function (type, value) { + if (type == end || value == end) return pass(); + return pass(what); + }, proceed); + } + if (type == end || value == end) return cont(); + if (sep && sep.indexOf(";") > -1) return pass(what); + return cont(expect(end)); + } + return function (type, value) { + if (type == end || value == end) return cont(); + return pass(what, proceed); + }; + } + function contCommasep(what, end, info) { + for (var i = 3; i < arguments.length; i++) cx.cc.push(arguments[i]); + return cont(pushlex(end, info), commasep(what, end), poplex); + } + function block(type) { + if (type == "}") return cont(); + return pass(statement, block); + } + function maybetype(type, value) { + if (isTS) { + if (type == ":") return cont(typeexpr); + if (value == "?") return cont(maybetype); + } + } + function maybetypeOrIn(type, value) { + if (isTS && (type == ":" || value == "in")) return cont(typeexpr); + } + function mayberettype(type) { + if (isTS && type == ":") { + if (cx.stream.match(/^\s*\w+\s+is\b/, false)) return cont(expression, isKW, typeexpr);else return cont(typeexpr); + } + } + function isKW(_, value) { + if (value == "is") { + cx.marked = "keyword"; + return cont(); + } + } + function typeexpr(type, value) { + if (value == "keyof" || value == "typeof" || value == "infer" || value == "readonly") { + cx.marked = "keyword"; + return cont(value == "typeof" ? expressionNoComma : typeexpr); + } + if (type == "variable" || value == "void") { + cx.marked = "type"; + return cont(afterType); + } + if (value == "|" || value == "&") return cont(typeexpr); + if (type == "string" || type == "number" || type == "atom") return cont(afterType); + if (type == "[") return cont(pushlex("]"), commasep(typeexpr, "]", ","), poplex, afterType); + if (type == "{") return cont(pushlex("}"), typeprops, poplex, afterType); + if (type == "(") return cont(commasep(typearg, ")"), maybeReturnType, afterType); + if (type == "<") return cont(commasep(typeexpr, ">"), typeexpr); + if (type == "quasi") { + return pass(quasiType, afterType); + } + } + function maybeReturnType(type) { + if (type == "=>") return cont(typeexpr); + } + function typeprops(type) { + if (type.match(/[\}\)\]]/)) return cont(); + if (type == "," || type == ";") return cont(typeprops); + return pass(typeprop, typeprops); + } + function typeprop(type, value) { + if (type == "variable" || cx.style == "keyword") { + cx.marked = "property"; + return cont(typeprop); + } else if (value == "?" || type == "number" || type == "string") { + return cont(typeprop); + } else if (type == ":") { + return cont(typeexpr); + } else if (type == "[") { + return cont(expect("variable"), maybetypeOrIn, expect("]"), typeprop); + } else if (type == "(") { + return pass(functiondecl, typeprop); + } else if (!type.match(/[;\}\)\],]/)) { + return cont(); + } + } + function quasiType(type, value) { + if (type != "quasi") return pass(); + if (value.slice(value.length - 2) != "${") return cont(quasiType); + return cont(typeexpr, continueQuasiType); + } + function continueQuasiType(type) { + if (type == "}") { + cx.marked = "string-2"; + cx.state.tokenize = tokenQuasi; + return cont(quasiType); + } + } + function typearg(type, value) { + if (type == "variable" && cx.stream.match(/^\s*[?:]/, false) || value == "?") return cont(typearg); + if (type == ":") return cont(typeexpr); + if (type == "spread") return cont(typearg); + return pass(typeexpr); + } + function afterType(type, value) { + if (value == "<") return cont(pushlex(">"), commasep(typeexpr, ">"), poplex, afterType); + if (value == "|" || type == "." || value == "&") return cont(typeexpr); + if (type == "[") return cont(typeexpr, expect("]"), afterType); + if (value == "extends" || value == "implements") { + cx.marked = "keyword"; + return cont(typeexpr); + } + if (value == "?") return cont(typeexpr, expect(":"), typeexpr); + } + function maybeTypeArgs(_, value) { + if (value == "<") return cont(pushlex(">"), commasep(typeexpr, ">"), poplex, afterType); + } + function typeparam() { + return pass(typeexpr, maybeTypeDefault); + } + function maybeTypeDefault(_, value) { + if (value == "=") return cont(typeexpr); + } + function vardef(_, value) { + if (value == "enum") { + cx.marked = "keyword"; + return cont(enumdef); + } + return pass(pattern, maybetype, maybeAssign, vardefCont); + } + function pattern(type, value) { + if (isTS && isModifier(value)) { + cx.marked = "keyword"; + return cont(pattern); + } + if (type == "variable") { + register(value); + return cont(); + } + if (type == "spread") return cont(pattern); + if (type == "[") return contCommasep(eltpattern, "]"); + if (type == "{") return contCommasep(proppattern, "}"); + } + function proppattern(type, value) { + if (type == "variable" && !cx.stream.match(/^\s*:/, false)) { + register(value); + return cont(maybeAssign); + } + if (type == "variable") cx.marked = "property"; + if (type == "spread") return cont(pattern); + if (type == "}") return pass(); + if (type == "[") return cont(expression, expect(']'), expect(':'), proppattern); + return cont(expect(":"), pattern, maybeAssign); + } + function eltpattern() { + return pass(pattern, maybeAssign); + } + function maybeAssign(_type, value) { + if (value == "=") return cont(expressionNoComma); + } + function vardefCont(type) { + if (type == ",") return cont(vardef); + } + function maybeelse(type, value) { + if (type == "keyword b" && value == "else") return cont(pushlex("form", "else"), statement, poplex); + } + function forspec(type, value) { + if (value == "await") return cont(forspec); + if (type == "(") return cont(pushlex(")"), forspec1, poplex); + } + function forspec1(type) { + if (type == "var") return cont(vardef, forspec2); + if (type == "variable") return cont(forspec2); + return pass(forspec2); + } + function forspec2(type, value) { + if (type == ")") return cont(); + if (type == ";") return cont(forspec2); + if (value == "in" || value == "of") { + cx.marked = "keyword"; + return cont(expression, forspec2); + } + return pass(expression, forspec2); + } + function functiondef(type, value) { + if (value == "*") { + cx.marked = "keyword"; + return cont(functiondef); + } + if (type == "variable") { + register(value); + return cont(functiondef); + } + if (type == "(") return cont(pushcontext, pushlex(")"), commasep(funarg, ")"), poplex, mayberettype, statement, popcontext); + if (isTS && value == "<") return cont(pushlex(">"), commasep(typeparam, ">"), poplex, functiondef); + } + function functiondecl(type, value) { + if (value == "*") { + cx.marked = "keyword"; + return cont(functiondecl); + } + if (type == "variable") { + register(value); + return cont(functiondecl); + } + if (type == "(") return cont(pushcontext, pushlex(")"), commasep(funarg, ")"), poplex, mayberettype, popcontext); + if (isTS && value == "<") return cont(pushlex(">"), commasep(typeparam, ">"), poplex, functiondecl); + } + function typename(type, value) { + if (type == "keyword" || type == "variable") { + cx.marked = "type"; + return cont(typename); + } else if (value == "<") { + return cont(pushlex(">"), commasep(typeparam, ">"), poplex); + } + } + function funarg(type, value) { + if (value == "@") cont(expression, funarg); + if (type == "spread") return cont(funarg); + if (isTS && isModifier(value)) { + cx.marked = "keyword"; + return cont(funarg); + } + if (isTS && type == "this") return cont(maybetype, maybeAssign); + return pass(pattern, maybetype, maybeAssign); + } + function classExpression(type, value) { + // Class expressions may have an optional name. + if (type == "variable") return className(type, value); + return classNameAfter(type, value); + } + function className(type, value) { + if (type == "variable") { + register(value); + return cont(classNameAfter); + } + } + function classNameAfter(type, value) { + if (value == "<") return cont(pushlex(">"), commasep(typeparam, ">"), poplex, classNameAfter); + if (value == "extends" || value == "implements" || isTS && type == ",") { + if (value == "implements") cx.marked = "keyword"; + return cont(isTS ? typeexpr : expression, classNameAfter); + } + if (type == "{") return cont(pushlex("}"), classBody, poplex); + } + function classBody(type, value) { + if (type == "async" || type == "variable" && (value == "static" || value == "get" || value == "set" || isTS && isModifier(value)) && cx.stream.match(/^\s+[\w$\xa1-\uffff]/, false)) { + cx.marked = "keyword"; + return cont(classBody); + } + if (type == "variable" || cx.style == "keyword") { + cx.marked = "property"; + return cont(classfield, classBody); + } + if (type == "number" || type == "string") return cont(classfield, classBody); + if (type == "[") return cont(expression, maybetype, expect("]"), classfield, classBody); + if (value == "*") { + cx.marked = "keyword"; + return cont(classBody); + } + if (isTS && type == "(") return pass(functiondecl, classBody); + if (type == ";" || type == ",") return cont(classBody); + if (type == "}") return cont(); + if (value == "@") return cont(expression, classBody); + } + function classfield(type, value) { + if (value == "!") return cont(classfield); + if (value == "?") return cont(classfield); + if (type == ":") return cont(typeexpr, maybeAssign); + if (value == "=") return cont(expressionNoComma); + var context = cx.state.lexical.prev, + isInterface = context && context.info == "interface"; + return pass(isInterface ? functiondecl : functiondef); + } + function afterExport(type, value) { + if (value == "*") { + cx.marked = "keyword"; + return cont(maybeFrom, expect(";")); + } + if (value == "default") { + cx.marked = "keyword"; + return cont(expression, expect(";")); + } + if (type == "{") return cont(commasep(exportField, "}"), maybeFrom, expect(";")); + return pass(statement); + } + function exportField(type, value) { + if (value == "as") { + cx.marked = "keyword"; + return cont(expect("variable")); + } + if (type == "variable") return pass(expressionNoComma, exportField); + } + function afterImport(type) { + if (type == "string") return cont(); + if (type == "(") return pass(expression); + if (type == ".") return pass(maybeoperatorComma); + return pass(importSpec, maybeMoreImports, maybeFrom); + } + function importSpec(type, value) { + if (type == "{") return contCommasep(importSpec, "}"); + if (type == "variable") register(value); + if (value == "*") cx.marked = "keyword"; + return cont(maybeAs); + } + function maybeMoreImports(type) { + if (type == ",") return cont(importSpec, maybeMoreImports); + } + function maybeAs(_type, value) { + if (value == "as") { + cx.marked = "keyword"; + return cont(importSpec); + } + } + function maybeFrom(_type, value) { + if (value == "from") { + cx.marked = "keyword"; + return cont(expression); + } + } + function arrayLiteral(type) { + if (type == "]") return cont(); + return pass(commasep(expressionNoComma, "]")); + } + function enumdef() { + return pass(pushlex("form"), pattern, expect("{"), pushlex("}"), commasep(enummember, "}"), poplex, poplex); + } + function enummember() { + return pass(pattern, maybeAssign); + } + function isContinuedStatement(state, textAfter) { + return state.lastType == "operator" || state.lastType == "," || isOperatorChar.test(textAfter.charAt(0)) || /[,.]/.test(textAfter.charAt(0)); + } + function expressionAllowed(stream, state, backUp) { + return state.tokenize == tokenBase && /^(?:operator|sof|keyword [bcd]|case|new|export|default|spread|[\[{}\(,;:]|=>)$/.test(state.lastType) || state.lastType == "quasi" && /\{\s*$/.test(stream.string.slice(0, stream.pos - (backUp || 0))); + } + + // Interface + + return { + startState: function (basecolumn) { + var state = { + tokenize: tokenBase, + lastType: "sof", + cc: [], + lexical: new JSLexical((basecolumn || 0) - indentUnit, 0, "block", false), + localVars: parserConfig.localVars, + context: parserConfig.localVars && new Context(null, null, false), + indented: basecolumn || 0 + }; + if (parserConfig.globalVars && typeof parserConfig.globalVars == "object") state.globalVars = parserConfig.globalVars; + return state; + }, + token: function (stream, state) { + if (stream.sol()) { + if (!state.lexical.hasOwnProperty("align")) state.lexical.align = false; + state.indented = stream.indentation(); + findFatArrow(stream, state); + } + if (state.tokenize != tokenComment && stream.eatSpace()) return null; + var style = state.tokenize(stream, state); + if (type == "comment") return style; + state.lastType = type == "operator" && (content == "++" || content == "--") ? "incdec" : type; + return parseJS(state, style, type, content, stream); + }, + indent: function (state, textAfter) { + if (state.tokenize == tokenComment || state.tokenize == tokenQuasi) return CodeMirror.Pass; + if (state.tokenize != tokenBase) return 0; + var firstChar = textAfter && textAfter.charAt(0), + lexical = state.lexical, + top; + // Kludge to prevent 'maybelse' from blocking lexical scope pops + if (!/^\s*else\b/.test(textAfter)) for (var i = state.cc.length - 1; i >= 0; --i) { + var c = state.cc[i]; + if (c == poplex) lexical = lexical.prev;else if (c != maybeelse && c != popcontext) break; + } + while ((lexical.type == "stat" || lexical.type == "form") && (firstChar == "}" || (top = state.cc[state.cc.length - 1]) && (top == maybeoperatorComma || top == maybeoperatorNoComma) && !/^[,\.=+\-*:?[\(]/.test(textAfter))) lexical = lexical.prev; + if (statementIndent && lexical.type == ")" && lexical.prev.type == "stat") lexical = lexical.prev; + var type = lexical.type, + closing = firstChar == type; + if (type == "vardef") return lexical.indented + (state.lastType == "operator" || state.lastType == "," ? lexical.info.length + 1 : 0);else if (type == "form" && firstChar == "{") return lexical.indented;else if (type == "form") return lexical.indented + indentUnit;else if (type == "stat") return lexical.indented + (isContinuedStatement(state, textAfter) ? statementIndent || indentUnit : 0);else if (lexical.info == "switch" && !closing && parserConfig.doubleIndentSwitch != false) return lexical.indented + (/^(?:case|default)\b/.test(textAfter) ? indentUnit : 2 * indentUnit);else if (lexical.align) return lexical.column + (closing ? 0 : 1);else return lexical.indented + (closing ? 0 : indentUnit); + }, + electricInput: /^\s*(?:case .*?:|default:|\{|\})$/, + blockCommentStart: jsonMode ? null : "/*", + blockCommentEnd: jsonMode ? null : "*/", + blockCommentContinue: jsonMode ? null : " * ", + lineComment: jsonMode ? null : "//", + fold: "brace", + closeBrackets: "()[]{}''\"\"``", + helperType: jsonMode ? "json" : "javascript", + jsonldMode: jsonldMode, + jsonMode: jsonMode, + expressionAllowed: expressionAllowed, + skipExpression: function (state) { + parseJS(state, "atom", "atom", "true", new CodeMirror.StringStream("", 2, null)); + } + }; + }); + CodeMirror.registerHelper("wordChars", "javascript", /[\w$]/); + CodeMirror.defineMIME("text/javascript", "javascript"); + CodeMirror.defineMIME("text/ecmascript", "javascript"); + CodeMirror.defineMIME("application/javascript", "javascript"); + CodeMirror.defineMIME("application/x-javascript", "javascript"); + CodeMirror.defineMIME("application/ecmascript", "javascript"); + CodeMirror.defineMIME("application/json", { + name: "javascript", + json: true + }); + CodeMirror.defineMIME("application/x-json", { + name: "javascript", + json: true + }); + CodeMirror.defineMIME("application/manifest+json", { + name: "javascript", + json: true + }); + CodeMirror.defineMIME("application/ld+json", { + name: "javascript", + jsonld: true + }); + CodeMirror.defineMIME("text/typescript", { + name: "javascript", + typescript: true + }); + CodeMirror.defineMIME("application/typescript", { + name: "javascript", + typescript: true + }); +}); + +/***/ }), + /***/ "../../../node_modules/copy-to-clipboard/index.js": /*!********************************************************!*\ !*** ../../../node_modules/copy-to-clipboard/index.js ***! \********************************************************/ /***/ (function(module, __unused_webpack_exports, __webpack_require__) { +"use strict"; var deselectCurrent = __webpack_require__(/*! toggle-selection */ "../../../node_modules/toggle-selection/index.js"); @@ -11488,6 +28739,7 @@ module.exports = copy; \***********************************************************/ /***/ (function(__unused_webpack_module, exports) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -11504,6 +28756,7 @@ const isNode = exports.isNode = false; \****************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; var __createBinding = void 0 && (void 0).__createBinding || (Object.create ? function (o, m, k, k2) { @@ -12065,6 +29318,7 @@ exports.decodeXML = decodeXML; \**************************************************************/ /***/ (function(__unused_webpack_module, exports) { +"use strict"; // Adapted from https://github.com/mathiasbynens/he/blob/36afe179392226cf1b6ccdb16ebbb7a5a844d93a/src/he.js#L106-L134 @@ -12124,6 +29378,7 @@ exports["default"] = decodeCodePoint; \****************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; var __importDefault = void 0 && (void 0).__importDefault || function (mod) { @@ -12209,6 +29464,7 @@ function encodeHTMLTrieRe(regExp, str) { \****************************************************/ /***/ (function(__unused_webpack_module, exports) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -12322,6 +29578,7 @@ exports.escapeText = getEscaper(/[&<>\u00A0]/g, new Map([[38, "&"], [60, "&l \************************************************************************/ /***/ (function(__unused_webpack_module, exports) { +"use strict"; // Generated using scripts/write-decode-map.ts @@ -12342,6 +29599,7 @@ exports["default"] = new Uint16Array( \***********************************************************************/ /***/ (function(__unused_webpack_module, exports) { +"use strict"; // Generated using scripts/write-decode-map.ts @@ -12362,6 +29620,7 @@ exports["default"] = new Uint16Array( \*******************************************************************/ /***/ (function(__unused_webpack_module, exports) { +"use strict"; // Generated using scripts/write-encode-map.ts @@ -12636,6 +29895,7 @@ exports["default"] = new Map( /* #__PURE__ */restoreDiff([[9, " "], [0, "&Ne \***************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -12880,6 +30140,7 @@ Object.defineProperty(exports, "decodeXMLStrict", ({ \*************************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -21547,6 +38808,7 @@ exports.wrapHandler = wrapHandler; \*************************************************************/ /***/ (function(__unused_webpack_module, exports) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -21667,6 +38929,7 @@ exports.getFrameData = getFrameData; \************************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -21697,6 +38960,7 @@ exports.getNonce = getNonce; \************************************************/ /***/ (function(module, __unused_webpack_exports, __webpack_require__) { +"use strict"; /*! @@ -21799,6 +39063,7 @@ function isValidObject(val) { \*******************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -22367,6 +39632,7 @@ function isWebSocket(val) { \*******************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -22568,6 +39834,7 @@ function stringifyMessage(msg, replacer) { \*****************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; var __createBinding = void 0 && (void 0).__createBinding || (Object.create ? function (o, m, k, k2) { @@ -22604,6 +39871,7 @@ __exportStar(__webpack_require__(/*! ./common */ "../../../node_modules/graphql- \*******************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -22917,6 +40185,7 @@ function handleProtocols(protocols) { \******************************************************/ /***/ (function(__unused_webpack_module, exports) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -22980,6 +40249,7 @@ function limitCloseReason(reason, whenTooLong) { \************************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -23195,6 +40465,7 @@ function formatError(error) { \*****************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -23242,6 +40513,7 @@ var _locatedError = __webpack_require__(/*! ./locatedError.mjs */ "../../../node \************************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -23283,6 +40555,7 @@ function isLocatedGraphQLError(error) { \***********************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -23310,6 +40583,7 @@ function syntaxError(source, position, description) { \*****************************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -23450,6 +40724,7 @@ function getFieldEntryKey(node) { \***********************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -24127,6 +41402,7 @@ function getFieldDef(schema, parentType, fieldNode) { \*********************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -24205,6 +41481,7 @@ var _values = __webpack_require__(/*! ./values.mjs */ "../../../node_modules/gra \********************************************************************/ /***/ (function(__unused_webpack_module, exports) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -24271,6 +41548,7 @@ function mapAsyncIterator(iterable, callback) { \*************************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -24470,6 +41748,7 @@ async function executeSubscription(exeContext) { \**********************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -24661,6 +41940,7 @@ function hasOwnProperty(obj, prop) { \*************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -24790,6 +42070,7 @@ function graphqlImpl(args) { \***********************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -26078,6 +43359,7 @@ var _index6 = __webpack_require__(/*! ./utilities/index.mjs */ "../../../node_mo \******************************************************/ /***/ (function(__unused_webpack_module, exports) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -26117,6 +43399,7 @@ function pathToArray(path) { \***********************************************************/ /***/ (function(__unused_webpack_module, exports) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -26138,6 +43421,7 @@ function devAssert(condition, message) { \************************************************************/ /***/ (function(__unused_webpack_module, exports) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -26177,6 +43461,7 @@ function didYouMean(firstArg, secondArg) { \*********************************************************/ /***/ (function(__unused_webpack_module, exports) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -26208,6 +43493,7 @@ function groupBy(list, keyFn) { \**************************************************************/ /***/ (function(__unused_webpack_module, exports) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -26229,6 +43515,7 @@ function identityFunc(x) { \*********************************************************/ /***/ (function(__unused_webpack_module, exports) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -26328,6 +43615,7 @@ function getObjectTag(object) { \************************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -26391,6 +43679,7 @@ spurious results.`); \***********************************************************/ /***/ (function(__unused_webpack_module, exports) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -26412,6 +43701,7 @@ function invariant(condition, message) { \*****************************************************************/ /***/ (function(__unused_webpack_module, exports) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -26434,6 +43724,7 @@ function isAsyncIterable(maybeAsyncIterable) { \******************************************************************/ /***/ (function(__unused_webpack_module, exports) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -26469,6 +43760,7 @@ function isIterableObject(maybeIterable) { \**************************************************************/ /***/ (function(__unused_webpack_module, exports) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -26491,6 +43783,7 @@ function isObjectLike(value) { \***********************************************************/ /***/ (function(__unused_webpack_module, exports) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -26513,6 +43806,7 @@ function isPromise(value) { \********************************************************/ /***/ (function(__unused_webpack_module, exports) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -26562,6 +43856,7 @@ function keyMap(list, keyFn) { \***********************************************************/ /***/ (function(__unused_webpack_module, exports) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -26601,6 +43896,7 @@ function keyValMap(list, keyFn, valFn) { \**********************************************************/ /***/ (function(__unused_webpack_module, exports) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -26627,6 +43923,7 @@ function mapValue(map, fn) { \**********************************************************/ /***/ (function(__unused_webpack_module, exports) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -26669,6 +43966,7 @@ function memoize3(fn) { \****************************************************************/ /***/ (function(__unused_webpack_module, exports) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -26734,6 +44032,7 @@ function isDigit(code) { \****************************************************************/ /***/ (function(__unused_webpack_module, exports) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -26755,6 +44054,7 @@ function printPathArray(path) { \******************************************************************/ /***/ (function(__unused_webpack_module, exports) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -26786,6 +44086,7 @@ function promiseForObject(object) { \***************************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -26816,6 +44117,7 @@ function promiseReduce(values, callbackFn, initialValue) { \****************************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -26938,6 +44240,7 @@ function stringToArray(str) { \*********************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -26968,6 +44271,7 @@ class NonErrorThrown extends Error { \**********************************************************/ /***/ (function(__unused_webpack_module, exports) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -26996,6 +44300,7 @@ function toObjMap(obj) { \******************************************************/ /***/ (function(__unused_webpack_module, exports) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -27186,6 +44491,7 @@ var OperationTypeNode; \**************************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -27341,6 +44647,7 @@ function printBlockString(value, options) { \*******************************************************************/ /***/ (function(__unused_webpack_module, exports) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -27424,6 +44731,7 @@ function isNameContinue(code) { \********************************************************************/ /***/ (function(__unused_webpack_module, exports) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -27470,6 +44778,7 @@ var DirectiveLocation; \********************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -27682,6 +44991,7 @@ var _directiveLocation = __webpack_require__(/*! ./directiveLocation.mjs */ "../ \********************************************************/ /***/ (function(__unused_webpack_module, exports) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -27752,6 +45062,7 @@ var Kind; \********************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -28480,6 +45791,7 @@ function readName(lexer, start) { \***********************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -28521,6 +45833,7 @@ function getLocation(source, position) { \*********************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -29871,6 +47184,7 @@ function getTokenKindDesc(kind) { \*************************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -29926,6 +47240,7 @@ function isTypeExtensionNode(node) { \****************************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -29983,6 +47298,7 @@ function printPrefixedLines(lines) { \**************************************************************/ /***/ (function(__unused_webpack_module, exports) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -30022,6 +47338,7 @@ const escapeSequences = ['\\u0000', '\\u0001', '\\u0002', '\\u0003', '\\u0004', \**********************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -30380,6 +47697,7 @@ function hasMultilineItems(maybeArray) { \*********************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -30431,6 +47749,7 @@ function isSource(source) { \************************************************************/ /***/ (function(__unused_webpack_module, exports) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -30481,6 +47800,7 @@ var TokenKind; \**********************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -30807,6 +48127,7 @@ function getVisitFn(visitor, kind, isLeaving) { \*********************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -30858,6 +48179,7 @@ function assertEnumValueName(name) { \*********************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -31823,6 +49145,7 @@ function isRequiredInputField(field) { \*********************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -32000,6 +49323,7 @@ function isSpecifiedDirective(directive) { \****************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -32555,6 +49879,7 @@ var _assertName = __webpack_require__(/*! ./assertName.mjs */ "../../../node_mod \************************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -33073,6 +50398,7 @@ function isIntrospectionType(type) { \******************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -33297,6 +50623,7 @@ function serializeObject(outputValue) { \*****************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -33617,6 +50944,7 @@ function collectReferencedTypes(type, typeSet) { \*******************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -34024,6 +51352,7 @@ function getDeprecatedDirectiveNode(definitionNode) { \************************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -34322,6 +51651,7 @@ function visitWithTypeInfo(typeInfo, visitor) { \*******************************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -34372,6 +51702,7 @@ function isValidNameError(name) { \****************************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -34537,6 +51868,7 @@ const integerStringRegExp = /^-?(?:0|[1-9][0-9]*)$/; \******************************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -34628,6 +51960,7 @@ function buildSchema(source, options) { \*********************************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -34888,6 +52221,7 @@ function buildClientSchema(introspection, options) { \********************************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -35017,6 +52351,7 @@ function coerceInputValueImpl(inputValue, type, onError, path) { \*************************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -35049,6 +52384,7 @@ function concatAST(documents) { \****************************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -35595,6 +52931,7 @@ function isOneOf(node) { \***********************************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -35991,6 +53328,7 @@ function diff(oldArray, newArray) { \*************************************************************************/ /***/ (function(__unused_webpack_module, exports) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -36136,6 +53474,7 @@ function getIntrospectionQuery(options) { \*******************************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -36178,6 +53517,7 @@ function getOperationAST(documentAST, operationName) { \************************************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -36231,6 +53571,7 @@ function getOperationRootType(schema, operation) { \*********************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -36452,6 +53793,7 @@ var _findBreakingChanges = __webpack_require__(/*! ./findBreakingChanges.mjs */ \***************************************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -36498,6 +53840,7 @@ function introspectionFromSchema(schema, options) { \***************************************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -36649,6 +53992,7 @@ function sortBy(array, mapToKey) { \***************************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -36856,6 +54200,7 @@ function printDescription(def, indentation = '', firstInBlock = true) { \**********************************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -36937,6 +54282,7 @@ function collectDependencies(selectionSet) { \*****************************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -36990,6 +54336,7 @@ function sortFields(fields) { \**************************************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -37103,6 +54450,7 @@ function stripIgnoredCharacters(source) { \*******************************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -37207,6 +54555,7 @@ function doTypesOverlap(schema, typeA, typeB) { \***************************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -37240,6 +54589,7 @@ function typeFromAST(schema, typeNode) { \****************************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -37398,6 +54748,7 @@ function isMissingVariable(valueNode, variables) { \***********************************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -37452,6 +54803,7 @@ function valueFromASTUntyped(valueNode, variables) { \**********************************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -37636,6 +54988,7 @@ exports.ValidationContext = ValidationContext; \**********************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -37936,6 +55289,7 @@ var _NoSchemaIntrospectionCustomRule = __webpack_require__(/*! ./rules/custom/No \************************************************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -37977,6 +55331,7 @@ function ExecutableDefinitionsRule(context) { \**********************************************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -38089,6 +55444,7 @@ function getSuggestedFieldNames(type, fieldName) { \****************************************************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -38142,6 +55498,7 @@ function FragmentsOnCompositeTypesRule(context) { \*********************************************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -38233,6 +55590,7 @@ function KnownArgumentNamesOnDirectivesRule(context) { \******************************************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -38360,6 +55718,7 @@ function getDirectiveLocationForOperation(operation) { \*********************************************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -38397,6 +55756,7 @@ function KnownFragmentNamesRule(context) { \*****************************************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -38458,6 +55818,7 @@ function isSDLNode(value) { \*************************************************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -38498,6 +55859,7 @@ function LoneAnonymousOperationRule(context) { \***********************************************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -38541,6 +55903,7 @@ function LoneSchemaDefinitionRule(context) { \************************************************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -38620,6 +55983,7 @@ function MaxIntrospectionDepthRule(context) { \*******************************************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -38694,6 +56058,7 @@ function NoFragmentCyclesRule(context) { \***********************************************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -38744,6 +56109,7 @@ function NoUndefinedVariablesRule(context) { \********************************************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -38800,6 +56166,7 @@ function NoUnusedFragmentsRule(context) { \********************************************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -38854,6 +56221,7 @@ function NoUnusedVariablesRule(context) { \*******************************************************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -39318,6 +56686,7 @@ class PairSet { \**************************************************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -39381,6 +56750,7 @@ function getFragmentType(context, name) { \*************************************************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -39508,6 +56878,7 @@ function extensionKindToTypeName(kind) { \****************************************************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -39619,6 +56990,7 @@ function isRequiredArgumentNode(arg) { \**************************************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -39668,6 +57040,7 @@ function ScalarLeafsRule(context) { \***************************************************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -39733,6 +57106,7 @@ function SingleFieldSubscriptionsRule(context) { \********************************************************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -39802,6 +57176,7 @@ function UniqueArgumentDefinitionNamesRule(context) { \**********************************************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -39849,6 +57224,7 @@ function UniqueArgumentNamesRule(context) { \***********************************************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -39893,6 +57269,7 @@ function UniqueDirectiveNamesRule(context) { \******************************************************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -39970,6 +57347,7 @@ function UniqueDirectivesPerLocationRule(context) { \***********************************************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -40029,6 +57407,7 @@ function UniqueEnumValueNamesRule(context) { \*****************************************************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -40097,6 +57476,7 @@ function hasField(type, fieldName) { \**********************************************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -40137,6 +57517,7 @@ function UniqueFragmentNamesRule(context) { \************************************************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -40189,6 +57570,7 @@ function UniqueInputFieldNamesRule(context) { \***********************************************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -40231,6 +57613,7 @@ function UniqueOperationNamesRule(context) { \***********************************************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -40289,6 +57672,7 @@ function UniqueOperationTypesRule(context) { \******************************************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -40339,6 +57723,7 @@ function UniqueTypeNamesRule(context) { \**********************************************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -40381,6 +57766,7 @@ function UniqueVariableNamesRule(context) { \**********************************************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -40550,6 +57936,7 @@ function validateOneOfInputObject(context, node, type, fieldNodeMap, variableDef \*************************************************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -40591,6 +57978,7 @@ function VariablesAreInputTypesRule(context) { \*****************************************************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -40677,6 +58065,7 @@ function allowedVariableUsage(schema, varType, varDefaultValue, locationType, lo \****************************************************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -40762,6 +58151,7 @@ function NoDeprecatedCustomRule(context) { \*************************************************************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -40802,6 +58192,7 @@ function NoSchemaIntrospectionCustomRule(context) { \*******************************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -40925,6 +58316,7 @@ const specifiedSDLRules = exports.specifiedSDLRules = Object.freeze([_LoneSchema \*************************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -41040,6 +58432,7 @@ function assertValidSDLExtension(documentAST, schema) { \*************************************************/ /***/ (function(__unused_webpack_module, exports) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -41072,6 +58465,7 @@ const versionInfo = exports.versionInfo = Object.freeze({ \**************************************************************/ /***/ (function(__unused_webpack_module, exports) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -41103,6 +58497,7 @@ if (true) { \******************************************************/ /***/ (function(module, __unused_webpack_exports, __webpack_require__) { +"use strict"; /*! * is-plain-object * @@ -41145,6 +58540,7 @@ module.exports = function isPlainObject(o) { \***************************************************/ /***/ (function(module) { +"use strict"; /*! * is-primitive * @@ -41169,6 +58565,7 @@ module.exports = function isPrimitive(val) { \**********************************************/ /***/ (function(module) { +"use strict"; var toString = {}.toString; @@ -41184,6 +58581,7 @@ module.exports = Array.isArray || function (arr) { \***********************************************/ /***/ (function(module, __unused_webpack_exports, __webpack_require__) { +"use strict"; /*! * isobject * @@ -41206,6 +58604,7 @@ module.exports = function isObject(val) { \***********************************************************/ /***/ (function(module, __unused_webpack_exports, __webpack_require__) { +"use strict"; var uc_micro = __webpack_require__(/*! uc.micro */ "../../../node_modules/uc.micro/build/index.cjs.js"); @@ -41899,6 +59298,7 @@ module.exports = LinkifyIt; \***********************************************************/ /***/ (function(module, __unused_webpack_exports, __webpack_require__) { +"use strict"; var mdurl = __webpack_require__(/*! mdurl */ "../../../node_modules/mdurl/build/index.cjs.js"); @@ -47438,6 +64838,7 @@ module.exports = MarkdownIt; \******************************************************/ /***/ (function(__unused_webpack_module, exports) { +"use strict"; /* eslint-disable no-bitwise */ @@ -47934,6 +65335,7 @@ exports.parse = urlParse; \****************************************************/ /***/ (function(__unused_webpack_module, exports) { +"use strict"; var e = new TextDecoder(); @@ -48003,6 +65405,7 @@ exports.meros = t; \******************************************************/ /***/ (function(module) { +"use strict"; function nullthrows(x, message) { @@ -48027,6 +65430,7 @@ Object.defineProperty(module.exports, "__esModule", ({ \*************************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -48981,6 +66385,7 @@ exports.wrap = wrap; \*********************************************************/ /***/ (function(__unused_webpack_module, exports) { +"use strict"; /** Highest positive signed 32-bit float value */ @@ -49415,12 +66820,293 @@ var _default = exports["default"] = punycode; /***/ }), +/***/ "../../../node_modules/react-compiler-runtime/dist/index.js": +/*!******************************************************************!*\ + !*** ../../../node_modules/react-compiler-runtime/dist/index.js ***! + \******************************************************************/ +/***/ (function(__unused_webpack_module, exports, __webpack_require__) { + +/** + * Copyright (c) Meta Platforms, Inc. and affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + * + * @lightSyntaxTransform + * @noflow + * @nolint + * @preventMunge + * @preserve-invariant-messages + */ + +"use no memo"; +'use strict'; + +var React = __webpack_require__(/*! react */ "react"); +function _interopNamespaceDefault(e) { + var n = Object.create(null); + if (e) { + Object.keys(e).forEach(function (k) { + if (k !== 'default') { + var d = Object.getOwnPropertyDescriptor(e, k); + Object.defineProperty(n, k, d.get ? d : { + enumerable: true, + get: function () { + return e[k]; + } + }); + } + }); + } + n.default = e; + return Object.freeze(n); +} +var React__namespace = /*#__PURE__*/_interopNamespaceDefault(React); +var _a, _b; +const { + useRef, + useEffect, + isValidElement +} = React__namespace; +const ReactSecretInternals = (_a = React__namespace.__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE) !== null && _a !== void 0 ? _a : React__namespace.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED; +const $empty = Symbol.for('react.memo_cache_sentinel'); +const c = typeof ((_b = React__namespace.__COMPILER_RUNTIME) === null || _b === void 0 ? void 0 : _b.c) === 'function' ? React__namespace.__COMPILER_RUNTIME.c : function c(size) { + return React__namespace.useMemo(() => { + const $ = new Array(size); + for (let ii = 0; ii < size; ii++) { + $[ii] = $empty; + } + $[$empty] = true; + return $; + }, []); +}; +const LazyGuardDispatcher = {}; +['readContext', 'useCallback', 'useContext', 'useEffect', 'useImperativeHandle', 'useInsertionEffect', 'useLayoutEffect', 'useMemo', 'useReducer', 'useRef', 'useState', 'useDebugValue', 'useDeferredValue', 'useTransition', 'useMutableSource', 'useSyncExternalStore', 'useId', 'unstable_isNewReconciler', 'getCacheSignal', 'getCacheForType', 'useCacheRefresh'].forEach(name => { + LazyGuardDispatcher[name] = () => { + throw new Error(`[React] Unexpected React hook call (${name}) from a React compiled function. ` + "Check that all hooks are called directly and named according to convention ('use[A-Z]') "); + }; +}); +let originalDispatcher = null; +LazyGuardDispatcher['useMemoCache'] = count => { + if (originalDispatcher == null) { + throw new Error('React Compiler internal invariant violation: unexpected null dispatcher'); + } else { + return originalDispatcher.useMemoCache(count); + } +}; +var GuardKind; +(function (GuardKind) { + GuardKind[GuardKind["PushGuardContext"] = 0] = "PushGuardContext"; + GuardKind[GuardKind["PopGuardContext"] = 1] = "PopGuardContext"; + GuardKind[GuardKind["PushExpectHook"] = 2] = "PushExpectHook"; + GuardKind[GuardKind["PopExpectHook"] = 3] = "PopExpectHook"; +})(GuardKind || (GuardKind = {})); +function setCurrent(newDispatcher) { + ReactSecretInternals.ReactCurrentDispatcher.current = newDispatcher; + return ReactSecretInternals.ReactCurrentDispatcher.current; +} +const guardFrames = []; +function $dispatcherGuard(kind) { + const curr = ReactSecretInternals.ReactCurrentDispatcher.current; + if (kind === GuardKind.PushGuardContext) { + guardFrames.push(curr); + if (guardFrames.length === 1) { + originalDispatcher = curr; + } + if (curr === LazyGuardDispatcher) { + throw new Error(`[React] Unexpected call to custom hook or component from a React compiled function. ` + "Check that (1) all hooks are called directly and named according to convention ('use[A-Z]') " + 'and (2) components are returned as JSX instead of being directly invoked.'); + } + setCurrent(LazyGuardDispatcher); + } else if (kind === GuardKind.PopGuardContext) { + const lastFrame = guardFrames.pop(); + if (lastFrame == null) { + throw new Error('React Compiler internal error: unexpected null in guard stack'); + } + if (guardFrames.length === 0) { + originalDispatcher = null; + } + setCurrent(lastFrame); + } else if (kind === GuardKind.PushExpectHook) { + guardFrames.push(curr); + setCurrent(originalDispatcher); + } else if (kind === GuardKind.PopExpectHook) { + const lastFrame = guardFrames.pop(); + if (lastFrame == null) { + throw new Error('React Compiler internal error: unexpected null in guard stack'); + } + setCurrent(lastFrame); + } else { + throw new Error('React Compiler internal error: unreachable block' + kind); + } +} +function $reset($) { + for (let ii = 0; ii < $.length; ii++) { + $[ii] = $empty; + } +} +function $makeReadOnly() { + throw new Error('TODO: implement $makeReadOnly in react-compiler-runtime'); +} +const renderCounterRegistry = new Map(); +function clearRenderCounterRegistry() { + for (const counters of renderCounterRegistry.values()) { + counters.forEach(counter => { + counter.count = 0; + }); + } +} +function registerRenderCounter(name, val) { + let counters = renderCounterRegistry.get(name); + if (counters == null) { + counters = new Set(); + renderCounterRegistry.set(name, counters); + } + counters.add(val); +} +function removeRenderCounter(name, val) { + const counters = renderCounterRegistry.get(name); + if (counters == null) { + return; + } + counters.delete(val); +} +function useRenderCounter(name) { + const val = useRef(null); + if (val.current != null) { + val.current.count += 1; + } + useEffect(() => { + if (val.current == null) { + const counter = { + count: 0 + }; + registerRenderCounter(name, counter); + val.current = counter; + } + return () => { + if (val.current !== null) { + removeRenderCounter(name, val.current); + } + }; + }); +} +const seenErrors = new Set(); +function $structuralCheck(oldValue, newValue, variableName, fnName, kind, loc) { + function error(l, r, path, depth) { + const str = `${fnName}:${loc} [${kind}] ${variableName}${path} changed from ${l} to ${r} at depth ${depth}`; + if (seenErrors.has(str)) { + return; + } + seenErrors.add(str); + console.error(str); + } + const depthLimit = 2; + function recur(oldValue, newValue, path, depth) { + if (depth > depthLimit) { + return; + } else if (oldValue === newValue) { + return; + } else if (typeof oldValue !== typeof newValue) { + error(`type ${typeof oldValue}`, `type ${typeof newValue}`, path, depth); + } else if (typeof oldValue === 'object') { + const oldArray = Array.isArray(oldValue); + const newArray = Array.isArray(newValue); + if (oldValue === null && newValue !== null) { + error('null', `type ${typeof newValue}`, path, depth); + } else if (newValue === null) { + error(`type ${typeof oldValue}`, 'null', path, depth); + } else if (oldValue instanceof Map) { + if (!(newValue instanceof Map)) { + error(`Map instance`, `other value`, path, depth); + } else if (oldValue.size !== newValue.size) { + error(`Map instance with size ${oldValue.size}`, `Map instance with size ${newValue.size}`, path, depth); + } else { + for (const [k, v] of oldValue) { + if (!newValue.has(k)) { + error(`Map instance with key ${k}`, `Map instance without key ${k}`, path, depth); + } else { + recur(v, newValue.get(k), `${path}.get(${k})`, depth + 1); + } + } + } + } else if (newValue instanceof Map) { + error('other value', `Map instance`, path, depth); + } else if (oldValue instanceof Set) { + if (!(newValue instanceof Set)) { + error(`Set instance`, `other value`, path, depth); + } else if (oldValue.size !== newValue.size) { + error(`Set instance with size ${oldValue.size}`, `Set instance with size ${newValue.size}`, path, depth); + } else { + for (const v of newValue) { + if (!oldValue.has(v)) { + error(`Set instance without element ${v}`, `Set instance with element ${v}`, path, depth); + } + } + } + } else if (newValue instanceof Set) { + error('other value', `Set instance`, path, depth); + } else if (oldArray || newArray) { + if (oldArray !== newArray) { + error(`type ${oldArray ? 'array' : 'object'}`, `type ${newArray ? 'array' : 'object'}`, path, depth); + } else if (oldValue.length !== newValue.length) { + error(`array with length ${oldValue.length}`, `array with length ${newValue.length}`, path, depth); + } else { + for (let ii = 0; ii < oldValue.length; ii++) { + recur(oldValue[ii], newValue[ii], `${path}[${ii}]`, depth + 1); + } + } + } else if (isValidElement(oldValue) || isValidElement(newValue)) { + if (isValidElement(oldValue) !== isValidElement(newValue)) { + error(`type ${isValidElement(oldValue) ? 'React element' : 'object'}`, `type ${isValidElement(newValue) ? 'React element' : 'object'}`, path, depth); + } else if (oldValue.type !== newValue.type) { + error(`React element of type ${oldValue.type}`, `React element of type ${newValue.type}`, path, depth); + } else { + recur(oldValue.props, newValue.props, `[props of ${path}]`, depth + 1); + } + } else { + for (const key in newValue) { + if (!(key in oldValue)) { + error(`object without key ${key}`, `object with key ${key}`, path, depth); + } + } + for (const key in oldValue) { + if (!(key in newValue)) { + error(`object with key ${key}`, `object without key ${key}`, path, depth); + } else { + recur(oldValue[key], newValue[key], `${path}.${key}`, depth + 1); + } + } + } + } else if (typeof oldValue === 'function') { + return; + } else if (isNaN(oldValue) || isNaN(newValue)) { + if (isNaN(oldValue) !== isNaN(newValue)) { + error(`${isNaN(oldValue) ? 'NaN' : 'non-NaN value'}`, `${isNaN(newValue) ? 'NaN' : 'non-NaN value'}`, path, depth); + } + } else if (oldValue !== newValue) { + error(oldValue, newValue, path, depth); + } + } + recur(oldValue, newValue, '', 0); +} +exports.$dispatcherGuard = $dispatcherGuard; +exports.$makeReadOnly = $makeReadOnly; +exports.$reset = $reset; +exports.$structuralCheck = $structuralCheck; +exports.c = c; +exports.clearRenderCounterRegistry = clearRenderCounterRegistry; +exports.renderCounterRegistry = renderCounterRegistry; +exports.useRenderCounter = useRenderCounter; + +/***/ }), + /***/ "../../../node_modules/react-remove-scroll-bar/dist/es2015/component.js": /*!******************************************************************************!*\ !*** ../../../node_modules/react-remove-scroll-bar/dist/es2015/component.js ***! \******************************************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -49472,6 +67158,7 @@ exports.RemoveScrollBar = RemoveScrollBar; \******************************************************************************/ /***/ (function(__unused_webpack_module, exports) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -49495,6 +67182,7 @@ var removedBarSizeVariable = exports.removedBarSizeVariable = '--removed-body-sc \**************************************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -49548,6 +67236,7 @@ var _utils = __webpack_require__(/*! ./utils */ "../../../node_modules/react-rem \**************************************************************************/ /***/ (function(__unused_webpack_module, exports) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -49602,6 +67291,7 @@ exports.getGapWidth = getGapWidth; \****************************************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -49632,6 +67322,7 @@ var _default = exports["default"] = ReactRemoveScroll; \***************************************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -49822,6 +67513,7 @@ function RemoveScrollSideCar(props) { \*******************************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -49900,6 +67592,7 @@ RemoveScroll.classNames = { \*********************************************************************************/ /***/ (function(__unused_webpack_module, exports) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -49935,6 +67628,7 @@ var nonPassive = exports.nonPassive = passiveSupported ? { \*****************************************************************************/ /***/ (function(__unused_webpack_module, exports) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -50052,6 +67746,7 @@ exports.handleScroll = handleScroll; \**********************************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -50074,6 +67769,7 @@ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { de \***********************************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -50091,6 +67787,7 @@ var effectCar = exports.effectCar = (0, _useSidecar.createSidecarMedium)(); \************************************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -50110,6 +67807,7 @@ var _default = exports["default"] = (0, _useSidecar.exportSidecar)(_medium.effec \****************************************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -50143,6 +67841,7 @@ exports.styleSingleton = styleSingleton; \***********************************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -50183,6 +67882,7 @@ exports.styleHookSingleton = styleHookSingleton; \************************************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -50218,6 +67918,7 @@ var _hook = __webpack_require__(/*! ./hook */ "../../../node_modules/react-style \****************************************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -50280,6 +67981,7 @@ exports.stylesheetSingleton = stylesheetSingleton; \************************************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; /** * @license React * react-jsx-runtime.development.js @@ -51418,6 +69120,7 @@ if (true) { \**************************************************/ /***/ (function(module, __unused_webpack_exports, __webpack_require__) { +"use strict"; if (false) {} else { @@ -51432,6 +69135,7 @@ if (false) {} else { \************************************************/ /***/ (function(module, __unused_webpack_exports, __webpack_require__) { +"use strict"; /*! * set-value * @@ -51578,6 +69282,7 @@ module.exports = setValue; \**********************************************************************/ /***/ (function(__unused_webpack_module, exports) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -51802,6 +69507,7 @@ exports.vw = vw; \*******************************************************/ /***/ (function(module) { +"use strict"; module.exports = function () { @@ -51844,6 +69550,7 @@ module.exports = function () { \*************************************************/ /***/ (function(__unused_webpack_module, exports) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -52412,6 +70119,7 @@ var _default = exports["default"] = { \*********************************************************/ /***/ (function(__unused_webpack_module, exports) { +"use strict"; var regex$5 = /[\0-\uD7FF\uE000-\uFFFF]|[\uD800-\uDBFF][\uDC00-\uDFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF]/; @@ -52435,6 +70143,7 @@ exports.Z = regex; \***********************************************************************/ /***/ (function(__unused_webpack_module, exports) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -52471,6 +70180,7 @@ function assignRef(ref, value) { \***********************************************************************/ /***/ (function(__unused_webpack_module, exports) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -52509,6 +70219,7 @@ function createCallbackRef(callback) { \*******************************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -52585,6 +70296,7 @@ var _refToCallback = __webpack_require__(/*! ./refToCallback */ "../../../node_m \**********************************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -52622,6 +70334,7 @@ function mergeRefs(refs) { \***************************************************************************/ /***/ (function(__unused_webpack_module, exports) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -52687,6 +70400,7 @@ function useRefToCallback(ref) { \**************************************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -52718,6 +70432,7 @@ function transformRef(ref, transformer) { \*************************************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -52756,6 +70471,7 @@ function useMergeRefs(refs, defaultValue) { \********************************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -52812,6 +70528,7 @@ function useCallbackRef(initialValue, callback) { \*****************************************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -52847,6 +70564,7 @@ function useTransformRef(ref, transformer) { \***************************************************************/ /***/ (function(__unused_webpack_module, exports) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -52871,6 +70589,7 @@ exports.setConfig = setConfig; \************************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -52891,6 +70610,7 @@ var env = exports.env = { \****************************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -52927,6 +70647,7 @@ function exportSidecar(medium, exported) { \************************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -52963,6 +70684,7 @@ function sidecar(importer, errorComponent) { \*************************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -53032,6 +70754,7 @@ function useRealSidecar(importer, effect) { \**************************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -53094,6 +70817,7 @@ var _exports = __webpack_require__(/*! ./exports */ "../../../node_modules/use-s \***************************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -53205,6 +70929,7 @@ function createSidecarMedium(options) { \*******************************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -53273,6 +70998,7 @@ function renderCar(WrappedComponent, defaults) { \*************************************************************************/ /***/ (function(__unused_webpack_module, exports) { +"use strict"; /* -------------------------------------------------------------------------------------------- * Copyright (c) Microsoft Corporation. All rights reserved. * Licensed under the MIT License. See License.txt in the project root for license information. @@ -55541,12584 +73267,20 @@ var Is; /***/ }), -/***/ "../../graphiql-react/dist/SchemaReference.cjs.js": -/*!********************************************************!*\ - !*** ../../graphiql-react/dist/SchemaReference.cjs.js ***! - \********************************************************/ -/***/ (function(__unused_webpack_module, exports, __webpack_require__) { - - - -const graphql = __webpack_require__(/*! graphql */ "../../../node_modules/graphql/index.mjs"); -const forEachState = __webpack_require__(/*! ./forEachState.cjs.js */ "../../graphiql-react/dist/forEachState.cjs.js"); -function getTypeInfo(schema, tokenState) { - const info = { - schema, - type: null, - parentType: null, - inputType: null, - directiveDef: null, - fieldDef: null, - argDef: null, - argDefs: null, - objectFieldDefs: null - }; - forEachState.forEachState(tokenState, state => { - var _a, _b; - switch (state.kind) { - case "Query": - case "ShortQuery": - info.type = schema.getQueryType(); - break; - case "Mutation": - info.type = schema.getMutationType(); - break; - case "Subscription": - info.type = schema.getSubscriptionType(); - break; - case "InlineFragment": - case "FragmentDefinition": - if (state.type) { - info.type = schema.getType(state.type); - } - break; - case "Field": - case "AliasedField": - info.fieldDef = info.type && state.name ? getFieldDef(schema, info.parentType, state.name) : null; - info.type = (_a = info.fieldDef) === null || _a === void 0 ? void 0 : _a.type; - break; - case "SelectionSet": - info.parentType = info.type ? graphql.getNamedType(info.type) : null; - break; - case "Directive": - info.directiveDef = state.name ? schema.getDirective(state.name) : null; - break; - case "Arguments": - const parentDef = state.prevState ? state.prevState.kind === "Field" ? info.fieldDef : state.prevState.kind === "Directive" ? info.directiveDef : state.prevState.kind === "AliasedField" ? state.prevState.name && getFieldDef(schema, info.parentType, state.prevState.name) : null : null; - info.argDefs = parentDef ? parentDef.args : null; - break; - case "Argument": - info.argDef = null; - if (info.argDefs) { - for (let i = 0; i < info.argDefs.length; i++) { - if (info.argDefs[i].name === state.name) { - info.argDef = info.argDefs[i]; - break; - } - } - } - info.inputType = (_b = info.argDef) === null || _b === void 0 ? void 0 : _b.type; - break; - case "EnumValue": - const enumType = info.inputType ? graphql.getNamedType(info.inputType) : null; - info.enumValue = enumType instanceof graphql.GraphQLEnumType ? find(enumType.getValues(), val => val.value === state.name) : null; - break; - case "ListValue": - const nullableType = info.inputType ? graphql.getNullableType(info.inputType) : null; - info.inputType = nullableType instanceof graphql.GraphQLList ? nullableType.ofType : null; - break; - case "ObjectValue": - const objectType = info.inputType ? graphql.getNamedType(info.inputType) : null; - info.objectFieldDefs = objectType instanceof graphql.GraphQLInputObjectType ? objectType.getFields() : null; - break; - case "ObjectField": - const objectField = state.name && info.objectFieldDefs ? info.objectFieldDefs[state.name] : null; - info.inputType = objectField === null || objectField === void 0 ? void 0 : objectField.type; - info.fieldDef = objectField; - break; - case "NamedType": - info.type = state.name ? schema.getType(state.name) : null; - break; - } - }); - return info; -} -function getFieldDef(schema, type, fieldName) { - if (fieldName === graphql.SchemaMetaFieldDef.name && schema.getQueryType() === type) { - return graphql.SchemaMetaFieldDef; - } - if (fieldName === graphql.TypeMetaFieldDef.name && schema.getQueryType() === type) { - return graphql.TypeMetaFieldDef; - } - if (fieldName === graphql.TypeNameMetaFieldDef.name && graphql.isCompositeType(type)) { - return graphql.TypeNameMetaFieldDef; - } - if (type && type.getFields) { - return type.getFields()[fieldName]; - } -} -function find(array, predicate) { - for (let i = 0; i < array.length; i++) { - if (predicate(array[i])) { - return array[i]; - } - } -} -function getFieldReference(typeInfo) { - return { - kind: "Field", - schema: typeInfo.schema, - field: typeInfo.fieldDef, - type: isMetaField(typeInfo.fieldDef) ? null : typeInfo.parentType - }; -} -function getDirectiveReference(typeInfo) { - return { - kind: "Directive", - schema: typeInfo.schema, - directive: typeInfo.directiveDef - }; -} -function getArgumentReference(typeInfo) { - return typeInfo.directiveDef ? { - kind: "Argument", - schema: typeInfo.schema, - argument: typeInfo.argDef, - directive: typeInfo.directiveDef - } : { - kind: "Argument", - schema: typeInfo.schema, - argument: typeInfo.argDef, - field: typeInfo.fieldDef, - type: isMetaField(typeInfo.fieldDef) ? null : typeInfo.parentType - }; -} -function getEnumValueReference(typeInfo) { - return { - kind: "EnumValue", - value: typeInfo.enumValue || void 0, - type: typeInfo.inputType ? graphql.getNamedType(typeInfo.inputType) : void 0 - }; -} -function getTypeReference(typeInfo, type) { - return { - kind: "Type", - schema: typeInfo.schema, - type: type || typeInfo.type - }; -} -function isMetaField(fieldDef) { - return fieldDef.name.slice(0, 2) === "__"; -} -exports.getArgumentReference = getArgumentReference; -exports.getDirectiveReference = getDirectiveReference; -exports.getEnumValueReference = getEnumValueReference; -exports.getFieldReference = getFieldReference; -exports.getTypeInfo = getTypeInfo; -exports.getTypeReference = getTypeReference; - -/***/ }), - -/***/ "../../graphiql-react/dist/brace-fold.cjs.js": -/*!***************************************************!*\ - !*** ../../graphiql-react/dist/brace-fold.cjs.js ***! - \***************************************************/ -/***/ (function(__unused_webpack_module, exports, __webpack_require__) { - - - -const codemirror = __webpack_require__(/*! ./codemirror.cjs2.js */ "../../graphiql-react/dist/codemirror.cjs2.js"); -function _mergeNamespaces(n, m) { - for (var i = 0; i < m.length; i++) { - const e = m[i]; - if (typeof e !== "string" && !Array.isArray(e)) { - for (const k in e) { - if (k !== "default" && !(k in n)) { - const d = Object.getOwnPropertyDescriptor(e, k); - if (d) { - Object.defineProperty(n, k, d.get ? d : { - enumerable: true, - get: () => e[k] - }); - } - } - } - } - } - return Object.freeze(Object.defineProperty(n, Symbol.toStringTag, { - value: "Module" - })); -} -var braceFold$2 = { - exports: {} -}; -(function (module2, exports2) { - (function (mod) { - mod(codemirror.requireCodemirror()); - })(function (CodeMirror) { - function bracketFolding(pairs) { - return function (cm, start) { - var line = start.line, - lineText = cm.getLine(line); - function findOpening(pair) { - var tokenType; - for (var at = start.ch, pass = 0;;) { - var found2 = at <= 0 ? -1 : lineText.lastIndexOf(pair[0], at - 1); - if (found2 == -1) { - if (pass == 1) break; - pass = 1; - at = lineText.length; - continue; - } - if (pass == 1 && found2 < start.ch) break; - tokenType = cm.getTokenTypeAt(CodeMirror.Pos(line, found2 + 1)); - if (!/^(comment|string)/.test(tokenType)) return { - ch: found2 + 1, - tokenType, - pair - }; - at = found2 - 1; - } - } - function findRange(found2) { - var count = 1, - lastLine = cm.lastLine(), - end, - startCh = found2.ch, - endCh; - outer: for (var i2 = line; i2 <= lastLine; ++i2) { - var text = cm.getLine(i2), - pos = i2 == line ? startCh : 0; - for (;;) { - var nextOpen = text.indexOf(found2.pair[0], pos), - nextClose = text.indexOf(found2.pair[1], pos); - if (nextOpen < 0) nextOpen = text.length; - if (nextClose < 0) nextClose = text.length; - pos = Math.min(nextOpen, nextClose); - if (pos == text.length) break; - if (cm.getTokenTypeAt(CodeMirror.Pos(i2, pos + 1)) == found2.tokenType) { - if (pos == nextOpen) ++count;else if (! --count) { - end = i2; - endCh = pos; - break outer; - } - } - ++pos; - } - } - if (end == null || line == end) return null; - return { - from: CodeMirror.Pos(line, startCh), - to: CodeMirror.Pos(end, endCh) - }; - } - var found = []; - for (var i = 0; i < pairs.length; i++) { - var open = findOpening(pairs[i]); - if (open) found.push(open); - } - found.sort(function (a, b) { - return a.ch - b.ch; - }); - for (var i = 0; i < found.length; i++) { - var range = findRange(found[i]); - if (range) return range; - } - return null; - }; - } - CodeMirror.registerHelper("fold", "brace", bracketFolding([["{", "}"], ["[", "]"]])); - CodeMirror.registerHelper("fold", "brace-paren", bracketFolding([["{", "}"], ["[", "]"], ["(", ")"]])); - CodeMirror.registerHelper("fold", "import", function (cm, start) { - function hasImport(line) { - if (line < cm.firstLine() || line > cm.lastLine()) return null; - var start2 = cm.getTokenAt(CodeMirror.Pos(line, 1)); - if (!/\S/.test(start2.string)) start2 = cm.getTokenAt(CodeMirror.Pos(line, start2.end + 1)); - if (start2.type != "keyword" || start2.string != "import") return null; - for (var i = line, e = Math.min(cm.lastLine(), line + 10); i <= e; ++i) { - var text = cm.getLine(i), - semi = text.indexOf(";"); - if (semi != -1) return { - startCh: start2.end, - end: CodeMirror.Pos(i, semi) - }; - } - } - var startLine = start.line, - has = hasImport(startLine), - prev; - if (!has || hasImport(startLine - 1) || (prev = hasImport(startLine - 2)) && prev.end.line == startLine - 1) return null; - for (var end = has.end;;) { - var next = hasImport(end.line + 1); - if (next == null) break; - end = next.end; - } - return { - from: cm.clipPos(CodeMirror.Pos(startLine, has.startCh + 1)), - to: end - }; - }); - CodeMirror.registerHelper("fold", "include", function (cm, start) { - function hasInclude(line) { - if (line < cm.firstLine() || line > cm.lastLine()) return null; - var start2 = cm.getTokenAt(CodeMirror.Pos(line, 1)); - if (!/\S/.test(start2.string)) start2 = cm.getTokenAt(CodeMirror.Pos(line, start2.end + 1)); - if (start2.type == "meta" && start2.string.slice(0, 8) == "#include") return start2.start + 8; - } - var startLine = start.line, - has = hasInclude(startLine); - if (has == null || hasInclude(startLine - 1) != null) return null; - for (var end = startLine;;) { - var next = hasInclude(end + 1); - if (next == null) break; - ++end; - } - return { - from: CodeMirror.Pos(startLine, has + 1), - to: cm.clipPos(CodeMirror.Pos(end)) - }; - }); - }); -})(); -var braceFoldExports = braceFold$2.exports; -const braceFold = /* @__PURE__ */codemirror.getDefaultExportFromCjs(braceFoldExports); -const braceFold$1 = /* @__PURE__ */_mergeNamespaces({ - __proto__: null, - default: braceFold -}, [braceFoldExports]); -exports.braceFold = braceFold$1; - -/***/ }), - -/***/ "../../graphiql-react/dist/closebrackets.cjs.js": -/*!******************************************************!*\ - !*** ../../graphiql-react/dist/closebrackets.cjs.js ***! - \******************************************************/ -/***/ (function(__unused_webpack_module, exports, __webpack_require__) { - - - -const codemirror = __webpack_require__(/*! ./codemirror.cjs2.js */ "../../graphiql-react/dist/codemirror.cjs2.js"); -function _mergeNamespaces(n, m) { - for (var i = 0; i < m.length; i++) { - const e = m[i]; - if (typeof e !== "string" && !Array.isArray(e)) { - for (const k in e) { - if (k !== "default" && !(k in n)) { - const d = Object.getOwnPropertyDescriptor(e, k); - if (d) { - Object.defineProperty(n, k, d.get ? d : { - enumerable: true, - get: () => e[k] - }); - } - } - } - } - } - return Object.freeze(Object.defineProperty(n, Symbol.toStringTag, { - value: "Module" - })); -} -var closebrackets$2 = { - exports: {} -}; -(function (module2, exports2) { - (function (mod) { - mod(codemirror.requireCodemirror()); - })(function (CodeMirror) { - var defaults = { - pairs: `()[]{}''""`, - closeBefore: `)]}'":;>`, - triples: "", - explode: "[]{}" - }; - var Pos = CodeMirror.Pos; - CodeMirror.defineOption("autoCloseBrackets", false, function (cm, val, old) { - if (old && old != CodeMirror.Init) { - cm.removeKeyMap(keyMap); - cm.state.closeBrackets = null; - } - if (val) { - ensureBound(getOption(val, "pairs")); - cm.state.closeBrackets = val; - cm.addKeyMap(keyMap); - } - }); - function getOption(conf, name) { - if (name == "pairs" && typeof conf == "string") return conf; - if (typeof conf == "object" && conf[name] != null) return conf[name]; - return defaults[name]; - } - var keyMap = { - Backspace: handleBackspace, - Enter: handleEnter - }; - function ensureBound(chars) { - for (var i = 0; i < chars.length; i++) { - var ch = chars.charAt(i), - key = "'" + ch + "'"; - if (!keyMap[key]) keyMap[key] = handler(ch); - } - } - ensureBound(defaults.pairs + "`"); - function handler(ch) { - return function (cm) { - return handleChar(cm, ch); - }; - } - function getConfig(cm) { - var deflt = cm.state.closeBrackets; - if (!deflt || deflt.override) return deflt; - var mode = cm.getModeAt(cm.getCursor()); - return mode.closeBrackets || deflt; - } - function handleBackspace(cm) { - var conf = getConfig(cm); - if (!conf || cm.getOption("disableInput")) return CodeMirror.Pass; - var pairs = getOption(conf, "pairs"); - var ranges = cm.listSelections(); - for (var i = 0; i < ranges.length; i++) { - if (!ranges[i].empty()) return CodeMirror.Pass; - var around = charsAround(cm, ranges[i].head); - if (!around || pairs.indexOf(around) % 2 != 0) return CodeMirror.Pass; - } - for (var i = ranges.length - 1; i >= 0; i--) { - var cur = ranges[i].head; - cm.replaceRange("", Pos(cur.line, cur.ch - 1), Pos(cur.line, cur.ch + 1), "+delete"); - } - } - function handleEnter(cm) { - var conf = getConfig(cm); - var explode = conf && getOption(conf, "explode"); - if (!explode || cm.getOption("disableInput")) return CodeMirror.Pass; - var ranges = cm.listSelections(); - for (var i = 0; i < ranges.length; i++) { - if (!ranges[i].empty()) return CodeMirror.Pass; - var around = charsAround(cm, ranges[i].head); - if (!around || explode.indexOf(around) % 2 != 0) return CodeMirror.Pass; - } - cm.operation(function () { - var linesep = cm.lineSeparator() || "\n"; - cm.replaceSelection(linesep + linesep, null); - moveSel(cm, -1); - ranges = cm.listSelections(); - for (var i2 = 0; i2 < ranges.length; i2++) { - var line = ranges[i2].head.line; - cm.indentLine(line, null, true); - cm.indentLine(line + 1, null, true); - } - }); - } - function moveSel(cm, dir) { - var newRanges = [], - ranges = cm.listSelections(), - primary = 0; - for (var i = 0; i < ranges.length; i++) { - var range = ranges[i]; - if (range.head == cm.getCursor()) primary = i; - var pos = range.head.ch || dir > 0 ? { - line: range.head.line, - ch: range.head.ch + dir - } : { - line: range.head.line - 1 - }; - newRanges.push({ - anchor: pos, - head: pos - }); - } - cm.setSelections(newRanges, primary); - } - function contractSelection(sel) { - var inverted = CodeMirror.cmpPos(sel.anchor, sel.head) > 0; - return { - anchor: new Pos(sel.anchor.line, sel.anchor.ch + (inverted ? -1 : 1)), - head: new Pos(sel.head.line, sel.head.ch + (inverted ? 1 : -1)) - }; - } - function handleChar(cm, ch) { - var conf = getConfig(cm); - if (!conf || cm.getOption("disableInput")) return CodeMirror.Pass; - var pairs = getOption(conf, "pairs"); - var pos = pairs.indexOf(ch); - if (pos == -1) return CodeMirror.Pass; - var closeBefore = getOption(conf, "closeBefore"); - var triples = getOption(conf, "triples"); - var identical = pairs.charAt(pos + 1) == ch; - var ranges = cm.listSelections(); - var opening = pos % 2 == 0; - var type; - for (var i = 0; i < ranges.length; i++) { - var range = ranges[i], - cur = range.head, - curType; - var next = cm.getRange(cur, Pos(cur.line, cur.ch + 1)); - if (opening && !range.empty()) { - curType = "surround"; - } else if ((identical || !opening) && next == ch) { - if (identical && stringStartsAfter(cm, cur)) curType = "both";else if (triples.indexOf(ch) >= 0 && cm.getRange(cur, Pos(cur.line, cur.ch + 3)) == ch + ch + ch) curType = "skipThree";else curType = "skip"; - } else if (identical && cur.ch > 1 && triples.indexOf(ch) >= 0 && cm.getRange(Pos(cur.line, cur.ch - 2), cur) == ch + ch) { - if (cur.ch > 2 && /\bstring/.test(cm.getTokenTypeAt(Pos(cur.line, cur.ch - 2)))) return CodeMirror.Pass; - curType = "addFour"; - } else if (identical) { - var prev = cur.ch == 0 ? " " : cm.getRange(Pos(cur.line, cur.ch - 1), cur); - if (!CodeMirror.isWordChar(next) && prev != ch && !CodeMirror.isWordChar(prev)) curType = "both";else return CodeMirror.Pass; - } else if (opening && (next.length === 0 || /\s/.test(next) || closeBefore.indexOf(next) > -1)) { - curType = "both"; - } else { - return CodeMirror.Pass; - } - if (!type) type = curType;else if (type != curType) return CodeMirror.Pass; - } - var left = pos % 2 ? pairs.charAt(pos - 1) : ch; - var right = pos % 2 ? ch : pairs.charAt(pos + 1); - cm.operation(function () { - if (type == "skip") { - moveSel(cm, 1); - } else if (type == "skipThree") { - moveSel(cm, 3); - } else if (type == "surround") { - var sels = cm.getSelections(); - for (var i2 = 0; i2 < sels.length; i2++) sels[i2] = left + sels[i2] + right; - cm.replaceSelections(sels, "around"); - sels = cm.listSelections().slice(); - for (var i2 = 0; i2 < sels.length; i2++) sels[i2] = contractSelection(sels[i2]); - cm.setSelections(sels); - } else if (type == "both") { - cm.replaceSelection(left + right, null); - cm.triggerElectric(left + right); - moveSel(cm, -1); - } else if (type == "addFour") { - cm.replaceSelection(left + left + left + left, "before"); - moveSel(cm, 1); - } - }); - } - function charsAround(cm, pos) { - var str = cm.getRange(Pos(pos.line, pos.ch - 1), Pos(pos.line, pos.ch + 1)); - return str.length == 2 ? str : null; - } - function stringStartsAfter(cm, pos) { - var token = cm.getTokenAt(Pos(pos.line, pos.ch + 1)); - return /\bstring/.test(token.type) && token.start == pos.ch && (pos.ch == 0 || !/\bstring/.test(cm.getTokenTypeAt(pos))); - } - }); -})(); -var closebracketsExports = closebrackets$2.exports; -const closebrackets = /* @__PURE__ */codemirror.getDefaultExportFromCjs(closebracketsExports); -const closebrackets$1 = /* @__PURE__ */_mergeNamespaces({ - __proto__: null, - default: closebrackets -}, [closebracketsExports]); -exports.closebrackets = closebrackets$1; - -/***/ }), - -/***/ "../../graphiql-react/dist/codemirror.cjs.js": -/*!***************************************************!*\ - !*** ../../graphiql-react/dist/codemirror.cjs.js ***! - \***************************************************/ -/***/ (function(__unused_webpack_module, exports, __webpack_require__) { - - - -const codemirror$1 = __webpack_require__(/*! ./codemirror.cjs2.js */ "../../graphiql-react/dist/codemirror.cjs2.js"); -function _mergeNamespaces(n, m) { - for (var i = 0; i < m.length; i++) { - const e = m[i]; - if (typeof e !== "string" && !Array.isArray(e)) { - for (const k in e) { - if (k !== "default" && !(k in n)) { - const d = Object.getOwnPropertyDescriptor(e, k); - if (d) { - Object.defineProperty(n, k, d.get ? d : { - enumerable: true, - get: () => e[k] - }); - } - } - } - } - } - return Object.freeze(Object.defineProperty(n, Symbol.toStringTag, { - value: "Module" - })); -} -var codemirrorExports = codemirror$1.requireCodemirror(); -const CodeMirror = /* @__PURE__ */codemirror$1.getDefaultExportFromCjs(codemirrorExports); -const codemirror = /* @__PURE__ */_mergeNamespaces({ - __proto__: null, - default: CodeMirror -}, [codemirrorExports]); -exports.CodeMirror = CodeMirror; -exports.codemirror = codemirror; - -/***/ }), - -/***/ "../../graphiql-react/dist/codemirror.cjs2.js": -/*!****************************************************!*\ - !*** ../../graphiql-react/dist/codemirror.cjs2.js ***! - \****************************************************/ -/***/ (function(__unused_webpack_module, exports, __webpack_require__) { - - - -var commonjsGlobal = typeof globalThis !== "undefined" ? globalThis : typeof window !== "undefined" ? window : typeof __webpack_require__.g !== "undefined" ? __webpack_require__.g : typeof self !== "undefined" ? self : {}; -function getDefaultExportFromCjs(x) { - return x && x.__esModule && Object.prototype.hasOwnProperty.call(x, "default") ? x["default"] : x; -} -var codemirror = { - exports: {} -}; -var hasRequiredCodemirror; -function requireCodemirror() { - if (hasRequiredCodemirror) return codemirror.exports; - hasRequiredCodemirror = 1; - (function (module2, exports2) { - (function (global2, factory) { - module2.exports = factory(); - })(commonjsGlobal, function () { - var userAgent = navigator.userAgent; - var platform = navigator.platform; - var gecko = /gecko\/\d/i.test(userAgent); - var ie_upto10 = /MSIE \d/.test(userAgent); - var ie_11up = /Trident\/(?:[7-9]|\d{2,})\..*rv:(\d+)/.exec(userAgent); - var edge = /Edge\/(\d+)/.exec(userAgent); - var ie = ie_upto10 || ie_11up || edge; - var ie_version = ie && (ie_upto10 ? document.documentMode || 6 : +(edge || ie_11up)[1]); - var webkit = !edge && /WebKit\//.test(userAgent); - var qtwebkit = webkit && /Qt\/\d+\.\d+/.test(userAgent); - var chrome = !edge && /Chrome\//.test(userAgent); - var presto = /Opera\//.test(userAgent); - var safari = /Apple Computer/.test(navigator.vendor); - var mac_geMountainLion = /Mac OS X 1\d\D([8-9]|\d\d)\D/.test(userAgent); - var phantom = /PhantomJS/.test(userAgent); - var ios = safari && (/Mobile\/\w+/.test(userAgent) || navigator.maxTouchPoints > 2); - var android = /Android/.test(userAgent); - var mobile = ios || android || /webOS|BlackBerry|Opera Mini|Opera Mobi|IEMobile/i.test(userAgent); - var mac = ios || /Mac/.test(platform); - var chromeOS = /\bCrOS\b/.test(userAgent); - var windows = /win/i.test(platform); - var presto_version = presto && userAgent.match(/Version\/(\d*\.\d*)/); - if (presto_version) { - presto_version = Number(presto_version[1]); - } - if (presto_version && presto_version >= 15) { - presto = false; - webkit = true; - } - var flipCtrlCmd = mac && (qtwebkit || presto && (presto_version == null || presto_version < 12.11)); - var captureRightClick = gecko || ie && ie_version >= 9; - function classTest(cls) { - return new RegExp("(^|\\s)" + cls + "(?:$|\\s)\\s*"); - } - var rmClass = function (node, cls) { - var current = node.className; - var match = classTest(cls).exec(current); - if (match) { - var after = current.slice(match.index + match[0].length); - node.className = current.slice(0, match.index) + (after ? match[1] + after : ""); - } - }; - function removeChildren(e) { - for (var count = e.childNodes.length; count > 0; --count) { - e.removeChild(e.firstChild); - } - return e; - } - function removeChildrenAndAdd(parent, e) { - return removeChildren(parent).appendChild(e); - } - function elt(tag, content, className, style) { - var e = document.createElement(tag); - if (className) { - e.className = className; - } - if (style) { - e.style.cssText = style; - } - if (typeof content == "string") { - e.appendChild(document.createTextNode(content)); - } else if (content) { - for (var i2 = 0; i2 < content.length; ++i2) { - e.appendChild(content[i2]); - } - } - return e; - } - function eltP(tag, content, className, style) { - var e = elt(tag, content, className, style); - e.setAttribute("role", "presentation"); - return e; - } - var range; - if (document.createRange) { - range = function (node, start, end, endNode) { - var r = document.createRange(); - r.setEnd(endNode || node, end); - r.setStart(node, start); - return r; - }; - } else { - range = function (node, start, end) { - var r = document.body.createTextRange(); - try { - r.moveToElementText(node.parentNode); - } catch (e) { - return r; - } - r.collapse(true); - r.moveEnd("character", end); - r.moveStart("character", start); - return r; - }; - } - function contains(parent, child) { - if (child.nodeType == 3) { - child = child.parentNode; - } - if (parent.contains) { - return parent.contains(child); - } - do { - if (child.nodeType == 11) { - child = child.host; - } - if (child == parent) { - return true; - } - } while (child = child.parentNode); - } - function activeElt() { - var activeElement; - try { - activeElement = document.activeElement; - } catch (e) { - activeElement = document.body || null; - } - while (activeElement && activeElement.shadowRoot && activeElement.shadowRoot.activeElement) { - activeElement = activeElement.shadowRoot.activeElement; - } - return activeElement; - } - function addClass(node, cls) { - var current = node.className; - if (!classTest(cls).test(current)) { - node.className += (current ? " " : "") + cls; - } - } - function joinClasses(a, b) { - var as = a.split(" "); - for (var i2 = 0; i2 < as.length; i2++) { - if (as[i2] && !classTest(as[i2]).test(b)) { - b += " " + as[i2]; - } - } - return b; - } - var selectInput = function (node) { - node.select(); - }; - if (ios) { - selectInput = function (node) { - node.selectionStart = 0; - node.selectionEnd = node.value.length; - }; - } else if (ie) { - selectInput = function (node) { - try { - node.select(); - } catch (_e) {} - }; - } - function bind(f) { - var args = Array.prototype.slice.call(arguments, 1); - return function () { - return f.apply(null, args); - }; - } - function copyObj(obj, target, overwrite) { - if (!target) { - target = {}; - } - for (var prop2 in obj) { - if (obj.hasOwnProperty(prop2) && (overwrite !== false || !target.hasOwnProperty(prop2))) { - target[prop2] = obj[prop2]; - } - } - return target; - } - function countColumn(string, end, tabSize, startIndex, startValue) { - if (end == null) { - end = string.search(/[^\s\u00a0]/); - if (end == -1) { - end = string.length; - } - } - for (var i2 = startIndex || 0, n = startValue || 0;;) { - var nextTab = string.indexOf(" ", i2); - if (nextTab < 0 || nextTab >= end) { - return n + (end - i2); - } - n += nextTab - i2; - n += tabSize - n % tabSize; - i2 = nextTab + 1; - } - } - var Delayed = function () { - this.id = null; - this.f = null; - this.time = 0; - this.handler = bind(this.onTimeout, this); - }; - Delayed.prototype.onTimeout = function (self2) { - self2.id = 0; - if (self2.time <= + /* @__PURE__ */new Date()) { - self2.f(); - } else { - setTimeout(self2.handler, self2.time - + /* @__PURE__ */new Date()); - } - }; - Delayed.prototype.set = function (ms, f) { - this.f = f; - var time = + /* @__PURE__ */new Date() + ms; - if (!this.id || time < this.time) { - clearTimeout(this.id); - this.id = setTimeout(this.handler, ms); - this.time = time; - } - }; - function indexOf(array, elt2) { - for (var i2 = 0; i2 < array.length; ++i2) { - if (array[i2] == elt2) { - return i2; - } - } - return -1; - } - var scrollerGap = 50; - var Pass = { - toString: function () { - return "CodeMirror.Pass"; - } - }; - var sel_dontScroll = { - scroll: false - }, - sel_mouse = { - origin: "*mouse" - }, - sel_move = { - origin: "+move" - }; - function findColumn(string, goal, tabSize) { - for (var pos = 0, col = 0;;) { - var nextTab = string.indexOf(" ", pos); - if (nextTab == -1) { - nextTab = string.length; - } - var skipped = nextTab - pos; - if (nextTab == string.length || col + skipped >= goal) { - return pos + Math.min(skipped, goal - col); - } - col += nextTab - pos; - col += tabSize - col % tabSize; - pos = nextTab + 1; - if (col >= goal) { - return pos; - } - } - } - var spaceStrs = [""]; - function spaceStr(n) { - while (spaceStrs.length <= n) { - spaceStrs.push(lst(spaceStrs) + " "); - } - return spaceStrs[n]; - } - function lst(arr) { - return arr[arr.length - 1]; - } - function map(array, f) { - var out = []; - for (var i2 = 0; i2 < array.length; i2++) { - out[i2] = f(array[i2], i2); - } - return out; - } - function insertSorted(array, value, score) { - var pos = 0, - priority = score(value); - while (pos < array.length && score(array[pos]) <= priority) { - pos++; - } - array.splice(pos, 0, value); - } - function nothing() {} - function createObj(base, props) { - var inst; - if (Object.create) { - inst = Object.create(base); - } else { - nothing.prototype = base; - inst = new nothing(); - } - if (props) { - copyObj(props, inst); - } - return inst; - } - var nonASCIISingleCaseWordChar = /[\u00df\u0587\u0590-\u05f4\u0600-\u06ff\u3040-\u309f\u30a0-\u30ff\u3400-\u4db5\u4e00-\u9fcc\uac00-\ud7af]/; - function isWordCharBasic(ch) { - return /\w/.test(ch) || ch > "€" && (ch.toUpperCase() != ch.toLowerCase() || nonASCIISingleCaseWordChar.test(ch)); - } - function isWordChar(ch, helper) { - if (!helper) { - return isWordCharBasic(ch); - } - if (helper.source.indexOf("\\w") > -1 && isWordCharBasic(ch)) { - return true; - } - return helper.test(ch); - } - function isEmpty(obj) { - for (var n in obj) { - if (obj.hasOwnProperty(n) && obj[n]) { - return false; - } - } - return true; - } - var extendingChars = /[\u0300-\u036f\u0483-\u0489\u0591-\u05bd\u05bf\u05c1\u05c2\u05c4\u05c5\u05c7\u0610-\u061a\u064b-\u065e\u0670\u06d6-\u06dc\u06de-\u06e4\u06e7\u06e8\u06ea-\u06ed\u0711\u0730-\u074a\u07a6-\u07b0\u07eb-\u07f3\u0816-\u0819\u081b-\u0823\u0825-\u0827\u0829-\u082d\u0900-\u0902\u093c\u0941-\u0948\u094d\u0951-\u0955\u0962\u0963\u0981\u09bc\u09be\u09c1-\u09c4\u09cd\u09d7\u09e2\u09e3\u0a01\u0a02\u0a3c\u0a41\u0a42\u0a47\u0a48\u0a4b-\u0a4d\u0a51\u0a70\u0a71\u0a75\u0a81\u0a82\u0abc\u0ac1-\u0ac5\u0ac7\u0ac8\u0acd\u0ae2\u0ae3\u0b01\u0b3c\u0b3e\u0b3f\u0b41-\u0b44\u0b4d\u0b56\u0b57\u0b62\u0b63\u0b82\u0bbe\u0bc0\u0bcd\u0bd7\u0c3e-\u0c40\u0c46-\u0c48\u0c4a-\u0c4d\u0c55\u0c56\u0c62\u0c63\u0cbc\u0cbf\u0cc2\u0cc6\u0ccc\u0ccd\u0cd5\u0cd6\u0ce2\u0ce3\u0d3e\u0d41-\u0d44\u0d4d\u0d57\u0d62\u0d63\u0dca\u0dcf\u0dd2-\u0dd4\u0dd6\u0ddf\u0e31\u0e34-\u0e3a\u0e47-\u0e4e\u0eb1\u0eb4-\u0eb9\u0ebb\u0ebc\u0ec8-\u0ecd\u0f18\u0f19\u0f35\u0f37\u0f39\u0f71-\u0f7e\u0f80-\u0f84\u0f86\u0f87\u0f90-\u0f97\u0f99-\u0fbc\u0fc6\u102d-\u1030\u1032-\u1037\u1039\u103a\u103d\u103e\u1058\u1059\u105e-\u1060\u1071-\u1074\u1082\u1085\u1086\u108d\u109d\u135f\u1712-\u1714\u1732-\u1734\u1752\u1753\u1772\u1773\u17b7-\u17bd\u17c6\u17c9-\u17d3\u17dd\u180b-\u180d\u18a9\u1920-\u1922\u1927\u1928\u1932\u1939-\u193b\u1a17\u1a18\u1a56\u1a58-\u1a5e\u1a60\u1a62\u1a65-\u1a6c\u1a73-\u1a7c\u1a7f\u1b00-\u1b03\u1b34\u1b36-\u1b3a\u1b3c\u1b42\u1b6b-\u1b73\u1b80\u1b81\u1ba2-\u1ba5\u1ba8\u1ba9\u1c2c-\u1c33\u1c36\u1c37\u1cd0-\u1cd2\u1cd4-\u1ce0\u1ce2-\u1ce8\u1ced\u1dc0-\u1de6\u1dfd-\u1dff\u200c\u200d\u20d0-\u20f0\u2cef-\u2cf1\u2de0-\u2dff\u302a-\u302f\u3099\u309a\ua66f-\ua672\ua67c\ua67d\ua6f0\ua6f1\ua802\ua806\ua80b\ua825\ua826\ua8c4\ua8e0-\ua8f1\ua926-\ua92d\ua947-\ua951\ua980-\ua982\ua9b3\ua9b6-\ua9b9\ua9bc\uaa29-\uaa2e\uaa31\uaa32\uaa35\uaa36\uaa43\uaa4c\uaab0\uaab2-\uaab4\uaab7\uaab8\uaabe\uaabf\uaac1\uabe5\uabe8\uabed\udc00-\udfff\ufb1e\ufe00-\ufe0f\ufe20-\ufe26\uff9e\uff9f]/; - function isExtendingChar(ch) { - return ch.charCodeAt(0) >= 768 && extendingChars.test(ch); - } - function skipExtendingChars(str, pos, dir) { - while ((dir < 0 ? pos > 0 : pos < str.length) && isExtendingChar(str.charAt(pos))) { - pos += dir; - } - return pos; - } - function findFirst(pred, from, to) { - var dir = from > to ? -1 : 1; - for (;;) { - if (from == to) { - return from; - } - var midF = (from + to) / 2, - mid = dir < 0 ? Math.ceil(midF) : Math.floor(midF); - if (mid == from) { - return pred(mid) ? from : to; - } - if (pred(mid)) { - to = mid; - } else { - from = mid + dir; - } - } - } - function iterateBidiSections(order, from, to, f) { - if (!order) { - return f(from, to, "ltr", 0); - } - var found = false; - for (var i2 = 0; i2 < order.length; ++i2) { - var part = order[i2]; - if (part.from < to && part.to > from || from == to && part.to == from) { - f(Math.max(part.from, from), Math.min(part.to, to), part.level == 1 ? "rtl" : "ltr", i2); - found = true; - } - } - if (!found) { - f(from, to, "ltr"); - } - } - var bidiOther = null; - function getBidiPartAt(order, ch, sticky) { - var found; - bidiOther = null; - for (var i2 = 0; i2 < order.length; ++i2) { - var cur = order[i2]; - if (cur.from < ch && cur.to > ch) { - return i2; - } - if (cur.to == ch) { - if (cur.from != cur.to && sticky == "before") { - found = i2; - } else { - bidiOther = i2; - } - } - if (cur.from == ch) { - if (cur.from != cur.to && sticky != "before") { - found = i2; - } else { - bidiOther = i2; - } - } - } - return found != null ? found : bidiOther; - } - var bidiOrdering = /* @__PURE__ */function () { - var lowTypes = "bbbbbbbbbtstwsbbbbbbbbbbbbbbssstwNN%%%NNNNNN,N,N1111111111NNNNNNNLLLLLLLLLLLLLLLLLLLLLLLLLLNNNNNNLLLLLLLLLLLLLLLLLLLLLLLLLLNNNNbbbbbbsbbbbbbbbbbbbbbbbbbbbbbbbbb,N%%%%NNNNLNNNNN%%11NLNNN1LNNNNNLLLLLLLLLLLLLLLLLLLLLLLNLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLN"; - var arabicTypes = "nnnnnnNNr%%r,rNNmmmmmmmmmmmrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrmmmmmmmmmmmmmmmmmmmmmnnnnnnnnnn%nnrrrmrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrmmmmmmmnNmmmmmmrrmmNmmmmrr1111111111"; - function charType(code) { - if (code <= 247) { - return lowTypes.charAt(code); - } else if (1424 <= code && code <= 1524) { - return "R"; - } else if (1536 <= code && code <= 1785) { - return arabicTypes.charAt(code - 1536); - } else if (1774 <= code && code <= 2220) { - return "r"; - } else if (8192 <= code && code <= 8203) { - return "w"; - } else if (code == 8204) { - return "b"; - } else { - return "L"; - } - } - var bidiRE = /[\u0590-\u05f4\u0600-\u06ff\u0700-\u08ac]/; - var isNeutral = /[stwN]/, - isStrong = /[LRr]/, - countsAsLeft = /[Lb1n]/, - countsAsNum = /[1n]/; - function BidiSpan(level, from, to) { - this.level = level; - this.from = from; - this.to = to; - } - return function (str, direction) { - var outerType = direction == "ltr" ? "L" : "R"; - if (str.length == 0 || direction == "ltr" && !bidiRE.test(str)) { - return false; - } - var len = str.length, - types = []; - for (var i2 = 0; i2 < len; ++i2) { - types.push(charType(str.charCodeAt(i2))); - } - for (var i$12 = 0, prev = outerType; i$12 < len; ++i$12) { - var type = types[i$12]; - if (type == "m") { - types[i$12] = prev; - } else { - prev = type; - } - } - for (var i$22 = 0, cur = outerType; i$22 < len; ++i$22) { - var type$1 = types[i$22]; - if (type$1 == "1" && cur == "r") { - types[i$22] = "n"; - } else if (isStrong.test(type$1)) { - cur = type$1; - if (type$1 == "r") { - types[i$22] = "R"; - } - } - } - for (var i$3 = 1, prev$1 = types[0]; i$3 < len - 1; ++i$3) { - var type$2 = types[i$3]; - if (type$2 == "+" && prev$1 == "1" && types[i$3 + 1] == "1") { - types[i$3] = "1"; - } else if (type$2 == "," && prev$1 == types[i$3 + 1] && (prev$1 == "1" || prev$1 == "n")) { - types[i$3] = prev$1; - } - prev$1 = type$2; - } - for (var i$4 = 0; i$4 < len; ++i$4) { - var type$3 = types[i$4]; - if (type$3 == ",") { - types[i$4] = "N"; - } else if (type$3 == "%") { - var end = void 0; - for (end = i$4 + 1; end < len && types[end] == "%"; ++end) {} - var replace = i$4 && types[i$4 - 1] == "!" || end < len && types[end] == "1" ? "1" : "N"; - for (var j = i$4; j < end; ++j) { - types[j] = replace; - } - i$4 = end - 1; - } - } - for (var i$5 = 0, cur$1 = outerType; i$5 < len; ++i$5) { - var type$4 = types[i$5]; - if (cur$1 == "L" && type$4 == "1") { - types[i$5] = "L"; - } else if (isStrong.test(type$4)) { - cur$1 = type$4; - } - } - for (var i$6 = 0; i$6 < len; ++i$6) { - if (isNeutral.test(types[i$6])) { - var end$1 = void 0; - for (end$1 = i$6 + 1; end$1 < len && isNeutral.test(types[end$1]); ++end$1) {} - var before = (i$6 ? types[i$6 - 1] : outerType) == "L"; - var after = (end$1 < len ? types[end$1] : outerType) == "L"; - var replace$1 = before == after ? before ? "L" : "R" : outerType; - for (var j$1 = i$6; j$1 < end$1; ++j$1) { - types[j$1] = replace$1; - } - i$6 = end$1 - 1; - } - } - var order = [], - m; - for (var i$7 = 0; i$7 < len;) { - if (countsAsLeft.test(types[i$7])) { - var start = i$7; - for (++i$7; i$7 < len && countsAsLeft.test(types[i$7]); ++i$7) {} - order.push(new BidiSpan(0, start, i$7)); - } else { - var pos = i$7, - at = order.length, - isRTL = direction == "rtl" ? 1 : 0; - for (++i$7; i$7 < len && types[i$7] != "L"; ++i$7) {} - for (var j$2 = pos; j$2 < i$7;) { - if (countsAsNum.test(types[j$2])) { - if (pos < j$2) { - order.splice(at, 0, new BidiSpan(1, pos, j$2)); - at += isRTL; - } - var nstart = j$2; - for (++j$2; j$2 < i$7 && countsAsNum.test(types[j$2]); ++j$2) {} - order.splice(at, 0, new BidiSpan(2, nstart, j$2)); - at += isRTL; - pos = j$2; - } else { - ++j$2; - } - } - if (pos < i$7) { - order.splice(at, 0, new BidiSpan(1, pos, i$7)); - } - } - } - if (direction == "ltr") { - if (order[0].level == 1 && (m = str.match(/^\s+/))) { - order[0].from = m[0].length; - order.unshift(new BidiSpan(0, 0, m[0].length)); - } - if (lst(order).level == 1 && (m = str.match(/\s+$/))) { - lst(order).to -= m[0].length; - order.push(new BidiSpan(0, len - m[0].length, len)); - } - } - return direction == "rtl" ? order.reverse() : order; - }; - }(); - function getOrder(line, direction) { - var order = line.order; - if (order == null) { - order = line.order = bidiOrdering(line.text, direction); - } - return order; - } - var noHandlers = []; - var on = function (emitter, type, f) { - if (emitter.addEventListener) { - emitter.addEventListener(type, f, false); - } else if (emitter.attachEvent) { - emitter.attachEvent("on" + type, f); - } else { - var map2 = emitter._handlers || (emitter._handlers = {}); - map2[type] = (map2[type] || noHandlers).concat(f); - } - }; - function getHandlers(emitter, type) { - return emitter._handlers && emitter._handlers[type] || noHandlers; - } - function off(emitter, type, f) { - if (emitter.removeEventListener) { - emitter.removeEventListener(type, f, false); - } else if (emitter.detachEvent) { - emitter.detachEvent("on" + type, f); - } else { - var map2 = emitter._handlers, - arr = map2 && map2[type]; - if (arr) { - var index = indexOf(arr, f); - if (index > -1) { - map2[type] = arr.slice(0, index).concat(arr.slice(index + 1)); - } - } - } - } - function signal(emitter, type) { - var handlers = getHandlers(emitter, type); - if (!handlers.length) { - return; - } - var args = Array.prototype.slice.call(arguments, 2); - for (var i2 = 0; i2 < handlers.length; ++i2) { - handlers[i2].apply(null, args); - } - } - function signalDOMEvent(cm, e, override) { - if (typeof e == "string") { - e = { - type: e, - preventDefault: function () { - this.defaultPrevented = true; - } - }; - } - signal(cm, override || e.type, cm, e); - return e_defaultPrevented(e) || e.codemirrorIgnore; - } - function signalCursorActivity(cm) { - var arr = cm._handlers && cm._handlers.cursorActivity; - if (!arr) { - return; - } - var set = cm.curOp.cursorActivityHandlers || (cm.curOp.cursorActivityHandlers = []); - for (var i2 = 0; i2 < arr.length; ++i2) { - if (indexOf(set, arr[i2]) == -1) { - set.push(arr[i2]); - } - } - } - function hasHandler(emitter, type) { - return getHandlers(emitter, type).length > 0; - } - function eventMixin(ctor) { - ctor.prototype.on = function (type, f) { - on(this, type, f); - }; - ctor.prototype.off = function (type, f) { - off(this, type, f); - }; - } - function e_preventDefault(e) { - if (e.preventDefault) { - e.preventDefault(); - } else { - e.returnValue = false; - } - } - function e_stopPropagation(e) { - if (e.stopPropagation) { - e.stopPropagation(); - } else { - e.cancelBubble = true; - } - } - function e_defaultPrevented(e) { - return e.defaultPrevented != null ? e.defaultPrevented : e.returnValue == false; - } - function e_stop(e) { - e_preventDefault(e); - e_stopPropagation(e); - } - function e_target(e) { - return e.target || e.srcElement; - } - function e_button(e) { - var b = e.which; - if (b == null) { - if (e.button & 1) { - b = 1; - } else if (e.button & 2) { - b = 3; - } else if (e.button & 4) { - b = 2; - } - } - if (mac && e.ctrlKey && b == 1) { - b = 3; - } - return b; - } - var dragAndDrop = function () { - if (ie && ie_version < 9) { - return false; - } - var div = elt("div"); - return "draggable" in div || "dragDrop" in div; - }(); - var zwspSupported; - function zeroWidthElement(measure) { - if (zwspSupported == null) { - var test = elt("span", "​"); - removeChildrenAndAdd(measure, elt("span", [test, document.createTextNode("x")])); - if (measure.firstChild.offsetHeight != 0) { - zwspSupported = test.offsetWidth <= 1 && test.offsetHeight > 2 && !(ie && ie_version < 8); - } - } - var node = zwspSupported ? elt("span", "​") : elt("span", " ", null, "display: inline-block; width: 1px; margin-right: -1px"); - node.setAttribute("cm-text", ""); - return node; - } - var badBidiRects; - function hasBadBidiRects(measure) { - if (badBidiRects != null) { - return badBidiRects; - } - var txt = removeChildrenAndAdd(measure, document.createTextNode("AخA")); - var r0 = range(txt, 0, 1).getBoundingClientRect(); - var r1 = range(txt, 1, 2).getBoundingClientRect(); - removeChildren(measure); - if (!r0 || r0.left == r0.right) { - return false; - } - return badBidiRects = r1.right - r0.right < 3; - } - var splitLinesAuto = "\n\nb".split(/\n/).length != 3 ? function (string) { - var pos = 0, - result = [], - l = string.length; - while (pos <= l) { - var nl = string.indexOf("\n", pos); - if (nl == -1) { - nl = string.length; - } - var line = string.slice(pos, string.charAt(nl - 1) == "\r" ? nl - 1 : nl); - var rt = line.indexOf("\r"); - if (rt != -1) { - result.push(line.slice(0, rt)); - pos += rt + 1; - } else { - result.push(line); - pos = nl + 1; - } - } - return result; - } : function (string) { - return string.split(/\r\n?|\n/); - }; - var hasSelection = window.getSelection ? function (te) { - try { - return te.selectionStart != te.selectionEnd; - } catch (e) { - return false; - } - } : function (te) { - var range2; - try { - range2 = te.ownerDocument.selection.createRange(); - } catch (e) {} - if (!range2 || range2.parentElement() != te) { - return false; - } - return range2.compareEndPoints("StartToEnd", range2) != 0; - }; - var hasCopyEvent = function () { - var e = elt("div"); - if ("oncopy" in e) { - return true; - } - e.setAttribute("oncopy", "return;"); - return typeof e.oncopy == "function"; - }(); - var badZoomedRects = null; - function hasBadZoomedRects(measure) { - if (badZoomedRects != null) { - return badZoomedRects; - } - var node = removeChildrenAndAdd(measure, elt("span", "x")); - var normal = node.getBoundingClientRect(); - var fromRange = range(node, 0, 1).getBoundingClientRect(); - return badZoomedRects = Math.abs(normal.left - fromRange.left) > 1; - } - var modes = {}, - mimeModes = {}; - function defineMode(name, mode) { - if (arguments.length > 2) { - mode.dependencies = Array.prototype.slice.call(arguments, 2); - } - modes[name] = mode; - } - function defineMIME(mime, spec) { - mimeModes[mime] = spec; - } - function resolveMode(spec) { - if (typeof spec == "string" && mimeModes.hasOwnProperty(spec)) { - spec = mimeModes[spec]; - } else if (spec && typeof spec.name == "string" && mimeModes.hasOwnProperty(spec.name)) { - var found = mimeModes[spec.name]; - if (typeof found == "string") { - found = { - name: found - }; - } - spec = createObj(found, spec); - spec.name = found.name; - } else if (typeof spec == "string" && /^[\w\-]+\/[\w\-]+\+xml$/.test(spec)) { - return resolveMode("application/xml"); - } else if (typeof spec == "string" && /^[\w\-]+\/[\w\-]+\+json$/.test(spec)) { - return resolveMode("application/json"); - } - if (typeof spec == "string") { - return { - name: spec - }; - } else { - return spec || { - name: "null" - }; - } - } - function getMode(options, spec) { - spec = resolveMode(spec); - var mfactory = modes[spec.name]; - if (!mfactory) { - return getMode(options, "text/plain"); - } - var modeObj = mfactory(options, spec); - if (modeExtensions.hasOwnProperty(spec.name)) { - var exts = modeExtensions[spec.name]; - for (var prop2 in exts) { - if (!exts.hasOwnProperty(prop2)) { - continue; - } - if (modeObj.hasOwnProperty(prop2)) { - modeObj["_" + prop2] = modeObj[prop2]; - } - modeObj[prop2] = exts[prop2]; - } - } - modeObj.name = spec.name; - if (spec.helperType) { - modeObj.helperType = spec.helperType; - } - if (spec.modeProps) { - for (var prop$1 in spec.modeProps) { - modeObj[prop$1] = spec.modeProps[prop$1]; - } - } - return modeObj; - } - var modeExtensions = {}; - function extendMode(mode, properties) { - var exts = modeExtensions.hasOwnProperty(mode) ? modeExtensions[mode] : modeExtensions[mode] = {}; - copyObj(properties, exts); - } - function copyState(mode, state) { - if (state === true) { - return state; - } - if (mode.copyState) { - return mode.copyState(state); - } - var nstate = {}; - for (var n in state) { - var val = state[n]; - if (val instanceof Array) { - val = val.concat([]); - } - nstate[n] = val; - } - return nstate; - } - function innerMode(mode, state) { - var info; - while (mode.innerMode) { - info = mode.innerMode(state); - if (!info || info.mode == mode) { - break; - } - state = info.state; - mode = info.mode; - } - return info || { - mode, - state - }; - } - function startState(mode, a1, a2) { - return mode.startState ? mode.startState(a1, a2) : true; - } - var StringStream = function (string, tabSize, lineOracle) { - this.pos = this.start = 0; - this.string = string; - this.tabSize = tabSize || 8; - this.lastColumnPos = this.lastColumnValue = 0; - this.lineStart = 0; - this.lineOracle = lineOracle; - }; - StringStream.prototype.eol = function () { - return this.pos >= this.string.length; - }; - StringStream.prototype.sol = function () { - return this.pos == this.lineStart; - }; - StringStream.prototype.peek = function () { - return this.string.charAt(this.pos) || void 0; - }; - StringStream.prototype.next = function () { - if (this.pos < this.string.length) { - return this.string.charAt(this.pos++); - } - }; - StringStream.prototype.eat = function (match) { - var ch = this.string.charAt(this.pos); - var ok; - if (typeof match == "string") { - ok = ch == match; - } else { - ok = ch && (match.test ? match.test(ch) : match(ch)); - } - if (ok) { - ++this.pos; - return ch; - } - }; - StringStream.prototype.eatWhile = function (match) { - var start = this.pos; - while (this.eat(match)) {} - return this.pos > start; - }; - StringStream.prototype.eatSpace = function () { - var start = this.pos; - while (/[\s\u00a0]/.test(this.string.charAt(this.pos))) { - ++this.pos; - } - return this.pos > start; - }; - StringStream.prototype.skipToEnd = function () { - this.pos = this.string.length; - }; - StringStream.prototype.skipTo = function (ch) { - var found = this.string.indexOf(ch, this.pos); - if (found > -1) { - this.pos = found; - return true; - } - }; - StringStream.prototype.backUp = function (n) { - this.pos -= n; - }; - StringStream.prototype.column = function () { - if (this.lastColumnPos < this.start) { - this.lastColumnValue = countColumn(this.string, this.start, this.tabSize, this.lastColumnPos, this.lastColumnValue); - this.lastColumnPos = this.start; - } - return this.lastColumnValue - (this.lineStart ? countColumn(this.string, this.lineStart, this.tabSize) : 0); - }; - StringStream.prototype.indentation = function () { - return countColumn(this.string, null, this.tabSize) - (this.lineStart ? countColumn(this.string, this.lineStart, this.tabSize) : 0); - }; - StringStream.prototype.match = function (pattern, consume, caseInsensitive) { - if (typeof pattern == "string") { - var cased = function (str) { - return caseInsensitive ? str.toLowerCase() : str; - }; - var substr = this.string.substr(this.pos, pattern.length); - if (cased(substr) == cased(pattern)) { - if (consume !== false) { - this.pos += pattern.length; - } - return true; - } - } else { - var match = this.string.slice(this.pos).match(pattern); - if (match && match.index > 0) { - return null; - } - if (match && consume !== false) { - this.pos += match[0].length; - } - return match; - } - }; - StringStream.prototype.current = function () { - return this.string.slice(this.start, this.pos); - }; - StringStream.prototype.hideFirstChars = function (n, inner) { - this.lineStart += n; - try { - return inner(); - } finally { - this.lineStart -= n; - } - }; - StringStream.prototype.lookAhead = function (n) { - var oracle = this.lineOracle; - return oracle && oracle.lookAhead(n); - }; - StringStream.prototype.baseToken = function () { - var oracle = this.lineOracle; - return oracle && oracle.baseToken(this.pos); - }; - function getLine(doc, n) { - n -= doc.first; - if (n < 0 || n >= doc.size) { - throw new Error("There is no line " + (n + doc.first) + " in the document."); - } - var chunk = doc; - while (!chunk.lines) { - for (var i2 = 0;; ++i2) { - var child = chunk.children[i2], - sz = child.chunkSize(); - if (n < sz) { - chunk = child; - break; - } - n -= sz; - } - } - return chunk.lines[n]; - } - function getBetween(doc, start, end) { - var out = [], - n = start.line; - doc.iter(start.line, end.line + 1, function (line) { - var text = line.text; - if (n == end.line) { - text = text.slice(0, end.ch); - } - if (n == start.line) { - text = text.slice(start.ch); - } - out.push(text); - ++n; - }); - return out; - } - function getLines(doc, from, to) { - var out = []; - doc.iter(from, to, function (line) { - out.push(line.text); - }); - return out; - } - function updateLineHeight(line, height) { - var diff = height - line.height; - if (diff) { - for (var n = line; n; n = n.parent) { - n.height += diff; - } - } - } - function lineNo(line) { - if (line.parent == null) { - return null; - } - var cur = line.parent, - no = indexOf(cur.lines, line); - for (var chunk = cur.parent; chunk; cur = chunk, chunk = chunk.parent) { - for (var i2 = 0;; ++i2) { - if (chunk.children[i2] == cur) { - break; - } - no += chunk.children[i2].chunkSize(); - } - } - return no + cur.first; - } - function lineAtHeight(chunk, h) { - var n = chunk.first; - outer: do { - for (var i$12 = 0; i$12 < chunk.children.length; ++i$12) { - var child = chunk.children[i$12], - ch = child.height; - if (h < ch) { - chunk = child; - continue outer; - } - h -= ch; - n += child.chunkSize(); - } - return n; - } while (!chunk.lines); - var i2 = 0; - for (; i2 < chunk.lines.length; ++i2) { - var line = chunk.lines[i2], - lh = line.height; - if (h < lh) { - break; - } - h -= lh; - } - return n + i2; - } - function isLine(doc, l) { - return l >= doc.first && l < doc.first + doc.size; - } - function lineNumberFor(options, i2) { - return String(options.lineNumberFormatter(i2 + options.firstLineNumber)); - } - function Pos(line, ch, sticky) { - if (sticky === void 0) sticky = null; - if (!(this instanceof Pos)) { - return new Pos(line, ch, sticky); - } - this.line = line; - this.ch = ch; - this.sticky = sticky; - } - function cmp(a, b) { - return a.line - b.line || a.ch - b.ch; - } - function equalCursorPos(a, b) { - return a.sticky == b.sticky && cmp(a, b) == 0; - } - function copyPos(x) { - return Pos(x.line, x.ch); - } - function maxPos(a, b) { - return cmp(a, b) < 0 ? b : a; - } - function minPos(a, b) { - return cmp(a, b) < 0 ? a : b; - } - function clipLine(doc, n) { - return Math.max(doc.first, Math.min(n, doc.first + doc.size - 1)); - } - function clipPos(doc, pos) { - if (pos.line < doc.first) { - return Pos(doc.first, 0); - } - var last = doc.first + doc.size - 1; - if (pos.line > last) { - return Pos(last, getLine(doc, last).text.length); - } - return clipToLen(pos, getLine(doc, pos.line).text.length); - } - function clipToLen(pos, linelen) { - var ch = pos.ch; - if (ch == null || ch > linelen) { - return Pos(pos.line, linelen); - } else if (ch < 0) { - return Pos(pos.line, 0); - } else { - return pos; - } - } - function clipPosArray(doc, array) { - var out = []; - for (var i2 = 0; i2 < array.length; i2++) { - out[i2] = clipPos(doc, array[i2]); - } - return out; - } - var SavedContext = function (state, lookAhead) { - this.state = state; - this.lookAhead = lookAhead; - }; - var Context = function (doc, state, line, lookAhead) { - this.state = state; - this.doc = doc; - this.line = line; - this.maxLookAhead = lookAhead || 0; - this.baseTokens = null; - this.baseTokenPos = 1; - }; - Context.prototype.lookAhead = function (n) { - var line = this.doc.getLine(this.line + n); - if (line != null && n > this.maxLookAhead) { - this.maxLookAhead = n; - } - return line; - }; - Context.prototype.baseToken = function (n) { - if (!this.baseTokens) { - return null; - } - while (this.baseTokens[this.baseTokenPos] <= n) { - this.baseTokenPos += 2; - } - var type = this.baseTokens[this.baseTokenPos + 1]; - return { - type: type && type.replace(/( |^)overlay .*/, ""), - size: this.baseTokens[this.baseTokenPos] - n - }; - }; - Context.prototype.nextLine = function () { - this.line++; - if (this.maxLookAhead > 0) { - this.maxLookAhead--; - } - }; - Context.fromSaved = function (doc, saved, line) { - if (saved instanceof SavedContext) { - return new Context(doc, copyState(doc.mode, saved.state), line, saved.lookAhead); - } else { - return new Context(doc, copyState(doc.mode, saved), line); - } - }; - Context.prototype.save = function (copy) { - var state = copy !== false ? copyState(this.doc.mode, this.state) : this.state; - return this.maxLookAhead > 0 ? new SavedContext(state, this.maxLookAhead) : state; - }; - function highlightLine(cm, line, context, forceToEnd) { - var st = [cm.state.modeGen], - lineClasses = {}; - runMode(cm, line.text, cm.doc.mode, context, function (end, style) { - return st.push(end, style); - }, lineClasses, forceToEnd); - var state = context.state; - var loop = function (o2) { - context.baseTokens = st; - var overlay = cm.state.overlays[o2], - i2 = 1, - at = 0; - context.state = true; - runMode(cm, line.text, overlay.mode, context, function (end, style) { - var start = i2; - while (at < end) { - var i_end = st[i2]; - if (i_end > end) { - st.splice(i2, 1, end, st[i2 + 1], i_end); - } - i2 += 2; - at = Math.min(end, i_end); - } - if (!style) { - return; - } - if (overlay.opaque) { - st.splice(start, i2 - start, end, "overlay " + style); - i2 = start + 2; - } else { - for (; start < i2; start += 2) { - var cur = st[start + 1]; - st[start + 1] = (cur ? cur + " " : "") + "overlay " + style; - } - } - }, lineClasses); - context.state = state; - context.baseTokens = null; - context.baseTokenPos = 1; - }; - for (var o = 0; o < cm.state.overlays.length; ++o) loop(o); - return { - styles: st, - classes: lineClasses.bgClass || lineClasses.textClass ? lineClasses : null - }; - } - function getLineStyles(cm, line, updateFrontier) { - if (!line.styles || line.styles[0] != cm.state.modeGen) { - var context = getContextBefore(cm, lineNo(line)); - var resetState = line.text.length > cm.options.maxHighlightLength && copyState(cm.doc.mode, context.state); - var result = highlightLine(cm, line, context); - if (resetState) { - context.state = resetState; - } - line.stateAfter = context.save(!resetState); - line.styles = result.styles; - if (result.classes) { - line.styleClasses = result.classes; - } else if (line.styleClasses) { - line.styleClasses = null; - } - if (updateFrontier === cm.doc.highlightFrontier) { - cm.doc.modeFrontier = Math.max(cm.doc.modeFrontier, ++cm.doc.highlightFrontier); - } - } - return line.styles; - } - function getContextBefore(cm, n, precise) { - var doc = cm.doc, - display = cm.display; - if (!doc.mode.startState) { - return new Context(doc, true, n); - } - var start = findStartLine(cm, n, precise); - var saved = start > doc.first && getLine(doc, start - 1).stateAfter; - var context = saved ? Context.fromSaved(doc, saved, start) : new Context(doc, startState(doc.mode), start); - doc.iter(start, n, function (line) { - processLine(cm, line.text, context); - var pos = context.line; - line.stateAfter = pos == n - 1 || pos % 5 == 0 || pos >= display.viewFrom && pos < display.viewTo ? context.save() : null; - context.nextLine(); - }); - if (precise) { - doc.modeFrontier = context.line; - } - return context; - } - function processLine(cm, text, context, startAt) { - var mode = cm.doc.mode; - var stream = new StringStream(text, cm.options.tabSize, context); - stream.start = stream.pos = startAt || 0; - if (text == "") { - callBlankLine(mode, context.state); - } - while (!stream.eol()) { - readToken(mode, stream, context.state); - stream.start = stream.pos; - } - } - function callBlankLine(mode, state) { - if (mode.blankLine) { - return mode.blankLine(state); - } - if (!mode.innerMode) { - return; - } - var inner = innerMode(mode, state); - if (inner.mode.blankLine) { - return inner.mode.blankLine(inner.state); - } - } - function readToken(mode, stream, state, inner) { - for (var i2 = 0; i2 < 10; i2++) { - if (inner) { - inner[0] = innerMode(mode, state).mode; - } - var style = mode.token(stream, state); - if (stream.pos > stream.start) { - return style; - } - } - throw new Error("Mode " + mode.name + " failed to advance stream."); - } - var Token = function (stream, type, state) { - this.start = stream.start; - this.end = stream.pos; - this.string = stream.current(); - this.type = type || null; - this.state = state; - }; - function takeToken(cm, pos, precise, asArray) { - var doc = cm.doc, - mode = doc.mode, - style; - pos = clipPos(doc, pos); - var line = getLine(doc, pos.line), - context = getContextBefore(cm, pos.line, precise); - var stream = new StringStream(line.text, cm.options.tabSize, context), - tokens; - if (asArray) { - tokens = []; - } - while ((asArray || stream.pos < pos.ch) && !stream.eol()) { - stream.start = stream.pos; - style = readToken(mode, stream, context.state); - if (asArray) { - tokens.push(new Token(stream, style, copyState(doc.mode, context.state))); - } - } - return asArray ? tokens : new Token(stream, style, context.state); - } - function extractLineClasses(type, output) { - if (type) { - for (;;) { - var lineClass = type.match(/(?:^|\s+)line-(background-)?(\S+)/); - if (!lineClass) { - break; - } - type = type.slice(0, lineClass.index) + type.slice(lineClass.index + lineClass[0].length); - var prop2 = lineClass[1] ? "bgClass" : "textClass"; - if (output[prop2] == null) { - output[prop2] = lineClass[2]; - } else if (!new RegExp("(?:^|\\s)" + lineClass[2] + "(?:$|\\s)").test(output[prop2])) { - output[prop2] += " " + lineClass[2]; - } - } - } - return type; - } - function runMode(cm, text, mode, context, f, lineClasses, forceToEnd) { - var flattenSpans = mode.flattenSpans; - if (flattenSpans == null) { - flattenSpans = cm.options.flattenSpans; - } - var curStart = 0, - curStyle = null; - var stream = new StringStream(text, cm.options.tabSize, context), - style; - var inner = cm.options.addModeClass && [null]; - if (text == "") { - extractLineClasses(callBlankLine(mode, context.state), lineClasses); - } - while (!stream.eol()) { - if (stream.pos > cm.options.maxHighlightLength) { - flattenSpans = false; - if (forceToEnd) { - processLine(cm, text, context, stream.pos); - } - stream.pos = text.length; - style = null; - } else { - style = extractLineClasses(readToken(mode, stream, context.state, inner), lineClasses); - } - if (inner) { - var mName = inner[0].name; - if (mName) { - style = "m-" + (style ? mName + " " + style : mName); - } - } - if (!flattenSpans || curStyle != style) { - while (curStart < stream.start) { - curStart = Math.min(stream.start, curStart + 5e3); - f(curStart, curStyle); - } - curStyle = style; - } - stream.start = stream.pos; - } - while (curStart < stream.pos) { - var pos = Math.min(stream.pos, curStart + 5e3); - f(pos, curStyle); - curStart = pos; - } - } - function findStartLine(cm, n, precise) { - var minindent, - minline, - doc = cm.doc; - var lim = precise ? -1 : n - (cm.doc.mode.innerMode ? 1e3 : 100); - for (var search = n; search > lim; --search) { - if (search <= doc.first) { - return doc.first; - } - var line = getLine(doc, search - 1), - after = line.stateAfter; - if (after && (!precise || search + (after instanceof SavedContext ? after.lookAhead : 0) <= doc.modeFrontier)) { - return search; - } - var indented = countColumn(line.text, null, cm.options.tabSize); - if (minline == null || minindent > indented) { - minline = search - 1; - minindent = indented; - } - } - return minline; - } - function retreatFrontier(doc, n) { - doc.modeFrontier = Math.min(doc.modeFrontier, n); - if (doc.highlightFrontier < n - 10) { - return; - } - var start = doc.first; - for (var line = n - 1; line > start; line--) { - var saved = getLine(doc, line).stateAfter; - if (saved && (!(saved instanceof SavedContext) || line + saved.lookAhead < n)) { - start = line + 1; - break; - } - } - doc.highlightFrontier = Math.min(doc.highlightFrontier, start); - } - var sawReadOnlySpans = false, - sawCollapsedSpans = false; - function seeReadOnlySpans() { - sawReadOnlySpans = true; - } - function seeCollapsedSpans() { - sawCollapsedSpans = true; - } - function MarkedSpan(marker, from, to) { - this.marker = marker; - this.from = from; - this.to = to; - } - function getMarkedSpanFor(spans, marker) { - if (spans) { - for (var i2 = 0; i2 < spans.length; ++i2) { - var span = spans[i2]; - if (span.marker == marker) { - return span; - } - } - } - } - function removeMarkedSpan(spans, span) { - var r; - for (var i2 = 0; i2 < spans.length; ++i2) { - if (spans[i2] != span) { - (r || (r = [])).push(spans[i2]); - } - } - return r; - } - function addMarkedSpan(line, span, op) { - var inThisOp = op && window.WeakSet && (op.markedSpans || (op.markedSpans = /* @__PURE__ */new WeakSet())); - if (inThisOp && line.markedSpans && inThisOp.has(line.markedSpans)) { - line.markedSpans.push(span); - } else { - line.markedSpans = line.markedSpans ? line.markedSpans.concat([span]) : [span]; - if (inThisOp) { - inThisOp.add(line.markedSpans); - } - } - span.marker.attachLine(line); - } - function markedSpansBefore(old, startCh, isInsert) { - var nw; - if (old) { - for (var i2 = 0; i2 < old.length; ++i2) { - var span = old[i2], - marker = span.marker; - var startsBefore = span.from == null || (marker.inclusiveLeft ? span.from <= startCh : span.from < startCh); - if (startsBefore || span.from == startCh && marker.type == "bookmark" && (!isInsert || !span.marker.insertLeft)) { - var endsAfter = span.to == null || (marker.inclusiveRight ? span.to >= startCh : span.to > startCh); - (nw || (nw = [])).push(new MarkedSpan(marker, span.from, endsAfter ? null : span.to)); - } - } - } - return nw; - } - function markedSpansAfter(old, endCh, isInsert) { - var nw; - if (old) { - for (var i2 = 0; i2 < old.length; ++i2) { - var span = old[i2], - marker = span.marker; - var endsAfter = span.to == null || (marker.inclusiveRight ? span.to >= endCh : span.to > endCh); - if (endsAfter || span.from == endCh && marker.type == "bookmark" && (!isInsert || span.marker.insertLeft)) { - var startsBefore = span.from == null || (marker.inclusiveLeft ? span.from <= endCh : span.from < endCh); - (nw || (nw = [])).push(new MarkedSpan(marker, startsBefore ? null : span.from - endCh, span.to == null ? null : span.to - endCh)); - } - } - } - return nw; - } - function stretchSpansOverChange(doc, change) { - if (change.full) { - return null; - } - var oldFirst = isLine(doc, change.from.line) && getLine(doc, change.from.line).markedSpans; - var oldLast = isLine(doc, change.to.line) && getLine(doc, change.to.line).markedSpans; - if (!oldFirst && !oldLast) { - return null; - } - var startCh = change.from.ch, - endCh = change.to.ch, - isInsert = cmp(change.from, change.to) == 0; - var first = markedSpansBefore(oldFirst, startCh, isInsert); - var last = markedSpansAfter(oldLast, endCh, isInsert); - var sameLine = change.text.length == 1, - offset = lst(change.text).length + (sameLine ? startCh : 0); - if (first) { - for (var i2 = 0; i2 < first.length; ++i2) { - var span = first[i2]; - if (span.to == null) { - var found = getMarkedSpanFor(last, span.marker); - if (!found) { - span.to = startCh; - } else if (sameLine) { - span.to = found.to == null ? null : found.to + offset; - } - } - } - } - if (last) { - for (var i$12 = 0; i$12 < last.length; ++i$12) { - var span$1 = last[i$12]; - if (span$1.to != null) { - span$1.to += offset; - } - if (span$1.from == null) { - var found$1 = getMarkedSpanFor(first, span$1.marker); - if (!found$1) { - span$1.from = offset; - if (sameLine) { - (first || (first = [])).push(span$1); - } - } - } else { - span$1.from += offset; - if (sameLine) { - (first || (first = [])).push(span$1); - } - } - } - } - if (first) { - first = clearEmptySpans(first); - } - if (last && last != first) { - last = clearEmptySpans(last); - } - var newMarkers = [first]; - if (!sameLine) { - var gap = change.text.length - 2, - gapMarkers; - if (gap > 0 && first) { - for (var i$22 = 0; i$22 < first.length; ++i$22) { - if (first[i$22].to == null) { - (gapMarkers || (gapMarkers = [])).push(new MarkedSpan(first[i$22].marker, null, null)); - } - } - } - for (var i$3 = 0; i$3 < gap; ++i$3) { - newMarkers.push(gapMarkers); - } - newMarkers.push(last); - } - return newMarkers; - } - function clearEmptySpans(spans) { - for (var i2 = 0; i2 < spans.length; ++i2) { - var span = spans[i2]; - if (span.from != null && span.from == span.to && span.marker.clearWhenEmpty !== false) { - spans.splice(i2--, 1); - } - } - if (!spans.length) { - return null; - } - return spans; - } - function removeReadOnlyRanges(doc, from, to) { - var markers = null; - doc.iter(from.line, to.line + 1, function (line) { - if (line.markedSpans) { - for (var i3 = 0; i3 < line.markedSpans.length; ++i3) { - var mark = line.markedSpans[i3].marker; - if (mark.readOnly && (!markers || indexOf(markers, mark) == -1)) { - (markers || (markers = [])).push(mark); - } - } - } - }); - if (!markers) { - return null; - } - var parts = [{ - from, - to - }]; - for (var i2 = 0; i2 < markers.length; ++i2) { - var mk = markers[i2], - m = mk.find(0); - for (var j = 0; j < parts.length; ++j) { - var p = parts[j]; - if (cmp(p.to, m.from) < 0 || cmp(p.from, m.to) > 0) { - continue; - } - var newParts = [j, 1], - dfrom = cmp(p.from, m.from), - dto = cmp(p.to, m.to); - if (dfrom < 0 || !mk.inclusiveLeft && !dfrom) { - newParts.push({ - from: p.from, - to: m.from - }); - } - if (dto > 0 || !mk.inclusiveRight && !dto) { - newParts.push({ - from: m.to, - to: p.to - }); - } - parts.splice.apply(parts, newParts); - j += newParts.length - 3; - } - } - return parts; - } - function detachMarkedSpans(line) { - var spans = line.markedSpans; - if (!spans) { - return; - } - for (var i2 = 0; i2 < spans.length; ++i2) { - spans[i2].marker.detachLine(line); - } - line.markedSpans = null; - } - function attachMarkedSpans(line, spans) { - if (!spans) { - return; - } - for (var i2 = 0; i2 < spans.length; ++i2) { - spans[i2].marker.attachLine(line); - } - line.markedSpans = spans; - } - function extraLeft(marker) { - return marker.inclusiveLeft ? -1 : 0; - } - function extraRight(marker) { - return marker.inclusiveRight ? 1 : 0; - } - function compareCollapsedMarkers(a, b) { - var lenDiff = a.lines.length - b.lines.length; - if (lenDiff != 0) { - return lenDiff; - } - var aPos = a.find(), - bPos = b.find(); - var fromCmp = cmp(aPos.from, bPos.from) || extraLeft(a) - extraLeft(b); - if (fromCmp) { - return -fromCmp; - } - var toCmp = cmp(aPos.to, bPos.to) || extraRight(a) - extraRight(b); - if (toCmp) { - return toCmp; - } - return b.id - a.id; - } - function collapsedSpanAtSide(line, start) { - var sps = sawCollapsedSpans && line.markedSpans, - found; - if (sps) { - for (var sp = void 0, i2 = 0; i2 < sps.length; ++i2) { - sp = sps[i2]; - if (sp.marker.collapsed && (start ? sp.from : sp.to) == null && (!found || compareCollapsedMarkers(found, sp.marker) < 0)) { - found = sp.marker; - } - } - } - return found; - } - function collapsedSpanAtStart(line) { - return collapsedSpanAtSide(line, true); - } - function collapsedSpanAtEnd(line) { - return collapsedSpanAtSide(line, false); - } - function collapsedSpanAround(line, ch) { - var sps = sawCollapsedSpans && line.markedSpans, - found; - if (sps) { - for (var i2 = 0; i2 < sps.length; ++i2) { - var sp = sps[i2]; - if (sp.marker.collapsed && (sp.from == null || sp.from < ch) && (sp.to == null || sp.to > ch) && (!found || compareCollapsedMarkers(found, sp.marker) < 0)) { - found = sp.marker; - } - } - } - return found; - } - function conflictingCollapsedRange(doc, lineNo2, from, to, marker) { - var line = getLine(doc, lineNo2); - var sps = sawCollapsedSpans && line.markedSpans; - if (sps) { - for (var i2 = 0; i2 < sps.length; ++i2) { - var sp = sps[i2]; - if (!sp.marker.collapsed) { - continue; - } - var found = sp.marker.find(0); - var fromCmp = cmp(found.from, from) || extraLeft(sp.marker) - extraLeft(marker); - var toCmp = cmp(found.to, to) || extraRight(sp.marker) - extraRight(marker); - if (fromCmp >= 0 && toCmp <= 0 || fromCmp <= 0 && toCmp >= 0) { - continue; - } - if (fromCmp <= 0 && (sp.marker.inclusiveRight && marker.inclusiveLeft ? cmp(found.to, from) >= 0 : cmp(found.to, from) > 0) || fromCmp >= 0 && (sp.marker.inclusiveRight && marker.inclusiveLeft ? cmp(found.from, to) <= 0 : cmp(found.from, to) < 0)) { - return true; - } - } - } - } - function visualLine(line) { - var merged; - while (merged = collapsedSpanAtStart(line)) { - line = merged.find(-1, true).line; - } - return line; - } - function visualLineEnd(line) { - var merged; - while (merged = collapsedSpanAtEnd(line)) { - line = merged.find(1, true).line; - } - return line; - } - function visualLineContinued(line) { - var merged, lines; - while (merged = collapsedSpanAtEnd(line)) { - line = merged.find(1, true).line; - (lines || (lines = [])).push(line); - } - return lines; - } - function visualLineNo(doc, lineN) { - var line = getLine(doc, lineN), - vis = visualLine(line); - if (line == vis) { - return lineN; - } - return lineNo(vis); - } - function visualLineEndNo(doc, lineN) { - if (lineN > doc.lastLine()) { - return lineN; - } - var line = getLine(doc, lineN), - merged; - if (!lineIsHidden(doc, line)) { - return lineN; - } - while (merged = collapsedSpanAtEnd(line)) { - line = merged.find(1, true).line; - } - return lineNo(line) + 1; - } - function lineIsHidden(doc, line) { - var sps = sawCollapsedSpans && line.markedSpans; - if (sps) { - for (var sp = void 0, i2 = 0; i2 < sps.length; ++i2) { - sp = sps[i2]; - if (!sp.marker.collapsed) { - continue; - } - if (sp.from == null) { - return true; - } - if (sp.marker.widgetNode) { - continue; - } - if (sp.from == 0 && sp.marker.inclusiveLeft && lineIsHiddenInner(doc, line, sp)) { - return true; - } - } - } - } - function lineIsHiddenInner(doc, line, span) { - if (span.to == null) { - var end = span.marker.find(1, true); - return lineIsHiddenInner(doc, end.line, getMarkedSpanFor(end.line.markedSpans, span.marker)); - } - if (span.marker.inclusiveRight && span.to == line.text.length) { - return true; - } - for (var sp = void 0, i2 = 0; i2 < line.markedSpans.length; ++i2) { - sp = line.markedSpans[i2]; - if (sp.marker.collapsed && !sp.marker.widgetNode && sp.from == span.to && (sp.to == null || sp.to != span.from) && (sp.marker.inclusiveLeft || span.marker.inclusiveRight) && lineIsHiddenInner(doc, line, sp)) { - return true; - } - } - } - function heightAtLine(lineObj) { - lineObj = visualLine(lineObj); - var h = 0, - chunk = lineObj.parent; - for (var i2 = 0; i2 < chunk.lines.length; ++i2) { - var line = chunk.lines[i2]; - if (line == lineObj) { - break; - } else { - h += line.height; - } - } - for (var p = chunk.parent; p; chunk = p, p = chunk.parent) { - for (var i$12 = 0; i$12 < p.children.length; ++i$12) { - var cur = p.children[i$12]; - if (cur == chunk) { - break; - } else { - h += cur.height; - } - } - } - return h; - } - function lineLength(line) { - if (line.height == 0) { - return 0; - } - var len = line.text.length, - merged, - cur = line; - while (merged = collapsedSpanAtStart(cur)) { - var found = merged.find(0, true); - cur = found.from.line; - len += found.from.ch - found.to.ch; - } - cur = line; - while (merged = collapsedSpanAtEnd(cur)) { - var found$1 = merged.find(0, true); - len -= cur.text.length - found$1.from.ch; - cur = found$1.to.line; - len += cur.text.length - found$1.to.ch; - } - return len; - } - function findMaxLine(cm) { - var d = cm.display, - doc = cm.doc; - d.maxLine = getLine(doc, doc.first); - d.maxLineLength = lineLength(d.maxLine); - d.maxLineChanged = true; - doc.iter(function (line) { - var len = lineLength(line); - if (len > d.maxLineLength) { - d.maxLineLength = len; - d.maxLine = line; - } - }); - } - var Line = function (text, markedSpans, estimateHeight2) { - this.text = text; - attachMarkedSpans(this, markedSpans); - this.height = estimateHeight2 ? estimateHeight2(this) : 1; - }; - Line.prototype.lineNo = function () { - return lineNo(this); - }; - eventMixin(Line); - function updateLine(line, text, markedSpans, estimateHeight2) { - line.text = text; - if (line.stateAfter) { - line.stateAfter = null; - } - if (line.styles) { - line.styles = null; - } - if (line.order != null) { - line.order = null; - } - detachMarkedSpans(line); - attachMarkedSpans(line, markedSpans); - var estHeight = estimateHeight2 ? estimateHeight2(line) : 1; - if (estHeight != line.height) { - updateLineHeight(line, estHeight); - } - } - function cleanUpLine(line) { - line.parent = null; - detachMarkedSpans(line); - } - var styleToClassCache = {}, - styleToClassCacheWithMode = {}; - function interpretTokenStyle(style, options) { - if (!style || /^\s*$/.test(style)) { - return null; - } - var cache = options.addModeClass ? styleToClassCacheWithMode : styleToClassCache; - return cache[style] || (cache[style] = style.replace(/\S+/g, "cm-$&")); - } - function buildLineContent(cm, lineView) { - var content = eltP("span", null, null, webkit ? "padding-right: .1px" : null); - var builder = { - pre: eltP("pre", [content], "CodeMirror-line"), - content, - col: 0, - pos: 0, - cm, - trailingSpace: false, - splitSpaces: cm.getOption("lineWrapping") - }; - lineView.measure = {}; - for (var i2 = 0; i2 <= (lineView.rest ? lineView.rest.length : 0); i2++) { - var line = i2 ? lineView.rest[i2 - 1] : lineView.line, - order = void 0; - builder.pos = 0; - builder.addToken = buildToken; - if (hasBadBidiRects(cm.display.measure) && (order = getOrder(line, cm.doc.direction))) { - builder.addToken = buildTokenBadBidi(builder.addToken, order); - } - builder.map = []; - var allowFrontierUpdate = lineView != cm.display.externalMeasured && lineNo(line); - insertLineContent(line, builder, getLineStyles(cm, line, allowFrontierUpdate)); - if (line.styleClasses) { - if (line.styleClasses.bgClass) { - builder.bgClass = joinClasses(line.styleClasses.bgClass, builder.bgClass || ""); - } - if (line.styleClasses.textClass) { - builder.textClass = joinClasses(line.styleClasses.textClass, builder.textClass || ""); - } - } - if (builder.map.length == 0) { - builder.map.push(0, 0, builder.content.appendChild(zeroWidthElement(cm.display.measure))); - } - if (i2 == 0) { - lineView.measure.map = builder.map; - lineView.measure.cache = {}; - } else { - (lineView.measure.maps || (lineView.measure.maps = [])).push(builder.map); - (lineView.measure.caches || (lineView.measure.caches = [])).push({}); - } - } - if (webkit) { - var last = builder.content.lastChild; - if (/\bcm-tab\b/.test(last.className) || last.querySelector && last.querySelector(".cm-tab")) { - builder.content.className = "cm-tab-wrap-hack"; - } - } - signal(cm, "renderLine", cm, lineView.line, builder.pre); - if (builder.pre.className) { - builder.textClass = joinClasses(builder.pre.className, builder.textClass || ""); - } - return builder; - } - function defaultSpecialCharPlaceholder(ch) { - var token = elt("span", "•", "cm-invalidchar"); - token.title = "\\u" + ch.charCodeAt(0).toString(16); - token.setAttribute("aria-label", token.title); - return token; - } - function buildToken(builder, text, style, startStyle, endStyle, css, attributes) { - if (!text) { - return; - } - var displayText = builder.splitSpaces ? splitSpaces(text, builder.trailingSpace) : text; - var special = builder.cm.state.specialChars, - mustWrap = false; - var content; - if (!special.test(text)) { - builder.col += text.length; - content = document.createTextNode(displayText); - builder.map.push(builder.pos, builder.pos + text.length, content); - if (ie && ie_version < 9) { - mustWrap = true; - } - builder.pos += text.length; - } else { - content = document.createDocumentFragment(); - var pos = 0; - while (true) { - special.lastIndex = pos; - var m = special.exec(text); - var skipped = m ? m.index - pos : text.length - pos; - if (skipped) { - var txt = document.createTextNode(displayText.slice(pos, pos + skipped)); - if (ie && ie_version < 9) { - content.appendChild(elt("span", [txt])); - } else { - content.appendChild(txt); - } - builder.map.push(builder.pos, builder.pos + skipped, txt); - builder.col += skipped; - builder.pos += skipped; - } - if (!m) { - break; - } - pos += skipped + 1; - var txt$1 = void 0; - if (m[0] == " ") { - var tabSize = builder.cm.options.tabSize, - tabWidth = tabSize - builder.col % tabSize; - txt$1 = content.appendChild(elt("span", spaceStr(tabWidth), "cm-tab")); - txt$1.setAttribute("role", "presentation"); - txt$1.setAttribute("cm-text", " "); - builder.col += tabWidth; - } else if (m[0] == "\r" || m[0] == "\n") { - txt$1 = content.appendChild(elt("span", m[0] == "\r" ? "␍" : "␤", "cm-invalidchar")); - txt$1.setAttribute("cm-text", m[0]); - builder.col += 1; - } else { - txt$1 = builder.cm.options.specialCharPlaceholder(m[0]); - txt$1.setAttribute("cm-text", m[0]); - if (ie && ie_version < 9) { - content.appendChild(elt("span", [txt$1])); - } else { - content.appendChild(txt$1); - } - builder.col += 1; - } - builder.map.push(builder.pos, builder.pos + 1, txt$1); - builder.pos++; - } - } - builder.trailingSpace = displayText.charCodeAt(text.length - 1) == 32; - if (style || startStyle || endStyle || mustWrap || css || attributes) { - var fullStyle = style || ""; - if (startStyle) { - fullStyle += startStyle; - } - if (endStyle) { - fullStyle += endStyle; - } - var token = elt("span", [content], fullStyle, css); - if (attributes) { - for (var attr in attributes) { - if (attributes.hasOwnProperty(attr) && attr != "style" && attr != "class") { - token.setAttribute(attr, attributes[attr]); - } - } - } - return builder.content.appendChild(token); - } - builder.content.appendChild(content); - } - function splitSpaces(text, trailingBefore) { - if (text.length > 1 && !/ /.test(text)) { - return text; - } - var spaceBefore = trailingBefore, - result = ""; - for (var i2 = 0; i2 < text.length; i2++) { - var ch = text.charAt(i2); - if (ch == " " && spaceBefore && (i2 == text.length - 1 || text.charCodeAt(i2 + 1) == 32)) { - ch = " "; - } - result += ch; - spaceBefore = ch == " "; - } - return result; - } - function buildTokenBadBidi(inner, order) { - return function (builder, text, style, startStyle, endStyle, css, attributes) { - style = style ? style + " cm-force-border" : "cm-force-border"; - var start = builder.pos, - end = start + text.length; - for (;;) { - var part = void 0; - for (var i2 = 0; i2 < order.length; i2++) { - part = order[i2]; - if (part.to > start && part.from <= start) { - break; - } - } - if (part.to >= end) { - return inner(builder, text, style, startStyle, endStyle, css, attributes); - } - inner(builder, text.slice(0, part.to - start), style, startStyle, null, css, attributes); - startStyle = null; - text = text.slice(part.to - start); - start = part.to; - } - }; - } - function buildCollapsedSpan(builder, size, marker, ignoreWidget) { - var widget = !ignoreWidget && marker.widgetNode; - if (widget) { - builder.map.push(builder.pos, builder.pos + size, widget); - } - if (!ignoreWidget && builder.cm.display.input.needsContentAttribute) { - if (!widget) { - widget = builder.content.appendChild(document.createElement("span")); - } - widget.setAttribute("cm-marker", marker.id); - } - if (widget) { - builder.cm.display.input.setUneditable(widget); - builder.content.appendChild(widget); - } - builder.pos += size; - builder.trailingSpace = false; - } - function insertLineContent(line, builder, styles) { - var spans = line.markedSpans, - allText = line.text, - at = 0; - if (!spans) { - for (var i$12 = 1; i$12 < styles.length; i$12 += 2) { - builder.addToken(builder, allText.slice(at, at = styles[i$12]), interpretTokenStyle(styles[i$12 + 1], builder.cm.options)); - } - return; - } - var len = allText.length, - pos = 0, - i2 = 1, - text = "", - style, - css; - var nextChange = 0, - spanStyle, - spanEndStyle, - spanStartStyle, - collapsed, - attributes; - for (;;) { - if (nextChange == pos) { - spanStyle = spanEndStyle = spanStartStyle = css = ""; - attributes = null; - collapsed = null; - nextChange = Infinity; - var foundBookmarks = [], - endStyles = void 0; - for (var j = 0; j < spans.length; ++j) { - var sp = spans[j], - m = sp.marker; - if (m.type == "bookmark" && sp.from == pos && m.widgetNode) { - foundBookmarks.push(m); - } else if (sp.from <= pos && (sp.to == null || sp.to > pos || m.collapsed && sp.to == pos && sp.from == pos)) { - if (sp.to != null && sp.to != pos && nextChange > sp.to) { - nextChange = sp.to; - spanEndStyle = ""; - } - if (m.className) { - spanStyle += " " + m.className; - } - if (m.css) { - css = (css ? css + ";" : "") + m.css; - } - if (m.startStyle && sp.from == pos) { - spanStartStyle += " " + m.startStyle; - } - if (m.endStyle && sp.to == nextChange) { - (endStyles || (endStyles = [])).push(m.endStyle, sp.to); - } - if (m.title) { - (attributes || (attributes = {})).title = m.title; - } - if (m.attributes) { - for (var attr in m.attributes) { - (attributes || (attributes = {}))[attr] = m.attributes[attr]; - } - } - if (m.collapsed && (!collapsed || compareCollapsedMarkers(collapsed.marker, m) < 0)) { - collapsed = sp; - } - } else if (sp.from > pos && nextChange > sp.from) { - nextChange = sp.from; - } - } - if (endStyles) { - for (var j$1 = 0; j$1 < endStyles.length; j$1 += 2) { - if (endStyles[j$1 + 1] == nextChange) { - spanEndStyle += " " + endStyles[j$1]; - } - } - } - if (!collapsed || collapsed.from == pos) { - for (var j$2 = 0; j$2 < foundBookmarks.length; ++j$2) { - buildCollapsedSpan(builder, 0, foundBookmarks[j$2]); - } - } - if (collapsed && (collapsed.from || 0) == pos) { - buildCollapsedSpan(builder, (collapsed.to == null ? len + 1 : collapsed.to) - pos, collapsed.marker, collapsed.from == null); - if (collapsed.to == null) { - return; - } - if (collapsed.to == pos) { - collapsed = false; - } - } - } - if (pos >= len) { - break; - } - var upto = Math.min(len, nextChange); - while (true) { - if (text) { - var end = pos + text.length; - if (!collapsed) { - var tokenText = end > upto ? text.slice(0, upto - pos) : text; - builder.addToken(builder, tokenText, style ? style + spanStyle : spanStyle, spanStartStyle, pos + tokenText.length == nextChange ? spanEndStyle : "", css, attributes); - } - if (end >= upto) { - text = text.slice(upto - pos); - pos = upto; - break; - } - pos = end; - spanStartStyle = ""; - } - text = allText.slice(at, at = styles[i2++]); - style = interpretTokenStyle(styles[i2++], builder.cm.options); - } - } - } - function LineView(doc, line, lineN) { - this.line = line; - this.rest = visualLineContinued(line); - this.size = this.rest ? lineNo(lst(this.rest)) - lineN + 1 : 1; - this.node = this.text = null; - this.hidden = lineIsHidden(doc, line); - } - function buildViewArray(cm, from, to) { - var array = [], - nextPos; - for (var pos = from; pos < to; pos = nextPos) { - var view = new LineView(cm.doc, getLine(cm.doc, pos), pos); - nextPos = pos + view.size; - array.push(view); - } - return array; - } - var operationGroup = null; - function pushOperation(op) { - if (operationGroup) { - operationGroup.ops.push(op); - } else { - op.ownsGroup = operationGroup = { - ops: [op], - delayedCallbacks: [] - }; - } - } - function fireCallbacksForOps(group) { - var callbacks = group.delayedCallbacks, - i2 = 0; - do { - for (; i2 < callbacks.length; i2++) { - callbacks[i2].call(null); - } - for (var j = 0; j < group.ops.length; j++) { - var op = group.ops[j]; - if (op.cursorActivityHandlers) { - while (op.cursorActivityCalled < op.cursorActivityHandlers.length) { - op.cursorActivityHandlers[op.cursorActivityCalled++].call(null, op.cm); - } - } - } - } while (i2 < callbacks.length); - } - function finishOperation(op, endCb) { - var group = op.ownsGroup; - if (!group) { - return; - } - try { - fireCallbacksForOps(group); - } finally { - operationGroup = null; - endCb(group); - } - } - var orphanDelayedCallbacks = null; - function signalLater(emitter, type) { - var arr = getHandlers(emitter, type); - if (!arr.length) { - return; - } - var args = Array.prototype.slice.call(arguments, 2), - list; - if (operationGroup) { - list = operationGroup.delayedCallbacks; - } else if (orphanDelayedCallbacks) { - list = orphanDelayedCallbacks; - } else { - list = orphanDelayedCallbacks = []; - setTimeout(fireOrphanDelayed, 0); - } - var loop = function (i3) { - list.push(function () { - return arr[i3].apply(null, args); - }); - }; - for (var i2 = 0; i2 < arr.length; ++i2) loop(i2); - } - function fireOrphanDelayed() { - var delayed = orphanDelayedCallbacks; - orphanDelayedCallbacks = null; - for (var i2 = 0; i2 < delayed.length; ++i2) { - delayed[i2](); - } - } - function updateLineForChanges(cm, lineView, lineN, dims) { - for (var j = 0; j < lineView.changes.length; j++) { - var type = lineView.changes[j]; - if (type == "text") { - updateLineText(cm, lineView); - } else if (type == "gutter") { - updateLineGutter(cm, lineView, lineN, dims); - } else if (type == "class") { - updateLineClasses(cm, lineView); - } else if (type == "widget") { - updateLineWidgets(cm, lineView, dims); - } - } - lineView.changes = null; - } - function ensureLineWrapped(lineView) { - if (lineView.node == lineView.text) { - lineView.node = elt("div", null, null, "position: relative"); - if (lineView.text.parentNode) { - lineView.text.parentNode.replaceChild(lineView.node, lineView.text); - } - lineView.node.appendChild(lineView.text); - if (ie && ie_version < 8) { - lineView.node.style.zIndex = 2; - } - } - return lineView.node; - } - function updateLineBackground(cm, lineView) { - var cls = lineView.bgClass ? lineView.bgClass + " " + (lineView.line.bgClass || "") : lineView.line.bgClass; - if (cls) { - cls += " CodeMirror-linebackground"; - } - if (lineView.background) { - if (cls) { - lineView.background.className = cls; - } else { - lineView.background.parentNode.removeChild(lineView.background); - lineView.background = null; - } - } else if (cls) { - var wrap = ensureLineWrapped(lineView); - lineView.background = wrap.insertBefore(elt("div", null, cls), wrap.firstChild); - cm.display.input.setUneditable(lineView.background); - } - } - function getLineContent(cm, lineView) { - var ext = cm.display.externalMeasured; - if (ext && ext.line == lineView.line) { - cm.display.externalMeasured = null; - lineView.measure = ext.measure; - return ext.built; - } - return buildLineContent(cm, lineView); - } - function updateLineText(cm, lineView) { - var cls = lineView.text.className; - var built = getLineContent(cm, lineView); - if (lineView.text == lineView.node) { - lineView.node = built.pre; - } - lineView.text.parentNode.replaceChild(built.pre, lineView.text); - lineView.text = built.pre; - if (built.bgClass != lineView.bgClass || built.textClass != lineView.textClass) { - lineView.bgClass = built.bgClass; - lineView.textClass = built.textClass; - updateLineClasses(cm, lineView); - } else if (cls) { - lineView.text.className = cls; - } - } - function updateLineClasses(cm, lineView) { - updateLineBackground(cm, lineView); - if (lineView.line.wrapClass) { - ensureLineWrapped(lineView).className = lineView.line.wrapClass; - } else if (lineView.node != lineView.text) { - lineView.node.className = ""; - } - var textClass = lineView.textClass ? lineView.textClass + " " + (lineView.line.textClass || "") : lineView.line.textClass; - lineView.text.className = textClass || ""; - } - function updateLineGutter(cm, lineView, lineN, dims) { - if (lineView.gutter) { - lineView.node.removeChild(lineView.gutter); - lineView.gutter = null; - } - if (lineView.gutterBackground) { - lineView.node.removeChild(lineView.gutterBackground); - lineView.gutterBackground = null; - } - if (lineView.line.gutterClass) { - var wrap = ensureLineWrapped(lineView); - lineView.gutterBackground = elt("div", null, "CodeMirror-gutter-background " + lineView.line.gutterClass, "left: " + (cm.options.fixedGutter ? dims.fixedPos : -dims.gutterTotalWidth) + "px; width: " + dims.gutterTotalWidth + "px"); - cm.display.input.setUneditable(lineView.gutterBackground); - wrap.insertBefore(lineView.gutterBackground, lineView.text); - } - var markers = lineView.line.gutterMarkers; - if (cm.options.lineNumbers || markers) { - var wrap$1 = ensureLineWrapped(lineView); - var gutterWrap = lineView.gutter = elt("div", null, "CodeMirror-gutter-wrapper", "left: " + (cm.options.fixedGutter ? dims.fixedPos : -dims.gutterTotalWidth) + "px"); - gutterWrap.setAttribute("aria-hidden", "true"); - cm.display.input.setUneditable(gutterWrap); - wrap$1.insertBefore(gutterWrap, lineView.text); - if (lineView.line.gutterClass) { - gutterWrap.className += " " + lineView.line.gutterClass; - } - if (cm.options.lineNumbers && (!markers || !markers["CodeMirror-linenumbers"])) { - lineView.lineNumber = gutterWrap.appendChild(elt("div", lineNumberFor(cm.options, lineN), "CodeMirror-linenumber CodeMirror-gutter-elt", "left: " + dims.gutterLeft["CodeMirror-linenumbers"] + "px; width: " + cm.display.lineNumInnerWidth + "px")); - } - if (markers) { - for (var k = 0; k < cm.display.gutterSpecs.length; ++k) { - var id = cm.display.gutterSpecs[k].className, - found = markers.hasOwnProperty(id) && markers[id]; - if (found) { - gutterWrap.appendChild(elt("div", [found], "CodeMirror-gutter-elt", "left: " + dims.gutterLeft[id] + "px; width: " + dims.gutterWidth[id] + "px")); - } - } - } - } - } - function updateLineWidgets(cm, lineView, dims) { - if (lineView.alignable) { - lineView.alignable = null; - } - var isWidget = classTest("CodeMirror-linewidget"); - for (var node = lineView.node.firstChild, next = void 0; node; node = next) { - next = node.nextSibling; - if (isWidget.test(node.className)) { - lineView.node.removeChild(node); - } - } - insertLineWidgets(cm, lineView, dims); - } - function buildLineElement(cm, lineView, lineN, dims) { - var built = getLineContent(cm, lineView); - lineView.text = lineView.node = built.pre; - if (built.bgClass) { - lineView.bgClass = built.bgClass; - } - if (built.textClass) { - lineView.textClass = built.textClass; - } - updateLineClasses(cm, lineView); - updateLineGutter(cm, lineView, lineN, dims); - insertLineWidgets(cm, lineView, dims); - return lineView.node; - } - function insertLineWidgets(cm, lineView, dims) { - insertLineWidgetsFor(cm, lineView.line, lineView, dims, true); - if (lineView.rest) { - for (var i2 = 0; i2 < lineView.rest.length; i2++) { - insertLineWidgetsFor(cm, lineView.rest[i2], lineView, dims, false); - } - } - } - function insertLineWidgetsFor(cm, line, lineView, dims, allowAbove) { - if (!line.widgets) { - return; - } - var wrap = ensureLineWrapped(lineView); - for (var i2 = 0, ws = line.widgets; i2 < ws.length; ++i2) { - var widget = ws[i2], - node = elt("div", [widget.node], "CodeMirror-linewidget" + (widget.className ? " " + widget.className : "")); - if (!widget.handleMouseEvents) { - node.setAttribute("cm-ignore-events", "true"); - } - positionLineWidget(widget, node, lineView, dims); - cm.display.input.setUneditable(node); - if (allowAbove && widget.above) { - wrap.insertBefore(node, lineView.gutter || lineView.text); - } else { - wrap.appendChild(node); - } - signalLater(widget, "redraw"); - } - } - function positionLineWidget(widget, node, lineView, dims) { - if (widget.noHScroll) { - (lineView.alignable || (lineView.alignable = [])).push(node); - var width = dims.wrapperWidth; - node.style.left = dims.fixedPos + "px"; - if (!widget.coverGutter) { - width -= dims.gutterTotalWidth; - node.style.paddingLeft = dims.gutterTotalWidth + "px"; - } - node.style.width = width + "px"; - } - if (widget.coverGutter) { - node.style.zIndex = 5; - node.style.position = "relative"; - if (!widget.noHScroll) { - node.style.marginLeft = -dims.gutterTotalWidth + "px"; - } - } - } - function widgetHeight(widget) { - if (widget.height != null) { - return widget.height; - } - var cm = widget.doc.cm; - if (!cm) { - return 0; - } - if (!contains(document.body, widget.node)) { - var parentStyle = "position: relative;"; - if (widget.coverGutter) { - parentStyle += "margin-left: -" + cm.display.gutters.offsetWidth + "px;"; - } - if (widget.noHScroll) { - parentStyle += "width: " + cm.display.wrapper.clientWidth + "px;"; - } - removeChildrenAndAdd(cm.display.measure, elt("div", [widget.node], null, parentStyle)); - } - return widget.height = widget.node.parentNode.offsetHeight; - } - function eventInWidget(display, e) { - for (var n = e_target(e); n != display.wrapper; n = n.parentNode) { - if (!n || n.nodeType == 1 && n.getAttribute("cm-ignore-events") == "true" || n.parentNode == display.sizer && n != display.mover) { - return true; - } - } - } - function paddingTop(display) { - return display.lineSpace.offsetTop; - } - function paddingVert(display) { - return display.mover.offsetHeight - display.lineSpace.offsetHeight; - } - function paddingH(display) { - if (display.cachedPaddingH) { - return display.cachedPaddingH; - } - var e = removeChildrenAndAdd(display.measure, elt("pre", "x", "CodeMirror-line-like")); - var style = window.getComputedStyle ? window.getComputedStyle(e) : e.currentStyle; - var data = { - left: parseInt(style.paddingLeft), - right: parseInt(style.paddingRight) - }; - if (!isNaN(data.left) && !isNaN(data.right)) { - display.cachedPaddingH = data; - } - return data; - } - function scrollGap(cm) { - return scrollerGap - cm.display.nativeBarWidth; - } - function displayWidth(cm) { - return cm.display.scroller.clientWidth - scrollGap(cm) - cm.display.barWidth; - } - function displayHeight(cm) { - return cm.display.scroller.clientHeight - scrollGap(cm) - cm.display.barHeight; - } - function ensureLineHeights(cm, lineView, rect) { - var wrapping = cm.options.lineWrapping; - var curWidth = wrapping && displayWidth(cm); - if (!lineView.measure.heights || wrapping && lineView.measure.width != curWidth) { - var heights = lineView.measure.heights = []; - if (wrapping) { - lineView.measure.width = curWidth; - var rects = lineView.text.firstChild.getClientRects(); - for (var i2 = 0; i2 < rects.length - 1; i2++) { - var cur = rects[i2], - next = rects[i2 + 1]; - if (Math.abs(cur.bottom - next.bottom) > 2) { - heights.push((cur.bottom + next.top) / 2 - rect.top); - } - } - } - heights.push(rect.bottom - rect.top); - } - } - function mapFromLineView(lineView, line, lineN) { - if (lineView.line == line) { - return { - map: lineView.measure.map, - cache: lineView.measure.cache - }; - } - if (lineView.rest) { - for (var i2 = 0; i2 < lineView.rest.length; i2++) { - if (lineView.rest[i2] == line) { - return { - map: lineView.measure.maps[i2], - cache: lineView.measure.caches[i2] - }; - } - } - for (var i$12 = 0; i$12 < lineView.rest.length; i$12++) { - if (lineNo(lineView.rest[i$12]) > lineN) { - return { - map: lineView.measure.maps[i$12], - cache: lineView.measure.caches[i$12], - before: true - }; - } - } - } - } - function updateExternalMeasurement(cm, line) { - line = visualLine(line); - var lineN = lineNo(line); - var view = cm.display.externalMeasured = new LineView(cm.doc, line, lineN); - view.lineN = lineN; - var built = view.built = buildLineContent(cm, view); - view.text = built.pre; - removeChildrenAndAdd(cm.display.lineMeasure, built.pre); - return view; - } - function measureChar(cm, line, ch, bias) { - return measureCharPrepared(cm, prepareMeasureForLine(cm, line), ch, bias); - } - function findViewForLine(cm, lineN) { - if (lineN >= cm.display.viewFrom && lineN < cm.display.viewTo) { - return cm.display.view[findViewIndex(cm, lineN)]; - } - var ext = cm.display.externalMeasured; - if (ext && lineN >= ext.lineN && lineN < ext.lineN + ext.size) { - return ext; - } - } - function prepareMeasureForLine(cm, line) { - var lineN = lineNo(line); - var view = findViewForLine(cm, lineN); - if (view && !view.text) { - view = null; - } else if (view && view.changes) { - updateLineForChanges(cm, view, lineN, getDimensions(cm)); - cm.curOp.forceUpdate = true; - } - if (!view) { - view = updateExternalMeasurement(cm, line); - } - var info = mapFromLineView(view, line, lineN); - return { - line, - view, - rect: null, - map: info.map, - cache: info.cache, - before: info.before, - hasHeights: false - }; - } - function measureCharPrepared(cm, prepared, ch, bias, varHeight) { - if (prepared.before) { - ch = -1; - } - var key = ch + (bias || ""), - found; - if (prepared.cache.hasOwnProperty(key)) { - found = prepared.cache[key]; - } else { - if (!prepared.rect) { - prepared.rect = prepared.view.text.getBoundingClientRect(); - } - if (!prepared.hasHeights) { - ensureLineHeights(cm, prepared.view, prepared.rect); - prepared.hasHeights = true; - } - found = measureCharInner(cm, prepared, ch, bias); - if (!found.bogus) { - prepared.cache[key] = found; - } - } - return { - left: found.left, - right: found.right, - top: varHeight ? found.rtop : found.top, - bottom: varHeight ? found.rbottom : found.bottom - }; - } - var nullRect = { - left: 0, - right: 0, - top: 0, - bottom: 0 - }; - function nodeAndOffsetInLineMap(map2, ch, bias) { - var node, start, end, collapse, mStart, mEnd; - for (var i2 = 0; i2 < map2.length; i2 += 3) { - mStart = map2[i2]; - mEnd = map2[i2 + 1]; - if (ch < mStart) { - start = 0; - end = 1; - collapse = "left"; - } else if (ch < mEnd) { - start = ch - mStart; - end = start + 1; - } else if (i2 == map2.length - 3 || ch == mEnd && map2[i2 + 3] > ch) { - end = mEnd - mStart; - start = end - 1; - if (ch >= mEnd) { - collapse = "right"; - } - } - if (start != null) { - node = map2[i2 + 2]; - if (mStart == mEnd && bias == (node.insertLeft ? "left" : "right")) { - collapse = bias; - } - if (bias == "left" && start == 0) { - while (i2 && map2[i2 - 2] == map2[i2 - 3] && map2[i2 - 1].insertLeft) { - node = map2[(i2 -= 3) + 2]; - collapse = "left"; - } - } - if (bias == "right" && start == mEnd - mStart) { - while (i2 < map2.length - 3 && map2[i2 + 3] == map2[i2 + 4] && !map2[i2 + 5].insertLeft) { - node = map2[(i2 += 3) + 2]; - collapse = "right"; - } - } - break; - } - } - return { - node, - start, - end, - collapse, - coverStart: mStart, - coverEnd: mEnd - }; - } - function getUsefulRect(rects, bias) { - var rect = nullRect; - if (bias == "left") { - for (var i2 = 0; i2 < rects.length; i2++) { - if ((rect = rects[i2]).left != rect.right) { - break; - } - } - } else { - for (var i$12 = rects.length - 1; i$12 >= 0; i$12--) { - if ((rect = rects[i$12]).left != rect.right) { - break; - } - } - } - return rect; - } - function measureCharInner(cm, prepared, ch, bias) { - var place = nodeAndOffsetInLineMap(prepared.map, ch, bias); - var node = place.node, - start = place.start, - end = place.end, - collapse = place.collapse; - var rect; - if (node.nodeType == 3) { - for (var i$12 = 0; i$12 < 4; i$12++) { - while (start && isExtendingChar(prepared.line.text.charAt(place.coverStart + start))) { - --start; - } - while (place.coverStart + end < place.coverEnd && isExtendingChar(prepared.line.text.charAt(place.coverStart + end))) { - ++end; - } - if (ie && ie_version < 9 && start == 0 && end == place.coverEnd - place.coverStart) { - rect = node.parentNode.getBoundingClientRect(); - } else { - rect = getUsefulRect(range(node, start, end).getClientRects(), bias); - } - if (rect.left || rect.right || start == 0) { - break; - } - end = start; - start = start - 1; - collapse = "right"; - } - if (ie && ie_version < 11) { - rect = maybeUpdateRectForZooming(cm.display.measure, rect); - } - } else { - if (start > 0) { - collapse = bias = "right"; - } - var rects; - if (cm.options.lineWrapping && (rects = node.getClientRects()).length > 1) { - rect = rects[bias == "right" ? rects.length - 1 : 0]; - } else { - rect = node.getBoundingClientRect(); - } - } - if (ie && ie_version < 9 && !start && (!rect || !rect.left && !rect.right)) { - var rSpan = node.parentNode.getClientRects()[0]; - if (rSpan) { - rect = { - left: rSpan.left, - right: rSpan.left + charWidth(cm.display), - top: rSpan.top, - bottom: rSpan.bottom - }; - } else { - rect = nullRect; - } - } - var rtop = rect.top - prepared.rect.top, - rbot = rect.bottom - prepared.rect.top; - var mid = (rtop + rbot) / 2; - var heights = prepared.view.measure.heights; - var i2 = 0; - for (; i2 < heights.length - 1; i2++) { - if (mid < heights[i2]) { - break; - } - } - var top = i2 ? heights[i2 - 1] : 0, - bot = heights[i2]; - var result = { - left: (collapse == "right" ? rect.right : rect.left) - prepared.rect.left, - right: (collapse == "left" ? rect.left : rect.right) - prepared.rect.left, - top, - bottom: bot - }; - if (!rect.left && !rect.right) { - result.bogus = true; - } - if (!cm.options.singleCursorHeightPerLine) { - result.rtop = rtop; - result.rbottom = rbot; - } - return result; - } - function maybeUpdateRectForZooming(measure, rect) { - if (!window.screen || screen.logicalXDPI == null || screen.logicalXDPI == screen.deviceXDPI || !hasBadZoomedRects(measure)) { - return rect; - } - var scaleX = screen.logicalXDPI / screen.deviceXDPI; - var scaleY = screen.logicalYDPI / screen.deviceYDPI; - return { - left: rect.left * scaleX, - right: rect.right * scaleX, - top: rect.top * scaleY, - bottom: rect.bottom * scaleY - }; - } - function clearLineMeasurementCacheFor(lineView) { - if (lineView.measure) { - lineView.measure.cache = {}; - lineView.measure.heights = null; - if (lineView.rest) { - for (var i2 = 0; i2 < lineView.rest.length; i2++) { - lineView.measure.caches[i2] = {}; - } - } - } - } - function clearLineMeasurementCache(cm) { - cm.display.externalMeasure = null; - removeChildren(cm.display.lineMeasure); - for (var i2 = 0; i2 < cm.display.view.length; i2++) { - clearLineMeasurementCacheFor(cm.display.view[i2]); - } - } - function clearCaches(cm) { - clearLineMeasurementCache(cm); - cm.display.cachedCharWidth = cm.display.cachedTextHeight = cm.display.cachedPaddingH = null; - if (!cm.options.lineWrapping) { - cm.display.maxLineChanged = true; - } - cm.display.lineNumChars = null; - } - function pageScrollX() { - if (chrome && android) { - return -(document.body.getBoundingClientRect().left - parseInt(getComputedStyle(document.body).marginLeft)); - } - return window.pageXOffset || (document.documentElement || document.body).scrollLeft; - } - function pageScrollY() { - if (chrome && android) { - return -(document.body.getBoundingClientRect().top - parseInt(getComputedStyle(document.body).marginTop)); - } - return window.pageYOffset || (document.documentElement || document.body).scrollTop; - } - function widgetTopHeight(lineObj) { - var ref = visualLine(lineObj); - var widgets = ref.widgets; - var height = 0; - if (widgets) { - for (var i2 = 0; i2 < widgets.length; ++i2) { - if (widgets[i2].above) { - height += widgetHeight(widgets[i2]); - } - } - } - return height; - } - function intoCoordSystem(cm, lineObj, rect, context, includeWidgets) { - if (!includeWidgets) { - var height = widgetTopHeight(lineObj); - rect.top += height; - rect.bottom += height; - } - if (context == "line") { - return rect; - } - if (!context) { - context = "local"; - } - var yOff = heightAtLine(lineObj); - if (context == "local") { - yOff += paddingTop(cm.display); - } else { - yOff -= cm.display.viewOffset; - } - if (context == "page" || context == "window") { - var lOff = cm.display.lineSpace.getBoundingClientRect(); - yOff += lOff.top + (context == "window" ? 0 : pageScrollY()); - var xOff = lOff.left + (context == "window" ? 0 : pageScrollX()); - rect.left += xOff; - rect.right += xOff; - } - rect.top += yOff; - rect.bottom += yOff; - return rect; - } - function fromCoordSystem(cm, coords, context) { - if (context == "div") { - return coords; - } - var left = coords.left, - top = coords.top; - if (context == "page") { - left -= pageScrollX(); - top -= pageScrollY(); - } else if (context == "local" || !context) { - var localBox = cm.display.sizer.getBoundingClientRect(); - left += localBox.left; - top += localBox.top; - } - var lineSpaceBox = cm.display.lineSpace.getBoundingClientRect(); - return { - left: left - lineSpaceBox.left, - top: top - lineSpaceBox.top - }; - } - function charCoords(cm, pos, context, lineObj, bias) { - if (!lineObj) { - lineObj = getLine(cm.doc, pos.line); - } - return intoCoordSystem(cm, lineObj, measureChar(cm, lineObj, pos.ch, bias), context); - } - function cursorCoords(cm, pos, context, lineObj, preparedMeasure, varHeight) { - lineObj = lineObj || getLine(cm.doc, pos.line); - if (!preparedMeasure) { - preparedMeasure = prepareMeasureForLine(cm, lineObj); - } - function get(ch2, right) { - var m = measureCharPrepared(cm, preparedMeasure, ch2, right ? "right" : "left", varHeight); - if (right) { - m.left = m.right; - } else { - m.right = m.left; - } - return intoCoordSystem(cm, lineObj, m, context); - } - var order = getOrder(lineObj, cm.doc.direction), - ch = pos.ch, - sticky = pos.sticky; - if (ch >= lineObj.text.length) { - ch = lineObj.text.length; - sticky = "before"; - } else if (ch <= 0) { - ch = 0; - sticky = "after"; - } - if (!order) { - return get(sticky == "before" ? ch - 1 : ch, sticky == "before"); - } - function getBidi(ch2, partPos2, invert) { - var part = order[partPos2], - right = part.level == 1; - return get(invert ? ch2 - 1 : ch2, right != invert); - } - var partPos = getBidiPartAt(order, ch, sticky); - var other = bidiOther; - var val = getBidi(ch, partPos, sticky == "before"); - if (other != null) { - val.other = getBidi(ch, other, sticky != "before"); - } - return val; - } - function estimateCoords(cm, pos) { - var left = 0; - pos = clipPos(cm.doc, pos); - if (!cm.options.lineWrapping) { - left = charWidth(cm.display) * pos.ch; - } - var lineObj = getLine(cm.doc, pos.line); - var top = heightAtLine(lineObj) + paddingTop(cm.display); - return { - left, - right: left, - top, - bottom: top + lineObj.height - }; - } - function PosWithInfo(line, ch, sticky, outside, xRel) { - var pos = Pos(line, ch, sticky); - pos.xRel = xRel; - if (outside) { - pos.outside = outside; - } - return pos; - } - function coordsChar(cm, x, y) { - var doc = cm.doc; - y += cm.display.viewOffset; - if (y < 0) { - return PosWithInfo(doc.first, 0, null, -1, -1); - } - var lineN = lineAtHeight(doc, y), - last = doc.first + doc.size - 1; - if (lineN > last) { - return PosWithInfo(doc.first + doc.size - 1, getLine(doc, last).text.length, null, 1, 1); - } - if (x < 0) { - x = 0; - } - var lineObj = getLine(doc, lineN); - for (;;) { - var found = coordsCharInner(cm, lineObj, lineN, x, y); - var collapsed = collapsedSpanAround(lineObj, found.ch + (found.xRel > 0 || found.outside > 0 ? 1 : 0)); - if (!collapsed) { - return found; - } - var rangeEnd = collapsed.find(1); - if (rangeEnd.line == lineN) { - return rangeEnd; - } - lineObj = getLine(doc, lineN = rangeEnd.line); - } - } - function wrappedLineExtent(cm, lineObj, preparedMeasure, y) { - y -= widgetTopHeight(lineObj); - var end = lineObj.text.length; - var begin = findFirst(function (ch) { - return measureCharPrepared(cm, preparedMeasure, ch - 1).bottom <= y; - }, end, 0); - end = findFirst(function (ch) { - return measureCharPrepared(cm, preparedMeasure, ch).top > y; - }, begin, end); - return { - begin, - end - }; - } - function wrappedLineExtentChar(cm, lineObj, preparedMeasure, target) { - if (!preparedMeasure) { - preparedMeasure = prepareMeasureForLine(cm, lineObj); - } - var targetTop = intoCoordSystem(cm, lineObj, measureCharPrepared(cm, preparedMeasure, target), "line").top; - return wrappedLineExtent(cm, lineObj, preparedMeasure, targetTop); - } - function boxIsAfter(box, x, y, left) { - return box.bottom <= y ? false : box.top > y ? true : (left ? box.left : box.right) > x; - } - function coordsCharInner(cm, lineObj, lineNo2, x, y) { - y -= heightAtLine(lineObj); - var preparedMeasure = prepareMeasureForLine(cm, lineObj); - var widgetHeight2 = widgetTopHeight(lineObj); - var begin = 0, - end = lineObj.text.length, - ltr = true; - var order = getOrder(lineObj, cm.doc.direction); - if (order) { - var part = (cm.options.lineWrapping ? coordsBidiPartWrapped : coordsBidiPart)(cm, lineObj, lineNo2, preparedMeasure, order, x, y); - ltr = part.level != 1; - begin = ltr ? part.from : part.to - 1; - end = ltr ? part.to : part.from - 1; - } - var chAround = null, - boxAround = null; - var ch = findFirst(function (ch2) { - var box = measureCharPrepared(cm, preparedMeasure, ch2); - box.top += widgetHeight2; - box.bottom += widgetHeight2; - if (!boxIsAfter(box, x, y, false)) { - return false; - } - if (box.top <= y && box.left <= x) { - chAround = ch2; - boxAround = box; - } - return true; - }, begin, end); - var baseX, - sticky, - outside = false; - if (boxAround) { - var atLeft = x - boxAround.left < boxAround.right - x, - atStart = atLeft == ltr; - ch = chAround + (atStart ? 0 : 1); - sticky = atStart ? "after" : "before"; - baseX = atLeft ? boxAround.left : boxAround.right; - } else { - if (!ltr && (ch == end || ch == begin)) { - ch++; - } - sticky = ch == 0 ? "after" : ch == lineObj.text.length ? "before" : measureCharPrepared(cm, preparedMeasure, ch - (ltr ? 1 : 0)).bottom + widgetHeight2 <= y == ltr ? "after" : "before"; - var coords = cursorCoords(cm, Pos(lineNo2, ch, sticky), "line", lineObj, preparedMeasure); - baseX = coords.left; - outside = y < coords.top ? -1 : y >= coords.bottom ? 1 : 0; - } - ch = skipExtendingChars(lineObj.text, ch, 1); - return PosWithInfo(lineNo2, ch, sticky, outside, x - baseX); - } - function coordsBidiPart(cm, lineObj, lineNo2, preparedMeasure, order, x, y) { - var index = findFirst(function (i2) { - var part2 = order[i2], - ltr2 = part2.level != 1; - return boxIsAfter(cursorCoords(cm, Pos(lineNo2, ltr2 ? part2.to : part2.from, ltr2 ? "before" : "after"), "line", lineObj, preparedMeasure), x, y, true); - }, 0, order.length - 1); - var part = order[index]; - if (index > 0) { - var ltr = part.level != 1; - var start = cursorCoords(cm, Pos(lineNo2, ltr ? part.from : part.to, ltr ? "after" : "before"), "line", lineObj, preparedMeasure); - if (boxIsAfter(start, x, y, true) && start.top > y) { - part = order[index - 1]; - } - } - return part; - } - function coordsBidiPartWrapped(cm, lineObj, _lineNo, preparedMeasure, order, x, y) { - var ref = wrappedLineExtent(cm, lineObj, preparedMeasure, y); - var begin = ref.begin; - var end = ref.end; - if (/\s/.test(lineObj.text.charAt(end - 1))) { - end--; - } - var part = null, - closestDist = null; - for (var i2 = 0; i2 < order.length; i2++) { - var p = order[i2]; - if (p.from >= end || p.to <= begin) { - continue; - } - var ltr = p.level != 1; - var endX = measureCharPrepared(cm, preparedMeasure, ltr ? Math.min(end, p.to) - 1 : Math.max(begin, p.from)).right; - var dist = endX < x ? x - endX + 1e9 : endX - x; - if (!part || closestDist > dist) { - part = p; - closestDist = dist; - } - } - if (!part) { - part = order[order.length - 1]; - } - if (part.from < begin) { - part = { - from: begin, - to: part.to, - level: part.level - }; - } - if (part.to > end) { - part = { - from: part.from, - to: end, - level: part.level - }; - } - return part; - } - var measureText; - function textHeight(display) { - if (display.cachedTextHeight != null) { - return display.cachedTextHeight; - } - if (measureText == null) { - measureText = elt("pre", null, "CodeMirror-line-like"); - for (var i2 = 0; i2 < 49; ++i2) { - measureText.appendChild(document.createTextNode("x")); - measureText.appendChild(elt("br")); - } - measureText.appendChild(document.createTextNode("x")); - } - removeChildrenAndAdd(display.measure, measureText); - var height = measureText.offsetHeight / 50; - if (height > 3) { - display.cachedTextHeight = height; - } - removeChildren(display.measure); - return height || 1; - } - function charWidth(display) { - if (display.cachedCharWidth != null) { - return display.cachedCharWidth; - } - var anchor = elt("span", "xxxxxxxxxx"); - var pre = elt("pre", [anchor], "CodeMirror-line-like"); - removeChildrenAndAdd(display.measure, pre); - var rect = anchor.getBoundingClientRect(), - width = (rect.right - rect.left) / 10; - if (width > 2) { - display.cachedCharWidth = width; - } - return width || 10; - } - function getDimensions(cm) { - var d = cm.display, - left = {}, - width = {}; - var gutterLeft = d.gutters.clientLeft; - for (var n = d.gutters.firstChild, i2 = 0; n; n = n.nextSibling, ++i2) { - var id = cm.display.gutterSpecs[i2].className; - left[id] = n.offsetLeft + n.clientLeft + gutterLeft; - width[id] = n.clientWidth; - } - return { - fixedPos: compensateForHScroll(d), - gutterTotalWidth: d.gutters.offsetWidth, - gutterLeft: left, - gutterWidth: width, - wrapperWidth: d.wrapper.clientWidth - }; - } - function compensateForHScroll(display) { - return display.scroller.getBoundingClientRect().left - display.sizer.getBoundingClientRect().left; - } - function estimateHeight(cm) { - var th = textHeight(cm.display), - wrapping = cm.options.lineWrapping; - var perLine = wrapping && Math.max(5, cm.display.scroller.clientWidth / charWidth(cm.display) - 3); - return function (line) { - if (lineIsHidden(cm.doc, line)) { - return 0; - } - var widgetsHeight = 0; - if (line.widgets) { - for (var i2 = 0; i2 < line.widgets.length; i2++) { - if (line.widgets[i2].height) { - widgetsHeight += line.widgets[i2].height; - } - } - } - if (wrapping) { - return widgetsHeight + (Math.ceil(line.text.length / perLine) || 1) * th; - } else { - return widgetsHeight + th; - } - }; - } - function estimateLineHeights(cm) { - var doc = cm.doc, - est = estimateHeight(cm); - doc.iter(function (line) { - var estHeight = est(line); - if (estHeight != line.height) { - updateLineHeight(line, estHeight); - } - }); - } - function posFromMouse(cm, e, liberal, forRect) { - var display = cm.display; - if (!liberal && e_target(e).getAttribute("cm-not-content") == "true") { - return null; - } - var x, - y, - space = display.lineSpace.getBoundingClientRect(); - try { - x = e.clientX - space.left; - y = e.clientY - space.top; - } catch (e$1) { - return null; - } - var coords = coordsChar(cm, x, y), - line; - if (forRect && coords.xRel > 0 && (line = getLine(cm.doc, coords.line).text).length == coords.ch) { - var colDiff = countColumn(line, line.length, cm.options.tabSize) - line.length; - coords = Pos(coords.line, Math.max(0, Math.round((x - paddingH(cm.display).left) / charWidth(cm.display)) - colDiff)); - } - return coords; - } - function findViewIndex(cm, n) { - if (n >= cm.display.viewTo) { - return null; - } - n -= cm.display.viewFrom; - if (n < 0) { - return null; - } - var view = cm.display.view; - for (var i2 = 0; i2 < view.length; i2++) { - n -= view[i2].size; - if (n < 0) { - return i2; - } - } - } - function regChange(cm, from, to, lendiff) { - if (from == null) { - from = cm.doc.first; - } - if (to == null) { - to = cm.doc.first + cm.doc.size; - } - if (!lendiff) { - lendiff = 0; - } - var display = cm.display; - if (lendiff && to < display.viewTo && (display.updateLineNumbers == null || display.updateLineNumbers > from)) { - display.updateLineNumbers = from; - } - cm.curOp.viewChanged = true; - if (from >= display.viewTo) { - if (sawCollapsedSpans && visualLineNo(cm.doc, from) < display.viewTo) { - resetView(cm); - } - } else if (to <= display.viewFrom) { - if (sawCollapsedSpans && visualLineEndNo(cm.doc, to + lendiff) > display.viewFrom) { - resetView(cm); - } else { - display.viewFrom += lendiff; - display.viewTo += lendiff; - } - } else if (from <= display.viewFrom && to >= display.viewTo) { - resetView(cm); - } else if (from <= display.viewFrom) { - var cut = viewCuttingPoint(cm, to, to + lendiff, 1); - if (cut) { - display.view = display.view.slice(cut.index); - display.viewFrom = cut.lineN; - display.viewTo += lendiff; - } else { - resetView(cm); - } - } else if (to >= display.viewTo) { - var cut$1 = viewCuttingPoint(cm, from, from, -1); - if (cut$1) { - display.view = display.view.slice(0, cut$1.index); - display.viewTo = cut$1.lineN; - } else { - resetView(cm); - } - } else { - var cutTop = viewCuttingPoint(cm, from, from, -1); - var cutBot = viewCuttingPoint(cm, to, to + lendiff, 1); - if (cutTop && cutBot) { - display.view = display.view.slice(0, cutTop.index).concat(buildViewArray(cm, cutTop.lineN, cutBot.lineN)).concat(display.view.slice(cutBot.index)); - display.viewTo += lendiff; - } else { - resetView(cm); - } - } - var ext = display.externalMeasured; - if (ext) { - if (to < ext.lineN) { - ext.lineN += lendiff; - } else if (from < ext.lineN + ext.size) { - display.externalMeasured = null; - } - } - } - function regLineChange(cm, line, type) { - cm.curOp.viewChanged = true; - var display = cm.display, - ext = cm.display.externalMeasured; - if (ext && line >= ext.lineN && line < ext.lineN + ext.size) { - display.externalMeasured = null; - } - if (line < display.viewFrom || line >= display.viewTo) { - return; - } - var lineView = display.view[findViewIndex(cm, line)]; - if (lineView.node == null) { - return; - } - var arr = lineView.changes || (lineView.changes = []); - if (indexOf(arr, type) == -1) { - arr.push(type); - } - } - function resetView(cm) { - cm.display.viewFrom = cm.display.viewTo = cm.doc.first; - cm.display.view = []; - cm.display.viewOffset = 0; - } - function viewCuttingPoint(cm, oldN, newN, dir) { - var index = findViewIndex(cm, oldN), - diff, - view = cm.display.view; - if (!sawCollapsedSpans || newN == cm.doc.first + cm.doc.size) { - return { - index, - lineN: newN - }; - } - var n = cm.display.viewFrom; - for (var i2 = 0; i2 < index; i2++) { - n += view[i2].size; - } - if (n != oldN) { - if (dir > 0) { - if (index == view.length - 1) { - return null; - } - diff = n + view[index].size - oldN; - index++; - } else { - diff = n - oldN; - } - oldN += diff; - newN += diff; - } - while (visualLineNo(cm.doc, newN) != newN) { - if (index == (dir < 0 ? 0 : view.length - 1)) { - return null; - } - newN += dir * view[index - (dir < 0 ? 1 : 0)].size; - index += dir; - } - return { - index, - lineN: newN - }; - } - function adjustView(cm, from, to) { - var display = cm.display, - view = display.view; - if (view.length == 0 || from >= display.viewTo || to <= display.viewFrom) { - display.view = buildViewArray(cm, from, to); - display.viewFrom = from; - } else { - if (display.viewFrom > from) { - display.view = buildViewArray(cm, from, display.viewFrom).concat(display.view); - } else if (display.viewFrom < from) { - display.view = display.view.slice(findViewIndex(cm, from)); - } - display.viewFrom = from; - if (display.viewTo < to) { - display.view = display.view.concat(buildViewArray(cm, display.viewTo, to)); - } else if (display.viewTo > to) { - display.view = display.view.slice(0, findViewIndex(cm, to)); - } - } - display.viewTo = to; - } - function countDirtyView(cm) { - var view = cm.display.view, - dirty = 0; - for (var i2 = 0; i2 < view.length; i2++) { - var lineView = view[i2]; - if (!lineView.hidden && (!lineView.node || lineView.changes)) { - ++dirty; - } - } - return dirty; - } - function updateSelection(cm) { - cm.display.input.showSelection(cm.display.input.prepareSelection()); - } - function prepareSelection(cm, primary) { - if (primary === void 0) primary = true; - var doc = cm.doc, - result = {}; - var curFragment = result.cursors = document.createDocumentFragment(); - var selFragment = result.selection = document.createDocumentFragment(); - var customCursor = cm.options.$customCursor; - if (customCursor) { - primary = true; - } - for (var i2 = 0; i2 < doc.sel.ranges.length; i2++) { - if (!primary && i2 == doc.sel.primIndex) { - continue; - } - var range2 = doc.sel.ranges[i2]; - if (range2.from().line >= cm.display.viewTo || range2.to().line < cm.display.viewFrom) { - continue; - } - var collapsed = range2.empty(); - if (customCursor) { - var head = customCursor(cm, range2); - if (head) { - drawSelectionCursor(cm, head, curFragment); - } - } else if (collapsed || cm.options.showCursorWhenSelecting) { - drawSelectionCursor(cm, range2.head, curFragment); - } - if (!collapsed) { - drawSelectionRange(cm, range2, selFragment); - } - } - return result; - } - function drawSelectionCursor(cm, head, output) { - var pos = cursorCoords(cm, head, "div", null, null, !cm.options.singleCursorHeightPerLine); - var cursor = output.appendChild(elt("div", " ", "CodeMirror-cursor")); - cursor.style.left = pos.left + "px"; - cursor.style.top = pos.top + "px"; - cursor.style.height = Math.max(0, pos.bottom - pos.top) * cm.options.cursorHeight + "px"; - if (/\bcm-fat-cursor\b/.test(cm.getWrapperElement().className)) { - var charPos = charCoords(cm, head, "div", null, null); - var width = charPos.right - charPos.left; - cursor.style.width = (width > 0 ? width : cm.defaultCharWidth()) + "px"; - } - if (pos.other) { - var otherCursor = output.appendChild(elt("div", " ", "CodeMirror-cursor CodeMirror-secondarycursor")); - otherCursor.style.display = ""; - otherCursor.style.left = pos.other.left + "px"; - otherCursor.style.top = pos.other.top + "px"; - otherCursor.style.height = (pos.other.bottom - pos.other.top) * 0.85 + "px"; - } - } - function cmpCoords(a, b) { - return a.top - b.top || a.left - b.left; - } - function drawSelectionRange(cm, range2, output) { - var display = cm.display, - doc = cm.doc; - var fragment = document.createDocumentFragment(); - var padding = paddingH(cm.display), - leftSide = padding.left; - var rightSide = Math.max(display.sizerWidth, displayWidth(cm) - display.sizer.offsetLeft) - padding.right; - var docLTR = doc.direction == "ltr"; - function add(left, top, width, bottom) { - if (top < 0) { - top = 0; - } - top = Math.round(top); - bottom = Math.round(bottom); - fragment.appendChild(elt("div", null, "CodeMirror-selected", "position: absolute; left: " + left + "px;\n top: " + top + "px; width: " + (width == null ? rightSide - left : width) + "px;\n height: " + (bottom - top) + "px")); - } - function drawForLine(line, fromArg, toArg) { - var lineObj = getLine(doc, line); - var lineLen = lineObj.text.length; - var start, end; - function coords(ch, bias) { - return charCoords(cm, Pos(line, ch), "div", lineObj, bias); - } - function wrapX(pos, dir, side) { - var extent = wrappedLineExtentChar(cm, lineObj, null, pos); - var prop2 = dir == "ltr" == (side == "after") ? "left" : "right"; - var ch = side == "after" ? extent.begin : extent.end - (/\s/.test(lineObj.text.charAt(extent.end - 1)) ? 2 : 1); - return coords(ch, prop2)[prop2]; - } - var order = getOrder(lineObj, doc.direction); - iterateBidiSections(order, fromArg || 0, toArg == null ? lineLen : toArg, function (from, to, dir, i2) { - var ltr = dir == "ltr"; - var fromPos = coords(from, ltr ? "left" : "right"); - var toPos = coords(to - 1, ltr ? "right" : "left"); - var openStart = fromArg == null && from == 0, - openEnd = toArg == null && to == lineLen; - var first = i2 == 0, - last = !order || i2 == order.length - 1; - if (toPos.top - fromPos.top <= 3) { - var openLeft = (docLTR ? openStart : openEnd) && first; - var openRight = (docLTR ? openEnd : openStart) && last; - var left = openLeft ? leftSide : (ltr ? fromPos : toPos).left; - var right = openRight ? rightSide : (ltr ? toPos : fromPos).right; - add(left, fromPos.top, right - left, fromPos.bottom); - } else { - var topLeft, topRight, botLeft, botRight; - if (ltr) { - topLeft = docLTR && openStart && first ? leftSide : fromPos.left; - topRight = docLTR ? rightSide : wrapX(from, dir, "before"); - botLeft = docLTR ? leftSide : wrapX(to, dir, "after"); - botRight = docLTR && openEnd && last ? rightSide : toPos.right; - } else { - topLeft = !docLTR ? leftSide : wrapX(from, dir, "before"); - topRight = !docLTR && openStart && first ? rightSide : fromPos.right; - botLeft = !docLTR && openEnd && last ? leftSide : toPos.left; - botRight = !docLTR ? rightSide : wrapX(to, dir, "after"); - } - add(topLeft, fromPos.top, topRight - topLeft, fromPos.bottom); - if (fromPos.bottom < toPos.top) { - add(leftSide, fromPos.bottom, null, toPos.top); - } - add(botLeft, toPos.top, botRight - botLeft, toPos.bottom); - } - if (!start || cmpCoords(fromPos, start) < 0) { - start = fromPos; - } - if (cmpCoords(toPos, start) < 0) { - start = toPos; - } - if (!end || cmpCoords(fromPos, end) < 0) { - end = fromPos; - } - if (cmpCoords(toPos, end) < 0) { - end = toPos; - } - }); - return { - start, - end - }; - } - var sFrom = range2.from(), - sTo = range2.to(); - if (sFrom.line == sTo.line) { - drawForLine(sFrom.line, sFrom.ch, sTo.ch); - } else { - var fromLine = getLine(doc, sFrom.line), - toLine = getLine(doc, sTo.line); - var singleVLine = visualLine(fromLine) == visualLine(toLine); - var leftEnd = drawForLine(sFrom.line, sFrom.ch, singleVLine ? fromLine.text.length + 1 : null).end; - var rightStart = drawForLine(sTo.line, singleVLine ? 0 : null, sTo.ch).start; - if (singleVLine) { - if (leftEnd.top < rightStart.top - 2) { - add(leftEnd.right, leftEnd.top, null, leftEnd.bottom); - add(leftSide, rightStart.top, rightStart.left, rightStart.bottom); - } else { - add(leftEnd.right, leftEnd.top, rightStart.left - leftEnd.right, leftEnd.bottom); - } - } - if (leftEnd.bottom < rightStart.top) { - add(leftSide, leftEnd.bottom, null, rightStart.top); - } - } - output.appendChild(fragment); - } - function restartBlink(cm) { - if (!cm.state.focused) { - return; - } - var display = cm.display; - clearInterval(display.blinker); - var on2 = true; - display.cursorDiv.style.visibility = ""; - if (cm.options.cursorBlinkRate > 0) { - display.blinker = setInterval(function () { - if (!cm.hasFocus()) { - onBlur(cm); - } - display.cursorDiv.style.visibility = (on2 = !on2) ? "" : "hidden"; - }, cm.options.cursorBlinkRate); - } else if (cm.options.cursorBlinkRate < 0) { - display.cursorDiv.style.visibility = "hidden"; - } - } - function ensureFocus(cm) { - if (!cm.hasFocus()) { - cm.display.input.focus(); - if (!cm.state.focused) { - onFocus(cm); - } - } - } - function delayBlurEvent(cm) { - cm.state.delayingBlurEvent = true; - setTimeout(function () { - if (cm.state.delayingBlurEvent) { - cm.state.delayingBlurEvent = false; - if (cm.state.focused) { - onBlur(cm); - } - } - }, 100); - } - function onFocus(cm, e) { - if (cm.state.delayingBlurEvent && !cm.state.draggingText) { - cm.state.delayingBlurEvent = false; - } - if (cm.options.readOnly == "nocursor") { - return; - } - if (!cm.state.focused) { - signal(cm, "focus", cm, e); - cm.state.focused = true; - addClass(cm.display.wrapper, "CodeMirror-focused"); - if (!cm.curOp && cm.display.selForContextMenu != cm.doc.sel) { - cm.display.input.reset(); - if (webkit) { - setTimeout(function () { - return cm.display.input.reset(true); - }, 20); - } - } - cm.display.input.receivedFocus(); - } - restartBlink(cm); - } - function onBlur(cm, e) { - if (cm.state.delayingBlurEvent) { - return; - } - if (cm.state.focused) { - signal(cm, "blur", cm, e); - cm.state.focused = false; - rmClass(cm.display.wrapper, "CodeMirror-focused"); - } - clearInterval(cm.display.blinker); - setTimeout(function () { - if (!cm.state.focused) { - cm.display.shift = false; - } - }, 150); - } - function updateHeightsInViewport(cm) { - var display = cm.display; - var prevBottom = display.lineDiv.offsetTop; - var viewTop = Math.max(0, display.scroller.getBoundingClientRect().top); - var oldHeight = display.lineDiv.getBoundingClientRect().top; - var mustScroll = 0; - for (var i2 = 0; i2 < display.view.length; i2++) { - var cur = display.view[i2], - wrapping = cm.options.lineWrapping; - var height = void 0, - width = 0; - if (cur.hidden) { - continue; - } - oldHeight += cur.line.height; - if (ie && ie_version < 8) { - var bot = cur.node.offsetTop + cur.node.offsetHeight; - height = bot - prevBottom; - prevBottom = bot; - } else { - var box = cur.node.getBoundingClientRect(); - height = box.bottom - box.top; - if (!wrapping && cur.text.firstChild) { - width = cur.text.firstChild.getBoundingClientRect().right - box.left - 1; - } - } - var diff = cur.line.height - height; - if (diff > 5e-3 || diff < -5e-3) { - if (oldHeight < viewTop) { - mustScroll -= diff; - } - updateLineHeight(cur.line, height); - updateWidgetHeight(cur.line); - if (cur.rest) { - for (var j = 0; j < cur.rest.length; j++) { - updateWidgetHeight(cur.rest[j]); - } - } - } - if (width > cm.display.sizerWidth) { - var chWidth = Math.ceil(width / charWidth(cm.display)); - if (chWidth > cm.display.maxLineLength) { - cm.display.maxLineLength = chWidth; - cm.display.maxLine = cur.line; - cm.display.maxLineChanged = true; - } - } - } - if (Math.abs(mustScroll) > 2) { - display.scroller.scrollTop += mustScroll; - } - } - function updateWidgetHeight(line) { - if (line.widgets) { - for (var i2 = 0; i2 < line.widgets.length; ++i2) { - var w = line.widgets[i2], - parent = w.node.parentNode; - if (parent) { - w.height = parent.offsetHeight; - } - } - } - } - function visibleLines(display, doc, viewport) { - var top = viewport && viewport.top != null ? Math.max(0, viewport.top) : display.scroller.scrollTop; - top = Math.floor(top - paddingTop(display)); - var bottom = viewport && viewport.bottom != null ? viewport.bottom : top + display.wrapper.clientHeight; - var from = lineAtHeight(doc, top), - to = lineAtHeight(doc, bottom); - if (viewport && viewport.ensure) { - var ensureFrom = viewport.ensure.from.line, - ensureTo = viewport.ensure.to.line; - if (ensureFrom < from) { - from = ensureFrom; - to = lineAtHeight(doc, heightAtLine(getLine(doc, ensureFrom)) + display.wrapper.clientHeight); - } else if (Math.min(ensureTo, doc.lastLine()) >= to) { - from = lineAtHeight(doc, heightAtLine(getLine(doc, ensureTo)) - display.wrapper.clientHeight); - to = ensureTo; - } - } - return { - from, - to: Math.max(to, from + 1) - }; - } - function maybeScrollWindow(cm, rect) { - if (signalDOMEvent(cm, "scrollCursorIntoView")) { - return; - } - var display = cm.display, - box = display.sizer.getBoundingClientRect(), - doScroll = null; - if (rect.top + box.top < 0) { - doScroll = true; - } else if (rect.bottom + box.top > (window.innerHeight || document.documentElement.clientHeight)) { - doScroll = false; - } - if (doScroll != null && !phantom) { - var scrollNode = elt("div", "​", null, "position: absolute;\n top: " + (rect.top - display.viewOffset - paddingTop(cm.display)) + "px;\n height: " + (rect.bottom - rect.top + scrollGap(cm) + display.barHeight) + "px;\n left: " + rect.left + "px; width: " + Math.max(2, rect.right - rect.left) + "px;"); - cm.display.lineSpace.appendChild(scrollNode); - scrollNode.scrollIntoView(doScroll); - cm.display.lineSpace.removeChild(scrollNode); - } - } - function scrollPosIntoView(cm, pos, end, margin) { - if (margin == null) { - margin = 0; - } - var rect; - if (!cm.options.lineWrapping && pos == end) { - end = pos.sticky == "before" ? Pos(pos.line, pos.ch + 1, "before") : pos; - pos = pos.ch ? Pos(pos.line, pos.sticky == "before" ? pos.ch - 1 : pos.ch, "after") : pos; - } - for (var limit = 0; limit < 5; limit++) { - var changed = false; - var coords = cursorCoords(cm, pos); - var endCoords = !end || end == pos ? coords : cursorCoords(cm, end); - rect = { - left: Math.min(coords.left, endCoords.left), - top: Math.min(coords.top, endCoords.top) - margin, - right: Math.max(coords.left, endCoords.left), - bottom: Math.max(coords.bottom, endCoords.bottom) + margin - }; - var scrollPos = calculateScrollPos(cm, rect); - var startTop = cm.doc.scrollTop, - startLeft = cm.doc.scrollLeft; - if (scrollPos.scrollTop != null) { - updateScrollTop(cm, scrollPos.scrollTop); - if (Math.abs(cm.doc.scrollTop - startTop) > 1) { - changed = true; - } - } - if (scrollPos.scrollLeft != null) { - setScrollLeft(cm, scrollPos.scrollLeft); - if (Math.abs(cm.doc.scrollLeft - startLeft) > 1) { - changed = true; - } - } - if (!changed) { - break; - } - } - return rect; - } - function scrollIntoView(cm, rect) { - var scrollPos = calculateScrollPos(cm, rect); - if (scrollPos.scrollTop != null) { - updateScrollTop(cm, scrollPos.scrollTop); - } - if (scrollPos.scrollLeft != null) { - setScrollLeft(cm, scrollPos.scrollLeft); - } - } - function calculateScrollPos(cm, rect) { - var display = cm.display, - snapMargin = textHeight(cm.display); - if (rect.top < 0) { - rect.top = 0; - } - var screentop = cm.curOp && cm.curOp.scrollTop != null ? cm.curOp.scrollTop : display.scroller.scrollTop; - var screen2 = displayHeight(cm), - result = {}; - if (rect.bottom - rect.top > screen2) { - rect.bottom = rect.top + screen2; - } - var docBottom = cm.doc.height + paddingVert(display); - var atTop = rect.top < snapMargin, - atBottom = rect.bottom > docBottom - snapMargin; - if (rect.top < screentop) { - result.scrollTop = atTop ? 0 : rect.top; - } else if (rect.bottom > screentop + screen2) { - var newTop = Math.min(rect.top, (atBottom ? docBottom : rect.bottom) - screen2); - if (newTop != screentop) { - result.scrollTop = newTop; - } - } - var gutterSpace = cm.options.fixedGutter ? 0 : display.gutters.offsetWidth; - var screenleft = cm.curOp && cm.curOp.scrollLeft != null ? cm.curOp.scrollLeft : display.scroller.scrollLeft - gutterSpace; - var screenw = displayWidth(cm) - display.gutters.offsetWidth; - var tooWide = rect.right - rect.left > screenw; - if (tooWide) { - rect.right = rect.left + screenw; - } - if (rect.left < 10) { - result.scrollLeft = 0; - } else if (rect.left < screenleft) { - result.scrollLeft = Math.max(0, rect.left + gutterSpace - (tooWide ? 0 : 10)); - } else if (rect.right > screenw + screenleft - 3) { - result.scrollLeft = rect.right + (tooWide ? 0 : 10) - screenw; - } - return result; - } - function addToScrollTop(cm, top) { - if (top == null) { - return; - } - resolveScrollToPos(cm); - cm.curOp.scrollTop = (cm.curOp.scrollTop == null ? cm.doc.scrollTop : cm.curOp.scrollTop) + top; - } - function ensureCursorVisible(cm) { - resolveScrollToPos(cm); - var cur = cm.getCursor(); - cm.curOp.scrollToPos = { - from: cur, - to: cur, - margin: cm.options.cursorScrollMargin - }; - } - function scrollToCoords(cm, x, y) { - if (x != null || y != null) { - resolveScrollToPos(cm); - } - if (x != null) { - cm.curOp.scrollLeft = x; - } - if (y != null) { - cm.curOp.scrollTop = y; - } - } - function scrollToRange(cm, range2) { - resolveScrollToPos(cm); - cm.curOp.scrollToPos = range2; - } - function resolveScrollToPos(cm) { - var range2 = cm.curOp.scrollToPos; - if (range2) { - cm.curOp.scrollToPos = null; - var from = estimateCoords(cm, range2.from), - to = estimateCoords(cm, range2.to); - scrollToCoordsRange(cm, from, to, range2.margin); - } - } - function scrollToCoordsRange(cm, from, to, margin) { - var sPos = calculateScrollPos(cm, { - left: Math.min(from.left, to.left), - top: Math.min(from.top, to.top) - margin, - right: Math.max(from.right, to.right), - bottom: Math.max(from.bottom, to.bottom) + margin - }); - scrollToCoords(cm, sPos.scrollLeft, sPos.scrollTop); - } - function updateScrollTop(cm, val) { - if (Math.abs(cm.doc.scrollTop - val) < 2) { - return; - } - if (!gecko) { - updateDisplaySimple(cm, { - top: val - }); - } - setScrollTop(cm, val, true); - if (gecko) { - updateDisplaySimple(cm); - } - startWorker(cm, 100); - } - function setScrollTop(cm, val, forceScroll) { - val = Math.max(0, Math.min(cm.display.scroller.scrollHeight - cm.display.scroller.clientHeight, val)); - if (cm.display.scroller.scrollTop == val && !forceScroll) { - return; - } - cm.doc.scrollTop = val; - cm.display.scrollbars.setScrollTop(val); - if (cm.display.scroller.scrollTop != val) { - cm.display.scroller.scrollTop = val; - } - } - function setScrollLeft(cm, val, isScroller, forceScroll) { - val = Math.max(0, Math.min(val, cm.display.scroller.scrollWidth - cm.display.scroller.clientWidth)); - if ((isScroller ? val == cm.doc.scrollLeft : Math.abs(cm.doc.scrollLeft - val) < 2) && !forceScroll) { - return; - } - cm.doc.scrollLeft = val; - alignHorizontally(cm); - if (cm.display.scroller.scrollLeft != val) { - cm.display.scroller.scrollLeft = val; - } - cm.display.scrollbars.setScrollLeft(val); - } - function measureForScrollbars(cm) { - var d = cm.display, - gutterW = d.gutters.offsetWidth; - var docH = Math.round(cm.doc.height + paddingVert(cm.display)); - return { - clientHeight: d.scroller.clientHeight, - viewHeight: d.wrapper.clientHeight, - scrollWidth: d.scroller.scrollWidth, - clientWidth: d.scroller.clientWidth, - viewWidth: d.wrapper.clientWidth, - barLeft: cm.options.fixedGutter ? gutterW : 0, - docHeight: docH, - scrollHeight: docH + scrollGap(cm) + d.barHeight, - nativeBarWidth: d.nativeBarWidth, - gutterWidth: gutterW - }; - } - var NativeScrollbars = function (place, scroll, cm) { - this.cm = cm; - var vert = this.vert = elt("div", [elt("div", null, null, "min-width: 1px")], "CodeMirror-vscrollbar"); - var horiz = this.horiz = elt("div", [elt("div", null, null, "height: 100%; min-height: 1px")], "CodeMirror-hscrollbar"); - vert.tabIndex = horiz.tabIndex = -1; - place(vert); - place(horiz); - on(vert, "scroll", function () { - if (vert.clientHeight) { - scroll(vert.scrollTop, "vertical"); - } - }); - on(horiz, "scroll", function () { - if (horiz.clientWidth) { - scroll(horiz.scrollLeft, "horizontal"); - } - }); - this.checkedZeroWidth = false; - if (ie && ie_version < 8) { - this.horiz.style.minHeight = this.vert.style.minWidth = "18px"; - } - }; - NativeScrollbars.prototype.update = function (measure) { - var needsH = measure.scrollWidth > measure.clientWidth + 1; - var needsV = measure.scrollHeight > measure.clientHeight + 1; - var sWidth = measure.nativeBarWidth; - if (needsV) { - this.vert.style.display = "block"; - this.vert.style.bottom = needsH ? sWidth + "px" : "0"; - var totalHeight = measure.viewHeight - (needsH ? sWidth : 0); - this.vert.firstChild.style.height = Math.max(0, measure.scrollHeight - measure.clientHeight + totalHeight) + "px"; - } else { - this.vert.scrollTop = 0; - this.vert.style.display = ""; - this.vert.firstChild.style.height = "0"; - } - if (needsH) { - this.horiz.style.display = "block"; - this.horiz.style.right = needsV ? sWidth + "px" : "0"; - this.horiz.style.left = measure.barLeft + "px"; - var totalWidth = measure.viewWidth - measure.barLeft - (needsV ? sWidth : 0); - this.horiz.firstChild.style.width = Math.max(0, measure.scrollWidth - measure.clientWidth + totalWidth) + "px"; - } else { - this.horiz.style.display = ""; - this.horiz.firstChild.style.width = "0"; - } - if (!this.checkedZeroWidth && measure.clientHeight > 0) { - if (sWidth == 0) { - this.zeroWidthHack(); - } - this.checkedZeroWidth = true; - } - return { - right: needsV ? sWidth : 0, - bottom: needsH ? sWidth : 0 - }; - }; - NativeScrollbars.prototype.setScrollLeft = function (pos) { - if (this.horiz.scrollLeft != pos) { - this.horiz.scrollLeft = pos; - } - if (this.disableHoriz) { - this.enableZeroWidthBar(this.horiz, this.disableHoriz, "horiz"); - } - }; - NativeScrollbars.prototype.setScrollTop = function (pos) { - if (this.vert.scrollTop != pos) { - this.vert.scrollTop = pos; - } - if (this.disableVert) { - this.enableZeroWidthBar(this.vert, this.disableVert, "vert"); - } - }; - NativeScrollbars.prototype.zeroWidthHack = function () { - var w = mac && !mac_geMountainLion ? "12px" : "18px"; - this.horiz.style.height = this.vert.style.width = w; - this.horiz.style.pointerEvents = this.vert.style.pointerEvents = "none"; - this.disableHoriz = new Delayed(); - this.disableVert = new Delayed(); - }; - NativeScrollbars.prototype.enableZeroWidthBar = function (bar, delay, type) { - bar.style.pointerEvents = "auto"; - function maybeDisable() { - var box = bar.getBoundingClientRect(); - var elt2 = type == "vert" ? document.elementFromPoint(box.right - 1, (box.top + box.bottom) / 2) : document.elementFromPoint((box.right + box.left) / 2, box.bottom - 1); - if (elt2 != bar) { - bar.style.pointerEvents = "none"; - } else { - delay.set(1e3, maybeDisable); - } - } - delay.set(1e3, maybeDisable); - }; - NativeScrollbars.prototype.clear = function () { - var parent = this.horiz.parentNode; - parent.removeChild(this.horiz); - parent.removeChild(this.vert); - }; - var NullScrollbars = function () {}; - NullScrollbars.prototype.update = function () { - return { - bottom: 0, - right: 0 - }; - }; - NullScrollbars.prototype.setScrollLeft = function () {}; - NullScrollbars.prototype.setScrollTop = function () {}; - NullScrollbars.prototype.clear = function () {}; - function updateScrollbars(cm, measure) { - if (!measure) { - measure = measureForScrollbars(cm); - } - var startWidth = cm.display.barWidth, - startHeight = cm.display.barHeight; - updateScrollbarsInner(cm, measure); - for (var i2 = 0; i2 < 4 && startWidth != cm.display.barWidth || startHeight != cm.display.barHeight; i2++) { - if (startWidth != cm.display.barWidth && cm.options.lineWrapping) { - updateHeightsInViewport(cm); - } - updateScrollbarsInner(cm, measureForScrollbars(cm)); - startWidth = cm.display.barWidth; - startHeight = cm.display.barHeight; - } - } - function updateScrollbarsInner(cm, measure) { - var d = cm.display; - var sizes = d.scrollbars.update(measure); - d.sizer.style.paddingRight = (d.barWidth = sizes.right) + "px"; - d.sizer.style.paddingBottom = (d.barHeight = sizes.bottom) + "px"; - d.heightForcer.style.borderBottom = sizes.bottom + "px solid transparent"; - if (sizes.right && sizes.bottom) { - d.scrollbarFiller.style.display = "block"; - d.scrollbarFiller.style.height = sizes.bottom + "px"; - d.scrollbarFiller.style.width = sizes.right + "px"; - } else { - d.scrollbarFiller.style.display = ""; - } - if (sizes.bottom && cm.options.coverGutterNextToScrollbar && cm.options.fixedGutter) { - d.gutterFiller.style.display = "block"; - d.gutterFiller.style.height = sizes.bottom + "px"; - d.gutterFiller.style.width = measure.gutterWidth + "px"; - } else { - d.gutterFiller.style.display = ""; - } - } - var scrollbarModel = { - "native": NativeScrollbars, - "null": NullScrollbars - }; - function initScrollbars(cm) { - if (cm.display.scrollbars) { - cm.display.scrollbars.clear(); - if (cm.display.scrollbars.addClass) { - rmClass(cm.display.wrapper, cm.display.scrollbars.addClass); - } - } - cm.display.scrollbars = new scrollbarModel[cm.options.scrollbarStyle](function (node) { - cm.display.wrapper.insertBefore(node, cm.display.scrollbarFiller); - on(node, "mousedown", function () { - if (cm.state.focused) { - setTimeout(function () { - return cm.display.input.focus(); - }, 0); - } - }); - node.setAttribute("cm-not-content", "true"); - }, function (pos, axis) { - if (axis == "horizontal") { - setScrollLeft(cm, pos); - } else { - updateScrollTop(cm, pos); - } - }, cm); - if (cm.display.scrollbars.addClass) { - addClass(cm.display.wrapper, cm.display.scrollbars.addClass); - } - } - var nextOpId = 0; - function startOperation(cm) { - cm.curOp = { - cm, - viewChanged: false, - // Flag that indicates that lines might need to be redrawn - startHeight: cm.doc.height, - // Used to detect need to update scrollbar - forceUpdate: false, - // Used to force a redraw - updateInput: 0, - // Whether to reset the input textarea - typing: false, - // Whether this reset should be careful to leave existing text (for compositing) - changeObjs: null, - // Accumulated changes, for firing change events - cursorActivityHandlers: null, - // Set of handlers to fire cursorActivity on - cursorActivityCalled: 0, - // Tracks which cursorActivity handlers have been called already - selectionChanged: false, - // Whether the selection needs to be redrawn - updateMaxLine: false, - // Set when the widest line needs to be determined anew - scrollLeft: null, - scrollTop: null, - // Intermediate scroll position, not pushed to DOM yet - scrollToPos: null, - // Used to scroll to a specific position - focus: false, - id: ++nextOpId, - // Unique ID - markArrays: null - // Used by addMarkedSpan - }; - pushOperation(cm.curOp); - } - function endOperation(cm) { - var op = cm.curOp; - if (op) { - finishOperation(op, function (group) { - for (var i2 = 0; i2 < group.ops.length; i2++) { - group.ops[i2].cm.curOp = null; - } - endOperations(group); - }); - } - } - function endOperations(group) { - var ops = group.ops; - for (var i2 = 0; i2 < ops.length; i2++) { - endOperation_R1(ops[i2]); - } - for (var i$12 = 0; i$12 < ops.length; i$12++) { - endOperation_W1(ops[i$12]); - } - for (var i$22 = 0; i$22 < ops.length; i$22++) { - endOperation_R2(ops[i$22]); - } - for (var i$3 = 0; i$3 < ops.length; i$3++) { - endOperation_W2(ops[i$3]); - } - for (var i$4 = 0; i$4 < ops.length; i$4++) { - endOperation_finish(ops[i$4]); - } - } - function endOperation_R1(op) { - var cm = op.cm, - display = cm.display; - maybeClipScrollbars(cm); - if (op.updateMaxLine) { - findMaxLine(cm); - } - op.mustUpdate = op.viewChanged || op.forceUpdate || op.scrollTop != null || op.scrollToPos && (op.scrollToPos.from.line < display.viewFrom || op.scrollToPos.to.line >= display.viewTo) || display.maxLineChanged && cm.options.lineWrapping; - op.update = op.mustUpdate && new DisplayUpdate(cm, op.mustUpdate && { - top: op.scrollTop, - ensure: op.scrollToPos - }, op.forceUpdate); - } - function endOperation_W1(op) { - op.updatedDisplay = op.mustUpdate && updateDisplayIfNeeded(op.cm, op.update); - } - function endOperation_R2(op) { - var cm = op.cm, - display = cm.display; - if (op.updatedDisplay) { - updateHeightsInViewport(cm); - } - op.barMeasure = measureForScrollbars(cm); - if (display.maxLineChanged && !cm.options.lineWrapping) { - op.adjustWidthTo = measureChar(cm, display.maxLine, display.maxLine.text.length).left + 3; - cm.display.sizerWidth = op.adjustWidthTo; - op.barMeasure.scrollWidth = Math.max(display.scroller.clientWidth, display.sizer.offsetLeft + op.adjustWidthTo + scrollGap(cm) + cm.display.barWidth); - op.maxScrollLeft = Math.max(0, display.sizer.offsetLeft + op.adjustWidthTo - displayWidth(cm)); - } - if (op.updatedDisplay || op.selectionChanged) { - op.preparedSelection = display.input.prepareSelection(); - } - } - function endOperation_W2(op) { - var cm = op.cm; - if (op.adjustWidthTo != null) { - cm.display.sizer.style.minWidth = op.adjustWidthTo + "px"; - if (op.maxScrollLeft < cm.doc.scrollLeft) { - setScrollLeft(cm, Math.min(cm.display.scroller.scrollLeft, op.maxScrollLeft), true); - } - cm.display.maxLineChanged = false; - } - var takeFocus = op.focus && op.focus == activeElt(); - if (op.preparedSelection) { - cm.display.input.showSelection(op.preparedSelection, takeFocus); - } - if (op.updatedDisplay || op.startHeight != cm.doc.height) { - updateScrollbars(cm, op.barMeasure); - } - if (op.updatedDisplay) { - setDocumentHeight(cm, op.barMeasure); - } - if (op.selectionChanged) { - restartBlink(cm); - } - if (cm.state.focused && op.updateInput) { - cm.display.input.reset(op.typing); - } - if (takeFocus) { - ensureFocus(op.cm); - } - } - function endOperation_finish(op) { - var cm = op.cm, - display = cm.display, - doc = cm.doc; - if (op.updatedDisplay) { - postUpdateDisplay(cm, op.update); - } - if (display.wheelStartX != null && (op.scrollTop != null || op.scrollLeft != null || op.scrollToPos)) { - display.wheelStartX = display.wheelStartY = null; - } - if (op.scrollTop != null) { - setScrollTop(cm, op.scrollTop, op.forceScroll); - } - if (op.scrollLeft != null) { - setScrollLeft(cm, op.scrollLeft, true, true); - } - if (op.scrollToPos) { - var rect = scrollPosIntoView(cm, clipPos(doc, op.scrollToPos.from), clipPos(doc, op.scrollToPos.to), op.scrollToPos.margin); - maybeScrollWindow(cm, rect); - } - var hidden = op.maybeHiddenMarkers, - unhidden = op.maybeUnhiddenMarkers; - if (hidden) { - for (var i2 = 0; i2 < hidden.length; ++i2) { - if (!hidden[i2].lines.length) { - signal(hidden[i2], "hide"); - } - } - } - if (unhidden) { - for (var i$12 = 0; i$12 < unhidden.length; ++i$12) { - if (unhidden[i$12].lines.length) { - signal(unhidden[i$12], "unhide"); - } - } - } - if (display.wrapper.offsetHeight) { - doc.scrollTop = cm.display.scroller.scrollTop; - } - if (op.changeObjs) { - signal(cm, "changes", cm, op.changeObjs); - } - if (op.update) { - op.update.finish(); - } - } - function runInOp(cm, f) { - if (cm.curOp) { - return f(); - } - startOperation(cm); - try { - return f(); - } finally { - endOperation(cm); - } - } - function operation(cm, f) { - return function () { - if (cm.curOp) { - return f.apply(cm, arguments); - } - startOperation(cm); - try { - return f.apply(cm, arguments); - } finally { - endOperation(cm); - } - }; - } - function methodOp(f) { - return function () { - if (this.curOp) { - return f.apply(this, arguments); - } - startOperation(this); - try { - return f.apply(this, arguments); - } finally { - endOperation(this); - } - }; - } - function docMethodOp(f) { - return function () { - var cm = this.cm; - if (!cm || cm.curOp) { - return f.apply(this, arguments); - } - startOperation(cm); - try { - return f.apply(this, arguments); - } finally { - endOperation(cm); - } - }; - } - function startWorker(cm, time) { - if (cm.doc.highlightFrontier < cm.display.viewTo) { - cm.state.highlight.set(time, bind(highlightWorker, cm)); - } - } - function highlightWorker(cm) { - var doc = cm.doc; - if (doc.highlightFrontier >= cm.display.viewTo) { - return; - } - var end = + /* @__PURE__ */new Date() + cm.options.workTime; - var context = getContextBefore(cm, doc.highlightFrontier); - var changedLines = []; - doc.iter(context.line, Math.min(doc.first + doc.size, cm.display.viewTo + 500), function (line) { - if (context.line >= cm.display.viewFrom) { - var oldStyles = line.styles; - var resetState = line.text.length > cm.options.maxHighlightLength ? copyState(doc.mode, context.state) : null; - var highlighted = highlightLine(cm, line, context, true); - if (resetState) { - context.state = resetState; - } - line.styles = highlighted.styles; - var oldCls = line.styleClasses, - newCls = highlighted.classes; - if (newCls) { - line.styleClasses = newCls; - } else if (oldCls) { - line.styleClasses = null; - } - var ischange = !oldStyles || oldStyles.length != line.styles.length || oldCls != newCls && (!oldCls || !newCls || oldCls.bgClass != newCls.bgClass || oldCls.textClass != newCls.textClass); - for (var i2 = 0; !ischange && i2 < oldStyles.length; ++i2) { - ischange = oldStyles[i2] != line.styles[i2]; - } - if (ischange) { - changedLines.push(context.line); - } - line.stateAfter = context.save(); - context.nextLine(); - } else { - if (line.text.length <= cm.options.maxHighlightLength) { - processLine(cm, line.text, context); - } - line.stateAfter = context.line % 5 == 0 ? context.save() : null; - context.nextLine(); - } - if (+ /* @__PURE__ */new Date() > end) { - startWorker(cm, cm.options.workDelay); - return true; - } - }); - doc.highlightFrontier = context.line; - doc.modeFrontier = Math.max(doc.modeFrontier, context.line); - if (changedLines.length) { - runInOp(cm, function () { - for (var i2 = 0; i2 < changedLines.length; i2++) { - regLineChange(cm, changedLines[i2], "text"); - } - }); - } - } - var DisplayUpdate = function (cm, viewport, force) { - var display = cm.display; - this.viewport = viewport; - this.visible = visibleLines(display, cm.doc, viewport); - this.editorIsHidden = !display.wrapper.offsetWidth; - this.wrapperHeight = display.wrapper.clientHeight; - this.wrapperWidth = display.wrapper.clientWidth; - this.oldDisplayWidth = displayWidth(cm); - this.force = force; - this.dims = getDimensions(cm); - this.events = []; - }; - DisplayUpdate.prototype.signal = function (emitter, type) { - if (hasHandler(emitter, type)) { - this.events.push(arguments); - } - }; - DisplayUpdate.prototype.finish = function () { - for (var i2 = 0; i2 < this.events.length; i2++) { - signal.apply(null, this.events[i2]); - } - }; - function maybeClipScrollbars(cm) { - var display = cm.display; - if (!display.scrollbarsClipped && display.scroller.offsetWidth) { - display.nativeBarWidth = display.scroller.offsetWidth - display.scroller.clientWidth; - display.heightForcer.style.height = scrollGap(cm) + "px"; - display.sizer.style.marginBottom = -display.nativeBarWidth + "px"; - display.sizer.style.borderRightWidth = scrollGap(cm) + "px"; - display.scrollbarsClipped = true; - } - } - function selectionSnapshot(cm) { - if (cm.hasFocus()) { - return null; - } - var active = activeElt(); - if (!active || !contains(cm.display.lineDiv, active)) { - return null; - } - var result = { - activeElt: active - }; - if (window.getSelection) { - var sel = window.getSelection(); - if (sel.anchorNode && sel.extend && contains(cm.display.lineDiv, sel.anchorNode)) { - result.anchorNode = sel.anchorNode; - result.anchorOffset = sel.anchorOffset; - result.focusNode = sel.focusNode; - result.focusOffset = sel.focusOffset; - } - } - return result; - } - function restoreSelection(snapshot) { - if (!snapshot || !snapshot.activeElt || snapshot.activeElt == activeElt()) { - return; - } - snapshot.activeElt.focus(); - if (!/^(INPUT|TEXTAREA)$/.test(snapshot.activeElt.nodeName) && snapshot.anchorNode && contains(document.body, snapshot.anchorNode) && contains(document.body, snapshot.focusNode)) { - var sel = window.getSelection(), - range2 = document.createRange(); - range2.setEnd(snapshot.anchorNode, snapshot.anchorOffset); - range2.collapse(false); - sel.removeAllRanges(); - sel.addRange(range2); - sel.extend(snapshot.focusNode, snapshot.focusOffset); - } - } - function updateDisplayIfNeeded(cm, update) { - var display = cm.display, - doc = cm.doc; - if (update.editorIsHidden) { - resetView(cm); - return false; - } - if (!update.force && update.visible.from >= display.viewFrom && update.visible.to <= display.viewTo && (display.updateLineNumbers == null || display.updateLineNumbers >= display.viewTo) && display.renderedView == display.view && countDirtyView(cm) == 0) { - return false; - } - if (maybeUpdateLineNumberWidth(cm)) { - resetView(cm); - update.dims = getDimensions(cm); - } - var end = doc.first + doc.size; - var from = Math.max(update.visible.from - cm.options.viewportMargin, doc.first); - var to = Math.min(end, update.visible.to + cm.options.viewportMargin); - if (display.viewFrom < from && from - display.viewFrom < 20) { - from = Math.max(doc.first, display.viewFrom); - } - if (display.viewTo > to && display.viewTo - to < 20) { - to = Math.min(end, display.viewTo); - } - if (sawCollapsedSpans) { - from = visualLineNo(cm.doc, from); - to = visualLineEndNo(cm.doc, to); - } - var different = from != display.viewFrom || to != display.viewTo || display.lastWrapHeight != update.wrapperHeight || display.lastWrapWidth != update.wrapperWidth; - adjustView(cm, from, to); - display.viewOffset = heightAtLine(getLine(cm.doc, display.viewFrom)); - cm.display.mover.style.top = display.viewOffset + "px"; - var toUpdate = countDirtyView(cm); - if (!different && toUpdate == 0 && !update.force && display.renderedView == display.view && (display.updateLineNumbers == null || display.updateLineNumbers >= display.viewTo)) { - return false; - } - var selSnapshot = selectionSnapshot(cm); - if (toUpdate > 4) { - display.lineDiv.style.display = "none"; - } - patchDisplay(cm, display.updateLineNumbers, update.dims); - if (toUpdate > 4) { - display.lineDiv.style.display = ""; - } - display.renderedView = display.view; - restoreSelection(selSnapshot); - removeChildren(display.cursorDiv); - removeChildren(display.selectionDiv); - display.gutters.style.height = display.sizer.style.minHeight = 0; - if (different) { - display.lastWrapHeight = update.wrapperHeight; - display.lastWrapWidth = update.wrapperWidth; - startWorker(cm, 400); - } - display.updateLineNumbers = null; - return true; - } - function postUpdateDisplay(cm, update) { - var viewport = update.viewport; - for (var first = true;; first = false) { - if (!first || !cm.options.lineWrapping || update.oldDisplayWidth == displayWidth(cm)) { - if (viewport && viewport.top != null) { - viewport = { - top: Math.min(cm.doc.height + paddingVert(cm.display) - displayHeight(cm), viewport.top) - }; - } - update.visible = visibleLines(cm.display, cm.doc, viewport); - if (update.visible.from >= cm.display.viewFrom && update.visible.to <= cm.display.viewTo) { - break; - } - } else if (first) { - update.visible = visibleLines(cm.display, cm.doc, viewport); - } - if (!updateDisplayIfNeeded(cm, update)) { - break; - } - updateHeightsInViewport(cm); - var barMeasure = measureForScrollbars(cm); - updateSelection(cm); - updateScrollbars(cm, barMeasure); - setDocumentHeight(cm, barMeasure); - update.force = false; - } - update.signal(cm, "update", cm); - if (cm.display.viewFrom != cm.display.reportedViewFrom || cm.display.viewTo != cm.display.reportedViewTo) { - update.signal(cm, "viewportChange", cm, cm.display.viewFrom, cm.display.viewTo); - cm.display.reportedViewFrom = cm.display.viewFrom; - cm.display.reportedViewTo = cm.display.viewTo; - } - } - function updateDisplaySimple(cm, viewport) { - var update = new DisplayUpdate(cm, viewport); - if (updateDisplayIfNeeded(cm, update)) { - updateHeightsInViewport(cm); - postUpdateDisplay(cm, update); - var barMeasure = measureForScrollbars(cm); - updateSelection(cm); - updateScrollbars(cm, barMeasure); - setDocumentHeight(cm, barMeasure); - update.finish(); - } - } - function patchDisplay(cm, updateNumbersFrom, dims) { - var display = cm.display, - lineNumbers = cm.options.lineNumbers; - var container = display.lineDiv, - cur = container.firstChild; - function rm(node2) { - var next = node2.nextSibling; - if (webkit && mac && cm.display.currentWheelTarget == node2) { - node2.style.display = "none"; - } else { - node2.parentNode.removeChild(node2); - } - return next; - } - var view = display.view, - lineN = display.viewFrom; - for (var i2 = 0; i2 < view.length; i2++) { - var lineView = view[i2]; - if (lineView.hidden) ;else if (!lineView.node || lineView.node.parentNode != container) { - var node = buildLineElement(cm, lineView, lineN, dims); - container.insertBefore(node, cur); - } else { - while (cur != lineView.node) { - cur = rm(cur); - } - var updateNumber = lineNumbers && updateNumbersFrom != null && updateNumbersFrom <= lineN && lineView.lineNumber; - if (lineView.changes) { - if (indexOf(lineView.changes, "gutter") > -1) { - updateNumber = false; - } - updateLineForChanges(cm, lineView, lineN, dims); - } - if (updateNumber) { - removeChildren(lineView.lineNumber); - lineView.lineNumber.appendChild(document.createTextNode(lineNumberFor(cm.options, lineN))); - } - cur = lineView.node.nextSibling; - } - lineN += lineView.size; - } - while (cur) { - cur = rm(cur); - } - } - function updateGutterSpace(display) { - var width = display.gutters.offsetWidth; - display.sizer.style.marginLeft = width + "px"; - signalLater(display, "gutterChanged", display); - } - function setDocumentHeight(cm, measure) { - cm.display.sizer.style.minHeight = measure.docHeight + "px"; - cm.display.heightForcer.style.top = measure.docHeight + "px"; - cm.display.gutters.style.height = measure.docHeight + cm.display.barHeight + scrollGap(cm) + "px"; - } - function alignHorizontally(cm) { - var display = cm.display, - view = display.view; - if (!display.alignWidgets && (!display.gutters.firstChild || !cm.options.fixedGutter)) { - return; - } - var comp = compensateForHScroll(display) - display.scroller.scrollLeft + cm.doc.scrollLeft; - var gutterW = display.gutters.offsetWidth, - left = comp + "px"; - for (var i2 = 0; i2 < view.length; i2++) { - if (!view[i2].hidden) { - if (cm.options.fixedGutter) { - if (view[i2].gutter) { - view[i2].gutter.style.left = left; - } - if (view[i2].gutterBackground) { - view[i2].gutterBackground.style.left = left; - } - } - var align = view[i2].alignable; - if (align) { - for (var j = 0; j < align.length; j++) { - align[j].style.left = left; - } - } - } - } - if (cm.options.fixedGutter) { - display.gutters.style.left = comp + gutterW + "px"; - } - } - function maybeUpdateLineNumberWidth(cm) { - if (!cm.options.lineNumbers) { - return false; - } - var doc = cm.doc, - last = lineNumberFor(cm.options, doc.first + doc.size - 1), - display = cm.display; - if (last.length != display.lineNumChars) { - var test = display.measure.appendChild(elt("div", [elt("div", last)], "CodeMirror-linenumber CodeMirror-gutter-elt")); - var innerW = test.firstChild.offsetWidth, - padding = test.offsetWidth - innerW; - display.lineGutter.style.width = ""; - display.lineNumInnerWidth = Math.max(innerW, display.lineGutter.offsetWidth - padding) + 1; - display.lineNumWidth = display.lineNumInnerWidth + padding; - display.lineNumChars = display.lineNumInnerWidth ? last.length : -1; - display.lineGutter.style.width = display.lineNumWidth + "px"; - updateGutterSpace(cm.display); - return true; - } - return false; - } - function getGutters(gutters, lineNumbers) { - var result = [], - sawLineNumbers = false; - for (var i2 = 0; i2 < gutters.length; i2++) { - var name = gutters[i2], - style = null; - if (typeof name != "string") { - style = name.style; - name = name.className; - } - if (name == "CodeMirror-linenumbers") { - if (!lineNumbers) { - continue; - } else { - sawLineNumbers = true; - } - } - result.push({ - className: name, - style - }); - } - if (lineNumbers && !sawLineNumbers) { - result.push({ - className: "CodeMirror-linenumbers", - style: null - }); - } - return result; - } - function renderGutters(display) { - var gutters = display.gutters, - specs = display.gutterSpecs; - removeChildren(gutters); - display.lineGutter = null; - for (var i2 = 0; i2 < specs.length; ++i2) { - var ref = specs[i2]; - var className = ref.className; - var style = ref.style; - var gElt = gutters.appendChild(elt("div", null, "CodeMirror-gutter " + className)); - if (style) { - gElt.style.cssText = style; - } - if (className == "CodeMirror-linenumbers") { - display.lineGutter = gElt; - gElt.style.width = (display.lineNumWidth || 1) + "px"; - } - } - gutters.style.display = specs.length ? "" : "none"; - updateGutterSpace(display); - } - function updateGutters(cm) { - renderGutters(cm.display); - regChange(cm); - alignHorizontally(cm); - } - function Display(place, doc, input, options) { - var d = this; - this.input = input; - d.scrollbarFiller = elt("div", null, "CodeMirror-scrollbar-filler"); - d.scrollbarFiller.setAttribute("cm-not-content", "true"); - d.gutterFiller = elt("div", null, "CodeMirror-gutter-filler"); - d.gutterFiller.setAttribute("cm-not-content", "true"); - d.lineDiv = eltP("div", null, "CodeMirror-code"); - d.selectionDiv = elt("div", null, null, "position: relative; z-index: 1"); - d.cursorDiv = elt("div", null, "CodeMirror-cursors"); - d.measure = elt("div", null, "CodeMirror-measure"); - d.lineMeasure = elt("div", null, "CodeMirror-measure"); - d.lineSpace = eltP("div", [d.measure, d.lineMeasure, d.selectionDiv, d.cursorDiv, d.lineDiv], null, "position: relative; outline: none"); - var lines = eltP("div", [d.lineSpace], "CodeMirror-lines"); - d.mover = elt("div", [lines], null, "position: relative"); - d.sizer = elt("div", [d.mover], "CodeMirror-sizer"); - d.sizerWidth = null; - d.heightForcer = elt("div", null, null, "position: absolute; height: " + scrollerGap + "px; width: 1px;"); - d.gutters = elt("div", null, "CodeMirror-gutters"); - d.lineGutter = null; - d.scroller = elt("div", [d.sizer, d.heightForcer, d.gutters], "CodeMirror-scroll"); - d.scroller.setAttribute("tabIndex", "-1"); - d.wrapper = elt("div", [d.scrollbarFiller, d.gutterFiller, d.scroller], "CodeMirror"); - d.wrapper.setAttribute("translate", "no"); - if (ie && ie_version < 8) { - d.gutters.style.zIndex = -1; - d.scroller.style.paddingRight = 0; - } - if (!webkit && !(gecko && mobile)) { - d.scroller.draggable = true; - } - if (place) { - if (place.appendChild) { - place.appendChild(d.wrapper); - } else { - place(d.wrapper); - } - } - d.viewFrom = d.viewTo = doc.first; - d.reportedViewFrom = d.reportedViewTo = doc.first; - d.view = []; - d.renderedView = null; - d.externalMeasured = null; - d.viewOffset = 0; - d.lastWrapHeight = d.lastWrapWidth = 0; - d.updateLineNumbers = null; - d.nativeBarWidth = d.barHeight = d.barWidth = 0; - d.scrollbarsClipped = false; - d.lineNumWidth = d.lineNumInnerWidth = d.lineNumChars = null; - d.alignWidgets = false; - d.cachedCharWidth = d.cachedTextHeight = d.cachedPaddingH = null; - d.maxLine = null; - d.maxLineLength = 0; - d.maxLineChanged = false; - d.wheelDX = d.wheelDY = d.wheelStartX = d.wheelStartY = null; - d.shift = false; - d.selForContextMenu = null; - d.activeTouch = null; - d.gutterSpecs = getGutters(options.gutters, options.lineNumbers); - renderGutters(d); - input.init(d); - } - var wheelSamples = 0, - wheelPixelsPerUnit = null; - if (ie) { - wheelPixelsPerUnit = -0.53; - } else if (gecko) { - wheelPixelsPerUnit = 15; - } else if (chrome) { - wheelPixelsPerUnit = -0.7; - } else if (safari) { - wheelPixelsPerUnit = -1 / 3; - } - function wheelEventDelta(e) { - var dx = e.wheelDeltaX, - dy = e.wheelDeltaY; - if (dx == null && e.detail && e.axis == e.HORIZONTAL_AXIS) { - dx = e.detail; - } - if (dy == null && e.detail && e.axis == e.VERTICAL_AXIS) { - dy = e.detail; - } else if (dy == null) { - dy = e.wheelDelta; - } - return { - x: dx, - y: dy - }; - } - function wheelEventPixels(e) { - var delta = wheelEventDelta(e); - delta.x *= wheelPixelsPerUnit; - delta.y *= wheelPixelsPerUnit; - return delta; - } - function onScrollWheel(cm, e) { - var delta = wheelEventDelta(e), - dx = delta.x, - dy = delta.y; - var pixelsPerUnit = wheelPixelsPerUnit; - if (e.deltaMode === 0) { - dx = e.deltaX; - dy = e.deltaY; - pixelsPerUnit = 1; - } - var display = cm.display, - scroll = display.scroller; - var canScrollX = scroll.scrollWidth > scroll.clientWidth; - var canScrollY = scroll.scrollHeight > scroll.clientHeight; - if (!(dx && canScrollX || dy && canScrollY)) { - return; - } - if (dy && mac && webkit) { - outer: for (var cur = e.target, view = display.view; cur != scroll; cur = cur.parentNode) { - for (var i2 = 0; i2 < view.length; i2++) { - if (view[i2].node == cur) { - cm.display.currentWheelTarget = cur; - break outer; - } - } - } - } - if (dx && !gecko && !presto && pixelsPerUnit != null) { - if (dy && canScrollY) { - updateScrollTop(cm, Math.max(0, scroll.scrollTop + dy * pixelsPerUnit)); - } - setScrollLeft(cm, Math.max(0, scroll.scrollLeft + dx * pixelsPerUnit)); - if (!dy || dy && canScrollY) { - e_preventDefault(e); - } - display.wheelStartX = null; - return; - } - if (dy && pixelsPerUnit != null) { - var pixels = dy * pixelsPerUnit; - var top = cm.doc.scrollTop, - bot = top + display.wrapper.clientHeight; - if (pixels < 0) { - top = Math.max(0, top + pixels - 50); - } else { - bot = Math.min(cm.doc.height, bot + pixels + 50); - } - updateDisplaySimple(cm, { - top, - bottom: bot - }); - } - if (wheelSamples < 20 && e.deltaMode !== 0) { - if (display.wheelStartX == null) { - display.wheelStartX = scroll.scrollLeft; - display.wheelStartY = scroll.scrollTop; - display.wheelDX = dx; - display.wheelDY = dy; - setTimeout(function () { - if (display.wheelStartX == null) { - return; - } - var movedX = scroll.scrollLeft - display.wheelStartX; - var movedY = scroll.scrollTop - display.wheelStartY; - var sample = movedY && display.wheelDY && movedY / display.wheelDY || movedX && display.wheelDX && movedX / display.wheelDX; - display.wheelStartX = display.wheelStartY = null; - if (!sample) { - return; - } - wheelPixelsPerUnit = (wheelPixelsPerUnit * wheelSamples + sample) / (wheelSamples + 1); - ++wheelSamples; - }, 200); - } else { - display.wheelDX += dx; - display.wheelDY += dy; - } - } - } - var Selection = function (ranges, primIndex) { - this.ranges = ranges; - this.primIndex = primIndex; - }; - Selection.prototype.primary = function () { - return this.ranges[this.primIndex]; - }; - Selection.prototype.equals = function (other) { - if (other == this) { - return true; - } - if (other.primIndex != this.primIndex || other.ranges.length != this.ranges.length) { - return false; - } - for (var i2 = 0; i2 < this.ranges.length; i2++) { - var here = this.ranges[i2], - there = other.ranges[i2]; - if (!equalCursorPos(here.anchor, there.anchor) || !equalCursorPos(here.head, there.head)) { - return false; - } - } - return true; - }; - Selection.prototype.deepCopy = function () { - var out = []; - for (var i2 = 0; i2 < this.ranges.length; i2++) { - out[i2] = new Range(copyPos(this.ranges[i2].anchor), copyPos(this.ranges[i2].head)); - } - return new Selection(out, this.primIndex); - }; - Selection.prototype.somethingSelected = function () { - for (var i2 = 0; i2 < this.ranges.length; i2++) { - if (!this.ranges[i2].empty()) { - return true; - } - } - return false; - }; - Selection.prototype.contains = function (pos, end) { - if (!end) { - end = pos; - } - for (var i2 = 0; i2 < this.ranges.length; i2++) { - var range2 = this.ranges[i2]; - if (cmp(end, range2.from()) >= 0 && cmp(pos, range2.to()) <= 0) { - return i2; - } - } - return -1; - }; - var Range = function (anchor, head) { - this.anchor = anchor; - this.head = head; - }; - Range.prototype.from = function () { - return minPos(this.anchor, this.head); - }; - Range.prototype.to = function () { - return maxPos(this.anchor, this.head); - }; - Range.prototype.empty = function () { - return this.head.line == this.anchor.line && this.head.ch == this.anchor.ch; - }; - function normalizeSelection(cm, ranges, primIndex) { - var mayTouch = cm && cm.options.selectionsMayTouch; - var prim = ranges[primIndex]; - ranges.sort(function (a, b) { - return cmp(a.from(), b.from()); - }); - primIndex = indexOf(ranges, prim); - for (var i2 = 1; i2 < ranges.length; i2++) { - var cur = ranges[i2], - prev = ranges[i2 - 1]; - var diff = cmp(prev.to(), cur.from()); - if (mayTouch && !cur.empty() ? diff > 0 : diff >= 0) { - var from = minPos(prev.from(), cur.from()), - to = maxPos(prev.to(), cur.to()); - var inv = prev.empty() ? cur.from() == cur.head : prev.from() == prev.head; - if (i2 <= primIndex) { - --primIndex; - } - ranges.splice(--i2, 2, new Range(inv ? to : from, inv ? from : to)); - } - } - return new Selection(ranges, primIndex); - } - function simpleSelection(anchor, head) { - return new Selection([new Range(anchor, head || anchor)], 0); - } - function changeEnd(change) { - if (!change.text) { - return change.to; - } - return Pos(change.from.line + change.text.length - 1, lst(change.text).length + (change.text.length == 1 ? change.from.ch : 0)); - } - function adjustForChange(pos, change) { - if (cmp(pos, change.from) < 0) { - return pos; - } - if (cmp(pos, change.to) <= 0) { - return changeEnd(change); - } - var line = pos.line + change.text.length - (change.to.line - change.from.line) - 1, - ch = pos.ch; - if (pos.line == change.to.line) { - ch += changeEnd(change).ch - change.to.ch; - } - return Pos(line, ch); - } - function computeSelAfterChange(doc, change) { - var out = []; - for (var i2 = 0; i2 < doc.sel.ranges.length; i2++) { - var range2 = doc.sel.ranges[i2]; - out.push(new Range(adjustForChange(range2.anchor, change), adjustForChange(range2.head, change))); - } - return normalizeSelection(doc.cm, out, doc.sel.primIndex); - } - function offsetPos(pos, old, nw) { - if (pos.line == old.line) { - return Pos(nw.line, pos.ch - old.ch + nw.ch); - } else { - return Pos(nw.line + (pos.line - old.line), pos.ch); - } - } - function computeReplacedSel(doc, changes, hint) { - var out = []; - var oldPrev = Pos(doc.first, 0), - newPrev = oldPrev; - for (var i2 = 0; i2 < changes.length; i2++) { - var change = changes[i2]; - var from = offsetPos(change.from, oldPrev, newPrev); - var to = offsetPos(changeEnd(change), oldPrev, newPrev); - oldPrev = change.to; - newPrev = to; - if (hint == "around") { - var range2 = doc.sel.ranges[i2], - inv = cmp(range2.head, range2.anchor) < 0; - out[i2] = new Range(inv ? to : from, inv ? from : to); - } else { - out[i2] = new Range(from, from); - } - } - return new Selection(out, doc.sel.primIndex); - } - function loadMode(cm) { - cm.doc.mode = getMode(cm.options, cm.doc.modeOption); - resetModeState(cm); - } - function resetModeState(cm) { - cm.doc.iter(function (line) { - if (line.stateAfter) { - line.stateAfter = null; - } - if (line.styles) { - line.styles = null; - } - }); - cm.doc.modeFrontier = cm.doc.highlightFrontier = cm.doc.first; - startWorker(cm, 100); - cm.state.modeGen++; - if (cm.curOp) { - regChange(cm); - } - } - function isWholeLineUpdate(doc, change) { - return change.from.ch == 0 && change.to.ch == 0 && lst(change.text) == "" && (!doc.cm || doc.cm.options.wholeLineUpdateBefore); - } - function updateDoc(doc, change, markedSpans, estimateHeight2) { - function spansFor(n) { - return markedSpans ? markedSpans[n] : null; - } - function update(line, text2, spans) { - updateLine(line, text2, spans, estimateHeight2); - signalLater(line, "change", line, change); - } - function linesFor(start, end) { - var result = []; - for (var i2 = start; i2 < end; ++i2) { - result.push(new Line(text[i2], spansFor(i2), estimateHeight2)); - } - return result; - } - var from = change.from, - to = change.to, - text = change.text; - var firstLine = getLine(doc, from.line), - lastLine = getLine(doc, to.line); - var lastText = lst(text), - lastSpans = spansFor(text.length - 1), - nlines = to.line - from.line; - if (change.full) { - doc.insert(0, linesFor(0, text.length)); - doc.remove(text.length, doc.size - text.length); - } else if (isWholeLineUpdate(doc, change)) { - var added = linesFor(0, text.length - 1); - update(lastLine, lastLine.text, lastSpans); - if (nlines) { - doc.remove(from.line, nlines); - } - if (added.length) { - doc.insert(from.line, added); - } - } else if (firstLine == lastLine) { - if (text.length == 1) { - update(firstLine, firstLine.text.slice(0, from.ch) + lastText + firstLine.text.slice(to.ch), lastSpans); - } else { - var added$1 = linesFor(1, text.length - 1); - added$1.push(new Line(lastText + firstLine.text.slice(to.ch), lastSpans, estimateHeight2)); - update(firstLine, firstLine.text.slice(0, from.ch) + text[0], spansFor(0)); - doc.insert(from.line + 1, added$1); - } - } else if (text.length == 1) { - update(firstLine, firstLine.text.slice(0, from.ch) + text[0] + lastLine.text.slice(to.ch), spansFor(0)); - doc.remove(from.line + 1, nlines); - } else { - update(firstLine, firstLine.text.slice(0, from.ch) + text[0], spansFor(0)); - update(lastLine, lastText + lastLine.text.slice(to.ch), lastSpans); - var added$2 = linesFor(1, text.length - 1); - if (nlines > 1) { - doc.remove(from.line + 1, nlines - 1); - } - doc.insert(from.line + 1, added$2); - } - signalLater(doc, "change", doc, change); - } - function linkedDocs(doc, f, sharedHistOnly) { - function propagate(doc2, skip, sharedHist) { - if (doc2.linked) { - for (var i2 = 0; i2 < doc2.linked.length; ++i2) { - var rel = doc2.linked[i2]; - if (rel.doc == skip) { - continue; - } - var shared = sharedHist && rel.sharedHist; - if (sharedHistOnly && !shared) { - continue; - } - f(rel.doc, shared); - propagate(rel.doc, doc2, shared); - } - } - } - propagate(doc, null, true); - } - function attachDoc(cm, doc) { - if (doc.cm) { - throw new Error("This document is already in use."); - } - cm.doc = doc; - doc.cm = cm; - estimateLineHeights(cm); - loadMode(cm); - setDirectionClass(cm); - cm.options.direction = doc.direction; - if (!cm.options.lineWrapping) { - findMaxLine(cm); - } - cm.options.mode = doc.modeOption; - regChange(cm); - } - function setDirectionClass(cm) { - (cm.doc.direction == "rtl" ? addClass : rmClass)(cm.display.lineDiv, "CodeMirror-rtl"); - } - function directionChanged(cm) { - runInOp(cm, function () { - setDirectionClass(cm); - regChange(cm); - }); - } - function History(prev) { - this.done = []; - this.undone = []; - this.undoDepth = prev ? prev.undoDepth : Infinity; - this.lastModTime = this.lastSelTime = 0; - this.lastOp = this.lastSelOp = null; - this.lastOrigin = this.lastSelOrigin = null; - this.generation = this.maxGeneration = prev ? prev.maxGeneration : 1; - } - function historyChangeFromChange(doc, change) { - var histChange = { - from: copyPos(change.from), - to: changeEnd(change), - text: getBetween(doc, change.from, change.to) - }; - attachLocalSpans(doc, histChange, change.from.line, change.to.line + 1); - linkedDocs(doc, function (doc2) { - return attachLocalSpans(doc2, histChange, change.from.line, change.to.line + 1); - }, true); - return histChange; - } - function clearSelectionEvents(array) { - while (array.length) { - var last = lst(array); - if (last.ranges) { - array.pop(); - } else { - break; - } - } - } - function lastChangeEvent(hist, force) { - if (force) { - clearSelectionEvents(hist.done); - return lst(hist.done); - } else if (hist.done.length && !lst(hist.done).ranges) { - return lst(hist.done); - } else if (hist.done.length > 1 && !hist.done[hist.done.length - 2].ranges) { - hist.done.pop(); - return lst(hist.done); - } - } - function addChangeToHistory(doc, change, selAfter, opId) { - var hist = doc.history; - hist.undone.length = 0; - var time = + /* @__PURE__ */new Date(), - cur; - var last; - if ((hist.lastOp == opId || hist.lastOrigin == change.origin && change.origin && (change.origin.charAt(0) == "+" && hist.lastModTime > time - (doc.cm ? doc.cm.options.historyEventDelay : 500) || change.origin.charAt(0) == "*")) && (cur = lastChangeEvent(hist, hist.lastOp == opId))) { - last = lst(cur.changes); - if (cmp(change.from, change.to) == 0 && cmp(change.from, last.to) == 0) { - last.to = changeEnd(change); - } else { - cur.changes.push(historyChangeFromChange(doc, change)); - } - } else { - var before = lst(hist.done); - if (!before || !before.ranges) { - pushSelectionToHistory(doc.sel, hist.done); - } - cur = { - changes: [historyChangeFromChange(doc, change)], - generation: hist.generation - }; - hist.done.push(cur); - while (hist.done.length > hist.undoDepth) { - hist.done.shift(); - if (!hist.done[0].ranges) { - hist.done.shift(); - } - } - } - hist.done.push(selAfter); - hist.generation = ++hist.maxGeneration; - hist.lastModTime = hist.lastSelTime = time; - hist.lastOp = hist.lastSelOp = opId; - hist.lastOrigin = hist.lastSelOrigin = change.origin; - if (!last) { - signal(doc, "historyAdded"); - } - } - function selectionEventCanBeMerged(doc, origin, prev, sel) { - var ch = origin.charAt(0); - return ch == "*" || ch == "+" && prev.ranges.length == sel.ranges.length && prev.somethingSelected() == sel.somethingSelected() && /* @__PURE__ */new Date() - doc.history.lastSelTime <= (doc.cm ? doc.cm.options.historyEventDelay : 500); - } - function addSelectionToHistory(doc, sel, opId, options) { - var hist = doc.history, - origin = options && options.origin; - if (opId == hist.lastSelOp || origin && hist.lastSelOrigin == origin && (hist.lastModTime == hist.lastSelTime && hist.lastOrigin == origin || selectionEventCanBeMerged(doc, origin, lst(hist.done), sel))) { - hist.done[hist.done.length - 1] = sel; - } else { - pushSelectionToHistory(sel, hist.done); - } - hist.lastSelTime = + /* @__PURE__ */new Date(); - hist.lastSelOrigin = origin; - hist.lastSelOp = opId; - if (options && options.clearRedo !== false) { - clearSelectionEvents(hist.undone); - } - } - function pushSelectionToHistory(sel, dest) { - var top = lst(dest); - if (!(top && top.ranges && top.equals(sel))) { - dest.push(sel); - } - } - function attachLocalSpans(doc, change, from, to) { - var existing = change["spans_" + doc.id], - n = 0; - doc.iter(Math.max(doc.first, from), Math.min(doc.first + doc.size, to), function (line) { - if (line.markedSpans) { - (existing || (existing = change["spans_" + doc.id] = {}))[n] = line.markedSpans; - } - ++n; - }); - } - function removeClearedSpans(spans) { - if (!spans) { - return null; - } - var out; - for (var i2 = 0; i2 < spans.length; ++i2) { - if (spans[i2].marker.explicitlyCleared) { - if (!out) { - out = spans.slice(0, i2); - } - } else if (out) { - out.push(spans[i2]); - } - } - return !out ? spans : out.length ? out : null; - } - function getOldSpans(doc, change) { - var found = change["spans_" + doc.id]; - if (!found) { - return null; - } - var nw = []; - for (var i2 = 0; i2 < change.text.length; ++i2) { - nw.push(removeClearedSpans(found[i2])); - } - return nw; - } - function mergeOldSpans(doc, change) { - var old = getOldSpans(doc, change); - var stretched = stretchSpansOverChange(doc, change); - if (!old) { - return stretched; - } - if (!stretched) { - return old; - } - for (var i2 = 0; i2 < old.length; ++i2) { - var oldCur = old[i2], - stretchCur = stretched[i2]; - if (oldCur && stretchCur) { - spans: for (var j = 0; j < stretchCur.length; ++j) { - var span = stretchCur[j]; - for (var k = 0; k < oldCur.length; ++k) { - if (oldCur[k].marker == span.marker) { - continue spans; - } - } - oldCur.push(span); - } - } else if (stretchCur) { - old[i2] = stretchCur; - } - } - return old; - } - function copyHistoryArray(events, newGroup, instantiateSel) { - var copy = []; - for (var i2 = 0; i2 < events.length; ++i2) { - var event = events[i2]; - if (event.ranges) { - copy.push(instantiateSel ? Selection.prototype.deepCopy.call(event) : event); - continue; - } - var changes = event.changes, - newChanges = []; - copy.push({ - changes: newChanges - }); - for (var j = 0; j < changes.length; ++j) { - var change = changes[j], - m = void 0; - newChanges.push({ - from: change.from, - to: change.to, - text: change.text - }); - if (newGroup) { - for (var prop2 in change) { - if (m = prop2.match(/^spans_(\d+)$/)) { - if (indexOf(newGroup, Number(m[1])) > -1) { - lst(newChanges)[prop2] = change[prop2]; - delete change[prop2]; - } - } - } - } - } - } - return copy; - } - function extendRange(range2, head, other, extend) { - if (extend) { - var anchor = range2.anchor; - if (other) { - var posBefore = cmp(head, anchor) < 0; - if (posBefore != cmp(other, anchor) < 0) { - anchor = head; - head = other; - } else if (posBefore != cmp(head, other) < 0) { - head = other; - } - } - return new Range(anchor, head); - } else { - return new Range(other || head, head); - } - } - function extendSelection(doc, head, other, options, extend) { - if (extend == null) { - extend = doc.cm && (doc.cm.display.shift || doc.extend); - } - setSelection(doc, new Selection([extendRange(doc.sel.primary(), head, other, extend)], 0), options); - } - function extendSelections(doc, heads, options) { - var out = []; - var extend = doc.cm && (doc.cm.display.shift || doc.extend); - for (var i2 = 0; i2 < doc.sel.ranges.length; i2++) { - out[i2] = extendRange(doc.sel.ranges[i2], heads[i2], null, extend); - } - var newSel = normalizeSelection(doc.cm, out, doc.sel.primIndex); - setSelection(doc, newSel, options); - } - function replaceOneSelection(doc, i2, range2, options) { - var ranges = doc.sel.ranges.slice(0); - ranges[i2] = range2; - setSelection(doc, normalizeSelection(doc.cm, ranges, doc.sel.primIndex), options); - } - function setSimpleSelection(doc, anchor, head, options) { - setSelection(doc, simpleSelection(anchor, head), options); - } - function filterSelectionChange(doc, sel, options) { - var obj = { - ranges: sel.ranges, - update: function (ranges) { - this.ranges = []; - for (var i2 = 0; i2 < ranges.length; i2++) { - this.ranges[i2] = new Range(clipPos(doc, ranges[i2].anchor), clipPos(doc, ranges[i2].head)); - } - }, - origin: options && options.origin - }; - signal(doc, "beforeSelectionChange", doc, obj); - if (doc.cm) { - signal(doc.cm, "beforeSelectionChange", doc.cm, obj); - } - if (obj.ranges != sel.ranges) { - return normalizeSelection(doc.cm, obj.ranges, obj.ranges.length - 1); - } else { - return sel; - } - } - function setSelectionReplaceHistory(doc, sel, options) { - var done = doc.history.done, - last = lst(done); - if (last && last.ranges) { - done[done.length - 1] = sel; - setSelectionNoUndo(doc, sel, options); - } else { - setSelection(doc, sel, options); - } - } - function setSelection(doc, sel, options) { - setSelectionNoUndo(doc, sel, options); - addSelectionToHistory(doc, doc.sel, doc.cm ? doc.cm.curOp.id : NaN, options); - } - function setSelectionNoUndo(doc, sel, options) { - if (hasHandler(doc, "beforeSelectionChange") || doc.cm && hasHandler(doc.cm, "beforeSelectionChange")) { - sel = filterSelectionChange(doc, sel, options); - } - var bias = options && options.bias || (cmp(sel.primary().head, doc.sel.primary().head) < 0 ? -1 : 1); - setSelectionInner(doc, skipAtomicInSelection(doc, sel, bias, true)); - if (!(options && options.scroll === false) && doc.cm && doc.cm.getOption("readOnly") != "nocursor") { - ensureCursorVisible(doc.cm); - } - } - function setSelectionInner(doc, sel) { - if (sel.equals(doc.sel)) { - return; - } - doc.sel = sel; - if (doc.cm) { - doc.cm.curOp.updateInput = 1; - doc.cm.curOp.selectionChanged = true; - signalCursorActivity(doc.cm); - } - signalLater(doc, "cursorActivity", doc); - } - function reCheckSelection(doc) { - setSelectionInner(doc, skipAtomicInSelection(doc, doc.sel, null, false)); - } - function skipAtomicInSelection(doc, sel, bias, mayClear) { - var out; - for (var i2 = 0; i2 < sel.ranges.length; i2++) { - var range2 = sel.ranges[i2]; - var old = sel.ranges.length == doc.sel.ranges.length && doc.sel.ranges[i2]; - var newAnchor = skipAtomic(doc, range2.anchor, old && old.anchor, bias, mayClear); - var newHead = skipAtomic(doc, range2.head, old && old.head, bias, mayClear); - if (out || newAnchor != range2.anchor || newHead != range2.head) { - if (!out) { - out = sel.ranges.slice(0, i2); - } - out[i2] = new Range(newAnchor, newHead); - } - } - return out ? normalizeSelection(doc.cm, out, sel.primIndex) : sel; - } - function skipAtomicInner(doc, pos, oldPos, dir, mayClear) { - var line = getLine(doc, pos.line); - if (line.markedSpans) { - for (var i2 = 0; i2 < line.markedSpans.length; ++i2) { - var sp = line.markedSpans[i2], - m = sp.marker; - var preventCursorLeft = "selectLeft" in m ? !m.selectLeft : m.inclusiveLeft; - var preventCursorRight = "selectRight" in m ? !m.selectRight : m.inclusiveRight; - if ((sp.from == null || (preventCursorLeft ? sp.from <= pos.ch : sp.from < pos.ch)) && (sp.to == null || (preventCursorRight ? sp.to >= pos.ch : sp.to > pos.ch))) { - if (mayClear) { - signal(m, "beforeCursorEnter"); - if (m.explicitlyCleared) { - if (!line.markedSpans) { - break; - } else { - --i2; - continue; - } - } - } - if (!m.atomic) { - continue; - } - if (oldPos) { - var near = m.find(dir < 0 ? 1 : -1), - diff = void 0; - if (dir < 0 ? preventCursorRight : preventCursorLeft) { - near = movePos(doc, near, -dir, near && near.line == pos.line ? line : null); - } - if (near && near.line == pos.line && (diff = cmp(near, oldPos)) && (dir < 0 ? diff < 0 : diff > 0)) { - return skipAtomicInner(doc, near, pos, dir, mayClear); - } - } - var far = m.find(dir < 0 ? -1 : 1); - if (dir < 0 ? preventCursorLeft : preventCursorRight) { - far = movePos(doc, far, dir, far.line == pos.line ? line : null); - } - return far ? skipAtomicInner(doc, far, pos, dir, mayClear) : null; - } - } - } - return pos; - } - function skipAtomic(doc, pos, oldPos, bias, mayClear) { - var dir = bias || 1; - var found = skipAtomicInner(doc, pos, oldPos, dir, mayClear) || !mayClear && skipAtomicInner(doc, pos, oldPos, dir, true) || skipAtomicInner(doc, pos, oldPos, -dir, mayClear) || !mayClear && skipAtomicInner(doc, pos, oldPos, -dir, true); - if (!found) { - doc.cantEdit = true; - return Pos(doc.first, 0); - } - return found; - } - function movePos(doc, pos, dir, line) { - if (dir < 0 && pos.ch == 0) { - if (pos.line > doc.first) { - return clipPos(doc, Pos(pos.line - 1)); - } else { - return null; - } - } else if (dir > 0 && pos.ch == (line || getLine(doc, pos.line)).text.length) { - if (pos.line < doc.first + doc.size - 1) { - return Pos(pos.line + 1, 0); - } else { - return null; - } - } else { - return new Pos(pos.line, pos.ch + dir); - } - } - function selectAll(cm) { - cm.setSelection(Pos(cm.firstLine(), 0), Pos(cm.lastLine()), sel_dontScroll); - } - function filterChange(doc, change, update) { - var obj = { - canceled: false, - from: change.from, - to: change.to, - text: change.text, - origin: change.origin, - cancel: function () { - return obj.canceled = true; - } - }; - if (update) { - obj.update = function (from, to, text, origin) { - if (from) { - obj.from = clipPos(doc, from); - } - if (to) { - obj.to = clipPos(doc, to); - } - if (text) { - obj.text = text; - } - if (origin !== void 0) { - obj.origin = origin; - } - }; - } - signal(doc, "beforeChange", doc, obj); - if (doc.cm) { - signal(doc.cm, "beforeChange", doc.cm, obj); - } - if (obj.canceled) { - if (doc.cm) { - doc.cm.curOp.updateInput = 2; - } - return null; - } - return { - from: obj.from, - to: obj.to, - text: obj.text, - origin: obj.origin - }; - } - function makeChange(doc, change, ignoreReadOnly) { - if (doc.cm) { - if (!doc.cm.curOp) { - return operation(doc.cm, makeChange)(doc, change, ignoreReadOnly); - } - if (doc.cm.state.suppressEdits) { - return; - } - } - if (hasHandler(doc, "beforeChange") || doc.cm && hasHandler(doc.cm, "beforeChange")) { - change = filterChange(doc, change, true); - if (!change) { - return; - } - } - var split = sawReadOnlySpans && !ignoreReadOnly && removeReadOnlyRanges(doc, change.from, change.to); - if (split) { - for (var i2 = split.length - 1; i2 >= 0; --i2) { - makeChangeInner(doc, { - from: split[i2].from, - to: split[i2].to, - text: i2 ? [""] : change.text, - origin: change.origin - }); - } - } else { - makeChangeInner(doc, change); - } - } - function makeChangeInner(doc, change) { - if (change.text.length == 1 && change.text[0] == "" && cmp(change.from, change.to) == 0) { - return; - } - var selAfter = computeSelAfterChange(doc, change); - addChangeToHistory(doc, change, selAfter, doc.cm ? doc.cm.curOp.id : NaN); - makeChangeSingleDoc(doc, change, selAfter, stretchSpansOverChange(doc, change)); - var rebased = []; - linkedDocs(doc, function (doc2, sharedHist) { - if (!sharedHist && indexOf(rebased, doc2.history) == -1) { - rebaseHist(doc2.history, change); - rebased.push(doc2.history); - } - makeChangeSingleDoc(doc2, change, null, stretchSpansOverChange(doc2, change)); - }); - } - function makeChangeFromHistory(doc, type, allowSelectionOnly) { - var suppress = doc.cm && doc.cm.state.suppressEdits; - if (suppress && !allowSelectionOnly) { - return; - } - var hist = doc.history, - event, - selAfter = doc.sel; - var source = type == "undo" ? hist.done : hist.undone, - dest = type == "undo" ? hist.undone : hist.done; - var i2 = 0; - for (; i2 < source.length; i2++) { - event = source[i2]; - if (allowSelectionOnly ? event.ranges && !event.equals(doc.sel) : !event.ranges) { - break; - } - } - if (i2 == source.length) { - return; - } - hist.lastOrigin = hist.lastSelOrigin = null; - for (;;) { - event = source.pop(); - if (event.ranges) { - pushSelectionToHistory(event, dest); - if (allowSelectionOnly && !event.equals(doc.sel)) { - setSelection(doc, event, { - clearRedo: false - }); - return; - } - selAfter = event; - } else if (suppress) { - source.push(event); - return; - } else { - break; - } - } - var antiChanges = []; - pushSelectionToHistory(selAfter, dest); - dest.push({ - changes: antiChanges, - generation: hist.generation - }); - hist.generation = event.generation || ++hist.maxGeneration; - var filter = hasHandler(doc, "beforeChange") || doc.cm && hasHandler(doc.cm, "beforeChange"); - var loop = function (i3) { - var change = event.changes[i3]; - change.origin = type; - if (filter && !filterChange(doc, change, false)) { - source.length = 0; - return {}; - } - antiChanges.push(historyChangeFromChange(doc, change)); - var after = i3 ? computeSelAfterChange(doc, change) : lst(source); - makeChangeSingleDoc(doc, change, after, mergeOldSpans(doc, change)); - if (!i3 && doc.cm) { - doc.cm.scrollIntoView({ - from: change.from, - to: changeEnd(change) - }); - } - var rebased = []; - linkedDocs(doc, function (doc2, sharedHist) { - if (!sharedHist && indexOf(rebased, doc2.history) == -1) { - rebaseHist(doc2.history, change); - rebased.push(doc2.history); - } - makeChangeSingleDoc(doc2, change, null, mergeOldSpans(doc2, change)); - }); - }; - for (var i$12 = event.changes.length - 1; i$12 >= 0; --i$12) { - var returned = loop(i$12); - if (returned) return returned.v; - } - } - function shiftDoc(doc, distance) { - if (distance == 0) { - return; - } - doc.first += distance; - doc.sel = new Selection(map(doc.sel.ranges, function (range2) { - return new Range(Pos(range2.anchor.line + distance, range2.anchor.ch), Pos(range2.head.line + distance, range2.head.ch)); - }), doc.sel.primIndex); - if (doc.cm) { - regChange(doc.cm, doc.first, doc.first - distance, distance); - for (var d = doc.cm.display, l = d.viewFrom; l < d.viewTo; l++) { - regLineChange(doc.cm, l, "gutter"); - } - } - } - function makeChangeSingleDoc(doc, change, selAfter, spans) { - if (doc.cm && !doc.cm.curOp) { - return operation(doc.cm, makeChangeSingleDoc)(doc, change, selAfter, spans); - } - if (change.to.line < doc.first) { - shiftDoc(doc, change.text.length - 1 - (change.to.line - change.from.line)); - return; - } - if (change.from.line > doc.lastLine()) { - return; - } - if (change.from.line < doc.first) { - var shift = change.text.length - 1 - (doc.first - change.from.line); - shiftDoc(doc, shift); - change = { - from: Pos(doc.first, 0), - to: Pos(change.to.line + shift, change.to.ch), - text: [lst(change.text)], - origin: change.origin - }; - } - var last = doc.lastLine(); - if (change.to.line > last) { - change = { - from: change.from, - to: Pos(last, getLine(doc, last).text.length), - text: [change.text[0]], - origin: change.origin - }; - } - change.removed = getBetween(doc, change.from, change.to); - if (!selAfter) { - selAfter = computeSelAfterChange(doc, change); - } - if (doc.cm) { - makeChangeSingleDocInEditor(doc.cm, change, spans); - } else { - updateDoc(doc, change, spans); - } - setSelectionNoUndo(doc, selAfter, sel_dontScroll); - if (doc.cantEdit && skipAtomic(doc, Pos(doc.firstLine(), 0))) { - doc.cantEdit = false; - } - } - function makeChangeSingleDocInEditor(cm, change, spans) { - var doc = cm.doc, - display = cm.display, - from = change.from, - to = change.to; - var recomputeMaxLength = false, - checkWidthStart = from.line; - if (!cm.options.lineWrapping) { - checkWidthStart = lineNo(visualLine(getLine(doc, from.line))); - doc.iter(checkWidthStart, to.line + 1, function (line) { - if (line == display.maxLine) { - recomputeMaxLength = true; - return true; - } - }); - } - if (doc.sel.contains(change.from, change.to) > -1) { - signalCursorActivity(cm); - } - updateDoc(doc, change, spans, estimateHeight(cm)); - if (!cm.options.lineWrapping) { - doc.iter(checkWidthStart, from.line + change.text.length, function (line) { - var len = lineLength(line); - if (len > display.maxLineLength) { - display.maxLine = line; - display.maxLineLength = len; - display.maxLineChanged = true; - recomputeMaxLength = false; - } - }); - if (recomputeMaxLength) { - cm.curOp.updateMaxLine = true; - } - } - retreatFrontier(doc, from.line); - startWorker(cm, 400); - var lendiff = change.text.length - (to.line - from.line) - 1; - if (change.full) { - regChange(cm); - } else if (from.line == to.line && change.text.length == 1 && !isWholeLineUpdate(cm.doc, change)) { - regLineChange(cm, from.line, "text"); - } else { - regChange(cm, from.line, to.line + 1, lendiff); - } - var changesHandler = hasHandler(cm, "changes"), - changeHandler = hasHandler(cm, "change"); - if (changeHandler || changesHandler) { - var obj = { - from, - to, - text: change.text, - removed: change.removed, - origin: change.origin - }; - if (changeHandler) { - signalLater(cm, "change", cm, obj); - } - if (changesHandler) { - (cm.curOp.changeObjs || (cm.curOp.changeObjs = [])).push(obj); - } - } - cm.display.selForContextMenu = null; - } - function replaceRange(doc, code, from, to, origin) { - var assign; - if (!to) { - to = from; - } - if (cmp(to, from) < 0) { - assign = [to, from], from = assign[0], to = assign[1]; - } - if (typeof code == "string") { - code = doc.splitLines(code); - } - makeChange(doc, { - from, - to, - text: code, - origin - }); - } - function rebaseHistSelSingle(pos, from, to, diff) { - if (to < pos.line) { - pos.line += diff; - } else if (from < pos.line) { - pos.line = from; - pos.ch = 0; - } - } - function rebaseHistArray(array, from, to, diff) { - for (var i2 = 0; i2 < array.length; ++i2) { - var sub = array[i2], - ok = true; - if (sub.ranges) { - if (!sub.copied) { - sub = array[i2] = sub.deepCopy(); - sub.copied = true; - } - for (var j = 0; j < sub.ranges.length; j++) { - rebaseHistSelSingle(sub.ranges[j].anchor, from, to, diff); - rebaseHistSelSingle(sub.ranges[j].head, from, to, diff); - } - continue; - } - for (var j$1 = 0; j$1 < sub.changes.length; ++j$1) { - var cur = sub.changes[j$1]; - if (to < cur.from.line) { - cur.from = Pos(cur.from.line + diff, cur.from.ch); - cur.to = Pos(cur.to.line + diff, cur.to.ch); - } else if (from <= cur.to.line) { - ok = false; - break; - } - } - if (!ok) { - array.splice(0, i2 + 1); - i2 = 0; - } - } - } - function rebaseHist(hist, change) { - var from = change.from.line, - to = change.to.line, - diff = change.text.length - (to - from) - 1; - rebaseHistArray(hist.done, from, to, diff); - rebaseHistArray(hist.undone, from, to, diff); - } - function changeLine(doc, handle, changeType, op) { - var no = handle, - line = handle; - if (typeof handle == "number") { - line = getLine(doc, clipLine(doc, handle)); - } else { - no = lineNo(handle); - } - if (no == null) { - return null; - } - if (op(line, no) && doc.cm) { - regLineChange(doc.cm, no, changeType); - } - return line; - } - function LeafChunk(lines) { - this.lines = lines; - this.parent = null; - var height = 0; - for (var i2 = 0; i2 < lines.length; ++i2) { - lines[i2].parent = this; - height += lines[i2].height; - } - this.height = height; - } - LeafChunk.prototype = { - chunkSize: function () { - return this.lines.length; - }, - // Remove the n lines at offset 'at'. - removeInner: function (at, n) { - for (var i2 = at, e = at + n; i2 < e; ++i2) { - var line = this.lines[i2]; - this.height -= line.height; - cleanUpLine(line); - signalLater(line, "delete"); - } - this.lines.splice(at, n); - }, - // Helper used to collapse a small branch into a single leaf. - collapse: function (lines) { - lines.push.apply(lines, this.lines); - }, - // Insert the given array of lines at offset 'at', count them as - // having the given height. - insertInner: function (at, lines, height) { - this.height += height; - this.lines = this.lines.slice(0, at).concat(lines).concat(this.lines.slice(at)); - for (var i2 = 0; i2 < lines.length; ++i2) { - lines[i2].parent = this; - } - }, - // Used to iterate over a part of the tree. - iterN: function (at, n, op) { - for (var e = at + n; at < e; ++at) { - if (op(this.lines[at])) { - return true; - } - } - } - }; - function BranchChunk(children) { - this.children = children; - var size = 0, - height = 0; - for (var i2 = 0; i2 < children.length; ++i2) { - var ch = children[i2]; - size += ch.chunkSize(); - height += ch.height; - ch.parent = this; - } - this.size = size; - this.height = height; - this.parent = null; - } - BranchChunk.prototype = { - chunkSize: function () { - return this.size; - }, - removeInner: function (at, n) { - this.size -= n; - for (var i2 = 0; i2 < this.children.length; ++i2) { - var child = this.children[i2], - sz = child.chunkSize(); - if (at < sz) { - var rm = Math.min(n, sz - at), - oldHeight = child.height; - child.removeInner(at, rm); - this.height -= oldHeight - child.height; - if (sz == rm) { - this.children.splice(i2--, 1); - child.parent = null; - } - if ((n -= rm) == 0) { - break; - } - at = 0; - } else { - at -= sz; - } - } - if (this.size - n < 25 && (this.children.length > 1 || !(this.children[0] instanceof LeafChunk))) { - var lines = []; - this.collapse(lines); - this.children = [new LeafChunk(lines)]; - this.children[0].parent = this; - } - }, - collapse: function (lines) { - for (var i2 = 0; i2 < this.children.length; ++i2) { - this.children[i2].collapse(lines); - } - }, - insertInner: function (at, lines, height) { - this.size += lines.length; - this.height += height; - for (var i2 = 0; i2 < this.children.length; ++i2) { - var child = this.children[i2], - sz = child.chunkSize(); - if (at <= sz) { - child.insertInner(at, lines, height); - if (child.lines && child.lines.length > 50) { - var remaining = child.lines.length % 25 + 25; - for (var pos = remaining; pos < child.lines.length;) { - var leaf = new LeafChunk(child.lines.slice(pos, pos += 25)); - child.height -= leaf.height; - this.children.splice(++i2, 0, leaf); - leaf.parent = this; - } - child.lines = child.lines.slice(0, remaining); - this.maybeSpill(); - } - break; - } - at -= sz; - } - }, - // When a node has grown, check whether it should be split. - maybeSpill: function () { - if (this.children.length <= 10) { - return; - } - var me = this; - do { - var spilled = me.children.splice(me.children.length - 5, 5); - var sibling = new BranchChunk(spilled); - if (!me.parent) { - var copy = new BranchChunk(me.children); - copy.parent = me; - me.children = [copy, sibling]; - me = copy; - } else { - me.size -= sibling.size; - me.height -= sibling.height; - var myIndex = indexOf(me.parent.children, me); - me.parent.children.splice(myIndex + 1, 0, sibling); - } - sibling.parent = me.parent; - } while (me.children.length > 10); - me.parent.maybeSpill(); - }, - iterN: function (at, n, op) { - for (var i2 = 0; i2 < this.children.length; ++i2) { - var child = this.children[i2], - sz = child.chunkSize(); - if (at < sz) { - var used = Math.min(n, sz - at); - if (child.iterN(at, used, op)) { - return true; - } - if ((n -= used) == 0) { - break; - } - at = 0; - } else { - at -= sz; - } - } - } - }; - var LineWidget = function (doc, node, options) { - if (options) { - for (var opt in options) { - if (options.hasOwnProperty(opt)) { - this[opt] = options[opt]; - } - } - } - this.doc = doc; - this.node = node; - }; - LineWidget.prototype.clear = function () { - var cm = this.doc.cm, - ws = this.line.widgets, - line = this.line, - no = lineNo(line); - if (no == null || !ws) { - return; - } - for (var i2 = 0; i2 < ws.length; ++i2) { - if (ws[i2] == this) { - ws.splice(i2--, 1); - } - } - if (!ws.length) { - line.widgets = null; - } - var height = widgetHeight(this); - updateLineHeight(line, Math.max(0, line.height - height)); - if (cm) { - runInOp(cm, function () { - adjustScrollWhenAboveVisible(cm, line, -height); - regLineChange(cm, no, "widget"); - }); - signalLater(cm, "lineWidgetCleared", cm, this, no); - } - }; - LineWidget.prototype.changed = function () { - var this$1$1 = this; - var oldH = this.height, - cm = this.doc.cm, - line = this.line; - this.height = null; - var diff = widgetHeight(this) - oldH; - if (!diff) { - return; - } - if (!lineIsHidden(this.doc, line)) { - updateLineHeight(line, line.height + diff); - } - if (cm) { - runInOp(cm, function () { - cm.curOp.forceUpdate = true; - adjustScrollWhenAboveVisible(cm, line, diff); - signalLater(cm, "lineWidgetChanged", cm, this$1$1, lineNo(line)); - }); - } - }; - eventMixin(LineWidget); - function adjustScrollWhenAboveVisible(cm, line, diff) { - if (heightAtLine(line) < (cm.curOp && cm.curOp.scrollTop || cm.doc.scrollTop)) { - addToScrollTop(cm, diff); - } - } - function addLineWidget(doc, handle, node, options) { - var widget = new LineWidget(doc, node, options); - var cm = doc.cm; - if (cm && widget.noHScroll) { - cm.display.alignWidgets = true; - } - changeLine(doc, handle, "widget", function (line) { - var widgets = line.widgets || (line.widgets = []); - if (widget.insertAt == null) { - widgets.push(widget); - } else { - widgets.splice(Math.min(widgets.length, Math.max(0, widget.insertAt)), 0, widget); - } - widget.line = line; - if (cm && !lineIsHidden(doc, line)) { - var aboveVisible = heightAtLine(line) < doc.scrollTop; - updateLineHeight(line, line.height + widgetHeight(widget)); - if (aboveVisible) { - addToScrollTop(cm, widget.height); - } - cm.curOp.forceUpdate = true; - } - return true; - }); - if (cm) { - signalLater(cm, "lineWidgetAdded", cm, widget, typeof handle == "number" ? handle : lineNo(handle)); - } - return widget; - } - var nextMarkerId = 0; - var TextMarker = function (doc, type) { - this.lines = []; - this.type = type; - this.doc = doc; - this.id = ++nextMarkerId; - }; - TextMarker.prototype.clear = function () { - if (this.explicitlyCleared) { - return; - } - var cm = this.doc.cm, - withOp = cm && !cm.curOp; - if (withOp) { - startOperation(cm); - } - if (hasHandler(this, "clear")) { - var found = this.find(); - if (found) { - signalLater(this, "clear", found.from, found.to); - } - } - var min = null, - max = null; - for (var i2 = 0; i2 < this.lines.length; ++i2) { - var line = this.lines[i2]; - var span = getMarkedSpanFor(line.markedSpans, this); - if (cm && !this.collapsed) { - regLineChange(cm, lineNo(line), "text"); - } else if (cm) { - if (span.to != null) { - max = lineNo(line); - } - if (span.from != null) { - min = lineNo(line); - } - } - line.markedSpans = removeMarkedSpan(line.markedSpans, span); - if (span.from == null && this.collapsed && !lineIsHidden(this.doc, line) && cm) { - updateLineHeight(line, textHeight(cm.display)); - } - } - if (cm && this.collapsed && !cm.options.lineWrapping) { - for (var i$12 = 0; i$12 < this.lines.length; ++i$12) { - var visual = visualLine(this.lines[i$12]), - len = lineLength(visual); - if (len > cm.display.maxLineLength) { - cm.display.maxLine = visual; - cm.display.maxLineLength = len; - cm.display.maxLineChanged = true; - } - } - } - if (min != null && cm && this.collapsed) { - regChange(cm, min, max + 1); - } - this.lines.length = 0; - this.explicitlyCleared = true; - if (this.atomic && this.doc.cantEdit) { - this.doc.cantEdit = false; - if (cm) { - reCheckSelection(cm.doc); - } - } - if (cm) { - signalLater(cm, "markerCleared", cm, this, min, max); - } - if (withOp) { - endOperation(cm); - } - if (this.parent) { - this.parent.clear(); - } - }; - TextMarker.prototype.find = function (side, lineObj) { - if (side == null && this.type == "bookmark") { - side = 1; - } - var from, to; - for (var i2 = 0; i2 < this.lines.length; ++i2) { - var line = this.lines[i2]; - var span = getMarkedSpanFor(line.markedSpans, this); - if (span.from != null) { - from = Pos(lineObj ? line : lineNo(line), span.from); - if (side == -1) { - return from; - } - } - if (span.to != null) { - to = Pos(lineObj ? line : lineNo(line), span.to); - if (side == 1) { - return to; - } - } - } - return from && { - from, - to - }; - }; - TextMarker.prototype.changed = function () { - var this$1$1 = this; - var pos = this.find(-1, true), - widget = this, - cm = this.doc.cm; - if (!pos || !cm) { - return; - } - runInOp(cm, function () { - var line = pos.line, - lineN = lineNo(pos.line); - var view = findViewForLine(cm, lineN); - if (view) { - clearLineMeasurementCacheFor(view); - cm.curOp.selectionChanged = cm.curOp.forceUpdate = true; - } - cm.curOp.updateMaxLine = true; - if (!lineIsHidden(widget.doc, line) && widget.height != null) { - var oldHeight = widget.height; - widget.height = null; - var dHeight = widgetHeight(widget) - oldHeight; - if (dHeight) { - updateLineHeight(line, line.height + dHeight); - } - } - signalLater(cm, "markerChanged", cm, this$1$1); - }); - }; - TextMarker.prototype.attachLine = function (line) { - if (!this.lines.length && this.doc.cm) { - var op = this.doc.cm.curOp; - if (!op.maybeHiddenMarkers || indexOf(op.maybeHiddenMarkers, this) == -1) { - (op.maybeUnhiddenMarkers || (op.maybeUnhiddenMarkers = [])).push(this); - } - } - this.lines.push(line); - }; - TextMarker.prototype.detachLine = function (line) { - this.lines.splice(indexOf(this.lines, line), 1); - if (!this.lines.length && this.doc.cm) { - var op = this.doc.cm.curOp; - (op.maybeHiddenMarkers || (op.maybeHiddenMarkers = [])).push(this); - } - }; - eventMixin(TextMarker); - function markText(doc, from, to, options, type) { - if (options && options.shared) { - return markTextShared(doc, from, to, options, type); - } - if (doc.cm && !doc.cm.curOp) { - return operation(doc.cm, markText)(doc, from, to, options, type); - } - var marker = new TextMarker(doc, type), - diff = cmp(from, to); - if (options) { - copyObj(options, marker, false); - } - if (diff > 0 || diff == 0 && marker.clearWhenEmpty !== false) { - return marker; - } - if (marker.replacedWith) { - marker.collapsed = true; - marker.widgetNode = eltP("span", [marker.replacedWith], "CodeMirror-widget"); - if (!options.handleMouseEvents) { - marker.widgetNode.setAttribute("cm-ignore-events", "true"); - } - if (options.insertLeft) { - marker.widgetNode.insertLeft = true; - } - } - if (marker.collapsed) { - if (conflictingCollapsedRange(doc, from.line, from, to, marker) || from.line != to.line && conflictingCollapsedRange(doc, to.line, from, to, marker)) { - throw new Error("Inserting collapsed marker partially overlapping an existing one"); - } - seeCollapsedSpans(); - } - if (marker.addToHistory) { - addChangeToHistory(doc, { - from, - to, - origin: "markText" - }, doc.sel, NaN); - } - var curLine = from.line, - cm = doc.cm, - updateMaxLine; - doc.iter(curLine, to.line + 1, function (line) { - if (cm && marker.collapsed && !cm.options.lineWrapping && visualLine(line) == cm.display.maxLine) { - updateMaxLine = true; - } - if (marker.collapsed && curLine != from.line) { - updateLineHeight(line, 0); - } - addMarkedSpan(line, new MarkedSpan(marker, curLine == from.line ? from.ch : null, curLine == to.line ? to.ch : null), doc.cm && doc.cm.curOp); - ++curLine; - }); - if (marker.collapsed) { - doc.iter(from.line, to.line + 1, function (line) { - if (lineIsHidden(doc, line)) { - updateLineHeight(line, 0); - } - }); - } - if (marker.clearOnEnter) { - on(marker, "beforeCursorEnter", function () { - return marker.clear(); - }); - } - if (marker.readOnly) { - seeReadOnlySpans(); - if (doc.history.done.length || doc.history.undone.length) { - doc.clearHistory(); - } - } - if (marker.collapsed) { - marker.id = ++nextMarkerId; - marker.atomic = true; - } - if (cm) { - if (updateMaxLine) { - cm.curOp.updateMaxLine = true; - } - if (marker.collapsed) { - regChange(cm, from.line, to.line + 1); - } else if (marker.className || marker.startStyle || marker.endStyle || marker.css || marker.attributes || marker.title) { - for (var i2 = from.line; i2 <= to.line; i2++) { - regLineChange(cm, i2, "text"); - } - } - if (marker.atomic) { - reCheckSelection(cm.doc); - } - signalLater(cm, "markerAdded", cm, marker); - } - return marker; - } - var SharedTextMarker = function (markers, primary) { - this.markers = markers; - this.primary = primary; - for (var i2 = 0; i2 < markers.length; ++i2) { - markers[i2].parent = this; - } - }; - SharedTextMarker.prototype.clear = function () { - if (this.explicitlyCleared) { - return; - } - this.explicitlyCleared = true; - for (var i2 = 0; i2 < this.markers.length; ++i2) { - this.markers[i2].clear(); - } - signalLater(this, "clear"); - }; - SharedTextMarker.prototype.find = function (side, lineObj) { - return this.primary.find(side, lineObj); - }; - eventMixin(SharedTextMarker); - function markTextShared(doc, from, to, options, type) { - options = copyObj(options); - options.shared = false; - var markers = [markText(doc, from, to, options, type)], - primary = markers[0]; - var widget = options.widgetNode; - linkedDocs(doc, function (doc2) { - if (widget) { - options.widgetNode = widget.cloneNode(true); - } - markers.push(markText(doc2, clipPos(doc2, from), clipPos(doc2, to), options, type)); - for (var i2 = 0; i2 < doc2.linked.length; ++i2) { - if (doc2.linked[i2].isParent) { - return; - } - } - primary = lst(markers); - }); - return new SharedTextMarker(markers, primary); - } - function findSharedMarkers(doc) { - return doc.findMarks(Pos(doc.first, 0), doc.clipPos(Pos(doc.lastLine())), function (m) { - return m.parent; - }); - } - function copySharedMarkers(doc, markers) { - for (var i2 = 0; i2 < markers.length; i2++) { - var marker = markers[i2], - pos = marker.find(); - var mFrom = doc.clipPos(pos.from), - mTo = doc.clipPos(pos.to); - if (cmp(mFrom, mTo)) { - var subMark = markText(doc, mFrom, mTo, marker.primary, marker.primary.type); - marker.markers.push(subMark); - subMark.parent = marker; - } - } - } - function detachSharedMarkers(markers) { - var loop = function (i3) { - var marker = markers[i3], - linked = [marker.primary.doc]; - linkedDocs(marker.primary.doc, function (d) { - return linked.push(d); - }); - for (var j = 0; j < marker.markers.length; j++) { - var subMarker = marker.markers[j]; - if (indexOf(linked, subMarker.doc) == -1) { - subMarker.parent = null; - marker.markers.splice(j--, 1); - } - } - }; - for (var i2 = 0; i2 < markers.length; i2++) loop(i2); - } - var nextDocId = 0; - var Doc = function (text, mode, firstLine, lineSep, direction) { - if (!(this instanceof Doc)) { - return new Doc(text, mode, firstLine, lineSep, direction); - } - if (firstLine == null) { - firstLine = 0; - } - BranchChunk.call(this, [new LeafChunk([new Line("", null)])]); - this.first = firstLine; - this.scrollTop = this.scrollLeft = 0; - this.cantEdit = false; - this.cleanGeneration = 1; - this.modeFrontier = this.highlightFrontier = firstLine; - var start = Pos(firstLine, 0); - this.sel = simpleSelection(start); - this.history = new History(null); - this.id = ++nextDocId; - this.modeOption = mode; - this.lineSep = lineSep; - this.direction = direction == "rtl" ? "rtl" : "ltr"; - this.extend = false; - if (typeof text == "string") { - text = this.splitLines(text); - } - updateDoc(this, { - from: start, - to: start, - text - }); - setSelection(this, simpleSelection(start), sel_dontScroll); - }; - Doc.prototype = createObj(BranchChunk.prototype, { - constructor: Doc, - // Iterate over the document. Supports two forms -- with only one - // argument, it calls that for each line in the document. With - // three, it iterates over the range given by the first two (with - // the second being non-inclusive). - iter: function (from, to, op) { - if (op) { - this.iterN(from - this.first, to - from, op); - } else { - this.iterN(this.first, this.first + this.size, from); - } - }, - // Non-public interface for adding and removing lines. - insert: function (at, lines) { - var height = 0; - for (var i2 = 0; i2 < lines.length; ++i2) { - height += lines[i2].height; - } - this.insertInner(at - this.first, lines, height); - }, - remove: function (at, n) { - this.removeInner(at - this.first, n); - }, - // From here, the methods are part of the public interface. Most - // are also available from CodeMirror (editor) instances. - getValue: function (lineSep) { - var lines = getLines(this, this.first, this.first + this.size); - if (lineSep === false) { - return lines; - } - return lines.join(lineSep || this.lineSeparator()); - }, - setValue: docMethodOp(function (code) { - var top = Pos(this.first, 0), - last = this.first + this.size - 1; - makeChange(this, { - from: top, - to: Pos(last, getLine(this, last).text.length), - text: this.splitLines(code), - origin: "setValue", - full: true - }, true); - if (this.cm) { - scrollToCoords(this.cm, 0, 0); - } - setSelection(this, simpleSelection(top), sel_dontScroll); - }), - replaceRange: function (code, from, to, origin) { - from = clipPos(this, from); - to = to ? clipPos(this, to) : from; - replaceRange(this, code, from, to, origin); - }, - getRange: function (from, to, lineSep) { - var lines = getBetween(this, clipPos(this, from), clipPos(this, to)); - if (lineSep === false) { - return lines; - } - if (lineSep === "") { - return lines.join(""); - } - return lines.join(lineSep || this.lineSeparator()); - }, - getLine: function (line) { - var l = this.getLineHandle(line); - return l && l.text; - }, - getLineHandle: function (line) { - if (isLine(this, line)) { - return getLine(this, line); - } - }, - getLineNumber: function (line) { - return lineNo(line); - }, - getLineHandleVisualStart: function (line) { - if (typeof line == "number") { - line = getLine(this, line); - } - return visualLine(line); - }, - lineCount: function () { - return this.size; - }, - firstLine: function () { - return this.first; - }, - lastLine: function () { - return this.first + this.size - 1; - }, - clipPos: function (pos) { - return clipPos(this, pos); - }, - getCursor: function (start) { - var range2 = this.sel.primary(), - pos; - if (start == null || start == "head") { - pos = range2.head; - } else if (start == "anchor") { - pos = range2.anchor; - } else if (start == "end" || start == "to" || start === false) { - pos = range2.to(); - } else { - pos = range2.from(); - } - return pos; - }, - listSelections: function () { - return this.sel.ranges; - }, - somethingSelected: function () { - return this.sel.somethingSelected(); - }, - setCursor: docMethodOp(function (line, ch, options) { - setSimpleSelection(this, clipPos(this, typeof line == "number" ? Pos(line, ch || 0) : line), null, options); - }), - setSelection: docMethodOp(function (anchor, head, options) { - setSimpleSelection(this, clipPos(this, anchor), clipPos(this, head || anchor), options); - }), - extendSelection: docMethodOp(function (head, other, options) { - extendSelection(this, clipPos(this, head), other && clipPos(this, other), options); - }), - extendSelections: docMethodOp(function (heads, options) { - extendSelections(this, clipPosArray(this, heads), options); - }), - extendSelectionsBy: docMethodOp(function (f, options) { - var heads = map(this.sel.ranges, f); - extendSelections(this, clipPosArray(this, heads), options); - }), - setSelections: docMethodOp(function (ranges, primary, options) { - if (!ranges.length) { - return; - } - var out = []; - for (var i2 = 0; i2 < ranges.length; i2++) { - out[i2] = new Range(clipPos(this, ranges[i2].anchor), clipPos(this, ranges[i2].head || ranges[i2].anchor)); - } - if (primary == null) { - primary = Math.min(ranges.length - 1, this.sel.primIndex); - } - setSelection(this, normalizeSelection(this.cm, out, primary), options); - }), - addSelection: docMethodOp(function (anchor, head, options) { - var ranges = this.sel.ranges.slice(0); - ranges.push(new Range(clipPos(this, anchor), clipPos(this, head || anchor))); - setSelection(this, normalizeSelection(this.cm, ranges, ranges.length - 1), options); - }), - getSelection: function (lineSep) { - var ranges = this.sel.ranges, - lines; - for (var i2 = 0; i2 < ranges.length; i2++) { - var sel = getBetween(this, ranges[i2].from(), ranges[i2].to()); - lines = lines ? lines.concat(sel) : sel; - } - if (lineSep === false) { - return lines; - } else { - return lines.join(lineSep || this.lineSeparator()); - } - }, - getSelections: function (lineSep) { - var parts = [], - ranges = this.sel.ranges; - for (var i2 = 0; i2 < ranges.length; i2++) { - var sel = getBetween(this, ranges[i2].from(), ranges[i2].to()); - if (lineSep !== false) { - sel = sel.join(lineSep || this.lineSeparator()); - } - parts[i2] = sel; - } - return parts; - }, - replaceSelection: function (code, collapse, origin) { - var dup = []; - for (var i2 = 0; i2 < this.sel.ranges.length; i2++) { - dup[i2] = code; - } - this.replaceSelections(dup, collapse, origin || "+input"); - }, - replaceSelections: docMethodOp(function (code, collapse, origin) { - var changes = [], - sel = this.sel; - for (var i2 = 0; i2 < sel.ranges.length; i2++) { - var range2 = sel.ranges[i2]; - changes[i2] = { - from: range2.from(), - to: range2.to(), - text: this.splitLines(code[i2]), - origin - }; - } - var newSel = collapse && collapse != "end" && computeReplacedSel(this, changes, collapse); - for (var i$12 = changes.length - 1; i$12 >= 0; i$12--) { - makeChange(this, changes[i$12]); - } - if (newSel) { - setSelectionReplaceHistory(this, newSel); - } else if (this.cm) { - ensureCursorVisible(this.cm); - } - }), - undo: docMethodOp(function () { - makeChangeFromHistory(this, "undo"); - }), - redo: docMethodOp(function () { - makeChangeFromHistory(this, "redo"); - }), - undoSelection: docMethodOp(function () { - makeChangeFromHistory(this, "undo", true); - }), - redoSelection: docMethodOp(function () { - makeChangeFromHistory(this, "redo", true); - }), - setExtending: function (val) { - this.extend = val; - }, - getExtending: function () { - return this.extend; - }, - historySize: function () { - var hist = this.history, - done = 0, - undone = 0; - for (var i2 = 0; i2 < hist.done.length; i2++) { - if (!hist.done[i2].ranges) { - ++done; - } - } - for (var i$12 = 0; i$12 < hist.undone.length; i$12++) { - if (!hist.undone[i$12].ranges) { - ++undone; - } - } - return { - undo: done, - redo: undone - }; - }, - clearHistory: function () { - var this$1$1 = this; - this.history = new History(this.history); - linkedDocs(this, function (doc) { - return doc.history = this$1$1.history; - }, true); - }, - markClean: function () { - this.cleanGeneration = this.changeGeneration(true); - }, - changeGeneration: function (forceSplit) { - if (forceSplit) { - this.history.lastOp = this.history.lastSelOp = this.history.lastOrigin = null; - } - return this.history.generation; - }, - isClean: function (gen) { - return this.history.generation == (gen || this.cleanGeneration); - }, - getHistory: function () { - return { - done: copyHistoryArray(this.history.done), - undone: copyHistoryArray(this.history.undone) - }; - }, - setHistory: function (histData) { - var hist = this.history = new History(this.history); - hist.done = copyHistoryArray(histData.done.slice(0), null, true); - hist.undone = copyHistoryArray(histData.undone.slice(0), null, true); - }, - setGutterMarker: docMethodOp(function (line, gutterID, value) { - return changeLine(this, line, "gutter", function (line2) { - var markers = line2.gutterMarkers || (line2.gutterMarkers = {}); - markers[gutterID] = value; - if (!value && isEmpty(markers)) { - line2.gutterMarkers = null; - } - return true; - }); - }), - clearGutter: docMethodOp(function (gutterID) { - var this$1$1 = this; - this.iter(function (line) { - if (line.gutterMarkers && line.gutterMarkers[gutterID]) { - changeLine(this$1$1, line, "gutter", function () { - line.gutterMarkers[gutterID] = null; - if (isEmpty(line.gutterMarkers)) { - line.gutterMarkers = null; - } - return true; - }); - } - }); - }), - lineInfo: function (line) { - var n; - if (typeof line == "number") { - if (!isLine(this, line)) { - return null; - } - n = line; - line = getLine(this, line); - if (!line) { - return null; - } - } else { - n = lineNo(line); - if (n == null) { - return null; - } - } - return { - line: n, - handle: line, - text: line.text, - gutterMarkers: line.gutterMarkers, - textClass: line.textClass, - bgClass: line.bgClass, - wrapClass: line.wrapClass, - widgets: line.widgets - }; - }, - addLineClass: docMethodOp(function (handle, where, cls) { - return changeLine(this, handle, where == "gutter" ? "gutter" : "class", function (line) { - var prop2 = where == "text" ? "textClass" : where == "background" ? "bgClass" : where == "gutter" ? "gutterClass" : "wrapClass"; - if (!line[prop2]) { - line[prop2] = cls; - } else if (classTest(cls).test(line[prop2])) { - return false; - } else { - line[prop2] += " " + cls; - } - return true; - }); - }), - removeLineClass: docMethodOp(function (handle, where, cls) { - return changeLine(this, handle, where == "gutter" ? "gutter" : "class", function (line) { - var prop2 = where == "text" ? "textClass" : where == "background" ? "bgClass" : where == "gutter" ? "gutterClass" : "wrapClass"; - var cur = line[prop2]; - if (!cur) { - return false; - } else if (cls == null) { - line[prop2] = null; - } else { - var found = cur.match(classTest(cls)); - if (!found) { - return false; - } - var end = found.index + found[0].length; - line[prop2] = cur.slice(0, found.index) + (!found.index || end == cur.length ? "" : " ") + cur.slice(end) || null; - } - return true; - }); - }), - addLineWidget: docMethodOp(function (handle, node, options) { - return addLineWidget(this, handle, node, options); - }), - removeLineWidget: function (widget) { - widget.clear(); - }, - markText: function (from, to, options) { - return markText(this, clipPos(this, from), clipPos(this, to), options, options && options.type || "range"); - }, - setBookmark: function (pos, options) { - var realOpts = { - replacedWith: options && (options.nodeType == null ? options.widget : options), - insertLeft: options && options.insertLeft, - clearWhenEmpty: false, - shared: options && options.shared, - handleMouseEvents: options && options.handleMouseEvents - }; - pos = clipPos(this, pos); - return markText(this, pos, pos, realOpts, "bookmark"); - }, - findMarksAt: function (pos) { - pos = clipPos(this, pos); - var markers = [], - spans = getLine(this, pos.line).markedSpans; - if (spans) { - for (var i2 = 0; i2 < spans.length; ++i2) { - var span = spans[i2]; - if ((span.from == null || span.from <= pos.ch) && (span.to == null || span.to >= pos.ch)) { - markers.push(span.marker.parent || span.marker); - } - } - } - return markers; - }, - findMarks: function (from, to, filter) { - from = clipPos(this, from); - to = clipPos(this, to); - var found = [], - lineNo2 = from.line; - this.iter(from.line, to.line + 1, function (line) { - var spans = line.markedSpans; - if (spans) { - for (var i2 = 0; i2 < spans.length; i2++) { - var span = spans[i2]; - if (!(span.to != null && lineNo2 == from.line && from.ch >= span.to || span.from == null && lineNo2 != from.line || span.from != null && lineNo2 == to.line && span.from >= to.ch) && (!filter || filter(span.marker))) { - found.push(span.marker.parent || span.marker); - } - } - } - ++lineNo2; - }); - return found; - }, - getAllMarks: function () { - var markers = []; - this.iter(function (line) { - var sps = line.markedSpans; - if (sps) { - for (var i2 = 0; i2 < sps.length; ++i2) { - if (sps[i2].from != null) { - markers.push(sps[i2].marker); - } - } - } - }); - return markers; - }, - posFromIndex: function (off2) { - var ch, - lineNo2 = this.first, - sepSize = this.lineSeparator().length; - this.iter(function (line) { - var sz = line.text.length + sepSize; - if (sz > off2) { - ch = off2; - return true; - } - off2 -= sz; - ++lineNo2; - }); - return clipPos(this, Pos(lineNo2, ch)); - }, - indexFromPos: function (coords) { - coords = clipPos(this, coords); - var index = coords.ch; - if (coords.line < this.first || coords.ch < 0) { - return 0; - } - var sepSize = this.lineSeparator().length; - this.iter(this.first, coords.line, function (line) { - index += line.text.length + sepSize; - }); - return index; - }, - copy: function (copyHistory) { - var doc = new Doc(getLines(this, this.first, this.first + this.size), this.modeOption, this.first, this.lineSep, this.direction); - doc.scrollTop = this.scrollTop; - doc.scrollLeft = this.scrollLeft; - doc.sel = this.sel; - doc.extend = false; - if (copyHistory) { - doc.history.undoDepth = this.history.undoDepth; - doc.setHistory(this.getHistory()); - } - return doc; - }, - linkedDoc: function (options) { - if (!options) { - options = {}; - } - var from = this.first, - to = this.first + this.size; - if (options.from != null && options.from > from) { - from = options.from; - } - if (options.to != null && options.to < to) { - to = options.to; - } - var copy = new Doc(getLines(this, from, to), options.mode || this.modeOption, from, this.lineSep, this.direction); - if (options.sharedHist) { - copy.history = this.history; - } - (this.linked || (this.linked = [])).push({ - doc: copy, - sharedHist: options.sharedHist - }); - copy.linked = [{ - doc: this, - isParent: true, - sharedHist: options.sharedHist - }]; - copySharedMarkers(copy, findSharedMarkers(this)); - return copy; - }, - unlinkDoc: function (other) { - if (other instanceof CodeMirror) { - other = other.doc; - } - if (this.linked) { - for (var i2 = 0; i2 < this.linked.length; ++i2) { - var link = this.linked[i2]; - if (link.doc != other) { - continue; - } - this.linked.splice(i2, 1); - other.unlinkDoc(this); - detachSharedMarkers(findSharedMarkers(this)); - break; - } - } - if (other.history == this.history) { - var splitIds = [other.id]; - linkedDocs(other, function (doc) { - return splitIds.push(doc.id); - }, true); - other.history = new History(null); - other.history.done = copyHistoryArray(this.history.done, splitIds); - other.history.undone = copyHistoryArray(this.history.undone, splitIds); - } - }, - iterLinkedDocs: function (f) { - linkedDocs(this, f); - }, - getMode: function () { - return this.mode; - }, - getEditor: function () { - return this.cm; - }, - splitLines: function (str) { - if (this.lineSep) { - return str.split(this.lineSep); - } - return splitLinesAuto(str); - }, - lineSeparator: function () { - return this.lineSep || "\n"; - }, - setDirection: docMethodOp(function (dir) { - if (dir != "rtl") { - dir = "ltr"; - } - if (dir == this.direction) { - return; - } - this.direction = dir; - this.iter(function (line) { - return line.order = null; - }); - if (this.cm) { - directionChanged(this.cm); - } - }) - }); - Doc.prototype.eachLine = Doc.prototype.iter; - var lastDrop = 0; - function onDrop(e) { - var cm = this; - clearDragCursor(cm); - if (signalDOMEvent(cm, e) || eventInWidget(cm.display, e)) { - return; - } - e_preventDefault(e); - if (ie) { - lastDrop = + /* @__PURE__ */new Date(); - } - var pos = posFromMouse(cm, e, true), - files = e.dataTransfer.files; - if (!pos || cm.isReadOnly()) { - return; - } - if (files && files.length && window.FileReader && window.File) { - var n = files.length, - text = Array(n), - read = 0; - var markAsReadAndPasteIfAllFilesAreRead = function () { - if (++read == n) { - operation(cm, function () { - pos = clipPos(cm.doc, pos); - var change = { - from: pos, - to: pos, - text: cm.doc.splitLines(text.filter(function (t) { - return t != null; - }).join(cm.doc.lineSeparator())), - origin: "paste" - }; - makeChange(cm.doc, change); - setSelectionReplaceHistory(cm.doc, simpleSelection(clipPos(cm.doc, pos), clipPos(cm.doc, changeEnd(change)))); - })(); - } - }; - var readTextFromFile = function (file, i3) { - if (cm.options.allowDropFileTypes && indexOf(cm.options.allowDropFileTypes, file.type) == -1) { - markAsReadAndPasteIfAllFilesAreRead(); - return; - } - var reader = new FileReader(); - reader.onerror = function () { - return markAsReadAndPasteIfAllFilesAreRead(); - }; - reader.onload = function () { - var content = reader.result; - if (/[\x00-\x08\x0e-\x1f]{2}/.test(content)) { - markAsReadAndPasteIfAllFilesAreRead(); - return; - } - text[i3] = content; - markAsReadAndPasteIfAllFilesAreRead(); - }; - reader.readAsText(file); - }; - for (var i2 = 0; i2 < files.length; i2++) { - readTextFromFile(files[i2], i2); - } - } else { - if (cm.state.draggingText && cm.doc.sel.contains(pos) > -1) { - cm.state.draggingText(e); - setTimeout(function () { - return cm.display.input.focus(); - }, 20); - return; - } - try { - var text$1 = e.dataTransfer.getData("Text"); - if (text$1) { - var selected; - if (cm.state.draggingText && !cm.state.draggingText.copy) { - selected = cm.listSelections(); - } - setSelectionNoUndo(cm.doc, simpleSelection(pos, pos)); - if (selected) { - for (var i$12 = 0; i$12 < selected.length; ++i$12) { - replaceRange(cm.doc, "", selected[i$12].anchor, selected[i$12].head, "drag"); - } - } - cm.replaceSelection(text$1, "around", "paste"); - cm.display.input.focus(); - } - } catch (e$1) {} - } - } - function onDragStart(cm, e) { - if (ie && (!cm.state.draggingText || + /* @__PURE__ */new Date() - lastDrop < 100)) { - e_stop(e); - return; - } - if (signalDOMEvent(cm, e) || eventInWidget(cm.display, e)) { - return; - } - e.dataTransfer.setData("Text", cm.getSelection()); - e.dataTransfer.effectAllowed = "copyMove"; - if (e.dataTransfer.setDragImage && !safari) { - var img = elt("img", null, null, "position: fixed; left: 0; top: 0;"); - img.src = "data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw=="; - if (presto) { - img.width = img.height = 1; - cm.display.wrapper.appendChild(img); - img._top = img.offsetTop; - } - e.dataTransfer.setDragImage(img, 0, 0); - if (presto) { - img.parentNode.removeChild(img); - } - } - } - function onDragOver(cm, e) { - var pos = posFromMouse(cm, e); - if (!pos) { - return; - } - var frag = document.createDocumentFragment(); - drawSelectionCursor(cm, pos, frag); - if (!cm.display.dragCursor) { - cm.display.dragCursor = elt("div", null, "CodeMirror-cursors CodeMirror-dragcursors"); - cm.display.lineSpace.insertBefore(cm.display.dragCursor, cm.display.cursorDiv); - } - removeChildrenAndAdd(cm.display.dragCursor, frag); - } - function clearDragCursor(cm) { - if (cm.display.dragCursor) { - cm.display.lineSpace.removeChild(cm.display.dragCursor); - cm.display.dragCursor = null; - } - } - function forEachCodeMirror(f) { - if (!document.getElementsByClassName) { - return; - } - var byClass = document.getElementsByClassName("CodeMirror"), - editors = []; - for (var i2 = 0; i2 < byClass.length; i2++) { - var cm = byClass[i2].CodeMirror; - if (cm) { - editors.push(cm); - } - } - if (editors.length) { - editors[0].operation(function () { - for (var i3 = 0; i3 < editors.length; i3++) { - f(editors[i3]); - } - }); - } - } - var globalsRegistered = false; - function ensureGlobalHandlers() { - if (globalsRegistered) { - return; - } - registerGlobalHandlers(); - globalsRegistered = true; - } - function registerGlobalHandlers() { - var resizeTimer; - on(window, "resize", function () { - if (resizeTimer == null) { - resizeTimer = setTimeout(function () { - resizeTimer = null; - forEachCodeMirror(onResize); - }, 100); - } - }); - on(window, "blur", function () { - return forEachCodeMirror(onBlur); - }); - } - function onResize(cm) { - var d = cm.display; - d.cachedCharWidth = d.cachedTextHeight = d.cachedPaddingH = null; - d.scrollbarsClipped = false; - cm.setSize(); - } - var keyNames = { - 3: "Pause", - 8: "Backspace", - 9: "Tab", - 13: "Enter", - 16: "Shift", - 17: "Ctrl", - 18: "Alt", - 19: "Pause", - 20: "CapsLock", - 27: "Esc", - 32: "Space", - 33: "PageUp", - 34: "PageDown", - 35: "End", - 36: "Home", - 37: "Left", - 38: "Up", - 39: "Right", - 40: "Down", - 44: "PrintScrn", - 45: "Insert", - 46: "Delete", - 59: ";", - 61: "=", - 91: "Mod", - 92: "Mod", - 93: "Mod", - 106: "*", - 107: "=", - 109: "-", - 110: ".", - 111: "/", - 145: "ScrollLock", - 173: "-", - 186: ";", - 187: "=", - 188: ",", - 189: "-", - 190: ".", - 191: "/", - 192: "`", - 219: "[", - 220: "\\", - 221: "]", - 222: "'", - 224: "Mod", - 63232: "Up", - 63233: "Down", - 63234: "Left", - 63235: "Right", - 63272: "Delete", - 63273: "Home", - 63275: "End", - 63276: "PageUp", - 63277: "PageDown", - 63302: "Insert" - }; - for (var i = 0; i < 10; i++) { - keyNames[i + 48] = keyNames[i + 96] = String(i); - } - for (var i$1 = 65; i$1 <= 90; i$1++) { - keyNames[i$1] = String.fromCharCode(i$1); - } - for (var i$2 = 1; i$2 <= 12; i$2++) { - keyNames[i$2 + 111] = keyNames[i$2 + 63235] = "F" + i$2; - } - var keyMap = {}; - keyMap.basic = { - "Left": "goCharLeft", - "Right": "goCharRight", - "Up": "goLineUp", - "Down": "goLineDown", - "End": "goLineEnd", - "Home": "goLineStartSmart", - "PageUp": "goPageUp", - "PageDown": "goPageDown", - "Delete": "delCharAfter", - "Backspace": "delCharBefore", - "Shift-Backspace": "delCharBefore", - "Tab": "defaultTab", - "Shift-Tab": "indentAuto", - "Enter": "newlineAndIndent", - "Insert": "toggleOverwrite", - "Esc": "singleSelection" - }; - keyMap.pcDefault = { - "Ctrl-A": "selectAll", - "Ctrl-D": "deleteLine", - "Ctrl-Z": "undo", - "Shift-Ctrl-Z": "redo", - "Ctrl-Y": "redo", - "Ctrl-Home": "goDocStart", - "Ctrl-End": "goDocEnd", - "Ctrl-Up": "goLineUp", - "Ctrl-Down": "goLineDown", - "Ctrl-Left": "goGroupLeft", - "Ctrl-Right": "goGroupRight", - "Alt-Left": "goLineStart", - "Alt-Right": "goLineEnd", - "Ctrl-Backspace": "delGroupBefore", - "Ctrl-Delete": "delGroupAfter", - "Ctrl-S": "save", - "Ctrl-F": "find", - "Ctrl-G": "findNext", - "Shift-Ctrl-G": "findPrev", - "Shift-Ctrl-F": "replace", - "Shift-Ctrl-R": "replaceAll", - "Ctrl-[": "indentLess", - "Ctrl-]": "indentMore", - "Ctrl-U": "undoSelection", - "Shift-Ctrl-U": "redoSelection", - "Alt-U": "redoSelection", - "fallthrough": "basic" - }; - keyMap.emacsy = { - "Ctrl-F": "goCharRight", - "Ctrl-B": "goCharLeft", - "Ctrl-P": "goLineUp", - "Ctrl-N": "goLineDown", - "Ctrl-A": "goLineStart", - "Ctrl-E": "goLineEnd", - "Ctrl-V": "goPageDown", - "Shift-Ctrl-V": "goPageUp", - "Ctrl-D": "delCharAfter", - "Ctrl-H": "delCharBefore", - "Alt-Backspace": "delWordBefore", - "Ctrl-K": "killLine", - "Ctrl-T": "transposeChars", - "Ctrl-O": "openLine" - }; - keyMap.macDefault = { - "Cmd-A": "selectAll", - "Cmd-D": "deleteLine", - "Cmd-Z": "undo", - "Shift-Cmd-Z": "redo", - "Cmd-Y": "redo", - "Cmd-Home": "goDocStart", - "Cmd-Up": "goDocStart", - "Cmd-End": "goDocEnd", - "Cmd-Down": "goDocEnd", - "Alt-Left": "goGroupLeft", - "Alt-Right": "goGroupRight", - "Cmd-Left": "goLineLeft", - "Cmd-Right": "goLineRight", - "Alt-Backspace": "delGroupBefore", - "Ctrl-Alt-Backspace": "delGroupAfter", - "Alt-Delete": "delGroupAfter", - "Cmd-S": "save", - "Cmd-F": "find", - "Cmd-G": "findNext", - "Shift-Cmd-G": "findPrev", - "Cmd-Alt-F": "replace", - "Shift-Cmd-Alt-F": "replaceAll", - "Cmd-[": "indentLess", - "Cmd-]": "indentMore", - "Cmd-Backspace": "delWrappedLineLeft", - "Cmd-Delete": "delWrappedLineRight", - "Cmd-U": "undoSelection", - "Shift-Cmd-U": "redoSelection", - "Ctrl-Up": "goDocStart", - "Ctrl-Down": "goDocEnd", - "fallthrough": ["basic", "emacsy"] - }; - keyMap["default"] = mac ? keyMap.macDefault : keyMap.pcDefault; - function normalizeKeyName(name) { - var parts = name.split(/-(?!$)/); - name = parts[parts.length - 1]; - var alt, ctrl, shift, cmd; - for (var i2 = 0; i2 < parts.length - 1; i2++) { - var mod = parts[i2]; - if (/^(cmd|meta|m)$/i.test(mod)) { - cmd = true; - } else if (/^a(lt)?$/i.test(mod)) { - alt = true; - } else if (/^(c|ctrl|control)$/i.test(mod)) { - ctrl = true; - } else if (/^s(hift)?$/i.test(mod)) { - shift = true; - } else { - throw new Error("Unrecognized modifier name: " + mod); - } - } - if (alt) { - name = "Alt-" + name; - } - if (ctrl) { - name = "Ctrl-" + name; - } - if (cmd) { - name = "Cmd-" + name; - } - if (shift) { - name = "Shift-" + name; - } - return name; - } - function normalizeKeyMap(keymap) { - var copy = {}; - for (var keyname in keymap) { - if (keymap.hasOwnProperty(keyname)) { - var value = keymap[keyname]; - if (/^(name|fallthrough|(de|at)tach)$/.test(keyname)) { - continue; - } - if (value == "...") { - delete keymap[keyname]; - continue; - } - var keys = map(keyname.split(" "), normalizeKeyName); - for (var i2 = 0; i2 < keys.length; i2++) { - var val = void 0, - name = void 0; - if (i2 == keys.length - 1) { - name = keys.join(" "); - val = value; - } else { - name = keys.slice(0, i2 + 1).join(" "); - val = "..."; - } - var prev = copy[name]; - if (!prev) { - copy[name] = val; - } else if (prev != val) { - throw new Error("Inconsistent bindings for " + name); - } - } - delete keymap[keyname]; - } - } - for (var prop2 in copy) { - keymap[prop2] = copy[prop2]; - } - return keymap; - } - function lookupKey(key, map2, handle, context) { - map2 = getKeyMap(map2); - var found = map2.call ? map2.call(key, context) : map2[key]; - if (found === false) { - return "nothing"; - } - if (found === "...") { - return "multi"; - } - if (found != null && handle(found)) { - return "handled"; - } - if (map2.fallthrough) { - if (Object.prototype.toString.call(map2.fallthrough) != "[object Array]") { - return lookupKey(key, map2.fallthrough, handle, context); - } - for (var i2 = 0; i2 < map2.fallthrough.length; i2++) { - var result = lookupKey(key, map2.fallthrough[i2], handle, context); - if (result) { - return result; - } - } - } - } - function isModifierKey(value) { - var name = typeof value == "string" ? value : keyNames[value.keyCode]; - return name == "Ctrl" || name == "Alt" || name == "Shift" || name == "Mod"; - } - function addModifierNames(name, event, noShift) { - var base = name; - if (event.altKey && base != "Alt") { - name = "Alt-" + name; - } - if ((flipCtrlCmd ? event.metaKey : event.ctrlKey) && base != "Ctrl") { - name = "Ctrl-" + name; - } - if ((flipCtrlCmd ? event.ctrlKey : event.metaKey) && base != "Mod") { - name = "Cmd-" + name; - } - if (!noShift && event.shiftKey && base != "Shift") { - name = "Shift-" + name; - } - return name; - } - function keyName(event, noShift) { - if (presto && event.keyCode == 34 && event["char"]) { - return false; - } - var name = keyNames[event.keyCode]; - if (name == null || event.altGraphKey) { - return false; - } - if (event.keyCode == 3 && event.code) { - name = event.code; - } - return addModifierNames(name, event, noShift); - } - function getKeyMap(val) { - return typeof val == "string" ? keyMap[val] : val; - } - function deleteNearSelection(cm, compute) { - var ranges = cm.doc.sel.ranges, - kill = []; - for (var i2 = 0; i2 < ranges.length; i2++) { - var toKill = compute(ranges[i2]); - while (kill.length && cmp(toKill.from, lst(kill).to) <= 0) { - var replaced = kill.pop(); - if (cmp(replaced.from, toKill.from) < 0) { - toKill.from = replaced.from; - break; - } - } - kill.push(toKill); - } - runInOp(cm, function () { - for (var i3 = kill.length - 1; i3 >= 0; i3--) { - replaceRange(cm.doc, "", kill[i3].from, kill[i3].to, "+delete"); - } - ensureCursorVisible(cm); - }); - } - function moveCharLogically(line, ch, dir) { - var target = skipExtendingChars(line.text, ch + dir, dir); - return target < 0 || target > line.text.length ? null : target; - } - function moveLogically(line, start, dir) { - var ch = moveCharLogically(line, start.ch, dir); - return ch == null ? null : new Pos(start.line, ch, dir < 0 ? "after" : "before"); - } - function endOfLine(visually, cm, lineObj, lineNo2, dir) { - if (visually) { - if (cm.doc.direction == "rtl") { - dir = -dir; - } - var order = getOrder(lineObj, cm.doc.direction); - if (order) { - var part = dir < 0 ? lst(order) : order[0]; - var moveInStorageOrder = dir < 0 == (part.level == 1); - var sticky = moveInStorageOrder ? "after" : "before"; - var ch; - if (part.level > 0 || cm.doc.direction == "rtl") { - var prep = prepareMeasureForLine(cm, lineObj); - ch = dir < 0 ? lineObj.text.length - 1 : 0; - var targetTop = measureCharPrepared(cm, prep, ch).top; - ch = findFirst(function (ch2) { - return measureCharPrepared(cm, prep, ch2).top == targetTop; - }, dir < 0 == (part.level == 1) ? part.from : part.to - 1, ch); - if (sticky == "before") { - ch = moveCharLogically(lineObj, ch, 1); - } - } else { - ch = dir < 0 ? part.to : part.from; - } - return new Pos(lineNo2, ch, sticky); - } - } - return new Pos(lineNo2, dir < 0 ? lineObj.text.length : 0, dir < 0 ? "before" : "after"); - } - function moveVisually(cm, line, start, dir) { - var bidi = getOrder(line, cm.doc.direction); - if (!bidi) { - return moveLogically(line, start, dir); - } - if (start.ch >= line.text.length) { - start.ch = line.text.length; - start.sticky = "before"; - } else if (start.ch <= 0) { - start.ch = 0; - start.sticky = "after"; - } - var partPos = getBidiPartAt(bidi, start.ch, start.sticky), - part = bidi[partPos]; - if (cm.doc.direction == "ltr" && part.level % 2 == 0 && (dir > 0 ? part.to > start.ch : part.from < start.ch)) { - return moveLogically(line, start, dir); - } - var mv = function (pos, dir2) { - return moveCharLogically(line, pos instanceof Pos ? pos.ch : pos, dir2); - }; - var prep; - var getWrappedLineExtent = function (ch2) { - if (!cm.options.lineWrapping) { - return { - begin: 0, - end: line.text.length - }; - } - prep = prep || prepareMeasureForLine(cm, line); - return wrappedLineExtentChar(cm, line, prep, ch2); - }; - var wrappedLineExtent2 = getWrappedLineExtent(start.sticky == "before" ? mv(start, -1) : start.ch); - if (cm.doc.direction == "rtl" || part.level == 1) { - var moveInStorageOrder = part.level == 1 == dir < 0; - var ch = mv(start, moveInStorageOrder ? 1 : -1); - if (ch != null && (!moveInStorageOrder ? ch >= part.from && ch >= wrappedLineExtent2.begin : ch <= part.to && ch <= wrappedLineExtent2.end)) { - var sticky = moveInStorageOrder ? "before" : "after"; - return new Pos(start.line, ch, sticky); - } - } - var searchInVisualLine = function (partPos2, dir2, wrappedLineExtent3) { - var getRes = function (ch3, moveInStorageOrder3) { - return moveInStorageOrder3 ? new Pos(start.line, mv(ch3, 1), "before") : new Pos(start.line, ch3, "after"); - }; - for (; partPos2 >= 0 && partPos2 < bidi.length; partPos2 += dir2) { - var part2 = bidi[partPos2]; - var moveInStorageOrder2 = dir2 > 0 == (part2.level != 1); - var ch2 = moveInStorageOrder2 ? wrappedLineExtent3.begin : mv(wrappedLineExtent3.end, -1); - if (part2.from <= ch2 && ch2 < part2.to) { - return getRes(ch2, moveInStorageOrder2); - } - ch2 = moveInStorageOrder2 ? part2.from : mv(part2.to, -1); - if (wrappedLineExtent3.begin <= ch2 && ch2 < wrappedLineExtent3.end) { - return getRes(ch2, moveInStorageOrder2); - } - } - }; - var res = searchInVisualLine(partPos + dir, dir, wrappedLineExtent2); - if (res) { - return res; - } - var nextCh = dir > 0 ? wrappedLineExtent2.end : mv(wrappedLineExtent2.begin, -1); - if (nextCh != null && !(dir > 0 && nextCh == line.text.length)) { - res = searchInVisualLine(dir > 0 ? 0 : bidi.length - 1, dir, getWrappedLineExtent(nextCh)); - if (res) { - return res; - } - } - return null; - } - var commands = { - selectAll, - singleSelection: function (cm) { - return cm.setSelection(cm.getCursor("anchor"), cm.getCursor("head"), sel_dontScroll); - }, - killLine: function (cm) { - return deleteNearSelection(cm, function (range2) { - if (range2.empty()) { - var len = getLine(cm.doc, range2.head.line).text.length; - if (range2.head.ch == len && range2.head.line < cm.lastLine()) { - return { - from: range2.head, - to: Pos(range2.head.line + 1, 0) - }; - } else { - return { - from: range2.head, - to: Pos(range2.head.line, len) - }; - } - } else { - return { - from: range2.from(), - to: range2.to() - }; - } - }); - }, - deleteLine: function (cm) { - return deleteNearSelection(cm, function (range2) { - return { - from: Pos(range2.from().line, 0), - to: clipPos(cm.doc, Pos(range2.to().line + 1, 0)) - }; - }); - }, - delLineLeft: function (cm) { - return deleteNearSelection(cm, function (range2) { - return { - from: Pos(range2.from().line, 0), - to: range2.from() - }; - }); - }, - delWrappedLineLeft: function (cm) { - return deleteNearSelection(cm, function (range2) { - var top = cm.charCoords(range2.head, "div").top + 5; - var leftPos = cm.coordsChar({ - left: 0, - top - }, "div"); - return { - from: leftPos, - to: range2.from() - }; - }); - }, - delWrappedLineRight: function (cm) { - return deleteNearSelection(cm, function (range2) { - var top = cm.charCoords(range2.head, "div").top + 5; - var rightPos = cm.coordsChar({ - left: cm.display.lineDiv.offsetWidth + 100, - top - }, "div"); - return { - from: range2.from(), - to: rightPos - }; - }); - }, - undo: function (cm) { - return cm.undo(); - }, - redo: function (cm) { - return cm.redo(); - }, - undoSelection: function (cm) { - return cm.undoSelection(); - }, - redoSelection: function (cm) { - return cm.redoSelection(); - }, - goDocStart: function (cm) { - return cm.extendSelection(Pos(cm.firstLine(), 0)); - }, - goDocEnd: function (cm) { - return cm.extendSelection(Pos(cm.lastLine())); - }, - goLineStart: function (cm) { - return cm.extendSelectionsBy(function (range2) { - return lineStart(cm, range2.head.line); - }, { - origin: "+move", - bias: 1 - }); - }, - goLineStartSmart: function (cm) { - return cm.extendSelectionsBy(function (range2) { - return lineStartSmart(cm, range2.head); - }, { - origin: "+move", - bias: 1 - }); - }, - goLineEnd: function (cm) { - return cm.extendSelectionsBy(function (range2) { - return lineEnd(cm, range2.head.line); - }, { - origin: "+move", - bias: -1 - }); - }, - goLineRight: function (cm) { - return cm.extendSelectionsBy(function (range2) { - var top = cm.cursorCoords(range2.head, "div").top + 5; - return cm.coordsChar({ - left: cm.display.lineDiv.offsetWidth + 100, - top - }, "div"); - }, sel_move); - }, - goLineLeft: function (cm) { - return cm.extendSelectionsBy(function (range2) { - var top = cm.cursorCoords(range2.head, "div").top + 5; - return cm.coordsChar({ - left: 0, - top - }, "div"); - }, sel_move); - }, - goLineLeftSmart: function (cm) { - return cm.extendSelectionsBy(function (range2) { - var top = cm.cursorCoords(range2.head, "div").top + 5; - var pos = cm.coordsChar({ - left: 0, - top - }, "div"); - if (pos.ch < cm.getLine(pos.line).search(/\S/)) { - return lineStartSmart(cm, range2.head); - } - return pos; - }, sel_move); - }, - goLineUp: function (cm) { - return cm.moveV(-1, "line"); - }, - goLineDown: function (cm) { - return cm.moveV(1, "line"); - }, - goPageUp: function (cm) { - return cm.moveV(-1, "page"); - }, - goPageDown: function (cm) { - return cm.moveV(1, "page"); - }, - goCharLeft: function (cm) { - return cm.moveH(-1, "char"); - }, - goCharRight: function (cm) { - return cm.moveH(1, "char"); - }, - goColumnLeft: function (cm) { - return cm.moveH(-1, "column"); - }, - goColumnRight: function (cm) { - return cm.moveH(1, "column"); - }, - goWordLeft: function (cm) { - return cm.moveH(-1, "word"); - }, - goGroupRight: function (cm) { - return cm.moveH(1, "group"); - }, - goGroupLeft: function (cm) { - return cm.moveH(-1, "group"); - }, - goWordRight: function (cm) { - return cm.moveH(1, "word"); - }, - delCharBefore: function (cm) { - return cm.deleteH(-1, "codepoint"); - }, - delCharAfter: function (cm) { - return cm.deleteH(1, "char"); - }, - delWordBefore: function (cm) { - return cm.deleteH(-1, "word"); - }, - delWordAfter: function (cm) { - return cm.deleteH(1, "word"); - }, - delGroupBefore: function (cm) { - return cm.deleteH(-1, "group"); - }, - delGroupAfter: function (cm) { - return cm.deleteH(1, "group"); - }, - indentAuto: function (cm) { - return cm.indentSelection("smart"); - }, - indentMore: function (cm) { - return cm.indentSelection("add"); - }, - indentLess: function (cm) { - return cm.indentSelection("subtract"); - }, - insertTab: function (cm) { - return cm.replaceSelection(" "); - }, - insertSoftTab: function (cm) { - var spaces = [], - ranges = cm.listSelections(), - tabSize = cm.options.tabSize; - for (var i2 = 0; i2 < ranges.length; i2++) { - var pos = ranges[i2].from(); - var col = countColumn(cm.getLine(pos.line), pos.ch, tabSize); - spaces.push(spaceStr(tabSize - col % tabSize)); - } - cm.replaceSelections(spaces); - }, - defaultTab: function (cm) { - if (cm.somethingSelected()) { - cm.indentSelection("add"); - } else { - cm.execCommand("insertTab"); - } - }, - // Swap the two chars left and right of each selection's head. - // Move cursor behind the two swapped characters afterwards. - // - // Doesn't consider line feeds a character. - // Doesn't scan more than one line above to find a character. - // Doesn't do anything on an empty line. - // Doesn't do anything with non-empty selections. - transposeChars: function (cm) { - return runInOp(cm, function () { - var ranges = cm.listSelections(), - newSel = []; - for (var i2 = 0; i2 < ranges.length; i2++) { - if (!ranges[i2].empty()) { - continue; - } - var cur = ranges[i2].head, - line = getLine(cm.doc, cur.line).text; - if (line) { - if (cur.ch == line.length) { - cur = new Pos(cur.line, cur.ch - 1); - } - if (cur.ch > 0) { - cur = new Pos(cur.line, cur.ch + 1); - cm.replaceRange(line.charAt(cur.ch - 1) + line.charAt(cur.ch - 2), Pos(cur.line, cur.ch - 2), cur, "+transpose"); - } else if (cur.line > cm.doc.first) { - var prev = getLine(cm.doc, cur.line - 1).text; - if (prev) { - cur = new Pos(cur.line, 1); - cm.replaceRange(line.charAt(0) + cm.doc.lineSeparator() + prev.charAt(prev.length - 1), Pos(cur.line - 1, prev.length - 1), cur, "+transpose"); - } - } - } - newSel.push(new Range(cur, cur)); - } - cm.setSelections(newSel); - }); - }, - newlineAndIndent: function (cm) { - return runInOp(cm, function () { - var sels = cm.listSelections(); - for (var i2 = sels.length - 1; i2 >= 0; i2--) { - cm.replaceRange(cm.doc.lineSeparator(), sels[i2].anchor, sels[i2].head, "+input"); - } - sels = cm.listSelections(); - for (var i$12 = 0; i$12 < sels.length; i$12++) { - cm.indentLine(sels[i$12].from().line, null, true); - } - ensureCursorVisible(cm); - }); - }, - openLine: function (cm) { - return cm.replaceSelection("\n", "start"); - }, - toggleOverwrite: function (cm) { - return cm.toggleOverwrite(); - } - }; - function lineStart(cm, lineN) { - var line = getLine(cm.doc, lineN); - var visual = visualLine(line); - if (visual != line) { - lineN = lineNo(visual); - } - return endOfLine(true, cm, visual, lineN, 1); - } - function lineEnd(cm, lineN) { - var line = getLine(cm.doc, lineN); - var visual = visualLineEnd(line); - if (visual != line) { - lineN = lineNo(visual); - } - return endOfLine(true, cm, line, lineN, -1); - } - function lineStartSmart(cm, pos) { - var start = lineStart(cm, pos.line); - var line = getLine(cm.doc, start.line); - var order = getOrder(line, cm.doc.direction); - if (!order || order[0].level == 0) { - var firstNonWS = Math.max(start.ch, line.text.search(/\S/)); - var inWS = pos.line == start.line && pos.ch <= firstNonWS && pos.ch; - return Pos(start.line, inWS ? 0 : firstNonWS, start.sticky); - } - return start; - } - function doHandleBinding(cm, bound, dropShift) { - if (typeof bound == "string") { - bound = commands[bound]; - if (!bound) { - return false; - } - } - cm.display.input.ensurePolled(); - var prevShift = cm.display.shift, - done = false; - try { - if (cm.isReadOnly()) { - cm.state.suppressEdits = true; - } - if (dropShift) { - cm.display.shift = false; - } - done = bound(cm) != Pass; - } finally { - cm.display.shift = prevShift; - cm.state.suppressEdits = false; - } - return done; - } - function lookupKeyForEditor(cm, name, handle) { - for (var i2 = 0; i2 < cm.state.keyMaps.length; i2++) { - var result = lookupKey(name, cm.state.keyMaps[i2], handle, cm); - if (result) { - return result; - } - } - return cm.options.extraKeys && lookupKey(name, cm.options.extraKeys, handle, cm) || lookupKey(name, cm.options.keyMap, handle, cm); - } - var stopSeq = new Delayed(); - function dispatchKey(cm, name, e, handle) { - var seq = cm.state.keySeq; - if (seq) { - if (isModifierKey(name)) { - return "handled"; - } - if (/\'$/.test(name)) { - cm.state.keySeq = null; - } else { - stopSeq.set(50, function () { - if (cm.state.keySeq == seq) { - cm.state.keySeq = null; - cm.display.input.reset(); - } - }); - } - if (dispatchKeyInner(cm, seq + " " + name, e, handle)) { - return true; - } - } - return dispatchKeyInner(cm, name, e, handle); - } - function dispatchKeyInner(cm, name, e, handle) { - var result = lookupKeyForEditor(cm, name, handle); - if (result == "multi") { - cm.state.keySeq = name; - } - if (result == "handled") { - signalLater(cm, "keyHandled", cm, name, e); - } - if (result == "handled" || result == "multi") { - e_preventDefault(e); - restartBlink(cm); - } - return !!result; - } - function handleKeyBinding(cm, e) { - var name = keyName(e, true); - if (!name) { - return false; - } - if (e.shiftKey && !cm.state.keySeq) { - return dispatchKey(cm, "Shift-" + name, e, function (b) { - return doHandleBinding(cm, b, true); - }) || dispatchKey(cm, name, e, function (b) { - if (typeof b == "string" ? /^go[A-Z]/.test(b) : b.motion) { - return doHandleBinding(cm, b); - } - }); - } else { - return dispatchKey(cm, name, e, function (b) { - return doHandleBinding(cm, b); - }); - } - } - function handleCharBinding(cm, e, ch) { - return dispatchKey(cm, "'" + ch + "'", e, function (b) { - return doHandleBinding(cm, b, true); - }); - } - var lastStoppedKey = null; - function onKeyDown(e) { - var cm = this; - if (e.target && e.target != cm.display.input.getField()) { - return; - } - cm.curOp.focus = activeElt(); - if (signalDOMEvent(cm, e)) { - return; - } - if (ie && ie_version < 11 && e.keyCode == 27) { - e.returnValue = false; - } - var code = e.keyCode; - cm.display.shift = code == 16 || e.shiftKey; - var handled = handleKeyBinding(cm, e); - if (presto) { - lastStoppedKey = handled ? code : null; - if (!handled && code == 88 && !hasCopyEvent && (mac ? e.metaKey : e.ctrlKey)) { - cm.replaceSelection("", null, "cut"); - } - } - if (gecko && !mac && !handled && code == 46 && e.shiftKey && !e.ctrlKey && document.execCommand) { - document.execCommand("cut"); - } - if (code == 18 && !/\bCodeMirror-crosshair\b/.test(cm.display.lineDiv.className)) { - showCrossHair(cm); - } - } - function showCrossHair(cm) { - var lineDiv = cm.display.lineDiv; - addClass(lineDiv, "CodeMirror-crosshair"); - function up(e) { - if (e.keyCode == 18 || !e.altKey) { - rmClass(lineDiv, "CodeMirror-crosshair"); - off(document, "keyup", up); - off(document, "mouseover", up); - } - } - on(document, "keyup", up); - on(document, "mouseover", up); - } - function onKeyUp(e) { - if (e.keyCode == 16) { - this.doc.sel.shift = false; - } - signalDOMEvent(this, e); - } - function onKeyPress(e) { - var cm = this; - if (e.target && e.target != cm.display.input.getField()) { - return; - } - if (eventInWidget(cm.display, e) || signalDOMEvent(cm, e) || e.ctrlKey && !e.altKey || mac && e.metaKey) { - return; - } - var keyCode = e.keyCode, - charCode = e.charCode; - if (presto && keyCode == lastStoppedKey) { - lastStoppedKey = null; - e_preventDefault(e); - return; - } - if (presto && (!e.which || e.which < 10) && handleKeyBinding(cm, e)) { - return; - } - var ch = String.fromCharCode(charCode == null ? keyCode : charCode); - if (ch == "\b") { - return; - } - if (handleCharBinding(cm, e, ch)) { - return; - } - cm.display.input.onKeyPress(e); - } - var DOUBLECLICK_DELAY = 400; - var PastClick = function (time, pos, button) { - this.time = time; - this.pos = pos; - this.button = button; - }; - PastClick.prototype.compare = function (time, pos, button) { - return this.time + DOUBLECLICK_DELAY > time && cmp(pos, this.pos) == 0 && button == this.button; - }; - var lastClick, lastDoubleClick; - function clickRepeat(pos, button) { - var now = + /* @__PURE__ */new Date(); - if (lastDoubleClick && lastDoubleClick.compare(now, pos, button)) { - lastClick = lastDoubleClick = null; - return "triple"; - } else if (lastClick && lastClick.compare(now, pos, button)) { - lastDoubleClick = new PastClick(now, pos, button); - lastClick = null; - return "double"; - } else { - lastClick = new PastClick(now, pos, button); - lastDoubleClick = null; - return "single"; - } - } - function onMouseDown(e) { - var cm = this, - display = cm.display; - if (signalDOMEvent(cm, e) || display.activeTouch && display.input.supportsTouch()) { - return; - } - display.input.ensurePolled(); - display.shift = e.shiftKey; - if (eventInWidget(display, e)) { - if (!webkit) { - display.scroller.draggable = false; - setTimeout(function () { - return display.scroller.draggable = true; - }, 100); - } - return; - } - if (clickInGutter(cm, e)) { - return; - } - var pos = posFromMouse(cm, e), - button = e_button(e), - repeat = pos ? clickRepeat(pos, button) : "single"; - window.focus(); - if (button == 1 && cm.state.selectingText) { - cm.state.selectingText(e); - } - if (pos && handleMappedButton(cm, button, pos, repeat, e)) { - return; - } - if (button == 1) { - if (pos) { - leftButtonDown(cm, pos, repeat, e); - } else if (e_target(e) == display.scroller) { - e_preventDefault(e); - } - } else if (button == 2) { - if (pos) { - extendSelection(cm.doc, pos); - } - setTimeout(function () { - return display.input.focus(); - }, 20); - } else if (button == 3) { - if (captureRightClick) { - cm.display.input.onContextMenu(e); - } else { - delayBlurEvent(cm); - } - } - } - function handleMappedButton(cm, button, pos, repeat, event) { - var name = "Click"; - if (repeat == "double") { - name = "Double" + name; - } else if (repeat == "triple") { - name = "Triple" + name; - } - name = (button == 1 ? "Left" : button == 2 ? "Middle" : "Right") + name; - return dispatchKey(cm, addModifierNames(name, event), event, function (bound) { - if (typeof bound == "string") { - bound = commands[bound]; - } - if (!bound) { - return false; - } - var done = false; - try { - if (cm.isReadOnly()) { - cm.state.suppressEdits = true; - } - done = bound(cm, pos) != Pass; - } finally { - cm.state.suppressEdits = false; - } - return done; - }); - } - function configureMouse(cm, repeat, event) { - var option = cm.getOption("configureMouse"); - var value = option ? option(cm, repeat, event) : {}; - if (value.unit == null) { - var rect = chromeOS ? event.shiftKey && event.metaKey : event.altKey; - value.unit = rect ? "rectangle" : repeat == "single" ? "char" : repeat == "double" ? "word" : "line"; - } - if (value.extend == null || cm.doc.extend) { - value.extend = cm.doc.extend || event.shiftKey; - } - if (value.addNew == null) { - value.addNew = mac ? event.metaKey : event.ctrlKey; - } - if (value.moveOnDrag == null) { - value.moveOnDrag = !(mac ? event.altKey : event.ctrlKey); - } - return value; - } - function leftButtonDown(cm, pos, repeat, event) { - if (ie) { - setTimeout(bind(ensureFocus, cm), 0); - } else { - cm.curOp.focus = activeElt(); - } - var behavior = configureMouse(cm, repeat, event); - var sel = cm.doc.sel, - contained; - if (cm.options.dragDrop && dragAndDrop && !cm.isReadOnly() && repeat == "single" && (contained = sel.contains(pos)) > -1 && (cmp((contained = sel.ranges[contained]).from(), pos) < 0 || pos.xRel > 0) && (cmp(contained.to(), pos) > 0 || pos.xRel < 0)) { - leftButtonStartDrag(cm, event, pos, behavior); - } else { - leftButtonSelect(cm, event, pos, behavior); - } - } - function leftButtonStartDrag(cm, event, pos, behavior) { - var display = cm.display, - moved = false; - var dragEnd = operation(cm, function (e) { - if (webkit) { - display.scroller.draggable = false; - } - cm.state.draggingText = false; - if (cm.state.delayingBlurEvent) { - if (cm.hasFocus()) { - cm.state.delayingBlurEvent = false; - } else { - delayBlurEvent(cm); - } - } - off(display.wrapper.ownerDocument, "mouseup", dragEnd); - off(display.wrapper.ownerDocument, "mousemove", mouseMove); - off(display.scroller, "dragstart", dragStart); - off(display.scroller, "drop", dragEnd); - if (!moved) { - e_preventDefault(e); - if (!behavior.addNew) { - extendSelection(cm.doc, pos, null, null, behavior.extend); - } - if (webkit && !safari || ie && ie_version == 9) { - setTimeout(function () { - display.wrapper.ownerDocument.body.focus({ - preventScroll: true - }); - display.input.focus(); - }, 20); - } else { - display.input.focus(); - } - } - }); - var mouseMove = function (e2) { - moved = moved || Math.abs(event.clientX - e2.clientX) + Math.abs(event.clientY - e2.clientY) >= 10; - }; - var dragStart = function () { - return moved = true; - }; - if (webkit) { - display.scroller.draggable = true; - } - cm.state.draggingText = dragEnd; - dragEnd.copy = !behavior.moveOnDrag; - on(display.wrapper.ownerDocument, "mouseup", dragEnd); - on(display.wrapper.ownerDocument, "mousemove", mouseMove); - on(display.scroller, "dragstart", dragStart); - on(display.scroller, "drop", dragEnd); - cm.state.delayingBlurEvent = true; - setTimeout(function () { - return display.input.focus(); - }, 20); - if (display.scroller.dragDrop) { - display.scroller.dragDrop(); - } - } - function rangeForUnit(cm, pos, unit) { - if (unit == "char") { - return new Range(pos, pos); - } - if (unit == "word") { - return cm.findWordAt(pos); - } - if (unit == "line") { - return new Range(Pos(pos.line, 0), clipPos(cm.doc, Pos(pos.line + 1, 0))); - } - var result = unit(cm, pos); - return new Range(result.from, result.to); - } - function leftButtonSelect(cm, event, start, behavior) { - if (ie) { - delayBlurEvent(cm); - } - var display = cm.display, - doc = cm.doc; - e_preventDefault(event); - var ourRange, - ourIndex, - startSel = doc.sel, - ranges = startSel.ranges; - if (behavior.addNew && !behavior.extend) { - ourIndex = doc.sel.contains(start); - if (ourIndex > -1) { - ourRange = ranges[ourIndex]; - } else { - ourRange = new Range(start, start); - } - } else { - ourRange = doc.sel.primary(); - ourIndex = doc.sel.primIndex; - } - if (behavior.unit == "rectangle") { - if (!behavior.addNew) { - ourRange = new Range(start, start); - } - start = posFromMouse(cm, event, true, true); - ourIndex = -1; - } else { - var range2 = rangeForUnit(cm, start, behavior.unit); - if (behavior.extend) { - ourRange = extendRange(ourRange, range2.anchor, range2.head, behavior.extend); - } else { - ourRange = range2; - } - } - if (!behavior.addNew) { - ourIndex = 0; - setSelection(doc, new Selection([ourRange], 0), sel_mouse); - startSel = doc.sel; - } else if (ourIndex == -1) { - ourIndex = ranges.length; - setSelection(doc, normalizeSelection(cm, ranges.concat([ourRange]), ourIndex), { - scroll: false, - origin: "*mouse" - }); - } else if (ranges.length > 1 && ranges[ourIndex].empty() && behavior.unit == "char" && !behavior.extend) { - setSelection(doc, normalizeSelection(cm, ranges.slice(0, ourIndex).concat(ranges.slice(ourIndex + 1)), 0), { - scroll: false, - origin: "*mouse" - }); - startSel = doc.sel; - } else { - replaceOneSelection(doc, ourIndex, ourRange, sel_mouse); - } - var lastPos = start; - function extendTo(pos) { - if (cmp(lastPos, pos) == 0) { - return; - } - lastPos = pos; - if (behavior.unit == "rectangle") { - var ranges2 = [], - tabSize = cm.options.tabSize; - var startCol = countColumn(getLine(doc, start.line).text, start.ch, tabSize); - var posCol = countColumn(getLine(doc, pos.line).text, pos.ch, tabSize); - var left = Math.min(startCol, posCol), - right = Math.max(startCol, posCol); - for (var line = Math.min(start.line, pos.line), end = Math.min(cm.lastLine(), Math.max(start.line, pos.line)); line <= end; line++) { - var text = getLine(doc, line).text, - leftPos = findColumn(text, left, tabSize); - if (left == right) { - ranges2.push(new Range(Pos(line, leftPos), Pos(line, leftPos))); - } else if (text.length > leftPos) { - ranges2.push(new Range(Pos(line, leftPos), Pos(line, findColumn(text, right, tabSize)))); - } - } - if (!ranges2.length) { - ranges2.push(new Range(start, start)); - } - setSelection(doc, normalizeSelection(cm, startSel.ranges.slice(0, ourIndex).concat(ranges2), ourIndex), { - origin: "*mouse", - scroll: false - }); - cm.scrollIntoView(pos); - } else { - var oldRange = ourRange; - var range3 = rangeForUnit(cm, pos, behavior.unit); - var anchor = oldRange.anchor, - head; - if (cmp(range3.anchor, anchor) > 0) { - head = range3.head; - anchor = minPos(oldRange.from(), range3.anchor); - } else { - head = range3.anchor; - anchor = maxPos(oldRange.to(), range3.head); - } - var ranges$1 = startSel.ranges.slice(0); - ranges$1[ourIndex] = bidiSimplify(cm, new Range(clipPos(doc, anchor), head)); - setSelection(doc, normalizeSelection(cm, ranges$1, ourIndex), sel_mouse); - } - } - var editorSize = display.wrapper.getBoundingClientRect(); - var counter = 0; - function extend(e) { - var curCount = ++counter; - var cur = posFromMouse(cm, e, true, behavior.unit == "rectangle"); - if (!cur) { - return; - } - if (cmp(cur, lastPos) != 0) { - cm.curOp.focus = activeElt(); - extendTo(cur); - var visible = visibleLines(display, doc); - if (cur.line >= visible.to || cur.line < visible.from) { - setTimeout(operation(cm, function () { - if (counter == curCount) { - extend(e); - } - }), 150); - } - } else { - var outside = e.clientY < editorSize.top ? -20 : e.clientY > editorSize.bottom ? 20 : 0; - if (outside) { - setTimeout(operation(cm, function () { - if (counter != curCount) { - return; - } - display.scroller.scrollTop += outside; - extend(e); - }), 50); - } - } - } - function done(e) { - cm.state.selectingText = false; - counter = Infinity; - if (e) { - e_preventDefault(e); - display.input.focus(); - } - off(display.wrapper.ownerDocument, "mousemove", move); - off(display.wrapper.ownerDocument, "mouseup", up); - doc.history.lastSelOrigin = null; - } - var move = operation(cm, function (e) { - if (e.buttons === 0 || !e_button(e)) { - done(e); - } else { - extend(e); - } - }); - var up = operation(cm, done); - cm.state.selectingText = up; - on(display.wrapper.ownerDocument, "mousemove", move); - on(display.wrapper.ownerDocument, "mouseup", up); - } - function bidiSimplify(cm, range2) { - var anchor = range2.anchor; - var head = range2.head; - var anchorLine = getLine(cm.doc, anchor.line); - if (cmp(anchor, head) == 0 && anchor.sticky == head.sticky) { - return range2; - } - var order = getOrder(anchorLine); - if (!order) { - return range2; - } - var index = getBidiPartAt(order, anchor.ch, anchor.sticky), - part = order[index]; - if (part.from != anchor.ch && part.to != anchor.ch) { - return range2; - } - var boundary = index + (part.from == anchor.ch == (part.level != 1) ? 0 : 1); - if (boundary == 0 || boundary == order.length) { - return range2; - } - var leftSide; - if (head.line != anchor.line) { - leftSide = (head.line - anchor.line) * (cm.doc.direction == "ltr" ? 1 : -1) > 0; - } else { - var headIndex = getBidiPartAt(order, head.ch, head.sticky); - var dir = headIndex - index || (head.ch - anchor.ch) * (part.level == 1 ? -1 : 1); - if (headIndex == boundary - 1 || headIndex == boundary) { - leftSide = dir < 0; - } else { - leftSide = dir > 0; - } - } - var usePart = order[boundary + (leftSide ? -1 : 0)]; - var from = leftSide == (usePart.level == 1); - var ch = from ? usePart.from : usePart.to, - sticky = from ? "after" : "before"; - return anchor.ch == ch && anchor.sticky == sticky ? range2 : new Range(new Pos(anchor.line, ch, sticky), head); - } - function gutterEvent(cm, e, type, prevent) { - var mX, mY; - if (e.touches) { - mX = e.touches[0].clientX; - mY = e.touches[0].clientY; - } else { - try { - mX = e.clientX; - mY = e.clientY; - } catch (e$1) { - return false; - } - } - if (mX >= Math.floor(cm.display.gutters.getBoundingClientRect().right)) { - return false; - } - if (prevent) { - e_preventDefault(e); - } - var display = cm.display; - var lineBox = display.lineDiv.getBoundingClientRect(); - if (mY > lineBox.bottom || !hasHandler(cm, type)) { - return e_defaultPrevented(e); - } - mY -= lineBox.top - display.viewOffset; - for (var i2 = 0; i2 < cm.display.gutterSpecs.length; ++i2) { - var g = display.gutters.childNodes[i2]; - if (g && g.getBoundingClientRect().right >= mX) { - var line = lineAtHeight(cm.doc, mY); - var gutter = cm.display.gutterSpecs[i2]; - signal(cm, type, cm, line, gutter.className, e); - return e_defaultPrevented(e); - } - } - } - function clickInGutter(cm, e) { - return gutterEvent(cm, e, "gutterClick", true); - } - function onContextMenu(cm, e) { - if (eventInWidget(cm.display, e) || contextMenuInGutter(cm, e)) { - return; - } - if (signalDOMEvent(cm, e, "contextmenu")) { - return; - } - if (!captureRightClick) { - cm.display.input.onContextMenu(e); - } - } - function contextMenuInGutter(cm, e) { - if (!hasHandler(cm, "gutterContextMenu")) { - return false; - } - return gutterEvent(cm, e, "gutterContextMenu", false); - } - function themeChanged(cm) { - cm.display.wrapper.className = cm.display.wrapper.className.replace(/\s*cm-s-\S+/g, "") + cm.options.theme.replace(/(^|\s)\s*/g, " cm-s-"); - clearCaches(cm); - } - var Init = { - toString: function () { - return "CodeMirror.Init"; - } - }; - var defaults = {}; - var optionHandlers = {}; - function defineOptions(CodeMirror2) { - var optionHandlers2 = CodeMirror2.optionHandlers; - function option(name, deflt, handle, notOnInit) { - CodeMirror2.defaults[name] = deflt; - if (handle) { - optionHandlers2[name] = notOnInit ? function (cm, val, old) { - if (old != Init) { - handle(cm, val, old); - } - } : handle; - } - } - CodeMirror2.defineOption = option; - CodeMirror2.Init = Init; - option("value", "", function (cm, val) { - return cm.setValue(val); - }, true); - option("mode", null, function (cm, val) { - cm.doc.modeOption = val; - loadMode(cm); - }, true); - option("indentUnit", 2, loadMode, true); - option("indentWithTabs", false); - option("smartIndent", true); - option("tabSize", 4, function (cm) { - resetModeState(cm); - clearCaches(cm); - regChange(cm); - }, true); - option("lineSeparator", null, function (cm, val) { - cm.doc.lineSep = val; - if (!val) { - return; - } - var newBreaks = [], - lineNo2 = cm.doc.first; - cm.doc.iter(function (line) { - for (var pos = 0;;) { - var found = line.text.indexOf(val, pos); - if (found == -1) { - break; - } - pos = found + val.length; - newBreaks.push(Pos(lineNo2, found)); - } - lineNo2++; - }); - for (var i2 = newBreaks.length - 1; i2 >= 0; i2--) { - replaceRange(cm.doc, val, newBreaks[i2], Pos(newBreaks[i2].line, newBreaks[i2].ch + val.length)); - } - }); - option("specialChars", /[\u0000-\u001f\u007f-\u009f\u00ad\u061c\u200b\u200e\u200f\u2028\u2029\ufeff\ufff9-\ufffc]/g, function (cm, val, old) { - cm.state.specialChars = new RegExp(val.source + (val.test(" ") ? "" : "| "), "g"); - if (old != Init) { - cm.refresh(); - } - }); - option("specialCharPlaceholder", defaultSpecialCharPlaceholder, function (cm) { - return cm.refresh(); - }, true); - option("electricChars", true); - option("inputStyle", mobile ? "contenteditable" : "textarea", function () { - throw new Error("inputStyle can not (yet) be changed in a running editor"); - }, true); - option("spellcheck", false, function (cm, val) { - return cm.getInputField().spellcheck = val; - }, true); - option("autocorrect", false, function (cm, val) { - return cm.getInputField().autocorrect = val; - }, true); - option("autocapitalize", false, function (cm, val) { - return cm.getInputField().autocapitalize = val; - }, true); - option("rtlMoveVisually", !windows); - option("wholeLineUpdateBefore", true); - option("theme", "default", function (cm) { - themeChanged(cm); - updateGutters(cm); - }, true); - option("keyMap", "default", function (cm, val, old) { - var next = getKeyMap(val); - var prev = old != Init && getKeyMap(old); - if (prev && prev.detach) { - prev.detach(cm, next); - } - if (next.attach) { - next.attach(cm, prev || null); - } - }); - option("extraKeys", null); - option("configureMouse", null); - option("lineWrapping", false, wrappingChanged, true); - option("gutters", [], function (cm, val) { - cm.display.gutterSpecs = getGutters(val, cm.options.lineNumbers); - updateGutters(cm); - }, true); - option("fixedGutter", true, function (cm, val) { - cm.display.gutters.style.left = val ? compensateForHScroll(cm.display) + "px" : "0"; - cm.refresh(); - }, true); - option("coverGutterNextToScrollbar", false, function (cm) { - return updateScrollbars(cm); - }, true); - option("scrollbarStyle", "native", function (cm) { - initScrollbars(cm); - updateScrollbars(cm); - cm.display.scrollbars.setScrollTop(cm.doc.scrollTop); - cm.display.scrollbars.setScrollLeft(cm.doc.scrollLeft); - }, true); - option("lineNumbers", false, function (cm, val) { - cm.display.gutterSpecs = getGutters(cm.options.gutters, val); - updateGutters(cm); - }, true); - option("firstLineNumber", 1, updateGutters, true); - option("lineNumberFormatter", function (integer) { - return integer; - }, updateGutters, true); - option("showCursorWhenSelecting", false, updateSelection, true); - option("resetSelectionOnContextMenu", true); - option("lineWiseCopyCut", true); - option("pasteLinesPerSelection", true); - option("selectionsMayTouch", false); - option("readOnly", false, function (cm, val) { - if (val == "nocursor") { - onBlur(cm); - cm.display.input.blur(); - } - cm.display.input.readOnlyChanged(val); - }); - option("screenReaderLabel", null, function (cm, val) { - val = val === "" ? null : val; - cm.display.input.screenReaderLabelChanged(val); - }); - option("disableInput", false, function (cm, val) { - if (!val) { - cm.display.input.reset(); - } - }, true); - option("dragDrop", true, dragDropChanged); - option("allowDropFileTypes", null); - option("cursorBlinkRate", 530); - option("cursorScrollMargin", 0); - option("cursorHeight", 1, updateSelection, true); - option("singleCursorHeightPerLine", true, updateSelection, true); - option("workTime", 100); - option("workDelay", 100); - option("flattenSpans", true, resetModeState, true); - option("addModeClass", false, resetModeState, true); - option("pollInterval", 100); - option("undoDepth", 200, function (cm, val) { - return cm.doc.history.undoDepth = val; - }); - option("historyEventDelay", 1250); - option("viewportMargin", 10, function (cm) { - return cm.refresh(); - }, true); - option("maxHighlightLength", 1e4, resetModeState, true); - option("moveInputWithCursor", true, function (cm, val) { - if (!val) { - cm.display.input.resetPosition(); - } - }); - option("tabindex", null, function (cm, val) { - return cm.display.input.getField().tabIndex = val || ""; - }); - option("autofocus", null); - option("direction", "ltr", function (cm, val) { - return cm.doc.setDirection(val); - }, true); - option("phrases", null); - } - function dragDropChanged(cm, value, old) { - var wasOn = old && old != Init; - if (!value != !wasOn) { - var funcs = cm.display.dragFunctions; - var toggle = value ? on : off; - toggle(cm.display.scroller, "dragstart", funcs.start); - toggle(cm.display.scroller, "dragenter", funcs.enter); - toggle(cm.display.scroller, "dragover", funcs.over); - toggle(cm.display.scroller, "dragleave", funcs.leave); - toggle(cm.display.scroller, "drop", funcs.drop); - } - } - function wrappingChanged(cm) { - if (cm.options.lineWrapping) { - addClass(cm.display.wrapper, "CodeMirror-wrap"); - cm.display.sizer.style.minWidth = ""; - cm.display.sizerWidth = null; - } else { - rmClass(cm.display.wrapper, "CodeMirror-wrap"); - findMaxLine(cm); - } - estimateLineHeights(cm); - regChange(cm); - clearCaches(cm); - setTimeout(function () { - return updateScrollbars(cm); - }, 100); - } - function CodeMirror(place, options) { - var this$1$1 = this; - if (!(this instanceof CodeMirror)) { - return new CodeMirror(place, options); - } - this.options = options = options ? copyObj(options) : {}; - copyObj(defaults, options, false); - var doc = options.value; - if (typeof doc == "string") { - doc = new Doc(doc, options.mode, null, options.lineSeparator, options.direction); - } else if (options.mode) { - doc.modeOption = options.mode; - } - this.doc = doc; - var input = new CodeMirror.inputStyles[options.inputStyle](this); - var display = this.display = new Display(place, doc, input, options); - display.wrapper.CodeMirror = this; - themeChanged(this); - if (options.lineWrapping) { - this.display.wrapper.className += " CodeMirror-wrap"; - } - initScrollbars(this); - this.state = { - keyMaps: [], - // stores maps added by addKeyMap - overlays: [], - // highlighting overlays, as added by addOverlay - modeGen: 0, - // bumped when mode/overlay changes, used to invalidate highlighting info - overwrite: false, - delayingBlurEvent: false, - focused: false, - suppressEdits: false, - // used to disable editing during key handlers when in readOnly mode - pasteIncoming: -1, - cutIncoming: -1, - // help recognize paste/cut edits in input.poll - selectingText: false, - draggingText: false, - highlight: new Delayed(), - // stores highlight worker timeout - keySeq: null, - // Unfinished key sequence - specialChars: null - }; - if (options.autofocus && !mobile) { - display.input.focus(); - } - if (ie && ie_version < 11) { - setTimeout(function () { - return this$1$1.display.input.reset(true); - }, 20); - } - registerEventHandlers(this); - ensureGlobalHandlers(); - startOperation(this); - this.curOp.forceUpdate = true; - attachDoc(this, doc); - if (options.autofocus && !mobile || this.hasFocus()) { - setTimeout(function () { - if (this$1$1.hasFocus() && !this$1$1.state.focused) { - onFocus(this$1$1); - } - }, 20); - } else { - onBlur(this); - } - for (var opt in optionHandlers) { - if (optionHandlers.hasOwnProperty(opt)) { - optionHandlers[opt](this, options[opt], Init); - } - } - maybeUpdateLineNumberWidth(this); - if (options.finishInit) { - options.finishInit(this); - } - for (var i2 = 0; i2 < initHooks.length; ++i2) { - initHooks[i2](this); - } - endOperation(this); - if (webkit && options.lineWrapping && getComputedStyle(display.lineDiv).textRendering == "optimizelegibility") { - display.lineDiv.style.textRendering = "auto"; - } - } - CodeMirror.defaults = defaults; - CodeMirror.optionHandlers = optionHandlers; - function registerEventHandlers(cm) { - var d = cm.display; - on(d.scroller, "mousedown", operation(cm, onMouseDown)); - if (ie && ie_version < 11) { - on(d.scroller, "dblclick", operation(cm, function (e) { - if (signalDOMEvent(cm, e)) { - return; - } - var pos = posFromMouse(cm, e); - if (!pos || clickInGutter(cm, e) || eventInWidget(cm.display, e)) { - return; - } - e_preventDefault(e); - var word = cm.findWordAt(pos); - extendSelection(cm.doc, word.anchor, word.head); - })); - } else { - on(d.scroller, "dblclick", function (e) { - return signalDOMEvent(cm, e) || e_preventDefault(e); - }); - } - on(d.scroller, "contextmenu", function (e) { - return onContextMenu(cm, e); - }); - on(d.input.getField(), "contextmenu", function (e) { - if (!d.scroller.contains(e.target)) { - onContextMenu(cm, e); - } - }); - var touchFinished, - prevTouch = { - end: 0 - }; - function finishTouch() { - if (d.activeTouch) { - touchFinished = setTimeout(function () { - return d.activeTouch = null; - }, 1e3); - prevTouch = d.activeTouch; - prevTouch.end = + /* @__PURE__ */new Date(); - } - } - function isMouseLikeTouchEvent(e) { - if (e.touches.length != 1) { - return false; - } - var touch = e.touches[0]; - return touch.radiusX <= 1 && touch.radiusY <= 1; - } - function farAway(touch, other) { - if (other.left == null) { - return true; - } - var dx = other.left - touch.left, - dy = other.top - touch.top; - return dx * dx + dy * dy > 20 * 20; - } - on(d.scroller, "touchstart", function (e) { - if (!signalDOMEvent(cm, e) && !isMouseLikeTouchEvent(e) && !clickInGutter(cm, e)) { - d.input.ensurePolled(); - clearTimeout(touchFinished); - var now = + /* @__PURE__ */new Date(); - d.activeTouch = { - start: now, - moved: false, - prev: now - prevTouch.end <= 300 ? prevTouch : null - }; - if (e.touches.length == 1) { - d.activeTouch.left = e.touches[0].pageX; - d.activeTouch.top = e.touches[0].pageY; - } - } - }); - on(d.scroller, "touchmove", function () { - if (d.activeTouch) { - d.activeTouch.moved = true; - } - }); - on(d.scroller, "touchend", function (e) { - var touch = d.activeTouch; - if (touch && !eventInWidget(d, e) && touch.left != null && !touch.moved && /* @__PURE__ */new Date() - touch.start < 300) { - var pos = cm.coordsChar(d.activeTouch, "page"), - range2; - if (!touch.prev || farAway(touch, touch.prev)) { - range2 = new Range(pos, pos); - } else if (!touch.prev.prev || farAway(touch, touch.prev.prev)) { - range2 = cm.findWordAt(pos); - } else { - range2 = new Range(Pos(pos.line, 0), clipPos(cm.doc, Pos(pos.line + 1, 0))); - } - cm.setSelection(range2.anchor, range2.head); - cm.focus(); - e_preventDefault(e); - } - finishTouch(); - }); - on(d.scroller, "touchcancel", finishTouch); - on(d.scroller, "scroll", function () { - if (d.scroller.clientHeight) { - updateScrollTop(cm, d.scroller.scrollTop); - setScrollLeft(cm, d.scroller.scrollLeft, true); - signal(cm, "scroll", cm); - } - }); - on(d.scroller, "mousewheel", function (e) { - return onScrollWheel(cm, e); - }); - on(d.scroller, "DOMMouseScroll", function (e) { - return onScrollWheel(cm, e); - }); - on(d.wrapper, "scroll", function () { - return d.wrapper.scrollTop = d.wrapper.scrollLeft = 0; - }); - d.dragFunctions = { - enter: function (e) { - if (!signalDOMEvent(cm, e)) { - e_stop(e); - } - }, - over: function (e) { - if (!signalDOMEvent(cm, e)) { - onDragOver(cm, e); - e_stop(e); - } - }, - start: function (e) { - return onDragStart(cm, e); - }, - drop: operation(cm, onDrop), - leave: function (e) { - if (!signalDOMEvent(cm, e)) { - clearDragCursor(cm); - } - } - }; - var inp = d.input.getField(); - on(inp, "keyup", function (e) { - return onKeyUp.call(cm, e); - }); - on(inp, "keydown", operation(cm, onKeyDown)); - on(inp, "keypress", operation(cm, onKeyPress)); - on(inp, "focus", function (e) { - return onFocus(cm, e); - }); - on(inp, "blur", function (e) { - return onBlur(cm, e); - }); - } - var initHooks = []; - CodeMirror.defineInitHook = function (f) { - return initHooks.push(f); - }; - function indentLine(cm, n, how, aggressive) { - var doc = cm.doc, - state; - if (how == null) { - how = "add"; - } - if (how == "smart") { - if (!doc.mode.indent) { - how = "prev"; - } else { - state = getContextBefore(cm, n).state; - } - } - var tabSize = cm.options.tabSize; - var line = getLine(doc, n), - curSpace = countColumn(line.text, null, tabSize); - if (line.stateAfter) { - line.stateAfter = null; - } - var curSpaceString = line.text.match(/^\s*/)[0], - indentation; - if (!aggressive && !/\S/.test(line.text)) { - indentation = 0; - how = "not"; - } else if (how == "smart") { - indentation = doc.mode.indent(state, line.text.slice(curSpaceString.length), line.text); - if (indentation == Pass || indentation > 150) { - if (!aggressive) { - return; - } - how = "prev"; - } - } - if (how == "prev") { - if (n > doc.first) { - indentation = countColumn(getLine(doc, n - 1).text, null, tabSize); - } else { - indentation = 0; - } - } else if (how == "add") { - indentation = curSpace + cm.options.indentUnit; - } else if (how == "subtract") { - indentation = curSpace - cm.options.indentUnit; - } else if (typeof how == "number") { - indentation = curSpace + how; - } - indentation = Math.max(0, indentation); - var indentString = "", - pos = 0; - if (cm.options.indentWithTabs) { - for (var i2 = Math.floor(indentation / tabSize); i2; --i2) { - pos += tabSize; - indentString += " "; - } - } - if (pos < indentation) { - indentString += spaceStr(indentation - pos); - } - if (indentString != curSpaceString) { - replaceRange(doc, indentString, Pos(n, 0), Pos(n, curSpaceString.length), "+input"); - line.stateAfter = null; - return true; - } else { - for (var i$12 = 0; i$12 < doc.sel.ranges.length; i$12++) { - var range2 = doc.sel.ranges[i$12]; - if (range2.head.line == n && range2.head.ch < curSpaceString.length) { - var pos$1 = Pos(n, curSpaceString.length); - replaceOneSelection(doc, i$12, new Range(pos$1, pos$1)); - break; - } - } - } - } - var lastCopied = null; - function setLastCopied(newLastCopied) { - lastCopied = newLastCopied; - } - function applyTextInput(cm, inserted, deleted, sel, origin) { - var doc = cm.doc; - cm.display.shift = false; - if (!sel) { - sel = doc.sel; - } - var recent = + /* @__PURE__ */new Date() - 200; - var paste = origin == "paste" || cm.state.pasteIncoming > recent; - var textLines = splitLinesAuto(inserted), - multiPaste = null; - if (paste && sel.ranges.length > 1) { - if (lastCopied && lastCopied.text.join("\n") == inserted) { - if (sel.ranges.length % lastCopied.text.length == 0) { - multiPaste = []; - for (var i2 = 0; i2 < lastCopied.text.length; i2++) { - multiPaste.push(doc.splitLines(lastCopied.text[i2])); - } - } - } else if (textLines.length == sel.ranges.length && cm.options.pasteLinesPerSelection) { - multiPaste = map(textLines, function (l) { - return [l]; - }); - } - } - var updateInput = cm.curOp.updateInput; - for (var i$12 = sel.ranges.length - 1; i$12 >= 0; i$12--) { - var range2 = sel.ranges[i$12]; - var from = range2.from(), - to = range2.to(); - if (range2.empty()) { - if (deleted && deleted > 0) { - from = Pos(from.line, from.ch - deleted); - } else if (cm.state.overwrite && !paste) { - to = Pos(to.line, Math.min(getLine(doc, to.line).text.length, to.ch + lst(textLines).length)); - } else if (paste && lastCopied && lastCopied.lineWise && lastCopied.text.join("\n") == textLines.join("\n")) { - from = to = Pos(from.line, 0); - } - } - var changeEvent = { - from, - to, - text: multiPaste ? multiPaste[i$12 % multiPaste.length] : textLines, - origin: origin || (paste ? "paste" : cm.state.cutIncoming > recent ? "cut" : "+input") - }; - makeChange(cm.doc, changeEvent); - signalLater(cm, "inputRead", cm, changeEvent); - } - if (inserted && !paste) { - triggerElectric(cm, inserted); - } - ensureCursorVisible(cm); - if (cm.curOp.updateInput < 2) { - cm.curOp.updateInput = updateInput; - } - cm.curOp.typing = true; - cm.state.pasteIncoming = cm.state.cutIncoming = -1; - } - function handlePaste(e, cm) { - var pasted = e.clipboardData && e.clipboardData.getData("Text"); - if (pasted) { - e.preventDefault(); - if (!cm.isReadOnly() && !cm.options.disableInput) { - runInOp(cm, function () { - return applyTextInput(cm, pasted, 0, null, "paste"); - }); - } - return true; - } - } - function triggerElectric(cm, inserted) { - if (!cm.options.electricChars || !cm.options.smartIndent) { - return; - } - var sel = cm.doc.sel; - for (var i2 = sel.ranges.length - 1; i2 >= 0; i2--) { - var range2 = sel.ranges[i2]; - if (range2.head.ch > 100 || i2 && sel.ranges[i2 - 1].head.line == range2.head.line) { - continue; - } - var mode = cm.getModeAt(range2.head); - var indented = false; - if (mode.electricChars) { - for (var j = 0; j < mode.electricChars.length; j++) { - if (inserted.indexOf(mode.electricChars.charAt(j)) > -1) { - indented = indentLine(cm, range2.head.line, "smart"); - break; - } - } - } else if (mode.electricInput) { - if (mode.electricInput.test(getLine(cm.doc, range2.head.line).text.slice(0, range2.head.ch))) { - indented = indentLine(cm, range2.head.line, "smart"); - } - } - if (indented) { - signalLater(cm, "electricInput", cm, range2.head.line); - } - } - } - function copyableRanges(cm) { - var text = [], - ranges = []; - for (var i2 = 0; i2 < cm.doc.sel.ranges.length; i2++) { - var line = cm.doc.sel.ranges[i2].head.line; - var lineRange = { - anchor: Pos(line, 0), - head: Pos(line + 1, 0) - }; - ranges.push(lineRange); - text.push(cm.getRange(lineRange.anchor, lineRange.head)); - } - return { - text, - ranges - }; - } - function disableBrowserMagic(field, spellcheck, autocorrect, autocapitalize) { - field.setAttribute("autocorrect", autocorrect ? "" : "off"); - field.setAttribute("autocapitalize", autocapitalize ? "" : "off"); - field.setAttribute("spellcheck", !!spellcheck); - } - function hiddenTextarea() { - var te = elt("textarea", null, null, "position: absolute; bottom: -1em; padding: 0; width: 1px; height: 1em; min-height: 1em; outline: none"); - var div = elt("div", [te], null, "overflow: hidden; position: relative; width: 3px; height: 0px;"); - if (webkit) { - te.style.width = "1000px"; - } else { - te.setAttribute("wrap", "off"); - } - if (ios) { - te.style.border = "1px solid black"; - } - disableBrowserMagic(te); - return div; - } - function addEditorMethods(CodeMirror2) { - var optionHandlers2 = CodeMirror2.optionHandlers; - var helpers = CodeMirror2.helpers = {}; - CodeMirror2.prototype = { - constructor: CodeMirror2, - focus: function () { - window.focus(); - this.display.input.focus(); - }, - setOption: function (option, value) { - var options = this.options, - old = options[option]; - if (options[option] == value && option != "mode") { - return; - } - options[option] = value; - if (optionHandlers2.hasOwnProperty(option)) { - operation(this, optionHandlers2[option])(this, value, old); - } - signal(this, "optionChange", this, option); - }, - getOption: function (option) { - return this.options[option]; - }, - getDoc: function () { - return this.doc; - }, - addKeyMap: function (map2, bottom) { - this.state.keyMaps[bottom ? "push" : "unshift"](getKeyMap(map2)); - }, - removeKeyMap: function (map2) { - var maps = this.state.keyMaps; - for (var i2 = 0; i2 < maps.length; ++i2) { - if (maps[i2] == map2 || maps[i2].name == map2) { - maps.splice(i2, 1); - return true; - } - } - }, - addOverlay: methodOp(function (spec, options) { - var mode = spec.token ? spec : CodeMirror2.getMode(this.options, spec); - if (mode.startState) { - throw new Error("Overlays may not be stateful."); - } - insertSorted(this.state.overlays, { - mode, - modeSpec: spec, - opaque: options && options.opaque, - priority: options && options.priority || 0 - }, function (overlay) { - return overlay.priority; - }); - this.state.modeGen++; - regChange(this); - }), - removeOverlay: methodOp(function (spec) { - var overlays = this.state.overlays; - for (var i2 = 0; i2 < overlays.length; ++i2) { - var cur = overlays[i2].modeSpec; - if (cur == spec || typeof spec == "string" && cur.name == spec) { - overlays.splice(i2, 1); - this.state.modeGen++; - regChange(this); - return; - } - } - }), - indentLine: methodOp(function (n, dir, aggressive) { - if (typeof dir != "string" && typeof dir != "number") { - if (dir == null) { - dir = this.options.smartIndent ? "smart" : "prev"; - } else { - dir = dir ? "add" : "subtract"; - } - } - if (isLine(this.doc, n)) { - indentLine(this, n, dir, aggressive); - } - }), - indentSelection: methodOp(function (how) { - var ranges = this.doc.sel.ranges, - end = -1; - for (var i2 = 0; i2 < ranges.length; i2++) { - var range2 = ranges[i2]; - if (!range2.empty()) { - var from = range2.from(), - to = range2.to(); - var start = Math.max(end, from.line); - end = Math.min(this.lastLine(), to.line - (to.ch ? 0 : 1)) + 1; - for (var j = start; j < end; ++j) { - indentLine(this, j, how); - } - var newRanges = this.doc.sel.ranges; - if (from.ch == 0 && ranges.length == newRanges.length && newRanges[i2].from().ch > 0) { - replaceOneSelection(this.doc, i2, new Range(from, newRanges[i2].to()), sel_dontScroll); - } - } else if (range2.head.line > end) { - indentLine(this, range2.head.line, how, true); - end = range2.head.line; - if (i2 == this.doc.sel.primIndex) { - ensureCursorVisible(this); - } - } - } - }), - // Fetch the parser token for a given character. Useful for hacks - // that want to inspect the mode state (say, for completion). - getTokenAt: function (pos, precise) { - return takeToken(this, pos, precise); - }, - getLineTokens: function (line, precise) { - return takeToken(this, Pos(line), precise, true); - }, - getTokenTypeAt: function (pos) { - pos = clipPos(this.doc, pos); - var styles = getLineStyles(this, getLine(this.doc, pos.line)); - var before = 0, - after = (styles.length - 1) / 2, - ch = pos.ch; - var type; - if (ch == 0) { - type = styles[2]; - } else { - for (;;) { - var mid = before + after >> 1; - if ((mid ? styles[mid * 2 - 1] : 0) >= ch) { - after = mid; - } else if (styles[mid * 2 + 1] < ch) { - before = mid + 1; - } else { - type = styles[mid * 2 + 2]; - break; - } - } - } - var cut = type ? type.indexOf("overlay ") : -1; - return cut < 0 ? type : cut == 0 ? null : type.slice(0, cut - 1); - }, - getModeAt: function (pos) { - var mode = this.doc.mode; - if (!mode.innerMode) { - return mode; - } - return CodeMirror2.innerMode(mode, this.getTokenAt(pos).state).mode; - }, - getHelper: function (pos, type) { - return this.getHelpers(pos, type)[0]; - }, - getHelpers: function (pos, type) { - var found = []; - if (!helpers.hasOwnProperty(type)) { - return found; - } - var help = helpers[type], - mode = this.getModeAt(pos); - if (typeof mode[type] == "string") { - if (help[mode[type]]) { - found.push(help[mode[type]]); - } - } else if (mode[type]) { - for (var i2 = 0; i2 < mode[type].length; i2++) { - var val = help[mode[type][i2]]; - if (val) { - found.push(val); - } - } - } else if (mode.helperType && help[mode.helperType]) { - found.push(help[mode.helperType]); - } else if (help[mode.name]) { - found.push(help[mode.name]); - } - for (var i$12 = 0; i$12 < help._global.length; i$12++) { - var cur = help._global[i$12]; - if (cur.pred(mode, this) && indexOf(found, cur.val) == -1) { - found.push(cur.val); - } - } - return found; - }, - getStateAfter: function (line, precise) { - var doc = this.doc; - line = clipLine(doc, line == null ? doc.first + doc.size - 1 : line); - return getContextBefore(this, line + 1, precise).state; - }, - cursorCoords: function (start, mode) { - var pos, - range2 = this.doc.sel.primary(); - if (start == null) { - pos = range2.head; - } else if (typeof start == "object") { - pos = clipPos(this.doc, start); - } else { - pos = start ? range2.from() : range2.to(); - } - return cursorCoords(this, pos, mode || "page"); - }, - charCoords: function (pos, mode) { - return charCoords(this, clipPos(this.doc, pos), mode || "page"); - }, - coordsChar: function (coords, mode) { - coords = fromCoordSystem(this, coords, mode || "page"); - return coordsChar(this, coords.left, coords.top); - }, - lineAtHeight: function (height, mode) { - height = fromCoordSystem(this, { - top: height, - left: 0 - }, mode || "page").top; - return lineAtHeight(this.doc, height + this.display.viewOffset); - }, - heightAtLine: function (line, mode, includeWidgets) { - var end = false, - lineObj; - if (typeof line == "number") { - var last = this.doc.first + this.doc.size - 1; - if (line < this.doc.first) { - line = this.doc.first; - } else if (line > last) { - line = last; - end = true; - } - lineObj = getLine(this.doc, line); - } else { - lineObj = line; - } - return intoCoordSystem(this, lineObj, { - top: 0, - left: 0 - }, mode || "page", includeWidgets || end).top + (end ? this.doc.height - heightAtLine(lineObj) : 0); - }, - defaultTextHeight: function () { - return textHeight(this.display); - }, - defaultCharWidth: function () { - return charWidth(this.display); - }, - getViewport: function () { - return { - from: this.display.viewFrom, - to: this.display.viewTo - }; - }, - addWidget: function (pos, node, scroll, vert, horiz) { - var display = this.display; - pos = cursorCoords(this, clipPos(this.doc, pos)); - var top = pos.bottom, - left = pos.left; - node.style.position = "absolute"; - node.setAttribute("cm-ignore-events", "true"); - this.display.input.setUneditable(node); - display.sizer.appendChild(node); - if (vert == "over") { - top = pos.top; - } else if (vert == "above" || vert == "near") { - var vspace = Math.max(display.wrapper.clientHeight, this.doc.height), - hspace = Math.max(display.sizer.clientWidth, display.lineSpace.clientWidth); - if ((vert == "above" || pos.bottom + node.offsetHeight > vspace) && pos.top > node.offsetHeight) { - top = pos.top - node.offsetHeight; - } else if (pos.bottom + node.offsetHeight <= vspace) { - top = pos.bottom; - } - if (left + node.offsetWidth > hspace) { - left = hspace - node.offsetWidth; - } - } - node.style.top = top + "px"; - node.style.left = node.style.right = ""; - if (horiz == "right") { - left = display.sizer.clientWidth - node.offsetWidth; - node.style.right = "0px"; - } else { - if (horiz == "left") { - left = 0; - } else if (horiz == "middle") { - left = (display.sizer.clientWidth - node.offsetWidth) / 2; - } - node.style.left = left + "px"; - } - if (scroll) { - scrollIntoView(this, { - left, - top, - right: left + node.offsetWidth, - bottom: top + node.offsetHeight - }); - } - }, - triggerOnKeyDown: methodOp(onKeyDown), - triggerOnKeyPress: methodOp(onKeyPress), - triggerOnKeyUp: onKeyUp, - triggerOnMouseDown: methodOp(onMouseDown), - execCommand: function (cmd) { - if (commands.hasOwnProperty(cmd)) { - return commands[cmd].call(null, this); - } - }, - triggerElectric: methodOp(function (text) { - triggerElectric(this, text); - }), - findPosH: function (from, amount, unit, visually) { - var dir = 1; - if (amount < 0) { - dir = -1; - amount = -amount; - } - var cur = clipPos(this.doc, from); - for (var i2 = 0; i2 < amount; ++i2) { - cur = findPosH(this.doc, cur, dir, unit, visually); - if (cur.hitSide) { - break; - } - } - return cur; - }, - moveH: methodOp(function (dir, unit) { - var this$1$1 = this; - this.extendSelectionsBy(function (range2) { - if (this$1$1.display.shift || this$1$1.doc.extend || range2.empty()) { - return findPosH(this$1$1.doc, range2.head, dir, unit, this$1$1.options.rtlMoveVisually); - } else { - return dir < 0 ? range2.from() : range2.to(); - } - }, sel_move); - }), - deleteH: methodOp(function (dir, unit) { - var sel = this.doc.sel, - doc = this.doc; - if (sel.somethingSelected()) { - doc.replaceSelection("", null, "+delete"); - } else { - deleteNearSelection(this, function (range2) { - var other = findPosH(doc, range2.head, dir, unit, false); - return dir < 0 ? { - from: other, - to: range2.head - } : { - from: range2.head, - to: other - }; - }); - } - }), - findPosV: function (from, amount, unit, goalColumn) { - var dir = 1, - x = goalColumn; - if (amount < 0) { - dir = -1; - amount = -amount; - } - var cur = clipPos(this.doc, from); - for (var i2 = 0; i2 < amount; ++i2) { - var coords = cursorCoords(this, cur, "div"); - if (x == null) { - x = coords.left; - } else { - coords.left = x; - } - cur = findPosV(this, coords, dir, unit); - if (cur.hitSide) { - break; - } - } - return cur; - }, - moveV: methodOp(function (dir, unit) { - var this$1$1 = this; - var doc = this.doc, - goals = []; - var collapse = !this.display.shift && !doc.extend && doc.sel.somethingSelected(); - doc.extendSelectionsBy(function (range2) { - if (collapse) { - return dir < 0 ? range2.from() : range2.to(); - } - var headPos = cursorCoords(this$1$1, range2.head, "div"); - if (range2.goalColumn != null) { - headPos.left = range2.goalColumn; - } - goals.push(headPos.left); - var pos = findPosV(this$1$1, headPos, dir, unit); - if (unit == "page" && range2 == doc.sel.primary()) { - addToScrollTop(this$1$1, charCoords(this$1$1, pos, "div").top - headPos.top); - } - return pos; - }, sel_move); - if (goals.length) { - for (var i2 = 0; i2 < doc.sel.ranges.length; i2++) { - doc.sel.ranges[i2].goalColumn = goals[i2]; - } - } - }), - // Find the word at the given position (as returned by coordsChar). - findWordAt: function (pos) { - var doc = this.doc, - line = getLine(doc, pos.line).text; - var start = pos.ch, - end = pos.ch; - if (line) { - var helper = this.getHelper(pos, "wordChars"); - if ((pos.sticky == "before" || end == line.length) && start) { - --start; - } else { - ++end; - } - var startChar = line.charAt(start); - var check = isWordChar(startChar, helper) ? function (ch) { - return isWordChar(ch, helper); - } : /\s/.test(startChar) ? function (ch) { - return /\s/.test(ch); - } : function (ch) { - return !/\s/.test(ch) && !isWordChar(ch); - }; - while (start > 0 && check(line.charAt(start - 1))) { - --start; - } - while (end < line.length && check(line.charAt(end))) { - ++end; - } - } - return new Range(Pos(pos.line, start), Pos(pos.line, end)); - }, - toggleOverwrite: function (value) { - if (value != null && value == this.state.overwrite) { - return; - } - if (this.state.overwrite = !this.state.overwrite) { - addClass(this.display.cursorDiv, "CodeMirror-overwrite"); - } else { - rmClass(this.display.cursorDiv, "CodeMirror-overwrite"); - } - signal(this, "overwriteToggle", this, this.state.overwrite); - }, - hasFocus: function () { - return this.display.input.getField() == activeElt(); - }, - isReadOnly: function () { - return !!(this.options.readOnly || this.doc.cantEdit); - }, - scrollTo: methodOp(function (x, y) { - scrollToCoords(this, x, y); - }), - getScrollInfo: function () { - var scroller = this.display.scroller; - return { - left: scroller.scrollLeft, - top: scroller.scrollTop, - height: scroller.scrollHeight - scrollGap(this) - this.display.barHeight, - width: scroller.scrollWidth - scrollGap(this) - this.display.barWidth, - clientHeight: displayHeight(this), - clientWidth: displayWidth(this) - }; - }, - scrollIntoView: methodOp(function (range2, margin) { - if (range2 == null) { - range2 = { - from: this.doc.sel.primary().head, - to: null - }; - if (margin == null) { - margin = this.options.cursorScrollMargin; - } - } else if (typeof range2 == "number") { - range2 = { - from: Pos(range2, 0), - to: null - }; - } else if (range2.from == null) { - range2 = { - from: range2, - to: null - }; - } - if (!range2.to) { - range2.to = range2.from; - } - range2.margin = margin || 0; - if (range2.from.line != null) { - scrollToRange(this, range2); - } else { - scrollToCoordsRange(this, range2.from, range2.to, range2.margin); - } - }), - setSize: methodOp(function (width, height) { - var this$1$1 = this; - var interpret = function (val) { - return typeof val == "number" || /^\d+$/.test(String(val)) ? val + "px" : val; - }; - if (width != null) { - this.display.wrapper.style.width = interpret(width); - } - if (height != null) { - this.display.wrapper.style.height = interpret(height); - } - if (this.options.lineWrapping) { - clearLineMeasurementCache(this); - } - var lineNo2 = this.display.viewFrom; - this.doc.iter(lineNo2, this.display.viewTo, function (line) { - if (line.widgets) { - for (var i2 = 0; i2 < line.widgets.length; i2++) { - if (line.widgets[i2].noHScroll) { - regLineChange(this$1$1, lineNo2, "widget"); - break; - } - } - } - ++lineNo2; - }); - this.curOp.forceUpdate = true; - signal(this, "refresh", this); - }), - operation: function (f) { - return runInOp(this, f); - }, - startOperation: function () { - return startOperation(this); - }, - endOperation: function () { - return endOperation(this); - }, - refresh: methodOp(function () { - var oldHeight = this.display.cachedTextHeight; - regChange(this); - this.curOp.forceUpdate = true; - clearCaches(this); - scrollToCoords(this, this.doc.scrollLeft, this.doc.scrollTop); - updateGutterSpace(this.display); - if (oldHeight == null || Math.abs(oldHeight - textHeight(this.display)) > 0.5 || this.options.lineWrapping) { - estimateLineHeights(this); - } - signal(this, "refresh", this); - }), - swapDoc: methodOp(function (doc) { - var old = this.doc; - old.cm = null; - if (this.state.selectingText) { - this.state.selectingText(); - } - attachDoc(this, doc); - clearCaches(this); - this.display.input.reset(); - scrollToCoords(this, doc.scrollLeft, doc.scrollTop); - this.curOp.forceScroll = true; - signalLater(this, "swapDoc", this, old); - return old; - }), - phrase: function (phraseText) { - var phrases = this.options.phrases; - return phrases && Object.prototype.hasOwnProperty.call(phrases, phraseText) ? phrases[phraseText] : phraseText; - }, - getInputField: function () { - return this.display.input.getField(); - }, - getWrapperElement: function () { - return this.display.wrapper; - }, - getScrollerElement: function () { - return this.display.scroller; - }, - getGutterElement: function () { - return this.display.gutters; - } - }; - eventMixin(CodeMirror2); - CodeMirror2.registerHelper = function (type, name, value) { - if (!helpers.hasOwnProperty(type)) { - helpers[type] = CodeMirror2[type] = { - _global: [] - }; - } - helpers[type][name] = value; - }; - CodeMirror2.registerGlobalHelper = function (type, name, predicate, value) { - CodeMirror2.registerHelper(type, name, value); - helpers[type]._global.push({ - pred: predicate, - val: value - }); - }; - } - function findPosH(doc, pos, dir, unit, visually) { - var oldPos = pos; - var origDir = dir; - var lineObj = getLine(doc, pos.line); - var lineDir = visually && doc.direction == "rtl" ? -dir : dir; - function findNextLine() { - var l = pos.line + lineDir; - if (l < doc.first || l >= doc.first + doc.size) { - return false; - } - pos = new Pos(l, pos.ch, pos.sticky); - return lineObj = getLine(doc, l); - } - function moveOnce(boundToLine) { - var next; - if (unit == "codepoint") { - var ch = lineObj.text.charCodeAt(pos.ch + (dir > 0 ? 0 : -1)); - if (isNaN(ch)) { - next = null; - } else { - var astral = dir > 0 ? ch >= 55296 && ch < 56320 : ch >= 56320 && ch < 57343; - next = new Pos(pos.line, Math.max(0, Math.min(lineObj.text.length, pos.ch + dir * (astral ? 2 : 1))), -dir); - } - } else if (visually) { - next = moveVisually(doc.cm, lineObj, pos, dir); - } else { - next = moveLogically(lineObj, pos, dir); - } - if (next == null) { - if (!boundToLine && findNextLine()) { - pos = endOfLine(visually, doc.cm, lineObj, pos.line, lineDir); - } else { - return false; - } - } else { - pos = next; - } - return true; - } - if (unit == "char" || unit == "codepoint") { - moveOnce(); - } else if (unit == "column") { - moveOnce(true); - } else if (unit == "word" || unit == "group") { - var sawType = null, - group = unit == "group"; - var helper = doc.cm && doc.cm.getHelper(pos, "wordChars"); - for (var first = true;; first = false) { - if (dir < 0 && !moveOnce(!first)) { - break; - } - var cur = lineObj.text.charAt(pos.ch) || "\n"; - var type = isWordChar(cur, helper) ? "w" : group && cur == "\n" ? "n" : !group || /\s/.test(cur) ? null : "p"; - if (group && !first && !type) { - type = "s"; - } - if (sawType && sawType != type) { - if (dir < 0) { - dir = 1; - moveOnce(); - pos.sticky = "after"; - } - break; - } - if (type) { - sawType = type; - } - if (dir > 0 && !moveOnce(!first)) { - break; - } - } - } - var result = skipAtomic(doc, pos, oldPos, origDir, true); - if (equalCursorPos(oldPos, result)) { - result.hitSide = true; - } - return result; - } - function findPosV(cm, pos, dir, unit) { - var doc = cm.doc, - x = pos.left, - y; - if (unit == "page") { - var pageSize = Math.min(cm.display.wrapper.clientHeight, window.innerHeight || document.documentElement.clientHeight); - var moveAmount = Math.max(pageSize - 0.5 * textHeight(cm.display), 3); - y = (dir > 0 ? pos.bottom : pos.top) + dir * moveAmount; - } else if (unit == "line") { - y = dir > 0 ? pos.bottom + 3 : pos.top - 3; - } - var target; - for (;;) { - target = coordsChar(cm, x, y); - if (!target.outside) { - break; - } - if (dir < 0 ? y <= 0 : y >= doc.height) { - target.hitSide = true; - break; - } - y += dir * 5; - } - return target; - } - var ContentEditableInput = function (cm) { - this.cm = cm; - this.lastAnchorNode = this.lastAnchorOffset = this.lastFocusNode = this.lastFocusOffset = null; - this.polling = new Delayed(); - this.composing = null; - this.gracePeriod = false; - this.readDOMTimeout = null; - }; - ContentEditableInput.prototype.init = function (display) { - var this$1$1 = this; - var input = this, - cm = input.cm; - var div = input.div = display.lineDiv; - div.contentEditable = true; - disableBrowserMagic(div, cm.options.spellcheck, cm.options.autocorrect, cm.options.autocapitalize); - function belongsToInput(e) { - for (var t = e.target; t; t = t.parentNode) { - if (t == div) { - return true; - } - if (/\bCodeMirror-(?:line)?widget\b/.test(t.className)) { - break; - } - } - return false; - } - on(div, "paste", function (e) { - if (!belongsToInput(e) || signalDOMEvent(cm, e) || handlePaste(e, cm)) { - return; - } - if (ie_version <= 11) { - setTimeout(operation(cm, function () { - return this$1$1.updateFromDOM(); - }), 20); - } - }); - on(div, "compositionstart", function (e) { - this$1$1.composing = { - data: e.data, - done: false - }; - }); - on(div, "compositionupdate", function (e) { - if (!this$1$1.composing) { - this$1$1.composing = { - data: e.data, - done: false - }; - } - }); - on(div, "compositionend", function (e) { - if (this$1$1.composing) { - if (e.data != this$1$1.composing.data) { - this$1$1.readFromDOMSoon(); - } - this$1$1.composing.done = true; - } - }); - on(div, "touchstart", function () { - return input.forceCompositionEnd(); - }); - on(div, "input", function () { - if (!this$1$1.composing) { - this$1$1.readFromDOMSoon(); - } - }); - function onCopyCut(e) { - if (!belongsToInput(e) || signalDOMEvent(cm, e)) { - return; - } - if (cm.somethingSelected()) { - setLastCopied({ - lineWise: false, - text: cm.getSelections() - }); - if (e.type == "cut") { - cm.replaceSelection("", null, "cut"); - } - } else if (!cm.options.lineWiseCopyCut) { - return; - } else { - var ranges = copyableRanges(cm); - setLastCopied({ - lineWise: true, - text: ranges.text - }); - if (e.type == "cut") { - cm.operation(function () { - cm.setSelections(ranges.ranges, 0, sel_dontScroll); - cm.replaceSelection("", null, "cut"); - }); - } - } - if (e.clipboardData) { - e.clipboardData.clearData(); - var content = lastCopied.text.join("\n"); - e.clipboardData.setData("Text", content); - if (e.clipboardData.getData("Text") == content) { - e.preventDefault(); - return; - } - } - var kludge = hiddenTextarea(), - te = kludge.firstChild; - cm.display.lineSpace.insertBefore(kludge, cm.display.lineSpace.firstChild); - te.value = lastCopied.text.join("\n"); - var hadFocus = activeElt(); - selectInput(te); - setTimeout(function () { - cm.display.lineSpace.removeChild(kludge); - hadFocus.focus(); - if (hadFocus == div) { - input.showPrimarySelection(); - } - }, 50); - } - on(div, "copy", onCopyCut); - on(div, "cut", onCopyCut); - }; - ContentEditableInput.prototype.screenReaderLabelChanged = function (label) { - if (label) { - this.div.setAttribute("aria-label", label); - } else { - this.div.removeAttribute("aria-label"); - } - }; - ContentEditableInput.prototype.prepareSelection = function () { - var result = prepareSelection(this.cm, false); - result.focus = activeElt() == this.div; - return result; - }; - ContentEditableInput.prototype.showSelection = function (info, takeFocus) { - if (!info || !this.cm.display.view.length) { - return; - } - if (info.focus || takeFocus) { - this.showPrimarySelection(); - } - this.showMultipleSelections(info); - }; - ContentEditableInput.prototype.getSelection = function () { - return this.cm.display.wrapper.ownerDocument.getSelection(); - }; - ContentEditableInput.prototype.showPrimarySelection = function () { - var sel = this.getSelection(), - cm = this.cm, - prim = cm.doc.sel.primary(); - var from = prim.from(), - to = prim.to(); - if (cm.display.viewTo == cm.display.viewFrom || from.line >= cm.display.viewTo || to.line < cm.display.viewFrom) { - sel.removeAllRanges(); - return; - } - var curAnchor = domToPos(cm, sel.anchorNode, sel.anchorOffset); - var curFocus = domToPos(cm, sel.focusNode, sel.focusOffset); - if (curAnchor && !curAnchor.bad && curFocus && !curFocus.bad && cmp(minPos(curAnchor, curFocus), from) == 0 && cmp(maxPos(curAnchor, curFocus), to) == 0) { - return; - } - var view = cm.display.view; - var start = from.line >= cm.display.viewFrom && posToDOM(cm, from) || { - node: view[0].measure.map[2], - offset: 0 - }; - var end = to.line < cm.display.viewTo && posToDOM(cm, to); - if (!end) { - var measure = view[view.length - 1].measure; - var map2 = measure.maps ? measure.maps[measure.maps.length - 1] : measure.map; - end = { - node: map2[map2.length - 1], - offset: map2[map2.length - 2] - map2[map2.length - 3] - }; - } - if (!start || !end) { - sel.removeAllRanges(); - return; - } - var old = sel.rangeCount && sel.getRangeAt(0), - rng; - try { - rng = range(start.node, start.offset, end.offset, end.node); - } catch (e) {} - if (rng) { - if (!gecko && cm.state.focused) { - sel.collapse(start.node, start.offset); - if (!rng.collapsed) { - sel.removeAllRanges(); - sel.addRange(rng); - } - } else { - sel.removeAllRanges(); - sel.addRange(rng); - } - if (old && sel.anchorNode == null) { - sel.addRange(old); - } else if (gecko) { - this.startGracePeriod(); - } - } - this.rememberSelection(); - }; - ContentEditableInput.prototype.startGracePeriod = function () { - var this$1$1 = this; - clearTimeout(this.gracePeriod); - this.gracePeriod = setTimeout(function () { - this$1$1.gracePeriod = false; - if (this$1$1.selectionChanged()) { - this$1$1.cm.operation(function () { - return this$1$1.cm.curOp.selectionChanged = true; - }); - } - }, 20); - }; - ContentEditableInput.prototype.showMultipleSelections = function (info) { - removeChildrenAndAdd(this.cm.display.cursorDiv, info.cursors); - removeChildrenAndAdd(this.cm.display.selectionDiv, info.selection); - }; - ContentEditableInput.prototype.rememberSelection = function () { - var sel = this.getSelection(); - this.lastAnchorNode = sel.anchorNode; - this.lastAnchorOffset = sel.anchorOffset; - this.lastFocusNode = sel.focusNode; - this.lastFocusOffset = sel.focusOffset; - }; - ContentEditableInput.prototype.selectionInEditor = function () { - var sel = this.getSelection(); - if (!sel.rangeCount) { - return false; - } - var node = sel.getRangeAt(0).commonAncestorContainer; - return contains(this.div, node); - }; - ContentEditableInput.prototype.focus = function () { - if (this.cm.options.readOnly != "nocursor") { - if (!this.selectionInEditor() || activeElt() != this.div) { - this.showSelection(this.prepareSelection(), true); - } - this.div.focus(); - } - }; - ContentEditableInput.prototype.blur = function () { - this.div.blur(); - }; - ContentEditableInput.prototype.getField = function () { - return this.div; - }; - ContentEditableInput.prototype.supportsTouch = function () { - return true; - }; - ContentEditableInput.prototype.receivedFocus = function () { - var this$1$1 = this; - var input = this; - if (this.selectionInEditor()) { - setTimeout(function () { - return this$1$1.pollSelection(); - }, 20); - } else { - runInOp(this.cm, function () { - return input.cm.curOp.selectionChanged = true; - }); - } - function poll() { - if (input.cm.state.focused) { - input.pollSelection(); - input.polling.set(input.cm.options.pollInterval, poll); - } - } - this.polling.set(this.cm.options.pollInterval, poll); - }; - ContentEditableInput.prototype.selectionChanged = function () { - var sel = this.getSelection(); - return sel.anchorNode != this.lastAnchorNode || sel.anchorOffset != this.lastAnchorOffset || sel.focusNode != this.lastFocusNode || sel.focusOffset != this.lastFocusOffset; - }; - ContentEditableInput.prototype.pollSelection = function () { - if (this.readDOMTimeout != null || this.gracePeriod || !this.selectionChanged()) { - return; - } - var sel = this.getSelection(), - cm = this.cm; - if (android && chrome && this.cm.display.gutterSpecs.length && isInGutter(sel.anchorNode)) { - this.cm.triggerOnKeyDown({ - type: "keydown", - keyCode: 8, - preventDefault: Math.abs - }); - this.blur(); - this.focus(); - return; - } - if (this.composing) { - return; - } - this.rememberSelection(); - var anchor = domToPos(cm, sel.anchorNode, sel.anchorOffset); - var head = domToPos(cm, sel.focusNode, sel.focusOffset); - if (anchor && head) { - runInOp(cm, function () { - setSelection(cm.doc, simpleSelection(anchor, head), sel_dontScroll); - if (anchor.bad || head.bad) { - cm.curOp.selectionChanged = true; - } - }); - } - }; - ContentEditableInput.prototype.pollContent = function () { - if (this.readDOMTimeout != null) { - clearTimeout(this.readDOMTimeout); - this.readDOMTimeout = null; - } - var cm = this.cm, - display = cm.display, - sel = cm.doc.sel.primary(); - var from = sel.from(), - to = sel.to(); - if (from.ch == 0 && from.line > cm.firstLine()) { - from = Pos(from.line - 1, getLine(cm.doc, from.line - 1).length); - } - if (to.ch == getLine(cm.doc, to.line).text.length && to.line < cm.lastLine()) { - to = Pos(to.line + 1, 0); - } - if (from.line < display.viewFrom || to.line > display.viewTo - 1) { - return false; - } - var fromIndex, fromLine, fromNode; - if (from.line == display.viewFrom || (fromIndex = findViewIndex(cm, from.line)) == 0) { - fromLine = lineNo(display.view[0].line); - fromNode = display.view[0].node; - } else { - fromLine = lineNo(display.view[fromIndex].line); - fromNode = display.view[fromIndex - 1].node.nextSibling; - } - var toIndex = findViewIndex(cm, to.line); - var toLine, toNode; - if (toIndex == display.view.length - 1) { - toLine = display.viewTo - 1; - toNode = display.lineDiv.lastChild; - } else { - toLine = lineNo(display.view[toIndex + 1].line) - 1; - toNode = display.view[toIndex + 1].node.previousSibling; - } - if (!fromNode) { - return false; - } - var newText = cm.doc.splitLines(domTextBetween(cm, fromNode, toNode, fromLine, toLine)); - var oldText = getBetween(cm.doc, Pos(fromLine, 0), Pos(toLine, getLine(cm.doc, toLine).text.length)); - while (newText.length > 1 && oldText.length > 1) { - if (lst(newText) == lst(oldText)) { - newText.pop(); - oldText.pop(); - toLine--; - } else if (newText[0] == oldText[0]) { - newText.shift(); - oldText.shift(); - fromLine++; - } else { - break; - } - } - var cutFront = 0, - cutEnd = 0; - var newTop = newText[0], - oldTop = oldText[0], - maxCutFront = Math.min(newTop.length, oldTop.length); - while (cutFront < maxCutFront && newTop.charCodeAt(cutFront) == oldTop.charCodeAt(cutFront)) { - ++cutFront; - } - var newBot = lst(newText), - oldBot = lst(oldText); - var maxCutEnd = Math.min(newBot.length - (newText.length == 1 ? cutFront : 0), oldBot.length - (oldText.length == 1 ? cutFront : 0)); - while (cutEnd < maxCutEnd && newBot.charCodeAt(newBot.length - cutEnd - 1) == oldBot.charCodeAt(oldBot.length - cutEnd - 1)) { - ++cutEnd; - } - if (newText.length == 1 && oldText.length == 1 && fromLine == from.line) { - while (cutFront && cutFront > from.ch && newBot.charCodeAt(newBot.length - cutEnd - 1) == oldBot.charCodeAt(oldBot.length - cutEnd - 1)) { - cutFront--; - cutEnd++; - } - } - newText[newText.length - 1] = newBot.slice(0, newBot.length - cutEnd).replace(/^\u200b+/, ""); - newText[0] = newText[0].slice(cutFront).replace(/\u200b+$/, ""); - var chFrom = Pos(fromLine, cutFront); - var chTo = Pos(toLine, oldText.length ? lst(oldText).length - cutEnd : 0); - if (newText.length > 1 || newText[0] || cmp(chFrom, chTo)) { - replaceRange(cm.doc, newText, chFrom, chTo, "+input"); - return true; - } - }; - ContentEditableInput.prototype.ensurePolled = function () { - this.forceCompositionEnd(); - }; - ContentEditableInput.prototype.reset = function () { - this.forceCompositionEnd(); - }; - ContentEditableInput.prototype.forceCompositionEnd = function () { - if (!this.composing) { - return; - } - clearTimeout(this.readDOMTimeout); - this.composing = null; - this.updateFromDOM(); - this.div.blur(); - this.div.focus(); - }; - ContentEditableInput.prototype.readFromDOMSoon = function () { - var this$1$1 = this; - if (this.readDOMTimeout != null) { - return; - } - this.readDOMTimeout = setTimeout(function () { - this$1$1.readDOMTimeout = null; - if (this$1$1.composing) { - if (this$1$1.composing.done) { - this$1$1.composing = null; - } else { - return; - } - } - this$1$1.updateFromDOM(); - }, 80); - }; - ContentEditableInput.prototype.updateFromDOM = function () { - var this$1$1 = this; - if (this.cm.isReadOnly() || !this.pollContent()) { - runInOp(this.cm, function () { - return regChange(this$1$1.cm); - }); - } - }; - ContentEditableInput.prototype.setUneditable = function (node) { - node.contentEditable = "false"; - }; - ContentEditableInput.prototype.onKeyPress = function (e) { - if (e.charCode == 0 || this.composing) { - return; - } - e.preventDefault(); - if (!this.cm.isReadOnly()) { - operation(this.cm, applyTextInput)(this.cm, String.fromCharCode(e.charCode == null ? e.keyCode : e.charCode), 0); - } - }; - ContentEditableInput.prototype.readOnlyChanged = function (val) { - this.div.contentEditable = String(val != "nocursor"); - }; - ContentEditableInput.prototype.onContextMenu = function () {}; - ContentEditableInput.prototype.resetPosition = function () {}; - ContentEditableInput.prototype.needsContentAttribute = true; - function posToDOM(cm, pos) { - var view = findViewForLine(cm, pos.line); - if (!view || view.hidden) { - return null; - } - var line = getLine(cm.doc, pos.line); - var info = mapFromLineView(view, line, pos.line); - var order = getOrder(line, cm.doc.direction), - side = "left"; - if (order) { - var partPos = getBidiPartAt(order, pos.ch); - side = partPos % 2 ? "right" : "left"; - } - var result = nodeAndOffsetInLineMap(info.map, pos.ch, side); - result.offset = result.collapse == "right" ? result.end : result.start; - return result; - } - function isInGutter(node) { - for (var scan = node; scan; scan = scan.parentNode) { - if (/CodeMirror-gutter-wrapper/.test(scan.className)) { - return true; - } - } - return false; - } - function badPos(pos, bad) { - if (bad) { - pos.bad = true; - } - return pos; - } - function domTextBetween(cm, from, to, fromLine, toLine) { - var text = "", - closing = false, - lineSep = cm.doc.lineSeparator(), - extraLinebreak = false; - function recognizeMarker(id) { - return function (marker) { - return marker.id == id; - }; - } - function close() { - if (closing) { - text += lineSep; - if (extraLinebreak) { - text += lineSep; - } - closing = extraLinebreak = false; - } - } - function addText(str) { - if (str) { - close(); - text += str; - } - } - function walk(node) { - if (node.nodeType == 1) { - var cmText = node.getAttribute("cm-text"); - if (cmText) { - addText(cmText); - return; - } - var markerID = node.getAttribute("cm-marker"), - range2; - if (markerID) { - var found = cm.findMarks(Pos(fromLine, 0), Pos(toLine + 1, 0), recognizeMarker(+markerID)); - if (found.length && (range2 = found[0].find(0))) { - addText(getBetween(cm.doc, range2.from, range2.to).join(lineSep)); - } - return; - } - if (node.getAttribute("contenteditable") == "false") { - return; - } - var isBlock = /^(pre|div|p|li|table|br)$/i.test(node.nodeName); - if (!/^br$/i.test(node.nodeName) && node.textContent.length == 0) { - return; - } - if (isBlock) { - close(); - } - for (var i2 = 0; i2 < node.childNodes.length; i2++) { - walk(node.childNodes[i2]); - } - if (/^(pre|p)$/i.test(node.nodeName)) { - extraLinebreak = true; - } - if (isBlock) { - closing = true; - } - } else if (node.nodeType == 3) { - addText(node.nodeValue.replace(/\u200b/g, "").replace(/\u00a0/g, " ")); - } - } - for (;;) { - walk(from); - if (from == to) { - break; - } - from = from.nextSibling; - extraLinebreak = false; - } - return text; - } - function domToPos(cm, node, offset) { - var lineNode; - if (node == cm.display.lineDiv) { - lineNode = cm.display.lineDiv.childNodes[offset]; - if (!lineNode) { - return badPos(cm.clipPos(Pos(cm.display.viewTo - 1)), true); - } - node = null; - offset = 0; - } else { - for (lineNode = node;; lineNode = lineNode.parentNode) { - if (!lineNode || lineNode == cm.display.lineDiv) { - return null; - } - if (lineNode.parentNode && lineNode.parentNode == cm.display.lineDiv) { - break; - } - } - } - for (var i2 = 0; i2 < cm.display.view.length; i2++) { - var lineView = cm.display.view[i2]; - if (lineView.node == lineNode) { - return locateNodeInLineView(lineView, node, offset); - } - } - } - function locateNodeInLineView(lineView, node, offset) { - var wrapper = lineView.text.firstChild, - bad = false; - if (!node || !contains(wrapper, node)) { - return badPos(Pos(lineNo(lineView.line), 0), true); - } - if (node == wrapper) { - bad = true; - node = wrapper.childNodes[offset]; - offset = 0; - if (!node) { - var line = lineView.rest ? lst(lineView.rest) : lineView.line; - return badPos(Pos(lineNo(line), line.text.length), bad); - } - } - var textNode = node.nodeType == 3 ? node : null, - topNode = node; - if (!textNode && node.childNodes.length == 1 && node.firstChild.nodeType == 3) { - textNode = node.firstChild; - if (offset) { - offset = textNode.nodeValue.length; - } - } - while (topNode.parentNode != wrapper) { - topNode = topNode.parentNode; - } - var measure = lineView.measure, - maps = measure.maps; - function find(textNode2, topNode2, offset2) { - for (var i2 = -1; i2 < (maps ? maps.length : 0); i2++) { - var map2 = i2 < 0 ? measure.map : maps[i2]; - for (var j = 0; j < map2.length; j += 3) { - var curNode = map2[j + 2]; - if (curNode == textNode2 || curNode == topNode2) { - var line2 = lineNo(i2 < 0 ? lineView.line : lineView.rest[i2]); - var ch = map2[j] + offset2; - if (offset2 < 0 || curNode != textNode2) { - ch = map2[j + (offset2 ? 1 : 0)]; - } - return Pos(line2, ch); - } - } - } - } - var found = find(textNode, topNode, offset); - if (found) { - return badPos(found, bad); - } - for (var after = topNode.nextSibling, dist = textNode ? textNode.nodeValue.length - offset : 0; after; after = after.nextSibling) { - found = find(after, after.firstChild, 0); - if (found) { - return badPos(Pos(found.line, found.ch - dist), bad); - } else { - dist += after.textContent.length; - } - } - for (var before = topNode.previousSibling, dist$1 = offset; before; before = before.previousSibling) { - found = find(before, before.firstChild, -1); - if (found) { - return badPos(Pos(found.line, found.ch + dist$1), bad); - } else { - dist$1 += before.textContent.length; - } - } - } - var TextareaInput = function (cm) { - this.cm = cm; - this.prevInput = ""; - this.pollingFast = false; - this.polling = new Delayed(); - this.hasSelection = false; - this.composing = null; - }; - TextareaInput.prototype.init = function (display) { - var this$1$1 = this; - var input = this, - cm = this.cm; - this.createField(display); - var te = this.textarea; - display.wrapper.insertBefore(this.wrapper, display.wrapper.firstChild); - if (ios) { - te.style.width = "0px"; - } - on(te, "input", function () { - if (ie && ie_version >= 9 && this$1$1.hasSelection) { - this$1$1.hasSelection = null; - } - input.poll(); - }); - on(te, "paste", function (e) { - if (signalDOMEvent(cm, e) || handlePaste(e, cm)) { - return; - } - cm.state.pasteIncoming = + /* @__PURE__ */new Date(); - input.fastPoll(); - }); - function prepareCopyCut(e) { - if (signalDOMEvent(cm, e)) { - return; - } - if (cm.somethingSelected()) { - setLastCopied({ - lineWise: false, - text: cm.getSelections() - }); - } else if (!cm.options.lineWiseCopyCut) { - return; - } else { - var ranges = copyableRanges(cm); - setLastCopied({ - lineWise: true, - text: ranges.text - }); - if (e.type == "cut") { - cm.setSelections(ranges.ranges, null, sel_dontScroll); - } else { - input.prevInput = ""; - te.value = ranges.text.join("\n"); - selectInput(te); - } - } - if (e.type == "cut") { - cm.state.cutIncoming = + /* @__PURE__ */new Date(); - } - } - on(te, "cut", prepareCopyCut); - on(te, "copy", prepareCopyCut); - on(display.scroller, "paste", function (e) { - if (eventInWidget(display, e) || signalDOMEvent(cm, e)) { - return; - } - if (!te.dispatchEvent) { - cm.state.pasteIncoming = + /* @__PURE__ */new Date(); - input.focus(); - return; - } - var event = new Event("paste"); - event.clipboardData = e.clipboardData; - te.dispatchEvent(event); - }); - on(display.lineSpace, "selectstart", function (e) { - if (!eventInWidget(display, e)) { - e_preventDefault(e); - } - }); - on(te, "compositionstart", function () { - var start = cm.getCursor("from"); - if (input.composing) { - input.composing.range.clear(); - } - input.composing = { - start, - range: cm.markText(start, cm.getCursor("to"), { - className: "CodeMirror-composing" - }) - }; - }); - on(te, "compositionend", function () { - if (input.composing) { - input.poll(); - input.composing.range.clear(); - input.composing = null; - } - }); - }; - TextareaInput.prototype.createField = function (_display) { - this.wrapper = hiddenTextarea(); - this.textarea = this.wrapper.firstChild; - }; - TextareaInput.prototype.screenReaderLabelChanged = function (label) { - if (label) { - this.textarea.setAttribute("aria-label", label); - } else { - this.textarea.removeAttribute("aria-label"); - } - }; - TextareaInput.prototype.prepareSelection = function () { - var cm = this.cm, - display = cm.display, - doc = cm.doc; - var result = prepareSelection(cm); - if (cm.options.moveInputWithCursor) { - var headPos = cursorCoords(cm, doc.sel.primary().head, "div"); - var wrapOff = display.wrapper.getBoundingClientRect(), - lineOff = display.lineDiv.getBoundingClientRect(); - result.teTop = Math.max(0, Math.min(display.wrapper.clientHeight - 10, headPos.top + lineOff.top - wrapOff.top)); - result.teLeft = Math.max(0, Math.min(display.wrapper.clientWidth - 10, headPos.left + lineOff.left - wrapOff.left)); - } - return result; - }; - TextareaInput.prototype.showSelection = function (drawn) { - var cm = this.cm, - display = cm.display; - removeChildrenAndAdd(display.cursorDiv, drawn.cursors); - removeChildrenAndAdd(display.selectionDiv, drawn.selection); - if (drawn.teTop != null) { - this.wrapper.style.top = drawn.teTop + "px"; - this.wrapper.style.left = drawn.teLeft + "px"; - } - }; - TextareaInput.prototype.reset = function (typing) { - if (this.contextMenuPending || this.composing) { - return; - } - var cm = this.cm; - if (cm.somethingSelected()) { - this.prevInput = ""; - var content = cm.getSelection(); - this.textarea.value = content; - if (cm.state.focused) { - selectInput(this.textarea); - } - if (ie && ie_version >= 9) { - this.hasSelection = content; - } - } else if (!typing) { - this.prevInput = this.textarea.value = ""; - if (ie && ie_version >= 9) { - this.hasSelection = null; - } - } - }; - TextareaInput.prototype.getField = function () { - return this.textarea; - }; - TextareaInput.prototype.supportsTouch = function () { - return false; - }; - TextareaInput.prototype.focus = function () { - if (this.cm.options.readOnly != "nocursor" && (!mobile || activeElt() != this.textarea)) { - try { - this.textarea.focus(); - } catch (e) {} - } - }; - TextareaInput.prototype.blur = function () { - this.textarea.blur(); - }; - TextareaInput.prototype.resetPosition = function () { - this.wrapper.style.top = this.wrapper.style.left = 0; - }; - TextareaInput.prototype.receivedFocus = function () { - this.slowPoll(); - }; - TextareaInput.prototype.slowPoll = function () { - var this$1$1 = this; - if (this.pollingFast) { - return; - } - this.polling.set(this.cm.options.pollInterval, function () { - this$1$1.poll(); - if (this$1$1.cm.state.focused) { - this$1$1.slowPoll(); - } - }); - }; - TextareaInput.prototype.fastPoll = function () { - var missed = false, - input = this; - input.pollingFast = true; - function p() { - var changed = input.poll(); - if (!changed && !missed) { - missed = true; - input.polling.set(60, p); - } else { - input.pollingFast = false; - input.slowPoll(); - } - } - input.polling.set(20, p); - }; - TextareaInput.prototype.poll = function () { - var this$1$1 = this; - var cm = this.cm, - input = this.textarea, - prevInput = this.prevInput; - if (this.contextMenuPending || !cm.state.focused || hasSelection(input) && !prevInput && !this.composing || cm.isReadOnly() || cm.options.disableInput || cm.state.keySeq) { - return false; - } - var text = input.value; - if (text == prevInput && !cm.somethingSelected()) { - return false; - } - if (ie && ie_version >= 9 && this.hasSelection === text || mac && /[\uf700-\uf7ff]/.test(text)) { - cm.display.input.reset(); - return false; - } - if (cm.doc.sel == cm.display.selForContextMenu) { - var first = text.charCodeAt(0); - if (first == 8203 && !prevInput) { - prevInput = "​"; - } - if (first == 8666) { - this.reset(); - return this.cm.execCommand("undo"); - } - } - var same = 0, - l = Math.min(prevInput.length, text.length); - while (same < l && prevInput.charCodeAt(same) == text.charCodeAt(same)) { - ++same; - } - runInOp(cm, function () { - applyTextInput(cm, text.slice(same), prevInput.length - same, null, this$1$1.composing ? "*compose" : null); - if (text.length > 1e3 || text.indexOf("\n") > -1) { - input.value = this$1$1.prevInput = ""; - } else { - this$1$1.prevInput = text; - } - if (this$1$1.composing) { - this$1$1.composing.range.clear(); - this$1$1.composing.range = cm.markText(this$1$1.composing.start, cm.getCursor("to"), { - className: "CodeMirror-composing" - }); - } - }); - return true; - }; - TextareaInput.prototype.ensurePolled = function () { - if (this.pollingFast && this.poll()) { - this.pollingFast = false; - } - }; - TextareaInput.prototype.onKeyPress = function () { - if (ie && ie_version >= 9) { - this.hasSelection = null; - } - this.fastPoll(); - }; - TextareaInput.prototype.onContextMenu = function (e) { - var input = this, - cm = input.cm, - display = cm.display, - te = input.textarea; - if (input.contextMenuPending) { - input.contextMenuPending(); - } - var pos = posFromMouse(cm, e), - scrollPos = display.scroller.scrollTop; - if (!pos || presto) { - return; - } - var reset = cm.options.resetSelectionOnContextMenu; - if (reset && cm.doc.sel.contains(pos) == -1) { - operation(cm, setSelection)(cm.doc, simpleSelection(pos), sel_dontScroll); - } - var oldCSS = te.style.cssText, - oldWrapperCSS = input.wrapper.style.cssText; - var wrapperBox = input.wrapper.offsetParent.getBoundingClientRect(); - input.wrapper.style.cssText = "position: static"; - te.style.cssText = "position: absolute; width: 30px; height: 30px;\n top: " + (e.clientY - wrapperBox.top - 5) + "px; left: " + (e.clientX - wrapperBox.left - 5) + "px;\n z-index: 1000; background: " + (ie ? "rgba(255, 255, 255, .05)" : "transparent") + ";\n outline: none; border-width: 0; outline: none; overflow: hidden; opacity: .05; filter: alpha(opacity=5);"; - var oldScrollY; - if (webkit) { - oldScrollY = window.scrollY; - } - display.input.focus(); - if (webkit) { - window.scrollTo(null, oldScrollY); - } - display.input.reset(); - if (!cm.somethingSelected()) { - te.value = input.prevInput = " "; - } - input.contextMenuPending = rehide; - display.selForContextMenu = cm.doc.sel; - clearTimeout(display.detectingSelectAll); - function prepareSelectAllHack() { - if (te.selectionStart != null) { - var selected = cm.somethingSelected(); - var extval = "​" + (selected ? te.value : ""); - te.value = "⇚"; - te.value = extval; - input.prevInput = selected ? "" : "​"; - te.selectionStart = 1; - te.selectionEnd = extval.length; - display.selForContextMenu = cm.doc.sel; - } - } - function rehide() { - if (input.contextMenuPending != rehide) { - return; - } - input.contextMenuPending = false; - input.wrapper.style.cssText = oldWrapperCSS; - te.style.cssText = oldCSS; - if (ie && ie_version < 9) { - display.scrollbars.setScrollTop(display.scroller.scrollTop = scrollPos); - } - if (te.selectionStart != null) { - if (!ie || ie && ie_version < 9) { - prepareSelectAllHack(); - } - var i2 = 0, - poll = function () { - if (display.selForContextMenu == cm.doc.sel && te.selectionStart == 0 && te.selectionEnd > 0 && input.prevInput == "​") { - operation(cm, selectAll)(cm); - } else if (i2++ < 10) { - display.detectingSelectAll = setTimeout(poll, 500); - } else { - display.selForContextMenu = null; - display.input.reset(); - } - }; - display.detectingSelectAll = setTimeout(poll, 200); - } - } - if (ie && ie_version >= 9) { - prepareSelectAllHack(); - } - if (captureRightClick) { - e_stop(e); - var mouseup = function () { - off(window, "mouseup", mouseup); - setTimeout(rehide, 20); - }; - on(window, "mouseup", mouseup); - } else { - setTimeout(rehide, 50); - } - }; - TextareaInput.prototype.readOnlyChanged = function (val) { - if (!val) { - this.reset(); - } - this.textarea.disabled = val == "nocursor"; - this.textarea.readOnly = !!val; - }; - TextareaInput.prototype.setUneditable = function () {}; - TextareaInput.prototype.needsContentAttribute = false; - function fromTextArea(textarea, options) { - options = options ? copyObj(options) : {}; - options.value = textarea.value; - if (!options.tabindex && textarea.tabIndex) { - options.tabindex = textarea.tabIndex; - } - if (!options.placeholder && textarea.placeholder) { - options.placeholder = textarea.placeholder; - } - if (options.autofocus == null) { - var hasFocus = activeElt(); - options.autofocus = hasFocus == textarea || textarea.getAttribute("autofocus") != null && hasFocus == document.body; - } - function save() { - textarea.value = cm.getValue(); - } - var realSubmit; - if (textarea.form) { - on(textarea.form, "submit", save); - if (!options.leaveSubmitMethodAlone) { - var form = textarea.form; - realSubmit = form.submit; - try { - var wrappedSubmit = form.submit = function () { - save(); - form.submit = realSubmit; - form.submit(); - form.submit = wrappedSubmit; - }; - } catch (e) {} - } - } - options.finishInit = function (cm2) { - cm2.save = save; - cm2.getTextArea = function () { - return textarea; - }; - cm2.toTextArea = function () { - cm2.toTextArea = isNaN; - save(); - textarea.parentNode.removeChild(cm2.getWrapperElement()); - textarea.style.display = ""; - if (textarea.form) { - off(textarea.form, "submit", save); - if (!options.leaveSubmitMethodAlone && typeof textarea.form.submit == "function") { - textarea.form.submit = realSubmit; - } - } - }; - }; - textarea.style.display = "none"; - var cm = CodeMirror(function (node) { - return textarea.parentNode.insertBefore(node, textarea.nextSibling); - }, options); - return cm; - } - function addLegacyProps(CodeMirror2) { - CodeMirror2.off = off; - CodeMirror2.on = on; - CodeMirror2.wheelEventPixels = wheelEventPixels; - CodeMirror2.Doc = Doc; - CodeMirror2.splitLines = splitLinesAuto; - CodeMirror2.countColumn = countColumn; - CodeMirror2.findColumn = findColumn; - CodeMirror2.isWordChar = isWordCharBasic; - CodeMirror2.Pass = Pass; - CodeMirror2.signal = signal; - CodeMirror2.Line = Line; - CodeMirror2.changeEnd = changeEnd; - CodeMirror2.scrollbarModel = scrollbarModel; - CodeMirror2.Pos = Pos; - CodeMirror2.cmpPos = cmp; - CodeMirror2.modes = modes; - CodeMirror2.mimeModes = mimeModes; - CodeMirror2.resolveMode = resolveMode; - CodeMirror2.getMode = getMode; - CodeMirror2.modeExtensions = modeExtensions; - CodeMirror2.extendMode = extendMode; - CodeMirror2.copyState = copyState; - CodeMirror2.startState = startState; - CodeMirror2.innerMode = innerMode; - CodeMirror2.commands = commands; - CodeMirror2.keyMap = keyMap; - CodeMirror2.keyName = keyName; - CodeMirror2.isModifierKey = isModifierKey; - CodeMirror2.lookupKey = lookupKey; - CodeMirror2.normalizeKeyMap = normalizeKeyMap; - CodeMirror2.StringStream = StringStream; - CodeMirror2.SharedTextMarker = SharedTextMarker; - CodeMirror2.TextMarker = TextMarker; - CodeMirror2.LineWidget = LineWidget; - CodeMirror2.e_preventDefault = e_preventDefault; - CodeMirror2.e_stopPropagation = e_stopPropagation; - CodeMirror2.e_stop = e_stop; - CodeMirror2.addClass = addClass; - CodeMirror2.contains = contains; - CodeMirror2.rmClass = rmClass; - CodeMirror2.keyNames = keyNames; - } - defineOptions(CodeMirror); - addEditorMethods(CodeMirror); - var dontDelegate = "iter insert remove copy getEditor constructor".split(" "); - for (var prop in Doc.prototype) { - if (Doc.prototype.hasOwnProperty(prop) && indexOf(dontDelegate, prop) < 0) { - CodeMirror.prototype[prop] = /* @__PURE__ */function (method) { - return function () { - return method.apply(this.doc, arguments); - }; - }(Doc.prototype[prop]); - } - } - eventMixin(Doc); - CodeMirror.inputStyles = { - "textarea": TextareaInput, - "contenteditable": ContentEditableInput - }; - CodeMirror.defineMode = function (name) { - if (!CodeMirror.defaults.mode && name != "null") { - CodeMirror.defaults.mode = name; - } - defineMode.apply(this, arguments); - }; - CodeMirror.defineMIME = defineMIME; - CodeMirror.defineMode("null", function () { - return { - token: function (stream) { - return stream.skipToEnd(); - } - }; - }); - CodeMirror.defineMIME("text/plain", "null"); - CodeMirror.defineExtension = function (name, func) { - CodeMirror.prototype[name] = func; - }; - CodeMirror.defineDocExtension = function (name, func) { - Doc.prototype[name] = func; - }; - CodeMirror.fromTextArea = fromTextArea; - addLegacyProps(CodeMirror); - CodeMirror.version = "5.65.3"; - return CodeMirror; - }); - })(codemirror); - return codemirror.exports; -} -exports.getDefaultExportFromCjs = getDefaultExportFromCjs; -exports.requireCodemirror = requireCodemirror; - -/***/ }), - -/***/ "../../graphiql-react/dist/comment.cjs.js": -/*!************************************************!*\ - !*** ../../graphiql-react/dist/comment.cjs.js ***! - \************************************************/ -/***/ (function(__unused_webpack_module, exports, __webpack_require__) { - - - -const codemirror = __webpack_require__(/*! ./codemirror.cjs2.js */ "../../graphiql-react/dist/codemirror.cjs2.js"); -function _mergeNamespaces(n, m) { - for (var i = 0; i < m.length; i++) { - const e = m[i]; - if (typeof e !== "string" && !Array.isArray(e)) { - for (const k in e) { - if (k !== "default" && !(k in n)) { - const d = Object.getOwnPropertyDescriptor(e, k); - if (d) { - Object.defineProperty(n, k, d.get ? d : { - enumerable: true, - get: () => e[k] - }); - } - } - } - } - } - return Object.freeze(Object.defineProperty(n, Symbol.toStringTag, { - value: "Module" - })); -} -var comment$2 = { - exports: {} -}; -(function (module2, exports2) { - (function (mod) { - mod(codemirror.requireCodemirror()); - })(function (CodeMirror) { - var noOptions = {}; - var nonWS = /[^\s\u00a0]/; - var Pos = CodeMirror.Pos, - cmp = CodeMirror.cmpPos; - function firstNonWS(str) { - var found = str.search(nonWS); - return found == -1 ? 0 : found; - } - CodeMirror.commands.toggleComment = function (cm) { - cm.toggleComment(); - }; - CodeMirror.defineExtension("toggleComment", function (options) { - if (!options) options = noOptions; - var cm = this; - var minLine = Infinity, - ranges = this.listSelections(), - mode = null; - for (var i = ranges.length - 1; i >= 0; i--) { - var from = ranges[i].from(), - to = ranges[i].to(); - if (from.line >= minLine) continue; - if (to.line >= minLine) to = Pos(minLine, 0); - minLine = from.line; - if (mode == null) { - if (cm.uncomment(from, to, options)) mode = "un";else { - cm.lineComment(from, to, options); - mode = "line"; - } - } else if (mode == "un") { - cm.uncomment(from, to, options); - } else { - cm.lineComment(from, to, options); - } - } - }); - function probablyInsideString(cm, pos, line) { - return /\bstring\b/.test(cm.getTokenTypeAt(Pos(pos.line, 0))) && !/^[\'\"\`]/.test(line); - } - function getMode(cm, pos) { - var mode = cm.getMode(); - return mode.useInnerComments === false || !mode.innerMode ? mode : cm.getModeAt(pos); - } - CodeMirror.defineExtension("lineComment", function (from, to, options) { - if (!options) options = noOptions; - var self = this, - mode = getMode(self, from); - var firstLine = self.getLine(from.line); - if (firstLine == null || probablyInsideString(self, from, firstLine)) return; - var commentString = options.lineComment || mode.lineComment; - if (!commentString) { - if (options.blockCommentStart || mode.blockCommentStart) { - options.fullLines = true; - self.blockComment(from, to, options); - } - return; - } - var end = Math.min(to.ch != 0 || to.line == from.line ? to.line + 1 : to.line, self.lastLine() + 1); - var pad = options.padding == null ? " " : options.padding; - var blankLines = options.commentBlankLines || from.line == to.line; - self.operation(function () { - if (options.indent) { - var baseString = null; - for (var i = from.line; i < end; ++i) { - var line = self.getLine(i); - var whitespace = line.slice(0, firstNonWS(line)); - if (baseString == null || baseString.length > whitespace.length) { - baseString = whitespace; - } - } - for (var i = from.line; i < end; ++i) { - var line = self.getLine(i), - cut = baseString.length; - if (!blankLines && !nonWS.test(line)) continue; - if (line.slice(0, cut) != baseString) cut = firstNonWS(line); - self.replaceRange(baseString + commentString + pad, Pos(i, 0), Pos(i, cut)); - } - } else { - for (var i = from.line; i < end; ++i) { - if (blankLines || nonWS.test(self.getLine(i))) self.replaceRange(commentString + pad, Pos(i, 0)); - } - } - }); - }); - CodeMirror.defineExtension("blockComment", function (from, to, options) { - if (!options) options = noOptions; - var self = this, - mode = getMode(self, from); - var startString = options.blockCommentStart || mode.blockCommentStart; - var endString = options.blockCommentEnd || mode.blockCommentEnd; - if (!startString || !endString) { - if ((options.lineComment || mode.lineComment) && options.fullLines != false) self.lineComment(from, to, options); - return; - } - if (/\bcomment\b/.test(self.getTokenTypeAt(Pos(from.line, 0)))) return; - var end = Math.min(to.line, self.lastLine()); - if (end != from.line && to.ch == 0 && nonWS.test(self.getLine(end))) --end; - var pad = options.padding == null ? " " : options.padding; - if (from.line > end) return; - self.operation(function () { - if (options.fullLines != false) { - var lastLineHasText = nonWS.test(self.getLine(end)); - self.replaceRange(pad + endString, Pos(end)); - self.replaceRange(startString + pad, Pos(from.line, 0)); - var lead = options.blockCommentLead || mode.blockCommentLead; - if (lead != null) { - for (var i = from.line + 1; i <= end; ++i) if (i != end || lastLineHasText) self.replaceRange(lead + pad, Pos(i, 0)); - } - } else { - var atCursor = cmp(self.getCursor("to"), to) == 0, - empty = !self.somethingSelected(); - self.replaceRange(endString, to); - if (atCursor) self.setSelection(empty ? to : self.getCursor("from"), to); - self.replaceRange(startString, from); - } - }); - }); - CodeMirror.defineExtension("uncomment", function (from, to, options) { - if (!options) options = noOptions; - var self = this, - mode = getMode(self, from); - var end = Math.min(to.ch != 0 || to.line == from.line ? to.line : to.line - 1, self.lastLine()), - start = Math.min(from.line, end); - var lineString = options.lineComment || mode.lineComment, - lines = []; - var pad = options.padding == null ? " " : options.padding, - didSomething; - lineComment: { - if (!lineString) break lineComment; - for (var i = start; i <= end; ++i) { - var line = self.getLine(i); - var found = line.indexOf(lineString); - if (found > -1 && !/comment/.test(self.getTokenTypeAt(Pos(i, found + 1)))) found = -1; - if (found == -1 && nonWS.test(line)) break lineComment; - if (found > -1 && nonWS.test(line.slice(0, found))) break lineComment; - lines.push(line); - } - self.operation(function () { - for (var i2 = start; i2 <= end; ++i2) { - var line2 = lines[i2 - start]; - var pos = line2.indexOf(lineString), - endPos = pos + lineString.length; - if (pos < 0) continue; - if (line2.slice(endPos, endPos + pad.length) == pad) endPos += pad.length; - didSomething = true; - self.replaceRange("", Pos(i2, pos), Pos(i2, endPos)); - } - }); - if (didSomething) return true; - } - var startString = options.blockCommentStart || mode.blockCommentStart; - var endString = options.blockCommentEnd || mode.blockCommentEnd; - if (!startString || !endString) return false; - var lead = options.blockCommentLead || mode.blockCommentLead; - var startLine = self.getLine(start), - open = startLine.indexOf(startString); - if (open == -1) return false; - var endLine = end == start ? startLine : self.getLine(end); - var close = endLine.indexOf(endString, end == start ? open + startString.length : 0); - var insideStart = Pos(start, open + 1), - insideEnd = Pos(end, close + 1); - if (close == -1 || !/comment/.test(self.getTokenTypeAt(insideStart)) || !/comment/.test(self.getTokenTypeAt(insideEnd)) || self.getRange(insideStart, insideEnd, "\n").indexOf(endString) > -1) return false; - var lastStart = startLine.lastIndexOf(startString, from.ch); - var firstEnd = lastStart == -1 ? -1 : startLine.slice(0, from.ch).indexOf(endString, lastStart + startString.length); - if (lastStart != -1 && firstEnd != -1 && firstEnd + endString.length != from.ch) return false; - firstEnd = endLine.indexOf(endString, to.ch); - var almostLastStart = endLine.slice(to.ch).lastIndexOf(startString, firstEnd - to.ch); - lastStart = firstEnd == -1 || almostLastStart == -1 ? -1 : to.ch + almostLastStart; - if (firstEnd != -1 && lastStart != -1 && lastStart != to.ch) return false; - self.operation(function () { - self.replaceRange("", Pos(end, close - (pad && endLine.slice(close - pad.length, close) == pad ? pad.length : 0)), Pos(end, close + endString.length)); - var openEnd = open + startString.length; - if (pad && startLine.slice(openEnd, openEnd + pad.length) == pad) openEnd += pad.length; - self.replaceRange("", Pos(start, open), Pos(start, openEnd)); - if (lead) for (var i2 = start + 1; i2 <= end; ++i2) { - var line2 = self.getLine(i2), - found2 = line2.indexOf(lead); - if (found2 == -1 || nonWS.test(line2.slice(0, found2))) continue; - var foundEnd = found2 + lead.length; - if (pad && line2.slice(foundEnd, foundEnd + pad.length) == pad) foundEnd += pad.length; - self.replaceRange("", Pos(i2, found2), Pos(i2, foundEnd)); - } - }); - return true; - }); - }); -})(); -var commentExports = comment$2.exports; -const comment = /* @__PURE__ */codemirror.getDefaultExportFromCjs(commentExports); -const comment$1 = /* @__PURE__ */_mergeNamespaces({ - __proto__: null, - default: comment -}, [commentExports]); -exports.comment = comment$1; - -/***/ }), - -/***/ "../../graphiql-react/dist/dialog.cjs.js": -/*!***********************************************!*\ - !*** ../../graphiql-react/dist/dialog.cjs.js ***! - \***********************************************/ -/***/ (function(__unused_webpack_module, exports, __webpack_require__) { - - - -const codemirror = __webpack_require__(/*! ./codemirror.cjs2.js */ "../../graphiql-react/dist/codemirror.cjs2.js"); -function _mergeNamespaces(n, m) { - for (var i = 0; i < m.length; i++) { - const e = m[i]; - if (typeof e !== "string" && !Array.isArray(e)) { - for (const k in e) { - if (k !== "default" && !(k in n)) { - const d = Object.getOwnPropertyDescriptor(e, k); - if (d) { - Object.defineProperty(n, k, d.get ? d : { - enumerable: true, - get: () => e[k] - }); - } - } - } - } - } - return Object.freeze(Object.defineProperty(n, Symbol.toStringTag, { - value: "Module" - })); -} -var dialog$2 = { - exports: {} -}; -(function (module2, exports2) { - (function (mod) { - mod(codemirror.requireCodemirror()); - })(function (CodeMirror) { - function dialogDiv(cm, template, bottom) { - var wrap = cm.getWrapperElement(); - var dialog2; - dialog2 = wrap.appendChild(document.createElement("div")); - if (bottom) dialog2.className = "CodeMirror-dialog CodeMirror-dialog-bottom";else dialog2.className = "CodeMirror-dialog CodeMirror-dialog-top"; - if (typeof template == "string") { - dialog2.innerHTML = template; - } else { - dialog2.appendChild(template); - } - CodeMirror.addClass(wrap, "dialog-opened"); - return dialog2; - } - function closeNotification(cm, newVal) { - if (cm.state.currentNotificationClose) cm.state.currentNotificationClose(); - cm.state.currentNotificationClose = newVal; - } - CodeMirror.defineExtension("openDialog", function (template, callback, options) { - if (!options) options = {}; - closeNotification(this, null); - var dialog2 = dialogDiv(this, template, options.bottom); - var closed = false, - me = this; - function close(newVal) { - if (typeof newVal == "string") { - inp.value = newVal; - } else { - if (closed) return; - closed = true; - CodeMirror.rmClass(dialog2.parentNode, "dialog-opened"); - dialog2.parentNode.removeChild(dialog2); - me.focus(); - if (options.onClose) options.onClose(dialog2); - } - } - var inp = dialog2.getElementsByTagName("input")[0], - button; - if (inp) { - inp.focus(); - if (options.value) { - inp.value = options.value; - if (options.selectValueOnOpen !== false) { - inp.select(); - } - } - if (options.onInput) CodeMirror.on(inp, "input", function (e) { - options.onInput(e, inp.value, close); - }); - if (options.onKeyUp) CodeMirror.on(inp, "keyup", function (e) { - options.onKeyUp(e, inp.value, close); - }); - CodeMirror.on(inp, "keydown", function (e) { - if (options && options.onKeyDown && options.onKeyDown(e, inp.value, close)) { - return; - } - if (e.keyCode == 27 || options.closeOnEnter !== false && e.keyCode == 13) { - inp.blur(); - CodeMirror.e_stop(e); - close(); - } - if (e.keyCode == 13) callback(inp.value, e); - }); - if (options.closeOnBlur !== false) CodeMirror.on(dialog2, "focusout", function (evt) { - if (evt.relatedTarget !== null) close(); - }); - } else if (button = dialog2.getElementsByTagName("button")[0]) { - CodeMirror.on(button, "click", function () { - close(); - me.focus(); - }); - if (options.closeOnBlur !== false) CodeMirror.on(button, "blur", close); - button.focus(); - } - return close; - }); - CodeMirror.defineExtension("openConfirm", function (template, callbacks, options) { - closeNotification(this, null); - var dialog2 = dialogDiv(this, template, options && options.bottom); - var buttons = dialog2.getElementsByTagName("button"); - var closed = false, - me = this, - blurring = 1; - function close() { - if (closed) return; - closed = true; - CodeMirror.rmClass(dialog2.parentNode, "dialog-opened"); - dialog2.parentNode.removeChild(dialog2); - me.focus(); - } - buttons[0].focus(); - for (var i = 0; i < buttons.length; ++i) { - var b = buttons[i]; - (function (callback) { - CodeMirror.on(b, "click", function (e) { - CodeMirror.e_preventDefault(e); - close(); - if (callback) callback(me); - }); - })(callbacks[i]); - CodeMirror.on(b, "blur", function () { - --blurring; - setTimeout(function () { - if (blurring <= 0) close(); - }, 200); - }); - CodeMirror.on(b, "focus", function () { - ++blurring; - }); - } - }); - CodeMirror.defineExtension("openNotification", function (template, options) { - closeNotification(this, close); - var dialog2 = dialogDiv(this, template, options && options.bottom); - var closed = false, - doneTimer; - var duration = options && typeof options.duration !== "undefined" ? options.duration : 5e3; - function close() { - if (closed) return; - closed = true; - clearTimeout(doneTimer); - CodeMirror.rmClass(dialog2.parentNode, "dialog-opened"); - dialog2.parentNode.removeChild(dialog2); - } - CodeMirror.on(dialog2, "click", function (e) { - CodeMirror.e_preventDefault(e); - close(); - }); - if (duration) doneTimer = setTimeout(close, duration); - return close; - }); - }); -})(); -var dialogExports = dialog$2.exports; -const dialog = /* @__PURE__ */codemirror.getDefaultExportFromCjs(dialogExports); -const dialog$1 = /* @__PURE__ */_mergeNamespaces({ - __proto__: null, - default: dialog -}, [dialogExports]); -exports.dialog = dialog$1; -exports.dialogExports = dialogExports; - -/***/ }), - -/***/ "../../graphiql-react/dist/foldgutter.cjs.js": -/*!***************************************************!*\ - !*** ../../graphiql-react/dist/foldgutter.cjs.js ***! - \***************************************************/ -/***/ (function(__unused_webpack_module, exports, __webpack_require__) { - - - -const codemirror = __webpack_require__(/*! ./codemirror.cjs2.js */ "../../graphiql-react/dist/codemirror.cjs2.js"); -function _mergeNamespaces(n, m) { - for (var i = 0; i < m.length; i++) { - const e = m[i]; - if (typeof e !== "string" && !Array.isArray(e)) { - for (const k in e) { - if (k !== "default" && !(k in n)) { - const d = Object.getOwnPropertyDescriptor(e, k); - if (d) { - Object.defineProperty(n, k, d.get ? d : { - enumerable: true, - get: () => e[k] - }); - } - } - } - } - } - return Object.freeze(Object.defineProperty(n, Symbol.toStringTag, { - value: "Module" - })); -} -var foldgutter$2 = { - exports: {} -}; -var foldcode = { - exports: {} -}; -var hasRequiredFoldcode; -function requireFoldcode() { - if (hasRequiredFoldcode) return foldcode.exports; - hasRequiredFoldcode = 1; - (function (module2, exports2) { - (function (mod) { - mod(codemirror.requireCodemirror()); - })(function (CodeMirror) { - function doFold(cm, pos, options, force) { - if (options && options.call) { - var finder = options; - options = null; - } else { - var finder = getOption(cm, options, "rangeFinder"); - } - if (typeof pos == "number") pos = CodeMirror.Pos(pos, 0); - var minSize = getOption(cm, options, "minFoldSize"); - function getRange(allowFolded) { - var range2 = finder(cm, pos); - if (!range2 || range2.to.line - range2.from.line < minSize) return null; - if (force === "fold") return range2; - var marks = cm.findMarksAt(range2.from); - for (var i = 0; i < marks.length; ++i) { - if (marks[i].__isFold) { - if (!allowFolded) return null; - range2.cleared = true; - marks[i].clear(); - } - } - return range2; - } - var range = getRange(true); - if (getOption(cm, options, "scanUp")) while (!range && pos.line > cm.firstLine()) { - pos = CodeMirror.Pos(pos.line - 1, 0); - range = getRange(false); - } - if (!range || range.cleared || force === "unfold") return; - var myWidget = makeWidget(cm, options, range); - CodeMirror.on(myWidget, "mousedown", function (e) { - myRange.clear(); - CodeMirror.e_preventDefault(e); - }); - var myRange = cm.markText(range.from, range.to, { - replacedWith: myWidget, - clearOnEnter: getOption(cm, options, "clearOnEnter"), - __isFold: true - }); - myRange.on("clear", function (from, to) { - CodeMirror.signal(cm, "unfold", cm, from, to); - }); - CodeMirror.signal(cm, "fold", cm, range.from, range.to); - } - function makeWidget(cm, options, range) { - var widget = getOption(cm, options, "widget"); - if (typeof widget == "function") { - widget = widget(range.from, range.to); - } - if (typeof widget == "string") { - var text = document.createTextNode(widget); - widget = document.createElement("span"); - widget.appendChild(text); - widget.className = "CodeMirror-foldmarker"; - } else if (widget) { - widget = widget.cloneNode(true); - } - return widget; - } - CodeMirror.newFoldFunction = function (rangeFinder, widget) { - return function (cm, pos) { - doFold(cm, pos, { - rangeFinder, - widget - }); - }; - }; - CodeMirror.defineExtension("foldCode", function (pos, options, force) { - doFold(this, pos, options, force); - }); - CodeMirror.defineExtension("isFolded", function (pos) { - var marks = this.findMarksAt(pos); - for (var i = 0; i < marks.length; ++i) if (marks[i].__isFold) return true; - }); - CodeMirror.commands.toggleFold = function (cm) { - cm.foldCode(cm.getCursor()); - }; - CodeMirror.commands.fold = function (cm) { - cm.foldCode(cm.getCursor(), null, "fold"); - }; - CodeMirror.commands.unfold = function (cm) { - cm.foldCode(cm.getCursor(), { - scanUp: false - }, "unfold"); - }; - CodeMirror.commands.foldAll = function (cm) { - cm.operation(function () { - for (var i = cm.firstLine(), e = cm.lastLine(); i <= e; i++) cm.foldCode(CodeMirror.Pos(i, 0), { - scanUp: false - }, "fold"); - }); - }; - CodeMirror.commands.unfoldAll = function (cm) { - cm.operation(function () { - for (var i = cm.firstLine(), e = cm.lastLine(); i <= e; i++) cm.foldCode(CodeMirror.Pos(i, 0), { - scanUp: false - }, "unfold"); - }); - }; - CodeMirror.registerHelper("fold", "combine", function () { - var funcs = Array.prototype.slice.call(arguments, 0); - return function (cm, start) { - for (var i = 0; i < funcs.length; ++i) { - var found = funcs[i](cm, start); - if (found) return found; - } - }; - }); - CodeMirror.registerHelper("fold", "auto", function (cm, start) { - var helpers = cm.getHelpers(start, "fold"); - for (var i = 0; i < helpers.length; i++) { - var cur = helpers[i](cm, start); - if (cur) return cur; - } - }); - var defaultOptions = { - rangeFinder: CodeMirror.fold.auto, - widget: "↔", - minFoldSize: 0, - scanUp: false, - clearOnEnter: true - }; - CodeMirror.defineOption("foldOptions", null); - function getOption(cm, options, name) { - if (options && options[name] !== void 0) return options[name]; - var editorOptions = cm.options.foldOptions; - if (editorOptions && editorOptions[name] !== void 0) return editorOptions[name]; - return defaultOptions[name]; - } - CodeMirror.defineExtension("foldOption", function (options, name) { - return getOption(this, options, name); - }); - }); - })(); - return foldcode.exports; -} -(function (module2, exports2) { - (function (mod) { - mod(codemirror.requireCodemirror(), requireFoldcode()); - })(function (CodeMirror) { - CodeMirror.defineOption("foldGutter", false, function (cm, val, old) { - if (old && old != CodeMirror.Init) { - cm.clearGutter(cm.state.foldGutter.options.gutter); - cm.state.foldGutter = null; - cm.off("gutterClick", onGutterClick); - cm.off("changes", onChange); - cm.off("viewportChange", onViewportChange); - cm.off("fold", onFold); - cm.off("unfold", onFold); - cm.off("swapDoc", onChange); - } - if (val) { - cm.state.foldGutter = new State(parseOptions(val)); - updateInViewport(cm); - cm.on("gutterClick", onGutterClick); - cm.on("changes", onChange); - cm.on("viewportChange", onViewportChange); - cm.on("fold", onFold); - cm.on("unfold", onFold); - cm.on("swapDoc", onChange); - } - }); - var Pos = CodeMirror.Pos; - function State(options) { - this.options = options; - this.from = this.to = 0; - } - function parseOptions(opts) { - if (opts === true) opts = {}; - if (opts.gutter == null) opts.gutter = "CodeMirror-foldgutter"; - if (opts.indicatorOpen == null) opts.indicatorOpen = "CodeMirror-foldgutter-open"; - if (opts.indicatorFolded == null) opts.indicatorFolded = "CodeMirror-foldgutter-folded"; - return opts; - } - function isFolded(cm, line) { - var marks = cm.findMarks(Pos(line, 0), Pos(line + 1, 0)); - for (var i = 0; i < marks.length; ++i) { - if (marks[i].__isFold) { - var fromPos = marks[i].find(-1); - if (fromPos && fromPos.line === line) return marks[i]; - } - } - } - function marker(spec) { - if (typeof spec == "string") { - var elt = document.createElement("div"); - elt.className = spec + " CodeMirror-guttermarker-subtle"; - return elt; - } else { - return spec.cloneNode(true); - } - } - function updateFoldInfo(cm, from, to) { - var opts = cm.state.foldGutter.options, - cur = from - 1; - var minSize = cm.foldOption(opts, "minFoldSize"); - var func = cm.foldOption(opts, "rangeFinder"); - var clsFolded = typeof opts.indicatorFolded == "string" && classTest(opts.indicatorFolded); - var clsOpen = typeof opts.indicatorOpen == "string" && classTest(opts.indicatorOpen); - cm.eachLine(from, to, function (line) { - ++cur; - var mark = null; - var old = line.gutterMarkers; - if (old) old = old[opts.gutter]; - if (isFolded(cm, cur)) { - if (clsFolded && old && clsFolded.test(old.className)) return; - mark = marker(opts.indicatorFolded); - } else { - var pos = Pos(cur, 0); - var range = func && func(cm, pos); - if (range && range.to.line - range.from.line >= minSize) { - if (clsOpen && old && clsOpen.test(old.className)) return; - mark = marker(opts.indicatorOpen); - } - } - if (!mark && !old) return; - cm.setGutterMarker(line, opts.gutter, mark); - }); - } - function classTest(cls) { - return new RegExp("(^|\\s)" + cls + "(?:$|\\s)\\s*"); - } - function updateInViewport(cm) { - var vp = cm.getViewport(), - state = cm.state.foldGutter; - if (!state) return; - cm.operation(function () { - updateFoldInfo(cm, vp.from, vp.to); - }); - state.from = vp.from; - state.to = vp.to; - } - function onGutterClick(cm, line, gutter) { - var state = cm.state.foldGutter; - if (!state) return; - var opts = state.options; - if (gutter != opts.gutter) return; - var folded = isFolded(cm, line); - if (folded) folded.clear();else cm.foldCode(Pos(line, 0), opts); - } - function onChange(cm) { - var state = cm.state.foldGutter; - if (!state) return; - var opts = state.options; - state.from = state.to = 0; - clearTimeout(state.changeUpdate); - state.changeUpdate = setTimeout(function () { - updateInViewport(cm); - }, opts.foldOnChangeTimeSpan || 600); - } - function onViewportChange(cm) { - var state = cm.state.foldGutter; - if (!state) return; - var opts = state.options; - clearTimeout(state.changeUpdate); - state.changeUpdate = setTimeout(function () { - var vp = cm.getViewport(); - if (state.from == state.to || vp.from - state.to > 20 || state.from - vp.to > 20) { - updateInViewport(cm); - } else { - cm.operation(function () { - if (vp.from < state.from) { - updateFoldInfo(cm, vp.from, state.from); - state.from = vp.from; - } - if (vp.to > state.to) { - updateFoldInfo(cm, state.to, vp.to); - state.to = vp.to; - } - }); - } - }, opts.updateViewportTimeSpan || 400); - } - function onFold(cm, from) { - var state = cm.state.foldGutter; - if (!state) return; - var line = from.line; - if (line >= state.from && line < state.to) updateFoldInfo(cm, line, line + 1); - } - }); -})(); -var foldgutterExports = foldgutter$2.exports; -const foldgutter = /* @__PURE__ */codemirror.getDefaultExportFromCjs(foldgutterExports); -const foldgutter$1 = /* @__PURE__ */_mergeNamespaces({ - __proto__: null, - default: foldgutter -}, [foldgutterExports]); -exports.foldgutter = foldgutter$1; - -/***/ }), - -/***/ "../../graphiql-react/dist/forEachState.cjs.js": -/*!*****************************************************!*\ - !*** ../../graphiql-react/dist/forEachState.cjs.js ***! - \*****************************************************/ -/***/ (function(__unused_webpack_module, exports) { - - - -function forEachState(stack, fn) { - const reverseStateStack = []; - let state = stack; - while (state === null || state === void 0 ? void 0 : state.kind) { - reverseStateStack.push(state); - state = state.prevState; - } - for (let i = reverseStateStack.length - 1; i >= 0; i--) { - fn(reverseStateStack[i]); - } -} -exports.forEachState = forEachState; - -/***/ }), - -/***/ "../../graphiql-react/dist/hint.cjs.js": -/*!*********************************************!*\ - !*** ../../graphiql-react/dist/hint.cjs.js ***! - \*********************************************/ +/***/ "../../codemirror-graphql/esm/hint.js": +/*!********************************************!*\ + !*** ../../codemirror-graphql/esm/hint.js ***! + \********************************************/ /***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) { +"use strict"; -const codemirror = __webpack_require__(/*! ./codemirror.cjs.js */ "../../graphiql-react/dist/codemirror.cjs.js"); -__webpack_require__(/*! ./show-hint.cjs.js */ "../../graphiql-react/dist/show-hint.cjs.js"); -const graphqlLanguageService = __webpack_require__(/*! graphql-language-service */ "../../graphql-language-service/esm/index.js"); -codemirror.CodeMirror.registerHelper("hint", "graphql", (editor, options) => { +var _codemirror = _interopRequireDefault(__webpack_require__(/*! codemirror */ "../../../node_modules/codemirror/lib/codemirror.js")); +__webpack_require__(/*! codemirror/addon/hint/show-hint.js */ "../../../node_modules/codemirror/addon/hint/show-hint.js"); +var _graphqlLanguageService = __webpack_require__(/*! graphql-language-service */ "../../graphql-language-service/esm/index.js"); +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } +_codemirror.default.registerHelper('hint', 'graphql', (editor, options) => { const { schema, externalFragments, @@ -68130,8 +73292,8 @@ codemirror.CodeMirror.registerHelper("hint", "graphql", (editor, options) => { const cur = editor.getCursor(); const token = editor.getTokenAt(cur); const tokenStart = token.type !== null && /"|\w/.test(token.string[0]) ? token.start : token.end; - const position = new graphqlLanguageService.Position(cur.line, tokenStart); - const rawResults = graphqlLanguageService.getAutocompleteSuggestions(schema, editor.getValue(), position, token, externalFragments, autocompleteOptions); + const position = new _graphqlLanguageService.Position(cur.line, tokenStart); + const rawResults = (0, _graphqlLanguageService.getAutocompleteSuggestions)(schema, editor.getValue(), position, token, externalFragments, autocompleteOptions); const results = { list: rawResults.map(item => { var _a; @@ -68153,26 +73315,611 @@ codemirror.CodeMirror.registerHelper("hint", "graphql", (editor, options) => { } }; if ((results === null || results === void 0 ? void 0 : results.list) && results.list.length > 0) { - results.from = codemirror.CodeMirror.Pos(results.from.line, results.from.ch); - results.to = codemirror.CodeMirror.Pos(results.to.line, results.to.ch); - codemirror.CodeMirror.signal(editor, "hasCompletion", editor, results, token); + results.from = _codemirror.default.Pos(results.from.line, results.from.ch); + results.to = _codemirror.default.Pos(results.to.line, results.to.ch); + _codemirror.default.signal(editor, 'hasCompletion', editor, results, token); } return results; }); /***/ }), -/***/ "../../graphiql-react/dist/hint.cjs2.js": -/*!**********************************************!*\ - !*** ../../graphiql-react/dist/hint.cjs2.js ***! - \**********************************************/ +/***/ "../../codemirror-graphql/esm/info.js": +/*!********************************************!*\ + !*** ../../codemirror-graphql/esm/info.js ***! + \********************************************/ /***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) { +"use strict"; -const codemirror = __webpack_require__(/*! ./codemirror.cjs.js */ "../../graphiql-react/dist/codemirror.cjs.js"); -const graphql = __webpack_require__(/*! graphql */ "../../../node_modules/graphql/index.mjs"); -const forEachState = __webpack_require__(/*! ./forEachState.cjs.js */ "../../graphiql-react/dist/forEachState.cjs.js"); +var _graphql = __webpack_require__(/*! graphql */ "../../../node_modules/graphql/index.mjs"); +var _codemirror = _interopRequireDefault(__webpack_require__(/*! codemirror */ "../../../node_modules/codemirror/lib/codemirror.js")); +var _getTypeInfo = _interopRequireDefault(__webpack_require__(/*! ./utils/getTypeInfo */ "../../codemirror-graphql/esm/utils/getTypeInfo.js")); +var _SchemaReference = __webpack_require__(/*! ./utils/SchemaReference */ "../../codemirror-graphql/esm/utils/SchemaReference.js"); +__webpack_require__(/*! ./utils/info-addon */ "../../codemirror-graphql/esm/utils/info-addon.js"); +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } +_codemirror.default.registerHelper('info', 'graphql', (token, options) => { + var _a; + if (!options.schema || !token.state) { + return; + } + const { + kind, + step + } = token.state; + const typeInfo = (0, _getTypeInfo.default)(options.schema, token.state); + if (kind === 'Field' && step === 0 && typeInfo.fieldDef || kind === 'AliasedField' && step === 2 && typeInfo.fieldDef || kind === 'ObjectField' && step === 0 && typeInfo.fieldDef) { + const header = document.createElement('div'); + header.className = 'CodeMirror-info-header'; + renderField(header, typeInfo, options); + const into = document.createElement('div'); + into.append(header); + renderDescription(into, options, typeInfo.fieldDef); + return into; + } + if (kind === 'Directive' && step === 1 && typeInfo.directiveDef) { + const header = document.createElement('div'); + header.className = 'CodeMirror-info-header'; + renderDirective(header, typeInfo, options); + const into = document.createElement('div'); + into.append(header); + renderDescription(into, options, typeInfo.directiveDef); + return into; + } + if (kind === 'Argument' && step === 0 && typeInfo.argDef) { + const header = document.createElement('div'); + header.className = 'CodeMirror-info-header'; + renderArg(header, typeInfo, options); + const into = document.createElement('div'); + into.append(header); + renderDescription(into, options, typeInfo.argDef); + return into; + } + if (kind === 'EnumValue' && ((_a = typeInfo.enumValue) === null || _a === void 0 ? void 0 : _a.description)) { + const header = document.createElement('div'); + header.className = 'CodeMirror-info-header'; + renderEnumValue(header, typeInfo, options); + const into = document.createElement('div'); + into.append(header); + renderDescription(into, options, typeInfo.enumValue); + return into; + } + if (kind === 'NamedType' && typeInfo.type && typeInfo.type.description) { + const header = document.createElement('div'); + header.className = 'CodeMirror-info-header'; + renderType(header, typeInfo, options, typeInfo.type); + const into = document.createElement('div'); + into.append(header); + renderDescription(into, options, typeInfo.type); + return into; + } +}); +function renderField(into, typeInfo, options) { + renderQualifiedField(into, typeInfo, options); + renderTypeAnnotation(into, typeInfo, options, typeInfo.type); +} +function renderQualifiedField(into, typeInfo, options) { + var _a; + const fieldName = ((_a = typeInfo.fieldDef) === null || _a === void 0 ? void 0 : _a.name) || ''; + text(into, fieldName, 'field-name', options, (0, _SchemaReference.getFieldReference)(typeInfo)); +} +function renderDirective(into, typeInfo, options) { + var _a; + const name = '@' + (((_a = typeInfo.directiveDef) === null || _a === void 0 ? void 0 : _a.name) || ''); + text(into, name, 'directive-name', options, (0, _SchemaReference.getDirectiveReference)(typeInfo)); +} +function renderArg(into, typeInfo, options) { + var _a; + const name = ((_a = typeInfo.argDef) === null || _a === void 0 ? void 0 : _a.name) || ''; + text(into, name, 'arg-name', options, (0, _SchemaReference.getArgumentReference)(typeInfo)); + renderTypeAnnotation(into, typeInfo, options, typeInfo.inputType); +} +function renderEnumValue(into, typeInfo, options) { + var _a; + const name = ((_a = typeInfo.enumValue) === null || _a === void 0 ? void 0 : _a.name) || ''; + renderType(into, typeInfo, options, typeInfo.inputType); + text(into, '.'); + text(into, name, 'enum-value', options, (0, _SchemaReference.getEnumValueReference)(typeInfo)); +} +function renderTypeAnnotation(into, typeInfo, options, t) { + const typeSpan = document.createElement('span'); + typeSpan.className = 'type-name-pill'; + if (t instanceof _graphql.GraphQLNonNull) { + renderType(typeSpan, typeInfo, options, t.ofType); + text(typeSpan, '!'); + } else if (t instanceof _graphql.GraphQLList) { + text(typeSpan, '['); + renderType(typeSpan, typeInfo, options, t.ofType); + text(typeSpan, ']'); + } else { + text(typeSpan, (t === null || t === void 0 ? void 0 : t.name) || '', 'type-name', options, (0, _SchemaReference.getTypeReference)(typeInfo, t)); + } + into.append(typeSpan); +} +function renderType(into, typeInfo, options, t) { + if (t instanceof _graphql.GraphQLNonNull) { + renderType(into, typeInfo, options, t.ofType); + text(into, '!'); + } else if (t instanceof _graphql.GraphQLList) { + text(into, '['); + renderType(into, typeInfo, options, t.ofType); + text(into, ']'); + } else { + text(into, (t === null || t === void 0 ? void 0 : t.name) || '', 'type-name', options, (0, _SchemaReference.getTypeReference)(typeInfo, t)); + } +} +function renderDescription(into, options, def) { + const { + description + } = def; + if (description) { + const descriptionDiv = document.createElement('div'); + descriptionDiv.className = 'info-description'; + if (options.renderDescription) { + descriptionDiv.innerHTML = options.renderDescription(description); + } else { + descriptionDiv.append(document.createTextNode(description)); + } + into.append(descriptionDiv); + } + renderDeprecation(into, options, def); +} +function renderDeprecation(into, options, def) { + const reason = def.deprecationReason; + if (reason) { + const deprecationDiv = document.createElement('div'); + deprecationDiv.className = 'info-deprecation'; + into.append(deprecationDiv); + const label = document.createElement('span'); + label.className = 'info-deprecation-label'; + label.append(document.createTextNode('Deprecated')); + deprecationDiv.append(label); + const reasonDiv = document.createElement('div'); + reasonDiv.className = 'info-deprecation-reason'; + if (options.renderDescription) { + reasonDiv.innerHTML = options.renderDescription(reason); + } else { + reasonDiv.append(document.createTextNode(reason)); + } + deprecationDiv.append(reasonDiv); + } +} +function text(into, content, className = '', options = { + onClick: null +}, ref = null) { + if (className) { + const { + onClick + } = options; + let node; + if (onClick) { + node = document.createElement('a'); + node.href = 'javascript:void 0'; + node.addEventListener('click', e => { + e.preventDefault(); + onClick(ref, e); + }); + } else { + node = document.createElement('span'); + } + node.className = className; + node.append(document.createTextNode(content)); + into.append(node); + } else { + into.append(document.createTextNode(content)); + } +} + +/***/ }), + +/***/ "../../codemirror-graphql/esm/jump.js": +/*!********************************************!*\ + !*** ../../codemirror-graphql/esm/jump.js ***! + \********************************************/ +/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) { + +"use strict"; + + +var _codemirror = _interopRequireDefault(__webpack_require__(/*! codemirror */ "../../../node_modules/codemirror/lib/codemirror.js")); +var _getTypeInfo = _interopRequireDefault(__webpack_require__(/*! ./utils/getTypeInfo */ "../../codemirror-graphql/esm/utils/getTypeInfo.js")); +var _SchemaReference = __webpack_require__(/*! ./utils/SchemaReference */ "../../codemirror-graphql/esm/utils/SchemaReference.js"); +__webpack_require__(/*! ./utils/jump-addon */ "../../codemirror-graphql/esm/utils/jump-addon.js"); +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } +_codemirror.default.registerHelper('jump', 'graphql', (token, options) => { + if (!options.schema || !options.onClick || !token.state) { + return; + } + const { + state + } = token; + const { + kind, + step + } = state; + const typeInfo = (0, _getTypeInfo.default)(options.schema, state); + if (kind === 'Field' && step === 0 && typeInfo.fieldDef || kind === 'AliasedField' && step === 2 && typeInfo.fieldDef) { + return (0, _SchemaReference.getFieldReference)(typeInfo); + } + if (kind === 'Directive' && step === 1 && typeInfo.directiveDef) { + return (0, _SchemaReference.getDirectiveReference)(typeInfo); + } + if (kind === 'Argument' && step === 0 && typeInfo.argDef) { + return (0, _SchemaReference.getArgumentReference)(typeInfo); + } + if (kind === 'EnumValue' && typeInfo.enumValue) { + return (0, _SchemaReference.getEnumValueReference)(typeInfo); + } + if (kind === 'NamedType' && typeInfo.type) { + return (0, _SchemaReference.getTypeReference)(typeInfo); + } +}); + +/***/ }), + +/***/ "../../codemirror-graphql/esm/lint.js": +/*!********************************************!*\ + !*** ../../codemirror-graphql/esm/lint.js ***! + \********************************************/ +/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) { + +"use strict"; + + +var _codemirror = _interopRequireDefault(__webpack_require__(/*! codemirror */ "../../../node_modules/codemirror/lib/codemirror.js")); +var _graphqlLanguageService = __webpack_require__(/*! graphql-language-service */ "../../graphql-language-service/esm/index.js"); +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } +const SEVERITY = ['error', 'warning', 'information', 'hint']; +const TYPE = { + 'GraphQL: Validation': 'validation', + 'GraphQL: Deprecation': 'deprecation', + 'GraphQL: Syntax': 'syntax' +}; +_codemirror.default.registerHelper('lint', 'graphql', (text, options) => { + const { + schema, + validationRules, + externalFragments + } = options; + const rawResults = (0, _graphqlLanguageService.getDiagnostics)(text, schema, validationRules, undefined, externalFragments); + const results = rawResults.map(error => ({ + message: error.message, + severity: error.severity ? SEVERITY[error.severity - 1] : SEVERITY[0], + type: error.source ? TYPE[error.source] : undefined, + from: _codemirror.default.Pos(error.range.start.line, error.range.start.character), + to: _codemirror.default.Pos(error.range.end.line, error.range.end.character) + })); + return results; +}); + +/***/ }), + +/***/ "../../codemirror-graphql/esm/mode.js": +/*!********************************************!*\ + !*** ../../codemirror-graphql/esm/mode.js ***! + \********************************************/ +/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) { + +"use strict"; + + +var _codemirror = _interopRequireDefault(__webpack_require__(/*! codemirror */ "../../../node_modules/codemirror/lib/codemirror.js")); +var _modeFactory = _interopRequireDefault(__webpack_require__(/*! ./utils/mode-factory */ "../../codemirror-graphql/esm/utils/mode-factory.js")); +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } +_codemirror.default.defineMode('graphql', _modeFactory.default); + +/***/ }), + +/***/ "../../codemirror-graphql/esm/results/mode.js": +/*!****************************************************!*\ + !*** ../../codemirror-graphql/esm/results/mode.js ***! + \****************************************************/ +/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) { + +"use strict"; + + +var _codemirror = _interopRequireDefault(__webpack_require__(/*! codemirror */ "../../../node_modules/codemirror/lib/codemirror.js")); +var _graphqlLanguageService = __webpack_require__(/*! graphql-language-service */ "../../graphql-language-service/esm/index.js"); +var _modeIndent = _interopRequireDefault(__webpack_require__(/*! ../utils/mode-indent */ "../../codemirror-graphql/esm/utils/mode-indent.js")); +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } +_codemirror.default.defineMode('graphql-results', config => { + const parser = (0, _graphqlLanguageService.onlineParser)({ + eatWhitespace: stream => stream.eatSpace(), + lexRules: LexRules, + parseRules: ParseRules, + editorConfig: { + tabSize: config.tabSize + } + }); + return { + config, + startState: parser.startState, + token: parser.token, + indent: _modeIndent.default, + electricInput: /^\s*[}\]]/, + fold: 'brace', + closeBrackets: { + pairs: '[]{}""', + explode: '[]{}' + } + }; +}); +const LexRules = { + Punctuation: /^\[|]|\{|\}|:|,/, + Number: /^-?(?:0|(?:[1-9][0-9]*))(?:\.[0-9]*)?(?:[eE][+-]?[0-9]+)?/, + String: /^"(?:[^"\\]|\\(?:"|\/|\\|b|f|n|r|t|u[0-9a-fA-F]{4}))*"?/, + Keyword: /^true|false|null/ +}; +const ParseRules = { + Document: [(0, _graphqlLanguageService.p)('{'), (0, _graphqlLanguageService.list)('Entry', (0, _graphqlLanguageService.p)(',')), (0, _graphqlLanguageService.p)('}')], + Entry: [(0, _graphqlLanguageService.t)('String', 'def'), (0, _graphqlLanguageService.p)(':'), 'Value'], + Value(token) { + switch (token.kind) { + case 'Number': + return 'NumberValue'; + case 'String': + return 'StringValue'; + case 'Punctuation': + switch (token.value) { + case '[': + return 'ListValue'; + case '{': + return 'ObjectValue'; + } + return null; + case 'Keyword': + switch (token.value) { + case 'true': + case 'false': + return 'BooleanValue'; + case 'null': + return 'NullValue'; + } + return null; + } + }, + NumberValue: [(0, _graphqlLanguageService.t)('Number', 'number')], + StringValue: [(0, _graphqlLanguageService.t)('String', 'string')], + BooleanValue: [(0, _graphqlLanguageService.t)('Keyword', 'builtin')], + NullValue: [(0, _graphqlLanguageService.t)('Keyword', 'keyword')], + ListValue: [(0, _graphqlLanguageService.p)('['), (0, _graphqlLanguageService.list)('Value', (0, _graphqlLanguageService.p)(',')), (0, _graphqlLanguageService.p)(']')], + ObjectValue: [(0, _graphqlLanguageService.p)('{'), (0, _graphqlLanguageService.list)('ObjectField', (0, _graphqlLanguageService.p)(',')), (0, _graphqlLanguageService.p)('}')], + ObjectField: [(0, _graphqlLanguageService.t)('String', 'property'), (0, _graphqlLanguageService.p)(':'), 'Value'] +}; + +/***/ }), + +/***/ "../../codemirror-graphql/esm/utils/SchemaReference.js": +/*!*************************************************************!*\ + !*** ../../codemirror-graphql/esm/utils/SchemaReference.js ***! + \*************************************************************/ +/***/ (function(__unused_webpack_module, exports, __webpack_require__) { + +"use strict"; + + +Object.defineProperty(exports, "__esModule", ({ + value: true +})); +exports.getArgumentReference = getArgumentReference; +exports.getDirectiveReference = getDirectiveReference; +exports.getEnumValueReference = getEnumValueReference; +exports.getFieldReference = getFieldReference; +exports.getTypeReference = getTypeReference; +var _graphql = __webpack_require__(/*! graphql */ "../../../node_modules/graphql/index.mjs"); +function getFieldReference(typeInfo) { + return { + kind: 'Field', + schema: typeInfo.schema, + field: typeInfo.fieldDef, + type: isMetaField(typeInfo.fieldDef) ? null : typeInfo.parentType + }; +} +function getDirectiveReference(typeInfo) { + return { + kind: 'Directive', + schema: typeInfo.schema, + directive: typeInfo.directiveDef + }; +} +function getArgumentReference(typeInfo) { + return typeInfo.directiveDef ? { + kind: 'Argument', + schema: typeInfo.schema, + argument: typeInfo.argDef, + directive: typeInfo.directiveDef + } : { + kind: 'Argument', + schema: typeInfo.schema, + argument: typeInfo.argDef, + field: typeInfo.fieldDef, + type: isMetaField(typeInfo.fieldDef) ? null : typeInfo.parentType + }; +} +function getEnumValueReference(typeInfo) { + return { + kind: 'EnumValue', + value: typeInfo.enumValue || undefined, + type: typeInfo.inputType ? (0, _graphql.getNamedType)(typeInfo.inputType) : undefined + }; +} +function getTypeReference(typeInfo, type) { + return { + kind: 'Type', + schema: typeInfo.schema, + type: type || typeInfo.type + }; +} +function isMetaField(fieldDef) { + return fieldDef.name.slice(0, 2) === '__'; +} + +/***/ }), + +/***/ "../../codemirror-graphql/esm/utils/forEachState.js": +/*!**********************************************************!*\ + !*** ../../codemirror-graphql/esm/utils/forEachState.js ***! + \**********************************************************/ +/***/ (function(__unused_webpack_module, exports) { + +"use strict"; + + +Object.defineProperty(exports, "__esModule", ({ + value: true +})); +exports["default"] = forEachState; +function forEachState(stack, fn) { + const reverseStateStack = []; + let state = stack; + while (state === null || state === void 0 ? void 0 : state.kind) { + reverseStateStack.push(state); + state = state.prevState; + } + for (let i = reverseStateStack.length - 1; i >= 0; i--) { + fn(reverseStateStack[i]); + } +} + +/***/ }), + +/***/ "../../codemirror-graphql/esm/utils/getTypeInfo.js": +/*!*********************************************************!*\ + !*** ../../codemirror-graphql/esm/utils/getTypeInfo.js ***! + \*********************************************************/ +/***/ (function(__unused_webpack_module, exports, __webpack_require__) { + +"use strict"; + + +Object.defineProperty(exports, "__esModule", ({ + value: true +})); +exports["default"] = getTypeInfo; +var _graphql = __webpack_require__(/*! graphql */ "../../../node_modules/graphql/index.mjs"); +var _forEachState = _interopRequireDefault(__webpack_require__(/*! ./forEachState */ "../../codemirror-graphql/esm/utils/forEachState.js")); +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } +function getTypeInfo(schema, tokenState) { + const info = { + schema, + type: null, + parentType: null, + inputType: null, + directiveDef: null, + fieldDef: null, + argDef: null, + argDefs: null, + objectFieldDefs: null + }; + (0, _forEachState.default)(tokenState, state => { + var _a, _b; + switch (state.kind) { + case 'Query': + case 'ShortQuery': + info.type = schema.getQueryType(); + break; + case 'Mutation': + info.type = schema.getMutationType(); + break; + case 'Subscription': + info.type = schema.getSubscriptionType(); + break; + case 'InlineFragment': + case 'FragmentDefinition': + if (state.type) { + info.type = schema.getType(state.type); + } + break; + case 'Field': + case 'AliasedField': + info.fieldDef = info.type && state.name ? getFieldDef(schema, info.parentType, state.name) : null; + info.type = (_a = info.fieldDef) === null || _a === void 0 ? void 0 : _a.type; + break; + case 'SelectionSet': + info.parentType = info.type ? (0, _graphql.getNamedType)(info.type) : null; + break; + case 'Directive': + info.directiveDef = state.name ? schema.getDirective(state.name) : null; + break; + case 'Arguments': + const parentDef = state.prevState ? state.prevState.kind === 'Field' ? info.fieldDef : state.prevState.kind === 'Directive' ? info.directiveDef : state.prevState.kind === 'AliasedField' ? state.prevState.name && getFieldDef(schema, info.parentType, state.prevState.name) : null : null; + info.argDefs = parentDef ? parentDef.args : null; + break; + case 'Argument': + info.argDef = null; + if (info.argDefs) { + for (let i = 0; i < info.argDefs.length; i++) { + if (info.argDefs[i].name === state.name) { + info.argDef = info.argDefs[i]; + break; + } + } + } + info.inputType = (_b = info.argDef) === null || _b === void 0 ? void 0 : _b.type; + break; + case 'EnumValue': + const enumType = info.inputType ? (0, _graphql.getNamedType)(info.inputType) : null; + info.enumValue = enumType instanceof _graphql.GraphQLEnumType ? find(enumType.getValues(), val => val.value === state.name) : null; + break; + case 'ListValue': + const nullableType = info.inputType ? (0, _graphql.getNullableType)(info.inputType) : null; + info.inputType = nullableType instanceof _graphql.GraphQLList ? nullableType.ofType : null; + break; + case 'ObjectValue': + const objectType = info.inputType ? (0, _graphql.getNamedType)(info.inputType) : null; + info.objectFieldDefs = objectType instanceof _graphql.GraphQLInputObjectType ? objectType.getFields() : null; + break; + case 'ObjectField': + const objectField = state.name && info.objectFieldDefs ? info.objectFieldDefs[state.name] : null; + info.inputType = objectField === null || objectField === void 0 ? void 0 : objectField.type; + info.fieldDef = objectField; + break; + case 'NamedType': + info.type = state.name ? schema.getType(state.name) : null; + break; + } + }); + return info; +} +function getFieldDef(schema, type, fieldName) { + if (fieldName === _graphql.SchemaMetaFieldDef.name && schema.getQueryType() === type) { + return _graphql.SchemaMetaFieldDef; + } + if (fieldName === _graphql.TypeMetaFieldDef.name && schema.getQueryType() === type) { + return _graphql.TypeMetaFieldDef; + } + if (fieldName === _graphql.TypeNameMetaFieldDef.name && (0, _graphql.isCompositeType)(type)) { + return _graphql.TypeNameMetaFieldDef; + } + if (type && type.getFields) { + return type.getFields()[fieldName]; + } +} +function find(array, predicate) { + for (let i = 0; i < array.length; i++) { + if (predicate(array[i])) { + return array[i]; + } + } +} + +/***/ }), + +/***/ "../../codemirror-graphql/esm/utils/hintList.js": +/*!******************************************************!*\ + !*** ../../codemirror-graphql/esm/utils/hintList.js ***! + \******************************************************/ +/***/ (function(__unused_webpack_module, exports) { + +"use strict"; + + +Object.defineProperty(exports, "__esModule", ({ + value: true +})); +exports["default"] = hintList; function hintList(cursor, token, list) { const hints = filterAndSortList(list, normalizeText(token.string)); if (!hints) { @@ -68208,7 +73955,7 @@ function filterNonEmpty(array, predicate) { return filtered.length === 0 ? array : filtered; } function normalizeText(text) { - return text.toLowerCase().replaceAll(/\W/g, ""); + return text.toLowerCase().replaceAll(/\W/g, ''); } function getProximity(suggestion, text) { let proximity = lexicalDistance(text, suggestion); @@ -68241,26 +73988,668 @@ function lexicalDistance(a, b) { } return d[aLength][bLength]; } -codemirror.CodeMirror.registerHelper("hint", "graphql-variables", (editor, options) => { + +/***/ }), + +/***/ "../../codemirror-graphql/esm/utils/info-addon.js": +/*!********************************************************!*\ + !*** ../../codemirror-graphql/esm/utils/info-addon.js ***! + \********************************************************/ +/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) { + +"use strict"; + + +var _codemirror = _interopRequireDefault(__webpack_require__(/*! codemirror */ "../../../node_modules/codemirror/lib/codemirror.js")); +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } +_codemirror.default.defineOption('info', false, (cm, options, old) => { + if (old && old !== _codemirror.default.Init) { + const oldOnMouseOver = cm.state.info.onMouseOver; + _codemirror.default.off(cm.getWrapperElement(), 'mouseover', oldOnMouseOver); + clearTimeout(cm.state.info.hoverTimeout); + delete cm.state.info; + } + if (options) { + const state = cm.state.info = createState(options); + state.onMouseOver = onMouseOver.bind(null, cm); + _codemirror.default.on(cm.getWrapperElement(), 'mouseover', state.onMouseOver); + } +}); +function createState(options) { + return { + options: options instanceof Function ? { + render: options + } : options === true ? {} : options + }; +} +function getHoverTime(cm) { + const { + options + } = cm.state.info; + return (options === null || options === void 0 ? void 0 : options.hoverTime) || 500; +} +function onMouseOver(cm, e) { + const state = cm.state.info; + const target = e.target || e.srcElement; + if (!(target instanceof HTMLElement)) { + return; + } + if (target.nodeName !== 'SPAN' || state.hoverTimeout !== undefined) { + return; + } + const box = target.getBoundingClientRect(); + const onMouseMove = function () { + clearTimeout(state.hoverTimeout); + state.hoverTimeout = setTimeout(onHover, hoverTime); + }; + const onMouseOut = function () { + _codemirror.default.off(document, 'mousemove', onMouseMove); + _codemirror.default.off(cm.getWrapperElement(), 'mouseout', onMouseOut); + clearTimeout(state.hoverTimeout); + state.hoverTimeout = undefined; + }; + const onHover = function () { + _codemirror.default.off(document, 'mousemove', onMouseMove); + _codemirror.default.off(cm.getWrapperElement(), 'mouseout', onMouseOut); + state.hoverTimeout = undefined; + onMouseHover(cm, box); + }; + const hoverTime = getHoverTime(cm); + state.hoverTimeout = setTimeout(onHover, hoverTime); + _codemirror.default.on(document, 'mousemove', onMouseMove); + _codemirror.default.on(cm.getWrapperElement(), 'mouseout', onMouseOut); +} +function onMouseHover(cm, box) { + const pos = cm.coordsChar({ + left: (box.left + box.right) / 2, + top: (box.top + box.bottom) / 2 + }, 'window'); + const state = cm.state.info; + const { + options + } = state; + const render = options.render || cm.getHelper(pos, 'info'); + if (render) { + const token = cm.getTokenAt(pos, true); + if (token) { + const info = render(token, options, cm, pos); + if (info) { + showPopup(cm, box, info); + } + } + } +} +function showPopup(cm, box, info) { + const popup = document.createElement('div'); + popup.className = 'CodeMirror-info'; + popup.append(info); + document.body.append(popup); + const popupBox = popup.getBoundingClientRect(); + const popupStyle = window.getComputedStyle(popup); + const popupWidth = popupBox.right - popupBox.left + parseFloat(popupStyle.marginLeft) + parseFloat(popupStyle.marginRight); + const popupHeight = popupBox.bottom - popupBox.top + parseFloat(popupStyle.marginTop) + parseFloat(popupStyle.marginBottom); + let topPos = box.bottom; + if (popupHeight > window.innerHeight - box.bottom - 15 && box.top > window.innerHeight - box.bottom) { + topPos = box.top - popupHeight; + } + if (topPos < 0) { + topPos = box.bottom; + } + let leftPos = Math.max(0, window.innerWidth - popupWidth - 15); + if (leftPos > box.left) { + leftPos = box.left; + } + popup.style.opacity = '1'; + popup.style.top = topPos + 'px'; + popup.style.left = leftPos + 'px'; + let popupTimeout; + const onMouseOverPopup = function () { + clearTimeout(popupTimeout); + }; + const onMouseOut = function () { + clearTimeout(popupTimeout); + popupTimeout = setTimeout(hidePopup, 200); + }; + const hidePopup = function () { + _codemirror.default.off(popup, 'mouseover', onMouseOverPopup); + _codemirror.default.off(popup, 'mouseout', onMouseOut); + _codemirror.default.off(cm.getWrapperElement(), 'mouseout', onMouseOut); + if (popup.style.opacity) { + popup.style.opacity = '0'; + setTimeout(() => { + if (popup.parentNode) { + popup.remove(); + } + }, 600); + } else if (popup.parentNode) { + popup.remove(); + } + }; + _codemirror.default.on(popup, 'mouseover', onMouseOverPopup); + _codemirror.default.on(popup, 'mouseout', onMouseOut); + _codemirror.default.on(cm.getWrapperElement(), 'mouseout', onMouseOut); +} + +/***/ }), + +/***/ "../../codemirror-graphql/esm/utils/jsonParse.js": +/*!*******************************************************!*\ + !*** ../../codemirror-graphql/esm/utils/jsonParse.js ***! + \*******************************************************/ +/***/ (function(__unused_webpack_module, exports) { + +"use strict"; + + +Object.defineProperty(exports, "__esModule", ({ + value: true +})); +exports.JSONSyntaxError = void 0; +exports["default"] = jsonParse; +function jsonParse(str) { + string = str; + strLen = str.length; + start = end = lastEnd = -1; + ch(); + lex(); + const ast = parseObj(); + expect('EOF'); + return ast; +} +let string; +let strLen; +let start; +let end; +let lastEnd; +let code; +let kind; +function parseObj() { + const nodeStart = start; + const members = []; + expect('{'); + if (!skip('}')) { + do { + members.push(parseMember()); + } while (skip(',')); + expect('}'); + } + return { + kind: 'Object', + start: nodeStart, + end: lastEnd, + members + }; +} +function parseMember() { + const nodeStart = start; + const key = kind === 'String' ? curToken() : null; + expect('String'); + expect(':'); + const value = parseVal(); + return { + kind: 'Member', + start: nodeStart, + end: lastEnd, + key, + value + }; +} +function parseArr() { + const nodeStart = start; + const values = []; + expect('['); + if (!skip(']')) { + do { + values.push(parseVal()); + } while (skip(',')); + expect(']'); + } + return { + kind: 'Array', + start: nodeStart, + end: lastEnd, + values + }; +} +function parseVal() { + switch (kind) { + case '[': + return parseArr(); + case '{': + return parseObj(); + case 'String': + case 'Number': + case 'Boolean': + case 'Null': + const token = curToken(); + lex(); + return token; + } + expect('Value'); +} +function curToken() { + return { + kind, + start, + end, + value: JSON.parse(string.slice(start, end)) + }; +} +function expect(str) { + if (kind === str) { + lex(); + return; + } + let found; + if (kind === 'EOF') { + found = '[end of file]'; + } else if (end - start > 1) { + found = '`' + string.slice(start, end) + '`'; + } else { + const match = string.slice(start).match(/^.+?\b/); + found = '`' + (match ? match[0] : string[start]) + '`'; + } + throw syntaxError(`Expected ${str} but found ${found}.`); +} +class JSONSyntaxError extends Error { + constructor(message, position) { + super(message); + this.position = position; + } +} +exports.JSONSyntaxError = JSONSyntaxError; +function syntaxError(message) { + return new JSONSyntaxError(message, { + start, + end + }); +} +function skip(k) { + if (kind === k) { + lex(); + return true; + } +} +function ch() { + if (end < strLen) { + end++; + code = end === strLen ? 0 : string.charCodeAt(end); + } + return code; +} +function lex() { + lastEnd = end; + while (code === 9 || code === 10 || code === 13 || code === 32) { + ch(); + } + if (code === 0) { + kind = 'EOF'; + return; + } + start = end; + switch (code) { + case 34: + kind = 'String'; + return readString(); + case 45: + case 48: + case 49: + case 50: + case 51: + case 52: + case 53: + case 54: + case 55: + case 56: + case 57: + kind = 'Number'; + return readNumber(); + case 102: + if (string.slice(start, start + 5) !== 'false') { + break; + } + end += 4; + ch(); + kind = 'Boolean'; + return; + case 110: + if (string.slice(start, start + 4) !== 'null') { + break; + } + end += 3; + ch(); + kind = 'Null'; + return; + case 116: + if (string.slice(start, start + 4) !== 'true') { + break; + } + end += 3; + ch(); + kind = 'Boolean'; + return; + } + kind = string[start]; + ch(); +} +function readString() { + ch(); + while (code !== 34 && code > 31) { + if (code === 92) { + code = ch(); + switch (code) { + case 34: + case 47: + case 92: + case 98: + case 102: + case 110: + case 114: + case 116: + ch(); + break; + case 117: + ch(); + readHex(); + readHex(); + readHex(); + readHex(); + break; + default: + throw syntaxError('Bad character escape sequence.'); + } + } else if (end === strLen) { + throw syntaxError('Unterminated string.'); + } else { + ch(); + } + } + if (code === 34) { + ch(); + return; + } + throw syntaxError('Unterminated string.'); +} +function readHex() { + if (code >= 48 && code <= 57 || code >= 65 && code <= 70 || code >= 97 && code <= 102) { + return ch(); + } + throw syntaxError('Expected hexadecimal digit.'); +} +function readNumber() { + if (code === 45) { + ch(); + } + if (code === 48) { + ch(); + } else { + readDigits(); + } + if (code === 46) { + ch(); + readDigits(); + } + if (code === 69 || code === 101) { + code = ch(); + if (code === 43 || code === 45) { + ch(); + } + readDigits(); + } +} +function readDigits() { + if (code < 48 || code > 57) { + throw syntaxError('Expected decimal digit.'); + } + do { + ch(); + } while (code >= 48 && code <= 57); +} + +/***/ }), + +/***/ "../../codemirror-graphql/esm/utils/jump-addon.js": +/*!********************************************************!*\ + !*** ../../codemirror-graphql/esm/utils/jump-addon.js ***! + \********************************************************/ +/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) { + +"use strict"; + + +var _codemirror = _interopRequireDefault(__webpack_require__(/*! codemirror */ "../../../node_modules/codemirror/lib/codemirror.js")); +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } +_codemirror.default.defineOption('jump', false, (cm, options, old) => { + if (old && old !== _codemirror.default.Init) { + const oldOnMouseOver = cm.state.jump.onMouseOver; + _codemirror.default.off(cm.getWrapperElement(), 'mouseover', oldOnMouseOver); + const oldOnMouseOut = cm.state.jump.onMouseOut; + _codemirror.default.off(cm.getWrapperElement(), 'mouseout', oldOnMouseOut); + _codemirror.default.off(document, 'keydown', cm.state.jump.onKeyDown); + delete cm.state.jump; + } + if (options) { + const state = cm.state.jump = { + options, + onMouseOver: onMouseOver.bind(null, cm), + onMouseOut: onMouseOut.bind(null, cm), + onKeyDown: onKeyDown.bind(null, cm) + }; + _codemirror.default.on(cm.getWrapperElement(), 'mouseover', state.onMouseOver); + _codemirror.default.on(cm.getWrapperElement(), 'mouseout', state.onMouseOut); + _codemirror.default.on(document, 'keydown', state.onKeyDown); + } +}); +function onMouseOver(cm, event) { + const target = event.target || event.srcElement; + if (!(target instanceof HTMLElement)) { + return; + } + if ((target === null || target === void 0 ? void 0 : target.nodeName) !== 'SPAN') { + return; + } + const box = target.getBoundingClientRect(); + const cursor = { + left: (box.left + box.right) / 2, + top: (box.top + box.bottom) / 2 + }; + cm.state.jump.cursor = cursor; + if (cm.state.jump.isHoldingModifier) { + enableJumpMode(cm); + } +} +function onMouseOut(cm) { + if (!cm.state.jump.isHoldingModifier && cm.state.jump.cursor) { + cm.state.jump.cursor = null; + return; + } + if (cm.state.jump.isHoldingModifier && cm.state.jump.marker) { + disableJumpMode(cm); + } +} +function onKeyDown(cm, event) { + if (cm.state.jump.isHoldingModifier || !isJumpModifier(event.key)) { + return; + } + cm.state.jump.isHoldingModifier = true; + if (cm.state.jump.cursor) { + enableJumpMode(cm); + } + const onKeyUp = upEvent => { + if (upEvent.code !== event.code) { + return; + } + cm.state.jump.isHoldingModifier = false; + if (cm.state.jump.marker) { + disableJumpMode(cm); + } + _codemirror.default.off(document, 'keyup', onKeyUp); + _codemirror.default.off(document, 'click', onClick); + cm.off('mousedown', onMouseDown); + }; + const onClick = clickEvent => { + const { + destination, + options + } = cm.state.jump; + if (destination) { + options.onClick(destination, clickEvent); + } + }; + const onMouseDown = (_, downEvent) => { + if (cm.state.jump.destination) { + downEvent.codemirrorIgnore = true; + } + }; + _codemirror.default.on(document, 'keyup', onKeyUp); + _codemirror.default.on(document, 'click', onClick); + cm.on('mousedown', onMouseDown); +} +const isMac = typeof navigator !== 'undefined' && navigator.userAgent.includes('Mac'); +function isJumpModifier(key) { + return key === (isMac ? 'Meta' : 'Control'); +} +function enableJumpMode(cm) { + if (cm.state.jump.marker) { + return; + } + const { + cursor, + options + } = cm.state.jump; + const pos = cm.coordsChar(cursor); + const token = cm.getTokenAt(pos, true); + const getDestination = options.getDestination || cm.getHelper(pos, 'jump'); + if (getDestination) { + const destination = getDestination(token, options, cm); + if (destination) { + const marker = cm.markText({ + line: pos.line, + ch: token.start + }, { + line: pos.line, + ch: token.end + }, { + className: 'CodeMirror-jump-token' + }); + cm.state.jump.marker = marker; + cm.state.jump.destination = destination; + } + } +} +function disableJumpMode(cm) { + const { + marker + } = cm.state.jump; + cm.state.jump.marker = null; + cm.state.jump.destination = null; + marker.clear(); +} + +/***/ }), + +/***/ "../../codemirror-graphql/esm/utils/mode-factory.js": +/*!**********************************************************!*\ + !*** ../../codemirror-graphql/esm/utils/mode-factory.js ***! + \**********************************************************/ +/***/ (function(__unused_webpack_module, exports, __webpack_require__) { + +"use strict"; + + +Object.defineProperty(exports, "__esModule", ({ + value: true +})); +exports["default"] = void 0; +var _graphqlLanguageService = __webpack_require__(/*! graphql-language-service */ "../../graphql-language-service/esm/index.js"); +var _modeIndent = _interopRequireDefault(__webpack_require__(/*! ./mode-indent */ "../../codemirror-graphql/esm/utils/mode-indent.js")); +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } +const graphqlModeFactory = config => { + const parser = (0, _graphqlLanguageService.onlineParser)({ + eatWhitespace: stream => stream.eatWhile(_graphqlLanguageService.isIgnored), + lexRules: _graphqlLanguageService.LexRules, + parseRules: _graphqlLanguageService.ParseRules, + editorConfig: { + tabSize: config.tabSize + } + }); + return { + config, + startState: parser.startState, + token: parser.token, + indent: _modeIndent.default, + electricInput: /^\s*[})\]]/, + fold: 'brace', + lineComment: '#', + closeBrackets: { + pairs: '()[]{}""', + explode: '()[]{}' + } + }; +}; +var _default = exports["default"] = graphqlModeFactory; + +/***/ }), + +/***/ "../../codemirror-graphql/esm/utils/mode-indent.js": +/*!*********************************************************!*\ + !*** ../../codemirror-graphql/esm/utils/mode-indent.js ***! + \*********************************************************/ +/***/ (function(__unused_webpack_module, exports) { + +"use strict"; + + +Object.defineProperty(exports, "__esModule", ({ + value: true +})); +exports["default"] = indent; +function indent(state, textAfter) { + var _a, _b; + const { + levels, + indentLevel + } = state; + const level = !levels || levels.length === 0 ? indentLevel : levels.at(-1) - (((_a = this.electricInput) === null || _a === void 0 ? void 0 : _a.test(textAfter)) ? 1 : 0); + return (level || 0) * (((_b = this.config) === null || _b === void 0 ? void 0 : _b.indentUnit) || 0); +} + +/***/ }), + +/***/ "../../codemirror-graphql/esm/variables/hint.js": +/*!******************************************************!*\ + !*** ../../codemirror-graphql/esm/variables/hint.js ***! + \******************************************************/ +/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) { + +"use strict"; + + +var _codemirror = _interopRequireDefault(__webpack_require__(/*! codemirror */ "../../../node_modules/codemirror/lib/codemirror.js")); +var _graphql = __webpack_require__(/*! graphql */ "../../../node_modules/graphql/index.mjs"); +var _forEachState = _interopRequireDefault(__webpack_require__(/*! ../utils/forEachState */ "../../codemirror-graphql/esm/utils/forEachState.js")); +var _hintList = _interopRequireDefault(__webpack_require__(/*! ../utils/hintList */ "../../codemirror-graphql/esm/utils/hintList.js")); +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } +_codemirror.default.registerHelper('hint', 'graphql-variables', (editor, options) => { const cur = editor.getCursor(); const token = editor.getTokenAt(cur); const results = getVariablesHint(cur, token, options); if ((results === null || results === void 0 ? void 0 : results.list) && results.list.length > 0) { - results.from = codemirror.CodeMirror.Pos(results.from.line, results.from.ch); - results.to = codemirror.CodeMirror.Pos(results.to.line, results.to.ch); - codemirror.CodeMirror.signal(editor, "hasCompletion", editor, results, token); + results.from = _codemirror.default.Pos(results.from.line, results.from.ch); + results.to = _codemirror.default.Pos(results.to.line, results.to.ch); + _codemirror.default.signal(editor, 'hasCompletion', editor, results, token); } return results; }); function getVariablesHint(cur, token, options) { - const state = token.state.kind === "Invalid" ? token.state.prevState : token.state; + const state = token.state.kind === 'Invalid' ? token.state.prevState : token.state; const { kind, step } = state; - if (kind === "Document" && step === 0) { - return hintList(cur, token, [{ - text: "{" + if (kind === 'Document' && step === 0) { + return (0, _hintList.default)(cur, token, [{ + text: '{' }]); } const { @@ -68270,45 +74659,45 @@ function getVariablesHint(cur, token, options) { return; } const typeInfo = getTypeInfo(variableToType, token.state); - if (kind === "Document" || kind === "Variable" && step === 0) { + if (kind === 'Document' || kind === 'Variable' && step === 0) { const variableNames = Object.keys(variableToType); - return hintList(cur, token, variableNames.map(name => ({ + return (0, _hintList.default)(cur, token, variableNames.map(name => ({ text: `"${name}": `, type: variableToType[name] }))); } - if ((kind === "ObjectValue" || kind === "ObjectField" && step === 0) && typeInfo.fields) { + if ((kind === 'ObjectValue' || kind === 'ObjectField' && step === 0) && typeInfo.fields) { const inputFields = Object.keys(typeInfo.fields).map(fieldName => typeInfo.fields[fieldName]); - return hintList(cur, token, inputFields.map(field => ({ + return (0, _hintList.default)(cur, token, inputFields.map(field => ({ text: `"${field.name}": `, type: field.type, description: field.description }))); } - if (kind === "StringValue" || kind === "NumberValue" || kind === "BooleanValue" || kind === "NullValue" || kind === "ListValue" && step === 1 || kind === "ObjectField" && step === 2 || kind === "Variable" && step === 2) { - const namedInputType = typeInfo.type ? graphql.getNamedType(typeInfo.type) : void 0; - if (namedInputType instanceof graphql.GraphQLInputObjectType) { - return hintList(cur, token, [{ - text: "{" + if (kind === 'StringValue' || kind === 'NumberValue' || kind === 'BooleanValue' || kind === 'NullValue' || kind === 'ListValue' && step === 1 || kind === 'ObjectField' && step === 2 || kind === 'Variable' && step === 2) { + const namedInputType = typeInfo.type ? (0, _graphql.getNamedType)(typeInfo.type) : undefined; + if (namedInputType instanceof _graphql.GraphQLInputObjectType) { + return (0, _hintList.default)(cur, token, [{ + text: '{' }]); } - if (namedInputType instanceof graphql.GraphQLEnumType) { + if (namedInputType instanceof _graphql.GraphQLEnumType) { const values = namedInputType.getValues(); - return hintList(cur, token, values.map(value => ({ + return (0, _hintList.default)(cur, token, values.map(value => ({ text: `"${value.name}"`, type: namedInputType, description: value.description }))); } - if (namedInputType === graphql.GraphQLBoolean) { - return hintList(cur, token, [{ - text: "true", - type: graphql.GraphQLBoolean, - description: "Not false." + if (namedInputType === _graphql.GraphQLBoolean) { + return (0, _hintList.default)(cur, token, [{ + text: 'true', + type: _graphql.GraphQLBoolean, + description: 'Not false.' }, { - text: "false", - type: graphql.GraphQLBoolean, - description: "Not true." + text: 'false', + type: _graphql.GraphQLBoolean, + description: 'Not true.' }]); } } @@ -68318,26 +74707,26 @@ function getTypeInfo(variableToType, tokenState) { type: null, fields: null }; - forEachState.forEachState(tokenState, state => { + (0, _forEachState.default)(tokenState, state => { switch (state.kind) { - case "Variable": + case 'Variable': { info.type = variableToType[state.name]; break; } - case "ListValue": + case 'ListValue': { - const nullableType = info.type ? graphql.getNullableType(info.type) : void 0; - info.type = nullableType instanceof graphql.GraphQLList ? nullableType.ofType : null; + const nullableType = info.type ? (0, _graphql.getNullableType)(info.type) : undefined; + info.type = nullableType instanceof _graphql.GraphQLList ? nullableType.ofType : null; break; } - case "ObjectValue": + case 'ObjectValue': { - const objectType = info.type ? graphql.getNamedType(info.type) : void 0; - info.fields = objectType instanceof graphql.GraphQLInputObjectType ? objectType.getFields() : null; + const objectType = info.type ? (0, _graphql.getNamedType)(info.type) : undefined; + info.fields = objectType instanceof _graphql.GraphQLInputObjectType ? objectType.getFields() : null; break; } - case "ObjectField": + case 'ObjectField': { const objectField = state.name && info.fields ? info.fields[state.name] : null; info.type = objectField === null || objectField === void 0 ? void 0 : objectField.type; @@ -68350,18 +74739,260 @@ function getTypeInfo(variableToType, tokenState) { /***/ }), +/***/ "../../codemirror-graphql/esm/variables/lint.js": +/*!******************************************************!*\ + !*** ../../codemirror-graphql/esm/variables/lint.js ***! + \******************************************************/ +/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) { + +"use strict"; + + +var _codemirror = _interopRequireDefault(__webpack_require__(/*! codemirror */ "../../../node_modules/codemirror/lib/codemirror.js")); +var _graphql = __webpack_require__(/*! graphql */ "../../../node_modules/graphql/index.mjs"); +var _jsonParse = _interopRequireWildcard(__webpack_require__(/*! ../utils/jsonParse */ "../../codemirror-graphql/esm/utils/jsonParse.js")); +function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); } +function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && Object.prototype.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; } +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } +_codemirror.default.registerHelper('lint', 'graphql-variables', (text, options, editor) => { + if (!text) { + return []; + } + let ast; + try { + ast = (0, _jsonParse.default)(text); + } catch (error) { + if (error instanceof _jsonParse.JSONSyntaxError) { + return [lintError(editor, error.position, error.message)]; + } + throw error; + } + const { + variableToType + } = options; + if (!variableToType) { + return []; + } + return validateVariables(editor, variableToType, ast); +}); +function validateVariables(editor, variableToType, variablesAST) { + var _a; + const errors = []; + for (const member of variablesAST.members) { + if (member) { + const variableName = (_a = member.key) === null || _a === void 0 ? void 0 : _a.value; + const type = variableToType[variableName]; + if (type) { + for (const [node, message] of validateValue(type, member.value)) { + errors.push(lintError(editor, node, message)); + } + } else { + errors.push(lintError(editor, member.key, `Variable "$${variableName}" does not appear in any GraphQL query.`)); + } + } + } + return errors; +} +function validateValue(type, valueAST) { + if (!type || !valueAST) { + return []; + } + if (type instanceof _graphql.GraphQLNonNull) { + if (valueAST.kind === 'Null') { + return [[valueAST, `Type "${type}" is non-nullable and cannot be null.`]]; + } + return validateValue(type.ofType, valueAST); + } + if (valueAST.kind === 'Null') { + return []; + } + if (type instanceof _graphql.GraphQLList) { + const itemType = type.ofType; + if (valueAST.kind === 'Array') { + const values = valueAST.values || []; + return mapCat(values, item => validateValue(itemType, item)); + } + return validateValue(itemType, valueAST); + } + if (type instanceof _graphql.GraphQLInputObjectType) { + if (valueAST.kind !== 'Object') { + return [[valueAST, `Type "${type}" must be an Object.`]]; + } + const providedFields = Object.create(null); + const fieldErrors = mapCat(valueAST.members, member => { + var _a; + const fieldName = (_a = member === null || member === void 0 ? void 0 : member.key) === null || _a === void 0 ? void 0 : _a.value; + providedFields[fieldName] = true; + const inputField = type.getFields()[fieldName]; + if (!inputField) { + return [[member.key, `Type "${type}" does not have a field "${fieldName}".`]]; + } + const fieldType = inputField ? inputField.type : undefined; + return validateValue(fieldType, member.value); + }); + for (const fieldName of Object.keys(type.getFields())) { + const field = type.getFields()[fieldName]; + if (!providedFields[fieldName] && field.type instanceof _graphql.GraphQLNonNull && !field.defaultValue) { + fieldErrors.push([valueAST, `Object of type "${type}" is missing required field "${fieldName}".`]); + } + } + return fieldErrors; + } + if (type.name === 'Boolean' && valueAST.kind !== 'Boolean' || type.name === 'String' && valueAST.kind !== 'String' || type.name === 'ID' && valueAST.kind !== 'Number' && valueAST.kind !== 'String' || type.name === 'Float' && valueAST.kind !== 'Number' || type.name === 'Int' && (valueAST.kind !== 'Number' || (valueAST.value | 0) !== valueAST.value)) { + return [[valueAST, `Expected value of type "${type}".`]]; + } + if ((type instanceof _graphql.GraphQLEnumType || type instanceof _graphql.GraphQLScalarType) && (valueAST.kind !== 'String' && valueAST.kind !== 'Number' && valueAST.kind !== 'Boolean' && valueAST.kind !== 'Null' || isNullish(type.parseValue(valueAST.value)))) { + return [[valueAST, `Expected value of type "${type}".`]]; + } + return []; +} +function lintError(editor, node, message) { + return { + message, + severity: 'error', + type: 'validation', + from: editor.posFromIndex(node.start), + to: editor.posFromIndex(node.end) + }; +} +function isNullish(value) { + return value === null || value === undefined || value !== value; +} +function mapCat(array, mapper) { + return Array.prototype.concat.apply([], array.map(mapper)); +} + +/***/ }), + +/***/ "../../codemirror-graphql/esm/variables/mode.js": +/*!******************************************************!*\ + !*** ../../codemirror-graphql/esm/variables/mode.js ***! + \******************************************************/ +/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) { + +"use strict"; + + +var _codemirror = _interopRequireDefault(__webpack_require__(/*! codemirror */ "../../../node_modules/codemirror/lib/codemirror.js")); +var _graphqlLanguageService = __webpack_require__(/*! graphql-language-service */ "../../graphql-language-service/esm/index.js"); +var _modeIndent = _interopRequireDefault(__webpack_require__(/*! ../utils/mode-indent */ "../../codemirror-graphql/esm/utils/mode-indent.js")); +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } +_codemirror.default.defineMode('graphql-variables', config => { + const parser = (0, _graphqlLanguageService.onlineParser)({ + eatWhitespace: stream => stream.eatSpace(), + lexRules: LexRules, + parseRules: ParseRules, + editorConfig: { + tabSize: config.tabSize + } + }); + return { + config, + startState: parser.startState, + token: parser.token, + indent: _modeIndent.default, + electricInput: /^\s*[}\]]/, + fold: 'brace', + closeBrackets: { + pairs: '[]{}""', + explode: '[]{}' + } + }; +}); +const LexRules = { + Punctuation: /^\[|]|\{|\}|:|,/, + Number: /^-?(?:0|(?:[1-9][0-9]*))(?:\.[0-9]*)?(?:[eE][+-]?[0-9]+)?/, + String: /^"(?:[^"\\]|\\(?:"|\/|\\|b|f|n|r|t|u[0-9a-fA-F]{4}))*"?/, + Keyword: /^true|false|null/ +}; +const ParseRules = { + Document: [(0, _graphqlLanguageService.p)('{'), (0, _graphqlLanguageService.list)('Variable', (0, _graphqlLanguageService.opt)((0, _graphqlLanguageService.p)(','))), (0, _graphqlLanguageService.p)('}')], + Variable: [namedKey('variable'), (0, _graphqlLanguageService.p)(':'), 'Value'], + Value(token) { + switch (token.kind) { + case 'Number': + return 'NumberValue'; + case 'String': + return 'StringValue'; + case 'Punctuation': + switch (token.value) { + case '[': + return 'ListValue'; + case '{': + return 'ObjectValue'; + } + return null; + case 'Keyword': + switch (token.value) { + case 'true': + case 'false': + return 'BooleanValue'; + case 'null': + return 'NullValue'; + } + return null; + } + }, + NumberValue: [(0, _graphqlLanguageService.t)('Number', 'number')], + StringValue: [(0, _graphqlLanguageService.t)('String', 'string')], + BooleanValue: [(0, _graphqlLanguageService.t)('Keyword', 'builtin')], + NullValue: [(0, _graphqlLanguageService.t)('Keyword', 'keyword')], + ListValue: [(0, _graphqlLanguageService.p)('['), (0, _graphqlLanguageService.list)('Value', (0, _graphqlLanguageService.opt)((0, _graphqlLanguageService.p)(','))), (0, _graphqlLanguageService.p)(']')], + ObjectValue: [(0, _graphqlLanguageService.p)('{'), (0, _graphqlLanguageService.list)('ObjectField', (0, _graphqlLanguageService.opt)((0, _graphqlLanguageService.p)(','))), (0, _graphqlLanguageService.p)('}')], + ObjectField: [namedKey('attribute'), (0, _graphqlLanguageService.p)(':'), 'Value'] +}; +function namedKey(style) { + return { + style, + match: token => token.kind === 'String', + update(state, token) { + state.name = token.value.slice(1, -1); + } + }; +} + +/***/ }), + /***/ "../../graphiql-react/dist/index.js": /*!******************************************!*\ !*** ../../graphiql-react/dist/index.js ***! \******************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; +function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); } +function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && Object.prototype.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; } +var __create = Object.create; +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __getProtoOf = Object.getPrototypeOf; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) if (!__hasOwnProp.call(to, key) && key !== except) __defProp(to, key, { + get: () => from[key], + enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable + }); + } + return to; +}; +var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps( +// If the importer is in node compatibility mode or this is not an ESM +// file that has been converted to a CommonJS file using a Babel- +// compatible transform (i.e. "__esModule" has not been set), then set +// "default" to the CommonJS "module.exports" for node compatibility. +isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { + value: mod, + enumerable: true +}) : target, mod)); Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" }); const jsxRuntime = __webpack_require__(/*! react/jsx-runtime */ "../../../node_modules/react/jsx-runtime.js"); +const reactCompilerRuntime = __webpack_require__(/*! react-compiler-runtime */ "../../../node_modules/react-compiler-runtime/dist/index.js"); const React = __webpack_require__(/*! react */ "react"); const clsx = __webpack_require__(/*! clsx */ "../../../node_modules/clsx/dist/clsx.m.js"); const graphql = __webpack_require__(/*! graphql */ "../../../node_modules/graphql/index.mjs"); @@ -68422,19 +75053,49 @@ function createContextHook(context) { } const StorageContext = createNullableContext("StorageContext"); function StorageContextProvider(props) { + const $ = reactCompilerRuntime.c(8); const isInitialRender = React.useRef(true); - const [storage, setStorage] = React.useState(() => new toolkit.StorageAPI(props.storage)); - React.useEffect(() => { - if (isInitialRender.current) { - isInitialRender.current = false; - } else { - setStorage(new toolkit.StorageAPI(props.storage)); - } - }, [props.storage]); - return /* @__PURE__ */jsxRuntime.jsx(StorageContext.Provider, { - value: storage, - children: props.children - }); + let t0; + if ($[0] !== props.storage) { + t0 = () => new toolkit.StorageAPI(props.storage); + $[0] = props.storage; + $[1] = t0; + } else { + t0 = $[1]; + } + const [storage, setStorage] = React.useState(t0); + let t1; + let t2; + if ($[2] !== props.storage) { + t1 = () => { + if (isInitialRender.current) { + isInitialRender.current = false; + } else { + setStorage(new toolkit.StorageAPI(props.storage)); + } + }; + t2 = [props.storage]; + $[2] = props.storage; + $[3] = t1; + $[4] = t2; + } else { + t1 = $[3]; + t2 = $[4]; + } + React.useEffect(t1, t2); + let t3; + if ($[5] !== props.children || $[6] !== storage) { + t3 = /* @__PURE__ */jsxRuntime.jsx(StorageContext.Provider, { + value: storage, + children: props.children + }); + $[5] = props.children; + $[6] = storage; + $[7] = t3; + } else { + t3 = $[7]; + } + return t3; } const useStorageContext = createContextHook(StorageContext); const SvgArgument = ({ @@ -69255,67 +75916,208 @@ const TypeIcon = generateIcon(SvgType); function generateIcon(RawComponent) { const title = RawComponent.name.replace("Svg", "").replaceAll(/([A-Z])/g, " $1").trimStart().toLowerCase() + " icon"; function IconComponent(props) { - return /* @__PURE__ */jsxRuntime.jsx(RawComponent, { - title, - ...props - }); + const $ = reactCompilerRuntime.c(2); + let t0; + if ($[0] !== props) { + t0 = /* @__PURE__ */jsxRuntime.jsx(RawComponent, { + title, + ...props + }); + $[0] = props; + $[1] = t0; + } else { + t0 = $[1]; + } + return t0; } IconComponent.displayName = RawComponent.name; return IconComponent; } -const UnStyledButton = React.forwardRef((props, ref) => /* @__PURE__ */jsxRuntime.jsx("button", { - ...props, - ref, - className: clsx.clsx("graphiql-un-styled", props.className) -})); +const UnStyledButton = React.forwardRef((props, ref) => { + const $ = reactCompilerRuntime.c(6); + let t0; + if ($[0] !== props.className) { + t0 = clsx.clsx("graphiql-un-styled", props.className); + $[0] = props.className; + $[1] = t0; + } else { + t0 = $[1]; + } + let t1; + if ($[2] !== props || $[3] !== ref || $[4] !== t0) { + t1 = /* @__PURE__ */jsxRuntime.jsx("button", { + ...props, + ref, + className: t0 + }); + $[2] = props; + $[3] = ref; + $[4] = t0; + $[5] = t1; + } else { + t1 = $[5]; + } + return t1; +}); UnStyledButton.displayName = "UnStyledButton"; -const Button$1 = React.forwardRef((props, ref) => /* @__PURE__ */jsxRuntime.jsx("button", { - ...props, - ref, - className: clsx.clsx("graphiql-button", { - success: "graphiql-button-success", - error: "graphiql-button-error" - }[props.state], props.className) -})); +const Button$1 = React.forwardRef((props, ref) => { + const $ = reactCompilerRuntime.c(7); + let t0; + if ($[0] !== props.className || $[1] !== props.state) { + t0 = clsx.clsx("graphiql-button", { + success: "graphiql-button-success", + error: "graphiql-button-error" + }[props.state], props.className); + $[0] = props.className; + $[1] = props.state; + $[2] = t0; + } else { + t0 = $[2]; + } + let t1; + if ($[3] !== props || $[4] !== ref || $[5] !== t0) { + t1 = /* @__PURE__ */jsxRuntime.jsx("button", { + ...props, + ref, + className: t0 + }); + $[3] = props; + $[4] = ref; + $[5] = t0; + $[6] = t1; + } else { + t1 = $[6]; + } + return t1; +}); Button$1.displayName = "Button"; -const ButtonGroup = React.forwardRef((props, ref) => /* @__PURE__ */jsxRuntime.jsx("div", { - ...props, - ref, - className: clsx.clsx("graphiql-button-group", props.className) -})); +const ButtonGroup = React.forwardRef((props, ref) => { + const $ = reactCompilerRuntime.c(6); + let t0; + if ($[0] !== props.className) { + t0 = clsx.clsx("graphiql-button-group", props.className); + $[0] = props.className; + $[1] = t0; + } else { + t0 = $[1]; + } + let t1; + if ($[2] !== props || $[3] !== ref || $[4] !== t0) { + t1 = /* @__PURE__ */jsxRuntime.jsx("div", { + ...props, + ref, + className: t0 + }); + $[2] = props; + $[3] = ref; + $[4] = t0; + $[5] = t1; + } else { + t1 = $[5]; + } + return t1; +}); ButtonGroup.displayName = "ButtonGroup"; const createComponentGroup = (root, children) => Object.entries(children).reduce((r, [key, value]) => { r[key] = value; return r; }, root); -const DialogClose = React.forwardRef((props, ref) => /* @__PURE__ */jsxRuntime.jsx(D__namespace.Close, { - asChild: true, - children: /* @__PURE__ */jsxRuntime.jsxs(UnStyledButton, { - ...props, - ref, - type: "button", - className: clsx.clsx("graphiql-dialog-close", props.className), - children: [/* @__PURE__ */jsxRuntime.jsx(reactVisuallyHidden.Root, { +const DialogClose = React.forwardRef((props, ref) => { + const $ = reactCompilerRuntime.c(8); + let t0; + if ($[0] !== props.className) { + t0 = clsx.clsx("graphiql-dialog-close", props.className); + $[0] = props.className; + $[1] = t0; + } else { + t0 = $[1]; + } + let t1; + let t2; + if ($[2] === Symbol.for("react.memo_cache_sentinel")) { + t1 = /* @__PURE__ */jsxRuntime.jsx(reactVisuallyHidden.Root, { children: "Close dialog" - }), /* @__PURE__ */jsxRuntime.jsx(CloseIcon, {})] - }) -})); + }); + t2 = /* @__PURE__ */jsxRuntime.jsx(CloseIcon, {}); + $[2] = t1; + $[3] = t2; + } else { + t1 = $[2]; + t2 = $[3]; + } + let t3; + if ($[4] !== props || $[5] !== ref || $[6] !== t0) { + t3 = /* @__PURE__ */jsxRuntime.jsx(D__namespace.Close, { + asChild: true, + children: /* @__PURE__ */jsxRuntime.jsxs(UnStyledButton, { + ...props, + ref, + type: "button", + className: t0, + children: [t1, t2] + }) + }); + $[4] = props; + $[5] = ref; + $[6] = t0; + $[7] = t3; + } else { + t3 = $[7]; + } + return t3; +}); DialogClose.displayName = "Dialog.Close"; -function DialogRoot({ - children, - ...props -}) { - return /* @__PURE__ */jsxRuntime.jsx(D__namespace.Root, { - ...props, - children: /* @__PURE__ */jsxRuntime.jsxs(D__namespace.Portal, { - children: [/* @__PURE__ */jsxRuntime.jsx(D__namespace.Overlay, { - className: "graphiql-dialog-overlay" - }), /* @__PURE__ */jsxRuntime.jsx(D__namespace.Content, { +function DialogRoot(t0) { + const $ = reactCompilerRuntime.c(9); + let children; + let props; + if ($[0] !== t0) { + ({ + children, + ...props + } = t0); + $[0] = t0; + $[1] = children; + $[2] = props; + } else { + children = $[1]; + props = $[2]; + } + let t1; + if ($[3] === Symbol.for("react.memo_cache_sentinel")) { + t1 = /* @__PURE__ */jsxRuntime.jsx(D__namespace.Overlay, { + className: "graphiql-dialog-overlay" + }); + $[3] = t1; + } else { + t1 = $[3]; + } + let t2; + if ($[4] !== children) { + t2 = /* @__PURE__ */jsxRuntime.jsxs(D__namespace.Portal, { + children: [t1, /* @__PURE__ */jsxRuntime.jsx(D__namespace.Content, { className: "graphiql-dialog", children })] - }) - }); + }); + $[4] = children; + $[5] = t2; + } else { + t2 = $[5]; + } + let t3; + if ($[6] !== props || $[7] !== t2) { + t3 = /* @__PURE__ */jsxRuntime.jsx(D__namespace.Root, { + ...props, + children: t2 + }); + $[6] = props; + $[7] = t2; + $[8] = t3; + } else { + t3 = $[8]; + } + return t3; } const Dialog = createComponentGroup(DialogRoot, { Close: DialogClose, @@ -69323,31 +76125,95 @@ const Dialog = createComponentGroup(DialogRoot, { Trigger: D__namespace.Trigger, Description: D__namespace.Description }); -const Button = React.forwardRef((props, ref) => /* @__PURE__ */jsxRuntime.jsx(reactDropdownMenu.Trigger, { - asChild: true, - children: /* @__PURE__ */jsxRuntime.jsx("button", { - ...props, - ref, - className: clsx.clsx("graphiql-un-styled", props.className) - }) -})); +const Button = React.forwardRef((props, ref) => { + const $ = reactCompilerRuntime.c(6); + let t0; + if ($[0] !== props.className) { + t0 = clsx.clsx("graphiql-un-styled", props.className); + $[0] = props.className; + $[1] = t0; + } else { + t0 = $[1]; + } + let t1; + if ($[2] !== props || $[3] !== ref || $[4] !== t0) { + t1 = /* @__PURE__ */jsxRuntime.jsx(reactDropdownMenu.Trigger, { + asChild: true, + children: /* @__PURE__ */jsxRuntime.jsx("button", { + ...props, + ref, + className: t0 + }) + }); + $[2] = props; + $[3] = ref; + $[4] = t0; + $[5] = t1; + } else { + t1 = $[5]; + } + return t1; +}); Button.displayName = "DropdownMenuButton"; -function Content({ - children, - align = "start", - sideOffset = 5, - className, - ...props -}) { - return /* @__PURE__ */jsxRuntime.jsx(reactDropdownMenu.Portal, { - children: /* @__PURE__ */jsxRuntime.jsx(reactDropdownMenu.Content, { - align, - sideOffset, - className: clsx.clsx("graphiql-dropdown-content", className), - ...props, - children - }) - }); +function Content(t0) { + const $ = reactCompilerRuntime.c(14); + let children; + let className; + let props; + let t1; + let t2; + if ($[0] !== t0) { + ({ + children, + align: t1, + sideOffset: t2, + className, + ...props + } = t0); + $[0] = t0; + $[1] = children; + $[2] = className; + $[3] = props; + $[4] = t1; + $[5] = t2; + } else { + children = $[1]; + className = $[2]; + props = $[3]; + t1 = $[4]; + t2 = $[5]; + } + const align = t1 === void 0 ? "start" : t1; + const sideOffset = t2 === void 0 ? 5 : t2; + let t3; + if ($[6] !== className) { + t3 = clsx.clsx("graphiql-dropdown-content", className); + $[6] = className; + $[7] = t3; + } else { + t3 = $[7]; + } + let t4; + if ($[8] !== align || $[9] !== children || $[10] !== props || $[11] !== sideOffset || $[12] !== t3) { + t4 = /* @__PURE__ */jsxRuntime.jsx(reactDropdownMenu.Portal, { + children: /* @__PURE__ */jsxRuntime.jsx(reactDropdownMenu.Content, { + align, + sideOffset, + className: t3, + ...props, + children + }) + }); + $[8] = align; + $[9] = children; + $[10] = props; + $[11] = sideOffset; + $[12] = t3; + $[13] = t4; + } else { + t4 = $[13]; + } + return t4; } const Item = ({ className, @@ -69367,38 +76233,132 @@ const markdown = new MarkdownIt({ breaks: true, linkify: true }); -const MarkdownContent = React.forwardRef(({ - children, - onlyShowFirstChild, - type, - ...props -}, ref) => /* @__PURE__ */jsxRuntime.jsx("div", { - ...props, - ref, - className: clsx.clsx(`graphiql-markdown-${type}`, onlyShowFirstChild && "graphiql-markdown-preview", props.className), - dangerouslySetInnerHTML: { - __html: markdown.render(children) +const MarkdownContent = React.forwardRef((t0, ref) => { + const $ = reactCompilerRuntime.c(18); + let children; + let onlyShowFirstChild; + let props; + let type; + if ($[0] !== t0) { + ({ + children, + onlyShowFirstChild, + type, + ...props + } = t0); + $[0] = t0; + $[1] = children; + $[2] = onlyShowFirstChild; + $[3] = props; + $[4] = type; + } else { + children = $[1]; + onlyShowFirstChild = $[2]; + props = $[3]; + type = $[4]; } -})); + const t1 = `graphiql-markdown-${type}`; + const t2 = onlyShowFirstChild && "graphiql-markdown-preview"; + let t3; + if ($[5] !== props.className || $[6] !== t1 || $[7] !== t2) { + t3 = clsx.clsx(t1, t2, props.className); + $[5] = props.className; + $[6] = t1; + $[7] = t2; + $[8] = t3; + } else { + t3 = $[8]; + } + let t4; + if ($[9] !== children) { + t4 = markdown.render(children); + $[9] = children; + $[10] = t4; + } else { + t4 = $[10]; + } + let t5; + if ($[11] !== t4) { + t5 = { + __html: t4 + }; + $[11] = t4; + $[12] = t5; + } else { + t5 = $[12]; + } + let t6; + if ($[13] !== props || $[14] !== ref || $[15] !== t3 || $[16] !== t5) { + t6 = /* @__PURE__ */jsxRuntime.jsx("div", { + ...props, + ref, + className: t3, + dangerouslySetInnerHTML: t5 + }); + $[13] = props; + $[14] = ref; + $[15] = t3; + $[16] = t5; + $[17] = t6; + } else { + t6 = $[17]; + } + return t6; +}); MarkdownContent.displayName = "MarkdownContent"; -const Spinner = React.forwardRef((props, ref) => /* @__PURE__ */jsxRuntime.jsx("div", { - ...props, - ref, - className: clsx.clsx("graphiql-spinner", props.className) -})); +const Spinner = React.forwardRef((props, ref) => { + const $ = reactCompilerRuntime.c(6); + let t0; + if ($[0] !== props.className) { + t0 = clsx.clsx("graphiql-spinner", props.className); + $[0] = props.className; + $[1] = t0; + } else { + t0 = $[1]; + } + let t1; + if ($[2] !== props || $[3] !== ref || $[4] !== t0) { + t1 = /* @__PURE__ */jsxRuntime.jsx("div", { + ...props, + ref, + className: t0 + }); + $[2] = props; + $[3] = ref; + $[4] = t0; + $[5] = t1; + } else { + t1 = $[5]; + } + return t1; +}); Spinner.displayName = "Spinner"; -function TooltipRoot({ - children, - align = "start", - side = "bottom", - sideOffset = 5, - label -}) { - return /* @__PURE__ */jsxRuntime.jsxs(T__namespace.Root, { - children: [/* @__PURE__ */jsxRuntime.jsx(T__namespace.Trigger, { +function TooltipRoot(t0) { + const $ = reactCompilerRuntime.c(10); + const { + children, + align: t1, + side: t2, + sideOffset: t3, + label + } = t0; + const align = t1 === void 0 ? "start" : t1; + const side = t2 === void 0 ? "bottom" : t2; + const sideOffset = t3 === void 0 ? 5 : t3; + let t4; + if ($[0] !== children) { + t4 = /* @__PURE__ */jsxRuntime.jsx(T__namespace.Trigger, { asChild: true, children - }), /* @__PURE__ */jsxRuntime.jsx(T__namespace.Portal, { + }); + $[0] = children; + $[1] = t4; + } else { + t4 = $[1]; + } + let t5; + if ($[2] !== align || $[3] !== label || $[4] !== side || $[5] !== sideOffset) { + t5 = /* @__PURE__ */jsxRuntime.jsx(T__namespace.Portal, { children: /* @__PURE__ */jsxRuntime.jsx(T__namespace.Content, { className: "graphiql-tooltip", align, @@ -69406,103 +76366,301 @@ function TooltipRoot({ sideOffset, children: label }) - })] - }); + }); + $[2] = align; + $[3] = label; + $[4] = side; + $[5] = sideOffset; + $[6] = t5; + } else { + t5 = $[6]; + } + let t6; + if ($[7] !== t4 || $[8] !== t5) { + t6 = /* @__PURE__ */jsxRuntime.jsxs(T__namespace.Root, { + children: [t4, t5] + }); + $[7] = t4; + $[8] = t5; + $[9] = t6; + } else { + t6 = $[9]; + } + return t6; } const Tooltip = createComponentGroup(TooltipRoot, { Provider: T__namespace.Provider }); -const TabRoot = React.forwardRef(({ - isActive, - value, - children, - className, - ...props -}, ref) => /* @__PURE__ */jsxRuntime.jsx(framerMotion.Reorder.Item, { - ...props, - ref, - value, - "aria-selected": isActive ? "true" : void 0, - role: "tab", - className: clsx.clsx("graphiql-tab", isActive && "graphiql-tab-active", className), - children -})); +const TabRoot = React.forwardRef((t0, ref) => { + const $ = reactCompilerRuntime.c(16); + let children; + let className; + let isActive; + let props; + let value; + if ($[0] !== t0) { + ({ + isActive, + value, + children, + className, + ...props + } = t0); + $[0] = t0; + $[1] = children; + $[2] = className; + $[3] = isActive; + $[4] = props; + $[5] = value; + } else { + children = $[1]; + className = $[2]; + isActive = $[3]; + props = $[4]; + value = $[5]; + } + const t1 = isActive ? "true" : void 0; + const t2 = isActive && "graphiql-tab-active"; + let t3; + if ($[6] !== className || $[7] !== t2) { + t3 = clsx.clsx("graphiql-tab", t2, className); + $[6] = className; + $[7] = t2; + $[8] = t3; + } else { + t3 = $[8]; + } + let t4; + if ($[9] !== children || $[10] !== props || $[11] !== ref || $[12] !== t1 || $[13] !== t3 || $[14] !== value) { + t4 = /* @__PURE__ */jsxRuntime.jsx(framerMotion.Reorder.Item, { + ...props, + ref, + value, + "aria-selected": t1, + role: "tab", + className: t3, + children + }); + $[9] = children; + $[10] = props; + $[11] = ref; + $[12] = t1; + $[13] = t3; + $[14] = value; + $[15] = t4; + } else { + t4 = $[15]; + } + return t4; +}); TabRoot.displayName = "Tab"; -const TabButton = React.forwardRef((props, ref) => /* @__PURE__ */jsxRuntime.jsx(UnStyledButton, { - ...props, - ref, - type: "button", - className: clsx.clsx("graphiql-tab-button", props.className), - children: props.children -})); +const TabButton = React.forwardRef((props, ref) => { + const $ = reactCompilerRuntime.c(6); + let t0; + if ($[0] !== props.className) { + t0 = clsx.clsx("graphiql-tab-button", props.className); + $[0] = props.className; + $[1] = t0; + } else { + t0 = $[1]; + } + let t1; + if ($[2] !== props || $[3] !== ref || $[4] !== t0) { + t1 = /* @__PURE__ */jsxRuntime.jsx(UnStyledButton, { + ...props, + ref, + type: "button", + className: t0, + children: props.children + }); + $[2] = props; + $[3] = ref; + $[4] = t0; + $[5] = t1; + } else { + t1 = $[5]; + } + return t1; +}); TabButton.displayName = "Tab.Button"; -const TabClose = React.forwardRef((props, ref) => /* @__PURE__ */jsxRuntime.jsx(Tooltip, { - label: "Close Tab", - children: /* @__PURE__ */jsxRuntime.jsx(UnStyledButton, { - "aria-label": "Close Tab", - ...props, - ref, - type: "button", - className: clsx.clsx("graphiql-tab-close", props.className), - children: /* @__PURE__ */jsxRuntime.jsx(CloseIcon, {}) - }) -})); +const TabClose = React.forwardRef((props, ref) => { + const $ = reactCompilerRuntime.c(7); + let t0; + if ($[0] !== props.className) { + t0 = clsx.clsx("graphiql-tab-close", props.className); + $[0] = props.className; + $[1] = t0; + } else { + t0 = $[1]; + } + let t1; + if ($[2] === Symbol.for("react.memo_cache_sentinel")) { + t1 = /* @__PURE__ */jsxRuntime.jsx(CloseIcon, {}); + $[2] = t1; + } else { + t1 = $[2]; + } + let t2; + if ($[3] !== props || $[4] !== ref || $[5] !== t0) { + t2 = /* @__PURE__ */jsxRuntime.jsx(Tooltip, { + label: "Close Tab", + children: /* @__PURE__ */jsxRuntime.jsx(UnStyledButton, { + "aria-label": "Close Tab", + ...props, + ref, + type: "button", + className: t0, + children: t1 + }) + }); + $[3] = props; + $[4] = ref; + $[5] = t0; + $[6] = t2; + } else { + t2 = $[6]; + } + return t2; +}); TabClose.displayName = "Tab.Close"; const Tab = createComponentGroup(TabRoot, { Button: TabButton, Close: TabClose }); -const Tabs = React.forwardRef(({ - values, - onReorder, - children, - className, - ...props -}, ref) => /* @__PURE__ */jsxRuntime.jsx(framerMotion.Reorder.Group, { - ...props, - ref, - values, - onReorder, - axis: "x", - role: "tablist", - className: clsx.clsx("graphiql-tabs", className), - children -})); +const Tabs = React.forwardRef((t0, ref) => { + const $ = reactCompilerRuntime.c(15); + let children; + let className; + let onReorder; + let props; + let values; + if ($[0] !== t0) { + ({ + values, + onReorder, + children, + className, + ...props + } = t0); + $[0] = t0; + $[1] = children; + $[2] = className; + $[3] = onReorder; + $[4] = props; + $[5] = values; + } else { + children = $[1]; + className = $[2]; + onReorder = $[3]; + props = $[4]; + values = $[5]; + } + let t1; + if ($[6] !== className) { + t1 = clsx.clsx("graphiql-tabs", className); + $[6] = className; + $[7] = t1; + } else { + t1 = $[7]; + } + let t2; + if ($[8] !== children || $[9] !== onReorder || $[10] !== props || $[11] !== ref || $[12] !== t1 || $[13] !== values) { + t2 = /* @__PURE__ */jsxRuntime.jsx(framerMotion.Reorder.Group, { + ...props, + ref, + values, + onReorder, + axis: "x", + role: "tablist", + className: t1, + children + }); + $[8] = children; + $[9] = onReorder; + $[10] = props; + $[11] = ref; + $[12] = t1; + $[13] = values; + $[14] = t2; + } else { + t2 = $[14]; + } + return t2; +}); Tabs.displayName = "Tabs"; const HistoryContext = createNullableContext("HistoryContext"); -function HistoryContextProvider({ - maxHistoryLength = DEFAULT_HISTORY_LENGTH, - children -}) { - const storage = useStorageContext(); - const [historyStore] = React.useState(() => - // Fall back to a noop storage when the StorageContext is empty - new toolkit.HistoryStore(storage || new toolkit.StorageAPI(null), maxHistoryLength)); - const [items, setItems] = React.useState(() => historyStore.queries || []); - const value = React.useMemo(() => ({ - addToHistory(operation) { - historyStore.updateHistory(operation); - setItems(historyStore.queries); - }, - editLabel(operation, index) { - historyStore.editLabel(operation, index); - setItems(historyStore.queries); - }, - items, - toggleFavorite(operation) { - historyStore.toggleFavorite(operation); - setItems(historyStore.queries); - }, - setActive: item => item, - deleteFromHistory(item, clearFavorites) { - historyStore.deleteHistory(item, clearFavorites); - setItems(historyStore.queries); - } - }), [items, historyStore]); - return /* @__PURE__ */jsxRuntime.jsx(HistoryContext.Provider, { - value, +function HistoryContextProvider(t0) { + const $ = reactCompilerRuntime.c(11); + const { + maxHistoryLength: t1, children - }); + } = t0; + const maxHistoryLength = t1 === void 0 ? DEFAULT_HISTORY_LENGTH : t1; + const storage = useStorageContext(); + let t2; + if ($[0] !== maxHistoryLength || $[1] !== storage) { + t2 = () => new toolkit.HistoryStore(storage || new toolkit.StorageAPI(null), maxHistoryLength); + $[0] = maxHistoryLength; + $[1] = storage; + $[2] = t2; + } else { + t2 = $[2]; + } + const [historyStore] = React.useState(t2); + let t3; + if ($[3] !== historyStore.queries) { + t3 = () => historyStore.queries || []; + $[3] = historyStore.queries; + $[4] = t3; + } else { + t3 = $[4]; + } + const [items, setItems] = React.useState(t3); + let t4; + if ($[5] !== historyStore || $[6] !== items) { + t4 = { + addToHistory(operation) { + historyStore.updateHistory(operation); + setItems(historyStore.queries); + }, + editLabel(operation_0, index) { + historyStore.editLabel(operation_0, index); + setItems(historyStore.queries); + }, + items, + toggleFavorite(operation_1) { + historyStore.toggleFavorite(operation_1); + setItems(historyStore.queries); + }, + setActive: _temp$8, + deleteFromHistory(item_0, clearFavorites) { + historyStore.deleteHistory(item_0, clearFavorites); + setItems(historyStore.queries); + } + }; + $[5] = historyStore; + $[6] = items; + $[7] = t4; + } else { + t4 = $[7]; + } + const value = t4; + let t5; + if ($[8] !== children || $[9] !== value) { + t5 = /* @__PURE__ */jsxRuntime.jsx(HistoryContext.Provider, { + value, + children + }); + $[8] = children; + $[9] = value; + $[10] = t5; + } else { + t5 = $[10]; + } + return t5; +} +function _temp$8(item) { + return item; } const useHistoryContext = createContextHook(HistoryContext); const DEFAULT_HISTORY_LENGTH = 20; @@ -69517,9 +76675,9 @@ function History() { ...item, index: i })).reverse(); - const favorites = items.filter(item => item.favorite); + const favorites = items.filter(item_0 => item_0.favorite); if (favorites.length) { - items = items.filter(item => !item.favorite); + items = items.filter(item_1 => !item_1.favorite); } const [clearStatus, setClearStatus] = React.useState(null); React.useEffect(() => { @@ -69529,16 +76687,16 @@ function History() { }, 2e3); } }, [clearStatus]); - const handleClearStatus = React.useCallback(() => { + const handleClearStatus = () => { try { - for (const item of items) { - deleteFromHistory(item, true); + for (const item_2 of items) { + deleteFromHistory(item_2, true); } setClearStatus("success"); } catch { setClearStatus("error"); } - }, [deleteFromHistory, items]); + }; return /* @__PURE__ */jsxRuntime.jsxs("section", { "aria-label": "History", className: "graphiql-history", @@ -69556,101 +76714,202 @@ function History() { })] }), Boolean(favorites.length) && /* @__PURE__ */jsxRuntime.jsx("ul", { className: "graphiql-history-items", - children: favorites.map(item => /* @__PURE__ */jsxRuntime.jsx(HistoryItem, { - item - }, item.index)) + children: favorites.map(item_3 => /* @__PURE__ */jsxRuntime.jsx(HistoryItem, { + item: item_3 + }, item_3.index)) }), Boolean(favorites.length) && Boolean(items.length) && /* @__PURE__ */jsxRuntime.jsx("div", { className: "graphiql-history-item-spacer" }), Boolean(items.length) && /* @__PURE__ */jsxRuntime.jsx("ul", { className: "graphiql-history-items", - children: items.map(item => /* @__PURE__ */jsxRuntime.jsx(HistoryItem, { - item - }, item.index)) + children: items.map(item_4 => /* @__PURE__ */jsxRuntime.jsx(HistoryItem, { + item: item_4 + }, item_4.index)) })] }); } function HistoryItem(props) { + const $ = reactCompilerRuntime.c(40); + let t0; + if ($[0] === Symbol.for("react.memo_cache_sentinel")) { + t0 = { + nonNull: true, + caller: HistoryItem + }; + $[0] = t0; + } else { + t0 = $[0]; + } const { editLabel, toggleFavorite, deleteFromHistory, setActive - } = useHistoryContext({ - nonNull: true, - caller: HistoryItem - }); + } = useHistoryContext(t0); + let t1; + if ($[1] === Symbol.for("react.memo_cache_sentinel")) { + t1 = { + nonNull: true, + caller: HistoryItem + }; + $[1] = t1; + } else { + t1 = $[1]; + } const { headerEditor, queryEditor, variableEditor - } = useEditorContext({ - nonNull: true, - caller: HistoryItem - }); + } = useEditorContext(t1); const inputRef = React.useRef(null); const buttonRef = React.useRef(null); const [isEditable, setIsEditable] = React.useState(false); - React.useEffect(() => { - var _a; - if (isEditable) { - (_a = inputRef.current) == null ? void 0 : _a.focus(); - } - }, [isEditable]); - const displayName = props.item.label || props.item.operationName || formatQuery(props.item.query); - const handleSave = React.useCallback(() => { - var _a; - setIsEditable(false); - const { - index, - ...item - } = props.item; - editLabel({ - ...item, - label: (_a = inputRef.current) == null ? void 0 : _a.value - }, index); - }, [editLabel, props.item]); - const handleClose = React.useCallback(() => { - setIsEditable(false); - }, []); - const handleEditLabel = React.useCallback(e => { - e.stopPropagation(); - setIsEditable(true); - }, []); - const handleHistoryItemClick = React.useCallback(() => { - const { - query, - variables, - headers - } = props.item; - queryEditor == null ? void 0 : queryEditor.setValue(query !== null && query !== void 0 ? query : ""); - variableEditor == null ? void 0 : variableEditor.setValue(variables !== null && variables !== void 0 ? variables : ""); - headerEditor == null ? void 0 : headerEditor.setValue(headers !== null && headers !== void 0 ? headers : ""); - setActive(props.item); - }, [headerEditor, props.item, queryEditor, setActive, variableEditor]); - const handleDeleteItemFromHistory = React.useCallback(e => { - e.stopPropagation(); - deleteFromHistory(props.item); - }, [props.item, deleteFromHistory]); - const handleToggleFavorite = React.useCallback(e => { - e.stopPropagation(); - toggleFavorite(props.item); - }, [props.item, toggleFavorite]); - return /* @__PURE__ */jsxRuntime.jsx("li", { - className: clsx.clsx("graphiql-history-item", isEditable && "editable"), - children: isEditable ? /* @__PURE__ */jsxRuntime.jsxs(jsxRuntime.Fragment, { + let t2; + let t3; + if ($[2] !== isEditable) { + t2 = () => { + var _a; + if (isEditable) { + (_a = inputRef.current) == null ? void 0 : _a.focus(); + } + }; + t3 = [isEditable]; + $[2] = isEditable; + $[3] = t2; + $[4] = t3; + } else { + t2 = $[3]; + t3 = $[4]; + } + React.useEffect(t2, t3); + let t4; + if ($[5] !== props.item.label || $[6] !== props.item.operationName || $[7] !== props.item.query) { + t4 = props.item.label || props.item.operationName || formatQuery(props.item.query); + $[5] = props.item.label; + $[6] = props.item.operationName; + $[7] = props.item.query; + $[8] = t4; + } else { + t4 = $[8]; + } + const displayName = t4; + let t5; + if ($[9] !== editLabel || $[10] !== props.item) { + t5 = () => { + var _a; + setIsEditable(false); + const { + index, + ...item + } = props.item; + editLabel({ + ...item, + label: (_a = inputRef.current) == null ? void 0 : _a.value + }, index); + }; + $[9] = editLabel; + $[10] = props.item; + $[11] = t5; + } else { + t5 = $[11]; + } + const handleSave = t5; + let t6; + if ($[12] === Symbol.for("react.memo_cache_sentinel")) { + t6 = () => { + setIsEditable(false); + }; + $[12] = t6; + } else { + t6 = $[12]; + } + const handleClose = t6; + let t7; + if ($[13] === Symbol.for("react.memo_cache_sentinel")) { + t7 = e => { + e.stopPropagation(); + setIsEditable(true); + }; + $[13] = t7; + } else { + t7 = $[13]; + } + const handleEditLabel = t7; + let t8; + if ($[14] !== headerEditor || $[15] !== props.item || $[16] !== queryEditor || $[17] !== setActive || $[18] !== variableEditor) { + t8 = () => { + const { + query, + variables, + headers + } = props.item; + queryEditor == null ? void 0 : queryEditor.setValue(query !== null && query !== void 0 ? query : ""); + variableEditor == null ? void 0 : variableEditor.setValue(variables !== null && variables !== void 0 ? variables : ""); + headerEditor == null ? void 0 : headerEditor.setValue(headers !== null && headers !== void 0 ? headers : ""); + setActive(props.item); + }; + $[14] = headerEditor; + $[15] = props.item; + $[16] = queryEditor; + $[17] = setActive; + $[18] = variableEditor; + $[19] = t8; + } else { + t8 = $[19]; + } + const handleHistoryItemClick = t8; + let t9; + if ($[20] !== deleteFromHistory || $[21] !== props.item) { + t9 = e_0 => { + e_0.stopPropagation(); + deleteFromHistory(props.item); + }; + $[20] = deleteFromHistory; + $[21] = props.item; + $[22] = t9; + } else { + t9 = $[22]; + } + const handleDeleteItemFromHistory = t9; + let t10; + if ($[23] !== props.item || $[24] !== toggleFavorite) { + t10 = e_1 => { + e_1.stopPropagation(); + toggleFavorite(props.item); + }; + $[23] = props.item; + $[24] = toggleFavorite; + $[25] = t10; + } else { + t10 = $[25]; + } + const handleToggleFavorite = t10; + const t11 = isEditable && "editable"; + let t12; + if ($[26] !== t11) { + t12 = clsx.clsx("graphiql-history-item", t11); + $[26] = t11; + $[27] = t12; + } else { + t12 = $[27]; + } + let t13; + if ($[28] !== displayName || $[29] !== editLabel || $[30] !== handleDeleteItemFromHistory || $[31] !== handleHistoryItemClick || $[32] !== handleSave || $[33] !== handleToggleFavorite || $[34] !== isEditable || $[35] !== props.item) { + t13 = isEditable ? /* @__PURE__ */jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [/* @__PURE__ */jsxRuntime.jsx("input", { type: "text", defaultValue: props.item.label, ref: inputRef, - onKeyDown: e => { - if (e.key === "Esc") { + onKeyDown: e_2 => { + if (e_2.key === "Esc") { setIsEditable(false); - } else if (e.key === "Enter") { - setIsEditable(false); - editLabel({ - ...props.item, - label: e.currentTarget.value - }); + } else { + if (e_2.key === "Enter") { + setIsEditable(false); + editLabel({ + ...props.item, + label: e_2.currentTarget.value + }); + } } }, placeholder: "Type a label" @@ -69711,22 +76970,58 @@ function HistoryItem(props) { }) }) })] - }) - }); + }); + $[28] = displayName; + $[29] = editLabel; + $[30] = handleDeleteItemFromHistory; + $[31] = handleHistoryItemClick; + $[32] = handleSave; + $[33] = handleToggleFavorite; + $[34] = isEditable; + $[35] = props.item; + $[36] = t13; + } else { + t13 = $[36]; + } + let t14; + if ($[37] !== t12 || $[38] !== t13) { + t14 = /* @__PURE__ */jsxRuntime.jsx("li", { + className: t12, + children: t13 + }); + $[37] = t12; + $[38] = t13; + $[39] = t14; + } else { + t14 = $[39]; + } + return t14; } function formatQuery(query) { return query == null ? void 0 : query.split("\n").map(line => line.replace(/#(.*)/, "")).join(" ").replaceAll("{", " { ").replaceAll("}", " } ").replaceAll(/[\s]{2,}/g, " "); } const ExecutionContext = createNullableContext("ExecutionContext"); -function ExecutionContextProvider({ - fetcher, - getDefaultFieldNames, - children, - operationName -}) { +function ExecutionContextProvider(t0) { + const $ = reactCompilerRuntime.c(27); + const { + fetcher, + getDefaultFieldNames, + children, + operationName + } = t0; if (!fetcher) { throw new TypeError("The `ExecutionContextProvider` component requires a `fetcher` function to be passed as prop."); } + let t1; + if ($[0] === Symbol.for("react.memo_cache_sentinel")) { + t1 = { + nonNull: true, + caller: ExecutionContextProvider + }; + $[0] = t1; + } else { + t1 = $[0]; + } const { externalFragments, headerEditor, @@ -69734,162 +77029,228 @@ function ExecutionContextProvider({ responseEditor, variableEditor, updateActiveTabValues - } = useEditorContext({ - nonNull: true, - caller: ExecutionContextProvider - }); + } = useEditorContext(t1); const history = useHistoryContext(); - const autoCompleteLeafs = useAutoCompleteLeafs({ - getDefaultFieldNames, - caller: ExecutionContextProvider - }); + let t2; + if ($[1] !== getDefaultFieldNames) { + t2 = { + getDefaultFieldNames, + caller: ExecutionContextProvider + }; + $[1] = getDefaultFieldNames; + $[2] = t2; + } else { + t2 = $[2]; + } + const autoCompleteLeafs = useAutoCompleteLeafs(t2); const [isFetching, setIsFetching] = React.useState(false); const [subscription, setSubscription] = React.useState(null); const queryIdRef = React.useRef(0); - const stop = React.useCallback(() => { - subscription == null ? void 0 : subscription.unsubscribe(); - setIsFetching(false); - setSubscription(null); - }, [subscription]); - const run = React.useCallback(async () => { - var _ref; - if (!queryEditor || !responseEditor) { - return; - } - if (subscription) { - stop(); - return; - } - const setResponse = value2 => { - responseEditor.setValue(value2); - updateActiveTabValues({ - response: value2 - }); - }; - queryIdRef.current += 1; - const queryId = queryIdRef.current; - let query = autoCompleteLeafs() || queryEditor.getValue(); - const variablesString = variableEditor == null ? void 0 : variableEditor.getValue(); - let variables; - try { - variables = tryParseJsonObject({ - json: variablesString, - errorMessageParse: "Variables are invalid JSON", - errorMessageType: "Variables are not a JSON object." - }); - } catch (error) { - setResponse(error instanceof Error ? error.message : `${error}`); - return; - } - const headersString = headerEditor == null ? void 0 : headerEditor.getValue(); - let headers; - try { - headers = tryParseJsonObject({ - json: headersString, - errorMessageParse: "Headers are invalid JSON", - errorMessageType: "Headers are not a JSON object." - }); - } catch (error) { - setResponse(error instanceof Error ? error.message : `${error}`); - return; - } - if (externalFragments) { - const fragmentDependencies = queryEditor.documentAST ? graphqlLanguageService.getFragmentDependenciesForAST(queryEditor.documentAST, externalFragments) : []; - if (fragmentDependencies.length > 0) { - query += "\n" + fragmentDependencies.map(node => graphql.print(node)).join("\n"); - } - } - setResponse(""); - setIsFetching(true); - const opName = (_ref = operationName !== null && operationName !== void 0 ? operationName : queryEditor.operationName) !== null && _ref !== void 0 ? _ref : void 0; - history == null ? void 0 : history.addToHistory({ - query, - variables: variablesString, - headers: headersString, - operationName: opName - }); - try { - var _headers, _queryEditor$document; - const fullResponse = {}; - const handleResponse = result => { - if (queryId !== queryIdRef.current) { - return; - } - let maybeMultipart = Array.isArray(result) ? result : false; - if (!maybeMultipart && typeof result === "object" && result !== null && "hasNext" in result) { - maybeMultipart = [result]; - } - if (maybeMultipart) { - for (const part of maybeMultipart) { - mergeIncrementalResult(fullResponse, part); - } - setIsFetching(false); - setResponse(toolkit.formatResult(fullResponse)); - } else { - const response = toolkit.formatResult(result); - setIsFetching(false); - setResponse(response); - } - }; - const fetch2 = fetcher({ - query, - variables, - operationName: opName - }, { - headers: (_headers = headers) !== null && _headers !== void 0 ? _headers : void 0, - documentAST: (_queryEditor$document = queryEditor.documentAST) !== null && _queryEditor$document !== void 0 ? _queryEditor$document : void 0 - }); - const value2 = await Promise.resolve(fetch2); - if (toolkit.isObservable(value2)) { - setSubscription(value2.subscribe({ - next(result) { - handleResponse(result); - }, - error(error) { - setIsFetching(false); - if (error) { - setResponse(toolkit.formatError(error)); - } - setSubscription(null); - }, - complete() { - setIsFetching(false); - setSubscription(null); - } - })); - } else if (toolkit.isAsyncIterable(value2)) { - setSubscription({ - unsubscribe: () => { - var _a, _b; - return (_b = (_a = value2[Symbol.asyncIterator]()).return) == null ? void 0 : _b.call(_a); - } - }); - for await (const result of value2) { - handleResponse(result); - } - setIsFetching(false); - setSubscription(null); - } else { - handleResponse(value2); - } - } catch (error) { + let t3; + if ($[3] !== subscription) { + t3 = () => { + subscription == null ? void 0 : subscription.unsubscribe(); setIsFetching(false); - setResponse(toolkit.formatError(error)); setSubscription(null); - } - }, [autoCompleteLeafs, externalFragments, fetcher, headerEditor, history, operationName, queryEditor, responseEditor, stop, subscription, updateActiveTabValues, variableEditor]); + }; + $[3] = subscription; + $[4] = t3; + } else { + t3 = $[4]; + } + const stop = t3; + let t4; + if ($[5] !== autoCompleteLeafs || $[6] !== externalFragments || $[7] !== fetcher || $[8] !== headerEditor || $[9] !== history || $[10] !== operationName || $[11] !== queryEditor || $[12] !== responseEditor || $[13] !== stop || $[14] !== subscription || $[15] !== updateActiveTabValues || $[16] !== variableEditor) { + t4 = async () => { + var _ref, _headers2, _queryEditor$document; + if (!queryEditor || !responseEditor) { + return; + } + if (subscription) { + stop(); + return; + } + const setResponse = value => { + responseEditor.setValue(value); + updateActiveTabValues({ + response: value + }); + }; + queryIdRef.current = queryIdRef.current + 1; + const queryId = queryIdRef.current; + let query = autoCompleteLeafs() || queryEditor.getValue(); + const variablesString = variableEditor == null ? void 0 : variableEditor.getValue(); + let variables; + try { + variables = tryParseJsonObject({ + json: variablesString, + errorMessageParse: "Variables are invalid JSON", + errorMessageType: "Variables are not a JSON object." + }); + } catch (t52) { + const error = t52; + setResponse(error instanceof Error ? error.message : `${error}`); + return; + } + const headersString = headerEditor == null ? void 0 : headerEditor.getValue(); + let headers; + try { + headers = tryParseJsonObject({ + json: headersString, + errorMessageParse: "Headers are invalid JSON", + errorMessageType: "Headers are not a JSON object." + }); + } catch (t62) { + const error_0 = t62; + setResponse(error_0 instanceof Error ? error_0.message : `${error_0}`); + return; + } + if (externalFragments) { + const fragmentDependencies = queryEditor.documentAST ? graphqlLanguageService.getFragmentDependenciesForAST(queryEditor.documentAST, externalFragments) : []; + if (fragmentDependencies.length > 0) { + query = query + ("\n" + fragmentDependencies.map(_temp$7).join("\n")); + } + } + setResponse(""); + setIsFetching(true); + const opName = (_ref = operationName !== null && operationName !== void 0 ? operationName : queryEditor.operationName) !== null && _ref !== void 0 ? _ref : void 0; + history == null ? void 0 : history.addToHistory({ + query, + variables: variablesString, + headers: headersString, + operationName: opName + }); + const _headers = (_headers2 = headers) !== null && _headers2 !== void 0 ? _headers2 : void 0; + const documentAST = (_queryEditor$document = queryEditor.documentAST) !== null && _queryEditor$document !== void 0 ? _queryEditor$document : void 0; + try { + const fullResponse = {}; + const handleResponse = result => { + if (queryId !== queryIdRef.current) { + return; + } + let maybeMultipart = Array.isArray(result) ? result : false; + if (!maybeMultipart && typeof result === "object" && result !== null && "hasNext" in result) { + maybeMultipart = [result]; + } + if (maybeMultipart) { + for (const part of maybeMultipart) { + mergeIncrementalResult(fullResponse, part); + } + setIsFetching(false); + setResponse(toolkit.formatResult(fullResponse)); + } else { + const response = toolkit.formatResult(result); + setIsFetching(false); + setResponse(response); + } + }; + const fetch2 = fetcher({ + query, + variables, + operationName: opName + }, { + headers: _headers, + documentAST + }); + const value_0 = await Promise.resolve(fetch2); + if (toolkit.isObservable(value_0)) { + setSubscription(value_0.subscribe({ + next(result_0) { + handleResponse(result_0); + }, + error(error_2) { + setIsFetching(false); + if (error_2) { + setResponse(toolkit.formatError(error_2)); + } + setSubscription(null); + }, + complete() { + setIsFetching(false); + setSubscription(null); + } + })); + } else { + if (toolkit.isAsyncIterable(value_0)) { + setSubscription({ + unsubscribe: () => { + var _a, _b; + return (_b = (_a = value_0[Symbol.asyncIterator]()).return) == null ? void 0 : _b.call(_a); + } + }); + await handleAsyncResults(handleResponse, value_0); + setIsFetching(false); + setSubscription(null); + } else { + handleResponse(value_0); + } + } + } catch (t72) { + const error_1 = t72; + setIsFetching(false); + setResponse(toolkit.formatError(error_1)); + setSubscription(null); + } + }; + $[5] = autoCompleteLeafs; + $[6] = externalFragments; + $[7] = fetcher; + $[8] = headerEditor; + $[9] = history; + $[10] = operationName; + $[11] = queryEditor; + $[12] = responseEditor; + $[13] = stop; + $[14] = subscription; + $[15] = updateActiveTabValues; + $[16] = variableEditor; + $[17] = t4; + } else { + t4 = $[17]; + } + const run = t4; const isSubscribed = Boolean(subscription); - const value = React.useMemo(() => ({ - isFetching, - isSubscribed, - operationName: operationName !== null && operationName !== void 0 ? operationName : null, - run, - stop - }), [isFetching, isSubscribed, operationName, run, stop]); - return /* @__PURE__ */jsxRuntime.jsx(ExecutionContext.Provider, { - value, - children - }); + const t5 = operationName !== null && operationName !== void 0 ? operationName : null; + let t6; + if ($[18] !== isFetching || $[19] !== isSubscribed || $[20] !== run || $[21] !== stop || $[22] !== t5) { + t6 = { + isFetching, + isSubscribed, + operationName: t5, + run, + stop + }; + $[18] = isFetching; + $[19] = isSubscribed; + $[20] = run; + $[21] = stop; + $[22] = t5; + $[23] = t6; + } else { + t6 = $[23]; + } + const value_1 = t6; + let t7; + if ($[24] !== children || $[25] !== value_1) { + t7 = /* @__PURE__ */jsxRuntime.jsx(ExecutionContext.Provider, { + value: value_1, + children + }); + $[24] = children; + $[25] = value_1; + $[26] = t7; + } else { + t7 = $[26]; + } + return t7; +} +function _temp$7(node) { + return graphql.print(node); +} +async function handleAsyncResults(onResponse, value) { + for await (const result of value) { + onResponse(result); + } } const useExecutionContext = createContextHook(ExecutionContext); function tryParseJsonObject({ @@ -70017,13 +77378,12 @@ const commonKeys = { "Alt-Right": "goGroupRight" }; async function importCodeMirror(addons, options) { - const CodeMirror = await Promise.resolve().then(() => __webpack_require__(/*! ./codemirror.cjs.js */ "../../graphiql-react/dist/codemirror.cjs.js")).then(n => n.codemirror).then(c => + const CodeMirror = await Promise.resolve().then(() => _interopRequireWildcard(__webpack_require__(/*! codemirror */ "../../../node_modules/codemirror/lib/codemirror.js"))).then(c => // Depending on bundler and settings the dynamic import either returns a // function (e.g. parcel) or an object containing a `default` property typeof c === "function" ? c : c.default); - await Promise.all((options == null ? void 0 : options.useCommonAddons) === false ? addons : [Promise.resolve().then(() => __webpack_require__(/*! ./show-hint.cjs.js */ "../../graphiql-react/dist/show-hint.cjs.js")).then(n => n.showHint), Promise.resolve().then(() => __webpack_require__(/*! ./matchbrackets.cjs.js */ "../../graphiql-react/dist/matchbrackets.cjs.js")).then(n => n.matchbrackets), Promise.resolve().then(() => __webpack_require__(/*! ./closebrackets.cjs.js */ "../../graphiql-react/dist/closebrackets.cjs.js")).then(n => n.closebrackets), Promise.resolve().then(() => __webpack_require__(/*! ./brace-fold.cjs.js */ "../../graphiql-react/dist/brace-fold.cjs.js")).then(n => n.braceFold), Promise.resolve().then(() => __webpack_require__(/*! ./foldgutter.cjs.js */ "../../graphiql-react/dist/foldgutter.cjs.js")).then(n => n.foldgutter), Promise.resolve().then(() => __webpack_require__(/*! ./lint.cjs.js */ "../../graphiql-react/dist/lint.cjs.js")).then(n => n.lint), Promise.resolve().then(() => __webpack_require__(/*! ./searchcursor.cjs.js */ "../../graphiql-react/dist/searchcursor.cjs.js")).then(n => n.searchcursor), Promise.resolve().then(() => __webpack_require__(/*! ./jump-to-line.cjs.js */ "../../graphiql-react/dist/jump-to-line.cjs.js")).then(n => n.jumpToLine), Promise.resolve().then(() => __webpack_require__(/*! ./dialog.cjs.js */ "../../graphiql-react/dist/dialog.cjs.js")).then(n => n.dialog), - // @ts-expect-error - Promise.resolve().then(() => __webpack_require__(/*! ./sublime.cjs.js */ "../../graphiql-react/dist/sublime.cjs.js")).then(n => n.sublime), ...addons]); + await Promise.all((options == null ? void 0 : options.useCommonAddons) === false ? addons : [Promise.resolve().then(() => _interopRequireWildcard(__webpack_require__(/*! codemirror/addon/hint/show-hint.js */ "../../../node_modules/codemirror/addon/hint/show-hint.js"))), Promise.resolve().then(() => _interopRequireWildcard(__webpack_require__(/*! codemirror/addon/edit/matchbrackets.js */ "../../../node_modules/codemirror/addon/edit/matchbrackets.js"))), Promise.resolve().then(() => _interopRequireWildcard(__webpack_require__(/*! codemirror/addon/edit/closebrackets.js */ "../../../node_modules/codemirror/addon/edit/closebrackets.js"))), Promise.resolve().then(() => _interopRequireWildcard(__webpack_require__(/*! codemirror/addon/fold/brace-fold.js */ "../../../node_modules/codemirror/addon/fold/brace-fold.js"))), Promise.resolve().then(() => _interopRequireWildcard(__webpack_require__(/*! codemirror/addon/fold/foldgutter.js */ "../../../node_modules/codemirror/addon/fold/foldgutter.js"))), Promise.resolve().then(() => _interopRequireWildcard(__webpack_require__(/*! codemirror/addon/lint/lint.js */ "../../../node_modules/codemirror/addon/lint/lint.js"))), Promise.resolve().then(() => _interopRequireWildcard(__webpack_require__(/*! codemirror/addon/search/searchcursor.js */ "../../../node_modules/codemirror/addon/search/searchcursor.js"))), Promise.resolve().then(() => _interopRequireWildcard(__webpack_require__(/*! codemirror/addon/search/jump-to-line.js */ "../../../node_modules/codemirror/addon/search/jump-to-line.js"))), Promise.resolve().then(() => _interopRequireWildcard(__webpack_require__(/*! codemirror/addon/dialog/dialog.js */ "../../../node_modules/codemirror/addon/dialog/dialog.js"))), // @ts-expect-error + Promise.resolve().then(() => _interopRequireWildcard(__webpack_require__(/*! codemirror/keymap/sublime.js */ "../../../node_modules/codemirror/keymap/sublime.js"))), ...addons]); return CodeMirror; } const printDefault = ast => { @@ -70032,158 +77392,320 @@ const printDefault = ast => { } return graphql.print(ast); }; -function DefaultValue({ - field -}) { +function DefaultValue(t0) { + const $ = reactCompilerRuntime.c(12); + const { + field + } = t0; if (!("defaultValue" in field) || field.defaultValue === void 0) { return null; } - const ast = graphql.astFromValue(field.defaultValue, field.type); - if (!ast) { - return null; + const t1 = field.defaultValue; + const t2 = field.type; + let t3; + let t4; + let t5; + let t6; + if ($[0] !== field.defaultValue || $[1] !== field.type) { + t6 = Symbol.for("react.early_return_sentinel"); + bb0: { + const ast = graphql.astFromValue(t1, t2); + if (!ast) { + t6 = null; + break bb0; + } + t5 = " = "; + t3 = "graphiql-doc-explorer-default-value"; + t4 = printDefault(ast); + } + $[0] = field.defaultValue; + $[1] = field.type; + $[2] = t3; + $[3] = t4; + $[4] = t5; + $[5] = t6; + } else { + t3 = $[2]; + t4 = $[3]; + t5 = $[4]; + t6 = $[5]; } - return /* @__PURE__ */jsxRuntime.jsxs(jsxRuntime.Fragment, { - children: [" = ", /* @__PURE__ */jsxRuntime.jsx("span", { - className: "graphiql-doc-explorer-default-value", - children: printDefault(ast) - })] - }); + if (t6 !== Symbol.for("react.early_return_sentinel")) { + return t6; + } + let t7; + if ($[6] !== t3 || $[7] !== t4) { + t7 = /* @__PURE__ */jsxRuntime.jsx("span", { + className: t3, + children: t4 + }); + $[6] = t3; + $[7] = t4; + $[8] = t7; + } else { + t7 = $[8]; + } + let t8; + if ($[9] !== t5 || $[10] !== t7) { + t8 = /* @__PURE__ */jsxRuntime.jsxs(jsxRuntime.Fragment, { + children: [t5, t7] + }); + $[9] = t5; + $[10] = t7; + $[11] = t8; + } else { + t8 = $[11]; + } + return t8; } const SchemaContext = createNullableContext("SchemaContext"); -function SchemaContextProvider(props) { - if (!props.fetcher) { +function SchemaContextProvider(t0) { + const $ = reactCompilerRuntime.c(38); + let fetcher; + let onSchemaChange; + let props; + if ($[0] !== t0) { + ({ + fetcher, + onSchemaChange, + ...props + } = t0); + $[0] = t0; + $[1] = fetcher; + $[2] = onSchemaChange; + $[3] = props; + } else { + fetcher = $[1]; + onSchemaChange = $[2]; + props = $[3]; + } + if (!fetcher) { throw new TypeError("The `SchemaContextProvider` component requires a `fetcher` function to be passed as prop."); } + let t1; + if ($[4] === Symbol.for("react.memo_cache_sentinel")) { + t1 = { + nonNull: true, + caller: SchemaContextProvider + }; + $[4] = t1; + } else { + t1 = $[4]; + } const { initialHeaders, headerEditor - } = useEditorContext({ - nonNull: true, - caller: SchemaContextProvider - }); + } = useEditorContext(t1); const [schema, setSchema] = React.useState(); const [isFetching, setIsFetching] = React.useState(false); const [fetchError, setFetchError] = React.useState(null); const counterRef = React.useRef(0); - React.useEffect(() => { - setSchema(graphql.isSchema(props.schema) || props.schema === null || props.schema === void 0 ? props.schema : void 0); - counterRef.current++; - }, [props.schema]); + let t2; + let t3; + if ($[5] !== props.schema) { + t2 = () => { + setSchema(graphql.isSchema(props.schema) || props.schema == null ? props.schema : void 0); + counterRef.current = counterRef.current + 1; + }; + t3 = [props.schema]; + $[5] = props.schema; + $[6] = t2; + $[7] = t3; + } else { + t2 = $[6]; + t3 = $[7]; + } + React.useEffect(t2, t3); const headersRef = React.useRef(initialHeaders); - React.useEffect(() => { - if (headerEditor) { - headersRef.current = headerEditor.getValue(); - } - }); + let t4; + if ($[8] !== headerEditor) { + t4 = () => { + if (headerEditor) { + headersRef.current = headerEditor.getValue(); + } + }; + $[8] = headerEditor; + $[9] = t4; + } else { + t4 = $[9]; + } + React.useEffect(t4); + let t5; + if ($[10] !== props.inputValueDeprecation || $[11] !== props.introspectionQueryName || $[12] !== props.schemaDescription) { + t5 = { + inputValueDeprecation: props.inputValueDeprecation, + introspectionQueryName: props.introspectionQueryName, + schemaDescription: props.schemaDescription + }; + $[10] = props.inputValueDeprecation; + $[11] = props.introspectionQueryName; + $[12] = props.schemaDescription; + $[13] = t5; + } else { + t5 = $[13]; + } const { introspectionQuery, introspectionQueryName, introspectionQuerySansSubscriptions - } = useIntrospectionQuery({ - inputValueDeprecation: props.inputValueDeprecation, - introspectionQueryName: props.introspectionQueryName, - schemaDescription: props.schemaDescription - }); - const { - fetcher, - onSchemaChange, - dangerouslyAssumeSchemaIsValid, - children - } = props; - const introspect = React.useCallback(() => { - if (graphql.isSchema(props.schema) || props.schema === null) { - return; - } - const counter = ++counterRef.current; - const maybeIntrospectionData = props.schema; - async function fetchIntrospectionData() { - if (maybeIntrospectionData) { - return maybeIntrospectionData; - } - const parsedHeaders = parseHeaderString(headersRef.current); - if (!parsedHeaders.isValidJSON) { - setFetchError("Introspection failed as headers are invalid."); + } = useIntrospectionQuery(t5); + let t6; + if ($[14] !== fetcher || $[15] !== introspectionQuery || $[16] !== introspectionQueryName || $[17] !== introspectionQuerySansSubscriptions || $[18] !== onSchemaChange || $[19] !== props.schema) { + t6 = () => { + if (graphql.isSchema(props.schema) || props.schema === null) { return; } - const fetcherOpts = parsedHeaders.headers ? { - headers: parsedHeaders.headers - } : {}; - const fetch2 = toolkit.fetcherReturnToPromise(fetcher({ - query: introspectionQuery, - operationName: introspectionQueryName - }, fetcherOpts)); - if (!toolkit.isPromise(fetch2)) { - setFetchError("Fetcher did not return a Promise for introspection."); - return; - } - setIsFetching(true); - setFetchError(null); - let result = await fetch2; - if (typeof result !== "object" || result === null || !("data" in result)) { - const fetch22 = toolkit.fetcherReturnToPromise(fetcher({ - query: introspectionQuerySansSubscriptions, + const counter = counterRef.current = counterRef.current + 1; + const maybeIntrospectionData = props.schema; + const fetchIntrospectionData = async function fetchIntrospectionData2() { + if (maybeIntrospectionData) { + return maybeIntrospectionData; + } + const parsedHeaders = parseHeaderString(headersRef.current); + if (!parsedHeaders.isValidJSON) { + setFetchError("Introspection failed as headers are invalid."); + return; + } + const fetcherOpts = parsedHeaders.headers ? { + headers: parsedHeaders.headers + } : {}; + const fetch2 = toolkit.fetcherReturnToPromise(fetcher({ + query: introspectionQuery, operationName: introspectionQueryName }, fetcherOpts)); - if (!toolkit.isPromise(fetch22)) { - throw new Error("Fetcher did not return a Promise for introspection."); + if (!toolkit.isPromise(fetch2)) { + setFetchError("Fetcher did not return a Promise for introspection."); + return; } - result = await fetch22; - } - setIsFetching(false); - if ((result == null ? void 0 : result.data) && "__schema" in result.data) { - return result.data; - } - const responseString = typeof result === "string" ? result : toolkit.formatResult(result); - setFetchError(responseString); - } - fetchIntrospectionData().then(introspectionData => { - if (counter !== counterRef.current || !introspectionData) { - return; - } - try { - const newSchema = graphql.buildClientSchema(introspectionData); - setSchema(newSchema); - onSchemaChange == null ? void 0 : onSchemaChange(newSchema); - } catch (error) { - setFetchError(toolkit.formatError(error)); - } - }).catch(error => { - if (counter !== counterRef.current) { - return; - } - setFetchError(toolkit.formatError(error)); - setIsFetching(false); + setIsFetching(true); + setFetchError(null); + let result = await fetch2; + if (typeof result !== "object" || result === null || !("data" in result)) { + const fetch22 = toolkit.fetcherReturnToPromise(fetcher({ + query: introspectionQuerySansSubscriptions, + operationName: introspectionQueryName + }, fetcherOpts)); + if (!toolkit.isPromise(fetch22)) { + throw new Error("Fetcher did not return a Promise for introspection."); + } + result = await fetch22; + } + setIsFetching(false); + if ((result == null ? void 0 : result.data) && "__schema" in result.data) { + return result.data; + } + const responseString = typeof result === "string" ? result : toolkit.formatResult(result); + setFetchError(responseString); + }; + fetchIntrospectionData().then(introspectionData => { + if (counter !== counterRef.current || !introspectionData) { + return; + } + try { + const newSchema = graphql.buildClientSchema(introspectionData); + setSchema(newSchema); + if (onSchemaChange) { + onSchemaChange(newSchema); + } + } catch (t72) { + const error = t72; + setFetchError(toolkit.formatError(error)); + } + }).catch(error_0 => { + if (counter !== counterRef.current) { + return; + } + setFetchError(toolkit.formatError(error_0)); + setIsFetching(false); + }); + }; + $[14] = fetcher; + $[15] = introspectionQuery; + $[16] = introspectionQueryName; + $[17] = introspectionQuerySansSubscriptions; + $[18] = onSchemaChange; + $[19] = props.schema; + $[20] = t6; + } else { + t6 = $[20]; + } + const introspect = t6; + let t7; + let t8; + if ($[21] !== introspect) { + t7 = () => { + introspect(); + }; + t8 = [introspect]; + $[21] = introspect; + $[22] = t7; + $[23] = t8; + } else { + t7 = $[22]; + t8 = $[23]; + } + React.useEffect(t7, t8); + let t9; + if ($[24] !== introspect) { + t9 = () => { + const triggerIntrospection = function triggerIntrospection2(event) { + if (event.ctrlKey && event.key === "R") { + introspect(); + } + }; + window.addEventListener("keydown", triggerIntrospection); + return () => { + window.removeEventListener("keydown", triggerIntrospection); + }; + }; + $[24] = introspect; + $[25] = t9; + } else { + t9 = $[25]; + } + React.useEffect(t9); + let t10; + if ($[26] !== props.dangerouslyAssumeSchemaIsValid || $[27] !== schema) { + t10 = !schema || props.dangerouslyAssumeSchemaIsValid ? [] : graphql.validateSchema(schema); + $[26] = props.dangerouslyAssumeSchemaIsValid; + $[27] = schema; + $[28] = t10; + } else { + t10 = $[28]; + } + const validationErrors = t10; + let t11; + if ($[29] !== fetchError || $[30] !== introspect || $[31] !== isFetching || $[32] !== schema || $[33] !== validationErrors) { + t11 = { + fetchError, + introspect, + isFetching, + schema, + validationErrors + }; + $[29] = fetchError; + $[30] = introspect; + $[31] = isFetching; + $[32] = schema; + $[33] = validationErrors; + $[34] = t11; + } else { + t11 = $[34]; + } + const value = t11; + let t12; + if ($[35] !== props.children || $[36] !== value) { + t12 = /* @__PURE__ */jsxRuntime.jsx(SchemaContext.Provider, { + value, + children: props.children }); - }, [fetcher, introspectionQueryName, introspectionQuery, introspectionQuerySansSubscriptions, onSchemaChange, props.schema]); - React.useEffect(() => { - introspect(); - }, [introspect]); - React.useEffect(() => { - function triggerIntrospection(event) { - if (event.ctrlKey && event.key === "R") { - introspect(); - } - } - window.addEventListener("keydown", triggerIntrospection); - return () => window.removeEventListener("keydown", triggerIntrospection); - }); - const validationErrors = React.useMemo(() => { - if (!schema || dangerouslyAssumeSchemaIsValid) { - return []; - } - return graphql.validateSchema(schema); - }, [schema, dangerouslyAssumeSchemaIsValid]); - const value = React.useMemo(() => ({ - fetchError, - introspect, - isFetching, - schema, - validationErrors - }), [fetchError, introspect, isFetching, schema, validationErrors]); - return /* @__PURE__ */jsxRuntime.jsx(SchemaContext.Provider, { - value, - children - }); + $[35] = props.children; + $[36] = value; + $[37] = t12; + } else { + t12 = $[37]; + } + return t12; } const useSchemaContext = createContextHook(SchemaContext); function useIntrospectionQuery({ @@ -70191,22 +77713,20 @@ function useIntrospectionQuery({ introspectionQueryName, schemaDescription }) { - return React.useMemo(() => { - const queryName = introspectionQueryName || "IntrospectionQuery"; - let query = graphql.getIntrospectionQuery({ - inputValueDeprecation, - schemaDescription - }); - if (introspectionQueryName) { - query = query.replace("query IntrospectionQuery", `query ${queryName}`); - } - const querySansSubscriptions = query.replace("subscriptionType { name }", ""); - return { - introspectionQueryName: queryName, - introspectionQuery: query, - introspectionQuerySansSubscriptions: querySansSubscriptions - }; - }, [inputValueDeprecation, introspectionQueryName, schemaDescription]); + const queryName = introspectionQueryName || "IntrospectionQuery"; + let query = graphql.getIntrospectionQuery({ + inputValueDeprecation, + schemaDescription + }); + if (introspectionQueryName) { + query = query.replace("query IntrospectionQuery", `query ${queryName}`); + } + const querySansSubscriptions = query.replace("subscriptionType { name }", ""); + return { + introspectionQueryName: queryName, + introspectionQuery: query, + introspectionQuerySansSubscriptions: querySansSubscriptions + }; } function parseHeaderString(headersString) { let headers = null; @@ -70228,99 +77748,175 @@ const initialNavStackItem = { }; const ExplorerContext = createNullableContext("ExplorerContext"); function ExplorerContextProvider(props) { + const $ = reactCompilerRuntime.c(14); + let t0; + if ($[0] === Symbol.for("react.memo_cache_sentinel")) { + t0 = { + nonNull: true, + caller: ExplorerContextProvider + }; + $[0] = t0; + } else { + t0 = $[0]; + } const { schema, validationErrors - } = useSchemaContext({ - nonNull: true, - caller: ExplorerContextProvider - }); - const [navStack, setNavStack] = React.useState([initialNavStackItem]); - const push = React.useCallback(item => { - setNavStack(currentState => { - const lastItem = currentState.at(-1); - return lastItem.def === item.def ? - // Avoid pushing duplicate items - currentState : [...currentState, item]; - }); - }, []); - const pop = React.useCallback(() => { - setNavStack(currentState => currentState.length > 1 ? currentState.slice(0, -1) : currentState); - }, []); - const reset = React.useCallback(() => { - setNavStack(currentState => currentState.length === 1 ? currentState : [initialNavStackItem]); - }, []); - React.useEffect(() => { - if (schema == null || validationErrors.length > 0) { - reset(); - } else { - setNavStack(oldNavStack => { - if (oldNavStack.length === 1) { - return oldNavStack; - } - const newNavStack = [initialNavStackItem]; - let lastEntity = null; - for (const item of oldNavStack) { - if (item === initialNavStackItem) { - continue; - } - if (item.def) { - if (graphql.isNamedType(item.def)) { - const newType = schema.getType(item.def.name); - if (newType) { - newNavStack.push({ - name: item.name, - def: newType - }); - lastEntity = newType; - } else { - break; - } - } else if (lastEntity === null) { - break; - } else if (graphql.isObjectType(lastEntity) || graphql.isInputObjectType(lastEntity)) { - const field = lastEntity.getFields()[item.name]; - if (field) { - newNavStack.push({ - name: item.name, - def: field - }); - } else { - break; - } - } else if (graphql.isScalarType(lastEntity) || graphql.isEnumType(lastEntity) || graphql.isInterfaceType(lastEntity) || graphql.isUnionType(lastEntity)) { - break; - } else { - const field = lastEntity; - const arg = field.args.find(a => a.name === item.name); - if (arg) { - newNavStack.push({ - name: item.name, - def: field - }); - } else { - break; - } - } - } else { - lastEntity = null; - newNavStack.push(item); - } - } - return newNavStack; + } = useSchemaContext(t0); + let t1; + if ($[1] === Symbol.for("react.memo_cache_sentinel")) { + t1 = [initialNavStackItem]; + $[1] = t1; + } else { + t1 = $[1]; + } + const [navStack, setNavStack] = React.useState(t1); + let t2; + if ($[2] === Symbol.for("react.memo_cache_sentinel")) { + t2 = item => { + setNavStack(currentState => { + const lastItem = currentState.at(-1); + return lastItem.def === item.def ? currentState : [...currentState, item]; }); - } - }, [reset, schema, validationErrors]); - const value = React.useMemo(() => ({ - explorerNavStack: navStack, - push, - pop, - reset - }), [navStack, push, pop, reset]); - return /* @__PURE__ */jsxRuntime.jsx(ExplorerContext.Provider, { - value, - children: props.children - }); + }; + $[2] = t2; + } else { + t2 = $[2]; + } + const push = t2; + let t3; + if ($[3] === Symbol.for("react.memo_cache_sentinel")) { + t3 = () => { + setNavStack(_temp$6); + }; + $[3] = t3; + } else { + t3 = $[3]; + } + const pop = t3; + let t4; + if ($[4] === Symbol.for("react.memo_cache_sentinel")) { + t4 = () => { + setNavStack(_temp2$3); + }; + $[4] = t4; + } else { + t4 = $[4]; + } + const reset = t4; + let t5; + let t6; + if ($[5] !== schema || $[6] !== validationErrors) { + t5 = () => { + if (schema == null || validationErrors.length > 0) { + reset(); + } else { + setNavStack(oldNavStack => { + if (oldNavStack.length === 1) { + return oldNavStack; + } + const newNavStack = [initialNavStackItem]; + let lastEntity = null; + for (const item_0 of oldNavStack) { + if (item_0 === initialNavStackItem) { + continue; + } + if (item_0.def) { + if (graphql.isNamedType(item_0.def)) { + const newType = schema.getType(item_0.def.name); + if (newType) { + newNavStack.push({ + name: item_0.name, + def: newType + }); + lastEntity = newType; + } else { + break; + } + } else { + if (lastEntity === null) { + break; + } else { + if (graphql.isObjectType(lastEntity) || graphql.isInputObjectType(lastEntity)) { + const field = lastEntity.getFields()[item_0.name]; + if (field) { + newNavStack.push({ + name: item_0.name, + def: field + }); + } else { + break; + } + } else { + if (graphql.isScalarType(lastEntity) || graphql.isEnumType(lastEntity) || graphql.isInterfaceType(lastEntity) || graphql.isUnionType(lastEntity)) { + break; + } else { + const field_0 = lastEntity; + const arg = field_0.args.find(a => a.name === item_0.name); + if (arg) { + newNavStack.push({ + name: item_0.name, + def: field_0 + }); + } else { + break; + } + } + } + } + } + } else { + lastEntity = null; + newNavStack.push(item_0); + } + } + return newNavStack; + }); + } + }; + t6 = [schema, validationErrors]; + $[5] = schema; + $[6] = validationErrors; + $[7] = t5; + $[8] = t6; + } else { + t5 = $[7]; + t6 = $[8]; + } + React.useEffect(t5, t6); + let t7; + if ($[9] !== navStack) { + t7 = { + explorerNavStack: navStack, + push, + pop, + reset + }; + $[9] = navStack; + $[10] = t7; + } else { + t7 = $[10]; + } + const value = t7; + let t8; + if ($[11] !== props.children || $[12] !== value) { + t8 = /* @__PURE__ */jsxRuntime.jsx(ExplorerContext.Provider, { + value, + children: props.children + }); + $[11] = props.children; + $[12] = value; + $[13] = t8; + } else { + t8 = $[13]; + } + return t8; +} +function _temp2$3(currentState_1) { + return currentState_1.length === 1 ? currentState_1 : [initialNavStackItem]; +} +function _temp$6(currentState_0) { + return currentState_0.length > 1 ? currentState_0.slice(0, -1) : currentState_0; } const useExplorerContext = createContextHook(ExplorerContext); function renderType(type, renderNamedType) { @@ -70337,52 +77933,122 @@ function renderType(type, renderNamedType) { return renderNamedType(type); } function TypeLink(props) { + const $ = reactCompilerRuntime.c(6); + let t0; + if ($[0] === Symbol.for("react.memo_cache_sentinel")) { + t0 = { + nonNull: true, + caller: TypeLink + }; + $[0] = t0; + } else { + t0 = $[0]; + } const { push - } = useExplorerContext({ - nonNull: true, - caller: TypeLink - }); + } = useExplorerContext(t0); if (!props.type) { return null; } - return renderType(props.type, namedType => /* @__PURE__ */jsxRuntime.jsx("a", { - className: "graphiql-doc-explorer-type-name", - onClick: event => { - event.preventDefault(); - push({ - name: namedType.name, - def: namedType - }); - }, - href: "#", - children: namedType.name - })); + let t1; + if ($[1] !== push) { + t1 = namedType => /* @__PURE__ */jsxRuntime.jsx("a", { + className: "graphiql-doc-explorer-type-name", + onClick: event => { + event.preventDefault(); + push({ + name: namedType.name, + def: namedType + }); + }, + href: "#", + children: namedType.name + }); + $[1] = push; + $[2] = t1; + } else { + t1 = $[2]; + } + let t2; + if ($[3] !== props.type || $[4] !== t1) { + t2 = renderType(props.type, t1); + $[3] = props.type; + $[4] = t1; + $[5] = t2; + } else { + t2 = $[5]; + } + return t2; } -function Argument({ - arg, - showDefaultValue, - inline -}) { - const definition = /* @__PURE__ */jsxRuntime.jsxs("span", { - children: [/* @__PURE__ */jsxRuntime.jsx("span", { +function Argument(t0) { + const $ = reactCompilerRuntime.c(19); + const { + arg, + showDefaultValue, + inline + } = t0; + let t1; + if ($[0] !== arg.name) { + t1 = /* @__PURE__ */jsxRuntime.jsx("span", { className: "graphiql-doc-explorer-argument-name", children: arg.name - }), ": ", /* @__PURE__ */jsxRuntime.jsx(TypeLink, { + }); + $[0] = arg.name; + $[1] = t1; + } else { + t1 = $[1]; + } + let t2; + if ($[2] !== arg.type) { + t2 = /* @__PURE__ */jsxRuntime.jsx(TypeLink, { type: arg.type - }), showDefaultValue !== false && /* @__PURE__ */jsxRuntime.jsx(DefaultValue, { + }); + $[2] = arg.type; + $[3] = t2; + } else { + t2 = $[3]; + } + let t3; + if ($[4] !== arg || $[5] !== showDefaultValue) { + t3 = showDefaultValue !== false && /* @__PURE__ */jsxRuntime.jsx(DefaultValue, { field: arg - })] - }); + }); + $[4] = arg; + $[5] = showDefaultValue; + $[6] = t3; + } else { + t3 = $[6]; + } + let t4; + if ($[7] !== t1 || $[8] !== t2 || $[9] !== t3) { + t4 = /* @__PURE__ */jsxRuntime.jsxs("span", { + children: [t1, ": ", t2, t3] + }); + $[7] = t1; + $[8] = t2; + $[9] = t3; + $[10] = t4; + } else { + t4 = $[10]; + } + const definition = t4; if (inline) { return definition; } - return /* @__PURE__ */jsxRuntime.jsxs("div", { - className: "graphiql-doc-explorer-argument", - children: [definition, arg.description ? /* @__PURE__ */jsxRuntime.jsx(MarkdownContent, { + let t5; + if ($[11] !== arg.description) { + t5 = arg.description ? /* @__PURE__ */jsxRuntime.jsx(MarkdownContent, { type: "description", children: arg.description - }) : null, arg.deprecationReason ? /* @__PURE__ */jsxRuntime.jsxs("div", { + }) : null; + $[11] = arg.description; + $[12] = t5; + } else { + t5 = $[12]; + } + let t6; + if ($[13] !== arg.deprecationReason) { + t6 = arg.deprecationReason ? /* @__PURE__ */jsxRuntime.jsxs("div", { className: "graphiql-doc-explorer-argument-deprecation", children: [/* @__PURE__ */jsxRuntime.jsx("div", { className: "graphiql-doc-explorer-argument-deprecation-label", @@ -70391,42 +78057,115 @@ function Argument({ type: "deprecation", children: arg.deprecationReason })] - }) : null] - }); + }) : null; + $[13] = arg.deprecationReason; + $[14] = t6; + } else { + t6 = $[14]; + } + let t7; + if ($[15] !== definition || $[16] !== t5 || $[17] !== t6) { + t7 = /* @__PURE__ */jsxRuntime.jsxs("div", { + className: "graphiql-doc-explorer-argument", + children: [definition, t5, t6] + }); + $[15] = definition; + $[16] = t5; + $[17] = t6; + $[18] = t7; + } else { + t7 = $[18]; + } + return t7; } function DeprecationReason(props) { - var _props$preview; - return props.children ? /* @__PURE__ */jsxRuntime.jsxs("div", { - className: "graphiql-doc-explorer-deprecation", - children: [/* @__PURE__ */jsxRuntime.jsx("div", { - className: "graphiql-doc-explorer-deprecation-label", - children: "Deprecated" - }), /* @__PURE__ */jsxRuntime.jsx(MarkdownContent, { - type: "deprecation", - onlyShowFirstChild: (_props$preview = props.preview) !== null && _props$preview !== void 0 ? _props$preview : true, - children: props.children - })] - }) : null; + const $ = reactCompilerRuntime.c(3); + let t0; + if ($[0] !== props.children || $[1] !== props.preview) { + var _props$preview; + t0 = props.children ? /* @__PURE__ */jsxRuntime.jsxs("div", { + className: "graphiql-doc-explorer-deprecation", + children: [/* @__PURE__ */jsxRuntime.jsx("div", { + className: "graphiql-doc-explorer-deprecation-label", + children: "Deprecated" + }), /* @__PURE__ */jsxRuntime.jsx(MarkdownContent, { + type: "deprecation", + onlyShowFirstChild: (_props$preview = props.preview) !== null && _props$preview !== void 0 ? _props$preview : true, + children: props.children + })] + }) : null; + $[0] = props.children; + $[1] = props.preview; + $[2] = t0; + } else { + t0 = $[2]; + } + return t0; } -function Directive({ - directive -}) { - return /* @__PURE__ */jsxRuntime.jsxs("span", { - className: "graphiql-doc-explorer-directive", - children: ["@", directive.name.value] - }); +function Directive(t0) { + const $ = reactCompilerRuntime.c(2); + const { + directive + } = t0; + let t1; + if ($[0] !== directive.name.value) { + t1 = /* @__PURE__ */jsxRuntime.jsxs("span", { + className: "graphiql-doc-explorer-directive", + children: ["@", directive.name.value] + }); + $[0] = directive.name.value; + $[1] = t1; + } else { + t1 = $[1]; + } + return t1; } function ExplorerSection(props) { + const $ = reactCompilerRuntime.c(10); const Icon2 = TYPE_TO_ICON[props.title]; - return /* @__PURE__ */jsxRuntime.jsxs("div", { - children: [/* @__PURE__ */jsxRuntime.jsxs("div", { + let t0; + if ($[0] !== Icon2) { + t0 = /* @__PURE__ */jsxRuntime.jsx(Icon2, {}); + $[0] = Icon2; + $[1] = t0; + } else { + t0 = $[1]; + } + let t1; + if ($[2] !== props.title || $[3] !== t0) { + t1 = /* @__PURE__ */jsxRuntime.jsxs("div", { className: "graphiql-doc-explorer-section-title", - children: [/* @__PURE__ */jsxRuntime.jsx(Icon2, {}), props.title] - }), /* @__PURE__ */jsxRuntime.jsx("div", { + children: [t0, props.title] + }); + $[2] = props.title; + $[3] = t0; + $[4] = t1; + } else { + t1 = $[4]; + } + let t2; + if ($[5] !== props.children) { + t2 = /* @__PURE__ */jsxRuntime.jsx("div", { className: "graphiql-doc-explorer-section-content", children: props.children - })] - }); + }); + $[5] = props.children; + $[6] = t2; + } else { + t2 = $[6]; + } + let t3; + if ($[7] !== t1 || $[8] !== t2) { + t3 = /* @__PURE__ */jsxRuntime.jsxs("div", { + children: [t1, t2] + }); + $[7] = t1; + $[8] = t2; + $[9] = t3; + } else { + t3 = $[9]; + } + return t3; } const TYPE_TO_ICON = { Arguments: ArgumentIcon, @@ -70444,130 +78183,380 @@ const TYPE_TO_ICON = { "All Schema Types": TypeIcon }; function FieldDocumentation(props) { - return /* @__PURE__ */jsxRuntime.jsxs(jsxRuntime.Fragment, { - children: [props.field.description ? /* @__PURE__ */jsxRuntime.jsx(MarkdownContent, { + const $ = reactCompilerRuntime.c(15); + let t0; + if ($[0] !== props.field.description) { + t0 = props.field.description ? /* @__PURE__ */jsxRuntime.jsx(MarkdownContent, { type: "description", children: props.field.description - }) : null, /* @__PURE__ */jsxRuntime.jsx(DeprecationReason, { + }) : null; + $[0] = props.field.description; + $[1] = t0; + } else { + t0 = $[1]; + } + let t1; + if ($[2] !== props.field.deprecationReason) { + t1 = /* @__PURE__ */jsxRuntime.jsx(DeprecationReason, { preview: false, children: props.field.deprecationReason - }), /* @__PURE__ */jsxRuntime.jsx(ExplorerSection, { + }); + $[2] = props.field.deprecationReason; + $[3] = t1; + } else { + t1 = $[3]; + } + let t2; + if ($[4] !== props.field.type) { + t2 = /* @__PURE__ */jsxRuntime.jsx(ExplorerSection, { title: "Type", children: /* @__PURE__ */jsxRuntime.jsx(TypeLink, { type: props.field.type }) - }), /* @__PURE__ */jsxRuntime.jsx(Arguments, { + }); + $[4] = props.field.type; + $[5] = t2; + } else { + t2 = $[5]; + } + let t3; + let t4; + if ($[6] !== props.field) { + t3 = /* @__PURE__ */jsxRuntime.jsx(Arguments, { field: props.field - }), /* @__PURE__ */jsxRuntime.jsx(Directives, { + }); + t4 = /* @__PURE__ */jsxRuntime.jsx(Directives, { field: props.field - })] - }); + }); + $[6] = props.field; + $[7] = t3; + $[8] = t4; + } else { + t3 = $[7]; + t4 = $[8]; + } + let t5; + if ($[9] !== t0 || $[10] !== t1 || $[11] !== t2 || $[12] !== t3 || $[13] !== t4) { + t5 = /* @__PURE__ */jsxRuntime.jsxs(jsxRuntime.Fragment, { + children: [t0, t1, t2, t3, t4] + }); + $[9] = t0; + $[10] = t1; + $[11] = t2; + $[12] = t3; + $[13] = t4; + $[14] = t5; + } else { + t5 = $[14]; + } + return t5; } -function Arguments({ - field -}) { +function Arguments(t0) { + const $ = reactCompilerRuntime.c(12); + const { + field + } = t0; const [showDeprecated, setShowDeprecated] = React.useState(false); - const handleShowDeprecated = React.useCallback(() => { - setShowDeprecated(true); - }, []); + let t1; + if ($[0] === Symbol.for("react.memo_cache_sentinel")) { + t1 = () => { + setShowDeprecated(true); + }; + $[0] = t1; + } else { + t1 = $[0]; + } + const handleShowDeprecated = t1; if (!("args" in field)) { return null; } - const args = []; - const deprecatedArgs = []; - for (const argument of field.args) { - if (argument.deprecationReason) { - deprecatedArgs.push(argument); - } else { - args.push(argument); + let args; + let deprecatedArgs; + let t2; + if ($[1] !== field.args) { + args = []; + deprecatedArgs = []; + for (const argument of field.args) { + if (argument.deprecationReason) { + deprecatedArgs.push(argument); + } else { + args.push(argument); + } } - } - return /* @__PURE__ */jsxRuntime.jsxs(jsxRuntime.Fragment, { - children: [args.length > 0 ? /* @__PURE__ */jsxRuntime.jsx(ExplorerSection, { + t2 = args.length > 0 ? /* @__PURE__ */jsxRuntime.jsx(ExplorerSection, { title: "Arguments", - children: args.map(arg => /* @__PURE__ */jsxRuntime.jsx(Argument, { - arg - }, arg.name)) - }) : null, deprecatedArgs.length > 0 ? showDeprecated || args.length === 0 ? /* @__PURE__ */jsxRuntime.jsx(ExplorerSection, { + children: args.map(_temp$5) + }) : null; + $[1] = field.args; + $[2] = args; + $[3] = deprecatedArgs; + $[4] = t2; + } else { + args = $[2]; + deprecatedArgs = $[3]; + t2 = $[4]; + } + let t3; + if ($[5] !== args.length || $[6] !== deprecatedArgs || $[7] !== showDeprecated) { + t3 = deprecatedArgs.length > 0 ? showDeprecated || args.length === 0 ? /* @__PURE__ */jsxRuntime.jsx(ExplorerSection, { title: "Deprecated Arguments", - children: deprecatedArgs.map(arg => /* @__PURE__ */jsxRuntime.jsx(Argument, { - arg - }, arg.name)) + children: deprecatedArgs.map(_temp2$2) }) : /* @__PURE__ */jsxRuntime.jsx(Button$1, { type: "button", onClick: handleShowDeprecated, children: "Show Deprecated Arguments" - }) : null] - }); + }) : null; + $[5] = args.length; + $[6] = deprecatedArgs; + $[7] = showDeprecated; + $[8] = t3; + } else { + t3 = $[8]; + } + let t4; + if ($[9] !== t2 || $[10] !== t3) { + t4 = /* @__PURE__ */jsxRuntime.jsxs(jsxRuntime.Fragment, { + children: [t2, t3] + }); + $[9] = t2; + $[10] = t3; + $[11] = t4; + } else { + t4 = $[11]; + } + return t4; } -function Directives({ - field -}) { - var _a; - const directives = ((_a = field.astNode) == null ? void 0 : _a.directives) || []; +function _temp2$2(arg_0) { + return /* @__PURE__ */jsxRuntime.jsx(Argument, { + arg: arg_0 + }, arg_0.name); +} +function _temp$5(arg) { + return /* @__PURE__ */jsxRuntime.jsx(Argument, { + arg + }, arg.name); +} +function Directives(t0) { + var _a, _b, _c; + const $ = reactCompilerRuntime.c(6); + const { + field + } = t0; + let t1; + if ($[0] !== ((_a = field.astNode) == null ? void 0 : _a.directives)) { + t1 = ((_b = field.astNode) == null ? void 0 : _b.directives) || []; + $[0] = (_c = field.astNode) == null ? void 0 : _c.directives; + $[1] = t1; + } else { + t1 = $[1]; + } + const directives = t1; if (!directives || directives.length === 0) { return null; } - return /* @__PURE__ */jsxRuntime.jsx(ExplorerSection, { - title: "Directives", - children: directives.map(directive => /* @__PURE__ */jsxRuntime.jsx("div", { - children: /* @__PURE__ */jsxRuntime.jsx(Directive, { - directive - }) - }, directive.name.value)) - }); + let t2; + if ($[2] !== directives) { + t2 = directives.map(_temp3$2); + $[2] = directives; + $[3] = t2; + } else { + t2 = $[3]; + } + let t3; + if ($[4] !== t2) { + t3 = /* @__PURE__ */jsxRuntime.jsx(ExplorerSection, { + title: "Directives", + children: t2 + }); + $[4] = t2; + $[5] = t3; + } else { + t3 = $[5]; + } + return t3; +} +function _temp3$2(directive) { + return /* @__PURE__ */jsxRuntime.jsx("div", { + children: /* @__PURE__ */jsxRuntime.jsx(Directive, { + directive + }) + }, directive.name.value); } function SchemaDocumentation(props) { var _a, _b, _c, _d; - const queryType = props.schema.getQueryType(); - const mutationType = (_b = (_a = props.schema).getMutationType) == null ? void 0 : _b.call(_a); - const subscriptionType = (_d = (_c = props.schema).getSubscriptionType) == null ? void 0 : _d.call(_c); - const typeMap = props.schema.getTypeMap(); - const ignoreTypesInAllSchema = [queryType == null ? void 0 : queryType.name, mutationType == null ? void 0 : mutationType.name, subscriptionType == null ? void 0 : subscriptionType.name]; - return /* @__PURE__ */jsxRuntime.jsxs(jsxRuntime.Fragment, { - children: [/* @__PURE__ */jsxRuntime.jsx(MarkdownContent, { - type: "description", - children: props.schema.description || "A GraphQL schema provides a root type for each kind of operation." - }), /* @__PURE__ */jsxRuntime.jsxs(ExplorerSection, { - title: "Root Types", - children: [queryType ? /* @__PURE__ */jsxRuntime.jsxs("div", { + const $ = reactCompilerRuntime.c(39); + let t0; + if ($[0] !== props.schema) { + t0 = props.schema.getQueryType(); + $[0] = props.schema; + $[1] = t0; + } else { + t0 = $[1]; + } + const queryType = t0; + let t1; + if ($[2] !== props.schema) { + t1 = (_b = (_a = props.schema).getMutationType) == null ? void 0 : _b.call(_a); + $[2] = props.schema; + $[3] = t1; + } else { + t1 = $[3]; + } + const mutationType = t1; + let t2; + if ($[4] !== props.schema) { + t2 = (_d = (_c = props.schema).getSubscriptionType) == null ? void 0 : _d.call(_c); + $[4] = props.schema; + $[5] = t2; + } else { + t2 = $[5]; + } + const subscriptionType = t2; + let T0; + let t3; + let t4; + let t5; + let t6; + if ($[6] !== mutationType || $[7] !== props.schema || $[8] !== queryType || $[9] !== subscriptionType) { + const typeMap = props.schema.getTypeMap(); + const t72 = queryType == null ? void 0 : queryType.name; + const t82 = mutationType == null ? void 0 : mutationType.name; + const t9 = subscriptionType == null ? void 0 : subscriptionType.name; + let t10; + if ($[15] !== t72 || $[16] !== t82 || $[17] !== t9) { + t10 = [t72, t82, t9]; + $[15] = t72; + $[16] = t82; + $[17] = t9; + $[18] = t10; + } else { + t10 = $[18]; + } + const ignoreTypesInAllSchema = t10; + const t11 = props.schema.description || "A GraphQL schema provides a root type for each kind of operation."; + if ($[19] !== t11) { + t5 = /* @__PURE__ */jsxRuntime.jsx(MarkdownContent, { + type: "description", + children: t11 + }); + $[19] = t11; + $[20] = t5; + } else { + t5 = $[20]; + } + let t12; + if ($[21] !== queryType) { + t12 = queryType ? /* @__PURE__ */jsxRuntime.jsxs("div", { children: [/* @__PURE__ */jsxRuntime.jsx("span", { className: "graphiql-doc-explorer-root-type", children: "query" }), ": ", /* @__PURE__ */jsxRuntime.jsx(TypeLink, { type: queryType })] - }) : null, mutationType && /* @__PURE__ */jsxRuntime.jsxs("div", { + }) : null; + $[21] = queryType; + $[22] = t12; + } else { + t12 = $[22]; + } + let t13; + if ($[23] !== mutationType) { + t13 = mutationType && /* @__PURE__ */jsxRuntime.jsxs("div", { children: [/* @__PURE__ */jsxRuntime.jsx("span", { className: "graphiql-doc-explorer-root-type", children: "mutation" }), ": ", /* @__PURE__ */jsxRuntime.jsx(TypeLink, { type: mutationType })] - }), subscriptionType && /* @__PURE__ */jsxRuntime.jsxs("div", { + }); + $[23] = mutationType; + $[24] = t13; + } else { + t13 = $[24]; + } + let t14; + if ($[25] !== subscriptionType) { + t14 = subscriptionType && /* @__PURE__ */jsxRuntime.jsxs("div", { children: [/* @__PURE__ */jsxRuntime.jsx("span", { className: "graphiql-doc-explorer-root-type", children: "subscription" }), ": ", /* @__PURE__ */jsxRuntime.jsx(TypeLink, { type: subscriptionType })] - })] - }), /* @__PURE__ */jsxRuntime.jsx(ExplorerSection, { - title: "All Schema Types", - children: typeMap && /* @__PURE__ */jsxRuntime.jsx("div", { - children: Object.values(typeMap).map(type => { - if (ignoreTypesInAllSchema.includes(type.name) || type.name.startsWith("__")) { - return null; - } - return /* @__PURE__ */jsxRuntime.jsx("div", { - children: /* @__PURE__ */jsxRuntime.jsx(TypeLink, { - type - }) - }, type.name); - }) + }); + $[25] = subscriptionType; + $[26] = t14; + } else { + t14 = $[26]; + } + if ($[27] !== t12 || $[28] !== t13 || $[29] !== t14) { + t6 = /* @__PURE__ */jsxRuntime.jsxs(ExplorerSection, { + title: "Root Types", + children: [t12, t13, t14] + }); + $[27] = t12; + $[28] = t13; + $[29] = t14; + $[30] = t6; + } else { + t6 = $[30]; + } + T0 = ExplorerSection; + t3 = "All Schema Types"; + t4 = typeMap && /* @__PURE__ */jsxRuntime.jsx("div", { + children: Object.values(typeMap).map(type => { + if (ignoreTypesInAllSchema.includes(type.name) || type.name.startsWith("__")) { + return null; + } + return /* @__PURE__ */jsxRuntime.jsx("div", { + children: /* @__PURE__ */jsxRuntime.jsx(TypeLink, { + type + }) + }, type.name); }) - })] - }); + }); + $[6] = mutationType; + $[7] = props.schema; + $[8] = queryType; + $[9] = subscriptionType; + $[10] = T0; + $[11] = t3; + $[12] = t4; + $[13] = t5; + $[14] = t6; + } else { + T0 = $[10]; + t3 = $[11]; + t4 = $[12]; + t5 = $[13]; + t6 = $[14]; + } + let t7; + if ($[31] !== T0 || $[32] !== t3 || $[33] !== t4) { + t7 = /* @__PURE__ */jsxRuntime.jsx(T0, { + title: t3, + children: t4 + }); + $[31] = T0; + $[32] = t3; + $[33] = t4; + $[34] = t7; + } else { + t7 = $[34]; + } + let t8; + if ($[35] !== t5 || $[36] !== t6 || $[37] !== t7) { + t8 = /* @__PURE__ */jsxRuntime.jsxs(jsxRuntime.Fragment, { + children: [t5, t6, t7] + }); + $[35] = t5; + $[36] = t6; + $[37] = t7; + $[38] = t8; + } else { + t8 = $[38]; + } + return t8; } function debounce(duration, fn) { let timeout; @@ -70582,6 +78571,8 @@ function debounce(duration, fn) { }; } function Search() { + "use no memo"; + const { explorerNavStack, push @@ -70643,7 +78634,7 @@ function Search() { autoComplete: "off", onFocus: handleFocus, onBlur: handleFocus, - onChange: event => setSearchValue(event.target.value), + onChange: event_0 => setSearchValue(event_0.target.value), placeholder: `${isMacOs ? "⌘" : "Ctrl"} K`, ref: inputRef, value: searchValue, @@ -70664,94 +78655,131 @@ function Search() { }, `within-${i}`)), results.within.length > 0 && results.types.length + results.fields.length > 0 ? /* @__PURE__ */jsxRuntime.jsx("div", { className: "graphiql-doc-explorer-search-divider", children: "Other results" - }) : null, results.types.map((result, i) => /* @__PURE__ */jsxRuntime.jsx(react.Combobox.Option, { - value: result, + }) : null, results.types.map((result_0, i_0) => /* @__PURE__ */jsxRuntime.jsx(react.Combobox.Option, { + value: result_0, "data-cy": "doc-explorer-option", children: /* @__PURE__ */jsxRuntime.jsx(Type, { - type: result.type + type: result_0.type }) - }, `type-${i}`)), results.fields.map((result, i) => /* @__PURE__ */jsxRuntime.jsxs(react.Combobox.Option, { - value: result, + }, `type-${i_0}`)), results.fields.map((result_1, i_1) => /* @__PURE__ */jsxRuntime.jsxs(react.Combobox.Option, { + value: result_1, "data-cy": "doc-explorer-option", children: [/* @__PURE__ */jsxRuntime.jsx(Type, { - type: result.type + type: result_1.type }), ".", /* @__PURE__ */jsxRuntime.jsx(Field$1, { - field: result.field, - argument: result.argument + field: result_1.field, + argument: result_1.argument })] - }, `field-${i}`))] + }, `field-${i_1}`))] })] }); } +const _useSearchResults = useSearchResults; function useSearchResults(caller) { + const $ = reactCompilerRuntime.c(9); + const t0 = caller || _useSearchResults; + let t1; + if ($[0] !== t0) { + t1 = { + nonNull: true, + caller: t0 + }; + $[0] = t0; + $[1] = t1; + } else { + t1 = $[1]; + } const { explorerNavStack - } = useExplorerContext({ - nonNull: true, - caller: caller || useSearchResults - }); + } = useExplorerContext(t1); + const t2 = caller || _useSearchResults; + let t3; + if ($[2] !== t2) { + t3 = { + nonNull: true, + caller: t2 + }; + $[2] = t2; + $[3] = t3; + } else { + t3 = $[3]; + } const { schema - } = useSchemaContext({ - nonNull: true, - caller: caller || useSearchResults - }); - const navItem = explorerNavStack.at(-1); - return React.useCallback(searchValue => { - const matches = { - within: [], - types: [], - fields: [] - }; - if (!schema) { - return matches; - } - const withinType = navItem.def; - const typeMap = schema.getTypeMap(); - let typeNames = Object.keys(typeMap); - if (withinType) { - typeNames = typeNames.filter(n => n !== withinType.name); - typeNames.unshift(withinType.name); - } - for (const typeName of typeNames) { - if (matches.within.length + matches.types.length + matches.fields.length >= 100) { - break; + } = useSchemaContext(t3); + let t4; + if ($[4] !== explorerNavStack) { + t4 = explorerNavStack.at(-1); + $[4] = explorerNavStack; + $[5] = t4; + } else { + t4 = $[5]; + } + const navItem = t4; + let t5; + if ($[6] !== navItem || $[7] !== schema) { + t5 = searchValue => { + const matches = { + within: [], + types: [], + fields: [] + }; + if (!schema) { + return matches; } - const type = typeMap[typeName]; - if (withinType !== type && isMatch(typeName, searchValue)) { - matches.types.push({ - type - }); + const withinType = navItem.def; + const typeMap = schema.getTypeMap(); + let typeNames = Object.keys(typeMap); + if (withinType) { + typeNames = typeNames.filter(n => n !== withinType.name); + typeNames.unshift(withinType.name); } - if (!graphql.isObjectType(type) && !graphql.isInterfaceType(type) && !graphql.isInputObjectType(type)) { - continue; - } - const fields = type.getFields(); - for (const fieldName in fields) { - const field = fields[fieldName]; - let matchingArgs; - if (!isMatch(fieldName, searchValue)) { - if ("args" in field) { - matchingArgs = field.args.filter(arg => isMatch(arg.name, searchValue)); - if (matchingArgs.length === 0) { + for (const typeName of typeNames) { + if (matches.within.length + matches.types.length + matches.fields.length >= 100) { + break; + } + const type = typeMap[typeName]; + if (withinType !== type && isMatch(typeName, searchValue)) { + matches.types.push({ + type + }); + } + if (!graphql.isObjectType(type) && !graphql.isInterfaceType(type) && !graphql.isInputObjectType(type)) { + continue; + } + const fields = type.getFields(); + for (const fieldName in fields) { + const field = fields[fieldName]; + let matchingArgs; + if (!isMatch(fieldName, searchValue)) { + if ("args" in field) { + matchingArgs = field.args.filter(arg => isMatch(arg.name, searchValue)); + if (matchingArgs.length === 0) { + continue; + } + } else { continue; } - } else { - continue; } + matches[withinType === type ? "within" : "fields"].push(...(matchingArgs ? matchingArgs.map(argument => ({ + type, + field, + argument + })) : [{ + type, + field + }])); } - matches[withinType === type ? "within" : "fields"].push(...(matchingArgs ? matchingArgs.map(argument => ({ - type, - field, - argument - })) : [{ - type, - field - }])); } - } - return matches; - }, [navItem.def, schema]); + return matches; + }; + $[6] = navItem; + $[7] = schema; + $[8] = t5; + } else { + t5 = $[8]; + } + return t5; } function isMatch(sourceText, searchValue) { try { @@ -70762,307 +78790,804 @@ function isMatch(sourceText, searchValue) { } } function Type(props) { - return /* @__PURE__ */jsxRuntime.jsx("span", { - className: "graphiql-doc-explorer-search-type", - children: props.type.name - }); + const $ = reactCompilerRuntime.c(2); + let t0; + if ($[0] !== props.type.name) { + t0 = /* @__PURE__ */jsxRuntime.jsx("span", { + className: "graphiql-doc-explorer-search-type", + children: props.type.name + }); + $[0] = props.type.name; + $[1] = t0; + } else { + t0 = $[1]; + } + return t0; } -function Field$1({ - field, - argument -}) { - return /* @__PURE__ */jsxRuntime.jsxs(jsxRuntime.Fragment, { - children: [/* @__PURE__ */jsxRuntime.jsx("span", { +function Field$1(t0) { + const $ = reactCompilerRuntime.c(7); + const { + field, + argument + } = t0; + let t1; + if ($[0] !== field.name) { + t1 = /* @__PURE__ */jsxRuntime.jsx("span", { className: "graphiql-doc-explorer-search-field", children: field.name - }), argument ? /* @__PURE__ */jsxRuntime.jsxs(jsxRuntime.Fragment, { + }); + $[0] = field.name; + $[1] = t1; + } else { + t1 = $[1]; + } + let t2; + if ($[2] !== argument) { + t2 = argument ? /* @__PURE__ */jsxRuntime.jsxs(jsxRuntime.Fragment, { children: ["(", /* @__PURE__ */jsxRuntime.jsx("span", { className: "graphiql-doc-explorer-search-argument", children: argument.name - }), ":", " ", renderType(argument.type, namedType => /* @__PURE__ */jsxRuntime.jsx(Type, { - type: namedType - })), ")"] - }) : null] + }), ":", " ", renderType(argument.type, _temp$4), ")"] + }) : null; + $[2] = argument; + $[3] = t2; + } else { + t2 = $[3]; + } + let t3; + if ($[4] !== t1 || $[5] !== t2) { + t3 = /* @__PURE__ */jsxRuntime.jsxs(jsxRuntime.Fragment, { + children: [t1, t2] + }); + $[4] = t1; + $[5] = t2; + $[6] = t3; + } else { + t3 = $[6]; + } + return t3; +} +function _temp$4(namedType) { + return /* @__PURE__ */jsxRuntime.jsx(Type, { + type: namedType }); } function FieldLink(props) { + const $ = reactCompilerRuntime.c(7); + let t0; + if ($[0] === Symbol.for("react.memo_cache_sentinel")) { + t0 = { + nonNull: true + }; + $[0] = t0; + } else { + t0 = $[0]; + } const { push - } = useExplorerContext({ - nonNull: true - }); - return /* @__PURE__ */jsxRuntime.jsx("a", { - className: "graphiql-doc-explorer-field-name", - onClick: event => { + } = useExplorerContext(t0); + let t1; + if ($[1] !== props.field || $[2] !== push) { + t1 = event => { event.preventDefault(); push({ name: props.field.name, def: props.field }); - }, - href: "#", - children: props.field.name - }); + }; + $[1] = props.field; + $[2] = push; + $[3] = t1; + } else { + t1 = $[3]; + } + let t2; + if ($[4] !== props.field.name || $[5] !== t1) { + t2 = /* @__PURE__ */jsxRuntime.jsx("a", { + className: "graphiql-doc-explorer-field-name", + onClick: t1, + href: "#", + children: props.field.name + }); + $[4] = props.field.name; + $[5] = t1; + $[6] = t2; + } else { + t2 = $[6]; + } + return t2; } function TypeDocumentation(props) { - return graphql.isNamedType(props.type) ? /* @__PURE__ */jsxRuntime.jsxs(jsxRuntime.Fragment, { - children: [props.type.description ? /* @__PURE__ */jsxRuntime.jsx(MarkdownContent, { - type: "description", - children: props.type.description - }) : null, /* @__PURE__ */jsxRuntime.jsx(ImplementsInterfaces, { - type: props.type - }), /* @__PURE__ */jsxRuntime.jsx(Fields, { - type: props.type - }), /* @__PURE__ */jsxRuntime.jsx(EnumValues, { - type: props.type - }), /* @__PURE__ */jsxRuntime.jsx(PossibleTypes, { - type: props.type - })] - }) : null; + const $ = reactCompilerRuntime.c(2); + let t0; + if ($[0] !== props.type) { + t0 = graphql.isNamedType(props.type) ? /* @__PURE__ */jsxRuntime.jsxs(jsxRuntime.Fragment, { + children: [props.type.description ? /* @__PURE__ */jsxRuntime.jsx(MarkdownContent, { + type: "description", + children: props.type.description + }) : null, /* @__PURE__ */jsxRuntime.jsx(ImplementsInterfaces, { + type: props.type + }), /* @__PURE__ */jsxRuntime.jsx(Fields, { + type: props.type + }), /* @__PURE__ */jsxRuntime.jsx(EnumValues, { + type: props.type + }), /* @__PURE__ */jsxRuntime.jsx(PossibleTypes, { + type: props.type + })] + }) : null; + $[0] = props.type; + $[1] = t0; + } else { + t0 = $[1]; + } + return t0; } -function ImplementsInterfaces({ - type -}) { +function ImplementsInterfaces(t0) { + const $ = reactCompilerRuntime.c(5); + const { + type + } = t0; if (!graphql.isObjectType(type)) { return null; } - const interfaces = type.getInterfaces(); - return interfaces.length > 0 ? /* @__PURE__ */jsxRuntime.jsx(ExplorerSection, { - title: "Implements", - children: type.getInterfaces().map(implementedInterface => /* @__PURE__ */jsxRuntime.jsx("div", { - children: /* @__PURE__ */jsxRuntime.jsx(TypeLink, { - type: implementedInterface - }) - }, implementedInterface.name)) - }) : null; + let t1; + if ($[0] !== type) { + t1 = type.getInterfaces(); + $[0] = type; + $[1] = t1; + } else { + t1 = $[1]; + } + const interfaces = t1; + let t2; + if ($[2] !== interfaces.length || $[3] !== type) { + t2 = interfaces.length > 0 ? /* @__PURE__ */jsxRuntime.jsx(ExplorerSection, { + title: "Implements", + children: type.getInterfaces().map(_temp$3) + }) : null; + $[2] = interfaces.length; + $[3] = type; + $[4] = t2; + } else { + t2 = $[4]; + } + return t2; } -function Fields({ - type -}) { +function _temp$3(implementedInterface) { + return /* @__PURE__ */jsxRuntime.jsx("div", { + children: /* @__PURE__ */jsxRuntime.jsx(TypeLink, { + type: implementedInterface + }) + }, implementedInterface.name); +} +function Fields(t0) { + const $ = reactCompilerRuntime.c(12); + const { + type + } = t0; const [showDeprecated, setShowDeprecated] = React.useState(false); - const handleShowDeprecated = React.useCallback(() => { - setShowDeprecated(true); - }, []); + let t1; + if ($[0] === Symbol.for("react.memo_cache_sentinel")) { + t1 = () => { + setShowDeprecated(true); + }; + $[0] = t1; + } else { + t1 = $[0]; + } + const handleShowDeprecated = t1; if (!graphql.isObjectType(type) && !graphql.isInterfaceType(type) && !graphql.isInputObjectType(type)) { return null; } - const fieldMap = type.getFields(); - const fields = []; - const deprecatedFields = []; - for (const field of Object.keys(fieldMap).map(name => fieldMap[name])) { - if (field.deprecationReason) { - deprecatedFields.push(field); - } else { - fields.push(field); + let deprecatedFields; + let fields; + let t2; + if ($[1] !== type) { + const fieldMap = type.getFields(); + fields = []; + deprecatedFields = []; + for (const field of Object.keys(fieldMap).map(name => fieldMap[name])) { + if (field.deprecationReason) { + deprecatedFields.push(field); + } else { + fields.push(field); + } } - } - return /* @__PURE__ */jsxRuntime.jsxs(jsxRuntime.Fragment, { - children: [fields.length > 0 ? /* @__PURE__ */jsxRuntime.jsx(ExplorerSection, { + t2 = fields.length > 0 ? /* @__PURE__ */jsxRuntime.jsx(ExplorerSection, { title: "Fields", - children: fields.map(field => /* @__PURE__ */jsxRuntime.jsx(Field, { - field - }, field.name)) - }) : null, deprecatedFields.length > 0 ? showDeprecated || fields.length === 0 ? /* @__PURE__ */jsxRuntime.jsx(ExplorerSection, { + children: fields.map(_temp2$1) + }) : null; + $[1] = type; + $[2] = deprecatedFields; + $[3] = fields; + $[4] = t2; + } else { + deprecatedFields = $[2]; + fields = $[3]; + t2 = $[4]; + } + let t3; + if ($[5] !== deprecatedFields || $[6] !== fields.length || $[7] !== showDeprecated) { + t3 = deprecatedFields.length > 0 ? showDeprecated || fields.length === 0 ? /* @__PURE__ */jsxRuntime.jsx(ExplorerSection, { title: "Deprecated Fields", - children: deprecatedFields.map(field => /* @__PURE__ */jsxRuntime.jsx(Field, { - field - }, field.name)) + children: deprecatedFields.map(_temp3$1) }) : /* @__PURE__ */jsxRuntime.jsx(Button$1, { type: "button", onClick: handleShowDeprecated, children: "Show Deprecated Fields" - }) : null] - }); + }) : null; + $[5] = deprecatedFields; + $[6] = fields.length; + $[7] = showDeprecated; + $[8] = t3; + } else { + t3 = $[8]; + } + let t4; + if ($[9] !== t2 || $[10] !== t3) { + t4 = /* @__PURE__ */jsxRuntime.jsxs(jsxRuntime.Fragment, { + children: [t2, t3] + }); + $[9] = t2; + $[10] = t3; + $[11] = t4; + } else { + t4 = $[11]; + } + return t4; } -function Field({ - field -}) { - const args = "args" in field ? field.args.filter(arg => !arg.deprecationReason) : []; - return /* @__PURE__ */jsxRuntime.jsxs("div", { - className: "graphiql-doc-explorer-item", - children: [/* @__PURE__ */jsxRuntime.jsxs("div", { - children: [/* @__PURE__ */jsxRuntime.jsx(FieldLink, { - field - }), args.length > 0 ? /* @__PURE__ */jsxRuntime.jsxs(jsxRuntime.Fragment, { - children: ["(", /* @__PURE__ */jsxRuntime.jsx("span", { - children: args.map(arg => args.length === 1 ? /* @__PURE__ */jsxRuntime.jsx(Argument, { - arg, +function _temp3$1(field_1) { + return /* @__PURE__ */jsxRuntime.jsx(Field, { + field: field_1 + }, field_1.name); +} +function _temp2$1(field_0) { + return /* @__PURE__ */jsxRuntime.jsx(Field, { + field: field_0 + }, field_0.name); +} +function Field(t0) { + const $ = reactCompilerRuntime.c(22); + const { + field + } = t0; + let t1; + let t2; + let t3; + if ($[0] !== field) { + const args = "args" in field ? field.args.filter(_temp4$1) : []; + t3 = "graphiql-doc-explorer-item"; + t1 = /* @__PURE__ */jsxRuntime.jsx(FieldLink, { + field + }); + t2 = args.length > 0 ? /* @__PURE__ */jsxRuntime.jsxs(jsxRuntime.Fragment, { + children: ["(", /* @__PURE__ */jsxRuntime.jsx("span", { + children: args.map(arg_0 => args.length === 1 ? /* @__PURE__ */jsxRuntime.jsx(Argument, { + arg: arg_0, + inline: true + }, arg_0.name) : /* @__PURE__ */jsxRuntime.jsx("div", { + className: "graphiql-doc-explorer-argument-multiple", + children: /* @__PURE__ */jsxRuntime.jsx(Argument, { + arg: arg_0, inline: true - }, arg.name) : /* @__PURE__ */jsxRuntime.jsx("div", { - className: "graphiql-doc-explorer-argument-multiple", - children: /* @__PURE__ */jsxRuntime.jsx(Argument, { - arg, - inline: true - }) - }, arg.name)) - }), ")"] - }) : null, ": ", /* @__PURE__ */jsxRuntime.jsx(TypeLink, { - type: field.type - }), /* @__PURE__ */jsxRuntime.jsx(DefaultValue, { - field - })] - }), field.description ? /* @__PURE__ */jsxRuntime.jsx(MarkdownContent, { + }) + }, arg_0.name)) + }), ")"] + }) : null; + $[0] = field; + $[1] = t1; + $[2] = t2; + $[3] = t3; + } else { + t1 = $[1]; + t2 = $[2]; + t3 = $[3]; + } + let t4; + if ($[4] !== field.type) { + t4 = /* @__PURE__ */jsxRuntime.jsx(TypeLink, { + type: field.type + }); + $[4] = field.type; + $[5] = t4; + } else { + t4 = $[5]; + } + let t5; + if ($[6] !== field) { + t5 = /* @__PURE__ */jsxRuntime.jsx(DefaultValue, { + field + }); + $[6] = field; + $[7] = t5; + } else { + t5 = $[7]; + } + let t6; + if ($[8] !== t1 || $[9] !== t2 || $[10] !== t4 || $[11] !== t5) { + t6 = /* @__PURE__ */jsxRuntime.jsxs("div", { + children: [t1, t2, ": ", t4, t5] + }); + $[8] = t1; + $[9] = t2; + $[10] = t4; + $[11] = t5; + $[12] = t6; + } else { + t6 = $[12]; + } + let t7; + if ($[13] !== field.description) { + t7 = field.description ? /* @__PURE__ */jsxRuntime.jsx(MarkdownContent, { type: "description", onlyShowFirstChild: true, children: field.description - }) : null, /* @__PURE__ */jsxRuntime.jsx(DeprecationReason, { + }) : null; + $[13] = field.description; + $[14] = t7; + } else { + t7 = $[14]; + } + let t8; + if ($[15] !== field.deprecationReason) { + t8 = /* @__PURE__ */jsxRuntime.jsx(DeprecationReason, { children: field.deprecationReason - })] - }); + }); + $[15] = field.deprecationReason; + $[16] = t8; + } else { + t8 = $[16]; + } + let t9; + if ($[17] !== t3 || $[18] !== t6 || $[19] !== t7 || $[20] !== t8) { + t9 = /* @__PURE__ */jsxRuntime.jsxs("div", { + className: t3, + children: [t6, t7, t8] + }); + $[17] = t3; + $[18] = t6; + $[19] = t7; + $[20] = t8; + $[21] = t9; + } else { + t9 = $[21]; + } + return t9; } -function EnumValues({ - type -}) { +function _temp4$1(arg) { + return !arg.deprecationReason; +} +function EnumValues(t0) { + const $ = reactCompilerRuntime.c(12); + const { + type + } = t0; const [showDeprecated, setShowDeprecated] = React.useState(false); - const handleShowDeprecated = React.useCallback(() => { - setShowDeprecated(true); - }, []); + let t1; + if ($[0] === Symbol.for("react.memo_cache_sentinel")) { + t1 = () => { + setShowDeprecated(true); + }; + $[0] = t1; + } else { + t1 = $[0]; + } + const handleShowDeprecated = t1; if (!graphql.isEnumType(type)) { return null; } - const values = []; - const deprecatedValues = []; - for (const value of type.getValues()) { - if (value.deprecationReason) { - deprecatedValues.push(value); - } else { - values.push(value); + let deprecatedValues; + let t2; + let values; + if ($[1] !== type) { + values = []; + deprecatedValues = []; + for (const value of type.getValues()) { + if (value.deprecationReason) { + deprecatedValues.push(value); + } else { + values.push(value); + } } - } - return /* @__PURE__ */jsxRuntime.jsxs(jsxRuntime.Fragment, { - children: [values.length > 0 ? /* @__PURE__ */jsxRuntime.jsx(ExplorerSection, { + t2 = values.length > 0 ? /* @__PURE__ */jsxRuntime.jsx(ExplorerSection, { title: "Enum Values", - children: values.map(value => /* @__PURE__ */jsxRuntime.jsx(EnumValue, { - value - }, value.name)) - }) : null, deprecatedValues.length > 0 ? showDeprecated || values.length === 0 ? /* @__PURE__ */jsxRuntime.jsx(ExplorerSection, { + children: values.map(_temp5) + }) : null; + $[1] = type; + $[2] = deprecatedValues; + $[3] = t2; + $[4] = values; + } else { + deprecatedValues = $[2]; + t2 = $[3]; + values = $[4]; + } + let t3; + if ($[5] !== deprecatedValues || $[6] !== showDeprecated || $[7] !== values.length) { + t3 = deprecatedValues.length > 0 ? showDeprecated || values.length === 0 ? /* @__PURE__ */jsxRuntime.jsx(ExplorerSection, { title: "Deprecated Enum Values", - children: deprecatedValues.map(value => /* @__PURE__ */jsxRuntime.jsx(EnumValue, { - value - }, value.name)) + children: deprecatedValues.map(_temp6) }) : /* @__PURE__ */jsxRuntime.jsx(Button$1, { type: "button", onClick: handleShowDeprecated, children: "Show Deprecated Values" - }) : null] - }); + }) : null; + $[5] = deprecatedValues; + $[6] = showDeprecated; + $[7] = values.length; + $[8] = t3; + } else { + t3 = $[8]; + } + let t4; + if ($[9] !== t2 || $[10] !== t3) { + t4 = /* @__PURE__ */jsxRuntime.jsxs(jsxRuntime.Fragment, { + children: [t2, t3] + }); + $[9] = t2; + $[10] = t3; + $[11] = t4; + } else { + t4 = $[11]; + } + return t4; } -function EnumValue({ - value -}) { - return /* @__PURE__ */jsxRuntime.jsxs("div", { - className: "graphiql-doc-explorer-item", - children: [/* @__PURE__ */jsxRuntime.jsx("div", { +function _temp6(value_1) { + return /* @__PURE__ */jsxRuntime.jsx(EnumValue, { + value: value_1 + }, value_1.name); +} +function _temp5(value_0) { + return /* @__PURE__ */jsxRuntime.jsx(EnumValue, { + value: value_0 + }, value_0.name); +} +function EnumValue(t0) { + const $ = reactCompilerRuntime.c(10); + const { + value + } = t0; + let t1; + if ($[0] !== value.name) { + t1 = /* @__PURE__ */jsxRuntime.jsx("div", { className: "graphiql-doc-explorer-enum-value", children: value.name - }), value.description ? /* @__PURE__ */jsxRuntime.jsx(MarkdownContent, { + }); + $[0] = value.name; + $[1] = t1; + } else { + t1 = $[1]; + } + let t2; + if ($[2] !== value.description) { + t2 = value.description ? /* @__PURE__ */jsxRuntime.jsx(MarkdownContent, { type: "description", children: value.description - }) : null, value.deprecationReason ? /* @__PURE__ */jsxRuntime.jsx(MarkdownContent, { + }) : null; + $[2] = value.description; + $[3] = t2; + } else { + t2 = $[3]; + } + let t3; + if ($[4] !== value.deprecationReason) { + t3 = value.deprecationReason ? /* @__PURE__ */jsxRuntime.jsx(MarkdownContent, { type: "deprecation", children: value.deprecationReason - }) : null] - }); + }) : null; + $[4] = value.deprecationReason; + $[5] = t3; + } else { + t3 = $[5]; + } + let t4; + if ($[6] !== t1 || $[7] !== t2 || $[8] !== t3) { + t4 = /* @__PURE__ */jsxRuntime.jsxs("div", { + className: "graphiql-doc-explorer-item", + children: [t1, t2, t3] + }); + $[6] = t1; + $[7] = t2; + $[8] = t3; + $[9] = t4; + } else { + t4 = $[9]; + } + return t4; } -function PossibleTypes({ - type -}) { +function PossibleTypes(t0) { + const $ = reactCompilerRuntime.c(7); + const { + type + } = t0; + let t1; + if ($[0] === Symbol.for("react.memo_cache_sentinel")) { + t1 = { + nonNull: true + }; + $[0] = t1; + } else { + t1 = $[0]; + } const { schema - } = useSchemaContext({ - nonNull: true - }); + } = useSchemaContext(t1); if (!schema || !graphql.isAbstractType(type)) { return null; } - return /* @__PURE__ */jsxRuntime.jsx(ExplorerSection, { - title: graphql.isInterfaceType(type) ? "Implementations" : "Possible Types", - children: schema.getPossibleTypes(type).map(possibleType => /* @__PURE__ */jsxRuntime.jsx("div", { - children: /* @__PURE__ */jsxRuntime.jsx(TypeLink, { - type: possibleType - }) - }, possibleType.name)) - }); + const t2 = graphql.isInterfaceType(type) ? "Implementations" : "Possible Types"; + let t3; + if ($[1] !== schema || $[2] !== type) { + t3 = schema.getPossibleTypes(type).map(_temp7); + $[1] = schema; + $[2] = type; + $[3] = t3; + } else { + t3 = $[3]; + } + let t4; + if ($[4] !== t2 || $[5] !== t3) { + t4 = /* @__PURE__ */jsxRuntime.jsx(ExplorerSection, { + title: t2, + children: t3 + }); + $[4] = t2; + $[5] = t3; + $[6] = t4; + } else { + t4 = $[6]; + } + return t4; +} +function _temp7(possibleType) { + return /* @__PURE__ */jsxRuntime.jsx("div", { + children: /* @__PURE__ */jsxRuntime.jsx(TypeLink, { + type: possibleType + }) + }, possibleType.name); } function DocExplorer() { + const $ = reactCompilerRuntime.c(40); + let t0; + if ($[0] === Symbol.for("react.memo_cache_sentinel")) { + t0 = { + nonNull: true, + caller: DocExplorer + }; + $[0] = t0; + } else { + t0 = $[0]; + } const { fetchError, isFetching, schema, validationErrors - } = useSchemaContext({ - nonNull: true, - caller: DocExplorer - }); + } = useSchemaContext(t0); + let t1; + if ($[1] === Symbol.for("react.memo_cache_sentinel")) { + t1 = { + nonNull: true, + caller: DocExplorer + }; + $[1] = t1; + } else { + t1 = $[1]; + } const { explorerNavStack, pop - } = useExplorerContext({ - nonNull: true, - caller: DocExplorer - }); - const navItem = explorerNavStack.at(-1); - let content = null; - if (fetchError) { - content = /* @__PURE__ */jsxRuntime.jsx("div", { - className: "graphiql-doc-explorer-error", - children: "Error fetching schema" - }); - } else if (validationErrors.length > 0) { - content = /* @__PURE__ */jsxRuntime.jsxs("div", { - className: "graphiql-doc-explorer-error", - children: ["Schema is invalid: ", validationErrors[0].message] - }); - } else if (isFetching) { - content = /* @__PURE__ */jsxRuntime.jsx(Spinner, {}); - } else if (!schema) { - content = /* @__PURE__ */jsxRuntime.jsx("div", { - className: "graphiql-doc-explorer-error", - children: "No GraphQL schema available" - }); - } else if (explorerNavStack.length === 1) { - content = /* @__PURE__ */jsxRuntime.jsx(SchemaDocumentation, { - schema - }); - } else if (graphql.isType(navItem.def)) { - content = /* @__PURE__ */jsxRuntime.jsx(TypeDocumentation, { - type: navItem.def - }); - } else if (navItem.def) { - content = /* @__PURE__ */jsxRuntime.jsx(FieldDocumentation, { - field: navItem.def - }); + } = useExplorerContext(t1); + let content; + let navItem; + if ($[2] !== explorerNavStack || $[3] !== fetchError || $[4] !== isFetching || $[5] !== schema || $[6] !== validationErrors) { + navItem = explorerNavStack.at(-1); + content = null; + if (fetchError) { + let t22; + if ($[9] === Symbol.for("react.memo_cache_sentinel")) { + t22 = /* @__PURE__ */jsxRuntime.jsx("div", { + className: "graphiql-doc-explorer-error", + children: "Error fetching schema" + }); + $[9] = t22; + } else { + t22 = $[9]; + } + content = t22; + } else { + if (validationErrors.length > 0) { + const t22 = validationErrors[0]; + let t32; + if ($[10] !== t22.message) { + t32 = /* @__PURE__ */jsxRuntime.jsxs("div", { + className: "graphiql-doc-explorer-error", + children: ["Schema is invalid: ", t22.message] + }); + $[10] = t22.message; + $[11] = t32; + } else { + t32 = $[11]; + } + content = t32; + } else { + if (isFetching) { + let t22; + if ($[12] === Symbol.for("react.memo_cache_sentinel")) { + t22 = /* @__PURE__ */jsxRuntime.jsx(Spinner, {}); + $[12] = t22; + } else { + t22 = $[12]; + } + content = t22; + } else { + if (!schema) { + let t22; + if ($[13] === Symbol.for("react.memo_cache_sentinel")) { + t22 = /* @__PURE__ */jsxRuntime.jsx("div", { + className: "graphiql-doc-explorer-error", + children: "No GraphQL schema available" + }); + $[13] = t22; + } else { + t22 = $[13]; + } + content = t22; + } else { + if (explorerNavStack.length === 1) { + let t22; + if ($[14] !== schema) { + t22 = /* @__PURE__ */jsxRuntime.jsx(SchemaDocumentation, { + schema + }); + $[14] = schema; + $[15] = t22; + } else { + t22 = $[15]; + } + content = t22; + } else { + if (graphql.isType(navItem.def)) { + let t22; + if ($[16] !== navItem.def) { + t22 = /* @__PURE__ */jsxRuntime.jsx(TypeDocumentation, { + type: navItem.def + }); + $[16] = navItem.def; + $[17] = t22; + } else { + t22 = $[17]; + } + content = t22; + } else { + if (navItem.def) { + let t22; + if ($[18] !== navItem.def) { + t22 = /* @__PURE__ */jsxRuntime.jsx(FieldDocumentation, { + field: navItem.def + }); + $[18] = navItem.def; + $[19] = t22; + } else { + t22 = $[19]; + } + content = t22; + } + } + } + } + } + } + } + $[2] = explorerNavStack; + $[3] = fetchError; + $[4] = isFetching; + $[5] = schema; + $[6] = validationErrors; + $[7] = content; + $[8] = navItem; + } else { + content = $[7]; + navItem = $[8]; } let prevName; if (explorerNavStack.length > 1) { - prevName = explorerNavStack.at(-2).name; + let t22; + if ($[20] !== explorerNavStack) { + t22 = explorerNavStack.at(-2); + $[20] = explorerNavStack; + $[21] = t22; + } else { + t22 = $[21]; + } + prevName = t22.name; } - return /* @__PURE__ */jsxRuntime.jsxs("section", { - className: "graphiql-doc-explorer", - "aria-label": "Documentation Explorer", - children: [/* @__PURE__ */jsxRuntime.jsxs("div", { + let t2; + if ($[22] !== pop || $[23] !== prevName) { + t2 = prevName && /* @__PURE__ */jsxRuntime.jsxs("a", { + href: "#", + className: "graphiql-doc-explorer-back", + onClick: event => { + event.preventDefault(); + pop(); + }, + "aria-label": `Go back to ${prevName}`, + children: [/* @__PURE__ */jsxRuntime.jsx(ChevronLeftIcon, {}), prevName] + }); + $[22] = pop; + $[23] = prevName; + $[24] = t2; + } else { + t2 = $[24]; + } + let t3; + if ($[25] !== navItem.name) { + t3 = /* @__PURE__ */jsxRuntime.jsx("div", { + className: "graphiql-doc-explorer-title", + children: navItem.name + }); + $[25] = navItem.name; + $[26] = t3; + } else { + t3 = $[26]; + } + let t4; + if ($[27] !== t2 || $[28] !== t3) { + t4 = /* @__PURE__ */jsxRuntime.jsxs("div", { + className: "graphiql-doc-explorer-header-content", + children: [t2, t3] + }); + $[27] = t2; + $[28] = t3; + $[29] = t4; + } else { + t4 = $[29]; + } + let t5; + if ($[30] !== navItem.name) { + t5 = /* @__PURE__ */jsxRuntime.jsx(Search, {}, navItem.name); + $[30] = navItem.name; + $[31] = t5; + } else { + t5 = $[31]; + } + let t6; + if ($[32] !== t4 || $[33] !== t5) { + t6 = /* @__PURE__ */jsxRuntime.jsxs("div", { className: "graphiql-doc-explorer-header", - children: [/* @__PURE__ */jsxRuntime.jsxs("div", { - className: "graphiql-doc-explorer-header-content", - children: [prevName && /* @__PURE__ */jsxRuntime.jsxs("a", { - href: "#", - className: "graphiql-doc-explorer-back", - onClick: event => { - event.preventDefault(); - pop(); - }, - "aria-label": `Go back to ${prevName}`, - children: [/* @__PURE__ */jsxRuntime.jsx(ChevronLeftIcon, {}), prevName] - }), /* @__PURE__ */jsxRuntime.jsx("div", { - className: "graphiql-doc-explorer-title", - children: navItem.name - })] - }), /* @__PURE__ */jsxRuntime.jsx(Search, {}, navItem.name)] - }), /* @__PURE__ */jsxRuntime.jsx("div", { + children: [t4, t5] + }); + $[32] = t4; + $[33] = t5; + $[34] = t6; + } else { + t6 = $[34]; + } + let t7; + if ($[35] !== content) { + t7 = /* @__PURE__ */jsxRuntime.jsx("div", { className: "graphiql-doc-explorer-content", children: content - })] - }); + }); + $[35] = content; + $[36] = t7; + } else { + t7 = $[36]; + } + let t8; + if ($[37] !== t6 || $[38] !== t7) { + t8 = /* @__PURE__ */jsxRuntime.jsxs("section", { + className: "graphiql-doc-explorer", + "aria-label": "Documentation Explorer", + children: [t6, t7] + }); + $[37] = t6; + $[38] = t7; + $[39] = t8; + } else { + t8 = $[39]; + } + return t8; } const DOC_EXPLORER_PLUGIN = { title: "Documentation Explorer", @@ -71079,13 +79604,16 @@ const HISTORY_PLUGIN = { }; const PluginContext = createNullableContext("PluginContext"); function PluginContextProvider(props) { + const $ = reactCompilerRuntime.c(27); const storage = useStorageContext(); const explorerContext = useExplorerContext(); const historyContext = useHistoryContext(); const hasExplorerContext = Boolean(explorerContext); const hasHistoryContext = Boolean(historyContext); - const plugins = React.useMemo(() => { - const pluginList = []; + let t0; + let pluginList; + if ($[0] !== hasExplorerContext || $[1] !== hasHistoryContext || $[2] !== props.plugins) { + pluginList = []; const pluginTitles = {}; if (hasExplorerContext) { pluginList.push(DOC_EXPLORER_PLUGIN); @@ -71095,7 +79623,15 @@ function PluginContextProvider(props) { pluginList.push(HISTORY_PLUGIN); pluginTitles[HISTORY_PLUGIN.title] = true; } - for (const plugin of props.plugins || []) { + let t12; + if ($[4] !== props.plugins) { + t12 = props.plugins || []; + $[4] = props.plugins; + $[5] = t12; + } else { + t12 = $[5]; + } + for (const plugin of t12) { if (typeof plugin.title !== "string" || !plugin.title) { throw new Error("All GraphiQL plugins must have a unique title"); } @@ -71106,50 +79642,114 @@ function PluginContextProvider(props) { pluginTitles[plugin.title] = true; } } - return pluginList; - }, [hasExplorerContext, hasHistoryContext, props.plugins]); - const [visiblePlugin, internalSetVisiblePlugin] = React.useState(() => { - const storedValue = storage == null ? void 0 : storage.get(STORAGE_KEY$4); - const pluginForStoredValue = plugins.find(plugin => plugin.title === storedValue); - if (pluginForStoredValue) { - return pluginForStoredValue; - } - if (storedValue) { - storage == null ? void 0 : storage.set(STORAGE_KEY$4, ""); - } - if (!props.visiblePlugin) { - return null; - } - return plugins.find(plugin => (typeof props.visiblePlugin === "string" ? plugin.title : plugin) === props.visiblePlugin) || null; - }); + $[0] = hasExplorerContext; + $[1] = hasHistoryContext; + $[2] = props.plugins; + $[3] = pluginList; + } else { + pluginList = $[3]; + } + t0 = pluginList; + const plugins = t0; + let t1; + if ($[6] !== plugins || $[7] !== props.visiblePlugin || $[8] !== storage) { + t1 = () => { + const storedValue = storage == null ? void 0 : storage.get(STORAGE_KEY$4); + const pluginForStoredValue = plugins.find(plugin_0 => plugin_0.title === storedValue); + if (pluginForStoredValue) { + return pluginForStoredValue; + } + if (storedValue) { + storage == null ? void 0 : storage.set(STORAGE_KEY$4, ""); + } + if (!props.visiblePlugin) { + return null; + } + return plugins.find(plugin_1 => (typeof props.visiblePlugin === "string" ? plugin_1.title : plugin_1) === props.visiblePlugin) || null; + }; + $[6] = plugins; + $[7] = props.visiblePlugin; + $[8] = storage; + $[9] = t1; + } else { + t1 = $[9]; + } + const [visiblePlugin, internalSetVisiblePlugin] = React.useState(t1); const { onTogglePluginVisibility, children } = props; - const setVisiblePlugin = React.useCallback(plugin => { - const newVisiblePlugin = plugin ? plugins.find(p => (typeof plugin === "string" ? p.title : p) === plugin) || null : null; - internalSetVisiblePlugin(current => { - if (newVisiblePlugin === current) { - return current; + let t2; + if ($[10] !== onTogglePluginVisibility || $[11] !== plugins) { + t2 = plugin_2 => { + const newVisiblePlugin = plugin_2 ? plugins.find(p => (typeof plugin_2 === "string" ? p.title : p) === plugin_2) || null : null; + internalSetVisiblePlugin(current => { + if (newVisiblePlugin === current) { + return current; + } + onTogglePluginVisibility == null ? void 0 : onTogglePluginVisibility(newVisiblePlugin); + return newVisiblePlugin; + }); + }; + $[10] = onTogglePluginVisibility; + $[11] = plugins; + $[12] = t2; + } else { + t2 = $[12]; + } + const setVisiblePlugin = t2; + let t3; + if ($[13] !== props.visiblePlugin || $[14] !== setVisiblePlugin) { + t3 = () => { + if (props.visiblePlugin) { + setVisiblePlugin(props.visiblePlugin); } - onTogglePluginVisibility == null ? void 0 : onTogglePluginVisibility(newVisiblePlugin); - return newVisiblePlugin; + }; + $[13] = props.visiblePlugin; + $[14] = setVisiblePlugin; + $[15] = t3; + } else { + t3 = $[15]; + } + let t4; + if ($[16] !== plugins || $[17] !== props.visiblePlugin || $[18] !== setVisiblePlugin) { + t4 = [plugins, props.visiblePlugin, setVisiblePlugin]; + $[16] = plugins; + $[17] = props.visiblePlugin; + $[18] = setVisiblePlugin; + $[19] = t4; + } else { + t4 = $[19]; + } + React.useEffect(t3, t4); + let t5; + if ($[20] !== plugins || $[21] !== setVisiblePlugin || $[22] !== visiblePlugin) { + t5 = { + plugins, + setVisiblePlugin, + visiblePlugin + }; + $[20] = plugins; + $[21] = setVisiblePlugin; + $[22] = visiblePlugin; + $[23] = t5; + } else { + t5 = $[23]; + } + const value = t5; + let t6; + if ($[24] !== children || $[25] !== value) { + t6 = /* @__PURE__ */jsxRuntime.jsx(PluginContext.Provider, { + value, + children }); - }, [onTogglePluginVisibility, plugins]); - React.useEffect(() => { - if (props.visiblePlugin) { - setVisiblePlugin(props.visiblePlugin); - } - }, [plugins, props.visiblePlugin, setVisiblePlugin]); - const value = React.useMemo(() => ({ - plugins, - setVisiblePlugin, - visiblePlugin - }), [plugins, setVisiblePlugin, visiblePlugin]); - return /* @__PURE__ */jsxRuntime.jsx(PluginContext.Provider, { - value, - children - }); + $[24] = children; + $[25] = value; + $[26] = t6; + } else { + t6 = $[26]; + } + return t6; } const usePluginContext = createContextHook(PluginContext); const STORAGE_KEY$4 = "visiblePlugin"; @@ -71301,244 +79901,476 @@ function onHasCompletion(_cm, data, schema, explorer, plugin, callback) { } } function useSynchronizeValue(editor, value) { - React.useEffect(() => { - if (editor && typeof value === "string" && value !== editor.getValue()) { - editor.setValue(value); - } - }, [editor, value]); + const $ = reactCompilerRuntime.c(4); + let t0; + let t1; + if ($[0] !== editor || $[1] !== value) { + t0 = () => { + if (editor && typeof value === "string" && value !== editor.getValue()) { + editor.setValue(value); + } + }; + t1 = [editor, value]; + $[0] = editor; + $[1] = value; + $[2] = t0; + $[3] = t1; + } else { + t0 = $[2]; + t1 = $[3]; + } + React.useEffect(t0, t1); } function useSynchronizeOption(editor, option, value) { - React.useEffect(() => { - if (editor) { - editor.setOption(option, value); - } - }, [editor, option, value]); + const $ = reactCompilerRuntime.c(5); + let t0; + let t1; + if ($[0] !== editor || $[1] !== option || $[2] !== value) { + t0 = () => { + if (editor) { + editor.setOption(option, value); + } + }; + t1 = [editor, option, value]; + $[0] = editor; + $[1] = option; + $[2] = value; + $[3] = t0; + $[4] = t1; + } else { + t0 = $[3]; + t1 = $[4]; + } + React.useEffect(t0, t1); } function useChangeHandler(editor, callback, storageKey, tabProperty, caller) { + const $ = reactCompilerRuntime.c(10); + let t0; + if ($[0] !== caller) { + t0 = { + nonNull: true, + caller + }; + $[0] = caller; + $[1] = t0; + } else { + t0 = $[1]; + } const { updateActiveTabValues - } = useEditorContext({ - nonNull: true, - caller - }); + } = useEditorContext(t0); const storage = useStorageContext(); - React.useEffect(() => { - if (!editor) { - return; - } - const store = debounce(500, value => { - if (!storage || storageKey === null) { + let t1; + let t2; + if ($[2] !== callback || $[3] !== editor || $[4] !== storage || $[5] !== storageKey || $[6] !== tabProperty || $[7] !== updateActiveTabValues) { + t1 = () => { + if (!editor) { return; } - storage.set(storageKey, value); - }); - const updateTab = debounce(100, value => { - updateActiveTabValues({ - [tabProperty]: value + const store = debounce(500, value => { + if (!storage || storageKey === null) { + return; + } + storage.set(storageKey, value); }); - }); - const handleChange = (editorInstance, changeObj) => { - if (!changeObj) { - return; - } - const newValue = editorInstance.getValue(); - store(newValue); - updateTab(newValue); - callback == null ? void 0 : callback(newValue); - }; - editor.on("change", handleChange); - return () => editor.off("change", handleChange); - }, [callback, editor, storage, storageKey, tabProperty, updateActiveTabValues]); -} -function useCompletion(editor, callback, caller) { - const { - schema - } = useSchemaContext({ - nonNull: true, - caller - }); - const explorer = useExplorerContext(); - const plugin = usePluginContext(); - React.useEffect(() => { - if (!editor) { - return; - } - const handleCompletion = (instance, changeObj) => { - onHasCompletion(instance, changeObj, schema, explorer, plugin, type => { - callback == null ? void 0 : callback({ - kind: "Type", - type, - schema: schema || void 0 + const updateTab = debounce(100, value_0 => { + updateActiveTabValues({ + [tabProperty]: value_0 }); }); + const handleChange = (editorInstance, changeObj) => { + if (!changeObj) { + return; + } + const newValue = editorInstance.getValue(); + store(newValue); + updateTab(newValue); + callback == null ? void 0 : callback(newValue); + }; + editor.on("change", handleChange); + return () => editor.off("change", handleChange); }; - editor.on( - // @ts-expect-error @TODO additional args for hasCompletion event - "hasCompletion", handleCompletion); - return () => editor.off( - // @ts-expect-error @TODO additional args for hasCompletion event - "hasCompletion", handleCompletion); - }, [callback, editor, explorer, plugin, schema]); + t2 = [callback, editor, storage, storageKey, tabProperty, updateActiveTabValues]; + $[2] = callback; + $[3] = editor; + $[4] = storage; + $[5] = storageKey; + $[6] = tabProperty; + $[7] = updateActiveTabValues; + $[8] = t1; + $[9] = t2; + } else { + t1 = $[8]; + t2 = $[9]; + } + React.useEffect(t1, t2); } -function useKeyMap(editor, keys, callback) { - React.useEffect(() => { - if (!editor) { - return; - } - for (const key of keys) { - editor.removeKeyMap(key); - } - if (callback) { - const keyMap = {}; - for (const key of keys) { - keyMap[key] = () => callback(); - } - editor.addKeyMap(keyMap); - } - }, [editor, keys, callback]); -} -function useCopyQuery({ - caller, - onCopyQuery -} = {}) { - const { - queryEditor - } = useEditorContext({ - nonNull: true, - caller: caller || useCopyQuery - }); - return React.useCallback(() => { - if (!queryEditor) { - return; - } - const query = queryEditor.getValue(); - copyToClipboard(query); - onCopyQuery == null ? void 0 : onCopyQuery(query); - }, [queryEditor, onCopyQuery]); -} -function useMergeQuery({ - caller -} = {}) { - const { - queryEditor - } = useEditorContext({ - nonNull: true, - caller: caller || useMergeQuery - }); +function useCompletion(editor, callback, caller) { + const $ = reactCompilerRuntime.c(9); + let t0; + if ($[0] !== caller) { + t0 = { + nonNull: true, + caller + }; + $[0] = caller; + $[1] = t0; + } else { + t0 = $[1]; + } const { schema - } = useSchemaContext({ - nonNull: true, - caller: useMergeQuery - }); - return React.useCallback(() => { - const documentAST = queryEditor == null ? void 0 : queryEditor.documentAST; - const query = queryEditor == null ? void 0 : queryEditor.getValue(); - if (!documentAST || !query) { - return; - } - queryEditor.setValue(graphql.print(toolkit.mergeAst(documentAST, schema))); - }, [queryEditor, schema]); + } = useSchemaContext(t0); + const explorer = useExplorerContext(); + const plugin = usePluginContext(); + let t1; + let t2; + if ($[2] !== callback || $[3] !== editor || $[4] !== explorer || $[5] !== plugin || $[6] !== schema) { + t1 = () => { + if (!editor) { + return; + } + const handleCompletion = (instance, changeObj) => { + onHasCompletion(instance, changeObj, schema, explorer, plugin, type => { + callback == null ? void 0 : callback({ + kind: "Type", + type, + schema: schema || void 0 + }); + }); + }; + editor.on("hasCompletion", handleCompletion); + return () => editor.off("hasCompletion", handleCompletion); + }; + t2 = [callback, editor, explorer, plugin, schema]; + $[2] = callback; + $[3] = editor; + $[4] = explorer; + $[5] = plugin; + $[6] = schema; + $[7] = t1; + $[8] = t2; + } else { + t1 = $[7]; + t2 = $[8]; + } + React.useEffect(t1, t2); } -function usePrettifyEditors({ - caller -} = {}) { +function useKeyMap(editor, keys, callback) { + const $ = reactCompilerRuntime.c(5); + let t0; + let t1; + if ($[0] !== callback || $[1] !== editor || $[2] !== keys) { + t0 = () => { + if (!editor) { + return; + } + for (const key of keys) { + editor.removeKeyMap(key); + } + if (callback) { + const keyMap = {}; + for (const key_0 of keys) { + keyMap[key_0] = () => callback(); + } + editor.addKeyMap(keyMap); + } + }; + t1 = [editor, keys, callback]; + $[0] = callback; + $[1] = editor; + $[2] = keys; + $[3] = t0; + $[4] = t1; + } else { + t0 = $[3]; + t1 = $[4]; + } + React.useEffect(t0, t1); +} +const _useCopyQuery = useCopyQuery; +const _useMergeQuery = useMergeQuery; +const _usePrettifyEditors = usePrettifyEditors; +const _useAutoCompleteLeafs = useAutoCompleteLeafs; +function useCopyQuery(t0) { + const $ = reactCompilerRuntime.c(7); + let t1; + if ($[0] !== t0) { + t1 = t0 === void 0 ? {} : t0; + $[0] = t0; + $[1] = t1; + } else { + t1 = $[1]; + } + const { + caller, + onCopyQuery + } = t1; + const t2 = caller || _useCopyQuery; + let t3; + if ($[2] !== t2) { + t3 = { + nonNull: true, + caller: t2 + }; + $[2] = t2; + $[3] = t3; + } else { + t3 = $[3]; + } + const { + queryEditor + } = useEditorContext(t3); + let t4; + if ($[4] !== onCopyQuery || $[5] !== queryEditor) { + t4 = () => { + if (!queryEditor) { + return; + } + const query = queryEditor.getValue(); + copyToClipboard(query); + onCopyQuery == null ? void 0 : onCopyQuery(query); + }; + $[4] = onCopyQuery; + $[5] = queryEditor; + $[6] = t4; + } else { + t4 = $[6]; + } + return t4; +} +function useMergeQuery(t0) { + const $ = reactCompilerRuntime.c(8); + let t1; + if ($[0] !== t0) { + t1 = t0 === void 0 ? {} : t0; + $[0] = t0; + $[1] = t1; + } else { + t1 = $[1]; + } + const { + caller + } = t1; + const t2 = caller || _useMergeQuery; + let t3; + if ($[2] !== t2) { + t3 = { + nonNull: true, + caller: t2 + }; + $[2] = t2; + $[3] = t3; + } else { + t3 = $[3]; + } + const { + queryEditor + } = useEditorContext(t3); + let t4; + if ($[4] === Symbol.for("react.memo_cache_sentinel")) { + t4 = { + nonNull: true, + caller: _useMergeQuery + }; + $[4] = t4; + } else { + t4 = $[4]; + } + const { + schema + } = useSchemaContext(t4); + let t5; + if ($[5] !== queryEditor || $[6] !== schema) { + t5 = () => { + const documentAST = queryEditor == null ? void 0 : queryEditor.documentAST; + const query = queryEditor == null ? void 0 : queryEditor.getValue(); + if (!documentAST || !query) { + return; + } + queryEditor.setValue(graphql.print(toolkit.mergeAst(documentAST, schema))); + }; + $[5] = queryEditor; + $[6] = schema; + $[7] = t5; + } else { + t5 = $[7]; + } + return t5; +} +function usePrettifyEditors(t0) { + const $ = reactCompilerRuntime.c(8); + let t1; + if ($[0] !== t0) { + t1 = t0 === void 0 ? {} : t0; + $[0] = t0; + $[1] = t1; + } else { + t1 = $[1]; + } + const { + caller + } = t1; + const t2 = caller || _usePrettifyEditors; + let t3; + if ($[2] !== t2) { + t3 = { + nonNull: true, + caller: t2 + }; + $[2] = t2; + $[3] = t3; + } else { + t3 = $[3]; + } const { queryEditor, headerEditor, variableEditor - } = useEditorContext({ - nonNull: true, - caller: caller || usePrettifyEditors - }); - return React.useCallback(() => { - if (variableEditor) { - const variableEditorContent = variableEditor.getValue(); - try { - const prettifiedVariableEditorContent = JSON.stringify(JSON.parse(variableEditorContent), null, 2); - if (prettifiedVariableEditorContent !== variableEditorContent) { - variableEditor.setValue(prettifiedVariableEditorContent); - } - } catch {} - } - if (headerEditor) { - const headerEditorContent = headerEditor.getValue(); - try { - const prettifiedHeaderEditorContent = JSON.stringify(JSON.parse(headerEditorContent), null, 2); - if (prettifiedHeaderEditorContent !== headerEditorContent) { - headerEditor.setValue(prettifiedHeaderEditorContent); - } - } catch {} - } - if (queryEditor) { - const editorContent = queryEditor.getValue(); - const prettifiedEditorContent = graphql.print(graphql.parse(editorContent)); - if (prettifiedEditorContent !== editorContent) { - queryEditor.setValue(prettifiedEditorContent); + } = useEditorContext(t3); + let t4; + if ($[4] !== headerEditor || $[5] !== queryEditor || $[6] !== variableEditor) { + t4 = () => { + if (variableEditor) { + const variableEditorContent = variableEditor.getValue(); + try { + const prettifiedVariableEditorContent = JSON.stringify(JSON.parse(variableEditorContent), null, 2); + if (prettifiedVariableEditorContent !== variableEditorContent) { + variableEditor.setValue(prettifiedVariableEditorContent); + } + } catch {} } - } - }, [queryEditor, variableEditor, headerEditor]); + if (headerEditor) { + const headerEditorContent = headerEditor.getValue(); + try { + const prettifiedHeaderEditorContent = JSON.stringify(JSON.parse(headerEditorContent), null, 2); + if (prettifiedHeaderEditorContent !== headerEditorContent) { + headerEditor.setValue(prettifiedHeaderEditorContent); + } + } catch {} + } + if (queryEditor) { + const editorContent = queryEditor.getValue(); + const prettifiedEditorContent = graphql.print(graphql.parse(editorContent)); + if (prettifiedEditorContent !== editorContent) { + queryEditor.setValue(prettifiedEditorContent); + } + } + }; + $[4] = headerEditor; + $[5] = queryEditor; + $[6] = variableEditor; + $[7] = t4; + } else { + t4 = $[7]; + } + return t4; } -function useAutoCompleteLeafs({ - getDefaultFieldNames, - caller -} = {}) { +function useAutoCompleteLeafs(t0) { + const $ = reactCompilerRuntime.c(10); + let t1; + if ($[0] !== t0) { + t1 = t0 === void 0 ? {} : t0; + $[0] = t0; + $[1] = t1; + } else { + t1 = $[1]; + } + const { + getDefaultFieldNames, + caller + } = t1; + const t2 = caller || _useAutoCompleteLeafs; + let t3; + if ($[2] !== t2) { + t3 = { + nonNull: true, + caller: t2 + }; + $[2] = t2; + $[3] = t3; + } else { + t3 = $[3]; + } const { schema - } = useSchemaContext({ - nonNull: true, - caller: caller || useAutoCompleteLeafs - }); + } = useSchemaContext(t3); + const t4 = caller || _useAutoCompleteLeafs; + let t5; + if ($[4] !== t4) { + t5 = { + nonNull: true, + caller: t4 + }; + $[4] = t4; + $[5] = t5; + } else { + t5 = $[5]; + } const { queryEditor - } = useEditorContext({ - nonNull: true, - caller: caller || useAutoCompleteLeafs - }); - return React.useCallback(() => { - if (!queryEditor) { - return; - } - const query = queryEditor.getValue(); - const { - insertions, - result - } = toolkit.fillLeafs(schema, query, getDefaultFieldNames); - if (insertions && insertions.length > 0) { - queryEditor.operation(() => { - const cursor = queryEditor.getCursor(); - const cursorIndex = queryEditor.indexFromPos(cursor); - queryEditor.setValue(result || ""); - let added = 0; - const markers = insertions.map(({ - index, - string - }) => queryEditor.markText(queryEditor.posFromIndex(index + added), queryEditor.posFromIndex(index + (added += string.length)), { - className: "auto-inserted-leaf", - clearOnEnter: true, - title: "Automatically added leaf fields" - })); - setTimeout(() => { - for (const marker of markers) { - marker.clear(); + } = useEditorContext(t5); + let t6; + if ($[6] !== getDefaultFieldNames || $[7] !== queryEditor || $[8] !== schema) { + t6 = () => { + if (!queryEditor) { + return; + } + const query = queryEditor.getValue(); + const { + insertions, + result + } = toolkit.fillLeafs(schema, query, getDefaultFieldNames); + if (insertions && insertions.length > 0) { + queryEditor.operation(() => { + const cursor = queryEditor.getCursor(); + const cursorIndex = queryEditor.indexFromPos(cursor); + queryEditor.setValue(result || ""); + let added; + added = 0; + const markers = insertions.map(t7 => { + const { + index, + string + } = t7; + added = added + string.length; + return queryEditor.markText(queryEditor.posFromIndex(index + added), queryEditor.posFromIndex(index + added), { + className: "auto-inserted-leaf", + clearOnEnter: true, + title: "Automatically added leaf fields" + }); + }); + setTimeout(() => { + for (const marker of markers) { + marker.clear(); + } + }, 7e3); + let newCursorIndex = cursorIndex; + for (const { + index: index_0, + string: string_0 + } of insertions) { + if (index_0 < cursorIndex) { + newCursorIndex = newCursorIndex + string_0.length; + } } - }, 7e3); - let newCursorIndex = cursorIndex; - for (const { - index, - string - } of insertions) { - if (index < cursorIndex) { - newCursorIndex += string.length; - } - } - queryEditor.setCursor(queryEditor.posFromIndex(newCursorIndex)); - }); - } - return result; - }, [getDefaultFieldNames, queryEditor, schema]); + queryEditor.setCursor(queryEditor.posFromIndex(newCursorIndex)); + }); + } + return result; + }; + $[6] = getDefaultFieldNames; + $[7] = queryEditor; + $[8] = schema; + $[9] = t6; + } else { + t6 = $[9]; + } + return t6; } const useEditorState = editor => { + "use no memo"; + var _ref2; const context = useEditorContext({ nonNull: true @@ -71561,143 +80393,265 @@ const useVariablesEditorState = () => { const useHeadersEditorState = () => { return useEditorState("header"); }; -function useOptimisticState([upstreamState, upstreamSetState]) { - const lastStateRef = React.useRef({ - /** The last thing that we sent upstream; we're expecting this back */ - pending: null, - /** The last thing we received from upstream */ - last: upstreamState - }); +function useOptimisticState(t0) { + const $ = reactCompilerRuntime.c(12); + const [upstreamState, upstreamSetState] = t0; + let t1; + if ($[0] !== upstreamState) { + t1 = { + pending: null, + last: upstreamState + }; + $[0] = upstreamState; + $[1] = t1; + } else { + t1 = $[1]; + } + const lastStateRef = React.useRef(t1); const [state, setOperationsText] = React.useState(upstreamState); - React.useEffect(() => { - if (lastStateRef.current.last === upstreamState) ;else { - lastStateRef.current.last = upstreamState; - if (lastStateRef.current.pending === null) { - setOperationsText(upstreamState); - } else if (lastStateRef.current.pending === upstreamState) { - lastStateRef.current.pending = null; - if (upstreamState !== state) { - lastStateRef.current.pending = state; - upstreamSetState(state); + let t2; + let t3; + if ($[2] !== state || $[3] !== upstreamSetState || $[4] !== upstreamState) { + t2 = () => { + if (lastStateRef.current.last === upstreamState) ;else { + lastStateRef.current.last = upstreamState; + if (lastStateRef.current.pending === null) { + setOperationsText(upstreamState); + } else { + if (lastStateRef.current.pending === upstreamState) { + lastStateRef.current.pending = null; + if (upstreamState !== state) { + lastStateRef.current.pending = state; + upstreamSetState(state); + } + } else { + lastStateRef.current.pending = null; + setOperationsText(upstreamState); + } } - } else { - lastStateRef.current.pending = null; - setOperationsText(upstreamState); } - } - }, [upstreamState, state, upstreamSetState]); - const setState = React.useCallback(newState => { - setOperationsText(newState); - if (lastStateRef.current.pending === null && lastStateRef.current.last !== newState) { - lastStateRef.current.pending = newState; - upstreamSetState(newState); - } - }, [upstreamSetState]); - return React.useMemo(() => [state, setState], [state, setState]); + }; + t3 = [upstreamState, state, upstreamSetState]; + $[2] = state; + $[3] = upstreamSetState; + $[4] = upstreamState; + $[5] = t2; + $[6] = t3; + } else { + t2 = $[5]; + t3 = $[6]; + } + React.useEffect(t2, t3); + let t4; + if ($[7] !== upstreamSetState) { + t4 = newState => { + setOperationsText(newState); + if (lastStateRef.current.pending === null && lastStateRef.current.last !== newState) { + lastStateRef.current.pending = newState; + upstreamSetState(newState); + } + }; + $[7] = upstreamSetState; + $[8] = t4; + } else { + t4 = $[8]; + } + const setState = t4; + let t5; + if ($[9] !== setState || $[10] !== state) { + t5 = [state, setState]; + $[9] = setState; + $[10] = state; + $[11] = t5; + } else { + t5 = $[11]; + } + return t5; } -function useHeaderEditor({ - editorTheme = DEFAULT_EDITOR_THEME, - keyMap = DEFAULT_KEY_MAP, - onEdit, - readOnly = false -} = {}, caller) { +function importCodeMirrorImports$3() { + return importCodeMirror([// @ts-expect-error + Promise.resolve().then(() => _interopRequireWildcard(__webpack_require__(/*! codemirror/mode/javascript/javascript.js */ "../../../node_modules/codemirror/mode/javascript/javascript.js")))]); +} +const _useHeaderEditor = useHeaderEditor; +function useHeaderEditor(t0, caller) { + const $ = reactCompilerRuntime.c(17); + let t1; + if ($[0] !== t0) { + t1 = t0 === void 0 ? {} : t0; + $[0] = t0; + $[1] = t1; + } else { + t1 = $[1]; + } + const { + editorTheme: t2, + keyMap: t3, + onEdit, + readOnly: t4 + } = t1; + const editorTheme = t2 === void 0 ? DEFAULT_EDITOR_THEME : t2; + const keyMap = t3 === void 0 ? DEFAULT_KEY_MAP : t3; + const readOnly = t4 === void 0 ? false : t4; + const t5 = caller || _useHeaderEditor; + let t6; + if ($[2] !== t5) { + t6 = { + nonNull: true, + caller: t5 + }; + $[2] = t5; + $[3] = t6; + } else { + t6 = $[3]; + } const { initialHeaders, headerEditor, setHeaderEditor, shouldPersistHeaders - } = useEditorContext({ - nonNull: true, - caller: caller || useHeaderEditor - }); + } = useEditorContext(t6); const executionContext = useExecutionContext(); - const merge = useMergeQuery({ - caller: caller || useHeaderEditor - }); - const prettify = usePrettifyEditors({ - caller: caller || useHeaderEditor - }); - const ref = React.useRef(null); - React.useEffect(() => { - let isActive = true; - void importCodeMirror([ - // @ts-expect-error - Promise.resolve().then(() => __webpack_require__(/*! ./javascript.cjs.js */ "../../graphiql-react/dist/javascript.cjs.js")).then(n => n.javascript)]).then(CodeMirror => { - if (!isActive) { - return; - } - const container = ref.current; - if (!container) { - return; - } - const newEditor = CodeMirror(container, { - value: initialHeaders, - lineNumbers: true, - tabSize: 2, - mode: { - name: "javascript", - json: true - }, - theme: editorTheme, - autoCloseBrackets: true, - matchBrackets: true, - showCursorWhenSelecting: true, - readOnly: readOnly ? "nocursor" : false, - foldGutter: true, - gutters: ["CodeMirror-linenumbers", "CodeMirror-foldgutter"], - extraKeys: commonKeys - }); - newEditor.addKeyMap({ - "Cmd-Space"() { - newEditor.showHint({ - completeSingle: false, - container - }); - }, - "Ctrl-Space"() { - newEditor.showHint({ - completeSingle: false, - container - }); - }, - "Alt-Space"() { - newEditor.showHint({ - completeSingle: false, - container - }); - }, - "Shift-Space"() { - newEditor.showHint({ - completeSingle: false, - container - }); - } - }); - newEditor.on("keyup", (editorInstance, event) => { - const { - code, - key, - shiftKey - } = event; - const isLetter = code.startsWith("Key"); - const isNumber = !shiftKey && code.startsWith("Digit"); - if (isLetter || isNumber || key === "_" || key === '"') { - editorInstance.execCommand("autocomplete"); - } - }); - setHeaderEditor(newEditor); - }); - return () => { - isActive = false; + const t7 = caller || _useHeaderEditor; + let t8; + if ($[4] !== t7) { + t8 = { + caller: t7 }; - }, [editorTheme, initialHeaders, readOnly, setHeaderEditor]); + $[4] = t7; + $[5] = t8; + } else { + t8 = $[5]; + } + const merge = useMergeQuery(t8); + const t9 = caller || _useHeaderEditor; + let t10; + if ($[6] !== t9) { + t10 = { + caller: t9 + }; + $[6] = t9; + $[7] = t10; + } else { + t10 = $[7]; + } + const prettify = usePrettifyEditors(t10); + const ref = React.useRef(null); + let t11; + let t12; + if ($[8] !== editorTheme || $[9] !== initialHeaders || $[10] !== readOnly || $[11] !== setHeaderEditor) { + t11 = () => { + let isActive; + isActive = true; + importCodeMirrorImports$3().then(CodeMirror => { + if (!isActive) { + return; + } + const container = ref.current; + if (!container) { + return; + } + const newEditor = CodeMirror(container, { + value: initialHeaders, + lineNumbers: true, + tabSize: 2, + mode: { + name: "javascript", + json: true + }, + theme: editorTheme, + autoCloseBrackets: true, + matchBrackets: true, + showCursorWhenSelecting: true, + readOnly: readOnly ? "nocursor" : false, + foldGutter: true, + gutters: ["CodeMirror-linenumbers", "CodeMirror-foldgutter"], + extraKeys: commonKeys + }); + newEditor.addKeyMap({ + "Cmd-Space"() { + newEditor.showHint({ + completeSingle: false, + container + }); + }, + "Ctrl-Space"() { + newEditor.showHint({ + completeSingle: false, + container + }); + }, + "Alt-Space"() { + newEditor.showHint({ + completeSingle: false, + container + }); + }, + "Shift-Space"() { + newEditor.showHint({ + completeSingle: false, + container + }); + } + }); + newEditor.on("keyup", _temp$2); + setHeaderEditor(newEditor); + }); + return () => { + isActive = false; + }; + }; + t12 = [editorTheme, initialHeaders, readOnly, setHeaderEditor]; + $[8] = editorTheme; + $[9] = initialHeaders; + $[10] = readOnly; + $[11] = setHeaderEditor; + $[12] = t11; + $[13] = t12; + } else { + t11 = $[12]; + t12 = $[13]; + } + React.useEffect(t11, t12); useSynchronizeOption(headerEditor, "keyMap", keyMap); - useChangeHandler(headerEditor, onEdit, shouldPersistHeaders ? STORAGE_KEY$3 : null, "headers", useHeaderEditor); - useKeyMap(headerEditor, ["Cmd-Enter", "Ctrl-Enter"], executionContext == null ? void 0 : executionContext.run); - useKeyMap(headerEditor, ["Shift-Ctrl-P"], prettify); - useKeyMap(headerEditor, ["Shift-Ctrl-M"], merge); + useChangeHandler(headerEditor, onEdit, shouldPersistHeaders ? STORAGE_KEY$3 : null, "headers", _useHeaderEditor); + let t13; + if ($[14] === Symbol.for("react.memo_cache_sentinel")) { + t13 = ["Cmd-Enter", "Ctrl-Enter"]; + $[14] = t13; + } else { + t13 = $[14]; + } + useKeyMap(headerEditor, t13, executionContext == null ? void 0 : executionContext.run); + let t14; + if ($[15] === Symbol.for("react.memo_cache_sentinel")) { + t14 = ["Shift-Ctrl-P"]; + $[15] = t14; + } else { + t14 = $[15]; + } + useKeyMap(headerEditor, t14, prettify); + let t15; + if ($[16] === Symbol.for("react.memo_cache_sentinel")) { + t15 = ["Shift-Ctrl-M"]; + $[16] = t15; + } else { + t15 = $[16]; + } + useKeyMap(headerEditor, t15, merge); return ref; } +function _temp$2(editorInstance, event) { + const { + code, + key, + shiftKey + } = event; + const isLetter = code.startsWith("Key"); + const isNumber = !shiftKey && code.startsWith("Digit"); + if (isLetter || isNumber || key === "_" || key === '"') { + editorInstance.execCommand("autocomplete"); + } +} const STORAGE_KEY$3 = "headers"; const invalidCharacters = Array.from({ length: 11 @@ -71708,20 +80662,79 @@ const sanitizeRegex = new RegExp("[" + invalidCharacters.join("") + "]", "g"); function normalizeWhitespace(line) { return line.replace(sanitizeRegex, " "); } -function useQueryEditor({ - editorTheme = DEFAULT_EDITOR_THEME, - keyMap = DEFAULT_KEY_MAP, - onClickReference, - onCopyQuery, - onEdit, - readOnly = false -} = {}, caller) { +function importCodeMirrorImports$2() { + return importCodeMirror([Promise.resolve().then(() => _interopRequireWildcard(__webpack_require__(/*! codemirror/addon/comment/comment.js */ "../../../node_modules/codemirror/addon/comment/comment.js"))), Promise.resolve().then(() => _interopRequireWildcard(__webpack_require__(/*! codemirror/addon/search/search.js */ "../../../node_modules/codemirror/addon/search/search.js"))), Promise.resolve().then(() => _interopRequireWildcard(__webpack_require__(/*! codemirror-graphql/esm/hint.js */ "../../codemirror-graphql/esm/hint.js"))), Promise.resolve().then(() => _interopRequireWildcard(__webpack_require__(/*! codemirror-graphql/esm/lint.js */ "../../codemirror-graphql/esm/lint.js"))), Promise.resolve().then(() => _interopRequireWildcard(__webpack_require__(/*! codemirror-graphql/esm/info.js */ "../../codemirror-graphql/esm/info.js"))), Promise.resolve().then(() => _interopRequireWildcard(__webpack_require__(/*! codemirror-graphql/esm/jump.js */ "../../codemirror-graphql/esm/jump.js"))), Promise.resolve().then(() => _interopRequireWildcard(__webpack_require__(/*! codemirror-graphql/esm/mode.js */ "../../codemirror-graphql/esm/mode.js")))]); +} +const _useQueryEditor = useQueryEditor; +function updateVariableEditor(variableEditor, operationFacts) { + variableEditor.state.lint.linterOptions.variableToType = operationFacts == null ? void 0 : operationFacts.variableToType; + variableEditor.options.lint.variableToType = operationFacts == null ? void 0 : operationFacts.variableToType; + variableEditor.options.hintOptions.variableToType = operationFacts == null ? void 0 : operationFacts.variableToType; +} +function updateEditorSchema(editor, schema) { + editor.state.lint.linterOptions.schema = schema; + editor.options.lint.schema = schema; + editor.options.hintOptions.schema = schema; + editor.options.info.schema = schema; + editor.options.jump.schema = schema; +} +function updateEditorValidationRules(editor, validationRules) { + editor.state.lint.linterOptions.validationRules = validationRules; + editor.options.lint.validationRules = validationRules; +} +function updateEditorExternalFragments(editor, externalFragmentList) { + editor.state.lint.linterOptions.externalFragments = externalFragmentList; + editor.options.lint.externalFragments = externalFragmentList; + editor.options.hintOptions.externalFragments = externalFragmentList; +} +function useQueryEditor(t0, caller) { + const $ = reactCompilerRuntime.c(41); + let t1; + if ($[0] !== t0) { + t1 = t0 === void 0 ? {} : t0; + $[0] = t0; + $[1] = t1; + } else { + t1 = $[1]; + } + const { + editorTheme: t2, + keyMap: t3, + onClickReference, + onCopyQuery, + onEdit, + readOnly: t4 + } = t1; + const editorTheme = t2 === void 0 ? DEFAULT_EDITOR_THEME : t2; + const keyMap = t3 === void 0 ? DEFAULT_KEY_MAP : t3; + const readOnly = t4 === void 0 ? false : t4; + const t5 = caller || _useQueryEditor; + let t6; + if ($[2] !== t5) { + t6 = { + nonNull: true, + caller: t5 + }; + $[2] = t5; + $[3] = t6; + } else { + t6 = $[3]; + } const { schema - } = useSchemaContext({ - nonNull: true, - caller: caller || useQueryEditor - }); + } = useSchemaContext(t6); + const t7 = caller || _useQueryEditor; + let t8; + if ($[4] !== t7) { + t8 = { + nonNull: true, + caller: t7 + }; + $[4] = t7; + $[5] = t8; + } else { + t8 = $[5]; + } const { externalFragments, initialQuery, @@ -71731,321 +80744,484 @@ function useQueryEditor({ validationRules, variableEditor, updateActiveTabValues - } = useEditorContext({ - nonNull: true, - caller: caller || useQueryEditor - }); + } = useEditorContext(t8); const executionContext = useExecutionContext(); const storage = useStorageContext(); const explorer = useExplorerContext(); const plugin = usePluginContext(); - const copy = useCopyQuery({ - caller: caller || useQueryEditor, - onCopyQuery - }); - const merge = useMergeQuery({ - caller: caller || useQueryEditor - }); - const prettify = usePrettifyEditors({ - caller: caller || useQueryEditor - }); + const t9 = caller || _useQueryEditor; + let t10; + if ($[6] !== onCopyQuery || $[7] !== t9) { + t10 = { + caller: t9, + onCopyQuery + }; + $[6] = onCopyQuery; + $[7] = t9; + $[8] = t10; + } else { + t10 = $[8]; + } + const copy = useCopyQuery(t10); + const t11 = caller || _useQueryEditor; + let t12; + if ($[9] !== t11) { + t12 = { + caller: t11 + }; + $[9] = t11; + $[10] = t12; + } else { + t12 = $[10]; + } + const merge = useMergeQuery(t12); + const t13 = caller || _useQueryEditor; + let t14; + if ($[11] !== t13) { + t14 = { + caller: t13 + }; + $[11] = t13; + $[12] = t14; + } else { + t14 = $[12]; + } + const prettify = usePrettifyEditors(t14); const ref = React.useRef(null); const codeMirrorRef = React.useRef(); - const onClickReferenceRef = React.useRef(() => {}); - React.useEffect(() => { - onClickReferenceRef.current = reference => { - if (!explorer || !plugin) { - return; - } - plugin.setVisiblePlugin(DOC_EXPLORER_PLUGIN); - switch (reference.kind) { - case "Type": - { - explorer.push({ - name: reference.type.name, - def: reference.type - }); - break; - } - case "Field": - { - explorer.push({ - name: reference.field.name, - def: reference.field - }); - break; - } - case "Argument": - { - if (reference.field) { - explorer.push({ - name: reference.field.name, - def: reference.field - }); - } - break; - } - case "EnumValue": - { - if (reference.type) { + const onClickReferenceRef = React.useRef(_temp$1); + let t15; + let t16; + if ($[13] !== explorer || $[14] !== onClickReference || $[15] !== plugin) { + t15 = () => { + onClickReferenceRef.current = reference => { + if (!explorer || !plugin) { + return; + } + plugin.setVisiblePlugin(DOC_EXPLORER_PLUGIN); + bb47: switch (reference.kind) { + case "Type": + { explorer.push({ name: reference.type.name, def: reference.type }); + break bb47; } - break; - } - } - onClickReference == null ? void 0 : onClickReference(reference); + case "Field": + { + explorer.push({ + name: reference.field.name, + def: reference.field + }); + break bb47; + } + case "Argument": + { + if (reference.field) { + explorer.push({ + name: reference.field.name, + def: reference.field + }); + } + break bb47; + } + case "EnumValue": + { + if (reference.type) { + explorer.push({ + name: reference.type.name, + def: reference.type + }); + } + } + } + onClickReference == null ? void 0 : onClickReference(reference); + }; }; - }, [explorer, onClickReference, plugin]); - React.useEffect(() => { - let isActive = true; - void importCodeMirror([Promise.resolve().then(() => __webpack_require__(/*! ./comment.cjs.js */ "../../graphiql-react/dist/comment.cjs.js")).then(n => n.comment), Promise.resolve().then(() => __webpack_require__(/*! ./search.cjs.js */ "../../graphiql-react/dist/search.cjs.js")).then(n => n.search), Promise.resolve().then(() => __webpack_require__(/*! ./hint.cjs.js */ "../../graphiql-react/dist/hint.cjs.js")), Promise.resolve().then(() => __webpack_require__(/*! ./lint.cjs2.js */ "../../graphiql-react/dist/lint.cjs2.js")), Promise.resolve().then(() => __webpack_require__(/*! ./info.cjs.js */ "../../graphiql-react/dist/info.cjs.js")), Promise.resolve().then(() => __webpack_require__(/*! ./jump.cjs.js */ "../../graphiql-react/dist/jump.cjs.js")), Promise.resolve().then(() => __webpack_require__(/*! ./mode.cjs.js */ "../../graphiql-react/dist/mode.cjs.js"))]).then(CodeMirror => { - if (!isActive) { - return; - } - codeMirrorRef.current = CodeMirror; - const container = ref.current; - if (!container) { - return; - } - const newEditor = CodeMirror(container, { - value: initialQuery, - lineNumbers: true, - tabSize: 2, - foldGutter: true, - mode: "graphql", - theme: editorTheme, - autoCloseBrackets: true, - matchBrackets: true, - showCursorWhenSelecting: true, - readOnly: readOnly ? "nocursor" : false, - lint: { - // @ts-expect-error - schema: void 0, - validationRules: null, - // linting accepts string or FragmentDefinitionNode[] - externalFragments: void 0 - }, - hintOptions: { - // @ts-expect-error - schema: void 0, - closeOnUnfocus: false, - completeSingle: false, - container, - externalFragments: void 0, - autocompleteOptions: { - // for the query editor, restrict to executable type definitions - mode: graphqlLanguageService.GraphQLDocumentMode.EXECUTABLE - } - }, - info: { - schema: void 0, - renderDescription: text => markdown.render(text), - onClick(reference) { - onClickReferenceRef.current(reference); - } - }, - jump: { - schema: void 0, - onClick(reference) { - onClickReferenceRef.current(reference); - } - }, - gutters: ["CodeMirror-linenumbers", "CodeMirror-foldgutter"], - extraKeys: { - ...commonKeys, - "Cmd-S"() {}, - "Ctrl-S"() {} + t16 = [explorer, onClickReference, plugin]; + $[13] = explorer; + $[14] = onClickReference; + $[15] = plugin; + $[16] = t15; + $[17] = t16; + } else { + t15 = $[16]; + t16 = $[17]; + } + React.useEffect(t15, t16); + let t17; + let t18; + if ($[18] !== editorTheme || $[19] !== initialQuery || $[20] !== readOnly || $[21] !== setQueryEditor) { + t17 = () => { + let isActive; + isActive = true; + importCodeMirrorImports$2().then(CodeMirror => { + if (!isActive) { + return; } - }); - newEditor.addKeyMap({ - "Cmd-Space"() { - newEditor.showHint({ - completeSingle: true, - container - }); - }, - "Ctrl-Space"() { - newEditor.showHint({ - completeSingle: true, - container - }); - }, - "Alt-Space"() { - newEditor.showHint({ - completeSingle: true, - container - }); - }, - "Shift-Space"() { - newEditor.showHint({ - completeSingle: true, - container - }); - }, - "Shift-Alt-Space"() { - newEditor.showHint({ - completeSingle: true, - container - }); + codeMirrorRef.current = CodeMirror; + const container = ref.current; + if (!container) { + return; } - }); - newEditor.on("keyup", (editorInstance, event) => { - if (AUTO_COMPLETE_AFTER_KEY.test(event.key)) { - editorInstance.execCommand("autocomplete"); - } - }); - let showingHints = false; - newEditor.on("startCompletion", () => { - showingHints = true; - }); - newEditor.on("endCompletion", () => { + const newEditor = CodeMirror(container, { + value: initialQuery, + lineNumbers: true, + tabSize: 2, + foldGutter: true, + mode: "graphql", + theme: editorTheme, + autoCloseBrackets: true, + matchBrackets: true, + showCursorWhenSelecting: true, + readOnly: readOnly ? "nocursor" : false, + lint: { + schema: void 0, + validationRules: null, + externalFragments: void 0 + }, + hintOptions: { + schema: void 0, + closeOnUnfocus: false, + completeSingle: false, + container, + externalFragments: void 0, + autocompleteOptions: { + mode: graphqlLanguageService.GraphQLDocumentMode.EXECUTABLE + } + }, + info: { + schema: void 0, + renderDescription: _temp2, + onClick(reference_0) { + onClickReferenceRef.current(reference_0); + } + }, + jump: { + schema: void 0, + onClick(reference_1) { + onClickReferenceRef.current(reference_1); + } + }, + gutters: ["CodeMirror-linenumbers", "CodeMirror-foldgutter"], + extraKeys: { + ...commonKeys, + "Cmd-S"() {}, + "Ctrl-S"() {} + } + }); + newEditor.addKeyMap({ + "Cmd-Space"() { + newEditor.showHint({ + completeSingle: true, + container + }); + }, + "Ctrl-Space"() { + newEditor.showHint({ + completeSingle: true, + container + }); + }, + "Alt-Space"() { + newEditor.showHint({ + completeSingle: true, + container + }); + }, + "Shift-Space"() { + newEditor.showHint({ + completeSingle: true, + container + }); + }, + "Shift-Alt-Space"() { + newEditor.showHint({ + completeSingle: true, + container + }); + } + }); + newEditor.on("keyup", _temp3); + let showingHints; showingHints = false; + newEditor.on("startCompletion", () => { + showingHints = true; + }); + newEditor.on("endCompletion", () => { + showingHints = false; + }); + newEditor.on("keydown", (editorInstance_0, event_0) => { + if (event_0.key === "Escape" && showingHints) { + event_0.stopPropagation(); + } + }); + newEditor.on("beforeChange", _temp4); + newEditor.documentAST = null; + newEditor.operationName = null; + newEditor.operations = null; + newEditor.variableToType = null; + setQueryEditor(newEditor); }); - newEditor.on("keydown", (editorInstance, event) => { - if (event.key === "Escape" && showingHints) { - event.stopPropagation(); - } - }); - newEditor.on("beforeChange", (editorInstance, change) => { - var _a; - if (change.origin === "paste") { - const text = change.text.map(normalizeWhitespace); - (_a = change.update) == null ? void 0 : _a.call(change, change.from, change.to, text); - } - }); - newEditor.documentAST = null; - newEditor.operationName = null; - newEditor.operations = null; - newEditor.variableToType = null; - setQueryEditor(newEditor); - }); - return () => { - isActive = false; + return () => { + isActive = false; + }; }; - }, [editorTheme, initialQuery, readOnly, setQueryEditor]); + t18 = [editorTheme, initialQuery, readOnly, setQueryEditor]; + $[18] = editorTheme; + $[19] = initialQuery; + $[20] = readOnly; + $[21] = setQueryEditor; + $[22] = t17; + $[23] = t18; + } else { + t17 = $[22]; + t18 = $[23]; + } + React.useEffect(t17, t18); useSynchronizeOption(queryEditor, "keyMap", keyMap); - React.useEffect(() => { - if (!queryEditor) { - return; - } - function getAndUpdateOperationFacts(editorInstance) { - var _editorInstance$opera, _editorInstance$opera2, _ref3, _ref4; - var _a; - const operationFacts = graphqlLanguageService.getOperationFacts(schema, editorInstance.getValue()); - const operationName = toolkit.getSelectedOperationName((_editorInstance$opera = editorInstance.operations) !== null && _editorInstance$opera !== void 0 ? _editorInstance$opera : void 0, (_editorInstance$opera2 = editorInstance.operationName) !== null && _editorInstance$opera2 !== void 0 ? _editorInstance$opera2 : void 0, operationFacts == null ? void 0 : operationFacts.operations); - editorInstance.documentAST = (_ref3 = operationFacts == null ? void 0 : operationFacts.documentAST) !== null && _ref3 !== void 0 ? _ref3 : null; - editorInstance.operationName = operationName !== null && operationName !== void 0 ? operationName : null; - editorInstance.operations = (_ref4 = operationFacts == null ? void 0 : operationFacts.operations) !== null && _ref4 !== void 0 ? _ref4 : null; - if (variableEditor) { - variableEditor.state.lint.linterOptions.variableToType = operationFacts == null ? void 0 : operationFacts.variableToType; - variableEditor.options.lint.variableToType = operationFacts == null ? void 0 : operationFacts.variableToType; - variableEditor.options.hintOptions.variableToType = operationFacts == null ? void 0 : operationFacts.variableToType; - (_a = codeMirrorRef.current) == null ? void 0 : _a.signal(variableEditor, "change", variableEditor); + let t19; + let t20; + if ($[24] !== onEdit || $[25] !== queryEditor || $[26] !== schema || $[27] !== setOperationName || $[28] !== storage || $[29] !== updateActiveTabValues || $[30] !== variableEditor) { + t19 = () => { + if (!queryEditor) { + return; } - return operationFacts ? { - ...operationFacts, - operationName - } : null; - } - const handleChange = debounce(100, editorInstance => { - var _ref5; - const query = editorInstance.getValue(); - storage == null ? void 0 : storage.set(STORAGE_KEY_QUERY, query); - const currentOperationName = editorInstance.operationName; - const operationFacts = getAndUpdateOperationFacts(editorInstance); - if ((operationFacts == null ? void 0 : operationFacts.operationName) !== void 0) { - storage == null ? void 0 : storage.set(STORAGE_KEY_OPERATION_NAME, operationFacts.operationName); - } - onEdit == null ? void 0 : onEdit(query, operationFacts == null ? void 0 : operationFacts.documentAST); - if ((operationFacts == null ? void 0 : operationFacts.operationName) && currentOperationName !== operationFacts.operationName) { - setOperationName(operationFacts.operationName); - } - updateActiveTabValues({ - query, - operationName: (_ref5 = operationFacts == null ? void 0 : operationFacts.operationName) !== null && _ref5 !== void 0 ? _ref5 : null + const getAndUpdateOperationFacts = function getAndUpdateOperationFacts2(editorInstance_2) { + var _editorInstance_2$ope, _editorInstance_2$ope2, _ref3, _ref4; + var _a; + const operationFacts = graphqlLanguageService.getOperationFacts(schema, editorInstance_2.getValue()); + const operationName = toolkit.getSelectedOperationName((_editorInstance_2$ope = editorInstance_2.operations) !== null && _editorInstance_2$ope !== void 0 ? _editorInstance_2$ope : void 0, (_editorInstance_2$ope2 = editorInstance_2.operationName) !== null && _editorInstance_2$ope2 !== void 0 ? _editorInstance_2$ope2 : void 0, operationFacts == null ? void 0 : operationFacts.operations); + editorInstance_2.documentAST = (_ref3 = operationFacts == null ? void 0 : operationFacts.documentAST) !== null && _ref3 !== void 0 ? _ref3 : null; + editorInstance_2.operationName = operationName !== null && operationName !== void 0 ? operationName : null; + editorInstance_2.operations = (_ref4 = operationFacts == null ? void 0 : operationFacts.operations) !== null && _ref4 !== void 0 ? _ref4 : null; + if (variableEditor) { + updateVariableEditor(variableEditor, operationFacts); + (_a = codeMirrorRef.current) == null ? void 0 : _a.signal(variableEditor, "change", variableEditor); + } + return operationFacts ? { + ...operationFacts, + operationName + } : null; + }; + const handleChange = debounce(100, editorInstance_3 => { + var _ref5; + const query = editorInstance_3.getValue(); + storage == null ? void 0 : storage.set(STORAGE_KEY_QUERY, query); + const currentOperationName = editorInstance_3.operationName; + const operationFacts_0 = getAndUpdateOperationFacts(editorInstance_3); + if ((operationFacts_0 == null ? void 0 : operationFacts_0.operationName) !== void 0) { + storage == null ? void 0 : storage.set(STORAGE_KEY_OPERATION_NAME, operationFacts_0.operationName); + } + onEdit == null ? void 0 : onEdit(query, operationFacts_0 == null ? void 0 : operationFacts_0.documentAST); + if ((operationFacts_0 == null ? void 0 : operationFacts_0.operationName) && currentOperationName !== operationFacts_0.operationName) { + setOperationName(operationFacts_0.operationName); + } + updateActiveTabValues({ + query, + operationName: (_ref5 = operationFacts_0 == null ? void 0 : operationFacts_0.operationName) !== null && _ref5 !== void 0 ? _ref5 : null + }); }); - }); - getAndUpdateOperationFacts(queryEditor); - queryEditor.on("change", handleChange); - return () => queryEditor.off("change", handleChange); - }, [onEdit, queryEditor, schema, setOperationName, storage, variableEditor, updateActiveTabValues]); + getAndUpdateOperationFacts(queryEditor); + queryEditor.on("change", handleChange); + return () => queryEditor.off("change", handleChange); + }; + t20 = [onEdit, queryEditor, schema, setOperationName, storage, variableEditor, updateActiveTabValues]; + $[24] = onEdit; + $[25] = queryEditor; + $[26] = schema; + $[27] = setOperationName; + $[28] = storage; + $[29] = updateActiveTabValues; + $[30] = variableEditor; + $[31] = t19; + $[32] = t20; + } else { + t19 = $[31]; + t20 = $[32]; + } + React.useEffect(t19, t20); useSynchronizeSchema(queryEditor, schema !== null && schema !== void 0 ? schema : null, codeMirrorRef); useSynchronizeValidationRules(queryEditor, validationRules !== null && validationRules !== void 0 ? validationRules : null, codeMirrorRef); useSynchronizeExternalFragments(queryEditor, externalFragments, codeMirrorRef); - useCompletion(queryEditor, onClickReference || null, useQueryEditor); + useCompletion(queryEditor, onClickReference || null, _useQueryEditor); const run = executionContext == null ? void 0 : executionContext.run; - const runAtCursor = React.useCallback(() => { - var _a; - if (!run || !queryEditor || !queryEditor.operations || !queryEditor.hasFocus()) { - run == null ? void 0 : run(); - return; - } - const cursorIndex = queryEditor.indexFromPos(queryEditor.getCursor()); - let operationName; - for (const operation of queryEditor.operations) { - if (operation.loc && operation.loc.start <= cursorIndex && operation.loc.end >= cursorIndex) { - operationName = (_a = operation.name) == null ? void 0 : _a.value; + let t21; + if ($[33] !== queryEditor || $[34] !== run || $[35] !== setOperationName) { + t21 = () => { + var _a; + if (!run || !queryEditor || !queryEditor.operations || !queryEditor.hasFocus()) { + run == null ? void 0 : run(); + return; } - } - if (operationName && operationName !== queryEditor.operationName) { - setOperationName(operationName); - } - run(); - }, [queryEditor, run, setOperationName]); - useKeyMap(queryEditor, ["Cmd-Enter", "Ctrl-Enter"], runAtCursor); - useKeyMap(queryEditor, ["Shift-Ctrl-C"], copy); - useKeyMap(queryEditor, ["Shift-Ctrl-P", - // Shift-Ctrl-P is hard coded in Firefox for private browsing so adding an alternative to prettify - "Shift-Ctrl-F"], prettify); - useKeyMap(queryEditor, ["Shift-Ctrl-M"], merge); + const cursorIndex = queryEditor.indexFromPos(queryEditor.getCursor()); + let operationName_0; + for (const operation of queryEditor.operations) { + if (operation.loc && operation.loc.start <= cursorIndex && operation.loc.end >= cursorIndex) { + operationName_0 = (_a = operation.name) == null ? void 0 : _a.value; + } + } + if (operationName_0 && operationName_0 !== queryEditor.operationName) { + setOperationName(operationName_0); + } + run(); + }; + $[33] = queryEditor; + $[34] = run; + $[35] = setOperationName; + $[36] = t21; + } else { + t21 = $[36]; + } + const runAtCursor = t21; + let t22; + if ($[37] === Symbol.for("react.memo_cache_sentinel")) { + t22 = ["Cmd-Enter", "Ctrl-Enter"]; + $[37] = t22; + } else { + t22 = $[37]; + } + useKeyMap(queryEditor, t22, runAtCursor); + let t23; + if ($[38] === Symbol.for("react.memo_cache_sentinel")) { + t23 = ["Shift-Ctrl-C"]; + $[38] = t23; + } else { + t23 = $[38]; + } + useKeyMap(queryEditor, t23, copy); + let t24; + if ($[39] === Symbol.for("react.memo_cache_sentinel")) { + t24 = ["Shift-Ctrl-P", "Shift-Ctrl-F"]; + $[39] = t24; + } else { + t24 = $[39]; + } + useKeyMap(queryEditor, t24, prettify); + let t25; + if ($[40] === Symbol.for("react.memo_cache_sentinel")) { + t25 = ["Shift-Ctrl-M"]; + $[40] = t25; + } else { + t25 = $[40]; + } + useKeyMap(queryEditor, t25, merge); return ref; } +function _temp4(editorInstance_1, change) { + var _a; + if (change.origin === "paste") { + const text_0 = change.text.map(normalizeWhitespace); + (_a = change.update) == null ? void 0 : _a.call(change, change.from, change.to, text_0); + } +} +function _temp3(editorInstance, event) { + if (AUTO_COMPLETE_AFTER_KEY.test(event.key)) { + editorInstance.execCommand("autocomplete"); + } +} +function _temp2(text) { + return markdown.render(text); +} +function _temp$1() {} function useSynchronizeSchema(editor, schema, codeMirrorRef) { - React.useEffect(() => { - if (!editor) { - return; - } - const didChange = editor.options.lint.schema !== schema; - editor.state.lint.linterOptions.schema = schema; - editor.options.lint.schema = schema; - editor.options.hintOptions.schema = schema; - editor.options.info.schema = schema; - editor.options.jump.schema = schema; - if (didChange && codeMirrorRef.current) { - codeMirrorRef.current.signal(editor, "change", editor); - } - }, [editor, schema, codeMirrorRef]); + const $ = reactCompilerRuntime.c(5); + let t0; + let t1; + if ($[0] !== codeMirrorRef || $[1] !== editor || $[2] !== schema) { + t0 = () => { + if (!editor) { + return; + } + const didChange = editor.options.lint.schema !== schema; + updateEditorSchema(editor, schema); + if (didChange && codeMirrorRef.current) { + codeMirrorRef.current.signal(editor, "change", editor); + } + }; + t1 = [editor, schema, codeMirrorRef]; + $[0] = codeMirrorRef; + $[1] = editor; + $[2] = schema; + $[3] = t0; + $[4] = t1; + } else { + t0 = $[3]; + t1 = $[4]; + } + React.useEffect(t0, t1); } function useSynchronizeValidationRules(editor, validationRules, codeMirrorRef) { - React.useEffect(() => { - if (!editor) { - return; - } - const didChange = editor.options.lint.validationRules !== validationRules; - editor.state.lint.linterOptions.validationRules = validationRules; - editor.options.lint.validationRules = validationRules; - if (didChange && codeMirrorRef.current) { - codeMirrorRef.current.signal(editor, "change", editor); - } - }, [editor, validationRules, codeMirrorRef]); + const $ = reactCompilerRuntime.c(5); + let t0; + let t1; + if ($[0] !== codeMirrorRef || $[1] !== editor || $[2] !== validationRules) { + t0 = () => { + if (!editor) { + return; + } + const didChange = editor.options.lint.validationRules !== validationRules; + updateEditorValidationRules(editor, validationRules); + if (didChange && codeMirrorRef.current) { + codeMirrorRef.current.signal(editor, "change", editor); + } + }; + t1 = [editor, validationRules, codeMirrorRef]; + $[0] = codeMirrorRef; + $[1] = editor; + $[2] = validationRules; + $[3] = t0; + $[4] = t1; + } else { + t0 = $[3]; + t1 = $[4]; + } + React.useEffect(t0, t1); } function useSynchronizeExternalFragments(editor, externalFragments, codeMirrorRef) { - const externalFragmentList = React.useMemo(() => [...externalFragments.values()], [externalFragments]); - React.useEffect(() => { - if (!editor) { - return; - } - const didChange = editor.options.lint.externalFragments !== externalFragmentList; - editor.state.lint.linterOptions.externalFragments = externalFragmentList; - editor.options.lint.externalFragments = externalFragmentList; - editor.options.hintOptions.externalFragments = externalFragmentList; - if (didChange && codeMirrorRef.current) { - codeMirrorRef.current.signal(editor, "change", editor); - } - }, [editor, externalFragmentList, codeMirrorRef]); + const $ = reactCompilerRuntime.c(9); + let t0; + if ($[0] !== externalFragments) { + t0 = externalFragments.values(); + $[0] = externalFragments; + $[1] = t0; + } else { + t0 = $[1]; + } + let t1; + if ($[2] !== t0) { + t1 = [...t0]; + $[2] = t0; + $[3] = t1; + } else { + t1 = $[3]; + } + const externalFragmentList = t1; + let t2; + let t3; + if ($[4] !== codeMirrorRef || $[5] !== editor || $[6] !== externalFragmentList) { + t2 = () => { + if (!editor) { + return; + } + const didChange = editor.options.lint.externalFragments !== externalFragmentList; + updateEditorExternalFragments(editor, externalFragmentList); + if (didChange && codeMirrorRef.current) { + codeMirrorRef.current.signal(editor, "change", editor); + } + }; + t3 = [editor, externalFragmentList, codeMirrorRef]; + $[4] = codeMirrorRef; + $[5] = editor; + $[6] = externalFragmentList; + $[7] = t2; + $[8] = t3; + } else { + t2 = $[7]; + t3 = $[8]; + } + React.useEffect(t2, t3); } const AUTO_COMPLETE_AFTER_KEY = /^[a-zA-Z0-9_@(]$/; const STORAGE_KEY_QUERY = "query"; @@ -72250,325 +81426,606 @@ function clearHeadersFromTabs(storage) { } const DEFAULT_TITLE = ""; const STORAGE_KEY$2 = "tabState"; -function useVariableEditor({ - editorTheme = DEFAULT_EDITOR_THEME, - keyMap = DEFAULT_KEY_MAP, - onClickReference, - onEdit, - readOnly = false -} = {}, caller) { +function importCodeMirrorImports$1() { + return importCodeMirror([Promise.resolve().then(() => _interopRequireWildcard(__webpack_require__(/*! codemirror-graphql/esm/variables/hint.js */ "../../codemirror-graphql/esm/variables/hint.js"))), Promise.resolve().then(() => _interopRequireWildcard(__webpack_require__(/*! codemirror-graphql/esm/variables/lint.js */ "../../codemirror-graphql/esm/variables/lint.js"))), Promise.resolve().then(() => _interopRequireWildcard(__webpack_require__(/*! codemirror-graphql/esm/variables/mode.js */ "../../codemirror-graphql/esm/variables/mode.js")))]); +} +const _useVariableEditor = useVariableEditor; +function useVariableEditor(t0, caller) { + const $ = reactCompilerRuntime.c(17); + let t1; + if ($[0] !== t0) { + t1 = t0 === void 0 ? {} : t0; + $[0] = t0; + $[1] = t1; + } else { + t1 = $[1]; + } + const { + editorTheme: t2, + keyMap: t3, + onClickReference, + onEdit, + readOnly: t4 + } = t1; + const editorTheme = t2 === void 0 ? DEFAULT_EDITOR_THEME : t2; + const keyMap = t3 === void 0 ? DEFAULT_KEY_MAP : t3; + const readOnly = t4 === void 0 ? false : t4; + const t5 = caller || _useVariableEditor; + let t6; + if ($[2] !== t5) { + t6 = { + nonNull: true, + caller: t5 + }; + $[2] = t5; + $[3] = t6; + } else { + t6 = $[3]; + } const { initialVariables, variableEditor, setVariableEditor - } = useEditorContext({ - nonNull: true, - caller: caller || useVariableEditor - }); + } = useEditorContext(t6); const executionContext = useExecutionContext(); - const merge = useMergeQuery({ - caller: caller || useVariableEditor - }); - const prettify = usePrettifyEditors({ - caller: caller || useVariableEditor - }); + const t7 = caller || _useVariableEditor; + let t8; + if ($[4] !== t7) { + t8 = { + caller: t7 + }; + $[4] = t7; + $[5] = t8; + } else { + t8 = $[5]; + } + const merge = useMergeQuery(t8); + const t9 = caller || _useVariableEditor; + let t10; + if ($[6] !== t9) { + t10 = { + caller: t9 + }; + $[6] = t9; + $[7] = t10; + } else { + t10 = $[7]; + } + const prettify = usePrettifyEditors(t10); const ref = React.useRef(null); const codeMirrorRef = React.useRef(); - React.useEffect(() => { - let isActive = true; - void importCodeMirror([Promise.resolve().then(() => __webpack_require__(/*! ./hint.cjs2.js */ "../../graphiql-react/dist/hint.cjs2.js")), Promise.resolve().then(() => __webpack_require__(/*! ./lint.cjs3.js */ "../../graphiql-react/dist/lint.cjs3.js")), Promise.resolve().then(() => __webpack_require__(/*! ./mode.cjs2.js */ "../../graphiql-react/dist/mode.cjs2.js"))]).then(CodeMirror => { - if (!isActive) { - return; - } - codeMirrorRef.current = CodeMirror; - const container = ref.current; - if (!container) { - return; - } - const newEditor = CodeMirror(container, { - value: initialVariables, - lineNumbers: true, - tabSize: 2, - mode: "graphql-variables", - theme: editorTheme, - autoCloseBrackets: true, - matchBrackets: true, - showCursorWhenSelecting: true, - readOnly: readOnly ? "nocursor" : false, - foldGutter: true, - lint: { - // @ts-expect-error - variableToType: void 0 - }, - hintOptions: { - closeOnUnfocus: false, - completeSingle: false, - container, - // @ts-expect-error - variableToType: void 0 - }, - gutters: ["CodeMirror-linenumbers", "CodeMirror-foldgutter"], - extraKeys: commonKeys - }); - newEditor.addKeyMap({ - "Cmd-Space"() { - newEditor.showHint({ - completeSingle: false, - container - }); - }, - "Ctrl-Space"() { - newEditor.showHint({ - completeSingle: false, - container - }); - }, - "Alt-Space"() { - newEditor.showHint({ - completeSingle: false, - container - }); - }, - "Shift-Space"() { - newEditor.showHint({ - completeSingle: false, - container - }); + let t11; + let t12; + if ($[8] !== editorTheme || $[9] !== initialVariables || $[10] !== readOnly || $[11] !== setVariableEditor) { + t11 = () => { + let isActive; + isActive = true; + importCodeMirrorImports$1().then(CodeMirror => { + if (!isActive) { + return; } - }); - newEditor.on("keyup", (editorInstance, event) => { - const { - code, - key, - shiftKey - } = event; - const isLetter = code.startsWith("Key"); - const isNumber = !shiftKey && code.startsWith("Digit"); - if (isLetter || isNumber || key === "_" || key === '"') { - editorInstance.execCommand("autocomplete"); + codeMirrorRef.current = CodeMirror; + const container = ref.current; + if (!container) { + return; } + const newEditor = CodeMirror(container, { + value: initialVariables, + lineNumbers: true, + tabSize: 2, + mode: "graphql-variables", + theme: editorTheme, + autoCloseBrackets: true, + matchBrackets: true, + showCursorWhenSelecting: true, + readOnly: readOnly ? "nocursor" : false, + foldGutter: true, + lint: { + variableToType: void 0 + }, + hintOptions: { + closeOnUnfocus: false, + completeSingle: false, + container, + variableToType: void 0 + }, + gutters: ["CodeMirror-linenumbers", "CodeMirror-foldgutter"], + extraKeys: commonKeys + }); + newEditor.addKeyMap({ + "Cmd-Space"() { + newEditor.showHint({ + completeSingle: false, + container + }); + }, + "Ctrl-Space"() { + newEditor.showHint({ + completeSingle: false, + container + }); + }, + "Alt-Space"() { + newEditor.showHint({ + completeSingle: false, + container + }); + }, + "Shift-Space"() { + newEditor.showHint({ + completeSingle: false, + container + }); + } + }); + newEditor.on("keyup", _temp); + setVariableEditor(newEditor); }); - setVariableEditor(newEditor); - }); - return () => { - isActive = false; + return () => { + isActive = false; + }; }; - }, [editorTheme, initialVariables, readOnly, setVariableEditor]); + t12 = [editorTheme, initialVariables, readOnly, setVariableEditor]; + $[8] = editorTheme; + $[9] = initialVariables; + $[10] = readOnly; + $[11] = setVariableEditor; + $[12] = t11; + $[13] = t12; + } else { + t11 = $[12]; + t12 = $[13]; + } + React.useEffect(t11, t12); useSynchronizeOption(variableEditor, "keyMap", keyMap); - useChangeHandler(variableEditor, onEdit, STORAGE_KEY$1, "variables", useVariableEditor); - useCompletion(variableEditor, onClickReference || null, useVariableEditor); - useKeyMap(variableEditor, ["Cmd-Enter", "Ctrl-Enter"], executionContext == null ? void 0 : executionContext.run); - useKeyMap(variableEditor, ["Shift-Ctrl-P"], prettify); - useKeyMap(variableEditor, ["Shift-Ctrl-M"], merge); + useChangeHandler(variableEditor, onEdit, STORAGE_KEY$1, "variables", _useVariableEditor); + useCompletion(variableEditor, onClickReference || null, _useVariableEditor); + let t13; + if ($[14] === Symbol.for("react.memo_cache_sentinel")) { + t13 = ["Cmd-Enter", "Ctrl-Enter"]; + $[14] = t13; + } else { + t13 = $[14]; + } + useKeyMap(variableEditor, t13, executionContext == null ? void 0 : executionContext.run); + let t14; + if ($[15] === Symbol.for("react.memo_cache_sentinel")) { + t14 = ["Shift-Ctrl-P"]; + $[15] = t14; + } else { + t14 = $[15]; + } + useKeyMap(variableEditor, t14, prettify); + let t15; + if ($[16] === Symbol.for("react.memo_cache_sentinel")) { + t15 = ["Shift-Ctrl-M"]; + $[16] = t15; + } else { + t15 = $[16]; + } + useKeyMap(variableEditor, t15, merge); return ref; } +function _temp(editorInstance, event) { + const { + code, + key, + shiftKey + } = event; + const isLetter = code.startsWith("Key"); + const isNumber = !shiftKey && code.startsWith("Digit"); + if (isLetter || isNumber || key === "_" || key === '"') { + editorInstance.execCommand("autocomplete"); + } +} const STORAGE_KEY$1 = "variables"; const EditorContext = createNullableContext("EditorContext"); function EditorContextProvider(props) { + const $ = reactCompilerRuntime.c(89); const storage = useStorageContext(); const [headerEditor, setHeaderEditor] = React.useState(null); const [queryEditor, setQueryEditor] = React.useState(null); const [responseEditor, setResponseEditor] = React.useState(null); const [variableEditor, setVariableEditor] = React.useState(null); - const [shouldPersistHeaders, setShouldPersistHeadersInternal] = React.useState(() => { - const isStored = (storage == null ? void 0 : storage.get(PERSIST_HEADERS_STORAGE_KEY)) !== null; - return props.shouldPersistHeaders !== false && isStored ? (storage == null ? void 0 : storage.get(PERSIST_HEADERS_STORAGE_KEY)) === "true" : Boolean(props.shouldPersistHeaders); - }); + let t0; + if ($[0] !== props.shouldPersistHeaders || $[1] !== storage) { + t0 = () => { + const isStored = (storage == null ? void 0 : storage.get(PERSIST_HEADERS_STORAGE_KEY)) !== null; + return props.shouldPersistHeaders !== false && isStored ? (storage == null ? void 0 : storage.get(PERSIST_HEADERS_STORAGE_KEY)) === "true" : Boolean(props.shouldPersistHeaders); + }; + $[0] = props.shouldPersistHeaders; + $[1] = storage; + $[2] = t0; + } else { + t0 = $[2]; + } + const [shouldPersistHeaders, setShouldPersistHeadersInternal] = React.useState(t0); useSynchronizeValue(headerEditor, props.headers); useSynchronizeValue(queryEditor, props.query); useSynchronizeValue(responseEditor, props.response); useSynchronizeValue(variableEditor, props.variables); - const storeTabs = useStoreTabs({ - storage, - shouldPersistHeaders - }); - const [initialState] = React.useState(() => { - var _ref13, _props$query, _ref14, _props$variables, _ref15, _props$headers, _props$response, _ref16, _ref17; - const query = (_ref13 = (_props$query = props.query) !== null && _props$query !== void 0 ? _props$query : storage == null ? void 0 : storage.get(STORAGE_KEY_QUERY)) !== null && _ref13 !== void 0 ? _ref13 : null; - const variables = (_ref14 = (_props$variables = props.variables) !== null && _props$variables !== void 0 ? _props$variables : storage == null ? void 0 : storage.get(STORAGE_KEY$1)) !== null && _ref14 !== void 0 ? _ref14 : null; - const headers = (_ref15 = (_props$headers = props.headers) !== null && _props$headers !== void 0 ? _props$headers : storage == null ? void 0 : storage.get(STORAGE_KEY$3)) !== null && _ref15 !== void 0 ? _ref15 : null; - const response = (_props$response = props.response) !== null && _props$response !== void 0 ? _props$response : ""; - const tabState2 = getDefaultTabState({ - query, - variables, - headers, - defaultTabs: props.defaultTabs, - defaultQuery: props.defaultQuery || DEFAULT_QUERY, - defaultHeaders: props.defaultHeaders, + let t1; + if ($[3] !== shouldPersistHeaders || $[4] !== storage) { + t1 = { storage, shouldPersistHeaders - }); - storeTabs(tabState2); - return { - query: (_ref16 = query !== null && query !== void 0 ? query : tabState2.activeTabIndex === 0 ? tabState2.tabs[0].query : null) !== null && _ref16 !== void 0 ? _ref16 : "", - variables: variables !== null && variables !== void 0 ? variables : "", - headers: (_ref17 = headers !== null && headers !== void 0 ? headers : props.defaultHeaders) !== null && _ref17 !== void 0 ? _ref17 : "", - response, - tabState: tabState2 }; - }); - const [tabState, setTabState] = React.useState(initialState.tabState); - const setShouldPersistHeaders = React.useCallback(persist => { - if (persist) { - var _ref18; - storage == null ? void 0 : storage.set(STORAGE_KEY$3, (_ref18 = headerEditor == null ? void 0 : headerEditor.getValue()) !== null && _ref18 !== void 0 ? _ref18 : ""); - const serializedTabs = serializeTabState(tabState, true); - storage == null ? void 0 : storage.set(STORAGE_KEY$2, serializedTabs); - } else { - storage == null ? void 0 : storage.set(STORAGE_KEY$3, ""); - clearHeadersFromTabs(storage); - } - setShouldPersistHeadersInternal(persist); - storage == null ? void 0 : storage.set(PERSIST_HEADERS_STORAGE_KEY, persist.toString()); - }, [storage, tabState, headerEditor]); + $[3] = shouldPersistHeaders; + $[4] = storage; + $[5] = t1; + } else { + t1 = $[5]; + } + const storeTabs = useStoreTabs(t1); + let t2; + if ($[6] !== props.defaultHeaders || $[7] !== props.defaultQuery || $[8] !== props.defaultTabs || $[9] !== props.headers || $[10] !== props.query || $[11] !== props.response || $[12] !== props.variables || $[13] !== shouldPersistHeaders || $[14] !== storage || $[15] !== storeTabs) { + t2 = () => { + var _ref13, _props$query, _ref14, _props$variables, _ref15, _props$headers, _props$response, _ref16, _ref17; + const query = (_ref13 = (_props$query = props.query) !== null && _props$query !== void 0 ? _props$query : storage == null ? void 0 : storage.get(STORAGE_KEY_QUERY)) !== null && _ref13 !== void 0 ? _ref13 : null; + const variables = (_ref14 = (_props$variables = props.variables) !== null && _props$variables !== void 0 ? _props$variables : storage == null ? void 0 : storage.get(STORAGE_KEY$1)) !== null && _ref14 !== void 0 ? _ref14 : null; + const headers = (_ref15 = (_props$headers = props.headers) !== null && _props$headers !== void 0 ? _props$headers : storage == null ? void 0 : storage.get(STORAGE_KEY$3)) !== null && _ref15 !== void 0 ? _ref15 : null; + const response = (_props$response = props.response) !== null && _props$response !== void 0 ? _props$response : ""; + const tabState = getDefaultTabState({ + query, + variables, + headers, + defaultTabs: props.defaultTabs, + defaultQuery: props.defaultQuery || DEFAULT_QUERY, + defaultHeaders: props.defaultHeaders, + storage, + shouldPersistHeaders + }); + storeTabs(tabState); + return { + query: (_ref16 = query !== null && query !== void 0 ? query : tabState.activeTabIndex === 0 ? tabState.tabs[0].query : null) !== null && _ref16 !== void 0 ? _ref16 : "", + variables: variables !== null && variables !== void 0 ? variables : "", + headers: (_ref17 = headers !== null && headers !== void 0 ? headers : props.defaultHeaders) !== null && _ref17 !== void 0 ? _ref17 : "", + response, + tabState + }; + }; + $[6] = props.defaultHeaders; + $[7] = props.defaultQuery; + $[8] = props.defaultTabs; + $[9] = props.headers; + $[10] = props.query; + $[11] = props.response; + $[12] = props.variables; + $[13] = shouldPersistHeaders; + $[14] = storage; + $[15] = storeTabs; + $[16] = t2; + } else { + t2 = $[16]; + } + const [initialState] = React.useState(t2); + const [tabState_0, setTabState] = React.useState(initialState.tabState); + let t3; + if ($[17] !== headerEditor || $[18] !== storage || $[19] !== tabState_0) { + t3 = persist => { + if (persist) { + var _ref18; + storage == null ? void 0 : storage.set(STORAGE_KEY$3, (_ref18 = headerEditor == null ? void 0 : headerEditor.getValue()) !== null && _ref18 !== void 0 ? _ref18 : ""); + const serializedTabs = serializeTabState(tabState_0, true); + storage == null ? void 0 : storage.set(STORAGE_KEY$2, serializedTabs); + } else { + storage == null ? void 0 : storage.set(STORAGE_KEY$3, ""); + clearHeadersFromTabs(storage); + } + setShouldPersistHeadersInternal(persist); + storage == null ? void 0 : storage.set(PERSIST_HEADERS_STORAGE_KEY, persist.toString()); + }; + $[17] = headerEditor; + $[18] = storage; + $[19] = tabState_0; + $[20] = t3; + } else { + t3 = $[20]; + } + const setShouldPersistHeaders = t3; const lastShouldPersistHeadersProp = React.useRef(); - React.useEffect(() => { - const propValue = Boolean(props.shouldPersistHeaders); - if ((lastShouldPersistHeadersProp == null ? void 0 : lastShouldPersistHeadersProp.current) !== propValue) { - setShouldPersistHeaders(propValue); - lastShouldPersistHeadersProp.current = propValue; - } - }, [props.shouldPersistHeaders, setShouldPersistHeaders]); - const synchronizeActiveTabValues = useSynchronizeActiveTabValues({ - queryEditor, - variableEditor, - headerEditor, - responseEditor - }); + let t4; + let t5; + if ($[21] !== props.shouldPersistHeaders || $[22] !== setShouldPersistHeaders) { + t4 = () => { + const propValue = Boolean(props.shouldPersistHeaders); + if ((lastShouldPersistHeadersProp == null ? void 0 : lastShouldPersistHeadersProp.current) !== propValue) { + setShouldPersistHeaders(propValue); + lastShouldPersistHeadersProp.current = propValue; + } + }; + t5 = [props.shouldPersistHeaders, setShouldPersistHeaders]; + $[21] = props.shouldPersistHeaders; + $[22] = setShouldPersistHeaders; + $[23] = t4; + $[24] = t5; + } else { + t4 = $[23]; + t5 = $[24]; + } + React.useEffect(t4, t5); + let t6; + if ($[25] !== headerEditor || $[26] !== queryEditor || $[27] !== responseEditor || $[28] !== variableEditor) { + t6 = { + queryEditor, + variableEditor, + headerEditor, + responseEditor + }; + $[25] = headerEditor; + $[26] = queryEditor; + $[27] = responseEditor; + $[28] = variableEditor; + $[29] = t6; + } else { + t6 = $[29]; + } + const synchronizeActiveTabValues = useSynchronizeActiveTabValues(t6); const { onTabChange, defaultHeaders, defaultQuery, children } = props; - const setEditorValues = useSetEditorValues({ - queryEditor, - variableEditor, - headerEditor, - responseEditor, - defaultHeaders - }); - const addTab = React.useCallback(() => { - setTabState(current => { - const updatedValues = synchronizeActiveTabValues(current); - const updated = { - tabs: [...updatedValues.tabs, createTab({ - headers: defaultHeaders, - query: defaultQuery !== null && defaultQuery !== void 0 ? defaultQuery : DEFAULT_QUERY - })], - activeTabIndex: updatedValues.tabs.length - }; - storeTabs(updated); - setEditorValues(updated.tabs[updated.activeTabIndex]); - onTabChange == null ? void 0 : onTabChange(updated); - return updated; - }); - }, [defaultHeaders, defaultQuery, onTabChange, setEditorValues, storeTabs, synchronizeActiveTabValues]); - const changeTab = React.useCallback(index => { - setTabState(current => { - const updated = { - ...current, - activeTabIndex: index - }; - storeTabs(updated); - setEditorValues(updated.tabs[updated.activeTabIndex]); - onTabChange == null ? void 0 : onTabChange(updated); - return updated; - }); - }, [onTabChange, setEditorValues, storeTabs]); - const moveTab = React.useCallback(newOrder => { - setTabState(current => { - const activeTab = current.tabs[current.activeTabIndex]; - const updated = { - tabs: newOrder, - activeTabIndex: newOrder.indexOf(activeTab) - }; - storeTabs(updated); - setEditorValues(updated.tabs[updated.activeTabIndex]); - onTabChange == null ? void 0 : onTabChange(updated); - return updated; - }); - }, [onTabChange, setEditorValues, storeTabs]); - const closeTab = React.useCallback(index => { - setTabState(current => { - const updated = { - tabs: current.tabs.filter((_tab, i) => index !== i), - activeTabIndex: Math.max(current.activeTabIndex - 1, 0) - }; - storeTabs(updated); - setEditorValues(updated.tabs[updated.activeTabIndex]); - onTabChange == null ? void 0 : onTabChange(updated); - return updated; - }); - }, [onTabChange, setEditorValues, storeTabs]); - const updateActiveTabValues = React.useCallback(partialTab => { - setTabState(current => { - const updated = setPropertiesInActiveTab(current, partialTab); - storeTabs(updated); - onTabChange == null ? void 0 : onTabChange(updated); - return updated; - }); - }, [onTabChange, storeTabs]); + let t7; + if ($[30] !== defaultHeaders || $[31] !== headerEditor || $[32] !== queryEditor || $[33] !== responseEditor || $[34] !== variableEditor) { + t7 = { + queryEditor, + variableEditor, + headerEditor, + responseEditor, + defaultHeaders + }; + $[30] = defaultHeaders; + $[31] = headerEditor; + $[32] = queryEditor; + $[33] = responseEditor; + $[34] = variableEditor; + $[35] = t7; + } else { + t7 = $[35]; + } + const setEditorValues = useSetEditorValues(t7); + let t8; + if ($[36] !== defaultHeaders || $[37] !== defaultQuery || $[38] !== onTabChange || $[39] !== setEditorValues || $[40] !== storeTabs || $[41] !== synchronizeActiveTabValues) { + t8 = () => { + setTabState(current => { + const updatedValues = synchronizeActiveTabValues(current); + const updated = { + tabs: [...updatedValues.tabs, createTab({ + headers: defaultHeaders, + query: defaultQuery !== null && defaultQuery !== void 0 ? defaultQuery : DEFAULT_QUERY + })], + activeTabIndex: updatedValues.tabs.length + }; + storeTabs(updated); + setEditorValues(updated.tabs[updated.activeTabIndex]); + onTabChange == null ? void 0 : onTabChange(updated); + return updated; + }); + }; + $[36] = defaultHeaders; + $[37] = defaultQuery; + $[38] = onTabChange; + $[39] = setEditorValues; + $[40] = storeTabs; + $[41] = synchronizeActiveTabValues; + $[42] = t8; + } else { + t8 = $[42]; + } + const addTab = t8; + let t9; + if ($[43] !== onTabChange || $[44] !== setEditorValues || $[45] !== storeTabs) { + t9 = index => { + setTabState(current_0 => { + const updated_0 = { + ...current_0, + activeTabIndex: index + }; + storeTabs(updated_0); + setEditorValues(updated_0.tabs[updated_0.activeTabIndex]); + onTabChange == null ? void 0 : onTabChange(updated_0); + return updated_0; + }); + }; + $[43] = onTabChange; + $[44] = setEditorValues; + $[45] = storeTabs; + $[46] = t9; + } else { + t9 = $[46]; + } + const changeTab = t9; + let t10; + if ($[47] !== onTabChange || $[48] !== setEditorValues || $[49] !== storeTabs) { + t10 = newOrder => { + setTabState(current_1 => { + const activeTab = current_1.tabs[current_1.activeTabIndex]; + const updated_1 = { + tabs: newOrder, + activeTabIndex: newOrder.indexOf(activeTab) + }; + storeTabs(updated_1); + setEditorValues(updated_1.tabs[updated_1.activeTabIndex]); + onTabChange == null ? void 0 : onTabChange(updated_1); + return updated_1; + }); + }; + $[47] = onTabChange; + $[48] = setEditorValues; + $[49] = storeTabs; + $[50] = t10; + } else { + t10 = $[50]; + } + const moveTab = t10; + let t11; + if ($[51] !== onTabChange || $[52] !== setEditorValues || $[53] !== storeTabs) { + t11 = index_0 => { + setTabState(current_2 => { + const updated_2 = { + tabs: current_2.tabs.filter((_tab, i) => index_0 !== i), + activeTabIndex: Math.max(current_2.activeTabIndex - 1, 0) + }; + storeTabs(updated_2); + setEditorValues(updated_2.tabs[updated_2.activeTabIndex]); + onTabChange == null ? void 0 : onTabChange(updated_2); + return updated_2; + }); + }; + $[51] = onTabChange; + $[52] = setEditorValues; + $[53] = storeTabs; + $[54] = t11; + } else { + t11 = $[54]; + } + const closeTab = t11; + let t12; + if ($[55] !== onTabChange || $[56] !== storeTabs) { + t12 = partialTab => { + setTabState(current_3 => { + const updated_3 = setPropertiesInActiveTab(current_3, partialTab); + storeTabs(updated_3); + onTabChange == null ? void 0 : onTabChange(updated_3); + return updated_3; + }); + }; + $[55] = onTabChange; + $[56] = storeTabs; + $[57] = t12; + } else { + t12 = $[57]; + } + const updateActiveTabValues = t12; const { onEditOperationName } = props; - const setOperationName = React.useCallback(operationName => { - if (!queryEditor) { - return; - } - queryEditor.operationName = operationName; - updateActiveTabValues({ - operationName - }); - onEditOperationName == null ? void 0 : onEditOperationName(operationName); - }, [onEditOperationName, queryEditor, updateActiveTabValues]); - const externalFragments = React.useMemo(() => { - const map = /* @__PURE__ */new Map(); + let t13; + if ($[58] !== onEditOperationName || $[59] !== queryEditor || $[60] !== updateActiveTabValues) { + t13 = operationName => { + if (!queryEditor) { + return; + } + updateQueryEditor(queryEditor, operationName); + updateActiveTabValues({ + operationName + }); + onEditOperationName == null ? void 0 : onEditOperationName(operationName); + }; + $[58] = onEditOperationName; + $[59] = queryEditor; + $[60] = updateActiveTabValues; + $[61] = t13; + } else { + t13 = $[61]; + } + const setOperationName = t13; + let t14; + let map; + if ($[62] !== props.externalFragments) { + map = /* @__PURE__ */new Map(); if (Array.isArray(props.externalFragments)) { for (const fragment of props.externalFragments) { map.set(fragment.name.value, fragment); } - } else if (typeof props.externalFragments === "string") { - graphql.visit(graphql.parse(props.externalFragments, {}), { - FragmentDefinition(fragment) { - map.set(fragment.name.value, fragment); + } else { + if (typeof props.externalFragments === "string") { + graphql.visit(graphql.parse(props.externalFragments, {}), { + FragmentDefinition(fragment_0) { + map.set(fragment_0.name.value, fragment_0); + } + }); + } else { + if (props.externalFragments) { + throw new Error("The `externalFragments` prop must either be a string that contains the fragment definitions in SDL or a list of FragmentDefinitionNode objects."); } - }); - } else if (props.externalFragments) { - throw new Error("The `externalFragments` prop must either be a string that contains the fragment definitions in SDL or a list of FragmentDefinitionNode objects."); + } } - return map; - }, [props.externalFragments]); - const validationRules = React.useMemo(() => props.validationRules || [], [props.validationRules]); - const value = React.useMemo(() => ({ - ...tabState, - addTab, - changeTab, - moveTab, - closeTab, - updateActiveTabValues, - headerEditor, - queryEditor, - responseEditor, - variableEditor, - setHeaderEditor, - setQueryEditor, - setResponseEditor, - setVariableEditor, - setOperationName, - initialQuery: initialState.query, - initialVariables: initialState.variables, - initialHeaders: initialState.headers, - initialResponse: initialState.response, - externalFragments, - validationRules, - shouldPersistHeaders, - setShouldPersistHeaders - }), [tabState, addTab, changeTab, moveTab, closeTab, updateActiveTabValues, headerEditor, queryEditor, responseEditor, variableEditor, setOperationName, initialState, externalFragments, validationRules, shouldPersistHeaders, setShouldPersistHeaders]); - return /* @__PURE__ */jsxRuntime.jsx(EditorContext.Provider, { - value, - children - }); + $[62] = props.externalFragments; + $[63] = map; + } else { + map = $[63]; + } + t14 = map; + const externalFragments = t14; + let t15; + if ($[64] !== props.validationRules) { + t15 = props.validationRules || []; + $[64] = props.validationRules; + $[65] = t15; + } else { + t15 = $[65]; + } + const validationRules = t15; + let t16; + if ($[66] !== addTab || $[67] !== changeTab || $[68] !== closeTab || $[69] !== externalFragments || $[70] !== headerEditor || $[71] !== initialState.headers || $[72] !== initialState.query || $[73] !== initialState.response || $[74] !== initialState.variables || $[75] !== moveTab || $[76] !== queryEditor || $[77] !== responseEditor || $[78] !== setOperationName || $[79] !== setShouldPersistHeaders || $[80] !== shouldPersistHeaders || $[81] !== tabState_0 || $[82] !== updateActiveTabValues || $[83] !== validationRules || $[84] !== variableEditor) { + t16 = { + ...tabState_0, + addTab, + changeTab, + moveTab, + closeTab, + updateActiveTabValues, + headerEditor, + queryEditor, + responseEditor, + variableEditor, + setHeaderEditor, + setQueryEditor, + setResponseEditor, + setVariableEditor, + setOperationName, + initialQuery: initialState.query, + initialVariables: initialState.variables, + initialHeaders: initialState.headers, + initialResponse: initialState.response, + externalFragments, + validationRules, + shouldPersistHeaders, + setShouldPersistHeaders + }; + $[66] = addTab; + $[67] = changeTab; + $[68] = closeTab; + $[69] = externalFragments; + $[70] = headerEditor; + $[71] = initialState.headers; + $[72] = initialState.query; + $[73] = initialState.response; + $[74] = initialState.variables; + $[75] = moveTab; + $[76] = queryEditor; + $[77] = responseEditor; + $[78] = setOperationName; + $[79] = setShouldPersistHeaders; + $[80] = shouldPersistHeaders; + $[81] = tabState_0; + $[82] = updateActiveTabValues; + $[83] = validationRules; + $[84] = variableEditor; + $[85] = t16; + } else { + t16 = $[85]; + } + const value = t16; + let t17; + if ($[86] !== children || $[87] !== value) { + t17 = /* @__PURE__ */jsxRuntime.jsx(EditorContext.Provider, { + value, + children + }); + $[86] = children; + $[87] = value; + $[88] = t17; + } else { + t17 = $[88]; + } + return t17; +} +function updateQueryEditor(queryEditor, operationName) { + queryEditor.operationName = operationName; } const useEditorContext = createContextHook(EditorContext); const PERSIST_HEADERS_STORAGE_KEY = "shouldPersistHeaders"; @@ -72604,73 +82061,177 @@ const DEFAULT_QUERY = `# Welcome to GraphiQL # `; -function HeaderEditor({ - isHidden, - ...hookArgs -}) { +function HeaderEditor(t0) { + const $ = reactCompilerRuntime.c(13); + let hookArgs; + let isHidden; + if ($[0] !== t0) { + ({ + isHidden, + ...hookArgs + } = t0); + $[0] = t0; + $[1] = hookArgs; + $[2] = isHidden; + } else { + hookArgs = $[1]; + isHidden = $[2]; + } + let t1; + if ($[3] === Symbol.for("react.memo_cache_sentinel")) { + t1 = { + nonNull: true, + caller: HeaderEditor + }; + $[3] = t1; + } else { + t1 = $[3]; + } const { headerEditor - } = useEditorContext({ - nonNull: true, - caller: HeaderEditor - }); + } = useEditorContext(t1); const ref = useHeaderEditor(hookArgs, HeaderEditor); - React.useEffect(() => { - if (!isHidden) { - headerEditor == null ? void 0 : headerEditor.refresh(); - } - }, [headerEditor, isHidden]); - return /* @__PURE__ */jsxRuntime.jsx("div", { - className: clsx.clsx("graphiql-editor", isHidden && "hidden"), - ref - }); + let t2; + let t3; + if ($[4] !== headerEditor || $[5] !== isHidden) { + t2 = () => { + if (!isHidden) { + headerEditor == null ? void 0 : headerEditor.refresh(); + } + }; + t3 = [headerEditor, isHidden]; + $[4] = headerEditor; + $[5] = isHidden; + $[6] = t2; + $[7] = t3; + } else { + t2 = $[6]; + t3 = $[7]; + } + React.useEffect(t2, t3); + const t4 = isHidden && "hidden"; + let t5; + if ($[8] !== t4) { + t5 = clsx.clsx("graphiql-editor", t4); + $[8] = t4; + $[9] = t5; + } else { + t5 = $[9]; + } + let t6; + if ($[10] !== ref || $[11] !== t5) { + t6 = /* @__PURE__ */jsxRuntime.jsx("div", { + className: t5, + ref + }); + $[10] = ref; + $[11] = t5; + $[12] = t6; + } else { + t6 = $[12]; + } + return t6; } function ImagePreview(props) { var _a; - const [dimensions, setDimensions] = React.useState({ - width: null, - height: null - }); + const $ = reactCompilerRuntime.c(14); + let t0; + if ($[0] === Symbol.for("react.memo_cache_sentinel")) { + t0 = { + width: null, + height: null + }; + $[0] = t0; + } else { + t0 = $[0]; + } + const [dimensions, setDimensions] = React.useState(t0); const [mime, setMime] = React.useState(null); const ref = React.useRef(null); const src = (_a = tokenToURL(props.token)) == null ? void 0 : _a.href; - React.useEffect(() => { - if (!ref.current) { - return; - } - if (!src) { - setDimensions({ - width: null, - height: null - }); - setMime(null); - return; - } - fetch(src, { - method: "HEAD" - }).then(response => { - setMime(response.headers.get("Content-Type")); - }).catch(() => { - setMime(null); - }); - }, [src]); - const dims = dimensions.width !== null && dimensions.height !== null ? /* @__PURE__ */jsxRuntime.jsxs("div", { - children: [dimensions.width, "x", dimensions.height, mime === null ? null : " " + mime] - }) : null; - return /* @__PURE__ */jsxRuntime.jsxs("div", { - children: [/* @__PURE__ */jsxRuntime.jsx("img", { - onLoad: () => { - var _ref19, _ref20; - var _a2, _b; + let t1; + let t2; + if ($[1] !== src) { + t1 = () => { + if (!ref.current) { + return; + } + if (!src) { setDimensions({ - width: (_ref19 = (_a2 = ref.current) == null ? void 0 : _a2.naturalWidth) !== null && _ref19 !== void 0 ? _ref19 : null, - height: (_ref20 = (_b = ref.current) == null ? void 0 : _b.naturalHeight) !== null && _ref20 !== void 0 ? _ref20 : null + width: null, + height: null }); - }, + setMime(null); + return; + } + fetch(src, { + method: "HEAD" + }).then(response => { + setMime(response.headers.get("Content-Type")); + }).catch(() => { + setMime(null); + }); + }; + t2 = [src]; + $[1] = src; + $[2] = t1; + $[3] = t2; + } else { + t1 = $[2]; + t2 = $[3]; + } + React.useEffect(t1, t2); + let t3; + if ($[4] !== dimensions.height || $[5] !== dimensions.width || $[6] !== mime) { + t3 = dimensions.width !== null && dimensions.height !== null ? /* @__PURE__ */jsxRuntime.jsxs("div", { + children: [dimensions.width, "x", dimensions.height, mime === null ? null : " " + mime] + }) : null; + $[4] = dimensions.height; + $[5] = dimensions.width; + $[6] = mime; + $[7] = t3; + } else { + t3 = $[7]; + } + const dims = t3; + let t4; + if ($[8] === Symbol.for("react.memo_cache_sentinel")) { + t4 = () => { + var _ref19, _ref20; + var _a2, _b; + setDimensions({ + width: (_ref19 = (_a2 = ref.current) == null ? void 0 : _a2.naturalWidth) !== null && _ref19 !== void 0 ? _ref19 : null, + height: (_ref20 = (_b = ref.current) == null ? void 0 : _b.naturalHeight) !== null && _ref20 !== void 0 ? _ref20 : null + }); + }; + $[8] = t4; + } else { + t4 = $[8]; + } + let t5; + if ($[9] !== src) { + t5 = /* @__PURE__ */jsxRuntime.jsx("img", { + onLoad: t4, ref, src - }), dims] - }); + }); + $[9] = src; + $[10] = t5; + } else { + t5 = $[10]; + } + let t6; + if ($[11] !== dims || $[12] !== t5) { + t6 = /* @__PURE__ */jsxRuntime.jsxs("div", { + children: [t5, dims] + }); + $[11] = dims; + $[12] = t5; + $[13] = t6; + } else { + t6 = $[13]; + } + return t6; } ImagePreview.shouldRender = function shouldRender(token) { const url = tokenToURL(token); @@ -72694,513 +82255,1050 @@ function isImageURL(url) { return /\.(bmp|gif|jpe?g|png|svg|webp)$/.test(url.pathname); } function QueryEditor(props) { + const $ = reactCompilerRuntime.c(2); const ref = useQueryEditor(props, QueryEditor); - return /* @__PURE__ */jsxRuntime.jsx("div", { - className: "graphiql-editor", - ref + let t0; + if ($[0] !== ref) { + t0 = /* @__PURE__ */jsxRuntime.jsx("div", { + className: "graphiql-editor", + ref + }); + $[0] = ref; + $[1] = t0; + } else { + t0 = $[1]; + } + return t0; +} +function importCodeMirrorImports() { + return importCodeMirror([Promise.resolve().then(() => _interopRequireWildcard(__webpack_require__(/*! codemirror/addon/fold/foldgutter.js */ "../../../node_modules/codemirror/addon/fold/foldgutter.js"))), Promise.resolve().then(() => _interopRequireWildcard(__webpack_require__(/*! codemirror/addon/fold/brace-fold.js */ "../../../node_modules/codemirror/addon/fold/brace-fold.js"))), Promise.resolve().then(() => _interopRequireWildcard(__webpack_require__(/*! codemirror/addon/dialog/dialog.js */ "../../../node_modules/codemirror/addon/dialog/dialog.js"))), Promise.resolve().then(() => _interopRequireWildcard(__webpack_require__(/*! codemirror/addon/search/search.js */ "../../../node_modules/codemirror/addon/search/search.js"))), Promise.resolve().then(() => _interopRequireWildcard(__webpack_require__(/*! codemirror/addon/search/searchcursor.js */ "../../../node_modules/codemirror/addon/search/searchcursor.js"))), Promise.resolve().then(() => _interopRequireWildcard(__webpack_require__(/*! codemirror/addon/search/jump-to-line.js */ "../../../node_modules/codemirror/addon/search/jump-to-line.js"))), // @ts-expect-error + Promise.resolve().then(() => _interopRequireWildcard(__webpack_require__(/*! codemirror/keymap/sublime.js */ "../../../node_modules/codemirror/keymap/sublime.js"))), Promise.resolve().then(() => _interopRequireWildcard(__webpack_require__(/*! codemirror-graphql/esm/results/mode.js */ "../../codemirror-graphql/esm/results/mode.js"))), Promise.resolve().then(() => _interopRequireWildcard(__webpack_require__(/*! codemirror-graphql/esm/utils/info-addon.js */ "../../codemirror-graphql/esm/utils/info-addon.js")))], { + useCommonAddons: false }); } -function useResponseEditor({ - responseTooltip, - editorTheme = DEFAULT_EDITOR_THEME, - keyMap = DEFAULT_KEY_MAP -} = {}, caller) { +const _useResponseEditor = useResponseEditor; +function useResponseEditor(t0, caller) { + const $ = reactCompilerRuntime.c(19); + let t1; + if ($[0] !== t0) { + t1 = t0 === void 0 ? {} : t0; + $[0] = t0; + $[1] = t1; + } else { + t1 = $[1]; + } + const { + responseTooltip, + editorTheme: t2, + keyMap: t3 + } = t1; + const editorTheme = t2 === void 0 ? DEFAULT_EDITOR_THEME : t2; + const keyMap = t3 === void 0 ? DEFAULT_KEY_MAP : t3; + const t4 = caller || _useResponseEditor; + let t5; + if ($[2] !== t4) { + t5 = { + nonNull: true, + caller: t4 + }; + $[2] = t4; + $[3] = t5; + } else { + t5 = $[3]; + } const { fetchError, validationErrors - } = useSchemaContext({ - nonNull: true, - caller: caller || useResponseEditor - }); + } = useSchemaContext(t5); + const t6 = caller || _useResponseEditor; + let t7; + if ($[4] !== t6) { + t7 = { + nonNull: true, + caller: t6 + }; + $[4] = t6; + $[5] = t7; + } else { + t7 = $[5]; + } const { initialResponse, responseEditor, setResponseEditor - } = useEditorContext({ - nonNull: true, - caller: caller || useResponseEditor - }); + } = useEditorContext(t7); const ref = React.useRef(null); const responseTooltipRef = React.useRef(responseTooltip); - React.useEffect(() => { - responseTooltipRef.current = responseTooltip; - }, [responseTooltip]); - React.useEffect(() => { - let isActive = true; - void importCodeMirror([Promise.resolve().then(() => __webpack_require__(/*! ./foldgutter.cjs.js */ "../../graphiql-react/dist/foldgutter.cjs.js")).then(n => n.foldgutter), Promise.resolve().then(() => __webpack_require__(/*! ./brace-fold.cjs.js */ "../../graphiql-react/dist/brace-fold.cjs.js")).then(n => n.braceFold), Promise.resolve().then(() => __webpack_require__(/*! ./dialog.cjs.js */ "../../graphiql-react/dist/dialog.cjs.js")).then(n => n.dialog), Promise.resolve().then(() => __webpack_require__(/*! ./search.cjs.js */ "../../graphiql-react/dist/search.cjs.js")).then(n => n.search), Promise.resolve().then(() => __webpack_require__(/*! ./searchcursor.cjs.js */ "../../graphiql-react/dist/searchcursor.cjs.js")).then(n => n.searchcursor), Promise.resolve().then(() => __webpack_require__(/*! ./jump-to-line.cjs.js */ "../../graphiql-react/dist/jump-to-line.cjs.js")).then(n => n.jumpToLine), - // @ts-expect-error - Promise.resolve().then(() => __webpack_require__(/*! ./sublime.cjs.js */ "../../graphiql-react/dist/sublime.cjs.js")).then(n => n.sublime), Promise.resolve().then(() => __webpack_require__(/*! ./mode.cjs3.js */ "../../graphiql-react/dist/mode.cjs3.js")), Promise.resolve().then(() => __webpack_require__(/*! ./info-addon.cjs.js */ "../../graphiql-react/dist/info-addon.cjs.js"))], { - useCommonAddons: false - }).then(CodeMirror => { - if (!isActive) { - return; - } - const tooltipDiv = document.createElement("div"); - CodeMirror.registerHelper("info", "graphql-results", (token, _options, _cm, pos) => { - const infoElements = []; - const ResponseTooltipComponent = responseTooltipRef.current; - if (ResponseTooltipComponent) { - infoElements.push( /* @__PURE__ */jsxRuntime.jsx(ResponseTooltipComponent, { - pos, - token - })); - } - if (ImagePreview.shouldRender(token)) { - infoElements.push( /* @__PURE__ */jsxRuntime.jsx(ImagePreview, { - token - }, "image-preview")); - } - if (!infoElements.length) { - ReactDOM.unmountComponentAtNode(tooltipDiv); - return null; - } - ReactDOM.render(infoElements, tooltipDiv); - return tooltipDiv; - }); - const container = ref.current; - if (!container) { - return; - } - const newEditor = CodeMirror(container, { - value: initialResponse, - lineWrapping: true, - readOnly: true, - theme: editorTheme, - mode: "graphql-results", - foldGutter: true, - gutters: ["CodeMirror-foldgutter"], - // @ts-expect-error - info: true, - extraKeys: commonKeys - }); - setResponseEditor(newEditor); - }); - return () => { - isActive = false; + let t8; + let t9; + if ($[6] !== responseTooltip) { + t8 = () => { + responseTooltipRef.current = responseTooltip; }; - }, [editorTheme, initialResponse, setResponseEditor]); + t9 = [responseTooltip]; + $[6] = responseTooltip; + $[7] = t8; + $[8] = t9; + } else { + t8 = $[7]; + t9 = $[8]; + } + React.useEffect(t8, t9); + let t10; + let t11; + if ($[9] !== editorTheme || $[10] !== initialResponse || $[11] !== setResponseEditor) { + t10 = () => { + let isActive; + isActive = true; + importCodeMirrorImports().then(CodeMirror => { + if (!isActive) { + return; + } + const tooltipDiv = document.createElement("div"); + CodeMirror.registerHelper("info", "graphql-results", (token, _options, _cm, pos) => { + const infoElements = []; + const ResponseTooltipComponent = responseTooltipRef.current; + if (ResponseTooltipComponent) { + infoElements.push( /* @__PURE__ */jsxRuntime.jsx(ResponseTooltipComponent, { + pos, + token + })); + } + if (ImagePreview.shouldRender(token)) { + infoElements.push( /* @__PURE__ */jsxRuntime.jsx(ImagePreview, { + token + }, "image-preview")); + } + if (!infoElements.length) { + ReactDOM.unmountComponentAtNode(tooltipDiv); + return null; + } + ReactDOM.render(infoElements, tooltipDiv); + return tooltipDiv; + }); + const container = ref.current; + if (!container) { + return; + } + const newEditor = CodeMirror(container, { + value: initialResponse, + lineWrapping: true, + readOnly: true, + theme: editorTheme, + mode: "graphql-results", + foldGutter: true, + gutters: ["CodeMirror-foldgutter"], + info: true, + extraKeys: commonKeys + }); + setResponseEditor(newEditor); + }); + return () => { + isActive = false; + }; + }; + t11 = [editorTheme, initialResponse, setResponseEditor]; + $[9] = editorTheme; + $[10] = initialResponse; + $[11] = setResponseEditor; + $[12] = t10; + $[13] = t11; + } else { + t10 = $[12]; + t11 = $[13]; + } + React.useEffect(t10, t11); useSynchronizeOption(responseEditor, "keyMap", keyMap); - React.useEffect(() => { - if (fetchError) { - responseEditor == null ? void 0 : responseEditor.setValue(fetchError); - } - if (validationErrors.length > 0) { - responseEditor == null ? void 0 : responseEditor.setValue(toolkit.formatError(validationErrors)); - } - }, [responseEditor, fetchError, validationErrors]); + let t12; + let t13; + if ($[14] !== fetchError || $[15] !== responseEditor || $[16] !== validationErrors) { + t12 = () => { + if (fetchError) { + responseEditor == null ? void 0 : responseEditor.setValue(fetchError); + } + if (validationErrors.length > 0) { + responseEditor == null ? void 0 : responseEditor.setValue(toolkit.formatError(validationErrors)); + } + }; + t13 = [responseEditor, fetchError, validationErrors]; + $[14] = fetchError; + $[15] = responseEditor; + $[16] = validationErrors; + $[17] = t12; + $[18] = t13; + } else { + t12 = $[17]; + t13 = $[18]; + } + React.useEffect(t12, t13); return ref; } function ResponseEditor(props) { + const $ = reactCompilerRuntime.c(2); const ref = useResponseEditor(props, ResponseEditor); - return /* @__PURE__ */jsxRuntime.jsx("section", { - className: "result-window", - "aria-label": "Result Window", - "aria-live": "polite", - "aria-atomic": "true", - ref - }); + let t0; + if ($[0] !== ref) { + t0 = /* @__PURE__ */jsxRuntime.jsx("section", { + className: "result-window", + "aria-label": "Result Window", + "aria-live": "polite", + "aria-atomic": "true", + ref + }); + $[0] = ref; + $[1] = t0; + } else { + t0 = $[1]; + } + return t0; } -function VariableEditor({ - isHidden, - ...hookArgs -}) { +function VariableEditor(t0) { + const $ = reactCompilerRuntime.c(13); + let hookArgs; + let isHidden; + if ($[0] !== t0) { + ({ + isHidden, + ...hookArgs + } = t0); + $[0] = t0; + $[1] = hookArgs; + $[2] = isHidden; + } else { + hookArgs = $[1]; + isHidden = $[2]; + } + let t1; + if ($[3] === Symbol.for("react.memo_cache_sentinel")) { + t1 = { + nonNull: true, + caller: VariableEditor + }; + $[3] = t1; + } else { + t1 = $[3]; + } const { variableEditor - } = useEditorContext({ - nonNull: true, - caller: VariableEditor - }); + } = useEditorContext(t1); const ref = useVariableEditor(hookArgs, VariableEditor); - React.useEffect(() => { - if (variableEditor && !isHidden) { - variableEditor.refresh(); - } - }, [variableEditor, isHidden]); - return /* @__PURE__ */jsxRuntime.jsx("div", { - className: clsx.clsx("graphiql-editor", isHidden && "hidden"), - ref - }); + let t2; + let t3; + if ($[4] !== isHidden || $[5] !== variableEditor) { + t2 = () => { + if (variableEditor && !isHidden) { + variableEditor.refresh(); + } + }; + t3 = [variableEditor, isHidden]; + $[4] = isHidden; + $[5] = variableEditor; + $[6] = t2; + $[7] = t3; + } else { + t2 = $[6]; + t3 = $[7]; + } + React.useEffect(t2, t3); + const t4 = isHidden && "hidden"; + let t5; + if ($[8] !== t4) { + t5 = clsx.clsx("graphiql-editor", t4); + $[8] = t4; + $[9] = t5; + } else { + t5 = $[9]; + } + let t6; + if ($[10] !== ref || $[11] !== t5) { + t6 = /* @__PURE__ */jsxRuntime.jsx("div", { + className: t5, + ref + }); + $[10] = ref; + $[11] = t5; + $[12] = t6; + } else { + t6 = $[12]; + } + return t6; } -function GraphiQLProvider({ - children, - dangerouslyAssumeSchemaIsValid, - defaultQuery, - defaultHeaders, - defaultTabs, - externalFragments, - fetcher, - getDefaultFieldNames, - headers, - inputValueDeprecation, - introspectionQueryName, - maxHistoryLength, - onEditOperationName, - onSchemaChange, - onTabChange, - onTogglePluginVisibility, - operationName, - plugins, - query, - response, - schema, - schemaDescription, - shouldPersistHeaders, - storage, - validationRules, - variables, - visiblePlugin -}) { - return /* @__PURE__ */jsxRuntime.jsx(StorageContextProvider, { +function GraphiQLProvider(t0) { + const $ = reactCompilerRuntime.c(39); + const { + children, + dangerouslyAssumeSchemaIsValid, + defaultQuery, + defaultHeaders, + defaultTabs, + externalFragments, + fetcher, + getDefaultFieldNames, + headers, + inputValueDeprecation, + introspectionQueryName, + maxHistoryLength, + onEditOperationName, + onSchemaChange, + onTabChange, + onTogglePluginVisibility, + operationName, + plugins, + query, + response, + schema, + schemaDescription, + shouldPersistHeaders, storage, - children: /* @__PURE__ */jsxRuntime.jsx(HistoryContextProvider, { - maxHistoryLength, - children: /* @__PURE__ */jsxRuntime.jsx(EditorContextProvider, { - defaultQuery, - defaultHeaders, - defaultTabs, - externalFragments, - headers, - onEditOperationName, - onTabChange, - query, - response, - shouldPersistHeaders, - validationRules, - variables, - children: /* @__PURE__ */jsxRuntime.jsx(SchemaContextProvider, { - dangerouslyAssumeSchemaIsValid, - fetcher, - inputValueDeprecation, - introspectionQueryName, - onSchemaChange, - schema, - schemaDescription, - children: /* @__PURE__ */jsxRuntime.jsx(ExecutionContextProvider, { - getDefaultFieldNames, - fetcher, - operationName, - children: /* @__PURE__ */jsxRuntime.jsx(ExplorerContextProvider, { - children: /* @__PURE__ */jsxRuntime.jsx(PluginContextProvider, { - onTogglePluginVisibility, - plugins, - visiblePlugin, - children - }) - }) - }) - }) + validationRules, + variables, + visiblePlugin + } = t0; + let t1; + if ($[0] !== children || $[1] !== onTogglePluginVisibility || $[2] !== plugins || $[3] !== visiblePlugin) { + t1 = /* @__PURE__ */jsxRuntime.jsx(ExplorerContextProvider, { + children: /* @__PURE__ */jsxRuntime.jsx(PluginContextProvider, { + onTogglePluginVisibility, + plugins, + visiblePlugin, + children }) - }) - }); + }); + $[0] = children; + $[1] = onTogglePluginVisibility; + $[2] = plugins; + $[3] = visiblePlugin; + $[4] = t1; + } else { + t1 = $[4]; + } + let t2; + if ($[5] !== fetcher || $[6] !== getDefaultFieldNames || $[7] !== operationName || $[8] !== t1) { + t2 = /* @__PURE__ */jsxRuntime.jsx(ExecutionContextProvider, { + getDefaultFieldNames, + fetcher, + operationName, + children: t1 + }); + $[5] = fetcher; + $[6] = getDefaultFieldNames; + $[7] = operationName; + $[8] = t1; + $[9] = t2; + } else { + t2 = $[9]; + } + let t3; + if ($[10] !== dangerouslyAssumeSchemaIsValid || $[11] !== fetcher || $[12] !== inputValueDeprecation || $[13] !== introspectionQueryName || $[14] !== onSchemaChange || $[15] !== schema || $[16] !== schemaDescription || $[17] !== t2) { + t3 = /* @__PURE__ */jsxRuntime.jsx(SchemaContextProvider, { + dangerouslyAssumeSchemaIsValid, + fetcher, + inputValueDeprecation, + introspectionQueryName, + onSchemaChange, + schema, + schemaDescription, + children: t2 + }); + $[10] = dangerouslyAssumeSchemaIsValid; + $[11] = fetcher; + $[12] = inputValueDeprecation; + $[13] = introspectionQueryName; + $[14] = onSchemaChange; + $[15] = schema; + $[16] = schemaDescription; + $[17] = t2; + $[18] = t3; + } else { + t3 = $[18]; + } + let t4; + if ($[19] !== defaultHeaders || $[20] !== defaultQuery || $[21] !== defaultTabs || $[22] !== externalFragments || $[23] !== headers || $[24] !== onEditOperationName || $[25] !== onTabChange || $[26] !== query || $[27] !== response || $[28] !== shouldPersistHeaders || $[29] !== t3 || $[30] !== validationRules || $[31] !== variables) { + t4 = /* @__PURE__ */jsxRuntime.jsx(EditorContextProvider, { + defaultQuery, + defaultHeaders, + defaultTabs, + externalFragments, + headers, + onEditOperationName, + onTabChange, + query, + response, + shouldPersistHeaders, + validationRules, + variables, + children: t3 + }); + $[19] = defaultHeaders; + $[20] = defaultQuery; + $[21] = defaultTabs; + $[22] = externalFragments; + $[23] = headers; + $[24] = onEditOperationName; + $[25] = onTabChange; + $[26] = query; + $[27] = response; + $[28] = shouldPersistHeaders; + $[29] = t3; + $[30] = validationRules; + $[31] = variables; + $[32] = t4; + } else { + t4 = $[32]; + } + let t5; + if ($[33] !== maxHistoryLength || $[34] !== t4) { + t5 = /* @__PURE__ */jsxRuntime.jsx(HistoryContextProvider, { + maxHistoryLength, + children: t4 + }); + $[33] = maxHistoryLength; + $[34] = t4; + $[35] = t5; + } else { + t5 = $[35]; + } + let t6; + if ($[36] !== storage || $[37] !== t5) { + t6 = /* @__PURE__ */jsxRuntime.jsx(StorageContextProvider, { + storage, + children: t5 + }); + $[36] = storage; + $[37] = t5; + $[38] = t6; + } else { + t6 = $[38]; + } + return t6; } -function useTheme(defaultTheme = null) { +function useTheme(t0) { + const $ = reactCompilerRuntime.c(11); + const defaultTheme = t0 === void 0 ? null : t0; const storageContext = useStorageContext(); - const [theme, setThemeInternal] = React.useState(() => { - if (!storageContext) { - return null; - } - const stored = storageContext.get(STORAGE_KEY); - switch (stored) { - case "light": - return "light"; - case "dark": - return "dark"; - default: - if (typeof stored === "string") { - storageContext.set(STORAGE_KEY, ""); - } - return defaultTheme; - } - }); - React.useLayoutEffect(() => { - if (typeof window === "undefined") { - return; - } - document.body.classList.remove("graphiql-light", "graphiql-dark"); - if (theme) { - document.body.classList.add(`graphiql-${theme}`); - } - }, [theme]); - const setTheme = React.useCallback(newTheme => { - storageContext == null ? void 0 : storageContext.set(STORAGE_KEY, newTheme || ""); - setThemeInternal(newTheme); - }, [storageContext]); - return React.useMemo(() => ({ - theme, - setTheme - }), [theme, setTheme]); + let t1; + if ($[0] !== defaultTheme || $[1] !== storageContext) { + t1 = () => { + if (!storageContext) { + return null; + } + const stored = storageContext.get(STORAGE_KEY); + switch (stored) { + case "light": + { + return "light"; + } + case "dark": + { + return "dark"; + } + default: + { + if (typeof stored === "string") { + storageContext.set(STORAGE_KEY, ""); + } + return defaultTheme; + } + } + }; + $[0] = defaultTheme; + $[1] = storageContext; + $[2] = t1; + } else { + t1 = $[2]; + } + const [theme, setThemeInternal] = React.useState(t1); + let t2; + let t3; + if ($[3] !== theme) { + t2 = () => { + if (typeof window === "undefined") { + return; + } + document.body.classList.remove("graphiql-light", "graphiql-dark"); + if (theme) { + document.body.classList.add(`graphiql-${theme}`); + } + }; + t3 = [theme]; + $[3] = theme; + $[4] = t2; + $[5] = t3; + } else { + t2 = $[4]; + t3 = $[5]; + } + React.useLayoutEffect(t2, t3); + let t4; + if ($[6] !== storageContext) { + t4 = newTheme => { + storageContext == null ? void 0 : storageContext.set(STORAGE_KEY, newTheme || ""); + setThemeInternal(newTheme); + }; + $[6] = storageContext; + $[7] = t4; + } else { + t4 = $[7]; + } + const setTheme = t4; + let t5; + if ($[8] !== setTheme || $[9] !== theme) { + t5 = { + theme, + setTheme + }; + $[8] = setTheme; + $[9] = theme; + $[10] = t5; + } else { + t5 = $[10]; + } + return t5; } const STORAGE_KEY = "theme"; -function useDragResize({ - defaultSizeRelation = DEFAULT_FLEX, - direction, - initiallyHidden, - onHiddenElementChange, - sizeThresholdFirst = 100, - sizeThresholdSecond = 100, - storageKey -}) { +function useDragResize(t0) { + const $ = reactCompilerRuntime.c(31); + const { + defaultSizeRelation: t1, + direction, + initiallyHidden, + onHiddenElementChange, + sizeThresholdFirst: t2, + sizeThresholdSecond: t3, + storageKey + } = t0; + const defaultSizeRelation = t1 === void 0 ? DEFAULT_FLEX : t1; + const sizeThresholdFirst = t2 === void 0 ? 100 : t2; + const sizeThresholdSecond = t3 === void 0 ? 100 : t3; const storage = useStorageContext(); - const store = React.useMemo(() => debounce(500, value => { - if (storageKey) { - storage == null ? void 0 : storage.set(storageKey, value); - } - }), [storage, storageKey]); - const [hiddenElement, setHiddenElement] = React.useState(() => { - const storedValue = storageKey && (storage == null ? void 0 : storage.get(storageKey)); - if (storedValue === HIDE_FIRST || initiallyHidden === "first") { - return "first"; - } - if (storedValue === HIDE_SECOND || initiallyHidden === "second") { - return "second"; - } - return null; - }); - const setHiddenElementWithCallback = React.useCallback(element => { - if (element !== hiddenElement) { - setHiddenElement(element); - onHiddenElementChange == null ? void 0 : onHiddenElementChange(element); - } - }, [hiddenElement, onHiddenElementChange]); + let t4; + if ($[0] !== storage || $[1] !== storageKey) { + t4 = debounce(500, value => { + if (storageKey) { + storage == null ? void 0 : storage.set(storageKey, value); + } + }); + $[0] = storage; + $[1] = storageKey; + $[2] = t4; + } else { + t4 = $[2]; + } + const store = t4; + let t5; + if ($[3] !== initiallyHidden || $[4] !== storage || $[5] !== storageKey) { + t5 = () => { + const storedValue = storageKey && (storage == null ? void 0 : storage.get(storageKey)); + if (storedValue === HIDE_FIRST || initiallyHidden === "first") { + return "first"; + } + if (storedValue === HIDE_SECOND || initiallyHidden === "second") { + return "second"; + } + return null; + }; + $[3] = initiallyHidden; + $[4] = storage; + $[5] = storageKey; + $[6] = t5; + } else { + t5 = $[6]; + } + const [hiddenElement, setHiddenElement] = React.useState(t5); + let t6; + if ($[7] !== hiddenElement || $[8] !== onHiddenElementChange) { + t6 = element => { + if (element !== hiddenElement) { + setHiddenElement(element); + onHiddenElementChange == null ? void 0 : onHiddenElementChange(element); + } + }; + $[7] = hiddenElement; + $[8] = onHiddenElementChange; + $[9] = t6; + } else { + t6 = $[9]; + } + const setHiddenElementWithCallback = t6; const firstRef = React.useRef(null); const dragBarRef = React.useRef(null); const secondRef = React.useRef(null); const defaultFlexRef = React.useRef(`${defaultSizeRelation}`); - React.useLayoutEffect(() => { - const storedValue = storageKey && (storage == null ? void 0 : storage.get(storageKey)) || defaultFlexRef.current; - if (firstRef.current) { - firstRef.current.style.display = "flex"; - firstRef.current.style.flex = storedValue === HIDE_FIRST || storedValue === HIDE_SECOND ? defaultFlexRef.current : storedValue; - } - if (secondRef.current) { - secondRef.current.style.display = "flex"; - secondRef.current.style.flex = "1"; - } - if (dragBarRef.current) { - dragBarRef.current.style.display = "flex"; - } - }, [direction, storage, storageKey]); - const hide = React.useCallback(resizableElement => { - const element = resizableElement === "first" ? firstRef.current : secondRef.current; - if (!element) { - return; - } - element.style.left = "-1000px"; - element.style.position = "absolute"; - element.style.opacity = "0"; - element.style.height = "500px"; - element.style.width = "500px"; - if (firstRef.current) { - const flex = parseFloat(firstRef.current.style.flex); - if (!Number.isFinite(flex) || flex < 1) { - firstRef.current.style.flex = "1"; - } - } - }, []); - const show = React.useCallback(resizableElement => { - const element = resizableElement === "first" ? firstRef.current : secondRef.current; - if (!element) { - return; - } - element.style.width = ""; - element.style.height = ""; - element.style.opacity = ""; - element.style.position = ""; - element.style.left = ""; - if (storage && storageKey) { - const storedValue = storage.get(storageKey); - if (firstRef.current && storedValue !== HIDE_FIRST && storedValue !== HIDE_SECOND) { - firstRef.current.style.flex = storedValue || defaultFlexRef.current; - } - } - }, [storage, storageKey]); - React.useLayoutEffect(() => { - if (hiddenElement === "first") { - hide("first"); - } else { - show("first"); - } - if (hiddenElement === "second") { - hide("second"); - } else { - show("second"); - } - }, [hiddenElement, hide, show]); - React.useEffect(() => { - if (!dragBarRef.current || !firstRef.current || !secondRef.current) { - return; - } - const dragBarContainer = dragBarRef.current; - const firstContainer = firstRef.current; - const wrapper = firstContainer.parentElement; - const eventProperty = direction === "horizontal" ? "clientX" : "clientY"; - const rectProperty = direction === "horizontal" ? "left" : "top"; - const adjacentRectProperty = direction === "horizontal" ? "right" : "bottom"; - const sizeProperty = direction === "horizontal" ? "clientWidth" : "clientHeight"; - function handleMouseDown(downEvent) { - downEvent.preventDefault(); - const offset = downEvent[eventProperty] - dragBarContainer.getBoundingClientRect()[rectProperty]; - function handleMouseMove(moveEvent) { - if (moveEvent.buttons === 0) { - return handleMouseUp(); - } - const firstSize = moveEvent[eventProperty] - wrapper.getBoundingClientRect()[rectProperty] - offset; - const secondSize = wrapper.getBoundingClientRect()[adjacentRectProperty] - moveEvent[eventProperty] + offset - dragBarContainer[sizeProperty]; - if (firstSize < sizeThresholdFirst) { - setHiddenElementWithCallback("first"); - store(HIDE_FIRST); - } else if (secondSize < sizeThresholdSecond) { - setHiddenElementWithCallback("second"); - store(HIDE_SECOND); - } else { - setHiddenElementWithCallback(null); - const newFlex = `${firstSize / secondSize}`; - firstContainer.style.flex = newFlex; - store(newFlex); - } - } - function handleMouseUp() { - document.removeEventListener("mousemove", handleMouseMove); - document.removeEventListener("mouseup", handleMouseUp); - } - document.addEventListener("mousemove", handleMouseMove); - document.addEventListener("mouseup", handleMouseUp); - } - dragBarContainer.addEventListener("mousedown", handleMouseDown); - function reset() { + let t7; + if ($[10] !== storage || $[11] !== storageKey) { + t7 = () => { + const storedValue_0 = storageKey && (storage == null ? void 0 : storage.get(storageKey)) || defaultFlexRef.current; if (firstRef.current) { - firstRef.current.style.flex = defaultFlexRef.current; + firstRef.current.style.display = "flex"; + firstRef.current.style.flex = storedValue_0 === HIDE_FIRST || storedValue_0 === HIDE_SECOND ? defaultFlexRef.current : storedValue_0; + } + if (secondRef.current) { + secondRef.current.style.display = "flex"; + secondRef.current.style.flex = "1"; + } + if (dragBarRef.current) { + dragBarRef.current.style.display = "flex"; } - store(defaultFlexRef.current); - setHiddenElementWithCallback(null); - } - dragBarContainer.addEventListener("dblclick", reset); - return () => { - dragBarContainer.removeEventListener("mousedown", handleMouseDown); - dragBarContainer.removeEventListener("dblclick", reset); }; - }, [direction, setHiddenElementWithCallback, sizeThresholdFirst, sizeThresholdSecond, store]); - return React.useMemo(() => ({ - dragBarRef, - hiddenElement, - firstRef, - setHiddenElement, - secondRef - }), [hiddenElement, setHiddenElement]); + $[10] = storage; + $[11] = storageKey; + $[12] = t7; + } else { + t7 = $[12]; + } + let t8; + if ($[13] !== direction || $[14] !== storage || $[15] !== storageKey) { + t8 = [direction, storage, storageKey]; + $[13] = direction; + $[14] = storage; + $[15] = storageKey; + $[16] = t8; + } else { + t8 = $[16]; + } + React.useLayoutEffect(t7, t8); + let t10; + let t9; + if ($[17] !== hiddenElement || $[18] !== storage || $[19] !== storageKey) { + t9 = () => { + const hide = resizableElement => { + const element_0 = resizableElement === "first" ? firstRef.current : secondRef.current; + if (!element_0) { + return; + } + element_0.style.left = "-1000px"; + element_0.style.position = "absolute"; + element_0.style.opacity = "0"; + element_0.style.height = "500px"; + element_0.style.width = "500px"; + if (firstRef.current) { + const flex = parseFloat(firstRef.current.style.flex); + if (!Number.isFinite(flex) || flex < 1) { + firstRef.current.style.flex = "1"; + } + } + }; + const show = resizableElement_0 => { + const element_1 = resizableElement_0 === "first" ? firstRef.current : secondRef.current; + if (!element_1) { + return; + } + element_1.style.width = ""; + element_1.style.height = ""; + element_1.style.opacity = ""; + element_1.style.position = ""; + element_1.style.left = ""; + if (storage && storageKey) { + const storedValue_1 = storage.get(storageKey); + if (firstRef.current && storedValue_1 !== HIDE_FIRST && storedValue_1 !== HIDE_SECOND) { + firstRef.current.style.flex = storedValue_1 || defaultFlexRef.current; + } + } + }; + if (hiddenElement === "first") { + hide("first"); + } else { + show("first"); + } + if (hiddenElement === "second") { + hide("second"); + } else { + show("second"); + } + }; + t10 = [hiddenElement, storage, storageKey]; + $[17] = hiddenElement; + $[18] = storage; + $[19] = storageKey; + $[20] = t10; + $[21] = t9; + } else { + t10 = $[20]; + t9 = $[21]; + } + React.useLayoutEffect(t9, t10); + let t11; + let t12; + if ($[22] !== direction || $[23] !== setHiddenElementWithCallback || $[24] !== sizeThresholdFirst || $[25] !== sizeThresholdSecond || $[26] !== store) { + t11 = () => { + if (!dragBarRef.current || !firstRef.current || !secondRef.current) { + return; + } + const dragBarContainer = dragBarRef.current; + const firstContainer = firstRef.current; + const wrapper = firstContainer.parentElement; + const eventProperty = direction === "horizontal" ? "clientX" : "clientY"; + const rectProperty = direction === "horizontal" ? "left" : "top"; + const adjacentRectProperty = direction === "horizontal" ? "right" : "bottom"; + const sizeProperty = direction === "horizontal" ? "clientWidth" : "clientHeight"; + const handleMouseDown = function handleMouseDown2(downEvent) { + downEvent.preventDefault(); + const offset = downEvent[eventProperty] - dragBarContainer.getBoundingClientRect()[rectProperty]; + const handleMouseMove = function handleMouseMove2(moveEvent) { + if (moveEvent.buttons === 0) { + return handleMouseUp(); + } + const firstSize = moveEvent[eventProperty] - wrapper.getBoundingClientRect()[rectProperty] - offset; + const secondSize = wrapper.getBoundingClientRect()[adjacentRectProperty] - moveEvent[eventProperty] + offset - dragBarContainer[sizeProperty]; + if (firstSize < sizeThresholdFirst) { + setHiddenElementWithCallback("first"); + store(HIDE_FIRST); + } else { + if (secondSize < sizeThresholdSecond) { + setHiddenElementWithCallback("second"); + store(HIDE_SECOND); + } else { + setHiddenElementWithCallback(null); + const newFlex = `${firstSize / secondSize}`; + firstContainer.style.flex = newFlex; + store(newFlex); + } + } + }; + function handleMouseUp() { + document.removeEventListener("mousemove", handleMouseMove); + document.removeEventListener("mouseup", handleMouseUp); + } + document.addEventListener("mousemove", handleMouseMove); + document.addEventListener("mouseup", handleMouseUp); + }; + dragBarContainer.addEventListener("mousedown", handleMouseDown); + const reset = function reset2() { + if (firstRef.current) { + firstRef.current.style.flex = defaultFlexRef.current; + } + store(defaultFlexRef.current); + setHiddenElementWithCallback(null); + }; + dragBarContainer.addEventListener("dblclick", reset); + return () => { + dragBarContainer.removeEventListener("mousedown", handleMouseDown); + dragBarContainer.removeEventListener("dblclick", reset); + }; + }; + t12 = [direction, setHiddenElementWithCallback, sizeThresholdFirst, sizeThresholdSecond, store]; + $[22] = direction; + $[23] = setHiddenElementWithCallback; + $[24] = sizeThresholdFirst; + $[25] = sizeThresholdSecond; + $[26] = store; + $[27] = t11; + $[28] = t12; + } else { + t11 = $[27]; + t12 = $[28]; + } + React.useEffect(t11, t12); + let t13; + if ($[29] !== hiddenElement) { + t13 = { + dragBarRef, + hiddenElement, + firstRef, + setHiddenElement, + secondRef + }; + $[29] = hiddenElement; + $[30] = t13; + } else { + t13 = $[30]; + } + return t13; } const DEFAULT_FLEX = 1; const HIDE_FIRST = "hide-first"; const HIDE_SECOND = "hide-second"; -const ToolbarButton = React.forwardRef(({ - label, - onClick, - ...props -}, ref) => { +const ToolbarButton = React.forwardRef((t0, ref) => { + const $ = reactCompilerRuntime.c(19); + let label; + let onClick; + let props; + if ($[0] !== t0) { + ({ + label, + onClick, + ...props + } = t0); + $[0] = t0; + $[1] = label; + $[2] = onClick; + $[3] = props; + } else { + label = $[1]; + onClick = $[2]; + props = $[3]; + } const [error, setError] = React.useState(null); - const handleClick = React.useCallback(event => { - try { - onClick == null ? void 0 : onClick(event); - setError(null); - } catch (err) { - setError(err instanceof Error ? err : new Error(`Toolbar button click failed: ${err}`)); - } - }, [onClick]); - return /* @__PURE__ */jsxRuntime.jsx(Tooltip, { - label, - children: /* @__PURE__ */jsxRuntime.jsx(UnStyledButton, { + let t1; + if ($[4] !== onClick) { + t1 = event => { + try { + if (onClick) { + onClick(event); + } + setError(null); + } catch (t22) { + const err = t22; + setError(err instanceof Error ? err : new Error(`Toolbar button click failed: ${err}`)); + } + }; + $[4] = onClick; + $[5] = t1; + } else { + t1 = $[5]; + } + const handleClick = t1; + const t2 = error && "error"; + let t3; + if ($[6] !== props.className || $[7] !== t2) { + t3 = clsx.clsx("graphiql-toolbar-button", t2, props.className); + $[6] = props.className; + $[7] = t2; + $[8] = t3; + } else { + t3 = $[8]; + } + const t4 = error ? error.message : label; + const t5 = error ? "true" : props["aria-invalid"]; + let t6; + if ($[9] !== handleClick || $[10] !== props || $[11] !== ref || $[12] !== t3 || $[13] !== t4 || $[14] !== t5) { + t6 = /* @__PURE__ */jsxRuntime.jsx(UnStyledButton, { ...props, ref, type: "button", - className: clsx.clsx("graphiql-toolbar-button", error && "error", props.className), + className: t3, onClick: handleClick, - "aria-label": error ? error.message : label, - "aria-invalid": error ? "true" : props["aria-invalid"] - }) - }); + "aria-label": t4, + "aria-invalid": t5 + }); + $[9] = handleClick; + $[10] = props; + $[11] = ref; + $[12] = t3; + $[13] = t4; + $[14] = t5; + $[15] = t6; + } else { + t6 = $[15]; + } + let t7; + if ($[16] !== label || $[17] !== t6) { + t7 = /* @__PURE__ */jsxRuntime.jsx(Tooltip, { + label, + children: t6 + }); + $[16] = label; + $[17] = t6; + $[18] = t7; + } else { + t7 = $[18]; + } + return t7; }); ToolbarButton.displayName = "ToolbarButton"; function ExecuteButton() { + const $ = reactCompilerRuntime.c(19); + let t0; + if ($[0] === Symbol.for("react.memo_cache_sentinel")) { + t0 = { + nonNull: true, + caller: ExecuteButton + }; + $[0] = t0; + } else { + t0 = $[0]; + } const { queryEditor, setOperationName - } = useEditorContext({ - nonNull: true, - caller: ExecuteButton - }); + } = useEditorContext(t0); + let t1; + if ($[1] === Symbol.for("react.memo_cache_sentinel")) { + t1 = { + nonNull: true, + caller: ExecuteButton + }; + $[1] = t1; + } else { + t1 = $[1]; + } const { isFetching, isSubscribed, operationName, run, stop - } = useExecutionContext({ - nonNull: true, - caller: ExecuteButton - }); - const operations = (queryEditor == null ? void 0 : queryEditor.operations) || []; + } = useExecutionContext(t1); + let t2; + if ($[2] !== (queryEditor == null ? void 0 : queryEditor.operations)) { + t2 = (queryEditor == null ? void 0 : queryEditor.operations) || []; + $[2] = queryEditor == null ? void 0 : queryEditor.operations; + $[3] = t2; + } else { + t2 = $[3]; + } + const operations = t2; const hasOptions = operations.length > 1 && typeof operationName !== "string"; const isRunning = isFetching || isSubscribed; const label = `${isRunning ? "Stop" : "Execute"} query (Ctrl-Enter)`; - const buttonProps = { - type: "button", - className: "graphiql-execute-button", - children: isRunning ? /* @__PURE__ */jsxRuntime.jsx(StopIcon, {}) : /* @__PURE__ */jsxRuntime.jsx(PlayIcon, {}), - "aria-label": label - }; - return hasOptions && !isRunning ? /* @__PURE__ */jsxRuntime.jsxs(DropdownMenu, { - children: [/* @__PURE__ */jsxRuntime.jsx(Tooltip, { + let t3; + if ($[4] !== isRunning) { + t3 = isRunning ? /* @__PURE__ */jsxRuntime.jsx(StopIcon, {}) : /* @__PURE__ */jsxRuntime.jsx(PlayIcon, {}); + $[4] = isRunning; + $[5] = t3; + } else { + t3 = $[5]; + } + let t4; + if ($[6] !== label || $[7] !== t3) { + t4 = { + type: "button", + className: "graphiql-execute-button", + children: t3, + "aria-label": label + }; + $[6] = label; + $[7] = t3; + $[8] = t4; + } else { + t4 = $[8]; + } + const buttonProps = t4; + let t5; + if ($[9] !== buttonProps || $[10] !== hasOptions || $[11] !== isRunning || $[12] !== label || $[13] !== operations || $[14] !== queryEditor || $[15] !== run || $[16] !== setOperationName || $[17] !== stop) { + t5 = hasOptions && !isRunning ? /* @__PURE__ */jsxRuntime.jsxs(DropdownMenu, { + children: [/* @__PURE__ */jsxRuntime.jsx(Tooltip, { + label, + children: /* @__PURE__ */jsxRuntime.jsx(DropdownMenu.Button, { + ...buttonProps + }) + }), /* @__PURE__ */jsxRuntime.jsx(DropdownMenu.Content, { + children: operations.map((operation, i) => { + const opName = operation.name ? operation.name.value : ``; + return /* @__PURE__ */jsxRuntime.jsx(DropdownMenu.Item, { + onSelect: () => { + var _a; + const selectedOperationName = (_a = operation.name) == null ? void 0 : _a.value; + if (queryEditor && selectedOperationName && selectedOperationName !== queryEditor.operationName) { + setOperationName(selectedOperationName); + } + run(); + }, + children: opName + }, `${opName}-${i}`); + }) + })] + }) : /* @__PURE__ */jsxRuntime.jsx(Tooltip, { label, - children: /* @__PURE__ */jsxRuntime.jsx(DropdownMenu.Button, { - ...buttonProps - }) - }), /* @__PURE__ */jsxRuntime.jsx(DropdownMenu.Content, { - children: operations.map((operation, i) => { - const opName = operation.name ? operation.name.value : ``; - return /* @__PURE__ */jsxRuntime.jsx(DropdownMenu.Item, { - onSelect: () => { - var _a; - const selectedOperationName = (_a = operation.name) == null ? void 0 : _a.value; - if (queryEditor && selectedOperationName && selectedOperationName !== queryEditor.operationName) { - setOperationName(selectedOperationName); - } + children: /* @__PURE__ */jsxRuntime.jsx("button", { + ...buttonProps, + onClick: () => { + if (isRunning) { + stop(); + } else { run(); - }, - children: opName - }, `${opName}-${i}`); - }) - })] - }) : /* @__PURE__ */jsxRuntime.jsx(Tooltip, { - label, - children: /* @__PURE__ */jsxRuntime.jsx("button", { - ...buttonProps, - onClick: () => { - if (isRunning) { - stop(); - } else { - run(); + } } - } - }) - }); + }) + }); + $[9] = buttonProps; + $[10] = hasOptions; + $[11] = isRunning; + $[12] = label; + $[13] = operations; + $[14] = queryEditor; + $[15] = run; + $[16] = setOperationName; + $[17] = stop; + $[18] = t5; + } else { + t5 = $[18]; + } + return t5; } -const ToolbarMenuRoot = ({ - button, - children, - label, - ...props -}) => /* @__PURE__ */jsxRuntime.jsxs(DropdownMenu, { - ...props, - children: [/* @__PURE__ */jsxRuntime.jsx(Tooltip, { - label, - children: /* @__PURE__ */jsxRuntime.jsx(DropdownMenu.Button, { - className: clsx.clsx("graphiql-un-styled graphiql-toolbar-menu", props.className), +const ToolbarMenuRoot = t0 => { + const $ = reactCompilerRuntime.c(20); + let button; + let children; + let label; + let props; + if ($[0] !== t0) { + ({ + button, + children, + label, + ...props + } = t0); + $[0] = t0; + $[1] = button; + $[2] = children; + $[3] = label; + $[4] = props; + } else { + button = $[1]; + children = $[2]; + label = $[3]; + props = $[4]; + } + let t1; + if ($[5] !== props.className) { + t1 = clsx.clsx("graphiql-un-styled graphiql-toolbar-menu", props.className); + $[5] = props.className; + $[6] = t1; + } else { + t1 = $[6]; + } + let t2; + if ($[7] !== button || $[8] !== label || $[9] !== t1) { + t2 = /* @__PURE__ */jsxRuntime.jsx(DropdownMenu.Button, { + className: t1, "aria-label": label, children: button - }) - }), /* @__PURE__ */jsxRuntime.jsx(DropdownMenu.Content, { - children - })] -}); + }); + $[7] = button; + $[8] = label; + $[9] = t1; + $[10] = t2; + } else { + t2 = $[10]; + } + let t3; + if ($[11] !== label || $[12] !== t2) { + t3 = /* @__PURE__ */jsxRuntime.jsx(Tooltip, { + label, + children: t2 + }); + $[11] = label; + $[12] = t2; + $[13] = t3; + } else { + t3 = $[13]; + } + let t4; + if ($[14] !== children) { + t4 = /* @__PURE__ */jsxRuntime.jsx(DropdownMenu.Content, { + children + }); + $[14] = children; + $[15] = t4; + } else { + t4 = $[15]; + } + let t5; + if ($[16] !== props || $[17] !== t3 || $[18] !== t4) { + t5 = /* @__PURE__ */jsxRuntime.jsxs(DropdownMenu, { + ...props, + children: [t3, t4] + }); + $[16] = props; + $[17] = t3; + $[18] = t4; + $[19] = t5; + } else { + t5 = $[19]; + } + return t5; +}; const ToolbarMenu = createComponentGroup(ToolbarMenuRoot, { Item: DropdownMenu.Item }); @@ -73311,4833 +83409,13 @@ exports.useVariablesEditorState = useVariablesEditorState; /***/ }), -/***/ "../../graphiql-react/dist/info-addon.cjs.js": -/*!***************************************************!*\ - !*** ../../graphiql-react/dist/info-addon.cjs.js ***! - \***************************************************/ -/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) { - - - -const codemirror = __webpack_require__(/*! ./codemirror.cjs.js */ "../../graphiql-react/dist/codemirror.cjs.js"); -codemirror.CodeMirror.defineOption("info", false, (cm, options, old) => { - if (old && old !== codemirror.CodeMirror.Init) { - const oldOnMouseOver = cm.state.info.onMouseOver; - codemirror.CodeMirror.off(cm.getWrapperElement(), "mouseover", oldOnMouseOver); - clearTimeout(cm.state.info.hoverTimeout); - delete cm.state.info; - } - if (options) { - const state = cm.state.info = createState(options); - state.onMouseOver = onMouseOver.bind(null, cm); - codemirror.CodeMirror.on(cm.getWrapperElement(), "mouseover", state.onMouseOver); - } -}); -function createState(options) { - return { - options: options instanceof Function ? { - render: options - } : options === true ? {} : options - }; -} -function getHoverTime(cm) { - const { - options - } = cm.state.info; - return (options === null || options === void 0 ? void 0 : options.hoverTime) || 500; -} -function onMouseOver(cm, e) { - const state = cm.state.info; - const target = e.target || e.srcElement; - if (!(target instanceof HTMLElement)) { - return; - } - if (target.nodeName !== "SPAN" || state.hoverTimeout !== void 0) { - return; - } - const box = target.getBoundingClientRect(); - const onMouseMove = function () { - clearTimeout(state.hoverTimeout); - state.hoverTimeout = setTimeout(onHover, hoverTime); - }; - const onMouseOut = function () { - codemirror.CodeMirror.off(document, "mousemove", onMouseMove); - codemirror.CodeMirror.off(cm.getWrapperElement(), "mouseout", onMouseOut); - clearTimeout(state.hoverTimeout); - state.hoverTimeout = void 0; - }; - const onHover = function () { - codemirror.CodeMirror.off(document, "mousemove", onMouseMove); - codemirror.CodeMirror.off(cm.getWrapperElement(), "mouseout", onMouseOut); - state.hoverTimeout = void 0; - onMouseHover(cm, box); - }; - const hoverTime = getHoverTime(cm); - state.hoverTimeout = setTimeout(onHover, hoverTime); - codemirror.CodeMirror.on(document, "mousemove", onMouseMove); - codemirror.CodeMirror.on(cm.getWrapperElement(), "mouseout", onMouseOut); -} -function onMouseHover(cm, box) { - const pos = cm.coordsChar({ - left: (box.left + box.right) / 2, - top: (box.top + box.bottom) / 2 - }, "window"); - const state = cm.state.info; - const { - options - } = state; - const render = options.render || cm.getHelper(pos, "info"); - if (render) { - const token = cm.getTokenAt(pos, true); - if (token) { - const info = render(token, options, cm, pos); - if (info) { - showPopup(cm, box, info); - } - } - } -} -function showPopup(cm, box, info) { - const popup = document.createElement("div"); - popup.className = "CodeMirror-info"; - popup.append(info); - document.body.append(popup); - const popupBox = popup.getBoundingClientRect(); - const popupStyle = window.getComputedStyle(popup); - const popupWidth = popupBox.right - popupBox.left + parseFloat(popupStyle.marginLeft) + parseFloat(popupStyle.marginRight); - const popupHeight = popupBox.bottom - popupBox.top + parseFloat(popupStyle.marginTop) + parseFloat(popupStyle.marginBottom); - let topPos = box.bottom; - if (popupHeight > window.innerHeight - box.bottom - 15 && box.top > window.innerHeight - box.bottom) { - topPos = box.top - popupHeight; - } - if (topPos < 0) { - topPos = box.bottom; - } - let leftPos = Math.max(0, window.innerWidth - popupWidth - 15); - if (leftPos > box.left) { - leftPos = box.left; - } - popup.style.opacity = "1"; - popup.style.top = topPos + "px"; - popup.style.left = leftPos + "px"; - let popupTimeout; - const onMouseOverPopup = function () { - clearTimeout(popupTimeout); - }; - const onMouseOut = function () { - clearTimeout(popupTimeout); - popupTimeout = setTimeout(hidePopup, 200); - }; - const hidePopup = function () { - codemirror.CodeMirror.off(popup, "mouseover", onMouseOverPopup); - codemirror.CodeMirror.off(popup, "mouseout", onMouseOut); - codemirror.CodeMirror.off(cm.getWrapperElement(), "mouseout", onMouseOut); - if (popup.style.opacity) { - popup.style.opacity = "0"; - setTimeout(() => { - if (popup.parentNode) { - popup.remove(); - } - }, 600); - } else if (popup.parentNode) { - popup.remove(); - } - }; - codemirror.CodeMirror.on(popup, "mouseover", onMouseOverPopup); - codemirror.CodeMirror.on(popup, "mouseout", onMouseOut); - codemirror.CodeMirror.on(cm.getWrapperElement(), "mouseout", onMouseOut); -} - -/***/ }), - -/***/ "../../graphiql-react/dist/info.cjs.js": -/*!*********************************************!*\ - !*** ../../graphiql-react/dist/info.cjs.js ***! - \*********************************************/ -/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) { - - - -const graphql = __webpack_require__(/*! graphql */ "../../../node_modules/graphql/index.mjs"); -const codemirror = __webpack_require__(/*! ./codemirror.cjs.js */ "../../graphiql-react/dist/codemirror.cjs.js"); -const SchemaReference = __webpack_require__(/*! ./SchemaReference.cjs.js */ "../../graphiql-react/dist/SchemaReference.cjs.js"); -__webpack_require__(/*! ./info-addon.cjs.js */ "../../graphiql-react/dist/info-addon.cjs.js"); -codemirror.CodeMirror.registerHelper("info", "graphql", (token, options) => { - var _a; - if (!options.schema || !token.state) { - return; - } - const { - kind, - step - } = token.state; - const typeInfo = SchemaReference.getTypeInfo(options.schema, token.state); - if (kind === "Field" && step === 0 && typeInfo.fieldDef || kind === "AliasedField" && step === 2 && typeInfo.fieldDef || kind === "ObjectField" && step === 0 && typeInfo.fieldDef) { - const header = document.createElement("div"); - header.className = "CodeMirror-info-header"; - renderField(header, typeInfo, options); - const into = document.createElement("div"); - into.append(header); - renderDescription(into, options, typeInfo.fieldDef); - return into; - } - if (kind === "Directive" && step === 1 && typeInfo.directiveDef) { - const header = document.createElement("div"); - header.className = "CodeMirror-info-header"; - renderDirective(header, typeInfo, options); - const into = document.createElement("div"); - into.append(header); - renderDescription(into, options, typeInfo.directiveDef); - return into; - } - if (kind === "Argument" && step === 0 && typeInfo.argDef) { - const header = document.createElement("div"); - header.className = "CodeMirror-info-header"; - renderArg(header, typeInfo, options); - const into = document.createElement("div"); - into.append(header); - renderDescription(into, options, typeInfo.argDef); - return into; - } - if (kind === "EnumValue" && ((_a = typeInfo.enumValue) === null || _a === void 0 ? void 0 : _a.description)) { - const header = document.createElement("div"); - header.className = "CodeMirror-info-header"; - renderEnumValue(header, typeInfo, options); - const into = document.createElement("div"); - into.append(header); - renderDescription(into, options, typeInfo.enumValue); - return into; - } - if (kind === "NamedType" && typeInfo.type && typeInfo.type.description) { - const header = document.createElement("div"); - header.className = "CodeMirror-info-header"; - renderType(header, typeInfo, options, typeInfo.type); - const into = document.createElement("div"); - into.append(header); - renderDescription(into, options, typeInfo.type); - return into; - } -}); -function renderField(into, typeInfo, options) { - renderQualifiedField(into, typeInfo, options); - renderTypeAnnotation(into, typeInfo, options, typeInfo.type); -} -function renderQualifiedField(into, typeInfo, options) { - var _a; - const fieldName = ((_a = typeInfo.fieldDef) === null || _a === void 0 ? void 0 : _a.name) || ""; - text(into, fieldName, "field-name", options, SchemaReference.getFieldReference(typeInfo)); -} -function renderDirective(into, typeInfo, options) { - var _a; - const name = "@" + (((_a = typeInfo.directiveDef) === null || _a === void 0 ? void 0 : _a.name) || ""); - text(into, name, "directive-name", options, SchemaReference.getDirectiveReference(typeInfo)); -} -function renderArg(into, typeInfo, options) { - var _a; - const name = ((_a = typeInfo.argDef) === null || _a === void 0 ? void 0 : _a.name) || ""; - text(into, name, "arg-name", options, SchemaReference.getArgumentReference(typeInfo)); - renderTypeAnnotation(into, typeInfo, options, typeInfo.inputType); -} -function renderEnumValue(into, typeInfo, options) { - var _a; - const name = ((_a = typeInfo.enumValue) === null || _a === void 0 ? void 0 : _a.name) || ""; - renderType(into, typeInfo, options, typeInfo.inputType); - text(into, "."); - text(into, name, "enum-value", options, SchemaReference.getEnumValueReference(typeInfo)); -} -function renderTypeAnnotation(into, typeInfo, options, t) { - const typeSpan = document.createElement("span"); - typeSpan.className = "type-name-pill"; - if (t instanceof graphql.GraphQLNonNull) { - renderType(typeSpan, typeInfo, options, t.ofType); - text(typeSpan, "!"); - } else if (t instanceof graphql.GraphQLList) { - text(typeSpan, "["); - renderType(typeSpan, typeInfo, options, t.ofType); - text(typeSpan, "]"); - } else { - text(typeSpan, (t === null || t === void 0 ? void 0 : t.name) || "", "type-name", options, SchemaReference.getTypeReference(typeInfo, t)); - } - into.append(typeSpan); -} -function renderType(into, typeInfo, options, t) { - if (t instanceof graphql.GraphQLNonNull) { - renderType(into, typeInfo, options, t.ofType); - text(into, "!"); - } else if (t instanceof graphql.GraphQLList) { - text(into, "["); - renderType(into, typeInfo, options, t.ofType); - text(into, "]"); - } else { - text(into, (t === null || t === void 0 ? void 0 : t.name) || "", "type-name", options, SchemaReference.getTypeReference(typeInfo, t)); - } -} -function renderDescription(into, options, def) { - const { - description - } = def; - if (description) { - const descriptionDiv = document.createElement("div"); - descriptionDiv.className = "info-description"; - if (options.renderDescription) { - descriptionDiv.innerHTML = options.renderDescription(description); - } else { - descriptionDiv.append(document.createTextNode(description)); - } - into.append(descriptionDiv); - } - renderDeprecation(into, options, def); -} -function renderDeprecation(into, options, def) { - const reason = def.deprecationReason; - if (reason) { - const deprecationDiv = document.createElement("div"); - deprecationDiv.className = "info-deprecation"; - into.append(deprecationDiv); - const label = document.createElement("span"); - label.className = "info-deprecation-label"; - label.append(document.createTextNode("Deprecated")); - deprecationDiv.append(label); - const reasonDiv = document.createElement("div"); - reasonDiv.className = "info-deprecation-reason"; - if (options.renderDescription) { - reasonDiv.innerHTML = options.renderDescription(reason); - } else { - reasonDiv.append(document.createTextNode(reason)); - } - deprecationDiv.append(reasonDiv); - } -} -function text(into, content, className = "", options = { - onClick: null -}, ref = null) { - if (className) { - const { - onClick - } = options; - let node; - if (onClick) { - node = document.createElement("a"); - node.href = "javascript:void 0"; - node.addEventListener("click", e => { - e.preventDefault(); - onClick(ref, e); - }); - } else { - node = document.createElement("span"); - } - node.className = className; - node.append(document.createTextNode(content)); - into.append(node); - } else { - into.append(document.createTextNode(content)); - } -} - -/***/ }), - -/***/ "../../graphiql-react/dist/javascript.cjs.js": -/*!***************************************************!*\ - !*** ../../graphiql-react/dist/javascript.cjs.js ***! - \***************************************************/ -/***/ (function(__unused_webpack_module, exports, __webpack_require__) { - - - -const codemirror = __webpack_require__(/*! ./codemirror.cjs2.js */ "../../graphiql-react/dist/codemirror.cjs2.js"); -function _mergeNamespaces(n, m) { - for (var i = 0; i < m.length; i++) { - const e = m[i]; - if (typeof e !== "string" && !Array.isArray(e)) { - for (const k in e) { - if (k !== "default" && !(k in n)) { - const d = Object.getOwnPropertyDescriptor(e, k); - if (d) { - Object.defineProperty(n, k, d.get ? d : { - enumerable: true, - get: () => e[k] - }); - } - } - } - } - } - return Object.freeze(Object.defineProperty(n, Symbol.toStringTag, { - value: "Module" - })); -} -var javascript$2 = { - exports: {} -}; -(function (module2, exports2) { - (function (mod) { - mod(codemirror.requireCodemirror()); - })(function (CodeMirror) { - CodeMirror.defineMode("javascript", function (config, parserConfig) { - var indentUnit = config.indentUnit; - var statementIndent = parserConfig.statementIndent; - var jsonldMode = parserConfig.jsonld; - var jsonMode = parserConfig.json || jsonldMode; - var trackScope = parserConfig.trackScope !== false; - var isTS = parserConfig.typescript; - var wordRE = parserConfig.wordCharacters || /[\w$\xa1-\uffff]/; - var keywords = function () { - function kw(type2) { - return { - type: type2, - style: "keyword" - }; - } - var A = kw("keyword a"), - B = kw("keyword b"), - C = kw("keyword c"), - D = kw("keyword d"); - var operator = kw("operator"), - atom = { - type: "atom", - style: "atom" - }; - return { - "if": kw("if"), - "while": A, - "with": A, - "else": B, - "do": B, - "try": B, - "finally": B, - "return": D, - "break": D, - "continue": D, - "new": kw("new"), - "delete": C, - "void": C, - "throw": C, - "debugger": kw("debugger"), - "var": kw("var"), - "const": kw("var"), - "let": kw("var"), - "function": kw("function"), - "catch": kw("catch"), - "for": kw("for"), - "switch": kw("switch"), - "case": kw("case"), - "default": kw("default"), - "in": operator, - "typeof": operator, - "instanceof": operator, - "true": atom, - "false": atom, - "null": atom, - "undefined": atom, - "NaN": atom, - "Infinity": atom, - "this": kw("this"), - "class": kw("class"), - "super": kw("atom"), - "yield": C, - "export": kw("export"), - "import": kw("import"), - "extends": C, - "await": C - }; - }(); - var isOperatorChar = /[+\-*&%=<>!?|~^@]/; - var isJsonldKeyword = /^@(context|id|value|language|type|container|list|set|reverse|index|base|vocab|graph)"/; - function readRegexp(stream) { - var escaped = false, - next, - inSet = false; - while ((next = stream.next()) != null) { - if (!escaped) { - if (next == "/" && !inSet) return; - if (next == "[") inSet = true;else if (inSet && next == "]") inSet = false; - } - escaped = !escaped && next == "\\"; - } - } - var type, content; - function ret(tp, style, cont2) { - type = tp; - content = cont2; - return style; - } - function tokenBase(stream, state) { - var ch = stream.next(); - if (ch == '"' || ch == "'") { - state.tokenize = tokenString(ch); - return state.tokenize(stream, state); - } else if (ch == "." && stream.match(/^\d[\d_]*(?:[eE][+\-]?[\d_]+)?/)) { - return ret("number", "number"); - } else if (ch == "." && stream.match("..")) { - return ret("spread", "meta"); - } else if (/[\[\]{}\(\),;\:\.]/.test(ch)) { - return ret(ch); - } else if (ch == "=" && stream.eat(">")) { - return ret("=>", "operator"); - } else if (ch == "0" && stream.match(/^(?:x[\dA-Fa-f_]+|o[0-7_]+|b[01_]+)n?/)) { - return ret("number", "number"); - } else if (/\d/.test(ch)) { - stream.match(/^[\d_]*(?:n|(?:\.[\d_]*)?(?:[eE][+\-]?[\d_]+)?)?/); - return ret("number", "number"); - } else if (ch == "/") { - if (stream.eat("*")) { - state.tokenize = tokenComment; - return tokenComment(stream, state); - } else if (stream.eat("/")) { - stream.skipToEnd(); - return ret("comment", "comment"); - } else if (expressionAllowed(stream, state, 1)) { - readRegexp(stream); - stream.match(/^\b(([gimyus])(?![gimyus]*\2))+\b/); - return ret("regexp", "string-2"); - } else { - stream.eat("="); - return ret("operator", "operator", stream.current()); - } - } else if (ch == "`") { - state.tokenize = tokenQuasi; - return tokenQuasi(stream, state); - } else if (ch == "#" && stream.peek() == "!") { - stream.skipToEnd(); - return ret("meta", "meta"); - } else if (ch == "#" && stream.eatWhile(wordRE)) { - return ret("variable", "property"); - } else if (ch == "<" && stream.match("!--") || ch == "-" && stream.match("->") && !/\S/.test(stream.string.slice(0, stream.start))) { - stream.skipToEnd(); - return ret("comment", "comment"); - } else if (isOperatorChar.test(ch)) { - if (ch != ">" || !state.lexical || state.lexical.type != ">") { - if (stream.eat("=")) { - if (ch == "!" || ch == "=") stream.eat("="); - } else if (/[<>*+\-|&?]/.test(ch)) { - stream.eat(ch); - if (ch == ">") stream.eat(ch); - } - } - if (ch == "?" && stream.eat(".")) return ret("."); - return ret("operator", "operator", stream.current()); - } else if (wordRE.test(ch)) { - stream.eatWhile(wordRE); - var word = stream.current(); - if (state.lastType != ".") { - if (keywords.propertyIsEnumerable(word)) { - var kw = keywords[word]; - return ret(kw.type, kw.style, word); - } - if (word == "async" && stream.match(/^(\s|\/\*([^*]|\*(?!\/))*?\*\/)*[\[\(\w]/, false)) return ret("async", "keyword", word); - } - return ret("variable", "variable", word); - } - } - function tokenString(quote) { - return function (stream, state) { - var escaped = false, - next; - if (jsonldMode && stream.peek() == "@" && stream.match(isJsonldKeyword)) { - state.tokenize = tokenBase; - return ret("jsonld-keyword", "meta"); - } - while ((next = stream.next()) != null) { - if (next == quote && !escaped) break; - escaped = !escaped && next == "\\"; - } - if (!escaped) state.tokenize = tokenBase; - return ret("string", "string"); - }; - } - function tokenComment(stream, state) { - var maybeEnd = false, - ch; - while (ch = stream.next()) { - if (ch == "/" && maybeEnd) { - state.tokenize = tokenBase; - break; - } - maybeEnd = ch == "*"; - } - return ret("comment", "comment"); - } - function tokenQuasi(stream, state) { - var escaped = false, - next; - while ((next = stream.next()) != null) { - if (!escaped && (next == "`" || next == "$" && stream.eat("{"))) { - state.tokenize = tokenBase; - break; - } - escaped = !escaped && next == "\\"; - } - return ret("quasi", "string-2", stream.current()); - } - var brackets = "([{}])"; - function findFatArrow(stream, state) { - if (state.fatArrowAt) state.fatArrowAt = null; - var arrow = stream.string.indexOf("=>", stream.start); - if (arrow < 0) return; - if (isTS) { - var m = /:\s*(?:\w+(?:<[^>]*>|\[\])?|\{[^}]*\})\s*$/.exec(stream.string.slice(stream.start, arrow)); - if (m) arrow = m.index; - } - var depth = 0, - sawSomething = false; - for (var pos = arrow - 1; pos >= 0; --pos) { - var ch = stream.string.charAt(pos); - var bracket = brackets.indexOf(ch); - if (bracket >= 0 && bracket < 3) { - if (!depth) { - ++pos; - break; - } - if (--depth == 0) { - if (ch == "(") sawSomething = true; - break; - } - } else if (bracket >= 3 && bracket < 6) { - ++depth; - } else if (wordRE.test(ch)) { - sawSomething = true; - } else if (/["'\/`]/.test(ch)) { - for (;; --pos) { - if (pos == 0) return; - var next = stream.string.charAt(pos - 1); - if (next == ch && stream.string.charAt(pos - 2) != "\\") { - pos--; - break; - } - } - } else if (sawSomething && !depth) { - ++pos; - break; - } - } - if (sawSomething && !depth) state.fatArrowAt = pos; - } - var atomicTypes = { - "atom": true, - "number": true, - "variable": true, - "string": true, - "regexp": true, - "this": true, - "import": true, - "jsonld-keyword": true - }; - function JSLexical(indented, column, type2, align, prev, info) { - this.indented = indented; - this.column = column; - this.type = type2; - this.prev = prev; - this.info = info; - if (align != null) this.align = align; - } - function inScope(state, varname) { - if (!trackScope) return false; - for (var v = state.localVars; v; v = v.next) if (v.name == varname) return true; - for (var cx2 = state.context; cx2; cx2 = cx2.prev) { - for (var v = cx2.vars; v; v = v.next) if (v.name == varname) return true; - } - } - function parseJS(state, style, type2, content2, stream) { - var cc = state.cc; - cx.state = state; - cx.stream = stream; - cx.marked = null, cx.cc = cc; - cx.style = style; - if (!state.lexical.hasOwnProperty("align")) state.lexical.align = true; - while (true) { - var combinator = cc.length ? cc.pop() : jsonMode ? expression : statement; - if (combinator(type2, content2)) { - while (cc.length && cc[cc.length - 1].lex) cc.pop()(); - if (cx.marked) return cx.marked; - if (type2 == "variable" && inScope(state, content2)) return "variable-2"; - return style; - } - } - } - var cx = { - state: null, - column: null, - marked: null, - cc: null - }; - function pass() { - for (var i = arguments.length - 1; i >= 0; i--) cx.cc.push(arguments[i]); - } - function cont() { - pass.apply(null, arguments); - return true; - } - function inList(name, list) { - for (var v = list; v; v = v.next) if (v.name == name) return true; - return false; - } - function register(varname) { - var state = cx.state; - cx.marked = "def"; - if (!trackScope) return; - if (state.context) { - if (state.lexical.info == "var" && state.context && state.context.block) { - var newContext = registerVarScoped(varname, state.context); - if (newContext != null) { - state.context = newContext; - return; - } - } else if (!inList(varname, state.localVars)) { - state.localVars = new Var(varname, state.localVars); - return; - } - } - if (parserConfig.globalVars && !inList(varname, state.globalVars)) state.globalVars = new Var(varname, state.globalVars); - } - function registerVarScoped(varname, context) { - if (!context) { - return null; - } else if (context.block) { - var inner = registerVarScoped(varname, context.prev); - if (!inner) return null; - if (inner == context.prev) return context; - return new Context(inner, context.vars, true); - } else if (inList(varname, context.vars)) { - return context; - } else { - return new Context(context.prev, new Var(varname, context.vars), false); - } - } - function isModifier(name) { - return name == "public" || name == "private" || name == "protected" || name == "abstract" || name == "readonly"; - } - function Context(prev, vars, block2) { - this.prev = prev; - this.vars = vars; - this.block = block2; - } - function Var(name, next) { - this.name = name; - this.next = next; - } - var defaultVars = new Var("this", new Var("arguments", null)); - function pushcontext() { - cx.state.context = new Context(cx.state.context, cx.state.localVars, false); - cx.state.localVars = defaultVars; - } - function pushblockcontext() { - cx.state.context = new Context(cx.state.context, cx.state.localVars, true); - cx.state.localVars = null; - } - pushcontext.lex = pushblockcontext.lex = true; - function popcontext() { - cx.state.localVars = cx.state.context.vars; - cx.state.context = cx.state.context.prev; - } - popcontext.lex = true; - function pushlex(type2, info) { - var result = function () { - var state = cx.state, - indent = state.indented; - if (state.lexical.type == "stat") indent = state.lexical.indented;else for (var outer = state.lexical; outer && outer.type == ")" && outer.align; outer = outer.prev) indent = outer.indented; - state.lexical = new JSLexical(indent, cx.stream.column(), type2, null, state.lexical, info); - }; - result.lex = true; - return result; - } - function poplex() { - var state = cx.state; - if (state.lexical.prev) { - if (state.lexical.type == ")") state.indented = state.lexical.indented; - state.lexical = state.lexical.prev; - } - } - poplex.lex = true; - function expect(wanted) { - function exp(type2) { - if (type2 == wanted) return cont();else if (wanted == ";" || type2 == "}" || type2 == ")" || type2 == "]") return pass();else return cont(exp); - } - return exp; - } - function statement(type2, value) { - if (type2 == "var") return cont(pushlex("vardef", value), vardef, expect(";"), poplex); - if (type2 == "keyword a") return cont(pushlex("form"), parenExpr, statement, poplex); - if (type2 == "keyword b") return cont(pushlex("form"), statement, poplex); - if (type2 == "keyword d") return cx.stream.match(/^\s*$/, false) ? cont() : cont(pushlex("stat"), maybeexpression, expect(";"), poplex); - if (type2 == "debugger") return cont(expect(";")); - if (type2 == "{") return cont(pushlex("}"), pushblockcontext, block, poplex, popcontext); - if (type2 == ";") return cont(); - if (type2 == "if") { - if (cx.state.lexical.info == "else" && cx.state.cc[cx.state.cc.length - 1] == poplex) cx.state.cc.pop()(); - return cont(pushlex("form"), parenExpr, statement, poplex, maybeelse); - } - if (type2 == "function") return cont(functiondef); - if (type2 == "for") return cont(pushlex("form"), pushblockcontext, forspec, statement, popcontext, poplex); - if (type2 == "class" || isTS && value == "interface") { - cx.marked = "keyword"; - return cont(pushlex("form", type2 == "class" ? type2 : value), className, poplex); - } - if (type2 == "variable") { - if (isTS && value == "declare") { - cx.marked = "keyword"; - return cont(statement); - } else if (isTS && (value == "module" || value == "enum" || value == "type") && cx.stream.match(/^\s*\w/, false)) { - cx.marked = "keyword"; - if (value == "enum") return cont(enumdef);else if (value == "type") return cont(typename, expect("operator"), typeexpr, expect(";"));else return cont(pushlex("form"), pattern, expect("{"), pushlex("}"), block, poplex, poplex); - } else if (isTS && value == "namespace") { - cx.marked = "keyword"; - return cont(pushlex("form"), expression, statement, poplex); - } else if (isTS && value == "abstract") { - cx.marked = "keyword"; - return cont(statement); - } else { - return cont(pushlex("stat"), maybelabel); - } - } - if (type2 == "switch") return cont(pushlex("form"), parenExpr, expect("{"), pushlex("}", "switch"), pushblockcontext, block, poplex, poplex, popcontext); - if (type2 == "case") return cont(expression, expect(":")); - if (type2 == "default") return cont(expect(":")); - if (type2 == "catch") return cont(pushlex("form"), pushcontext, maybeCatchBinding, statement, poplex, popcontext); - if (type2 == "export") return cont(pushlex("stat"), afterExport, poplex); - if (type2 == "import") return cont(pushlex("stat"), afterImport, poplex); - if (type2 == "async") return cont(statement); - if (value == "@") return cont(expression, statement); - return pass(pushlex("stat"), expression, expect(";"), poplex); - } - function maybeCatchBinding(type2) { - if (type2 == "(") return cont(funarg, expect(")")); - } - function expression(type2, value) { - return expressionInner(type2, value, false); - } - function expressionNoComma(type2, value) { - return expressionInner(type2, value, true); - } - function parenExpr(type2) { - if (type2 != "(") return pass(); - return cont(pushlex(")"), maybeexpression, expect(")"), poplex); - } - function expressionInner(type2, value, noComma) { - if (cx.state.fatArrowAt == cx.stream.start) { - var body = noComma ? arrowBodyNoComma : arrowBody; - if (type2 == "(") return cont(pushcontext, pushlex(")"), commasep(funarg, ")"), poplex, expect("=>"), body, popcontext);else if (type2 == "variable") return pass(pushcontext, pattern, expect("=>"), body, popcontext); - } - var maybeop = noComma ? maybeoperatorNoComma : maybeoperatorComma; - if (atomicTypes.hasOwnProperty(type2)) return cont(maybeop); - if (type2 == "function") return cont(functiondef, maybeop); - if (type2 == "class" || isTS && value == "interface") { - cx.marked = "keyword"; - return cont(pushlex("form"), classExpression, poplex); - } - if (type2 == "keyword c" || type2 == "async") return cont(noComma ? expressionNoComma : expression); - if (type2 == "(") return cont(pushlex(")"), maybeexpression, expect(")"), poplex, maybeop); - if (type2 == "operator" || type2 == "spread") return cont(noComma ? expressionNoComma : expression); - if (type2 == "[") return cont(pushlex("]"), arrayLiteral, poplex, maybeop); - if (type2 == "{") return contCommasep(objprop, "}", null, maybeop); - if (type2 == "quasi") return pass(quasi, maybeop); - if (type2 == "new") return cont(maybeTarget(noComma)); - return cont(); - } - function maybeexpression(type2) { - if (type2.match(/[;\}\)\],]/)) return pass(); - return pass(expression); - } - function maybeoperatorComma(type2, value) { - if (type2 == ",") return cont(maybeexpression); - return maybeoperatorNoComma(type2, value, false); - } - function maybeoperatorNoComma(type2, value, noComma) { - var me = noComma == false ? maybeoperatorComma : maybeoperatorNoComma; - var expr = noComma == false ? expression : expressionNoComma; - if (type2 == "=>") return cont(pushcontext, noComma ? arrowBodyNoComma : arrowBody, popcontext); - if (type2 == "operator") { - if (/\+\+|--/.test(value) || isTS && value == "!") return cont(me); - if (isTS && value == "<" && cx.stream.match(/^([^<>]|<[^<>]*>)*>\s*\(/, false)) return cont(pushlex(">"), commasep(typeexpr, ">"), poplex, me); - if (value == "?") return cont(expression, expect(":"), expr); - return cont(expr); - } - if (type2 == "quasi") { - return pass(quasi, me); - } - if (type2 == ";") return; - if (type2 == "(") return contCommasep(expressionNoComma, ")", "call", me); - if (type2 == ".") return cont(property, me); - if (type2 == "[") return cont(pushlex("]"), maybeexpression, expect("]"), poplex, me); - if (isTS && value == "as") { - cx.marked = "keyword"; - return cont(typeexpr, me); - } - if (type2 == "regexp") { - cx.state.lastType = cx.marked = "operator"; - cx.stream.backUp(cx.stream.pos - cx.stream.start - 1); - return cont(expr); - } - } - function quasi(type2, value) { - if (type2 != "quasi") return pass(); - if (value.slice(value.length - 2) != "${") return cont(quasi); - return cont(maybeexpression, continueQuasi); - } - function continueQuasi(type2) { - if (type2 == "}") { - cx.marked = "string-2"; - cx.state.tokenize = tokenQuasi; - return cont(quasi); - } - } - function arrowBody(type2) { - findFatArrow(cx.stream, cx.state); - return pass(type2 == "{" ? statement : expression); - } - function arrowBodyNoComma(type2) { - findFatArrow(cx.stream, cx.state); - return pass(type2 == "{" ? statement : expressionNoComma); - } - function maybeTarget(noComma) { - return function (type2) { - if (type2 == ".") return cont(noComma ? targetNoComma : target);else if (type2 == "variable" && isTS) return cont(maybeTypeArgs, noComma ? maybeoperatorNoComma : maybeoperatorComma);else return pass(noComma ? expressionNoComma : expression); - }; - } - function target(_, value) { - if (value == "target") { - cx.marked = "keyword"; - return cont(maybeoperatorComma); - } - } - function targetNoComma(_, value) { - if (value == "target") { - cx.marked = "keyword"; - return cont(maybeoperatorNoComma); - } - } - function maybelabel(type2) { - if (type2 == ":") return cont(poplex, statement); - return pass(maybeoperatorComma, expect(";"), poplex); - } - function property(type2) { - if (type2 == "variable") { - cx.marked = "property"; - return cont(); - } - } - function objprop(type2, value) { - if (type2 == "async") { - cx.marked = "property"; - return cont(objprop); - } else if (type2 == "variable" || cx.style == "keyword") { - cx.marked = "property"; - if (value == "get" || value == "set") return cont(getterSetter); - var m; - if (isTS && cx.state.fatArrowAt == cx.stream.start && (m = cx.stream.match(/^\s*:\s*/, false))) cx.state.fatArrowAt = cx.stream.pos + m[0].length; - return cont(afterprop); - } else if (type2 == "number" || type2 == "string") { - cx.marked = jsonldMode ? "property" : cx.style + " property"; - return cont(afterprop); - } else if (type2 == "jsonld-keyword") { - return cont(afterprop); - } else if (isTS && isModifier(value)) { - cx.marked = "keyword"; - return cont(objprop); - } else if (type2 == "[") { - return cont(expression, maybetype, expect("]"), afterprop); - } else if (type2 == "spread") { - return cont(expressionNoComma, afterprop); - } else if (value == "*") { - cx.marked = "keyword"; - return cont(objprop); - } else if (type2 == ":") { - return pass(afterprop); - } - } - function getterSetter(type2) { - if (type2 != "variable") return pass(afterprop); - cx.marked = "property"; - return cont(functiondef); - } - function afterprop(type2) { - if (type2 == ":") return cont(expressionNoComma); - if (type2 == "(") return pass(functiondef); - } - function commasep(what, end, sep) { - function proceed(type2, value) { - if (sep ? sep.indexOf(type2) > -1 : type2 == ",") { - var lex = cx.state.lexical; - if (lex.info == "call") lex.pos = (lex.pos || 0) + 1; - return cont(function (type3, value2) { - if (type3 == end || value2 == end) return pass(); - return pass(what); - }, proceed); - } - if (type2 == end || value == end) return cont(); - if (sep && sep.indexOf(";") > -1) return pass(what); - return cont(expect(end)); - } - return function (type2, value) { - if (type2 == end || value == end) return cont(); - return pass(what, proceed); - }; - } - function contCommasep(what, end, info) { - for (var i = 3; i < arguments.length; i++) cx.cc.push(arguments[i]); - return cont(pushlex(end, info), commasep(what, end), poplex); - } - function block(type2) { - if (type2 == "}") return cont(); - return pass(statement, block); - } - function maybetype(type2, value) { - if (isTS) { - if (type2 == ":") return cont(typeexpr); - if (value == "?") return cont(maybetype); - } - } - function maybetypeOrIn(type2, value) { - if (isTS && (type2 == ":" || value == "in")) return cont(typeexpr); - } - function mayberettype(type2) { - if (isTS && type2 == ":") { - if (cx.stream.match(/^\s*\w+\s+is\b/, false)) return cont(expression, isKW, typeexpr);else return cont(typeexpr); - } - } - function isKW(_, value) { - if (value == "is") { - cx.marked = "keyword"; - return cont(); - } - } - function typeexpr(type2, value) { - if (value == "keyof" || value == "typeof" || value == "infer" || value == "readonly") { - cx.marked = "keyword"; - return cont(value == "typeof" ? expressionNoComma : typeexpr); - } - if (type2 == "variable" || value == "void") { - cx.marked = "type"; - return cont(afterType); - } - if (value == "|" || value == "&") return cont(typeexpr); - if (type2 == "string" || type2 == "number" || type2 == "atom") return cont(afterType); - if (type2 == "[") return cont(pushlex("]"), commasep(typeexpr, "]", ","), poplex, afterType); - if (type2 == "{") return cont(pushlex("}"), typeprops, poplex, afterType); - if (type2 == "(") return cont(commasep(typearg, ")"), maybeReturnType, afterType); - if (type2 == "<") return cont(commasep(typeexpr, ">"), typeexpr); - if (type2 == "quasi") { - return pass(quasiType, afterType); - } - } - function maybeReturnType(type2) { - if (type2 == "=>") return cont(typeexpr); - } - function typeprops(type2) { - if (type2.match(/[\}\)\]]/)) return cont(); - if (type2 == "," || type2 == ";") return cont(typeprops); - return pass(typeprop, typeprops); - } - function typeprop(type2, value) { - if (type2 == "variable" || cx.style == "keyword") { - cx.marked = "property"; - return cont(typeprop); - } else if (value == "?" || type2 == "number" || type2 == "string") { - return cont(typeprop); - } else if (type2 == ":") { - return cont(typeexpr); - } else if (type2 == "[") { - return cont(expect("variable"), maybetypeOrIn, expect("]"), typeprop); - } else if (type2 == "(") { - return pass(functiondecl, typeprop); - } else if (!type2.match(/[;\}\)\],]/)) { - return cont(); - } - } - function quasiType(type2, value) { - if (type2 != "quasi") return pass(); - if (value.slice(value.length - 2) != "${") return cont(quasiType); - return cont(typeexpr, continueQuasiType); - } - function continueQuasiType(type2) { - if (type2 == "}") { - cx.marked = "string-2"; - cx.state.tokenize = tokenQuasi; - return cont(quasiType); - } - } - function typearg(type2, value) { - if (type2 == "variable" && cx.stream.match(/^\s*[?:]/, false) || value == "?") return cont(typearg); - if (type2 == ":") return cont(typeexpr); - if (type2 == "spread") return cont(typearg); - return pass(typeexpr); - } - function afterType(type2, value) { - if (value == "<") return cont(pushlex(">"), commasep(typeexpr, ">"), poplex, afterType); - if (value == "|" || type2 == "." || value == "&") return cont(typeexpr); - if (type2 == "[") return cont(typeexpr, expect("]"), afterType); - if (value == "extends" || value == "implements") { - cx.marked = "keyword"; - return cont(typeexpr); - } - if (value == "?") return cont(typeexpr, expect(":"), typeexpr); - } - function maybeTypeArgs(_, value) { - if (value == "<") return cont(pushlex(">"), commasep(typeexpr, ">"), poplex, afterType); - } - function typeparam() { - return pass(typeexpr, maybeTypeDefault); - } - function maybeTypeDefault(_, value) { - if (value == "=") return cont(typeexpr); - } - function vardef(_, value) { - if (value == "enum") { - cx.marked = "keyword"; - return cont(enumdef); - } - return pass(pattern, maybetype, maybeAssign, vardefCont); - } - function pattern(type2, value) { - if (isTS && isModifier(value)) { - cx.marked = "keyword"; - return cont(pattern); - } - if (type2 == "variable") { - register(value); - return cont(); - } - if (type2 == "spread") return cont(pattern); - if (type2 == "[") return contCommasep(eltpattern, "]"); - if (type2 == "{") return contCommasep(proppattern, "}"); - } - function proppattern(type2, value) { - if (type2 == "variable" && !cx.stream.match(/^\s*:/, false)) { - register(value); - return cont(maybeAssign); - } - if (type2 == "variable") cx.marked = "property"; - if (type2 == "spread") return cont(pattern); - if (type2 == "}") return pass(); - if (type2 == "[") return cont(expression, expect("]"), expect(":"), proppattern); - return cont(expect(":"), pattern, maybeAssign); - } - function eltpattern() { - return pass(pattern, maybeAssign); - } - function maybeAssign(_type, value) { - if (value == "=") return cont(expressionNoComma); - } - function vardefCont(type2) { - if (type2 == ",") return cont(vardef); - } - function maybeelse(type2, value) { - if (type2 == "keyword b" && value == "else") return cont(pushlex("form", "else"), statement, poplex); - } - function forspec(type2, value) { - if (value == "await") return cont(forspec); - if (type2 == "(") return cont(pushlex(")"), forspec1, poplex); - } - function forspec1(type2) { - if (type2 == "var") return cont(vardef, forspec2); - if (type2 == "variable") return cont(forspec2); - return pass(forspec2); - } - function forspec2(type2, value) { - if (type2 == ")") return cont(); - if (type2 == ";") return cont(forspec2); - if (value == "in" || value == "of") { - cx.marked = "keyword"; - return cont(expression, forspec2); - } - return pass(expression, forspec2); - } - function functiondef(type2, value) { - if (value == "*") { - cx.marked = "keyword"; - return cont(functiondef); - } - if (type2 == "variable") { - register(value); - return cont(functiondef); - } - if (type2 == "(") return cont(pushcontext, pushlex(")"), commasep(funarg, ")"), poplex, mayberettype, statement, popcontext); - if (isTS && value == "<") return cont(pushlex(">"), commasep(typeparam, ">"), poplex, functiondef); - } - function functiondecl(type2, value) { - if (value == "*") { - cx.marked = "keyword"; - return cont(functiondecl); - } - if (type2 == "variable") { - register(value); - return cont(functiondecl); - } - if (type2 == "(") return cont(pushcontext, pushlex(")"), commasep(funarg, ")"), poplex, mayberettype, popcontext); - if (isTS && value == "<") return cont(pushlex(">"), commasep(typeparam, ">"), poplex, functiondecl); - } - function typename(type2, value) { - if (type2 == "keyword" || type2 == "variable") { - cx.marked = "type"; - return cont(typename); - } else if (value == "<") { - return cont(pushlex(">"), commasep(typeparam, ">"), poplex); - } - } - function funarg(type2, value) { - if (value == "@") cont(expression, funarg); - if (type2 == "spread") return cont(funarg); - if (isTS && isModifier(value)) { - cx.marked = "keyword"; - return cont(funarg); - } - if (isTS && type2 == "this") return cont(maybetype, maybeAssign); - return pass(pattern, maybetype, maybeAssign); - } - function classExpression(type2, value) { - if (type2 == "variable") return className(type2, value); - return classNameAfter(type2, value); - } - function className(type2, value) { - if (type2 == "variable") { - register(value); - return cont(classNameAfter); - } - } - function classNameAfter(type2, value) { - if (value == "<") return cont(pushlex(">"), commasep(typeparam, ">"), poplex, classNameAfter); - if (value == "extends" || value == "implements" || isTS && type2 == ",") { - if (value == "implements") cx.marked = "keyword"; - return cont(isTS ? typeexpr : expression, classNameAfter); - } - if (type2 == "{") return cont(pushlex("}"), classBody, poplex); - } - function classBody(type2, value) { - if (type2 == "async" || type2 == "variable" && (value == "static" || value == "get" || value == "set" || isTS && isModifier(value)) && cx.stream.match(/^\s+[\w$\xa1-\uffff]/, false)) { - cx.marked = "keyword"; - return cont(classBody); - } - if (type2 == "variable" || cx.style == "keyword") { - cx.marked = "property"; - return cont(classfield, classBody); - } - if (type2 == "number" || type2 == "string") return cont(classfield, classBody); - if (type2 == "[") return cont(expression, maybetype, expect("]"), classfield, classBody); - if (value == "*") { - cx.marked = "keyword"; - return cont(classBody); - } - if (isTS && type2 == "(") return pass(functiondecl, classBody); - if (type2 == ";" || type2 == ",") return cont(classBody); - if (type2 == "}") return cont(); - if (value == "@") return cont(expression, classBody); - } - function classfield(type2, value) { - if (value == "!") return cont(classfield); - if (value == "?") return cont(classfield); - if (type2 == ":") return cont(typeexpr, maybeAssign); - if (value == "=") return cont(expressionNoComma); - var context = cx.state.lexical.prev, - isInterface = context && context.info == "interface"; - return pass(isInterface ? functiondecl : functiondef); - } - function afterExport(type2, value) { - if (value == "*") { - cx.marked = "keyword"; - return cont(maybeFrom, expect(";")); - } - if (value == "default") { - cx.marked = "keyword"; - return cont(expression, expect(";")); - } - if (type2 == "{") return cont(commasep(exportField, "}"), maybeFrom, expect(";")); - return pass(statement); - } - function exportField(type2, value) { - if (value == "as") { - cx.marked = "keyword"; - return cont(expect("variable")); - } - if (type2 == "variable") return pass(expressionNoComma, exportField); - } - function afterImport(type2) { - if (type2 == "string") return cont(); - if (type2 == "(") return pass(expression); - if (type2 == ".") return pass(maybeoperatorComma); - return pass(importSpec, maybeMoreImports, maybeFrom); - } - function importSpec(type2, value) { - if (type2 == "{") return contCommasep(importSpec, "}"); - if (type2 == "variable") register(value); - if (value == "*") cx.marked = "keyword"; - return cont(maybeAs); - } - function maybeMoreImports(type2) { - if (type2 == ",") return cont(importSpec, maybeMoreImports); - } - function maybeAs(_type, value) { - if (value == "as") { - cx.marked = "keyword"; - return cont(importSpec); - } - } - function maybeFrom(_type, value) { - if (value == "from") { - cx.marked = "keyword"; - return cont(expression); - } - } - function arrayLiteral(type2) { - if (type2 == "]") return cont(); - return pass(commasep(expressionNoComma, "]")); - } - function enumdef() { - return pass(pushlex("form"), pattern, expect("{"), pushlex("}"), commasep(enummember, "}"), poplex, poplex); - } - function enummember() { - return pass(pattern, maybeAssign); - } - function isContinuedStatement(state, textAfter) { - return state.lastType == "operator" || state.lastType == "," || isOperatorChar.test(textAfter.charAt(0)) || /[,.]/.test(textAfter.charAt(0)); - } - function expressionAllowed(stream, state, backUp) { - return state.tokenize == tokenBase && /^(?:operator|sof|keyword [bcd]|case|new|export|default|spread|[\[{}\(,;:]|=>)$/.test(state.lastType) || state.lastType == "quasi" && /\{\s*$/.test(stream.string.slice(0, stream.pos - (backUp || 0))); - } - return { - startState: function (basecolumn) { - var state = { - tokenize: tokenBase, - lastType: "sof", - cc: [], - lexical: new JSLexical((basecolumn || 0) - indentUnit, 0, "block", false), - localVars: parserConfig.localVars, - context: parserConfig.localVars && new Context(null, null, false), - indented: basecolumn || 0 - }; - if (parserConfig.globalVars && typeof parserConfig.globalVars == "object") state.globalVars = parserConfig.globalVars; - return state; - }, - token: function (stream, state) { - if (stream.sol()) { - if (!state.lexical.hasOwnProperty("align")) state.lexical.align = false; - state.indented = stream.indentation(); - findFatArrow(stream, state); - } - if (state.tokenize != tokenComment && stream.eatSpace()) return null; - var style = state.tokenize(stream, state); - if (type == "comment") return style; - state.lastType = type == "operator" && (content == "++" || content == "--") ? "incdec" : type; - return parseJS(state, style, type, content, stream); - }, - indent: function (state, textAfter) { - if (state.tokenize == tokenComment || state.tokenize == tokenQuasi) return CodeMirror.Pass; - if (state.tokenize != tokenBase) return 0; - var firstChar = textAfter && textAfter.charAt(0), - lexical = state.lexical, - top; - if (!/^\s*else\b/.test(textAfter)) for (var i = state.cc.length - 1; i >= 0; --i) { - var c = state.cc[i]; - if (c == poplex) lexical = lexical.prev;else if (c != maybeelse && c != popcontext) break; - } - while ((lexical.type == "stat" || lexical.type == "form") && (firstChar == "}" || (top = state.cc[state.cc.length - 1]) && (top == maybeoperatorComma || top == maybeoperatorNoComma) && !/^[,\.=+\-*:?[\(]/.test(textAfter))) lexical = lexical.prev; - if (statementIndent && lexical.type == ")" && lexical.prev.type == "stat") lexical = lexical.prev; - var type2 = lexical.type, - closing = firstChar == type2; - if (type2 == "vardef") return lexical.indented + (state.lastType == "operator" || state.lastType == "," ? lexical.info.length + 1 : 0);else if (type2 == "form" && firstChar == "{") return lexical.indented;else if (type2 == "form") return lexical.indented + indentUnit;else if (type2 == "stat") return lexical.indented + (isContinuedStatement(state, textAfter) ? statementIndent || indentUnit : 0);else if (lexical.info == "switch" && !closing && parserConfig.doubleIndentSwitch != false) return lexical.indented + (/^(?:case|default)\b/.test(textAfter) ? indentUnit : 2 * indentUnit);else if (lexical.align) return lexical.column + (closing ? 0 : 1);else return lexical.indented + (closing ? 0 : indentUnit); - }, - electricInput: /^\s*(?:case .*?:|default:|\{|\})$/, - blockCommentStart: jsonMode ? null : "/*", - blockCommentEnd: jsonMode ? null : "*/", - blockCommentContinue: jsonMode ? null : " * ", - lineComment: jsonMode ? null : "//", - fold: "brace", - closeBrackets: "()[]{}''\"\"``", - helperType: jsonMode ? "json" : "javascript", - jsonldMode, - jsonMode, - expressionAllowed, - skipExpression: function (state) { - parseJS(state, "atom", "atom", "true", new CodeMirror.StringStream("", 2, null)); - } - }; - }); - CodeMirror.registerHelper("wordChars", "javascript", /[\w$]/); - CodeMirror.defineMIME("text/javascript", "javascript"); - CodeMirror.defineMIME("text/ecmascript", "javascript"); - CodeMirror.defineMIME("application/javascript", "javascript"); - CodeMirror.defineMIME("application/x-javascript", "javascript"); - CodeMirror.defineMIME("application/ecmascript", "javascript"); - CodeMirror.defineMIME("application/json", { - name: "javascript", - json: true - }); - CodeMirror.defineMIME("application/x-json", { - name: "javascript", - json: true - }); - CodeMirror.defineMIME("application/manifest+json", { - name: "javascript", - json: true - }); - CodeMirror.defineMIME("application/ld+json", { - name: "javascript", - jsonld: true - }); - CodeMirror.defineMIME("text/typescript", { - name: "javascript", - typescript: true - }); - CodeMirror.defineMIME("application/typescript", { - name: "javascript", - typescript: true - }); - }); -})(); -var javascriptExports = javascript$2.exports; -const javascript = /* @__PURE__ */codemirror.getDefaultExportFromCjs(javascriptExports); -const javascript$1 = /* @__PURE__ */_mergeNamespaces({ - __proto__: null, - default: javascript -}, [javascriptExports]); -exports.javascript = javascript$1; - -/***/ }), - -/***/ "../../graphiql-react/dist/jump-to-line.cjs.js": -/*!*****************************************************!*\ - !*** ../../graphiql-react/dist/jump-to-line.cjs.js ***! - \*****************************************************/ -/***/ (function(__unused_webpack_module, exports, __webpack_require__) { - - - -const codemirror = __webpack_require__(/*! ./codemirror.cjs2.js */ "../../graphiql-react/dist/codemirror.cjs2.js"); -const dialog = __webpack_require__(/*! ./dialog.cjs.js */ "../../graphiql-react/dist/dialog.cjs.js"); -function _mergeNamespaces(n, m) { - for (var i = 0; i < m.length; i++) { - const e = m[i]; - if (typeof e !== "string" && !Array.isArray(e)) { - for (const k in e) { - if (k !== "default" && !(k in n)) { - const d = Object.getOwnPropertyDescriptor(e, k); - if (d) { - Object.defineProperty(n, k, d.get ? d : { - enumerable: true, - get: () => e[k] - }); - } - } - } - } - } - return Object.freeze(Object.defineProperty(n, Symbol.toStringTag, { - value: "Module" - })); -} -var jumpToLine$2 = { - exports: {} -}; -(function (module2, exports2) { - (function (mod) { - mod(codemirror.requireCodemirror(), dialog.dialogExports); - })(function (CodeMirror) { - CodeMirror.defineOption("search", { - bottom: false - }); - function dialog2(cm, text, shortText, deflt, f) { - if (cm.openDialog) cm.openDialog(text, f, { - value: deflt, - selectValueOnOpen: true, - bottom: cm.options.search.bottom - });else f(prompt(shortText, deflt)); - } - function getJumpDialog(cm) { - return cm.phrase("Jump to line:") + ' ' + cm.phrase("(Use line:column or scroll% syntax)") + ""; - } - function interpretLine(cm, string) { - var num = Number(string); - if (/^[-+]/.test(string)) return cm.getCursor().line + num;else return num - 1; - } - CodeMirror.commands.jumpToLine = function (cm) { - var cur = cm.getCursor(); - dialog2(cm, getJumpDialog(cm), cm.phrase("Jump to line:"), cur.line + 1 + ":" + cur.ch, function (posStr) { - if (!posStr) return; - var match; - if (match = /^\s*([\+\-]?\d+)\s*\:\s*(\d+)\s*$/.exec(posStr)) { - cm.setCursor(interpretLine(cm, match[1]), Number(match[2])); - } else if (match = /^\s*([\+\-]?\d+(\.\d+)?)\%\s*/.exec(posStr)) { - var line = Math.round(cm.lineCount() * Number(match[1]) / 100); - if (/^[-+]/.test(match[1])) line = cur.line + line + 1; - cm.setCursor(line - 1, cur.ch); - } else if (match = /^\s*\:?\s*([\+\-]?\d+)\s*/.exec(posStr)) { - cm.setCursor(interpretLine(cm, match[1]), cur.ch); - } - }); - }; - CodeMirror.keyMap["default"]["Alt-G"] = "jumpToLine"; - }); -})(); -var jumpToLineExports = jumpToLine$2.exports; -const jumpToLine = /* @__PURE__ */codemirror.getDefaultExportFromCjs(jumpToLineExports); -const jumpToLine$1 = /* @__PURE__ */_mergeNamespaces({ - __proto__: null, - default: jumpToLine -}, [jumpToLineExports]); -exports.jumpToLine = jumpToLine$1; - -/***/ }), - -/***/ "../../graphiql-react/dist/jump.cjs.js": -/*!*********************************************!*\ - !*** ../../graphiql-react/dist/jump.cjs.js ***! - \*********************************************/ -/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) { - - - -const codemirror = __webpack_require__(/*! ./codemirror.cjs.js */ "../../graphiql-react/dist/codemirror.cjs.js"); -const SchemaReference = __webpack_require__(/*! ./SchemaReference.cjs.js */ "../../graphiql-react/dist/SchemaReference.cjs.js"); -codemirror.CodeMirror.defineOption("jump", false, (cm, options, old) => { - if (old && old !== codemirror.CodeMirror.Init) { - const oldOnMouseOver = cm.state.jump.onMouseOver; - codemirror.CodeMirror.off(cm.getWrapperElement(), "mouseover", oldOnMouseOver); - const oldOnMouseOut = cm.state.jump.onMouseOut; - codemirror.CodeMirror.off(cm.getWrapperElement(), "mouseout", oldOnMouseOut); - codemirror.CodeMirror.off(document, "keydown", cm.state.jump.onKeyDown); - delete cm.state.jump; - } - if (options) { - const state = cm.state.jump = { - options, - onMouseOver: onMouseOver.bind(null, cm), - onMouseOut: onMouseOut.bind(null, cm), - onKeyDown: onKeyDown.bind(null, cm) - }; - codemirror.CodeMirror.on(cm.getWrapperElement(), "mouseover", state.onMouseOver); - codemirror.CodeMirror.on(cm.getWrapperElement(), "mouseout", state.onMouseOut); - codemirror.CodeMirror.on(document, "keydown", state.onKeyDown); - } -}); -function onMouseOver(cm, event) { - const target = event.target || event.srcElement; - if (!(target instanceof HTMLElement)) { - return; - } - if ((target === null || target === void 0 ? void 0 : target.nodeName) !== "SPAN") { - return; - } - const box = target.getBoundingClientRect(); - const cursor = { - left: (box.left + box.right) / 2, - top: (box.top + box.bottom) / 2 - }; - cm.state.jump.cursor = cursor; - if (cm.state.jump.isHoldingModifier) { - enableJumpMode(cm); - } -} -function onMouseOut(cm) { - if (!cm.state.jump.isHoldingModifier && cm.state.jump.cursor) { - cm.state.jump.cursor = null; - return; - } - if (cm.state.jump.isHoldingModifier && cm.state.jump.marker) { - disableJumpMode(cm); - } -} -function onKeyDown(cm, event) { - if (cm.state.jump.isHoldingModifier || !isJumpModifier(event.key)) { - return; - } - cm.state.jump.isHoldingModifier = true; - if (cm.state.jump.cursor) { - enableJumpMode(cm); - } - const onKeyUp = upEvent => { - if (upEvent.code !== event.code) { - return; - } - cm.state.jump.isHoldingModifier = false; - if (cm.state.jump.marker) { - disableJumpMode(cm); - } - codemirror.CodeMirror.off(document, "keyup", onKeyUp); - codemirror.CodeMirror.off(document, "click", onClick); - cm.off("mousedown", onMouseDown); - }; - const onClick = clickEvent => { - const { - destination, - options - } = cm.state.jump; - if (destination) { - options.onClick(destination, clickEvent); - } - }; - const onMouseDown = (_, downEvent) => { - if (cm.state.jump.destination) { - downEvent.codemirrorIgnore = true; - } - }; - codemirror.CodeMirror.on(document, "keyup", onKeyUp); - codemirror.CodeMirror.on(document, "click", onClick); - cm.on("mousedown", onMouseDown); -} -const isMac = typeof navigator !== "undefined" && navigator.userAgent.includes("Mac"); -function isJumpModifier(key) { - return key === (isMac ? "Meta" : "Control"); -} -function enableJumpMode(cm) { - if (cm.state.jump.marker) { - return; - } - const { - cursor, - options - } = cm.state.jump; - const pos = cm.coordsChar(cursor); - const token = cm.getTokenAt(pos, true); - const getDestination = options.getDestination || cm.getHelper(pos, "jump"); - if (getDestination) { - const destination = getDestination(token, options, cm); - if (destination) { - const marker = cm.markText({ - line: pos.line, - ch: token.start - }, { - line: pos.line, - ch: token.end - }, { - className: "CodeMirror-jump-token" - }); - cm.state.jump.marker = marker; - cm.state.jump.destination = destination; - } - } -} -function disableJumpMode(cm) { - const { - marker - } = cm.state.jump; - cm.state.jump.marker = null; - cm.state.jump.destination = null; - marker.clear(); -} -codemirror.CodeMirror.registerHelper("jump", "graphql", (token, options) => { - if (!options.schema || !options.onClick || !token.state) { - return; - } - const { - state - } = token; - const { - kind, - step - } = state; - const typeInfo = SchemaReference.getTypeInfo(options.schema, state); - if (kind === "Field" && step === 0 && typeInfo.fieldDef || kind === "AliasedField" && step === 2 && typeInfo.fieldDef) { - return SchemaReference.getFieldReference(typeInfo); - } - if (kind === "Directive" && step === 1 && typeInfo.directiveDef) { - return SchemaReference.getDirectiveReference(typeInfo); - } - if (kind === "Argument" && step === 0 && typeInfo.argDef) { - return SchemaReference.getArgumentReference(typeInfo); - } - if (kind === "EnumValue" && typeInfo.enumValue) { - return SchemaReference.getEnumValueReference(typeInfo); - } - if (kind === "NamedType" && typeInfo.type) { - return SchemaReference.getTypeReference(typeInfo); - } -}); - -/***/ }), - -/***/ "../../graphiql-react/dist/lint.cjs.js": -/*!*********************************************!*\ - !*** ../../graphiql-react/dist/lint.cjs.js ***! - \*********************************************/ -/***/ (function(__unused_webpack_module, exports, __webpack_require__) { - - - -const codemirror = __webpack_require__(/*! ./codemirror.cjs2.js */ "../../graphiql-react/dist/codemirror.cjs2.js"); -function _mergeNamespaces(n, m) { - for (var i = 0; i < m.length; i++) { - const e = m[i]; - if (typeof e !== "string" && !Array.isArray(e)) { - for (const k in e) { - if (k !== "default" && !(k in n)) { - const d = Object.getOwnPropertyDescriptor(e, k); - if (d) { - Object.defineProperty(n, k, d.get ? d : { - enumerable: true, - get: () => e[k] - }); - } - } - } - } - } - return Object.freeze(Object.defineProperty(n, Symbol.toStringTag, { - value: "Module" - })); -} -var lint$2 = { - exports: {} -}; -(function (module2, exports2) { - (function (mod) { - mod(codemirror.requireCodemirror()); - })(function (CodeMirror) { - var GUTTER_ID = "CodeMirror-lint-markers"; - var LINT_LINE_ID = "CodeMirror-lint-line-"; - function showTooltip(cm, e, content) { - var tt = document.createElement("div"); - tt.className = "CodeMirror-lint-tooltip cm-s-" + cm.options.theme; - tt.appendChild(content.cloneNode(true)); - if (cm.state.lint.options.selfContain) cm.getWrapperElement().appendChild(tt);else document.body.appendChild(tt); - function position(e2) { - if (!tt.parentNode) return CodeMirror.off(document, "mousemove", position); - tt.style.top = Math.max(0, e2.clientY - tt.offsetHeight - 5) + "px"; - tt.style.left = e2.clientX + 5 + "px"; - } - CodeMirror.on(document, "mousemove", position); - position(e); - if (tt.style.opacity != null) tt.style.opacity = 1; - return tt; - } - function rm(elt) { - if (elt.parentNode) elt.parentNode.removeChild(elt); - } - function hideTooltip(tt) { - if (!tt.parentNode) return; - if (tt.style.opacity == null) rm(tt); - tt.style.opacity = 0; - setTimeout(function () { - rm(tt); - }, 600); - } - function showTooltipFor(cm, e, content, node) { - var tooltip = showTooltip(cm, e, content); - function hide() { - CodeMirror.off(node, "mouseout", hide); - if (tooltip) { - hideTooltip(tooltip); - tooltip = null; - } - } - var poll = setInterval(function () { - if (tooltip) for (var n = node;; n = n.parentNode) { - if (n && n.nodeType == 11) n = n.host; - if (n == document.body) return; - if (!n) { - hide(); - break; - } - } - if (!tooltip) return clearInterval(poll); - }, 400); - CodeMirror.on(node, "mouseout", hide); - } - function LintState(cm, conf, hasGutter) { - this.marked = []; - if (conf instanceof Function) conf = { - getAnnotations: conf - }; - if (!conf || conf === true) conf = {}; - this.options = {}; - this.linterOptions = conf.options || {}; - for (var prop in defaults) this.options[prop] = defaults[prop]; - for (var prop in conf) { - if (defaults.hasOwnProperty(prop)) { - if (conf[prop] != null) this.options[prop] = conf[prop]; - } else if (!conf.options) { - this.linterOptions[prop] = conf[prop]; - } - } - this.timeout = null; - this.hasGutter = hasGutter; - this.onMouseOver = function (e) { - onMouseOver(cm, e); - }; - this.waitingFor = 0; - } - var defaults = { - highlightLines: false, - tooltips: true, - delay: 500, - lintOnChange: true, - getAnnotations: null, - async: false, - selfContain: null, - formatAnnotation: null, - onUpdateLinting: null - }; - function clearMarks(cm) { - var state = cm.state.lint; - if (state.hasGutter) cm.clearGutter(GUTTER_ID); - if (state.options.highlightLines) clearErrorLines(cm); - for (var i = 0; i < state.marked.length; ++i) state.marked[i].clear(); - state.marked.length = 0; - } - function clearErrorLines(cm) { - cm.eachLine(function (line) { - var has = line.wrapClass && /\bCodeMirror-lint-line-\w+\b/.exec(line.wrapClass); - if (has) cm.removeLineClass(line, "wrap", has[0]); - }); - } - function makeMarker(cm, labels, severity, multiple, tooltips) { - var marker = document.createElement("div"), - inner = marker; - marker.className = "CodeMirror-lint-marker CodeMirror-lint-marker-" + severity; - if (multiple) { - inner = marker.appendChild(document.createElement("div")); - inner.className = "CodeMirror-lint-marker CodeMirror-lint-marker-multiple"; - } - if (tooltips != false) CodeMirror.on(inner, "mouseover", function (e) { - showTooltipFor(cm, e, labels, inner); - }); - return marker; - } - function getMaxSeverity(a, b) { - if (a == "error") return a;else return b; - } - function groupByLine(annotations) { - var lines = []; - for (var i = 0; i < annotations.length; ++i) { - var ann = annotations[i], - line = ann.from.line; - (lines[line] || (lines[line] = [])).push(ann); - } - return lines; - } - function annotationTooltip(ann) { - var severity = ann.severity; - if (!severity) severity = "error"; - var tip = document.createElement("div"); - tip.className = "CodeMirror-lint-message CodeMirror-lint-message-" + severity; - if (typeof ann.messageHTML != "undefined") { - tip.innerHTML = ann.messageHTML; - } else { - tip.appendChild(document.createTextNode(ann.message)); - } - return tip; - } - function lintAsync(cm, getAnnotations) { - var state = cm.state.lint; - var id = ++state.waitingFor; - function abort() { - id = -1; - cm.off("change", abort); - } - cm.on("change", abort); - getAnnotations(cm.getValue(), function (annotations, arg2) { - cm.off("change", abort); - if (state.waitingFor != id) return; - if (arg2 && annotations instanceof CodeMirror) annotations = arg2; - cm.operation(function () { - updateLinting(cm, annotations); - }); - }, state.linterOptions, cm); - } - function startLinting(cm) { - var state = cm.state.lint; - if (!state) return; - var options = state.options; - var getAnnotations = options.getAnnotations || cm.getHelper(CodeMirror.Pos(0, 0), "lint"); - if (!getAnnotations) return; - if (options.async || getAnnotations.async) { - lintAsync(cm, getAnnotations); - } else { - var annotations = getAnnotations(cm.getValue(), state.linterOptions, cm); - if (!annotations) return; - if (annotations.then) annotations.then(function (issues) { - cm.operation(function () { - updateLinting(cm, issues); - }); - });else cm.operation(function () { - updateLinting(cm, annotations); - }); - } - } - function updateLinting(cm, annotationsNotSorted) { - var state = cm.state.lint; - if (!state) return; - var options = state.options; - clearMarks(cm); - var annotations = groupByLine(annotationsNotSorted); - for (var line = 0; line < annotations.length; ++line) { - var anns = annotations[line]; - if (!anns) continue; - var message = []; - anns = anns.filter(function (item) { - return message.indexOf(item.message) > -1 ? false : message.push(item.message); - }); - var maxSeverity = null; - var tipLabel = state.hasGutter && document.createDocumentFragment(); - for (var i = 0; i < anns.length; ++i) { - var ann = anns[i]; - var severity = ann.severity; - if (!severity) severity = "error"; - maxSeverity = getMaxSeverity(maxSeverity, severity); - if (options.formatAnnotation) ann = options.formatAnnotation(ann); - if (state.hasGutter) tipLabel.appendChild(annotationTooltip(ann)); - if (ann.to) state.marked.push(cm.markText(ann.from, ann.to, { - className: "CodeMirror-lint-mark CodeMirror-lint-mark-" + severity, - __annotation: ann - })); - } - if (state.hasGutter) cm.setGutterMarker(line, GUTTER_ID, makeMarker(cm, tipLabel, maxSeverity, annotations[line].length > 1, options.tooltips)); - if (options.highlightLines) cm.addLineClass(line, "wrap", LINT_LINE_ID + maxSeverity); - } - if (options.onUpdateLinting) options.onUpdateLinting(annotationsNotSorted, annotations, cm); - } - function onChange(cm) { - var state = cm.state.lint; - if (!state) return; - clearTimeout(state.timeout); - state.timeout = setTimeout(function () { - startLinting(cm); - }, state.options.delay); - } - function popupTooltips(cm, annotations, e) { - var target = e.target || e.srcElement; - var tooltip = document.createDocumentFragment(); - for (var i = 0; i < annotations.length; i++) { - var ann = annotations[i]; - tooltip.appendChild(annotationTooltip(ann)); - } - showTooltipFor(cm, e, tooltip, target); - } - function onMouseOver(cm, e) { - var target = e.target || e.srcElement; - if (!/\bCodeMirror-lint-mark-/.test(target.className)) return; - var box = target.getBoundingClientRect(), - x = (box.left + box.right) / 2, - y = (box.top + box.bottom) / 2; - var spans = cm.findMarksAt(cm.coordsChar({ - left: x, - top: y - }, "client")); - var annotations = []; - for (var i = 0; i < spans.length; ++i) { - var ann = spans[i].__annotation; - if (ann) annotations.push(ann); - } - if (annotations.length) popupTooltips(cm, annotations, e); - } - CodeMirror.defineOption("lint", false, function (cm, val, old) { - if (old && old != CodeMirror.Init) { - clearMarks(cm); - if (cm.state.lint.options.lintOnChange !== false) cm.off("change", onChange); - CodeMirror.off(cm.getWrapperElement(), "mouseover", cm.state.lint.onMouseOver); - clearTimeout(cm.state.lint.timeout); - delete cm.state.lint; - } - if (val) { - var gutters = cm.getOption("gutters"), - hasLintGutter = false; - for (var i = 0; i < gutters.length; ++i) if (gutters[i] == GUTTER_ID) hasLintGutter = true; - var state = cm.state.lint = new LintState(cm, val, hasLintGutter); - if (state.options.lintOnChange) cm.on("change", onChange); - if (state.options.tooltips != false && state.options.tooltips != "gutter") CodeMirror.on(cm.getWrapperElement(), "mouseover", state.onMouseOver); - startLinting(cm); - } - }); - CodeMirror.defineExtension("performLint", function () { - startLinting(this); - }); - }); -})(); -var lintExports = lint$2.exports; -const lint = /* @__PURE__ */codemirror.getDefaultExportFromCjs(lintExports); -const lint$1 = /* @__PURE__ */_mergeNamespaces({ - __proto__: null, - default: lint -}, [lintExports]); -exports.lint = lint$1; - -/***/ }), - -/***/ "../../graphiql-react/dist/lint.cjs2.js": -/*!**********************************************!*\ - !*** ../../graphiql-react/dist/lint.cjs2.js ***! - \**********************************************/ -/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) { - - - -const codemirror = __webpack_require__(/*! ./codemirror.cjs.js */ "../../graphiql-react/dist/codemirror.cjs.js"); -const graphqlLanguageService = __webpack_require__(/*! graphql-language-service */ "../../graphql-language-service/esm/index.js"); -const SEVERITY = ["error", "warning", "information", "hint"]; -const TYPE = { - "GraphQL: Validation": "validation", - "GraphQL: Deprecation": "deprecation", - "GraphQL: Syntax": "syntax" -}; -codemirror.CodeMirror.registerHelper("lint", "graphql", (text, options) => { - const { - schema, - validationRules, - externalFragments - } = options; - const rawResults = graphqlLanguageService.getDiagnostics(text, schema, validationRules, void 0, externalFragments); - const results = rawResults.map(error => ({ - message: error.message, - severity: error.severity ? SEVERITY[error.severity - 1] : SEVERITY[0], - type: error.source ? TYPE[error.source] : void 0, - from: codemirror.CodeMirror.Pos(error.range.start.line, error.range.start.character), - to: codemirror.CodeMirror.Pos(error.range.end.line, error.range.end.character) - })); - return results; -}); - -/***/ }), - -/***/ "../../graphiql-react/dist/lint.cjs3.js": -/*!**********************************************!*\ - !*** ../../graphiql-react/dist/lint.cjs3.js ***! - \**********************************************/ -/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) { - - - -const codemirror = __webpack_require__(/*! ./codemirror.cjs.js */ "../../graphiql-react/dist/codemirror.cjs.js"); -const graphql = __webpack_require__(/*! graphql */ "../../../node_modules/graphql/index.mjs"); -function jsonParse(str) { - string = str; - strLen = str.length; - start = end = lastEnd = -1; - ch(); - lex(); - const ast = parseObj(); - expect("EOF"); - return ast; -} -let string; -let strLen; -let start; -let end; -let lastEnd; -let code; -let kind; -function parseObj() { - const nodeStart = start; - const members = []; - expect("{"); - if (!skip("}")) { - do { - members.push(parseMember()); - } while (skip(",")); - expect("}"); - } - return { - kind: "Object", - start: nodeStart, - end: lastEnd, - members - }; -} -function parseMember() { - const nodeStart = start; - const key = kind === "String" ? curToken() : null; - expect("String"); - expect(":"); - const value = parseVal(); - return { - kind: "Member", - start: nodeStart, - end: lastEnd, - key, - value - }; -} -function parseArr() { - const nodeStart = start; - const values = []; - expect("["); - if (!skip("]")) { - do { - values.push(parseVal()); - } while (skip(",")); - expect("]"); - } - return { - kind: "Array", - start: nodeStart, - end: lastEnd, - values - }; -} -function parseVal() { - switch (kind) { - case "[": - return parseArr(); - case "{": - return parseObj(); - case "String": - case "Number": - case "Boolean": - case "Null": - const token = curToken(); - lex(); - return token; - } - expect("Value"); -} -function curToken() { - return { - kind, - start, - end, - value: JSON.parse(string.slice(start, end)) - }; -} -function expect(str) { - if (kind === str) { - lex(); - return; - } - let found; - if (kind === "EOF") { - found = "[end of file]"; - } else if (end - start > 1) { - found = "`" + string.slice(start, end) + "`"; - } else { - const match = string.slice(start).match(/^.+?\b/); - found = "`" + (match ? match[0] : string[start]) + "`"; - } - throw syntaxError(`Expected ${str} but found ${found}.`); -} -class JSONSyntaxError extends Error { - constructor(message, position) { - super(message); - this.position = position; - } -} -function syntaxError(message) { - return new JSONSyntaxError(message, { - start, - end - }); -} -function skip(k) { - if (kind === k) { - lex(); - return true; - } -} -function ch() { - if (end < strLen) { - end++; - code = end === strLen ? 0 : string.charCodeAt(end); - } - return code; -} -function lex() { - lastEnd = end; - while (code === 9 || code === 10 || code === 13 || code === 32) { - ch(); - } - if (code === 0) { - kind = "EOF"; - return; - } - start = end; - switch (code) { - case 34: - kind = "String"; - return readString(); - case 45: - case 48: - case 49: - case 50: - case 51: - case 52: - case 53: - case 54: - case 55: - case 56: - case 57: - kind = "Number"; - return readNumber(); - case 102: - if (string.slice(start, start + 5) !== "false") { - break; - } - end += 4; - ch(); - kind = "Boolean"; - return; - case 110: - if (string.slice(start, start + 4) !== "null") { - break; - } - end += 3; - ch(); - kind = "Null"; - return; - case 116: - if (string.slice(start, start + 4) !== "true") { - break; - } - end += 3; - ch(); - kind = "Boolean"; - return; - } - kind = string[start]; - ch(); -} -function readString() { - ch(); - while (code !== 34 && code > 31) { - if (code === 92) { - code = ch(); - switch (code) { - case 34: - case 47: - case 92: - case 98: - case 102: - case 110: - case 114: - case 116: - ch(); - break; - case 117: - ch(); - readHex(); - readHex(); - readHex(); - readHex(); - break; - default: - throw syntaxError("Bad character escape sequence."); - } - } else if (end === strLen) { - throw syntaxError("Unterminated string."); - } else { - ch(); - } - } - if (code === 34) { - ch(); - return; - } - throw syntaxError("Unterminated string."); -} -function readHex() { - if (code >= 48 && code <= 57 || code >= 65 && code <= 70 || code >= 97 && code <= 102) { - return ch(); - } - throw syntaxError("Expected hexadecimal digit."); -} -function readNumber() { - if (code === 45) { - ch(); - } - if (code === 48) { - ch(); - } else { - readDigits(); - } - if (code === 46) { - ch(); - readDigits(); - } - if (code === 69 || code === 101) { - code = ch(); - if (code === 43 || code === 45) { - ch(); - } - readDigits(); - } -} -function readDigits() { - if (code < 48 || code > 57) { - throw syntaxError("Expected decimal digit."); - } - do { - ch(); - } while (code >= 48 && code <= 57); -} -codemirror.CodeMirror.registerHelper("lint", "graphql-variables", (text, options, editor) => { - if (!text) { - return []; - } - let ast; - try { - ast = jsonParse(text); - } catch (error) { - if (error instanceof JSONSyntaxError) { - return [lintError(editor, error.position, error.message)]; - } - throw error; - } - const { - variableToType - } = options; - if (!variableToType) { - return []; - } - return validateVariables(editor, variableToType, ast); -}); -function validateVariables(editor, variableToType, variablesAST) { - var _a; - const errors = []; - for (const member of variablesAST.members) { - if (member) { - const variableName = (_a = member.key) === null || _a === void 0 ? void 0 : _a.value; - const type = variableToType[variableName]; - if (type) { - for (const [node, message] of validateValue(type, member.value)) { - errors.push(lintError(editor, node, message)); - } - } else { - errors.push(lintError(editor, member.key, `Variable "$${variableName}" does not appear in any GraphQL query.`)); - } - } - } - return errors; -} -function validateValue(type, valueAST) { - if (!type || !valueAST) { - return []; - } - if (type instanceof graphql.GraphQLNonNull) { - if (valueAST.kind === "Null") { - return [[valueAST, `Type "${type}" is non-nullable and cannot be null.`]]; - } - return validateValue(type.ofType, valueAST); - } - if (valueAST.kind === "Null") { - return []; - } - if (type instanceof graphql.GraphQLList) { - const itemType = type.ofType; - if (valueAST.kind === "Array") { - const values = valueAST.values || []; - return mapCat(values, item => validateValue(itemType, item)); - } - return validateValue(itemType, valueAST); - } - if (type instanceof graphql.GraphQLInputObjectType) { - if (valueAST.kind !== "Object") { - return [[valueAST, `Type "${type}" must be an Object.`]]; - } - const providedFields = /* @__PURE__ */Object.create(null); - const fieldErrors = mapCat(valueAST.members, member => { - var _a; - const fieldName = (_a = member === null || member === void 0 ? void 0 : member.key) === null || _a === void 0 ? void 0 : _a.value; - providedFields[fieldName] = true; - const inputField = type.getFields()[fieldName]; - if (!inputField) { - return [[member.key, `Type "${type}" does not have a field "${fieldName}".`]]; - } - const fieldType = inputField ? inputField.type : void 0; - return validateValue(fieldType, member.value); - }); - for (const fieldName of Object.keys(type.getFields())) { - const field = type.getFields()[fieldName]; - if (!providedFields[fieldName] && field.type instanceof graphql.GraphQLNonNull && !field.defaultValue) { - fieldErrors.push([valueAST, `Object of type "${type}" is missing required field "${fieldName}".`]); - } - } - return fieldErrors; - } - if (type.name === "Boolean" && valueAST.kind !== "Boolean" || type.name === "String" && valueAST.kind !== "String" || type.name === "ID" && valueAST.kind !== "Number" && valueAST.kind !== "String" || type.name === "Float" && valueAST.kind !== "Number" || type.name === "Int" && (valueAST.kind !== "Number" || (valueAST.value | 0) !== valueAST.value)) { - return [[valueAST, `Expected value of type "${type}".`]]; - } - if ((type instanceof graphql.GraphQLEnumType || type instanceof graphql.GraphQLScalarType) && (valueAST.kind !== "String" && valueAST.kind !== "Number" && valueAST.kind !== "Boolean" && valueAST.kind !== "Null" || isNullish(type.parseValue(valueAST.value)))) { - return [[valueAST, `Expected value of type "${type}".`]]; - } - return []; -} -function lintError(editor, node, message) { - return { - message, - severity: "error", - type: "validation", - from: editor.posFromIndex(node.start), - to: editor.posFromIndex(node.end) - }; -} -function isNullish(value) { - return value === null || value === void 0 || value !== value; -} -function mapCat(array, mapper) { - return Array.prototype.concat.apply([], array.map(mapper)); -} - -/***/ }), - -/***/ "../../graphiql-react/dist/matchbrackets.cjs.js": -/*!******************************************************!*\ - !*** ../../graphiql-react/dist/matchbrackets.cjs.js ***! - \******************************************************/ -/***/ (function(__unused_webpack_module, exports, __webpack_require__) { - - - -const codemirror = __webpack_require__(/*! ./codemirror.cjs2.js */ "../../graphiql-react/dist/codemirror.cjs2.js"); -const matchbrackets$2 = __webpack_require__(/*! ./matchbrackets.cjs2.js */ "../../graphiql-react/dist/matchbrackets.cjs2.js"); -function _mergeNamespaces(n, m) { - for (var i = 0; i < m.length; i++) { - const e = m[i]; - if (typeof e !== "string" && !Array.isArray(e)) { - for (const k in e) { - if (k !== "default" && !(k in n)) { - const d = Object.getOwnPropertyDescriptor(e, k); - if (d) { - Object.defineProperty(n, k, d.get ? d : { - enumerable: true, - get: () => e[k] - }); - } - } - } - } - } - return Object.freeze(Object.defineProperty(n, Symbol.toStringTag, { - value: "Module" - })); -} -var matchbracketsExports = matchbrackets$2.requireMatchbrackets(); -const matchbrackets = /* @__PURE__ */codemirror.getDefaultExportFromCjs(matchbracketsExports); -const matchbrackets$1 = /* @__PURE__ */_mergeNamespaces({ - __proto__: null, - default: matchbrackets -}, [matchbracketsExports]); -exports.matchbrackets = matchbrackets$1; - -/***/ }), - -/***/ "../../graphiql-react/dist/matchbrackets.cjs2.js": -/*!*******************************************************!*\ - !*** ../../graphiql-react/dist/matchbrackets.cjs2.js ***! - \*******************************************************/ -/***/ (function(__unused_webpack_module, exports, __webpack_require__) { - - - -const codemirror = __webpack_require__(/*! ./codemirror.cjs2.js */ "../../graphiql-react/dist/codemirror.cjs2.js"); -var matchbrackets = { - exports: {} -}; -var hasRequiredMatchbrackets; -function requireMatchbrackets() { - if (hasRequiredMatchbrackets) return matchbrackets.exports; - hasRequiredMatchbrackets = 1; - (function (module2, exports2) { - (function (mod) { - mod(codemirror.requireCodemirror()); - })(function (CodeMirror) { - var ie_lt8 = /MSIE \d/.test(navigator.userAgent) && (document.documentMode == null || document.documentMode < 8); - var Pos = CodeMirror.Pos; - var matching = { - "(": ")>", - ")": "(<", - "[": "]>", - "]": "[<", - "{": "}>", - "}": "{<", - "<": ">>", - ">": "<<" - }; - function bracketRegex(config) { - return config && config.bracketRegex || /[(){}[\]]/; - } - function findMatchingBracket(cm, where, config) { - var line = cm.getLineHandle(where.line), - pos = where.ch - 1; - var afterCursor = config && config.afterCursor; - if (afterCursor == null) afterCursor = /(^| )cm-fat-cursor($| )/.test(cm.getWrapperElement().className); - var re = bracketRegex(config); - var match = !afterCursor && pos >= 0 && re.test(line.text.charAt(pos)) && matching[line.text.charAt(pos)] || re.test(line.text.charAt(pos + 1)) && matching[line.text.charAt(++pos)]; - if (!match) return null; - var dir = match.charAt(1) == ">" ? 1 : -1; - if (config && config.strict && dir > 0 != (pos == where.ch)) return null; - var style = cm.getTokenTypeAt(Pos(where.line, pos + 1)); - var found = scanForBracket(cm, Pos(where.line, pos + (dir > 0 ? 1 : 0)), dir, style, config); - if (found == null) return null; - return { - from: Pos(where.line, pos), - to: found && found.pos, - match: found && found.ch == match.charAt(0), - forward: dir > 0 - }; - } - function scanForBracket(cm, where, dir, style, config) { - var maxScanLen = config && config.maxScanLineLength || 1e4; - var maxScanLines = config && config.maxScanLines || 1e3; - var stack = []; - var re = bracketRegex(config); - var lineEnd = dir > 0 ? Math.min(where.line + maxScanLines, cm.lastLine() + 1) : Math.max(cm.firstLine() - 1, where.line - maxScanLines); - for (var lineNo = where.line; lineNo != lineEnd; lineNo += dir) { - var line = cm.getLine(lineNo); - if (!line) continue; - var pos = dir > 0 ? 0 : line.length - 1, - end = dir > 0 ? line.length : -1; - if (line.length > maxScanLen) continue; - if (lineNo == where.line) pos = where.ch - (dir < 0 ? 1 : 0); - for (; pos != end; pos += dir) { - var ch = line.charAt(pos); - if (re.test(ch) && (style === void 0 || (cm.getTokenTypeAt(Pos(lineNo, pos + 1)) || "") == (style || ""))) { - var match = matching[ch]; - if (match && match.charAt(1) == ">" == dir > 0) stack.push(ch);else if (!stack.length) return { - pos: Pos(lineNo, pos), - ch - };else stack.pop(); - } - } - } - return lineNo - dir == (dir > 0 ? cm.lastLine() : cm.firstLine()) ? false : null; - } - function matchBrackets(cm, autoclear, config) { - var maxHighlightLen = cm.state.matchBrackets.maxHighlightLineLength || 1e3, - highlightNonMatching = config && config.highlightNonMatching; - var marks = [], - ranges = cm.listSelections(); - for (var i = 0; i < ranges.length; i++) { - var match = ranges[i].empty() && findMatchingBracket(cm, ranges[i].head, config); - if (match && (match.match || highlightNonMatching !== false) && cm.getLine(match.from.line).length <= maxHighlightLen) { - var style = match.match ? "CodeMirror-matchingbracket" : "CodeMirror-nonmatchingbracket"; - marks.push(cm.markText(match.from, Pos(match.from.line, match.from.ch + 1), { - className: style - })); - if (match.to && cm.getLine(match.to.line).length <= maxHighlightLen) marks.push(cm.markText(match.to, Pos(match.to.line, match.to.ch + 1), { - className: style - })); - } - } - if (marks.length) { - if (ie_lt8 && cm.state.focused) cm.focus(); - var clear = function () { - cm.operation(function () { - for (var i2 = 0; i2 < marks.length; i2++) marks[i2].clear(); - }); - }; - if (autoclear) setTimeout(clear, 800);else return clear; - } - } - function doMatchBrackets(cm) { - cm.operation(function () { - if (cm.state.matchBrackets.currentlyHighlighted) { - cm.state.matchBrackets.currentlyHighlighted(); - cm.state.matchBrackets.currentlyHighlighted = null; - } - cm.state.matchBrackets.currentlyHighlighted = matchBrackets(cm, false, cm.state.matchBrackets); - }); - } - function clearHighlighted(cm) { - if (cm.state.matchBrackets && cm.state.matchBrackets.currentlyHighlighted) { - cm.state.matchBrackets.currentlyHighlighted(); - cm.state.matchBrackets.currentlyHighlighted = null; - } - } - CodeMirror.defineOption("matchBrackets", false, function (cm, val, old) { - if (old && old != CodeMirror.Init) { - cm.off("cursorActivity", doMatchBrackets); - cm.off("focus", doMatchBrackets); - cm.off("blur", clearHighlighted); - clearHighlighted(cm); - } - if (val) { - cm.state.matchBrackets = typeof val == "object" ? val : {}; - cm.on("cursorActivity", doMatchBrackets); - cm.on("focus", doMatchBrackets); - cm.on("blur", clearHighlighted); - } - }); - CodeMirror.defineExtension("matchBrackets", function () { - matchBrackets(this, true); - }); - CodeMirror.defineExtension("findMatchingBracket", function (pos, config, oldConfig) { - if (oldConfig || typeof config == "boolean") { - if (!oldConfig) { - config = config ? { - strict: true - } : null; - } else { - oldConfig.strict = config; - config = oldConfig; - } - } - return findMatchingBracket(this, pos, config); - }); - CodeMirror.defineExtension("scanForBracket", function (pos, dir, style, config) { - return scanForBracket(this, pos, dir, style, config); - }); - }); - })(); - return matchbrackets.exports; -} -exports.requireMatchbrackets = requireMatchbrackets; - -/***/ }), - -/***/ "../../graphiql-react/dist/mode-indent.cjs.js": -/*!****************************************************!*\ - !*** ../../graphiql-react/dist/mode-indent.cjs.js ***! - \****************************************************/ -/***/ (function(__unused_webpack_module, exports) { - - - -function indent(state, textAfter) { - var _a, _b; - const { - levels, - indentLevel - } = state; - const level = !levels || levels.length === 0 ? indentLevel : levels.at(-1) - (((_a = this.electricInput) === null || _a === void 0 ? void 0 : _a.test(textAfter)) ? 1 : 0); - return (level || 0) * (((_b = this.config) === null || _b === void 0 ? void 0 : _b.indentUnit) || 0); -} -exports.indent = indent; - -/***/ }), - -/***/ "../../graphiql-react/dist/mode.cjs.js": -/*!*********************************************!*\ - !*** ../../graphiql-react/dist/mode.cjs.js ***! - \*********************************************/ -/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) { - - - -const codemirror = __webpack_require__(/*! ./codemirror.cjs.js */ "../../graphiql-react/dist/codemirror.cjs.js"); -const graphqlLanguageService = __webpack_require__(/*! graphql-language-service */ "../../graphql-language-service/esm/index.js"); -const modeIndent = __webpack_require__(/*! ./mode-indent.cjs.js */ "../../graphiql-react/dist/mode-indent.cjs.js"); -const graphqlModeFactory = config => { - const parser = graphqlLanguageService.onlineParser({ - eatWhitespace: stream => stream.eatWhile(graphqlLanguageService.isIgnored), - lexRules: graphqlLanguageService.LexRules, - parseRules: graphqlLanguageService.ParseRules, - editorConfig: { - tabSize: config.tabSize - } - }); - return { - config, - startState: parser.startState, - token: parser.token, - indent: modeIndent.indent, - electricInput: /^\s*[})\]]/, - fold: "brace", - lineComment: "#", - closeBrackets: { - pairs: '()[]{}""', - explode: "()[]{}" - } - }; -}; -codemirror.CodeMirror.defineMode("graphql", graphqlModeFactory); - -/***/ }), - -/***/ "../../graphiql-react/dist/mode.cjs2.js": -/*!**********************************************!*\ - !*** ../../graphiql-react/dist/mode.cjs2.js ***! - \**********************************************/ -/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) { - - - -const codemirror = __webpack_require__(/*! ./codemirror.cjs.js */ "../../graphiql-react/dist/codemirror.cjs.js"); -const graphqlLanguageService = __webpack_require__(/*! graphql-language-service */ "../../graphql-language-service/esm/index.js"); -const modeIndent = __webpack_require__(/*! ./mode-indent.cjs.js */ "../../graphiql-react/dist/mode-indent.cjs.js"); -codemirror.CodeMirror.defineMode("graphql-variables", config => { - const parser = graphqlLanguageService.onlineParser({ - eatWhitespace: stream => stream.eatSpace(), - lexRules: LexRules, - parseRules: ParseRules, - editorConfig: { - tabSize: config.tabSize - } - }); - return { - config, - startState: parser.startState, - token: parser.token, - indent: modeIndent.indent, - electricInput: /^\s*[}\]]/, - fold: "brace", - closeBrackets: { - pairs: '[]{}""', - explode: "[]{}" - } - }; -}); -const LexRules = { - Punctuation: /^\[|]|\{|\}|:|,/, - Number: /^-?(?:0|(?:[1-9][0-9]*))(?:\.[0-9]*)?(?:[eE][+-]?[0-9]+)?/, - String: /^"(?:[^"\\]|\\(?:"|\/|\\|b|f|n|r|t|u[0-9a-fA-F]{4}))*"?/, - Keyword: /^true|false|null/ -}; -const ParseRules = { - Document: [graphqlLanguageService.p("{"), graphqlLanguageService.list("Variable", graphqlLanguageService.opt(graphqlLanguageService.p(","))), graphqlLanguageService.p("}")], - Variable: [namedKey("variable"), graphqlLanguageService.p(":"), "Value"], - Value(token) { - switch (token.kind) { - case "Number": - return "NumberValue"; - case "String": - return "StringValue"; - case "Punctuation": - switch (token.value) { - case "[": - return "ListValue"; - case "{": - return "ObjectValue"; - } - return null; - case "Keyword": - switch (token.value) { - case "true": - case "false": - return "BooleanValue"; - case "null": - return "NullValue"; - } - return null; - } - }, - NumberValue: [graphqlLanguageService.t("Number", "number")], - StringValue: [graphqlLanguageService.t("String", "string")], - BooleanValue: [graphqlLanguageService.t("Keyword", "builtin")], - NullValue: [graphqlLanguageService.t("Keyword", "keyword")], - ListValue: [graphqlLanguageService.p("["), graphqlLanguageService.list("Value", graphqlLanguageService.opt(graphqlLanguageService.p(","))), graphqlLanguageService.p("]")], - ObjectValue: [graphqlLanguageService.p("{"), graphqlLanguageService.list("ObjectField", graphqlLanguageService.opt(graphqlLanguageService.p(","))), graphqlLanguageService.p("}")], - ObjectField: [namedKey("attribute"), graphqlLanguageService.p(":"), "Value"] -}; -function namedKey(style) { - return { - style, - match: token => token.kind === "String", - update(state, token) { - state.name = token.value.slice(1, -1); - } - }; -} - -/***/ }), - -/***/ "../../graphiql-react/dist/mode.cjs3.js": -/*!**********************************************!*\ - !*** ../../graphiql-react/dist/mode.cjs3.js ***! - \**********************************************/ -/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) { - - - -const codemirror = __webpack_require__(/*! ./codemirror.cjs.js */ "../../graphiql-react/dist/codemirror.cjs.js"); -const graphqlLanguageService = __webpack_require__(/*! graphql-language-service */ "../../graphql-language-service/esm/index.js"); -const modeIndent = __webpack_require__(/*! ./mode-indent.cjs.js */ "../../graphiql-react/dist/mode-indent.cjs.js"); -codemirror.CodeMirror.defineMode("graphql-results", config => { - const parser = graphqlLanguageService.onlineParser({ - eatWhitespace: stream => stream.eatSpace(), - lexRules: LexRules, - parseRules: ParseRules, - editorConfig: { - tabSize: config.tabSize - } - }); - return { - config, - startState: parser.startState, - token: parser.token, - indent: modeIndent.indent, - electricInput: /^\s*[}\]]/, - fold: "brace", - closeBrackets: { - pairs: '[]{}""', - explode: "[]{}" - } - }; -}); -const LexRules = { - Punctuation: /^\[|]|\{|\}|:|,/, - Number: /^-?(?:0|(?:[1-9][0-9]*))(?:\.[0-9]*)?(?:[eE][+-]?[0-9]+)?/, - String: /^"(?:[^"\\]|\\(?:"|\/|\\|b|f|n|r|t|u[0-9a-fA-F]{4}))*"?/, - Keyword: /^true|false|null/ -}; -const ParseRules = { - Document: [graphqlLanguageService.p("{"), graphqlLanguageService.list("Entry", graphqlLanguageService.p(",")), graphqlLanguageService.p("}")], - Entry: [graphqlLanguageService.t("String", "def"), graphqlLanguageService.p(":"), "Value"], - Value(token) { - switch (token.kind) { - case "Number": - return "NumberValue"; - case "String": - return "StringValue"; - case "Punctuation": - switch (token.value) { - case "[": - return "ListValue"; - case "{": - return "ObjectValue"; - } - return null; - case "Keyword": - switch (token.value) { - case "true": - case "false": - return "BooleanValue"; - case "null": - return "NullValue"; - } - return null; - } - }, - NumberValue: [graphqlLanguageService.t("Number", "number")], - StringValue: [graphqlLanguageService.t("String", "string")], - BooleanValue: [graphqlLanguageService.t("Keyword", "builtin")], - NullValue: [graphqlLanguageService.t("Keyword", "keyword")], - ListValue: [graphqlLanguageService.p("["), graphqlLanguageService.list("Value", graphqlLanguageService.p(",")), graphqlLanguageService.p("]")], - ObjectValue: [graphqlLanguageService.p("{"), graphqlLanguageService.list("ObjectField", graphqlLanguageService.p(",")), graphqlLanguageService.p("}")], - ObjectField: [graphqlLanguageService.t("String", "property"), graphqlLanguageService.p(":"), "Value"] -}; - -/***/ }), - -/***/ "../../graphiql-react/dist/search.cjs.js": -/*!***********************************************!*\ - !*** ../../graphiql-react/dist/search.cjs.js ***! - \***********************************************/ -/***/ (function(__unused_webpack_module, exports, __webpack_require__) { - - - -const codemirror = __webpack_require__(/*! ./codemirror.cjs2.js */ "../../graphiql-react/dist/codemirror.cjs2.js"); -const searchcursor = __webpack_require__(/*! ./searchcursor.cjs2.js */ "../../graphiql-react/dist/searchcursor.cjs2.js"); -const dialog = __webpack_require__(/*! ./dialog.cjs.js */ "../../graphiql-react/dist/dialog.cjs.js"); -function _mergeNamespaces(n, m) { - for (var i = 0; i < m.length; i++) { - const e = m[i]; - if (typeof e !== "string" && !Array.isArray(e)) { - for (const k in e) { - if (k !== "default" && !(k in n)) { - const d = Object.getOwnPropertyDescriptor(e, k); - if (d) { - Object.defineProperty(n, k, d.get ? d : { - enumerable: true, - get: () => e[k] - }); - } - } - } - } - } - return Object.freeze(Object.defineProperty(n, Symbol.toStringTag, { - value: "Module" - })); -} -var search$2 = { - exports: {} -}; -(function (module2, exports2) { - (function (mod) { - mod(codemirror.requireCodemirror(), searchcursor.requireSearchcursor(), dialog.dialogExports); - })(function (CodeMirror) { - CodeMirror.defineOption("search", { - bottom: false - }); - function searchOverlay(query, caseInsensitive) { - if (typeof query == "string") query = new RegExp(query.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g, "\\$&"), caseInsensitive ? "gi" : "g");else if (!query.global) query = new RegExp(query.source, query.ignoreCase ? "gi" : "g"); - return { - token: function (stream) { - query.lastIndex = stream.pos; - var match = query.exec(stream.string); - if (match && match.index == stream.pos) { - stream.pos += match[0].length || 1; - return "searching"; - } else if (match) { - stream.pos = match.index; - } else { - stream.skipToEnd(); - } - } - }; - } - function SearchState() { - this.posFrom = this.posTo = this.lastQuery = this.query = null; - this.overlay = null; - } - function getSearchState(cm) { - return cm.state.search || (cm.state.search = new SearchState()); - } - function queryCaseInsensitive(query) { - return typeof query == "string" && query == query.toLowerCase(); - } - function getSearchCursor(cm, query, pos) { - return cm.getSearchCursor(query, pos, { - caseFold: queryCaseInsensitive(query), - multiline: true - }); - } - function persistentDialog(cm, text, deflt, onEnter, onKeyDown) { - cm.openDialog(text, onEnter, { - value: deflt, - selectValueOnOpen: true, - closeOnEnter: false, - onClose: function () { - clearSearch(cm); - }, - onKeyDown, - bottom: cm.options.search.bottom - }); - } - function dialog2(cm, text, shortText, deflt, f) { - if (cm.openDialog) cm.openDialog(text, f, { - value: deflt, - selectValueOnOpen: true, - bottom: cm.options.search.bottom - });else f(prompt(shortText, deflt)); - } - function confirmDialog(cm, text, shortText, fs) { - if (cm.openConfirm) cm.openConfirm(text, fs);else if (confirm(shortText)) fs[0](); - } - function parseString(string) { - return string.replace(/\\([nrt\\])/g, function (match, ch) { - if (ch == "n") return "\n"; - if (ch == "r") return "\r"; - if (ch == "t") return " "; - if (ch == "\\") return "\\"; - return match; - }); - } - function parseQuery(query) { - var isRE = query.match(/^\/(.*)\/([a-z]*)$/); - if (isRE) { - try { - query = new RegExp(isRE[1], isRE[2].indexOf("i") == -1 ? "" : "i"); - } catch (e) {} - } else { - query = parseString(query); - } - if (typeof query == "string" ? query == "" : query.test("")) query = /x^/; - return query; - } - function startSearch(cm, state, query) { - state.queryText = query; - state.query = parseQuery(query); - cm.removeOverlay(state.overlay, queryCaseInsensitive(state.query)); - state.overlay = searchOverlay(state.query, queryCaseInsensitive(state.query)); - cm.addOverlay(state.overlay); - if (cm.showMatchesOnScrollbar) { - if (state.annotate) { - state.annotate.clear(); - state.annotate = null; - } - state.annotate = cm.showMatchesOnScrollbar(state.query, queryCaseInsensitive(state.query)); - } - } - function doSearch(cm, rev, persistent, immediate) { - var state = getSearchState(cm); - if (state.query) return findNext(cm, rev); - var q = cm.getSelection() || state.lastQuery; - if (q instanceof RegExp && q.source == "x^") q = null; - if (persistent && cm.openDialog) { - var hiding = null; - var searchNext = function (query, event) { - CodeMirror.e_stop(event); - if (!query) return; - if (query != state.queryText) { - startSearch(cm, state, query); - state.posFrom = state.posTo = cm.getCursor(); - } - if (hiding) hiding.style.opacity = 1; - findNext(cm, event.shiftKey, function (_, to) { - var dialog3; - if (to.line < 3 && document.querySelector && (dialog3 = cm.display.wrapper.querySelector(".CodeMirror-dialog")) && dialog3.getBoundingClientRect().bottom - 4 > cm.cursorCoords(to, "window").top) (hiding = dialog3).style.opacity = 0.4; - }); - }; - persistentDialog(cm, getQueryDialog(cm), q, searchNext, function (event, query) { - var keyName = CodeMirror.keyName(event); - var extra = cm.getOption("extraKeys"), - cmd = extra && extra[keyName] || CodeMirror.keyMap[cm.getOption("keyMap")][keyName]; - if (cmd == "findNext" || cmd == "findPrev" || cmd == "findPersistentNext" || cmd == "findPersistentPrev") { - CodeMirror.e_stop(event); - startSearch(cm, getSearchState(cm), query); - cm.execCommand(cmd); - } else if (cmd == "find" || cmd == "findPersistent") { - CodeMirror.e_stop(event); - searchNext(query, event); - } - }); - if (immediate && q) { - startSearch(cm, state, q); - findNext(cm, rev); - } - } else { - dialog2(cm, getQueryDialog(cm), "Search for:", q, function (query) { - if (query && !state.query) cm.operation(function () { - startSearch(cm, state, query); - state.posFrom = state.posTo = cm.getCursor(); - findNext(cm, rev); - }); - }); - } - } - function findNext(cm, rev, callback) { - cm.operation(function () { - var state = getSearchState(cm); - var cursor = getSearchCursor(cm, state.query, rev ? state.posFrom : state.posTo); - if (!cursor.find(rev)) { - cursor = getSearchCursor(cm, state.query, rev ? CodeMirror.Pos(cm.lastLine()) : CodeMirror.Pos(cm.firstLine(), 0)); - if (!cursor.find(rev)) return; - } - cm.setSelection(cursor.from(), cursor.to()); - cm.scrollIntoView({ - from: cursor.from(), - to: cursor.to() - }, 20); - state.posFrom = cursor.from(); - state.posTo = cursor.to(); - if (callback) callback(cursor.from(), cursor.to()); - }); - } - function clearSearch(cm) { - cm.operation(function () { - var state = getSearchState(cm); - state.lastQuery = state.query; - if (!state.query) return; - state.query = state.queryText = null; - cm.removeOverlay(state.overlay); - if (state.annotate) { - state.annotate.clear(); - state.annotate = null; - } - }); - } - function el(tag, attrs) { - var element = tag ? document.createElement(tag) : document.createDocumentFragment(); - for (var key in attrs) { - element[key] = attrs[key]; - } - for (var i = 2; i < arguments.length; i++) { - var child = arguments[i]; - element.appendChild(typeof child == "string" ? document.createTextNode(child) : child); - } - return element; - } - function getQueryDialog(cm) { - return el("", null, el("span", { - className: "CodeMirror-search-label" - }, cm.phrase("Search:")), " ", el("input", { - type: "text", - "style": "width: 10em", - className: "CodeMirror-search-field" - }), " ", el("span", { - style: "color: #888", - className: "CodeMirror-search-hint" - }, cm.phrase("(Use /re/ syntax for regexp search)"))); - } - function getReplaceQueryDialog(cm) { - return el("", null, " ", el("input", { - type: "text", - "style": "width: 10em", - className: "CodeMirror-search-field" - }), " ", el("span", { - style: "color: #888", - className: "CodeMirror-search-hint" - }, cm.phrase("(Use /re/ syntax for regexp search)"))); - } - function getReplacementQueryDialog(cm) { - return el("", null, el("span", { - className: "CodeMirror-search-label" - }, cm.phrase("With:")), " ", el("input", { - type: "text", - "style": "width: 10em", - className: "CodeMirror-search-field" - })); - } - function getDoReplaceConfirm(cm) { - return el("", null, el("span", { - className: "CodeMirror-search-label" - }, cm.phrase("Replace?")), " ", el("button", {}, cm.phrase("Yes")), " ", el("button", {}, cm.phrase("No")), " ", el("button", {}, cm.phrase("All")), " ", el("button", {}, cm.phrase("Stop"))); - } - function replaceAll(cm, query, text) { - cm.operation(function () { - for (var cursor = getSearchCursor(cm, query); cursor.findNext();) { - if (typeof query != "string") { - var match = cm.getRange(cursor.from(), cursor.to()).match(query); - cursor.replace(text.replace(/\$(\d)/g, function (_, i) { - return match[i]; - })); - } else cursor.replace(text); - } - }); - } - function replace(cm, all) { - if (cm.getOption("readOnly")) return; - var query = cm.getSelection() || getSearchState(cm).lastQuery; - var dialogText = all ? cm.phrase("Replace all:") : cm.phrase("Replace:"); - var fragment = el("", null, el("span", { - className: "CodeMirror-search-label" - }, dialogText), getReplaceQueryDialog(cm)); - dialog2(cm, fragment, dialogText, query, function (query2) { - if (!query2) return; - query2 = parseQuery(query2); - dialog2(cm, getReplacementQueryDialog(cm), cm.phrase("Replace with:"), "", function (text) { - text = parseString(text); - if (all) { - replaceAll(cm, query2, text); - } else { - clearSearch(cm); - var cursor = getSearchCursor(cm, query2, cm.getCursor("from")); - var advance = function () { - var start = cursor.from(), - match; - if (!(match = cursor.findNext())) { - cursor = getSearchCursor(cm, query2); - if (!(match = cursor.findNext()) || start && cursor.from().line == start.line && cursor.from().ch == start.ch) return; - } - cm.setSelection(cursor.from(), cursor.to()); - cm.scrollIntoView({ - from: cursor.from(), - to: cursor.to() - }); - confirmDialog(cm, getDoReplaceConfirm(cm), cm.phrase("Replace?"), [function () { - doReplace(match); - }, advance, function () { - replaceAll(cm, query2, text); - }]); - }; - var doReplace = function (match) { - cursor.replace(typeof query2 == "string" ? text : text.replace(/\$(\d)/g, function (_, i) { - return match[i]; - })); - advance(); - }; - advance(); - } - }); - }); - } - CodeMirror.commands.find = function (cm) { - clearSearch(cm); - doSearch(cm); - }; - CodeMirror.commands.findPersistent = function (cm) { - clearSearch(cm); - doSearch(cm, false, true); - }; - CodeMirror.commands.findPersistentNext = function (cm) { - doSearch(cm, false, true, true); - }; - CodeMirror.commands.findPersistentPrev = function (cm) { - doSearch(cm, true, true, true); - }; - CodeMirror.commands.findNext = doSearch; - CodeMirror.commands.findPrev = function (cm) { - doSearch(cm, true); - }; - CodeMirror.commands.clearSearch = clearSearch; - CodeMirror.commands.replace = replace; - CodeMirror.commands.replaceAll = function (cm) { - replace(cm, true); - }; - }); -})(); -var searchExports = search$2.exports; -const search = /* @__PURE__ */codemirror.getDefaultExportFromCjs(searchExports); -const search$1 = /* @__PURE__ */_mergeNamespaces({ - __proto__: null, - default: search -}, [searchExports]); -exports.search = search$1; - -/***/ }), - -/***/ "../../graphiql-react/dist/searchcursor.cjs.js": -/*!*****************************************************!*\ - !*** ../../graphiql-react/dist/searchcursor.cjs.js ***! - \*****************************************************/ -/***/ (function(__unused_webpack_module, exports, __webpack_require__) { - - - -const codemirror = __webpack_require__(/*! ./codemirror.cjs2.js */ "../../graphiql-react/dist/codemirror.cjs2.js"); -const searchcursor$2 = __webpack_require__(/*! ./searchcursor.cjs2.js */ "../../graphiql-react/dist/searchcursor.cjs2.js"); -function _mergeNamespaces(n, m) { - for (var i = 0; i < m.length; i++) { - const e = m[i]; - if (typeof e !== "string" && !Array.isArray(e)) { - for (const k in e) { - if (k !== "default" && !(k in n)) { - const d = Object.getOwnPropertyDescriptor(e, k); - if (d) { - Object.defineProperty(n, k, d.get ? d : { - enumerable: true, - get: () => e[k] - }); - } - } - } - } - } - return Object.freeze(Object.defineProperty(n, Symbol.toStringTag, { - value: "Module" - })); -} -var searchcursorExports = searchcursor$2.requireSearchcursor(); -const searchcursor = /* @__PURE__ */codemirror.getDefaultExportFromCjs(searchcursorExports); -const searchcursor$1 = /* @__PURE__ */_mergeNamespaces({ - __proto__: null, - default: searchcursor -}, [searchcursorExports]); -exports.searchcursor = searchcursor$1; - -/***/ }), - -/***/ "../../graphiql-react/dist/searchcursor.cjs2.js": -/*!******************************************************!*\ - !*** ../../graphiql-react/dist/searchcursor.cjs2.js ***! - \******************************************************/ -/***/ (function(__unused_webpack_module, exports, __webpack_require__) { - - - -const codemirror = __webpack_require__(/*! ./codemirror.cjs2.js */ "../../graphiql-react/dist/codemirror.cjs2.js"); -var searchcursor = { - exports: {} -}; -var hasRequiredSearchcursor; -function requireSearchcursor() { - if (hasRequiredSearchcursor) return searchcursor.exports; - hasRequiredSearchcursor = 1; - (function (module2, exports2) { - (function (mod) { - mod(codemirror.requireCodemirror()); - })(function (CodeMirror) { - var Pos = CodeMirror.Pos; - function regexpFlags(regexp) { - var flags = regexp.flags; - return flags != null ? flags : (regexp.ignoreCase ? "i" : "") + (regexp.global ? "g" : "") + (regexp.multiline ? "m" : ""); - } - function ensureFlags(regexp, flags) { - var current = regexpFlags(regexp), - target = current; - for (var i = 0; i < flags.length; i++) if (target.indexOf(flags.charAt(i)) == -1) target += flags.charAt(i); - return current == target ? regexp : new RegExp(regexp.source, target); - } - function maybeMultiline(regexp) { - return /\\s|\\n|\n|\\W|\\D|\[\^/.test(regexp.source); - } - function searchRegexpForward(doc, regexp, start) { - regexp = ensureFlags(regexp, "g"); - for (var line = start.line, ch = start.ch, last = doc.lastLine(); line <= last; line++, ch = 0) { - regexp.lastIndex = ch; - var string = doc.getLine(line), - match = regexp.exec(string); - if (match) return { - from: Pos(line, match.index), - to: Pos(line, match.index + match[0].length), - match - }; - } - } - function searchRegexpForwardMultiline(doc, regexp, start) { - if (!maybeMultiline(regexp)) return searchRegexpForward(doc, regexp, start); - regexp = ensureFlags(regexp, "gm"); - var string, - chunk = 1; - for (var line = start.line, last = doc.lastLine(); line <= last;) { - for (var i = 0; i < chunk; i++) { - if (line > last) break; - var curLine = doc.getLine(line++); - string = string == null ? curLine : string + "\n" + curLine; - } - chunk = chunk * 2; - regexp.lastIndex = start.ch; - var match = regexp.exec(string); - if (match) { - var before = string.slice(0, match.index).split("\n"), - inside = match[0].split("\n"); - var startLine = start.line + before.length - 1, - startCh = before[before.length - 1].length; - return { - from: Pos(startLine, startCh), - to: Pos(startLine + inside.length - 1, inside.length == 1 ? startCh + inside[0].length : inside[inside.length - 1].length), - match - }; - } - } - } - function lastMatchIn(string, regexp, endMargin) { - var match, - from = 0; - while (from <= string.length) { - regexp.lastIndex = from; - var newMatch = regexp.exec(string); - if (!newMatch) break; - var end = newMatch.index + newMatch[0].length; - if (end > string.length - endMargin) break; - if (!match || end > match.index + match[0].length) match = newMatch; - from = newMatch.index + 1; - } - return match; - } - function searchRegexpBackward(doc, regexp, start) { - regexp = ensureFlags(regexp, "g"); - for (var line = start.line, ch = start.ch, first = doc.firstLine(); line >= first; line--, ch = -1) { - var string = doc.getLine(line); - var match = lastMatchIn(string, regexp, ch < 0 ? 0 : string.length - ch); - if (match) return { - from: Pos(line, match.index), - to: Pos(line, match.index + match[0].length), - match - }; - } - } - function searchRegexpBackwardMultiline(doc, regexp, start) { - if (!maybeMultiline(regexp)) return searchRegexpBackward(doc, regexp, start); - regexp = ensureFlags(regexp, "gm"); - var string, - chunkSize = 1, - endMargin = doc.getLine(start.line).length - start.ch; - for (var line = start.line, first = doc.firstLine(); line >= first;) { - for (var i = 0; i < chunkSize && line >= first; i++) { - var curLine = doc.getLine(line--); - string = string == null ? curLine : curLine + "\n" + string; - } - chunkSize *= 2; - var match = lastMatchIn(string, regexp, endMargin); - if (match) { - var before = string.slice(0, match.index).split("\n"), - inside = match[0].split("\n"); - var startLine = line + before.length, - startCh = before[before.length - 1].length; - return { - from: Pos(startLine, startCh), - to: Pos(startLine + inside.length - 1, inside.length == 1 ? startCh + inside[0].length : inside[inside.length - 1].length), - match - }; - } - } - } - var doFold, noFold; - if (String.prototype.normalize) { - doFold = function (str) { - return str.normalize("NFD").toLowerCase(); - }; - noFold = function (str) { - return str.normalize("NFD"); - }; - } else { - doFold = function (str) { - return str.toLowerCase(); - }; - noFold = function (str) { - return str; - }; - } - function adjustPos(orig, folded, pos, foldFunc) { - if (orig.length == folded.length) return pos; - for (var min = 0, max = pos + Math.max(0, orig.length - folded.length);;) { - if (min == max) return min; - var mid = min + max >> 1; - var len = foldFunc(orig.slice(0, mid)).length; - if (len == pos) return mid;else if (len > pos) max = mid;else min = mid + 1; - } - } - function searchStringForward(doc, query, start, caseFold) { - if (!query.length) return null; - var fold = caseFold ? doFold : noFold; - var lines = fold(query).split(/\r|\n\r?/); - search: for (var line = start.line, ch = start.ch, last = doc.lastLine() + 1 - lines.length; line <= last; line++, ch = 0) { - var orig = doc.getLine(line).slice(ch), - string = fold(orig); - if (lines.length == 1) { - var found = string.indexOf(lines[0]); - if (found == -1) continue search; - var start = adjustPos(orig, string, found, fold) + ch; - return { - from: Pos(line, adjustPos(orig, string, found, fold) + ch), - to: Pos(line, adjustPos(orig, string, found + lines[0].length, fold) + ch) - }; - } else { - var cutFrom = string.length - lines[0].length; - if (string.slice(cutFrom) != lines[0]) continue search; - for (var i = 1; i < lines.length - 1; i++) if (fold(doc.getLine(line + i)) != lines[i]) continue search; - var end = doc.getLine(line + lines.length - 1), - endString = fold(end), - lastLine = lines[lines.length - 1]; - if (endString.slice(0, lastLine.length) != lastLine) continue search; - return { - from: Pos(line, adjustPos(orig, string, cutFrom, fold) + ch), - to: Pos(line + lines.length - 1, adjustPos(end, endString, lastLine.length, fold)) - }; - } - } - } - function searchStringBackward(doc, query, start, caseFold) { - if (!query.length) return null; - var fold = caseFold ? doFold : noFold; - var lines = fold(query).split(/\r|\n\r?/); - search: for (var line = start.line, ch = start.ch, first = doc.firstLine() - 1 + lines.length; line >= first; line--, ch = -1) { - var orig = doc.getLine(line); - if (ch > -1) orig = orig.slice(0, ch); - var string = fold(orig); - if (lines.length == 1) { - var found = string.lastIndexOf(lines[0]); - if (found == -1) continue search; - return { - from: Pos(line, adjustPos(orig, string, found, fold)), - to: Pos(line, adjustPos(orig, string, found + lines[0].length, fold)) - }; - } else { - var lastLine = lines[lines.length - 1]; - if (string.slice(0, lastLine.length) != lastLine) continue search; - for (var i = 1, start = line - lines.length + 1; i < lines.length - 1; i++) if (fold(doc.getLine(start + i)) != lines[i]) continue search; - var top = doc.getLine(line + 1 - lines.length), - topString = fold(top); - if (topString.slice(topString.length - lines[0].length) != lines[0]) continue search; - return { - from: Pos(line + 1 - lines.length, adjustPos(top, topString, top.length - lines[0].length, fold)), - to: Pos(line, adjustPos(orig, string, lastLine.length, fold)) - }; - } - } - } - function SearchCursor(doc, query, pos, options) { - this.atOccurrence = false; - this.afterEmptyMatch = false; - this.doc = doc; - pos = pos ? doc.clipPos(pos) : Pos(0, 0); - this.pos = { - from: pos, - to: pos - }; - var caseFold; - if (typeof options == "object") { - caseFold = options.caseFold; - } else { - caseFold = options; - options = null; - } - if (typeof query == "string") { - if (caseFold == null) caseFold = false; - this.matches = function (reverse, pos2) { - return (reverse ? searchStringBackward : searchStringForward)(doc, query, pos2, caseFold); - }; - } else { - query = ensureFlags(query, "gm"); - if (!options || options.multiline !== false) this.matches = function (reverse, pos2) { - return (reverse ? searchRegexpBackwardMultiline : searchRegexpForwardMultiline)(doc, query, pos2); - };else this.matches = function (reverse, pos2) { - return (reverse ? searchRegexpBackward : searchRegexpForward)(doc, query, pos2); - }; - } - } - SearchCursor.prototype = { - findNext: function () { - return this.find(false); - }, - findPrevious: function () { - return this.find(true); - }, - find: function (reverse) { - var head = this.doc.clipPos(reverse ? this.pos.from : this.pos.to); - if (this.afterEmptyMatch && this.atOccurrence) { - head = Pos(head.line, head.ch); - if (reverse) { - head.ch--; - if (head.ch < 0) { - head.line--; - head.ch = (this.doc.getLine(head.line) || "").length; - } - } else { - head.ch++; - if (head.ch > (this.doc.getLine(head.line) || "").length) { - head.ch = 0; - head.line++; - } - } - if (CodeMirror.cmpPos(head, this.doc.clipPos(head)) != 0) { - return this.atOccurrence = false; - } - } - var result = this.matches(reverse, head); - this.afterEmptyMatch = result && CodeMirror.cmpPos(result.from, result.to) == 0; - if (result) { - this.pos = result; - this.atOccurrence = true; - return this.pos.match || true; - } else { - var end = Pos(reverse ? this.doc.firstLine() : this.doc.lastLine() + 1, 0); - this.pos = { - from: end, - to: end - }; - return this.atOccurrence = false; - } - }, - from: function () { - if (this.atOccurrence) return this.pos.from; - }, - to: function () { - if (this.atOccurrence) return this.pos.to; - }, - replace: function (newText, origin) { - if (!this.atOccurrence) return; - var lines = CodeMirror.splitLines(newText); - this.doc.replaceRange(lines, this.pos.from, this.pos.to, origin); - this.pos.to = Pos(this.pos.from.line + lines.length - 1, lines[lines.length - 1].length + (lines.length == 1 ? this.pos.from.ch : 0)); - } - }; - CodeMirror.defineExtension("getSearchCursor", function (query, pos, caseFold) { - return new SearchCursor(this.doc, query, pos, caseFold); - }); - CodeMirror.defineDocExtension("getSearchCursor", function (query, pos, caseFold) { - return new SearchCursor(this, query, pos, caseFold); - }); - CodeMirror.defineExtension("selectMatches", function (query, caseFold) { - var ranges = []; - var cur = this.getSearchCursor(query, this.getCursor("from"), caseFold); - while (cur.findNext()) { - if (CodeMirror.cmpPos(cur.to(), this.getCursor("to")) > 0) break; - ranges.push({ - anchor: cur.from(), - head: cur.to() - }); - } - if (ranges.length) this.setSelections(ranges, 0); - }); - }); - })(); - return searchcursor.exports; -} -exports.requireSearchcursor = requireSearchcursor; - -/***/ }), - -/***/ "../../graphiql-react/dist/show-hint.cjs.js": -/*!**************************************************!*\ - !*** ../../graphiql-react/dist/show-hint.cjs.js ***! - \**************************************************/ -/***/ (function(__unused_webpack_module, exports, __webpack_require__) { - - - -const codemirror = __webpack_require__(/*! ./codemirror.cjs2.js */ "../../graphiql-react/dist/codemirror.cjs2.js"); -function _mergeNamespaces(n, m) { - for (var i = 0; i < m.length; i++) { - const e = m[i]; - if (typeof e !== "string" && !Array.isArray(e)) { - for (const k in e) { - if (k !== "default" && !(k in n)) { - const d = Object.getOwnPropertyDescriptor(e, k); - if (d) { - Object.defineProperty(n, k, d.get ? d : { - enumerable: true, - get: () => e[k] - }); - } - } - } - } - } - return Object.freeze(Object.defineProperty(n, Symbol.toStringTag, { - value: "Module" - })); -} -var showHint$2 = { - exports: {} -}; -(function (module2, exports2) { - (function (mod) { - mod(codemirror.requireCodemirror()); - })(function (CodeMirror) { - var HINT_ELEMENT_CLASS = "CodeMirror-hint"; - var ACTIVE_HINT_ELEMENT_CLASS = "CodeMirror-hint-active"; - CodeMirror.showHint = function (cm, getHints, options) { - if (!getHints) return cm.showHint(options); - if (options && options.async) getHints.async = true; - var newOpts = { - hint: getHints - }; - if (options) for (var prop in options) newOpts[prop] = options[prop]; - return cm.showHint(newOpts); - }; - CodeMirror.defineExtension("showHint", function (options) { - options = parseOptions(this, this.getCursor("start"), options); - var selections = this.listSelections(); - if (selections.length > 1) return; - if (this.somethingSelected()) { - if (!options.hint.supportsSelection) return; - for (var i = 0; i < selections.length; i++) if (selections[i].head.line != selections[i].anchor.line) return; - } - if (this.state.completionActive) this.state.completionActive.close(); - var completion = this.state.completionActive = new Completion(this, options); - if (!completion.options.hint) return; - CodeMirror.signal(this, "startCompletion", this); - completion.update(true); - }); - CodeMirror.defineExtension("closeHint", function () { - if (this.state.completionActive) this.state.completionActive.close(); - }); - function Completion(cm, options) { - this.cm = cm; - this.options = options; - this.widget = null; - this.debounce = 0; - this.tick = 0; - this.startPos = this.cm.getCursor("start"); - this.startLen = this.cm.getLine(this.startPos.line).length - this.cm.getSelection().length; - if (this.options.updateOnCursorActivity) { - var self = this; - cm.on("cursorActivity", this.activityFunc = function () { - self.cursorActivity(); - }); - } - } - var requestAnimationFrame = window.requestAnimationFrame || function (fn) { - return setTimeout(fn, 1e3 / 60); - }; - var cancelAnimationFrame = window.cancelAnimationFrame || clearTimeout; - Completion.prototype = { - close: function () { - if (!this.active()) return; - this.cm.state.completionActive = null; - this.tick = null; - if (this.options.updateOnCursorActivity) { - this.cm.off("cursorActivity", this.activityFunc); - } - if (this.widget && this.data) CodeMirror.signal(this.data, "close"); - if (this.widget) this.widget.close(); - CodeMirror.signal(this.cm, "endCompletion", this.cm); - }, - active: function () { - return this.cm.state.completionActive == this; - }, - pick: function (data, i) { - var completion = data.list[i], - self = this; - this.cm.operation(function () { - if (completion.hint) completion.hint(self.cm, data, completion);else self.cm.replaceRange(getText(completion), completion.from || data.from, completion.to || data.to, "complete"); - CodeMirror.signal(data, "pick", completion); - self.cm.scrollIntoView(); - }); - if (this.options.closeOnPick) { - this.close(); - } - }, - cursorActivity: function () { - if (this.debounce) { - cancelAnimationFrame(this.debounce); - this.debounce = 0; - } - var identStart = this.startPos; - if (this.data) { - identStart = this.data.from; - } - var pos = this.cm.getCursor(), - line = this.cm.getLine(pos.line); - if (pos.line != this.startPos.line || line.length - pos.ch != this.startLen - this.startPos.ch || pos.ch < identStart.ch || this.cm.somethingSelected() || !pos.ch || this.options.closeCharacters.test(line.charAt(pos.ch - 1))) { - this.close(); - } else { - var self = this; - this.debounce = requestAnimationFrame(function () { - self.update(); - }); - if (this.widget) this.widget.disable(); - } - }, - update: function (first) { - if (this.tick == null) return; - var self = this, - myTick = ++this.tick; - fetchHints(this.options.hint, this.cm, this.options, function (data) { - if (self.tick == myTick) self.finishUpdate(data, first); - }); - }, - finishUpdate: function (data, first) { - if (this.data) CodeMirror.signal(this.data, "update"); - var picked = this.widget && this.widget.picked || first && this.options.completeSingle; - if (this.widget) this.widget.close(); - this.data = data; - if (data && data.list.length) { - if (picked && data.list.length == 1) { - this.pick(data, 0); - } else { - this.widget = new Widget(this, data); - CodeMirror.signal(data, "shown"); - } - } - } - }; - function parseOptions(cm, pos, options) { - var editor = cm.options.hintOptions; - var out = {}; - for (var prop in defaultOptions) out[prop] = defaultOptions[prop]; - if (editor) { - for (var prop in editor) if (editor[prop] !== void 0) out[prop] = editor[prop]; - } - if (options) { - for (var prop in options) if (options[prop] !== void 0) out[prop] = options[prop]; - } - if (out.hint.resolve) out.hint = out.hint.resolve(cm, pos); - return out; - } - function getText(completion) { - if (typeof completion == "string") return completion;else return completion.text; - } - function buildKeyMap(completion, handle) { - var baseMap = { - Up: function () { - handle.moveFocus(-1); - }, - Down: function () { - handle.moveFocus(1); - }, - PageUp: function () { - handle.moveFocus(-handle.menuSize() + 1, true); - }, - PageDown: function () { - handle.moveFocus(handle.menuSize() - 1, true); - }, - Home: function () { - handle.setFocus(0); - }, - End: function () { - handle.setFocus(handle.length - 1); - }, - Enter: handle.pick, - Tab: handle.pick, - Esc: handle.close - }; - var mac = /Mac/.test(navigator.platform); - if (mac) { - baseMap["Ctrl-P"] = function () { - handle.moveFocus(-1); - }; - baseMap["Ctrl-N"] = function () { - handle.moveFocus(1); - }; - } - var custom = completion.options.customKeys; - var ourMap = custom ? {} : baseMap; - function addBinding(key2, val) { - var bound; - if (typeof val != "string") bound = function (cm) { - return val(cm, handle); - };else if (baseMap.hasOwnProperty(val)) bound = baseMap[val];else bound = val; - ourMap[key2] = bound; - } - if (custom) { - for (var key in custom) if (custom.hasOwnProperty(key)) addBinding(key, custom[key]); - } - var extra = completion.options.extraKeys; - if (extra) { - for (var key in extra) if (extra.hasOwnProperty(key)) addBinding(key, extra[key]); - } - return ourMap; - } - function getHintElement(hintsElement, el) { - while (el && el != hintsElement) { - if (el.nodeName.toUpperCase() === "LI" && el.parentNode == hintsElement) return el; - el = el.parentNode; - } - } - function Widget(completion, data) { - this.id = "cm-complete-" + Math.floor(Math.random(1e6)); - this.completion = completion; - this.data = data; - this.picked = false; - var widget = this, - cm = completion.cm; - var ownerDocument = cm.getInputField().ownerDocument; - var parentWindow = ownerDocument.defaultView || ownerDocument.parentWindow; - var hints = this.hints = ownerDocument.createElement("ul"); - hints.setAttribute("role", "listbox"); - hints.setAttribute("aria-expanded", "true"); - hints.id = this.id; - var theme = completion.cm.options.theme; - hints.className = "CodeMirror-hints " + theme; - this.selectedHint = data.selectedHint || 0; - var completions = data.list; - for (var i = 0; i < completions.length; ++i) { - var elt = hints.appendChild(ownerDocument.createElement("li")), - cur = completions[i]; - var className = HINT_ELEMENT_CLASS + (i != this.selectedHint ? "" : " " + ACTIVE_HINT_ELEMENT_CLASS); - if (cur.className != null) className = cur.className + " " + className; - elt.className = className; - if (i == this.selectedHint) elt.setAttribute("aria-selected", "true"); - elt.id = this.id + "-" + i; - elt.setAttribute("role", "option"); - if (cur.render) cur.render(elt, data, cur);else elt.appendChild(ownerDocument.createTextNode(cur.displayText || getText(cur))); - elt.hintId = i; - } - var container = completion.options.container || ownerDocument.body; - var pos = cm.cursorCoords(completion.options.alignWithWord ? data.from : null); - var left = pos.left, - top = pos.bottom, - below = true; - var offsetLeft = 0, - offsetTop = 0; - if (container !== ownerDocument.body) { - var isContainerPositioned = ["absolute", "relative", "fixed"].indexOf(parentWindow.getComputedStyle(container).position) !== -1; - var offsetParent = isContainerPositioned ? container : container.offsetParent; - var offsetParentPosition = offsetParent.getBoundingClientRect(); - var bodyPosition = ownerDocument.body.getBoundingClientRect(); - offsetLeft = offsetParentPosition.left - bodyPosition.left - offsetParent.scrollLeft; - offsetTop = offsetParentPosition.top - bodyPosition.top - offsetParent.scrollTop; - } - hints.style.left = left - offsetLeft + "px"; - hints.style.top = top - offsetTop + "px"; - var winW = parentWindow.innerWidth || Math.max(ownerDocument.body.offsetWidth, ownerDocument.documentElement.offsetWidth); - var winH = parentWindow.innerHeight || Math.max(ownerDocument.body.offsetHeight, ownerDocument.documentElement.offsetHeight); - container.appendChild(hints); - cm.getInputField().setAttribute("aria-autocomplete", "list"); - cm.getInputField().setAttribute("aria-owns", this.id); - cm.getInputField().setAttribute("aria-activedescendant", this.id + "-" + this.selectedHint); - var box = completion.options.moveOnOverlap ? hints.getBoundingClientRect() : new DOMRect(); - var scrolls = completion.options.paddingForScrollbar ? hints.scrollHeight > hints.clientHeight + 1 : false; - var startScroll; - setTimeout(function () { - startScroll = cm.getScrollInfo(); - }); - var overlapY = box.bottom - winH; - if (overlapY > 0) { - var height = box.bottom - box.top, - curTop = pos.top - (pos.bottom - box.top); - if (curTop - height > 0) { - hints.style.top = (top = pos.top - height - offsetTop) + "px"; - below = false; - } else if (height > winH) { - hints.style.height = winH - 5 + "px"; - hints.style.top = (top = pos.bottom - box.top - offsetTop) + "px"; - var cursor = cm.getCursor(); - if (data.from.ch != cursor.ch) { - pos = cm.cursorCoords(cursor); - hints.style.left = (left = pos.left - offsetLeft) + "px"; - box = hints.getBoundingClientRect(); - } - } - } - var overlapX = box.right - winW; - if (scrolls) overlapX += cm.display.nativeBarWidth; - if (overlapX > 0) { - if (box.right - box.left > winW) { - hints.style.width = winW - 5 + "px"; - overlapX -= box.right - box.left - winW; - } - hints.style.left = (left = pos.left - overlapX - offsetLeft) + "px"; - } - if (scrolls) for (var node = hints.firstChild; node; node = node.nextSibling) node.style.paddingRight = cm.display.nativeBarWidth + "px"; - cm.addKeyMap(this.keyMap = buildKeyMap(completion, { - moveFocus: function (n, avoidWrap) { - widget.changeActive(widget.selectedHint + n, avoidWrap); - }, - setFocus: function (n) { - widget.changeActive(n); - }, - menuSize: function () { - return widget.screenAmount(); - }, - length: completions.length, - close: function () { - completion.close(); - }, - pick: function () { - widget.pick(); - }, - data - })); - if (completion.options.closeOnUnfocus) { - var closingOnBlur; - cm.on("blur", this.onBlur = function () { - closingOnBlur = setTimeout(function () { - completion.close(); - }, 100); - }); - cm.on("focus", this.onFocus = function () { - clearTimeout(closingOnBlur); - }); - } - cm.on("scroll", this.onScroll = function () { - var curScroll = cm.getScrollInfo(), - editor = cm.getWrapperElement().getBoundingClientRect(); - if (!startScroll) startScroll = cm.getScrollInfo(); - var newTop = top + startScroll.top - curScroll.top; - var point = newTop - (parentWindow.pageYOffset || (ownerDocument.documentElement || ownerDocument.body).scrollTop); - if (!below) point += hints.offsetHeight; - if (point <= editor.top || point >= editor.bottom) return completion.close(); - hints.style.top = newTop + "px"; - hints.style.left = left + startScroll.left - curScroll.left + "px"; - }); - CodeMirror.on(hints, "dblclick", function (e) { - var t = getHintElement(hints, e.target || e.srcElement); - if (t && t.hintId != null) { - widget.changeActive(t.hintId); - widget.pick(); - } - }); - CodeMirror.on(hints, "click", function (e) { - var t = getHintElement(hints, e.target || e.srcElement); - if (t && t.hintId != null) { - widget.changeActive(t.hintId); - if (completion.options.completeOnSingleClick) widget.pick(); - } - }); - CodeMirror.on(hints, "mousedown", function () { - setTimeout(function () { - cm.focus(); - }, 20); - }); - var selectedHintRange = this.getSelectedHintRange(); - if (selectedHintRange.from !== 0 || selectedHintRange.to !== 0) { - this.scrollToActive(); - } - CodeMirror.signal(data, "select", completions[this.selectedHint], hints.childNodes[this.selectedHint]); - return true; - } - Widget.prototype = { - close: function () { - if (this.completion.widget != this) return; - this.completion.widget = null; - if (this.hints.parentNode) this.hints.parentNode.removeChild(this.hints); - this.completion.cm.removeKeyMap(this.keyMap); - var input = this.completion.cm.getInputField(); - input.removeAttribute("aria-activedescendant"); - input.removeAttribute("aria-owns"); - var cm = this.completion.cm; - if (this.completion.options.closeOnUnfocus) { - cm.off("blur", this.onBlur); - cm.off("focus", this.onFocus); - } - cm.off("scroll", this.onScroll); - }, - disable: function () { - this.completion.cm.removeKeyMap(this.keyMap); - var widget = this; - this.keyMap = { - Enter: function () { - widget.picked = true; - } - }; - this.completion.cm.addKeyMap(this.keyMap); - }, - pick: function () { - this.completion.pick(this.data, this.selectedHint); - }, - changeActive: function (i, avoidWrap) { - if (i >= this.data.list.length) i = avoidWrap ? this.data.list.length - 1 : 0;else if (i < 0) i = avoidWrap ? 0 : this.data.list.length - 1; - if (this.selectedHint == i) return; - var node = this.hints.childNodes[this.selectedHint]; - if (node) { - node.className = node.className.replace(" " + ACTIVE_HINT_ELEMENT_CLASS, ""); - node.removeAttribute("aria-selected"); - } - node = this.hints.childNodes[this.selectedHint = i]; - node.className += " " + ACTIVE_HINT_ELEMENT_CLASS; - node.setAttribute("aria-selected", "true"); - this.completion.cm.getInputField().setAttribute("aria-activedescendant", node.id); - this.scrollToActive(); - CodeMirror.signal(this.data, "select", this.data.list[this.selectedHint], node); - }, - scrollToActive: function () { - var selectedHintRange = this.getSelectedHintRange(); - var node1 = this.hints.childNodes[selectedHintRange.from]; - var node2 = this.hints.childNodes[selectedHintRange.to]; - var firstNode = this.hints.firstChild; - if (node1.offsetTop < this.hints.scrollTop) this.hints.scrollTop = node1.offsetTop - firstNode.offsetTop;else if (node2.offsetTop + node2.offsetHeight > this.hints.scrollTop + this.hints.clientHeight) this.hints.scrollTop = node2.offsetTop + node2.offsetHeight - this.hints.clientHeight + firstNode.offsetTop; - }, - screenAmount: function () { - return Math.floor(this.hints.clientHeight / this.hints.firstChild.offsetHeight) || 1; - }, - getSelectedHintRange: function () { - var margin = this.completion.options.scrollMargin || 0; - return { - from: Math.max(0, this.selectedHint - margin), - to: Math.min(this.data.list.length - 1, this.selectedHint + margin) - }; - } - }; - function applicableHelpers(cm, helpers) { - if (!cm.somethingSelected()) return helpers; - var result = []; - for (var i = 0; i < helpers.length; i++) if (helpers[i].supportsSelection) result.push(helpers[i]); - return result; - } - function fetchHints(hint, cm, options, callback) { - if (hint.async) { - hint(cm, callback, options); - } else { - var result = hint(cm, options); - if (result && result.then) result.then(callback);else callback(result); - } - } - function resolveAutoHints(cm, pos) { - var helpers = cm.getHelpers(pos, "hint"), - words; - if (helpers.length) { - var resolved = function (cm2, callback, options) { - var app = applicableHelpers(cm2, helpers); - function run(i) { - if (i == app.length) return callback(null); - fetchHints(app[i], cm2, options, function (result) { - if (result && result.list.length > 0) callback(result);else run(i + 1); - }); - } - run(0); - }; - resolved.async = true; - resolved.supportsSelection = true; - return resolved; - } else if (words = cm.getHelper(cm.getCursor(), "hintWords")) { - return function (cm2) { - return CodeMirror.hint.fromList(cm2, { - words - }); - }; - } else if (CodeMirror.hint.anyword) { - return function (cm2, options) { - return CodeMirror.hint.anyword(cm2, options); - }; - } else { - return function () {}; - } - } - CodeMirror.registerHelper("hint", "auto", { - resolve: resolveAutoHints - }); - CodeMirror.registerHelper("hint", "fromList", function (cm, options) { - var cur = cm.getCursor(), - token = cm.getTokenAt(cur); - var term, - from = CodeMirror.Pos(cur.line, token.start), - to = cur; - if (token.start < cur.ch && /\w/.test(token.string.charAt(cur.ch - token.start - 1))) { - term = token.string.substr(0, cur.ch - token.start); - } else { - term = ""; - from = cur; - } - var found = []; - for (var i = 0; i < options.words.length; i++) { - var word = options.words[i]; - if (word.slice(0, term.length) == term) found.push(word); - } - if (found.length) return { - list: found, - from, - to - }; - }); - CodeMirror.commands.autocomplete = CodeMirror.showHint; - var defaultOptions = { - hint: CodeMirror.hint.auto, - completeSingle: true, - alignWithWord: true, - closeCharacters: /[\s()\[\]{};:>,]/, - closeOnPick: true, - closeOnUnfocus: true, - updateOnCursorActivity: true, - completeOnSingleClick: true, - container: null, - customKeys: null, - extraKeys: null, - paddingForScrollbar: true, - moveOnOverlap: true - }; - CodeMirror.defineOption("hintOptions", null); - }); -})(); -var showHintExports = showHint$2.exports; -const showHint = /* @__PURE__ */codemirror.getDefaultExportFromCjs(showHintExports); -const showHint$1 = /* @__PURE__ */_mergeNamespaces({ - __proto__: null, - default: showHint -}, [showHintExports]); -exports.showHint = showHint$1; - -/***/ }), - -/***/ "../../graphiql-react/dist/sublime.cjs.js": -/*!************************************************!*\ - !*** ../../graphiql-react/dist/sublime.cjs.js ***! - \************************************************/ -/***/ (function(__unused_webpack_module, exports, __webpack_require__) { - - - -const codemirror = __webpack_require__(/*! ./codemirror.cjs2.js */ "../../graphiql-react/dist/codemirror.cjs2.js"); -const searchcursor = __webpack_require__(/*! ./searchcursor.cjs2.js */ "../../graphiql-react/dist/searchcursor.cjs2.js"); -const matchbrackets = __webpack_require__(/*! ./matchbrackets.cjs2.js */ "../../graphiql-react/dist/matchbrackets.cjs2.js"); -function _mergeNamespaces(n, m) { - for (var i = 0; i < m.length; i++) { - const e = m[i]; - if (typeof e !== "string" && !Array.isArray(e)) { - for (const k in e) { - if (k !== "default" && !(k in n)) { - const d = Object.getOwnPropertyDescriptor(e, k); - if (d) { - Object.defineProperty(n, k, d.get ? d : { - enumerable: true, - get: () => e[k] - }); - } - } - } - } - } - return Object.freeze(Object.defineProperty(n, Symbol.toStringTag, { - value: "Module" - })); -} -var sublime$2 = { - exports: {} -}; -(function (module2, exports2) { - (function (mod) { - mod(codemirror.requireCodemirror(), searchcursor.requireSearchcursor(), matchbrackets.requireMatchbrackets()); - })(function (CodeMirror) { - var cmds = CodeMirror.commands; - var Pos = CodeMirror.Pos; - function findPosSubword(doc, start, dir) { - if (dir < 0 && start.ch == 0) return doc.clipPos(Pos(start.line - 1)); - var line = doc.getLine(start.line); - if (dir > 0 && start.ch >= line.length) return doc.clipPos(Pos(start.line + 1, 0)); - var state = "start", - type, - startPos = start.ch; - for (var pos = startPos, e = dir < 0 ? 0 : line.length, i = 0; pos != e; pos += dir, i++) { - var next = line.charAt(dir < 0 ? pos - 1 : pos); - var cat = next != "_" && CodeMirror.isWordChar(next) ? "w" : "o"; - if (cat == "w" && next.toUpperCase() == next) cat = "W"; - if (state == "start") { - if (cat != "o") { - state = "in"; - type = cat; - } else startPos = pos + dir; - } else if (state == "in") { - if (type != cat) { - if (type == "w" && cat == "W" && dir < 0) pos--; - if (type == "W" && cat == "w" && dir > 0) { - if (pos == startPos + 1) { - type = "w"; - continue; - } else pos--; - } - break; - } - } - } - return Pos(start.line, pos); - } - function moveSubword(cm, dir) { - cm.extendSelectionsBy(function (range) { - if (cm.display.shift || cm.doc.extend || range.empty()) return findPosSubword(cm.doc, range.head, dir);else return dir < 0 ? range.from() : range.to(); - }); - } - cmds.goSubwordLeft = function (cm) { - moveSubword(cm, -1); - }; - cmds.goSubwordRight = function (cm) { - moveSubword(cm, 1); - }; - cmds.scrollLineUp = function (cm) { - var info = cm.getScrollInfo(); - if (!cm.somethingSelected()) { - var visibleBottomLine = cm.lineAtHeight(info.top + info.clientHeight, "local"); - if (cm.getCursor().line >= visibleBottomLine) cm.execCommand("goLineUp"); - } - cm.scrollTo(null, info.top - cm.defaultTextHeight()); - }; - cmds.scrollLineDown = function (cm) { - var info = cm.getScrollInfo(); - if (!cm.somethingSelected()) { - var visibleTopLine = cm.lineAtHeight(info.top, "local") + 1; - if (cm.getCursor().line <= visibleTopLine) cm.execCommand("goLineDown"); - } - cm.scrollTo(null, info.top + cm.defaultTextHeight()); - }; - cmds.splitSelectionByLine = function (cm) { - var ranges = cm.listSelections(), - lineRanges = []; - for (var i = 0; i < ranges.length; i++) { - var from = ranges[i].from(), - to = ranges[i].to(); - for (var line = from.line; line <= to.line; ++line) if (!(to.line > from.line && line == to.line && to.ch == 0)) lineRanges.push({ - anchor: line == from.line ? from : Pos(line, 0), - head: line == to.line ? to : Pos(line) - }); - } - cm.setSelections(lineRanges, 0); - }; - cmds.singleSelectionTop = function (cm) { - var range = cm.listSelections()[0]; - cm.setSelection(range.anchor, range.head, { - scroll: false - }); - }; - cmds.selectLine = function (cm) { - var ranges = cm.listSelections(), - extended = []; - for (var i = 0; i < ranges.length; i++) { - var range = ranges[i]; - extended.push({ - anchor: Pos(range.from().line, 0), - head: Pos(range.to().line + 1, 0) - }); - } - cm.setSelections(extended); - }; - function insertLine(cm, above) { - if (cm.isReadOnly()) return CodeMirror.Pass; - cm.operation(function () { - var len = cm.listSelections().length, - newSelection = [], - last = -1; - for (var i = 0; i < len; i++) { - var head = cm.listSelections()[i].head; - if (head.line <= last) continue; - var at = Pos(head.line + (above ? 0 : 1), 0); - cm.replaceRange("\n", at, null, "+insertLine"); - cm.indentLine(at.line, null, true); - newSelection.push({ - head: at, - anchor: at - }); - last = head.line + 1; - } - cm.setSelections(newSelection); - }); - cm.execCommand("indentAuto"); - } - cmds.insertLineAfter = function (cm) { - return insertLine(cm, false); - }; - cmds.insertLineBefore = function (cm) { - return insertLine(cm, true); - }; - function wordAt(cm, pos) { - var start = pos.ch, - end = start, - line = cm.getLine(pos.line); - while (start && CodeMirror.isWordChar(line.charAt(start - 1))) --start; - while (end < line.length && CodeMirror.isWordChar(line.charAt(end))) ++end; - return { - from: Pos(pos.line, start), - to: Pos(pos.line, end), - word: line.slice(start, end) - }; - } - cmds.selectNextOccurrence = function (cm) { - var from = cm.getCursor("from"), - to = cm.getCursor("to"); - var fullWord = cm.state.sublimeFindFullWord == cm.doc.sel; - if (CodeMirror.cmpPos(from, to) == 0) { - var word = wordAt(cm, from); - if (!word.word) return; - cm.setSelection(word.from, word.to); - fullWord = true; - } else { - var text = cm.getRange(from, to); - var query = fullWord ? new RegExp("\\b" + text + "\\b") : text; - var cur = cm.getSearchCursor(query, to); - var found = cur.findNext(); - if (!found) { - cur = cm.getSearchCursor(query, Pos(cm.firstLine(), 0)); - found = cur.findNext(); - } - if (!found || isSelectedRange(cm.listSelections(), cur.from(), cur.to())) return; - cm.addSelection(cur.from(), cur.to()); - } - if (fullWord) cm.state.sublimeFindFullWord = cm.doc.sel; - }; - cmds.skipAndSelectNextOccurrence = function (cm) { - var prevAnchor = cm.getCursor("anchor"), - prevHead = cm.getCursor("head"); - cmds.selectNextOccurrence(cm); - if (CodeMirror.cmpPos(prevAnchor, prevHead) != 0) { - cm.doc.setSelections(cm.doc.listSelections().filter(function (sel) { - return sel.anchor != prevAnchor || sel.head != prevHead; - })); - } - }; - function addCursorToSelection(cm, dir) { - var ranges = cm.listSelections(), - newRanges = []; - for (var i = 0; i < ranges.length; i++) { - var range = ranges[i]; - var newAnchor = cm.findPosV(range.anchor, dir, "line", range.anchor.goalColumn); - var newHead = cm.findPosV(range.head, dir, "line", range.head.goalColumn); - newAnchor.goalColumn = range.anchor.goalColumn != null ? range.anchor.goalColumn : cm.cursorCoords(range.anchor, "div").left; - newHead.goalColumn = range.head.goalColumn != null ? range.head.goalColumn : cm.cursorCoords(range.head, "div").left; - var newRange = { - anchor: newAnchor, - head: newHead - }; - newRanges.push(range); - newRanges.push(newRange); - } - cm.setSelections(newRanges); - } - cmds.addCursorToPrevLine = function (cm) { - addCursorToSelection(cm, -1); - }; - cmds.addCursorToNextLine = function (cm) { - addCursorToSelection(cm, 1); - }; - function isSelectedRange(ranges, from, to) { - for (var i = 0; i < ranges.length; i++) if (CodeMirror.cmpPos(ranges[i].from(), from) == 0 && CodeMirror.cmpPos(ranges[i].to(), to) == 0) return true; - return false; - } - var mirror = "(){}[]"; - function selectBetweenBrackets(cm) { - var ranges = cm.listSelections(), - newRanges = []; - for (var i = 0; i < ranges.length; i++) { - var range = ranges[i], - pos = range.head, - opening = cm.scanForBracket(pos, -1); - if (!opening) return false; - for (;;) { - var closing = cm.scanForBracket(pos, 1); - if (!closing) return false; - if (closing.ch == mirror.charAt(mirror.indexOf(opening.ch) + 1)) { - var startPos = Pos(opening.pos.line, opening.pos.ch + 1); - if (CodeMirror.cmpPos(startPos, range.from()) == 0 && CodeMirror.cmpPos(closing.pos, range.to()) == 0) { - opening = cm.scanForBracket(opening.pos, -1); - if (!opening) return false; - } else { - newRanges.push({ - anchor: startPos, - head: closing.pos - }); - break; - } - } - pos = Pos(closing.pos.line, closing.pos.ch + 1); - } - } - cm.setSelections(newRanges); - return true; - } - cmds.selectScope = function (cm) { - selectBetweenBrackets(cm) || cm.execCommand("selectAll"); - }; - cmds.selectBetweenBrackets = function (cm) { - if (!selectBetweenBrackets(cm)) return CodeMirror.Pass; - }; - function puncType(type) { - return !type ? null : /\bpunctuation\b/.test(type) ? type : void 0; - } - cmds.goToBracket = function (cm) { - cm.extendSelectionsBy(function (range) { - var next = cm.scanForBracket(range.head, 1, puncType(cm.getTokenTypeAt(range.head))); - if (next && CodeMirror.cmpPos(next.pos, range.head) != 0) return next.pos; - var prev = cm.scanForBracket(range.head, -1, puncType(cm.getTokenTypeAt(Pos(range.head.line, range.head.ch + 1)))); - return prev && Pos(prev.pos.line, prev.pos.ch + 1) || range.head; - }); - }; - cmds.swapLineUp = function (cm) { - if (cm.isReadOnly()) return CodeMirror.Pass; - var ranges = cm.listSelections(), - linesToMove = [], - at = cm.firstLine() - 1, - newSels = []; - for (var i = 0; i < ranges.length; i++) { - var range = ranges[i], - from = range.from().line - 1, - to = range.to().line; - newSels.push({ - anchor: Pos(range.anchor.line - 1, range.anchor.ch), - head: Pos(range.head.line - 1, range.head.ch) - }); - if (range.to().ch == 0 && !range.empty()) --to; - if (from > at) linesToMove.push(from, to);else if (linesToMove.length) linesToMove[linesToMove.length - 1] = to; - at = to; - } - cm.operation(function () { - for (var i2 = 0; i2 < linesToMove.length; i2 += 2) { - var from2 = linesToMove[i2], - to2 = linesToMove[i2 + 1]; - var line = cm.getLine(from2); - cm.replaceRange("", Pos(from2, 0), Pos(from2 + 1, 0), "+swapLine"); - if (to2 > cm.lastLine()) cm.replaceRange("\n" + line, Pos(cm.lastLine()), null, "+swapLine");else cm.replaceRange(line + "\n", Pos(to2, 0), null, "+swapLine"); - } - cm.setSelections(newSels); - cm.scrollIntoView(); - }); - }; - cmds.swapLineDown = function (cm) { - if (cm.isReadOnly()) return CodeMirror.Pass; - var ranges = cm.listSelections(), - linesToMove = [], - at = cm.lastLine() + 1; - for (var i = ranges.length - 1; i >= 0; i--) { - var range = ranges[i], - from = range.to().line + 1, - to = range.from().line; - if (range.to().ch == 0 && !range.empty()) from--; - if (from < at) linesToMove.push(from, to);else if (linesToMove.length) linesToMove[linesToMove.length - 1] = to; - at = to; - } - cm.operation(function () { - for (var i2 = linesToMove.length - 2; i2 >= 0; i2 -= 2) { - var from2 = linesToMove[i2], - to2 = linesToMove[i2 + 1]; - var line = cm.getLine(from2); - if (from2 == cm.lastLine()) cm.replaceRange("", Pos(from2 - 1), Pos(from2), "+swapLine");else cm.replaceRange("", Pos(from2, 0), Pos(from2 + 1, 0), "+swapLine"); - cm.replaceRange(line + "\n", Pos(to2, 0), null, "+swapLine"); - } - cm.scrollIntoView(); - }); - }; - cmds.toggleCommentIndented = function (cm) { - cm.toggleComment({ - indent: true - }); - }; - cmds.joinLines = function (cm) { - var ranges = cm.listSelections(), - joined = []; - for (var i = 0; i < ranges.length; i++) { - var range = ranges[i], - from = range.from(); - var start = from.line, - end = range.to().line; - while (i < ranges.length - 1 && ranges[i + 1].from().line == end) end = ranges[++i].to().line; - joined.push({ - start, - end, - anchor: !range.empty() && from - }); - } - cm.operation(function () { - var offset = 0, - ranges2 = []; - for (var i2 = 0; i2 < joined.length; i2++) { - var obj = joined[i2]; - var anchor = obj.anchor && Pos(obj.anchor.line - offset, obj.anchor.ch), - head; - for (var line = obj.start; line <= obj.end; line++) { - var actual = line - offset; - if (line == obj.end) head = Pos(actual, cm.getLine(actual).length + 1); - if (actual < cm.lastLine()) { - cm.replaceRange(" ", Pos(actual), Pos(actual + 1, /^\s*/.exec(cm.getLine(actual + 1))[0].length)); - ++offset; - } - } - ranges2.push({ - anchor: anchor || head, - head - }); - } - cm.setSelections(ranges2, 0); - }); - }; - cmds.duplicateLine = function (cm) { - cm.operation(function () { - var rangeCount = cm.listSelections().length; - for (var i = 0; i < rangeCount; i++) { - var range = cm.listSelections()[i]; - if (range.empty()) cm.replaceRange(cm.getLine(range.head.line) + "\n", Pos(range.head.line, 0));else cm.replaceRange(cm.getRange(range.from(), range.to()), range.from()); - } - cm.scrollIntoView(); - }); - }; - function sortLines(cm, caseSensitive, direction) { - if (cm.isReadOnly()) return CodeMirror.Pass; - var ranges = cm.listSelections(), - toSort = [], - selected; - for (var i = 0; i < ranges.length; i++) { - var range = ranges[i]; - if (range.empty()) continue; - var from = range.from().line, - to = range.to().line; - while (i < ranges.length - 1 && ranges[i + 1].from().line == to) to = ranges[++i].to().line; - if (!ranges[i].to().ch) to--; - toSort.push(from, to); - } - if (toSort.length) selected = true;else toSort.push(cm.firstLine(), cm.lastLine()); - cm.operation(function () { - var ranges2 = []; - for (var i2 = 0; i2 < toSort.length; i2 += 2) { - var from2 = toSort[i2], - to2 = toSort[i2 + 1]; - var start = Pos(from2, 0), - end = Pos(to2); - var lines = cm.getRange(start, end, false); - if (caseSensitive) lines.sort(function (a, b) { - return a < b ? -direction : a == b ? 0 : direction; - });else lines.sort(function (a, b) { - var au = a.toUpperCase(), - bu = b.toUpperCase(); - if (au != bu) { - a = au; - b = bu; - } - return a < b ? -direction : a == b ? 0 : direction; - }); - cm.replaceRange(lines, start, end); - if (selected) ranges2.push({ - anchor: start, - head: Pos(to2 + 1, 0) - }); - } - if (selected) cm.setSelections(ranges2, 0); - }); - } - cmds.sortLines = function (cm) { - sortLines(cm, true, 1); - }; - cmds.reverseSortLines = function (cm) { - sortLines(cm, true, -1); - }; - cmds.sortLinesInsensitive = function (cm) { - sortLines(cm, false, 1); - }; - cmds.reverseSortLinesInsensitive = function (cm) { - sortLines(cm, false, -1); - }; - cmds.nextBookmark = function (cm) { - var marks = cm.state.sublimeBookmarks; - if (marks) while (marks.length) { - var current = marks.shift(); - var found = current.find(); - if (found) { - marks.push(current); - return cm.setSelection(found.from, found.to); - } - } - }; - cmds.prevBookmark = function (cm) { - var marks = cm.state.sublimeBookmarks; - if (marks) while (marks.length) { - marks.unshift(marks.pop()); - var found = marks[marks.length - 1].find(); - if (!found) marks.pop();else return cm.setSelection(found.from, found.to); - } - }; - cmds.toggleBookmark = function (cm) { - var ranges = cm.listSelections(); - var marks = cm.state.sublimeBookmarks || (cm.state.sublimeBookmarks = []); - for (var i = 0; i < ranges.length; i++) { - var from = ranges[i].from(), - to = ranges[i].to(); - var found = ranges[i].empty() ? cm.findMarksAt(from) : cm.findMarks(from, to); - for (var j = 0; j < found.length; j++) { - if (found[j].sublimeBookmark) { - found[j].clear(); - for (var k = 0; k < marks.length; k++) if (marks[k] == found[j]) marks.splice(k--, 1); - break; - } - } - if (j == found.length) marks.push(cm.markText(from, to, { - sublimeBookmark: true, - clearWhenEmpty: false - })); - } - }; - cmds.clearBookmarks = function (cm) { - var marks = cm.state.sublimeBookmarks; - if (marks) for (var i = 0; i < marks.length; i++) marks[i].clear(); - marks.length = 0; - }; - cmds.selectBookmarks = function (cm) { - var marks = cm.state.sublimeBookmarks, - ranges = []; - if (marks) for (var i = 0; i < marks.length; i++) { - var found = marks[i].find(); - if (!found) marks.splice(i--, 0);else ranges.push({ - anchor: found.from, - head: found.to - }); - } - if (ranges.length) cm.setSelections(ranges, 0); - }; - function modifyWordOrSelection(cm, mod) { - cm.operation(function () { - var ranges = cm.listSelections(), - indices = [], - replacements = []; - for (var i = 0; i < ranges.length; i++) { - var range = ranges[i]; - if (range.empty()) { - indices.push(i); - replacements.push(""); - } else replacements.push(mod(cm.getRange(range.from(), range.to()))); - } - cm.replaceSelections(replacements, "around", "case"); - for (var i = indices.length - 1, at; i >= 0; i--) { - var range = ranges[indices[i]]; - if (at && CodeMirror.cmpPos(range.head, at) > 0) continue; - var word = wordAt(cm, range.head); - at = word.from; - cm.replaceRange(mod(word.word), word.from, word.to); - } - }); - } - cmds.smartBackspace = function (cm) { - if (cm.somethingSelected()) return CodeMirror.Pass; - cm.operation(function () { - var cursors = cm.listSelections(); - var indentUnit = cm.getOption("indentUnit"); - for (var i = cursors.length - 1; i >= 0; i--) { - var cursor = cursors[i].head; - var toStartOfLine = cm.getRange({ - line: cursor.line, - ch: 0 - }, cursor); - var column = CodeMirror.countColumn(toStartOfLine, null, cm.getOption("tabSize")); - var deletePos = cm.findPosH(cursor, -1, "char", false); - if (toStartOfLine && !/\S/.test(toStartOfLine) && column % indentUnit == 0) { - var prevIndent = new Pos(cursor.line, CodeMirror.findColumn(toStartOfLine, column - indentUnit, indentUnit)); - if (prevIndent.ch != cursor.ch) deletePos = prevIndent; - } - cm.replaceRange("", deletePos, cursor, "+delete"); - } - }); - }; - cmds.delLineRight = function (cm) { - cm.operation(function () { - var ranges = cm.listSelections(); - for (var i = ranges.length - 1; i >= 0; i--) cm.replaceRange("", ranges[i].anchor, Pos(ranges[i].to().line), "+delete"); - cm.scrollIntoView(); - }); - }; - cmds.upcaseAtCursor = function (cm) { - modifyWordOrSelection(cm, function (str) { - return str.toUpperCase(); - }); - }; - cmds.downcaseAtCursor = function (cm) { - modifyWordOrSelection(cm, function (str) { - return str.toLowerCase(); - }); - }; - cmds.setSublimeMark = function (cm) { - if (cm.state.sublimeMark) cm.state.sublimeMark.clear(); - cm.state.sublimeMark = cm.setBookmark(cm.getCursor()); - }; - cmds.selectToSublimeMark = function (cm) { - var found = cm.state.sublimeMark && cm.state.sublimeMark.find(); - if (found) cm.setSelection(cm.getCursor(), found); - }; - cmds.deleteToSublimeMark = function (cm) { - var found = cm.state.sublimeMark && cm.state.sublimeMark.find(); - if (found) { - var from = cm.getCursor(), - to = found; - if (CodeMirror.cmpPos(from, to) > 0) { - var tmp = to; - to = from; - from = tmp; - } - cm.state.sublimeKilled = cm.getRange(from, to); - cm.replaceRange("", from, to); - } - }; - cmds.swapWithSublimeMark = function (cm) { - var found = cm.state.sublimeMark && cm.state.sublimeMark.find(); - if (found) { - cm.state.sublimeMark.clear(); - cm.state.sublimeMark = cm.setBookmark(cm.getCursor()); - cm.setCursor(found); - } - }; - cmds.sublimeYank = function (cm) { - if (cm.state.sublimeKilled != null) cm.replaceSelection(cm.state.sublimeKilled, null, "paste"); - }; - cmds.showInCenter = function (cm) { - var pos = cm.cursorCoords(null, "local"); - cm.scrollTo(null, (pos.top + pos.bottom) / 2 - cm.getScrollInfo().clientHeight / 2); - }; - function getTarget(cm) { - var from = cm.getCursor("from"), - to = cm.getCursor("to"); - if (CodeMirror.cmpPos(from, to) == 0) { - var word = wordAt(cm, from); - if (!word.word) return; - from = word.from; - to = word.to; - } - return { - from, - to, - query: cm.getRange(from, to), - word - }; - } - function findAndGoTo(cm, forward) { - var target = getTarget(cm); - if (!target) return; - var query = target.query; - var cur = cm.getSearchCursor(query, forward ? target.to : target.from); - if (forward ? cur.findNext() : cur.findPrevious()) { - cm.setSelection(cur.from(), cur.to()); - } else { - cur = cm.getSearchCursor(query, forward ? Pos(cm.firstLine(), 0) : cm.clipPos(Pos(cm.lastLine()))); - if (forward ? cur.findNext() : cur.findPrevious()) cm.setSelection(cur.from(), cur.to());else if (target.word) cm.setSelection(target.from, target.to); - } - } - cmds.findUnder = function (cm) { - findAndGoTo(cm, true); - }; - cmds.findUnderPrevious = function (cm) { - findAndGoTo(cm, false); - }; - cmds.findAllUnder = function (cm) { - var target = getTarget(cm); - if (!target) return; - var cur = cm.getSearchCursor(target.query); - var matches = []; - var primaryIndex = -1; - while (cur.findNext()) { - matches.push({ - anchor: cur.from(), - head: cur.to() - }); - if (cur.from().line <= target.from.line && cur.from().ch <= target.from.ch) primaryIndex++; - } - cm.setSelections(matches, primaryIndex); - }; - var keyMap = CodeMirror.keyMap; - keyMap.macSublime = { - "Cmd-Left": "goLineStartSmart", - "Shift-Tab": "indentLess", - "Shift-Ctrl-K": "deleteLine", - "Alt-Q": "wrapLines", - "Ctrl-Left": "goSubwordLeft", - "Ctrl-Right": "goSubwordRight", - "Ctrl-Alt-Up": "scrollLineUp", - "Ctrl-Alt-Down": "scrollLineDown", - "Cmd-L": "selectLine", - "Shift-Cmd-L": "splitSelectionByLine", - "Esc": "singleSelectionTop", - "Cmd-Enter": "insertLineAfter", - "Shift-Cmd-Enter": "insertLineBefore", - "Cmd-D": "selectNextOccurrence", - "Shift-Cmd-Space": "selectScope", - "Shift-Cmd-M": "selectBetweenBrackets", - "Cmd-M": "goToBracket", - "Cmd-Ctrl-Up": "swapLineUp", - "Cmd-Ctrl-Down": "swapLineDown", - "Cmd-/": "toggleCommentIndented", - "Cmd-J": "joinLines", - "Shift-Cmd-D": "duplicateLine", - "F5": "sortLines", - "Shift-F5": "reverseSortLines", - "Cmd-F5": "sortLinesInsensitive", - "Shift-Cmd-F5": "reverseSortLinesInsensitive", - "F2": "nextBookmark", - "Shift-F2": "prevBookmark", - "Cmd-F2": "toggleBookmark", - "Shift-Cmd-F2": "clearBookmarks", - "Alt-F2": "selectBookmarks", - "Backspace": "smartBackspace", - "Cmd-K Cmd-D": "skipAndSelectNextOccurrence", - "Cmd-K Cmd-K": "delLineRight", - "Cmd-K Cmd-U": "upcaseAtCursor", - "Cmd-K Cmd-L": "downcaseAtCursor", - "Cmd-K Cmd-Space": "setSublimeMark", - "Cmd-K Cmd-A": "selectToSublimeMark", - "Cmd-K Cmd-W": "deleteToSublimeMark", - "Cmd-K Cmd-X": "swapWithSublimeMark", - "Cmd-K Cmd-Y": "sublimeYank", - "Cmd-K Cmd-C": "showInCenter", - "Cmd-K Cmd-G": "clearBookmarks", - "Cmd-K Cmd-Backspace": "delLineLeft", - "Cmd-K Cmd-1": "foldAll", - "Cmd-K Cmd-0": "unfoldAll", - "Cmd-K Cmd-J": "unfoldAll", - "Ctrl-Shift-Up": "addCursorToPrevLine", - "Ctrl-Shift-Down": "addCursorToNextLine", - "Cmd-F3": "findUnder", - "Shift-Cmd-F3": "findUnderPrevious", - "Alt-F3": "findAllUnder", - "Shift-Cmd-[": "fold", - "Shift-Cmd-]": "unfold", - "Cmd-I": "findIncremental", - "Shift-Cmd-I": "findIncrementalReverse", - "Cmd-H": "replace", - "F3": "findNext", - "Shift-F3": "findPrev", - "fallthrough": "macDefault" - }; - CodeMirror.normalizeKeyMap(keyMap.macSublime); - keyMap.pcSublime = { - "Shift-Tab": "indentLess", - "Shift-Ctrl-K": "deleteLine", - "Alt-Q": "wrapLines", - "Ctrl-T": "transposeChars", - "Alt-Left": "goSubwordLeft", - "Alt-Right": "goSubwordRight", - "Ctrl-Up": "scrollLineUp", - "Ctrl-Down": "scrollLineDown", - "Ctrl-L": "selectLine", - "Shift-Ctrl-L": "splitSelectionByLine", - "Esc": "singleSelectionTop", - "Ctrl-Enter": "insertLineAfter", - "Shift-Ctrl-Enter": "insertLineBefore", - "Ctrl-D": "selectNextOccurrence", - "Shift-Ctrl-Space": "selectScope", - "Shift-Ctrl-M": "selectBetweenBrackets", - "Ctrl-M": "goToBracket", - "Shift-Ctrl-Up": "swapLineUp", - "Shift-Ctrl-Down": "swapLineDown", - "Ctrl-/": "toggleCommentIndented", - "Ctrl-J": "joinLines", - "Shift-Ctrl-D": "duplicateLine", - "F9": "sortLines", - "Shift-F9": "reverseSortLines", - "Ctrl-F9": "sortLinesInsensitive", - "Shift-Ctrl-F9": "reverseSortLinesInsensitive", - "F2": "nextBookmark", - "Shift-F2": "prevBookmark", - "Ctrl-F2": "toggleBookmark", - "Shift-Ctrl-F2": "clearBookmarks", - "Alt-F2": "selectBookmarks", - "Backspace": "smartBackspace", - "Ctrl-K Ctrl-D": "skipAndSelectNextOccurrence", - "Ctrl-K Ctrl-K": "delLineRight", - "Ctrl-K Ctrl-U": "upcaseAtCursor", - "Ctrl-K Ctrl-L": "downcaseAtCursor", - "Ctrl-K Ctrl-Space": "setSublimeMark", - "Ctrl-K Ctrl-A": "selectToSublimeMark", - "Ctrl-K Ctrl-W": "deleteToSublimeMark", - "Ctrl-K Ctrl-X": "swapWithSublimeMark", - "Ctrl-K Ctrl-Y": "sublimeYank", - "Ctrl-K Ctrl-C": "showInCenter", - "Ctrl-K Ctrl-G": "clearBookmarks", - "Ctrl-K Ctrl-Backspace": "delLineLeft", - "Ctrl-K Ctrl-1": "foldAll", - "Ctrl-K Ctrl-0": "unfoldAll", - "Ctrl-K Ctrl-J": "unfoldAll", - "Ctrl-Alt-Up": "addCursorToPrevLine", - "Ctrl-Alt-Down": "addCursorToNextLine", - "Ctrl-F3": "findUnder", - "Shift-Ctrl-F3": "findUnderPrevious", - "Alt-F3": "findAllUnder", - "Shift-Ctrl-[": "fold", - "Shift-Ctrl-]": "unfold", - "Ctrl-I": "findIncremental", - "Shift-Ctrl-I": "findIncrementalReverse", - "Ctrl-H": "replace", - "F3": "findNext", - "Shift-F3": "findPrev", - "fallthrough": "pcDefault" - }; - CodeMirror.normalizeKeyMap(keyMap.pcSublime); - var mac = keyMap.default == keyMap.macDefault; - keyMap.sublime = mac ? keyMap.macSublime : keyMap.pcSublime; - }); -})(); -var sublimeExports = sublime$2.exports; -const sublime = /* @__PURE__ */codemirror.getDefaultExportFromCjs(sublimeExports); -const sublime$1 = /* @__PURE__ */_mergeNamespaces({ - __proto__: null, - default: sublime -}, [sublimeExports]); -exports.sublime = sublime$1; - -/***/ }), - /***/ "../../graphiql-toolkit/dist/esm/async-helpers/index.js": /*!**************************************************************!*\ !*** ../../graphiql-toolkit/dist/esm/async-helpers/index.js ***! \**************************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -78192,6 +83470,7 @@ async function fetcherReturnToPromise(fetcherResult) { \*********************************************************/ /***/ (function(__unused_webpack_module, exports) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -78259,6 +83538,7 @@ exports.__forAwait = __forAwait; \***********************************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -78292,6 +83572,7 @@ function createGraphiQLFetcher(options) { \***************************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -78329,6 +83610,7 @@ var _createFetcher = __webpack_require__(/*! ./createFetcher */ "../../graphiql- \*************************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -78445,6 +83727,7 @@ async function getWsFetcher(options, fetcherOpts) { \***************************************************************/ /***/ (function() { +"use strict"; /***/ }), @@ -78455,6 +83738,7 @@ async function getWsFetcher(options, fetcherOpts) { \*******************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -78495,6 +83779,7 @@ function formatResult(result) { \************************************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -78608,6 +83893,7 @@ function isFieldType(fieldType) { \****************************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -78655,6 +83941,7 @@ Object.keys(_operationName).forEach(function (key) { \********************************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -78762,6 +84049,7 @@ function mergeAst(documentAST, schema) { \*************************************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -78794,6 +84082,7 @@ function getSelectedOperationName(prevOperations, prevSelectedOperationName, ope \************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -78863,6 +84152,7 @@ Object.keys(_storage).forEach(function (key) { \*******************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -78937,6 +84227,7 @@ const STORAGE_NAMESPACE = "graphiql"; \*********************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -78972,6 +84263,7 @@ function createLocalStorage({ \**********************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -79074,6 +84366,7 @@ exports.HistoryStore = HistoryStore; \********************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -79132,6 +84425,7 @@ Object.keys(_custom).forEach(function (key) { \********************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -79194,12 +84488,13 @@ exports.QueryStore = QueryStore; /***/ }), -/***/ "./components/GraphiQL.tsx": -/*!*********************************!*\ - !*** ./components/GraphiQL.tsx ***! - \*********************************/ +/***/ "./GraphiQL.tsx": +/*!**********************!*\ + !*** ./GraphiQL.tsx ***! + \**********************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -79817,6 +85112,7 @@ function isChildComponentType(child, component) { \***************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -80117,6 +85413,7 @@ var _utils = __webpack_require__(/*! ./utils */ "../../graphql-language-service/ \*************************************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -80223,6 +85520,7 @@ exports.getFieldInsertText = getFieldInsertText; \**********************************************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -80863,6 +86161,7 @@ function unwrapType(state) { \*********************************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -81085,6 +86384,7 @@ function getDefinitionForArgumentDefinition(path, text, definition) { \**********************************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -81207,6 +86507,7 @@ function getLocation(node) { \***************************************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -81400,6 +86701,7 @@ function text(into, content) { \******************************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -81535,6 +86837,7 @@ function concatMap(arr, fn) { \*************************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -81615,6 +86918,7 @@ var _getHoverInformation = __webpack_require__(/*! ./getHoverInformation */ "../ \********************************************************************/ /***/ (function(__unused_webpack_module, exports) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -81734,6 +87038,7 @@ exports["default"] = CharacterStream; \****************************************************************/ /***/ (function(__unused_webpack_module, exports) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -81788,6 +87093,7 @@ function p(value, style) { \**********************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -81992,6 +87298,7 @@ function type(style) { \********************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -82116,6 +87423,7 @@ function getContextAtPosition(queryText, cursor, schema, contextToken, options) \****************************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -82333,6 +87641,7 @@ function getTypeInfo(schema, tokenState) { \**********************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -82494,6 +87803,7 @@ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { de \*****************************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -82715,6 +88025,7 @@ function lex(lexRules, stream) { \**********************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -82763,6 +88074,7 @@ const RuleKinds = exports.RuleKinds = Object.assign(Object.assign({}, _graphql.K \***************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -82825,6 +88137,7 @@ var CompletionItemKind; \*********************************************************/ /***/ (function(__unused_webpack_module, exports) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -82890,6 +88203,7 @@ function locToRange(text, loc) { \********************************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -82930,6 +88244,7 @@ function collectVariables(schema, documentAST) { \************************************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -83000,6 +88315,7 @@ exports.getFragmentDependenciesForAST = getFragmentDependenciesForAST; \************************************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -83040,6 +88356,7 @@ function pointToOffset(text, point) { \*********************************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -83086,6 +88403,7 @@ const getQueryFacts = exports.getQueryFacts = getOperationFacts; \**************************************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -83325,6 +88643,7 @@ function getVariablesJSONSchema(variableToType, options) { \*********************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -83432,6 +88751,7 @@ function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; \***************************************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -83479,6 +88799,7 @@ function validateWithCustomRules(schema, ast, customRules, isRelayCompatMode, is \*******************/ /***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) { +"use strict"; __webpack_require__.r(__webpack_exports__); // extracted by mini-css-extract-plugin @@ -83491,6 +88812,7 @@ __webpack_require__.r(__webpack_exports__); \*******************************************/ /***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) { +"use strict"; __webpack_require__.r(__webpack_exports__); // extracted by mini-css-extract-plugin @@ -83503,6 +88825,7 @@ __webpack_require__.r(__webpack_exports__); \***********************************************/ /***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) { +"use strict"; __webpack_require__.r(__webpack_exports__); // extracted by mini-css-extract-plugin @@ -83515,6 +88838,7 @@ __webpack_require__.r(__webpack_exports__); \********************************************/ /***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) { +"use strict"; __webpack_require__.r(__webpack_exports__); // extracted by mini-css-extract-plugin @@ -83527,6 +88851,7 @@ __webpack_require__.r(__webpack_exports__); \************************/ /***/ (function(module) { +"use strict"; module.exports = window["React"]; /***/ }), @@ -83537,6 +88862,7 @@ module.exports = window["React"]; \***************************/ /***/ (function(module) { +"use strict"; module.exports = window["ReactDOM"]; /***/ }), @@ -83547,6 +88873,7 @@ module.exports = window["ReactDOM"]; \***********************************************************************/ /***/ (function(module, __unused_webpack_exports, __webpack_require__) { +"use strict"; var __create = Object.create; var __defProp = Object.defineProperty; @@ -90708,6 +96035,7 @@ var Transition = Object.assign(TransitionRoot, { Child, Root: TransitionRoot }); \**************************************************************/ /***/ (function(module, __unused_webpack_exports, __webpack_require__) { +"use strict"; if (false) {} else { @@ -90723,6 +96051,7 @@ if (false) {} else { \***************************************************************/ /***/ (function(module) { +"use strict"; function _extends() { @@ -90800,8 +96129,9 @@ module.exports = _extends, module.exports.__esModule = true, module.exports["def /******/ /************************************************************************/ var __webpack_exports__ = {}; -// This entry need to be wrapped in an IIFE because it need to be isolated against other modules in the chunk. +// This entry need to be wrapped in an IIFE because it need to be in strict mode. !function() { +"use strict"; var exports = __webpack_exports__; /*!****************!*\ !*** ./cdn.ts ***! @@ -90815,7 +96145,7 @@ exports["default"] = void 0; var GraphiQLReact = _interopRequireWildcard(__webpack_require__(/*! @graphiql/react */ "../../graphiql-react/dist/index.js")); var _toolkit = __webpack_require__(/*! @graphiql/toolkit */ "../../graphiql-toolkit/dist/esm/index.js"); var GraphQL = _interopRequireWildcard(__webpack_require__(/*! graphql */ "../../../node_modules/graphql/index.mjs")); -var _GraphiQL = __webpack_require__(/*! ./components/GraphiQL */ "./components/GraphiQL.tsx"); +var _GraphiQL = __webpack_require__(/*! ./GraphiQL */ "./GraphiQL.tsx"); __webpack_require__(/*! @graphiql/react/font/roboto.css */ "../../graphiql-react/font/roboto.css"); __webpack_require__(/*! @graphiql/react/font/fira-code.css */ "../../graphiql-react/font/fira-code.css"); __webpack_require__(/*! @graphiql/react/dist/style.css */ "../../graphiql-react/dist/style.css"); diff --git a/netbox/project-static/dist/netbox.js b/netbox/project-static/dist/netbox.js index 1492913d94d3a12bd2e178c2c6d77d7e9b1dce51..4661582a3ffd9468ca9a0efe8fdc95c5c3855d0d 100644 GIT binary patch delta 782 zcmZXS&r20i6vt8D!5_VdM@|lU7- ztXQmEtlCKQFY_zQi4_%z!Elyc419(@J8g}%78sdV3QB9i7w5b(7TtK3K;ux0P-X*4 za>Ziwrj*zouFKn0p(Gs;ldm;EV|Cgmmc|I*Y67WFFBUZ|5CzJYBxp7%G0@X3%b)SQ z?tDO8rL!v_Mvf9UWVSP@o8-18o|wcr%d*tI(6Ogb)fs7T=SdkdQrTK8`owT--$AdJ z+ByF2SE4Otq8Fkf{IS}P9ZzIvjMij$t|@GSghqDCvmKlWJQt}oE)po(40}mlyTzNQ z;W!`2Kucy+H$7wul6?|&kGsPulTt_12afgge(+lxt z7}*_0VA&tb-!_4I3I>ZY3Z(1oG&V?O!iJL>FiZ8(jN}#mGt9FQ9 zV05lv6YJ8otAoarO+$>U^N!7&3C-n4N^k+efZr4#U7As`5m?kCe#tpZ6rI!nsLhK z5SXT*=wVDfTkdYcl>AkNiab_>s}ldvTNhd+;G~`_@}nzc;N;K8#@gDX>l*514W3zY z_DjK%OR8}6v=If^C4LxqB);T^Ob{lFraa$l diff --git a/netbox/project-static/dist/netbox.js.map b/netbox/project-static/dist/netbox.js.map index bfe749fd7191bffdf1f69f1e0d1ba1bd34466a24..d94269b5df242edad06ee43c5e12a766b88bf50c 100644 GIT binary patch delta 3889 zcmaJ^Yit}>71lWRv7@9LC$XJpTj$X~5U(`Vl*Tx=9@GuI=@D zy^szj=hsumFxR2?GtQ9-E?X$7>XLlLMINbmzHf)E8Ih2}w;NAsvdlh9O9&N+9} zShV8L%-nPD{m$z<=iYhmtMxBDS$}BOm@S)KFkAl9idT=6+sf+3UmdA9{P47Cc^##O z^(*1ElvA{WEQ)#)N)7UtV|i_*V%{hT`BO4-4gSpE}pjj<2|M>D)og~)Uj z<}b&)Pgw)QCQo*b$V++q$qg~r@y5yAQ7z8NR+ZpwJ+w{r%EG-oo-`S;V6vo5TcfsG z-acg)ZBf|GPn&}mBTTESmlcLfF(DJW(c^_JH5@=*q}6lqt(}-Chgy8h3l*)}z%ZFh z+TvaFFlpRbLK7V{j#AjIV!(ac3r80k1$>|#x{U^RrX9Y%b}P+?30)2DVvwk}hkfES z>Bz`*%4AB!@WnW+j>{Y|#^*>Jg)gI~xHW(GIPIZi5K|nDL;>liq19l|LmoCM=y8n1 zVb#M9@rFpzd1tw`pX_KgB@2yaFPqnD_VH`lWD6C8+w|p+VSP8ODC>x!zZ=#qPX-#q zdgUEdD#bZ#bVs|PP`)C@Tlxti!29g9D2#RCwVy#9R`-KvS)B0`WQUa#ipHYY*biIh z$(w>~<)_N~2)qkV^%L0Z^T7I)Rj`>SgEBd81hH!X)-M)9gozs}5yV3S@EN1qJvIQX z#`2^vEFq-hn2iKe?%W=@$M8rkCcKmpE9=y%!?r&d$w^kkO+YpHQAjs2r7MPf zirnp3w1Rvpn)Igb94NJfgtB*(J~>`ANr9x)OPNdY5gYsVNNI7rtOKRhRH*iD>a^ss zw7h-8@~wLsS5=rEPOj871c~g~$K<7m&@s{@ou$EakNqA#OCcGy{Xuaow}U`a!|ug5 z;G@ce^2ja<5&bi@$pwSpOqrd^C` zc(OOd^f*xB1g+aoV->^BH(~Ln06P?-hwTfLtSA{!dXdV4E+8pVL`{<0797p50?Ib9p1;26`C~~ zeKUMUIe~G0SwX!|;>(+J_=~sTm6cOr4rLD?7@ZU~Dh(b-XYi@N!I7$IKA_cL-re|j zIA$2_c>HZx>nXB>;$762WP+9e16AI>U!Ur{GXkqeL*?gx5~N#ycY) zt~m|UMh8A~8bX`05+;Y~*FP3vV6kH)aA$&#l`$+o1I=a0AU=Ku)?xn{Sh~DJG{%`6 zeUvU`>DhEut5({E*UrG2s&*Om`Ec1;XsDq%c2@{Wl%r^beAsgqzUCR?Hp5I|s0>~^ z3xByMC9**gW${n{fbObcEy`iTIe2i1j%g_uRuOldgFW>rrlsmI^QGGlod`|B7O}*d zz~9lGPz$#YNWxS2>kF{XXuxw9V6(9mJr`lk z!UnM^G!((+i?FdQ8NuBbpa0vfw=-%FJsf@3MTczsXbv{E`vo>SF42#X2k;9qm)LN(T2iIZSDmv!HX-C;~h)I9n$CWXKA6^Hw zUn`Qf!P*E`-$tYxQ!{6EcjSUIs2rb3cONl;DlX2K6F#Eiaw>F%8fDIAt;{gHw}8+7 z6E+{zsVm7pK4-Gh%u828%2aGZT2`EHE(9P!%LeG4Cx!{+r*CCTD9~hXtVKNLs9Na& z9WJz${Ma(j5te+KgOtMtGl$vtVNKf|r{}NbGx3uV=~NEgWjRo3eEoe`v5;J#-rHp6 z@e~iqEE@XF9r(vNsQEvvsQ+J9(8Y90h{CsBXKx`i$Y{pUO<1?JNmFn)W2v;P zmODT=6=Bc__t6+vs+z%PZo-C@WCLlJtF>fV7|S(r{3f&$YUM51P*V`pFzvItCU!7T ze;yyb1));Qi|6t1EvT!awn=)a9lm%AA}jAUQHNq=sc4V+{sC-* zywA=#1+2aec>m}`AZhBdmmetl%d)a<0dj=@;HKQ)+=eB$7Y*f7`vZdq5|blj=KGba f%Ez+#3H-w8$~t%XjmqbsJdw}m+?PMBe5CTf=j4Os delta 3650 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, 2025 # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2024-12-12 05:02+0000\n" +"POT-Creation-Date: 2025-01-04 05:02+0000\n" "PO-Revision-Date: 2023-10-30 17:48+0000\n" -"Last-Translator: Jeremy Stretch, 2024\n" +"Last-Translator: marcpaulchand , 2025\n" "Language-Team: French (https://app.transifex.com/netbox-community/teams/178115/fr/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -158,7 +159,7 @@ msgstr "Inactif" #: netbox/dcim/filtersets.py:464 netbox/dcim/filtersets.py:1021 #: netbox/dcim/filtersets.py:1368 netbox/dcim/filtersets.py:1903 #: netbox/dcim/filtersets.py:2146 netbox/dcim/filtersets.py:2204 -#: netbox/ipam/filtersets.py:339 netbox/ipam/filtersets.py:959 +#: netbox/ipam/filtersets.py:341 netbox/ipam/filtersets.py:961 #: netbox/virtualization/filtersets.py:45 #: netbox/virtualization/filtersets.py:173 netbox/vpn/filtersets.py:358 msgid "Region (ID)" @@ -170,8 +171,8 @@ msgstr "Région (ID)" #: netbox/dcim/filtersets.py:471 netbox/dcim/filtersets.py:1028 #: netbox/dcim/filtersets.py:1375 netbox/dcim/filtersets.py:1910 #: netbox/dcim/filtersets.py:2153 netbox/dcim/filtersets.py:2211 -#: netbox/extras/filtersets.py:509 netbox/ipam/filtersets.py:346 -#: netbox/ipam/filtersets.py:966 netbox/virtualization/filtersets.py:52 +#: netbox/extras/filtersets.py:509 netbox/ipam/filtersets.py:348 +#: netbox/ipam/filtersets.py:968 netbox/virtualization/filtersets.py:52 #: netbox/virtualization/filtersets.py:180 netbox/vpn/filtersets.py:353 msgid "Region (slug)" msgstr "Région (slug)" @@ -181,8 +182,8 @@ msgstr "Région (slug)" #: netbox/dcim/filtersets.py:346 netbox/dcim/filtersets.py:477 #: netbox/dcim/filtersets.py:1034 netbox/dcim/filtersets.py:1381 #: netbox/dcim/filtersets.py:1916 netbox/dcim/filtersets.py:2159 -#: netbox/dcim/filtersets.py:2217 netbox/ipam/filtersets.py:352 -#: netbox/ipam/filtersets.py:972 netbox/virtualization/filtersets.py:58 +#: netbox/dcim/filtersets.py:2217 netbox/ipam/filtersets.py:354 +#: netbox/ipam/filtersets.py:974 netbox/virtualization/filtersets.py:58 #: netbox/virtualization/filtersets.py:186 msgid "Site group (ID)" msgstr "Groupe de sites (ID)" @@ -193,7 +194,7 @@ msgstr "Groupe de sites (ID)" #: netbox/dcim/filtersets.py:1041 netbox/dcim/filtersets.py:1388 #: netbox/dcim/filtersets.py:1923 netbox/dcim/filtersets.py:2166 #: netbox/dcim/filtersets.py:2224 netbox/extras/filtersets.py:515 -#: netbox/ipam/filtersets.py:359 netbox/ipam/filtersets.py:979 +#: netbox/ipam/filtersets.py:361 netbox/ipam/filtersets.py:981 #: netbox/virtualization/filtersets.py:65 #: netbox/virtualization/filtersets.py:193 msgid "Site group (slug)" @@ -263,8 +264,8 @@ msgstr "Site" #: netbox/circuits/filtersets.py:62 netbox/circuits/filtersets.py:229 #: netbox/circuits/filtersets.py:274 netbox/dcim/filtersets.py:242 #: netbox/dcim/filtersets.py:363 netbox/dcim/filtersets.py:458 -#: netbox/extras/filtersets.py:531 netbox/ipam/filtersets.py:238 -#: netbox/ipam/filtersets.py:369 netbox/ipam/filtersets.py:989 +#: netbox/extras/filtersets.py:531 netbox/ipam/filtersets.py:240 +#: netbox/ipam/filtersets.py:371 netbox/ipam/filtersets.py:991 #: netbox/virtualization/filtersets.py:75 #: netbox/virtualization/filtersets.py:203 netbox/vpn/filtersets.py:363 msgid "Site (slug)" @@ -283,13 +284,13 @@ msgstr "Numéro d'AS" #: netbox/circuits/filtersets.py:95 netbox/circuits/filtersets.py:122 #: netbox/circuits/filtersets.py:156 netbox/circuits/filtersets.py:283 -#: netbox/circuits/filtersets.py:325 netbox/ipam/filtersets.py:243 +#: netbox/circuits/filtersets.py:325 netbox/ipam/filtersets.py:245 msgid "Provider (ID)" msgstr "Fournisseur (ID)" #: netbox/circuits/filtersets.py:101 netbox/circuits/filtersets.py:128 #: netbox/circuits/filtersets.py:162 netbox/circuits/filtersets.py:289 -#: netbox/circuits/filtersets.py:331 netbox/ipam/filtersets.py:249 +#: netbox/circuits/filtersets.py:331 netbox/ipam/filtersets.py:251 msgid "Provider (slug)" msgstr "Fournisseur (slug)" @@ -318,8 +319,8 @@ msgstr "Type de circuit (slug)" #: netbox/dcim/filtersets.py:452 netbox/dcim/filtersets.py:1045 #: netbox/dcim/filtersets.py:1393 netbox/dcim/filtersets.py:1928 #: netbox/dcim/filtersets.py:2170 netbox/dcim/filtersets.py:2229 -#: netbox/ipam/filtersets.py:232 netbox/ipam/filtersets.py:363 -#: netbox/ipam/filtersets.py:983 netbox/virtualization/filtersets.py:69 +#: netbox/ipam/filtersets.py:234 netbox/ipam/filtersets.py:365 +#: netbox/ipam/filtersets.py:985 netbox/virtualization/filtersets.py:69 #: netbox/virtualization/filtersets.py:197 netbox/vpn/filtersets.py:368 msgid "Site (ID)" msgstr "Site (ID)" @@ -673,7 +674,7 @@ msgstr "Identifiant de compte du prestataire" #: netbox/dcim/forms/filtersets.py:924 netbox/dcim/forms/filtersets.py:958 #: netbox/dcim/forms/filtersets.py:1059 netbox/dcim/forms/filtersets.py:1170 #: netbox/dcim/tables/devices.py:140 netbox/dcim/tables/devices.py:817 -#: netbox/dcim/tables/devices.py:1063 netbox/dcim/tables/modules.py:69 +#: netbox/dcim/tables/devices.py:1063 netbox/dcim/tables/modules.py:70 #: netbox/dcim/tables/power.py:74 netbox/dcim/tables/racks.py:126 #: netbox/dcim/tables/sites.py:82 netbox/dcim/tables/sites.py:138 #: netbox/ipam/forms/bulk_edit.py:256 netbox/ipam/forms/bulk_edit.py:306 @@ -1108,7 +1109,7 @@ msgstr "Affectation" #: netbox/circuits/tables/circuits.py:155 netbox/dcim/forms/bulk_edit.py:118 #: netbox/dcim/forms/bulk_import.py:100 netbox/dcim/forms/model_forms.py:117 #: netbox/dcim/tables/sites.py:89 netbox/extras/forms/filtersets.py:480 -#: netbox/ipam/filtersets.py:999 netbox/ipam/forms/bulk_edit.py:493 +#: netbox/ipam/filtersets.py:1001 netbox/ipam/forms/bulk_edit.py:493 #: netbox/ipam/forms/bulk_import.py:460 netbox/ipam/forms/model_forms.py:561 #: netbox/ipam/tables/fhrp.py:67 netbox/ipam/tables/vlans.py:122 #: netbox/ipam/tables/vlans.py:226 @@ -1548,7 +1549,7 @@ msgstr "Bande passante garantie" #: netbox/circuits/tables/providers.py:82 #: netbox/circuits/tables/providers.py:107 netbox/dcim/tables/devices.py:1036 #: netbox/dcim/tables/devicetypes.py:92 netbox/dcim/tables/modules.py:29 -#: netbox/dcim/tables/modules.py:72 netbox/dcim/tables/power.py:39 +#: netbox/dcim/tables/modules.py:73 netbox/dcim/tables/power.py:39 #: netbox/dcim/tables/power.py:96 netbox/dcim/tables/racks.py:84 #: netbox/dcim/tables/racks.py:145 netbox/dcim/tables/racks.py:225 #: netbox/dcim/tables/sites.py:108 netbox/extras/tables/tables.py:582 @@ -2954,7 +2955,7 @@ msgid "Parent site group (slug)" msgstr "Groupe de sites parents (slug)" #: netbox/dcim/filtersets.py:164 netbox/extras/filtersets.py:364 -#: netbox/ipam/filtersets.py:841 netbox/ipam/filtersets.py:993 +#: netbox/ipam/filtersets.py:843 netbox/ipam/filtersets.py:995 msgid "Group (ID)" msgstr "Groupe (ID)" @@ -3004,23 +3005,23 @@ msgstr "Fabricant (slug)" #: netbox/dcim/filtersets.py:393 msgid "Rack type (slug)" -msgstr "Type de rack (limace)" +msgstr "Type de baie (slug)" #: netbox/dcim/filtersets.py:397 msgid "Rack type (ID)" -msgstr "Type de rack (ID)" +msgstr "Type de baie (ID)" #: netbox/dcim/filtersets.py:411 netbox/dcim/filtersets.py:892 #: netbox/dcim/filtersets.py:994 netbox/dcim/filtersets.py:1850 -#: netbox/ipam/filtersets.py:381 netbox/ipam/filtersets.py:493 -#: netbox/ipam/filtersets.py:1003 netbox/virtualization/filtersets.py:210 +#: netbox/ipam/filtersets.py:383 netbox/ipam/filtersets.py:495 +#: netbox/ipam/filtersets.py:1005 netbox/virtualization/filtersets.py:210 msgid "Role (ID)" msgstr "Rôle (ID)" #: netbox/dcim/filtersets.py:417 netbox/dcim/filtersets.py:898 #: netbox/dcim/filtersets.py:1000 netbox/dcim/filtersets.py:1856 -#: netbox/extras/filtersets.py:558 netbox/ipam/filtersets.py:387 -#: netbox/ipam/filtersets.py:499 netbox/ipam/filtersets.py:1009 +#: netbox/extras/filtersets.py:558 netbox/ipam/filtersets.py:389 +#: netbox/ipam/filtersets.py:501 netbox/ipam/filtersets.py:1011 #: netbox/virtualization/filtersets.py:216 msgid "Role (slug)" msgstr "Rôle (slug)" @@ -3218,7 +3219,7 @@ msgstr "VDC (IDENTIFIANT)" msgid "Device model" msgstr "Modèle d'appareil" -#: netbox/dcim/filtersets.py:1267 netbox/ipam/filtersets.py:632 +#: netbox/dcim/filtersets.py:1267 netbox/ipam/filtersets.py:634 #: netbox/vpn/filtersets.py:102 netbox/vpn/filtersets.py:401 msgid "Interface (ID)" msgstr "Interface (ID)" @@ -3232,8 +3233,8 @@ msgid "Module bay (ID)" msgstr "Baie modulaire (ID)" #: netbox/dcim/filtersets.py:1333 netbox/dcim/filtersets.py:1425 -#: netbox/ipam/filtersets.py:611 netbox/ipam/filtersets.py:851 -#: netbox/ipam/filtersets.py:1115 netbox/virtualization/filtersets.py:161 +#: netbox/ipam/filtersets.py:613 netbox/ipam/filtersets.py:853 +#: netbox/ipam/filtersets.py:1117 netbox/virtualization/filtersets.py:161 #: netbox/vpn/filtersets.py:379 msgid "Device (ID)" msgstr "Appareil (ID)" @@ -3242,8 +3243,8 @@ msgstr "Appareil (ID)" msgid "Rack (name)" msgstr "Baie (nom)" -#: netbox/dcim/filtersets.py:1431 netbox/ipam/filtersets.py:606 -#: netbox/ipam/filtersets.py:846 netbox/ipam/filtersets.py:1121 +#: netbox/dcim/filtersets.py:1431 netbox/ipam/filtersets.py:608 +#: netbox/ipam/filtersets.py:848 netbox/ipam/filtersets.py:1123 #: netbox/vpn/filtersets.py:374 msgid "Device (name)" msgstr "Appareil (nom)" @@ -3295,9 +3296,9 @@ msgstr "VID attribué" #: netbox/dcim/forms/bulk_import.py:913 netbox/dcim/forms/filtersets.py:1428 #: netbox/dcim/forms/model_forms.py:1385 #: netbox/dcim/models/device_components.py:711 -#: netbox/dcim/tables/devices.py:626 netbox/ipam/filtersets.py:316 -#: netbox/ipam/filtersets.py:327 netbox/ipam/filtersets.py:483 -#: netbox/ipam/filtersets.py:584 netbox/ipam/filtersets.py:595 +#: netbox/dcim/tables/devices.py:626 netbox/ipam/filtersets.py:318 +#: netbox/ipam/filtersets.py:329 netbox/ipam/filtersets.py:485 +#: netbox/ipam/filtersets.py:586 netbox/ipam/filtersets.py:597 #: netbox/ipam/forms/bulk_edit.py:242 netbox/ipam/forms/bulk_edit.py:298 #: netbox/ipam/forms/bulk_edit.py:340 netbox/ipam/forms/bulk_import.py:157 #: netbox/ipam/forms/bulk_import.py:243 netbox/ipam/forms/bulk_import.py:279 @@ -3324,19 +3325,19 @@ msgstr "VID attribué" msgid "VRF" msgstr "VRF" -#: netbox/dcim/filtersets.py:1619 netbox/ipam/filtersets.py:322 -#: netbox/ipam/filtersets.py:333 netbox/ipam/filtersets.py:489 -#: netbox/ipam/filtersets.py:590 netbox/ipam/filtersets.py:601 +#: netbox/dcim/filtersets.py:1619 netbox/ipam/filtersets.py:324 +#: netbox/ipam/filtersets.py:335 netbox/ipam/filtersets.py:491 +#: netbox/ipam/filtersets.py:592 netbox/ipam/filtersets.py:603 msgid "VRF (RD)" msgstr "VRF (RD)" -#: netbox/dcim/filtersets.py:1624 netbox/ipam/filtersets.py:1030 +#: netbox/dcim/filtersets.py:1624 netbox/ipam/filtersets.py:1032 #: netbox/vpn/filtersets.py:342 msgid "L2VPN (ID)" msgstr "L2VPN (IDENTIFIANT)" #: netbox/dcim/filtersets.py:1630 netbox/dcim/forms/filtersets.py:1433 -#: netbox/dcim/tables/devices.py:570 netbox/ipam/filtersets.py:1036 +#: netbox/dcim/tables/devices.py:570 netbox/ipam/filtersets.py:1038 #: netbox/ipam/forms/filtersets.py:518 netbox/ipam/tables/vlans.py:137 #: netbox/templates/dcim/interface.html:93 netbox/templates/ipam/vlan.html:66 #: netbox/templates/vpn/l2vpntermination.html:12 @@ -3441,7 +3442,7 @@ msgstr "Panneau d'alimentation (ID)" #: netbox/templates/inc/panels/tags.html:5 #: netbox/utilities/forms/fields/fields.py:81 msgid "Tags" -msgstr "Balises" +msgstr "Étiquettes" #: netbox/dcim/forms/bulk_create.py:112 netbox/dcim/forms/filtersets.py:1498 #: netbox/dcim/forms/model_forms.py:488 netbox/dcim/forms/model_forms.py:546 @@ -3498,7 +3499,7 @@ msgstr "Fuseau horaire" #: netbox/dcim/forms/object_import.py:187 netbox/dcim/tables/devices.py:96 #: netbox/dcim/tables/devices.py:172 netbox/dcim/tables/devices.py:940 #: netbox/dcim/tables/devicetypes.py:80 netbox/dcim/tables/devicetypes.py:308 -#: netbox/dcim/tables/modules.py:20 netbox/dcim/tables/modules.py:60 +#: netbox/dcim/tables/modules.py:20 netbox/dcim/tables/modules.py:61 #: netbox/dcim/tables/racks.py:58 netbox/dcim/tables/racks.py:132 #: netbox/templates/dcim/devicetype.html:14 #: netbox/templates/dcim/inventoryitem.html:44 @@ -3597,7 +3598,7 @@ msgstr "Unité de poids" #: netbox/dcim/forms/model_forms.py:217 netbox/dcim/forms/model_forms.py:256 #: netbox/templates/dcim/rack.html:45 netbox/templates/dcim/racktype.html:13 msgid "Rack Type" -msgstr "Type de rack" +msgstr "Type de baie" #: netbox/dcim/forms/bulk_edit.py:299 netbox/dcim/forms/model_forms.py:220 #: netbox/dcim/forms/model_forms.py:297 @@ -3749,7 +3750,7 @@ msgid "Device Type" msgstr "Type d'appareil" #: netbox/dcim/forms/bulk_edit.py:598 netbox/dcim/forms/model_forms.py:401 -#: netbox/dcim/tables/modules.py:17 netbox/dcim/tables/modules.py:65 +#: netbox/dcim/tables/modules.py:17 netbox/dcim/tables/modules.py:66 #: netbox/templates/dcim/module.html:65 #: netbox/templates/dcim/modulebay.html:66 #: netbox/templates/dcim/moduletype.html:22 @@ -3857,7 +3858,7 @@ msgstr "Cluster" #: netbox/dcim/tables/devices.py:697 netbox/dcim/tables/devices.py:754 #: netbox/dcim/tables/devices.py:801 netbox/dcim/tables/devices.py:861 #: netbox/dcim/tables/devices.py:930 netbox/dcim/tables/devices.py:1057 -#: netbox/dcim/tables/modules.py:52 netbox/extras/forms/filtersets.py:321 +#: netbox/dcim/tables/modules.py:53 netbox/extras/forms/filtersets.py:321 #: netbox/ipam/forms/bulk_import.py:304 netbox/ipam/forms/bulk_import.py:505 #: netbox/ipam/forms/filtersets.py:551 netbox/ipam/forms/model_forms.py:323 #: netbox/ipam/forms/model_forms.py:712 netbox/ipam/forms/model_forms.py:745 @@ -4098,22 +4099,22 @@ msgstr "groupe VLAN" #: netbox/virtualization/forms/bulk_edit.py:248 #: netbox/virtualization/forms/model_forms.py:326 msgid "Untagged VLAN" -msgstr "VLAN non balisé" +msgstr "VLAN non étiqueté" #: netbox/dcim/forms/bulk_edit.py:1508 netbox/dcim/forms/model_forms.py:1376 #: netbox/dcim/tables/devices.py:585 #: netbox/virtualization/forms/bulk_edit.py:256 #: netbox/virtualization/forms/model_forms.py:335 msgid "Tagged VLANs" -msgstr "VLAN balisés" +msgstr "VLAN étiqueté" #: netbox/dcim/forms/bulk_edit.py:1511 msgid "Add tagged VLANs" -msgstr "" +msgstr "Ajouter des VLANs étiquetés" #: netbox/dcim/forms/bulk_edit.py:1520 msgid "Remove tagged VLANs" -msgstr "" +msgstr "Retirer des VLANs étiquetés" #: netbox/dcim/forms/bulk_edit.py:1536 netbox/dcim/forms/model_forms.py:1348 msgid "Wireless LAN group" @@ -4161,7 +4162,7 @@ msgstr "Commutation 802.1Q" #: netbox/dcim/forms/bulk_edit.py:1558 msgid "Add/Remove" -msgstr "" +msgstr "Ajouter/Supprimer" #: netbox/dcim/forms/bulk_edit.py:1617 netbox/dcim/forms/bulk_edit.py:1619 msgid "Interface mode must be specified to assign VLANs" @@ -4170,7 +4171,7 @@ msgstr "Le mode d'interface doit être spécifié pour attribuer des VLAN" #: netbox/dcim/forms/bulk_edit.py:1624 netbox/dcim/forms/common.py:50 msgid "An access interface cannot have tagged VLANs assigned." msgstr "" -"Des tags de VLAN ne peuvent pas être associés à une interface d'accès." +"Des étiquettes de VLAN ne peuvent pas être associés à une interface d'accès." #: netbox/dcim/forms/bulk_import.py:64 msgid "Name of parent region" @@ -4212,11 +4213,11 @@ msgstr "Emplacement introuvable." #: netbox/dcim/forms/bulk_import.py:185 msgid "The manufacturer of this rack type" -msgstr "Le fabricant de ce type de rack" +msgstr "Le fabricant de ce type de baie" #: netbox/dcim/forms/bulk_import.py:196 msgid "The lowest-numbered position in the rack" -msgstr "La position la plus basse du rack" +msgstr "La position la plus basse de la baie" #: netbox/dcim/forms/bulk_import.py:201 netbox/dcim/forms/bulk_import.py:276 msgid "Rail-to-rail width (in inches)" @@ -4228,7 +4229,7 @@ msgstr "Unité pour les dimensions extérieures" #: netbox/dcim/forms/bulk_import.py:213 netbox/dcim/forms/bulk_import.py:298 msgid "Unit for rack weights" -msgstr "Unité poids de la baie" +msgstr "Unité de poids de la baie" #: netbox/dcim/forms/bulk_import.py:245 msgid "Name of assigned tenant" @@ -4240,7 +4241,7 @@ msgstr "Nom du rôle attribué" #: netbox/dcim/forms/bulk_import.py:264 msgid "Rack type model" -msgstr "" +msgstr "Modèle de baie" #: netbox/dcim/forms/bulk_import.py:292 netbox/dcim/forms/bulk_import.py:435 #: netbox/dcim/forms/bulk_import.py:605 @@ -4656,8 +4657,9 @@ msgid "" "The tagged VLANs ({vlans}) must belong to the same site as the interface's " "parent device/VM, or they must be global" msgstr "" -"Les VLAN balisés ({vlans}) doivent appartenir au même site que l'appareil/la" -" machine virtuelle parent de l'interface, ou ils doivent être globaux" +"Les VLAN étiquetés ({vlans}) doivent appartenir au même site que " +"l'appareil/la machine virtuelle parente de l'interface, ou ils doivent être " +"globaux" #: netbox/dcim/forms/common.py:126 msgid "" @@ -4863,7 +4865,7 @@ msgstr "Identifiant" #: netbox/dcim/forms/model_forms.py:259 msgid "Select a pre-defined rack type, or set physical characteristics below." msgstr "" -"Sélectionnez un type de rack prédéfini ou définissez les caractéristiques " +"Sélectionnez un type de baie prédéfini ou définissez les caractéristiques " "physiques ci-dessous." #: netbox/dcim/forms/model_forms.py:265 @@ -5637,7 +5639,7 @@ msgstr "réseaux locaux sans fil" #: netbox/dcim/models/device_components.py:697 #: netbox/virtualization/models/virtualmachines.py:335 msgid "untagged VLAN" -msgstr "VLAN non balisé" +msgstr "VLAN non étiqueté" #: netbox/dcim/models/device_components.py:703 #: netbox/virtualization/models/virtualmachines.py:341 @@ -5786,7 +5788,7 @@ msgid "" "The untagged VLAN ({untagged_vlan}) must belong to the same site as the " "interface's parent device, or it must be global." msgstr "" -"Le VLAN non balisé ({untagged_vlan}) doit appartenir au même site que " +"Le VLAN non étiqueté ({untagged_vlan}) doit appartenir au même site que " "l'appareil parent de l'interface, ou il doit être global." #: netbox/dcim/models/device_components.py:990 @@ -6494,11 +6496,11 @@ msgstr "facteur de forme" #: netbox/dcim/models/racks.py:162 msgid "rack type" -msgstr "type de rack" +msgstr "type de baie" #: netbox/dcim/models/racks.py:163 msgid "rack types" -msgstr "types de rayonnages" +msgstr "types de baies" #: netbox/dcim/models/racks.py:180 netbox/dcim/models/racks.py:379 msgid "Must specify a unit when setting an outer width/depth" @@ -6852,7 +6854,7 @@ msgstr "Baies pour modules" msgid "Inventory items" msgstr "Articles d'inventaire" -#: netbox/dcim/tables/devices.py:305 netbox/dcim/tables/modules.py:56 +#: netbox/dcim/tables/devices.py:305 netbox/dcim/tables/modules.py:57 #: netbox/templates/dcim/modulebay.html:17 msgid "Module Bay" msgstr "Module Bay" @@ -7135,7 +7137,7 @@ msgstr "Réservations" #: netbox/dcim/views.py:757 netbox/templates/dcim/location.html:90 #: netbox/templates/dcim/site.html:140 msgid "Non-Racked Devices" -msgstr "Appareils non rackés" +msgstr "Appareils non mis en baie" #: netbox/dcim/views.py:2086 netbox/extras/forms/model_forms.py:577 #: netbox/templates/extras/configcontext.html:10 @@ -7584,12 +7586,12 @@ msgstr "Signets" msgid "Show your personal bookmarks" msgstr "Afficher vos favoris personnels" -#: netbox/extras/events.py:147 +#: netbox/extras/events.py:151 #, python-brace-format msgid "Unknown action type for an event rule: {action_type}" msgstr "Type d'action inconnu pour une règle d'événement : {action_type}" -#: netbox/extras/events.py:192 +#: netbox/extras/events.py:196 #, python-brace-format msgid "Cannot import events pipeline {name} error: {error}" msgstr "" @@ -7632,11 +7634,11 @@ msgstr "Groupe de locataires (slug)" #: netbox/extras/filtersets.py:623 netbox/extras/forms/model_forms.py:495 #: netbox/templates/extras/tag.html:11 msgid "Tag" -msgstr "Balise" +msgstr "Étiquette" #: netbox/extras/filtersets.py:629 msgid "Tag (slug)" -msgstr "Tag (slug)" +msgstr "Étiquette (slug)" #: netbox/extras/filtersets.py:689 netbox/extras/forms/filtersets.py:429 msgid "Has local config context data" @@ -7932,7 +7934,7 @@ msgstr "Type d'action" #: netbox/extras/forms/filtersets.py:307 msgid "Tagged object type" -msgstr "Type d'objet balisé" +msgstr "Type d'objet étiqueté" #: netbox/extras/forms/filtersets.py:312 msgid "Allowed object type" @@ -9066,7 +9068,7 @@ msgstr "étiquette" #: netbox/extras/models/tags.py:50 msgid "tags" -msgstr "balises" +msgstr "étiquettes" #: netbox/extras/models/tags.py:78 msgid "tagged item" @@ -9395,129 +9397,129 @@ msgstr "Exportation de L2VPN" msgid "Exporting L2VPN (identifier)" msgstr "Exportation de L2VPN (identifiant)" -#: netbox/ipam/filtersets.py:155 netbox/ipam/filtersets.py:281 +#: netbox/ipam/filtersets.py:155 netbox/ipam/filtersets.py:283 #: netbox/ipam/forms/model_forms.py:229 netbox/ipam/tables/ip.py:212 #: netbox/templates/ipam/prefix.html:12 msgid "Prefix" msgstr "Préfixe" #: netbox/ipam/filtersets.py:159 netbox/ipam/filtersets.py:198 -#: netbox/ipam/filtersets.py:221 +#: netbox/ipam/filtersets.py:223 msgid "RIR (ID)" msgstr "RIRE (ID)" #: netbox/ipam/filtersets.py:165 netbox/ipam/filtersets.py:204 -#: netbox/ipam/filtersets.py:227 +#: netbox/ipam/filtersets.py:229 msgid "RIR (slug)" msgstr "RIR (slug)" -#: netbox/ipam/filtersets.py:285 +#: netbox/ipam/filtersets.py:287 msgid "Within prefix" msgstr "Dans le préfixe" -#: netbox/ipam/filtersets.py:289 +#: netbox/ipam/filtersets.py:291 msgid "Within and including prefix" msgstr "Dans le préfixe et y compris" -#: netbox/ipam/filtersets.py:293 +#: netbox/ipam/filtersets.py:295 msgid "Prefixes which contain this prefix or IP" msgstr "Préfixes contenant ce préfixe ou cette adresse IP" -#: netbox/ipam/filtersets.py:304 netbox/ipam/filtersets.py:572 +#: netbox/ipam/filtersets.py:306 netbox/ipam/filtersets.py:574 #: netbox/ipam/forms/bulk_edit.py:343 netbox/ipam/forms/filtersets.py:196 #: netbox/ipam/forms/filtersets.py:331 msgid "Mask length" msgstr "Longueur du masque" -#: netbox/ipam/filtersets.py:373 netbox/vpn/filtersets.py:427 +#: netbox/ipam/filtersets.py:375 netbox/vpn/filtersets.py:427 msgid "VLAN (ID)" msgstr "VLAN (IDENTIFIANT)" -#: netbox/ipam/filtersets.py:377 netbox/vpn/filtersets.py:422 +#: netbox/ipam/filtersets.py:379 netbox/vpn/filtersets.py:422 msgid "VLAN number (1-4094)" msgstr "Numéro de VLAN (1-4094)" -#: netbox/ipam/filtersets.py:471 netbox/ipam/filtersets.py:475 -#: netbox/ipam/filtersets.py:567 netbox/ipam/forms/model_forms.py:496 +#: netbox/ipam/filtersets.py:473 netbox/ipam/filtersets.py:477 +#: netbox/ipam/filtersets.py:569 netbox/ipam/forms/model_forms.py:496 #: netbox/templates/tenancy/contact.html:53 #: netbox/tenancy/forms/bulk_edit.py:113 msgid "Address" msgstr "Adresse" -#: netbox/ipam/filtersets.py:479 +#: netbox/ipam/filtersets.py:481 msgid "Ranges which contain this prefix or IP" msgstr "Plages contenant ce préfixe ou cette adresse IP" -#: netbox/ipam/filtersets.py:507 netbox/ipam/filtersets.py:563 +#: netbox/ipam/filtersets.py:509 netbox/ipam/filtersets.py:565 msgid "Parent prefix" msgstr "Préfixe parent" -#: netbox/ipam/filtersets.py:616 netbox/ipam/filtersets.py:856 -#: netbox/ipam/filtersets.py:1131 netbox/vpn/filtersets.py:385 +#: netbox/ipam/filtersets.py:618 netbox/ipam/filtersets.py:858 +#: netbox/ipam/filtersets.py:1133 netbox/vpn/filtersets.py:385 msgid "Virtual machine (name)" msgstr "Machine virtuelle (nom)" -#: netbox/ipam/filtersets.py:621 netbox/ipam/filtersets.py:861 -#: netbox/ipam/filtersets.py:1125 netbox/virtualization/filtersets.py:282 +#: netbox/ipam/filtersets.py:623 netbox/ipam/filtersets.py:863 +#: netbox/ipam/filtersets.py:1127 netbox/virtualization/filtersets.py:282 #: netbox/virtualization/filtersets.py:321 netbox/vpn/filtersets.py:390 msgid "Virtual machine (ID)" msgstr "Machine virtuelle (ID)" -#: netbox/ipam/filtersets.py:627 netbox/vpn/filtersets.py:97 +#: netbox/ipam/filtersets.py:629 netbox/vpn/filtersets.py:97 #: netbox/vpn/filtersets.py:396 msgid "Interface (name)" msgstr "Interface (nom)" -#: netbox/ipam/filtersets.py:638 netbox/vpn/filtersets.py:108 +#: netbox/ipam/filtersets.py:640 netbox/vpn/filtersets.py:108 #: netbox/vpn/filtersets.py:407 msgid "VM interface (name)" msgstr "Interface de machine virtuelle (nom)" -#: netbox/ipam/filtersets.py:643 netbox/vpn/filtersets.py:113 +#: netbox/ipam/filtersets.py:645 netbox/vpn/filtersets.py:113 msgid "VM interface (ID)" msgstr "Interface de machine virtuelle (ID)" -#: netbox/ipam/filtersets.py:648 +#: netbox/ipam/filtersets.py:650 msgid "FHRP group (ID)" msgstr "Groupe FHRP (ID)" -#: netbox/ipam/filtersets.py:652 +#: netbox/ipam/filtersets.py:654 msgid "Is assigned to an interface" msgstr "Est affecté à une interface" -#: netbox/ipam/filtersets.py:656 +#: netbox/ipam/filtersets.py:658 msgid "Is assigned" msgstr "Est attribué" -#: netbox/ipam/filtersets.py:668 +#: netbox/ipam/filtersets.py:670 msgid "Service (ID)" msgstr "Service (ID)" -#: netbox/ipam/filtersets.py:673 +#: netbox/ipam/filtersets.py:675 msgid "NAT inside IP address (ID)" msgstr "Adresse IP intérieure NAT (ID)" -#: netbox/ipam/filtersets.py:1041 netbox/ipam/forms/bulk_import.py:322 +#: netbox/ipam/filtersets.py:1043 netbox/ipam/forms/bulk_import.py:322 msgid "Assigned interface" msgstr "Interface attribuée" -#: netbox/ipam/filtersets.py:1046 +#: netbox/ipam/filtersets.py:1048 msgid "Assigned VM interface" msgstr "Interface de machine virtuelle attribuée" -#: netbox/ipam/filtersets.py:1136 +#: netbox/ipam/filtersets.py:1138 msgid "IP address (ID)" msgstr "Adresse IP (ID)" -#: netbox/ipam/filtersets.py:1142 netbox/ipam/models/ip.py:788 +#: netbox/ipam/filtersets.py:1144 netbox/ipam/models/ip.py:788 msgid "IP address" msgstr "Adresse IP" -#: netbox/ipam/filtersets.py:1167 +#: netbox/ipam/filtersets.py:1169 msgid "Primary IPv4 (ID)" msgstr "IPv4 principal (ID)" -#: netbox/ipam/filtersets.py:1172 +#: netbox/ipam/filtersets.py:1174 msgid "Primary IPv6 (ID)" msgstr "IPv6 principal (ID)" @@ -9606,7 +9608,7 @@ msgstr "Longueur du préfixe" #: netbox/ipam/forms/bulk_edit.py:268 netbox/ipam/forms/filtersets.py:241 #: netbox/templates/ipam/prefix.html:85 msgid "Is a pool" -msgstr "C'est une piscine" +msgstr "C'est une plage d'adresses" #: netbox/ipam/forms/bulk_edit.py:273 netbox/ipam/forms/bulk_edit.py:318 #: netbox/ipam/forms/filtersets.py:248 netbox/ipam/forms/filtersets.py:293 @@ -10175,7 +10177,7 @@ msgstr "La fonction principale de ce préfixe" #: netbox/ipam/models/ip.py:265 msgid "is a pool" -msgstr "est une piscine" +msgstr "est une plage d'adresses" #: netbox/ipam/models/ip.py:267 msgid "All IP addresses within this prefix are considered usable" @@ -10523,7 +10525,7 @@ msgstr "Profondeur" #: netbox/ipam/tables/ip.py:262 msgid "Pool" -msgstr "Piscine" +msgstr "Plage d'adresses" #: netbox/ipam/tables/ip.py:266 netbox/ipam/tables/ip.py:320 msgid "Marked Utilized" @@ -10989,11 +10991,11 @@ msgstr "" #: netbox/netbox/forms/base.py:120 msgid "Add tags" -msgstr "Ajouter des tags" +msgstr "Ajouter des étiquettes" #: netbox/netbox/forms/base.py:125 msgid "Remove tags" -msgstr "Supprimer les tags" +msgstr "Supprimer les étiquettes" #: netbox/netbox/forms/mixins.py:38 #, python-brace-format @@ -11081,7 +11083,7 @@ msgstr "Associer des contacts" #: netbox/netbox/navigation/menu.py:50 msgid "Rack Roles" -msgstr "Rôles des baies" +msgstr "Rôles de la baie" #: netbox/netbox/navigation/menu.py:54 msgid "Elevations" @@ -11089,7 +11091,7 @@ msgstr "Élévations" #: netbox/netbox/navigation/menu.py:60 netbox/netbox/navigation/menu.py:62 msgid "Rack Types" -msgstr "Types de rayonnages" +msgstr "Types de baie" #: netbox/netbox/navigation/menu.py:76 msgid "Modules" @@ -12197,7 +12199,7 @@ msgstr "Dossiers" #: netbox/templates/core/inc/config_data.html:7 msgid "Rack elevations" -msgstr "Élévations des rayonnages" +msgstr "Positions en baie" #: netbox/templates/core/inc/config_data.html:10 msgid "Default unit height" @@ -12613,7 +12615,7 @@ msgstr "Non connecté" #: netbox/templates/dcim/device.html:34 msgid "Highlight device in rack" -msgstr "Surligner l'appareil dans le rack" +msgstr "Surligner l'appareil dans la baie" #: netbox/templates/dcim/device.html:55 msgid "Not racked" @@ -12939,7 +12941,7 @@ msgstr "Non connecté" #: netbox/templates/dcim/inc/interface_vlans_table.html:6 msgid "Untagged" -msgstr "Non taggé" +msgstr "Non étiqueté" #: netbox/templates/dcim/inc/interface_vlans_table.html:37 msgid "No VLANs Assigned" @@ -12969,7 +12971,7 @@ msgstr "Unités décroissantes" #: netbox/templates/dcim/inc/rack_elevation.html:3 msgid "Rack elevation" -msgstr "Élévation du rack" +msgstr "Position en baie" #: netbox/templates/dcim/interface.html:17 msgid "Add Child Interface" @@ -13165,7 +13167,7 @@ msgstr "Afficher la liste" #: netbox/templates/dcim/rack_elevation_list.html:14 msgid "Select rack view" -msgstr "Sélectionnez la vue du rack" +msgstr "Sélectionnez la vue de la baie" #: netbox/templates/dcim/rack_elevation_list.html:25 msgid "Sort By" @@ -13275,7 +13277,7 @@ msgstr "Édition d'un châssis virtuel %(name)s" #: netbox/templates/dcim/virtualchassis_edit.html:53 msgid "Rack/Unit" -msgstr "Baie/U" +msgstr "Baie/Unité" #: netbox/templates/dcim/virtualchassis_remove_member.html:5 msgid "Remove Virtual Chassis Member" @@ -13690,7 +13692,7 @@ msgstr "Tous" #: netbox/templates/extras/tag.html:32 msgid "Tagged Items" -msgstr "Articles taggés" +msgstr "Articles étiquetés" #: netbox/templates/extras/tag.html:43 msgid "Allowed Object Types" @@ -13702,11 +13704,11 @@ msgstr "N'importe lequel" #: netbox/templates/extras/tag.html:57 msgid "Tagged Item Types" -msgstr "Types d'articles taggés" +msgstr "Types d'articles étiquetés" #: netbox/templates/extras/tag.html:81 msgid "Tagged Objects" -msgstr "Objets taggés" +msgstr "Objets étiquetés" #: netbox/templates/extras/webhook.html:26 msgid "HTTP Method" @@ -15559,12 +15561,12 @@ msgstr "Mémoire (Mo)" #: netbox/virtualization/forms/bulk_edit.py:174 msgid "Disk (MB)" -msgstr "" +msgstr "Disque (Mo)" #: netbox/virtualization/forms/bulk_edit.py:334 #: netbox/virtualization/forms/filtersets.py:251 msgid "Size (MB)" -msgstr "" +msgstr "Taille (Mo)" #: netbox/virtualization/forms/bulk_import.py:44 msgid "Type of cluster" @@ -15737,7 +15739,7 @@ msgid "" "The untagged VLAN ({untagged_vlan}) must belong to the same site as the " "interface's parent virtual machine, or it must be global." msgstr "" -"Le VLAN non taggé ({untagged_vlan}) doit appartenir au même site que la " +"Le VLAN non étiqueté ({untagged_vlan}) doit appartenir au même site que la " "machine virtuelle parente de l'interface, ou il doit être global." #: netbox/virtualization/models/virtualmachines.py:434 @@ -15780,19 +15782,19 @@ msgstr "GRE" #: netbox/vpn/choices.py:39 msgid "WireGuard" -msgstr "" +msgstr "Wireguard" #: netbox/vpn/choices.py:40 msgid "OpenVPN" -msgstr "" +msgstr "OpenVPN" #: netbox/vpn/choices.py:41 msgid "L2TP" -msgstr "" +msgstr "L2TP" #: netbox/vpn/choices.py:42 msgid "PPTP" -msgstr "" +msgstr "PPTP" #: netbox/vpn/choices.py:64 msgid "Hub" diff --git a/requirements.txt b/requirements.txt index bd16b5d10..e5ffe8386 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,4 +1,4 @@ -Django==5.1.3 +Django==5.1.4 django-cors-headers==4.6.0 django-debug-toolbar==4.4.6 django-filter==24.3 From 14cec518f5fd9e2ac75d6342a476b9250ad8861a Mon Sep 17 00:00:00 2001 From: Jeremy Stretch Date: Mon, 6 Jan 2025 16:56:58 -0500 Subject: [PATCH 004/152] Closes #18311: Update minimum required version of PostgreSQL --- docs/configuration/required-parameters.md | 2 +- docs/installation/1-postgresql.md | 6 +++--- docs/introduction.md | 2 +- docs/release-notes/version-4.2.md | 1 + 4 files changed, 6 insertions(+), 5 deletions(-) diff --git a/docs/configuration/required-parameters.md b/docs/configuration/required-parameters.md index 90eb8c0cf..f9a5a6f87 100644 --- a/docs/configuration/required-parameters.md +++ b/docs/configuration/required-parameters.md @@ -25,7 +25,7 @@ ALLOWED_HOSTS = ['*'] ## DATABASE -NetBox requires access to a PostgreSQL 12 or later database service to store data. This service can run locally on the NetBox server or on a remote system. The following parameters must be defined within the `DATABASE` dictionary: +NetBox requires access to a PostgreSQL 13 or later database service to store data. This service can run locally on the NetBox server or on a remote system. The following parameters must be defined within the `DATABASE` dictionary: * `NAME` - Database name * `USER` - PostgreSQL username diff --git a/docs/installation/1-postgresql.md b/docs/installation/1-postgresql.md index 9d30f4514..3f826fa8a 100644 --- a/docs/installation/1-postgresql.md +++ b/docs/installation/1-postgresql.md @@ -2,8 +2,8 @@ This section entails the installation and configuration of a local PostgreSQL database. If you already have a PostgreSQL database service in place, skip to [the next section](2-redis.md). -!!! warning "PostgreSQL 12 or later required" - NetBox requires PostgreSQL 12 or later. Please note that MySQL and other relational databases are **not** supported. +!!! warning "PostgreSQL 13 or later required" + NetBox requires PostgreSQL 13 or later. Please note that MySQL and other relational databases are **not** supported. ## Installation @@ -34,7 +34,7 @@ This section entails the installation and configuration of a local PostgreSQL da sudo systemctl enable --now postgresql ``` -Before continuing, verify that you have installed PostgreSQL 12 or later: +Before continuing, verify that you have installed PostgreSQL 13 or later: ```no-highlight psql -V diff --git a/docs/introduction.md b/docs/introduction.md index b8442dad7..75701c119 100644 --- a/docs/introduction.md +++ b/docs/introduction.md @@ -79,5 +79,5 @@ NetBox is built on the [Django](https://djangoproject.com/) Python framework and | HTTP service | nginx or Apache | | WSGI service | gunicorn or uWSGI | | Application | Django/Python | -| Database | PostgreSQL 12+ | +| Database | PostgreSQL 13+ | | Task queuing | Redis/django-rq | diff --git a/docs/release-notes/version-4.2.md b/docs/release-notes/version-4.2.md index 75a776573..fdbc09114 100644 --- a/docs/release-notes/version-4.2.md +++ b/docs/release-notes/version-4.2.md @@ -5,6 +5,7 @@ ### Breaking Changes * Support for the Django admin UI has been completely removed. (The Django admin UI was disabled by default in NetBox v4.0.) +* This release drops support for PostgreSQL 12. PostgreSQL 13 or later is required to run this release. * NetBox has adopted collation-based natural ordering for many models. This may alter the order in which some objects are listed by default. * Automatic redirects from pre-v4.1 UI views for virtual disks have been removed. * The `site` and `provider_network` foreign key fields on `circuits.CircuitTermination` have been replaced by the `termination` generic foreign key. From ed541220e85ccb1093947d216f3b0e2acd040c20 Mon Sep 17 00:00:00 2001 From: github-actions <41898282+github-actions[bot]@users.noreply.github.com> Date: Tue, 7 Jan 2025 05:02:25 +0000 Subject: [PATCH 005/152] Update source translation strings --- netbox/translations/en/LC_MESSAGES/django.po | 6779 ++++++++++-------- 1 file changed, 3667 insertions(+), 3112 deletions(-) diff --git a/netbox/translations/en/LC_MESSAGES/django.po b/netbox/translations/en/LC_MESSAGES/django.po index 5d1188333..8a7614860 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: 2025-01-04 05:02+0000\n" +"POT-Creation-Date: 2025-01-07 05:02+0000\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -28,7 +28,7 @@ msgstr "" msgid "Write Enabled" msgstr "" -#: netbox/account/tables.py:35 netbox/core/choices.py:86 +#: netbox/account/tables.py:35 netbox/core/choices.py:100 #: netbox/core/tables/jobs.py:29 netbox/core/tables/tasks.py:79 #: netbox/extras/tables/tables.py:335 netbox/extras/tables/tables.py:566 #: netbox/templates/account/token.html:43 @@ -39,7 +39,9 @@ msgstr "" #: netbox/templates/core/rq_worker.html:14 #: netbox/templates/extras/htmx/script_result.html:12 #: netbox/templates/extras/journalentry.html:22 -#: netbox/templates/generic/object.html:58 netbox/templates/users/token.html:35 +#: netbox/templates/generic/object.html:58 +#: netbox/templates/htmx/quick_add_created.html:7 +#: netbox/templates/users/token.html:35 msgid "Created" msgstr "" @@ -82,24 +84,25 @@ msgstr "" #: netbox/circuits/choices.py:21 netbox/dcim/choices.py:20 #: netbox/dcim/choices.py:102 netbox/dcim/choices.py:185 -#: netbox/dcim/choices.py:237 netbox/dcim/choices.py:1532 -#: netbox/dcim/choices.py:1608 netbox/dcim/choices.py:1658 -#: netbox/virtualization/choices.py:20 netbox/virtualization/choices.py:45 -#: netbox/vpn/choices.py:18 +#: netbox/dcim/choices.py:237 netbox/dcim/choices.py:1534 +#: netbox/dcim/choices.py:1592 netbox/dcim/choices.py:1642 +#: netbox/dcim/choices.py:1664 netbox/virtualization/choices.py:20 +#: netbox/virtualization/choices.py:45 netbox/vpn/choices.py:18 msgid "Planned" msgstr "" -#: netbox/circuits/choices.py:22 netbox/netbox/navigation/menu.py:305 +#: netbox/circuits/choices.py:22 netbox/netbox/navigation/menu.py:326 msgid "Provisioning" msgstr "" #: netbox/circuits/choices.py:23 netbox/core/tables/tasks.py:22 #: netbox/dcim/choices.py:22 netbox/dcim/choices.py:103 #: netbox/dcim/choices.py:184 netbox/dcim/choices.py:236 -#: netbox/dcim/choices.py:1607 netbox/dcim/choices.py:1657 -#: netbox/extras/tables/tables.py:495 netbox/ipam/choices.py:31 -#: netbox/ipam/choices.py:49 netbox/ipam/choices.py:69 -#: netbox/ipam/choices.py:154 netbox/templates/extras/configcontext.html:25 +#: netbox/dcim/choices.py:1591 netbox/dcim/choices.py:1641 +#: netbox/dcim/choices.py:1663 netbox/extras/tables/tables.py:495 +#: netbox/ipam/choices.py:31 netbox/ipam/choices.py:49 +#: netbox/ipam/choices.py:69 netbox/ipam/choices.py:154 +#: netbox/templates/extras/configcontext.html:25 #: netbox/templates/users/user.html:37 netbox/users/forms/bulk_edit.py:38 #: netbox/virtualization/choices.py:22 netbox/virtualization/choices.py:44 #: netbox/vpn/choices.py:19 netbox/wireless/choices.py:25 @@ -107,9 +110,9 @@ msgid "Active" msgstr "" #: netbox/circuits/choices.py:24 netbox/dcim/choices.py:183 -#: netbox/dcim/choices.py:235 netbox/dcim/choices.py:1606 -#: netbox/dcim/choices.py:1659 netbox/virtualization/choices.py:24 -#: netbox/virtualization/choices.py:43 +#: netbox/dcim/choices.py:235 netbox/dcim/choices.py:1590 +#: netbox/dcim/choices.py:1643 netbox/dcim/choices.py:1662 +#: netbox/virtualization/choices.py:24 netbox/virtualization/choices.py:43 msgid "Offline" msgstr "" @@ -121,7 +124,9 @@ msgstr "" msgid "Decommissioned" msgstr "" -#: netbox/circuits/choices.py:90 netbox/dcim/choices.py:1619 +#: netbox/circuits/choices.py:90 netbox/dcim/choices.py:1603 +#: netbox/templates/dcim/interface.html:135 +#: netbox/templates/virtualization/vminterface.html:77 #: netbox/tenancy/choices.py:17 msgid "Primary" msgstr "" @@ -139,195 +144,199 @@ msgstr "" msgid "Inactive" msgstr "" -#: netbox/circuits/filtersets.py:31 netbox/circuits/filtersets.py:198 -#: netbox/dcim/filtersets.py:98 netbox/dcim/filtersets.py:152 -#: netbox/dcim/filtersets.py:212 netbox/dcim/filtersets.py:333 -#: netbox/dcim/filtersets.py:464 netbox/dcim/filtersets.py:1021 -#: netbox/dcim/filtersets.py:1368 netbox/dcim/filtersets.py:1903 -#: netbox/dcim/filtersets.py:2146 netbox/dcim/filtersets.py:2204 -#: netbox/ipam/filtersets.py:341 netbox/ipam/filtersets.py:961 -#: netbox/virtualization/filtersets.py:45 -#: netbox/virtualization/filtersets.py:173 netbox/vpn/filtersets.py:358 +#: netbox/circuits/choices.py:107 netbox/templates/dcim/interface.html:275 +#: netbox/vpn/choices.py:63 +msgid "Peer" +msgstr "" + +#: netbox/circuits/choices.py:108 netbox/vpn/choices.py:64 +msgid "Hub" +msgstr "" + +#: netbox/circuits/choices.py:109 netbox/vpn/choices.py:65 +msgid "Spoke" +msgstr "" + +#: netbox/circuits/filtersets.py:37 netbox/circuits/filtersets.py:204 +#: netbox/circuits/filtersets.py:279 netbox/dcim/base_filtersets.py:22 +#: netbox/dcim/filtersets.py:99 netbox/dcim/filtersets.py:153 +#: netbox/dcim/filtersets.py:213 netbox/dcim/filtersets.py:334 +#: netbox/dcim/filtersets.py:465 netbox/dcim/filtersets.py:1022 +#: netbox/dcim/filtersets.py:1369 netbox/dcim/filtersets.py:2026 +#: netbox/dcim/filtersets.py:2269 netbox/dcim/filtersets.py:2327 +#: netbox/ipam/filtersets.py:928 netbox/virtualization/filtersets.py:139 +#: netbox/vpn/filtersets.py:358 msgid "Region (ID)" msgstr "" -#: netbox/circuits/filtersets.py:38 netbox/circuits/filtersets.py:205 -#: netbox/dcim/filtersets.py:105 netbox/dcim/filtersets.py:158 -#: netbox/dcim/filtersets.py:219 netbox/dcim/filtersets.py:340 -#: netbox/dcim/filtersets.py:471 netbox/dcim/filtersets.py:1028 -#: netbox/dcim/filtersets.py:1375 netbox/dcim/filtersets.py:1910 -#: netbox/dcim/filtersets.py:2153 netbox/dcim/filtersets.py:2211 -#: netbox/extras/filtersets.py:509 netbox/ipam/filtersets.py:348 -#: netbox/ipam/filtersets.py:968 netbox/virtualization/filtersets.py:52 -#: netbox/virtualization/filtersets.py:180 netbox/vpn/filtersets.py:353 +#: netbox/circuits/filtersets.py:44 netbox/circuits/filtersets.py:211 +#: netbox/circuits/filtersets.py:286 netbox/dcim/base_filtersets.py:29 +#: netbox/dcim/filtersets.py:106 netbox/dcim/filtersets.py:159 +#: netbox/dcim/filtersets.py:220 netbox/dcim/filtersets.py:341 +#: netbox/dcim/filtersets.py:472 netbox/dcim/filtersets.py:1029 +#: netbox/dcim/filtersets.py:1376 netbox/dcim/filtersets.py:2033 +#: netbox/dcim/filtersets.py:2276 netbox/dcim/filtersets.py:2334 +#: netbox/extras/filtersets.py:509 netbox/ipam/filtersets.py:935 +#: netbox/virtualization/filtersets.py:146 netbox/vpn/filtersets.py:353 msgid "Region (slug)" msgstr "" -#: netbox/circuits/filtersets.py:44 netbox/circuits/filtersets.py:211 -#: netbox/dcim/filtersets.py:128 netbox/dcim/filtersets.py:225 -#: netbox/dcim/filtersets.py:346 netbox/dcim/filtersets.py:477 -#: netbox/dcim/filtersets.py:1034 netbox/dcim/filtersets.py:1381 -#: netbox/dcim/filtersets.py:1916 netbox/dcim/filtersets.py:2159 -#: netbox/dcim/filtersets.py:2217 netbox/ipam/filtersets.py:354 -#: netbox/ipam/filtersets.py:974 netbox/virtualization/filtersets.py:58 -#: netbox/virtualization/filtersets.py:186 +#: netbox/circuits/filtersets.py:50 netbox/circuits/filtersets.py:217 +#: netbox/circuits/filtersets.py:292 netbox/dcim/base_filtersets.py:35 +#: netbox/dcim/filtersets.py:129 netbox/dcim/filtersets.py:226 +#: netbox/dcim/filtersets.py:347 netbox/dcim/filtersets.py:478 +#: netbox/dcim/filtersets.py:1035 netbox/dcim/filtersets.py:1382 +#: netbox/dcim/filtersets.py:2039 netbox/dcim/filtersets.py:2282 +#: netbox/dcim/filtersets.py:2340 netbox/ipam/filtersets.py:941 +#: netbox/virtualization/filtersets.py:152 msgid "Site group (ID)" msgstr "" -#: netbox/circuits/filtersets.py:51 netbox/circuits/filtersets.py:218 -#: netbox/dcim/filtersets.py:135 netbox/dcim/filtersets.py:232 -#: netbox/dcim/filtersets.py:353 netbox/dcim/filtersets.py:484 -#: netbox/dcim/filtersets.py:1041 netbox/dcim/filtersets.py:1388 -#: netbox/dcim/filtersets.py:1923 netbox/dcim/filtersets.py:2166 -#: netbox/dcim/filtersets.py:2224 netbox/extras/filtersets.py:515 -#: netbox/ipam/filtersets.py:361 netbox/ipam/filtersets.py:981 -#: netbox/virtualization/filtersets.py:65 -#: netbox/virtualization/filtersets.py:193 +#: netbox/circuits/filtersets.py:57 netbox/circuits/filtersets.py:224 +#: netbox/circuits/filtersets.py:299 netbox/dcim/base_filtersets.py:42 +#: netbox/dcim/filtersets.py:136 netbox/dcim/filtersets.py:233 +#: netbox/dcim/filtersets.py:354 netbox/dcim/filtersets.py:485 +#: netbox/dcim/filtersets.py:1042 netbox/dcim/filtersets.py:1389 +#: netbox/dcim/filtersets.py:2046 netbox/dcim/filtersets.py:2289 +#: netbox/dcim/filtersets.py:2347 netbox/extras/filtersets.py:515 +#: netbox/ipam/filtersets.py:948 netbox/virtualization/filtersets.py:159 msgid "Site group (slug)" msgstr "" -#: netbox/circuits/filtersets.py:56 netbox/circuits/forms/bulk_edit.py:188 -#: netbox/circuits/forms/bulk_edit.py:216 -#: netbox/circuits/forms/bulk_import.py:124 -#: netbox/circuits/forms/filtersets.py:51 -#: netbox/circuits/forms/filtersets.py:171 -#: netbox/circuits/forms/filtersets.py:209 -#: netbox/circuits/forms/model_forms.py:138 -#: netbox/circuits/forms/model_forms.py:154 -#: netbox/circuits/tables/circuits.py:113 netbox/dcim/forms/bulk_edit.py:169 -#: netbox/dcim/forms/bulk_edit.py:330 netbox/dcim/forms/bulk_edit.py:683 -#: netbox/dcim/forms/bulk_edit.py:888 netbox/dcim/forms/bulk_import.py:131 -#: netbox/dcim/forms/bulk_import.py:230 netbox/dcim/forms/bulk_import.py:331 -#: netbox/dcim/forms/bulk_import.py:562 netbox/dcim/forms/bulk_import.py:1333 -#: netbox/dcim/forms/bulk_import.py:1361 netbox/dcim/forms/filtersets.py:87 -#: netbox/dcim/forms/filtersets.py:225 netbox/dcim/forms/filtersets.py:342 -#: netbox/dcim/forms/filtersets.py:439 netbox/dcim/forms/filtersets.py:753 -#: netbox/dcim/forms/filtersets.py:997 netbox/dcim/forms/filtersets.py:1021 -#: netbox/dcim/forms/filtersets.py:1111 netbox/dcim/forms/filtersets.py:1149 -#: netbox/dcim/forms/filtersets.py:1584 netbox/dcim/forms/filtersets.py:1608 -#: netbox/dcim/forms/filtersets.py:1632 netbox/dcim/forms/model_forms.py:137 -#: netbox/dcim/forms/model_forms.py:165 netbox/dcim/forms/model_forms.py:238 -#: netbox/dcim/forms/model_forms.py:463 netbox/dcim/forms/model_forms.py:723 -#: netbox/dcim/forms/object_create.py:383 netbox/dcim/tables/devices.py:153 +#: netbox/circuits/filtersets.py:62 netbox/circuits/forms/filtersets.py:59 +#: netbox/circuits/forms/filtersets.py:182 +#: netbox/circuits/forms/filtersets.py:235 +#: netbox/circuits/tables/circuits.py:129 netbox/dcim/forms/bulk_edit.py:172 +#: netbox/dcim/forms/bulk_edit.py:333 netbox/dcim/forms/bulk_edit.py:686 +#: netbox/dcim/forms/bulk_edit.py:891 netbox/dcim/forms/bulk_import.py:133 +#: netbox/dcim/forms/bulk_import.py:232 netbox/dcim/forms/bulk_import.py:333 +#: netbox/dcim/forms/bulk_import.py:567 netbox/dcim/forms/bulk_import.py:1430 +#: netbox/dcim/forms/bulk_import.py:1458 netbox/dcim/forms/filtersets.py:88 +#: netbox/dcim/forms/filtersets.py:226 netbox/dcim/forms/filtersets.py:343 +#: netbox/dcim/forms/filtersets.py:440 netbox/dcim/forms/filtersets.py:754 +#: netbox/dcim/forms/filtersets.py:998 netbox/dcim/forms/filtersets.py:1022 +#: netbox/dcim/forms/filtersets.py:1112 netbox/dcim/forms/filtersets.py:1150 +#: netbox/dcim/forms/filtersets.py:1622 netbox/dcim/forms/filtersets.py:1646 +#: netbox/dcim/forms/filtersets.py:1670 netbox/dcim/forms/model_forms.py:141 +#: netbox/dcim/forms/model_forms.py:169 netbox/dcim/forms/model_forms.py:243 +#: netbox/dcim/forms/model_forms.py:473 netbox/dcim/forms/model_forms.py:734 +#: netbox/dcim/forms/object_create.py:383 netbox/dcim/tables/devices.py:163 #: netbox/dcim/tables/power.py:26 netbox/dcim/tables/power.py:93 -#: netbox/dcim/tables/racks.py:122 netbox/dcim/tables/racks.py:207 +#: netbox/dcim/tables/racks.py:121 netbox/dcim/tables/racks.py:206 #: netbox/dcim/tables/sites.py:134 netbox/extras/filtersets.py:525 -#: netbox/ipam/forms/bulk_edit.py:218 netbox/ipam/forms/bulk_edit.py:285 -#: netbox/ipam/forms/bulk_edit.py:484 netbox/ipam/forms/bulk_import.py:171 -#: netbox/ipam/forms/bulk_import.py:453 netbox/ipam/forms/filtersets.py:153 -#: netbox/ipam/forms/filtersets.py:231 netbox/ipam/forms/filtersets.py:432 -#: netbox/ipam/forms/filtersets.py:489 netbox/ipam/forms/model_forms.py:205 -#: netbox/ipam/forms/model_forms.py:669 netbox/ipam/tables/ip.py:245 -#: netbox/ipam/tables/vlans.py:118 netbox/ipam/tables/vlans.py:221 -#: netbox/templates/circuits/inc/circuit_termination_fields.html:6 -#: netbox/templates/dcim/device.html:22 +#: netbox/ipam/forms/bulk_edit.py:468 netbox/ipam/forms/bulk_import.py:452 +#: netbox/ipam/forms/filtersets.py:155 netbox/ipam/forms/filtersets.py:229 +#: netbox/ipam/forms/filtersets.py:435 netbox/ipam/forms/filtersets.py:530 +#: netbox/ipam/forms/model_forms.py:671 netbox/ipam/tables/vlans.py:87 +#: netbox/ipam/tables/vlans.py:197 netbox/templates/dcim/device.html:22 #: netbox/templates/dcim/inc/cable_termination.html:8 #: netbox/templates/dcim/inc/cable_termination.html:33 #: netbox/templates/dcim/location.html:37 #: netbox/templates/dcim/powerpanel.html:22 netbox/templates/dcim/rack.html:20 #: netbox/templates/dcim/rackreservation.html:28 -#: netbox/templates/dcim/site.html:28 netbox/templates/ipam/prefix.html:56 -#: netbox/templates/ipam/vlan.html:23 netbox/templates/ipam/vlan_edit.html:40 -#: netbox/templates/virtualization/cluster.html:42 +#: netbox/templates/dcim/site.html:28 netbox/templates/ipam/vlan.html:23 +#: netbox/templates/ipam/vlan_edit.html:48 #: netbox/templates/virtualization/virtualmachine.html:95 -#: netbox/virtualization/forms/bulk_edit.py:91 -#: netbox/virtualization/forms/bulk_edit.py:109 -#: netbox/virtualization/forms/bulk_edit.py:124 -#: netbox/virtualization/forms/bulk_import.py:59 -#: netbox/virtualization/forms/bulk_import.py:85 -#: netbox/virtualization/forms/filtersets.py:79 -#: netbox/virtualization/forms/filtersets.py:148 -#: netbox/virtualization/forms/model_forms.py:71 -#: netbox/virtualization/forms/model_forms.py:104 -#: netbox/virtualization/forms/model_forms.py:171 -#: netbox/virtualization/tables/clusters.py:77 -#: netbox/virtualization/tables/virtualmachines.py:63 -#: netbox/vpn/forms/filtersets.py:266 netbox/wireless/forms/model_forms.py:76 -#: netbox/wireless/forms/model_forms.py:118 +#: netbox/virtualization/forms/bulk_edit.py:106 +#: netbox/virtualization/forms/bulk_import.py:60 +#: netbox/virtualization/forms/bulk_import.py:91 +#: netbox/virtualization/forms/filtersets.py:74 +#: netbox/virtualization/forms/filtersets.py:153 +#: netbox/virtualization/forms/model_forms.py:103 +#: netbox/virtualization/forms/model_forms.py:170 +#: netbox/virtualization/tables/virtualmachines.py:33 +#: netbox/vpn/forms/filtersets.py:266 netbox/wireless/forms/filtersets.py:88 +#: netbox/wireless/forms/model_forms.py:79 +#: netbox/wireless/forms/model_forms.py:121 msgid "Site" msgstr "" -#: netbox/circuits/filtersets.py:62 netbox/circuits/filtersets.py:229 -#: netbox/circuits/filtersets.py:274 netbox/dcim/filtersets.py:242 -#: netbox/dcim/filtersets.py:363 netbox/dcim/filtersets.py:458 -#: netbox/extras/filtersets.py:531 netbox/ipam/filtersets.py:240 -#: netbox/ipam/filtersets.py:371 netbox/ipam/filtersets.py:991 -#: netbox/virtualization/filtersets.py:75 -#: netbox/virtualization/filtersets.py:203 netbox/vpn/filtersets.py:363 +#: netbox/circuits/filtersets.py:68 netbox/circuits/filtersets.py:235 +#: netbox/circuits/filtersets.py:310 netbox/dcim/base_filtersets.py:53 +#: netbox/dcim/filtersets.py:243 netbox/dcim/filtersets.py:364 +#: netbox/dcim/filtersets.py:459 netbox/extras/filtersets.py:531 +#: netbox/ipam/filtersets.py:243 netbox/ipam/filtersets.py:958 +#: netbox/virtualization/filtersets.py:169 netbox/vpn/filtersets.py:363 msgid "Site (slug)" msgstr "" -#: netbox/circuits/filtersets.py:67 +#: netbox/circuits/filtersets.py:73 msgid "ASN (ID)" msgstr "" -#: netbox/circuits/filtersets.py:73 netbox/circuits/forms/filtersets.py:31 -#: netbox/ipam/forms/model_forms.py:159 netbox/ipam/models/asns.py:108 -#: netbox/ipam/models/asns.py:125 netbox/ipam/tables/asn.py:41 +#: netbox/circuits/filtersets.py:79 netbox/circuits/forms/filtersets.py:39 +#: netbox/ipam/forms/model_forms.py:165 netbox/ipam/models/asns.py:105 +#: netbox/ipam/models/asns.py:122 netbox/ipam/tables/asn.py:41 #: netbox/templates/ipam/asn.html:20 msgid "ASN" msgstr "" -#: netbox/circuits/filtersets.py:95 netbox/circuits/filtersets.py:122 -#: netbox/circuits/filtersets.py:156 netbox/circuits/filtersets.py:283 -#: netbox/circuits/filtersets.py:325 netbox/ipam/filtersets.py:245 +#: netbox/circuits/filtersets.py:101 netbox/circuits/filtersets.py:128 +#: netbox/circuits/filtersets.py:162 netbox/circuits/filtersets.py:333 +#: netbox/circuits/filtersets.py:401 netbox/circuits/filtersets.py:477 +#: netbox/circuits/filtersets.py:545 netbox/ipam/filtersets.py:248 msgid "Provider (ID)" msgstr "" -#: netbox/circuits/filtersets.py:101 netbox/circuits/filtersets.py:128 -#: netbox/circuits/filtersets.py:162 netbox/circuits/filtersets.py:289 -#: netbox/circuits/filtersets.py:331 netbox/ipam/filtersets.py:251 +#: netbox/circuits/filtersets.py:107 netbox/circuits/filtersets.py:134 +#: netbox/circuits/filtersets.py:168 netbox/circuits/filtersets.py:339 +#: netbox/circuits/filtersets.py:483 netbox/circuits/filtersets.py:551 +#: netbox/ipam/filtersets.py:254 msgid "Provider (slug)" msgstr "" -#: netbox/circuits/filtersets.py:167 +#: netbox/circuits/filtersets.py:173 netbox/circuits/filtersets.py:488 +#: netbox/circuits/filtersets.py:556 msgid "Provider account (ID)" msgstr "" -#: netbox/circuits/filtersets.py:173 +#: netbox/circuits/filtersets.py:179 netbox/circuits/filtersets.py:494 +#: netbox/circuits/filtersets.py:562 msgid "Provider account (account)" msgstr "" -#: netbox/circuits/filtersets.py:178 +#: netbox/circuits/filtersets.py:184 netbox/circuits/filtersets.py:498 +#: netbox/circuits/filtersets.py:567 msgid "Provider network (ID)" msgstr "" -#: netbox/circuits/filtersets.py:182 +#: netbox/circuits/filtersets.py:188 msgid "Circuit type (ID)" msgstr "" -#: netbox/circuits/filtersets.py:188 +#: netbox/circuits/filtersets.py:194 msgid "Circuit type (slug)" msgstr "" -#: netbox/circuits/filtersets.py:223 netbox/circuits/filtersets.py:268 -#: netbox/dcim/filtersets.py:236 netbox/dcim/filtersets.py:357 -#: netbox/dcim/filtersets.py:452 netbox/dcim/filtersets.py:1045 -#: netbox/dcim/filtersets.py:1393 netbox/dcim/filtersets.py:1928 -#: netbox/dcim/filtersets.py:2170 netbox/dcim/filtersets.py:2229 -#: netbox/ipam/filtersets.py:234 netbox/ipam/filtersets.py:365 -#: netbox/ipam/filtersets.py:985 netbox/virtualization/filtersets.py:69 -#: netbox/virtualization/filtersets.py:197 netbox/vpn/filtersets.py:368 +#: netbox/circuits/filtersets.py:229 netbox/circuits/filtersets.py:304 +#: netbox/dcim/base_filtersets.py:47 netbox/dcim/filtersets.py:237 +#: netbox/dcim/filtersets.py:358 netbox/dcim/filtersets.py:453 +#: netbox/dcim/filtersets.py:1046 netbox/dcim/filtersets.py:1394 +#: netbox/dcim/filtersets.py:2051 netbox/dcim/filtersets.py:2293 +#: netbox/dcim/filtersets.py:2352 netbox/ipam/filtersets.py:237 +#: netbox/ipam/filtersets.py:952 netbox/virtualization/filtersets.py:163 +#: netbox/vpn/filtersets.py:368 msgid "Site (ID)" msgstr "" -#: netbox/circuits/filtersets.py:233 netbox/circuits/filtersets.py:237 +#: netbox/circuits/filtersets.py:239 netbox/circuits/filtersets.py:243 msgid "Termination A (ID)" msgstr "" -#: netbox/circuits/filtersets.py:260 netbox/circuits/filtersets.py:320 -#: netbox/core/filtersets.py:77 netbox/core/filtersets.py:136 -#: netbox/core/filtersets.py:173 netbox/dcim/filtersets.py:751 -#: netbox/dcim/filtersets.py:1362 netbox/dcim/filtersets.py:2277 -#: netbox/extras/filtersets.py:41 netbox/extras/filtersets.py:63 -#: netbox/extras/filtersets.py:92 netbox/extras/filtersets.py:132 -#: netbox/extras/filtersets.py:181 netbox/extras/filtersets.py:209 -#: netbox/extras/filtersets.py:239 netbox/extras/filtersets.py:276 -#: netbox/extras/filtersets.py:348 netbox/extras/filtersets.py:391 -#: netbox/extras/filtersets.py:438 netbox/extras/filtersets.py:498 -#: netbox/extras/filtersets.py:657 netbox/extras/filtersets.py:703 -#: netbox/ipam/forms/model_forms.py:482 netbox/netbox/filtersets.py:282 -#: netbox/netbox/forms/__init__.py:22 netbox/netbox/forms/base.py:167 +#: netbox/circuits/filtersets.py:268 netbox/circuits/filtersets.py:370 +#: netbox/circuits/filtersets.py:532 netbox/core/filtersets.py:77 +#: netbox/core/filtersets.py:136 netbox/core/filtersets.py:173 +#: netbox/dcim/filtersets.py:752 netbox/dcim/filtersets.py:1363 +#: netbox/dcim/filtersets.py:2400 netbox/extras/filtersets.py:41 +#: netbox/extras/filtersets.py:63 netbox/extras/filtersets.py:92 +#: netbox/extras/filtersets.py:132 netbox/extras/filtersets.py:181 +#: netbox/extras/filtersets.py:209 netbox/extras/filtersets.py:239 +#: netbox/extras/filtersets.py:276 netbox/extras/filtersets.py:348 +#: netbox/extras/filtersets.py:391 netbox/extras/filtersets.py:438 +#: netbox/extras/filtersets.py:498 netbox/extras/filtersets.py:657 +#: netbox/extras/filtersets.py:703 netbox/ipam/forms/model_forms.py:484 +#: netbox/netbox/filtersets.py:286 netbox/netbox/forms/__init__.py:22 +#: netbox/netbox/forms/base.py:167 #: netbox/templates/htmx/object_selector.html:28 #: netbox/templates/inc/filter_list.html:46 #: netbox/templates/ipam/ipaddress_assign.html:29 @@ -339,95 +348,155 @@ msgstr "" msgid "Search" msgstr "" -#: netbox/circuits/filtersets.py:264 netbox/circuits/forms/bulk_edit.py:172 -#: netbox/circuits/forms/bulk_edit.py:246 -#: netbox/circuits/forms/bulk_import.py:115 -#: netbox/circuits/forms/filtersets.py:198 -#: netbox/circuits/forms/filtersets.py:214 -#: netbox/circuits/forms/filtersets.py:260 -#: netbox/circuits/forms/model_forms.py:111 -#: netbox/circuits/forms/model_forms.py:133 -#: netbox/circuits/forms/model_forms.py:199 -#: netbox/circuits/tables/circuits.py:104 -#: netbox/circuits/tables/circuits.py:164 netbox/dcim/forms/connections.py:73 +#: netbox/circuits/filtersets.py:272 netbox/circuits/forms/bulk_edit.py:195 +#: netbox/circuits/forms/bulk_edit.py:284 +#: netbox/circuits/forms/bulk_import.py:128 +#: netbox/circuits/forms/filtersets.py:218 +#: netbox/circuits/forms/filtersets.py:245 +#: netbox/circuits/forms/filtersets.py:291 +#: netbox/circuits/forms/model_forms.py:139 +#: netbox/circuits/forms/model_forms.py:162 +#: netbox/circuits/forms/model_forms.py:262 +#: netbox/circuits/tables/circuits.py:108 +#: netbox/circuits/tables/circuits.py:203 netbox/dcim/forms/connections.py:73 #: netbox/templates/circuits/circuit.html:15 -#: netbox/templates/circuits/circuitgroupassignment.html:26 +#: netbox/templates/circuits/circuitgroupassignment.html:30 #: netbox/templates/circuits/circuittermination.html:19 #: netbox/templates/dcim/inc/cable_termination.html:55 #: netbox/templates/dcim/trace/circuit.html:4 msgid "Circuit" msgstr "" -#: netbox/circuits/filtersets.py:278 +#: netbox/circuits/filtersets.py:316 netbox/dcim/base_filtersets.py:59 +#: netbox/dcim/filtersets.py:259 netbox/dcim/filtersets.py:370 +#: netbox/dcim/filtersets.py:491 netbox/dcim/filtersets.py:1058 +#: netbox/dcim/filtersets.py:1405 netbox/dcim/filtersets.py:2305 +msgid "Location (ID)" +msgstr "" + +#: netbox/circuits/filtersets.py:323 netbox/dcim/base_filtersets.py:66 +#: netbox/dcim/filtersets.py:266 netbox/dcim/filtersets.py:377 +#: netbox/dcim/filtersets.py:498 netbox/dcim/filtersets.py:1411 +#: netbox/extras/filtersets.py:542 +msgid "Location (slug)" +msgstr "" + +#: netbox/circuits/filtersets.py:328 msgid "ProviderNetwork (ID)" msgstr "" -#: netbox/circuits/filtersets.py:335 -msgid "Circuit (ID)" -msgstr "" - -#: netbox/circuits/filtersets.py:341 +#: netbox/circuits/filtersets.py:376 msgid "Circuit (CID)" msgstr "" -#: netbox/circuits/filtersets.py:345 +#: netbox/circuits/filtersets.py:381 +msgid "Circuit (ID)" +msgstr "" + +#: netbox/circuits/filtersets.py:386 +msgid "Virtual circuit (CID)" +msgstr "" + +#: netbox/circuits/filtersets.py:391 netbox/dcim/filtersets.py:1848 +msgid "Virtual circuit (ID)" +msgstr "" + +#: netbox/circuits/filtersets.py:396 +msgid "Provider (name)" +msgstr "" + +#: netbox/circuits/filtersets.py:405 msgid "Circuit group (ID)" msgstr "" -#: netbox/circuits/filtersets.py:351 +#: netbox/circuits/filtersets.py:411 msgid "Circuit group (slug)" msgstr "" -#: netbox/circuits/forms/bulk_edit.py:30 netbox/circuits/forms/filtersets.py:56 -#: netbox/circuits/forms/model_forms.py:29 -#: netbox/circuits/tables/providers.py:33 netbox/dcim/forms/bulk_edit.py:129 -#: netbox/dcim/forms/filtersets.py:195 netbox/dcim/forms/model_forms.py:123 -#: netbox/dcim/tables/sites.py:94 netbox/ipam/models/asns.py:126 -#: netbox/ipam/tables/asn.py:27 netbox/ipam/views.py:213 -#: netbox/netbox/navigation/menu.py:172 netbox/netbox/navigation/menu.py:175 +#: netbox/circuits/filtersets.py:502 +msgid "Virtual circuit type (ID)" +msgstr "" + +#: netbox/circuits/filtersets.py:508 +msgid "Virtual circuit type (slug)" +msgstr "" + +#: netbox/circuits/filtersets.py:536 netbox/circuits/forms/bulk_edit.py:355 +#: netbox/circuits/forms/bulk_import.py:249 +#: netbox/circuits/forms/filtersets.py:367 +#: netbox/circuits/forms/filtersets.py:373 +#: netbox/circuits/forms/model_forms.py:343 +#: netbox/circuits/forms/model_forms.py:358 +#: netbox/circuits/tables/virtual_circuits.py:88 +#: netbox/templates/circuits/virtualcircuit.html:20 +#: netbox/templates/circuits/virtualcircuittermination.html:38 +msgid "Virtual circuit" +msgstr "" + +#: netbox/circuits/filtersets.py:572 netbox/dcim/filtersets.py:1268 +#: netbox/dcim/filtersets.py:1633 netbox/ipam/filtersets.py:601 +#: netbox/vpn/filtersets.py:102 netbox/vpn/filtersets.py:401 +msgid "Interface (ID)" +msgstr "" + +#: netbox/circuits/forms/bulk_edit.py:42 netbox/circuits/forms/filtersets.py:64 +#: netbox/circuits/forms/model_forms.py:42 +#: netbox/circuits/tables/providers.py:33 netbox/dcim/forms/bulk_edit.py:132 +#: netbox/dcim/forms/filtersets.py:196 netbox/dcim/forms/model_forms.py:127 +#: netbox/dcim/tables/sites.py:94 netbox/ipam/models/asns.py:123 +#: netbox/ipam/tables/asn.py:27 netbox/ipam/views.py:230 +#: netbox/netbox/navigation/menu.py:178 netbox/netbox/navigation/menu.py:181 #: netbox/templates/circuits/provider.html:23 msgid "ASNs" msgstr "" -#: netbox/circuits/forms/bulk_edit.py:34 netbox/circuits/forms/bulk_edit.py:56 -#: netbox/circuits/forms/bulk_edit.py:83 netbox/circuits/forms/bulk_edit.py:104 -#: netbox/circuits/forms/bulk_edit.py:164 -#: netbox/circuits/forms/bulk_edit.py:183 -#: netbox/circuits/forms/bulk_edit.py:228 netbox/core/forms/bulk_edit.py:28 -#: netbox/dcim/forms/bulk_create.py:35 netbox/dcim/forms/bulk_edit.py:74 -#: netbox/dcim/forms/bulk_edit.py:93 netbox/dcim/forms/bulk_edit.py:152 -#: netbox/dcim/forms/bulk_edit.py:193 netbox/dcim/forms/bulk_edit.py:211 -#: netbox/dcim/forms/bulk_edit.py:289 netbox/dcim/forms/bulk_edit.py:438 -#: netbox/dcim/forms/bulk_edit.py:472 netbox/dcim/forms/bulk_edit.py:487 -#: netbox/dcim/forms/bulk_edit.py:546 netbox/dcim/forms/bulk_edit.py:590 -#: netbox/dcim/forms/bulk_edit.py:624 netbox/dcim/forms/bulk_edit.py:648 -#: netbox/dcim/forms/bulk_edit.py:721 netbox/dcim/forms/bulk_edit.py:782 -#: netbox/dcim/forms/bulk_edit.py:834 netbox/dcim/forms/bulk_edit.py:857 -#: netbox/dcim/forms/bulk_edit.py:905 netbox/dcim/forms/bulk_edit.py:975 -#: netbox/dcim/forms/bulk_edit.py:1028 netbox/dcim/forms/bulk_edit.py:1063 -#: netbox/dcim/forms/bulk_edit.py:1103 netbox/dcim/forms/bulk_edit.py:1147 -#: netbox/dcim/forms/bulk_edit.py:1192 netbox/dcim/forms/bulk_edit.py:1219 -#: netbox/dcim/forms/bulk_edit.py:1237 netbox/dcim/forms/bulk_edit.py:1255 -#: netbox/dcim/forms/bulk_edit.py:1273 netbox/dcim/forms/bulk_edit.py:1725 -#: netbox/extras/forms/bulk_edit.py:39 netbox/extras/forms/bulk_edit.py:149 -#: netbox/extras/forms/bulk_edit.py:178 netbox/extras/forms/bulk_edit.py:208 -#: netbox/extras/forms/bulk_edit.py:256 netbox/extras/forms/bulk_edit.py:274 -#: netbox/extras/forms/bulk_edit.py:298 netbox/extras/forms/bulk_edit.py:312 -#: netbox/extras/forms/bulk_edit.py:339 netbox/extras/tables/tables.py:79 -#: netbox/ipam/forms/bulk_edit.py:53 netbox/ipam/forms/bulk_edit.py:73 -#: netbox/ipam/forms/bulk_edit.py:93 netbox/ipam/forms/bulk_edit.py:117 -#: netbox/ipam/forms/bulk_edit.py:146 netbox/ipam/forms/bulk_edit.py:175 -#: netbox/ipam/forms/bulk_edit.py:194 netbox/ipam/forms/bulk_edit.py:276 -#: netbox/ipam/forms/bulk_edit.py:321 netbox/ipam/forms/bulk_edit.py:369 -#: netbox/ipam/forms/bulk_edit.py:412 netbox/ipam/forms/bulk_edit.py:428 -#: netbox/ipam/forms/bulk_edit.py:516 netbox/ipam/forms/bulk_edit.py:547 +#: netbox/circuits/forms/bulk_edit.py:46 netbox/circuits/forms/bulk_edit.py:68 +#: netbox/circuits/forms/bulk_edit.py:95 netbox/circuits/forms/bulk_edit.py:116 +#: netbox/circuits/forms/bulk_edit.py:187 +#: netbox/circuits/forms/bulk_edit.py:207 +#: netbox/circuits/forms/bulk_edit.py:266 +#: netbox/circuits/forms/bulk_edit.py:307 +#: netbox/circuits/forms/bulk_edit.py:347 +#: netbox/circuits/forms/bulk_edit.py:371 netbox/core/forms/bulk_edit.py:28 +#: netbox/dcim/forms/bulk_create.py:35 netbox/dcim/forms/bulk_edit.py:77 +#: netbox/dcim/forms/bulk_edit.py:96 netbox/dcim/forms/bulk_edit.py:155 +#: netbox/dcim/forms/bulk_edit.py:196 netbox/dcim/forms/bulk_edit.py:214 +#: netbox/dcim/forms/bulk_edit.py:292 netbox/dcim/forms/bulk_edit.py:441 +#: netbox/dcim/forms/bulk_edit.py:475 netbox/dcim/forms/bulk_edit.py:490 +#: netbox/dcim/forms/bulk_edit.py:549 netbox/dcim/forms/bulk_edit.py:593 +#: netbox/dcim/forms/bulk_edit.py:627 netbox/dcim/forms/bulk_edit.py:651 +#: netbox/dcim/forms/bulk_edit.py:724 netbox/dcim/forms/bulk_edit.py:785 +#: netbox/dcim/forms/bulk_edit.py:837 netbox/dcim/forms/bulk_edit.py:860 +#: netbox/dcim/forms/bulk_edit.py:908 netbox/dcim/forms/bulk_edit.py:978 +#: netbox/dcim/forms/bulk_edit.py:1031 netbox/dcim/forms/bulk_edit.py:1066 +#: netbox/dcim/forms/bulk_edit.py:1106 netbox/dcim/forms/bulk_edit.py:1150 +#: netbox/dcim/forms/bulk_edit.py:1195 netbox/dcim/forms/bulk_edit.py:1222 +#: netbox/dcim/forms/bulk_edit.py:1240 netbox/dcim/forms/bulk_edit.py:1258 +#: netbox/dcim/forms/bulk_edit.py:1276 netbox/dcim/forms/bulk_edit.py:1744 +#: netbox/dcim/forms/bulk_edit.py:1785 netbox/extras/forms/bulk_edit.py:39 +#: netbox/extras/forms/bulk_edit.py:149 netbox/extras/forms/bulk_edit.py:178 +#: netbox/extras/forms/bulk_edit.py:208 netbox/extras/forms/bulk_edit.py:256 +#: netbox/extras/forms/bulk_edit.py:274 netbox/extras/forms/bulk_edit.py:298 +#: netbox/extras/forms/bulk_edit.py:312 netbox/extras/forms/bulk_edit.py:339 +#: netbox/extras/tables/tables.py:79 netbox/ipam/forms/bulk_edit.py:56 +#: netbox/ipam/forms/bulk_edit.py:76 netbox/ipam/forms/bulk_edit.py:96 +#: netbox/ipam/forms/bulk_edit.py:120 netbox/ipam/forms/bulk_edit.py:149 +#: netbox/ipam/forms/bulk_edit.py:178 netbox/ipam/forms/bulk_edit.py:197 +#: netbox/ipam/forms/bulk_edit.py:260 netbox/ipam/forms/bulk_edit.py:305 +#: netbox/ipam/forms/bulk_edit.py:353 netbox/ipam/forms/bulk_edit.py:396 +#: netbox/ipam/forms/bulk_edit.py:412 netbox/ipam/forms/bulk_edit.py:500 +#: netbox/ipam/forms/bulk_edit.py:532 netbox/ipam/forms/bulk_edit.py:575 +#: netbox/ipam/tables/vlans.py:240 netbox/ipam/tables/vlans.py:267 #: netbox/templates/account/token.html:35 -#: netbox/templates/circuits/circuit.html:59 +#: netbox/templates/circuits/circuit.html:69 #: netbox/templates/circuits/circuitgroup.html:32 #: netbox/templates/circuits/circuittype.html:26 -#: netbox/templates/circuits/inc/circuit_termination_fields.html:88 +#: netbox/templates/circuits/inc/circuit_termination_fields.html:83 #: netbox/templates/circuits/provider.html:33 #: netbox/templates/circuits/providernetwork.html:32 +#: netbox/templates/circuits/virtualcircuit.html:56 +#: netbox/templates/circuits/virtualcircuittermination.html:68 +#: netbox/templates/circuits/virtualcircuittype.html:26 #: netbox/templates/core/datasource.html:54 #: netbox/templates/core/plugin.html:80 netbox/templates/dcim/cable.html:36 #: netbox/templates/dcim/consoleport.html:44 @@ -437,9 +506,10 @@ msgstr "" #: netbox/templates/dcim/devicetype.html:33 #: netbox/templates/dcim/frontport.html:58 #: netbox/templates/dcim/interface.html:69 -#: netbox/templates/dcim/inventoryitem.html:60 +#: netbox/templates/dcim/inventoryitem.html:64 #: netbox/templates/dcim/inventoryitemrole.html:22 #: netbox/templates/dcim/location.html:33 +#: netbox/templates/dcim/macaddress.html:21 #: netbox/templates/dcim/manufacturer.html:40 #: netbox/templates/dcim/module.html:73 netbox/templates/dcim/modulebay.html:42 #: netbox/templates/dcim/moduletype.html:37 @@ -469,12 +539,14 @@ msgstr "" #: netbox/templates/ipam/asnrange.html:38 #: netbox/templates/ipam/fhrpgroup.html:34 #: netbox/templates/ipam/ipaddress.html:55 -#: netbox/templates/ipam/iprange.html:67 netbox/templates/ipam/prefix.html:81 +#: netbox/templates/ipam/iprange.html:67 netbox/templates/ipam/prefix.html:77 #: netbox/templates/ipam/rir.html:26 netbox/templates/ipam/role.html:26 #: netbox/templates/ipam/routetarget.html:21 #: netbox/templates/ipam/service.html:50 #: netbox/templates/ipam/servicetemplate.html:27 #: netbox/templates/ipam/vlan.html:62 netbox/templates/ipam/vlangroup.html:34 +#: netbox/templates/ipam/vlantranslationpolicy.html:18 +#: netbox/templates/ipam/vlantranslationrule.html:26 #: netbox/templates/ipam/vrf.html:33 netbox/templates/tenancy/contact.html:67 #: netbox/templates/tenancy/contactgroup.html:25 #: netbox/templates/tenancy/contactrole.html:22 @@ -488,7 +560,7 @@ msgstr "" #: netbox/templates/virtualization/clustertype.html:26 #: netbox/templates/virtualization/virtualdisk.html:39 #: netbox/templates/virtualization/virtualmachine.html:31 -#: netbox/templates/virtualization/vminterface.html:51 +#: netbox/templates/virtualization/vminterface.html:47 #: netbox/templates/vpn/ikepolicy.html:17 #: netbox/templates/vpn/ikeproposal.html:17 #: netbox/templates/vpn/ipsecpolicy.html:17 @@ -498,113 +570,136 @@ msgstr "" #: netbox/templates/vpn/ipsecproposal.html:17 #: netbox/templates/vpn/l2vpn.html:26 netbox/templates/vpn/tunnel.html:33 #: netbox/templates/vpn/tunnelgroup.html:30 -#: netbox/templates/wireless/wirelesslan.html:26 +#: netbox/templates/wireless/wirelesslan.html:34 #: netbox/templates/wireless/wirelesslangroup.html:33 #: netbox/templates/wireless/wirelesslink.html:34 #: netbox/tenancy/forms/bulk_edit.py:32 netbox/tenancy/forms/bulk_edit.py:80 #: netbox/tenancy/forms/bulk_edit.py:122 netbox/users/forms/bulk_edit.py:64 #: netbox/users/forms/bulk_edit.py:82 netbox/users/forms/bulk_edit.py:112 -#: netbox/virtualization/forms/bulk_edit.py:32 -#: netbox/virtualization/forms/bulk_edit.py:46 -#: netbox/virtualization/forms/bulk_edit.py:100 -#: netbox/virtualization/forms/bulk_edit.py:177 -#: netbox/virtualization/forms/bulk_edit.py:228 -#: netbox/virtualization/forms/bulk_edit.py:337 +#: netbox/virtualization/forms/bulk_edit.py:33 +#: netbox/virtualization/forms/bulk_edit.py:47 +#: netbox/virtualization/forms/bulk_edit.py:82 +#: netbox/virtualization/forms/bulk_edit.py:159 +#: netbox/virtualization/forms/bulk_edit.py:210 +#: netbox/virtualization/forms/bulk_edit.py:319 #: netbox/vpn/forms/bulk_edit.py:28 netbox/vpn/forms/bulk_edit.py:64 #: netbox/vpn/forms/bulk_edit.py:121 netbox/vpn/forms/bulk_edit.py:155 #: netbox/vpn/forms/bulk_edit.py:190 netbox/vpn/forms/bulk_edit.py:215 #: netbox/vpn/forms/bulk_edit.py:247 netbox/vpn/forms/bulk_edit.py:274 -#: netbox/wireless/forms/bulk_edit.py:29 netbox/wireless/forms/bulk_edit.py:82 -#: netbox/wireless/forms/bulk_edit.py:140 +#: netbox/wireless/forms/bulk_edit.py:31 netbox/wireless/forms/bulk_edit.py:84 +#: netbox/wireless/forms/bulk_edit.py:143 msgid "Description" msgstr "" -#: netbox/circuits/forms/bulk_edit.py:51 netbox/circuits/forms/bulk_edit.py:73 -#: netbox/circuits/forms/bulk_edit.py:123 -#: netbox/circuits/forms/bulk_import.py:36 -#: netbox/circuits/forms/bulk_import.py:51 -#: netbox/circuits/forms/bulk_import.py:74 -#: netbox/circuits/forms/filtersets.py:70 -#: netbox/circuits/forms/filtersets.py:88 -#: netbox/circuits/forms/filtersets.py:116 -#: netbox/circuits/forms/filtersets.py:131 -#: netbox/circuits/forms/filtersets.py:199 -#: netbox/circuits/forms/filtersets.py:232 -#: netbox/circuits/forms/filtersets.py:255 -#: netbox/circuits/forms/model_forms.py:47 -#: netbox/circuits/forms/model_forms.py:61 -#: netbox/circuits/forms/model_forms.py:93 -#: netbox/circuits/tables/circuits.py:58 netbox/circuits/tables/circuits.py:108 -#: netbox/circuits/tables/circuits.py:160 +#: netbox/circuits/forms/bulk_edit.py:63 netbox/circuits/forms/bulk_edit.py:85 +#: netbox/circuits/forms/bulk_edit.py:135 +#: netbox/circuits/forms/bulk_import.py:43 +#: netbox/circuits/forms/bulk_import.py:58 +#: netbox/circuits/forms/bulk_import.py:81 +#: netbox/circuits/forms/filtersets.py:78 +#: netbox/circuits/forms/filtersets.py:96 +#: netbox/circuits/forms/filtersets.py:124 +#: netbox/circuits/forms/filtersets.py:142 +#: netbox/circuits/forms/filtersets.py:219 +#: netbox/circuits/forms/filtersets.py:263 +#: netbox/circuits/forms/filtersets.py:286 +#: netbox/circuits/forms/filtersets.py:324 +#: netbox/circuits/forms/filtersets.py:332 +#: netbox/circuits/forms/filtersets.py:368 +#: netbox/circuits/forms/filtersets.py:391 +#: netbox/circuits/forms/model_forms.py:60 +#: netbox/circuits/forms/model_forms.py:76 +#: netbox/circuits/forms/model_forms.py:110 +#: netbox/circuits/tables/circuits.py:57 netbox/circuits/tables/circuits.py:112 +#: netbox/circuits/tables/circuits.py:196 #: netbox/circuits/tables/providers.py:72 #: netbox/circuits/tables/providers.py:103 +#: netbox/circuits/tables/virtual_circuits.py:46 +#: netbox/circuits/tables/virtual_circuits.py:93 #: netbox/templates/circuits/circuit.html:18 +#: netbox/templates/circuits/circuitgroupassignment.html:26 #: netbox/templates/circuits/circuittermination.html:25 #: netbox/templates/circuits/provider.html:20 #: netbox/templates/circuits/provideraccount.html:20 #: netbox/templates/circuits/providernetwork.html:20 +#: netbox/templates/circuits/virtualcircuit.html:23 +#: netbox/templates/circuits/virtualcircuittermination.html:26 #: netbox/templates/dcim/inc/cable_termination.html:51 +#: netbox/templates/dcim/interface.html:166 msgid "Provider" msgstr "" -#: netbox/circuits/forms/bulk_edit.py:80 netbox/circuits/forms/filtersets.py:91 +#: netbox/circuits/forms/bulk_edit.py:92 netbox/circuits/forms/filtersets.py:99 #: netbox/templates/circuits/providernetwork.html:28 msgid "Service ID" msgstr "" -#: netbox/circuits/forms/bulk_edit.py:100 -#: netbox/circuits/forms/filtersets.py:107 netbox/dcim/forms/bulk_edit.py:207 -#: netbox/dcim/forms/bulk_edit.py:610 netbox/dcim/forms/bulk_edit.py:819 -#: netbox/dcim/forms/bulk_edit.py:1188 netbox/dcim/forms/bulk_edit.py:1215 -#: netbox/dcim/forms/bulk_edit.py:1721 netbox/dcim/forms/filtersets.py:1064 -#: netbox/dcim/forms/filtersets.py:1455 netbox/dcim/forms/filtersets.py:1479 -#: netbox/dcim/tables/devices.py:704 netbox/dcim/tables/devices.py:761 -#: netbox/dcim/tables/devices.py:1003 netbox/dcim/tables/devicetypes.py:249 -#: netbox/dcim/tables/devicetypes.py:264 netbox/dcim/tables/racks.py:33 -#: netbox/extras/forms/bulk_edit.py:270 netbox/extras/tables/tables.py:443 +#: netbox/circuits/forms/bulk_edit.py:112 +#: netbox/circuits/forms/bulk_edit.py:303 +#: netbox/circuits/forms/filtersets.py:115 +#: netbox/circuits/forms/filtersets.py:315 netbox/dcim/forms/bulk_edit.py:210 +#: netbox/dcim/forms/bulk_edit.py:613 netbox/dcim/forms/bulk_edit.py:822 +#: netbox/dcim/forms/bulk_edit.py:1191 netbox/dcim/forms/bulk_edit.py:1218 +#: netbox/dcim/forms/bulk_edit.py:1740 netbox/dcim/forms/filtersets.py:1065 +#: netbox/dcim/forms/filtersets.py:1323 netbox/dcim/forms/filtersets.py:1460 +#: netbox/dcim/forms/filtersets.py:1484 netbox/dcim/tables/devices.py:737 +#: netbox/dcim/tables/devices.py:793 netbox/dcim/tables/devices.py:1034 +#: netbox/dcim/tables/devicetypes.py:251 netbox/dcim/tables/devicetypes.py:266 +#: netbox/dcim/tables/racks.py:33 netbox/extras/forms/bulk_edit.py:270 +#: netbox/extras/tables/tables.py:443 #: netbox/templates/circuits/circuittype.html:30 +#: netbox/templates/circuits/virtualcircuittype.html:30 #: netbox/templates/dcim/cable.html:40 netbox/templates/dcim/devicerole.html:34 #: netbox/templates/dcim/frontport.html:40 #: netbox/templates/dcim/inventoryitemrole.html:26 +#: netbox/templates/dcim/poweroutlet.html:44 #: netbox/templates/dcim/rackrole.html:30 #: netbox/templates/dcim/rearport.html:40 netbox/templates/extras/tag.html:26 msgid "Color" msgstr "" -#: netbox/circuits/forms/bulk_edit.py:118 -#: netbox/circuits/forms/bulk_import.py:87 -#: netbox/circuits/forms/filtersets.py:126 netbox/core/forms/bulk_edit.py:18 -#: netbox/core/forms/filtersets.py:33 netbox/core/tables/change_logging.py:32 -#: netbox/core/tables/data.py:20 netbox/core/tables/jobs.py:18 -#: netbox/dcim/forms/bulk_edit.py:797 netbox/dcim/forms/bulk_edit.py:936 -#: netbox/dcim/forms/bulk_edit.py:1004 netbox/dcim/forms/bulk_edit.py:1023 -#: netbox/dcim/forms/bulk_edit.py:1046 netbox/dcim/forms/bulk_edit.py:1088 -#: netbox/dcim/forms/bulk_edit.py:1132 netbox/dcim/forms/bulk_edit.py:1183 -#: netbox/dcim/forms/bulk_edit.py:1210 netbox/dcim/forms/bulk_import.py:188 -#: netbox/dcim/forms/bulk_import.py:267 netbox/dcim/forms/bulk_import.py:730 -#: netbox/dcim/forms/bulk_import.py:756 netbox/dcim/forms/bulk_import.py:782 -#: netbox/dcim/forms/bulk_import.py:802 netbox/dcim/forms/bulk_import.py:885 -#: netbox/dcim/forms/bulk_import.py:979 netbox/dcim/forms/bulk_import.py:1021 -#: netbox/dcim/forms/bulk_import.py:1235 netbox/dcim/forms/bulk_import.py:1398 -#: netbox/dcim/forms/filtersets.py:955 netbox/dcim/forms/filtersets.py:1054 -#: netbox/dcim/forms/filtersets.py:1175 netbox/dcim/forms/filtersets.py:1247 -#: netbox/dcim/forms/filtersets.py:1272 netbox/dcim/forms/filtersets.py:1296 -#: netbox/dcim/forms/filtersets.py:1316 netbox/dcim/forms/filtersets.py:1353 -#: netbox/dcim/forms/filtersets.py:1450 netbox/dcim/forms/filtersets.py:1474 -#: netbox/dcim/forms/model_forms.py:703 netbox/dcim/forms/model_forms.py:709 -#: netbox/dcim/forms/object_import.py:84 netbox/dcim/forms/object_import.py:113 -#: netbox/dcim/forms/object_import.py:145 netbox/dcim/tables/devices.py:178 -#: netbox/dcim/tables/devices.py:814 netbox/dcim/tables/power.py:77 -#: netbox/dcim/tables/racks.py:138 netbox/extras/forms/bulk_import.py:42 +#: netbox/circuits/forms/bulk_edit.py:130 +#: netbox/circuits/forms/bulk_edit.py:331 +#: netbox/circuits/forms/bulk_import.py:94 +#: netbox/circuits/forms/bulk_import.py:221 +#: netbox/circuits/forms/filtersets.py:137 +#: netbox/circuits/forms/filtersets.py:353 +#: netbox/circuits/tables/circuits.py:65 netbox/circuits/tables/circuits.py:200 +#: netbox/circuits/tables/virtual_circuits.py:58 +#: netbox/core/forms/bulk_edit.py:18 netbox/core/forms/filtersets.py:33 +#: netbox/core/tables/change_logging.py:32 netbox/core/tables/data.py:20 +#: netbox/core/tables/jobs.py:18 netbox/dcim/forms/bulk_edit.py:800 +#: netbox/dcim/forms/bulk_edit.py:939 netbox/dcim/forms/bulk_edit.py:1007 +#: netbox/dcim/forms/bulk_edit.py:1026 netbox/dcim/forms/bulk_edit.py:1049 +#: netbox/dcim/forms/bulk_edit.py:1091 netbox/dcim/forms/bulk_edit.py:1135 +#: netbox/dcim/forms/bulk_edit.py:1186 netbox/dcim/forms/bulk_edit.py:1213 +#: netbox/dcim/forms/bulk_import.py:190 netbox/dcim/forms/bulk_import.py:269 +#: netbox/dcim/forms/bulk_import.py:735 netbox/dcim/forms/bulk_import.py:761 +#: netbox/dcim/forms/bulk_import.py:787 netbox/dcim/forms/bulk_import.py:807 +#: netbox/dcim/forms/bulk_import.py:893 netbox/dcim/forms/bulk_import.py:987 +#: netbox/dcim/forms/bulk_import.py:1029 netbox/dcim/forms/bulk_import.py:1332 +#: netbox/dcim/forms/bulk_import.py:1495 netbox/dcim/forms/filtersets.py:956 +#: netbox/dcim/forms/filtersets.py:1055 netbox/dcim/forms/filtersets.py:1176 +#: netbox/dcim/forms/filtersets.py:1248 netbox/dcim/forms/filtersets.py:1273 +#: netbox/dcim/forms/filtersets.py:1297 netbox/dcim/forms/filtersets.py:1317 +#: netbox/dcim/forms/filtersets.py:1358 netbox/dcim/forms/filtersets.py:1455 +#: netbox/dcim/forms/filtersets.py:1479 netbox/dcim/forms/model_forms.py:714 +#: netbox/dcim/forms/model_forms.py:720 netbox/dcim/forms/object_import.py:84 +#: netbox/dcim/forms/object_import.py:113 +#: netbox/dcim/forms/object_import.py:146 netbox/dcim/tables/devices.py:188 +#: netbox/dcim/tables/devices.py:845 netbox/dcim/tables/power.py:77 +#: netbox/dcim/tables/racks.py:137 netbox/extras/forms/bulk_import.py:42 #: netbox/extras/tables/tables.py:405 netbox/extras/tables/tables.py:465 #: netbox/netbox/tables/tables.py:240 netbox/templates/circuits/circuit.html:30 +#: netbox/templates/circuits/virtualcircuit.html:39 +#: netbox/templates/circuits/virtualcircuittermination.html:64 #: netbox/templates/core/datasource.html:38 netbox/templates/dcim/cable.html:15 #: netbox/templates/dcim/consoleport.html:36 #: netbox/templates/dcim/consoleserverport.html:36 #: netbox/templates/dcim/frontport.html:36 #: netbox/templates/dcim/interface.html:46 -#: netbox/templates/dcim/interface.html:169 -#: netbox/templates/dcim/interface.html:311 +#: netbox/templates/dcim/interface.html:226 +#: netbox/templates/dcim/interface.html:368 #: netbox/templates/dcim/powerfeed.html:32 #: netbox/templates/dcim/poweroutlet.html:36 #: netbox/templates/dcim/powerport.html:36 @@ -614,65 +709,78 @@ msgstr "" #: netbox/templates/vpn/l2vpn.html:22 #: netbox/templates/wireless/inc/authentication_attrs.html:8 #: netbox/templates/wireless/inc/wirelesslink_interface.html:14 -#: netbox/virtualization/forms/bulk_edit.py:60 -#: netbox/virtualization/forms/bulk_import.py:41 +#: netbox/virtualization/forms/bulk_edit.py:61 +#: netbox/virtualization/forms/bulk_import.py:42 #: netbox/virtualization/forms/filtersets.py:54 -#: netbox/virtualization/forms/model_forms.py:62 +#: netbox/virtualization/forms/model_forms.py:64 #: netbox/virtualization/tables/clusters.py:66 #: netbox/vpn/forms/bulk_edit.py:264 netbox/vpn/forms/bulk_import.py:264 -#: netbox/vpn/forms/filtersets.py:217 netbox/vpn/forms/model_forms.py:84 -#: netbox/vpn/forms/model_forms.py:119 netbox/vpn/forms/model_forms.py:231 +#: netbox/vpn/forms/filtersets.py:217 netbox/vpn/forms/model_forms.py:85 +#: netbox/vpn/forms/model_forms.py:120 netbox/vpn/forms/model_forms.py:232 msgid "Type" msgstr "" -#: netbox/circuits/forms/bulk_edit.py:128 -#: netbox/circuits/forms/bulk_import.py:80 -#: netbox/circuits/forms/filtersets.py:139 -#: netbox/circuits/forms/model_forms.py:98 +#: netbox/circuits/forms/bulk_edit.py:140 +#: netbox/circuits/forms/bulk_edit.py:326 +#: netbox/circuits/forms/bulk_import.py:87 +#: netbox/circuits/forms/bulk_import.py:214 +#: netbox/circuits/forms/filtersets.py:150 +#: netbox/circuits/forms/filtersets.py:340 +#: netbox/circuits/forms/model_forms.py:116 +#: netbox/circuits/forms/model_forms.py:330 +#: netbox/templates/circuits/virtualcircuit.html:31 +#: netbox/templates/circuits/virtualcircuittermination.html:34 msgid "Provider account" msgstr "" -#: netbox/circuits/forms/bulk_edit.py:136 -#: netbox/circuits/forms/bulk_import.py:93 -#: netbox/circuits/forms/filtersets.py:150 netbox/core/forms/filtersets.py:38 +#: netbox/circuits/forms/bulk_edit.py:148 +#: netbox/circuits/forms/bulk_edit.py:336 +#: netbox/circuits/forms/bulk_import.py:100 +#: netbox/circuits/forms/bulk_import.py:227 +#: netbox/circuits/forms/filtersets.py:161 +#: netbox/circuits/forms/filtersets.py:356 netbox/core/forms/filtersets.py:38 #: netbox/core/forms/filtersets.py:79 netbox/core/tables/data.py:23 #: netbox/core/tables/jobs.py:26 netbox/core/tables/tasks.py:88 -#: netbox/dcim/forms/bulk_edit.py:107 netbox/dcim/forms/bulk_edit.py:182 -#: netbox/dcim/forms/bulk_edit.py:352 netbox/dcim/forms/bulk_edit.py:706 -#: netbox/dcim/forms/bulk_edit.py:771 netbox/dcim/forms/bulk_edit.py:803 -#: netbox/dcim/forms/bulk_edit.py:930 netbox/dcim/forms/bulk_edit.py:1744 -#: netbox/dcim/forms/bulk_import.py:88 netbox/dcim/forms/bulk_import.py:147 -#: netbox/dcim/forms/bulk_import.py:248 netbox/dcim/forms/bulk_import.py:527 -#: netbox/dcim/forms/bulk_import.py:681 netbox/dcim/forms/bulk_import.py:1229 -#: netbox/dcim/forms/bulk_import.py:1393 netbox/dcim/forms/bulk_import.py:1457 -#: netbox/dcim/forms/filtersets.py:178 netbox/dcim/forms/filtersets.py:237 -#: netbox/dcim/forms/filtersets.py:359 netbox/dcim/forms/filtersets.py:799 -#: netbox/dcim/forms/filtersets.py:924 netbox/dcim/forms/filtersets.py:958 -#: netbox/dcim/forms/filtersets.py:1059 netbox/dcim/forms/filtersets.py:1170 -#: netbox/dcim/tables/devices.py:140 netbox/dcim/tables/devices.py:817 -#: netbox/dcim/tables/devices.py:1063 netbox/dcim/tables/modules.py:70 -#: netbox/dcim/tables/power.py:74 netbox/dcim/tables/racks.py:126 +#: netbox/dcim/forms/bulk_edit.py:110 netbox/dcim/forms/bulk_edit.py:185 +#: netbox/dcim/forms/bulk_edit.py:355 netbox/dcim/forms/bulk_edit.py:709 +#: netbox/dcim/forms/bulk_edit.py:774 netbox/dcim/forms/bulk_edit.py:806 +#: netbox/dcim/forms/bulk_edit.py:933 netbox/dcim/forms/bulk_edit.py:1721 +#: netbox/dcim/forms/bulk_edit.py:1763 netbox/dcim/forms/bulk_import.py:90 +#: netbox/dcim/forms/bulk_import.py:149 netbox/dcim/forms/bulk_import.py:250 +#: netbox/dcim/forms/bulk_import.py:532 netbox/dcim/forms/bulk_import.py:686 +#: netbox/dcim/forms/bulk_import.py:1137 netbox/dcim/forms/bulk_import.py:1326 +#: netbox/dcim/forms/bulk_import.py:1490 netbox/dcim/forms/bulk_import.py:1554 +#: netbox/dcim/forms/filtersets.py:179 netbox/dcim/forms/filtersets.py:238 +#: netbox/dcim/forms/filtersets.py:360 netbox/dcim/forms/filtersets.py:800 +#: netbox/dcim/forms/filtersets.py:925 netbox/dcim/forms/filtersets.py:959 +#: netbox/dcim/forms/filtersets.py:1060 netbox/dcim/forms/filtersets.py:1171 +#: netbox/dcim/forms/filtersets.py:1562 netbox/dcim/tables/devices.py:150 +#: netbox/dcim/tables/devices.py:848 netbox/dcim/tables/devices.py:982 +#: netbox/dcim/tables/devices.py:1094 netbox/dcim/tables/modules.py:70 +#: netbox/dcim/tables/power.py:74 netbox/dcim/tables/racks.py:125 #: netbox/dcim/tables/sites.py:82 netbox/dcim/tables/sites.py:138 -#: netbox/ipam/forms/bulk_edit.py:256 netbox/ipam/forms/bulk_edit.py:306 -#: netbox/ipam/forms/bulk_edit.py:354 netbox/ipam/forms/bulk_edit.py:506 -#: netbox/ipam/forms/bulk_import.py:192 netbox/ipam/forms/bulk_import.py:257 -#: netbox/ipam/forms/bulk_import.py:293 netbox/ipam/forms/bulk_import.py:474 -#: netbox/ipam/forms/filtersets.py:210 netbox/ipam/forms/filtersets.py:281 -#: netbox/ipam/forms/filtersets.py:355 netbox/ipam/forms/filtersets.py:501 -#: netbox/ipam/forms/model_forms.py:501 netbox/ipam/tables/ip.py:237 -#: netbox/ipam/tables/ip.py:312 netbox/ipam/tables/ip.py:363 -#: netbox/ipam/tables/ip.py:426 netbox/ipam/tables/ip.py:453 -#: netbox/ipam/tables/vlans.py:126 netbox/ipam/tables/vlans.py:232 +#: netbox/ipam/forms/bulk_edit.py:240 netbox/ipam/forms/bulk_edit.py:290 +#: netbox/ipam/forms/bulk_edit.py:338 netbox/ipam/forms/bulk_edit.py:490 +#: netbox/ipam/forms/bulk_import.py:188 netbox/ipam/forms/bulk_import.py:256 +#: netbox/ipam/forms/bulk_import.py:292 netbox/ipam/forms/bulk_import.py:473 +#: netbox/ipam/forms/filtersets.py:212 netbox/ipam/forms/filtersets.py:284 +#: netbox/ipam/forms/filtersets.py:358 netbox/ipam/forms/filtersets.py:542 +#: netbox/ipam/forms/model_forms.py:503 netbox/ipam/tables/ip.py:183 +#: netbox/ipam/tables/ip.py:262 netbox/ipam/tables/ip.py:313 +#: netbox/ipam/tables/ip.py:376 netbox/ipam/tables/ip.py:403 +#: netbox/ipam/tables/vlans.py:95 netbox/ipam/tables/vlans.py:208 #: netbox/templates/circuits/circuit.html:34 +#: netbox/templates/circuits/virtualcircuit.html:43 #: netbox/templates/core/datasource.html:46 netbox/templates/core/job.html:48 #: netbox/templates/core/rq_task.html:81 netbox/templates/core/system.html:18 #: netbox/templates/dcim/cable.html:19 netbox/templates/dcim/device.html:178 +#: netbox/templates/dcim/inventoryitem.html:36 #: netbox/templates/dcim/location.html:45 netbox/templates/dcim/module.html:69 #: netbox/templates/dcim/powerfeed.html:36 netbox/templates/dcim/rack.html:41 #: netbox/templates/dcim/site.html:43 #: netbox/templates/extras/script_list.html:48 #: netbox/templates/ipam/ipaddress.html:37 -#: netbox/templates/ipam/iprange.html:54 netbox/templates/ipam/prefix.html:73 +#: netbox/templates/ipam/iprange.html:54 netbox/templates/ipam/prefix.html:69 #: netbox/templates/ipam/vlan.html:48 #: netbox/templates/virtualization/cluster.html:21 #: netbox/templates/virtualization/virtualmachine.html:19 @@ -680,62 +788,66 @@ msgstr "" #: netbox/templates/wireless/wirelesslan.html:22 #: netbox/templates/wireless/wirelesslink.html:17 #: netbox/users/forms/filtersets.py:32 netbox/users/forms/model_forms.py:194 -#: netbox/virtualization/forms/bulk_edit.py:70 -#: netbox/virtualization/forms/bulk_edit.py:118 -#: netbox/virtualization/forms/bulk_import.py:54 -#: netbox/virtualization/forms/bulk_import.py:80 -#: netbox/virtualization/forms/filtersets.py:62 -#: netbox/virtualization/forms/filtersets.py:160 +#: netbox/virtualization/forms/bulk_edit.py:71 +#: netbox/virtualization/forms/bulk_edit.py:100 +#: netbox/virtualization/forms/bulk_import.py:55 +#: netbox/virtualization/forms/bulk_import.py:86 +#: netbox/virtualization/forms/filtersets.py:82 +#: netbox/virtualization/forms/filtersets.py:165 #: netbox/virtualization/tables/clusters.py:74 -#: netbox/virtualization/tables/virtualmachines.py:60 +#: netbox/virtualization/tables/virtualmachines.py:30 #: netbox/vpn/forms/bulk_edit.py:39 netbox/vpn/forms/bulk_import.py:37 #: netbox/vpn/forms/filtersets.py:47 netbox/vpn/tables/tunnels.py:48 -#: netbox/wireless/forms/bulk_edit.py:43 netbox/wireless/forms/bulk_edit.py:105 -#: netbox/wireless/forms/bulk_import.py:43 -#: netbox/wireless/forms/bulk_import.py:84 -#: netbox/wireless/forms/filtersets.py:49 -#: netbox/wireless/forms/filtersets.py:83 +#: netbox/wireless/forms/bulk_edit.py:45 netbox/wireless/forms/bulk_edit.py:108 +#: netbox/wireless/forms/bulk_import.py:45 +#: netbox/wireless/forms/bulk_import.py:89 +#: netbox/wireless/forms/filtersets.py:52 +#: netbox/wireless/forms/filtersets.py:111 #: netbox/wireless/tables/wirelesslan.py:52 -#: netbox/wireless/tables/wirelesslink.py:20 +#: netbox/wireless/tables/wirelesslink.py:19 msgid "Status" msgstr "" -#: netbox/circuits/forms/bulk_edit.py:142 -#: netbox/circuits/forms/bulk_edit.py:233 -#: netbox/circuits/forms/bulk_import.py:98 -#: netbox/circuits/forms/bulk_import.py:158 -#: netbox/circuits/forms/filtersets.py:119 -#: netbox/circuits/forms/filtersets.py:241 netbox/dcim/forms/bulk_edit.py:123 -#: netbox/dcim/forms/bulk_edit.py:188 netbox/dcim/forms/bulk_edit.py:347 -#: netbox/dcim/forms/bulk_edit.py:467 netbox/dcim/forms/bulk_edit.py:696 -#: netbox/dcim/forms/bulk_edit.py:809 netbox/dcim/forms/bulk_edit.py:1749 -#: netbox/dcim/forms/bulk_import.py:107 netbox/dcim/forms/bulk_import.py:152 -#: netbox/dcim/forms/bulk_import.py:241 netbox/dcim/forms/bulk_import.py:356 -#: netbox/dcim/forms/bulk_import.py:501 netbox/dcim/forms/bulk_import.py:1241 -#: netbox/dcim/forms/bulk_import.py:1450 netbox/dcim/forms/filtersets.py:173 -#: netbox/dcim/forms/filtersets.py:205 netbox/dcim/forms/filtersets.py:323 -#: netbox/dcim/forms/filtersets.py:399 netbox/dcim/forms/filtersets.py:420 -#: netbox/dcim/forms/filtersets.py:722 netbox/dcim/forms/filtersets.py:916 -#: netbox/dcim/forms/filtersets.py:978 netbox/dcim/forms/filtersets.py:1008 -#: netbox/dcim/forms/filtersets.py:1130 netbox/dcim/tables/power.py:88 +#: netbox/circuits/forms/bulk_edit.py:154 +#: netbox/circuits/forms/bulk_edit.py:271 +#: netbox/circuits/forms/bulk_edit.py:342 +#: netbox/circuits/forms/bulk_import.py:111 +#: netbox/circuits/forms/bulk_import.py:170 +#: netbox/circuits/forms/bulk_import.py:232 +#: netbox/circuits/forms/filtersets.py:130 +#: netbox/circuits/forms/filtersets.py:272 +#: netbox/circuits/forms/filtersets.py:326 netbox/dcim/forms/bulk_edit.py:126 +#: netbox/dcim/forms/bulk_edit.py:191 netbox/dcim/forms/bulk_edit.py:350 +#: netbox/dcim/forms/bulk_edit.py:470 netbox/dcim/forms/bulk_edit.py:699 +#: netbox/dcim/forms/bulk_edit.py:812 netbox/dcim/forms/bulk_edit.py:1768 +#: netbox/dcim/forms/bulk_import.py:109 netbox/dcim/forms/bulk_import.py:154 +#: netbox/dcim/forms/bulk_import.py:243 netbox/dcim/forms/bulk_import.py:358 +#: netbox/dcim/forms/bulk_import.py:506 netbox/dcim/forms/bulk_import.py:1338 +#: netbox/dcim/forms/bulk_import.py:1547 netbox/dcim/forms/filtersets.py:174 +#: netbox/dcim/forms/filtersets.py:206 netbox/dcim/forms/filtersets.py:324 +#: netbox/dcim/forms/filtersets.py:400 netbox/dcim/forms/filtersets.py:421 +#: netbox/dcim/forms/filtersets.py:723 netbox/dcim/forms/filtersets.py:917 +#: netbox/dcim/forms/filtersets.py:979 netbox/dcim/forms/filtersets.py:1009 +#: netbox/dcim/forms/filtersets.py:1131 netbox/dcim/tables/power.py:88 #: netbox/extras/filtersets.py:612 netbox/extras/forms/filtersets.py:323 -#: netbox/extras/forms/filtersets.py:396 netbox/ipam/forms/bulk_edit.py:43 -#: netbox/ipam/forms/bulk_edit.py:68 netbox/ipam/forms/bulk_edit.py:112 -#: netbox/ipam/forms/bulk_edit.py:141 netbox/ipam/forms/bulk_edit.py:166 -#: netbox/ipam/forms/bulk_edit.py:251 netbox/ipam/forms/bulk_edit.py:301 -#: netbox/ipam/forms/bulk_edit.py:349 netbox/ipam/forms/bulk_edit.py:501 -#: netbox/ipam/forms/bulk_import.py:38 netbox/ipam/forms/bulk_import.py:67 -#: netbox/ipam/forms/bulk_import.py:95 netbox/ipam/forms/bulk_import.py:115 -#: netbox/ipam/forms/bulk_import.py:135 netbox/ipam/forms/bulk_import.py:164 -#: netbox/ipam/forms/bulk_import.py:250 netbox/ipam/forms/bulk_import.py:286 -#: netbox/ipam/forms/bulk_import.py:467 netbox/ipam/forms/filtersets.py:48 -#: netbox/ipam/forms/filtersets.py:68 netbox/ipam/forms/filtersets.py:100 -#: netbox/ipam/forms/filtersets.py:120 netbox/ipam/forms/filtersets.py:143 -#: netbox/ipam/forms/filtersets.py:174 netbox/ipam/forms/filtersets.py:267 -#: netbox/ipam/forms/filtersets.py:310 netbox/ipam/forms/filtersets.py:469 -#: netbox/ipam/tables/ip.py:456 netbox/ipam/tables/vlans.py:229 -#: netbox/templates/circuits/circuit.html:38 +#: netbox/extras/forms/filtersets.py:396 netbox/ipam/forms/bulk_edit.py:46 +#: netbox/ipam/forms/bulk_edit.py:71 netbox/ipam/forms/bulk_edit.py:115 +#: netbox/ipam/forms/bulk_edit.py:144 netbox/ipam/forms/bulk_edit.py:169 +#: netbox/ipam/forms/bulk_edit.py:235 netbox/ipam/forms/bulk_edit.py:285 +#: netbox/ipam/forms/bulk_edit.py:333 netbox/ipam/forms/bulk_edit.py:485 +#: netbox/ipam/forms/bulk_import.py:41 netbox/ipam/forms/bulk_import.py:70 +#: netbox/ipam/forms/bulk_import.py:98 netbox/ipam/forms/bulk_import.py:118 +#: netbox/ipam/forms/bulk_import.py:138 netbox/ipam/forms/bulk_import.py:167 +#: netbox/ipam/forms/bulk_import.py:249 netbox/ipam/forms/bulk_import.py:285 +#: netbox/ipam/forms/bulk_import.py:466 netbox/ipam/forms/filtersets.py:50 +#: netbox/ipam/forms/filtersets.py:70 netbox/ipam/forms/filtersets.py:102 +#: netbox/ipam/forms/filtersets.py:122 netbox/ipam/forms/filtersets.py:145 +#: netbox/ipam/forms/filtersets.py:176 netbox/ipam/forms/filtersets.py:270 +#: netbox/ipam/forms/filtersets.py:313 netbox/ipam/forms/filtersets.py:510 +#: netbox/ipam/tables/ip.py:406 netbox/ipam/tables/vlans.py:205 +#: netbox/templates/circuits/circuit.html:48 #: netbox/templates/circuits/circuitgroup.html:36 +#: netbox/templates/circuits/virtualcircuit.html:47 #: netbox/templates/dcim/cable.html:23 netbox/templates/dcim/device.html:79 #: netbox/templates/dcim/location.html:49 #: netbox/templates/dcim/powerfeed.html:44 netbox/templates/dcim/rack.html:32 @@ -751,114 +863,181 @@ msgstr "" #: netbox/templates/virtualization/cluster.html:33 #: netbox/templates/virtualization/virtualmachine.html:39 #: netbox/templates/vpn/l2vpn.html:30 netbox/templates/vpn/tunnel.html:49 -#: netbox/templates/wireless/wirelesslan.html:34 +#: netbox/templates/wireless/wirelesslan.html:42 #: netbox/templates/wireless/wirelesslink.html:25 -#: netbox/tenancy/forms/forms.py:25 netbox/tenancy/forms/forms.py:48 -#: netbox/tenancy/forms/model_forms.py:52 netbox/tenancy/tables/columns.py:64 -#: netbox/virtualization/forms/bulk_edit.py:76 -#: netbox/virtualization/forms/bulk_edit.py:155 -#: netbox/virtualization/forms/bulk_import.py:66 -#: netbox/virtualization/forms/bulk_import.py:115 +#: netbox/tenancy/forms/forms.py:25 netbox/tenancy/forms/forms.py:49 +#: netbox/tenancy/forms/model_forms.py:52 netbox/tenancy/tables/columns.py:49 +#: netbox/virtualization/forms/bulk_edit.py:77 +#: netbox/virtualization/forms/bulk_edit.py:137 +#: netbox/virtualization/forms/bulk_import.py:67 +#: netbox/virtualization/forms/bulk_import.py:121 #: netbox/virtualization/forms/filtersets.py:47 -#: netbox/virtualization/forms/filtersets.py:105 +#: netbox/virtualization/forms/filtersets.py:110 #: netbox/vpn/forms/bulk_edit.py:59 netbox/vpn/forms/bulk_edit.py:269 #: netbox/vpn/forms/bulk_import.py:59 netbox/vpn/forms/bulk_import.py:258 -#: netbox/vpn/forms/filtersets.py:214 netbox/wireless/forms/bulk_edit.py:63 -#: netbox/wireless/forms/bulk_edit.py:110 -#: netbox/wireless/forms/bulk_import.py:55 -#: netbox/wireless/forms/bulk_import.py:97 -#: netbox/wireless/forms/filtersets.py:35 -#: netbox/wireless/forms/filtersets.py:75 +#: netbox/vpn/forms/filtersets.py:214 netbox/wireless/forms/bulk_edit.py:65 +#: netbox/wireless/forms/bulk_edit.py:113 +#: netbox/wireless/forms/bulk_import.py:57 +#: netbox/wireless/forms/bulk_import.py:102 +#: netbox/wireless/forms/filtersets.py:38 +#: netbox/wireless/forms/filtersets.py:103 msgid "Tenant" msgstr "" -#: netbox/circuits/forms/bulk_edit.py:147 -#: netbox/circuits/forms/filtersets.py:174 +#: netbox/circuits/forms/bulk_edit.py:159 +#: netbox/circuits/forms/filtersets.py:185 msgid "Install date" msgstr "" -#: netbox/circuits/forms/bulk_edit.py:152 -#: netbox/circuits/forms/filtersets.py:179 +#: netbox/circuits/forms/bulk_edit.py:164 +#: netbox/circuits/forms/filtersets.py:190 msgid "Termination date" msgstr "" -#: netbox/circuits/forms/bulk_edit.py:158 -#: netbox/circuits/forms/filtersets.py:186 +#: netbox/circuits/forms/bulk_edit.py:170 +#: netbox/circuits/forms/filtersets.py:197 msgid "Commit rate (Kbps)" msgstr "" -#: netbox/circuits/forms/bulk_edit.py:173 -#: netbox/circuits/forms/model_forms.py:112 +#: netbox/circuits/forms/bulk_edit.py:176 +#: netbox/circuits/forms/filtersets.py:203 +#: netbox/circuits/forms/model_forms.py:136 +#: netbox/templates/circuits/circuit.html:38 +#: netbox/templates/wireless/wirelesslink.html:38 +#: netbox/wireless/forms/bulk_edit.py:132 +#: netbox/wireless/forms/filtersets.py:130 +#: netbox/wireless/forms/model_forms.py:168 +msgid "Distance" +msgstr "" + +#: netbox/circuits/forms/bulk_edit.py:181 +#: netbox/circuits/forms/bulk_import.py:105 +#: netbox/circuits/forms/bulk_import.py:108 +#: netbox/circuits/forms/filtersets.py:207 +#: netbox/wireless/forms/bulk_edit.py:137 +#: netbox/wireless/forms/bulk_import.py:121 +#: netbox/wireless/forms/bulk_import.py:124 +#: netbox/wireless/forms/filtersets.py:134 +msgid "Distance unit" +msgstr "" + +#: netbox/circuits/forms/bulk_edit.py:196 +#: netbox/circuits/forms/model_forms.py:141 msgid "Service Parameters" msgstr "" -#: netbox/circuits/forms/bulk_edit.py:174 -#: netbox/circuits/forms/model_forms.py:113 -#: netbox/circuits/forms/model_forms.py:183 -#: netbox/dcim/forms/model_forms.py:139 netbox/dcim/forms/model_forms.py:181 -#: netbox/dcim/forms/model_forms.py:266 netbox/dcim/forms/model_forms.py:323 -#: netbox/dcim/forms/model_forms.py:768 netbox/dcim/forms/model_forms.py:1699 -#: netbox/ipam/forms/model_forms.py:64 netbox/ipam/forms/model_forms.py:81 -#: netbox/ipam/forms/model_forms.py:115 netbox/ipam/forms/model_forms.py:136 -#: netbox/ipam/forms/model_forms.py:160 netbox/ipam/forms/model_forms.py:232 -#: netbox/ipam/forms/model_forms.py:261 netbox/ipam/forms/model_forms.py:320 +#: netbox/circuits/forms/bulk_edit.py:197 +#: netbox/circuits/forms/filtersets.py:73 +#: netbox/circuits/forms/filtersets.py:91 +#: netbox/circuits/forms/filtersets.py:110 +#: netbox/circuits/forms/filtersets.py:127 +#: netbox/circuits/forms/filtersets.py:310 +#: netbox/circuits/forms/filtersets.py:325 netbox/core/forms/filtersets.py:67 +#: netbox/core/forms/filtersets.py:135 netbox/dcim/forms/bulk_edit.py:846 +#: netbox/dcim/forms/filtersets.py:173 netbox/dcim/forms/filtersets.py:205 +#: netbox/dcim/forms/filtersets.py:916 netbox/dcim/forms/filtersets.py:1008 +#: netbox/dcim/forms/filtersets.py:1132 netbox/dcim/forms/filtersets.py:1240 +#: netbox/dcim/forms/filtersets.py:1264 netbox/dcim/forms/filtersets.py:1289 +#: netbox/dcim/forms/filtersets.py:1308 netbox/dcim/forms/filtersets.py:1332 +#: netbox/dcim/forms/filtersets.py:1446 netbox/dcim/forms/filtersets.py:1470 +#: netbox/dcim/forms/filtersets.py:1494 netbox/dcim/forms/filtersets.py:1512 +#: netbox/dcim/forms/filtersets.py:1528 netbox/extras/forms/bulk_edit.py:90 +#: netbox/extras/forms/filtersets.py:44 netbox/extras/forms/filtersets.py:134 +#: netbox/extras/forms/filtersets.py:165 netbox/extras/forms/filtersets.py:205 +#: netbox/extras/forms/filtersets.py:221 netbox/extras/forms/filtersets.py:252 +#: netbox/extras/forms/filtersets.py:276 netbox/extras/forms/filtersets.py:441 +#: netbox/ipam/forms/filtersets.py:101 netbox/ipam/forms/filtersets.py:269 +#: netbox/ipam/forms/filtersets.py:310 netbox/ipam/forms/filtersets.py:385 +#: netbox/ipam/forms/filtersets.py:470 netbox/ipam/forms/filtersets.py:483 +#: netbox/ipam/forms/filtersets.py:508 netbox/ipam/forms/filtersets.py:579 +#: netbox/ipam/forms/filtersets.py:597 netbox/netbox/tables/tables.py:256 +#: netbox/virtualization/forms/filtersets.py:45 +#: netbox/virtualization/forms/filtersets.py:108 +#: netbox/virtualization/forms/filtersets.py:203 +#: netbox/virtualization/forms/filtersets.py:248 +#: netbox/vpn/forms/filtersets.py:213 netbox/wireless/forms/bulk_edit.py:153 +#: netbox/wireless/forms/filtersets.py:36 +#: netbox/wireless/forms/filtersets.py:102 +msgid "Attributes" +msgstr "" + +#: netbox/circuits/forms/bulk_edit.py:198 +#: netbox/circuits/forms/bulk_edit.py:356 +#: netbox/circuits/forms/model_forms.py:142 +#: netbox/circuits/forms/model_forms.py:240 +#: netbox/circuits/forms/model_forms.py:345 +#: netbox/dcim/forms/model_forms.py:143 netbox/dcim/forms/model_forms.py:185 +#: netbox/dcim/forms/model_forms.py:274 netbox/dcim/forms/model_forms.py:331 +#: netbox/dcim/forms/model_forms.py:780 netbox/dcim/forms/model_forms.py:1744 +#: netbox/ipam/forms/model_forms.py:67 netbox/ipam/forms/model_forms.py:84 +#: netbox/ipam/forms/model_forms.py:119 netbox/ipam/forms/model_forms.py:141 +#: netbox/ipam/forms/model_forms.py:166 netbox/ipam/forms/model_forms.py:233 +#: netbox/ipam/forms/model_forms.py:263 netbox/ipam/forms/model_forms.py:322 #: netbox/netbox/navigation/menu.py:24 #: netbox/templates/dcim/device_edit.html:85 #: netbox/templates/dcim/htmx/cable_edit.html:72 #: netbox/templates/ipam/ipaddress_bulk_add.html:27 -#: netbox/templates/ipam/vlan_edit.html:22 -#: netbox/virtualization/forms/model_forms.py:80 -#: netbox/virtualization/forms/model_forms.py:222 +#: netbox/templates/ipam/vlan_edit.html:30 +#: netbox/virtualization/forms/model_forms.py:79 +#: netbox/virtualization/forms/model_forms.py:221 #: netbox/vpn/forms/bulk_edit.py:78 netbox/vpn/forms/filtersets.py:44 -#: netbox/vpn/forms/model_forms.py:62 netbox/vpn/forms/model_forms.py:147 -#: netbox/vpn/forms/model_forms.py:411 netbox/wireless/forms/model_forms.py:54 -#: netbox/wireless/forms/model_forms.py:170 +#: netbox/vpn/forms/model_forms.py:63 netbox/vpn/forms/model_forms.py:148 +#: netbox/vpn/forms/model_forms.py:414 netbox/wireless/forms/model_forms.py:57 +#: netbox/wireless/forms/model_forms.py:173 msgid "Tenancy" msgstr "" -#: netbox/circuits/forms/bulk_edit.py:193 -#: netbox/circuits/forms/bulk_edit.py:217 -#: netbox/circuits/forms/model_forms.py:155 -#: netbox/circuits/tables/circuits.py:117 -#: netbox/templates/circuits/inc/circuit_termination_fields.html:62 -#: netbox/templates/circuits/providernetwork.html:17 -msgid "Provider Network" +#: netbox/circuits/forms/bulk_edit.py:215 +#: netbox/circuits/forms/model_forms.py:170 +#: netbox/dcim/forms/bulk_import.py:1299 netbox/dcim/forms/bulk_import.py:1317 +msgid "Termination type" msgstr "" -#: netbox/circuits/forms/bulk_edit.py:199 +#: netbox/circuits/forms/bulk_edit.py:218 +#: netbox/circuits/forms/bulk_import.py:133 +#: netbox/circuits/forms/filtersets.py:220 +#: netbox/circuits/forms/model_forms.py:173 +#: netbox/templates/circuits/inc/circuit_termination.html:6 +#: netbox/templates/dcim/cable.html:68 netbox/templates/dcim/cable.html:72 +#: netbox/vpn/forms/bulk_import.py:100 netbox/vpn/forms/filtersets.py:77 +msgid "Termination" +msgstr "" + +#: netbox/circuits/forms/bulk_edit.py:226 msgid "Port speed (Kbps)" msgstr "" -#: netbox/circuits/forms/bulk_edit.py:203 +#: netbox/circuits/forms/bulk_edit.py:230 msgid "Upstream speed (Kbps)" msgstr "" -#: netbox/circuits/forms/bulk_edit.py:206 netbox/dcim/forms/bulk_edit.py:966 -#: netbox/dcim/forms/bulk_edit.py:1330 netbox/dcim/forms/bulk_edit.py:1347 -#: netbox/dcim/forms/bulk_edit.py:1364 netbox/dcim/forms/bulk_edit.py:1382 -#: netbox/dcim/forms/bulk_edit.py:1477 netbox/dcim/forms/bulk_edit.py:1637 -#: netbox/dcim/forms/bulk_edit.py:1654 +#: netbox/circuits/forms/bulk_edit.py:233 netbox/dcim/forms/bulk_edit.py:969 +#: netbox/dcim/forms/bulk_edit.py:1333 netbox/dcim/forms/bulk_edit.py:1350 +#: netbox/dcim/forms/bulk_edit.py:1367 netbox/dcim/forms/bulk_edit.py:1385 +#: netbox/dcim/forms/bulk_edit.py:1480 netbox/dcim/forms/bulk_edit.py:1650 +#: netbox/dcim/forms/bulk_edit.py:1667 msgid "Mark connected" msgstr "" -#: netbox/circuits/forms/bulk_edit.py:219 -#: netbox/circuits/forms/model_forms.py:157 -#: netbox/templates/circuits/inc/circuit_termination_fields.html:54 +#: netbox/circuits/forms/bulk_edit.py:243 +#: netbox/circuits/forms/model_forms.py:184 +#: netbox/templates/circuits/inc/circuit_termination_fields.html:55 #: netbox/templates/dcim/frontport.html:121 -#: netbox/templates/dcim/interface.html:193 +#: netbox/templates/dcim/interface.html:250 #: netbox/templates/dcim/rearport.html:111 msgid "Circuit Termination" msgstr "" -#: netbox/circuits/forms/bulk_edit.py:221 -#: netbox/circuits/forms/model_forms.py:159 +#: netbox/circuits/forms/bulk_edit.py:245 +#: netbox/circuits/forms/model_forms.py:186 msgid "Termination Details" msgstr "" -#: netbox/circuits/forms/bulk_edit.py:251 -#: netbox/circuits/forms/filtersets.py:268 -#: netbox/circuits/tables/circuits.py:168 netbox/dcim/forms/model_forms.py:551 -#: netbox/templates/circuits/circuitgroupassignment.html:30 +#: netbox/circuits/forms/bulk_edit.py:289 +#: netbox/circuits/forms/bulk_import.py:188 +#: netbox/circuits/forms/filtersets.py:299 +#: netbox/circuits/tables/circuits.py:207 netbox/dcim/forms/model_forms.py:562 +#: netbox/templates/circuits/circuitgroupassignment.html:34 #: netbox/templates/dcim/device.html:133 #: netbox/templates/dcim/virtualchassis.html:68 #: netbox/templates/dcim/virtualchassis_edit.html:56 @@ -867,226 +1046,309 @@ msgstr "" msgid "Priority" msgstr "" -#: netbox/circuits/forms/bulk_import.py:39 -#: netbox/circuits/forms/bulk_import.py:54 -#: netbox/circuits/forms/bulk_import.py:77 -msgid "Assigned provider" -msgstr "" - -#: netbox/circuits/forms/bulk_import.py:83 -msgid "Assigned provider account" -msgstr "" - -#: netbox/circuits/forms/bulk_import.py:90 -msgid "Type of circuit" -msgstr "" - -#: netbox/circuits/forms/bulk_import.py:95 netbox/dcim/forms/bulk_import.py:90 -#: netbox/dcim/forms/bulk_import.py:149 netbox/dcim/forms/bulk_import.py:250 -#: netbox/dcim/forms/bulk_import.py:529 netbox/dcim/forms/bulk_import.py:683 -#: netbox/dcim/forms/bulk_import.py:1395 netbox/ipam/forms/bulk_import.py:194 -#: netbox/ipam/forms/bulk_import.py:259 netbox/ipam/forms/bulk_import.py:295 -#: netbox/ipam/forms/bulk_import.py:476 -#: netbox/virtualization/forms/bulk_import.py:56 -#: netbox/virtualization/forms/bulk_import.py:82 -#: netbox/vpn/forms/bulk_import.py:39 netbox/wireless/forms/bulk_import.py:45 -msgid "Operational status" -msgstr "" - -#: netbox/circuits/forms/bulk_import.py:102 -#: netbox/circuits/forms/bulk_import.py:162 -#: netbox/dcim/forms/bulk_import.py:111 netbox/dcim/forms/bulk_import.py:156 -#: netbox/dcim/forms/bulk_import.py:360 netbox/dcim/forms/bulk_import.py:505 -#: netbox/dcim/forms/bulk_import.py:1245 netbox/dcim/forms/bulk_import.py:1390 -#: netbox/dcim/forms/bulk_import.py:1454 netbox/ipam/forms/bulk_import.py:42 -#: netbox/ipam/forms/bulk_import.py:71 netbox/ipam/forms/bulk_import.py:99 -#: netbox/ipam/forms/bulk_import.py:119 netbox/ipam/forms/bulk_import.py:139 -#: netbox/ipam/forms/bulk_import.py:168 netbox/ipam/forms/bulk_import.py:254 -#: netbox/ipam/forms/bulk_import.py:290 netbox/ipam/forms/bulk_import.py:471 -#: netbox/virtualization/forms/bulk_import.py:70 -#: netbox/virtualization/forms/bulk_import.py:119 -#: netbox/vpn/forms/bulk_import.py:63 netbox/wireless/forms/bulk_import.py:59 -#: netbox/wireless/forms/bulk_import.py:101 -msgid "Assigned tenant" -msgstr "" - -#: netbox/circuits/forms/bulk_import.py:120 -#: netbox/templates/circuits/inc/circuit_termination.html:6 -#: netbox/templates/circuits/inc/circuit_termination_fields.html:15 -#: netbox/templates/dcim/cable.html:68 netbox/templates/dcim/cable.html:72 -#: netbox/vpn/forms/bulk_import.py:100 netbox/vpn/forms/filtersets.py:77 -msgid "Termination" -msgstr "" - -#: netbox/circuits/forms/bulk_import.py:130 -#: netbox/circuits/forms/filtersets.py:147 -#: netbox/circuits/forms/filtersets.py:227 -#: netbox/circuits/forms/model_forms.py:144 +#: netbox/circuits/forms/bulk_edit.py:321 +#: netbox/circuits/forms/bulk_import.py:208 +#: netbox/circuits/forms/filtersets.py:158 +#: netbox/circuits/forms/filtersets.py:258 +#: netbox/circuits/forms/filtersets.py:348 +#: netbox/circuits/forms/filtersets.py:386 +#: netbox/circuits/forms/model_forms.py:325 +#: netbox/circuits/tables/virtual_circuits.py:51 +#: netbox/circuits/tables/virtual_circuits.py:99 msgid "Provider network" msgstr "" -#: netbox/circuits/forms/filtersets.py:30 -#: netbox/circuits/forms/filtersets.py:118 -#: netbox/circuits/forms/filtersets.py:200 netbox/dcim/forms/bulk_edit.py:339 -#: netbox/dcim/forms/bulk_edit.py:447 netbox/dcim/forms/bulk_edit.py:688 -#: netbox/dcim/forms/bulk_edit.py:743 netbox/dcim/forms/bulk_edit.py:897 -#: netbox/dcim/forms/bulk_import.py:235 netbox/dcim/forms/bulk_import.py:337 -#: netbox/dcim/forms/bulk_import.py:568 netbox/dcim/forms/bulk_import.py:1339 -#: netbox/dcim/forms/bulk_import.py:1373 netbox/dcim/forms/filtersets.py:95 -#: netbox/dcim/forms/filtersets.py:322 netbox/dcim/forms/filtersets.py:356 -#: netbox/dcim/forms/filtersets.py:396 netbox/dcim/forms/filtersets.py:447 -#: netbox/dcim/forms/filtersets.py:719 netbox/dcim/forms/filtersets.py:762 -#: netbox/dcim/forms/filtersets.py:977 netbox/dcim/forms/filtersets.py:1006 -#: netbox/dcim/forms/filtersets.py:1026 netbox/dcim/forms/filtersets.py:1090 -#: netbox/dcim/forms/filtersets.py:1120 netbox/dcim/forms/filtersets.py:1129 -#: netbox/dcim/forms/filtersets.py:1240 netbox/dcim/forms/filtersets.py:1264 -#: netbox/dcim/forms/filtersets.py:1289 netbox/dcim/forms/filtersets.py:1308 -#: netbox/dcim/forms/filtersets.py:1331 netbox/dcim/forms/filtersets.py:1442 -#: netbox/dcim/forms/filtersets.py:1466 netbox/dcim/forms/filtersets.py:1490 -#: netbox/dcim/forms/filtersets.py:1508 netbox/dcim/forms/filtersets.py:1525 -#: netbox/dcim/forms/model_forms.py:180 netbox/dcim/forms/model_forms.py:243 -#: netbox/dcim/forms/model_forms.py:468 netbox/dcim/forms/model_forms.py:728 -#: netbox/dcim/tables/devices.py:157 netbox/dcim/tables/power.py:30 -#: netbox/dcim/tables/racks.py:118 netbox/dcim/tables/racks.py:212 +#: netbox/circuits/forms/bulk_edit.py:365 +#: netbox/circuits/forms/bulk_import.py:254 +#: netbox/circuits/forms/filtersets.py:376 +#: netbox/circuits/forms/model_forms.py:365 netbox/dcim/forms/bulk_edit.py:361 +#: netbox/dcim/forms/bulk_edit.py:1280 netbox/dcim/forms/bulk_edit.py:1711 +#: netbox/dcim/forms/bulk_import.py:255 netbox/dcim/forms/bulk_import.py:1106 +#: netbox/dcim/forms/filtersets.py:368 netbox/dcim/forms/filtersets.py:778 +#: netbox/dcim/forms/filtersets.py:1539 netbox/dcim/forms/model_forms.py:256 +#: netbox/dcim/forms/model_forms.py:1090 netbox/dcim/forms/model_forms.py:1559 +#: netbox/dcim/forms/object_import.py:182 netbox/dcim/tables/devices.py:179 +#: netbox/dcim/tables/devices.py:840 netbox/dcim/tables/devices.py:966 +#: netbox/dcim/tables/devicetypes.py:306 netbox/dcim/tables/racks.py:128 +#: netbox/extras/filtersets.py:552 netbox/ipam/forms/bulk_edit.py:245 +#: netbox/ipam/forms/bulk_edit.py:295 netbox/ipam/forms/bulk_edit.py:343 +#: netbox/ipam/forms/bulk_edit.py:495 netbox/ipam/forms/bulk_import.py:193 +#: netbox/ipam/forms/bulk_import.py:261 netbox/ipam/forms/bulk_import.py:297 +#: netbox/ipam/forms/bulk_import.py:478 netbox/ipam/forms/filtersets.py:240 +#: netbox/ipam/forms/filtersets.py:292 netbox/ipam/forms/filtersets.py:363 +#: netbox/ipam/forms/filtersets.py:550 netbox/ipam/forms/model_forms.py:194 +#: netbox/ipam/forms/model_forms.py:220 netbox/ipam/forms/model_forms.py:251 +#: netbox/ipam/forms/model_forms.py:678 netbox/ipam/tables/ip.py:207 +#: netbox/ipam/tables/ip.py:266 netbox/ipam/tables/ip.py:317 +#: netbox/ipam/tables/vlans.py:99 netbox/ipam/tables/vlans.py:211 +#: netbox/templates/circuits/virtualcircuittermination.html:42 +#: netbox/templates/dcim/device.html:182 +#: netbox/templates/dcim/inc/panels/inventory_items.html:20 +#: netbox/templates/dcim/interface.html:178 +#: netbox/templates/dcim/interface.html:280 +#: netbox/templates/dcim/inventoryitem.html:40 +#: netbox/templates/dcim/rack.html:49 netbox/templates/ipam/ipaddress.html:41 +#: netbox/templates/ipam/iprange.html:50 netbox/templates/ipam/prefix.html:73 +#: netbox/templates/ipam/role.html:19 netbox/templates/ipam/vlan.html:52 +#: netbox/templates/virtualization/virtualmachine.html:23 +#: netbox/templates/vpn/tunneltermination.html:17 +#: netbox/templates/wireless/inc/wirelesslink_interface.html:20 +#: netbox/tenancy/forms/bulk_edit.py:142 netbox/tenancy/forms/filtersets.py:107 +#: netbox/tenancy/forms/model_forms.py:137 +#: netbox/tenancy/tables/contacts.py:102 +#: netbox/virtualization/forms/bulk_edit.py:127 +#: netbox/virtualization/forms/bulk_import.py:112 +#: netbox/virtualization/forms/filtersets.py:162 +#: netbox/virtualization/forms/model_forms.py:194 +#: netbox/virtualization/tables/virtualmachines.py:45 +#: netbox/vpn/forms/bulk_edit.py:87 netbox/vpn/forms/bulk_import.py:81 +#: netbox/vpn/forms/filtersets.py:85 netbox/vpn/forms/model_forms.py:79 +#: netbox/vpn/forms/model_forms.py:114 netbox/vpn/tables/tunnels.py:82 +msgid "Role" +msgstr "" + +#: netbox/circuits/forms/bulk_import.py:46 +#: netbox/circuits/forms/bulk_import.py:61 +#: netbox/circuits/forms/bulk_import.py:84 +msgid "Assigned provider" +msgstr "" + +#: netbox/circuits/forms/bulk_import.py:90 +msgid "Assigned provider account" +msgstr "" + +#: netbox/circuits/forms/bulk_import.py:97 +msgid "Type of circuit" +msgstr "" + +#: netbox/circuits/forms/bulk_import.py:102 +#: netbox/circuits/forms/bulk_import.py:229 netbox/dcim/forms/bulk_import.py:92 +#: netbox/dcim/forms/bulk_import.py:151 netbox/dcim/forms/bulk_import.py:252 +#: netbox/dcim/forms/bulk_import.py:534 netbox/dcim/forms/bulk_import.py:688 +#: netbox/dcim/forms/bulk_import.py:1139 netbox/dcim/forms/bulk_import.py:1492 +#: netbox/ipam/forms/bulk_import.py:190 netbox/ipam/forms/bulk_import.py:258 +#: netbox/ipam/forms/bulk_import.py:294 netbox/ipam/forms/bulk_import.py:475 +#: netbox/ipam/forms/bulk_import.py:488 +#: netbox/virtualization/forms/bulk_import.py:57 +#: netbox/virtualization/forms/bulk_import.py:88 +#: netbox/vpn/forms/bulk_import.py:39 netbox/wireless/forms/bulk_import.py:47 +msgid "Operational status" +msgstr "" + +#: netbox/circuits/forms/bulk_import.py:115 +#: netbox/circuits/forms/bulk_import.py:174 +#: netbox/circuits/forms/bulk_import.py:236 +#: netbox/dcim/forms/bulk_import.py:113 netbox/dcim/forms/bulk_import.py:158 +#: netbox/dcim/forms/bulk_import.py:362 netbox/dcim/forms/bulk_import.py:510 +#: netbox/dcim/forms/bulk_import.py:1342 netbox/dcim/forms/bulk_import.py:1487 +#: netbox/dcim/forms/bulk_import.py:1551 netbox/ipam/forms/bulk_import.py:45 +#: netbox/ipam/forms/bulk_import.py:74 netbox/ipam/forms/bulk_import.py:102 +#: netbox/ipam/forms/bulk_import.py:122 netbox/ipam/forms/bulk_import.py:142 +#: netbox/ipam/forms/bulk_import.py:171 netbox/ipam/forms/bulk_import.py:253 +#: netbox/ipam/forms/bulk_import.py:289 netbox/ipam/forms/bulk_import.py:470 +#: netbox/virtualization/forms/bulk_import.py:71 +#: netbox/virtualization/forms/bulk_import.py:125 +#: netbox/vpn/forms/bulk_import.py:63 netbox/wireless/forms/bulk_import.py:61 +#: netbox/wireless/forms/bulk_import.py:106 +msgid "Assigned tenant" +msgstr "" + +#: netbox/circuits/forms/bulk_import.py:139 +msgid "Termination type (app & model)" +msgstr "" + +#: netbox/circuits/forms/bulk_import.py:151 +#: netbox/circuits/forms/bulk_import.py:164 +msgid "Termination ID" +msgstr "" + +#: netbox/circuits/forms/bulk_import.py:185 +msgid "Circuit type (app & model)" +msgstr "" + +#: netbox/circuits/forms/bulk_import.py:211 +msgid "The network to which this virtual circuit belongs" +msgstr "" + +#: netbox/circuits/forms/bulk_import.py:217 +msgid "Assigned provider account (if any)" +msgstr "" + +#: netbox/circuits/forms/bulk_import.py:224 +msgid "Type of virtual circuit" +msgstr "" + +#: netbox/circuits/forms/bulk_import.py:256 netbox/vpn/forms/bulk_import.py:83 +msgid "Operational role" +msgstr "" + +#: netbox/circuits/forms/bulk_import.py:259 +#: netbox/circuits/forms/model_forms.py:368 +#: netbox/circuits/tables/virtual_circuits.py:112 +#: netbox/dcim/forms/bulk_import.py:1219 netbox/dcim/forms/model_forms.py:1164 +#: netbox/dcim/forms/model_forms.py:1433 netbox/dcim/forms/model_forms.py:1600 +#: netbox/dcim/forms/model_forms.py:1635 netbox/dcim/forms/model_forms.py:1765 +#: netbox/dcim/tables/connections.py:65 netbox/dcim/tables/devices.py:1140 +#: netbox/ipam/forms/bulk_import.py:317 netbox/ipam/forms/model_forms.py:282 +#: netbox/ipam/forms/model_forms.py:291 netbox/ipam/tables/fhrp.py:64 +#: netbox/ipam/tables/ip.py:322 netbox/ipam/tables/vlans.py:145 +#: netbox/templates/circuits/inc/circuit_termination_fields.html:52 +#: netbox/templates/circuits/virtualcircuittermination.html:53 +#: netbox/templates/circuits/virtualcircuittermination.html:60 +#: netbox/templates/dcim/frontport.html:106 +#: netbox/templates/dcim/interface.html:27 +#: netbox/templates/dcim/interface.html:241 +#: netbox/templates/dcim/interface.html:367 +#: netbox/templates/dcim/rearport.html:102 +#: netbox/templates/virtualization/vminterface.html:18 +#: netbox/templates/vpn/tunneltermination.html:31 +#: netbox/templates/wireless/inc/wirelesslink_interface.html:10 +#: netbox/templates/wireless/wirelesslink.html:10 +#: netbox/templates/wireless/wirelesslink.html:55 +#: netbox/virtualization/forms/model_forms.py:369 +#: netbox/vpn/forms/bulk_import.py:297 netbox/vpn/forms/model_forms.py:439 +#: netbox/vpn/forms/model_forms.py:448 netbox/wireless/forms/model_forms.py:116 +#: netbox/wireless/forms/model_forms.py:158 +msgid "Interface" +msgstr "" + +#: netbox/circuits/forms/filtersets.py:38 +#: netbox/circuits/forms/filtersets.py:129 +#: netbox/circuits/forms/filtersets.py:240 +#: netbox/circuits/tables/circuits.py:144 netbox/dcim/forms/bulk_edit.py:342 +#: netbox/dcim/forms/bulk_edit.py:450 netbox/dcim/forms/bulk_edit.py:691 +#: netbox/dcim/forms/bulk_edit.py:746 netbox/dcim/forms/bulk_edit.py:900 +#: netbox/dcim/forms/bulk_import.py:237 netbox/dcim/forms/bulk_import.py:339 +#: netbox/dcim/forms/bulk_import.py:573 netbox/dcim/forms/bulk_import.py:1436 +#: netbox/dcim/forms/bulk_import.py:1470 netbox/dcim/forms/filtersets.py:96 +#: netbox/dcim/forms/filtersets.py:323 netbox/dcim/forms/filtersets.py:357 +#: netbox/dcim/forms/filtersets.py:397 netbox/dcim/forms/filtersets.py:448 +#: netbox/dcim/forms/filtersets.py:720 netbox/dcim/forms/filtersets.py:763 +#: netbox/dcim/forms/filtersets.py:978 netbox/dcim/forms/filtersets.py:1007 +#: netbox/dcim/forms/filtersets.py:1027 netbox/dcim/forms/filtersets.py:1091 +#: netbox/dcim/forms/filtersets.py:1121 netbox/dcim/forms/filtersets.py:1130 +#: netbox/dcim/forms/filtersets.py:1241 netbox/dcim/forms/filtersets.py:1265 +#: netbox/dcim/forms/filtersets.py:1290 netbox/dcim/forms/filtersets.py:1309 +#: netbox/dcim/forms/filtersets.py:1336 netbox/dcim/forms/filtersets.py:1447 +#: netbox/dcim/forms/filtersets.py:1471 netbox/dcim/forms/filtersets.py:1495 +#: netbox/dcim/forms/filtersets.py:1513 netbox/dcim/forms/filtersets.py:1530 +#: netbox/dcim/forms/model_forms.py:184 netbox/dcim/forms/model_forms.py:248 +#: netbox/dcim/forms/model_forms.py:478 netbox/dcim/forms/model_forms.py:739 +#: netbox/dcim/tables/devices.py:167 netbox/dcim/tables/power.py:30 +#: netbox/dcim/tables/racks.py:117 netbox/dcim/tables/racks.py:211 #: netbox/extras/filtersets.py:536 netbox/extras/forms/filtersets.py:320 -#: netbox/ipam/forms/filtersets.py:173 netbox/ipam/forms/filtersets.py:414 -#: netbox/ipam/forms/filtersets.py:437 netbox/ipam/forms/filtersets.py:467 +#: netbox/ipam/forms/filtersets.py:234 netbox/ipam/forms/filtersets.py:417 +#: netbox/ipam/forms/filtersets.py:440 netbox/ipam/forms/filtersets.py:507 #: netbox/templates/dcim/device.html:26 #: netbox/templates/dcim/device_edit.html:30 #: netbox/templates/dcim/inc/cable_termination.html:12 #: netbox/templates/dcim/location.html:26 #: netbox/templates/dcim/powerpanel.html:26 netbox/templates/dcim/rack.html:24 #: netbox/templates/dcim/rackreservation.html:32 -#: netbox/virtualization/forms/filtersets.py:46 -#: netbox/virtualization/forms/filtersets.py:100 -#: netbox/wireless/forms/model_forms.py:87 -#: netbox/wireless/forms/model_forms.py:129 +#: netbox/virtualization/forms/filtersets.py:79 +#: netbox/virtualization/forms/filtersets.py:105 +#: netbox/wireless/forms/filtersets.py:93 +#: netbox/wireless/forms/model_forms.py:90 +#: netbox/wireless/forms/model_forms.py:132 msgid "Location" msgstr "" -#: netbox/circuits/forms/filtersets.py:32 -#: netbox/circuits/forms/filtersets.py:120 netbox/dcim/forms/filtersets.py:144 -#: netbox/dcim/forms/filtersets.py:158 netbox/dcim/forms/filtersets.py:174 -#: netbox/dcim/forms/filtersets.py:206 netbox/dcim/forms/filtersets.py:328 -#: netbox/dcim/forms/filtersets.py:400 netbox/dcim/forms/filtersets.py:471 -#: netbox/dcim/forms/filtersets.py:723 netbox/dcim/forms/filtersets.py:1091 +#: netbox/circuits/forms/filtersets.py:40 +#: netbox/circuits/forms/filtersets.py:131 netbox/dcim/forms/filtersets.py:145 +#: netbox/dcim/forms/filtersets.py:159 netbox/dcim/forms/filtersets.py:175 +#: netbox/dcim/forms/filtersets.py:207 netbox/dcim/forms/filtersets.py:329 +#: netbox/dcim/forms/filtersets.py:401 netbox/dcim/forms/filtersets.py:472 +#: netbox/dcim/forms/filtersets.py:724 netbox/dcim/forms/filtersets.py:1092 #: netbox/netbox/navigation/menu.py:31 netbox/netbox/navigation/menu.py:33 -#: netbox/tenancy/forms/filtersets.py:42 netbox/tenancy/tables/columns.py:70 +#: netbox/tenancy/forms/filtersets.py:42 netbox/tenancy/tables/columns.py:55 #: netbox/tenancy/tables/contacts.py:25 netbox/tenancy/views.py:19 #: netbox/virtualization/forms/filtersets.py:37 #: netbox/virtualization/forms/filtersets.py:48 -#: netbox/virtualization/forms/filtersets.py:106 +#: netbox/virtualization/forms/filtersets.py:111 msgid "Contacts" msgstr "" -#: netbox/circuits/forms/filtersets.py:37 -#: netbox/circuits/forms/filtersets.py:157 netbox/dcim/forms/bulk_edit.py:113 -#: netbox/dcim/forms/bulk_edit.py:314 netbox/dcim/forms/bulk_edit.py:872 -#: netbox/dcim/forms/bulk_import.py:93 netbox/dcim/forms/filtersets.py:73 -#: netbox/dcim/forms/filtersets.py:185 netbox/dcim/forms/filtersets.py:211 -#: netbox/dcim/forms/filtersets.py:334 netbox/dcim/forms/filtersets.py:425 -#: netbox/dcim/forms/filtersets.py:739 netbox/dcim/forms/filtersets.py:983 -#: netbox/dcim/forms/filtersets.py:1013 netbox/dcim/forms/filtersets.py:1097 -#: netbox/dcim/forms/filtersets.py:1136 netbox/dcim/forms/filtersets.py:1576 -#: netbox/dcim/forms/filtersets.py:1600 netbox/dcim/forms/filtersets.py:1624 -#: netbox/dcim/forms/model_forms.py:112 netbox/dcim/forms/object_create.py:367 -#: netbox/dcim/tables/devices.py:143 netbox/dcim/tables/sites.py:85 -#: netbox/extras/filtersets.py:503 netbox/ipam/forms/bulk_edit.py:208 -#: netbox/ipam/forms/bulk_edit.py:474 netbox/ipam/forms/filtersets.py:217 -#: netbox/ipam/forms/filtersets.py:422 netbox/ipam/forms/filtersets.py:475 -#: netbox/templates/dcim/device.html:18 netbox/templates/dcim/rack.html:16 +#: netbox/circuits/forms/filtersets.py:45 +#: netbox/circuits/forms/filtersets.py:168 +#: netbox/circuits/forms/filtersets.py:225 +#: netbox/circuits/tables/circuits.py:139 netbox/dcim/forms/bulk_edit.py:116 +#: netbox/dcim/forms/bulk_edit.py:317 netbox/dcim/forms/bulk_edit.py:875 +#: netbox/dcim/forms/bulk_import.py:95 netbox/dcim/forms/filtersets.py:74 +#: netbox/dcim/forms/filtersets.py:186 netbox/dcim/forms/filtersets.py:212 +#: netbox/dcim/forms/filtersets.py:335 netbox/dcim/forms/filtersets.py:426 +#: netbox/dcim/forms/filtersets.py:740 netbox/dcim/forms/filtersets.py:984 +#: netbox/dcim/forms/filtersets.py:1014 netbox/dcim/forms/filtersets.py:1098 +#: netbox/dcim/forms/filtersets.py:1137 netbox/dcim/forms/filtersets.py:1614 +#: netbox/dcim/forms/filtersets.py:1638 netbox/dcim/forms/filtersets.py:1662 +#: netbox/dcim/forms/model_forms.py:114 netbox/dcim/forms/object_create.py:367 +#: netbox/dcim/tables/devices.py:153 netbox/dcim/tables/sites.py:85 +#: netbox/extras/filtersets.py:503 netbox/ipam/forms/bulk_edit.py:458 +#: netbox/ipam/forms/filtersets.py:219 netbox/ipam/forms/filtersets.py:425 +#: netbox/ipam/forms/filtersets.py:516 netbox/templates/dcim/device.html:18 +#: netbox/templates/dcim/rack.html:16 #: netbox/templates/dcim/rackreservation.html:22 #: netbox/templates/dcim/region.html:26 netbox/templates/dcim/site.html:31 -#: netbox/templates/ipam/prefix.html:49 netbox/templates/ipam/vlan.html:16 -#: netbox/virtualization/forms/bulk_edit.py:81 +#: netbox/templates/ipam/vlan.html:16 #: netbox/virtualization/forms/filtersets.py:59 -#: netbox/virtualization/forms/filtersets.py:133 -#: netbox/virtualization/forms/model_forms.py:92 -#: netbox/vpn/forms/filtersets.py:257 +#: netbox/virtualization/forms/filtersets.py:138 +#: netbox/virtualization/forms/model_forms.py:91 +#: netbox/vpn/forms/filtersets.py:257 netbox/wireless/forms/filtersets.py:73 msgid "Region" msgstr "" -#: netbox/circuits/forms/filtersets.py:42 -#: netbox/circuits/forms/filtersets.py:162 netbox/dcim/forms/bulk_edit.py:322 -#: netbox/dcim/forms/bulk_edit.py:880 netbox/dcim/forms/filtersets.py:78 -#: netbox/dcim/forms/filtersets.py:190 netbox/dcim/forms/filtersets.py:216 -#: netbox/dcim/forms/filtersets.py:347 netbox/dcim/forms/filtersets.py:430 -#: netbox/dcim/forms/filtersets.py:744 netbox/dcim/forms/filtersets.py:988 -#: netbox/dcim/forms/filtersets.py:1102 netbox/dcim/forms/filtersets.py:1141 +#: netbox/circuits/forms/filtersets.py:50 +#: netbox/circuits/forms/filtersets.py:173 +#: netbox/circuits/forms/filtersets.py:230 netbox/dcim/forms/bulk_edit.py:325 +#: netbox/dcim/forms/bulk_edit.py:883 netbox/dcim/forms/filtersets.py:79 +#: netbox/dcim/forms/filtersets.py:191 netbox/dcim/forms/filtersets.py:217 +#: netbox/dcim/forms/filtersets.py:348 netbox/dcim/forms/filtersets.py:431 +#: netbox/dcim/forms/filtersets.py:745 netbox/dcim/forms/filtersets.py:989 +#: netbox/dcim/forms/filtersets.py:1103 netbox/dcim/forms/filtersets.py:1142 #: netbox/dcim/forms/object_create.py:375 netbox/extras/filtersets.py:520 -#: netbox/ipam/forms/bulk_edit.py:213 netbox/ipam/forms/bulk_edit.py:479 -#: netbox/ipam/forms/filtersets.py:222 netbox/ipam/forms/filtersets.py:427 -#: netbox/ipam/forms/filtersets.py:480 -#: netbox/virtualization/forms/bulk_edit.py:86 -#: netbox/virtualization/forms/filtersets.py:69 -#: netbox/virtualization/forms/filtersets.py:138 -#: netbox/virtualization/forms/model_forms.py:98 +#: netbox/ipam/forms/bulk_edit.py:463 netbox/ipam/forms/filtersets.py:224 +#: netbox/ipam/forms/filtersets.py:430 netbox/ipam/forms/filtersets.py:521 +#: netbox/virtualization/forms/filtersets.py:64 +#: netbox/virtualization/forms/filtersets.py:143 +#: netbox/virtualization/forms/model_forms.py:97 +#: netbox/wireless/forms/filtersets.py:78 msgid "Site group" msgstr "" -#: netbox/circuits/forms/filtersets.py:65 -#: netbox/circuits/forms/filtersets.py:83 -#: netbox/circuits/forms/filtersets.py:102 -#: netbox/circuits/forms/filtersets.py:117 netbox/core/forms/filtersets.py:67 -#: netbox/core/forms/filtersets.py:135 netbox/dcim/forms/bulk_edit.py:843 -#: netbox/dcim/forms/filtersets.py:172 netbox/dcim/forms/filtersets.py:204 -#: netbox/dcim/forms/filtersets.py:915 netbox/dcim/forms/filtersets.py:1007 -#: netbox/dcim/forms/filtersets.py:1131 netbox/dcim/forms/filtersets.py:1239 -#: netbox/dcim/forms/filtersets.py:1263 netbox/dcim/forms/filtersets.py:1288 -#: netbox/dcim/forms/filtersets.py:1307 netbox/dcim/forms/filtersets.py:1327 -#: netbox/dcim/forms/filtersets.py:1441 netbox/dcim/forms/filtersets.py:1465 -#: netbox/dcim/forms/filtersets.py:1489 netbox/dcim/forms/filtersets.py:1507 -#: netbox/dcim/forms/filtersets.py:1523 netbox/extras/forms/bulk_edit.py:90 -#: netbox/extras/forms/filtersets.py:44 netbox/extras/forms/filtersets.py:134 -#: netbox/extras/forms/filtersets.py:165 netbox/extras/forms/filtersets.py:205 -#: netbox/extras/forms/filtersets.py:221 netbox/extras/forms/filtersets.py:252 -#: netbox/extras/forms/filtersets.py:276 netbox/extras/forms/filtersets.py:441 -#: netbox/ipam/forms/filtersets.py:99 netbox/ipam/forms/filtersets.py:266 -#: netbox/ipam/forms/filtersets.py:307 netbox/ipam/forms/filtersets.py:382 -#: netbox/ipam/forms/filtersets.py:468 netbox/ipam/forms/filtersets.py:527 -#: netbox/ipam/forms/filtersets.py:545 netbox/netbox/tables/tables.py:256 -#: netbox/virtualization/forms/filtersets.py:45 -#: netbox/virtualization/forms/filtersets.py:103 -#: netbox/virtualization/forms/filtersets.py:198 -#: netbox/virtualization/forms/filtersets.py:243 -#: netbox/vpn/forms/filtersets.py:213 netbox/wireless/forms/bulk_edit.py:150 -#: netbox/wireless/forms/filtersets.py:34 -#: netbox/wireless/forms/filtersets.py:74 -msgid "Attributes" -msgstr "" - -#: netbox/circuits/forms/filtersets.py:73 netbox/circuits/tables/circuits.py:63 +#: netbox/circuits/forms/filtersets.py:81 netbox/circuits/tables/circuits.py:62 #: netbox/circuits/tables/providers.py:66 +#: netbox/circuits/tables/virtual_circuits.py:55 +#: netbox/circuits/tables/virtual_circuits.py:103 #: netbox/templates/circuits/circuit.html:22 #: netbox/templates/circuits/provideraccount.html:24 msgid "Account" msgstr "" -#: netbox/circuits/forms/filtersets.py:217 +#: netbox/circuits/forms/filtersets.py:248 msgid "Term Side" msgstr "" -#: netbox/circuits/forms/filtersets.py:250 netbox/dcim/forms/bulk_edit.py:1557 -#: netbox/extras/forms/model_forms.py:582 netbox/ipam/forms/filtersets.py:142 -#: netbox/ipam/forms/filtersets.py:546 netbox/ipam/forms/model_forms.py:327 +#: netbox/circuits/forms/filtersets.py:281 netbox/dcim/forms/bulk_edit.py:1570 +#: netbox/extras/forms/model_forms.py:582 netbox/ipam/forms/filtersets.py:144 +#: netbox/ipam/forms/filtersets.py:598 netbox/ipam/forms/model_forms.py:329 +#: netbox/templates/dcim/macaddress.html:25 #: netbox/templates/extras/configcontext.html:60 #: netbox/templates/ipam/ipaddress.html:59 -#: netbox/templates/ipam/vlan_edit.html:30 +#: netbox/templates/ipam/vlan_edit.html:38 #: netbox/tenancy/forms/filtersets.py:87 netbox/users/forms/model_forms.py:314 msgid "Assignment" msgstr "" -#: netbox/circuits/forms/filtersets.py:265 -#: netbox/circuits/forms/model_forms.py:195 -#: netbox/circuits/tables/circuits.py:155 netbox/dcim/forms/bulk_edit.py:118 -#: netbox/dcim/forms/bulk_import.py:100 netbox/dcim/forms/model_forms.py:117 +#: netbox/circuits/forms/filtersets.py:296 +#: netbox/circuits/forms/model_forms.py:252 +#: netbox/circuits/tables/circuits.py:191 netbox/dcim/forms/bulk_edit.py:121 +#: netbox/dcim/forms/bulk_import.py:102 netbox/dcim/forms/model_forms.py:120 #: netbox/dcim/tables/sites.py:89 netbox/extras/forms/filtersets.py:480 -#: netbox/ipam/filtersets.py:1001 netbox/ipam/forms/bulk_edit.py:493 -#: netbox/ipam/forms/bulk_import.py:460 netbox/ipam/forms/model_forms.py:561 -#: netbox/ipam/tables/fhrp.py:67 netbox/ipam/tables/vlans.py:122 -#: netbox/ipam/tables/vlans.py:226 +#: netbox/ipam/filtersets.py:968 netbox/ipam/forms/bulk_edit.py:477 +#: netbox/ipam/forms/bulk_import.py:459 netbox/ipam/forms/model_forms.py:563 +#: netbox/ipam/tables/fhrp.py:67 netbox/ipam/tables/vlans.py:91 +#: netbox/ipam/tables/vlans.py:202 #: netbox/templates/circuits/circuitgroupassignment.html:22 -#: netbox/templates/dcim/interface.html:284 netbox/templates/dcim/site.html:37 +#: netbox/templates/dcim/interface.html:341 netbox/templates/dcim/site.html:37 #: netbox/templates/ipam/inc/panels/fhrp_groups.html:23 #: netbox/templates/ipam/vlan.html:27 netbox/templates/tenancy/contact.html:21 #: netbox/templates/tenancy/tenant.html:20 netbox/templates/users/group.html:6 @@ -1105,224 +1367,239 @@ msgstr "" #: netbox/users/filtersets.py:62 netbox/users/filtersets.py:185 #: netbox/users/forms/filtersets.py:31 netbox/users/forms/filtersets.py:37 #: netbox/users/forms/filtersets.py:79 -#: netbox/virtualization/forms/bulk_edit.py:65 -#: netbox/virtualization/forms/bulk_import.py:47 -#: netbox/virtualization/forms/filtersets.py:85 -#: netbox/virtualization/forms/model_forms.py:66 +#: netbox/virtualization/forms/bulk_edit.py:66 +#: netbox/virtualization/forms/bulk_import.py:48 +#: netbox/virtualization/forms/filtersets.py:90 +#: netbox/virtualization/forms/model_forms.py:69 #: netbox/virtualization/tables/clusters.py:70 #: netbox/vpn/forms/bulk_edit.py:112 netbox/vpn/forms/bulk_import.py:158 #: netbox/vpn/forms/filtersets.py:116 netbox/vpn/tables/crypto.py:31 -#: netbox/vpn/tables/tunnels.py:44 netbox/wireless/forms/bulk_edit.py:48 -#: netbox/wireless/forms/bulk_import.py:36 -#: netbox/wireless/forms/filtersets.py:46 -#: netbox/wireless/forms/model_forms.py:40 +#: netbox/vpn/tables/tunnels.py:44 netbox/wireless/forms/bulk_edit.py:50 +#: netbox/wireless/forms/bulk_import.py:38 +#: netbox/wireless/forms/filtersets.py:49 +#: netbox/wireless/forms/model_forms.py:41 #: netbox/wireless/tables/wirelesslan.py:48 msgid "Group" msgstr "" -#: netbox/circuits/forms/model_forms.py:182 +#: netbox/circuits/forms/model_forms.py:239 #: netbox/templates/circuits/circuitgroup.html:25 msgid "Circuit Group" msgstr "" -#: netbox/circuits/models/circuits.py:27 netbox/dcim/models/cables.py:67 -#: netbox/dcim/models/device_component_templates.py:517 -#: netbox/dcim/models/device_component_templates.py:617 -#: netbox/dcim/models/device_components.py:975 -#: netbox/dcim/models/device_components.py:1049 -#: netbox/dcim/models/device_components.py:1204 -#: netbox/dcim/models/devices.py:479 netbox/dcim/models/racks.py:224 +#: netbox/circuits/forms/model_forms.py:259 +msgid "Circuit type" +msgstr "" + +#: netbox/circuits/forms/model_forms.py:270 +msgid "Group Assignment" +msgstr "" + +#: netbox/circuits/models/base.py:18 netbox/dcim/models/cables.py:67 +#: netbox/dcim/models/device_component_templates.py:531 +#: netbox/dcim/models/device_component_templates.py:631 +#: netbox/dcim/models/device_components.py:476 +#: netbox/dcim/models/device_components.py:1024 +#: netbox/dcim/models/device_components.py:1095 +#: netbox/dcim/models/device_components.py:1241 +#: netbox/dcim/models/devices.py:477 netbox/dcim/models/racks.py:221 #: netbox/extras/models/tags.py:28 msgid "color" msgstr "" -#: netbox/circuits/models/circuits.py:36 +#: netbox/circuits/models/circuits.py:34 msgid "circuit type" msgstr "" -#: netbox/circuits/models/circuits.py:37 +#: netbox/circuits/models/circuits.py:35 msgid "circuit types" msgstr "" -#: netbox/circuits/models/circuits.py:48 +#: netbox/circuits/models/circuits.py:46 +#: netbox/circuits/models/virtual_circuits.py:38 msgid "circuit ID" msgstr "" -#: netbox/circuits/models/circuits.py:49 +#: netbox/circuits/models/circuits.py:47 +#: netbox/circuits/models/virtual_circuits.py:39 msgid "Unique circuit ID" msgstr "" -#: netbox/circuits/models/circuits.py:69 netbox/core/models/data.py:52 +#: netbox/circuits/models/circuits.py:67 +#: netbox/circuits/models/virtual_circuits.py:59 netbox/core/models/data.py:52 #: netbox/core/models/jobs.py:85 netbox/dcim/models/cables.py:49 -#: netbox/dcim/models/devices.py:653 netbox/dcim/models/devices.py:1173 -#: netbox/dcim/models/devices.py:1404 netbox/dcim/models/power.py:96 -#: netbox/dcim/models/racks.py:297 netbox/dcim/models/sites.py:154 -#: netbox/dcim/models/sites.py:266 netbox/ipam/models/ip.py:253 -#: netbox/ipam/models/ip.py:522 netbox/ipam/models/ip.py:730 -#: netbox/ipam/models/vlans.py:211 netbox/virtualization/models/clusters.py:74 -#: netbox/virtualization/models/virtualmachines.py:84 -#: netbox/vpn/models/tunnels.py:40 netbox/wireless/models.py:95 -#: netbox/wireless/models.py:159 +#: netbox/dcim/models/device_components.py:1281 +#: netbox/dcim/models/devices.py:644 netbox/dcim/models/devices.py:1176 +#: netbox/dcim/models/devices.py:1403 netbox/dcim/models/power.py:94 +#: netbox/dcim/models/racks.py:288 netbox/dcim/models/sites.py:154 +#: netbox/dcim/models/sites.py:270 netbox/ipam/models/ip.py:237 +#: netbox/ipam/models/ip.py:508 netbox/ipam/models/ip.py:729 +#: netbox/ipam/models/vlans.py:210 netbox/virtualization/models/clusters.py:70 +#: netbox/virtualization/models/virtualmachines.py:79 +#: netbox/vpn/models/tunnels.py:38 netbox/wireless/models.py:95 +#: netbox/wireless/models.py:156 msgid "status" msgstr "" -#: netbox/circuits/models/circuits.py:84 netbox/templates/core/plugin.html:20 +#: netbox/circuits/models/circuits.py:82 netbox/templates/core/plugin.html:20 msgid "installed" msgstr "" -#: netbox/circuits/models/circuits.py:89 +#: netbox/circuits/models/circuits.py:87 msgid "terminates" msgstr "" -#: netbox/circuits/models/circuits.py:94 +#: netbox/circuits/models/circuits.py:92 msgid "commit rate (Kbps)" msgstr "" -#: netbox/circuits/models/circuits.py:95 +#: netbox/circuits/models/circuits.py:93 msgid "Committed rate" msgstr "" -#: netbox/circuits/models/circuits.py:137 +#: netbox/circuits/models/circuits.py:142 msgid "circuit" msgstr "" -#: netbox/circuits/models/circuits.py:138 +#: netbox/circuits/models/circuits.py:143 msgid "circuits" msgstr "" -#: netbox/circuits/models/circuits.py:170 +#: netbox/circuits/models/circuits.py:172 msgid "circuit group" msgstr "" -#: netbox/circuits/models/circuits.py:171 +#: netbox/circuits/models/circuits.py:173 msgid "circuit groups" msgstr "" -#: netbox/circuits/models/circuits.py:195 netbox/ipam/models/fhrp.py:93 -#: netbox/tenancy/models/contacts.py:134 +#: netbox/circuits/models/circuits.py:190 +msgid "member ID" +msgstr "" + +#: netbox/circuits/models/circuits.py:202 netbox/ipam/models/fhrp.py:90 +#: netbox/tenancy/models/contacts.py:126 msgid "priority" msgstr "" -#: netbox/circuits/models/circuits.py:213 +#: netbox/circuits/models/circuits.py:220 msgid "Circuit group assignment" msgstr "" -#: netbox/circuits/models/circuits.py:214 +#: netbox/circuits/models/circuits.py:221 msgid "Circuit group assignments" msgstr "" -#: netbox/circuits/models/circuits.py:240 -msgid "termination" -msgstr "" - -#: netbox/circuits/models/circuits.py:257 -msgid "port speed (Kbps)" -msgstr "" - -#: netbox/circuits/models/circuits.py:260 -msgid "Physical circuit speed" -msgstr "" - -#: netbox/circuits/models/circuits.py:265 -msgid "upstream speed (Kbps)" +#: netbox/circuits/models/circuits.py:247 +msgid "termination side" msgstr "" #: netbox/circuits/models/circuits.py:266 +msgid "port speed (Kbps)" +msgstr "" + +#: netbox/circuits/models/circuits.py:269 +msgid "Physical circuit speed" +msgstr "" + +#: netbox/circuits/models/circuits.py:274 +msgid "upstream speed (Kbps)" +msgstr "" + +#: netbox/circuits/models/circuits.py:275 msgid "Upstream speed, if different from port speed" msgstr "" -#: netbox/circuits/models/circuits.py:271 +#: netbox/circuits/models/circuits.py:280 msgid "cross-connect ID" msgstr "" -#: netbox/circuits/models/circuits.py:272 +#: netbox/circuits/models/circuits.py:281 msgid "ID of the local cross-connect" msgstr "" -#: netbox/circuits/models/circuits.py:277 +#: netbox/circuits/models/circuits.py:286 msgid "patch panel/port(s)" msgstr "" -#: netbox/circuits/models/circuits.py:278 +#: netbox/circuits/models/circuits.py:287 msgid "Patch panel ID and port number(s)" msgstr "" -#: netbox/circuits/models/circuits.py:281 -#: netbox/dcim/models/device_component_templates.py:61 -#: netbox/dcim/models/device_components.py:68 netbox/dcim/models/racks.py:685 +#: netbox/circuits/models/circuits.py:290 +#: netbox/circuits/models/virtual_circuits.py:144 +#: netbox/dcim/models/device_component_templates.py:57 +#: netbox/dcim/models/device_components.py:63 netbox/dcim/models/racks.py:676 #: netbox/extras/models/configs.py:45 netbox/extras/models/configs.py:219 #: netbox/extras/models/customfields.py:125 netbox/extras/models/models.py:61 #: netbox/extras/models/models.py:158 netbox/extras/models/models.py:396 #: netbox/extras/models/models.py:511 netbox/extras/models/notifications.py:131 -#: netbox/extras/models/staging.py:31 netbox/extras/models/tags.py:32 -#: netbox/netbox/models/__init__.py:110 netbox/netbox/models/__init__.py:145 -#: netbox/netbox/models/__init__.py:191 netbox/users/models/permissions.py:24 -#: netbox/users/models/tokens.py:57 netbox/users/models/users.py:33 -#: netbox/virtualization/models/virtualmachines.py:289 +#: netbox/extras/models/staging.py:32 netbox/extras/models/tags.py:32 +#: netbox/ipam/models/vlans.py:358 netbox/netbox/models/__init__.py:114 +#: netbox/netbox/models/__init__.py:149 netbox/netbox/models/__init__.py:195 +#: netbox/users/models/permissions.py:24 netbox/users/models/tokens.py:57 +#: netbox/users/models/users.py:33 +#: netbox/virtualization/models/virtualmachines.py:276 msgid "description" msgstr "" -#: netbox/circuits/models/circuits.py:294 +#: netbox/circuits/models/circuits.py:340 msgid "circuit termination" msgstr "" -#: netbox/circuits/models/circuits.py:295 +#: netbox/circuits/models/circuits.py:341 msgid "circuit terminations" msgstr "" -#: netbox/circuits/models/circuits.py:308 -msgid "" -"A circuit termination must attach to either a site or a provider network." +#: netbox/circuits/models/circuits.py:354 +msgid "A circuit termination must attach to termination." msgstr "" -#: netbox/circuits/models/circuits.py:310 -msgid "" -"A circuit termination cannot attach to both a site and a provider network." -msgstr "" - -#: netbox/circuits/models/providers.py:22 -#: netbox/circuits/models/providers.py:66 -#: netbox/circuits/models/providers.py:104 netbox/core/models/data.py:39 +#: netbox/circuits/models/providers.py:21 +#: netbox/circuits/models/providers.py:63 +#: netbox/circuits/models/providers.py:98 netbox/core/models/data.py:39 #: netbox/core/models/jobs.py:46 #: netbox/dcim/models/device_component_templates.py:43 -#: netbox/dcim/models/device_components.py:53 netbox/dcim/models/devices.py:593 -#: netbox/dcim/models/devices.py:1335 netbox/dcim/models/devices.py:1400 -#: netbox/dcim/models/power.py:39 netbox/dcim/models/power.py:92 -#: netbox/dcim/models/racks.py:262 netbox/dcim/models/sites.py:138 +#: netbox/dcim/models/device_components.py:52 netbox/dcim/models/devices.py:588 +#: netbox/dcim/models/devices.py:1335 netbox/dcim/models/devices.py:1398 +#: netbox/dcim/models/power.py:38 netbox/dcim/models/power.py:89 +#: netbox/dcim/models/racks.py:257 netbox/dcim/models/sites.py:142 #: netbox/extras/models/configs.py:36 netbox/extras/models/configs.py:215 #: netbox/extras/models/customfields.py:92 netbox/extras/models/models.py:56 #: netbox/extras/models/models.py:153 netbox/extras/models/models.py:296 #: netbox/extras/models/models.py:392 netbox/extras/models/models.py:501 #: netbox/extras/models/models.py:596 netbox/extras/models/notifications.py:126 -#: netbox/extras/models/scripts.py:30 netbox/extras/models/staging.py:26 -#: netbox/ipam/models/asns.py:18 netbox/ipam/models/fhrp.py:25 -#: netbox/ipam/models/services.py:52 netbox/ipam/models/services.py:88 -#: netbox/ipam/models/vlans.py:36 netbox/ipam/models/vlans.py:200 -#: netbox/ipam/models/vrfs.py:22 netbox/ipam/models/vrfs.py:79 -#: netbox/netbox/models/__init__.py:137 netbox/netbox/models/__init__.py:181 -#: netbox/tenancy/models/contacts.py:64 netbox/tenancy/models/tenants.py:20 -#: netbox/tenancy/models/tenants.py:45 netbox/users/models/permissions.py:20 -#: netbox/users/models/users.py:28 netbox/virtualization/models/clusters.py:57 -#: netbox/virtualization/models/virtualmachines.py:72 -#: netbox/virtualization/models/virtualmachines.py:279 -#: netbox/vpn/models/crypto.py:24 netbox/vpn/models/crypto.py:71 -#: netbox/vpn/models/crypto.py:131 netbox/vpn/models/crypto.py:183 -#: netbox/vpn/models/crypto.py:221 netbox/vpn/models/l2vpn.py:22 -#: netbox/vpn/models/tunnels.py:35 netbox/wireless/models.py:51 +#: netbox/extras/models/scripts.py:30 netbox/extras/models/staging.py:27 +#: netbox/ipam/models/asns.py:17 netbox/ipam/models/fhrp.py:24 +#: netbox/ipam/models/services.py:51 netbox/ipam/models/services.py:84 +#: netbox/ipam/models/vlans.py:37 netbox/ipam/models/vlans.py:199 +#: netbox/ipam/models/vlans.py:337 netbox/ipam/models/vrfs.py:20 +#: netbox/ipam/models/vrfs.py:75 netbox/netbox/models/__init__.py:141 +#: netbox/netbox/models/__init__.py:185 netbox/tenancy/models/contacts.py:58 +#: netbox/tenancy/models/tenants.py:19 netbox/tenancy/models/tenants.py:42 +#: netbox/users/models/permissions.py:20 netbox/users/models/users.py:28 +#: netbox/virtualization/models/clusters.py:52 +#: netbox/virtualization/models/virtualmachines.py:71 +#: netbox/virtualization/models/virtualmachines.py:271 +#: netbox/virtualization/models/virtualmachines.py:305 +#: netbox/vpn/models/crypto.py:23 netbox/vpn/models/crypto.py:69 +#: netbox/vpn/models/crypto.py:128 netbox/vpn/models/crypto.py:180 +#: netbox/vpn/models/crypto.py:216 netbox/vpn/models/l2vpn.py:21 +#: netbox/vpn/models/tunnels.py:32 netbox/wireless/models.py:53 msgid "name" msgstr "" -#: netbox/circuits/models/providers.py:25 +#: netbox/circuits/models/providers.py:24 msgid "Full name of the provider" msgstr "" -#: netbox/circuits/models/providers.py:28 netbox/dcim/models/devices.py:86 +#: netbox/circuits/models/providers.py:28 netbox/dcim/models/devices.py:87 #: netbox/dcim/models/racks.py:137 netbox/dcim/models/sites.py:149 #: netbox/extras/models/models.py:506 netbox/ipam/models/asns.py:23 -#: netbox/ipam/models/vlans.py:40 netbox/netbox/models/__init__.py:141 -#: netbox/netbox/models/__init__.py:186 netbox/tenancy/models/tenants.py:25 -#: netbox/tenancy/models/tenants.py:49 netbox/vpn/models/l2vpn.py:27 -#: netbox/wireless/models.py:56 +#: netbox/ipam/models/vlans.py:42 netbox/netbox/models/__init__.py:145 +#: netbox/netbox/models/__init__.py:190 netbox/tenancy/models/tenants.py:25 +#: netbox/tenancy/models/tenants.py:47 netbox/vpn/models/l2vpn.py:27 +#: netbox/wireless/models.py:59 msgid "slug" msgstr "" @@ -1334,46 +1611,77 @@ msgstr "" msgid "providers" msgstr "" -#: netbox/circuits/models/providers.py:63 +#: netbox/circuits/models/providers.py:60 msgid "account ID" msgstr "" -#: netbox/circuits/models/providers.py:86 +#: netbox/circuits/models/providers.py:83 msgid "provider account" msgstr "" -#: netbox/circuits/models/providers.py:87 +#: netbox/circuits/models/providers.py:84 msgid "provider accounts" msgstr "" -#: netbox/circuits/models/providers.py:115 +#: netbox/circuits/models/providers.py:110 msgid "service ID" msgstr "" -#: netbox/circuits/models/providers.py:126 +#: netbox/circuits/models/providers.py:121 msgid "provider network" msgstr "" -#: netbox/circuits/models/providers.py:127 +#: netbox/circuits/models/providers.py:122 msgid "provider networks" msgstr "" -#: netbox/circuits/tables/circuits.py:32 netbox/circuits/tables/circuits.py:132 +#: netbox/circuits/models/virtual_circuits.py:28 +msgid "virtual circuit type" +msgstr "" + +#: netbox/circuits/models/virtual_circuits.py:29 +msgid "virtual circuit types" +msgstr "" + +#: netbox/circuits/models/virtual_circuits.py:99 +msgid "virtual circuit" +msgstr "" + +#: netbox/circuits/models/virtual_circuits.py:100 +msgid "virtual circuits" +msgstr "" + +#: netbox/circuits/models/virtual_circuits.py:133 netbox/ipam/models/ip.py:194 +#: netbox/ipam/models/ip.py:736 netbox/vpn/models/tunnels.py:109 +msgid "role" +msgstr "" + +#: netbox/circuits/models/virtual_circuits.py:151 +msgid "virtual circuit termination" +msgstr "" + +#: netbox/circuits/models/virtual_circuits.py:152 +msgid "virtual circuit terminations" +msgstr "" + +#: netbox/circuits/tables/circuits.py:30 netbox/circuits/tables/circuits.py:168 #: netbox/circuits/tables/providers.py:18 #: netbox/circuits/tables/providers.py:69 -#: netbox/circuits/tables/providers.py:99 netbox/core/tables/data.py:16 +#: netbox/circuits/tables/providers.py:99 +#: netbox/circuits/tables/virtual_circuits.py:18 netbox/core/tables/data.py:16 #: netbox/core/tables/jobs.py:14 netbox/core/tables/plugins.py:44 #: netbox/core/tables/tasks.py:11 netbox/core/tables/tasks.py:115 -#: netbox/dcim/forms/filtersets.py:63 netbox/dcim/forms/object_create.py:43 -#: netbox/dcim/tables/devices.py:52 netbox/dcim/tables/devices.py:92 -#: netbox/dcim/tables/devices.py:134 netbox/dcim/tables/devices.py:289 -#: netbox/dcim/tables/devices.py:392 netbox/dcim/tables/devices.py:433 -#: netbox/dcim/tables/devices.py:482 netbox/dcim/tables/devices.py:531 -#: netbox/dcim/tables/devices.py:648 netbox/dcim/tables/devices.py:731 -#: netbox/dcim/tables/devices.py:778 netbox/dcim/tables/devices.py:841 -#: netbox/dcim/tables/devices.py:911 netbox/dcim/tables/devices.py:974 -#: netbox/dcim/tables/devices.py:994 netbox/dcim/tables/devices.py:1023 -#: netbox/dcim/tables/devices.py:1053 netbox/dcim/tables/devicetypes.py:31 +#: netbox/dcim/forms/filtersets.py:64 netbox/dcim/forms/object_create.py:43 +#: netbox/dcim/tables/devices.py:63 netbox/dcim/tables/devices.py:103 +#: netbox/dcim/tables/devices.py:145 netbox/dcim/tables/devices.py:299 +#: netbox/dcim/tables/devices.py:402 netbox/dcim/tables/devices.py:443 +#: netbox/dcim/tables/devices.py:491 netbox/dcim/tables/devices.py:540 +#: netbox/dcim/tables/devices.py:561 netbox/dcim/tables/devices.py:681 +#: netbox/dcim/tables/devices.py:764 netbox/dcim/tables/devices.py:810 +#: netbox/dcim/tables/devices.py:872 netbox/dcim/tables/devices.py:941 +#: netbox/dcim/tables/devices.py:1006 netbox/dcim/tables/devices.py:1025 +#: netbox/dcim/tables/devices.py:1054 netbox/dcim/tables/devices.py:1084 +#: netbox/dcim/tables/devicetypes.py:31 netbox/dcim/tables/devicetypes.py:222 #: netbox/dcim/tables/power.py:22 netbox/dcim/tables/power.py:62 #: netbox/dcim/tables/racks.py:24 netbox/dcim/tables/racks.py:113 #: netbox/dcim/tables/sites.py:24 netbox/dcim/tables/sites.py:51 @@ -1384,15 +1692,17 @@ msgstr "" #: netbox/extras/tables/tables.py:361 netbox/extras/tables/tables.py:378 #: netbox/extras/tables/tables.py:401 netbox/extras/tables/tables.py:439 #: netbox/extras/tables/tables.py:491 netbox/extras/tables/tables.py:514 -#: netbox/ipam/forms/bulk_edit.py:407 netbox/ipam/forms/filtersets.py:386 -#: netbox/ipam/tables/asn.py:16 netbox/ipam/tables/ip.py:85 -#: netbox/ipam/tables/ip.py:160 netbox/ipam/tables/services.py:15 -#: netbox/ipam/tables/services.py:40 netbox/ipam/tables/vlans.py:64 -#: netbox/ipam/tables/vlans.py:114 netbox/ipam/tables/vrfs.py:26 +#: netbox/ipam/forms/bulk_edit.py:391 netbox/ipam/forms/filtersets.py:389 +#: netbox/ipam/forms/filtersets.py:474 netbox/ipam/tables/asn.py:16 +#: netbox/ipam/tables/ip.py:31 netbox/ipam/tables/ip.py:106 +#: netbox/ipam/tables/services.py:15 netbox/ipam/tables/services.py:40 +#: netbox/ipam/tables/vlans.py:33 netbox/ipam/tables/vlans.py:83 +#: netbox/ipam/tables/vlans.py:231 netbox/ipam/tables/vrfs.py:26 #: netbox/ipam/tables/vrfs.py:68 netbox/templates/circuits/circuitgroup.html:28 #: netbox/templates/circuits/circuittype.html:22 #: netbox/templates/circuits/provideraccount.html:28 #: netbox/templates/circuits/providernetwork.html:24 +#: netbox/templates/circuits/virtualcircuittype.html:22 #: netbox/templates/core/datasource.html:34 netbox/templates/core/job.html:44 #: netbox/templates/core/plugin.html:54 netbox/templates/core/rq_worker.html:43 #: netbox/templates/dcim/consoleport.html:28 @@ -1403,7 +1713,7 @@ msgstr "" #: netbox/templates/dcim/inc/interface_vlans_table.html:5 #: netbox/templates/dcim/inc/panels/inventory_items.html:18 #: netbox/templates/dcim/interface.html:38 -#: netbox/templates/dcim/interface.html:165 +#: netbox/templates/dcim/interface.html:222 #: netbox/templates/dcim/inventoryitem.html:28 #: netbox/templates/dcim/inventoryitemrole.html:18 #: netbox/templates/dcim/location.html:29 @@ -1432,6 +1742,7 @@ msgstr "" #: netbox/templates/ipam/service.html:24 #: netbox/templates/ipam/servicetemplate.html:15 #: netbox/templates/ipam/vlan.html:35 netbox/templates/ipam/vlangroup.html:30 +#: netbox/templates/ipam/vlantranslationpolicy.html:14 #: netbox/templates/tenancy/contact.html:25 #: netbox/templates/tenancy/contactgroup.html:21 #: netbox/templates/tenancy/contactrole.html:18 @@ -1463,81 +1774,113 @@ msgstr "" #: netbox/virtualization/tables/clusters.py:17 #: netbox/virtualization/tables/clusters.py:39 #: netbox/virtualization/tables/clusters.py:62 -#: netbox/virtualization/tables/virtualmachines.py:55 -#: netbox/virtualization/tables/virtualmachines.py:139 -#: netbox/virtualization/tables/virtualmachines.py:194 +#: netbox/virtualization/tables/virtualmachines.py:26 +#: netbox/virtualization/tables/virtualmachines.py:109 +#: netbox/virtualization/tables/virtualmachines.py:165 #: netbox/vpn/tables/crypto.py:18 netbox/vpn/tables/crypto.py:57 #: netbox/vpn/tables/crypto.py:93 netbox/vpn/tables/crypto.py:129 #: netbox/vpn/tables/crypto.py:158 netbox/vpn/tables/l2vpn.py:23 #: netbox/vpn/tables/tunnels.py:18 netbox/vpn/tables/tunnels.py:40 #: netbox/wireless/tables/wirelesslan.py:18 -#: netbox/wireless/tables/wirelesslan.py:79 +#: netbox/wireless/tables/wirelesslan.py:87 msgid "Name" msgstr "" -#: netbox/circuits/tables/circuits.py:41 netbox/circuits/tables/circuits.py:138 +#: netbox/circuits/tables/circuits.py:39 netbox/circuits/tables/circuits.py:174 #: netbox/circuits/tables/providers.py:45 -#: netbox/circuits/tables/providers.py:79 netbox/netbox/navigation/menu.py:266 -#: netbox/netbox/navigation/menu.py:270 netbox/netbox/navigation/menu.py:272 +#: netbox/circuits/tables/providers.py:79 +#: netbox/circuits/tables/virtual_circuits.py:27 +#: netbox/netbox/navigation/menu.py:274 netbox/netbox/navigation/menu.py:278 +#: netbox/netbox/navigation/menu.py:280 #: netbox/templates/circuits/provider.html:57 #: netbox/templates/circuits/provideraccount.html:44 #: netbox/templates/circuits/providernetwork.html:50 msgid "Circuits" msgstr "" -#: netbox/circuits/tables/circuits.py:55 +#: netbox/circuits/tables/circuits.py:54 +#: netbox/circuits/tables/virtual_circuits.py:42 #: netbox/templates/circuits/circuit.html:26 +#: netbox/templates/circuits/virtualcircuit.html:35 +#: netbox/templates/dcim/interface.html:174 msgid "Circuit ID" msgstr "" -#: netbox/circuits/tables/circuits.py:69 -#: netbox/wireless/forms/model_forms.py:160 +#: netbox/circuits/tables/circuits.py:72 +#: netbox/wireless/forms/model_forms.py:163 msgid "Side A" msgstr "" -#: netbox/circuits/tables/circuits.py:74 +#: netbox/circuits/tables/circuits.py:77 msgid "Side Z" msgstr "" -#: netbox/circuits/tables/circuits.py:77 -#: netbox/templates/circuits/circuit.html:55 +#: netbox/circuits/tables/circuits.py:80 +#: netbox/templates/circuits/circuit.html:65 msgid "Commit Rate" msgstr "" -#: netbox/circuits/tables/circuits.py:80 netbox/circuits/tables/providers.py:48 +#: netbox/circuits/tables/circuits.py:84 netbox/circuits/tables/providers.py:48 #: netbox/circuits/tables/providers.py:82 -#: netbox/circuits/tables/providers.py:107 netbox/dcim/tables/devices.py:1036 -#: netbox/dcim/tables/devicetypes.py:92 netbox/dcim/tables/modules.py:29 -#: netbox/dcim/tables/modules.py:73 netbox/dcim/tables/power.py:39 -#: netbox/dcim/tables/power.py:96 netbox/dcim/tables/racks.py:84 -#: netbox/dcim/tables/racks.py:145 netbox/dcim/tables/racks.py:225 -#: netbox/dcim/tables/sites.py:108 netbox/extras/tables/tables.py:582 -#: netbox/ipam/tables/asn.py:69 netbox/ipam/tables/fhrp.py:34 -#: netbox/ipam/tables/ip.py:136 netbox/ipam/tables/ip.py:275 -#: netbox/ipam/tables/ip.py:329 netbox/ipam/tables/ip.py:397 -#: netbox/ipam/tables/services.py:24 netbox/ipam/tables/services.py:54 -#: netbox/ipam/tables/vlans.py:145 netbox/ipam/tables/vrfs.py:47 -#: netbox/ipam/tables/vrfs.py:72 netbox/templates/dcim/htmx/cable_edit.html:89 +#: netbox/circuits/tables/providers.py:107 +#: netbox/circuits/tables/virtual_circuits.py:68 +#: netbox/dcim/tables/devices.py:1067 netbox/dcim/tables/devicetypes.py:92 +#: netbox/dcim/tables/modules.py:29 netbox/dcim/tables/modules.py:73 +#: netbox/dcim/tables/power.py:39 netbox/dcim/tables/power.py:96 +#: netbox/dcim/tables/racks.py:84 netbox/dcim/tables/racks.py:144 +#: netbox/dcim/tables/racks.py:224 netbox/dcim/tables/sites.py:108 +#: netbox/extras/tables/tables.py:582 netbox/ipam/tables/asn.py:69 +#: netbox/ipam/tables/fhrp.py:34 netbox/ipam/tables/ip.py:82 +#: netbox/ipam/tables/ip.py:224 netbox/ipam/tables/ip.py:279 +#: netbox/ipam/tables/ip.py:347 netbox/ipam/tables/services.py:24 +#: netbox/ipam/tables/services.py:54 netbox/ipam/tables/vlans.py:121 +#: netbox/ipam/tables/vrfs.py:47 netbox/ipam/tables/vrfs.py:72 +#: netbox/templates/dcim/htmx/cable_edit.html:89 #: netbox/templates/generic/bulk_edit.html:86 #: netbox/templates/inc/panels/comments.html:5 #: netbox/tenancy/tables/contacts.py:68 netbox/tenancy/tables/tenants.py:46 #: netbox/utilities/forms/fields/fields.py:29 -#: netbox/virtualization/tables/clusters.py:91 -#: netbox/virtualization/tables/virtualmachines.py:82 +#: netbox/virtualization/tables/clusters.py:94 +#: netbox/virtualization/tables/virtualmachines.py:52 #: netbox/vpn/tables/crypto.py:37 netbox/vpn/tables/crypto.py:74 #: netbox/vpn/tables/crypto.py:109 netbox/vpn/tables/crypto.py:140 #: netbox/vpn/tables/crypto.py:173 netbox/vpn/tables/l2vpn.py:37 #: netbox/vpn/tables/tunnels.py:61 netbox/wireless/tables/wirelesslan.py:27 -#: netbox/wireless/tables/wirelesslan.py:58 +#: netbox/wireless/tables/wirelesslan.py:65 msgid "Comments" msgstr "" -#: netbox/circuits/tables/circuits.py:86 +#: netbox/circuits/tables/circuits.py:90 #: netbox/templates/tenancy/contact.html:84 #: netbox/tenancy/tables/contacts.py:73 msgid "Assignments" msgstr "" +#: netbox/circuits/tables/circuits.py:117 netbox/dcim/forms/connections.py:81 +msgid "Side" +msgstr "" + +#: netbox/circuits/tables/circuits.py:120 +msgid "Termination Type" +msgstr "" + +#: netbox/circuits/tables/circuits.py:123 +msgid "Termination Point" +msgstr "" + +#: netbox/circuits/tables/circuits.py:134 netbox/dcim/tables/devices.py:160 +#: netbox/templates/dcim/sitegroup.html:26 +msgid "Site Group" +msgstr "" + +#: netbox/circuits/tables/circuits.py:149 +#: netbox/templates/circuits/providernetwork.html:17 +#: netbox/templates/circuits/virtualcircuit.html:27 +#: netbox/templates/circuits/virtualcircuittermination.html:30 +#: netbox/templates/dcim/interface.html:170 +msgid "Provider Network" +msgstr "" + #: netbox/circuits/tables/providers.py:23 msgid "Accounts" msgstr "" @@ -1550,17 +1893,95 @@ msgstr "" msgid "ASN Count" msgstr "" -#: netbox/circuits/views.py:331 +#: netbox/circuits/tables/virtual_circuits.py:65 +#: netbox/netbox/navigation/menu.py:234 +#: netbox/templates/circuits/virtualcircuit.html:87 +#: netbox/templates/vpn/l2vpn.html:56 netbox/templates/vpn/tunnel.html:72 +#: netbox/vpn/tables/tunnels.py:58 +msgid "Terminations" +msgstr "" + +#: netbox/circuits/tables/virtual_circuits.py:109 +#: netbox/dcim/forms/bulk_edit.py:745 netbox/dcim/forms/bulk_edit.py:1299 +#: netbox/dcim/forms/bulk_edit.py:1706 netbox/dcim/forms/bulk_edit.py:1758 +#: netbox/dcim/forms/bulk_import.py:668 netbox/dcim/forms/bulk_import.py:730 +#: netbox/dcim/forms/bulk_import.py:756 netbox/dcim/forms/bulk_import.py:782 +#: netbox/dcim/forms/bulk_import.py:802 netbox/dcim/forms/bulk_import.py:858 +#: netbox/dcim/forms/bulk_import.py:976 netbox/dcim/forms/bulk_import.py:1024 +#: netbox/dcim/forms/bulk_import.py:1041 netbox/dcim/forms/bulk_import.py:1053 +#: netbox/dcim/forms/bulk_import.py:1101 netbox/dcim/forms/bulk_import.py:1205 +#: netbox/dcim/forms/bulk_import.py:1541 netbox/dcim/forms/connections.py:24 +#: netbox/dcim/forms/filtersets.py:132 netbox/dcim/forms/filtersets.py:922 +#: netbox/dcim/forms/filtersets.py:1052 netbox/dcim/forms/filtersets.py:1243 +#: netbox/dcim/forms/filtersets.py:1268 netbox/dcim/forms/filtersets.py:1292 +#: netbox/dcim/forms/filtersets.py:1312 netbox/dcim/forms/filtersets.py:1339 +#: netbox/dcim/forms/filtersets.py:1449 netbox/dcim/forms/filtersets.py:1474 +#: netbox/dcim/forms/filtersets.py:1498 netbox/dcim/forms/filtersets.py:1516 +#: netbox/dcim/forms/filtersets.py:1533 netbox/dcim/forms/filtersets.py:1630 +#: netbox/dcim/forms/filtersets.py:1654 netbox/dcim/forms/filtersets.py:1678 +#: netbox/dcim/forms/model_forms.py:644 netbox/dcim/forms/model_forms.py:861 +#: netbox/dcim/forms/model_forms.py:1231 netbox/dcim/forms/model_forms.py:1716 +#: netbox/dcim/forms/model_forms.py:1787 netbox/dcim/forms/object_create.py:249 +#: netbox/dcim/tables/connections.py:22 netbox/dcim/tables/connections.py:41 +#: netbox/dcim/tables/connections.py:60 netbox/dcim/tables/devices.py:295 +#: netbox/dcim/tables/devices.py:380 netbox/dcim/tables/devices.py:421 +#: netbox/dcim/tables/devices.py:463 netbox/dcim/tables/devices.py:513 +#: netbox/dcim/tables/devices.py:618 netbox/dcim/tables/devices.py:730 +#: netbox/dcim/tables/devices.py:786 netbox/dcim/tables/devices.py:832 +#: netbox/dcim/tables/devices.py:891 netbox/dcim/tables/devices.py:959 +#: netbox/dcim/tables/devices.py:1088 netbox/dcim/tables/modules.py:53 +#: netbox/extras/forms/filtersets.py:321 netbox/ipam/forms/bulk_import.py:303 +#: netbox/ipam/forms/bulk_import.py:540 netbox/ipam/forms/filtersets.py:603 +#: netbox/ipam/forms/model_forms.py:325 netbox/ipam/forms/model_forms.py:754 +#: netbox/ipam/forms/model_forms.py:787 netbox/ipam/forms/model_forms.py:813 +#: netbox/ipam/tables/vlans.py:156 +#: netbox/templates/circuits/virtualcircuittermination.html:56 +#: netbox/templates/dcim/consoleport.html:20 +#: netbox/templates/dcim/consoleserverport.html:20 +#: netbox/templates/dcim/device.html:15 netbox/templates/dcim/device.html:130 +#: netbox/templates/dcim/device_edit.html:10 +#: netbox/templates/dcim/devicebay.html:20 +#: netbox/templates/dcim/devicebay.html:48 +#: netbox/templates/dcim/frontport.html:20 +#: netbox/templates/dcim/interface.html:30 +#: netbox/templates/dcim/interface.html:218 +#: netbox/templates/dcim/inventoryitem.html:20 +#: netbox/templates/dcim/module.html:57 netbox/templates/dcim/modulebay.html:20 +#: netbox/templates/dcim/poweroutlet.html:20 +#: netbox/templates/dcim/powerport.html:20 +#: netbox/templates/dcim/rearport.html:20 +#: netbox/templates/dcim/virtualchassis.html:65 +#: netbox/templates/dcim/virtualchassis_edit.html:51 +#: netbox/templates/dcim/virtualdevicecontext.html:22 +#: netbox/templates/virtualization/virtualmachine.html:114 +#: netbox/templates/vpn/tunneltermination.html:23 +#: netbox/templates/wireless/inc/wirelesslink_interface.html:6 +#: netbox/virtualization/filtersets.py:133 +#: netbox/virtualization/forms/bulk_edit.py:119 +#: netbox/virtualization/forms/bulk_import.py:105 +#: netbox/virtualization/forms/filtersets.py:133 +#: netbox/virtualization/forms/model_forms.py:184 +#: netbox/virtualization/tables/virtualmachines.py:41 netbox/vpn/choices.py:52 +#: netbox/vpn/forms/bulk_import.py:86 netbox/vpn/forms/bulk_import.py:283 +#: netbox/vpn/forms/filtersets.py:275 netbox/vpn/forms/model_forms.py:91 +#: netbox/vpn/forms/model_forms.py:126 netbox/vpn/forms/model_forms.py:237 +#: netbox/vpn/forms/model_forms.py:456 netbox/wireless/forms/model_forms.py:102 +#: netbox/wireless/forms/model_forms.py:144 +#: netbox/wireless/tables/wirelesslan.py:83 +msgid "Device" +msgstr "" + +#: netbox/circuits/views.py:353 #, python-brace-format msgid "No terminations have been defined for circuit {circuit}." msgstr "" -#: netbox/circuits/views.py:380 +#: netbox/circuits/views.py:402 #, python-brace-format msgid "Swapped terminations for circuit {circuit}." msgstr "" -#: netbox/core/api/views.py:39 +#: netbox/core/api/views.py:51 msgid "This user does not have permission to synchronize this data source." msgstr "" @@ -1585,12 +2006,13 @@ msgstr "" #: netbox/core/choices.py:22 netbox/core/choices.py:59 #: netbox/core/constants.py:20 netbox/core/tables/tasks.py:34 #: netbox/dcim/choices.py:187 netbox/dcim/choices.py:239 -#: netbox/dcim/choices.py:1609 netbox/virtualization/choices.py:47 +#: netbox/dcim/choices.py:1593 netbox/dcim/choices.py:1666 +#: netbox/virtualization/choices.py:47 msgid "Failed" msgstr "" -#: netbox/core/choices.py:35 netbox/netbox/navigation/menu.py:335 -#: netbox/netbox/navigation/menu.py:339 +#: netbox/core/choices.py:35 netbox/netbox/navigation/menu.py:356 +#: netbox/netbox/navigation/menu.py:360 #: netbox/templates/extras/script/base.html:14 #: netbox/templates/extras/script_list.html:7 #: netbox/templates/extras/script_list.html:12 @@ -1620,12 +2042,28 @@ msgstr "" msgid "Errored" msgstr "" -#: netbox/core/choices.py:87 netbox/core/tables/plugins.py:63 +#: netbox/core/choices.py:82 +msgid "Minutely" +msgstr "" + +#: netbox/core/choices.py:83 netbox/extras/choices.py:186 +msgid "Hourly" +msgstr "" + +#: netbox/core/choices.py:84 netbox/extras/choices.py:188 +msgid "Daily" +msgstr "" + +#: netbox/core/choices.py:85 netbox/extras/choices.py:189 +msgid "Weekly" +msgstr "" + +#: netbox/core/choices.py:101 netbox/core/tables/plugins.py:63 #: netbox/templates/generic/object.html:61 msgid "Updated" msgstr "" -#: netbox/core/choices.py:88 +#: netbox/core/choices.py:102 msgid "Deleted" msgstr "" @@ -1653,7 +2091,7 @@ msgstr "" #: netbox/core/data_backends.py:32 netbox/core/tables/plugins.py:51 #: netbox/templates/core/plugin.html:88 -#: netbox/templates/dcim/interface.html:216 +#: netbox/templates/dcim/interface.html:273 msgid "Local" msgstr "" @@ -1727,7 +2165,7 @@ msgstr "" msgid "Data source (name)" msgstr "" -#: netbox/core/filtersets.py:145 netbox/dcim/filtersets.py:501 +#: netbox/core/filtersets.py:145 netbox/dcim/filtersets.py:502 #: netbox/extras/filtersets.py:287 netbox/extras/filtersets.py:331 #: netbox/extras/filtersets.py:353 netbox/extras/filtersets.py:413 #: netbox/users/filtersets.py:28 @@ -1739,9 +2177,9 @@ msgid "User name" msgstr "" #: netbox/core/forms/bulk_edit.py:25 netbox/core/forms/filtersets.py:43 -#: netbox/core/tables/data.py:26 netbox/dcim/forms/bulk_edit.py:1137 -#: netbox/dcim/forms/bulk_edit.py:1415 netbox/dcim/forms/filtersets.py:1370 -#: netbox/dcim/tables/devices.py:553 netbox/dcim/tables/devicetypes.py:224 +#: netbox/core/tables/data.py:26 netbox/dcim/forms/bulk_edit.py:1140 +#: netbox/dcim/forms/bulk_edit.py:1418 netbox/dcim/forms/filtersets.py:1375 +#: netbox/dcim/tables/devices.py:566 netbox/dcim/tables/devicetypes.py:226 #: netbox/extras/forms/bulk_edit.py:123 netbox/extras/forms/bulk_edit.py:187 #: netbox/extras/forms/bulk_edit.py:246 netbox/extras/forms/filtersets.py:142 #: netbox/extras/forms/filtersets.py:229 netbox/extras/forms/filtersets.py:294 @@ -1755,8 +2193,8 @@ msgstr "" #: netbox/templates/users/objectpermission.html:25 #: netbox/templates/virtualization/vminterface.html:29 #: netbox/users/forms/bulk_edit.py:89 netbox/users/forms/filtersets.py:70 -#: netbox/users/tables.py:83 netbox/virtualization/forms/bulk_edit.py:217 -#: netbox/virtualization/forms/filtersets.py:215 +#: netbox/users/tables.py:83 netbox/virtualization/forms/bulk_edit.py:199 +#: netbox/virtualization/forms/filtersets.py:220 msgid "Enabled" msgstr "" @@ -1764,9 +2202,9 @@ msgstr "" #: netbox/templates/extras/savedfilter.html:52 #: netbox/vpn/forms/filtersets.py:97 netbox/vpn/forms/filtersets.py:127 #: netbox/vpn/forms/filtersets.py:151 netbox/vpn/forms/filtersets.py:170 -#: netbox/vpn/forms/model_forms.py:301 netbox/vpn/forms/model_forms.py:321 -#: netbox/vpn/forms/model_forms.py:337 netbox/vpn/forms/model_forms.py:357 -#: netbox/vpn/forms/model_forms.py:380 +#: netbox/vpn/forms/model_forms.py:302 netbox/vpn/forms/model_forms.py:323 +#: netbox/vpn/forms/model_forms.py:339 netbox/vpn/forms/model_forms.py:360 +#: netbox/vpn/forms/model_forms.py:383 msgid "Parameters" msgstr "" @@ -1844,8 +2282,8 @@ msgid "Completed before" msgstr "" #: netbox/core/forms/filtersets.py:126 netbox/core/forms/filtersets.py:155 -#: netbox/dcim/forms/bulk_edit.py:462 netbox/dcim/forms/filtersets.py:418 -#: netbox/dcim/forms/filtersets.py:462 netbox/dcim/forms/model_forms.py:316 +#: netbox/dcim/forms/bulk_edit.py:465 netbox/dcim/forms/filtersets.py:419 +#: netbox/dcim/forms/filtersets.py:463 netbox/dcim/forms/model_forms.py:324 #: netbox/extras/forms/filtersets.py:456 netbox/extras/forms/filtersets.py:475 #: netbox/extras/tables/tables.py:302 netbox/extras/tables/tables.py:342 #: netbox/templates/core/objectchange.html:36 @@ -1909,22 +2347,22 @@ msgstr "" msgid "Rack Elevations" msgstr "" -#: netbox/core/forms/model_forms.py:157 netbox/dcim/choices.py:1520 -#: netbox/dcim/forms/bulk_edit.py:984 netbox/dcim/forms/bulk_edit.py:1372 -#: netbox/dcim/forms/bulk_edit.py:1390 netbox/dcim/tables/racks.py:158 -#: netbox/netbox/navigation/menu.py:291 netbox/netbox/navigation/menu.py:295 +#: netbox/core/forms/model_forms.py:157 netbox/dcim/choices.py:1522 +#: netbox/dcim/forms/bulk_edit.py:987 netbox/dcim/forms/bulk_edit.py:1375 +#: netbox/dcim/forms/bulk_edit.py:1393 netbox/dcim/tables/racks.py:157 +#: netbox/netbox/navigation/menu.py:312 netbox/netbox/navigation/menu.py:316 msgid "Power" msgstr "" -#: netbox/core/forms/model_forms.py:159 netbox/netbox/navigation/menu.py:154 +#: netbox/core/forms/model_forms.py:159 netbox/netbox/navigation/menu.py:160 #: netbox/templates/core/inc/config_data.html:37 msgid "IPAM" msgstr "" -#: netbox/core/forms/model_forms.py:160 netbox/netbox/navigation/menu.py:230 +#: netbox/core/forms/model_forms.py:160 netbox/netbox/navigation/menu.py:238 #: netbox/templates/core/inc/config_data.html:50 #: netbox/vpn/forms/bulk_edit.py:77 netbox/vpn/forms/filtersets.py:43 -#: netbox/vpn/forms/model_forms.py:61 netbox/vpn/forms/model_forms.py:146 +#: netbox/vpn/forms/model_forms.py:62 netbox/vpn/forms/model_forms.py:147 msgid "Security" msgstr "" @@ -1950,7 +2388,7 @@ msgstr "" msgid "User Preferences" msgstr "" -#: netbox/core/forms/model_forms.py:167 netbox/dcim/forms/filtersets.py:732 +#: netbox/core/forms/model_forms.py:167 netbox/dcim/forms/filtersets.py:733 #: netbox/templates/core/inc/config_data.html:127 #: netbox/users/forms/model_forms.py:64 msgid "Miscellaneous" @@ -1985,7 +2423,7 @@ msgstr "" msgid "request ID" msgstr "" -#: netbox/core/models/change_logging.py:52 netbox/extras/models/staging.py:69 +#: netbox/core/models/change_logging.py:52 netbox/extras/models/staging.py:77 msgid "action" msgstr "" @@ -2010,9 +2448,9 @@ msgstr "" msgid "Change logging is not supported for this object type ({type})." msgstr "" -#: netbox/core/models/config.py:18 netbox/core/models/data.py:266 +#: netbox/core/models/config.py:18 netbox/core/models/data.py:263 #: netbox/core/models/files.py:27 netbox/core/models/jobs.py:50 -#: netbox/extras/models/models.py:730 netbox/extras/models/notifications.py:39 +#: netbox/extras/models/models.py:733 netbox/extras/models/notifications.py:39 #: netbox/extras/models/notifications.py:186 #: netbox/netbox/models/features.py:53 netbox/users/models/tokens.py:32 msgid "created" @@ -2047,23 +2485,23 @@ msgstr "" msgid "Config revision #{id}" msgstr "" -#: netbox/core/models/data.py:44 netbox/dcim/models/cables.py:43 -#: netbox/dcim/models/device_component_templates.py:203 -#: netbox/dcim/models/device_component_templates.py:237 -#: netbox/dcim/models/device_component_templates.py:272 -#: netbox/dcim/models/device_component_templates.py:334 -#: netbox/dcim/models/device_component_templates.py:413 -#: netbox/dcim/models/device_component_templates.py:512 -#: netbox/dcim/models/device_component_templates.py:612 -#: netbox/dcim/models/device_components.py:283 -#: netbox/dcim/models/device_components.py:312 -#: netbox/dcim/models/device_components.py:345 -#: netbox/dcim/models/device_components.py:463 -#: netbox/dcim/models/device_components.py:605 -#: netbox/dcim/models/device_components.py:970 -#: netbox/dcim/models/device_components.py:1044 netbox/dcim/models/power.py:102 +#: netbox/core/models/data.py:44 netbox/dcim/models/cables.py:42 +#: netbox/dcim/models/device_component_templates.py:199 +#: netbox/dcim/models/device_component_templates.py:234 +#: netbox/dcim/models/device_component_templates.py:270 +#: netbox/dcim/models/device_component_templates.py:335 +#: netbox/dcim/models/device_component_templates.py:420 +#: netbox/dcim/models/device_component_templates.py:526 +#: netbox/dcim/models/device_component_templates.py:626 +#: netbox/dcim/models/device_components.py:279 +#: netbox/dcim/models/device_components.py:306 +#: netbox/dcim/models/device_components.py:337 +#: netbox/dcim/models/device_components.py:453 +#: netbox/dcim/models/device_components.py:653 +#: netbox/dcim/models/device_components.py:1019 +#: netbox/dcim/models/device_components.py:1090 netbox/dcim/models/power.py:100 #: netbox/extras/models/customfields.py:78 netbox/extras/models/search.py:41 -#: netbox/virtualization/models/clusters.py:61 netbox/vpn/models/l2vpn.py:32 +#: netbox/virtualization/models/clusters.py:57 netbox/vpn/models/l2vpn.py:32 msgid "type" msgstr "" @@ -2075,8 +2513,8 @@ msgid "URL" msgstr "" #: netbox/core/models/data.py:59 -#: netbox/dcim/models/device_component_templates.py:418 -#: netbox/dcim/models/device_components.py:512 +#: netbox/dcim/models/device_component_templates.py:425 +#: netbox/dcim/models/device_components.py:505 #: netbox/extras/models/models.py:70 netbox/extras/models/models.py:301 #: netbox/extras/models/models.py:526 netbox/users/models/permissions.py:29 msgid "enabled" @@ -2106,63 +2544,63 @@ msgstr "" msgid "data sources" msgstr "" -#: netbox/core/models/data.py:122 +#: netbox/core/models/data.py:119 #, python-brace-format msgid "Unknown backend type: {type}" msgstr "" -#: netbox/core/models/data.py:164 +#: netbox/core/models/data.py:161 msgid "Cannot initiate sync; syncing already in progress." msgstr "" -#: netbox/core/models/data.py:177 +#: netbox/core/models/data.py:174 msgid "" "There was an error initializing the backend. A dependency needs to be " "installed: " msgstr "" -#: netbox/core/models/data.py:270 netbox/core/models/files.py:31 +#: netbox/core/models/data.py:267 netbox/core/models/files.py:31 #: netbox/netbox/models/features.py:59 msgid "last updated" msgstr "" -#: netbox/core/models/data.py:280 netbox/dcim/models/cables.py:444 +#: netbox/core/models/data.py:277 netbox/dcim/models/cables.py:442 msgid "path" msgstr "" -#: netbox/core/models/data.py:283 +#: netbox/core/models/data.py:280 msgid "File path relative to the data source's root" msgstr "" -#: netbox/core/models/data.py:287 netbox/ipam/models/ip.py:503 +#: netbox/core/models/data.py:284 netbox/ipam/models/ip.py:489 msgid "size" msgstr "" -#: netbox/core/models/data.py:290 +#: netbox/core/models/data.py:287 msgid "hash" msgstr "" -#: netbox/core/models/data.py:294 +#: netbox/core/models/data.py:291 msgid "Length must be 64 hexadecimal characters." msgstr "" -#: netbox/core/models/data.py:296 +#: netbox/core/models/data.py:293 msgid "SHA256 hash of the file data" msgstr "" -#: netbox/core/models/data.py:313 +#: netbox/core/models/data.py:310 msgid "data file" msgstr "" -#: netbox/core/models/data.py:314 +#: netbox/core/models/data.py:311 msgid "data files" msgstr "" -#: netbox/core/models/data.py:401 +#: netbox/core/models/data.py:398 msgid "auto sync record" msgstr "" -#: netbox/core/models/data.py:402 +#: netbox/core/models/data.py:399 msgid "auto sync records" msgstr "" @@ -2186,6 +2624,11 @@ msgstr "" msgid "managed files" msgstr "" +#: netbox/core/models/files.py:100 +#, python-brace-format +msgid "A {model} with this file path already exists ({path})." +msgstr "" + #: netbox/core/models/jobs.py:54 msgid "scheduled" msgstr "" @@ -2207,7 +2650,7 @@ msgid "completed" msgstr "" #: netbox/core/models/jobs.py:91 netbox/extras/models/models.py:101 -#: netbox/extras/models/staging.py:87 +#: netbox/extras/models/staging.py:95 msgid "data" msgstr "" @@ -2237,7 +2680,7 @@ msgstr "" msgid "Invalid status for job termination. Choices are: {choices}" msgstr "" -#: netbox/core/models/jobs.py:221 +#: netbox/core/models/jobs.py:231 msgid "" "enqueue() cannot be called with values for both schedule_at and immediate." msgstr "" @@ -2288,7 +2731,7 @@ msgstr "" #: netbox/dcim/tables/devicetypes.py:164 netbox/extras/tables/tables.py:216 #: netbox/extras/tables/tables.py:460 netbox/netbox/tables/tables.py:189 #: netbox/templates/dcim/virtualchassis_edit.html:52 -#: netbox/utilities/forms/forms.py:73 netbox/wireless/tables/wirelesslink.py:17 +#: netbox/utilities/forms/forms.py:73 netbox/wireless/tables/wirelesslink.py:16 msgid "ID" msgstr "" @@ -2354,7 +2797,7 @@ msgstr "" msgid "Host" msgstr "" -#: netbox/core/tables/tasks.py:50 netbox/ipam/forms/filtersets.py:535 +#: netbox/core/tables/tasks.py:50 netbox/ipam/forms/filtersets.py:587 msgid "Port" msgstr "" @@ -2402,71 +2845,71 @@ msgstr "" msgid "No workers found" msgstr "" -#: netbox/core/views.py:90 -#, python-brace-format -msgid "Queued job #{id} to sync {datasource}" -msgstr "" - -#: netbox/core/views.py:319 -#, python-brace-format -msgid "Restored configuration revision #{id}" -msgstr "" - -#: netbox/core/views.py:412 netbox/core/views.py:455 netbox/core/views.py:531 +#: netbox/core/utils.py:84 netbox/core/utils.py:150 netbox/core/views.py:396 #, python-brace-format msgid "Job {job_id} not found" msgstr "" -#: netbox/core/views.py:463 -#, python-brace-format -msgid "Job {id} has been deleted." -msgstr "" - -#: netbox/core/views.py:465 -#, python-brace-format -msgid "Error deleting job {id}: {error}" -msgstr "" - -#: netbox/core/views.py:478 netbox/core/views.py:496 +#: netbox/core/utils.py:102 netbox/core/utils.py:118 #, python-brace-format msgid "Job {id} not found." msgstr "" -#: netbox/core/views.py:484 +#: netbox/core/views.py:88 +#, python-brace-format +msgid "Queued job #{id} to sync {datasource}" +msgstr "" + +#: netbox/core/views.py:332 +#, python-brace-format +msgid "Restored configuration revision #{id}" +msgstr "" + +#: netbox/core/views.py:435 +#, python-brace-format +msgid "Job {id} has been deleted." +msgstr "" + +#: netbox/core/views.py:437 +#, python-brace-format +msgid "Error deleting job {id}: {error}" +msgstr "" + +#: netbox/core/views.py:446 #, python-brace-format msgid "Job {id} has been re-enqueued." msgstr "" -#: netbox/core/views.py:519 +#: netbox/core/views.py:455 #, python-brace-format msgid "Job {id} has been enqueued." msgstr "" -#: netbox/core/views.py:538 +#: netbox/core/views.py:464 #, python-brace-format msgid "Job {id} has been stopped." msgstr "" -#: netbox/core/views.py:540 +#: netbox/core/views.py:466 #, python-brace-format msgid "Failed to stop job {id}" msgstr "" -#: netbox/core/views.py:674 +#: netbox/core/views.py:600 msgid "Plugins catalog could not be loaded" msgstr "" -#: netbox/core/views.py:708 +#: netbox/core/views.py:634 #, python-brace-format msgid "Plugin {name} not found" msgstr "" -#: netbox/dcim/api/serializers_/devices.py:49 -#: netbox/dcim/api/serializers_/devicetypes.py:25 +#: netbox/dcim/api/serializers_/devices.py:53 +#: netbox/dcim/api/serializers_/devicetypes.py:26 msgid "Position (U)" msgstr "" -#: netbox/dcim/api/serializers_/racks.py:112 netbox/templates/dcim/rack.html:28 +#: netbox/dcim/api/serializers_/racks.py:113 netbox/templates/dcim/rack.html:28 msgid "Facility ID" msgstr "" @@ -2475,8 +2918,9 @@ msgid "Staging" msgstr "" #: netbox/dcim/choices.py:23 netbox/dcim/choices.py:189 -#: netbox/dcim/choices.py:240 netbox/dcim/choices.py:1533 -#: netbox/virtualization/choices.py:23 netbox/virtualization/choices.py:48 +#: netbox/dcim/choices.py:240 netbox/dcim/choices.py:1535 +#: netbox/dcim/choices.py:1667 netbox/virtualization/choices.py:23 +#: netbox/virtualization/choices.py:48 msgid "Decommissioning" msgstr "" @@ -2539,7 +2983,7 @@ msgstr "" msgid "Millimeters" msgstr "" -#: netbox/dcim/choices.py:115 netbox/dcim/choices.py:1555 +#: netbox/dcim/choices.py:115 netbox/dcim/choices.py:1557 msgid "Inches" msgstr "" @@ -2553,20 +2997,21 @@ msgstr "" msgid "Rear to front" msgstr "" -#: netbox/dcim/choices.py:151 netbox/dcim/forms/bulk_edit.py:69 -#: netbox/dcim/forms/bulk_edit.py:88 netbox/dcim/forms/bulk_edit.py:174 -#: netbox/dcim/forms/bulk_edit.py:1420 netbox/dcim/forms/bulk_import.py:60 -#: netbox/dcim/forms/bulk_import.py:74 netbox/dcim/forms/bulk_import.py:137 -#: netbox/dcim/forms/bulk_import.py:588 netbox/dcim/forms/bulk_import.py:855 -#: netbox/dcim/forms/bulk_import.py:1110 netbox/dcim/forms/filtersets.py:234 -#: netbox/dcim/forms/model_forms.py:74 netbox/dcim/forms/model_forms.py:93 -#: netbox/dcim/forms/model_forms.py:170 netbox/dcim/forms/model_forms.py:1069 -#: netbox/dcim/forms/model_forms.py:1509 netbox/dcim/forms/object_import.py:176 -#: netbox/dcim/tables/devices.py:656 netbox/dcim/tables/devices.py:869 -#: netbox/dcim/tables/devices.py:954 netbox/extras/tables/tables.py:223 -#: netbox/ipam/tables/fhrp.py:59 netbox/ipam/tables/ip.py:378 -#: netbox/ipam/tables/services.py:44 netbox/templates/dcim/interface.html:102 -#: netbox/templates/dcim/interface.html:309 +#: netbox/dcim/choices.py:151 netbox/dcim/forms/bulk_edit.py:72 +#: netbox/dcim/forms/bulk_edit.py:91 netbox/dcim/forms/bulk_edit.py:177 +#: netbox/dcim/forms/bulk_edit.py:1423 netbox/dcim/forms/bulk_import.py:62 +#: netbox/dcim/forms/bulk_import.py:76 netbox/dcim/forms/bulk_import.py:139 +#: netbox/dcim/forms/bulk_import.py:593 netbox/dcim/forms/bulk_import.py:863 +#: netbox/dcim/forms/bulk_import.py:1118 netbox/dcim/forms/filtersets.py:235 +#: netbox/dcim/forms/model_forms.py:76 netbox/dcim/forms/model_forms.py:95 +#: netbox/dcim/forms/model_forms.py:174 netbox/dcim/forms/model_forms.py:1082 +#: netbox/dcim/forms/model_forms.py:1551 netbox/dcim/forms/object_import.py:177 +#: netbox/dcim/tables/devices.py:689 netbox/dcim/tables/devices.py:899 +#: netbox/dcim/tables/devices.py:986 netbox/dcim/tables/devices.py:1146 +#: netbox/extras/tables/tables.py:223 netbox/ipam/tables/fhrp.py:59 +#: netbox/ipam/tables/ip.py:328 netbox/ipam/tables/services.py:44 +#: netbox/templates/dcim/interface.html:108 +#: netbox/templates/dcim/interface.html:366 #: netbox/templates/dcim/location.html:41 netbox/templates/dcim/region.html:37 #: netbox/templates/dcim/sitegroup.html:37 #: netbox/templates/ipam/service.html:28 @@ -2579,12 +3024,12 @@ msgstr "" #: netbox/tenancy/forms/bulk_import.py:58 #: netbox/tenancy/forms/model_forms.py:25 #: netbox/tenancy/forms/model_forms.py:68 -#: netbox/virtualization/forms/bulk_edit.py:207 -#: netbox/virtualization/forms/bulk_import.py:151 -#: netbox/virtualization/tables/virtualmachines.py:162 -#: netbox/wireless/forms/bulk_edit.py:24 -#: netbox/wireless/forms/bulk_import.py:21 -#: netbox/wireless/forms/model_forms.py:21 +#: netbox/virtualization/forms/bulk_edit.py:189 +#: netbox/virtualization/forms/bulk_import.py:157 +#: netbox/virtualization/tables/virtualmachines.py:132 +#: netbox/wireless/forms/bulk_edit.py:26 +#: netbox/wireless/forms/bulk_import.py:23 +#: netbox/wireless/forms/model_forms.py:22 msgid "Parent" msgstr "" @@ -2607,7 +3052,7 @@ msgid "Rear" msgstr "" #: netbox/dcim/choices.py:186 netbox/dcim/choices.py:238 -#: netbox/virtualization/choices.py:46 +#: netbox/dcim/choices.py:1665 netbox/virtualization/choices.py:46 msgid "Staged" msgstr "" @@ -2640,7 +3085,7 @@ msgid "Top to bottom" msgstr "" #: netbox/dcim/choices.py:215 netbox/dcim/choices.py:259 -#: netbox/dcim/choices.py:1305 +#: netbox/dcim/choices.py:1307 msgid "Passive" msgstr "" @@ -2670,8 +3115,8 @@ msgstr "" #: netbox/dcim/choices.py:581 netbox/dcim/choices.py:824 #: netbox/dcim/choices.py:1221 netbox/dcim/choices.py:1223 -#: netbox/dcim/choices.py:1449 netbox/dcim/choices.py:1451 -#: netbox/netbox/navigation/menu.py:200 +#: netbox/dcim/choices.py:1451 netbox/dcim/choices.py:1453 +#: netbox/netbox/navigation/menu.py:208 msgid "Other" msgstr "" @@ -2688,10 +3133,10 @@ msgid "Virtual" msgstr "" #: netbox/dcim/choices.py:856 netbox/dcim/choices.py:1099 -#: netbox/dcim/forms/bulk_edit.py:1563 netbox/dcim/forms/filtersets.py:1330 -#: netbox/dcim/forms/model_forms.py:995 netbox/dcim/forms/model_forms.py:1404 -#: netbox/netbox/navigation/menu.py:140 netbox/netbox/navigation/menu.py:144 -#: netbox/templates/dcim/interface.html:210 +#: netbox/dcim/forms/bulk_edit.py:1576 netbox/dcim/forms/filtersets.py:1335 +#: netbox/dcim/forms/model_forms.py:1007 netbox/dcim/forms/model_forms.py:1445 +#: netbox/netbox/navigation/menu.py:146 netbox/netbox/navigation/menu.py:150 +#: netbox/templates/dcim/interface.html:267 msgid "Wireless" msgstr "" @@ -2699,13 +3144,13 @@ msgstr "" msgid "Virtual interfaces" msgstr "" -#: netbox/dcim/choices.py:1025 netbox/dcim/forms/bulk_edit.py:1428 -#: netbox/dcim/forms/bulk_import.py:862 netbox/dcim/forms/model_forms.py:981 -#: netbox/dcim/tables/devices.py:660 netbox/templates/dcim/interface.html:106 +#: netbox/dcim/choices.py:1025 netbox/dcim/forms/bulk_edit.py:1431 +#: netbox/dcim/forms/bulk_import.py:870 netbox/dcim/forms/model_forms.py:993 +#: netbox/dcim/tables/devices.py:693 netbox/templates/dcim/interface.html:112 #: netbox/templates/virtualization/vminterface.html:43 -#: netbox/virtualization/forms/bulk_edit.py:212 -#: netbox/virtualization/forms/bulk_import.py:158 -#: netbox/virtualization/tables/virtualmachines.py:166 +#: netbox/virtualization/forms/bulk_edit.py:194 +#: netbox/virtualization/forms/bulk_import.py:164 +#: netbox/virtualization/tables/virtualmachines.py:136 msgid "Bridge" msgstr "" @@ -2729,10 +3174,10 @@ msgstr "" msgid "Cellular" msgstr "" -#: netbox/dcim/choices.py:1167 netbox/dcim/forms/filtersets.py:383 -#: netbox/dcim/forms/filtersets.py:809 netbox/dcim/forms/filtersets.py:963 -#: netbox/dcim/forms/filtersets.py:1542 -#: netbox/templates/dcim/inventoryitem.html:52 +#: netbox/dcim/choices.py:1167 netbox/dcim/forms/filtersets.py:384 +#: netbox/dcim/forms/filtersets.py:810 netbox/dcim/forms/filtersets.py:964 +#: netbox/dcim/forms/filtersets.py:1547 +#: netbox/templates/dcim/inventoryitem.html:56 #: netbox/templates/dcim/virtualchassis_edit.html:54 msgid "Serial" msgstr "" @@ -2758,109 +3203,95 @@ msgstr "" msgid "Auto" msgstr "" -#: netbox/dcim/choices.py:1265 +#: netbox/dcim/choices.py:1266 msgid "Access" msgstr "" -#: netbox/dcim/choices.py:1266 netbox/ipam/tables/vlans.py:172 -#: netbox/ipam/tables/vlans.py:217 +#: netbox/dcim/choices.py:1267 netbox/ipam/tables/vlans.py:148 +#: netbox/ipam/tables/vlans.py:193 #: netbox/templates/dcim/inc/interface_vlans_table.html:7 msgid "Tagged" msgstr "" -#: netbox/dcim/choices.py:1267 +#: netbox/dcim/choices.py:1268 msgid "Tagged (All)" msgstr "" -#: netbox/dcim/choices.py:1296 +#: netbox/dcim/choices.py:1269 netbox/templates/ipam/vlan_edit.html:22 +msgid "Q-in-Q (802.1ad)" +msgstr "" + +#: netbox/dcim/choices.py:1298 msgid "IEEE Standard" msgstr "" -#: netbox/dcim/choices.py:1307 +#: netbox/dcim/choices.py:1309 msgid "Passive 24V (2-pair)" msgstr "" -#: netbox/dcim/choices.py:1308 +#: netbox/dcim/choices.py:1310 msgid "Passive 24V (4-pair)" msgstr "" -#: netbox/dcim/choices.py:1309 +#: netbox/dcim/choices.py:1311 msgid "Passive 48V (2-pair)" msgstr "" -#: netbox/dcim/choices.py:1310 +#: netbox/dcim/choices.py:1312 msgid "Passive 48V (4-pair)" msgstr "" -#: netbox/dcim/choices.py:1380 netbox/dcim/choices.py:1490 +#: netbox/dcim/choices.py:1382 netbox/dcim/choices.py:1492 msgid "Copper" msgstr "" -#: netbox/dcim/choices.py:1403 +#: netbox/dcim/choices.py:1405 msgid "Fiber Optic" msgstr "" -#: netbox/dcim/choices.py:1436 netbox/dcim/choices.py:1519 +#: netbox/dcim/choices.py:1438 netbox/dcim/choices.py:1521 msgid "USB" msgstr "" -#: netbox/dcim/choices.py:1506 +#: netbox/dcim/choices.py:1508 msgid "Fiber" msgstr "" -#: netbox/dcim/choices.py:1531 netbox/dcim/forms/filtersets.py:1227 +#: netbox/dcim/choices.py:1533 netbox/dcim/forms/filtersets.py:1228 msgid "Connected" msgstr "" -#: netbox/dcim/choices.py:1550 netbox/wireless/choices.py:497 +#: netbox/dcim/choices.py:1552 netbox/netbox/choices.py:175 msgid "Kilometers" msgstr "" -#: netbox/dcim/choices.py:1551 netbox/templates/dcim/cable_trace.html:65 -#: netbox/wireless/choices.py:498 +#: netbox/dcim/choices.py:1553 netbox/netbox/choices.py:176 +#: netbox/templates/dcim/cable_trace.html:65 msgid "Meters" msgstr "" -#: netbox/dcim/choices.py:1552 +#: netbox/dcim/choices.py:1554 msgid "Centimeters" msgstr "" -#: netbox/dcim/choices.py:1553 netbox/wireless/choices.py:499 +#: netbox/dcim/choices.py:1555 netbox/netbox/choices.py:177 msgid "Miles" msgstr "" -#: netbox/dcim/choices.py:1554 netbox/templates/dcim/cable_trace.html:66 -#: netbox/wireless/choices.py:500 +#: netbox/dcim/choices.py:1556 netbox/netbox/choices.py:178 +#: netbox/templates/dcim/cable_trace.html:66 msgid "Feet" msgstr "" -#: netbox/dcim/choices.py:1570 netbox/templates/dcim/device.html:327 -#: netbox/templates/dcim/rack.html:107 -msgid "Kilograms" -msgstr "" - -#: netbox/dcim/choices.py:1571 -msgid "Grams" -msgstr "" - -#: netbox/dcim/choices.py:1572 netbox/templates/dcim/device.html:328 -#: netbox/templates/dcim/rack.html:108 -msgid "Pounds" -msgstr "" - -#: netbox/dcim/choices.py:1573 -msgid "Ounces" -msgstr "" - -#: netbox/dcim/choices.py:1620 +#: netbox/dcim/choices.py:1604 msgid "Redundant" msgstr "" -#: netbox/dcim/choices.py:1641 +#: netbox/dcim/choices.py:1625 msgid "Single phase" msgstr "" -#: netbox/dcim/choices.py:1642 +#: netbox/dcim/choices.py:1626 msgid "Three-phase" msgstr "" @@ -2874,335 +3305,319 @@ msgstr "" msgid "Invalid WWN format: {value}" msgstr "" -#: netbox/dcim/filtersets.py:86 +#: netbox/dcim/filtersets.py:87 msgid "Parent region (ID)" msgstr "" -#: netbox/dcim/filtersets.py:92 +#: netbox/dcim/filtersets.py:93 msgid "Parent region (slug)" msgstr "" -#: netbox/dcim/filtersets.py:116 +#: netbox/dcim/filtersets.py:117 msgid "Parent site group (ID)" msgstr "" -#: netbox/dcim/filtersets.py:122 +#: netbox/dcim/filtersets.py:123 msgid "Parent site group (slug)" msgstr "" -#: netbox/dcim/filtersets.py:164 netbox/extras/filtersets.py:364 -#: netbox/ipam/filtersets.py:843 netbox/ipam/filtersets.py:995 +#: netbox/dcim/filtersets.py:165 netbox/extras/filtersets.py:364 +#: netbox/ipam/filtersets.py:810 netbox/ipam/filtersets.py:962 msgid "Group (ID)" msgstr "" -#: netbox/dcim/filtersets.py:170 +#: netbox/dcim/filtersets.py:171 msgid "Group (slug)" msgstr "" -#: netbox/dcim/filtersets.py:176 netbox/dcim/filtersets.py:181 +#: netbox/dcim/filtersets.py:177 netbox/dcim/filtersets.py:182 msgid "AS (ID)" msgstr "" -#: netbox/dcim/filtersets.py:246 +#: netbox/dcim/filtersets.py:247 msgid "Parent location (ID)" msgstr "" -#: netbox/dcim/filtersets.py:252 +#: netbox/dcim/filtersets.py:253 msgid "Parent location (slug)" msgstr "" -#: netbox/dcim/filtersets.py:258 netbox/dcim/filtersets.py:369 -#: netbox/dcim/filtersets.py:490 netbox/dcim/filtersets.py:1057 -#: netbox/dcim/filtersets.py:1404 netbox/dcim/filtersets.py:2182 -msgid "Location (ID)" -msgstr "" - -#: netbox/dcim/filtersets.py:265 netbox/dcim/filtersets.py:376 -#: netbox/dcim/filtersets.py:497 netbox/dcim/filtersets.py:1410 -#: netbox/extras/filtersets.py:542 -msgid "Location (slug)" -msgstr "" - -#: netbox/dcim/filtersets.py:296 netbox/dcim/filtersets.py:381 -#: netbox/dcim/filtersets.py:539 netbox/dcim/filtersets.py:678 -#: netbox/dcim/filtersets.py:882 netbox/dcim/filtersets.py:933 -#: netbox/dcim/filtersets.py:973 netbox/dcim/filtersets.py:1306 -#: netbox/dcim/filtersets.py:1840 +#: netbox/dcim/filtersets.py:297 netbox/dcim/filtersets.py:382 +#: netbox/dcim/filtersets.py:540 netbox/dcim/filtersets.py:679 +#: netbox/dcim/filtersets.py:883 netbox/dcim/filtersets.py:934 +#: netbox/dcim/filtersets.py:974 netbox/dcim/filtersets.py:1307 +#: netbox/dcim/filtersets.py:1959 msgid "Manufacturer (ID)" msgstr "" -#: netbox/dcim/filtersets.py:302 netbox/dcim/filtersets.py:387 -#: netbox/dcim/filtersets.py:545 netbox/dcim/filtersets.py:684 -#: netbox/dcim/filtersets.py:888 netbox/dcim/filtersets.py:939 -#: netbox/dcim/filtersets.py:979 netbox/dcim/filtersets.py:1312 -#: netbox/dcim/filtersets.py:1846 +#: netbox/dcim/filtersets.py:303 netbox/dcim/filtersets.py:388 +#: netbox/dcim/filtersets.py:546 netbox/dcim/filtersets.py:685 +#: netbox/dcim/filtersets.py:889 netbox/dcim/filtersets.py:940 +#: netbox/dcim/filtersets.py:980 netbox/dcim/filtersets.py:1313 +#: netbox/dcim/filtersets.py:1965 msgid "Manufacturer (slug)" msgstr "" -#: netbox/dcim/filtersets.py:393 +#: netbox/dcim/filtersets.py:394 msgid "Rack type (slug)" msgstr "" -#: netbox/dcim/filtersets.py:397 +#: netbox/dcim/filtersets.py:398 msgid "Rack type (ID)" msgstr "" -#: netbox/dcim/filtersets.py:411 netbox/dcim/filtersets.py:892 -#: netbox/dcim/filtersets.py:994 netbox/dcim/filtersets.py:1850 -#: netbox/ipam/filtersets.py:383 netbox/ipam/filtersets.py:495 -#: netbox/ipam/filtersets.py:1005 netbox/virtualization/filtersets.py:210 +#: netbox/dcim/filtersets.py:412 netbox/dcim/filtersets.py:893 +#: netbox/dcim/filtersets.py:995 netbox/dcim/filtersets.py:1969 +#: netbox/ipam/filtersets.py:350 netbox/ipam/filtersets.py:462 +#: netbox/ipam/filtersets.py:972 netbox/virtualization/filtersets.py:176 msgid "Role (ID)" msgstr "" -#: netbox/dcim/filtersets.py:417 netbox/dcim/filtersets.py:898 -#: netbox/dcim/filtersets.py:1000 netbox/dcim/filtersets.py:1856 -#: netbox/extras/filtersets.py:558 netbox/ipam/filtersets.py:389 -#: netbox/ipam/filtersets.py:501 netbox/ipam/filtersets.py:1011 -#: netbox/virtualization/filtersets.py:216 +#: netbox/dcim/filtersets.py:418 netbox/dcim/filtersets.py:899 +#: netbox/dcim/filtersets.py:1001 netbox/dcim/filtersets.py:1975 +#: netbox/extras/filtersets.py:558 netbox/ipam/filtersets.py:356 +#: netbox/ipam/filtersets.py:468 netbox/ipam/filtersets.py:978 +#: netbox/virtualization/filtersets.py:182 msgid "Role (slug)" msgstr "" -#: netbox/dcim/filtersets.py:447 netbox/dcim/filtersets.py:1062 -#: netbox/dcim/filtersets.py:1415 netbox/dcim/filtersets.py:2244 +#: netbox/dcim/filtersets.py:448 netbox/dcim/filtersets.py:1063 +#: netbox/dcim/filtersets.py:1416 netbox/dcim/filtersets.py:2367 msgid "Rack (ID)" msgstr "" -#: netbox/dcim/filtersets.py:507 netbox/extras/filtersets.py:293 +#: netbox/dcim/filtersets.py:508 netbox/extras/filtersets.py:293 #: netbox/extras/filtersets.py:337 netbox/extras/filtersets.py:359 #: netbox/extras/filtersets.py:419 netbox/users/filtersets.py:113 #: netbox/users/filtersets.py:180 msgid "User (name)" msgstr "" -#: netbox/dcim/filtersets.py:549 +#: netbox/dcim/filtersets.py:550 msgid "Default platform (ID)" msgstr "" -#: netbox/dcim/filtersets.py:555 +#: netbox/dcim/filtersets.py:556 msgid "Default platform (slug)" msgstr "" -#: netbox/dcim/filtersets.py:558 netbox/dcim/forms/filtersets.py:517 +#: netbox/dcim/filtersets.py:559 netbox/dcim/forms/filtersets.py:518 msgid "Has a front image" msgstr "" -#: netbox/dcim/filtersets.py:562 netbox/dcim/forms/filtersets.py:524 +#: netbox/dcim/filtersets.py:563 netbox/dcim/forms/filtersets.py:525 msgid "Has a rear image" msgstr "" -#: netbox/dcim/filtersets.py:567 netbox/dcim/filtersets.py:688 -#: netbox/dcim/filtersets.py:1131 netbox/dcim/forms/filtersets.py:531 -#: netbox/dcim/forms/filtersets.py:627 netbox/dcim/forms/filtersets.py:848 +#: netbox/dcim/filtersets.py:568 netbox/dcim/filtersets.py:689 +#: netbox/dcim/filtersets.py:1132 netbox/dcim/forms/filtersets.py:532 +#: netbox/dcim/forms/filtersets.py:628 netbox/dcim/forms/filtersets.py:849 msgid "Has console ports" msgstr "" -#: netbox/dcim/filtersets.py:571 netbox/dcim/filtersets.py:692 -#: netbox/dcim/filtersets.py:1135 netbox/dcim/forms/filtersets.py:538 -#: netbox/dcim/forms/filtersets.py:634 netbox/dcim/forms/filtersets.py:855 +#: netbox/dcim/filtersets.py:572 netbox/dcim/filtersets.py:693 +#: netbox/dcim/filtersets.py:1136 netbox/dcim/forms/filtersets.py:539 +#: netbox/dcim/forms/filtersets.py:635 netbox/dcim/forms/filtersets.py:856 msgid "Has console server ports" msgstr "" -#: netbox/dcim/filtersets.py:575 netbox/dcim/filtersets.py:696 -#: netbox/dcim/filtersets.py:1139 netbox/dcim/forms/filtersets.py:545 -#: netbox/dcim/forms/filtersets.py:641 netbox/dcim/forms/filtersets.py:862 +#: netbox/dcim/filtersets.py:576 netbox/dcim/filtersets.py:697 +#: netbox/dcim/filtersets.py:1140 netbox/dcim/forms/filtersets.py:546 +#: netbox/dcim/forms/filtersets.py:642 netbox/dcim/forms/filtersets.py:863 msgid "Has power ports" msgstr "" -#: netbox/dcim/filtersets.py:579 netbox/dcim/filtersets.py:700 -#: netbox/dcim/filtersets.py:1143 netbox/dcim/forms/filtersets.py:552 -#: netbox/dcim/forms/filtersets.py:648 netbox/dcim/forms/filtersets.py:869 +#: netbox/dcim/filtersets.py:580 netbox/dcim/filtersets.py:701 +#: netbox/dcim/filtersets.py:1144 netbox/dcim/forms/filtersets.py:553 +#: netbox/dcim/forms/filtersets.py:649 netbox/dcim/forms/filtersets.py:870 msgid "Has power outlets" msgstr "" -#: netbox/dcim/filtersets.py:583 netbox/dcim/filtersets.py:704 -#: netbox/dcim/filtersets.py:1147 netbox/dcim/forms/filtersets.py:559 -#: netbox/dcim/forms/filtersets.py:655 netbox/dcim/forms/filtersets.py:876 +#: netbox/dcim/filtersets.py:584 netbox/dcim/filtersets.py:705 +#: netbox/dcim/filtersets.py:1148 netbox/dcim/forms/filtersets.py:560 +#: netbox/dcim/forms/filtersets.py:656 netbox/dcim/forms/filtersets.py:877 msgid "Has interfaces" msgstr "" -#: netbox/dcim/filtersets.py:587 netbox/dcim/filtersets.py:708 -#: netbox/dcim/filtersets.py:1151 netbox/dcim/forms/filtersets.py:566 -#: netbox/dcim/forms/filtersets.py:662 netbox/dcim/forms/filtersets.py:883 +#: netbox/dcim/filtersets.py:588 netbox/dcim/filtersets.py:709 +#: netbox/dcim/filtersets.py:1152 netbox/dcim/forms/filtersets.py:567 +#: netbox/dcim/forms/filtersets.py:663 netbox/dcim/forms/filtersets.py:884 msgid "Has pass-through ports" msgstr "" -#: netbox/dcim/filtersets.py:591 netbox/dcim/filtersets.py:1155 -#: netbox/dcim/forms/filtersets.py:580 +#: netbox/dcim/filtersets.py:592 netbox/dcim/filtersets.py:1156 +#: netbox/dcim/forms/filtersets.py:581 msgid "Has module bays" msgstr "" -#: netbox/dcim/filtersets.py:595 netbox/dcim/filtersets.py:1159 -#: netbox/dcim/forms/filtersets.py:573 +#: netbox/dcim/filtersets.py:596 netbox/dcim/filtersets.py:1160 +#: netbox/dcim/forms/filtersets.py:574 msgid "Has device bays" msgstr "" -#: netbox/dcim/filtersets.py:599 netbox/dcim/forms/filtersets.py:587 +#: netbox/dcim/filtersets.py:600 netbox/dcim/forms/filtersets.py:588 msgid "Has inventory items" msgstr "" -#: netbox/dcim/filtersets.py:756 netbox/dcim/filtersets.py:989 -#: netbox/dcim/filtersets.py:1436 +#: netbox/dcim/filtersets.py:757 netbox/dcim/filtersets.py:990 +#: netbox/dcim/filtersets.py:1437 msgid "Device type (ID)" msgstr "" -#: netbox/dcim/filtersets.py:772 netbox/dcim/filtersets.py:1317 +#: netbox/dcim/filtersets.py:773 netbox/dcim/filtersets.py:1318 msgid "Module type (ID)" msgstr "" -#: netbox/dcim/filtersets.py:804 netbox/dcim/filtersets.py:1591 +#: netbox/dcim/filtersets.py:805 netbox/dcim/filtersets.py:1592 msgid "Power port (ID)" msgstr "" -#: netbox/dcim/filtersets.py:878 netbox/dcim/filtersets.py:1836 +#: netbox/dcim/filtersets.py:879 netbox/dcim/filtersets.py:1955 msgid "Parent inventory item (ID)" msgstr "" -#: netbox/dcim/filtersets.py:921 netbox/dcim/filtersets.py:947 -#: netbox/dcim/filtersets.py:1127 netbox/virtualization/filtersets.py:238 +#: netbox/dcim/filtersets.py:922 netbox/dcim/filtersets.py:948 +#: netbox/dcim/filtersets.py:1128 netbox/virtualization/filtersets.py:204 msgid "Config template (ID)" msgstr "" -#: netbox/dcim/filtersets.py:985 +#: netbox/dcim/filtersets.py:986 msgid "Device type (slug)" msgstr "" -#: netbox/dcim/filtersets.py:1005 +#: netbox/dcim/filtersets.py:1006 msgid "Parent Device (ID)" msgstr "" -#: netbox/dcim/filtersets.py:1009 netbox/virtualization/filtersets.py:220 +#: netbox/dcim/filtersets.py:1010 netbox/virtualization/filtersets.py:186 msgid "Platform (ID)" msgstr "" -#: netbox/dcim/filtersets.py:1015 netbox/extras/filtersets.py:569 -#: netbox/virtualization/filtersets.py:226 +#: netbox/dcim/filtersets.py:1016 netbox/extras/filtersets.py:569 +#: netbox/virtualization/filtersets.py:192 msgid "Platform (slug)" msgstr "" -#: netbox/dcim/filtersets.py:1051 netbox/dcim/filtersets.py:1399 -#: netbox/dcim/filtersets.py:1934 netbox/dcim/filtersets.py:2176 -#: netbox/dcim/filtersets.py:2235 +#: netbox/dcim/filtersets.py:1052 netbox/dcim/filtersets.py:1400 +#: netbox/dcim/filtersets.py:2057 netbox/dcim/filtersets.py:2299 +#: netbox/dcim/filtersets.py:2358 msgid "Site name (slug)" msgstr "" -#: netbox/dcim/filtersets.py:1067 +#: netbox/dcim/filtersets.py:1068 msgid "Parent bay (ID)" msgstr "" -#: netbox/dcim/filtersets.py:1071 +#: netbox/dcim/filtersets.py:1072 msgid "VM cluster (ID)" msgstr "" -#: netbox/dcim/filtersets.py:1077 netbox/extras/filtersets.py:591 -#: netbox/virtualization/filtersets.py:136 +#: netbox/dcim/filtersets.py:1078 netbox/extras/filtersets.py:591 +#: netbox/virtualization/filtersets.py:102 msgid "Cluster group (slug)" msgstr "" -#: netbox/dcim/filtersets.py:1082 netbox/virtualization/filtersets.py:130 +#: netbox/dcim/filtersets.py:1083 netbox/virtualization/filtersets.py:96 msgid "Cluster group (ID)" msgstr "" -#: netbox/dcim/filtersets.py:1088 +#: netbox/dcim/filtersets.py:1089 msgid "Device model (slug)" msgstr "" -#: netbox/dcim/filtersets.py:1099 netbox/dcim/forms/bulk_edit.py:522 +#: netbox/dcim/filtersets.py:1100 netbox/dcim/forms/bulk_edit.py:525 msgid "Is full depth" msgstr "" -#: netbox/dcim/filtersets.py:1103 netbox/dcim/forms/common.py:18 -#: netbox/dcim/forms/filtersets.py:818 netbox/dcim/forms/filtersets.py:1385 -#: netbox/dcim/models/device_components.py:518 -#: netbox/virtualization/filtersets.py:230 -#: netbox/virtualization/filtersets.py:301 -#: netbox/virtualization/forms/filtersets.py:172 -#: netbox/virtualization/forms/filtersets.py:223 +#: netbox/dcim/filtersets.py:1104 netbox/dcim/forms/filtersets.py:819 +#: netbox/dcim/forms/filtersets.py:1390 netbox/dcim/forms/filtersets.py:1586 +#: netbox/dcim/forms/filtersets.py:1591 netbox/dcim/forms/model_forms.py:1762 +#: netbox/dcim/models/devices.py:1499 netbox/dcim/models/devices.py:1520 +#: netbox/virtualization/filtersets.py:196 +#: netbox/virtualization/filtersets.py:268 +#: netbox/virtualization/forms/filtersets.py:177 +#: netbox/virtualization/forms/filtersets.py:228 msgid "MAC address" msgstr "" -#: netbox/dcim/filtersets.py:1110 netbox/dcim/filtersets.py:1274 -#: netbox/dcim/forms/filtersets.py:827 netbox/dcim/forms/filtersets.py:930 -#: netbox/virtualization/filtersets.py:234 -#: netbox/virtualization/forms/filtersets.py:176 +#: netbox/dcim/filtersets.py:1111 netbox/dcim/filtersets.py:1275 +#: netbox/dcim/forms/filtersets.py:828 netbox/dcim/forms/filtersets.py:931 +#: netbox/virtualization/filtersets.py:200 +#: netbox/virtualization/forms/filtersets.py:181 msgid "Has a primary IP" msgstr "" -#: netbox/dcim/filtersets.py:1114 +#: netbox/dcim/filtersets.py:1115 msgid "Has an out-of-band IP" msgstr "" -#: netbox/dcim/filtersets.py:1119 +#: netbox/dcim/filtersets.py:1120 msgid "Virtual chassis (ID)" msgstr "" -#: netbox/dcim/filtersets.py:1123 +#: netbox/dcim/filtersets.py:1124 msgid "Is a virtual chassis member" msgstr "" -#: netbox/dcim/filtersets.py:1164 +#: netbox/dcim/filtersets.py:1165 msgid "OOB IP (ID)" msgstr "" -#: netbox/dcim/filtersets.py:1168 +#: netbox/dcim/filtersets.py:1169 msgid "Has virtual device context" msgstr "" -#: netbox/dcim/filtersets.py:1257 +#: netbox/dcim/filtersets.py:1258 msgid "VDC (ID)" msgstr "" -#: netbox/dcim/filtersets.py:1262 +#: netbox/dcim/filtersets.py:1263 msgid "Device model" msgstr "" -#: netbox/dcim/filtersets.py:1267 netbox/ipam/filtersets.py:634 -#: netbox/vpn/filtersets.py:102 netbox/vpn/filtersets.py:401 -msgid "Interface (ID)" -msgstr "" - -#: netbox/dcim/filtersets.py:1323 +#: netbox/dcim/filtersets.py:1324 msgid "Module type (model)" msgstr "" -#: netbox/dcim/filtersets.py:1329 +#: netbox/dcim/filtersets.py:1330 msgid "Module bay (ID)" msgstr "" -#: netbox/dcim/filtersets.py:1333 netbox/dcim/filtersets.py:1425 -#: netbox/ipam/filtersets.py:613 netbox/ipam/filtersets.py:853 -#: netbox/ipam/filtersets.py:1117 netbox/virtualization/filtersets.py:161 -#: netbox/vpn/filtersets.py:379 +#: netbox/dcim/filtersets.py:1334 netbox/dcim/filtersets.py:1426 +#: netbox/dcim/filtersets.py:1612 netbox/ipam/filtersets.py:580 +#: netbox/ipam/filtersets.py:820 netbox/ipam/filtersets.py:1142 +#: netbox/virtualization/filtersets.py:127 netbox/vpn/filtersets.py:379 msgid "Device (ID)" msgstr "" -#: netbox/dcim/filtersets.py:1421 +#: netbox/dcim/filtersets.py:1422 msgid "Rack (name)" msgstr "" -#: netbox/dcim/filtersets.py:1431 netbox/ipam/filtersets.py:608 -#: netbox/ipam/filtersets.py:848 netbox/ipam/filtersets.py:1123 -#: netbox/vpn/filtersets.py:374 +#: netbox/dcim/filtersets.py:1432 netbox/dcim/filtersets.py:1607 +#: netbox/ipam/filtersets.py:575 netbox/ipam/filtersets.py:815 +#: netbox/ipam/filtersets.py:1148 netbox/vpn/filtersets.py:374 msgid "Device (name)" msgstr "" -#: netbox/dcim/filtersets.py:1442 +#: netbox/dcim/filtersets.py:1443 msgid "Device type (model)" msgstr "" -#: netbox/dcim/filtersets.py:1447 +#: netbox/dcim/filtersets.py:1448 msgid "Device role (ID)" msgstr "" -#: netbox/dcim/filtersets.py:1453 +#: netbox/dcim/filtersets.py:1454 msgid "Device role (slug)" msgstr "" -#: netbox/dcim/filtersets.py:1458 +#: netbox/dcim/filtersets.py:1459 msgid "Virtual Chassis (ID)" msgstr "" -#: netbox/dcim/filtersets.py:1464 netbox/dcim/forms/filtersets.py:109 -#: netbox/dcim/tables/devices.py:206 netbox/netbox/navigation/menu.py:79 +#: netbox/dcim/filtersets.py:1465 netbox/dcim/forms/filtersets.py:110 +#: netbox/dcim/tables/devices.py:216 netbox/netbox/navigation/menu.py:79 #: netbox/templates/dcim/device.html:120 #: netbox/templates/dcim/device_edit.html:93 #: netbox/templates/dcim/virtualchassis.html:20 @@ -3211,167 +3626,229 @@ msgstr "" msgid "Virtual Chassis" msgstr "" -#: netbox/dcim/filtersets.py:1488 +#: netbox/dcim/filtersets.py:1489 msgid "Module (ID)" msgstr "" -#: netbox/dcim/filtersets.py:1495 +#: netbox/dcim/filtersets.py:1496 msgid "Cable (ID)" msgstr "" -#: netbox/dcim/filtersets.py:1604 netbox/ipam/forms/bulk_import.py:189 +#: netbox/dcim/filtersets.py:1617 netbox/ipam/filtersets.py:585 +#: netbox/ipam/filtersets.py:825 netbox/ipam/filtersets.py:1158 +#: netbox/vpn/filtersets.py:385 +msgid "Virtual machine (name)" +msgstr "" + +#: netbox/dcim/filtersets.py:1622 netbox/ipam/filtersets.py:590 +#: netbox/ipam/filtersets.py:830 netbox/ipam/filtersets.py:1152 +#: netbox/virtualization/filtersets.py:248 +#: netbox/virtualization/filtersets.py:299 netbox/vpn/filtersets.py:390 +msgid "Virtual machine (ID)" +msgstr "" + +#: netbox/dcim/filtersets.py:1628 netbox/ipam/filtersets.py:596 +#: netbox/vpn/filtersets.py:97 netbox/vpn/filtersets.py:396 +msgid "Interface (name)" +msgstr "" + +#: netbox/dcim/filtersets.py:1639 netbox/ipam/filtersets.py:607 +#: netbox/vpn/filtersets.py:108 netbox/vpn/filtersets.py:407 +msgid "VM interface (name)" +msgstr "" + +#: netbox/dcim/filtersets.py:1644 netbox/ipam/filtersets.py:612 +#: netbox/vpn/filtersets.py:113 +msgid "VM interface (ID)" +msgstr "" + +#: netbox/dcim/filtersets.py:1686 netbox/ipam/forms/bulk_import.py:185 #: netbox/vpn/forms/bulk_import.py:308 msgid "Assigned VLAN" msgstr "" -#: netbox/dcim/filtersets.py:1608 +#: netbox/dcim/filtersets.py:1690 msgid "Assigned VID" msgstr "" -#: netbox/dcim/filtersets.py:1613 netbox/dcim/forms/bulk_edit.py:1531 -#: netbox/dcim/forms/bulk_import.py:913 netbox/dcim/forms/filtersets.py:1428 -#: netbox/dcim/forms/model_forms.py:1385 -#: netbox/dcim/models/device_components.py:711 -#: netbox/dcim/tables/devices.py:626 netbox/ipam/filtersets.py:318 -#: netbox/ipam/filtersets.py:329 netbox/ipam/filtersets.py:485 -#: netbox/ipam/filtersets.py:586 netbox/ipam/filtersets.py:597 -#: netbox/ipam/forms/bulk_edit.py:242 netbox/ipam/forms/bulk_edit.py:298 -#: netbox/ipam/forms/bulk_edit.py:340 netbox/ipam/forms/bulk_import.py:157 -#: netbox/ipam/forms/bulk_import.py:243 netbox/ipam/forms/bulk_import.py:279 -#: netbox/ipam/forms/filtersets.py:67 netbox/ipam/forms/filtersets.py:172 -#: netbox/ipam/forms/filtersets.py:309 netbox/ipam/forms/model_forms.py:62 -#: netbox/ipam/forms/model_forms.py:202 netbox/ipam/forms/model_forms.py:247 -#: netbox/ipam/forms/model_forms.py:300 netbox/ipam/forms/model_forms.py:464 -#: netbox/ipam/forms/model_forms.py:478 netbox/ipam/forms/model_forms.py:492 -#: netbox/ipam/models/ip.py:233 netbox/ipam/models/ip.py:512 -#: netbox/ipam/models/ip.py:720 netbox/ipam/models/vrfs.py:62 -#: netbox/ipam/tables/ip.py:242 netbox/ipam/tables/ip.py:309 -#: netbox/ipam/tables/ip.py:360 netbox/ipam/tables/ip.py:450 -#: netbox/templates/dcim/interface.html:133 +#: netbox/dcim/filtersets.py:1695 netbox/dcim/forms/bulk_edit.py:1544 +#: netbox/dcim/forms/bulk_import.py:921 netbox/dcim/forms/filtersets.py:1433 +#: netbox/dcim/forms/model_forms.py:1411 +#: netbox/dcim/models/device_components.py:749 +#: netbox/dcim/tables/devices.py:647 netbox/ipam/filtersets.py:321 +#: netbox/ipam/filtersets.py:332 netbox/ipam/filtersets.py:452 +#: netbox/ipam/filtersets.py:553 netbox/ipam/filtersets.py:564 +#: netbox/ipam/forms/bulk_edit.py:226 netbox/ipam/forms/bulk_edit.py:282 +#: netbox/ipam/forms/bulk_edit.py:324 netbox/ipam/forms/bulk_import.py:160 +#: netbox/ipam/forms/bulk_import.py:242 netbox/ipam/forms/bulk_import.py:278 +#: netbox/ipam/forms/filtersets.py:69 netbox/ipam/forms/filtersets.py:174 +#: netbox/ipam/forms/filtersets.py:312 netbox/ipam/forms/model_forms.py:65 +#: netbox/ipam/forms/model_forms.py:208 netbox/ipam/forms/model_forms.py:248 +#: netbox/ipam/forms/model_forms.py:302 netbox/ipam/forms/model_forms.py:466 +#: netbox/ipam/forms/model_forms.py:480 netbox/ipam/forms/model_forms.py:494 +#: netbox/ipam/models/ip.py:217 netbox/ipam/models/ip.py:498 +#: netbox/ipam/models/ip.py:719 netbox/ipam/models/vrfs.py:61 +#: netbox/ipam/tables/ip.py:188 netbox/ipam/tables/ip.py:259 +#: netbox/ipam/tables/ip.py:310 netbox/ipam/tables/ip.py:400 +#: netbox/templates/dcim/interface.html:152 #: netbox/templates/ipam/ipaddress.html:18 #: netbox/templates/ipam/iprange.html:40 netbox/templates/ipam/prefix.html:19 #: netbox/templates/ipam/vrf.html:7 netbox/templates/ipam/vrf.html:13 -#: netbox/templates/virtualization/vminterface.html:47 -#: netbox/virtualization/forms/bulk_edit.py:261 -#: netbox/virtualization/forms/bulk_import.py:171 -#: netbox/virtualization/forms/filtersets.py:228 -#: netbox/virtualization/forms/model_forms.py:344 -#: netbox/virtualization/models/virtualmachines.py:355 -#: netbox/virtualization/tables/virtualmachines.py:143 +#: netbox/templates/virtualization/vminterface.html:84 +#: netbox/virtualization/forms/bulk_edit.py:243 +#: netbox/virtualization/forms/bulk_import.py:177 +#: netbox/virtualization/forms/filtersets.py:233 +#: netbox/virtualization/forms/model_forms.py:360 +#: netbox/virtualization/models/virtualmachines.py:331 +#: netbox/virtualization/tables/virtualmachines.py:113 msgid "VRF" msgstr "" -#: netbox/dcim/filtersets.py:1619 netbox/ipam/filtersets.py:324 -#: netbox/ipam/filtersets.py:335 netbox/ipam/filtersets.py:491 -#: netbox/ipam/filtersets.py:592 netbox/ipam/filtersets.py:603 +#: netbox/dcim/filtersets.py:1701 netbox/ipam/filtersets.py:327 +#: netbox/ipam/filtersets.py:338 netbox/ipam/filtersets.py:458 +#: netbox/ipam/filtersets.py:559 netbox/ipam/filtersets.py:570 msgid "VRF (RD)" msgstr "" -#: netbox/dcim/filtersets.py:1624 netbox/ipam/filtersets.py:1032 +#: netbox/dcim/filtersets.py:1706 netbox/ipam/filtersets.py:1010 #: netbox/vpn/filtersets.py:342 msgid "L2VPN (ID)" msgstr "" -#: netbox/dcim/filtersets.py:1630 netbox/dcim/forms/filtersets.py:1433 -#: netbox/dcim/tables/devices.py:570 netbox/ipam/filtersets.py:1038 -#: netbox/ipam/forms/filtersets.py:518 netbox/ipam/tables/vlans.py:137 -#: netbox/templates/dcim/interface.html:93 netbox/templates/ipam/vlan.html:66 +#: netbox/dcim/filtersets.py:1712 netbox/dcim/forms/filtersets.py:1438 +#: netbox/dcim/tables/devices.py:583 netbox/ipam/filtersets.py:1016 +#: netbox/ipam/forms/filtersets.py:570 netbox/ipam/tables/vlans.py:113 +#: netbox/templates/dcim/interface.html:99 netbox/templates/ipam/vlan.html:82 #: netbox/templates/vpn/l2vpntermination.html:12 -#: netbox/virtualization/forms/filtersets.py:233 +#: netbox/virtualization/forms/filtersets.py:238 #: netbox/vpn/forms/bulk_import.py:280 netbox/vpn/forms/filtersets.py:246 -#: netbox/vpn/forms/model_forms.py:409 netbox/vpn/forms/model_forms.py:427 +#: netbox/vpn/forms/model_forms.py:412 netbox/vpn/forms/model_forms.py:430 #: netbox/vpn/models/l2vpn.py:63 netbox/vpn/tables/l2vpn.py:55 msgid "L2VPN" msgstr "" -#: netbox/dcim/filtersets.py:1662 +#: netbox/dcim/filtersets.py:1717 netbox/ipam/filtersets.py:1091 +msgid "VLAN Translation Policy (ID)" +msgstr "" + +#: netbox/dcim/filtersets.py:1723 netbox/dcim/forms/model_forms.py:1428 +#: netbox/dcim/models/device_components.py:568 +#: netbox/ipam/forms/filtersets.py:489 netbox/ipam/forms/model_forms.py:704 +#: netbox/templates/ipam/vlantranslationpolicy.html:11 +#: netbox/virtualization/forms/model_forms.py:365 +msgid "VLAN Translation Policy" +msgstr "" + +#: netbox/dcim/filtersets.py:1757 msgid "Virtual Chassis Interfaces for Device" msgstr "" -#: netbox/dcim/filtersets.py:1667 +#: netbox/dcim/filtersets.py:1762 msgid "Virtual Chassis Interfaces for Device (ID)" msgstr "" -#: netbox/dcim/filtersets.py:1671 +#: netbox/dcim/filtersets.py:1766 msgid "Kind of interface" msgstr "" -#: netbox/dcim/filtersets.py:1676 netbox/virtualization/filtersets.py:293 +#: netbox/dcim/filtersets.py:1771 netbox/virtualization/filtersets.py:259 msgid "Parent interface (ID)" msgstr "" -#: netbox/dcim/filtersets.py:1681 netbox/virtualization/filtersets.py:298 +#: netbox/dcim/filtersets.py:1776 netbox/virtualization/filtersets.py:264 msgid "Bridged interface (ID)" msgstr "" -#: netbox/dcim/filtersets.py:1686 +#: netbox/dcim/filtersets.py:1781 msgid "LAG interface (ID)" msgstr "" -#: netbox/dcim/filtersets.py:1713 netbox/dcim/filtersets.py:1725 -#: netbox/dcim/forms/filtersets.py:1345 netbox/dcim/forms/model_forms.py:1697 +#: netbox/dcim/filtersets.py:1789 netbox/dcim/tables/devices.py:605 +#: netbox/dcim/tables/devices.py:1135 netbox/templates/dcim/interface.html:131 +#: netbox/templates/dcim/macaddress.html:11 +#: netbox/templates/dcim/macaddress.html:14 +#: netbox/templates/virtualization/vminterface.html:73 +msgid "MAC Address" +msgstr "" + +#: netbox/dcim/filtersets.py:1794 netbox/virtualization/filtersets.py:273 +msgid "Primary MAC address (ID)" +msgstr "" + +#: netbox/dcim/filtersets.py:1800 netbox/dcim/forms/model_forms.py:1415 +#: netbox/virtualization/filtersets.py:279 +#: netbox/virtualization/forms/model_forms.py:303 +msgid "Primary MAC address" +msgstr "" + +#: netbox/dcim/filtersets.py:1822 netbox/dcim/filtersets.py:1834 +#: netbox/dcim/forms/filtersets.py:1350 netbox/dcim/forms/model_forms.py:1742 #: netbox/templates/dcim/virtualdevicecontext.html:15 msgid "Virtual Device Context" msgstr "" -#: netbox/dcim/filtersets.py:1719 +#: netbox/dcim/filtersets.py:1828 msgid "Virtual Device Context (Identifier)" msgstr "" -#: netbox/dcim/filtersets.py:1730 netbox/templates/wireless/wirelesslan.html:11 -#: netbox/wireless/forms/model_forms.py:53 +#: netbox/dcim/filtersets.py:1839 netbox/templates/wireless/wirelesslan.html:11 +#: netbox/wireless/forms/model_forms.py:55 msgid "Wireless LAN" msgstr "" -#: netbox/dcim/filtersets.py:1734 netbox/dcim/tables/devices.py:613 +#: netbox/dcim/filtersets.py:1843 netbox/dcim/tables/devices.py:634 msgid "Wireless link" msgstr "" -#: netbox/dcim/filtersets.py:1803 +#: netbox/dcim/filtersets.py:1853 +msgid "Virtual circuit termination (ID)" +msgstr "" + +#: netbox/dcim/filtersets.py:1922 msgid "Parent module bay (ID)" msgstr "" -#: netbox/dcim/filtersets.py:1808 +#: netbox/dcim/filtersets.py:1927 msgid "Installed module (ID)" msgstr "" -#: netbox/dcim/filtersets.py:1819 +#: netbox/dcim/filtersets.py:1938 msgid "Installed device (ID)" msgstr "" -#: netbox/dcim/filtersets.py:1825 +#: netbox/dcim/filtersets.py:1944 msgid "Installed device (name)" msgstr "" -#: netbox/dcim/filtersets.py:1891 +#: netbox/dcim/filtersets.py:2014 msgid "Master (ID)" msgstr "" -#: netbox/dcim/filtersets.py:1897 +#: netbox/dcim/filtersets.py:2020 msgid "Master (name)" msgstr "" -#: netbox/dcim/filtersets.py:1939 netbox/tenancy/filtersets.py:245 +#: netbox/dcim/filtersets.py:2062 netbox/tenancy/filtersets.py:245 msgid "Tenant (ID)" msgstr "" -#: netbox/dcim/filtersets.py:1945 netbox/extras/filtersets.py:618 +#: netbox/dcim/filtersets.py:2068 netbox/extras/filtersets.py:618 #: netbox/tenancy/filtersets.py:251 msgid "Tenant (slug)" msgstr "" -#: netbox/dcim/filtersets.py:1981 netbox/dcim/forms/filtersets.py:1077 +#: netbox/dcim/filtersets.py:2104 netbox/dcim/forms/filtersets.py:1078 msgid "Unterminated" msgstr "" -#: netbox/dcim/filtersets.py:2239 +#: netbox/dcim/filtersets.py:2362 msgid "Power panel (ID)" msgstr "" #: netbox/dcim/forms/bulk_create.py:40 netbox/extras/forms/filtersets.py:401 #: netbox/extras/forms/model_forms.py:567 #: netbox/extras/forms/model_forms.py:619 netbox/netbox/forms/base.py:86 -#: netbox/netbox/forms/mixins.py:81 netbox/netbox/tables/columns.py:478 +#: netbox/netbox/forms/mixins.py:81 netbox/netbox/tables/columns.py:481 #: netbox/templates/circuits/inc/circuit_termination.html:32 #: netbox/templates/generic/bulk_edit.html:65 #: netbox/templates/inc/panels/tags.html:5 @@ -3379,11 +3856,11 @@ msgstr "" msgid "Tags" msgstr "" -#: netbox/dcim/forms/bulk_create.py:112 netbox/dcim/forms/filtersets.py:1498 -#: netbox/dcim/forms/model_forms.py:488 netbox/dcim/forms/model_forms.py:546 +#: netbox/dcim/forms/bulk_create.py:112 netbox/dcim/forms/filtersets.py:1503 +#: netbox/dcim/forms/model_forms.py:498 netbox/dcim/forms/model_forms.py:557 #: netbox/dcim/forms/object_create.py:197 -#: netbox/dcim/forms/object_create.py:345 netbox/dcim/tables/devices.py:165 -#: netbox/dcim/tables/devices.py:707 netbox/dcim/tables/devicetypes.py:246 +#: netbox/dcim/forms/object_create.py:345 netbox/dcim/tables/devices.py:175 +#: netbox/dcim/tables/devices.py:740 netbox/dcim/tables/devicetypes.py:248 #: netbox/templates/dcim/device.html:43 netbox/templates/dcim/device.html:131 #: netbox/templates/dcim/modulebay.html:38 #: netbox/templates/dcim/virtualchassis.html:66 @@ -3397,44 +3874,44 @@ msgid "" "created.)" msgstr "" -#: netbox/dcim/forms/bulk_edit.py:133 +#: netbox/dcim/forms/bulk_edit.py:136 msgid "Contact name" msgstr "" -#: netbox/dcim/forms/bulk_edit.py:138 +#: netbox/dcim/forms/bulk_edit.py:141 msgid "Contact phone" msgstr "" -#: netbox/dcim/forms/bulk_edit.py:144 +#: netbox/dcim/forms/bulk_edit.py:147 msgid "Contact E-mail" msgstr "" -#: netbox/dcim/forms/bulk_edit.py:147 netbox/dcim/forms/bulk_import.py:123 -#: netbox/dcim/forms/model_forms.py:128 +#: netbox/dcim/forms/bulk_edit.py:150 netbox/dcim/forms/bulk_import.py:125 +#: netbox/dcim/forms/model_forms.py:132 msgid "Time zone" msgstr "" -#: netbox/dcim/forms/bulk_edit.py:225 netbox/dcim/forms/bulk_edit.py:501 -#: netbox/dcim/forms/bulk_edit.py:565 netbox/dcim/forms/bulk_edit.py:638 -#: netbox/dcim/forms/bulk_edit.py:662 netbox/dcim/forms/bulk_edit.py:755 -#: netbox/dcim/forms/bulk_edit.py:1282 netbox/dcim/forms/bulk_edit.py:1703 -#: netbox/dcim/forms/bulk_import.py:182 netbox/dcim/forms/bulk_import.py:393 -#: netbox/dcim/forms/bulk_import.py:427 netbox/dcim/forms/bulk_import.py:472 -#: netbox/dcim/forms/bulk_import.py:508 netbox/dcim/forms/bulk_import.py:1104 -#: netbox/dcim/forms/filtersets.py:313 netbox/dcim/forms/filtersets.py:372 -#: netbox/dcim/forms/filtersets.py:494 netbox/dcim/forms/filtersets.py:619 -#: netbox/dcim/forms/filtersets.py:700 netbox/dcim/forms/filtersets.py:782 -#: netbox/dcim/forms/filtersets.py:947 netbox/dcim/forms/filtersets.py:1539 -#: netbox/dcim/forms/model_forms.py:207 netbox/dcim/forms/model_forms.py:337 -#: netbox/dcim/forms/model_forms.py:349 netbox/dcim/forms/model_forms.py:395 -#: netbox/dcim/forms/model_forms.py:436 netbox/dcim/forms/model_forms.py:1082 -#: netbox/dcim/forms/model_forms.py:1522 netbox/dcim/forms/object_import.py:187 -#: netbox/dcim/tables/devices.py:96 netbox/dcim/tables/devices.py:172 -#: netbox/dcim/tables/devices.py:940 netbox/dcim/tables/devicetypes.py:80 -#: netbox/dcim/tables/devicetypes.py:308 netbox/dcim/tables/modules.py:20 +#: netbox/dcim/forms/bulk_edit.py:228 netbox/dcim/forms/bulk_edit.py:504 +#: netbox/dcim/forms/bulk_edit.py:568 netbox/dcim/forms/bulk_edit.py:641 +#: netbox/dcim/forms/bulk_edit.py:665 netbox/dcim/forms/bulk_edit.py:758 +#: netbox/dcim/forms/bulk_edit.py:1285 netbox/dcim/forms/bulk_edit.py:1716 +#: netbox/dcim/forms/bulk_import.py:184 netbox/dcim/forms/bulk_import.py:395 +#: netbox/dcim/forms/bulk_import.py:429 netbox/dcim/forms/bulk_import.py:477 +#: netbox/dcim/forms/bulk_import.py:513 netbox/dcim/forms/bulk_import.py:1112 +#: netbox/dcim/forms/filtersets.py:314 netbox/dcim/forms/filtersets.py:373 +#: netbox/dcim/forms/filtersets.py:495 netbox/dcim/forms/filtersets.py:620 +#: netbox/dcim/forms/filtersets.py:701 netbox/dcim/forms/filtersets.py:783 +#: netbox/dcim/forms/filtersets.py:948 netbox/dcim/forms/filtersets.py:1544 +#: netbox/dcim/forms/model_forms.py:211 netbox/dcim/forms/model_forms.py:345 +#: netbox/dcim/forms/model_forms.py:357 netbox/dcim/forms/model_forms.py:404 +#: netbox/dcim/forms/model_forms.py:445 netbox/dcim/forms/model_forms.py:1095 +#: netbox/dcim/forms/model_forms.py:1564 netbox/dcim/forms/object_import.py:188 +#: netbox/dcim/tables/devices.py:107 netbox/dcim/tables/devices.py:182 +#: netbox/dcim/tables/devices.py:969 netbox/dcim/tables/devicetypes.py:80 +#: netbox/dcim/tables/devicetypes.py:310 netbox/dcim/tables/modules.py:20 #: netbox/dcim/tables/modules.py:61 netbox/dcim/tables/racks.py:58 -#: netbox/dcim/tables/racks.py:132 netbox/templates/dcim/devicetype.html:14 -#: netbox/templates/dcim/inventoryitem.html:44 +#: netbox/dcim/tables/racks.py:131 netbox/templates/dcim/devicetype.html:14 +#: netbox/templates/dcim/inventoryitem.html:48 #: netbox/templates/dcim/manufacturer.html:33 #: netbox/templates/dcim/modulebay.html:62 #: netbox/templates/dcim/moduletype.html:25 @@ -3443,64 +3920,64 @@ msgstr "" msgid "Manufacturer" msgstr "" -#: netbox/dcim/forms/bulk_edit.py:230 netbox/dcim/forms/bulk_edit.py:378 -#: netbox/dcim/forms/bulk_import.py:191 netbox/dcim/forms/bulk_import.py:270 -#: netbox/dcim/forms/filtersets.py:255 +#: netbox/dcim/forms/bulk_edit.py:233 netbox/dcim/forms/bulk_edit.py:381 +#: netbox/dcim/forms/bulk_import.py:193 netbox/dcim/forms/bulk_import.py:272 +#: netbox/dcim/forms/filtersets.py:256 #: netbox/templates/dcim/inc/panels/racktype_dimensions.html:6 msgid "Form factor" msgstr "" -#: netbox/dcim/forms/bulk_edit.py:235 netbox/dcim/forms/bulk_edit.py:383 -#: netbox/dcim/forms/bulk_import.py:199 netbox/dcim/forms/bulk_import.py:273 -#: netbox/dcim/forms/filtersets.py:260 +#: netbox/dcim/forms/bulk_edit.py:238 netbox/dcim/forms/bulk_edit.py:386 +#: netbox/dcim/forms/bulk_import.py:201 netbox/dcim/forms/bulk_import.py:275 +#: netbox/dcim/forms/filtersets.py:261 #: netbox/templates/dcim/inc/panels/racktype_dimensions.html:10 msgid "Width" msgstr "" -#: netbox/dcim/forms/bulk_edit.py:241 netbox/dcim/forms/bulk_edit.py:389 -#: netbox/dcim/forms/bulk_import.py:280 +#: netbox/dcim/forms/bulk_edit.py:244 netbox/dcim/forms/bulk_edit.py:392 +#: netbox/dcim/forms/bulk_import.py:282 #: netbox/templates/dcim/devicetype.html:37 msgid "Height (U)" msgstr "" -#: netbox/dcim/forms/bulk_edit.py:250 netbox/dcim/forms/bulk_edit.py:394 -#: netbox/dcim/forms/filtersets.py:274 +#: netbox/dcim/forms/bulk_edit.py:253 netbox/dcim/forms/bulk_edit.py:397 +#: netbox/dcim/forms/filtersets.py:275 msgid "Descending units" msgstr "" -#: netbox/dcim/forms/bulk_edit.py:253 netbox/dcim/forms/bulk_edit.py:397 +#: netbox/dcim/forms/bulk_edit.py:256 netbox/dcim/forms/bulk_edit.py:400 msgid "Outer width" msgstr "" -#: netbox/dcim/forms/bulk_edit.py:258 netbox/dcim/forms/bulk_edit.py:402 +#: netbox/dcim/forms/bulk_edit.py:261 netbox/dcim/forms/bulk_edit.py:405 msgid "Outer depth" msgstr "" -#: netbox/dcim/forms/bulk_edit.py:263 netbox/dcim/forms/bulk_edit.py:407 -#: netbox/dcim/forms/bulk_import.py:204 netbox/dcim/forms/bulk_import.py:283 +#: netbox/dcim/forms/bulk_edit.py:266 netbox/dcim/forms/bulk_edit.py:410 +#: netbox/dcim/forms/bulk_import.py:206 netbox/dcim/forms/bulk_import.py:285 msgid "Outer unit" msgstr "" -#: netbox/dcim/forms/bulk_edit.py:268 netbox/dcim/forms/bulk_edit.py:412 +#: netbox/dcim/forms/bulk_edit.py:271 netbox/dcim/forms/bulk_edit.py:415 msgid "Mounting depth" msgstr "" -#: netbox/dcim/forms/bulk_edit.py:273 netbox/dcim/forms/bulk_edit.py:300 -#: netbox/dcim/forms/bulk_edit.py:422 netbox/dcim/forms/bulk_edit.py:452 -#: netbox/dcim/forms/bulk_edit.py:535 netbox/dcim/forms/bulk_edit.py:558 -#: netbox/dcim/forms/bulk_edit.py:579 netbox/dcim/forms/bulk_edit.py:601 -#: netbox/dcim/forms/bulk_import.py:406 netbox/dcim/forms/bulk_import.py:438 -#: netbox/dcim/forms/filtersets.py:285 netbox/dcim/forms/filtersets.py:307 -#: netbox/dcim/forms/filtersets.py:327 netbox/dcim/forms/filtersets.py:401 -#: netbox/dcim/forms/filtersets.py:488 netbox/dcim/forms/filtersets.py:594 -#: netbox/dcim/forms/filtersets.py:613 netbox/dcim/forms/filtersets.py:674 -#: netbox/dcim/forms/model_forms.py:221 netbox/dcim/forms/model_forms.py:298 +#: netbox/dcim/forms/bulk_edit.py:276 netbox/dcim/forms/bulk_edit.py:303 +#: netbox/dcim/forms/bulk_edit.py:425 netbox/dcim/forms/bulk_edit.py:455 +#: netbox/dcim/forms/bulk_edit.py:538 netbox/dcim/forms/bulk_edit.py:561 +#: netbox/dcim/forms/bulk_edit.py:582 netbox/dcim/forms/bulk_edit.py:604 +#: netbox/dcim/forms/bulk_import.py:408 netbox/dcim/forms/bulk_import.py:440 +#: netbox/dcim/forms/filtersets.py:286 netbox/dcim/forms/filtersets.py:308 +#: netbox/dcim/forms/filtersets.py:328 netbox/dcim/forms/filtersets.py:402 +#: netbox/dcim/forms/filtersets.py:489 netbox/dcim/forms/filtersets.py:595 +#: netbox/dcim/forms/filtersets.py:614 netbox/dcim/forms/filtersets.py:675 +#: netbox/dcim/forms/model_forms.py:226 netbox/dcim/forms/model_forms.py:306 #: netbox/dcim/tables/devicetypes.py:106 netbox/dcim/tables/modules.py:35 -#: netbox/dcim/tables/racks.py:74 netbox/dcim/tables/racks.py:172 +#: netbox/dcim/tables/racks.py:74 netbox/dcim/tables/racks.py:171 #: netbox/extras/forms/bulk_edit.py:53 netbox/extras/forms/bulk_edit.py:133 #: netbox/extras/forms/bulk_edit.py:183 netbox/extras/forms/bulk_edit.py:288 #: netbox/extras/forms/filtersets.py:64 netbox/extras/forms/filtersets.py:156 -#: netbox/extras/forms/filtersets.py:243 netbox/ipam/forms/bulk_edit.py:190 +#: netbox/extras/forms/filtersets.py:243 netbox/ipam/forms/bulk_edit.py:193 #: netbox/templates/dcim/device.html:324 #: netbox/templates/dcim/devicetype.html:49 #: netbox/templates/dcim/moduletype.html:45 netbox/templates/dcim/rack.html:81 @@ -3512,341 +3989,232 @@ msgstr "" msgid "Weight" msgstr "" -#: netbox/dcim/forms/bulk_edit.py:278 netbox/dcim/forms/bulk_edit.py:427 -#: netbox/dcim/forms/filtersets.py:290 +#: netbox/dcim/forms/bulk_edit.py:281 netbox/dcim/forms/bulk_edit.py:430 +#: netbox/dcim/forms/filtersets.py:291 msgid "Max weight" msgstr "" -#: netbox/dcim/forms/bulk_edit.py:283 netbox/dcim/forms/bulk_edit.py:432 -#: netbox/dcim/forms/bulk_edit.py:540 netbox/dcim/forms/bulk_edit.py:584 -#: netbox/dcim/forms/bulk_import.py:210 netbox/dcim/forms/bulk_import.py:295 -#: netbox/dcim/forms/bulk_import.py:411 netbox/dcim/forms/bulk_import.py:443 -#: netbox/dcim/forms/filtersets.py:295 netbox/dcim/forms/filtersets.py:598 -#: netbox/dcim/forms/filtersets.py:678 +#: netbox/dcim/forms/bulk_edit.py:286 netbox/dcim/forms/bulk_edit.py:435 +#: netbox/dcim/forms/bulk_edit.py:543 netbox/dcim/forms/bulk_edit.py:587 +#: netbox/dcim/forms/bulk_import.py:212 netbox/dcim/forms/bulk_import.py:297 +#: netbox/dcim/forms/bulk_import.py:413 netbox/dcim/forms/bulk_import.py:445 +#: netbox/dcim/forms/filtersets.py:296 netbox/dcim/forms/filtersets.py:599 +#: netbox/dcim/forms/filtersets.py:679 msgid "Weight unit" msgstr "" -#: netbox/dcim/forms/bulk_edit.py:297 netbox/dcim/forms/filtersets.py:305 -#: netbox/dcim/forms/model_forms.py:217 netbox/dcim/forms/model_forms.py:256 +#: netbox/dcim/forms/bulk_edit.py:300 netbox/dcim/forms/filtersets.py:306 +#: netbox/dcim/forms/model_forms.py:222 netbox/dcim/forms/model_forms.py:261 #: netbox/templates/dcim/rack.html:45 netbox/templates/dcim/racktype.html:13 msgid "Rack Type" msgstr "" -#: netbox/dcim/forms/bulk_edit.py:299 netbox/dcim/forms/model_forms.py:220 -#: netbox/dcim/forms/model_forms.py:297 +#: netbox/dcim/forms/bulk_edit.py:302 netbox/dcim/forms/model_forms.py:225 +#: netbox/dcim/forms/model_forms.py:305 msgid "Outer Dimensions" msgstr "" -#: netbox/dcim/forms/bulk_edit.py:302 netbox/dcim/forms/model_forms.py:222 -#: netbox/dcim/forms/model_forms.py:299 netbox/templates/dcim/device.html:315 +#: netbox/dcim/forms/bulk_edit.py:305 netbox/dcim/forms/model_forms.py:227 +#: netbox/dcim/forms/model_forms.py:307 netbox/templates/dcim/device.html:315 #: netbox/templates/dcim/inc/panels/racktype_dimensions.html:3 msgid "Dimensions" msgstr "" -#: netbox/dcim/forms/bulk_edit.py:304 netbox/dcim/forms/filtersets.py:306 -#: netbox/dcim/forms/filtersets.py:326 netbox/dcim/forms/model_forms.py:224 +#: netbox/dcim/forms/bulk_edit.py:307 netbox/dcim/forms/filtersets.py:307 +#: netbox/dcim/forms/filtersets.py:327 netbox/dcim/forms/model_forms.py:229 #: netbox/templates/dcim/inc/panels/racktype_numbering.html:3 msgid "Numbering" msgstr "" -#: netbox/dcim/forms/bulk_edit.py:358 netbox/dcim/forms/bulk_edit.py:1277 -#: netbox/dcim/forms/bulk_edit.py:1698 netbox/dcim/forms/bulk_import.py:253 -#: netbox/dcim/forms/bulk_import.py:1098 netbox/dcim/forms/filtersets.py:367 -#: netbox/dcim/forms/filtersets.py:777 netbox/dcim/forms/filtersets.py:1534 -#: netbox/dcim/forms/model_forms.py:251 netbox/dcim/forms/model_forms.py:1077 -#: netbox/dcim/forms/model_forms.py:1517 netbox/dcim/forms/object_import.py:181 -#: netbox/dcim/tables/devices.py:169 netbox/dcim/tables/devices.py:809 -#: netbox/dcim/tables/devices.py:937 netbox/dcim/tables/devicetypes.py:304 -#: netbox/dcim/tables/racks.py:129 netbox/extras/filtersets.py:552 -#: netbox/ipam/forms/bulk_edit.py:261 netbox/ipam/forms/bulk_edit.py:311 -#: netbox/ipam/forms/bulk_edit.py:359 netbox/ipam/forms/bulk_edit.py:511 -#: netbox/ipam/forms/bulk_import.py:197 netbox/ipam/forms/bulk_import.py:262 -#: netbox/ipam/forms/bulk_import.py:298 netbox/ipam/forms/bulk_import.py:479 -#: netbox/ipam/forms/filtersets.py:237 netbox/ipam/forms/filtersets.py:289 -#: netbox/ipam/forms/filtersets.py:360 netbox/ipam/forms/filtersets.py:509 -#: netbox/ipam/forms/model_forms.py:188 netbox/ipam/forms/model_forms.py:221 -#: netbox/ipam/forms/model_forms.py:250 netbox/ipam/forms/model_forms.py:676 -#: netbox/ipam/tables/ip.py:258 netbox/ipam/tables/ip.py:316 -#: netbox/ipam/tables/ip.py:367 netbox/ipam/tables/vlans.py:130 -#: netbox/ipam/tables/vlans.py:235 netbox/templates/dcim/device.html:182 -#: netbox/templates/dcim/inc/panels/inventory_items.html:20 -#: netbox/templates/dcim/interface.html:223 -#: netbox/templates/dcim/inventoryitem.html:36 -#: netbox/templates/dcim/rack.html:49 netbox/templates/ipam/ipaddress.html:41 -#: netbox/templates/ipam/iprange.html:50 netbox/templates/ipam/prefix.html:77 -#: netbox/templates/ipam/role.html:19 netbox/templates/ipam/vlan.html:52 -#: netbox/templates/virtualization/virtualmachine.html:23 -#: netbox/templates/vpn/tunneltermination.html:17 -#: netbox/templates/wireless/inc/wirelesslink_interface.html:20 -#: netbox/tenancy/forms/bulk_edit.py:142 netbox/tenancy/forms/filtersets.py:107 -#: netbox/tenancy/forms/model_forms.py:137 -#: netbox/tenancy/tables/contacts.py:102 -#: netbox/virtualization/forms/bulk_edit.py:145 -#: netbox/virtualization/forms/bulk_import.py:106 -#: netbox/virtualization/forms/filtersets.py:157 -#: netbox/virtualization/forms/model_forms.py:195 -#: netbox/virtualization/tables/virtualmachines.py:75 -#: netbox/vpn/forms/bulk_edit.py:87 netbox/vpn/forms/bulk_import.py:81 -#: netbox/vpn/forms/filtersets.py:85 netbox/vpn/forms/model_forms.py:78 -#: netbox/vpn/forms/model_forms.py:113 netbox/vpn/tables/tunnels.py:82 -msgid "Role" -msgstr "" - -#: netbox/dcim/forms/bulk_edit.py:363 netbox/dcim/forms/bulk_import.py:260 -#: netbox/dcim/forms/filtersets.py:380 +#: netbox/dcim/forms/bulk_edit.py:366 netbox/dcim/forms/bulk_import.py:262 +#: netbox/dcim/forms/filtersets.py:381 msgid "Rack type" msgstr "" -#: netbox/dcim/forms/bulk_edit.py:370 netbox/dcim/forms/bulk_edit.py:718 -#: netbox/dcim/forms/bulk_edit.py:779 netbox/templates/dcim/device.html:104 +#: netbox/dcim/forms/bulk_edit.py:373 netbox/dcim/forms/bulk_edit.py:721 +#: netbox/dcim/forms/bulk_edit.py:782 netbox/templates/dcim/device.html:104 #: netbox/templates/dcim/module.html:77 netbox/templates/dcim/modulebay.html:70 #: netbox/templates/dcim/rack.html:57 #: netbox/templates/virtualization/virtualmachine.html:35 msgid "Serial Number" msgstr "" -#: netbox/dcim/forms/bulk_edit.py:373 netbox/dcim/forms/filtersets.py:387 -#: netbox/dcim/forms/filtersets.py:813 netbox/dcim/forms/filtersets.py:967 -#: netbox/dcim/forms/filtersets.py:1546 +#: netbox/dcim/forms/bulk_edit.py:376 netbox/dcim/forms/filtersets.py:388 +#: netbox/dcim/forms/filtersets.py:814 netbox/dcim/forms/filtersets.py:968 +#: netbox/dcim/forms/filtersets.py:1551 msgid "Asset tag" msgstr "" -#: netbox/dcim/forms/bulk_edit.py:417 netbox/dcim/forms/bulk_edit.py:530 -#: netbox/dcim/forms/bulk_edit.py:574 netbox/dcim/forms/bulk_edit.py:711 -#: netbox/dcim/forms/bulk_import.py:289 netbox/dcim/forms/bulk_import.py:432 -#: netbox/dcim/forms/bulk_import.py:602 netbox/dcim/forms/filtersets.py:280 -#: netbox/dcim/forms/filtersets.py:511 netbox/dcim/forms/filtersets.py:669 -#: netbox/dcim/forms/filtersets.py:804 netbox/templates/dcim/device.html:98 +#: netbox/dcim/forms/bulk_edit.py:420 netbox/dcim/forms/bulk_edit.py:533 +#: netbox/dcim/forms/bulk_edit.py:577 netbox/dcim/forms/bulk_edit.py:714 +#: netbox/dcim/forms/bulk_import.py:291 netbox/dcim/forms/bulk_import.py:434 +#: netbox/dcim/forms/bulk_import.py:607 netbox/dcim/forms/filtersets.py:281 +#: netbox/dcim/forms/filtersets.py:512 netbox/dcim/forms/filtersets.py:670 +#: netbox/dcim/forms/filtersets.py:805 netbox/templates/dcim/device.html:98 #: netbox/templates/dcim/devicetype.html:65 #: netbox/templates/dcim/moduletype.html:41 netbox/templates/dcim/rack.html:65 #: netbox/templates/dcim/racktype.html:28 msgid "Airflow" msgstr "" -#: netbox/dcim/forms/bulk_edit.py:446 netbox/dcim/forms/bulk_edit.py:925 -#: netbox/dcim/forms/bulk_import.py:344 netbox/dcim/forms/bulk_import.py:347 -#: netbox/dcim/forms/bulk_import.py:575 netbox/dcim/forms/bulk_import.py:1380 -#: netbox/dcim/forms/bulk_import.py:1384 netbox/dcim/forms/filtersets.py:104 -#: netbox/dcim/forms/filtersets.py:324 netbox/dcim/forms/filtersets.py:405 -#: netbox/dcim/forms/filtersets.py:419 netbox/dcim/forms/filtersets.py:457 -#: netbox/dcim/forms/filtersets.py:772 netbox/dcim/forms/filtersets.py:1035 -#: netbox/dcim/forms/filtersets.py:1167 netbox/dcim/forms/model_forms.py:264 -#: netbox/dcim/forms/model_forms.py:306 netbox/dcim/forms/model_forms.py:479 -#: netbox/dcim/forms/model_forms.py:755 netbox/dcim/forms/object_create.py:392 -#: netbox/dcim/tables/devices.py:161 netbox/dcim/tables/power.py:70 -#: netbox/dcim/tables/racks.py:217 netbox/ipam/forms/filtersets.py:442 +#: netbox/dcim/forms/bulk_edit.py:449 netbox/dcim/forms/bulk_edit.py:928 +#: netbox/dcim/forms/bulk_import.py:346 netbox/dcim/forms/bulk_import.py:349 +#: netbox/dcim/forms/bulk_import.py:580 netbox/dcim/forms/bulk_import.py:1477 +#: netbox/dcim/forms/bulk_import.py:1481 netbox/dcim/forms/filtersets.py:105 +#: netbox/dcim/forms/filtersets.py:325 netbox/dcim/forms/filtersets.py:406 +#: netbox/dcim/forms/filtersets.py:420 netbox/dcim/forms/filtersets.py:458 +#: netbox/dcim/forms/filtersets.py:773 netbox/dcim/forms/filtersets.py:1036 +#: netbox/dcim/forms/filtersets.py:1168 netbox/dcim/forms/model_forms.py:271 +#: netbox/dcim/forms/model_forms.py:314 netbox/dcim/forms/model_forms.py:489 +#: netbox/dcim/forms/model_forms.py:767 netbox/dcim/forms/object_create.py:392 +#: netbox/dcim/tables/devices.py:171 netbox/dcim/tables/power.py:70 +#: netbox/dcim/tables/racks.py:216 netbox/ipam/forms/filtersets.py:445 #: netbox/templates/dcim/device.html:30 #: netbox/templates/dcim/inc/cable_termination.html:16 #: netbox/templates/dcim/powerfeed.html:28 netbox/templates/dcim/rack.html:13 #: netbox/templates/dcim/rack/base.html:4 #: netbox/templates/dcim/rackreservation.html:19 #: netbox/templates/dcim/rackreservation.html:36 -#: netbox/virtualization/forms/model_forms.py:113 +#: netbox/virtualization/forms/model_forms.py:112 msgid "Rack" msgstr "" -#: netbox/dcim/forms/bulk_edit.py:450 netbox/dcim/forms/bulk_edit.py:744 -#: netbox/dcim/forms/filtersets.py:325 netbox/dcim/forms/filtersets.py:398 -#: netbox/dcim/forms/filtersets.py:481 netbox/dcim/forms/filtersets.py:608 -#: netbox/dcim/forms/filtersets.py:721 netbox/dcim/forms/filtersets.py:942 -#: netbox/dcim/forms/model_forms.py:670 netbox/dcim/forms/model_forms.py:1587 +#: netbox/dcim/forms/bulk_edit.py:453 netbox/dcim/forms/bulk_edit.py:747 +#: netbox/dcim/forms/filtersets.py:326 netbox/dcim/forms/filtersets.py:399 +#: netbox/dcim/forms/filtersets.py:482 netbox/dcim/forms/filtersets.py:609 +#: netbox/dcim/forms/filtersets.py:722 netbox/dcim/forms/filtersets.py:943 +#: netbox/dcim/forms/model_forms.py:681 netbox/dcim/forms/model_forms.py:1632 #: netbox/templates/dcim/device_edit.html:20 msgid "Hardware" msgstr "" -#: netbox/dcim/forms/bulk_edit.py:506 netbox/dcim/forms/bulk_import.py:399 -#: netbox/dcim/forms/filtersets.py:499 netbox/dcim/forms/model_forms.py:353 +#: netbox/dcim/forms/bulk_edit.py:509 netbox/dcim/forms/bulk_import.py:401 +#: netbox/dcim/forms/filtersets.py:500 netbox/dcim/forms/model_forms.py:362 msgid "Default platform" msgstr "" -#: netbox/dcim/forms/bulk_edit.py:511 netbox/dcim/forms/bulk_edit.py:570 -#: netbox/dcim/forms/filtersets.py:502 netbox/dcim/forms/filtersets.py:622 +#: netbox/dcim/forms/bulk_edit.py:514 netbox/dcim/forms/bulk_edit.py:573 +#: netbox/dcim/forms/filtersets.py:503 netbox/dcim/forms/filtersets.py:623 msgid "Part number" msgstr "" -#: netbox/dcim/forms/bulk_edit.py:515 +#: netbox/dcim/forms/bulk_edit.py:518 msgid "U height" msgstr "" -#: netbox/dcim/forms/bulk_edit.py:527 netbox/dcim/tables/devicetypes.py:102 +#: netbox/dcim/forms/bulk_edit.py:530 netbox/dcim/tables/devicetypes.py:102 msgid "Exclude from utilization" msgstr "" -#: netbox/dcim/forms/bulk_edit.py:556 netbox/dcim/forms/model_forms.py:368 +#: netbox/dcim/forms/bulk_edit.py:559 netbox/dcim/forms/model_forms.py:377 #: netbox/dcim/tables/devicetypes.py:77 netbox/templates/dcim/device.html:88 #: netbox/templates/dcim/devicebay.html:52 netbox/templates/dcim/module.html:61 msgid "Device Type" msgstr "" -#: netbox/dcim/forms/bulk_edit.py:598 netbox/dcim/forms/model_forms.py:401 +#: netbox/dcim/forms/bulk_edit.py:601 netbox/dcim/forms/model_forms.py:410 #: netbox/dcim/tables/modules.py:17 netbox/dcim/tables/modules.py:66 #: netbox/templates/dcim/module.html:65 netbox/templates/dcim/modulebay.html:66 #: netbox/templates/dcim/moduletype.html:22 msgid "Module Type" msgstr "" -#: netbox/dcim/forms/bulk_edit.py:602 netbox/dcim/forms/model_forms.py:371 -#: netbox/dcim/forms/model_forms.py:402 +#: netbox/dcim/forms/bulk_edit.py:605 netbox/dcim/forms/model_forms.py:380 +#: netbox/dcim/forms/model_forms.py:411 #: netbox/templates/dcim/devicetype.html:11 msgid "Chassis" msgstr "" -#: netbox/dcim/forms/bulk_edit.py:616 netbox/dcim/models/devices.py:484 -#: netbox/dcim/tables/devices.py:67 +#: netbox/dcim/forms/bulk_edit.py:619 netbox/dcim/models/devices.py:482 +#: netbox/dcim/tables/devices.py:78 msgid "VM role" msgstr "" -#: netbox/dcim/forms/bulk_edit.py:619 netbox/dcim/forms/bulk_edit.py:643 -#: netbox/dcim/forms/bulk_edit.py:726 netbox/dcim/forms/bulk_import.py:456 -#: netbox/dcim/forms/bulk_import.py:460 netbox/dcim/forms/bulk_import.py:479 -#: netbox/dcim/forms/bulk_import.py:483 netbox/dcim/forms/bulk_import.py:608 -#: netbox/dcim/forms/bulk_import.py:612 netbox/dcim/forms/filtersets.py:689 -#: netbox/dcim/forms/filtersets.py:705 netbox/dcim/forms/filtersets.py:823 -#: netbox/dcim/forms/model_forms.py:415 netbox/dcim/forms/model_forms.py:441 -#: netbox/dcim/forms/model_forms.py:555 -#: netbox/virtualization/forms/bulk_import.py:132 -#: netbox/virtualization/forms/bulk_import.py:133 -#: netbox/virtualization/forms/filtersets.py:188 -#: netbox/virtualization/forms/model_forms.py:215 +#: netbox/dcim/forms/bulk_edit.py:622 netbox/dcim/forms/bulk_edit.py:646 +#: netbox/dcim/forms/bulk_edit.py:729 netbox/dcim/forms/bulk_import.py:461 +#: netbox/dcim/forms/bulk_import.py:465 netbox/dcim/forms/bulk_import.py:484 +#: netbox/dcim/forms/bulk_import.py:488 netbox/dcim/forms/bulk_import.py:613 +#: netbox/dcim/forms/bulk_import.py:617 netbox/dcim/forms/filtersets.py:690 +#: netbox/dcim/forms/filtersets.py:706 netbox/dcim/forms/filtersets.py:824 +#: netbox/dcim/forms/model_forms.py:424 netbox/dcim/forms/model_forms.py:451 +#: netbox/dcim/forms/model_forms.py:566 +#: netbox/virtualization/forms/bulk_import.py:138 +#: netbox/virtualization/forms/bulk_import.py:139 +#: netbox/virtualization/forms/filtersets.py:193 +#: netbox/virtualization/forms/model_forms.py:214 msgid "Config template" msgstr "" -#: netbox/dcim/forms/bulk_edit.py:667 netbox/dcim/forms/bulk_edit.py:1076 -#: netbox/dcim/forms/bulk_import.py:514 netbox/dcim/forms/filtersets.py:114 -#: netbox/dcim/forms/model_forms.py:501 netbox/dcim/forms/model_forms.py:872 -#: netbox/dcim/forms/model_forms.py:889 netbox/extras/filtersets.py:547 +#: netbox/dcim/forms/bulk_edit.py:670 netbox/dcim/forms/bulk_edit.py:1079 +#: netbox/dcim/forms/bulk_import.py:519 netbox/dcim/forms/filtersets.py:115 +#: netbox/dcim/forms/model_forms.py:511 netbox/dcim/forms/model_forms.py:884 +#: netbox/dcim/forms/model_forms.py:901 netbox/extras/filtersets.py:547 msgid "Device type" msgstr "" -#: netbox/dcim/forms/bulk_edit.py:678 netbox/dcim/forms/bulk_import.py:495 -#: netbox/dcim/forms/filtersets.py:119 netbox/dcim/forms/model_forms.py:509 +#: netbox/dcim/forms/bulk_edit.py:681 netbox/dcim/forms/bulk_import.py:500 +#: netbox/dcim/forms/filtersets.py:120 netbox/dcim/forms/model_forms.py:519 msgid "Device role" msgstr "" -#: netbox/dcim/forms/bulk_edit.py:701 netbox/dcim/forms/bulk_import.py:520 -#: netbox/dcim/forms/filtersets.py:796 netbox/dcim/forms/model_forms.py:451 -#: netbox/dcim/forms/model_forms.py:513 netbox/dcim/tables/devices.py:182 +#: netbox/dcim/forms/bulk_edit.py:704 netbox/dcim/forms/bulk_import.py:525 +#: netbox/dcim/forms/filtersets.py:797 netbox/dcim/forms/model_forms.py:461 +#: netbox/dcim/forms/model_forms.py:524 netbox/dcim/tables/devices.py:192 #: netbox/extras/filtersets.py:563 netbox/templates/dcim/device.html:186 #: netbox/templates/dcim/platform.html:26 #: netbox/templates/virtualization/virtualmachine.html:27 -#: netbox/virtualization/forms/bulk_edit.py:160 -#: netbox/virtualization/forms/bulk_import.py:122 -#: netbox/virtualization/forms/filtersets.py:168 -#: netbox/virtualization/forms/model_forms.py:203 -#: netbox/virtualization/tables/virtualmachines.py:79 +#: netbox/virtualization/forms/bulk_edit.py:142 +#: netbox/virtualization/forms/bulk_import.py:128 +#: netbox/virtualization/forms/filtersets.py:173 +#: netbox/virtualization/forms/model_forms.py:202 +#: netbox/virtualization/tables/virtualmachines.py:49 msgid "Platform" msgstr "" -#: netbox/dcim/forms/bulk_edit.py:731 netbox/dcim/forms/bulk_import.py:539 -#: netbox/dcim/forms/filtersets.py:728 netbox/dcim/forms/filtersets.py:898 -#: netbox/dcim/forms/model_forms.py:522 netbox/dcim/tables/devices.py:202 +#: netbox/dcim/forms/bulk_edit.py:734 netbox/dcim/forms/bulk_import.py:544 +#: netbox/dcim/forms/filtersets.py:729 netbox/dcim/forms/filtersets.py:899 +#: netbox/dcim/forms/model_forms.py:533 netbox/dcim/tables/devices.py:212 #: netbox/extras/filtersets.py:596 netbox/extras/forms/filtersets.py:322 -#: netbox/ipam/forms/filtersets.py:415 netbox/ipam/forms/filtersets.py:447 +#: netbox/ipam/forms/filtersets.py:418 netbox/ipam/forms/filtersets.py:450 #: netbox/templates/dcim/device.html:239 #: netbox/templates/virtualization/cluster.html:10 #: netbox/templates/virtualization/virtualmachine.html:92 #: netbox/templates/virtualization/virtualmachine.html:101 -#: netbox/virtualization/filtersets.py:157 -#: netbox/virtualization/filtersets.py:277 -#: netbox/virtualization/forms/bulk_edit.py:129 -#: netbox/virtualization/forms/bulk_import.py:92 -#: netbox/virtualization/forms/filtersets.py:99 -#: netbox/virtualization/forms/filtersets.py:123 -#: netbox/virtualization/forms/filtersets.py:204 -#: netbox/virtualization/forms/model_forms.py:79 -#: netbox/virtualization/forms/model_forms.py:176 -#: netbox/virtualization/tables/virtualmachines.py:67 +#: netbox/virtualization/filtersets.py:123 +#: netbox/virtualization/filtersets.py:243 +#: netbox/virtualization/forms/bulk_edit.py:111 +#: netbox/virtualization/forms/bulk_import.py:98 +#: netbox/virtualization/forms/filtersets.py:104 +#: netbox/virtualization/forms/filtersets.py:128 +#: netbox/virtualization/forms/filtersets.py:209 +#: netbox/virtualization/forms/model_forms.py:77 +#: netbox/virtualization/forms/model_forms.py:175 +#: netbox/virtualization/tables/virtualmachines.py:37 msgid "Cluster" msgstr "" -#: netbox/dcim/forms/bulk_edit.py:742 netbox/dcim/forms/bulk_edit.py:1296 -#: netbox/dcim/forms/bulk_edit.py:1693 netbox/dcim/forms/bulk_edit.py:1739 -#: netbox/dcim/forms/bulk_import.py:663 netbox/dcim/forms/bulk_import.py:725 -#: netbox/dcim/forms/bulk_import.py:751 netbox/dcim/forms/bulk_import.py:777 -#: netbox/dcim/forms/bulk_import.py:797 netbox/dcim/forms/bulk_import.py:850 -#: netbox/dcim/forms/bulk_import.py:968 netbox/dcim/forms/bulk_import.py:1016 -#: netbox/dcim/forms/bulk_import.py:1033 netbox/dcim/forms/bulk_import.py:1045 -#: netbox/dcim/forms/bulk_import.py:1093 netbox/dcim/forms/bulk_import.py:1444 -#: netbox/dcim/forms/connections.py:24 netbox/dcim/forms/filtersets.py:131 -#: netbox/dcim/forms/filtersets.py:921 netbox/dcim/forms/filtersets.py:1051 -#: netbox/dcim/forms/filtersets.py:1242 netbox/dcim/forms/filtersets.py:1267 -#: netbox/dcim/forms/filtersets.py:1291 netbox/dcim/forms/filtersets.py:1311 -#: netbox/dcim/forms/filtersets.py:1334 netbox/dcim/forms/filtersets.py:1444 -#: netbox/dcim/forms/filtersets.py:1469 netbox/dcim/forms/filtersets.py:1493 -#: netbox/dcim/forms/filtersets.py:1511 netbox/dcim/forms/filtersets.py:1528 -#: netbox/dcim/forms/filtersets.py:1592 netbox/dcim/forms/filtersets.py:1616 -#: netbox/dcim/forms/filtersets.py:1640 netbox/dcim/forms/model_forms.py:633 -#: netbox/dcim/forms/model_forms.py:849 netbox/dcim/forms/model_forms.py:1215 -#: netbox/dcim/forms/model_forms.py:1671 netbox/dcim/forms/object_create.py:249 -#: netbox/dcim/tables/connections.py:22 netbox/dcim/tables/connections.py:41 -#: netbox/dcim/tables/connections.py:60 netbox/dcim/tables/devices.py:285 -#: netbox/dcim/tables/devices.py:371 netbox/dcim/tables/devices.py:412 -#: netbox/dcim/tables/devices.py:454 netbox/dcim/tables/devices.py:505 -#: netbox/dcim/tables/devices.py:597 netbox/dcim/tables/devices.py:697 -#: netbox/dcim/tables/devices.py:754 netbox/dcim/tables/devices.py:801 -#: netbox/dcim/tables/devices.py:861 netbox/dcim/tables/devices.py:930 -#: netbox/dcim/tables/devices.py:1057 netbox/dcim/tables/modules.py:53 -#: netbox/extras/forms/filtersets.py:321 netbox/ipam/forms/bulk_import.py:304 -#: netbox/ipam/forms/bulk_import.py:505 netbox/ipam/forms/filtersets.py:551 -#: netbox/ipam/forms/model_forms.py:323 netbox/ipam/forms/model_forms.py:712 -#: netbox/ipam/forms/model_forms.py:745 netbox/ipam/forms/model_forms.py:771 -#: netbox/ipam/tables/vlans.py:180 netbox/templates/dcim/consoleport.html:20 -#: netbox/templates/dcim/consoleserverport.html:20 -#: netbox/templates/dcim/device.html:15 netbox/templates/dcim/device.html:130 -#: netbox/templates/dcim/device_edit.html:10 -#: netbox/templates/dcim/devicebay.html:20 -#: netbox/templates/dcim/devicebay.html:48 -#: netbox/templates/dcim/frontport.html:20 -#: netbox/templates/dcim/interface.html:30 -#: netbox/templates/dcim/interface.html:161 -#: netbox/templates/dcim/inventoryitem.html:20 -#: netbox/templates/dcim/module.html:57 netbox/templates/dcim/modulebay.html:20 -#: netbox/templates/dcim/poweroutlet.html:20 -#: netbox/templates/dcim/powerport.html:20 -#: netbox/templates/dcim/rearport.html:20 -#: netbox/templates/dcim/virtualchassis.html:65 -#: netbox/templates/dcim/virtualchassis_edit.html:51 -#: netbox/templates/dcim/virtualdevicecontext.html:22 -#: netbox/templates/virtualization/virtualmachine.html:114 -#: netbox/templates/vpn/tunneltermination.html:23 -#: netbox/templates/wireless/inc/wirelesslink_interface.html:6 -#: netbox/virtualization/filtersets.py:167 -#: netbox/virtualization/forms/bulk_edit.py:137 -#: netbox/virtualization/forms/bulk_import.py:99 -#: netbox/virtualization/forms/filtersets.py:128 -#: netbox/virtualization/forms/model_forms.py:185 -#: netbox/virtualization/tables/virtualmachines.py:71 netbox/vpn/choices.py:52 -#: netbox/vpn/forms/bulk_import.py:86 netbox/vpn/forms/bulk_import.py:283 -#: netbox/vpn/forms/filtersets.py:275 netbox/vpn/forms/model_forms.py:90 -#: netbox/vpn/forms/model_forms.py:125 netbox/vpn/forms/model_forms.py:236 -#: netbox/vpn/forms/model_forms.py:453 netbox/wireless/forms/model_forms.py:99 -#: netbox/wireless/forms/model_forms.py:141 -#: netbox/wireless/tables/wirelesslan.py:75 -msgid "Device" -msgstr "" - -#: netbox/dcim/forms/bulk_edit.py:745 +#: netbox/dcim/forms/bulk_edit.py:748 #: netbox/templates/extras/dashboard/widget_config.html:7 -#: netbox/virtualization/forms/bulk_edit.py:191 +#: netbox/virtualization/forms/bulk_edit.py:173 msgid "Configuration" msgstr "" -#: netbox/dcim/forms/bulk_edit.py:746 netbox/netbox/navigation/menu.py:243 +#: netbox/dcim/forms/bulk_edit.py:749 netbox/netbox/navigation/menu.py:251 #: netbox/templates/dcim/device_edit.html:78 msgid "Virtualization" msgstr "" -#: netbox/dcim/forms/bulk_edit.py:760 netbox/dcim/forms/bulk_import.py:675 -#: netbox/dcim/forms/model_forms.py:647 netbox/dcim/forms/model_forms.py:897 +#: netbox/dcim/forms/bulk_edit.py:763 netbox/dcim/forms/bulk_import.py:680 +#: netbox/dcim/forms/model_forms.py:658 netbox/dcim/forms/model_forms.py:909 msgid "Module type" msgstr "" -#: netbox/dcim/forms/bulk_edit.py:814 netbox/dcim/forms/bulk_edit.py:999 -#: netbox/dcim/forms/bulk_edit.py:1018 netbox/dcim/forms/bulk_edit.py:1041 -#: netbox/dcim/forms/bulk_edit.py:1083 netbox/dcim/forms/bulk_edit.py:1127 -#: netbox/dcim/forms/bulk_edit.py:1178 netbox/dcim/forms/bulk_edit.py:1205 -#: netbox/dcim/forms/bulk_edit.py:1232 netbox/dcim/forms/bulk_edit.py:1250 -#: netbox/dcim/forms/bulk_edit.py:1268 netbox/dcim/forms/filtersets.py:67 +#: netbox/dcim/forms/bulk_edit.py:817 netbox/dcim/forms/bulk_edit.py:1002 +#: netbox/dcim/forms/bulk_edit.py:1021 netbox/dcim/forms/bulk_edit.py:1044 +#: netbox/dcim/forms/bulk_edit.py:1086 netbox/dcim/forms/bulk_edit.py:1130 +#: netbox/dcim/forms/bulk_edit.py:1181 netbox/dcim/forms/bulk_edit.py:1208 +#: netbox/dcim/forms/bulk_edit.py:1235 netbox/dcim/forms/bulk_edit.py:1253 +#: netbox/dcim/forms/bulk_edit.py:1271 netbox/dcim/forms/filtersets.py:68 #: netbox/dcim/forms/object_create.py:46 netbox/templates/dcim/cable.html:32 #: netbox/templates/dcim/consoleport.html:32 #: netbox/templates/dcim/consoleserverport.html:32 @@ -3864,107 +4232,107 @@ msgstr "" msgid "Label" msgstr "" -#: netbox/dcim/forms/bulk_edit.py:823 netbox/dcim/forms/filtersets.py:1068 +#: netbox/dcim/forms/bulk_edit.py:826 netbox/dcim/forms/filtersets.py:1069 #: netbox/templates/dcim/cable.html:50 msgid "Length" msgstr "" -#: netbox/dcim/forms/bulk_edit.py:828 netbox/dcim/forms/bulk_import.py:1248 -#: netbox/dcim/forms/bulk_import.py:1251 netbox/dcim/forms/filtersets.py:1072 +#: netbox/dcim/forms/bulk_edit.py:831 netbox/dcim/forms/bulk_import.py:1345 +#: netbox/dcim/forms/bulk_import.py:1348 netbox/dcim/forms/filtersets.py:1073 msgid "Length unit" msgstr "" -#: netbox/dcim/forms/bulk_edit.py:852 +#: netbox/dcim/forms/bulk_edit.py:855 #: netbox/templates/dcim/virtualchassis.html:23 msgid "Domain" msgstr "" -#: netbox/dcim/forms/bulk_edit.py:920 netbox/dcim/forms/bulk_import.py:1367 -#: netbox/dcim/forms/filtersets.py:1158 netbox/dcim/forms/model_forms.py:750 +#: netbox/dcim/forms/bulk_edit.py:923 netbox/dcim/forms/bulk_import.py:1464 +#: netbox/dcim/forms/filtersets.py:1159 netbox/dcim/forms/model_forms.py:761 msgid "Power panel" msgstr "" -#: netbox/dcim/forms/bulk_edit.py:942 netbox/dcim/forms/bulk_import.py:1403 -#: netbox/dcim/forms/filtersets.py:1180 netbox/templates/dcim/powerfeed.html:83 +#: netbox/dcim/forms/bulk_edit.py:945 netbox/dcim/forms/bulk_import.py:1500 +#: netbox/dcim/forms/filtersets.py:1181 netbox/templates/dcim/powerfeed.html:83 msgid "Supply" msgstr "" -#: netbox/dcim/forms/bulk_edit.py:948 netbox/dcim/forms/bulk_import.py:1408 -#: netbox/dcim/forms/filtersets.py:1185 netbox/templates/dcim/powerfeed.html:95 +#: netbox/dcim/forms/bulk_edit.py:951 netbox/dcim/forms/bulk_import.py:1505 +#: netbox/dcim/forms/filtersets.py:1186 netbox/templates/dcim/powerfeed.html:95 msgid "Phase" msgstr "" -#: netbox/dcim/forms/bulk_edit.py:954 netbox/dcim/forms/filtersets.py:1190 +#: netbox/dcim/forms/bulk_edit.py:957 netbox/dcim/forms/filtersets.py:1191 #: netbox/templates/dcim/powerfeed.html:87 msgid "Voltage" msgstr "" -#: netbox/dcim/forms/bulk_edit.py:958 netbox/dcim/forms/filtersets.py:1194 +#: netbox/dcim/forms/bulk_edit.py:961 netbox/dcim/forms/filtersets.py:1195 #: netbox/templates/dcim/powerfeed.html:91 msgid "Amperage" msgstr "" -#: netbox/dcim/forms/bulk_edit.py:962 netbox/dcim/forms/filtersets.py:1198 +#: netbox/dcim/forms/bulk_edit.py:965 netbox/dcim/forms/filtersets.py:1199 msgid "Max utilization" msgstr "" -#: netbox/dcim/forms/bulk_edit.py:1051 +#: netbox/dcim/forms/bulk_edit.py:1054 msgid "Maximum draw" msgstr "" -#: netbox/dcim/forms/bulk_edit.py:1054 -#: netbox/dcim/models/device_component_templates.py:282 -#: netbox/dcim/models/device_components.py:356 +#: netbox/dcim/forms/bulk_edit.py:1057 +#: netbox/dcim/models/device_component_templates.py:281 +#: netbox/dcim/models/device_components.py:349 msgid "Maximum power draw (watts)" msgstr "" -#: netbox/dcim/forms/bulk_edit.py:1057 +#: netbox/dcim/forms/bulk_edit.py:1060 msgid "Allocated draw" msgstr "" -#: netbox/dcim/forms/bulk_edit.py:1060 -#: netbox/dcim/models/device_component_templates.py:289 -#: netbox/dcim/models/device_components.py:363 +#: netbox/dcim/forms/bulk_edit.py:1063 +#: netbox/dcim/models/device_component_templates.py:288 +#: netbox/dcim/models/device_components.py:356 msgid "Allocated power draw (watts)" msgstr "" -#: netbox/dcim/forms/bulk_edit.py:1093 netbox/dcim/forms/bulk_import.py:808 -#: netbox/dcim/forms/model_forms.py:960 netbox/dcim/forms/model_forms.py:1285 -#: netbox/dcim/forms/model_forms.py:1574 netbox/dcim/forms/object_import.py:55 +#: netbox/dcim/forms/bulk_edit.py:1096 netbox/dcim/forms/bulk_import.py:813 +#: netbox/dcim/forms/model_forms.py:972 netbox/dcim/forms/model_forms.py:1301 +#: netbox/dcim/forms/model_forms.py:1616 netbox/dcim/forms/object_import.py:55 msgid "Power port" msgstr "" -#: netbox/dcim/forms/bulk_edit.py:1098 netbox/dcim/forms/bulk_import.py:815 +#: netbox/dcim/forms/bulk_edit.py:1101 netbox/dcim/forms/bulk_import.py:820 msgid "Feed leg" msgstr "" -#: netbox/dcim/forms/bulk_edit.py:1144 netbox/dcim/forms/bulk_edit.py:1462 +#: netbox/dcim/forms/bulk_edit.py:1147 netbox/dcim/forms/bulk_edit.py:1465 msgid "Management only" msgstr "" -#: netbox/dcim/forms/bulk_edit.py:1154 netbox/dcim/forms/bulk_edit.py:1468 -#: netbox/dcim/forms/bulk_import.py:898 netbox/dcim/forms/filtersets.py:1394 +#: netbox/dcim/forms/bulk_edit.py:1157 netbox/dcim/forms/bulk_edit.py:1471 +#: netbox/dcim/forms/bulk_import.py:906 netbox/dcim/forms/filtersets.py:1399 #: netbox/dcim/forms/object_import.py:90 -#: netbox/dcim/models/device_component_templates.py:437 -#: netbox/dcim/models/device_components.py:670 +#: netbox/dcim/models/device_component_templates.py:445 +#: netbox/dcim/models/device_components.py:721 msgid "PoE mode" msgstr "" -#: netbox/dcim/forms/bulk_edit.py:1160 netbox/dcim/forms/bulk_edit.py:1474 -#: netbox/dcim/forms/bulk_import.py:904 netbox/dcim/forms/filtersets.py:1399 +#: netbox/dcim/forms/bulk_edit.py:1163 netbox/dcim/forms/bulk_edit.py:1477 +#: netbox/dcim/forms/bulk_import.py:912 netbox/dcim/forms/filtersets.py:1404 #: netbox/dcim/forms/object_import.py:95 -#: netbox/dcim/models/device_component_templates.py:443 -#: netbox/dcim/models/device_components.py:676 +#: netbox/dcim/models/device_component_templates.py:452 +#: netbox/dcim/models/device_components.py:728 msgid "PoE type" msgstr "" -#: netbox/dcim/forms/bulk_edit.py:1166 netbox/dcim/forms/filtersets.py:1404 +#: netbox/dcim/forms/bulk_edit.py:1169 netbox/dcim/forms/filtersets.py:1409 #: netbox/dcim/forms/object_import.py:100 msgid "Wireless role" msgstr "" -#: netbox/dcim/forms/bulk_edit.py:1303 netbox/dcim/forms/model_forms.py:669 -#: netbox/dcim/forms/model_forms.py:1230 netbox/dcim/tables/devices.py:313 +#: netbox/dcim/forms/bulk_edit.py:1306 netbox/dcim/forms/model_forms.py:680 +#: netbox/dcim/forms/model_forms.py:1246 netbox/dcim/tables/devices.py:322 #: netbox/templates/dcim/consoleport.html:24 #: netbox/templates/dcim/consoleserverport.html:24 #: netbox/templates/dcim/frontport.html:24 @@ -3977,31 +4345,31 @@ msgstr "" msgid "Module" msgstr "" -#: netbox/dcim/forms/bulk_edit.py:1442 netbox/dcim/tables/devices.py:665 -#: netbox/templates/dcim/interface.html:110 +#: netbox/dcim/forms/bulk_edit.py:1445 netbox/dcim/tables/devices.py:698 +#: netbox/templates/dcim/interface.html:116 msgid "LAG" msgstr "" -#: netbox/dcim/forms/bulk_edit.py:1447 netbox/dcim/forms/model_forms.py:1312 +#: netbox/dcim/forms/bulk_edit.py:1450 netbox/dcim/forms/model_forms.py:1328 msgid "Virtual device contexts" msgstr "" -#: netbox/dcim/forms/bulk_edit.py:1453 netbox/dcim/forms/bulk_import.py:736 -#: netbox/dcim/forms/bulk_import.py:762 netbox/dcim/forms/filtersets.py:1252 -#: netbox/dcim/forms/filtersets.py:1277 netbox/dcim/forms/filtersets.py:1358 -#: netbox/dcim/tables/devices.py:610 -#: netbox/templates/circuits/inc/circuit_termination_fields.html:67 +#: netbox/dcim/forms/bulk_edit.py:1456 netbox/dcim/forms/bulk_import.py:741 +#: netbox/dcim/forms/bulk_import.py:767 netbox/dcim/forms/filtersets.py:1253 +#: netbox/dcim/forms/filtersets.py:1278 netbox/dcim/forms/filtersets.py:1363 +#: netbox/dcim/tables/devices.py:631 +#: netbox/templates/circuits/inc/circuit_termination_fields.html:62 #: netbox/templates/dcim/consoleport.html:40 #: netbox/templates/dcim/consoleserverport.html:40 msgid "Speed" msgstr "" -#: netbox/dcim/forms/bulk_edit.py:1482 netbox/dcim/forms/bulk_import.py:907 +#: netbox/dcim/forms/bulk_edit.py:1485 netbox/dcim/forms/bulk_import.py:915 #: netbox/templates/vpn/ikepolicy.html:25 #: netbox/templates/vpn/ipsecprofile.html:21 #: netbox/templates/vpn/ipsecprofile.html:48 -#: netbox/virtualization/forms/bulk_edit.py:233 -#: netbox/virtualization/forms/bulk_import.py:165 +#: netbox/virtualization/forms/bulk_edit.py:215 +#: netbox/virtualization/forms/bulk_import.py:171 #: netbox/vpn/forms/bulk_edit.py:146 netbox/vpn/forms/bulk_edit.py:232 #: netbox/vpn/forms/bulk_import.py:176 netbox/vpn/forms/bulk_import.py:234 #: netbox/vpn/forms/filtersets.py:135 netbox/vpn/forms/filtersets.py:178 @@ -4010,594 +4378,636 @@ msgstr "" msgid "Mode" msgstr "" -#: netbox/dcim/forms/bulk_edit.py:1490 netbox/dcim/forms/model_forms.py:1361 -#: netbox/ipam/forms/bulk_import.py:178 netbox/ipam/forms/filtersets.py:498 -#: netbox/ipam/models/vlans.py:84 netbox/virtualization/forms/bulk_edit.py:240 -#: netbox/virtualization/forms/model_forms.py:321 +#: netbox/dcim/forms/bulk_edit.py:1493 netbox/dcim/forms/model_forms.py:1377 +#: netbox/ipam/forms/bulk_import.py:174 netbox/ipam/forms/filtersets.py:539 +#: netbox/ipam/models/vlans.py:86 netbox/virtualization/forms/bulk_edit.py:222 +#: netbox/virtualization/forms/model_forms.py:327 msgid "VLAN group" msgstr "" -#: netbox/dcim/forms/bulk_edit.py:1499 netbox/dcim/forms/model_forms.py:1367 -#: netbox/dcim/tables/devices.py:579 -#: netbox/virtualization/forms/bulk_edit.py:248 -#: netbox/virtualization/forms/model_forms.py:326 +#: netbox/dcim/forms/bulk_edit.py:1502 netbox/dcim/forms/model_forms.py:1383 +#: netbox/dcim/tables/devices.py:592 +#: netbox/virtualization/forms/bulk_edit.py:230 +#: netbox/virtualization/forms/model_forms.py:332 msgid "Untagged VLAN" msgstr "" -#: netbox/dcim/forms/bulk_edit.py:1508 netbox/dcim/forms/model_forms.py:1376 -#: netbox/dcim/tables/devices.py:585 -#: netbox/virtualization/forms/bulk_edit.py:256 -#: netbox/virtualization/forms/model_forms.py:335 +#: netbox/dcim/forms/bulk_edit.py:1511 netbox/dcim/forms/model_forms.py:1392 +#: netbox/dcim/tables/devices.py:598 +#: netbox/virtualization/forms/bulk_edit.py:238 +#: netbox/virtualization/forms/model_forms.py:341 msgid "Tagged VLANs" msgstr "" -#: netbox/dcim/forms/bulk_edit.py:1511 +#: netbox/dcim/forms/bulk_edit.py:1514 msgid "Add tagged VLANs" msgstr "" -#: netbox/dcim/forms/bulk_edit.py:1520 +#: netbox/dcim/forms/bulk_edit.py:1523 msgid "Remove tagged VLANs" msgstr "" -#: netbox/dcim/forms/bulk_edit.py:1536 netbox/dcim/forms/model_forms.py:1348 +#: netbox/dcim/forms/bulk_edit.py:1534 netbox/dcim/forms/model_forms.py:1401 +#: netbox/virtualization/forms/model_forms.py:350 +msgid "Q-in-Q Service VLAN" +msgstr "" + +#: netbox/dcim/forms/bulk_edit.py:1549 netbox/dcim/forms/model_forms.py:1364 msgid "Wireless LAN group" msgstr "" -#: netbox/dcim/forms/bulk_edit.py:1541 netbox/dcim/forms/model_forms.py:1353 -#: netbox/dcim/tables/devices.py:619 netbox/netbox/navigation/menu.py:146 -#: netbox/templates/dcim/interface.html:280 +#: netbox/dcim/forms/bulk_edit.py:1554 netbox/dcim/forms/model_forms.py:1369 +#: netbox/dcim/tables/devices.py:640 netbox/netbox/navigation/menu.py:152 +#: netbox/templates/dcim/interface.html:337 #: netbox/wireless/tables/wirelesslan.py:24 msgid "Wireless LANs" msgstr "" -#: netbox/dcim/forms/bulk_edit.py:1550 netbox/dcim/forms/filtersets.py:1328 -#: netbox/dcim/forms/model_forms.py:1397 netbox/ipam/forms/bulk_edit.py:286 -#: netbox/ipam/forms/bulk_edit.py:378 netbox/ipam/forms/filtersets.py:169 -#: netbox/templates/dcim/interface.html:122 -#: netbox/templates/ipam/prefix.html:95 -#: netbox/virtualization/forms/model_forms.py:349 +#: netbox/dcim/forms/bulk_edit.py:1563 netbox/dcim/forms/filtersets.py:1333 +#: netbox/dcim/forms/model_forms.py:1435 netbox/ipam/forms/bulk_edit.py:269 +#: netbox/ipam/forms/bulk_edit.py:362 netbox/ipam/forms/filtersets.py:171 +#: netbox/netbox/navigation/menu.py:108 +#: netbox/templates/dcim/interface.html:128 +#: netbox/templates/ipam/prefix.html:91 +#: netbox/templates/virtualization/vminterface.html:70 +#: netbox/virtualization/forms/model_forms.py:370 msgid "Addressing" msgstr "" -#: netbox/dcim/forms/bulk_edit.py:1551 netbox/dcim/forms/filtersets.py:720 -#: netbox/dcim/forms/model_forms.py:1398 -#: netbox/virtualization/forms/model_forms.py:350 +#: netbox/dcim/forms/bulk_edit.py:1564 netbox/dcim/forms/filtersets.py:721 +#: netbox/dcim/forms/model_forms.py:1436 +#: netbox/virtualization/forms/model_forms.py:371 msgid "Operation" msgstr "" -#: netbox/dcim/forms/bulk_edit.py:1552 netbox/dcim/forms/filtersets.py:1329 -#: netbox/dcim/forms/model_forms.py:994 netbox/dcim/forms/model_forms.py:1400 +#: netbox/dcim/forms/bulk_edit.py:1565 netbox/dcim/forms/filtersets.py:1334 +#: netbox/dcim/forms/model_forms.py:1006 netbox/dcim/forms/model_forms.py:1438 msgid "PoE" msgstr "" -#: netbox/dcim/forms/bulk_edit.py:1553 netbox/dcim/forms/model_forms.py:1399 -#: netbox/templates/dcim/interface.html:99 -#: netbox/virtualization/forms/bulk_edit.py:267 -#: netbox/virtualization/forms/model_forms.py:351 +#: netbox/dcim/forms/bulk_edit.py:1566 netbox/dcim/forms/model_forms.py:1437 +#: netbox/templates/dcim/interface.html:105 +#: netbox/virtualization/forms/bulk_edit.py:249 +#: netbox/virtualization/forms/model_forms.py:372 msgid "Related Interfaces" msgstr "" -#: netbox/dcim/forms/bulk_edit.py:1554 netbox/dcim/forms/model_forms.py:1401 -#: netbox/virtualization/forms/bulk_edit.py:268 -#: netbox/virtualization/forms/model_forms.py:352 +#: netbox/dcim/forms/bulk_edit.py:1567 netbox/dcim/forms/model_forms.py:1441 +#: netbox/virtualization/forms/bulk_edit.py:250 +#: netbox/virtualization/forms/model_forms.py:375 msgid "802.1Q Switching" msgstr "" -#: netbox/dcim/forms/bulk_edit.py:1558 +#: netbox/dcim/forms/bulk_edit.py:1571 msgid "Add/Remove" msgstr "" -#: netbox/dcim/forms/bulk_edit.py:1617 netbox/dcim/forms/bulk_edit.py:1619 +#: netbox/dcim/forms/bulk_edit.py:1630 netbox/dcim/forms/bulk_edit.py:1632 msgid "Interface mode must be specified to assign VLANs" msgstr "" -#: netbox/dcim/forms/bulk_edit.py:1624 netbox/dcim/forms/common.py:50 +#: netbox/dcim/forms/bulk_edit.py:1637 netbox/dcim/forms/common.py:51 msgid "An access interface cannot have tagged VLANs assigned." msgstr "" -#: netbox/dcim/forms/bulk_import.py:64 +#: netbox/dcim/forms/bulk_import.py:66 msgid "Name of parent region" msgstr "" -#: netbox/dcim/forms/bulk_import.py:78 +#: netbox/dcim/forms/bulk_import.py:80 msgid "Name of parent site group" msgstr "" -#: netbox/dcim/forms/bulk_import.py:97 +#: netbox/dcim/forms/bulk_import.py:99 msgid "Assigned region" msgstr "" -#: netbox/dcim/forms/bulk_import.py:104 netbox/tenancy/forms/bulk_import.py:44 +#: netbox/dcim/forms/bulk_import.py:106 netbox/tenancy/forms/bulk_import.py:44 #: netbox/tenancy/forms/bulk_import.py:85 -#: netbox/wireless/forms/bulk_import.py:40 +#: netbox/wireless/forms/bulk_import.py:42 msgid "Assigned group" msgstr "" -#: netbox/dcim/forms/bulk_import.py:123 +#: netbox/dcim/forms/bulk_import.py:125 msgid "available options" msgstr "" -#: netbox/dcim/forms/bulk_import.py:134 netbox/dcim/forms/bulk_import.py:565 -#: netbox/dcim/forms/bulk_import.py:1364 netbox/ipam/forms/bulk_import.py:175 -#: netbox/ipam/forms/bulk_import.py:457 -#: netbox/virtualization/forms/bulk_import.py:63 -#: netbox/virtualization/forms/bulk_import.py:89 +#: netbox/dcim/forms/bulk_import.py:136 netbox/dcim/forms/bulk_import.py:570 +#: netbox/dcim/forms/bulk_import.py:1461 netbox/ipam/forms/bulk_import.py:456 +#: netbox/virtualization/forms/bulk_import.py:64 +#: netbox/virtualization/forms/bulk_import.py:95 msgid "Assigned site" msgstr "" -#: netbox/dcim/forms/bulk_import.py:141 +#: netbox/dcim/forms/bulk_import.py:143 msgid "Parent location" msgstr "" -#: netbox/dcim/forms/bulk_import.py:143 +#: netbox/dcim/forms/bulk_import.py:145 msgid "Location not found." msgstr "" -#: netbox/dcim/forms/bulk_import.py:185 +#: netbox/dcim/forms/bulk_import.py:187 msgid "The manufacturer of this rack type" msgstr "" -#: netbox/dcim/forms/bulk_import.py:196 +#: netbox/dcim/forms/bulk_import.py:198 msgid "The lowest-numbered position in the rack" msgstr "" -#: netbox/dcim/forms/bulk_import.py:201 netbox/dcim/forms/bulk_import.py:276 +#: netbox/dcim/forms/bulk_import.py:203 netbox/dcim/forms/bulk_import.py:278 msgid "Rail-to-rail width (in inches)" msgstr "" -#: netbox/dcim/forms/bulk_import.py:207 netbox/dcim/forms/bulk_import.py:286 +#: netbox/dcim/forms/bulk_import.py:209 netbox/dcim/forms/bulk_import.py:288 msgid "Unit for outer dimensions" msgstr "" -#: netbox/dcim/forms/bulk_import.py:213 netbox/dcim/forms/bulk_import.py:298 +#: netbox/dcim/forms/bulk_import.py:215 netbox/dcim/forms/bulk_import.py:300 msgid "Unit for rack weights" msgstr "" -#: netbox/dcim/forms/bulk_import.py:245 +#: netbox/dcim/forms/bulk_import.py:247 msgid "Name of assigned tenant" msgstr "" -#: netbox/dcim/forms/bulk_import.py:257 +#: netbox/dcim/forms/bulk_import.py:259 msgid "Name of assigned role" msgstr "" -#: netbox/dcim/forms/bulk_import.py:264 +#: netbox/dcim/forms/bulk_import.py:266 msgid "Rack type model" msgstr "" -#: netbox/dcim/forms/bulk_import.py:292 netbox/dcim/forms/bulk_import.py:435 -#: netbox/dcim/forms/bulk_import.py:605 +#: netbox/dcim/forms/bulk_import.py:294 netbox/dcim/forms/bulk_import.py:437 +#: netbox/dcim/forms/bulk_import.py:610 msgid "Airflow direction" msgstr "" -#: netbox/dcim/forms/bulk_import.py:324 +#: netbox/dcim/forms/bulk_import.py:326 msgid "Width must be set if not specifying a rack type." msgstr "" -#: netbox/dcim/forms/bulk_import.py:326 +#: netbox/dcim/forms/bulk_import.py:328 msgid "U height must be set if not specifying a rack type." msgstr "" -#: netbox/dcim/forms/bulk_import.py:334 +#: netbox/dcim/forms/bulk_import.py:336 msgid "Parent site" msgstr "" -#: netbox/dcim/forms/bulk_import.py:341 netbox/dcim/forms/bulk_import.py:1377 +#: netbox/dcim/forms/bulk_import.py:343 netbox/dcim/forms/bulk_import.py:1474 msgid "Rack's location (if any)" msgstr "" -#: netbox/dcim/forms/bulk_import.py:350 netbox/dcim/forms/model_forms.py:311 -#: netbox/dcim/tables/racks.py:222 +#: netbox/dcim/forms/bulk_import.py:352 netbox/dcim/forms/model_forms.py:319 +#: netbox/dcim/tables/racks.py:221 #: netbox/templates/dcim/rackreservation.html:12 #: netbox/templates/dcim/rackreservation.html:45 msgid "Units" msgstr "" -#: netbox/dcim/forms/bulk_import.py:353 +#: netbox/dcim/forms/bulk_import.py:355 msgid "Comma-separated list of individual unit numbers" msgstr "" -#: netbox/dcim/forms/bulk_import.py:396 +#: netbox/dcim/forms/bulk_import.py:398 msgid "The manufacturer which produces this device type" msgstr "" -#: netbox/dcim/forms/bulk_import.py:403 +#: netbox/dcim/forms/bulk_import.py:405 msgid "The default platform for devices of this type (optional)" msgstr "" -#: netbox/dcim/forms/bulk_import.py:408 +#: netbox/dcim/forms/bulk_import.py:410 msgid "Device weight" msgstr "" -#: netbox/dcim/forms/bulk_import.py:414 +#: netbox/dcim/forms/bulk_import.py:416 msgid "Unit for device weight" msgstr "" -#: netbox/dcim/forms/bulk_import.py:440 +#: netbox/dcim/forms/bulk_import.py:442 msgid "Module weight" msgstr "" -#: netbox/dcim/forms/bulk_import.py:446 +#: netbox/dcim/forms/bulk_import.py:448 msgid "Unit for module weight" msgstr "" -#: netbox/dcim/forms/bulk_import.py:476 +#: netbox/dcim/forms/bulk_import.py:481 msgid "Limit platform assignments to this manufacturer" msgstr "" -#: netbox/dcim/forms/bulk_import.py:498 netbox/dcim/forms/bulk_import.py:1447 +#: netbox/dcim/forms/bulk_import.py:503 netbox/dcim/forms/bulk_import.py:1544 #: netbox/tenancy/forms/bulk_import.py:106 msgid "Assigned role" msgstr "" -#: netbox/dcim/forms/bulk_import.py:511 +#: netbox/dcim/forms/bulk_import.py:516 msgid "Device type manufacturer" msgstr "" -#: netbox/dcim/forms/bulk_import.py:517 +#: netbox/dcim/forms/bulk_import.py:522 msgid "Device type model" msgstr "" -#: netbox/dcim/forms/bulk_import.py:524 -#: netbox/virtualization/forms/bulk_import.py:126 +#: netbox/dcim/forms/bulk_import.py:529 +#: netbox/virtualization/forms/bulk_import.py:132 msgid "Assigned platform" msgstr "" -#: netbox/dcim/forms/bulk_import.py:532 netbox/dcim/forms/bulk_import.py:536 -#: netbox/dcim/forms/model_forms.py:536 +#: netbox/dcim/forms/bulk_import.py:537 netbox/dcim/forms/bulk_import.py:541 +#: netbox/dcim/forms/model_forms.py:547 msgid "Virtual chassis" msgstr "" -#: netbox/dcim/forms/bulk_import.py:543 +#: netbox/dcim/forms/bulk_import.py:548 msgid "Virtualization cluster" msgstr "" -#: netbox/dcim/forms/bulk_import.py:572 +#: netbox/dcim/forms/bulk_import.py:577 msgid "Assigned location (if any)" msgstr "" -#: netbox/dcim/forms/bulk_import.py:579 +#: netbox/dcim/forms/bulk_import.py:584 msgid "Assigned rack (if any)" msgstr "" -#: netbox/dcim/forms/bulk_import.py:582 +#: netbox/dcim/forms/bulk_import.py:587 msgid "Face" msgstr "" -#: netbox/dcim/forms/bulk_import.py:585 +#: netbox/dcim/forms/bulk_import.py:590 msgid "Mounted rack face" msgstr "" -#: netbox/dcim/forms/bulk_import.py:592 +#: netbox/dcim/forms/bulk_import.py:597 msgid "Parent device (for child devices)" msgstr "" -#: netbox/dcim/forms/bulk_import.py:595 +#: netbox/dcim/forms/bulk_import.py:600 msgid "Device bay" msgstr "" -#: netbox/dcim/forms/bulk_import.py:599 +#: netbox/dcim/forms/bulk_import.py:604 msgid "Device bay in which this device is installed (for child devices)" msgstr "" -#: netbox/dcim/forms/bulk_import.py:666 +#: netbox/dcim/forms/bulk_import.py:671 msgid "The device in which this module is installed" msgstr "" -#: netbox/dcim/forms/bulk_import.py:669 netbox/dcim/forms/model_forms.py:640 +#: netbox/dcim/forms/bulk_import.py:674 netbox/dcim/forms/model_forms.py:651 msgid "Module bay" msgstr "" -#: netbox/dcim/forms/bulk_import.py:672 +#: netbox/dcim/forms/bulk_import.py:677 msgid "The module bay in which this module is installed" msgstr "" -#: netbox/dcim/forms/bulk_import.py:678 +#: netbox/dcim/forms/bulk_import.py:683 msgid "The type of module" msgstr "" -#: netbox/dcim/forms/bulk_import.py:686 netbox/dcim/forms/model_forms.py:656 +#: netbox/dcim/forms/bulk_import.py:691 netbox/dcim/forms/model_forms.py:667 msgid "Replicate components" msgstr "" -#: netbox/dcim/forms/bulk_import.py:688 +#: netbox/dcim/forms/bulk_import.py:693 msgid "" "Automatically populate components associated with this module type (enabled " "by default)" msgstr "" -#: netbox/dcim/forms/bulk_import.py:691 netbox/dcim/forms/model_forms.py:662 +#: netbox/dcim/forms/bulk_import.py:696 netbox/dcim/forms/model_forms.py:673 msgid "Adopt components" msgstr "" -#: netbox/dcim/forms/bulk_import.py:693 netbox/dcim/forms/model_forms.py:665 +#: netbox/dcim/forms/bulk_import.py:698 netbox/dcim/forms/model_forms.py:676 msgid "Adopt already existing components" msgstr "" -#: netbox/dcim/forms/bulk_import.py:733 netbox/dcim/forms/bulk_import.py:759 -#: netbox/dcim/forms/bulk_import.py:785 +#: netbox/dcim/forms/bulk_import.py:738 netbox/dcim/forms/bulk_import.py:764 +#: netbox/dcim/forms/bulk_import.py:790 msgid "Port type" msgstr "" -#: netbox/dcim/forms/bulk_import.py:741 netbox/dcim/forms/bulk_import.py:767 +#: netbox/dcim/forms/bulk_import.py:746 netbox/dcim/forms/bulk_import.py:772 msgid "Port speed in bps" msgstr "" -#: netbox/dcim/forms/bulk_import.py:805 +#: netbox/dcim/forms/bulk_import.py:810 msgid "Outlet type" msgstr "" -#: netbox/dcim/forms/bulk_import.py:812 +#: netbox/dcim/forms/bulk_import.py:817 msgid "Local power port which feeds this outlet" msgstr "" -#: netbox/dcim/forms/bulk_import.py:818 +#: netbox/dcim/forms/bulk_import.py:823 msgid "Electrical phase (for three-phase circuits)" msgstr "" -#: netbox/dcim/forms/bulk_import.py:859 netbox/dcim/forms/model_forms.py:1323 -#: netbox/virtualization/forms/bulk_import.py:155 -#: netbox/virtualization/forms/model_forms.py:305 +#: netbox/dcim/forms/bulk_import.py:867 netbox/dcim/forms/model_forms.py:1339 +#: netbox/virtualization/forms/bulk_import.py:161 +#: netbox/virtualization/forms/model_forms.py:311 msgid "Parent interface" msgstr "" -#: netbox/dcim/forms/bulk_import.py:866 netbox/dcim/forms/model_forms.py:1331 -#: netbox/virtualization/forms/bulk_import.py:162 -#: netbox/virtualization/forms/model_forms.py:313 +#: netbox/dcim/forms/bulk_import.py:874 netbox/dcim/forms/model_forms.py:1347 +#: netbox/virtualization/forms/bulk_import.py:168 +#: netbox/virtualization/forms/model_forms.py:319 msgid "Bridged interface" msgstr "" -#: netbox/dcim/forms/bulk_import.py:869 +#: netbox/dcim/forms/bulk_import.py:877 msgid "Lag" msgstr "" -#: netbox/dcim/forms/bulk_import.py:873 +#: netbox/dcim/forms/bulk_import.py:881 msgid "Parent LAG interface" msgstr "" -#: netbox/dcim/forms/bulk_import.py:876 +#: netbox/dcim/forms/bulk_import.py:884 msgid "Vdcs" msgstr "" -#: netbox/dcim/forms/bulk_import.py:881 +#: netbox/dcim/forms/bulk_import.py:889 msgid "VDC names separated by commas, encased with double quotes. Example:" msgstr "" -#: netbox/dcim/forms/bulk_import.py:887 +#: netbox/dcim/forms/bulk_import.py:895 msgid "Physical medium" msgstr "" -#: netbox/dcim/forms/bulk_import.py:890 netbox/dcim/forms/filtersets.py:1365 +#: netbox/dcim/forms/bulk_import.py:898 netbox/dcim/forms/filtersets.py:1370 msgid "Duplex" msgstr "" -#: netbox/dcim/forms/bulk_import.py:895 +#: netbox/dcim/forms/bulk_import.py:903 msgid "Poe mode" msgstr "" -#: netbox/dcim/forms/bulk_import.py:901 +#: netbox/dcim/forms/bulk_import.py:909 msgid "Poe type" msgstr "" -#: netbox/dcim/forms/bulk_import.py:910 -#: netbox/virtualization/forms/bulk_import.py:168 +#: netbox/dcim/forms/bulk_import.py:918 +#: netbox/virtualization/forms/bulk_import.py:174 msgid "IEEE 802.1Q operational mode (for L2 interfaces)" msgstr "" -#: netbox/dcim/forms/bulk_import.py:917 netbox/ipam/forms/bulk_import.py:161 -#: netbox/ipam/forms/bulk_import.py:247 netbox/ipam/forms/bulk_import.py:283 -#: netbox/ipam/forms/filtersets.py:201 netbox/ipam/forms/filtersets.py:277 -#: netbox/ipam/forms/filtersets.py:336 -#: netbox/virtualization/forms/bulk_import.py:175 +#: netbox/dcim/forms/bulk_import.py:925 netbox/ipam/forms/bulk_import.py:164 +#: netbox/ipam/forms/bulk_import.py:246 netbox/ipam/forms/bulk_import.py:282 +#: netbox/ipam/forms/filtersets.py:203 netbox/ipam/forms/filtersets.py:280 +#: netbox/ipam/forms/filtersets.py:339 +#: netbox/virtualization/forms/bulk_import.py:181 msgid "Assigned VRF" msgstr "" -#: netbox/dcim/forms/bulk_import.py:920 +#: netbox/dcim/forms/bulk_import.py:928 msgid "Rf role" msgstr "" -#: netbox/dcim/forms/bulk_import.py:923 +#: netbox/dcim/forms/bulk_import.py:931 msgid "Wireless role (AP/station)" msgstr "" -#: netbox/dcim/forms/bulk_import.py:959 +#: netbox/dcim/forms/bulk_import.py:967 #, python-brace-format msgid "VDC {vdc} is not assigned to device {device}" msgstr "" -#: netbox/dcim/forms/bulk_import.py:973 netbox/dcim/forms/model_forms.py:1007 -#: netbox/dcim/forms/model_forms.py:1582 netbox/dcim/forms/object_import.py:117 +#: netbox/dcim/forms/bulk_import.py:981 netbox/dcim/forms/model_forms.py:1020 +#: netbox/dcim/forms/model_forms.py:1624 netbox/dcim/forms/object_import.py:117 msgid "Rear port" msgstr "" -#: netbox/dcim/forms/bulk_import.py:976 +#: netbox/dcim/forms/bulk_import.py:984 msgid "Corresponding rear port" msgstr "" -#: netbox/dcim/forms/bulk_import.py:981 netbox/dcim/forms/bulk_import.py:1022 -#: netbox/dcim/forms/bulk_import.py:1238 +#: netbox/dcim/forms/bulk_import.py:989 netbox/dcim/forms/bulk_import.py:1030 +#: netbox/dcim/forms/bulk_import.py:1335 msgid "Physical medium classification" msgstr "" -#: netbox/dcim/forms/bulk_import.py:1050 netbox/dcim/tables/devices.py:822 +#: netbox/dcim/forms/bulk_import.py:1058 netbox/dcim/tables/devices.py:853 msgid "Installed device" msgstr "" -#: netbox/dcim/forms/bulk_import.py:1054 +#: netbox/dcim/forms/bulk_import.py:1062 msgid "Child device installed within this bay" msgstr "" -#: netbox/dcim/forms/bulk_import.py:1056 +#: netbox/dcim/forms/bulk_import.py:1064 msgid "Child device not found." msgstr "" -#: netbox/dcim/forms/bulk_import.py:1114 +#: netbox/dcim/forms/bulk_import.py:1122 msgid "Parent inventory item" msgstr "" -#: netbox/dcim/forms/bulk_import.py:1117 +#: netbox/dcim/forms/bulk_import.py:1125 msgid "Component type" msgstr "" -#: netbox/dcim/forms/bulk_import.py:1121 +#: netbox/dcim/forms/bulk_import.py:1129 msgid "Component Type" msgstr "" -#: netbox/dcim/forms/bulk_import.py:1124 +#: netbox/dcim/forms/bulk_import.py:1132 msgid "Compnent name" msgstr "" -#: netbox/dcim/forms/bulk_import.py:1126 +#: netbox/dcim/forms/bulk_import.py:1134 msgid "Component Name" msgstr "" -#: netbox/dcim/forms/bulk_import.py:1168 +#: netbox/dcim/forms/bulk_import.py:1181 #, python-brace-format msgid "Component not found: {device} - {component_name}" msgstr "" -#: netbox/dcim/forms/bulk_import.py:1193 +#: netbox/dcim/forms/bulk_import.py:1209 netbox/ipam/forms/bulk_import.py:307 +msgid "Parent device of assigned interface (if any)" +msgstr "" + +#: netbox/dcim/forms/bulk_import.py:1212 netbox/ipam/forms/bulk_import.py:310 +#: netbox/ipam/forms/bulk_import.py:547 netbox/ipam/forms/model_forms.py:760 +#: netbox/virtualization/filtersets.py:254 +#: netbox/virtualization/filtersets.py:305 +#: netbox/virtualization/forms/bulk_edit.py:182 +#: netbox/virtualization/forms/bulk_edit.py:308 +#: netbox/virtualization/forms/bulk_import.py:152 +#: netbox/virtualization/forms/bulk_import.py:213 +#: netbox/virtualization/forms/filtersets.py:217 +#: netbox/virtualization/forms/filtersets.py:253 +#: netbox/virtualization/forms/model_forms.py:287 +#: netbox/vpn/forms/bulk_import.py:93 netbox/vpn/forms/bulk_import.py:290 +msgid "Virtual machine" +msgstr "" + +#: netbox/dcim/forms/bulk_import.py:1216 netbox/ipam/forms/bulk_import.py:314 +msgid "Parent VM of assigned interface (if any)" +msgstr "" + +#: netbox/dcim/forms/bulk_import.py:1223 netbox/ipam/filtersets.py:1021 +#: netbox/ipam/forms/bulk_import.py:321 +msgid "Assigned interface" +msgstr "" + +#: netbox/dcim/forms/bulk_import.py:1226 netbox/ipam/forms/bulk_import.py:324 +msgid "Is primary" +msgstr "" + +#: netbox/dcim/forms/bulk_import.py:1227 +msgid "Make this the primary MAC address for the assigned interface" +msgstr "" + +#: netbox/dcim/forms/bulk_import.py:1264 +msgid "Must specify the parent device or VM when assigning an interface" +msgstr "" + +#: netbox/dcim/forms/bulk_import.py:1290 msgid "Side A device" msgstr "" -#: netbox/dcim/forms/bulk_import.py:1196 netbox/dcim/forms/bulk_import.py:1214 +#: netbox/dcim/forms/bulk_import.py:1293 netbox/dcim/forms/bulk_import.py:1311 msgid "Device name" msgstr "" -#: netbox/dcim/forms/bulk_import.py:1199 +#: netbox/dcim/forms/bulk_import.py:1296 msgid "Side A type" msgstr "" -#: netbox/dcim/forms/bulk_import.py:1202 netbox/dcim/forms/bulk_import.py:1220 -msgid "Termination type" -msgstr "" - -#: netbox/dcim/forms/bulk_import.py:1205 +#: netbox/dcim/forms/bulk_import.py:1302 msgid "Side A name" msgstr "" -#: netbox/dcim/forms/bulk_import.py:1206 netbox/dcim/forms/bulk_import.py:1224 +#: netbox/dcim/forms/bulk_import.py:1303 netbox/dcim/forms/bulk_import.py:1321 msgid "Termination name" msgstr "" -#: netbox/dcim/forms/bulk_import.py:1211 +#: netbox/dcim/forms/bulk_import.py:1308 msgid "Side B device" msgstr "" -#: netbox/dcim/forms/bulk_import.py:1217 +#: netbox/dcim/forms/bulk_import.py:1314 msgid "Side B type" msgstr "" -#: netbox/dcim/forms/bulk_import.py:1223 +#: netbox/dcim/forms/bulk_import.py:1320 msgid "Side B name" msgstr "" -#: netbox/dcim/forms/bulk_import.py:1232 -#: netbox/wireless/forms/bulk_import.py:86 +#: netbox/dcim/forms/bulk_import.py:1329 +#: netbox/wireless/forms/bulk_import.py:91 msgid "Connection status" msgstr "" -#: netbox/dcim/forms/bulk_import.py:1284 +#: netbox/dcim/forms/bulk_import.py:1381 #, python-brace-format msgid "Side {side_upper}: {device} {termination_object} is already connected" msgstr "" -#: netbox/dcim/forms/bulk_import.py:1290 +#: netbox/dcim/forms/bulk_import.py:1387 #, python-brace-format msgid "{side_upper} side termination not found: {device} {name}" msgstr "" -#: netbox/dcim/forms/bulk_import.py:1315 netbox/dcim/forms/model_forms.py:785 -#: netbox/dcim/tables/devices.py:1027 netbox/templates/dcim/device.html:132 +#: netbox/dcim/forms/bulk_import.py:1412 netbox/dcim/forms/model_forms.py:797 +#: netbox/dcim/tables/devices.py:1058 netbox/templates/dcim/device.html:132 #: netbox/templates/dcim/virtualchassis.html:27 #: netbox/templates/dcim/virtualchassis.html:67 msgid "Master" msgstr "" -#: netbox/dcim/forms/bulk_import.py:1319 +#: netbox/dcim/forms/bulk_import.py:1416 msgid "Master device" msgstr "" -#: netbox/dcim/forms/bulk_import.py:1336 +#: netbox/dcim/forms/bulk_import.py:1433 msgid "Name of parent site" msgstr "" -#: netbox/dcim/forms/bulk_import.py:1370 +#: netbox/dcim/forms/bulk_import.py:1467 msgid "Upstream power panel" msgstr "" -#: netbox/dcim/forms/bulk_import.py:1400 +#: netbox/dcim/forms/bulk_import.py:1497 msgid "Primary or redundant" msgstr "" -#: netbox/dcim/forms/bulk_import.py:1405 +#: netbox/dcim/forms/bulk_import.py:1502 msgid "Supply type (AC/DC)" msgstr "" -#: netbox/dcim/forms/bulk_import.py:1410 +#: netbox/dcim/forms/bulk_import.py:1507 msgid "Single or three-phase" msgstr "" -#: netbox/dcim/forms/bulk_import.py:1461 netbox/dcim/forms/model_forms.py:1677 +#: netbox/dcim/forms/bulk_import.py:1558 netbox/dcim/forms/model_forms.py:1722 #: netbox/templates/dcim/device.html:190 #: netbox/templates/dcim/virtualdevicecontext.html:30 #: netbox/templates/virtualization/virtualmachine.html:52 msgid "Primary IPv4" msgstr "" -#: netbox/dcim/forms/bulk_import.py:1465 +#: netbox/dcim/forms/bulk_import.py:1562 msgid "IPv4 address with mask, e.g. 1.2.3.4/24" msgstr "" -#: netbox/dcim/forms/bulk_import.py:1468 netbox/dcim/forms/model_forms.py:1686 +#: netbox/dcim/forms/bulk_import.py:1565 netbox/dcim/forms/model_forms.py:1731 #: netbox/templates/dcim/device.html:206 #: netbox/templates/dcim/virtualdevicecontext.html:41 #: netbox/templates/virtualization/virtualmachine.html:68 msgid "Primary IPv6" msgstr "" -#: netbox/dcim/forms/bulk_import.py:1472 +#: netbox/dcim/forms/bulk_import.py:1569 msgid "IPv6 address with prefix length, e.g. 2001:db8::1/64" msgstr "" -#: netbox/dcim/forms/common.py:24 netbox/dcim/models/device_components.py:527 +#: netbox/dcim/forms/common.py:19 netbox/dcim/models/device_components.py:515 #: netbox/templates/dcim/interface.html:57 -#: netbox/templates/virtualization/vminterface.html:55 -#: netbox/virtualization/forms/bulk_edit.py:225 +#: netbox/templates/virtualization/vminterface.html:51 +#: netbox/virtualization/forms/bulk_edit.py:207 msgid "MTU" msgstr "" -#: netbox/dcim/forms/common.py:65 +#: netbox/dcim/forms/common.py:66 #, python-brace-format msgid "" "The tagged VLANs ({vlans}) must belong to the same site as the interface's " "parent device/VM, or they must be global" msgstr "" -#: netbox/dcim/forms/common.py:126 +#: netbox/dcim/forms/common.py:127 msgid "" "Cannot install module with placeholder values in a module bay with no " "position defined." msgstr "" -#: netbox/dcim/forms/common.py:131 +#: netbox/dcim/forms/common.py:133 #, python-brace-format msgid "" "Cannot install module with placeholder values in a module bay tree {level} " "in tree but {tokens} placeholders given." msgstr "" -#: netbox/dcim/forms/common.py:144 +#: netbox/dcim/forms/common.py:148 #, python-brace-format msgid "Cannot adopt {model} {name} as it already belongs to a module" msgstr "" -#: netbox/dcim/forms/common.py:153 +#: netbox/dcim/forms/common.py:157 #, python-brace-format msgid "A {model} named {name} already exists" msgstr "" -#: netbox/dcim/forms/connections.py:49 netbox/dcim/forms/model_forms.py:738 +#: netbox/dcim/forms/connections.py:49 netbox/dcim/forms/model_forms.py:749 #: netbox/dcim/tables/power.py:66 #: netbox/templates/dcim/inc/cable_termination.html:37 #: netbox/templates/dcim/powerfeed.html:24 @@ -4606,135 +5016,133 @@ msgstr "" msgid "Power Panel" msgstr "" -#: netbox/dcim/forms/connections.py:58 netbox/dcim/forms/model_forms.py:765 +#: netbox/dcim/forms/connections.py:58 netbox/dcim/forms/model_forms.py:777 #: netbox/templates/dcim/powerfeed.html:21 #: netbox/templates/dcim/powerport.html:80 msgid "Power Feed" msgstr "" -#: netbox/dcim/forms/connections.py:81 -msgid "Side" -msgstr "" - -#: netbox/dcim/forms/filtersets.py:136 netbox/dcim/tables/devices.py:295 +#: netbox/dcim/forms/filtersets.py:137 netbox/dcim/tables/devices.py:304 msgid "Device Status" msgstr "" -#: netbox/dcim/forms/filtersets.py:149 +#: netbox/dcim/forms/filtersets.py:150 msgid "Parent region" msgstr "" -#: netbox/dcim/forms/filtersets.py:163 netbox/tenancy/forms/bulk_import.py:28 +#: netbox/dcim/forms/filtersets.py:164 netbox/tenancy/forms/bulk_import.py:28 #: netbox/tenancy/forms/bulk_import.py:62 netbox/tenancy/forms/filtersets.py:33 #: netbox/tenancy/forms/filtersets.py:62 -#: netbox/wireless/forms/bulk_import.py:25 -#: netbox/wireless/forms/filtersets.py:25 +#: netbox/wireless/forms/bulk_import.py:27 +#: netbox/wireless/forms/filtersets.py:27 msgid "Parent group" msgstr "" -#: netbox/dcim/forms/filtersets.py:242 netbox/templates/dcim/location.html:58 +#: netbox/dcim/forms/filtersets.py:243 netbox/templates/dcim/location.html:58 #: netbox/templates/dcim/site.html:56 msgid "Facility" msgstr "" -#: netbox/dcim/forms/filtersets.py:397 +#: netbox/dcim/forms/filtersets.py:398 msgid "Function" msgstr "" -#: netbox/dcim/forms/filtersets.py:483 netbox/dcim/forms/model_forms.py:373 +#: netbox/dcim/forms/filtersets.py:484 netbox/dcim/forms/model_forms.py:382 #: netbox/templates/inc/panels/image_attachments.html:6 msgid "Images" msgstr "" -#: netbox/dcim/forms/filtersets.py:486 netbox/dcim/forms/filtersets.py:611 -#: netbox/dcim/forms/filtersets.py:726 +#: netbox/dcim/forms/filtersets.py:487 netbox/dcim/forms/filtersets.py:612 +#: netbox/dcim/forms/filtersets.py:727 msgid "Components" msgstr "" -#: netbox/dcim/forms/filtersets.py:506 +#: netbox/dcim/forms/filtersets.py:507 msgid "Subdevice role" msgstr "" -#: netbox/dcim/forms/filtersets.py:790 netbox/dcim/tables/racks.py:54 +#: netbox/dcim/forms/filtersets.py:791 netbox/dcim/tables/racks.py:54 #: netbox/templates/dcim/racktype.html:20 msgid "Model" msgstr "" -#: netbox/dcim/forms/filtersets.py:834 +#: netbox/dcim/forms/filtersets.py:835 msgid "Has an OOB IP" msgstr "" -#: netbox/dcim/forms/filtersets.py:841 +#: netbox/dcim/forms/filtersets.py:842 msgid "Virtual chassis member" msgstr "" -#: netbox/dcim/forms/filtersets.py:890 +#: netbox/dcim/forms/filtersets.py:891 msgid "Has virtual device contexts" msgstr "" -#: netbox/dcim/forms/filtersets.py:903 netbox/extras/filtersets.py:585 -#: netbox/ipam/forms/filtersets.py:452 -#: netbox/virtualization/forms/filtersets.py:112 +#: netbox/dcim/forms/filtersets.py:904 netbox/extras/filtersets.py:585 +#: netbox/ipam/forms/filtersets.py:455 +#: netbox/virtualization/forms/filtersets.py:117 msgid "Cluster group" msgstr "" -#: netbox/dcim/forms/filtersets.py:1210 +#: netbox/dcim/forms/filtersets.py:1211 msgid "Cabled" msgstr "" -#: netbox/dcim/forms/filtersets.py:1217 +#: netbox/dcim/forms/filtersets.py:1218 msgid "Occupied" msgstr "" -#: netbox/dcim/forms/filtersets.py:1244 netbox/dcim/forms/filtersets.py:1269 -#: netbox/dcim/forms/filtersets.py:1293 netbox/dcim/forms/filtersets.py:1313 -#: netbox/dcim/forms/filtersets.py:1336 netbox/dcim/tables/devices.py:364 +#: netbox/dcim/forms/filtersets.py:1245 netbox/dcim/forms/filtersets.py:1270 +#: netbox/dcim/forms/filtersets.py:1294 netbox/dcim/forms/filtersets.py:1314 +#: netbox/dcim/forms/filtersets.py:1341 netbox/dcim/tables/devices.py:373 +#: netbox/dcim/tables/devices.py:662 +#: netbox/templates/circuits/inc/circuit_termination_fields.html:16 #: netbox/templates/dcim/consoleport.html:55 #: netbox/templates/dcim/consoleserverport.html:55 #: netbox/templates/dcim/frontport.html:69 -#: netbox/templates/dcim/interface.html:140 +#: netbox/templates/dcim/interface.html:197 #: netbox/templates/dcim/powerfeed.html:110 -#: netbox/templates/dcim/poweroutlet.html:59 +#: netbox/templates/dcim/poweroutlet.html:69 #: netbox/templates/dcim/powerport.html:59 #: netbox/templates/dcim/rearport.html:65 msgid "Connection" msgstr "" -#: netbox/dcim/forms/filtersets.py:1348 netbox/extras/forms/bulk_edit.py:326 +#: netbox/dcim/forms/filtersets.py:1353 netbox/extras/forms/bulk_edit.py:326 #: netbox/extras/forms/bulk_import.py:247 netbox/extras/forms/filtersets.py:464 #: netbox/extras/forms/model_forms.py:675 netbox/extras/tables/tables.py:579 #: netbox/templates/extras/journalentry.html:30 msgid "Kind" msgstr "" -#: netbox/dcim/forms/filtersets.py:1377 +#: netbox/dcim/forms/filtersets.py:1382 msgid "Mgmt only" msgstr "" -#: netbox/dcim/forms/filtersets.py:1389 netbox/dcim/forms/model_forms.py:1390 -#: netbox/dcim/models/device_components.py:629 -#: netbox/templates/dcim/interface.html:129 +#: netbox/dcim/forms/filtersets.py:1394 netbox/dcim/forms/model_forms.py:1423 +#: netbox/dcim/models/device_components.py:677 +#: netbox/templates/dcim/interface.html:142 msgid "WWN" msgstr "" -#: netbox/dcim/forms/filtersets.py:1409 +#: netbox/dcim/forms/filtersets.py:1414 msgid "Wireless channel" msgstr "" -#: netbox/dcim/forms/filtersets.py:1413 +#: netbox/dcim/forms/filtersets.py:1418 msgid "Channel frequency (MHz)" msgstr "" -#: netbox/dcim/forms/filtersets.py:1417 +#: netbox/dcim/forms/filtersets.py:1422 msgid "Channel width (MHz)" msgstr "" -#: netbox/dcim/forms/filtersets.py:1421 netbox/templates/dcim/interface.html:85 +#: netbox/dcim/forms/filtersets.py:1426 netbox/templates/dcim/interface.html:91 msgid "Transmit power (dBm)" msgstr "" -#: netbox/dcim/forms/filtersets.py:1446 netbox/dcim/forms/filtersets.py:1471 -#: netbox/dcim/tables/devices.py:327 netbox/templates/dcim/cable.html:12 +#: netbox/dcim/forms/filtersets.py:1451 netbox/dcim/forms/filtersets.py:1476 +#: netbox/dcim/tables/devices.py:336 netbox/templates/dcim/cable.html:12 #: netbox/templates/dcim/cable_trace.html:46 #: netbox/templates/dcim/frontport.html:77 #: netbox/templates/dcim/htmx/cable_edit.html:50 @@ -4744,73 +5152,109 @@ msgstr "" msgid "Cable" msgstr "" -#: netbox/dcim/forms/filtersets.py:1550 netbox/dcim/tables/devices.py:949 +#: netbox/dcim/forms/filtersets.py:1555 netbox/dcim/tables/devices.py:978 msgid "Discovered" msgstr "" +#: netbox/dcim/forms/filtersets.py:1596 netbox/ipam/forms/filtersets.py:350 +msgid "Assigned Device" +msgstr "" + +#: netbox/dcim/forms/filtersets.py:1601 netbox/ipam/forms/filtersets.py:355 +msgid "Assigned VM" +msgstr "" + #: netbox/dcim/forms/formsets.py:20 #, python-brace-format msgid "A virtual chassis member already exists in position {vc_position}." msgstr "" -#: netbox/dcim/forms/model_forms.py:140 +#: netbox/dcim/forms/mixins.py:27 netbox/dcim/forms/mixins.py:75 +#: netbox/ipam/forms/bulk_edit.py:420 netbox/ipam/forms/model_forms.py:610 +msgid "Scope type" +msgstr "" + +#: netbox/dcim/forms/mixins.py:30 netbox/dcim/forms/mixins.py:78 +#: netbox/ipam/forms/bulk_edit.py:270 netbox/ipam/forms/bulk_edit.py:423 +#: netbox/ipam/forms/bulk_edit.py:437 netbox/ipam/forms/filtersets.py:175 +#: netbox/ipam/forms/model_forms.py:231 netbox/ipam/forms/model_forms.py:613 +#: netbox/ipam/forms/model_forms.py:623 netbox/ipam/tables/ip.py:194 +#: netbox/ipam/tables/vlans.py:40 netbox/templates/ipam/prefix.html:48 +#: netbox/templates/ipam/vlangroup.html:38 +#: netbox/templates/virtualization/cluster.html:42 +#: netbox/templates/wireless/wirelesslan.html:26 +#: netbox/virtualization/forms/bulk_edit.py:91 +#: netbox/virtualization/forms/filtersets.py:46 +#: netbox/virtualization/forms/model_forms.py:78 +#: netbox/virtualization/tables/clusters.py:80 +#: netbox/wireless/forms/bulk_edit.py:93 netbox/wireless/forms/filtersets.py:37 +#: netbox/wireless/forms/model_forms.py:56 +#: netbox/wireless/tables/wirelesslan.py:58 +msgid "Scope" +msgstr "" + +#: netbox/dcim/forms/mixins.py:104 netbox/ipam/forms/bulk_import.py:436 +msgid "Scope type (app & model)" +msgstr "" + +#: netbox/dcim/forms/model_forms.py:144 msgid "Contact Info" msgstr "" -#: netbox/dcim/forms/model_forms.py:195 netbox/templates/dcim/rackrole.html:19 +#: netbox/dcim/forms/model_forms.py:199 netbox/templates/dcim/rackrole.html:19 msgid "Rack Role" msgstr "" -#: netbox/dcim/forms/model_forms.py:212 netbox/dcim/forms/model_forms.py:362 -#: netbox/dcim/forms/model_forms.py:446 +#: netbox/dcim/forms/model_forms.py:217 netbox/dcim/forms/model_forms.py:371 +#: netbox/dcim/forms/model_forms.py:456 #: netbox/utilities/forms/fields/fields.py:47 msgid "Slug" msgstr "" -#: netbox/dcim/forms/model_forms.py:259 +#: netbox/dcim/forms/model_forms.py:264 msgid "Select a pre-defined rack type, or set physical characteristics below." msgstr "" -#: netbox/dcim/forms/model_forms.py:265 +#: netbox/dcim/forms/model_forms.py:273 msgid "Inventory Control" msgstr "" -#: netbox/dcim/forms/model_forms.py:313 +#: netbox/dcim/forms/model_forms.py:321 msgid "" "Comma-separated list of numeric unit IDs. A range may be specified using a " "hyphen." msgstr "" -#: netbox/dcim/forms/model_forms.py:322 netbox/dcim/tables/racks.py:202 +#: netbox/dcim/forms/model_forms.py:330 netbox/dcim/tables/racks.py:201 msgid "Reservation" msgstr "" -#: netbox/dcim/forms/model_forms.py:423 +#: netbox/dcim/forms/model_forms.py:432 #: netbox/templates/dcim/devicerole.html:23 msgid "Device Role" msgstr "" -#: netbox/dcim/forms/model_forms.py:490 netbox/dcim/models/devices.py:644 +#: netbox/dcim/forms/model_forms.py:500 netbox/dcim/models/devices.py:634 msgid "The lowest-numbered unit occupied by the device" msgstr "" -#: netbox/dcim/forms/model_forms.py:547 +#: netbox/dcim/forms/model_forms.py:558 msgid "The position in the virtual chassis this device is identified by" msgstr "" -#: netbox/dcim/forms/model_forms.py:552 +#: netbox/dcim/forms/model_forms.py:563 msgid "The priority of the device in the virtual chassis" msgstr "" -#: netbox/dcim/forms/model_forms.py:659 +#: netbox/dcim/forms/model_forms.py:670 msgid "Automatically populate components associated with this module type" msgstr "" -#: netbox/dcim/forms/model_forms.py:767 +#: netbox/dcim/forms/model_forms.py:779 msgid "Characteristics" msgstr "" -#: netbox/dcim/forms/model_forms.py:914 +#: netbox/dcim/forms/model_forms.py:926 #, python-brace-format msgid "" "Alphanumeric ranges are supported for bulk creation. Mixed cases and types " @@ -4819,59 +5263,35 @@ msgid "" "replaced with the position value when creating a new module." msgstr "" -#: netbox/dcim/forms/model_forms.py:1094 +#: netbox/dcim/forms/model_forms.py:1107 msgid "Console port template" msgstr "" -#: netbox/dcim/forms/model_forms.py:1102 +#: netbox/dcim/forms/model_forms.py:1115 msgid "Console server port template" msgstr "" -#: netbox/dcim/forms/model_forms.py:1110 +#: netbox/dcim/forms/model_forms.py:1123 msgid "Front port template" msgstr "" -#: netbox/dcim/forms/model_forms.py:1118 +#: netbox/dcim/forms/model_forms.py:1131 msgid "Interface template" msgstr "" -#: netbox/dcim/forms/model_forms.py:1126 +#: netbox/dcim/forms/model_forms.py:1139 msgid "Power outlet template" msgstr "" -#: netbox/dcim/forms/model_forms.py:1134 +#: netbox/dcim/forms/model_forms.py:1147 msgid "Power port template" msgstr "" -#: netbox/dcim/forms/model_forms.py:1142 +#: netbox/dcim/forms/model_forms.py:1155 msgid "Rear port template" msgstr "" -#: netbox/dcim/forms/model_forms.py:1151 netbox/dcim/forms/model_forms.py:1395 -#: netbox/dcim/forms/model_forms.py:1558 netbox/dcim/forms/model_forms.py:1590 -#: netbox/dcim/tables/connections.py:65 netbox/ipam/forms/bulk_import.py:318 -#: netbox/ipam/forms/model_forms.py:280 netbox/ipam/forms/model_forms.py:289 -#: netbox/ipam/tables/fhrp.py:64 netbox/ipam/tables/ip.py:372 -#: netbox/ipam/tables/vlans.py:169 -#: netbox/templates/circuits/inc/circuit_termination_fields.html:51 -#: netbox/templates/dcim/frontport.html:106 -#: netbox/templates/dcim/interface.html:27 -#: netbox/templates/dcim/interface.html:184 -#: netbox/templates/dcim/interface.html:310 -#: netbox/templates/dcim/rearport.html:102 -#: netbox/templates/virtualization/vminterface.html:18 -#: netbox/templates/vpn/tunneltermination.html:31 -#: netbox/templates/wireless/inc/wirelesslink_interface.html:10 -#: netbox/templates/wireless/wirelesslink.html:10 -#: netbox/templates/wireless/wirelesslink.html:55 -#: netbox/virtualization/forms/model_forms.py:348 -#: netbox/vpn/forms/bulk_import.py:297 netbox/vpn/forms/model_forms.py:436 -#: netbox/vpn/forms/model_forms.py:445 netbox/wireless/forms/model_forms.py:113 -#: netbox/wireless/forms/model_forms.py:155 -msgid "Interface" -msgstr "" - -#: netbox/dcim/forms/model_forms.py:1152 netbox/dcim/forms/model_forms.py:1591 +#: netbox/dcim/forms/model_forms.py:1165 netbox/dcim/forms/model_forms.py:1636 #: netbox/dcim/tables/connections.py:27 #: netbox/templates/dcim/consoleport.html:17 #: netbox/templates/dcim/consoleserverport.html:74 @@ -4879,102 +5299,128 @@ msgstr "" msgid "Console Port" msgstr "" -#: netbox/dcim/forms/model_forms.py:1153 netbox/dcim/forms/model_forms.py:1592 +#: netbox/dcim/forms/model_forms.py:1166 netbox/dcim/forms/model_forms.py:1637 #: netbox/templates/dcim/consoleport.html:73 #: netbox/templates/dcim/consoleserverport.html:17 #: netbox/templates/dcim/frontport.html:109 msgid "Console Server Port" msgstr "" -#: netbox/dcim/forms/model_forms.py:1154 netbox/dcim/forms/model_forms.py:1593 -#: netbox/templates/circuits/inc/circuit_termination_fields.html:52 +#: netbox/dcim/forms/model_forms.py:1167 netbox/dcim/forms/model_forms.py:1638 +#: netbox/templates/circuits/inc/circuit_termination_fields.html:53 #: netbox/templates/dcim/consoleport.html:76 #: netbox/templates/dcim/consoleserverport.html:77 #: netbox/templates/dcim/frontport.html:17 #: netbox/templates/dcim/frontport.html:115 -#: netbox/templates/dcim/interface.html:187 +#: netbox/templates/dcim/interface.html:244 #: netbox/templates/dcim/rearport.html:105 msgid "Front Port" msgstr "" -#: netbox/dcim/forms/model_forms.py:1155 netbox/dcim/forms/model_forms.py:1594 -#: netbox/dcim/tables/devices.py:710 -#: netbox/templates/circuits/inc/circuit_termination_fields.html:53 +#: netbox/dcim/forms/model_forms.py:1168 netbox/dcim/forms/model_forms.py:1639 +#: netbox/dcim/tables/devices.py:743 +#: netbox/templates/circuits/inc/circuit_termination_fields.html:54 #: netbox/templates/dcim/consoleport.html:79 #: netbox/templates/dcim/consoleserverport.html:80 #: netbox/templates/dcim/frontport.html:50 #: netbox/templates/dcim/frontport.html:118 -#: netbox/templates/dcim/interface.html:190 +#: netbox/templates/dcim/interface.html:247 #: netbox/templates/dcim/rearport.html:17 #: netbox/templates/dcim/rearport.html:108 msgid "Rear Port" msgstr "" -#: netbox/dcim/forms/model_forms.py:1156 netbox/dcim/forms/model_forms.py:1595 -#: netbox/dcim/tables/connections.py:46 netbox/dcim/tables/devices.py:512 -#: netbox/templates/dcim/poweroutlet.html:44 +#: netbox/dcim/forms/model_forms.py:1169 netbox/dcim/forms/model_forms.py:1640 +#: netbox/dcim/tables/connections.py:46 netbox/dcim/tables/devices.py:520 +#: netbox/templates/dcim/poweroutlet.html:54 #: netbox/templates/dcim/powerport.html:17 msgid "Power Port" msgstr "" -#: netbox/dcim/forms/model_forms.py:1157 netbox/dcim/forms/model_forms.py:1596 +#: netbox/dcim/forms/model_forms.py:1170 netbox/dcim/forms/model_forms.py:1641 #: netbox/templates/dcim/poweroutlet.html:17 #: netbox/templates/dcim/powerport.html:77 msgid "Power Outlet" msgstr "" -#: netbox/dcim/forms/model_forms.py:1159 netbox/dcim/forms/model_forms.py:1598 +#: netbox/dcim/forms/model_forms.py:1172 netbox/dcim/forms/model_forms.py:1643 msgid "Component Assignment" msgstr "" -#: netbox/dcim/forms/model_forms.py:1202 netbox/dcim/forms/model_forms.py:1645 +#: netbox/dcim/forms/model_forms.py:1218 netbox/dcim/forms/model_forms.py:1690 msgid "An InventoryItem can only be assigned to a single component." msgstr "" -#: netbox/dcim/forms/model_forms.py:1339 +#: netbox/dcim/forms/model_forms.py:1355 msgid "LAG interface" msgstr "" -#: netbox/dcim/forms/model_forms.py:1362 +#: netbox/dcim/forms/model_forms.py:1378 msgid "Filter VLANs available for assignment by group." msgstr "" -#: netbox/dcim/forms/model_forms.py:1491 +#: netbox/dcim/forms/model_forms.py:1533 msgid "Child Device" msgstr "" -#: netbox/dcim/forms/model_forms.py:1492 +#: netbox/dcim/forms/model_forms.py:1534 msgid "" "Child devices must first be created and assigned to the site and rack of the " "parent device." msgstr "" -#: netbox/dcim/forms/model_forms.py:1534 +#: netbox/dcim/forms/model_forms.py:1576 msgid "Console port" msgstr "" -#: netbox/dcim/forms/model_forms.py:1542 +#: netbox/dcim/forms/model_forms.py:1584 msgid "Console server port" msgstr "" -#: netbox/dcim/forms/model_forms.py:1550 +#: netbox/dcim/forms/model_forms.py:1592 msgid "Front port" msgstr "" -#: netbox/dcim/forms/model_forms.py:1566 +#: netbox/dcim/forms/model_forms.py:1608 msgid "Power outlet" msgstr "" -#: netbox/dcim/forms/model_forms.py:1586 +#: netbox/dcim/forms/model_forms.py:1630 #: netbox/templates/dcim/inventoryitem.html:17 msgid "Inventory Item" msgstr "" -#: netbox/dcim/forms/model_forms.py:1659 +#: netbox/dcim/forms/model_forms.py:1704 #: netbox/templates/dcim/inventoryitemrole.html:15 msgid "Inventory Item Role" msgstr "" +#: netbox/dcim/forms/model_forms.py:1773 +msgid "VM Interface" +msgstr "" + +#: netbox/dcim/forms/model_forms.py:1788 netbox/ipam/forms/filtersets.py:608 +#: netbox/ipam/forms/model_forms.py:326 netbox/ipam/forms/model_forms.py:788 +#: netbox/ipam/forms/model_forms.py:814 netbox/ipam/tables/vlans.py:171 +#: netbox/templates/virtualization/virtualdisk.html:21 +#: netbox/templates/virtualization/virtualmachine.html:12 +#: netbox/templates/virtualization/vminterface.html:21 +#: netbox/templates/vpn/tunneltermination.html:25 +#: netbox/virtualization/forms/filtersets.py:202 +#: netbox/virtualization/forms/filtersets.py:247 +#: netbox/virtualization/forms/model_forms.py:219 +#: netbox/virtualization/tables/virtualmachines.py:105 +#: netbox/virtualization/tables/virtualmachines.py:161 netbox/vpn/choices.py:53 +#: netbox/vpn/forms/filtersets.py:293 netbox/vpn/forms/model_forms.py:161 +#: netbox/vpn/forms/model_forms.py:172 netbox/vpn/forms/model_forms.py:274 +#: netbox/vpn/forms/model_forms.py:457 +msgid "Virtual Machine" +msgstr "" + +#: netbox/dcim/forms/model_forms.py:1822 +msgid "A MAC address can only be assigned to a single object." +msgstr "" + #: netbox/dcim/forms/object_create.py:48 netbox/dcim/forms/object_create.py:199 #: netbox/dcim/forms/object_create.py:347 msgid "" @@ -4990,7 +5436,7 @@ msgid "" msgstr "" #: netbox/dcim/forms/object_create.py:110 -#: netbox/dcim/forms/object_create.py:263 netbox/dcim/tables/devices.py:252 +#: netbox/dcim/forms/object_create.py:263 netbox/dcim/tables/devices.py:262 msgid "Rear ports" msgstr "" @@ -5013,7 +5459,7 @@ msgid "" "selected number of rear port positions ({rearport_count})." msgstr "" -#: netbox/dcim/forms/object_create.py:401 netbox/dcim/tables/devices.py:1033 +#: netbox/dcim/forms/object_create.py:401 netbox/dcim/tables/devices.py:1064 #: netbox/ipam/tables/fhrp.py:31 netbox/templates/dcim/virtualchassis.html:53 #: netbox/templates/dcim/virtualchassis_edit.html:47 #: netbox/templates/ipam/fhrpgroup.html:38 @@ -5030,13 +5476,13 @@ msgid "" "member." msgstr "" -#: netbox/dcim/forms/object_create.py:427 +#: netbox/dcim/forms/object_create.py:428 msgid "A position must be specified for the first VC member." msgstr "" #: netbox/dcim/models/cables.py:62 -#: netbox/dcim/models/device_component_templates.py:55 -#: netbox/dcim/models/device_components.py:62 +#: netbox/dcim/models/device_component_templates.py:51 +#: netbox/dcim/models/device_components.py:57 #: netbox/extras/models/customfields.py:111 msgid "label" msgstr "" @@ -5049,80 +5495,80 @@ msgstr "" msgid "length unit" msgstr "" -#: netbox/dcim/models/cables.py:95 +#: netbox/dcim/models/cables.py:96 msgid "cable" msgstr "" -#: netbox/dcim/models/cables.py:96 +#: netbox/dcim/models/cables.py:97 msgid "cables" msgstr "" -#: netbox/dcim/models/cables.py:165 +#: netbox/dcim/models/cables.py:163 msgid "Must specify a unit when setting a cable length" msgstr "" -#: netbox/dcim/models/cables.py:168 +#: netbox/dcim/models/cables.py:166 msgid "Must define A and B terminations when creating a new cable." msgstr "" -#: netbox/dcim/models/cables.py:175 +#: netbox/dcim/models/cables.py:173 msgid "Cannot connect different termination types to same end of cable." msgstr "" -#: netbox/dcim/models/cables.py:183 +#: netbox/dcim/models/cables.py:181 #, python-brace-format msgid "Incompatible termination types: {type_a} and {type_b}" msgstr "" -#: netbox/dcim/models/cables.py:193 +#: netbox/dcim/models/cables.py:191 msgid "A and B terminations cannot connect to the same object." msgstr "" -#: netbox/dcim/models/cables.py:260 netbox/ipam/models/asns.py:37 +#: netbox/dcim/models/cables.py:258 netbox/ipam/models/asns.py:37 msgid "end" msgstr "" -#: netbox/dcim/models/cables.py:313 +#: netbox/dcim/models/cables.py:311 msgid "cable termination" msgstr "" -#: netbox/dcim/models/cables.py:314 +#: netbox/dcim/models/cables.py:312 msgid "cable terminations" msgstr "" -#: netbox/dcim/models/cables.py:333 +#: netbox/dcim/models/cables.py:331 #, python-brace-format msgid "" "Duplicate termination found for {app_label}.{model} {termination_id}: cable " "{cable_pk}" msgstr "" -#: netbox/dcim/models/cables.py:343 +#: netbox/dcim/models/cables.py:341 #, python-brace-format msgid "Cables cannot be terminated to {type_display} interfaces" msgstr "" -#: netbox/dcim/models/cables.py:350 +#: netbox/dcim/models/cables.py:348 msgid "Circuit terminations attached to a provider network may not be cabled." msgstr "" -#: netbox/dcim/models/cables.py:448 netbox/extras/models/configs.py:50 +#: netbox/dcim/models/cables.py:446 netbox/extras/models/configs.py:50 msgid "is active" msgstr "" -#: netbox/dcim/models/cables.py:452 +#: netbox/dcim/models/cables.py:450 msgid "is complete" msgstr "" -#: netbox/dcim/models/cables.py:456 +#: netbox/dcim/models/cables.py:454 msgid "is split" msgstr "" -#: netbox/dcim/models/cables.py:464 +#: netbox/dcim/models/cables.py:462 msgid "cable path" msgstr "" -#: netbox/dcim/models/cables.py:465 +#: netbox/dcim/models/cables.py:463 msgid "cable paths" msgstr "" @@ -5133,696 +5579,715 @@ msgid "" "attached to a module type." msgstr "" -#: netbox/dcim/models/device_component_templates.py:58 -#: netbox/dcim/models/device_components.py:65 +#: netbox/dcim/models/device_component_templates.py:54 +#: netbox/dcim/models/device_components.py:60 msgid "Physical label" msgstr "" -#: netbox/dcim/models/device_component_templates.py:103 +#: netbox/dcim/models/device_component_templates.py:99 msgid "Component templates cannot be moved to a different device type." msgstr "" -#: netbox/dcim/models/device_component_templates.py:154 +#: netbox/dcim/models/device_component_templates.py:150 msgid "" "A component template cannot be associated with both a device type and a " "module type." msgstr "" -#: netbox/dcim/models/device_component_templates.py:158 +#: netbox/dcim/models/device_component_templates.py:154 msgid "" "A component template must be associated with either a device type or a " "module type." msgstr "" -#: netbox/dcim/models/device_component_templates.py:212 +#: netbox/dcim/models/device_component_templates.py:209 msgid "console port template" msgstr "" -#: netbox/dcim/models/device_component_templates.py:213 +#: netbox/dcim/models/device_component_templates.py:210 msgid "console port templates" msgstr "" -#: netbox/dcim/models/device_component_templates.py:246 +#: netbox/dcim/models/device_component_templates.py:244 msgid "console server port template" msgstr "" -#: netbox/dcim/models/device_component_templates.py:247 +#: netbox/dcim/models/device_component_templates.py:245 msgid "console server port templates" msgstr "" -#: netbox/dcim/models/device_component_templates.py:278 -#: netbox/dcim/models/device_components.py:352 +#: netbox/dcim/models/device_component_templates.py:277 +#: netbox/dcim/models/device_components.py:345 msgid "maximum draw" msgstr "" -#: netbox/dcim/models/device_component_templates.py:285 -#: netbox/dcim/models/device_components.py:359 +#: netbox/dcim/models/device_component_templates.py:284 +#: netbox/dcim/models/device_components.py:352 msgid "allocated draw" msgstr "" -#: netbox/dcim/models/device_component_templates.py:295 +#: netbox/dcim/models/device_component_templates.py:294 msgid "power port template" msgstr "" -#: netbox/dcim/models/device_component_templates.py:296 +#: netbox/dcim/models/device_component_templates.py:295 msgid "power port templates" msgstr "" #: netbox/dcim/models/device_component_templates.py:315 -#: netbox/dcim/models/device_components.py:382 +#: netbox/dcim/models/device_components.py:372 #, python-brace-format msgid "Allocated draw cannot exceed the maximum draw ({maximum_draw}W)." msgstr "" -#: netbox/dcim/models/device_component_templates.py:347 -#: netbox/dcim/models/device_components.py:477 +#: netbox/dcim/models/device_component_templates.py:349 +#: netbox/dcim/models/device_components.py:468 msgid "feed leg" msgstr "" -#: netbox/dcim/models/device_component_templates.py:351 -#: netbox/dcim/models/device_components.py:481 +#: netbox/dcim/models/device_component_templates.py:354 +#: netbox/dcim/models/device_components.py:473 msgid "Phase (for three-phase feeds)" msgstr "" -#: netbox/dcim/models/device_component_templates.py:357 +#: netbox/dcim/models/device_component_templates.py:360 msgid "power outlet template" msgstr "" -#: netbox/dcim/models/device_component_templates.py:358 +#: netbox/dcim/models/device_component_templates.py:361 msgid "power outlet templates" msgstr "" -#: netbox/dcim/models/device_component_templates.py:367 +#: netbox/dcim/models/device_component_templates.py:370 #, python-brace-format msgid "Parent power port ({power_port}) must belong to the same device type" msgstr "" -#: netbox/dcim/models/device_component_templates.py:371 +#: netbox/dcim/models/device_component_templates.py:376 #, python-brace-format msgid "Parent power port ({power_port}) must belong to the same module type" msgstr "" -#: netbox/dcim/models/device_component_templates.py:423 -#: netbox/dcim/models/device_components.py:611 +#: netbox/dcim/models/device_component_templates.py:430 +#: netbox/dcim/models/device_components.py:659 msgid "management only" msgstr "" -#: netbox/dcim/models/device_component_templates.py:431 -#: netbox/dcim/models/device_components.py:550 +#: netbox/dcim/models/device_component_templates.py:438 +#: netbox/dcim/models/device_components.py:539 msgid "bridge interface" msgstr "" -#: netbox/dcim/models/device_component_templates.py:449 -#: netbox/dcim/models/device_components.py:636 +#: netbox/dcim/models/device_component_templates.py:459 +#: netbox/dcim/models/device_components.py:685 msgid "wireless role" msgstr "" -#: netbox/dcim/models/device_component_templates.py:455 +#: netbox/dcim/models/device_component_templates.py:465 msgid "interface template" msgstr "" -#: netbox/dcim/models/device_component_templates.py:456 +#: netbox/dcim/models/device_component_templates.py:466 msgid "interface templates" msgstr "" -#: netbox/dcim/models/device_component_templates.py:463 -#: netbox/dcim/models/device_components.py:804 -#: netbox/virtualization/models/virtualmachines.py:405 +#: netbox/dcim/models/device_component_templates.py:473 +#: netbox/dcim/models/device_components.py:845 +#: netbox/virtualization/models/virtualmachines.py:385 msgid "An interface cannot be bridged to itself." msgstr "" -#: netbox/dcim/models/device_component_templates.py:466 +#: netbox/dcim/models/device_component_templates.py:477 #, python-brace-format msgid "Bridge interface ({bridge}) must belong to the same device type" msgstr "" -#: netbox/dcim/models/device_component_templates.py:470 +#: netbox/dcim/models/device_component_templates.py:483 #, python-brace-format msgid "Bridge interface ({bridge}) must belong to the same module type" msgstr "" -#: netbox/dcim/models/device_component_templates.py:526 -#: netbox/dcim/models/device_components.py:984 +#: netbox/dcim/models/device_component_templates.py:540 +#: netbox/dcim/models/device_components.py:1033 msgid "rear port position" msgstr "" -#: netbox/dcim/models/device_component_templates.py:551 +#: netbox/dcim/models/device_component_templates.py:565 msgid "front port template" msgstr "" -#: netbox/dcim/models/device_component_templates.py:552 +#: netbox/dcim/models/device_component_templates.py:566 msgid "front port templates" msgstr "" -#: netbox/dcim/models/device_component_templates.py:562 +#: netbox/dcim/models/device_component_templates.py:576 #, python-brace-format msgid "Rear port ({name}) must belong to the same device type" msgstr "" -#: netbox/dcim/models/device_component_templates.py:568 +#: netbox/dcim/models/device_component_templates.py:582 #, python-brace-format msgid "" "Invalid rear port position ({position}); rear port {name} has only {count} " "positions" msgstr "" -#: netbox/dcim/models/device_component_templates.py:621 -#: netbox/dcim/models/device_components.py:1053 +#: netbox/dcim/models/device_component_templates.py:635 +#: netbox/dcim/models/device_components.py:1099 msgid "positions" msgstr "" -#: netbox/dcim/models/device_component_templates.py:632 +#: netbox/dcim/models/device_component_templates.py:646 msgid "rear port template" msgstr "" -#: netbox/dcim/models/device_component_templates.py:633 +#: netbox/dcim/models/device_component_templates.py:647 msgid "rear port templates" msgstr "" -#: netbox/dcim/models/device_component_templates.py:662 -#: netbox/dcim/models/device_components.py:1103 +#: netbox/dcim/models/device_component_templates.py:676 +#: netbox/dcim/models/device_components.py:1146 msgid "position" msgstr "" -#: netbox/dcim/models/device_component_templates.py:665 -#: netbox/dcim/models/device_components.py:1106 +#: netbox/dcim/models/device_component_templates.py:679 +#: netbox/dcim/models/device_components.py:1149 msgid "Identifier to reference when renaming installed components" msgstr "" -#: netbox/dcim/models/device_component_templates.py:671 +#: netbox/dcim/models/device_component_templates.py:685 msgid "module bay template" msgstr "" -#: netbox/dcim/models/device_component_templates.py:672 +#: netbox/dcim/models/device_component_templates.py:686 msgid "module bay templates" msgstr "" -#: netbox/dcim/models/device_component_templates.py:699 +#: netbox/dcim/models/device_component_templates.py:713 msgid "device bay template" msgstr "" -#: netbox/dcim/models/device_component_templates.py:700 +#: netbox/dcim/models/device_component_templates.py:714 msgid "device bay templates" msgstr "" -#: netbox/dcim/models/device_component_templates.py:713 +#: netbox/dcim/models/device_component_templates.py:728 #, python-brace-format msgid "" "Subdevice role of device type ({device_type}) must be set to \"parent\" to " "allow device bays." msgstr "" -#: netbox/dcim/models/device_component_templates.py:768 -#: netbox/dcim/models/device_components.py:1262 +#: netbox/dcim/models/device_component_templates.py:784 +#: netbox/dcim/models/device_components.py:1302 msgid "part ID" msgstr "" -#: netbox/dcim/models/device_component_templates.py:770 -#: netbox/dcim/models/device_components.py:1264 +#: netbox/dcim/models/device_component_templates.py:786 +#: netbox/dcim/models/device_components.py:1304 msgid "Manufacturer-assigned part identifier" msgstr "" -#: netbox/dcim/models/device_component_templates.py:787 +#: netbox/dcim/models/device_component_templates.py:803 msgid "inventory item template" msgstr "" -#: netbox/dcim/models/device_component_templates.py:788 +#: netbox/dcim/models/device_component_templates.py:804 msgid "inventory item templates" msgstr "" -#: netbox/dcim/models/device_components.py:105 +#: netbox/dcim/models/device_components.py:100 msgid "Components cannot be moved to a different device." msgstr "" -#: netbox/dcim/models/device_components.py:144 +#: netbox/dcim/models/device_components.py:139 msgid "cable end" msgstr "" -#: netbox/dcim/models/device_components.py:150 +#: netbox/dcim/models/device_components.py:146 msgid "mark connected" msgstr "" -#: netbox/dcim/models/device_components.py:152 +#: netbox/dcim/models/device_components.py:148 msgid "Treat as if a cable is connected" msgstr "" -#: netbox/dcim/models/device_components.py:170 +#: netbox/dcim/models/device_components.py:166 msgid "Must specify cable end (A or B) when attaching a cable." msgstr "" -#: netbox/dcim/models/device_components.py:174 +#: netbox/dcim/models/device_components.py:170 msgid "Cable end must not be set without a cable." msgstr "" -#: netbox/dcim/models/device_components.py:178 +#: netbox/dcim/models/device_components.py:174 msgid "Cannot mark as connected with a cable attached." msgstr "" -#: netbox/dcim/models/device_components.py:202 +#: netbox/dcim/models/device_components.py:198 #, python-brace-format msgid "{class_name} models must declare a parent_object property" msgstr "" -#: netbox/dcim/models/device_components.py:287 -#: netbox/dcim/models/device_components.py:316 -#: netbox/dcim/models/device_components.py:349 -#: netbox/dcim/models/device_components.py:467 +#: netbox/dcim/models/device_components.py:284 +#: netbox/dcim/models/device_components.py:311 +#: netbox/dcim/models/device_components.py:342 +#: netbox/dcim/models/device_components.py:458 msgid "Physical port type" msgstr "" -#: netbox/dcim/models/device_components.py:290 -#: netbox/dcim/models/device_components.py:319 +#: netbox/dcim/models/device_components.py:287 +#: netbox/dcim/models/device_components.py:314 msgid "speed" msgstr "" -#: netbox/dcim/models/device_components.py:294 -#: netbox/dcim/models/device_components.py:323 +#: netbox/dcim/models/device_components.py:291 +#: netbox/dcim/models/device_components.py:318 msgid "Port speed in bits per second" msgstr "" -#: netbox/dcim/models/device_components.py:300 +#: netbox/dcim/models/device_components.py:297 msgid "console port" msgstr "" -#: netbox/dcim/models/device_components.py:301 +#: netbox/dcim/models/device_components.py:298 msgid "console ports" msgstr "" -#: netbox/dcim/models/device_components.py:329 +#: netbox/dcim/models/device_components.py:324 msgid "console server port" msgstr "" -#: netbox/dcim/models/device_components.py:330 +#: netbox/dcim/models/device_components.py:325 msgid "console server ports" msgstr "" -#: netbox/dcim/models/device_components.py:369 +#: netbox/dcim/models/device_components.py:362 msgid "power port" msgstr "" -#: netbox/dcim/models/device_components.py:370 +#: netbox/dcim/models/device_components.py:363 msgid "power ports" msgstr "" -#: netbox/dcim/models/device_components.py:487 +#: netbox/dcim/models/device_components.py:483 msgid "power outlet" msgstr "" -#: netbox/dcim/models/device_components.py:488 +#: netbox/dcim/models/device_components.py:484 msgid "power outlets" msgstr "" -#: netbox/dcim/models/device_components.py:499 +#: netbox/dcim/models/device_components.py:492 #, python-brace-format msgid "Parent power port ({power_port}) must belong to the same device" msgstr "" -#: netbox/dcim/models/device_components.py:530 netbox/vpn/models/crypto.py:81 -#: netbox/vpn/models/crypto.py:226 +#: netbox/dcim/models/device_components.py:518 netbox/vpn/models/crypto.py:80 +#: netbox/vpn/models/crypto.py:222 msgid "mode" msgstr "" -#: netbox/dcim/models/device_components.py:534 +#: netbox/dcim/models/device_components.py:523 msgid "IEEE 802.1Q tagging strategy" msgstr "" -#: netbox/dcim/models/device_components.py:542 +#: netbox/dcim/models/device_components.py:531 msgid "parent interface" msgstr "" -#: netbox/dcim/models/device_components.py:602 -msgid "parent LAG" -msgstr "" - -#: netbox/dcim/models/device_components.py:612 -msgid "This interface is used only for out-of-band management" -msgstr "" - -#: netbox/dcim/models/device_components.py:617 -msgid "speed (Kbps)" -msgstr "" - -#: netbox/dcim/models/device_components.py:620 -msgid "duplex" -msgstr "" - -#: netbox/dcim/models/device_components.py:630 -msgid "64-bit World Wide Name" -msgstr "" - -#: netbox/dcim/models/device_components.py:642 -msgid "wireless channel" -msgstr "" - -#: netbox/dcim/models/device_components.py:649 -msgid "channel frequency (MHz)" -msgstr "" - -#: netbox/dcim/models/device_components.py:650 -#: netbox/dcim/models/device_components.py:658 -msgid "Populated by selected channel (if set)" -msgstr "" - -#: netbox/dcim/models/device_components.py:664 -msgid "transmit power (dBm)" -msgstr "" - -#: netbox/dcim/models/device_components.py:689 netbox/wireless/models.py:117 -msgid "wireless LANs" -msgstr "" - -#: netbox/dcim/models/device_components.py:697 -#: netbox/virtualization/models/virtualmachines.py:335 +#: netbox/dcim/models/device_components.py:547 msgid "untagged VLAN" msgstr "" -#: netbox/dcim/models/device_components.py:703 -#: netbox/virtualization/models/virtualmachines.py:341 +#: netbox/dcim/models/device_components.py:553 msgid "tagged VLANs" msgstr "" -#: netbox/dcim/models/device_components.py:745 -#: netbox/virtualization/models/virtualmachines.py:377 +#: netbox/dcim/models/device_components.py:561 +#: netbox/dcim/tables/devices.py:601 netbox/ipam/forms/bulk_edit.py:510 +#: netbox/ipam/forms/bulk_import.py:491 netbox/ipam/forms/filtersets.py:565 +#: netbox/ipam/forms/model_forms.py:684 netbox/ipam/tables/vlans.py:106 +#: netbox/templates/dcim/interface.html:86 netbox/templates/ipam/vlan.html:77 +msgid "Q-in-Q SVLAN" +msgstr "" + +#: netbox/dcim/models/device_components.py:576 +msgid "primary MAC address" +msgstr "" + +#: netbox/dcim/models/device_components.py:588 +msgid "Only Q-in-Q interfaces may specify a service VLAN." +msgstr "" + +#: netbox/dcim/models/device_components.py:594 +#, python-brace-format +msgid "MAC address {mac_address} is not assigned to this interface." +msgstr "" + +#: netbox/dcim/models/device_components.py:650 +msgid "parent LAG" +msgstr "" + +#: netbox/dcim/models/device_components.py:660 +msgid "This interface is used only for out-of-band management" +msgstr "" + +#: netbox/dcim/models/device_components.py:665 +msgid "speed (Kbps)" +msgstr "" + +#: netbox/dcim/models/device_components.py:668 +msgid "duplex" +msgstr "" + +#: netbox/dcim/models/device_components.py:678 +msgid "64-bit World Wide Name" +msgstr "" + +#: netbox/dcim/models/device_components.py:692 +msgid "wireless channel" +msgstr "" + +#: netbox/dcim/models/device_components.py:699 +msgid "channel frequency (MHz)" +msgstr "" + +#: netbox/dcim/models/device_components.py:700 +#: netbox/dcim/models/device_components.py:708 +msgid "Populated by selected channel (if set)" +msgstr "" + +#: netbox/dcim/models/device_components.py:714 +msgid "transmit power (dBm)" +msgstr "" + +#: netbox/dcim/models/device_components.py:741 netbox/wireless/models.py:117 +msgid "wireless LANs" +msgstr "" + +#: netbox/dcim/models/device_components.py:789 +#: netbox/virtualization/models/virtualmachines.py:359 msgid "interface" msgstr "" -#: netbox/dcim/models/device_components.py:746 -#: netbox/virtualization/models/virtualmachines.py:378 +#: netbox/dcim/models/device_components.py:790 +#: netbox/virtualization/models/virtualmachines.py:360 msgid "interfaces" msgstr "" -#: netbox/dcim/models/device_components.py:757 +#: netbox/dcim/models/device_components.py:798 #, python-brace-format msgid "{display_type} interfaces cannot have a cable attached." msgstr "" -#: netbox/dcim/models/device_components.py:765 +#: netbox/dcim/models/device_components.py:806 #, python-brace-format msgid "{display_type} interfaces cannot be marked as connected." msgstr "" -#: netbox/dcim/models/device_components.py:774 -#: netbox/virtualization/models/virtualmachines.py:390 +#: netbox/dcim/models/device_components.py:815 +#: netbox/virtualization/models/virtualmachines.py:370 msgid "An interface cannot be its own parent." msgstr "" -#: netbox/dcim/models/device_components.py:778 +#: netbox/dcim/models/device_components.py:819 msgid "Only virtual interfaces may be assigned to a parent interface." msgstr "" -#: netbox/dcim/models/device_components.py:785 +#: netbox/dcim/models/device_components.py:826 #, python-brace-format msgid "" "The selected parent interface ({interface}) belongs to a different device " "({device})" msgstr "" -#: netbox/dcim/models/device_components.py:791 +#: netbox/dcim/models/device_components.py:832 #, python-brace-format msgid "" "The selected parent interface ({interface}) belongs to {device}, which is " "not part of virtual chassis {virtual_chassis}." msgstr "" -#: netbox/dcim/models/device_components.py:811 +#: netbox/dcim/models/device_components.py:852 #, python-brace-format msgid "" "The selected bridge interface ({bridge}) belongs to a different device " "({device})." msgstr "" -#: netbox/dcim/models/device_components.py:817 +#: netbox/dcim/models/device_components.py:858 #, python-brace-format msgid "" "The selected bridge interface ({interface}) belongs to {device}, which is " "not part of virtual chassis {virtual_chassis}." msgstr "" -#: netbox/dcim/models/device_components.py:828 +#: netbox/dcim/models/device_components.py:869 msgid "Virtual interfaces cannot have a parent LAG interface." msgstr "" -#: netbox/dcim/models/device_components.py:832 +#: netbox/dcim/models/device_components.py:873 msgid "A LAG interface cannot be its own parent." msgstr "" -#: netbox/dcim/models/device_components.py:839 +#: netbox/dcim/models/device_components.py:880 #, python-brace-format msgid "" "The selected LAG interface ({lag}) belongs to a different device ({device})." msgstr "" -#: netbox/dcim/models/device_components.py:845 +#: netbox/dcim/models/device_components.py:886 #, python-brace-format msgid "" "The selected LAG interface ({lag}) belongs to {device}, which is not part of " "virtual chassis {virtual_chassis}." msgstr "" -#: netbox/dcim/models/device_components.py:856 +#: netbox/dcim/models/device_components.py:897 msgid "Virtual interfaces cannot have a PoE mode." msgstr "" -#: netbox/dcim/models/device_components.py:860 +#: netbox/dcim/models/device_components.py:901 msgid "Virtual interfaces cannot have a PoE type." msgstr "" -#: netbox/dcim/models/device_components.py:866 +#: netbox/dcim/models/device_components.py:907 msgid "Must specify PoE mode when designating a PoE type." msgstr "" -#: netbox/dcim/models/device_components.py:873 +#: netbox/dcim/models/device_components.py:914 msgid "Wireless role may be set only on wireless interfaces." msgstr "" -#: netbox/dcim/models/device_components.py:875 +#: netbox/dcim/models/device_components.py:916 msgid "Channel may be set only on wireless interfaces." msgstr "" -#: netbox/dcim/models/device_components.py:881 +#: netbox/dcim/models/device_components.py:922 msgid "Channel frequency may be set only on wireless interfaces." msgstr "" -#: netbox/dcim/models/device_components.py:885 +#: netbox/dcim/models/device_components.py:926 msgid "Cannot specify custom frequency with channel selected." msgstr "" -#: netbox/dcim/models/device_components.py:891 +#: netbox/dcim/models/device_components.py:932 msgid "Channel width may be set only on wireless interfaces." msgstr "" -#: netbox/dcim/models/device_components.py:893 +#: netbox/dcim/models/device_components.py:934 msgid "Cannot specify custom width with channel selected." msgstr "" -#: netbox/dcim/models/device_components.py:901 +#: netbox/dcim/models/device_components.py:942 #, python-brace-format msgid "" "The untagged VLAN ({untagged_vlan}) must belong to the same site as the " "interface's parent device, or it must be global." msgstr "" -#: netbox/dcim/models/device_components.py:990 +#: netbox/dcim/models/device_components.py:1039 msgid "Mapped position on corresponding rear port" msgstr "" -#: netbox/dcim/models/device_components.py:1006 +#: netbox/dcim/models/device_components.py:1055 msgid "front port" msgstr "" -#: netbox/dcim/models/device_components.py:1007 +#: netbox/dcim/models/device_components.py:1056 msgid "front ports" msgstr "" -#: netbox/dcim/models/device_components.py:1021 +#: netbox/dcim/models/device_components.py:1067 #, python-brace-format msgid "Rear port ({rear_port}) must belong to the same device" msgstr "" -#: netbox/dcim/models/device_components.py:1029 +#: netbox/dcim/models/device_components.py:1075 #, python-brace-format msgid "" "Invalid rear port position ({rear_port_position}): Rear port {name} has only " "{positions} positions." msgstr "" -#: netbox/dcim/models/device_components.py:1059 +#: netbox/dcim/models/device_components.py:1105 msgid "Number of front ports which may be mapped" msgstr "" -#: netbox/dcim/models/device_components.py:1064 +#: netbox/dcim/models/device_components.py:1110 msgid "rear port" msgstr "" -#: netbox/dcim/models/device_components.py:1065 +#: netbox/dcim/models/device_components.py:1111 msgid "rear ports" msgstr "" -#: netbox/dcim/models/device_components.py:1079 +#: netbox/dcim/models/device_components.py:1122 #, python-brace-format msgid "" "The number of positions cannot be less than the number of mapped front ports " "({frontport_count})" msgstr "" -#: netbox/dcim/models/device_components.py:1120 +#: netbox/dcim/models/device_components.py:1163 msgid "module bay" msgstr "" -#: netbox/dcim/models/device_components.py:1121 +#: netbox/dcim/models/device_components.py:1164 msgid "module bays" msgstr "" -#: netbox/dcim/models/device_components.py:1138 +#: netbox/dcim/models/device_components.py:1178 #: netbox/dcim/models/devices.py:1224 msgid "A module bay cannot belong to a module installed within it." msgstr "" -#: netbox/dcim/models/device_components.py:1164 +#: netbox/dcim/models/device_components.py:1204 msgid "device bay" msgstr "" -#: netbox/dcim/models/device_components.py:1165 +#: netbox/dcim/models/device_components.py:1205 msgid "device bays" msgstr "" -#: netbox/dcim/models/device_components.py:1175 +#: netbox/dcim/models/device_components.py:1212 #, python-brace-format msgid "This type of device ({device_type}) does not support device bays." msgstr "" -#: netbox/dcim/models/device_components.py:1181 +#: netbox/dcim/models/device_components.py:1218 msgid "Cannot install a device into itself." msgstr "" -#: netbox/dcim/models/device_components.py:1189 +#: netbox/dcim/models/device_components.py:1226 #, python-brace-format msgid "" "Cannot install the specified device; device is already installed in {bay}." msgstr "" -#: netbox/dcim/models/device_components.py:1210 +#: netbox/dcim/models/device_components.py:1247 msgid "inventory item role" msgstr "" -#: netbox/dcim/models/device_components.py:1211 +#: netbox/dcim/models/device_components.py:1248 msgid "inventory item roles" msgstr "" -#: netbox/dcim/models/device_components.py:1268 -#: netbox/dcim/models/devices.py:607 netbox/dcim/models/devices.py:1181 -#: netbox/dcim/models/racks.py:313 -#: netbox/virtualization/models/virtualmachines.py:131 +#: netbox/dcim/models/device_components.py:1308 +#: netbox/dcim/models/devices.py:597 netbox/dcim/models/devices.py:1184 +#: netbox/dcim/models/racks.py:304 +#: netbox/virtualization/models/virtualmachines.py:126 msgid "serial number" msgstr "" -#: netbox/dcim/models/device_components.py:1276 -#: netbox/dcim/models/devices.py:615 netbox/dcim/models/devices.py:1188 -#: netbox/dcim/models/racks.py:320 +#: netbox/dcim/models/device_components.py:1316 +#: netbox/dcim/models/devices.py:605 netbox/dcim/models/devices.py:1191 +#: netbox/dcim/models/racks.py:311 msgid "asset tag" msgstr "" -#: netbox/dcim/models/device_components.py:1277 +#: netbox/dcim/models/device_components.py:1317 msgid "A unique tag used to identify this item" msgstr "" -#: netbox/dcim/models/device_components.py:1280 +#: netbox/dcim/models/device_components.py:1320 msgid "discovered" msgstr "" -#: netbox/dcim/models/device_components.py:1282 +#: netbox/dcim/models/device_components.py:1322 msgid "This item was automatically discovered" msgstr "" -#: netbox/dcim/models/device_components.py:1300 +#: netbox/dcim/models/device_components.py:1340 msgid "inventory item" msgstr "" -#: netbox/dcim/models/device_components.py:1301 +#: netbox/dcim/models/device_components.py:1341 msgid "inventory items" msgstr "" -#: netbox/dcim/models/device_components.py:1312 +#: netbox/dcim/models/device_components.py:1349 msgid "Cannot assign self as parent." msgstr "" -#: netbox/dcim/models/device_components.py:1320 +#: netbox/dcim/models/device_components.py:1357 msgid "Parent inventory item does not belong to the same device." msgstr "" -#: netbox/dcim/models/device_components.py:1326 +#: netbox/dcim/models/device_components.py:1363 msgid "Cannot move an inventory item with dependent children" msgstr "" -#: netbox/dcim/models/device_components.py:1334 +#: netbox/dcim/models/device_components.py:1371 msgid "Cannot assign inventory item to component on another device" msgstr "" -#: netbox/dcim/models/devices.py:54 +#: netbox/dcim/models/devices.py:58 msgid "manufacturer" msgstr "" -#: netbox/dcim/models/devices.py:55 +#: netbox/dcim/models/devices.py:59 msgid "manufacturers" msgstr "" -#: netbox/dcim/models/devices.py:82 netbox/dcim/models/devices.py:382 +#: netbox/dcim/models/devices.py:83 netbox/dcim/models/devices.py:382 #: netbox/dcim/models/racks.py:133 msgid "model" msgstr "" -#: netbox/dcim/models/devices.py:95 +#: netbox/dcim/models/devices.py:96 msgid "default platform" msgstr "" -#: netbox/dcim/models/devices.py:98 netbox/dcim/models/devices.py:386 +#: netbox/dcim/models/devices.py:99 netbox/dcim/models/devices.py:386 msgid "part number" msgstr "" -#: netbox/dcim/models/devices.py:101 netbox/dcim/models/devices.py:389 +#: netbox/dcim/models/devices.py:102 netbox/dcim/models/devices.py:389 msgid "Discrete part number (optional)" msgstr "" -#: netbox/dcim/models/devices.py:107 netbox/dcim/models/racks.py:54 +#: netbox/dcim/models/devices.py:108 netbox/dcim/models/racks.py:53 msgid "height (U)" msgstr "" -#: netbox/dcim/models/devices.py:111 +#: netbox/dcim/models/devices.py:112 msgid "exclude from utilization" msgstr "" -#: netbox/dcim/models/devices.py:112 +#: netbox/dcim/models/devices.py:113 msgid "Devices of this type are excluded when calculating rack utilization." msgstr "" -#: netbox/dcim/models/devices.py:116 +#: netbox/dcim/models/devices.py:117 msgid "is full depth" msgstr "" -#: netbox/dcim/models/devices.py:117 +#: netbox/dcim/models/devices.py:118 msgid "Device consumes both front and rear rack faces." msgstr "" -#: netbox/dcim/models/devices.py:123 +#: netbox/dcim/models/devices.py:125 msgid "parent/child status" msgstr "" -#: netbox/dcim/models/devices.py:124 +#: netbox/dcim/models/devices.py:126 msgid "" "Parent devices house child devices in device bays. Leave blank if this " "device type is neither a parent nor a child." msgstr "" -#: netbox/dcim/models/devices.py:128 netbox/dcim/models/devices.py:392 -#: netbox/dcim/models/devices.py:659 netbox/dcim/models/racks.py:324 +#: netbox/dcim/models/devices.py:130 netbox/dcim/models/devices.py:392 +#: netbox/dcim/models/devices.py:650 netbox/dcim/models/racks.py:315 msgid "airflow" msgstr "" -#: netbox/dcim/models/devices.py:204 +#: netbox/dcim/models/devices.py:207 msgid "device type" msgstr "" -#: netbox/dcim/models/devices.py:205 +#: netbox/dcim/models/devices.py:208 msgid "device types" msgstr "" @@ -5854,211 +6319,216 @@ msgstr "" msgid "Child device types must be 0U." msgstr "" -#: netbox/dcim/models/devices.py:411 +#: netbox/dcim/models/devices.py:412 msgid "module type" msgstr "" -#: netbox/dcim/models/devices.py:412 +#: netbox/dcim/models/devices.py:413 msgid "module types" msgstr "" -#: netbox/dcim/models/devices.py:485 +#: netbox/dcim/models/devices.py:483 msgid "Virtual machines may be assigned to this role" msgstr "" -#: netbox/dcim/models/devices.py:497 +#: netbox/dcim/models/devices.py:495 msgid "device role" msgstr "" -#: netbox/dcim/models/devices.py:498 +#: netbox/dcim/models/devices.py:496 msgid "device roles" msgstr "" -#: netbox/dcim/models/devices.py:515 +#: netbox/dcim/models/devices.py:510 msgid "Optionally limit this platform to devices of a certain manufacturer" msgstr "" -#: netbox/dcim/models/devices.py:527 +#: netbox/dcim/models/devices.py:522 msgid "platform" msgstr "" -#: netbox/dcim/models/devices.py:528 +#: netbox/dcim/models/devices.py:523 msgid "platforms" msgstr "" -#: netbox/dcim/models/devices.py:576 +#: netbox/dcim/models/devices.py:571 msgid "The function this device serves" msgstr "" -#: netbox/dcim/models/devices.py:608 +#: netbox/dcim/models/devices.py:598 msgid "Chassis serial number, assigned by the manufacturer" msgstr "" -#: netbox/dcim/models/devices.py:616 netbox/dcim/models/devices.py:1189 +#: netbox/dcim/models/devices.py:606 netbox/dcim/models/devices.py:1192 msgid "A unique tag used to identify this device" msgstr "" -#: netbox/dcim/models/devices.py:643 +#: netbox/dcim/models/devices.py:633 msgid "position (U)" msgstr "" -#: netbox/dcim/models/devices.py:650 +#: netbox/dcim/models/devices.py:641 msgid "rack face" msgstr "" -#: netbox/dcim/models/devices.py:670 netbox/dcim/models/devices.py:1420 -#: netbox/virtualization/models/virtualmachines.py:100 +#: netbox/dcim/models/devices.py:662 netbox/dcim/models/devices.py:1419 +#: netbox/virtualization/models/virtualmachines.py:95 msgid "primary IPv4" msgstr "" -#: netbox/dcim/models/devices.py:678 netbox/dcim/models/devices.py:1428 -#: netbox/virtualization/models/virtualmachines.py:108 +#: netbox/dcim/models/devices.py:670 netbox/dcim/models/devices.py:1427 +#: netbox/virtualization/models/virtualmachines.py:103 msgid "primary IPv6" msgstr "" -#: netbox/dcim/models/devices.py:686 +#: netbox/dcim/models/devices.py:678 msgid "out-of-band IP" msgstr "" -#: netbox/dcim/models/devices.py:703 +#: netbox/dcim/models/devices.py:695 msgid "VC position" msgstr "" -#: netbox/dcim/models/devices.py:706 +#: netbox/dcim/models/devices.py:698 msgid "Virtual chassis position" msgstr "" -#: netbox/dcim/models/devices.py:709 +#: netbox/dcim/models/devices.py:701 msgid "VC priority" msgstr "" -#: netbox/dcim/models/devices.py:713 +#: netbox/dcim/models/devices.py:705 msgid "Virtual chassis master election priority" msgstr "" -#: netbox/dcim/models/devices.py:716 netbox/dcim/models/sites.py:207 +#: netbox/dcim/models/devices.py:708 netbox/dcim/models/sites.py:208 msgid "latitude" msgstr "" -#: netbox/dcim/models/devices.py:721 netbox/dcim/models/devices.py:729 -#: netbox/dcim/models/sites.py:212 netbox/dcim/models/sites.py:220 +#: netbox/dcim/models/devices.py:713 netbox/dcim/models/devices.py:721 +#: netbox/dcim/models/sites.py:213 netbox/dcim/models/sites.py:221 msgid "GPS coordinate in decimal format (xx.yyyyyy)" msgstr "" -#: netbox/dcim/models/devices.py:724 netbox/dcim/models/sites.py:215 +#: netbox/dcim/models/devices.py:716 netbox/dcim/models/sites.py:216 msgid "longitude" msgstr "" -#: netbox/dcim/models/devices.py:797 +#: netbox/dcim/models/devices.py:789 msgid "Device name must be unique per site." msgstr "" -#: netbox/dcim/models/devices.py:808 netbox/ipam/models/services.py:75 +#: netbox/dcim/models/devices.py:800 netbox/ipam/models/services.py:71 msgid "device" msgstr "" -#: netbox/dcim/models/devices.py:809 +#: netbox/dcim/models/devices.py:801 msgid "devices" msgstr "" -#: netbox/dcim/models/devices.py:835 +#: netbox/dcim/models/devices.py:824 #, python-brace-format msgid "Rack {rack} does not belong to site {site}." msgstr "" -#: netbox/dcim/models/devices.py:840 +#: netbox/dcim/models/devices.py:829 #, python-brace-format msgid "Location {location} does not belong to site {site}." msgstr "" -#: netbox/dcim/models/devices.py:846 +#: netbox/dcim/models/devices.py:835 #, python-brace-format msgid "Rack {rack} does not belong to location {location}." msgstr "" -#: netbox/dcim/models/devices.py:853 +#: netbox/dcim/models/devices.py:842 msgid "Cannot select a rack face without assigning a rack." msgstr "" -#: netbox/dcim/models/devices.py:857 +#: netbox/dcim/models/devices.py:846 msgid "Cannot select a rack position without assigning a rack." msgstr "" -#: netbox/dcim/models/devices.py:863 +#: netbox/dcim/models/devices.py:852 msgid "Position must be in increments of 0.5 rack units." msgstr "" -#: netbox/dcim/models/devices.py:867 +#: netbox/dcim/models/devices.py:856 msgid "Must specify rack face when defining rack position." msgstr "" -#: netbox/dcim/models/devices.py:875 +#: netbox/dcim/models/devices.py:864 #, python-brace-format msgid "A 0U device type ({device_type}) cannot be assigned to a rack position." msgstr "" -#: netbox/dcim/models/devices.py:886 +#: netbox/dcim/models/devices.py:875 msgid "" "Child device types cannot be assigned to a rack face. This is an attribute " "of the parent device." msgstr "" -#: netbox/dcim/models/devices.py:893 +#: netbox/dcim/models/devices.py:882 msgid "" "Child device types cannot be assigned to a rack position. This is an " "attribute of the parent device." msgstr "" -#: netbox/dcim/models/devices.py:907 +#: netbox/dcim/models/devices.py:896 #, python-brace-format msgid "" "U{position} is already occupied or does not have sufficient space to " "accommodate this device type: {device_type} ({u_height}U)" msgstr "" -#: netbox/dcim/models/devices.py:922 +#: netbox/dcim/models/devices.py:911 #, python-brace-format msgid "{ip} is not an IPv4 address." msgstr "" -#: netbox/dcim/models/devices.py:931 netbox/dcim/models/devices.py:946 +#: netbox/dcim/models/devices.py:923 netbox/dcim/models/devices.py:941 #, python-brace-format msgid "The specified IP address ({ip}) is not assigned to this device." msgstr "" -#: netbox/dcim/models/devices.py:937 +#: netbox/dcim/models/devices.py:929 #, python-brace-format msgid "{ip} is not an IPv6 address." msgstr "" -#: netbox/dcim/models/devices.py:964 +#: netbox/dcim/models/devices.py:959 #, python-brace-format msgid "" "The assigned platform is limited to {platform_manufacturer} device types, " "but this device's type belongs to {devicetype_manufacturer}." msgstr "" -#: netbox/dcim/models/devices.py:975 +#: netbox/dcim/models/devices.py:970 #, python-brace-format msgid "The assigned cluster belongs to a different site ({site})" msgstr "" -#: netbox/dcim/models/devices.py:983 +#: netbox/dcim/models/devices.py:977 +#, python-brace-format +msgid "The assigned cluster belongs to a different location ({location})" +msgstr "" + +#: netbox/dcim/models/devices.py:985 msgid "A device assigned to a virtual chassis must have its position defined." msgstr "" -#: netbox/dcim/models/devices.py:988 +#: netbox/dcim/models/devices.py:991 #, python-brace-format msgid "" "Device cannot be removed from virtual chassis {virtual_chassis} because it " "is currently designated as its master." msgstr "" -#: netbox/dcim/models/devices.py:1196 +#: netbox/dcim/models/devices.py:1199 msgid "module" msgstr "" -#: netbox/dcim/models/devices.py:1197 +#: netbox/dcim/models/devices.py:1200 msgid "modules" msgstr "" @@ -6069,69 +6539,64 @@ msgid "" "device ({device})." msgstr "" -#: netbox/dcim/models/devices.py:1339 +#: netbox/dcim/models/devices.py:1340 msgid "domain" msgstr "" -#: netbox/dcim/models/devices.py:1352 netbox/dcim/models/devices.py:1353 +#: netbox/dcim/models/devices.py:1353 netbox/dcim/models/devices.py:1354 msgid "virtual chassis" msgstr "" -#: netbox/dcim/models/devices.py:1368 +#: netbox/dcim/models/devices.py:1366 #, python-brace-format msgid "The selected master ({master}) is not assigned to this virtual chassis." msgstr "" -#: netbox/dcim/models/devices.py:1384 +#: netbox/dcim/models/devices.py:1382 #, python-brace-format msgid "" "Unable to delete virtual chassis {self}. There are member interfaces which " "form a cross-chassis LAG interfaces." msgstr "" -#: netbox/dcim/models/devices.py:1409 netbox/vpn/models/l2vpn.py:37 +#: netbox/dcim/models/devices.py:1408 netbox/vpn/models/l2vpn.py:37 msgid "identifier" msgstr "" -#: netbox/dcim/models/devices.py:1410 +#: netbox/dcim/models/devices.py:1409 msgid "Numeric identifier unique to the parent device" msgstr "" -#: netbox/dcim/models/devices.py:1438 netbox/extras/models/customfields.py:225 +#: netbox/dcim/models/devices.py:1437 netbox/extras/models/customfields.py:225 #: netbox/extras/models/models.py:107 netbox/extras/models/models.py:694 -#: netbox/netbox/models/__init__.py:115 +#: netbox/netbox/models/__init__.py:119 msgid "comments" msgstr "" -#: netbox/dcim/models/devices.py:1454 +#: netbox/dcim/models/devices.py:1453 msgid "virtual device context" msgstr "" -#: netbox/dcim/models/devices.py:1455 +#: netbox/dcim/models/devices.py:1454 msgid "virtual device contexts" msgstr "" -#: netbox/dcim/models/devices.py:1487 +#: netbox/dcim/models/devices.py:1483 #, python-brace-format msgid "{ip} is not an IPv{family} address." msgstr "" -#: netbox/dcim/models/devices.py:1493 +#: netbox/dcim/models/devices.py:1489 msgid "Primary IP address must belong to an interface on the assigned device." msgstr "" -#: netbox/dcim/models/mixins.py:15 netbox/extras/models/configs.py:41 -#: netbox/extras/models/models.py:313 netbox/extras/models/models.py:522 -#: netbox/extras/models/search.py:48 netbox/ipam/models/ip.py:194 -msgid "weight" +#: netbox/dcim/models/devices.py:1521 +msgid "MAC addresses" msgstr "" -#: netbox/dcim/models/mixins.py:22 -msgid "weight unit" -msgstr "" - -#: netbox/dcim/models/mixins.py:51 -msgid "Must specify a unit when setting a weight" +#: netbox/dcim/models/mixins.py:94 +#, python-brace-format +msgid "Please select a {scope_type}." msgstr "" #: netbox/dcim/models/power.py:55 @@ -6142,104 +6607,104 @@ msgstr "" msgid "power panels" msgstr "" -#: netbox/dcim/models/power.py:70 +#: netbox/dcim/models/power.py:67 #, python-brace-format msgid "" "Location {location} ({location_site}) is in a different site than {site}" msgstr "" -#: netbox/dcim/models/power.py:108 +#: netbox/dcim/models/power.py:106 msgid "supply" msgstr "" -#: netbox/dcim/models/power.py:114 +#: netbox/dcim/models/power.py:112 msgid "phase" msgstr "" -#: netbox/dcim/models/power.py:120 +#: netbox/dcim/models/power.py:118 msgid "voltage" msgstr "" -#: netbox/dcim/models/power.py:125 +#: netbox/dcim/models/power.py:123 msgid "amperage" msgstr "" -#: netbox/dcim/models/power.py:130 +#: netbox/dcim/models/power.py:128 msgid "max utilization" msgstr "" -#: netbox/dcim/models/power.py:133 +#: netbox/dcim/models/power.py:131 msgid "Maximum permissible draw (percentage)" msgstr "" -#: netbox/dcim/models/power.py:136 +#: netbox/dcim/models/power.py:134 msgid "available power" msgstr "" -#: netbox/dcim/models/power.py:164 +#: netbox/dcim/models/power.py:162 msgid "power feed" msgstr "" -#: netbox/dcim/models/power.py:165 +#: netbox/dcim/models/power.py:163 msgid "power feeds" msgstr "" -#: netbox/dcim/models/power.py:179 +#: netbox/dcim/models/power.py:174 #, python-brace-format msgid "" "Rack {rack} ({rack_site}) and power panel {powerpanel} ({powerpanel_site}) " "are in different sites." msgstr "" -#: netbox/dcim/models/power.py:190 +#: netbox/dcim/models/power.py:185 msgid "Voltage cannot be negative for AC supply" msgstr "" -#: netbox/dcim/models/racks.py:47 +#: netbox/dcim/models/racks.py:46 msgid "width" msgstr "" -#: netbox/dcim/models/racks.py:48 +#: netbox/dcim/models/racks.py:47 msgid "Rail-to-rail width" msgstr "" -#: netbox/dcim/models/racks.py:56 +#: netbox/dcim/models/racks.py:55 msgid "Height in rack units" msgstr "" -#: netbox/dcim/models/racks.py:60 +#: netbox/dcim/models/racks.py:59 msgid "starting unit" msgstr "" -#: netbox/dcim/models/racks.py:62 +#: netbox/dcim/models/racks.py:61 msgid "Starting unit for rack" msgstr "" -#: netbox/dcim/models/racks.py:66 +#: netbox/dcim/models/racks.py:65 msgid "descending units" msgstr "" -#: netbox/dcim/models/racks.py:67 +#: netbox/dcim/models/racks.py:66 msgid "Units are numbered top-to-bottom" msgstr "" -#: netbox/dcim/models/racks.py:72 +#: netbox/dcim/models/racks.py:71 msgid "outer width" msgstr "" -#: netbox/dcim/models/racks.py:75 +#: netbox/dcim/models/racks.py:74 msgid "Outer dimension of rack (width)" msgstr "" -#: netbox/dcim/models/racks.py:78 +#: netbox/dcim/models/racks.py:77 msgid "outer depth" msgstr "" -#: netbox/dcim/models/racks.py:81 +#: netbox/dcim/models/racks.py:80 msgid "Outer dimension of rack (depth)" msgstr "" -#: netbox/dcim/models/racks.py:84 +#: netbox/dcim/models/racks.py:83 msgid "outer unit" msgstr "" @@ -6261,7 +6726,7 @@ msgstr "" msgid "Maximum load capacity for the rack" msgstr "" -#: netbox/dcim/models/racks.py:125 netbox/dcim/models/racks.py:252 +#: netbox/dcim/models/racks.py:125 netbox/dcim/models/racks.py:247 msgid "form factor" msgstr "" @@ -6273,180 +6738,180 @@ msgstr "" msgid "rack types" msgstr "" -#: netbox/dcim/models/racks.py:180 netbox/dcim/models/racks.py:379 +#: netbox/dcim/models/racks.py:177 netbox/dcim/models/racks.py:368 msgid "Must specify a unit when setting an outer width/depth" msgstr "" -#: netbox/dcim/models/racks.py:184 netbox/dcim/models/racks.py:383 +#: netbox/dcim/models/racks.py:181 netbox/dcim/models/racks.py:372 msgid "Must specify a unit when setting a maximum weight" msgstr "" -#: netbox/dcim/models/racks.py:230 +#: netbox/dcim/models/racks.py:227 msgid "rack role" msgstr "" -#: netbox/dcim/models/racks.py:231 +#: netbox/dcim/models/racks.py:228 msgid "rack roles" msgstr "" -#: netbox/dcim/models/racks.py:274 +#: netbox/dcim/models/racks.py:265 msgid "facility ID" msgstr "" -#: netbox/dcim/models/racks.py:275 +#: netbox/dcim/models/racks.py:266 msgid "Locally-assigned identifier" msgstr "" -#: netbox/dcim/models/racks.py:308 netbox/ipam/forms/bulk_import.py:201 -#: netbox/ipam/forms/bulk_import.py:266 netbox/ipam/forms/bulk_import.py:301 -#: netbox/ipam/forms/bulk_import.py:483 -#: netbox/virtualization/forms/bulk_import.py:112 +#: netbox/dcim/models/racks.py:299 netbox/ipam/forms/bulk_import.py:197 +#: netbox/ipam/forms/bulk_import.py:265 netbox/ipam/forms/bulk_import.py:300 +#: netbox/ipam/forms/bulk_import.py:482 +#: netbox/virtualization/forms/bulk_import.py:118 msgid "Functional role" msgstr "" -#: netbox/dcim/models/racks.py:321 +#: netbox/dcim/models/racks.py:312 msgid "A unique tag used to identify this rack" msgstr "" -#: netbox/dcim/models/racks.py:359 +#: netbox/dcim/models/racks.py:351 msgid "rack" msgstr "" -#: netbox/dcim/models/racks.py:360 +#: netbox/dcim/models/racks.py:352 msgid "racks" msgstr "" -#: netbox/dcim/models/racks.py:375 +#: netbox/dcim/models/racks.py:364 #, python-brace-format msgid "Assigned location must belong to parent site ({site})." msgstr "" -#: netbox/dcim/models/racks.py:393 +#: netbox/dcim/models/racks.py:383 #, python-brace-format msgid "" "Rack must be at least {min_height}U tall to house currently installed " "devices." msgstr "" -#: netbox/dcim/models/racks.py:400 +#: netbox/dcim/models/racks.py:391 #, python-brace-format msgid "" "Rack unit numbering must begin at {position} or less to house currently " "installed devices." msgstr "" -#: netbox/dcim/models/racks.py:408 +#: netbox/dcim/models/racks.py:399 #, python-brace-format msgid "Location must be from the same site, {site}." msgstr "" -#: netbox/dcim/models/racks.py:670 +#: netbox/dcim/models/racks.py:661 msgid "units" msgstr "" -#: netbox/dcim/models/racks.py:696 +#: netbox/dcim/models/racks.py:687 msgid "rack reservation" msgstr "" -#: netbox/dcim/models/racks.py:697 +#: netbox/dcim/models/racks.py:688 msgid "rack reservations" msgstr "" -#: netbox/dcim/models/racks.py:714 +#: netbox/dcim/models/racks.py:702 #, python-brace-format msgid "Invalid unit(s) for {height}U rack: {unit_list}" msgstr "" -#: netbox/dcim/models/racks.py:727 +#: netbox/dcim/models/racks.py:715 #, python-brace-format msgid "The following units have already been reserved: {unit_list}" msgstr "" -#: netbox/dcim/models/sites.py:49 +#: netbox/dcim/models/sites.py:53 msgid "A top-level region with this name already exists." msgstr "" -#: netbox/dcim/models/sites.py:59 +#: netbox/dcim/models/sites.py:63 msgid "A top-level region with this slug already exists." msgstr "" -#: netbox/dcim/models/sites.py:62 +#: netbox/dcim/models/sites.py:66 msgid "region" msgstr "" -#: netbox/dcim/models/sites.py:63 +#: netbox/dcim/models/sites.py:67 msgid "regions" msgstr "" -#: netbox/dcim/models/sites.py:102 +#: netbox/dcim/models/sites.py:109 msgid "A top-level site group with this name already exists." msgstr "" -#: netbox/dcim/models/sites.py:112 +#: netbox/dcim/models/sites.py:119 msgid "A top-level site group with this slug already exists." msgstr "" -#: netbox/dcim/models/sites.py:115 +#: netbox/dcim/models/sites.py:122 msgid "site group" msgstr "" -#: netbox/dcim/models/sites.py:116 +#: netbox/dcim/models/sites.py:123 msgid "site groups" msgstr "" -#: netbox/dcim/models/sites.py:141 +#: netbox/dcim/models/sites.py:145 msgid "Full name of the site" msgstr "" -#: netbox/dcim/models/sites.py:181 netbox/dcim/models/sites.py:279 +#: netbox/dcim/models/sites.py:181 netbox/dcim/models/sites.py:283 msgid "facility" msgstr "" -#: netbox/dcim/models/sites.py:184 netbox/dcim/models/sites.py:282 +#: netbox/dcim/models/sites.py:184 netbox/dcim/models/sites.py:286 msgid "Local facility ID or description" msgstr "" -#: netbox/dcim/models/sites.py:195 +#: netbox/dcim/models/sites.py:196 msgid "physical address" msgstr "" -#: netbox/dcim/models/sites.py:198 +#: netbox/dcim/models/sites.py:199 msgid "Physical location of the building" msgstr "" -#: netbox/dcim/models/sites.py:201 +#: netbox/dcim/models/sites.py:202 msgid "shipping address" msgstr "" -#: netbox/dcim/models/sites.py:204 +#: netbox/dcim/models/sites.py:205 msgid "If different from the physical address" msgstr "" -#: netbox/dcim/models/sites.py:238 +#: netbox/dcim/models/sites.py:245 msgid "site" msgstr "" -#: netbox/dcim/models/sites.py:239 +#: netbox/dcim/models/sites.py:246 msgid "sites" msgstr "" -#: netbox/dcim/models/sites.py:309 +#: netbox/dcim/models/sites.py:319 msgid "A location with this name already exists within the specified site." msgstr "" -#: netbox/dcim/models/sites.py:319 +#: netbox/dcim/models/sites.py:329 msgid "A location with this slug already exists within the specified site." msgstr "" -#: netbox/dcim/models/sites.py:322 +#: netbox/dcim/models/sites.py:332 msgid "location" msgstr "" -#: netbox/dcim/models/sites.py:323 +#: netbox/dcim/models/sites.py:333 msgid "locations" msgstr "" -#: netbox/dcim/models/sites.py:337 +#: netbox/dcim/models/sites.py:344 #, python-brace-format msgid "Parent location ({parent}) must belong to the same site ({site})." msgstr "" @@ -6459,11 +6924,11 @@ msgstr "" msgid "Termination B" msgstr "" -#: netbox/dcim/tables/cables.py:66 netbox/wireless/tables/wirelesslink.py:23 +#: netbox/dcim/tables/cables.py:66 netbox/wireless/tables/wirelesslink.py:22 msgid "Device A" msgstr "" -#: netbox/dcim/tables/cables.py:72 netbox/wireless/tables/wirelesslink.py:32 +#: netbox/dcim/tables/cables.py:72 netbox/wireless/tables/wirelesslink.py:31 msgid "Device B" msgstr "" @@ -6497,23 +6962,23 @@ msgstr "" msgid "Reachable" msgstr "" -#: netbox/dcim/tables/devices.py:58 netbox/dcim/tables/devices.py:106 -#: netbox/dcim/tables/racks.py:150 netbox/dcim/tables/sites.py:105 +#: netbox/dcim/tables/devices.py:69 netbox/dcim/tables/devices.py:117 +#: netbox/dcim/tables/racks.py:149 netbox/dcim/tables/sites.py:105 #: netbox/dcim/tables/sites.py:148 netbox/extras/tables/tables.py:545 #: netbox/netbox/navigation/menu.py:69 netbox/netbox/navigation/menu.py:73 #: netbox/netbox/navigation/menu.py:75 -#: netbox/virtualization/forms/model_forms.py:122 -#: netbox/virtualization/tables/clusters.py:83 -#: netbox/virtualization/views.py:204 +#: netbox/virtualization/forms/model_forms.py:121 +#: netbox/virtualization/tables/clusters.py:86 +#: netbox/virtualization/views.py:218 msgid "Devices" msgstr "" -#: netbox/dcim/tables/devices.py:63 netbox/dcim/tables/devices.py:111 -#: netbox/virtualization/tables/clusters.py:88 +#: netbox/dcim/tables/devices.py:74 netbox/dcim/tables/devices.py:122 +#: netbox/virtualization/tables/clusters.py:91 msgid "VMs" msgstr "" -#: netbox/dcim/tables/devices.py:100 netbox/dcim/tables/devices.py:216 +#: netbox/dcim/tables/devices.py:111 netbox/dcim/tables/devices.py:226 #: netbox/extras/forms/model_forms.py:630 netbox/templates/dcim/device.html:112 #: netbox/templates/dcim/device/render_config.html:11 #: netbox/templates/dcim/device/render_config.html:14 @@ -6523,70 +6988,66 @@ msgstr "" #: netbox/templates/virtualization/virtualmachine.html:48 #: netbox/templates/virtualization/virtualmachine/render_config.html:11 #: netbox/templates/virtualization/virtualmachine/render_config.html:14 -#: netbox/virtualization/tables/virtualmachines.py:107 +#: netbox/virtualization/tables/virtualmachines.py:77 msgid "Config Template" msgstr "" -#: netbox/dcim/tables/devices.py:150 netbox/templates/dcim/sitegroup.html:26 -msgid "Site Group" -msgstr "" - -#: netbox/dcim/tables/devices.py:187 netbox/dcim/tables/devices.py:1068 -#: netbox/ipam/forms/bulk_import.py:527 netbox/ipam/forms/model_forms.py:306 -#: netbox/ipam/forms/model_forms.py:319 netbox/ipam/tables/ip.py:356 -#: netbox/ipam/tables/ip.py:423 netbox/ipam/tables/ip.py:446 +#: netbox/dcim/tables/devices.py:197 netbox/dcim/tables/devices.py:1099 +#: netbox/ipam/forms/bulk_import.py:562 netbox/ipam/forms/model_forms.py:308 +#: netbox/ipam/forms/model_forms.py:321 netbox/ipam/tables/ip.py:306 +#: netbox/ipam/tables/ip.py:373 netbox/ipam/tables/ip.py:396 #: netbox/templates/ipam/ipaddress.html:11 -#: netbox/virtualization/tables/virtualmachines.py:95 +#: netbox/virtualization/tables/virtualmachines.py:65 msgid "IP Address" msgstr "" -#: netbox/dcim/tables/devices.py:191 netbox/dcim/tables/devices.py:1072 -#: netbox/virtualization/tables/virtualmachines.py:86 +#: netbox/dcim/tables/devices.py:201 netbox/dcim/tables/devices.py:1103 +#: netbox/virtualization/tables/virtualmachines.py:56 msgid "IPv4 Address" msgstr "" -#: netbox/dcim/tables/devices.py:195 netbox/dcim/tables/devices.py:1076 -#: netbox/virtualization/tables/virtualmachines.py:90 +#: netbox/dcim/tables/devices.py:205 netbox/dcim/tables/devices.py:1107 +#: netbox/virtualization/tables/virtualmachines.py:60 msgid "IPv6 Address" msgstr "" -#: netbox/dcim/tables/devices.py:210 +#: netbox/dcim/tables/devices.py:220 msgid "VC Position" msgstr "" -#: netbox/dcim/tables/devices.py:213 +#: netbox/dcim/tables/devices.py:223 msgid "VC Priority" msgstr "" -#: netbox/dcim/tables/devices.py:220 netbox/templates/dcim/device_edit.html:38 +#: netbox/dcim/tables/devices.py:230 netbox/templates/dcim/device_edit.html:38 #: netbox/templates/dcim/devicebay_populate.html:16 msgid "Parent Device" msgstr "" -#: netbox/dcim/tables/devices.py:225 +#: netbox/dcim/tables/devices.py:235 msgid "Position (Device Bay)" msgstr "" -#: netbox/dcim/tables/devices.py:234 +#: netbox/dcim/tables/devices.py:244 msgid "Console ports" msgstr "" -#: netbox/dcim/tables/devices.py:237 +#: netbox/dcim/tables/devices.py:247 msgid "Console server ports" msgstr "" -#: netbox/dcim/tables/devices.py:240 +#: netbox/dcim/tables/devices.py:250 msgid "Power ports" msgstr "" -#: netbox/dcim/tables/devices.py:243 +#: netbox/dcim/tables/devices.py:253 msgid "Power outlets" msgstr "" -#: netbox/dcim/tables/devices.py:246 netbox/dcim/tables/devices.py:1081 -#: netbox/dcim/tables/devicetypes.py:128 netbox/dcim/views.py:1040 -#: netbox/dcim/views.py:1279 netbox/dcim/views.py:1975 -#: netbox/netbox/navigation/menu.py:94 netbox/netbox/navigation/menu.py:250 +#: netbox/dcim/tables/devices.py:256 netbox/dcim/tables/devices.py:1112 +#: netbox/dcim/tables/devicetypes.py:128 netbox/dcim/views.py:1112 +#: netbox/dcim/views.py:1356 netbox/dcim/views.py:2107 +#: netbox/netbox/navigation/menu.py:94 netbox/netbox/navigation/menu.py:258 #: netbox/templates/dcim/device/base.html:37 #: netbox/templates/dcim/device_list.html:43 #: netbox/templates/dcim/devicetype/base.html:34 @@ -6596,35 +7057,35 @@ msgstr "" #: netbox/templates/dcim/virtualdevicecontext.html:81 #: netbox/templates/virtualization/virtualmachine/base.html:27 #: netbox/templates/virtualization/virtualmachine_list.html:14 -#: netbox/virtualization/tables/virtualmachines.py:101 -#: netbox/virtualization/views.py:364 netbox/wireless/tables/wirelesslan.py:55 +#: netbox/virtualization/tables/virtualmachines.py:71 +#: netbox/virtualization/views.py:383 netbox/wireless/tables/wirelesslan.py:62 msgid "Interfaces" msgstr "" -#: netbox/dcim/tables/devices.py:249 +#: netbox/dcim/tables/devices.py:259 msgid "Front ports" msgstr "" -#: netbox/dcim/tables/devices.py:255 +#: netbox/dcim/tables/devices.py:265 msgid "Device bays" msgstr "" -#: netbox/dcim/tables/devices.py:258 +#: netbox/dcim/tables/devices.py:268 msgid "Module bays" msgstr "" -#: netbox/dcim/tables/devices.py:261 +#: netbox/dcim/tables/devices.py:271 msgid "Inventory items" msgstr "" -#: netbox/dcim/tables/devices.py:305 netbox/dcim/tables/modules.py:57 +#: netbox/dcim/tables/devices.py:314 netbox/dcim/tables/modules.py:57 #: netbox/templates/dcim/modulebay.html:17 msgid "Module Bay" msgstr "" -#: netbox/dcim/tables/devices.py:318 netbox/dcim/tables/devicetypes.py:47 -#: netbox/dcim/tables/devicetypes.py:143 netbox/dcim/views.py:1115 -#: netbox/dcim/views.py:2073 netbox/netbox/navigation/menu.py:103 +#: netbox/dcim/tables/devices.py:327 netbox/dcim/tables/devicetypes.py:47 +#: netbox/dcim/tables/devicetypes.py:143 netbox/dcim/views.py:1187 +#: netbox/dcim/views.py:2205 netbox/netbox/navigation/menu.py:103 #: netbox/templates/dcim/device/base.html:52 #: netbox/templates/dcim/device_list.html:71 #: netbox/templates/dcim/devicetype/base.html:49 @@ -6633,85 +7094,89 @@ msgstr "" msgid "Inventory Items" msgstr "" -#: netbox/dcim/tables/devices.py:333 +#: netbox/dcim/tables/devices.py:342 msgid "Cable Color" msgstr "" -#: netbox/dcim/tables/devices.py:339 +#: netbox/dcim/tables/devices.py:348 msgid "Link Peers" msgstr "" -#: netbox/dcim/tables/devices.py:342 +#: netbox/dcim/tables/devices.py:351 msgid "Mark Connected" msgstr "" -#: netbox/dcim/tables/devices.py:461 +#: netbox/dcim/tables/devices.py:470 msgid "Maximum draw (W)" msgstr "" -#: netbox/dcim/tables/devices.py:464 +#: netbox/dcim/tables/devices.py:473 msgid "Allocated draw (W)" msgstr "" -#: netbox/dcim/tables/devices.py:558 netbox/ipam/forms/model_forms.py:734 -#: netbox/ipam/tables/fhrp.py:28 netbox/ipam/views.py:596 -#: netbox/ipam/views.py:696 netbox/netbox/navigation/menu.py:158 -#: netbox/netbox/navigation/menu.py:160 -#: netbox/templates/dcim/interface.html:339 +#: netbox/dcim/tables/devices.py:571 netbox/ipam/forms/model_forms.py:776 +#: netbox/ipam/tables/fhrp.py:28 netbox/ipam/views.py:633 +#: netbox/ipam/views.py:738 netbox/netbox/navigation/menu.py:164 +#: netbox/netbox/navigation/menu.py:166 +#: netbox/templates/dcim/interface.html:396 #: netbox/templates/ipam/ipaddress_bulk_add.html:15 #: netbox/templates/ipam/service.html:40 -#: netbox/templates/virtualization/vminterface.html:85 +#: netbox/templates/virtualization/vminterface.html:101 #: netbox/vpn/tables/tunnels.py:98 msgid "IP Addresses" msgstr "" -#: netbox/dcim/tables/devices.py:564 netbox/netbox/navigation/menu.py:202 +#: netbox/dcim/tables/devices.py:577 netbox/netbox/navigation/menu.py:210 #: netbox/templates/ipam/inc/panels/fhrp_groups.html:6 msgid "FHRP Groups" msgstr "" -#: netbox/dcim/tables/devices.py:576 netbox/templates/dcim/interface.html:89 -#: netbox/templates/virtualization/vminterface.html:67 +#: netbox/dcim/tables/devices.py:589 netbox/templates/dcim/interface.html:95 +#: netbox/templates/virtualization/vminterface.html:59 #: netbox/templates/vpn/tunnel.html:18 #: netbox/templates/vpn/tunneltermination.html:13 #: netbox/vpn/forms/bulk_edit.py:76 netbox/vpn/forms/bulk_import.py:76 #: netbox/vpn/forms/filtersets.py:42 netbox/vpn/forms/filtersets.py:82 -#: netbox/vpn/forms/model_forms.py:60 netbox/vpn/forms/model_forms.py:145 +#: netbox/vpn/forms/model_forms.py:61 netbox/vpn/forms/model_forms.py:146 #: netbox/vpn/tables/tunnels.py:78 msgid "Tunnel" msgstr "" -#: netbox/dcim/tables/devices.py:604 netbox/dcim/tables/devicetypes.py:227 +#: netbox/dcim/tables/devices.py:625 netbox/dcim/tables/devicetypes.py:229 #: netbox/templates/dcim/interface.html:65 msgid "Management Only" msgstr "" -#: netbox/dcim/tables/devices.py:623 +#: netbox/dcim/tables/devices.py:644 msgid "VDCs" msgstr "" -#: netbox/dcim/tables/devices.py:873 netbox/templates/dcim/modulebay.html:53 +#: netbox/dcim/tables/devices.py:651 netbox/templates/dcim/interface.html:163 +msgid "Virtual Circuit" +msgstr "" + +#: netbox/dcim/tables/devices.py:903 netbox/templates/dcim/modulebay.html:53 msgid "Installed Module" msgstr "" -#: netbox/dcim/tables/devices.py:876 +#: netbox/dcim/tables/devices.py:906 msgid "Module Serial" msgstr "" -#: netbox/dcim/tables/devices.py:880 +#: netbox/dcim/tables/devices.py:910 msgid "Module Asset Tag" msgstr "" -#: netbox/dcim/tables/devices.py:889 +#: netbox/dcim/tables/devices.py:919 msgid "Module Status" msgstr "" -#: netbox/dcim/tables/devices.py:944 netbox/dcim/tables/devicetypes.py:312 -#: netbox/templates/dcim/inventoryitem.html:40 +#: netbox/dcim/tables/devices.py:973 netbox/dcim/tables/devicetypes.py:314 +#: netbox/templates/dcim/inventoryitem.html:44 msgid "Component" msgstr "" -#: netbox/dcim/tables/devices.py:1000 +#: netbox/dcim/tables/devices.py:1031 msgid "Items" msgstr "" @@ -6749,8 +7214,8 @@ msgstr "" msgid "Instances" msgstr "" -#: netbox/dcim/tables/devicetypes.py:116 netbox/dcim/views.py:980 -#: netbox/dcim/views.py:1219 netbox/dcim/views.py:1911 +#: netbox/dcim/tables/devicetypes.py:116 netbox/dcim/views.py:1052 +#: netbox/dcim/views.py:1296 netbox/dcim/views.py:2043 #: netbox/netbox/navigation/menu.py:97 #: netbox/templates/dcim/device/base.html:25 #: netbox/templates/dcim/device_list.html:15 @@ -6760,8 +7225,8 @@ msgstr "" msgid "Console Ports" msgstr "" -#: netbox/dcim/tables/devicetypes.py:119 netbox/dcim/views.py:995 -#: netbox/dcim/views.py:1234 netbox/dcim/views.py:1927 +#: netbox/dcim/tables/devicetypes.py:119 netbox/dcim/views.py:1067 +#: netbox/dcim/views.py:1311 netbox/dcim/views.py:2059 #: netbox/netbox/navigation/menu.py:98 #: netbox/templates/dcim/device/base.html:28 #: netbox/templates/dcim/device_list.html:22 @@ -6771,8 +7236,8 @@ msgstr "" msgid "Console Server Ports" msgstr "" -#: netbox/dcim/tables/devicetypes.py:122 netbox/dcim/views.py:1010 -#: netbox/dcim/views.py:1249 netbox/dcim/views.py:1943 +#: netbox/dcim/tables/devicetypes.py:122 netbox/dcim/views.py:1082 +#: netbox/dcim/views.py:1326 netbox/dcim/views.py:2075 #: netbox/netbox/navigation/menu.py:99 #: netbox/templates/dcim/device/base.html:31 #: netbox/templates/dcim/device_list.html:29 @@ -6782,8 +7247,8 @@ msgstr "" msgid "Power Ports" msgstr "" -#: netbox/dcim/tables/devicetypes.py:125 netbox/dcim/views.py:1025 -#: netbox/dcim/views.py:1264 netbox/dcim/views.py:1959 +#: netbox/dcim/tables/devicetypes.py:125 netbox/dcim/views.py:1097 +#: netbox/dcim/views.py:1341 netbox/dcim/views.py:2091 #: netbox/netbox/navigation/menu.py:100 #: netbox/templates/dcim/device/base.html:34 #: netbox/templates/dcim/device_list.html:36 @@ -6793,8 +7258,8 @@ msgstr "" msgid "Power Outlets" msgstr "" -#: netbox/dcim/tables/devicetypes.py:131 netbox/dcim/views.py:1055 -#: netbox/dcim/views.py:1294 netbox/dcim/views.py:1997 +#: netbox/dcim/tables/devicetypes.py:131 netbox/dcim/views.py:1127 +#: netbox/dcim/views.py:1371 netbox/dcim/views.py:2129 #: netbox/netbox/navigation/menu.py:95 #: netbox/templates/dcim/device/base.html:40 #: netbox/templates/dcim/devicetype/base.html:37 @@ -6803,8 +7268,8 @@ msgstr "" msgid "Front Ports" msgstr "" -#: netbox/dcim/tables/devicetypes.py:134 netbox/dcim/views.py:1070 -#: netbox/dcim/views.py:1309 netbox/dcim/views.py:2013 +#: netbox/dcim/tables/devicetypes.py:134 netbox/dcim/views.py:1142 +#: netbox/dcim/views.py:1386 netbox/dcim/views.py:2145 #: netbox/netbox/navigation/menu.py:96 #: netbox/templates/dcim/device/base.html:43 #: netbox/templates/dcim/device_list.html:50 @@ -6814,16 +7279,16 @@ msgstr "" msgid "Rear Ports" msgstr "" -#: netbox/dcim/tables/devicetypes.py:137 netbox/dcim/views.py:1100 -#: netbox/dcim/views.py:2053 netbox/netbox/navigation/menu.py:102 +#: netbox/dcim/tables/devicetypes.py:137 netbox/dcim/views.py:1172 +#: netbox/dcim/views.py:2185 netbox/netbox/navigation/menu.py:102 #: netbox/templates/dcim/device/base.html:49 #: netbox/templates/dcim/device_list.html:57 #: netbox/templates/dcim/devicetype/base.html:46 msgid "Device Bays" msgstr "" -#: netbox/dcim/tables/devicetypes.py:140 netbox/dcim/views.py:1085 -#: netbox/dcim/views.py:1324 netbox/dcim/views.py:2033 +#: netbox/dcim/tables/devicetypes.py:140 netbox/dcim/views.py:1157 +#: netbox/dcim/views.py:1401 netbox/dcim/views.py:2165 #: netbox/netbox/navigation/menu.py:101 #: netbox/templates/dcim/device/base.html:46 #: netbox/templates/dcim/device_list.html:64 @@ -6833,7 +7298,7 @@ msgstr "" msgid "Module Bays" msgstr "" -#: netbox/dcim/tables/power.py:36 netbox/netbox/navigation/menu.py:297 +#: netbox/dcim/tables/power.py:36 netbox/netbox/navigation/menu.py:318 #: netbox/templates/dcim/powerpanel.html:51 msgid "Power Feeds" msgstr "" @@ -6852,39 +7317,39 @@ msgstr "" msgid "Racks" msgstr "" -#: netbox/dcim/tables/racks.py:63 netbox/dcim/tables/racks.py:142 +#: netbox/dcim/tables/racks.py:63 netbox/dcim/tables/racks.py:141 #: netbox/templates/dcim/device.html:318 #: netbox/templates/dcim/inc/panels/racktype_dimensions.html:14 msgid "Height" msgstr "" -#: netbox/dcim/tables/racks.py:67 netbox/dcim/tables/racks.py:165 +#: netbox/dcim/tables/racks.py:67 netbox/dcim/tables/racks.py:164 #: netbox/templates/dcim/inc/panels/racktype_dimensions.html:18 msgid "Outer Width" msgstr "" -#: netbox/dcim/tables/racks.py:71 netbox/dcim/tables/racks.py:169 +#: netbox/dcim/tables/racks.py:71 netbox/dcim/tables/racks.py:168 #: netbox/templates/dcim/inc/panels/racktype_dimensions.html:28 msgid "Outer Depth" msgstr "" -#: netbox/dcim/tables/racks.py:79 netbox/dcim/tables/racks.py:177 +#: netbox/dcim/tables/racks.py:79 netbox/dcim/tables/racks.py:176 msgid "Max Weight" msgstr "" -#: netbox/dcim/tables/racks.py:154 +#: netbox/dcim/tables/racks.py:153 msgid "Space" msgstr "" #: netbox/dcim/tables/sites.py:30 netbox/dcim/tables/sites.py:57 #: netbox/extras/forms/filtersets.py:351 netbox/extras/forms/model_forms.py:517 -#: netbox/ipam/forms/bulk_edit.py:131 netbox/ipam/forms/model_forms.py:153 +#: netbox/ipam/forms/bulk_edit.py:134 netbox/ipam/forms/model_forms.py:159 #: netbox/ipam/tables/asn.py:66 netbox/netbox/navigation/menu.py:15 #: netbox/netbox/navigation/menu.py:17 msgid "Sites" msgstr "" -#: netbox/dcim/tests/test_api.py:47 +#: netbox/dcim/tests/test_api.py:48 msgid "Test case must set peer_termination_type" msgstr "" @@ -6893,62 +7358,62 @@ msgstr "" msgid "Disconnected {count} {type}" msgstr "" -#: netbox/dcim/views.py:738 netbox/netbox/navigation/menu.py:51 +#: netbox/dcim/views.py:794 netbox/netbox/navigation/menu.py:51 msgid "Reservations" msgstr "" -#: netbox/dcim/views.py:757 netbox/templates/dcim/location.html:90 +#: netbox/dcim/views.py:813 netbox/templates/dcim/location.html:90 #: netbox/templates/dcim/site.html:140 msgid "Non-Racked Devices" msgstr "" -#: netbox/dcim/views.py:2086 netbox/extras/forms/model_forms.py:577 +#: netbox/dcim/views.py:2218 netbox/extras/forms/model_forms.py:577 #: netbox/templates/extras/configcontext.html:10 -#: netbox/virtualization/forms/model_forms.py:225 -#: netbox/virtualization/views.py:405 +#: netbox/virtualization/forms/model_forms.py:224 +#: netbox/virtualization/views.py:424 msgid "Config Context" msgstr "" -#: netbox/dcim/views.py:2096 netbox/virtualization/views.py:415 +#: netbox/dcim/views.py:2228 netbox/virtualization/views.py:434 msgid "Render Config" msgstr "" -#: netbox/dcim/views.py:2131 netbox/virtualization/views.py:450 +#: netbox/dcim/views.py:2263 netbox/virtualization/views.py:469 #, python-brace-format msgid "An error occurred while rendering the template: {error}" msgstr "" -#: netbox/dcim/views.py:2149 netbox/extras/tables/tables.py:550 -#: netbox/netbox/navigation/menu.py:247 netbox/netbox/navigation/menu.py:249 -#: netbox/virtualization/views.py:178 +#: netbox/dcim/views.py:2281 netbox/extras/tables/tables.py:550 +#: netbox/netbox/navigation/menu.py:255 netbox/netbox/navigation/menu.py:257 +#: netbox/virtualization/views.py:192 msgid "Virtual Machines" msgstr "" -#: netbox/dcim/views.py:2907 +#: netbox/dcim/views.py:3114 #, python-brace-format msgid "Installed device {device} in bay {device_bay}." msgstr "" -#: netbox/dcim/views.py:2948 +#: netbox/dcim/views.py:3155 #, python-brace-format msgid "Removed device {device} from bay {device_bay}." msgstr "" -#: netbox/dcim/views.py:3054 netbox/ipam/tables/ip.py:234 +#: netbox/dcim/views.py:3271 netbox/ipam/tables/ip.py:180 msgid "Children" msgstr "" -#: netbox/dcim/views.py:3520 +#: netbox/dcim/views.py:3738 #, python-brace-format msgid "Added member {device}" msgstr "" -#: netbox/dcim/views.py:3567 +#: netbox/dcim/views.py:3787 #, python-brace-format msgid "Unable to remove master device {device} from the virtual chassis." msgstr "" -#: netbox/dcim/views.py:3580 +#: netbox/dcim/views.py:3800 #, python-brace-format msgid "Removed {device} from virtual chassis {chassis}" msgstr "" @@ -7047,7 +7512,7 @@ msgstr "" #: netbox/extras/choices.py:108 netbox/templates/tenancy/contact.html:57 #: netbox/tenancy/forms/bulk_edit.py:118 -#: netbox/wireless/forms/model_forms.py:168 +#: netbox/wireless/forms/model_forms.py:171 msgid "Link" msgstr "" @@ -7087,7 +7552,7 @@ msgstr "" msgid "Debug" msgstr "" -#: netbox/extras/choices.py:166 netbox/netbox/choices.py:101 +#: netbox/extras/choices.py:166 netbox/netbox/choices.py:103 msgid "Default" msgstr "" @@ -7095,22 +7560,10 @@ msgstr "" msgid "Failure" msgstr "" -#: netbox/extras/choices.py:186 -msgid "Hourly" -msgstr "" - #: netbox/extras/choices.py:187 msgid "12 hours" msgstr "" -#: netbox/extras/choices.py:188 -msgid "Daily" -msgstr "" - -#: netbox/extras/choices.py:189 -msgid "Weekly" -msgstr "" - #: netbox/extras/choices.py:190 msgid "30 days" msgstr "" @@ -7120,6 +7573,7 @@ msgstr "" #: netbox/templates/generic/bulk_add_component.html:68 #: netbox/templates/generic/object_edit.html:47 #: netbox/templates/generic/object_edit.html:80 +#: netbox/templates/htmx/quick_add.html:24 #: netbox/templates/ipam/inc/ipaddress_edit_header.html:7 msgid "Create" msgstr "" @@ -7143,67 +7597,67 @@ msgstr "" msgid "Delete" msgstr "" -#: netbox/extras/choices.py:252 netbox/netbox/choices.py:57 -#: netbox/netbox/choices.py:102 +#: netbox/extras/choices.py:252 netbox/netbox/choices.py:59 +#: netbox/netbox/choices.py:104 msgid "Blue" msgstr "" -#: netbox/extras/choices.py:253 netbox/netbox/choices.py:56 -#: netbox/netbox/choices.py:103 +#: netbox/extras/choices.py:253 netbox/netbox/choices.py:58 +#: netbox/netbox/choices.py:105 msgid "Indigo" msgstr "" -#: netbox/extras/choices.py:254 netbox/netbox/choices.py:54 -#: netbox/netbox/choices.py:104 +#: netbox/extras/choices.py:254 netbox/netbox/choices.py:56 +#: netbox/netbox/choices.py:106 msgid "Purple" msgstr "" -#: netbox/extras/choices.py:255 netbox/netbox/choices.py:51 -#: netbox/netbox/choices.py:105 +#: netbox/extras/choices.py:255 netbox/netbox/choices.py:53 +#: netbox/netbox/choices.py:107 msgid "Pink" msgstr "" -#: netbox/extras/choices.py:256 netbox/netbox/choices.py:50 -#: netbox/netbox/choices.py:106 +#: netbox/extras/choices.py:256 netbox/netbox/choices.py:52 +#: netbox/netbox/choices.py:108 msgid "Red" msgstr "" -#: netbox/extras/choices.py:257 netbox/netbox/choices.py:68 -#: netbox/netbox/choices.py:107 +#: netbox/extras/choices.py:257 netbox/netbox/choices.py:70 +#: netbox/netbox/choices.py:109 msgid "Orange" msgstr "" -#: netbox/extras/choices.py:258 netbox/netbox/choices.py:66 -#: netbox/netbox/choices.py:108 +#: netbox/extras/choices.py:258 netbox/netbox/choices.py:68 +#: netbox/netbox/choices.py:110 msgid "Yellow" msgstr "" -#: netbox/extras/choices.py:259 netbox/netbox/choices.py:63 -#: netbox/netbox/choices.py:109 +#: netbox/extras/choices.py:259 netbox/netbox/choices.py:65 +#: netbox/netbox/choices.py:111 msgid "Green" msgstr "" -#: netbox/extras/choices.py:260 netbox/netbox/choices.py:60 -#: netbox/netbox/choices.py:110 +#: netbox/extras/choices.py:260 netbox/netbox/choices.py:62 +#: netbox/netbox/choices.py:112 msgid "Teal" msgstr "" -#: netbox/extras/choices.py:261 netbox/netbox/choices.py:59 -#: netbox/netbox/choices.py:111 +#: netbox/extras/choices.py:261 netbox/netbox/choices.py:61 +#: netbox/netbox/choices.py:113 msgid "Cyan" msgstr "" -#: netbox/extras/choices.py:262 netbox/netbox/choices.py:112 +#: netbox/extras/choices.py:262 netbox/netbox/choices.py:114 msgid "Gray" msgstr "" -#: netbox/extras/choices.py:263 netbox/netbox/choices.py:74 -#: netbox/netbox/choices.py:113 +#: netbox/extras/choices.py:263 netbox/netbox/choices.py:76 +#: netbox/netbox/choices.py:115 msgid "Black" msgstr "" -#: netbox/extras/choices.py:264 netbox/netbox/choices.py:75 -#: netbox/netbox/choices.py:114 +#: netbox/extras/choices.py:264 netbox/netbox/choices.py:77 +#: netbox/netbox/choices.py:116 msgid "White" msgstr "" @@ -7310,29 +7764,33 @@ msgstr "" msgid "RSS Feed" msgstr "" -#: netbox/extras/dashboard/widgets.py:279 +#: netbox/extras/dashboard/widgets.py:280 msgid "Embed an RSS feed from an external website." msgstr "" -#: netbox/extras/dashboard/widgets.py:286 +#: netbox/extras/dashboard/widgets.py:287 msgid "Feed URL" msgstr "" -#: netbox/extras/dashboard/widgets.py:291 -msgid "The maximum number of objects to display" +#: netbox/extras/dashboard/widgets.py:290 +msgid "Requires external connection" msgstr "" #: netbox/extras/dashboard/widgets.py:296 +msgid "The maximum number of objects to display" +msgstr "" + +#: netbox/extras/dashboard/widgets.py:301 msgid "How long to stored the cached content (in seconds)" msgstr "" -#: netbox/extras/dashboard/widgets.py:348 netbox/templates/account/base.html:10 +#: netbox/extras/dashboard/widgets.py:358 netbox/templates/account/base.html:10 #: netbox/templates/account/bookmarks.html:7 -#: netbox/templates/inc/user_menu.html:48 +#: netbox/templates/inc/user_menu.html:43 msgid "Bookmarks" msgstr "" -#: netbox/extras/dashboard/widgets.py:352 +#: netbox/extras/dashboard/widgets.py:362 msgid "Show your personal bookmarks" msgstr "" @@ -7361,17 +7819,17 @@ msgid "Group (name)" msgstr "" #: netbox/extras/filtersets.py:574 -#: netbox/virtualization/forms/filtersets.py:118 +#: netbox/virtualization/forms/filtersets.py:123 msgid "Cluster type" msgstr "" -#: netbox/extras/filtersets.py:580 netbox/virtualization/filtersets.py:95 -#: netbox/virtualization/filtersets.py:147 +#: netbox/extras/filtersets.py:580 netbox/virtualization/filtersets.py:61 +#: netbox/virtualization/filtersets.py:113 msgid "Cluster type (slug)" msgstr "" #: netbox/extras/filtersets.py:601 netbox/tenancy/forms/forms.py:16 -#: netbox/tenancy/forms/forms.py:39 +#: netbox/tenancy/forms/forms.py:40 msgid "Tenant group" msgstr "" @@ -7601,7 +8059,7 @@ msgid "The classification of entry" msgstr "" #: netbox/extras/forms/bulk_import.py:261 -#: netbox/extras/forms/model_forms.py:320 netbox/netbox/navigation/menu.py:390 +#: netbox/extras/forms/model_forms.py:320 netbox/netbox/navigation/menu.py:411 #: netbox/templates/extras/notificationgroup.html:41 #: netbox/templates/users/group.html:29 netbox/users/forms/model_forms.py:236 #: netbox/users/forms/model_forms.py:248 netbox/users/forms/model_forms.py:300 @@ -7614,7 +8072,8 @@ msgid "User names separated by commas, encased with double quotes" msgstr "" #: netbox/extras/forms/bulk_import.py:268 -#: netbox/extras/forms/model_forms.py:315 netbox/netbox/navigation/menu.py:410 +#: netbox/extras/forms/model_forms.py:315 netbox/netbox/navigation/menu.py:294 +#: netbox/netbox/navigation/menu.py:431 #: netbox/templates/extras/notificationgroup.html:31 #: netbox/users/forms/model_forms.py:181 netbox/users/forms/model_forms.py:193 #: netbox/users/forms/model_forms.py:305 netbox/users/tables.py:35 @@ -7647,7 +8106,7 @@ msgid "Data" msgstr "" #: netbox/extras/forms/filtersets.py:175 netbox/extras/forms/filtersets.py:333 -#: netbox/extras/forms/filtersets.py:418 netbox/netbox/choices.py:130 +#: netbox/extras/forms/filtersets.py:418 netbox/netbox/choices.py:132 #: netbox/utilities/forms/bulk_import.py:26 msgid "Data file" msgstr "" @@ -7707,7 +8166,7 @@ msgid "Cluster groups" msgstr "" #: netbox/extras/forms/filtersets.py:386 netbox/extras/forms/model_forms.py:552 -#: netbox/netbox/navigation/menu.py:255 netbox/netbox/navigation/menu.py:257 +#: netbox/netbox/navigation/menu.py:263 netbox/netbox/navigation/menu.py:265 #: netbox/templates/virtualization/clustertype.html:30 #: netbox/virtualization/tables/clusters.py:23 #: netbox/virtualization/tables/clusters.py:45 @@ -7933,10 +8392,16 @@ msgstr "" msgid "Database changes have been reverted due to error." msgstr "" -#: netbox/extras/management/commands/reindex.py:66 +#: netbox/extras/management/commands/reindex.py:67 msgid "No indexers found!" msgstr "" +#: netbox/extras/models/configs.py:41 netbox/extras/models/models.py:313 +#: netbox/extras/models/models.py:522 netbox/extras/models/search.py:48 +#: netbox/ipam/models/ip.py:188 netbox/netbox/models/mixins.py:15 +msgid "weight" +msgstr "" + #: netbox/extras/models/configs.py:130 msgid "config context" msgstr "" @@ -8266,27 +8731,27 @@ msgstr "" msgid "Required field cannot be empty." msgstr "" -#: netbox/extras/models/customfields.py:763 +#: netbox/extras/models/customfields.py:764 msgid "Base set of predefined choices (optional)" msgstr "" -#: netbox/extras/models/customfields.py:775 +#: netbox/extras/models/customfields.py:776 msgid "Choices are automatically ordered alphabetically" msgstr "" -#: netbox/extras/models/customfields.py:782 +#: netbox/extras/models/customfields.py:783 msgid "custom field choice set" msgstr "" -#: netbox/extras/models/customfields.py:783 +#: netbox/extras/models/customfields.py:784 msgid "custom field choice sets" msgstr "" -#: netbox/extras/models/customfields.py:825 +#: netbox/extras/models/customfields.py:826 msgid "Must define base or extra choices." msgstr "" -#: netbox/extras/models/customfields.py:849 +#: netbox/extras/models/customfields.py:850 #, python-brace-format msgid "" "Cannot remove choice {choice} as there are {model} objects which reference " @@ -8556,20 +9021,20 @@ msgstr "" msgid "journal entries" msgstr "" -#: netbox/extras/models/models.py:718 +#: netbox/extras/models/models.py:721 #, python-brace-format msgid "Journaling is not supported for this object type ({type})." msgstr "" -#: netbox/extras/models/models.py:760 +#: netbox/extras/models/models.py:763 msgid "bookmark" msgstr "" -#: netbox/extras/models/models.py:761 +#: netbox/extras/models/models.py:764 msgid "bookmarks" msgstr "" -#: netbox/extras/models/models.py:774 +#: netbox/extras/models/models.py:777 #, python-brace-format msgid "Bookmarks cannot be assigned to this object type ({type})." msgstr "" @@ -8661,19 +9126,19 @@ msgstr "" msgid "cached values" msgstr "" -#: netbox/extras/models/staging.py:44 +#: netbox/extras/models/staging.py:45 msgid "branch" msgstr "" -#: netbox/extras/models/staging.py:45 +#: netbox/extras/models/staging.py:46 msgid "branches" msgstr "" -#: netbox/extras/models/staging.py:97 +#: netbox/extras/models/staging.py:105 msgid "staged change" msgstr "" -#: netbox/extras/models/staging.py:98 +#: netbox/extras/models/staging.py:106 msgid "staged changes" msgstr "" @@ -8874,27 +9339,27 @@ msgstr "" msgid "Invalid attribute \"{name}\" for {model}" msgstr "" -#: netbox/extras/views.py:960 +#: netbox/extras/views.py:1029 msgid "Your dashboard has been reset." msgstr "" -#: netbox/extras/views.py:1006 +#: netbox/extras/views.py:1075 msgid "Added widget: " msgstr "" -#: netbox/extras/views.py:1047 +#: netbox/extras/views.py:1116 msgid "Updated widget: " msgstr "" -#: netbox/extras/views.py:1083 +#: netbox/extras/views.py:1152 msgid "Deleted widget: " msgstr "" -#: netbox/extras/views.py:1085 +#: netbox/extras/views.py:1154 msgid "Error deleting widget: " msgstr "" -#: netbox/extras/views.py:1175 +#: netbox/extras/views.py:1244 msgid "Unable to run script: RQ worker process not running." msgstr "" @@ -8916,7 +9381,7 @@ msgstr "" msgid "Invalid IP prefix format: {data}" msgstr "" -#: netbox/ipam/api/views.py:358 +#: netbox/ipam/api/views.py:370 msgid "" "Insufficient space is available to accommodate the requested prefix size(s)" msgstr "" @@ -8957,182 +9422,174 @@ msgstr "" msgid "Plaintext" msgstr "" +#: netbox/ipam/choices.py:166 netbox/ipam/forms/model_forms.py:792 +#: netbox/ipam/forms/model_forms.py:820 netbox/templates/ipam/service.html:21 +msgid "Service" +msgstr "" + +#: netbox/ipam/choices.py:167 +msgid "Customer" +msgstr "" + #: netbox/ipam/fields.py:36 #, python-brace-format msgid "Invalid IP address format: {address}" msgstr "" -#: netbox/ipam/filtersets.py:48 netbox/vpn/filtersets.py:304 +#: netbox/ipam/filtersets.py:51 netbox/vpn/filtersets.py:304 msgid "Import target" msgstr "" -#: netbox/ipam/filtersets.py:54 netbox/vpn/filtersets.py:310 +#: netbox/ipam/filtersets.py:57 netbox/vpn/filtersets.py:310 msgid "Import target (name)" msgstr "" -#: netbox/ipam/filtersets.py:59 netbox/vpn/filtersets.py:315 +#: netbox/ipam/filtersets.py:62 netbox/vpn/filtersets.py:315 msgid "Export target" msgstr "" -#: netbox/ipam/filtersets.py:65 netbox/vpn/filtersets.py:321 +#: netbox/ipam/filtersets.py:68 netbox/vpn/filtersets.py:321 msgid "Export target (name)" msgstr "" -#: netbox/ipam/filtersets.py:86 +#: netbox/ipam/filtersets.py:89 msgid "Importing VRF" msgstr "" -#: netbox/ipam/filtersets.py:92 +#: netbox/ipam/filtersets.py:95 msgid "Import VRF (RD)" msgstr "" -#: netbox/ipam/filtersets.py:97 +#: netbox/ipam/filtersets.py:100 msgid "Exporting VRF" msgstr "" -#: netbox/ipam/filtersets.py:103 +#: netbox/ipam/filtersets.py:106 msgid "Export VRF (RD)" msgstr "" -#: netbox/ipam/filtersets.py:108 +#: netbox/ipam/filtersets.py:111 msgid "Importing L2VPN" msgstr "" -#: netbox/ipam/filtersets.py:114 +#: netbox/ipam/filtersets.py:117 msgid "Importing L2VPN (identifier)" msgstr "" -#: netbox/ipam/filtersets.py:119 +#: netbox/ipam/filtersets.py:122 msgid "Exporting L2VPN" msgstr "" -#: netbox/ipam/filtersets.py:125 +#: netbox/ipam/filtersets.py:128 msgid "Exporting L2VPN (identifier)" msgstr "" -#: netbox/ipam/filtersets.py:155 netbox/ipam/filtersets.py:283 -#: netbox/ipam/forms/model_forms.py:229 netbox/ipam/tables/ip.py:212 +#: netbox/ipam/filtersets.py:158 netbox/ipam/filtersets.py:286 +#: netbox/ipam/forms/model_forms.py:229 netbox/ipam/tables/ip.py:158 #: netbox/templates/ipam/prefix.html:12 msgid "Prefix" msgstr "" -#: netbox/ipam/filtersets.py:159 netbox/ipam/filtersets.py:198 -#: netbox/ipam/filtersets.py:223 +#: netbox/ipam/filtersets.py:162 netbox/ipam/filtersets.py:201 +#: netbox/ipam/filtersets.py:226 msgid "RIR (ID)" msgstr "" -#: netbox/ipam/filtersets.py:165 netbox/ipam/filtersets.py:204 -#: netbox/ipam/filtersets.py:229 +#: netbox/ipam/filtersets.py:168 netbox/ipam/filtersets.py:207 +#: netbox/ipam/filtersets.py:232 msgid "RIR (slug)" msgstr "" -#: netbox/ipam/filtersets.py:287 +#: netbox/ipam/filtersets.py:290 msgid "Within prefix" msgstr "" -#: netbox/ipam/filtersets.py:291 +#: netbox/ipam/filtersets.py:294 msgid "Within and including prefix" msgstr "" -#: netbox/ipam/filtersets.py:295 +#: netbox/ipam/filtersets.py:298 msgid "Prefixes which contain this prefix or IP" msgstr "" -#: netbox/ipam/filtersets.py:306 netbox/ipam/filtersets.py:574 -#: netbox/ipam/forms/bulk_edit.py:343 netbox/ipam/forms/filtersets.py:196 -#: netbox/ipam/forms/filtersets.py:331 +#: netbox/ipam/filtersets.py:309 netbox/ipam/filtersets.py:541 +#: netbox/ipam/forms/bulk_edit.py:327 netbox/ipam/forms/filtersets.py:198 +#: netbox/ipam/forms/filtersets.py:334 msgid "Mask length" msgstr "" -#: netbox/ipam/filtersets.py:375 netbox/vpn/filtersets.py:427 +#: netbox/ipam/filtersets.py:342 netbox/vpn/filtersets.py:427 msgid "VLAN (ID)" msgstr "" -#: netbox/ipam/filtersets.py:379 netbox/vpn/filtersets.py:422 +#: netbox/ipam/filtersets.py:346 netbox/vpn/filtersets.py:422 msgid "VLAN number (1-4094)" msgstr "" -#: netbox/ipam/filtersets.py:473 netbox/ipam/filtersets.py:477 -#: netbox/ipam/filtersets.py:569 netbox/ipam/forms/model_forms.py:496 +#: netbox/ipam/filtersets.py:440 netbox/ipam/filtersets.py:444 +#: netbox/ipam/filtersets.py:536 netbox/ipam/forms/model_forms.py:498 #: netbox/templates/tenancy/contact.html:53 #: netbox/tenancy/forms/bulk_edit.py:113 msgid "Address" msgstr "" -#: netbox/ipam/filtersets.py:481 +#: netbox/ipam/filtersets.py:448 msgid "Ranges which contain this prefix or IP" msgstr "" -#: netbox/ipam/filtersets.py:509 netbox/ipam/filtersets.py:565 +#: netbox/ipam/filtersets.py:476 netbox/ipam/filtersets.py:532 msgid "Parent prefix" msgstr "" -#: netbox/ipam/filtersets.py:618 netbox/ipam/filtersets.py:858 -#: netbox/ipam/filtersets.py:1133 netbox/vpn/filtersets.py:385 -msgid "Virtual machine (name)" -msgstr "" - -#: netbox/ipam/filtersets.py:623 netbox/ipam/filtersets.py:863 -#: netbox/ipam/filtersets.py:1127 netbox/virtualization/filtersets.py:282 -#: netbox/virtualization/filtersets.py:321 netbox/vpn/filtersets.py:390 -msgid "Virtual machine (ID)" -msgstr "" - -#: netbox/ipam/filtersets.py:629 netbox/vpn/filtersets.py:97 -#: netbox/vpn/filtersets.py:396 -msgid "Interface (name)" -msgstr "" - -#: netbox/ipam/filtersets.py:640 netbox/vpn/filtersets.py:108 -#: netbox/vpn/filtersets.py:407 -msgid "VM interface (name)" -msgstr "" - -#: netbox/ipam/filtersets.py:645 netbox/vpn/filtersets.py:113 -msgid "VM interface (ID)" -msgstr "" - -#: netbox/ipam/filtersets.py:650 +#: netbox/ipam/filtersets.py:617 msgid "FHRP group (ID)" msgstr "" -#: netbox/ipam/filtersets.py:654 +#: netbox/ipam/filtersets.py:621 msgid "Is assigned to an interface" msgstr "" -#: netbox/ipam/filtersets.py:658 +#: netbox/ipam/filtersets.py:625 msgid "Is assigned" msgstr "" -#: netbox/ipam/filtersets.py:670 +#: netbox/ipam/filtersets.py:637 msgid "Service (ID)" msgstr "" -#: netbox/ipam/filtersets.py:675 +#: netbox/ipam/filtersets.py:642 msgid "NAT inside IP address (ID)" msgstr "" -#: netbox/ipam/filtersets.py:1043 netbox/ipam/forms/bulk_import.py:322 -msgid "Assigned interface" +#: netbox/ipam/filtersets.py:1001 +msgid "Q-in-Q SVLAN (ID)" msgstr "" -#: netbox/ipam/filtersets.py:1048 +#: netbox/ipam/filtersets.py:1005 +msgid "Q-in-Q SVLAN number (1-4094)" +msgstr "" + +#: netbox/ipam/filtersets.py:1026 msgid "Assigned VM interface" msgstr "" -#: netbox/ipam/filtersets.py:1138 +#: netbox/ipam/filtersets.py:1097 +msgid "VLAN Translation Policy (name)" +msgstr "" + +#: netbox/ipam/filtersets.py:1163 msgid "IP address (ID)" msgstr "" -#: netbox/ipam/filtersets.py:1144 netbox/ipam/models/ip.py:788 +#: netbox/ipam/filtersets.py:1169 netbox/ipam/models/ip.py:788 msgid "IP address" msgstr "" -#: netbox/ipam/filtersets.py:1169 +#: netbox/ipam/filtersets.py:1194 msgid "Primary IPv4 (ID)" msgstr "" -#: netbox/ipam/filtersets.py:1174 +#: netbox/ipam/filtersets.py:1199 msgid "Primary IPv6 (ID)" msgstr "" @@ -9165,471 +9622,445 @@ msgstr "" msgid "Address pattern" msgstr "" -#: netbox/ipam/forms/bulk_edit.py:50 +#: netbox/ipam/forms/bulk_edit.py:53 msgid "Enforce unique space" msgstr "" -#: netbox/ipam/forms/bulk_edit.py:88 +#: netbox/ipam/forms/bulk_edit.py:91 msgid "Is private" msgstr "" -#: netbox/ipam/forms/bulk_edit.py:109 netbox/ipam/forms/bulk_edit.py:138 -#: netbox/ipam/forms/bulk_edit.py:163 netbox/ipam/forms/bulk_import.py:89 -#: netbox/ipam/forms/bulk_import.py:109 netbox/ipam/forms/bulk_import.py:129 -#: netbox/ipam/forms/filtersets.py:110 netbox/ipam/forms/filtersets.py:125 -#: netbox/ipam/forms/filtersets.py:148 netbox/ipam/forms/model_forms.py:96 -#: netbox/ipam/forms/model_forms.py:109 netbox/ipam/forms/model_forms.py:131 -#: netbox/ipam/forms/model_forms.py:149 netbox/ipam/models/asns.py:31 -#: netbox/ipam/models/asns.py:103 netbox/ipam/models/ip.py:71 -#: netbox/ipam/models/ip.py:90 netbox/ipam/tables/asn.py:20 +#: netbox/ipam/forms/bulk_edit.py:112 netbox/ipam/forms/bulk_edit.py:141 +#: netbox/ipam/forms/bulk_edit.py:166 netbox/ipam/forms/bulk_import.py:92 +#: netbox/ipam/forms/bulk_import.py:112 netbox/ipam/forms/bulk_import.py:132 +#: netbox/ipam/forms/filtersets.py:112 netbox/ipam/forms/filtersets.py:127 +#: netbox/ipam/forms/filtersets.py:150 netbox/ipam/forms/model_forms.py:99 +#: netbox/ipam/forms/model_forms.py:112 netbox/ipam/forms/model_forms.py:135 +#: netbox/ipam/forms/model_forms.py:154 netbox/ipam/models/asns.py:31 +#: netbox/ipam/models/asns.py:100 netbox/ipam/models/ip.py:71 +#: netbox/ipam/models/ip.py:87 netbox/ipam/tables/asn.py:20 #: netbox/ipam/tables/asn.py:45 netbox/templates/ipam/aggregate.html:18 #: netbox/templates/ipam/asn.html:27 netbox/templates/ipam/asnrange.html:19 #: netbox/templates/ipam/rir.html:19 msgid "RIR" msgstr "" -#: netbox/ipam/forms/bulk_edit.py:171 +#: netbox/ipam/forms/bulk_edit.py:174 msgid "Date added" msgstr "" -#: netbox/ipam/forms/bulk_edit.py:229 netbox/ipam/forms/model_forms.py:619 -#: netbox/ipam/forms/model_forms.py:666 netbox/ipam/tables/ip.py:251 -#: netbox/templates/ipam/vlan_edit.html:37 +#: netbox/ipam/forms/bulk_edit.py:213 netbox/ipam/forms/model_forms.py:621 +#: netbox/ipam/forms/model_forms.py:668 netbox/ipam/tables/ip.py:200 +#: netbox/templates/ipam/vlan_edit.html:45 #: netbox/templates/ipam/vlangroup.html:27 msgid "VLAN Group" msgstr "" -#: netbox/ipam/forms/bulk_edit.py:234 netbox/ipam/forms/bulk_import.py:185 -#: netbox/ipam/forms/filtersets.py:256 netbox/ipam/forms/model_forms.py:218 -#: netbox/ipam/models/vlans.py:250 netbox/ipam/tables/ip.py:255 -#: netbox/templates/ipam/prefix.html:60 netbox/templates/ipam/vlan.html:12 +#: netbox/ipam/forms/bulk_edit.py:218 netbox/ipam/forms/bulk_import.py:181 +#: netbox/ipam/forms/filtersets.py:259 netbox/ipam/forms/model_forms.py:217 +#: netbox/ipam/models/vlans.py:272 netbox/ipam/tables/ip.py:204 +#: netbox/templates/ipam/prefix.html:56 netbox/templates/ipam/vlan.html:12 #: netbox/templates/ipam/vlan/base.html:6 #: netbox/templates/ipam/vlan_edit.html:10 -#: netbox/templates/wireless/wirelesslan.html:30 +#: netbox/templates/wireless/wirelesslan.html:38 #: netbox/vpn/forms/bulk_import.py:304 netbox/vpn/forms/filtersets.py:284 -#: netbox/vpn/forms/model_forms.py:433 netbox/vpn/forms/model_forms.py:452 -#: netbox/wireless/forms/bulk_edit.py:55 -#: netbox/wireless/forms/bulk_import.py:48 -#: netbox/wireless/forms/model_forms.py:48 netbox/wireless/models.py:102 +#: netbox/vpn/forms/model_forms.py:436 netbox/vpn/forms/model_forms.py:455 +#: netbox/wireless/forms/bulk_edit.py:57 +#: netbox/wireless/forms/bulk_import.py:50 +#: netbox/wireless/forms/model_forms.py:50 netbox/wireless/models.py:102 msgid "VLAN" msgstr "" -#: netbox/ipam/forms/bulk_edit.py:245 +#: netbox/ipam/forms/bulk_edit.py:229 msgid "Prefix length" msgstr "" -#: netbox/ipam/forms/bulk_edit.py:268 netbox/ipam/forms/filtersets.py:241 -#: netbox/templates/ipam/prefix.html:85 +#: netbox/ipam/forms/bulk_edit.py:252 netbox/ipam/forms/filtersets.py:244 +#: netbox/templates/ipam/prefix.html:81 msgid "Is a pool" msgstr "" -#: netbox/ipam/forms/bulk_edit.py:273 netbox/ipam/forms/bulk_edit.py:318 -#: netbox/ipam/forms/filtersets.py:248 netbox/ipam/forms/filtersets.py:293 -#: netbox/ipam/models/ip.py:272 netbox/ipam/models/ip.py:539 +#: netbox/ipam/forms/bulk_edit.py:257 netbox/ipam/forms/bulk_edit.py:302 +#: netbox/ipam/forms/filtersets.py:251 netbox/ipam/forms/filtersets.py:296 +#: netbox/ipam/models/ip.py:256 netbox/ipam/models/ip.py:525 msgid "Treat as fully utilized" msgstr "" -#: netbox/ipam/forms/bulk_edit.py:287 netbox/ipam/forms/filtersets.py:171 +#: netbox/ipam/forms/bulk_edit.py:271 netbox/ipam/forms/filtersets.py:173 +#: netbox/ipam/forms/model_forms.py:232 msgid "VLAN Assignment" msgstr "" -#: netbox/ipam/forms/bulk_edit.py:366 netbox/ipam/models/ip.py:772 +#: netbox/ipam/forms/bulk_edit.py:350 netbox/ipam/models/ip.py:772 msgid "DNS name" msgstr "" -#: netbox/ipam/forms/bulk_edit.py:387 netbox/ipam/forms/bulk_edit.py:534 -#: netbox/ipam/forms/bulk_import.py:418 netbox/ipam/forms/bulk_import.py:493 -#: netbox/ipam/forms/bulk_import.py:519 netbox/ipam/forms/filtersets.py:390 -#: netbox/ipam/forms/filtersets.py:530 netbox/templates/ipam/fhrpgroup.html:22 +#: netbox/ipam/forms/bulk_edit.py:371 netbox/ipam/forms/bulk_edit.py:562 +#: netbox/ipam/forms/bulk_import.py:417 netbox/ipam/forms/bulk_import.py:528 +#: netbox/ipam/forms/bulk_import.py:554 netbox/ipam/forms/filtersets.py:393 +#: netbox/ipam/forms/filtersets.py:582 netbox/templates/ipam/fhrpgroup.html:22 #: netbox/templates/ipam/inc/panels/fhrp_groups.html:24 #: netbox/templates/ipam/service.html:32 #: netbox/templates/ipam/servicetemplate.html:19 msgid "Protocol" msgstr "" -#: netbox/ipam/forms/bulk_edit.py:394 netbox/ipam/forms/filtersets.py:397 +#: netbox/ipam/forms/bulk_edit.py:378 netbox/ipam/forms/filtersets.py:400 #: netbox/ipam/tables/fhrp.py:22 netbox/templates/ipam/fhrpgroup.html:26 msgid "Group ID" msgstr "" -#: netbox/ipam/forms/bulk_edit.py:399 netbox/ipam/forms/filtersets.py:402 -#: netbox/wireless/forms/bulk_edit.py:68 netbox/wireless/forms/bulk_edit.py:115 -#: netbox/wireless/forms/bulk_import.py:62 -#: netbox/wireless/forms/bulk_import.py:65 -#: netbox/wireless/forms/bulk_import.py:104 -#: netbox/wireless/forms/bulk_import.py:107 -#: netbox/wireless/forms/filtersets.py:54 -#: netbox/wireless/forms/filtersets.py:88 +#: netbox/ipam/forms/bulk_edit.py:383 netbox/ipam/forms/filtersets.py:405 +#: netbox/wireless/forms/bulk_edit.py:70 netbox/wireless/forms/bulk_edit.py:118 +#: netbox/wireless/forms/bulk_import.py:64 +#: netbox/wireless/forms/bulk_import.py:67 +#: netbox/wireless/forms/bulk_import.py:109 +#: netbox/wireless/forms/bulk_import.py:112 +#: netbox/wireless/forms/filtersets.py:57 +#: netbox/wireless/forms/filtersets.py:116 msgid "Authentication type" msgstr "" -#: netbox/ipam/forms/bulk_edit.py:404 netbox/ipam/forms/filtersets.py:406 +#: netbox/ipam/forms/bulk_edit.py:388 netbox/ipam/forms/filtersets.py:409 msgid "Authentication key" msgstr "" -#: netbox/ipam/forms/bulk_edit.py:421 netbox/ipam/forms/filtersets.py:383 -#: netbox/ipam/forms/model_forms.py:507 netbox/netbox/navigation/menu.py:386 +#: netbox/ipam/forms/bulk_edit.py:405 netbox/ipam/forms/filtersets.py:386 +#: netbox/ipam/forms/model_forms.py:509 netbox/netbox/navigation/menu.py:407 #: netbox/templates/ipam/fhrpgroup.html:49 #: netbox/templates/wireless/inc/authentication_attrs.html:5 -#: netbox/wireless/forms/bulk_edit.py:91 netbox/wireless/forms/bulk_edit.py:149 -#: netbox/wireless/forms/filtersets.py:36 -#: netbox/wireless/forms/filtersets.py:76 -#: netbox/wireless/forms/model_forms.py:55 -#: netbox/wireless/forms/model_forms.py:171 +#: netbox/wireless/forms/bulk_edit.py:94 netbox/wireless/forms/bulk_edit.py:152 +#: netbox/wireless/forms/filtersets.py:39 +#: netbox/wireless/forms/filtersets.py:104 +#: netbox/wireless/forms/model_forms.py:58 +#: netbox/wireless/forms/model_forms.py:174 msgid "Authentication" msgstr "" -#: netbox/ipam/forms/bulk_edit.py:436 netbox/ipam/forms/model_forms.py:608 -msgid "Scope type" -msgstr "" - -#: netbox/ipam/forms/bulk_edit.py:439 netbox/ipam/forms/bulk_edit.py:453 -#: netbox/ipam/forms/model_forms.py:611 netbox/ipam/forms/model_forms.py:621 -#: netbox/ipam/tables/vlans.py:71 netbox/templates/ipam/vlangroup.html:38 -msgid "Scope" -msgstr "" - -#: netbox/ipam/forms/bulk_edit.py:446 netbox/ipam/models/vlans.py:60 +#: netbox/ipam/forms/bulk_edit.py:430 netbox/ipam/models/vlans.py:62 msgid "VLAN ID ranges" msgstr "" -#: netbox/ipam/forms/bulk_edit.py:525 +#: netbox/ipam/forms/bulk_edit.py:505 netbox/ipam/forms/bulk_import.py:485 +#: netbox/ipam/forms/filtersets.py:557 netbox/ipam/models/vlans.py:232 +#: netbox/ipam/tables/vlans.py:103 +msgid "Q-in-Q role" +msgstr "" + +#: netbox/ipam/forms/bulk_edit.py:522 +msgid "Q-in-Q" +msgstr "" + +#: netbox/ipam/forms/bulk_edit.py:523 msgid "Site & Group" msgstr "" -#: netbox/ipam/forms/bulk_edit.py:539 netbox/ipam/forms/model_forms.py:692 -#: netbox/ipam/forms/model_forms.py:724 netbox/ipam/tables/services.py:19 +#: netbox/ipam/forms/bulk_edit.py:546 netbox/ipam/forms/bulk_import.py:515 +#: netbox/ipam/forms/model_forms.py:716 netbox/ipam/tables/vlans.py:256 +#: netbox/templates/ipam/vlantranslationrule.html:14 +#: netbox/vpn/forms/model_forms.py:322 netbox/vpn/forms/model_forms.py:359 +msgid "Policy" +msgstr "" + +#: netbox/ipam/forms/bulk_edit.py:567 netbox/ipam/forms/model_forms.py:734 +#: netbox/ipam/forms/model_forms.py:766 netbox/ipam/tables/services.py:19 #: netbox/ipam/tables/services.py:49 netbox/templates/ipam/service.html:36 #: netbox/templates/ipam/servicetemplate.html:23 msgid "Ports" msgstr "" -#: netbox/ipam/forms/bulk_import.py:48 +#: netbox/ipam/forms/bulk_import.py:51 msgid "Import route targets" msgstr "" -#: netbox/ipam/forms/bulk_import.py:54 +#: netbox/ipam/forms/bulk_import.py:57 msgid "Export route targets" msgstr "" -#: netbox/ipam/forms/bulk_import.py:92 netbox/ipam/forms/bulk_import.py:112 -#: netbox/ipam/forms/bulk_import.py:132 +#: netbox/ipam/forms/bulk_import.py:95 netbox/ipam/forms/bulk_import.py:115 +#: netbox/ipam/forms/bulk_import.py:135 msgid "Assigned RIR" msgstr "" -#: netbox/ipam/forms/bulk_import.py:182 +#: netbox/ipam/forms/bulk_import.py:178 msgid "VLAN's group (if any)" msgstr "" -#: netbox/ipam/forms/bulk_import.py:308 -msgid "Parent device of assigned interface (if any)" -msgstr "" - -#: netbox/ipam/forms/bulk_import.py:311 netbox/ipam/forms/bulk_import.py:512 -#: netbox/ipam/forms/model_forms.py:718 netbox/virtualization/filtersets.py:288 -#: netbox/virtualization/filtersets.py:327 -#: netbox/virtualization/forms/bulk_edit.py:200 -#: netbox/virtualization/forms/bulk_edit.py:326 -#: netbox/virtualization/forms/bulk_import.py:146 -#: netbox/virtualization/forms/bulk_import.py:207 -#: netbox/virtualization/forms/filtersets.py:212 -#: netbox/virtualization/forms/filtersets.py:248 -#: netbox/virtualization/forms/model_forms.py:288 -#: netbox/vpn/forms/bulk_import.py:93 netbox/vpn/forms/bulk_import.py:290 -msgid "Virtual machine" -msgstr "" - -#: netbox/ipam/forms/bulk_import.py:315 -msgid "Parent VM of assigned interface (if any)" +#: netbox/ipam/forms/bulk_import.py:207 +#: netbox/virtualization/forms/bulk_import.py:80 +#: netbox/wireless/forms/bulk_import.py:83 +msgid "Scope ID" msgstr "" #: netbox/ipam/forms/bulk_import.py:325 -msgid "Is primary" -msgstr "" - -#: netbox/ipam/forms/bulk_import.py:326 msgid "Make this the primary IP for the assigned device" msgstr "" -#: netbox/ipam/forms/bulk_import.py:330 +#: netbox/ipam/forms/bulk_import.py:329 msgid "Is out-of-band" msgstr "" -#: netbox/ipam/forms/bulk_import.py:331 +#: netbox/ipam/forms/bulk_import.py:330 msgid "Designate this as the out-of-band IP address for the assigned device" msgstr "" -#: netbox/ipam/forms/bulk_import.py:371 +#: netbox/ipam/forms/bulk_import.py:370 msgid "No device or virtual machine specified; cannot set as primary IP" msgstr "" -#: netbox/ipam/forms/bulk_import.py:375 +#: netbox/ipam/forms/bulk_import.py:374 msgid "No device specified; cannot set as out-of-band IP" msgstr "" -#: netbox/ipam/forms/bulk_import.py:379 +#: netbox/ipam/forms/bulk_import.py:378 msgid "Cannot set out-of-band IP for virtual machines" msgstr "" -#: netbox/ipam/forms/bulk_import.py:383 +#: netbox/ipam/forms/bulk_import.py:382 msgid "No interface specified; cannot set as primary IP" msgstr "" -#: netbox/ipam/forms/bulk_import.py:387 +#: netbox/ipam/forms/bulk_import.py:386 msgid "No interface specified; cannot set as out-of-band IP" msgstr "" -#: netbox/ipam/forms/bulk_import.py:422 +#: netbox/ipam/forms/bulk_import.py:421 msgid "Auth type" msgstr "" -#: netbox/ipam/forms/bulk_import.py:437 -msgid "Scope type (app & model)" -msgstr "" - -#: netbox/ipam/forms/bulk_import.py:464 +#: netbox/ipam/forms/bulk_import.py:463 msgid "Assigned VLAN group" msgstr "" -#: netbox/ipam/forms/bulk_import.py:495 netbox/ipam/forms/bulk_import.py:521 +#: netbox/ipam/forms/bulk_import.py:495 +msgid "Service VLAN (for Q-in-Q/802.1ad customer VLANs)" +msgstr "" + +#: netbox/ipam/forms/bulk_import.py:518 netbox/ipam/models/vlans.py:343 +msgid "VLAN translation policy" +msgstr "" + +#: netbox/ipam/forms/bulk_import.py:530 netbox/ipam/forms/bulk_import.py:556 msgid "IP protocol" msgstr "" -#: netbox/ipam/forms/bulk_import.py:509 +#: netbox/ipam/forms/bulk_import.py:544 msgid "Required if not assigned to a VM" msgstr "" -#: netbox/ipam/forms/bulk_import.py:516 +#: netbox/ipam/forms/bulk_import.py:551 msgid "Required if not assigned to a device" msgstr "" -#: netbox/ipam/forms/bulk_import.py:541 +#: netbox/ipam/forms/bulk_import.py:576 #, python-brace-format msgid "{ip} is not assigned to this device/VM." msgstr "" -#: netbox/ipam/forms/filtersets.py:47 netbox/ipam/forms/model_forms.py:63 -#: netbox/netbox/navigation/menu.py:189 netbox/vpn/forms/model_forms.py:410 +#: netbox/ipam/forms/filtersets.py:49 netbox/ipam/forms/model_forms.py:66 +#: netbox/netbox/navigation/menu.py:195 netbox/vpn/forms/model_forms.py:413 msgid "Route Targets" msgstr "" -#: netbox/ipam/forms/filtersets.py:53 netbox/ipam/forms/model_forms.py:50 -#: netbox/vpn/forms/filtersets.py:224 netbox/vpn/forms/model_forms.py:397 +#: netbox/ipam/forms/filtersets.py:55 netbox/ipam/forms/model_forms.py:53 +#: netbox/vpn/forms/filtersets.py:224 netbox/vpn/forms/model_forms.py:400 msgid "Import targets" msgstr "" -#: netbox/ipam/forms/filtersets.py:58 netbox/ipam/forms/model_forms.py:55 -#: netbox/vpn/forms/filtersets.py:229 netbox/vpn/forms/model_forms.py:402 +#: netbox/ipam/forms/filtersets.py:60 netbox/ipam/forms/model_forms.py:58 +#: netbox/vpn/forms/filtersets.py:229 netbox/vpn/forms/model_forms.py:405 msgid "Export targets" msgstr "" -#: netbox/ipam/forms/filtersets.py:73 +#: netbox/ipam/forms/filtersets.py:75 msgid "Imported by VRF" msgstr "" -#: netbox/ipam/forms/filtersets.py:78 +#: netbox/ipam/forms/filtersets.py:80 msgid "Exported by VRF" msgstr "" -#: netbox/ipam/forms/filtersets.py:87 netbox/ipam/tables/ip.py:89 +#: netbox/ipam/forms/filtersets.py:89 netbox/ipam/tables/ip.py:35 #: netbox/templates/ipam/rir.html:30 msgid "Private" msgstr "" -#: netbox/ipam/forms/filtersets.py:105 netbox/ipam/forms/filtersets.py:191 -#: netbox/ipam/forms/filtersets.py:272 netbox/ipam/forms/filtersets.py:326 +#: netbox/ipam/forms/filtersets.py:107 netbox/ipam/forms/filtersets.py:193 +#: netbox/ipam/forms/filtersets.py:275 netbox/ipam/forms/filtersets.py:329 msgid "Address family" msgstr "" -#: netbox/ipam/forms/filtersets.py:119 netbox/templates/ipam/asnrange.html:25 +#: netbox/ipam/forms/filtersets.py:121 netbox/templates/ipam/asnrange.html:25 msgid "Range" msgstr "" -#: netbox/ipam/forms/filtersets.py:128 +#: netbox/ipam/forms/filtersets.py:130 msgid "Start" msgstr "" -#: netbox/ipam/forms/filtersets.py:132 +#: netbox/ipam/forms/filtersets.py:134 msgid "End" msgstr "" -#: netbox/ipam/forms/filtersets.py:186 +#: netbox/ipam/forms/filtersets.py:188 msgid "Search within" msgstr "" -#: netbox/ipam/forms/filtersets.py:207 netbox/ipam/forms/filtersets.py:342 +#: netbox/ipam/forms/filtersets.py:209 netbox/ipam/forms/filtersets.py:345 msgid "Present in VRF" msgstr "" -#: netbox/ipam/forms/filtersets.py:311 +#: netbox/ipam/forms/filtersets.py:314 msgid "Device/VM" msgstr "" -#: netbox/ipam/forms/filtersets.py:321 +#: netbox/ipam/forms/filtersets.py:324 msgid "Parent Prefix" msgstr "" -#: netbox/ipam/forms/filtersets.py:347 -msgid "Assigned Device" -msgstr "" - -#: netbox/ipam/forms/filtersets.py:352 -msgid "Assigned VM" -msgstr "" - -#: netbox/ipam/forms/filtersets.py:366 +#: netbox/ipam/forms/filtersets.py:369 msgid "Assigned to an interface" msgstr "" -#: netbox/ipam/forms/filtersets.py:373 netbox/templates/ipam/ipaddress.html:51 +#: netbox/ipam/forms/filtersets.py:376 netbox/templates/ipam/ipaddress.html:51 msgid "DNS Name" msgstr "" -#: netbox/ipam/forms/filtersets.py:416 netbox/ipam/models/vlans.py:251 -#: netbox/ipam/tables/ip.py:176 netbox/ipam/tables/vlans.py:82 -#: netbox/ipam/views.py:971 netbox/netbox/navigation/menu.py:193 -#: netbox/netbox/navigation/menu.py:195 +#: netbox/ipam/forms/filtersets.py:419 netbox/ipam/models/vlans.py:273 +#: netbox/ipam/tables/ip.py:122 netbox/ipam/tables/vlans.py:51 +#: netbox/ipam/views.py:1029 netbox/netbox/navigation/menu.py:199 +#: netbox/netbox/navigation/menu.py:201 msgid "VLANs" msgstr "" -#: netbox/ipam/forms/filtersets.py:457 +#: netbox/ipam/forms/filtersets.py:460 msgid "Contains VLAN ID" msgstr "" -#: netbox/ipam/forms/filtersets.py:513 netbox/ipam/models/vlans.py:192 +#: netbox/ipam/forms/filtersets.py:494 netbox/ipam/models/vlans.py:363 +msgid "Local VLAN ID" +msgstr "" + +#: netbox/ipam/forms/filtersets.py:499 netbox/ipam/models/vlans.py:371 +msgid "Remote VLAN ID" +msgstr "" + +#: netbox/ipam/forms/filtersets.py:509 +msgid "Q-in-Q/802.1ad" +msgstr "" + +#: netbox/ipam/forms/filtersets.py:554 netbox/ipam/models/vlans.py:191 #: netbox/templates/ipam/vlan.html:31 msgid "VLAN ID" msgstr "" -#: netbox/ipam/forms/filtersets.py:556 netbox/ipam/forms/model_forms.py:324 -#: netbox/ipam/forms/model_forms.py:746 netbox/ipam/forms/model_forms.py:772 -#: netbox/ipam/tables/vlans.py:195 -#: netbox/templates/virtualization/virtualdisk.html:21 -#: netbox/templates/virtualization/virtualmachine.html:12 -#: netbox/templates/virtualization/vminterface.html:21 -#: netbox/templates/vpn/tunneltermination.html:25 -#: netbox/virtualization/forms/filtersets.py:197 -#: netbox/virtualization/forms/filtersets.py:242 -#: netbox/virtualization/forms/model_forms.py:220 -#: netbox/virtualization/tables/virtualmachines.py:135 -#: netbox/virtualization/tables/virtualmachines.py:190 netbox/vpn/choices.py:53 -#: netbox/vpn/forms/filtersets.py:293 netbox/vpn/forms/model_forms.py:160 -#: netbox/vpn/forms/model_forms.py:171 netbox/vpn/forms/model_forms.py:273 -#: netbox/vpn/forms/model_forms.py:454 -msgid "Virtual Machine" -msgstr "" - -#: netbox/ipam/forms/model_forms.py:80 +#: netbox/ipam/forms/model_forms.py:83 #: netbox/templates/ipam/routetarget.html:10 msgid "Route Target" msgstr "" -#: netbox/ipam/forms/model_forms.py:114 netbox/ipam/tables/ip.py:117 +#: netbox/ipam/forms/model_forms.py:118 netbox/ipam/tables/ip.py:63 #: netbox/templates/ipam/aggregate.html:11 netbox/templates/ipam/prefix.html:38 msgid "Aggregate" msgstr "" -#: netbox/ipam/forms/model_forms.py:135 netbox/templates/ipam/asnrange.html:12 +#: netbox/ipam/forms/model_forms.py:140 netbox/templates/ipam/asnrange.html:12 msgid "ASN Range" msgstr "" -#: netbox/ipam/forms/model_forms.py:231 -msgid "Site/VLAN Assignment" -msgstr "" - -#: netbox/ipam/forms/model_forms.py:259 netbox/templates/ipam/iprange.html:10 +#: netbox/ipam/forms/model_forms.py:261 netbox/templates/ipam/iprange.html:10 msgid "IP Range" msgstr "" -#: netbox/ipam/forms/model_forms.py:295 netbox/ipam/forms/model_forms.py:325 -#: netbox/ipam/forms/model_forms.py:506 netbox/templates/ipam/fhrpgroup.html:19 +#: netbox/ipam/forms/model_forms.py:297 netbox/ipam/forms/model_forms.py:327 +#: netbox/ipam/forms/model_forms.py:508 netbox/templates/ipam/fhrpgroup.html:19 msgid "FHRP Group" msgstr "" -#: netbox/ipam/forms/model_forms.py:310 +#: netbox/ipam/forms/model_forms.py:312 msgid "Make this the primary IP for the device/VM" msgstr "" -#: netbox/ipam/forms/model_forms.py:314 +#: netbox/ipam/forms/model_forms.py:316 msgid "Make this the out-of-band IP for the device" msgstr "" -#: netbox/ipam/forms/model_forms.py:329 +#: netbox/ipam/forms/model_forms.py:331 msgid "NAT IP (Inside)" msgstr "" -#: netbox/ipam/forms/model_forms.py:391 +#: netbox/ipam/forms/model_forms.py:393 msgid "An IP address can only be assigned to a single object." msgstr "" -#: netbox/ipam/forms/model_forms.py:398 +#: netbox/ipam/forms/model_forms.py:400 msgid "Cannot reassign primary IP address for the parent device/VM" msgstr "" -#: netbox/ipam/forms/model_forms.py:402 +#: netbox/ipam/forms/model_forms.py:404 msgid "Cannot reassign out-of-Band IP address for the parent device" msgstr "" -#: netbox/ipam/forms/model_forms.py:412 +#: netbox/ipam/forms/model_forms.py:414 msgid "" "Only IP addresses assigned to an interface can be designated as primary IPs." msgstr "" -#: netbox/ipam/forms/model_forms.py:420 +#: netbox/ipam/forms/model_forms.py:422 msgid "" "Only IP addresses assigned to a device interface can be designated as the " "out-of-band IP for a device." msgstr "" -#: netbox/ipam/forms/model_forms.py:508 +#: netbox/ipam/forms/model_forms.py:510 msgid "Virtual IP Address" msgstr "" -#: netbox/ipam/forms/model_forms.py:593 +#: netbox/ipam/forms/model_forms.py:595 msgid "Assignment already exists" msgstr "" -#: netbox/ipam/forms/model_forms.py:602 netbox/templates/ipam/vlangroup.html:42 +#: netbox/ipam/forms/model_forms.py:604 netbox/templates/ipam/vlangroup.html:42 msgid "VLAN IDs" msgstr "" -#: netbox/ipam/forms/model_forms.py:620 +#: netbox/ipam/forms/model_forms.py:622 msgid "Child VLANs" msgstr "" -#: netbox/ipam/forms/model_forms.py:697 netbox/ipam/forms/model_forms.py:729 +#: netbox/ipam/forms/model_forms.py:722 +#: netbox/templates/ipam/vlantranslationrule.html:11 +msgid "VLAN Translation Rule" +msgstr "" + +#: netbox/ipam/forms/model_forms.py:739 netbox/ipam/forms/model_forms.py:771 msgid "" "Comma-separated list of one or more port numbers. A range may be specified " "using a hyphen." msgstr "" -#: netbox/ipam/forms/model_forms.py:702 +#: netbox/ipam/forms/model_forms.py:744 #: netbox/templates/ipam/servicetemplate.html:12 msgid "Service Template" msgstr "" -#: netbox/ipam/forms/model_forms.py:749 +#: netbox/ipam/forms/model_forms.py:791 msgid "Port(s)" msgstr "" -#: netbox/ipam/forms/model_forms.py:750 netbox/ipam/forms/model_forms.py:778 -#: netbox/templates/ipam/service.html:21 -msgid "Service" -msgstr "" - -#: netbox/ipam/forms/model_forms.py:763 +#: netbox/ipam/forms/model_forms.py:805 msgid "Service template" msgstr "" -#: netbox/ipam/forms/model_forms.py:775 +#: netbox/ipam/forms/model_forms.py:817 msgid "From Template" msgstr "" -#: netbox/ipam/forms/model_forms.py:776 +#: netbox/ipam/forms/model_forms.py:818 msgid "Custom" msgstr "" -#: netbox/ipam/forms/model_forms.py:806 +#: netbox/ipam/forms/model_forms.py:848 msgid "" "Must specify name, protocol, and port(s) if not using a service template." msgstr "" @@ -9646,28 +10077,28 @@ msgstr "" msgid "ASN ranges" msgstr "" -#: netbox/ipam/models/asns.py:72 +#: netbox/ipam/models/asns.py:69 #, python-brace-format msgid "Starting ASN ({start}) must be lower than ending ASN ({end})." msgstr "" -#: netbox/ipam/models/asns.py:104 +#: netbox/ipam/models/asns.py:101 msgid "Regional Internet Registry responsible for this AS number space" msgstr "" -#: netbox/ipam/models/asns.py:109 +#: netbox/ipam/models/asns.py:106 msgid "16- or 32-bit autonomous system number" msgstr "" -#: netbox/ipam/models/fhrp.py:22 +#: netbox/ipam/models/fhrp.py:21 msgid "group ID" msgstr "" -#: netbox/ipam/models/fhrp.py:30 netbox/ipam/models/services.py:22 +#: netbox/ipam/models/fhrp.py:29 netbox/ipam/models/services.py:21 msgid "protocol" msgstr "" -#: netbox/ipam/models/fhrp.py:38 netbox/wireless/models.py:28 +#: netbox/ipam/models/fhrp.py:38 netbox/wireless/models.py:29 msgid "authentication type" msgstr "" @@ -9683,11 +10114,11 @@ msgstr "" msgid "FHRP groups" msgstr "" -#: netbox/ipam/models/fhrp.py:113 +#: netbox/ipam/models/fhrp.py:110 msgid "FHRP group assignment" msgstr "" -#: netbox/ipam/models/fhrp.py:114 +#: netbox/ipam/models/fhrp.py:111 msgid "FHRP group assignments" msgstr "" @@ -9699,165 +10130,160 @@ msgstr "" msgid "IP space managed by this RIR is considered private" msgstr "" -#: netbox/ipam/models/ip.py:72 netbox/netbox/navigation/menu.py:182 +#: netbox/ipam/models/ip.py:72 netbox/netbox/navigation/menu.py:188 msgid "RIRs" msgstr "" -#: netbox/ipam/models/ip.py:84 +#: netbox/ipam/models/ip.py:81 msgid "IPv4 or IPv6 network" msgstr "" -#: netbox/ipam/models/ip.py:91 +#: netbox/ipam/models/ip.py:88 msgid "Regional Internet Registry responsible for this IP space" msgstr "" -#: netbox/ipam/models/ip.py:101 +#: netbox/ipam/models/ip.py:98 msgid "date added" msgstr "" -#: netbox/ipam/models/ip.py:115 +#: netbox/ipam/models/ip.py:112 msgid "aggregate" msgstr "" -#: netbox/ipam/models/ip.py:116 +#: netbox/ipam/models/ip.py:113 msgid "aggregates" msgstr "" -#: netbox/ipam/models/ip.py:132 +#: netbox/ipam/models/ip.py:126 msgid "Cannot create aggregate with /0 mask." msgstr "" -#: netbox/ipam/models/ip.py:144 +#: netbox/ipam/models/ip.py:138 #, python-brace-format msgid "" "Aggregates cannot overlap. {prefix} is already covered by an existing " "aggregate ({aggregate})." msgstr "" -#: netbox/ipam/models/ip.py:158 +#: netbox/ipam/models/ip.py:152 #, python-brace-format msgid "" "Prefixes cannot overlap aggregates. {prefix} covers an existing aggregate " "({aggregate})." msgstr "" -#: netbox/ipam/models/ip.py:200 netbox/ipam/models/ip.py:737 -#: netbox/vpn/models/tunnels.py:114 -msgid "role" -msgstr "" - -#: netbox/ipam/models/ip.py:201 +#: netbox/ipam/models/ip.py:195 msgid "roles" msgstr "" -#: netbox/ipam/models/ip.py:217 netbox/ipam/models/ip.py:293 +#: netbox/ipam/models/ip.py:208 netbox/ipam/models/ip.py:277 msgid "prefix" msgstr "" -#: netbox/ipam/models/ip.py:218 +#: netbox/ipam/models/ip.py:209 msgid "IPv4 or IPv6 network with mask" msgstr "" -#: netbox/ipam/models/ip.py:254 +#: netbox/ipam/models/ip.py:238 msgid "Operational status of this prefix" msgstr "" -#: netbox/ipam/models/ip.py:262 +#: netbox/ipam/models/ip.py:246 msgid "The primary function of this prefix" msgstr "" -#: netbox/ipam/models/ip.py:265 +#: netbox/ipam/models/ip.py:249 msgid "is a pool" msgstr "" -#: netbox/ipam/models/ip.py:267 +#: netbox/ipam/models/ip.py:251 msgid "All IP addresses within this prefix are considered usable" msgstr "" -#: netbox/ipam/models/ip.py:270 netbox/ipam/models/ip.py:537 +#: netbox/ipam/models/ip.py:254 netbox/ipam/models/ip.py:523 msgid "mark utilized" msgstr "" -#: netbox/ipam/models/ip.py:294 +#: netbox/ipam/models/ip.py:278 msgid "prefixes" msgstr "" -#: netbox/ipam/models/ip.py:317 +#: netbox/ipam/models/ip.py:298 msgid "Cannot create prefix with /0 mask." msgstr "" -#: netbox/ipam/models/ip.py:324 netbox/ipam/models/ip.py:874 +#: netbox/ipam/models/ip.py:305 netbox/ipam/models/ip.py:871 #, python-brace-format msgid "VRF {vrf}" msgstr "" -#: netbox/ipam/models/ip.py:324 netbox/ipam/models/ip.py:874 +#: netbox/ipam/models/ip.py:305 netbox/ipam/models/ip.py:871 msgid "global table" msgstr "" -#: netbox/ipam/models/ip.py:326 +#: netbox/ipam/models/ip.py:307 #, python-brace-format msgid "Duplicate prefix found in {table}: {prefix}" msgstr "" -#: netbox/ipam/models/ip.py:495 +#: netbox/ipam/models/ip.py:481 msgid "start address" msgstr "" -#: netbox/ipam/models/ip.py:496 netbox/ipam/models/ip.py:500 -#: netbox/ipam/models/ip.py:712 +#: netbox/ipam/models/ip.py:482 netbox/ipam/models/ip.py:486 +#: netbox/ipam/models/ip.py:711 msgid "IPv4 or IPv6 address (with mask)" msgstr "" -#: netbox/ipam/models/ip.py:499 +#: netbox/ipam/models/ip.py:485 msgid "end address" msgstr "" -#: netbox/ipam/models/ip.py:526 +#: netbox/ipam/models/ip.py:512 msgid "Operational status of this range" msgstr "" -#: netbox/ipam/models/ip.py:534 +#: netbox/ipam/models/ip.py:520 msgid "The primary function of this range" msgstr "" -#: netbox/ipam/models/ip.py:548 +#: netbox/ipam/models/ip.py:534 msgid "IP range" msgstr "" -#: netbox/ipam/models/ip.py:549 +#: netbox/ipam/models/ip.py:535 msgid "IP ranges" msgstr "" -#: netbox/ipam/models/ip.py:565 +#: netbox/ipam/models/ip.py:548 msgid "Starting and ending IP address versions must match" msgstr "" -#: netbox/ipam/models/ip.py:571 +#: netbox/ipam/models/ip.py:554 msgid "Starting and ending IP address masks must match" msgstr "" -#: netbox/ipam/models/ip.py:578 +#: netbox/ipam/models/ip.py:561 #, python-brace-format msgid "" "Ending address must be greater than the starting address ({start_address})" msgstr "" -#: netbox/ipam/models/ip.py:590 +#: netbox/ipam/models/ip.py:589 #, python-brace-format msgid "Defined addresses overlap with range {overlapping_range} in VRF {vrf}" msgstr "" -#: netbox/ipam/models/ip.py:599 +#: netbox/ipam/models/ip.py:598 #, python-brace-format msgid "Defined range exceeds maximum supported size ({max_size})" msgstr "" -#: netbox/ipam/models/ip.py:711 netbox/tenancy/models/contacts.py:82 +#: netbox/ipam/models/ip.py:710 netbox/tenancy/models/contacts.py:77 msgid "address" msgstr "" -#: netbox/ipam/models/ip.py:734 +#: netbox/ipam/models/ip.py:733 msgid "The operational status of this IP" msgstr "" @@ -9877,167 +10303,188 @@ msgstr "" msgid "Hostname or FQDN (not case-sensitive)" msgstr "" -#: netbox/ipam/models/ip.py:789 netbox/ipam/models/services.py:94 +#: netbox/ipam/models/ip.py:789 netbox/ipam/models/services.py:90 msgid "IP addresses" msgstr "" -#: netbox/ipam/models/ip.py:845 +#: netbox/ipam/models/ip.py:842 msgid "Cannot create IP address with /0 mask." msgstr "" -#: netbox/ipam/models/ip.py:851 +#: netbox/ipam/models/ip.py:848 #, python-brace-format msgid "{ip} is a network ID, which may not be assigned to an interface." msgstr "" -#: netbox/ipam/models/ip.py:862 +#: netbox/ipam/models/ip.py:859 #, python-brace-format msgid "{ip} is a broadcast address, which may not be assigned to an interface." msgstr "" -#: netbox/ipam/models/ip.py:876 +#: netbox/ipam/models/ip.py:873 #, python-brace-format msgid "Duplicate IP address found in {table}: {ipaddress}" msgstr "" -#: netbox/ipam/models/ip.py:897 +#: netbox/ipam/models/ip.py:896 msgid "" "Cannot reassign IP address while it is designated as the primary IP for the " "parent object" msgstr "" -#: netbox/ipam/models/ip.py:903 +#: netbox/ipam/models/ip.py:902 msgid "Only IPv6 addresses can be assigned SLAAC status" msgstr "" -#: netbox/ipam/models/services.py:33 +#: netbox/ipam/models/services.py:32 msgid "port numbers" msgstr "" -#: netbox/ipam/models/services.py:59 +#: netbox/ipam/models/services.py:58 msgid "service template" msgstr "" -#: netbox/ipam/models/services.py:60 +#: netbox/ipam/models/services.py:59 msgid "service templates" msgstr "" -#: netbox/ipam/models/services.py:95 +#: netbox/ipam/models/services.py:91 msgid "The specific IP addresses (if any) to which this service is bound" msgstr "" -#: netbox/ipam/models/services.py:102 +#: netbox/ipam/models/services.py:98 msgid "service" msgstr "" -#: netbox/ipam/models/services.py:103 +#: netbox/ipam/models/services.py:99 msgid "services" msgstr "" -#: netbox/ipam/models/services.py:117 +#: netbox/ipam/models/services.py:110 msgid "" "A service cannot be associated with both a device and a virtual machine." msgstr "" -#: netbox/ipam/models/services.py:119 +#: netbox/ipam/models/services.py:112 msgid "A service must be associated with either a device or a virtual machine." msgstr "" -#: netbox/ipam/models/vlans.py:85 +#: netbox/ipam/models/vlans.py:87 msgid "VLAN groups" msgstr "" -#: netbox/ipam/models/vlans.py:95 +#: netbox/ipam/models/vlans.py:94 msgid "Cannot set scope_type without scope_id." msgstr "" -#: netbox/ipam/models/vlans.py:97 +#: netbox/ipam/models/vlans.py:96 msgid "Cannot set scope_id without scope_type." msgstr "" -#: netbox/ipam/models/vlans.py:105 +#: netbox/ipam/models/vlans.py:104 #, python-brace-format msgid "Starting VLAN ID in range ({value}) cannot be less than {minimum}" msgstr "" -#: netbox/ipam/models/vlans.py:111 +#: netbox/ipam/models/vlans.py:110 #, python-brace-format msgid "Ending VLAN ID in range ({value}) cannot exceed {maximum}" msgstr "" -#: netbox/ipam/models/vlans.py:118 +#: netbox/ipam/models/vlans.py:117 #, python-brace-format msgid "" "Ending VLAN ID in range must be greater than or equal to the starting VLAN " "ID ({range})" msgstr "" -#: netbox/ipam/models/vlans.py:124 +#: netbox/ipam/models/vlans.py:123 msgid "Ranges cannot overlap." msgstr "" -#: netbox/ipam/models/vlans.py:181 +#: netbox/ipam/models/vlans.py:180 msgid "The specific site to which this VLAN is assigned (if any)" msgstr "" -#: netbox/ipam/models/vlans.py:189 +#: netbox/ipam/models/vlans.py:188 msgid "VLAN group (optional)" msgstr "" -#: netbox/ipam/models/vlans.py:197 +#: netbox/ipam/models/vlans.py:196 netbox/ipam/models/vlans.py:368 +#: netbox/ipam/models/vlans.py:376 msgid "Numeric VLAN ID (1-4094)" msgstr "" -#: netbox/ipam/models/vlans.py:215 +#: netbox/ipam/models/vlans.py:214 msgid "Operational status of this VLAN" msgstr "" -#: netbox/ipam/models/vlans.py:223 +#: netbox/ipam/models/vlans.py:222 msgid "The primary function of this VLAN" msgstr "" -#: netbox/ipam/models/vlans.py:266 +#: netbox/ipam/models/vlans.py:237 +msgid "Customer/service VLAN designation (for Q-in-Q/IEEE 802.1ad)" +msgstr "" + +#: netbox/ipam/models/vlans.py:285 #, python-brace-format msgid "" "VLAN is assigned to group {group} (scope: {scope}); cannot also assign to " "site {site}." msgstr "" -#: netbox/ipam/models/vlans.py:275 +#: netbox/ipam/models/vlans.py:294 #, python-brace-format msgid "VID must be in ranges {ranges} for VLANs in group {group}" msgstr "" -#: netbox/ipam/models/vrfs.py:30 +#: netbox/ipam/models/vlans.py:301 +msgid "Only Q-in-Q customer VLANs maybe assigned to a service VLAN." +msgstr "" + +#: netbox/ipam/models/vlans.py:307 +msgid "A Q-in-Q customer VLAN must be assigned to a service VLAN." +msgstr "" + +#: netbox/ipam/models/vlans.py:344 +msgid "VLAN translation policies" +msgstr "" + +#: netbox/ipam/models/vlans.py:385 +msgid "VLAN translation rule" +msgstr "" + +#: netbox/ipam/models/vrfs.py:29 msgid "route distinguisher" msgstr "" -#: netbox/ipam/models/vrfs.py:31 +#: netbox/ipam/models/vrfs.py:30 msgid "Unique route distinguisher (as defined in RFC 4364)" msgstr "" -#: netbox/ipam/models/vrfs.py:42 +#: netbox/ipam/models/vrfs.py:41 msgid "enforce unique space" msgstr "" -#: netbox/ipam/models/vrfs.py:43 +#: netbox/ipam/models/vrfs.py:42 msgid "Prevent duplicate prefixes/IP addresses within this VRF" msgstr "" -#: netbox/ipam/models/vrfs.py:63 netbox/netbox/navigation/menu.py:186 -#: netbox/netbox/navigation/menu.py:188 +#: netbox/ipam/models/vrfs.py:62 netbox/netbox/navigation/menu.py:192 +#: netbox/netbox/navigation/menu.py:194 msgid "VRFs" msgstr "" -#: netbox/ipam/models/vrfs.py:82 +#: netbox/ipam/models/vrfs.py:78 msgid "Route target value (formatted in accordance with RFC 4360)" msgstr "" -#: netbox/ipam/models/vrfs.py:94 +#: netbox/ipam/models/vrfs.py:91 msgid "route target" msgstr "" -#: netbox/ipam/models/vrfs.py:95 +#: netbox/ipam/models/vrfs.py:92 msgid "route targets" msgstr "" @@ -10053,84 +10500,101 @@ msgstr "" msgid "Provider Count" msgstr "" -#: netbox/ipam/tables/ip.py:95 netbox/netbox/navigation/menu.py:179 -#: netbox/netbox/navigation/menu.py:181 +#: netbox/ipam/tables/ip.py:41 netbox/netbox/navigation/menu.py:185 +#: netbox/netbox/navigation/menu.py:187 msgid "Aggregates" msgstr "" -#: netbox/ipam/tables/ip.py:125 +#: netbox/ipam/tables/ip.py:71 msgid "Added" msgstr "" -#: netbox/ipam/tables/ip.py:128 netbox/ipam/tables/ip.py:166 -#: netbox/ipam/tables/vlans.py:142 netbox/ipam/views.py:346 -#: netbox/netbox/navigation/menu.py:165 netbox/netbox/navigation/menu.py:167 -#: netbox/templates/ipam/vlan.html:84 +#: netbox/ipam/tables/ip.py:74 netbox/ipam/tables/ip.py:112 +#: netbox/ipam/tables/vlans.py:118 netbox/ipam/views.py:373 +#: netbox/netbox/navigation/menu.py:171 netbox/netbox/navigation/menu.py:173 +#: netbox/templates/ipam/vlan.html:100 msgid "Prefixes" msgstr "" -#: netbox/ipam/tables/ip.py:131 netbox/ipam/tables/ip.py:270 -#: netbox/ipam/tables/ip.py:324 netbox/ipam/tables/vlans.py:86 +#: netbox/ipam/tables/ip.py:77 netbox/ipam/tables/ip.py:219 +#: netbox/ipam/tables/ip.py:274 netbox/ipam/tables/vlans.py:55 #: netbox/templates/dcim/device.html:260 #: netbox/templates/ipam/aggregate.html:24 -#: netbox/templates/ipam/iprange.html:29 netbox/templates/ipam/prefix.html:106 +#: netbox/templates/ipam/iprange.html:29 netbox/templates/ipam/prefix.html:102 msgid "Utilization" msgstr "" -#: netbox/ipam/tables/ip.py:171 netbox/netbox/navigation/menu.py:161 +#: netbox/ipam/tables/ip.py:117 netbox/netbox/navigation/menu.py:167 msgid "IP Ranges" msgstr "" -#: netbox/ipam/tables/ip.py:221 +#: netbox/ipam/tables/ip.py:167 msgid "Prefix (Flat)" msgstr "" -#: netbox/ipam/tables/ip.py:225 +#: netbox/ipam/tables/ip.py:171 msgid "Depth" msgstr "" -#: netbox/ipam/tables/ip.py:262 +#: netbox/ipam/tables/ip.py:191 netbox/ipam/tables/vlans.py:37 +#: netbox/virtualization/tables/clusters.py:77 +#: netbox/wireless/tables/wirelesslan.py:55 +msgid "Scope Type" +msgstr "" + +#: netbox/ipam/tables/ip.py:211 msgid "Pool" msgstr "" -#: netbox/ipam/tables/ip.py:266 netbox/ipam/tables/ip.py:320 +#: netbox/ipam/tables/ip.py:215 netbox/ipam/tables/ip.py:270 msgid "Marked Utilized" msgstr "" -#: netbox/ipam/tables/ip.py:304 +#: netbox/ipam/tables/ip.py:254 msgid "Start address" msgstr "" -#: netbox/ipam/tables/ip.py:383 +#: netbox/ipam/tables/ip.py:333 msgid "NAT (Inside)" msgstr "" -#: netbox/ipam/tables/ip.py:388 +#: netbox/ipam/tables/ip.py:338 msgid "NAT (Outside)" msgstr "" -#: netbox/ipam/tables/ip.py:393 +#: netbox/ipam/tables/ip.py:343 msgid "Assigned" msgstr "" -#: netbox/ipam/tables/ip.py:429 netbox/templates/vpn/l2vpntermination.html:16 +#: netbox/ipam/tables/ip.py:379 netbox/templates/vpn/l2vpntermination.html:16 #: netbox/vpn/forms/filtersets.py:240 msgid "Assigned Object" msgstr "" -#: netbox/ipam/tables/vlans.py:68 -msgid "Scope Type" -msgstr "" - -#: netbox/ipam/tables/vlans.py:76 +#: netbox/ipam/tables/vlans.py:45 msgid "VID Ranges" msgstr "" -#: netbox/ipam/tables/vlans.py:111 netbox/ipam/tables/vlans.py:214 +#: netbox/ipam/tables/vlans.py:80 netbox/ipam/tables/vlans.py:190 #: netbox/templates/dcim/inc/interface_vlans_table.html:4 msgid "VID" msgstr "" +#: netbox/ipam/tables/vlans.py:237 +#: netbox/templates/ipam/vlantranslationpolicy.html:22 +msgid "Rules" +msgstr "" + +#: netbox/ipam/tables/vlans.py:260 +#: netbox/templates/ipam/vlantranslationrule.html:18 +msgid "Local VID" +msgstr "" + +#: netbox/ipam/tables/vlans.py:264 +#: netbox/templates/ipam/vlantranslationrule.html:22 +msgid "Remote VID" +msgstr "" + #: netbox/ipam/tables/vrfs.py:30 msgid "RD" msgstr "" @@ -10168,23 +10632,23 @@ msgid "" "are allowed in DNS names" msgstr "" -#: netbox/ipam/views.py:533 +#: netbox/ipam/views.py:570 msgid "Child Prefixes" msgstr "" -#: netbox/ipam/views.py:569 +#: netbox/ipam/views.py:606 msgid "Child Ranges" msgstr "" -#: netbox/ipam/views.py:898 +#: netbox/ipam/views.py:951 msgid "Related IPs" msgstr "" -#: netbox/ipam/views.py:1127 +#: netbox/ipam/views.py:1308 msgid "Device Interfaces" msgstr "" -#: netbox/ipam/views.py:1145 +#: netbox/ipam/views.py:1326 msgid "VM Interfaces" msgstr "" @@ -10230,90 +10694,108 @@ msgstr "" msgid "Invalid permission {permission} for model {model}" msgstr "" -#: netbox/netbox/choices.py:49 +#: netbox/netbox/choices.py:51 msgid "Dark Red" msgstr "" -#: netbox/netbox/choices.py:52 +#: netbox/netbox/choices.py:54 msgid "Rose" msgstr "" -#: netbox/netbox/choices.py:53 +#: netbox/netbox/choices.py:55 msgid "Fuchsia" msgstr "" -#: netbox/netbox/choices.py:55 +#: netbox/netbox/choices.py:57 msgid "Dark Purple" msgstr "" -#: netbox/netbox/choices.py:58 +#: netbox/netbox/choices.py:60 msgid "Light Blue" msgstr "" -#: netbox/netbox/choices.py:61 +#: netbox/netbox/choices.py:63 msgid "Aqua" msgstr "" -#: netbox/netbox/choices.py:62 +#: netbox/netbox/choices.py:64 msgid "Dark Green" msgstr "" -#: netbox/netbox/choices.py:64 +#: netbox/netbox/choices.py:66 msgid "Light Green" msgstr "" -#: netbox/netbox/choices.py:65 +#: netbox/netbox/choices.py:67 msgid "Lime" msgstr "" -#: netbox/netbox/choices.py:67 +#: netbox/netbox/choices.py:69 msgid "Amber" msgstr "" -#: netbox/netbox/choices.py:69 +#: netbox/netbox/choices.py:71 msgid "Dark Orange" msgstr "" -#: netbox/netbox/choices.py:70 +#: netbox/netbox/choices.py:72 msgid "Brown" msgstr "" -#: netbox/netbox/choices.py:71 +#: netbox/netbox/choices.py:73 msgid "Light Grey" msgstr "" -#: netbox/netbox/choices.py:72 +#: netbox/netbox/choices.py:74 msgid "Grey" msgstr "" -#: netbox/netbox/choices.py:73 +#: netbox/netbox/choices.py:75 msgid "Dark Grey" msgstr "" -#: netbox/netbox/choices.py:128 +#: netbox/netbox/choices.py:130 msgid "Direct" msgstr "" -#: netbox/netbox/choices.py:129 +#: netbox/netbox/choices.py:131 msgid "Upload" msgstr "" -#: netbox/netbox/choices.py:141 netbox/netbox/choices.py:155 +#: netbox/netbox/choices.py:143 netbox/netbox/choices.py:157 msgid "Auto-detect" msgstr "" -#: netbox/netbox/choices.py:156 +#: netbox/netbox/choices.py:158 msgid "Comma" msgstr "" -#: netbox/netbox/choices.py:157 +#: netbox/netbox/choices.py:159 msgid "Semicolon" msgstr "" -#: netbox/netbox/choices.py:158 +#: netbox/netbox/choices.py:160 msgid "Tab" msgstr "" +#: netbox/netbox/choices.py:193 netbox/templates/dcim/device.html:327 +#: netbox/templates/dcim/rack.html:107 +msgid "Kilograms" +msgstr "" + +#: netbox/netbox/choices.py:194 +msgid "Grams" +msgstr "" + +#: netbox/netbox/choices.py:195 netbox/templates/dcim/device.html:328 +#: netbox/templates/dcim/rack.html:108 +msgid "Pounds" +msgstr "" + +#: netbox/netbox/choices.py:196 +msgid "Ounces" +msgstr "" + #: netbox/netbox/config/__init__.py:67 #, python-brace-format msgid "Invalid configuration parameter: {item}" @@ -10596,6 +11078,26 @@ msgstr "" msgid "{class_name} must implement a sync_data() method." msgstr "" +#: netbox/netbox/models/mixins.py:22 +msgid "weight unit" +msgstr "" + +#: netbox/netbox/models/mixins.py:52 +msgid "Must specify a unit when setting a weight" +msgstr "" + +#: netbox/netbox/models/mixins.py:57 +msgid "distance" +msgstr "" + +#: netbox/netbox/models/mixins.py:64 +msgid "distance unit" +msgstr "" + +#: netbox/netbox/models/mixins.py:99 +msgid "Must specify a unit when setting a distance" +msgstr "" + #: netbox/netbox/navigation/menu.py:11 msgid "Organization" msgstr "" @@ -10655,174 +11157,199 @@ msgstr "" msgid "Inventory Item Roles" msgstr "" -#: netbox/netbox/navigation/menu.py:111 netbox/netbox/navigation/menu.py:115 +#: netbox/netbox/navigation/menu.py:110 +#: netbox/templates/dcim/interface.html:413 +#: netbox/templates/virtualization/vminterface.html:118 +msgid "MAC Addresses" +msgstr "" + +#: netbox/netbox/navigation/menu.py:117 netbox/netbox/navigation/menu.py:121 +#: netbox/templates/dcim/interface.html:182 msgid "Connections" msgstr "" -#: netbox/netbox/navigation/menu.py:117 +#: netbox/netbox/navigation/menu.py:123 msgid "Cables" msgstr "" -#: netbox/netbox/navigation/menu.py:118 +#: netbox/netbox/navigation/menu.py:124 msgid "Wireless Links" msgstr "" -#: netbox/netbox/navigation/menu.py:121 +#: netbox/netbox/navigation/menu.py:127 msgid "Interface Connections" msgstr "" -#: netbox/netbox/navigation/menu.py:126 +#: netbox/netbox/navigation/menu.py:132 msgid "Console Connections" msgstr "" -#: netbox/netbox/navigation/menu.py:131 +#: netbox/netbox/navigation/menu.py:137 msgid "Power Connections" msgstr "" -#: netbox/netbox/navigation/menu.py:147 +#: netbox/netbox/navigation/menu.py:153 msgid "Wireless LAN Groups" msgstr "" -#: netbox/netbox/navigation/menu.py:168 +#: netbox/netbox/navigation/menu.py:174 msgid "Prefix & VLAN Roles" msgstr "" -#: netbox/netbox/navigation/menu.py:174 +#: netbox/netbox/navigation/menu.py:180 msgid "ASN Ranges" msgstr "" -#: netbox/netbox/navigation/menu.py:196 +#: netbox/netbox/navigation/menu.py:202 msgid "VLAN Groups" msgstr "" #: netbox/netbox/navigation/menu.py:203 +msgid "VLAN Translation Policies" +msgstr "" + +#: netbox/netbox/navigation/menu.py:204 +#: netbox/templates/ipam/vlantranslationpolicy.html:46 +msgid "VLAN Translation Rules" +msgstr "" + +#: netbox/netbox/navigation/menu.py:211 msgid "Service Templates" msgstr "" -#: netbox/netbox/navigation/menu.py:204 netbox/templates/dcim/device.html:302 +#: netbox/netbox/navigation/menu.py:212 netbox/templates/dcim/device.html:302 #: netbox/templates/ipam/ipaddress.html:118 #: netbox/templates/virtualization/virtualmachine.html:154 msgid "Services" msgstr "" -#: netbox/netbox/navigation/menu.py:211 +#: netbox/netbox/navigation/menu.py:219 msgid "VPN" msgstr "" -#: netbox/netbox/navigation/menu.py:215 netbox/netbox/navigation/menu.py:217 +#: netbox/netbox/navigation/menu.py:223 netbox/netbox/navigation/menu.py:225 #: netbox/vpn/tables/tunnels.py:24 msgid "Tunnels" msgstr "" -#: netbox/netbox/navigation/menu.py:218 netbox/templates/vpn/tunnelgroup.html:8 +#: netbox/netbox/navigation/menu.py:226 netbox/templates/vpn/tunnelgroup.html:8 msgid "Tunnel Groups" msgstr "" -#: netbox/netbox/navigation/menu.py:219 +#: netbox/netbox/navigation/menu.py:227 msgid "Tunnel Terminations" msgstr "" -#: netbox/netbox/navigation/menu.py:223 netbox/netbox/navigation/menu.py:225 +#: netbox/netbox/navigation/menu.py:231 netbox/netbox/navigation/menu.py:233 #: netbox/vpn/models/l2vpn.py:64 msgid "L2VPNs" msgstr "" -#: netbox/netbox/navigation/menu.py:226 netbox/templates/vpn/l2vpn.html:56 -#: netbox/templates/vpn/tunnel.html:72 netbox/vpn/tables/tunnels.py:58 -msgid "Terminations" -msgstr "" - -#: netbox/netbox/navigation/menu.py:232 +#: netbox/netbox/navigation/menu.py:240 msgid "IKE Proposals" msgstr "" -#: netbox/netbox/navigation/menu.py:233 +#: netbox/netbox/navigation/menu.py:241 #: netbox/templates/vpn/ikeproposal.html:41 msgid "IKE Policies" msgstr "" -#: netbox/netbox/navigation/menu.py:234 +#: netbox/netbox/navigation/menu.py:242 msgid "IPSec Proposals" msgstr "" -#: netbox/netbox/navigation/menu.py:235 +#: netbox/netbox/navigation/menu.py:243 #: netbox/templates/vpn/ipsecproposal.html:37 msgid "IPSec Policies" msgstr "" -#: netbox/netbox/navigation/menu.py:236 netbox/templates/vpn/ikepolicy.html:38 +#: netbox/netbox/navigation/menu.py:244 netbox/templates/vpn/ikepolicy.html:38 #: netbox/templates/vpn/ipsecpolicy.html:25 msgid "IPSec Profiles" msgstr "" -#: netbox/netbox/navigation/menu.py:251 +#: netbox/netbox/navigation/menu.py:259 #: netbox/templates/virtualization/virtualmachine.html:174 #: netbox/templates/virtualization/virtualmachine/base.html:32 #: netbox/templates/virtualization/virtualmachine_list.html:21 -#: netbox/virtualization/tables/virtualmachines.py:104 -#: netbox/virtualization/views.py:386 +#: netbox/virtualization/tables/virtualmachines.py:74 +#: netbox/virtualization/views.py:405 msgid "Virtual Disks" msgstr "" -#: netbox/netbox/navigation/menu.py:258 +#: netbox/netbox/navigation/menu.py:266 msgid "Cluster Types" msgstr "" -#: netbox/netbox/navigation/menu.py:259 +#: netbox/netbox/navigation/menu.py:267 msgid "Cluster Groups" msgstr "" -#: netbox/netbox/navigation/menu.py:273 +#: netbox/netbox/navigation/menu.py:281 msgid "Circuit Types" msgstr "" -#: netbox/netbox/navigation/menu.py:274 -msgid "Circuit Groups" -msgstr "" - -#: netbox/netbox/navigation/menu.py:275 -#: netbox/templates/circuits/circuit.html:66 -msgid "Group Assignments" -msgstr "" - -#: netbox/netbox/navigation/menu.py:276 +#: netbox/netbox/navigation/menu.py:282 msgid "Circuit Terminations" msgstr "" -#: netbox/netbox/navigation/menu.py:280 netbox/netbox/navigation/menu.py:282 +#: netbox/netbox/navigation/menu.py:286 netbox/netbox/navigation/menu.py:288 +#: netbox/templates/circuits/providernetwork.html:55 +msgid "Virtual Circuits" +msgstr "" + +#: netbox/netbox/navigation/menu.py:289 +msgid "Virtual Circuit Types" +msgstr "" + +#: netbox/netbox/navigation/menu.py:290 +msgid "Virtual Circuit Terminations" +msgstr "" + +#: netbox/netbox/navigation/menu.py:296 +msgid "Circuit Groups" +msgstr "" + +#: netbox/netbox/navigation/menu.py:297 +#: netbox/templates/circuits/circuit.html:76 +#: netbox/templates/circuits/virtualcircuit.html:69 +msgid "Group Assignments" +msgstr "" + +#: netbox/netbox/navigation/menu.py:301 netbox/netbox/navigation/menu.py:303 msgid "Providers" msgstr "" -#: netbox/netbox/navigation/menu.py:283 +#: netbox/netbox/navigation/menu.py:304 #: netbox/templates/circuits/provider.html:51 msgid "Provider Accounts" msgstr "" -#: netbox/netbox/navigation/menu.py:284 +#: netbox/netbox/navigation/menu.py:305 msgid "Provider Networks" msgstr "" -#: netbox/netbox/navigation/menu.py:298 +#: netbox/netbox/navigation/menu.py:319 msgid "Power Panels" msgstr "" -#: netbox/netbox/navigation/menu.py:309 +#: netbox/netbox/navigation/menu.py:330 msgid "Configurations" msgstr "" -#: netbox/netbox/navigation/menu.py:311 +#: netbox/netbox/navigation/menu.py:332 msgid "Config Contexts" msgstr "" -#: netbox/netbox/navigation/menu.py:312 +#: netbox/netbox/navigation/menu.py:333 msgid "Config Templates" msgstr "" -#: netbox/netbox/navigation/menu.py:319 netbox/netbox/navigation/menu.py:323 +#: netbox/netbox/navigation/menu.py:340 netbox/netbox/navigation/menu.py:344 msgid "Customization" msgstr "" -#: netbox/netbox/navigation/menu.py:325 +#: netbox/netbox/navigation/menu.py:346 #: netbox/templates/dcim/device_edit.html:103 #: netbox/templates/dcim/htmx/cable_edit.html:81 #: netbox/templates/dcim/virtualchassis_add.html:31 @@ -10831,96 +11358,96 @@ msgstr "" #: netbox/templates/htmx/form.html:19 netbox/templates/inc/filter_list.html:30 #: netbox/templates/inc/panels/custom_fields.html:7 #: netbox/templates/ipam/ipaddress_bulk_add.html:35 -#: netbox/templates/ipam/vlan_edit.html:59 +#: netbox/templates/ipam/vlan_edit.html:67 msgid "Custom Fields" msgstr "" -#: netbox/netbox/navigation/menu.py:326 +#: netbox/netbox/navigation/menu.py:347 msgid "Custom Field Choices" msgstr "" -#: netbox/netbox/navigation/menu.py:327 +#: netbox/netbox/navigation/menu.py:348 msgid "Custom Links" msgstr "" -#: netbox/netbox/navigation/menu.py:328 +#: netbox/netbox/navigation/menu.py:349 msgid "Export Templates" msgstr "" -#: netbox/netbox/navigation/menu.py:329 +#: netbox/netbox/navigation/menu.py:350 msgid "Saved Filters" msgstr "" -#: netbox/netbox/navigation/menu.py:331 +#: netbox/netbox/navigation/menu.py:352 msgid "Image Attachments" msgstr "" -#: netbox/netbox/navigation/menu.py:349 +#: netbox/netbox/navigation/menu.py:370 msgid "Operations" msgstr "" -#: netbox/netbox/navigation/menu.py:353 +#: netbox/netbox/navigation/menu.py:374 msgid "Integrations" msgstr "" -#: netbox/netbox/navigation/menu.py:355 +#: netbox/netbox/navigation/menu.py:376 msgid "Data Sources" msgstr "" -#: netbox/netbox/navigation/menu.py:356 +#: netbox/netbox/navigation/menu.py:377 msgid "Event Rules" msgstr "" -#: netbox/netbox/navigation/menu.py:357 +#: netbox/netbox/navigation/menu.py:378 msgid "Webhooks" msgstr "" -#: netbox/netbox/navigation/menu.py:361 netbox/netbox/navigation/menu.py:365 -#: netbox/netbox/views/generic/feature_views.py:153 +#: netbox/netbox/navigation/menu.py:382 netbox/netbox/navigation/menu.py:386 +#: netbox/netbox/views/generic/feature_views.py:158 #: netbox/templates/extras/report/base.html:37 #: netbox/templates/extras/script/base.html:36 msgid "Jobs" msgstr "" -#: netbox/netbox/navigation/menu.py:371 +#: netbox/netbox/navigation/menu.py:392 msgid "Logging" msgstr "" -#: netbox/netbox/navigation/menu.py:373 +#: netbox/netbox/navigation/menu.py:394 msgid "Notification Groups" msgstr "" -#: netbox/netbox/navigation/menu.py:374 +#: netbox/netbox/navigation/menu.py:395 msgid "Journal Entries" msgstr "" -#: netbox/netbox/navigation/menu.py:375 +#: netbox/netbox/navigation/menu.py:396 #: netbox/templates/core/objectchange.html:9 #: netbox/templates/core/objectchange_list.html:4 msgid "Change Log" msgstr "" -#: netbox/netbox/navigation/menu.py:382 netbox/templates/inc/user_menu.html:29 +#: netbox/netbox/navigation/menu.py:403 netbox/templates/inc/user_menu.html:29 msgid "Admin" msgstr "" -#: netbox/netbox/navigation/menu.py:430 netbox/templates/account/base.html:27 -#: netbox/templates/inc/user_menu.html:57 +#: netbox/netbox/navigation/menu.py:451 netbox/templates/account/base.html:27 +#: netbox/templates/inc/user_menu.html:52 msgid "API Tokens" msgstr "" -#: netbox/netbox/navigation/menu.py:437 netbox/users/forms/model_forms.py:187 +#: netbox/netbox/navigation/menu.py:458 netbox/users/forms/model_forms.py:187 #: netbox/users/forms/model_forms.py:195 netbox/users/forms/model_forms.py:242 #: netbox/users/forms/model_forms.py:249 msgid "Permissions" msgstr "" -#: netbox/netbox/navigation/menu.py:445 netbox/netbox/navigation/menu.py:449 +#: netbox/netbox/navigation/menu.py:466 netbox/netbox/navigation/menu.py:470 #: netbox/templates/core/system.html:7 msgid "System" msgstr "" -#: netbox/netbox/navigation/menu.py:454 netbox/netbox/navigation/menu.py:502 +#: netbox/netbox/navigation/menu.py:475 netbox/netbox/navigation/menu.py:523 #: netbox/templates/500.html:35 netbox/templates/account/preferences.html:22 #: netbox/templates/core/plugin.html:13 #: netbox/templates/core/plugin_list.html:7 @@ -10928,11 +11455,11 @@ msgstr "" msgid "Plugins" msgstr "" -#: netbox/netbox/navigation/menu.py:459 +#: netbox/netbox/navigation/menu.py:480 msgid "Configuration History" msgstr "" -#: netbox/netbox/navigation/menu.py:465 netbox/templates/core/rq_task.html:8 +#: netbox/netbox/navigation/menu.py:486 netbox/templates/core/rq_task.html:8 #: netbox/templates/core/rq_task_list.html:22 msgid "Background Tasks" msgstr "" @@ -10950,30 +11477,30 @@ msgstr "" msgid "Button color must be a choice within ButtonColorChoices." msgstr "" -#: netbox/netbox/plugins/registration.py:25 +#: netbox/netbox/plugins/registration.py:26 #, python-brace-format msgid "" "PluginTemplateExtension class {template_extension} was passed as an instance!" msgstr "" -#: netbox/netbox/plugins/registration.py:31 +#: netbox/netbox/plugins/registration.py:32 #, python-brace-format msgid "" "{template_extension} is not a subclass of netbox.plugins." "PluginTemplateExtension!" msgstr "" -#: netbox/netbox/plugins/registration.py:51 +#: netbox/netbox/plugins/registration.py:57 #, python-brace-format msgid "{item} must be an instance of netbox.plugins.PluginMenuItem" msgstr "" -#: netbox/netbox/plugins/registration.py:62 +#: netbox/netbox/plugins/registration.py:68 #, python-brace-format msgid "{menu_link} must be an instance of netbox.plugins.PluginMenuItem" msgstr "" -#: netbox/netbox/plugins/registration.py:67 +#: netbox/netbox/plugins/registration.py:73 #, python-brace-format msgid "{button} must be an instance of netbox.plugins.PluginMenuButton" msgstr "" @@ -11055,79 +11582,79 @@ msgstr "" msgid "Cannot delete stores from registry" msgstr "" -#: netbox/netbox/settings.py:760 +#: netbox/netbox/settings.py:755 msgid "Czech" msgstr "" -#: netbox/netbox/settings.py:761 +#: netbox/netbox/settings.py:756 msgid "Danish" msgstr "" -#: netbox/netbox/settings.py:762 +#: netbox/netbox/settings.py:757 msgid "German" msgstr "" -#: netbox/netbox/settings.py:763 +#: netbox/netbox/settings.py:758 msgid "English" msgstr "" -#: netbox/netbox/settings.py:764 +#: netbox/netbox/settings.py:759 msgid "Spanish" msgstr "" -#: netbox/netbox/settings.py:765 +#: netbox/netbox/settings.py:760 msgid "French" msgstr "" -#: netbox/netbox/settings.py:766 +#: netbox/netbox/settings.py:761 msgid "Italian" msgstr "" -#: netbox/netbox/settings.py:767 +#: netbox/netbox/settings.py:762 msgid "Japanese" msgstr "" -#: netbox/netbox/settings.py:768 +#: netbox/netbox/settings.py:763 msgid "Dutch" msgstr "" -#: netbox/netbox/settings.py:769 +#: netbox/netbox/settings.py:764 msgid "Polish" msgstr "" -#: netbox/netbox/settings.py:770 +#: netbox/netbox/settings.py:765 msgid "Portuguese" msgstr "" -#: netbox/netbox/settings.py:771 +#: netbox/netbox/settings.py:766 msgid "Russian" msgstr "" -#: netbox/netbox/settings.py:772 +#: netbox/netbox/settings.py:767 msgid "Turkish" msgstr "" -#: netbox/netbox/settings.py:773 +#: netbox/netbox/settings.py:768 msgid "Ukrainian" msgstr "" -#: netbox/netbox/settings.py:774 +#: netbox/netbox/settings.py:769 msgid "Chinese" msgstr "" -#: netbox/netbox/tables/columns.py:176 +#: netbox/netbox/tables/columns.py:177 msgid "Select all" msgstr "" -#: netbox/netbox/tables/columns.py:189 +#: netbox/netbox/tables/columns.py:190 msgid "Toggle all" msgstr "" -#: netbox/netbox/tables/columns.py:300 +#: netbox/netbox/tables/columns.py:302 msgid "Toggle Dropdown" msgstr "" -#: netbox/netbox/tables/columns.py:572 netbox/templates/core/job.html:53 +#: netbox/netbox/tables/columns.py:575 netbox/templates/core/job.html:53 msgid "Error" msgstr "" @@ -11161,19 +11688,19 @@ msgstr "" msgid "Row {i}: Object with ID {id} does not exist" msgstr "" -#: netbox/netbox/views/generic/bulk_views.py:709 -#: netbox/netbox/views/generic/bulk_views.py:910 -#: netbox/netbox/views/generic/bulk_views.py:958 +#: netbox/netbox/views/generic/bulk_views.py:703 +#: netbox/netbox/views/generic/bulk_views.py:904 +#: netbox/netbox/views/generic/bulk_views.py:952 #, python-brace-format msgid "No {object_type} were selected." msgstr "" -#: netbox/netbox/views/generic/bulk_views.py:788 +#: netbox/netbox/views/generic/bulk_views.py:782 #, python-brace-format msgid "Renamed {count} {object_type}" msgstr "" -#: netbox/netbox/views/generic/bulk_views.py:888 +#: netbox/netbox/views/generic/bulk_views.py:882 #, python-brace-format msgid "Deleted {count} {object_type}" msgstr "" @@ -11186,16 +11713,16 @@ msgstr "" msgid "Journal" msgstr "" -#: netbox/netbox/views/generic/feature_views.py:207 +#: netbox/netbox/views/generic/feature_views.py:212 msgid "Unable to synchronize data: No data file set." msgstr "" -#: netbox/netbox/views/generic/feature_views.py:211 +#: netbox/netbox/views/generic/feature_views.py:216 #, python-brace-format msgid "Synchronized data for {object_type} {object}." msgstr "" -#: netbox/netbox/views/generic/feature_views.py:236 +#: netbox/netbox/views/generic/feature_views.py:241 #, python-brace-format msgid "Synced {count} {object_type}" msgstr "" @@ -11267,9 +11794,9 @@ msgstr "" msgid "Home Page" msgstr "" -#: netbox/templates/account/base.html:7 netbox/templates/inc/user_menu.html:45 +#: netbox/templates/account/base.html:7 netbox/templates/inc/user_menu.html:40 #: netbox/vpn/forms/bulk_edit.py:255 netbox/vpn/forms/filtersets.py:189 -#: netbox/vpn/forms/model_forms.py:379 +#: netbox/vpn/forms/model_forms.py:382 msgid "Profile" msgstr "" @@ -11281,11 +11808,11 @@ msgstr "" #: netbox/templates/account/base.html:16 #: netbox/templates/account/subscriptions.html:7 -#: netbox/templates/inc/user_menu.html:51 +#: netbox/templates/inc/user_menu.html:46 msgid "Subscriptions" msgstr "" -#: netbox/templates/account/base.html:19 netbox/templates/inc/user_menu.html:54 +#: netbox/templates/account/base.html:19 netbox/templates/inc/user_menu.html:49 msgid "Preferences" msgstr "" @@ -11313,6 +11840,7 @@ msgstr "" #: netbox/templates/generic/object_edit.html:72 #: netbox/templates/htmx/delete_form.html:53 #: netbox/templates/htmx/delete_form.html:55 +#: netbox/templates/htmx/quick_add.html:21 #: netbox/templates/ipam/ipaddress_assign.html:28 #: netbox/templates/virtualization/cluster_add_devices.html:30 msgid "Cancel" @@ -11408,7 +11936,7 @@ msgstr "" #: netbox/templates/core/objectchange.html:142 #: netbox/templates/dcim/devicebay.html:59 #: netbox/templates/dcim/inc/panels/inventory_items.html:45 -#: netbox/templates/dcim/interface.html:296 +#: netbox/templates/dcim/interface.html:353 #: netbox/templates/dcim/modulebay.html:80 #: netbox/templates/extras/configcontext.html:70 #: netbox/templates/extras/eventrule.html:66 @@ -11495,15 +12023,16 @@ msgstr "" msgid "Community" msgstr "" -#: netbox/templates/circuits/circuit.html:47 +#: netbox/templates/circuits/circuit.html:57 msgid "Install Date" msgstr "" -#: netbox/templates/circuits/circuit.html:51 +#: netbox/templates/circuits/circuit.html:61 msgid "Termination Date" msgstr "" -#: netbox/templates/circuits/circuit.html:70 +#: netbox/templates/circuits/circuit.html:80 +#: netbox/templates/circuits/virtualcircuit.html:73 #: netbox/templates/ipam/inc/panels/fhrp_groups.html:15 msgid "Assign Group" msgstr "" @@ -11551,7 +12080,7 @@ msgid "Add" msgstr "" #: netbox/templates/circuits/inc/circuit_termination.html:15 -#: netbox/templates/circuits/inc/circuit_termination_fields.html:36 +#: netbox/templates/circuits/inc/circuit_termination_fields.html:37 #: netbox/templates/dcim/inc/panels/inventory_items.html:32 #: netbox/templates/dcim/powerpanel.html:56 #: netbox/templates/extras/script_list.html:30 @@ -11566,35 +12095,39 @@ msgstr "" msgid "Swap" msgstr "" -#: netbox/templates/circuits/inc/circuit_termination_fields.html:19 +#: netbox/templates/circuits/inc/circuit_termination_fields.html:5 +msgid "Termination point" +msgstr "" + +#: netbox/templates/circuits/inc/circuit_termination_fields.html:20 #: netbox/templates/dcim/consoleport.html:59 #: netbox/templates/dcim/consoleserverport.html:60 #: netbox/templates/dcim/powerfeed.html:114 msgid "Marked as connected" msgstr "" -#: netbox/templates/circuits/inc/circuit_termination_fields.html:21 +#: netbox/templates/circuits/inc/circuit_termination_fields.html:22 msgid "to" msgstr "" -#: netbox/templates/circuits/inc/circuit_termination_fields.html:31 #: netbox/templates/circuits/inc/circuit_termination_fields.html:32 +#: netbox/templates/circuits/inc/circuit_termination_fields.html:33 #: netbox/templates/dcim/frontport.html:80 #: netbox/templates/dcim/inc/connection_endpoints.html:7 -#: netbox/templates/dcim/interface.html:154 +#: netbox/templates/dcim/interface.html:211 #: netbox/templates/dcim/rearport.html:76 msgid "Trace" msgstr "" -#: netbox/templates/circuits/inc/circuit_termination_fields.html:35 +#: netbox/templates/circuits/inc/circuit_termination_fields.html:36 msgid "Edit cable" msgstr "" -#: netbox/templates/circuits/inc/circuit_termination_fields.html:40 +#: netbox/templates/circuits/inc/circuit_termination_fields.html:41 msgid "Remove cable" msgstr "" -#: netbox/templates/circuits/inc/circuit_termination_fields.html:41 +#: netbox/templates/circuits/inc/circuit_termination_fields.html:42 #: netbox/templates/dcim/bulk_disconnect.html:5 #: netbox/templates/dcim/device/consoleports.html:12 #: netbox/templates/dcim/device/consoleserverports.html:12 @@ -11607,33 +12140,33 @@ msgstr "" msgid "Disconnect" msgstr "" -#: netbox/templates/circuits/inc/circuit_termination_fields.html:48 +#: netbox/templates/circuits/inc/circuit_termination_fields.html:49 #: netbox/templates/dcim/consoleport.html:69 #: netbox/templates/dcim/consoleserverport.html:70 #: netbox/templates/dcim/frontport.html:102 -#: netbox/templates/dcim/interface.html:180 -#: netbox/templates/dcim/interface.html:200 +#: netbox/templates/dcim/interface.html:237 +#: netbox/templates/dcim/interface.html:257 #: netbox/templates/dcim/powerfeed.html:127 -#: netbox/templates/dcim/poweroutlet.html:71 -#: netbox/templates/dcim/poweroutlet.html:72 +#: netbox/templates/dcim/poweroutlet.html:81 +#: netbox/templates/dcim/poweroutlet.html:82 #: netbox/templates/dcim/powerport.html:73 #: netbox/templates/dcim/rearport.html:98 msgid "Connect" msgstr "" -#: netbox/templates/circuits/inc/circuit_termination_fields.html:70 +#: netbox/templates/circuits/inc/circuit_termination_fields.html:65 msgid "Downstream" msgstr "" -#: netbox/templates/circuits/inc/circuit_termination_fields.html:71 +#: netbox/templates/circuits/inc/circuit_termination_fields.html:66 msgid "Upstream" msgstr "" -#: netbox/templates/circuits/inc/circuit_termination_fields.html:80 +#: netbox/templates/circuits/inc/circuit_termination_fields.html:75 msgid "Cross-Connect" msgstr "" -#: netbox/templates/circuits/inc/circuit_termination_fields.html:84 +#: netbox/templates/circuits/inc/circuit_termination_fields.html:79 msgid "Patch Panel/Port" msgstr "" @@ -11645,6 +12178,27 @@ msgstr "" msgid "Provider Account" msgstr "" +#: netbox/templates/circuits/providernetwork.html:59 +msgid "Add a Virtual Circuit" +msgstr "" + +#: netbox/templates/circuits/virtualcircuit.html:91 +#: netbox/templates/vpn/tunnel.html:9 +msgid "Add Termination" +msgstr "" + +#: netbox/templates/circuits/virtualcircuittermination.html:23 +msgid "Virtual Circuit Termination" +msgstr "" + +#: netbox/templates/circuits/virtualcircuittype.html:10 +msgid "Add Virtual Circuit" +msgstr "" + +#: netbox/templates/circuits/virtualcircuittype.html:19 +msgid "Virtual Circuit Type" +msgstr "" + #: netbox/templates/core/configrevision.html:35 msgid "Configuration Data" msgstr "" @@ -11677,7 +12231,7 @@ msgstr "" #: netbox/templates/core/datafile.html:42 netbox/templates/ipam/iprange.html:25 #: netbox/templates/virtualization/virtualdisk.html:29 -#: netbox/virtualization/tables/virtualmachines.py:198 +#: netbox/virtualization/tables/virtualmachines.py:169 msgid "Size" msgstr "" @@ -12115,8 +12669,8 @@ msgstr "" #: netbox/templates/dcim/consoleport.html:65 #: netbox/templates/dcim/consoleserverport.html:66 #: netbox/templates/dcim/frontport.html:98 -#: netbox/templates/dcim/interface.html:176 -#: netbox/templates/dcim/poweroutlet.html:69 +#: netbox/templates/dcim/interface.html:233 +#: netbox/templates/dcim/poweroutlet.html:79 #: netbox/templates/dcim/powerport.html:69 msgid "Not Connected" msgstr "" @@ -12139,7 +12693,7 @@ msgid "Map" msgstr "" #: netbox/templates/dcim/device.html:108 -#: netbox/templates/dcim/inventoryitem.html:56 +#: netbox/templates/dcim/inventoryitem.html:60 #: netbox/templates/dcim/module.html:81 netbox/templates/dcim/modulebay.html:74 #: netbox/templates/dcim/rack.html:61 msgid "Asset Tag" @@ -12155,7 +12709,7 @@ msgstr "" #: netbox/templates/dcim/device.html:175 #: netbox/templates/dcim/device_edit.html:64 -#: netbox/virtualization/forms/model_forms.py:223 +#: netbox/virtualization/forms/model_forms.py:222 msgid "Management" msgstr "" @@ -12395,8 +12949,8 @@ msgid "Rear Port Position" msgstr "" #: netbox/templates/dcim/frontport.html:72 -#: netbox/templates/dcim/interface.html:144 -#: netbox/templates/dcim/poweroutlet.html:63 +#: netbox/templates/dcim/interface.html:201 +#: netbox/templates/dcim/poweroutlet.html:73 #: netbox/templates/dcim/powerport.html:63 #: netbox/templates/dcim/rearport.html:68 msgid "Marked as Connected" @@ -12496,76 +13050,78 @@ msgid "PoE Type" msgstr "" #: netbox/templates/dcim/interface.html:81 -#: netbox/templates/virtualization/vminterface.html:63 +#: netbox/templates/virtualization/vminterface.html:55 +#: netbox/virtualization/forms/model_forms.py:387 msgid "802.1Q Mode" msgstr "" -#: netbox/templates/dcim/interface.html:125 -#: netbox/templates/virtualization/vminterface.html:59 -msgid "MAC Address" +#: netbox/templates/dcim/interface.html:156 +#: netbox/templates/virtualization/vminterface.html:88 +msgid "VLAN Translation" msgstr "" -#: netbox/templates/dcim/interface.html:151 +#: netbox/templates/dcim/interface.html:208 msgid "Wireless Link" msgstr "" -#: netbox/templates/dcim/interface.html:218 netbox/vpn/choices.py:63 -msgid "Peer" -msgstr "" - -#: netbox/templates/dcim/interface.html:230 +#: netbox/templates/dcim/interface.html:287 #: netbox/templates/wireless/inc/wirelesslink_interface.html:26 msgid "Channel" msgstr "" -#: netbox/templates/dcim/interface.html:239 +#: netbox/templates/dcim/interface.html:296 #: netbox/templates/wireless/inc/wirelesslink_interface.html:32 msgid "Channel Frequency" msgstr "" -#: netbox/templates/dcim/interface.html:242 -#: netbox/templates/dcim/interface.html:250 -#: netbox/templates/dcim/interface.html:261 -#: netbox/templates/dcim/interface.html:269 +#: netbox/templates/dcim/interface.html:299 +#: netbox/templates/dcim/interface.html:307 +#: netbox/templates/dcim/interface.html:318 +#: netbox/templates/dcim/interface.html:326 msgid "MHz" msgstr "" -#: netbox/templates/dcim/interface.html:258 +#: netbox/templates/dcim/interface.html:315 #: netbox/templates/wireless/inc/wirelesslink_interface.html:42 msgid "Channel Width" msgstr "" -#: netbox/templates/dcim/interface.html:285 +#: netbox/templates/dcim/interface.html:342 #: netbox/templates/wireless/wirelesslan.html:14 #: netbox/templates/wireless/wirelesslink.html:21 -#: netbox/wireless/forms/bulk_edit.py:60 netbox/wireless/forms/bulk_edit.py:102 -#: netbox/wireless/forms/filtersets.py:40 -#: netbox/wireless/forms/filtersets.py:80 netbox/wireless/models.py:82 -#: netbox/wireless/models.py:156 netbox/wireless/tables/wirelesslan.py:44 +#: netbox/wireless/forms/bulk_edit.py:62 netbox/wireless/forms/bulk_edit.py:105 +#: netbox/wireless/forms/filtersets.py:43 +#: netbox/wireless/forms/filtersets.py:108 netbox/wireless/models.py:82 +#: netbox/wireless/models.py:153 netbox/wireless/tables/wirelesslan.py:44 msgid "SSID" msgstr "" -#: netbox/templates/dcim/interface.html:305 +#: netbox/templates/dcim/interface.html:362 msgid "LAG Members" msgstr "" -#: netbox/templates/dcim/interface.html:323 +#: netbox/templates/dcim/interface.html:380 msgid "No member interfaces" msgstr "" -#: netbox/templates/dcim/interface.html:343 +#: netbox/templates/dcim/interface.html:400 #: netbox/templates/ipam/fhrpgroup.html:73 #: netbox/templates/ipam/iprange/ip_addresses.html:7 #: netbox/templates/ipam/prefix/ip_addresses.html:7 -#: netbox/templates/virtualization/vminterface.html:89 +#: netbox/templates/virtualization/vminterface.html:105 msgid "Add IP Address" msgstr "" +#: netbox/templates/dcim/interface.html:417 +#: netbox/templates/virtualization/vminterface.html:123 +msgid "Add MAC Address" +msgstr "" + #: netbox/templates/dcim/inventoryitem.html:24 msgid "Parent Item" msgstr "" -#: netbox/templates/dcim/inventoryitem.html:48 +#: netbox/templates/dcim/inventoryitem.html:52 msgid "Part ID" msgstr "" @@ -12585,6 +13141,10 @@ msgstr "" msgid "Add a Device" msgstr "" +#: netbox/templates/dcim/macaddress.html:36 +msgid "Primary for interface" +msgstr "" + #: netbox/templates/dcim/manufacturer.html:16 msgid "Add Device Type" msgstr "" @@ -12615,7 +13175,7 @@ msgctxt "Abbreviation for amperes" msgid "A" msgstr "" -#: netbox/templates/dcim/poweroutlet.html:48 +#: netbox/templates/dcim/poweroutlet.html:58 msgid "Feed Leg" msgstr "" @@ -13014,11 +13574,17 @@ msgstr "" msgid "No content found" msgstr "" -#: netbox/templates/extras/dashboard/widgets/rssfeed.html:18 +#: netbox/templates/extras/dashboard/widgets/rssfeed.html:17 +msgid "" +"This RSS feed requires an external connection. Check the ISOLATED_DEPLOYMENT " +"setting." +msgstr "" + +#: netbox/templates/extras/dashboard/widgets/rssfeed.html:22 msgid "There was a problem fetching the RSS feed" msgstr "" -#: netbox/templates/extras/dashboard/widgets/rssfeed.html:21 +#: netbox/templates/extras/dashboard/widgets/rssfeed.html:25 msgid "HTTP" msgstr "" @@ -13441,6 +14007,18 @@ msgstr "" msgid "Select" msgstr "" +#: netbox/templates/htmx/quick_add.html:7 +msgid "Quick Add" +msgstr "" + +#: netbox/templates/htmx/quick_add_created.html:18 +#, python-format +msgid "" +"\n" +" Created %(object_type)s %(object)s\n" +" " +msgstr "" + #: netbox/templates/inc/filter_list.html:43 #: netbox/utilities/templates/helpers/table_config_form.html:39 msgid "Reset" @@ -13510,15 +14088,11 @@ msgstr "" msgid "Help center" msgstr "" -#: netbox/templates/inc/user_menu.html:41 -msgid "Django Admin" -msgstr "" - -#: netbox/templates/inc/user_menu.html:61 +#: netbox/templates/inc/user_menu.html:56 msgid "Log Out" msgstr "" -#: netbox/templates/inc/user_menu.html:68 netbox/templates/login.html:38 +#: netbox/templates/inc/user_menu.html:63 netbox/templates/login.html:38 msgid "Log In" msgstr "" @@ -13615,43 +14189,43 @@ msgstr "" msgid "Ending Address" msgstr "" -#: netbox/templates/ipam/iprange.html:33 netbox/templates/ipam/prefix.html:110 +#: netbox/templates/ipam/iprange.html:33 netbox/templates/ipam/prefix.html:106 msgid "Marked fully utilized" msgstr "" -#: netbox/templates/ipam/prefix.html:99 +#: netbox/templates/ipam/prefix.html:95 msgid "Addressing Details" msgstr "" -#: netbox/templates/ipam/prefix.html:118 +#: netbox/templates/ipam/prefix.html:114 msgid "Child IPs" msgstr "" -#: netbox/templates/ipam/prefix.html:126 +#: netbox/templates/ipam/prefix.html:122 msgid "Available IPs" msgstr "" -#: netbox/templates/ipam/prefix.html:138 +#: netbox/templates/ipam/prefix.html:134 msgid "First available IP" msgstr "" -#: netbox/templates/ipam/prefix.html:179 +#: netbox/templates/ipam/prefix.html:175 msgid "Prefix Details" msgstr "" -#: netbox/templates/ipam/prefix.html:185 +#: netbox/templates/ipam/prefix.html:181 msgid "Network Address" msgstr "" -#: netbox/templates/ipam/prefix.html:189 +#: netbox/templates/ipam/prefix.html:185 msgid "Network Mask" msgstr "" -#: netbox/templates/ipam/prefix.html:193 +#: netbox/templates/ipam/prefix.html:189 msgid "Wildcard Mask" msgstr "" -#: netbox/templates/ipam/prefix.html:197 +#: netbox/templates/ipam/prefix.html:193 msgid "Broadcast Address" msgstr "" @@ -13691,14 +14265,30 @@ msgstr "" msgid "Exporting L2VPNs" msgstr "" -#: netbox/templates/ipam/vlan.html:88 +#: netbox/templates/ipam/vlan.html:66 +msgid "Q-in-Q Role" +msgstr "" + +#: netbox/templates/ipam/vlan.html:104 msgid "Add a Prefix" msgstr "" +#: netbox/templates/ipam/vlan.html:114 +msgid "Customer VLANs" +msgstr "" + +#: netbox/templates/ipam/vlan.html:118 +msgid "Add a VLAN" +msgstr "" + #: netbox/templates/ipam/vlangroup.html:18 msgid "Add VLAN" msgstr "" +#: netbox/templates/ipam/vlantranslationpolicy.html:51 +msgid "Add Rule" +msgstr "" + #: netbox/templates/ipam/vrf.html:16 msgid "Route Distinguisher" msgstr "" @@ -13767,7 +14357,7 @@ msgstr "" #: netbox/templates/tenancy/contact.html:18 netbox/tenancy/filtersets.py:147 #: netbox/tenancy/forms/bulk_edit.py:137 netbox/tenancy/forms/filtersets.py:102 -#: netbox/tenancy/forms/forms.py:56 netbox/tenancy/forms/model_forms.py:106 +#: netbox/tenancy/forms/forms.py:57 netbox/tenancy/forms/model_forms.py:106 #: netbox/tenancy/forms/model_forms.py:130 netbox/tenancy/tables/contacts.py:98 msgid "Contact" msgstr "" @@ -13783,7 +14373,7 @@ msgid "Phone" msgstr "" #: netbox/templates/tenancy/contactgroup.html:18 -#: netbox/tenancy/forms/forms.py:66 netbox/tenancy/forms/model_forms.py:75 +#: netbox/tenancy/forms/forms.py:67 netbox/tenancy/forms/model_forms.py:75 msgid "Contact Group" msgstr "" @@ -13792,7 +14382,7 @@ msgid "Add Contact Group" msgstr "" #: netbox/templates/tenancy/contactrole.html:15 -#: netbox/tenancy/filtersets.py:152 netbox/tenancy/forms/forms.py:61 +#: netbox/tenancy/filtersets.py:152 netbox/tenancy/forms/forms.py:62 #: netbox/tenancy/forms/model_forms.py:87 msgid "Contact Role" msgstr "" @@ -13806,8 +14396,8 @@ msgid "Add Tenant" msgstr "" #: netbox/templates/tenancy/tenantgroup.html:26 -#: netbox/tenancy/forms/model_forms.py:32 netbox/tenancy/tables/columns.py:51 -#: netbox/tenancy/tables/columns.py:61 +#: netbox/tenancy/forms/model_forms.py:32 netbox/tenancy/tables/columns.py:36 +#: netbox/tenancy/tables/columns.py:46 msgid "Tenant Group" msgstr "" @@ -13838,21 +14428,21 @@ msgstr "" msgid "Assigned Users" msgstr "" -#: netbox/templates/virtualization/cluster.html:52 +#: netbox/templates/virtualization/cluster.html:56 msgid "Allocated Resources" msgstr "" -#: netbox/templates/virtualization/cluster.html:55 +#: netbox/templates/virtualization/cluster.html:59 #: netbox/templates/virtualization/virtualmachine.html:125 msgid "Virtual CPUs" msgstr "" -#: netbox/templates/virtualization/cluster.html:59 +#: netbox/templates/virtualization/cluster.html:63 #: netbox/templates/virtualization/virtualmachine.html:129 msgid "Memory" msgstr "" -#: netbox/templates/virtualization/cluster.html:69 +#: netbox/templates/virtualization/cluster.html:73 #: netbox/templates/virtualization/virtualmachine.html:140 msgid "Disk Space" msgstr "" @@ -13888,13 +14478,13 @@ msgid "Add Cluster" msgstr "" #: netbox/templates/virtualization/clustergroup.html:19 -#: netbox/virtualization/forms/model_forms.py:50 +#: netbox/virtualization/forms/model_forms.py:52 msgid "Cluster Group" msgstr "" #: netbox/templates/virtualization/clustertype.html:19 #: netbox/templates/virtualization/virtualmachine.html:110 -#: netbox/virtualization/forms/model_forms.py:36 +#: netbox/virtualization/forms/model_forms.py:38 msgid "Cluster Type" msgstr "" @@ -13903,8 +14493,8 @@ msgid "Virtual Disk" msgstr "" #: netbox/templates/virtualization/virtualmachine.html:122 -#: netbox/virtualization/forms/bulk_edit.py:190 -#: netbox/virtualization/forms/model_forms.py:224 +#: netbox/virtualization/forms/bulk_edit.py:172 +#: netbox/virtualization/forms/model_forms.py:223 msgid "Resources" msgstr "" @@ -13938,7 +14528,7 @@ msgstr "" #: netbox/templates/vpn/ipsecpolicy.html:45 #: netbox/templates/vpn/ipsecprofile.html:52 #: netbox/templates/vpn/ipsecprofile.html:77 -#: netbox/vpn/forms/model_forms.py:316 netbox/vpn/forms/model_forms.py:352 +#: netbox/vpn/forms/model_forms.py:317 netbox/vpn/forms/model_forms.py:354 #: netbox/vpn/tables/crypto.py:68 netbox/vpn/tables/crypto.py:134 msgid "Proposals" msgstr "" @@ -13984,11 +14574,11 @@ msgid "IPSec Policy" msgstr "" #: netbox/templates/vpn/ipsecpolicy.html:21 netbox/vpn/forms/bulk_edit.py:210 -#: netbox/vpn/models/crypto.py:193 +#: netbox/vpn/models/crypto.py:191 msgid "PFS group" msgstr "" -#: netbox/templates/vpn/ipsecprofile.html:10 netbox/vpn/forms/model_forms.py:54 +#: netbox/templates/vpn/ipsecprofile.html:10 netbox/vpn/forms/model_forms.py:55 msgid "IPSec Profile" msgstr "" @@ -14014,10 +14604,6 @@ msgstr "" msgid "Add a Termination" msgstr "" -#: netbox/templates/vpn/tunnel.html:9 -msgid "Add Termination" -msgstr "" - #: netbox/templates/vpn/tunnel.html:37 netbox/vpn/forms/bulk_edit.py:49 #: netbox/vpn/forms/bulk_import.py:48 netbox/vpn/forms/filtersets.py:57 msgid "Encapsulation" @@ -14025,7 +14611,7 @@ msgstr "" #: netbox/templates/vpn/tunnel.html:41 netbox/vpn/forms/bulk_edit.py:55 #: netbox/vpn/forms/bulk_import.py:53 netbox/vpn/forms/filtersets.py:64 -#: netbox/vpn/models/crypto.py:250 netbox/vpn/tables/tunnels.py:51 +#: netbox/vpn/models/crypto.py:246 netbox/vpn/tables/tunnels.py:51 msgid "IPSec profile" msgstr "" @@ -14048,8 +14634,8 @@ msgid "Tunnel Termination" msgstr "" #: netbox/templates/vpn/tunneltermination.html:35 -#: netbox/vpn/forms/bulk_import.py:107 netbox/vpn/forms/model_forms.py:102 -#: netbox/vpn/forms/model_forms.py:138 netbox/vpn/forms/model_forms.py:247 +#: netbox/vpn/forms/bulk_import.py:107 netbox/vpn/forms/model_forms.py:103 +#: netbox/vpn/forms/model_forms.py:139 netbox/vpn/forms/model_forms.py:248 #: netbox/vpn/tables/tunnels.py:101 msgid "Outside IP" msgstr "" @@ -14072,7 +14658,7 @@ msgctxt "Abbreviation for megahertz" msgid "MHz" msgstr "" -#: netbox/templates/wireless/wirelesslan.html:57 +#: netbox/templates/wireless/wirelesslan.html:65 msgid "Attached Interfaces" msgstr "" @@ -14081,7 +14667,7 @@ msgid "Add Wireless LAN" msgstr "" #: netbox/templates/wireless/wirelesslangroup.html:26 -#: netbox/wireless/forms/model_forms.py:28 +#: netbox/wireless/forms/model_forms.py:29 msgid "Wireless LAN Group" msgstr "" @@ -14093,13 +14679,6 @@ msgstr "" msgid "Link Properties" msgstr "" -#: netbox/templates/wireless/wirelesslink.html:38 -#: netbox/wireless/forms/bulk_edit.py:129 -#: netbox/wireless/forms/filtersets.py:102 -#: netbox/wireless/forms/model_forms.py:165 -msgid "Distance" -msgstr "" - #: netbox/tenancy/filtersets.py:28 msgid "Parent contact group (ID)" msgstr "" @@ -14170,47 +14749,47 @@ msgstr "" msgid "contact groups" msgstr "" -#: netbox/tenancy/models/contacts.py:48 +#: netbox/tenancy/models/contacts.py:42 msgid "contact role" msgstr "" -#: netbox/tenancy/models/contacts.py:49 +#: netbox/tenancy/models/contacts.py:43 msgid "contact roles" msgstr "" -#: netbox/tenancy/models/contacts.py:68 +#: netbox/tenancy/models/contacts.py:63 msgid "title" msgstr "" -#: netbox/tenancy/models/contacts.py:73 +#: netbox/tenancy/models/contacts.py:68 msgid "phone" msgstr "" -#: netbox/tenancy/models/contacts.py:78 +#: netbox/tenancy/models/contacts.py:73 msgid "email" msgstr "" -#: netbox/tenancy/models/contacts.py:87 +#: netbox/tenancy/models/contacts.py:82 msgid "link" msgstr "" -#: netbox/tenancy/models/contacts.py:103 +#: netbox/tenancy/models/contacts.py:98 msgid "contact" msgstr "" -#: netbox/tenancy/models/contacts.py:104 +#: netbox/tenancy/models/contacts.py:99 msgid "contacts" msgstr "" -#: netbox/tenancy/models/contacts.py:153 +#: netbox/tenancy/models/contacts.py:146 msgid "contact assignment" msgstr "" -#: netbox/tenancy/models/contacts.py:154 +#: netbox/tenancy/models/contacts.py:147 msgid "contact assignments" msgstr "" -#: netbox/tenancy/models/contacts.py:170 +#: netbox/tenancy/models/contacts.py:163 #, python-brace-format msgid "Contacts cannot be assigned to this object type ({type})." msgstr "" @@ -14223,19 +14802,19 @@ msgstr "" msgid "tenant groups" msgstr "" -#: netbox/tenancy/models/tenants.py:70 +#: netbox/tenancy/models/tenants.py:68 msgid "Tenant name must be unique per group." msgstr "" -#: netbox/tenancy/models/tenants.py:80 +#: netbox/tenancy/models/tenants.py:78 msgid "Tenant slug must be unique per group." msgstr "" -#: netbox/tenancy/models/tenants.py:88 +#: netbox/tenancy/models/tenants.py:86 msgid "tenant" msgstr "" -#: netbox/tenancy/models/tenants.py:89 +#: netbox/tenancy/models/tenants.py:87 msgid "tenants" msgstr "" @@ -14445,7 +15024,7 @@ msgstr "" msgid "tokens" msgstr "" -#: netbox/users/models/users.py:57 netbox/vpn/models/crypto.py:42 +#: netbox/users/models/users.py:57 netbox/vpn/models/crypto.py:43 msgid "group" msgstr "" @@ -14488,25 +15067,25 @@ msgstr "" msgid "{name} has a key defined but CHOICES is not a list" msgstr "" -#: netbox/utilities/conversion.py:19 +#: netbox/utilities/conversion.py:20 msgid "Weight must be a positive number" msgstr "" -#: netbox/utilities/conversion.py:21 +#: netbox/utilities/conversion.py:22 #, python-brace-format msgid "Invalid value '{weight}' for weight (must be a number)" msgstr "" -#: netbox/utilities/conversion.py:32 netbox/utilities/conversion.py:62 +#: netbox/utilities/conversion.py:33 netbox/utilities/conversion.py:63 #, python-brace-format msgid "Unknown unit {unit}. Must be one of the following: {valid_units}" msgstr "" -#: netbox/utilities/conversion.py:45 +#: netbox/utilities/conversion.py:46 msgid "Length must be a positive number" msgstr "" -#: netbox/utilities/conversion.py:47 +#: netbox/utilities/conversion.py:48 #, python-brace-format msgid "Invalid value '{length}' for length (must be a number)" msgstr "" @@ -14522,18 +15101,18 @@ msgstr "" msgid "More than 50" msgstr "" -#: netbox/utilities/fields.py:30 +#: netbox/utilities/fields.py:29 msgid "RGB color in hexadecimal. Example: " msgstr "" -#: netbox/utilities/fields.py:159 +#: netbox/utilities/fields.py:158 #, python-format msgid "" "%s(%r) is invalid. to_model parameter to CounterCacheField must be a string " "in the format 'app.model'" msgstr "" -#: netbox/utilities/fields.py:169 +#: netbox/utilities/fields.py:168 #, python-format msgid "" "%s(%r) is invalid. to_field parameter to CounterCacheField must be a string " @@ -14732,12 +15311,12 @@ msgstr "" msgid "Required column header \"{header}\" not found." msgstr "" -#: netbox/utilities/forms/widgets/apiselect.py:124 +#: netbox/utilities/forms/widgets/apiselect.py:133 #, python-brace-format msgid "Missing required value for dynamic query param: '{dynamic_params}'" msgstr "" -#: netbox/utilities/forms/widgets/apiselect.py:141 +#: netbox/utilities/forms/widgets/apiselect.py:150 #, python-brace-format msgid "Missing required value for static query param: '{static_params}'" msgstr "" @@ -14858,10 +15437,14 @@ msgstr "" msgid "Search NetBox" msgstr "" -#: netbox/utilities/templates/widgets/apiselect.html:7 +#: netbox/utilities/templates/widgets/apiselect.html:8 msgid "Open selector" msgstr "" +#: netbox/utilities/templates/widgets/apiselect.html:22 +msgid "Quick add" +msgstr "" + #: netbox/utilities/templates/widgets/markdown_input.html:6 msgid "Write" msgstr "" @@ -14892,212 +15475,219 @@ msgid "" "be used on views which define a base queryset" msgstr "" -#: netbox/virtualization/filtersets.py:79 +#: netbox/virtualization/filtersets.py:45 msgid "Parent group (ID)" msgstr "" -#: netbox/virtualization/filtersets.py:85 +#: netbox/virtualization/filtersets.py:51 msgid "Parent group (slug)" msgstr "" -#: netbox/virtualization/filtersets.py:89 -#: netbox/virtualization/filtersets.py:141 +#: netbox/virtualization/filtersets.py:55 +#: netbox/virtualization/filtersets.py:107 msgid "Cluster type (ID)" msgstr "" -#: netbox/virtualization/filtersets.py:151 -#: netbox/virtualization/filtersets.py:271 +#: netbox/virtualization/filtersets.py:117 +#: netbox/virtualization/filtersets.py:237 msgid "Cluster (ID)" msgstr "" -#: netbox/virtualization/forms/bulk_edit.py:166 -#: netbox/virtualization/models/virtualmachines.py:115 +#: netbox/virtualization/forms/bulk_edit.py:148 +#: netbox/virtualization/models/virtualmachines.py:110 msgid "vCPUs" msgstr "" -#: netbox/virtualization/forms/bulk_edit.py:170 +#: netbox/virtualization/forms/bulk_edit.py:152 msgid "Memory (MB)" msgstr "" -#: netbox/virtualization/forms/bulk_edit.py:174 +#: netbox/virtualization/forms/bulk_edit.py:156 msgid "Disk (MB)" msgstr "" -#: netbox/virtualization/forms/bulk_edit.py:334 -#: netbox/virtualization/forms/filtersets.py:251 +#: netbox/virtualization/forms/bulk_edit.py:316 +#: netbox/virtualization/forms/filtersets.py:256 msgid "Size (MB)" msgstr "" -#: netbox/virtualization/forms/bulk_import.py:44 +#: netbox/virtualization/forms/bulk_import.py:45 msgid "Type of cluster" msgstr "" -#: netbox/virtualization/forms/bulk_import.py:51 +#: netbox/virtualization/forms/bulk_import.py:52 msgid "Assigned cluster group" msgstr "" -#: netbox/virtualization/forms/bulk_import.py:96 +#: netbox/virtualization/forms/bulk_import.py:102 msgid "Assigned cluster" msgstr "" -#: netbox/virtualization/forms/bulk_import.py:103 +#: netbox/virtualization/forms/bulk_import.py:109 msgid "Assigned device within cluster" msgstr "" -#: netbox/virtualization/forms/filtersets.py:183 +#: netbox/virtualization/forms/filtersets.py:188 msgid "Serial number" msgstr "" -#: netbox/virtualization/forms/model_forms.py:153 +#: netbox/virtualization/forms/model_forms.py:152 #, python-brace-format msgid "" "{device} belongs to a different site ({device_site}) than the cluster " "({cluster_site})" msgstr "" -#: netbox/virtualization/forms/model_forms.py:192 +#: netbox/virtualization/forms/model_forms.py:191 msgid "Optionally pin this VM to a specific host device within the cluster" msgstr "" -#: netbox/virtualization/forms/model_forms.py:221 +#: netbox/virtualization/forms/model_forms.py:220 msgid "Site/Cluster" msgstr "" -#: netbox/virtualization/forms/model_forms.py:244 +#: netbox/virtualization/forms/model_forms.py:243 msgid "Disk size is managed via the attachment of virtual disks." msgstr "" -#: netbox/virtualization/forms/model_forms.py:372 -#: netbox/virtualization/tables/virtualmachines.py:111 +#: netbox/virtualization/forms/model_forms.py:397 +#: netbox/virtualization/tables/virtualmachines.py:81 msgid "Disk" msgstr "" -#: netbox/virtualization/models/clusters.py:25 +#: netbox/virtualization/models/clusters.py:26 msgid "cluster type" msgstr "" -#: netbox/virtualization/models/clusters.py:26 +#: netbox/virtualization/models/clusters.py:27 msgid "cluster types" msgstr "" -#: netbox/virtualization/models/clusters.py:45 +#: netbox/virtualization/models/clusters.py:43 msgid "cluster group" msgstr "" -#: netbox/virtualization/models/clusters.py:46 +#: netbox/virtualization/models/clusters.py:44 msgid "cluster groups" msgstr "" -#: netbox/virtualization/models/clusters.py:121 +#: netbox/virtualization/models/clusters.py:110 msgid "cluster" msgstr "" -#: netbox/virtualization/models/clusters.py:122 +#: netbox/virtualization/models/clusters.py:111 msgid "clusters" msgstr "" -#: netbox/virtualization/models/clusters.py:141 +#: netbox/virtualization/models/clusters.py:137 #, python-brace-format msgid "" "{count} devices are assigned as hosts for this cluster but are not in site " "{site}" msgstr "" -#: netbox/virtualization/models/virtualmachines.py:123 +#: netbox/virtualization/models/clusters.py:144 +#, python-brace-format +msgid "" +"{count} devices are assigned as hosts for this cluster but are not in " +"location {location}" +msgstr "" + +#: netbox/virtualization/models/virtualmachines.py:118 msgid "memory (MB)" msgstr "" -#: netbox/virtualization/models/virtualmachines.py:128 +#: netbox/virtualization/models/virtualmachines.py:123 msgid "disk (MB)" msgstr "" -#: netbox/virtualization/models/virtualmachines.py:166 +#: netbox/virtualization/models/virtualmachines.py:161 msgid "Virtual machine name must be unique per cluster." msgstr "" -#: netbox/virtualization/models/virtualmachines.py:169 +#: netbox/virtualization/models/virtualmachines.py:164 msgid "virtual machine" msgstr "" -#: netbox/virtualization/models/virtualmachines.py:170 +#: netbox/virtualization/models/virtualmachines.py:165 msgid "virtual machines" msgstr "" -#: netbox/virtualization/models/virtualmachines.py:184 +#: netbox/virtualization/models/virtualmachines.py:176 msgid "A virtual machine must be assigned to a site and/or cluster." msgstr "" -#: netbox/virtualization/models/virtualmachines.py:191 +#: netbox/virtualization/models/virtualmachines.py:183 #, python-brace-format msgid "The selected cluster ({cluster}) is not assigned to this site ({site})." msgstr "" -#: netbox/virtualization/models/virtualmachines.py:198 +#: netbox/virtualization/models/virtualmachines.py:190 msgid "Must specify a cluster when assigning a host device." msgstr "" -#: netbox/virtualization/models/virtualmachines.py:203 +#: netbox/virtualization/models/virtualmachines.py:195 #, python-brace-format msgid "" "The selected device ({device}) is not assigned to this cluster ({cluster})." msgstr "" -#: netbox/virtualization/models/virtualmachines.py:215 +#: netbox/virtualization/models/virtualmachines.py:207 #, python-brace-format msgid "" "The specified disk size ({size}) must match the aggregate size of assigned " "virtual disks ({total_size})." msgstr "" -#: netbox/virtualization/models/virtualmachines.py:229 +#: netbox/virtualization/models/virtualmachines.py:221 #, python-brace-format msgid "Must be an IPv{family} address. ({ip} is an IPv{version} address.)" msgstr "" -#: netbox/virtualization/models/virtualmachines.py:238 +#: netbox/virtualization/models/virtualmachines.py:230 #, python-brace-format msgid "The specified IP address ({ip}) is not assigned to this VM." msgstr "" -#: netbox/virtualization/models/virtualmachines.py:396 +#: netbox/virtualization/models/virtualmachines.py:376 #, python-brace-format msgid "" "The selected parent interface ({parent}) belongs to a different virtual " "machine ({virtual_machine})." msgstr "" -#: netbox/virtualization/models/virtualmachines.py:411 +#: netbox/virtualization/models/virtualmachines.py:391 #, python-brace-format msgid "" "The selected bridge interface ({bridge}) belongs to a different virtual " "machine ({virtual_machine})." msgstr "" -#: netbox/virtualization/models/virtualmachines.py:422 +#: netbox/virtualization/models/virtualmachines.py:402 #, python-brace-format msgid "" "The untagged VLAN ({untagged_vlan}) must belong to the same site as the " "interface's parent virtual machine, or it must be global." msgstr "" -#: netbox/virtualization/models/virtualmachines.py:434 +#: netbox/virtualization/models/virtualmachines.py:414 msgid "size (MB)" msgstr "" -#: netbox/virtualization/models/virtualmachines.py:438 +#: netbox/virtualization/models/virtualmachines.py:418 msgid "virtual disk" msgstr "" -#: netbox/virtualization/models/virtualmachines.py:439 +#: netbox/virtualization/models/virtualmachines.py:419 msgid "virtual disks" msgstr "" -#: netbox/virtualization/views.py:273 +#: netbox/virtualization/views.py:291 #, python-brace-format msgid "Added {count} devices to cluster {cluster}" msgstr "" -#: netbox/virtualization/views.py:308 +#: netbox/virtualization/views.py:326 #, python-brace-format msgid "Removed {count} devices from cluster {cluster}" msgstr "" @@ -15134,14 +15724,6 @@ msgstr "" msgid "PPTP" msgstr "" -#: netbox/vpn/choices.py:64 -msgid "Hub" -msgstr "" - -#: netbox/vpn/choices.py:65 -msgid "Spoke" -msgstr "" - #: netbox/vpn/choices.py:88 msgid "Aggressive" msgstr "" @@ -15259,26 +15841,26 @@ msgstr "" msgid "Tunnel group" msgstr "" -#: netbox/vpn/forms/bulk_edit.py:117 netbox/vpn/models/crypto.py:47 +#: netbox/vpn/forms/bulk_edit.py:117 netbox/vpn/models/crypto.py:48 msgid "SA lifetime" msgstr "" -#: netbox/vpn/forms/bulk_edit.py:151 netbox/wireless/forms/bulk_edit.py:79 -#: netbox/wireless/forms/bulk_edit.py:126 -#: netbox/wireless/forms/filtersets.py:64 -#: netbox/wireless/forms/filtersets.py:98 +#: netbox/vpn/forms/bulk_edit.py:151 netbox/wireless/forms/bulk_edit.py:81 +#: netbox/wireless/forms/bulk_edit.py:129 +#: netbox/wireless/forms/filtersets.py:67 +#: netbox/wireless/forms/filtersets.py:126 msgid "Pre-shared key" msgstr "" #: netbox/vpn/forms/bulk_edit.py:237 netbox/vpn/forms/bulk_import.py:239 -#: netbox/vpn/forms/filtersets.py:199 netbox/vpn/forms/model_forms.py:370 +#: netbox/vpn/forms/filtersets.py:199 netbox/vpn/forms/model_forms.py:373 #: netbox/vpn/models/crypto.py:104 msgid "IKE policy" msgstr "" #: netbox/vpn/forms/bulk_edit.py:242 netbox/vpn/forms/bulk_import.py:244 -#: netbox/vpn/forms/filtersets.py:204 netbox/vpn/forms/model_forms.py:374 -#: netbox/vpn/models/crypto.py:209 +#: netbox/vpn/forms/filtersets.py:204 netbox/vpn/forms/model_forms.py:377 +#: netbox/vpn/models/crypto.py:207 msgid "IPSec policy" msgstr "" @@ -15286,10 +15868,6 @@ msgstr "" msgid "Tunnel encapsulation" msgstr "" -#: netbox/vpn/forms/bulk_import.py:83 -msgid "Operational role" -msgstr "" - #: netbox/vpn/forms/bulk_import.py:90 msgid "Parent device of assigned interface" msgstr "" @@ -15306,7 +15884,7 @@ msgstr "" msgid "IKE proposal(s)" msgstr "" -#: netbox/vpn/forms/bulk_import.py:215 netbox/vpn/models/crypto.py:197 +#: netbox/vpn/forms/bulk_import.py:215 netbox/vpn/models/crypto.py:195 msgid "Diffie-Hellman group for Perfect Forward Secrecy" msgstr "" @@ -15351,7 +15929,7 @@ msgid "IKE version" msgstr "" #: netbox/vpn/forms/filtersets.py:142 netbox/vpn/forms/filtersets.py:175 -#: netbox/vpn/forms/model_forms.py:298 netbox/vpn/forms/model_forms.py:334 +#: netbox/vpn/forms/model_forms.py:299 netbox/vpn/forms/model_forms.py:336 msgid "Proposal" msgstr "" @@ -15359,32 +15937,28 @@ msgstr "" msgid "Assigned Object Type" msgstr "" -#: netbox/vpn/forms/model_forms.py:95 netbox/vpn/forms/model_forms.py:130 -#: netbox/vpn/forms/model_forms.py:240 netbox/vpn/tables/tunnels.py:91 +#: netbox/vpn/forms/model_forms.py:96 netbox/vpn/forms/model_forms.py:131 +#: netbox/vpn/forms/model_forms.py:241 netbox/vpn/tables/tunnels.py:91 msgid "Tunnel interface" msgstr "" -#: netbox/vpn/forms/model_forms.py:150 +#: netbox/vpn/forms/model_forms.py:151 msgid "First Termination" msgstr "" -#: netbox/vpn/forms/model_forms.py:153 +#: netbox/vpn/forms/model_forms.py:154 msgid "Second Termination" msgstr "" -#: netbox/vpn/forms/model_forms.py:197 +#: netbox/vpn/forms/model_forms.py:198 msgid "This parameter is required when defining a termination." msgstr "" -#: netbox/vpn/forms/model_forms.py:320 netbox/vpn/forms/model_forms.py:356 -msgid "Policy" -msgstr "" - -#: netbox/vpn/forms/model_forms.py:487 +#: netbox/vpn/forms/model_forms.py:490 msgid "A termination must specify an interface or VLAN." msgstr "" -#: netbox/vpn/forms/model_forms.py:489 +#: netbox/vpn/forms/model_forms.py:492 msgid "" "A termination can only have one terminating object (an interface or VLAN)." msgstr "" @@ -15397,31 +15971,31 @@ msgstr "" msgid "authentication algorithm" msgstr "" -#: netbox/vpn/models/crypto.py:44 +#: netbox/vpn/models/crypto.py:45 msgid "Diffie-Hellman group ID" msgstr "" -#: netbox/vpn/models/crypto.py:50 +#: netbox/vpn/models/crypto.py:51 msgid "Security association lifetime (in seconds)" msgstr "" -#: netbox/vpn/models/crypto.py:59 +#: netbox/vpn/models/crypto.py:60 msgid "IKE proposal" msgstr "" -#: netbox/vpn/models/crypto.py:60 +#: netbox/vpn/models/crypto.py:61 msgid "IKE proposals" msgstr "" -#: netbox/vpn/models/crypto.py:76 +#: netbox/vpn/models/crypto.py:75 msgid "version" msgstr "" -#: netbox/vpn/models/crypto.py:88 netbox/vpn/models/crypto.py:190 +#: netbox/vpn/models/crypto.py:88 netbox/vpn/models/crypto.py:188 msgid "proposals" msgstr "" -#: netbox/vpn/models/crypto.py:91 netbox/wireless/models.py:39 +#: netbox/vpn/models/crypto.py:91 netbox/wireless/models.py:41 msgid "pre-shared key" msgstr "" @@ -15429,19 +16003,19 @@ msgstr "" msgid "IKE policies" msgstr "" -#: netbox/vpn/models/crypto.py:118 +#: netbox/vpn/models/crypto.py:115 msgid "Mode is required for selected IKE version" msgstr "" -#: netbox/vpn/models/crypto.py:122 +#: netbox/vpn/models/crypto.py:119 msgid "Mode cannot be used for selected IKE version" msgstr "" -#: netbox/vpn/models/crypto.py:136 +#: netbox/vpn/models/crypto.py:134 msgid "encryption" msgstr "" -#: netbox/vpn/models/crypto.py:141 +#: netbox/vpn/models/crypto.py:140 msgid "authentication" msgstr "" @@ -15461,32 +16035,32 @@ msgstr "" msgid "IPSec proposals" msgstr "" -#: netbox/vpn/models/crypto.py:178 +#: netbox/vpn/models/crypto.py:175 msgid "Encryption and/or authentication algorithm must be defined" msgstr "" -#: netbox/vpn/models/crypto.py:210 +#: netbox/vpn/models/crypto.py:208 msgid "IPSec policies" msgstr "" -#: netbox/vpn/models/crypto.py:251 +#: netbox/vpn/models/crypto.py:247 msgid "IPSec profiles" msgstr "" -#: netbox/vpn/models/l2vpn.py:116 +#: netbox/vpn/models/l2vpn.py:113 msgid "L2VPN termination" msgstr "" -#: netbox/vpn/models/l2vpn.py:117 +#: netbox/vpn/models/l2vpn.py:114 msgid "L2VPN terminations" msgstr "" -#: netbox/vpn/models/l2vpn.py:135 +#: netbox/vpn/models/l2vpn.py:129 #, python-brace-format msgid "L2VPN Termination already assigned ({assigned_object})" msgstr "" -#: netbox/vpn/models/l2vpn.py:147 +#: netbox/vpn/models/l2vpn.py:141 #, python-brace-format msgid "" "{l2vpn_type} L2VPNs cannot have more than two terminations; found " @@ -15501,35 +16075,35 @@ msgstr "" msgid "tunnel groups" msgstr "" -#: netbox/vpn/models/tunnels.py:53 +#: netbox/vpn/models/tunnels.py:51 msgid "encapsulation" msgstr "" -#: netbox/vpn/models/tunnels.py:72 +#: netbox/vpn/models/tunnels.py:70 msgid "tunnel ID" msgstr "" -#: netbox/vpn/models/tunnels.py:94 +#: netbox/vpn/models/tunnels.py:92 msgid "tunnel" msgstr "" -#: netbox/vpn/models/tunnels.py:95 +#: netbox/vpn/models/tunnels.py:93 msgid "tunnels" msgstr "" -#: netbox/vpn/models/tunnels.py:153 +#: netbox/vpn/models/tunnels.py:148 msgid "An object may be terminated to only one tunnel at a time." msgstr "" -#: netbox/vpn/models/tunnels.py:156 +#: netbox/vpn/models/tunnels.py:151 msgid "tunnel termination" msgstr "" -#: netbox/vpn/models/tunnels.py:157 +#: netbox/vpn/models/tunnels.py:152 msgid "tunnel terminations" msgstr "" -#: netbox/vpn/models/tunnels.py:174 +#: netbox/vpn/models/tunnels.py:169 #, python-brace-format msgid "{name} is already attached to a tunnel ({tunnel})." msgstr "" @@ -15590,50 +16164,43 @@ msgstr "" msgid "WPA Enterprise" msgstr "" -#: netbox/wireless/forms/bulk_edit.py:73 netbox/wireless/forms/bulk_edit.py:120 -#: netbox/wireless/forms/bulk_import.py:68 -#: netbox/wireless/forms/bulk_import.py:71 -#: netbox/wireless/forms/bulk_import.py:110 -#: netbox/wireless/forms/bulk_import.py:113 -#: netbox/wireless/forms/filtersets.py:59 -#: netbox/wireless/forms/filtersets.py:93 +#: netbox/wireless/forms/bulk_edit.py:75 netbox/wireless/forms/bulk_edit.py:123 +#: netbox/wireless/forms/bulk_import.py:70 +#: netbox/wireless/forms/bulk_import.py:73 +#: netbox/wireless/forms/bulk_import.py:115 +#: netbox/wireless/forms/bulk_import.py:118 +#: netbox/wireless/forms/filtersets.py:62 +#: netbox/wireless/forms/filtersets.py:121 msgid "Authentication cipher" msgstr "" -#: netbox/wireless/forms/bulk_edit.py:134 -#: netbox/wireless/forms/bulk_import.py:116 -#: netbox/wireless/forms/bulk_import.py:119 -#: netbox/wireless/forms/filtersets.py:106 -msgid "Distance unit" -msgstr "" - -#: netbox/wireless/forms/bulk_import.py:52 +#: netbox/wireless/forms/bulk_import.py:54 msgid "Bridged VLAN" msgstr "" -#: netbox/wireless/forms/bulk_import.py:89 -#: netbox/wireless/tables/wirelesslink.py:28 +#: netbox/wireless/forms/bulk_import.py:94 +#: netbox/wireless/tables/wirelesslink.py:27 msgid "Interface A" msgstr "" -#: netbox/wireless/forms/bulk_import.py:93 -#: netbox/wireless/tables/wirelesslink.py:37 +#: netbox/wireless/forms/bulk_import.py:98 +#: netbox/wireless/tables/wirelesslink.py:36 msgid "Interface B" msgstr "" -#: netbox/wireless/forms/model_forms.py:161 +#: netbox/wireless/forms/model_forms.py:164 msgid "Side B" msgstr "" -#: netbox/wireless/models.py:31 +#: netbox/wireless/models.py:32 msgid "authentication cipher" msgstr "" -#: netbox/wireless/models.py:69 +#: netbox/wireless/models.py:72 msgid "wireless LAN group" msgstr "" -#: netbox/wireless/models.py:70 +#: netbox/wireless/models.py:73 msgid "wireless LAN groups" msgstr "" @@ -15641,35 +16208,23 @@ msgstr "" msgid "wireless LAN" msgstr "" -#: netbox/wireless/models.py:144 +#: netbox/wireless/models.py:141 msgid "interface A" msgstr "" -#: netbox/wireless/models.py:151 +#: netbox/wireless/models.py:148 msgid "interface B" msgstr "" -#: netbox/wireless/models.py:165 -msgid "distance" -msgstr "" - -#: netbox/wireless/models.py:172 -msgid "distance unit" -msgstr "" - -#: netbox/wireless/models.py:219 +#: netbox/wireless/models.py:196 msgid "wireless link" msgstr "" -#: netbox/wireless/models.py:220 +#: netbox/wireless/models.py:197 msgid "wireless links" msgstr "" -#: netbox/wireless/models.py:236 -msgid "Must specify a unit when setting a wireless distance" -msgstr "" - -#: netbox/wireless/models.py:242 netbox/wireless/models.py:248 +#: netbox/wireless/models.py:212 netbox/wireless/models.py:218 #, python-brace-format msgid "{type} is not a wireless interface." msgstr "" From 9c960c2387fcc50004f4694b199a588098f82df0 Mon Sep 17 00:00:00 2001 From: Jeremy Stretch Date: Tue, 7 Jan 2025 09:15:37 -0500 Subject: [PATCH 006/152] Fixes #18318: Correct navigation breadcrumbs for module type UI view --- netbox/templates/dcim/inc/devicetype_breadcrumbs.html | 2 -- netbox/templates/dcim/moduletype.html | 4 +++- netbox/templates/dcim/moduletype/component_templates.html | 7 ------- 3 files changed, 3 insertions(+), 10 deletions(-) delete mode 100644 netbox/templates/dcim/inc/devicetype_breadcrumbs.html diff --git a/netbox/templates/dcim/inc/devicetype_breadcrumbs.html b/netbox/templates/dcim/inc/devicetype_breadcrumbs.html deleted file mode 100644 index 02f326ddc..000000000 --- a/netbox/templates/dcim/inc/devicetype_breadcrumbs.html +++ /dev/null @@ -1,2 +0,0 @@ - - diff --git a/netbox/templates/dcim/moduletype.html b/netbox/templates/dcim/moduletype.html index f57c501cf..b3d53e09b 100644 --- a/netbox/templates/dcim/moduletype.html +++ b/netbox/templates/dcim/moduletype.html @@ -8,7 +8,9 @@ {% block breadcrumbs %} {{ block.super }} - {% include 'dcim/inc/devicetype_breadcrumbs.html' %} + {% endblock %} {% block extra_controls %} diff --git a/netbox/templates/dcim/moduletype/component_templates.html b/netbox/templates/dcim/moduletype/component_templates.html index 8f4c24478..3cee0bbd9 100644 --- a/netbox/templates/dcim/moduletype/component_templates.html +++ b/netbox/templates/dcim/moduletype/component_templates.html @@ -3,13 +3,6 @@ {% load helpers %} {% load i18n %} -{% block title %}{{ object.manufacturer }} {{ object.model }}{% endblock %} - -{% block breadcrumbs %} - {{ block.super }} - {% include 'dcim/inc/devicetype_breadcrumbs.html' %} -{% endblock %} - {% block extra_controls %} {% include 'dcim/inc/moduletype_buttons.html' %} {% endblock %} From ef6c89ee5de815e2304e59b6042b7dcc9aea383c Mon Sep 17 00:00:00 2001 From: Jeremy Stretch Date: Tue, 7 Jan 2025 10:01:05 -0500 Subject: [PATCH 007/152] Fixes #18324: Correct filter names for certain related object listings --- netbox/dcim/views.py | 44 ++++++++++++++++++++++++++++++++++++++------ 1 file changed, 38 insertions(+), 6 deletions(-) diff --git a/netbox/dcim/views.py b/netbox/dcim/views.py index 9a96b0c7f..0978747d1 100644 --- a/netbox/dcim/views.py +++ b/netbox/dcim/views.py @@ -15,7 +15,7 @@ from jinja2.exceptions import TemplateError from circuits.models import Circuit, CircuitTermination from extras.views import ObjectConfigContextView -from ipam.models import ASN, IPAddress, VLANGroup +from ipam.models import ASN, IPAddress, Prefix, VLANGroup from ipam.tables import InterfaceVLANTable, VLANTranslationRuleTable from netbox.constants import DEFAULT_ACTION_PERMISSIONS from netbox.views import generic @@ -30,8 +30,9 @@ from utilities.views import ( ) from virtualization.filtersets import VirtualMachineFilterSet from virtualization.forms import VirtualMachineFilterForm -from virtualization.models import VirtualMachine +from virtualization.models import Cluster, VirtualMachine from virtualization.tables import VirtualMachineTable +from wireless.models import WirelessLAN from . import filtersets, forms, tables from .choices import DeviceFaceChoices, InterfaceModeChoices from .models import * @@ -238,6 +239,7 @@ class RegionView(GetRelatedModelsMixin, generic.ObjectView): 'related_models': self.get_related_models( request, regions, + omit=(Cluster, Prefix, WirelessLAN), extra=( (Location.objects.restrict(request.user, 'view').filter(site__region__in=regions), 'region_id'), (Rack.objects.restrict(request.user, 'view').filter(site__region__in=regions), 'region_id'), @@ -247,6 +249,11 @@ class RegionView(GetRelatedModelsMixin, generic.ObjectView): ).distinct(), 'region_id' ), + + # Handle these relations manually to avoid erroneous filter name resolution + (Cluster.objects.restrict(request.user, 'view').filter(_region__in=regions), 'region_id'), + (Prefix.objects.restrict(request.user, 'view').filter(_region__in=regions), 'region_id'), + (WirelessLAN.objects.restrict(request.user, 'view').filter(_region__in=regions), 'region_id'), ), ), } @@ -331,6 +338,7 @@ class SiteGroupView(GetRelatedModelsMixin, generic.ObjectView): 'related_models': self.get_related_models( request, groups, + omit=(Cluster, Prefix, WirelessLAN), extra=( (Location.objects.restrict(request.user, 'view').filter(site__group__in=groups), 'site_group_id'), (Rack.objects.restrict(request.user, 'view').filter(site__group__in=groups), 'site_group_id'), @@ -340,6 +348,20 @@ class SiteGroupView(GetRelatedModelsMixin, generic.ObjectView): ).distinct(), 'site_group_id' ), + + # Handle these relations manually to avoid erroneous filter name resolution + ( + Cluster.objects.restrict(request.user, 'view').filter(_site_group__in=groups), + 'site_group_id' + ), + ( + Prefix.objects.restrict(request.user, 'view').filter(_site_group__in=groups), + 'site_group_id' + ), + ( + WirelessLAN.objects.restrict(request.user, 'view').filter(_site_group__in=groups), + 'site_group_id' + ), ), ), } @@ -418,8 +440,8 @@ class SiteView(GetRelatedModelsMixin, generic.ObjectView): 'related_models': self.get_related_models( request, instance, - [CableTermination, CircuitTermination], - ( + omit=(CableTermination, CircuitTermination, Cluster, Prefix, WirelessLAN), + extra=( (VLANGroup.objects.restrict(request.user, 'view').filter( scope_type=ContentType.objects.get_for_model(Site), scope_id=instance.pk @@ -429,6 +451,11 @@ class SiteView(GetRelatedModelsMixin, generic.ObjectView): Circuit.objects.restrict(request.user, 'view').filter(terminations___site=instance).distinct(), 'site_id' ), + + # Handle these relations manually to avoid erroneous filter name resolution + (Cluster.objects.restrict(request.user, 'view').filter(_site=instance), 'site_id'), + (Prefix.objects.restrict(request.user, 'view').filter(_site=instance), 'site_id'), + (WirelessLAN.objects.restrict(request.user, 'view').filter(_site=instance), 'site_id'), ), ), } @@ -506,14 +533,19 @@ class LocationView(GetRelatedModelsMixin, generic.ObjectView): 'related_models': self.get_related_models( request, locations, - [CableTermination], - ( + omit=[CableTermination, Cluster, Prefix, WirelessLAN], + extra=( ( Circuit.objects.restrict(request.user, 'view').filter( terminations___location=instance ).distinct(), 'location_id' ), + + # Handle these relations manually to avoid erroneous filter name resolution + (Cluster.objects.restrict(request.user, 'view').filter(_location=instance), 'location_id'), + (Prefix.objects.restrict(request.user, 'view').filter(_location=instance), 'location_id'), + (WirelessLAN.objects.restrict(request.user, 'view').filter(_location=instance), 'location_id'), ), ), } From 4ae552936256f536abe2701a9cec1c9bf565f77c Mon Sep 17 00:00:00 2001 From: Tobias Genannt Date: Tue, 7 Jan 2025 09:47:11 +0100 Subject: [PATCH 008/152] Fix #18314: Use get to avoid KeyError --- netbox/extras/dashboard/widgets.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/netbox/extras/dashboard/widgets.py b/netbox/extras/dashboard/widgets.py index 6bb7f59fb..eeed5414f 100644 --- a/netbox/extras/dashboard/widgets.py +++ b/netbox/extras/dashboard/widgets.py @@ -314,7 +314,7 @@ class RSSFeedWidget(DashboardWidget): return f'dashboard_rss_{url_checksum}' def get_feed(self): - if self.config['requires_internet'] and settings.ISOLATED_DEPLOYMENT: + if self.config.get('requires_internet') and settings.ISOLATED_DEPLOYMENT: return { 'isolated_deployment': True, } From e518f086040e3b5bfc14f70cc63064cd3893c750 Mon Sep 17 00:00:00 2001 From: bctiemann Date: Tue, 7 Jan 2025 10:47:05 -0500 Subject: [PATCH 009/152] Fixes: #18316 - Fix PrefixIndex reference to 'site' (#18322) * Fix PrefixIndex reference to 'site' * Fix ClusterIndex reference to 'site' and add 'scope' to WirelessLANIndex --- netbox/ipam/search.py | 2 +- netbox/virtualization/search.py | 2 +- netbox/wireless/search.py | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/netbox/ipam/search.py b/netbox/ipam/search.py index d200abacf..6e71d44a5 100644 --- a/netbox/ipam/search.py +++ b/netbox/ipam/search.py @@ -79,7 +79,7 @@ class PrefixIndex(SearchIndex): ('description', 500), ('comments', 5000), ) - display_attrs = ('site', 'vrf', 'tenant', 'vlan', 'status', 'role', 'description') + display_attrs = ('scope', 'vrf', 'tenant', 'vlan', 'status', 'role', 'description') @register_search diff --git a/netbox/virtualization/search.py b/netbox/virtualization/search.py index 18cc06519..8614bf6ea 100644 --- a/netbox/virtualization/search.py +++ b/netbox/virtualization/search.py @@ -10,7 +10,7 @@ class ClusterIndex(SearchIndex): ('description', 500), ('comments', 5000), ) - display_attrs = ('type', 'group', 'status', 'tenant', 'site', 'description') + display_attrs = ('type', 'group', 'status', 'tenant', 'scope', 'description') @register_search diff --git a/netbox/wireless/search.py b/netbox/wireless/search.py index c8ac023cc..e1be53c09 100644 --- a/netbox/wireless/search.py +++ b/netbox/wireless/search.py @@ -11,7 +11,7 @@ class WirelessLANIndex(SearchIndex): ('auth_psk', 2000), ('comments', 5000), ) - display_attrs = ('group', 'status', 'vlan', 'tenant', 'description') + display_attrs = ('group', 'status', 'vlan', 'tenant', 'scope', 'description') @register_search From ffac0974dd31c5824f665aa8077f010581a6cfdf Mon Sep 17 00:00:00 2001 From: github-actions <41898282+github-actions[bot]@users.noreply.github.com> Date: Wed, 8 Jan 2025 05:02:12 +0000 Subject: [PATCH 010/152] Update source translation strings --- netbox/translations/en/LC_MESSAGES/django.po | 82 ++++++++++---------- 1 file changed, 41 insertions(+), 41 deletions(-) diff --git a/netbox/translations/en/LC_MESSAGES/django.po b/netbox/translations/en/LC_MESSAGES/django.po index 8a7614860..300b70000 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: 2025-01-07 05:02+0000\n" +"POT-Creation-Date: 2025-01-08 05:02+0000\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -512,7 +512,7 @@ msgstr "" #: netbox/templates/dcim/macaddress.html:21 #: netbox/templates/dcim/manufacturer.html:40 #: netbox/templates/dcim/module.html:73 netbox/templates/dcim/modulebay.html:42 -#: netbox/templates/dcim/moduletype.html:37 +#: netbox/templates/dcim/moduletype.html:39 #: netbox/templates/dcim/platform.html:33 #: netbox/templates/dcim/powerfeed.html:40 #: netbox/templates/dcim/poweroutlet.html:40 @@ -3914,7 +3914,7 @@ msgstr "" #: netbox/templates/dcim/inventoryitem.html:48 #: netbox/templates/dcim/manufacturer.html:33 #: netbox/templates/dcim/modulebay.html:62 -#: netbox/templates/dcim/moduletype.html:25 +#: netbox/templates/dcim/moduletype.html:27 #: netbox/templates/dcim/platform.html:37 #: netbox/templates/dcim/racktype.html:16 msgid "Manufacturer" @@ -3980,7 +3980,7 @@ msgstr "" #: netbox/extras/forms/filtersets.py:243 netbox/ipam/forms/bulk_edit.py:193 #: netbox/templates/dcim/device.html:324 #: netbox/templates/dcim/devicetype.html:49 -#: netbox/templates/dcim/moduletype.html:45 netbox/templates/dcim/rack.html:81 +#: netbox/templates/dcim/moduletype.html:47 netbox/templates/dcim/rack.html:81 #: netbox/templates/dcim/racktype.html:41 #: netbox/templates/extras/configcontext.html:17 #: netbox/templates/extras/customlink.html:25 @@ -4052,7 +4052,7 @@ msgstr "" #: netbox/dcim/forms/filtersets.py:512 netbox/dcim/forms/filtersets.py:670 #: netbox/dcim/forms/filtersets.py:805 netbox/templates/dcim/device.html:98 #: netbox/templates/dcim/devicetype.html:65 -#: netbox/templates/dcim/moduletype.html:41 netbox/templates/dcim/rack.html:65 +#: netbox/templates/dcim/moduletype.html:43 netbox/templates/dcim/rack.html:65 #: netbox/templates/dcim/racktype.html:28 msgid "Airflow" msgstr "" @@ -4115,7 +4115,7 @@ msgstr "" #: netbox/dcim/forms/bulk_edit.py:601 netbox/dcim/forms/model_forms.py:410 #: netbox/dcim/tables/modules.py:17 netbox/dcim/tables/modules.py:66 #: netbox/templates/dcim/module.html:65 netbox/templates/dcim/modulebay.html:66 -#: netbox/templates/dcim/moduletype.html:22 +#: netbox/templates/dcim/moduletype.html:24 msgid "Module Type" msgstr "" @@ -7045,8 +7045,8 @@ msgid "Power outlets" msgstr "" #: netbox/dcim/tables/devices.py:256 netbox/dcim/tables/devices.py:1112 -#: netbox/dcim/tables/devicetypes.py:128 netbox/dcim/views.py:1112 -#: netbox/dcim/views.py:1356 netbox/dcim/views.py:2107 +#: netbox/dcim/tables/devicetypes.py:128 netbox/dcim/views.py:1144 +#: netbox/dcim/views.py:1388 netbox/dcim/views.py:2139 #: netbox/netbox/navigation/menu.py:94 netbox/netbox/navigation/menu.py:258 #: netbox/templates/dcim/device/base.html:37 #: netbox/templates/dcim/device_list.html:43 @@ -7084,8 +7084,8 @@ msgid "Module Bay" msgstr "" #: netbox/dcim/tables/devices.py:327 netbox/dcim/tables/devicetypes.py:47 -#: netbox/dcim/tables/devicetypes.py:143 netbox/dcim/views.py:1187 -#: netbox/dcim/views.py:2205 netbox/netbox/navigation/menu.py:103 +#: netbox/dcim/tables/devicetypes.py:143 netbox/dcim/views.py:1219 +#: netbox/dcim/views.py:2237 netbox/netbox/navigation/menu.py:103 #: netbox/templates/dcim/device/base.html:52 #: netbox/templates/dcim/device_list.html:71 #: netbox/templates/dcim/devicetype/base.html:49 @@ -7214,8 +7214,8 @@ msgstr "" msgid "Instances" msgstr "" -#: netbox/dcim/tables/devicetypes.py:116 netbox/dcim/views.py:1052 -#: netbox/dcim/views.py:1296 netbox/dcim/views.py:2043 +#: netbox/dcim/tables/devicetypes.py:116 netbox/dcim/views.py:1084 +#: netbox/dcim/views.py:1328 netbox/dcim/views.py:2075 #: netbox/netbox/navigation/menu.py:97 #: netbox/templates/dcim/device/base.html:25 #: netbox/templates/dcim/device_list.html:15 @@ -7225,8 +7225,8 @@ msgstr "" msgid "Console Ports" msgstr "" -#: netbox/dcim/tables/devicetypes.py:119 netbox/dcim/views.py:1067 -#: netbox/dcim/views.py:1311 netbox/dcim/views.py:2059 +#: netbox/dcim/tables/devicetypes.py:119 netbox/dcim/views.py:1099 +#: netbox/dcim/views.py:1343 netbox/dcim/views.py:2091 #: netbox/netbox/navigation/menu.py:98 #: netbox/templates/dcim/device/base.html:28 #: netbox/templates/dcim/device_list.html:22 @@ -7236,8 +7236,8 @@ msgstr "" msgid "Console Server Ports" msgstr "" -#: netbox/dcim/tables/devicetypes.py:122 netbox/dcim/views.py:1082 -#: netbox/dcim/views.py:1326 netbox/dcim/views.py:2075 +#: netbox/dcim/tables/devicetypes.py:122 netbox/dcim/views.py:1114 +#: netbox/dcim/views.py:1358 netbox/dcim/views.py:2107 #: netbox/netbox/navigation/menu.py:99 #: netbox/templates/dcim/device/base.html:31 #: netbox/templates/dcim/device_list.html:29 @@ -7247,8 +7247,8 @@ msgstr "" msgid "Power Ports" msgstr "" -#: netbox/dcim/tables/devicetypes.py:125 netbox/dcim/views.py:1097 -#: netbox/dcim/views.py:1341 netbox/dcim/views.py:2091 +#: netbox/dcim/tables/devicetypes.py:125 netbox/dcim/views.py:1129 +#: netbox/dcim/views.py:1373 netbox/dcim/views.py:2123 #: netbox/netbox/navigation/menu.py:100 #: netbox/templates/dcim/device/base.html:34 #: netbox/templates/dcim/device_list.html:36 @@ -7258,8 +7258,8 @@ msgstr "" msgid "Power Outlets" msgstr "" -#: netbox/dcim/tables/devicetypes.py:131 netbox/dcim/views.py:1127 -#: netbox/dcim/views.py:1371 netbox/dcim/views.py:2129 +#: netbox/dcim/tables/devicetypes.py:131 netbox/dcim/views.py:1159 +#: netbox/dcim/views.py:1403 netbox/dcim/views.py:2161 #: netbox/netbox/navigation/menu.py:95 #: netbox/templates/dcim/device/base.html:40 #: netbox/templates/dcim/devicetype/base.html:37 @@ -7268,8 +7268,8 @@ msgstr "" msgid "Front Ports" msgstr "" -#: netbox/dcim/tables/devicetypes.py:134 netbox/dcim/views.py:1142 -#: netbox/dcim/views.py:1386 netbox/dcim/views.py:2145 +#: netbox/dcim/tables/devicetypes.py:134 netbox/dcim/views.py:1174 +#: netbox/dcim/views.py:1418 netbox/dcim/views.py:2177 #: netbox/netbox/navigation/menu.py:96 #: netbox/templates/dcim/device/base.html:43 #: netbox/templates/dcim/device_list.html:50 @@ -7279,16 +7279,16 @@ msgstr "" msgid "Rear Ports" msgstr "" -#: netbox/dcim/tables/devicetypes.py:137 netbox/dcim/views.py:1172 -#: netbox/dcim/views.py:2185 netbox/netbox/navigation/menu.py:102 +#: netbox/dcim/tables/devicetypes.py:137 netbox/dcim/views.py:1204 +#: netbox/dcim/views.py:2217 netbox/netbox/navigation/menu.py:102 #: netbox/templates/dcim/device/base.html:49 #: netbox/templates/dcim/device_list.html:57 #: netbox/templates/dcim/devicetype/base.html:46 msgid "Device Bays" msgstr "" -#: netbox/dcim/tables/devicetypes.py:140 netbox/dcim/views.py:1157 -#: netbox/dcim/views.py:1401 netbox/dcim/views.py:2165 +#: netbox/dcim/tables/devicetypes.py:140 netbox/dcim/views.py:1189 +#: netbox/dcim/views.py:1433 netbox/dcim/views.py:2197 #: netbox/netbox/navigation/menu.py:101 #: netbox/templates/dcim/device/base.html:46 #: netbox/templates/dcim/device_list.html:64 @@ -7353,67 +7353,67 @@ msgstr "" msgid "Test case must set peer_termination_type" msgstr "" -#: netbox/dcim/views.py:138 +#: netbox/dcim/views.py:139 #, python-brace-format msgid "Disconnected {count} {type}" msgstr "" -#: netbox/dcim/views.py:794 netbox/netbox/navigation/menu.py:51 +#: netbox/dcim/views.py:826 netbox/netbox/navigation/menu.py:51 msgid "Reservations" msgstr "" -#: netbox/dcim/views.py:813 netbox/templates/dcim/location.html:90 +#: netbox/dcim/views.py:845 netbox/templates/dcim/location.html:90 #: netbox/templates/dcim/site.html:140 msgid "Non-Racked Devices" msgstr "" -#: netbox/dcim/views.py:2218 netbox/extras/forms/model_forms.py:577 +#: netbox/dcim/views.py:2250 netbox/extras/forms/model_forms.py:577 #: netbox/templates/extras/configcontext.html:10 #: netbox/virtualization/forms/model_forms.py:224 #: netbox/virtualization/views.py:424 msgid "Config Context" msgstr "" -#: netbox/dcim/views.py:2228 netbox/virtualization/views.py:434 +#: netbox/dcim/views.py:2260 netbox/virtualization/views.py:434 msgid "Render Config" msgstr "" -#: netbox/dcim/views.py:2263 netbox/virtualization/views.py:469 +#: netbox/dcim/views.py:2295 netbox/virtualization/views.py:469 #, python-brace-format msgid "An error occurred while rendering the template: {error}" msgstr "" -#: netbox/dcim/views.py:2281 netbox/extras/tables/tables.py:550 +#: netbox/dcim/views.py:2313 netbox/extras/tables/tables.py:550 #: netbox/netbox/navigation/menu.py:255 netbox/netbox/navigation/menu.py:257 #: netbox/virtualization/views.py:192 msgid "Virtual Machines" msgstr "" -#: netbox/dcim/views.py:3114 +#: netbox/dcim/views.py:3146 #, python-brace-format msgid "Installed device {device} in bay {device_bay}." msgstr "" -#: netbox/dcim/views.py:3155 +#: netbox/dcim/views.py:3187 #, python-brace-format msgid "Removed device {device} from bay {device_bay}." msgstr "" -#: netbox/dcim/views.py:3271 netbox/ipam/tables/ip.py:180 +#: netbox/dcim/views.py:3303 netbox/ipam/tables/ip.py:180 msgid "Children" msgstr "" -#: netbox/dcim/views.py:3738 +#: netbox/dcim/views.py:3770 #, python-brace-format msgid "Added member {device}" msgstr "" -#: netbox/dcim/views.py:3787 +#: netbox/dcim/views.py:3819 #, python-brace-format msgid "Unable to remove master device {device} from the virtual chassis." msgstr "" -#: netbox/dcim/views.py:3800 +#: netbox/dcim/views.py:3832 #, python-brace-format msgid "Removed {device} from virtual chassis {chassis}" msgstr "" @@ -12919,12 +12919,12 @@ msgid "VM Role" msgstr "" #: netbox/templates/dcim/devicetype.html:18 -#: netbox/templates/dcim/moduletype.html:29 +#: netbox/templates/dcim/moduletype.html:31 msgid "Model Name" msgstr "" #: netbox/templates/dcim/devicetype.html:25 -#: netbox/templates/dcim/moduletype.html:33 +#: netbox/templates/dcim/moduletype.html:35 msgid "Part Number" msgstr "" From 53aa2c862495999c1b7223602abad9a1cf397d9b Mon Sep 17 00:00:00 2001 From: Jeremy Stretch Date: Wed, 8 Jan 2025 08:43:17 -0500 Subject: [PATCH 011/152] Fixes #18329: Pin strawberry-graphql-django to v0.52.0 to resolve upstream bug --- base_requirements.txt | 3 ++- requirements.txt | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/base_requirements.txt b/base_requirements.txt index 169f4196d..4cb355dd5 100644 --- a/base_requirements.txt +++ b/base_requirements.txt @@ -134,7 +134,8 @@ strawberry-graphql # Strawberry GraphQL Django extension # https://github.com/strawberry-graphql/strawberry-django/releases -strawberry-graphql-django +# Pinned to v0.52.0 for suspected upstream bug; see #18329 +strawberry-graphql-django==0.52.0 # SVG image rendering (used for rack elevations) # https://github.com/mozman/svgwrite/blob/master/NEWS.rst diff --git a/requirements.txt b/requirements.txt index e5ffe8386..b875ae5a2 100644 --- a/requirements.txt +++ b/requirements.txt @@ -32,7 +32,7 @@ rq==2.1.0 social-auth-app-django==5.4.2 social-auth-core==4.5.4 strawberry-graphql==0.256.1 -strawberry-graphql-django==0.53.1 +strawberry-graphql-django==0.52.0 svgwrite==1.4.3 tablib==3.7.0 tzdata==2024.2 From 4456c488f106614ddf98c406018024f9c86add50 Mon Sep 17 00:00:00 2001 From: Brian Tiemann Date: Tue, 7 Jan 2025 15:58:42 -0500 Subject: [PATCH 012/152] Change PrefixTable.vlan to represent the VLAN ID rather than the VLAN object, to enable more useful sorting by VLAN ID rather than site-grouped VLAN objects --- netbox/ipam/tables/ip.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/netbox/ipam/tables/ip.py b/netbox/ipam/tables/ip.py index dbbeb3454..bc343b175 100644 --- a/netbox/ipam/tables/ip.py +++ b/netbox/ipam/tables/ip.py @@ -200,8 +200,9 @@ class PrefixTable(TenancyColumnsMixin, NetBoxTable): verbose_name=_('VLAN Group') ) vlan = tables.Column( + accessor='vlan__vid', linkify=True, - verbose_name=_('VLAN') + verbose_name=_('VLAN ID') ) role = tables.Column( verbose_name=_('Role'), From f6b8c1966def51cece2a007f8008b9be1a1fc344 Mon Sep 17 00:00:00 2001 From: Brian Tiemann Date: Wed, 8 Jan 2025 09:38:24 -0500 Subject: [PATCH 013/152] Use order_by to change ordering behavior of VLAN column rather than changing accessor --- netbox/ipam/tables/ip.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/netbox/ipam/tables/ip.py b/netbox/ipam/tables/ip.py index bc343b175..17ba36de9 100644 --- a/netbox/ipam/tables/ip.py +++ b/netbox/ipam/tables/ip.py @@ -200,9 +200,9 @@ class PrefixTable(TenancyColumnsMixin, NetBoxTable): verbose_name=_('VLAN Group') ) vlan = tables.Column( - accessor='vlan__vid', + order_by=('vlan__vid', 'vlan__pk'), linkify=True, - verbose_name=_('VLAN ID') + verbose_name=_('VLAN') ) role = tables.Column( verbose_name=_('Role'), From d04fc11c61684b8ebfcace4328087a14458bf747 Mon Sep 17 00:00:00 2001 From: Jeremy Stretch Date: Wed, 8 Jan 2025 10:19:28 -0500 Subject: [PATCH 014/152] Release v4.2.1 (#18346) * Release v4.2.1 * Add changelog for #18282 --- .../ISSUE_TEMPLATE/01-feature_request.yaml | 2 +- .github/ISSUE_TEMPLATE/02-bug_report.yaml | 2 +- docs/release-notes/version-4.2.md | 13 ++ netbox/release.yaml | 4 +- netbox/translations/cs/LC_MESSAGES/django.mo | Bin 229001 -> 230181 bytes netbox/translations/cs/LC_MESSAGES/django.po | 174 +++++++++--------- 6 files changed, 105 insertions(+), 90 deletions(-) diff --git a/.github/ISSUE_TEMPLATE/01-feature_request.yaml b/.github/ISSUE_TEMPLATE/01-feature_request.yaml index 7cb6057ea..f415f933a 100644 --- a/.github/ISSUE_TEMPLATE/01-feature_request.yaml +++ b/.github/ISSUE_TEMPLATE/01-feature_request.yaml @@ -14,7 +14,7 @@ body: attributes: label: NetBox version description: What version of NetBox are you currently running? - placeholder: v4.2.0 + placeholder: v4.2.1 validations: required: true - type: dropdown diff --git a/.github/ISSUE_TEMPLATE/02-bug_report.yaml b/.github/ISSUE_TEMPLATE/02-bug_report.yaml index e2145543d..0e0839849 100644 --- a/.github/ISSUE_TEMPLATE/02-bug_report.yaml +++ b/.github/ISSUE_TEMPLATE/02-bug_report.yaml @@ -39,7 +39,7 @@ body: attributes: label: NetBox Version description: What version of NetBox are you currently running? - placeholder: v4.2.0 + placeholder: v4.2.1 validations: required: true - type: dropdown diff --git a/docs/release-notes/version-4.2.md b/docs/release-notes/version-4.2.md index fdbc09114..a1dafaf14 100644 --- a/docs/release-notes/version-4.2.md +++ b/docs/release-notes/version-4.2.md @@ -1,5 +1,18 @@ # NetBox v4.2 +## v4.2.1 (2025-01-08) + +### Bug Fixes + +* [#18282](https://github.com/netbox-community/netbox/issues/18282) - Fix ordering of prefixes list by assigned VLAN +* [#18314](https://github.com/netbox-community/netbox/issues/18314) - Fix KeyError exception when rendering pre-saved dashboard (`requires_internet` missing) +* [#18316](https://github.com/netbox-community/netbox/issues/18316) - Fix AttributeError exception when global search results include prefixes and/or clusters +* [#18318](https://github.com/netbox-community/netbox/issues/18318) - Correct navigation breadcrumbs for module type UI view +* [#18324](https://github.com/netbox-community/netbox/issues/18324) - Correct filtering for certain related object listings +* [#18329](https://github.com/netbox-community/netbox/issues/18329) - Address upstream bug in GraphQL API where only one primary IP address is returned within a device/VM list + +--- + ## v4.2.0 (2025-01-06) ### Breaking Changes diff --git a/netbox/release.yaml b/netbox/release.yaml index c7919b91e..4127b0253 100644 --- a/netbox/release.yaml +++ b/netbox/release.yaml @@ -1,3 +1,3 @@ -version: "4.2.0" +version: "4.2.1" edition: "Community" -published: "2025-01-06" +published: "2025-01-08" diff --git a/netbox/translations/cs/LC_MESSAGES/django.mo b/netbox/translations/cs/LC_MESSAGES/django.mo index d5a4db33b04995480ff2dc5c859441221e56be14..964d8f54c07d09f825b4212b35d61b079f85033e 100644 GIT binary patch delta 67285 zcmXuscfgj@|G@FPr;LVDk%sc5y@z(%N=rkfMI{xfl+2{=B9V{~Nk#~vFACX;A`y|Y zg(wOsigzJ#WFEqY@L9YH2Nf!iIUP4+Ev#@vfy|NE8JlBI z?2far8-9T8u-uUaGW~Hd_QU_-1p3e99aSLHg^Edd0j|PMn16I~6gH;(Soj6Drd+&m zfy^N6jxF#ZY>HoETP#(iK&C79MFUl7tW`p-1xq9IO0Q~SU08??bv#gbjo z5l=^_jOCR|9hE`ftBh{n#^}hpp#hy0<ytz0-4_hLDGBFgK~ z2REY~ZbJjxk9JtFbPDV^bi@_W#at8JCH2t&24QVHAI

;Zkhr{(pgsX59D<8(^*D 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≷&UU^DQLoiR&kx=r9QPR|;jE>pmE?^g?;-OEXpUxH z)J-Q>nH;KGu&+qdB{~M@~_6%2{qk@DA&O z6uw~14JLn;_qP->qI92KY(wNF#B7kdS;0A0=okL<_&+eNTZ3w#niYwRctS=a8jv+G zP8@V2;OmRdWb|8E1LAbl&;R zY%c3F%w^>bYto!Qv2?b6XqXb6(ePu~iFlIiwEWONPu%nTD^QfN7RN>ivuG%r6&?uj zF}~1=LFX_5^L&7ySX< zK19P>@CixX89fMIr$bqNcD>NVUeI6~3IrJcExF@tr{bnZJTbTu{#C|v#u|#3RI?O4 z!F&N4kMW<>Wzt7!ujR!tf?`!YzY8+SdQ|ic<+_q0n*yUR%z>b+JCaqIH^kT04!Hy^ z#fM*qEzBkU(EKZOmiUL^uZ3Usl-#KJev%W#Y8=-OW(q;dgJV9um!yFx6j%k;A>ksv zIf%(hGs;mQEjR+-UWC`f`D#U@_?!PJu3Hdv_ z_F70gqTdv#jemp%Hj$XhF4-jJ&4?G_6k2jp$MhSXkEI zS+BJkwg*=L{)1@0*MqqjqO2vm_-n+KBz;5B*Y?_a7rZ3!+95ENW=hjQHj8~EAvy8x zG#8BTn(3{9_n0~x$+-b$h1U&VQhhK#KsN^{7z{bT?e-SFXeN4y`32&+!4D)xF@F?x zUmCIbwt)cFb;*y1aA*q2im47`_lLw#e?>8z&@U6*yB|`_NneA83Ke*RizXCCWk8bn} z9VYm}4!;u-gSQ;>OIxK6 z&YC^AM{57aF~b~L*!9rbu5Ee+k16QCCUbC52meG-gGUeWuOA^e+*tpr8G Date: Thu, 9 Jan 2025 05:02:09 +0000 Subject: [PATCH 015/152] Update source translation strings --- netbox/translations/en/LC_MESSAGES/django.po | 48 ++++++++++---------- 1 file changed, 24 insertions(+), 24 deletions(-) diff --git a/netbox/translations/en/LC_MESSAGES/django.po b/netbox/translations/en/LC_MESSAGES/django.po index 300b70000..2c22df58a 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: 2025-01-08 05:02+0000\n" +"POT-Creation-Date: 2025-01-09 05:01+0000\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -766,8 +766,8 @@ msgstr "" #: netbox/ipam/forms/filtersets.py:212 netbox/ipam/forms/filtersets.py:284 #: netbox/ipam/forms/filtersets.py:358 netbox/ipam/forms/filtersets.py:542 #: netbox/ipam/forms/model_forms.py:503 netbox/ipam/tables/ip.py:183 -#: netbox/ipam/tables/ip.py:262 netbox/ipam/tables/ip.py:313 -#: netbox/ipam/tables/ip.py:376 netbox/ipam/tables/ip.py:403 +#: netbox/ipam/tables/ip.py:263 netbox/ipam/tables/ip.py:314 +#: netbox/ipam/tables/ip.py:377 netbox/ipam/tables/ip.py:404 #: netbox/ipam/tables/vlans.py:95 netbox/ipam/tables/vlans.py:208 #: netbox/templates/circuits/circuit.html:34 #: netbox/templates/circuits/virtualcircuit.html:43 @@ -844,7 +844,7 @@ msgstr "" #: netbox/ipam/forms/filtersets.py:122 netbox/ipam/forms/filtersets.py:145 #: netbox/ipam/forms/filtersets.py:176 netbox/ipam/forms/filtersets.py:270 #: netbox/ipam/forms/filtersets.py:313 netbox/ipam/forms/filtersets.py:510 -#: netbox/ipam/tables/ip.py:406 netbox/ipam/tables/vlans.py:205 +#: netbox/ipam/tables/ip.py:407 netbox/ipam/tables/vlans.py:205 #: netbox/templates/circuits/circuit.html:48 #: netbox/templates/circuits/circuitgroup.html:36 #: netbox/templates/circuits/virtualcircuit.html:47 @@ -1078,8 +1078,8 @@ msgstr "" #: netbox/ipam/forms/filtersets.py:292 netbox/ipam/forms/filtersets.py:363 #: netbox/ipam/forms/filtersets.py:550 netbox/ipam/forms/model_forms.py:194 #: netbox/ipam/forms/model_forms.py:220 netbox/ipam/forms/model_forms.py:251 -#: netbox/ipam/forms/model_forms.py:678 netbox/ipam/tables/ip.py:207 -#: netbox/ipam/tables/ip.py:266 netbox/ipam/tables/ip.py:317 +#: netbox/ipam/forms/model_forms.py:678 netbox/ipam/tables/ip.py:208 +#: netbox/ipam/tables/ip.py:267 netbox/ipam/tables/ip.py:318 #: netbox/ipam/tables/vlans.py:99 netbox/ipam/tables/vlans.py:211 #: netbox/templates/circuits/virtualcircuittermination.html:42 #: netbox/templates/dcim/device.html:182 @@ -1191,7 +1191,7 @@ msgstr "" #: netbox/dcim/tables/connections.py:65 netbox/dcim/tables/devices.py:1140 #: netbox/ipam/forms/bulk_import.py:317 netbox/ipam/forms/model_forms.py:282 #: netbox/ipam/forms/model_forms.py:291 netbox/ipam/tables/fhrp.py:64 -#: netbox/ipam/tables/ip.py:322 netbox/ipam/tables/vlans.py:145 +#: netbox/ipam/tables/ip.py:323 netbox/ipam/tables/vlans.py:145 #: netbox/templates/circuits/inc/circuit_termination_fields.html:52 #: netbox/templates/circuits/virtualcircuittermination.html:53 #: netbox/templates/circuits/virtualcircuittermination.html:60 @@ -1831,8 +1831,8 @@ msgstr "" #: netbox/dcim/tables/racks.py:224 netbox/dcim/tables/sites.py:108 #: netbox/extras/tables/tables.py:582 netbox/ipam/tables/asn.py:69 #: netbox/ipam/tables/fhrp.py:34 netbox/ipam/tables/ip.py:82 -#: netbox/ipam/tables/ip.py:224 netbox/ipam/tables/ip.py:279 -#: netbox/ipam/tables/ip.py:347 netbox/ipam/tables/services.py:24 +#: netbox/ipam/tables/ip.py:225 netbox/ipam/tables/ip.py:280 +#: netbox/ipam/tables/ip.py:348 netbox/ipam/tables/services.py:24 #: netbox/ipam/tables/services.py:54 netbox/ipam/tables/vlans.py:121 #: netbox/ipam/tables/vrfs.py:47 netbox/ipam/tables/vrfs.py:72 #: netbox/templates/dcim/htmx/cable_edit.html:89 @@ -3009,7 +3009,7 @@ msgstr "" #: netbox/dcim/tables/devices.py:689 netbox/dcim/tables/devices.py:899 #: netbox/dcim/tables/devices.py:986 netbox/dcim/tables/devices.py:1146 #: netbox/extras/tables/tables.py:223 netbox/ipam/tables/fhrp.py:59 -#: netbox/ipam/tables/ip.py:328 netbox/ipam/tables/services.py:44 +#: netbox/ipam/tables/ip.py:329 netbox/ipam/tables/services.py:44 #: netbox/templates/dcim/interface.html:108 #: netbox/templates/dcim/interface.html:366 #: netbox/templates/dcim/location.html:41 netbox/templates/dcim/region.html:37 @@ -3688,8 +3688,8 @@ msgstr "" #: netbox/ipam/forms/model_forms.py:480 netbox/ipam/forms/model_forms.py:494 #: netbox/ipam/models/ip.py:217 netbox/ipam/models/ip.py:498 #: netbox/ipam/models/ip.py:719 netbox/ipam/models/vrfs.py:61 -#: netbox/ipam/tables/ip.py:188 netbox/ipam/tables/ip.py:259 -#: netbox/ipam/tables/ip.py:310 netbox/ipam/tables/ip.py:400 +#: netbox/ipam/tables/ip.py:188 netbox/ipam/tables/ip.py:260 +#: netbox/ipam/tables/ip.py:311 netbox/ipam/tables/ip.py:401 #: netbox/templates/dcim/interface.html:152 #: netbox/templates/ipam/ipaddress.html:18 #: netbox/templates/ipam/iprange.html:40 netbox/templates/ipam/prefix.html:19 @@ -6994,8 +6994,8 @@ msgstr "" #: netbox/dcim/tables/devices.py:197 netbox/dcim/tables/devices.py:1099 #: netbox/ipam/forms/bulk_import.py:562 netbox/ipam/forms/model_forms.py:308 -#: netbox/ipam/forms/model_forms.py:321 netbox/ipam/tables/ip.py:306 -#: netbox/ipam/tables/ip.py:373 netbox/ipam/tables/ip.py:396 +#: netbox/ipam/forms/model_forms.py:321 netbox/ipam/tables/ip.py:307 +#: netbox/ipam/tables/ip.py:374 netbox/ipam/tables/ip.py:397 #: netbox/templates/ipam/ipaddress.html:11 #: netbox/virtualization/tables/virtualmachines.py:65 msgid "IP Address" @@ -9658,7 +9658,7 @@ msgstr "" #: netbox/ipam/forms/bulk_edit.py:218 netbox/ipam/forms/bulk_import.py:181 #: netbox/ipam/forms/filtersets.py:259 netbox/ipam/forms/model_forms.py:217 -#: netbox/ipam/models/vlans.py:272 netbox/ipam/tables/ip.py:204 +#: netbox/ipam/models/vlans.py:272 netbox/ipam/tables/ip.py:205 #: netbox/templates/ipam/prefix.html:56 netbox/templates/ipam/vlan.html:12 #: netbox/templates/ipam/vlan/base.html:6 #: netbox/templates/ipam/vlan_edit.html:10 @@ -10516,8 +10516,8 @@ msgstr "" msgid "Prefixes" msgstr "" -#: netbox/ipam/tables/ip.py:77 netbox/ipam/tables/ip.py:219 -#: netbox/ipam/tables/ip.py:274 netbox/ipam/tables/vlans.py:55 +#: netbox/ipam/tables/ip.py:77 netbox/ipam/tables/ip.py:220 +#: netbox/ipam/tables/ip.py:275 netbox/ipam/tables/vlans.py:55 #: netbox/templates/dcim/device.html:260 #: netbox/templates/ipam/aggregate.html:24 #: netbox/templates/ipam/iprange.html:29 netbox/templates/ipam/prefix.html:102 @@ -10542,31 +10542,31 @@ msgstr "" msgid "Scope Type" msgstr "" -#: netbox/ipam/tables/ip.py:211 +#: netbox/ipam/tables/ip.py:212 msgid "Pool" msgstr "" -#: netbox/ipam/tables/ip.py:215 netbox/ipam/tables/ip.py:270 +#: netbox/ipam/tables/ip.py:216 netbox/ipam/tables/ip.py:271 msgid "Marked Utilized" msgstr "" -#: netbox/ipam/tables/ip.py:254 +#: netbox/ipam/tables/ip.py:255 msgid "Start address" msgstr "" -#: netbox/ipam/tables/ip.py:333 +#: netbox/ipam/tables/ip.py:334 msgid "NAT (Inside)" msgstr "" -#: netbox/ipam/tables/ip.py:338 +#: netbox/ipam/tables/ip.py:339 msgid "NAT (Outside)" msgstr "" -#: netbox/ipam/tables/ip.py:343 +#: netbox/ipam/tables/ip.py:344 msgid "Assigned" msgstr "" -#: netbox/ipam/tables/ip.py:379 netbox/templates/vpn/l2vpntermination.html:16 +#: netbox/ipam/tables/ip.py:380 netbox/templates/vpn/l2vpntermination.html:16 #: netbox/vpn/forms/filtersets.py:240 msgid "Assigned Object" msgstr "" From 80e1fd02bbcde9ab8082cc093536bb6b81f63b76 Mon Sep 17 00:00:00 2001 From: Brian Tiemann Date: Thu, 9 Jan 2025 10:26:17 -0500 Subject: [PATCH 016/152] Update docs to indicate PostgreSQL 13+ requirement --- docs/installation/index.md | 2 +- docs/installation/upgrading.md | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/installation/index.md b/docs/installation/index.md index 76160068a..33888e274 100644 --- a/docs/installation/index.md +++ b/docs/installation/index.md @@ -21,7 +21,7 @@ The following sections detail how to set up a new instance of NetBox: | Dependency | Supported Versions | |------------|--------------------| | Python | 3.10, 3.11, 3.12 | -| PostgreSQL | 12+ | +| PostgreSQL | 13+ | | Redis | 4.0+ | Below is a simplified overview of the NetBox application stack for reference: diff --git a/docs/installation/upgrading.md b/docs/installation/upgrading.md index 5b844f1c3..e6d05738f 100644 --- a/docs/installation/upgrading.md +++ b/docs/installation/upgrading.md @@ -20,7 +20,7 @@ NetBox requires the following dependencies: | Dependency | Supported Versions | |------------|--------------------| | Python | 3.10, 3.11, 3.12 | -| PostgreSQL | 12+ | +| PostgreSQL | 13+ | | Redis | 4.0+ | ## 3. Install the Latest Release From b11f17952732904472279ac4238c1ba0b849c186 Mon Sep 17 00:00:00 2001 From: Jeremy Stretch Date: Thu, 9 Jan 2025 09:53:28 -0500 Subject: [PATCH 017/152] Closes #18362: Create a system job for census reporting --- netbox/core/jobs.py | 48 +++++++++++++++++++++++++++++++++++++-- netbox/netbox/settings.py | 13 ----------- 2 files changed, 46 insertions(+), 15 deletions(-) diff --git a/netbox/core/jobs.py b/netbox/core/jobs.py index d2b846398..891b1cbdb 100644 --- a/netbox/core/jobs.py +++ b/netbox/core/jobs.py @@ -1,8 +1,11 @@ import logging +import requests +import sys -from netbox.jobs import JobRunner +from django.conf import settings +from netbox.jobs import JobRunner, system_job from netbox.search.backends import search_backend -from .choices import DataSourceStatusChoices +from .choices import DataSourceStatusChoices, JobIntervalChoices from .exceptions import SyncError from .models import DataSource @@ -31,3 +34,44 @@ class SyncDataSourceJob(JobRunner): if type(e) is SyncError: logging.error(e) raise e + + +@system_job(interval=JobIntervalChoices.INTERVAL_DAILY) +class SystemHousekeepingJob(JobRunner): + """ + Perform daily system housekeeping functions. + """ + class Meta: + name = "System Housekeeping" + + def run(self, *args, **kwargs): + # Skip if running in development or test mode + if settings.DEBUG or 'test' in sys.argv: + return + + # TODO: Migrate other housekeeping functions from the `housekeeping` management command. + self.send_census_report() + + @staticmethod + def send_census_report(): + """ + Send a census report (if enabled). + """ + # Skip if census reporting is disabled + if settings.ISOLATED_DEPLOYMENT or not settings.CENSUS_REPORTING_ENABLED: + return + + census_data = { + 'version': settings.RELEASE.full_version, + 'python_version': sys.version.split()[0], + 'deployment_id': settings.DEPLOYMENT_ID, + } + try: + requests.get( + url=settings.CENSUS_URL, + params=census_data, + timeout=3, + proxies=settings.HTTP_PROXIES + ) + except requests.exceptions.RequestException: + pass diff --git a/netbox/netbox/settings.py b/netbox/netbox/settings.py index 0682e713d..581cd9ef4 100644 --- a/netbox/netbox/settings.py +++ b/netbox/netbox/settings.py @@ -5,9 +5,7 @@ import os import platform import sys import warnings -from urllib.parse import urlencode -import requests from django.contrib.messages import constants as messages from django.core.exceptions import ImproperlyConfigured, ValidationError from django.core.validators import URLValidator @@ -583,17 +581,6 @@ if SENTRY_ENABLED: # Calculate a unique deployment ID from the secret key DEPLOYMENT_ID = hashlib.sha256(SECRET_KEY.encode('utf-8')).hexdigest()[:16] CENSUS_URL = 'https://census.netbox.oss.netboxlabs.com/api/v1/' -CENSUS_PARAMS = { - 'version': RELEASE.full_version, - 'python_version': sys.version.split()[0], - 'deployment_id': DEPLOYMENT_ID, -} -if CENSUS_REPORTING_ENABLED and not ISOLATED_DEPLOYMENT and not DEBUG and 'test' not in sys.argv: - try: - # Report anonymous census data - requests.get(f'{CENSUS_URL}?{urlencode(CENSUS_PARAMS)}', timeout=3, proxies=HTTP_PROXIES) - except requests.exceptions.RequestException: - pass # From b12c8c880f77acb5dac4e95c237a2cb654e72e6d Mon Sep 17 00:00:00 2001 From: Jeremy Stretch Date: Thu, 9 Jan 2025 13:55:19 -0500 Subject: [PATCH 018/152] Fixes #18363: Fix assignment of MAC addresses to interfaces via REST API (#18367) * Fixes #18363: Fix assignment of MAC addresses to interfaces via REST API * Add missing API & view tests --- netbox/dcim/api/serializers_/devices.py | 4 +- netbox/dcim/tests/test_api.py | 43 +++++++++++++++++++++ netbox/dcim/tests/test_views.py | 51 +++++++++++++++++++++++++ 3 files changed, 96 insertions(+), 2 deletions(-) diff --git a/netbox/dcim/api/serializers_/devices.py b/netbox/dcim/api/serializers_/devices.py index eb6c4f9bc..1ad51caaa 100644 --- a/netbox/dcim/api/serializers_/devices.py +++ b/netbox/dcim/api/serializers_/devices.py @@ -170,8 +170,8 @@ class MACAddressSerializer(NetBoxModelSerializer): class Meta: model = MACAddress fields = [ - 'id', 'url', 'display_url', 'display', 'mac_address', 'assigned_object_type', 'assigned_object', - 'description', 'comments', + 'id', 'url', 'display_url', 'display', 'mac_address', 'assigned_object_type', 'assigned_object_id', + 'assigned_object', 'description', 'comments', ] brief_fields = ('id', 'url', 'display', 'mac_address', 'description') diff --git a/netbox/dcim/tests/test_api.py b/netbox/dcim/tests/test_api.py index c273e02dd..99a446aef 100644 --- a/netbox/dcim/tests/test_api.py +++ b/netbox/dcim/tests/test_api.py @@ -2447,3 +2447,46 @@ class VirtualDeviceContextTest(APIViewTestCases.APIViewTestCase): # Omit identifier to test uniqueness constraint }, ] + + +class MACAddressTest(APIViewTestCases.APIViewTestCase): + model = MACAddress + brief_fields = ['description', 'display', 'id', 'mac_address', 'url'] + bulk_update_data = { + 'description': 'New description', + } + + @classmethod + def setUpTestData(cls): + device = create_test_device(name='Device 1') + interfaces = ( + Interface(device=device, name='Interface 1', type='1000base-t'), + Interface(device=device, name='Interface 2', type='1000base-t'), + Interface(device=device, name='Interface 3', type='1000base-t'), + Interface(device=device, name='Interface 4', type='1000base-t'), + Interface(device=device, name='Interface 5', type='1000base-t'), + ) + Interface.objects.bulk_create(interfaces) + + mac_addresses = ( + MACAddress(mac_address='00:00:00:00:00:01', assigned_object=interfaces[0]), + MACAddress(mac_address='00:00:00:00:00:02', assigned_object=interfaces[1]), + MACAddress(mac_address='00:00:00:00:00:03', assigned_object=interfaces[2]), + ) + MACAddress.objects.bulk_create(mac_addresses) + + cls.create_data = [ + { + 'mac_address': '00:00:00:00:00:04', + 'assigned_object_type': 'dcim.interface', + 'assigned_object_id': interfaces[3].pk, + }, + { + 'mac_address': '00:00:00:00:00:05', + 'assigned_object_type': 'dcim.interface', + 'assigned_object_id': interfaces[4].pk, + }, + { + 'mac_address': '00:00:00:00:00:06', + }, + ] diff --git a/netbox/dcim/tests/test_views.py b/netbox/dcim/tests/test_views.py index bb942c685..b84217882 100644 --- a/netbox/dcim/tests/test_views.py +++ b/netbox/dcim/tests/test_views.py @@ -3470,3 +3470,54 @@ class VirtualDeviceContextTestCase(ViewTestCases.PrimaryObjectViewTestCase): cls.bulk_edit_data = { 'status': VirtualDeviceContextStatusChoices.STATUS_OFFLINE, } + + +class MACAddressTestCase(ViewTestCases.PrimaryObjectViewTestCase): + model = MACAddress + + @classmethod + def setUpTestData(cls): + device = create_test_device(name='Device 1') + interfaces = ( + Interface(device=device, name='Interface 1', type='1000base-t'), + Interface(device=device, name='Interface 2', type='1000base-t'), + Interface(device=device, name='Interface 3', type='1000base-t'), + Interface(device=device, name='Interface 4', type='1000base-t'), + Interface(device=device, name='Interface 5', type='1000base-t'), + Interface(device=device, name='Interface 6', type='1000base-t'), + ) + Interface.objects.bulk_create(interfaces) + + mac_addresses = ( + MACAddress(mac_address='00:00:00:00:00:01', assigned_object=interfaces[0]), + MACAddress(mac_address='00:00:00:00:00:02', assigned_object=interfaces[1]), + MACAddress(mac_address='00:00:00:00:00:03', assigned_object=interfaces[2]), + ) + MACAddress.objects.bulk_create(mac_addresses) + + tags = create_tags('Alpha', 'Bravo', 'Charlie') + + cls.form_data = { + 'mac_address': EUI('00:00:00:00:00:04'), + 'description': 'New MAC address', + 'interface_id': interfaces[3].pk, + 'tags': [t.pk for t in tags], + } + + cls.csv_data = ( + "mac_address,device,interface", + "00:00:00:00:00:04,Device 1,Interface 4", + "00:00:00:00:00:05,Device 1,Interface 5", + "00:00:00:00:00:06,Device 1,Interface 6", + ) + + cls.csv_update_data = ( + "id,mac_address", + f"{mac_addresses[0].pk},00:00:00:00:00:0a", + f"{mac_addresses[1].pk},00:00:00:00:00:0b", + f"{mac_addresses[2].pk},00:00:00:00:00:0c", + ) + + cls.bulk_edit_data = { + 'description': 'New description', + } From 571f604ce88d06630b463341eb76f043ec8c53e4 Mon Sep 17 00:00:00 2001 From: Jeremy Stretch Date: Thu, 9 Jan 2025 14:05:23 -0500 Subject: [PATCH 019/152] Fixes #18368: Restore missing fields on REST API serializer for MAC addresses --- netbox/dcim/api/serializers_/devices.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/netbox/dcim/api/serializers_/devices.py b/netbox/dcim/api/serializers_/devices.py index 1ad51caaa..c1e9c5f51 100644 --- a/netbox/dcim/api/serializers_/devices.py +++ b/netbox/dcim/api/serializers_/devices.py @@ -171,7 +171,7 @@ class MACAddressSerializer(NetBoxModelSerializer): model = MACAddress fields = [ 'id', 'url', 'display_url', 'display', 'mac_address', 'assigned_object_type', 'assigned_object_id', - 'assigned_object', 'description', 'comments', + 'assigned_object', 'description', 'comments', 'tags', 'custom_fields', 'created', 'last_updated', ] brief_fields = ('id', 'url', 'display', 'mac_address', 'description') From 32422d16832b0f30792a3f273b28d531470f4dce Mon Sep 17 00:00:00 2001 From: Brian Tiemann Date: Thu, 9 Jan 2025 14:04:03 -0500 Subject: [PATCH 020/152] Don't cache CACHE_KEY_CATALOG_ERROR if ISOLATED_DEPLOYMENT is True --- netbox/core/views.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/netbox/core/views.py b/netbox/core/views.py index 713807a82..83914bcee 100644 --- a/netbox/core/views.py +++ b/netbox/core/views.py @@ -594,7 +594,7 @@ class BasePluginView(UserPassesTestMixin, View): catalog_plugins_error = cache.get(self.CACHE_KEY_CATALOG_ERROR, default=False) if not catalog_plugins_error: catalog_plugins = get_catalog_plugins() - if not catalog_plugins: + if not catalog_plugins and not settings.ISOLATED_DEPLOYMENT: # Cache for 5 minutes to avoid spamming connection cache.set(self.CACHE_KEY_CATALOG_ERROR, True, 300) messages.warning(request, _("Plugins catalog could not be loaded")) From a79d869bd8fa7f3d711873a471cab016afad6aed Mon Sep 17 00:00:00 2001 From: github-actions <41898282+github-actions[bot]@users.noreply.github.com> Date: Fri, 10 Jan 2025 05:02:08 +0000 Subject: [PATCH 021/152] Update source translation strings --- netbox/translations/en/LC_MESSAGES/django.po | 32 ++++++++++---------- 1 file changed, 16 insertions(+), 16 deletions(-) diff --git a/netbox/translations/en/LC_MESSAGES/django.po b/netbox/translations/en/LC_MESSAGES/django.po index 2c22df58a..8d07440be 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: 2025-01-09 05:01+0000\n" +"POT-Creation-Date: 2025-01-10 05:01+0000\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -11582,63 +11582,63 @@ msgstr "" msgid "Cannot delete stores from registry" msgstr "" -#: netbox/netbox/settings.py:755 +#: netbox/netbox/settings.py:742 msgid "Czech" msgstr "" -#: netbox/netbox/settings.py:756 +#: netbox/netbox/settings.py:743 msgid "Danish" msgstr "" -#: netbox/netbox/settings.py:757 +#: netbox/netbox/settings.py:744 msgid "German" msgstr "" -#: netbox/netbox/settings.py:758 +#: netbox/netbox/settings.py:745 msgid "English" msgstr "" -#: netbox/netbox/settings.py:759 +#: netbox/netbox/settings.py:746 msgid "Spanish" msgstr "" -#: netbox/netbox/settings.py:760 +#: netbox/netbox/settings.py:747 msgid "French" msgstr "" -#: netbox/netbox/settings.py:761 +#: netbox/netbox/settings.py:748 msgid "Italian" msgstr "" -#: netbox/netbox/settings.py:762 +#: netbox/netbox/settings.py:749 msgid "Japanese" msgstr "" -#: netbox/netbox/settings.py:763 +#: netbox/netbox/settings.py:750 msgid "Dutch" msgstr "" -#: netbox/netbox/settings.py:764 +#: netbox/netbox/settings.py:751 msgid "Polish" msgstr "" -#: netbox/netbox/settings.py:765 +#: netbox/netbox/settings.py:752 msgid "Portuguese" msgstr "" -#: netbox/netbox/settings.py:766 +#: netbox/netbox/settings.py:753 msgid "Russian" msgstr "" -#: netbox/netbox/settings.py:767 +#: netbox/netbox/settings.py:754 msgid "Turkish" msgstr "" -#: netbox/netbox/settings.py:768 +#: netbox/netbox/settings.py:755 msgid "Ukrainian" msgstr "" -#: netbox/netbox/settings.py:769 +#: netbox/netbox/settings.py:756 msgid "Chinese" msgstr "" From e75d327f384d0b22ffb17f7e790d953ac81530ca Mon Sep 17 00:00:00 2001 From: Jeremy Stretch Date: Fri, 10 Jan 2025 08:22:35 -0500 Subject: [PATCH 022/152] Fixes #18376: Include tagged VLANs in interfaces list for Q-in-Q interfaces --- netbox/dcim/tables/template_code.py | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/netbox/dcim/tables/template_code.py b/netbox/dcim/tables/template_code.py index 449d55e14..4b51cd06a 100644 --- a/netbox/dcim/tables/template_code.py +++ b/netbox/dcim/tables/template_code.py @@ -69,16 +69,18 @@ INTERFACE_FHRPGROUPS = """ """ INTERFACE_TAGGED_VLANS = """ -{% if record.mode == 'tagged' %} +{% load i18n %} +{% if record.mode == 'access' %} +{% elif record.mode == 'tagged-all' %} + {% trans "All" %} +{% else %} {% if value.count > 3 %} {{ value.count }} VLANs {% else %} {% for vlan in value.all %} - {{ vlan }}
+ {{ vlan }}
{% endfor %} {% endif %} -{% elif record.mode == 'tagged-all' %} - All {% endif %} """ From a75fa53d4d2c84cb4c129571a6da83b0f304ec20 Mon Sep 17 00:00:00 2001 From: Jeremy Stretch Date: Thu, 9 Jan 2025 08:48:08 -0500 Subject: [PATCH 023/152] Closes #18348: Disable legacy pre-commit hook script --- scripts/git-hooks/pre-commit | 53 +++--------------------------------- 1 file changed, 4 insertions(+), 49 deletions(-) diff --git a/scripts/git-hooks/pre-commit b/scripts/git-hooks/pre-commit index da746b64f..90842a6bd 100755 --- a/scripts/git-hooks/pre-commit +++ b/scripts/git-hooks/pre-commit @@ -1,11 +1,6 @@ #!/bin/sh -# Create a link to this file at .git/hooks/pre-commit to -# force PEP8 validation prior to committing -# -# Ignored violations: -# -# W504: Line break after binary operator -# E501: Line too long +# TODO: Remove this file in NetBox v4.3 +# This script has been maintained to ease transition to the pre-commit tool. exec 1>&2 @@ -14,48 +9,8 @@ RED='\033[0;31m' YELLOW='\033[0;33m' NOCOLOR='\033[0m' -printf "${YELLOW}This script is obsolete and will be removed in a future release.\n" -printf "Please use pre-commit instead:\n" +printf "${YELLOW}The pre-commit hook script is obsolete. Please use pre-commit instead:${NOCOLOR}\n" printf " pip install pre-commit\n" printf " pre-commit install${NOCOLOR}\n" -if [ -d ./venv/ ]; then - VENV="$PWD/venv" - if [ -e $VENV/bin/python ]; then - PATH=$VENV/bin:$PATH - elif [ -e $VENV/Scripts/python.exe ]; then - PATH=$VENV/Scripts:$PATH - fi -fi - -if [ ${NOVALIDATE} ]; then - echo "${YELLOW}Skipping validation checks${NOCOLOR}" - exit $EXIT -fi - -echo "Linting with ruff..." -ruff check netbox/ -if [ $? != 0 ]; then - EXIT=1 -fi - -echo "Checking for missing migrations..." -python netbox/manage.py makemigrations --dry-run --check -if [ $? != 0 ]; then - EXIT=1 -fi - -git diff --cached --name-only | if grep --quiet 'netbox/project-static/' -then - echo "Checking UI ESLint, TypeScript, and Prettier compliance..." - yarn --cwd "$PWD/netbox/project-static" validate - if [ $? != 0 ]; then - EXIT=1 - fi -fi - -if [ $EXIT != 0 ]; then - printf "${RED}COMMIT FAILED${NOCOLOR}\n" -fi - -exit $EXIT +exit 1 From c3efa2149c14f6b55ebb79be72eef6e37c86a072 Mon Sep 17 00:00:00 2001 From: bctiemann Date: Fri, 17 Jan 2025 08:28:43 -0500 Subject: [PATCH 024/152] Fixes: #18350 - Remove 'site' and 'provider_network' from CircuitTerminationIndex.display_attrs (#18351) * Remove 'site' and 'provider_network' from CircuitTerminationIndex.display_attrs * Use '_site' and '_provider_network' in display_attrs * Replace private fields with 'termination' --- netbox/circuits/search.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/netbox/circuits/search.py b/netbox/circuits/search.py index 2ea11b7fd..486656933 100644 --- a/netbox/circuits/search.py +++ b/netbox/circuits/search.py @@ -34,7 +34,7 @@ class CircuitTerminationIndex(SearchIndex): ('port_speed', 2000), ('upstream_speed', 2000), ) - display_attrs = ('circuit', 'site', 'provider_network', 'description') + display_attrs = ('circuit', 'termination', 'description') @register_search From 993d8f1480be287b4f7347011a6d8af7e1a22150 Mon Sep 17 00:00:00 2001 From: bctiemann Date: Fri, 17 Jan 2025 08:35:17 -0500 Subject: [PATCH 025/152] Fixes: #18373 - Fix validation of site in Assign Device to Cluster flow (#18375) * Fix validation of site in Assign Device to Cluster flow * Validate Location as well as Site scope --- netbox/virtualization/forms/model_forms.py | 32 ++++++++++++++-------- 1 file changed, 20 insertions(+), 12 deletions(-) diff --git a/netbox/virtualization/forms/model_forms.py b/netbox/virtualization/forms/model_forms.py index 9edda1fe0..9d53c9382 100644 --- a/netbox/virtualization/forms/model_forms.py +++ b/netbox/virtualization/forms/model_forms.py @@ -1,4 +1,5 @@ from django import forms +from django.apps import apps from django.contrib.contenttypes.models import ContentType from django.core.exceptions import ValidationError from django.utils.translation import gettext_lazy as _ @@ -143,19 +144,26 @@ class ClusterAddDevicesForm(forms.Form): def clean(self): super().clean() - # If the Cluster is assigned to a Site, all Devices must be assigned to that Site. - if self.cluster.site is not None: + # If the Cluster is assigned to a Site or Location, all Devices must be assigned to that same scope. + if self.cluster.scope is not None: for device in self.cleaned_data.get('devices', []): - if device.site != self.cluster.site: - raise ValidationError({ - 'devices': _( - "{device} belongs to a different site ({device_site}) than the cluster ({cluster_site})" - ).format( - device=device, - device_site=device.site, - cluster_site=self.cluster.site - ) - }) + for scope_field in ['site', 'location']: + device_scope = getattr(device, scope_field) + if ( + self.cluster.scope_type.model_class() == apps.get_model('dcim', scope_field) + and device_scope != self.cluster.scope + ): + raise ValidationError({ + 'devices': _( + "{device} belongs to a different {scope_field} ({device_scope}) than the " + "cluster ({cluster_scope})" + ).format( + device=device, + scope_field=scope_field, + device_scope=device_scope, + cluster_scope=self.cluster.scope + ) + }) class ClusterRemoveDevicesForm(ConfirmationForm): From 4a1fea3504769b4eaed2eee14430200c7f89f45d Mon Sep 17 00:00:00 2001 From: bctiemann Date: Fri, 17 Jan 2025 08:45:17 -0500 Subject: [PATCH 026/152] Fixes: #18336 - Perform Rack object validation of u_height and starting_unit on rack_type if present (#18395) * Perform Rack object validation of u_height and starting_unit on rack_type if present * Calculate effective values before doing validation --- netbox/dcim/models/racks.py | 17 +++++++++++------ 1 file changed, 11 insertions(+), 6 deletions(-) diff --git a/netbox/dcim/models/racks.py b/netbox/dcim/models/racks.py index 78eb0ea4a..7ecbd5d5f 100644 --- a/netbox/dcim/models/racks.py +++ b/netbox/dcim/models/racks.py @@ -374,22 +374,27 @@ class Rack(ContactsMixin, ImageAttachmentsMixin, RackBase): if not self._state.adding: mounted_devices = Device.objects.filter(rack=self).exclude(position__isnull=True).order_by('position') + effective_u_height = self.rack_type.u_height if self.rack_type else self.u_height + effective_starting_unit = self.rack_type.starting_unit if self.rack_type else self.starting_unit + # Validate that Rack is tall enough to house the highest mounted Device if top_device := mounted_devices.last(): - min_height = top_device.position + top_device.device_type.u_height - self.starting_unit - if self.u_height < min_height: + min_height = top_device.position + top_device.device_type.u_height - effective_starting_unit + if effective_u_height < min_height: + field = 'rack_type' if self.rack_type else 'u_height' raise ValidationError({ - 'u_height': _( + field: _( "Rack must be at least {min_height}U tall to house currently installed devices." ).format(min_height=min_height) }) # Validate that the Rack's starting unit is less than or equal to the position of the lowest mounted Device if last_device := mounted_devices.first(): - if self.starting_unit > last_device.position: + if effective_starting_unit > last_device.position: + field = 'rack_type' if self.rack_type else 'starting_unit' raise ValidationError({ - 'starting_unit': _("Rack unit numbering must begin at {position} or less to house " - "currently installed devices.").format(position=last_device.position) + field: _("Rack unit numbering must begin at {position} or less to house " + "currently installed devices.").format(position=last_device.position) }) # Validate that Rack was assigned a Location of its same site, if applicable From 07ad4c1321e77cf46c8b29f87a0f371efa38adc0 Mon Sep 17 00:00:00 2001 From: Brian Tiemann Date: Thu, 16 Jan 2025 13:04:26 -0500 Subject: [PATCH 027/152] Make GFK scope field sortable=False on tables where it appears --- netbox/ipam/tables/ip.py | 3 ++- netbox/virtualization/tables/clusters.py | 3 ++- netbox/wireless/tables/wirelesslan.py | 3 ++- 3 files changed, 6 insertions(+), 3 deletions(-) diff --git a/netbox/ipam/tables/ip.py b/netbox/ipam/tables/ip.py index 17ba36de9..1eefa6b3a 100644 --- a/netbox/ipam/tables/ip.py +++ b/netbox/ipam/tables/ip.py @@ -192,7 +192,8 @@ class PrefixTable(TenancyColumnsMixin, NetBoxTable): ) scope = tables.Column( verbose_name=_('Scope'), - linkify=True + linkify=True, + orderable=False ) vlan_group = tables.Column( accessor='vlan__group', diff --git a/netbox/virtualization/tables/clusters.py b/netbox/virtualization/tables/clusters.py index d07bb4519..665f8fa8b 100644 --- a/netbox/virtualization/tables/clusters.py +++ b/netbox/virtualization/tables/clusters.py @@ -78,7 +78,8 @@ class ClusterTable(TenancyColumnsMixin, ContactsColumnMixin, NetBoxTable): ) scope = tables.Column( verbose_name=_('Scope'), - linkify=True + linkify=True, + orderable=False ) device_count = columns.LinkedCountColumn( viewname='dcim:device_list', diff --git a/netbox/wireless/tables/wirelesslan.py b/netbox/wireless/tables/wirelesslan.py index fe9c0f5fa..ca37b152f 100644 --- a/netbox/wireless/tables/wirelesslan.py +++ b/netbox/wireless/tables/wirelesslan.py @@ -56,7 +56,8 @@ class WirelessLANTable(TenancyColumnsMixin, NetBoxTable): ) scope = tables.Column( verbose_name=_('Scope'), - linkify=True + linkify=True, + orderable=False ) interface_count = tables.Column( verbose_name=_('Interfaces') From 50b7f46fc0971ebe6d6ea6c8a6eaf6d4de3c035d Mon Sep 17 00:00:00 2001 From: Brian Tiemann Date: Wed, 15 Jan 2025 10:18:30 -0500 Subject: [PATCH 028/152] Migrate DEFAULT_FILE_STORAGE to STORAGES --- netbox/netbox/settings.py | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/netbox/netbox/settings.py b/netbox/netbox/settings.py index 581cd9ef4..84b86ba13 100644 --- a/netbox/netbox/settings.py +++ b/netbox/netbox/settings.py @@ -222,8 +222,18 @@ DATABASES = { # Storage backend # +# Default STORAGES for Django +STORAGES = { + "default": { + "BACKEND": "django.core.files.storage.FileSystemStorage", + }, + "staticfiles": { + "BACKEND": "django.contrib.staticfiles.storage.StaticFilesStorage", + }, +} + if STORAGE_BACKEND is not None: - DEFAULT_FILE_STORAGE = STORAGE_BACKEND + STORAGES['default']['BACKEND'] = STORAGE_BACKEND # django-storages if STORAGE_BACKEND.startswith('storages.'): From a9f3c74b0c462e4788a7ed364039fc63c3943a21 Mon Sep 17 00:00:00 2001 From: Jeremy Stretch Date: Fri, 17 Jan 2025 10:08:25 -0500 Subject: [PATCH 029/152] Fixes #18379: Ensure RSS feed content within dashboard widget is sanitized --- netbox/templates/extras/dashboard/widgets/rssfeed.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/netbox/templates/extras/dashboard/widgets/rssfeed.html b/netbox/templates/extras/dashboard/widgets/rssfeed.html index fa602a112..2528c5fc7 100644 --- a/netbox/templates/extras/dashboard/widgets/rssfeed.html +++ b/netbox/templates/extras/dashboard/widgets/rssfeed.html @@ -5,7 +5,7 @@

{{ entry.title }}
- {{ entry.summary|safe }} + {{ entry.summary }}
{% empty %} From 4a13664e0f68701d4aacc9fefe82038f1cb7ea22 Mon Sep 17 00:00:00 2001 From: Jeremy Stretch Date: Fri, 17 Jan 2025 10:36:22 -0500 Subject: [PATCH 030/152] Closes #18425: Remove the triage priority field from GitHub issue templates --- .github/ISSUE_TEMPLATE/01-feature_request.yaml | 13 ------------- .github/ISSUE_TEMPLATE/02-bug_report.yaml | 13 ------------- 2 files changed, 26 deletions(-) diff --git a/.github/ISSUE_TEMPLATE/01-feature_request.yaml b/.github/ISSUE_TEMPLATE/01-feature_request.yaml index f415f933a..2215ab7a1 100644 --- a/.github/ISSUE_TEMPLATE/01-feature_request.yaml +++ b/.github/ISSUE_TEMPLATE/01-feature_request.yaml @@ -27,19 +27,6 @@ body: - Other validations: required: true - - type: dropdown - attributes: - label: Triage priority - description: > - Issue triage may be prioritized in some cases. Select whichever of the following - conditions applies, if any. - options: - - I volunteer to perform this work (if approved) - - I'm a NetBox Labs customer - - N/A - default: 2 - validations: - required: true - type: textarea attributes: label: Proposed functionality diff --git a/.github/ISSUE_TEMPLATE/02-bug_report.yaml b/.github/ISSUE_TEMPLATE/02-bug_report.yaml index 0e0839849..f007b67cc 100644 --- a/.github/ISSUE_TEMPLATE/02-bug_report.yaml +++ b/.github/ISSUE_TEMPLATE/02-bug_report.yaml @@ -22,19 +22,6 @@ body: - Self-hosted validations: required: true - - type: dropdown - attributes: - label: Triage priority - description: > - Issue triage may be prioritized in some cases. Select whichever of the following - conditions applies, if any. - options: - - I volunteer to perform this work (if approved) - - I'm a NetBox Labs customer - - N/A - default: 2 - validations: - required: true - type: input attributes: label: NetBox Version From 5b9210dfa5f9288a55686c86e582f65dea0386de Mon Sep 17 00:00:00 2001 From: Jeremy Stretch Date: Fri, 17 Jan 2025 12:20:24 -0500 Subject: [PATCH 031/152] Fixes #18392: Exclude config contexts assigned to locations for VMs --- netbox/extras/querysets.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/netbox/extras/querysets.py b/netbox/extras/querysets.py index 9b3722eef..59be85734 100644 --- a/netbox/extras/querysets.py +++ b/netbox/extras/querysets.py @@ -120,11 +120,12 @@ class ConfigContextModelQuerySet(RestrictedQuerySet): is_active=True, ) + # Apply Location & DeviceType filters only for VirtualMachines if self.model._meta.model_name == 'device': base_query.add((Q(locations=OuterRef('location')) | Q(locations=None)), Q.AND) base_query.add((Q(device_types=OuterRef('device_type')) | Q(device_types=None)), Q.AND) - elif self.model._meta.model_name == 'virtualmachine': + base_query.add(Q(locations=None), Q.AND) base_query.add(Q(device_types=None), Q.AND) base_query.add((Q(roles=OuterRef('role')) | Q(roles=None)), Q.AND) From 2ed4a2b0054887daa7bc46eddc429a452c5ca422 Mon Sep 17 00:00:00 2001 From: atownson <52260120+atownson@users.noreply.github.com> Date: Fri, 17 Jan 2025 13:02:12 -0600 Subject: [PATCH 032/152] Fixes: #18369 - Remove the json filter for protection rules (#18388) * Remove the json filter for protection rules * Configure PROTECTION_RULE config attribute to use ConfigJSONEncoder as serializer * Tweak getattr() --------- Co-authored-by: Jeremy Stretch --- netbox/core/views.py | 5 +++-- netbox/templates/core/inc/config_data.html | 2 +- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/netbox/core/views.py b/netbox/core/views.py index 83914bcee..cd9cd6c67 100644 --- a/netbox/core/views.py +++ b/netbox/core/views.py @@ -570,8 +570,9 @@ class SystemView(UserPassesTestMixin, View): return response # Serialize any CustomValidator classes - if hasattr(config, 'CUSTOM_VALIDATORS') and config.CUSTOM_VALIDATORS: - config.CUSTOM_VALIDATORS = json.dumps(config.CUSTOM_VALIDATORS, cls=ConfigJSONEncoder, indent=4) + for attr in ['CUSTOM_VALIDATORS', 'PROTECTION_RULES']: + if hasattr(config, attr) and getattr(config, attr, None): + setattr(config, attr, json.dumps(getattr(config, attr), cls=ConfigJSONEncoder, indent=4)) return render(request, 'core/system.html', { 'stats': stats, diff --git a/netbox/templates/core/inc/config_data.html b/netbox/templates/core/inc/config_data.html index 41471a103..939b8588f 100644 --- a/netbox/templates/core/inc/config_data.html +++ b/netbox/templates/core/inc/config_data.html @@ -103,7 +103,7 @@ {% trans "Protection rules" %} {% if config.PROTECTION_RULES %} -
{{ config.PROTECTION_RULES|json }}
+
{{ config.PROTECTION_RULES }}
{% else %} {{ ''|placeholder }} {% endif %} From f845b2cf07cd65a109c46632a2540d3647c1c492 Mon Sep 17 00:00:00 2001 From: Jeremy Stretch Date: Fri, 17 Jan 2025 14:49:37 -0500 Subject: [PATCH 033/152] Release v4.2.2 --- .../ISSUE_TEMPLATE/01-feature_request.yaml | 2 +- .github/ISSUE_TEMPLATE/02-bug_report.yaml | 2 +- base_requirements.txt | 2 -- docs/release-notes/version-4.2.md | 20 ++++++++++++++++++ netbox/project-static/dist/netbox.js | Bin 390886 -> 391058 bytes netbox/project-static/dist/netbox.js.map | Bin 525356 -> 525511 bytes netbox/project-static/package.json | 4 ++-- netbox/project-static/yarn.lock | 16 +++++++------- netbox/release.yaml | 4 ++-- netbox/translations/ru/LC_MESSAGES/django.mo | Bin 301883 -> 301870 bytes netbox/translations/ru/LC_MESSAGES/django.po | 10 ++++----- requirements.txt | 10 ++++----- 12 files changed, 44 insertions(+), 26 deletions(-) diff --git a/.github/ISSUE_TEMPLATE/01-feature_request.yaml b/.github/ISSUE_TEMPLATE/01-feature_request.yaml index 2215ab7a1..6212af3b8 100644 --- a/.github/ISSUE_TEMPLATE/01-feature_request.yaml +++ b/.github/ISSUE_TEMPLATE/01-feature_request.yaml @@ -14,7 +14,7 @@ body: attributes: label: NetBox version description: What version of NetBox are you currently running? - placeholder: v4.2.1 + placeholder: v4.2.2 validations: required: true - type: dropdown diff --git a/.github/ISSUE_TEMPLATE/02-bug_report.yaml b/.github/ISSUE_TEMPLATE/02-bug_report.yaml index f007b67cc..4382a9b76 100644 --- a/.github/ISSUE_TEMPLATE/02-bug_report.yaml +++ b/.github/ISSUE_TEMPLATE/02-bug_report.yaml @@ -26,7 +26,7 @@ body: attributes: label: NetBox Version description: What version of NetBox are you currently running? - placeholder: v4.2.1 + placeholder: v4.2.2 validations: required: true - type: dropdown diff --git a/base_requirements.txt b/base_requirements.txt index 4cb355dd5..9cf0fbf8b 100644 --- a/base_requirements.txt +++ b/base_requirements.txt @@ -8,8 +8,6 @@ django-cors-headers # Runtime UI tool for debugging Django # https://github.com/jazzband/django-debug-toolbar/blob/main/docs/changes.rst -# Pinned for DNS looukp bug; see https://github.com/netbox-community/netbox/issues/16454 -# and https://github.com/jazzband/django-debug-toolbar/issues/1927 django-debug-toolbar # Library for writing reusable URL query filters diff --git a/docs/release-notes/version-4.2.md b/docs/release-notes/version-4.2.md index a1dafaf14..61f043f3d 100644 --- a/docs/release-notes/version-4.2.md +++ b/docs/release-notes/version-4.2.md @@ -1,5 +1,25 @@ # NetBox v4.2 +## v4.2.2 (2025-01-17) + +### Bug Fixes + +* [#18336](https://github.com/netbox-community/netbox/issues/18336) - Validate new rack height against installed devices when changing a rack's type +* [#18350](https://github.com/netbox-community/netbox/issues/18350) - Fix `FieldDoesNotExist` exception when global search results include a circuit termination +* [#18353](https://github.com/netbox-community/netbox/issues/18353) - Disable fetching of plugin catalog data when `ISOLATED_DEPLOYMENT` is enabled +* [#18362](https://github.com/netbox-community/netbox/issues/18362) - Avoid transmitting census data on every worker restart +* [#18363](https://github.com/netbox-community/netbox/issues/18363) - Fix support for assigning a MAC address to an interface via the REST API +* [#18368](https://github.com/netbox-community/netbox/issues/18368) - Restore missing attributes from REST API serializer for MAC addresses (`tags`, `created`, `last_updated`, and custom fields) +* [#18369](https://github.com/netbox-community/netbox/issues/18369) - Fix `TypeError` exception when rendering the system configuration view with one or more custom classes defined under `PROTECTION_RULES` +* [#18373](https://github.com/netbox-community/netbox/issues/18373) - Fix `AttributeError` exception when attempting to assign host devices to a cluster +* [#18376](https://github.com/netbox-community/netbox/issues/18376) - Fix the display of tagged VLANs in interfaces list for Q-in-Q interfaces +* [#18379](https://github.com/netbox-community/netbox/issues/18379) - Ensure RSS feed dashboard widget content is sanitized +* [#18392](https://github.com/netbox-community/netbox/issues/18392) - Virtual machines should not inherit config contexts assigned to locations +* [#18400](https://github.com/netbox-community/netbox/issues/18400) - Fix support for `STORAGE_BACKEND` configuration parameter +* [#18406](https://github.com/netbox-community/netbox/issues/18406) - Scope column headers in object lists should not be orderable + +--- + ## v4.2.1 (2025-01-08) ### Bug Fixes diff --git a/netbox/project-static/dist/netbox.js b/netbox/project-static/dist/netbox.js index 4661582a3ffd9468ca9a0efe8fdc95c5c3855d0d..7e516f7f4859ffcafee6698af56ca52c89acb58c 100644 GIT binary patch delta 3121 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 diff --git a/netbox/project-static/dist/netbox.js.map b/netbox/project-static/dist/netbox.js.map index d94269b5df242edad06ee43c5e12a766b88bf50c..a8b2c9569b82fa6c60f5703fae5613871fccf82c 100644 GIT binary patch delta 6452 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 delta 6314 zcmai2d3aP+mj7O)j^zR|5+Ykn2#d6-HfyC)(9pd1s#2*GWpxZ?j4f&mbS+6GRaq*F zevNJ0W8<{g(&|B55U|B93XZL>dq!{>P(GIracf#>ZI^Dsq9V98%-D0zxm7F~#`)*H zckey-+E z28#w$9&7H1ZCKONII`C^RqMBG`)nD6ePNrTRa>jS zusx*ZM_opn+s8_E-d>Z#YYteKe`WIyo#r1fa9a}AjS1-H5`6I_pr5kl{v1L! ztp)$}m*AV-?O~h(>e0lA`E^r)7jO(3x?ai4csua@zd{L)y#dCL?=%S#bCJW;`-~8u zz*lW`FNZa!UD&{_KI1ZeweTYt5!{yYx1T1MZZDrUu+W-w3;a+UN5h0JL+p)uqIlB^ z_`VjwCs#o8*r?3RXu(Oh!b~lWKfDzl(IVD2TZ2|g!QIy`ETIYS^_8E4tiC$K;)(Qv?CD;IvRDo z^%VUBO0*wW+z$22P9eZ&96ga)l%1GagHRkWg`A^w5KxyBT4FDsDPLlypt7Ua5hPaY ze0r|~uf7A$;>S7XcFDdNXCf7`r7mgRa0e7>S`V(h6H3l-d8pUCyvBnc++@o)qUsnC z*^Q533yOs9t?@7j++`-sQDS_KtQby1SWL(-Lzt-b;VOhm@~M{*rsnq@KjRWV>y8*z zcogAcd!;PfR)vkLfSe6GS3$w-0dWO?sqlgMtwfBfrs28ul8;S|Ob$3HS5ph=#X9P0f^Jk58hn)EK-EgbDMuJz^jfvmF#KpDJ zYK+!>*G!ooc8O@f(W(XTSQwJ8^1BLd4 zv|2jRa}ShgF^ur58*jb`8s@1(HBua3khS)cIgi>rk67F8<}N6N5n(6 z^CU5EHI$RD7^|V_+z#2Y|9Iqx-~+2=p_k}2GbItZIjy9~SQN3Pa`RK}QS4wn0p-Cl1AN<$8)zF?@ABtk=?3@;+$Rw0_+FJGk$h zXvE`G(Y%a_7sG4shpiO67Hoi?yl6B#7_H~QC|-9zxbWx((i+354?wSje1Oi>BOq2N ze@MxO8@uJjC#NIxc2fBC12B0i&0y}5u@$P~qJFV>3J*O1znJ3Y#mN3Ka=cgu3I1+3 zYH{U*FlT&+_(&_M2vfTA>6iH1@%;xW5Om--57OZh_@jrw`c6G14?{S|U5}3sL%!CI zD;|dD$GXG-VP4!fh>IVAQmhz;0$lS5oSjo%cjqu%G{zkA^sQpmaZo;!&886<+h`iNYf+d~69Cn}iD< zqvg{0=;?Aizu?4pqcezg&PLk>{92~v|>Vy#AY-peE&_WODHrB(Rw zCaBOVarY+JSK2F`O-zI~<>E|&9_bA(;t8!`n(goKrt$N~p?6%Z47Do~RbkJ+!3`7X zxHM}iJ$w{C#Y38@ZgAt+C%}J(QWi1Xc-0e7lv^#>M2s>~?kP?jOyYP#zdhBy!}z5UaI_#4PY= zMwu6jx4~3AdkF0K%vNa5j0|N)uFbRuj!8bZ4X(^|rn8-v_XPlripYg8f;p{1+#<}L z)>1CtZG^9{*OdGnF_O6HMJf@x@U<7AWbBY4QzmTxle)ADEZI(ByAl^~hr&Y2<7DiB zsxqiBZe#jX%dEzzh1+49rlqXKFG0VSQ&x}LZ-a{_XA4qA0p)e`4Otct{qT7CEdU5p!z&zy|4q$%+Zp#b0_?OU>f&2Ow4iC z;O)aTQ;xaqtbOoRw{fWHa5X$XCL& zTQAkXWu zggYl<=<75}8}Q)Y$lAWBD%aHlL3YkX3SSKU34-T#%0BrrN);G!iG234Kf%(Ov?^x+ zQJop(>_B+Rx<1{TG~HOc3-oacYScG&aTWLIW|N{ax}DH?DXW zs_QBx?S)POa9N+XN?p~3j_P)!o{_Y-QBa~Ba1!{_c2meoVb^Y$Wgik|hhn&THw@5q zy5KJ`oeHQqe}Ql9LtKmcJSkl89u)=Mc-+Hb4SgzN3)!iJ^_T>c@<$hKVg4SeM`J3QF|rb!pB`3T%(g2Ins3LgFl@+Q^F!cFW3&BQ{=L1N^P$Sko} ztCgL&oMzZ-q}A-g;g6v#pT@`tVYz}RxAD91vyb7YS~Yh54K^1l7xvdGjibH1{_o%^ zOv>{Am&ikZhbzc}um{TR>Mpl5jq~>qgJbyPJy4e)mpCOl0+Nrt7sv6*Jut6?s(ZpC z$UEds)4v#1=m#7snfKRW{az>aS1_9Y#ue^c;^Vr;T%p{8soTY1S*cV z^7fL;SK@_x;eOiQYkQ$Ov%R)7p1qI$O~i1{KA7d~5Ti(O@Drg*j62L9i4SwoGcRVI zHA?Nbh}q^T^Wz=+;DVge0B+d_lkH^+pa}kTAI#LFqHxeqkhUpE+Z4_zqgrBR!cae< zs2Vf%fm&~cm`U&E!35Urhoh&bL`@SG9)R=kssk`CSFwa{aYTWL*@f2~fB=Pw?FXP_ zSxl_%b2RB@g`w68NTxhKKsQeE9oMl@Dq@?JhX?t9TuGXAHR6CvKko?AfTLOWUNTBV zZ_5sL863z|^uyRE;3P`j`w9G_yfb5Pf~v#pYGCs=D=~?bv~E~d;ae+R{FAuoQ|4oPE?qXL!3$_UU(3wX8#N(jX%{Er+)^s979Uu zNn2!C62||Yg0l}o!$d`^gfW^|c=JIj@8URoka*u?Z97QOwjpaPrIJuL)!j5$BWO2M zOCl0s$?VXB$EicVvm}FMXoOcBg3<|{!t|g+)%d~^e;3|!2)vWBGnMPIG5Gg`ZuaAm zL&S|ZmLH~{c;#4s7;d(^W%*zV-#H8yk5xHDa$2AdonOFHGnIe@@Jyj2^+zBp%6m=W zIbXv3LWNz>!G=f}HJQ*TFG_>$U&0NQDuew$+GI=eo2ty{#-gua%K56qI(cQT_XMgG zUiKCIzPMNB1;mBKSIi|@)Je28g^sTwJvNID@z`ID8@~qUNnN%0`PVRea)p9L{<-RL zv5m4p46D9@KyG#|#<<;x;Vs|5!u)h*1N5Klk{NaYeSQL#eEX6aqYB7Hz#g1=bEuL`%X6K{>_&Jr8 z7&ro#Wr`cp!`kBb_z`%8YWbfYg}Kn{@^<^u_{>qjqC}4;YEY>~QaT6VMn{vGbb9Fc a%*uYN@4sOEe`D&)(+jOdM^5iK^M3&90&bcB diff --git a/netbox/project-static/package.json b/netbox/project-static/package.json index 8416d4b4b..f216a4107 100644 --- a/netbox/project-static/package.json +++ b/netbox/project-static/package.json @@ -27,10 +27,10 @@ "bootstrap": "5.3.3", "clipboard": "2.0.11", "flatpickr": "4.6.13", - "gridstack": "11.2.0", + "gridstack": "11.3.0", "htmx.org": "1.9.12", "query-string": "9.1.1", - "sass": "1.83.1", + "sass": "1.83.4", "tom-select": "2.4.1", "typeface-inter": "3.18.1", "typeface-roboto-mono": "1.1.13" diff --git a/netbox/project-static/yarn.lock b/netbox/project-static/yarn.lock index a3ded9bdb..588935331 100644 --- a/netbox/project-static/yarn.lock +++ b/netbox/project-static/yarn.lock @@ -1905,10 +1905,10 @@ graphql@16.10.0: resolved "https://registry.yarnpkg.com/graphql/-/graphql-16.10.0.tgz#24c01ae0af6b11ea87bf55694429198aaa8e220c" integrity sha512-AjqGKbDGUFRKIRCP9tCKiIGHyriz2oHEbPIbEtcSLSs4YjReZOIPQQWek4+6hjw62H9QShXHyaGivGiYVLeYFQ== -gridstack@11.2.0: - version "11.2.0" - resolved "https://registry.yarnpkg.com/gridstack/-/gridstack-11.2.0.tgz#8977a6632c521260f064ef171b92c7a8df4f58a9" - integrity sha512-ajwUzd9spR8NXDxfJotHWq9WOYoDOV9o6UJR3ksevNz8cvXNxDtI9H/lC+RN6ijM2DexureLlsG0RpYjBZiOtg== +gridstack@11.3.0: + version "11.3.0" + resolved "https://registry.yarnpkg.com/gridstack/-/gridstack-11.3.0.tgz#b110c66bafc64c920fc54933e2c9df4f7b2cfffe" + integrity sha512-Z0eRovKcZTRTs3zetJwjO6CNwrgIy845WfOeZGk8ybpeMCE8fMA8tScyKU72Y2M6uGHkjgwnjflglvPiv+RcBQ== has-bigints@^1.0.1, has-bigints@^1.0.2: version "1.0.2" @@ -2667,10 +2667,10 @@ safe-regex-test@^1.0.3: es-errors "^1.3.0" is-regex "^1.1.4" -sass@1.83.1: - version "1.83.1" - resolved "https://registry.yarnpkg.com/sass/-/sass-1.83.1.tgz#dee1ab94b47a6f9993d3195d36f556bcbda64846" - integrity sha512-EVJbDaEs4Rr3F0glJzFSOvtg2/oy2V/YrGFPqPY24UqcLDWcI9ZY5sN+qyO3c/QCZwzgfirvhXvINiJCE/OLcA== +sass@1.83.4: + version "1.83.4" + resolved "https://registry.yarnpkg.com/sass/-/sass-1.83.4.tgz#5ccf60f43eb61eeec300b780b8dcb85f16eec6d1" + integrity sha512-B1bozCeNQiOgDcLd33e2Cs2U60wZwjUUXzh900ZyQF5qUasvMdDZYbQ566LJu7cqR+sAHlAfO6RMkaID5s6qpA== dependencies: chokidar "^4.0.0" immutable "^5.0.2" diff --git a/netbox/release.yaml b/netbox/release.yaml index 4127b0253..2619279a9 100644 --- a/netbox/release.yaml +++ b/netbox/release.yaml @@ -1,3 +1,3 @@ -version: "4.2.1" +version: "4.2.2" edition: "Community" -published: "2025-01-08" +published: "2025-01-17" diff --git a/netbox/translations/ru/LC_MESSAGES/django.mo b/netbox/translations/ru/LC_MESSAGES/django.mo index 4b62c2a5b1419eab25391b91fe2a9bd4a23066ac..d6454046422926e787cf5958a72490eec887d402 100644 GIT binary patch delta 25062 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 L_}_$3sl5LOtnkw~ diff --git a/netbox/translations/ru/LC_MESSAGES/django.po b/netbox/translations/ru/LC_MESSAGES/django.po index 2cb2074cd..7980f7202 100644 --- a/netbox/translations/ru/LC_MESSAGES/django.po +++ b/netbox/translations/ru/LC_MESSAGES/django.po @@ -12,8 +12,8 @@ # Alexander Ryazanov (alryaz) , 2024 # Vladyslav V. Prodan, 2024 # Jeremy Stretch, 2024 -# Michail Tatarinov, 2024 # Artem Kotik, 2025 +# Michail Tatarinov, 2025 # #, fuzzy msgid "" @@ -22,7 +22,7 @@ msgstr "" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2025-01-04 05:02+0000\n" "PO-Revision-Date: 2023-10-30 17:48+0000\n" -"Last-Translator: Artem Kotik, 2025\n" +"Last-Translator: Michail Tatarinov, 2025\n" "Language-Team: Russian (https://app.transifex.com/netbox-community/teams/178115/ru/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -6334,7 +6334,7 @@ msgstr "распределительный щит" #: netbox/dcim/models/power.py:56 msgid "power panels" -msgstr "распределительный щиты" +msgstr "распределительные щиты" #: netbox/dcim/models/power.py:70 #, python-brace-format @@ -9256,7 +9256,7 @@ msgstr "SLAAC" #: netbox/ipam/choices.py:89 msgid "Loopback" -msgstr "Обратная петля" +msgstr "Loopback" #: netbox/ipam/choices.py:91 msgid "Anycast" @@ -11185,7 +11185,7 @@ msgstr "Сети провайдеров" #: netbox/netbox/navigation/menu.py:298 msgid "Power Panels" -msgstr "Распределительный щиты" +msgstr "Распределительные щиты" #: netbox/netbox/navigation/menu.py:309 msgid "Configurations" diff --git a/requirements.txt b/requirements.txt index b875ae5a2..903e4e7fd 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,6 +1,6 @@ -Django==5.1.4 +Django==5.1.5 django-cors-headers==4.6.0 -django-debug-toolbar==4.4.6 +django-debug-toolbar==5.0.1 django-filter==24.3 django-htmx==1.21.0 django-graphiql-debug-toolbar==0.2.0 @@ -12,7 +12,7 @@ django-rich==1.13.0 django-rq==3.0 django-taggit==6.1.0 django-tables2==2.7.5 -django-timezone-field==7.0 +django-timezone-field==7.1 djangorestframework==3.15.2 drf-spectacular==0.28.0 drf-spectacular-sidecar==2024.12.1 @@ -25,13 +25,13 @@ mkdocstrings[python-legacy]==0.27.0 netaddr==1.3.0 nh3==0.2.20 Pillow==11.1.0 -psycopg[c,pool]==3.2.3 +psycopg[c,pool]==3.2.4 PyYAML==6.0.2 requests==2.32.3 rq==2.1.0 social-auth-app-django==5.4.2 social-auth-core==4.5.4 -strawberry-graphql==0.256.1 +strawberry-graphql==0.258.0 strawberry-graphql-django==0.52.0 svgwrite==1.4.3 tablib==3.7.0 From d11deb66788c35ccb50eccdbd6bd2518733e2801 Mon Sep 17 00:00:00 2001 From: github-actions <41898282+github-actions[bot]@users.noreply.github.com> Date: Sat, 18 Jan 2025 05:02:12 +0000 Subject: [PATCH 034/152] Update source translation strings --- netbox/translations/en/LC_MESSAGES/django.po | 208 +++++++++---------- 1 file changed, 104 insertions(+), 104 deletions(-) diff --git a/netbox/translations/en/LC_MESSAGES/django.po b/netbox/translations/en/LC_MESSAGES/django.po index 8d07440be..6b0b5e1d0 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: 2025-01-10 05:01+0000\n" +"POT-Creation-Date: 2025-01-18 05:01+0000\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -242,8 +242,8 @@ msgstr "" #: netbox/virtualization/forms/bulk_import.py:91 #: netbox/virtualization/forms/filtersets.py:74 #: netbox/virtualization/forms/filtersets.py:153 -#: netbox/virtualization/forms/model_forms.py:103 -#: netbox/virtualization/forms/model_forms.py:170 +#: netbox/virtualization/forms/model_forms.py:104 +#: netbox/virtualization/forms/model_forms.py:178 #: netbox/virtualization/tables/virtualmachines.py:33 #: netbox/vpn/forms/filtersets.py:266 netbox/wireless/forms/filtersets.py:88 #: netbox/wireless/forms/model_forms.py:79 @@ -712,7 +712,7 @@ msgstr "" #: netbox/virtualization/forms/bulk_edit.py:61 #: netbox/virtualization/forms/bulk_import.py:42 #: netbox/virtualization/forms/filtersets.py:54 -#: netbox/virtualization/forms/model_forms.py:64 +#: netbox/virtualization/forms/model_forms.py:65 #: netbox/virtualization/tables/clusters.py:66 #: netbox/vpn/forms/bulk_edit.py:264 netbox/vpn/forms/bulk_import.py:264 #: netbox/vpn/forms/filtersets.py:217 netbox/vpn/forms/model_forms.py:85 @@ -766,8 +766,8 @@ msgstr "" #: netbox/ipam/forms/filtersets.py:212 netbox/ipam/forms/filtersets.py:284 #: netbox/ipam/forms/filtersets.py:358 netbox/ipam/forms/filtersets.py:542 #: netbox/ipam/forms/model_forms.py:503 netbox/ipam/tables/ip.py:183 -#: netbox/ipam/tables/ip.py:263 netbox/ipam/tables/ip.py:314 -#: netbox/ipam/tables/ip.py:377 netbox/ipam/tables/ip.py:404 +#: netbox/ipam/tables/ip.py:264 netbox/ipam/tables/ip.py:315 +#: netbox/ipam/tables/ip.py:378 netbox/ipam/tables/ip.py:405 #: netbox/ipam/tables/vlans.py:95 netbox/ipam/tables/vlans.py:208 #: netbox/templates/circuits/circuit.html:34 #: netbox/templates/circuits/virtualcircuit.html:43 @@ -844,7 +844,7 @@ msgstr "" #: netbox/ipam/forms/filtersets.py:122 netbox/ipam/forms/filtersets.py:145 #: netbox/ipam/forms/filtersets.py:176 netbox/ipam/forms/filtersets.py:270 #: netbox/ipam/forms/filtersets.py:313 netbox/ipam/forms/filtersets.py:510 -#: netbox/ipam/tables/ip.py:407 netbox/ipam/tables/vlans.py:205 +#: netbox/ipam/tables/ip.py:408 netbox/ipam/tables/vlans.py:205 #: netbox/templates/circuits/circuit.html:48 #: netbox/templates/circuits/circuitgroup.html:36 #: netbox/templates/circuits/virtualcircuit.html:47 @@ -978,8 +978,8 @@ msgstr "" #: netbox/templates/dcim/htmx/cable_edit.html:72 #: netbox/templates/ipam/ipaddress_bulk_add.html:27 #: netbox/templates/ipam/vlan_edit.html:30 -#: netbox/virtualization/forms/model_forms.py:79 -#: netbox/virtualization/forms/model_forms.py:221 +#: netbox/virtualization/forms/model_forms.py:80 +#: netbox/virtualization/forms/model_forms.py:229 #: netbox/vpn/forms/bulk_edit.py:78 netbox/vpn/forms/filtersets.py:44 #: netbox/vpn/forms/model_forms.py:63 netbox/vpn/forms/model_forms.py:148 #: netbox/vpn/forms/model_forms.py:414 netbox/wireless/forms/model_forms.py:57 @@ -1078,8 +1078,8 @@ msgstr "" #: netbox/ipam/forms/filtersets.py:292 netbox/ipam/forms/filtersets.py:363 #: netbox/ipam/forms/filtersets.py:550 netbox/ipam/forms/model_forms.py:194 #: netbox/ipam/forms/model_forms.py:220 netbox/ipam/forms/model_forms.py:251 -#: netbox/ipam/forms/model_forms.py:678 netbox/ipam/tables/ip.py:208 -#: netbox/ipam/tables/ip.py:267 netbox/ipam/tables/ip.py:318 +#: netbox/ipam/forms/model_forms.py:678 netbox/ipam/tables/ip.py:209 +#: netbox/ipam/tables/ip.py:268 netbox/ipam/tables/ip.py:319 #: netbox/ipam/tables/vlans.py:99 netbox/ipam/tables/vlans.py:211 #: netbox/templates/circuits/virtualcircuittermination.html:42 #: netbox/templates/dcim/device.html:182 @@ -1099,7 +1099,7 @@ msgstr "" #: netbox/virtualization/forms/bulk_edit.py:127 #: netbox/virtualization/forms/bulk_import.py:112 #: netbox/virtualization/forms/filtersets.py:162 -#: netbox/virtualization/forms/model_forms.py:194 +#: netbox/virtualization/forms/model_forms.py:202 #: netbox/virtualization/tables/virtualmachines.py:45 #: netbox/vpn/forms/bulk_edit.py:87 netbox/vpn/forms/bulk_import.py:81 #: netbox/vpn/forms/filtersets.py:85 netbox/vpn/forms/model_forms.py:79 @@ -1191,7 +1191,7 @@ msgstr "" #: netbox/dcim/tables/connections.py:65 netbox/dcim/tables/devices.py:1140 #: netbox/ipam/forms/bulk_import.py:317 netbox/ipam/forms/model_forms.py:282 #: netbox/ipam/forms/model_forms.py:291 netbox/ipam/tables/fhrp.py:64 -#: netbox/ipam/tables/ip.py:323 netbox/ipam/tables/vlans.py:145 +#: netbox/ipam/tables/ip.py:324 netbox/ipam/tables/vlans.py:145 #: netbox/templates/circuits/inc/circuit_termination_fields.html:52 #: netbox/templates/circuits/virtualcircuittermination.html:53 #: netbox/templates/circuits/virtualcircuittermination.html:60 @@ -1205,7 +1205,7 @@ msgstr "" #: netbox/templates/wireless/inc/wirelesslink_interface.html:10 #: netbox/templates/wireless/wirelesslink.html:10 #: netbox/templates/wireless/wirelesslink.html:55 -#: netbox/virtualization/forms/model_forms.py:369 +#: netbox/virtualization/forms/model_forms.py:377 #: netbox/vpn/forms/bulk_import.py:297 netbox/vpn/forms/model_forms.py:439 #: netbox/vpn/forms/model_forms.py:448 netbox/wireless/forms/model_forms.py:116 #: netbox/wireless/forms/model_forms.py:158 @@ -1291,7 +1291,7 @@ msgstr "" #: netbox/templates/ipam/vlan.html:16 #: netbox/virtualization/forms/filtersets.py:59 #: netbox/virtualization/forms/filtersets.py:138 -#: netbox/virtualization/forms/model_forms.py:91 +#: netbox/virtualization/forms/model_forms.py:92 #: netbox/vpn/forms/filtersets.py:257 netbox/wireless/forms/filtersets.py:73 msgid "Region" msgstr "" @@ -1309,7 +1309,7 @@ msgstr "" #: netbox/ipam/forms/filtersets.py:430 netbox/ipam/forms/filtersets.py:521 #: netbox/virtualization/forms/filtersets.py:64 #: netbox/virtualization/forms/filtersets.py:143 -#: netbox/virtualization/forms/model_forms.py:97 +#: netbox/virtualization/forms/model_forms.py:98 #: netbox/wireless/forms/filtersets.py:78 msgid "Site group" msgstr "" @@ -1370,7 +1370,7 @@ msgstr "" #: netbox/virtualization/forms/bulk_edit.py:66 #: netbox/virtualization/forms/bulk_import.py:48 #: netbox/virtualization/forms/filtersets.py:90 -#: netbox/virtualization/forms/model_forms.py:69 +#: netbox/virtualization/forms/model_forms.py:70 #: netbox/virtualization/tables/clusters.py:70 #: netbox/vpn/forms/bulk_edit.py:112 netbox/vpn/forms/bulk_import.py:158 #: netbox/vpn/forms/filtersets.py:116 netbox/vpn/tables/crypto.py:31 @@ -1529,7 +1529,7 @@ msgstr "" #: netbox/circuits/models/circuits.py:290 #: netbox/circuits/models/virtual_circuits.py:144 #: netbox/dcim/models/device_component_templates.py:57 -#: netbox/dcim/models/device_components.py:63 netbox/dcim/models/racks.py:676 +#: netbox/dcim/models/device_components.py:63 netbox/dcim/models/racks.py:681 #: netbox/extras/models/configs.py:45 netbox/extras/models/configs.py:219 #: netbox/extras/models/customfields.py:125 netbox/extras/models/models.py:61 #: netbox/extras/models/models.py:158 netbox/extras/models/models.py:396 @@ -1782,7 +1782,7 @@ msgstr "" #: netbox/vpn/tables/crypto.py:158 netbox/vpn/tables/l2vpn.py:23 #: netbox/vpn/tables/tunnels.py:18 netbox/vpn/tables/tunnels.py:40 #: netbox/wireless/tables/wirelesslan.py:18 -#: netbox/wireless/tables/wirelesslan.py:87 +#: netbox/wireless/tables/wirelesslan.py:88 msgid "Name" msgstr "" @@ -1831,8 +1831,8 @@ msgstr "" #: netbox/dcim/tables/racks.py:224 netbox/dcim/tables/sites.py:108 #: netbox/extras/tables/tables.py:582 netbox/ipam/tables/asn.py:69 #: netbox/ipam/tables/fhrp.py:34 netbox/ipam/tables/ip.py:82 -#: netbox/ipam/tables/ip.py:225 netbox/ipam/tables/ip.py:280 -#: netbox/ipam/tables/ip.py:348 netbox/ipam/tables/services.py:24 +#: netbox/ipam/tables/ip.py:226 netbox/ipam/tables/ip.py:281 +#: netbox/ipam/tables/ip.py:349 netbox/ipam/tables/services.py:24 #: netbox/ipam/tables/services.py:54 netbox/ipam/tables/vlans.py:121 #: netbox/ipam/tables/vrfs.py:47 netbox/ipam/tables/vrfs.py:72 #: netbox/templates/dcim/htmx/cable_edit.html:89 @@ -1840,13 +1840,13 @@ msgstr "" #: netbox/templates/inc/panels/comments.html:5 #: netbox/tenancy/tables/contacts.py:68 netbox/tenancy/tables/tenants.py:46 #: netbox/utilities/forms/fields/fields.py:29 -#: netbox/virtualization/tables/clusters.py:94 +#: netbox/virtualization/tables/clusters.py:95 #: netbox/virtualization/tables/virtualmachines.py:52 #: netbox/vpn/tables/crypto.py:37 netbox/vpn/tables/crypto.py:74 #: netbox/vpn/tables/crypto.py:109 netbox/vpn/tables/crypto.py:140 #: netbox/vpn/tables/crypto.py:173 netbox/vpn/tables/l2vpn.py:37 #: netbox/vpn/tables/tunnels.py:61 netbox/wireless/tables/wirelesslan.py:27 -#: netbox/wireless/tables/wirelesslan.py:65 +#: netbox/wireless/tables/wirelesslan.py:66 msgid "Comments" msgstr "" @@ -1960,14 +1960,14 @@ msgstr "" #: netbox/virtualization/forms/bulk_edit.py:119 #: netbox/virtualization/forms/bulk_import.py:105 #: netbox/virtualization/forms/filtersets.py:133 -#: netbox/virtualization/forms/model_forms.py:184 +#: netbox/virtualization/forms/model_forms.py:192 #: netbox/virtualization/tables/virtualmachines.py:41 netbox/vpn/choices.py:52 #: netbox/vpn/forms/bulk_import.py:86 netbox/vpn/forms/bulk_import.py:283 #: netbox/vpn/forms/filtersets.py:275 netbox/vpn/forms/model_forms.py:91 #: netbox/vpn/forms/model_forms.py:126 netbox/vpn/forms/model_forms.py:237 #: netbox/vpn/forms/model_forms.py:456 netbox/wireless/forms/model_forms.py:102 #: netbox/wireless/forms/model_forms.py:144 -#: netbox/wireless/tables/wirelesslan.py:83 +#: netbox/wireless/tables/wirelesslan.py:84 msgid "Device" msgstr "" @@ -2895,11 +2895,11 @@ msgstr "" msgid "Failed to stop job {id}" msgstr "" -#: netbox/core/views.py:600 +#: netbox/core/views.py:601 msgid "Plugins catalog could not be loaded" msgstr "" -#: netbox/core/views.py:634 +#: netbox/core/views.py:635 #, python-brace-format msgid "Plugin {name} not found" msgstr "" @@ -3009,7 +3009,7 @@ msgstr "" #: netbox/dcim/tables/devices.py:689 netbox/dcim/tables/devices.py:899 #: netbox/dcim/tables/devices.py:986 netbox/dcim/tables/devices.py:1146 #: netbox/extras/tables/tables.py:223 netbox/ipam/tables/fhrp.py:59 -#: netbox/ipam/tables/ip.py:329 netbox/ipam/tables/services.py:44 +#: netbox/ipam/tables/ip.py:330 netbox/ipam/tables/services.py:44 #: netbox/templates/dcim/interface.html:108 #: netbox/templates/dcim/interface.html:366 #: netbox/templates/dcim/location.html:41 netbox/templates/dcim/region.html:37 @@ -3688,8 +3688,8 @@ msgstr "" #: netbox/ipam/forms/model_forms.py:480 netbox/ipam/forms/model_forms.py:494 #: netbox/ipam/models/ip.py:217 netbox/ipam/models/ip.py:498 #: netbox/ipam/models/ip.py:719 netbox/ipam/models/vrfs.py:61 -#: netbox/ipam/tables/ip.py:188 netbox/ipam/tables/ip.py:260 -#: netbox/ipam/tables/ip.py:311 netbox/ipam/tables/ip.py:401 +#: netbox/ipam/tables/ip.py:188 netbox/ipam/tables/ip.py:261 +#: netbox/ipam/tables/ip.py:312 netbox/ipam/tables/ip.py:402 #: netbox/templates/dcim/interface.html:152 #: netbox/templates/ipam/ipaddress.html:18 #: netbox/templates/ipam/iprange.html:40 netbox/templates/ipam/prefix.html:19 @@ -3698,7 +3698,7 @@ msgstr "" #: netbox/virtualization/forms/bulk_edit.py:243 #: netbox/virtualization/forms/bulk_import.py:177 #: netbox/virtualization/forms/filtersets.py:233 -#: netbox/virtualization/forms/model_forms.py:360 +#: netbox/virtualization/forms/model_forms.py:368 #: netbox/virtualization/models/virtualmachines.py:331 #: netbox/virtualization/tables/virtualmachines.py:113 msgid "VRF" @@ -3735,7 +3735,7 @@ msgstr "" #: netbox/dcim/models/device_components.py:568 #: netbox/ipam/forms/filtersets.py:489 netbox/ipam/forms/model_forms.py:704 #: netbox/templates/ipam/vlantranslationpolicy.html:11 -#: netbox/virtualization/forms/model_forms.py:365 +#: netbox/virtualization/forms/model_forms.py:373 msgid "VLAN Translation Policy" msgstr "" @@ -3777,7 +3777,7 @@ msgstr "" #: netbox/dcim/filtersets.py:1800 netbox/dcim/forms/model_forms.py:1415 #: netbox/virtualization/filtersets.py:279 -#: netbox/virtualization/forms/model_forms.py:303 +#: netbox/virtualization/forms/model_forms.py:311 msgid "Primary MAC address" msgstr "" @@ -4075,7 +4075,7 @@ msgstr "" #: netbox/templates/dcim/rack/base.html:4 #: netbox/templates/dcim/rackreservation.html:19 #: netbox/templates/dcim/rackreservation.html:36 -#: netbox/virtualization/forms/model_forms.py:112 +#: netbox/virtualization/forms/model_forms.py:113 msgid "Rack" msgstr "" @@ -4141,7 +4141,7 @@ msgstr "" #: netbox/virtualization/forms/bulk_import.py:138 #: netbox/virtualization/forms/bulk_import.py:139 #: netbox/virtualization/forms/filtersets.py:193 -#: netbox/virtualization/forms/model_forms.py:214 +#: netbox/virtualization/forms/model_forms.py:222 msgid "Config template" msgstr "" @@ -4166,7 +4166,7 @@ msgstr "" #: netbox/virtualization/forms/bulk_edit.py:142 #: netbox/virtualization/forms/bulk_import.py:128 #: netbox/virtualization/forms/filtersets.py:173 -#: netbox/virtualization/forms/model_forms.py:202 +#: netbox/virtualization/forms/model_forms.py:210 #: netbox/virtualization/tables/virtualmachines.py:49 msgid "Platform" msgstr "" @@ -4187,8 +4187,8 @@ msgstr "" #: netbox/virtualization/forms/filtersets.py:104 #: netbox/virtualization/forms/filtersets.py:128 #: netbox/virtualization/forms/filtersets.py:209 -#: netbox/virtualization/forms/model_forms.py:77 -#: netbox/virtualization/forms/model_forms.py:175 +#: netbox/virtualization/forms/model_forms.py:78 +#: netbox/virtualization/forms/model_forms.py:183 #: netbox/virtualization/tables/virtualmachines.py:37 msgid "Cluster" msgstr "" @@ -4381,21 +4381,21 @@ msgstr "" #: netbox/dcim/forms/bulk_edit.py:1493 netbox/dcim/forms/model_forms.py:1377 #: netbox/ipam/forms/bulk_import.py:174 netbox/ipam/forms/filtersets.py:539 #: netbox/ipam/models/vlans.py:86 netbox/virtualization/forms/bulk_edit.py:222 -#: netbox/virtualization/forms/model_forms.py:327 +#: netbox/virtualization/forms/model_forms.py:335 msgid "VLAN group" msgstr "" #: netbox/dcim/forms/bulk_edit.py:1502 netbox/dcim/forms/model_forms.py:1383 #: netbox/dcim/tables/devices.py:592 #: netbox/virtualization/forms/bulk_edit.py:230 -#: netbox/virtualization/forms/model_forms.py:332 +#: netbox/virtualization/forms/model_forms.py:340 msgid "Untagged VLAN" msgstr "" #: netbox/dcim/forms/bulk_edit.py:1511 netbox/dcim/forms/model_forms.py:1392 #: netbox/dcim/tables/devices.py:598 #: netbox/virtualization/forms/bulk_edit.py:238 -#: netbox/virtualization/forms/model_forms.py:341 +#: netbox/virtualization/forms/model_forms.py:349 msgid "Tagged VLANs" msgstr "" @@ -4408,7 +4408,7 @@ msgid "Remove tagged VLANs" msgstr "" #: netbox/dcim/forms/bulk_edit.py:1534 netbox/dcim/forms/model_forms.py:1401 -#: netbox/virtualization/forms/model_forms.py:350 +#: netbox/virtualization/forms/model_forms.py:358 msgid "Q-in-Q Service VLAN" msgstr "" @@ -4430,13 +4430,13 @@ msgstr "" #: netbox/templates/dcim/interface.html:128 #: netbox/templates/ipam/prefix.html:91 #: netbox/templates/virtualization/vminterface.html:70 -#: netbox/virtualization/forms/model_forms.py:370 +#: netbox/virtualization/forms/model_forms.py:378 msgid "Addressing" msgstr "" #: netbox/dcim/forms/bulk_edit.py:1564 netbox/dcim/forms/filtersets.py:721 #: netbox/dcim/forms/model_forms.py:1436 -#: netbox/virtualization/forms/model_forms.py:371 +#: netbox/virtualization/forms/model_forms.py:379 msgid "Operation" msgstr "" @@ -4448,13 +4448,13 @@ msgstr "" #: netbox/dcim/forms/bulk_edit.py:1566 netbox/dcim/forms/model_forms.py:1437 #: netbox/templates/dcim/interface.html:105 #: netbox/virtualization/forms/bulk_edit.py:249 -#: netbox/virtualization/forms/model_forms.py:372 +#: netbox/virtualization/forms/model_forms.py:380 msgid "Related Interfaces" msgstr "" #: netbox/dcim/forms/bulk_edit.py:1567 netbox/dcim/forms/model_forms.py:1441 #: netbox/virtualization/forms/bulk_edit.py:250 -#: netbox/virtualization/forms/model_forms.py:375 +#: netbox/virtualization/forms/model_forms.py:383 msgid "802.1Q Switching" msgstr "" @@ -4711,13 +4711,13 @@ msgstr "" #: netbox/dcim/forms/bulk_import.py:867 netbox/dcim/forms/model_forms.py:1339 #: netbox/virtualization/forms/bulk_import.py:161 -#: netbox/virtualization/forms/model_forms.py:311 +#: netbox/virtualization/forms/model_forms.py:319 msgid "Parent interface" msgstr "" #: netbox/dcim/forms/bulk_import.py:874 netbox/dcim/forms/model_forms.py:1347 #: netbox/virtualization/forms/bulk_import.py:168 -#: netbox/virtualization/forms/model_forms.py:319 +#: netbox/virtualization/forms/model_forms.py:327 msgid "Bridged interface" msgstr "" @@ -4844,7 +4844,7 @@ msgstr "" #: netbox/virtualization/forms/bulk_import.py:213 #: netbox/virtualization/forms/filtersets.py:217 #: netbox/virtualization/forms/filtersets.py:253 -#: netbox/virtualization/forms/model_forms.py:287 +#: netbox/virtualization/forms/model_forms.py:295 #: netbox/vpn/forms/bulk_import.py:93 netbox/vpn/forms/bulk_import.py:290 msgid "Virtual machine" msgstr "" @@ -5185,7 +5185,7 @@ msgstr "" #: netbox/templates/wireless/wirelesslan.html:26 #: netbox/virtualization/forms/bulk_edit.py:91 #: netbox/virtualization/forms/filtersets.py:46 -#: netbox/virtualization/forms/model_forms.py:78 +#: netbox/virtualization/forms/model_forms.py:79 #: netbox/virtualization/tables/clusters.py:80 #: netbox/wireless/forms/bulk_edit.py:93 netbox/wireless/forms/filtersets.py:37 #: netbox/wireless/forms/model_forms.py:56 @@ -5408,7 +5408,7 @@ msgstr "" #: netbox/templates/vpn/tunneltermination.html:25 #: netbox/virtualization/forms/filtersets.py:202 #: netbox/virtualization/forms/filtersets.py:247 -#: netbox/virtualization/forms/model_forms.py:219 +#: netbox/virtualization/forms/model_forms.py:227 #: netbox/virtualization/tables/virtualmachines.py:105 #: netbox/virtualization/tables/virtualmachines.py:161 netbox/vpn/choices.py:53 #: netbox/vpn/forms/filtersets.py:293 netbox/vpn/forms/model_forms.py:161 @@ -6786,43 +6786,43 @@ msgstr "" msgid "Assigned location must belong to parent site ({site})." msgstr "" -#: netbox/dcim/models/racks.py:383 +#: netbox/dcim/models/racks.py:387 #, python-brace-format msgid "" "Rack must be at least {min_height}U tall to house currently installed " "devices." msgstr "" -#: netbox/dcim/models/racks.py:391 +#: netbox/dcim/models/racks.py:396 #, python-brace-format msgid "" "Rack unit numbering must begin at {position} or less to house currently " "installed devices." msgstr "" -#: netbox/dcim/models/racks.py:399 +#: netbox/dcim/models/racks.py:404 #, python-brace-format msgid "Location must be from the same site, {site}." msgstr "" -#: netbox/dcim/models/racks.py:661 +#: netbox/dcim/models/racks.py:666 msgid "units" msgstr "" -#: netbox/dcim/models/racks.py:687 +#: netbox/dcim/models/racks.py:692 msgid "rack reservation" msgstr "" -#: netbox/dcim/models/racks.py:688 +#: netbox/dcim/models/racks.py:693 msgid "rack reservations" msgstr "" -#: netbox/dcim/models/racks.py:702 +#: netbox/dcim/models/racks.py:707 #, python-brace-format msgid "Invalid unit(s) for {height}U rack: {unit_list}" msgstr "" -#: netbox/dcim/models/racks.py:715 +#: netbox/dcim/models/racks.py:720 #, python-brace-format msgid "The following units have already been reserved: {unit_list}" msgstr "" @@ -6967,14 +6967,14 @@ msgstr "" #: netbox/dcim/tables/sites.py:148 netbox/extras/tables/tables.py:545 #: netbox/netbox/navigation/menu.py:69 netbox/netbox/navigation/menu.py:73 #: netbox/netbox/navigation/menu.py:75 -#: netbox/virtualization/forms/model_forms.py:121 -#: netbox/virtualization/tables/clusters.py:86 +#: netbox/virtualization/forms/model_forms.py:122 +#: netbox/virtualization/tables/clusters.py:87 #: netbox/virtualization/views.py:218 msgid "Devices" msgstr "" #: netbox/dcim/tables/devices.py:74 netbox/dcim/tables/devices.py:122 -#: netbox/virtualization/tables/clusters.py:91 +#: netbox/virtualization/tables/clusters.py:92 msgid "VMs" msgstr "" @@ -6994,8 +6994,8 @@ msgstr "" #: netbox/dcim/tables/devices.py:197 netbox/dcim/tables/devices.py:1099 #: netbox/ipam/forms/bulk_import.py:562 netbox/ipam/forms/model_forms.py:308 -#: netbox/ipam/forms/model_forms.py:321 netbox/ipam/tables/ip.py:307 -#: netbox/ipam/tables/ip.py:374 netbox/ipam/tables/ip.py:397 +#: netbox/ipam/forms/model_forms.py:321 netbox/ipam/tables/ip.py:308 +#: netbox/ipam/tables/ip.py:375 netbox/ipam/tables/ip.py:398 #: netbox/templates/ipam/ipaddress.html:11 #: netbox/virtualization/tables/virtualmachines.py:65 msgid "IP Address" @@ -7058,7 +7058,7 @@ msgstr "" #: netbox/templates/virtualization/virtualmachine/base.html:27 #: netbox/templates/virtualization/virtualmachine_list.html:14 #: netbox/virtualization/tables/virtualmachines.py:71 -#: netbox/virtualization/views.py:383 netbox/wireless/tables/wirelesslan.py:62 +#: netbox/virtualization/views.py:383 netbox/wireless/tables/wirelesslan.py:63 msgid "Interfaces" msgstr "" @@ -7369,7 +7369,7 @@ msgstr "" #: netbox/dcim/views.py:2250 netbox/extras/forms/model_forms.py:577 #: netbox/templates/extras/configcontext.html:10 -#: netbox/virtualization/forms/model_forms.py:224 +#: netbox/virtualization/forms/model_forms.py:232 #: netbox/virtualization/views.py:424 msgid "Config Context" msgstr "" @@ -9650,7 +9650,7 @@ msgid "Date added" msgstr "" #: netbox/ipam/forms/bulk_edit.py:213 netbox/ipam/forms/model_forms.py:621 -#: netbox/ipam/forms/model_forms.py:668 netbox/ipam/tables/ip.py:200 +#: netbox/ipam/forms/model_forms.py:668 netbox/ipam/tables/ip.py:201 #: netbox/templates/ipam/vlan_edit.html:45 #: netbox/templates/ipam/vlangroup.html:27 msgid "VLAN Group" @@ -9658,7 +9658,7 @@ msgstr "" #: netbox/ipam/forms/bulk_edit.py:218 netbox/ipam/forms/bulk_import.py:181 #: netbox/ipam/forms/filtersets.py:259 netbox/ipam/forms/model_forms.py:217 -#: netbox/ipam/models/vlans.py:272 netbox/ipam/tables/ip.py:205 +#: netbox/ipam/models/vlans.py:272 netbox/ipam/tables/ip.py:206 #: netbox/templates/ipam/prefix.html:56 netbox/templates/ipam/vlan.html:12 #: netbox/templates/ipam/vlan/base.html:6 #: netbox/templates/ipam/vlan_edit.html:10 @@ -10516,8 +10516,8 @@ msgstr "" msgid "Prefixes" msgstr "" -#: netbox/ipam/tables/ip.py:77 netbox/ipam/tables/ip.py:220 -#: netbox/ipam/tables/ip.py:275 netbox/ipam/tables/vlans.py:55 +#: netbox/ipam/tables/ip.py:77 netbox/ipam/tables/ip.py:221 +#: netbox/ipam/tables/ip.py:276 netbox/ipam/tables/vlans.py:55 #: netbox/templates/dcim/device.html:260 #: netbox/templates/ipam/aggregate.html:24 #: netbox/templates/ipam/iprange.html:29 netbox/templates/ipam/prefix.html:102 @@ -10542,31 +10542,31 @@ msgstr "" msgid "Scope Type" msgstr "" -#: netbox/ipam/tables/ip.py:212 +#: netbox/ipam/tables/ip.py:213 msgid "Pool" msgstr "" -#: netbox/ipam/tables/ip.py:216 netbox/ipam/tables/ip.py:271 +#: netbox/ipam/tables/ip.py:217 netbox/ipam/tables/ip.py:272 msgid "Marked Utilized" msgstr "" -#: netbox/ipam/tables/ip.py:255 +#: netbox/ipam/tables/ip.py:256 msgid "Start address" msgstr "" -#: netbox/ipam/tables/ip.py:334 +#: netbox/ipam/tables/ip.py:335 msgid "NAT (Inside)" msgstr "" -#: netbox/ipam/tables/ip.py:339 +#: netbox/ipam/tables/ip.py:340 msgid "NAT (Outside)" msgstr "" -#: netbox/ipam/tables/ip.py:344 +#: netbox/ipam/tables/ip.py:345 msgid "Assigned" msgstr "" -#: netbox/ipam/tables/ip.py:380 netbox/templates/vpn/l2vpntermination.html:16 +#: netbox/ipam/tables/ip.py:381 netbox/templates/vpn/l2vpntermination.html:16 #: netbox/vpn/forms/filtersets.py:240 msgid "Assigned Object" msgstr "" @@ -11582,63 +11582,63 @@ msgstr "" msgid "Cannot delete stores from registry" msgstr "" -#: netbox/netbox/settings.py:742 +#: netbox/netbox/settings.py:752 msgid "Czech" msgstr "" -#: netbox/netbox/settings.py:743 +#: netbox/netbox/settings.py:753 msgid "Danish" msgstr "" -#: netbox/netbox/settings.py:744 +#: netbox/netbox/settings.py:754 msgid "German" msgstr "" -#: netbox/netbox/settings.py:745 +#: netbox/netbox/settings.py:755 msgid "English" msgstr "" -#: netbox/netbox/settings.py:746 +#: netbox/netbox/settings.py:756 msgid "Spanish" msgstr "" -#: netbox/netbox/settings.py:747 +#: netbox/netbox/settings.py:757 msgid "French" msgstr "" -#: netbox/netbox/settings.py:748 +#: netbox/netbox/settings.py:758 msgid "Italian" msgstr "" -#: netbox/netbox/settings.py:749 +#: netbox/netbox/settings.py:759 msgid "Japanese" msgstr "" -#: netbox/netbox/settings.py:750 +#: netbox/netbox/settings.py:760 msgid "Dutch" msgstr "" -#: netbox/netbox/settings.py:751 +#: netbox/netbox/settings.py:761 msgid "Polish" msgstr "" -#: netbox/netbox/settings.py:752 +#: netbox/netbox/settings.py:762 msgid "Portuguese" msgstr "" -#: netbox/netbox/settings.py:753 +#: netbox/netbox/settings.py:763 msgid "Russian" msgstr "" -#: netbox/netbox/settings.py:754 +#: netbox/netbox/settings.py:764 msgid "Turkish" msgstr "" -#: netbox/netbox/settings.py:755 +#: netbox/netbox/settings.py:765 msgid "Ukrainian" msgstr "" -#: netbox/netbox/settings.py:756 +#: netbox/netbox/settings.py:766 msgid "Chinese" msgstr "" @@ -12709,7 +12709,7 @@ msgstr "" #: netbox/templates/dcim/device.html:175 #: netbox/templates/dcim/device_edit.html:64 -#: netbox/virtualization/forms/model_forms.py:222 +#: netbox/virtualization/forms/model_forms.py:230 msgid "Management" msgstr "" @@ -13051,7 +13051,7 @@ msgstr "" #: netbox/templates/dcim/interface.html:81 #: netbox/templates/virtualization/vminterface.html:55 -#: netbox/virtualization/forms/model_forms.py:387 +#: netbox/virtualization/forms/model_forms.py:395 msgid "802.1Q Mode" msgstr "" @@ -14478,13 +14478,13 @@ msgid "Add Cluster" msgstr "" #: netbox/templates/virtualization/clustergroup.html:19 -#: netbox/virtualization/forms/model_forms.py:52 +#: netbox/virtualization/forms/model_forms.py:53 msgid "Cluster Group" msgstr "" #: netbox/templates/virtualization/clustertype.html:19 #: netbox/templates/virtualization/virtualmachine.html:110 -#: netbox/virtualization/forms/model_forms.py:38 +#: netbox/virtualization/forms/model_forms.py:39 msgid "Cluster Type" msgstr "" @@ -14494,7 +14494,7 @@ msgstr "" #: netbox/templates/virtualization/virtualmachine.html:122 #: netbox/virtualization/forms/bulk_edit.py:172 -#: netbox/virtualization/forms/model_forms.py:223 +#: netbox/virtualization/forms/model_forms.py:231 msgid "Resources" msgstr "" @@ -15531,26 +15531,26 @@ msgstr "" msgid "Serial number" msgstr "" -#: netbox/virtualization/forms/model_forms.py:152 +#: netbox/virtualization/forms/model_forms.py:158 #, python-brace-format msgid "" -"{device} belongs to a different site ({device_site}) than the cluster " -"({cluster_site})" +"{device} belongs to a different {scope_field} ({device_scope}) than the " +"cluster ({cluster_scope})" msgstr "" -#: netbox/virtualization/forms/model_forms.py:191 +#: netbox/virtualization/forms/model_forms.py:199 msgid "Optionally pin this VM to a specific host device within the cluster" msgstr "" -#: netbox/virtualization/forms/model_forms.py:220 +#: netbox/virtualization/forms/model_forms.py:228 msgid "Site/Cluster" msgstr "" -#: netbox/virtualization/forms/model_forms.py:243 +#: netbox/virtualization/forms/model_forms.py:251 msgid "Disk size is managed via the attachment of virtual disks." msgstr "" -#: netbox/virtualization/forms/model_forms.py:397 +#: netbox/virtualization/forms/model_forms.py:405 #: netbox/virtualization/tables/virtualmachines.py:81 msgid "Disk" msgstr "" From 51a79505fe10b0599b47eacced2f31622dbc9606 Mon Sep 17 00:00:00 2001 From: Daniel Sheppard Date: Mon, 20 Jan 2025 22:21:36 -0600 Subject: [PATCH 035/152] Fixes: #18433 - Fix missing is_primary property on MACAddress model --- netbox/dcim/models/devices.py | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/netbox/dcim/models/devices.py b/netbox/dcim/models/devices.py index dbcd91ea0..49fd46d23 100644 --- a/netbox/dcim/models/devices.py +++ b/netbox/dcim/models/devices.py @@ -1522,3 +1522,10 @@ class MACAddress(PrimaryModel): def __str__(self): return str(self.mac_address) + + @property + def is_primary(self): + if self.assigned_object and hasattr(self.assigned_object, 'primary_mac_address'): + if self.assigned_object.primary_mac_address and self.assigned_object.primary_mac_address.pk == self.pk: + return True + return False From 277acd3a3198da87f4e87816bf497be6b66e528e Mon Sep 17 00:00:00 2001 From: Daniel Sheppard Date: Mon, 20 Jan 2025 22:49:55 -0600 Subject: [PATCH 036/152] Fixes: #18436 - Prevent unassigning mac address when primary on an interface --- netbox/dcim/models/devices.py | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/netbox/dcim/models/devices.py b/netbox/dcim/models/devices.py index dbcd91ea0..d202d5d9e 100644 --- a/netbox/dcim/models/devices.py +++ b/netbox/dcim/models/devices.py @@ -15,6 +15,7 @@ from django.urls import reverse from django.utils.safestring import mark_safe from django.utils.translation import gettext_lazy as _ +from core.models import ObjectType from dcim.choices import * from dcim.constants import * from dcim.fields import MACAddressField @@ -1522,3 +1523,26 @@ class MACAddress(PrimaryModel): def __str__(self): return str(self.mac_address) + + def __init__(self, *args, **kwargs): + super().__init__(*args, **kwargs) + + # Denote the original assigned object (if any) for validation in clean() + self._original_assigned_object_id = self.__dict__.get('assigned_object_id') + self._original_assigned_object_type_id = self.__dict__.get('assigned_object_type_id') + + def clean(self, *args, **kwargs): + super().clean() + if self._original_assigned_object_id and self._original_assigned_object_type_id: + assigned_object = getattr(self.assigned_object, 'parent_object', None) + ct = ObjectType.objects.get_for_id(self._original_assigned_object_type_id) + original_assigned_object = ct.get_object_for_this_type(pk=self._original_assigned_object_id) + + if original_assigned_object and not assigned_object: + raise ValidationError( + _("Cannot unassign MAC Address while it is designated as the primary MAC for an object") + ) + elif original_assigned_object and original_assigned_object != assigned_object: + raise ValidationError( + _("Cannot reassign MAC Address while it is designated as the primary MAC for an object") + ) From 22e320084a9906159fdf2770a3c951cd80fc782b Mon Sep 17 00:00:00 2001 From: Daniel Sheppard Date: Mon, 20 Jan 2025 23:06:29 -0600 Subject: [PATCH 037/152] Update UI to disable interface assignment when assigned as primary --- netbox/dcim/forms/model_forms.py | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/netbox/dcim/forms/model_forms.py b/netbox/dcim/forms/model_forms.py index 9bc69e991..5a3a27d25 100644 --- a/netbox/dcim/forms/model_forms.py +++ b/netbox/dcim/forms/model_forms.py @@ -1810,6 +1810,11 @@ class MACAddressForm(NetBoxModelForm): super().__init__(*args, **kwargs) + if instance and instance.assigned_object and instance.assigned_object.primary_mac_address: + if instance.assigned_object.primary_mac_address.pk == instance.pk: + self.fields['interface'].disabled = True + self.fields['vminterface'].disabled = True + def clean(self): super().clean() From bec97df2426e95987959713670eb9debbb3669cf Mon Sep 17 00:00:00 2001 From: Daniel Sheppard Date: Mon, 20 Jan 2025 23:44:36 -0600 Subject: [PATCH 038/152] Fix Tests --- netbox/dcim/models/devices.py | 19 ++++++++++--------- 1 file changed, 10 insertions(+), 9 deletions(-) diff --git a/netbox/dcim/models/devices.py b/netbox/dcim/models/devices.py index d202d5d9e..6ef5ab488 100644 --- a/netbox/dcim/models/devices.py +++ b/netbox/dcim/models/devices.py @@ -1534,15 +1534,16 @@ class MACAddress(PrimaryModel): def clean(self, *args, **kwargs): super().clean() if self._original_assigned_object_id and self._original_assigned_object_type_id: - assigned_object = getattr(self.assigned_object, 'parent_object', None) + assigned_object = self.assigned_object ct = ObjectType.objects.get_for_id(self._original_assigned_object_type_id) original_assigned_object = ct.get_object_for_this_type(pk=self._original_assigned_object_id) - if original_assigned_object and not assigned_object: - raise ValidationError( - _("Cannot unassign MAC Address while it is designated as the primary MAC for an object") - ) - elif original_assigned_object and original_assigned_object != assigned_object: - raise ValidationError( - _("Cannot reassign MAC Address while it is designated as the primary MAC for an object") - ) + if original_assigned_object.primary_mac_address: + if not assigned_object: + raise ValidationError( + _("Cannot unassign MAC Address while it is designated as the primary MAC for an object") + ) + elif original_assigned_object != assigned_object: + raise ValidationError( + _("Cannot reassign MAC Address while it is designated as the primary MAC for an object") + ) From b91366129783d34b474d36e5dbf65e0d09016983 Mon Sep 17 00:00:00 2001 From: Jeremy Stretch Date: Mon, 20 Jan 2025 14:34:20 -0500 Subject: [PATCH 039/152] Fixes #18438: Specify batch_size for migrations which run bulk_update() --- .../migrations/0048_circuitterminations_cached_relations.py | 3 +-- netbox/ipam/migrations/0072_prefix_cached_relations.py | 2 +- .../migrations/0045_clusters_cached_relations.py | 2 +- 3 files changed, 3 insertions(+), 4 deletions(-) diff --git a/netbox/circuits/migrations/0048_circuitterminations_cached_relations.py b/netbox/circuits/migrations/0048_circuitterminations_cached_relations.py index fc1cef0e5..9be254d54 100644 --- a/netbox/circuits/migrations/0048_circuitterminations_cached_relations.py +++ b/netbox/circuits/migrations/0048_circuitterminations_cached_relations.py @@ -1,4 +1,3 @@ -# Generated by Django 5.0.9 on 2024-10-21 17:34 import django.db.models.deletion from django.db import migrations, models @@ -16,7 +15,7 @@ def populate_denormalized_fields(apps, schema_editor): termination._site_id = termination.site_id # Note: Location cannot be set prior to migration - CircuitTermination.objects.bulk_update(terminations, ['_region', '_site_group', '_site']) + CircuitTermination.objects.bulk_update(terminations, ['_region', '_site_group', '_site'], batch_size=100) class Migration(migrations.Migration): diff --git a/netbox/ipam/migrations/0072_prefix_cached_relations.py b/netbox/ipam/migrations/0072_prefix_cached_relations.py index e4a789704..58cefb12d 100644 --- a/netbox/ipam/migrations/0072_prefix_cached_relations.py +++ b/netbox/ipam/migrations/0072_prefix_cached_relations.py @@ -15,7 +15,7 @@ def populate_denormalized_fields(apps, schema_editor): prefix._site_id = prefix.site_id # Note: Location cannot be set prior to migration - Prefix.objects.bulk_update(prefixes, ['_region', '_site_group', '_site']) + Prefix.objects.bulk_update(prefixes, ['_region', '_site_group', '_site'], batch_size=100) class Migration(migrations.Migration): diff --git a/netbox/virtualization/migrations/0045_clusters_cached_relations.py b/netbox/virtualization/migrations/0045_clusters_cached_relations.py index 6d0c8ff33..9918bf594 100644 --- a/netbox/virtualization/migrations/0045_clusters_cached_relations.py +++ b/netbox/virtualization/migrations/0045_clusters_cached_relations.py @@ -15,7 +15,7 @@ def populate_denormalized_fields(apps, schema_editor): cluster._site_id = cluster.site_id # Note: Location cannot be set prior to migration - Cluster.objects.bulk_update(clusters, ['_region', '_site_group', '_site']) + Cluster.objects.bulk_update(clusters, ['_region', '_site_group', '_site'], batch_size=100) class Migration(migrations.Migration): From d1914595f6f30e8fa45e873ec1fa88998e8d89f0 Mon Sep 17 00:00:00 2001 From: Daniel Sheppard Date: Tue, 21 Jan 2025 10:15:33 -0600 Subject: [PATCH 040/152] Fixes: #18447 - Fix sorting by `mac_address` field * Disable sorting by `mac_address` for legacy `mac_address` field for Device and VM Interfaces * Ensure `primary_mac_address` field is included in field list for Device and VM Interfaces --- netbox/dcim/tables/devices.py | 12 ++++++++---- netbox/virtualization/tables/virtualmachines.py | 8 ++++++-- 2 files changed, 14 insertions(+), 6 deletions(-) diff --git a/netbox/dcim/tables/devices.py b/netbox/dcim/tables/devices.py index 087132331..4949bec82 100644 --- a/netbox/dcim/tables/devices.py +++ b/netbox/dcim/tables/devices.py @@ -697,6 +697,10 @@ class DeviceInterfaceTable(InterfaceTable): linkify=True, verbose_name=_('LAG') ) + mac_address = tables.Column( + verbose_name=_('MAC Address'), + orderable=False, + ) actions = columns.ActionsColumn( extra_buttons=INTERFACE_BUTTONS ) @@ -705,10 +709,10 @@ class DeviceInterfaceTable(InterfaceTable): model = models.Interface fields = ( 'pk', 'id', 'name', 'module_bay', 'module', 'label', 'enabled', 'type', 'parent', 'bridge', 'lag', - 'mgmt_only', 'mtu', 'mode', 'mac_address', 'wwn', 'rf_role', 'rf_channel', 'rf_channel_frequency', - 'rf_channel_width', 'tx_power', 'description', 'mark_connected', 'cable', 'cable_color', 'wireless_link', - 'wireless_lans', 'link_peer', 'connection', 'tags', 'vdcs', 'vrf', 'l2vpn', 'tunnel', 'ip_addresses', - 'fhrp_groups', 'untagged_vlan', 'tagged_vlans', 'qinq_svlan', 'actions', + 'mgmt_only', 'mtu', 'mode', 'mac_address', 'primary_mac_address', 'wwn', 'rf_role', 'rf_channel', + 'rf_channel_frequency', 'rf_channel_width', 'tx_power', 'description', 'mark_connected', 'cable', + 'cable_color', 'wireless_link', 'wireless_lans', 'link_peer', 'connection', 'tags', 'vdcs', 'vrf', 'l2vpn', + 'tunnel', 'ip_addresses', 'fhrp_groups', 'untagged_vlan', 'tagged_vlans', 'qinq_svlan', 'actions', ) default_columns = ( 'pk', 'name', 'label', 'enabled', 'type', 'parent', 'lag', 'mtu', 'mode', 'description', 'ip_addresses', diff --git a/netbox/virtualization/tables/virtualmachines.py b/netbox/virtualization/tables/virtualmachines.py index 116051037..c6fb6cb86 100644 --- a/netbox/virtualization/tables/virtualmachines.py +++ b/netbox/virtualization/tables/virtualmachines.py @@ -113,6 +113,10 @@ class VMInterfaceTable(BaseInterfaceTable): verbose_name=_('VRF'), linkify=True ) + mac_address = tables.Column( + verbose_name=_('MAC Address'), + orderable=False, + ) tags = columns.TagColumn( url_name='virtualization:vminterface_list' ) @@ -120,8 +124,8 @@ class VMInterfaceTable(BaseInterfaceTable): class Meta(NetBoxTable.Meta): model = VMInterface fields = ( - 'pk', 'id', 'name', 'virtual_machine', 'enabled', 'mac_address', 'mtu', 'mode', 'description', 'tags', - 'vrf', 'primary_mac_address', 'l2vpn', 'tunnel', 'ip_addresses', 'fhrp_groups', 'untagged_vlan', + 'pk', 'id', 'name', 'virtual_machine', 'enabled', 'mtu', 'mode', 'description', 'tags', 'vrf', + 'mac_address', 'primary_mac_address', 'l2vpn', 'tunnel', 'ip_addresses', 'fhrp_groups', 'untagged_vlan', 'tagged_vlans', 'qinq_svlan', 'created', 'last_updated', ) default_columns = ('pk', 'name', 'virtual_machine', 'enabled', 'description') From c56a39a1687a7e4787e31f8d7694c81b2acc1e80 Mon Sep 17 00:00:00 2001 From: Daniel Sheppard Date: Tue, 21 Jan 2025 10:44:46 -0600 Subject: [PATCH 041/152] Fixes: #18449 - Clean up some formatting errors --- netbox/dcim/base_filtersets.py | 8 ++++---- netbox/dcim/filtersets.py | 4 ++-- netbox/extras/tests/test_customfields.py | 4 ++-- netbox/ipam/models/vlans.py | 4 ++-- netbox/virtualization/forms/model_forms.py | 4 ++-- 5 files changed, 12 insertions(+), 12 deletions(-) diff --git a/netbox/dcim/base_filtersets.py b/netbox/dcim/base_filtersets.py index c007c0120..df2a6b650 100644 --- a/netbox/dcim/base_filtersets.py +++ b/netbox/dcim/base_filtersets.py @@ -53,10 +53,10 @@ class ScopedFilterSet(BaseFilterSet): label=_('Site (slug)'), ) location_id = TreeNodeMultipleChoiceFilter( - queryset=Location.objects.all(), - field_name='_location', - lookup_expr='in', - label=_('Location (ID)'), + queryset=Location.objects.all(), + field_name='_location', + lookup_expr='in', + label=_('Location (ID)'), ) location = TreeNodeMultipleChoiceFilter( queryset=Location.objects.all(), diff --git a/netbox/dcim/filtersets.py b/netbox/dcim/filtersets.py index 90a9993c2..60c3c4d38 100644 --- a/netbox/dcim/filtersets.py +++ b/netbox/dcim/filtersets.py @@ -1652,8 +1652,8 @@ class MACAddressFilterSet(NetBoxModelFilterSet): if not value.strip(): return queryset qs_filter = ( - Q(mac_address__icontains=value) | - Q(description__icontains=value) + Q(mac_address__icontains=value) | + Q(description__icontains=value) ) return queryset.filter(qs_filter) diff --git a/netbox/extras/tests/test_customfields.py b/netbox/extras/tests/test_customfields.py index d36477da8..8bae8dfc9 100644 --- a/netbox/extras/tests/test_customfields.py +++ b/netbox/extras/tests/test_customfields.py @@ -660,8 +660,8 @@ class CustomFieldAPITest(APITestCase): CustomField( type=CustomFieldTypeChoices.TYPE_BOOLEAN, name='boolean_field', - default=False) - , + default=False + ), CustomField( type=CustomFieldTypeChoices.TYPE_DATE, name='date_field', diff --git a/netbox/ipam/models/vlans.py b/netbox/ipam/models/vlans.py index 4c7f191c9..91e39c6d3 100644 --- a/netbox/ipam/models/vlans.py +++ b/netbox/ipam/models/vlans.py @@ -361,7 +361,7 @@ class VLANTranslationRule(NetBoxModel): ) local_vid = models.PositiveSmallIntegerField( verbose_name=_('Local VLAN ID'), - validators=( + validators=( MinValueValidator(VLAN_VID_MIN), MaxValueValidator(VLAN_VID_MAX) ), @@ -369,7 +369,7 @@ class VLANTranslationRule(NetBoxModel): ) remote_vid = models.PositiveSmallIntegerField( verbose_name=_('Remote VLAN ID'), - validators=( + validators=( MinValueValidator(VLAN_VID_MIN), MaxValueValidator(VLAN_VID_MAX) ), diff --git a/netbox/virtualization/forms/model_forms.py b/netbox/virtualization/forms/model_forms.py index 9d53c9382..291d6dbe8 100644 --- a/netbox/virtualization/forms/model_forms.py +++ b/netbox/virtualization/forms/model_forms.py @@ -150,8 +150,8 @@ class ClusterAddDevicesForm(forms.Form): for scope_field in ['site', 'location']: device_scope = getattr(device, scope_field) if ( - self.cluster.scope_type.model_class() == apps.get_model('dcim', scope_field) - and device_scope != self.cluster.scope + self.cluster.scope_type.model_class() == apps.get_model('dcim', scope_field) and + device_scope != self.cluster.scope ): raise ValidationError({ 'devices': _( From ad4e4e89a7a0124beaa5776ae8c4a459258d2336 Mon Sep 17 00:00:00 2001 From: Daniel Sheppard Date: Tue, 21 Jan 2025 11:15:33 -0600 Subject: [PATCH 042/152] Update `VirtualMachineVMInterfaceTable` --- netbox/virtualization/tables/virtualmachines.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/netbox/virtualization/tables/virtualmachines.py b/netbox/virtualization/tables/virtualmachines.py index c6fb6cb86..87296ce0d 100644 --- a/netbox/virtualization/tables/virtualmachines.py +++ b/netbox/virtualization/tables/virtualmachines.py @@ -148,11 +148,11 @@ class VirtualMachineVMInterfaceTable(VMInterfaceTable): class Meta(NetBoxTable.Meta): model = VMInterface fields = ( - 'pk', 'id', 'name', 'enabled', 'parent', 'bridge', 'mac_address', 'mtu', 'mode', 'description', 'tags', - 'vrf', 'l2vpn', 'tunnel', 'ip_addresses', 'fhrp_groups', 'untagged_vlan', 'tagged_vlans', 'qinq_svlan', - 'actions', + 'pk', 'id', 'name', 'enabled', 'parent', 'bridge', 'mac_address', 'primary_mac_address', 'mtu', 'mode', + 'description', 'tags', 'vrf', 'l2vpn', 'tunnel', 'ip_addresses', 'fhrp_groups', 'untagged_vlan', + 'tagged_vlans', 'qinq_svlan', 'actions', ) - default_columns = ('pk', 'name', 'enabled', 'mac_address', 'mtu', 'mode', 'description', 'ip_addresses') + default_columns = ('pk', 'name', 'enabled', 'primary_mac_address', 'mtu', 'mode', 'description', 'ip_addresses') row_attrs = { 'data-name': lambda record: record.name, 'data-virtual': lambda record: "true", From adcb6bebd2d5f35de33a698b4b765645aa0a0314 Mon Sep 17 00:00:00 2001 From: Daniel Sheppard Date: Wed, 22 Jan 2025 14:14:56 -0600 Subject: [PATCH 043/152] Remove `mac_address` from tables. --- netbox/dcim/tables/devices.py | 12 ++++-------- netbox/virtualization/tables/virtualmachines.py | 14 +++++--------- 2 files changed, 9 insertions(+), 17 deletions(-) diff --git a/netbox/dcim/tables/devices.py b/netbox/dcim/tables/devices.py index 4949bec82..d4f2f74b3 100644 --- a/netbox/dcim/tables/devices.py +++ b/netbox/dcim/tables/devices.py @@ -697,10 +697,6 @@ class DeviceInterfaceTable(InterfaceTable): linkify=True, verbose_name=_('LAG') ) - mac_address = tables.Column( - verbose_name=_('MAC Address'), - orderable=False, - ) actions = columns.ActionsColumn( extra_buttons=INTERFACE_BUTTONS ) @@ -709,10 +705,10 @@ class DeviceInterfaceTable(InterfaceTable): model = models.Interface fields = ( 'pk', 'id', 'name', 'module_bay', 'module', 'label', 'enabled', 'type', 'parent', 'bridge', 'lag', - 'mgmt_only', 'mtu', 'mode', 'mac_address', 'primary_mac_address', 'wwn', 'rf_role', 'rf_channel', - 'rf_channel_frequency', 'rf_channel_width', 'tx_power', 'description', 'mark_connected', 'cable', - 'cable_color', 'wireless_link', 'wireless_lans', 'link_peer', 'connection', 'tags', 'vdcs', 'vrf', 'l2vpn', - 'tunnel', 'ip_addresses', 'fhrp_groups', 'untagged_vlan', 'tagged_vlans', 'qinq_svlan', 'actions', + 'mgmt_only', 'mtu', 'mode', 'primary_mac_address', 'wwn', 'rf_role', 'rf_channel', 'rf_channel_frequency', + 'rf_channel_width', 'tx_power', 'description', 'mark_connected', 'cable', 'cable_color', 'wireless_link', + 'wireless_lans', 'link_peer', 'connection', 'tags', 'vdcs', 'vrf', 'l2vpn', 'tunnel', 'ip_addresses', + 'fhrp_groups', 'untagged_vlan', 'tagged_vlans', 'qinq_svlan', 'actions', ) default_columns = ( 'pk', 'name', 'label', 'enabled', 'type', 'parent', 'lag', 'mtu', 'mode', 'description', 'ip_addresses', diff --git a/netbox/virtualization/tables/virtualmachines.py b/netbox/virtualization/tables/virtualmachines.py index 87296ce0d..335d1de7d 100644 --- a/netbox/virtualization/tables/virtualmachines.py +++ b/netbox/virtualization/tables/virtualmachines.py @@ -113,10 +113,6 @@ class VMInterfaceTable(BaseInterfaceTable): verbose_name=_('VRF'), linkify=True ) - mac_address = tables.Column( - verbose_name=_('MAC Address'), - orderable=False, - ) tags = columns.TagColumn( url_name='virtualization:vminterface_list' ) @@ -125,8 +121,8 @@ class VMInterfaceTable(BaseInterfaceTable): model = VMInterface fields = ( 'pk', 'id', 'name', 'virtual_machine', 'enabled', 'mtu', 'mode', 'description', 'tags', 'vrf', - 'mac_address', 'primary_mac_address', 'l2vpn', 'tunnel', 'ip_addresses', 'fhrp_groups', 'untagged_vlan', - 'tagged_vlans', 'qinq_svlan', 'created', 'last_updated', + 'primary_mac_address', 'l2vpn', 'tunnel', 'ip_addresses', 'fhrp_groups', 'untagged_vlan', 'tagged_vlans', + 'qinq_svlan', 'created', 'last_updated', ) default_columns = ('pk', 'name', 'virtual_machine', 'enabled', 'description') @@ -148,9 +144,9 @@ class VirtualMachineVMInterfaceTable(VMInterfaceTable): class Meta(NetBoxTable.Meta): model = VMInterface fields = ( - 'pk', 'id', 'name', 'enabled', 'parent', 'bridge', 'mac_address', 'primary_mac_address', 'mtu', 'mode', - 'description', 'tags', 'vrf', 'l2vpn', 'tunnel', 'ip_addresses', 'fhrp_groups', 'untagged_vlan', - 'tagged_vlans', 'qinq_svlan', 'actions', + 'pk', 'id', 'name', 'enabled', 'parent', 'bridge', 'primary_mac_address', 'mtu', 'mode', 'description', + 'tags', 'vrf', 'l2vpn', 'tunnel', 'ip_addresses', 'fhrp_groups', 'untagged_vlan', 'tagged_vlans', + 'qinq_svlan', 'actions', ) default_columns = ('pk', 'name', 'enabled', 'primary_mac_address', 'mtu', 'mode', 'description', 'ip_addresses') row_attrs = { From 32196092536abc6c8141ad5c3aa974f14922674a Mon Sep 17 00:00:00 2001 From: Daniel Sheppard Date: Thu, 23 Jan 2025 18:30:54 -0600 Subject: [PATCH 044/152] Change to `@cached_property` --- netbox/dcim/models/devices.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/netbox/dcim/models/devices.py b/netbox/dcim/models/devices.py index 49fd46d23..87a87c90b 100644 --- a/netbox/dcim/models/devices.py +++ b/netbox/dcim/models/devices.py @@ -1523,7 +1523,7 @@ class MACAddress(PrimaryModel): def __str__(self): return str(self.mac_address) - @property + @cached_property def is_primary(self): if self.assigned_object and hasattr(self.assigned_object, 'primary_mac_address'): if self.assigned_object.primary_mac_address and self.assigned_object.primary_mac_address.pk == self.pk: From da9b4523276a3e8a644ffa718ec91cda0421a581 Mon Sep 17 00:00:00 2001 From: github-actions <41898282+github-actions[bot]@users.noreply.github.com> Date: Fri, 24 Jan 2025 05:02:20 +0000 Subject: [PATCH 045/152] Update source translation strings --- netbox/translations/en/LC_MESSAGES/django.po | 204 ++++++++++--------- 1 file changed, 108 insertions(+), 96 deletions(-) diff --git a/netbox/translations/en/LC_MESSAGES/django.po b/netbox/translations/en/LC_MESSAGES/django.po index 6b0b5e1d0..d63e1dd34 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: 2025-01-18 05:01+0000\n" +"POT-Creation-Date: 2025-01-24 05:02+0000\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -1402,7 +1402,7 @@ msgstr "" #: netbox/dcim/models/device_components.py:1024 #: netbox/dcim/models/device_components.py:1095 #: netbox/dcim/models/device_components.py:1241 -#: netbox/dcim/models/devices.py:477 netbox/dcim/models/racks.py:221 +#: netbox/dcim/models/devices.py:478 netbox/dcim/models/racks.py:221 #: netbox/extras/models/tags.py:28 msgid "color" msgstr "" @@ -1429,8 +1429,8 @@ msgstr "" #: netbox/circuits/models/virtual_circuits.py:59 netbox/core/models/data.py:52 #: netbox/core/models/jobs.py:85 netbox/dcim/models/cables.py:49 #: netbox/dcim/models/device_components.py:1281 -#: netbox/dcim/models/devices.py:644 netbox/dcim/models/devices.py:1176 -#: netbox/dcim/models/devices.py:1403 netbox/dcim/models/power.py:94 +#: netbox/dcim/models/devices.py:645 netbox/dcim/models/devices.py:1177 +#: netbox/dcim/models/devices.py:1404 netbox/dcim/models/power.py:94 #: netbox/dcim/models/racks.py:288 netbox/dcim/models/sites.py:154 #: netbox/dcim/models/sites.py:270 netbox/ipam/models/ip.py:237 #: netbox/ipam/models/ip.py:508 netbox/ipam/models/ip.py:729 @@ -1560,8 +1560,8 @@ msgstr "" #: netbox/circuits/models/providers.py:98 netbox/core/models/data.py:39 #: netbox/core/models/jobs.py:46 #: netbox/dcim/models/device_component_templates.py:43 -#: netbox/dcim/models/device_components.py:52 netbox/dcim/models/devices.py:588 -#: netbox/dcim/models/devices.py:1335 netbox/dcim/models/devices.py:1398 +#: netbox/dcim/models/device_components.py:52 netbox/dcim/models/devices.py:589 +#: netbox/dcim/models/devices.py:1336 netbox/dcim/models/devices.py:1399 #: netbox/dcim/models/power.py:38 netbox/dcim/models/power.py:89 #: netbox/dcim/models/racks.py:257 netbox/dcim/models/sites.py:142 #: netbox/extras/models/configs.py:36 netbox/extras/models/configs.py:215 @@ -1593,7 +1593,7 @@ msgstr "" msgid "Full name of the provider" msgstr "" -#: netbox/circuits/models/providers.py:28 netbox/dcim/models/devices.py:87 +#: netbox/circuits/models/providers.py:28 netbox/dcim/models/devices.py:88 #: netbox/dcim/models/racks.py:137 netbox/dcim/models/sites.py:149 #: netbox/extras/models/models.py:506 netbox/ipam/models/asns.py:23 #: netbox/ipam/models/vlans.py:42 netbox/netbox/models/__init__.py:145 @@ -3532,7 +3532,7 @@ msgstr "" #: netbox/dcim/filtersets.py:1104 netbox/dcim/forms/filtersets.py:819 #: netbox/dcim/forms/filtersets.py:1390 netbox/dcim/forms/filtersets.py:1586 #: netbox/dcim/forms/filtersets.py:1591 netbox/dcim/forms/model_forms.py:1762 -#: netbox/dcim/models/devices.py:1499 netbox/dcim/models/devices.py:1520 +#: netbox/dcim/models/devices.py:1500 netbox/dcim/models/devices.py:1521 #: netbox/virtualization/filtersets.py:196 #: netbox/virtualization/filtersets.py:268 #: netbox/virtualization/forms/filtersets.py:177 @@ -4125,7 +4125,7 @@ msgstr "" msgid "Chassis" msgstr "" -#: netbox/dcim/forms/bulk_edit.py:619 netbox/dcim/models/devices.py:482 +#: netbox/dcim/forms/bulk_edit.py:619 netbox/dcim/models/devices.py:483 #: netbox/dcim/tables/devices.py:78 msgid "VM role" msgstr "" @@ -5234,7 +5234,7 @@ msgstr "" msgid "Device Role" msgstr "" -#: netbox/dcim/forms/model_forms.py:500 netbox/dcim/models/devices.py:634 +#: netbox/dcim/forms/model_forms.py:500 netbox/dcim/models/devices.py:635 msgid "The lowest-numbered unit occupied by the device" msgstr "" @@ -5417,7 +5417,7 @@ msgstr "" msgid "Virtual Machine" msgstr "" -#: netbox/dcim/forms/model_forms.py:1822 +#: netbox/dcim/forms/model_forms.py:1827 msgid "A MAC address can only be assigned to a single object." msgstr "" @@ -6139,7 +6139,7 @@ msgid "module bays" msgstr "" #: netbox/dcim/models/device_components.py:1178 -#: netbox/dcim/models/devices.py:1224 +#: netbox/dcim/models/devices.py:1225 msgid "A module bay cannot belong to a module installed within it." msgstr "" @@ -6175,14 +6175,14 @@ msgid "inventory item roles" msgstr "" #: netbox/dcim/models/device_components.py:1308 -#: netbox/dcim/models/devices.py:597 netbox/dcim/models/devices.py:1184 +#: netbox/dcim/models/devices.py:598 netbox/dcim/models/devices.py:1185 #: netbox/dcim/models/racks.py:304 #: netbox/virtualization/models/virtualmachines.py:126 msgid "serial number" msgstr "" #: netbox/dcim/models/device_components.py:1316 -#: netbox/dcim/models/devices.py:605 netbox/dcim/models/devices.py:1191 +#: netbox/dcim/models/devices.py:606 netbox/dcim/models/devices.py:1192 #: netbox/dcim/models/racks.py:311 msgid "asset tag" msgstr "" @@ -6223,377 +6223,389 @@ msgstr "" msgid "Cannot assign inventory item to component on another device" msgstr "" -#: netbox/dcim/models/devices.py:58 +#: netbox/dcim/models/devices.py:59 msgid "manufacturer" msgstr "" -#: netbox/dcim/models/devices.py:59 +#: netbox/dcim/models/devices.py:60 msgid "manufacturers" msgstr "" -#: netbox/dcim/models/devices.py:83 netbox/dcim/models/devices.py:382 +#: netbox/dcim/models/devices.py:84 netbox/dcim/models/devices.py:383 #: netbox/dcim/models/racks.py:133 msgid "model" msgstr "" -#: netbox/dcim/models/devices.py:96 +#: netbox/dcim/models/devices.py:97 msgid "default platform" msgstr "" -#: netbox/dcim/models/devices.py:99 netbox/dcim/models/devices.py:386 +#: netbox/dcim/models/devices.py:100 netbox/dcim/models/devices.py:387 msgid "part number" msgstr "" -#: netbox/dcim/models/devices.py:102 netbox/dcim/models/devices.py:389 +#: netbox/dcim/models/devices.py:103 netbox/dcim/models/devices.py:390 msgid "Discrete part number (optional)" msgstr "" -#: netbox/dcim/models/devices.py:108 netbox/dcim/models/racks.py:53 +#: netbox/dcim/models/devices.py:109 netbox/dcim/models/racks.py:53 msgid "height (U)" msgstr "" -#: netbox/dcim/models/devices.py:112 +#: netbox/dcim/models/devices.py:113 msgid "exclude from utilization" msgstr "" -#: netbox/dcim/models/devices.py:113 +#: netbox/dcim/models/devices.py:114 msgid "Devices of this type are excluded when calculating rack utilization." msgstr "" -#: netbox/dcim/models/devices.py:117 +#: netbox/dcim/models/devices.py:118 msgid "is full depth" msgstr "" -#: netbox/dcim/models/devices.py:118 +#: netbox/dcim/models/devices.py:119 msgid "Device consumes both front and rear rack faces." msgstr "" -#: netbox/dcim/models/devices.py:125 +#: netbox/dcim/models/devices.py:126 msgid "parent/child status" msgstr "" -#: netbox/dcim/models/devices.py:126 +#: netbox/dcim/models/devices.py:127 msgid "" "Parent devices house child devices in device bays. Leave blank if this " "device type is neither a parent nor a child." msgstr "" -#: netbox/dcim/models/devices.py:130 netbox/dcim/models/devices.py:392 -#: netbox/dcim/models/devices.py:650 netbox/dcim/models/racks.py:315 +#: netbox/dcim/models/devices.py:131 netbox/dcim/models/devices.py:393 +#: netbox/dcim/models/devices.py:651 netbox/dcim/models/racks.py:315 msgid "airflow" msgstr "" -#: netbox/dcim/models/devices.py:207 +#: netbox/dcim/models/devices.py:208 msgid "device type" msgstr "" -#: netbox/dcim/models/devices.py:208 +#: netbox/dcim/models/devices.py:209 msgid "device types" msgstr "" -#: netbox/dcim/models/devices.py:290 +#: netbox/dcim/models/devices.py:291 msgid "U height must be in increments of 0.5 rack units." msgstr "" -#: netbox/dcim/models/devices.py:307 +#: netbox/dcim/models/devices.py:308 #, python-brace-format msgid "" "Device {device} in rack {rack} does not have sufficient space to accommodate " "a height of {height}U" msgstr "" -#: netbox/dcim/models/devices.py:322 +#: netbox/dcim/models/devices.py:323 #, python-brace-format msgid "" "Unable to set 0U height: Found {racked_instance_count} " "instances already mounted within racks." msgstr "" -#: netbox/dcim/models/devices.py:331 +#: netbox/dcim/models/devices.py:332 msgid "" "Must delete all device bay templates associated with this device before " "declassifying it as a parent device." msgstr "" -#: netbox/dcim/models/devices.py:337 +#: netbox/dcim/models/devices.py:338 msgid "Child device types must be 0U." msgstr "" -#: netbox/dcim/models/devices.py:412 +#: netbox/dcim/models/devices.py:413 msgid "module type" msgstr "" -#: netbox/dcim/models/devices.py:413 +#: netbox/dcim/models/devices.py:414 msgid "module types" msgstr "" -#: netbox/dcim/models/devices.py:483 +#: netbox/dcim/models/devices.py:484 msgid "Virtual machines may be assigned to this role" msgstr "" -#: netbox/dcim/models/devices.py:495 +#: netbox/dcim/models/devices.py:496 msgid "device role" msgstr "" -#: netbox/dcim/models/devices.py:496 +#: netbox/dcim/models/devices.py:497 msgid "device roles" msgstr "" -#: netbox/dcim/models/devices.py:510 +#: netbox/dcim/models/devices.py:511 msgid "Optionally limit this platform to devices of a certain manufacturer" msgstr "" -#: netbox/dcim/models/devices.py:522 +#: netbox/dcim/models/devices.py:523 msgid "platform" msgstr "" -#: netbox/dcim/models/devices.py:523 +#: netbox/dcim/models/devices.py:524 msgid "platforms" msgstr "" -#: netbox/dcim/models/devices.py:571 +#: netbox/dcim/models/devices.py:572 msgid "The function this device serves" msgstr "" -#: netbox/dcim/models/devices.py:598 +#: netbox/dcim/models/devices.py:599 msgid "Chassis serial number, assigned by the manufacturer" msgstr "" -#: netbox/dcim/models/devices.py:606 netbox/dcim/models/devices.py:1192 +#: netbox/dcim/models/devices.py:607 netbox/dcim/models/devices.py:1193 msgid "A unique tag used to identify this device" msgstr "" -#: netbox/dcim/models/devices.py:633 +#: netbox/dcim/models/devices.py:634 msgid "position (U)" msgstr "" -#: netbox/dcim/models/devices.py:641 +#: netbox/dcim/models/devices.py:642 msgid "rack face" msgstr "" -#: netbox/dcim/models/devices.py:662 netbox/dcim/models/devices.py:1419 +#: netbox/dcim/models/devices.py:663 netbox/dcim/models/devices.py:1420 #: netbox/virtualization/models/virtualmachines.py:95 msgid "primary IPv4" msgstr "" -#: netbox/dcim/models/devices.py:670 netbox/dcim/models/devices.py:1427 +#: netbox/dcim/models/devices.py:671 netbox/dcim/models/devices.py:1428 #: netbox/virtualization/models/virtualmachines.py:103 msgid "primary IPv6" msgstr "" -#: netbox/dcim/models/devices.py:678 +#: netbox/dcim/models/devices.py:679 msgid "out-of-band IP" msgstr "" -#: netbox/dcim/models/devices.py:695 +#: netbox/dcim/models/devices.py:696 msgid "VC position" msgstr "" -#: netbox/dcim/models/devices.py:698 +#: netbox/dcim/models/devices.py:699 msgid "Virtual chassis position" msgstr "" -#: netbox/dcim/models/devices.py:701 +#: netbox/dcim/models/devices.py:702 msgid "VC priority" msgstr "" -#: netbox/dcim/models/devices.py:705 +#: netbox/dcim/models/devices.py:706 msgid "Virtual chassis master election priority" msgstr "" -#: netbox/dcim/models/devices.py:708 netbox/dcim/models/sites.py:208 +#: netbox/dcim/models/devices.py:709 netbox/dcim/models/sites.py:208 msgid "latitude" msgstr "" -#: netbox/dcim/models/devices.py:713 netbox/dcim/models/devices.py:721 +#: netbox/dcim/models/devices.py:714 netbox/dcim/models/devices.py:722 #: netbox/dcim/models/sites.py:213 netbox/dcim/models/sites.py:221 msgid "GPS coordinate in decimal format (xx.yyyyyy)" msgstr "" -#: netbox/dcim/models/devices.py:716 netbox/dcim/models/sites.py:216 +#: netbox/dcim/models/devices.py:717 netbox/dcim/models/sites.py:216 msgid "longitude" msgstr "" -#: netbox/dcim/models/devices.py:789 +#: netbox/dcim/models/devices.py:790 msgid "Device name must be unique per site." msgstr "" -#: netbox/dcim/models/devices.py:800 netbox/ipam/models/services.py:71 +#: netbox/dcim/models/devices.py:801 netbox/ipam/models/services.py:71 msgid "device" msgstr "" -#: netbox/dcim/models/devices.py:801 +#: netbox/dcim/models/devices.py:802 msgid "devices" msgstr "" -#: netbox/dcim/models/devices.py:824 +#: netbox/dcim/models/devices.py:825 #, python-brace-format msgid "Rack {rack} does not belong to site {site}." msgstr "" -#: netbox/dcim/models/devices.py:829 +#: netbox/dcim/models/devices.py:830 #, python-brace-format msgid "Location {location} does not belong to site {site}." msgstr "" -#: netbox/dcim/models/devices.py:835 +#: netbox/dcim/models/devices.py:836 #, python-brace-format msgid "Rack {rack} does not belong to location {location}." msgstr "" -#: netbox/dcim/models/devices.py:842 +#: netbox/dcim/models/devices.py:843 msgid "Cannot select a rack face without assigning a rack." msgstr "" -#: netbox/dcim/models/devices.py:846 +#: netbox/dcim/models/devices.py:847 msgid "Cannot select a rack position without assigning a rack." msgstr "" -#: netbox/dcim/models/devices.py:852 +#: netbox/dcim/models/devices.py:853 msgid "Position must be in increments of 0.5 rack units." msgstr "" -#: netbox/dcim/models/devices.py:856 +#: netbox/dcim/models/devices.py:857 msgid "Must specify rack face when defining rack position." msgstr "" -#: netbox/dcim/models/devices.py:864 +#: netbox/dcim/models/devices.py:865 #, python-brace-format msgid "A 0U device type ({device_type}) cannot be assigned to a rack position." msgstr "" -#: netbox/dcim/models/devices.py:875 +#: netbox/dcim/models/devices.py:876 msgid "" "Child device types cannot be assigned to a rack face. This is an attribute " "of the parent device." msgstr "" -#: netbox/dcim/models/devices.py:882 +#: netbox/dcim/models/devices.py:883 msgid "" "Child device types cannot be assigned to a rack position. This is an " "attribute of the parent device." msgstr "" -#: netbox/dcim/models/devices.py:896 +#: netbox/dcim/models/devices.py:897 #, python-brace-format msgid "" "U{position} is already occupied or does not have sufficient space to " "accommodate this device type: {device_type} ({u_height}U)" msgstr "" -#: netbox/dcim/models/devices.py:911 +#: netbox/dcim/models/devices.py:912 #, python-brace-format msgid "{ip} is not an IPv4 address." msgstr "" -#: netbox/dcim/models/devices.py:923 netbox/dcim/models/devices.py:941 +#: netbox/dcim/models/devices.py:924 netbox/dcim/models/devices.py:942 #, python-brace-format msgid "The specified IP address ({ip}) is not assigned to this device." msgstr "" -#: netbox/dcim/models/devices.py:929 +#: netbox/dcim/models/devices.py:930 #, python-brace-format msgid "{ip} is not an IPv6 address." msgstr "" -#: netbox/dcim/models/devices.py:959 +#: netbox/dcim/models/devices.py:960 #, python-brace-format msgid "" "The assigned platform is limited to {platform_manufacturer} device types, " "but this device's type belongs to {devicetype_manufacturer}." msgstr "" -#: netbox/dcim/models/devices.py:970 +#: netbox/dcim/models/devices.py:971 #, python-brace-format msgid "The assigned cluster belongs to a different site ({site})" msgstr "" -#: netbox/dcim/models/devices.py:977 +#: netbox/dcim/models/devices.py:978 #, python-brace-format msgid "The assigned cluster belongs to a different location ({location})" msgstr "" -#: netbox/dcim/models/devices.py:985 +#: netbox/dcim/models/devices.py:986 msgid "A device assigned to a virtual chassis must have its position defined." msgstr "" -#: netbox/dcim/models/devices.py:991 +#: netbox/dcim/models/devices.py:992 #, python-brace-format msgid "" "Device cannot be removed from virtual chassis {virtual_chassis} because it " "is currently designated as its master." msgstr "" -#: netbox/dcim/models/devices.py:1199 +#: netbox/dcim/models/devices.py:1200 msgid "module" msgstr "" -#: netbox/dcim/models/devices.py:1200 +#: netbox/dcim/models/devices.py:1201 msgid "modules" msgstr "" -#: netbox/dcim/models/devices.py:1213 +#: netbox/dcim/models/devices.py:1214 #, python-brace-format msgid "" "Module must be installed within a module bay belonging to the assigned " "device ({device})." msgstr "" -#: netbox/dcim/models/devices.py:1340 +#: netbox/dcim/models/devices.py:1341 msgid "domain" msgstr "" -#: netbox/dcim/models/devices.py:1353 netbox/dcim/models/devices.py:1354 +#: netbox/dcim/models/devices.py:1354 netbox/dcim/models/devices.py:1355 msgid "virtual chassis" msgstr "" -#: netbox/dcim/models/devices.py:1366 +#: netbox/dcim/models/devices.py:1367 #, python-brace-format msgid "The selected master ({master}) is not assigned to this virtual chassis." msgstr "" -#: netbox/dcim/models/devices.py:1382 +#: netbox/dcim/models/devices.py:1383 #, python-brace-format msgid "" "Unable to delete virtual chassis {self}. There are member interfaces which " "form a cross-chassis LAG interfaces." msgstr "" -#: netbox/dcim/models/devices.py:1408 netbox/vpn/models/l2vpn.py:37 +#: netbox/dcim/models/devices.py:1409 netbox/vpn/models/l2vpn.py:37 msgid "identifier" msgstr "" -#: netbox/dcim/models/devices.py:1409 +#: netbox/dcim/models/devices.py:1410 msgid "Numeric identifier unique to the parent device" msgstr "" -#: netbox/dcim/models/devices.py:1437 netbox/extras/models/customfields.py:225 +#: netbox/dcim/models/devices.py:1438 netbox/extras/models/customfields.py:225 #: netbox/extras/models/models.py:107 netbox/extras/models/models.py:694 #: netbox/netbox/models/__init__.py:119 msgid "comments" msgstr "" -#: netbox/dcim/models/devices.py:1453 +#: netbox/dcim/models/devices.py:1454 msgid "virtual device context" msgstr "" -#: netbox/dcim/models/devices.py:1454 +#: netbox/dcim/models/devices.py:1455 msgid "virtual device contexts" msgstr "" -#: netbox/dcim/models/devices.py:1483 +#: netbox/dcim/models/devices.py:1484 #, python-brace-format msgid "{ip} is not an IPv{family} address." msgstr "" -#: netbox/dcim/models/devices.py:1489 +#: netbox/dcim/models/devices.py:1490 msgid "Primary IP address must belong to an interface on the assigned device." msgstr "" -#: netbox/dcim/models/devices.py:1521 +#: netbox/dcim/models/devices.py:1522 msgid "MAC addresses" msgstr "" +#: netbox/dcim/models/devices.py:1544 +msgid "" +"Cannot unassign MAC Address while it is designated as the primary MAC for an " +"object" +msgstr "" + +#: netbox/dcim/models/devices.py:1548 +msgid "" +"Cannot reassign MAC Address while it is designated as the primary MAC for an " +"object" +msgstr "" + #: netbox/dcim/models/mixins.py:94 #, python-brace-format msgid "Please select a {scope_type}." From b1e753029527fd55dc32e59817f87e11fabd60c8 Mon Sep 17 00:00:00 2001 From: Brian Tiemann Date: Wed, 22 Jan 2025 19:57:51 -0500 Subject: [PATCH 046/152] Add warning about UTF8 encoding in PostgreSQL --- docs/installation/1-postgresql.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/docs/installation/1-postgresql.md b/docs/installation/1-postgresql.md index 3f826fa8a..aee2baff6 100644 --- a/docs/installation/1-postgresql.md +++ b/docs/installation/1-postgresql.md @@ -62,6 +62,9 @@ GRANT CREATE ON SCHEMA public TO netbox; !!! danger "Use a strong password" **Do not use the password from the example.** Choose a strong, random password to ensure secure database authentication for your NetBox installation. +!!! danger "Use UTF8 encoding" + Make sure that your database uses `UTF8` encoding (the default for new installations). Especially do not use `SQL_ASCII` encoding, as it can lead to unpredictable and unrecoverable errors. + Once complete, enter `\q` to exit the PostgreSQL shell. ## Verify Service Status From 5fce4eef8ef03c2a746bf7f4752f631fb0294b31 Mon Sep 17 00:00:00 2001 From: Brian Tiemann Date: Thu, 23 Jan 2025 19:41:12 -0500 Subject: [PATCH 047/152] Add note about \l command --- docs/installation/1-postgresql.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/installation/1-postgresql.md b/docs/installation/1-postgresql.md index aee2baff6..8ba302909 100644 --- a/docs/installation/1-postgresql.md +++ b/docs/installation/1-postgresql.md @@ -63,7 +63,7 @@ GRANT CREATE ON SCHEMA public TO netbox; **Do not use the password from the example.** Choose a strong, random password to ensure secure database authentication for your NetBox installation. !!! danger "Use UTF8 encoding" - Make sure that your database uses `UTF8` encoding (the default for new installations). Especially do not use `SQL_ASCII` encoding, as it can lead to unpredictable and unrecoverable errors. + Make sure that your database uses `UTF8` encoding (the default for new installations). Especially do not use `SQL_ASCII` encoding, as it can lead to unpredictable and unrecoverable errors. Enter `\l` to check your encoding. Once complete, enter `\q` to exit the PostgreSQL shell. From c2daa7009937e5a878ef9b5ce0b9e56d491653d0 Mon Sep 17 00:00:00 2001 From: Brian Tiemann Date: Thu, 23 Jan 2025 20:13:42 -0500 Subject: [PATCH 048/152] Fix typo in Site Groups docs --- docs/features/facilities.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/features/facilities.md b/docs/features/facilities.md index 4c8dfe265..1421281eb 100644 --- a/docs/features/facilities.md +++ b/docs/features/facilities.md @@ -46,7 +46,7 @@ Regions will always be listed alphabetically by name within each parent, and the Like regions, site groups can be arranged in a recursive hierarchy for grouping sites. However, whereas regions are intended for geographic organization, site groups may be used for functional grouping. For example, you might classify sites as corporate, branch, or customer sites in addition to where they are physically located. -The use of both regions and site groups affords to independent but complementary dimensions across which sites can be organized. +The use of both regions and site groups affords two independent but complementary dimensions across which sites can be organized. ## Sites From 313f44646b82acf8af6d99a58d2fd248ccd62cd2 Mon Sep 17 00:00:00 2001 From: Jeremy Stretch Date: Fri, 24 Jan 2025 09:18:16 -0500 Subject: [PATCH 049/152] Assign GitHub issue type on creation --- .github/ISSUE_TEMPLATE/01-feature_request.yaml | 1 + .github/ISSUE_TEMPLATE/02-bug_report.yaml | 1 + 2 files changed, 2 insertions(+) diff --git a/.github/ISSUE_TEMPLATE/01-feature_request.yaml b/.github/ISSUE_TEMPLATE/01-feature_request.yaml index 6212af3b8..48a3a859c 100644 --- a/.github/ISSUE_TEMPLATE/01-feature_request.yaml +++ b/.github/ISSUE_TEMPLATE/01-feature_request.yaml @@ -1,5 +1,6 @@ --- name: ✨ Feature Request +type: Feature description: Propose a new NetBox feature or enhancement labels: ["type: feature", "status: needs triage"] body: diff --git a/.github/ISSUE_TEMPLATE/02-bug_report.yaml b/.github/ISSUE_TEMPLATE/02-bug_report.yaml index 4382a9b76..83397944c 100644 --- a/.github/ISSUE_TEMPLATE/02-bug_report.yaml +++ b/.github/ISSUE_TEMPLATE/02-bug_report.yaml @@ -1,5 +1,6 @@ --- name: 🐛 Bug Report +type: Bug description: Report a reproducible bug in the current release of NetBox labels: ["type: bug", "status: needs triage"] body: From b2b47ac740648383ea713369e5b0678461d16f7c Mon Sep 17 00:00:00 2001 From: Jeremy Stretch Date: Fri, 24 Jan 2025 09:30:54 -0500 Subject: [PATCH 050/152] Closes #18484: Exempt changes to GitHub templates from CI --- .github/workflows/ci.yml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index aab8bc34f..85070d98e 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -3,11 +3,15 @@ name: CI on: push: paths-ignore: + - '.github/ISSUE_TEMPLATE/**' + - '.github/PULL_REQUEST_TEMPLATE.md' - 'contrib/**' - 'docs/**' - 'netbox/translations/**' pull_request: paths-ignore: + - '.github/ISSUE_TEMPLATE/**' + - '.github/PULL_REQUEST_TEMPLATE.md' - 'contrib/**' - 'docs/**' - 'netbox/translations/**' From 57fa1dd18dbaa5c927ceae37b5879044b9f154e1 Mon Sep 17 00:00:00 2001 From: Jeremy Stretch Date: Fri, 24 Jan 2025 09:58:43 -0500 Subject: [PATCH 051/152] Add remaining issue types --- .github/ISSUE_TEMPLATE/03-documentation_change.yaml | 1 + .github/ISSUE_TEMPLATE/04-translation.yaml | 1 + .github/ISSUE_TEMPLATE/05-housekeeping.yaml | 1 + .github/ISSUE_TEMPLATE/06-deprecation.yaml | 1 + 4 files changed, 4 insertions(+) diff --git a/.github/ISSUE_TEMPLATE/03-documentation_change.yaml b/.github/ISSUE_TEMPLATE/03-documentation_change.yaml index b5a970782..2dea61acc 100644 --- a/.github/ISSUE_TEMPLATE/03-documentation_change.yaml +++ b/.github/ISSUE_TEMPLATE/03-documentation_change.yaml @@ -1,5 +1,6 @@ --- name: 📖 Documentation Change +type: Documentation description: Suggest an addition or modification to the NetBox documentation labels: ["type: documentation", "status: needs triage"] body: diff --git a/.github/ISSUE_TEMPLATE/04-translation.yaml b/.github/ISSUE_TEMPLATE/04-translation.yaml index d07bc399d..72130ae47 100644 --- a/.github/ISSUE_TEMPLATE/04-translation.yaml +++ b/.github/ISSUE_TEMPLATE/04-translation.yaml @@ -1,5 +1,6 @@ --- name: 🌍 Translation +type: Translation description: Request support for a new language in the user interface labels: ["type: translation"] body: diff --git a/.github/ISSUE_TEMPLATE/05-housekeeping.yaml b/.github/ISSUE_TEMPLATE/05-housekeeping.yaml index 777871395..65b983e18 100644 --- a/.github/ISSUE_TEMPLATE/05-housekeeping.yaml +++ b/.github/ISSUE_TEMPLATE/05-housekeeping.yaml @@ -1,5 +1,6 @@ --- name: 🏡 Housekeeping +type: Housekeeping description: A change pertaining to the codebase itself (developers only) labels: ["type: housekeeping"] body: diff --git a/.github/ISSUE_TEMPLATE/06-deprecation.yaml b/.github/ISSUE_TEMPLATE/06-deprecation.yaml index 27e13e5c0..83905a39a 100644 --- a/.github/ISSUE_TEMPLATE/06-deprecation.yaml +++ b/.github/ISSUE_TEMPLATE/06-deprecation.yaml @@ -1,5 +1,6 @@ --- name: 🗑️ Deprecation +type: Deprecation description: The removal of an existing feature or resource labels: ["type: deprecation"] body: From 968214b64afda95c2e69e59eb1673ef6ba4a1d2b Mon Sep 17 00:00:00 2001 From: github-actions <41898282+github-actions[bot]@users.noreply.github.com> Date: Tue, 28 Jan 2025 05:02:09 +0000 Subject: [PATCH 052/152] Update source translation strings --- netbox/translations/en/LC_MESSAGES/django.po | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/netbox/translations/en/LC_MESSAGES/django.po b/netbox/translations/en/LC_MESSAGES/django.po index d63e1dd34..5e3785d63 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: 2025-01-24 05:02+0000\n" +"POT-Creation-Date: 2025-01-28 05:01+0000\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -6594,13 +6594,13 @@ msgstr "" msgid "MAC addresses" msgstr "" -#: netbox/dcim/models/devices.py:1544 +#: netbox/dcim/models/devices.py:1551 msgid "" "Cannot unassign MAC Address while it is designated as the primary MAC for an " "object" msgstr "" -#: netbox/dcim/models/devices.py:1548 +#: netbox/dcim/models/devices.py:1555 msgid "" "Cannot reassign MAC Address while it is designated as the primary MAC for an " "object" From 7a6bb34d21634f4b6870c442e2bbb8bb5c8c88f5 Mon Sep 17 00:00:00 2001 From: Brian Tiemann Date: Mon, 27 Jan 2025 21:48:07 -0500 Subject: [PATCH 053/152] Reword references to develop and master branches --- CONTRIBUTING.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index a760b8371..100d996c6 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -84,7 +84,7 @@ intake policy](https://github.com/netbox-community/netbox/wiki/Issue-Intake-Poli * It's very important that you not submit a pull request until a relevant issue has been opened **and** assigned to you. Otherwise, you risk wasting time on work that may ultimately not be needed. -* New pull requests should generally be based off of the `develop` branch, rather than `master`. The `develop` branch is used for ongoing development, while `master` is used for tracking stable releases. (If you're developing for an upcoming minor release, use `feature` instead.) +* New pull requests should generally be based off of the `main` branch. This branch, in keeping with the [trunk-based development](https://trunkbaseddevelopment.com/) approach, is used for ongoing development and bug fixes and always represents the newest stable code, from which releases are periodically branched. (If you're developing for an upcoming minor release, use `feature` instead.) * In most cases, it is not necessary to add a changelog entry: A maintainer will take care of this when the PR is merged. (This helps avoid merge conflicts resulting from multiple PRs being submitted simultaneously.) From 34fa3835be9d25d9d8fd712e6314ab7ed1b4ae9f Mon Sep 17 00:00:00 2001 From: Brian Tiemann Date: Mon, 27 Jan 2025 21:56:38 -0500 Subject: [PATCH 054/152] NB-717 Update dashboard news feed URL to eliminate multiple 301 redirects --- netbox/extras/constants.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/netbox/extras/constants.py b/netbox/extras/constants.py index 994586aca..123b771f6 100644 --- a/netbox/extras/constants.py +++ b/netbox/extras/constants.py @@ -76,7 +76,7 @@ DEFAULT_DASHBOARD = [ 'height': 4, 'title': 'NetBox News', 'config': { - 'feed_url': 'http://netbox.dev/rss/', + 'feed_url': 'https://api.netbox.oss.netboxlabs.com/v1/newsfeed/', 'max_entries': 10, 'cache_timeout': 14400, 'requires_internet': True, From 80e466dab7250bb43727b427a6b888e449b0891c Mon Sep 17 00:00:00 2001 From: mr1716 Date: Tue, 28 Jan 2025 09:06:37 -0500 Subject: [PATCH 055/152] #18512 Update required-parameters spelling --- docs/configuration/required-parameters.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/configuration/required-parameters.md b/docs/configuration/required-parameters.md index f9a5a6f87..f7e5d71ce 100644 --- a/docs/configuration/required-parameters.md +++ b/docs/configuration/required-parameters.md @@ -2,7 +2,7 @@ ## ALLOWED_HOSTS -This is a list of valid fully-qualified domain names (FQDNs) and/or IP addresses that can be used to reach the NetBox service. Usually this is the same as the hostname for the NetBox server, but can also be different; for example, when using a reverse proxy serving the NetBox website under a different FQDN than the hostname of the NetBox server. To help guard against [HTTP Host header attackes](https://docs.djangoproject.com/en/3.0/topics/security/#host-headers-virtual-hosting), NetBox will not permit access to the server via any other hostnames (or IPs). +This is a list of valid fully-qualified domain names (FQDNs) and/or IP addresses that can be used to reach the NetBox service. Usually this is the same as the hostname for the NetBox server, but can also be different; for example, when using a reverse proxy serving the NetBox website under a different FQDN than the hostname of the NetBox server. To help guard against [HTTP Host header attacks](https://docs.djangoproject.com/en/3.0/topics/security/#host-headers-virtual-hosting), NetBox will not permit access to the server via any other hostnames (or IPs). !!! note This parameter must always be defined as a list or tuple, even if only a single value is provided. From 07403f690a6b155db963dfeedc9e7e9a4d8fa22a Mon Sep 17 00:00:00 2001 From: Tobias Genannt Date: Tue, 28 Jan 2025 19:19:34 +0100 Subject: [PATCH 056/152] Fix #18515: Don't fail in DEBUG mode When no Redis server is reachable management commands failed without this try...except block. --- netbox/core/apps.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/netbox/core/apps.py b/netbox/core/apps.py index 9674860b9..b1337c7ed 100644 --- a/netbox/core/apps.py +++ b/netbox/core/apps.py @@ -28,4 +28,7 @@ class CoreConfig(AppConfig): # Clear Redis cache on startup in development mode if settings.DEBUG: - cache.clear() + try: + cache.clear() + except Exception: + pass From 5cd7c6d167ea3b0a23651823adbcd44c103b63c4 Mon Sep 17 00:00:00 2001 From: Brian Tiemann Date: Tue, 28 Jan 2025 15:43:21 -0500 Subject: [PATCH 057/152] Add tag reflecting settings.HOSTNAME --- netbox/templates/base/base.html | 1 + 1 file changed, 1 insertion(+) diff --git a/netbox/templates/base/base.html b/netbox/templates/base/base.html index aad03cdb0..7ca2f575d 100644 --- a/netbox/templates/base/base.html +++ b/netbox/templates/base/base.html @@ -17,6 +17,7 @@ + {# Page title #} {% block title %}{% trans "Home" %}{% endblock %} | NetBox From 5514df9dee3134d7f72b59d6dcd104281a1f59bb Mon Sep 17 00:00:00 2001 From: github-actions <41898282+github-actions[bot]@users.noreply.github.com> Date: Thu, 30 Jan 2025 05:02:02 +0000 Subject: [PATCH 058/152] 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 5e3785d63..5410c413d 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: 2025-01-28 05:01+0000\n" +"POT-Creation-Date: 2025-01-30 05:01+0000\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -11993,7 +11993,7 @@ msgstr "" msgid "Add a Token" msgstr "" -#: netbox/templates/base/base.html:22 netbox/templates/home.html:27 +#: netbox/templates/base/base.html:23 netbox/templates/home.html:27 msgid "Home" msgstr "" From 22af6dd05fc0d05bb01b0756a2aaab6327885ae9 Mon Sep 17 00:00:00 2001 From: Renato Almeida de Oliveira Zaroubin Date: Thu, 30 Jan 2025 21:09:36 +0000 Subject: [PATCH 059/152] Add default user preferences tables testing in BaseTable --- netbox/netbox/tables/tables.py | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/netbox/netbox/tables/tables.py b/netbox/netbox/tables/tables.py index f95263f6c..9523772b5 100644 --- a/netbox/netbox/tables/tables.py +++ b/netbox/netbox/tables/tables.py @@ -2,6 +2,7 @@ from copy import deepcopy from functools import cached_property import django_tables2 as tables +from django.conf import settings from django.contrib.auth.models import AnonymousUser from django.contrib.contenttypes.fields import GenericForeignKey from django.core.exceptions import FieldDoesNotExist @@ -13,6 +14,7 @@ from django.utils.safestring import mark_safe from django.utils.translation import gettext_lazy as _ from django_tables2.data import TableQuerysetData + from core.models import ObjectType from extras.choices import * from extras.models import CustomField, CustomLink @@ -64,6 +66,11 @@ class BaseTable(tables.Table): selected_columns = None if user is not None and not isinstance(user, AnonymousUser): selected_columns = user.config.get(f"tables.{self.name}.columns") + elif isinstance(user, AnonymousUser): + default_user_preferences = settings.DEFAULT_USER_PREFERENCES + default_table = default_user_preferences.get('tables', {}).get(self.name, {}).get('columns', {}) + if default_table != {}: + selected_columns = default_table if not selected_columns: selected_columns = getattr(self.Meta, 'default_columns', self.Meta.fields) From 62148bb83c5aa2dabdc3617d88759b7ea6ddc2c6 Mon Sep 17 00:00:00 2001 From: Renato Almeida de Oliveira Zaroubin Date: Thu, 30 Jan 2025 21:51:37 +0000 Subject: [PATCH 060/152] Check if DEFAULT_USER_PREFERENCES are configured --- netbox/netbox/tables/tables.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/netbox/netbox/tables/tables.py b/netbox/netbox/tables/tables.py index 9523772b5..975411075 100644 --- a/netbox/netbox/tables/tables.py +++ b/netbox/netbox/tables/tables.py @@ -66,7 +66,7 @@ class BaseTable(tables.Table): selected_columns = None if user is not None and not isinstance(user, AnonymousUser): selected_columns = user.config.get(f"tables.{self.name}.columns") - elif isinstance(user, AnonymousUser): + elif isinstance(user, AnonymousUser) and hasattr(settings, 'DEFAULT_USER_PREFERENCES'): default_user_preferences = settings.DEFAULT_USER_PREFERENCES default_table = default_user_preferences.get('tables', {}).get(self.name, {}).get('columns', {}) if default_table != {}: From 2a8728544c7fd1d3399f51d7de87c14b46f8a2d5 Mon Sep 17 00:00:00 2001 From: Antoine Keranflec'h Date: Fri, 31 Jan 2025 08:48:35 +0100 Subject: [PATCH 061/152] fix(pep) fix pep8 compliancy --- netbox/vpn/views.py | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/netbox/vpn/views.py b/netbox/vpn/views.py index 55d47ca62..1bcb99716 100644 --- a/netbox/vpn/views.py +++ b/netbox/vpn/views.py @@ -67,6 +67,7 @@ class TunnelGroupBulkDeleteView(generic.BulkDeleteView): filterset = filtersets.TunnelGroupFilterSet table = tables.TunnelGroupTable + @register_model_view(Tunnel, 'contacts') class TunnelGroupContactsView(ObjectContactsView): queryset = TunnelGroup.objects.all() @@ -75,6 +76,7 @@ class TunnelGroupContactsView(ObjectContactsView): # Tunnels # + @register_model_view(Tunnel, 'list', path='', detail=False) class TunnelListView(generic.ObjectListView): queryset = Tunnel.objects.annotate( @@ -134,6 +136,7 @@ class TunnelBulkDeleteView(generic.BulkDeleteView): filterset = filtersets.TunnelFilterSet table = tables.TunnelTable + @register_model_view(Tunnel, 'contacts') class TunnelContactsView(ObjectContactsView): queryset = Tunnel.objects.all() @@ -142,6 +145,7 @@ class TunnelContactsView(ObjectContactsView): # Tunnel terminations # + @register_model_view(TunnelTermination, 'list', path='', detail=False) class TunnelTerminationListView(generic.ObjectListView): queryset = TunnelTermination.objects.all() From f5bdf7b593da5c35b6686f241fb72976471272fd Mon Sep 17 00:00:00 2001 From: Renato Almeida de Oliveira Zaroubin Date: Fri, 31 Jan 2025 18:03:55 +0000 Subject: [PATCH 062/152] Simplify Anon user logic --- netbox/netbox/tables/tables.py | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/netbox/netbox/tables/tables.py b/netbox/netbox/tables/tables.py index 975411075..648881d3f 100644 --- a/netbox/netbox/tables/tables.py +++ b/netbox/netbox/tables/tables.py @@ -67,10 +67,7 @@ class BaseTable(tables.Table): if user is not None and not isinstance(user, AnonymousUser): selected_columns = user.config.get(f"tables.{self.name}.columns") elif isinstance(user, AnonymousUser) and hasattr(settings, 'DEFAULT_USER_PREFERENCES'): - default_user_preferences = settings.DEFAULT_USER_PREFERENCES - default_table = default_user_preferences.get('tables', {}).get(self.name, {}).get('columns', {}) - if default_table != {}: - selected_columns = default_table + selected_columns = settings.DEFAULT_USER_PREFERENCES.get('tables', {}).get(self.name, {}).get('columns') if not selected_columns: selected_columns = getattr(self.Meta, 'default_columns', self.Meta.fields) From 7d6089775e0982d6830acb1a5b535c508f8eece1 Mon Sep 17 00:00:00 2001 From: Renato Almeida de Oliveira Zaroubin Date: Fri, 31 Jan 2025 18:48:50 +0000 Subject: [PATCH 063/152] remove extra line --- netbox/netbox/tables/tables.py | 1 - 1 file changed, 1 deletion(-) diff --git a/netbox/netbox/tables/tables.py b/netbox/netbox/tables/tables.py index 648881d3f..2d2c430aa 100644 --- a/netbox/netbox/tables/tables.py +++ b/netbox/netbox/tables/tables.py @@ -14,7 +14,6 @@ from django.utils.safestring import mark_safe from django.utils.translation import gettext_lazy as _ from django_tables2.data import TableQuerysetData - from core.models import ObjectType from extras.choices import * from extras.models import CustomField, CustomLink From 8aecf53d0e448cbe856067edf84aa3e05fc70937 Mon Sep 17 00:00:00 2001 From: mr1716 Date: Fri, 31 Jan 2025 09:55:26 -0500 Subject: [PATCH 064/152] #18513 Updating Documentation Relating To Strawberry-Django Links --- docs/integrations/graphql-api.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/integrations/graphql-api.md b/docs/integrations/graphql-api.md index 425c3adda..c02045f34 100644 --- a/docs/integrations/graphql-api.md +++ b/docs/integrations/graphql-api.md @@ -1,6 +1,6 @@ # GraphQL API Overview -NetBox provides a read-only [GraphQL](https://graphql.org/) API to complement its REST API. This API is powered by [Strawberry Django](https://strawberry-graphql.github.io/strawberry-django/). +NetBox provides a read-only [GraphQL](https://graphql.org/) API to complement its REST API. This API is powered by [Strawberry Django](https://strawberry.rocks/). ## Queries @@ -47,7 +47,7 @@ NetBox provides both a singular and plural query field for each object type: For example, query `device(id:123)` to fetch a specific device (identified by its unique ID), and query `device_list` (with an optional set of filters) to fetch all devices. -For more detail on constructing GraphQL queries, see the [GraphQL queries documentation](https://graphql.org/learn/queries/). For filtering and lookup syntax, please refer to the [Strawberry Django documentation](https://strawberry-graphql.github.io/strawberry-django/guide/filters/). +For more detail on constructing GraphQL queries, see the [GraphQL queries documentation](https://graphql.org/learn/queries/). For filtering and lookup syntax, please refer to the [Strawberry Django documentation](https://strawberry.rocks/docs/django/guide/filters). ## Filtering From e12a5d2edc9f93bfb7651c13fd9bf5d2d9abf9c9 Mon Sep 17 00:00:00 2001 From: Renato Almeida de Oliveira Zaroubin Date: Thu, 30 Jan 2025 18:26:17 +0000 Subject: [PATCH 065/152] Add get_extra_addanother_params method in IPAddressEditView --- netbox/ipam/views.py | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/netbox/ipam/views.py b/netbox/ipam/views.py index c606c1088..007a652ca 100644 --- a/netbox/ipam/views.py +++ b/netbox/ipam/views.py @@ -863,6 +863,12 @@ class IPAddressEditView(generic.ObjectEditView): return obj + def get_extra_addanother_params(self, request): + if 'interface' in request.GET: + return {'interface': request.GET['interface']} + elif 'vminterface' in request.GET: + return {'vminterface': request.GET['vminterface']} + # TODO: Standardize or remove this view @register_model_view(IPAddress, 'assign', path='assign', detail=False) From c8decf4c210e5bca57aa8294b2b828f7f9874812 Mon Sep 17 00:00:00 2001 From: Brian Tiemann Date: Wed, 29 Jan 2025 13:10:27 -0500 Subject: [PATCH 066/152] Add auth_required attrib on PluginMenuItem --- netbox/netbox/plugins/navigation.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/netbox/netbox/plugins/navigation.py b/netbox/netbox/plugins/navigation.py index 01b8a0442..fc86b134a 100644 --- a/netbox/netbox/plugins/navigation.py +++ b/netbox/netbox/plugins/navigation.py @@ -38,9 +38,10 @@ class PluginMenuItem: permissions = [] buttons = [] - def __init__(self, link, link_text, staff_only=False, permissions=None, buttons=None): + def __init__(self, link, link_text, auth_required=False, staff_only=False, permissions=None, buttons=None): self.link = link self.link_text = link_text + self.auth_required = auth_required self.staff_only = staff_only if permissions is not None: if type(permissions) not in (list, tuple): From b2bc842f1cd8acd68e0bf3539b8e77c059fd10dc Mon Sep 17 00:00:00 2001 From: Brian Tiemann Date: Wed, 29 Jan 2025 13:42:20 -0500 Subject: [PATCH 067/152] Remove 'provider' from VirtualCircuitIndex.display_attrs --- netbox/circuits/search.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/netbox/circuits/search.py b/netbox/circuits/search.py index 486656933..f7654e328 100644 --- a/netbox/circuits/search.py +++ b/netbox/circuits/search.py @@ -90,7 +90,7 @@ class VirtualCircuitIndex(SearchIndex): ('description', 500), ('comments', 5000), ) - display_attrs = ('provider', 'provider_network', 'provider_account', 'status', 'tenant', 'description') + display_attrs = ('provider_network', 'provider_account', 'status', 'tenant', 'description') @register_search From 0b794de40e8a356ac03a8f3aba6d5ed0a76197f9 Mon Sep 17 00:00:00 2001 From: github-actions <41898282+github-actions[bot]@users.noreply.github.com> Date: Sat, 1 Feb 2025 05:02:11 +0000 Subject: [PATCH 068/152] Update source translation strings --- netbox/translations/en/LC_MESSAGES/django.po | 32 ++++++++++---------- 1 file changed, 16 insertions(+), 16 deletions(-) diff --git a/netbox/translations/en/LC_MESSAGES/django.po b/netbox/translations/en/LC_MESSAGES/django.po index 5410c413d..357406505 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: 2025-01-30 05:01+0000\n" +"POT-Creation-Date: 2025-02-01 05:01+0000\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -690,7 +690,7 @@ msgstr "" #: netbox/dcim/tables/devices.py:845 netbox/dcim/tables/power.py:77 #: netbox/dcim/tables/racks.py:137 netbox/extras/forms/bulk_import.py:42 #: netbox/extras/tables/tables.py:405 netbox/extras/tables/tables.py:465 -#: netbox/netbox/tables/tables.py:240 netbox/templates/circuits/circuit.html:30 +#: netbox/netbox/tables/tables.py:243 netbox/templates/circuits/circuit.html:30 #: netbox/templates/circuits/virtualcircuit.html:39 #: netbox/templates/circuits/virtualcircuittermination.html:64 #: netbox/templates/core/datasource.html:38 netbox/templates/dcim/cable.html:15 @@ -950,7 +950,7 @@ msgstr "" #: netbox/ipam/forms/filtersets.py:310 netbox/ipam/forms/filtersets.py:385 #: netbox/ipam/forms/filtersets.py:470 netbox/ipam/forms/filtersets.py:483 #: netbox/ipam/forms/filtersets.py:508 netbox/ipam/forms/filtersets.py:579 -#: netbox/ipam/forms/filtersets.py:597 netbox/netbox/tables/tables.py:256 +#: netbox/ipam/forms/filtersets.py:597 netbox/netbox/tables/tables.py:259 #: netbox/virtualization/forms/filtersets.py:45 #: netbox/virtualization/forms/filtersets.py:108 #: netbox/virtualization/forms/filtersets.py:203 @@ -2700,7 +2700,7 @@ msgstr "" #: netbox/extras/tables/tables.py:297 netbox/extras/tables/tables.py:329 #: netbox/extras/tables/tables.py:409 netbox/extras/tables/tables.py:470 #: netbox/extras/tables/tables.py:576 netbox/extras/tables/tables.py:616 -#: netbox/extras/tables/tables.py:653 netbox/netbox/tables/tables.py:244 +#: netbox/extras/tables/tables.py:653 netbox/netbox/tables/tables.py:247 #: netbox/templates/core/objectchange.html:58 #: netbox/templates/extras/eventrule.html:78 #: netbox/templates/extras/journalentry.html:18 @@ -2729,7 +2729,7 @@ msgstr "" #: netbox/core/tables/jobs.py:10 netbox/core/tables/tasks.py:76 #: netbox/dcim/tables/devicetypes.py:164 netbox/extras/tables/tables.py:216 -#: netbox/extras/tables/tables.py:460 netbox/netbox/tables/tables.py:189 +#: netbox/extras/tables/tables.py:460 netbox/netbox/tables/tables.py:192 #: netbox/templates/dcim/virtualchassis_edit.html:52 #: netbox/utilities/forms/forms.py:73 netbox/wireless/tables/wirelesslink.py:16 msgid "ID" @@ -9940,7 +9940,7 @@ msgstr "" #: netbox/ipam/forms/filtersets.py:419 netbox/ipam/models/vlans.py:273 #: netbox/ipam/tables/ip.py:122 netbox/ipam/tables/vlans.py:51 -#: netbox/ipam/views.py:1029 netbox/netbox/navigation/menu.py:199 +#: netbox/ipam/views.py:1035 netbox/netbox/navigation/menu.py:199 #: netbox/netbox/navigation/menu.py:201 msgid "VLANs" msgstr "" @@ -10652,15 +10652,15 @@ msgstr "" msgid "Child Ranges" msgstr "" -#: netbox/ipam/views.py:951 +#: netbox/ipam/views.py:957 msgid "Related IPs" msgstr "" -#: netbox/ipam/views.py:1308 +#: netbox/ipam/views.py:1314 msgid "Device Interfaces" msgstr "" -#: netbox/ipam/views.py:1326 +#: netbox/ipam/views.py:1332 msgid "VM Interfaces" msgstr "" @@ -11476,16 +11476,16 @@ msgstr "" msgid "Background Tasks" msgstr "" -#: netbox/netbox/plugins/navigation.py:47 -#: netbox/netbox/plugins/navigation.py:69 +#: netbox/netbox/plugins/navigation.py:48 +#: netbox/netbox/plugins/navigation.py:70 msgid "Permissions must be passed as a tuple or list." msgstr "" -#: netbox/netbox/plugins/navigation.py:51 +#: netbox/netbox/plugins/navigation.py:52 msgid "Buttons must be passed as a tuple or list." msgstr "" -#: netbox/netbox/plugins/navigation.py:73 +#: netbox/netbox/plugins/navigation.py:74 msgid "Button color must be a choice within ButtonColorChoices." msgstr "" @@ -11670,17 +11670,17 @@ msgstr "" msgid "Error" msgstr "" -#: netbox/netbox/tables/tables.py:58 +#: netbox/netbox/tables/tables.py:59 #, python-brace-format msgid "No {model_name} found" msgstr "" -#: netbox/netbox/tables/tables.py:249 +#: netbox/netbox/tables/tables.py:252 #: netbox/templates/generic/bulk_import.html:117 msgid "Field" msgstr "" -#: netbox/netbox/tables/tables.py:252 +#: netbox/netbox/tables/tables.py:255 msgid "Value" msgstr "" From f829f34b4366b214a5d4f1e1a47b48717872dba0 Mon Sep 17 00:00:00 2001 From: Jeremy Stretch Date: Mon, 3 Feb 2025 09:44:00 -0500 Subject: [PATCH 069/152] Closes #18559: Add a `build` parameter to ReleaseInfo (#18560) * Closes #18559: Add a build parameter to ReleaseInfo * Adjust dataclass typing --- netbox/utilities/release.py | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/netbox/utilities/release.py b/netbox/utilities/release.py index f389e8009..78dbe25d1 100644 --- a/netbox/utilities/release.py +++ b/netbox/utilities/release.py @@ -30,13 +30,17 @@ class ReleaseInfo: edition: str published: Union[datetime.date, None] = None designation: Union[str, None] = None + build: Union[str, None] = None features: FeatureSet = field(default_factory=FeatureSet) @property def full_version(self): + output = self.version if self.designation: - return f"{self.version}-{self.designation}" - return self.version + output = f"{output}-{self.designation}" + if self.build: + output = f"{output}-{self.build}" + return output @property def name(self): From 29f405d27e3224db4168813a19bc997a3ff6289b Mon Sep 17 00:00:00 2001 From: mr1716 Date: Fri, 31 Jan 2025 15:19:10 -0500 Subject: [PATCH 070/152] #18496 Fixing Broken Link For Custom Links Documentation --- docs/customization/custom-links.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/customization/custom-links.md b/docs/customization/custom-links.md index baae1db4f..265efe669 100644 --- a/docs/customization/custom-links.md +++ b/docs/customization/custom-links.md @@ -2,7 +2,7 @@ Custom links allow users to display arbitrary hyperlinks to external content within NetBox object views. These are helpful for cross-referencing related records in systems outside NetBox. For example, you might create a custom link on the device view which links to the current device in a Network Monitoring System (NMS). -Custom links are created by navigating to Customization > Custom Links. Each link is associated with a particular NetBox object type (site, device, prefix, etc.) and will be displayed on relevant views. Each link has display text and a URL, and data from the NetBox item being viewed can be included in the link using [Jinja2 template code](https://jinja2docs.readthedocs.io/en/stable/) through the variable `object`, and custom fields through `object.cf`. +Custom links are created by navigating to Customization > Custom Links. Each link is associated with a particular NetBox object type (site, device, prefix, etc.) and will be displayed on relevant views. Each link has display text and a URL, and data from the NetBox item being viewed can be included in the link using [Jinja template code](https://jinja.palletsprojects.com/en/stable/) through the variable `object`, and custom fields through `object.cf`. For example, you might define a link like this: From 6e165435e23c959c1876d08e8b3c156e2413cc67 Mon Sep 17 00:00:00 2001 From: Brian Tiemann Date: Tue, 4 Feb 2025 15:09:37 -0500 Subject: [PATCH 071/152] Release 4.2.3 --- .../ISSUE_TEMPLATE/01-feature_request.yaml | 2 +- .github/ISSUE_TEMPLATE/02-bug_report.yaml | 2 +- base_requirements.txt | 3 +- docs/release-notes/version-4.2.md | 20 ++ netbox/project-static/package.json | 2 +- netbox/project-static/yarn.lock | 8 +- netbox/release.yaml | 4 +- netbox/translations/da/LC_MESSAGES/django.mo | Bin 221815 -> 225478 bytes netbox/translations/da/LC_MESSAGES/django.po | 222 +++++++------- netbox/translations/de/LC_MESSAGES/django.mo | Bin 237305 -> 237308 bytes netbox/translations/de/LC_MESSAGES/django.po | 158 +++++----- netbox/translations/es/LC_MESSAGES/django.mo | Bin 235309 -> 239192 bytes netbox/translations/es/LC_MESSAGES/django.po | 204 +++++++------ netbox/translations/it/LC_MESSAGES/django.mo | Bin 233546 -> 237392 bytes netbox/translations/it/LC_MESSAGES/django.po | 203 +++++++------ netbox/translations/ja/LC_MESSAGES/django.mo | Bin 254765 -> 254773 bytes netbox/translations/ja/LC_MESSAGES/django.po | 24 +- netbox/translations/nl/LC_MESSAGES/django.mo | Bin 229707 -> 233233 bytes netbox/translations/nl/LC_MESSAGES/django.po | 278 ++++++++++-------- netbox/translations/pl/LC_MESSAGES/django.mo | Bin 231288 -> 235040 bytes netbox/translations/pl/LC_MESSAGES/django.po | 207 +++++++------ netbox/translations/pt/LC_MESSAGES/django.mo | Bin 235682 -> 235452 bytes netbox/translations/pt/LC_MESSAGES/django.po | 88 +++--- netbox/translations/tr/LC_MESSAGES/django.mo | Bin 225979 -> 229529 bytes netbox/translations/tr/LC_MESSAGES/django.po | 209 ++++++------- netbox/translations/uk/LC_MESSAGES/django.mo | Bin 299267 -> 302307 bytes netbox/translations/uk/LC_MESSAGES/django.po | 203 +++++++------ netbox/translations/zh/LC_MESSAGES/django.mo | Bin 208819 -> 212098 bytes netbox/translations/zh/LC_MESSAGES/django.po | 218 +++++++------- requirements.txt | 8 +- 30 files changed, 1103 insertions(+), 960 deletions(-) diff --git a/.github/ISSUE_TEMPLATE/01-feature_request.yaml b/.github/ISSUE_TEMPLATE/01-feature_request.yaml index 48a3a859c..62c33b424 100644 --- a/.github/ISSUE_TEMPLATE/01-feature_request.yaml +++ b/.github/ISSUE_TEMPLATE/01-feature_request.yaml @@ -15,7 +15,7 @@ body: attributes: label: NetBox version description: What version of NetBox are you currently running? - placeholder: v4.2.2 + placeholder: v4.2.3 validations: required: true - type: dropdown diff --git a/.github/ISSUE_TEMPLATE/02-bug_report.yaml b/.github/ISSUE_TEMPLATE/02-bug_report.yaml index 83397944c..0fa8b4084 100644 --- a/.github/ISSUE_TEMPLATE/02-bug_report.yaml +++ b/.github/ISSUE_TEMPLATE/02-bug_report.yaml @@ -27,7 +27,7 @@ body: attributes: label: NetBox Version description: What version of NetBox are you currently running? - placeholder: v4.2.2 + placeholder: v4.2.3 validations: required: true - type: dropdown diff --git a/base_requirements.txt b/base_requirements.txt index 9cf0fbf8b..75ee4bbfd 100644 --- a/base_requirements.txt +++ b/base_requirements.txt @@ -88,7 +88,8 @@ mkdocs-material # Introspection for embedded code # https://github.com/mkdocstrings/mkdocstrings/blob/main/CHANGELOG.md -mkdocstrings[python-legacy] +# See #18568 +mkdocstrings[python-legacy]==0.27.0 # Library for manipulating IP prefixes and addresses # https://github.com/netaddr/netaddr/blob/master/CHANGELOG.rst diff --git a/docs/release-notes/version-4.2.md b/docs/release-notes/version-4.2.md index 61f043f3d..c6c99be7f 100644 --- a/docs/release-notes/version-4.2.md +++ b/docs/release-notes/version-4.2.md @@ -1,5 +1,25 @@ # NetBox v4.2 +## v4.2.3 (2025-02-04) + +### Enhancements + +* [#18518](https://github.com/netbox-community/netbox/issues/18518) - Add a "hostname" `` tag to the page header + +### Bug Fixes + +* [#18497](https://github.com/netbox-community/netbox/issues/18497) - Fix unhandled `FieldDoesNotExist` exception when search results include virtual circuit +* [#18433](https://github.com/netbox-community/netbox/issues/18433) - Fix MAC address not shown as "primary for interface" in MAC address detail view +* [#18154](https://github.com/netbox-community/netbox/issues/18154) - Allow anonymous users to change default table preferences +* [#18515](https://github.com/netbox-community/netbox/issues/18515) - Fix Django `collectstatic` management command in debug mode with Redis not running +* [#18456](https://github.com/netbox-community/netbox/issues/18456) - Avoid duplicate MAC Address column in interface tables +* [#18447](https://github.com/netbox-community/netbox/issues/18447) - Fix `FieldError` exception when sorting interface tables on MAC Address columns +* [#18438](https://github.com/netbox-community/netbox/issues/18438) - Improve performance in IPAM migration `0072_prefix_cached_relations` when upgrading from v4.1 or earlier +* [#18436](https://github.com/netbox-community/netbox/issues/18436) - Reset primary MAC address when unassigning MAC address from interface +* [#18181](https://github.com/netbox-community/netbox/issues/18181) - Fix "Create & Add Another" workflow when adding IP addresses to interfaces + +--- + ## v4.2.2 (2025-01-17) ### Bug Fixes diff --git a/netbox/project-static/package.json b/netbox/project-static/package.json index f216a4107..636ce51a2 100644 --- a/netbox/project-static/package.json +++ b/netbox/project-static/package.json @@ -31,7 +31,7 @@ "htmx.org": "1.9.12", "query-string": "9.1.1", "sass": "1.83.4", - "tom-select": "2.4.1", + "tom-select": "2.4.2", "typeface-inter": "3.18.1", "typeface-roboto-mono": "1.1.13" }, diff --git a/netbox/project-static/yarn.lock b/netbox/project-static/yarn.lock index 588935331..c9b42df33 100644 --- a/netbox/project-static/yarn.lock +++ b/netbox/project-static/yarn.lock @@ -2876,10 +2876,10 @@ toggle-selection@^1.0.6: resolved "https://registry.yarnpkg.com/toggle-selection/-/toggle-selection-1.0.6.tgz#6e45b1263f2017fa0acc7d89d78b15b8bf77da32" integrity sha512-BiZS+C1OS8g/q2RRbJmy59xpyghNBqrr6k5L/uKBGRsTfxmu3ffiRnd8mlGPUVayg8pvfi5urfnu8TU7DVOkLQ== -tom-select@2.4.1: - version "2.4.1" - resolved "https://registry.yarnpkg.com/tom-select/-/tom-select-2.4.1.tgz#6a0b6df8af3df7b09b22dd965eb75ce4d1c547bc" - integrity sha512-adI8H8+wk8RRzHYLQ3bXSk2Q+FAq/kzAATrcWlJ2fbIrEzb0VkwaXzKHTAlBwSJrhqbPJvhV/0eypFkED/nAug== +tom-select@2.4.2: + version "2.4.2" + resolved "https://registry.yarnpkg.com/tom-select/-/tom-select-2.4.2.tgz#9764faf6cba51f6571d03a79bb7c1cac1cac7a5a" + integrity sha512-2RWjkL3gMDz9E+u8w+tQy9JWsYq8gaSytEVeugKYDeMus6ZtxT1HttLPnXsfHCnBPlsNubVyj5gtUeN+S+bcpA== dependencies: "@orchidjs/sifter" "^1.1.0" "@orchidjs/unicode-variants" "^1.1.2" diff --git a/netbox/release.yaml b/netbox/release.yaml index 2619279a9..420e71a20 100644 --- a/netbox/release.yaml +++ b/netbox/release.yaml @@ -1,3 +1,3 @@ -version: "4.2.2" +version: "4.2.3" edition: "Community" -published: "2025-01-17" +published: "2025-02-04" diff --git a/netbox/translations/da/LC_MESSAGES/django.mo b/netbox/translations/da/LC_MESSAGES/django.mo index ea7f83ac38e0e50b6903fdc9ae8fe0b96ccf6d28..2988b90ff53d5fc83b2065306d44c9252733fecc 100644 GIT binary patch delta 69227 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 qQ}_e3O;h`xU)&GQC$oNhdFAD+0 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 diff --git a/netbox/translations/da/LC_MESSAGES/django.po b/netbox/translations/da/LC_MESSAGES/django.po index bf9f12abe..1b48b5849 100644 --- a/netbox/translations/da/LC_MESSAGES/django.po +++ b/netbox/translations/da/LC_MESSAGES/django.po @@ -7,16 +7,16 @@ # Jeff Gehlbach, 2024 # ch, 2024 # Frederik Spang Thomsen , 2024 -# Jeremy Stretch, 2024 +# Jeremy Stretch, 2025 # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2024-12-12 05:02+0000\n" +"POT-Creation-Date: 2025-01-04 05:02+0000\n" "PO-Revision-Date: 2023-10-30 17:48+0000\n" -"Last-Translator: Jeremy Stretch, 2024\n" +"Last-Translator: Jeremy Stretch, 2025\n" "Language-Team: Danish (https://app.transifex.com/netbox-community/teams/178115/da/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -152,7 +152,7 @@ msgstr "Inaktiv" #: netbox/dcim/filtersets.py:464 netbox/dcim/filtersets.py:1021 #: netbox/dcim/filtersets.py:1368 netbox/dcim/filtersets.py:1903 #: netbox/dcim/filtersets.py:2146 netbox/dcim/filtersets.py:2204 -#: netbox/ipam/filtersets.py:339 netbox/ipam/filtersets.py:959 +#: netbox/ipam/filtersets.py:341 netbox/ipam/filtersets.py:961 #: netbox/virtualization/filtersets.py:45 #: netbox/virtualization/filtersets.py:173 netbox/vpn/filtersets.py:358 msgid "Region (ID)" @@ -164,8 +164,8 @@ msgstr "Område (ID)" #: netbox/dcim/filtersets.py:471 netbox/dcim/filtersets.py:1028 #: netbox/dcim/filtersets.py:1375 netbox/dcim/filtersets.py:1910 #: netbox/dcim/filtersets.py:2153 netbox/dcim/filtersets.py:2211 -#: netbox/extras/filtersets.py:509 netbox/ipam/filtersets.py:346 -#: netbox/ipam/filtersets.py:966 netbox/virtualization/filtersets.py:52 +#: netbox/extras/filtersets.py:509 netbox/ipam/filtersets.py:348 +#: netbox/ipam/filtersets.py:968 netbox/virtualization/filtersets.py:52 #: netbox/virtualization/filtersets.py:180 netbox/vpn/filtersets.py:353 msgid "Region (slug)" msgstr "Region (slug)" @@ -175,8 +175,8 @@ msgstr "Region (slug)" #: netbox/dcim/filtersets.py:346 netbox/dcim/filtersets.py:477 #: netbox/dcim/filtersets.py:1034 netbox/dcim/filtersets.py:1381 #: netbox/dcim/filtersets.py:1916 netbox/dcim/filtersets.py:2159 -#: netbox/dcim/filtersets.py:2217 netbox/ipam/filtersets.py:352 -#: netbox/ipam/filtersets.py:972 netbox/virtualization/filtersets.py:58 +#: netbox/dcim/filtersets.py:2217 netbox/ipam/filtersets.py:354 +#: netbox/ipam/filtersets.py:974 netbox/virtualization/filtersets.py:58 #: netbox/virtualization/filtersets.py:186 msgid "Site group (ID)" msgstr "Områdegruppe (ID)" @@ -187,7 +187,7 @@ msgstr "Områdegruppe (ID)" #: netbox/dcim/filtersets.py:1041 netbox/dcim/filtersets.py:1388 #: netbox/dcim/filtersets.py:1923 netbox/dcim/filtersets.py:2166 #: netbox/dcim/filtersets.py:2224 netbox/extras/filtersets.py:515 -#: netbox/ipam/filtersets.py:359 netbox/ipam/filtersets.py:979 +#: netbox/ipam/filtersets.py:361 netbox/ipam/filtersets.py:981 #: netbox/virtualization/filtersets.py:65 #: netbox/virtualization/filtersets.py:193 msgid "Site group (slug)" @@ -257,8 +257,8 @@ msgstr "Område" #: netbox/circuits/filtersets.py:62 netbox/circuits/filtersets.py:229 #: netbox/circuits/filtersets.py:274 netbox/dcim/filtersets.py:242 #: netbox/dcim/filtersets.py:363 netbox/dcim/filtersets.py:458 -#: netbox/extras/filtersets.py:531 netbox/ipam/filtersets.py:238 -#: netbox/ipam/filtersets.py:369 netbox/ipam/filtersets.py:989 +#: netbox/extras/filtersets.py:531 netbox/ipam/filtersets.py:240 +#: netbox/ipam/filtersets.py:371 netbox/ipam/filtersets.py:991 #: netbox/virtualization/filtersets.py:75 #: netbox/virtualization/filtersets.py:203 netbox/vpn/filtersets.py:363 msgid "Site (slug)" @@ -277,13 +277,13 @@ msgstr "ASN" #: netbox/circuits/filtersets.py:95 netbox/circuits/filtersets.py:122 #: netbox/circuits/filtersets.py:156 netbox/circuits/filtersets.py:283 -#: netbox/circuits/filtersets.py:325 netbox/ipam/filtersets.py:243 +#: netbox/circuits/filtersets.py:325 netbox/ipam/filtersets.py:245 msgid "Provider (ID)" msgstr "Leverandør (ID)" #: netbox/circuits/filtersets.py:101 netbox/circuits/filtersets.py:128 #: netbox/circuits/filtersets.py:162 netbox/circuits/filtersets.py:289 -#: netbox/circuits/filtersets.py:331 netbox/ipam/filtersets.py:249 +#: netbox/circuits/filtersets.py:331 netbox/ipam/filtersets.py:251 msgid "Provider (slug)" msgstr "Leverandør (slug)" @@ -312,8 +312,8 @@ msgstr "Kredsløbstype (slug)" #: netbox/dcim/filtersets.py:452 netbox/dcim/filtersets.py:1045 #: netbox/dcim/filtersets.py:1393 netbox/dcim/filtersets.py:1928 #: netbox/dcim/filtersets.py:2170 netbox/dcim/filtersets.py:2229 -#: netbox/ipam/filtersets.py:232 netbox/ipam/filtersets.py:363 -#: netbox/ipam/filtersets.py:983 netbox/virtualization/filtersets.py:69 +#: netbox/ipam/filtersets.py:234 netbox/ipam/filtersets.py:365 +#: netbox/ipam/filtersets.py:985 netbox/virtualization/filtersets.py:69 #: netbox/virtualization/filtersets.py:197 netbox/vpn/filtersets.py:368 msgid "Site (ID)" msgstr "Område (ID)" @@ -667,7 +667,7 @@ msgstr "Leverandørkonto" #: netbox/dcim/forms/filtersets.py:924 netbox/dcim/forms/filtersets.py:958 #: netbox/dcim/forms/filtersets.py:1059 netbox/dcim/forms/filtersets.py:1170 #: netbox/dcim/tables/devices.py:140 netbox/dcim/tables/devices.py:817 -#: netbox/dcim/tables/devices.py:1063 netbox/dcim/tables/modules.py:69 +#: netbox/dcim/tables/devices.py:1063 netbox/dcim/tables/modules.py:70 #: netbox/dcim/tables/power.py:74 netbox/dcim/tables/racks.py:126 #: netbox/dcim/tables/sites.py:82 netbox/dcim/tables/sites.py:138 #: netbox/ipam/forms/bulk_edit.py:256 netbox/ipam/forms/bulk_edit.py:306 @@ -1102,7 +1102,7 @@ msgstr "Opgave" #: netbox/circuits/tables/circuits.py:155 netbox/dcim/forms/bulk_edit.py:118 #: netbox/dcim/forms/bulk_import.py:100 netbox/dcim/forms/model_forms.py:117 #: netbox/dcim/tables/sites.py:89 netbox/extras/forms/filtersets.py:480 -#: netbox/ipam/filtersets.py:999 netbox/ipam/forms/bulk_edit.py:493 +#: netbox/ipam/filtersets.py:1001 netbox/ipam/forms/bulk_edit.py:493 #: netbox/ipam/forms/bulk_import.py:460 netbox/ipam/forms/model_forms.py:561 #: netbox/ipam/tables/fhrp.py:67 netbox/ipam/tables/vlans.py:122 #: netbox/ipam/tables/vlans.py:226 @@ -1235,7 +1235,7 @@ msgstr "Kredsløbsgruppeopgaver" #: netbox/circuits/models/circuits.py:240 msgid "termination" -msgstr "afslutning" +msgstr "opsigelse" #: netbox/circuits/models/circuits.py:257 msgid "port speed (Kbps)" @@ -1297,15 +1297,15 @@ msgstr "kredsløbsafslutninger" msgid "" "A circuit termination must attach to either a site or a provider network." msgstr "" -"En kredsløbsafslutning skal tilsluttes enten et område eller et " -"leverandørnetværk." +"En kredsløbsafslutning skal tilsluttes enten et websted eller et " +"udbydernetværk." #: netbox/circuits/models/circuits.py:310 msgid "" "A circuit termination cannot attach to both a site and a provider network." msgstr "" -"En kredsløbsafslutning kan ikke knyttes til både et område og et " -"lerverandørnetværk." +"En kredsløbsafslutning kan ikke knyttes til både et websted og et " +"udbydernetværk." #: netbox/circuits/models/providers.py:22 #: netbox/circuits/models/providers.py:66 @@ -1542,7 +1542,7 @@ msgstr "Forpligtelsesrate" #: netbox/circuits/tables/providers.py:82 #: netbox/circuits/tables/providers.py:107 netbox/dcim/tables/devices.py:1036 #: netbox/dcim/tables/devicetypes.py:92 netbox/dcim/tables/modules.py:29 -#: netbox/dcim/tables/modules.py:72 netbox/dcim/tables/power.py:39 +#: netbox/dcim/tables/modules.py:73 netbox/dcim/tables/power.py:39 #: netbox/dcim/tables/power.py:96 netbox/dcim/tables/racks.py:84 #: netbox/dcim/tables/racks.py:145 netbox/dcim/tables/racks.py:225 #: netbox/dcim/tables/sites.py:108 netbox/extras/tables/tables.py:582 @@ -2935,7 +2935,7 @@ msgid "Parent site group (slug)" msgstr "Overordnet områdegruppe (slug)" #: netbox/dcim/filtersets.py:164 netbox/extras/filtersets.py:364 -#: netbox/ipam/filtersets.py:841 netbox/ipam/filtersets.py:993 +#: netbox/ipam/filtersets.py:843 netbox/ipam/filtersets.py:995 msgid "Group (ID)" msgstr "Gruppe (ID)" @@ -2993,15 +2993,15 @@ msgstr "Racktype (ID)" #: netbox/dcim/filtersets.py:411 netbox/dcim/filtersets.py:892 #: netbox/dcim/filtersets.py:994 netbox/dcim/filtersets.py:1850 -#: netbox/ipam/filtersets.py:381 netbox/ipam/filtersets.py:493 -#: netbox/ipam/filtersets.py:1003 netbox/virtualization/filtersets.py:210 +#: netbox/ipam/filtersets.py:383 netbox/ipam/filtersets.py:495 +#: netbox/ipam/filtersets.py:1005 netbox/virtualization/filtersets.py:210 msgid "Role (ID)" msgstr "Rolle (ID)" #: netbox/dcim/filtersets.py:417 netbox/dcim/filtersets.py:898 #: netbox/dcim/filtersets.py:1000 netbox/dcim/filtersets.py:1856 -#: netbox/extras/filtersets.py:558 netbox/ipam/filtersets.py:387 -#: netbox/ipam/filtersets.py:499 netbox/ipam/filtersets.py:1009 +#: netbox/extras/filtersets.py:558 netbox/ipam/filtersets.py:389 +#: netbox/ipam/filtersets.py:501 netbox/ipam/filtersets.py:1011 #: netbox/virtualization/filtersets.py:216 msgid "Role (slug)" msgstr "Rolle (slug)" @@ -3199,7 +3199,7 @@ msgstr "VDC (ID)" msgid "Device model" msgstr "Enhedsmodel" -#: netbox/dcim/filtersets.py:1267 netbox/ipam/filtersets.py:632 +#: netbox/dcim/filtersets.py:1267 netbox/ipam/filtersets.py:634 #: netbox/vpn/filtersets.py:102 netbox/vpn/filtersets.py:401 msgid "Interface (ID)" msgstr "Grænseflade (ID)" @@ -3213,8 +3213,8 @@ msgid "Module bay (ID)" msgstr "Modulplads (ID)" #: netbox/dcim/filtersets.py:1333 netbox/dcim/filtersets.py:1425 -#: netbox/ipam/filtersets.py:611 netbox/ipam/filtersets.py:851 -#: netbox/ipam/filtersets.py:1115 netbox/virtualization/filtersets.py:161 +#: netbox/ipam/filtersets.py:613 netbox/ipam/filtersets.py:853 +#: netbox/ipam/filtersets.py:1117 netbox/virtualization/filtersets.py:161 #: netbox/vpn/filtersets.py:379 msgid "Device (ID)" msgstr "Enhed (ID)" @@ -3223,8 +3223,8 @@ msgstr "Enhed (ID)" msgid "Rack (name)" msgstr "Rack (navn)" -#: netbox/dcim/filtersets.py:1431 netbox/ipam/filtersets.py:606 -#: netbox/ipam/filtersets.py:846 netbox/ipam/filtersets.py:1121 +#: netbox/dcim/filtersets.py:1431 netbox/ipam/filtersets.py:608 +#: netbox/ipam/filtersets.py:848 netbox/ipam/filtersets.py:1123 #: netbox/vpn/filtersets.py:374 msgid "Device (name)" msgstr "Enhed (navn)" @@ -3276,9 +3276,9 @@ msgstr "Tildelt VID" #: netbox/dcim/forms/bulk_import.py:913 netbox/dcim/forms/filtersets.py:1428 #: netbox/dcim/forms/model_forms.py:1385 #: netbox/dcim/models/device_components.py:711 -#: netbox/dcim/tables/devices.py:626 netbox/ipam/filtersets.py:316 -#: netbox/ipam/filtersets.py:327 netbox/ipam/filtersets.py:483 -#: netbox/ipam/filtersets.py:584 netbox/ipam/filtersets.py:595 +#: netbox/dcim/tables/devices.py:626 netbox/ipam/filtersets.py:318 +#: netbox/ipam/filtersets.py:329 netbox/ipam/filtersets.py:485 +#: netbox/ipam/filtersets.py:586 netbox/ipam/filtersets.py:597 #: netbox/ipam/forms/bulk_edit.py:242 netbox/ipam/forms/bulk_edit.py:298 #: netbox/ipam/forms/bulk_edit.py:340 netbox/ipam/forms/bulk_import.py:157 #: netbox/ipam/forms/bulk_import.py:243 netbox/ipam/forms/bulk_import.py:279 @@ -3305,19 +3305,19 @@ msgstr "Tildelt VID" msgid "VRF" msgstr "VRF" -#: netbox/dcim/filtersets.py:1619 netbox/ipam/filtersets.py:322 -#: netbox/ipam/filtersets.py:333 netbox/ipam/filtersets.py:489 -#: netbox/ipam/filtersets.py:590 netbox/ipam/filtersets.py:601 +#: netbox/dcim/filtersets.py:1619 netbox/ipam/filtersets.py:324 +#: netbox/ipam/filtersets.py:335 netbox/ipam/filtersets.py:491 +#: netbox/ipam/filtersets.py:592 netbox/ipam/filtersets.py:603 msgid "VRF (RD)" msgstr "VRF (RED.)" -#: netbox/dcim/filtersets.py:1624 netbox/ipam/filtersets.py:1030 +#: netbox/dcim/filtersets.py:1624 netbox/ipam/filtersets.py:1032 #: netbox/vpn/filtersets.py:342 msgid "L2VPN (ID)" msgstr "L2VPN (ID)" #: netbox/dcim/filtersets.py:1630 netbox/dcim/forms/filtersets.py:1433 -#: netbox/dcim/tables/devices.py:570 netbox/ipam/filtersets.py:1036 +#: netbox/dcim/tables/devices.py:570 netbox/ipam/filtersets.py:1038 #: netbox/ipam/forms/filtersets.py:518 netbox/ipam/tables/vlans.py:137 #: netbox/templates/dcim/interface.html:93 netbox/templates/ipam/vlan.html:66 #: netbox/templates/vpn/l2vpntermination.html:12 @@ -3479,7 +3479,7 @@ msgstr "Tidszone" #: netbox/dcim/forms/object_import.py:187 netbox/dcim/tables/devices.py:96 #: netbox/dcim/tables/devices.py:172 netbox/dcim/tables/devices.py:940 #: netbox/dcim/tables/devicetypes.py:80 netbox/dcim/tables/devicetypes.py:308 -#: netbox/dcim/tables/modules.py:20 netbox/dcim/tables/modules.py:60 +#: netbox/dcim/tables/modules.py:20 netbox/dcim/tables/modules.py:61 #: netbox/dcim/tables/racks.py:58 netbox/dcim/tables/racks.py:132 #: netbox/templates/dcim/devicetype.html:14 #: netbox/templates/dcim/inventoryitem.html:44 @@ -3730,7 +3730,7 @@ msgid "Device Type" msgstr "Enhedstype" #: netbox/dcim/forms/bulk_edit.py:598 netbox/dcim/forms/model_forms.py:401 -#: netbox/dcim/tables/modules.py:17 netbox/dcim/tables/modules.py:65 +#: netbox/dcim/tables/modules.py:17 netbox/dcim/tables/modules.py:66 #: netbox/templates/dcim/module.html:65 #: netbox/templates/dcim/modulebay.html:66 #: netbox/templates/dcim/moduletype.html:22 @@ -3838,7 +3838,7 @@ msgstr "Klynge" #: netbox/dcim/tables/devices.py:697 netbox/dcim/tables/devices.py:754 #: netbox/dcim/tables/devices.py:801 netbox/dcim/tables/devices.py:861 #: netbox/dcim/tables/devices.py:930 netbox/dcim/tables/devices.py:1057 -#: netbox/dcim/tables/modules.py:52 netbox/extras/forms/filtersets.py:321 +#: netbox/dcim/tables/modules.py:53 netbox/extras/forms/filtersets.py:321 #: netbox/ipam/forms/bulk_import.py:304 netbox/ipam/forms/bulk_import.py:505 #: netbox/ipam/forms/filtersets.py:551 netbox/ipam/forms/model_forms.py:323 #: netbox/ipam/forms/model_forms.py:712 netbox/ipam/forms/model_forms.py:745 @@ -4090,11 +4090,11 @@ msgstr "Mærkede VLAN'er" #: netbox/dcim/forms/bulk_edit.py:1511 msgid "Add tagged VLANs" -msgstr "" +msgstr "Tilføj taggede VLAN'er" #: netbox/dcim/forms/bulk_edit.py:1520 msgid "Remove tagged VLANs" -msgstr "" +msgstr "Fjern mærkede VLAN'er" #: netbox/dcim/forms/bulk_edit.py:1536 netbox/dcim/forms/model_forms.py:1348 msgid "Wireless LAN group" @@ -4142,7 +4142,7 @@ msgstr "802.1Q-skift" #: netbox/dcim/forms/bulk_edit.py:1558 msgid "Add/Remove" -msgstr "" +msgstr "Tilføj/fjern" #: netbox/dcim/forms/bulk_edit.py:1617 netbox/dcim/forms/bulk_edit.py:1619 msgid "Interface mode must be specified to assign VLANs" @@ -4220,7 +4220,7 @@ msgstr "Navn på tildelt rolle" #: netbox/dcim/forms/bulk_import.py:264 msgid "Rack type model" -msgstr "" +msgstr "Model af racktype" #: netbox/dcim/forms/bulk_import.py:292 netbox/dcim/forms/bulk_import.py:435 #: netbox/dcim/forms/bulk_import.py:605 @@ -4229,11 +4229,11 @@ msgstr "Luftstrømsretning" #: netbox/dcim/forms/bulk_import.py:324 msgid "Width must be set if not specifying a rack type." -msgstr "" +msgstr "Bredden skal indstilles, hvis der ikke angives en racktype." #: netbox/dcim/forms/bulk_import.py:326 msgid "U height must be set if not specifying a rack type." -msgstr "" +msgstr "U-højde skal indstilles, hvis der ikke angives en racktype." #: netbox/dcim/forms/bulk_import.py:334 msgid "Parent site" @@ -4894,6 +4894,11 @@ msgid "" "present, will be automatically replaced with the position value when " "creating a new module." msgstr "" +"Alfanumeriske intervaller understøttes til masseoprettelse. Blandede sager " +"og typer inden for et enkelt område understøttes ikke (eksempel: [ge, " +"xe] -0/0/ [0-9]). Tokenet {module}, hvis den er til " +"stede, erstattes automatisk med positionsværdien, når du opretter et nyt " +"modul." #: netbox/dcim/forms/model_forms.py:1094 msgid "Console port template" @@ -6782,7 +6787,7 @@ msgstr "Modulpladser" msgid "Inventory items" msgstr "Lagervarer" -#: netbox/dcim/tables/devices.py:305 netbox/dcim/tables/modules.py:56 +#: netbox/dcim/tables/devices.py:305 netbox/dcim/tables/modules.py:57 #: netbox/templates/dcim/modulebay.html:17 msgid "Module Bay" msgstr "Modulbugt" @@ -7505,12 +7510,12 @@ msgstr "Bogmærker" msgid "Show your personal bookmarks" msgstr "Vis dine personlige bogmærker" -#: netbox/extras/events.py:147 +#: netbox/extras/events.py:151 #, python-brace-format msgid "Unknown action type for an event rule: {action_type}" msgstr "Ukendt handlingstype for en hændelsesregel: {action_type}" -#: netbox/extras/events.py:192 +#: netbox/extras/events.py:196 #, python-brace-format msgid "Cannot import events pipeline {name} error: {error}" msgstr "Kan ikke importere hændelsespipeline {name} fejl: {error}" @@ -9268,129 +9273,129 @@ msgstr "Eksport af L2VPN" msgid "Exporting L2VPN (identifier)" msgstr "Eksport af L2VPN (identifikator)" -#: netbox/ipam/filtersets.py:155 netbox/ipam/filtersets.py:281 +#: netbox/ipam/filtersets.py:155 netbox/ipam/filtersets.py:283 #: netbox/ipam/forms/model_forms.py:229 netbox/ipam/tables/ip.py:212 #: netbox/templates/ipam/prefix.html:12 msgid "Prefix" msgstr "Præfiks" #: netbox/ipam/filtersets.py:159 netbox/ipam/filtersets.py:198 -#: netbox/ipam/filtersets.py:221 +#: netbox/ipam/filtersets.py:223 msgid "RIR (ID)" msgstr "RIR (ID)" #: netbox/ipam/filtersets.py:165 netbox/ipam/filtersets.py:204 -#: netbox/ipam/filtersets.py:227 +#: netbox/ipam/filtersets.py:229 msgid "RIR (slug)" msgstr "RIR (slug)" -#: netbox/ipam/filtersets.py:285 +#: netbox/ipam/filtersets.py:287 msgid "Within prefix" msgstr "Inden for præfiks" -#: netbox/ipam/filtersets.py:289 +#: netbox/ipam/filtersets.py:291 msgid "Within and including prefix" msgstr "Inden for og med præfiks" -#: netbox/ipam/filtersets.py:293 +#: netbox/ipam/filtersets.py:295 msgid "Prefixes which contain this prefix or IP" msgstr "Præfikser, der indeholder dette præfiks eller IP" -#: netbox/ipam/filtersets.py:304 netbox/ipam/filtersets.py:572 +#: netbox/ipam/filtersets.py:306 netbox/ipam/filtersets.py:574 #: netbox/ipam/forms/bulk_edit.py:343 netbox/ipam/forms/filtersets.py:196 #: netbox/ipam/forms/filtersets.py:331 msgid "Mask length" msgstr "Maskelængde" -#: netbox/ipam/filtersets.py:373 netbox/vpn/filtersets.py:427 +#: netbox/ipam/filtersets.py:375 netbox/vpn/filtersets.py:427 msgid "VLAN (ID)" msgstr "VLAN (ID)" -#: netbox/ipam/filtersets.py:377 netbox/vpn/filtersets.py:422 +#: netbox/ipam/filtersets.py:379 netbox/vpn/filtersets.py:422 msgid "VLAN number (1-4094)" msgstr "VLAN-nummer (1-4094)" -#: netbox/ipam/filtersets.py:471 netbox/ipam/filtersets.py:475 -#: netbox/ipam/filtersets.py:567 netbox/ipam/forms/model_forms.py:496 +#: netbox/ipam/filtersets.py:473 netbox/ipam/filtersets.py:477 +#: netbox/ipam/filtersets.py:569 netbox/ipam/forms/model_forms.py:496 #: netbox/templates/tenancy/contact.html:53 #: netbox/tenancy/forms/bulk_edit.py:113 msgid "Address" msgstr "Adresse" -#: netbox/ipam/filtersets.py:479 +#: netbox/ipam/filtersets.py:481 msgid "Ranges which contain this prefix or IP" msgstr "Intervaller, der indeholder dette præfiks eller IP" -#: netbox/ipam/filtersets.py:507 netbox/ipam/filtersets.py:563 +#: netbox/ipam/filtersets.py:509 netbox/ipam/filtersets.py:565 msgid "Parent prefix" msgstr "Forældrepræfiks" -#: netbox/ipam/filtersets.py:616 netbox/ipam/filtersets.py:856 -#: netbox/ipam/filtersets.py:1131 netbox/vpn/filtersets.py:385 +#: netbox/ipam/filtersets.py:618 netbox/ipam/filtersets.py:858 +#: netbox/ipam/filtersets.py:1133 netbox/vpn/filtersets.py:385 msgid "Virtual machine (name)" msgstr "Virtuel maskine (navn)" -#: netbox/ipam/filtersets.py:621 netbox/ipam/filtersets.py:861 -#: netbox/ipam/filtersets.py:1125 netbox/virtualization/filtersets.py:282 +#: netbox/ipam/filtersets.py:623 netbox/ipam/filtersets.py:863 +#: netbox/ipam/filtersets.py:1127 netbox/virtualization/filtersets.py:282 #: netbox/virtualization/filtersets.py:321 netbox/vpn/filtersets.py:390 msgid "Virtual machine (ID)" msgstr "Virtuel maskine (ID)" -#: netbox/ipam/filtersets.py:627 netbox/vpn/filtersets.py:97 +#: netbox/ipam/filtersets.py:629 netbox/vpn/filtersets.py:97 #: netbox/vpn/filtersets.py:396 msgid "Interface (name)" msgstr "Grænseflade (navn)" -#: netbox/ipam/filtersets.py:638 netbox/vpn/filtersets.py:108 +#: netbox/ipam/filtersets.py:640 netbox/vpn/filtersets.py:108 #: netbox/vpn/filtersets.py:407 msgid "VM interface (name)" msgstr "VM-grænseflade (navn)" -#: netbox/ipam/filtersets.py:643 netbox/vpn/filtersets.py:113 +#: netbox/ipam/filtersets.py:645 netbox/vpn/filtersets.py:113 msgid "VM interface (ID)" msgstr "VM-grænseflade (ID)" -#: netbox/ipam/filtersets.py:648 +#: netbox/ipam/filtersets.py:650 msgid "FHRP group (ID)" msgstr "FHRP-gruppe (ID)" -#: netbox/ipam/filtersets.py:652 +#: netbox/ipam/filtersets.py:654 msgid "Is assigned to an interface" msgstr "Tildeles til en grænseflade" -#: netbox/ipam/filtersets.py:656 +#: netbox/ipam/filtersets.py:658 msgid "Is assigned" msgstr "Er tildelt" -#: netbox/ipam/filtersets.py:668 +#: netbox/ipam/filtersets.py:670 msgid "Service (ID)" msgstr "Tjeneste (ID)" -#: netbox/ipam/filtersets.py:673 +#: netbox/ipam/filtersets.py:675 msgid "NAT inside IP address (ID)" msgstr "NAT inde i IP-adresse (ID)" -#: netbox/ipam/filtersets.py:1041 netbox/ipam/forms/bulk_import.py:322 +#: netbox/ipam/filtersets.py:1043 netbox/ipam/forms/bulk_import.py:322 msgid "Assigned interface" msgstr "Tildelt grænseflade" -#: netbox/ipam/filtersets.py:1046 +#: netbox/ipam/filtersets.py:1048 msgid "Assigned VM interface" msgstr "Tildelt VM grænseflade" -#: netbox/ipam/filtersets.py:1136 +#: netbox/ipam/filtersets.py:1138 msgid "IP address (ID)" msgstr "IP-adresse (ID)" -#: netbox/ipam/filtersets.py:1142 netbox/ipam/models/ip.py:788 +#: netbox/ipam/filtersets.py:1144 netbox/ipam/models/ip.py:788 msgid "IP address" msgstr "IP adresse" -#: netbox/ipam/filtersets.py:1167 +#: netbox/ipam/filtersets.py:1169 msgid "Primary IPv4 (ID)" msgstr "Primær IPv4 (ID)" -#: netbox/ipam/filtersets.py:1172 +#: netbox/ipam/filtersets.py:1174 msgid "Primary IPv6 (ID)" msgstr "Primær IPv6 (ID)" @@ -9614,11 +9619,11 @@ msgstr "Gør dette til den primære IP for den tildelte enhed" #: netbox/ipam/forms/bulk_import.py:330 msgid "Is out-of-band" -msgstr "" +msgstr "Er uden for båndet" #: netbox/ipam/forms/bulk_import.py:331 msgid "Designate this as the out-of-band IP address for the assigned device" -msgstr "" +msgstr "Angiv dette som IP-adressen uden for båndet for den tildelte enhed" #: netbox/ipam/forms/bulk_import.py:371 msgid "No device or virtual machine specified; cannot set as primary IP" @@ -9627,11 +9632,11 @@ msgstr "" #: netbox/ipam/forms/bulk_import.py:375 msgid "No device specified; cannot set as out-of-band IP" -msgstr "" +msgstr "Ingen enhed angivet; kan ikke indstilles som IP uden for båndet" #: netbox/ipam/forms/bulk_import.py:379 msgid "Cannot set out-of-band IP for virtual machines" -msgstr "" +msgstr "Kan ikke angive IP uden for båndet til virtuelle maskiner" #: netbox/ipam/forms/bulk_import.py:383 msgid "No interface specified; cannot set as primary IP" @@ -9639,7 +9644,7 @@ msgstr "Ingen grænseflade angivet; kan ikke indstilles som primær IP" #: netbox/ipam/forms/bulk_import.py:387 msgid "No interface specified; cannot set as out-of-band IP" -msgstr "" +msgstr "Ingen grænseflade angivet; kan ikke indstilles som IP uden for båndet" #: netbox/ipam/forms/bulk_import.py:422 msgid "Auth type" @@ -9798,7 +9803,7 @@ msgstr "ASN-rækkevidde" #: netbox/ipam/forms/model_forms.py:231 msgid "Site/VLAN Assignment" -msgstr "Område/VLAN-tildeling" +msgstr "Websted/VLAN-tildeling" #: netbox/ipam/forms/model_forms.py:259 netbox/templates/ipam/iprange.html:10 msgid "IP Range" @@ -9816,7 +9821,7 @@ msgstr "Gør dette til den primære IP for enheden/VM" #: netbox/ipam/forms/model_forms.py:314 msgid "Make this the out-of-band IP for the device" -msgstr "" +msgstr "Gør dette til enhedens off-band IP" #: netbox/ipam/forms/model_forms.py:329 msgid "NAT IP (Inside)" @@ -9828,11 +9833,13 @@ msgstr "En IP-adresse kan kun tildeles et enkelt objekt." #: netbox/ipam/forms/model_forms.py:398 msgid "Cannot reassign primary IP address for the parent device/VM" -msgstr "" +msgstr "Kan ikke omtildele primær IP-adresse til den overordnede enhed/VM" #: netbox/ipam/forms/model_forms.py:402 msgid "Cannot reassign out-of-Band IP address for the parent device" msgstr "" +"Det er ikke muligt at omfordele IP-adressen uden for båndet til den " +"overordnede enhed" #: netbox/ipam/forms/model_forms.py:412 msgid "" @@ -9846,6 +9853,8 @@ msgid "" "Only IP addresses assigned to a device interface can be designated as the " "out-of-band IP for a device." msgstr "" +"Kun IP-adresser, der er tildelt en enhedsgrænseflade, kan betegnes som en " +"enheds off-band IP." #: netbox/ipam/forms/model_forms.py:508 msgid "Virtual IP Address" @@ -10245,11 +10254,15 @@ msgstr "Kan ikke indstille scope_id uden scope_type." #, python-brace-format msgid "Starting VLAN ID in range ({value}) cannot be less than {minimum}" msgstr "" +"Start af VLAN-ID inden for rækkevidde ({value}) kan ikke være mindre end " +"{minimum}" #: netbox/ipam/models/vlans.py:111 #, python-brace-format msgid "Ending VLAN ID in range ({value}) cannot exceed {maximum}" msgstr "" +"Afslutning af VLAN-ID inden for rækkevidde ({value}) kan ikke overstige " +"{maximum}" #: netbox/ipam/models/vlans.py:118 #, python-brace-format @@ -10257,6 +10270,8 @@ msgid "" "Ending VLAN ID in range must be greater than or equal to the starting VLAN " "ID ({range})" msgstr "" +"Afsluttende VLAN-id inden for rækkevidde skal være større end eller lig med " +"det startende VLAN-id ({range})" #: netbox/ipam/models/vlans.py:124 msgid "Ranges cannot overlap." @@ -12616,11 +12631,11 @@ msgstr "Hent" #: netbox/templates/dcim/device/render_config.html:64 #: netbox/templates/virtualization/virtualmachine/render_config.html:64 msgid "Error rendering template" -msgstr "" +msgstr "Fejl ved gengivelse af skabelon" #: netbox/templates/dcim/device/render_config.html:70 msgid "No configuration template has been assigned for this device." -msgstr "" +msgstr "Der er ikke tildelt nogen konfigurationsskabelon til denne enhed." #: netbox/templates/dcim/device_edit.html:44 msgid "Parent Bay" @@ -13488,7 +13503,7 @@ msgstr "Kør igen" #: netbox/templates/extras/script_list.html:133 #, python-format msgid "Could not load scripts from module %(module)s" -msgstr "" +msgstr "Kunne ikke indlæse scripts fra modulet %(module)s" #: netbox/templates/extras/script_list.html:141 msgid "No Scripts Found" @@ -14302,6 +14317,8 @@ msgstr "Tilføj virtuel disk" #: netbox/templates/virtualization/virtualmachine/render_config.html:70 msgid "No configuration template has been assigned for this virtual machine." msgstr "" +"Der er ikke tildelt nogen konfigurationsskabelon til denne virtuelle " +"maskine." #: netbox/templates/vpn/ikepolicy.html:10 #: netbox/templates/vpn/ipsecprofile.html:33 netbox/vpn/tables/crypto.py:166 @@ -15371,12 +15388,12 @@ msgstr "Hukommelse (MB)" #: netbox/virtualization/forms/bulk_edit.py:174 msgid "Disk (MB)" -msgstr "" +msgstr "Disk (MB)" #: netbox/virtualization/forms/bulk_edit.py:334 #: netbox/virtualization/forms/filtersets.py:251 msgid "Size (MB)" -msgstr "" +msgstr "Størrelse (MB)" #: netbox/virtualization/forms/bulk_import.py:44 msgid "Type of cluster" @@ -15404,8 +15421,7 @@ msgid "" "{device} belongs to a different site ({device_site}) than the cluster " "({cluster_site})" msgstr "" -"{device} tilhører et andet område ({device_site}) end cluster " -"({cluster_site})" +"{device} tilhører et andet sted ({device_site}) end klyngen ({cluster_site})" #: netbox/virtualization/forms/model_forms.py:192 msgid "Optionally pin this VM to a specific host device within the cluster" @@ -15583,19 +15599,19 @@ msgstr "GREE" #: netbox/vpn/choices.py:39 msgid "WireGuard" -msgstr "" +msgstr "WireGuard" #: netbox/vpn/choices.py:40 msgid "OpenVPN" -msgstr "" +msgstr "OpenVPN" #: netbox/vpn/choices.py:41 msgid "L2TP" -msgstr "" +msgstr "L2TP" #: netbox/vpn/choices.py:42 msgid "PPTP" -msgstr "" +msgstr "PPTP" #: netbox/vpn/choices.py:64 msgid "Hub" diff --git a/netbox/translations/de/LC_MESSAGES/django.mo b/netbox/translations/de/LC_MESSAGES/django.mo index 1a628bec87937af98a2bc2a07851275a1995b8f0..aa2135609c1e4c4c6f2a435002584b79166c4203 100644 GIT binary patch delta 22246 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 delta 22223 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 C@QdjH delta 66406 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, YEAR. # # Translators: -# Jeremy Stretch, 2024 +# Jeremy Stretch, 2025 # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2024-12-12 05:02+0000\n" +"POT-Creation-Date: 2025-01-04 05:02+0000\n" "PO-Revision-Date: 2023-10-30 17:48+0000\n" -"Last-Translator: Jeremy Stretch, 2024\n" +"Last-Translator: Jeremy Stretch, 2025\n" "Language-Team: Spanish (https://app.transifex.com/netbox-community/teams/178115/es/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -151,7 +151,7 @@ msgstr "Inactivo" #: netbox/dcim/filtersets.py:464 netbox/dcim/filtersets.py:1021 #: netbox/dcim/filtersets.py:1368 netbox/dcim/filtersets.py:1903 #: netbox/dcim/filtersets.py:2146 netbox/dcim/filtersets.py:2204 -#: netbox/ipam/filtersets.py:339 netbox/ipam/filtersets.py:959 +#: netbox/ipam/filtersets.py:341 netbox/ipam/filtersets.py:961 #: netbox/virtualization/filtersets.py:45 #: netbox/virtualization/filtersets.py:173 netbox/vpn/filtersets.py:358 msgid "Region (ID)" @@ -163,8 +163,8 @@ msgstr "Región (ID)" #: netbox/dcim/filtersets.py:471 netbox/dcim/filtersets.py:1028 #: netbox/dcim/filtersets.py:1375 netbox/dcim/filtersets.py:1910 #: netbox/dcim/filtersets.py:2153 netbox/dcim/filtersets.py:2211 -#: netbox/extras/filtersets.py:509 netbox/ipam/filtersets.py:346 -#: netbox/ipam/filtersets.py:966 netbox/virtualization/filtersets.py:52 +#: netbox/extras/filtersets.py:509 netbox/ipam/filtersets.py:348 +#: netbox/ipam/filtersets.py:968 netbox/virtualization/filtersets.py:52 #: netbox/virtualization/filtersets.py:180 netbox/vpn/filtersets.py:353 msgid "Region (slug)" msgstr "Región (slug)" @@ -174,8 +174,8 @@ msgstr "Región (slug)" #: netbox/dcim/filtersets.py:346 netbox/dcim/filtersets.py:477 #: netbox/dcim/filtersets.py:1034 netbox/dcim/filtersets.py:1381 #: netbox/dcim/filtersets.py:1916 netbox/dcim/filtersets.py:2159 -#: netbox/dcim/filtersets.py:2217 netbox/ipam/filtersets.py:352 -#: netbox/ipam/filtersets.py:972 netbox/virtualization/filtersets.py:58 +#: netbox/dcim/filtersets.py:2217 netbox/ipam/filtersets.py:354 +#: netbox/ipam/filtersets.py:974 netbox/virtualization/filtersets.py:58 #: netbox/virtualization/filtersets.py:186 msgid "Site group (ID)" msgstr "Grupo de sitios (ID)" @@ -186,7 +186,7 @@ msgstr "Grupo de sitios (ID)" #: netbox/dcim/filtersets.py:1041 netbox/dcim/filtersets.py:1388 #: netbox/dcim/filtersets.py:1923 netbox/dcim/filtersets.py:2166 #: netbox/dcim/filtersets.py:2224 netbox/extras/filtersets.py:515 -#: netbox/ipam/filtersets.py:359 netbox/ipam/filtersets.py:979 +#: netbox/ipam/filtersets.py:361 netbox/ipam/filtersets.py:981 #: netbox/virtualization/filtersets.py:65 #: netbox/virtualization/filtersets.py:193 msgid "Site group (slug)" @@ -256,8 +256,8 @@ msgstr "Sitio" #: netbox/circuits/filtersets.py:62 netbox/circuits/filtersets.py:229 #: netbox/circuits/filtersets.py:274 netbox/dcim/filtersets.py:242 #: netbox/dcim/filtersets.py:363 netbox/dcim/filtersets.py:458 -#: netbox/extras/filtersets.py:531 netbox/ipam/filtersets.py:238 -#: netbox/ipam/filtersets.py:369 netbox/ipam/filtersets.py:989 +#: netbox/extras/filtersets.py:531 netbox/ipam/filtersets.py:240 +#: netbox/ipam/filtersets.py:371 netbox/ipam/filtersets.py:991 #: netbox/virtualization/filtersets.py:75 #: netbox/virtualization/filtersets.py:203 netbox/vpn/filtersets.py:363 msgid "Site (slug)" @@ -276,13 +276,13 @@ msgstr "ASN" #: netbox/circuits/filtersets.py:95 netbox/circuits/filtersets.py:122 #: netbox/circuits/filtersets.py:156 netbox/circuits/filtersets.py:283 -#: netbox/circuits/filtersets.py:325 netbox/ipam/filtersets.py:243 +#: netbox/circuits/filtersets.py:325 netbox/ipam/filtersets.py:245 msgid "Provider (ID)" msgstr "Proveedor (ID)" #: netbox/circuits/filtersets.py:101 netbox/circuits/filtersets.py:128 #: netbox/circuits/filtersets.py:162 netbox/circuits/filtersets.py:289 -#: netbox/circuits/filtersets.py:331 netbox/ipam/filtersets.py:249 +#: netbox/circuits/filtersets.py:331 netbox/ipam/filtersets.py:251 msgid "Provider (slug)" msgstr "Proveedor (babosa)" @@ -311,8 +311,8 @@ msgstr "Tipo de circuito (slug)" #: netbox/dcim/filtersets.py:452 netbox/dcim/filtersets.py:1045 #: netbox/dcim/filtersets.py:1393 netbox/dcim/filtersets.py:1928 #: netbox/dcim/filtersets.py:2170 netbox/dcim/filtersets.py:2229 -#: netbox/ipam/filtersets.py:232 netbox/ipam/filtersets.py:363 -#: netbox/ipam/filtersets.py:983 netbox/virtualization/filtersets.py:69 +#: netbox/ipam/filtersets.py:234 netbox/ipam/filtersets.py:365 +#: netbox/ipam/filtersets.py:985 netbox/virtualization/filtersets.py:69 #: netbox/virtualization/filtersets.py:197 netbox/vpn/filtersets.py:368 msgid "Site (ID)" msgstr "Sitio (ID)" @@ -666,7 +666,7 @@ msgstr "Cuenta de proveedor" #: netbox/dcim/forms/filtersets.py:924 netbox/dcim/forms/filtersets.py:958 #: netbox/dcim/forms/filtersets.py:1059 netbox/dcim/forms/filtersets.py:1170 #: netbox/dcim/tables/devices.py:140 netbox/dcim/tables/devices.py:817 -#: netbox/dcim/tables/devices.py:1063 netbox/dcim/tables/modules.py:69 +#: netbox/dcim/tables/devices.py:1063 netbox/dcim/tables/modules.py:70 #: netbox/dcim/tables/power.py:74 netbox/dcim/tables/racks.py:126 #: netbox/dcim/tables/sites.py:82 netbox/dcim/tables/sites.py:138 #: netbox/ipam/forms/bulk_edit.py:256 netbox/ipam/forms/bulk_edit.py:306 @@ -1101,7 +1101,7 @@ msgstr "Asignación" #: netbox/circuits/tables/circuits.py:155 netbox/dcim/forms/bulk_edit.py:118 #: netbox/dcim/forms/bulk_import.py:100 netbox/dcim/forms/model_forms.py:117 #: netbox/dcim/tables/sites.py:89 netbox/extras/forms/filtersets.py:480 -#: netbox/ipam/filtersets.py:999 netbox/ipam/forms/bulk_edit.py:493 +#: netbox/ipam/filtersets.py:1001 netbox/ipam/forms/bulk_edit.py:493 #: netbox/ipam/forms/bulk_import.py:460 netbox/ipam/forms/model_forms.py:561 #: netbox/ipam/tables/fhrp.py:67 netbox/ipam/tables/vlans.py:122 #: netbox/ipam/tables/vlans.py:226 @@ -1541,7 +1541,7 @@ msgstr "Tasa de compromiso" #: netbox/circuits/tables/providers.py:82 #: netbox/circuits/tables/providers.py:107 netbox/dcim/tables/devices.py:1036 #: netbox/dcim/tables/devicetypes.py:92 netbox/dcim/tables/modules.py:29 -#: netbox/dcim/tables/modules.py:72 netbox/dcim/tables/power.py:39 +#: netbox/dcim/tables/modules.py:73 netbox/dcim/tables/power.py:39 #: netbox/dcim/tables/power.py:96 netbox/dcim/tables/racks.py:84 #: netbox/dcim/tables/racks.py:145 netbox/dcim/tables/racks.py:225 #: netbox/dcim/tables/sites.py:108 netbox/extras/tables/tables.py:582 @@ -2941,7 +2941,7 @@ msgid "Parent site group (slug)" msgstr "Grupo de sitios principal (slug)" #: netbox/dcim/filtersets.py:164 netbox/extras/filtersets.py:364 -#: netbox/ipam/filtersets.py:841 netbox/ipam/filtersets.py:993 +#: netbox/ipam/filtersets.py:843 netbox/ipam/filtersets.py:995 msgid "Group (ID)" msgstr "Grupo (ID)" @@ -2999,15 +2999,15 @@ msgstr "Tipo de bastidor (ID)" #: netbox/dcim/filtersets.py:411 netbox/dcim/filtersets.py:892 #: netbox/dcim/filtersets.py:994 netbox/dcim/filtersets.py:1850 -#: netbox/ipam/filtersets.py:381 netbox/ipam/filtersets.py:493 -#: netbox/ipam/filtersets.py:1003 netbox/virtualization/filtersets.py:210 +#: netbox/ipam/filtersets.py:383 netbox/ipam/filtersets.py:495 +#: netbox/ipam/filtersets.py:1005 netbox/virtualization/filtersets.py:210 msgid "Role (ID)" msgstr "Función (ID)" #: netbox/dcim/filtersets.py:417 netbox/dcim/filtersets.py:898 #: netbox/dcim/filtersets.py:1000 netbox/dcim/filtersets.py:1856 -#: netbox/extras/filtersets.py:558 netbox/ipam/filtersets.py:387 -#: netbox/ipam/filtersets.py:499 netbox/ipam/filtersets.py:1009 +#: netbox/extras/filtersets.py:558 netbox/ipam/filtersets.py:389 +#: netbox/ipam/filtersets.py:501 netbox/ipam/filtersets.py:1011 #: netbox/virtualization/filtersets.py:216 msgid "Role (slug)" msgstr "Rol (babosa)" @@ -3205,7 +3205,7 @@ msgstr "VDC (IDENTIFICACIÓN)" msgid "Device model" msgstr "Modelo de dispositivo" -#: netbox/dcim/filtersets.py:1267 netbox/ipam/filtersets.py:632 +#: netbox/dcim/filtersets.py:1267 netbox/ipam/filtersets.py:634 #: netbox/vpn/filtersets.py:102 netbox/vpn/filtersets.py:401 msgid "Interface (ID)" msgstr "Interfaz (ID)" @@ -3219,8 +3219,8 @@ msgid "Module bay (ID)" msgstr "Bahía de módulos (ID)" #: netbox/dcim/filtersets.py:1333 netbox/dcim/filtersets.py:1425 -#: netbox/ipam/filtersets.py:611 netbox/ipam/filtersets.py:851 -#: netbox/ipam/filtersets.py:1115 netbox/virtualization/filtersets.py:161 +#: netbox/ipam/filtersets.py:613 netbox/ipam/filtersets.py:853 +#: netbox/ipam/filtersets.py:1117 netbox/virtualization/filtersets.py:161 #: netbox/vpn/filtersets.py:379 msgid "Device (ID)" msgstr "Dispositivo (ID)" @@ -3229,8 +3229,8 @@ msgstr "Dispositivo (ID)" msgid "Rack (name)" msgstr "Rack (nombre)" -#: netbox/dcim/filtersets.py:1431 netbox/ipam/filtersets.py:606 -#: netbox/ipam/filtersets.py:846 netbox/ipam/filtersets.py:1121 +#: netbox/dcim/filtersets.py:1431 netbox/ipam/filtersets.py:608 +#: netbox/ipam/filtersets.py:848 netbox/ipam/filtersets.py:1123 #: netbox/vpn/filtersets.py:374 msgid "Device (name)" msgstr "Dispositivo (nombre)" @@ -3282,9 +3282,9 @@ msgstr "VID asignado" #: netbox/dcim/forms/bulk_import.py:913 netbox/dcim/forms/filtersets.py:1428 #: netbox/dcim/forms/model_forms.py:1385 #: netbox/dcim/models/device_components.py:711 -#: netbox/dcim/tables/devices.py:626 netbox/ipam/filtersets.py:316 -#: netbox/ipam/filtersets.py:327 netbox/ipam/filtersets.py:483 -#: netbox/ipam/filtersets.py:584 netbox/ipam/filtersets.py:595 +#: netbox/dcim/tables/devices.py:626 netbox/ipam/filtersets.py:318 +#: netbox/ipam/filtersets.py:329 netbox/ipam/filtersets.py:485 +#: netbox/ipam/filtersets.py:586 netbox/ipam/filtersets.py:597 #: netbox/ipam/forms/bulk_edit.py:242 netbox/ipam/forms/bulk_edit.py:298 #: netbox/ipam/forms/bulk_edit.py:340 netbox/ipam/forms/bulk_import.py:157 #: netbox/ipam/forms/bulk_import.py:243 netbox/ipam/forms/bulk_import.py:279 @@ -3311,19 +3311,19 @@ msgstr "VID asignado" msgid "VRF" msgstr "VRF" -#: netbox/dcim/filtersets.py:1619 netbox/ipam/filtersets.py:322 -#: netbox/ipam/filtersets.py:333 netbox/ipam/filtersets.py:489 -#: netbox/ipam/filtersets.py:590 netbox/ipam/filtersets.py:601 +#: netbox/dcim/filtersets.py:1619 netbox/ipam/filtersets.py:324 +#: netbox/ipam/filtersets.py:335 netbox/ipam/filtersets.py:491 +#: netbox/ipam/filtersets.py:592 netbox/ipam/filtersets.py:603 msgid "VRF (RD)" msgstr "VRF (ROJO)" -#: netbox/dcim/filtersets.py:1624 netbox/ipam/filtersets.py:1030 +#: netbox/dcim/filtersets.py:1624 netbox/ipam/filtersets.py:1032 #: netbox/vpn/filtersets.py:342 msgid "L2VPN (ID)" msgstr "L2VPN (ID)" #: netbox/dcim/filtersets.py:1630 netbox/dcim/forms/filtersets.py:1433 -#: netbox/dcim/tables/devices.py:570 netbox/ipam/filtersets.py:1036 +#: netbox/dcim/tables/devices.py:570 netbox/ipam/filtersets.py:1038 #: netbox/ipam/forms/filtersets.py:518 netbox/ipam/tables/vlans.py:137 #: netbox/templates/dcim/interface.html:93 netbox/templates/ipam/vlan.html:66 #: netbox/templates/vpn/l2vpntermination.html:12 @@ -3485,7 +3485,7 @@ msgstr "Zona horaria" #: netbox/dcim/forms/object_import.py:187 netbox/dcim/tables/devices.py:96 #: netbox/dcim/tables/devices.py:172 netbox/dcim/tables/devices.py:940 #: netbox/dcim/tables/devicetypes.py:80 netbox/dcim/tables/devicetypes.py:308 -#: netbox/dcim/tables/modules.py:20 netbox/dcim/tables/modules.py:60 +#: netbox/dcim/tables/modules.py:20 netbox/dcim/tables/modules.py:61 #: netbox/dcim/tables/racks.py:58 netbox/dcim/tables/racks.py:132 #: netbox/templates/dcim/devicetype.html:14 #: netbox/templates/dcim/inventoryitem.html:44 @@ -3736,7 +3736,7 @@ msgid "Device Type" msgstr "Tipo de dispositivo" #: netbox/dcim/forms/bulk_edit.py:598 netbox/dcim/forms/model_forms.py:401 -#: netbox/dcim/tables/modules.py:17 netbox/dcim/tables/modules.py:65 +#: netbox/dcim/tables/modules.py:17 netbox/dcim/tables/modules.py:66 #: netbox/templates/dcim/module.html:65 #: netbox/templates/dcim/modulebay.html:66 #: netbox/templates/dcim/moduletype.html:22 @@ -3844,7 +3844,7 @@ msgstr "Clúster" #: netbox/dcim/tables/devices.py:697 netbox/dcim/tables/devices.py:754 #: netbox/dcim/tables/devices.py:801 netbox/dcim/tables/devices.py:861 #: netbox/dcim/tables/devices.py:930 netbox/dcim/tables/devices.py:1057 -#: netbox/dcim/tables/modules.py:52 netbox/extras/forms/filtersets.py:321 +#: netbox/dcim/tables/modules.py:53 netbox/extras/forms/filtersets.py:321 #: netbox/ipam/forms/bulk_import.py:304 netbox/ipam/forms/bulk_import.py:505 #: netbox/ipam/forms/filtersets.py:551 netbox/ipam/forms/model_forms.py:323 #: netbox/ipam/forms/model_forms.py:712 netbox/ipam/forms/model_forms.py:745 @@ -4096,11 +4096,11 @@ msgstr "VLAN etiquetadas" #: netbox/dcim/forms/bulk_edit.py:1511 msgid "Add tagged VLANs" -msgstr "" +msgstr "Agregar VLAN etiquetadas" #: netbox/dcim/forms/bulk_edit.py:1520 msgid "Remove tagged VLANs" -msgstr "" +msgstr "Eliminar las VLAN etiquetadas" #: netbox/dcim/forms/bulk_edit.py:1536 netbox/dcim/forms/model_forms.py:1348 msgid "Wireless LAN group" @@ -4148,7 +4148,7 @@ msgstr "Conmutación 802.1Q" #: netbox/dcim/forms/bulk_edit.py:1558 msgid "Add/Remove" -msgstr "" +msgstr "Añadir/eliminar" #: netbox/dcim/forms/bulk_edit.py:1617 netbox/dcim/forms/bulk_edit.py:1619 msgid "Interface mode must be specified to assign VLANs" @@ -4226,7 +4226,7 @@ msgstr "Nombre de la función asignada" #: netbox/dcim/forms/bulk_import.py:264 msgid "Rack type model" -msgstr "" +msgstr "Modelo tipo bastidor" #: netbox/dcim/forms/bulk_import.py:292 netbox/dcim/forms/bulk_import.py:435 #: netbox/dcim/forms/bulk_import.py:605 @@ -4235,11 +4235,12 @@ msgstr "Dirección del flujo de aire" #: netbox/dcim/forms/bulk_import.py:324 msgid "Width must be set if not specifying a rack type." -msgstr "" +msgstr "Se debe establecer el ancho si no se especifica un tipo de bastidor." #: netbox/dcim/forms/bulk_import.py:326 msgid "U height must be set if not specifying a rack type." msgstr "" +"Se debe establecer la altura en U si no se especifica un tipo de bastidor." #: netbox/dcim/forms/bulk_import.py:334 msgid "Parent site" @@ -4905,6 +4906,11 @@ msgid "" "present, will be automatically replaced with the position value when " "creating a new module." msgstr "" +"Se admiten rangos alfanuméricos para la creación masiva. No se admiten " +"mayúsculas y minúsculas ni tipos mezclados dentro de un mismo rango (por " +"ejemplo: [edad, ex] -0/0/ [0-9]). El token " +"{module}, si está presente, se reemplazará automáticamente por " +"el valor de posición al crear un nuevo módulo." #: netbox/dcim/forms/model_forms.py:1094 msgid "Console port template" @@ -6844,7 +6850,7 @@ msgstr "Bahías de módulos" msgid "Inventory items" msgstr "Artículos de inventario" -#: netbox/dcim/tables/devices.py:305 netbox/dcim/tables/modules.py:56 +#: netbox/dcim/tables/devices.py:305 netbox/dcim/tables/modules.py:57 #: netbox/templates/dcim/modulebay.html:17 msgid "Module Bay" msgstr "Bahía de módulos" @@ -7573,12 +7579,12 @@ msgstr "Marcadores" msgid "Show your personal bookmarks" msgstr "Muestra tus marcadores personales" -#: netbox/extras/events.py:147 +#: netbox/extras/events.py:151 #, python-brace-format msgid "Unknown action type for an event rule: {action_type}" msgstr "Tipo de acción desconocido para una regla de evento: {action_type}" -#: netbox/extras/events.py:192 +#: netbox/extras/events.py:196 #, python-brace-format msgid "Cannot import events pipeline {name} error: {error}" msgstr "No se puede importar la canalización de eventos {name} error: {error}" @@ -9368,129 +9374,129 @@ msgstr "Exportación de L2VPN" msgid "Exporting L2VPN (identifier)" msgstr "Exportación de L2VPN (identificador)" -#: netbox/ipam/filtersets.py:155 netbox/ipam/filtersets.py:281 +#: netbox/ipam/filtersets.py:155 netbox/ipam/filtersets.py:283 #: netbox/ipam/forms/model_forms.py:229 netbox/ipam/tables/ip.py:212 #: netbox/templates/ipam/prefix.html:12 msgid "Prefix" msgstr "Prefijo" #: netbox/ipam/filtersets.py:159 netbox/ipam/filtersets.py:198 -#: netbox/ipam/filtersets.py:221 +#: netbox/ipam/filtersets.py:223 msgid "RIR (ID)" msgstr "RIR (ID)" #: netbox/ipam/filtersets.py:165 netbox/ipam/filtersets.py:204 -#: netbox/ipam/filtersets.py:227 +#: netbox/ipam/filtersets.py:229 msgid "RIR (slug)" msgstr "RIR (babosa)" -#: netbox/ipam/filtersets.py:285 +#: netbox/ipam/filtersets.py:287 msgid "Within prefix" msgstr "Dentro del prefijo" -#: netbox/ipam/filtersets.py:289 +#: netbox/ipam/filtersets.py:291 msgid "Within and including prefix" msgstr "Dentro del prefijo e incluído" -#: netbox/ipam/filtersets.py:293 +#: netbox/ipam/filtersets.py:295 msgid "Prefixes which contain this prefix or IP" msgstr "Prefijos que contienen este prefijo o IP" -#: netbox/ipam/filtersets.py:304 netbox/ipam/filtersets.py:572 +#: netbox/ipam/filtersets.py:306 netbox/ipam/filtersets.py:574 #: netbox/ipam/forms/bulk_edit.py:343 netbox/ipam/forms/filtersets.py:196 #: netbox/ipam/forms/filtersets.py:331 msgid "Mask length" msgstr "Longitud de la máscara" -#: netbox/ipam/filtersets.py:373 netbox/vpn/filtersets.py:427 +#: netbox/ipam/filtersets.py:375 netbox/vpn/filtersets.py:427 msgid "VLAN (ID)" msgstr "VLAN (ID)" -#: netbox/ipam/filtersets.py:377 netbox/vpn/filtersets.py:422 +#: netbox/ipam/filtersets.py:379 netbox/vpn/filtersets.py:422 msgid "VLAN number (1-4094)" msgstr "Número de VLAN (1-4094)" -#: netbox/ipam/filtersets.py:471 netbox/ipam/filtersets.py:475 -#: netbox/ipam/filtersets.py:567 netbox/ipam/forms/model_forms.py:496 +#: netbox/ipam/filtersets.py:473 netbox/ipam/filtersets.py:477 +#: netbox/ipam/filtersets.py:569 netbox/ipam/forms/model_forms.py:496 #: netbox/templates/tenancy/contact.html:53 #: netbox/tenancy/forms/bulk_edit.py:113 msgid "Address" msgstr "Dirección" -#: netbox/ipam/filtersets.py:479 +#: netbox/ipam/filtersets.py:481 msgid "Ranges which contain this prefix or IP" msgstr "Intervalos que contienen este prefijo o IP" -#: netbox/ipam/filtersets.py:507 netbox/ipam/filtersets.py:563 +#: netbox/ipam/filtersets.py:509 netbox/ipam/filtersets.py:565 msgid "Parent prefix" msgstr "Prefijo principal" -#: netbox/ipam/filtersets.py:616 netbox/ipam/filtersets.py:856 -#: netbox/ipam/filtersets.py:1131 netbox/vpn/filtersets.py:385 +#: netbox/ipam/filtersets.py:618 netbox/ipam/filtersets.py:858 +#: netbox/ipam/filtersets.py:1133 netbox/vpn/filtersets.py:385 msgid "Virtual machine (name)" msgstr "Máquina virtual (nombre)" -#: netbox/ipam/filtersets.py:621 netbox/ipam/filtersets.py:861 -#: netbox/ipam/filtersets.py:1125 netbox/virtualization/filtersets.py:282 +#: netbox/ipam/filtersets.py:623 netbox/ipam/filtersets.py:863 +#: netbox/ipam/filtersets.py:1127 netbox/virtualization/filtersets.py:282 #: netbox/virtualization/filtersets.py:321 netbox/vpn/filtersets.py:390 msgid "Virtual machine (ID)" msgstr "Máquina virtual (ID)" -#: netbox/ipam/filtersets.py:627 netbox/vpn/filtersets.py:97 +#: netbox/ipam/filtersets.py:629 netbox/vpn/filtersets.py:97 #: netbox/vpn/filtersets.py:396 msgid "Interface (name)" msgstr "Interfaz (nombre)" -#: netbox/ipam/filtersets.py:638 netbox/vpn/filtersets.py:108 +#: netbox/ipam/filtersets.py:640 netbox/vpn/filtersets.py:108 #: netbox/vpn/filtersets.py:407 msgid "VM interface (name)" msgstr "Interfaz VM (nombre)" -#: netbox/ipam/filtersets.py:643 netbox/vpn/filtersets.py:113 +#: netbox/ipam/filtersets.py:645 netbox/vpn/filtersets.py:113 msgid "VM interface (ID)" msgstr "Interfaz de máquina virtual (ID)" -#: netbox/ipam/filtersets.py:648 +#: netbox/ipam/filtersets.py:650 msgid "FHRP group (ID)" msgstr "Grupo FHRP (ID)" -#: netbox/ipam/filtersets.py:652 +#: netbox/ipam/filtersets.py:654 msgid "Is assigned to an interface" msgstr "Está asignado a una interfaz" -#: netbox/ipam/filtersets.py:656 +#: netbox/ipam/filtersets.py:658 msgid "Is assigned" msgstr "Está asignado" -#: netbox/ipam/filtersets.py:668 +#: netbox/ipam/filtersets.py:670 msgid "Service (ID)" msgstr "Servicio (ID)" -#: netbox/ipam/filtersets.py:673 +#: netbox/ipam/filtersets.py:675 msgid "NAT inside IP address (ID)" msgstr "Dirección IP interna de NAT (ID)" -#: netbox/ipam/filtersets.py:1041 netbox/ipam/forms/bulk_import.py:322 +#: netbox/ipam/filtersets.py:1043 netbox/ipam/forms/bulk_import.py:322 msgid "Assigned interface" msgstr "Interfaz asignada" -#: netbox/ipam/filtersets.py:1046 +#: netbox/ipam/filtersets.py:1048 msgid "Assigned VM interface" msgstr "Interfaz VM asignada" -#: netbox/ipam/filtersets.py:1136 +#: netbox/ipam/filtersets.py:1138 msgid "IP address (ID)" msgstr "Dirección IP (ID)" -#: netbox/ipam/filtersets.py:1142 netbox/ipam/models/ip.py:788 +#: netbox/ipam/filtersets.py:1144 netbox/ipam/models/ip.py:788 msgid "IP address" msgstr "dirección IP" -#: netbox/ipam/filtersets.py:1167 +#: netbox/ipam/filtersets.py:1169 msgid "Primary IPv4 (ID)" msgstr "IPv4 principal (ID)" -#: netbox/ipam/filtersets.py:1172 +#: netbox/ipam/filtersets.py:1174 msgid "Primary IPv6 (ID)" msgstr "IPv6 principal (ID)" @@ -9714,11 +9720,13 @@ msgstr "Conviértase en la IP principal del dispositivo asignado" #: netbox/ipam/forms/bulk_import.py:330 msgid "Is out-of-band" -msgstr "" +msgstr "Está fuera de banda" #: netbox/ipam/forms/bulk_import.py:331 msgid "Designate this as the out-of-band IP address for the assigned device" msgstr "" +"Designe esto como la dirección IP fuera de banda para el dispositivo " +"asignado" #: netbox/ipam/forms/bulk_import.py:371 msgid "No device or virtual machine specified; cannot set as primary IP" @@ -9729,10 +9737,13 @@ msgstr "" #: netbox/ipam/forms/bulk_import.py:375 msgid "No device specified; cannot set as out-of-band IP" msgstr "" +"No se especificó ningún dispositivo; no se puede configurar como IP fuera de" +" banda" #: netbox/ipam/forms/bulk_import.py:379 msgid "Cannot set out-of-band IP for virtual machines" msgstr "" +"No se puede configurar la IP fuera de banda para las máquinas virtuales" #: netbox/ipam/forms/bulk_import.py:383 msgid "No interface specified; cannot set as primary IP" @@ -9742,6 +9753,8 @@ msgstr "" #: netbox/ipam/forms/bulk_import.py:387 msgid "No interface specified; cannot set as out-of-band IP" msgstr "" +"No se especificó ninguna interfaz; no se puede configurar como IP fuera de " +"banda" #: netbox/ipam/forms/bulk_import.py:422 msgid "Auth type" @@ -9918,7 +9931,7 @@ msgstr "Haga que esta sea la IP principal del dispositivo/VM" #: netbox/ipam/forms/model_forms.py:314 msgid "Make this the out-of-band IP for the device" -msgstr "" +msgstr "Convierta esta en la IP fuera de banda del dispositivo" #: netbox/ipam/forms/model_forms.py:329 msgid "NAT IP (Inside)" @@ -9931,10 +9944,14 @@ msgstr "Solo se puede asignar una dirección IP a un único objeto." #: netbox/ipam/forms/model_forms.py:398 msgid "Cannot reassign primary IP address for the parent device/VM" msgstr "" +"No se puede reasignar la dirección IP principal para el dispositivo o " +"máquina virtual principal" #: netbox/ipam/forms/model_forms.py:402 msgid "Cannot reassign out-of-Band IP address for the parent device" msgstr "" +"No se puede reasignar la dirección IP fuera de banda para el dispositivo " +"principal" #: netbox/ipam/forms/model_forms.py:412 msgid "" @@ -9948,6 +9965,8 @@ msgid "" "Only IP addresses assigned to a device interface can be designated as the " "out-of-band IP for a device." msgstr "" +"Solo las direcciones IP asignadas a la interfaz de un dispositivo se pueden " +"designar como IP fuera de banda de un dispositivo." #: netbox/ipam/forms/model_forms.py:508 msgid "Virtual IP Address" @@ -10352,11 +10371,15 @@ msgstr "No se puede establecer scope_id sin scope_type." #, python-brace-format msgid "Starting VLAN ID in range ({value}) cannot be less than {minimum}" msgstr "" +"El ID de VLAN inicial está dentro del rango ({value}) no puede ser inferior " +"a {minimum}" #: netbox/ipam/models/vlans.py:111 #, python-brace-format msgid "Ending VLAN ID in range ({value}) cannot exceed {maximum}" msgstr "" +"El ID de VLAN final está dentro del rango ({value}) no puede superar " +"{maximum}" #: netbox/ipam/models/vlans.py:118 #, python-brace-format @@ -10364,6 +10387,8 @@ msgid "" "Ending VLAN ID in range must be greater than or equal to the starting VLAN " "ID ({range})" msgstr "" +"El ID de VLAN final dentro del rango debe ser mayor o igual que el ID de " +"VLAN inicial ({range})" #: netbox/ipam/models/vlans.py:124 msgid "Ranges cannot overlap." @@ -12739,11 +12764,12 @@ msgstr "Descargar" #: netbox/templates/dcim/device/render_config.html:64 #: netbox/templates/virtualization/virtualmachine/render_config.html:64 msgid "Error rendering template" -msgstr "" +msgstr "Error al renderizar la plantilla" #: netbox/templates/dcim/device/render_config.html:70 msgid "No configuration template has been assigned for this device." msgstr "" +"No se ha asignado ninguna plantilla de configuración para este dispositivo." #: netbox/templates/dcim/device_edit.html:44 msgid "Parent Bay" @@ -13612,7 +13638,7 @@ msgstr "Corre otra vez" #: netbox/templates/extras/script_list.html:133 #, python-format msgid "Could not load scripts from module %(module)s" -msgstr "" +msgstr "No se pudieron cargar los scripts desde el módulo %(module)s" #: netbox/templates/extras/script_list.html:141 msgid "No Scripts Found" @@ -14428,6 +14454,8 @@ msgstr "Agregar disco virtual" #: netbox/templates/virtualization/virtualmachine/render_config.html:70 msgid "No configuration template has been assigned for this virtual machine." msgstr "" +"No se ha asignado ninguna plantilla de configuración para esta máquina " +"virtual." #: netbox/templates/vpn/ikepolicy.html:10 #: netbox/templates/vpn/ipsecprofile.html:33 netbox/vpn/tables/crypto.py:166 @@ -15515,12 +15543,12 @@ msgstr "Memoria (MB)" #: netbox/virtualization/forms/bulk_edit.py:174 msgid "Disk (MB)" -msgstr "" +msgstr "Disco (MB)" #: netbox/virtualization/forms/bulk_edit.py:334 #: netbox/virtualization/forms/filtersets.py:251 msgid "Size (MB)" -msgstr "" +msgstr "Tamaño (MB)" #: netbox/virtualization/forms/bulk_import.py:44 msgid "Type of cluster" @@ -15735,19 +15763,19 @@ msgstr "GRIS" #: netbox/vpn/choices.py:39 msgid "WireGuard" -msgstr "" +msgstr "WireGuard" #: netbox/vpn/choices.py:40 msgid "OpenVPN" -msgstr "" +msgstr "OpenVPN" #: netbox/vpn/choices.py:41 msgid "L2TP" -msgstr "" +msgstr "L2TP" #: netbox/vpn/choices.py:42 msgid "PPTP" -msgstr "" +msgstr "PPTP" #: netbox/vpn/choices.py:64 msgid "Hub" diff --git a/netbox/translations/it/LC_MESSAGES/django.mo b/netbox/translations/it/LC_MESSAGES/django.mo index 01dc8e853d56c94c280475ccbde0ba7dcae6a248..4d0136d1a2ef1a420b051f6250f6484365f01259 100644 GIT binary patch delta 69055 zcmXWkcfi%tAHebZJZZ|PB<-iY_uf;fvFNcMH!K@ zB9##d{oe0;KEHon=bZ2Pp7S~L-sdU(-d%d+N3R{3-B$Xrg&F==v1BGw34b4#$<#VJ zlX>qAOEZ~q`FWW-I37#j_1Fw=!;bhC_QOJj@-pLbAWpy)SPaV@mY1oG1xOc}-dGfe z;gOk4HZwXNOu=J$FcS~Qn~^v&cj5iG952B^h4V7KaXr?#or?3YeS3Efyo0DG}Zp04ciR-<(Du%X^7GO5=AftH)@&3kMFV&Wo!U3i2Hy|A zL|@#E?umb*ym{#qSaS@@(ch60XHUERXj`{#CT%dbGn& z(ZGH}13icaR`QrM; z*P)x~Ikdr7(Lmlqr}_)D;qTD^{zlh6b8HHWz6*^NrBY!d)*hK7#m!MbtE9lH_!R!JOJ4r0Xi;m07 z9D~P|PYpE+yP*vY56{B8$zO_<^SB2pZm4qA=O7WVH2Ez9q|Nw z68(_+6G!35s+@n<?dtCrp?hn|X>=rL>+`4iDAcnsR^ zEOaU7qMI~(4+-z;Rp?TDjz(6xdfJ3_!glEK?1y$R0UhBiG{AY`;wXOvy(wQrcl!qP z{V&h~>_^_uX7X#KPpQ&qgKg1~o`AkMI-H0u$+?&t3Fbaj&=Ea=&d3Ys`|ro|?NR5?bw$laOl)can z2cXA!Ji0{ZMfn^o>iJ(pq8{EGzJu=a-_QpC#Ig7vy17oRop$@g@N6{j^U#21qV=vp z1HKvCoUEgoWy)j!T8dVHciP4acIJ^xPJJF7oqHDGlozh+C+Wv+%crYwdKRqvnwo?HeST$^p z4X_iQiVbiH`W%xZ^0(yzd*k~lx&=r8Hw5MB)p54pb>4w0a&(4>fj9YYxN!27(c=~cqpvX zG~F8m(UD$*2KEv6VIe?`~+u;%Hrq%`{3Q6HUwGtl>M!&aXEM@ZQ5HngK(&=KrME7ot3 z0_=?L>OSa528N^2z$T&XoQGaeSH<%MXh8R(Gw}qv#4lkv&;QpX#^GOh299i*?(Em_ z6!Kr9Q`xRn3a~pmV|~Nn=&m0Z&u3#(@;6{ZdG|R1Xh7GY-wzg{4L*gww;!$l4;omJwrQryp!teupmou9T1WZuZ8`rw7!no6 zp(B}wj`T|Oh1=1F9z;j*3_2rg(D%2X1Njc!LwnG`{zNz5zfs<%T`KQ_ZpP!YB!-Z< z0R2X?4sD=D`_y0q^a5&$Zl2@OfCi%<*W)lZ^-=y9IukF2tIc@D#4}HIAr_@2Eun}6XGdeT9qI?jR@cfS_ z;hIhjFGr_(KDx$B(6xUW4eZq@UypY9RXqP44K%NFs#gwuzZUwnyB%781ls--%zge} zM8XcT=*Z?_uH*1&bmVK$05*o(qkIqg{(s@&T~fW{(DK@mZxMD22V&MK9z(*&&Ou+e zIw~wcXJ#oH&@<>Re+%8!AEHxQyla~BGU!y-L<4Pzw$~or8@bdv!dd9o@Mq8&*nqyj zBTK^XV*4<6lVLvjf6%Eu6wizGNckheW6{8>qVF|E18y01Ku6vkU84SIpeKc=qwQy> zlQ4jpXvNE-!nNp#Z;kxYc)lF%`1vSbi?zvbK)*5l73Ix(rajRK-D3l=IgZC>cpFyq z{J%xQsrV+`iw5)`8gZfH(@2gAD_}3mYhg>AihhAvhJMA`hR#T(UTLpXM+2^pp00LL z-UpBN{0}B!0H@^&I0aah{FUgYS%&V`7toP@h_2y&^d>9TJJlEmfq;c@+pzO z482irL1*MmY(oE;%_Iz<@CoS`kY&(FXQ7*B9y)c8qiePekH_!PW7w!qTKkFUd(+TU zayc5{HRyNDMd)UH4h!%n%$g|KH%)P)uq`@eJBv=w=*^1~Lh4@RE3bT|B=HZEqQN z#pUsQH_jk`0Gr^H6H|M4oyhrjtsbGk09Im6T!%Gqca)dvpE|CLu3claezz#^kG6Aa zJUG<5Skg6@H*aUi~qweYAx>6o=b zJ3J2!U=}*U8_@R_p_}v}w8Nj#8Qq5lUUqQq=Z$Qp5(yhR8Es%ZaxrA4p^@JZT&4OO~;e)QS6I(Bhnh5h+bqPFn433?JvWu9Y0S( zUqff$EqoC_#AbNiN$F?5m(d1(46B@+zJv}%r}hTyif?0gEH*N|*ALGpe+jxYd(d`z zjpF?Ki-Su?r4cQ_0`hmDQ}hxV=?3&TeTN2m2;B=sPf5>@MDK+f=<#eB<-O67k4Bf^ zT=XWq8FNc`3g_Q*{2~RqCLVkg`Ond*{yy@%(PMJ}4XDuQWF<7vR%n2I(Ex{_OEeO_ zn$JQ5of-M-vm|`+PIT>`jQmRU#SQ3-Ux$0qkz~fig@nG>7_HwC8)83ngfr2BT^0G8 z(e@UjGn0LcgiEjrt@tT=Ja(Xa;fE;ShmPo9bOeW;nwF?6I^ss?OtnJmbwJH~?A(fY&kWCM2Qs4_s(GFWhh0f@19~6#9r}|uU3a>yrxE-B| zN6-M?z})dgm+EVD&3}*QrO!;Ku6mY)4YWgF?1z5XoPvG|UWkrt0XhSBqW8rEXuvO_ zBYO?4_bwXP1~ky`(f0p9M_zPd@)$JWY&8-#)E=G6E|Kqpwa5=Z8$KUBc9)`i;z`WM zXV8&7hfQ%KdO;m_RtlgR+Hn(f039RWJ3Y^4hLLatr^SP5XvIs>8My{?QykA9iSp;r z5w1nw--y2V724r0bSeKt2bP(Xo|iz|EsG^R|FuZiKy&nk&gcuh(Gd@h@;T^C-H5L3 z0<@!LXdq8U`O0uT+R)+M{dSAMNP0a0dF~6==f? zqWr!nUlIA$Xh$Do9sCLlu;`T3Ze8@}icXmO{oiO3Eh(6Uc5n|ml~1GJXkNkExF1_# z<*DiT4Mq3H&G-P`j&|JP>~!8wK-(LDejgZz*1tc>A3K}#@6@l12kX!ge~6B78`|J6 z=!_ghXX@x_DPIMx-vX`QJsg5=!qd>>n?>K7kJi5jUFs*MasG|yc?ulatLVso!`Ap; zapf}p^iRjHX2EBSuM+2S`&P4ap)oA^j!=>oVtjI>eYV_Q0LcjU!!p4|? zPAYGPxlM`vC?AYX@NTr@_tB0wqxHT)NBT3`@j-N^OU_6hhxV7PNunu<_UPuDg3iF@ z=*@LK8tL8Wls$#+l^4U^XhYS{O+Puc#cJfoU_H!Y0X~Wi@Llxhfc=>J`M<(>>F@Ql zMmO1ta0}YdAuPaZ=ckUlV;k}pp}YGjtcjmuUHk{_pwu><&Z(}b!_Cg29 z`5QxGCicWK%K)iCRWMkH*Y4|+^SpaGnL?uGNh%hAntJ-X{}K~KXXtdC3ZReT!_z z32#Eb89j~8=ti84l`rG`yLpygmY2BzpT}eJxCt*$A2R-W&VY`OkLjUkKx5GvnHg)ALSrV9%mA-A7Tr2c6LpSEP^MDpye82wG9l3frS2JO`cXnP>plp*P{}=%?QX z^hVo^E%3N2^D-;(M05#@&rVBI5e>K&+D}vTd8^3x&XRB{PedyYL6>3-dTuA97ty8Y zi_f6PbPZbnQ}hD+1`X^-^qlWT13!S)FM3t_l3M}oZ!B6bJAs5R&Oq1f0<_`FBY!;_ z&;oR`-5WlNHt@fA{(6+ZhwhzE&;Y(gFSOs#Ko6gj?uF7=K>wMJBy4C58rdXt38tfg zTolh|NB$;sD(^&(**%f}Al!)F{aeuY|3H^Ab9EZP(da-cU|Y|B4H9-Z8V%qK^lS2D ztcr8+4153!u=q9UoYzM;*-*5>>F9`Oq8(m?25@`03>%VPj&8!Oc!KADHwiaU>uXbl zlhG+WA6=TO(5br?4fH0oqubF_@IaKmgf7(^X#Ee+z&4`;+lKvdCpzQJujBli=uDy} z_C-6Kj;{52;bl>NEjsmc(M>fU-K6(p1AG>}*}lg5SnB#T10B&B=^dVg20HP2&cD0* zd}q{fo{}ksFd_(FSWqz8TtKSG3(h;ThOo|*^HoAEX5ig`DscDthioPZ6n zKi2d7UlJ7_K&SXIbOg_#fviL~*}8bXHOhCQf$a_di}I2;ryx78Y?2bS`3u;8Z!$Qu#Q$CmiH_rrgZL(pFqX8X28z^#n>ZnTC z2o0zsTJJ=3Gmk_EG!|XD)6x6m0`wlZ{C3X2Yj+z3ZkBt(N6}6AEINW$FdtXN^VR4` zKS0;|OSFSuuo`9-rQe8F$K%P4Me99?UGaHrhJR*BI92uTNNd;;U6L8--F_b$=?iFw z@1slg1-e&uq4kcqGtEGCw4>%|{T|^EbTf`eXK*oEFZ&D$J6Mf=+HFMxI)IM6G|`rc(|d)J{$bR*JFHnW(7YyCtj$h?6@xCtHU&*(1y z8(pfJccoq282t^#Ol*v|pdGJ5m+n3E{f%hA+rzzRy+gU@oWH}Dq=NEcEi}Sr=!>1h z{%9bh(a-&B(1z|qkL8o-(rrWEJL>M#P8BrY06i`3(c|77i+TPpj|bPHk>89qd^@_C z?!z;24W5V%?nxcZ#CGH##nW*Ix+i+yn||_{j86HZ=uA9`2Cx#H$u*dD6MR6zHUA3T z1HYmjmtLB_@w7zOa5(nBap41Kz(1gya1VOC4qKK+egyiw0(u;)MZOL?z{bls{|3-L z3i^d7p@EzpUWEp5e>{IOd>I|lTWCigp!GJR_rcd_Kzq><9|#NGm+pll?#rerDisCC zqH9$Fjj&$iTZKK*4u+yLb}G7gXP_Ni9nWt@16myUW#|$tN8fuHZU6l&38!vrRQLrQ z`9D|}E8U+)ay)uN4o5fNbaaX4qQ8E70&C!UY>0dCJgoFUT8jDT1$8$X@KcyO|Eo!O z{x^lY(7QbIVA@<2(WxAc208)#Mso>v!&@T15xbDzg*~zUL&@pr$e#`0L}%b5q`hor z2MMR*FSOyq9!}@FV%QQ5s6W=mv(V#tGrIOm(Dxq*pGG@e8PDHE1OGVuKKv(VmT#$# zq)k#Ay_1`uQ$IfPH(+NQM5pW^I`t(VO?#&?x@TITfpkar$N+4PBe4_Ci|6m6$MO>_ zMgN)4NjQ?-=x+T3ZQwt2>We>?8ZM8G$=AYGI1F3h4e0TD4c!ZCBL5BA-VbQt`_LKA ze>??T9kZTO+^sqn?{jqu%YBYMof2zQ_X?~3Pp&^_~4lvjNs zor0R^OtpT3^Y5`3MuCx^iAHt~I;AtwrMMgo?0WRHEI>EmBj}!a4hQ4+XglqmOjF(i zoylQnpcBz{r=k6xpCw@j*Pxr{7PR5J(W!kb%3qA~HE8_}QT_$m&<~OS8-2gXQz_6g zXgl@L_S>L)p$FPdb{GlQZY+8+Oh+qTg+_iedhy(ccC-?${{gzT+rr)9Kk@wVr&Bu> z(F?6kxh>Eon}XIqFY>dn z7x_8pjI2iouqE=la(T|*pCr5>ia(PYsDd_FCu|bsZP2ytiq249bSg*0^NHa(=zuOp zXX;wC-Xb)BN6-PhY`N$Eop|t>1>}E5H`%}F%~$4ssk|{--USVKI2zDobcE+e{z`O; z=b{}gz}~nF-F!dB^F5gR`F}r&T0F>qHoaIEZLkT>!H(#+-#5@HUV~mF@1w_eCwhE~ zJ(r%BL^oGi^f(qoz7`r#Q?#8f&vE{(Z~_I6q(3^fC!r%aJ)DeA;QT|ty7kVlE-tdU9CtB}P^!=OAO`5%vglqjUIs?yQ0j`PiZ_%~=6%A-V zS}*f*8tKvKQXPv%Z0(Qjf(fV)UE%+JE#Hp{wOrZh)g|+EFbBKf^s{LAgD4;Vk z3~gvUI{2VehylHX5_C6=c6ON1Kqq2q3u162J#%{PRSc_{@h7HL-j5fRp4Qv}4@Q>j>w8I1Fu`awi?U`fI@`kIk z=|S6g&?g>@MSqDr1&#DNbR;*Sr{Pv~b1p&~ekgnat+x){#P6dWeT@$6XLMi(B40GS zCRI2F-CPA>KXhalqEmbY+R=Qpfo15DJQexP=nU*Y+xZ0zy!_f!UNx+bURbTrJ(e9n z!U%_>H`Dm=GIW>UiH>9)Ho(u(AJ2=vm8QBX+E5)du*T@jbc}qza3ngQiD-K>Qa+oR zL&64bLO0_=bZzfJN3tI4;C}RrNR_u!y|(Ck-LM~?fal?D=*Miab?H=8z+U9rqce0R zcE@>``}@Bi<`S$?xDSmq|DANMOQQLXXotPfk@gQyLDzN?y7?}Q{N-qebI}psjxOP& zXn-%9_x!&{!jXR&eus9n#|pSV%8S06IzAem;wtFUH9|LQJFJZ(&`o$5+Rkh=;Oo)) zi^BUc_uv0L6&0S32W!HQ&<4IhN4Nuz$GzxCTdz;YsWbX~7~1jp$e)SM+<9onm!a)l zAI@LT`FDyIQK0ul#U~>F61w}>pi{Ofo_~kV%&%w%h2Bd69D&}X70}(^1P!QFJa3QI z?;YiX-{br{k`WXb*{Nux6VQ%lpbcG#25>D}|4#H*FUznievYSOrT5cc!Mpf}CEiZ)z zP##agx@f&Q=+w_e17C>L&t~o?VF!<=g3Kzk;yN_)kI@Eppq~-Duo?b`u5Hr|>0W4s zP00_$26zSfd^y_Q3bdV9(9`lJHuCfTD-uS2#K);ZSv0~*=uFf{@BG&2jI>7s>52wE zES^t7H}Tmx7-ym#zKgE;26PW?i~L^9{r>;oC@8rxT@>Zf$Qy>u(6w)k2G#|8Vt;gG z3(x^9K|6c^4g7Jm{tIXTYtaBcMhCDHvsU;kDiqn2DwIJh)Iy)P!&=xoJR9xsRy2US z&<-C&>#sm>yw@ZDF}jprqwVgCeBsTUe;*vXIaR2GM%oq~@$r!#fOW~Ag3inww8QIh zEiOd`SoV|gQ9L;h`SjsreTGj=8RBmWlqVOM$!=ii1KZ^_Hd#glL`?m)kIT)s6u ze+lj28}!@kF`uOmss7lQ{3SRUA4QMXF`wsU7UBqe7=K3V-S$QL-S2AjE8C$g34cJS z`emxn8QYLQ8x8D1^qhWx)$u=cmsi`Co)1CumttpJjyK^?cr{+~RbFNsX1-4K#-o8O zz?PVOgM?GGAHA{aZBJi9hha7Hmt$94igvIadtkvgsr(GI-h)^J-$n!d37xScccj1b z-4(632v5Y9aJuKe$jfpV{aYyaWy8WxP6%&4sPWpSv%8{y&P-$bW?0vCFS%Pt8VW=4EsV|H144 z5?z1G%S^(X(PMQ0J!XY}Pv^Ttcno^(t6*WQjox?-@hEH)`QGt-2o|FJVQoQY;>U0wI%5aWfd31R+@JPT z6*SPX;aTVs&d8EzLE?Ti;!n{j-4Xd;BL6o!m4*LId!RU)uM;*vN7Mv|Vmq9UH)13F z7wchzztSEUj=A%{h{U-(cn_`E-EZ$wA2(lO?p1MC+49`a|;^KUFc?i7<1qMpC@4eZ=)4Ap&vfmtbpbJ%gY?V`e?^B z52Yz=gf`d$y*IkxZDD2~9f=oCL6 z&)1`yXFIz2zDLjZ0d&cV=BEITLZ4T~GT01#empv${^8*KY$_N|ff0>FM|2uG15?ok zW}qXw8eNk4;j-`yQ+@9!$o`#WF8_&y8#;4QLPgUa`XYxjmOXnuHBhMk_YL zTG$=y<5}qDx)p2SW9aVw0Nu3Tp-b=^dXwfAN$nhiE@eHm{Z{DA9Uu7-NPpSPnI!7+ z;8L`s2hd1gK|9)nHvBUh(4nw?(fr(}-f*;odFTL^pzW-{rnnBh*bbnZuTHV_yfqf} z^S^&C!LCOG8G}~52JLuZls|%Qo(*V6o6)7&h1M%kJU{pGTp69>4(RuR9+97o&B@<@ z4)9gX{rUeVB)oXO3ctew^1IO~JhDW7=0dE1@8T`^DULooKjY_n%aUpHU4(A7htW;= z3HtsQk^cdmkzddyt9nF!ChI0?M8e(Q23^yx=!p8GyMJ8d&qrUpHe86#)cxq%J`?4u z!wp!0@~^NJ{*8X^ZhB;D=fop9|BieV1x7j^ow~EpV{!pHlAFw{zQLUc2Kauny^hW@6&^PP8e%9lg~Dud2MRWz{X=!~^T z>-R(h7#PooqBC*|`u=2eW-mkskVW6W5v{k#0yo1$=neQf+Tmt&>VH6QvVYJiKC)EY zY+*BW_xC_M7>af{9_?r{I>7Uz{8F@?Ip|Vn7m{#_?+YJ6UwjfB;fv@;-1UbOyy=m3kBN$(wjmY2oSp8qN&9C0%=;tuG@dZ7*XN2hpnI2E13 zS&_dn@^_;%^CTL`8|adLfL=&D(SaO92U`3Xu6p{d-qYYn) zzIYqj&?9Jo&!Zi#jq;Dt5q^!n|05dkKD1tb*|bDQVb;x8hlCAwMLQmVRvd-S%tUl% zW}qKFv!eXUD4!eo+tK%zqVF${=PyP18ua~-(7-mA<@_7jmlPPlFKGTBw4o!8O-oT8 z4WIy>fd=SIbwTS53&)`yPmTP=k-r-4Z~@xRVsu~+9?SW63ZJ6DDSHhKW@T$-t}Se<-rbO3$O_lHFORJ5as=s?d#M?NdeUPHnun~%PDHyX&J=u|(8 zj$mCp{}QeLBiitOwBvu!_X?L!Gj}w)*5%OhN?{%J{pQG0XER+$c(DwM2dANdOh+TV zG`u>>Zw~K5PsPJ%pf95xeSikE6&>+6@q8aTkir$x?yrEydH$P|a7z239i9?SKqH+V z&O!sb9$ou|;r(cbE6~q^m(jiR8ae}O(e~d(-}?-$_k+(p|38y(D)*rs{E2p4sA3A} zXtaY0Xu~za`e^-TXh)sUdfm~1^o#uP$e$XXg|>e#=6?T|C1Hd&#)G@jNFPI|@Wsf# zjn>*S4!`fLj$XY4zNBtfTrmCZ7Om8UAyiSxHcou2Bw4;p&eX> z?*92`KzD=>qa8etHuwr!|1ETHY((4t4js_nVX?}oontF={(Yeq1x{J>c+e3Iq#xSw zNs&J-^3%eL(FZ8v)M)~pR0EVFNk48H>8x3S8`u-gBL+KXuBFa8Y!l`);t@s{VaSPhOx9G_B zqDypG)l{!Mx)*ApOVSEm+n#7({m^!Xh2x`q8ahK4ApvJI*?4e$xBwl&UFb-cNB*_Q ze~6BBJ36I5MSd^(-rwkZhZm%JmC=FJiG1_Ocf`V;|K22QsDD%#f^MGC;dFEcW}^+= zj*fI0I+91C{AqOLub}O%L6`O&^!*Rf8QFo(_+Im#|No-k@M>cF;BR>YMKOxGeM)@UZz_Zbrxe=Y2d(c3i#@wI(y%ZHzVQ!bAFMfjViS3x%r1AVW zbP4{7e17%xyeK-tBhbJrpn=zo=WU|A6FQK7)j9uG97=&B7>_n^R#dzo%CADN%p2nQ zO=w_uMgCzl@MqD$UP9Yljkdc1ZFftQe~Sk2TlH)j=|Ku?ut<&6P-(QGa_Gpbp}$h8 zgEm+{%9};L4SG5{M}8>!{wTELGthu$pnEHe?ui8^jN~D71W%$J{ttcOCG@<$9nZf+ z8~z4e)1T4$|AvKXrt;!wc?Gon0`$1nMbCX(^r!3WKoUkc5$*7NwBl^Eg9T^<_lJ+8 zo9BP%Osqs_ZZ$dsAEF)aMBCkkj`&Y>#3gE_eySktXEP0>pcA@T`bB7FUcXNIv3>*&raX%ya0BN4`@gz%^K*aXG9G*L z;7;s{+tFXeRIiupf;GsG#yWTf`UeY-;6&VsUGc>F`I*!3Mr@9I!x|0JUK@c9U_5sB z{NF{QEp9_2EY~pov^ojx@OJb!m@lIv+=`3xxQZL4K$bL4KUS|n8~z$wV}&O9>HqNn zr;>jN&%rWH)6&hsY+VZGl5lOFMK{+vbS*!Q^6$}2a}eDVrJJStHSi7cZSV>_fMf8I z=J~n5C$I(GJ5^ewUsTjaXJ!(fjPJGJ{P!hMt7U%f&t%TQQ^{||8?kMxe0~|p=Q&=F zm0IWL{w(OB@K@|kdFM9yxj)&s5>Fz(8ZX3(ZPTw{7NC1*1KMAycB$UzcAWqI6g*2o zPt0$hBJPdD$PdJh_y9V!+rx?-@^inU9gbZopO2kzLzExYF)cw~Y()8$cmh6!?yB%+66Nt)G{R+Q$Nxj0zlAQrm*|upLhBvVGyS5n zHri3|a146)pN9_Y3e0U@Y)F1F`u^KJIsdIlY^A`+jygU)sDpjTw+pXAkKz01uT)F) zO2?`XdI~N=1Go}hvPI}-dmNpSmm|L!3&`(8>lN;uO&`1Ed#8q~gmv*ODm0J$UFcLl zh;FX`p~v$>bflYcD1L*^T@yih(u zKZHI6ghJunqaC=u$j@kKmK&eR9&ETEqi$$}gV4QjCi>oaXuWx8 z`-{=NvmD(M>#&jM|8o+Kp!l%VPz9_@zA3sVMxsk_DH_-+w8PKPhW4U+q0sPj&a0pu zc0lim{%D|M(0-<(^)JKRzyEVb6g-Gd(JFL`-$k#=uh5PTACbzdpy#;-TE8Q@n|ood zBXp!w(V4g|T!z+rIi7DA!TC3m-BF>~N$G`ZXvOyEZXJw=;mJ`x278e|AE)Ch=%#9L za@qrJ&_Md30gOW1IS<{Gm!LB^`()0)BfEnFH_7AZ3#-u=zQDG)1M6d@ktvYg=x#m{ z&%hz*TEBpHuoeyYee`4aV|402K{w_1;jdW|CsOb)8d2X-X==xzYc~mf@nXzf7-+-G z&;TC70k|Cd;6e1g<4;NL4M%5q3c7c$K?7Wh9_Q>MBs@0j!Y|N{_M$UWbacvBKsQx0 zw7ds8;t}B)IEehY*b-Nxd+4w5h%xEPu8t095HgT#W;_Wu(V1xE=b%%41$x&%jz+u- z9r>^5SFJzMKw6!ej@=39`@_+|CZK!ZJT&mxXgjx|{Vl<6e*Qm1!p-ypcEBcM(*-mI ztCL@iC*yb68oP|keRIiNh|S4AhMtly@eC|JK7A>jhAzztY=Qita_&D!Xo=^MeG7B{ z|3B?dPv`qi^d{VfW3l=fX-a3K`HgrQwwRFC`gU~he2rbO(V6K=K0CYz2U7lFSao6w zY&tpv&tTTwxRQj&=k0JKy8FLEPs4ZU)E+{Y=BTsM47Eq!Ux3!T8$I{WqXB)4wo`gi z+6(2w#^|Q(F^TivpTwyY`1!s(9{h-wA2vC4JOpj%G<0)KLO1C>XaLWlYr6_P#_P~E z{~Fx`zoMHiZ%PWJH2S>Glx*7l?I^H9e{?ULiZ$>-oQ3b;wb*NFTFVb`D*61gQ^(WM z053u}-{t6M!94UTzcZe{iS5b1gU--l*=gy#_YC`^5s$#!E{^I*O1Q&{Yr6j%Xz(bPjbY=Q>ZA?%9= zG!kp#R2+i0pzrNOH`^|BK)<7(9r-hIGsM6DM#2Vph7! z^gcSpUtm@IEy~MWltx+|4WuRd1*QvHZ#=rUu0)sW&WkwzZiXi*&==ytDs;1LMqk(- z9*FW%Gt-4r8QoN^!=7lvL&AwsJ`25|ZixK-@qEQh&cDa%tti-q?uA2WKt(T39UP5r zx+-WxEyMoklAMWd#)~6AH@pX}zXDz2chLYpN9*s+Mk4=`wD!lK4c0|R-T_^jq38=| zqYY%yCAbak;BhqIHP{#5M`!T3OH+F_(aqNeZKoR=PcsF{E zH=^~nq8)BSJNOgrxX`S0tV*ICl|i3ZMsLD;QQjI2yeqPovYC^j;7qjQW$8iY2DGC) zYYG7IvGR+ItM0v6Zvq{I8|J zi{%4!2EIf){1F{t-c@PS9D}vVH$ZQ)A?R;L&c=p#0~X*5==)pZ`CfEy95E-g(-7;C z?=godakrmML2tYfy|Ff9AN&&ypxf0<6%Ip>-zKzyAJLJPxhCz2lkg<+E6TBDQEFYp%{Rui{+tHcYh0fFgw4uV+C67bP8-#7J zC;1-e9=a~d7h>-GFC$?C&!B6$Hr$AgbUXTMwf*RnA9H=O33~kchU3uFb7AD?qsQ-| z@MW}}5AbySIpwqb+idxn*%VAer+go}b{*!XH5-ZsaxQuyU5gFyRWyJf(ZCL&d!fR- z)Nvd1{^*Bxd7lkj*vheo~$N8uNdZ*xnEybC&& z{m^=o&<1CqfnABM@jC2+uVYs{gl_7t3-WXSkkL74{ZALf`QJuCCknntBd>L9n!3j5 zrtE?4-ofbcITh>TS?E;Wg0*ltI&&YR9ejz6a3^-f(zm7KITZb7_4sX^|28Dvroi2M z2wjTu3)7T!Mmrpa9=lV~dS{2%VlVQ`(5w0fbO5{2hz|vvsh%=f4RFFPuK%cr@aRu{Pd-uK5bAf$Jl`2d!89-V{Iuw0=|c8_r4Sh^K|K z(HXoQUHkXd^S?C;zC|0{hh8lCOH;>H(HGjGo9uXWq4hYnzF0FR{dY&jCHX_Y9b88$#)XpRQhIXn>!a1=Tt zGtkd~OT)S7H=?`HnfnS2U>D{#H@YPGkLKFRW{Q%qqbleK>!$~qc2PbE4RAC%Bd4Lq zbqYF?tI#Q4h@OV0(5YRCo}vv{6@S6Hc;sX8X^6S=-=9QF9!x~f_Y(9NtwI~vhEC-{ ztc{f)Pan5E(WyTN9l%U9kU40;_n-kjfCm0N`o-gQG{A4v^ZzFaZ@iMr(+gG64x6D< zH58rVlhLU>3q5wz(T1Ny@AwzcJyH0H^n*%qG~klxac&X$iRjYYgt@=}cP9y_?&0v+ z@Qv^TbPs$U`5)1d?MKgdu_x2}mC!)zMZR6wD;ye*L)$z1NzT8COXI=yXv4Qh{*kEo zT(~;ifZh*Zp)*kasWem7(e~<~d#P3Adxk@zd|Wu)AB}wB@+g>xj_5A*L**&-`C4>| zHll0yU6db0J1YKk3j8?CZDMq{w~O+=Q9e4Hg3Wn;NtQ%S5>KEne2i|s9cV*&E7D)3 zI2sLL1X?}`hu};s!1d_W`!n{#de5XKxd2y@pN+QP<9}(!hM@z=jv;X}iF4z@dUWKQ z(2?&#cllrF?#?`$8mfTa0}aq!-5q^C0Sho2`K4&bFQe_QM>pkmbN+^qa3o{U z&38V!2d;_o#pu<%0$rN-u`T`-&uhMr0_}h!Der;3@osbmzeNN44ZSBaFQyqOiKRXN zl}T8!Y1kS45IGV1;6yaQ73d7Ci~L4(q`RX0Uu;gk*h}fWcR&N5j((`k#fJC_dg1+m z+4>|Zznp%8IRP7!zXZK9AH}Qi9kgEmSJD+a6YG#)7QTaSzI|cim8qR6Xorij8NQ9K z{Q(?|1+Q}c`;s{K)%5xPD*B+tYiR~9z_H}#V|(0-^=t>{{B!!1~5ZL0q>HYK0^lSBg&b>B*V)oK_%K>jhb!+~$-XBOa@ z*eZ{;LyudNchYHTjc(o((7;BZYdit{L1rHMneZUGr=CLxycz3x{tu9Fq&416FLXn9 z?Ian` z;jhti{{uR8|Dd1adGDtwD~c{nX>>$Yu@yE!kKu%HCb}eZ(SUA8+rJwP{6X~nXEFEr zzlMand@H&K+I^5J_CQ}8f;KcN%EzODoP*xsm!SgN2QJT?X(Qi~0 z(a(yuA94QeUr{vGJY>?7zVd<`A>C+HIYfCly_vKRROfA}-;&B3pyeIW_xoT4fBqj$!pJU)3fEv`^0(q5d=qVW z)Ykab47%CopdBnnPs@8)fPbOwmH#Z&uZwQpZs>qcKm!?sxqts}3<)osiRhG0MPE1< z9r4AHzZRYPo6sq|GoJqs-6L;Aeh=Etzvyu;^m+RAUOOB^{$w12&tvZV7ylw{hNG}I z56WXZ9FInP7div?qk%n(9?MtI^ZYg%*iLj0>_KPX5c=McU#5K3ura#CoxbG!d-sos zg7fiw@;64s{B3ECOQA2+LObY;1~LHccsRP*#$j&ngtwrZ@iBC-tU?3YgdOnPZJd8M zL$$BcCTfX&$@hxpPY%Z8$={8ga7UC^`zHP3@oaSJ z*J2kuF1sVX-J)wVA5X$xus`Y@S5gp-nbm@LYXZUaQlpObM zx?$_1doJ6Bgj3cNtvDv~mxi~YSLqWt7B`?*bhGc$9_WPzGz9(F9)~W`tZ*LM@e(w! zC((htj%?CwW;F@d=pA$|ze2zL?m~}A;qTMtDIHcr%bTKCXeZ3aUT6n>(6t_g-h|V_ ztI=b+1P9!(Dz#6-J@E`h2X5^ROyDhpz2rbZWoE+_6J9 z^C5JGO8=amS4H#9!p`XN?1x!j97V#-Fd3cF>F5;B4CjSQ(SV*sKRn*UmiP&J9~{0r z{VmvX=m@7^C%hVcz8VeuLv*P=-Oc$ok{>8=B!8m$;=iOlaU2?XV>HkXVL!CqDd>BX zu?5aTr~GNO{)gBczrwCqdQYl96n#EnPc}{21r!+Bb?7&j`RGi%ALXB*FKk2C_!q2+ zh4<#?{_UswIEwsobi_sXC6C85$zO$yaTgB8^1r4FY)Y1dBRLlh;7arqT#t5mTlfGv zvS-mBI5whtVLw{`*x%B!f2QXx&{Huw^0#0!@-L&u{AYX`8~(+B=s)u%38!u^ z8hQSK6i`Jppyue8$pKg!&p|J!Md*9qq8H4c=s-&To&Hd&1{&~W9ErE$c-)Qdk%0#} z|BiGy38!`ydcHTJ4gQ2~!puKuvmK2F(iHtn7=pF%LUea8LF=za_r&MuIo}l?3`_o- zHecm`IsZmnivsN!4h<)xYjq`hrQU!IadqVPVh{55{!6FhY;=a^q3`_;uSC@n{K?VI8I=*YI9GxvSu52E)*3AXNV?2TRVZnV8^ zSb#gwzz)kRlsgqiWJx$h$DkiJwIbgGJ>SF7DLo$xa1OdO526jf9M4}z&-aJn=V-g% zqa*(-$`8*kl>1dqIdlNo?j)R|5jYIbLC@=2Y=G~f$MG-pc>RNpphTgRFN5Z*MZSLI z+lJlHi>Pln1Z{s5vS;}Fza+eX=A*m$cJyL-1S{c3Xve$Jh7O|j3msM{w=~7k^L-3j zzY1Ev1GdLLI0WaQ^*%*sdOPO+|343ra0F!vrw%Hi4b?;&>W0qHKs3Nf;iXZ2WB4$- zx!wr3pnGT!`XN@hNP53C=Gr&!`R_);4u+z4{Ml$j^U(8uKYHw5kMiwN{ueruV~VEt zo1^&?(Y2k7Zq~~qe`B}|-BZtDwh@W7B;4h{p)>Ix8hO!TDdNg#z6l!G@o2r#I1wkH z$MSu&;lHsvmMEU4yg%ChN$7j0p?hsg@j~hM|Enl)mwtdw`S!@~K|9Vbks3M<-2>Ib z`e=jA!w%?F_e4+0V6@{i(Y2p}wtp!a==CMCX@qxDU`LOmQ}+gXd^V$N{$2PNTCc?6 zg>s(_1!%nvX!(iZX=sNt(SglI16hb}-lb>&4`oU8C-FRbo)0UTMpztOyHeO33()67 zqx@vNgZxCa!ORh9CW@d}_)+MR)IpE$uy}qlIz!{5JUfkqQ*tgE@fGNl-hf^xx1uAw zH}X%T^;d@PqBFJy4ftntqzBQCiX53NgVrkuTPCxa6G)8Z!D#e_mFSeelPY9BkNh6= z(=qR;Lg`<_LO-5w!HaP@cEs987s`Fyo{k0N7or1s9v#@5=R_5A$*frJs4E|rc? zW%NU(19}l5&+I!%33^!?W82)m&(HXIG`%*bCEF2KH&-;cdL|G$v% zoVPBMUL1n%-qRyL6P=Oku_oSy&eSS&?cYZO*obbnZBf1tJuQEt^$(#-RPvZYxgSz1 zV%8}ePr{1#pdCMiTksVej<=Of4eUan|A_`v^4N6oR6+A?(E$3QOEm`j;DvZRu0k)m zBIOEYUc`cOod26iY^A^kCLNaoxfE-WzY3kwMQ~rUj?J?!kZZE)AaVhjc6?8;3(Op~*z59EHr(j$1=VD!a z9DCs=^kcVTmDJt{G_cdrz-OTCUyLjr|NaLFkIP(igiFwfpGJ4D$pmPH3tD{PL|?}9Gz@wsx&-*^&sG%dU=oQHOJ7kWw_4tGX*wSp9Q zBXm=CMmrpY&d3;aK-Zw{FGe@#qv$uFuPpcce-{=0KzH?F)zXyJKpSp`p8Fo?^Ruui zUW;zN7qKC(#{&Ed?Vx=1G~xm@u-fQnLko28^uyfW{~bZXDL)Hsa7I*^gRa@l=%!kP zEpQn&$IaLTi`7VhwME-G39Ua4PsYi31+K>29;%tXgq~89^FM+I*HGY^eTl_!@Lc=A-Yuj|Tc>gd!aLCb9zv(`=_p@^ZsN`841R~M`2qCD^o@jucs$u97jm(npg>h&^=b@YK zs;F>tJik54A4Tgu7thy5{ypqQ`4>@MrEY4s7P=&D(T=;JGtdhiNOl+rJ3JMQXmU6s z%4eb-&IxY|A3!gdXVEo%C(6H$^1bMc6|R>ojn=D*2GSbokH7y#!ZqrSb~G$K$ee-h z(kbY(Dh^fOdR8Ix|nk^OrGqrJ`%QHT(hX_)j#TOv5zwMbYvK=#jUTvm1&ZmS4KbI>!Ib{G53Q9b|ya=?f6kNuodWW{REp} znWkx`do<t6hdu2a*=ND-fBgRVPONEWm0Q;dc zJRHa4S!jFjHjDHBF$Iq3N3`Mm=E>6NF0PKA_a>}S)v!|A^r_Yv7m%NVZ{mO03Eya!MtlhU zs@1f8IxSPtfSy73&`zB3|H{q+I;!kh_uU=b-KEjsu7kU~J0a;L4KZRkjk{ap?(U5a zgF6iFgS*4v1KeNrspj8z)_eEeS8MHjyX>pld!MrtLI_~$3Pzpb;5778;6{1>{VEy+ zsVe!n|JJK9Scrg8pcUK(mIW_^4Z&oU4dM=P5!Q1Y`^F&b?MO5PZ7 z8F&Sp4GyTv#U$^4hH6H~gF$&cwtzx>AC$ArR^9k?*$k9M`h(fQtzc8|A}CLFo*Kp< zEJlJ2(9eT;z-%?;Pda?*2Id9Bz>?r}(9xX9aVGMGMV4B|*ZUQ~Ug(p-4q(FCKJFj0 zv4Mlo&w)~)c^%`^^?XoP_#Tu-s@C;!|G$BY!EkindOq&Irgwspm#e;UPlVU!{jY*y zJ%+mAD{v%OwtkMboOSapQFY<*N2m35fv{TnDZVv=^o4VVR#LZv`?|0{xW_csCMs6rK|ffBbHi~}A7rLkk6@Sg>_ zCmg05#>Dg#ltwN7wovyv}_#=%m>P+-x6SLFb0$}-UG^~+ncI?Ry{*UV=GI6h4GhDJy5Yb zC_51b%G(hO_64tk)g4S)bTXdK8KAsIH$izD@^|)e|33dnuqygnP&zNs#aMZDP_EWi zpsaKpDE=v6dT=o)H{~v{Jop*R36|(;99b*SA!irGBojCpl&xC}76Z3{vJ(%$f}pRT z@szg!g{T)OPxow4cIq~m2h7{e&>Mm&(Wio9Uk2s|Pl9q}Z@TgR3sGEu z97bYu3{s#oC=XQ#D4jb%X=E}e1r~y`m21`i2+Y8H{#pGg0}bM=pnOG@88ja1!YG| zfwGY5pgf!n)ZYQ5p2HNb0mDJrnhBt+aI)fbP*yMtl$9=1`vy=N*rNVppsesBC=EOU z`^2KM;?#9v72jz8c29}r4|2>(=!?FhS1g3y&nta01tpAzz3?Q4>KOx@}O*aT~PAdDu#iwqr*V=pZ_N@k&YIFQgACM z35P-Xw0Z-Sdm?qX@fA^VPzpB(Wvin>`4VgtSQ3XLA^X6t?s_kye&b%Bb1*(JcIt~QoY{!F=zYvtIzXb}UI%5%9)PlCg?btG%Ao8-T~HF5 zfwJXY6{8hLfpVeD1?A{gDeePh2QI1p5EPzopzM$%QE#KLFDPdk4$2u#24$;OgYsE# zo9gF4NxTV4V_!gN$kNBabfB!T04PUN9F(`EG$>cF4V3tWAUo+WZPkDqUdZR#-!^4JZ#~4^Vcrzv4(R zzP$fan8?F58~%XRBe6;%ZQ~cnc_7c0%zIDDihdS;=EX3$L-PG^=7oP#W%_7y}C5L{L_~ z9F(Kn>R=*I^J#TF1LYa`49X{oq=Sq*zc48FW}q|>2+9gVK`9gq3gIMBc5ap89#D4T ztm0iz^4^2O^N)jxG~hGXC}0KiqL&8c;p(XNA)uVSQ*jL_PyIf{>P<<VP+qSlpqzCOC~>{jKUUER%IAh9U_Nla;xo0U z9%?+4#TDy-vXD*&I!ry8NWtNt`=J2k%x8mAaGBb7sJSngYMt|U!6%S3>`o@<4vFt9#K3EN+TB)AA@q{UqRWSG{cQA zzYBq)mr$$^`l5FOWyNDaIhy&PJdA6=xbprV(12s0JS;asd0k$C(&-Pyvww;~3;iu;-xY$wnDi3>2c~pfqR) zWktPJ9|FpjP6nls`Jgni8kD>ppv0e5|25Sgg0e%eNAaEu@kb1@<#9(Fj|Bp7e_lY)|%4wR$vRV)cgqg6n;%A0`FNC+rf9jp2H+7}7R z`@eyStY9xF1ZNdrs6F8X?IQP2wB z0)_X-MBaayB%EYCwP_S{fYL}2#WJ95ePz%JHUZ^Jvk1j;>R$;;-cH5+pfqqClsY%T zxZq>Omy>w^97zk))PY>Kg!=|FkUt)M)NDqPoNa| z0!m)|X$B?-71?7`R15gUK1?9aBRvZWl z;WSXlDswH@>5C|BKASnVI+KDhJ0u)iG7UnS&RYf4J~V z*bKJ}=Hm@~_2tl!vJi?imG>5@L&5FXcEOdI{K@iEB2AdLU?kRt_JQvDTz;l>jBf`u#4ULf z81>!C3mhUTwc9!bwZry=#NX7%|G;e;iGRPwbYlf=*@Y$lDm<3>tK|J7M*zk}zsFo2 z?s4*J{1V-Nd96kfC~{Cf5cz{5SD7Xzfq$99|J%tImb&GCVk?O)32|}QiC4sKr@%1g z8L?f_hF!vi3?VN&`I8uzbr)l#X{rBHw|bd&c0-HYS8TyfOk{pdw@nD&Ky;M&E1<}7 zMiF>gD7o9nhe3?X%6kBgD-^9qb7Qf$1s%K9iEaufxdlO$b$e6lD#YiHZ;lsvYOiKe zF`q{xRoRhM6sWC@-^AWb=WVe6178Yuc^9!ZVi9Bim*8liyO5va14+7!F7NIH0%ubA zs1ij$l!CdRHhB!cpB~*m*k$#}$(?L)l2sU9n zsh#hkfpF~C8Q&N`Al;>_#bwG!{3T)wLRyf#RO&nE6*G{S?!?Td@tx#{f#(?sC_0oJ0k)13%aWXXy8v`t`VP`CYQVI#`EV+sP6vA*KiQXXTLFw0|XZ(u?oZ^ z(5I5P7k??5T8}Rnd=6S6Mwt!fXR>bf2T10nZ?~v;jPyJIEovg-8a3hlM zkg$O6Gs-?9Z6QvtglFiyB5@w6!`931@y0`rd@w^kWlzTMk-v%Yh+{he zZuRPt&yc1N#%GPpOLJiq=3h;krqW<{eA9^!C$9^(bK2-U8e2)+-^8CJhABVo z&X4$@zXsQk`vKcPqZYsagXAcbof7FK9qG6iBLrJ3{HY<>;pO*-JR|lRU?|1UK`v5| zxSDXLC-)h}-lL1;2g_i4pt{%&xWE2ll0>(puF;igJ%r`4t%cO4zT_k>rPxeJtFp?k zkclkDK8E3kPvklFRy5#(;|!RP*qn^>*vq4P%Vqifi%&GsNX(EOX$vGI$ zwYk2`J<^SND5M)1x5&!|*BWj3i^i8AI4QfkgP60_i^rlW(3~H0#}^3d5D<DiZHzJ~b}!)Y2#!3vDuAgisbF0ABc>{T^Sip7EWE4Jdq?V;#V^xj}fno39` z*(kn--2V6=6+8vJ+2rH~Lb@Bk>`6LxcR2 zLASKx<0IlKsV>F?@cP2{C)f-WY010{yqUB~_x-aFveJ;Hg5WSsbf&52j63LaND$#4 zLz{kR_v7%z!S@mzOWq6oiJ70pR+P9wH0n?69*y4&=N{rVV!!LPJ88|_|F3XXrn~QK z`&WW8Yr(|?H-zjkz6})kNCA=Z#ALvi5xphzR?J1(LL3d(3wXxjYfbURjMl^i5YwOL zM7}fcDZ7BZvHbl@Q6(1VKHa|Skohw&&WI$T3Be*+DIiiti%wI!*e-d^MgNO&nEd^W zY{c)Qfe>nq0teHiNH;nEc970Nxu7c-M@br32jM9a-=bfJq`#hFJbdX`*?4V2;zjQ0 zcFWu;ACRTQw1W2)zCGk!ho=PfCNdXsY^Ixh7>81<5nbITa3x6tw8JALza!z16xA&} z&%6jR5j2!qiF}E#1jp~_{o(V-pV(Szqir#c!ry_|hen>mbPOZkV{}U$Eh17jp3&s$d`b&$y$GI)ZIiCvMWMKiUoyRs>hsf`J2|^d#OoINMB=b#VUR>cGAG#_#R*zM1FM&++x)t zU(vhJuuWGShW(cE)PkqC#vKJ6V<5Usa2*ZqhQ1Je0)$oETf`?Hk_%x^#-D70iF-@Y zn%J6R^GGD|zZ1{DEjC@H@wCeKmDnffBHbu>6K;=`bN~OVXdmggG|pO(mW61L61OGU ziY*Ic5cB-RR;0)?a2)y?VzV=9Qmi4mNCAqSXP%ch`5uBuxGv-nJb!3o*=b}$JkGx< z#dqQ;3{iv@ZiFr}8sB=7tI^yJ?R*8kr#jEC@e|Q~7$xBNgZN(L#?yxU6thvdAoKqC zE^!PZ%jEq(4dH7N)04Oak|DZXGc<9UcDxl|5%o#(b8RvOx$THaLNj5^r_*$MFda=d z#om&fxy(h9VNXt80`!IOJ8BW|CjkX8egu0EG#bYtNJMfoP7pi;JsZjO86rIyr&&b? zx5h<7b4^)*FSeS*hr^YNc^T#_@O{u`e>z&$YC3`=4uvOCs0i~V zBxVF}K(ZTK14!~hx`6l%#JR8)Vu*Yrt~DG981slL1L<4l+lfy^>^vPK2N^^Bv$ylJ8=>OvCFK{fHHLrum5= z4nrTQdI(L31l#4i&vMnU|0 z(KCVbw2|Dp$^!6B$CePzNsOAriFBdCt>Aa!@+IW_*D|R~U}`QGk;9N>L7%G~=BLml zhMk?dM)Cog5t#@6j_r5icN71e0s{<}sQ|t&*#DvM6>QhwstP_N<|p&@#EX2Aum3ti z@|h;`ko1#)SY1Id#pK(j{v;&8R*n_5CsyPG4NV|^BPbHdSf#$S6kbMrGie&WGx+4Y zog$s#e8E^xuE;fc|3&0)GvbiAkB&>yT?Op%*pVRJg%yzRg|M|2c|q)PMmGGpv9;DX zANBv#^DjiPSoKMrB+@X={Z5@s%pDo{unn7h*VE2ugwq1?B0BF134d2)Iu3yyqI394 z(by_-Y|I0hpQYIc;d5quZ}0+8=|ZELcuJMJ-~JaqE(QKRM+@%hH838u|DL?CN{46;*sl-e#~!?`^^3O zw+R}Ba+ai05D!IP!m4|qd!!JP7`8T@HWE(UcSs5|G77*vD$WpnoFp zFt$7B$!Xw|?hIzPtb(*3zSI;Gsfy!}#+dO%X;Uqj4`V(LUm$UQa{q57crBzSNG^>d z89^ex5Ej(LYQ&7B>ptlJ7;e)*Z11scW+YWx8FD*g52WdpMQg4l(kph#;HrqYy0KGK~0g+fZmJW^a^bCX|@_|3%pt_5U6Ycu9(%sFkq zlRK6sMJ~$w{|16LblO7;oFM@TQ~f3^jSLz|6uw0ubdW+C1EVim5|SeBua}3=|XJHbt^>=BH3GNKz>zM zxtV!oxQ5ekBy*7-)cC`zp(yOnh(9my|62-;(eB$)s6EajU^qAoUndH8Go5hQK35c6!jl9Cvmu6!b7ql4*_WaC`!{?YvVq$e% zSDdUQaVa(ug2Y}=eGn_@3Be!uhB3-eC?6c_uzO2(IBM!KH70I6+)naR5kHy27YP0; zfB$m_qex=|Oalqr#rzmSA0R%VesP~dzsrh`DzVu5;V(z=0~8rb?s5Db$=!%O5%wM6 zO%}15`A}jS;uCqqs4Rc}&qSv)aa!msGXd3^4<|unEMy{C6l)Xnj3!((u!*_I7vgI| zTAAF|_&lu|DxnuuQWU#;tFttYk^nH9}!;;j^e~-g?lizf?hk*oW=OUdr`jsAM52< zs^lLjG>Um)iv9+XN6JCAf#g0ICNf_H@l!3l6nzw9G_2m8U4v9x>B&LAK3`sGHoMtCn%;j&ZMZOc;2BH`xksn?W z*$>%6;uGTEKzvthjmQ-_$wI1N6Y0xHPFzvO5B!csbYGdI_Y}?z@fnQCyc&|Ek?4zv zlZKb!Z^OJ1v8%Dq$CeHKJ@%7YL~>T(Zz>by0u9K&lIaS;eef*tDh^Y73O^uNq#5&j zIEO;^jHHXKGMaH7-xtXXl4oXNNn@H3MYZ^Eb)uAf#nqB$B0bny>_Y> z`YDD;dYUUh%|z65j6pdKSr&qKL%fva77+c-s77!Nil)PUfM!I_5cdSV8{+{nNg+L< z#Ntl?UmZ9SF*?KhH-*|@m!AppNG7-%6IU*t`}yb3^^kUlun-;DnOBr8lnx0@K?5RH zAiHQxe|@}3k@gf%LrfoCy*Qf@`v*J;;VgpQi(*f_{1Q`#9QU6;CPJ`XkDwh1artal zPjv~bgg=fg(G>rYzX3(TlRW3(S)cID(ioQh@n6=JMPG5Wk1vg17+j2Z=W^G7@tS zOisg6?nDayeE&)aak$Q%rKiiD#oYC0&<=aR~; zTObhmn|WjA>1D;pdm0lNPq9734xq?EZ0Q*B^^2FM8ncMp_sSC_-~SUi0nriy`2C}% zm5d$)ZPTDU%nLJ~u!^k24aYtLeGz#96iQ0Lub@aF?7uU%YVHX|@kNl^9iN?@5m`yI zPWi^MKjR@sAd(+r8uYuYegXwgFyiB@M{+vd#<&pNrr;ONc}tO0 zjrisf7a!dt>(Gahm)&Ckqtri+g$|2P{Vo*0Nmui5W`^j97eQ-mmkF$>wxsy$(mB8A z(iBgdTt<=p6c4~AQi@&KLD50j;*+}rT&Fv=2D`{&V*ds=%lh+SY)liKz+;e}V$>%g z4*^NE@N9~_rpfG}NHJoQNi&eIM}G&Ng0va9i=rOMP0keMSVqoNn)iqwlQi=GZ!LiI zC&{-dTA!dyj8%{irKvO8c^7Q)AZ|?DDoFZbUjlKg5+1^z5S|`1AQG4S=FCeIe}f@X z7i@MsBu|0zC2DUR&lUiHk>%U<*OA|axR~p3pJ>w>NXYG77dOs!iQ`>cHKEz~) zSmZSGK#1q7o(7$tymZTbY-Y`?r8|}v{f(S|R&@-gvz&TXze5xVK@55?wpQc_4NM{V zAI2?mIzk#pFP8?`g2}JSs7uk=}KG@9rTOXuY#}9Q)zMW*T$9(YyxRX^54MO5$;#SkH#L0{RT}%(DY}mC3%kZ zC>e2hWIci6k0tR4!P{u42t*$sOoi_%<36^DeM+#GGH!)k_SnJ*e&OZ)a9U&+QqXHxznW$u|u?=OunkF*PSQ_Gc5t|U( zFoK-|b+nMnZ!Xd2o82P1Hoyc5lt%yyF{h?uUe{4eoQ)px`K1T@> z+`=}BOeQ$J*Y=BT1%b&mZYKUeA^4_6qG-$?n}|j6F%9QsoFFF@-rU58dg>4tsPngS z{tXE9ND0VNlaNe`Fc%p`@j0yU9tAg{PbRqrgwI*sYkV*9t$9jhU}ZQHkTU|`Vfp*tBqUD3*#vxv(Icz88WP(n{B^alSNPKFd;#|5%&TBa z?Uhqa=h-}jiuGwiI~ zG0C-vUB-MlqXCUvfV>`rcZrR!g)cFmOq{n2MM>m!Jipc-1W8eX_fhDk2Hb~qpLYM5 z6)vW+!jMl>TU#xZhMeB`j)5I$PQIlpl8c<=>}q^aBt)ADhrg~KO)q)xcQRh6b1T80 zndhPSbH*^phJ!bC>#I|s79l9;^Aw^Dov zK9PRtj~E?vd&QQW!hg{~Dq@nUeVL+P8$~06#&wcZ<6dg6`~2lYHVkDcP@lxRtjfYRrl5Nt?2*`O z5;KOPPmOak^~8QkNy>wPwdvr@`MK7AcQyJ}YVhM(UYPg(oq3UpVg5gvdVT=gEmc@1Q%=o|rA3 zpZ|PC&=ClZ)732Iuj#ra2`eBUMRExeE2H0H9MwV@waGoiw!y!hQJ3K@f#l!8aF*4l zWk=%?>ydWEPM6EVpOF=1A;b@rRD$A@yqv^h_)coqJ83|qr2(e9tU{z795yXp7LJ?f z8_|2hQIZ|;$W-DRFh*-54kv`;DeObgBOIY5F2@;%!^)wrJzVk^agOvWnP@P&%{MDioi94_`J;5%isU}L0~7wb{e=%@J5PkA~6di zE~mB*J9hm{3*5+|Y6oE(Nd8n}A*e{;XX45d_nwgtlJQ^y@Ecz$G$-ahBY5pdStFCpMhiuZ%;?^Rd7tX1V&1wGb45Ft-wltq)0S zDEx`SB0ZT$gJnUN+T0F4OoTL-?$~YS7is1%_zn=882bXoL--ccPzg|^HGcQ~-(AUS z6Euh9vy8DcG)|jo#C#jU4L`jo5tmP8e52t` zuRHXXxnma{&0^#xxFwDl=Ajg*Al)IQ7=IIJ!=6%C*csn3=FN%E#(WvYgIVztn(I#y zk)_zr!g&bYg1@t2c7I&Yg15t2RnC7OrcVTBCm{!xGmZ^n2EmSVgm zR%D=JWeBHW_m)ZIrlFw-@9%tI)d^UFF*W$oZ8SdIrR%>T?SwrK zxQnL7Q>Ym8_1Lm7dJyB06}me$C^~@H#<~+8zhGLLDD7>R=kFOr+aUT2@&_~$LC{R} z$&h5#6=ug44RHYR<-Cd(&{bDZEJoa1hDa@JjWl2M(adjRdkc@qH0F-)6ciap6GJH| z(g#OM4eAY!MSo868yegS`5YR^OkQWOA*)Hp%4d;3n3yNnJAkcqH@?9)iae3K@Ob1K zJe}n4f5S+WTW|wGhw(n7i7DW4NVnZywjA@W8^ zXKSosIG zdQLm9P4HzBMK)l|!6-n1?!;Ho)tD$gL7Jtx9oq15IOf8YkN6S9wo{IUgTp27 zzsP1yN=pNI32Xvx7c#~)<|1o!tA{~Y%rO1>SY3TC;uDg8g`BeL{iwbH6wQY%9!-gy zp@C-n`(slpCbc0QNN0P%#{`PlnEzYS=`qy6k$|oA$QX*Yp=d!kQtGbMg4e0>K5#A5 z;8D8RQ^co`KmT>c5I~pFBvfJEgrxhBeAmvyAn(RFi2V<`PmHgk?#dsmcmTGz#Qp`> zY;Yl182=E8KGC9q#Iz&t2DWOY*P)7kMmy|Mr~3J|s0KIW6;Z z1idC82gx1@f~+M3gNfOQF{hWWGIobo(|x^s4QRw8PvOo^ox{3w_whx^^Y;wn3<|8K z=x%9-m02NqL|`FC1!d@kzc9^-6d>mh@HYA!QUR; zP91&zIS+zAP+TMg=V3-FR+V0YkkPDMBq0yo0tja?JaT|yKKO4Fzn4`#)*OGuG5DWQ zcpBpmwMp(uhGPOBnh@ZTpAa2_{2&c<#9j^3DNeW&Wj9`mui8u_yQQiggUpwS%Yi= z*47QHHI6b>3ka}A`vtitMVs3~!((l(sVU8w<2h5LH}?;)whXpeqr-dH!mJhj!vk!U z`-O%F#Dv%eR4nRN3t8=f)`&=3lr1c}khPaRB*fayX7!7S4iEKy z{HfT>9vy6rhA<*L${uYG53|Plg~ZsLUB{Z!#y5D2IB%ynS9YC9Z!VrX+%GE19u#H` zkBKfE9$2`#Us!;(UQ?@IKmhfktbyT?2AN+Z#jOFhSi8T?RKqVUEIgW;nj8^n5A}=e z^Z!gN+PabRZ2|MqTw1N0R+B2R_Q>cMzYuGvpMS7D%ogQZThKfpMS+k2tCR`}_Y1H_ z`A6C#qG>8JJk)9|#hNFdG07k0%2Uz&I$?em;}^|#2HT^oeo^k`|5Z)b=Bzx_oY9rC zws};XIQbe?&+nRA-<&31eK|2}y_!~gm^IQbEXZcf*U!Cy1M*w_jb+<<``g&)exZK7 z?V&ND15CBT0_^|At zqM*TQjf$}O+XL;kfC`??jIu?`F?lV+xqY&^QZg?C>vEl%Y>tZSoVU{)-&xgZw*H@v zRaW5VY2TIIX`XJ56V|$EW7o!+<|Y=Orfk{w+2$%~5=Hlku*u_N3vrd%U{0DK;jb6f zRnBF;m^8k7B0jmW+u5W5Oft zR=GL+obB&evO8C`xA;0IAGZ`vL}&Iee|v;qh%0^vODc2z5MOyE{*z#huti!!ID9{U z_a)=GbnMQ(O?=Y3GIq3NO6$DW*e9(uD8#PUjWs|nCAp8oy)T;*JuT5m3d&`J-9J3k z#)T1JkF@vg8}5D&|5el;;=EhflFqewfTeo8L^bVE{^9b7<#*j5YAF@p(b5*lQ)FzA zFPD$|48zzhUpxB~$@Wp@KNnFLryCJ-aI-Zkh81x&dtF8if8__-Y0hT-Hw~|%&C1*FNL z2Vd_~ay{N*X`Fx?%gK$E-PLTrX+X@#i^lzsMoZbB8TyD#-EnjIl-G{102W+(Q35f`q>aoIR`h zq;~GTVHxba(aw_5ndGJ=r}v_qWo}x!{WrtHo0haL`%TNrc*$iuyy`ns+_&V+{_hpj zx>rmQ*X?_jYkFaAePG#VTv$CHTb5-^*+}jx9)M_jM7aCfaHTc-d{3B;gYmrV(UG2g zvAGf^_NkU4Sxq}HV-&BM-F=tU&Fs_Ir%<)nSUYYQ|NVIUddi&pOZa3-#FOQ@ z-lk{si7Jw~p|4*^w5@MnKWi&zgO-+zS-9E4tWmr!#@+7kCvUI2)d0K8+{mYB<|GaM jc*P@wf+fwJl=FW|axbxnvuLnSdP|)cSLI-zB>Daer_2Os delta 66406 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 diff --git a/netbox/translations/it/LC_MESSAGES/django.po b/netbox/translations/it/LC_MESSAGES/django.po index 21a038c55..3e8dffd16 100644 --- a/netbox/translations/it/LC_MESSAGES/django.po +++ b/netbox/translations/it/LC_MESSAGES/django.po @@ -7,16 +7,16 @@ # Jeff Gehlbach, 2024 # Francesco Lombardo, 2024 # rizlas, 2024 -# Jeremy Stretch, 2024 +# Jeremy Stretch, 2025 # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2024-12-12 05:02+0000\n" +"POT-Creation-Date: 2025-01-04 05:02+0000\n" "PO-Revision-Date: 2023-10-30 17:48+0000\n" -"Last-Translator: Jeremy Stretch, 2024\n" +"Last-Translator: Jeremy Stretch, 2025\n" "Language-Team: Italian (https://app.transifex.com/netbox-community/teams/178115/it/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -154,7 +154,7 @@ msgstr "Inattivo" #: netbox/dcim/filtersets.py:464 netbox/dcim/filtersets.py:1021 #: netbox/dcim/filtersets.py:1368 netbox/dcim/filtersets.py:1903 #: netbox/dcim/filtersets.py:2146 netbox/dcim/filtersets.py:2204 -#: netbox/ipam/filtersets.py:339 netbox/ipam/filtersets.py:959 +#: netbox/ipam/filtersets.py:341 netbox/ipam/filtersets.py:961 #: netbox/virtualization/filtersets.py:45 #: netbox/virtualization/filtersets.py:173 netbox/vpn/filtersets.py:358 msgid "Region (ID)" @@ -166,8 +166,8 @@ msgstr "Regione (ID)" #: netbox/dcim/filtersets.py:471 netbox/dcim/filtersets.py:1028 #: netbox/dcim/filtersets.py:1375 netbox/dcim/filtersets.py:1910 #: netbox/dcim/filtersets.py:2153 netbox/dcim/filtersets.py:2211 -#: netbox/extras/filtersets.py:509 netbox/ipam/filtersets.py:346 -#: netbox/ipam/filtersets.py:966 netbox/virtualization/filtersets.py:52 +#: netbox/extras/filtersets.py:509 netbox/ipam/filtersets.py:348 +#: netbox/ipam/filtersets.py:968 netbox/virtualization/filtersets.py:52 #: netbox/virtualization/filtersets.py:180 netbox/vpn/filtersets.py:353 msgid "Region (slug)" msgstr "Regione (slug)" @@ -177,8 +177,8 @@ msgstr "Regione (slug)" #: netbox/dcim/filtersets.py:346 netbox/dcim/filtersets.py:477 #: netbox/dcim/filtersets.py:1034 netbox/dcim/filtersets.py:1381 #: netbox/dcim/filtersets.py:1916 netbox/dcim/filtersets.py:2159 -#: netbox/dcim/filtersets.py:2217 netbox/ipam/filtersets.py:352 -#: netbox/ipam/filtersets.py:972 netbox/virtualization/filtersets.py:58 +#: netbox/dcim/filtersets.py:2217 netbox/ipam/filtersets.py:354 +#: netbox/ipam/filtersets.py:974 netbox/virtualization/filtersets.py:58 #: netbox/virtualization/filtersets.py:186 msgid "Site group (ID)" msgstr "Gruppo del sito (ID)" @@ -189,7 +189,7 @@ msgstr "Gruppo del sito (ID)" #: netbox/dcim/filtersets.py:1041 netbox/dcim/filtersets.py:1388 #: netbox/dcim/filtersets.py:1923 netbox/dcim/filtersets.py:2166 #: netbox/dcim/filtersets.py:2224 netbox/extras/filtersets.py:515 -#: netbox/ipam/filtersets.py:359 netbox/ipam/filtersets.py:979 +#: netbox/ipam/filtersets.py:361 netbox/ipam/filtersets.py:981 #: netbox/virtualization/filtersets.py:65 #: netbox/virtualization/filtersets.py:193 msgid "Site group (slug)" @@ -259,8 +259,8 @@ msgstr "Sito" #: netbox/circuits/filtersets.py:62 netbox/circuits/filtersets.py:229 #: netbox/circuits/filtersets.py:274 netbox/dcim/filtersets.py:242 #: netbox/dcim/filtersets.py:363 netbox/dcim/filtersets.py:458 -#: netbox/extras/filtersets.py:531 netbox/ipam/filtersets.py:238 -#: netbox/ipam/filtersets.py:369 netbox/ipam/filtersets.py:989 +#: netbox/extras/filtersets.py:531 netbox/ipam/filtersets.py:240 +#: netbox/ipam/filtersets.py:371 netbox/ipam/filtersets.py:991 #: netbox/virtualization/filtersets.py:75 #: netbox/virtualization/filtersets.py:203 netbox/vpn/filtersets.py:363 msgid "Site (slug)" @@ -279,13 +279,13 @@ msgstr "ASN" #: netbox/circuits/filtersets.py:95 netbox/circuits/filtersets.py:122 #: netbox/circuits/filtersets.py:156 netbox/circuits/filtersets.py:283 -#: netbox/circuits/filtersets.py:325 netbox/ipam/filtersets.py:243 +#: netbox/circuits/filtersets.py:325 netbox/ipam/filtersets.py:245 msgid "Provider (ID)" msgstr "Provider (ID)" #: netbox/circuits/filtersets.py:101 netbox/circuits/filtersets.py:128 #: netbox/circuits/filtersets.py:162 netbox/circuits/filtersets.py:289 -#: netbox/circuits/filtersets.py:331 netbox/ipam/filtersets.py:249 +#: netbox/circuits/filtersets.py:331 netbox/ipam/filtersets.py:251 msgid "Provider (slug)" msgstr "Provider (slug)" @@ -314,8 +314,8 @@ msgstr "Tipo di circuito (slug)" #: netbox/dcim/filtersets.py:452 netbox/dcim/filtersets.py:1045 #: netbox/dcim/filtersets.py:1393 netbox/dcim/filtersets.py:1928 #: netbox/dcim/filtersets.py:2170 netbox/dcim/filtersets.py:2229 -#: netbox/ipam/filtersets.py:232 netbox/ipam/filtersets.py:363 -#: netbox/ipam/filtersets.py:983 netbox/virtualization/filtersets.py:69 +#: netbox/ipam/filtersets.py:234 netbox/ipam/filtersets.py:365 +#: netbox/ipam/filtersets.py:985 netbox/virtualization/filtersets.py:69 #: netbox/virtualization/filtersets.py:197 netbox/vpn/filtersets.py:368 msgid "Site (ID)" msgstr "Sito (ID)" @@ -669,7 +669,7 @@ msgstr "Provider account " #: netbox/dcim/forms/filtersets.py:924 netbox/dcim/forms/filtersets.py:958 #: netbox/dcim/forms/filtersets.py:1059 netbox/dcim/forms/filtersets.py:1170 #: netbox/dcim/tables/devices.py:140 netbox/dcim/tables/devices.py:817 -#: netbox/dcim/tables/devices.py:1063 netbox/dcim/tables/modules.py:69 +#: netbox/dcim/tables/devices.py:1063 netbox/dcim/tables/modules.py:70 #: netbox/dcim/tables/power.py:74 netbox/dcim/tables/racks.py:126 #: netbox/dcim/tables/sites.py:82 netbox/dcim/tables/sites.py:138 #: netbox/ipam/forms/bulk_edit.py:256 netbox/ipam/forms/bulk_edit.py:306 @@ -1104,7 +1104,7 @@ msgstr "Assegnazione" #: netbox/circuits/tables/circuits.py:155 netbox/dcim/forms/bulk_edit.py:118 #: netbox/dcim/forms/bulk_import.py:100 netbox/dcim/forms/model_forms.py:117 #: netbox/dcim/tables/sites.py:89 netbox/extras/forms/filtersets.py:480 -#: netbox/ipam/filtersets.py:999 netbox/ipam/forms/bulk_edit.py:493 +#: netbox/ipam/filtersets.py:1001 netbox/ipam/forms/bulk_edit.py:493 #: netbox/ipam/forms/bulk_import.py:460 netbox/ipam/forms/model_forms.py:561 #: netbox/ipam/tables/fhrp.py:67 netbox/ipam/tables/vlans.py:122 #: netbox/ipam/tables/vlans.py:226 @@ -1544,7 +1544,7 @@ msgstr "Tasso di impegno" #: netbox/circuits/tables/providers.py:82 #: netbox/circuits/tables/providers.py:107 netbox/dcim/tables/devices.py:1036 #: netbox/dcim/tables/devicetypes.py:92 netbox/dcim/tables/modules.py:29 -#: netbox/dcim/tables/modules.py:72 netbox/dcim/tables/power.py:39 +#: netbox/dcim/tables/modules.py:73 netbox/dcim/tables/power.py:39 #: netbox/dcim/tables/power.py:96 netbox/dcim/tables/racks.py:84 #: netbox/dcim/tables/racks.py:145 netbox/dcim/tables/racks.py:225 #: netbox/dcim/tables/sites.py:108 netbox/extras/tables/tables.py:582 @@ -2947,7 +2947,7 @@ msgid "Parent site group (slug)" msgstr "Gruppo del sito principale (slug)" #: netbox/dcim/filtersets.py:164 netbox/extras/filtersets.py:364 -#: netbox/ipam/filtersets.py:841 netbox/ipam/filtersets.py:993 +#: netbox/ipam/filtersets.py:843 netbox/ipam/filtersets.py:995 msgid "Group (ID)" msgstr "Gruppo (ID)" @@ -3005,15 +3005,15 @@ msgstr "Tipo di rack (ID)" #: netbox/dcim/filtersets.py:411 netbox/dcim/filtersets.py:892 #: netbox/dcim/filtersets.py:994 netbox/dcim/filtersets.py:1850 -#: netbox/ipam/filtersets.py:381 netbox/ipam/filtersets.py:493 -#: netbox/ipam/filtersets.py:1003 netbox/virtualization/filtersets.py:210 +#: netbox/ipam/filtersets.py:383 netbox/ipam/filtersets.py:495 +#: netbox/ipam/filtersets.py:1005 netbox/virtualization/filtersets.py:210 msgid "Role (ID)" msgstr "Ruolo (ID)" #: netbox/dcim/filtersets.py:417 netbox/dcim/filtersets.py:898 #: netbox/dcim/filtersets.py:1000 netbox/dcim/filtersets.py:1856 -#: netbox/extras/filtersets.py:558 netbox/ipam/filtersets.py:387 -#: netbox/ipam/filtersets.py:499 netbox/ipam/filtersets.py:1009 +#: netbox/extras/filtersets.py:558 netbox/ipam/filtersets.py:389 +#: netbox/ipam/filtersets.py:501 netbox/ipam/filtersets.py:1011 #: netbox/virtualization/filtersets.py:216 msgid "Role (slug)" msgstr "Ruolo (slug)" @@ -3211,7 +3211,7 @@ msgstr "VDC (ID)" msgid "Device model" msgstr "Modello del dispositivo" -#: netbox/dcim/filtersets.py:1267 netbox/ipam/filtersets.py:632 +#: netbox/dcim/filtersets.py:1267 netbox/ipam/filtersets.py:634 #: netbox/vpn/filtersets.py:102 netbox/vpn/filtersets.py:401 msgid "Interface (ID)" msgstr "Interfaccia (ID)" @@ -3225,8 +3225,8 @@ msgid "Module bay (ID)" msgstr "Alloggiamento per moduli (ID)" #: netbox/dcim/filtersets.py:1333 netbox/dcim/filtersets.py:1425 -#: netbox/ipam/filtersets.py:611 netbox/ipam/filtersets.py:851 -#: netbox/ipam/filtersets.py:1115 netbox/virtualization/filtersets.py:161 +#: netbox/ipam/filtersets.py:613 netbox/ipam/filtersets.py:853 +#: netbox/ipam/filtersets.py:1117 netbox/virtualization/filtersets.py:161 #: netbox/vpn/filtersets.py:379 msgid "Device (ID)" msgstr "Dispositivo (ID)" @@ -3235,8 +3235,8 @@ msgstr "Dispositivo (ID)" msgid "Rack (name)" msgstr "Rack (nome)" -#: netbox/dcim/filtersets.py:1431 netbox/ipam/filtersets.py:606 -#: netbox/ipam/filtersets.py:846 netbox/ipam/filtersets.py:1121 +#: netbox/dcim/filtersets.py:1431 netbox/ipam/filtersets.py:608 +#: netbox/ipam/filtersets.py:848 netbox/ipam/filtersets.py:1123 #: netbox/vpn/filtersets.py:374 msgid "Device (name)" msgstr "Dispositivo (nome)" @@ -3288,9 +3288,9 @@ msgstr "VID assegnato" #: netbox/dcim/forms/bulk_import.py:913 netbox/dcim/forms/filtersets.py:1428 #: netbox/dcim/forms/model_forms.py:1385 #: netbox/dcim/models/device_components.py:711 -#: netbox/dcim/tables/devices.py:626 netbox/ipam/filtersets.py:316 -#: netbox/ipam/filtersets.py:327 netbox/ipam/filtersets.py:483 -#: netbox/ipam/filtersets.py:584 netbox/ipam/filtersets.py:595 +#: netbox/dcim/tables/devices.py:626 netbox/ipam/filtersets.py:318 +#: netbox/ipam/filtersets.py:329 netbox/ipam/filtersets.py:485 +#: netbox/ipam/filtersets.py:586 netbox/ipam/filtersets.py:597 #: netbox/ipam/forms/bulk_edit.py:242 netbox/ipam/forms/bulk_edit.py:298 #: netbox/ipam/forms/bulk_edit.py:340 netbox/ipam/forms/bulk_import.py:157 #: netbox/ipam/forms/bulk_import.py:243 netbox/ipam/forms/bulk_import.py:279 @@ -3317,19 +3317,19 @@ msgstr "VID assegnato" msgid "VRF" msgstr "VRF" -#: netbox/dcim/filtersets.py:1619 netbox/ipam/filtersets.py:322 -#: netbox/ipam/filtersets.py:333 netbox/ipam/filtersets.py:489 -#: netbox/ipam/filtersets.py:590 netbox/ipam/filtersets.py:601 +#: netbox/dcim/filtersets.py:1619 netbox/ipam/filtersets.py:324 +#: netbox/ipam/filtersets.py:335 netbox/ipam/filtersets.py:491 +#: netbox/ipam/filtersets.py:592 netbox/ipam/filtersets.py:603 msgid "VRF (RD)" msgstr "VRF (ROSSO)" -#: netbox/dcim/filtersets.py:1624 netbox/ipam/filtersets.py:1030 +#: netbox/dcim/filtersets.py:1624 netbox/ipam/filtersets.py:1032 #: netbox/vpn/filtersets.py:342 msgid "L2VPN (ID)" msgstr "L2VPN (ID)" #: netbox/dcim/filtersets.py:1630 netbox/dcim/forms/filtersets.py:1433 -#: netbox/dcim/tables/devices.py:570 netbox/ipam/filtersets.py:1036 +#: netbox/dcim/tables/devices.py:570 netbox/ipam/filtersets.py:1038 #: netbox/ipam/forms/filtersets.py:518 netbox/ipam/tables/vlans.py:137 #: netbox/templates/dcim/interface.html:93 netbox/templates/ipam/vlan.html:66 #: netbox/templates/vpn/l2vpntermination.html:12 @@ -3491,7 +3491,7 @@ msgstr "Fuso orario" #: netbox/dcim/forms/object_import.py:187 netbox/dcim/tables/devices.py:96 #: netbox/dcim/tables/devices.py:172 netbox/dcim/tables/devices.py:940 #: netbox/dcim/tables/devicetypes.py:80 netbox/dcim/tables/devicetypes.py:308 -#: netbox/dcim/tables/modules.py:20 netbox/dcim/tables/modules.py:60 +#: netbox/dcim/tables/modules.py:20 netbox/dcim/tables/modules.py:61 #: netbox/dcim/tables/racks.py:58 netbox/dcim/tables/racks.py:132 #: netbox/templates/dcim/devicetype.html:14 #: netbox/templates/dcim/inventoryitem.html:44 @@ -3742,7 +3742,7 @@ msgid "Device Type" msgstr "Tipo di dispositivo" #: netbox/dcim/forms/bulk_edit.py:598 netbox/dcim/forms/model_forms.py:401 -#: netbox/dcim/tables/modules.py:17 netbox/dcim/tables/modules.py:65 +#: netbox/dcim/tables/modules.py:17 netbox/dcim/tables/modules.py:66 #: netbox/templates/dcim/module.html:65 #: netbox/templates/dcim/modulebay.html:66 #: netbox/templates/dcim/moduletype.html:22 @@ -3850,7 +3850,7 @@ msgstr "Grappolo" #: netbox/dcim/tables/devices.py:697 netbox/dcim/tables/devices.py:754 #: netbox/dcim/tables/devices.py:801 netbox/dcim/tables/devices.py:861 #: netbox/dcim/tables/devices.py:930 netbox/dcim/tables/devices.py:1057 -#: netbox/dcim/tables/modules.py:52 netbox/extras/forms/filtersets.py:321 +#: netbox/dcim/tables/modules.py:53 netbox/extras/forms/filtersets.py:321 #: netbox/ipam/forms/bulk_import.py:304 netbox/ipam/forms/bulk_import.py:505 #: netbox/ipam/forms/filtersets.py:551 netbox/ipam/forms/model_forms.py:323 #: netbox/ipam/forms/model_forms.py:712 netbox/ipam/forms/model_forms.py:745 @@ -4102,11 +4102,11 @@ msgstr "Taggato VLAN" #: netbox/dcim/forms/bulk_edit.py:1511 msgid "Add tagged VLANs" -msgstr "" +msgstr "Aggiungi VLAN con tag" #: netbox/dcim/forms/bulk_edit.py:1520 msgid "Remove tagged VLANs" -msgstr "" +msgstr "Rimuovi le VLAN contrassegnate" #: netbox/dcim/forms/bulk_edit.py:1536 netbox/dcim/forms/model_forms.py:1348 msgid "Wireless LAN group" @@ -4154,7 +4154,7 @@ msgstr "Commutazione 802.1Q" #: netbox/dcim/forms/bulk_edit.py:1558 msgid "Add/Remove" -msgstr "" +msgstr "Aggiungi/Rimuovi" #: netbox/dcim/forms/bulk_edit.py:1617 netbox/dcim/forms/bulk_edit.py:1619 msgid "Interface mode must be specified to assign VLANs" @@ -4234,7 +4234,7 @@ msgstr "Nome del ruolo assegnato" #: netbox/dcim/forms/bulk_import.py:264 msgid "Rack type model" -msgstr "" +msgstr "Modello tipo rack" #: netbox/dcim/forms/bulk_import.py:292 netbox/dcim/forms/bulk_import.py:435 #: netbox/dcim/forms/bulk_import.py:605 @@ -4244,10 +4244,12 @@ msgstr "Direzione del flusso d'aria" #: netbox/dcim/forms/bulk_import.py:324 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:326 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:334 msgid "Parent site" @@ -4914,6 +4916,11 @@ msgid "" "present, will be automatically replaced with the position value when " "creating a new module." msgstr "" +"Gli intervalli alfanumerici sono supportati per la creazione in blocco. I " +"casi e i tipi misti all'interno di un unico intervallo non sono supportati " +"(esempio: [età, ex] -0/0/ [0-9]). Il token " +"{module}, se presente, verrà automaticamente sostituito con il " +"valore della posizione durante la creazione di un nuovo modulo." #: netbox/dcim/forms/model_forms.py:1094 msgid "Console port template" @@ -6869,7 +6876,7 @@ msgstr "Alloggiamenti per moduli" msgid "Inventory items" msgstr "Articoli di inventario" -#: netbox/dcim/tables/devices.py:305 netbox/dcim/tables/modules.py:56 +#: netbox/dcim/tables/devices.py:305 netbox/dcim/tables/modules.py:57 #: netbox/templates/dcim/modulebay.html:17 msgid "Module Bay" msgstr "Modulo Bay" @@ -7601,12 +7608,12 @@ msgstr "Segnalibri" msgid "Show your personal bookmarks" msgstr "Mostra i tuoi segnalibri personali" -#: netbox/extras/events.py:147 +#: netbox/extras/events.py:151 #, python-brace-format msgid "Unknown action type for an event rule: {action_type}" msgstr "Tipo di azione sconosciuto per una regola di evento: {action_type}" -#: netbox/extras/events.py:192 +#: netbox/extras/events.py:196 #, python-brace-format msgid "Cannot import events pipeline {name} error: {error}" msgstr "Impossibile importare la pipeline di eventi {name} errore: {error}" @@ -9394,129 +9401,129 @@ msgstr "Esportazione di L2VPN" msgid "Exporting L2VPN (identifier)" msgstr "Esportazione di L2VPN (identificatore)" -#: netbox/ipam/filtersets.py:155 netbox/ipam/filtersets.py:281 +#: netbox/ipam/filtersets.py:155 netbox/ipam/filtersets.py:283 #: netbox/ipam/forms/model_forms.py:229 netbox/ipam/tables/ip.py:212 #: netbox/templates/ipam/prefix.html:12 msgid "Prefix" msgstr "Prefisso" #: netbox/ipam/filtersets.py:159 netbox/ipam/filtersets.py:198 -#: netbox/ipam/filtersets.py:221 +#: netbox/ipam/filtersets.py:223 msgid "RIR (ID)" msgstr "RIR (ID)" #: netbox/ipam/filtersets.py:165 netbox/ipam/filtersets.py:204 -#: netbox/ipam/filtersets.py:227 +#: netbox/ipam/filtersets.py:229 msgid "RIR (slug)" msgstr "RIR (lumaca)" -#: netbox/ipam/filtersets.py:285 +#: netbox/ipam/filtersets.py:287 msgid "Within prefix" msgstr "All'interno del prefisso" -#: netbox/ipam/filtersets.py:289 +#: netbox/ipam/filtersets.py:291 msgid "Within and including prefix" msgstr "All'interno e incluso il prefisso" -#: netbox/ipam/filtersets.py:293 +#: netbox/ipam/filtersets.py:295 msgid "Prefixes which contain this prefix or IP" msgstr "Prefissi che contengono questo prefisso o IP" -#: netbox/ipam/filtersets.py:304 netbox/ipam/filtersets.py:572 +#: netbox/ipam/filtersets.py:306 netbox/ipam/filtersets.py:574 #: netbox/ipam/forms/bulk_edit.py:343 netbox/ipam/forms/filtersets.py:196 #: netbox/ipam/forms/filtersets.py:331 msgid "Mask length" msgstr "Lunghezza della maschera" -#: netbox/ipam/filtersets.py:373 netbox/vpn/filtersets.py:427 +#: netbox/ipam/filtersets.py:375 netbox/vpn/filtersets.py:427 msgid "VLAN (ID)" msgstr "VLAN (ID)" -#: netbox/ipam/filtersets.py:377 netbox/vpn/filtersets.py:422 +#: netbox/ipam/filtersets.py:379 netbox/vpn/filtersets.py:422 msgid "VLAN number (1-4094)" msgstr "Numero VLAN (1-4094)" -#: netbox/ipam/filtersets.py:471 netbox/ipam/filtersets.py:475 -#: netbox/ipam/filtersets.py:567 netbox/ipam/forms/model_forms.py:496 +#: netbox/ipam/filtersets.py:473 netbox/ipam/filtersets.py:477 +#: netbox/ipam/filtersets.py:569 netbox/ipam/forms/model_forms.py:496 #: netbox/templates/tenancy/contact.html:53 #: netbox/tenancy/forms/bulk_edit.py:113 msgid "Address" msgstr "Indirizzo" -#: netbox/ipam/filtersets.py:479 +#: netbox/ipam/filtersets.py:481 msgid "Ranges which contain this prefix or IP" msgstr "Intervalli che contengono questo prefisso o IP" -#: netbox/ipam/filtersets.py:507 netbox/ipam/filtersets.py:563 +#: netbox/ipam/filtersets.py:509 netbox/ipam/filtersets.py:565 msgid "Parent prefix" msgstr "Prefisso principale" -#: netbox/ipam/filtersets.py:616 netbox/ipam/filtersets.py:856 -#: netbox/ipam/filtersets.py:1131 netbox/vpn/filtersets.py:385 +#: netbox/ipam/filtersets.py:618 netbox/ipam/filtersets.py:858 +#: netbox/ipam/filtersets.py:1133 netbox/vpn/filtersets.py:385 msgid "Virtual machine (name)" msgstr "Macchina virtuale (nome)" -#: netbox/ipam/filtersets.py:621 netbox/ipam/filtersets.py:861 -#: netbox/ipam/filtersets.py:1125 netbox/virtualization/filtersets.py:282 +#: netbox/ipam/filtersets.py:623 netbox/ipam/filtersets.py:863 +#: netbox/ipam/filtersets.py:1127 netbox/virtualization/filtersets.py:282 #: netbox/virtualization/filtersets.py:321 netbox/vpn/filtersets.py:390 msgid "Virtual machine (ID)" msgstr "Macchina virtuale (ID)" -#: netbox/ipam/filtersets.py:627 netbox/vpn/filtersets.py:97 +#: netbox/ipam/filtersets.py:629 netbox/vpn/filtersets.py:97 #: netbox/vpn/filtersets.py:396 msgid "Interface (name)" msgstr "Interfaccia (nome)" -#: netbox/ipam/filtersets.py:638 netbox/vpn/filtersets.py:108 +#: netbox/ipam/filtersets.py:640 netbox/vpn/filtersets.py:108 #: netbox/vpn/filtersets.py:407 msgid "VM interface (name)" msgstr "Interfaccia VM (nome)" -#: netbox/ipam/filtersets.py:643 netbox/vpn/filtersets.py:113 +#: netbox/ipam/filtersets.py:645 netbox/vpn/filtersets.py:113 msgid "VM interface (ID)" msgstr "Interfaccia VM (ID)" -#: netbox/ipam/filtersets.py:648 +#: netbox/ipam/filtersets.py:650 msgid "FHRP group (ID)" msgstr "Gruppo FHRP (ID)" -#: netbox/ipam/filtersets.py:652 +#: netbox/ipam/filtersets.py:654 msgid "Is assigned to an interface" msgstr "È assegnato a un'interfaccia" -#: netbox/ipam/filtersets.py:656 +#: netbox/ipam/filtersets.py:658 msgid "Is assigned" msgstr "È assegnato" -#: netbox/ipam/filtersets.py:668 +#: netbox/ipam/filtersets.py:670 msgid "Service (ID)" msgstr "Servizio (ID)" -#: netbox/ipam/filtersets.py:673 +#: netbox/ipam/filtersets.py:675 msgid "NAT inside IP address (ID)" msgstr "Indirizzo IP interno (ID) NAT" -#: netbox/ipam/filtersets.py:1041 netbox/ipam/forms/bulk_import.py:322 +#: netbox/ipam/filtersets.py:1043 netbox/ipam/forms/bulk_import.py:322 msgid "Assigned interface" msgstr "Interfaccia assegnata" -#: netbox/ipam/filtersets.py:1046 +#: netbox/ipam/filtersets.py:1048 msgid "Assigned VM interface" msgstr "Interfaccia VM assegnata" -#: netbox/ipam/filtersets.py:1136 +#: netbox/ipam/filtersets.py:1138 msgid "IP address (ID)" msgstr "Indirizzo IP (ID)" -#: netbox/ipam/filtersets.py:1142 netbox/ipam/models/ip.py:788 +#: netbox/ipam/filtersets.py:1144 netbox/ipam/models/ip.py:788 msgid "IP address" msgstr "indirizzo IP" -#: netbox/ipam/filtersets.py:1167 +#: netbox/ipam/filtersets.py:1169 msgid "Primary IPv4 (ID)" msgstr "IPv4 (ID) primario" -#: netbox/ipam/filtersets.py:1172 +#: netbox/ipam/filtersets.py:1174 msgid "Primary IPv6 (ID)" msgstr "IPv6 primario (ID)" @@ -9740,11 +9747,11 @@ msgstr "Imposta questo indirizzo IP primario per il dispositivo assegnato" #: netbox/ipam/forms/bulk_import.py:330 msgid "Is out-of-band" -msgstr "" +msgstr "È fuori banda" #: netbox/ipam/forms/bulk_import.py:331 msgid "Designate this as the out-of-band IP address for the assigned device" -msgstr "" +msgstr "Designalo come indirizzo IP fuori banda per il dispositivo assegnato" #: netbox/ipam/forms/bulk_import.py:371 msgid "No device or virtual machine specified; cannot set as primary IP" @@ -9755,10 +9762,11 @@ msgstr "" #: netbox/ipam/forms/bulk_import.py:375 msgid "No device specified; cannot set as out-of-band IP" msgstr "" +"Nessun dispositivo specificato; non può essere impostato come IP fuori banda" #: netbox/ipam/forms/bulk_import.py:379 msgid "Cannot set out-of-band IP for virtual machines" -msgstr "" +msgstr "Impossibile impostare l'IP fuori banda per le macchine virtuali" #: netbox/ipam/forms/bulk_import.py:383 msgid "No interface specified; cannot set as primary IP" @@ -9768,6 +9776,8 @@ msgstr "" #: netbox/ipam/forms/bulk_import.py:387 msgid "No interface specified; cannot set as out-of-band IP" msgstr "" +"Nessuna interfaccia specificata; non può essere impostato come IP fuori " +"banda" #: netbox/ipam/forms/bulk_import.py:422 msgid "Auth type" @@ -9945,7 +9955,7 @@ msgstr "" #: netbox/ipam/forms/model_forms.py:314 msgid "Make this the out-of-band IP for the device" -msgstr "" +msgstr "Imposta questo indirizzo IP fuori banda per il dispositivo" #: netbox/ipam/forms/model_forms.py:329 msgid "NAT IP (Inside)" @@ -9958,10 +9968,14 @@ msgstr "Un indirizzo IP può essere assegnato a un solo oggetto." #: netbox/ipam/forms/model_forms.py:398 msgid "Cannot reassign primary IP address for the parent device/VM" msgstr "" +"Impossibile riassegnare l'indirizzo IP primario per il dispositivo/macchina " +"virtuale principale" #: netbox/ipam/forms/model_forms.py:402 msgid "Cannot reassign out-of-Band IP address for the parent device" msgstr "" +"Impossibile riassegnare l'indirizzo IP fuori banda per il dispositivo " +"principale" #: netbox/ipam/forms/model_forms.py:412 msgid "" @@ -9975,6 +9989,8 @@ msgid "" "Only IP addresses assigned to a device interface can be designated as the " "out-of-band IP for a device." msgstr "" +"Solo gli indirizzi IP assegnati a un'interfaccia del dispositivo possono " +"essere designati come IP fuori banda per un dispositivo." #: netbox/ipam/forms/model_forms.py:508 msgid "Virtual IP Address" @@ -10382,11 +10398,14 @@ msgstr "Impossibile impostare scope_id senza scope_type." #, python-brace-format msgid "Starting VLAN ID in range ({value}) cannot be less than {minimum}" msgstr "" +"Avvio dell'ID VLAN nell'intervallo ({value}) non può essere inferiore a " +"{minimum}" #: netbox/ipam/models/vlans.py:111 #, python-brace-format msgid "Ending VLAN ID in range ({value}) cannot exceed {maximum}" msgstr "" +"Termine dell'ID VLAN nell'intervallo ({value}) non può superare {maximum}" #: netbox/ipam/models/vlans.py:118 #, python-brace-format @@ -10394,6 +10413,8 @@ msgid "" "Ending VLAN ID in range must be greater than or equal to the starting VLAN " "ID ({range})" msgstr "" +"L'ID VLAN finale nell'intervallo deve essere maggiore o uguale all'ID VLAN " +"iniziale ({range})" #: netbox/ipam/models/vlans.py:124 msgid "Ranges cannot overlap." @@ -12771,11 +12792,13 @@ msgstr "Scarica" #: netbox/templates/dcim/device/render_config.html:64 #: netbox/templates/virtualization/virtualmachine/render_config.html:64 msgid "Error rendering template" -msgstr "" +msgstr "Errore nel rendering del modello" #: netbox/templates/dcim/device/render_config.html:70 msgid "No configuration template has been assigned for this device." msgstr "" +"Non è stato assegnato alcun modello di configurazione per questo " +"dispositivo." #: netbox/templates/dcim/device_edit.html:44 msgid "Parent Bay" @@ -13645,7 +13668,7 @@ msgstr "Corri ancora" #: netbox/templates/extras/script_list.html:133 #, python-format msgid "Could not load scripts from module %(module)s" -msgstr "" +msgstr "Impossibile caricare gli script dal modulo %(module)s" #: netbox/templates/extras/script_list.html:141 msgid "No Scripts Found" @@ -14462,6 +14485,8 @@ msgstr "Aggiungi disco virtuale" #: netbox/templates/virtualization/virtualmachine/render_config.html:70 msgid "No configuration template has been assigned for this virtual machine." msgstr "" +"Non è stato assegnato alcun modello di configurazione per questa macchina " +"virtuale." #: netbox/templates/vpn/ikepolicy.html:10 #: netbox/templates/vpn/ipsecprofile.html:33 netbox/vpn/tables/crypto.py:166 @@ -15542,12 +15567,12 @@ msgstr "Memoria (MB)" #: netbox/virtualization/forms/bulk_edit.py:174 msgid "Disk (MB)" -msgstr "" +msgstr "Disco (MB)" #: netbox/virtualization/forms/bulk_edit.py:334 #: netbox/virtualization/forms/filtersets.py:251 msgid "Size (MB)" -msgstr "" +msgstr "Dimensioni (MB)" #: netbox/virtualization/forms/bulk_import.py:44 msgid "Type of cluster" @@ -15764,19 +15789,19 @@ msgstr "GRE" #: netbox/vpn/choices.py:39 msgid "WireGuard" -msgstr "" +msgstr "WireGuard" #: netbox/vpn/choices.py:40 msgid "OpenVPN" -msgstr "" +msgstr "OpenVPN" #: netbox/vpn/choices.py:41 msgid "L2TP" -msgstr "" +msgstr "L2TP" #: netbox/vpn/choices.py:42 msgid "PPTP" -msgstr "" +msgstr "PPTP" #: netbox/vpn/choices.py:64 msgid "Hub" diff --git a/netbox/translations/ja/LC_MESSAGES/django.mo b/netbox/translations/ja/LC_MESSAGES/django.mo index c7b76e8cbea012b5cbbf5d3bf07a41e953b315b8..09ec7de6950d2cd960b7ab7879fc91cd4b8ba790 100644 GIT binary patch delta 25044 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 Bv5^1( delta 25036 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, 2024 -# Jeremy Stretch, 2024 # teapot, 2024 +# Jeremy Stretch, 2025 # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2024-12-13 05:02+0000\n" +"POT-Creation-Date: 2025-01-04 05:02+0000\n" "PO-Revision-Date: 2023-10-30 17:48+0000\n" -"Last-Translator: teapot, 2024\n" +"Last-Translator: Jeremy Stretch, 2025\n" "Language-Team: Japanese (https://app.transifex.com/netbox-community/teams/178115/ja/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -666,7 +666,7 @@ msgstr "プロバイダアカウント" #: netbox/dcim/forms/filtersets.py:924 netbox/dcim/forms/filtersets.py:958 #: netbox/dcim/forms/filtersets.py:1059 netbox/dcim/forms/filtersets.py:1170 #: netbox/dcim/tables/devices.py:140 netbox/dcim/tables/devices.py:817 -#: netbox/dcim/tables/devices.py:1063 netbox/dcim/tables/modules.py:69 +#: netbox/dcim/tables/devices.py:1063 netbox/dcim/tables/modules.py:70 #: netbox/dcim/tables/power.py:74 netbox/dcim/tables/racks.py:126 #: netbox/dcim/tables/sites.py:82 netbox/dcim/tables/sites.py:138 #: netbox/ipam/forms/bulk_edit.py:256 netbox/ipam/forms/bulk_edit.py:306 @@ -1234,7 +1234,7 @@ msgstr "割当回線グループ" #: netbox/circuits/models/circuits.py:240 msgid "termination" -msgstr "終端" +msgstr "終了" #: netbox/circuits/models/circuits.py:257 msgid "port speed (Kbps)" @@ -1537,7 +1537,7 @@ msgstr "保証帯域" #: netbox/circuits/tables/providers.py:82 #: netbox/circuits/tables/providers.py:107 netbox/dcim/tables/devices.py:1036 #: netbox/dcim/tables/devicetypes.py:92 netbox/dcim/tables/modules.py:29 -#: netbox/dcim/tables/modules.py:72 netbox/dcim/tables/power.py:39 +#: netbox/dcim/tables/modules.py:73 netbox/dcim/tables/power.py:39 #: netbox/dcim/tables/power.py:96 netbox/dcim/tables/racks.py:84 #: netbox/dcim/tables/racks.py:145 netbox/dcim/tables/racks.py:225 #: netbox/dcim/tables/sites.py:108 netbox/extras/tables/tables.py:582 @@ -3467,7 +3467,7 @@ msgstr "タイムゾーン" #: netbox/dcim/forms/object_import.py:187 netbox/dcim/tables/devices.py:96 #: netbox/dcim/tables/devices.py:172 netbox/dcim/tables/devices.py:940 #: netbox/dcim/tables/devicetypes.py:80 netbox/dcim/tables/devicetypes.py:308 -#: netbox/dcim/tables/modules.py:20 netbox/dcim/tables/modules.py:60 +#: netbox/dcim/tables/modules.py:20 netbox/dcim/tables/modules.py:61 #: netbox/dcim/tables/racks.py:58 netbox/dcim/tables/racks.py:132 #: netbox/templates/dcim/devicetype.html:14 #: netbox/templates/dcim/inventoryitem.html:44 @@ -3718,7 +3718,7 @@ msgid "Device Type" msgstr "デバイスタイプ" #: netbox/dcim/forms/bulk_edit.py:598 netbox/dcim/forms/model_forms.py:401 -#: netbox/dcim/tables/modules.py:17 netbox/dcim/tables/modules.py:65 +#: netbox/dcim/tables/modules.py:17 netbox/dcim/tables/modules.py:66 #: netbox/templates/dcim/module.html:65 #: netbox/templates/dcim/modulebay.html:66 #: netbox/templates/dcim/moduletype.html:22 @@ -3826,7 +3826,7 @@ msgstr "クラスタ" #: netbox/dcim/tables/devices.py:697 netbox/dcim/tables/devices.py:754 #: netbox/dcim/tables/devices.py:801 netbox/dcim/tables/devices.py:861 #: netbox/dcim/tables/devices.py:930 netbox/dcim/tables/devices.py:1057 -#: netbox/dcim/tables/modules.py:52 netbox/extras/forms/filtersets.py:321 +#: netbox/dcim/tables/modules.py:53 netbox/extras/forms/filtersets.py:321 #: netbox/ipam/forms/bulk_import.py:304 netbox/ipam/forms/bulk_import.py:505 #: netbox/ipam/forms/filtersets.py:551 netbox/ipam/forms/model_forms.py:323 #: netbox/ipam/forms/model_forms.py:712 netbox/ipam/forms/model_forms.py:745 @@ -6695,7 +6695,7 @@ msgstr "モジュールベイ" msgid "Inventory items" msgstr "在庫品目" -#: netbox/dcim/tables/devices.py:305 netbox/dcim/tables/modules.py:56 +#: netbox/dcim/tables/devices.py:305 netbox/dcim/tables/modules.py:57 #: netbox/templates/dcim/modulebay.html:17 msgid "Module Bay" msgstr "モジュールベイ" @@ -7415,12 +7415,12 @@ msgstr "ブックマーク" msgid "Show your personal bookmarks" msgstr "個人用のブックマークを表示する" -#: netbox/extras/events.py:147 +#: netbox/extras/events.py:151 #, python-brace-format msgid "Unknown action type for an event rule: {action_type}" msgstr "イベントルールのアクションタイプが不明です: {action_type}" -#: netbox/extras/events.py:192 +#: netbox/extras/events.py:196 #, python-brace-format msgid "Cannot import events pipeline {name} error: {error}" msgstr "イベントパイプラインをインポートできません {name} エラー: {error}" diff --git a/netbox/translations/nl/LC_MESSAGES/django.mo b/netbox/translations/nl/LC_MESSAGES/django.mo index 1af769697221b49f6de684283729fd35b23d2b5c..0b5dc9bc87f418743282fee8e57c6160d2e595c2 100644 GIT binary patch delta 69629 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℘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%0ApP T-yLu, 2024 -# Jeremy Stretch, 2024 -# Jorg de Jong, 2024 # Sebastian Berm, 2024 +# Jorg de Jong, 2025 +# Jeremy Stretch, 2025 # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2024-12-12 05:02+0000\n" +"POT-Creation-Date: 2025-01-04 05:02+0000\n" "PO-Revision-Date: 2023-10-30 17:48+0000\n" -"Last-Translator: Sebastian Berm, 2024\n" +"Last-Translator: Jeremy Stretch, 2025\n" "Language-Team: Dutch (https://app.transifex.com/netbox-community/teams/178115/nl/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -156,7 +156,7 @@ msgstr "Inactief" #: netbox/dcim/filtersets.py:464 netbox/dcim/filtersets.py:1021 #: netbox/dcim/filtersets.py:1368 netbox/dcim/filtersets.py:1903 #: netbox/dcim/filtersets.py:2146 netbox/dcim/filtersets.py:2204 -#: netbox/ipam/filtersets.py:339 netbox/ipam/filtersets.py:959 +#: netbox/ipam/filtersets.py:341 netbox/ipam/filtersets.py:961 #: netbox/virtualization/filtersets.py:45 #: netbox/virtualization/filtersets.py:173 netbox/vpn/filtersets.py:358 msgid "Region (ID)" @@ -168,8 +168,8 @@ msgstr "Regio (ID)" #: netbox/dcim/filtersets.py:471 netbox/dcim/filtersets.py:1028 #: netbox/dcim/filtersets.py:1375 netbox/dcim/filtersets.py:1910 #: netbox/dcim/filtersets.py:2153 netbox/dcim/filtersets.py:2211 -#: netbox/extras/filtersets.py:509 netbox/ipam/filtersets.py:346 -#: netbox/ipam/filtersets.py:966 netbox/virtualization/filtersets.py:52 +#: netbox/extras/filtersets.py:509 netbox/ipam/filtersets.py:348 +#: netbox/ipam/filtersets.py:968 netbox/virtualization/filtersets.py:52 #: netbox/virtualization/filtersets.py:180 netbox/vpn/filtersets.py:353 msgid "Region (slug)" msgstr "Regio (slug)" @@ -179,8 +179,8 @@ msgstr "Regio (slug)" #: netbox/dcim/filtersets.py:346 netbox/dcim/filtersets.py:477 #: netbox/dcim/filtersets.py:1034 netbox/dcim/filtersets.py:1381 #: netbox/dcim/filtersets.py:1916 netbox/dcim/filtersets.py:2159 -#: netbox/dcim/filtersets.py:2217 netbox/ipam/filtersets.py:352 -#: netbox/ipam/filtersets.py:972 netbox/virtualization/filtersets.py:58 +#: netbox/dcim/filtersets.py:2217 netbox/ipam/filtersets.py:354 +#: netbox/ipam/filtersets.py:974 netbox/virtualization/filtersets.py:58 #: netbox/virtualization/filtersets.py:186 msgid "Site group (ID)" msgstr "Sitegroep (ID)" @@ -191,7 +191,7 @@ msgstr "Sitegroep (ID)" #: netbox/dcim/filtersets.py:1041 netbox/dcim/filtersets.py:1388 #: netbox/dcim/filtersets.py:1923 netbox/dcim/filtersets.py:2166 #: netbox/dcim/filtersets.py:2224 netbox/extras/filtersets.py:515 -#: netbox/ipam/filtersets.py:359 netbox/ipam/filtersets.py:979 +#: netbox/ipam/filtersets.py:361 netbox/ipam/filtersets.py:981 #: netbox/virtualization/filtersets.py:65 #: netbox/virtualization/filtersets.py:193 msgid "Site group (slug)" @@ -261,8 +261,8 @@ msgstr "Site" #: netbox/circuits/filtersets.py:62 netbox/circuits/filtersets.py:229 #: netbox/circuits/filtersets.py:274 netbox/dcim/filtersets.py:242 #: netbox/dcim/filtersets.py:363 netbox/dcim/filtersets.py:458 -#: netbox/extras/filtersets.py:531 netbox/ipam/filtersets.py:238 -#: netbox/ipam/filtersets.py:369 netbox/ipam/filtersets.py:989 +#: netbox/extras/filtersets.py:531 netbox/ipam/filtersets.py:240 +#: netbox/ipam/filtersets.py:371 netbox/ipam/filtersets.py:991 #: netbox/virtualization/filtersets.py:75 #: netbox/virtualization/filtersets.py:203 netbox/vpn/filtersets.py:363 msgid "Site (slug)" @@ -281,13 +281,13 @@ msgstr "ASN" #: netbox/circuits/filtersets.py:95 netbox/circuits/filtersets.py:122 #: netbox/circuits/filtersets.py:156 netbox/circuits/filtersets.py:283 -#: netbox/circuits/filtersets.py:325 netbox/ipam/filtersets.py:243 +#: netbox/circuits/filtersets.py:325 netbox/ipam/filtersets.py:245 msgid "Provider (ID)" msgstr "Provider (ID)" #: netbox/circuits/filtersets.py:101 netbox/circuits/filtersets.py:128 #: netbox/circuits/filtersets.py:162 netbox/circuits/filtersets.py:289 -#: netbox/circuits/filtersets.py:331 netbox/ipam/filtersets.py:249 +#: netbox/circuits/filtersets.py:331 netbox/ipam/filtersets.py:251 msgid "Provider (slug)" msgstr "Provider (slug)" @@ -316,8 +316,8 @@ msgstr "Circuittype (slug)" #: netbox/dcim/filtersets.py:452 netbox/dcim/filtersets.py:1045 #: netbox/dcim/filtersets.py:1393 netbox/dcim/filtersets.py:1928 #: netbox/dcim/filtersets.py:2170 netbox/dcim/filtersets.py:2229 -#: netbox/ipam/filtersets.py:232 netbox/ipam/filtersets.py:363 -#: netbox/ipam/filtersets.py:983 netbox/virtualization/filtersets.py:69 +#: netbox/ipam/filtersets.py:234 netbox/ipam/filtersets.py:365 +#: netbox/ipam/filtersets.py:985 netbox/virtualization/filtersets.py:69 #: netbox/virtualization/filtersets.py:197 netbox/vpn/filtersets.py:368 msgid "Site (ID)" msgstr "Locatie (ID)" @@ -671,7 +671,7 @@ msgstr "Provideraccount" #: netbox/dcim/forms/filtersets.py:924 netbox/dcim/forms/filtersets.py:958 #: netbox/dcim/forms/filtersets.py:1059 netbox/dcim/forms/filtersets.py:1170 #: netbox/dcim/tables/devices.py:140 netbox/dcim/tables/devices.py:817 -#: netbox/dcim/tables/devices.py:1063 netbox/dcim/tables/modules.py:69 +#: netbox/dcim/tables/devices.py:1063 netbox/dcim/tables/modules.py:70 #: netbox/dcim/tables/power.py:74 netbox/dcim/tables/racks.py:126 #: netbox/dcim/tables/sites.py:82 netbox/dcim/tables/sites.py:138 #: netbox/ipam/forms/bulk_edit.py:256 netbox/ipam/forms/bulk_edit.py:306 @@ -837,7 +837,7 @@ msgstr "Serviceparameters" #: netbox/vpn/forms/model_forms.py:411 netbox/wireless/forms/model_forms.py:54 #: netbox/wireless/forms/model_forms.py:170 msgid "Tenancy" -msgstr "Huurovereenkomst" +msgstr "Tenants" #: netbox/circuits/forms/bulk_edit.py:193 #: netbox/circuits/forms/bulk_edit.py:217 @@ -1106,7 +1106,7 @@ msgstr "Opdracht" #: netbox/circuits/tables/circuits.py:155 netbox/dcim/forms/bulk_edit.py:118 #: netbox/dcim/forms/bulk_import.py:100 netbox/dcim/forms/model_forms.py:117 #: netbox/dcim/tables/sites.py:89 netbox/extras/forms/filtersets.py:480 -#: netbox/ipam/filtersets.py:999 netbox/ipam/forms/bulk_edit.py:493 +#: netbox/ipam/filtersets.py:1001 netbox/ipam/forms/bulk_edit.py:493 #: netbox/ipam/forms/bulk_import.py:460 netbox/ipam/forms/model_forms.py:561 #: netbox/ipam/tables/fhrp.py:67 netbox/ipam/tables/vlans.py:122 #: netbox/ipam/tables/vlans.py:226 @@ -1546,7 +1546,7 @@ msgstr "Vastleggingspercentage" #: netbox/circuits/tables/providers.py:82 #: netbox/circuits/tables/providers.py:107 netbox/dcim/tables/devices.py:1036 #: netbox/dcim/tables/devicetypes.py:92 netbox/dcim/tables/modules.py:29 -#: netbox/dcim/tables/modules.py:72 netbox/dcim/tables/power.py:39 +#: netbox/dcim/tables/modules.py:73 netbox/dcim/tables/power.py:39 #: netbox/dcim/tables/power.py:96 netbox/dcim/tables/racks.py:84 #: netbox/dcim/tables/racks.py:145 netbox/dcim/tables/racks.py:225 #: netbox/dcim/tables/sites.py:108 netbox/extras/tables/tables.py:582 @@ -2949,7 +2949,7 @@ msgid "Parent site group (slug)" msgstr "Bovenliggende sitegroep (slug)" #: netbox/dcim/filtersets.py:164 netbox/extras/filtersets.py:364 -#: netbox/ipam/filtersets.py:841 netbox/ipam/filtersets.py:993 +#: netbox/ipam/filtersets.py:843 netbox/ipam/filtersets.py:995 msgid "Group (ID)" msgstr "Groep (ID)" @@ -3007,15 +3007,15 @@ msgstr "Racktype (ID)" #: netbox/dcim/filtersets.py:411 netbox/dcim/filtersets.py:892 #: netbox/dcim/filtersets.py:994 netbox/dcim/filtersets.py:1850 -#: netbox/ipam/filtersets.py:381 netbox/ipam/filtersets.py:493 -#: netbox/ipam/filtersets.py:1003 netbox/virtualization/filtersets.py:210 +#: netbox/ipam/filtersets.py:383 netbox/ipam/filtersets.py:495 +#: netbox/ipam/filtersets.py:1005 netbox/virtualization/filtersets.py:210 msgid "Role (ID)" msgstr "Rol (ID)" #: netbox/dcim/filtersets.py:417 netbox/dcim/filtersets.py:898 #: netbox/dcim/filtersets.py:1000 netbox/dcim/filtersets.py:1856 -#: netbox/extras/filtersets.py:558 netbox/ipam/filtersets.py:387 -#: netbox/ipam/filtersets.py:499 netbox/ipam/filtersets.py:1009 +#: netbox/extras/filtersets.py:558 netbox/ipam/filtersets.py:389 +#: netbox/ipam/filtersets.py:501 netbox/ipam/filtersets.py:1011 #: netbox/virtualization/filtersets.py:216 msgid "Role (slug)" msgstr "Rol (slug)" @@ -3213,7 +3213,7 @@ msgstr "VDC (ID)" msgid "Device model" msgstr "Model van het apparaat" -#: netbox/dcim/filtersets.py:1267 netbox/ipam/filtersets.py:632 +#: netbox/dcim/filtersets.py:1267 netbox/ipam/filtersets.py:634 #: netbox/vpn/filtersets.py:102 netbox/vpn/filtersets.py:401 msgid "Interface (ID)" msgstr "Interface (ID)" @@ -3227,8 +3227,8 @@ msgid "Module bay (ID)" msgstr "Modulevak (ID)" #: netbox/dcim/filtersets.py:1333 netbox/dcim/filtersets.py:1425 -#: netbox/ipam/filtersets.py:611 netbox/ipam/filtersets.py:851 -#: netbox/ipam/filtersets.py:1115 netbox/virtualization/filtersets.py:161 +#: netbox/ipam/filtersets.py:613 netbox/ipam/filtersets.py:853 +#: netbox/ipam/filtersets.py:1117 netbox/virtualization/filtersets.py:161 #: netbox/vpn/filtersets.py:379 msgid "Device (ID)" msgstr "Apparaat (ID)" @@ -3237,8 +3237,8 @@ msgstr "Apparaat (ID)" msgid "Rack (name)" msgstr "Rack (naam)" -#: netbox/dcim/filtersets.py:1431 netbox/ipam/filtersets.py:606 -#: netbox/ipam/filtersets.py:846 netbox/ipam/filtersets.py:1121 +#: netbox/dcim/filtersets.py:1431 netbox/ipam/filtersets.py:608 +#: netbox/ipam/filtersets.py:848 netbox/ipam/filtersets.py:1123 #: netbox/vpn/filtersets.py:374 msgid "Device (name)" msgstr "Apparaat (naam)" @@ -3290,9 +3290,9 @@ msgstr "Toegewezen VID" #: netbox/dcim/forms/bulk_import.py:913 netbox/dcim/forms/filtersets.py:1428 #: netbox/dcim/forms/model_forms.py:1385 #: netbox/dcim/models/device_components.py:711 -#: netbox/dcim/tables/devices.py:626 netbox/ipam/filtersets.py:316 -#: netbox/ipam/filtersets.py:327 netbox/ipam/filtersets.py:483 -#: netbox/ipam/filtersets.py:584 netbox/ipam/filtersets.py:595 +#: netbox/dcim/tables/devices.py:626 netbox/ipam/filtersets.py:318 +#: netbox/ipam/filtersets.py:329 netbox/ipam/filtersets.py:485 +#: netbox/ipam/filtersets.py:586 netbox/ipam/filtersets.py:597 #: netbox/ipam/forms/bulk_edit.py:242 netbox/ipam/forms/bulk_edit.py:298 #: netbox/ipam/forms/bulk_edit.py:340 netbox/ipam/forms/bulk_import.py:157 #: netbox/ipam/forms/bulk_import.py:243 netbox/ipam/forms/bulk_import.py:279 @@ -3319,19 +3319,19 @@ msgstr "Toegewezen VID" msgid "VRF" msgstr "VRF" -#: netbox/dcim/filtersets.py:1619 netbox/ipam/filtersets.py:322 -#: netbox/ipam/filtersets.py:333 netbox/ipam/filtersets.py:489 -#: netbox/ipam/filtersets.py:590 netbox/ipam/filtersets.py:601 +#: netbox/dcim/filtersets.py:1619 netbox/ipam/filtersets.py:324 +#: netbox/ipam/filtersets.py:335 netbox/ipam/filtersets.py:491 +#: netbox/ipam/filtersets.py:592 netbox/ipam/filtersets.py:603 msgid "VRF (RD)" msgstr "VRF (RD)" -#: netbox/dcim/filtersets.py:1624 netbox/ipam/filtersets.py:1030 +#: netbox/dcim/filtersets.py:1624 netbox/ipam/filtersets.py:1032 #: netbox/vpn/filtersets.py:342 msgid "L2VPN (ID)" msgstr "L2VPN (ID)" #: netbox/dcim/filtersets.py:1630 netbox/dcim/forms/filtersets.py:1433 -#: netbox/dcim/tables/devices.py:570 netbox/ipam/filtersets.py:1036 +#: netbox/dcim/tables/devices.py:570 netbox/ipam/filtersets.py:1038 #: netbox/ipam/forms/filtersets.py:518 netbox/ipam/tables/vlans.py:137 #: netbox/templates/dcim/interface.html:93 netbox/templates/ipam/vlan.html:66 #: netbox/templates/vpn/l2vpntermination.html:12 @@ -3493,7 +3493,7 @@ msgstr "Tijdzone" #: netbox/dcim/forms/object_import.py:187 netbox/dcim/tables/devices.py:96 #: netbox/dcim/tables/devices.py:172 netbox/dcim/tables/devices.py:940 #: netbox/dcim/tables/devicetypes.py:80 netbox/dcim/tables/devicetypes.py:308 -#: netbox/dcim/tables/modules.py:20 netbox/dcim/tables/modules.py:60 +#: netbox/dcim/tables/modules.py:20 netbox/dcim/tables/modules.py:61 #: netbox/dcim/tables/racks.py:58 netbox/dcim/tables/racks.py:132 #: netbox/templates/dcim/devicetype.html:14 #: netbox/templates/dcim/inventoryitem.html:44 @@ -3744,7 +3744,7 @@ msgid "Device Type" msgstr "Soort apparaat" #: netbox/dcim/forms/bulk_edit.py:598 netbox/dcim/forms/model_forms.py:401 -#: netbox/dcim/tables/modules.py:17 netbox/dcim/tables/modules.py:65 +#: netbox/dcim/tables/modules.py:17 netbox/dcim/tables/modules.py:66 #: netbox/templates/dcim/module.html:65 #: netbox/templates/dcim/modulebay.html:66 #: netbox/templates/dcim/moduletype.html:22 @@ -3852,7 +3852,7 @@ msgstr "Cluster" #: netbox/dcim/tables/devices.py:697 netbox/dcim/tables/devices.py:754 #: netbox/dcim/tables/devices.py:801 netbox/dcim/tables/devices.py:861 #: netbox/dcim/tables/devices.py:930 netbox/dcim/tables/devices.py:1057 -#: netbox/dcim/tables/modules.py:52 netbox/extras/forms/filtersets.py:321 +#: netbox/dcim/tables/modules.py:53 netbox/extras/forms/filtersets.py:321 #: netbox/ipam/forms/bulk_import.py:304 netbox/ipam/forms/bulk_import.py:505 #: netbox/ipam/forms/filtersets.py:551 netbox/ipam/forms/model_forms.py:323 #: netbox/ipam/forms/model_forms.py:712 netbox/ipam/forms/model_forms.py:745 @@ -4104,11 +4104,11 @@ msgstr "Getagde VLAN's" #: netbox/dcim/forms/bulk_edit.py:1511 msgid "Add tagged VLANs" -msgstr "" +msgstr "Getagde VLAN's toevoegen" #: netbox/dcim/forms/bulk_edit.py:1520 msgid "Remove tagged VLANs" -msgstr "" +msgstr "Getagde VLAN's verwijderen" #: netbox/dcim/forms/bulk_edit.py:1536 netbox/dcim/forms/model_forms.py:1348 msgid "Wireless LAN group" @@ -4156,7 +4156,7 @@ msgstr "802.1Q-omschakeling" #: netbox/dcim/forms/bulk_edit.py:1558 msgid "Add/Remove" -msgstr "" +msgstr "Toevoegen/verwijderen" #: netbox/dcim/forms/bulk_edit.py:1617 netbox/dcim/forms/bulk_edit.py:1619 msgid "Interface mode must be specified to assign VLANs" @@ -4235,7 +4235,7 @@ msgstr "Naam van de toegewezen rol" #: netbox/dcim/forms/bulk_import.py:264 msgid "Rack type model" -msgstr "" +msgstr "Model van het type rack" #: netbox/dcim/forms/bulk_import.py:292 netbox/dcim/forms/bulk_import.py:435 #: netbox/dcim/forms/bulk_import.py:605 @@ -4245,10 +4245,12 @@ msgstr "Richting van de luchtstroom" #: netbox/dcim/forms/bulk_import.py:324 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:326 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:334 msgid "Parent site" @@ -4792,7 +4794,7 @@ msgstr "Verbinding" #: netbox/extras/forms/model_forms.py:675 netbox/extras/tables/tables.py:579 #: netbox/templates/extras/journalentry.html:30 msgid "Kind" -msgstr "Vriendelijk" +msgstr "Soort" #: netbox/dcim/forms/filtersets.py:1377 msgid "Mgmt only" @@ -4915,6 +4917,11 @@ msgid "" "present, will be automatically replaced with the position value when " "creating a new module." msgstr "" +"Alfanumerieke reeksen worden ondersteund voor bulkaanmaak. Gemengde gevallen" +" en typen binnen één bereik worden niet ondersteund (bijvoorbeeld: " +"[leeftijd, ex] -0/0/ [0-9]). Het token {module}, " +"indien aanwezig, wordt automatisch vervangen door de positiewaarde bij het " +"aanmaken van een nieuwe module." #: netbox/dcim/forms/model_forms.py:1094 msgid "Console port template" @@ -6848,7 +6855,7 @@ msgstr "Modulebays" msgid "Inventory items" msgstr "Inventarisartikelen" -#: netbox/dcim/tables/devices.py:305 netbox/dcim/tables/modules.py:56 +#: netbox/dcim/tables/devices.py:305 netbox/dcim/tables/modules.py:57 #: netbox/templates/dcim/modulebay.html:17 msgid "Module Bay" msgstr "Modulebaai" @@ -7577,12 +7584,12 @@ msgstr "Bladwijzers" msgid "Show your personal bookmarks" msgstr "Laat je persoonlijke bladwijzers zien" -#: netbox/extras/events.py:147 +#: netbox/extras/events.py:151 #, python-brace-format msgid "Unknown action type for an event rule: {action_type}" msgstr "Onbekend actietype voor een evenementregel: {action_type}" -#: netbox/extras/events.py:192 +#: netbox/extras/events.py:196 #, python-brace-format msgid "Cannot import events pipeline {name} error: {error}" msgstr "" @@ -8907,15 +8914,15 @@ msgstr "" #: netbox/extras/models/models.py:688 msgid "kind" -msgstr "vriendelijk" +msgstr "soort" #: netbox/extras/models/models.py:702 msgid "journal entry" -msgstr "journaalboeking" +msgstr "journaalpost" #: netbox/extras/models/models.py:703 msgid "journal entries" -msgstr "journaalboekingen" +msgstr "journaalposten" #: netbox/extras/models/models.py:718 #, python-brace-format @@ -9272,8 +9279,7 @@ msgstr "Ongeldig formaat van het IP-adres: {data}" #: netbox/ipam/api/field_serializers.py:37 msgid "Enter a valid IPv4 or IPv6 prefix and mask in CIDR notation." -msgstr "" -"Voer een geldig IPv4- of IPv6-voorvoegsel en masker in de CIDR-notatie in." +msgstr "Voer een geldig IPv4- of IPv6-prefix en masker in de CIDR-notatie in." #: netbox/ipam/api/field_serializers.py:44 #, python-brace-format @@ -9375,129 +9381,129 @@ msgstr "L2VPN exporteren" msgid "Exporting L2VPN (identifier)" msgstr "L2VPN exporteren (identifier)" -#: netbox/ipam/filtersets.py:155 netbox/ipam/filtersets.py:281 +#: netbox/ipam/filtersets.py:155 netbox/ipam/filtersets.py:283 #: netbox/ipam/forms/model_forms.py:229 netbox/ipam/tables/ip.py:212 #: netbox/templates/ipam/prefix.html:12 msgid "Prefix" -msgstr "Voorvoegsel" +msgstr "Prefix" #: netbox/ipam/filtersets.py:159 netbox/ipam/filtersets.py:198 -#: netbox/ipam/filtersets.py:221 +#: netbox/ipam/filtersets.py:223 msgid "RIR (ID)" msgstr "RIR (ID)" #: netbox/ipam/filtersets.py:165 netbox/ipam/filtersets.py:204 -#: netbox/ipam/filtersets.py:227 +#: netbox/ipam/filtersets.py:229 msgid "RIR (slug)" msgstr "RIR (slak)" -#: netbox/ipam/filtersets.py:285 +#: netbox/ipam/filtersets.py:287 msgid "Within prefix" -msgstr "Binnen het voorvoegsel" +msgstr "Binnen deze prefix" -#: netbox/ipam/filtersets.py:289 +#: netbox/ipam/filtersets.py:291 msgid "Within and including prefix" -msgstr "Binnen en inclusief voorvoegsel" +msgstr "Binnen en inclusief prefix" -#: netbox/ipam/filtersets.py:293 +#: netbox/ipam/filtersets.py:295 msgid "Prefixes which contain this prefix or IP" -msgstr "Prefixen die dit voorvoegsel of IP-adres bevatten" +msgstr "Prefixen die deze prefix of IP-adres bevatten" -#: netbox/ipam/filtersets.py:304 netbox/ipam/filtersets.py:572 +#: netbox/ipam/filtersets.py:306 netbox/ipam/filtersets.py:574 #: netbox/ipam/forms/bulk_edit.py:343 netbox/ipam/forms/filtersets.py:196 #: netbox/ipam/forms/filtersets.py:331 msgid "Mask length" msgstr "Lengte van het masker" -#: netbox/ipam/filtersets.py:373 netbox/vpn/filtersets.py:427 +#: netbox/ipam/filtersets.py:375 netbox/vpn/filtersets.py:427 msgid "VLAN (ID)" msgstr "VLAN (ID)" -#: netbox/ipam/filtersets.py:377 netbox/vpn/filtersets.py:422 +#: netbox/ipam/filtersets.py:379 netbox/vpn/filtersets.py:422 msgid "VLAN number (1-4094)" msgstr "VLAN-nummer (1-4094)" -#: netbox/ipam/filtersets.py:471 netbox/ipam/filtersets.py:475 -#: netbox/ipam/filtersets.py:567 netbox/ipam/forms/model_forms.py:496 +#: netbox/ipam/filtersets.py:473 netbox/ipam/filtersets.py:477 +#: netbox/ipam/filtersets.py:569 netbox/ipam/forms/model_forms.py:496 #: netbox/templates/tenancy/contact.html:53 #: netbox/tenancy/forms/bulk_edit.py:113 msgid "Address" msgstr "Adres" -#: netbox/ipam/filtersets.py:479 +#: netbox/ipam/filtersets.py:481 msgid "Ranges which contain this prefix or IP" -msgstr "Bereiken die dit voorvoegsel of IP-adres bevatten" +msgstr "Bereiken die deze prefix of IP-adres bevatten" -#: netbox/ipam/filtersets.py:507 netbox/ipam/filtersets.py:563 +#: netbox/ipam/filtersets.py:509 netbox/ipam/filtersets.py:565 msgid "Parent prefix" msgstr "Oudervoorvoegsel" -#: netbox/ipam/filtersets.py:616 netbox/ipam/filtersets.py:856 -#: netbox/ipam/filtersets.py:1131 netbox/vpn/filtersets.py:385 +#: netbox/ipam/filtersets.py:618 netbox/ipam/filtersets.py:858 +#: netbox/ipam/filtersets.py:1133 netbox/vpn/filtersets.py:385 msgid "Virtual machine (name)" msgstr "Virtuele machine (naam)" -#: netbox/ipam/filtersets.py:621 netbox/ipam/filtersets.py:861 -#: netbox/ipam/filtersets.py:1125 netbox/virtualization/filtersets.py:282 +#: netbox/ipam/filtersets.py:623 netbox/ipam/filtersets.py:863 +#: netbox/ipam/filtersets.py:1127 netbox/virtualization/filtersets.py:282 #: netbox/virtualization/filtersets.py:321 netbox/vpn/filtersets.py:390 msgid "Virtual machine (ID)" msgstr "Virtuele machine (ID)" -#: netbox/ipam/filtersets.py:627 netbox/vpn/filtersets.py:97 +#: netbox/ipam/filtersets.py:629 netbox/vpn/filtersets.py:97 #: netbox/vpn/filtersets.py:396 msgid "Interface (name)" msgstr "Interface (naam)" -#: netbox/ipam/filtersets.py:638 netbox/vpn/filtersets.py:108 +#: netbox/ipam/filtersets.py:640 netbox/vpn/filtersets.py:108 #: netbox/vpn/filtersets.py:407 msgid "VM interface (name)" msgstr "VM-interface (naam)" -#: netbox/ipam/filtersets.py:643 netbox/vpn/filtersets.py:113 +#: netbox/ipam/filtersets.py:645 netbox/vpn/filtersets.py:113 msgid "VM interface (ID)" msgstr "VM-interface (ID)" -#: netbox/ipam/filtersets.py:648 +#: netbox/ipam/filtersets.py:650 msgid "FHRP group (ID)" msgstr "FHRP-groep (ID)" -#: netbox/ipam/filtersets.py:652 +#: netbox/ipam/filtersets.py:654 msgid "Is assigned to an interface" msgstr "Is toegewezen aan een interface" -#: netbox/ipam/filtersets.py:656 +#: netbox/ipam/filtersets.py:658 msgid "Is assigned" msgstr "Is toegewezen" -#: netbox/ipam/filtersets.py:668 +#: netbox/ipam/filtersets.py:670 msgid "Service (ID)" msgstr "Service (ID)" -#: netbox/ipam/filtersets.py:673 +#: netbox/ipam/filtersets.py:675 msgid "NAT inside IP address (ID)" msgstr "NAT binnen IP-adres (ID)" -#: netbox/ipam/filtersets.py:1041 netbox/ipam/forms/bulk_import.py:322 +#: netbox/ipam/filtersets.py:1043 netbox/ipam/forms/bulk_import.py:322 msgid "Assigned interface" msgstr "Toegewezen interface" -#: netbox/ipam/filtersets.py:1046 +#: netbox/ipam/filtersets.py:1048 msgid "Assigned VM interface" msgstr "Toegewezen VM-interface" -#: netbox/ipam/filtersets.py:1136 +#: netbox/ipam/filtersets.py:1138 msgid "IP address (ID)" msgstr "IP-adres (ID)" -#: netbox/ipam/filtersets.py:1142 netbox/ipam/models/ip.py:788 +#: netbox/ipam/filtersets.py:1144 netbox/ipam/models/ip.py:788 msgid "IP address" msgstr "IP-adres" -#: netbox/ipam/filtersets.py:1167 +#: netbox/ipam/filtersets.py:1169 msgid "Primary IPv4 (ID)" msgstr "Primaire IPv4 (ID)" -#: netbox/ipam/filtersets.py:1172 +#: netbox/ipam/filtersets.py:1174 msgid "Primary IPv6 (ID)" msgstr "Primaire IPv6 (ID)" @@ -9581,7 +9587,7 @@ msgstr "VLAN" #: netbox/ipam/forms/bulk_edit.py:245 msgid "Prefix length" -msgstr "Lengte van het voorvoegsel" +msgstr "Lengte van de prefix" #: netbox/ipam/forms/bulk_edit.py:268 netbox/ipam/forms/filtersets.py:241 #: netbox/templates/ipam/prefix.html:85 @@ -9721,11 +9727,12 @@ msgstr "Maak dit het primaire IP-adres voor het toegewezen apparaat" #: netbox/ipam/forms/bulk_import.py:330 msgid "Is out-of-band" -msgstr "" +msgstr "Is buiten de band" #: netbox/ipam/forms/bulk_import.py:331 msgid "Designate this as the out-of-band IP address for the assigned device" msgstr "" +"Wijs dit aan als het out-of-band IP-adres voor het toegewezen apparaat" #: netbox/ipam/forms/bulk_import.py:371 msgid "No device or virtual machine specified; cannot set as primary IP" @@ -9736,10 +9743,12 @@ msgstr "" #: netbox/ipam/forms/bulk_import.py:375 msgid "No device specified; cannot set as out-of-band IP" msgstr "" +"Geen apparaat gespecificeerd; kan niet worden ingesteld als IP-adres buiten " +"de band" #: netbox/ipam/forms/bulk_import.py:379 msgid "Cannot set out-of-band IP for virtual machines" -msgstr "" +msgstr "Kan niet-band-IP niet instellen voor virtuele machines" #: netbox/ipam/forms/bulk_import.py:383 msgid "No interface specified; cannot set as primary IP" @@ -9750,6 +9759,8 @@ msgstr "" #: netbox/ipam/forms/bulk_import.py:387 msgid "No interface specified; cannot set as out-of-band IP" msgstr "" +"Geen interface gespecificeerd; kan niet worden ingesteld als IP-adres buiten" +" de band" #: netbox/ipam/forms/bulk_import.py:422 msgid "Auth type" @@ -9839,7 +9850,7 @@ msgstr "Apparaat/VM" #: netbox/ipam/forms/filtersets.py:321 msgid "Parent Prefix" -msgstr "Voorvoegsel voor ouders" +msgstr "Prefix voor ouders" #: netbox/ipam/forms/filtersets.py:347 msgid "Assigned Device" @@ -9926,7 +9937,7 @@ msgstr "Maak dit het primaire IP-adres voor het apparaat/VM" #: netbox/ipam/forms/model_forms.py:314 msgid "Make this the out-of-band IP for the device" -msgstr "" +msgstr "Maak dit het IP-adres buiten de band voor het apparaat" #: netbox/ipam/forms/model_forms.py:329 msgid "NAT IP (Inside)" @@ -9939,10 +9950,12 @@ msgstr "Een IP-adres kan slechts aan één object worden toegewezen." #: netbox/ipam/forms/model_forms.py:398 msgid "Cannot reassign primary IP address for the parent device/VM" msgstr "" +"Kan het primaire IP-adres niet opnieuw toewijzen aan het ouderapparaat/de VM" #: netbox/ipam/forms/model_forms.py:402 msgid "Cannot reassign out-of-Band IP address for the parent device" msgstr "" +"Kan het Out-of-Band IP-adres niet opnieuw toewijzen aan het ouderapparaat" #: netbox/ipam/forms/model_forms.py:412 msgid "" @@ -9956,6 +9969,8 @@ msgid "" "Only IP addresses assigned to a device interface can be designated as the " "out-of-band IP for a device." msgstr "" +"Alleen IP-adressen die aan een apparaatinterface zijn toegewezen, kunnen " +"worden aangeduid als het IP-adres buiten de band voor een apparaat." #: netbox/ipam/forms/model_forms.py:508 msgid "Virtual IP Address" @@ -10104,7 +10119,7 @@ msgstr "totaal" #: netbox/ipam/models/ip.py:116 msgid "aggregates" -msgstr "totalen" +msgstr "aggregaten" #: netbox/ipam/models/ip.py:132 msgid "Cannot create aggregate with /0 mask." @@ -10125,7 +10140,7 @@ msgid "" "Prefixes cannot overlap aggregates. {prefix} covers an existing aggregate " "({aggregate})." msgstr "" -"Voorvoegsels mogen aggregaten niet overlappen. {prefix} omvat een bestaand " +"Prefixen mogen aggregaten niet overlappen. {prefix} omvat een bestaand " "aggregaat ({aggregate})." #: netbox/ipam/models/ip.py:200 netbox/ipam/models/ip.py:737 @@ -10139,7 +10154,7 @@ msgstr "rollen" #: netbox/ipam/models/ip.py:217 netbox/ipam/models/ip.py:293 msgid "prefix" -msgstr "voorvoegsel" +msgstr "prefix" #: netbox/ipam/models/ip.py:218 msgid "IPv4 or IPv6 network with mask" @@ -10147,11 +10162,11 @@ msgstr "IPv4- of IPv6-netwerk met masker" #: netbox/ipam/models/ip.py:254 msgid "Operational status of this prefix" -msgstr "Operationele status van dit voorvoegsel" +msgstr "Operationele status van deze prefix" #: netbox/ipam/models/ip.py:262 msgid "The primary function of this prefix" -msgstr "De primaire functie van dit voorvoegsel" +msgstr "De primaire functie van deze prefix" #: netbox/ipam/models/ip.py:265 msgid "is a pool" @@ -10159,8 +10174,7 @@ msgstr "is een pool" #: netbox/ipam/models/ip.py:267 msgid "All IP addresses within this prefix are considered usable" -msgstr "" -"Alle IP-adressen binnen dit voorvoegsel worden als bruikbaar beschouwd" +msgstr "Alle IP-adressen binnen deze prefix worden als bruikbaar beschouwd" #: netbox/ipam/models/ip.py:270 netbox/ipam/models/ip.py:537 msgid "mark utilized" @@ -10168,11 +10182,11 @@ msgstr "merk gebruikt" #: netbox/ipam/models/ip.py:294 msgid "prefixes" -msgstr "voorvoegsels" +msgstr "prefixen" #: netbox/ipam/models/ip.py:317 msgid "Cannot create prefix with /0 mask." -msgstr "Kan geen voorvoegsel aanmaken met het masker /0." +msgstr "Kan geen prefix aanmaken met het masker /0." #: netbox/ipam/models/ip.py:324 netbox/ipam/models/ip.py:874 #, python-brace-format @@ -10186,7 +10200,7 @@ msgstr "globale tabel" #: netbox/ipam/models/ip.py:326 #, python-brace-format msgid "Duplicate prefix found in {table}: {prefix}" -msgstr "Duplicaat voorvoegsel gevonden in {table}: {prefix}" +msgstr "Duplicaat prefix gevonden in {table}: {prefix}" #: netbox/ipam/models/ip.py:495 msgid "start address" @@ -10363,11 +10377,13 @@ msgstr "Kan scope_id niet instellen zonder scope_type." #, python-brace-format msgid "Starting VLAN ID in range ({value}) cannot be less than {minimum}" msgstr "" +"VLAN-id starten binnen bereik ({value}) kan niet minder zijn dan {minimum}" #: netbox/ipam/models/vlans.py:111 #, python-brace-format msgid "Ending VLAN ID in range ({value}) cannot exceed {maximum}" msgstr "" +"VLAN-id binnen bereik beëindigen ({value}) kan niet hoger zijn dan {maximum}" #: netbox/ipam/models/vlans.py:118 #, python-brace-format @@ -10375,6 +10391,8 @@ msgid "" "Ending VLAN ID in range must be greater than or equal to the starting VLAN " "ID ({range})" msgstr "" +"Het einde van de VLAN-id binnen het bereik moet groter zijn dan of gelijk " +"zijn aan de start-VLAN-id ({range})" #: netbox/ipam/models/vlans.py:124 msgid "Ranges cannot overlap." @@ -10428,7 +10446,7 @@ msgstr "unieke ruimte afdwingen" #: netbox/ipam/models/vrfs.py:43 msgid "Prevent duplicate prefixes/IP addresses within this VRF" -msgstr "Voorkom dubbele voorvoegsels/IP-adressen in deze VRF" +msgstr "Voorkom dubbele prefixen/IP-adressen in deze VRF" #: netbox/ipam/models/vrfs.py:63 netbox/netbox/navigation/menu.py:186 #: netbox/netbox/navigation/menu.py:188 @@ -10463,7 +10481,7 @@ msgstr "Aantal providers" #: netbox/ipam/tables/ip.py:95 netbox/netbox/navigation/menu.py:179 #: netbox/netbox/navigation/menu.py:181 msgid "Aggregates" -msgstr "Totalen" +msgstr "Aggregaten" #: netbox/ipam/tables/ip.py:125 msgid "Added" @@ -10474,7 +10492,7 @@ msgstr "Toegevoegd" #: netbox/netbox/navigation/menu.py:165 netbox/netbox/navigation/menu.py:167 #: netbox/templates/ipam/vlan.html:84 msgid "Prefixes" -msgstr "Voorvoegsels" +msgstr "Prefixen" #: netbox/ipam/tables/ip.py:131 netbox/ipam/tables/ip.py:270 #: netbox/ipam/tables/ip.py:324 netbox/ipam/tables/vlans.py:86 @@ -10490,7 +10508,7 @@ msgstr "IP-bereiken" #: netbox/ipam/tables/ip.py:221 msgid "Prefix (Flat)" -msgstr "Voorvoegsel (plat)" +msgstr "Prefix (plat)" #: netbox/ipam/tables/ip.py:225 msgid "Depth" @@ -10557,20 +10575,19 @@ msgstr "Doelen exporteren" #: netbox/ipam/validators.py:9 #, python-brace-format msgid "{prefix} is not a valid prefix. Did you mean {suggested}?" -msgstr "{prefix} is geen geldig voorvoegsel. Bedoelde je {suggested}?" +msgstr "{prefix} is geen geldige prefix. Bedoelde je {suggested}?" #: netbox/ipam/validators.py:16 #, python-format msgid "The prefix length must be less than or equal to %(limit_value)s." msgstr "" -"De lengte van het voorvoegsel moet kleiner zijn dan of gelijk aan " -"%(limit_value)s." +"De lengte van de prefix moet kleiner zijn dan of gelijk aan %(limit_value)s." #: netbox/ipam/validators.py:24 #, python-format msgid "The prefix length must be greater than or equal to %(limit_value)s." msgstr "" -"De lengte van het voorvoegsel moet groter zijn dan of gelijk zijn aan " +"De lengte van de prefix moet groter zijn dan of gelijk zijn aan " "%(limit_value)s." #: netbox/ipam/validators.py:33 @@ -10583,7 +10600,7 @@ msgstr "" #: netbox/ipam/views.py:533 msgid "Child Prefixes" -msgstr "Voorvoegsels voor kinderen" +msgstr "Prefixen voor kinderen" #: netbox/ipam/views.py:569 msgid "Child Ranges" @@ -11320,7 +11337,7 @@ msgstr "Meldingsgroepen" #: netbox/netbox/navigation/menu.py:374 msgid "Journal Entries" -msgstr "Journaalboekingen" +msgstr "Journaalposten" #: netbox/netbox/navigation/menu.py:375 #: netbox/templates/core/objectchange.html:9 @@ -11571,7 +11588,7 @@ msgstr "Fout" #: netbox/netbox/tables/tables.py:58 #, python-brace-format msgid "No {model_name} found" -msgstr "Nee {model_name} gevonden" +msgstr "Geen {model_name} gevonden" #: netbox/netbox/tables/tables.py:249 #: netbox/templates/generic/bulk_import.html:117 @@ -11605,7 +11622,7 @@ msgstr "Rij {i}: Object met ID {id} bestaat niet" #: netbox/netbox/views/generic/bulk_views.py:958 #, python-brace-format msgid "No {object_type} were selected." -msgstr "Nee {object_type} zijn geselecteerd." +msgstr "Geen {object_type} zijn geselecteerd." #: netbox/netbox/views/generic/bulk_views.py:788 #, python-brace-format @@ -11623,7 +11640,7 @@ msgstr "Log met wijzigingen" #: netbox/netbox/views/generic/feature_views.py:93 msgid "Journal" -msgstr "Tijdschrift" +msgstr "Journaal" #: netbox/netbox/views/generic/feature_views.py:207 msgid "Unable to synchronize data: No data file set." @@ -12751,11 +12768,11 @@ msgstr "Downloaden" #: netbox/templates/dcim/device/render_config.html:64 #: netbox/templates/virtualization/virtualmachine/render_config.html:64 msgid "Error rendering template" -msgstr "" +msgstr "Sjabloon voor weergave van fouten" #: netbox/templates/dcim/device/render_config.html:70 msgid "No configuration template has been assigned for this device." -msgstr "" +msgstr "Er is geen configuratiesjabloon toegewezen voor dit apparaat." #: netbox/templates/dcim/device_edit.html:44 msgid "Parent Bay" @@ -13558,7 +13575,7 @@ msgstr "Resultaten in behandeling" #: netbox/templates/extras/journalentry.html:15 msgid "Journal Entry" -msgstr "Dagboekinvoer" +msgstr "Journaalpost" #: netbox/templates/extras/notificationgroup.html:11 msgid "Notification Group" @@ -14051,7 +14068,7 @@ msgstr "Datum toegevoegd" #: netbox/templates/ipam/prefix/prefixes.html:8 #: netbox/templates/ipam/role.html:10 msgid "Add Prefix" -msgstr "Voorvoegsel toevoegen" +msgstr "Prefix toevoegen" #: netbox/templates/ipam/asn.html:23 msgid "AS Number" @@ -14152,7 +14169,7 @@ msgstr "Eerste beschikbare IP" #: netbox/templates/ipam/prefix.html:179 msgid "Prefix Details" -msgstr "Details van het voorvoegsel" +msgstr "Details van de prefix" #: netbox/templates/ipam/prefix.html:185 msgid "Network Address" @@ -14208,7 +14225,7 @@ msgstr "L2VPN's exporteren" #: netbox/templates/ipam/vlan.html:88 msgid "Add a Prefix" -msgstr "Een voorvoegsel toevoegen" +msgstr "Een prefix toevoegen" #: netbox/templates/ipam/vlangroup.html:18 msgid "Add VLAN" @@ -14442,6 +14459,7 @@ msgstr "Virtuele schijf toevoegen" #: netbox/templates/virtualization/virtualmachine/render_config.html:70 msgid "No configuration template has been assigned for this virtual machine." msgstr "" +"Er is geen configuratiesjabloon toegewezen voor deze virtuele machine." #: netbox/templates/vpn/ikepolicy.html:10 #: netbox/templates/vpn/ipsecprofile.html:33 netbox/vpn/tables/crypto.py:166 @@ -15523,12 +15541,12 @@ msgstr "Geheugen (MB)" #: netbox/virtualization/forms/bulk_edit.py:174 msgid "Disk (MB)" -msgstr "" +msgstr "Schijf (MB)" #: netbox/virtualization/forms/bulk_edit.py:334 #: netbox/virtualization/forms/filtersets.py:251 msgid "Size (MB)" -msgstr "" +msgstr "Grootte (MB)" #: netbox/virtualization/forms/bulk_import.py:44 msgid "Type of cluster" @@ -15743,19 +15761,19 @@ msgstr "GRE" #: netbox/vpn/choices.py:39 msgid "WireGuard" -msgstr "" +msgstr "WireGuard" #: netbox/vpn/choices.py:40 msgid "OpenVPN" -msgstr "" +msgstr "OpenVPN" #: netbox/vpn/choices.py:41 msgid "L2TP" -msgstr "" +msgstr "L2TP" #: netbox/vpn/choices.py:42 msgid "PPTP" -msgstr "" +msgstr "PPTP" #: netbox/vpn/choices.py:64 msgid "Hub" diff --git a/netbox/translations/pl/LC_MESSAGES/django.mo b/netbox/translations/pl/LC_MESSAGES/django.mo index e0e9273fad9a9f24c369aeddbf96cabc25093979..035533187556f7f3a72f82e428f3b4528b4e76ac 100644 GIT binary patch delta 69114 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 F{{>u%MoRzy delta 66438 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 diff --git a/netbox/translations/pl/LC_MESSAGES/django.po b/netbox/translations/pl/LC_MESSAGES/django.po index 92dde3ca4..5eb68b319 100644 --- a/netbox/translations/pl/LC_MESSAGES/django.po +++ b/netbox/translations/pl/LC_MESSAGES/django.po @@ -6,17 +6,17 @@ # Translators: # Jeff Gehlbach, 2024 # Simplicity sp. z o.o., 2024 -# Jeremy Stretch, 2024 # Grzegorz Szymaszek, 2024 +# Jeremy Stretch, 2025 # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2024-12-12 05:02+0000\n" +"POT-Creation-Date: 2025-01-04 05:02+0000\n" "PO-Revision-Date: 2023-10-30 17:48+0000\n" -"Last-Translator: Grzegorz Szymaszek, 2024\n" +"Last-Translator: Jeremy Stretch, 2025\n" "Language-Team: Polish (https://app.transifex.com/netbox-community/teams/178115/pl/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -154,7 +154,7 @@ msgstr "Nieaktywny" #: netbox/dcim/filtersets.py:464 netbox/dcim/filtersets.py:1021 #: netbox/dcim/filtersets.py:1368 netbox/dcim/filtersets.py:1903 #: netbox/dcim/filtersets.py:2146 netbox/dcim/filtersets.py:2204 -#: netbox/ipam/filtersets.py:339 netbox/ipam/filtersets.py:959 +#: netbox/ipam/filtersets.py:341 netbox/ipam/filtersets.py:961 #: netbox/virtualization/filtersets.py:45 #: netbox/virtualization/filtersets.py:173 netbox/vpn/filtersets.py:358 msgid "Region (ID)" @@ -166,8 +166,8 @@ msgstr "Region (ID)" #: netbox/dcim/filtersets.py:471 netbox/dcim/filtersets.py:1028 #: netbox/dcim/filtersets.py:1375 netbox/dcim/filtersets.py:1910 #: netbox/dcim/filtersets.py:2153 netbox/dcim/filtersets.py:2211 -#: netbox/extras/filtersets.py:509 netbox/ipam/filtersets.py:346 -#: netbox/ipam/filtersets.py:966 netbox/virtualization/filtersets.py:52 +#: netbox/extras/filtersets.py:509 netbox/ipam/filtersets.py:348 +#: netbox/ipam/filtersets.py:968 netbox/virtualization/filtersets.py:52 #: netbox/virtualization/filtersets.py:180 netbox/vpn/filtersets.py:353 msgid "Region (slug)" msgstr "Region (identyfikator)" @@ -177,8 +177,8 @@ msgstr "Region (identyfikator)" #: netbox/dcim/filtersets.py:346 netbox/dcim/filtersets.py:477 #: netbox/dcim/filtersets.py:1034 netbox/dcim/filtersets.py:1381 #: netbox/dcim/filtersets.py:1916 netbox/dcim/filtersets.py:2159 -#: netbox/dcim/filtersets.py:2217 netbox/ipam/filtersets.py:352 -#: netbox/ipam/filtersets.py:972 netbox/virtualization/filtersets.py:58 +#: netbox/dcim/filtersets.py:2217 netbox/ipam/filtersets.py:354 +#: netbox/ipam/filtersets.py:974 netbox/virtualization/filtersets.py:58 #: netbox/virtualization/filtersets.py:186 msgid "Site group (ID)" msgstr "Grupa witryn (ID)" @@ -189,7 +189,7 @@ msgstr "Grupa witryn (ID)" #: netbox/dcim/filtersets.py:1041 netbox/dcim/filtersets.py:1388 #: netbox/dcim/filtersets.py:1923 netbox/dcim/filtersets.py:2166 #: netbox/dcim/filtersets.py:2224 netbox/extras/filtersets.py:515 -#: netbox/ipam/filtersets.py:359 netbox/ipam/filtersets.py:979 +#: netbox/ipam/filtersets.py:361 netbox/ipam/filtersets.py:981 #: netbox/virtualization/filtersets.py:65 #: netbox/virtualization/filtersets.py:193 msgid "Site group (slug)" @@ -259,8 +259,8 @@ msgstr "Teren" #: netbox/circuits/filtersets.py:62 netbox/circuits/filtersets.py:229 #: netbox/circuits/filtersets.py:274 netbox/dcim/filtersets.py:242 #: netbox/dcim/filtersets.py:363 netbox/dcim/filtersets.py:458 -#: netbox/extras/filtersets.py:531 netbox/ipam/filtersets.py:238 -#: netbox/ipam/filtersets.py:369 netbox/ipam/filtersets.py:989 +#: netbox/extras/filtersets.py:531 netbox/ipam/filtersets.py:240 +#: netbox/ipam/filtersets.py:371 netbox/ipam/filtersets.py:991 #: netbox/virtualization/filtersets.py:75 #: netbox/virtualization/filtersets.py:203 netbox/vpn/filtersets.py:363 msgid "Site (slug)" @@ -279,13 +279,13 @@ msgstr "ASN" #: netbox/circuits/filtersets.py:95 netbox/circuits/filtersets.py:122 #: netbox/circuits/filtersets.py:156 netbox/circuits/filtersets.py:283 -#: netbox/circuits/filtersets.py:325 netbox/ipam/filtersets.py:243 +#: netbox/circuits/filtersets.py:325 netbox/ipam/filtersets.py:245 msgid "Provider (ID)" msgstr "Dostawca (ID)" #: netbox/circuits/filtersets.py:101 netbox/circuits/filtersets.py:128 #: netbox/circuits/filtersets.py:162 netbox/circuits/filtersets.py:289 -#: netbox/circuits/filtersets.py:331 netbox/ipam/filtersets.py:249 +#: netbox/circuits/filtersets.py:331 netbox/ipam/filtersets.py:251 msgid "Provider (slug)" msgstr "Dostawca (identyfikator)" @@ -314,8 +314,8 @@ msgstr "Typ obwodu (identyfikator)" #: netbox/dcim/filtersets.py:452 netbox/dcim/filtersets.py:1045 #: netbox/dcim/filtersets.py:1393 netbox/dcim/filtersets.py:1928 #: netbox/dcim/filtersets.py:2170 netbox/dcim/filtersets.py:2229 -#: netbox/ipam/filtersets.py:232 netbox/ipam/filtersets.py:363 -#: netbox/ipam/filtersets.py:983 netbox/virtualization/filtersets.py:69 +#: netbox/ipam/filtersets.py:234 netbox/ipam/filtersets.py:365 +#: netbox/ipam/filtersets.py:985 netbox/virtualization/filtersets.py:69 #: netbox/virtualization/filtersets.py:197 netbox/vpn/filtersets.py:368 msgid "Site (ID)" msgstr "Teren (ID)" @@ -669,7 +669,7 @@ msgstr "Konto dostawcy" #: netbox/dcim/forms/filtersets.py:924 netbox/dcim/forms/filtersets.py:958 #: netbox/dcim/forms/filtersets.py:1059 netbox/dcim/forms/filtersets.py:1170 #: netbox/dcim/tables/devices.py:140 netbox/dcim/tables/devices.py:817 -#: netbox/dcim/tables/devices.py:1063 netbox/dcim/tables/modules.py:69 +#: netbox/dcim/tables/devices.py:1063 netbox/dcim/tables/modules.py:70 #: netbox/dcim/tables/power.py:74 netbox/dcim/tables/racks.py:126 #: netbox/dcim/tables/sites.py:82 netbox/dcim/tables/sites.py:138 #: netbox/ipam/forms/bulk_edit.py:256 netbox/ipam/forms/bulk_edit.py:306 @@ -1104,7 +1104,7 @@ msgstr "Zlecenie" #: netbox/circuits/tables/circuits.py:155 netbox/dcim/forms/bulk_edit.py:118 #: netbox/dcim/forms/bulk_import.py:100 netbox/dcim/forms/model_forms.py:117 #: netbox/dcim/tables/sites.py:89 netbox/extras/forms/filtersets.py:480 -#: netbox/ipam/filtersets.py:999 netbox/ipam/forms/bulk_edit.py:493 +#: netbox/ipam/filtersets.py:1001 netbox/ipam/forms/bulk_edit.py:493 #: netbox/ipam/forms/bulk_import.py:460 netbox/ipam/forms/model_forms.py:561 #: netbox/ipam/tables/fhrp.py:67 netbox/ipam/tables/vlans.py:122 #: netbox/ipam/tables/vlans.py:226 @@ -1542,7 +1542,7 @@ msgstr "Współczynnik zatwierdzania" #: netbox/circuits/tables/providers.py:82 #: netbox/circuits/tables/providers.py:107 netbox/dcim/tables/devices.py:1036 #: netbox/dcim/tables/devicetypes.py:92 netbox/dcim/tables/modules.py:29 -#: netbox/dcim/tables/modules.py:72 netbox/dcim/tables/power.py:39 +#: netbox/dcim/tables/modules.py:73 netbox/dcim/tables/power.py:39 #: netbox/dcim/tables/power.py:96 netbox/dcim/tables/racks.py:84 #: netbox/dcim/tables/racks.py:145 netbox/dcim/tables/racks.py:225 #: netbox/dcim/tables/sites.py:108 netbox/extras/tables/tables.py:582 @@ -2937,7 +2937,7 @@ msgid "Parent site group (slug)" msgstr "Nadrzędna grupa terenów (identyfikator)" #: netbox/dcim/filtersets.py:164 netbox/extras/filtersets.py:364 -#: netbox/ipam/filtersets.py:841 netbox/ipam/filtersets.py:993 +#: netbox/ipam/filtersets.py:843 netbox/ipam/filtersets.py:995 msgid "Group (ID)" msgstr "Grupa (ID)" @@ -2995,15 +2995,15 @@ msgstr "Typ szafy (numer identyfikacyjny)" #: netbox/dcim/filtersets.py:411 netbox/dcim/filtersets.py:892 #: netbox/dcim/filtersets.py:994 netbox/dcim/filtersets.py:1850 -#: netbox/ipam/filtersets.py:381 netbox/ipam/filtersets.py:493 -#: netbox/ipam/filtersets.py:1003 netbox/virtualization/filtersets.py:210 +#: netbox/ipam/filtersets.py:383 netbox/ipam/filtersets.py:495 +#: netbox/ipam/filtersets.py:1005 netbox/virtualization/filtersets.py:210 msgid "Role (ID)" msgstr "Rola (ID)" #: netbox/dcim/filtersets.py:417 netbox/dcim/filtersets.py:898 #: netbox/dcim/filtersets.py:1000 netbox/dcim/filtersets.py:1856 -#: netbox/extras/filtersets.py:558 netbox/ipam/filtersets.py:387 -#: netbox/ipam/filtersets.py:499 netbox/ipam/filtersets.py:1009 +#: netbox/extras/filtersets.py:558 netbox/ipam/filtersets.py:389 +#: netbox/ipam/filtersets.py:501 netbox/ipam/filtersets.py:1011 #: netbox/virtualization/filtersets.py:216 msgid "Role (slug)" msgstr "Rola (identyfikator)" @@ -3201,7 +3201,7 @@ msgstr "VDC (ID)" msgid "Device model" msgstr "Model urządzenia" -#: netbox/dcim/filtersets.py:1267 netbox/ipam/filtersets.py:632 +#: netbox/dcim/filtersets.py:1267 netbox/ipam/filtersets.py:634 #: netbox/vpn/filtersets.py:102 netbox/vpn/filtersets.py:401 msgid "Interface (ID)" msgstr "Interfejs (ID)" @@ -3215,8 +3215,8 @@ msgid "Module bay (ID)" msgstr "Osłona modułu (ID)" #: netbox/dcim/filtersets.py:1333 netbox/dcim/filtersets.py:1425 -#: netbox/ipam/filtersets.py:611 netbox/ipam/filtersets.py:851 -#: netbox/ipam/filtersets.py:1115 netbox/virtualization/filtersets.py:161 +#: netbox/ipam/filtersets.py:613 netbox/ipam/filtersets.py:853 +#: netbox/ipam/filtersets.py:1117 netbox/virtualization/filtersets.py:161 #: netbox/vpn/filtersets.py:379 msgid "Device (ID)" msgstr "Urządzenie (ID)" @@ -3225,8 +3225,8 @@ msgstr "Urządzenie (ID)" msgid "Rack (name)" msgstr "Szafa (nazwa)" -#: netbox/dcim/filtersets.py:1431 netbox/ipam/filtersets.py:606 -#: netbox/ipam/filtersets.py:846 netbox/ipam/filtersets.py:1121 +#: netbox/dcim/filtersets.py:1431 netbox/ipam/filtersets.py:608 +#: netbox/ipam/filtersets.py:848 netbox/ipam/filtersets.py:1123 #: netbox/vpn/filtersets.py:374 msgid "Device (name)" msgstr "Urządzenie (nazwa)" @@ -3278,9 +3278,9 @@ msgstr "Przypisany VID" #: netbox/dcim/forms/bulk_import.py:913 netbox/dcim/forms/filtersets.py:1428 #: netbox/dcim/forms/model_forms.py:1385 #: netbox/dcim/models/device_components.py:711 -#: netbox/dcim/tables/devices.py:626 netbox/ipam/filtersets.py:316 -#: netbox/ipam/filtersets.py:327 netbox/ipam/filtersets.py:483 -#: netbox/ipam/filtersets.py:584 netbox/ipam/filtersets.py:595 +#: netbox/dcim/tables/devices.py:626 netbox/ipam/filtersets.py:318 +#: netbox/ipam/filtersets.py:329 netbox/ipam/filtersets.py:485 +#: netbox/ipam/filtersets.py:586 netbox/ipam/filtersets.py:597 #: netbox/ipam/forms/bulk_edit.py:242 netbox/ipam/forms/bulk_edit.py:298 #: netbox/ipam/forms/bulk_edit.py:340 netbox/ipam/forms/bulk_import.py:157 #: netbox/ipam/forms/bulk_import.py:243 netbox/ipam/forms/bulk_import.py:279 @@ -3307,19 +3307,19 @@ msgstr "Przypisany VID" msgid "VRF" msgstr "VRF" -#: netbox/dcim/filtersets.py:1619 netbox/ipam/filtersets.py:322 -#: netbox/ipam/filtersets.py:333 netbox/ipam/filtersets.py:489 -#: netbox/ipam/filtersets.py:590 netbox/ipam/filtersets.py:601 +#: netbox/dcim/filtersets.py:1619 netbox/ipam/filtersets.py:324 +#: netbox/ipam/filtersets.py:335 netbox/ipam/filtersets.py:491 +#: netbox/ipam/filtersets.py:592 netbox/ipam/filtersets.py:603 msgid "VRF (RD)" msgstr "VRF (RD)" -#: netbox/dcim/filtersets.py:1624 netbox/ipam/filtersets.py:1030 +#: netbox/dcim/filtersets.py:1624 netbox/ipam/filtersets.py:1032 #: netbox/vpn/filtersets.py:342 msgid "L2VPN (ID)" msgstr "L2VPN (ID)" #: netbox/dcim/filtersets.py:1630 netbox/dcim/forms/filtersets.py:1433 -#: netbox/dcim/tables/devices.py:570 netbox/ipam/filtersets.py:1036 +#: netbox/dcim/tables/devices.py:570 netbox/ipam/filtersets.py:1038 #: netbox/ipam/forms/filtersets.py:518 netbox/ipam/tables/vlans.py:137 #: netbox/templates/dcim/interface.html:93 netbox/templates/ipam/vlan.html:66 #: netbox/templates/vpn/l2vpntermination.html:12 @@ -3481,7 +3481,7 @@ msgstr "Strefa czasowa" #: netbox/dcim/forms/object_import.py:187 netbox/dcim/tables/devices.py:96 #: netbox/dcim/tables/devices.py:172 netbox/dcim/tables/devices.py:940 #: netbox/dcim/tables/devicetypes.py:80 netbox/dcim/tables/devicetypes.py:308 -#: netbox/dcim/tables/modules.py:20 netbox/dcim/tables/modules.py:60 +#: netbox/dcim/tables/modules.py:20 netbox/dcim/tables/modules.py:61 #: netbox/dcim/tables/racks.py:58 netbox/dcim/tables/racks.py:132 #: netbox/templates/dcim/devicetype.html:14 #: netbox/templates/dcim/inventoryitem.html:44 @@ -3732,7 +3732,7 @@ msgid "Device Type" msgstr "Typ urządzenia" #: netbox/dcim/forms/bulk_edit.py:598 netbox/dcim/forms/model_forms.py:401 -#: netbox/dcim/tables/modules.py:17 netbox/dcim/tables/modules.py:65 +#: netbox/dcim/tables/modules.py:17 netbox/dcim/tables/modules.py:66 #: netbox/templates/dcim/module.html:65 #: netbox/templates/dcim/modulebay.html:66 #: netbox/templates/dcim/moduletype.html:22 @@ -3840,7 +3840,7 @@ msgstr "Klaster" #: netbox/dcim/tables/devices.py:697 netbox/dcim/tables/devices.py:754 #: netbox/dcim/tables/devices.py:801 netbox/dcim/tables/devices.py:861 #: netbox/dcim/tables/devices.py:930 netbox/dcim/tables/devices.py:1057 -#: netbox/dcim/tables/modules.py:52 netbox/extras/forms/filtersets.py:321 +#: netbox/dcim/tables/modules.py:53 netbox/extras/forms/filtersets.py:321 #: netbox/ipam/forms/bulk_import.py:304 netbox/ipam/forms/bulk_import.py:505 #: netbox/ipam/forms/filtersets.py:551 netbox/ipam/forms/model_forms.py:323 #: netbox/ipam/forms/model_forms.py:712 netbox/ipam/forms/model_forms.py:745 @@ -4092,11 +4092,11 @@ msgstr "Oznaczone sieci VLAN" #: netbox/dcim/forms/bulk_edit.py:1511 msgid "Add tagged VLANs" -msgstr "" +msgstr "Dodaj oznaczone sieci VLAN" #: netbox/dcim/forms/bulk_edit.py:1520 msgid "Remove tagged VLANs" -msgstr "" +msgstr "Usuń oznaczone sieci VLAN" #: netbox/dcim/forms/bulk_edit.py:1536 netbox/dcim/forms/model_forms.py:1348 msgid "Wireless LAN group" @@ -4144,7 +4144,7 @@ msgstr "Przełączanie 802.1Q" #: netbox/dcim/forms/bulk_edit.py:1558 msgid "Add/Remove" -msgstr "" +msgstr "Dodaj/Usuń" #: netbox/dcim/forms/bulk_edit.py:1617 netbox/dcim/forms/bulk_edit.py:1619 msgid "Interface mode must be specified to assign VLANs" @@ -4222,7 +4222,7 @@ msgstr "Nazwa przypisanej roli" #: netbox/dcim/forms/bulk_import.py:264 msgid "Rack type model" -msgstr "" +msgstr "Model typu stelaża" #: netbox/dcim/forms/bulk_import.py:292 netbox/dcim/forms/bulk_import.py:435 #: netbox/dcim/forms/bulk_import.py:605 @@ -4231,11 +4231,11 @@ msgstr "Kierunek przepływu powietrza" #: netbox/dcim/forms/bulk_import.py:324 msgid "Width must be set if not specifying a rack type." -msgstr "" +msgstr "Szerokość musi być ustawiona, jeśli nie określa się typu stelaża." #: netbox/dcim/forms/bulk_import.py:326 msgid "U height must be set if not specifying a rack type." -msgstr "" +msgstr "Wysokość U musi być ustawiona, jeśli nie określa się typu stelaża." #: netbox/dcim/forms/bulk_import.py:334 msgid "Parent site" @@ -4897,6 +4897,11 @@ msgid "" "present, will be automatically replaced with the position value when " "creating a new module." msgstr "" +"Zakresy alfanumeryczne są obsługiwane do tworzenia zbiorczych. Mieszane " +"przypadki i typy w jednym zakresie nie są obsługiwane (przykład: [ge, " +"xe] -0/0/ [0-9]). Żeton {module}, jeśli jest obecny, " +"zostanie automatycznie zastąpiony wartością pozycji podczas tworzenia nowego" +" modułu." #: netbox/dcim/forms/model_forms.py:1094 msgid "Console port template" @@ -6810,7 +6815,7 @@ msgstr "Wnęsy modułowe" msgid "Inventory items" msgstr "Elementy inwentaryzacyjne" -#: netbox/dcim/tables/devices.py:305 netbox/dcim/tables/modules.py:56 +#: netbox/dcim/tables/devices.py:305 netbox/dcim/tables/modules.py:57 #: netbox/templates/dcim/modulebay.html:17 msgid "Module Bay" msgstr "Moduł Bay" @@ -7537,12 +7542,12 @@ msgstr "Zakładki" msgid "Show your personal bookmarks" msgstr "Pokaż swoje osobiste zakładki" -#: netbox/extras/events.py:147 +#: netbox/extras/events.py:151 #, python-brace-format msgid "Unknown action type for an event rule: {action_type}" msgstr "Nieznany typ akcji dla reguły zdarzenia: {action_type}" -#: netbox/extras/events.py:192 +#: netbox/extras/events.py:196 #, python-brace-format msgid "Cannot import events pipeline {name} error: {error}" msgstr "Nie można importować pociągu zdarzeń {name} błąd: {error}" @@ -9309,129 +9314,129 @@ msgstr "Eksportowanie L2VPN" msgid "Exporting L2VPN (identifier)" msgstr "Eksportowanie L2VPN (identyfikator)" -#: netbox/ipam/filtersets.py:155 netbox/ipam/filtersets.py:281 +#: netbox/ipam/filtersets.py:155 netbox/ipam/filtersets.py:283 #: netbox/ipam/forms/model_forms.py:229 netbox/ipam/tables/ip.py:212 #: netbox/templates/ipam/prefix.html:12 msgid "Prefix" msgstr "Prefiks" #: netbox/ipam/filtersets.py:159 netbox/ipam/filtersets.py:198 -#: netbox/ipam/filtersets.py:221 +#: netbox/ipam/filtersets.py:223 msgid "RIR (ID)" msgstr "RIR (ID)" #: netbox/ipam/filtersets.py:165 netbox/ipam/filtersets.py:204 -#: netbox/ipam/filtersets.py:227 +#: netbox/ipam/filtersets.py:229 msgid "RIR (slug)" msgstr "RIR (identyfikator)" -#: netbox/ipam/filtersets.py:285 +#: netbox/ipam/filtersets.py:287 msgid "Within prefix" msgstr "W prefiksie" -#: netbox/ipam/filtersets.py:289 +#: netbox/ipam/filtersets.py:291 msgid "Within and including prefix" msgstr "W i włącznie z prefiksem" -#: netbox/ipam/filtersets.py:293 +#: netbox/ipam/filtersets.py:295 msgid "Prefixes which contain this prefix or IP" msgstr "Prefiksy zawierające ten prefiks lub adres IP" -#: netbox/ipam/filtersets.py:304 netbox/ipam/filtersets.py:572 +#: netbox/ipam/filtersets.py:306 netbox/ipam/filtersets.py:574 #: netbox/ipam/forms/bulk_edit.py:343 netbox/ipam/forms/filtersets.py:196 #: netbox/ipam/forms/filtersets.py:331 msgid "Mask length" msgstr "Długość maski" -#: netbox/ipam/filtersets.py:373 netbox/vpn/filtersets.py:427 +#: netbox/ipam/filtersets.py:375 netbox/vpn/filtersets.py:427 msgid "VLAN (ID)" msgstr "VLAN (ID)" -#: netbox/ipam/filtersets.py:377 netbox/vpn/filtersets.py:422 +#: netbox/ipam/filtersets.py:379 netbox/vpn/filtersets.py:422 msgid "VLAN number (1-4094)" msgstr "Numer VLAN (1-4094)" -#: netbox/ipam/filtersets.py:471 netbox/ipam/filtersets.py:475 -#: netbox/ipam/filtersets.py:567 netbox/ipam/forms/model_forms.py:496 +#: netbox/ipam/filtersets.py:473 netbox/ipam/filtersets.py:477 +#: netbox/ipam/filtersets.py:569 netbox/ipam/forms/model_forms.py:496 #: netbox/templates/tenancy/contact.html:53 #: netbox/tenancy/forms/bulk_edit.py:113 msgid "Address" msgstr "Adres" -#: netbox/ipam/filtersets.py:479 +#: netbox/ipam/filtersets.py:481 msgid "Ranges which contain this prefix or IP" msgstr "Zakresy zawierające ten prefiks lub adres IP" -#: netbox/ipam/filtersets.py:507 netbox/ipam/filtersets.py:563 +#: netbox/ipam/filtersets.py:509 netbox/ipam/filtersets.py:565 msgid "Parent prefix" msgstr "Prefiks nadrzędny" -#: netbox/ipam/filtersets.py:616 netbox/ipam/filtersets.py:856 -#: netbox/ipam/filtersets.py:1131 netbox/vpn/filtersets.py:385 +#: netbox/ipam/filtersets.py:618 netbox/ipam/filtersets.py:858 +#: netbox/ipam/filtersets.py:1133 netbox/vpn/filtersets.py:385 msgid "Virtual machine (name)" msgstr "Maszyna wirtualna (nazwa)" -#: netbox/ipam/filtersets.py:621 netbox/ipam/filtersets.py:861 -#: netbox/ipam/filtersets.py:1125 netbox/virtualization/filtersets.py:282 +#: netbox/ipam/filtersets.py:623 netbox/ipam/filtersets.py:863 +#: netbox/ipam/filtersets.py:1127 netbox/virtualization/filtersets.py:282 #: netbox/virtualization/filtersets.py:321 netbox/vpn/filtersets.py:390 msgid "Virtual machine (ID)" msgstr "Maszyna wirtualna (ID)" -#: netbox/ipam/filtersets.py:627 netbox/vpn/filtersets.py:97 +#: netbox/ipam/filtersets.py:629 netbox/vpn/filtersets.py:97 #: netbox/vpn/filtersets.py:396 msgid "Interface (name)" msgstr "Interfejs (nazwa)" -#: netbox/ipam/filtersets.py:638 netbox/vpn/filtersets.py:108 +#: netbox/ipam/filtersets.py:640 netbox/vpn/filtersets.py:108 #: netbox/vpn/filtersets.py:407 msgid "VM interface (name)" msgstr "Interfejs maszyny wirtualnej (nazwa)" -#: netbox/ipam/filtersets.py:643 netbox/vpn/filtersets.py:113 +#: netbox/ipam/filtersets.py:645 netbox/vpn/filtersets.py:113 msgid "VM interface (ID)" msgstr "Interfejs maszyny wirtualnej (ID)" -#: netbox/ipam/filtersets.py:648 +#: netbox/ipam/filtersets.py:650 msgid "FHRP group (ID)" msgstr "Grupa FHRP (ID)" -#: netbox/ipam/filtersets.py:652 +#: netbox/ipam/filtersets.py:654 msgid "Is assigned to an interface" msgstr "Jest przypisany do interfejsu" -#: netbox/ipam/filtersets.py:656 +#: netbox/ipam/filtersets.py:658 msgid "Is assigned" msgstr "Jest przypisany" -#: netbox/ipam/filtersets.py:668 +#: netbox/ipam/filtersets.py:670 msgid "Service (ID)" msgstr "Usługa (ID)" -#: netbox/ipam/filtersets.py:673 +#: netbox/ipam/filtersets.py:675 msgid "NAT inside IP address (ID)" msgstr "NAT wewnątrz adresu IP (ID)" -#: netbox/ipam/filtersets.py:1041 netbox/ipam/forms/bulk_import.py:322 +#: netbox/ipam/filtersets.py:1043 netbox/ipam/forms/bulk_import.py:322 msgid "Assigned interface" msgstr "Przypisany interfejs" -#: netbox/ipam/filtersets.py:1046 +#: netbox/ipam/filtersets.py:1048 msgid "Assigned VM interface" msgstr "Przypisany interfejs maszyny wirtualnej" -#: netbox/ipam/filtersets.py:1136 +#: netbox/ipam/filtersets.py:1138 msgid "IP address (ID)" msgstr "Adres IP (ID)" -#: netbox/ipam/filtersets.py:1142 netbox/ipam/models/ip.py:788 +#: netbox/ipam/filtersets.py:1144 netbox/ipam/models/ip.py:788 msgid "IP address" msgstr "Adres IP" -#: netbox/ipam/filtersets.py:1167 +#: netbox/ipam/filtersets.py:1169 msgid "Primary IPv4 (ID)" msgstr "Podstawowy IPv4 (ID)" -#: netbox/ipam/filtersets.py:1172 +#: netbox/ipam/filtersets.py:1174 msgid "Primary IPv6 (ID)" msgstr "Podstawowy IPv6 (ID)" @@ -9655,11 +9660,11 @@ msgstr "Ustaw to podstawowy adres IP przypisanego urządzenia" #: netbox/ipam/forms/bulk_import.py:330 msgid "Is out-of-band" -msgstr "" +msgstr "Jest poza pasmem" #: netbox/ipam/forms/bulk_import.py:331 msgid "Designate this as the out-of-band IP address for the assigned device" -msgstr "" +msgstr "Oznacz to jako adres IP poza pasmem przypisanego urządzenia" #: netbox/ipam/forms/bulk_import.py:371 msgid "No device or virtual machine specified; cannot set as primary IP" @@ -9669,11 +9674,11 @@ msgstr "" #: netbox/ipam/forms/bulk_import.py:375 msgid "No device specified; cannot set as out-of-band IP" -msgstr "" +msgstr "Brak określonego urządzenia; nie można ustawić jako IP poza pasmem" #: netbox/ipam/forms/bulk_import.py:379 msgid "Cannot set out-of-band IP for virtual machines" -msgstr "" +msgstr "Nie można ustawić adresu IP poza pasmem dla maszyn wirtualnych" #: netbox/ipam/forms/bulk_import.py:383 msgid "No interface specified; cannot set as primary IP" @@ -9682,7 +9687,7 @@ msgstr "" #: netbox/ipam/forms/bulk_import.py:387 msgid "No interface specified; cannot set as out-of-band IP" -msgstr "" +msgstr "Nie określono interfejsu; nie można ustawić jako IP poza pasmem" #: netbox/ipam/forms/bulk_import.py:422 msgid "Auth type" @@ -9859,7 +9864,7 @@ msgstr "Ustaw to podstawowy adres IP urządzenia/maszyny wirtualnej" #: netbox/ipam/forms/model_forms.py:314 msgid "Make this the out-of-band IP for the device" -msgstr "" +msgstr "Ustaw to poza pasmem IP urządzenia" #: netbox/ipam/forms/model_forms.py:329 msgid "NAT IP (Inside)" @@ -9872,10 +9877,14 @@ msgstr "Adres IP może być przypisany tylko do jednego obiektu." #: netbox/ipam/forms/model_forms.py:398 msgid "Cannot reassign primary IP address for the parent device/VM" msgstr "" +"Nie można ponownie przypisać głównego adresu IP urządzenia " +"nadrzędnego/maszyny wirtualnej" #: netbox/ipam/forms/model_forms.py:402 msgid "Cannot reassign out-of-Band IP address for the parent device" msgstr "" +"Nie można ponownie przypisać adresu IP poza pasmem dla urządzenia " +"nadrzędnego" #: netbox/ipam/forms/model_forms.py:412 msgid "" @@ -9889,6 +9898,8 @@ msgid "" "Only IP addresses assigned to a device interface can be designated as the " "out-of-band IP for a device." msgstr "" +"Tylko adresy IP przypisane do interfejsu urządzenia mogą być oznaczone jako " +"adres IP poza pasmem dla urządzenia." #: netbox/ipam/forms/model_forms.py:508 msgid "Virtual IP Address" @@ -10290,11 +10301,15 @@ msgstr "Nie można ustawić scope_id bez scope_type." #, python-brace-format msgid "Starting VLAN ID in range ({value}) cannot be less than {minimum}" msgstr "" +"Uruchamianie identyfikatora VLAN w zakresie ({value}) nie może być mniejszy " +"niż {minimum}" #: netbox/ipam/models/vlans.py:111 #, python-brace-format msgid "Ending VLAN ID in range ({value}) cannot exceed {maximum}" msgstr "" +"Zakończenie identyfikatora VLAN w zakresie ({value}) nie może przekroczyć " +"{maximum}" #: netbox/ipam/models/vlans.py:118 #, python-brace-format @@ -10302,6 +10317,8 @@ msgid "" "Ending VLAN ID in range must be greater than or equal to the starting VLAN " "ID ({range})" msgstr "" +"Kończący identyfikator VLAN w zakresie musi być większy lub równy " +"początkowemu identyfikatorowi VLAN ({range})" #: netbox/ipam/models/vlans.py:124 msgid "Ranges cannot overlap." @@ -12665,11 +12682,11 @@ msgstr "Ściągnij" #: netbox/templates/dcim/device/render_config.html:64 #: netbox/templates/virtualization/virtualmachine/render_config.html:64 msgid "Error rendering template" -msgstr "" +msgstr "Szablon renderowania błędu" #: netbox/templates/dcim/device/render_config.html:70 msgid "No configuration template has been assigned for this device." -msgstr "" +msgstr "Dla tego urządzenia nie przypisano szablonu konfiguracji." #: netbox/templates/dcim/device_edit.html:44 msgid "Parent Bay" @@ -13536,7 +13553,7 @@ msgstr "Uruchom ponownie" #: netbox/templates/extras/script_list.html:133 #, python-format msgid "Could not load scripts from module %(module)s" -msgstr "" +msgstr "Nie można załadować skryptów z modułu %(module)s" #: netbox/templates/extras/script_list.html:141 msgid "No Scripts Found" @@ -14351,7 +14368,7 @@ msgstr "Dodaj dysk wirtualny" #: netbox/templates/virtualization/virtualmachine/render_config.html:70 msgid "No configuration template has been assigned for this virtual machine." -msgstr "" +msgstr "Dla tej maszyny wirtualnej nie przypisano szablonu konfiguracji." #: netbox/templates/vpn/ikepolicy.html:10 #: netbox/templates/vpn/ipsecprofile.html:33 netbox/vpn/tables/crypto.py:166 @@ -15430,12 +15447,12 @@ msgstr "Pamięć (MB)" #: netbox/virtualization/forms/bulk_edit.py:174 msgid "Disk (MB)" -msgstr "" +msgstr "Dysk (MB)" #: netbox/virtualization/forms/bulk_edit.py:334 #: netbox/virtualization/forms/filtersets.py:251 msgid "Size (MB)" -msgstr "" +msgstr "Rozmiar (MB)" #: netbox/virtualization/forms/bulk_import.py:44 msgid "Type of cluster" @@ -15646,19 +15663,19 @@ msgstr "GREE" #: netbox/vpn/choices.py:39 msgid "WireGuard" -msgstr "" +msgstr "WireGuard" #: netbox/vpn/choices.py:40 msgid "OpenVPN" -msgstr "" +msgstr "OpenVPN" #: netbox/vpn/choices.py:41 msgid "L2TP" -msgstr "" +msgstr "L2TP" #: netbox/vpn/choices.py:42 msgid "PPTP" -msgstr "" +msgstr "PPTP" #: netbox/vpn/choices.py:64 msgid "Hub" diff --git a/netbox/translations/pt/LC_MESSAGES/django.mo b/netbox/translations/pt/LC_MESSAGES/django.mo index e6d410f9aded3682f2deff92278b880cc7ebea54..b5d32e4cdf62750456dbd48ec94ed63d2e10b49c 100644 GIT binary patch delta 25153 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%0AXIm5^dof<(@Bb1cT*DfejzF{nI*=adi2I{U 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 diff --git a/netbox/translations/pt/LC_MESSAGES/django.po b/netbox/translations/pt/LC_MESSAGES/django.po index 496b8dda1..71250e297 100644 --- a/netbox/translations/pt/LC_MESSAGES/django.po +++ b/netbox/translations/pt/LC_MESSAGES/django.po @@ -6,17 +6,17 @@ # Translators: # Renato Almeida de Oliveira, 2023 # Fer22f , 2024 -# Jeremy Stretch, 2024 -# Fabricio Maciel, 2024 +# Jeremy Stretch, 2025 +# Fabricio Maciel, 2025 # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2024-12-13 05:02+0000\n" +"POT-Creation-Date: 2025-01-04 05:02+0000\n" "PO-Revision-Date: 2023-10-30 17:48+0000\n" -"Last-Translator: Fabricio Maciel, 2024\n" +"Last-Translator: Fabricio Maciel, 2025\n" "Language-Team: Portuguese (https://app.transifex.com/netbox-community/teams/178115/pt/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -669,7 +669,7 @@ msgstr "Conta do provedor" #: netbox/dcim/forms/filtersets.py:924 netbox/dcim/forms/filtersets.py:958 #: netbox/dcim/forms/filtersets.py:1059 netbox/dcim/forms/filtersets.py:1170 #: netbox/dcim/tables/devices.py:140 netbox/dcim/tables/devices.py:817 -#: netbox/dcim/tables/devices.py:1063 netbox/dcim/tables/modules.py:69 +#: netbox/dcim/tables/devices.py:1063 netbox/dcim/tables/modules.py:70 #: netbox/dcim/tables/power.py:74 netbox/dcim/tables/racks.py:126 #: netbox/dcim/tables/sites.py:82 netbox/dcim/tables/sites.py:138 #: netbox/ipam/forms/bulk_edit.py:256 netbox/ipam/forms/bulk_edit.py:306 @@ -984,7 +984,7 @@ msgstr "Rede do provedor" #: netbox/wireless/forms/model_forms.py:87 #: netbox/wireless/forms/model_forms.py:129 msgid "Location" -msgstr "Localização" +msgstr "Local" #: netbox/circuits/forms/filtersets.py:32 #: netbox/circuits/forms/filtersets.py:120 netbox/dcim/forms/filtersets.py:144 @@ -1299,15 +1299,15 @@ msgstr "terminações dos circuitos" msgid "" "A circuit termination must attach to either a site or a provider network." msgstr "" -"Uma terminação de circuito deve ser conectada a um site ou a uma rede do " +"Uma terminação de circuito deve ser conectada a um site ou a uma rede de " "provedor." #: netbox/circuits/models/circuits.py:310 msgid "" "A circuit termination cannot attach to both a site and a provider network." msgstr "" -"Uma terminação de circuito não pode ser conectada ao mesmo tempo a um site e" -" a uma rede do provedor." +"Uma terminação de circuito não pode ser conectada a um site e a uma rede de " +"provedor ao mesmo tempo." #: netbox/circuits/models/providers.py:22 #: netbox/circuits/models/providers.py:66 @@ -1544,7 +1544,7 @@ msgstr "Taxa Garantida" #: netbox/circuits/tables/providers.py:82 #: netbox/circuits/tables/providers.py:107 netbox/dcim/tables/devices.py:1036 #: netbox/dcim/tables/devicetypes.py:92 netbox/dcim/tables/modules.py:29 -#: netbox/dcim/tables/modules.py:72 netbox/dcim/tables/power.py:39 +#: netbox/dcim/tables/modules.py:73 netbox/dcim/tables/power.py:39 #: netbox/dcim/tables/power.py:96 netbox/dcim/tables/racks.py:84 #: netbox/dcim/tables/racks.py:145 netbox/dcim/tables/racks.py:225 #: netbox/dcim/tables/sites.py:108 netbox/extras/tables/tables.py:582 @@ -2958,23 +2958,23 @@ msgstr "AS (ID)" #: netbox/dcim/filtersets.py:246 msgid "Parent location (ID)" -msgstr "Localização principal (ID)" +msgstr "Local pai (ID)" #: netbox/dcim/filtersets.py:252 msgid "Parent location (slug)" -msgstr "Localização principal (slug)" +msgstr "Local pai (slug)" #: netbox/dcim/filtersets.py:258 netbox/dcim/filtersets.py:369 #: netbox/dcim/filtersets.py:490 netbox/dcim/filtersets.py:1057 #: netbox/dcim/filtersets.py:1404 netbox/dcim/filtersets.py:2182 msgid "Location (ID)" -msgstr "Localização (ID)" +msgstr "Local (ID)" #: netbox/dcim/filtersets.py:265 netbox/dcim/filtersets.py:376 #: netbox/dcim/filtersets.py:497 netbox/dcim/filtersets.py:1410 #: netbox/extras/filtersets.py:542 msgid "Location (slug)" -msgstr "Localização (slug)" +msgstr "Local (slug)" #: netbox/dcim/filtersets.py:296 netbox/dcim/filtersets.py:381 #: netbox/dcim/filtersets.py:539 netbox/dcim/filtersets.py:678 @@ -3488,7 +3488,7 @@ msgstr "Fuso horário" #: netbox/dcim/forms/object_import.py:187 netbox/dcim/tables/devices.py:96 #: netbox/dcim/tables/devices.py:172 netbox/dcim/tables/devices.py:940 #: netbox/dcim/tables/devicetypes.py:80 netbox/dcim/tables/devicetypes.py:308 -#: netbox/dcim/tables/modules.py:20 netbox/dcim/tables/modules.py:60 +#: netbox/dcim/tables/modules.py:20 netbox/dcim/tables/modules.py:61 #: netbox/dcim/tables/racks.py:58 netbox/dcim/tables/racks.py:132 #: netbox/templates/dcim/devicetype.html:14 #: netbox/templates/dcim/inventoryitem.html:44 @@ -3739,7 +3739,7 @@ msgid "Device Type" msgstr "Tipo de Dispositivo" #: netbox/dcim/forms/bulk_edit.py:598 netbox/dcim/forms/model_forms.py:401 -#: netbox/dcim/tables/modules.py:17 netbox/dcim/tables/modules.py:65 +#: netbox/dcim/tables/modules.py:17 netbox/dcim/tables/modules.py:66 #: netbox/templates/dcim/module.html:65 #: netbox/templates/dcim/modulebay.html:66 #: netbox/templates/dcim/moduletype.html:22 @@ -3847,7 +3847,7 @@ msgstr "Cluster" #: netbox/dcim/tables/devices.py:697 netbox/dcim/tables/devices.py:754 #: netbox/dcim/tables/devices.py:801 netbox/dcim/tables/devices.py:861 #: netbox/dcim/tables/devices.py:930 netbox/dcim/tables/devices.py:1057 -#: netbox/dcim/tables/modules.py:52 netbox/extras/forms/filtersets.py:321 +#: netbox/dcim/tables/modules.py:53 netbox/extras/forms/filtersets.py:321 #: netbox/ipam/forms/bulk_import.py:304 netbox/ipam/forms/bulk_import.py:505 #: netbox/ipam/forms/filtersets.py:551 netbox/ipam/forms/model_forms.py:323 #: netbox/ipam/forms/model_forms.py:712 netbox/ipam/forms/model_forms.py:745 @@ -4193,11 +4193,11 @@ msgstr "Site designado" #: netbox/dcim/forms/bulk_import.py:141 msgid "Parent location" -msgstr "Localização principal" +msgstr "Local pai" #: netbox/dcim/forms/bulk_import.py:143 msgid "Location not found." -msgstr "Localização não encontrada." +msgstr "Local não encontrado." #: netbox/dcim/forms/bulk_import.py:185 msgid "The manufacturer of this rack type" @@ -6155,12 +6155,12 @@ msgstr "Rack {rack} não pertence ao site {site}." #: netbox/dcim/models/devices.py:840 #, python-brace-format msgid "Location {location} does not belong to site {site}." -msgstr "Localização {location} não pertence ao site {site}." +msgstr "Local {location} não pertence ao site {site}." #: netbox/dcim/models/devices.py:846 #, python-brace-format msgid "Rack {rack} does not belong to location {location}." -msgstr "Rack {rack} não pertence à localização {location}." +msgstr "Rack {rack} não pertence ao local {location}." #: netbox/dcim/models/devices.py:853 msgid "Cannot select a rack face without assigning a rack." @@ -6357,7 +6357,7 @@ msgstr "quadros de alimentação" msgid "" "Location {location} ({location_site}) is in a different site than {site}" msgstr "" -"Localização {location} ({location_site}) está em um site diferente do {site}" +"Local {location} ({location_site}) está em um site diferente do {site}" #: netbox/dcim/models/power.py:108 msgid "supply" @@ -6536,7 +6536,7 @@ msgstr "racks" #: netbox/dcim/models/racks.py:375 #, python-brace-format msgid "Assigned location must belong to parent site ({site})." -msgstr "A localização definida deve pertencer ao site principal ({site})." +msgstr "O local definido deve pertencer ao site principal ({site})." #: netbox/dcim/models/racks.py:393 #, python-brace-format @@ -6559,7 +6559,7 @@ msgstr "" #: netbox/dcim/models/racks.py:408 #, python-brace-format msgid "Location must be from the same site, {site}." -msgstr "A localização deve ser do mesmo site, {site}." +msgstr "O local deve ser do mesmo site, {site}." #: netbox/dcim/models/racks.py:670 msgid "units" @@ -6653,25 +6653,24 @@ msgstr "sites" #: netbox/dcim/models/sites.py:309 msgid "A location with this name already exists within the specified site." -msgstr "Já existe uma localização com este nome no site especificado." +msgstr "Já existe um local com este nome no site especificado." #: netbox/dcim/models/sites.py:319 msgid "A location with this slug already exists within the specified site." -msgstr "Já existe uma localização com este slug no site especificado." +msgstr "Já existe um local com este slug no site especificado." #: netbox/dcim/models/sites.py:322 msgid "location" -msgstr "localização" +msgstr "local" #: netbox/dcim/models/sites.py:323 msgid "locations" -msgstr "localizações" +msgstr "locais" #: netbox/dcim/models/sites.py:337 #, python-brace-format msgid "Parent location ({parent}) must belong to the same site ({site})." -msgstr "" -"Localização principal ({parent}) deve pertencer ao mesmo site ({site})." +msgstr "Local principal ({parent}) deve pertencer ao mesmo site ({site})." #: netbox/dcim/tables/cables.py:55 msgid "Termination A" @@ -6691,11 +6690,11 @@ msgstr "Dispositivo B" #: netbox/dcim/tables/cables.py:78 msgid "Location A" -msgstr "Localização A" +msgstr "Local A" #: netbox/dcim/tables/cables.py:84 msgid "Location B" -msgstr "Localização B" +msgstr "Local B" #: netbox/dcim/tables/cables.py:90 msgid "Rack A" @@ -6840,7 +6839,7 @@ msgstr "Compartimentos de módulos" msgid "Inventory items" msgstr "Itens de inventário" -#: netbox/dcim/tables/devices.py:305 netbox/dcim/tables/modules.py:56 +#: netbox/dcim/tables/devices.py:305 netbox/dcim/tables/modules.py:57 #: netbox/templates/dcim/modulebay.html:17 msgid "Module Bay" msgstr "Compartimento de módulo" @@ -7571,12 +7570,12 @@ msgstr "Favoritos" msgid "Show your personal bookmarks" msgstr "Exibe seus favoritos pessoais" -#: netbox/extras/events.py:147 +#: netbox/extras/events.py:151 #, python-brace-format msgid "Unknown action type for an event rule: {action_type}" msgstr "Tipo de ação desconhecido para uma regra de evento: {action_type}" -#: netbox/extras/events.py:192 +#: netbox/extras/events.py:196 #, python-brace-format msgid "Cannot import events pipeline {name} error: {error}" msgstr "Não é possível importar o pipeline de eventos {name}: {error}" @@ -7937,7 +7936,7 @@ msgstr "Grupos de sites" #: netbox/extras/forms/model_forms.py:522 netbox/netbox/navigation/menu.py:20 #: netbox/templates/dcim/site.html:127 msgid "Locations" -msgstr "Localizações" +msgstr "Locais" #: netbox/extras/forms/filtersets.py:361 #: netbox/extras/forms/model_forms.py:527 @@ -9887,7 +9886,7 @@ msgstr "Intervalo de ASN" #: netbox/ipam/forms/model_forms.py:231 msgid "Site/VLAN Assignment" -msgstr "Atribuição de Site/VLAN" +msgstr "Atribuição de site/VLAN" #: netbox/ipam/forms/model_forms.py:259 netbox/templates/ipam/iprange.html:10 msgid "IP Range" @@ -12995,11 +12994,11 @@ msgstr "Part ID" #: netbox/templates/dcim/location.html:17 msgid "Add Child Location" -msgstr "Adicionar Sub-Localização" +msgstr "Adicionar Local Filho" #: netbox/templates/dcim/location.html:77 msgid "Child Locations" -msgstr "Sub-Localizações" +msgstr "Locais Filhos" #: netbox/templates/dcim/location.html:81 netbox/templates/dcim/site.html:131 msgid "Add a Location" @@ -13129,7 +13128,7 @@ msgstr "Adicionar Site" #: netbox/templates/dcim/region.html:55 msgid "Child Regions" -msgstr "Regiões de Sub-Localizações" +msgstr "Regiões Filhas" #: netbox/templates/dcim/region.html:59 msgid "Add Region" @@ -13160,7 +13159,7 @@ msgstr "Endereço de Entrega" #: netbox/templates/tenancy/tenantgroup.html:55 #: netbox/templates/wireless/wirelesslangroup.html:55 msgid "Child Groups" -msgstr "Grupos de Sub-Localizações" +msgstr "Grupos Filhos" #: netbox/templates/dcim/sitegroup.html:59 msgid "Add Site Group" @@ -15513,8 +15512,8 @@ msgid "" "{device} belongs to a different site ({device_site}) than the cluster " "({cluster_site})" msgstr "" -"{device} pertence ao site ({device_site}), diferente do que pertence o " -"cluster ({cluster_site})" +"{device} pertence a um site diferente ({device_site}) do que o cluster " +"({cluster_site})" #: netbox/virtualization/forms/model_forms.py:192 msgid "Optionally pin this VM to a specific host device within the cluster" @@ -16249,8 +16248,7 @@ msgstr "links wireless" #: netbox/wireless/models.py:236 msgid "Must specify a unit when setting a wireless distance" -msgstr "" -"É necessário especificar uma unidade ao definir uma distância sem fio." +msgstr "É necessário especificar uma unidade ao definir uma distância sem fio" #: netbox/wireless/models.py:242 netbox/wireless/models.py:248 #, python-brace-format diff --git a/netbox/translations/tr/LC_MESSAGES/django.mo b/netbox/translations/tr/LC_MESSAGES/django.mo index 0455483e341d22e0cc83af209e5287d448ff34cf..fa94a7573093e28f94b118bc3da173cd820e343c 100644 GIT binary patch delta 69148 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

2_ zX3fjDoV*Q;m^2a_49l)p27MbLi)={^jd+;N-`RF;1hX;D(7-K-)7nZ!>`w!USY>*O z%@5Vg0Xa--pO}~*7_cgAC4lY%kfazxjEPqy{|WCQ7N zD&r4q2_U*?+h3FBDxwFIw1wo$9EPy0;5Yg>^kDSbR!F2D8S#mKOR*h{A#lxrcRw+C z7;UV06yj9hvl$XeT%08!Eel~?iiXAh5_>xmzJPvUE`0ZF`=>y>l9&w21JhGXvfTww z9qdWqc|u%vuo?am@-zPzoE45I!qrGjNm0pfBe;)Ek^)QviDWBDms!;e8rWjCn5-&9 zw%`xote#1e#o?Pk-0VofP5u4KWe!T3&2MjT#O!|K69(U?=od43u(y$4tK`9b2KrqJ z8(ej`U$3x1$;SD`3OZKNFM4o{aencl2CWP7s}_`bj$huOS3!PJgICP)D;g%K$UwhH z!F3k-b@U59zSysle{j5|ennyjx8C7bym;{SFMjdkM(W(URf`_2lUHfcvr};1DE=jr zC#c)GMeF`OJGbbQyl&Ry)q8Yn-J)yeW z_=_Vh?7gu2;_#praRcH7*E!)|F>+9!n7fXGpTljIF39W^LpnSc~QbMgj6-BBjsNt~eijRIl?1vLza6IFd(9CmT| zh0PcCUYs3Ne1SK1(4@xRa6yme`X>sy)F7Z~@Tf)s^}+{TY#p#YC|TQpkwM+s&_cs@ z0be2p=ja)bEg-mkpMXW)puO`0vIZ9z7|=9Z(2~^w@q5aTGgU2@XPRbr>H+}8B iu>IobixY#>Pw<9~7}TM8K!PB?$vRAM!CBrl;r<_#GlGr) diff --git a/netbox/translations/uk/LC_MESSAGES/django.po b/netbox/translations/uk/LC_MESSAGES/django.po index 1588a5495..7b9ad8767 100644 --- a/netbox/translations/uk/LC_MESSAGES/django.po +++ b/netbox/translations/uk/LC_MESSAGES/django.po @@ -5,17 +5,17 @@ # # Translators: # Volodymyr Pidgornyi, 2024 -# Jeremy Stretch, 2024 # Vladyslav V. Prodan, 2024 +# Jeremy Stretch, 2025 # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2024-12-12 05:02+0000\n" +"POT-Creation-Date: 2025-01-04 05:02+0000\n" "PO-Revision-Date: 2023-10-30 17:48+0000\n" -"Last-Translator: Vladyslav V. Prodan, 2024\n" +"Last-Translator: Jeremy Stretch, 2025\n" "Language-Team: Ukrainian (https://app.transifex.com/netbox-community/teams/178115/uk/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -152,7 +152,7 @@ msgstr "Неактивний" #: netbox/dcim/filtersets.py:464 netbox/dcim/filtersets.py:1021 #: netbox/dcim/filtersets.py:1368 netbox/dcim/filtersets.py:1903 #: netbox/dcim/filtersets.py:2146 netbox/dcim/filtersets.py:2204 -#: netbox/ipam/filtersets.py:339 netbox/ipam/filtersets.py:959 +#: netbox/ipam/filtersets.py:341 netbox/ipam/filtersets.py:961 #: netbox/virtualization/filtersets.py:45 #: netbox/virtualization/filtersets.py:173 netbox/vpn/filtersets.py:358 msgid "Region (ID)" @@ -164,8 +164,8 @@ msgstr "Регіон (ідентифікатор)" #: netbox/dcim/filtersets.py:471 netbox/dcim/filtersets.py:1028 #: netbox/dcim/filtersets.py:1375 netbox/dcim/filtersets.py:1910 #: netbox/dcim/filtersets.py:2153 netbox/dcim/filtersets.py:2211 -#: netbox/extras/filtersets.py:509 netbox/ipam/filtersets.py:346 -#: netbox/ipam/filtersets.py:966 netbox/virtualization/filtersets.py:52 +#: netbox/extras/filtersets.py:509 netbox/ipam/filtersets.py:348 +#: netbox/ipam/filtersets.py:968 netbox/virtualization/filtersets.py:52 #: netbox/virtualization/filtersets.py:180 netbox/vpn/filtersets.py:353 msgid "Region (slug)" msgstr "Регіон (скорочення)" @@ -175,8 +175,8 @@ msgstr "Регіон (скорочення)" #: netbox/dcim/filtersets.py:346 netbox/dcim/filtersets.py:477 #: netbox/dcim/filtersets.py:1034 netbox/dcim/filtersets.py:1381 #: netbox/dcim/filtersets.py:1916 netbox/dcim/filtersets.py:2159 -#: netbox/dcim/filtersets.py:2217 netbox/ipam/filtersets.py:352 -#: netbox/ipam/filtersets.py:972 netbox/virtualization/filtersets.py:58 +#: netbox/dcim/filtersets.py:2217 netbox/ipam/filtersets.py:354 +#: netbox/ipam/filtersets.py:974 netbox/virtualization/filtersets.py:58 #: netbox/virtualization/filtersets.py:186 msgid "Site group (ID)" msgstr "Група тех. майданчиків (ідентифікатор)" @@ -187,7 +187,7 @@ msgstr "Група тех. майданчиків (ідентифікатор)" #: netbox/dcim/filtersets.py:1041 netbox/dcim/filtersets.py:1388 #: netbox/dcim/filtersets.py:1923 netbox/dcim/filtersets.py:2166 #: netbox/dcim/filtersets.py:2224 netbox/extras/filtersets.py:515 -#: netbox/ipam/filtersets.py:359 netbox/ipam/filtersets.py:979 +#: netbox/ipam/filtersets.py:361 netbox/ipam/filtersets.py:981 #: netbox/virtualization/filtersets.py:65 #: netbox/virtualization/filtersets.py:193 msgid "Site group (slug)" @@ -257,8 +257,8 @@ msgstr "Тех. майданчик" #: netbox/circuits/filtersets.py:62 netbox/circuits/filtersets.py:229 #: netbox/circuits/filtersets.py:274 netbox/dcim/filtersets.py:242 #: netbox/dcim/filtersets.py:363 netbox/dcim/filtersets.py:458 -#: netbox/extras/filtersets.py:531 netbox/ipam/filtersets.py:238 -#: netbox/ipam/filtersets.py:369 netbox/ipam/filtersets.py:989 +#: netbox/extras/filtersets.py:531 netbox/ipam/filtersets.py:240 +#: netbox/ipam/filtersets.py:371 netbox/ipam/filtersets.py:991 #: netbox/virtualization/filtersets.py:75 #: netbox/virtualization/filtersets.py:203 netbox/vpn/filtersets.py:363 msgid "Site (slug)" @@ -277,13 +277,13 @@ msgstr "ASN" #: netbox/circuits/filtersets.py:95 netbox/circuits/filtersets.py:122 #: netbox/circuits/filtersets.py:156 netbox/circuits/filtersets.py:283 -#: netbox/circuits/filtersets.py:325 netbox/ipam/filtersets.py:243 +#: netbox/circuits/filtersets.py:325 netbox/ipam/filtersets.py:245 msgid "Provider (ID)" msgstr "Провайдер (ідентифікатор)" #: netbox/circuits/filtersets.py:101 netbox/circuits/filtersets.py:128 #: netbox/circuits/filtersets.py:162 netbox/circuits/filtersets.py:289 -#: netbox/circuits/filtersets.py:331 netbox/ipam/filtersets.py:249 +#: netbox/circuits/filtersets.py:331 netbox/ipam/filtersets.py:251 msgid "Provider (slug)" msgstr "Провайдер (скорочення)" @@ -312,8 +312,8 @@ msgstr "Тип каналу зв'язку (скорочення)" #: netbox/dcim/filtersets.py:452 netbox/dcim/filtersets.py:1045 #: netbox/dcim/filtersets.py:1393 netbox/dcim/filtersets.py:1928 #: netbox/dcim/filtersets.py:2170 netbox/dcim/filtersets.py:2229 -#: netbox/ipam/filtersets.py:232 netbox/ipam/filtersets.py:363 -#: netbox/ipam/filtersets.py:983 netbox/virtualization/filtersets.py:69 +#: netbox/ipam/filtersets.py:234 netbox/ipam/filtersets.py:365 +#: netbox/ipam/filtersets.py:985 netbox/virtualization/filtersets.py:69 #: netbox/virtualization/filtersets.py:197 netbox/vpn/filtersets.py:368 msgid "Site (ID)" msgstr "Тех. майданчик (ідентифікатор)" @@ -667,7 +667,7 @@ msgstr "Обліковий запис постачальника" #: netbox/dcim/forms/filtersets.py:924 netbox/dcim/forms/filtersets.py:958 #: netbox/dcim/forms/filtersets.py:1059 netbox/dcim/forms/filtersets.py:1170 #: netbox/dcim/tables/devices.py:140 netbox/dcim/tables/devices.py:817 -#: netbox/dcim/tables/devices.py:1063 netbox/dcim/tables/modules.py:69 +#: netbox/dcim/tables/devices.py:1063 netbox/dcim/tables/modules.py:70 #: netbox/dcim/tables/power.py:74 netbox/dcim/tables/racks.py:126 #: netbox/dcim/tables/sites.py:82 netbox/dcim/tables/sites.py:138 #: netbox/ipam/forms/bulk_edit.py:256 netbox/ipam/forms/bulk_edit.py:306 @@ -1102,7 +1102,7 @@ msgstr "Призначення" #: netbox/circuits/tables/circuits.py:155 netbox/dcim/forms/bulk_edit.py:118 #: netbox/dcim/forms/bulk_import.py:100 netbox/dcim/forms/model_forms.py:117 #: netbox/dcim/tables/sites.py:89 netbox/extras/forms/filtersets.py:480 -#: netbox/ipam/filtersets.py:999 netbox/ipam/forms/bulk_edit.py:493 +#: netbox/ipam/filtersets.py:1001 netbox/ipam/forms/bulk_edit.py:493 #: netbox/ipam/forms/bulk_import.py:460 netbox/ipam/forms/model_forms.py:561 #: netbox/ipam/tables/fhrp.py:67 netbox/ipam/tables/vlans.py:122 #: netbox/ipam/tables/vlans.py:226 @@ -1235,7 +1235,7 @@ msgstr "Призначення групи каналів зв'язку" #: netbox/circuits/models/circuits.py:240 msgid "termination" -msgstr "кінець" +msgstr "припинення" #: netbox/circuits/models/circuits.py:257 msgid "port speed (Kbps)" @@ -1298,15 +1298,14 @@ msgstr "кінці каналу зв'язку" msgid "" "A circuit termination must attach to either a site or a provider network." msgstr "" -"Кінець каналу зв'язку повинно приєднатися або до тех. майданчику, або до " -"мережі провайдера." +"Припинення схеми повинно приєднатися або до сайту, або до мережі провайдера." #: netbox/circuits/models/circuits.py:310 msgid "" "A circuit termination cannot attach to both a site and a provider network." msgstr "" -"Обідви кінці каналу зв'язку не може приєднатися як до тех. майданчику, так і" -" до мережі провайдера." +"Припинення схеми не може приєднатися як до сайту, так і до мережі " +"провайдера." #: netbox/circuits/models/providers.py:22 #: netbox/circuits/models/providers.py:66 @@ -1543,7 +1542,7 @@ msgstr "Гарантований процент чи коефіцієнт дос #: netbox/circuits/tables/providers.py:82 #: netbox/circuits/tables/providers.py:107 netbox/dcim/tables/devices.py:1036 #: netbox/dcim/tables/devicetypes.py:92 netbox/dcim/tables/modules.py:29 -#: netbox/dcim/tables/modules.py:72 netbox/dcim/tables/power.py:39 +#: netbox/dcim/tables/modules.py:73 netbox/dcim/tables/power.py:39 #: netbox/dcim/tables/power.py:96 netbox/dcim/tables/racks.py:84 #: netbox/dcim/tables/racks.py:145 netbox/dcim/tables/racks.py:225 #: netbox/dcim/tables/sites.py:108 netbox/extras/tables/tables.py:582 @@ -2937,7 +2936,7 @@ msgid "Parent site group (slug)" msgstr "Батьківська група тех. майданчиків (скорочення)" #: netbox/dcim/filtersets.py:164 netbox/extras/filtersets.py:364 -#: netbox/ipam/filtersets.py:841 netbox/ipam/filtersets.py:993 +#: netbox/ipam/filtersets.py:843 netbox/ipam/filtersets.py:995 msgid "Group (ID)" msgstr "Група (ідентифікатор)" @@ -2995,15 +2994,15 @@ msgstr "Тип стійки (ідентифікатор)" #: netbox/dcim/filtersets.py:411 netbox/dcim/filtersets.py:892 #: netbox/dcim/filtersets.py:994 netbox/dcim/filtersets.py:1850 -#: netbox/ipam/filtersets.py:381 netbox/ipam/filtersets.py:493 -#: netbox/ipam/filtersets.py:1003 netbox/virtualization/filtersets.py:210 +#: netbox/ipam/filtersets.py:383 netbox/ipam/filtersets.py:495 +#: netbox/ipam/filtersets.py:1005 netbox/virtualization/filtersets.py:210 msgid "Role (ID)" msgstr "Роль (ідентифікатор)" #: netbox/dcim/filtersets.py:417 netbox/dcim/filtersets.py:898 #: netbox/dcim/filtersets.py:1000 netbox/dcim/filtersets.py:1856 -#: netbox/extras/filtersets.py:558 netbox/ipam/filtersets.py:387 -#: netbox/ipam/filtersets.py:499 netbox/ipam/filtersets.py:1009 +#: netbox/extras/filtersets.py:558 netbox/ipam/filtersets.py:389 +#: netbox/ipam/filtersets.py:501 netbox/ipam/filtersets.py:1011 #: netbox/virtualization/filtersets.py:216 msgid "Role (slug)" msgstr "Роль (скорочення)" @@ -3201,7 +3200,7 @@ msgstr "Імпульсне джерело живлення (ідентифіка msgid "Device model" msgstr "Модель пристрою" -#: netbox/dcim/filtersets.py:1267 netbox/ipam/filtersets.py:632 +#: netbox/dcim/filtersets.py:1267 netbox/ipam/filtersets.py:634 #: netbox/vpn/filtersets.py:102 netbox/vpn/filtersets.py:401 msgid "Interface (ID)" msgstr "Інтерфейс (ідентифікатор)" @@ -3215,8 +3214,8 @@ msgid "Module bay (ID)" msgstr "Відсік модуля (ідентифікатор)" #: netbox/dcim/filtersets.py:1333 netbox/dcim/filtersets.py:1425 -#: netbox/ipam/filtersets.py:611 netbox/ipam/filtersets.py:851 -#: netbox/ipam/filtersets.py:1115 netbox/virtualization/filtersets.py:161 +#: netbox/ipam/filtersets.py:613 netbox/ipam/filtersets.py:853 +#: netbox/ipam/filtersets.py:1117 netbox/virtualization/filtersets.py:161 #: netbox/vpn/filtersets.py:379 msgid "Device (ID)" msgstr "Пристрій (ідентифікатор)" @@ -3225,8 +3224,8 @@ msgstr "Пристрій (ідентифікатор)" msgid "Rack (name)" msgstr "Стійка (назва)" -#: netbox/dcim/filtersets.py:1431 netbox/ipam/filtersets.py:606 -#: netbox/ipam/filtersets.py:846 netbox/ipam/filtersets.py:1121 +#: netbox/dcim/filtersets.py:1431 netbox/ipam/filtersets.py:608 +#: netbox/ipam/filtersets.py:848 netbox/ipam/filtersets.py:1123 #: netbox/vpn/filtersets.py:374 msgid "Device (name)" msgstr "Пристрій (назва)" @@ -3278,9 +3277,9 @@ msgstr "Призначений VID" #: netbox/dcim/forms/bulk_import.py:913 netbox/dcim/forms/filtersets.py:1428 #: netbox/dcim/forms/model_forms.py:1385 #: netbox/dcim/models/device_components.py:711 -#: netbox/dcim/tables/devices.py:626 netbox/ipam/filtersets.py:316 -#: netbox/ipam/filtersets.py:327 netbox/ipam/filtersets.py:483 -#: netbox/ipam/filtersets.py:584 netbox/ipam/filtersets.py:595 +#: netbox/dcim/tables/devices.py:626 netbox/ipam/filtersets.py:318 +#: netbox/ipam/filtersets.py:329 netbox/ipam/filtersets.py:485 +#: netbox/ipam/filtersets.py:586 netbox/ipam/filtersets.py:597 #: netbox/ipam/forms/bulk_edit.py:242 netbox/ipam/forms/bulk_edit.py:298 #: netbox/ipam/forms/bulk_edit.py:340 netbox/ipam/forms/bulk_import.py:157 #: netbox/ipam/forms/bulk_import.py:243 netbox/ipam/forms/bulk_import.py:279 @@ -3307,19 +3306,19 @@ msgstr "Призначений VID" msgid "VRF" msgstr "VRF" -#: netbox/dcim/filtersets.py:1619 netbox/ipam/filtersets.py:322 -#: netbox/ipam/filtersets.py:333 netbox/ipam/filtersets.py:489 -#: netbox/ipam/filtersets.py:590 netbox/ipam/filtersets.py:601 +#: netbox/dcim/filtersets.py:1619 netbox/ipam/filtersets.py:324 +#: netbox/ipam/filtersets.py:335 netbox/ipam/filtersets.py:491 +#: netbox/ipam/filtersets.py:592 netbox/ipam/filtersets.py:603 msgid "VRF (RD)" msgstr "VRF (RD)" -#: netbox/dcim/filtersets.py:1624 netbox/ipam/filtersets.py:1030 +#: netbox/dcim/filtersets.py:1624 netbox/ipam/filtersets.py:1032 #: netbox/vpn/filtersets.py:342 msgid "L2VPN (ID)" msgstr "L2VPN (ідентифікатор)" #: netbox/dcim/filtersets.py:1630 netbox/dcim/forms/filtersets.py:1433 -#: netbox/dcim/tables/devices.py:570 netbox/ipam/filtersets.py:1036 +#: netbox/dcim/tables/devices.py:570 netbox/ipam/filtersets.py:1038 #: netbox/ipam/forms/filtersets.py:518 netbox/ipam/tables/vlans.py:137 #: netbox/templates/dcim/interface.html:93 netbox/templates/ipam/vlan.html:66 #: netbox/templates/vpn/l2vpntermination.html:12 @@ -3481,7 +3480,7 @@ msgstr "Часовий пояс" #: netbox/dcim/forms/object_import.py:187 netbox/dcim/tables/devices.py:96 #: netbox/dcim/tables/devices.py:172 netbox/dcim/tables/devices.py:940 #: netbox/dcim/tables/devicetypes.py:80 netbox/dcim/tables/devicetypes.py:308 -#: netbox/dcim/tables/modules.py:20 netbox/dcim/tables/modules.py:60 +#: netbox/dcim/tables/modules.py:20 netbox/dcim/tables/modules.py:61 #: netbox/dcim/tables/racks.py:58 netbox/dcim/tables/racks.py:132 #: netbox/templates/dcim/devicetype.html:14 #: netbox/templates/dcim/inventoryitem.html:44 @@ -3732,7 +3731,7 @@ msgid "Device Type" msgstr "Тип пристрою" #: netbox/dcim/forms/bulk_edit.py:598 netbox/dcim/forms/model_forms.py:401 -#: netbox/dcim/tables/modules.py:17 netbox/dcim/tables/modules.py:65 +#: netbox/dcim/tables/modules.py:17 netbox/dcim/tables/modules.py:66 #: netbox/templates/dcim/module.html:65 #: netbox/templates/dcim/modulebay.html:66 #: netbox/templates/dcim/moduletype.html:22 @@ -3840,7 +3839,7 @@ msgstr "Кластер" #: netbox/dcim/tables/devices.py:697 netbox/dcim/tables/devices.py:754 #: netbox/dcim/tables/devices.py:801 netbox/dcim/tables/devices.py:861 #: netbox/dcim/tables/devices.py:930 netbox/dcim/tables/devices.py:1057 -#: netbox/dcim/tables/modules.py:52 netbox/extras/forms/filtersets.py:321 +#: netbox/dcim/tables/modules.py:53 netbox/extras/forms/filtersets.py:321 #: netbox/ipam/forms/bulk_import.py:304 netbox/ipam/forms/bulk_import.py:505 #: netbox/ipam/forms/filtersets.py:551 netbox/ipam/forms/model_forms.py:323 #: netbox/ipam/forms/model_forms.py:712 netbox/ipam/forms/model_forms.py:745 @@ -4222,7 +4221,7 @@ msgstr "Назва призначеної ролі" #: netbox/dcim/forms/bulk_import.py:264 msgid "Rack type model" -msgstr "" +msgstr "Модель типу стійки" #: netbox/dcim/forms/bulk_import.py:292 netbox/dcim/forms/bulk_import.py:435 #: netbox/dcim/forms/bulk_import.py:605 @@ -4231,11 +4230,11 @@ msgstr "Напрямок повітряного потоку" #: netbox/dcim/forms/bulk_import.py:324 msgid "Width must be set if not specifying a rack type." -msgstr "" +msgstr "Ширина повинна бути встановлена, якщо не вказано тип стійки." #: netbox/dcim/forms/bulk_import.py:326 msgid "U height must be set if not specifying a rack type." -msgstr "" +msgstr "Висота U повинна бути встановлена, якщо не вказано тип стійки." #: netbox/dcim/forms/bulk_import.py:334 msgid "Parent site" @@ -6826,7 +6825,7 @@ msgstr "Модульні відсіки" msgid "Inventory items" msgstr "Елементи інвентаря" -#: netbox/dcim/tables/devices.py:305 netbox/dcim/tables/modules.py:56 +#: netbox/dcim/tables/devices.py:305 netbox/dcim/tables/modules.py:57 #: netbox/templates/dcim/modulebay.html:17 msgid "Module Bay" msgstr "Резервуар модулів" @@ -7554,12 +7553,12 @@ msgstr "Закладки" msgid "Show your personal bookmarks" msgstr "Показувати особисті закладки" -#: netbox/extras/events.py:147 +#: netbox/extras/events.py:151 #, python-brace-format msgid "Unknown action type for an event rule: {action_type}" msgstr "Невідомий тип дії для правила події: {action_type}" -#: netbox/extras/events.py:192 +#: netbox/extras/events.py:196 #, python-brace-format msgid "Cannot import events pipeline {name} error: {error}" msgstr "Не вдається імпортувати конвеєр подій {name} Помилка: {error}" @@ -9324,129 +9323,129 @@ msgstr "Експорт L2VPN" msgid "Exporting L2VPN (identifier)" msgstr "Експорт L2VPN (ідентифікатор)" -#: netbox/ipam/filtersets.py:155 netbox/ipam/filtersets.py:281 +#: netbox/ipam/filtersets.py:155 netbox/ipam/filtersets.py:283 #: netbox/ipam/forms/model_forms.py:229 netbox/ipam/tables/ip.py:212 #: netbox/templates/ipam/prefix.html:12 msgid "Prefix" msgstr "Префікс" #: netbox/ipam/filtersets.py:159 netbox/ipam/filtersets.py:198 -#: netbox/ipam/filtersets.py:221 +#: netbox/ipam/filtersets.py:223 msgid "RIR (ID)" msgstr "RIR (ідентифікатор)" #: netbox/ipam/filtersets.py:165 netbox/ipam/filtersets.py:204 -#: netbox/ipam/filtersets.py:227 +#: netbox/ipam/filtersets.py:229 msgid "RIR (slug)" msgstr "RIR (скорочення)" -#: netbox/ipam/filtersets.py:285 +#: netbox/ipam/filtersets.py:287 msgid "Within prefix" msgstr "У межах префікса" -#: netbox/ipam/filtersets.py:289 +#: netbox/ipam/filtersets.py:291 msgid "Within and including prefix" msgstr "У межах та включаючи префікс" -#: netbox/ipam/filtersets.py:293 +#: netbox/ipam/filtersets.py:295 msgid "Prefixes which contain this prefix or IP" msgstr "Мережеві префікси, які містять цей префікс або IP" -#: netbox/ipam/filtersets.py:304 netbox/ipam/filtersets.py:572 +#: netbox/ipam/filtersets.py:306 netbox/ipam/filtersets.py:574 #: netbox/ipam/forms/bulk_edit.py:343 netbox/ipam/forms/filtersets.py:196 #: netbox/ipam/forms/filtersets.py:331 msgid "Mask length" msgstr "Довжина маски" -#: netbox/ipam/filtersets.py:373 netbox/vpn/filtersets.py:427 +#: netbox/ipam/filtersets.py:375 netbox/vpn/filtersets.py:427 msgid "VLAN (ID)" msgstr "VLAN (ідентифікатор)" -#: netbox/ipam/filtersets.py:377 netbox/vpn/filtersets.py:422 +#: netbox/ipam/filtersets.py:379 netbox/vpn/filtersets.py:422 msgid "VLAN number (1-4094)" msgstr "Номер VLAN (1-4094)" -#: netbox/ipam/filtersets.py:471 netbox/ipam/filtersets.py:475 -#: netbox/ipam/filtersets.py:567 netbox/ipam/forms/model_forms.py:496 +#: netbox/ipam/filtersets.py:473 netbox/ipam/filtersets.py:477 +#: netbox/ipam/filtersets.py:569 netbox/ipam/forms/model_forms.py:496 #: netbox/templates/tenancy/contact.html:53 #: netbox/tenancy/forms/bulk_edit.py:113 msgid "Address" msgstr "Адреса" -#: netbox/ipam/filtersets.py:479 +#: netbox/ipam/filtersets.py:481 msgid "Ranges which contain this prefix or IP" msgstr "Діапазони, які містять цей префікс або IP" -#: netbox/ipam/filtersets.py:507 netbox/ipam/filtersets.py:563 +#: netbox/ipam/filtersets.py:509 netbox/ipam/filtersets.py:565 msgid "Parent prefix" msgstr "Батьківський префікс" -#: netbox/ipam/filtersets.py:616 netbox/ipam/filtersets.py:856 -#: netbox/ipam/filtersets.py:1131 netbox/vpn/filtersets.py:385 +#: netbox/ipam/filtersets.py:618 netbox/ipam/filtersets.py:858 +#: netbox/ipam/filtersets.py:1133 netbox/vpn/filtersets.py:385 msgid "Virtual machine (name)" msgstr "Віртуальна машина (назва)" -#: netbox/ipam/filtersets.py:621 netbox/ipam/filtersets.py:861 -#: netbox/ipam/filtersets.py:1125 netbox/virtualization/filtersets.py:282 +#: netbox/ipam/filtersets.py:623 netbox/ipam/filtersets.py:863 +#: netbox/ipam/filtersets.py:1127 netbox/virtualization/filtersets.py:282 #: netbox/virtualization/filtersets.py:321 netbox/vpn/filtersets.py:390 msgid "Virtual machine (ID)" msgstr "Віртуальна машина (ідентифікатор)" -#: netbox/ipam/filtersets.py:627 netbox/vpn/filtersets.py:97 +#: netbox/ipam/filtersets.py:629 netbox/vpn/filtersets.py:97 #: netbox/vpn/filtersets.py:396 msgid "Interface (name)" msgstr "Інтерфейс (назва)" -#: netbox/ipam/filtersets.py:638 netbox/vpn/filtersets.py:108 +#: netbox/ipam/filtersets.py:640 netbox/vpn/filtersets.py:108 #: netbox/vpn/filtersets.py:407 msgid "VM interface (name)" msgstr "Інтерфейс віртуальної машини (назва)" -#: netbox/ipam/filtersets.py:643 netbox/vpn/filtersets.py:113 +#: netbox/ipam/filtersets.py:645 netbox/vpn/filtersets.py:113 msgid "VM interface (ID)" msgstr "Інтерфейс віртуальної машини (ідентифікатор)" -#: netbox/ipam/filtersets.py:648 +#: netbox/ipam/filtersets.py:650 msgid "FHRP group (ID)" msgstr "Група FHRP/VRRP (ідентифікатор)" -#: netbox/ipam/filtersets.py:652 +#: netbox/ipam/filtersets.py:654 msgid "Is assigned to an interface" msgstr "Призначений до інтерфейсу" -#: netbox/ipam/filtersets.py:656 +#: netbox/ipam/filtersets.py:658 msgid "Is assigned" msgstr "призначається" -#: netbox/ipam/filtersets.py:668 +#: netbox/ipam/filtersets.py:670 msgid "Service (ID)" msgstr "Сервіс (ідентифікатор)" -#: netbox/ipam/filtersets.py:673 +#: netbox/ipam/filtersets.py:675 msgid "NAT inside IP address (ID)" msgstr "NAT внутрішня IP-адреса (ідентифікатор)" -#: netbox/ipam/filtersets.py:1041 netbox/ipam/forms/bulk_import.py:322 +#: netbox/ipam/filtersets.py:1043 netbox/ipam/forms/bulk_import.py:322 msgid "Assigned interface" msgstr "Призначений інтерфейс" -#: netbox/ipam/filtersets.py:1046 +#: netbox/ipam/filtersets.py:1048 msgid "Assigned VM interface" msgstr "Призначений інтерфейс віртуальної машини" -#: netbox/ipam/filtersets.py:1136 +#: netbox/ipam/filtersets.py:1138 msgid "IP address (ID)" msgstr "IP-адреса (ідентифікатор)" -#: netbox/ipam/filtersets.py:1142 netbox/ipam/models/ip.py:788 +#: netbox/ipam/filtersets.py:1144 netbox/ipam/models/ip.py:788 msgid "IP address" msgstr "IP-адреса" -#: netbox/ipam/filtersets.py:1167 +#: netbox/ipam/filtersets.py:1169 msgid "Primary IPv4 (ID)" msgstr "Первинна адреса IPv4 (ідентифікатор)" -#: netbox/ipam/filtersets.py:1172 +#: netbox/ipam/filtersets.py:1174 msgid "Primary IPv6 (ID)" msgstr "Первинна адреса IPv6 (ідентифікатор)" @@ -9670,11 +9669,13 @@ msgstr "Зробіть це основним IP для призначеного #: netbox/ipam/forms/bulk_import.py:330 msgid "Is out-of-band" -msgstr "" +msgstr "Це для зовнішнього незалежного керування" #: netbox/ipam/forms/bulk_import.py:331 msgid "Designate this as the out-of-band IP address for the assigned device" msgstr "" +"Позначте це як IP-адресу для зовнішнього незалежного керування призначеного " +"пристрою" #: netbox/ipam/forms/bulk_import.py:371 msgid "No device or virtual machine specified; cannot set as primary IP" @@ -9685,10 +9686,14 @@ msgstr "" #: netbox/ipam/forms/bulk_import.py:375 msgid "No device specified; cannot set as out-of-band IP" msgstr "" +"Пристрій не вказано; неможливо встановити IP для зовнішнього незалежного " +"керування" #: netbox/ipam/forms/bulk_import.py:379 msgid "Cannot set out-of-band IP for virtual machines" msgstr "" +"Не вдається встановити IP для зовнішнього незалежного керування віртуальних " +"машин" #: netbox/ipam/forms/bulk_import.py:383 msgid "No interface specified; cannot set as primary IP" @@ -9697,6 +9702,8 @@ msgstr "Інтерфейс не вказано; неможливо встано #: netbox/ipam/forms/bulk_import.py:387 msgid "No interface specified; cannot set as out-of-band IP" msgstr "" +"Інтерфейс не вказано; неможливо встановити як IP для зовнішнього незалежного" +" керування" #: netbox/ipam/forms/bulk_import.py:422 msgid "Auth type" @@ -9855,7 +9862,7 @@ msgstr "Діапазон ASN" #: netbox/ipam/forms/model_forms.py:231 msgid "Site/VLAN Assignment" -msgstr "Призначення тех. майданчику/VLAN" +msgstr "Призначення сайту/VLAN" #: netbox/ipam/forms/model_forms.py:259 netbox/templates/ipam/iprange.html:10 msgid "IP Range" @@ -9873,7 +9880,7 @@ msgstr "Зробіть це основним IP для пристрою/вірт #: netbox/ipam/forms/model_forms.py:314 msgid "Make this the out-of-band IP for the device" -msgstr "" +msgstr "Зробіть це IP для зовнішнього незалежного керування пристрою" #: netbox/ipam/forms/model_forms.py:329 msgid "NAT IP (Inside)" @@ -9886,10 +9893,14 @@ msgstr "IP-адреса може бути призначена лише одно #: netbox/ipam/forms/model_forms.py:398 msgid "Cannot reassign primary IP address for the parent device/VM" msgstr "" +"Не вдається перепризначити первинну IP-адресу для батьківського " +"пристрою/віртуальної машини" #: netbox/ipam/forms/model_forms.py:402 msgid "Cannot reassign out-of-Band IP address for the parent device" msgstr "" +"Не вдається перепризначити IP-адресу для зовнішнього незалежного керування " +"батьківського пристрою" #: netbox/ipam/forms/model_forms.py:412 msgid "" @@ -9903,6 +9914,8 @@ msgid "" "Only IP addresses assigned to a device interface can be designated as the " "out-of-band IP for a device." msgstr "" +"Лише IP-адреси, призначені інтерфейсу пристрою, можуть бути позначені як IP " +"для зовнішнього незалежного керування пристрою." #: netbox/ipam/forms/model_forms.py:508 msgid "Virtual IP Address" @@ -12675,11 +12688,11 @@ msgstr "Завантажити" #: netbox/templates/dcim/device/render_config.html:64 #: netbox/templates/virtualization/virtualmachine/render_config.html:64 msgid "Error rendering template" -msgstr "" +msgstr "Помилка візуалізації шаблону" #: netbox/templates/dcim/device/render_config.html:70 msgid "No configuration template has been assigned for this device." -msgstr "" +msgstr "Для цього пристрою не призначено жодного шаблону конфігурації." #: netbox/templates/dcim/device_edit.html:44 msgid "Parent Bay" @@ -13945,7 +13958,7 @@ msgstr "Довідковий центр" #: netbox/templates/inc/user_menu.html:41 msgid "Django Admin" -msgstr "Адміністратор Django" +msgstr "Джанго Адміністратор" #: netbox/templates/inc/user_menu.html:61 msgid "Log Out" @@ -14358,7 +14371,7 @@ msgstr "Додати віртуальний диск" #: netbox/templates/virtualization/virtualmachine/render_config.html:70 msgid "No configuration template has been assigned for this virtual machine." -msgstr "" +msgstr "Жоден шаблон конфігурації не призначено для цієї віртуальної машини." #: netbox/templates/vpn/ikepolicy.html:10 #: netbox/templates/vpn/ipsecprofile.html:33 netbox/vpn/tables/crypto.py:166 @@ -15465,7 +15478,7 @@ msgid "" "{device} belongs to a different site ({device_site}) than the cluster " "({cluster_site})" msgstr "" -"{device} належить до іншого тех. майданчику ({device_site}) ніж кластер " +"{device} належить до іншого сайту ({device_site}) ніж кластер " "({cluster_site})" #: netbox/virtualization/forms/model_forms.py:192 @@ -15653,19 +15666,19 @@ msgstr "GRE" #: netbox/vpn/choices.py:39 msgid "WireGuard" -msgstr "" +msgstr "WireGuard" #: netbox/vpn/choices.py:40 msgid "OpenVPN" -msgstr "" +msgstr "OpenVPN" #: netbox/vpn/choices.py:41 msgid "L2TP" -msgstr "" +msgstr "L2TP" #: netbox/vpn/choices.py:42 msgid "PPTP" -msgstr "" +msgstr "PPTP" #: netbox/vpn/choices.py:64 msgid "Hub" @@ -16205,9 +16218,7 @@ msgstr "бездротові канали зв'язку" #: netbox/wireless/models.py:236 msgid "Must specify a unit when setting a wireless distance" -msgstr "" -"Необхідно вказати одиницю виміру при установці відстані бездротового каналу " -"зв'язку" +msgstr "Необхідно вказати одиницю при установці бездротової відстані" #: netbox/wireless/models.py:242 netbox/wireless/models.py:248 #, python-brace-format diff --git a/netbox/translations/zh/LC_MESSAGES/django.mo b/netbox/translations/zh/LC_MESSAGES/django.mo index 52e676825ea6e94e0278b6a72e72fe212ae91efc..c61e80243b7706192b9a6596a4dc4f16cc01e1a0 100644 GIT binary patch delta 69210 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
>sS;2!YNp}URt#Cu@~v@ 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 diff --git a/netbox/translations/zh/LC_MESSAGES/django.po b/netbox/translations/zh/LC_MESSAGES/django.po index c5d1f3032..81fdaaa67 100644 --- a/netbox/translations/zh/LC_MESSAGES/django.po +++ b/netbox/translations/zh/LC_MESSAGES/django.po @@ -13,17 +13,17 @@ # Bubu, 2024 # 夏小正, 2024 # 闻寄云, 2024 -# jiyin luo, 2024 -# Jeremy Stretch, 2024 +# luo jiyin, 2024 +# Jeremy Stretch, 2025 # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2024-12-12 05:02+0000\n" +"POT-Creation-Date: 2025-01-04 05:02+0000\n" "PO-Revision-Date: 2023-10-30 17:48+0000\n" -"Last-Translator: Jeremy Stretch, 2024\n" +"Last-Translator: Jeremy Stretch, 2025\n" "Language-Team: Chinese (https://app.transifex.com/netbox-community/teams/178115/zh/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -159,7 +159,7 @@ msgstr "已失效" #: netbox/dcim/filtersets.py:464 netbox/dcim/filtersets.py:1021 #: netbox/dcim/filtersets.py:1368 netbox/dcim/filtersets.py:1903 #: netbox/dcim/filtersets.py:2146 netbox/dcim/filtersets.py:2204 -#: netbox/ipam/filtersets.py:339 netbox/ipam/filtersets.py:959 +#: netbox/ipam/filtersets.py:341 netbox/ipam/filtersets.py:961 #: netbox/virtualization/filtersets.py:45 #: netbox/virtualization/filtersets.py:173 netbox/vpn/filtersets.py:358 msgid "Region (ID)" @@ -171,8 +171,8 @@ msgstr "区域(ID)" #: netbox/dcim/filtersets.py:471 netbox/dcim/filtersets.py:1028 #: netbox/dcim/filtersets.py:1375 netbox/dcim/filtersets.py:1910 #: netbox/dcim/filtersets.py:2153 netbox/dcim/filtersets.py:2211 -#: netbox/extras/filtersets.py:509 netbox/ipam/filtersets.py:346 -#: netbox/ipam/filtersets.py:966 netbox/virtualization/filtersets.py:52 +#: netbox/extras/filtersets.py:509 netbox/ipam/filtersets.py:348 +#: netbox/ipam/filtersets.py:968 netbox/virtualization/filtersets.py:52 #: netbox/virtualization/filtersets.py:180 netbox/vpn/filtersets.py:353 msgid "Region (slug)" msgstr "地区(缩写)" @@ -182,8 +182,8 @@ msgstr "地区(缩写)" #: netbox/dcim/filtersets.py:346 netbox/dcim/filtersets.py:477 #: netbox/dcim/filtersets.py:1034 netbox/dcim/filtersets.py:1381 #: netbox/dcim/filtersets.py:1916 netbox/dcim/filtersets.py:2159 -#: netbox/dcim/filtersets.py:2217 netbox/ipam/filtersets.py:352 -#: netbox/ipam/filtersets.py:972 netbox/virtualization/filtersets.py:58 +#: netbox/dcim/filtersets.py:2217 netbox/ipam/filtersets.py:354 +#: netbox/ipam/filtersets.py:974 netbox/virtualization/filtersets.py:58 #: netbox/virtualization/filtersets.py:186 msgid "Site group (ID)" msgstr "站点组(ID)" @@ -194,7 +194,7 @@ msgstr "站点组(ID)" #: netbox/dcim/filtersets.py:1041 netbox/dcim/filtersets.py:1388 #: netbox/dcim/filtersets.py:1923 netbox/dcim/filtersets.py:2166 #: netbox/dcim/filtersets.py:2224 netbox/extras/filtersets.py:515 -#: netbox/ipam/filtersets.py:359 netbox/ipam/filtersets.py:979 +#: netbox/ipam/filtersets.py:361 netbox/ipam/filtersets.py:981 #: netbox/virtualization/filtersets.py:65 #: netbox/virtualization/filtersets.py:193 msgid "Site group (slug)" @@ -264,8 +264,8 @@ msgstr "站点" #: netbox/circuits/filtersets.py:62 netbox/circuits/filtersets.py:229 #: netbox/circuits/filtersets.py:274 netbox/dcim/filtersets.py:242 #: netbox/dcim/filtersets.py:363 netbox/dcim/filtersets.py:458 -#: netbox/extras/filtersets.py:531 netbox/ipam/filtersets.py:238 -#: netbox/ipam/filtersets.py:369 netbox/ipam/filtersets.py:989 +#: netbox/extras/filtersets.py:531 netbox/ipam/filtersets.py:240 +#: netbox/ipam/filtersets.py:371 netbox/ipam/filtersets.py:991 #: netbox/virtualization/filtersets.py:75 #: netbox/virtualization/filtersets.py:203 netbox/vpn/filtersets.py:363 msgid "Site (slug)" @@ -284,13 +284,13 @@ msgstr "自治系统编号/AS编号" #: netbox/circuits/filtersets.py:95 netbox/circuits/filtersets.py:122 #: netbox/circuits/filtersets.py:156 netbox/circuits/filtersets.py:283 -#: netbox/circuits/filtersets.py:325 netbox/ipam/filtersets.py:243 +#: netbox/circuits/filtersets.py:325 netbox/ipam/filtersets.py:245 msgid "Provider (ID)" msgstr "运营商(ID)" #: netbox/circuits/filtersets.py:101 netbox/circuits/filtersets.py:128 #: netbox/circuits/filtersets.py:162 netbox/circuits/filtersets.py:289 -#: netbox/circuits/filtersets.py:331 netbox/ipam/filtersets.py:249 +#: netbox/circuits/filtersets.py:331 netbox/ipam/filtersets.py:251 msgid "Provider (slug)" msgstr "运营商(缩写)" @@ -319,8 +319,8 @@ msgstr "线路类型(缩写)" #: netbox/dcim/filtersets.py:452 netbox/dcim/filtersets.py:1045 #: netbox/dcim/filtersets.py:1393 netbox/dcim/filtersets.py:1928 #: netbox/dcim/filtersets.py:2170 netbox/dcim/filtersets.py:2229 -#: netbox/ipam/filtersets.py:232 netbox/ipam/filtersets.py:363 -#: netbox/ipam/filtersets.py:983 netbox/virtualization/filtersets.py:69 +#: netbox/ipam/filtersets.py:234 netbox/ipam/filtersets.py:365 +#: netbox/ipam/filtersets.py:985 netbox/virtualization/filtersets.py:69 #: netbox/virtualization/filtersets.py:197 netbox/vpn/filtersets.py:368 msgid "Site (ID)" msgstr "站点(ID)" @@ -674,7 +674,7 @@ msgstr "运营商账户" #: netbox/dcim/forms/filtersets.py:924 netbox/dcim/forms/filtersets.py:958 #: netbox/dcim/forms/filtersets.py:1059 netbox/dcim/forms/filtersets.py:1170 #: netbox/dcim/tables/devices.py:140 netbox/dcim/tables/devices.py:817 -#: netbox/dcim/tables/devices.py:1063 netbox/dcim/tables/modules.py:69 +#: netbox/dcim/tables/devices.py:1063 netbox/dcim/tables/modules.py:70 #: netbox/dcim/tables/power.py:74 netbox/dcim/tables/racks.py:126 #: netbox/dcim/tables/sites.py:82 netbox/dcim/tables/sites.py:138 #: netbox/ipam/forms/bulk_edit.py:256 netbox/ipam/forms/bulk_edit.py:306 @@ -1109,7 +1109,7 @@ msgstr "分配" #: netbox/circuits/tables/circuits.py:155 netbox/dcim/forms/bulk_edit.py:118 #: netbox/dcim/forms/bulk_import.py:100 netbox/dcim/forms/model_forms.py:117 #: netbox/dcim/tables/sites.py:89 netbox/extras/forms/filtersets.py:480 -#: netbox/ipam/filtersets.py:999 netbox/ipam/forms/bulk_edit.py:493 +#: netbox/ipam/filtersets.py:1001 netbox/ipam/forms/bulk_edit.py:493 #: netbox/ipam/forms/bulk_import.py:460 netbox/ipam/forms/model_forms.py:561 #: netbox/ipam/tables/fhrp.py:67 netbox/ipam/tables/vlans.py:122 #: netbox/ipam/tables/vlans.py:226 @@ -1242,7 +1242,7 @@ msgstr "电路组分配" #: netbox/circuits/models/circuits.py:240 msgid "termination" -msgstr "接入终端" +msgstr "终止" #: netbox/circuits/models/circuits.py:257 msgid "port speed (Kbps)" @@ -1303,12 +1303,12 @@ msgstr "线路接入" #: netbox/circuits/models/circuits.py:308 msgid "" "A circuit termination must attach to either a site or a provider network." -msgstr "线路终结必须连接到站点或运营商网络。" +msgstr "电路终端必须连接到站点或提供商网络。" #: netbox/circuits/models/circuits.py:310 msgid "" "A circuit termination cannot attach to both a site and a provider network." -msgstr "线路终结不能同时连接到站点和运营商网络。" +msgstr "电路终端不能同时连接到站点和提供商网络。" #: netbox/circuits/models/providers.py:22 #: netbox/circuits/models/providers.py:66 @@ -1545,7 +1545,7 @@ msgstr "承诺速率" #: netbox/circuits/tables/providers.py:82 #: netbox/circuits/tables/providers.py:107 netbox/dcim/tables/devices.py:1036 #: netbox/dcim/tables/devicetypes.py:92 netbox/dcim/tables/modules.py:29 -#: netbox/dcim/tables/modules.py:72 netbox/dcim/tables/power.py:39 +#: netbox/dcim/tables/modules.py:73 netbox/dcim/tables/power.py:39 #: netbox/dcim/tables/power.py:96 netbox/dcim/tables/racks.py:84 #: netbox/dcim/tables/racks.py:145 netbox/dcim/tables/racks.py:225 #: netbox/dcim/tables/sites.py:108 netbox/extras/tables/tables.py:582 @@ -2933,7 +2933,7 @@ msgid "Parent site group (slug)" msgstr "上一级站点组(缩写)" #: netbox/dcim/filtersets.py:164 netbox/extras/filtersets.py:364 -#: netbox/ipam/filtersets.py:841 netbox/ipam/filtersets.py:993 +#: netbox/ipam/filtersets.py:843 netbox/ipam/filtersets.py:995 msgid "Group (ID)" msgstr "组(ID)" @@ -2991,15 +2991,15 @@ msgstr "机架类型 (ID)" #: netbox/dcim/filtersets.py:411 netbox/dcim/filtersets.py:892 #: netbox/dcim/filtersets.py:994 netbox/dcim/filtersets.py:1850 -#: netbox/ipam/filtersets.py:381 netbox/ipam/filtersets.py:493 -#: netbox/ipam/filtersets.py:1003 netbox/virtualization/filtersets.py:210 +#: netbox/ipam/filtersets.py:383 netbox/ipam/filtersets.py:495 +#: netbox/ipam/filtersets.py:1005 netbox/virtualization/filtersets.py:210 msgid "Role (ID)" msgstr "角色(ID)" #: netbox/dcim/filtersets.py:417 netbox/dcim/filtersets.py:898 #: netbox/dcim/filtersets.py:1000 netbox/dcim/filtersets.py:1856 -#: netbox/extras/filtersets.py:558 netbox/ipam/filtersets.py:387 -#: netbox/ipam/filtersets.py:499 netbox/ipam/filtersets.py:1009 +#: netbox/extras/filtersets.py:558 netbox/ipam/filtersets.py:389 +#: netbox/ipam/filtersets.py:501 netbox/ipam/filtersets.py:1011 #: netbox/virtualization/filtersets.py:216 msgid "Role (slug)" msgstr "角色 (缩写)" @@ -3197,7 +3197,7 @@ msgstr "VDC (ID)" msgid "Device model" msgstr "设备型号" -#: netbox/dcim/filtersets.py:1267 netbox/ipam/filtersets.py:632 +#: netbox/dcim/filtersets.py:1267 netbox/ipam/filtersets.py:634 #: netbox/vpn/filtersets.py:102 netbox/vpn/filtersets.py:401 msgid "Interface (ID)" msgstr "接口(ID)" @@ -3211,8 +3211,8 @@ msgid "Module bay (ID)" msgstr "模块托架 (ID)" #: netbox/dcim/filtersets.py:1333 netbox/dcim/filtersets.py:1425 -#: netbox/ipam/filtersets.py:611 netbox/ipam/filtersets.py:851 -#: netbox/ipam/filtersets.py:1115 netbox/virtualization/filtersets.py:161 +#: netbox/ipam/filtersets.py:613 netbox/ipam/filtersets.py:853 +#: netbox/ipam/filtersets.py:1117 netbox/virtualization/filtersets.py:161 #: netbox/vpn/filtersets.py:379 msgid "Device (ID)" msgstr "设备(ID)" @@ -3221,8 +3221,8 @@ msgstr "设备(ID)" msgid "Rack (name)" msgstr "机柜(名称)" -#: netbox/dcim/filtersets.py:1431 netbox/ipam/filtersets.py:606 -#: netbox/ipam/filtersets.py:846 netbox/ipam/filtersets.py:1121 +#: netbox/dcim/filtersets.py:1431 netbox/ipam/filtersets.py:608 +#: netbox/ipam/filtersets.py:848 netbox/ipam/filtersets.py:1123 #: netbox/vpn/filtersets.py:374 msgid "Device (name)" msgstr "设备(名称)" @@ -3274,9 +3274,9 @@ msgstr "指定VID" #: netbox/dcim/forms/bulk_import.py:913 netbox/dcim/forms/filtersets.py:1428 #: netbox/dcim/forms/model_forms.py:1385 #: netbox/dcim/models/device_components.py:711 -#: netbox/dcim/tables/devices.py:626 netbox/ipam/filtersets.py:316 -#: netbox/ipam/filtersets.py:327 netbox/ipam/filtersets.py:483 -#: netbox/ipam/filtersets.py:584 netbox/ipam/filtersets.py:595 +#: netbox/dcim/tables/devices.py:626 netbox/ipam/filtersets.py:318 +#: netbox/ipam/filtersets.py:329 netbox/ipam/filtersets.py:485 +#: netbox/ipam/filtersets.py:586 netbox/ipam/filtersets.py:597 #: netbox/ipam/forms/bulk_edit.py:242 netbox/ipam/forms/bulk_edit.py:298 #: netbox/ipam/forms/bulk_edit.py:340 netbox/ipam/forms/bulk_import.py:157 #: netbox/ipam/forms/bulk_import.py:243 netbox/ipam/forms/bulk_import.py:279 @@ -3303,19 +3303,19 @@ msgstr "指定VID" msgid "VRF" msgstr "VRF" -#: netbox/dcim/filtersets.py:1619 netbox/ipam/filtersets.py:322 -#: netbox/ipam/filtersets.py:333 netbox/ipam/filtersets.py:489 -#: netbox/ipam/filtersets.py:590 netbox/ipam/filtersets.py:601 +#: netbox/dcim/filtersets.py:1619 netbox/ipam/filtersets.py:324 +#: netbox/ipam/filtersets.py:335 netbox/ipam/filtersets.py:491 +#: netbox/ipam/filtersets.py:592 netbox/ipam/filtersets.py:603 msgid "VRF (RD)" msgstr "VRF (RD)" -#: netbox/dcim/filtersets.py:1624 netbox/ipam/filtersets.py:1030 +#: netbox/dcim/filtersets.py:1624 netbox/ipam/filtersets.py:1032 #: netbox/vpn/filtersets.py:342 msgid "L2VPN (ID)" msgstr "L2VPN (ID)" #: netbox/dcim/filtersets.py:1630 netbox/dcim/forms/filtersets.py:1433 -#: netbox/dcim/tables/devices.py:570 netbox/ipam/filtersets.py:1036 +#: netbox/dcim/tables/devices.py:570 netbox/ipam/filtersets.py:1038 #: netbox/ipam/forms/filtersets.py:518 netbox/ipam/tables/vlans.py:137 #: netbox/templates/dcim/interface.html:93 netbox/templates/ipam/vlan.html:66 #: netbox/templates/vpn/l2vpntermination.html:12 @@ -3475,7 +3475,7 @@ msgstr "时区" #: netbox/dcim/forms/object_import.py:187 netbox/dcim/tables/devices.py:96 #: netbox/dcim/tables/devices.py:172 netbox/dcim/tables/devices.py:940 #: netbox/dcim/tables/devicetypes.py:80 netbox/dcim/tables/devicetypes.py:308 -#: netbox/dcim/tables/modules.py:20 netbox/dcim/tables/modules.py:60 +#: netbox/dcim/tables/modules.py:20 netbox/dcim/tables/modules.py:61 #: netbox/dcim/tables/racks.py:58 netbox/dcim/tables/racks.py:132 #: netbox/templates/dcim/devicetype.html:14 #: netbox/templates/dcim/inventoryitem.html:44 @@ -3726,7 +3726,7 @@ msgid "Device Type" msgstr "设备型号" #: netbox/dcim/forms/bulk_edit.py:598 netbox/dcim/forms/model_forms.py:401 -#: netbox/dcim/tables/modules.py:17 netbox/dcim/tables/modules.py:65 +#: netbox/dcim/tables/modules.py:17 netbox/dcim/tables/modules.py:66 #: netbox/templates/dcim/module.html:65 #: netbox/templates/dcim/modulebay.html:66 #: netbox/templates/dcim/moduletype.html:22 @@ -3834,7 +3834,7 @@ msgstr "集群" #: netbox/dcim/tables/devices.py:697 netbox/dcim/tables/devices.py:754 #: netbox/dcim/tables/devices.py:801 netbox/dcim/tables/devices.py:861 #: netbox/dcim/tables/devices.py:930 netbox/dcim/tables/devices.py:1057 -#: netbox/dcim/tables/modules.py:52 netbox/extras/forms/filtersets.py:321 +#: netbox/dcim/tables/modules.py:53 netbox/extras/forms/filtersets.py:321 #: netbox/ipam/forms/bulk_import.py:304 netbox/ipam/forms/bulk_import.py:505 #: netbox/ipam/forms/filtersets.py:551 netbox/ipam/forms/model_forms.py:323 #: netbox/ipam/forms/model_forms.py:712 netbox/ipam/forms/model_forms.py:745 @@ -4086,11 +4086,11 @@ msgstr "已标记 VLANs" #: netbox/dcim/forms/bulk_edit.py:1511 msgid "Add tagged VLANs" -msgstr "" +msgstr "添加带标签的 VLAN" #: netbox/dcim/forms/bulk_edit.py:1520 msgid "Remove tagged VLANs" -msgstr "" +msgstr "移除带标签的 VLAN" #: netbox/dcim/forms/bulk_edit.py:1536 netbox/dcim/forms/model_forms.py:1348 msgid "Wireless LAN group" @@ -4138,7 +4138,7 @@ msgstr "802.1Q 交换" #: netbox/dcim/forms/bulk_edit.py:1558 msgid "Add/Remove" -msgstr "" +msgstr "添加/删除" #: netbox/dcim/forms/bulk_edit.py:1617 netbox/dcim/forms/bulk_edit.py:1619 msgid "Interface mode must be specified to assign VLANs" @@ -4216,7 +4216,7 @@ msgstr "指定规则名称" #: netbox/dcim/forms/bulk_import.py:264 msgid "Rack type model" -msgstr "" +msgstr "机架类型型号" #: netbox/dcim/forms/bulk_import.py:292 netbox/dcim/forms/bulk_import.py:435 #: netbox/dcim/forms/bulk_import.py:605 @@ -4225,11 +4225,11 @@ msgstr "风道方向" #: netbox/dcim/forms/bulk_import.py:324 msgid "Width must be set if not specifying a rack type." -msgstr "" +msgstr "如果未指定机架类型,则必须设置宽度。" #: netbox/dcim/forms/bulk_import.py:326 msgid "U height must be set if not specifying a rack type." -msgstr "" +msgstr "如果未指定机架类型,则必须设置 U 高度。" #: netbox/dcim/forms/bulk_import.py:334 msgid "Parent site" @@ -4875,6 +4875,8 @@ msgid "" "present, will be automatically replaced with the position value when " "creating a new module." msgstr "" +"批量创建支持字母数字范围。不支持单个范围内的混合大小写和类型(例如: [ge,xe] -0/0/ [0-9])。代币 " +"{module},如果存在,将在创建新模块时自动替换为位置值。" #: netbox/dcim/forms/model_forms.py:1094 msgid "Console port template" @@ -6680,7 +6682,7 @@ msgstr "设备板卡插槽" msgid "Inventory items" msgstr "库存项" -#: netbox/dcim/tables/devices.py:305 netbox/dcim/tables/modules.py:56 +#: netbox/dcim/tables/devices.py:305 netbox/dcim/tables/modules.py:57 #: netbox/templates/dcim/modulebay.html:17 msgid "Module Bay" msgstr "设备板卡插槽" @@ -7400,12 +7402,12 @@ msgstr "书签" msgid "Show your personal bookmarks" msgstr "显示您的个人书签" -#: netbox/extras/events.py:147 +#: netbox/extras/events.py:151 #, python-brace-format msgid "Unknown action type for an event rule: {action_type}" msgstr "事件规则的未知操作类型: {action_type}" -#: netbox/extras/events.py:192 +#: netbox/extras/events.py:196 #, python-brace-format msgid "Cannot import events pipeline {name} error: {error}" msgstr "无法导入事件管道 {name}错误: {error}" @@ -9107,129 +9109,129 @@ msgstr "导出 L2VPN" msgid "Exporting L2VPN (identifier)" msgstr "导出L2VPN(标识符)" -#: netbox/ipam/filtersets.py:155 netbox/ipam/filtersets.py:281 +#: netbox/ipam/filtersets.py:155 netbox/ipam/filtersets.py:283 #: netbox/ipam/forms/model_forms.py:229 netbox/ipam/tables/ip.py:212 #: netbox/templates/ipam/prefix.html:12 msgid "Prefix" msgstr "前缀" #: netbox/ipam/filtersets.py:159 netbox/ipam/filtersets.py:198 -#: netbox/ipam/filtersets.py:221 +#: netbox/ipam/filtersets.py:223 msgid "RIR (ID)" msgstr "RIR(ID)" #: netbox/ipam/filtersets.py:165 netbox/ipam/filtersets.py:204 -#: netbox/ipam/filtersets.py:227 +#: netbox/ipam/filtersets.py:229 msgid "RIR (slug)" msgstr "RIP(缩写)" -#: netbox/ipam/filtersets.py:285 +#: netbox/ipam/filtersets.py:287 msgid "Within prefix" msgstr "此前缀包含的" -#: netbox/ipam/filtersets.py:289 +#: netbox/ipam/filtersets.py:291 msgid "Within and including prefix" msgstr "此前缀包含的(包含此前缀)" -#: netbox/ipam/filtersets.py:293 +#: netbox/ipam/filtersets.py:295 msgid "Prefixes which contain this prefix or IP" msgstr "包含此前缀或IP的前缀" -#: netbox/ipam/filtersets.py:304 netbox/ipam/filtersets.py:572 +#: netbox/ipam/filtersets.py:306 netbox/ipam/filtersets.py:574 #: netbox/ipam/forms/bulk_edit.py:343 netbox/ipam/forms/filtersets.py:196 #: netbox/ipam/forms/filtersets.py:331 msgid "Mask length" msgstr "掩码长度" -#: netbox/ipam/filtersets.py:373 netbox/vpn/filtersets.py:427 +#: netbox/ipam/filtersets.py:375 netbox/vpn/filtersets.py:427 msgid "VLAN (ID)" msgstr "VLAN (ID)" -#: netbox/ipam/filtersets.py:377 netbox/vpn/filtersets.py:422 +#: netbox/ipam/filtersets.py:379 netbox/vpn/filtersets.py:422 msgid "VLAN number (1-4094)" msgstr "VLAN 号(1-4094)" -#: netbox/ipam/filtersets.py:471 netbox/ipam/filtersets.py:475 -#: netbox/ipam/filtersets.py:567 netbox/ipam/forms/model_forms.py:496 +#: netbox/ipam/filtersets.py:473 netbox/ipam/filtersets.py:477 +#: netbox/ipam/filtersets.py:569 netbox/ipam/forms/model_forms.py:496 #: netbox/templates/tenancy/contact.html:53 #: netbox/tenancy/forms/bulk_edit.py:113 msgid "Address" msgstr "地址" -#: netbox/ipam/filtersets.py:479 +#: netbox/ipam/filtersets.py:481 msgid "Ranges which contain this prefix or IP" msgstr "包含此前缀或IP的范围" -#: netbox/ipam/filtersets.py:507 netbox/ipam/filtersets.py:563 +#: netbox/ipam/filtersets.py:509 netbox/ipam/filtersets.py:565 msgid "Parent prefix" msgstr "上级前缀" -#: netbox/ipam/filtersets.py:616 netbox/ipam/filtersets.py:856 -#: netbox/ipam/filtersets.py:1131 netbox/vpn/filtersets.py:385 +#: netbox/ipam/filtersets.py:618 netbox/ipam/filtersets.py:858 +#: netbox/ipam/filtersets.py:1133 netbox/vpn/filtersets.py:385 msgid "Virtual machine (name)" msgstr "虚拟机(名称)" -#: netbox/ipam/filtersets.py:621 netbox/ipam/filtersets.py:861 -#: netbox/ipam/filtersets.py:1125 netbox/virtualization/filtersets.py:282 +#: netbox/ipam/filtersets.py:623 netbox/ipam/filtersets.py:863 +#: netbox/ipam/filtersets.py:1127 netbox/virtualization/filtersets.py:282 #: netbox/virtualization/filtersets.py:321 netbox/vpn/filtersets.py:390 msgid "Virtual machine (ID)" msgstr "虚拟机(ID)" -#: netbox/ipam/filtersets.py:627 netbox/vpn/filtersets.py:97 +#: netbox/ipam/filtersets.py:629 netbox/vpn/filtersets.py:97 #: netbox/vpn/filtersets.py:396 msgid "Interface (name)" msgstr "接口(名称)" -#: netbox/ipam/filtersets.py:638 netbox/vpn/filtersets.py:108 +#: netbox/ipam/filtersets.py:640 netbox/vpn/filtersets.py:108 #: netbox/vpn/filtersets.py:407 msgid "VM interface (name)" msgstr "虚拟接口(名称)" -#: netbox/ipam/filtersets.py:643 netbox/vpn/filtersets.py:113 +#: netbox/ipam/filtersets.py:645 netbox/vpn/filtersets.py:113 msgid "VM interface (ID)" msgstr "虚拟接口(ID)" -#: netbox/ipam/filtersets.py:648 +#: netbox/ipam/filtersets.py:650 msgid "FHRP group (ID)" msgstr "FHRP 组 (ID)" -#: netbox/ipam/filtersets.py:652 +#: netbox/ipam/filtersets.py:654 msgid "Is assigned to an interface" msgstr "分配给接口" -#: netbox/ipam/filtersets.py:656 +#: netbox/ipam/filtersets.py:658 msgid "Is assigned" msgstr "已分配" -#: netbox/ipam/filtersets.py:668 +#: netbox/ipam/filtersets.py:670 msgid "Service (ID)" msgstr "服务 (ID)" -#: netbox/ipam/filtersets.py:673 +#: netbox/ipam/filtersets.py:675 msgid "NAT inside IP address (ID)" msgstr "NAT 内部 IP 地址 (ID)" -#: netbox/ipam/filtersets.py:1041 netbox/ipam/forms/bulk_import.py:322 +#: netbox/ipam/filtersets.py:1043 netbox/ipam/forms/bulk_import.py:322 msgid "Assigned interface" msgstr "分配的接口" -#: netbox/ipam/filtersets.py:1046 +#: netbox/ipam/filtersets.py:1048 msgid "Assigned VM interface" msgstr "分配的虚拟机接口" -#: netbox/ipam/filtersets.py:1136 +#: netbox/ipam/filtersets.py:1138 msgid "IP address (ID)" msgstr "IP 地址 (ID)" -#: netbox/ipam/filtersets.py:1142 netbox/ipam/models/ip.py:788 +#: netbox/ipam/filtersets.py:1144 netbox/ipam/models/ip.py:788 msgid "IP address" msgstr "IP 地址" -#: netbox/ipam/filtersets.py:1167 +#: netbox/ipam/filtersets.py:1169 msgid "Primary IPv4 (ID)" msgstr "首选 IPv4(ID)" -#: netbox/ipam/filtersets.py:1172 +#: netbox/ipam/filtersets.py:1174 msgid "Primary IPv6 (ID)" msgstr "首选IPv6(ID)" @@ -9453,11 +9455,11 @@ msgstr "设置为设备的首选 IP" #: netbox/ipam/forms/bulk_import.py:330 msgid "Is out-of-band" -msgstr "" +msgstr "处于带外状态" #: netbox/ipam/forms/bulk_import.py:331 msgid "Designate this as the out-of-band IP address for the assigned device" -msgstr "" +msgstr "将其指定为分配设备的带外 IP 地址" #: netbox/ipam/forms/bulk_import.py:371 msgid "No device or virtual machine specified; cannot set as primary IP" @@ -9465,11 +9467,11 @@ msgstr "未指定设备或虚拟机;无法设置为首选 IP" #: netbox/ipam/forms/bulk_import.py:375 msgid "No device specified; cannot set as out-of-band IP" -msgstr "" +msgstr "未指定设备;无法设置为带外 IP" #: netbox/ipam/forms/bulk_import.py:379 msgid "Cannot set out-of-band IP for virtual machines" -msgstr "" +msgstr "无法为虚拟机设置带外 IP" #: netbox/ipam/forms/bulk_import.py:383 msgid "No interface specified; cannot set as primary IP" @@ -9477,7 +9479,7 @@ msgstr "未指定接口;无法设置为首选 IP" #: netbox/ipam/forms/bulk_import.py:387 msgid "No interface specified; cannot set as out-of-band IP" -msgstr "" +msgstr "未指定接口;无法设置为带外 IP" #: netbox/ipam/forms/bulk_import.py:422 msgid "Auth type" @@ -9636,7 +9638,7 @@ msgstr "ASN范围" #: netbox/ipam/forms/model_forms.py:231 msgid "Site/VLAN Assignment" -msgstr "Site/VLAN 分配" +msgstr "站点/VLAN 分配" #: netbox/ipam/forms/model_forms.py:259 netbox/templates/ipam/iprange.html:10 msgid "IP Range" @@ -9654,7 +9656,7 @@ msgstr "将此IP设置为分配设备/虚拟机的首选 IP" #: netbox/ipam/forms/model_forms.py:314 msgid "Make this the out-of-band IP for the device" -msgstr "" +msgstr "将此设为设备的带外 IP" #: netbox/ipam/forms/model_forms.py:329 msgid "NAT IP (Inside)" @@ -9666,11 +9668,11 @@ msgstr "IP 地址只能分配给单个对象。" #: netbox/ipam/forms/model_forms.py:398 msgid "Cannot reassign primary IP address for the parent device/VM" -msgstr "" +msgstr "无法为父设备/虚拟机重新分配主 IP 地址" #: netbox/ipam/forms/model_forms.py:402 msgid "Cannot reassign out-of-Band IP address for the parent device" -msgstr "" +msgstr "无法为父设备重新分配带外 IP 地址" #: netbox/ipam/forms/model_forms.py:412 msgid "" @@ -9681,7 +9683,7 @@ msgstr "只有分配给接口的 IP 地址才能指定为首选 IP。" msgid "" "Only IP addresses assigned to a device interface can be designated as the " "out-of-band IP for a device." -msgstr "" +msgstr "只有分配给设备接口的 IP 地址才能指定为设备的带外 IP。" #: netbox/ipam/forms/model_forms.py:508 msgid "Virtual IP Address" @@ -10063,19 +10065,19 @@ msgstr "没有作用域类型,无法设置作用域。" #: netbox/ipam/models/vlans.py:105 #, python-brace-format msgid "Starting VLAN ID in range ({value}) cannot be less than {minimum}" -msgstr "" +msgstr "范围内的起始 VLAN ID ({value}) 不能小于 {minimum}" #: netbox/ipam/models/vlans.py:111 #, python-brace-format msgid "Ending VLAN ID in range ({value}) cannot exceed {maximum}" -msgstr "" +msgstr "在范围内结束 VLAN ID ({value}) 不能超过 {maximum}" #: netbox/ipam/models/vlans.py:118 #, python-brace-format msgid "" "Ending VLAN ID in range must be greater than or equal to the starting VLAN " "ID ({range})" -msgstr "" +msgstr "范围内的结束 VLAN ID 必须大于或等于起始 VLAN ID ({range})" #: netbox/ipam/models/vlans.py:124 msgid "Ranges cannot overlap." @@ -12408,11 +12410,11 @@ msgstr "下载" #: netbox/templates/dcim/device/render_config.html:64 #: netbox/templates/virtualization/virtualmachine/render_config.html:64 msgid "Error rendering template" -msgstr "" +msgstr "渲染模板时出错" #: netbox/templates/dcim/device/render_config.html:70 msgid "No configuration template has been assigned for this device." -msgstr "" +msgstr "尚未为此设备分配任何配置模板。" #: netbox/templates/dcim/device_edit.html:44 msgid "Parent Bay" @@ -13255,7 +13257,7 @@ msgstr "重新运行" #: netbox/templates/extras/script_list.html:133 #, python-format msgid "Could not load scripts from module %(module)s" -msgstr "" +msgstr "无法从模块加载脚本 %(module)s" #: netbox/templates/extras/script_list.html:141 msgid "No Scripts Found" @@ -13643,7 +13645,7 @@ msgstr "帮助中心" #: netbox/templates/inc/user_menu.html:41 msgid "Django Admin" -msgstr "Django Admin" +msgstr "Django 管理员" #: netbox/templates/inc/user_menu.html:61 msgid "Log Out" @@ -14049,7 +14051,7 @@ msgstr "增加虚拟硬盘" #: netbox/templates/virtualization/virtualmachine/render_config.html:70 msgid "No configuration template has been assigned for this virtual machine." -msgstr "" +msgstr "尚未为此虚拟机分配任何配置模板。" #: netbox/templates/vpn/ikepolicy.html:10 #: netbox/templates/vpn/ipsecprofile.html:33 netbox/vpn/tables/crypto.py:166 @@ -15066,12 +15068,12 @@ msgstr "内存 (MB)" #: netbox/virtualization/forms/bulk_edit.py:174 msgid "Disk (MB)" -msgstr "" +msgstr "磁盘 (MB)" #: netbox/virtualization/forms/bulk_edit.py:334 #: netbox/virtualization/forms/filtersets.py:251 msgid "Size (MB)" -msgstr "" +msgstr "大小 (MB)" #: netbox/virtualization/forms/bulk_import.py:44 msgid "Type of cluster" @@ -15098,7 +15100,7 @@ msgstr "序列号" msgid "" "{device} belongs to a different site ({device_site}) than the cluster " "({cluster_site})" -msgstr "{device} 属于与集群({cluster_site})不同的站点({device_site})" +msgstr "{device} 属于另一个站点 ({device_site}) 而不是集群 ({cluster_site})" #: netbox/virtualization/forms/model_forms.py:192 msgid "Optionally pin this VM to a specific host device within the cluster" @@ -15266,19 +15268,19 @@ msgstr "GRE" #: netbox/vpn/choices.py:39 msgid "WireGuard" -msgstr "" +msgstr "WireGuard" #: netbox/vpn/choices.py:40 msgid "OpenVPN" -msgstr "" +msgstr "openVPN" #: netbox/vpn/choices.py:41 msgid "L2TP" -msgstr "" +msgstr "L2TP" #: netbox/vpn/choices.py:42 msgid "PPTP" -msgstr "" +msgstr "PPTP" #: netbox/vpn/choices.py:64 msgid "Hub" diff --git a/requirements.txt b/requirements.txt index 903e4e7fd..cb62f6e6f 100644 --- a/requirements.txt +++ b/requirements.txt @@ -15,12 +15,12 @@ django-tables2==2.7.5 django-timezone-field==7.1 djangorestframework==3.15.2 drf-spectacular==0.28.0 -drf-spectacular-sidecar==2024.12.1 +drf-spectacular-sidecar==2025.2.1 feedparser==6.0.11 gunicorn==23.0.0 Jinja2==3.1.5 Markdown==3.7 -mkdocs-material==9.5.49 +mkdocs-material==9.6.2 mkdocstrings[python-legacy]==0.27.0 netaddr==1.3.0 nh3==0.2.20 @@ -34,5 +34,5 @@ social-auth-core==4.5.4 strawberry-graphql==0.258.0 strawberry-graphql-django==0.52.0 svgwrite==1.4.3 -tablib==3.7.0 -tzdata==2024.2 +tablib==3.8.0 +tzdata==2025.1 From 9391f48d628c9e940122bf3d05e65d5b503f30bf Mon Sep 17 00:00:00 2001 From: Brian Tiemann Date: Tue, 4 Feb 2025 15:20:08 -0500 Subject: [PATCH 072/152] Update static bundle --- netbox/project-static/dist/netbox.css | Bin 554811 -> 554815 bytes netbox/project-static/package.json | 2 +- netbox/project-static/yarn.lock | 254 +++++++++++++------------- 3 files changed, 131 insertions(+), 125 deletions(-) diff --git a/netbox/project-static/dist/netbox.css b/netbox/project-static/dist/netbox.css index cee6eda688f62b50695a128811bbdd7c68cfffca..2cb549a0d2013315c376bcc38be6f4856c7d6fec 100644 GIT binary patch delta 53 zcmdn}PI3P`#fBEf7N!>F7M2#)7Pc1lEgW*%q6HP!y1FIBx&=kL$%#d&B~}Us1r^)% IwK;fv00fm0eEF7M2#)7Pc1lEgW*%g4VjaCB?c0MY_p}MX4oL3I^MawK;fv E0Jks?tpET3 diff --git a/netbox/project-static/package.json b/netbox/project-static/package.json index 636ce51a2..361af0112 100644 --- a/netbox/project-static/package.json +++ b/netbox/project-static/package.json @@ -41,7 +41,7 @@ "@types/node": "^22.3.0", "@typescript-eslint/eslint-plugin": "^8.1.0", "@typescript-eslint/parser": "^8.1.0", - "esbuild": "^0.23.1", + "esbuild": "^0.24.2", "esbuild-sass-plugin": "^3.3.1", "eslint": "<9.0", "eslint-config-prettier": "^9.1.0", diff --git a/netbox/project-static/yarn.lock b/netbox/project-static/yarn.lock index c9b42df33..92e7e7bd1 100644 --- a/netbox/project-static/yarn.lock +++ b/netbox/project-static/yarn.lock @@ -21,125 +21,130 @@ resolved "https://registry.yarnpkg.com/@emotion/memoize/-/memoize-0.7.4.tgz#19bf0f5af19149111c40d98bb0cf82119f5d9eeb" integrity sha512-Ja/Vfqe3HpuzRsG1oBtWTHk2PGZ7GR+2Vz5iYGelAw8dx32K0y7PjVuxK6z1nMpZOqAFsRUPCkK1YjJ56qJlgw== -"@esbuild/aix-ppc64@0.23.1": - version "0.23.1" - resolved "https://registry.yarnpkg.com/@esbuild/aix-ppc64/-/aix-ppc64-0.23.1.tgz#51299374de171dbd80bb7d838e1cfce9af36f353" - integrity sha512-6VhYk1diRqrhBAqpJEdjASR/+WVRtfjpqKuNw11cLiaWpAT/Uu+nokB+UJnevzy/P9C/ty6AOe0dwueMrGh/iQ== +"@esbuild/aix-ppc64@0.24.2": + version "0.24.2" + resolved "https://registry.yarnpkg.com/@esbuild/aix-ppc64/-/aix-ppc64-0.24.2.tgz#38848d3e25afe842a7943643cbcd387cc6e13461" + integrity sha512-thpVCb/rhxE/BnMLQ7GReQLLN8q9qbHmI55F4489/ByVg2aQaQ6kbcLb6FHkocZzQhxc4gx0sCk0tJkKBFzDhA== -"@esbuild/android-arm64@0.23.1": - version "0.23.1" - resolved "https://registry.yarnpkg.com/@esbuild/android-arm64/-/android-arm64-0.23.1.tgz#58565291a1fe548638adb9c584237449e5e14018" - integrity sha512-xw50ipykXcLstLeWH7WRdQuysJqejuAGPd30vd1i5zSyKK3WE+ijzHmLKxdiCMtH1pHz78rOg0BKSYOSB/2Khw== +"@esbuild/android-arm64@0.24.2": + version "0.24.2" + resolved "https://registry.yarnpkg.com/@esbuild/android-arm64/-/android-arm64-0.24.2.tgz#f592957ae8b5643129fa889c79e69cd8669bb894" + integrity sha512-cNLgeqCqV8WxfcTIOeL4OAtSmL8JjcN6m09XIgro1Wi7cF4t/THaWEa7eL5CMoMBdjoHOTh/vwTO/o2TRXIyzg== -"@esbuild/android-arm@0.23.1": - version "0.23.1" - resolved "https://registry.yarnpkg.com/@esbuild/android-arm/-/android-arm-0.23.1.tgz#5eb8c652d4c82a2421e3395b808e6d9c42c862ee" - integrity sha512-uz6/tEy2IFm9RYOyvKl88zdzZfwEfKZmnX9Cj1BHjeSGNuGLuMD1kR8y5bteYmwqKm1tj8m4cb/aKEorr6fHWQ== +"@esbuild/android-arm@0.24.2": + version "0.24.2" + resolved "https://registry.yarnpkg.com/@esbuild/android-arm/-/android-arm-0.24.2.tgz#72d8a2063aa630308af486a7e5cbcd1e134335b3" + integrity sha512-tmwl4hJkCfNHwFB3nBa8z1Uy3ypZpxqxfTQOcHX+xRByyYgunVbZ9MzUUfb0RxaHIMnbHagwAxuTL+tnNM+1/Q== -"@esbuild/android-x64@0.23.1": - version "0.23.1" - resolved "https://registry.yarnpkg.com/@esbuild/android-x64/-/android-x64-0.23.1.tgz#ae19d665d2f06f0f48a6ac9a224b3f672e65d517" - integrity sha512-nlN9B69St9BwUoB+jkyU090bru8L0NA3yFvAd7k8dNsVH8bi9a8cUAUSEcEEgTp2z3dbEDGJGfP6VUnkQnlReg== +"@esbuild/android-x64@0.24.2": + version "0.24.2" + resolved "https://registry.yarnpkg.com/@esbuild/android-x64/-/android-x64-0.24.2.tgz#9a7713504d5f04792f33be9c197a882b2d88febb" + integrity sha512-B6Q0YQDqMx9D7rvIcsXfmJfvUYLoP722bgfBlO5cGvNVb5V/+Y7nhBE3mHV9OpxBf4eAS2S68KZztiPaWq4XYw== -"@esbuild/darwin-arm64@0.23.1": - version "0.23.1" - resolved "https://registry.yarnpkg.com/@esbuild/darwin-arm64/-/darwin-arm64-0.23.1.tgz#05b17f91a87e557b468a9c75e9d85ab10c121b16" - integrity sha512-YsS2e3Wtgnw7Wq53XXBLcV6JhRsEq8hkfg91ESVadIrzr9wO6jJDMZnCQbHm1Guc5t/CdDiFSSfWP58FNuvT3Q== +"@esbuild/darwin-arm64@0.24.2": + version "0.24.2" + resolved "https://registry.yarnpkg.com/@esbuild/darwin-arm64/-/darwin-arm64-0.24.2.tgz#02ae04ad8ebffd6e2ea096181b3366816b2b5936" + integrity sha512-kj3AnYWc+CekmZnS5IPu9D+HWtUI49hbnyqk0FLEJDbzCIQt7hg7ucF1SQAilhtYpIujfaHr6O0UHlzzSPdOeA== -"@esbuild/darwin-x64@0.23.1": - version "0.23.1" - resolved "https://registry.yarnpkg.com/@esbuild/darwin-x64/-/darwin-x64-0.23.1.tgz#c58353b982f4e04f0d022284b8ba2733f5ff0931" - integrity sha512-aClqdgTDVPSEGgoCS8QDG37Gu8yc9lTHNAQlsztQ6ENetKEO//b8y31MMu2ZaPbn4kVsIABzVLXYLhCGekGDqw== +"@esbuild/darwin-x64@0.24.2": + version "0.24.2" + resolved "https://registry.yarnpkg.com/@esbuild/darwin-x64/-/darwin-x64-0.24.2.tgz#9ec312bc29c60e1b6cecadc82bd504d8adaa19e9" + integrity sha512-WeSrmwwHaPkNR5H3yYfowhZcbriGqooyu3zI/3GGpF8AyUdsrrP0X6KumITGA9WOyiJavnGZUwPGvxvwfWPHIA== -"@esbuild/freebsd-arm64@0.23.1": - version "0.23.1" - resolved "https://registry.yarnpkg.com/@esbuild/freebsd-arm64/-/freebsd-arm64-0.23.1.tgz#f9220dc65f80f03635e1ef96cfad5da1f446f3bc" - integrity sha512-h1k6yS8/pN/NHlMl5+v4XPfikhJulk4G+tKGFIOwURBSFzE8bixw1ebjluLOjfwtLqY0kewfjLSrO6tN2MgIhA== +"@esbuild/freebsd-arm64@0.24.2": + version "0.24.2" + resolved "https://registry.yarnpkg.com/@esbuild/freebsd-arm64/-/freebsd-arm64-0.24.2.tgz#5e82f44cb4906d6aebf24497d6a068cfc152fa00" + integrity sha512-UN8HXjtJ0k/Mj6a9+5u6+2eZ2ERD7Edt1Q9IZiB5UZAIdPnVKDoG7mdTVGhHJIeEml60JteamR3qhsr1r8gXvg== -"@esbuild/freebsd-x64@0.23.1": - version "0.23.1" - resolved "https://registry.yarnpkg.com/@esbuild/freebsd-x64/-/freebsd-x64-0.23.1.tgz#69bd8511fa013b59f0226d1609ac43f7ce489730" - integrity sha512-lK1eJeyk1ZX8UklqFd/3A60UuZ/6UVfGT2LuGo3Wp4/z7eRTRYY+0xOu2kpClP+vMTi9wKOfXi2vjUpO1Ro76g== +"@esbuild/freebsd-x64@0.24.2": + version "0.24.2" + resolved "https://registry.yarnpkg.com/@esbuild/freebsd-x64/-/freebsd-x64-0.24.2.tgz#3fb1ce92f276168b75074b4e51aa0d8141ecce7f" + integrity sha512-TvW7wE/89PYW+IevEJXZ5sF6gJRDY/14hyIGFXdIucxCsbRmLUcjseQu1SyTko+2idmCw94TgyaEZi9HUSOe3Q== -"@esbuild/linux-arm64@0.23.1": - version "0.23.1" - resolved "https://registry.yarnpkg.com/@esbuild/linux-arm64/-/linux-arm64-0.23.1.tgz#8050af6d51ddb388c75653ef9871f5ccd8f12383" - integrity sha512-/93bf2yxencYDnItMYV/v116zff6UyTjo4EtEQjUBeGiVpMmffDNUyD9UN2zV+V3LRV3/on4xdZ26NKzn6754g== +"@esbuild/linux-arm64@0.24.2": + version "0.24.2" + resolved "https://registry.yarnpkg.com/@esbuild/linux-arm64/-/linux-arm64-0.24.2.tgz#856b632d79eb80aec0864381efd29de8fd0b1f43" + integrity sha512-7HnAD6074BW43YvvUmE/35Id9/NB7BeX5EoNkK9obndmZBUk8xmJJeU7DwmUeN7tkysslb2eSl6CTrYz6oEMQg== -"@esbuild/linux-arm@0.23.1": - version "0.23.1" - resolved "https://registry.yarnpkg.com/@esbuild/linux-arm/-/linux-arm-0.23.1.tgz#ecaabd1c23b701070484990db9a82f382f99e771" - integrity sha512-CXXkzgn+dXAPs3WBwE+Kvnrf4WECwBdfjfeYHpMeVxWE0EceB6vhWGShs6wi0IYEqMSIzdOF1XjQ/Mkm5d7ZdQ== +"@esbuild/linux-arm@0.24.2": + version "0.24.2" + resolved "https://registry.yarnpkg.com/@esbuild/linux-arm/-/linux-arm-0.24.2.tgz#c846b4694dc5a75d1444f52257ccc5659021b736" + integrity sha512-n0WRM/gWIdU29J57hJyUdIsk0WarGd6To0s+Y+LwvlC55wt+GT/OgkwoXCXvIue1i1sSNWblHEig00GBWiJgfA== -"@esbuild/linux-ia32@0.23.1": - version "0.23.1" - resolved "https://registry.yarnpkg.com/@esbuild/linux-ia32/-/linux-ia32-0.23.1.tgz#3ed2273214178109741c09bd0687098a0243b333" - integrity sha512-VTN4EuOHwXEkXzX5nTvVY4s7E/Krz7COC8xkftbbKRYAl96vPiUssGkeMELQMOnLOJ8k3BY1+ZY52tttZnHcXQ== +"@esbuild/linux-ia32@0.24.2": + version "0.24.2" + resolved "https://registry.yarnpkg.com/@esbuild/linux-ia32/-/linux-ia32-0.24.2.tgz#f8a16615a78826ccbb6566fab9a9606cfd4a37d5" + integrity sha512-sfv0tGPQhcZOgTKO3oBE9xpHuUqguHvSo4jl+wjnKwFpapx+vUDcawbwPNuBIAYdRAvIDBfZVvXprIj3HA+Ugw== -"@esbuild/linux-loong64@0.23.1": - version "0.23.1" - resolved "https://registry.yarnpkg.com/@esbuild/linux-loong64/-/linux-loong64-0.23.1.tgz#a0fdf440b5485c81b0fbb316b08933d217f5d3ac" - integrity sha512-Vx09LzEoBa5zDnieH8LSMRToj7ir/Jeq0Gu6qJ/1GcBq9GkfoEAoXvLiW1U9J1qE/Y/Oyaq33w5p2ZWrNNHNEw== +"@esbuild/linux-loong64@0.24.2": + version "0.24.2" + resolved "https://registry.yarnpkg.com/@esbuild/linux-loong64/-/linux-loong64-0.24.2.tgz#1c451538c765bf14913512c76ed8a351e18b09fc" + integrity sha512-CN9AZr8kEndGooS35ntToZLTQLHEjtVB5n7dl8ZcTZMonJ7CCfStrYhrzF97eAecqVbVJ7APOEe18RPI4KLhwQ== -"@esbuild/linux-mips64el@0.23.1": - version "0.23.1" - resolved "https://registry.yarnpkg.com/@esbuild/linux-mips64el/-/linux-mips64el-0.23.1.tgz#e11a2806346db8375b18f5e104c5a9d4e81807f6" - integrity sha512-nrFzzMQ7W4WRLNUOU5dlWAqa6yVeI0P78WKGUo7lg2HShq/yx+UYkeNSE0SSfSure0SqgnsxPvmAUu/vu0E+3Q== +"@esbuild/linux-mips64el@0.24.2": + version "0.24.2" + resolved "https://registry.yarnpkg.com/@esbuild/linux-mips64el/-/linux-mips64el-0.24.2.tgz#0846edeefbc3d8d50645c51869cc64401d9239cb" + integrity sha512-iMkk7qr/wl3exJATwkISxI7kTcmHKE+BlymIAbHO8xanq/TjHaaVThFF6ipWzPHryoFsesNQJPE/3wFJw4+huw== -"@esbuild/linux-ppc64@0.23.1": - version "0.23.1" - resolved "https://registry.yarnpkg.com/@esbuild/linux-ppc64/-/linux-ppc64-0.23.1.tgz#06a2744c5eaf562b1a90937855b4d6cf7c75ec96" - integrity sha512-dKN8fgVqd0vUIjxuJI6P/9SSSe/mB9rvA98CSH2sJnlZ/OCZWO1DJvxj8jvKTfYUdGfcq2dDxoKaC6bHuTlgcw== +"@esbuild/linux-ppc64@0.24.2": + version "0.24.2" + resolved "https://registry.yarnpkg.com/@esbuild/linux-ppc64/-/linux-ppc64-0.24.2.tgz#8e3fc54505671d193337a36dfd4c1a23b8a41412" + integrity sha512-shsVrgCZ57Vr2L8mm39kO5PPIb+843FStGt7sGGoqiiWYconSxwTiuswC1VJZLCjNiMLAMh34jg4VSEQb+iEbw== -"@esbuild/linux-riscv64@0.23.1": - version "0.23.1" - resolved "https://registry.yarnpkg.com/@esbuild/linux-riscv64/-/linux-riscv64-0.23.1.tgz#65b46a2892fc0d1af4ba342af3fe0fa4a8fe08e7" - integrity sha512-5AV4Pzp80fhHL83JM6LoA6pTQVWgB1HovMBsLQ9OZWLDqVY8MVobBXNSmAJi//Csh6tcY7e7Lny2Hg1tElMjIA== +"@esbuild/linux-riscv64@0.24.2": + version "0.24.2" + resolved "https://registry.yarnpkg.com/@esbuild/linux-riscv64/-/linux-riscv64-0.24.2.tgz#6a1e92096d5e68f7bb10a0d64bb5b6d1daf9a694" + integrity sha512-4eSFWnU9Hhd68fW16GD0TINewo1L6dRrB+oLNNbYyMUAeOD2yCK5KXGK1GH4qD/kT+bTEXjsyTCiJGHPZ3eM9Q== -"@esbuild/linux-s390x@0.23.1": - version "0.23.1" - resolved "https://registry.yarnpkg.com/@esbuild/linux-s390x/-/linux-s390x-0.23.1.tgz#e71ea18c70c3f604e241d16e4e5ab193a9785d6f" - integrity sha512-9ygs73tuFCe6f6m/Tb+9LtYxWR4c9yg7zjt2cYkjDbDpV/xVn+68cQxMXCjUpYwEkze2RcU/rMnfIXNRFmSoDw== +"@esbuild/linux-s390x@0.24.2": + version "0.24.2" + resolved "https://registry.yarnpkg.com/@esbuild/linux-s390x/-/linux-s390x-0.24.2.tgz#ab18e56e66f7a3c49cb97d337cd0a6fea28a8577" + integrity sha512-S0Bh0A53b0YHL2XEXC20bHLuGMOhFDO6GN4b3YjRLK//Ep3ql3erpNcPlEFed93hsQAjAQDNsvcK+hV90FubSw== -"@esbuild/linux-x64@0.23.1": - version "0.23.1" - resolved "https://registry.yarnpkg.com/@esbuild/linux-x64/-/linux-x64-0.23.1.tgz#d47f97391e80690d4dfe811a2e7d6927ad9eed24" - integrity sha512-EV6+ovTsEXCPAp58g2dD68LxoP/wK5pRvgy0J/HxPGB009omFPv3Yet0HiaqvrIrgPTBuC6wCH1LTOY91EO5hQ== +"@esbuild/linux-x64@0.24.2": + version "0.24.2" + resolved "https://registry.yarnpkg.com/@esbuild/linux-x64/-/linux-x64-0.24.2.tgz#8140c9b40da634d380b0b29c837a0b4267aff38f" + integrity sha512-8Qi4nQcCTbLnK9WoMjdC9NiTG6/E38RNICU6sUNqK0QFxCYgoARqVqxdFmWkdonVsvGqWhmm7MO0jyTqLqwj0Q== -"@esbuild/netbsd-x64@0.23.1": - version "0.23.1" - resolved "https://registry.yarnpkg.com/@esbuild/netbsd-x64/-/netbsd-x64-0.23.1.tgz#44e743c9778d57a8ace4b72f3c6b839a3b74a653" - integrity sha512-aevEkCNu7KlPRpYLjwmdcuNz6bDFiE7Z8XC4CPqExjTvrHugh28QzUXVOZtiYghciKUacNktqxdpymplil1beA== +"@esbuild/netbsd-arm64@0.24.2": + version "0.24.2" + resolved "https://registry.yarnpkg.com/@esbuild/netbsd-arm64/-/netbsd-arm64-0.24.2.tgz#65f19161432bafb3981f5f20a7ff45abb2e708e6" + integrity sha512-wuLK/VztRRpMt9zyHSazyCVdCXlpHkKm34WUyinD2lzK07FAHTq0KQvZZlXikNWkDGoT6x3TD51jKQ7gMVpopw== -"@esbuild/openbsd-arm64@0.23.1": - version "0.23.1" - resolved "https://registry.yarnpkg.com/@esbuild/openbsd-arm64/-/openbsd-arm64-0.23.1.tgz#05c5a1faf67b9881834758c69f3e51b7dee015d7" - integrity sha512-3x37szhLexNA4bXhLrCC/LImN/YtWis6WXr1VESlfVtVeoFJBRINPJ3f0a/6LV8zpikqoUg4hyXw0sFBt5Cr+Q== +"@esbuild/netbsd-x64@0.24.2": + version "0.24.2" + resolved "https://registry.yarnpkg.com/@esbuild/netbsd-x64/-/netbsd-x64-0.24.2.tgz#7a3a97d77abfd11765a72f1c6f9b18f5396bcc40" + integrity sha512-VefFaQUc4FMmJuAxmIHgUmfNiLXY438XrL4GDNV1Y1H/RW3qow68xTwjZKfj/+Plp9NANmzbH5R40Meudu8mmw== -"@esbuild/openbsd-x64@0.23.1": - version "0.23.1" - resolved "https://registry.yarnpkg.com/@esbuild/openbsd-x64/-/openbsd-x64-0.23.1.tgz#2e58ae511bacf67d19f9f2dcd9e8c5a93f00c273" - integrity sha512-aY2gMmKmPhxfU+0EdnN+XNtGbjfQgwZj43k8G3fyrDM/UdZww6xrWxmDkuz2eCZchqVeABjV5BpildOrUbBTqA== +"@esbuild/openbsd-arm64@0.24.2": + version "0.24.2" + resolved "https://registry.yarnpkg.com/@esbuild/openbsd-arm64/-/openbsd-arm64-0.24.2.tgz#58b00238dd8f123bfff68d3acc53a6ee369af89f" + integrity sha512-YQbi46SBct6iKnszhSvdluqDmxCJA+Pu280Av9WICNwQmMxV7nLRHZfjQzwbPs3jeWnuAhE9Jy0NrnJ12Oz+0A== -"@esbuild/sunos-x64@0.23.1": - version "0.23.1" - resolved "https://registry.yarnpkg.com/@esbuild/sunos-x64/-/sunos-x64-0.23.1.tgz#adb022b959d18d3389ac70769cef5a03d3abd403" - integrity sha512-RBRT2gqEl0IKQABT4XTj78tpk9v7ehp+mazn2HbUeZl1YMdaGAQqhapjGTCe7uw7y0frDi4gS0uHzhvpFuI1sA== +"@esbuild/openbsd-x64@0.24.2": + version "0.24.2" + resolved "https://registry.yarnpkg.com/@esbuild/openbsd-x64/-/openbsd-x64-0.24.2.tgz#0ac843fda0feb85a93e288842936c21a00a8a205" + integrity sha512-+iDS6zpNM6EnJyWv0bMGLWSWeXGN/HTaF/LXHXHwejGsVi+ooqDfMCCTerNFxEkM3wYVcExkeGXNqshc9iMaOA== -"@esbuild/win32-arm64@0.23.1": - version "0.23.1" - resolved "https://registry.yarnpkg.com/@esbuild/win32-arm64/-/win32-arm64-0.23.1.tgz#84906f50c212b72ec360f48461d43202f4c8b9a2" - integrity sha512-4O+gPR5rEBe2FpKOVyiJ7wNDPA8nGzDuJ6gN4okSA1gEOYZ67N8JPk58tkWtdtPeLz7lBnY6I5L3jdsr3S+A6A== +"@esbuild/sunos-x64@0.24.2": + version "0.24.2" + resolved "https://registry.yarnpkg.com/@esbuild/sunos-x64/-/sunos-x64-0.24.2.tgz#8b7aa895e07828d36c422a4404cc2ecf27fb15c6" + integrity sha512-hTdsW27jcktEvpwNHJU4ZwWFGkz2zRJUz8pvddmXPtXDzVKTTINmlmga3ZzwcuMpUvLw7JkLy9QLKyGpD2Yxig== -"@esbuild/win32-ia32@0.23.1": - version "0.23.1" - resolved "https://registry.yarnpkg.com/@esbuild/win32-ia32/-/win32-ia32-0.23.1.tgz#5e3eacc515820ff729e90d0cb463183128e82fac" - integrity sha512-BcaL0Vn6QwCwre3Y717nVHZbAa4UBEigzFm6VdsVdT/MbZ38xoj1X9HPkZhbmaBGUD1W8vxAfffbDe8bA6AKnQ== +"@esbuild/win32-arm64@0.24.2": + version "0.24.2" + resolved "https://registry.yarnpkg.com/@esbuild/win32-arm64/-/win32-arm64-0.24.2.tgz#c023afb647cabf0c3ed13f0eddfc4f1d61c66a85" + integrity sha512-LihEQ2BBKVFLOC9ZItT9iFprsE9tqjDjnbulhHoFxYQtQfai7qfluVODIYxt1PgdoyQkz23+01rzwNwYfutxUQ== -"@esbuild/win32-x64@0.23.1": - version "0.23.1" - resolved "https://registry.yarnpkg.com/@esbuild/win32-x64/-/win32-x64-0.23.1.tgz#81fd50d11e2c32b2d6241470e3185b70c7b30699" - integrity sha512-BHpFFeslkWrXWyUPnbKm+xYYVYruCinGcftSBaa8zoF9hZO4BcSCFUvHVTtzpIY6YzUnYtuEhZ+C9iEXjxnasg== +"@esbuild/win32-ia32@0.24.2": + version "0.24.2" + resolved "https://registry.yarnpkg.com/@esbuild/win32-ia32/-/win32-ia32-0.24.2.tgz#96c356132d2dda990098c8b8b951209c3cd743c2" + integrity sha512-q+iGUwfs8tncmFC9pcnD5IvRHAzmbwQ3GPS5/ceCyHdjXubwQWI12MKWSNSMYLJMq23/IUCvJMS76PDqXe1fxA== + +"@esbuild/win32-x64@0.24.2": + version "0.24.2" + resolved "https://registry.yarnpkg.com/@esbuild/win32-x64/-/win32-x64-0.24.2.tgz#34aa0b52d0fbb1a654b596acfa595f0c7b77a77b" + integrity sha512-7VTgWzgMGvup6aSqDPLiW5zHaxYJGTO4OokMjIlrCtf+VpEL+cXKtCvg723iguPYI5oaUNdS+/V7OU2gvXVWEg== "@eslint-community/eslint-utils@^4.2.0", "@eslint-community/eslint-utils@^4.4.0": version "4.4.0" @@ -1429,35 +1434,36 @@ esbuild-sass-plugin@^3.3.1: safe-identifier "^0.4.2" sass "^1.71.1" -esbuild@^0.23.1: - version "0.23.1" - resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.23.1.tgz#40fdc3f9265ec0beae6f59824ade1bd3d3d2dab8" - integrity sha512-VVNz/9Sa0bs5SELtn3f7qhJCDPCF5oMEl5cO9/SSinpE9hbPVvxbd572HH5AKiP7WD8INO53GgfDDhRjkylHEg== +esbuild@^0.24.2: + version "0.24.2" + resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.24.2.tgz#b5b55bee7de017bff5fb8a4e3e44f2ebe2c3567d" + integrity sha512-+9egpBW8I3CD5XPe0n6BfT5fxLzxrlDzqydF3aviG+9ni1lDC/OvMHcxqEFV0+LANZG5R1bFMWfUrjVsdwxJvA== optionalDependencies: - "@esbuild/aix-ppc64" "0.23.1" - "@esbuild/android-arm" "0.23.1" - "@esbuild/android-arm64" "0.23.1" - "@esbuild/android-x64" "0.23.1" - "@esbuild/darwin-arm64" "0.23.1" - "@esbuild/darwin-x64" "0.23.1" - "@esbuild/freebsd-arm64" "0.23.1" - "@esbuild/freebsd-x64" "0.23.1" - "@esbuild/linux-arm" "0.23.1" - "@esbuild/linux-arm64" "0.23.1" - "@esbuild/linux-ia32" "0.23.1" - "@esbuild/linux-loong64" "0.23.1" - "@esbuild/linux-mips64el" "0.23.1" - "@esbuild/linux-ppc64" "0.23.1" - "@esbuild/linux-riscv64" "0.23.1" - "@esbuild/linux-s390x" "0.23.1" - "@esbuild/linux-x64" "0.23.1" - "@esbuild/netbsd-x64" "0.23.1" - "@esbuild/openbsd-arm64" "0.23.1" - "@esbuild/openbsd-x64" "0.23.1" - "@esbuild/sunos-x64" "0.23.1" - "@esbuild/win32-arm64" "0.23.1" - "@esbuild/win32-ia32" "0.23.1" - "@esbuild/win32-x64" "0.23.1" + "@esbuild/aix-ppc64" "0.24.2" + "@esbuild/android-arm" "0.24.2" + "@esbuild/android-arm64" "0.24.2" + "@esbuild/android-x64" "0.24.2" + "@esbuild/darwin-arm64" "0.24.2" + "@esbuild/darwin-x64" "0.24.2" + "@esbuild/freebsd-arm64" "0.24.2" + "@esbuild/freebsd-x64" "0.24.2" + "@esbuild/linux-arm" "0.24.2" + "@esbuild/linux-arm64" "0.24.2" + "@esbuild/linux-ia32" "0.24.2" + "@esbuild/linux-loong64" "0.24.2" + "@esbuild/linux-mips64el" "0.24.2" + "@esbuild/linux-ppc64" "0.24.2" + "@esbuild/linux-riscv64" "0.24.2" + "@esbuild/linux-s390x" "0.24.2" + "@esbuild/linux-x64" "0.24.2" + "@esbuild/netbsd-arm64" "0.24.2" + "@esbuild/netbsd-x64" "0.24.2" + "@esbuild/openbsd-arm64" "0.24.2" + "@esbuild/openbsd-x64" "0.24.2" + "@esbuild/sunos-x64" "0.24.2" + "@esbuild/win32-arm64" "0.24.2" + "@esbuild/win32-ia32" "0.24.2" + "@esbuild/win32-x64" "0.24.2" escape-string-regexp@^4.0.0: version "4.0.0" From 8e91db0394634921741942959c3b6c630e4f47d9 Mon Sep 17 00:00:00 2001 From: Jeremy Stretch Date: Wed, 5 Feb 2025 09:40:22 -0500 Subject: [PATCH 073/152] Misc cleanup of the release checklist --- docs/development/release-checklist.md | 27 ++++++++++++++++++++++++--- docs/development/translations.md | 5 ++++- 2 files changed, 28 insertions(+), 4 deletions(-) diff --git a/docs/development/release-checklist.md b/docs/development/release-checklist.md index c74fcf8f6..5b31a6391 100644 --- a/docs/development/release-checklist.md +++ b/docs/development/release-checklist.md @@ -8,6 +8,8 @@ This documentation describes the process of packaging and publishing a new NetBo While major releases generally introduce some very substantial change to the application, they are typically treated the same as minor version increments for the purpose of release packaging. +For patch releases (e.g. upgrading from v4.2.2 to v4.2.3), begin at the [patch releases](#patch-releases) heading below. For minor or major releases, complete the entire checklist. + ## Minor Version Releases ### Address Constrained Dependencies @@ -85,7 +87,20 @@ In cases where upgrading a dependency to its most recent release is breaking, it ### Update UI Dependencies -Check whether any UI dependencies (JavaScript packages, fonts, etc.) need to be updated by running `yarn outdated` from within the `project-static/` directory. [Upgrade these dependencies](./web-ui.md#updating-dependencies) as necessary, then run `yarn bundle` to generate the necessary files for distribution. +Check whether any UI dependencies (JavaScript packages, fonts, etc.) need to be updated by running `yarn outdated` from within the `project-static/` directory. [Upgrade these dependencies](./web-ui.md#updating-dependencies) as necessary, then run `yarn bundle` to generate the necessary files for distribution: + +``` +$ yarn bundle +yarn run v1.22.19 +$ node bundle.js +✅ Bundled source file 'styles/external.scss' to 'netbox-external.css' +✅ Bundled source file 'styles/netbox.scss' to 'netbox.css' +✅ Bundled source file 'styles/svg/rack_elevation.scss' to 'rack_elevation.css' +✅ Bundled source file 'styles/svg/cable_trace.scss' to 'cable_trace.css' +✅ Bundled source file 'index.ts' to 'netbox.js' +✅ Copied graphiql files +Done in 1.00s. +``` ### Rebuild the Device Type Definition Schema @@ -116,9 +131,12 @@ Then, compile these portable (`.po`) files for use in the application: ### Update Version and Changelog -* Update the version and published date in `release.yaml` with the current version & date. Add a designation (e.g.g `beta1`) if applicable. +* Update the version number and date in `netbox/release.yaml`. Add or remove the designation (e.g. `beta1`) if applicable. * Update the example version numbers in the feature request and bug report templates under `.github/ISSUE_TEMPLATES/`. -* Replace the "FUTURE" placeholder in the release notes with the current date. +* Add a section for this release at the top of the changelog page for the minor version (e.g. `docs/release-notes/version-4.2.md`) listing all relevant changes made in this release. + +!!! tip + Put yourself in the shoes of the user when recording change notes. Focus on the effect that each change has for the end user, rather than the specific bits of code that were modified in a PR. Ensure that each message conveys meaning absent context of the initial feature request or bug report. Remember to include key words or phrases (such as exception names) that can be easily searched. ### Submit a Pull Request @@ -126,6 +144,9 @@ Commit the above changes and submit a pull request titled **"Release vX.Y.Z"** t Once CI has completed and a colleague has reviewed the PR, merge it. This effects a new release in the `main` branch. +!!! warning + To ensure a streamlined review process, the pull request for a release **must** be limited to the changes outlined in this document. A release PR must never include functional changes to the application: Any unrelated "cleanup" needs to be captured in a separate PR prior to the release being shipped. + ### Create a New Release Create a [new release](https://github.com/netbox-community/netbox/releases/new) on GitHub with the following parameters. diff --git a/docs/development/translations.md b/docs/development/translations.md index de8545b97..81b80662f 100644 --- a/docs/development/translations.md +++ b/docs/development/translations.md @@ -30,7 +30,7 @@ To download translated strings automatically, you'll need to: 1. Install the [Transifex CLI client](https://github.com/transifex/cli) 2. Generate a [Transifex API token](https://app.transifex.com/user/settings/api/) -Once you have the client set up, run the following command: +Once you have the client set up, run the following command from the project root (e.g. `/opt/netbox/`): ```no-highlight TX_TOKEN=$TOKEN tx pull @@ -46,6 +46,9 @@ Once retrieved, the updated strings need to be compiled into new `.mo` files so Once any new `.mo` files have been generated, they need to be committed and pushed back up to GitHub. (Again, this is typically done as part of publishing a new NetBox release.) +!!! tip + Run `git status` to check that both `*.mo` & `*.po` files have been updated as expected. + ## Proposing New Languages If you'd like to add support for a new language to NetBox, the first step is to [submit a GitHub issue](https://github.com/netbox-community/netbox/issues/new?assignees=&labels=type%3A+translation&projects=&template=translation.yaml) to capture the proposal. While we'd like to add as many languages as possible, we do need to limit the rate at which new languages are added. New languages will be selected according to community interest and the number of volunteers who sign up as translators. From efa939d0c22471ea2082714ee6a942c761271d80 Mon Sep 17 00:00:00 2001 From: Renato Almeida de Oliveira Date: Thu, 6 Feb 2025 18:30:25 -0300 Subject: [PATCH 074/152] Fixes: #18241 - Script results log_threshold should default to Default (#18501) * Changed LogLevelChoices order; Changed ScriptResultView to select LogLevelChoices to LOG_DEFAULT and setup the html template to put (All) in the last one * Change LogLevelChoices in ScriptResultView get_table method * Remove default option, add Default string to INFO * Fix scripts.py and reports.py to reflect removing DEFAULT level * fix linting --- netbox/extras/choices.py | 4 +--- netbox/extras/constants.py | 9 ++++----- netbox/extras/reports.py | 2 +- netbox/extras/scripts.py | 2 +- netbox/extras/views.py | 12 ++++++------ netbox/templates/extras/script_result.html | 2 +- 6 files changed, 14 insertions(+), 17 deletions(-) diff --git a/netbox/extras/choices.py b/netbox/extras/choices.py index 4525d8689..3cd7daab4 100644 --- a/netbox/extras/choices.py +++ b/netbox/extras/choices.py @@ -155,7 +155,6 @@ class JournalEntryKindChoices(ChoiceSet): class LogLevelChoices(ChoiceSet): LOG_DEBUG = 'debug' - LOG_DEFAULT = 'default' LOG_INFO = 'info' LOG_SUCCESS = 'success' LOG_WARNING = 'warning' @@ -163,16 +162,15 @@ class LogLevelChoices(ChoiceSet): CHOICES = ( (LOG_DEBUG, _('Debug'), 'teal'), - (LOG_DEFAULT, _('Default'), 'gray'), (LOG_INFO, _('Info'), 'cyan'), (LOG_SUCCESS, _('Success'), 'green'), (LOG_WARNING, _('Warning'), 'yellow'), (LOG_FAILURE, _('Failure'), 'red'), + ) SYSTEM_LEVELS = { LOG_DEBUG: logging.DEBUG, - LOG_DEFAULT: logging.INFO, LOG_INFO: logging.INFO, LOG_SUCCESS: logging.INFO, LOG_WARNING: logging.WARNING, diff --git a/netbox/extras/constants.py b/netbox/extras/constants.py index 123b771f6..fadf59c25 100644 --- a/netbox/extras/constants.py +++ b/netbox/extras/constants.py @@ -138,9 +138,8 @@ DEFAULT_DASHBOARD = [ LOG_LEVEL_RANK = { LogLevelChoices.LOG_DEBUG: 0, - LogLevelChoices.LOG_DEFAULT: 1, - LogLevelChoices.LOG_INFO: 2, - LogLevelChoices.LOG_SUCCESS: 3, - LogLevelChoices.LOG_WARNING: 4, - LogLevelChoices.LOG_FAILURE: 5, + LogLevelChoices.LOG_INFO: 1, + LogLevelChoices.LOG_SUCCESS: 2, + LogLevelChoices.LOG_WARNING: 3, + LogLevelChoices.LOG_FAILURE: 4, } diff --git a/netbox/extras/reports.py b/netbox/extras/reports.py index a70447364..8e58b8aa0 100644 --- a/netbox/extras/reports.py +++ b/netbox/extras/reports.py @@ -15,7 +15,7 @@ class Report(BaseScript): # There is no generic log() equivalent on BaseScript def log(self, message): - self._log(message, None, level=LogLevelChoices.LOG_DEFAULT) + self._log(message, None, level=LogLevelChoices.LOG_INFO) def log_success(self, obj=None, message=None): super().log_success(message, obj) diff --git a/netbox/extras/scripts.py b/netbox/extras/scripts.py index f2bd75a1d..0d9c2181f 100644 --- a/netbox/extras/scripts.py +++ b/netbox/extras/scripts.py @@ -460,7 +460,7 @@ class BaseScript: # Logging # - def _log(self, message, obj=None, level=LogLevelChoices.LOG_DEFAULT): + def _log(self, message, obj=None, level=LogLevelChoices.LOG_INFO): """ Log a message. Do not call this method directly; use one of the log_* wrappers below. """ diff --git a/netbox/extras/views.py b/netbox/extras/views.py index 9cb9dd54a..3672e5336 100644 --- a/netbox/extras/views.py +++ b/netbox/extras/views.py @@ -1315,9 +1315,9 @@ class ScriptResultView(TableMixin, generic.ObjectView): index = 0 try: - log_threshold = LOG_LEVEL_RANK[request.GET.get('log_threshold', LogLevelChoices.LOG_DEBUG)] + log_threshold = LOG_LEVEL_RANK[request.GET.get('log_threshold', LogLevelChoices.LOG_INFO)] except KeyError: - log_threshold = LOG_LEVEL_RANK[LogLevelChoices.LOG_DEBUG] + log_threshold = LOG_LEVEL_RANK[LogLevelChoices.LOG_INFO] if job.data: if 'log' in job.data: @@ -1325,7 +1325,7 @@ class ScriptResultView(TableMixin, generic.ObjectView): tests = job.data['tests'] for log in job.data['log']: - log_level = LOG_LEVEL_RANK.get(log.get('status'), LogLevelChoices.LOG_DEFAULT) + log_level = LOG_LEVEL_RANK.get(log.get('status'), LogLevelChoices.LOG_INFO) if log_level >= log_threshold: index += 1 result = { @@ -1348,7 +1348,7 @@ class ScriptResultView(TableMixin, generic.ObjectView): for method, test_data in tests.items(): if 'log' in test_data: for time, status, obj, url, message in test_data['log']: - log_level = LOG_LEVEL_RANK.get(status, LogLevelChoices.LOG_DEFAULT) + log_level = LOG_LEVEL_RANK.get(status, LogLevelChoices.LOG_INFO) if log_level >= log_threshold: index += 1 result = { @@ -1374,9 +1374,9 @@ class ScriptResultView(TableMixin, generic.ObjectView): if job.completed: table = self.get_table(job, request, bulk_actions=False) - log_threshold = request.GET.get('log_threshold', LogLevelChoices.LOG_DEBUG) + log_threshold = request.GET.get('log_threshold', LogLevelChoices.LOG_INFO) if log_threshold not in LOG_LEVEL_RANK: - log_threshold = LogLevelChoices.LOG_DEBUG + log_threshold = LogLevelChoices.LOG_INFO context = { 'script': job.object, diff --git a/netbox/templates/extras/script_result.html b/netbox/templates/extras/script_result.html index 18a28998f..4630640a7 100644 --- a/netbox/templates/extras/script_result.html +++ b/netbox/templates/extras/script_result.html @@ -53,7 +53,7 @@

{% trans "Tagged Item Types" %}

- + - - - + {% with viewname=object_type.content_type.model_class|validated_viewname:"list" %} + {% if viewname %} + + {{ object_type.content_type.name|bettertitle }} + {{ object_type.item_count }} + + {% else %} +
  • + {{ object_type.content_type.name|bettertitle }} + {{ object_type.item_count }} +
  • + {% endif %} + {% endwith %} {% endfor %} -
    {{ object_type.content_type.name|bettertitle }} - {% with viewname=object_type.content_type.model_class|validated_viewname:"list" %} - {% if viewname %} - {{ object_type.item_count }} - {% else %} - {{ object_type.item_count }} - {% endif %} - {% endwith %} -
    +
    {% plugin_right_page object %}

    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 delta 66479 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 YYTF_(m>$rqZI2#pyLp59`}>9dKO21T!~g&Q diff --git a/netbox/translations/tr/LC_MESSAGES/django.po b/netbox/translations/tr/LC_MESSAGES/django.po index 18fd06563..f5af5eed0 100644 --- a/netbox/translations/tr/LC_MESSAGES/django.po +++ b/netbox/translations/tr/LC_MESSAGES/django.po @@ -6,16 +6,16 @@ # Translators: # Burak Senturk, 2024 # Hamdi Suat Aknar, 2024 -# Jeremy Stretch, 2024 +# Jeremy Stretch, 2025 # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2024-12-12 05:02+0000\n" +"POT-Creation-Date: 2025-01-04 05:02+0000\n" "PO-Revision-Date: 2023-10-30 17:48+0000\n" -"Last-Translator: Jeremy Stretch, 2024\n" +"Last-Translator: Jeremy Stretch, 2025\n" "Language-Team: Turkish (https://app.transifex.com/netbox-community/teams/178115/tr/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -153,7 +153,7 @@ msgstr "Etkin Olmayan" #: netbox/dcim/filtersets.py:464 netbox/dcim/filtersets.py:1021 #: netbox/dcim/filtersets.py:1368 netbox/dcim/filtersets.py:1903 #: netbox/dcim/filtersets.py:2146 netbox/dcim/filtersets.py:2204 -#: netbox/ipam/filtersets.py:339 netbox/ipam/filtersets.py:959 +#: netbox/ipam/filtersets.py:341 netbox/ipam/filtersets.py:961 #: netbox/virtualization/filtersets.py:45 #: netbox/virtualization/filtersets.py:173 netbox/vpn/filtersets.py:358 msgid "Region (ID)" @@ -165,8 +165,8 @@ msgstr "Bölge (ID)" #: netbox/dcim/filtersets.py:471 netbox/dcim/filtersets.py:1028 #: netbox/dcim/filtersets.py:1375 netbox/dcim/filtersets.py:1910 #: netbox/dcim/filtersets.py:2153 netbox/dcim/filtersets.py:2211 -#: netbox/extras/filtersets.py:509 netbox/ipam/filtersets.py:346 -#: netbox/ipam/filtersets.py:966 netbox/virtualization/filtersets.py:52 +#: netbox/extras/filtersets.py:509 netbox/ipam/filtersets.py:348 +#: netbox/ipam/filtersets.py:968 netbox/virtualization/filtersets.py:52 #: netbox/virtualization/filtersets.py:180 netbox/vpn/filtersets.py:353 msgid "Region (slug)" msgstr "Bölge (kısa ad)" @@ -176,8 +176,8 @@ msgstr "Bölge (kısa ad)" #: netbox/dcim/filtersets.py:346 netbox/dcim/filtersets.py:477 #: netbox/dcim/filtersets.py:1034 netbox/dcim/filtersets.py:1381 #: netbox/dcim/filtersets.py:1916 netbox/dcim/filtersets.py:2159 -#: netbox/dcim/filtersets.py:2217 netbox/ipam/filtersets.py:352 -#: netbox/ipam/filtersets.py:972 netbox/virtualization/filtersets.py:58 +#: netbox/dcim/filtersets.py:2217 netbox/ipam/filtersets.py:354 +#: netbox/ipam/filtersets.py:974 netbox/virtualization/filtersets.py:58 #: netbox/virtualization/filtersets.py:186 msgid "Site group (ID)" msgstr "Site grubu (ID)" @@ -188,7 +188,7 @@ msgstr "Site grubu (ID)" #: netbox/dcim/filtersets.py:1041 netbox/dcim/filtersets.py:1388 #: netbox/dcim/filtersets.py:1923 netbox/dcim/filtersets.py:2166 #: netbox/dcim/filtersets.py:2224 netbox/extras/filtersets.py:515 -#: netbox/ipam/filtersets.py:359 netbox/ipam/filtersets.py:979 +#: netbox/ipam/filtersets.py:361 netbox/ipam/filtersets.py:981 #: netbox/virtualization/filtersets.py:65 #: netbox/virtualization/filtersets.py:193 msgid "Site group (slug)" @@ -258,8 +258,8 @@ msgstr "Site" #: netbox/circuits/filtersets.py:62 netbox/circuits/filtersets.py:229 #: netbox/circuits/filtersets.py:274 netbox/dcim/filtersets.py:242 #: netbox/dcim/filtersets.py:363 netbox/dcim/filtersets.py:458 -#: netbox/extras/filtersets.py:531 netbox/ipam/filtersets.py:238 -#: netbox/ipam/filtersets.py:369 netbox/ipam/filtersets.py:989 +#: netbox/extras/filtersets.py:531 netbox/ipam/filtersets.py:240 +#: netbox/ipam/filtersets.py:371 netbox/ipam/filtersets.py:991 #: netbox/virtualization/filtersets.py:75 #: netbox/virtualization/filtersets.py:203 netbox/vpn/filtersets.py:363 msgid "Site (slug)" @@ -278,13 +278,13 @@ msgstr "ASN" #: netbox/circuits/filtersets.py:95 netbox/circuits/filtersets.py:122 #: netbox/circuits/filtersets.py:156 netbox/circuits/filtersets.py:283 -#: netbox/circuits/filtersets.py:325 netbox/ipam/filtersets.py:243 +#: netbox/circuits/filtersets.py:325 netbox/ipam/filtersets.py:245 msgid "Provider (ID)" msgstr "Sağlayıcı (ID)" #: netbox/circuits/filtersets.py:101 netbox/circuits/filtersets.py:128 #: netbox/circuits/filtersets.py:162 netbox/circuits/filtersets.py:289 -#: netbox/circuits/filtersets.py:331 netbox/ipam/filtersets.py:249 +#: netbox/circuits/filtersets.py:331 netbox/ipam/filtersets.py:251 msgid "Provider (slug)" msgstr "Sağlayıcı (kısa ad)" @@ -313,8 +313,8 @@ msgstr "Devre tipi (kısa ad)" #: netbox/dcim/filtersets.py:452 netbox/dcim/filtersets.py:1045 #: netbox/dcim/filtersets.py:1393 netbox/dcim/filtersets.py:1928 #: netbox/dcim/filtersets.py:2170 netbox/dcim/filtersets.py:2229 -#: netbox/ipam/filtersets.py:232 netbox/ipam/filtersets.py:363 -#: netbox/ipam/filtersets.py:983 netbox/virtualization/filtersets.py:69 +#: netbox/ipam/filtersets.py:234 netbox/ipam/filtersets.py:365 +#: netbox/ipam/filtersets.py:985 netbox/virtualization/filtersets.py:69 #: netbox/virtualization/filtersets.py:197 netbox/vpn/filtersets.py:368 msgid "Site (ID)" msgstr "Site (ID)" @@ -668,7 +668,7 @@ msgstr "Sağlayıcı hesabı" #: netbox/dcim/forms/filtersets.py:924 netbox/dcim/forms/filtersets.py:958 #: netbox/dcim/forms/filtersets.py:1059 netbox/dcim/forms/filtersets.py:1170 #: netbox/dcim/tables/devices.py:140 netbox/dcim/tables/devices.py:817 -#: netbox/dcim/tables/devices.py:1063 netbox/dcim/tables/modules.py:69 +#: netbox/dcim/tables/devices.py:1063 netbox/dcim/tables/modules.py:70 #: netbox/dcim/tables/power.py:74 netbox/dcim/tables/racks.py:126 #: netbox/dcim/tables/sites.py:82 netbox/dcim/tables/sites.py:138 #: netbox/ipam/forms/bulk_edit.py:256 netbox/ipam/forms/bulk_edit.py:306 @@ -1103,7 +1103,7 @@ msgstr "Ödev" #: netbox/circuits/tables/circuits.py:155 netbox/dcim/forms/bulk_edit.py:118 #: netbox/dcim/forms/bulk_import.py:100 netbox/dcim/forms/model_forms.py:117 #: netbox/dcim/tables/sites.py:89 netbox/extras/forms/filtersets.py:480 -#: netbox/ipam/filtersets.py:999 netbox/ipam/forms/bulk_edit.py:493 +#: netbox/ipam/filtersets.py:1001 netbox/ipam/forms/bulk_edit.py:493 #: netbox/ipam/forms/bulk_import.py:460 netbox/ipam/forms/model_forms.py:561 #: netbox/ipam/tables/fhrp.py:67 netbox/ipam/tables/vlans.py:122 #: netbox/ipam/tables/vlans.py:226 @@ -1540,7 +1540,7 @@ msgstr "Taahhüt Oranı" #: netbox/circuits/tables/providers.py:82 #: netbox/circuits/tables/providers.py:107 netbox/dcim/tables/devices.py:1036 #: netbox/dcim/tables/devicetypes.py:92 netbox/dcim/tables/modules.py:29 -#: netbox/dcim/tables/modules.py:72 netbox/dcim/tables/power.py:39 +#: netbox/dcim/tables/modules.py:73 netbox/dcim/tables/power.py:39 #: netbox/dcim/tables/power.py:96 netbox/dcim/tables/racks.py:84 #: netbox/dcim/tables/racks.py:145 netbox/dcim/tables/racks.py:225 #: netbox/dcim/tables/sites.py:108 netbox/extras/tables/tables.py:582 @@ -2935,7 +2935,7 @@ msgid "Parent site group (slug)" msgstr "Ana site grubu (kısa ad)" #: netbox/dcim/filtersets.py:164 netbox/extras/filtersets.py:364 -#: netbox/ipam/filtersets.py:841 netbox/ipam/filtersets.py:993 +#: netbox/ipam/filtersets.py:843 netbox/ipam/filtersets.py:995 msgid "Group (ID)" msgstr "Grup (ID)" @@ -2993,15 +2993,15 @@ msgstr "Raf tipi (ID)" #: netbox/dcim/filtersets.py:411 netbox/dcim/filtersets.py:892 #: netbox/dcim/filtersets.py:994 netbox/dcim/filtersets.py:1850 -#: netbox/ipam/filtersets.py:381 netbox/ipam/filtersets.py:493 -#: netbox/ipam/filtersets.py:1003 netbox/virtualization/filtersets.py:210 +#: netbox/ipam/filtersets.py:383 netbox/ipam/filtersets.py:495 +#: netbox/ipam/filtersets.py:1005 netbox/virtualization/filtersets.py:210 msgid "Role (ID)" msgstr "Rol (ID)" #: netbox/dcim/filtersets.py:417 netbox/dcim/filtersets.py:898 #: netbox/dcim/filtersets.py:1000 netbox/dcim/filtersets.py:1856 -#: netbox/extras/filtersets.py:558 netbox/ipam/filtersets.py:387 -#: netbox/ipam/filtersets.py:499 netbox/ipam/filtersets.py:1009 +#: netbox/extras/filtersets.py:558 netbox/ipam/filtersets.py:389 +#: netbox/ipam/filtersets.py:501 netbox/ipam/filtersets.py:1011 #: netbox/virtualization/filtersets.py:216 msgid "Role (slug)" msgstr "Rol (kısa ad)" @@ -3199,7 +3199,7 @@ msgstr "VDC (KİMLİK)" msgid "Device model" msgstr "Cihaz modeli" -#: netbox/dcim/filtersets.py:1267 netbox/ipam/filtersets.py:632 +#: netbox/dcim/filtersets.py:1267 netbox/ipam/filtersets.py:634 #: netbox/vpn/filtersets.py:102 netbox/vpn/filtersets.py:401 msgid "Interface (ID)" msgstr "Arayüz (ID)" @@ -3213,8 +3213,8 @@ msgid "Module bay (ID)" msgstr "Modül yuvası (ID)" #: netbox/dcim/filtersets.py:1333 netbox/dcim/filtersets.py:1425 -#: netbox/ipam/filtersets.py:611 netbox/ipam/filtersets.py:851 -#: netbox/ipam/filtersets.py:1115 netbox/virtualization/filtersets.py:161 +#: netbox/ipam/filtersets.py:613 netbox/ipam/filtersets.py:853 +#: netbox/ipam/filtersets.py:1117 netbox/virtualization/filtersets.py:161 #: netbox/vpn/filtersets.py:379 msgid "Device (ID)" msgstr "Cihaz (ID)" @@ -3223,8 +3223,8 @@ msgstr "Cihaz (ID)" msgid "Rack (name)" msgstr "Raf (isim)" -#: netbox/dcim/filtersets.py:1431 netbox/ipam/filtersets.py:606 -#: netbox/ipam/filtersets.py:846 netbox/ipam/filtersets.py:1121 +#: netbox/dcim/filtersets.py:1431 netbox/ipam/filtersets.py:608 +#: netbox/ipam/filtersets.py:848 netbox/ipam/filtersets.py:1123 #: netbox/vpn/filtersets.py:374 msgid "Device (name)" msgstr "Cihaz (isim)" @@ -3276,9 +3276,9 @@ msgstr "Atanmış VID" #: netbox/dcim/forms/bulk_import.py:913 netbox/dcim/forms/filtersets.py:1428 #: netbox/dcim/forms/model_forms.py:1385 #: netbox/dcim/models/device_components.py:711 -#: netbox/dcim/tables/devices.py:626 netbox/ipam/filtersets.py:316 -#: netbox/ipam/filtersets.py:327 netbox/ipam/filtersets.py:483 -#: netbox/ipam/filtersets.py:584 netbox/ipam/filtersets.py:595 +#: netbox/dcim/tables/devices.py:626 netbox/ipam/filtersets.py:318 +#: netbox/ipam/filtersets.py:329 netbox/ipam/filtersets.py:485 +#: netbox/ipam/filtersets.py:586 netbox/ipam/filtersets.py:597 #: netbox/ipam/forms/bulk_edit.py:242 netbox/ipam/forms/bulk_edit.py:298 #: netbox/ipam/forms/bulk_edit.py:340 netbox/ipam/forms/bulk_import.py:157 #: netbox/ipam/forms/bulk_import.py:243 netbox/ipam/forms/bulk_import.py:279 @@ -3305,19 +3305,19 @@ msgstr "Atanmış VID" msgid "VRF" msgstr "VRF" -#: netbox/dcim/filtersets.py:1619 netbox/ipam/filtersets.py:322 -#: netbox/ipam/filtersets.py:333 netbox/ipam/filtersets.py:489 -#: netbox/ipam/filtersets.py:590 netbox/ipam/filtersets.py:601 +#: netbox/dcim/filtersets.py:1619 netbox/ipam/filtersets.py:324 +#: netbox/ipam/filtersets.py:335 netbox/ipam/filtersets.py:491 +#: netbox/ipam/filtersets.py:592 netbox/ipam/filtersets.py:603 msgid "VRF (RD)" msgstr "VRF (RD)" -#: netbox/dcim/filtersets.py:1624 netbox/ipam/filtersets.py:1030 +#: netbox/dcim/filtersets.py:1624 netbox/ipam/filtersets.py:1032 #: netbox/vpn/filtersets.py:342 msgid "L2VPN (ID)" msgstr "L2VPN (KİMLİĞİ)" #: netbox/dcim/filtersets.py:1630 netbox/dcim/forms/filtersets.py:1433 -#: netbox/dcim/tables/devices.py:570 netbox/ipam/filtersets.py:1036 +#: netbox/dcim/tables/devices.py:570 netbox/ipam/filtersets.py:1038 #: netbox/ipam/forms/filtersets.py:518 netbox/ipam/tables/vlans.py:137 #: netbox/templates/dcim/interface.html:93 netbox/templates/ipam/vlan.html:66 #: netbox/templates/vpn/l2vpntermination.html:12 @@ -3479,7 +3479,7 @@ msgstr "Saat dilimi" #: netbox/dcim/forms/object_import.py:187 netbox/dcim/tables/devices.py:96 #: netbox/dcim/tables/devices.py:172 netbox/dcim/tables/devices.py:940 #: netbox/dcim/tables/devicetypes.py:80 netbox/dcim/tables/devicetypes.py:308 -#: netbox/dcim/tables/modules.py:20 netbox/dcim/tables/modules.py:60 +#: netbox/dcim/tables/modules.py:20 netbox/dcim/tables/modules.py:61 #: netbox/dcim/tables/racks.py:58 netbox/dcim/tables/racks.py:132 #: netbox/templates/dcim/devicetype.html:14 #: netbox/templates/dcim/inventoryitem.html:44 @@ -3730,7 +3730,7 @@ msgid "Device Type" msgstr "Cihaz Türü" #: netbox/dcim/forms/bulk_edit.py:598 netbox/dcim/forms/model_forms.py:401 -#: netbox/dcim/tables/modules.py:17 netbox/dcim/tables/modules.py:65 +#: netbox/dcim/tables/modules.py:17 netbox/dcim/tables/modules.py:66 #: netbox/templates/dcim/module.html:65 #: netbox/templates/dcim/modulebay.html:66 #: netbox/templates/dcim/moduletype.html:22 @@ -3838,7 +3838,7 @@ msgstr "Küme" #: netbox/dcim/tables/devices.py:697 netbox/dcim/tables/devices.py:754 #: netbox/dcim/tables/devices.py:801 netbox/dcim/tables/devices.py:861 #: netbox/dcim/tables/devices.py:930 netbox/dcim/tables/devices.py:1057 -#: netbox/dcim/tables/modules.py:52 netbox/extras/forms/filtersets.py:321 +#: netbox/dcim/tables/modules.py:53 netbox/extras/forms/filtersets.py:321 #: netbox/ipam/forms/bulk_import.py:304 netbox/ipam/forms/bulk_import.py:505 #: netbox/ipam/forms/filtersets.py:551 netbox/ipam/forms/model_forms.py:323 #: netbox/ipam/forms/model_forms.py:712 netbox/ipam/forms/model_forms.py:745 @@ -4090,11 +4090,11 @@ msgstr "Etiketli VLAN'lar" #: netbox/dcim/forms/bulk_edit.py:1511 msgid "Add tagged VLANs" -msgstr "" +msgstr "Etiketli VLAN'lar ekle" #: netbox/dcim/forms/bulk_edit.py:1520 msgid "Remove tagged VLANs" -msgstr "" +msgstr "Etiketli VLAN'ları kaldır" #: netbox/dcim/forms/bulk_edit.py:1536 netbox/dcim/forms/model_forms.py:1348 msgid "Wireless LAN group" @@ -4142,7 +4142,7 @@ msgstr "802.1Q Anahtarlama" #: netbox/dcim/forms/bulk_edit.py:1558 msgid "Add/Remove" -msgstr "" +msgstr "Ekle/Kaldır" #: netbox/dcim/forms/bulk_edit.py:1617 netbox/dcim/forms/bulk_edit.py:1619 msgid "Interface mode must be specified to assign VLANs" @@ -4220,7 +4220,7 @@ msgstr "Atanan rolün adı" #: netbox/dcim/forms/bulk_import.py:264 msgid "Rack type model" -msgstr "" +msgstr "Raf tipi modeli" #: netbox/dcim/forms/bulk_import.py:292 netbox/dcim/forms/bulk_import.py:435 #: netbox/dcim/forms/bulk_import.py:605 @@ -4229,11 +4229,11 @@ msgstr "Hava akışı yönü" #: netbox/dcim/forms/bulk_import.py:324 msgid "Width must be set if not specifying a rack type." -msgstr "" +msgstr "Bir raf tipi belirtilmiyorsa genişlik ayarlanmalıdır." #: netbox/dcim/forms/bulk_import.py:326 msgid "U height must be set if not specifying a rack type." -msgstr "" +msgstr "Bir raf tipi belirtilmiyorsa U yüksekliği ayarlanmalıdır." #: netbox/dcim/forms/bulk_import.py:334 msgid "Parent site" @@ -4893,6 +4893,10 @@ msgid "" "present, will be automatically replaced with the position value when " "creating a new module." msgstr "" +"Toplu oluşturma için alfanümerik aralıklar desteklenir. Tek bir aralıktaki " +"karışık durumlar ve türler desteklenmez (örnek: [ge, xe] -0/0/ " +"[0-9]). Simge {module}, varsa, yeni bir modül " +"oluştururken otomatik olarak konum değeri ile değiştirilecektir." #: netbox/dcim/forms/model_forms.py:1094 msgid "Console port template" @@ -6765,7 +6769,7 @@ msgstr "Modül bölmeleri" msgid "Inventory items" msgstr "Envanter kalemleri" -#: netbox/dcim/tables/devices.py:305 netbox/dcim/tables/modules.py:56 +#: netbox/dcim/tables/devices.py:305 netbox/dcim/tables/modules.py:57 #: netbox/templates/dcim/modulebay.html:17 msgid "Module Bay" msgstr "Modül Yuvası" @@ -7490,12 +7494,12 @@ msgstr "Yer İşaretleri" msgid "Show your personal bookmarks" msgstr "Kişisel yer imlerinizi gösterin" -#: netbox/extras/events.py:147 +#: netbox/extras/events.py:151 #, python-brace-format msgid "Unknown action type for an event rule: {action_type}" msgstr "Bir olay kuralı için bilinmeyen eylem türü: {action_type}" -#: netbox/extras/events.py:192 +#: netbox/extras/events.py:196 #, python-brace-format msgid "Cannot import events pipeline {name} error: {error}" msgstr "Olaylar boru hattı içe aktarılamıyor {name} hata: {error}" @@ -9260,129 +9264,129 @@ msgstr "L2VPN'i dışa aktarma" msgid "Exporting L2VPN (identifier)" msgstr "L2VPN'i dışa aktarma (tanımlayıcı)" -#: netbox/ipam/filtersets.py:155 netbox/ipam/filtersets.py:281 +#: netbox/ipam/filtersets.py:155 netbox/ipam/filtersets.py:283 #: netbox/ipam/forms/model_forms.py:229 netbox/ipam/tables/ip.py:212 #: netbox/templates/ipam/prefix.html:12 msgid "Prefix" msgstr "Önek" #: netbox/ipam/filtersets.py:159 netbox/ipam/filtersets.py:198 -#: netbox/ipam/filtersets.py:221 +#: netbox/ipam/filtersets.py:223 msgid "RIR (ID)" msgstr "RİR (İD)" #: netbox/ipam/filtersets.py:165 netbox/ipam/filtersets.py:204 -#: netbox/ipam/filtersets.py:227 +#: netbox/ipam/filtersets.py:229 msgid "RIR (slug)" msgstr "RIR (kısa ad)" -#: netbox/ipam/filtersets.py:285 +#: netbox/ipam/filtersets.py:287 msgid "Within prefix" msgstr "Önek içinde" -#: netbox/ipam/filtersets.py:289 +#: netbox/ipam/filtersets.py:291 msgid "Within and including prefix" msgstr "Önek içinde ve dahil olmak üzere" -#: netbox/ipam/filtersets.py:293 +#: netbox/ipam/filtersets.py:295 msgid "Prefixes which contain this prefix or IP" msgstr "Bu önek veya IP'yi içeren önekler" -#: netbox/ipam/filtersets.py:304 netbox/ipam/filtersets.py:572 +#: netbox/ipam/filtersets.py:306 netbox/ipam/filtersets.py:574 #: netbox/ipam/forms/bulk_edit.py:343 netbox/ipam/forms/filtersets.py:196 #: netbox/ipam/forms/filtersets.py:331 msgid "Mask length" msgstr "Maske uzunluğu" -#: netbox/ipam/filtersets.py:373 netbox/vpn/filtersets.py:427 +#: netbox/ipam/filtersets.py:375 netbox/vpn/filtersets.py:427 msgid "VLAN (ID)" msgstr "VLAN (KİMLİĞİ)" -#: netbox/ipam/filtersets.py:377 netbox/vpn/filtersets.py:422 +#: netbox/ipam/filtersets.py:379 netbox/vpn/filtersets.py:422 msgid "VLAN number (1-4094)" msgstr "VLAN numarası (1-4094)" -#: netbox/ipam/filtersets.py:471 netbox/ipam/filtersets.py:475 -#: netbox/ipam/filtersets.py:567 netbox/ipam/forms/model_forms.py:496 +#: netbox/ipam/filtersets.py:473 netbox/ipam/filtersets.py:477 +#: netbox/ipam/filtersets.py:569 netbox/ipam/forms/model_forms.py:496 #: netbox/templates/tenancy/contact.html:53 #: netbox/tenancy/forms/bulk_edit.py:113 msgid "Address" msgstr "Adres" -#: netbox/ipam/filtersets.py:479 +#: netbox/ipam/filtersets.py:481 msgid "Ranges which contain this prefix or IP" msgstr "Bu önek veya IP'yi içeren aralıklar" -#: netbox/ipam/filtersets.py:507 netbox/ipam/filtersets.py:563 +#: netbox/ipam/filtersets.py:509 netbox/ipam/filtersets.py:565 msgid "Parent prefix" msgstr "Ebeveyn öneki" -#: netbox/ipam/filtersets.py:616 netbox/ipam/filtersets.py:856 -#: netbox/ipam/filtersets.py:1131 netbox/vpn/filtersets.py:385 +#: netbox/ipam/filtersets.py:618 netbox/ipam/filtersets.py:858 +#: netbox/ipam/filtersets.py:1133 netbox/vpn/filtersets.py:385 msgid "Virtual machine (name)" msgstr "Sanal makine (isim)" -#: netbox/ipam/filtersets.py:621 netbox/ipam/filtersets.py:861 -#: netbox/ipam/filtersets.py:1125 netbox/virtualization/filtersets.py:282 +#: netbox/ipam/filtersets.py:623 netbox/ipam/filtersets.py:863 +#: netbox/ipam/filtersets.py:1127 netbox/virtualization/filtersets.py:282 #: netbox/virtualization/filtersets.py:321 netbox/vpn/filtersets.py:390 msgid "Virtual machine (ID)" msgstr "Sanal makine (ID)" -#: netbox/ipam/filtersets.py:627 netbox/vpn/filtersets.py:97 +#: netbox/ipam/filtersets.py:629 netbox/vpn/filtersets.py:97 #: netbox/vpn/filtersets.py:396 msgid "Interface (name)" msgstr "Arayüz (isim)" -#: netbox/ipam/filtersets.py:638 netbox/vpn/filtersets.py:108 +#: netbox/ipam/filtersets.py:640 netbox/vpn/filtersets.py:108 #: netbox/vpn/filtersets.py:407 msgid "VM interface (name)" msgstr "VM arabirimi (isim)" -#: netbox/ipam/filtersets.py:643 netbox/vpn/filtersets.py:113 +#: netbox/ipam/filtersets.py:645 netbox/vpn/filtersets.py:113 msgid "VM interface (ID)" msgstr "VM arabirimi (ID)" -#: netbox/ipam/filtersets.py:648 +#: netbox/ipam/filtersets.py:650 msgid "FHRP group (ID)" msgstr "FHRP grubu (ID)" -#: netbox/ipam/filtersets.py:652 +#: netbox/ipam/filtersets.py:654 msgid "Is assigned to an interface" msgstr "Bir arayüze atanır" -#: netbox/ipam/filtersets.py:656 +#: netbox/ipam/filtersets.py:658 msgid "Is assigned" msgstr "Atanmıştır" -#: netbox/ipam/filtersets.py:668 +#: netbox/ipam/filtersets.py:670 msgid "Service (ID)" msgstr "Hizmet (ID)" -#: netbox/ipam/filtersets.py:673 +#: netbox/ipam/filtersets.py:675 msgid "NAT inside IP address (ID)" msgstr "IP adresi içinde NAT (ID)" -#: netbox/ipam/filtersets.py:1041 netbox/ipam/forms/bulk_import.py:322 +#: netbox/ipam/filtersets.py:1043 netbox/ipam/forms/bulk_import.py:322 msgid "Assigned interface" msgstr "Atanmış arayüz" -#: netbox/ipam/filtersets.py:1046 +#: netbox/ipam/filtersets.py:1048 msgid "Assigned VM interface" msgstr "Atanmış VM arabirimi" -#: netbox/ipam/filtersets.py:1136 +#: netbox/ipam/filtersets.py:1138 msgid "IP address (ID)" msgstr "IP adresi (ID)" -#: netbox/ipam/filtersets.py:1142 netbox/ipam/models/ip.py:788 +#: netbox/ipam/filtersets.py:1144 netbox/ipam/models/ip.py:788 msgid "IP address" msgstr "IP adresi" -#: netbox/ipam/filtersets.py:1167 +#: netbox/ipam/filtersets.py:1169 msgid "Primary IPv4 (ID)" msgstr "Birincil IPv4 (ID)" -#: netbox/ipam/filtersets.py:1172 +#: netbox/ipam/filtersets.py:1174 msgid "Primary IPv6 (ID)" msgstr "Birincil IPv6 (ID)" @@ -9606,11 +9610,11 @@ msgstr "Bunu atanan cihaz için birincil IP yapın" #: netbox/ipam/forms/bulk_import.py:330 msgid "Is out-of-band" -msgstr "" +msgstr "Bant dışı" #: netbox/ipam/forms/bulk_import.py:331 msgid "Designate this as the out-of-band IP address for the assigned device" -msgstr "" +msgstr "Bunu atanan aygıtın bant dışı IP adresi olarak belirleyin" #: netbox/ipam/forms/bulk_import.py:371 msgid "No device or virtual machine specified; cannot set as primary IP" @@ -9619,11 +9623,11 @@ msgstr "" #: netbox/ipam/forms/bulk_import.py:375 msgid "No device specified; cannot set as out-of-band IP" -msgstr "" +msgstr "Aygıt belirtilmemiş; bant dışı IP olarak ayarlanamıyor" #: netbox/ipam/forms/bulk_import.py:379 msgid "Cannot set out-of-band IP for virtual machines" -msgstr "" +msgstr "Sanal makineler için bant dışı IP ayarlanamıyor" #: netbox/ipam/forms/bulk_import.py:383 msgid "No interface specified; cannot set as primary IP" @@ -9631,7 +9635,7 @@ msgstr "Arayüz belirtilmedi; birincil IP olarak ayarlanamıyor" #: netbox/ipam/forms/bulk_import.py:387 msgid "No interface specified; cannot set as out-of-band IP" -msgstr "" +msgstr "Arayüz belirtilmedi; bant dışı IP olarak ayarlanamıyor" #: netbox/ipam/forms/bulk_import.py:422 msgid "Auth type" @@ -9808,7 +9812,7 @@ msgstr "Bunu cihaz/VM için birincil IP yapın" #: netbox/ipam/forms/model_forms.py:314 msgid "Make this the out-of-band IP for the device" -msgstr "" +msgstr "Bunu cihaz için bant dışı IP yapın" #: netbox/ipam/forms/model_forms.py:329 msgid "NAT IP (Inside)" @@ -9820,11 +9824,11 @@ msgstr "IP adresi yalnızca tek bir nesneye atanabilir." #: netbox/ipam/forms/model_forms.py:398 msgid "Cannot reassign primary IP address for the parent device/VM" -msgstr "" +msgstr "Ana aygıt/sanal makine için birincil IP adresi yeniden atanamıyor" #: netbox/ipam/forms/model_forms.py:402 msgid "Cannot reassign out-of-Band IP address for the parent device" -msgstr "" +msgstr "Ana aygıt için bant dışı IP adresi yeniden atanamıyor" #: netbox/ipam/forms/model_forms.py:412 msgid "" @@ -9837,6 +9841,8 @@ msgid "" "Only IP addresses assigned to a device interface can be designated as the " "out-of-band IP for a device." msgstr "" +"Yalnızca bir cihaz arayüzüne atanan IP adresleri, bir aygıt için bant dışı " +"IP olarak belirlenebilir." #: netbox/ipam/forms/model_forms.py:508 msgid "Virtual IP Address" @@ -10229,12 +10235,12 @@ msgstr "scope_type olmadan scope_id ayarlanamıyor." #: netbox/ipam/models/vlans.py:105 #, python-brace-format msgid "Starting VLAN ID in range ({value}) cannot be less than {minimum}" -msgstr "" +msgstr "Menzilde VLAN Kimliğini Başlatma ({value}) daha az olamaz {minimum}" #: netbox/ipam/models/vlans.py:111 #, python-brace-format msgid "Ending VLAN ID in range ({value}) cannot exceed {maximum}" -msgstr "" +msgstr "Menzilde VLAN Kimliğini Sonlandırma ({value}) geçemez {maximum}" #: netbox/ipam/models/vlans.py:118 #, python-brace-format @@ -10242,6 +10248,8 @@ msgid "" "Ending VLAN ID in range must be greater than or equal to the starting VLAN " "ID ({range})" msgstr "" +"Aralıktaki bitiş VLAN kimliği, başlangıç VLAN kimliğinden daha büyük veya " +"ona eşit olmalıdır ({range})" #: netbox/ipam/models/vlans.py:124 msgid "Ranges cannot overlap." @@ -12605,11 +12613,11 @@ msgstr "İndir" #: netbox/templates/dcim/device/render_config.html:64 #: netbox/templates/virtualization/virtualmachine/render_config.html:64 msgid "Error rendering template" -msgstr "" +msgstr "Hata oluşturma şablonu" #: netbox/templates/dcim/device/render_config.html:70 msgid "No configuration template has been assigned for this device." -msgstr "" +msgstr "Bu aygıt için herhangi bir yapılandırma şablonu atanmadı." #: netbox/templates/dcim/device_edit.html:44 msgid "Parent Bay" @@ -13476,7 +13484,7 @@ msgstr "Tekrar koş" #: netbox/templates/extras/script_list.html:133 #, python-format msgid "Could not load scripts from module %(module)s" -msgstr "" +msgstr "Modülden komut dosyaları yüklenemedi %(module)s" #: netbox/templates/extras/script_list.html:141 msgid "No Scripts Found" @@ -14288,7 +14296,7 @@ msgstr "Sanal Disk Ekle" #: netbox/templates/virtualization/virtualmachine/render_config.html:70 msgid "No configuration template has been assigned for this virtual machine." -msgstr "" +msgstr "Bu sanal makine için herhangi bir yapılandırma şablonu atanmadı." #: netbox/templates/vpn/ikepolicy.html:10 #: netbox/templates/vpn/ipsecprofile.html:33 netbox/vpn/tables/crypto.py:166 @@ -15352,12 +15360,12 @@ msgstr "Bellek (MB)" #: netbox/virtualization/forms/bulk_edit.py:174 msgid "Disk (MB)" -msgstr "" +msgstr "Disk (MB)" #: netbox/virtualization/forms/bulk_edit.py:334 #: netbox/virtualization/forms/filtersets.py:251 msgid "Size (MB)" -msgstr "" +msgstr "Boyut (MB)" #: netbox/virtualization/forms/bulk_import.py:44 msgid "Type of cluster" @@ -15385,8 +15393,7 @@ msgid "" "{device} belongs to a different site ({device_site}) than the cluster " "({cluster_site})" msgstr "" -"{device} adlı aygıt, ({cluster_site}) kümesinden farklı bir siteye " -"({device_site}) aittir" +"{device} farklı bir siteye aittir ({device_site}) kümeden ({cluster_site})" #: netbox/virtualization/forms/model_forms.py:192 msgid "Optionally pin this VM to a specific host device within the cluster" @@ -15566,19 +15573,19 @@ msgstr "GREC" #: netbox/vpn/choices.py:39 msgid "WireGuard" -msgstr "" +msgstr "Tel Koruma" #: netbox/vpn/choices.py:40 msgid "OpenVPN" -msgstr "" +msgstr "OpenVPN" #: netbox/vpn/choices.py:41 msgid "L2TP" -msgstr "" +msgstr "L2TP" #: netbox/vpn/choices.py:42 msgid "PPTP" -msgstr "" +msgstr "PPTP" #: netbox/vpn/choices.py:64 msgid "Hub" diff --git a/netbox/translations/uk/LC_MESSAGES/django.mo b/netbox/translations/uk/LC_MESSAGES/django.mo index 04eed761adf8c299fb359b7d1d2a13cb99121eeb..f3c93f2d04f56a963a4e55cc52d36d41d6086377 100644 GIT binary patch delta 68293 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 delta 66726 zcmXWkcfgKSAHebZc^*QNl|nMJ_g>jMBYTIkija})TO}ikBvi5@8Y-ovh$tm83Tcbf z8zpIrdcWWMocEv4b_I6Z|jh6^TS4>^mTl$eAmV zShj-%|2vjQOO(b>@p4Q{OG{M6EAR$vh;4B)-h%JpU@V)SmdJ|pu@o*vnn-NNEVvJ^ zOeB(t!|}#RyqX*5Fgs?+NJ|h$A}>CL*W)C7A6sFwOlgU-I2SL&SFtv3#T)TAY=ez5 zrzINU9PEmFunQKxEG;pD_7h{cXi3I#ybVidNlP@t1<}J;jdcF3!M0eR^fc^=Z(tqF zn=LI-6Wd`!ycb*J+i1X-Umnt((SV=88)-kWnu{v<6FRhovj;n(72X?t9qsX1bV~AH z5p0a+--b$8UM%XGAxCwKTzBxJq zEjJY%!kK7A4@RFr*UmF&J+Go8x(zM=GuqKV(C02(nM_OM&gb&=DIG@6U|+52M?6HQKW+Xu!K;`Uo2633Nn$3;C@7JYgg3Ztd zZ$bkbhz2?q4QvM5fd|pWycFFH%h3Sd$8z`yI>PCBgZZ$o`@akqwYYIBR>sF-dJk40 zowzD2riy5VHPJwtqYZaOEAEd5Fb19b322~?$NcBeZMPA9?oI6H{@)!lO6Cgtc_1|6#Pkr_jJQpd+<4rVpZleT|LrJbJ`ezdDR;M@%jxqc0aL@n^gW z7hDr6S{vPhR`g-?I6g`GSG+DQk$54$b;5IWK$&;x2s zLH55H-;m+io&Vaj#5LFvox|I(6fQ)2z6BkTUvU}!iSF}7g+fEi&;w~Tx(L_dXxxOY zu@uqzk{X4*@z8bbe}}L_;jjp6MVq7fouhrxAs!O%--R}CU%bBn9l6KRp1z2#k=LW| zM~_AShnD{<8831a2^AJc8>$@B4bhXTEjqWo&|NVCJ!&VSfy_r2+cI<;Ziwl3&?EQ= zTJLY@RAv+ni!^yP7oOF1(5dKxM)m-@2v{CzyJv6c0TrgpNpM^!XO( z{a!JD4BGSAG5rMQb^mYV!k5Fl=;GOjMtBH)oqmZuuxN=8zyx$;?nQgP2pzH2Xg!MXrS%T^0#2p28M9qgCnAo(fm2l1=xu6lISPsqPwP4=-Kt?ny3}i z?a=`Hqf;^%9nr~XJF{Z?(NgSxBU}|To{Mgd?m`U}Jn7OX26}u1GJJmMD&8qHWPdITEYmMzn!b zcs=GXpOzSl4bVlq5pTq76~fD{EBgH~1AAfe4K6xxaaF}o;Xw2#UV^3ZK=e=ad?->W zG}s*tU=BJm+t8uijZWD|=m>m`j>r$_h@C^vhkua8m`r4^96pzeqC?vseQ+qck4Iw- zyg%N51KmzL(K$YhzB5js?}!Un8EaGt&ksU-JOOR^1x#&EtnU8b&4mqJKqI`eYFIP{ z(4G{DRzL%*i&oSOJ&3x*`?sP2jY3CaDms;O&;Vb;0r)-+!m`ykn%(~oanT1iphKCh zdWbL&8c@M#Npy8riT68W71F)20?tK;`t^8!I~ve?Xh)93^a=E2JcmhpkgY~&C_g$9 zCD4PSHu_*Yw4z?wT z3_&Zt3sYx2IwFhE3f7}Nc@1rNI~v$~=;He@=4YuL@^hk#F&}ou7U+k^QuO&>lU!Kg zKj=Y|sZLlt`Otuhq1&zsriMP|PeMmxPV^CUQ9g;*vjGkGt$2SQ+R>wEy=S7y3tYH} zvegY|d_A=0V+7~1gn(LbYE>V-hALEiyo&~gpYKsq1+CKCg> zuxF#uf-}&HA4eZ}1|6y`@&4Or1)rcj{V{q8Eq7)8Ffv!8_lu$(sfteN4bcvm-Tgm+ z3+MO_bnd64L-%0Je*$gr#d!Z6G|)q6x$n{Ee@8#Bv)vHNmqO2h`es)Yjn4aN7vAl zhU|YMx{nMiSc=ZoTC{U6AdAqzR-qNVhR)?X@%}-qO!`aocRe{8hnGw{^mF@ObOctR&%c6x za=neIgACJ2?@MxFPY%Qa$71@+=yzyfKcf%+iw<3;Cc*4z&-0*DbR8OK>1cJd{zhm3 ztRRX3T#SOOalMei^+V^V6D!HIV~dWQDOBR>i6~2(QJ( z=t#UA-GKy@Ozh{vh(AVq@^$nywj}*K*1#K@g&!J6qn}bQpd<1lx>nAk0bfA3SGMLM zzW};ui=hEji|NK##Qooi3m3&`bhXYxd%6Oh!`)~F$Ix;=pymEUcgr;`!fUxanr@F( z@D_AL7NToqEgHZPybVucPWOMimSNHKMTc%OI%h9n3*3xu!%OJg*KQSh*bwb`2QI->7Br9%F+C3L*>p7U zhoVc+=U1Z7KZlO!=IEZ*?0;{3PKJx{do+OG&(M#ef<{v}n_J?@?68hznt8M5} zS+v3WXyC2!R_u;$w=L*Y?ZW1`7wt%{WV^7KuEi>3R7YVIeki({ zmtlGQ2)pCIXvN(+hQ-?t{iV_%G@w;z;7_9?x(O}69UX!9v8en1AQ%1y{V- z>Y%%#8Jgb){W1D3Y>6+SYvxb%y`QynSPLc5^Px8SQ}In`gG11OMxyVQDeC@zm`%0T3SC3PO`>hk5$J@kV{c4) zM(6F8mZ*d+&I-@^?K7u}X6vtua9${)Gq4gX>N8qxap+nbU zQPL&Q5o+EuzW@7@;Sh~R*T6)y2h-6ZeiYr7PsjW%Xpi@!L;o#$@}>0(Q&$AtzU88| zVt&(@ZjX*|uU>Kg_b0=l9FFemyP^-FfviIV+=>SH4mve^(U;9A3QCHx7kxX{hv94U^z11e*4 z?2j#R4bH(cXvgmA=OShQP36KKy^Ow{-b5GMhiG8Ou{fSVE55RS_yTH(26i`E{yuaO zE=EUc6WY@^(E#_L{9~2o+q1MqC~pnd)c-bi2)2a50RGuh7Wb+!A&{M>O)=(SSyw6;4J2nH%pf zi0Q>K{RA4|D)h{MKDq@R;oWF}$8KT&Tksn)^hfli@h94|>bHh~8lVj~M;q>nR@4g( zY&hD`-7$Yg%wLR_UyU}nF5Z6$UFR;t0M#+If6=Mx zjL!Lxcz*`E?G~W{J{R-1q3@Uv(YN3K(2>rR929z<9X%kfMk6kd_N)q8@CG!nW@wMAjjpqJrp+(r5#<(F$6i4|YNu z?2FFj?P$-&#QRgw=VzhimY~nCLCe2{mfwPQcvmW){r3kK4%L6?+-4dYD#(ilQWVXv z6m5Vu)Gns`q74p5r(^=UHXcBqUyhy+&!bbk9j))My8lmd;e+SViZk673S5Qemx$?_ zXhY4hGEXBobT-3z*==OUTT^wn{ z(h_ShD_Y?O^gMV2t#AkW9q5nMg;R8+P^mpXIK!#6U9oViVkfZjbcwVKFv91L%xS&17^DJr_NJ9w-Iw4ny7!o0Fc3 zPT5X$sP~~$_Z1r8Pni1tPn!@{`PI=<=!3P;xo?cF>h>|+J>DOP4)utbo`bH1M`Hd8 z^!Yc@UGhG<298F*!KADEM=o6LzoEO}0+z%7a2uAJ7y|eoI(NUIUqpE)g`up4_mZBD zu9=Ly>Xa_$=&ymm3kvM}+@!wO~|3+40S~$t-V0F@yaVx%v&YkCk zQ!))5!r5p;kD&LLq9gchy#ErWh92Ff@1twxQ?z`p>0w(IPjX>}HPM5pF&a=Sbcoub z5%)m%@nCduO+XvmhL+ofK6e0JD<7lvei75(qXC^mJ8~(S%yLhtAU9gzIP-NWBNyA1e1wBxo}%u3>k?E_lBXZ zik|hg&o zGIeIL|Gj8Mh81>?HwK~&jzKHFH@X--V4g*Lz5^YheKGwp+VI!WpU@Hb2kl7a*`eNC zXu7ET*aynT8+GH2HfTUy(Szj{wA=(V;F;(MJ&MzC2U@<-oG_B@&=c}zbcCj(BeM`a zxL!x=`#8yk6@G&*igRd>{z7~BU(C<`K$x?<=>7cBB4`gwp=+ZG`dlqE@TO=(z0iP% z#`MByawQj~x$y$JU5=vPbmy=!R-YRx9)~WPNmv1sSQej;_m84O`UM)`_h=wz(Y19U z-p@WShmP`~67l|tIMniNcZ$vBXfv$yHu`Qe}&fK^E^z_RZDom^PpNA#^#Y(e-E>VZ{A&&P_m1KZ$P^q{HpaJYX5 z+T$nD?e-kn;}>K8)|mbvrawVP^c1Gv|G#tLs=S2uF#p2PjLzMo=mD}0 z4d^9w>UN`R0 zlx#td?9*r<|DhG;do)bN_2^othL-Dwc5oP4?(VeaS0T?Q6W4NK#ATy((1NW(fkc;> zz9l*W4R9j*+|1~sXdr9Q*ZF?5p3_(v|3Ig%)MMef9(aZC{~i#rpUFy4ZHd z`~&Es`UI``D|D@##&&qcm!VfNO(UE=tQ}6%zTsU-3qI13u z9s1X?2<}B2I)gi2(%Cqs|2 zpaJBK>Fc9a&_Hg8_C?pslz4wu^bvFfSD=BcL(9E@uKq1(Kzq;*fAl2#--|EEaG!q{ zJ&n%oS#+o`#dNmiAwNG_acOj^aL$az)XACT z!XaOR?(_B0x6mW`FuIt2Mgu6jDg;^=eZP0WCO9~z*I^^lZ((!%H`;7<==tpEVsr$O zYq+rIo6(WjhgN(H-M>Favpy99Du$)VzX9#hKy=RUM4z7!oq-PZf_Q&9+RoF_H-pK< z!I*IhT^twC*JH+-F!VLibU*ax{sriW9YBZvIJ%wE*M_x`1r6kCbd40pYFH5);DC64 zIc9SIKg)$Lmlx5Vyp5?z+%{vov7a&!@{ zM|aZ^^xg6;w#SQ@djH?JKCIf#=r$aWRy-+sUvysd(dhE%I&_=86y1yl{8qfb3tcn& zV*an_i2t>o{qIm+{!GXygGOEt?O}6tNZX-P(HRZwW^}gppARFEEX{=tRzf3eidNV$ru(BqJ_38JlAwN4hw^yM(D~xWda`ArsXmhkf z?a`6ygO(eP1~3J$bpJmTZ#)@qyb#kn(78K=9>w3s{PY(?eqJ=-vS>gJ(H^#r>2By^ z>yM7q5Nw5ap^I;u_h~<|iwk@50hYw0-oT4!g&8lUC1zkQ^egsJbcB|o2gxe*rSm$v zeZPqJkE3hr2Xs6B7Sn&D0cG0A{2c`uNwlH4=yQ)_2YeQN{_l9!$6Ij)R>$;L!Y`d`p)aXh z(F!M{Lwi5EYv!VVBC1${}Z=mJg zL3?@_oubdsA^!%g_$O?H|6m=g|615hvWm!GEwBUb{6+VSl`y^mMcXYtfO}h<5N@%{Bv)y|GjZB z-pH{%JWvAt-EUgPu+?8w&ZbYv1cLpo>lI&`YaqxIE{>11mz zte`Wxs(YcU`c||j^RYC(fqsCTK+9c3pUb=}{K4fFIF@uz^!2(A-4$P9OZ*odp%(9i z-=1|uMwCDQ3m1ts(O1z(cVlHd7}JS&LxY#2J>EQ#m3Y5lOt(bWMpyKQ&4K7h zt%~_ z`{0jgxz_u_(BFgx-V3cKIg|?<7!@;SpmQ`2jeId$!8-IE@d8%GooK_qq36QiSOxQb z7!IoD=>0p<`tCyONus-DCRTL+KgETS9Et@#MI$_pj>K8?%)fw+$iHYHnf8ak^P~4G zqKmjHcETIb1|LG_{84lbt&ZtUnEL*IJ7ye24~j3*$j?Q8N9Xo@7t@Q;sa%6L{Ax_^!K61niy3FoNH3y2&UPrI^I#d$MbMFHjW*aG-^E_& znke#7*p{7eCh56Y4fA{)Myv(4CH(;UvOD@Q``?PslQ9>sJ)D+!9M_>A9!-yghNq$p zJdJ+M9>WTl`)GJeHpF41N1)s57(R*xKS@ih!e{`UujlVn&R z{nPN%Y*jR{+tGcx5R2nZbd{fq_pkmeq#L2XoVpVq!WZ#=Z1{OvVgSB_K3DRK&`x)( zLHhnA7Y@-ISPp-}vY7wN@H?TV*qHPnw1KtQ48M)}WxfjKZpRYj&qV`$5goCQusde@ zI+W{!?MP3>QJDOIi_TosJ0AXc{6X}4{XDk9;opQgdj(DZhh4GNiBN7C4kDfJWccs? zOhTvNIC?}E|27PHUu;BrDc*+1aIE{k$*HiaU&Y4U_#E%RLf?fcn1in7m(d=*iw@7j&p^MH{#at#~r}j+l#ne6GZz_&R3APtkx+peNw>Xh+VX4PHRo$@)u3 z=R-SI;urS64OS$>lc_P7AH4ZmP`5X+K& z6P^20=)N!gTUufa_Dyn8k&6Rp!cA4vUhmf(DZ8#6@W?W}>V81+=Go(INT)ZRpxR!vS&=HYPn9or;$+ z^(&Ql|7)}(X@7;2H3xdsRzRnq9l9pEAydr1|K-9S-iglX-Dt(hn7;t6a0yz$Q|KCb z9_`uNSOGsl7iXrw!&)eWPE9fN`SR!@uZ`B<5>tQv*MkcS4nki#BV&PQ@Nd#@pbc-j z5QcCYTH!8q$PeH&{0`G`@IT@HZP9Vj>Ct&;eM_;K`+pS|_TUt{it}6yi|!h9EnJHp zrKQmO1JHm6qk)XV)HX%S&yD$u(GgvZ_WW72;Vo#notSh8KjgxSPNGNT&*%`hycCAG z4|*PqMi<}R=p4>L8(4w{up-`n5#7#j$NNXnUG!!2o9L-a?0+Nrfed?e9_`^pw1TvM zL!|l8IV&2i8f}V|$?t*&cpv)X^&G5(tI;)a2;B`oU@6S_FYJPH|FQo&k|KWJc;m|=Td9qn;_G{0?3cSJif03E?$Xh2EyxuxjAwi11QgEuU=4NKxj zSPuU}7gve2^wfL39@>+BXa(cZDYy?kK_5ozS%XgH7PNtP(UCh6)8C=x{=hPr%$^<^ zs)0t@7Hwz{TJaP#p!v}^uomf4Xaj{ZLWLF3fSX_y?1>(1bI`@NIo{umj>MP2Wa1PT zM)DI{@ajyV;gV>69dz;Bf<`_VotjB#fRCdG)&{iVz36wq$1$BJb9!nD3!)utkFL2P zc$x42QK<`t6pM0WDmsMAaXdbYA7HV|(i5NHkLY{-oh<38#g`>(dTO!NMi=1_^!Ynt zdICCC)6j?@%Lgz9|ws1dxv=kO3zXsOCo6sZq z{&;^CdcwYl2KE{{Qadr}w)lVxBmWj{_;mCy^ufz64^xl>-B!7=EH*}`WEd94Bzll7 z$Nsn%OJMozp`M%2gQt5;-;zB&{QKYA$gt<*(8y+?+h{)ez+>ndSQGEBM@Qr(v`5>~ zq1}si;4u393AEgg=-mHcQZP1E3q5<5DZqwoD z2;GN{+(XgDF@HH){uy*6Hlu58H#&96&$zJSpV5LB(Vks?WvDPOntv@?L0PnXotWPO zE#C$0VP7Vc_~6kU8%(B~dSr}`BrEu@GV;3Khd&I&<(@l zI2oPuu~X=C=g|)Ro8-cw&URJk*>z}vYUl$E(Tdxm z4R=Bx?2V4tV05nUi20+VQ_$yUp&eL+o-1o({${kDA~n{@y55&bLg(Phz6Q7 zUkIQC8c-#)$FEzv3JjjsMt=*Z4OM|36H-b=w`;tej0^quG-G_tSIMRGd&7uw)u zSBJUJiH<;CbOZ{b4HQA2tBkIZ2JwCqbR=7%^|!;+_kT|=jA$_0z$moh3DG3_z)ZBE zg=o1Y=yNM$`q`L%CAtmm*n4O|htU8}#QgK-yZ`^=!XeCYO(<9hEm#hn>w0KKE#m#o zXg~vE`VKU(NoWs~Xb0{`pPz?L%@TBKoqxE$t!2WkG`;%d0x1o`aLAOg1z5j5`e;h5h z4y|A#+R#q4p%2mLKSf_k-=PQ5MRa8H77XQzq2($jxv+wIXwO=pbJPp1a3s1GCZR+5 z06Mpip@FSLD|#mSTFl>tj?g|d;KMQhtLXP=2a@Nwu%~I)hK#(J`T#*6tc4C~-d~5Ton&HTxJbN%j=(2qMQ6~S{(<)7Qq0d> zDD*rRT44dSfx_tX*P|m+2OaVjG2JDm2cR7riK*}Z3Gqe}9pVSk2A9SBH8K4%8qgat z|LvH601fyPbYxDTBl9adMVYS)&s~Y$&xff+ikG|p%X5)hrI=c!u|R7y()KakBi`?e z_V8A;hojKIr^fs9V*Wz3BP(NiJ=%fS(C4>d>c9W>LA-GcJu<(J1x})Yor~#Nf$PzL>Y^1lLVMf}?Qws!p|NQF_r&xEw&?VjDK%#$KF+*^8y8e(5w5 z%ah)LRq;nGhlPuWA2!>d_mfx#pTkag7`tPs66vWwvYCptNxz1z@GLfV|JS-ce4pPP zU4$hlun|k+5v-4wa46O-nR+m>3U4KS0;^$*Qo#x6VtWq#t=VhX6whHDtX?_mzipPu@UPPNAcq_^X2>{uZ^F%LgQ zr(j6M^wggxj6;7ce+Qk)<5{Qq*qic9V!sF$AlYkPO${p26SS=haP zNPmTcNDsOp1ia@4_Wvj{J}09Owr!A}`b(zkupj9}!}QcYB<_!sNglx&*r`$QC{8Ec zr*V4f53#<${-i562~#p3YmhG5H0*+IScLQtbZTZcO@?i>hzw7@$FV3bNB8e`bh{mm z=`%5%-Ynd|1~YNL5~dax)+BugvUC!w(e1l7rk_W*>x<}`+nVIUIX;f=(+lWNso9%{ z0%frh>GoI*r=a_HIa=`sbnZ8y`+qmuvrpsw@39lBZ*x2D*L^icHvIxL0nqCbxRh(+E1 z*;4d6!{jMuaY>8WV>^=JdT(VqQ;j%>CY!?rDfrdy)t z$^fk8{-4c-6>LWv_!2FcwQaCCI>a}i0d+v9WOBU!EZWm|umfgl7wYSR6-kdq16qOB z`zHEMIAWUi6F1Sv~X&pj?1<=J+8(sCyWBx?! zLV5{W-x)NJ+&8iRZ{wmo7t?SN4#2z}(^G$>Iu2Wt{sXPJQK!&QyXY`<(apvp_yqdX z^qW{8kD?9c=^T#aI_TnUhIX)XXZHWgT#O{cii&j!k<~zZ&;ecL_o1)L2hb6F9Br^* z*RZPVp$)Y~^GC<@!|0T4#)t4*Y=mPu*NfvT-Pr$UxHwA2Io#Pjyv<(e5gz;+%aVUZ z&#+5sp>sbJOQi94Igmf-PQ1}8J@tQ5v%F7w;sx$E?Hfky7xWzY7yZ7-cXK%C%A-g3 ztRxrxx%eIXVz+)_h+oDYqz__eEYm+6os-eUcpN{#^XQOn8xR`WhmPb)w81}cE?#j< zcsDG?iKH)}Cuwrrt>J;c(ZzJdz~J@hP~H&ji>~G==ukh44&g!cxnJ>m%swatQUzVK ztVBQE77cxEzBwlKu(1W1T5sd(Mv@#Wmz#H#K|*?8M2W%S;O| zt2LOB#`E|p`M)s5b8+4D^wi%GtA0;-hb+fe-T#H}4Ihh#aRvnk-xn%8jh+ibW&}5& z4gH3r@y`3hpAViuhq~9yFhXO{{XPqQ8!ktW=q>0}zK@RFS6G4e6BoD`hNWkPf(y}t ztI%z=8B;@tuJT^9Lj{A-shEx~!pCtQZpVq(ZcaFAccUZl1A1=U^*~tE3o+S-j3>Bo z)t*8ZU$(j7C!w-fnRILPB%FW-v=STOhv>nTeO@ScBYMzGLIZjlhu~gxB&$7`p7;VM z;!*7W5c~gjE-KDXPaMZ3SQsZP2t8bauGUx3{Jq!$PopDI<>B!2LVa`*FG9ELS#(PN z#HN^QVc7Rw(2mSO1K+ri#bL&|SRnr+A>9EzD#xQI*fR9B`xZ9GgJ=c$76rRTAHjv> ze-zV$9}Vw{HRxLS5;Nmp=mGU_k_&s7b8)aV8c-vwhC^`zK8|jyyi39&D}^qi`sm{7 zfe!r;^oU&;eF?39KU)5~n4i8hJ@uDel0~_w!HquXgA33HUWoa-(Lnw|E2#8Xi2O!$ zi2I;ZF%Iv=BpOiq<6$atV{g(0@h!Xy-@zJBr0Pi~{^r7-UA`+%o(u=lLiD+<(F17t6X+sNEDsh%%QZ%i;w~}&9=z85zlsYN)i(4ck+CB5^ltRT zdj$L7dbFpRR)(JEL{G*t=+JjYr*0a$cAk#;`_P8}iut8hg+?r8oj^fkLSruShb(x*vwL`UKnIzoS;FQKB( zhy2>;)b>E{kHWf`T*8Gfg+u5fJc|x(t_@)%YM|+%XrObWTksar-{UZB^Fny(Y(hU! zD!mxKhG(GlzlH|Z@Zz94vWr2;!CW?Te0}7 z>8bzMyZiA`)31ddzmBenL+E1r8QqSBHir>ti`7UEM?16}YvKV+dNyZ%J-np`;7z0- z!*TcnT4BE}p@O;S{kO0UUin6Nt|ty8{V;aG-|-G?{$}_X-H4`tLIdc%H9he$&fUuX zH`4yw!bjml=!e1ybVSO&6+X8c;!M(;&}~zHd+1p^G<^rUc&DOMumTNaH>O_GJHqb~ zx}sCr2d#hXj%4^rWHuRBlCcr}8E!}PJi2JEe>+$aZKxL7a8Gns+>TDc63mOQM)#lr zeTii-)6THQDn`2`xp4JPMCbmI=!pDLJ>ks1AAJqKhZfB7K{zT4qZO7%&w&=`-1S8F z`3SW9!`K>EV^%za{?6z(^j(r^Z+hYhEP~eaCSK$I+Rw!jGQPvMIBj3}0pkO-;!z)l z#Wo$C`;}-wJ8?LEfgU`q_lMtj+=3od^KcR_L671*2SOlau{P=EnA`n5g^MEi5V{Co zKm*x^{W06Y@N2o-(QWqudH`K@D2zlBeSQ(%j+rh4I_0O zT5qkR?0+x%k}(eN#VhbnbdEE95*AefyoYp6+>e`aBF;P(R(ayn@JUq|hmd~@y6@jd zcR`lV!cRgaF$d|^*f)(2n$Ot(H_ZQ*U<-^eJu@$W_``%wo%|+jyN+mqS<%Jl_FIe2?KZS0 zU!vRXpJ?$D;j6d})+c{4x;Q_I{)iq(mz@khz!XH&70{7RHs-?jaeFj?fmjL0U^!fc zm2n?dz>8?PvfqY9RR^8I-sp$LbTshwXb*Rw0bM`?zv@(Yu0GPSWa4Hnoa?FRB3y_* z@D93YzKZ^W14w83E|eb}ofMsqKEDPH_-OR9??d@o=mFIh{k|BAssH}xSS~y;mSIm^ zi+(Kri}tkc|H6K5joCNuF(T-*NA#B6K=>4Xc3Iuz(jfQfO z6W_+ZcnB?6>2#R;+R+}-yRjqpm!OOAf9QeJ_Dra_JG!XH;37PTb8+yG9B8ciU(k-F zpJf}5;UYH|4)qLl=$Bw|+=yB5Fm}N&(1WMS&tW$_fv%l`=fW3F73@s96FM?$FgNZ* z8$662*(cFA#eXGT||0ltB*+7Dy?XXupthA!5Bu^N^=9~$h7 zHaHwTqUU3KT#p&}$9eX@0bC$s4PNzYn6oYDcG`~)?d89Pw_QH;WzrDM?}hekP)v`F zPD6LY9CSBq#A3JyZSM@aYceN)4?|c!+5{cq9%#io(S{D8pV41nCj1-i(ZA^0x#o{x zX*9ofOm{>V;Q%a)ccCM^0_{lhAQ$e-GuRLF{25NT(Re-SUFh5Df9SR<`d3(F9kCqg zJFo*TLF@SrT{}7c4jrq4rdwhYyd9h2bI4RC6F+m|YxW`wXY_!KuqR$c{4W*pBo#tc!1BBm4)Q%KCZ28W@Y8kY0{A;P|}Z{wr96^cmB%pD21&Xs{>VO!{SH zXcD>dg@RqMGwIn_6FVtmtIAuqE-Hk)bEZ*pi}T2K8_U& zWF#KJ_c1w(i@pUjQh(3qTO37t^0gU>`|u2w!cm1XQoq+*jAKY2MgwhiT}J8;sn??E zOE>`g6wXNfJ)f=U$QCOSrm7nH7VL~3RO5=U|0{8^iVPRc!RT-3+~+SEc0&bpwcmvH zY$&=G9z@r|O0=Pa=>Gl&tKda+H&rYa&Xu}cL;fXLrP=PG}tFyt+wJ@GQ~hofJ!V=yy5gbw*4 z^kCYIo)d@B4xB-!u2SVxp#1xPE{w1sioJJG;?!2y`4 zmXZ21p<6IDm1u`{paFh}*7FrQQvafBq+oUO-T!sC=#D+nGy6q!h~B_z_#xW!M2&DD z)j%ughb3?dj>DDcnVzp^2(S{iA>9BQ;Ve9g@1eh6SYC_$--CXcP4_5-TAGI>awTw__912hqiu=Z1{b&w2%-CDAof6@9Me z4eWm-Y)OXRhdprz+LHne!cZ4P*0PX2hcr(6$ z9za(#3R77;$%PNLL+5fF`q{k{U2NN;KSr-@oRRv?#*OI6%|VCyDJ+jKqif(RG~hqc z^Q1tNU?X&@2cwHJxt@z!T)dASApgZ1m79hNZ^ClqPeucM8hvm-_Q$h$7CSTx4vp~75oZkV$Rm#Ew~t+>w;}U z!{yPnQ43q+| z9q9I(fw$l)v|L7q@GdBZ-AQ+d>9shL^hekmo7|LXBWq~{?WV*hjDP#i}Oi1SzvoA(bd zmn2&8X7qFXGxT7|G$5ROUC{;yqC-6u9l=Lp{)^~2vL~j$LKpd8nELboT(^V*70{t= zf-aiQ=!gtQr{=+!ehwRw{tzv9#jW9I#**m4GZ$S0%dsvt8yFVzR2)kBJo*dB-h=3v z+h7P6{#ZOGx*pwr@1b-4EjriP28Teap$)e}pBoTOVh7U8u>$^t_PpSb5MX8OO!`su z`Tt?ki?pGkqJo%%bY1L+t>Tk!qj@H|DIQ!or?mIkWOhboyK6=t^Ko`%4SRXH;i>mG&q5M5Kp7cU| z1hb6@J$n*e)UTl<@Fg1f`Iyc&GVH3tBa>l&mnOpot3^AbfsBdi1=xV}OK2cx(M48n zR4CUHouWZ_B|eCr8_UoD)?qc=8uNcf%Uwvui)?p>FO&ROgByj=9&|zjn}9aB6ieWy z=rOEC`XahJs*esMb2GXaM@H{Kr)&{g?hR~-$#1zR%|-b!VW_*H>HBa9K8NEl&)9I% z%|f^72k1v+p>g47z1z^K`4D?xzPrMlk3j!A-pA-ve=Go>t*F?95WqyNPWmi%#o`k~5AMdrq~AgV>ozH@g?0EK>H3p1QvaA`58AOVQ^H70 z#-_f8R&n9C-?wN3#ioW2g>Gm7ub>rYpB8$2Gj=Ea40`Y+SVInJK{VYQJz)BwQ#Kx5 z?F-QR6x{eOy!+GJ$R2&=U|dX#oV_x%vGhhx!I`y`IQ=kWn7cz<~R zuSEm7YGznV*P-Rxqa)B49gz`e0CQ%t|6Sd?$#4~ahpz7HW`*DHH9^n*d(n#4qC>n1 zug3l8DnEsu6MvzBmYE&$JEJ2s7;X4f^!_2d4gZIvvbwfw!CG>NBOOgu@mQz>`OUw;#!w%?C zJOB+~Bsww^(ZHU>O87k5z~|T=&*EylVO}WrHTsS?i>`?r4~8i%i9VOC#)aFW1-d^+ zVCo1)8{B|4cqrx{kN%7Hw9rFgXltS04V}^FXQNa5G*-jiXgz<&`&s9wws|s9iVG{c z1ziJ^u?)V9&e`Yaw)_*_1?3lnx7&0qN_qo268ocKp^Lff zqv6N#c9?qq&x;u^VigMfj6PU&aj-f%bS?2J?1uJW82Xia9~$s-benBOpZ^fu701z4 zpKD3@MP@y8O2%T+8&7j#4-cYqejYiS6IU+{+vg_iOnL=c?mRZcs~!t>K?7Te2DUD` zBj$gKdC5PEV=?{lu&BpB&i;3m-$RD0bUu32z7Pu}o(Myn9kZtKcfv58`<0f3ZB!Kv zs2=vkzUcPdf<tH z`;b3zRYvNMWRGBV(q&hN25&}>?6K&!o{n{KJ-Rkdpljk+9DvCZPlcm)22Ld7U2KDm z)`TINgI2fU2Zzz^`ag6;a<2`R#$luz;8%%U38-4B|_Df6h z^Ewx^$++p+u$Yda@97I@!D7#a9yUSK!>|xOfNs}y=*S(z#n}1zQ2qz}k93|58Hum; zg>Z14M>|yHMGmMW7ge~h;{MnSljwflg%0gE=t+3_OJS}{VQbR8(W!bWrhh_Ld##OO zBs!r1PDTTM9-aF=SP}om)c1esm&1+5cr!Qd#H_d8{uc zH=slPJ390uHih3Ge1lGLvsc3i_e9f^Ud;%9{x_ctPq=5X25yPzv*S;8l}zm8f`cIO zCHnsV6a5&iv^_L11nZIBfUrza56GEV>BmVK;1pzKm92JNyMJV8flE{BX4V6zqy~@nJlUMRClou$>>l)ucZ` z1Dfi_?<^t)jZbwY=76xySC*cX?e`}#L@apl|{rl4r_26PejL{Gx;=wiDM zUDO-UeSZX=3o0^_;PB2PUSQ-&?nFlT#tEi2O99m8u%%AWV{ z+ub*|ZQHhO+g8WUjcs+DiOosUNhY>2u|2Ul6a7EWIo03Q@9(X(c0aWXPu1QB7k&Ho z1JHT@{{u>W3_s0L_nP}8u^p%z&1g_Nv<=j`a1zv`UG(dA&j-se?*}#j_ks1m_&3~> zF%Z;)&je6gz6Hz)o&!t!Q2cJXfn`ChtOclJ90+PBCW2bQO7rgmbzPq@dfEXg`jVscLs6l*U`FsyP=t3u6@CtCtABvH3?tle zKY)-7RKxQ@`PbS!7}R~>7^szh0CjG}zw6%0^MbjVcfZT^FULv@!Xp;&&;pX&bL}<3 zCinxv9^g4p$FRhGcO^AJHP8o)295yrFgwHM$3gL519cgG26dy0^1$b=DCYxrtIC5~ zc|%YuZv*O3^aFKlXPW;Fs2%$kEaJx#iihqm9&0>upC8NskKz9bjs%Z9c0Y z9s;#96@CA>cd$TE$80?q8^UH!-3OIk&)m0SPlCPhr+@Bl{X(!h^8_#4Cng=iIm~x~ zZNQo@13Y)Yo!|#>_AB@8ym7DHH#**dMX>t{y>ah={XrSlfrG&3U^TGqTlZmj2Uv)C zgm*4M8BjYi6>JQ?04IUv-t$C-1zZ6?GQau3ec^KMqZ>c?lY1zyfz5UO=lSe9W`lZs ze+O!1g}=C$-z2az^S{8!VEV7_hg5>WF3i(?bK_=#1(+WO)#y)9&yoxL>pndn4(4J0 z1MCLo{4c<>g!-PPDE%>%{_ehUxDVXOyyg#gtNnhupNJR?>JYpI$APVX1$cIYZ@?ws zn%@DQ`(P!Ws0D(V{k+bz;Dums<}v)e&fg1+0Z%ah2&VC|ReJ)wPR9?uUgvW?NyB(O z#|fARRt8&!^*Rq4n?N0s!(dA=RyeQo1?7Ffi0}l4_c~9%2S)HZEB^?NC9ZHpud{PU z!Kch?NAh}x%O08kf0~lS{U|#59!Bvx9~77s)$5#0S3o@_>l)4LJcz6S3p2k0Rs~~5 zXGQ+pu)qn-&&KpRcgO~@+{XR@wG;DVd!0LCq&Qw@2U~$U$F9fm`kY6vI&r<8vl#Ax zy6o1)^Ez*z?E`ha9yPoJ>T>)H>N1TH-<>B0b286w^G=}rW5Dp>bWoS;d{8&A?KVFh zpZ|ZR2a6{dgkchRohJ@yKqXcM^{`tH%nA+z^MjkgGT?JCDwr*y*LiYT6x5BVGN`-; zpbC!w)%ZfgU7&7MS9})m#PBz$8$*IbZbC6o1sj1{;Y?7C9tTzEDX0RUz_4J{#9rs| zJr1ay%Ln!atATn9I1Z}ehhQzx_a3Dh%OLF922ni`aaE;S^A} z))}A*Z2=F18IpOOw^(0;x*^p~?sYzlwg>FQJWmR*XPd77B`6&gkkaeCqB#g^tFD83 zuJ;Ly4OU9!bzYV?2P-lk1GWSIHY}Lh-SVZNcJK_S$AAxJPn*U)C#r+_ur~s$>-wMJ zD7;7nv*XB<*6TbvwFR}J`Cub3RywcqoUa?G8_!0tB$zn8*SWDY12vxo#s#l~xxu%f zo;Re<;2x4rp!_31=kI^#q3D?W2}TDGfhoXCpaMUGI_8lxdYvZ_nL(Ws6+jgn4vqnj zg1S7bWO8?GJg8^Ai$T5XbrIA_`OYw5X0Cs2RcRCjbOZ;0hu(_$|Q>c-Lr^nz8gyH`t1P$%s$P&>N~)Q&s>bt6ldgX@1QO2-`T3XTyB9LpmwM)sAo8HL7g+}KwVbH4X=UPxu;-WFkEgouPCUv z=DE54^-Lwu3=6l1jB%bKs9y(j0t`MofYJ_6@c2>=3rBB2B>rA1E{!w z0$%4M83jSzxYmFL!0TWWFlIsb2IdPy;X3r}0CkpjD&(H+TfuV7qZal$zXz-fmSDaY z)Q#sis4b6N#4Vg2OvSu_VG~ftdKjpaatEkG`4LP9Ml9;wH+-I)CTfW!u9;h3YUkSHfGO(tu|Ar{qq79(V z(%Ya4MJefCE)~Jr%zJ^=!INNrFkvaTz)Y|x^BtggK7;+h)TP}!-$GEg-heVLUs6z) zdwC)CJ@rrm!M32b@EVvB{0{1*N?O*v!E^<6uU`)8*zW_i6Yp&vqnvxvmIiehHvyx7 z*FoKK{{b_CHOsqa|6tG;8^a_NorFt4tz;b-3w!~d0Dpnq{kW_ucs+B$0+rlnG?yy7 zg(_5W@03Tth{PAJ>ORbt19h%60d*)k8cqbYfQ?nT{!5@dz@Y0fRWexT zYEV0J9u(0Bo5!y19@BiF?sRp)x!@R3Ctr#h?v1N1sFSrfsH|h`p<&lDF$6W zaca7RX$?z*T0u)NEZ7ayxzGpH)p8ot$rrPhd$r^P)wmB_0&WF$F4eB>-l(R5nlA&z zci)GiWAqf%t@tyjf{E(bWd*A90-z329Z<)-DX91%pmt_CsAo3E!Fb>uP;sBZ#9*Ad z?m}~d%4=@u8;zoqZar8Uya4JPh*Qsf9#9)p1G7LSZUI&38mJw6ZTJh+v5!{Y#e|?P zw=|&QOMzNg1H-l;C$rDf6Ga6k8Lk1<`B9rc0d=|fHE@r8bi| z?gd~Ta670Q&P&5s4c&PmFpaMNRwz2D#yJMgeo)uzMNoxbfm+FT!vu}&sTHWktAW~y zPM{hXWb-j#Oy+YyJ>ghq^GBfKzJSi-zh7hb#*h%yJ-;-ltqwGtZMX;2N*;o0IARmG zvCN>Zl8RtPu)En8fVv^=28)2t!4hD)rtXcd1L#wS^H8+X4WJ6_F?_a!{9LaZo$d6V&};QA?j2cmab}as$+g zUx1mx@U7g$JYag}?LifuX1EU2$#)b~19w32{A(DowR>Yr1nQ7w0_Cp)>LhRKL($1F z1k@oI2Wka#KpmQWpw8xtpl;PK%>NtI<&>t4TR11EN71UF?)~FH9ZGLomp3!0I)y+j zpsb;Smi0JRhEKoLc4=RV`f3r1qz4b+Yd1hw+zptk$~sFj@r)%bJs z`?q)Fl7c#v1wrTfua2Uv?r0d~Iy^@}ZP{H=oqIaCI}-^MK@Ly_%YnL;RtL4U^*~*| z?LnPvBS0-+6{wv(4~qA*gFa4@j_xy)0-(0MI;aAz4Euvhm;#D$3#dbJ1ysQo=Kl_A zAxS#9SP{(5yf3JeZ#Ag=TcCFMHyEAzo~WI@&TqAofjXH|f@-87sAE+HOb)gKwX(6G z3NHh7zu0E;`=AcRdr)~%y0|-(4%E4l9aLTsFdJAE^l4>7Q1rs!4^V-pKyCRoP@O&m zMfe_6W0AVLD@h9K94QGZuDM}1!y%v=nq;^JRK2618hP54>tBT5FzDDs>gG0*15}5N zK=~(tTInKC$MO`YL+}AqUbsNF;VhsQkl(NjsK#r8I$1k|S;1ML8aoom^{*SueGJ
    y0qT&o2i5p=P|pL_f;tpuK`rFA&7Xt1 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

    @@ -79,7 +80,7 @@

    {% trans "Tagged Objects" %}

    -
    +
    {% render_table taggeditem_table 'inc/table.html' %} {% include 'inc/paginator.html' with paginator=taggeditem_table.paginator page=taggeditem_table.page %}
    From 4b98f74943fcde3d3dad31335cf9a8137e46a03c Mon Sep 17 00:00:00 2001 From: Alexander Haase Date: Mon, 10 Feb 2025 15:42:08 +0100 Subject: [PATCH 081/152] Fixes 18247: Fix dark mode button classes (#18617) --- netbox/dcim/tables/template_code.py | 42 +++++++++---------- .../templates/extras/inc/format_toggle.html | 4 +- 2 files changed, 23 insertions(+), 23 deletions(-) diff --git a/netbox/dcim/tables/template_code.py b/netbox/dcim/tables/template_code.py index 4b51cd06a..1c526649b 100644 --- a/netbox/dcim/tables/template_code.py +++ b/netbox/dcim/tables/template_code.py @@ -159,8 +159,8 @@ CONSOLEPORT_BUTTONS = """ {% endif %} {% elif perms.dcim.add_cable %} - - + +
    diff --git a/netbox/utilities/views.py b/netbox/utilities/views.py index b3334ca87..b9a5f85fb 100644 --- a/netbox/utilities/views.py +++ b/netbox/utilities/views.py @@ -196,7 +196,10 @@ class GetRelatedModelsMixin: ] related_models.extend(extra) - return sorted(related_models, key=lambda x: x[0].model._meta.verbose_name.lower()) + return sorted( + filter(lambda qs: qs[0].exists(), related_models), + key=lambda qs: qs[0].model._meta.verbose_name.lower(), + ) class ViewTab: From 3e1cc0d7f388ae6ffa7442f3b0f9d5deb3b520cf Mon Sep 17 00:00:00 2001 From: Alexander Haase Date: Mon, 10 Feb 2025 17:03:08 +0100 Subject: [PATCH 084/152] Fixes 18208: Consolidate rendering configuration templates (#18604) --- netbox/dcim/views.py | 50 +------------ netbox/extras/views.py | 56 ++++++++++++++ .../object_render_config.html} | 5 +- .../virtualmachine/render_config.html | 75 ------------------- netbox/virtualization/views.py | 50 +------------ 5 files changed, 67 insertions(+), 169 deletions(-) rename netbox/templates/{dcim/device/render_config.html => extras/object_render_config.html} (95%) delete mode 100644 netbox/templates/virtualization/virtualmachine/render_config.html diff --git a/netbox/dcim/views.py b/netbox/dcim/views.py index 0978747d1..6efdb63f0 100644 --- a/netbox/dcim/views.py +++ b/netbox/dcim/views.py @@ -4,17 +4,15 @@ from django.core.paginator import EmptyPage, PageNotAnInteger from django.db import transaction from django.db.models import Prefetch from django.forms import ModelMultipleChoiceField, MultipleHiddenInput, modelformset_factory -from django.http import HttpResponse from django.shortcuts import get_object_or_404, redirect, render from django.urls import reverse from django.utils.html import escape from django.utils.safestring import mark_safe from django.utils.translation import gettext_lazy as _ from django.views.generic import View -from jinja2.exceptions import TemplateError from circuits.models import Circuit, CircuitTermination -from extras.views import ObjectConfigContextView +from extras.views import ObjectConfigContextView, ObjectRenderConfigView from ipam.models import ASN, IPAddress, Prefix, VLANGroup from ipam.tables import InterfaceVLANTable, VLANTranslationRuleTable from netbox.constants import DEFAULT_ACTION_PERMISSIONS @@ -2253,54 +2251,14 @@ class DeviceConfigContextView(ObjectConfigContextView): @register_model_view(Device, 'render-config') -class DeviceRenderConfigView(generic.ObjectView): +class DeviceRenderConfigView(ObjectRenderConfigView): queryset = Device.objects.all() - template_name = 'dcim/device/render_config.html' + base_template = 'dcim/device/base.html' tab = ViewTab( label=_('Render Config'), - weight=2100 + weight=2100, ) - def get(self, request, **kwargs): - instance = self.get_object(**kwargs) - context = self.get_extra_context(request, instance) - - # If a direct export has been requested, return the rendered template content as a - # downloadable file. - if request.GET.get('export'): - content = context['rendered_config'] or context['error_message'] - response = HttpResponse(content, content_type='text') - filename = f"{instance.name or 'config'}.txt" - response['Content-Disposition'] = f'attachment; filename="{filename}"' - return response - - return render(request, self.get_template_name(), { - 'object': instance, - 'tab': self.tab, - **context, - }) - - def get_extra_context(self, request, instance): - # Compile context data - context_data = instance.get_config_context() - context_data.update({'device': instance}) - - # Render the config template - rendered_config = None - error_message = None - if config_template := instance.get_config_template(): - try: - rendered_config = config_template.render(context=context_data) - except TemplateError as e: - error_message = _("An error occurred while rendering the template: {error}").format(error=e) - - return { - 'config_template': config_template, - 'context_data': context_data, - 'rendered_config': rendered_config, - 'error_message': error_message, - } - @register_model_view(Device, 'virtual-machines') class DeviceVirtualMachinesView(generic.ObjectChildrenView): diff --git a/netbox/extras/views.py b/netbox/extras/views.py index 3672e5336..86e7f214a 100644 --- a/netbox/extras/views.py +++ b/netbox/extras/views.py @@ -10,6 +10,7 @@ from django.utils import timezone from django.utils.module_loading import import_string from django.utils.translation import gettext as _ from django.views.generic import View +from jinja2.exceptions import TemplateError from core.choices import ManagedFileRootPathChoices from core.forms import ManagedFileForm @@ -885,6 +886,61 @@ class ConfigTemplateBulkSyncDataView(generic.BulkSyncDataView): queryset = ConfigTemplate.objects.all() +class ObjectRenderConfigView(generic.ObjectView): + base_template = None + template_name = 'extras/object_render_config.html' + + def get(self, request, **kwargs): + instance = self.get_object(**kwargs) + context = self.get_extra_context(request, instance) + + # If a direct export has been requested, return the rendered template content as a + # downloadable file. + if request.GET.get('export'): + content = context['rendered_config'] or context['error_message'] + response = HttpResponse(content, content_type='text') + filename = f"{instance.name or 'config'}.txt" + response['Content-Disposition'] = f'attachment; filename="{filename}"' + return response + + return render( + request, + self.get_template_name(), + { + 'object': instance, + 'tab': self.tab, + **context, + }, + ) + + def get_extra_context_data(self, request, instance): + return { + f'{instance._meta.model_name}': instance, + } + + def get_extra_context(self, request, instance): + # Compile context data + context_data = instance.get_config_context() + context_data.update(self.get_extra_context_data(request, instance)) + + # Render the config template + rendered_config = None + error_message = None + if config_template := instance.get_config_template(): + try: + rendered_config = config_template.render(context=context_data) + except TemplateError as e: + error_message = _("An error occurred while rendering the template: {error}").format(error=e) + + return { + 'base_template': self.base_template, + 'config_template': config_template, + 'context_data': context_data, + 'rendered_config': rendered_config, + 'error_message': error_message, + } + + # # Image attachments # diff --git a/netbox/templates/dcim/device/render_config.html b/netbox/templates/extras/object_render_config.html similarity index 95% rename from netbox/templates/dcim/device/render_config.html rename to netbox/templates/extras/object_render_config.html index ab2f1c531..b28146ff4 100644 --- a/netbox/templates/dcim/device/render_config.html +++ b/netbox/templates/extras/object_render_config.html @@ -1,4 +1,5 @@ -{% extends 'dcim/device/base.html' %} +{% extends base_template %} +{% load helpers %} {% load static %} {% load i18n %} @@ -67,7 +68,7 @@ {% endif %} {% else %}
    - {% trans "No configuration template has been assigned for this device." %} + {% trans "No configuration template has been assigned." %}
    {% endif %}
    diff --git a/netbox/templates/virtualization/virtualmachine/render_config.html b/netbox/templates/virtualization/virtualmachine/render_config.html deleted file mode 100644 index fa6f1723b..000000000 --- a/netbox/templates/virtualization/virtualmachine/render_config.html +++ /dev/null @@ -1,75 +0,0 @@ -{% extends 'virtualization/virtualmachine/base.html' %} -{% load static %} -{% load i18n %} - -{% block title %}{{ object }} - {% trans "Config" %}{% endblock %} - -{% block content %} -
    -
    -
    -

    {% trans "Config Template" %}

    - - - - - - - - - - - - - -
    {% trans "Config Template" %}{{ config_template|linkify|placeholder }}
    {% trans "Data Source" %}{{ config_template.data_file.source|linkify|placeholder }}
    {% trans "Data File" %}{{ config_template.data_file|linkify|placeholder }}
    -
    -
    -
    -
    -
    -
    -
    -

    - -

    -
    -
    -
    {{ context_data|pprint }}
    -
    -
    -
    -
    -
    -
    -
    -
    -
    -
    - {% if config_template %} - {% if rendered_config %} -
    -

    - {% trans "Rendered Config" %} - - {% trans "Download" %} - -

    -
    {{ rendered_config }}
    -
    - {% else %} -
    -

    {% trans "Error rendering template" %}

    - {% trans error_message %} -
    - {% endif %} - {% else %} -
    - {% trans "No configuration template has been assigned for this virtual machine." %} -
    - {% endif %} -
    -
    -{% endblock %} diff --git a/netbox/virtualization/views.py b/netbox/virtualization/views.py index 7682d0fc8..343d346e4 100644 --- a/netbox/virtualization/views.py +++ b/netbox/virtualization/views.py @@ -1,17 +1,15 @@ from django.contrib import messages from django.db import transaction from django.db.models import Prefetch, Sum -from django.http import HttpResponse from django.shortcuts import get_object_or_404, redirect, render from django.urls import reverse from django.utils.translation import gettext_lazy as _ -from jinja2.exceptions import TemplateError from dcim.filtersets import DeviceFilterSet from dcim.forms import DeviceFilterForm from dcim.models import Device from dcim.tables import DeviceTable -from extras.views import ObjectConfigContextView +from extras.views import ObjectConfigContextView, ObjectRenderConfigView from ipam.models import IPAddress from ipam.tables import InterfaceVLANTable, VLANTranslationRuleTable from netbox.constants import DEFAULT_ACTION_PERMISSIONS @@ -427,54 +425,14 @@ class VirtualMachineConfigContextView(ObjectConfigContextView): @register_model_view(VirtualMachine, 'render-config') -class VirtualMachineRenderConfigView(generic.ObjectView): +class VirtualMachineRenderConfigView(ObjectRenderConfigView): queryset = VirtualMachine.objects.all() - template_name = 'virtualization/virtualmachine/render_config.html' + base_template = 'virtualization/virtualmachine/base.html' tab = ViewTab( label=_('Render Config'), - weight=2100 + weight=2100, ) - def get(self, request, **kwargs): - instance = self.get_object(**kwargs) - context = self.get_extra_context(request, instance) - - # If a direct export has been requested, return the rendered template content as a - # downloadable file. - if request.GET.get('export'): - content = context['rendered_config'] or context['error_message'] - response = HttpResponse(content, content_type='text') - filename = f"{instance.name or 'config'}.txt" - response['Content-Disposition'] = f'attachment; filename="{filename}"' - return response - - return render(request, self.get_template_name(), { - 'object': instance, - 'tab': self.tab, - **context, - }) - - def get_extra_context(self, request, instance): - # Compile context data - context_data = instance.get_config_context() - context_data.update({'virtualmachine': instance}) - - # Render the config template - rendered_config = None - error_message = None - if config_template := instance.get_config_template(): - try: - rendered_config = config_template.render(context=context_data) - except TemplateError as e: - error_message = _("An error occurred while rendering the template: {error}").format(error=e) - - return { - 'config_template': config_template, - 'context_data': context_data, - 'rendered_config': rendered_config, - 'error_message': error_message, - } - @register_model_view(VirtualMachine, 'add', detail=False) @register_model_view(VirtualMachine, 'edit') From 015ef25ca03291ab111c0e86169013f79269a57d Mon Sep 17 00:00:00 2001 From: github-actions <41898282+github-actions[bot]@users.noreply.github.com> Date: Mon, 10 Feb 2025 18:34:35 +0000 Subject: [PATCH 085/152] Update source translation strings --- netbox/translations/en/LC_MESSAGES/django.po | 174 +++++++++---------- 1 file changed, 81 insertions(+), 93 deletions(-) diff --git a/netbox/translations/en/LC_MESSAGES/django.po b/netbox/translations/en/LC_MESSAGES/django.po index 3a6dff6c2..52257d7f2 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: 2025-02-08 05:02+0000\n" +"POT-Creation-Date: 2025-02-10 18:34+0000\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -2218,11 +2218,10 @@ msgstr "" #: netbox/extras/forms/model_forms.py:632 netbox/extras/tables/tables.py:191 #: netbox/extras/tables/tables.py:483 netbox/extras/tables/tables.py:518 #: netbox/templates/core/datasource.html:31 -#: netbox/templates/dcim/device/render_config.html:18 #: netbox/templates/extras/configcontext.html:29 #: netbox/templates/extras/configtemplate.html:21 #: netbox/templates/extras/exporttemplate.html:35 -#: netbox/templates/virtualization/virtualmachine/render_config.html:18 +#: netbox/templates/extras/object_render_config.html:19 msgid "Data Source" msgstr "" @@ -6981,7 +6980,7 @@ msgstr "" #: netbox/netbox/navigation/menu.py:75 #: netbox/virtualization/forms/model_forms.py:122 #: netbox/virtualization/tables/clusters.py:87 -#: netbox/virtualization/views.py:218 +#: netbox/virtualization/views.py:216 msgid "Devices" msgstr "" @@ -6992,14 +6991,12 @@ msgstr "" #: netbox/dcim/tables/devices.py:111 netbox/dcim/tables/devices.py:226 #: netbox/extras/forms/model_forms.py:630 netbox/templates/dcim/device.html:112 -#: netbox/templates/dcim/device/render_config.html:11 -#: netbox/templates/dcim/device/render_config.html:14 #: netbox/templates/dcim/devicerole.html:44 #: netbox/templates/dcim/platform.html:41 #: netbox/templates/extras/configtemplate.html:10 +#: netbox/templates/extras/object_render_config.html:12 +#: netbox/templates/extras/object_render_config.html:15 #: netbox/templates/virtualization/virtualmachine.html:48 -#: netbox/templates/virtualization/virtualmachine/render_config.html:11 -#: netbox/templates/virtualization/virtualmachine/render_config.html:14 #: netbox/virtualization/tables/virtualmachines.py:77 msgid "Config Template" msgstr "" @@ -7057,8 +7054,8 @@ msgid "Power outlets" msgstr "" #: netbox/dcim/tables/devices.py:256 netbox/dcim/tables/devices.py:1112 -#: netbox/dcim/tables/devicetypes.py:128 netbox/dcim/views.py:1144 -#: netbox/dcim/views.py:1388 netbox/dcim/views.py:2139 +#: netbox/dcim/tables/devicetypes.py:128 netbox/dcim/views.py:1142 +#: netbox/dcim/views.py:1386 netbox/dcim/views.py:2137 #: netbox/netbox/navigation/menu.py:94 netbox/netbox/navigation/menu.py:258 #: netbox/templates/dcim/device/base.html:37 #: netbox/templates/dcim/device_list.html:43 @@ -7070,7 +7067,7 @@ msgstr "" #: netbox/templates/virtualization/virtualmachine/base.html:27 #: netbox/templates/virtualization/virtualmachine_list.html:14 #: netbox/virtualization/tables/virtualmachines.py:71 -#: netbox/virtualization/views.py:383 netbox/wireless/tables/wirelesslan.py:63 +#: netbox/virtualization/views.py:381 netbox/wireless/tables/wirelesslan.py:63 msgid "Interfaces" msgstr "" @@ -7096,8 +7093,8 @@ msgid "Module Bay" msgstr "" #: netbox/dcim/tables/devices.py:327 netbox/dcim/tables/devicetypes.py:47 -#: netbox/dcim/tables/devicetypes.py:143 netbox/dcim/views.py:1219 -#: netbox/dcim/views.py:2237 netbox/netbox/navigation/menu.py:103 +#: netbox/dcim/tables/devicetypes.py:143 netbox/dcim/views.py:1217 +#: netbox/dcim/views.py:2235 netbox/netbox/navigation/menu.py:103 #: netbox/templates/dcim/device/base.html:52 #: netbox/templates/dcim/device_list.html:71 #: netbox/templates/dcim/devicetype/base.html:49 @@ -7226,8 +7223,8 @@ msgstr "" msgid "Instances" msgstr "" -#: netbox/dcim/tables/devicetypes.py:116 netbox/dcim/views.py:1084 -#: netbox/dcim/views.py:1328 netbox/dcim/views.py:2075 +#: netbox/dcim/tables/devicetypes.py:116 netbox/dcim/views.py:1082 +#: netbox/dcim/views.py:1326 netbox/dcim/views.py:2073 #: netbox/netbox/navigation/menu.py:97 #: netbox/templates/dcim/device/base.html:25 #: netbox/templates/dcim/device_list.html:15 @@ -7237,8 +7234,8 @@ msgstr "" msgid "Console Ports" msgstr "" -#: netbox/dcim/tables/devicetypes.py:119 netbox/dcim/views.py:1099 -#: netbox/dcim/views.py:1343 netbox/dcim/views.py:2091 +#: netbox/dcim/tables/devicetypes.py:119 netbox/dcim/views.py:1097 +#: netbox/dcim/views.py:1341 netbox/dcim/views.py:2089 #: netbox/netbox/navigation/menu.py:98 #: netbox/templates/dcim/device/base.html:28 #: netbox/templates/dcim/device_list.html:22 @@ -7248,8 +7245,8 @@ msgstr "" msgid "Console Server Ports" msgstr "" -#: netbox/dcim/tables/devicetypes.py:122 netbox/dcim/views.py:1114 -#: netbox/dcim/views.py:1358 netbox/dcim/views.py:2107 +#: netbox/dcim/tables/devicetypes.py:122 netbox/dcim/views.py:1112 +#: netbox/dcim/views.py:1356 netbox/dcim/views.py:2105 #: netbox/netbox/navigation/menu.py:99 #: netbox/templates/dcim/device/base.html:31 #: netbox/templates/dcim/device_list.html:29 @@ -7259,8 +7256,8 @@ msgstr "" msgid "Power Ports" msgstr "" -#: netbox/dcim/tables/devicetypes.py:125 netbox/dcim/views.py:1129 -#: netbox/dcim/views.py:1373 netbox/dcim/views.py:2123 +#: netbox/dcim/tables/devicetypes.py:125 netbox/dcim/views.py:1127 +#: netbox/dcim/views.py:1371 netbox/dcim/views.py:2121 #: netbox/netbox/navigation/menu.py:100 #: netbox/templates/dcim/device/base.html:34 #: netbox/templates/dcim/device_list.html:36 @@ -7270,8 +7267,8 @@ msgstr "" msgid "Power Outlets" msgstr "" -#: netbox/dcim/tables/devicetypes.py:131 netbox/dcim/views.py:1159 -#: netbox/dcim/views.py:1403 netbox/dcim/views.py:2161 +#: netbox/dcim/tables/devicetypes.py:131 netbox/dcim/views.py:1157 +#: netbox/dcim/views.py:1401 netbox/dcim/views.py:2159 #: netbox/netbox/navigation/menu.py:95 #: netbox/templates/dcim/device/base.html:40 #: netbox/templates/dcim/devicetype/base.html:37 @@ -7280,8 +7277,8 @@ msgstr "" msgid "Front Ports" msgstr "" -#: netbox/dcim/tables/devicetypes.py:134 netbox/dcim/views.py:1174 -#: netbox/dcim/views.py:1418 netbox/dcim/views.py:2177 +#: netbox/dcim/tables/devicetypes.py:134 netbox/dcim/views.py:1172 +#: netbox/dcim/views.py:1416 netbox/dcim/views.py:2175 #: netbox/netbox/navigation/menu.py:96 #: netbox/templates/dcim/device/base.html:43 #: netbox/templates/dcim/device_list.html:50 @@ -7291,16 +7288,16 @@ msgstr "" msgid "Rear Ports" msgstr "" -#: netbox/dcim/tables/devicetypes.py:137 netbox/dcim/views.py:1204 -#: netbox/dcim/views.py:2217 netbox/netbox/navigation/menu.py:102 +#: netbox/dcim/tables/devicetypes.py:137 netbox/dcim/views.py:1202 +#: netbox/dcim/views.py:2215 netbox/netbox/navigation/menu.py:102 #: netbox/templates/dcim/device/base.html:49 #: netbox/templates/dcim/device_list.html:57 #: netbox/templates/dcim/devicetype/base.html:46 msgid "Device Bays" msgstr "" -#: netbox/dcim/tables/devicetypes.py:140 netbox/dcim/views.py:1189 -#: netbox/dcim/views.py:1433 netbox/dcim/views.py:2197 +#: netbox/dcim/tables/devicetypes.py:140 netbox/dcim/views.py:1187 +#: netbox/dcim/views.py:1431 netbox/dcim/views.py:2195 #: netbox/netbox/navigation/menu.py:101 #: netbox/templates/dcim/device/base.html:46 #: netbox/templates/dcim/device_list.html:64 @@ -7365,67 +7362,62 @@ msgstr "" msgid "Test case must set peer_termination_type" msgstr "" -#: netbox/dcim/views.py:139 +#: netbox/dcim/views.py:137 #, python-brace-format msgid "Disconnected {count} {type}" msgstr "" -#: netbox/dcim/views.py:826 netbox/netbox/navigation/menu.py:51 +#: netbox/dcim/views.py:824 netbox/netbox/navigation/menu.py:51 msgid "Reservations" msgstr "" -#: netbox/dcim/views.py:845 netbox/templates/dcim/location.html:90 +#: netbox/dcim/views.py:843 netbox/templates/dcim/location.html:90 #: netbox/templates/dcim/site.html:140 msgid "Non-Racked Devices" msgstr "" -#: netbox/dcim/views.py:2250 netbox/extras/forms/model_forms.py:577 +#: netbox/dcim/views.py:2248 netbox/extras/forms/model_forms.py:577 #: netbox/templates/extras/configcontext.html:10 #: netbox/virtualization/forms/model_forms.py:232 -#: netbox/virtualization/views.py:424 +#: netbox/virtualization/views.py:422 msgid "Config Context" msgstr "" -#: netbox/dcim/views.py:2260 netbox/virtualization/views.py:434 +#: netbox/dcim/views.py:2258 netbox/virtualization/views.py:432 msgid "Render Config" msgstr "" -#: netbox/dcim/views.py:2295 netbox/virtualization/views.py:469 -#, python-brace-format -msgid "An error occurred while rendering the template: {error}" -msgstr "" - -#: netbox/dcim/views.py:2313 netbox/extras/tables/tables.py:550 +#: netbox/dcim/views.py:2271 netbox/extras/tables/tables.py:550 #: netbox/netbox/navigation/menu.py:255 netbox/netbox/navigation/menu.py:257 -#: netbox/virtualization/views.py:192 +#: netbox/virtualization/views.py:190 msgid "Virtual Machines" msgstr "" -#: netbox/dcim/views.py:3146 +#: netbox/dcim/views.py:3104 #, python-brace-format msgid "Installed device {device} in bay {device_bay}." msgstr "" -#: netbox/dcim/views.py:3187 +#: netbox/dcim/views.py:3145 #, python-brace-format msgid "Removed device {device} from bay {device_bay}." msgstr "" -#: netbox/dcim/views.py:3303 netbox/ipam/tables/ip.py:180 +#: netbox/dcim/views.py:3261 netbox/ipam/tables/ip.py:180 msgid "Children" msgstr "" -#: netbox/dcim/views.py:3770 +#: netbox/dcim/views.py:3728 #, python-brace-format msgid "Added member {device}" msgstr "" -#: netbox/dcim/views.py:3819 +#: netbox/dcim/views.py:3777 #, python-brace-format msgid "Unable to remove master device {device} from the virtual chassis." msgstr "" -#: netbox/dcim/views.py:3832 +#: netbox/dcim/views.py:3790 #, python-brace-format msgid "Removed {device} from virtual chassis {chassis}" msgstr "" @@ -9251,12 +9243,11 @@ msgstr "" #: netbox/extras/tables/tables.py:195 netbox/extras/tables/tables.py:487 #: netbox/extras/tables/tables.py:522 netbox/templates/core/datafile.html:24 -#: netbox/templates/dcim/device/render_config.html:22 #: netbox/templates/extras/configcontext.html:39 #: netbox/templates/extras/configtemplate.html:31 #: netbox/templates/extras/exporttemplate.html:45 +#: netbox/templates/extras/object_render_config.html:23 #: netbox/templates/generic/bulk_import.html:35 -#: netbox/templates/virtualization/virtualmachine/render_config.html:22 msgid "Data File" msgstr "" @@ -9347,27 +9338,32 @@ msgstr "" msgid "Invalid attribute \"{name}\" for {model}" msgstr "" -#: netbox/extras/views.py:1029 +#: netbox/extras/views.py:933 +#, python-brace-format +msgid "An error occurred while rendering the template: {error}" +msgstr "" + +#: netbox/extras/views.py:1085 msgid "Your dashboard has been reset." msgstr "" -#: netbox/extras/views.py:1075 +#: netbox/extras/views.py:1131 msgid "Added widget: " msgstr "" -#: netbox/extras/views.py:1116 +#: netbox/extras/views.py:1172 msgid "Updated widget: " msgstr "" -#: netbox/extras/views.py:1152 +#: netbox/extras/views.py:1208 msgid "Deleted widget: " msgstr "" -#: netbox/extras/views.py:1154 +#: netbox/extras/views.py:1210 msgid "Error deleting widget: " msgstr "" -#: netbox/extras/views.py:1244 +#: netbox/extras/views.py:1300 msgid "Unable to run script: RQ worker process not running." msgstr "" @@ -11285,7 +11281,7 @@ msgstr "" #: netbox/templates/virtualization/virtualmachine/base.html:32 #: netbox/templates/virtualization/virtualmachine_list.html:21 #: netbox/virtualization/tables/virtualmachines.py:74 -#: netbox/virtualization/views.py:405 +#: netbox/virtualization/views.py:403 msgid "Virtual Disks" msgstr "" @@ -11957,6 +11953,7 @@ msgstr "" #: netbox/templates/extras/webhook.html:75 #: netbox/templates/inc/panel_table.html:13 #: netbox/templates/inc/panels/comments.html:10 +#: netbox/templates/inc/panels/related_objects.html:23 #: netbox/templates/ipam/inc/panels/fhrp_groups.html:56 #: netbox/templates/users/group.html:34 netbox/templates/users/group.html:44 #: netbox/templates/users/objectpermission.html:77 @@ -12838,35 +12835,6 @@ msgstr "" msgid "Add Rear Ports" msgstr "" -#: netbox/templates/dcim/device/render_config.html:5 -#: netbox/templates/virtualization/virtualmachine/render_config.html:5 -msgid "Config" -msgstr "" - -#: netbox/templates/dcim/device/render_config.html:35 -#: netbox/templates/virtualization/virtualmachine/render_config.html:35 -msgid "Context Data" -msgstr "" - -#: netbox/templates/dcim/device/render_config.html:55 -#: netbox/templates/virtualization/virtualmachine/render_config.html:55 -msgid "Rendered Config" -msgstr "" - -#: netbox/templates/dcim/device/render_config.html:57 -#: netbox/templates/virtualization/virtualmachine/render_config.html:57 -msgid "Download" -msgstr "" - -#: netbox/templates/dcim/device/render_config.html:64 -#: netbox/templates/virtualization/virtualmachine/render_config.html:64 -msgid "Error rendering template" -msgstr "" - -#: netbox/templates/dcim/device/render_config.html:70 -msgid "No configuration template has been assigned for this device." -msgstr "" - #: netbox/templates/dcim/device_edit.html:44 msgid "Parent Bay" msgstr "" @@ -13666,6 +13634,30 @@ msgstr "" msgid "New Journal Entry" msgstr "" +#: netbox/templates/extras/object_render_config.html:6 +msgid "Config" +msgstr "" + +#: netbox/templates/extras/object_render_config.html:36 +msgid "Context Data" +msgstr "" + +#: netbox/templates/extras/object_render_config.html:56 +msgid "Rendered Config" +msgstr "" + +#: netbox/templates/extras/object_render_config.html:58 +msgid "Download" +msgstr "" + +#: netbox/templates/extras/object_render_config.html:65 +msgid "Error rendering template" +msgstr "" + +#: netbox/templates/extras/object_render_config.html:71 +msgid "No configuration template has been assigned." +msgstr "" + #: netbox/templates/extras/report/base.html:30 msgid "Report" msgstr "" @@ -13750,7 +13742,7 @@ msgstr "" msgid "Tagged Item Types" msgstr "" -#: netbox/templates/extras/tag.html:81 +#: netbox/templates/extras/tag.html:82 msgid "Tagged Objects" msgstr "" @@ -14514,10 +14506,6 @@ msgstr "" msgid "Add Virtual Disk" msgstr "" -#: netbox/templates/virtualization/virtualmachine/render_config.html:70 -msgid "No configuration template has been assigned for this virtual machine." -msgstr "" - #: netbox/templates/vpn/ikepolicy.html:10 #: netbox/templates/vpn/ipsecprofile.html:33 netbox/vpn/tables/crypto.py:166 msgid "IKE Policy" @@ -15698,12 +15686,12 @@ msgstr "" msgid "virtual disks" msgstr "" -#: netbox/virtualization/views.py:291 +#: netbox/virtualization/views.py:289 #, python-brace-format msgid "Added {count} devices to cluster {cluster}" msgstr "" -#: netbox/virtualization/views.py:326 +#: netbox/virtualization/views.py:324 #, python-brace-format msgid "Removed {count} devices from cluster {cluster}" msgstr "" From 154b3a7abbbcb0d700257a250af82315644206cb Mon Sep 17 00:00:00 2001 From: Renato Almeida de Oliveira Date: Tue, 11 Feb 2025 10:31:40 -0300 Subject: [PATCH 086/152] Fixes: 18593 - "Create & Add Another" broken for new IP addresses (#18602) * update IPAddressEditView get_extra_addanother_params * Simplify get_extra_addanother_params --- netbox/ipam/views.py | 1 + 1 file changed, 1 insertion(+) diff --git a/netbox/ipam/views.py b/netbox/ipam/views.py index 007a652ca..d9ee0e685 100644 --- a/netbox/ipam/views.py +++ b/netbox/ipam/views.py @@ -868,6 +868,7 @@ class IPAddressEditView(generic.ObjectEditView): return {'interface': request.GET['interface']} elif 'vminterface' in request.GET: return {'vminterface': request.GET['vminterface']} + return {} # TODO: Standardize or remove this view From 81144926730bf82bc7636279c2aac4a7c716b51f Mon Sep 17 00:00:00 2001 From: Tobias Genannt Date: Thu, 9 Jan 2025 09:38:01 +0100 Subject: [PATCH 087/152] Close #18357: Display author name for plugins --- netbox/core/plugins.py | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/netbox/core/plugins.py b/netbox/core/plugins.py index 1fcb37f2b..66580c936 100644 --- a/netbox/core/plugins.py +++ b/netbox/core/plugins.py @@ -80,6 +80,13 @@ def get_local_plugins(plugins=None): plugin = importlib.import_module(plugin_name) plugin_config: PluginConfig = plugin.config + if plugin_config.author: + author = PluginAuthor( + name=plugin_config.author, + ) + else: + author = None + local_plugins[plugin_config.name] = Plugin( config_name=plugin_config.name, title_short=plugin_config.verbose_name, @@ -88,6 +95,7 @@ def get_local_plugins(plugins=None): description_short=plugin_config.description, is_local=True, is_installed=True, + author=author, installed_version=plugin_config.version, ) From f8022040b245790796a82b38a67570335a320b74 Mon Sep 17 00:00:00 2001 From: github-actions <41898282+github-actions[bot]@users.noreply.github.com> Date: Wed, 12 Feb 2025 05:02:12 +0000 Subject: [PATCH 088/152] Update source translation strings --- netbox/translations/en/LC_MESSAGES/django.po | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/netbox/translations/en/LC_MESSAGES/django.po b/netbox/translations/en/LC_MESSAGES/django.po index 52257d7f2..a6af44ae7 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: 2025-02-10 18:34+0000\n" +"POT-Creation-Date: 2025-02-12 05:01+0000\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -9932,7 +9932,7 @@ msgstr "" #: netbox/ipam/forms/filtersets.py:419 netbox/ipam/models/vlans.py:273 #: netbox/ipam/tables/ip.py:122 netbox/ipam/tables/vlans.py:51 -#: netbox/ipam/views.py:1035 netbox/netbox/navigation/menu.py:199 +#: netbox/ipam/views.py:1036 netbox/netbox/navigation/menu.py:199 #: netbox/netbox/navigation/menu.py:201 msgid "VLANs" msgstr "" @@ -10644,15 +10644,15 @@ msgstr "" msgid "Child Ranges" msgstr "" -#: netbox/ipam/views.py:957 +#: netbox/ipam/views.py:958 msgid "Related IPs" msgstr "" -#: netbox/ipam/views.py:1314 +#: netbox/ipam/views.py:1315 msgid "Device Interfaces" msgstr "" -#: netbox/ipam/views.py:1332 +#: netbox/ipam/views.py:1333 msgid "VM Interfaces" msgstr "" From b1ac20ac19fdd44bf01c2d693ec87d4fc8364382 Mon Sep 17 00:00:00 2001 From: Renato Almeida de Oliveira Zaroubin Date: Fri, 14 Feb 2025 00:01:11 +0000 Subject: [PATCH 089/152] Update ModuleBay instance name before saving it --- netbox/dcim/models/devices.py | 1 + 1 file changed, 1 insertion(+) diff --git a/netbox/dcim/models/devices.py b/netbox/dcim/models/devices.py index 2acd98801..12b0dae18 100644 --- a/netbox/dcim/models/devices.py +++ b/netbox/dcim/models/devices.py @@ -1298,6 +1298,7 @@ class Module(PrimaryModel, ConfigContextModel): else: # ModuleBays must be saved individually for MPTT for instance in create_instances: + instance.name = instance.name.replace(MODULE_TOKEN, str(self.module_bay.position)) instance.save() update_fields = ['module'] From f9431f1c293931046753c145fc7d2b2869667adf Mon Sep 17 00:00:00 2001 From: Alexander Haase Date: Thu, 13 Feb 2025 22:39:11 +0100 Subject: [PATCH 090/152] Replace DurationChoices by JobIntervalChoices --- netbox/core/choices.py | 2 ++ netbox/extras/choices.py | 11 ----------- netbox/extras/forms/reports.py | 4 ++-- netbox/extras/forms/scripts.py | 4 ++-- 4 files changed, 6 insertions(+), 15 deletions(-) diff --git a/netbox/core/choices.py b/netbox/core/choices.py index 442acc26b..6603a7d4f 100644 --- a/netbox/core/choices.py +++ b/netbox/core/choices.py @@ -81,8 +81,10 @@ class JobIntervalChoices(ChoiceSet): CHOICES = ( (INTERVAL_MINUTELY, _('Minutely')), (INTERVAL_HOURLY, _('Hourly')), + (INTERVAL_HOURLY * 12, _('12 hours')), (INTERVAL_DAILY, _('Daily')), (INTERVAL_WEEKLY, _('Weekly')), + (INTERVAL_DAILY * 30, _('30 days')), ) diff --git a/netbox/extras/choices.py b/netbox/extras/choices.py index 3cd7daab4..8258f4aaf 100644 --- a/netbox/extras/choices.py +++ b/netbox/extras/choices.py @@ -178,17 +178,6 @@ class LogLevelChoices(ChoiceSet): } -class DurationChoices(ChoiceSet): - - CHOICES = ( - (60, _('Hourly')), - (720, _('12 hours')), - (1440, _('Daily')), - (10080, _('Weekly')), - (43200, _('30 days')), - ) - - # # Webhooks # diff --git a/netbox/extras/forms/reports.py b/netbox/extras/forms/reports.py index 95692b3f6..72d0417f2 100644 --- a/netbox/extras/forms/reports.py +++ b/netbox/extras/forms/reports.py @@ -1,7 +1,7 @@ from django import forms from django.utils.translation import gettext_lazy as _ -from extras.choices import DurationChoices +from core.choices import JobIntervalChoices from utilities.forms.widgets import DateTimePicker, NumberWithOptions from utilities.datetime import local_now @@ -22,7 +22,7 @@ class ReportForm(forms.Form): min_value=1, label=_("Recurs every"), widget=NumberWithOptions( - options=DurationChoices + options=JobIntervalChoices ), help_text=_("Interval at which this report is re-run (in minutes)") ) diff --git a/netbox/extras/forms/scripts.py b/netbox/extras/forms/scripts.py index 331f7f01f..8ac476544 100644 --- a/netbox/extras/forms/scripts.py +++ b/netbox/extras/forms/scripts.py @@ -1,7 +1,7 @@ from django import forms from django.utils.translation import gettext_lazy as _ -from extras.choices import DurationChoices +from core.choices import JobIntervalChoices from utilities.forms.widgets import DateTimePicker, NumberWithOptions from utilities.datetime import local_now @@ -28,7 +28,7 @@ class ScriptForm(forms.Form): min_value=1, label=_("Recurs every"), widget=NumberWithOptions( - options=DurationChoices + options=JobIntervalChoices ), help_text=_("Interval at which this script is re-run (in minutes)") ) From c324d23634b1a2d192969996ef99f269d5baa66c Mon Sep 17 00:00:00 2001 From: github-actions <41898282+github-actions[bot]@users.noreply.github.com> Date: Sat, 15 Feb 2025 05:02:03 +0000 Subject: [PATCH 091/152] Update source translation strings --- netbox/translations/en/LC_MESSAGES/django.po | 106 +++++++++---------- 1 file changed, 53 insertions(+), 53 deletions(-) diff --git a/netbox/translations/en/LC_MESSAGES/django.po b/netbox/translations/en/LC_MESSAGES/django.po index a6af44ae7..cab5ed729 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: 2025-02-12 05:01+0000\n" +"POT-Creation-Date: 2025-02-15 05:01+0000\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -28,7 +28,7 @@ msgstr "" msgid "Write Enabled" msgstr "" -#: netbox/account/tables.py:35 netbox/core/choices.py:100 +#: netbox/account/tables.py:35 netbox/core/choices.py:102 #: netbox/core/tables/jobs.py:29 netbox/core/tables/tasks.py:79 #: netbox/extras/tables/tables.py:335 netbox/extras/tables/tables.py:566 #: netbox/templates/account/token.html:43 @@ -1430,7 +1430,7 @@ msgstr "" #: netbox/core/models/jobs.py:85 netbox/dcim/models/cables.py:49 #: netbox/dcim/models/device_components.py:1281 #: netbox/dcim/models/devices.py:645 netbox/dcim/models/devices.py:1177 -#: netbox/dcim/models/devices.py:1404 netbox/dcim/models/power.py:94 +#: netbox/dcim/models/devices.py:1405 netbox/dcim/models/power.py:94 #: netbox/dcim/models/racks.py:288 netbox/dcim/models/sites.py:154 #: netbox/dcim/models/sites.py:270 netbox/ipam/models/ip.py:237 #: netbox/ipam/models/ip.py:508 netbox/ipam/models/ip.py:729 @@ -1561,7 +1561,7 @@ msgstr "" #: netbox/core/models/jobs.py:46 #: netbox/dcim/models/device_component_templates.py:43 #: netbox/dcim/models/device_components.py:52 netbox/dcim/models/devices.py:589 -#: netbox/dcim/models/devices.py:1336 netbox/dcim/models/devices.py:1399 +#: netbox/dcim/models/devices.py:1337 netbox/dcim/models/devices.py:1400 #: netbox/dcim/models/power.py:38 netbox/dcim/models/power.py:89 #: netbox/dcim/models/racks.py:257 netbox/dcim/models/sites.py:142 #: netbox/extras/models/configs.py:36 netbox/extras/models/configs.py:215 @@ -2046,24 +2046,32 @@ msgstr "" msgid "Minutely" msgstr "" -#: netbox/core/choices.py:83 netbox/extras/choices.py:184 +#: netbox/core/choices.py:83 msgid "Hourly" msgstr "" -#: netbox/core/choices.py:84 netbox/extras/choices.py:186 +#: netbox/core/choices.py:84 +msgid "12 hours" +msgstr "" + +#: netbox/core/choices.py:85 msgid "Daily" msgstr "" -#: netbox/core/choices.py:85 netbox/extras/choices.py:187 +#: netbox/core/choices.py:86 msgid "Weekly" msgstr "" -#: netbox/core/choices.py:101 netbox/core/tables/plugins.py:63 +#: netbox/core/choices.py:87 +msgid "30 days" +msgstr "" + +#: netbox/core/choices.py:103 netbox/core/tables/plugins.py:63 #: netbox/templates/generic/object.html:61 msgid "Updated" msgstr "" -#: netbox/core/choices.py:102 +#: netbox/core/choices.py:104 msgid "Deleted" msgstr "" @@ -3531,7 +3539,7 @@ msgstr "" #: netbox/dcim/filtersets.py:1104 netbox/dcim/forms/filtersets.py:819 #: netbox/dcim/forms/filtersets.py:1390 netbox/dcim/forms/filtersets.py:1586 #: netbox/dcim/forms/filtersets.py:1591 netbox/dcim/forms/model_forms.py:1762 -#: netbox/dcim/models/devices.py:1500 netbox/dcim/models/devices.py:1521 +#: netbox/dcim/models/devices.py:1501 netbox/dcim/models/devices.py:1522 #: netbox/virtualization/filtersets.py:196 #: netbox/virtualization/filtersets.py:268 #: netbox/virtualization/forms/filtersets.py:177 @@ -6370,12 +6378,12 @@ msgstr "" msgid "rack face" msgstr "" -#: netbox/dcim/models/devices.py:663 netbox/dcim/models/devices.py:1420 +#: netbox/dcim/models/devices.py:663 netbox/dcim/models/devices.py:1421 #: netbox/virtualization/models/virtualmachines.py:95 msgid "primary IPv4" msgstr "" -#: netbox/dcim/models/devices.py:671 netbox/dcim/models/devices.py:1428 +#: netbox/dcim/models/devices.py:671 netbox/dcim/models/devices.py:1429 #: netbox/virtualization/models/virtualmachines.py:103 msgid "primary IPv6" msgstr "" @@ -6538,68 +6546,68 @@ msgid "" "device ({device})." msgstr "" -#: netbox/dcim/models/devices.py:1341 +#: netbox/dcim/models/devices.py:1342 msgid "domain" msgstr "" -#: netbox/dcim/models/devices.py:1354 netbox/dcim/models/devices.py:1355 +#: netbox/dcim/models/devices.py:1355 netbox/dcim/models/devices.py:1356 msgid "virtual chassis" msgstr "" -#: netbox/dcim/models/devices.py:1367 +#: netbox/dcim/models/devices.py:1368 #, python-brace-format msgid "The selected master ({master}) is not assigned to this virtual chassis." msgstr "" -#: netbox/dcim/models/devices.py:1383 +#: netbox/dcim/models/devices.py:1384 #, python-brace-format msgid "" "Unable to delete virtual chassis {self}. There are member interfaces which " "form a cross-chassis LAG interfaces." msgstr "" -#: netbox/dcim/models/devices.py:1409 netbox/vpn/models/l2vpn.py:37 +#: netbox/dcim/models/devices.py:1410 netbox/vpn/models/l2vpn.py:37 msgid "identifier" msgstr "" -#: netbox/dcim/models/devices.py:1410 +#: netbox/dcim/models/devices.py:1411 msgid "Numeric identifier unique to the parent device" msgstr "" -#: netbox/dcim/models/devices.py:1438 netbox/extras/models/customfields.py:225 +#: netbox/dcim/models/devices.py:1439 netbox/extras/models/customfields.py:225 #: netbox/extras/models/models.py:107 netbox/extras/models/models.py:694 #: netbox/netbox/models/__init__.py:119 msgid "comments" msgstr "" -#: netbox/dcim/models/devices.py:1454 +#: netbox/dcim/models/devices.py:1455 msgid "virtual device context" msgstr "" -#: netbox/dcim/models/devices.py:1455 +#: netbox/dcim/models/devices.py:1456 msgid "virtual device contexts" msgstr "" -#: netbox/dcim/models/devices.py:1484 +#: netbox/dcim/models/devices.py:1485 #, python-brace-format msgid "{ip} is not an IPv{family} address." msgstr "" -#: netbox/dcim/models/devices.py:1490 +#: netbox/dcim/models/devices.py:1491 msgid "Primary IP address must belong to an interface on the assigned device." msgstr "" -#: netbox/dcim/models/devices.py:1522 +#: netbox/dcim/models/devices.py:1523 msgid "MAC addresses" msgstr "" -#: netbox/dcim/models/devices.py:1551 +#: netbox/dcim/models/devices.py:1552 msgid "" "Cannot unassign MAC Address while it is designated as the primary MAC for an " "object" msgstr "" -#: netbox/dcim/models/devices.py:1555 +#: netbox/dcim/models/devices.py:1556 msgid "" "Cannot reassign MAC Address while it is designated as the primary MAC for an " "object" @@ -7560,15 +7568,7 @@ msgstr "" msgid "Failure" msgstr "" -#: netbox/extras/choices.py:185 -msgid "12 hours" -msgstr "" - -#: netbox/extras/choices.py:188 -msgid "30 days" -msgstr "" - -#: netbox/extras/choices.py:224 +#: netbox/extras/choices.py:213 #: netbox/templates/dcim/virtualchassis_edit.html:107 #: netbox/templates/generic/bulk_add_component.html:68 #: netbox/templates/generic/object_edit.html:47 @@ -7578,11 +7578,11 @@ msgstr "" msgid "Create" msgstr "" -#: netbox/extras/choices.py:225 +#: netbox/extras/choices.py:214 msgid "Update" msgstr "" -#: netbox/extras/choices.py:226 +#: netbox/extras/choices.py:215 #: netbox/templates/circuits/inc/circuit_termination.html:23 #: netbox/templates/dcim/inc/panels/inventory_items.html:37 #: netbox/templates/dcim/powerpanel.html:66 @@ -7597,82 +7597,82 @@ msgstr "" msgid "Delete" msgstr "" -#: netbox/extras/choices.py:250 netbox/netbox/choices.py:59 +#: netbox/extras/choices.py:239 netbox/netbox/choices.py:59 #: netbox/netbox/choices.py:104 msgid "Blue" msgstr "" -#: netbox/extras/choices.py:251 netbox/netbox/choices.py:58 +#: netbox/extras/choices.py:240 netbox/netbox/choices.py:58 #: netbox/netbox/choices.py:105 msgid "Indigo" msgstr "" -#: netbox/extras/choices.py:252 netbox/netbox/choices.py:56 +#: netbox/extras/choices.py:241 netbox/netbox/choices.py:56 #: netbox/netbox/choices.py:106 msgid "Purple" msgstr "" -#: netbox/extras/choices.py:253 netbox/netbox/choices.py:53 +#: netbox/extras/choices.py:242 netbox/netbox/choices.py:53 #: netbox/netbox/choices.py:107 msgid "Pink" msgstr "" -#: netbox/extras/choices.py:254 netbox/netbox/choices.py:52 +#: netbox/extras/choices.py:243 netbox/netbox/choices.py:52 #: netbox/netbox/choices.py:108 msgid "Red" msgstr "" -#: netbox/extras/choices.py:255 netbox/netbox/choices.py:70 +#: netbox/extras/choices.py:244 netbox/netbox/choices.py:70 #: netbox/netbox/choices.py:109 msgid "Orange" msgstr "" -#: netbox/extras/choices.py:256 netbox/netbox/choices.py:68 +#: netbox/extras/choices.py:245 netbox/netbox/choices.py:68 #: netbox/netbox/choices.py:110 msgid "Yellow" msgstr "" -#: netbox/extras/choices.py:257 netbox/netbox/choices.py:65 +#: netbox/extras/choices.py:246 netbox/netbox/choices.py:65 #: netbox/netbox/choices.py:111 msgid "Green" msgstr "" -#: netbox/extras/choices.py:258 netbox/netbox/choices.py:62 +#: netbox/extras/choices.py:247 netbox/netbox/choices.py:62 #: netbox/netbox/choices.py:112 msgid "Teal" msgstr "" -#: netbox/extras/choices.py:259 netbox/netbox/choices.py:61 +#: netbox/extras/choices.py:248 netbox/netbox/choices.py:61 #: netbox/netbox/choices.py:113 msgid "Cyan" msgstr "" -#: netbox/extras/choices.py:260 netbox/netbox/choices.py:114 +#: netbox/extras/choices.py:249 netbox/netbox/choices.py:114 msgid "Gray" msgstr "" -#: netbox/extras/choices.py:261 netbox/netbox/choices.py:76 +#: netbox/extras/choices.py:250 netbox/netbox/choices.py:76 #: netbox/netbox/choices.py:115 msgid "Black" msgstr "" -#: netbox/extras/choices.py:262 netbox/netbox/choices.py:77 +#: netbox/extras/choices.py:251 netbox/netbox/choices.py:77 #: netbox/netbox/choices.py:116 msgid "White" msgstr "" -#: netbox/extras/choices.py:277 netbox/extras/forms/model_forms.py:353 +#: netbox/extras/choices.py:266 netbox/extras/forms/model_forms.py:353 #: netbox/extras/forms/model_forms.py:430 #: netbox/templates/extras/webhook.html:10 msgid "Webhook" msgstr "" -#: netbox/extras/choices.py:278 netbox/extras/forms/model_forms.py:418 +#: netbox/extras/choices.py:267 netbox/extras/forms/model_forms.py:418 #: netbox/templates/extras/script/base.html:29 msgid "Script" msgstr "" -#: netbox/extras/choices.py:279 +#: netbox/extras/choices.py:268 msgid "Notification" msgstr "" From 11514bfb219501dadd9ae1448a76247f65f2a63b Mon Sep 17 00:00:00 2001 From: Renato Almeida de Oliveira Date: Tue, 18 Feb 2025 10:41:12 -0300 Subject: [PATCH 092/152] Fixes: #18584 Add rack types column to manufacturers table (#18636) * Add racktype_count annotation to list view queryset, create the LinkedCountColumn in ManufacturerTable * Add Manufacturer field to RackTypeFilterForm --- netbox/dcim/forms/filtersets.py | 2 +- netbox/dcim/tables/devicetypes.py | 13 +++++++++---- netbox/dcim/views.py | 1 + 3 files changed, 11 insertions(+), 5 deletions(-) diff --git a/netbox/dcim/forms/filtersets.py b/netbox/dcim/forms/filtersets.py index 37b8afd17..4dbceb4f5 100644 --- a/netbox/dcim/forms/filtersets.py +++ b/netbox/dcim/forms/filtersets.py @@ -303,7 +303,7 @@ class RackTypeFilterForm(RackBaseFilterForm): model = RackType fieldsets = ( FieldSet('q', 'filter_id', 'tag'), - FieldSet('form_factor', 'width', 'u_height', name=_('Rack Type')), + FieldSet('manufacturer_id', 'form_factor', 'width', 'u_height', name=_('Rack Type')), FieldSet('starting_unit', 'desc_units', name=_('Numbering')), FieldSet('weight', 'max_weight', 'weight_unit', name=_('Weight')), ) diff --git a/netbox/dcim/tables/devicetypes.py b/netbox/dcim/tables/devicetypes.py index a7f8f08e8..91f9f3b47 100644 --- a/netbox/dcim/tables/devicetypes.py +++ b/netbox/dcim/tables/devicetypes.py @@ -31,6 +31,11 @@ class ManufacturerTable(ContactsColumnMixin, NetBoxTable): verbose_name=_('Name'), linkify=True ) + racktype_count = columns.LinkedCountColumn( + viewname='dcim:racktype_list', + url_params={'manufacturer_id': 'pk'}, + verbose_name=_('Rack Types') + ) devicetype_count = columns.LinkedCountColumn( viewname='dcim:devicetype_list', url_params={'manufacturer_id': 'pk'}, @@ -58,12 +63,12 @@ class ManufacturerTable(ContactsColumnMixin, NetBoxTable): class Meta(NetBoxTable.Meta): model = models.Manufacturer fields = ( - 'pk', 'id', 'name', 'devicetype_count', 'moduletype_count', 'inventoryitem_count', 'platform_count', - 'description', 'slug', 'tags', 'contacts', 'actions', 'created', 'last_updated', + 'pk', 'id', 'name', 'racktype_count', 'devicetype_count', 'moduletype_count', 'inventoryitem_count', + 'platform_count', 'description', 'slug', 'tags', 'contacts', 'actions', 'created', 'last_updated', ) default_columns = ( - 'pk', 'name', 'devicetype_count', 'moduletype_count', 'inventoryitem_count', 'platform_count', - 'description', 'slug', + 'pk', 'name', 'racktype_count', 'devicetype_count', 'moduletype_count', 'inventoryitem_count', + 'platform_count', 'description', 'slug', ) diff --git a/netbox/dcim/views.py b/netbox/dcim/views.py index 6efdb63f0..583b89f1a 100644 --- a/netbox/dcim/views.py +++ b/netbox/dcim/views.py @@ -964,6 +964,7 @@ class RackReservationBulkDeleteView(generic.BulkDeleteView): @register_model_view(Manufacturer, 'list', path='', detail=False) class ManufacturerListView(generic.ObjectListView): queryset = Manufacturer.objects.annotate( + racktype_count=count_related(RackType, 'manufacturer'), devicetype_count=count_related(DeviceType, 'manufacturer'), moduletype_count=count_related(ModuleType, 'manufacturer'), inventoryitem_count=count_related(InventoryItem, 'manufacturer'), From 6c6cb321bf60a03ff23ec2db2f6fcdc4e354098d Mon Sep 17 00:00:00 2001 From: Alexander Haase Date: Tue, 18 Feb 2025 15:11:32 +0100 Subject: [PATCH 093/152] Fixes 18555: Fix model URL generator for plugins (#18607) * Fix model URL generator for plugins * Fix reverse accessor warning * Revert "Fix reverse accessor warning" This reverts commit f07642bb997910205d0acc09fc8df3dde30c7981. * Add URL test case for regular models * Split dummy models Instead of using a single model for testing, one is used for testing the plugin API and a dedicated one is used for testing the NetBox plugin model features. * Fix filterset test case error * Rename test module --------- Co-authored-by: Jeremy Stretch --- netbox/extras/tests/test_filtersets.py | 1 + netbox/netbox/models/__init__.py | 3 +- .../migrations/0002_dummynetboxmodel.py | 30 +++++++++++++++++++ netbox/netbox/tests/dummy_plugin/models.py | 6 ++++ netbox/netbox/tests/dummy_plugin/urls.py | 2 ++ netbox/netbox/tests/dummy_plugin/views.py | 19 +++++++++++- netbox/netbox/tests/test_models.py | 23 ++++++++++++++ 7 files changed, 82 insertions(+), 2 deletions(-) create mode 100644 netbox/netbox/tests/dummy_plugin/migrations/0002_dummynetboxmodel.py create mode 100644 netbox/netbox/tests/test_models.py diff --git a/netbox/extras/tests/test_filtersets.py b/netbox/extras/tests/test_filtersets.py index cf914e665..03d8508af 100644 --- a/netbox/extras/tests/test_filtersets.py +++ b/netbox/extras/tests/test_filtersets.py @@ -1118,6 +1118,7 @@ class TagTestCase(TestCase, ChangeLoggedFilterSetTests): 'devicerole', 'devicetype', 'dummymodel', # From dummy_plugin + 'dummynetboxmodel', # From dummy_plugin 'eventrule', 'fhrpgroup', 'frontport', diff --git a/netbox/netbox/models/__init__.py b/netbox/netbox/models/__init__.py index b1f7cfd48..ca79d5e7e 100644 --- a/netbox/netbox/models/__init__.py +++ b/netbox/netbox/models/__init__.py @@ -10,6 +10,7 @@ from mptt.models import MPTTModel, TreeForeignKey from netbox.models.features import * from utilities.mptt import TreeManager from utilities.querysets import RestrictedQuerySet +from utilities.views import get_viewname __all__ = ( @@ -42,7 +43,7 @@ class NetBoxFeatureSet( return f'{settings.STATIC_URL}docs/models/{self._meta.app_label}/{self._meta.model_name}/' def get_absolute_url(self): - return reverse(f'{self._meta.app_label}:{self._meta.model_name}', args=[self.pk]) + return reverse(get_viewname(self), args=[self.pk]) # diff --git a/netbox/netbox/tests/dummy_plugin/migrations/0002_dummynetboxmodel.py b/netbox/netbox/tests/dummy_plugin/migrations/0002_dummynetboxmodel.py new file mode 100644 index 000000000..517178bd9 --- /dev/null +++ b/netbox/netbox/tests/dummy_plugin/migrations/0002_dummynetboxmodel.py @@ -0,0 +1,30 @@ +import taggit.managers +import utilities.json +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('dummy_plugin', '0001_initial'), + ('extras', '0122_charfield_null_choices'), + ] + + operations = [ + migrations.CreateModel( + name='DummyNetBoxModel', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False)), + ('created', models.DateTimeField(auto_now_add=True, null=True)), + ('last_updated', models.DateTimeField(auto_now=True, null=True)), + ( + 'custom_field_data', + models.JSONField(blank=True, default=dict, encoder=utilities.json.CustomFieldJSONEncoder), + ), + ('tags', taggit.managers.TaggableManager(through='extras.TaggedItem', to='extras.Tag')), + ], + options={ + 'abstract': False, + }, + ), + ] diff --git a/netbox/netbox/tests/dummy_plugin/models.py b/netbox/netbox/tests/dummy_plugin/models.py index 9bd39a46b..ed4522c65 100644 --- a/netbox/netbox/tests/dummy_plugin/models.py +++ b/netbox/netbox/tests/dummy_plugin/models.py @@ -1,5 +1,7 @@ from django.db import models +from netbox.models import NetBoxModel + class DummyModel(models.Model): name = models.CharField( @@ -11,3 +13,7 @@ class DummyModel(models.Model): class Meta: ordering = ['name'] + + +class DummyNetBoxModel(NetBoxModel): + pass diff --git a/netbox/netbox/tests/dummy_plugin/urls.py b/netbox/netbox/tests/dummy_plugin/urls.py index 9e383ffe2..6cdd48f7e 100644 --- a/netbox/netbox/tests/dummy_plugin/urls.py +++ b/netbox/netbox/tests/dummy_plugin/urls.py @@ -6,4 +6,6 @@ from . import views urlpatterns = ( path('models/', views.DummyModelsView.as_view(), name='dummy_model_list'), path('models/add/', views.DummyModelAddView.as_view(), name='dummy_model_add'), + + path('netboxmodel//', views.DummyNetBoxModelView.as_view(), name='dummynetboxmodel'), ) diff --git a/netbox/netbox/tests/dummy_plugin/views.py b/netbox/netbox/tests/dummy_plugin/views.py index 82f250fc1..3aac26cf3 100644 --- a/netbox/netbox/tests/dummy_plugin/views.py +++ b/netbox/netbox/tests/dummy_plugin/views.py @@ -5,12 +5,17 @@ from django.http import HttpResponse from django.views.generic import View from dcim.models import Site +from netbox.views import generic from utilities.views import register_model_view -from .models import DummyModel +from .models import DummyModel, DummyNetBoxModel # Trigger registration of custom column from .tables import mycol # noqa: F401 +# +# DummyModel +# + class DummyModelsView(View): def get(self, request): @@ -32,6 +37,18 @@ class DummyModelAddView(View): return HttpResponse("Instance created") +# +# DummyNetBoxModel +# + +class DummyNetBoxModelView(generic.ObjectView): + queryset = DummyNetBoxModel.objects.all() + + +# +# API +# + @register_model_view(Site, 'extra', path='other-stuff') class ExtraCoreModelView(View): diff --git a/netbox/netbox/tests/test_models.py b/netbox/netbox/tests/test_models.py new file mode 100644 index 000000000..3da4144c2 --- /dev/null +++ b/netbox/netbox/tests/test_models.py @@ -0,0 +1,23 @@ +from unittest import skipIf + +from django.conf import settings +from django.test import TestCase + +from core.models import ObjectChange +from netbox.tests.dummy_plugin.models import DummyNetBoxModel + + +class ModelTest(TestCase): + + def test_get_absolute_url(self): + m = ObjectChange() + m.pk = 123 + + self.assertEqual(m.get_absolute_url(), f'/core/changelog/{m.pk}/') + + @skipIf('netbox.tests.dummy_plugin' not in settings.PLUGINS, "dummy_plugin not in settings.PLUGINS") + def test_get_absolute_url_plugin(self): + m = DummyNetBoxModel() + m.pk = 123 + + self.assertEqual(m.get_absolute_url(), f'/plugins/dummy-plugin/netboxmodel/{m.pk}/') From 70dddb673b82c476ec5ce09570b41baa10597aae Mon Sep 17 00:00:00 2001 From: Jason Novinger Date: Tue, 18 Feb 2025 12:33:05 -0600 Subject: [PATCH 094/152] Fixes #18585: filtering circuits by location (#18641) * Fixes #18585: filtering circuits by location This also fixes a related issue where selected filter is not shown in the filter form. Changes: - Adds `CircuitFilterSet.location_id` field to enable filtering with incoming GET params - Adds `CirciotFilterForm.location_id` field to enable filtering from list form - Adds `location_id` to the Location fieldset on `CircuitFilterForm` * Adds test for new CircuitFilterset.location_id filter --- netbox/circuits/filtersets.py | 5 +++++ netbox/circuits/forms/filtersets.py | 7 ++++++- netbox/circuits/tests/test_filtersets.py | 24 ++++++++++++++++++++++-- 3 files changed, 33 insertions(+), 3 deletions(-) diff --git a/netbox/circuits/filtersets.py b/netbox/circuits/filtersets.py index 964f69f83..188b5343e 100644 --- a/netbox/circuits/filtersets.py +++ b/netbox/circuits/filtersets.py @@ -234,6 +234,11 @@ class CircuitFilterSet(NetBoxModelFilterSet, TenancyFilterSet, ContactModelFilte to_field_name='slug', label=_('Site (slug)'), ) + location_id = django_filters.ModelMultipleChoiceFilter( + field_name='terminations___location', + label=_('Location (ID)'), + queryset=Location.objects.all(), + ) termination_a_id = django_filters.ModelMultipleChoiceFilter( queryset=CircuitTermination.objects.all(), label=_('Termination A (ID)'), diff --git a/netbox/circuits/forms/filtersets.py b/netbox/circuits/forms/filtersets.py index aefc62655..297af5e71 100644 --- a/netbox/circuits/forms/filtersets.py +++ b/netbox/circuits/forms/filtersets.py @@ -126,7 +126,7 @@ class CircuitFilterForm(TenancyFilterForm, ContactModelFilterForm, NetBoxModelFi 'type_id', 'status', 'install_date', 'termination_date', 'commit_rate', 'distance', 'distance_unit', name=_('Attributes') ), - FieldSet('region_id', 'site_group_id', 'site_id', name=_('Location')), + FieldSet('region_id', 'site_group_id', 'site_id', 'location_id', name=_('Location')), FieldSet('tenant_group_id', 'tenant_id', name=_('Tenant')), FieldSet('contact', 'contact_role', 'contact_group', name=_('Contacts')), ) @@ -181,6 +181,11 @@ class CircuitFilterForm(TenancyFilterForm, ContactModelFilterForm, NetBoxModelFi }, label=_('Site') ) + location_id = DynamicModelMultipleChoiceField( + queryset=Location.objects.all(), + required=False, + label=_('Location') + ) install_date = forms.DateField( label=_('Install date'), required=False, diff --git a/netbox/circuits/tests/test_filtersets.py b/netbox/circuits/tests/test_filtersets.py index b32abd34e..91077ee64 100644 --- a/netbox/circuits/tests/test_filtersets.py +++ b/netbox/circuits/tests/test_filtersets.py @@ -3,8 +3,10 @@ from django.test import TestCase from circuits.choices import * from circuits.filtersets import * from circuits.models import * -from dcim.choices import InterfaceTypeChoices -from dcim.models import Cable, Device, DeviceRole, DeviceType, Interface, Manufacturer, Region, Site, SiteGroup +from dcim.choices import InterfaceTypeChoices, LocationStatusChoices +from dcim.models import ( + Cable, Device, DeviceRole, DeviceType, Interface, Location, Manufacturer, Region, Site, SiteGroup +) from ipam.models import ASN, RIR from netbox.choices import DistanceUnitChoices from tenancy.models import Tenant, TenantGroup @@ -225,6 +227,17 @@ class CircuitTestCase(TestCase, ChangeLoggedFilterSetTests): ) ProviderNetwork.objects.bulk_create(provider_networks) + locations = ( + Location.objects.create( + site=sites[0], name='Test Location 1', slug='test-location-1', + status=LocationStatusChoices.STATUS_ACTIVE, + ), + Location.objects.create( + site=sites[1], name='Test Location 2', slug='test-location-2', + status=LocationStatusChoices.STATUS_ACTIVE, + ), + ) + circuits = ( Circuit( provider=providers[0], @@ -305,7 +318,9 @@ class CircuitTestCase(TestCase, ChangeLoggedFilterSetTests): circuit_terminations = (( CircuitTermination(circuit=circuits[0], termination=sites[0], term_side='A'), + CircuitTermination(circuit=circuits[0], termination=locations[0], term_side='Z'), CircuitTermination(circuit=circuits[1], termination=sites[1], term_side='A'), + CircuitTermination(circuit=circuits[1], termination=locations[1], term_side='Z'), CircuitTermination(circuit=circuits[2], termination=sites[2], term_side='A'), CircuitTermination(circuit=circuits[3], termination=provider_networks[0], term_side='A'), CircuitTermination(circuit=circuits[4], termination=provider_networks[1], term_side='A'), @@ -395,6 +410,11 @@ class CircuitTestCase(TestCase, ChangeLoggedFilterSetTests): params = {'site': [sites[0].slug, sites[1].slug]} self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) + def test_location(self): + location_ids = Location.objects.values_list('id', flat=True)[:2] + params = {'location_id': location_ids} + self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) + def test_tenant(self): tenants = Tenant.objects.all()[:2] params = {'tenant_id': [tenants[0].pk, tenants[1].pk]} From 57ef44706a7cfb1abb3aac1f49206ae216f2bba8 Mon Sep 17 00:00:00 2001 From: github-actions <41898282+github-actions[bot]@users.noreply.github.com> Date: Wed, 19 Feb 2025 05:02:03 +0000 Subject: [PATCH 095/152] Update source translation strings --- netbox/translations/en/LC_MESSAGES/django.po | 287 ++++++++++--------- 1 file changed, 145 insertions(+), 142 deletions(-) diff --git a/netbox/translations/en/LC_MESSAGES/django.po b/netbox/translations/en/LC_MESSAGES/django.po index cab5ed729..55d263183 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: 2025-02-15 05:01+0000\n" +"POT-Creation-Date: 2025-02-19 05:01+0000\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -158,7 +158,7 @@ msgid "Spoke" msgstr "" #: netbox/circuits/filtersets.py:37 netbox/circuits/filtersets.py:204 -#: netbox/circuits/filtersets.py:279 netbox/dcim/base_filtersets.py:22 +#: netbox/circuits/filtersets.py:284 netbox/dcim/base_filtersets.py:22 #: netbox/dcim/filtersets.py:99 netbox/dcim/filtersets.py:153 #: netbox/dcim/filtersets.py:213 netbox/dcim/filtersets.py:334 #: netbox/dcim/filtersets.py:465 netbox/dcim/filtersets.py:1022 @@ -170,7 +170,7 @@ msgid "Region (ID)" msgstr "" #: netbox/circuits/filtersets.py:44 netbox/circuits/filtersets.py:211 -#: netbox/circuits/filtersets.py:286 netbox/dcim/base_filtersets.py:29 +#: netbox/circuits/filtersets.py:291 netbox/dcim/base_filtersets.py:29 #: netbox/dcim/filtersets.py:106 netbox/dcim/filtersets.py:159 #: netbox/dcim/filtersets.py:220 netbox/dcim/filtersets.py:341 #: netbox/dcim/filtersets.py:472 netbox/dcim/filtersets.py:1029 @@ -182,7 +182,7 @@ msgid "Region (slug)" msgstr "" #: netbox/circuits/filtersets.py:50 netbox/circuits/filtersets.py:217 -#: netbox/circuits/filtersets.py:292 netbox/dcim/base_filtersets.py:35 +#: netbox/circuits/filtersets.py:297 netbox/dcim/base_filtersets.py:35 #: netbox/dcim/filtersets.py:129 netbox/dcim/filtersets.py:226 #: netbox/dcim/filtersets.py:347 netbox/dcim/filtersets.py:478 #: netbox/dcim/filtersets.py:1035 netbox/dcim/filtersets.py:1382 @@ -193,7 +193,7 @@ msgid "Site group (ID)" msgstr "" #: netbox/circuits/filtersets.py:57 netbox/circuits/filtersets.py:224 -#: netbox/circuits/filtersets.py:299 netbox/dcim/base_filtersets.py:42 +#: netbox/circuits/filtersets.py:304 netbox/dcim/base_filtersets.py:42 #: netbox/dcim/filtersets.py:136 netbox/dcim/filtersets.py:233 #: netbox/dcim/filtersets.py:354 netbox/dcim/filtersets.py:485 #: netbox/dcim/filtersets.py:1042 netbox/dcim/filtersets.py:1389 @@ -205,7 +205,7 @@ msgstr "" #: netbox/circuits/filtersets.py:62 netbox/circuits/forms/filtersets.py:59 #: netbox/circuits/forms/filtersets.py:182 -#: netbox/circuits/forms/filtersets.py:235 +#: netbox/circuits/forms/filtersets.py:240 #: netbox/circuits/tables/circuits.py:129 netbox/dcim/forms/bulk_edit.py:172 #: netbox/dcim/forms/bulk_edit.py:333 netbox/dcim/forms/bulk_edit.py:686 #: netbox/dcim/forms/bulk_edit.py:891 netbox/dcim/forms/bulk_import.py:133 @@ -252,7 +252,7 @@ msgid "Site" msgstr "" #: netbox/circuits/filtersets.py:68 netbox/circuits/filtersets.py:235 -#: netbox/circuits/filtersets.py:310 netbox/dcim/base_filtersets.py:53 +#: netbox/circuits/filtersets.py:315 netbox/dcim/base_filtersets.py:53 #: netbox/dcim/filtersets.py:243 netbox/dcim/filtersets.py:364 #: netbox/dcim/filtersets.py:459 netbox/extras/filtersets.py:531 #: netbox/ipam/filtersets.py:243 netbox/ipam/filtersets.py:958 @@ -272,31 +272,31 @@ msgid "ASN" msgstr "" #: netbox/circuits/filtersets.py:101 netbox/circuits/filtersets.py:128 -#: netbox/circuits/filtersets.py:162 netbox/circuits/filtersets.py:333 -#: netbox/circuits/filtersets.py:401 netbox/circuits/filtersets.py:477 -#: netbox/circuits/filtersets.py:545 netbox/ipam/filtersets.py:248 +#: netbox/circuits/filtersets.py:162 netbox/circuits/filtersets.py:338 +#: netbox/circuits/filtersets.py:406 netbox/circuits/filtersets.py:482 +#: netbox/circuits/filtersets.py:550 netbox/ipam/filtersets.py:248 msgid "Provider (ID)" msgstr "" #: netbox/circuits/filtersets.py:107 netbox/circuits/filtersets.py:134 -#: netbox/circuits/filtersets.py:168 netbox/circuits/filtersets.py:339 -#: netbox/circuits/filtersets.py:483 netbox/circuits/filtersets.py:551 +#: netbox/circuits/filtersets.py:168 netbox/circuits/filtersets.py:344 +#: netbox/circuits/filtersets.py:488 netbox/circuits/filtersets.py:556 #: netbox/ipam/filtersets.py:254 msgid "Provider (slug)" msgstr "" -#: netbox/circuits/filtersets.py:173 netbox/circuits/filtersets.py:488 -#: netbox/circuits/filtersets.py:556 +#: netbox/circuits/filtersets.py:173 netbox/circuits/filtersets.py:493 +#: netbox/circuits/filtersets.py:561 msgid "Provider account (ID)" msgstr "" -#: netbox/circuits/filtersets.py:179 netbox/circuits/filtersets.py:494 -#: netbox/circuits/filtersets.py:562 +#: netbox/circuits/filtersets.py:179 netbox/circuits/filtersets.py:499 +#: netbox/circuits/filtersets.py:567 msgid "Provider account (account)" msgstr "" -#: netbox/circuits/filtersets.py:184 netbox/circuits/filtersets.py:498 -#: netbox/circuits/filtersets.py:567 +#: netbox/circuits/filtersets.py:184 netbox/circuits/filtersets.py:503 +#: netbox/circuits/filtersets.py:572 msgid "Provider network (ID)" msgstr "" @@ -308,7 +308,7 @@ msgstr "" msgid "Circuit type (slug)" msgstr "" -#: netbox/circuits/filtersets.py:229 netbox/circuits/filtersets.py:304 +#: netbox/circuits/filtersets.py:229 netbox/circuits/filtersets.py:309 #: netbox/dcim/base_filtersets.py:47 netbox/dcim/filtersets.py:237 #: netbox/dcim/filtersets.py:358 netbox/dcim/filtersets.py:453 #: netbox/dcim/filtersets.py:1046 netbox/dcim/filtersets.py:1394 @@ -319,12 +319,20 @@ msgstr "" msgid "Site (ID)" msgstr "" -#: netbox/circuits/filtersets.py:239 netbox/circuits/filtersets.py:243 +#: netbox/circuits/filtersets.py:239 netbox/circuits/filtersets.py:321 +#: netbox/dcim/base_filtersets.py:59 netbox/dcim/filtersets.py:259 +#: netbox/dcim/filtersets.py:370 netbox/dcim/filtersets.py:491 +#: netbox/dcim/filtersets.py:1058 netbox/dcim/filtersets.py:1405 +#: netbox/dcim/filtersets.py:2305 +msgid "Location (ID)" +msgstr "" + +#: netbox/circuits/filtersets.py:244 netbox/circuits/filtersets.py:248 msgid "Termination A (ID)" msgstr "" -#: netbox/circuits/filtersets.py:268 netbox/circuits/filtersets.py:370 -#: netbox/circuits/filtersets.py:532 netbox/core/filtersets.py:77 +#: netbox/circuits/filtersets.py:273 netbox/circuits/filtersets.py:375 +#: netbox/circuits/filtersets.py:537 netbox/core/filtersets.py:77 #: netbox/core/filtersets.py:136 netbox/core/filtersets.py:173 #: netbox/dcim/filtersets.py:752 netbox/dcim/filtersets.py:1363 #: netbox/dcim/filtersets.py:2400 netbox/extras/filtersets.py:41 @@ -348,12 +356,12 @@ msgstr "" msgid "Search" msgstr "" -#: netbox/circuits/filtersets.py:272 netbox/circuits/forms/bulk_edit.py:195 +#: netbox/circuits/filtersets.py:277 netbox/circuits/forms/bulk_edit.py:195 #: netbox/circuits/forms/bulk_edit.py:284 #: netbox/circuits/forms/bulk_import.py:128 -#: netbox/circuits/forms/filtersets.py:218 -#: netbox/circuits/forms/filtersets.py:245 -#: netbox/circuits/forms/filtersets.py:291 +#: netbox/circuits/forms/filtersets.py:223 +#: netbox/circuits/forms/filtersets.py:250 +#: netbox/circuits/forms/filtersets.py:296 #: netbox/circuits/forms/model_forms.py:139 #: netbox/circuits/forms/model_forms.py:162 #: netbox/circuits/forms/model_forms.py:262 @@ -367,64 +375,57 @@ msgstr "" msgid "Circuit" msgstr "" -#: netbox/circuits/filtersets.py:316 netbox/dcim/base_filtersets.py:59 -#: netbox/dcim/filtersets.py:259 netbox/dcim/filtersets.py:370 -#: netbox/dcim/filtersets.py:491 netbox/dcim/filtersets.py:1058 -#: netbox/dcim/filtersets.py:1405 netbox/dcim/filtersets.py:2305 -msgid "Location (ID)" -msgstr "" - -#: netbox/circuits/filtersets.py:323 netbox/dcim/base_filtersets.py:66 +#: netbox/circuits/filtersets.py:328 netbox/dcim/base_filtersets.py:66 #: netbox/dcim/filtersets.py:266 netbox/dcim/filtersets.py:377 #: netbox/dcim/filtersets.py:498 netbox/dcim/filtersets.py:1411 #: netbox/extras/filtersets.py:542 msgid "Location (slug)" msgstr "" -#: netbox/circuits/filtersets.py:328 +#: netbox/circuits/filtersets.py:333 msgid "ProviderNetwork (ID)" msgstr "" -#: netbox/circuits/filtersets.py:376 +#: netbox/circuits/filtersets.py:381 msgid "Circuit (CID)" msgstr "" -#: netbox/circuits/filtersets.py:381 +#: netbox/circuits/filtersets.py:386 msgid "Circuit (ID)" msgstr "" -#: netbox/circuits/filtersets.py:386 +#: netbox/circuits/filtersets.py:391 msgid "Virtual circuit (CID)" msgstr "" -#: netbox/circuits/filtersets.py:391 netbox/dcim/filtersets.py:1848 +#: netbox/circuits/filtersets.py:396 netbox/dcim/filtersets.py:1848 msgid "Virtual circuit (ID)" msgstr "" -#: netbox/circuits/filtersets.py:396 +#: netbox/circuits/filtersets.py:401 msgid "Provider (name)" msgstr "" -#: netbox/circuits/filtersets.py:405 +#: netbox/circuits/filtersets.py:410 msgid "Circuit group (ID)" msgstr "" -#: netbox/circuits/filtersets.py:411 +#: netbox/circuits/filtersets.py:416 msgid "Circuit group (slug)" msgstr "" -#: netbox/circuits/filtersets.py:502 +#: netbox/circuits/filtersets.py:507 msgid "Virtual circuit type (ID)" msgstr "" -#: netbox/circuits/filtersets.py:508 +#: netbox/circuits/filtersets.py:513 msgid "Virtual circuit type (slug)" msgstr "" -#: netbox/circuits/filtersets.py:536 netbox/circuits/forms/bulk_edit.py:355 +#: netbox/circuits/filtersets.py:541 netbox/circuits/forms/bulk_edit.py:355 #: netbox/circuits/forms/bulk_import.py:249 -#: netbox/circuits/forms/filtersets.py:367 -#: netbox/circuits/forms/filtersets.py:373 +#: netbox/circuits/forms/filtersets.py:372 +#: netbox/circuits/forms/filtersets.py:378 #: netbox/circuits/forms/model_forms.py:343 #: netbox/circuits/forms/model_forms.py:358 #: netbox/circuits/tables/virtual_circuits.py:88 @@ -433,7 +434,7 @@ msgstr "" msgid "Virtual circuit" msgstr "" -#: netbox/circuits/filtersets.py:572 netbox/dcim/filtersets.py:1268 +#: netbox/circuits/filtersets.py:577 netbox/dcim/filtersets.py:1268 #: netbox/dcim/filtersets.py:1633 netbox/ipam/filtersets.py:601 #: netbox/vpn/filtersets.py:102 netbox/vpn/filtersets.py:401 msgid "Interface (ID)" @@ -600,13 +601,13 @@ msgstr "" #: netbox/circuits/forms/filtersets.py:96 #: netbox/circuits/forms/filtersets.py:124 #: netbox/circuits/forms/filtersets.py:142 -#: netbox/circuits/forms/filtersets.py:219 -#: netbox/circuits/forms/filtersets.py:263 -#: netbox/circuits/forms/filtersets.py:286 -#: netbox/circuits/forms/filtersets.py:324 -#: netbox/circuits/forms/filtersets.py:332 -#: netbox/circuits/forms/filtersets.py:368 -#: netbox/circuits/forms/filtersets.py:391 +#: netbox/circuits/forms/filtersets.py:224 +#: netbox/circuits/forms/filtersets.py:268 +#: netbox/circuits/forms/filtersets.py:291 +#: netbox/circuits/forms/filtersets.py:329 +#: netbox/circuits/forms/filtersets.py:337 +#: netbox/circuits/forms/filtersets.py:373 +#: netbox/circuits/forms/filtersets.py:396 #: netbox/circuits/forms/model_forms.py:60 #: netbox/circuits/forms/model_forms.py:76 #: netbox/circuits/forms/model_forms.py:110 @@ -637,14 +638,14 @@ msgstr "" #: netbox/circuits/forms/bulk_edit.py:112 #: netbox/circuits/forms/bulk_edit.py:303 #: netbox/circuits/forms/filtersets.py:115 -#: netbox/circuits/forms/filtersets.py:315 netbox/dcim/forms/bulk_edit.py:210 +#: netbox/circuits/forms/filtersets.py:320 netbox/dcim/forms/bulk_edit.py:210 #: netbox/dcim/forms/bulk_edit.py:613 netbox/dcim/forms/bulk_edit.py:822 #: netbox/dcim/forms/bulk_edit.py:1191 netbox/dcim/forms/bulk_edit.py:1218 #: netbox/dcim/forms/bulk_edit.py:1740 netbox/dcim/forms/filtersets.py:1065 #: netbox/dcim/forms/filtersets.py:1323 netbox/dcim/forms/filtersets.py:1460 #: netbox/dcim/forms/filtersets.py:1484 netbox/dcim/tables/devices.py:737 #: netbox/dcim/tables/devices.py:793 netbox/dcim/tables/devices.py:1034 -#: netbox/dcim/tables/devicetypes.py:251 netbox/dcim/tables/devicetypes.py:266 +#: netbox/dcim/tables/devicetypes.py:256 netbox/dcim/tables/devicetypes.py:271 #: netbox/dcim/tables/racks.py:33 netbox/extras/forms/bulk_edit.py:270 #: netbox/extras/tables/tables.py:443 #: netbox/templates/circuits/circuittype.html:30 @@ -663,7 +664,7 @@ msgstr "" #: netbox/circuits/forms/bulk_import.py:94 #: netbox/circuits/forms/bulk_import.py:221 #: netbox/circuits/forms/filtersets.py:137 -#: netbox/circuits/forms/filtersets.py:353 +#: netbox/circuits/forms/filtersets.py:358 #: netbox/circuits/tables/circuits.py:65 netbox/circuits/tables/circuits.py:200 #: netbox/circuits/tables/virtual_circuits.py:58 #: netbox/core/forms/bulk_edit.py:18 netbox/core/forms/filtersets.py:33 @@ -725,7 +726,7 @@ msgstr "" #: netbox/circuits/forms/bulk_import.py:87 #: netbox/circuits/forms/bulk_import.py:214 #: netbox/circuits/forms/filtersets.py:150 -#: netbox/circuits/forms/filtersets.py:340 +#: netbox/circuits/forms/filtersets.py:345 #: netbox/circuits/forms/model_forms.py:116 #: netbox/circuits/forms/model_forms.py:330 #: netbox/templates/circuits/virtualcircuit.html:31 @@ -738,7 +739,7 @@ msgstr "" #: netbox/circuits/forms/bulk_import.py:100 #: netbox/circuits/forms/bulk_import.py:227 #: netbox/circuits/forms/filtersets.py:161 -#: netbox/circuits/forms/filtersets.py:356 netbox/core/forms/filtersets.py:38 +#: netbox/circuits/forms/filtersets.py:361 netbox/core/forms/filtersets.py:38 #: netbox/core/forms/filtersets.py:80 netbox/core/tables/data.py:23 #: netbox/core/tables/jobs.py:26 netbox/core/tables/tasks.py:88 #: netbox/dcim/forms/bulk_edit.py:110 netbox/dcim/forms/bulk_edit.py:185 @@ -815,8 +816,8 @@ msgstr "" #: netbox/circuits/forms/bulk_import.py:170 #: netbox/circuits/forms/bulk_import.py:232 #: netbox/circuits/forms/filtersets.py:130 -#: netbox/circuits/forms/filtersets.py:272 -#: netbox/circuits/forms/filtersets.py:326 netbox/dcim/forms/bulk_edit.py:126 +#: netbox/circuits/forms/filtersets.py:277 +#: netbox/circuits/forms/filtersets.py:331 netbox/dcim/forms/bulk_edit.py:126 #: netbox/dcim/forms/bulk_edit.py:191 netbox/dcim/forms/bulk_edit.py:350 #: netbox/dcim/forms/bulk_edit.py:470 netbox/dcim/forms/bulk_edit.py:699 #: netbox/dcim/forms/bulk_edit.py:812 netbox/dcim/forms/bulk_edit.py:1768 @@ -885,22 +886,22 @@ msgid "Tenant" msgstr "" #: netbox/circuits/forms/bulk_edit.py:159 -#: netbox/circuits/forms/filtersets.py:185 +#: netbox/circuits/forms/filtersets.py:190 msgid "Install date" msgstr "" #: netbox/circuits/forms/bulk_edit.py:164 -#: netbox/circuits/forms/filtersets.py:190 +#: netbox/circuits/forms/filtersets.py:195 msgid "Termination date" msgstr "" #: netbox/circuits/forms/bulk_edit.py:170 -#: netbox/circuits/forms/filtersets.py:197 +#: netbox/circuits/forms/filtersets.py:202 msgid "Commit rate (Kbps)" msgstr "" #: netbox/circuits/forms/bulk_edit.py:176 -#: netbox/circuits/forms/filtersets.py:203 +#: netbox/circuits/forms/filtersets.py:208 #: netbox/circuits/forms/model_forms.py:136 #: netbox/templates/circuits/circuit.html:38 #: netbox/templates/wireless/wirelesslink.html:38 @@ -913,7 +914,7 @@ msgstr "" #: netbox/circuits/forms/bulk_edit.py:181 #: netbox/circuits/forms/bulk_import.py:105 #: netbox/circuits/forms/bulk_import.py:108 -#: netbox/circuits/forms/filtersets.py:207 +#: netbox/circuits/forms/filtersets.py:212 #: netbox/wireless/forms/bulk_edit.py:137 #: netbox/wireless/forms/bulk_import.py:121 #: netbox/wireless/forms/bulk_import.py:124 @@ -931,8 +932,8 @@ msgstr "" #: netbox/circuits/forms/filtersets.py:91 #: netbox/circuits/forms/filtersets.py:110 #: netbox/circuits/forms/filtersets.py:127 -#: netbox/circuits/forms/filtersets.py:310 -#: netbox/circuits/forms/filtersets.py:325 netbox/core/forms/filtersets.py:68 +#: netbox/circuits/forms/filtersets.py:315 +#: netbox/circuits/forms/filtersets.py:330 netbox/core/forms/filtersets.py:68 #: netbox/core/forms/filtersets.py:136 netbox/dcim/forms/bulk_edit.py:846 #: netbox/dcim/forms/filtersets.py:173 netbox/dcim/forms/filtersets.py:205 #: netbox/dcim/forms/filtersets.py:916 netbox/dcim/forms/filtersets.py:1008 @@ -995,7 +996,7 @@ msgstr "" #: netbox/circuits/forms/bulk_edit.py:218 #: netbox/circuits/forms/bulk_import.py:133 -#: netbox/circuits/forms/filtersets.py:220 +#: netbox/circuits/forms/filtersets.py:225 #: netbox/circuits/forms/model_forms.py:173 #: netbox/templates/circuits/inc/circuit_termination.html:6 #: netbox/templates/dcim/cable.html:68 netbox/templates/dcim/cable.html:72 @@ -1035,7 +1036,7 @@ msgstr "" #: netbox/circuits/forms/bulk_edit.py:289 #: netbox/circuits/forms/bulk_import.py:188 -#: netbox/circuits/forms/filtersets.py:299 +#: netbox/circuits/forms/filtersets.py:304 #: netbox/circuits/tables/circuits.py:207 netbox/dcim/forms/model_forms.py:562 #: netbox/templates/circuits/circuitgroupassignment.html:34 #: netbox/templates/dcim/device.html:133 @@ -1049,9 +1050,9 @@ msgstr "" #: netbox/circuits/forms/bulk_edit.py:321 #: netbox/circuits/forms/bulk_import.py:208 #: netbox/circuits/forms/filtersets.py:158 -#: netbox/circuits/forms/filtersets.py:258 -#: netbox/circuits/forms/filtersets.py:348 -#: netbox/circuits/forms/filtersets.py:386 +#: netbox/circuits/forms/filtersets.py:263 +#: netbox/circuits/forms/filtersets.py:353 +#: netbox/circuits/forms/filtersets.py:391 #: netbox/circuits/forms/model_forms.py:325 #: netbox/circuits/tables/virtual_circuits.py:51 #: netbox/circuits/tables/virtual_circuits.py:99 @@ -1060,7 +1061,7 @@ msgstr "" #: netbox/circuits/forms/bulk_edit.py:365 #: netbox/circuits/forms/bulk_import.py:254 -#: netbox/circuits/forms/filtersets.py:376 +#: netbox/circuits/forms/filtersets.py:381 #: netbox/circuits/forms/model_forms.py:365 netbox/dcim/forms/bulk_edit.py:361 #: netbox/dcim/forms/bulk_edit.py:1280 netbox/dcim/forms/bulk_edit.py:1711 #: netbox/dcim/forms/bulk_import.py:255 netbox/dcim/forms/bulk_import.py:1106 @@ -1069,7 +1070,7 @@ msgstr "" #: netbox/dcim/forms/model_forms.py:1090 netbox/dcim/forms/model_forms.py:1559 #: netbox/dcim/forms/object_import.py:182 netbox/dcim/tables/devices.py:179 #: netbox/dcim/tables/devices.py:840 netbox/dcim/tables/devices.py:966 -#: netbox/dcim/tables/devicetypes.py:306 netbox/dcim/tables/racks.py:128 +#: netbox/dcim/tables/devicetypes.py:311 netbox/dcim/tables/racks.py:128 #: netbox/extras/filtersets.py:552 netbox/ipam/forms/bulk_edit.py:245 #: netbox/ipam/forms/bulk_edit.py:295 netbox/ipam/forms/bulk_edit.py:343 #: netbox/ipam/forms/bulk_edit.py:495 netbox/ipam/forms/bulk_import.py:193 @@ -1214,7 +1215,8 @@ msgstr "" #: netbox/circuits/forms/filtersets.py:38 #: netbox/circuits/forms/filtersets.py:129 -#: netbox/circuits/forms/filtersets.py:240 +#: netbox/circuits/forms/filtersets.py:187 +#: netbox/circuits/forms/filtersets.py:245 #: netbox/circuits/tables/circuits.py:144 netbox/dcim/forms/bulk_edit.py:342 #: netbox/dcim/forms/bulk_edit.py:450 netbox/dcim/forms/bulk_edit.py:691 #: netbox/dcim/forms/bulk_edit.py:746 netbox/dcim/forms/bulk_edit.py:900 @@ -1270,7 +1272,7 @@ msgstr "" #: netbox/circuits/forms/filtersets.py:45 #: netbox/circuits/forms/filtersets.py:168 -#: netbox/circuits/forms/filtersets.py:225 +#: netbox/circuits/forms/filtersets.py:230 #: netbox/circuits/tables/circuits.py:139 netbox/dcim/forms/bulk_edit.py:116 #: netbox/dcim/forms/bulk_edit.py:317 netbox/dcim/forms/bulk_edit.py:875 #: netbox/dcim/forms/bulk_import.py:95 netbox/dcim/forms/filtersets.py:74 @@ -1298,7 +1300,7 @@ msgstr "" #: netbox/circuits/forms/filtersets.py:50 #: netbox/circuits/forms/filtersets.py:173 -#: netbox/circuits/forms/filtersets.py:230 netbox/dcim/forms/bulk_edit.py:325 +#: netbox/circuits/forms/filtersets.py:235 netbox/dcim/forms/bulk_edit.py:325 #: netbox/dcim/forms/bulk_edit.py:883 netbox/dcim/forms/filtersets.py:79 #: netbox/dcim/forms/filtersets.py:191 netbox/dcim/forms/filtersets.py:217 #: netbox/dcim/forms/filtersets.py:348 netbox/dcim/forms/filtersets.py:431 @@ -1323,11 +1325,11 @@ msgstr "" msgid "Account" msgstr "" -#: netbox/circuits/forms/filtersets.py:248 +#: netbox/circuits/forms/filtersets.py:253 msgid "Term Side" msgstr "" -#: netbox/circuits/forms/filtersets.py:281 netbox/dcim/forms/bulk_edit.py:1570 +#: netbox/circuits/forms/filtersets.py:286 netbox/dcim/forms/bulk_edit.py:1570 #: netbox/extras/forms/model_forms.py:582 netbox/ipam/forms/filtersets.py:144 #: netbox/ipam/forms/filtersets.py:598 netbox/ipam/forms/model_forms.py:329 #: netbox/templates/dcim/macaddress.html:25 @@ -1338,7 +1340,7 @@ msgstr "" msgid "Assignment" msgstr "" -#: netbox/circuits/forms/filtersets.py:296 +#: netbox/circuits/forms/filtersets.py:301 #: netbox/circuits/forms/model_forms.py:252 #: netbox/circuits/tables/circuits.py:191 netbox/dcim/forms/bulk_edit.py:121 #: netbox/dcim/forms/bulk_import.py:102 netbox/dcim/forms/model_forms.py:120 @@ -1535,8 +1537,8 @@ msgstr "" #: netbox/extras/models/models.py:158 netbox/extras/models/models.py:396 #: netbox/extras/models/models.py:511 netbox/extras/models/notifications.py:131 #: netbox/extras/models/staging.py:32 netbox/extras/models/tags.py:32 -#: netbox/ipam/models/vlans.py:358 netbox/netbox/models/__init__.py:114 -#: netbox/netbox/models/__init__.py:149 netbox/netbox/models/__init__.py:195 +#: netbox/ipam/models/vlans.py:358 netbox/netbox/models/__init__.py:115 +#: netbox/netbox/models/__init__.py:150 netbox/netbox/models/__init__.py:196 #: netbox/users/models/permissions.py:24 netbox/users/models/tokens.py:57 #: netbox/users/models/users.py:33 #: netbox/virtualization/models/virtualmachines.py:276 @@ -1574,8 +1576,8 @@ msgstr "" #: netbox/ipam/models/services.py:51 netbox/ipam/models/services.py:84 #: netbox/ipam/models/vlans.py:37 netbox/ipam/models/vlans.py:199 #: netbox/ipam/models/vlans.py:337 netbox/ipam/models/vrfs.py:20 -#: netbox/ipam/models/vrfs.py:75 netbox/netbox/models/__init__.py:141 -#: netbox/netbox/models/__init__.py:185 netbox/tenancy/models/contacts.py:58 +#: netbox/ipam/models/vrfs.py:75 netbox/netbox/models/__init__.py:142 +#: netbox/netbox/models/__init__.py:186 netbox/tenancy/models/contacts.py:58 #: netbox/tenancy/models/tenants.py:19 netbox/tenancy/models/tenants.py:42 #: netbox/users/models/permissions.py:20 netbox/users/models/users.py:28 #: netbox/virtualization/models/clusters.py:52 @@ -1596,8 +1598,8 @@ msgstr "" #: netbox/circuits/models/providers.py:28 netbox/dcim/models/devices.py:88 #: netbox/dcim/models/racks.py:137 netbox/dcim/models/sites.py:149 #: netbox/extras/models/models.py:506 netbox/ipam/models/asns.py:23 -#: netbox/ipam/models/vlans.py:42 netbox/netbox/models/__init__.py:145 -#: netbox/netbox/models/__init__.py:190 netbox/tenancy/models/tenants.py:25 +#: netbox/ipam/models/vlans.py:42 netbox/netbox/models/__init__.py:146 +#: netbox/netbox/models/__init__.py:191 netbox/tenancy/models/tenants.py:25 #: netbox/tenancy/models/tenants.py:47 netbox/vpn/models/l2vpn.py:27 #: netbox/wireless/models.py:59 msgid "slug" @@ -1681,7 +1683,7 @@ msgstr "" #: netbox/dcim/tables/devices.py:872 netbox/dcim/tables/devices.py:941 #: netbox/dcim/tables/devices.py:1006 netbox/dcim/tables/devices.py:1025 #: netbox/dcim/tables/devices.py:1054 netbox/dcim/tables/devices.py:1084 -#: netbox/dcim/tables/devicetypes.py:31 netbox/dcim/tables/devicetypes.py:222 +#: netbox/dcim/tables/devicetypes.py:31 netbox/dcim/tables/devicetypes.py:227 #: netbox/dcim/tables/power.py:22 netbox/dcim/tables/power.py:62 #: netbox/dcim/tables/racks.py:24 netbox/dcim/tables/racks.py:113 #: netbox/dcim/tables/sites.py:24 netbox/dcim/tables/sites.py:51 @@ -1824,7 +1826,7 @@ msgstr "" #: netbox/circuits/tables/providers.py:82 #: netbox/circuits/tables/providers.py:107 #: netbox/circuits/tables/virtual_circuits.py:68 -#: netbox/dcim/tables/devices.py:1067 netbox/dcim/tables/devicetypes.py:92 +#: netbox/dcim/tables/devices.py:1067 netbox/dcim/tables/devicetypes.py:97 #: netbox/dcim/tables/modules.py:29 netbox/dcim/tables/modules.py:73 #: netbox/dcim/tables/power.py:39 netbox/dcim/tables/power.py:96 #: netbox/dcim/tables/racks.py:84 netbox/dcim/tables/racks.py:144 @@ -2187,7 +2189,7 @@ msgstr "" #: netbox/core/forms/bulk_edit.py:25 netbox/core/forms/filtersets.py:43 #: netbox/core/tables/data.py:26 netbox/dcim/forms/bulk_edit.py:1140 #: netbox/dcim/forms/bulk_edit.py:1418 netbox/dcim/forms/filtersets.py:1375 -#: netbox/dcim/tables/devices.py:566 netbox/dcim/tables/devicetypes.py:226 +#: netbox/dcim/tables/devices.py:566 netbox/dcim/tables/devicetypes.py:231 #: netbox/extras/forms/bulk_edit.py:123 netbox/extras/forms/bulk_edit.py:187 #: netbox/extras/forms/bulk_edit.py:246 netbox/extras/forms/filtersets.py:145 #: netbox/extras/forms/filtersets.py:235 netbox/extras/forms/filtersets.py:300 @@ -2735,7 +2737,7 @@ msgid "Last updated" msgstr "" #: netbox/core/tables/jobs.py:10 netbox/core/tables/tasks.py:76 -#: netbox/dcim/tables/devicetypes.py:164 netbox/extras/tables/tables.py:216 +#: netbox/dcim/tables/devicetypes.py:169 netbox/extras/tables/tables.py:216 #: netbox/extras/tables/tables.py:460 netbox/netbox/tables/tables.py:192 #: netbox/templates/dcim/virtualchassis_edit.html:52 #: netbox/utilities/forms/forms.py:73 netbox/wireless/tables/wirelesslink.py:16 @@ -3867,7 +3869,7 @@ msgstr "" #: netbox/dcim/forms/model_forms.py:498 netbox/dcim/forms/model_forms.py:557 #: netbox/dcim/forms/object_create.py:197 #: netbox/dcim/forms/object_create.py:345 netbox/dcim/tables/devices.py:175 -#: netbox/dcim/tables/devices.py:740 netbox/dcim/tables/devicetypes.py:248 +#: netbox/dcim/tables/devices.py:740 netbox/dcim/tables/devicetypes.py:253 #: netbox/templates/dcim/device.html:43 netbox/templates/dcim/device.html:131 #: netbox/templates/dcim/modulebay.html:38 #: netbox/templates/dcim/virtualchassis.html:66 @@ -3914,8 +3916,8 @@ msgstr "" #: netbox/dcim/forms/model_forms.py:445 netbox/dcim/forms/model_forms.py:1095 #: netbox/dcim/forms/model_forms.py:1564 netbox/dcim/forms/object_import.py:188 #: netbox/dcim/tables/devices.py:107 netbox/dcim/tables/devices.py:182 -#: netbox/dcim/tables/devices.py:969 netbox/dcim/tables/devicetypes.py:80 -#: netbox/dcim/tables/devicetypes.py:310 netbox/dcim/tables/modules.py:20 +#: netbox/dcim/tables/devices.py:969 netbox/dcim/tables/devicetypes.py:85 +#: netbox/dcim/tables/devicetypes.py:315 netbox/dcim/tables/modules.py:20 #: netbox/dcim/tables/modules.py:61 netbox/dcim/tables/racks.py:58 #: netbox/dcim/tables/racks.py:131 netbox/templates/dcim/devicetype.html:14 #: netbox/templates/dcim/inventoryitem.html:48 @@ -3979,7 +3981,7 @@ msgstr "" #: netbox/dcim/forms/filtersets.py:489 netbox/dcim/forms/filtersets.py:595 #: netbox/dcim/forms/filtersets.py:614 netbox/dcim/forms/filtersets.py:675 #: netbox/dcim/forms/model_forms.py:226 netbox/dcim/forms/model_forms.py:306 -#: netbox/dcim/tables/devicetypes.py:106 netbox/dcim/tables/modules.py:35 +#: netbox/dcim/tables/devicetypes.py:111 netbox/dcim/tables/modules.py:35 #: netbox/dcim/tables/racks.py:74 netbox/dcim/tables/racks.py:171 #: netbox/extras/forms/bulk_edit.py:53 netbox/extras/forms/bulk_edit.py:133 #: netbox/extras/forms/bulk_edit.py:183 netbox/extras/forms/bulk_edit.py:288 @@ -4109,12 +4111,12 @@ msgstr "" msgid "U height" msgstr "" -#: netbox/dcim/forms/bulk_edit.py:530 netbox/dcim/tables/devicetypes.py:102 +#: netbox/dcim/forms/bulk_edit.py:530 netbox/dcim/tables/devicetypes.py:107 msgid "Exclude from utilization" msgstr "" #: netbox/dcim/forms/bulk_edit.py:559 netbox/dcim/forms/model_forms.py:377 -#: netbox/dcim/tables/devicetypes.py:77 netbox/templates/dcim/device.html:88 +#: netbox/dcim/tables/devicetypes.py:82 netbox/templates/dcim/device.html:88 #: netbox/templates/dcim/devicebay.html:52 netbox/templates/dcim/module.html:61 msgid "Device Type" msgstr "" @@ -6576,7 +6578,7 @@ msgstr "" #: netbox/dcim/models/devices.py:1439 netbox/extras/models/customfields.py:225 #: netbox/extras/models/models.py:107 netbox/extras/models/models.py:694 -#: netbox/netbox/models/__init__.py:119 +#: netbox/netbox/models/__init__.py:120 msgid "comments" msgstr "" @@ -7062,8 +7064,8 @@ msgid "Power outlets" msgstr "" #: netbox/dcim/tables/devices.py:256 netbox/dcim/tables/devices.py:1112 -#: netbox/dcim/tables/devicetypes.py:128 netbox/dcim/views.py:1142 -#: netbox/dcim/views.py:1386 netbox/dcim/views.py:2137 +#: netbox/dcim/tables/devicetypes.py:133 netbox/dcim/views.py:1143 +#: netbox/dcim/views.py:1387 netbox/dcim/views.py:2138 #: netbox/netbox/navigation/menu.py:94 netbox/netbox/navigation/menu.py:258 #: netbox/templates/dcim/device/base.html:37 #: netbox/templates/dcim/device_list.html:43 @@ -7100,9 +7102,9 @@ msgstr "" msgid "Module Bay" msgstr "" -#: netbox/dcim/tables/devices.py:327 netbox/dcim/tables/devicetypes.py:47 -#: netbox/dcim/tables/devicetypes.py:143 netbox/dcim/views.py:1217 -#: netbox/dcim/views.py:2235 netbox/netbox/navigation/menu.py:103 +#: netbox/dcim/tables/devices.py:327 netbox/dcim/tables/devicetypes.py:52 +#: netbox/dcim/tables/devicetypes.py:148 netbox/dcim/views.py:1218 +#: netbox/dcim/views.py:2236 netbox/netbox/navigation/menu.py:103 #: netbox/templates/dcim/device/base.html:52 #: netbox/templates/dcim/device_list.html:71 #: netbox/templates/dcim/devicetype/base.html:49 @@ -7159,7 +7161,7 @@ msgstr "" msgid "Tunnel" msgstr "" -#: netbox/dcim/tables/devices.py:625 netbox/dcim/tables/devicetypes.py:229 +#: netbox/dcim/tables/devices.py:625 netbox/dcim/tables/devicetypes.py:234 #: netbox/templates/dcim/interface.html:65 msgid "Management Only" msgstr "" @@ -7188,7 +7190,7 @@ msgstr "" msgid "Module Status" msgstr "" -#: netbox/dcim/tables/devices.py:973 netbox/dcim/tables/devicetypes.py:314 +#: netbox/dcim/tables/devices.py:973 netbox/dcim/tables/devicetypes.py:319 #: netbox/templates/dcim/inventoryitem.html:44 msgid "Component" msgstr "" @@ -7197,42 +7199,47 @@ msgstr "" msgid "Items" msgstr "" -#: netbox/dcim/tables/devicetypes.py:37 netbox/netbox/navigation/menu.py:84 +#: netbox/dcim/tables/devicetypes.py:37 netbox/netbox/navigation/menu.py:60 +#: netbox/netbox/navigation/menu.py:62 +msgid "Rack Types" +msgstr "" + +#: netbox/dcim/tables/devicetypes.py:42 netbox/netbox/navigation/menu.py:84 #: netbox/netbox/navigation/menu.py:86 msgid "Device Types" msgstr "" -#: netbox/dcim/tables/devicetypes.py:42 netbox/netbox/navigation/menu.py:87 +#: netbox/dcim/tables/devicetypes.py:47 netbox/netbox/navigation/menu.py:87 msgid "Module Types" msgstr "" -#: netbox/dcim/tables/devicetypes.py:52 netbox/extras/forms/filtersets.py:378 +#: netbox/dcim/tables/devicetypes.py:57 netbox/extras/forms/filtersets.py:378 #: netbox/extras/forms/model_forms.py:537 netbox/extras/tables/tables.py:540 #: netbox/netbox/navigation/menu.py:78 msgid "Platforms" msgstr "" -#: netbox/dcim/tables/devicetypes.py:84 +#: netbox/dcim/tables/devicetypes.py:89 #: netbox/templates/dcim/devicetype.html:29 msgid "Default Platform" msgstr "" -#: netbox/dcim/tables/devicetypes.py:88 +#: netbox/dcim/tables/devicetypes.py:93 #: netbox/templates/dcim/devicetype.html:45 msgid "Full Depth" msgstr "" -#: netbox/dcim/tables/devicetypes.py:98 +#: netbox/dcim/tables/devicetypes.py:103 msgid "U Height" msgstr "" -#: netbox/dcim/tables/devicetypes.py:113 netbox/dcim/tables/modules.py:26 +#: netbox/dcim/tables/devicetypes.py:118 netbox/dcim/tables/modules.py:26 #: netbox/dcim/tables/racks.py:89 msgid "Instances" msgstr "" -#: netbox/dcim/tables/devicetypes.py:116 netbox/dcim/views.py:1082 -#: netbox/dcim/views.py:1326 netbox/dcim/views.py:2073 +#: netbox/dcim/tables/devicetypes.py:121 netbox/dcim/views.py:1083 +#: netbox/dcim/views.py:1327 netbox/dcim/views.py:2074 #: netbox/netbox/navigation/menu.py:97 #: netbox/templates/dcim/device/base.html:25 #: netbox/templates/dcim/device_list.html:15 @@ -7242,8 +7249,8 @@ msgstr "" msgid "Console Ports" msgstr "" -#: netbox/dcim/tables/devicetypes.py:119 netbox/dcim/views.py:1097 -#: netbox/dcim/views.py:1341 netbox/dcim/views.py:2089 +#: netbox/dcim/tables/devicetypes.py:124 netbox/dcim/views.py:1098 +#: netbox/dcim/views.py:1342 netbox/dcim/views.py:2090 #: netbox/netbox/navigation/menu.py:98 #: netbox/templates/dcim/device/base.html:28 #: netbox/templates/dcim/device_list.html:22 @@ -7253,8 +7260,8 @@ msgstr "" msgid "Console Server Ports" msgstr "" -#: netbox/dcim/tables/devicetypes.py:122 netbox/dcim/views.py:1112 -#: netbox/dcim/views.py:1356 netbox/dcim/views.py:2105 +#: netbox/dcim/tables/devicetypes.py:127 netbox/dcim/views.py:1113 +#: netbox/dcim/views.py:1357 netbox/dcim/views.py:2106 #: netbox/netbox/navigation/menu.py:99 #: netbox/templates/dcim/device/base.html:31 #: netbox/templates/dcim/device_list.html:29 @@ -7264,8 +7271,8 @@ msgstr "" msgid "Power Ports" msgstr "" -#: netbox/dcim/tables/devicetypes.py:125 netbox/dcim/views.py:1127 -#: netbox/dcim/views.py:1371 netbox/dcim/views.py:2121 +#: netbox/dcim/tables/devicetypes.py:130 netbox/dcim/views.py:1128 +#: netbox/dcim/views.py:1372 netbox/dcim/views.py:2122 #: netbox/netbox/navigation/menu.py:100 #: netbox/templates/dcim/device/base.html:34 #: netbox/templates/dcim/device_list.html:36 @@ -7275,8 +7282,8 @@ msgstr "" msgid "Power Outlets" msgstr "" -#: netbox/dcim/tables/devicetypes.py:131 netbox/dcim/views.py:1157 -#: netbox/dcim/views.py:1401 netbox/dcim/views.py:2159 +#: netbox/dcim/tables/devicetypes.py:136 netbox/dcim/views.py:1158 +#: netbox/dcim/views.py:1402 netbox/dcim/views.py:2160 #: netbox/netbox/navigation/menu.py:95 #: netbox/templates/dcim/device/base.html:40 #: netbox/templates/dcim/devicetype/base.html:37 @@ -7285,8 +7292,8 @@ msgstr "" msgid "Front Ports" msgstr "" -#: netbox/dcim/tables/devicetypes.py:134 netbox/dcim/views.py:1172 -#: netbox/dcim/views.py:1416 netbox/dcim/views.py:2175 +#: netbox/dcim/tables/devicetypes.py:139 netbox/dcim/views.py:1173 +#: netbox/dcim/views.py:1417 netbox/dcim/views.py:2176 #: netbox/netbox/navigation/menu.py:96 #: netbox/templates/dcim/device/base.html:43 #: netbox/templates/dcim/device_list.html:50 @@ -7296,16 +7303,16 @@ msgstr "" msgid "Rear Ports" msgstr "" -#: netbox/dcim/tables/devicetypes.py:137 netbox/dcim/views.py:1202 -#: netbox/dcim/views.py:2215 netbox/netbox/navigation/menu.py:102 +#: netbox/dcim/tables/devicetypes.py:142 netbox/dcim/views.py:1203 +#: netbox/dcim/views.py:2216 netbox/netbox/navigation/menu.py:102 #: netbox/templates/dcim/device/base.html:49 #: netbox/templates/dcim/device_list.html:57 #: netbox/templates/dcim/devicetype/base.html:46 msgid "Device Bays" msgstr "" -#: netbox/dcim/tables/devicetypes.py:140 netbox/dcim/views.py:1187 -#: netbox/dcim/views.py:1431 netbox/dcim/views.py:2195 +#: netbox/dcim/tables/devicetypes.py:145 netbox/dcim/views.py:1188 +#: netbox/dcim/views.py:1432 netbox/dcim/views.py:2196 #: netbox/netbox/navigation/menu.py:101 #: netbox/templates/dcim/device/base.html:46 #: netbox/templates/dcim/device_list.html:64 @@ -7384,48 +7391,48 @@ msgstr "" msgid "Non-Racked Devices" msgstr "" -#: netbox/dcim/views.py:2248 netbox/extras/forms/model_forms.py:577 +#: netbox/dcim/views.py:2249 netbox/extras/forms/model_forms.py:577 #: netbox/templates/extras/configcontext.html:10 #: netbox/virtualization/forms/model_forms.py:232 #: netbox/virtualization/views.py:422 msgid "Config Context" msgstr "" -#: netbox/dcim/views.py:2258 netbox/virtualization/views.py:432 +#: netbox/dcim/views.py:2259 netbox/virtualization/views.py:432 msgid "Render Config" msgstr "" -#: netbox/dcim/views.py:2271 netbox/extras/tables/tables.py:550 +#: netbox/dcim/views.py:2272 netbox/extras/tables/tables.py:550 #: netbox/netbox/navigation/menu.py:255 netbox/netbox/navigation/menu.py:257 #: netbox/virtualization/views.py:190 msgid "Virtual Machines" msgstr "" -#: netbox/dcim/views.py:3104 +#: netbox/dcim/views.py:3105 #, python-brace-format msgid "Installed device {device} in bay {device_bay}." msgstr "" -#: netbox/dcim/views.py:3145 +#: netbox/dcim/views.py:3146 #, python-brace-format msgid "Removed device {device} from bay {device_bay}." msgstr "" -#: netbox/dcim/views.py:3261 netbox/ipam/tables/ip.py:180 +#: netbox/dcim/views.py:3262 netbox/ipam/tables/ip.py:180 msgid "Children" msgstr "" -#: netbox/dcim/views.py:3728 +#: netbox/dcim/views.py:3729 #, python-brace-format msgid "Added member {device}" msgstr "" -#: netbox/dcim/views.py:3777 +#: netbox/dcim/views.py:3778 #, python-brace-format msgid "Unable to remove master device {device} from the virtual chassis." msgstr "" -#: netbox/dcim/views.py:3790 +#: netbox/dcim/views.py:3791 #, python-brace-format msgid "Removed {device} from virtual chassis {chassis}" msgstr "" @@ -11139,10 +11146,6 @@ msgstr "" msgid "Elevations" msgstr "" -#: netbox/netbox/navigation/menu.py:60 netbox/netbox/navigation/menu.py:62 -msgid "Rack Types" -msgstr "" - #: netbox/netbox/navigation/menu.py:76 msgid "Modules" msgstr "" From 2a44affd03ae13daeaf3d22ffcadea87b653d95d Mon Sep 17 00:00:00 2001 From: Jason Novinger Date: Thu, 20 Feb 2025 09:01:04 -0600 Subject: [PATCH 096/152] Fixes #18594: asn_count sort in Sites list (#18634) * Fixes #18594: asn_count sort in Sites list * Fixes similar issue in `circuits.views.ProviderListView` Thanks @bctiemann for point this out! --- netbox/circuits/tables/providers.py | 1 - netbox/circuits/views.py | 4 +++- netbox/dcim/tables/sites.py | 1 - netbox/dcim/views.py | 3 ++- 4 files changed, 5 insertions(+), 4 deletions(-) diff --git a/netbox/circuits/tables/providers.py b/netbox/circuits/tables/providers.py index d70c77e9c..c7eba9012 100644 --- a/netbox/circuits/tables/providers.py +++ b/netbox/circuits/tables/providers.py @@ -33,7 +33,6 @@ class ProviderTable(ContactsColumnMixin, NetBoxTable): verbose_name=_('ASNs') ) asn_count = columns.LinkedCountColumn( - accessor=tables.A('asns__count'), viewname='ipam:asn_list', url_params={'provider_id': 'pk'}, verbose_name=_('ASN Count') diff --git a/netbox/circuits/views.py b/netbox/circuits/views.py index 3bd81c33a..07c1113bd 100644 --- a/netbox/circuits/views.py +++ b/netbox/circuits/views.py @@ -4,6 +4,7 @@ from django.shortcuts import get_object_or_404, redirect, render from django.utils.translation import gettext_lazy as _ from dcim.views import PathTraceView +from ipam.models import ASN from netbox.views import generic from tenancy.views import ObjectContactsView from utilities.forms import ConfirmationForm @@ -20,7 +21,8 @@ from .models import * @register_model_view(Provider, 'list', path='', detail=False) class ProviderListView(generic.ObjectListView): queryset = Provider.objects.annotate( - count_circuits=count_related(Circuit, 'provider') + count_circuits=count_related(Circuit, 'provider'), + asn_count=count_related(ASN, 'providers'), ) filterset = filtersets.ProviderFilterSet filterset_form = forms.ProviderFilterForm diff --git a/netbox/dcim/tables/sites.py b/netbox/dcim/tables/sites.py index 77844f086..e8cb9140e 100644 --- a/netbox/dcim/tables/sites.py +++ b/netbox/dcim/tables/sites.py @@ -94,7 +94,6 @@ class SiteTable(TenancyColumnsMixin, ContactsColumnMixin, NetBoxTable): verbose_name=_('ASNs') ) asn_count = columns.LinkedCountColumn( - accessor=tables.A('asns__count'), viewname='ipam:asn_list', url_params={'site_id': 'pk'}, verbose_name=_('ASN Count') diff --git a/netbox/dcim/views.py b/netbox/dcim/views.py index 583b89f1a..60de8c355 100644 --- a/netbox/dcim/views.py +++ b/netbox/dcim/views.py @@ -422,7 +422,8 @@ class SiteGroupContactsView(ObjectContactsView): @register_model_view(Site, 'list', path='', detail=False) class SiteListView(generic.ObjectListView): queryset = Site.objects.annotate( - device_count=count_related(Device, 'site') + device_count=count_related(Device, 'site'), + asn_count=count_related(ASN, 'sites') ) filterset = filtersets.SiteFilterSet filterset_form = forms.SiteFilterForm From b5bc0bad3858d51912bd466cc4d4e897811cf952 Mon Sep 17 00:00:00 2001 From: Alexander Haase Date: Tue, 18 Feb 2025 21:48:12 +0100 Subject: [PATCH 097/152] Cover multitable inheritance in serialization During serialization, custom fields may be available to a model due to multi-table inheritance, but might not be available in serialized data because only direct fields of the model are covered. Now this attribute is only used if available in serialized data. Models using multi-table inheritance must modify their serialize_object() method to cover parent serialization. --- netbox/utilities/serialization.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/netbox/utilities/serialization.py b/netbox/utilities/serialization.py index af1169e97..f402a30eb 100644 --- a/netbox/utilities/serialization.py +++ b/netbox/utilities/serialization.py @@ -29,7 +29,7 @@ def serialize_object(obj, resolve_tags=True, extra=None, exclude=None): exclude = exclude or [] # Include custom_field_data as "custom_fields" - if hasattr(obj, 'custom_field_data'): + if 'custom_field_data' in data: data['custom_fields'] = data.pop('custom_field_data') # Resolve any assigned tags to their names. Check for tags cached on the instance; From ed79e3bbf4617ec0764c6e7bd1f289d7abb22106 Mon Sep 17 00:00:00 2001 From: Jason Novinger Date: Tue, 18 Feb 2025 10:03:49 -0600 Subject: [PATCH 098/152] Fixes #18619: shift-select selects hidden items This also fixes the inverse, when a range is unselected via shift-click, previously checked checkboxes that are hidden are not changed. --- netbox/project-static/dist/netbox.js | Bin 391058 -> 391196 bytes netbox/project-static/dist/netbox.js.map | Bin 525511 -> 525648 bytes .../src/buttons/selectMultiple.ts | 8 ++++++-- 3 files changed, 6 insertions(+), 2 deletions(-) diff --git a/netbox/project-static/dist/netbox.js b/netbox/project-static/dist/netbox.js index 7e516f7f4859ffcafee6698af56ca52c89acb58c..bb402ec3321ec44f949a3f8bf9b7518cd03ead91 100644 GIT binary patch delta 249 zcmbRAUVP36@rD-07N#xC@$J!NiA4%UnL7EI);Xyq3VE5fiiXx{`9&HaUU8;Eewso_ zre-yWmzZf=oN1kzrU6uBYpZCWrlz4$lxdrosh6CSUz}Q8qM=k$q@<~-Xq#7>lcT0q zH2uIqCNa$v-Msv~R3*)t8V!)rjMU`p)D+uHI8#$orx;{l>huro%!=|l8u@t4%mW+scnAYI$%3LOH^%(4msr38V1z8en_cvL36}NcUjOUG0O}j;F+Ll01Bl4L+uuS zp|ivy delta 357 zcmcc6rEt7cp`nGbg{g&k3(K>7CTG9tzw=pS6Ww&&9UT*OoE@FBoOL`M9ev$F0;w)Q z(znP7NP2m?=y*Fi8aM$-XHzFvi26WB$It)}GuKHc*wMYh*%zcJ(gP$^>;y8dz!}8$ zbe+DjfW^SU-O;%Mn_hpQna)7vu8v^U5L5g>?0m2(IS^C4!KO^_EM!q*44S^7kVS$w z7^KKo2WWt?li&2Kg)9zYfe@i!N9PcrxF^VKZjMpYwToD64ZzA%!KPU_>Et>CUGA*o z>gZhJ76P#i91!_VVDA?@`A?rw#8Si;1(5?PbS-d-oGww!V!>$G9$3r*#H>Kfwmq;SMEXygC@ diff --git a/netbox/project-static/src/buttons/selectMultiple.ts b/netbox/project-static/src/buttons/selectMultiple.ts index d8bad3105..5695b6c24 100644 --- a/netbox/project-static/src/buttons/selectMultiple.ts +++ b/netbox/project-static/src/buttons/selectMultiple.ts @@ -43,7 +43,9 @@ function toggleCheckboxRange( const typedElement = element as HTMLInputElement; //Change loop's current checkbox state to eventTargetElement checkbox state if (changePkCheckboxState === true) { - typedElement.checked = eventTargetElement.checked; + if (!typedElement.closest('tr')?.classList.contains('d-none')) { + typedElement.checked = eventTargetElement.checked; + } } //The previously clicked checkbox was above the shift clicked checkbox if (element === previousStateElement) { @@ -52,7 +54,9 @@ function toggleCheckboxRange( return; } changePkCheckboxState = true; - typedElement.checked = eventTargetElement.checked; + if (!typedElement.closest('tr')?.classList.contains('d-none')) { + typedElement.checked = eventTargetElement.checked; + } } //The previously clicked checkbox was below the shift clicked checkbox if (element === eventTargetElement) { From bcd974210daea6fad43c837a35d8331cf5e2ab20 Mon Sep 17 00:00:00 2001 From: Jeremy Stretch Date: Thu, 20 Feb 2025 12:13:08 -0500 Subject: [PATCH 099/152] Update Transifex resource slug --- .tx/config | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.tx/config b/.tx/config index 342331d4e..b0562b978 100755 --- a/.tx/config +++ b/.tx/config @@ -1,7 +1,7 @@ [main] host = https://app.transifex.com -[o:netbox-community:p:netbox:r:9cbf4fcf95b3d92e4ebbf1a5e5d1caee] +[o:netbox-community:p:netbox:r:034999968a7366ba27a8bdf1ab63bf42] file_filter = netbox/translations//LC_MESSAGES/django.po source_file = netbox/translations/en/LC_MESSAGES/django.po type = PO From 63b7145baaaf9e7b17d65796c42d1dddd5851096 Mon Sep 17 00:00:00 2001 From: github-actions <41898282+github-actions[bot]@users.noreply.github.com> Date: Fri, 21 Feb 2025 05:02:07 +0000 Subject: [PATCH 100/152] Update source translation strings --- netbox/translations/en/LC_MESSAGES/django.po | 104 +++++++++---------- 1 file changed, 52 insertions(+), 52 deletions(-) diff --git a/netbox/translations/en/LC_MESSAGES/django.po b/netbox/translations/en/LC_MESSAGES/django.po index 55d263183..e76dac85c 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: 2025-02-19 05:01+0000\n" +"POT-Creation-Date: 2025-02-21 05:01+0000\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -223,7 +223,7 @@ msgstr "" #: netbox/dcim/forms/object_create.py:383 netbox/dcim/tables/devices.py:163 #: netbox/dcim/tables/power.py:26 netbox/dcim/tables/power.py:93 #: netbox/dcim/tables/racks.py:121 netbox/dcim/tables/racks.py:206 -#: netbox/dcim/tables/sites.py:134 netbox/extras/filtersets.py:525 +#: netbox/dcim/tables/sites.py:133 netbox/extras/filtersets.py:525 #: netbox/ipam/forms/bulk_edit.py:468 netbox/ipam/forms/bulk_import.py:452 #: netbox/ipam/forms/filtersets.py:155 netbox/ipam/forms/filtersets.py:229 #: netbox/ipam/forms/filtersets.py:435 netbox/ipam/forms/filtersets.py:530 @@ -613,8 +613,8 @@ msgstr "" #: netbox/circuits/forms/model_forms.py:110 #: netbox/circuits/tables/circuits.py:57 netbox/circuits/tables/circuits.py:112 #: netbox/circuits/tables/circuits.py:196 -#: netbox/circuits/tables/providers.py:72 -#: netbox/circuits/tables/providers.py:103 +#: netbox/circuits/tables/providers.py:71 +#: netbox/circuits/tables/providers.py:102 #: netbox/circuits/tables/virtual_circuits.py:46 #: netbox/circuits/tables/virtual_circuits.py:93 #: netbox/templates/circuits/circuit.html:18 @@ -759,7 +759,7 @@ msgstr "" #: netbox/dcim/tables/devices.py:848 netbox/dcim/tables/devices.py:982 #: netbox/dcim/tables/devices.py:1094 netbox/dcim/tables/modules.py:70 #: netbox/dcim/tables/power.py:74 netbox/dcim/tables/racks.py:125 -#: netbox/dcim/tables/sites.py:82 netbox/dcim/tables/sites.py:138 +#: netbox/dcim/tables/sites.py:82 netbox/dcim/tables/sites.py:137 #: netbox/ipam/forms/bulk_edit.py:240 netbox/ipam/forms/bulk_edit.py:290 #: netbox/ipam/forms/bulk_edit.py:338 netbox/ipam/forms/bulk_edit.py:490 #: netbox/ipam/forms/bulk_import.py:188 netbox/ipam/forms/bulk_import.py:256 @@ -1317,7 +1317,7 @@ msgid "Site group" msgstr "" #: netbox/circuits/forms/filtersets.py:81 netbox/circuits/tables/circuits.py:62 -#: netbox/circuits/tables/providers.py:66 +#: netbox/circuits/tables/providers.py:65 #: netbox/circuits/tables/virtual_circuits.py:55 #: netbox/circuits/tables/virtual_circuits.py:103 #: netbox/templates/circuits/circuit.html:22 @@ -1668,8 +1668,8 @@ msgstr "" #: netbox/circuits/tables/circuits.py:30 netbox/circuits/tables/circuits.py:168 #: netbox/circuits/tables/providers.py:18 -#: netbox/circuits/tables/providers.py:69 -#: netbox/circuits/tables/providers.py:99 +#: netbox/circuits/tables/providers.py:68 +#: netbox/circuits/tables/providers.py:98 #: netbox/circuits/tables/virtual_circuits.py:18 netbox/core/tables/data.py:16 #: netbox/core/tables/jobs.py:14 netbox/core/tables/plugins.py:44 #: netbox/core/tables/tasks.py:11 netbox/core/tables/tasks.py:115 @@ -1687,7 +1687,7 @@ msgstr "" #: netbox/dcim/tables/power.py:22 netbox/dcim/tables/power.py:62 #: netbox/dcim/tables/racks.py:24 netbox/dcim/tables/racks.py:113 #: netbox/dcim/tables/sites.py:24 netbox/dcim/tables/sites.py:51 -#: netbox/dcim/tables/sites.py:78 netbox/dcim/tables/sites.py:130 +#: netbox/dcim/tables/sites.py:78 netbox/dcim/tables/sites.py:129 #: netbox/extras/forms/filtersets.py:218 netbox/extras/tables/tables.py:58 #: netbox/extras/tables/tables.py:122 netbox/extras/tables/tables.py:155 #: netbox/extras/tables/tables.py:180 netbox/extras/tables/tables.py:246 @@ -1789,8 +1789,8 @@ msgid "Name" msgstr "" #: netbox/circuits/tables/circuits.py:39 netbox/circuits/tables/circuits.py:174 -#: netbox/circuits/tables/providers.py:45 -#: netbox/circuits/tables/providers.py:79 +#: netbox/circuits/tables/providers.py:44 +#: netbox/circuits/tables/providers.py:78 #: netbox/circuits/tables/virtual_circuits.py:27 #: netbox/netbox/navigation/menu.py:274 netbox/netbox/navigation/menu.py:278 #: netbox/netbox/navigation/menu.py:280 @@ -1822,15 +1822,15 @@ msgstr "" msgid "Commit Rate" msgstr "" -#: netbox/circuits/tables/circuits.py:84 netbox/circuits/tables/providers.py:48 -#: netbox/circuits/tables/providers.py:82 -#: netbox/circuits/tables/providers.py:107 +#: netbox/circuits/tables/circuits.py:84 netbox/circuits/tables/providers.py:47 +#: netbox/circuits/tables/providers.py:81 +#: netbox/circuits/tables/providers.py:106 #: netbox/circuits/tables/virtual_circuits.py:68 #: netbox/dcim/tables/devices.py:1067 netbox/dcim/tables/devicetypes.py:97 #: netbox/dcim/tables/modules.py:29 netbox/dcim/tables/modules.py:73 #: netbox/dcim/tables/power.py:39 netbox/dcim/tables/power.py:96 #: netbox/dcim/tables/racks.py:84 netbox/dcim/tables/racks.py:144 -#: netbox/dcim/tables/racks.py:224 netbox/dcim/tables/sites.py:108 +#: netbox/dcim/tables/racks.py:224 netbox/dcim/tables/sites.py:107 #: netbox/extras/tables/tables.py:582 netbox/ipam/tables/asn.py:69 #: netbox/ipam/tables/fhrp.py:34 netbox/ipam/tables/ip.py:82 #: netbox/ipam/tables/ip.py:226 netbox/ipam/tables/ip.py:281 @@ -1891,7 +1891,7 @@ msgstr "" msgid "Account Count" msgstr "" -#: netbox/circuits/tables/providers.py:39 netbox/dcim/tables/sites.py:100 +#: netbox/circuits/tables/providers.py:38 netbox/dcim/tables/sites.py:99 msgid "ASN Count" msgstr "" @@ -1973,12 +1973,12 @@ msgstr "" msgid "Device" msgstr "" -#: netbox/circuits/views.py:353 +#: netbox/circuits/views.py:355 #, python-brace-format msgid "No terminations have been defined for circuit {circuit}." msgstr "" -#: netbox/circuits/views.py:402 +#: netbox/circuits/views.py:404 #, python-brace-format msgid "Swapped terminations for circuit {circuit}." msgstr "" @@ -6984,8 +6984,8 @@ msgid "Reachable" msgstr "" #: netbox/dcim/tables/devices.py:69 netbox/dcim/tables/devices.py:117 -#: netbox/dcim/tables/racks.py:149 netbox/dcim/tables/sites.py:105 -#: netbox/dcim/tables/sites.py:148 netbox/extras/tables/tables.py:545 +#: netbox/dcim/tables/racks.py:149 netbox/dcim/tables/sites.py:104 +#: netbox/dcim/tables/sites.py:147 netbox/extras/tables/tables.py:545 #: netbox/netbox/navigation/menu.py:69 netbox/netbox/navigation/menu.py:73 #: netbox/netbox/navigation/menu.py:75 #: netbox/virtualization/forms/model_forms.py:122 @@ -7064,8 +7064,8 @@ msgid "Power outlets" msgstr "" #: netbox/dcim/tables/devices.py:256 netbox/dcim/tables/devices.py:1112 -#: netbox/dcim/tables/devicetypes.py:133 netbox/dcim/views.py:1143 -#: netbox/dcim/views.py:1387 netbox/dcim/views.py:2138 +#: netbox/dcim/tables/devicetypes.py:133 netbox/dcim/views.py:1144 +#: netbox/dcim/views.py:1388 netbox/dcim/views.py:2139 #: netbox/netbox/navigation/menu.py:94 netbox/netbox/navigation/menu.py:258 #: netbox/templates/dcim/device/base.html:37 #: netbox/templates/dcim/device_list.html:43 @@ -7103,8 +7103,8 @@ msgid "Module Bay" msgstr "" #: netbox/dcim/tables/devices.py:327 netbox/dcim/tables/devicetypes.py:52 -#: netbox/dcim/tables/devicetypes.py:148 netbox/dcim/views.py:1218 -#: netbox/dcim/views.py:2236 netbox/netbox/navigation/menu.py:103 +#: netbox/dcim/tables/devicetypes.py:148 netbox/dcim/views.py:1219 +#: netbox/dcim/views.py:2237 netbox/netbox/navigation/menu.py:103 #: netbox/templates/dcim/device/base.html:52 #: netbox/templates/dcim/device_list.html:71 #: netbox/templates/dcim/devicetype/base.html:49 @@ -7238,8 +7238,8 @@ msgstr "" msgid "Instances" msgstr "" -#: netbox/dcim/tables/devicetypes.py:121 netbox/dcim/views.py:1083 -#: netbox/dcim/views.py:1327 netbox/dcim/views.py:2074 +#: netbox/dcim/tables/devicetypes.py:121 netbox/dcim/views.py:1084 +#: netbox/dcim/views.py:1328 netbox/dcim/views.py:2075 #: netbox/netbox/navigation/menu.py:97 #: netbox/templates/dcim/device/base.html:25 #: netbox/templates/dcim/device_list.html:15 @@ -7249,8 +7249,8 @@ msgstr "" msgid "Console Ports" msgstr "" -#: netbox/dcim/tables/devicetypes.py:124 netbox/dcim/views.py:1098 -#: netbox/dcim/views.py:1342 netbox/dcim/views.py:2090 +#: netbox/dcim/tables/devicetypes.py:124 netbox/dcim/views.py:1099 +#: netbox/dcim/views.py:1343 netbox/dcim/views.py:2091 #: netbox/netbox/navigation/menu.py:98 #: netbox/templates/dcim/device/base.html:28 #: netbox/templates/dcim/device_list.html:22 @@ -7260,8 +7260,8 @@ msgstr "" msgid "Console Server Ports" msgstr "" -#: netbox/dcim/tables/devicetypes.py:127 netbox/dcim/views.py:1113 -#: netbox/dcim/views.py:1357 netbox/dcim/views.py:2106 +#: netbox/dcim/tables/devicetypes.py:127 netbox/dcim/views.py:1114 +#: netbox/dcim/views.py:1358 netbox/dcim/views.py:2107 #: netbox/netbox/navigation/menu.py:99 #: netbox/templates/dcim/device/base.html:31 #: netbox/templates/dcim/device_list.html:29 @@ -7271,8 +7271,8 @@ msgstr "" msgid "Power Ports" msgstr "" -#: netbox/dcim/tables/devicetypes.py:130 netbox/dcim/views.py:1128 -#: netbox/dcim/views.py:1372 netbox/dcim/views.py:2122 +#: netbox/dcim/tables/devicetypes.py:130 netbox/dcim/views.py:1129 +#: netbox/dcim/views.py:1373 netbox/dcim/views.py:2123 #: netbox/netbox/navigation/menu.py:100 #: netbox/templates/dcim/device/base.html:34 #: netbox/templates/dcim/device_list.html:36 @@ -7282,8 +7282,8 @@ msgstr "" msgid "Power Outlets" msgstr "" -#: netbox/dcim/tables/devicetypes.py:136 netbox/dcim/views.py:1158 -#: netbox/dcim/views.py:1402 netbox/dcim/views.py:2160 +#: netbox/dcim/tables/devicetypes.py:136 netbox/dcim/views.py:1159 +#: netbox/dcim/views.py:1403 netbox/dcim/views.py:2161 #: netbox/netbox/navigation/menu.py:95 #: netbox/templates/dcim/device/base.html:40 #: netbox/templates/dcim/devicetype/base.html:37 @@ -7292,8 +7292,8 @@ msgstr "" msgid "Front Ports" msgstr "" -#: netbox/dcim/tables/devicetypes.py:139 netbox/dcim/views.py:1173 -#: netbox/dcim/views.py:1417 netbox/dcim/views.py:2176 +#: netbox/dcim/tables/devicetypes.py:139 netbox/dcim/views.py:1174 +#: netbox/dcim/views.py:1418 netbox/dcim/views.py:2177 #: netbox/netbox/navigation/menu.py:96 #: netbox/templates/dcim/device/base.html:43 #: netbox/templates/dcim/device_list.html:50 @@ -7303,16 +7303,16 @@ msgstr "" msgid "Rear Ports" msgstr "" -#: netbox/dcim/tables/devicetypes.py:142 netbox/dcim/views.py:1203 -#: netbox/dcim/views.py:2216 netbox/netbox/navigation/menu.py:102 +#: netbox/dcim/tables/devicetypes.py:142 netbox/dcim/views.py:1204 +#: netbox/dcim/views.py:2217 netbox/netbox/navigation/menu.py:102 #: netbox/templates/dcim/device/base.html:49 #: netbox/templates/dcim/device_list.html:57 #: netbox/templates/dcim/devicetype/base.html:46 msgid "Device Bays" msgstr "" -#: netbox/dcim/tables/devicetypes.py:145 netbox/dcim/views.py:1188 -#: netbox/dcim/views.py:1432 netbox/dcim/views.py:2196 +#: netbox/dcim/tables/devicetypes.py:145 netbox/dcim/views.py:1189 +#: netbox/dcim/views.py:1433 netbox/dcim/views.py:2197 #: netbox/netbox/navigation/menu.py:101 #: netbox/templates/dcim/device/base.html:46 #: netbox/templates/dcim/device_list.html:64 @@ -7335,7 +7335,7 @@ msgstr "" msgid "Available Power (VA)" msgstr "" -#: netbox/dcim/tables/racks.py:30 netbox/dcim/tables/sites.py:143 +#: netbox/dcim/tables/racks.py:30 netbox/dcim/tables/sites.py:142 #: netbox/netbox/navigation/menu.py:43 netbox/netbox/navigation/menu.py:47 #: netbox/netbox/navigation/menu.py:49 msgid "Racks" @@ -7382,57 +7382,57 @@ msgstr "" msgid "Disconnected {count} {type}" msgstr "" -#: netbox/dcim/views.py:824 netbox/netbox/navigation/menu.py:51 +#: netbox/dcim/views.py:825 netbox/netbox/navigation/menu.py:51 msgid "Reservations" msgstr "" -#: netbox/dcim/views.py:843 netbox/templates/dcim/location.html:90 +#: netbox/dcim/views.py:844 netbox/templates/dcim/location.html:90 #: netbox/templates/dcim/site.html:140 msgid "Non-Racked Devices" msgstr "" -#: netbox/dcim/views.py:2249 netbox/extras/forms/model_forms.py:577 +#: netbox/dcim/views.py:2250 netbox/extras/forms/model_forms.py:577 #: netbox/templates/extras/configcontext.html:10 #: netbox/virtualization/forms/model_forms.py:232 #: netbox/virtualization/views.py:422 msgid "Config Context" msgstr "" -#: netbox/dcim/views.py:2259 netbox/virtualization/views.py:432 +#: netbox/dcim/views.py:2260 netbox/virtualization/views.py:432 msgid "Render Config" msgstr "" -#: netbox/dcim/views.py:2272 netbox/extras/tables/tables.py:550 +#: netbox/dcim/views.py:2273 netbox/extras/tables/tables.py:550 #: netbox/netbox/navigation/menu.py:255 netbox/netbox/navigation/menu.py:257 #: netbox/virtualization/views.py:190 msgid "Virtual Machines" msgstr "" -#: netbox/dcim/views.py:3105 +#: netbox/dcim/views.py:3106 #, python-brace-format msgid "Installed device {device} in bay {device_bay}." msgstr "" -#: netbox/dcim/views.py:3146 +#: netbox/dcim/views.py:3147 #, python-brace-format msgid "Removed device {device} from bay {device_bay}." msgstr "" -#: netbox/dcim/views.py:3262 netbox/ipam/tables/ip.py:180 +#: netbox/dcim/views.py:3263 netbox/ipam/tables/ip.py:180 msgid "Children" msgstr "" -#: netbox/dcim/views.py:3729 +#: netbox/dcim/views.py:3730 #, python-brace-format msgid "Added member {device}" msgstr "" -#: netbox/dcim/views.py:3778 +#: netbox/dcim/views.py:3779 #, python-brace-format msgid "Unable to remove master device {device} from the virtual chassis." msgstr "" -#: netbox/dcim/views.py:3791 +#: netbox/dcim/views.py:3792 #, python-brace-format msgid "Removed {device} from virtual chassis {chassis}" msgstr "" From 9c1358e6e7dbf892036a8a58fc1e10ac7a09097f Mon Sep 17 00:00:00 2001 From: mr1716 Date: Fri, 21 Feb 2025 06:29:15 -0500 Subject: [PATCH 101/152] #18698 Correct REST Wikipedia URL In Documentation --- docs/integrations/rest-api.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/integrations/rest-api.md b/docs/integrations/rest-api.md index 215b561a7..e0d2c445f 100644 --- a/docs/integrations/rest-api.md +++ b/docs/integrations/rest-api.md @@ -2,7 +2,7 @@ ## What is a REST API? -REST stands for [representational state transfer](https://en.wikipedia.org/wiki/Representational_state_transfer). It's a particular type of API which employs HTTP requests and [JavaScript Object Notation (JSON)](https://www.json.org/) to facilitate create, retrieve, update, and delete (CRUD) operations on objects within an application. Each type of operation is associated with a particular HTTP verb: +REST stands for [representational state transfer](https://en.wikipedia.org/wiki/REST). It's a particular type of API which employs HTTP requests and [JavaScript Object Notation (JSON)](https://www.json.org/) to facilitate create, retrieve, update, and delete (CRUD) operations on objects within an application. Each type of operation is associated with a particular HTTP verb: * `GET`: Retrieve an object or list of objects * `POST`: Create an object From fbaa82df7b92fb2743dcae38872bc7ec45984a89 Mon Sep 17 00:00:00 2001 From: Jeremy Stretch Date: Thu, 20 Feb 2025 10:54:36 -0500 Subject: [PATCH 102/152] Fixes #18674: Fix form reset when selecting a value from a speed selection dropdown --- netbox/project-static/dist/netbox.js | Bin 391196 -> 391201 bytes netbox/project-static/dist/netbox.js.map | Bin 525648 -> 525672 bytes netbox/project-static/package.json | 3 ++- netbox/project-static/src/htmx.ts | 4 +++- 4 files changed, 5 insertions(+), 2 deletions(-) diff --git a/netbox/project-static/dist/netbox.js b/netbox/project-static/dist/netbox.js index bb402ec3321ec44f949a3f8bf9b7518cd03ead91..6650f0fab4a9f2f68e0feb7adbbba5879c6f261c 100644 GIT binary patch delta 6266 zcmZ8l33wF8vHq%iMgk;Gfi94c7Fq1VAPxfti52KZLKixbguGhq%xVYr5W73Ng|QRg zF-Jrw@_Ya$zA!#z+?e<_F@E;5jd>U+V0^uVIKu#kaU^LhNX)9K*ccBKk3hN|Gs3a63fa(ca1O;^IYEi*I2Yt_w1 zMblftdaEr*cUwb-%^e6@yPUzau$~rhr-cmaZ?pM3|84Bh47L=!L#-^2xs0LbVCvAX z*=^t)%H>`#hMweiL&oqTDH)^+)$Sdxm6yIY%4=9@Vx?(l`{4!Snp}3fCD6W3bA>I- zn}&}cE}Oa3Wmv17O25+`)`AsI-Jfl>*>gJ#C8DU&oN7ejxvFRk>R~OSX&-9*rZ%(F zP}((Gymq~(dQJ0V*RG+X-(*1k(D&c0NGdcGS5R|?wdz1;rxq-~HeJdxvM9Zz=r&zp zQQEI{z51$wd+jYlx1LX6O8YRL9~T4bh9AAi0UX2oe#l|54ub-~mJ`-9GuI7WxSR=& zp~NenK+*8|EAdg#Euy1ffF!OS3-j>PIWQLAh=ncmf)rC^*dRJ40Rw0h>*C;Z2~S#K zGPWi{3~WF>5mKQM?@ELdP>+rzxE*@%4@qzz^oUS06mU7;o9)ywbsi+(u@pE6eRyvw zEQEUTdMYF{XcDK=V75du`Ud!K&gu+&rkW?o&#E z?bLAUN>En<)OP9i0>kR1CzYPW{#o!F31e@9v0~#~xF4WIB+rMXG8AFmVp_l|9D5U# zz-p|&32fB5pJFN~a!bI* zAb_4yus{diTMF+(P&Adn*AN?0?YeHy?WZhHAA0WXBy^XJ?f=(xWE zvPhh&fU+3fWz%%4ZP2FZIIj}wsn;Eqa2&kYQUyIU|M4oAVe4=yA@XrZ3)ksBEntML zX4>`#^nrnZYJ$fgZ3z81Fs&Lsi1oYd{ew!mVV|$K#6PM*V_;xgEu=0eH)hWsY#SKR z^(;eIi@G#_cwiu+bQ^w`X=R$Kni1RY)xv3-Za47RT9_8+ceQAGt9?Wa4AAU;{Ja)! zqK!?cgTIg%QxDDHMy(#!fd`M)lfj)B(*TR00`nT6V6w+ts0oD>M>(3Fru)-exU&JC zu#9}sj4iL;;?!FQ1}LJ;2eKj(Vs3ObLLS-hNFzKywaaB<>b1E{!y}6g=yo>-*T4(V zg)^IIX`Se3qAhaaZKkNeN17mm#Jf%8We=t`Lo%qC(+nLnU~h9|+?p2HFxshFZ8WRB z6OXmPn`GKA*22Rimb6ktugBx9@P81*_iu)N5~U6(Cb884|DbpGw!yOK^=8Uvb>Msl zBv53WX@f%?!nj9;?l=UpDy%qh6Cys(NypO>OI zAl~zW4mO`^Z_CQ)Z|odwQ|deIZ7y#hq-FH`RBAU}YpbLXt$z45W0eNJ@gT&BIU8UB zKqa;XVPRCIVaq9T;_6|_oE0BKj5rj8FQO>U?(d~^2;t~H@J;P7r!4T9pU_?FGy2yD z1~d92$}Zg22S2s;s&-43lj5bzghaF9as~rNNb}Ail=NAY3ZK1Ko!u_%{m{x$Thy<6a2=oN)qVXnlSF5EK&$zscPQi4-7?;sz8bH`5jGxhmq zCp^rc7q{FGXP^eV9)MYdyL%phs15Y{*3+~)vk_++UUHd6wU`>K!O_a*&gu7tj53(U63T4k3nYC zc!$gCze*15cKb@P<0+U2P%4f*4W*`>_$*8WSSe;a2O3ZS-u*me$wjKt=*0V;hdDTA z7*a8M7}CLkwqa;m+)X>t?sTnJg8^E96&d4ps!cPH;@h1nNhNAbxL3jutZS>o5(^9tA7eT=fym!t)E+m>mHsKVCuYwH)ej z|8dBq!aL;)n2vur4!cVV%zRLtVdorYr*2W4UG_F_z)6YOYo<|wnOoj2yQL`Pa(2?@ zG+sBW{_2zN@31IM_`8qEeYJS$W5|aRTycWXBoEh|fca1$?l}R|IaU3AzXO9fK-x*L zuzCYOx(HLzaT30RCagLIg>s{zG)1;B6JI@L);m-_h0|1)$DD?sS)K@~p zu+_N#9Hf9D-aSVA%A=i5adP7bz7MUW5upQ{8q6 z_LG=<89s*g$K)%N>n;%m>}8p7|E(zYAPHwQ+cGj2(p*Vm+$gqh4Eg@0Nz9toW9H== zTFcdBjkNXNYtHXMh+~C>_{DL|LL@_vV@oHL8G}k%Mt`VxFfEs4nRq^q{U8w|c_xvi zNNWs56-N`lp_i0p^hU7S=Vc~nCWWfBc&|nSePxg(`9eV_6Ne&jQ%R@w6L40mVIbp z@yVSoT5n4*;MItj5MZ@t^pmPhDOX3}a1xyu#`$P;Mt@;%#I*9qnr1Lg^{zRSy+))X zc_#ZcwNA`rZ_Lzbp9dXRVa#L^5#G|$-K#VkN>8t%sbrB7##gPZPl`M(v#}XefXImKfapFRDj`>wgKMCm~eG!Y6 z<1@y17L+jul;Y3JST`+X%qq4drO+fZ zwk)5slOV^Q8*V2-+{Q+KN)0+zvB!zbjw)w=rte{#urRyV}_?0`s7YJq%Fs*c9TFY`qI_{Rg{~ zh|exJ%OX(yz|D@tY=|(@93sMvxVwW@{kvi|uDHx5unj6Mx6^5((!*{g2s`RwJIRT< z&a4^rBQ&}ya&$GLDim>&SMzs-Jya^^DK&&WvAhT8tYZ(+`Q^XXu>wYDHo?axn3Xf# z&n|P4X+gF(YF4RB>5Mpa&~(olmBttN?Jln~6iU;2!o=%CX$3B8z-hw^0ckR}eM0pj zx|baSIxf7~$LJihM%+BW1c&t^eiOTa>W5hN6GkkhPuz7on?4!x#pAzZGe=YK9(|ZS zGllSa(?OO)D|`7MTRWCmXVTm361`10!Y**A5u@K@B~ef>R)54cai|c-jWxJ=-l4@1!>k5;4u4 zSJ(_r+-q<=UnQbB|BUz(o{{)w(it+}Na+1HnI~{u9K$DwsiXN+6T8pH@_4L>F|Q@W zp%}gh2q#S)V{Uh3Y0Trs2`ZZhoq}ej!r&A4OyFxFxzlY8>Lb@46vYAEJm%OGFOlyZ zlXw~dRr(|zKi2KG8j%>M{YCP!4K@Oz@kE#FP!Y2*l; zn8K%$-E&fS65&Wm3ZG6~y(5LE5*NLLM4HoW%PH_@sT!e>X0_=4P9yAa8sR_(kwA;$ z#ltCl23h#EIn=;Wsq|?TZK*s3d{~moGiU|gRGP0#+?&ehOT;f%dJL$x{;ok|ct&_#Bhe?Vimq<5!D#oaAsTMdEj0kNFFD;?GyV7xNhRY28xBJik~n+V0jH+P4T_0 zh9;nHs> zB0I$EsqfYhpGU1XLgbfru_Vkt1xm&#U3{l0pYG-jMDkGX zPjZ}a_VMxN>kR|kO;qr=1AOm9+LVFK{3ha3FKp%^N=fS$`aCs{Y^6EtMcX$1xw%g( zhWPHuRCC;(f2ld$Uc7Z9pMs;e^O?{i=5ObP(NHJ4?&q_3Oo7*4=Z#=;4bIo3Bs}~O zZzgP*zKh>Mu>R;S?gY988MTK}W|hd@!($lTjg;->Yo*mLr5LyUiYMckM<~;d@8#RM zsr2FNj}mCU@EA|R2Oi^S>Uu|X)sOPgqVaJ)EE9o=d74*29kx8pFR?r?#y-s}X<1J^ z!@rYwq1Qh2(JRS#;01mcREgXJe6>8Oz&l8{R9TULDx?cLd!E>Hh%b$%4yWGWD~SE! zw6|%!g}5;y#20V#V^Nk8m$lumESeX&*`)CfRcjB>Rf47#c%1$Y&0Zpozt6Wv6Bz3s z^Lz?zvH!Fga4SXp=X`oRO~3eizHuDM16=ycc#74>PD$ajxF}u z%ly{Jii>gm66r}g*d#2K?xx`1vs9|&v=`@>Nvq5?F3Xk9(|KIX$(PPqawsj8}WD=!m7zInyd-l6LIP(g)FT1(aumSx&)uhMc^Ssos<@ETo=$6*!3`cfyjo9y&YG7Kq*WTm*kuJ4UB=?uo^31~u=6R$< ziSV@?7ki`{Iikm0kCY?c@knlol5MU}dQXNjaWNw8WniY@1=z#Ui-cDQhY_^KHL&Hf*PH~ku*AIRp917NVnn5XQcU< zcScH~dlAPOsWF$Tt;mp*7}E@#pD9nnqcL(cwprz9>TxMk&Y@yQx9~IN>HqS^W0eb{ zs7CJ3l0TD(o7{V&JZP5Og>u;_sKmNu@^ZPxtCR)tsVq5BJiAOTehMExD;MCFv$Bl2 zXXSBba~f5Q*UrkBrZ$eAE6&POM^y81+n?n-@$_^SjT`?Qd3oWid)xy|Bp^5yGu&#Ag~ zt4^KspTBDNNc@8%@mqe&{044W&f~V8PJ`gq?<--&P$k@19yGFC4qdmpH6^6kGBQ@^ zR?U1=+*(UWYqjNQ9;@H5dHexuwndY9d9@jKVJ zT_MZT`r+e;OJ^+B4QrJ{>34WS?m)Ri^JQCY_S{ZG2^(tM4mE7>Ts1TXw2(V&=^bkP zvNpqOC{8y`-hI8Nan15W*N&m1U#3I)&^KQ$OUyGASHSHExvTtLUG6~Hwc!eeD$aT0 zy9}k%uWBC69jNj;g6?4WQ+-44oEwNy4JF|AxC3sV>>44>g@%4c$X8o_EmT314Nw z@}Z)y_TOR{cFPZwvM4I)^hwpCcOU=F)}s^8ipUg$N`+gd%w$J(N2Q`z?KuzGBO&5 zE?mw4=TO4;A3@vj$oFv(P$(iJV1Oi6kA*q-@hljNuSLUVY9Pa88PvS${dKtW65v;mgBuC zFdrJlt0|DgpkACxg_#n`$Q$5y97_^l5}vohFQ5+ZvcY%O^@cU5DL&1n7@D0Fho%HH z#ZS6Rv)36`ot{*B68kdYw-Pjoz--t9B$MXCVj0@7ZXtcO2*=(8MX(ax7-8| zK{X~XffjbHcVlCI$q9!gr6UR(U_D&J~@?5?$C4KHrA|*ksOEwmT%zh zT$qgG>@X8*MYbIjfPC!8g#pMHf69d_kXPx}W*rwVgQHN3WAeyP)xwqsrvOS(&WBEV zFPIP80rGH6Axwn=oKXlmxW%?YvQFxB*)5@f!xz*-n&0R4Q6Tw5ZV}iR1khUo7U;x# zOW6p)@Mw zvbi;@ZP2EKa83o(Q?ENJ;5az2r4rWD_{S?@x~8*Fws?N@M2C!S;axP0KPgwXoam z3k?i}jUL12GFO>usAib<>+VphTeG|H*;<$ytGQa-TC4qv7#N_@HT<*|Zlb-7uY<2i zjH!oaP|;lvYrum?>uJGWjB0=dP=(}fm23Elf(1A0WXlh<; zYoaaE@itSG;bTpZPU7t*^0Eh0n;{7d%xQ)Wdg0OL@O!ITVBP4TYPHd*b}t@lf!Aqi zKVJ=xkXY0T4?sB{Z-sw?58u5R`bm_u!3q*v+TdGiySE*dM3$R*p4EYK+aR7I<4ijo zHrU;(&NZ2Mugp zs=Ylcy}z+*uwAL|vbVc*f6$%Y-=&h?bWK;uAXrs%Jpl6~ z)*7~)A_rCvQ|2uD5TeAv0DKlfarQtjrGpPi&EZc?^b8_3VS~|8TohDAUQ37zt{lZ z(MPu50$ac@W^9BhGVfLuoOnAVh}PTTj|7%t*`2VGQLp>%hW~_K(QpqqXb5rOJ`*5< zcyJT!W!+V(kJ-+n*AIz?fu-WLkW)zNxU_gQj@yTxR%B;e`_g#=E9D5)mV!YF3^<8BI zcDubqY=0W&0Mv*h&p?SOCq4@k0ZPR5=fDjVfOkI+S#q1IG&=D9=OL3hRUADG(=c)v z(!hzfVQ5-dNSonwxYnuxKP{n>*5h%gv`NLZ#Gu#TV^OLMdwZw3SLWoioIwhyLUCZ2 z;-B2nxt}UdF<#maw~!co5j0k1;LeK>CoaDTKLx15pB#W13g8n5;9*!Hj9)`0hZVT% z5ctQeFtV#UY=eVJIwrmZ3#rajy#&*tPlR3~#D{cz_+_dy%MGOu-+dW&kiqi`Ob;8x z{jb1z9@9g9^=hi>CbzB(kfYb*{cpg}paD}4Lt@mL>#J~xg2V7CW9wCPoTPGf^!G3k zXTJq8Xg>lK&>-$R0@1+M7+CcIBw?i=BE-SB;3A_s`r!vnY;kd%Ny;P;T~`nN(+{m)>o+6b4<6F4~-R*O%3J z^-1$}Sd@DF!-wR)e7y7_EQcmsc7gz<7FV5sxlkwWIRVo+75u$_0E5bZ>PfJ$Mgu>% z2ve}_Bzy(+Sa}Kxkska65Xel^pGO}n{tRxB z^HrOz9IJ*Q4*&QW)yq8b^5@Vakz9BNs8aU||6kyeOyJsi4(5$5qL`vMD(j|&t;Buj zAQ@cZ?Q^sP^u|Z$p*BJ;GHl99G5Z^M8YuNo{{xmt%;nmCk+Na_MJQ(`PG5q3BxYZR z521ID{5_?+E+T*(k_r0Xh+q$qa741rSH?mbD^ZLa#rBRN-~T#>SyOw=)U2ktT+P?8 zuJvAXeh)${D4kBGwoOyG72c2h;kBTDE4>Krn)Hx3Qfw;>?iJd z6)QtzypoU}>Ubp~>w4`LGhNMmv?v9bV_~*vugl(^?emAM>HP)RWnni{IeXv2;*z{B znr}wuTp9#>wA@EgI0taZEP}rU}YWbno?e+0xW@$c`Zm8}cjgmzJ+H!oF-HHEUW4+KNCS|gh`M3g=oMF~hYksfd!Ov!~qp@8s z+fuid-Kb@GG@n}Ob6dN_8(EAhR;BpIY<3TTCT^X}HZ#z0;(T_FX)30jgfx-1fJMr2 zE6VIH!&*iq+m>^k!mP*KY^G9TKAO$$CowmNJw@Vl4qHu$lf8r`N)+gI%h+BD`|p>r zGsOSS0wy}rSEyzk*GCc zDw;zKcpdKQV3q%Fn2F0Svk7dCic9T09xJ@;Rsyc0UbcgrrfJNY-gt#SSB4L&W)ua( zPSM@Ij*ypXI-gtoJ(98}UV5`Rx z-AsIwU82_bBkTev9x(bHRun-euj&ujMh<1-*m3rx41G9ol4U2YbBrzu0o|#TRTWux3^K?_U{mC>5K}u{Y_A zBO1P9OMpmc-bI#)HK1L&;h>Q9Yv$p`rszbux5w~Q!ltws9yeC?SdDN%(;>iv z1!fDKFJkxxyn6y4hZPrDf*2jkn@w`4PUiPSl3Tu-%2UY^I5C+|p>@wn=81%OMag^` zk@SvaoHME2cl+fHe3RL7 zVHc+vk87l5`j!U3$QVhkHvj6`PcD<9;>b2ybLlAUYdCs)Z+9gZDPN|X~Ro! z(E@%W34H&yFf~ z5jxnEV%)iu4??j>UdDTXRk?7mf=|JhGI*RglE;aEcZt3ETr<&PQX#J$L+IhHwC;$rBw-ykA=GvZmviCccrVU`I2bmymA4S(Xvd!|_|7S?Qln zjmz=5X8sIyYH#7|N&KOOk5Kf#y_z3`PVrDHUu>QhK5FAnl6q@9e{O>5yLJ3wBJju7 z@iHKFT97A^$PV&)>boV#=aBYVko?js7KQl7KuJ2eo9{5?Gd;Y4C?Cpw+#bEoWnba9 z_IGRUo^1U5uX3z#^zrd#^SS}`YO?WVLwwgHsy!a>k7`e$j<;^$lX3JmJ_CBh+-dl18=v6AGSQi+XEGq)yUP{9KFYvpdK;-V{)pAUoK1g>}S>b>xpldsOt=N5#FOH-R zr(WaBhzsJ>H)+0kxFIaWXK(Uj5tb&G)#+0f%n9Fb()(?y+v%sf1-F{-b@)2m_9k)s zUA`@nKwA5dFQ?EJ`%aqyS0ds*<#y4h2s|dfQTBTdeyRZipsfj%J4@K$)QoFLGX{2t+l9o!7tFOfVj~9cq7>kIw zQEHN-t8{y*&l;X_6|P+*Jw?Zy_{GxQ6#TmvOBI~>ivriQhIugeid#kRN4oB=tg!A z@h`JddGWQ!qy&s>l;+VVOB$s%iQMpHirzt)y`D{XmgwLZ!7f~fQ9lFYJ)1M`} z>7zTVGtz9#J0m6Igfr4yvH6TNBbQ3CNS70t**-Tzo{C4Ke4KWgz><@^XLp!>4qPbBlI=0Xyh$4J_Hx5Sg>EAin_1QvoTpgXmrYmx?Crg9?*^a3? t&W_IdE;`Q6c}|Wx!H$l>q0=w$vS@5S!pZ*R2di6tQEu_}1xy?pm;e}k9OM81 delta 77 zcmV-T0J8t+iXhO6Ab^AcgaU*Egam{Iga)(+_6Pwvm-h$ Date: Fri, 21 Feb 2025 15:15:14 -0500 Subject: [PATCH 103/152] Release v4.2.4 --- .../ISSUE_TEMPLATE/01-feature_request.yaml | 2 +- .github/ISSUE_TEMPLATE/02-bug_report.yaml | 2 +- docs/release-notes/version-4.2.md | 27 +++ netbox/project-static/package.json | 4 +- netbox/release.yaml | 4 +- netbox/translations/cs/LC_MESSAGES/django.mo | Bin 230181 -> 231540 bytes netbox/translations/cs/LC_MESSAGES/django.po | 170 +++++++++--------- netbox/translations/da/LC_MESSAGES/django.mo | Bin 225478 -> 224346 bytes netbox/translations/da/LC_MESSAGES/django.po | 19 +- netbox/translations/de/LC_MESSAGES/django.mo | Bin 237308 -> 236143 bytes netbox/translations/de/LC_MESSAGES/django.po | 64 +++---- netbox/translations/es/LC_MESSAGES/django.mo | Bin 239192 -> 237992 bytes netbox/translations/es/LC_MESSAGES/django.po | 33 ++-- netbox/translations/fr/LC_MESSAGES/django.mo | Bin 237945 -> 239998 bytes netbox/translations/fr/LC_MESSAGES/django.po | 120 +++++++------ netbox/translations/it/LC_MESSAGES/django.mo | Bin 237392 -> 236189 bytes netbox/translations/it/LC_MESSAGES/django.po | 17 +- netbox/translations/ja/LC_MESSAGES/django.mo | Bin 254773 -> 253226 bytes netbox/translations/ja/LC_MESSAGES/django.po | 128 ++++++------- netbox/translations/nl/LC_MESSAGES/django.mo | Bin 233233 -> 232078 bytes netbox/translations/nl/LC_MESSAGES/django.po | 39 ++-- netbox/translations/pl/LC_MESSAGES/django.mo | Bin 235040 -> 233894 bytes netbox/translations/pl/LC_MESSAGES/django.po | 16 +- netbox/translations/pt/LC_MESSAGES/django.mo | Bin 235452 -> 234260 bytes netbox/translations/pt/LC_MESSAGES/django.po | 23 +-- netbox/translations/ru/LC_MESSAGES/django.mo | Bin 301870 -> 300424 bytes netbox/translations/ru/LC_MESSAGES/django.po | 45 +++-- netbox/translations/tr/LC_MESSAGES/django.mo | Bin 229529 -> 228424 bytes netbox/translations/tr/LC_MESSAGES/django.po | 16 +- netbox/translations/uk/LC_MESSAGES/django.mo | Bin 302307 -> 300826 bytes netbox/translations/uk/LC_MESSAGES/django.po | 21 +-- netbox/translations/zh/LC_MESSAGES/django.mo | Bin 212098 -> 212087 bytes netbox/translations/zh/LC_MESSAGES/django.po | 21 +-- requirements.txt | 16 +- 34 files changed, 380 insertions(+), 407 deletions(-) diff --git a/.github/ISSUE_TEMPLATE/01-feature_request.yaml b/.github/ISSUE_TEMPLATE/01-feature_request.yaml index 62c33b424..f8c7f7e9b 100644 --- a/.github/ISSUE_TEMPLATE/01-feature_request.yaml +++ b/.github/ISSUE_TEMPLATE/01-feature_request.yaml @@ -15,7 +15,7 @@ body: attributes: label: NetBox version description: What version of NetBox are you currently running? - placeholder: v4.2.3 + placeholder: v4.2.4 validations: required: true - type: dropdown diff --git a/.github/ISSUE_TEMPLATE/02-bug_report.yaml b/.github/ISSUE_TEMPLATE/02-bug_report.yaml index 0fa8b4084..1789d27aa 100644 --- a/.github/ISSUE_TEMPLATE/02-bug_report.yaml +++ b/.github/ISSUE_TEMPLATE/02-bug_report.yaml @@ -27,7 +27,7 @@ body: attributes: label: NetBox Version description: What version of NetBox are you currently running? - placeholder: v4.2.3 + placeholder: v4.2.4 validations: required: true - type: dropdown diff --git a/docs/release-notes/version-4.2.md b/docs/release-notes/version-4.2.md index c6c99be7f..5612bfca7 100644 --- a/docs/release-notes/version-4.2.md +++ b/docs/release-notes/version-4.2.md @@ -1,5 +1,32 @@ # NetBox v4.2 +## v4.2.4 (2025-02-21) + +### Enhancements + +* [#17309](https://github.com/netbox-community/netbox/issues/17309) - Omit empty counts in related object tables +* [#18277](https://github.com/netbox-community/netbox/issues/18277) - Improve multi-table inheritance in serialization of change-logged models +* [#18286](https://github.com/netbox-community/netbox/issues/18286) - Add more job duration choices +* [#18357](https://github.com/netbox-community/netbox/issues/18357) - Display author name in plugin list for locally installed plugins +* [#18408](https://github.com/netbox-community/netbox/issues/18408) - Add Paused status for virtual machines +* [#18584](https://github.com/netbox-community/netbox/issues/18584) - Add rack type column to manufacturer list + +### Bug Fixes + +* [#17436](https://github.com/netbox-community/netbox/issues/17436) - Fix {module} replacement in module bays +* [#18013](https://github.com/netbox-community/netbox/issues/18013) - Limit object type to selected object in change log filter +* [#18241](https://github.com/netbox-community/netbox/issues/18241) - Default logging level of custom scripts changed to INFO +* [#18247](https://github.com/netbox-community/netbox/issues/18247) - Fix visibility of disabled cable paths in dark mode +* [#18480](https://github.com/netbox-community/netbox/issues/18480) - Clean data passed to script in runscript command +* [#18555](https://github.com/netbox-community/netbox/issues/18555) - Add default get_absolute_url method to plugin models +* [#18585](https://github.com/netbox-community/netbox/issues/18585) - Fix filtering circuits by location +* [#18593](https://github.com/netbox-community/netbox/issues/18593) - Fix "Create & Add Another" IP Address workflow +* [#18594](https://github.com/netbox-community/netbox/issues/18594) - Enable sorting by ASN count on site and provider lists +* [#18619](https://github.com/netbox-community/netbox/issues/18619) - Ensure shift-click selection selects only visible list items +* [#18674](https://github.com/netbox-community/netbox/issues/18674) - Preserve form values when selecting speed on circuit termination + +--- + ## v4.2.3 (2025-02-04) ### Enhancements diff --git a/netbox/project-static/package.json b/netbox/project-static/package.json index 1a99fba2e..bc8f3cee4 100644 --- a/netbox/project-static/package.json +++ b/netbox/project-static/package.json @@ -30,8 +30,8 @@ "gridstack": "11.3.0", "htmx.org": "1.9.12", "query-string": "9.1.1", - "sass": "1.83.4", - "tom-select": "2.4.2", + "sass": "1.85.0", + "tom-select": "2.4.3", "typeface-inter": "3.18.1", "typeface-roboto-mono": "1.1.13" }, diff --git a/netbox/release.yaml b/netbox/release.yaml index 420e71a20..15756c597 100644 --- a/netbox/release.yaml +++ b/netbox/release.yaml @@ -1,3 +1,3 @@ -version: "4.2.3" +version: "4.2.4" edition: "Community" -published: "2025-02-04" +published: "2025-02-21" diff --git a/netbox/translations/cs/LC_MESSAGES/django.mo b/netbox/translations/cs/LC_MESSAGES/django.mo index 964d8f54c07d09f825b4212b35d61b079f85033e..ddb972342822d84825a96c6b6d0ad7ef4283562d 100644 GIT binary patch delta 69153 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 delta 68466 zcmXuscfgj@|G@FPr;LVDk%sc5y@z(%N=rkfMI{xfl+2{=B9V{~Nk#~vFACX;A`y|Y zg(wOsigzJ#WFEqY@L9YH2Nf!iIUP4+Ev#@vfy|NE8JlBI z?2far8-9T8u-uUaGW~Hd_QU_-1p3e99aSLHg^Edd0j|PMn16I~6gH;(Soj6Drd+&m zfy^N6jxF#ZY>HoETP#(iK&C79MFUl7tW`p-1xq9IO0Q~SU08??bv#gbjo z5l=^_jOCR|9hE`ftBh{n#^}hpp#hy0<ytz0-4_hLDGBFgK~ z2REY~ZbJjxk9JtFbPDV^bi@_W#at8JCH2t&24QVHAI

    ;Zkhr{(pgsX59D<8(^*D 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 T#DpK%^?(1+5IZ3_Wy=2pLyp%$ diff --git a/netbox/translations/cs/LC_MESSAGES/django.po b/netbox/translations/cs/LC_MESSAGES/django.po index 2a5e42b12..fdd9a8b88 100644 --- a/netbox/translations/cs/LC_MESSAGES/django.po +++ b/netbox/translations/cs/LC_MESSAGES/django.po @@ -4,10 +4,10 @@ # FIRST AUTHOR , YEAR. # # Translators: -# czarnian, 2024 -# Jeremy Stretch, 2024 # Pavel Valach, 2024 # Matěj Gordon, 2025 +# czarnian, 2025 +# Jeremy Stretch, 2025 # #, fuzzy msgid "" @@ -16,7 +16,7 @@ msgstr "" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2025-01-04 05:02+0000\n" "PO-Revision-Date: 2023-10-30 17:48+0000\n" -"Last-Translator: Matěj Gordon, 2025\n" +"Last-Translator: Jeremy Stretch, 2025\n" "Language-Team: Czech (https://app.transifex.com/netbox-community/teams/178115/cs/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -64,7 +64,7 @@ msgstr "Naposledy použitý" #: netbox/templates/users/token.html:47 netbox/users/forms/bulk_edit.py:122 #: netbox/users/forms/model_forms.py:124 msgid "Allowed IPs" -msgstr "Povolené IP adresy" +msgstr "Povolené adresy IP" #: netbox/account/views.py:114 #, python-brace-format @@ -179,7 +179,7 @@ msgstr "Region (zkratka)" #: netbox/ipam/filtersets.py:974 netbox/virtualization/filtersets.py:58 #: netbox/virtualization/filtersets.py:186 msgid "Site group (ID)" -msgstr "Skupina stránek (ID)" +msgstr "Skupina míst (ID)" #: netbox/circuits/filtersets.py:51 netbox/circuits/filtersets.py:218 #: netbox/dcim/filtersets.py:135 netbox/dcim/filtersets.py:232 @@ -191,7 +191,7 @@ msgstr "Skupina stránek (ID)" #: netbox/virtualization/filtersets.py:65 #: netbox/virtualization/filtersets.py:193 msgid "Site group (slug)" -msgstr "Skupina stránek (slug)" +msgstr "Skupina míst (zkratka)" #: netbox/circuits/filtersets.py:56 netbox/circuits/forms/bulk_edit.py:188 #: netbox/circuits/forms/bulk_edit.py:216 @@ -252,7 +252,7 @@ msgstr "Skupina stránek (slug)" #: netbox/vpn/forms/filtersets.py:266 netbox/wireless/forms/model_forms.py:76 #: netbox/wireless/forms/model_forms.py:118 msgid "Site" -msgstr "Stránky" +msgstr "Místo" #: netbox/circuits/filtersets.py:62 netbox/circuits/filtersets.py:229 #: netbox/circuits/filtersets.py:274 netbox/dcim/filtersets.py:242 @@ -262,7 +262,7 @@ msgstr "Stránky" #: netbox/virtualization/filtersets.py:75 #: netbox/virtualization/filtersets.py:203 netbox/vpn/filtersets.py:363 msgid "Site (slug)" -msgstr "Místo (slug)" +msgstr "Místo (zkratka)" #: netbox/circuits/filtersets.py:67 msgid "ASN (ID)" @@ -316,7 +316,7 @@ msgstr "Typ okruhu (URL zkratka)" #: netbox/ipam/filtersets.py:985 netbox/virtualization/filtersets.py:69 #: netbox/virtualization/filtersets.py:197 netbox/vpn/filtersets.py:368 msgid "Site (ID)" -msgstr "Stránky (ID)" +msgstr "Místo (ID)" #: netbox/circuits/filtersets.py:233 netbox/circuits/filtersets.py:237 msgid "Termination A (ID)" @@ -371,15 +371,15 @@ msgstr "Síť poskytovatele (ID)" #: netbox/circuits/filtersets.py:335 msgid "Circuit (ID)" -msgstr "Obvod (ID)" +msgstr "Okruh (ID)" #: netbox/circuits/filtersets.py:341 msgid "Circuit (CID)" -msgstr "Obvod (CID)" +msgstr "Okruh (CID)" #: netbox/circuits/filtersets.py:345 msgid "Circuit group (ID)" -msgstr "Skupina obvodů (ID)" +msgstr "Skupina okruhů (ID)" #: netbox/circuits/filtersets.py:351 msgid "Circuit group (slug)" @@ -804,7 +804,7 @@ msgstr "Datum ukončení" #: netbox/circuits/forms/bulk_edit.py:158 #: netbox/circuits/forms/filtersets.py:186 msgid "Commit rate (Kbps)" -msgstr "Rychlost odevzdání (Kbps)" +msgstr "Smluvní rychlost (Kbps)" #: netbox/circuits/forms/bulk_edit.py:173 #: netbox/circuits/forms/model_forms.py:112 @@ -1042,7 +1042,7 @@ msgstr "Region" #: netbox/virtualization/forms/filtersets.py:138 #: netbox/virtualization/forms/model_forms.py:98 msgid "Site group" -msgstr "Skupina stránek" +msgstr "Skupina míst" #: netbox/circuits/forms/filtersets.py:65 #: netbox/circuits/forms/filtersets.py:83 @@ -1160,19 +1160,19 @@ msgstr "barva" #: netbox/circuits/models/circuits.py:36 msgid "circuit type" -msgstr "typ obvodu" +msgstr "typ okruhu" #: netbox/circuits/models/circuits.py:37 msgid "circuit types" -msgstr "typy obvodů" +msgstr "typy okruhů" #: netbox/circuits/models/circuits.py:48 msgid "circuit ID" -msgstr "ID obvodu" +msgstr "ID okruhu" #: netbox/circuits/models/circuits.py:49 msgid "Unique circuit ID" -msgstr "Jedinečné ID obvodu" +msgstr "Jedinečné ID okruhu" #: netbox/circuits/models/circuits.py:69 netbox/core/models/data.py:52 #: netbox/core/models/jobs.py:85 netbox/dcim/models/cables.py:49 @@ -1194,11 +1194,11 @@ msgstr "nainstalován" #: netbox/circuits/models/circuits.py:89 msgid "terminates" -msgstr "ukončí" +msgstr "končí" #: netbox/circuits/models/circuits.py:94 msgid "commit rate (Kbps)" -msgstr "rychlost odevzdání (Kbps)" +msgstr "smluvní rychlost (Kbps)" #: netbox/circuits/models/circuits.py:95 msgid "Committed rate" @@ -1214,11 +1214,11 @@ msgstr "okruhy" #: netbox/circuits/models/circuits.py:170 msgid "circuit group" -msgstr "skupina obvodů" +msgstr "skupina okruhů" #: netbox/circuits/models/circuits.py:171 msgid "circuit groups" -msgstr "skupiny obvodů" +msgstr "skupiny okruhů" #: netbox/circuits/models/circuits.py:195 netbox/ipam/models/fhrp.py:93 #: netbox/tenancy/models/contacts.py:134 @@ -1227,7 +1227,7 @@ msgstr "přednost" #: netbox/circuits/models/circuits.py:213 msgid "Circuit group assignment" -msgstr "Přiřazení skupiny obvodů" +msgstr "Přiřazení skupiny okruhů" #: netbox/circuits/models/circuits.py:214 msgid "Circuit group assignments" @@ -1235,7 +1235,7 @@ msgstr "Přiřazení skupin obvodů" #: netbox/circuits/models/circuits.py:240 msgid "termination" -msgstr "zakončení" +msgstr "" #: netbox/circuits/models/circuits.py:257 msgid "port speed (Kbps)" @@ -1297,14 +1297,11 @@ msgstr "zakončení okruhů" msgid "" "A circuit termination must attach to either a site or a provider network." msgstr "" -"Zakončení okruhu se musí připojit buď k místu, nebo k síti poskytovatele." #: netbox/circuits/models/circuits.py:310 msgid "" "A circuit termination cannot attach to both a site and a provider network." msgstr "" -"Zakončení okruhu se nemůže připojit jak k síti webu, tak k síti " -"poskytovatele." #: netbox/circuits/models/providers.py:22 #: netbox/circuits/models/providers.py:66 @@ -1534,7 +1531,7 @@ msgstr "Strana Z" #: netbox/circuits/tables/circuits.py:77 #: netbox/templates/circuits/circuit.html:55 msgid "Commit Rate" -msgstr "Míra odevzdání" +msgstr "Smluvní rychlost" #: netbox/circuits/tables/circuits.py:80 #: netbox/circuits/tables/providers.py:48 @@ -1563,7 +1560,7 @@ msgstr "Míra odevzdání" #: netbox/vpn/tables/tunnels.py:61 netbox/wireless/tables/wirelesslan.py:27 #: netbox/wireless/tables/wirelesslan.py:58 msgid "Comments" -msgstr "Komentář" +msgstr "Komentáře" #: netbox/circuits/tables/circuits.py:86 #: netbox/templates/tenancy/contact.html:84 @@ -1586,12 +1583,12 @@ msgstr "Počet ASN" #: netbox/circuits/views.py:331 #, python-brace-format msgid "No terminations have been defined for circuit {circuit}." -msgstr "Pro obvod nebyla definována žádná zakončení {circuit}." +msgstr "Pro okruh {circuit} nebyla definována žádná zakončení ." #: netbox/circuits/views.py:380 #, python-brace-format msgid "Swapped terminations for circuit {circuit}." -msgstr "Vyměněné zakončení pro obvod {circuit}." +msgstr "Vyměněná zakončení pro okruh {circuit}." #: netbox/core/api/views.py:39 msgid "This user does not have permission to synchronize this data source." @@ -1620,7 +1617,7 @@ msgstr "Dokončeno" #: netbox/dcim/choices.py:187 netbox/dcim/choices.py:239 #: netbox/dcim/choices.py:1609 netbox/virtualization/choices.py:47 msgid "Failed" -msgstr "Neuspěl" +msgstr "Selhalo" #: netbox/core/choices.py:35 netbox/netbox/navigation/menu.py:335 #: netbox/netbox/navigation/menu.py:339 @@ -1647,7 +1644,7 @@ msgstr "Naplánováno" #: netbox/core/choices.py:56 msgid "Running" -msgstr "Běh" +msgstr "Běží" #: netbox/core/choices.py:58 msgid "Errored" @@ -1656,7 +1653,7 @@ msgstr "Chyba" #: netbox/core/choices.py:87 netbox/core/tables/plugins.py:63 #: netbox/templates/generic/object.html:61 msgid "Updated" -msgstr "aktualizováno" +msgstr "Aktualizováno" #: netbox/core/choices.py:88 msgid "Deleted" @@ -1725,7 +1722,7 @@ msgstr "Tajný přístupový klíč AWS" #: netbox/core/events.py:27 msgid "Object created" -msgstr "Vytvořený objekt" +msgstr "Objekt vytvořen" #: netbox/core/events.py:28 msgid "Object updated" @@ -1737,7 +1734,7 @@ msgstr "Objekt odstraněn" #: netbox/core/events.py:30 msgid "Job started" -msgstr "Práce byla zahájena" +msgstr "Úloha zahájena" #: netbox/core/events.py:31 msgid "Job completed" @@ -1850,7 +1847,7 @@ msgstr "Vytvořeno po" #: netbox/core/forms/filtersets.py:89 msgid "Created before" -msgstr "Vytvořeno dříve" +msgstr "Vytvořeno před" #: netbox/core/forms/filtersets.py:94 msgid "Scheduled after" @@ -1858,7 +1855,7 @@ msgstr "Naplánováno po" #: netbox/core/forms/filtersets.py:99 msgid "Scheduled before" -msgstr "Naplánováno dříve" +msgstr "Naplánováno před" #: netbox/core/forms/filtersets.py:104 msgid "Started after" @@ -1866,7 +1863,7 @@ msgstr "Začalo po" #: netbox/core/forms/filtersets.py:109 msgid "Started before" -msgstr "Začalo dříve" +msgstr "Začalo před" #: netbox/core/forms/filtersets.py:114 msgid "Completed after" @@ -1905,7 +1902,7 @@ msgstr "Po" #: netbox/core/forms/filtersets.py:144 netbox/extras/forms/filtersets.py:450 msgid "Before" -msgstr "Dříve" +msgstr "Před" #: netbox/core/forms/filtersets.py:148 netbox/core/tables/change_logging.py:29 #: netbox/extras/forms/model_forms.py:396 @@ -1941,7 +1938,7 @@ msgstr "" #: netbox/core/forms/model_forms.py:153 #: netbox/templates/dcim/rack_elevation_list.html:6 msgid "Rack Elevations" -msgstr "Výšky stojanů" +msgstr "Přehled stojanů" #: netbox/core/forms/model_forms.py:157 netbox/dcim/choices.py:1520 #: netbox/dcim/forms/bulk_edit.py:984 netbox/dcim/forms/bulk_edit.py:1372 @@ -2259,16 +2256,16 @@ msgstr "ID úlohy" #: netbox/core/models/jobs.py:112 msgid "job" -msgstr "práce" +msgstr "úloha" #: netbox/core/models/jobs.py:113 msgid "jobs" -msgstr "pracovní místa" +msgstr "úlohy" #: netbox/core/models/jobs.py:136 #, python-brace-format msgid "Jobs cannot be assigned to this object type ({type})." -msgstr "K tomuto typu objektu nelze přiřadit úlohy ({type})." +msgstr "K tomuto typu objektu ({type}) nelze přiřadit úlohy." #: netbox/core/models/jobs.py:190 #, python-brace-format @@ -2278,7 +2275,7 @@ msgstr "Neplatný stav pro ukončení úlohy. Možnosti jsou: {choices}" #: netbox/core/models/jobs.py:221 msgid "" "enqueue() cannot be called with values for both schedule_at and immediate." -msgstr "enqueue () nelze volat s hodnotami pro schedule_at a instant." +msgstr "enqueue() nelze volat s hodnotami pro schedule_at a ihned zároveň." #: netbox/core/signals.py:126 #, python-brace-format @@ -2396,7 +2393,7 @@ msgstr "Hostitel" #: netbox/core/tables/tasks.py:50 netbox/ipam/forms/filtersets.py:535 msgid "Port" -msgstr "Přístav" +msgstr "Port" #: netbox/core/tables/tasks.py:54 msgid "DB" @@ -2445,7 +2442,7 @@ msgstr "Nebyli nalezeni žádní pracovníci" #: netbox/core/views.py:90 #, python-brace-format msgid "Queued job #{id} to sync {datasource}" -msgstr "Úloha ve frontě #{id} synchronizovat {datasource}" +msgstr "Úloha #{id} k synchronizaci {datasource} zařazena do fronty." #: netbox/core/views.py:319 #, python-brace-format @@ -2455,12 +2452,12 @@ msgstr "Obnovená revize konfigurace #{id}" #: netbox/core/views.py:412 netbox/core/views.py:455 netbox/core/views.py:531 #, python-brace-format msgid "Job {job_id} not found" -msgstr "Práce {job_id} nenalezeno" +msgstr "Úloha {job_id} nenalezena" #: netbox/core/views.py:463 #, python-brace-format msgid "Job {id} has been deleted." -msgstr "Práce {id} byl vymazán." +msgstr "Úloha {id} byla vymazána." #: netbox/core/views.py:465 #, python-brace-format @@ -2470,22 +2467,22 @@ msgstr "Chyba při mazání úlohy {id}: {error}" #: netbox/core/views.py:478 netbox/core/views.py:496 #, python-brace-format msgid "Job {id} not found." -msgstr "Práce {id} nenalezeno." +msgstr "Úloha {id} nenalezena." #: netbox/core/views.py:484 #, python-brace-format msgid "Job {id} has been re-enqueued." -msgstr "Práce {id} byla znovu zařazena do fronty." +msgstr "Úloha {id} byla znovu zařazena do fronty." #: netbox/core/views.py:519 #, python-brace-format msgid "Job {id} has been enqueued." -msgstr "Práce {id} byl zařazen do fronty." +msgstr "Úloha {id} byla zařazena do fronty." #: netbox/core/views.py:538 #, python-brace-format msgid "Job {id} has been stopped." -msgstr "Práce {id} byl zastaven." +msgstr "Úloha {id} byla zastavena." #: netbox/core/views.py:540 #, python-brace-format @@ -2535,7 +2532,7 @@ msgstr "4-sloupový rám" #: netbox/dcim/choices.py:67 msgid "4-post cabinet" -msgstr "4-sloupová skříňka" +msgstr "4-sloupová skříň" #: netbox/dcim/choices.py:68 msgid "Wall-mounted frame" @@ -2547,7 +2544,7 @@ msgstr "Nástěnný rám (vertikální)" #: netbox/dcim/choices.py:70 msgid "Wall-mounted cabinet" -msgstr "Nástěnná skříňka" +msgstr "Nástěnná skříň" #: netbox/dcim/choices.py:71 msgid "Wall-mounted cabinet (vertical)" @@ -2582,7 +2579,7 @@ msgstr "Milimetry" #: netbox/dcim/choices.py:115 netbox/dcim/choices.py:1555 msgid "Inches" -msgstr "palce" +msgstr "Palce" #: netbox/dcim/choices.py:136 netbox/dcim/choices.py:207 #: netbox/dcim/choices.py:254 @@ -2679,12 +2676,12 @@ msgstr "Zdola nahoru" #: netbox/dcim/choices.py:214 msgid "Top to bottom" -msgstr "Nahoru dolů" +msgstr "Shora dolů" #: netbox/dcim/choices.py:215 netbox/dcim/choices.py:259 #: netbox/dcim/choices.py:1305 msgid "Passive" -msgstr "pasivní" +msgstr "Pasivní" #: netbox/dcim/choices.py:216 msgid "Mixed" @@ -2802,17 +2799,17 @@ msgstr "Auto" #: netbox/dcim/choices.py:1265 msgid "Access" -msgstr "Přístup" +msgstr "Přístupový" #: netbox/dcim/choices.py:1266 netbox/ipam/tables/vlans.py:172 #: netbox/ipam/tables/vlans.py:217 #: netbox/templates/dcim/inc/interface_vlans_table.html:7 msgid "Tagged" -msgstr "Označeno" +msgstr "Značkovaný" #: netbox/dcim/choices.py:1267 msgid "Tagged (All)" -msgstr "Označeno (Vše)" +msgstr "Značkovaný (Vše)" #: netbox/dcim/choices.py:1296 msgid "IEEE Standard" @@ -2888,7 +2885,7 @@ msgstr "Gramy" #: netbox/dcim/choices.py:1572 netbox/templates/dcim/device.html:328 #: netbox/templates/dcim/rack.html:108 msgid "Pounds" -msgstr "libry" +msgstr "Libry" #: netbox/dcim/choices.py:1573 msgid "Ounces" @@ -2896,7 +2893,7 @@ msgstr "Unce" #: netbox/dcim/choices.py:1620 msgid "Redundant" -msgstr "Redundantní" +msgstr "Zdvojený" #: netbox/dcim/choices.py:1641 msgid "Single phase" @@ -2922,15 +2919,15 @@ msgstr "Nadřazená oblast (ID)" #: netbox/dcim/filtersets.py:92 msgid "Parent region (slug)" -msgstr "Nadřazená oblast (URL zkratka)" +msgstr "Nadřazená oblast (zkratka)" #: netbox/dcim/filtersets.py:116 msgid "Parent site group (ID)" -msgstr "Nadřazená skupina webů (ID)" +msgstr "Nadřazená skupina míst (ID)" #: netbox/dcim/filtersets.py:122 msgid "Parent site group (slug)" -msgstr "Nadřazená skupina stránek (slimák)" +msgstr "Nadřazená skupina míst (zkratka)" #: netbox/dcim/filtersets.py:164 netbox/extras/filtersets.py:364 #: netbox/ipam/filtersets.py:843 netbox/ipam/filtersets.py:995 @@ -4231,7 +4228,7 @@ msgstr "Šířka musí být nastavena, pokud není zadán typ stojanu." #: netbox/dcim/forms/bulk_import.py:326 msgid "U height must be set if not specifying a rack type." -msgstr "" +msgstr "Pokud není zadán typ stojanu, musí být nastavena výška U." #: netbox/dcim/forms/bulk_import.py:334 msgid "Parent site" @@ -4890,6 +4887,11 @@ msgid "" "present, will be automatically replaced with the position value when " "creating a new module." msgstr "" +"Pro hromadné vytváření jsou podporovány alfanumerické rozsahy. Smíšené " +"případy a typy v rámci jednoho rozsahu nejsou podporovány (příklad: " +"[ge, xe] -0/0/ [0-9]). Žeton {module}, pokud je " +"přítomen, bude automaticky nahrazen hodnotou pozice při vytváření nového " +"modulu." #: netbox/dcim/forms/model_forms.py:1094 msgid "Console port template" @@ -9595,11 +9597,11 @@ msgstr "Nastavte to jako primární IP pro přiřazené zařízení" #: netbox/ipam/forms/bulk_import.py:330 msgid "Is out-of-band" -msgstr "" +msgstr "Je mimo pásmo" #: netbox/ipam/forms/bulk_import.py:331 msgid "Designate this as the out-of-band IP address for the assigned device" -msgstr "" +msgstr "Určete tuto adresu jako mimopásmovou IP adresu přiřazeného zařízení" #: netbox/ipam/forms/bulk_import.py:371 msgid "No device or virtual machine specified; cannot set as primary IP" @@ -9609,11 +9611,11 @@ msgstr "" #: netbox/ipam/forms/bulk_import.py:375 msgid "No device specified; cannot set as out-of-band IP" -msgstr "" +msgstr "Není určeno žádné zařízení; nelze nastavit jako IP mimo pásmo" #: netbox/ipam/forms/bulk_import.py:379 msgid "Cannot set out-of-band IP for virtual machines" -msgstr "" +msgstr "Nelze nastavit IP mimo pásmo pro virtuální počítače" #: netbox/ipam/forms/bulk_import.py:383 msgid "No interface specified; cannot set as primary IP" @@ -9621,7 +9623,7 @@ msgstr "Není určeno žádné rozhraní; nelze nastavit jako primární IP" #: netbox/ipam/forms/bulk_import.py:387 msgid "No interface specified; cannot set as out-of-band IP" -msgstr "" +msgstr "Není určeno žádné rozhraní; nelze nastavit jako IP mimo pásmo" #: netbox/ipam/forms/bulk_import.py:422 msgid "Auth type" @@ -9780,7 +9782,7 @@ msgstr "Řada ASN" #: netbox/ipam/forms/model_forms.py:231 msgid "Site/VLAN Assignment" -msgstr "Přiřazení webu/VLAN" +msgstr "" #: netbox/ipam/forms/model_forms.py:259 netbox/templates/ipam/iprange.html:10 msgid "IP Range" @@ -9798,7 +9800,7 @@ msgstr "Nastavte z něj primární IP pro zařízení/virtuální počítač" #: netbox/ipam/forms/model_forms.py:314 msgid "Make this the out-of-band IP for the device" -msgstr "" +msgstr "Nastavte z tohoto pole IP mimo pásmo zařízení" #: netbox/ipam/forms/model_forms.py:329 msgid "NAT IP (Inside)" @@ -9811,10 +9813,12 @@ msgstr "IP adresu lze přiřadit pouze jednomu objektu." #: netbox/ipam/forms/model_forms.py:398 msgid "Cannot reassign primary IP address for the parent device/VM" msgstr "" +"Nelze znovu přiřadit primární adresu IP pro nadřazené zařízení/virtuální " +"počítač" #: netbox/ipam/forms/model_forms.py:402 msgid "Cannot reassign out-of-Band IP address for the parent device" -msgstr "" +msgstr "Nelze znovu přiřadit IP adresu mimo pásmo pro nadřazené zařízení" #: netbox/ipam/forms/model_forms.py:412 msgid "" @@ -9827,6 +9831,8 @@ msgid "" "Only IP addresses assigned to a device interface can be designated as the " "out-of-band IP for a device." msgstr "" +"Pouze IP adresy přiřazené k rozhraní zařízení mohou být označeny jako IP " +"adresy mimo pásmo zařízení." #: netbox/ipam/forms/model_forms.py:508 msgid "Virtual IP Address" @@ -10220,12 +10226,12 @@ msgstr "Nelze nastavit scope_id bez scope_type." #: netbox/ipam/models/vlans.py:105 #, python-brace-format msgid "Starting VLAN ID in range ({value}) cannot be less than {minimum}" -msgstr "" +msgstr "Spuštění VLAN ID v dosahu ({value}) nemůže být menší než {minimum}" #: netbox/ipam/models/vlans.py:111 #, python-brace-format msgid "Ending VLAN ID in range ({value}) cannot exceed {maximum}" -msgstr "" +msgstr "Ukončení VLAN ID v rozsahu ({value}) nesmí překročit {maximum}" #: netbox/ipam/models/vlans.py:118 #, python-brace-format @@ -10233,6 +10239,8 @@ msgid "" "Ending VLAN ID in range must be greater than or equal to the starting VLAN " "ID ({range})" msgstr "" +"Koncové ID VLAN v rozsahu musí být větší nebo roven počátečnímu ID VLAN " +"({range})" #: netbox/ipam/models/vlans.py:124 msgid "Ranges cannot overlap." @@ -12587,7 +12595,7 @@ msgstr "Chyba při vykreslování šablony" #: netbox/templates/dcim/device/render_config.html:70 msgid "No configuration template has been assigned for this device." -msgstr "Pro toto zařízení nebyla přiřazena žádná konfigurační šablona." +msgstr "" #: netbox/templates/dcim/device_edit.html:44 msgid "Parent Bay" @@ -13852,7 +13860,7 @@ msgstr "Centrum nápovědy" #: netbox/templates/inc/user_menu.html:41 msgid "Django Admin" -msgstr "Správce Django" +msgstr "" #: netbox/templates/inc/user_menu.html:61 msgid "Log Out" @@ -14266,7 +14274,6 @@ msgstr "Přidat virtuální disk" #: netbox/templates/virtualization/virtualmachine/render_config.html:70 msgid "No configuration template has been assigned for this virtual machine." msgstr "" -"Pro tento virtuální počítač nebyla přiřazena žádná konfigurační šablona." #: netbox/templates/vpn/ikepolicy.html:10 #: netbox/templates/vpn/ipsecprofile.html:33 netbox/vpn/tables/crypto.py:166 @@ -15365,7 +15372,6 @@ msgid "" "{device} belongs to a different site ({device_site}) than the cluster " "({cluster_site})" msgstr "" -"{device} patří k jinému webu ({device_site}) než cluster ({cluster_site})" #: netbox/virtualization/forms/model_forms.py:192 msgid "Optionally pin this VM to a specific host device within the cluster" @@ -16098,7 +16104,7 @@ msgstr "bezdrátové spoje" #: netbox/wireless/models.py:236 msgid "Must specify a unit when setting a wireless distance" -msgstr "Při nastavování bezdrátové vzdálenosti je nutné zadat jednotku" +msgstr "" #: netbox/wireless/models.py:242 netbox/wireless/models.py:248 #, python-brace-format diff --git a/netbox/translations/da/LC_MESSAGES/django.mo b/netbox/translations/da/LC_MESSAGES/django.mo index 2988b90ff53d5fc83b2065306d44c9252733fecc..993b688e4760f2064b2f251acb5af1a899196fd0 100644 GIT binary patch delta 66531 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 ahrL_&LrL?xr59nzvL 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 Ac>n+a diff --git a/netbox/translations/da/LC_MESSAGES/django.po b/netbox/translations/da/LC_MESSAGES/django.po index 1b48b5849..bb8f0a346 100644 --- a/netbox/translations/da/LC_MESSAGES/django.po +++ b/netbox/translations/da/LC_MESSAGES/django.po @@ -6,7 +6,7 @@ # Translators: # Jeff Gehlbach, 2024 # ch, 2024 -# Frederik Spang Thomsen , 2024 +# Frederik Spang , 2024 # Jeremy Stretch, 2025 # #, fuzzy @@ -1235,7 +1235,7 @@ msgstr "Kredsløbsgruppeopgaver" #: netbox/circuits/models/circuits.py:240 msgid "termination" -msgstr "opsigelse" +msgstr "" #: netbox/circuits/models/circuits.py:257 msgid "port speed (Kbps)" @@ -1297,15 +1297,11 @@ msgstr "kredsløbsafslutninger" msgid "" "A circuit termination must attach to either a site or a provider network." msgstr "" -"En kredsløbsafslutning skal tilsluttes enten et websted eller et " -"udbydernetværk." #: netbox/circuits/models/circuits.py:310 msgid "" "A circuit termination cannot attach to both a site and a provider network." msgstr "" -"En kredsløbsafslutning kan ikke knyttes til både et websted og et " -"udbydernetværk." #: netbox/circuits/models/providers.py:22 #: netbox/circuits/models/providers.py:66 @@ -9803,7 +9799,7 @@ msgstr "ASN-rækkevidde" #: netbox/ipam/forms/model_forms.py:231 msgid "Site/VLAN Assignment" -msgstr "Websted/VLAN-tildeling" +msgstr "" #: netbox/ipam/forms/model_forms.py:259 netbox/templates/ipam/iprange.html:10 msgid "IP Range" @@ -12635,7 +12631,7 @@ msgstr "Fejl ved gengivelse af skabelon" #: netbox/templates/dcim/device/render_config.html:70 msgid "No configuration template has been assigned for this device." -msgstr "Der er ikke tildelt nogen konfigurationsskabelon til denne enhed." +msgstr "" #: netbox/templates/dcim/device_edit.html:44 msgid "Parent Bay" @@ -13903,7 +13899,7 @@ msgstr "Hjælpecenter" #: netbox/templates/inc/user_menu.html:41 msgid "Django Admin" -msgstr "Django Admin" +msgstr "" #: netbox/templates/inc/user_menu.html:61 msgid "Log Out" @@ -14317,8 +14313,6 @@ msgstr "Tilføj virtuel disk" #: netbox/templates/virtualization/virtualmachine/render_config.html:70 msgid "No configuration template has been assigned for this virtual machine." msgstr "" -"Der er ikke tildelt nogen konfigurationsskabelon til denne virtuelle " -"maskine." #: netbox/templates/vpn/ikepolicy.html:10 #: netbox/templates/vpn/ipsecprofile.html:33 netbox/vpn/tables/crypto.py:166 @@ -15421,7 +15415,6 @@ msgid "" "{device} belongs to a different site ({device_site}) than the cluster " "({cluster_site})" msgstr "" -"{device} tilhører et andet sted ({device_site}) end klyngen ({cluster_site})" #: netbox/virtualization/forms/model_forms.py:192 msgid "Optionally pin this VM to a specific host device within the cluster" @@ -16151,7 +16144,7 @@ msgstr "trådløse links" #: netbox/wireless/models.py:236 msgid "Must specify a unit when setting a wireless distance" -msgstr "Skal angive en enhed, når du indstiller en trådløs afstand" +msgstr "" #: netbox/wireless/models.py:242 netbox/wireless/models.py:248 #, python-brace-format diff --git a/netbox/translations/de/LC_MESSAGES/django.mo b/netbox/translations/de/LC_MESSAGES/django.mo index aa2135609c1e4c4c6f2a435002584b79166c4203..69d6143e4385d332124ab03c512a9592715cf1fe 100644 GIT binary patch delta 66895 zcmXWkcfgL-|G@G4c}PgIvdd%dnZ3y#$sQ$&kewtUw@OJ#DoRvlX%NzoLbR-w^vwz- zBQlDptnd5%ob&tVb)9ov*Eyf_Ipe;c=h63fac%Zf?`2Q!%aw6fg8$2vEs-dUOZz4g zMRFt(^*30XNUTmtNtDKqFf0CoRq+q3k2j{KB--L_cqcBwyD>|KltgA6fu(RP(nVq( zUX4pJdm@ocycchLhIzU19bSV+kT?=&a1mzAn35QWZ(vI-epO1MEDpg;I16jx%h(8a zU>D4jDJ9Vv@4;cX7F%HXt5Xt#=sz)vi<_y~6D^WCB~guXzvv5CkMd^hfmdZoNz}$W zum-+}4e@Jih1s%(0K1~)SI__tV;ekyRj~FoWRm_9_jrMG(FVVcX2=#sSO=Yge$l65 z{VHrq{moaFFW^-;A2Z?w&Gu`=ezThNgY#A|Ulx&|ho{Z7rEl1z{Ax%j{wyp9`hL|4ZL zH=zxEk2bV3dKg_RXVH-+t_zvWj6Po%9cdHvz2=x3J7X>!cwI6yFpdfvdK_7miRaJ} zE*8hzLc2&-BKOg#jDKw>3V}0FN-#XTJiS@l>{ZMpwB_H6zj-QA(W}^))iVrMB zQ?@qV|3235MYrn-bYvNGg@AIRc?Rux9@_9*XaH-`x&I6e^iZrnhijd)?azZY%rBpTR1Xr`{t8_I>yz{+7`Y=9o=6Vc4h#piGd&d0j>*#CLB z*u#YlosMSA9~#OZEsw8ozaid`l1S{uPL%&E5RTaP1;ch*h-TzXbO6iIRIf%4s8g|A zp-?!g`xRpU=i|m)DxAYrSPFkeN1m~8$VfwcnQ~KfYWAZY9YGJI6X>G*3-84%*b46@ zT0fN5U@t6uW60nG=puahM)toK&%_(AM3I-MXh1KZQ?eMHyVdAX`#JjJZgjC7LAT*Qv3y-xID*sA zb{nB<;uds~-iaR7kD^nPe3c6$`w?A)$D$XJ{h7#KG;~k~9bqFhzz)&gv3>}8QjSMg z_e}KtdFTK>Lf`)aOX82AoJ?Hc!jWE6EWB7GS`J<9H86c7nEs)Hj%Xm7k#XqzGvfWl zv3@Q3+z+vQ7=7*{`q_}9xNC>~myZi0ER24fmci~g1P$ObG&5hLBj1l^>;&3SYKgEY zv!EU3M4vB#PEpNR-x6KCz0k#em%9I_apAuI0Bvv$_Q4J4;woA)toCxzD(I@Oi3U^; zeXcbca3`#bx1)i+h(5m*ZGR>D-fB#G@nyWRBf1A0QU7bSSgEk+?m|a40$p?u$MS4+ zJHCZZ$qF>1U!v`AkL3esfPcjDxl-(ZA51MBUdWEF?t;PCn0E?DQNtDMv=y%Ac@CN(}8{?rQ7p1r;RW59c_E?PaebE=tMfnllgcs2c zs+3Pjl)!#?A3lLD+Kbo*yHxPgjqQhifA|)A;#C#HQQQX&DETrMw{Wo&?Vxm}a5mqD zl_)=trEz2Q7!gN{xWnizK_oRSLkQSkLYK|2{Z$xtA_WxqnQ|j9z+Z9YWM$2 zE*!x}Xh$c|2ve$s#gq*lNv>!SG_VS2Lp9L@sztot6%FVvG!rAyDV~4^xCr~=$JpQf zU-+hQWG$`^~Wmw#N!M5l!{m@&3DLKx@!}Y>MR{ zG3k+dkPAm}5gqw8H9{uxqEk~2eX$YRP&@Rb>lN=0L)&=-J@e;c3w$4)qKjx|v)2p* zD~4{<@-^B2UR0&Rl-7ziK?7=wrmPp*;3)L@kI?7Wqk(NkGx5Jz-iHQy9Bt>{Sf9C8 zsJ}j1ycYZ4kyNF^kv2nL=!rHw2pz%w=m@5u4bMfV=uNcachSJspo{O*SpQ$FPpusm zV`l8c{o3dklBbef*uY`5!IS6#bRJzind^jr@}S$UIHspQ)(=B7F(LXmx+rI$?aW65 zUK#JNM+dqY9cXf2yf}d_qKoL+U$Jg@U>Le4CSX;Z63ZWp{;1gyQ9aV|Dl0o ztrtEU3Zc(cMFL4Cns8x+-O!QsM?XX!KpTDQa@xS z3wl2{I*=0RlvYlc{nvyGQ{5Sz<38xz--iY^Db`O%J6ss=e~1S9Ir`jg^!=mg*Y1nx z^934&_A8-*)kWKHir2aSJ8+TSar8cP0jn@9&A_-(&e)G-Jci zPA)XVX=q?KVbX?L#Rs~gsp*FXbU(T%r=qL+IdrjYLsR-cbVNtcKu@9VT|(DJ)<&Vd zoai<#juo*Ux?ApP#Qyie5mXq_7_@<>(7Bq8cCaXx-$pz70L{?nXn;S&`n~9T$Iz+y z8*T5J#^JsEXt@-6|E9*t@afi?3In+pZFp>aa0(jOOtj-S(Y5kny#Ez(Oqa@zoIYxi3WT=dKn%0 zRZYVbNwZ(XUtw z(2VRy*UBL@;1lS%aWU3sYaRm3g9cDCz0Cf*iHjmsG(#6fe{{8uLr3}?I)@*jBixEU zw-7EK22Ln#RV=*S*F$@mDi&U6^d3s zpKE|lQ7deQU1IqqG@#dFc_})=)#w1ejDCx@vlDISU~BfjsXax7rnCt+a-)l}2pUKQ zw7~}Pe%pAzJKA7>Y>Xq~{S|mG_9s{ zfX>~Yu|8wFP@e;Bs3>~B2Ko)C6*`bR(E;3t20jVz!s+O?`xBkA3rQ|aWrp@)B(2az z)fubckXZjRn&KsBgYTfJ{UqN10^MHU#quBMqCSuAu6(zIjtiq1D}}D5WK}MVWC*$j z?!ylF2$sa{=r;QY?XYHt5I`gJ`S$4IydCXmA)3i0Xuw<1A2hb3?`OX?WF{XHa57PX z3nOYAZ?r{U?1AorKIp!G4qeS(VR^iS-LP!O(C{Sm9GHs!vgsK#plxWzzDN7nj|OrK z)4%_p;UbNS3+SU>+})IwkAhc-Ms){jPiyq=FOa1Xjxigga3`!}I$;8t`h??QiC z9*1W7Su~)RFpv9xi5K_@+VJ=2?*p=R2_5G^Q=J!`vy#{y`(PXV5M5NMUBkhY4b50F zwB7D#$3vr|(F{z$=u6J8;LeBFS-N$@|mT3NNrcs^M7Fl zOu0Rbuo60uIaM5kf|nwbaC_a~r>b_y22XVJNT8y(OFbWLoD?#864JH~|vPQJTBq=j%W zAU+jxIREborx{b+!P&?z|`y>wUn{Lk7iL|7Pouw=9f z`r%Oz9oYkDDj!BWegf@yHabx++i;`4i91t2V zhi<#7=$hz{sW=E7*$}LPQ_%xz4I02tXvc@p0sIxqm*V}b1H%CFqtBHnEa_ zeQYTE-x1EF!Uh+kk*`Ek^<^yYKwtPBeg2 zZTlqpsX9N&MI|m)#~Vk`hAv@Syn00Vkm-ze{3zP-Q|NQE(UC4hJ6?&VdSmn(w8Pz4 z1y7@kujt5-fn;?qT%C>3NIRn`yBqy993EYSHnbB<;7Kfsx$g~s&8mTEl>1NyXZ$k%|`~L9nfJ$Rk%Hz|^?Eht4w5B3uO!#YdTkJ=9J~qLO4}{&(0$rRB zqXE2tm2o|~hE7FGjSc5XZ#3mIuo-SZr!3QhA=5c9yPyBXxG=)1Xa~*FRo*K)7=3XZ zI`@;&DS9@R=fwL<&{VIC<*(7T@KdZmh`xUX-6h$^vHx8>1-WoLl#NzL7h5BAf44+; zLwhWTop3Eaga%S?e3-&!=r^MQXhx^vBlrWlcDhYSN!*V^F;5C7;RN=-A2R133K3mE zBhE501av)`ku)^o8tDC-u^@IpM?4rk=^l^uub~t3@mRiuW-|5R@LXneDsm^e zaNnk(i>NBP4F{q7bR637)948{8x3q8nu$ed;LFkH*P@H(LQKL_r&}6$NERmwKEM3U@m&1y@>|80n6ehOvAs>c5*)&0xN<{ zK{8R23nQtBK2STBo1v-ffNrxcu{=3C75xG-9ew|8bSghU2k<32((ll(=ey83&owy& zP!J3F`Jcu`5pLAQ{@4rCa6Oj61Lz{l@>poFBs$_sXovOD0NO>nV+G20p^NYtY=w)^ zHS`A>VA|tx|Ci&!xv7Jut^pcpGqj_2=q~6L>qnqd^#J<(WOSrYp>sYH+v6NGqer7> zu>|GBl+a&EOd3g9F7&2&qXC-wCg`GSfiBXXSRMzXC)*2H4!=S(@E4kqOVMke2!Y;! zF6we}N0TrNRs((UD9=8=e`kIY}t6lHuWq$V$V!qrC`?2a~gH@Y@Pqa&Jtj_}b~{|q{H zFUI>XM;D<3d<$J8@1gG{*KlFvU!ooTj84JvSk5~w)R(~0)K^1)xa@_VjH9tJeuy^w z4;sK_tbiGw4(C7>^nNci!+ntfBojlpFp^PdN+!k!o{9By(7;}gz8C8^qN)4_ZEz1d zWrySabJ&w|>h#e5?P&Xh(6#a)UhDpUnhR4p7j1A6Iu$F>ly8iFkEZYd`us7p!N1T0 zCc`sfx70`9>wsqHj#yrR^(e1Er~D5b>gWG;Gr|{!30R%-a;%KMVO7lYY)D}X^wVo3 z`pxKdtb+TnB3}1g_}FcL9yC+X`yZnj`~%%(|DglDjOqXW=bGn3MFI4|QfMlxqa$sG zF2;7~$OfY4!WeX}r=r_!I{F!~IF>&_Q@tHsGl$VBNz4rOy=Joio%`Wb7|}SifhlN5 z^P=yd0j))!`x;$LyU`IHK&R|C^xQay26P3Tvg>DsHBuy64&6O9X0iVrL47Jxu}OTO z8K%!6I>&dQ9gM)D_;9RWgpDb`hfdYsXl6>k5T>#&It3%pBYZv@*!yVvTa#Rv^4;j7 zIEp@a&5L2gX=ngd&=;CSZ$%efA2egL(dSm69c(~9)P6z(I*$%C>+I0qb?B~1-oS+o zmx(uOMVm)Eqf>NeEDu9p9FI2mI65Uyp&iXe=ltzhUXKR29UbT~EQ|jjQ-dnv5i z3g~Yt#$Y9U2JLtqI#*lJ2EIoF-XA@QK6feJ&oU>J^F@oJ0aixes~>HPW!?Y1xbX9R zGTP95bo(tu=WZ|h;QM)!4Nbn#7y^^c)}KaI9K6J0y=aR6?_cJBYO zFNcoCU>(X!upj<{u8HQagr9H*p($U2W@0HCz#4RwZ$#I?Hgqa}M%Tb;wBsDFhA%eN z&?)SU$(y;jg9}}VMtm4ugeTAurOpc@zXrXZAKiXMV!0$b!U|{rwPU$;v@06OozaKU z02a)P`+sSCa5Xxj&(V&y#Rq>t_y0aLpp)o`&qq_{hjZW>G(*?LavpT5@}mKkj^&%8 zP3I>=BpslyU@i|8W0`i;QPSFEspiiQU`x#6c=}TPL@B&O<)o25&(FZr7i*P%dnJeg-p8c)xgGMQ| zozdu`oq!o|KHBc$=(6Ys(e-b!|9xOntoRJv3v|&V;9hqFXzheeg(YV{ojBKBkqhYwn69!N5ygyP4QH;qZ!x| z=b?-5NW6an9mrWMiHUc^d!^9!D&l0Ui+P z`{;|G<1M%YeZKg6;eJJQYU-oUwU6cA*o*S;Sic$XqP*)p_Pi+AaOB^_2X>(y z9gOwoVtvYo;rD~rM4O_|J&3+P4PB%!qI3Nknt^vQ4L8R6gXq+rMgvNo<-!Lqqa)3} zI?PobH1&nhhD&23tbzXEaX-4P-a!NT0N3GWba6iMQF#A5^!{FS3QwWu#AT%4WFps^ z&_OYDn^eKZ*aGY06!eA9@mbu7V{!1uF;nQ`I)|qE5;~v~pTy4uG$WnRcKVL zvOg@l|Ic$_gIBNuW?mPL*cx~<<*t~9FJTE>gN|T7I-=v~2(O^+WLqDm@_IDzLTF&+ z(Ew_o=R*Tb|NCFRcw;#F!kAcoJUSg6=?m!UU5qyPCK|{pOy4E({ugLqThPGvq3<8Z zy7(`a$LgQ5|C@2q_tP-)*U*Nyqbb^pMtmfC3hnSby3aFg2x}$}T3-&WuNmuG#`@mq z?~3n11AQDF$g~Z~upOSI!qqtoZD4Wq{rKRQ=qlcdcC-&2*)eov=VSS*jp2SSEJyu~ z(bnj|Mxz;?i1sr*$%PHfL+4~!EdPLJ;1{%^KhVhYeHQ9(h?YSQteen9)(#D@GkP%f ziH=7X`HSd4zQppF+{K08<*xcXr1}Q5p^|7|70}Gojpf$S?&yf_MjIRv%a5S%PeT{u z^XQ^}86C)GERAQ8FCxiA;V;62HPIIvVOwm0_u+Hs$84rA!>-7WEhyJUGnB-p_#~Rr zucP~-r_ewXUxjU*6)o4rOz!_?TsYFU(Vpns4n!B<=vbbBb~qIs@l3SCC1`-FV|fcY z@;%Yt(1D$Z_s_=qt2WWE`#(DurnoRVcjeL5S_?~I7j(6bM;n@i20R6QepYlryuU2o ze=pW=jD8dE??wms3nrU$agqy1T77faPW90TI-wo+iRJ!i>h4859*+hzB|06=(5&cu z^trcV`9pN|Z$vY;eRKTz|2Ha3X>8c<8L z<6F=Ud!g+NMmrvfKL5xT_P;+CKS@Pn{2cq?Ra?V9vAhRewHwe6r$5k!Qn!TwGo$6} z(K#;^%O&Fda%e!c&<-1-&$U3`>yYHax$GJr=oiaF&^7TO`orcEXokLw_kY4Bln-HL zEd6!-;S~KU_avHu1!zah&<~|m=!e)QG@#^RE{yObn&Q9XjsMU9QojlRQCd#)xnXGP zN27sHL>rohb}%!R-$b8Vi3a{L`u;Zbv*8D<>i$2%g&i08HvD9ABUYhY8_VN8=>1t} zgLBY^7Nfi5ZLEl!&_K?``>=c`1!VfxSi6Sy#d$!Leu(GKUJ zBY7j1KSt+rGurX)SUwrO63y{L2(&0V;!3ex3(HV$hED0QAL9NWMa36XOhgt%qS=nH zEyv*FlviLito38~CDdSSOL;l^DR%*FIN$$L5>H`coP*oYFB}7Z3ilVH?QccD#9sP| z{a=BLnmfbCV?P{B`8jlZUBX$|Xje*N3I2$c@S)w|cfL!p2<4;b&jp$Hg!`qj7Ugbe zVAIiU`XLs>Bj_T}n%o;6sE1bc$A&lyr{fNM4Ez0@lIV-SqtCV37dje`)hWM)W@tZp zVCC8$zI-;oqLc?>W1Nb%zXknnnapw^+-Q$JI30`Q3N+FkXv)rGH!S;0cy1E5qr4DD z;3@2ceSQspMSmClnx5}q_<3LkI%PX!xx{bj|Jo**7|MkYZovLn_fYsB5SoWh!BvOD zT4;&&C_jvia4inPOX&B60Y}2>-i?hZCyw&xHE4oP!8_<;{s|q>F|6YLFZ_E5pglg! zjW5v@wK^73I0ai!UWpy?A2btfj)(tJVgW9u{3qUuFZ>aX;3L?9@@4d(y5&ST;D(?_ z@MD<%zyGs{i^oz}Tv(GEx19=~`_JKU${%4{qIqD9T%Q>*W-1V7Ry!8`}HsbHi`Ak(evR}^gy~JIs~&* z9*d@W3i|#WwB7mWNxK65&iTb(?Ef?_ex@QbUPdFn`b;zml;c$KT;b9&|+cu`?FK5jX}b;$bX{dCrA3 z&=B4KlW-Kik3LuCdk)Vza^;8XN~Ig5UgDEUvYKKhHp z&geIxVd&gGifK3%(+?snO?f}M>aYGcjI;!rsitT@qp_%;|8H>7n2IgvoLuu?IMWLw z4;T}_c3(MyoRogchI^11RddKbV|QN+ua%Ke@ELpjhWs57rAh;Ty-Ig ztRPmPTm@aFz0oysKRPwz&;}->t9=IA!8|m873gzo(GQ=m;{DW%DT#k6=SBm+_7WMS z|3qFcY_Kqz@-jFP8(}K0i}yD~zmD#T9zq-Z6Fm?9LkH0CatM3~y68rtYhg6{r8kL5 zNA?jHM!XIUWD~kLcAzi(7VA%;DZPM>Jj0dHaW3?^Lg?Bkg|<^4JtUD5Y@p@9xZ zr|iK*GF&_vE9PQlZY)J3+>8Er{VP_&3+S3Cmy(*k8=7J%%C}=0K8hW2F}nKC#roW- zsp*ThI##2;3mVvzBo~fo8am>c@y6mA3D&y*oNmlsP? zE|2A~Bf7RGU~zmN9Z2#+E^OdibPD#ON9i%N!%OH~=E@j4xDicVrC4r+KGy-uV1Klu zr_n$cqaCe9+x-y@=x8vR$bD66`lnt)bOiUK4L*i8GzY8TO7vv=6RkYcP-de;pSdC_kVNo-tVa1hbcC;? zi*7x7@N9~Hi)obqhi33Rj=>C>QxjWo9RB3~Z=NMJ;ph7eS;OM%i!Qbq=ptN?HtCn%(w#`$XK-FiP34)>lKHZ-8c^Ev6r}=+q5I+kF&$ZU#EASCKW6Oe~2v zmZJ@vy3q96?8T8eLrHV*O=wBvz5ndLVs`j^sCVq<^7jeWqOD+$fHYya}4}ZfL-Fq3sSv-+Ktt zfB*L^7e+V_?eHCM;K%65H=_+~N9TMu`rL7JivB?tUyj`2y|QS>wb18oM%TivXl8n$ zA3k?u`oI4j9B+(9A55YROhp@*74I*M^~*5*djlHSIyA5^(ZGL-w8Qb}NFGH4o{na4Hkz>|Xdo-lj@L!MK-bVV zOwVW@_P-DArosk~q5+*j&x6d@hrqI-_4%<4Rz%mrShT@sqO;I;=Ar|79X&bUMW^U% zwBy6*Vmz7T!qi>HVt8HNFoJ4m1NCCLCEC%g=t#SvBfmR30?pWi=zEW&fjoz%`W18l zE93ny(dU!fxv=5=XzC83FP=nG_b)oviF~2{s%Q?hfkNm2%Af~Jomk%%4WtJeX#eQ& zSU)zHOibp&Z7~ClbP*cBhiE_>(GhQr_jjWsIf<_R4EaN93!y2kj&|5AdJ7t8kLcZK zV52bo-~Ucbzu?mk?Qjk{_lwXBEI~8y4%)#gbj^H*KKFgR|09~o-Dn2~(2oB=1Ns+j zKSP1gZZ`GvKQ|Y?P!R2?6#8I!^u_A2+%T3~MmwS%+=d1;2n}#dtbaV#KaXZ`K`gI8 zpIe9NfB*Z23me)MA2^H#bT*a~1w&xj(GliGGgAPasx)-!%A-@$2z|dxv@hEJP;~V_ zhz9giV};QAl4u~+(RLfh za@$z$UMPP4-$jM1co^EzL^RUp&<5tj`q$Aw*PsoqkN3BrnfYIIFWTO(=v1CTr}82i zXr{tpx8zQ8;R7Yn8!A%aM?30<2689*+%WV*X&ibG%|J7=1byy(^tlb_``@4g z+l5Zi3G}&S>J4ErWJgnWBRaPg(ZH&s4K;|iiS^yl4E03=9u(_GMaQE9n2eqavtoHk zEU!l1OD48(VM=#|io`DT#e?XJXJdV)8^cI)pdA*9<&tRXtDx=FjQ8uIYo~d%2bzH) zXhxEl{`bEpxo{-U#v3o8BVUX*xD4&!U9^GKXhyc7Dc=>#M`HOb8enRXkjZT5bGgwB z7e)K4V!ivncC2WDrv4UhVAojR4~=*Tnwc?ZW~QKlzJ$KFFy4O?(-$fF-gIvEq1q;50hIb7&wL(n91p(FW4c`cmjfs>gDDG>|sv`yFHb9kG5WdSc!e z?>~^n{x`D8v0?@q`73A&7or_4MH^m&HoPI$e}e|F7ai$u==-P8_s^mMUq*kElCfxL z=W4V*d(mX5$U}wOqELLG3fe#|w8JK7Ah)24>UMN3j6ef;6z%vawBZ@(^Dm&=baA}D z25omeI+dG~T=>H7=z)0Sa4erkJGg|N*;f?{`~7DV#4QK<}@K@-Fcc3Faf_8KP?I26>P%enB?lQ4lE7}|zQQsNI z;q&M(pR$)o_0N0BL@O?;QZX9K;pJDaq*Q96 zF%Cq(j=vH80*h1r6-#5L(y8fxN2r7Y{rP_|7mc~G9q+>2Wx~(*W1?@Oi)$|$`4Mc2 zMazaj`lErpf)(%-+F{{x;fL17=)n5mz!d&8i;O(+S9vn;{=cz8_zg%oY)ko0?1{_p zUc93_1nXW4TEzw@-56!O;u-RY@N#f)65V zCGis4@Z4CQhjy?4-Ii~m9juM@o6+sN9dqJNbXy)n1Nax+_nGR){eLYN9vFGheO&^5 zp&Hsz6Eq`j(1vHA9ln5`7Ynfreuyr*1L#09HVEg%jp#vD4INk;EQy1W=aPvTT%?Z# z-M4GeRl6I@;h*TiQ@CNcUj@D2KH4As5oC zKk-w1;24^!3ur*On}mkSp&4i%%RSMKMx)QoKvTX1OW_9ehs~q0KBZ~6UkI(Qfkp8a zOd8opF8q{w7+oYUVl`ZhcJLEc#gk|tX*Y-Gt7AjTZLkqeMUU>y=$~q@#QXJ{g7roi&ajicZz5XnQ~70!$v^!V_(3hp^wDMIV@ho&$@~6tBXY zvC^#}z)?7y@&WYu4jn^^dq(@C^&_GWqPyZz^t^dBm`uFGg$K$ybPa4l=jtGux|7k= zPNAGPS`J;D4bg_XV)|l6x97uXM=zi!;p^y{Sd9+sJ1p$}-_M0FUPNEKwsY7n#n5tn z^dRbp&f$c3|Cw0-Cc5o*pdT_9(7;-E3EQ+Uy1OQzfj)JUTTi(dV|r`$wWF-NRxnga%d=O>sqRhxPFuoQh8E88q+FpA8m$CO*{03-qCx}KpsO!xDY*f-o!e%A8n^V&v3seK1jI?nu&$6erZqkzYngW z!h_;t^o05pP31S}he$gN3mx<#OnG zketMYFRqVn!-|x5p&eb_I|Py+ox2;+`m$Ia>*7r~08Q;2H1Ne}#@<3R@+bOz;;K8s z``M9xlZhf+7-5A_k*JF{)Dlg7N9>Hf(Gzbaw!{ChC${X9n*I+D7N8^hANt`_p>J3V zgU|pMqV@m7?wIS&RQ~Nb`+qPO4X9X-webW_!%}yJlWrB>Nx5jhFn5ol9e;)6tnZ(i z{#Wjo(G&3u_QJdF4(GvIyp{4b142e_M*~`<^w0lvT6|z&__lgG8sXb$CNc~PslOJ@ zNPcw6N}%_vqA9M2PE7~&L#i*Dk;l;I_Cyb%-ycq4vOO2q+!N-kC%TIJpdAcH8y=5s z@fmdW?m-u6k-_2Hb5*qC@#q{+!%8>{JvTl_*Ur!AR3Al8$a90)|6W`>B&^mFSb%aZ zw7w&HW)F%^LQlroSQD3F1^f-2ikw4J6A$4uG=QwbQWN8`4%+eiXds_OzZu5c`=r(F{J3 z`}>JQ=|%za;K`p=RR(A9nl?eJeT z)fq>J%;iPbR7LFS{%_8OpK^2K10SIce20#BH#(xDXhRp!xxe=Q&_Pi&wH46%CTNDb zVtwq79dSXdKZ9m2bqu@7{hyr+r=U}`C%OpxM#n^_p#d#KQ@8?M1E0qGKcj2s4EkL5 z2f|1TqwQ5k-)j@gy)bDcBe`&OPCyTi+31MYMz^CGITHO7&Bz5b#o5P(4hlpoqf^=( zZKo5Oxq)bg9z>_$>9Op8_xo${f%WL3`93~)EIxP{)2Pq;U_2ktMcNTvGk2jK4n{}# z02<&FG=Mp1$IH>F`3%j__6OPjRvd^Aori_Wb@FueivKe zX>{Axc{t2%SM>RQXh);bK*vR&jLyL>)W3yEzXV?4!V{|DBO%o@&;|~p+v^WBptEQo ziAO^!bEB)eFgnue=t!GjY3zm`JQLACXJQ>(fv%-vkFx)5AZ2nm$qHaG$~Dm!d!mbJ z1bR-)j^%gJlWq@|#dBzYX^*8Q9>of1CRSh?Za{x!`zsn~$;VUE|0DEjkCS>+@e~y< zjss}NzoT<|1szeADPh&#h-R!I8qh=N;(8HH^~-2GOVQQ;KAOp|(15mPHdH{_>J9r}cEV?M?pdGx4PSF~4AYY?_97Ny$8x1tW)KE_5 z=EBuj6pg3?+F%{*gssqq=i&%limkBllcA%#(S1D@eePNGtJy+yo9;r}{Ra)?s;9!5 z$%pitOjPE=i0YzebQ|=+JJ1n~jOEAChGwJBy@s9fBXp{+ofZ~rKJ?rug6WwSga=>0)x$Dg1X+k&QiFB;$l zG-H`>e3#t5YtB&9MU}TW~Rpi%Pf`d*Lbro6!H@N2m~Xuk`RTzCK-#}3%|rSKPy z8R%!i9-M=D=cK0pS28QnFO}uyhBY$~P31T&g%6`A=o{$wgRSVt?eFN?%JOn}K0kV} zC5v$399KsdVKa2wbw|(WVVH)Ku_(TVj`%CI!5?G!H*~xG70Z{=lP}vVVXfpscSSi& z!<&!*lZh_zfl+A6pF|s)iLUDTm>b_kJNy!j{6};V9zz#Z>Z{@T+|iQgfNI5Z8+3Qv z9_z>Bb$5iJ@8rTcJczE&W8T2O(3D+@(1YRuwBZTp;(G#J{Vzw?p(#Cp z2KGBTvWsZOvb`SuY*!m?w?2-;X6SqC(Z#qa$%S)q1nuwyI(Pq~fn2jB+|PlQ^P;IN zgg##k9dRY}z53`Py#>ukA2hJR(Q(+G@{{p?awiu?crZS29PQ{rEGOOwsm>9-0d24x z8bDq2`4;HN+M*fjg3j?EbeleezBenDUkfG^Yq{{G`VoEM44Tr+Z-z6!5SFA|9j)($ zrfwKIr_<2)=AuXN3Ur%oLo@q3nu$|rKmW!0{BJn`_WzAsxP8i@FIGn*?ua&g54ztc z#_~)oNcl~4wp}*pTwBSfBsx@a3~OW}tomrs80{f<2xTuCtS%K@&Io*q< z>=-)I|6+ZXrJ+6_It8U;`6l$ao6#xgga$qUZEpg)MxI35eHoKpEak!xe1bOkRV@Dy z%ll&a82bF*vHq%MVQu6@-@g%kzbw|q8t9rBj%MlsG=K@{BAvdB{qH`WM}-kCMLSp% zAKVh%i@tCY9nlqZimrbr1W*xexGp;Kc4&Kj(e{SN`ibas&&B%1@38-^c#jGL`7-(g zmZ5wAJ#ext4~wxP`tjNVef}P-fn(5imZF(hhwX4PmcqO%!ok)6TTq^gzW-g4i?6x( z8ExS0l_6DY(FZnSOZ*ny_xaup-;8cVJF1PQ{ATq14(Ou26V2EdG*eSzc^>-QifD2p z7jCN^vEm52z5b2$`B#M$mPZ?`hn^Sh&^hgbW}qj!_@2Qg_$nIU0W|RA=<|P}?VLy2 z;eY?_y)e=o=-GTjv^qMnw&;kuqjNhnmM2ALpfvHpVt+;7_3$Scs;0W%M)jeEAWZ z<9=+0B|qf6asLnI!bLI#U2N}QRospxFyrd*Cz-P7N!T5W;6wNlzJg`3)<@wtBzK}8 zR?{&JS72TI9vfk{HQ__59VYE~Y^<1vuKKOm7SE!qxbesSQz?F5hpq5$bQ?DOBz*37 zLD#@C?1cxhzxUUMpBWe7M9R6>h4-Jsew6pDWB)rxjn;=B5PF~o$5eC?ZNvtc@zd~c zy_(|9l*gd~u0s!)tQ$hgbEAu^BsxVk(Lg(*Q#dgC06Ha8HYCF$dp6#91ziiv(Czmz zIt8217fzsad>%aqGHr|}9@;^TX!BU#72O4QMu(!i=K;)!$s`x1ZZiIiYtW8ne-`F& zVf1tCMEzlO&g*<0M)m_fO8Ix}mBMGq7vV!@)0bi2Z$lUJZ_)E;;90*4YbaTf3%6B! z^q{yCU4#!}IeZ0O-J7EO(bS$pN04(L^H7g@5OC+oBO}v z=G4R=RLnsGnX)BhU~cp^%s~BebS_t+9dAZI-@ic{-hp4Y4PX`e!bWtYJJ2I^7gojtSQ>MD9iFd^2G$aNu07gO7j&e( zV|gGN=ty)|jm7l;{{I6m?C2Bp8_))HB>T|Ca|&%R^_$=|XlnDIBkh6)a3^~33`7s8 zsW=+n#4>o}x8aLUOZ1D*xNq72HawdOx7`AC4J=3J^t0$USd;QD^usB~ci}9rjMh&@ zpZ^ri+*WjIen#8>C3*}U;2CrZa(vJJH}$2z4X4xLzyEd8^tuKORs5qL@vgm;8C%LG`MH{S-4`D4_gO2Dg^o2|4+Q{)ks4s#B zUJe~`T`Z36;{B0mhvTshK8(KqF}lsSU;#}2%7xqFV!V-SM|hwdnxdxBp6F3M5?vcp z(M-)jGqM2FPfm1Ae2flYQ@sBJ8t{HJ;8V!Jl8KZb!;L)XjS}b@sEJ0}295l#c>i9k zLitggiSMD$xBg$4+urCR9ET3zWps*G#rl0{dx@VMNRrQWE{rq{jj%jAl6vU&X^pOd z&S*+|pxfvUw4niLChkYunScg9CElNh2K-Je??>0xNvuWxiSu0e&870r@N2fV*p>1k z^ud48j#GDq?}C}pwQ?)k@zdy(%tW7i4GrXNbU+`VQ}QJm@DFH!zhcsq|Hp+LW!oKI zydHfa4ZU9xeX$V^!duYiKSVS2Df-+u=wdy926hHr8~>qGlxa^W7mSwL!~XY$YE;-j zb2Q@a*cb=K@*C(PU5%~rn^?}jH~hi$i-Ci}(#nu5`6J0P3N1{jSv*_pdO7t^e2adptXo`pa8UmSw1~Ltu z>zB{~Rz^QX2ax=h3+He@x~fm0Bl;Wt^!gWFOxX{Hh69!9t23&CV!85fnP_&h#v2Ki!;$oyMKd4F^S%g`zM0-drvhr(w;UrayA&<$9yg$wJb`}bWH}txQfW;8_rDFeFm+wgZz}g-30#Us{yjQZ2hj#Dqp2@^By6{4 z==N)arua7Wy}@XTC&c^HV)>QmGR*1zUmGjFMW+BgfHDE{lGOH9<#u z2iC=V(K%m=L-8YY%CDh;?nKv4?&ER)7d;-PpgNj?R_K1c6^(ROtbZ9@ zWQ)-bmth%PhyH+Z1nS%E&6+`@$s?T#Lb zo<`4s3+O(+63ZF?j3*b`VR3Y=RFAemGuHzRYyg_Er_i}i!1Cz*cIX`TL$~WpbT|BjX5=iE#=K|3?*SU3=fHhf1Lt8&{1Nx~`G3RN za3K7PMta@fp~G@$!)?)q2ce7YNpxhZuodn^2T=4}c)kvLM0dlE_#hhiR&0;IqMs>M z&U4@WKbZ>~_#gTycM=UG<3AygBIy2aj5gd84P*lPo$oa)i<_|~owEaPtbkRM^g&jW`oge)mx(!`KzoI`l9LJlm?0=!$8~an9i!Rp0g^;1^(X~?- z?YI#dNPBek_qf3Rug=BYR1Cm5=&DV*7+$;q_}~F_v7JH}O|~ncp*ye=Sc65(>SSUL7k&t>LL2-NP0==VO7@~_;w0M9 zf3ci7H8hk5&0vverDy|m3fskUZ}k14XnW%@{qz5EE=W8pk3rj;j%oNxbRD|J_TzQ#|Ew7^r2osNf@p*-(QVlkZRmEi zq0yLrwxa<)k50uB9Ei)&-IVXD@LW4|k=>3?%?s$-nTP39h{>K*tmMLuugMgqq5xX1 z5X*JZ6RbU&ss3nyBcfx_h98PfL7#gT)7MO_e-jO4725tMnKJOd|HQ?XSg{Ws=^tqQ z1#}HucXbG?DEeacSZ<1L%dY5@42k6l(dW<(-#|0BGP(gB!1q@tLx(%5=uE{Cw1aw? zGo+tnt=(Fr)3EpK7(d#HageK(e1lC-rt9|b0o=y`|(_? zxDd^nH8fNJy=+tDc)fM(#{SU(QU=wvh_$rrfr#n-Vv zeuyrP!qA@u_`@$>&E7dBk(y0DK2q7OcWKKOEUC7QY~(fz(N)?Y;DHfN5I`s>j}Sp*HN z20B&s(5Y*RwsQ;K;{NZ;MH^g>&eebD>d%lfL*gjrLyyixt}wD5=s`08Z77Kb`fMz} zj!xNX^aqwr*Z~hmYvvBmKaR-{xG|TDSFlr_5cz3z5oNkQOid2-AgYZe@m92hF=!x< zqp6;U74RLbihHmkUYj>eSv_=7jzrrVpO^h#gp23nja6vs)}amWK-a_x^o76CxxY4F zsBem9tPPsl&gk6tK^NOF^!va#G_a4bBOXQ$VPwL(w4 z+tG-}#QMqTRLw?Hy&4VZb94Z|pn)Dicf%j(8aa)QG*LL13td|!FwOm6i3>;E0bRv? z(LnBxPDL~G3O2zvurVG(M^gTVkn)?*z#7MLJ2WFb(Sb~f&cd50FT(VH|ML?UF191l z#Es$ex&XRw>!J-eK~J*wSQ$rQ4P1y0U?5746WB z_A1W)_r(EJxJX8#Q}GD8&E`f|p&8m5-Gc^j9BuFnn$naKA3YqGT9AW^Bpx1<@(E3(edRbfA-B z{gdb-e?G~DBUlnE-bd$bb94vVzyv-U3>@87muLrwL@*#D(&=eQMG^~bZs&lj# z8ql3+fCJG1j>HK#1=IiiU&aby&aXp{(1K_~MbO<)3Z2tN=!iO?bJ-JJD}&L7??(fl zhIY6WJ+O9QGyE6b?hPx3_C{gSPp3z?FqN~>7nWdE+=h0184W0VrI6a|(T96SzYU>#W4IgzZO?%t|kA#f_F0_VXZ;7>3)Sg45OZwO{(Jr>Lh zhJg*hH{e#VT+sm6TJS5_N1y*MFXntwnY6f*SQAu3Zcv2|fN8xG7gK;1J>z*f|E#Vr-!`F439P(lmAe&7eNA=s&O zfahmCC%~bs^ObRUyTBT(qn33VX$rPwy#bsE#w{1%`K8mPpgz4%R^E9v?*%Kdj#h!^ zzXX#8OmxI^z~SHna1Ge1Vu0rxi%~1_l?v;8pc)tn76cRu^S)!A6LsyzQ8IL_i|2j;C7;Q6Z(3&6vyzk{v7{nhPLsv6D*m7<`I zbQ!2GMvvS2F{q;rs2SjTQ%Z8)QjXSr~-FD-Sv+^<^8sGochieG`T=E6b!0RXHc))?x5Ze z{Xo@qk7S}k)6B6LREHZuy*hV+dSjip^;1y%FJLS%Tmz@U1fUwp4ysUTP&$>s0I&`y zegjY^(*fk3bGrsGQAdYBb#xA_3f=+BgBcn+{;r^SgKa&|*0VtsSPo_cSKIoE;SEri z?he=nd=5?lD>c$5uRMSEnCL~4s^9xjC zd73&WRRYvaSr04#b_exlTnDBAUxWG@GfFdF?Rx$*GD!rM0(E3fK)tiuf^_vVdCW1=VN?a17W0 z^amevS*HYZfqg(dPHREkbeljmwhhz{4_Q1?Tjyk= zgDR8|)JD?SIyb1i;%+8-POE@A>N=o~Fc?%~D5%fv`h!ZC0(Joxg1WZR+c`H=YEbWm zlAunmJgCR5DJZ=zpia22#m9g;8TUdX>;$!=gN8>9Pg?vesB3)<)CoKQbuFKQYBYR% z=hDRn^{G`lFez9N)YDZDRNgc&4LBR*!#ThI&qNy(|GOH%;UrKoD_*0$~os)0$M=imRC&qReb z86E{y@FtiSd=Kh{lCHCJLZv`myEdSB13|rLW`O$edI8i^5-!xa6m>xH+ktw|xWSU( z9MG*#sqQk-(ZuiK5YvG=iDHK3!7{9CfI68Opmw$#RQ?`N_s+kd?uD81}k^v`Ilo64hgLS^=f-Jz`*4;oojuSxLJ2MT}f@<^ts5jkFQ1`?MFgy4Y)TPMU$GK_U<(Oo`(E)4& z&H&Sc-#{ICs=iJmnLwRXZcsZa1ZoFmLGhY`YB<>9p`h-GexMp11nSa`26b{P9CW+3 zGLhgxP{cE!-dxu}CAQ<|_nh=QTjRaN5|q52!cec*Dh@j(i8GOLx@p zBIx=3-@8oI`4doyuR$fa`a9P&x?x;U4JHP~Ph;z>pc=^!D!($Qd!YrWOV!qJC@9{1 zP#fM1dVc?RFB28K4CXn)o6t5Pjowo*c)Aa^*DMo_Qn`r)d zpbD-9b@V$x@s5C=-~T7_3e?UQgWACsTki&S z5@$d)cpub>yau)7Z|09M*tvA^43iJ$`IlgN9NIwvQ19}Zpc?1}s_+bpZ!$au>ck#{ zIBaW}m5!3!oD2fD(QV>aP9->Jmj6?&PNiRUi+j4U_?uSK0jaK%HD$^M?wl@9M`y z!XrRE9@C7l0@StM464EX7QX|P4-vV^& z1=E#@ZnBY}uGKtH&;Kq^#2cU*c>zk`BPhY2pc;uf(rG*)D1IixLZEn+Kz%G|2pc*O!>SnAAN~jqqUT4F;psxLJ!+D_IaN9s#!jquxq1&LR z5m1*ZV6?N21!`kKZYJtHojJ0CI_lh@UOXj0U6Mwig!+JbDn@~7Xfmk$xu7<%1k|P6 z0BYw)K@~m)YGXG*HU1LR3(x(ViFTTBj8h;ps2vmnC0GSip$4EXL2FQr^tbp}P?ur` zsC#1tD7{Uf8b4zA5LDwoK$#Nt|8GpxX*y6l&kU+S0Z>O&9@Jw~6;xw&E#3}P z;ohJGM}a!>sh|pN0JZa-pf+#})Q&HL;=l65dHz0`!+)GZh;Eo3RALEG4OKR5WEcYK zmE0H9D|b4mBi;t;h>w9m;5|^6=qIR+1dewuQBRpc3AI68sK|A2`Y3#{ngj8WcY(s6u%`@k@cytqkhvX>8aX)Xg~7 z%|u7C6jb7BP=Y%^2^<8q<5QrH@*=36-vL$d1*kXWTTuBQKwabCpzev-lbw4Z4XAiV zP#ekzD&Jj(i8`zT>KZly)j(%Zjr9R_GYtY&c$oPof%*bty7_0Bf0^MLP)ENB)CP`% z(meyJk!v80xLuE#=$gF)_2vrv!%0XCYG)}yC8h<{d3I1YUr|se)D)CpTTuBu%s&>? z2Bv~~FU$tDk!_%Mz66#UBOg1m=QjUT#iSDW3@is`pW*zVpf^~V z^(jz~Y229(<^)r-t_J1;yMx8S6<}}hIamg4GRyg$uqB`xjyKzBtRbiqoH?84zbKPM zIJATNpoG%S3Gn=rs==T--v_GTXTv0Oov&t#gMRpj^G8jN?hlS}n$8%z&gjndNvNwy!&w3X8gxtOVM&SJCl2DF2>G~I;diigGp z34^_eRiQv>^m3q^nv2~6z1{exXwB#ew-|Yg^#8B+C!r?69L!G=EX>?%eeg}k*B7xi z%p=f<>;jmWdy3ptsH<4>pM3w%@*pCL{Jak5{Bou_`!GNEJRo~5#C}uufM>iXrv{78}r+6&cQi^e$j~B1EUD=p^#sW z=Ke%D2waLl3A*2D1zXd743furY`fVh2q$Fzyz1(U18}TmK-|2GNdIP&x`dGtKS9 z`w;Je?;M4bsW|3-MM5^jenX65Wd4$dYZ1P!4#!oHlekY4(JUz$%KM4;rP24~Ph))EDkw2$T@5p#W<4P_~P37kp8)yV~~$C{zmi( z%9U*^Dk@vXIvoimz#NEr?IS|^P;rs1$j;J8SD$z!a_+Ex#W5sf{?m8?G&&W2Y}WDo zJ+C_o+eI#i^BIJb5UP^2hQ``3WRt<{2yUS8MCR4to`)mbpnMvbL6cF~aeebI2IJt{ zMvm+g>y6|-vUo-Pb6ZtOE{AYU<`p6FKeqqRTG%`qpV9a+W)mrkpsbVwu9CLv3y2oR zw+g+(G!cP9UfT?3Jq^nCQAbuEbVr7?g~aUOZR_$R#8k|8aJ?oG8wRm5zR`$8f%gv$ zWTUYI6bV9T5(Vcl|6#%sZ>c}b+M{!qc}?53*I!uQZjFO*WfC_-%3uxr4e>RiQCP2} zXerhYDZG%PyYYuGPU9a-BXybYB3BlZcp~%~(aacf)`I^sWQmRQjCm<||B<^_ue#+3 zZN;&Lz#POjGrvPajSxr(DI#MNoJ6d@ea3tW<LjHl!9SW_Wu@4CCVTXATl5HjLKI@dM zXOg!8?lydfP45D}w>B654&2-51jE0=a6hF$Av>Z?1WvLp2k8)vR3YIZu^@;Y5jtW! zngP#iD~JuGxi9!Cu|wH;au$)_41Z4a?h?z-IzGCx#OU0DQ!29ORnJQs(lJQ)7!wJ; zhq!@)JLo(M1#;v2!8|-k{FPIWJ*HS9VqSYdtR=o$_-dQ~1vnDz=H!;7ndjtIg!c~o zlUla}IsY>(CP3obhOR`mgM<{E$NWBt2T1hV4km*T@Y*MG4iXQ5_kf&Z#4cI!*c6b} zbimcc{QlHhL*8?^t@Ql&W-P-Yo4^QQzLVg6OIVIjbdvt`F!*Rfu~x(@T7kddccO`8 z_+^KP$(mcdoB6NMU@GSQE&d1S9*bitJFSaIeMBlzbSfv(hJwo(tBEH8V-i1#=ti(L zJkR%(L0Nw*R1KYsT($(ZE=GYe6di`fZ}K{z``C&r@1CCjT@ZeeFouzhLb(|87_z4{ z^9TO+tQ)}dwIm1*G6&ywbRF`Ecee%4bD)-@25EvL{dxc{*GHHgbL5FclaJ06bSM?WzQ++ZC< zUV4W66^XGSbnbB@% zF*(b@>6^zJB-P$>*3!@QgQs@ZP$UU|7PvAU+iKZ zg;vD>~h=frv0fDJj;G@q;JV*FE zys;eLYk1?pD<+l+|1z7mHXM%L0mfj)7dwUeXvCnI!f^V5YxU(`VZ>w+Af2)6_zLlp z6#s{Wk&NjiJi^xrZfthfz#5wfzc~KB6!{BIR@U`R?iPa#s2<--}W5PKqT?T)% z)Or8@hA@F0>t>YY2l@Nz9%~IT4Gnm034$_zYqT-3l-A5<=K5*7Y$zIeZSHt@shLhy zw6owG%wIS5#HvG#%W?1>AJ-hN=WxaaNP8?Hmv+azE=7~T4Yfuuu&!Y9^I&~qdC4tp zg)5*Q4_$q~Xc_TYnwx!NBMtQV-zI`ytIvEs;}yc05Q%Nq?Kt!8H0NhWo7_(4HpMC- zdKdo-<0iBddMZCfJD}IY8d4p7$L1CMyu|Cc5&8*Xw{@_Hgz)%!BK*aU_!GqHCT=v> zK71Jvi2?T|^9P*Hzs4EKx`q`@hQ?;rvbfZVVH?moCu{e91iG`R#^?xn8-!XU|LfCn zL1K|8u$0k>2B*{9XGHIVvhMg=p_7UDAewk;x&JZWgXUFEBokPhHQ$ExSXzAT{kZ<` z5K2LCDq>v-ZYMn7Nc|B!gjfb}mL2OGFg@`}_;*wIG`k44Mi${;W;|6%%zB;AMv7Cb zG>xwOpO5Rm0a87k0^OB`P{72VAijdel0r`B>6y>th&^Jy87_b4-IW}aWu?I+3|S)@ z^4bNP6h)VBVY@=f;UDktSR?f9{^yNGp?47a;yb~-0}0_-%U(h}B{Fu6qUlGgY&U4L0bimpI> z2ZdW$BgS#%L*xbm4ONijg%;P7Q{IF-5DKCJSpwp1z{hA7M3>*$&AK}^ z{PazoCptExRyh_p(a~z@TEC?WPTJ@8rH!u-?3iGNQY8xQ>#bIHHZiJ+{XQ_?ZR-1*gPGa zC$c#)LO=dawt{(IEW8JihsJfuHI6 zD*_L}dlWhX`r1hfbtd-@xHs7SZMc^1n$K=O5&L2ZlPR2;M(S&=$M_RscM%9j_vcC8 z2%#tm+w9J&0(lW*Gu&&aDyJjy)Z|?yuPVjH5pP7}_lWOgl;?!_>5JMs_-t6|Cm?-xEsTtq71^8Q7<4=4x&_ri>m?E6I{(*46~FXp(uF!x+bi9}|R0b+Q9 z^Jt(u>k~9}onrB5Y$Cg=2iAo<2w~X+M7qI^M{EaqcdUqFZOLuJm}{polvr=_iW+B| zNSN*=S8j@QMm!Z_!w}N~7lHb!dI1yegtC0u4=lp-Ov)(MKkXXW!gIG7k-wU!IC&Issxgp?1VoS;OHTNnys!re{gb~bTSx5}W`YBE9 zrsyyP&k$Qpb7c`b2qq*)HVuDd=83f%Y&iTXyYVFYnG|oH3m{u z1m7TBf!$0tp)lLoPFRsBavkA)2rY$Mj)ofIzluE|$-9je-|1;vU zLDccuPW{w!uUWXnv)dYil4QnPLVW%WMA8bXi|J} zOz0R5-iI(0Ura_Ca^l)Xa#N%XTK(C`Y@M1l76IRRz5gTQSYVf+0l3HJmk`g7*c*!F zhn&Ow^%38WZwW;USdp{{SAw4qUQ}|j<8Q~tw0@qKgnZ*t?>)t*#AK5C^end zL_7;30f_e@sVc&Od{}OZsO+T!|NAosjr522n<483?>YI$Sht|q6bju((`%Q}+snEf z{)*Dn`L83vYq^!oALKO}I|8i_VB2psVtTT(Hh0xDe751UizOAKpjC0{p$K;As3= zS$|}VqR3pt|3oVim#ipF>_ICnx^=;8!~)^GL@y~i5#ZVV&$Wg;6K70Z#}U6rFryWj zO=4CO4_bFvTlY(Z1NUc&My3S;Fe^47w!r0Ki1!9V2(tv zgw~8(4amAeYC_?H7Kn_$CZd&{u;&+tG+jk}Bt>s}j*m}XSx+IaIQfs@M`NCdctbYh zwO=-=g=RI=PX#BdzKp#`(rt!p9LE`sogO85I6`$GrLmnyC-#h@2SBgAfYTen=InA3 z{{84AveOZ#IO8SxkI1V?EQvK;h&)+%KRtigzjR*%LLQP+BN&mjEDaskpqb7j6k#kx z;0FFT`1d1R6O?^r{6}n_PjdrkzCWBWlFK2)8D<+PceX z_!o&sh^-)@Df0}7UnQw5KCfN2VP8wbx&*wqG#-mUSLzI8 zU6-6jtjFlLR%BffdPu-)ZERkS&hOZKCL+;!u4Q!)`be`WDKL}Wj7M;|HFuWSGKMTN z{#xW`;Y8cAKEmir-gR;uo0jRH$nHXfOXA)^+BfJk>?#&vz8imEWMq37`B^`vt!HpX zP%<|Ami^26J@|#VY!$In*2XJ1Gp#+vax(I1f+g28aG3@+lemdO&1}CH*;`)<%^-O- z{qCheFV^3|Yxs7-txVoacx9LmCqE`5Ir)<*`~+VausnQOMRH@)L?Y(F9uIE=@_*?! z=U+j}OX7D5HAb+rCH)KW0OJ(?bmq%R{2Ph&DK?teMMTFDe_)ME`-$yb^XJS9z~4lk zECihZJB?Q4+|{>oWIaqEiI30>V)+n=if=DPA~6c!n~m=xRk(2vKeqnOA7{}cj$7psVJLrIG7331vDXh zMeajJ6N;Q?m*K>*LKoolz$Xi1bi!Yjk&=0c`6uW{`LZ93oj3z2+#ZqV%#*U4WQ;g8 z^cU#0R1|AV(KO&e1WVFjCE_>i6n^1*#i&fYhc#Lo&U}1c`_7~Yz7F2sxoSnhDHMvq zQ=XRKc$&xtzJw%eO@TW!*Bj16$K~2+v1=6SMe*05td|3xKjY(1OwMvvn`q_{x)pRv zST1UM_CJ(Fe|Gc^!PAV!jGGj!M)DQrfpi{=#s-p<&XSvvoQ8NzV#%2=!JnCVD0%O} zw`ks@@Mv%*c~Ri(V||x+L@)(oU1WZzc0Gx0De?@$U^?u;C_zG6&$sBhFpG~|4n_$3 zFHcF?b?`gVSI9nv=?0cbpJqGGJ8vdPx03SFVjRg zE3}09Bj%;h`pxJBe<)g)7?p^1C3Z$S_IS9OBT$V(2XIEB^Dl@_u)@g@I6&tqiOnX~ z0RJfBp$N&oA-d9;x}w9qMZ6xqR+eue4`d@A1Fa%xH6hWrN@i)bv9CXZk{U@nAZHQrU6mBUp%HvJ}MHk|^6_@d?EG*kw3_e_ys=+zR`ZVjF z;91-4DeA1ZMy0ike0O^YvP)nmie`W?o_R)^sl)pJv$!TY*zgs^@#L;y*MC@(YYg+k zDUClL_}etMqmS_)i_%38oKp!Ff>eYqk2^uvpX^39#E$YT+~aVA!SXbD+5C0LN#V0I zLb<;-gYa# zmDmf`E#a+4_&?J-VH%T2oItE5>sfXpJz2ZRkL&#ksRl`-*g+iv4~?XPcbEqd%S0oy z5SK+^{ez;pS?|W*h{k0d;l99^oI0#h3?aE2;@82eFyaXk8T-jElxv=HH3GpdRLS4Y6XL zC4US-+-pObY@&g2BoqXsU4A)!4&c%DWZu^WBr;22eLkgKRu%ZzUd_Uk@w4|`QrGNQ1q^kFBf@X)<7{U zzMA}==y*);pZEltvFi}?2_iyjW{LZ)ndI;qQuHI-T@=}bzduDEB36yqHpU9ZPjbV- zn+fh_9SP27pHodmZUJgcBhT~xyI~!dqx<5_2awPm@m|)z2Bmx$R(1 zd|N1%lOaow)@gjBK$%i1a_nC%ehU9wef)oe^BU3ljI>5p!ZsSoVFilOjNX*8@8Ci6 z4`GLGX>P1FsQ4YYGtfzHJO0jk9{vINDzJfEKHMMP-!u*-xSE9Jj8GcN$~q$R(%@W@ zPE&9v^R0|A%;zKWH^LWLH%I&w^D$r*xWyQm*yRXxWQQ1WHNm2)I8A$PvK!JmJCdyw ztOB7DqOy+&$sXdLMS)Hxm<@g$d=H5&W*&igI=JgW*?CTG9U8~+Md7o`)M$pIXl`PA z;P>>foIl)KEa{vb>E9&XA|V9=4Hz+qXC^5FLw3&ijaeUKUYMrRnC~8!CNc9G&{=?Z4zMcz3hc0=UEEw_WBzGgHB_o&}Rl)xNe;fE!z^LTr0WT9D zg;sRt9nnb2ycWJSEx!dW6V>aBfEj_8OCHdvOgGq65CEg-{IxaTWySy*HXAT^KM2?$If#x5>V_vM7;JN zIgcsS0{f=%#9xxU+Heby<7;o>$D)yeKK^+65zTrEw_+zJj2(rp zHzT?Y|9FzZF$UXFx2J$?AnO6(e#UI(x2$=^zA=81lMkI^#JbT;Q#HnX8n~O7Y&tbP zAODij@l^`8qO&VFA3^9z(tKSGDA!2ZLxFI_N+2?c`2gZ;;SVMj%zQXlj`#v%dl|3M z%*nbnv0~tIG>hUdK%L2~Wwmt@djB0HARCEDV-jLgxDmla6k7~A46(?($MfTF&#n$C z(X2GNpKYCzSPlv_w)Imu8_6%ix;4DpCnr4;t_%u_Z-Dv7@}?9K)A~oJ_1!`&2#$Z#KCRta*hVv6e-GE6a`U3wW12 z|F8#+j*!RL4uT*(g`k{L;A@Jkg4_^)P4FVc?_0A&O;Dn;uf*@66`zx84zD;U8_OoV z))rqL#DB0!&-G7=NF|DAVhm9M{6lxIh3jx!&GZ(~VDBE|;-jTzO+%SU5l(HhKp1lqC$rt=i8%zcG!`w{$$gx5GulJFN@CSlzH ze>+A?3M6K1An6}FMs4~}6FEUn1$ZfmwPfzK#c0Uhkt@4Pt+ga(M1K`nL;J6Y^EHIh z5GLS^jp*M9Ri@Kf2z*3%qZK{pv-4f>Zdrj4IEjqYhX(o@uP0cR*a`HfSz|}3w}ZSZ z_*zCz<7v$E$2Bzoxh_ovLt1a4#gW6B`TL~|42v7VZ&1asg*E(&l?sbB%`ZV<*t%JM zJ@SO*KIeC>URa#e{)Yl*wa(z5BCKKt|LozyR}1Obsb!BacUJ#@!i81J;~zhAK_a#I$U$MTrurX?RiMJro$Z6W z2ek|C6VkeU&)}ZHLFIxwwZVg8o8Zu(kj_Enx^(Z{t5Zw4LV6PE71}d6G%Vh7|4dOL z1=Z-@rE8ZSEjxu(*yNutPGHY2-Gjr19`SFRA}sq8{|5enJwn<9hfRIv|JXn5`%C|0 zDZ&S3s8PFe##sj=1SI#bT{-Np2m#yt{JPIt7%AYtNM5lXVT&RMM2Q!r{Ly`#dWN*? zNZqhaDFS{+4m+7CAag*(GIUY0cD0~cf!PAmhwsGxdj^N)&K8h7OZYk=orAmdnpMA1 z!0NzGEqk>M3*R^(u3z+^vZ1Y8cJ0A7dWLif4NKi5pifZbmhIYg4{pby_6%D#Fkon$whtKOI9ub delta 67866 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 E53dY_5dZ)H diff --git a/netbox/translations/de/LC_MESSAGES/django.po b/netbox/translations/de/LC_MESSAGES/django.po index 5faf9b341..be453b8cf 100644 --- a/netbox/translations/de/LC_MESSAGES/django.po +++ b/netbox/translations/de/LC_MESSAGES/django.po @@ -5,13 +5,13 @@ # # Translators: # Martin R, 2024 -# Niklas, 2024 # fepilins, 2024 # Steffen, 2024 # haagehan, 2024 +# Jeremy Stretch, 2024 # Robin Reinhardt, 2024 -# Jeremy Stretch, 2025 # chbally, 2025 +# Niklas, 2025 # #, fuzzy msgid "" @@ -20,7 +20,7 @@ msgstr "" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2025-01-04 05:02+0000\n" "PO-Revision-Date: 2023-10-30 17:48+0000\n" -"Last-Translator: chbally, 2025\n" +"Last-Translator: Niklas, 2025\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" @@ -1240,7 +1240,7 @@ msgstr "Transportnetzzuweisungen" #: netbox/circuits/models/circuits.py:240 msgid "termination" -msgstr "Abschlusspunkt" +msgstr "" #: netbox/circuits/models/circuits.py:257 msgid "port speed (Kbps)" @@ -1303,15 +1303,11 @@ msgstr "Transportnetzabschlusspunkte" msgid "" "A circuit termination must attach to either a site or a provider network." msgstr "" -"Ein Leitungsabschluss muss entweder an einen Standort oder an ein " -"Providernetzwerk angeschlossen werden." #: netbox/circuits/models/circuits.py:310 msgid "" "A circuit termination cannot attach to both a site and a provider network." msgstr "" -"Ein Leitungsabschluss kann nicht sowohl an einen Standort als auch an ein " -"Providernetzwerk angeschlossen werden." #: netbox/circuits/models/providers.py:22 #: netbox/circuits/models/providers.py:66 @@ -8438,8 +8434,7 @@ msgstr "Gewicht anzeigen" #: netbox/extras/models/customfields.py:173 msgid "Fields with higher weights appear lower in a form." -msgstr "" -"Felder mit höheren Gewichten werden in einem Formular niedriger angezeigt." +msgstr "Höher gewichtete Felder werden im Formular weiter unten angezeigt." #: netbox/extras/models/customfields.py:178 msgid "minimum value" @@ -9531,7 +9526,7 @@ msgstr "Dienst (ID)" #: netbox/ipam/filtersets.py:675 msgid "NAT inside IP address (ID)" -msgstr "NAT innerhalb der IP-Adresse (ID)" +msgstr "NAT inside IP-Adresse (ID)" #: netbox/ipam/filtersets.py:1043 netbox/ipam/forms/bulk_import.py:322 msgid "Assigned interface" @@ -9959,7 +9954,7 @@ msgstr "Ziel der Route" #: netbox/templates/ipam/aggregate.html:11 #: netbox/templates/ipam/prefix.html:38 msgid "Aggregate" -msgstr "Aggregat" +msgstr "Aggregieren" #: netbox/ipam/forms/model_forms.py:135 netbox/templates/ipam/asnrange.html:12 msgid "ASN Range" @@ -9967,7 +9962,7 @@ msgstr "ASN-Bereich" #: netbox/ipam/forms/model_forms.py:231 msgid "Site/VLAN Assignment" -msgstr "Standort-/VLAN-Zuweisung" +msgstr "" #: netbox/ipam/forms/model_forms.py:259 netbox/templates/ipam/iprange.html:10 msgid "IP Range" @@ -10095,9 +10090,7 @@ msgstr "ASN-Bereiche" #: netbox/ipam/models/asns.py:72 #, python-brace-format msgid "Starting ASN ({start}) must be lower than ending ASN ({end})." -msgstr "" -"ASN wird gestartet ({start}) muss niedriger sein als das Ende der ASN " -"({end})." +msgstr "Der ASN ({start}) muss niedriger sein als das letzte ASN ({end})." #: netbox/ipam/models/asns.py:104 msgid "Regional Internet Registry responsible for this AS number space" @@ -10171,7 +10164,7 @@ msgstr "Aggregat" #: netbox/ipam/models/ip.py:116 msgid "aggregates" -msgstr "Aggregate" +msgstr "aggregiert" #: netbox/ipam/models/ip.py:132 msgid "Cannot create aggregate with /0 mask." @@ -10227,7 +10220,8 @@ msgstr "ist ein Pool" #: netbox/ipam/models/ip.py:267 msgid "All IP addresses within this prefix are considered usable" msgstr "" -"Alle IP-Adressen innerhalb dieses Prefixes werden als nutzbar betrachtet" +"Alle IP-Adressen (inklusive Netzwerk- und Broadcast-Adresse) innerhalb " +"dieses Prefixes werden als nutzbar betrachtet" #: netbox/ipam/models/ip.py:270 netbox/ipam/models/ip.py:537 msgid "mark utilized" @@ -10503,7 +10497,7 @@ msgstr "einzigartigen Raum erzwingen" #: netbox/ipam/models/vrfs.py:43 msgid "Prevent duplicate prefixes/IP addresses within this VRF" -msgstr "Vermeiden Sie doppelte Präfixe/IP-Adressen in diesem VRF" +msgstr "Vermeiden Sie doppelte Präfixe/IP-Adressen in dieser VRF" #: netbox/ipam/models/vrfs.py:63 netbox/netbox/navigation/menu.py:186 #: netbox/netbox/navigation/menu.py:188 @@ -10524,7 +10518,7 @@ msgstr "Routenziele" #: netbox/ipam/tables/asn.py:52 msgid "ASDOT" -msgstr "ALS PUNKT" +msgstr "ASDOT" #: netbox/ipam/tables/asn.py:57 msgid "Site Count" @@ -11552,7 +11546,7 @@ msgstr "" #: netbox/netbox/registry.py:14 #, python-brace-format msgid "Invalid store: {key}" -msgstr "Ungültiger Shop: {key}" +msgstr "Ungültiger Store: {key}" #: netbox/netbox/registry.py:17 msgid "Cannot add stores to registry after initialization" @@ -12431,7 +12425,7 @@ msgstr "Warteschlange" #: netbox/templates/core/rq_task.html:65 msgid "Timeout" -msgstr "Auszeit" +msgstr "Timeout" #: netbox/templates/core/rq_task.html:69 msgid "Result TTL" @@ -12501,7 +12495,7 @@ msgstr "Anzahl fehlgeschlagener Jobs" #: netbox/templates/core/rq_worker.html:75 msgid "Total working time" -msgstr "Gesamtarbeitszeit" +msgstr "Gesamtlaufzeit" #: netbox/templates/core/rq_worker.html:76 msgid "seconds" @@ -12827,7 +12821,7 @@ msgstr "Fehler beim Rendern der Vorlage" #: netbox/templates/dcim/device/render_config.html:70 msgid "No configuration template has been assigned for this device." -msgstr "Diesem Gerät wurde keine Konfigurationsvorlage zugewiesen." +msgstr "" #: netbox/templates/dcim/device_edit.html:44 msgid "Parent Bay" @@ -14098,7 +14092,7 @@ msgstr "Hilfecenter" #: netbox/templates/inc/user_menu.html:41 msgid "Django Admin" -msgstr "Django-Administrator" +msgstr "" #: netbox/templates/inc/user_menu.html:61 msgid "Log Out" @@ -14513,7 +14507,6 @@ msgstr "Virtuelles Laufwerk hinzufügen" #: netbox/templates/virtualization/virtualmachine/render_config.html:70 msgid "No configuration template has been assigned for this virtual machine." msgstr "" -"Für diese virtuelle Maschine wurde keine Konfigurationsvorlage zugewiesen." #: netbox/templates/vpn/ikepolicy.html:10 #: netbox/templates/vpn/ipsecprofile.html:33 netbox/vpn/tables/crypto.py:166 @@ -14540,11 +14533,11 @@ msgstr "Secret anzeigen" #: netbox/vpn/forms/model_forms.py:316 netbox/vpn/forms/model_forms.py:352 #: netbox/vpn/tables/crypto.py:68 netbox/vpn/tables/crypto.py:134 msgid "Proposals" -msgstr "Vorschläge" +msgstr "Proposals" #: netbox/templates/vpn/ikeproposal.html:10 msgid "IKE Proposal" -msgstr "IKE-Vorschlag" +msgstr "IKE- Proposal" #: netbox/templates/vpn/ikeproposal.html:21 netbox/vpn/forms/bulk_edit.py:97 #: netbox/vpn/forms/bulk_import.py:145 netbox/vpn/forms/filtersets.py:101 @@ -14575,7 +14568,7 @@ msgstr "DH-Gruppe" #: netbox/templates/vpn/ipsecproposal.html:29 #: netbox/vpn/forms/bulk_edit.py:182 netbox/vpn/models/crypto.py:146 msgid "SA lifetime (seconds)" -msgstr "SA-Lebensdauer (Sekunden)" +msgstr "SA-Gültigkeitsdauer (Sekunden)" #: netbox/templates/vpn/ipsecpolicy.html:10 #: netbox/templates/vpn/ipsecprofile.html:66 netbox/vpn/tables/crypto.py:170 @@ -14660,7 +14653,7 @@ msgstr "Peer-Abschlusspunkt" #: netbox/templates/wireless/inc/authentication_attrs.html:12 msgid "Cipher" -msgstr "Chiffre" +msgstr "Verschlüsselungsalgorithmus" #: netbox/templates/wireless/inc/authentication_attrs.html:16 msgid "PSK" @@ -15638,8 +15631,6 @@ msgid "" "{device} belongs to a different site ({device_site}) than the cluster " "({cluster_site})" msgstr "" -"{device} gehört zu einer anderen Seite ({device_site}) als der Cluster " -"({cluster_site})" #: netbox/virtualization/forms/model_forms.py:192 msgid "Optionally pin this VM to a specific host device within the cluster" @@ -15977,7 +15968,7 @@ msgstr "SA-Lebendauer" #: netbox/wireless/forms/filtersets.py:64 #: netbox/wireless/forms/filtersets.py:98 msgid "Pre-shared key" -msgstr "Vorab geteilter Schlüssel (Pre-shared key)" +msgstr "Vorab geteilter Schlüssel (PSK)" #: netbox/vpn/forms/bulk_edit.py:237 netbox/vpn/forms/bulk_import.py:239 #: netbox/vpn/forms/filtersets.py:199 netbox/vpn/forms/model_forms.py:370 @@ -15993,7 +15984,7 @@ msgstr "IPSec-Richtlinie" #: netbox/vpn/forms/bulk_import.py:50 msgid "Tunnel encapsulation" -msgstr "Tunnelkapselung" +msgstr "Tunnel Encapsulation" #: netbox/vpn/forms/bulk_import.py:83 msgid "Operational role" @@ -16140,7 +16131,7 @@ msgstr "Vorschläge" #: netbox/vpn/models/crypto.py:91 netbox/wireless/models.py:39 msgid "pre-shared key" -msgstr "vorab geteilter Schlüssel" +msgstr "vorab geteilter Schlüssel (PSK)" #: netbox/vpn/models/crypto.py:105 msgid "IKE policies" @@ -16273,7 +16264,7 @@ msgstr "SA-Lebensdauer" #: netbox/vpn/tables/crypto.py:71 msgid "Pre-shared Key" -msgstr "Vorab geteilter Schlüssel" +msgstr "Vorab geteilter Schlüssel (PSK)" #: netbox/vpn/tables/crypto.py:103 msgid "SA Lifetime (Seconds)" @@ -16390,7 +16381,6 @@ msgstr "Funkverbindungen" #: netbox/wireless/models.py:236 msgid "Must specify a unit when setting a wireless distance" msgstr "" -"Beim Einstellen einer Funkreichweite muss eine Einheit angegeben werden" #: netbox/wireless/models.py:242 netbox/wireless/models.py:248 #, python-brace-format diff --git a/netbox/translations/es/LC_MESSAGES/django.mo b/netbox/translations/es/LC_MESSAGES/django.mo index 34276d7000868fcbb655f738f36e8594be1705f0..29c90fab3934d7f8281867a1fb519397c2c2d640 100644 GIT binary patch delta 66628 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 az{%i+83W$74-N_nco;JH%EEwQA^#5vPzGcG delta 67644 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 z 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%0AUqTx^fKJhIG=RUc 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

    {% endblock content %} + +{% block modals %} + {% include 'inc/htmx_modal.html' with size='lg' %} +{% endblock %} From e86dba8fc8addb73215721492f3072c84f3c76e8 Mon Sep 17 00:00:00 2001 From: Jason Novinger Date: Fri, 28 Feb 2025 15:42:38 -0600 Subject: [PATCH 125/152] Fixes #18768: allow removing secondary MACAddress from interface --- netbox/dcim/models/devices.py | 5 +++- netbox/dcim/tests/test_models.py | 39 +++++++++++++++++++++++++++++++- 2 files changed, 42 insertions(+), 2 deletions(-) diff --git a/netbox/dcim/models/devices.py b/netbox/dcim/models/devices.py index a4da28803..78ffe6b66 100644 --- a/netbox/dcim/models/devices.py +++ b/netbox/dcim/models/devices.py @@ -1550,7 +1550,10 @@ class MACAddress(PrimaryModel): ct = ObjectType.objects.get_for_id(self._original_assigned_object_type_id) original_assigned_object = ct.get_object_for_this_type(pk=self._original_assigned_object_id) - if original_assigned_object.primary_mac_address: + if ( + original_assigned_object.primary_mac_address + and original_assigned_object.primary_mac_address.pk == self.pk + ): if not assigned_object: raise ValidationError( _("Cannot unassign MAC Address while it is designated as the primary MAC for an object") diff --git a/netbox/dcim/tests/test_models.py b/netbox/dcim/tests/test_models.py index c8c84dafb..398945f93 100644 --- a/netbox/dcim/tests/test_models.py +++ b/netbox/dcim/tests/test_models.py @@ -1,5 +1,5 @@ from django.core.exceptions import ValidationError -from django.test import TestCase +from django.test import tag, TestCase from circuits.models import * from core.models import ObjectType @@ -12,6 +12,43 @@ from utilities.data import drange from virtualization.models import Cluster, ClusterType +class MACAddressTestCase(TestCase): + @classmethod + def setUpTestData(cls): + site = Site.objects.create(name='Test Site 1', slug='test-site-1') + manufacturer = Manufacturer.objects.create(name='Test Manufacturer 1', slug='test-manufacturer-1') + device_type = DeviceType.objects.create( + manufacturer=manufacturer, model='Test Device Type 1', slug='test-device-type-1' + ) + device_role = DeviceRole.objects.create(name='Test Role 1', slug='test-role-1') + device = Device.objects.create( + name='Device 1', device_type=device_type, role=device_role, site=site, + ) + cls.interface = Interface.objects.create( + device=device, + name='Interface 1', + type=InterfaceTypeChoices.TYPE_1GE_FIXED, + mgmt_only=True + ) + + cls.mac_a = MACAddress.objects.create(mac_address='1234567890ab', assigned_object=cls.interface) + cls.mac_b = MACAddress.objects.create(mac_address='1234567890ba', assigned_object=cls.interface) + + cls.interface.primary_mac_address = cls.mac_a + cls.interface.save() + + @tag('regression') + def test_clean_will_not_allow_removal_of_assigned_object_if_primary(self): + self.mac_a.assigned_object = None + with self.assertRaisesMessage(ValidationError, 'Cannot unassign MAC Address while'): + self.mac_a.clean() + + @tag('regression') + def test_clean_will_allow_removal_of_assigned_object_if_not_primary(self): + self.mac_b.assigned_object = None + self.mac_b.clean() + + class LocationTestCase(TestCase): def test_change_location_site(self): From d208ddde9af2859299b9923b05872c91d307c046 Mon Sep 17 00:00:00 2001 From: github-actions <41898282+github-actions[bot]@users.noreply.github.com> Date: Tue, 4 Mar 2025 05:02:19 +0000 Subject: [PATCH 126/152] Update source translation strings --- netbox/translations/en/LC_MESSAGES/django.po | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/netbox/translations/en/LC_MESSAGES/django.po b/netbox/translations/en/LC_MESSAGES/django.po index 67426b27c..a64ae3e6d 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: 2025-03-01 05:01+0000\n" +"POT-Creation-Date: 2025-03-04 05:02+0000\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -6621,13 +6621,13 @@ msgstr "" msgid "MAC addresses" msgstr "" -#: netbox/dcim/models/devices.py:1556 +#: netbox/dcim/models/devices.py:1559 msgid "" "Cannot unassign MAC Address while it is designated as the primary MAC for an " "object" msgstr "" -#: netbox/dcim/models/devices.py:1560 +#: netbox/dcim/models/devices.py:1563 msgid "" "Cannot reassign MAC Address while it is designated as the primary MAC for an " "object" @@ -9187,11 +9187,11 @@ msgstr "" msgid "tagged items" msgstr "" -#: netbox/extras/scripts.py:429 +#: netbox/extras/scripts.py:432 msgid "Script Data" msgstr "" -#: netbox/extras/scripts.py:433 +#: netbox/extras/scripts.py:436 msgid "Script Execution Parameters" msgstr "" From d83c2f45bc473cae23666c548d54309d924d26a7 Mon Sep 17 00:00:00 2001 From: Renato Almeida de Oliveira Zaroubin Date: Tue, 4 Mar 2025 18:34:23 +0000 Subject: [PATCH 127/152] Add vlangroup into LocationTable, LocationListView queryset and related_models in LocationView --- netbox/dcim/tables/sites.py | 10 ++++++++-- netbox/dcim/views.py | 33 +++++++++++++++++++++------------ 2 files changed, 29 insertions(+), 14 deletions(-) diff --git a/netbox/dcim/tables/sites.py b/netbox/dcim/tables/sites.py index e8cb9140e..5206bb755 100644 --- a/netbox/dcim/tables/sites.py +++ b/netbox/dcim/tables/sites.py @@ -146,6 +146,11 @@ class LocationTable(TenancyColumnsMixin, ContactsColumnMixin, NetBoxTable): url_params={'location_id': 'pk'}, verbose_name=_('Devices') ) + vlangroup_count = columns.LinkedCountColumn( + viewname='ipam:vlangroup_list', + url_params={'location': 'pk'}, + verbose_name=_('VLAN Groups') + ) tags = columns.TagColumn( url_name='dcim:location_list' ) @@ -157,8 +162,9 @@ class LocationTable(TenancyColumnsMixin, ContactsColumnMixin, NetBoxTable): model = Location fields = ( 'pk', 'id', 'name', 'site', 'status', 'facility', 'tenant', 'tenant_group', 'rack_count', 'device_count', - 'description', 'slug', 'contacts', 'tags', 'actions', 'created', 'last_updated', + 'description', 'slug', 'contacts', 'tags', 'actions', 'created', 'last_updated', 'vlangroup_count', ) default_columns = ( - 'pk', 'name', 'site', 'status', 'facility', 'tenant', 'rack_count', 'device_count', 'description' + 'pk', 'name', 'site', 'status', 'facility', 'tenant', 'rack_count', 'device_count', 'vlangroup_count', + 'description' ) diff --git a/netbox/dcim/views.py b/netbox/dcim/views.py index 60de8c355..f63a0ad79 100644 --- a/netbox/dcim/views.py +++ b/netbox/dcim/views.py @@ -505,18 +505,24 @@ class SiteContactsView(ObjectContactsView): @register_model_view(Location, 'list', path='', detail=False) class LocationListView(generic.ObjectListView): queryset = Location.objects.add_related_count( - Location.objects.add_related_count( - Location.objects.all(), - Device, - 'location', - 'device_count', - cumulative=True - ), - Rack, - 'location', - 'rack_count', - cumulative=True - ) + Location.objects.add_related_count( + Location.objects.add_related_count( + Location.objects.all(), + Device, + 'location', + 'device_count', + cumulative=True + ), + Rack, + 'location', + 'rack_count', + cumulative=True + ), + VLANGroup, + 'location', + 'vlangroup_count', + cumulative=True + ) filterset = filtersets.LocationFilterSet filterset_form = forms.LocationFilterForm table = tables.LocationTable @@ -528,6 +534,7 @@ class LocationView(GetRelatedModelsMixin, generic.ObjectView): def get_extra_context(self, request, instance): locations = instance.get_descendants(include_self=True) + location_content_type = ContentType.objects.get_for_model(instance) return { 'related_models': self.get_related_models( request, @@ -545,6 +552,8 @@ class LocationView(GetRelatedModelsMixin, generic.ObjectView): (Cluster.objects.restrict(request.user, 'view').filter(_location=instance), 'location_id'), (Prefix.objects.restrict(request.user, 'view').filter(_location=instance), 'location_id'), (WirelessLAN.objects.restrict(request.user, 'view').filter(_location=instance), 'location_id'), + (VLANGroup.objects.restrict(request.user, 'view').filter( + scope_type_id=location_content_type.id, scope_id=instance.id), 'location'), ), ), } From 4ab58f2da977108de34be6abaa96ffc4ff241e18 Mon Sep 17 00:00:00 2001 From: Daniel Sheppard Date: Tue, 4 Mar 2025 12:57:27 -0600 Subject: [PATCH 128/152] Fixes: #15016 - Catch AssertionError from cable trace and throw ValidationError (#16384) --- netbox/dcim/exceptions.py | 2 ++ netbox/dcim/models/cables.py | 35 ++++++++++++++++++---------- netbox/dcim/tests/test_cablepaths.py | 5 ++-- netbox/wireless/signals.py | 7 +++++- 4 files changed, 34 insertions(+), 15 deletions(-) create mode 100644 netbox/dcim/exceptions.py diff --git a/netbox/dcim/exceptions.py b/netbox/dcim/exceptions.py new file mode 100644 index 000000000..e4be1b5f1 --- /dev/null +++ b/netbox/dcim/exceptions.py @@ -0,0 +1,2 @@ +class UnsupportedCablePath(Exception): + pass diff --git a/netbox/dcim/models/cables.py b/netbox/dcim/models/cables.py index 7117ea7e0..81a742fe6 100644 --- a/netbox/dcim/models/cables.py +++ b/netbox/dcim/models/cables.py @@ -15,6 +15,7 @@ from dcim.fields import PathField from dcim.utils import decompile_path_node, object_to_path_node from netbox.models import ChangeLoggedModel, PrimaryModel from utilities.conversion import to_meters +from utilities.exceptions import AbortRequest from utilities.fields import ColorField from utilities.querysets import RestrictedQuerySet from wireless.models import WirelessLink @@ -26,6 +27,7 @@ __all__ = ( 'CableTermination', ) +from ..exceptions import UnsupportedCablePath trace_paths = Signal() @@ -236,8 +238,10 @@ class Cable(PrimaryModel): for termination in self.b_terminations: if not termination.pk or termination not in b_terminations: CableTermination(cable=self, cable_end='B', termination=termination).save() - - trace_paths.send(Cable, instance=self, created=_created) + try: + trace_paths.send(Cable, instance=self, created=_created) + except UnsupportedCablePath as e: + raise AbortRequest(e) def get_status_color(self): return LinkStatusChoices.colors.get(self.status) @@ -531,8 +535,8 @@ class CablePath(models.Model): return None # Ensure all originating terminations are attached to the same link - if len(terminations) > 1: - assert all(t.link == terminations[0].link for t in terminations[1:]) + if len(terminations) > 1 and not all(t.link == terminations[0].link for t in terminations[1:]): + raise UnsupportedCablePath(_("All originating terminations must be attached to the same link")) path = [] position_stack = [] @@ -543,12 +547,13 @@ class CablePath(models.Model): while terminations: # Terminations must all be of the same type - assert all(isinstance(t, type(terminations[0])) for t in terminations[1:]) + if not all(isinstance(t, type(terminations[0])) for t in terminations[1:]): + raise UnsupportedCablePath(_("All mid-span terminations must have the same termination type")) # All mid-span terminations must all be attached to the same device - if not isinstance(terminations[0], PathEndpoint): - assert all(isinstance(t, type(terminations[0])) for t in terminations[1:]) - assert all(t.parent_object == terminations[0].parent_object for t in terminations[1:]) + if (not isinstance(terminations[0], PathEndpoint) and not + all(t.parent_object == terminations[0].parent_object for t in terminations[1:])): + raise UnsupportedCablePath(_("All mid-span terminations must have the same parent object")) # Check for a split path (e.g. rear port fanning out to multiple front ports with # different cables attached) @@ -571,8 +576,10 @@ class CablePath(models.Model): return None # Otherwise, halt the trace if no link exists break - assert all(type(link) in (Cable, WirelessLink) for link in links) - assert all(isinstance(link, type(links[0])) for link in links) + if not all(type(link) in (Cable, WirelessLink) for link in links): + raise UnsupportedCablePath(_("All links must be cable or wireless")) + if not all(isinstance(link, type(links[0])) for link in links): + raise UnsupportedCablePath(_("All links must match first link type")) # Step 3: Record asymmetric paths as split not_connected_terminations = [termination.link for termination in terminations if termination.link is None] @@ -653,14 +660,18 @@ class CablePath(models.Model): positions = position_stack.pop() # Ensure we have a number of positions equal to the amount of remote terminations - assert len(remote_terminations) == len(positions) + if len(remote_terminations) != len(positions): + raise UnsupportedCablePath( + _("All positions counts within the path on opposite ends of links must match") + ) # Get our front ports q_filter = Q() for rt in remote_terminations: position = positions.pop() q_filter |= Q(rear_port_id=rt.pk, rear_port_position=position) - assert q_filter is not Q() + if q_filter is Q(): + raise UnsupportedCablePath(_("Remote termination position filter is missing")) front_ports = FrontPort.objects.filter(q_filter) # Obtain the individual front ports based on the termination and position elif position_stack: diff --git a/netbox/dcim/tests/test_cablepaths.py b/netbox/dcim/tests/test_cablepaths.py index 1acc9a8a1..399478e70 100644 --- a/netbox/dcim/tests/test_cablepaths.py +++ b/netbox/dcim/tests/test_cablepaths.py @@ -5,6 +5,7 @@ from dcim.choices import LinkStatusChoices from dcim.models import * from dcim.svg import CableTraceSVG from dcim.utils import object_to_path_node +from utilities.exceptions import AbortRequest class CablePathTestCase(TestCase): @@ -2470,7 +2471,7 @@ class CablePathTestCase(TestCase): b_terminations=[frontport1, frontport3], label='C1' ) - with self.assertRaises(AssertionError): + with self.assertRaises(AbortRequest): cable1.save() self.assertPathDoesNotExist( @@ -2489,7 +2490,7 @@ class CablePathTestCase(TestCase): label='C3' ) - with self.assertRaises(AssertionError): + with self.assertRaises(AbortRequest): cable3.save() self.assertPathDoesNotExist( diff --git a/netbox/wireless/signals.py b/netbox/wireless/signals.py index ff7b1229c..b1a2d2feb 100644 --- a/netbox/wireless/signals.py +++ b/netbox/wireless/signals.py @@ -3,8 +3,10 @@ import logging from django.db.models.signals import post_save, post_delete from django.dispatch import receiver +from dcim.exceptions import UnsupportedCablePath from dcim.models import CablePath, Interface from dcim.utils import create_cablepath +from utilities.exceptions import AbortRequest from .models import WirelessLink @@ -34,7 +36,10 @@ def update_connected_interfaces(instance, created, raw=False, **kwargs): # Create/update cable paths if created: for interface in (instance.interface_a, instance.interface_b): - create_cablepath([interface]) + try: + create_cablepath([interface]) + except UnsupportedCablePath as e: + raise AbortRequest(e) @receiver(post_delete, sender=WirelessLink) From 057653d362b23a2f083ce0c8d06ca1cf79948e72 Mon Sep 17 00:00:00 2001 From: github-actions <41898282+github-actions[bot]@users.noreply.github.com> Date: Wed, 5 Mar 2025 05:02:11 +0000 Subject: [PATCH 129/152] Update source translation strings --- netbox/translations/en/LC_MESSAGES/django.po | 81 +++++++++++++------- 1 file changed, 55 insertions(+), 26 deletions(-) diff --git a/netbox/translations/en/LC_MESSAGES/django.po b/netbox/translations/en/LC_MESSAGES/django.po index a64ae3e6d..dc54dd5cf 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: 2025-03-04 05:02+0000\n" +"POT-Creation-Date: 2025-03-05 05:01+0000\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -1397,7 +1397,7 @@ msgstr "" msgid "Group Assignment" msgstr "" -#: netbox/circuits/models/base.py:18 netbox/dcim/models/cables.py:67 +#: netbox/circuits/models/base.py:18 netbox/dcim/models/cables.py:69 #: netbox/dcim/models/device_component_templates.py:531 #: netbox/dcim/models/device_component_templates.py:631 #: netbox/dcim/models/device_components.py:476 @@ -1429,7 +1429,7 @@ msgstr "" #: netbox/circuits/models/circuits.py:67 #: netbox/circuits/models/virtual_circuits.py:59 netbox/core/models/data.py:52 -#: netbox/core/models/jobs.py:85 netbox/dcim/models/cables.py:49 +#: netbox/core/models/jobs.py:85 netbox/dcim/models/cables.py:51 #: netbox/dcim/models/device_components.py:1283 #: netbox/dcim/models/devices.py:645 netbox/dcim/models/devices.py:1181 #: netbox/dcim/models/devices.py:1409 netbox/dcim/models/power.py:94 @@ -2494,7 +2494,7 @@ msgstr "" msgid "Config revision #{id}" msgstr "" -#: netbox/core/models/data.py:44 netbox/dcim/models/cables.py:42 +#: netbox/core/models/data.py:44 netbox/dcim/models/cables.py:44 #: netbox/dcim/models/device_component_templates.py:199 #: netbox/dcim/models/device_component_templates.py:234 #: netbox/dcim/models/device_component_templates.py:270 @@ -2573,7 +2573,7 @@ msgstr "" msgid "last updated" msgstr "" -#: netbox/core/models/data.py:277 netbox/dcim/models/cables.py:442 +#: netbox/core/models/data.py:277 netbox/dcim/models/cables.py:446 msgid "path" msgstr "" @@ -5503,98 +5503,127 @@ msgstr "" msgid "A position must be specified for the first VC member." msgstr "" -#: netbox/dcim/models/cables.py:62 +#: netbox/dcim/models/cables.py:64 #: netbox/dcim/models/device_component_templates.py:51 #: netbox/dcim/models/device_components.py:57 #: netbox/extras/models/customfields.py:111 msgid "label" msgstr "" -#: netbox/dcim/models/cables.py:71 +#: netbox/dcim/models/cables.py:73 msgid "length" msgstr "" -#: netbox/dcim/models/cables.py:78 +#: netbox/dcim/models/cables.py:80 msgid "length unit" msgstr "" -#: netbox/dcim/models/cables.py:96 +#: netbox/dcim/models/cables.py:98 msgid "cable" msgstr "" -#: netbox/dcim/models/cables.py:97 +#: netbox/dcim/models/cables.py:99 msgid "cables" msgstr "" -#: netbox/dcim/models/cables.py:163 +#: netbox/dcim/models/cables.py:165 msgid "Must specify a unit when setting a cable length" msgstr "" -#: netbox/dcim/models/cables.py:166 +#: netbox/dcim/models/cables.py:168 msgid "Must define A and B terminations when creating a new cable." msgstr "" -#: netbox/dcim/models/cables.py:173 +#: netbox/dcim/models/cables.py:175 msgid "Cannot connect different termination types to same end of cable." msgstr "" -#: netbox/dcim/models/cables.py:181 +#: netbox/dcim/models/cables.py:183 #, python-brace-format msgid "Incompatible termination types: {type_a} and {type_b}" msgstr "" -#: netbox/dcim/models/cables.py:191 +#: netbox/dcim/models/cables.py:193 msgid "A and B terminations cannot connect to the same object." msgstr "" -#: netbox/dcim/models/cables.py:258 netbox/ipam/models/asns.py:37 +#: netbox/dcim/models/cables.py:262 netbox/ipam/models/asns.py:37 msgid "end" msgstr "" -#: netbox/dcim/models/cables.py:311 +#: netbox/dcim/models/cables.py:315 msgid "cable termination" msgstr "" -#: netbox/dcim/models/cables.py:312 +#: netbox/dcim/models/cables.py:316 msgid "cable terminations" msgstr "" -#: netbox/dcim/models/cables.py:331 +#: netbox/dcim/models/cables.py:335 #, python-brace-format msgid "" "Duplicate termination found for {app_label}.{model} {termination_id}: cable " "{cable_pk}" msgstr "" -#: netbox/dcim/models/cables.py:341 +#: netbox/dcim/models/cables.py:345 #, python-brace-format msgid "Cables cannot be terminated to {type_display} interfaces" msgstr "" -#: netbox/dcim/models/cables.py:348 +#: netbox/dcim/models/cables.py:352 msgid "Circuit terminations attached to a provider network may not be cabled." msgstr "" -#: netbox/dcim/models/cables.py:446 netbox/extras/models/configs.py:50 +#: netbox/dcim/models/cables.py:450 netbox/extras/models/configs.py:50 msgid "is active" msgstr "" -#: netbox/dcim/models/cables.py:450 +#: netbox/dcim/models/cables.py:454 msgid "is complete" msgstr "" -#: netbox/dcim/models/cables.py:454 +#: netbox/dcim/models/cables.py:458 msgid "is split" msgstr "" -#: netbox/dcim/models/cables.py:462 +#: netbox/dcim/models/cables.py:466 msgid "cable path" msgstr "" -#: netbox/dcim/models/cables.py:463 +#: netbox/dcim/models/cables.py:467 msgid "cable paths" msgstr "" +#: netbox/dcim/models/cables.py:539 +msgid "All originating terminations must be attached to the same link" +msgstr "" + +#: netbox/dcim/models/cables.py:551 +msgid "All mid-span terminations must have the same termination type" +msgstr "" + +#: netbox/dcim/models/cables.py:556 +msgid "All mid-span terminations must have the same parent object" +msgstr "" + +#: netbox/dcim/models/cables.py:580 +msgid "All links must be cable or wireless" +msgstr "" + +#: netbox/dcim/models/cables.py:582 +msgid "All links must match first link type" +msgstr "" + +#: netbox/dcim/models/cables.py:665 +msgid "" +"All positions counts within the path on opposite ends of links must match" +msgstr "" + +#: netbox/dcim/models/cables.py:674 +msgid "Remote termination position filter is missing" +msgstr "" + #: netbox/dcim/models/device_component_templates.py:46 #, python-brace-format msgid "" From d3a9a6827fe84964d3782369f8780a6e50bd09bc Mon Sep 17 00:00:00 2001 From: Renato Almeida de Oliveira Zaroubin Date: Tue, 4 Mar 2025 17:16:39 +0000 Subject: [PATCH 130/152] fix typo in VirtualCircuitFilterForm --- netbox/circuits/forms/filtersets.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/netbox/circuits/forms/filtersets.py b/netbox/circuits/forms/filtersets.py index 297af5e71..a75684ef5 100644 --- a/netbox/circuits/forms/filtersets.py +++ b/netbox/circuits/forms/filtersets.py @@ -327,7 +327,7 @@ class VirtualCircuitFilterForm(TenancyFilterForm, ContactModelFilterForm, NetBox fieldsets = ( FieldSet('q', 'filter_id', 'tag'), FieldSet('provider_id', 'provider_account_id', 'provider_network_id', name=_('Provider')), - FieldSet('type', 'status', name=_('Attributes')), + FieldSet('type_id', 'status', name=_('Attributes')), FieldSet('tenant_group_id', 'tenant_id', name=_('Tenant')), ) selector_fields = ('filter_id', 'q', 'provider_id', 'provider_network_id') From ed6ccfb7230d7a240b3a3c55667e830a9de7d7cc Mon Sep 17 00:00:00 2001 From: Renato Almeida de Oliveira Zaroubin Date: Tue, 4 Mar 2025 15:41:47 +0000 Subject: [PATCH 131/152] Add commit test in job execution --- netbox/extras/jobs.py | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/netbox/extras/jobs.py b/netbox/extras/jobs.py index 10d76e3aa..d41901dde 100644 --- a/netbox/extras/jobs.py +++ b/netbox/extras/jobs.py @@ -100,7 +100,10 @@ class ScriptJob(JobRunner): # Execute the script. If commit is True, wrap it with the event_tracking context manager to ensure we process # change logging, event rules, etc. - with ExitStack() as stack: - for request_processor in registry['request_processors']: - stack.enter_context(request_processor(request)) + if commit: + with ExitStack() as stack: + for request_processor in registry['request_processors']: + stack.enter_context(request_processor(request)) + self.run_script(script, request, data, commit) + else: self.run_script(script, request, data, commit) From 631ff3e702b0da6667a0359a0419b82c92b77e25 Mon Sep 17 00:00:00 2001 From: Marcus Weiner Date: Wed, 5 Mar 2025 20:46:12 +0100 Subject: [PATCH 132/152] Allow primary key for nested models in OpenAPI request schemas (#18451) --- netbox/core/api/schema.py | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/netbox/core/api/schema.py b/netbox/core/api/schema.py index 84bfae3bc..0c59da5a1 100644 --- a/netbox/core/api/schema.py +++ b/netbox/core/api/schema.py @@ -295,3 +295,23 @@ class FixIntegerRangeSerializerSchema(OpenApiSerializerExtension): 'maxItems': 2, }, } + + +# Nested models can be passed by ID in requests +# The logic for this is handled in `BaseModelSerializer.to_internal_value` +class FixWritableNestedSerializerAllowPK(OpenApiSerializerFieldExtension): + target_class = 'netbox.api.serializers.BaseModelSerializer' + match_subclasses = True + + def map_serializer_field(self, auto_schema, direction): + schema = auto_schema._map_serializer_field(self.target, direction, bypass_extensions=True) + if schema is None: + return schema + if direction == 'request' and self.target.nested: + return { + 'oneOf': [ + build_basic_type(OpenApiTypes.INT), + schema, + ] + } + return schema From 9f69c46a9907133ecee7501932e57d3162f0b506 Mon Sep 17 00:00:00 2001 From: Brian Tiemann Date: Wed, 5 Mar 2025 18:43:41 -0500 Subject: [PATCH 133/152] NetBox v4.2.5 --- .../ISSUE_TEMPLATE/01-feature_request.yaml | 2 +- .github/ISSUE_TEMPLATE/02-bug_report.yaml | 2 +- docs/release-notes/version-4.2.md | 29 +++++++++++++++++++ netbox/project-static/yarn.lock | 16 +++++----- netbox/release.yaml | 4 +-- requirements.txt | 12 ++++---- 6 files changed, 47 insertions(+), 18 deletions(-) diff --git a/.github/ISSUE_TEMPLATE/01-feature_request.yaml b/.github/ISSUE_TEMPLATE/01-feature_request.yaml index f8c7f7e9b..f7cf89ee6 100644 --- a/.github/ISSUE_TEMPLATE/01-feature_request.yaml +++ b/.github/ISSUE_TEMPLATE/01-feature_request.yaml @@ -15,7 +15,7 @@ body: attributes: label: NetBox version description: What version of NetBox are you currently running? - placeholder: v4.2.4 + placeholder: v4.2.5 validations: required: true - type: dropdown diff --git a/.github/ISSUE_TEMPLATE/02-bug_report.yaml b/.github/ISSUE_TEMPLATE/02-bug_report.yaml index 1789d27aa..7a4910dcc 100644 --- a/.github/ISSUE_TEMPLATE/02-bug_report.yaml +++ b/.github/ISSUE_TEMPLATE/02-bug_report.yaml @@ -27,7 +27,7 @@ body: attributes: label: NetBox Version description: What version of NetBox are you currently running? - placeholder: v4.2.4 + placeholder: v4.2.5 validations: required: true - type: dropdown diff --git a/docs/release-notes/version-4.2.md b/docs/release-notes/version-4.2.md index 5612bfca7..75e992cca 100644 --- a/docs/release-notes/version-4.2.md +++ b/docs/release-notes/version-4.2.md @@ -1,5 +1,34 @@ # NetBox v4.2 +## v4.2.5 (2025-03-05) + +### Enhancements + +* [#18141](https://github.com/netbox-community/netbox/issues/18141) - Support "Quick Add" for plugins +* [#18403](https://github.com/netbox-community/netbox/issues/18403) - Improve performance of job list views +* [#18095](https://github.com/netbox-community/netbox/issues/18095) - Ensure contacts are shown on children of objects with contacts +* [#17944](https://github.com/netbox-community/netbox/issues/17944) - Allow script inputs to be filtered on ObjectVar and MultiObjectVar selections +* [#17357](https://github.com/netbox-community/netbox/issues/17357) - Use VirtualChassis name as fallback for unnamed devices +* [#18772](https://github.com/netbox-community/netbox/issues/18772) - Add "type" filter for virtual circuits +* [#18693](https://github.com/netbox-community/netbox/issues/18693) - Support setting VLAN translation on bulk edit of interfaces +* [#18024](https://github.com/netbox-community/netbox/issues/18024) - Add permalink URL pattern to match a custom script by module and class name +* [#17542](https://github.com/netbox-community/netbox/issues/17542) - Add contact assignments to VPN tunnels + +### Bug Fixes + +* [#18768](https://github.com/netbox-community/netbox/issues/18768) - Fix removing a secondary MAC address from an interface +* [#18722](https://github.com/netbox-community/netbox/issues/18722) - Improve UI feedback on failed script execution +* [#18605](https://github.com/netbox-community/netbox/issues/18605) - Limit VLAN selection dropdown to choices appropriate to site +* [#15016](https://github.com/netbox-community/netbox/issues/15016) - Prevent AssertionError when adding multiple devices "mid-span" in a cable trace +* [#17796](https://github.com/netbox-community/netbox/issues/17796) - Fix IndexError on "Create & Add Another" operation on custom field choices +* [#15924](https://github.com/netbox-community/netbox/issues/15924) - Prevent setting tagged VLANs on interfaces with mode: tagged-all +* [#18758](https://github.com/netbox-community/netbox/issues/18758) - Fix FieldError when sorting by account count field in providers list +* [#18753](https://github.com/netbox-community/netbox/issues/18753) - Prevent webhooks from being triggered on a script dry-run +* [#17488](https://github.com/netbox-community/netbox/issues/17488) - Ensure VLANGroup.vid_ranges shows up in API results +* [#18451](https://github.com/netbox-community/netbox/pull/18451) - Allow primary key for nested models in OpenAPI request schemas + +--- + ## v4.2.4 (2025-02-21) ### Enhancements diff --git a/netbox/project-static/yarn.lock b/netbox/project-static/yarn.lock index 92e7e7bd1..816779bce 100644 --- a/netbox/project-static/yarn.lock +++ b/netbox/project-static/yarn.lock @@ -2673,10 +2673,10 @@ safe-regex-test@^1.0.3: es-errors "^1.3.0" is-regex "^1.1.4" -sass@1.83.4: - version "1.83.4" - resolved "https://registry.yarnpkg.com/sass/-/sass-1.83.4.tgz#5ccf60f43eb61eeec300b780b8dcb85f16eec6d1" - integrity sha512-B1bozCeNQiOgDcLd33e2Cs2U60wZwjUUXzh900ZyQF5qUasvMdDZYbQ566LJu7cqR+sAHlAfO6RMkaID5s6qpA== +sass@1.85.0: + version "1.85.0" + resolved "https://registry.yarnpkg.com/sass/-/sass-1.85.0.tgz#0127ef697d83144496401553f0a0e87be83df45d" + integrity sha512-3ToiC1xZ1Y8aU7+CkgCI/tqyuPXEmYGJXO7H4uqp0xkLXUqp88rQQ4j1HmP37xSJLbCJPaIiv+cT1y+grssrww== dependencies: chokidar "^4.0.0" immutable "^5.0.2" @@ -2882,10 +2882,10 @@ toggle-selection@^1.0.6: resolved "https://registry.yarnpkg.com/toggle-selection/-/toggle-selection-1.0.6.tgz#6e45b1263f2017fa0acc7d89d78b15b8bf77da32" integrity sha512-BiZS+C1OS8g/q2RRbJmy59xpyghNBqrr6k5L/uKBGRsTfxmu3ffiRnd8mlGPUVayg8pvfi5urfnu8TU7DVOkLQ== -tom-select@2.4.2: - version "2.4.2" - resolved "https://registry.yarnpkg.com/tom-select/-/tom-select-2.4.2.tgz#9764faf6cba51f6571d03a79bb7c1cac1cac7a5a" - integrity sha512-2RWjkL3gMDz9E+u8w+tQy9JWsYq8gaSytEVeugKYDeMus6ZtxT1HttLPnXsfHCnBPlsNubVyj5gtUeN+S+bcpA== +tom-select@2.4.3: + version "2.4.3" + resolved "https://registry.yarnpkg.com/tom-select/-/tom-select-2.4.3.tgz#1daa4131cd317de691f39eb5bf41148265986c1f" + integrity sha512-MFFrMxP1bpnAMPbdvPCZk0KwYxLqhYZso39torcdoefeV/NThNyDu8dV96/INJ5XQVTL3O55+GqQ78Pkj5oCfw== dependencies: "@orchidjs/sifter" "^1.1.0" "@orchidjs/unicode-variants" "^1.1.2" diff --git a/netbox/release.yaml b/netbox/release.yaml index 15756c597..89259f8f5 100644 --- a/netbox/release.yaml +++ b/netbox/release.yaml @@ -1,3 +1,3 @@ -version: "4.2.4" +version: "4.2.5" edition: "Community" -published: "2025-02-21" +published: "2025-03-05" diff --git a/requirements.txt b/requirements.txt index a01479311..68a8b21c3 100644 --- a/requirements.txt +++ b/requirements.txt @@ -15,23 +15,23 @@ django-tables2==2.7.5 django-timezone-field==7.1 djangorestframework==3.15.2 drf-spectacular==0.28.0 -drf-spectacular-sidecar==2025.2.1 +drf-spectacular-sidecar==2025.3.1 feedparser==6.0.11 gunicorn==23.0.0 -Jinja2==3.1.5 +Jinja2==3.1.6 Markdown==3.7 -mkdocs-material==9.6.5 +mkdocs-material==9.6.7 mkdocstrings[python-legacy]==0.27.0 netaddr==1.3.0 -nh3==0.2.20 +nh3==0.2.21 Pillow==11.1.0 -psycopg[c,pool]==3.2.4 +psycopg[c,pool]==3.2.5 PyYAML==6.0.2 requests==2.32.3 rq==2.1.0 social-auth-app-django==5.4.3 social-auth-core==4.5.6 -strawberry-graphql==0.260.2 +strawberry-graphql==0.262.2 strawberry-graphql-django==0.52.0 svgwrite==1.4.3 tablib==3.8.0 From 033a960cabee9b1bcab10cdb1bde8b04ccf98083 Mon Sep 17 00:00:00 2001 From: Brian Tiemann Date: Wed, 5 Mar 2025 18:46:30 -0500 Subject: [PATCH 134/152] Fix strawberry-graphql==0.262.0 --- requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements.txt b/requirements.txt index 68a8b21c3..8bd8f8073 100644 --- a/requirements.txt +++ b/requirements.txt @@ -31,7 +31,7 @@ requests==2.32.3 rq==2.1.0 social-auth-app-django==5.4.3 social-auth-core==4.5.6 -strawberry-graphql==0.262.2 +strawberry-graphql==0.262.0 strawberry-graphql-django==0.52.0 svgwrite==1.4.3 tablib==3.8.0 From 6efc5682cde587d4ff2e25cd17774ee8e20e38b7 Mon Sep 17 00:00:00 2001 From: bctiemann Date: Wed, 5 Mar 2025 18:52:00 -0500 Subject: [PATCH 135/152] Override get_queryset on generic ObjectListView and NetBoxModelViewSet to reapply model-level ordering (#18805) --- netbox/netbox/api/viewsets/__init__.py | 5 +++++ netbox/netbox/views/generic/bulk_views.py | 5 +++++ 2 files changed, 10 insertions(+) diff --git a/netbox/netbox/api/viewsets/__init__.py b/netbox/netbox/api/viewsets/__init__.py index d72507e8a..e5993828e 100644 --- a/netbox/netbox/api/viewsets/__init__.py +++ b/netbox/netbox/api/viewsets/__init__.py @@ -121,6 +121,11 @@ class NetBoxModelViewSet( obj.snapshot() return obj + def get_queryset(self): + qs = super().get_queryset() + ordering = qs.model._meta.ordering + return qs.order_by(*ordering) + def get_serializer(self, *args, **kwargs): # If a list of objects has been provided, initialize the serializer with many=True if isinstance(kwargs.get('data', {}), list): diff --git a/netbox/netbox/views/generic/bulk_views.py b/netbox/netbox/views/generic/bulk_views.py index 88857ad54..72eaf6f1a 100644 --- a/netbox/netbox/views/generic/bulk_views.py +++ b/netbox/netbox/views/generic/bulk_views.py @@ -125,6 +125,11 @@ class ObjectListView(BaseMultiObjectView, ActionsMixin, TableMixin): # Request handlers # + def get_queryset(self, request): + qs = super().get_queryset(request) + ordering = qs.model._meta.ordering + return qs.order_by(*ordering) + def get(self, request): """ GET request handler. From 29b8827128315cccdce9d1068aec5b8b121efa9f Mon Sep 17 00:00:00 2001 From: Brian Tiemann Date: Wed, 5 Mar 2025 18:52:34 -0500 Subject: [PATCH 136/152] Add translation files --- netbox/translations/de/LC_MESSAGES/django.mo | Bin 236143 -> 245902 bytes netbox/translations/de/LC_MESSAGES/django.po | 7403 ++++++++++-------- 2 files changed, 4016 insertions(+), 3387 deletions(-) diff --git a/netbox/translations/de/LC_MESSAGES/django.mo b/netbox/translations/de/LC_MESSAGES/django.mo index 69d6143e4385d332124ab03c512a9592715cf1fe..5ebac13ecbf37466ce8f202fb8cfd7052e6dd77d 100644 GIT binary patch delta 75556 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 delta 67154 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 Wcl%TA^nUS%OxQz}aC^Pu!~Gw=!^)}v diff --git a/netbox/translations/de/LC_MESSAGES/django.po b/netbox/translations/de/LC_MESSAGES/django.po index be453b8cf..39e3267b9 100644 --- a/netbox/translations/de/LC_MESSAGES/django.po +++ b/netbox/translations/de/LC_MESSAGES/django.po @@ -8,19 +8,19 @@ # fepilins, 2024 # Steffen, 2024 # haagehan, 2024 -# Jeremy Stretch, 2024 # Robin Reinhardt, 2024 -# chbally, 2025 # Niklas, 2025 +# Jeremy Stretch, 2025 +# chbally, 2025 # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-01-04 05:02+0000\n" +"POT-Creation-Date: 2025-03-05 05:01+0000\n" "PO-Revision-Date: 2023-10-30 17:48+0000\n" -"Last-Translator: Niklas, 2025\n" +"Last-Translator: chbally, 2025\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" @@ -38,7 +38,7 @@ msgstr "Schlüssel" msgid "Write Enabled" msgstr "Schreibberechtigung" -#: netbox/account/tables.py:35 netbox/core/choices.py:86 +#: netbox/account/tables.py:35 netbox/core/choices.py:102 #: netbox/core/tables/jobs.py:29 netbox/core/tables/tasks.py:79 #: netbox/extras/tables/tables.py:335 netbox/extras/tables/tables.py:566 #: netbox/templates/account/token.html:43 @@ -50,6 +50,7 @@ msgstr "Schreibberechtigung" #: netbox/templates/extras/htmx/script_result.html:12 #: netbox/templates/extras/journalentry.html:22 #: netbox/templates/generic/object.html:58 +#: netbox/templates/htmx/quick_add_created.html:7 #: netbox/templates/users/token.html:35 msgid "Created" msgstr "Erstellt" @@ -94,34 +95,35 @@ msgstr "Dein Passwort wurde erfolgreich geändert." #: netbox/circuits/choices.py:21 netbox/dcim/choices.py:20 #: netbox/dcim/choices.py:102 netbox/dcim/choices.py:185 -#: netbox/dcim/choices.py:237 netbox/dcim/choices.py:1532 -#: netbox/dcim/choices.py:1608 netbox/dcim/choices.py:1658 -#: netbox/virtualization/choices.py:20 netbox/virtualization/choices.py:45 -#: netbox/vpn/choices.py:18 +#: netbox/dcim/choices.py:237 netbox/dcim/choices.py:1534 +#: netbox/dcim/choices.py:1592 netbox/dcim/choices.py:1642 +#: netbox/dcim/choices.py:1664 netbox/virtualization/choices.py:20 +#: netbox/virtualization/choices.py:46 netbox/vpn/choices.py:18 msgid "Planned" msgstr "Geplant" -#: netbox/circuits/choices.py:22 netbox/netbox/navigation/menu.py:305 +#: netbox/circuits/choices.py:22 netbox/netbox/navigation/menu.py:326 msgid "Provisioning" msgstr "Provisionierung" #: netbox/circuits/choices.py:23 netbox/core/tables/tasks.py:22 #: netbox/dcim/choices.py:22 netbox/dcim/choices.py:103 #: netbox/dcim/choices.py:184 netbox/dcim/choices.py:236 -#: netbox/dcim/choices.py:1607 netbox/dcim/choices.py:1657 -#: netbox/extras/tables/tables.py:495 netbox/ipam/choices.py:31 -#: netbox/ipam/choices.py:49 netbox/ipam/choices.py:69 -#: netbox/ipam/choices.py:154 netbox/templates/extras/configcontext.html:25 +#: netbox/dcim/choices.py:1591 netbox/dcim/choices.py:1641 +#: netbox/dcim/choices.py:1663 netbox/extras/tables/tables.py:495 +#: netbox/ipam/choices.py:31 netbox/ipam/choices.py:49 +#: netbox/ipam/choices.py:69 netbox/ipam/choices.py:154 +#: netbox/templates/extras/configcontext.html:25 #: netbox/templates/users/user.html:37 netbox/users/forms/bulk_edit.py:38 -#: netbox/virtualization/choices.py:22 netbox/virtualization/choices.py:44 +#: netbox/virtualization/choices.py:22 netbox/virtualization/choices.py:45 #: netbox/vpn/choices.py:19 netbox/wireless/choices.py:25 msgid "Active" msgstr "Aktiv" #: netbox/circuits/choices.py:24 netbox/dcim/choices.py:183 -#: netbox/dcim/choices.py:235 netbox/dcim/choices.py:1606 -#: netbox/dcim/choices.py:1659 netbox/virtualization/choices.py:24 -#: netbox/virtualization/choices.py:43 +#: netbox/dcim/choices.py:235 netbox/dcim/choices.py:1590 +#: netbox/dcim/choices.py:1643 netbox/dcim/choices.py:1662 +#: netbox/virtualization/choices.py:24 netbox/virtualization/choices.py:44 msgid "Offline" msgstr "Offline" @@ -133,7 +135,9 @@ msgstr "Deprovisionierung" msgid "Decommissioned" msgstr "Stillgelegt" -#: netbox/circuits/choices.py:90 netbox/dcim/choices.py:1619 +#: netbox/circuits/choices.py:90 netbox/dcim/choices.py:1603 +#: netbox/templates/dcim/interface.html:135 +#: netbox/templates/virtualization/vminterface.html:77 #: netbox/tenancy/choices.py:17 msgid "Primary" msgstr "Primär" @@ -151,195 +155,207 @@ msgstr "Tertiär" msgid "Inactive" msgstr "Inaktiv" -#: netbox/circuits/filtersets.py:31 netbox/circuits/filtersets.py:198 -#: netbox/dcim/filtersets.py:98 netbox/dcim/filtersets.py:152 -#: netbox/dcim/filtersets.py:212 netbox/dcim/filtersets.py:333 -#: netbox/dcim/filtersets.py:464 netbox/dcim/filtersets.py:1021 -#: netbox/dcim/filtersets.py:1368 netbox/dcim/filtersets.py:1903 -#: netbox/dcim/filtersets.py:2146 netbox/dcim/filtersets.py:2204 -#: netbox/ipam/filtersets.py:341 netbox/ipam/filtersets.py:961 -#: netbox/virtualization/filtersets.py:45 -#: netbox/virtualization/filtersets.py:173 netbox/vpn/filtersets.py:358 +#: netbox/circuits/choices.py:107 netbox/templates/dcim/interface.html:275 +#: netbox/vpn/choices.py:63 +msgid "Peer" +msgstr "Peer" + +#: netbox/circuits/choices.py:108 netbox/vpn/choices.py:64 +msgid "Hub" +msgstr "Hub" + +#: netbox/circuits/choices.py:109 netbox/vpn/choices.py:65 +msgid "Spoke" +msgstr "Spoke" + +#: netbox/circuits/filtersets.py:37 netbox/circuits/filtersets.py:204 +#: netbox/circuits/filtersets.py:284 netbox/dcim/base_filtersets.py:22 +#: netbox/dcim/filtersets.py:99 netbox/dcim/filtersets.py:153 +#: netbox/dcim/filtersets.py:213 netbox/dcim/filtersets.py:334 +#: netbox/dcim/filtersets.py:465 netbox/dcim/filtersets.py:1022 +#: netbox/dcim/filtersets.py:1370 netbox/dcim/filtersets.py:2027 +#: netbox/dcim/filtersets.py:2270 netbox/dcim/filtersets.py:2328 +#: netbox/ipam/filtersets.py:928 netbox/virtualization/filtersets.py:139 +#: netbox/vpn/filtersets.py:358 msgid "Region (ID)" msgstr "Region (ID)" -#: netbox/circuits/filtersets.py:38 netbox/circuits/filtersets.py:205 -#: netbox/dcim/filtersets.py:105 netbox/dcim/filtersets.py:158 -#: netbox/dcim/filtersets.py:219 netbox/dcim/filtersets.py:340 -#: netbox/dcim/filtersets.py:471 netbox/dcim/filtersets.py:1028 -#: netbox/dcim/filtersets.py:1375 netbox/dcim/filtersets.py:1910 -#: netbox/dcim/filtersets.py:2153 netbox/dcim/filtersets.py:2211 -#: netbox/extras/filtersets.py:509 netbox/ipam/filtersets.py:348 -#: netbox/ipam/filtersets.py:968 netbox/virtualization/filtersets.py:52 -#: netbox/virtualization/filtersets.py:180 netbox/vpn/filtersets.py:353 +#: netbox/circuits/filtersets.py:44 netbox/circuits/filtersets.py:211 +#: netbox/circuits/filtersets.py:291 netbox/dcim/base_filtersets.py:29 +#: netbox/dcim/filtersets.py:106 netbox/dcim/filtersets.py:159 +#: netbox/dcim/filtersets.py:220 netbox/dcim/filtersets.py:341 +#: netbox/dcim/filtersets.py:472 netbox/dcim/filtersets.py:1029 +#: netbox/dcim/filtersets.py:1377 netbox/dcim/filtersets.py:2034 +#: netbox/dcim/filtersets.py:2277 netbox/dcim/filtersets.py:2335 +#: netbox/extras/filtersets.py:509 netbox/ipam/filtersets.py:935 +#: netbox/virtualization/filtersets.py:146 netbox/vpn/filtersets.py:353 msgid "Region (slug)" msgstr "Region (URL-Slug)" -#: netbox/circuits/filtersets.py:44 netbox/circuits/filtersets.py:211 -#: netbox/dcim/filtersets.py:128 netbox/dcim/filtersets.py:225 -#: netbox/dcim/filtersets.py:346 netbox/dcim/filtersets.py:477 -#: netbox/dcim/filtersets.py:1034 netbox/dcim/filtersets.py:1381 -#: netbox/dcim/filtersets.py:1916 netbox/dcim/filtersets.py:2159 -#: netbox/dcim/filtersets.py:2217 netbox/ipam/filtersets.py:354 -#: netbox/ipam/filtersets.py:974 netbox/virtualization/filtersets.py:58 -#: netbox/virtualization/filtersets.py:186 +#: netbox/circuits/filtersets.py:50 netbox/circuits/filtersets.py:217 +#: netbox/circuits/filtersets.py:297 netbox/dcim/base_filtersets.py:35 +#: netbox/dcim/filtersets.py:129 netbox/dcim/filtersets.py:226 +#: netbox/dcim/filtersets.py:347 netbox/dcim/filtersets.py:478 +#: netbox/dcim/filtersets.py:1035 netbox/dcim/filtersets.py:1383 +#: netbox/dcim/filtersets.py:2040 netbox/dcim/filtersets.py:2283 +#: netbox/dcim/filtersets.py:2341 netbox/ipam/filtersets.py:941 +#: netbox/virtualization/filtersets.py:152 msgid "Site group (ID)" msgstr "Standortgruppe (ID)" -#: netbox/circuits/filtersets.py:51 netbox/circuits/filtersets.py:218 -#: netbox/dcim/filtersets.py:135 netbox/dcim/filtersets.py:232 -#: netbox/dcim/filtersets.py:353 netbox/dcim/filtersets.py:484 -#: netbox/dcim/filtersets.py:1041 netbox/dcim/filtersets.py:1388 -#: netbox/dcim/filtersets.py:1923 netbox/dcim/filtersets.py:2166 -#: netbox/dcim/filtersets.py:2224 netbox/extras/filtersets.py:515 -#: netbox/ipam/filtersets.py:361 netbox/ipam/filtersets.py:981 -#: netbox/virtualization/filtersets.py:65 -#: netbox/virtualization/filtersets.py:193 +#: netbox/circuits/filtersets.py:57 netbox/circuits/filtersets.py:224 +#: netbox/circuits/filtersets.py:304 netbox/dcim/base_filtersets.py:42 +#: netbox/dcim/filtersets.py:136 netbox/dcim/filtersets.py:233 +#: netbox/dcim/filtersets.py:354 netbox/dcim/filtersets.py:485 +#: netbox/dcim/filtersets.py:1042 netbox/dcim/filtersets.py:1390 +#: netbox/dcim/filtersets.py:2047 netbox/dcim/filtersets.py:2290 +#: netbox/dcim/filtersets.py:2348 netbox/extras/filtersets.py:515 +#: netbox/ipam/filtersets.py:948 netbox/virtualization/filtersets.py:159 msgid "Site group (slug)" msgstr "Standortgruppe (URL-Slug)" -#: netbox/circuits/filtersets.py:56 netbox/circuits/forms/bulk_edit.py:188 -#: netbox/circuits/forms/bulk_edit.py:216 -#: netbox/circuits/forms/bulk_import.py:124 -#: netbox/circuits/forms/filtersets.py:51 -#: netbox/circuits/forms/filtersets.py:171 -#: netbox/circuits/forms/filtersets.py:209 -#: netbox/circuits/forms/model_forms.py:138 -#: netbox/circuits/forms/model_forms.py:154 -#: netbox/circuits/tables/circuits.py:113 netbox/dcim/forms/bulk_edit.py:169 -#: netbox/dcim/forms/bulk_edit.py:330 netbox/dcim/forms/bulk_edit.py:683 -#: netbox/dcim/forms/bulk_edit.py:888 netbox/dcim/forms/bulk_import.py:131 -#: netbox/dcim/forms/bulk_import.py:230 netbox/dcim/forms/bulk_import.py:331 -#: netbox/dcim/forms/bulk_import.py:562 netbox/dcim/forms/bulk_import.py:1333 -#: netbox/dcim/forms/bulk_import.py:1361 netbox/dcim/forms/filtersets.py:87 -#: netbox/dcim/forms/filtersets.py:225 netbox/dcim/forms/filtersets.py:342 -#: netbox/dcim/forms/filtersets.py:439 netbox/dcim/forms/filtersets.py:753 -#: netbox/dcim/forms/filtersets.py:997 netbox/dcim/forms/filtersets.py:1021 -#: netbox/dcim/forms/filtersets.py:1111 netbox/dcim/forms/filtersets.py:1149 -#: netbox/dcim/forms/filtersets.py:1584 netbox/dcim/forms/filtersets.py:1608 -#: netbox/dcim/forms/filtersets.py:1632 netbox/dcim/forms/model_forms.py:137 -#: netbox/dcim/forms/model_forms.py:165 netbox/dcim/forms/model_forms.py:238 -#: netbox/dcim/forms/model_forms.py:463 netbox/dcim/forms/model_forms.py:723 -#: netbox/dcim/forms/object_create.py:383 netbox/dcim/tables/devices.py:153 +#: netbox/circuits/filtersets.py:62 netbox/circuits/forms/filtersets.py:59 +#: netbox/circuits/forms/filtersets.py:182 +#: netbox/circuits/forms/filtersets.py:240 +#: netbox/circuits/tables/circuits.py:129 netbox/dcim/forms/bulk_edit.py:172 +#: netbox/dcim/forms/bulk_edit.py:333 netbox/dcim/forms/bulk_edit.py:686 +#: netbox/dcim/forms/bulk_edit.py:891 netbox/dcim/forms/bulk_import.py:133 +#: netbox/dcim/forms/bulk_import.py:232 netbox/dcim/forms/bulk_import.py:333 +#: netbox/dcim/forms/bulk_import.py:567 netbox/dcim/forms/bulk_import.py:1430 +#: netbox/dcim/forms/bulk_import.py:1458 netbox/dcim/forms/filtersets.py:88 +#: netbox/dcim/forms/filtersets.py:226 netbox/dcim/forms/filtersets.py:343 +#: netbox/dcim/forms/filtersets.py:440 netbox/dcim/forms/filtersets.py:754 +#: netbox/dcim/forms/filtersets.py:998 netbox/dcim/forms/filtersets.py:1022 +#: netbox/dcim/forms/filtersets.py:1112 netbox/dcim/forms/filtersets.py:1150 +#: netbox/dcim/forms/filtersets.py:1622 netbox/dcim/forms/filtersets.py:1646 +#: netbox/dcim/forms/filtersets.py:1670 netbox/dcim/forms/model_forms.py:141 +#: netbox/dcim/forms/model_forms.py:169 netbox/dcim/forms/model_forms.py:243 +#: netbox/dcim/forms/model_forms.py:473 netbox/dcim/forms/model_forms.py:734 +#: netbox/dcim/forms/object_create.py:383 netbox/dcim/tables/devices.py:164 #: netbox/dcim/tables/power.py:26 netbox/dcim/tables/power.py:93 -#: netbox/dcim/tables/racks.py:122 netbox/dcim/tables/racks.py:207 -#: netbox/dcim/tables/sites.py:134 netbox/extras/filtersets.py:525 -#: netbox/ipam/forms/bulk_edit.py:218 netbox/ipam/forms/bulk_edit.py:285 -#: netbox/ipam/forms/bulk_edit.py:484 netbox/ipam/forms/bulk_import.py:171 -#: netbox/ipam/forms/bulk_import.py:453 netbox/ipam/forms/filtersets.py:153 -#: netbox/ipam/forms/filtersets.py:231 netbox/ipam/forms/filtersets.py:432 -#: netbox/ipam/forms/filtersets.py:489 netbox/ipam/forms/model_forms.py:205 -#: netbox/ipam/forms/model_forms.py:669 netbox/ipam/tables/ip.py:245 -#: netbox/ipam/tables/vlans.py:118 netbox/ipam/tables/vlans.py:221 -#: netbox/templates/circuits/inc/circuit_termination_fields.html:6 -#: netbox/templates/dcim/device.html:22 +#: netbox/dcim/tables/racks.py:121 netbox/dcim/tables/racks.py:206 +#: netbox/dcim/tables/sites.py:133 netbox/extras/filtersets.py:525 +#: netbox/ipam/forms/bulk_edit.py:468 netbox/ipam/forms/bulk_import.py:452 +#: netbox/ipam/forms/filtersets.py:155 netbox/ipam/forms/filtersets.py:229 +#: netbox/ipam/forms/filtersets.py:435 netbox/ipam/forms/filtersets.py:530 +#: netbox/ipam/forms/model_forms.py:679 netbox/ipam/tables/vlans.py:87 +#: netbox/ipam/tables/vlans.py:197 netbox/templates/dcim/device.html:22 #: netbox/templates/dcim/inc/cable_termination.html:8 #: netbox/templates/dcim/inc/cable_termination.html:33 #: netbox/templates/dcim/location.html:37 #: netbox/templates/dcim/powerpanel.html:22 netbox/templates/dcim/rack.html:20 #: netbox/templates/dcim/rackreservation.html:28 -#: netbox/templates/dcim/site.html:28 netbox/templates/ipam/prefix.html:56 -#: netbox/templates/ipam/vlan.html:23 netbox/templates/ipam/vlan_edit.html:40 -#: netbox/templates/virtualization/cluster.html:42 +#: netbox/templates/dcim/site.html:28 netbox/templates/ipam/vlan.html:23 +#: netbox/templates/ipam/vlan_edit.html:48 #: netbox/templates/virtualization/virtualmachine.html:95 -#: netbox/virtualization/forms/bulk_edit.py:91 -#: netbox/virtualization/forms/bulk_edit.py:109 -#: netbox/virtualization/forms/bulk_edit.py:124 -#: netbox/virtualization/forms/bulk_import.py:59 -#: netbox/virtualization/forms/bulk_import.py:85 -#: netbox/virtualization/forms/filtersets.py:79 -#: netbox/virtualization/forms/filtersets.py:148 -#: netbox/virtualization/forms/model_forms.py:71 +#: netbox/virtualization/forms/bulk_edit.py:106 +#: netbox/virtualization/forms/bulk_import.py:60 +#: netbox/virtualization/forms/bulk_import.py:91 +#: netbox/virtualization/forms/filtersets.py:74 +#: netbox/virtualization/forms/filtersets.py:153 #: netbox/virtualization/forms/model_forms.py:104 -#: netbox/virtualization/forms/model_forms.py:171 -#: netbox/virtualization/tables/clusters.py:77 -#: netbox/virtualization/tables/virtualmachines.py:63 -#: netbox/vpn/forms/filtersets.py:266 netbox/wireless/forms/model_forms.py:76 -#: netbox/wireless/forms/model_forms.py:118 +#: netbox/virtualization/forms/model_forms.py:178 +#: netbox/virtualization/tables/virtualmachines.py:33 +#: netbox/vpn/forms/filtersets.py:266 netbox/wireless/forms/filtersets.py:88 +#: netbox/wireless/forms/model_forms.py:79 +#: netbox/wireless/forms/model_forms.py:121 msgid "Site" msgstr "Standort" -#: netbox/circuits/filtersets.py:62 netbox/circuits/filtersets.py:229 -#: netbox/circuits/filtersets.py:274 netbox/dcim/filtersets.py:242 -#: netbox/dcim/filtersets.py:363 netbox/dcim/filtersets.py:458 -#: netbox/extras/filtersets.py:531 netbox/ipam/filtersets.py:240 -#: netbox/ipam/filtersets.py:371 netbox/ipam/filtersets.py:991 -#: netbox/virtualization/filtersets.py:75 -#: netbox/virtualization/filtersets.py:203 netbox/vpn/filtersets.py:363 +#: netbox/circuits/filtersets.py:68 netbox/circuits/filtersets.py:235 +#: netbox/circuits/filtersets.py:315 netbox/dcim/base_filtersets.py:53 +#: netbox/dcim/filtersets.py:243 netbox/dcim/filtersets.py:364 +#: netbox/dcim/filtersets.py:459 netbox/extras/filtersets.py:531 +#: netbox/ipam/filtersets.py:243 netbox/ipam/filtersets.py:958 +#: netbox/virtualization/filtersets.py:169 netbox/vpn/filtersets.py:363 msgid "Site (slug)" msgstr "Standort (URL-Slug)" -#: netbox/circuits/filtersets.py:67 +#: netbox/circuits/filtersets.py:73 msgid "ASN (ID)" msgstr "ASN (ID)" -#: netbox/circuits/filtersets.py:73 netbox/circuits/forms/filtersets.py:31 -#: netbox/ipam/forms/model_forms.py:159 netbox/ipam/models/asns.py:108 -#: netbox/ipam/models/asns.py:125 netbox/ipam/tables/asn.py:41 +#: netbox/circuits/filtersets.py:79 netbox/circuits/forms/filtersets.py:39 +#: netbox/ipam/forms/model_forms.py:165 netbox/ipam/models/asns.py:105 +#: netbox/ipam/models/asns.py:122 netbox/ipam/tables/asn.py:41 #: netbox/templates/ipam/asn.html:20 msgid "ASN" msgstr "ASN" -#: netbox/circuits/filtersets.py:95 netbox/circuits/filtersets.py:122 -#: netbox/circuits/filtersets.py:156 netbox/circuits/filtersets.py:283 -#: netbox/circuits/filtersets.py:325 netbox/ipam/filtersets.py:245 +#: netbox/circuits/filtersets.py:101 netbox/circuits/filtersets.py:128 +#: netbox/circuits/filtersets.py:162 netbox/circuits/filtersets.py:338 +#: netbox/circuits/filtersets.py:406 netbox/circuits/filtersets.py:482 +#: netbox/circuits/filtersets.py:550 netbox/ipam/filtersets.py:248 msgid "Provider (ID)" msgstr "Provider (ID)" -#: netbox/circuits/filtersets.py:101 netbox/circuits/filtersets.py:128 -#: netbox/circuits/filtersets.py:162 netbox/circuits/filtersets.py:289 -#: netbox/circuits/filtersets.py:331 netbox/ipam/filtersets.py:251 +#: netbox/circuits/filtersets.py:107 netbox/circuits/filtersets.py:134 +#: netbox/circuits/filtersets.py:168 netbox/circuits/filtersets.py:344 +#: netbox/circuits/filtersets.py:488 netbox/circuits/filtersets.py:556 +#: netbox/ipam/filtersets.py:254 msgid "Provider (slug)" msgstr "Provider (URL-Slug)" -#: netbox/circuits/filtersets.py:167 +#: netbox/circuits/filtersets.py:173 netbox/circuits/filtersets.py:493 +#: netbox/circuits/filtersets.py:561 msgid "Provider account (ID)" msgstr "Providerkonto (ID)" -#: netbox/circuits/filtersets.py:173 +#: netbox/circuits/filtersets.py:179 netbox/circuits/filtersets.py:499 +#: netbox/circuits/filtersets.py:567 msgid "Provider account (account)" msgstr "Providerkonto (Konto)" -#: netbox/circuits/filtersets.py:178 +#: netbox/circuits/filtersets.py:184 netbox/circuits/filtersets.py:503 +#: netbox/circuits/filtersets.py:572 msgid "Provider network (ID)" msgstr "Providernetzwerk (ID)" -#: netbox/circuits/filtersets.py:182 +#: netbox/circuits/filtersets.py:188 msgid "Circuit type (ID)" msgstr "Transportnetz Typ (ID)" -#: netbox/circuits/filtersets.py:188 +#: netbox/circuits/filtersets.py:194 msgid "Circuit type (slug)" msgstr "Transportnetz Typ (URL-Slug)" -#: netbox/circuits/filtersets.py:223 netbox/circuits/filtersets.py:268 -#: netbox/dcim/filtersets.py:236 netbox/dcim/filtersets.py:357 -#: netbox/dcim/filtersets.py:452 netbox/dcim/filtersets.py:1045 -#: netbox/dcim/filtersets.py:1393 netbox/dcim/filtersets.py:1928 -#: netbox/dcim/filtersets.py:2170 netbox/dcim/filtersets.py:2229 -#: netbox/ipam/filtersets.py:234 netbox/ipam/filtersets.py:365 -#: netbox/ipam/filtersets.py:985 netbox/virtualization/filtersets.py:69 -#: netbox/virtualization/filtersets.py:197 netbox/vpn/filtersets.py:368 +#: netbox/circuits/filtersets.py:229 netbox/circuits/filtersets.py:309 +#: netbox/dcim/base_filtersets.py:47 netbox/dcim/filtersets.py:237 +#: netbox/dcim/filtersets.py:358 netbox/dcim/filtersets.py:453 +#: netbox/dcim/filtersets.py:1046 netbox/dcim/filtersets.py:1395 +#: netbox/dcim/filtersets.py:2052 netbox/dcim/filtersets.py:2294 +#: netbox/dcim/filtersets.py:2353 netbox/ipam/filtersets.py:237 +#: netbox/ipam/filtersets.py:952 netbox/virtualization/filtersets.py:163 +#: netbox/vpn/filtersets.py:368 msgid "Site (ID)" msgstr "Standort (ID)" -#: netbox/circuits/filtersets.py:233 netbox/circuits/filtersets.py:237 +#: netbox/circuits/filtersets.py:239 netbox/circuits/filtersets.py:321 +#: netbox/dcim/base_filtersets.py:59 netbox/dcim/filtersets.py:259 +#: netbox/dcim/filtersets.py:370 netbox/dcim/filtersets.py:491 +#: netbox/dcim/filtersets.py:1058 netbox/dcim/filtersets.py:1406 +#: netbox/dcim/filtersets.py:2306 +msgid "Location (ID)" +msgstr "Lokation (ID)" + +#: netbox/circuits/filtersets.py:244 netbox/circuits/filtersets.py:248 msgid "Termination A (ID)" msgstr "Abschlusspunkt A (ID)" -#: netbox/circuits/filtersets.py:260 netbox/circuits/filtersets.py:320 -#: netbox/core/filtersets.py:77 netbox/core/filtersets.py:136 -#: netbox/core/filtersets.py:173 netbox/dcim/filtersets.py:751 -#: netbox/dcim/filtersets.py:1362 netbox/dcim/filtersets.py:2277 -#: netbox/extras/filtersets.py:41 netbox/extras/filtersets.py:63 -#: netbox/extras/filtersets.py:92 netbox/extras/filtersets.py:132 -#: netbox/extras/filtersets.py:181 netbox/extras/filtersets.py:209 -#: netbox/extras/filtersets.py:239 netbox/extras/filtersets.py:276 -#: netbox/extras/filtersets.py:348 netbox/extras/filtersets.py:391 -#: netbox/extras/filtersets.py:438 netbox/extras/filtersets.py:498 -#: netbox/extras/filtersets.py:657 netbox/extras/filtersets.py:703 -#: netbox/ipam/forms/model_forms.py:482 netbox/netbox/filtersets.py:282 -#: netbox/netbox/forms/__init__.py:22 netbox/netbox/forms/base.py:167 +#: netbox/circuits/filtersets.py:273 netbox/circuits/filtersets.py:375 +#: netbox/circuits/filtersets.py:537 netbox/core/filtersets.py:77 +#: netbox/core/filtersets.py:136 netbox/core/filtersets.py:173 +#: netbox/dcim/filtersets.py:752 netbox/dcim/filtersets.py:1364 +#: netbox/dcim/filtersets.py:2401 netbox/extras/filtersets.py:41 +#: netbox/extras/filtersets.py:63 netbox/extras/filtersets.py:92 +#: netbox/extras/filtersets.py:132 netbox/extras/filtersets.py:181 +#: netbox/extras/filtersets.py:209 netbox/extras/filtersets.py:239 +#: netbox/extras/filtersets.py:276 netbox/extras/filtersets.py:348 +#: netbox/extras/filtersets.py:391 netbox/extras/filtersets.py:438 +#: netbox/extras/filtersets.py:498 netbox/extras/filtersets.py:657 +#: netbox/extras/filtersets.py:703 netbox/ipam/forms/model_forms.py:492 +#: netbox/netbox/filtersets.py:286 netbox/netbox/forms/__init__.py:22 +#: netbox/netbox/forms/base.py:167 #: netbox/templates/htmx/object_selector.html:28 #: netbox/templates/inc/filter_list.html:46 #: netbox/templates/ipam/ipaddress_assign.html:29 @@ -351,97 +367,150 @@ msgstr "Abschlusspunkt A (ID)" msgid "Search" msgstr "Suche" -#: netbox/circuits/filtersets.py:264 netbox/circuits/forms/bulk_edit.py:172 -#: netbox/circuits/forms/bulk_edit.py:246 -#: netbox/circuits/forms/bulk_import.py:115 -#: netbox/circuits/forms/filtersets.py:198 -#: netbox/circuits/forms/filtersets.py:214 -#: netbox/circuits/forms/filtersets.py:260 -#: netbox/circuits/forms/model_forms.py:111 -#: netbox/circuits/forms/model_forms.py:133 -#: netbox/circuits/forms/model_forms.py:199 -#: netbox/circuits/tables/circuits.py:104 -#: netbox/circuits/tables/circuits.py:164 netbox/dcim/forms/connections.py:73 +#: netbox/circuits/filtersets.py:277 netbox/circuits/forms/bulk_edit.py:195 +#: netbox/circuits/forms/bulk_edit.py:284 +#: netbox/circuits/forms/bulk_import.py:128 +#: netbox/circuits/forms/filtersets.py:223 +#: netbox/circuits/forms/filtersets.py:250 +#: netbox/circuits/forms/filtersets.py:296 +#: netbox/circuits/forms/model_forms.py:139 +#: netbox/circuits/forms/model_forms.py:162 +#: netbox/circuits/forms/model_forms.py:262 +#: netbox/circuits/tables/circuits.py:108 +#: netbox/circuits/tables/circuits.py:203 netbox/dcim/forms/connections.py:73 #: netbox/templates/circuits/circuit.html:15 -#: netbox/templates/circuits/circuitgroupassignment.html:26 +#: netbox/templates/circuits/circuitgroupassignment.html:30 #: netbox/templates/circuits/circuittermination.html:19 #: netbox/templates/dcim/inc/cable_termination.html:55 #: netbox/templates/dcim/trace/circuit.html:4 msgid "Circuit" msgstr "Transportnetz" -#: netbox/circuits/filtersets.py:278 +#: netbox/circuits/filtersets.py:328 netbox/dcim/base_filtersets.py:66 +#: netbox/dcim/filtersets.py:266 netbox/dcim/filtersets.py:377 +#: netbox/dcim/filtersets.py:498 netbox/dcim/filtersets.py:1412 +#: netbox/extras/filtersets.py:542 +msgid "Location (slug)" +msgstr "Lokation (URL-Slug)" + +#: netbox/circuits/filtersets.py:333 msgid "ProviderNetwork (ID)" msgstr "Providernetzwerk (ID)" -#: netbox/circuits/filtersets.py:335 -msgid "Circuit (ID)" -msgstr "Transportnetz (ID)" - -#: netbox/circuits/filtersets.py:341 +#: netbox/circuits/filtersets.py:381 msgid "Circuit (CID)" msgstr "Transportnetz (CID)" -#: netbox/circuits/filtersets.py:345 +#: netbox/circuits/filtersets.py:386 +msgid "Circuit (ID)" +msgstr "Transportnetz (ID)" + +#: netbox/circuits/filtersets.py:391 +msgid "Virtual circuit (CID)" +msgstr "Virtuelle Verbindung (CID)" + +#: netbox/circuits/filtersets.py:396 netbox/dcim/filtersets.py:1849 +msgid "Virtual circuit (ID)" +msgstr "Virtuelle Verbindung (ID)" + +#: netbox/circuits/filtersets.py:401 +msgid "Provider (name)" +msgstr "Provider (Name)" + +#: netbox/circuits/filtersets.py:410 msgid "Circuit group (ID)" msgstr "Transportnetzgruppe (ID)" -#: netbox/circuits/filtersets.py:351 +#: netbox/circuits/filtersets.py:416 msgid "Circuit group (slug)" msgstr "Transportnetzgruppe (SLUG)" -#: netbox/circuits/forms/bulk_edit.py:30 -#: netbox/circuits/forms/filtersets.py:56 -#: netbox/circuits/forms/model_forms.py:29 -#: netbox/circuits/tables/providers.py:33 netbox/dcim/forms/bulk_edit.py:129 -#: netbox/dcim/forms/filtersets.py:195 netbox/dcim/forms/model_forms.py:123 -#: netbox/dcim/tables/sites.py:94 netbox/ipam/models/asns.py:126 -#: netbox/ipam/tables/asn.py:27 netbox/ipam/views.py:213 -#: netbox/netbox/navigation/menu.py:172 netbox/netbox/navigation/menu.py:175 +#: netbox/circuits/filtersets.py:507 +msgid "Virtual circuit type (ID)" +msgstr "Virtueller Verbindungstyp (ID)" + +#: netbox/circuits/filtersets.py:513 +msgid "Virtual circuit type (slug)" +msgstr "Virtueller Verbindungstyp (Slug)" + +#: netbox/circuits/filtersets.py:541 netbox/circuits/forms/bulk_edit.py:355 +#: netbox/circuits/forms/bulk_import.py:249 +#: netbox/circuits/forms/filtersets.py:372 +#: netbox/circuits/forms/filtersets.py:378 +#: netbox/circuits/forms/model_forms.py:343 +#: netbox/circuits/forms/model_forms.py:358 +#: netbox/circuits/tables/virtual_circuits.py:88 +#: netbox/templates/circuits/virtualcircuit.html:20 +#: netbox/templates/circuits/virtualcircuittermination.html:38 +msgid "Virtual circuit" +msgstr "Virtuelle Verbindung" + +#: netbox/circuits/filtersets.py:577 netbox/dcim/filtersets.py:1269 +#: netbox/dcim/filtersets.py:1634 netbox/ipam/filtersets.py:601 +#: netbox/vpn/filtersets.py:102 netbox/vpn/filtersets.py:401 +msgid "Interface (ID)" +msgstr "Schnittstelle (ID)" + +#: netbox/circuits/forms/bulk_edit.py:42 +#: netbox/circuits/forms/filtersets.py:64 +#: netbox/circuits/forms/model_forms.py:42 +#: netbox/circuits/tables/providers.py:32 netbox/dcim/forms/bulk_edit.py:132 +#: netbox/dcim/forms/filtersets.py:196 netbox/dcim/forms/model_forms.py:127 +#: netbox/dcim/tables/sites.py:94 netbox/ipam/models/asns.py:123 +#: netbox/ipam/tables/asn.py:27 netbox/ipam/views.py:230 +#: netbox/netbox/navigation/menu.py:178 netbox/netbox/navigation/menu.py:181 #: netbox/templates/circuits/provider.html:23 msgid "ASNs" msgstr "ASNs" -#: netbox/circuits/forms/bulk_edit.py:34 netbox/circuits/forms/bulk_edit.py:56 -#: netbox/circuits/forms/bulk_edit.py:83 -#: netbox/circuits/forms/bulk_edit.py:104 -#: netbox/circuits/forms/bulk_edit.py:164 -#: netbox/circuits/forms/bulk_edit.py:183 -#: netbox/circuits/forms/bulk_edit.py:228 netbox/core/forms/bulk_edit.py:28 -#: netbox/dcim/forms/bulk_create.py:35 netbox/dcim/forms/bulk_edit.py:74 -#: netbox/dcim/forms/bulk_edit.py:93 netbox/dcim/forms/bulk_edit.py:152 -#: netbox/dcim/forms/bulk_edit.py:193 netbox/dcim/forms/bulk_edit.py:211 -#: netbox/dcim/forms/bulk_edit.py:289 netbox/dcim/forms/bulk_edit.py:438 -#: netbox/dcim/forms/bulk_edit.py:472 netbox/dcim/forms/bulk_edit.py:487 -#: netbox/dcim/forms/bulk_edit.py:546 netbox/dcim/forms/bulk_edit.py:590 -#: netbox/dcim/forms/bulk_edit.py:624 netbox/dcim/forms/bulk_edit.py:648 -#: netbox/dcim/forms/bulk_edit.py:721 netbox/dcim/forms/bulk_edit.py:782 -#: netbox/dcim/forms/bulk_edit.py:834 netbox/dcim/forms/bulk_edit.py:857 -#: netbox/dcim/forms/bulk_edit.py:905 netbox/dcim/forms/bulk_edit.py:975 -#: netbox/dcim/forms/bulk_edit.py:1028 netbox/dcim/forms/bulk_edit.py:1063 -#: netbox/dcim/forms/bulk_edit.py:1103 netbox/dcim/forms/bulk_edit.py:1147 -#: netbox/dcim/forms/bulk_edit.py:1192 netbox/dcim/forms/bulk_edit.py:1219 -#: netbox/dcim/forms/bulk_edit.py:1237 netbox/dcim/forms/bulk_edit.py:1255 -#: netbox/dcim/forms/bulk_edit.py:1273 netbox/dcim/forms/bulk_edit.py:1725 -#: netbox/extras/forms/bulk_edit.py:39 netbox/extras/forms/bulk_edit.py:149 -#: netbox/extras/forms/bulk_edit.py:178 netbox/extras/forms/bulk_edit.py:208 -#: netbox/extras/forms/bulk_edit.py:256 netbox/extras/forms/bulk_edit.py:274 -#: netbox/extras/forms/bulk_edit.py:298 netbox/extras/forms/bulk_edit.py:312 -#: netbox/extras/forms/bulk_edit.py:339 netbox/extras/tables/tables.py:79 -#: netbox/ipam/forms/bulk_edit.py:53 netbox/ipam/forms/bulk_edit.py:73 -#: netbox/ipam/forms/bulk_edit.py:93 netbox/ipam/forms/bulk_edit.py:117 -#: netbox/ipam/forms/bulk_edit.py:146 netbox/ipam/forms/bulk_edit.py:175 -#: netbox/ipam/forms/bulk_edit.py:194 netbox/ipam/forms/bulk_edit.py:276 -#: netbox/ipam/forms/bulk_edit.py:321 netbox/ipam/forms/bulk_edit.py:369 -#: netbox/ipam/forms/bulk_edit.py:412 netbox/ipam/forms/bulk_edit.py:428 -#: netbox/ipam/forms/bulk_edit.py:516 netbox/ipam/forms/bulk_edit.py:547 +#: netbox/circuits/forms/bulk_edit.py:46 netbox/circuits/forms/bulk_edit.py:68 +#: netbox/circuits/forms/bulk_edit.py:95 +#: netbox/circuits/forms/bulk_edit.py:116 +#: netbox/circuits/forms/bulk_edit.py:187 +#: netbox/circuits/forms/bulk_edit.py:207 +#: netbox/circuits/forms/bulk_edit.py:266 +#: netbox/circuits/forms/bulk_edit.py:307 +#: netbox/circuits/forms/bulk_edit.py:347 +#: netbox/circuits/forms/bulk_edit.py:371 netbox/core/forms/bulk_edit.py:28 +#: netbox/dcim/forms/bulk_create.py:35 netbox/dcim/forms/bulk_edit.py:77 +#: netbox/dcim/forms/bulk_edit.py:96 netbox/dcim/forms/bulk_edit.py:155 +#: netbox/dcim/forms/bulk_edit.py:196 netbox/dcim/forms/bulk_edit.py:214 +#: netbox/dcim/forms/bulk_edit.py:292 netbox/dcim/forms/bulk_edit.py:441 +#: netbox/dcim/forms/bulk_edit.py:475 netbox/dcim/forms/bulk_edit.py:490 +#: netbox/dcim/forms/bulk_edit.py:549 netbox/dcim/forms/bulk_edit.py:593 +#: netbox/dcim/forms/bulk_edit.py:627 netbox/dcim/forms/bulk_edit.py:651 +#: netbox/dcim/forms/bulk_edit.py:724 netbox/dcim/forms/bulk_edit.py:785 +#: netbox/dcim/forms/bulk_edit.py:837 netbox/dcim/forms/bulk_edit.py:860 +#: netbox/dcim/forms/bulk_edit.py:908 netbox/dcim/forms/bulk_edit.py:978 +#: netbox/dcim/forms/bulk_edit.py:1031 netbox/dcim/forms/bulk_edit.py:1066 +#: netbox/dcim/forms/bulk_edit.py:1106 netbox/dcim/forms/bulk_edit.py:1150 +#: netbox/dcim/forms/bulk_edit.py:1195 netbox/dcim/forms/bulk_edit.py:1222 +#: netbox/dcim/forms/bulk_edit.py:1240 netbox/dcim/forms/bulk_edit.py:1258 +#: netbox/dcim/forms/bulk_edit.py:1276 netbox/dcim/forms/bulk_edit.py:1746 +#: netbox/dcim/forms/bulk_edit.py:1787 netbox/extras/forms/bulk_edit.py:39 +#: netbox/extras/forms/bulk_edit.py:149 netbox/extras/forms/bulk_edit.py:178 +#: netbox/extras/forms/bulk_edit.py:208 netbox/extras/forms/bulk_edit.py:256 +#: netbox/extras/forms/bulk_edit.py:274 netbox/extras/forms/bulk_edit.py:298 +#: netbox/extras/forms/bulk_edit.py:312 netbox/extras/forms/bulk_edit.py:339 +#: netbox/extras/tables/tables.py:79 netbox/ipam/forms/bulk_edit.py:56 +#: netbox/ipam/forms/bulk_edit.py:76 netbox/ipam/forms/bulk_edit.py:96 +#: netbox/ipam/forms/bulk_edit.py:120 netbox/ipam/forms/bulk_edit.py:149 +#: netbox/ipam/forms/bulk_edit.py:178 netbox/ipam/forms/bulk_edit.py:197 +#: netbox/ipam/forms/bulk_edit.py:260 netbox/ipam/forms/bulk_edit.py:305 +#: netbox/ipam/forms/bulk_edit.py:353 netbox/ipam/forms/bulk_edit.py:396 +#: netbox/ipam/forms/bulk_edit.py:412 netbox/ipam/forms/bulk_edit.py:500 +#: netbox/ipam/forms/bulk_edit.py:532 netbox/ipam/forms/bulk_edit.py:575 +#: netbox/ipam/tables/vlans.py:240 netbox/ipam/tables/vlans.py:267 #: netbox/templates/account/token.html:35 -#: netbox/templates/circuits/circuit.html:59 +#: netbox/templates/circuits/circuit.html:69 #: netbox/templates/circuits/circuitgroup.html:32 #: netbox/templates/circuits/circuittype.html:26 -#: netbox/templates/circuits/inc/circuit_termination_fields.html:88 +#: netbox/templates/circuits/inc/circuit_termination_fields.html:83 #: netbox/templates/circuits/provider.html:33 #: netbox/templates/circuits/providernetwork.html:32 +#: netbox/templates/circuits/virtualcircuit.html:56 +#: netbox/templates/circuits/virtualcircuittermination.html:68 +#: netbox/templates/circuits/virtualcircuittype.html:26 #: netbox/templates/core/datasource.html:54 #: netbox/templates/core/plugin.html:80 netbox/templates/dcim/cable.html:36 #: netbox/templates/dcim/consoleport.html:44 @@ -452,13 +521,14 @@ msgstr "ASNs" #: netbox/templates/dcim/devicetype.html:33 #: netbox/templates/dcim/frontport.html:58 #: netbox/templates/dcim/interface.html:69 -#: netbox/templates/dcim/inventoryitem.html:60 +#: netbox/templates/dcim/inventoryitem.html:64 #: netbox/templates/dcim/inventoryitemrole.html:22 #: netbox/templates/dcim/location.html:33 +#: netbox/templates/dcim/macaddress.html:21 #: netbox/templates/dcim/manufacturer.html:40 #: netbox/templates/dcim/module.html:73 #: netbox/templates/dcim/modulebay.html:42 -#: netbox/templates/dcim/moduletype.html:37 +#: netbox/templates/dcim/moduletype.html:39 #: netbox/templates/dcim/platform.html:33 #: netbox/templates/dcim/powerfeed.html:40 #: netbox/templates/dcim/poweroutlet.html:40 @@ -485,12 +555,14 @@ msgstr "ASNs" #: netbox/templates/ipam/asnrange.html:38 #: netbox/templates/ipam/fhrpgroup.html:34 #: netbox/templates/ipam/ipaddress.html:55 -#: netbox/templates/ipam/iprange.html:67 netbox/templates/ipam/prefix.html:81 +#: netbox/templates/ipam/iprange.html:67 netbox/templates/ipam/prefix.html:77 #: netbox/templates/ipam/rir.html:26 netbox/templates/ipam/role.html:26 #: netbox/templates/ipam/routetarget.html:21 #: netbox/templates/ipam/service.html:50 #: netbox/templates/ipam/servicetemplate.html:27 #: netbox/templates/ipam/vlan.html:62 netbox/templates/ipam/vlangroup.html:34 +#: netbox/templates/ipam/vlantranslationpolicy.html:18 +#: netbox/templates/ipam/vlantranslationrule.html:26 #: netbox/templates/ipam/vrf.html:33 netbox/templates/tenancy/contact.html:67 #: netbox/templates/tenancy/contactgroup.html:25 #: netbox/templates/tenancy/contactrole.html:22 @@ -504,7 +576,7 @@ msgstr "ASNs" #: netbox/templates/virtualization/clustertype.html:26 #: netbox/templates/virtualization/virtualdisk.html:39 #: netbox/templates/virtualization/virtualmachine.html:31 -#: netbox/templates/virtualization/vminterface.html:51 +#: netbox/templates/virtualization/vminterface.html:47 #: netbox/templates/vpn/ikepolicy.html:17 #: netbox/templates/vpn/ikeproposal.html:17 #: netbox/templates/vpn/ipsecpolicy.html:17 @@ -514,119 +586,142 @@ msgstr "ASNs" #: netbox/templates/vpn/ipsecproposal.html:17 #: netbox/templates/vpn/l2vpn.html:26 netbox/templates/vpn/tunnel.html:33 #: netbox/templates/vpn/tunnelgroup.html:30 -#: netbox/templates/wireless/wirelesslan.html:26 +#: netbox/templates/wireless/wirelesslan.html:34 #: netbox/templates/wireless/wirelesslangroup.html:33 #: netbox/templates/wireless/wirelesslink.html:34 #: netbox/tenancy/forms/bulk_edit.py:32 netbox/tenancy/forms/bulk_edit.py:80 #: netbox/tenancy/forms/bulk_edit.py:122 netbox/users/forms/bulk_edit.py:64 #: netbox/users/forms/bulk_edit.py:82 netbox/users/forms/bulk_edit.py:112 -#: netbox/virtualization/forms/bulk_edit.py:32 -#: netbox/virtualization/forms/bulk_edit.py:46 -#: netbox/virtualization/forms/bulk_edit.py:100 -#: netbox/virtualization/forms/bulk_edit.py:177 -#: netbox/virtualization/forms/bulk_edit.py:228 -#: netbox/virtualization/forms/bulk_edit.py:337 +#: netbox/virtualization/forms/bulk_edit.py:33 +#: netbox/virtualization/forms/bulk_edit.py:47 +#: netbox/virtualization/forms/bulk_edit.py:82 +#: netbox/virtualization/forms/bulk_edit.py:159 +#: netbox/virtualization/forms/bulk_edit.py:210 +#: netbox/virtualization/forms/bulk_edit.py:327 #: netbox/vpn/forms/bulk_edit.py:28 netbox/vpn/forms/bulk_edit.py:64 #: netbox/vpn/forms/bulk_edit.py:121 netbox/vpn/forms/bulk_edit.py:155 #: netbox/vpn/forms/bulk_edit.py:190 netbox/vpn/forms/bulk_edit.py:215 #: netbox/vpn/forms/bulk_edit.py:247 netbox/vpn/forms/bulk_edit.py:274 -#: netbox/wireless/forms/bulk_edit.py:29 netbox/wireless/forms/bulk_edit.py:82 -#: netbox/wireless/forms/bulk_edit.py:140 +#: netbox/wireless/forms/bulk_edit.py:31 netbox/wireless/forms/bulk_edit.py:84 +#: netbox/wireless/forms/bulk_edit.py:143 msgid "Description" msgstr "Beschreibung" -#: netbox/circuits/forms/bulk_edit.py:51 netbox/circuits/forms/bulk_edit.py:73 -#: netbox/circuits/forms/bulk_edit.py:123 -#: netbox/circuits/forms/bulk_import.py:36 -#: netbox/circuits/forms/bulk_import.py:51 -#: netbox/circuits/forms/bulk_import.py:74 -#: netbox/circuits/forms/filtersets.py:70 -#: netbox/circuits/forms/filtersets.py:88 -#: netbox/circuits/forms/filtersets.py:116 -#: netbox/circuits/forms/filtersets.py:131 -#: netbox/circuits/forms/filtersets.py:199 -#: netbox/circuits/forms/filtersets.py:232 -#: netbox/circuits/forms/filtersets.py:255 -#: netbox/circuits/forms/model_forms.py:47 -#: netbox/circuits/forms/model_forms.py:61 -#: netbox/circuits/forms/model_forms.py:93 -#: netbox/circuits/tables/circuits.py:58 -#: netbox/circuits/tables/circuits.py:108 -#: netbox/circuits/tables/circuits.py:160 -#: netbox/circuits/tables/providers.py:72 -#: netbox/circuits/tables/providers.py:103 +#: netbox/circuits/forms/bulk_edit.py:63 netbox/circuits/forms/bulk_edit.py:85 +#: netbox/circuits/forms/bulk_edit.py:135 +#: netbox/circuits/forms/bulk_import.py:43 +#: netbox/circuits/forms/bulk_import.py:58 +#: netbox/circuits/forms/bulk_import.py:81 +#: netbox/circuits/forms/filtersets.py:78 +#: netbox/circuits/forms/filtersets.py:96 +#: netbox/circuits/forms/filtersets.py:124 +#: netbox/circuits/forms/filtersets.py:142 +#: netbox/circuits/forms/filtersets.py:224 +#: netbox/circuits/forms/filtersets.py:268 +#: netbox/circuits/forms/filtersets.py:291 +#: netbox/circuits/forms/filtersets.py:329 +#: netbox/circuits/forms/filtersets.py:337 +#: netbox/circuits/forms/filtersets.py:373 +#: netbox/circuits/forms/filtersets.py:396 +#: netbox/circuits/forms/model_forms.py:60 +#: netbox/circuits/forms/model_forms.py:76 +#: netbox/circuits/forms/model_forms.py:110 +#: netbox/circuits/tables/circuits.py:57 +#: netbox/circuits/tables/circuits.py:112 +#: netbox/circuits/tables/circuits.py:196 +#: netbox/circuits/tables/providers.py:70 +#: netbox/circuits/tables/providers.py:101 +#: netbox/circuits/tables/virtual_circuits.py:46 +#: netbox/circuits/tables/virtual_circuits.py:93 #: netbox/templates/circuits/circuit.html:18 +#: netbox/templates/circuits/circuitgroupassignment.html:26 #: netbox/templates/circuits/circuittermination.html:25 #: netbox/templates/circuits/provider.html:20 #: netbox/templates/circuits/provideraccount.html:20 #: netbox/templates/circuits/providernetwork.html:20 +#: netbox/templates/circuits/virtualcircuit.html:23 +#: netbox/templates/circuits/virtualcircuittermination.html:26 #: netbox/templates/dcim/inc/cable_termination.html:51 +#: netbox/templates/dcim/interface.html:166 msgid "Provider" msgstr "Provider" -#: netbox/circuits/forms/bulk_edit.py:80 -#: netbox/circuits/forms/filtersets.py:91 +#: netbox/circuits/forms/bulk_edit.py:92 +#: netbox/circuits/forms/filtersets.py:99 #: netbox/templates/circuits/providernetwork.html:28 msgid "Service ID" msgstr "Dienst ID" -#: netbox/circuits/forms/bulk_edit.py:100 -#: netbox/circuits/forms/filtersets.py:107 netbox/dcim/forms/bulk_edit.py:207 -#: netbox/dcim/forms/bulk_edit.py:610 netbox/dcim/forms/bulk_edit.py:819 -#: netbox/dcim/forms/bulk_edit.py:1188 netbox/dcim/forms/bulk_edit.py:1215 -#: netbox/dcim/forms/bulk_edit.py:1721 netbox/dcim/forms/filtersets.py:1064 -#: netbox/dcim/forms/filtersets.py:1455 netbox/dcim/forms/filtersets.py:1479 -#: netbox/dcim/tables/devices.py:704 netbox/dcim/tables/devices.py:761 -#: netbox/dcim/tables/devices.py:1003 netbox/dcim/tables/devicetypes.py:249 -#: netbox/dcim/tables/devicetypes.py:264 netbox/dcim/tables/racks.py:33 -#: netbox/extras/forms/bulk_edit.py:270 netbox/extras/tables/tables.py:443 +#: netbox/circuits/forms/bulk_edit.py:112 +#: netbox/circuits/forms/bulk_edit.py:303 +#: netbox/circuits/forms/filtersets.py:115 +#: netbox/circuits/forms/filtersets.py:320 netbox/dcim/forms/bulk_edit.py:210 +#: netbox/dcim/forms/bulk_edit.py:613 netbox/dcim/forms/bulk_edit.py:822 +#: netbox/dcim/forms/bulk_edit.py:1191 netbox/dcim/forms/bulk_edit.py:1218 +#: netbox/dcim/forms/bulk_edit.py:1742 netbox/dcim/forms/filtersets.py:1065 +#: netbox/dcim/forms/filtersets.py:1323 netbox/dcim/forms/filtersets.py:1460 +#: netbox/dcim/forms/filtersets.py:1484 netbox/dcim/tables/devices.py:738 +#: netbox/dcim/tables/devices.py:794 netbox/dcim/tables/devices.py:1035 +#: netbox/dcim/tables/devicetypes.py:256 netbox/dcim/tables/devicetypes.py:271 +#: netbox/dcim/tables/racks.py:33 netbox/extras/forms/bulk_edit.py:270 +#: netbox/extras/tables/tables.py:443 #: netbox/templates/circuits/circuittype.html:30 +#: netbox/templates/circuits/virtualcircuittype.html:30 #: netbox/templates/dcim/cable.html:40 #: netbox/templates/dcim/devicerole.html:34 #: netbox/templates/dcim/frontport.html:40 #: netbox/templates/dcim/inventoryitemrole.html:26 +#: netbox/templates/dcim/poweroutlet.html:44 #: netbox/templates/dcim/rackrole.html:30 #: netbox/templates/dcim/rearport.html:40 netbox/templates/extras/tag.html:26 msgid "Color" msgstr "Farbe" -#: netbox/circuits/forms/bulk_edit.py:118 -#: netbox/circuits/forms/bulk_import.py:87 -#: netbox/circuits/forms/filtersets.py:126 netbox/core/forms/bulk_edit.py:18 -#: netbox/core/forms/filtersets.py:33 netbox/core/tables/change_logging.py:32 -#: netbox/core/tables/data.py:20 netbox/core/tables/jobs.py:18 -#: netbox/dcim/forms/bulk_edit.py:797 netbox/dcim/forms/bulk_edit.py:936 -#: netbox/dcim/forms/bulk_edit.py:1004 netbox/dcim/forms/bulk_edit.py:1023 -#: netbox/dcim/forms/bulk_edit.py:1046 netbox/dcim/forms/bulk_edit.py:1088 -#: netbox/dcim/forms/bulk_edit.py:1132 netbox/dcim/forms/bulk_edit.py:1183 -#: netbox/dcim/forms/bulk_edit.py:1210 netbox/dcim/forms/bulk_import.py:188 -#: netbox/dcim/forms/bulk_import.py:267 netbox/dcim/forms/bulk_import.py:730 -#: netbox/dcim/forms/bulk_import.py:756 netbox/dcim/forms/bulk_import.py:782 -#: netbox/dcim/forms/bulk_import.py:802 netbox/dcim/forms/bulk_import.py:885 -#: netbox/dcim/forms/bulk_import.py:979 netbox/dcim/forms/bulk_import.py:1021 -#: netbox/dcim/forms/bulk_import.py:1235 netbox/dcim/forms/bulk_import.py:1398 -#: netbox/dcim/forms/filtersets.py:955 netbox/dcim/forms/filtersets.py:1054 -#: netbox/dcim/forms/filtersets.py:1175 netbox/dcim/forms/filtersets.py:1247 -#: netbox/dcim/forms/filtersets.py:1272 netbox/dcim/forms/filtersets.py:1296 -#: netbox/dcim/forms/filtersets.py:1316 netbox/dcim/forms/filtersets.py:1353 -#: netbox/dcim/forms/filtersets.py:1450 netbox/dcim/forms/filtersets.py:1474 -#: netbox/dcim/forms/model_forms.py:703 netbox/dcim/forms/model_forms.py:709 -#: netbox/dcim/forms/object_import.py:84 +#: netbox/circuits/forms/bulk_edit.py:130 +#: netbox/circuits/forms/bulk_edit.py:331 +#: netbox/circuits/forms/bulk_import.py:94 +#: netbox/circuits/forms/bulk_import.py:221 +#: netbox/circuits/forms/filtersets.py:137 +#: netbox/circuits/forms/filtersets.py:358 +#: netbox/circuits/tables/circuits.py:65 +#: netbox/circuits/tables/circuits.py:200 +#: netbox/circuits/tables/virtual_circuits.py:58 +#: netbox/core/forms/bulk_edit.py:18 netbox/core/forms/filtersets.py:33 +#: netbox/core/tables/change_logging.py:32 netbox/core/tables/data.py:20 +#: netbox/core/tables/jobs.py:18 netbox/dcim/forms/bulk_edit.py:800 +#: netbox/dcim/forms/bulk_edit.py:939 netbox/dcim/forms/bulk_edit.py:1007 +#: netbox/dcim/forms/bulk_edit.py:1026 netbox/dcim/forms/bulk_edit.py:1049 +#: netbox/dcim/forms/bulk_edit.py:1091 netbox/dcim/forms/bulk_edit.py:1135 +#: netbox/dcim/forms/bulk_edit.py:1186 netbox/dcim/forms/bulk_edit.py:1213 +#: netbox/dcim/forms/bulk_import.py:190 netbox/dcim/forms/bulk_import.py:269 +#: netbox/dcim/forms/bulk_import.py:735 netbox/dcim/forms/bulk_import.py:761 +#: netbox/dcim/forms/bulk_import.py:787 netbox/dcim/forms/bulk_import.py:807 +#: netbox/dcim/forms/bulk_import.py:893 netbox/dcim/forms/bulk_import.py:987 +#: netbox/dcim/forms/bulk_import.py:1029 netbox/dcim/forms/bulk_import.py:1332 +#: netbox/dcim/forms/bulk_import.py:1495 netbox/dcim/forms/filtersets.py:956 +#: netbox/dcim/forms/filtersets.py:1055 netbox/dcim/forms/filtersets.py:1176 +#: netbox/dcim/forms/filtersets.py:1248 netbox/dcim/forms/filtersets.py:1273 +#: netbox/dcim/forms/filtersets.py:1297 netbox/dcim/forms/filtersets.py:1317 +#: netbox/dcim/forms/filtersets.py:1358 netbox/dcim/forms/filtersets.py:1455 +#: netbox/dcim/forms/filtersets.py:1479 netbox/dcim/forms/model_forms.py:714 +#: netbox/dcim/forms/model_forms.py:720 netbox/dcim/forms/object_import.py:84 #: netbox/dcim/forms/object_import.py:113 -#: netbox/dcim/forms/object_import.py:145 netbox/dcim/tables/devices.py:178 -#: netbox/dcim/tables/devices.py:814 netbox/dcim/tables/power.py:77 -#: netbox/dcim/tables/racks.py:138 netbox/extras/forms/bulk_import.py:42 +#: netbox/dcim/forms/object_import.py:146 netbox/dcim/tables/devices.py:189 +#: netbox/dcim/tables/devices.py:846 netbox/dcim/tables/power.py:77 +#: netbox/dcim/tables/racks.py:137 netbox/extras/forms/bulk_import.py:42 #: netbox/extras/tables/tables.py:405 netbox/extras/tables/tables.py:465 -#: netbox/netbox/tables/tables.py:240 +#: netbox/netbox/tables/tables.py:243 #: netbox/templates/circuits/circuit.html:30 +#: netbox/templates/circuits/virtualcircuit.html:39 +#: netbox/templates/circuits/virtualcircuittermination.html:64 #: netbox/templates/core/datasource.html:38 #: netbox/templates/dcim/cable.html:15 #: netbox/templates/dcim/consoleport.html:36 #: netbox/templates/dcim/consoleserverport.html:36 #: netbox/templates/dcim/frontport.html:36 #: netbox/templates/dcim/interface.html:46 -#: netbox/templates/dcim/interface.html:169 -#: netbox/templates/dcim/interface.html:311 +#: netbox/templates/dcim/interface.html:226 +#: netbox/templates/dcim/interface.html:368 #: netbox/templates/dcim/powerfeed.html:32 #: netbox/templates/dcim/poweroutlet.html:36 #: netbox/templates/dcim/powerport.html:36 @@ -636,65 +731,78 @@ msgstr "Farbe" #: netbox/templates/vpn/l2vpn.html:22 #: netbox/templates/wireless/inc/authentication_attrs.html:8 #: netbox/templates/wireless/inc/wirelesslink_interface.html:14 -#: netbox/virtualization/forms/bulk_edit.py:60 -#: netbox/virtualization/forms/bulk_import.py:41 +#: netbox/virtualization/forms/bulk_edit.py:61 +#: netbox/virtualization/forms/bulk_import.py:42 #: netbox/virtualization/forms/filtersets.py:54 -#: netbox/virtualization/forms/model_forms.py:62 +#: netbox/virtualization/forms/model_forms.py:65 #: netbox/virtualization/tables/clusters.py:66 #: netbox/vpn/forms/bulk_edit.py:264 netbox/vpn/forms/bulk_import.py:264 -#: netbox/vpn/forms/filtersets.py:217 netbox/vpn/forms/model_forms.py:84 -#: netbox/vpn/forms/model_forms.py:119 netbox/vpn/forms/model_forms.py:231 +#: netbox/vpn/forms/filtersets.py:217 netbox/vpn/forms/model_forms.py:85 +#: netbox/vpn/forms/model_forms.py:120 netbox/vpn/forms/model_forms.py:232 msgid "Type" msgstr "Typ" -#: netbox/circuits/forms/bulk_edit.py:128 -#: netbox/circuits/forms/bulk_import.py:80 -#: netbox/circuits/forms/filtersets.py:139 -#: netbox/circuits/forms/model_forms.py:98 +#: netbox/circuits/forms/bulk_edit.py:140 +#: netbox/circuits/forms/bulk_edit.py:326 +#: netbox/circuits/forms/bulk_import.py:87 +#: netbox/circuits/forms/bulk_import.py:214 +#: netbox/circuits/forms/filtersets.py:150 +#: netbox/circuits/forms/filtersets.py:345 +#: netbox/circuits/forms/model_forms.py:116 +#: netbox/circuits/forms/model_forms.py:330 +#: netbox/templates/circuits/virtualcircuit.html:31 +#: netbox/templates/circuits/virtualcircuittermination.html:34 msgid "Provider account" msgstr "Providerkonto" -#: netbox/circuits/forms/bulk_edit.py:136 -#: netbox/circuits/forms/bulk_import.py:93 -#: netbox/circuits/forms/filtersets.py:150 netbox/core/forms/filtersets.py:38 -#: netbox/core/forms/filtersets.py:79 netbox/core/tables/data.py:23 +#: netbox/circuits/forms/bulk_edit.py:148 +#: netbox/circuits/forms/bulk_edit.py:336 +#: netbox/circuits/forms/bulk_import.py:100 +#: netbox/circuits/forms/bulk_import.py:227 +#: netbox/circuits/forms/filtersets.py:161 +#: netbox/circuits/forms/filtersets.py:361 netbox/core/forms/filtersets.py:38 +#: netbox/core/forms/filtersets.py:80 netbox/core/tables/data.py:23 #: netbox/core/tables/jobs.py:26 netbox/core/tables/tasks.py:88 -#: netbox/dcim/forms/bulk_edit.py:107 netbox/dcim/forms/bulk_edit.py:182 -#: netbox/dcim/forms/bulk_edit.py:352 netbox/dcim/forms/bulk_edit.py:706 -#: netbox/dcim/forms/bulk_edit.py:771 netbox/dcim/forms/bulk_edit.py:803 -#: netbox/dcim/forms/bulk_edit.py:930 netbox/dcim/forms/bulk_edit.py:1744 -#: netbox/dcim/forms/bulk_import.py:88 netbox/dcim/forms/bulk_import.py:147 -#: netbox/dcim/forms/bulk_import.py:248 netbox/dcim/forms/bulk_import.py:527 -#: netbox/dcim/forms/bulk_import.py:681 netbox/dcim/forms/bulk_import.py:1229 -#: netbox/dcim/forms/bulk_import.py:1393 netbox/dcim/forms/bulk_import.py:1457 -#: netbox/dcim/forms/filtersets.py:178 netbox/dcim/forms/filtersets.py:237 -#: netbox/dcim/forms/filtersets.py:359 netbox/dcim/forms/filtersets.py:799 -#: netbox/dcim/forms/filtersets.py:924 netbox/dcim/forms/filtersets.py:958 -#: netbox/dcim/forms/filtersets.py:1059 netbox/dcim/forms/filtersets.py:1170 -#: netbox/dcim/tables/devices.py:140 netbox/dcim/tables/devices.py:817 -#: netbox/dcim/tables/devices.py:1063 netbox/dcim/tables/modules.py:70 -#: netbox/dcim/tables/power.py:74 netbox/dcim/tables/racks.py:126 -#: netbox/dcim/tables/sites.py:82 netbox/dcim/tables/sites.py:138 -#: netbox/ipam/forms/bulk_edit.py:256 netbox/ipam/forms/bulk_edit.py:306 -#: netbox/ipam/forms/bulk_edit.py:354 netbox/ipam/forms/bulk_edit.py:506 -#: netbox/ipam/forms/bulk_import.py:192 netbox/ipam/forms/bulk_import.py:257 -#: netbox/ipam/forms/bulk_import.py:293 netbox/ipam/forms/bulk_import.py:474 -#: netbox/ipam/forms/filtersets.py:210 netbox/ipam/forms/filtersets.py:281 -#: netbox/ipam/forms/filtersets.py:355 netbox/ipam/forms/filtersets.py:501 -#: netbox/ipam/forms/model_forms.py:501 netbox/ipam/tables/ip.py:237 -#: netbox/ipam/tables/ip.py:312 netbox/ipam/tables/ip.py:363 -#: netbox/ipam/tables/ip.py:426 netbox/ipam/tables/ip.py:453 -#: netbox/ipam/tables/vlans.py:126 netbox/ipam/tables/vlans.py:232 +#: netbox/dcim/forms/bulk_edit.py:110 netbox/dcim/forms/bulk_edit.py:185 +#: netbox/dcim/forms/bulk_edit.py:355 netbox/dcim/forms/bulk_edit.py:709 +#: netbox/dcim/forms/bulk_edit.py:774 netbox/dcim/forms/bulk_edit.py:806 +#: netbox/dcim/forms/bulk_edit.py:933 netbox/dcim/forms/bulk_edit.py:1723 +#: netbox/dcim/forms/bulk_edit.py:1765 netbox/dcim/forms/bulk_import.py:90 +#: netbox/dcim/forms/bulk_import.py:149 netbox/dcim/forms/bulk_import.py:250 +#: netbox/dcim/forms/bulk_import.py:532 netbox/dcim/forms/bulk_import.py:686 +#: netbox/dcim/forms/bulk_import.py:1137 netbox/dcim/forms/bulk_import.py:1326 +#: netbox/dcim/forms/bulk_import.py:1490 netbox/dcim/forms/bulk_import.py:1554 +#: netbox/dcim/forms/filtersets.py:179 netbox/dcim/forms/filtersets.py:238 +#: netbox/dcim/forms/filtersets.py:360 netbox/dcim/forms/filtersets.py:800 +#: netbox/dcim/forms/filtersets.py:925 netbox/dcim/forms/filtersets.py:959 +#: netbox/dcim/forms/filtersets.py:1060 netbox/dcim/forms/filtersets.py:1171 +#: netbox/dcim/forms/filtersets.py:1562 netbox/dcim/tables/devices.py:151 +#: netbox/dcim/tables/devices.py:849 netbox/dcim/tables/devices.py:983 +#: netbox/dcim/tables/devices.py:1095 netbox/dcim/tables/modules.py:70 +#: netbox/dcim/tables/power.py:74 netbox/dcim/tables/racks.py:125 +#: netbox/dcim/tables/sites.py:82 netbox/dcim/tables/sites.py:137 +#: netbox/ipam/forms/bulk_edit.py:240 netbox/ipam/forms/bulk_edit.py:290 +#: netbox/ipam/forms/bulk_edit.py:338 netbox/ipam/forms/bulk_edit.py:490 +#: netbox/ipam/forms/bulk_import.py:188 netbox/ipam/forms/bulk_import.py:256 +#: netbox/ipam/forms/bulk_import.py:292 netbox/ipam/forms/bulk_import.py:473 +#: netbox/ipam/forms/filtersets.py:212 netbox/ipam/forms/filtersets.py:284 +#: netbox/ipam/forms/filtersets.py:358 netbox/ipam/forms/filtersets.py:542 +#: netbox/ipam/forms/model_forms.py:511 netbox/ipam/tables/ip.py:183 +#: netbox/ipam/tables/ip.py:264 netbox/ipam/tables/ip.py:315 +#: netbox/ipam/tables/ip.py:378 netbox/ipam/tables/ip.py:405 +#: netbox/ipam/tables/vlans.py:95 netbox/ipam/tables/vlans.py:208 #: netbox/templates/circuits/circuit.html:34 +#: netbox/templates/circuits/virtualcircuit.html:43 #: netbox/templates/core/datasource.html:46 netbox/templates/core/job.html:48 #: netbox/templates/core/rq_task.html:81 netbox/templates/core/system.html:18 #: netbox/templates/dcim/cable.html:19 netbox/templates/dcim/device.html:178 +#: netbox/templates/dcim/inventoryitem.html:36 #: netbox/templates/dcim/location.html:45 netbox/templates/dcim/module.html:69 #: netbox/templates/dcim/powerfeed.html:36 netbox/templates/dcim/rack.html:41 #: netbox/templates/dcim/site.html:43 #: netbox/templates/extras/script_list.html:48 #: netbox/templates/ipam/ipaddress.html:37 -#: netbox/templates/ipam/iprange.html:54 netbox/templates/ipam/prefix.html:73 +#: netbox/templates/ipam/iprange.html:54 netbox/templates/ipam/prefix.html:69 #: netbox/templates/ipam/vlan.html:48 #: netbox/templates/virtualization/cluster.html:21 #: netbox/templates/virtualization/virtualmachine.html:19 @@ -702,63 +810,67 @@ msgstr "Providerkonto" #: netbox/templates/wireless/wirelesslan.html:22 #: netbox/templates/wireless/wirelesslink.html:17 #: netbox/users/forms/filtersets.py:32 netbox/users/forms/model_forms.py:194 -#: netbox/virtualization/forms/bulk_edit.py:70 -#: netbox/virtualization/forms/bulk_edit.py:118 -#: netbox/virtualization/forms/bulk_import.py:54 -#: netbox/virtualization/forms/bulk_import.py:80 -#: netbox/virtualization/forms/filtersets.py:62 -#: netbox/virtualization/forms/filtersets.py:160 +#: netbox/virtualization/forms/bulk_edit.py:71 +#: netbox/virtualization/forms/bulk_edit.py:100 +#: netbox/virtualization/forms/bulk_import.py:55 +#: netbox/virtualization/forms/bulk_import.py:86 +#: netbox/virtualization/forms/filtersets.py:82 +#: netbox/virtualization/forms/filtersets.py:165 #: netbox/virtualization/tables/clusters.py:74 -#: netbox/virtualization/tables/virtualmachines.py:60 +#: netbox/virtualization/tables/virtualmachines.py:30 #: netbox/vpn/forms/bulk_edit.py:39 netbox/vpn/forms/bulk_import.py:37 #: netbox/vpn/forms/filtersets.py:47 netbox/vpn/tables/tunnels.py:48 -#: netbox/wireless/forms/bulk_edit.py:43 -#: netbox/wireless/forms/bulk_edit.py:105 -#: netbox/wireless/forms/bulk_import.py:43 -#: netbox/wireless/forms/bulk_import.py:84 -#: netbox/wireless/forms/filtersets.py:49 -#: netbox/wireless/forms/filtersets.py:83 +#: netbox/wireless/forms/bulk_edit.py:45 +#: netbox/wireless/forms/bulk_edit.py:108 +#: netbox/wireless/forms/bulk_import.py:45 +#: netbox/wireless/forms/bulk_import.py:89 +#: netbox/wireless/forms/filtersets.py:52 +#: netbox/wireless/forms/filtersets.py:111 #: netbox/wireless/tables/wirelesslan.py:52 -#: netbox/wireless/tables/wirelesslink.py:20 +#: netbox/wireless/tables/wirelesslink.py:19 msgid "Status" msgstr "Status" -#: netbox/circuits/forms/bulk_edit.py:142 -#: netbox/circuits/forms/bulk_edit.py:233 -#: netbox/circuits/forms/bulk_import.py:98 -#: netbox/circuits/forms/bulk_import.py:158 -#: netbox/circuits/forms/filtersets.py:119 -#: netbox/circuits/forms/filtersets.py:241 netbox/dcim/forms/bulk_edit.py:123 -#: netbox/dcim/forms/bulk_edit.py:188 netbox/dcim/forms/bulk_edit.py:347 -#: netbox/dcim/forms/bulk_edit.py:467 netbox/dcim/forms/bulk_edit.py:696 -#: netbox/dcim/forms/bulk_edit.py:809 netbox/dcim/forms/bulk_edit.py:1749 -#: netbox/dcim/forms/bulk_import.py:107 netbox/dcim/forms/bulk_import.py:152 -#: netbox/dcim/forms/bulk_import.py:241 netbox/dcim/forms/bulk_import.py:356 -#: netbox/dcim/forms/bulk_import.py:501 netbox/dcim/forms/bulk_import.py:1241 -#: netbox/dcim/forms/bulk_import.py:1450 netbox/dcim/forms/filtersets.py:173 -#: netbox/dcim/forms/filtersets.py:205 netbox/dcim/forms/filtersets.py:323 -#: netbox/dcim/forms/filtersets.py:399 netbox/dcim/forms/filtersets.py:420 -#: netbox/dcim/forms/filtersets.py:722 netbox/dcim/forms/filtersets.py:916 -#: netbox/dcim/forms/filtersets.py:978 netbox/dcim/forms/filtersets.py:1008 -#: netbox/dcim/forms/filtersets.py:1130 netbox/dcim/tables/power.py:88 -#: netbox/extras/filtersets.py:612 netbox/extras/forms/filtersets.py:323 -#: netbox/extras/forms/filtersets.py:396 netbox/ipam/forms/bulk_edit.py:43 -#: netbox/ipam/forms/bulk_edit.py:68 netbox/ipam/forms/bulk_edit.py:112 -#: netbox/ipam/forms/bulk_edit.py:141 netbox/ipam/forms/bulk_edit.py:166 -#: netbox/ipam/forms/bulk_edit.py:251 netbox/ipam/forms/bulk_edit.py:301 -#: netbox/ipam/forms/bulk_edit.py:349 netbox/ipam/forms/bulk_edit.py:501 -#: netbox/ipam/forms/bulk_import.py:38 netbox/ipam/forms/bulk_import.py:67 -#: netbox/ipam/forms/bulk_import.py:95 netbox/ipam/forms/bulk_import.py:115 -#: netbox/ipam/forms/bulk_import.py:135 netbox/ipam/forms/bulk_import.py:164 -#: netbox/ipam/forms/bulk_import.py:250 netbox/ipam/forms/bulk_import.py:286 -#: netbox/ipam/forms/bulk_import.py:467 netbox/ipam/forms/filtersets.py:48 -#: netbox/ipam/forms/filtersets.py:68 netbox/ipam/forms/filtersets.py:100 -#: netbox/ipam/forms/filtersets.py:120 netbox/ipam/forms/filtersets.py:143 -#: netbox/ipam/forms/filtersets.py:174 netbox/ipam/forms/filtersets.py:267 -#: netbox/ipam/forms/filtersets.py:310 netbox/ipam/forms/filtersets.py:469 -#: netbox/ipam/tables/ip.py:456 netbox/ipam/tables/vlans.py:229 -#: netbox/templates/circuits/circuit.html:38 +#: netbox/circuits/forms/bulk_edit.py:154 +#: netbox/circuits/forms/bulk_edit.py:271 +#: netbox/circuits/forms/bulk_edit.py:342 +#: netbox/circuits/forms/bulk_import.py:111 +#: netbox/circuits/forms/bulk_import.py:170 +#: netbox/circuits/forms/bulk_import.py:232 +#: netbox/circuits/forms/filtersets.py:130 +#: netbox/circuits/forms/filtersets.py:277 +#: netbox/circuits/forms/filtersets.py:331 netbox/dcim/forms/bulk_edit.py:126 +#: netbox/dcim/forms/bulk_edit.py:191 netbox/dcim/forms/bulk_edit.py:350 +#: netbox/dcim/forms/bulk_edit.py:470 netbox/dcim/forms/bulk_edit.py:699 +#: netbox/dcim/forms/bulk_edit.py:812 netbox/dcim/forms/bulk_edit.py:1770 +#: netbox/dcim/forms/bulk_import.py:109 netbox/dcim/forms/bulk_import.py:154 +#: netbox/dcim/forms/bulk_import.py:243 netbox/dcim/forms/bulk_import.py:358 +#: netbox/dcim/forms/bulk_import.py:506 netbox/dcim/forms/bulk_import.py:1338 +#: netbox/dcim/forms/bulk_import.py:1547 netbox/dcim/forms/filtersets.py:174 +#: netbox/dcim/forms/filtersets.py:206 netbox/dcim/forms/filtersets.py:324 +#: netbox/dcim/forms/filtersets.py:400 netbox/dcim/forms/filtersets.py:421 +#: netbox/dcim/forms/filtersets.py:723 netbox/dcim/forms/filtersets.py:917 +#: netbox/dcim/forms/filtersets.py:979 netbox/dcim/forms/filtersets.py:1009 +#: netbox/dcim/forms/filtersets.py:1131 netbox/dcim/tables/power.py:88 +#: netbox/extras/filtersets.py:612 netbox/extras/forms/filtersets.py:330 +#: netbox/extras/forms/filtersets.py:403 netbox/ipam/forms/bulk_edit.py:46 +#: netbox/ipam/forms/bulk_edit.py:71 netbox/ipam/forms/bulk_edit.py:115 +#: netbox/ipam/forms/bulk_edit.py:144 netbox/ipam/forms/bulk_edit.py:169 +#: netbox/ipam/forms/bulk_edit.py:235 netbox/ipam/forms/bulk_edit.py:285 +#: netbox/ipam/forms/bulk_edit.py:333 netbox/ipam/forms/bulk_edit.py:485 +#: netbox/ipam/forms/bulk_import.py:41 netbox/ipam/forms/bulk_import.py:70 +#: netbox/ipam/forms/bulk_import.py:98 netbox/ipam/forms/bulk_import.py:118 +#: netbox/ipam/forms/bulk_import.py:138 netbox/ipam/forms/bulk_import.py:167 +#: netbox/ipam/forms/bulk_import.py:249 netbox/ipam/forms/bulk_import.py:285 +#: netbox/ipam/forms/bulk_import.py:466 netbox/ipam/forms/filtersets.py:50 +#: netbox/ipam/forms/filtersets.py:70 netbox/ipam/forms/filtersets.py:102 +#: netbox/ipam/forms/filtersets.py:122 netbox/ipam/forms/filtersets.py:145 +#: netbox/ipam/forms/filtersets.py:176 netbox/ipam/forms/filtersets.py:270 +#: netbox/ipam/forms/filtersets.py:313 netbox/ipam/forms/filtersets.py:510 +#: netbox/ipam/tables/ip.py:408 netbox/ipam/tables/vlans.py:205 +#: netbox/templates/circuits/circuit.html:48 #: netbox/templates/circuits/circuitgroup.html:36 +#: netbox/templates/circuits/virtualcircuit.html:47 #: netbox/templates/dcim/cable.html:23 netbox/templates/dcim/device.html:79 #: netbox/templates/dcim/location.html:49 #: netbox/templates/dcim/powerfeed.html:44 netbox/templates/dcim/rack.html:32 @@ -775,114 +887,181 @@ msgstr "Status" #: netbox/templates/virtualization/cluster.html:33 #: netbox/templates/virtualization/virtualmachine.html:39 #: netbox/templates/vpn/l2vpn.html:30 netbox/templates/vpn/tunnel.html:49 -#: netbox/templates/wireless/wirelesslan.html:34 +#: netbox/templates/wireless/wirelesslan.html:42 #: netbox/templates/wireless/wirelesslink.html:25 -#: netbox/tenancy/forms/forms.py:25 netbox/tenancy/forms/forms.py:48 -#: netbox/tenancy/forms/model_forms.py:52 netbox/tenancy/tables/columns.py:64 -#: netbox/virtualization/forms/bulk_edit.py:76 -#: netbox/virtualization/forms/bulk_edit.py:155 -#: netbox/virtualization/forms/bulk_import.py:66 -#: netbox/virtualization/forms/bulk_import.py:115 +#: netbox/tenancy/forms/forms.py:25 netbox/tenancy/forms/forms.py:49 +#: netbox/tenancy/forms/model_forms.py:52 netbox/tenancy/tables/columns.py:49 +#: netbox/virtualization/forms/bulk_edit.py:77 +#: netbox/virtualization/forms/bulk_edit.py:137 +#: netbox/virtualization/forms/bulk_import.py:67 +#: netbox/virtualization/forms/bulk_import.py:121 #: netbox/virtualization/forms/filtersets.py:47 -#: netbox/virtualization/forms/filtersets.py:105 +#: netbox/virtualization/forms/filtersets.py:110 #: netbox/vpn/forms/bulk_edit.py:59 netbox/vpn/forms/bulk_edit.py:269 #: netbox/vpn/forms/bulk_import.py:59 netbox/vpn/forms/bulk_import.py:258 -#: netbox/vpn/forms/filtersets.py:214 netbox/wireless/forms/bulk_edit.py:63 -#: netbox/wireless/forms/bulk_edit.py:110 -#: netbox/wireless/forms/bulk_import.py:55 -#: netbox/wireless/forms/bulk_import.py:97 -#: netbox/wireless/forms/filtersets.py:35 -#: netbox/wireless/forms/filtersets.py:75 +#: netbox/vpn/forms/filtersets.py:214 netbox/wireless/forms/bulk_edit.py:65 +#: netbox/wireless/forms/bulk_edit.py:113 +#: netbox/wireless/forms/bulk_import.py:57 +#: netbox/wireless/forms/bulk_import.py:102 +#: netbox/wireless/forms/filtersets.py:38 +#: netbox/wireless/forms/filtersets.py:103 msgid "Tenant" msgstr "Mandant" -#: netbox/circuits/forms/bulk_edit.py:147 -#: netbox/circuits/forms/filtersets.py:174 +#: netbox/circuits/forms/bulk_edit.py:159 +#: netbox/circuits/forms/filtersets.py:190 msgid "Install date" msgstr "Datum der Installation" -#: netbox/circuits/forms/bulk_edit.py:152 -#: netbox/circuits/forms/filtersets.py:179 +#: netbox/circuits/forms/bulk_edit.py:164 +#: netbox/circuits/forms/filtersets.py:195 msgid "Termination date" msgstr "Kündigungsdatum" -#: netbox/circuits/forms/bulk_edit.py:158 -#: netbox/circuits/forms/filtersets.py:186 +#: netbox/circuits/forms/bulk_edit.py:170 +#: netbox/circuits/forms/filtersets.py:202 msgid "Commit rate (Kbps)" msgstr "Vereinbarte Bandbreite (Kbps)" -#: netbox/circuits/forms/bulk_edit.py:173 -#: netbox/circuits/forms/model_forms.py:112 +#: netbox/circuits/forms/bulk_edit.py:176 +#: netbox/circuits/forms/filtersets.py:208 +#: netbox/circuits/forms/model_forms.py:136 +#: netbox/templates/circuits/circuit.html:38 +#: netbox/templates/wireless/wirelesslink.html:38 +#: netbox/wireless/forms/bulk_edit.py:132 +#: netbox/wireless/forms/filtersets.py:130 +#: netbox/wireless/forms/model_forms.py:168 +msgid "Distance" +msgstr "Entfernung" + +#: netbox/circuits/forms/bulk_edit.py:181 +#: netbox/circuits/forms/bulk_import.py:105 +#: netbox/circuits/forms/bulk_import.py:108 +#: netbox/circuits/forms/filtersets.py:212 +#: netbox/wireless/forms/bulk_edit.py:137 +#: netbox/wireless/forms/bulk_import.py:121 +#: netbox/wireless/forms/bulk_import.py:124 +#: netbox/wireless/forms/filtersets.py:134 +msgid "Distance unit" +msgstr "Entfernungseinheit" + +#: netbox/circuits/forms/bulk_edit.py:196 +#: netbox/circuits/forms/model_forms.py:141 msgid "Service Parameters" msgstr "Service Parameter" -#: netbox/circuits/forms/bulk_edit.py:174 -#: netbox/circuits/forms/model_forms.py:113 -#: netbox/circuits/forms/model_forms.py:183 -#: netbox/dcim/forms/model_forms.py:139 netbox/dcim/forms/model_forms.py:181 -#: netbox/dcim/forms/model_forms.py:266 netbox/dcim/forms/model_forms.py:323 -#: netbox/dcim/forms/model_forms.py:768 netbox/dcim/forms/model_forms.py:1699 -#: netbox/ipam/forms/model_forms.py:64 netbox/ipam/forms/model_forms.py:81 -#: netbox/ipam/forms/model_forms.py:115 netbox/ipam/forms/model_forms.py:136 -#: netbox/ipam/forms/model_forms.py:160 netbox/ipam/forms/model_forms.py:232 -#: netbox/ipam/forms/model_forms.py:261 netbox/ipam/forms/model_forms.py:320 +#: netbox/circuits/forms/bulk_edit.py:197 +#: netbox/circuits/forms/filtersets.py:73 +#: netbox/circuits/forms/filtersets.py:91 +#: netbox/circuits/forms/filtersets.py:110 +#: netbox/circuits/forms/filtersets.py:127 +#: netbox/circuits/forms/filtersets.py:315 +#: netbox/circuits/forms/filtersets.py:330 netbox/core/forms/filtersets.py:68 +#: netbox/core/forms/filtersets.py:136 netbox/dcim/forms/bulk_edit.py:846 +#: netbox/dcim/forms/filtersets.py:173 netbox/dcim/forms/filtersets.py:205 +#: netbox/dcim/forms/filtersets.py:916 netbox/dcim/forms/filtersets.py:1008 +#: netbox/dcim/forms/filtersets.py:1132 netbox/dcim/forms/filtersets.py:1240 +#: netbox/dcim/forms/filtersets.py:1264 netbox/dcim/forms/filtersets.py:1289 +#: netbox/dcim/forms/filtersets.py:1308 netbox/dcim/forms/filtersets.py:1332 +#: netbox/dcim/forms/filtersets.py:1446 netbox/dcim/forms/filtersets.py:1470 +#: netbox/dcim/forms/filtersets.py:1494 netbox/dcim/forms/filtersets.py:1512 +#: netbox/dcim/forms/filtersets.py:1528 netbox/extras/forms/bulk_edit.py:90 +#: netbox/extras/forms/filtersets.py:45 netbox/extras/forms/filtersets.py:137 +#: netbox/extras/forms/filtersets.py:169 netbox/extras/forms/filtersets.py:210 +#: netbox/extras/forms/filtersets.py:227 netbox/extras/forms/filtersets.py:258 +#: netbox/extras/forms/filtersets.py:282 netbox/extras/forms/filtersets.py:449 +#: netbox/ipam/forms/filtersets.py:101 netbox/ipam/forms/filtersets.py:269 +#: netbox/ipam/forms/filtersets.py:310 netbox/ipam/forms/filtersets.py:385 +#: netbox/ipam/forms/filtersets.py:470 netbox/ipam/forms/filtersets.py:483 +#: netbox/ipam/forms/filtersets.py:508 netbox/ipam/forms/filtersets.py:579 +#: netbox/ipam/forms/filtersets.py:597 netbox/netbox/tables/tables.py:259 +#: netbox/virtualization/forms/filtersets.py:45 +#: netbox/virtualization/forms/filtersets.py:108 +#: netbox/virtualization/forms/filtersets.py:203 +#: netbox/virtualization/forms/filtersets.py:248 +#: netbox/vpn/forms/filtersets.py:213 netbox/wireless/forms/bulk_edit.py:153 +#: netbox/wireless/forms/filtersets.py:36 +#: netbox/wireless/forms/filtersets.py:102 +msgid "Attributes" +msgstr "Attribute" + +#: netbox/circuits/forms/bulk_edit.py:198 +#: netbox/circuits/forms/bulk_edit.py:356 +#: netbox/circuits/forms/model_forms.py:142 +#: netbox/circuits/forms/model_forms.py:240 +#: netbox/circuits/forms/model_forms.py:345 +#: netbox/dcim/forms/model_forms.py:143 netbox/dcim/forms/model_forms.py:185 +#: netbox/dcim/forms/model_forms.py:274 netbox/dcim/forms/model_forms.py:331 +#: netbox/dcim/forms/model_forms.py:780 netbox/dcim/forms/model_forms.py:1744 +#: netbox/ipam/forms/model_forms.py:67 netbox/ipam/forms/model_forms.py:84 +#: netbox/ipam/forms/model_forms.py:119 netbox/ipam/forms/model_forms.py:141 +#: netbox/ipam/forms/model_forms.py:166 netbox/ipam/forms/model_forms.py:233 +#: netbox/ipam/forms/model_forms.py:271 netbox/ipam/forms/model_forms.py:330 #: netbox/netbox/navigation/menu.py:24 #: netbox/templates/dcim/device_edit.html:85 #: netbox/templates/dcim/htmx/cable_edit.html:72 #: netbox/templates/ipam/ipaddress_bulk_add.html:27 -#: netbox/templates/ipam/vlan_edit.html:22 +#: netbox/templates/ipam/vlan_edit.html:30 #: netbox/virtualization/forms/model_forms.py:80 -#: netbox/virtualization/forms/model_forms.py:222 +#: netbox/virtualization/forms/model_forms.py:229 #: netbox/vpn/forms/bulk_edit.py:78 netbox/vpn/forms/filtersets.py:44 -#: netbox/vpn/forms/model_forms.py:62 netbox/vpn/forms/model_forms.py:147 -#: netbox/vpn/forms/model_forms.py:411 netbox/wireless/forms/model_forms.py:54 -#: netbox/wireless/forms/model_forms.py:170 +#: netbox/vpn/forms/model_forms.py:63 netbox/vpn/forms/model_forms.py:148 +#: netbox/vpn/forms/model_forms.py:414 netbox/wireless/forms/model_forms.py:57 +#: netbox/wireless/forms/model_forms.py:173 msgid "Tenancy" msgstr "Mandantenverhältnis" -#: netbox/circuits/forms/bulk_edit.py:193 -#: netbox/circuits/forms/bulk_edit.py:217 -#: netbox/circuits/forms/model_forms.py:155 -#: netbox/circuits/tables/circuits.py:117 -#: netbox/templates/circuits/inc/circuit_termination_fields.html:62 -#: netbox/templates/circuits/providernetwork.html:17 -msgid "Provider Network" -msgstr "Provider Netzwerk" +#: netbox/circuits/forms/bulk_edit.py:215 +#: netbox/circuits/forms/model_forms.py:170 +#: netbox/dcim/forms/bulk_import.py:1299 netbox/dcim/forms/bulk_import.py:1317 +msgid "Termination type" +msgstr "Typ des Abschlusspunktes" -#: netbox/circuits/forms/bulk_edit.py:199 +#: netbox/circuits/forms/bulk_edit.py:218 +#: netbox/circuits/forms/bulk_import.py:133 +#: netbox/circuits/forms/filtersets.py:225 +#: netbox/circuits/forms/model_forms.py:173 +#: netbox/templates/circuits/inc/circuit_termination.html:6 +#: netbox/templates/dcim/cable.html:68 netbox/templates/dcim/cable.html:72 +#: netbox/vpn/forms/bulk_import.py:100 netbox/vpn/forms/filtersets.py:77 +msgid "Termination" +msgstr "Abschlusspunkt" + +#: netbox/circuits/forms/bulk_edit.py:226 msgid "Port speed (Kbps)" msgstr "Portgeschwindigkeit (Kbit/s)" -#: netbox/circuits/forms/bulk_edit.py:203 +#: netbox/circuits/forms/bulk_edit.py:230 msgid "Upstream speed (Kbps)" msgstr "Upstream Geschwindigkeit (Kbps)" -#: netbox/circuits/forms/bulk_edit.py:206 netbox/dcim/forms/bulk_edit.py:966 -#: netbox/dcim/forms/bulk_edit.py:1330 netbox/dcim/forms/bulk_edit.py:1347 -#: netbox/dcim/forms/bulk_edit.py:1364 netbox/dcim/forms/bulk_edit.py:1382 -#: netbox/dcim/forms/bulk_edit.py:1477 netbox/dcim/forms/bulk_edit.py:1637 -#: netbox/dcim/forms/bulk_edit.py:1654 +#: netbox/circuits/forms/bulk_edit.py:233 netbox/dcim/forms/bulk_edit.py:969 +#: netbox/dcim/forms/bulk_edit.py:1333 netbox/dcim/forms/bulk_edit.py:1350 +#: netbox/dcim/forms/bulk_edit.py:1367 netbox/dcim/forms/bulk_edit.py:1385 +#: netbox/dcim/forms/bulk_edit.py:1480 netbox/dcim/forms/bulk_edit.py:1652 +#: netbox/dcim/forms/bulk_edit.py:1669 msgid "Mark connected" msgstr "Als verbunden markieren" -#: netbox/circuits/forms/bulk_edit.py:219 -#: netbox/circuits/forms/model_forms.py:157 -#: netbox/templates/circuits/inc/circuit_termination_fields.html:54 +#: netbox/circuits/forms/bulk_edit.py:243 +#: netbox/circuits/forms/model_forms.py:184 +#: netbox/templates/circuits/inc/circuit_termination_fields.html:55 #: netbox/templates/dcim/frontport.html:121 -#: netbox/templates/dcim/interface.html:193 +#: netbox/templates/dcim/interface.html:250 #: netbox/templates/dcim/rearport.html:111 msgid "Circuit Termination" msgstr "Transportnetzabschlusspunkt" -#: netbox/circuits/forms/bulk_edit.py:221 -#: netbox/circuits/forms/model_forms.py:159 +#: netbox/circuits/forms/bulk_edit.py:245 +#: netbox/circuits/forms/model_forms.py:186 msgid "Termination Details" msgstr "Einzelheiten zum Abschlusspunkt" -#: netbox/circuits/forms/bulk_edit.py:251 -#: netbox/circuits/forms/filtersets.py:268 -#: netbox/circuits/tables/circuits.py:168 netbox/dcim/forms/model_forms.py:551 -#: netbox/templates/circuits/circuitgroupassignment.html:30 +#: netbox/circuits/forms/bulk_edit.py:289 +#: netbox/circuits/forms/bulk_import.py:188 +#: netbox/circuits/forms/filtersets.py:304 +#: netbox/circuits/tables/circuits.py:207 netbox/dcim/forms/model_forms.py:562 +#: netbox/templates/circuits/circuitgroupassignment.html:34 #: netbox/templates/dcim/device.html:133 #: netbox/templates/dcim/virtualchassis.html:68 #: netbox/templates/dcim/virtualchassis_edit.html:56 @@ -892,227 +1071,313 @@ msgstr "Einzelheiten zum Abschlusspunkt" msgid "Priority" msgstr "Priorität" -#: netbox/circuits/forms/bulk_import.py:39 -#: netbox/circuits/forms/bulk_import.py:54 -#: netbox/circuits/forms/bulk_import.py:77 -msgid "Assigned provider" -msgstr "Zugewiesener Provider" - -#: netbox/circuits/forms/bulk_import.py:83 -msgid "Assigned provider account" -msgstr "Zugewiesenes Providerkonto" - -#: netbox/circuits/forms/bulk_import.py:90 -msgid "Type of circuit" -msgstr "Transportnetz Typ" - -#: netbox/circuits/forms/bulk_import.py:95 netbox/dcim/forms/bulk_import.py:90 -#: netbox/dcim/forms/bulk_import.py:149 netbox/dcim/forms/bulk_import.py:250 -#: netbox/dcim/forms/bulk_import.py:529 netbox/dcim/forms/bulk_import.py:683 -#: netbox/dcim/forms/bulk_import.py:1395 netbox/ipam/forms/bulk_import.py:194 -#: netbox/ipam/forms/bulk_import.py:259 netbox/ipam/forms/bulk_import.py:295 -#: netbox/ipam/forms/bulk_import.py:476 -#: netbox/virtualization/forms/bulk_import.py:56 -#: netbox/virtualization/forms/bulk_import.py:82 -#: netbox/vpn/forms/bulk_import.py:39 netbox/wireless/forms/bulk_import.py:45 -msgid "Operational status" -msgstr "Betriebsstatus" - -#: netbox/circuits/forms/bulk_import.py:102 -#: netbox/circuits/forms/bulk_import.py:162 -#: netbox/dcim/forms/bulk_import.py:111 netbox/dcim/forms/bulk_import.py:156 -#: netbox/dcim/forms/bulk_import.py:360 netbox/dcim/forms/bulk_import.py:505 -#: netbox/dcim/forms/bulk_import.py:1245 netbox/dcim/forms/bulk_import.py:1390 -#: netbox/dcim/forms/bulk_import.py:1454 netbox/ipam/forms/bulk_import.py:42 -#: netbox/ipam/forms/bulk_import.py:71 netbox/ipam/forms/bulk_import.py:99 -#: netbox/ipam/forms/bulk_import.py:119 netbox/ipam/forms/bulk_import.py:139 -#: netbox/ipam/forms/bulk_import.py:168 netbox/ipam/forms/bulk_import.py:254 -#: netbox/ipam/forms/bulk_import.py:290 netbox/ipam/forms/bulk_import.py:471 -#: netbox/virtualization/forms/bulk_import.py:70 -#: netbox/virtualization/forms/bulk_import.py:119 -#: netbox/vpn/forms/bulk_import.py:63 netbox/wireless/forms/bulk_import.py:59 -#: netbox/wireless/forms/bulk_import.py:101 -msgid "Assigned tenant" -msgstr "Zugewiesener Mandant" - -#: netbox/circuits/forms/bulk_import.py:120 -#: netbox/templates/circuits/inc/circuit_termination.html:6 -#: netbox/templates/circuits/inc/circuit_termination_fields.html:15 -#: netbox/templates/dcim/cable.html:68 netbox/templates/dcim/cable.html:72 -#: netbox/vpn/forms/bulk_import.py:100 netbox/vpn/forms/filtersets.py:77 -msgid "Termination" -msgstr "Abschlusspunkt" - -#: netbox/circuits/forms/bulk_import.py:130 -#: netbox/circuits/forms/filtersets.py:147 -#: netbox/circuits/forms/filtersets.py:227 -#: netbox/circuits/forms/model_forms.py:144 +#: netbox/circuits/forms/bulk_edit.py:321 +#: netbox/circuits/forms/bulk_import.py:208 +#: netbox/circuits/forms/filtersets.py:158 +#: netbox/circuits/forms/filtersets.py:263 +#: netbox/circuits/forms/filtersets.py:353 +#: netbox/circuits/forms/filtersets.py:391 +#: netbox/circuits/forms/model_forms.py:325 +#: netbox/circuits/tables/virtual_circuits.py:51 +#: netbox/circuits/tables/virtual_circuits.py:99 msgid "Provider network" msgstr "Providernetzwerk" -#: netbox/circuits/forms/filtersets.py:30 -#: netbox/circuits/forms/filtersets.py:118 -#: netbox/circuits/forms/filtersets.py:200 netbox/dcim/forms/bulk_edit.py:339 -#: netbox/dcim/forms/bulk_edit.py:447 netbox/dcim/forms/bulk_edit.py:688 -#: netbox/dcim/forms/bulk_edit.py:743 netbox/dcim/forms/bulk_edit.py:897 -#: netbox/dcim/forms/bulk_import.py:235 netbox/dcim/forms/bulk_import.py:337 -#: netbox/dcim/forms/bulk_import.py:568 netbox/dcim/forms/bulk_import.py:1339 -#: netbox/dcim/forms/bulk_import.py:1373 netbox/dcim/forms/filtersets.py:95 -#: netbox/dcim/forms/filtersets.py:322 netbox/dcim/forms/filtersets.py:356 -#: netbox/dcim/forms/filtersets.py:396 netbox/dcim/forms/filtersets.py:447 -#: netbox/dcim/forms/filtersets.py:719 netbox/dcim/forms/filtersets.py:762 -#: netbox/dcim/forms/filtersets.py:977 netbox/dcim/forms/filtersets.py:1006 -#: netbox/dcim/forms/filtersets.py:1026 netbox/dcim/forms/filtersets.py:1090 -#: netbox/dcim/forms/filtersets.py:1120 netbox/dcim/forms/filtersets.py:1129 -#: netbox/dcim/forms/filtersets.py:1240 netbox/dcim/forms/filtersets.py:1264 -#: netbox/dcim/forms/filtersets.py:1289 netbox/dcim/forms/filtersets.py:1308 -#: netbox/dcim/forms/filtersets.py:1331 netbox/dcim/forms/filtersets.py:1442 -#: netbox/dcim/forms/filtersets.py:1466 netbox/dcim/forms/filtersets.py:1490 -#: netbox/dcim/forms/filtersets.py:1508 netbox/dcim/forms/filtersets.py:1525 -#: netbox/dcim/forms/model_forms.py:180 netbox/dcim/forms/model_forms.py:243 -#: netbox/dcim/forms/model_forms.py:468 netbox/dcim/forms/model_forms.py:728 -#: netbox/dcim/tables/devices.py:157 netbox/dcim/tables/power.py:30 -#: netbox/dcim/tables/racks.py:118 netbox/dcim/tables/racks.py:212 -#: netbox/extras/filtersets.py:536 netbox/extras/forms/filtersets.py:320 -#: netbox/ipam/forms/filtersets.py:173 netbox/ipam/forms/filtersets.py:414 -#: netbox/ipam/forms/filtersets.py:437 netbox/ipam/forms/filtersets.py:467 +#: netbox/circuits/forms/bulk_edit.py:365 +#: netbox/circuits/forms/bulk_import.py:254 +#: netbox/circuits/forms/filtersets.py:381 +#: netbox/circuits/forms/model_forms.py:365 netbox/dcim/forms/bulk_edit.py:361 +#: netbox/dcim/forms/bulk_edit.py:1280 netbox/dcim/forms/bulk_edit.py:1713 +#: netbox/dcim/forms/bulk_import.py:255 netbox/dcim/forms/bulk_import.py:1106 +#: netbox/dcim/forms/filtersets.py:368 netbox/dcim/forms/filtersets.py:778 +#: netbox/dcim/forms/filtersets.py:1539 netbox/dcim/forms/model_forms.py:256 +#: netbox/dcim/forms/model_forms.py:1090 netbox/dcim/forms/model_forms.py:1559 +#: netbox/dcim/forms/object_import.py:182 netbox/dcim/tables/devices.py:180 +#: netbox/dcim/tables/devices.py:841 netbox/dcim/tables/devices.py:967 +#: netbox/dcim/tables/devicetypes.py:311 netbox/dcim/tables/racks.py:128 +#: netbox/extras/filtersets.py:552 netbox/ipam/forms/bulk_edit.py:245 +#: netbox/ipam/forms/bulk_edit.py:295 netbox/ipam/forms/bulk_edit.py:343 +#: netbox/ipam/forms/bulk_edit.py:495 netbox/ipam/forms/bulk_import.py:193 +#: netbox/ipam/forms/bulk_import.py:261 netbox/ipam/forms/bulk_import.py:297 +#: netbox/ipam/forms/bulk_import.py:478 netbox/ipam/forms/filtersets.py:240 +#: netbox/ipam/forms/filtersets.py:292 netbox/ipam/forms/filtersets.py:363 +#: netbox/ipam/forms/filtersets.py:550 netbox/ipam/forms/model_forms.py:194 +#: netbox/ipam/forms/model_forms.py:220 netbox/ipam/forms/model_forms.py:259 +#: netbox/ipam/forms/model_forms.py:686 netbox/ipam/tables/ip.py:209 +#: netbox/ipam/tables/ip.py:268 netbox/ipam/tables/ip.py:319 +#: netbox/ipam/tables/vlans.py:99 netbox/ipam/tables/vlans.py:211 +#: netbox/templates/circuits/virtualcircuittermination.html:42 +#: netbox/templates/dcim/device.html:182 +#: netbox/templates/dcim/inc/panels/inventory_items.html:20 +#: netbox/templates/dcim/interface.html:178 +#: netbox/templates/dcim/interface.html:280 +#: netbox/templates/dcim/inventoryitem.html:40 +#: netbox/templates/dcim/rack.html:49 netbox/templates/ipam/ipaddress.html:41 +#: netbox/templates/ipam/iprange.html:50 netbox/templates/ipam/prefix.html:73 +#: netbox/templates/ipam/role.html:19 netbox/templates/ipam/vlan.html:52 +#: netbox/templates/virtualization/virtualmachine.html:23 +#: netbox/templates/vpn/tunneltermination.html:17 +#: netbox/templates/wireless/inc/wirelesslink_interface.html:20 +#: netbox/tenancy/forms/bulk_edit.py:142 +#: netbox/tenancy/forms/filtersets.py:107 +#: netbox/tenancy/forms/model_forms.py:137 +#: netbox/tenancy/tables/contacts.py:102 +#: netbox/virtualization/forms/bulk_edit.py:127 +#: netbox/virtualization/forms/bulk_import.py:112 +#: netbox/virtualization/forms/filtersets.py:162 +#: netbox/virtualization/forms/model_forms.py:202 +#: netbox/virtualization/tables/virtualmachines.py:45 +#: netbox/vpn/forms/bulk_edit.py:87 netbox/vpn/forms/bulk_import.py:81 +#: netbox/vpn/forms/filtersets.py:85 netbox/vpn/forms/model_forms.py:79 +#: netbox/vpn/forms/model_forms.py:114 netbox/vpn/tables/tunnels.py:82 +msgid "Role" +msgstr "Rolle" + +#: netbox/circuits/forms/bulk_import.py:46 +#: netbox/circuits/forms/bulk_import.py:61 +#: netbox/circuits/forms/bulk_import.py:84 +msgid "Assigned provider" +msgstr "Zugewiesener Provider" + +#: netbox/circuits/forms/bulk_import.py:90 +msgid "Assigned provider account" +msgstr "Zugewiesenes Providerkonto" + +#: netbox/circuits/forms/bulk_import.py:97 +msgid "Type of circuit" +msgstr "Transportnetz Typ" + +#: netbox/circuits/forms/bulk_import.py:102 +#: netbox/circuits/forms/bulk_import.py:229 +#: netbox/dcim/forms/bulk_import.py:92 netbox/dcim/forms/bulk_import.py:151 +#: netbox/dcim/forms/bulk_import.py:252 netbox/dcim/forms/bulk_import.py:534 +#: netbox/dcim/forms/bulk_import.py:688 netbox/dcim/forms/bulk_import.py:1139 +#: netbox/dcim/forms/bulk_import.py:1492 netbox/ipam/forms/bulk_import.py:190 +#: netbox/ipam/forms/bulk_import.py:258 netbox/ipam/forms/bulk_import.py:294 +#: netbox/ipam/forms/bulk_import.py:475 netbox/ipam/forms/bulk_import.py:488 +#: netbox/virtualization/forms/bulk_import.py:57 +#: netbox/virtualization/forms/bulk_import.py:88 +#: netbox/vpn/forms/bulk_import.py:39 netbox/wireless/forms/bulk_import.py:47 +msgid "Operational status" +msgstr "Betriebsstatus" + +#: netbox/circuits/forms/bulk_import.py:115 +#: netbox/circuits/forms/bulk_import.py:174 +#: netbox/circuits/forms/bulk_import.py:236 +#: netbox/dcim/forms/bulk_import.py:113 netbox/dcim/forms/bulk_import.py:158 +#: netbox/dcim/forms/bulk_import.py:362 netbox/dcim/forms/bulk_import.py:510 +#: netbox/dcim/forms/bulk_import.py:1342 netbox/dcim/forms/bulk_import.py:1487 +#: netbox/dcim/forms/bulk_import.py:1551 netbox/ipam/forms/bulk_import.py:45 +#: netbox/ipam/forms/bulk_import.py:74 netbox/ipam/forms/bulk_import.py:102 +#: netbox/ipam/forms/bulk_import.py:122 netbox/ipam/forms/bulk_import.py:142 +#: netbox/ipam/forms/bulk_import.py:171 netbox/ipam/forms/bulk_import.py:253 +#: netbox/ipam/forms/bulk_import.py:289 netbox/ipam/forms/bulk_import.py:470 +#: netbox/virtualization/forms/bulk_import.py:71 +#: netbox/virtualization/forms/bulk_import.py:125 +#: netbox/vpn/forms/bulk_import.py:63 netbox/wireless/forms/bulk_import.py:61 +#: netbox/wireless/forms/bulk_import.py:106 +msgid "Assigned tenant" +msgstr "Zugewiesener Mandant" + +#: netbox/circuits/forms/bulk_import.py:139 +msgid "Termination type (app & model)" +msgstr "Typ des Abschlusspunktes (App und Modell)" + +#: netbox/circuits/forms/bulk_import.py:151 +#: netbox/circuits/forms/bulk_import.py:164 +msgid "Termination ID" +msgstr "Abschlusspunkt-ID" + +#: netbox/circuits/forms/bulk_import.py:185 +msgid "Circuit type (app & model)" +msgstr "Verbindungstyp (App und Modell)" + +#: netbox/circuits/forms/bulk_import.py:211 +msgid "The network to which this virtual circuit belongs" +msgstr "Das Netzwerk, zu dem diese virtuelle Verbindung gehört" + +#: netbox/circuits/forms/bulk_import.py:217 +msgid "Assigned provider account (if any)" +msgstr "Zugewiesenes Providerkonto (falls vorhanden)" + +#: netbox/circuits/forms/bulk_import.py:224 +msgid "Type of virtual circuit" +msgstr "Art der virtuellen Verbindung" + +#: netbox/circuits/forms/bulk_import.py:256 netbox/vpn/forms/bulk_import.py:83 +msgid "Operational role" +msgstr "Operative Rolle" + +#: netbox/circuits/forms/bulk_import.py:259 +#: netbox/circuits/forms/model_forms.py:368 +#: netbox/circuits/tables/virtual_circuits.py:112 +#: netbox/dcim/forms/bulk_import.py:1219 netbox/dcim/forms/model_forms.py:1164 +#: netbox/dcim/forms/model_forms.py:1433 netbox/dcim/forms/model_forms.py:1600 +#: netbox/dcim/forms/model_forms.py:1635 netbox/dcim/forms/model_forms.py:1765 +#: netbox/dcim/tables/connections.py:65 netbox/dcim/tables/devices.py:1141 +#: netbox/ipam/forms/bulk_import.py:317 netbox/ipam/forms/model_forms.py:290 +#: netbox/ipam/forms/model_forms.py:299 netbox/ipam/tables/fhrp.py:64 +#: netbox/ipam/tables/ip.py:324 netbox/ipam/tables/vlans.py:145 +#: netbox/templates/circuits/inc/circuit_termination_fields.html:52 +#: netbox/templates/circuits/virtualcircuittermination.html:53 +#: netbox/templates/circuits/virtualcircuittermination.html:60 +#: netbox/templates/dcim/frontport.html:106 +#: netbox/templates/dcim/interface.html:27 +#: netbox/templates/dcim/interface.html:241 +#: netbox/templates/dcim/interface.html:367 +#: netbox/templates/dcim/rearport.html:102 +#: netbox/templates/virtualization/vminterface.html:18 +#: netbox/templates/vpn/tunneltermination.html:31 +#: netbox/templates/wireless/inc/wirelesslink_interface.html:10 +#: netbox/templates/wireless/wirelesslink.html:10 +#: netbox/templates/wireless/wirelesslink.html:55 +#: netbox/virtualization/forms/model_forms.py:377 +#: netbox/vpn/forms/bulk_import.py:297 netbox/vpn/forms/model_forms.py:439 +#: netbox/vpn/forms/model_forms.py:448 +#: netbox/wireless/forms/model_forms.py:116 +#: netbox/wireless/forms/model_forms.py:158 +msgid "Interface" +msgstr "Schnittstelle" + +#: netbox/circuits/forms/filtersets.py:38 +#: netbox/circuits/forms/filtersets.py:129 +#: netbox/circuits/forms/filtersets.py:187 +#: netbox/circuits/forms/filtersets.py:245 +#: netbox/circuits/tables/circuits.py:144 netbox/dcim/forms/bulk_edit.py:342 +#: netbox/dcim/forms/bulk_edit.py:450 netbox/dcim/forms/bulk_edit.py:691 +#: netbox/dcim/forms/bulk_edit.py:746 netbox/dcim/forms/bulk_edit.py:900 +#: netbox/dcim/forms/bulk_import.py:237 netbox/dcim/forms/bulk_import.py:339 +#: netbox/dcim/forms/bulk_import.py:573 netbox/dcim/forms/bulk_import.py:1436 +#: netbox/dcim/forms/bulk_import.py:1470 netbox/dcim/forms/filtersets.py:96 +#: netbox/dcim/forms/filtersets.py:323 netbox/dcim/forms/filtersets.py:357 +#: netbox/dcim/forms/filtersets.py:397 netbox/dcim/forms/filtersets.py:448 +#: netbox/dcim/forms/filtersets.py:720 netbox/dcim/forms/filtersets.py:763 +#: netbox/dcim/forms/filtersets.py:978 netbox/dcim/forms/filtersets.py:1007 +#: netbox/dcim/forms/filtersets.py:1027 netbox/dcim/forms/filtersets.py:1091 +#: netbox/dcim/forms/filtersets.py:1121 netbox/dcim/forms/filtersets.py:1130 +#: netbox/dcim/forms/filtersets.py:1241 netbox/dcim/forms/filtersets.py:1265 +#: netbox/dcim/forms/filtersets.py:1290 netbox/dcim/forms/filtersets.py:1309 +#: netbox/dcim/forms/filtersets.py:1336 netbox/dcim/forms/filtersets.py:1447 +#: netbox/dcim/forms/filtersets.py:1471 netbox/dcim/forms/filtersets.py:1495 +#: netbox/dcim/forms/filtersets.py:1513 netbox/dcim/forms/filtersets.py:1530 +#: netbox/dcim/forms/model_forms.py:184 netbox/dcim/forms/model_forms.py:248 +#: netbox/dcim/forms/model_forms.py:478 netbox/dcim/forms/model_forms.py:739 +#: netbox/dcim/tables/devices.py:168 netbox/dcim/tables/power.py:30 +#: netbox/dcim/tables/racks.py:117 netbox/dcim/tables/racks.py:211 +#: netbox/extras/filtersets.py:536 netbox/extras/forms/filtersets.py:327 +#: netbox/ipam/forms/filtersets.py:234 netbox/ipam/forms/filtersets.py:417 +#: netbox/ipam/forms/filtersets.py:440 netbox/ipam/forms/filtersets.py:507 #: netbox/templates/dcim/device.html:26 #: netbox/templates/dcim/device_edit.html:30 #: netbox/templates/dcim/inc/cable_termination.html:12 #: netbox/templates/dcim/location.html:26 #: netbox/templates/dcim/powerpanel.html:26 netbox/templates/dcim/rack.html:24 #: netbox/templates/dcim/rackreservation.html:32 -#: netbox/virtualization/forms/filtersets.py:46 -#: netbox/virtualization/forms/filtersets.py:100 -#: netbox/wireless/forms/model_forms.py:87 -#: netbox/wireless/forms/model_forms.py:129 +#: netbox/virtualization/forms/filtersets.py:79 +#: netbox/virtualization/forms/filtersets.py:105 +#: netbox/wireless/forms/filtersets.py:93 +#: netbox/wireless/forms/model_forms.py:90 +#: netbox/wireless/forms/model_forms.py:132 msgid "Location" msgstr "Lokation" -#: netbox/circuits/forms/filtersets.py:32 -#: netbox/circuits/forms/filtersets.py:120 netbox/dcim/forms/filtersets.py:144 -#: netbox/dcim/forms/filtersets.py:158 netbox/dcim/forms/filtersets.py:174 -#: netbox/dcim/forms/filtersets.py:206 netbox/dcim/forms/filtersets.py:328 -#: netbox/dcim/forms/filtersets.py:400 netbox/dcim/forms/filtersets.py:471 -#: netbox/dcim/forms/filtersets.py:723 netbox/dcim/forms/filtersets.py:1091 +#: netbox/circuits/forms/filtersets.py:40 +#: netbox/circuits/forms/filtersets.py:131 netbox/dcim/forms/filtersets.py:145 +#: netbox/dcim/forms/filtersets.py:159 netbox/dcim/forms/filtersets.py:175 +#: netbox/dcim/forms/filtersets.py:207 netbox/dcim/forms/filtersets.py:329 +#: netbox/dcim/forms/filtersets.py:401 netbox/dcim/forms/filtersets.py:472 +#: netbox/dcim/forms/filtersets.py:724 netbox/dcim/forms/filtersets.py:1092 #: netbox/netbox/navigation/menu.py:31 netbox/netbox/navigation/menu.py:33 -#: netbox/tenancy/forms/filtersets.py:42 netbox/tenancy/tables/columns.py:70 +#: netbox/tenancy/forms/filtersets.py:42 netbox/tenancy/tables/columns.py:55 #: netbox/tenancy/tables/contacts.py:25 netbox/tenancy/views.py:19 #: netbox/virtualization/forms/filtersets.py:37 #: netbox/virtualization/forms/filtersets.py:48 -#: netbox/virtualization/forms/filtersets.py:106 +#: netbox/virtualization/forms/filtersets.py:111 msgid "Contacts" msgstr "Kontakte" -#: netbox/circuits/forms/filtersets.py:37 -#: netbox/circuits/forms/filtersets.py:157 netbox/dcim/forms/bulk_edit.py:113 -#: netbox/dcim/forms/bulk_edit.py:314 netbox/dcim/forms/bulk_edit.py:872 -#: netbox/dcim/forms/bulk_import.py:93 netbox/dcim/forms/filtersets.py:73 -#: netbox/dcim/forms/filtersets.py:185 netbox/dcim/forms/filtersets.py:211 -#: netbox/dcim/forms/filtersets.py:334 netbox/dcim/forms/filtersets.py:425 -#: netbox/dcim/forms/filtersets.py:739 netbox/dcim/forms/filtersets.py:983 -#: netbox/dcim/forms/filtersets.py:1013 netbox/dcim/forms/filtersets.py:1097 -#: netbox/dcim/forms/filtersets.py:1136 netbox/dcim/forms/filtersets.py:1576 -#: netbox/dcim/forms/filtersets.py:1600 netbox/dcim/forms/filtersets.py:1624 -#: netbox/dcim/forms/model_forms.py:112 netbox/dcim/forms/object_create.py:367 -#: netbox/dcim/tables/devices.py:143 netbox/dcim/tables/sites.py:85 -#: netbox/extras/filtersets.py:503 netbox/ipam/forms/bulk_edit.py:208 -#: netbox/ipam/forms/bulk_edit.py:474 netbox/ipam/forms/filtersets.py:217 -#: netbox/ipam/forms/filtersets.py:422 netbox/ipam/forms/filtersets.py:475 -#: netbox/templates/dcim/device.html:18 netbox/templates/dcim/rack.html:16 +#: netbox/circuits/forms/filtersets.py:45 +#: netbox/circuits/forms/filtersets.py:168 +#: netbox/circuits/forms/filtersets.py:230 +#: netbox/circuits/tables/circuits.py:139 netbox/dcim/forms/bulk_edit.py:116 +#: netbox/dcim/forms/bulk_edit.py:317 netbox/dcim/forms/bulk_edit.py:875 +#: netbox/dcim/forms/bulk_import.py:95 netbox/dcim/forms/filtersets.py:74 +#: netbox/dcim/forms/filtersets.py:186 netbox/dcim/forms/filtersets.py:212 +#: netbox/dcim/forms/filtersets.py:335 netbox/dcim/forms/filtersets.py:426 +#: netbox/dcim/forms/filtersets.py:740 netbox/dcim/forms/filtersets.py:984 +#: netbox/dcim/forms/filtersets.py:1014 netbox/dcim/forms/filtersets.py:1098 +#: netbox/dcim/forms/filtersets.py:1137 netbox/dcim/forms/filtersets.py:1614 +#: netbox/dcim/forms/filtersets.py:1638 netbox/dcim/forms/filtersets.py:1662 +#: netbox/dcim/forms/model_forms.py:114 netbox/dcim/forms/object_create.py:367 +#: netbox/dcim/tables/devices.py:154 netbox/dcim/tables/sites.py:85 +#: netbox/extras/filtersets.py:503 netbox/ipam/forms/bulk_edit.py:458 +#: netbox/ipam/forms/filtersets.py:219 netbox/ipam/forms/filtersets.py:425 +#: netbox/ipam/forms/filtersets.py:516 netbox/templates/dcim/device.html:18 +#: netbox/templates/dcim/rack.html:16 #: netbox/templates/dcim/rackreservation.html:22 #: netbox/templates/dcim/region.html:26 netbox/templates/dcim/site.html:31 -#: netbox/templates/ipam/prefix.html:49 netbox/templates/ipam/vlan.html:16 -#: netbox/virtualization/forms/bulk_edit.py:81 +#: netbox/templates/ipam/vlan.html:16 #: netbox/virtualization/forms/filtersets.py:59 -#: netbox/virtualization/forms/filtersets.py:133 +#: netbox/virtualization/forms/filtersets.py:138 #: netbox/virtualization/forms/model_forms.py:92 -#: netbox/vpn/forms/filtersets.py:257 +#: netbox/vpn/forms/filtersets.py:257 netbox/wireless/forms/filtersets.py:73 msgid "Region" msgstr "Region" -#: netbox/circuits/forms/filtersets.py:42 -#: netbox/circuits/forms/filtersets.py:162 netbox/dcim/forms/bulk_edit.py:322 -#: netbox/dcim/forms/bulk_edit.py:880 netbox/dcim/forms/filtersets.py:78 -#: netbox/dcim/forms/filtersets.py:190 netbox/dcim/forms/filtersets.py:216 -#: netbox/dcim/forms/filtersets.py:347 netbox/dcim/forms/filtersets.py:430 -#: netbox/dcim/forms/filtersets.py:744 netbox/dcim/forms/filtersets.py:988 -#: netbox/dcim/forms/filtersets.py:1102 netbox/dcim/forms/filtersets.py:1141 +#: netbox/circuits/forms/filtersets.py:50 +#: netbox/circuits/forms/filtersets.py:173 +#: netbox/circuits/forms/filtersets.py:235 netbox/dcim/forms/bulk_edit.py:325 +#: netbox/dcim/forms/bulk_edit.py:883 netbox/dcim/forms/filtersets.py:79 +#: netbox/dcim/forms/filtersets.py:191 netbox/dcim/forms/filtersets.py:217 +#: netbox/dcim/forms/filtersets.py:348 netbox/dcim/forms/filtersets.py:431 +#: netbox/dcim/forms/filtersets.py:745 netbox/dcim/forms/filtersets.py:989 +#: netbox/dcim/forms/filtersets.py:1103 netbox/dcim/forms/filtersets.py:1142 #: netbox/dcim/forms/object_create.py:375 netbox/extras/filtersets.py:520 -#: netbox/ipam/forms/bulk_edit.py:213 netbox/ipam/forms/bulk_edit.py:479 -#: netbox/ipam/forms/filtersets.py:222 netbox/ipam/forms/filtersets.py:427 -#: netbox/ipam/forms/filtersets.py:480 -#: netbox/virtualization/forms/bulk_edit.py:86 -#: netbox/virtualization/forms/filtersets.py:69 -#: netbox/virtualization/forms/filtersets.py:138 +#: netbox/ipam/forms/bulk_edit.py:463 netbox/ipam/forms/filtersets.py:224 +#: netbox/ipam/forms/filtersets.py:430 netbox/ipam/forms/filtersets.py:521 +#: netbox/virtualization/forms/filtersets.py:64 +#: netbox/virtualization/forms/filtersets.py:143 #: netbox/virtualization/forms/model_forms.py:98 +#: netbox/wireless/forms/filtersets.py:78 msgid "Site group" msgstr "Standortgruppe" -#: netbox/circuits/forms/filtersets.py:65 -#: netbox/circuits/forms/filtersets.py:83 -#: netbox/circuits/forms/filtersets.py:102 -#: netbox/circuits/forms/filtersets.py:117 netbox/core/forms/filtersets.py:67 -#: netbox/core/forms/filtersets.py:135 netbox/dcim/forms/bulk_edit.py:843 -#: netbox/dcim/forms/filtersets.py:172 netbox/dcim/forms/filtersets.py:204 -#: netbox/dcim/forms/filtersets.py:915 netbox/dcim/forms/filtersets.py:1007 -#: netbox/dcim/forms/filtersets.py:1131 netbox/dcim/forms/filtersets.py:1239 -#: netbox/dcim/forms/filtersets.py:1263 netbox/dcim/forms/filtersets.py:1288 -#: netbox/dcim/forms/filtersets.py:1307 netbox/dcim/forms/filtersets.py:1327 -#: netbox/dcim/forms/filtersets.py:1441 netbox/dcim/forms/filtersets.py:1465 -#: netbox/dcim/forms/filtersets.py:1489 netbox/dcim/forms/filtersets.py:1507 -#: netbox/dcim/forms/filtersets.py:1523 netbox/extras/forms/bulk_edit.py:90 -#: netbox/extras/forms/filtersets.py:44 netbox/extras/forms/filtersets.py:134 -#: netbox/extras/forms/filtersets.py:165 netbox/extras/forms/filtersets.py:205 -#: netbox/extras/forms/filtersets.py:221 netbox/extras/forms/filtersets.py:252 -#: netbox/extras/forms/filtersets.py:276 netbox/extras/forms/filtersets.py:441 -#: netbox/ipam/forms/filtersets.py:99 netbox/ipam/forms/filtersets.py:266 -#: netbox/ipam/forms/filtersets.py:307 netbox/ipam/forms/filtersets.py:382 -#: netbox/ipam/forms/filtersets.py:468 netbox/ipam/forms/filtersets.py:527 -#: netbox/ipam/forms/filtersets.py:545 netbox/netbox/tables/tables.py:256 -#: netbox/virtualization/forms/filtersets.py:45 -#: netbox/virtualization/forms/filtersets.py:103 -#: netbox/virtualization/forms/filtersets.py:198 -#: netbox/virtualization/forms/filtersets.py:243 -#: netbox/vpn/forms/filtersets.py:213 netbox/wireless/forms/bulk_edit.py:150 -#: netbox/wireless/forms/filtersets.py:34 -#: netbox/wireless/forms/filtersets.py:74 -msgid "Attributes" -msgstr "Attribute" - -#: netbox/circuits/forms/filtersets.py:73 -#: netbox/circuits/tables/circuits.py:63 -#: netbox/circuits/tables/providers.py:66 +#: netbox/circuits/forms/filtersets.py:81 +#: netbox/circuits/tables/circuits.py:62 +#: netbox/circuits/tables/providers.py:64 +#: netbox/circuits/tables/virtual_circuits.py:55 +#: netbox/circuits/tables/virtual_circuits.py:103 #: netbox/templates/circuits/circuit.html:22 #: netbox/templates/circuits/provideraccount.html:24 msgid "Account" msgstr "Konto" -#: netbox/circuits/forms/filtersets.py:217 +#: netbox/circuits/forms/filtersets.py:253 msgid "Term Side" msgstr "Terminationsseite" -#: netbox/circuits/forms/filtersets.py:250 netbox/dcim/forms/bulk_edit.py:1557 -#: netbox/extras/forms/model_forms.py:582 netbox/ipam/forms/filtersets.py:142 -#: netbox/ipam/forms/filtersets.py:546 netbox/ipam/forms/model_forms.py:327 +#: netbox/circuits/forms/filtersets.py:286 netbox/dcim/forms/bulk_edit.py:1572 +#: netbox/extras/forms/model_forms.py:596 netbox/ipam/forms/filtersets.py:144 +#: netbox/ipam/forms/filtersets.py:598 netbox/ipam/forms/model_forms.py:337 +#: netbox/templates/dcim/macaddress.html:25 #: netbox/templates/extras/configcontext.html:60 #: netbox/templates/ipam/ipaddress.html:59 -#: netbox/templates/ipam/vlan_edit.html:30 +#: netbox/templates/ipam/vlan_edit.html:38 #: netbox/tenancy/forms/filtersets.py:87 netbox/users/forms/model_forms.py:314 msgid "Assignment" msgstr "Zuweisung" -#: netbox/circuits/forms/filtersets.py:265 -#: netbox/circuits/forms/model_forms.py:195 -#: netbox/circuits/tables/circuits.py:155 netbox/dcim/forms/bulk_edit.py:118 -#: netbox/dcim/forms/bulk_import.py:100 netbox/dcim/forms/model_forms.py:117 -#: netbox/dcim/tables/sites.py:89 netbox/extras/forms/filtersets.py:480 -#: netbox/ipam/filtersets.py:1001 netbox/ipam/forms/bulk_edit.py:493 -#: netbox/ipam/forms/bulk_import.py:460 netbox/ipam/forms/model_forms.py:561 -#: netbox/ipam/tables/fhrp.py:67 netbox/ipam/tables/vlans.py:122 -#: netbox/ipam/tables/vlans.py:226 +#: netbox/circuits/forms/filtersets.py:301 +#: netbox/circuits/forms/model_forms.py:252 +#: netbox/circuits/tables/circuits.py:191 netbox/dcim/forms/bulk_edit.py:121 +#: netbox/dcim/forms/bulk_import.py:102 netbox/dcim/forms/model_forms.py:120 +#: netbox/dcim/tables/sites.py:89 netbox/extras/forms/filtersets.py:489 +#: netbox/ipam/filtersets.py:968 netbox/ipam/forms/bulk_edit.py:477 +#: netbox/ipam/forms/bulk_import.py:459 netbox/ipam/forms/model_forms.py:571 +#: netbox/ipam/tables/fhrp.py:67 netbox/ipam/tables/vlans.py:91 +#: netbox/ipam/tables/vlans.py:202 #: netbox/templates/circuits/circuitgroupassignment.html:22 -#: netbox/templates/dcim/interface.html:284 netbox/templates/dcim/site.html:37 +#: netbox/templates/dcim/interface.html:341 netbox/templates/dcim/site.html:37 #: netbox/templates/ipam/inc/panels/fhrp_groups.html:23 #: netbox/templates/ipam/vlan.html:27 netbox/templates/tenancy/contact.html:21 #: netbox/templates/tenancy/tenant.html:20 netbox/templates/users/group.html:6 @@ -1132,227 +1397,243 @@ msgstr "Zuweisung" #: netbox/tenancy/tables/tenants.py:42 netbox/users/filtersets.py:62 #: netbox/users/filtersets.py:185 netbox/users/forms/filtersets.py:31 #: netbox/users/forms/filtersets.py:37 netbox/users/forms/filtersets.py:79 -#: netbox/virtualization/forms/bulk_edit.py:65 -#: netbox/virtualization/forms/bulk_import.py:47 -#: netbox/virtualization/forms/filtersets.py:85 -#: netbox/virtualization/forms/model_forms.py:66 +#: netbox/virtualization/forms/bulk_edit.py:66 +#: netbox/virtualization/forms/bulk_import.py:48 +#: netbox/virtualization/forms/filtersets.py:90 +#: netbox/virtualization/forms/model_forms.py:70 #: netbox/virtualization/tables/clusters.py:70 #: netbox/vpn/forms/bulk_edit.py:112 netbox/vpn/forms/bulk_import.py:158 #: netbox/vpn/forms/filtersets.py:116 netbox/vpn/tables/crypto.py:31 -#: netbox/vpn/tables/tunnels.py:44 netbox/wireless/forms/bulk_edit.py:48 -#: netbox/wireless/forms/bulk_import.py:36 -#: netbox/wireless/forms/filtersets.py:46 -#: netbox/wireless/forms/model_forms.py:40 +#: netbox/vpn/tables/tunnels.py:44 netbox/wireless/forms/bulk_edit.py:50 +#: netbox/wireless/forms/bulk_import.py:38 +#: netbox/wireless/forms/filtersets.py:49 +#: netbox/wireless/forms/model_forms.py:41 #: netbox/wireless/tables/wirelesslan.py:48 msgid "Group" msgstr "Gruppe" -#: netbox/circuits/forms/model_forms.py:182 +#: netbox/circuits/forms/model_forms.py:239 #: netbox/templates/circuits/circuitgroup.html:25 msgid "Circuit Group" msgstr "Transportnetzgruppe" -#: netbox/circuits/models/circuits.py:27 netbox/dcim/models/cables.py:67 -#: netbox/dcim/models/device_component_templates.py:517 -#: netbox/dcim/models/device_component_templates.py:617 -#: netbox/dcim/models/device_components.py:975 -#: netbox/dcim/models/device_components.py:1049 -#: netbox/dcim/models/device_components.py:1204 -#: netbox/dcim/models/devices.py:479 netbox/dcim/models/racks.py:224 +#: netbox/circuits/forms/model_forms.py:259 +msgid "Circuit type" +msgstr "Verbindungstyp" + +#: netbox/circuits/forms/model_forms.py:270 +msgid "Group Assignment" +msgstr "Gruppenzuweisung" + +#: netbox/circuits/models/base.py:18 netbox/dcim/models/cables.py:69 +#: netbox/dcim/models/device_component_templates.py:531 +#: netbox/dcim/models/device_component_templates.py:631 +#: netbox/dcim/models/device_components.py:476 +#: netbox/dcim/models/device_components.py:1026 +#: netbox/dcim/models/device_components.py:1097 +#: netbox/dcim/models/device_components.py:1243 +#: netbox/dcim/models/devices.py:478 netbox/dcim/models/racks.py:221 #: netbox/extras/models/tags.py:28 msgid "color" msgstr "Farbe" -#: netbox/circuits/models/circuits.py:36 +#: netbox/circuits/models/circuits.py:34 msgid "circuit type" msgstr "Transportnetztyp" -#: netbox/circuits/models/circuits.py:37 +#: netbox/circuits/models/circuits.py:35 msgid "circuit types" msgstr "Transportnetztypen" -#: netbox/circuits/models/circuits.py:48 +#: netbox/circuits/models/circuits.py:46 +#: netbox/circuits/models/virtual_circuits.py:38 msgid "circuit ID" msgstr "Transportnetz-ID" -#: netbox/circuits/models/circuits.py:49 +#: netbox/circuits/models/circuits.py:47 +#: netbox/circuits/models/virtual_circuits.py:39 msgid "Unique circuit ID" msgstr "Eindeutige Transportnetz-ID" -#: netbox/circuits/models/circuits.py:69 netbox/core/models/data.py:52 -#: netbox/core/models/jobs.py:85 netbox/dcim/models/cables.py:49 -#: netbox/dcim/models/devices.py:653 netbox/dcim/models/devices.py:1173 -#: netbox/dcim/models/devices.py:1404 netbox/dcim/models/power.py:96 -#: netbox/dcim/models/racks.py:297 netbox/dcim/models/sites.py:154 -#: netbox/dcim/models/sites.py:266 netbox/ipam/models/ip.py:253 -#: netbox/ipam/models/ip.py:522 netbox/ipam/models/ip.py:730 -#: netbox/ipam/models/vlans.py:211 netbox/virtualization/models/clusters.py:74 -#: netbox/virtualization/models/virtualmachines.py:84 -#: netbox/vpn/models/tunnels.py:40 netbox/wireless/models.py:95 -#: netbox/wireless/models.py:159 +#: netbox/circuits/models/circuits.py:67 +#: netbox/circuits/models/virtual_circuits.py:59 netbox/core/models/data.py:52 +#: netbox/core/models/jobs.py:85 netbox/dcim/models/cables.py:51 +#: netbox/dcim/models/device_components.py:1283 +#: netbox/dcim/models/devices.py:645 netbox/dcim/models/devices.py:1181 +#: netbox/dcim/models/devices.py:1409 netbox/dcim/models/power.py:94 +#: netbox/dcim/models/racks.py:288 netbox/dcim/models/sites.py:154 +#: netbox/dcim/models/sites.py:270 netbox/ipam/models/ip.py:237 +#: netbox/ipam/models/ip.py:508 netbox/ipam/models/ip.py:729 +#: netbox/ipam/models/vlans.py:210 netbox/virtualization/models/clusters.py:70 +#: netbox/virtualization/models/virtualmachines.py:79 +#: netbox/vpn/models/tunnels.py:38 netbox/wireless/models.py:95 +#: netbox/wireless/models.py:156 msgid "status" msgstr "Status" -#: netbox/circuits/models/circuits.py:84 netbox/templates/core/plugin.html:20 +#: netbox/circuits/models/circuits.py:82 netbox/templates/core/plugin.html:20 msgid "installed" msgstr "installiert" -#: netbox/circuits/models/circuits.py:89 +#: netbox/circuits/models/circuits.py:87 msgid "terminates" msgstr "endet" -#: netbox/circuits/models/circuits.py:94 +#: netbox/circuits/models/circuits.py:92 msgid "commit rate (Kbps)" msgstr "garantierte Bandbreite (Kbps)" -#: netbox/circuits/models/circuits.py:95 +#: netbox/circuits/models/circuits.py:93 msgid "Committed rate" msgstr "Garantierte Bandbreite" -#: netbox/circuits/models/circuits.py:137 +#: netbox/circuits/models/circuits.py:142 msgid "circuit" msgstr "Transportnetz" -#: netbox/circuits/models/circuits.py:138 +#: netbox/circuits/models/circuits.py:143 msgid "circuits" msgstr "Transportnetze" -#: netbox/circuits/models/circuits.py:170 +#: netbox/circuits/models/circuits.py:172 msgid "circuit group" msgstr "Transportnetzgruppe" -#: netbox/circuits/models/circuits.py:171 +#: netbox/circuits/models/circuits.py:173 msgid "circuit groups" msgstr "Transportnetzgruppen" -#: netbox/circuits/models/circuits.py:195 netbox/ipam/models/fhrp.py:93 -#: netbox/tenancy/models/contacts.py:134 +#: netbox/circuits/models/circuits.py:190 +msgid "member ID" +msgstr "Mitglieds-ID" + +#: netbox/circuits/models/circuits.py:202 netbox/ipam/models/fhrp.py:90 +#: netbox/tenancy/models/contacts.py:126 msgid "priority" msgstr "Priorität" -#: netbox/circuits/models/circuits.py:213 +#: netbox/circuits/models/circuits.py:220 msgid "Circuit group assignment" msgstr "Transportnetzzuweisung" -#: netbox/circuits/models/circuits.py:214 +#: netbox/circuits/models/circuits.py:221 msgid "Circuit group assignments" msgstr "Transportnetzzuweisungen" -#: netbox/circuits/models/circuits.py:240 -msgid "termination" -msgstr "" +#: netbox/circuits/models/circuits.py:247 +msgid "termination side" +msgstr "Abschlussseite" -#: netbox/circuits/models/circuits.py:257 +#: netbox/circuits/models/circuits.py:266 msgid "port speed (Kbps)" msgstr "Portgeschwindigkeit (Kbps)" -#: netbox/circuits/models/circuits.py:260 +#: netbox/circuits/models/circuits.py:269 msgid "Physical circuit speed" msgstr "Physikalische Transportnetzgeschwindigkeit" -#: netbox/circuits/models/circuits.py:265 +#: netbox/circuits/models/circuits.py:274 msgid "upstream speed (Kbps)" msgstr "Upstream Geschwindigkeit (Kbps)" -#: netbox/circuits/models/circuits.py:266 +#: netbox/circuits/models/circuits.py:275 msgid "Upstream speed, if different from port speed" msgstr "" "Upstream Geschwindigkeit, falls sie von der Portgeschwindigkeit abweicht" -#: netbox/circuits/models/circuits.py:271 +#: netbox/circuits/models/circuits.py:280 msgid "cross-connect ID" msgstr "Cross-Connect-ID" -#: netbox/circuits/models/circuits.py:272 +#: netbox/circuits/models/circuits.py:281 msgid "ID of the local cross-connect" msgstr "ID des lokalen Cross-Connects" -#: netbox/circuits/models/circuits.py:277 +#: netbox/circuits/models/circuits.py:286 msgid "patch panel/port(s)" msgstr "Patchpanel/Anschluss" -#: netbox/circuits/models/circuits.py:278 +#: netbox/circuits/models/circuits.py:287 msgid "Patch panel ID and port number(s)" msgstr "Patchpanel-ID und Anschlussnummer(n)" -#: netbox/circuits/models/circuits.py:281 -#: netbox/dcim/models/device_component_templates.py:61 -#: netbox/dcim/models/device_components.py:68 netbox/dcim/models/racks.py:685 +#: netbox/circuits/models/circuits.py:290 +#: netbox/circuits/models/virtual_circuits.py:144 +#: netbox/dcim/models/device_component_templates.py:57 +#: netbox/dcim/models/device_components.py:63 netbox/dcim/models/racks.py:681 #: netbox/extras/models/configs.py:45 netbox/extras/models/configs.py:219 #: netbox/extras/models/customfields.py:125 netbox/extras/models/models.py:61 #: netbox/extras/models/models.py:158 netbox/extras/models/models.py:396 #: netbox/extras/models/models.py:511 #: netbox/extras/models/notifications.py:131 -#: netbox/extras/models/staging.py:31 netbox/extras/models/tags.py:32 -#: netbox/netbox/models/__init__.py:110 netbox/netbox/models/__init__.py:145 -#: netbox/netbox/models/__init__.py:191 netbox/users/models/permissions.py:24 -#: netbox/users/models/tokens.py:57 netbox/users/models/users.py:33 -#: netbox/virtualization/models/virtualmachines.py:289 +#: netbox/extras/models/staging.py:32 netbox/extras/models/tags.py:32 +#: netbox/ipam/models/vlans.py:358 netbox/netbox/models/__init__.py:115 +#: netbox/netbox/models/__init__.py:150 netbox/netbox/models/__init__.py:196 +#: netbox/users/models/permissions.py:24 netbox/users/models/tokens.py:57 +#: netbox/users/models/users.py:33 +#: netbox/virtualization/models/virtualmachines.py:276 msgid "description" msgstr "Beschreibung" -#: netbox/circuits/models/circuits.py:294 +#: netbox/circuits/models/circuits.py:340 msgid "circuit termination" msgstr "Transportnetzabschlusspunkt" -#: netbox/circuits/models/circuits.py:295 +#: netbox/circuits/models/circuits.py:341 msgid "circuit terminations" msgstr "Transportnetzabschlusspunkte" -#: netbox/circuits/models/circuits.py:308 -msgid "" -"A circuit termination must attach to either a site or a provider network." +#: netbox/circuits/models/circuits.py:353 +msgid "A circuit termination must attach to a terminating object." msgstr "" +"Ein Verbindungsabschluss muss an einem Abschlussobjekt verbunden werden." -#: netbox/circuits/models/circuits.py:310 -msgid "" -"A circuit termination cannot attach to both a site and a provider network." -msgstr "" - -#: netbox/circuits/models/providers.py:22 -#: netbox/circuits/models/providers.py:66 -#: netbox/circuits/models/providers.py:104 netbox/core/models/data.py:39 +#: netbox/circuits/models/providers.py:21 +#: netbox/circuits/models/providers.py:63 +#: netbox/circuits/models/providers.py:98 netbox/core/models/data.py:39 #: netbox/core/models/jobs.py:46 #: netbox/dcim/models/device_component_templates.py:43 -#: netbox/dcim/models/device_components.py:53 -#: netbox/dcim/models/devices.py:593 netbox/dcim/models/devices.py:1335 -#: netbox/dcim/models/devices.py:1400 netbox/dcim/models/power.py:39 -#: netbox/dcim/models/power.py:92 netbox/dcim/models/racks.py:262 -#: netbox/dcim/models/sites.py:138 netbox/extras/models/configs.py:36 +#: netbox/dcim/models/device_components.py:52 +#: netbox/dcim/models/devices.py:589 netbox/dcim/models/devices.py:1341 +#: netbox/dcim/models/devices.py:1404 netbox/dcim/models/power.py:38 +#: netbox/dcim/models/power.py:89 netbox/dcim/models/racks.py:257 +#: netbox/dcim/models/sites.py:142 netbox/extras/models/configs.py:36 #: netbox/extras/models/configs.py:215 netbox/extras/models/customfields.py:92 #: netbox/extras/models/models.py:56 netbox/extras/models/models.py:153 #: netbox/extras/models/models.py:296 netbox/extras/models/models.py:392 #: netbox/extras/models/models.py:501 netbox/extras/models/models.py:596 #: netbox/extras/models/notifications.py:126 -#: netbox/extras/models/scripts.py:30 netbox/extras/models/staging.py:26 -#: netbox/ipam/models/asns.py:18 netbox/ipam/models/fhrp.py:25 -#: netbox/ipam/models/services.py:52 netbox/ipam/models/services.py:88 -#: netbox/ipam/models/vlans.py:36 netbox/ipam/models/vlans.py:200 -#: netbox/ipam/models/vrfs.py:22 netbox/ipam/models/vrfs.py:79 -#: netbox/netbox/models/__init__.py:137 netbox/netbox/models/__init__.py:181 -#: netbox/tenancy/models/contacts.py:64 netbox/tenancy/models/tenants.py:20 -#: netbox/tenancy/models/tenants.py:45 netbox/users/models/permissions.py:20 -#: netbox/users/models/users.py:28 netbox/virtualization/models/clusters.py:57 -#: netbox/virtualization/models/virtualmachines.py:72 -#: netbox/virtualization/models/virtualmachines.py:279 -#: netbox/vpn/models/crypto.py:24 netbox/vpn/models/crypto.py:71 -#: netbox/vpn/models/crypto.py:131 netbox/vpn/models/crypto.py:183 -#: netbox/vpn/models/crypto.py:221 netbox/vpn/models/l2vpn.py:22 -#: netbox/vpn/models/tunnels.py:35 netbox/wireless/models.py:51 +#: netbox/extras/models/scripts.py:30 netbox/extras/models/staging.py:27 +#: netbox/ipam/models/asns.py:17 netbox/ipam/models/fhrp.py:24 +#: netbox/ipam/models/services.py:51 netbox/ipam/models/services.py:84 +#: netbox/ipam/models/vlans.py:37 netbox/ipam/models/vlans.py:199 +#: netbox/ipam/models/vlans.py:337 netbox/ipam/models/vrfs.py:20 +#: netbox/ipam/models/vrfs.py:75 netbox/netbox/models/__init__.py:142 +#: netbox/netbox/models/__init__.py:186 netbox/tenancy/models/contacts.py:58 +#: netbox/tenancy/models/tenants.py:19 netbox/tenancy/models/tenants.py:42 +#: netbox/users/models/permissions.py:20 netbox/users/models/users.py:28 +#: netbox/virtualization/models/clusters.py:52 +#: netbox/virtualization/models/virtualmachines.py:71 +#: netbox/virtualization/models/virtualmachines.py:271 +#: netbox/virtualization/models/virtualmachines.py:305 +#: netbox/vpn/models/crypto.py:23 netbox/vpn/models/crypto.py:69 +#: netbox/vpn/models/crypto.py:128 netbox/vpn/models/crypto.py:180 +#: netbox/vpn/models/crypto.py:216 netbox/vpn/models/l2vpn.py:21 +#: netbox/vpn/models/tunnels.py:32 netbox/wireless/models.py:53 msgid "name" msgstr "Name" -#: netbox/circuits/models/providers.py:25 +#: netbox/circuits/models/providers.py:24 msgid "Full name of the provider" msgstr "Vollständiger Name des Providers" -#: netbox/circuits/models/providers.py:28 netbox/dcim/models/devices.py:86 +#: netbox/circuits/models/providers.py:28 netbox/dcim/models/devices.py:88 #: netbox/dcim/models/racks.py:137 netbox/dcim/models/sites.py:149 #: netbox/extras/models/models.py:506 netbox/ipam/models/asns.py:23 -#: netbox/ipam/models/vlans.py:40 netbox/netbox/models/__init__.py:141 -#: netbox/netbox/models/__init__.py:186 netbox/tenancy/models/tenants.py:25 -#: netbox/tenancy/models/tenants.py:49 netbox/vpn/models/l2vpn.py:27 -#: netbox/wireless/models.py:56 +#: netbox/ipam/models/vlans.py:42 netbox/netbox/models/__init__.py:146 +#: netbox/netbox/models/__init__.py:191 netbox/tenancy/models/tenants.py:25 +#: netbox/tenancy/models/tenants.py:47 netbox/vpn/models/l2vpn.py:27 +#: netbox/wireless/models.py:59 msgid "slug" msgstr "URL-Slug" @@ -1364,67 +1645,100 @@ msgstr "Provider" msgid "providers" msgstr "Provider" -#: netbox/circuits/models/providers.py:63 +#: netbox/circuits/models/providers.py:60 msgid "account ID" msgstr "Konto ID" -#: netbox/circuits/models/providers.py:86 +#: netbox/circuits/models/providers.py:83 msgid "provider account" msgstr "Providerkonto" -#: netbox/circuits/models/providers.py:87 +#: netbox/circuits/models/providers.py:84 msgid "provider accounts" msgstr "Providerkonten" -#: netbox/circuits/models/providers.py:115 +#: netbox/circuits/models/providers.py:110 msgid "service ID" msgstr "Dienst-ID" -#: netbox/circuits/models/providers.py:126 +#: netbox/circuits/models/providers.py:121 msgid "provider network" msgstr "Providernetzwerk" -#: netbox/circuits/models/providers.py:127 +#: netbox/circuits/models/providers.py:122 msgid "provider networks" msgstr "Providernetzwerke" -#: netbox/circuits/tables/circuits.py:32 -#: netbox/circuits/tables/circuits.py:132 +#: netbox/circuits/models/virtual_circuits.py:28 +msgid "virtual circuit type" +msgstr "virtueller Verbindungstyp" + +#: netbox/circuits/models/virtual_circuits.py:29 +msgid "virtual circuit types" +msgstr "virtuelle Verbindungstypen" + +#: netbox/circuits/models/virtual_circuits.py:99 +msgid "virtual circuit" +msgstr "virtuelle Verbindung" + +#: netbox/circuits/models/virtual_circuits.py:100 +msgid "virtual circuits" +msgstr "virtuelle Verbindungen" + +#: netbox/circuits/models/virtual_circuits.py:133 netbox/ipam/models/ip.py:194 +#: netbox/ipam/models/ip.py:736 netbox/vpn/models/tunnels.py:109 +msgid "role" +msgstr "Rolle" + +#: netbox/circuits/models/virtual_circuits.py:151 +msgid "virtual circuit termination" +msgstr "virtueller Verbindungsabschluß" + +#: netbox/circuits/models/virtual_circuits.py:152 +msgid "virtual circuit terminations" +msgstr "virtuelle Verbindungsabschlüsse" + +#: netbox/circuits/tables/circuits.py:30 +#: netbox/circuits/tables/circuits.py:168 #: netbox/circuits/tables/providers.py:18 -#: netbox/circuits/tables/providers.py:69 -#: netbox/circuits/tables/providers.py:99 netbox/core/tables/data.py:16 +#: netbox/circuits/tables/providers.py:67 +#: netbox/circuits/tables/providers.py:97 +#: netbox/circuits/tables/virtual_circuits.py:18 netbox/core/tables/data.py:16 #: netbox/core/tables/jobs.py:14 netbox/core/tables/plugins.py:44 #: netbox/core/tables/tasks.py:11 netbox/core/tables/tasks.py:115 -#: netbox/dcim/forms/filtersets.py:63 netbox/dcim/forms/object_create.py:43 -#: netbox/dcim/tables/devices.py:52 netbox/dcim/tables/devices.py:92 -#: netbox/dcim/tables/devices.py:134 netbox/dcim/tables/devices.py:289 -#: netbox/dcim/tables/devices.py:392 netbox/dcim/tables/devices.py:433 -#: netbox/dcim/tables/devices.py:482 netbox/dcim/tables/devices.py:531 -#: netbox/dcim/tables/devices.py:648 netbox/dcim/tables/devices.py:731 -#: netbox/dcim/tables/devices.py:778 netbox/dcim/tables/devices.py:841 -#: netbox/dcim/tables/devices.py:911 netbox/dcim/tables/devices.py:974 -#: netbox/dcim/tables/devices.py:994 netbox/dcim/tables/devices.py:1023 -#: netbox/dcim/tables/devices.py:1053 netbox/dcim/tables/devicetypes.py:31 +#: netbox/dcim/forms/filtersets.py:64 netbox/dcim/forms/object_create.py:43 +#: netbox/dcim/tables/devices.py:63 netbox/dcim/tables/devices.py:103 +#: netbox/dcim/tables/devices.py:145 netbox/dcim/tables/devices.py:300 +#: netbox/dcim/tables/devices.py:403 netbox/dcim/tables/devices.py:444 +#: netbox/dcim/tables/devices.py:492 netbox/dcim/tables/devices.py:541 +#: netbox/dcim/tables/devices.py:562 netbox/dcim/tables/devices.py:682 +#: netbox/dcim/tables/devices.py:765 netbox/dcim/tables/devices.py:811 +#: netbox/dcim/tables/devices.py:873 netbox/dcim/tables/devices.py:942 +#: netbox/dcim/tables/devices.py:1007 netbox/dcim/tables/devices.py:1026 +#: netbox/dcim/tables/devices.py:1055 netbox/dcim/tables/devices.py:1085 +#: netbox/dcim/tables/devicetypes.py:31 netbox/dcim/tables/devicetypes.py:227 #: netbox/dcim/tables/power.py:22 netbox/dcim/tables/power.py:62 #: netbox/dcim/tables/racks.py:24 netbox/dcim/tables/racks.py:113 #: netbox/dcim/tables/sites.py:24 netbox/dcim/tables/sites.py:51 -#: netbox/dcim/tables/sites.py:78 netbox/dcim/tables/sites.py:130 -#: netbox/extras/forms/filtersets.py:213 netbox/extras/tables/tables.py:58 +#: netbox/dcim/tables/sites.py:78 netbox/dcim/tables/sites.py:129 +#: netbox/extras/forms/filtersets.py:218 netbox/extras/tables/tables.py:58 #: netbox/extras/tables/tables.py:122 netbox/extras/tables/tables.py:155 #: netbox/extras/tables/tables.py:180 netbox/extras/tables/tables.py:246 #: netbox/extras/tables/tables.py:361 netbox/extras/tables/tables.py:378 #: netbox/extras/tables/tables.py:401 netbox/extras/tables/tables.py:439 #: netbox/extras/tables/tables.py:491 netbox/extras/tables/tables.py:514 -#: netbox/ipam/forms/bulk_edit.py:407 netbox/ipam/forms/filtersets.py:386 -#: netbox/ipam/tables/asn.py:16 netbox/ipam/tables/ip.py:85 -#: netbox/ipam/tables/ip.py:160 netbox/ipam/tables/services.py:15 -#: netbox/ipam/tables/services.py:40 netbox/ipam/tables/vlans.py:64 -#: netbox/ipam/tables/vlans.py:114 netbox/ipam/tables/vrfs.py:26 +#: netbox/ipam/forms/bulk_edit.py:391 netbox/ipam/forms/filtersets.py:389 +#: netbox/ipam/forms/filtersets.py:474 netbox/ipam/tables/asn.py:16 +#: netbox/ipam/tables/ip.py:31 netbox/ipam/tables/ip.py:106 +#: netbox/ipam/tables/services.py:15 netbox/ipam/tables/services.py:40 +#: netbox/ipam/tables/vlans.py:33 netbox/ipam/tables/vlans.py:83 +#: netbox/ipam/tables/vlans.py:231 netbox/ipam/tables/vrfs.py:26 #: netbox/ipam/tables/vrfs.py:68 #: netbox/templates/circuits/circuitgroup.html:28 #: netbox/templates/circuits/circuittype.html:22 #: netbox/templates/circuits/provideraccount.html:28 #: netbox/templates/circuits/providernetwork.html:24 +#: netbox/templates/circuits/virtualcircuittype.html:22 #: netbox/templates/core/datasource.html:34 netbox/templates/core/job.html:44 #: netbox/templates/core/plugin.html:54 #: netbox/templates/core/rq_worker.html:43 @@ -1436,7 +1750,7 @@ msgstr "Providernetzwerke" #: netbox/templates/dcim/inc/interface_vlans_table.html:5 #: netbox/templates/dcim/inc/panels/inventory_items.html:18 #: netbox/templates/dcim/interface.html:38 -#: netbox/templates/dcim/interface.html:165 +#: netbox/templates/dcim/interface.html:222 #: netbox/templates/dcim/inventoryitem.html:28 #: netbox/templates/dcim/inventoryitemrole.html:18 #: netbox/templates/dcim/location.html:29 @@ -1466,6 +1780,7 @@ msgstr "Providernetzwerke" #: netbox/templates/ipam/service.html:24 #: netbox/templates/ipam/servicetemplate.html:15 #: netbox/templates/ipam/vlan.html:35 netbox/templates/ipam/vlangroup.html:30 +#: netbox/templates/ipam/vlantranslationpolicy.html:14 #: netbox/templates/tenancy/contact.html:25 #: netbox/templates/tenancy/contactgroup.html:21 #: netbox/templates/tenancy/contactrole.html:18 @@ -1497,106 +1812,218 @@ msgstr "Providernetzwerke" #: netbox/virtualization/tables/clusters.py:17 #: netbox/virtualization/tables/clusters.py:39 #: netbox/virtualization/tables/clusters.py:62 -#: netbox/virtualization/tables/virtualmachines.py:55 -#: netbox/virtualization/tables/virtualmachines.py:139 -#: netbox/virtualization/tables/virtualmachines.py:194 +#: netbox/virtualization/tables/virtualmachines.py:26 +#: netbox/virtualization/tables/virtualmachines.py:109 +#: netbox/virtualization/tables/virtualmachines.py:165 #: netbox/vpn/tables/crypto.py:18 netbox/vpn/tables/crypto.py:57 #: netbox/vpn/tables/crypto.py:93 netbox/vpn/tables/crypto.py:129 #: netbox/vpn/tables/crypto.py:158 netbox/vpn/tables/l2vpn.py:23 #: netbox/vpn/tables/tunnels.py:18 netbox/vpn/tables/tunnels.py:40 #: netbox/wireless/tables/wirelesslan.py:18 -#: netbox/wireless/tables/wirelesslan.py:79 +#: netbox/wireless/tables/wirelesslan.py:88 msgid "Name" msgstr "Name" -#: netbox/circuits/tables/circuits.py:41 -#: netbox/circuits/tables/circuits.py:138 -#: netbox/circuits/tables/providers.py:45 -#: netbox/circuits/tables/providers.py:79 netbox/netbox/navigation/menu.py:266 -#: netbox/netbox/navigation/menu.py:270 netbox/netbox/navigation/menu.py:272 +#: netbox/circuits/tables/circuits.py:39 +#: netbox/circuits/tables/circuits.py:174 +#: netbox/circuits/tables/providers.py:43 +#: netbox/circuits/tables/providers.py:77 +#: netbox/circuits/tables/virtual_circuits.py:27 +#: netbox/netbox/navigation/menu.py:274 netbox/netbox/navigation/menu.py:278 +#: netbox/netbox/navigation/menu.py:280 #: netbox/templates/circuits/provider.html:57 #: netbox/templates/circuits/provideraccount.html:44 #: netbox/templates/circuits/providernetwork.html:50 msgid "Circuits" msgstr "Transportnetze" -#: netbox/circuits/tables/circuits.py:55 +#: netbox/circuits/tables/circuits.py:54 +#: netbox/circuits/tables/virtual_circuits.py:42 #: netbox/templates/circuits/circuit.html:26 +#: netbox/templates/circuits/virtualcircuit.html:35 +#: netbox/templates/dcim/interface.html:174 msgid "Circuit ID" msgstr "Transportnetz-ID" -#: netbox/circuits/tables/circuits.py:69 -#: netbox/wireless/forms/model_forms.py:160 +#: netbox/circuits/tables/circuits.py:72 +#: netbox/wireless/forms/model_forms.py:163 msgid "Side A" msgstr "Seite A" -#: netbox/circuits/tables/circuits.py:74 +#: netbox/circuits/tables/circuits.py:77 msgid "Side Z" msgstr "Seite Z" -#: netbox/circuits/tables/circuits.py:77 -#: netbox/templates/circuits/circuit.html:55 +#: netbox/circuits/tables/circuits.py:80 +#: netbox/templates/circuits/circuit.html:65 msgid "Commit Rate" msgstr "Garantierte Bandbreite" -#: netbox/circuits/tables/circuits.py:80 -#: netbox/circuits/tables/providers.py:48 -#: netbox/circuits/tables/providers.py:82 -#: netbox/circuits/tables/providers.py:107 netbox/dcim/tables/devices.py:1036 -#: netbox/dcim/tables/devicetypes.py:92 netbox/dcim/tables/modules.py:29 -#: netbox/dcim/tables/modules.py:73 netbox/dcim/tables/power.py:39 -#: netbox/dcim/tables/power.py:96 netbox/dcim/tables/racks.py:84 -#: netbox/dcim/tables/racks.py:145 netbox/dcim/tables/racks.py:225 -#: netbox/dcim/tables/sites.py:108 netbox/extras/tables/tables.py:582 -#: netbox/ipam/tables/asn.py:69 netbox/ipam/tables/fhrp.py:34 -#: netbox/ipam/tables/ip.py:136 netbox/ipam/tables/ip.py:275 -#: netbox/ipam/tables/ip.py:329 netbox/ipam/tables/ip.py:397 -#: netbox/ipam/tables/services.py:24 netbox/ipam/tables/services.py:54 -#: netbox/ipam/tables/vlans.py:145 netbox/ipam/tables/vrfs.py:47 -#: netbox/ipam/tables/vrfs.py:72 netbox/templates/dcim/htmx/cable_edit.html:89 +#: netbox/circuits/tables/circuits.py:84 +#: netbox/circuits/tables/providers.py:46 +#: netbox/circuits/tables/providers.py:80 +#: netbox/circuits/tables/providers.py:105 +#: netbox/circuits/tables/virtual_circuits.py:68 +#: netbox/dcim/tables/devices.py:1068 netbox/dcim/tables/devicetypes.py:97 +#: netbox/dcim/tables/modules.py:29 netbox/dcim/tables/modules.py:73 +#: netbox/dcim/tables/power.py:39 netbox/dcim/tables/power.py:96 +#: netbox/dcim/tables/racks.py:84 netbox/dcim/tables/racks.py:144 +#: netbox/dcim/tables/racks.py:224 netbox/dcim/tables/sites.py:107 +#: netbox/extras/tables/tables.py:582 netbox/ipam/tables/asn.py:69 +#: netbox/ipam/tables/fhrp.py:34 netbox/ipam/tables/ip.py:82 +#: netbox/ipam/tables/ip.py:226 netbox/ipam/tables/ip.py:281 +#: netbox/ipam/tables/ip.py:349 netbox/ipam/tables/services.py:24 +#: netbox/ipam/tables/services.py:54 netbox/ipam/tables/vlans.py:121 +#: netbox/ipam/tables/vrfs.py:47 netbox/ipam/tables/vrfs.py:72 +#: netbox/templates/dcim/htmx/cable_edit.html:89 #: netbox/templates/generic/bulk_edit.html:86 #: netbox/templates/inc/panels/comments.html:5 #: netbox/tenancy/tables/contacts.py:68 netbox/tenancy/tables/tenants.py:46 #: netbox/utilities/forms/fields/fields.py:29 -#: netbox/virtualization/tables/clusters.py:91 -#: netbox/virtualization/tables/virtualmachines.py:82 +#: netbox/virtualization/tables/clusters.py:95 +#: netbox/virtualization/tables/virtualmachines.py:52 #: netbox/vpn/tables/crypto.py:37 netbox/vpn/tables/crypto.py:74 #: netbox/vpn/tables/crypto.py:109 netbox/vpn/tables/crypto.py:140 #: netbox/vpn/tables/crypto.py:173 netbox/vpn/tables/l2vpn.py:37 #: netbox/vpn/tables/tunnels.py:61 netbox/wireless/tables/wirelesslan.py:27 -#: netbox/wireless/tables/wirelesslan.py:58 +#: netbox/wireless/tables/wirelesslan.py:66 msgid "Comments" msgstr "Kommentare" -#: netbox/circuits/tables/circuits.py:86 +#: netbox/circuits/tables/circuits.py:90 #: netbox/templates/tenancy/contact.html:84 #: netbox/tenancy/tables/contacts.py:73 msgid "Assignments" msgstr "Zuweisungen" +#: netbox/circuits/tables/circuits.py:117 netbox/dcim/forms/connections.py:81 +msgid "Side" +msgstr "Seite" + +#: netbox/circuits/tables/circuits.py:120 +msgid "Termination Type" +msgstr "Typ des Abschlusspunktes" + +#: netbox/circuits/tables/circuits.py:123 +msgid "Termination Point" +msgstr "Abschlusspunkt" + +#: netbox/circuits/tables/circuits.py:134 netbox/dcim/tables/devices.py:161 +#: netbox/templates/dcim/sitegroup.html:26 +msgid "Site Group" +msgstr "Standortgruppe" + +#: netbox/circuits/tables/circuits.py:149 +#: netbox/templates/circuits/providernetwork.html:17 +#: netbox/templates/circuits/virtualcircuit.html:27 +#: netbox/templates/circuits/virtualcircuittermination.html:30 +#: netbox/templates/dcim/interface.html:170 +msgid "Provider Network" +msgstr "Provider Netzwerk" + #: netbox/circuits/tables/providers.py:23 msgid "Accounts" msgstr "Konten" -#: netbox/circuits/tables/providers.py:29 +#: netbox/circuits/tables/providers.py:28 msgid "Account Count" msgstr "Anzahl der Konten" -#: netbox/circuits/tables/providers.py:39 netbox/dcim/tables/sites.py:100 +#: netbox/circuits/tables/providers.py:37 netbox/dcim/tables/sites.py:99 msgid "ASN Count" msgstr "ASN-Anzahl" -#: netbox/circuits/views.py:331 +#: netbox/circuits/tables/virtual_circuits.py:65 +#: netbox/netbox/navigation/menu.py:234 +#: netbox/templates/circuits/virtualcircuit.html:87 +#: netbox/templates/vpn/l2vpn.html:56 netbox/templates/vpn/tunnel.html:72 +#: netbox/vpn/tables/tunnels.py:58 +msgid "Terminations" +msgstr "Abschlusspunkte" + +#: netbox/circuits/tables/virtual_circuits.py:109 +#: netbox/dcim/forms/bulk_edit.py:745 netbox/dcim/forms/bulk_edit.py:1299 +#: netbox/dcim/forms/bulk_edit.py:1708 netbox/dcim/forms/bulk_edit.py:1760 +#: netbox/dcim/forms/bulk_import.py:668 netbox/dcim/forms/bulk_import.py:730 +#: netbox/dcim/forms/bulk_import.py:756 netbox/dcim/forms/bulk_import.py:782 +#: netbox/dcim/forms/bulk_import.py:802 netbox/dcim/forms/bulk_import.py:858 +#: netbox/dcim/forms/bulk_import.py:976 netbox/dcim/forms/bulk_import.py:1024 +#: netbox/dcim/forms/bulk_import.py:1041 netbox/dcim/forms/bulk_import.py:1053 +#: netbox/dcim/forms/bulk_import.py:1101 netbox/dcim/forms/bulk_import.py:1205 +#: netbox/dcim/forms/bulk_import.py:1541 netbox/dcim/forms/connections.py:24 +#: netbox/dcim/forms/filtersets.py:132 netbox/dcim/forms/filtersets.py:922 +#: netbox/dcim/forms/filtersets.py:1052 netbox/dcim/forms/filtersets.py:1243 +#: netbox/dcim/forms/filtersets.py:1268 netbox/dcim/forms/filtersets.py:1292 +#: netbox/dcim/forms/filtersets.py:1312 netbox/dcim/forms/filtersets.py:1339 +#: netbox/dcim/forms/filtersets.py:1449 netbox/dcim/forms/filtersets.py:1474 +#: netbox/dcim/forms/filtersets.py:1498 netbox/dcim/forms/filtersets.py:1516 +#: netbox/dcim/forms/filtersets.py:1533 netbox/dcim/forms/filtersets.py:1630 +#: netbox/dcim/forms/filtersets.py:1654 netbox/dcim/forms/filtersets.py:1678 +#: netbox/dcim/forms/model_forms.py:644 netbox/dcim/forms/model_forms.py:861 +#: netbox/dcim/forms/model_forms.py:1231 netbox/dcim/forms/model_forms.py:1716 +#: netbox/dcim/forms/model_forms.py:1787 +#: netbox/dcim/forms/object_create.py:249 netbox/dcim/tables/connections.py:22 +#: netbox/dcim/tables/connections.py:41 netbox/dcim/tables/connections.py:60 +#: netbox/dcim/tables/devices.py:296 netbox/dcim/tables/devices.py:381 +#: netbox/dcim/tables/devices.py:422 netbox/dcim/tables/devices.py:464 +#: netbox/dcim/tables/devices.py:514 netbox/dcim/tables/devices.py:619 +#: netbox/dcim/tables/devices.py:731 netbox/dcim/tables/devices.py:787 +#: netbox/dcim/tables/devices.py:833 netbox/dcim/tables/devices.py:892 +#: netbox/dcim/tables/devices.py:960 netbox/dcim/tables/devices.py:1089 +#: netbox/dcim/tables/modules.py:53 netbox/extras/forms/filtersets.py:328 +#: netbox/ipam/forms/bulk_import.py:303 netbox/ipam/forms/bulk_import.py:540 +#: netbox/ipam/forms/filtersets.py:603 netbox/ipam/forms/model_forms.py:333 +#: netbox/ipam/forms/model_forms.py:762 netbox/ipam/forms/model_forms.py:795 +#: netbox/ipam/forms/model_forms.py:821 netbox/ipam/tables/vlans.py:156 +#: netbox/templates/circuits/virtualcircuittermination.html:56 +#: netbox/templates/dcim/consoleport.html:20 +#: netbox/templates/dcim/consoleserverport.html:20 +#: netbox/templates/dcim/device.html:15 netbox/templates/dcim/device.html:130 +#: netbox/templates/dcim/device_edit.html:10 +#: netbox/templates/dcim/devicebay.html:20 +#: netbox/templates/dcim/devicebay.html:48 +#: netbox/templates/dcim/frontport.html:20 +#: netbox/templates/dcim/interface.html:30 +#: netbox/templates/dcim/interface.html:218 +#: netbox/templates/dcim/inventoryitem.html:20 +#: netbox/templates/dcim/module.html:57 +#: netbox/templates/dcim/modulebay.html:20 +#: netbox/templates/dcim/poweroutlet.html:20 +#: netbox/templates/dcim/powerport.html:20 +#: netbox/templates/dcim/rearport.html:20 +#: netbox/templates/dcim/virtualchassis.html:65 +#: netbox/templates/dcim/virtualchassis_edit.html:51 +#: netbox/templates/dcim/virtualdevicecontext.html:22 +#: netbox/templates/virtualization/virtualmachine.html:114 +#: netbox/templates/vpn/tunneltermination.html:23 +#: netbox/templates/wireless/inc/wirelesslink_interface.html:6 +#: netbox/virtualization/filtersets.py:133 +#: netbox/virtualization/forms/bulk_edit.py:119 +#: netbox/virtualization/forms/bulk_import.py:105 +#: netbox/virtualization/forms/filtersets.py:133 +#: netbox/virtualization/forms/model_forms.py:192 +#: netbox/virtualization/tables/virtualmachines.py:41 netbox/vpn/choices.py:52 +#: netbox/vpn/forms/bulk_import.py:86 netbox/vpn/forms/bulk_import.py:283 +#: netbox/vpn/forms/filtersets.py:275 netbox/vpn/forms/model_forms.py:91 +#: netbox/vpn/forms/model_forms.py:126 netbox/vpn/forms/model_forms.py:237 +#: netbox/vpn/forms/model_forms.py:456 +#: netbox/wireless/forms/model_forms.py:102 +#: netbox/wireless/forms/model_forms.py:144 +#: netbox/wireless/tables/wirelesslan.py:84 +msgid "Device" +msgstr "Gerät" + +#: netbox/circuits/views.py:356 #, python-brace-format msgid "No terminations have been defined for circuit {circuit}." msgstr "Keine Terminierung wurde für das Transportnetz {circuit}definiert" -#: netbox/circuits/views.py:380 +#: netbox/circuits/views.py:405 #, python-brace-format msgid "Swapped terminations for circuit {circuit}." msgstr "Tausche Terminierungen für Transportnetz {circuit}" -#: netbox/core/api/views.py:39 +#: netbox/core/api/views.py:51 msgid "This user does not have permission to synchronize this data source." msgstr "" "Dieser Benutzer ist nicht berechtigt, diese Datenquelle zu synchronisieren." @@ -1622,12 +2049,13 @@ msgstr "Abgeschlossen" #: netbox/core/choices.py:22 netbox/core/choices.py:59 #: netbox/core/constants.py:20 netbox/core/tables/tasks.py:34 #: netbox/dcim/choices.py:187 netbox/dcim/choices.py:239 -#: netbox/dcim/choices.py:1609 netbox/virtualization/choices.py:47 +#: netbox/dcim/choices.py:1593 netbox/dcim/choices.py:1666 +#: netbox/virtualization/choices.py:48 msgid "Failed" msgstr "Fehlgeschlagen" -#: netbox/core/choices.py:35 netbox/netbox/navigation/menu.py:335 -#: netbox/netbox/navigation/menu.py:339 +#: netbox/core/choices.py:35 netbox/netbox/navigation/menu.py:356 +#: netbox/netbox/navigation/menu.py:360 #: netbox/templates/extras/script/base.html:14 #: netbox/templates/extras/script_list.html:7 #: netbox/templates/extras/script_list.html:12 @@ -1657,12 +2085,36 @@ msgstr "Laufend" msgid "Errored" msgstr "Fehlgeschlagen" -#: netbox/core/choices.py:87 netbox/core/tables/plugins.py:63 +#: netbox/core/choices.py:82 +msgid "Minutely" +msgstr "Minutengenau" + +#: netbox/core/choices.py:83 +msgid "Hourly" +msgstr "Stündlich" + +#: netbox/core/choices.py:84 +msgid "12 hours" +msgstr "12 Stunden" + +#: netbox/core/choices.py:85 +msgid "Daily" +msgstr "täglich" + +#: netbox/core/choices.py:86 +msgid "Weekly" +msgstr "Wöchentlich" + +#: netbox/core/choices.py:87 +msgid "30 days" +msgstr "30 Tage" + +#: netbox/core/choices.py:103 netbox/core/tables/plugins.py:63 #: netbox/templates/generic/object.html:61 msgid "Updated" msgstr "Aktualisiert" -#: netbox/core/choices.py:88 +#: netbox/core/choices.py:104 msgid "Deleted" msgstr "Gelöscht" @@ -1690,7 +2142,7 @@ msgstr "Abgebrochen" #: netbox/core/data_backends.py:32 netbox/core/tables/plugins.py:51 #: netbox/templates/core/plugin.html:88 -#: netbox/templates/dcim/interface.html:216 +#: netbox/templates/dcim/interface.html:273 msgid "Local" msgstr "Lokal" @@ -1764,7 +2216,7 @@ msgstr "Datenquelle (ID)" msgid "Data source (name)" msgstr "Datenquelle (Name)" -#: netbox/core/filtersets.py:145 netbox/dcim/filtersets.py:501 +#: netbox/core/filtersets.py:145 netbox/dcim/filtersets.py:502 #: netbox/extras/filtersets.py:287 netbox/extras/filtersets.py:331 #: netbox/extras/filtersets.py:353 netbox/extras/filtersets.py:413 #: netbox/users/filtersets.py:28 @@ -1776,12 +2228,12 @@ msgid "User name" msgstr "Benutzername" #: netbox/core/forms/bulk_edit.py:25 netbox/core/forms/filtersets.py:43 -#: netbox/core/tables/data.py:26 netbox/dcim/forms/bulk_edit.py:1137 -#: netbox/dcim/forms/bulk_edit.py:1415 netbox/dcim/forms/filtersets.py:1370 -#: netbox/dcim/tables/devices.py:553 netbox/dcim/tables/devicetypes.py:224 +#: netbox/core/tables/data.py:26 netbox/dcim/forms/bulk_edit.py:1140 +#: netbox/dcim/forms/bulk_edit.py:1418 netbox/dcim/forms/filtersets.py:1375 +#: netbox/dcim/tables/devices.py:567 netbox/dcim/tables/devicetypes.py:231 #: netbox/extras/forms/bulk_edit.py:123 netbox/extras/forms/bulk_edit.py:187 -#: netbox/extras/forms/bulk_edit.py:246 netbox/extras/forms/filtersets.py:142 -#: netbox/extras/forms/filtersets.py:229 netbox/extras/forms/filtersets.py:294 +#: netbox/extras/forms/bulk_edit.py:246 netbox/extras/forms/filtersets.py:145 +#: netbox/extras/forms/filtersets.py:235 netbox/extras/forms/filtersets.py:300 #: netbox/extras/tables/tables.py:162 netbox/extras/tables/tables.py:253 #: netbox/extras/tables/tables.py:415 netbox/netbox/preferences.py:22 #: netbox/templates/core/datasource.html:42 @@ -1792,18 +2244,18 @@ msgstr "Benutzername" #: netbox/templates/users/objectpermission.html:25 #: netbox/templates/virtualization/vminterface.html:29 #: netbox/users/forms/bulk_edit.py:89 netbox/users/forms/filtersets.py:70 -#: netbox/users/tables.py:83 netbox/virtualization/forms/bulk_edit.py:217 -#: netbox/virtualization/forms/filtersets.py:215 +#: netbox/users/tables.py:83 netbox/virtualization/forms/bulk_edit.py:199 +#: netbox/virtualization/forms/filtersets.py:220 msgid "Enabled" msgstr "Aktiviert" -#: netbox/core/forms/bulk_edit.py:34 netbox/extras/forms/model_forms.py:285 +#: netbox/core/forms/bulk_edit.py:34 netbox/extras/forms/model_forms.py:299 #: netbox/templates/extras/savedfilter.html:52 #: netbox/vpn/forms/filtersets.py:97 netbox/vpn/forms/filtersets.py:127 #: netbox/vpn/forms/filtersets.py:151 netbox/vpn/forms/filtersets.py:170 -#: netbox/vpn/forms/model_forms.py:301 netbox/vpn/forms/model_forms.py:321 -#: netbox/vpn/forms/model_forms.py:337 netbox/vpn/forms/model_forms.py:357 -#: netbox/vpn/forms/model_forms.py:380 +#: netbox/vpn/forms/model_forms.py:302 netbox/vpn/forms/model_forms.py:323 +#: netbox/vpn/forms/model_forms.py:339 netbox/vpn/forms/model_forms.py:360 +#: netbox/vpn/forms/model_forms.py:383 msgid "Parameters" msgstr "Parameter" @@ -1812,16 +2264,15 @@ msgid "Ignore rules" msgstr "Regeln ignorieren" #: netbox/core/forms/filtersets.py:30 netbox/core/forms/model_forms.py:97 -#: netbox/extras/forms/model_forms.py:248 -#: netbox/extras/forms/model_forms.py:578 -#: netbox/extras/forms/model_forms.py:632 netbox/extras/tables/tables.py:191 +#: netbox/extras/forms/model_forms.py:262 +#: netbox/extras/forms/model_forms.py:592 +#: netbox/extras/forms/model_forms.py:646 netbox/extras/tables/tables.py:191 #: netbox/extras/tables/tables.py:483 netbox/extras/tables/tables.py:518 #: netbox/templates/core/datasource.html:31 -#: netbox/templates/dcim/device/render_config.html:18 #: netbox/templates/extras/configcontext.html:29 #: netbox/templates/extras/configtemplate.html:21 #: netbox/templates/extras/exporttemplate.html:35 -#: netbox/templates/virtualization/virtualmachine/render_config.html:18 +#: netbox/templates/extras/object_render_config.html:19 msgid "Data Source" msgstr "Datenquelle" @@ -1830,17 +2281,17 @@ msgid "File" msgstr "Datei" #: netbox/core/forms/filtersets.py:60 netbox/core/forms/mixins.py:16 -#: netbox/extras/forms/filtersets.py:170 netbox/extras/forms/filtersets.py:328 -#: netbox/extras/forms/filtersets.py:413 +#: netbox/extras/forms/filtersets.py:174 netbox/extras/forms/filtersets.py:335 +#: netbox/extras/forms/filtersets.py:421 msgid "Data source" msgstr "Datenquelle" -#: netbox/core/forms/filtersets.py:70 netbox/extras/forms/filtersets.py:440 +#: netbox/core/forms/filtersets.py:71 netbox/extras/forms/filtersets.py:448 msgid "Creation" msgstr "Erstellung" -#: netbox/core/forms/filtersets.py:74 netbox/core/forms/filtersets.py:160 -#: netbox/extras/forms/filtersets.py:461 netbox/extras/tables/tables.py:220 +#: netbox/core/forms/filtersets.py:75 netbox/core/forms/filtersets.py:161 +#: netbox/extras/forms/filtersets.py:469 netbox/extras/tables/tables.py:220 #: netbox/extras/tables/tables.py:294 netbox/extras/tables/tables.py:326 #: netbox/extras/tables/tables.py:571 netbox/templates/core/job.html:38 #: netbox/templates/core/objectchange.html:52 @@ -1848,42 +2299,42 @@ msgstr "Erstellung" msgid "Object Type" msgstr "Objekttyp" -#: netbox/core/forms/filtersets.py:84 +#: netbox/core/forms/filtersets.py:85 msgid "Created after" msgstr "Erstellt nach" -#: netbox/core/forms/filtersets.py:89 +#: netbox/core/forms/filtersets.py:90 msgid "Created before" msgstr "Erstellt vor" -#: netbox/core/forms/filtersets.py:94 +#: netbox/core/forms/filtersets.py:95 msgid "Scheduled after" msgstr "Geplant nach" -#: netbox/core/forms/filtersets.py:99 +#: netbox/core/forms/filtersets.py:100 msgid "Scheduled before" msgstr "Geplant vor" -#: netbox/core/forms/filtersets.py:104 +#: netbox/core/forms/filtersets.py:105 msgid "Started after" msgstr "Begonnen nach" -#: netbox/core/forms/filtersets.py:109 +#: netbox/core/forms/filtersets.py:110 msgid "Started before" msgstr "Begonnen vor" -#: netbox/core/forms/filtersets.py:114 +#: netbox/core/forms/filtersets.py:115 msgid "Completed after" msgstr "Abgeschlossen nach" -#: netbox/core/forms/filtersets.py:119 +#: netbox/core/forms/filtersets.py:120 msgid "Completed before" msgstr "Abgeschlossen vor" -#: netbox/core/forms/filtersets.py:126 netbox/core/forms/filtersets.py:155 -#: netbox/dcim/forms/bulk_edit.py:462 netbox/dcim/forms/filtersets.py:418 -#: netbox/dcim/forms/filtersets.py:462 netbox/dcim/forms/model_forms.py:316 -#: netbox/extras/forms/filtersets.py:456 netbox/extras/forms/filtersets.py:475 +#: netbox/core/forms/filtersets.py:127 netbox/core/forms/filtersets.py:156 +#: netbox/dcim/forms/bulk_edit.py:465 netbox/dcim/forms/filtersets.py:419 +#: netbox/dcim/forms/filtersets.py:463 netbox/dcim/forms/model_forms.py:324 +#: netbox/extras/forms/filtersets.py:464 netbox/extras/forms/filtersets.py:484 #: netbox/extras/tables/tables.py:302 netbox/extras/tables/tables.py:342 #: netbox/templates/core/objectchange.html:36 #: netbox/templates/dcim/rackreservation.html:58 @@ -1897,22 +2348,22 @@ msgstr "Abgeschlossen vor" msgid "User" msgstr "Nutzer" -#: netbox/core/forms/filtersets.py:134 netbox/core/tables/change_logging.py:15 +#: netbox/core/forms/filtersets.py:135 netbox/core/tables/change_logging.py:15 #: netbox/extras/tables/tables.py:609 netbox/extras/tables/tables.py:646 #: netbox/templates/core/objectchange.html:32 msgid "Time" msgstr "Zeit" -#: netbox/core/forms/filtersets.py:139 netbox/extras/forms/filtersets.py:445 +#: netbox/core/forms/filtersets.py:140 netbox/extras/forms/filtersets.py:453 msgid "After" msgstr "Nach" -#: netbox/core/forms/filtersets.py:144 netbox/extras/forms/filtersets.py:450 +#: netbox/core/forms/filtersets.py:145 netbox/extras/forms/filtersets.py:458 msgid "Before" msgstr "Vorher" -#: netbox/core/forms/filtersets.py:148 netbox/core/tables/change_logging.py:29 -#: netbox/extras/forms/model_forms.py:396 +#: netbox/core/forms/filtersets.py:149 netbox/core/tables/change_logging.py:29 +#: netbox/extras/forms/model_forms.py:410 #: netbox/templates/core/objectchange.html:46 #: netbox/templates/extras/eventrule.html:71 msgid "Action" @@ -1949,22 +2400,22 @@ msgstr "" msgid "Rack Elevations" msgstr "Rackübersichten" -#: netbox/core/forms/model_forms.py:157 netbox/dcim/choices.py:1520 -#: netbox/dcim/forms/bulk_edit.py:984 netbox/dcim/forms/bulk_edit.py:1372 -#: netbox/dcim/forms/bulk_edit.py:1390 netbox/dcim/tables/racks.py:158 -#: netbox/netbox/navigation/menu.py:291 netbox/netbox/navigation/menu.py:295 +#: netbox/core/forms/model_forms.py:157 netbox/dcim/choices.py:1522 +#: netbox/dcim/forms/bulk_edit.py:987 netbox/dcim/forms/bulk_edit.py:1375 +#: netbox/dcim/forms/bulk_edit.py:1393 netbox/dcim/tables/racks.py:157 +#: netbox/netbox/navigation/menu.py:312 netbox/netbox/navigation/menu.py:316 msgid "Power" msgstr "Stromversorgung" -#: netbox/core/forms/model_forms.py:159 netbox/netbox/navigation/menu.py:154 +#: netbox/core/forms/model_forms.py:159 netbox/netbox/navigation/menu.py:160 #: netbox/templates/core/inc/config_data.html:37 msgid "IPAM" msgstr "IPAM" -#: netbox/core/forms/model_forms.py:160 netbox/netbox/navigation/menu.py:230 +#: netbox/core/forms/model_forms.py:160 netbox/netbox/navigation/menu.py:238 #: netbox/templates/core/inc/config_data.html:50 #: netbox/vpn/forms/bulk_edit.py:77 netbox/vpn/forms/filtersets.py:43 -#: netbox/vpn/forms/model_forms.py:61 netbox/vpn/forms/model_forms.py:146 +#: netbox/vpn/forms/model_forms.py:62 netbox/vpn/forms/model_forms.py:147 msgid "Security" msgstr "Sicherheit" @@ -1979,7 +2430,7 @@ msgid "Pagination" msgstr "Seitenumbruch" #: netbox/core/forms/model_forms.py:163 netbox/extras/forms/bulk_edit.py:92 -#: netbox/extras/forms/filtersets.py:47 netbox/extras/forms/model_forms.py:116 +#: netbox/extras/forms/filtersets.py:48 netbox/extras/forms/model_forms.py:116 #: netbox/extras/forms/model_forms.py:129 #: netbox/templates/core/inc/config_data.html:93 msgid "Validation" @@ -1990,7 +2441,7 @@ msgstr "Validierung" msgid "User Preferences" msgstr "Benutzereinstellungen" -#: netbox/core/forms/model_forms.py:167 netbox/dcim/forms/filtersets.py:732 +#: netbox/core/forms/model_forms.py:167 netbox/dcim/forms/filtersets.py:733 #: netbox/templates/core/inc/config_data.html:127 #: netbox/users/forms/model_forms.py:64 msgid "Miscellaneous" @@ -2026,7 +2477,7 @@ msgstr "Benutzername" msgid "request ID" msgstr "Anfrage-ID" -#: netbox/core/models/change_logging.py:52 netbox/extras/models/staging.py:69 +#: netbox/core/models/change_logging.py:52 netbox/extras/models/staging.py:77 msgid "action" msgstr "Aktion" @@ -2053,9 +2504,9 @@ msgstr "" "Die Änderungsprotokollierung wird für diesen Objekttyp nicht unterstützt " "({type})." -#: netbox/core/models/config.py:18 netbox/core/models/data.py:266 +#: netbox/core/models/config.py:18 netbox/core/models/data.py:263 #: netbox/core/models/files.py:27 netbox/core/models/jobs.py:50 -#: netbox/extras/models/models.py:730 netbox/extras/models/notifications.py:39 +#: netbox/extras/models/models.py:733 netbox/extras/models/notifications.py:39 #: netbox/extras/models/notifications.py:186 #: netbox/netbox/models/features.py:53 netbox/users/models/tokens.py:32 msgid "created" @@ -2090,24 +2541,24 @@ msgstr "Aktuelle Konfiguration" msgid "Config revision #{id}" msgstr "Konfigurationsrevision #{id}" -#: netbox/core/models/data.py:44 netbox/dcim/models/cables.py:43 -#: netbox/dcim/models/device_component_templates.py:203 -#: netbox/dcim/models/device_component_templates.py:237 -#: netbox/dcim/models/device_component_templates.py:272 -#: netbox/dcim/models/device_component_templates.py:334 -#: netbox/dcim/models/device_component_templates.py:413 -#: netbox/dcim/models/device_component_templates.py:512 -#: netbox/dcim/models/device_component_templates.py:612 -#: netbox/dcim/models/device_components.py:283 -#: netbox/dcim/models/device_components.py:312 -#: netbox/dcim/models/device_components.py:345 -#: netbox/dcim/models/device_components.py:463 -#: netbox/dcim/models/device_components.py:605 -#: netbox/dcim/models/device_components.py:970 -#: netbox/dcim/models/device_components.py:1044 -#: netbox/dcim/models/power.py:102 netbox/extras/models/customfields.py:78 +#: netbox/core/models/data.py:44 netbox/dcim/models/cables.py:44 +#: netbox/dcim/models/device_component_templates.py:199 +#: netbox/dcim/models/device_component_templates.py:234 +#: netbox/dcim/models/device_component_templates.py:270 +#: netbox/dcim/models/device_component_templates.py:335 +#: netbox/dcim/models/device_component_templates.py:420 +#: netbox/dcim/models/device_component_templates.py:526 +#: netbox/dcim/models/device_component_templates.py:626 +#: netbox/dcim/models/device_components.py:279 +#: netbox/dcim/models/device_components.py:306 +#: netbox/dcim/models/device_components.py:337 +#: netbox/dcim/models/device_components.py:453 +#: netbox/dcim/models/device_components.py:653 +#: netbox/dcim/models/device_components.py:1021 +#: netbox/dcim/models/device_components.py:1092 +#: netbox/dcim/models/power.py:100 netbox/extras/models/customfields.py:78 #: netbox/extras/models/search.py:41 -#: netbox/virtualization/models/clusters.py:61 netbox/vpn/models/l2vpn.py:32 +#: netbox/virtualization/models/clusters.py:57 netbox/vpn/models/l2vpn.py:32 msgid "type" msgstr "Typ" @@ -2119,8 +2570,8 @@ msgid "URL" msgstr "URL" #: netbox/core/models/data.py:59 -#: netbox/dcim/models/device_component_templates.py:418 -#: netbox/dcim/models/device_components.py:512 +#: netbox/dcim/models/device_component_templates.py:425 +#: netbox/dcim/models/device_components.py:505 #: netbox/extras/models/models.py:70 netbox/extras/models/models.py:301 #: netbox/extras/models/models.py:526 netbox/users/models/permissions.py:29 msgid "enabled" @@ -2152,16 +2603,16 @@ msgstr "Datenquelle" msgid "data sources" msgstr "Datenquellen" -#: netbox/core/models/data.py:122 +#: netbox/core/models/data.py:119 #, python-brace-format msgid "Unknown backend type: {type}" msgstr "Unbekannter Backendtyp: {type}" -#: netbox/core/models/data.py:164 +#: netbox/core/models/data.py:161 msgid "Cannot initiate sync; syncing already in progress." msgstr "Synchronisierung kann nicht initiiert werden: Läuft bereits." -#: netbox/core/models/data.py:177 +#: netbox/core/models/data.py:174 msgid "" "There was an error initializing the backend. A dependency needs to be " "installed: " @@ -2169,48 +2620,48 @@ msgstr "" "Beim Initialisieren des Backends ist ein Fehler aufgetreten. Eine " "Abhängigkeit muss installiert werden: " -#: netbox/core/models/data.py:270 netbox/core/models/files.py:31 +#: netbox/core/models/data.py:267 netbox/core/models/files.py:31 #: netbox/netbox/models/features.py:59 msgid "last updated" msgstr "zuletzt aktualisiert" -#: netbox/core/models/data.py:280 netbox/dcim/models/cables.py:444 +#: netbox/core/models/data.py:277 netbox/dcim/models/cables.py:446 msgid "path" msgstr "Pfad" -#: netbox/core/models/data.py:283 +#: netbox/core/models/data.py:280 msgid "File path relative to the data source's root" msgstr "Dateipfad relativ zum Stammverzeichnis des Daten Verzeichnisses" -#: netbox/core/models/data.py:287 netbox/ipam/models/ip.py:503 +#: netbox/core/models/data.py:284 netbox/ipam/models/ip.py:489 msgid "size" msgstr "Größe" -#: netbox/core/models/data.py:290 +#: netbox/core/models/data.py:287 msgid "hash" msgstr "Prüfsumme" -#: netbox/core/models/data.py:294 +#: netbox/core/models/data.py:291 msgid "Length must be 64 hexadecimal characters." msgstr "Die Länge muss 64 Hexadezimalzeichen betragen." -#: netbox/core/models/data.py:296 +#: netbox/core/models/data.py:293 msgid "SHA256 hash of the file data" msgstr "SHA256-Hash des Dateiinhalts" -#: netbox/core/models/data.py:313 +#: netbox/core/models/data.py:310 msgid "data file" msgstr "Datendatei" -#: netbox/core/models/data.py:314 +#: netbox/core/models/data.py:311 msgid "data files" msgstr "Datendateien" -#: netbox/core/models/data.py:401 +#: netbox/core/models/data.py:398 msgid "auto sync record" msgstr "Auto-Sync-Aufnahme" -#: netbox/core/models/data.py:402 +#: netbox/core/models/data.py:399 msgid "auto sync records" msgstr "Auto-Sync-Aufnahmen" @@ -2234,6 +2685,11 @@ msgstr "verwaltete Datei" msgid "managed files" msgstr "verwaltete Dateien" +#: netbox/core/models/files.py:100 +#, python-brace-format +msgid "A {model} with this file path already exists ({path})." +msgstr "Ein {model} mit diesem Dateipfad existiert bereits ({path})." + #: netbox/core/models/jobs.py:54 msgid "scheduled" msgstr "geplant" @@ -2255,7 +2711,7 @@ msgid "completed" msgstr "abgeschlossen" #: netbox/core/models/jobs.py:91 netbox/extras/models/models.py:101 -#: netbox/extras/models/staging.py:87 +#: netbox/extras/models/staging.py:95 msgid "data" msgstr "Daten" @@ -2287,7 +2743,7 @@ msgstr "" "Ungültiger Status für die Beendigung des Jobs. Es stehen folgende Optionen " "zur Auswahl: {choices}" -#: netbox/core/models/jobs.py:221 +#: netbox/core/models/jobs.py:231 msgid "" "enqueue() cannot be called with values for both schedule_at and immediate." msgstr "" @@ -2310,7 +2766,7 @@ msgstr "Vollständiger Name" #: netbox/extras/tables/tables.py:297 netbox/extras/tables/tables.py:329 #: netbox/extras/tables/tables.py:409 netbox/extras/tables/tables.py:470 #: netbox/extras/tables/tables.py:576 netbox/extras/tables/tables.py:616 -#: netbox/extras/tables/tables.py:653 netbox/netbox/tables/tables.py:244 +#: netbox/extras/tables/tables.py:653 netbox/netbox/tables/tables.py:247 #: netbox/templates/core/objectchange.html:58 #: netbox/templates/extras/eventrule.html:78 #: netbox/templates/extras/journalentry.html:18 @@ -2338,11 +2794,11 @@ msgid "Last updated" msgstr "Letzte Aktualisierung" #: netbox/core/tables/jobs.py:10 netbox/core/tables/tasks.py:76 -#: netbox/dcim/tables/devicetypes.py:164 netbox/extras/tables/tables.py:216 -#: netbox/extras/tables/tables.py:460 netbox/netbox/tables/tables.py:189 +#: netbox/dcim/tables/devicetypes.py:169 netbox/extras/tables/tables.py:216 +#: netbox/extras/tables/tables.py:460 netbox/netbox/tables/tables.py:192 #: netbox/templates/dcim/virtualchassis_edit.html:52 #: netbox/utilities/forms/forms.py:73 -#: netbox/wireless/tables/wirelesslink.py:17 +#: netbox/wireless/tables/wirelesslink.py:16 msgid "ID" msgstr "ID" @@ -2408,7 +2864,7 @@ msgstr "Arbeiter" msgid "Host" msgstr "Host" -#: netbox/core/tables/tasks.py:50 netbox/ipam/forms/filtersets.py:535 +#: netbox/core/tables/tasks.py:50 netbox/ipam/forms/filtersets.py:587 msgid "Port" msgstr "Port" @@ -2456,71 +2912,84 @@ msgstr "PID" msgid "No workers found" msgstr "Kein Job gefunden" -#: netbox/core/views.py:90 -#, python-brace-format -msgid "Queued job #{id} to sync {datasource}" -msgstr "Warteschlangen Job {id}beim Synchronisieren {datasource}" - -#: netbox/core/views.py:319 -#, python-brace-format -msgid "Restored configuration revision #{id}" -msgstr "Wiederhergestellte Konfigurationsrevision # {id}" - -#: netbox/core/views.py:412 netbox/core/views.py:455 netbox/core/views.py:531 +#: netbox/core/utils.py:84 netbox/core/utils.py:150 netbox/core/views.py:396 #, python-brace-format msgid "Job {job_id} not found" msgstr "Job{job_id} nicht gefunden" -#: netbox/core/views.py:463 -#, python-brace-format -msgid "Job {id} has been deleted." -msgstr "Job {id}wurde gelöscht" - -#: netbox/core/views.py:465 -#, python-brace-format -msgid "Error deleting job {id}: {error}" -msgstr "Fehler beim Job löschen {id}: {error}" - -#: netbox/core/views.py:478 netbox/core/views.py:496 +#: netbox/core/utils.py:102 netbox/core/utils.py:118 #, python-brace-format msgid "Job {id} not found." msgstr "Job {id}nicht gefunden" -#: netbox/core/views.py:484 +#: netbox/core/views.py:88 +#, python-brace-format +msgid "Queued job #{id} to sync {datasource}" +msgstr "Warteschlangen Job {id}beim Synchronisieren {datasource}" + +#: netbox/core/views.py:332 +#, python-brace-format +msgid "Restored configuration revision #{id}" +msgstr "Wiederhergestellte Konfigurationsrevision # {id}" + +#: netbox/core/views.py:435 +#, python-brace-format +msgid "Job {id} has been deleted." +msgstr "Job {id}wurde gelöscht" + +#: netbox/core/views.py:437 +#, python-brace-format +msgid "Error deleting job {id}: {error}" +msgstr "Fehler beim Job löschen {id}: {error}" + +#: netbox/core/views.py:446 #, python-brace-format msgid "Job {id} has been re-enqueued." msgstr "Job {id}erneut in Warteschlange eingereiht" -#: netbox/core/views.py:519 +#: netbox/core/views.py:455 #, python-brace-format msgid "Job {id} has been enqueued." msgstr "Job {id}in Warteschlange eingereiht" -#: netbox/core/views.py:538 +#: netbox/core/views.py:464 #, python-brace-format msgid "Job {id} has been stopped." msgstr "Job {id}wurde gestoppt" -#: netbox/core/views.py:540 +#: netbox/core/views.py:466 #, python-brace-format msgid "Failed to stop job {id}" msgstr "Fehler beim Stoppen des Job {id}" -#: netbox/core/views.py:674 +#: netbox/core/views.py:601 msgid "Plugins catalog could not be loaded" msgstr "Der Plugin-Katalog konnte nicht geladen werden" -#: netbox/core/views.py:708 +#: netbox/core/views.py:635 #, python-brace-format msgid "Plugin {name} not found" msgstr "Plugin {name} nicht gefunden" -#: netbox/dcim/api/serializers_/devices.py:49 -#: netbox/dcim/api/serializers_/devicetypes.py:25 +#: netbox/dcim/api/serializers_/device_components.py:262 +msgid "Interface mode does not support q-in-q service vlan" +msgstr "Der Schnittstellenmodus unterstützt kein Q-in-Q-Service-VLAN" + +#: netbox/dcim/api/serializers_/device_components.py:269 +msgid "Interface mode does not support untagged vlan" +msgstr "Der Schnittstellenmodus unterstützt kein ungetaggtes VLAN" + +#: netbox/dcim/api/serializers_/device_components.py:274 +#: netbox/dcim/api/serializers_/device_components.py:279 +msgid "Interface mode does not support tagged vlans" +msgstr "Der Schnittstellenmodus unterstützt keine getaggten VLANs" + +#: netbox/dcim/api/serializers_/devices.py:53 +#: netbox/dcim/api/serializers_/devicetypes.py:26 msgid "Position (U)" msgstr "Position (HE)" -#: netbox/dcim/api/serializers_/racks.py:112 +#: netbox/dcim/api/serializers_/racks.py:113 #: netbox/templates/dcim/rack.html:28 msgid "Facility ID" msgstr "Einrichtungs-ID" @@ -2530,8 +2999,9 @@ msgid "Staging" msgstr "Bereitstellung" #: netbox/dcim/choices.py:23 netbox/dcim/choices.py:189 -#: netbox/dcim/choices.py:240 netbox/dcim/choices.py:1533 -#: netbox/virtualization/choices.py:23 netbox/virtualization/choices.py:48 +#: netbox/dcim/choices.py:240 netbox/dcim/choices.py:1535 +#: netbox/dcim/choices.py:1667 netbox/virtualization/choices.py:23 +#: netbox/virtualization/choices.py:49 msgid "Decommissioning" msgstr "Außerbetriebnahme" @@ -2594,7 +3064,7 @@ msgstr "Veraltet" msgid "Millimeters" msgstr "Millimeter" -#: netbox/dcim/choices.py:115 netbox/dcim/choices.py:1555 +#: netbox/dcim/choices.py:115 netbox/dcim/choices.py:1557 msgid "Inches" msgstr "Zoll" @@ -2608,21 +3078,21 @@ msgstr "Front- zu Rückseite" msgid "Rear to front" msgstr "Rück- zu Frontseite" -#: netbox/dcim/choices.py:151 netbox/dcim/forms/bulk_edit.py:69 -#: netbox/dcim/forms/bulk_edit.py:88 netbox/dcim/forms/bulk_edit.py:174 -#: netbox/dcim/forms/bulk_edit.py:1420 netbox/dcim/forms/bulk_import.py:60 -#: netbox/dcim/forms/bulk_import.py:74 netbox/dcim/forms/bulk_import.py:137 -#: netbox/dcim/forms/bulk_import.py:588 netbox/dcim/forms/bulk_import.py:855 -#: netbox/dcim/forms/bulk_import.py:1110 netbox/dcim/forms/filtersets.py:234 -#: netbox/dcim/forms/model_forms.py:74 netbox/dcim/forms/model_forms.py:93 -#: netbox/dcim/forms/model_forms.py:170 netbox/dcim/forms/model_forms.py:1069 -#: netbox/dcim/forms/model_forms.py:1509 -#: netbox/dcim/forms/object_import.py:176 netbox/dcim/tables/devices.py:656 -#: netbox/dcim/tables/devices.py:869 netbox/dcim/tables/devices.py:954 -#: netbox/extras/tables/tables.py:223 netbox/ipam/tables/fhrp.py:59 -#: netbox/ipam/tables/ip.py:378 netbox/ipam/tables/services.py:44 -#: netbox/templates/dcim/interface.html:102 -#: netbox/templates/dcim/interface.html:309 +#: netbox/dcim/choices.py:151 netbox/dcim/forms/bulk_edit.py:72 +#: netbox/dcim/forms/bulk_edit.py:91 netbox/dcim/forms/bulk_edit.py:177 +#: netbox/dcim/forms/bulk_edit.py:1423 netbox/dcim/forms/bulk_import.py:62 +#: netbox/dcim/forms/bulk_import.py:76 netbox/dcim/forms/bulk_import.py:139 +#: netbox/dcim/forms/bulk_import.py:593 netbox/dcim/forms/bulk_import.py:863 +#: netbox/dcim/forms/bulk_import.py:1118 netbox/dcim/forms/filtersets.py:235 +#: netbox/dcim/forms/model_forms.py:76 netbox/dcim/forms/model_forms.py:95 +#: netbox/dcim/forms/model_forms.py:174 netbox/dcim/forms/model_forms.py:1082 +#: netbox/dcim/forms/model_forms.py:1551 +#: netbox/dcim/forms/object_import.py:177 netbox/dcim/tables/devices.py:690 +#: netbox/dcim/tables/devices.py:900 netbox/dcim/tables/devices.py:987 +#: netbox/dcim/tables/devices.py:1147 netbox/extras/tables/tables.py:223 +#: netbox/ipam/tables/fhrp.py:59 netbox/ipam/tables/ip.py:330 +#: netbox/ipam/tables/services.py:44 netbox/templates/dcim/interface.html:108 +#: netbox/templates/dcim/interface.html:366 #: netbox/templates/dcim/location.html:41 netbox/templates/dcim/region.html:37 #: netbox/templates/dcim/sitegroup.html:37 #: netbox/templates/ipam/service.html:28 @@ -2635,12 +3105,12 @@ msgstr "Rück- zu Frontseite" #: netbox/tenancy/forms/bulk_import.py:58 #: netbox/tenancy/forms/model_forms.py:25 #: netbox/tenancy/forms/model_forms.py:68 -#: netbox/virtualization/forms/bulk_edit.py:207 -#: netbox/virtualization/forms/bulk_import.py:151 -#: netbox/virtualization/tables/virtualmachines.py:162 -#: netbox/wireless/forms/bulk_edit.py:24 -#: netbox/wireless/forms/bulk_import.py:21 -#: netbox/wireless/forms/model_forms.py:21 +#: netbox/virtualization/forms/bulk_edit.py:189 +#: netbox/virtualization/forms/bulk_import.py:157 +#: netbox/virtualization/tables/virtualmachines.py:132 +#: netbox/wireless/forms/bulk_edit.py:26 +#: netbox/wireless/forms/bulk_import.py:23 +#: netbox/wireless/forms/model_forms.py:22 msgid "Parent" msgstr "Übergeordnet" @@ -2663,7 +3133,7 @@ msgid "Rear" msgstr "Rückseite" #: netbox/dcim/choices.py:186 netbox/dcim/choices.py:238 -#: netbox/virtualization/choices.py:46 +#: netbox/dcim/choices.py:1665 netbox/virtualization/choices.py:47 msgid "Staged" msgstr "Vorbereitet" @@ -2696,7 +3166,7 @@ msgid "Top to bottom" msgstr "Von oben nach unten" #: netbox/dcim/choices.py:215 netbox/dcim/choices.py:259 -#: netbox/dcim/choices.py:1305 +#: netbox/dcim/choices.py:1307 msgid "Passive" msgstr "Passiv" @@ -2726,8 +3196,8 @@ msgstr "Propritär" #: netbox/dcim/choices.py:581 netbox/dcim/choices.py:824 #: netbox/dcim/choices.py:1221 netbox/dcim/choices.py:1223 -#: netbox/dcim/choices.py:1449 netbox/dcim/choices.py:1451 -#: netbox/netbox/navigation/menu.py:200 +#: netbox/dcim/choices.py:1451 netbox/dcim/choices.py:1453 +#: netbox/netbox/navigation/menu.py:208 msgid "Other" msgstr "Andere" @@ -2744,10 +3214,10 @@ msgid "Virtual" msgstr "Virtuell" #: netbox/dcim/choices.py:856 netbox/dcim/choices.py:1099 -#: netbox/dcim/forms/bulk_edit.py:1563 netbox/dcim/forms/filtersets.py:1330 -#: netbox/dcim/forms/model_forms.py:995 netbox/dcim/forms/model_forms.py:1404 -#: netbox/netbox/navigation/menu.py:140 netbox/netbox/navigation/menu.py:144 -#: netbox/templates/dcim/interface.html:210 +#: netbox/dcim/forms/bulk_edit.py:1578 netbox/dcim/forms/filtersets.py:1335 +#: netbox/dcim/forms/model_forms.py:1007 netbox/dcim/forms/model_forms.py:1445 +#: netbox/netbox/navigation/menu.py:146 netbox/netbox/navigation/menu.py:150 +#: netbox/templates/dcim/interface.html:267 msgid "Wireless" msgstr "Funknetze" @@ -2755,13 +3225,13 @@ msgstr "Funknetze" msgid "Virtual interfaces" msgstr "Virtuelle Schnittstellen" -#: netbox/dcim/choices.py:1025 netbox/dcim/forms/bulk_edit.py:1428 -#: netbox/dcim/forms/bulk_import.py:862 netbox/dcim/forms/model_forms.py:981 -#: netbox/dcim/tables/devices.py:660 netbox/templates/dcim/interface.html:106 +#: netbox/dcim/choices.py:1025 netbox/dcim/forms/bulk_edit.py:1431 +#: netbox/dcim/forms/bulk_import.py:870 netbox/dcim/forms/model_forms.py:993 +#: netbox/dcim/tables/devices.py:694 netbox/templates/dcim/interface.html:112 #: netbox/templates/virtualization/vminterface.html:43 -#: netbox/virtualization/forms/bulk_edit.py:212 -#: netbox/virtualization/forms/bulk_import.py:158 -#: netbox/virtualization/tables/virtualmachines.py:166 +#: netbox/virtualization/forms/bulk_edit.py:194 +#: netbox/virtualization/forms/bulk_import.py:164 +#: netbox/virtualization/tables/virtualmachines.py:136 msgid "Bridge" msgstr "Bridge" @@ -2785,10 +3255,10 @@ msgstr "Ethernet (Backplane)" msgid "Cellular" msgstr "Mobilfunk" -#: netbox/dcim/choices.py:1167 netbox/dcim/forms/filtersets.py:383 -#: netbox/dcim/forms/filtersets.py:809 netbox/dcim/forms/filtersets.py:963 -#: netbox/dcim/forms/filtersets.py:1542 -#: netbox/templates/dcim/inventoryitem.html:52 +#: netbox/dcim/choices.py:1167 netbox/dcim/forms/filtersets.py:384 +#: netbox/dcim/forms/filtersets.py:810 netbox/dcim/forms/filtersets.py:964 +#: netbox/dcim/forms/filtersets.py:1547 +#: netbox/templates/dcim/inventoryitem.html:56 #: netbox/templates/dcim/virtualchassis_edit.html:54 msgid "Serial" msgstr "Seriell" @@ -2814,109 +3284,95 @@ msgstr "Voll" msgid "Auto" msgstr "Automatisch" -#: netbox/dcim/choices.py:1265 +#: netbox/dcim/choices.py:1266 msgid "Access" msgstr "Untagged" -#: netbox/dcim/choices.py:1266 netbox/ipam/tables/vlans.py:172 -#: netbox/ipam/tables/vlans.py:217 +#: netbox/dcim/choices.py:1267 netbox/ipam/tables/vlans.py:148 +#: netbox/ipam/tables/vlans.py:193 #: netbox/templates/dcim/inc/interface_vlans_table.html:7 msgid "Tagged" msgstr "Tagged" -#: netbox/dcim/choices.py:1267 +#: netbox/dcim/choices.py:1268 msgid "Tagged (All)" msgstr "Tagged (Alle)" -#: netbox/dcim/choices.py:1296 +#: netbox/dcim/choices.py:1269 netbox/templates/ipam/vlan_edit.html:22 +msgid "Q-in-Q (802.1ad)" +msgstr "Q in Q (802.1ad)" + +#: netbox/dcim/choices.py:1298 msgid "IEEE Standard" msgstr "IEEE-Standard" -#: netbox/dcim/choices.py:1307 +#: netbox/dcim/choices.py:1309 msgid "Passive 24V (2-pair)" msgstr "Passiv 24 V (2 Paare)" -#: netbox/dcim/choices.py:1308 +#: netbox/dcim/choices.py:1310 msgid "Passive 24V (4-pair)" msgstr "Passiv 24 V (4 Paare)" -#: netbox/dcim/choices.py:1309 +#: netbox/dcim/choices.py:1311 msgid "Passive 48V (2-pair)" msgstr "Passiv 48 V (2 Paare)" -#: netbox/dcim/choices.py:1310 +#: netbox/dcim/choices.py:1312 msgid "Passive 48V (4-pair)" msgstr "Passiv 48 V (4 Paare)" -#: netbox/dcim/choices.py:1380 netbox/dcim/choices.py:1490 +#: netbox/dcim/choices.py:1382 netbox/dcim/choices.py:1492 msgid "Copper" msgstr "Kupfer" -#: netbox/dcim/choices.py:1403 +#: netbox/dcim/choices.py:1405 msgid "Fiber Optic" msgstr "Glasfaser" -#: netbox/dcim/choices.py:1436 netbox/dcim/choices.py:1519 +#: netbox/dcim/choices.py:1438 netbox/dcim/choices.py:1521 msgid "USB" msgstr "USB" -#: netbox/dcim/choices.py:1506 +#: netbox/dcim/choices.py:1508 msgid "Fiber" msgstr "Faser" -#: netbox/dcim/choices.py:1531 netbox/dcim/forms/filtersets.py:1227 +#: netbox/dcim/choices.py:1533 netbox/dcim/forms/filtersets.py:1228 msgid "Connected" msgstr "Verbunden" -#: netbox/dcim/choices.py:1550 netbox/wireless/choices.py:497 +#: netbox/dcim/choices.py:1552 netbox/netbox/choices.py:175 msgid "Kilometers" msgstr "Kilometer" -#: netbox/dcim/choices.py:1551 netbox/templates/dcim/cable_trace.html:65 -#: netbox/wireless/choices.py:498 +#: netbox/dcim/choices.py:1553 netbox/netbox/choices.py:176 +#: netbox/templates/dcim/cable_trace.html:65 msgid "Meters" msgstr "Meter" -#: netbox/dcim/choices.py:1552 +#: netbox/dcim/choices.py:1554 msgid "Centimeters" msgstr "Zentimeter" -#: netbox/dcim/choices.py:1553 netbox/wireless/choices.py:499 +#: netbox/dcim/choices.py:1555 netbox/netbox/choices.py:177 msgid "Miles" msgstr "Meilen" -#: netbox/dcim/choices.py:1554 netbox/templates/dcim/cable_trace.html:66 -#: netbox/wireless/choices.py:500 +#: netbox/dcim/choices.py:1556 netbox/netbox/choices.py:178 +#: netbox/templates/dcim/cable_trace.html:66 msgid "Feet" msgstr "Fuß" -#: netbox/dcim/choices.py:1570 netbox/templates/dcim/device.html:327 -#: netbox/templates/dcim/rack.html:107 -msgid "Kilograms" -msgstr "Kilogramm" - -#: netbox/dcim/choices.py:1571 -msgid "Grams" -msgstr "Gramm" - -#: netbox/dcim/choices.py:1572 netbox/templates/dcim/device.html:328 -#: netbox/templates/dcim/rack.html:108 -msgid "Pounds" -msgstr "Pfund" - -#: netbox/dcim/choices.py:1573 -msgid "Ounces" -msgstr "Unzen" - -#: netbox/dcim/choices.py:1620 +#: netbox/dcim/choices.py:1604 msgid "Redundant" msgstr "Redundant" -#: netbox/dcim/choices.py:1641 +#: netbox/dcim/choices.py:1625 msgid "Single phase" msgstr "Einphasig" -#: netbox/dcim/choices.py:1642 +#: netbox/dcim/choices.py:1626 msgid "Three-phase" msgstr "Dreiphasig" @@ -2930,335 +3386,319 @@ msgstr "Ungültiges MAC-Adressformat: {value}" msgid "Invalid WWN format: {value}" msgstr "Ungültiges WWN-Format: {value}" -#: netbox/dcim/filtersets.py:86 +#: netbox/dcim/filtersets.py:87 msgid "Parent region (ID)" msgstr "Übergeordnete Region (ID)" -#: netbox/dcim/filtersets.py:92 +#: netbox/dcim/filtersets.py:93 msgid "Parent region (slug)" msgstr "Übergeordnete Region (URL-Slug)" -#: netbox/dcim/filtersets.py:116 +#: netbox/dcim/filtersets.py:117 msgid "Parent site group (ID)" msgstr "Übergeordnete Standortgruppe (ID)" -#: netbox/dcim/filtersets.py:122 +#: netbox/dcim/filtersets.py:123 msgid "Parent site group (slug)" msgstr "Übergeordnete Standortgruppe (URL-Slug)" -#: netbox/dcim/filtersets.py:164 netbox/extras/filtersets.py:364 -#: netbox/ipam/filtersets.py:843 netbox/ipam/filtersets.py:995 +#: netbox/dcim/filtersets.py:165 netbox/extras/filtersets.py:364 +#: netbox/ipam/filtersets.py:810 netbox/ipam/filtersets.py:962 msgid "Group (ID)" msgstr "Gruppe (ID)" -#: netbox/dcim/filtersets.py:170 +#: netbox/dcim/filtersets.py:171 msgid "Group (slug)" msgstr "Gruppe (URL-Slug)" -#: netbox/dcim/filtersets.py:176 netbox/dcim/filtersets.py:181 +#: netbox/dcim/filtersets.py:177 netbox/dcim/filtersets.py:182 msgid "AS (ID)" msgstr "AS (ID)" -#: netbox/dcim/filtersets.py:246 +#: netbox/dcim/filtersets.py:247 msgid "Parent location (ID)" msgstr "Übergeordnete Lokation (ID)" -#: netbox/dcim/filtersets.py:252 +#: netbox/dcim/filtersets.py:253 msgid "Parent location (slug)" msgstr "Übergeordnete Lokation (URL-Slug)" -#: netbox/dcim/filtersets.py:258 netbox/dcim/filtersets.py:369 -#: netbox/dcim/filtersets.py:490 netbox/dcim/filtersets.py:1057 -#: netbox/dcim/filtersets.py:1404 netbox/dcim/filtersets.py:2182 -msgid "Location (ID)" -msgstr "Lokation (ID)" - -#: netbox/dcim/filtersets.py:265 netbox/dcim/filtersets.py:376 -#: netbox/dcim/filtersets.py:497 netbox/dcim/filtersets.py:1410 -#: netbox/extras/filtersets.py:542 -msgid "Location (slug)" -msgstr "Lokation (URL-Slug)" - -#: netbox/dcim/filtersets.py:296 netbox/dcim/filtersets.py:381 -#: netbox/dcim/filtersets.py:539 netbox/dcim/filtersets.py:678 -#: netbox/dcim/filtersets.py:882 netbox/dcim/filtersets.py:933 -#: netbox/dcim/filtersets.py:973 netbox/dcim/filtersets.py:1306 -#: netbox/dcim/filtersets.py:1840 +#: netbox/dcim/filtersets.py:297 netbox/dcim/filtersets.py:382 +#: netbox/dcim/filtersets.py:540 netbox/dcim/filtersets.py:679 +#: netbox/dcim/filtersets.py:883 netbox/dcim/filtersets.py:934 +#: netbox/dcim/filtersets.py:974 netbox/dcim/filtersets.py:1308 +#: netbox/dcim/filtersets.py:1960 msgid "Manufacturer (ID)" msgstr "Hersteller (ID)" -#: netbox/dcim/filtersets.py:302 netbox/dcim/filtersets.py:387 -#: netbox/dcim/filtersets.py:545 netbox/dcim/filtersets.py:684 -#: netbox/dcim/filtersets.py:888 netbox/dcim/filtersets.py:939 -#: netbox/dcim/filtersets.py:979 netbox/dcim/filtersets.py:1312 -#: netbox/dcim/filtersets.py:1846 +#: netbox/dcim/filtersets.py:303 netbox/dcim/filtersets.py:388 +#: netbox/dcim/filtersets.py:546 netbox/dcim/filtersets.py:685 +#: netbox/dcim/filtersets.py:889 netbox/dcim/filtersets.py:940 +#: netbox/dcim/filtersets.py:980 netbox/dcim/filtersets.py:1314 +#: netbox/dcim/filtersets.py:1966 msgid "Manufacturer (slug)" msgstr "Hersteller (Slug)" -#: netbox/dcim/filtersets.py:393 +#: netbox/dcim/filtersets.py:394 msgid "Rack type (slug)" msgstr "Regaltyp (slug)" -#: netbox/dcim/filtersets.py:397 +#: netbox/dcim/filtersets.py:398 msgid "Rack type (ID)" msgstr "Racktyp (ID)" -#: netbox/dcim/filtersets.py:411 netbox/dcim/filtersets.py:892 -#: netbox/dcim/filtersets.py:994 netbox/dcim/filtersets.py:1850 -#: netbox/ipam/filtersets.py:383 netbox/ipam/filtersets.py:495 -#: netbox/ipam/filtersets.py:1005 netbox/virtualization/filtersets.py:210 +#: netbox/dcim/filtersets.py:412 netbox/dcim/filtersets.py:893 +#: netbox/dcim/filtersets.py:995 netbox/dcim/filtersets.py:1970 +#: netbox/ipam/filtersets.py:350 netbox/ipam/filtersets.py:462 +#: netbox/ipam/filtersets.py:972 netbox/virtualization/filtersets.py:176 msgid "Role (ID)" msgstr "Rolle (ID)" -#: netbox/dcim/filtersets.py:417 netbox/dcim/filtersets.py:898 -#: netbox/dcim/filtersets.py:1000 netbox/dcim/filtersets.py:1856 -#: netbox/extras/filtersets.py:558 netbox/ipam/filtersets.py:389 -#: netbox/ipam/filtersets.py:501 netbox/ipam/filtersets.py:1011 -#: netbox/virtualization/filtersets.py:216 +#: netbox/dcim/filtersets.py:418 netbox/dcim/filtersets.py:899 +#: netbox/dcim/filtersets.py:1001 netbox/dcim/filtersets.py:1976 +#: netbox/extras/filtersets.py:558 netbox/ipam/filtersets.py:356 +#: netbox/ipam/filtersets.py:468 netbox/ipam/filtersets.py:978 +#: netbox/virtualization/filtersets.py:182 msgid "Role (slug)" msgstr "Rolle (URL-Slug)" -#: netbox/dcim/filtersets.py:447 netbox/dcim/filtersets.py:1062 -#: netbox/dcim/filtersets.py:1415 netbox/dcim/filtersets.py:2244 +#: netbox/dcim/filtersets.py:448 netbox/dcim/filtersets.py:1063 +#: netbox/dcim/filtersets.py:1417 netbox/dcim/filtersets.py:2368 msgid "Rack (ID)" msgstr "Rack (ID)" -#: netbox/dcim/filtersets.py:507 netbox/extras/filtersets.py:293 +#: netbox/dcim/filtersets.py:508 netbox/extras/filtersets.py:293 #: netbox/extras/filtersets.py:337 netbox/extras/filtersets.py:359 #: netbox/extras/filtersets.py:419 netbox/users/filtersets.py:113 #: netbox/users/filtersets.py:180 msgid "User (name)" msgstr "Benutzer (Name)" -#: netbox/dcim/filtersets.py:549 +#: netbox/dcim/filtersets.py:550 msgid "Default platform (ID)" msgstr "Standard-Betriebssystem (ID)" -#: netbox/dcim/filtersets.py:555 +#: netbox/dcim/filtersets.py:556 msgid "Default platform (slug)" msgstr "Standard-Betriebssystem (URL-Slug)" -#: netbox/dcim/filtersets.py:558 netbox/dcim/forms/filtersets.py:517 +#: netbox/dcim/filtersets.py:559 netbox/dcim/forms/filtersets.py:518 msgid "Has a front image" msgstr "Hat ein Frontalbild" -#: netbox/dcim/filtersets.py:562 netbox/dcim/forms/filtersets.py:524 +#: netbox/dcim/filtersets.py:563 netbox/dcim/forms/filtersets.py:525 msgid "Has a rear image" msgstr "Hat ein Rückseitenbild" -#: netbox/dcim/filtersets.py:567 netbox/dcim/filtersets.py:688 -#: netbox/dcim/filtersets.py:1131 netbox/dcim/forms/filtersets.py:531 -#: netbox/dcim/forms/filtersets.py:627 netbox/dcim/forms/filtersets.py:848 +#: netbox/dcim/filtersets.py:568 netbox/dcim/filtersets.py:689 +#: netbox/dcim/filtersets.py:1132 netbox/dcim/forms/filtersets.py:532 +#: netbox/dcim/forms/filtersets.py:628 netbox/dcim/forms/filtersets.py:849 msgid "Has console ports" msgstr "Hat Konsolenanschlüsse" -#: netbox/dcim/filtersets.py:571 netbox/dcim/filtersets.py:692 -#: netbox/dcim/filtersets.py:1135 netbox/dcim/forms/filtersets.py:538 -#: netbox/dcim/forms/filtersets.py:634 netbox/dcim/forms/filtersets.py:855 +#: netbox/dcim/filtersets.py:572 netbox/dcim/filtersets.py:693 +#: netbox/dcim/filtersets.py:1136 netbox/dcim/forms/filtersets.py:539 +#: netbox/dcim/forms/filtersets.py:635 netbox/dcim/forms/filtersets.py:856 msgid "Has console server ports" msgstr "Hat Konsolenserveranschlüsse" -#: netbox/dcim/filtersets.py:575 netbox/dcim/filtersets.py:696 -#: netbox/dcim/filtersets.py:1139 netbox/dcim/forms/filtersets.py:545 -#: netbox/dcim/forms/filtersets.py:641 netbox/dcim/forms/filtersets.py:862 +#: netbox/dcim/filtersets.py:576 netbox/dcim/filtersets.py:697 +#: netbox/dcim/filtersets.py:1140 netbox/dcim/forms/filtersets.py:546 +#: netbox/dcim/forms/filtersets.py:642 netbox/dcim/forms/filtersets.py:863 msgid "Has power ports" msgstr "Hat Stromanschlüsse" -#: netbox/dcim/filtersets.py:579 netbox/dcim/filtersets.py:700 -#: netbox/dcim/filtersets.py:1143 netbox/dcim/forms/filtersets.py:552 -#: netbox/dcim/forms/filtersets.py:648 netbox/dcim/forms/filtersets.py:869 +#: netbox/dcim/filtersets.py:580 netbox/dcim/filtersets.py:701 +#: netbox/dcim/filtersets.py:1144 netbox/dcim/forms/filtersets.py:553 +#: netbox/dcim/forms/filtersets.py:649 netbox/dcim/forms/filtersets.py:870 msgid "Has power outlets" msgstr "Hat Steckdosen" -#: netbox/dcim/filtersets.py:583 netbox/dcim/filtersets.py:704 -#: netbox/dcim/filtersets.py:1147 netbox/dcim/forms/filtersets.py:559 -#: netbox/dcim/forms/filtersets.py:655 netbox/dcim/forms/filtersets.py:876 +#: netbox/dcim/filtersets.py:584 netbox/dcim/filtersets.py:705 +#: netbox/dcim/filtersets.py:1148 netbox/dcim/forms/filtersets.py:560 +#: netbox/dcim/forms/filtersets.py:656 netbox/dcim/forms/filtersets.py:877 msgid "Has interfaces" msgstr "Hat Schnittstellen" -#: netbox/dcim/filtersets.py:587 netbox/dcim/filtersets.py:708 -#: netbox/dcim/filtersets.py:1151 netbox/dcim/forms/filtersets.py:566 -#: netbox/dcim/forms/filtersets.py:662 netbox/dcim/forms/filtersets.py:883 +#: netbox/dcim/filtersets.py:588 netbox/dcim/filtersets.py:709 +#: netbox/dcim/filtersets.py:1152 netbox/dcim/forms/filtersets.py:567 +#: netbox/dcim/forms/filtersets.py:663 netbox/dcim/forms/filtersets.py:884 msgid "Has pass-through ports" msgstr "Hat durchgereichte Anschlüsse" -#: netbox/dcim/filtersets.py:591 netbox/dcim/filtersets.py:1155 -#: netbox/dcim/forms/filtersets.py:580 +#: netbox/dcim/filtersets.py:592 netbox/dcim/filtersets.py:1156 +#: netbox/dcim/forms/filtersets.py:581 msgid "Has module bays" msgstr "Hat Moduleinsätze" -#: netbox/dcim/filtersets.py:595 netbox/dcim/filtersets.py:1159 -#: netbox/dcim/forms/filtersets.py:573 +#: netbox/dcim/filtersets.py:596 netbox/dcim/filtersets.py:1160 +#: netbox/dcim/forms/filtersets.py:574 msgid "Has device bays" msgstr "Hat Geräteeinsätze" -#: netbox/dcim/filtersets.py:599 netbox/dcim/forms/filtersets.py:587 +#: netbox/dcim/filtersets.py:600 netbox/dcim/forms/filtersets.py:588 msgid "Has inventory items" msgstr "Hat Inventargegenstände" -#: netbox/dcim/filtersets.py:756 netbox/dcim/filtersets.py:989 -#: netbox/dcim/filtersets.py:1436 +#: netbox/dcim/filtersets.py:757 netbox/dcim/filtersets.py:990 +#: netbox/dcim/filtersets.py:1438 msgid "Device type (ID)" msgstr "Gerätetyp (ID)" -#: netbox/dcim/filtersets.py:772 netbox/dcim/filtersets.py:1317 +#: netbox/dcim/filtersets.py:773 netbox/dcim/filtersets.py:1319 msgid "Module type (ID)" msgstr "Modultyp (ID)" -#: netbox/dcim/filtersets.py:804 netbox/dcim/filtersets.py:1591 +#: netbox/dcim/filtersets.py:805 netbox/dcim/filtersets.py:1593 msgid "Power port (ID)" msgstr "Stromanschluss (ID)" -#: netbox/dcim/filtersets.py:878 netbox/dcim/filtersets.py:1836 +#: netbox/dcim/filtersets.py:879 netbox/dcim/filtersets.py:1956 msgid "Parent inventory item (ID)" msgstr "Übergeordneter Inventarartikel (ID)" -#: netbox/dcim/filtersets.py:921 netbox/dcim/filtersets.py:947 -#: netbox/dcim/filtersets.py:1127 netbox/virtualization/filtersets.py:238 +#: netbox/dcim/filtersets.py:922 netbox/dcim/filtersets.py:948 +#: netbox/dcim/filtersets.py:1128 netbox/virtualization/filtersets.py:204 msgid "Config template (ID)" msgstr "Konfigurationsvorlage (ID)" -#: netbox/dcim/filtersets.py:985 +#: netbox/dcim/filtersets.py:986 msgid "Device type (slug)" msgstr "Gerätetyp (Slug)" -#: netbox/dcim/filtersets.py:1005 +#: netbox/dcim/filtersets.py:1006 msgid "Parent Device (ID)" msgstr "Übergeordnetes Gerät (ID)" -#: netbox/dcim/filtersets.py:1009 netbox/virtualization/filtersets.py:220 +#: netbox/dcim/filtersets.py:1010 netbox/virtualization/filtersets.py:186 msgid "Platform (ID)" msgstr "Betriebssystem (ID)" -#: netbox/dcim/filtersets.py:1015 netbox/extras/filtersets.py:569 -#: netbox/virtualization/filtersets.py:226 +#: netbox/dcim/filtersets.py:1016 netbox/extras/filtersets.py:569 +#: netbox/virtualization/filtersets.py:192 msgid "Platform (slug)" msgstr "Betriebssystem (URL-Slug)" -#: netbox/dcim/filtersets.py:1051 netbox/dcim/filtersets.py:1399 -#: netbox/dcim/filtersets.py:1934 netbox/dcim/filtersets.py:2176 -#: netbox/dcim/filtersets.py:2235 +#: netbox/dcim/filtersets.py:1052 netbox/dcim/filtersets.py:1401 +#: netbox/dcim/filtersets.py:2058 netbox/dcim/filtersets.py:2300 +#: netbox/dcim/filtersets.py:2359 msgid "Site name (slug)" msgstr "Standortname (URL-Slug)" -#: netbox/dcim/filtersets.py:1067 +#: netbox/dcim/filtersets.py:1068 msgid "Parent bay (ID)" msgstr "Übergeordneter Schacht (ID)" -#: netbox/dcim/filtersets.py:1071 +#: netbox/dcim/filtersets.py:1072 msgid "VM cluster (ID)" msgstr "VM-Cluster (ID)" -#: netbox/dcim/filtersets.py:1077 netbox/extras/filtersets.py:591 -#: netbox/virtualization/filtersets.py:136 +#: netbox/dcim/filtersets.py:1078 netbox/extras/filtersets.py:591 +#: netbox/virtualization/filtersets.py:102 msgid "Cluster group (slug)" msgstr "Clustergruppe (URL-Slug)" -#: netbox/dcim/filtersets.py:1082 netbox/virtualization/filtersets.py:130 +#: netbox/dcim/filtersets.py:1083 netbox/virtualization/filtersets.py:96 msgid "Cluster group (ID)" msgstr "Clustergruppe (ID)" -#: netbox/dcim/filtersets.py:1088 +#: netbox/dcim/filtersets.py:1089 msgid "Device model (slug)" msgstr "Gerätemodell (URL-Slug)" -#: netbox/dcim/filtersets.py:1099 netbox/dcim/forms/bulk_edit.py:522 +#: netbox/dcim/filtersets.py:1100 netbox/dcim/forms/bulk_edit.py:525 msgid "Is full depth" msgstr "Hat volle Tiefe" -#: netbox/dcim/filtersets.py:1103 netbox/dcim/forms/common.py:18 -#: netbox/dcim/forms/filtersets.py:818 netbox/dcim/forms/filtersets.py:1385 -#: netbox/dcim/models/device_components.py:518 -#: netbox/virtualization/filtersets.py:230 -#: netbox/virtualization/filtersets.py:301 -#: netbox/virtualization/forms/filtersets.py:172 -#: netbox/virtualization/forms/filtersets.py:223 +#: netbox/dcim/filtersets.py:1104 netbox/dcim/forms/filtersets.py:819 +#: netbox/dcim/forms/filtersets.py:1390 netbox/dcim/forms/filtersets.py:1586 +#: netbox/dcim/forms/filtersets.py:1591 netbox/dcim/forms/model_forms.py:1762 +#: netbox/dcim/models/devices.py:1505 netbox/dcim/models/devices.py:1526 +#: netbox/virtualization/filtersets.py:196 +#: netbox/virtualization/filtersets.py:268 +#: netbox/virtualization/forms/filtersets.py:177 +#: netbox/virtualization/forms/filtersets.py:228 msgid "MAC address" msgstr "MAC-Adresse" -#: netbox/dcim/filtersets.py:1110 netbox/dcim/filtersets.py:1274 -#: netbox/dcim/forms/filtersets.py:827 netbox/dcim/forms/filtersets.py:930 -#: netbox/virtualization/filtersets.py:234 -#: netbox/virtualization/forms/filtersets.py:176 +#: netbox/dcim/filtersets.py:1111 netbox/dcim/filtersets.py:1276 +#: netbox/dcim/forms/filtersets.py:828 netbox/dcim/forms/filtersets.py:931 +#: netbox/virtualization/filtersets.py:200 +#: netbox/virtualization/forms/filtersets.py:181 msgid "Has a primary IP" msgstr "Hat eine primäre IP" -#: netbox/dcim/filtersets.py:1114 +#: netbox/dcim/filtersets.py:1115 msgid "Has an out-of-band IP" msgstr "Hat eine Out-of-Band-IP" -#: netbox/dcim/filtersets.py:1119 +#: netbox/dcim/filtersets.py:1120 msgid "Virtual chassis (ID)" msgstr "Virtuelles Gehäuse (ID)" -#: netbox/dcim/filtersets.py:1123 +#: netbox/dcim/filtersets.py:1124 msgid "Is a virtual chassis member" msgstr "Ist ein virtuelles Gehäuse-Mitglied" -#: netbox/dcim/filtersets.py:1164 +#: netbox/dcim/filtersets.py:1165 msgid "OOB IP (ID)" msgstr "OOB IP (ID)" -#: netbox/dcim/filtersets.py:1168 +#: netbox/dcim/filtersets.py:1169 msgid "Has virtual device context" msgstr "Hat Virtual Device Context" -#: netbox/dcim/filtersets.py:1257 +#: netbox/dcim/filtersets.py:1259 msgid "VDC (ID)" msgstr "VDC (ID)" -#: netbox/dcim/filtersets.py:1262 +#: netbox/dcim/filtersets.py:1264 msgid "Device model" msgstr "Modell des Geräts" -#: netbox/dcim/filtersets.py:1267 netbox/ipam/filtersets.py:634 -#: netbox/vpn/filtersets.py:102 netbox/vpn/filtersets.py:401 -msgid "Interface (ID)" -msgstr "Schnittstelle (ID)" - -#: netbox/dcim/filtersets.py:1323 +#: netbox/dcim/filtersets.py:1325 msgid "Module type (model)" msgstr "Modultyp (Modell)" -#: netbox/dcim/filtersets.py:1329 +#: netbox/dcim/filtersets.py:1331 msgid "Module bay (ID)" msgstr "Modulschacht (ID)" -#: netbox/dcim/filtersets.py:1333 netbox/dcim/filtersets.py:1425 -#: netbox/ipam/filtersets.py:613 netbox/ipam/filtersets.py:853 -#: netbox/ipam/filtersets.py:1117 netbox/virtualization/filtersets.py:161 -#: netbox/vpn/filtersets.py:379 +#: netbox/dcim/filtersets.py:1335 netbox/dcim/filtersets.py:1427 +#: netbox/dcim/filtersets.py:1613 netbox/ipam/filtersets.py:580 +#: netbox/ipam/filtersets.py:820 netbox/ipam/filtersets.py:1142 +#: netbox/virtualization/filtersets.py:127 netbox/vpn/filtersets.py:379 msgid "Device (ID)" msgstr "Gerät (ID)" -#: netbox/dcim/filtersets.py:1421 +#: netbox/dcim/filtersets.py:1423 msgid "Rack (name)" msgstr "Rack (Name)" -#: netbox/dcim/filtersets.py:1431 netbox/ipam/filtersets.py:608 -#: netbox/ipam/filtersets.py:848 netbox/ipam/filtersets.py:1123 -#: netbox/vpn/filtersets.py:374 +#: netbox/dcim/filtersets.py:1433 netbox/dcim/filtersets.py:1608 +#: netbox/ipam/filtersets.py:575 netbox/ipam/filtersets.py:815 +#: netbox/ipam/filtersets.py:1148 netbox/vpn/filtersets.py:374 msgid "Device (name)" msgstr "Gerät (Name)" -#: netbox/dcim/filtersets.py:1442 +#: netbox/dcim/filtersets.py:1444 msgid "Device type (model)" msgstr "Gerätetyp (Modell)" -#: netbox/dcim/filtersets.py:1447 +#: netbox/dcim/filtersets.py:1449 msgid "Device role (ID)" msgstr "Geräterolle (ID)" -#: netbox/dcim/filtersets.py:1453 +#: netbox/dcim/filtersets.py:1455 msgid "Device role (slug)" msgstr "Geräterolle (URL-Slug)" -#: netbox/dcim/filtersets.py:1458 +#: netbox/dcim/filtersets.py:1460 msgid "Virtual Chassis (ID)" msgstr "Virtuelles Gehäuse (ID)" -#: netbox/dcim/filtersets.py:1464 netbox/dcim/forms/filtersets.py:109 -#: netbox/dcim/tables/devices.py:206 netbox/netbox/navigation/menu.py:79 +#: netbox/dcim/filtersets.py:1466 netbox/dcim/forms/filtersets.py:110 +#: netbox/dcim/tables/devices.py:217 netbox/netbox/navigation/menu.py:79 #: netbox/templates/dcim/device.html:120 #: netbox/templates/dcim/device_edit.html:93 #: netbox/templates/dcim/virtualchassis.html:20 @@ -3267,168 +3707,231 @@ msgstr "Virtuelles Gehäuse (ID)" msgid "Virtual Chassis" msgstr "Virtuelles Gehäuse" -#: netbox/dcim/filtersets.py:1488 +#: netbox/dcim/filtersets.py:1490 msgid "Module (ID)" msgstr "Modul (ID)" -#: netbox/dcim/filtersets.py:1495 +#: netbox/dcim/filtersets.py:1497 msgid "Cable (ID)" msgstr "Kabel (ID)" -#: netbox/dcim/filtersets.py:1604 netbox/ipam/forms/bulk_import.py:189 +#: netbox/dcim/filtersets.py:1618 netbox/ipam/filtersets.py:585 +#: netbox/ipam/filtersets.py:825 netbox/ipam/filtersets.py:1158 +#: netbox/vpn/filtersets.py:385 +msgid "Virtual machine (name)" +msgstr "Virtuelle Maschine (Name)" + +#: netbox/dcim/filtersets.py:1623 netbox/ipam/filtersets.py:590 +#: netbox/ipam/filtersets.py:830 netbox/ipam/filtersets.py:1152 +#: netbox/virtualization/filtersets.py:248 +#: netbox/virtualization/filtersets.py:299 netbox/vpn/filtersets.py:390 +msgid "Virtual machine (ID)" +msgstr "Virtuelle Maschine (ID)" + +#: netbox/dcim/filtersets.py:1629 netbox/ipam/filtersets.py:596 +#: netbox/vpn/filtersets.py:97 netbox/vpn/filtersets.py:396 +msgid "Interface (name)" +msgstr "Schnittstelle (Name)" + +#: netbox/dcim/filtersets.py:1640 netbox/ipam/filtersets.py:607 +#: netbox/vpn/filtersets.py:108 netbox/vpn/filtersets.py:407 +msgid "VM interface (name)" +msgstr "VM-Schnittstelle (Name)" + +#: netbox/dcim/filtersets.py:1645 netbox/ipam/filtersets.py:612 +#: netbox/vpn/filtersets.py:113 +msgid "VM interface (ID)" +msgstr "VM-Schnittstelle (ID)" + +#: netbox/dcim/filtersets.py:1687 netbox/ipam/forms/bulk_import.py:185 #: netbox/vpn/forms/bulk_import.py:308 msgid "Assigned VLAN" msgstr "Zugewiesenes VLAN" -#: netbox/dcim/filtersets.py:1608 +#: netbox/dcim/filtersets.py:1691 msgid "Assigned VID" msgstr "Zugewiesene VID" -#: netbox/dcim/filtersets.py:1613 netbox/dcim/forms/bulk_edit.py:1531 -#: netbox/dcim/forms/bulk_import.py:913 netbox/dcim/forms/filtersets.py:1428 -#: netbox/dcim/forms/model_forms.py:1385 -#: netbox/dcim/models/device_components.py:711 -#: netbox/dcim/tables/devices.py:626 netbox/ipam/filtersets.py:318 -#: netbox/ipam/filtersets.py:329 netbox/ipam/filtersets.py:485 -#: netbox/ipam/filtersets.py:586 netbox/ipam/filtersets.py:597 -#: netbox/ipam/forms/bulk_edit.py:242 netbox/ipam/forms/bulk_edit.py:298 -#: netbox/ipam/forms/bulk_edit.py:340 netbox/ipam/forms/bulk_import.py:157 -#: netbox/ipam/forms/bulk_import.py:243 netbox/ipam/forms/bulk_import.py:279 -#: netbox/ipam/forms/filtersets.py:67 netbox/ipam/forms/filtersets.py:172 -#: netbox/ipam/forms/filtersets.py:309 netbox/ipam/forms/model_forms.py:62 -#: netbox/ipam/forms/model_forms.py:202 netbox/ipam/forms/model_forms.py:247 -#: netbox/ipam/forms/model_forms.py:300 netbox/ipam/forms/model_forms.py:464 -#: netbox/ipam/forms/model_forms.py:478 netbox/ipam/forms/model_forms.py:492 -#: netbox/ipam/models/ip.py:233 netbox/ipam/models/ip.py:512 -#: netbox/ipam/models/ip.py:720 netbox/ipam/models/vrfs.py:62 -#: netbox/ipam/tables/ip.py:242 netbox/ipam/tables/ip.py:309 -#: netbox/ipam/tables/ip.py:360 netbox/ipam/tables/ip.py:450 -#: netbox/templates/dcim/interface.html:133 +#: netbox/dcim/filtersets.py:1696 netbox/dcim/forms/bulk_edit.py:1544 +#: netbox/dcim/forms/bulk_import.py:921 netbox/dcim/forms/filtersets.py:1433 +#: netbox/dcim/forms/model_forms.py:1411 +#: netbox/dcim/models/device_components.py:749 +#: netbox/dcim/tables/devices.py:648 netbox/ipam/filtersets.py:321 +#: netbox/ipam/filtersets.py:332 netbox/ipam/filtersets.py:452 +#: netbox/ipam/filtersets.py:553 netbox/ipam/filtersets.py:564 +#: netbox/ipam/forms/bulk_edit.py:226 netbox/ipam/forms/bulk_edit.py:282 +#: netbox/ipam/forms/bulk_edit.py:324 netbox/ipam/forms/bulk_import.py:160 +#: netbox/ipam/forms/bulk_import.py:242 netbox/ipam/forms/bulk_import.py:278 +#: netbox/ipam/forms/filtersets.py:69 netbox/ipam/forms/filtersets.py:174 +#: netbox/ipam/forms/filtersets.py:312 netbox/ipam/forms/model_forms.py:65 +#: netbox/ipam/forms/model_forms.py:208 netbox/ipam/forms/model_forms.py:256 +#: netbox/ipam/forms/model_forms.py:310 netbox/ipam/forms/model_forms.py:474 +#: netbox/ipam/forms/model_forms.py:488 netbox/ipam/forms/model_forms.py:502 +#: netbox/ipam/models/ip.py:217 netbox/ipam/models/ip.py:498 +#: netbox/ipam/models/ip.py:719 netbox/ipam/models/vrfs.py:61 +#: netbox/ipam/tables/ip.py:188 netbox/ipam/tables/ip.py:261 +#: netbox/ipam/tables/ip.py:312 netbox/ipam/tables/ip.py:402 +#: netbox/templates/dcim/interface.html:152 #: netbox/templates/ipam/ipaddress.html:18 #: netbox/templates/ipam/iprange.html:40 netbox/templates/ipam/prefix.html:19 #: netbox/templates/ipam/vrf.html:7 netbox/templates/ipam/vrf.html:13 -#: netbox/templates/virtualization/vminterface.html:47 -#: netbox/virtualization/forms/bulk_edit.py:261 -#: netbox/virtualization/forms/bulk_import.py:171 -#: netbox/virtualization/forms/filtersets.py:228 -#: netbox/virtualization/forms/model_forms.py:344 -#: netbox/virtualization/models/virtualmachines.py:355 -#: netbox/virtualization/tables/virtualmachines.py:143 +#: netbox/templates/virtualization/vminterface.html:84 +#: netbox/virtualization/forms/bulk_edit.py:243 +#: netbox/virtualization/forms/bulk_import.py:177 +#: netbox/virtualization/forms/filtersets.py:233 +#: netbox/virtualization/forms/model_forms.py:368 +#: netbox/virtualization/models/virtualmachines.py:331 +#: netbox/virtualization/tables/virtualmachines.py:113 msgid "VRF" msgstr "VRF" -#: netbox/dcim/filtersets.py:1619 netbox/ipam/filtersets.py:324 -#: netbox/ipam/filtersets.py:335 netbox/ipam/filtersets.py:491 -#: netbox/ipam/filtersets.py:592 netbox/ipam/filtersets.py:603 +#: netbox/dcim/filtersets.py:1702 netbox/ipam/filtersets.py:327 +#: netbox/ipam/filtersets.py:338 netbox/ipam/filtersets.py:458 +#: netbox/ipam/filtersets.py:559 netbox/ipam/filtersets.py:570 msgid "VRF (RD)" msgstr "VRF (RD)" -#: netbox/dcim/filtersets.py:1624 netbox/ipam/filtersets.py:1032 +#: netbox/dcim/filtersets.py:1707 netbox/ipam/filtersets.py:1010 #: netbox/vpn/filtersets.py:342 msgid "L2VPN (ID)" msgstr "L2VPN (ID)" -#: netbox/dcim/filtersets.py:1630 netbox/dcim/forms/filtersets.py:1433 -#: netbox/dcim/tables/devices.py:570 netbox/ipam/filtersets.py:1038 -#: netbox/ipam/forms/filtersets.py:518 netbox/ipam/tables/vlans.py:137 -#: netbox/templates/dcim/interface.html:93 netbox/templates/ipam/vlan.html:66 +#: netbox/dcim/filtersets.py:1713 netbox/dcim/forms/filtersets.py:1438 +#: netbox/dcim/tables/devices.py:584 netbox/ipam/filtersets.py:1016 +#: netbox/ipam/forms/filtersets.py:570 netbox/ipam/tables/vlans.py:113 +#: netbox/templates/dcim/interface.html:99 netbox/templates/ipam/vlan.html:82 #: netbox/templates/vpn/l2vpntermination.html:12 -#: netbox/virtualization/forms/filtersets.py:233 +#: netbox/virtualization/forms/filtersets.py:238 #: netbox/vpn/forms/bulk_import.py:280 netbox/vpn/forms/filtersets.py:246 -#: netbox/vpn/forms/model_forms.py:409 netbox/vpn/forms/model_forms.py:427 +#: netbox/vpn/forms/model_forms.py:412 netbox/vpn/forms/model_forms.py:430 #: netbox/vpn/models/l2vpn.py:63 netbox/vpn/tables/l2vpn.py:55 msgid "L2VPN" msgstr "L2VPN" -#: netbox/dcim/filtersets.py:1662 +#: netbox/dcim/filtersets.py:1718 netbox/ipam/filtersets.py:1091 +msgid "VLAN Translation Policy (ID)" +msgstr "VLAN-Übersetzungsrichtlinie (ID)" + +#: netbox/dcim/filtersets.py:1724 netbox/dcim/forms/model_forms.py:1428 +#: netbox/dcim/models/device_components.py:568 +#: netbox/ipam/forms/filtersets.py:489 netbox/ipam/forms/model_forms.py:712 +#: netbox/templates/ipam/vlantranslationpolicy.html:11 +#: netbox/virtualization/forms/bulk_edit.py:248 +#: netbox/virtualization/forms/model_forms.py:373 +msgid "VLAN Translation Policy" +msgstr "VLAN-Übersetzungsrichtlinie" + +#: netbox/dcim/filtersets.py:1758 msgid "Virtual Chassis Interfaces for Device" msgstr "Virtuelle Gehäuseschnittstellen für Gerät" -#: netbox/dcim/filtersets.py:1667 +#: netbox/dcim/filtersets.py:1763 msgid "Virtual Chassis Interfaces for Device (ID)" msgstr "Virtuelle Gehäuseschnittstellen für Gerät (ID)" -#: netbox/dcim/filtersets.py:1671 +#: netbox/dcim/filtersets.py:1767 msgid "Kind of interface" msgstr "Art der Schnittstelle" -#: netbox/dcim/filtersets.py:1676 netbox/virtualization/filtersets.py:293 +#: netbox/dcim/filtersets.py:1772 netbox/virtualization/filtersets.py:259 msgid "Parent interface (ID)" msgstr "Übergeordnete Schnittstelle (ID)" -#: netbox/dcim/filtersets.py:1681 netbox/virtualization/filtersets.py:298 +#: netbox/dcim/filtersets.py:1777 netbox/virtualization/filtersets.py:264 msgid "Bridged interface (ID)" msgstr "Überbrückte Schnittstelle (ID)" -#: netbox/dcim/filtersets.py:1686 +#: netbox/dcim/filtersets.py:1782 msgid "LAG interface (ID)" msgstr "LAG-Schnittstelle (ID)" -#: netbox/dcim/filtersets.py:1713 netbox/dcim/filtersets.py:1725 -#: netbox/dcim/forms/filtersets.py:1345 netbox/dcim/forms/model_forms.py:1697 +#: netbox/dcim/filtersets.py:1790 netbox/dcim/tables/devices.py:606 +#: netbox/dcim/tables/devices.py:1136 netbox/templates/dcim/interface.html:131 +#: netbox/templates/dcim/macaddress.html:11 +#: netbox/templates/dcim/macaddress.html:14 +#: netbox/templates/virtualization/vminterface.html:73 +msgid "MAC Address" +msgstr "MAC-Adresse" + +#: netbox/dcim/filtersets.py:1795 netbox/virtualization/filtersets.py:273 +msgid "Primary MAC address (ID)" +msgstr "Primäre MAC-Adresse (ID)" + +#: netbox/dcim/filtersets.py:1801 netbox/dcim/forms/model_forms.py:1415 +#: netbox/virtualization/filtersets.py:279 +#: netbox/virtualization/forms/model_forms.py:311 +msgid "Primary MAC address" +msgstr "Primäre MAC-Adresse" + +#: netbox/dcim/filtersets.py:1823 netbox/dcim/filtersets.py:1835 +#: netbox/dcim/forms/filtersets.py:1350 netbox/dcim/forms/model_forms.py:1742 #: netbox/templates/dcim/virtualdevicecontext.html:15 msgid "Virtual Device Context" msgstr "Virtual Device Context" -#: netbox/dcim/filtersets.py:1719 +#: netbox/dcim/filtersets.py:1829 msgid "Virtual Device Context (Identifier)" msgstr "Virtual Device Context (Identifier)" -#: netbox/dcim/filtersets.py:1730 +#: netbox/dcim/filtersets.py:1840 #: netbox/templates/wireless/wirelesslan.html:11 -#: netbox/wireless/forms/model_forms.py:53 +#: netbox/wireless/forms/model_forms.py:55 msgid "Wireless LAN" msgstr "WLAN" -#: netbox/dcim/filtersets.py:1734 netbox/dcim/tables/devices.py:613 +#: netbox/dcim/filtersets.py:1844 netbox/dcim/tables/devices.py:635 msgid "Wireless link" msgstr "WLAN Verbindung" -#: netbox/dcim/filtersets.py:1803 +#: netbox/dcim/filtersets.py:1854 +msgid "Virtual circuit termination (ID)" +msgstr "Virtueller Verbindungsabschluß (ID)" + +#: netbox/dcim/filtersets.py:1923 msgid "Parent module bay (ID)" msgstr "Hauptmodulschacht (ID)" -#: netbox/dcim/filtersets.py:1808 +#: netbox/dcim/filtersets.py:1928 msgid "Installed module (ID)" msgstr "Installiertes Modul (ID)" -#: netbox/dcim/filtersets.py:1819 +#: netbox/dcim/filtersets.py:1939 msgid "Installed device (ID)" msgstr "Installiertes Gerät (ID)" -#: netbox/dcim/filtersets.py:1825 +#: netbox/dcim/filtersets.py:1945 msgid "Installed device (name)" msgstr "Installiertes Gerät (Name)" -#: netbox/dcim/filtersets.py:1891 +#: netbox/dcim/filtersets.py:2015 msgid "Master (ID)" msgstr "Master (ID)" -#: netbox/dcim/filtersets.py:1897 +#: netbox/dcim/filtersets.py:2021 msgid "Master (name)" msgstr "Master (Name)" -#: netbox/dcim/filtersets.py:1939 netbox/tenancy/filtersets.py:245 +#: netbox/dcim/filtersets.py:2063 netbox/tenancy/filtersets.py:245 msgid "Tenant (ID)" msgstr "Mandant (ID)" -#: netbox/dcim/filtersets.py:1945 netbox/extras/filtersets.py:618 +#: netbox/dcim/filtersets.py:2069 netbox/extras/filtersets.py:618 #: netbox/tenancy/filtersets.py:251 msgid "Tenant (slug)" msgstr "Mandant (URL-Slug)" -#: netbox/dcim/filtersets.py:1981 netbox/dcim/forms/filtersets.py:1077 +#: netbox/dcim/filtersets.py:2105 netbox/dcim/forms/filtersets.py:1078 msgid "Unterminated" msgstr "Nicht terminiert" -#: netbox/dcim/filtersets.py:2239 +#: netbox/dcim/filtersets.py:2363 msgid "Power panel (ID)" msgstr "Stromverteiler (ID)" -#: netbox/dcim/forms/bulk_create.py:40 netbox/extras/forms/filtersets.py:401 -#: netbox/extras/forms/model_forms.py:567 -#: netbox/extras/forms/model_forms.py:619 netbox/netbox/forms/base.py:86 -#: netbox/netbox/forms/mixins.py:81 netbox/netbox/tables/columns.py:478 +#: netbox/dcim/forms/bulk_create.py:40 netbox/extras/forms/filtersets.py:408 +#: netbox/extras/forms/model_forms.py:581 +#: netbox/extras/forms/model_forms.py:633 netbox/netbox/forms/base.py:86 +#: netbox/netbox/forms/mixins.py:91 netbox/netbox/tables/columns.py:481 #: netbox/templates/circuits/inc/circuit_termination.html:32 #: netbox/templates/generic/bulk_edit.html:65 #: netbox/templates/inc/panels/tags.html:5 @@ -3436,11 +3939,11 @@ msgstr "Stromverteiler (ID)" msgid "Tags" msgstr "Tags" -#: netbox/dcim/forms/bulk_create.py:112 netbox/dcim/forms/filtersets.py:1498 -#: netbox/dcim/forms/model_forms.py:488 netbox/dcim/forms/model_forms.py:546 +#: netbox/dcim/forms/bulk_create.py:112 netbox/dcim/forms/filtersets.py:1503 +#: netbox/dcim/forms/model_forms.py:498 netbox/dcim/forms/model_forms.py:557 #: netbox/dcim/forms/object_create.py:197 -#: netbox/dcim/forms/object_create.py:345 netbox/dcim/tables/devices.py:165 -#: netbox/dcim/tables/devices.py:707 netbox/dcim/tables/devicetypes.py:246 +#: netbox/dcim/forms/object_create.py:345 netbox/dcim/tables/devices.py:176 +#: netbox/dcim/tables/devices.py:741 netbox/dcim/tables/devicetypes.py:253 #: netbox/templates/dcim/device.html:43 netbox/templates/dcim/device.html:131 #: netbox/templates/dcim/modulebay.html:38 #: netbox/templates/dcim/virtualchassis.html:66 @@ -3456,114 +3959,114 @@ msgstr "" "Alphanumerische Bereiche werden unterstützt. (Muss der Anzahl der Namen " "entsprechen, die erstellt werden.)" -#: netbox/dcim/forms/bulk_edit.py:133 +#: netbox/dcim/forms/bulk_edit.py:136 msgid "Contact name" msgstr "Name des Kontakts" -#: netbox/dcim/forms/bulk_edit.py:138 +#: netbox/dcim/forms/bulk_edit.py:141 msgid "Contact phone" msgstr "Telefon des Kontakts" -#: netbox/dcim/forms/bulk_edit.py:144 +#: netbox/dcim/forms/bulk_edit.py:147 msgid "Contact E-mail" msgstr "E-Mail des Kontakts" -#: netbox/dcim/forms/bulk_edit.py:147 netbox/dcim/forms/bulk_import.py:123 -#: netbox/dcim/forms/model_forms.py:128 +#: netbox/dcim/forms/bulk_edit.py:150 netbox/dcim/forms/bulk_import.py:125 +#: netbox/dcim/forms/model_forms.py:132 msgid "Time zone" msgstr "Zeitzone" -#: netbox/dcim/forms/bulk_edit.py:225 netbox/dcim/forms/bulk_edit.py:501 -#: netbox/dcim/forms/bulk_edit.py:565 netbox/dcim/forms/bulk_edit.py:638 -#: netbox/dcim/forms/bulk_edit.py:662 netbox/dcim/forms/bulk_edit.py:755 -#: netbox/dcim/forms/bulk_edit.py:1282 netbox/dcim/forms/bulk_edit.py:1703 -#: netbox/dcim/forms/bulk_import.py:182 netbox/dcim/forms/bulk_import.py:393 -#: netbox/dcim/forms/bulk_import.py:427 netbox/dcim/forms/bulk_import.py:472 -#: netbox/dcim/forms/bulk_import.py:508 netbox/dcim/forms/bulk_import.py:1104 -#: netbox/dcim/forms/filtersets.py:313 netbox/dcim/forms/filtersets.py:372 -#: netbox/dcim/forms/filtersets.py:494 netbox/dcim/forms/filtersets.py:619 -#: netbox/dcim/forms/filtersets.py:700 netbox/dcim/forms/filtersets.py:782 -#: netbox/dcim/forms/filtersets.py:947 netbox/dcim/forms/filtersets.py:1539 -#: netbox/dcim/forms/model_forms.py:207 netbox/dcim/forms/model_forms.py:337 -#: netbox/dcim/forms/model_forms.py:349 netbox/dcim/forms/model_forms.py:395 -#: netbox/dcim/forms/model_forms.py:436 netbox/dcim/forms/model_forms.py:1082 -#: netbox/dcim/forms/model_forms.py:1522 -#: netbox/dcim/forms/object_import.py:187 netbox/dcim/tables/devices.py:96 -#: netbox/dcim/tables/devices.py:172 netbox/dcim/tables/devices.py:940 -#: netbox/dcim/tables/devicetypes.py:80 netbox/dcim/tables/devicetypes.py:308 +#: netbox/dcim/forms/bulk_edit.py:228 netbox/dcim/forms/bulk_edit.py:504 +#: netbox/dcim/forms/bulk_edit.py:568 netbox/dcim/forms/bulk_edit.py:641 +#: netbox/dcim/forms/bulk_edit.py:665 netbox/dcim/forms/bulk_edit.py:758 +#: netbox/dcim/forms/bulk_edit.py:1285 netbox/dcim/forms/bulk_edit.py:1718 +#: netbox/dcim/forms/bulk_import.py:184 netbox/dcim/forms/bulk_import.py:395 +#: netbox/dcim/forms/bulk_import.py:429 netbox/dcim/forms/bulk_import.py:477 +#: netbox/dcim/forms/bulk_import.py:513 netbox/dcim/forms/bulk_import.py:1112 +#: netbox/dcim/forms/filtersets.py:314 netbox/dcim/forms/filtersets.py:373 +#: netbox/dcim/forms/filtersets.py:495 netbox/dcim/forms/filtersets.py:620 +#: netbox/dcim/forms/filtersets.py:701 netbox/dcim/forms/filtersets.py:783 +#: netbox/dcim/forms/filtersets.py:948 netbox/dcim/forms/filtersets.py:1544 +#: netbox/dcim/forms/model_forms.py:211 netbox/dcim/forms/model_forms.py:345 +#: netbox/dcim/forms/model_forms.py:357 netbox/dcim/forms/model_forms.py:404 +#: netbox/dcim/forms/model_forms.py:445 netbox/dcim/forms/model_forms.py:1095 +#: netbox/dcim/forms/model_forms.py:1564 +#: netbox/dcim/forms/object_import.py:188 netbox/dcim/tables/devices.py:107 +#: netbox/dcim/tables/devices.py:183 netbox/dcim/tables/devices.py:970 +#: netbox/dcim/tables/devicetypes.py:85 netbox/dcim/tables/devicetypes.py:315 #: netbox/dcim/tables/modules.py:20 netbox/dcim/tables/modules.py:61 -#: netbox/dcim/tables/racks.py:58 netbox/dcim/tables/racks.py:132 +#: netbox/dcim/tables/racks.py:58 netbox/dcim/tables/racks.py:131 #: netbox/templates/dcim/devicetype.html:14 -#: netbox/templates/dcim/inventoryitem.html:44 +#: netbox/templates/dcim/inventoryitem.html:48 #: netbox/templates/dcim/manufacturer.html:33 #: netbox/templates/dcim/modulebay.html:62 -#: netbox/templates/dcim/moduletype.html:25 +#: netbox/templates/dcim/moduletype.html:27 #: netbox/templates/dcim/platform.html:37 #: netbox/templates/dcim/racktype.html:16 msgid "Manufacturer" msgstr "Hersteller" -#: netbox/dcim/forms/bulk_edit.py:230 netbox/dcim/forms/bulk_edit.py:378 -#: netbox/dcim/forms/bulk_import.py:191 netbox/dcim/forms/bulk_import.py:270 -#: netbox/dcim/forms/filtersets.py:255 +#: netbox/dcim/forms/bulk_edit.py:233 netbox/dcim/forms/bulk_edit.py:381 +#: netbox/dcim/forms/bulk_import.py:193 netbox/dcim/forms/bulk_import.py:272 +#: netbox/dcim/forms/filtersets.py:256 #: netbox/templates/dcim/inc/panels/racktype_dimensions.html:6 msgid "Form factor" msgstr "Formfaktor" -#: netbox/dcim/forms/bulk_edit.py:235 netbox/dcim/forms/bulk_edit.py:383 -#: netbox/dcim/forms/bulk_import.py:199 netbox/dcim/forms/bulk_import.py:273 -#: netbox/dcim/forms/filtersets.py:260 +#: netbox/dcim/forms/bulk_edit.py:238 netbox/dcim/forms/bulk_edit.py:386 +#: netbox/dcim/forms/bulk_import.py:201 netbox/dcim/forms/bulk_import.py:275 +#: netbox/dcim/forms/filtersets.py:261 #: netbox/templates/dcim/inc/panels/racktype_dimensions.html:10 msgid "Width" msgstr "Breite" -#: netbox/dcim/forms/bulk_edit.py:241 netbox/dcim/forms/bulk_edit.py:389 -#: netbox/dcim/forms/bulk_import.py:280 +#: netbox/dcim/forms/bulk_edit.py:244 netbox/dcim/forms/bulk_edit.py:392 +#: netbox/dcim/forms/bulk_import.py:282 #: netbox/templates/dcim/devicetype.html:37 msgid "Height (U)" msgstr "Höhe (HE)" -#: netbox/dcim/forms/bulk_edit.py:250 netbox/dcim/forms/bulk_edit.py:394 -#: netbox/dcim/forms/filtersets.py:274 +#: netbox/dcim/forms/bulk_edit.py:253 netbox/dcim/forms/bulk_edit.py:397 +#: netbox/dcim/forms/filtersets.py:275 msgid "Descending units" msgstr "Absteigende Höheneinheiten (HE)" -#: netbox/dcim/forms/bulk_edit.py:253 netbox/dcim/forms/bulk_edit.py:397 +#: netbox/dcim/forms/bulk_edit.py:256 netbox/dcim/forms/bulk_edit.py:400 msgid "Outer width" msgstr "Äußere Breite" -#: netbox/dcim/forms/bulk_edit.py:258 netbox/dcim/forms/bulk_edit.py:402 +#: netbox/dcim/forms/bulk_edit.py:261 netbox/dcim/forms/bulk_edit.py:405 msgid "Outer depth" msgstr "Äußere Tiefe" -#: netbox/dcim/forms/bulk_edit.py:263 netbox/dcim/forms/bulk_edit.py:407 -#: netbox/dcim/forms/bulk_import.py:204 netbox/dcim/forms/bulk_import.py:283 +#: netbox/dcim/forms/bulk_edit.py:266 netbox/dcim/forms/bulk_edit.py:410 +#: netbox/dcim/forms/bulk_import.py:206 netbox/dcim/forms/bulk_import.py:285 msgid "Outer unit" msgstr "Äußere Einheit" -#: netbox/dcim/forms/bulk_edit.py:268 netbox/dcim/forms/bulk_edit.py:412 +#: netbox/dcim/forms/bulk_edit.py:271 netbox/dcim/forms/bulk_edit.py:415 msgid "Mounting depth" msgstr "Einbautiefe" -#: netbox/dcim/forms/bulk_edit.py:273 netbox/dcim/forms/bulk_edit.py:300 -#: netbox/dcim/forms/bulk_edit.py:422 netbox/dcim/forms/bulk_edit.py:452 -#: netbox/dcim/forms/bulk_edit.py:535 netbox/dcim/forms/bulk_edit.py:558 -#: netbox/dcim/forms/bulk_edit.py:579 netbox/dcim/forms/bulk_edit.py:601 -#: netbox/dcim/forms/bulk_import.py:406 netbox/dcim/forms/bulk_import.py:438 -#: netbox/dcim/forms/filtersets.py:285 netbox/dcim/forms/filtersets.py:307 -#: netbox/dcim/forms/filtersets.py:327 netbox/dcim/forms/filtersets.py:401 -#: netbox/dcim/forms/filtersets.py:488 netbox/dcim/forms/filtersets.py:594 -#: netbox/dcim/forms/filtersets.py:613 netbox/dcim/forms/filtersets.py:674 -#: netbox/dcim/forms/model_forms.py:221 netbox/dcim/forms/model_forms.py:298 -#: netbox/dcim/tables/devicetypes.py:106 netbox/dcim/tables/modules.py:35 -#: netbox/dcim/tables/racks.py:74 netbox/dcim/tables/racks.py:172 +#: netbox/dcim/forms/bulk_edit.py:276 netbox/dcim/forms/bulk_edit.py:303 +#: netbox/dcim/forms/bulk_edit.py:425 netbox/dcim/forms/bulk_edit.py:455 +#: netbox/dcim/forms/bulk_edit.py:538 netbox/dcim/forms/bulk_edit.py:561 +#: netbox/dcim/forms/bulk_edit.py:582 netbox/dcim/forms/bulk_edit.py:604 +#: netbox/dcim/forms/bulk_import.py:408 netbox/dcim/forms/bulk_import.py:440 +#: netbox/dcim/forms/filtersets.py:286 netbox/dcim/forms/filtersets.py:308 +#: netbox/dcim/forms/filtersets.py:328 netbox/dcim/forms/filtersets.py:402 +#: netbox/dcim/forms/filtersets.py:489 netbox/dcim/forms/filtersets.py:595 +#: netbox/dcim/forms/filtersets.py:614 netbox/dcim/forms/filtersets.py:675 +#: netbox/dcim/forms/model_forms.py:226 netbox/dcim/forms/model_forms.py:306 +#: netbox/dcim/tables/devicetypes.py:111 netbox/dcim/tables/modules.py:35 +#: netbox/dcim/tables/racks.py:74 netbox/dcim/tables/racks.py:171 #: netbox/extras/forms/bulk_edit.py:53 netbox/extras/forms/bulk_edit.py:133 #: netbox/extras/forms/bulk_edit.py:183 netbox/extras/forms/bulk_edit.py:288 -#: netbox/extras/forms/filtersets.py:64 netbox/extras/forms/filtersets.py:156 -#: netbox/extras/forms/filtersets.py:243 netbox/ipam/forms/bulk_edit.py:190 +#: netbox/extras/forms/filtersets.py:65 netbox/extras/forms/filtersets.py:159 +#: netbox/extras/forms/filtersets.py:249 netbox/ipam/forms/bulk_edit.py:193 #: netbox/templates/dcim/device.html:324 #: netbox/templates/dcim/devicetype.html:49 -#: netbox/templates/dcim/moduletype.html:45 netbox/templates/dcim/rack.html:81 +#: netbox/templates/dcim/moduletype.html:47 netbox/templates/dcim/rack.html:81 #: netbox/templates/dcim/racktype.html:41 #: netbox/templates/extras/configcontext.html:17 #: netbox/templates/extras/customlink.html:25 @@ -3572,131 +4075,86 @@ msgstr "Einbautiefe" msgid "Weight" msgstr "Gewicht" -#: netbox/dcim/forms/bulk_edit.py:278 netbox/dcim/forms/bulk_edit.py:427 -#: netbox/dcim/forms/filtersets.py:290 +#: netbox/dcim/forms/bulk_edit.py:281 netbox/dcim/forms/bulk_edit.py:430 +#: netbox/dcim/forms/filtersets.py:291 msgid "Max weight" msgstr "Maximales Gewicht" -#: netbox/dcim/forms/bulk_edit.py:283 netbox/dcim/forms/bulk_edit.py:432 -#: netbox/dcim/forms/bulk_edit.py:540 netbox/dcim/forms/bulk_edit.py:584 -#: netbox/dcim/forms/bulk_import.py:210 netbox/dcim/forms/bulk_import.py:295 -#: netbox/dcim/forms/bulk_import.py:411 netbox/dcim/forms/bulk_import.py:443 -#: netbox/dcim/forms/filtersets.py:295 netbox/dcim/forms/filtersets.py:598 -#: netbox/dcim/forms/filtersets.py:678 +#: netbox/dcim/forms/bulk_edit.py:286 netbox/dcim/forms/bulk_edit.py:435 +#: netbox/dcim/forms/bulk_edit.py:543 netbox/dcim/forms/bulk_edit.py:587 +#: netbox/dcim/forms/bulk_import.py:212 netbox/dcim/forms/bulk_import.py:297 +#: netbox/dcim/forms/bulk_import.py:413 netbox/dcim/forms/bulk_import.py:445 +#: netbox/dcim/forms/filtersets.py:296 netbox/dcim/forms/filtersets.py:599 +#: netbox/dcim/forms/filtersets.py:679 msgid "Weight unit" msgstr "Gewichtseinheit" -#: netbox/dcim/forms/bulk_edit.py:297 netbox/dcim/forms/filtersets.py:305 -#: netbox/dcim/forms/model_forms.py:217 netbox/dcim/forms/model_forms.py:256 +#: netbox/dcim/forms/bulk_edit.py:300 netbox/dcim/forms/filtersets.py:306 +#: netbox/dcim/forms/model_forms.py:222 netbox/dcim/forms/model_forms.py:261 #: netbox/templates/dcim/rack.html:45 netbox/templates/dcim/racktype.html:13 msgid "Rack Type" msgstr "Rack-Typ" -#: netbox/dcim/forms/bulk_edit.py:299 netbox/dcim/forms/model_forms.py:220 -#: netbox/dcim/forms/model_forms.py:297 +#: netbox/dcim/forms/bulk_edit.py:302 netbox/dcim/forms/model_forms.py:225 +#: netbox/dcim/forms/model_forms.py:305 msgid "Outer Dimensions" msgstr "Äußere Abmessungen" -#: netbox/dcim/forms/bulk_edit.py:302 netbox/dcim/forms/model_forms.py:222 -#: netbox/dcim/forms/model_forms.py:299 netbox/templates/dcim/device.html:315 +#: netbox/dcim/forms/bulk_edit.py:305 netbox/dcim/forms/model_forms.py:227 +#: netbox/dcim/forms/model_forms.py:307 netbox/templates/dcim/device.html:315 #: netbox/templates/dcim/inc/panels/racktype_dimensions.html:3 msgid "Dimensions" msgstr "Abmessungen" -#: netbox/dcim/forms/bulk_edit.py:304 netbox/dcim/forms/filtersets.py:306 -#: netbox/dcim/forms/filtersets.py:326 netbox/dcim/forms/model_forms.py:224 +#: netbox/dcim/forms/bulk_edit.py:307 netbox/dcim/forms/filtersets.py:307 +#: netbox/dcim/forms/filtersets.py:327 netbox/dcim/forms/model_forms.py:229 #: netbox/templates/dcim/inc/panels/racktype_numbering.html:3 msgid "Numbering" msgstr "Nummerierung" -#: netbox/dcim/forms/bulk_edit.py:358 netbox/dcim/forms/bulk_edit.py:1277 -#: netbox/dcim/forms/bulk_edit.py:1698 netbox/dcim/forms/bulk_import.py:253 -#: netbox/dcim/forms/bulk_import.py:1098 netbox/dcim/forms/filtersets.py:367 -#: netbox/dcim/forms/filtersets.py:777 netbox/dcim/forms/filtersets.py:1534 -#: netbox/dcim/forms/model_forms.py:251 netbox/dcim/forms/model_forms.py:1077 -#: netbox/dcim/forms/model_forms.py:1517 -#: netbox/dcim/forms/object_import.py:181 netbox/dcim/tables/devices.py:169 -#: netbox/dcim/tables/devices.py:809 netbox/dcim/tables/devices.py:937 -#: netbox/dcim/tables/devicetypes.py:304 netbox/dcim/tables/racks.py:129 -#: netbox/extras/filtersets.py:552 netbox/ipam/forms/bulk_edit.py:261 -#: netbox/ipam/forms/bulk_edit.py:311 netbox/ipam/forms/bulk_edit.py:359 -#: netbox/ipam/forms/bulk_edit.py:511 netbox/ipam/forms/bulk_import.py:197 -#: netbox/ipam/forms/bulk_import.py:262 netbox/ipam/forms/bulk_import.py:298 -#: netbox/ipam/forms/bulk_import.py:479 netbox/ipam/forms/filtersets.py:237 -#: netbox/ipam/forms/filtersets.py:289 netbox/ipam/forms/filtersets.py:360 -#: netbox/ipam/forms/filtersets.py:509 netbox/ipam/forms/model_forms.py:188 -#: netbox/ipam/forms/model_forms.py:221 netbox/ipam/forms/model_forms.py:250 -#: netbox/ipam/forms/model_forms.py:676 netbox/ipam/tables/ip.py:258 -#: netbox/ipam/tables/ip.py:316 netbox/ipam/tables/ip.py:367 -#: netbox/ipam/tables/vlans.py:130 netbox/ipam/tables/vlans.py:235 -#: netbox/templates/dcim/device.html:182 -#: netbox/templates/dcim/inc/panels/inventory_items.html:20 -#: netbox/templates/dcim/interface.html:223 -#: netbox/templates/dcim/inventoryitem.html:36 -#: netbox/templates/dcim/rack.html:49 netbox/templates/ipam/ipaddress.html:41 -#: netbox/templates/ipam/iprange.html:50 netbox/templates/ipam/prefix.html:77 -#: netbox/templates/ipam/role.html:19 netbox/templates/ipam/vlan.html:52 -#: netbox/templates/virtualization/virtualmachine.html:23 -#: netbox/templates/vpn/tunneltermination.html:17 -#: netbox/templates/wireless/inc/wirelesslink_interface.html:20 -#: netbox/tenancy/forms/bulk_edit.py:142 -#: netbox/tenancy/forms/filtersets.py:107 -#: netbox/tenancy/forms/model_forms.py:137 -#: netbox/tenancy/tables/contacts.py:102 -#: netbox/virtualization/forms/bulk_edit.py:145 -#: netbox/virtualization/forms/bulk_import.py:106 -#: netbox/virtualization/forms/filtersets.py:157 -#: netbox/virtualization/forms/model_forms.py:195 -#: netbox/virtualization/tables/virtualmachines.py:75 -#: netbox/vpn/forms/bulk_edit.py:87 netbox/vpn/forms/bulk_import.py:81 -#: netbox/vpn/forms/filtersets.py:85 netbox/vpn/forms/model_forms.py:78 -#: netbox/vpn/forms/model_forms.py:113 netbox/vpn/tables/tunnels.py:82 -msgid "Role" -msgstr "Rolle" - -#: netbox/dcim/forms/bulk_edit.py:363 netbox/dcim/forms/bulk_import.py:260 -#: netbox/dcim/forms/filtersets.py:380 +#: netbox/dcim/forms/bulk_edit.py:366 netbox/dcim/forms/bulk_import.py:262 +#: netbox/dcim/forms/filtersets.py:381 msgid "Rack type" msgstr "Racktyp" -#: netbox/dcim/forms/bulk_edit.py:370 netbox/dcim/forms/bulk_edit.py:718 -#: netbox/dcim/forms/bulk_edit.py:779 netbox/templates/dcim/device.html:104 +#: netbox/dcim/forms/bulk_edit.py:373 netbox/dcim/forms/bulk_edit.py:721 +#: netbox/dcim/forms/bulk_edit.py:782 netbox/templates/dcim/device.html:104 #: netbox/templates/dcim/module.html:77 #: netbox/templates/dcim/modulebay.html:70 netbox/templates/dcim/rack.html:57 #: netbox/templates/virtualization/virtualmachine.html:35 msgid "Serial Number" msgstr "Seriennummer" -#: netbox/dcim/forms/bulk_edit.py:373 netbox/dcim/forms/filtersets.py:387 -#: netbox/dcim/forms/filtersets.py:813 netbox/dcim/forms/filtersets.py:967 -#: netbox/dcim/forms/filtersets.py:1546 +#: netbox/dcim/forms/bulk_edit.py:376 netbox/dcim/forms/filtersets.py:388 +#: netbox/dcim/forms/filtersets.py:814 netbox/dcim/forms/filtersets.py:968 +#: netbox/dcim/forms/filtersets.py:1551 msgid "Asset tag" msgstr "Asset-Tag" -#: netbox/dcim/forms/bulk_edit.py:417 netbox/dcim/forms/bulk_edit.py:530 -#: netbox/dcim/forms/bulk_edit.py:574 netbox/dcim/forms/bulk_edit.py:711 -#: netbox/dcim/forms/bulk_import.py:289 netbox/dcim/forms/bulk_import.py:432 -#: netbox/dcim/forms/bulk_import.py:602 netbox/dcim/forms/filtersets.py:280 -#: netbox/dcim/forms/filtersets.py:511 netbox/dcim/forms/filtersets.py:669 -#: netbox/dcim/forms/filtersets.py:804 netbox/templates/dcim/device.html:98 +#: netbox/dcim/forms/bulk_edit.py:420 netbox/dcim/forms/bulk_edit.py:533 +#: netbox/dcim/forms/bulk_edit.py:577 netbox/dcim/forms/bulk_edit.py:714 +#: netbox/dcim/forms/bulk_import.py:291 netbox/dcim/forms/bulk_import.py:434 +#: netbox/dcim/forms/bulk_import.py:607 netbox/dcim/forms/filtersets.py:281 +#: netbox/dcim/forms/filtersets.py:512 netbox/dcim/forms/filtersets.py:670 +#: netbox/dcim/forms/filtersets.py:805 netbox/templates/dcim/device.html:98 #: netbox/templates/dcim/devicetype.html:65 -#: netbox/templates/dcim/moduletype.html:41 netbox/templates/dcim/rack.html:65 +#: netbox/templates/dcim/moduletype.html:43 netbox/templates/dcim/rack.html:65 #: netbox/templates/dcim/racktype.html:28 msgid "Airflow" msgstr "Luftstrom" -#: netbox/dcim/forms/bulk_edit.py:446 netbox/dcim/forms/bulk_edit.py:925 -#: netbox/dcim/forms/bulk_import.py:344 netbox/dcim/forms/bulk_import.py:347 -#: netbox/dcim/forms/bulk_import.py:575 netbox/dcim/forms/bulk_import.py:1380 -#: netbox/dcim/forms/bulk_import.py:1384 netbox/dcim/forms/filtersets.py:104 -#: netbox/dcim/forms/filtersets.py:324 netbox/dcim/forms/filtersets.py:405 -#: netbox/dcim/forms/filtersets.py:419 netbox/dcim/forms/filtersets.py:457 -#: netbox/dcim/forms/filtersets.py:772 netbox/dcim/forms/filtersets.py:1035 -#: netbox/dcim/forms/filtersets.py:1167 netbox/dcim/forms/model_forms.py:264 -#: netbox/dcim/forms/model_forms.py:306 netbox/dcim/forms/model_forms.py:479 -#: netbox/dcim/forms/model_forms.py:755 netbox/dcim/forms/object_create.py:392 -#: netbox/dcim/tables/devices.py:161 netbox/dcim/tables/power.py:70 -#: netbox/dcim/tables/racks.py:217 netbox/ipam/forms/filtersets.py:442 +#: netbox/dcim/forms/bulk_edit.py:449 netbox/dcim/forms/bulk_edit.py:928 +#: netbox/dcim/forms/bulk_import.py:346 netbox/dcim/forms/bulk_import.py:349 +#: netbox/dcim/forms/bulk_import.py:580 netbox/dcim/forms/bulk_import.py:1477 +#: netbox/dcim/forms/bulk_import.py:1481 netbox/dcim/forms/filtersets.py:105 +#: netbox/dcim/forms/filtersets.py:325 netbox/dcim/forms/filtersets.py:406 +#: netbox/dcim/forms/filtersets.py:420 netbox/dcim/forms/filtersets.py:458 +#: netbox/dcim/forms/filtersets.py:773 netbox/dcim/forms/filtersets.py:1036 +#: netbox/dcim/forms/filtersets.py:1168 netbox/dcim/forms/model_forms.py:271 +#: netbox/dcim/forms/model_forms.py:314 netbox/dcim/forms/model_forms.py:489 +#: netbox/dcim/forms/model_forms.py:767 netbox/dcim/forms/object_create.py:392 +#: netbox/dcim/tables/devices.py:172 netbox/dcim/tables/power.py:70 +#: netbox/dcim/tables/racks.py:216 netbox/ipam/forms/filtersets.py:445 #: netbox/templates/dcim/device.html:30 #: netbox/templates/dcim/inc/cable_termination.html:16 #: netbox/templates/dcim/powerfeed.html:28 netbox/templates/dcim/rack.html:13 @@ -3707,212 +4165,144 @@ msgstr "Luftstrom" msgid "Rack" msgstr "Rack" -#: netbox/dcim/forms/bulk_edit.py:450 netbox/dcim/forms/bulk_edit.py:744 -#: netbox/dcim/forms/filtersets.py:325 netbox/dcim/forms/filtersets.py:398 -#: netbox/dcim/forms/filtersets.py:481 netbox/dcim/forms/filtersets.py:608 -#: netbox/dcim/forms/filtersets.py:721 netbox/dcim/forms/filtersets.py:942 -#: netbox/dcim/forms/model_forms.py:670 netbox/dcim/forms/model_forms.py:1587 +#: netbox/dcim/forms/bulk_edit.py:453 netbox/dcim/forms/bulk_edit.py:747 +#: netbox/dcim/forms/filtersets.py:326 netbox/dcim/forms/filtersets.py:399 +#: netbox/dcim/forms/filtersets.py:482 netbox/dcim/forms/filtersets.py:609 +#: netbox/dcim/forms/filtersets.py:722 netbox/dcim/forms/filtersets.py:943 +#: netbox/dcim/forms/model_forms.py:681 netbox/dcim/forms/model_forms.py:1632 #: netbox/templates/dcim/device_edit.html:20 msgid "Hardware" msgstr "Hardware" -#: netbox/dcim/forms/bulk_edit.py:506 netbox/dcim/forms/bulk_import.py:399 -#: netbox/dcim/forms/filtersets.py:499 netbox/dcim/forms/model_forms.py:353 +#: netbox/dcim/forms/bulk_edit.py:509 netbox/dcim/forms/bulk_import.py:401 +#: netbox/dcim/forms/filtersets.py:500 netbox/dcim/forms/model_forms.py:362 msgid "Default platform" msgstr "Standard-Betriebssystem" -#: netbox/dcim/forms/bulk_edit.py:511 netbox/dcim/forms/bulk_edit.py:570 -#: netbox/dcim/forms/filtersets.py:502 netbox/dcim/forms/filtersets.py:622 +#: netbox/dcim/forms/bulk_edit.py:514 netbox/dcim/forms/bulk_edit.py:573 +#: netbox/dcim/forms/filtersets.py:503 netbox/dcim/forms/filtersets.py:623 msgid "Part number" msgstr "Artikelnummer" -#: netbox/dcim/forms/bulk_edit.py:515 +#: netbox/dcim/forms/bulk_edit.py:518 msgid "U height" msgstr "Höheneinheit" -#: netbox/dcim/forms/bulk_edit.py:527 netbox/dcim/tables/devicetypes.py:102 +#: netbox/dcim/forms/bulk_edit.py:530 netbox/dcim/tables/devicetypes.py:107 msgid "Exclude from utilization" msgstr "Von der Nutzung ausschließen" -#: netbox/dcim/forms/bulk_edit.py:556 netbox/dcim/forms/model_forms.py:368 -#: netbox/dcim/tables/devicetypes.py:77 netbox/templates/dcim/device.html:88 +#: netbox/dcim/forms/bulk_edit.py:559 netbox/dcim/forms/model_forms.py:377 +#: netbox/dcim/tables/devicetypes.py:82 netbox/templates/dcim/device.html:88 #: netbox/templates/dcim/devicebay.html:52 #: netbox/templates/dcim/module.html:61 msgid "Device Type" msgstr "Gerätetyp" -#: netbox/dcim/forms/bulk_edit.py:598 netbox/dcim/forms/model_forms.py:401 +#: netbox/dcim/forms/bulk_edit.py:601 netbox/dcim/forms/model_forms.py:410 #: netbox/dcim/tables/modules.py:17 netbox/dcim/tables/modules.py:66 #: netbox/templates/dcim/module.html:65 #: netbox/templates/dcim/modulebay.html:66 -#: netbox/templates/dcim/moduletype.html:22 +#: netbox/templates/dcim/moduletype.html:24 msgid "Module Type" msgstr "Modultyp" -#: netbox/dcim/forms/bulk_edit.py:602 netbox/dcim/forms/model_forms.py:371 -#: netbox/dcim/forms/model_forms.py:402 +#: netbox/dcim/forms/bulk_edit.py:605 netbox/dcim/forms/model_forms.py:380 +#: netbox/dcim/forms/model_forms.py:411 #: netbox/templates/dcim/devicetype.html:11 msgid "Chassis" msgstr "Gehäuse" -#: netbox/dcim/forms/bulk_edit.py:616 netbox/dcim/models/devices.py:484 -#: netbox/dcim/tables/devices.py:67 +#: netbox/dcim/forms/bulk_edit.py:619 netbox/dcim/models/devices.py:483 +#: netbox/dcim/tables/devices.py:78 msgid "VM role" msgstr "VM-Rolle" -#: netbox/dcim/forms/bulk_edit.py:619 netbox/dcim/forms/bulk_edit.py:643 -#: netbox/dcim/forms/bulk_edit.py:726 netbox/dcim/forms/bulk_import.py:456 -#: netbox/dcim/forms/bulk_import.py:460 netbox/dcim/forms/bulk_import.py:479 -#: netbox/dcim/forms/bulk_import.py:483 netbox/dcim/forms/bulk_import.py:608 -#: netbox/dcim/forms/bulk_import.py:612 netbox/dcim/forms/filtersets.py:689 -#: netbox/dcim/forms/filtersets.py:705 netbox/dcim/forms/filtersets.py:823 -#: netbox/dcim/forms/model_forms.py:415 netbox/dcim/forms/model_forms.py:441 -#: netbox/dcim/forms/model_forms.py:555 -#: netbox/virtualization/forms/bulk_import.py:132 -#: netbox/virtualization/forms/bulk_import.py:133 -#: netbox/virtualization/forms/filtersets.py:188 -#: netbox/virtualization/forms/model_forms.py:215 +#: netbox/dcim/forms/bulk_edit.py:622 netbox/dcim/forms/bulk_edit.py:646 +#: netbox/dcim/forms/bulk_edit.py:729 netbox/dcim/forms/bulk_import.py:461 +#: netbox/dcim/forms/bulk_import.py:465 netbox/dcim/forms/bulk_import.py:484 +#: netbox/dcim/forms/bulk_import.py:488 netbox/dcim/forms/bulk_import.py:613 +#: netbox/dcim/forms/bulk_import.py:617 netbox/dcim/forms/filtersets.py:690 +#: netbox/dcim/forms/filtersets.py:706 netbox/dcim/forms/filtersets.py:824 +#: netbox/dcim/forms/model_forms.py:424 netbox/dcim/forms/model_forms.py:451 +#: netbox/dcim/forms/model_forms.py:566 +#: netbox/virtualization/forms/bulk_import.py:138 +#: netbox/virtualization/forms/bulk_import.py:139 +#: netbox/virtualization/forms/filtersets.py:193 +#: netbox/virtualization/forms/model_forms.py:222 msgid "Config template" msgstr "Konfigurationsvorlage" -#: netbox/dcim/forms/bulk_edit.py:667 netbox/dcim/forms/bulk_edit.py:1076 -#: netbox/dcim/forms/bulk_import.py:514 netbox/dcim/forms/filtersets.py:114 -#: netbox/dcim/forms/model_forms.py:501 netbox/dcim/forms/model_forms.py:872 -#: netbox/dcim/forms/model_forms.py:889 netbox/extras/filtersets.py:547 +#: netbox/dcim/forms/bulk_edit.py:670 netbox/dcim/forms/bulk_edit.py:1079 +#: netbox/dcim/forms/bulk_import.py:519 netbox/dcim/forms/filtersets.py:115 +#: netbox/dcim/forms/model_forms.py:511 netbox/dcim/forms/model_forms.py:884 +#: netbox/dcim/forms/model_forms.py:901 netbox/extras/filtersets.py:547 msgid "Device type" msgstr "Gerätetyp" -#: netbox/dcim/forms/bulk_edit.py:678 netbox/dcim/forms/bulk_import.py:495 -#: netbox/dcim/forms/filtersets.py:119 netbox/dcim/forms/model_forms.py:509 +#: netbox/dcim/forms/bulk_edit.py:681 netbox/dcim/forms/bulk_import.py:500 +#: netbox/dcim/forms/filtersets.py:120 netbox/dcim/forms/model_forms.py:519 msgid "Device role" msgstr "Geräterolle" -#: netbox/dcim/forms/bulk_edit.py:701 netbox/dcim/forms/bulk_import.py:520 -#: netbox/dcim/forms/filtersets.py:796 netbox/dcim/forms/model_forms.py:451 -#: netbox/dcim/forms/model_forms.py:513 netbox/dcim/tables/devices.py:182 +#: netbox/dcim/forms/bulk_edit.py:704 netbox/dcim/forms/bulk_import.py:525 +#: netbox/dcim/forms/filtersets.py:797 netbox/dcim/forms/model_forms.py:461 +#: netbox/dcim/forms/model_forms.py:524 netbox/dcim/tables/devices.py:193 #: netbox/extras/filtersets.py:563 netbox/templates/dcim/device.html:186 #: netbox/templates/dcim/platform.html:26 #: netbox/templates/virtualization/virtualmachine.html:27 -#: netbox/virtualization/forms/bulk_edit.py:160 -#: netbox/virtualization/forms/bulk_import.py:122 -#: netbox/virtualization/forms/filtersets.py:168 -#: netbox/virtualization/forms/model_forms.py:203 -#: netbox/virtualization/tables/virtualmachines.py:79 +#: netbox/virtualization/forms/bulk_edit.py:142 +#: netbox/virtualization/forms/bulk_import.py:128 +#: netbox/virtualization/forms/filtersets.py:173 +#: netbox/virtualization/forms/model_forms.py:210 +#: netbox/virtualization/tables/virtualmachines.py:49 msgid "Platform" msgstr "Betriebssystem" -#: netbox/dcim/forms/bulk_edit.py:731 netbox/dcim/forms/bulk_import.py:539 -#: netbox/dcim/forms/filtersets.py:728 netbox/dcim/forms/filtersets.py:898 -#: netbox/dcim/forms/model_forms.py:522 netbox/dcim/tables/devices.py:202 -#: netbox/extras/filtersets.py:596 netbox/extras/forms/filtersets.py:322 -#: netbox/ipam/forms/filtersets.py:415 netbox/ipam/forms/filtersets.py:447 +#: netbox/dcim/forms/bulk_edit.py:734 netbox/dcim/forms/bulk_import.py:544 +#: netbox/dcim/forms/filtersets.py:729 netbox/dcim/forms/filtersets.py:899 +#: netbox/dcim/forms/model_forms.py:533 netbox/dcim/tables/devices.py:213 +#: netbox/extras/filtersets.py:596 netbox/extras/forms/filtersets.py:329 +#: netbox/ipam/forms/filtersets.py:418 netbox/ipam/forms/filtersets.py:450 #: netbox/templates/dcim/device.html:239 #: netbox/templates/virtualization/cluster.html:10 #: netbox/templates/virtualization/virtualmachine.html:92 #: netbox/templates/virtualization/virtualmachine.html:101 -#: netbox/virtualization/filtersets.py:157 -#: netbox/virtualization/filtersets.py:277 -#: netbox/virtualization/forms/bulk_edit.py:129 -#: netbox/virtualization/forms/bulk_import.py:92 -#: netbox/virtualization/forms/filtersets.py:99 -#: netbox/virtualization/forms/filtersets.py:123 -#: netbox/virtualization/forms/filtersets.py:204 -#: netbox/virtualization/forms/model_forms.py:79 -#: netbox/virtualization/forms/model_forms.py:176 -#: netbox/virtualization/tables/virtualmachines.py:67 +#: netbox/virtualization/filtersets.py:123 +#: netbox/virtualization/filtersets.py:243 +#: netbox/virtualization/forms/bulk_edit.py:111 +#: netbox/virtualization/forms/bulk_import.py:98 +#: netbox/virtualization/forms/filtersets.py:104 +#: netbox/virtualization/forms/filtersets.py:128 +#: netbox/virtualization/forms/filtersets.py:209 +#: netbox/virtualization/forms/model_forms.py:78 +#: netbox/virtualization/forms/model_forms.py:183 +#: netbox/virtualization/tables/virtualmachines.py:37 msgid "Cluster" msgstr "Cluster" -#: netbox/dcim/forms/bulk_edit.py:742 netbox/dcim/forms/bulk_edit.py:1296 -#: netbox/dcim/forms/bulk_edit.py:1693 netbox/dcim/forms/bulk_edit.py:1739 -#: netbox/dcim/forms/bulk_import.py:663 netbox/dcim/forms/bulk_import.py:725 -#: netbox/dcim/forms/bulk_import.py:751 netbox/dcim/forms/bulk_import.py:777 -#: netbox/dcim/forms/bulk_import.py:797 netbox/dcim/forms/bulk_import.py:850 -#: netbox/dcim/forms/bulk_import.py:968 netbox/dcim/forms/bulk_import.py:1016 -#: netbox/dcim/forms/bulk_import.py:1033 netbox/dcim/forms/bulk_import.py:1045 -#: netbox/dcim/forms/bulk_import.py:1093 netbox/dcim/forms/bulk_import.py:1444 -#: netbox/dcim/forms/connections.py:24 netbox/dcim/forms/filtersets.py:131 -#: netbox/dcim/forms/filtersets.py:921 netbox/dcim/forms/filtersets.py:1051 -#: netbox/dcim/forms/filtersets.py:1242 netbox/dcim/forms/filtersets.py:1267 -#: netbox/dcim/forms/filtersets.py:1291 netbox/dcim/forms/filtersets.py:1311 -#: netbox/dcim/forms/filtersets.py:1334 netbox/dcim/forms/filtersets.py:1444 -#: netbox/dcim/forms/filtersets.py:1469 netbox/dcim/forms/filtersets.py:1493 -#: netbox/dcim/forms/filtersets.py:1511 netbox/dcim/forms/filtersets.py:1528 -#: netbox/dcim/forms/filtersets.py:1592 netbox/dcim/forms/filtersets.py:1616 -#: netbox/dcim/forms/filtersets.py:1640 netbox/dcim/forms/model_forms.py:633 -#: netbox/dcim/forms/model_forms.py:849 netbox/dcim/forms/model_forms.py:1215 -#: netbox/dcim/forms/model_forms.py:1671 -#: netbox/dcim/forms/object_create.py:249 netbox/dcim/tables/connections.py:22 -#: netbox/dcim/tables/connections.py:41 netbox/dcim/tables/connections.py:60 -#: netbox/dcim/tables/devices.py:285 netbox/dcim/tables/devices.py:371 -#: netbox/dcim/tables/devices.py:412 netbox/dcim/tables/devices.py:454 -#: netbox/dcim/tables/devices.py:505 netbox/dcim/tables/devices.py:597 -#: netbox/dcim/tables/devices.py:697 netbox/dcim/tables/devices.py:754 -#: netbox/dcim/tables/devices.py:801 netbox/dcim/tables/devices.py:861 -#: netbox/dcim/tables/devices.py:930 netbox/dcim/tables/devices.py:1057 -#: netbox/dcim/tables/modules.py:53 netbox/extras/forms/filtersets.py:321 -#: netbox/ipam/forms/bulk_import.py:304 netbox/ipam/forms/bulk_import.py:505 -#: netbox/ipam/forms/filtersets.py:551 netbox/ipam/forms/model_forms.py:323 -#: netbox/ipam/forms/model_forms.py:712 netbox/ipam/forms/model_forms.py:745 -#: netbox/ipam/forms/model_forms.py:771 netbox/ipam/tables/vlans.py:180 -#: netbox/templates/dcim/consoleport.html:20 -#: netbox/templates/dcim/consoleserverport.html:20 -#: netbox/templates/dcim/device.html:15 netbox/templates/dcim/device.html:130 -#: netbox/templates/dcim/device_edit.html:10 -#: netbox/templates/dcim/devicebay.html:20 -#: netbox/templates/dcim/devicebay.html:48 -#: netbox/templates/dcim/frontport.html:20 -#: netbox/templates/dcim/interface.html:30 -#: netbox/templates/dcim/interface.html:161 -#: netbox/templates/dcim/inventoryitem.html:20 -#: netbox/templates/dcim/module.html:57 -#: netbox/templates/dcim/modulebay.html:20 -#: netbox/templates/dcim/poweroutlet.html:20 -#: netbox/templates/dcim/powerport.html:20 -#: netbox/templates/dcim/rearport.html:20 -#: netbox/templates/dcim/virtualchassis.html:65 -#: netbox/templates/dcim/virtualchassis_edit.html:51 -#: netbox/templates/dcim/virtualdevicecontext.html:22 -#: netbox/templates/virtualization/virtualmachine.html:114 -#: netbox/templates/vpn/tunneltermination.html:23 -#: netbox/templates/wireless/inc/wirelesslink_interface.html:6 -#: netbox/virtualization/filtersets.py:167 -#: netbox/virtualization/forms/bulk_edit.py:137 -#: netbox/virtualization/forms/bulk_import.py:99 -#: netbox/virtualization/forms/filtersets.py:128 -#: netbox/virtualization/forms/model_forms.py:185 -#: netbox/virtualization/tables/virtualmachines.py:71 netbox/vpn/choices.py:52 -#: netbox/vpn/forms/bulk_import.py:86 netbox/vpn/forms/bulk_import.py:283 -#: netbox/vpn/forms/filtersets.py:275 netbox/vpn/forms/model_forms.py:90 -#: netbox/vpn/forms/model_forms.py:125 netbox/vpn/forms/model_forms.py:236 -#: netbox/vpn/forms/model_forms.py:453 netbox/wireless/forms/model_forms.py:99 -#: netbox/wireless/forms/model_forms.py:141 -#: netbox/wireless/tables/wirelesslan.py:75 -msgid "Device" -msgstr "Gerät" - -#: netbox/dcim/forms/bulk_edit.py:745 +#: netbox/dcim/forms/bulk_edit.py:748 #: netbox/templates/extras/dashboard/widget_config.html:7 -#: netbox/virtualization/forms/bulk_edit.py:191 +#: netbox/virtualization/forms/bulk_edit.py:173 msgid "Configuration" msgstr "Konfiguration" -#: netbox/dcim/forms/bulk_edit.py:746 netbox/netbox/navigation/menu.py:243 +#: netbox/dcim/forms/bulk_edit.py:749 netbox/netbox/navigation/menu.py:251 #: netbox/templates/dcim/device_edit.html:78 msgid "Virtualization" msgstr "Virtualisierung" -#: netbox/dcim/forms/bulk_edit.py:760 netbox/dcim/forms/bulk_import.py:675 -#: netbox/dcim/forms/model_forms.py:647 netbox/dcim/forms/model_forms.py:897 +#: netbox/dcim/forms/bulk_edit.py:763 netbox/dcim/forms/bulk_import.py:680 +#: netbox/dcim/forms/model_forms.py:658 netbox/dcim/forms/model_forms.py:909 msgid "Module type" msgstr "Modultyp" -#: netbox/dcim/forms/bulk_edit.py:814 netbox/dcim/forms/bulk_edit.py:999 -#: netbox/dcim/forms/bulk_edit.py:1018 netbox/dcim/forms/bulk_edit.py:1041 -#: netbox/dcim/forms/bulk_edit.py:1083 netbox/dcim/forms/bulk_edit.py:1127 -#: netbox/dcim/forms/bulk_edit.py:1178 netbox/dcim/forms/bulk_edit.py:1205 -#: netbox/dcim/forms/bulk_edit.py:1232 netbox/dcim/forms/bulk_edit.py:1250 -#: netbox/dcim/forms/bulk_edit.py:1268 netbox/dcim/forms/filtersets.py:67 +#: netbox/dcim/forms/bulk_edit.py:817 netbox/dcim/forms/bulk_edit.py:1002 +#: netbox/dcim/forms/bulk_edit.py:1021 netbox/dcim/forms/bulk_edit.py:1044 +#: netbox/dcim/forms/bulk_edit.py:1086 netbox/dcim/forms/bulk_edit.py:1130 +#: netbox/dcim/forms/bulk_edit.py:1181 netbox/dcim/forms/bulk_edit.py:1208 +#: netbox/dcim/forms/bulk_edit.py:1235 netbox/dcim/forms/bulk_edit.py:1253 +#: netbox/dcim/forms/bulk_edit.py:1271 netbox/dcim/forms/filtersets.py:68 #: netbox/dcim/forms/object_create.py:46 netbox/templates/dcim/cable.html:32 #: netbox/templates/dcim/consoleport.html:32 #: netbox/templates/dcim/consoleserverport.html:32 @@ -3930,109 +4320,109 @@ msgstr "Modultyp" msgid "Label" msgstr "Label" -#: netbox/dcim/forms/bulk_edit.py:823 netbox/dcim/forms/filtersets.py:1068 +#: netbox/dcim/forms/bulk_edit.py:826 netbox/dcim/forms/filtersets.py:1069 #: netbox/templates/dcim/cable.html:50 msgid "Length" msgstr "Länge" -#: netbox/dcim/forms/bulk_edit.py:828 netbox/dcim/forms/bulk_import.py:1248 -#: netbox/dcim/forms/bulk_import.py:1251 netbox/dcim/forms/filtersets.py:1072 +#: netbox/dcim/forms/bulk_edit.py:831 netbox/dcim/forms/bulk_import.py:1345 +#: netbox/dcim/forms/bulk_import.py:1348 netbox/dcim/forms/filtersets.py:1073 msgid "Length unit" msgstr "Längeneinheit" -#: netbox/dcim/forms/bulk_edit.py:852 +#: netbox/dcim/forms/bulk_edit.py:855 #: netbox/templates/dcim/virtualchassis.html:23 msgid "Domain" msgstr "Domäne" -#: netbox/dcim/forms/bulk_edit.py:920 netbox/dcim/forms/bulk_import.py:1367 -#: netbox/dcim/forms/filtersets.py:1158 netbox/dcim/forms/model_forms.py:750 +#: netbox/dcim/forms/bulk_edit.py:923 netbox/dcim/forms/bulk_import.py:1464 +#: netbox/dcim/forms/filtersets.py:1159 netbox/dcim/forms/model_forms.py:761 msgid "Power panel" msgstr "Stromverteiler" -#: netbox/dcim/forms/bulk_edit.py:942 netbox/dcim/forms/bulk_import.py:1403 -#: netbox/dcim/forms/filtersets.py:1180 +#: netbox/dcim/forms/bulk_edit.py:945 netbox/dcim/forms/bulk_import.py:1500 +#: netbox/dcim/forms/filtersets.py:1181 #: netbox/templates/dcim/powerfeed.html:83 msgid "Supply" msgstr "Versorgung" -#: netbox/dcim/forms/bulk_edit.py:948 netbox/dcim/forms/bulk_import.py:1408 -#: netbox/dcim/forms/filtersets.py:1185 +#: netbox/dcim/forms/bulk_edit.py:951 netbox/dcim/forms/bulk_import.py:1505 +#: netbox/dcim/forms/filtersets.py:1186 #: netbox/templates/dcim/powerfeed.html:95 msgid "Phase" msgstr "Phase" -#: netbox/dcim/forms/bulk_edit.py:954 netbox/dcim/forms/filtersets.py:1190 +#: netbox/dcim/forms/bulk_edit.py:957 netbox/dcim/forms/filtersets.py:1191 #: netbox/templates/dcim/powerfeed.html:87 msgid "Voltage" msgstr "Spannung" -#: netbox/dcim/forms/bulk_edit.py:958 netbox/dcim/forms/filtersets.py:1194 +#: netbox/dcim/forms/bulk_edit.py:961 netbox/dcim/forms/filtersets.py:1195 #: netbox/templates/dcim/powerfeed.html:91 msgid "Amperage" msgstr "Stromstärke" -#: netbox/dcim/forms/bulk_edit.py:962 netbox/dcim/forms/filtersets.py:1198 +#: netbox/dcim/forms/bulk_edit.py:965 netbox/dcim/forms/filtersets.py:1199 msgid "Max utilization" msgstr "Max. Auslastung" -#: netbox/dcim/forms/bulk_edit.py:1051 +#: netbox/dcim/forms/bulk_edit.py:1054 msgid "Maximum draw" msgstr "Maximale Auslastung" -#: netbox/dcim/forms/bulk_edit.py:1054 -#: netbox/dcim/models/device_component_templates.py:282 -#: netbox/dcim/models/device_components.py:356 +#: netbox/dcim/forms/bulk_edit.py:1057 +#: netbox/dcim/models/device_component_templates.py:281 +#: netbox/dcim/models/device_components.py:349 msgid "Maximum power draw (watts)" msgstr "Maximale Leistungsaufnahme (Watt)" -#: netbox/dcim/forms/bulk_edit.py:1057 +#: netbox/dcim/forms/bulk_edit.py:1060 msgid "Allocated draw" msgstr "Zugewiesene Leistungsaufnahme" -#: netbox/dcim/forms/bulk_edit.py:1060 -#: netbox/dcim/models/device_component_templates.py:289 -#: netbox/dcim/models/device_components.py:363 +#: netbox/dcim/forms/bulk_edit.py:1063 +#: netbox/dcim/models/device_component_templates.py:288 +#: netbox/dcim/models/device_components.py:356 msgid "Allocated power draw (watts)" msgstr "Zugewiesene Leistungsaufnahme (Watt)" -#: netbox/dcim/forms/bulk_edit.py:1093 netbox/dcim/forms/bulk_import.py:808 -#: netbox/dcim/forms/model_forms.py:960 netbox/dcim/forms/model_forms.py:1285 -#: netbox/dcim/forms/model_forms.py:1574 netbox/dcim/forms/object_import.py:55 +#: netbox/dcim/forms/bulk_edit.py:1096 netbox/dcim/forms/bulk_import.py:813 +#: netbox/dcim/forms/model_forms.py:972 netbox/dcim/forms/model_forms.py:1301 +#: netbox/dcim/forms/model_forms.py:1616 netbox/dcim/forms/object_import.py:55 msgid "Power port" msgstr "Stromanschluss" -#: netbox/dcim/forms/bulk_edit.py:1098 netbox/dcim/forms/bulk_import.py:815 +#: netbox/dcim/forms/bulk_edit.py:1101 netbox/dcim/forms/bulk_import.py:820 msgid "Feed leg" msgstr "Phasenlage" -#: netbox/dcim/forms/bulk_edit.py:1144 netbox/dcim/forms/bulk_edit.py:1462 +#: netbox/dcim/forms/bulk_edit.py:1147 netbox/dcim/forms/bulk_edit.py:1465 msgid "Management only" msgstr "Nur Management" -#: netbox/dcim/forms/bulk_edit.py:1154 netbox/dcim/forms/bulk_edit.py:1468 -#: netbox/dcim/forms/bulk_import.py:898 netbox/dcim/forms/filtersets.py:1394 +#: netbox/dcim/forms/bulk_edit.py:1157 netbox/dcim/forms/bulk_edit.py:1471 +#: netbox/dcim/forms/bulk_import.py:906 netbox/dcim/forms/filtersets.py:1399 #: netbox/dcim/forms/object_import.py:90 -#: netbox/dcim/models/device_component_templates.py:437 -#: netbox/dcim/models/device_components.py:670 +#: netbox/dcim/models/device_component_templates.py:445 +#: netbox/dcim/models/device_components.py:721 msgid "PoE mode" msgstr "PoE-Modus" -#: netbox/dcim/forms/bulk_edit.py:1160 netbox/dcim/forms/bulk_edit.py:1474 -#: netbox/dcim/forms/bulk_import.py:904 netbox/dcim/forms/filtersets.py:1399 +#: netbox/dcim/forms/bulk_edit.py:1163 netbox/dcim/forms/bulk_edit.py:1477 +#: netbox/dcim/forms/bulk_import.py:912 netbox/dcim/forms/filtersets.py:1404 #: netbox/dcim/forms/object_import.py:95 -#: netbox/dcim/models/device_component_templates.py:443 -#: netbox/dcim/models/device_components.py:676 +#: netbox/dcim/models/device_component_templates.py:452 +#: netbox/dcim/models/device_components.py:728 msgid "PoE type" msgstr "PoE-Typ" -#: netbox/dcim/forms/bulk_edit.py:1166 netbox/dcim/forms/filtersets.py:1404 +#: netbox/dcim/forms/bulk_edit.py:1169 netbox/dcim/forms/filtersets.py:1409 #: netbox/dcim/forms/object_import.py:100 msgid "Wireless role" msgstr "WLAN Funktion" -#: netbox/dcim/forms/bulk_edit.py:1303 netbox/dcim/forms/model_forms.py:669 -#: netbox/dcim/forms/model_forms.py:1230 netbox/dcim/tables/devices.py:313 +#: netbox/dcim/forms/bulk_edit.py:1306 netbox/dcim/forms/model_forms.py:680 +#: netbox/dcim/forms/model_forms.py:1246 netbox/dcim/tables/devices.py:323 #: netbox/templates/dcim/consoleport.html:24 #: netbox/templates/dcim/consoleserverport.html:24 #: netbox/templates/dcim/frontport.html:24 @@ -4046,31 +4436,31 @@ msgstr "WLAN Funktion" msgid "Module" msgstr "Modul" -#: netbox/dcim/forms/bulk_edit.py:1442 netbox/dcim/tables/devices.py:665 -#: netbox/templates/dcim/interface.html:110 +#: netbox/dcim/forms/bulk_edit.py:1445 netbox/dcim/tables/devices.py:699 +#: netbox/templates/dcim/interface.html:116 msgid "LAG" msgstr "LAG" -#: netbox/dcim/forms/bulk_edit.py:1447 netbox/dcim/forms/model_forms.py:1312 +#: netbox/dcim/forms/bulk_edit.py:1450 netbox/dcim/forms/model_forms.py:1328 msgid "Virtual device contexts" msgstr "Virtual Device Contexts" -#: netbox/dcim/forms/bulk_edit.py:1453 netbox/dcim/forms/bulk_import.py:736 -#: netbox/dcim/forms/bulk_import.py:762 netbox/dcim/forms/filtersets.py:1252 -#: netbox/dcim/forms/filtersets.py:1277 netbox/dcim/forms/filtersets.py:1358 -#: netbox/dcim/tables/devices.py:610 -#: netbox/templates/circuits/inc/circuit_termination_fields.html:67 +#: netbox/dcim/forms/bulk_edit.py:1456 netbox/dcim/forms/bulk_import.py:741 +#: netbox/dcim/forms/bulk_import.py:767 netbox/dcim/forms/filtersets.py:1253 +#: netbox/dcim/forms/filtersets.py:1278 netbox/dcim/forms/filtersets.py:1363 +#: netbox/dcim/tables/devices.py:632 +#: netbox/templates/circuits/inc/circuit_termination_fields.html:62 #: netbox/templates/dcim/consoleport.html:40 #: netbox/templates/dcim/consoleserverport.html:40 msgid "Speed" msgstr "Geschwindigkeit" -#: netbox/dcim/forms/bulk_edit.py:1482 netbox/dcim/forms/bulk_import.py:907 +#: netbox/dcim/forms/bulk_edit.py:1485 netbox/dcim/forms/bulk_import.py:915 #: netbox/templates/vpn/ikepolicy.html:25 #: netbox/templates/vpn/ipsecprofile.html:21 #: netbox/templates/vpn/ipsecprofile.html:48 -#: netbox/virtualization/forms/bulk_edit.py:233 -#: netbox/virtualization/forms/bulk_import.py:165 +#: netbox/virtualization/forms/bulk_edit.py:215 +#: netbox/virtualization/forms/bulk_import.py:171 #: netbox/vpn/forms/bulk_edit.py:146 netbox/vpn/forms/bulk_edit.py:232 #: netbox/vpn/forms/bulk_import.py:176 netbox/vpn/forms/bulk_import.py:234 #: netbox/vpn/forms/filtersets.py:135 netbox/vpn/forms/filtersets.py:178 @@ -4079,302 +4469,308 @@ msgstr "Geschwindigkeit" msgid "Mode" msgstr "Modus" -#: netbox/dcim/forms/bulk_edit.py:1490 netbox/dcim/forms/model_forms.py:1361 -#: netbox/ipam/forms/bulk_import.py:178 netbox/ipam/forms/filtersets.py:498 -#: netbox/ipam/models/vlans.py:84 netbox/virtualization/forms/bulk_edit.py:240 -#: netbox/virtualization/forms/model_forms.py:321 +#: netbox/dcim/forms/bulk_edit.py:1493 netbox/dcim/forms/model_forms.py:1377 +#: netbox/ipam/forms/bulk_import.py:174 netbox/ipam/forms/filtersets.py:539 +#: netbox/ipam/models/vlans.py:86 netbox/virtualization/forms/bulk_edit.py:222 +#: netbox/virtualization/forms/model_forms.py:335 msgid "VLAN group" msgstr "VLAN-Gruppe" -#: netbox/dcim/forms/bulk_edit.py:1499 netbox/dcim/forms/model_forms.py:1367 -#: netbox/dcim/tables/devices.py:579 -#: netbox/virtualization/forms/bulk_edit.py:248 -#: netbox/virtualization/forms/model_forms.py:326 +#: netbox/dcim/forms/bulk_edit.py:1502 netbox/dcim/forms/model_forms.py:1383 +#: netbox/dcim/tables/devices.py:593 +#: netbox/virtualization/forms/bulk_edit.py:230 +#: netbox/virtualization/forms/model_forms.py:340 msgid "Untagged VLAN" msgstr "Untagged VLAN" -#: netbox/dcim/forms/bulk_edit.py:1508 netbox/dcim/forms/model_forms.py:1376 -#: netbox/dcim/tables/devices.py:585 -#: netbox/virtualization/forms/bulk_edit.py:256 -#: netbox/virtualization/forms/model_forms.py:335 +#: netbox/dcim/forms/bulk_edit.py:1511 netbox/dcim/forms/model_forms.py:1392 +#: netbox/dcim/tables/devices.py:599 +#: netbox/virtualization/forms/bulk_edit.py:238 +#: netbox/virtualization/forms/model_forms.py:349 msgid "Tagged VLANs" msgstr "Getaggte VLANs" -#: netbox/dcim/forms/bulk_edit.py:1511 +#: netbox/dcim/forms/bulk_edit.py:1514 msgid "Add tagged VLANs" msgstr "Hinzufügen eines getaggten VLANs" -#: netbox/dcim/forms/bulk_edit.py:1520 +#: netbox/dcim/forms/bulk_edit.py:1523 msgid "Remove tagged VLANs" msgstr "Getaggte VLANs entfernen" -#: netbox/dcim/forms/bulk_edit.py:1536 netbox/dcim/forms/model_forms.py:1348 +#: netbox/dcim/forms/bulk_edit.py:1534 netbox/dcim/forms/model_forms.py:1401 +#: netbox/virtualization/forms/model_forms.py:358 +msgid "Q-in-Q Service VLAN" +msgstr "Q-in-Q-Dienst-VLAN" + +#: netbox/dcim/forms/bulk_edit.py:1549 netbox/dcim/forms/model_forms.py:1364 msgid "Wireless LAN group" msgstr "WLAN-Gruppe" -#: netbox/dcim/forms/bulk_edit.py:1541 netbox/dcim/forms/model_forms.py:1353 -#: netbox/dcim/tables/devices.py:619 netbox/netbox/navigation/menu.py:146 -#: netbox/templates/dcim/interface.html:280 +#: netbox/dcim/forms/bulk_edit.py:1554 netbox/dcim/forms/model_forms.py:1369 +#: netbox/dcim/tables/devices.py:641 netbox/netbox/navigation/menu.py:152 +#: netbox/templates/dcim/interface.html:337 #: netbox/wireless/tables/wirelesslan.py:24 msgid "Wireless LANs" msgstr "WLANs" -#: netbox/dcim/forms/bulk_edit.py:1550 netbox/dcim/forms/filtersets.py:1328 -#: netbox/dcim/forms/model_forms.py:1397 netbox/ipam/forms/bulk_edit.py:286 -#: netbox/ipam/forms/bulk_edit.py:378 netbox/ipam/forms/filtersets.py:169 -#: netbox/templates/dcim/interface.html:122 -#: netbox/templates/ipam/prefix.html:95 -#: netbox/virtualization/forms/model_forms.py:349 +#: netbox/dcim/forms/bulk_edit.py:1563 netbox/dcim/forms/filtersets.py:1333 +#: netbox/dcim/forms/model_forms.py:1435 netbox/ipam/forms/bulk_edit.py:269 +#: netbox/ipam/forms/bulk_edit.py:362 netbox/ipam/forms/filtersets.py:171 +#: netbox/netbox/navigation/menu.py:108 +#: netbox/templates/dcim/interface.html:128 +#: netbox/templates/ipam/prefix.html:91 +#: netbox/templates/virtualization/vminterface.html:70 +#: netbox/virtualization/forms/model_forms.py:378 msgid "Addressing" msgstr "Adressierung" -#: netbox/dcim/forms/bulk_edit.py:1551 netbox/dcim/forms/filtersets.py:720 -#: netbox/dcim/forms/model_forms.py:1398 -#: netbox/virtualization/forms/model_forms.py:350 +#: netbox/dcim/forms/bulk_edit.py:1564 netbox/dcim/forms/filtersets.py:721 +#: netbox/dcim/forms/model_forms.py:1436 +#: netbox/virtualization/forms/model_forms.py:379 msgid "Operation" msgstr "Dienst / Port" -#: netbox/dcim/forms/bulk_edit.py:1552 netbox/dcim/forms/filtersets.py:1329 -#: netbox/dcim/forms/model_forms.py:994 netbox/dcim/forms/model_forms.py:1400 +#: netbox/dcim/forms/bulk_edit.py:1565 netbox/dcim/forms/filtersets.py:1334 +#: netbox/dcim/forms/model_forms.py:1006 netbox/dcim/forms/model_forms.py:1438 msgid "PoE" msgstr "PoE" -#: netbox/dcim/forms/bulk_edit.py:1553 netbox/dcim/forms/model_forms.py:1399 -#: netbox/templates/dcim/interface.html:99 -#: netbox/virtualization/forms/bulk_edit.py:267 -#: netbox/virtualization/forms/model_forms.py:351 +#: netbox/dcim/forms/bulk_edit.py:1566 netbox/dcim/forms/model_forms.py:1437 +#: netbox/templates/dcim/interface.html:105 +#: netbox/virtualization/forms/bulk_edit.py:254 +#: netbox/virtualization/forms/model_forms.py:380 msgid "Related Interfaces" msgstr "Verwandte Schnittstellen" -#: netbox/dcim/forms/bulk_edit.py:1554 netbox/dcim/forms/model_forms.py:1401 -#: netbox/virtualization/forms/bulk_edit.py:268 -#: netbox/virtualization/forms/model_forms.py:352 +#: netbox/dcim/forms/bulk_edit.py:1568 netbox/dcim/forms/model_forms.py:1441 +#: netbox/virtualization/forms/bulk_edit.py:257 +#: netbox/virtualization/forms/model_forms.py:383 msgid "802.1Q Switching" msgstr "802.1Q-Switching" -#: netbox/dcim/forms/bulk_edit.py:1558 +#: netbox/dcim/forms/bulk_edit.py:1573 msgid "Add/Remove" msgstr "Hinzufügen/Entfernen" -#: netbox/dcim/forms/bulk_edit.py:1617 netbox/dcim/forms/bulk_edit.py:1619 +#: netbox/dcim/forms/bulk_edit.py:1632 netbox/dcim/forms/bulk_edit.py:1634 msgid "Interface mode must be specified to assign VLANs" msgstr "Der Schnittstellenmodus muss gesetzt werden, um VLANs zuzuweisen" -#: netbox/dcim/forms/bulk_edit.py:1624 netbox/dcim/forms/common.py:50 +#: netbox/dcim/forms/bulk_edit.py:1639 msgid "An access interface cannot have tagged VLANs assigned." msgstr "" "Einer Endgeräteschnittstelle (Access) können keine getaggten VLANs " "zugewiesen sein." -#: netbox/dcim/forms/bulk_import.py:64 +#: netbox/dcim/forms/bulk_import.py:66 msgid "Name of parent region" msgstr "Name der übergeordneten Region" -#: netbox/dcim/forms/bulk_import.py:78 +#: netbox/dcim/forms/bulk_import.py:80 msgid "Name of parent site group" msgstr "Name der übergeordneten Standortgruppe" -#: netbox/dcim/forms/bulk_import.py:97 +#: netbox/dcim/forms/bulk_import.py:99 msgid "Assigned region" msgstr "Zugewiesene Region" -#: netbox/dcim/forms/bulk_import.py:104 netbox/tenancy/forms/bulk_import.py:44 +#: netbox/dcim/forms/bulk_import.py:106 netbox/tenancy/forms/bulk_import.py:44 #: netbox/tenancy/forms/bulk_import.py:85 -#: netbox/wireless/forms/bulk_import.py:40 +#: netbox/wireless/forms/bulk_import.py:42 msgid "Assigned group" msgstr "Zugewiesene Gruppe" -#: netbox/dcim/forms/bulk_import.py:123 +#: netbox/dcim/forms/bulk_import.py:125 msgid "available options" msgstr "verfügbare Optionen" -#: netbox/dcim/forms/bulk_import.py:134 netbox/dcim/forms/bulk_import.py:565 -#: netbox/dcim/forms/bulk_import.py:1364 netbox/ipam/forms/bulk_import.py:175 -#: netbox/ipam/forms/bulk_import.py:457 -#: netbox/virtualization/forms/bulk_import.py:63 -#: netbox/virtualization/forms/bulk_import.py:89 +#: netbox/dcim/forms/bulk_import.py:136 netbox/dcim/forms/bulk_import.py:570 +#: netbox/dcim/forms/bulk_import.py:1461 netbox/ipam/forms/bulk_import.py:456 +#: netbox/virtualization/forms/bulk_import.py:64 +#: netbox/virtualization/forms/bulk_import.py:95 msgid "Assigned site" msgstr "Zugewiesener Standort" -#: netbox/dcim/forms/bulk_import.py:141 +#: netbox/dcim/forms/bulk_import.py:143 msgid "Parent location" msgstr "Übergeordnete Lokation" -#: netbox/dcim/forms/bulk_import.py:143 +#: netbox/dcim/forms/bulk_import.py:145 msgid "Location not found." msgstr "Lokation wurde nicht gefunden." -#: netbox/dcim/forms/bulk_import.py:185 +#: netbox/dcim/forms/bulk_import.py:187 msgid "The manufacturer of this rack type" msgstr "Der Hersteller dieses Racktyps" -#: netbox/dcim/forms/bulk_import.py:196 +#: netbox/dcim/forms/bulk_import.py:198 msgid "The lowest-numbered position in the rack" msgstr "Die Position mit der niedrigsten Nummer im Rack" -#: netbox/dcim/forms/bulk_import.py:201 netbox/dcim/forms/bulk_import.py:276 +#: netbox/dcim/forms/bulk_import.py:203 netbox/dcim/forms/bulk_import.py:278 msgid "Rail-to-rail width (in inches)" msgstr "Breite von Schiene zu Schiene (in Zoll)" -#: netbox/dcim/forms/bulk_import.py:207 netbox/dcim/forms/bulk_import.py:286 +#: netbox/dcim/forms/bulk_import.py:209 netbox/dcim/forms/bulk_import.py:288 msgid "Unit for outer dimensions" msgstr "Einheit für Außenmaße" -#: netbox/dcim/forms/bulk_import.py:213 netbox/dcim/forms/bulk_import.py:298 +#: netbox/dcim/forms/bulk_import.py:215 netbox/dcim/forms/bulk_import.py:300 msgid "Unit for rack weights" msgstr "Einheit für Rackgewichte" -#: netbox/dcim/forms/bulk_import.py:245 +#: netbox/dcim/forms/bulk_import.py:247 msgid "Name of assigned tenant" msgstr "Name des zugewiesenen Mandanten " -#: netbox/dcim/forms/bulk_import.py:257 +#: netbox/dcim/forms/bulk_import.py:259 msgid "Name of assigned role" msgstr "Name der zugewiesenen Rolle" -#: netbox/dcim/forms/bulk_import.py:264 +#: netbox/dcim/forms/bulk_import.py:266 msgid "Rack type model" msgstr "Racktyp Modell" -#: netbox/dcim/forms/bulk_import.py:292 netbox/dcim/forms/bulk_import.py:435 -#: netbox/dcim/forms/bulk_import.py:605 +#: netbox/dcim/forms/bulk_import.py:294 netbox/dcim/forms/bulk_import.py:437 +#: netbox/dcim/forms/bulk_import.py:610 msgid "Airflow direction" msgstr "Richtung des Luftstroms" -#: netbox/dcim/forms/bulk_import.py:324 +#: netbox/dcim/forms/bulk_import.py:326 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:326 +#: netbox/dcim/forms/bulk_import.py:328 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:334 +#: netbox/dcim/forms/bulk_import.py:336 msgid "Parent site" msgstr "Übergeordneter Standort" -#: netbox/dcim/forms/bulk_import.py:341 netbox/dcim/forms/bulk_import.py:1377 +#: netbox/dcim/forms/bulk_import.py:343 netbox/dcim/forms/bulk_import.py:1474 msgid "Rack's location (if any)" msgstr "Lokation des Racks (falls vorhanden)" -#: netbox/dcim/forms/bulk_import.py:350 netbox/dcim/forms/model_forms.py:311 -#: netbox/dcim/tables/racks.py:222 +#: netbox/dcim/forms/bulk_import.py:352 netbox/dcim/forms/model_forms.py:319 +#: netbox/dcim/tables/racks.py:221 #: netbox/templates/dcim/rackreservation.html:12 #: netbox/templates/dcim/rackreservation.html:45 msgid "Units" msgstr "Einheiten" -#: netbox/dcim/forms/bulk_import.py:353 +#: netbox/dcim/forms/bulk_import.py:355 msgid "Comma-separated list of individual unit numbers" msgstr "Kommagetrennte Liste einzelner Einheitennummern" -#: netbox/dcim/forms/bulk_import.py:396 +#: netbox/dcim/forms/bulk_import.py:398 msgid "The manufacturer which produces this device type" msgstr "Der Hersteller, der diesen Gerätetyp herstellt" -#: netbox/dcim/forms/bulk_import.py:403 +#: netbox/dcim/forms/bulk_import.py:405 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:408 +#: netbox/dcim/forms/bulk_import.py:410 msgid "Device weight" msgstr "Gewicht des Geräts" -#: netbox/dcim/forms/bulk_import.py:414 +#: netbox/dcim/forms/bulk_import.py:416 msgid "Unit for device weight" msgstr "Einheit für das Gerätegewicht" -#: netbox/dcim/forms/bulk_import.py:440 +#: netbox/dcim/forms/bulk_import.py:442 msgid "Module weight" msgstr "Gewicht des Moduls" -#: netbox/dcim/forms/bulk_import.py:446 +#: netbox/dcim/forms/bulk_import.py:448 msgid "Unit for module weight" msgstr "Einheit für das Modulgewicht" -#: netbox/dcim/forms/bulk_import.py:476 +#: netbox/dcim/forms/bulk_import.py:481 msgid "Limit platform assignments to this manufacturer" msgstr "Betriebssystem-Zuweisungen auf diesen Hersteller beschränken" -#: netbox/dcim/forms/bulk_import.py:498 netbox/dcim/forms/bulk_import.py:1447 +#: netbox/dcim/forms/bulk_import.py:503 netbox/dcim/forms/bulk_import.py:1544 #: netbox/tenancy/forms/bulk_import.py:106 msgid "Assigned role" msgstr "Zugewiesene Rolle" -#: netbox/dcim/forms/bulk_import.py:511 +#: netbox/dcim/forms/bulk_import.py:516 msgid "Device type manufacturer" msgstr "Gerätetyp Hersteller" -#: netbox/dcim/forms/bulk_import.py:517 +#: netbox/dcim/forms/bulk_import.py:522 msgid "Device type model" msgstr "Gerätetyp Modell" -#: netbox/dcim/forms/bulk_import.py:524 -#: netbox/virtualization/forms/bulk_import.py:126 +#: netbox/dcim/forms/bulk_import.py:529 +#: netbox/virtualization/forms/bulk_import.py:132 msgid "Assigned platform" msgstr "Zugewiesenes Betriebssystem" -#: netbox/dcim/forms/bulk_import.py:532 netbox/dcim/forms/bulk_import.py:536 -#: netbox/dcim/forms/model_forms.py:536 +#: netbox/dcim/forms/bulk_import.py:537 netbox/dcim/forms/bulk_import.py:541 +#: netbox/dcim/forms/model_forms.py:547 msgid "Virtual chassis" msgstr "Virtuelles Gehäuse" -#: netbox/dcim/forms/bulk_import.py:543 +#: netbox/dcim/forms/bulk_import.py:548 msgid "Virtualization cluster" msgstr "Virtualisierungscluster" -#: netbox/dcim/forms/bulk_import.py:572 +#: netbox/dcim/forms/bulk_import.py:577 msgid "Assigned location (if any)" msgstr "Zugewiesene Lokation (falls vorhanden)" -#: netbox/dcim/forms/bulk_import.py:579 +#: netbox/dcim/forms/bulk_import.py:584 msgid "Assigned rack (if any)" msgstr "Zugewiesenes Rack (falls vorhanden)" -#: netbox/dcim/forms/bulk_import.py:582 +#: netbox/dcim/forms/bulk_import.py:587 msgid "Face" msgstr "Ausrichtung" -#: netbox/dcim/forms/bulk_import.py:585 +#: netbox/dcim/forms/bulk_import.py:590 msgid "Mounted rack face" msgstr "Montierte Rackseite" -#: netbox/dcim/forms/bulk_import.py:592 +#: netbox/dcim/forms/bulk_import.py:597 msgid "Parent device (for child devices)" msgstr "Übergeordnetes Gerät (für untergeordnete Geräte)" -#: netbox/dcim/forms/bulk_import.py:595 +#: netbox/dcim/forms/bulk_import.py:600 msgid "Device bay" msgstr "Geräteeinsatz" -#: netbox/dcim/forms/bulk_import.py:599 +#: netbox/dcim/forms/bulk_import.py:604 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:666 +#: netbox/dcim/forms/bulk_import.py:671 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:669 netbox/dcim/forms/model_forms.py:640 +#: netbox/dcim/forms/bulk_import.py:674 netbox/dcim/forms/model_forms.py:651 msgid "Module bay" msgstr "Moduleinsatz" -#: netbox/dcim/forms/bulk_import.py:672 +#: netbox/dcim/forms/bulk_import.py:677 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:678 +#: netbox/dcim/forms/bulk_import.py:683 msgid "The type of module" msgstr "Der Typ des Moduls" -#: netbox/dcim/forms/bulk_import.py:686 netbox/dcim/forms/model_forms.py:656 +#: netbox/dcim/forms/bulk_import.py:691 netbox/dcim/forms/model_forms.py:667 msgid "Replicate components" msgstr "Komponenten replizieren" -#: netbox/dcim/forms/bulk_import.py:688 +#: netbox/dcim/forms/bulk_import.py:693 msgid "" "Automatically populate components associated with this module type (enabled " "by default)" @@ -4382,272 +4778,311 @@ msgstr "" "Automatisches Ausfüllen von Komponenten, die diesem Modultyp zugeordnet sind" " (standardmäßig aktiviert)" -#: netbox/dcim/forms/bulk_import.py:691 netbox/dcim/forms/model_forms.py:662 +#: netbox/dcim/forms/bulk_import.py:696 netbox/dcim/forms/model_forms.py:673 msgid "Adopt components" msgstr "Komponenten übernehmen" -#: netbox/dcim/forms/bulk_import.py:693 netbox/dcim/forms/model_forms.py:665 +#: netbox/dcim/forms/bulk_import.py:698 netbox/dcim/forms/model_forms.py:676 msgid "Adopt already existing components" msgstr "Übernehmen Sie bereits bestehende Komponenten" -#: netbox/dcim/forms/bulk_import.py:733 netbox/dcim/forms/bulk_import.py:759 -#: netbox/dcim/forms/bulk_import.py:785 +#: netbox/dcim/forms/bulk_import.py:738 netbox/dcim/forms/bulk_import.py:764 +#: netbox/dcim/forms/bulk_import.py:790 msgid "Port type" msgstr "Anschlusstyp" -#: netbox/dcim/forms/bulk_import.py:741 netbox/dcim/forms/bulk_import.py:767 +#: netbox/dcim/forms/bulk_import.py:746 netbox/dcim/forms/bulk_import.py:772 msgid "Port speed in bps" msgstr "Anschlussgeschwindigkeit in Bit/s" -#: netbox/dcim/forms/bulk_import.py:805 +#: netbox/dcim/forms/bulk_import.py:810 msgid "Outlet type" msgstr "Ausgangstyp" -#: netbox/dcim/forms/bulk_import.py:812 +#: netbox/dcim/forms/bulk_import.py:817 msgid "Local power port which feeds this outlet" msgstr "Lokaler Stromanschluss, der diese Steckdose speist" -#: netbox/dcim/forms/bulk_import.py:818 +#: netbox/dcim/forms/bulk_import.py:823 msgid "Electrical phase (for three-phase circuits)" msgstr "Elektrische Phase (für dreiphasige Stromkreise)" -#: netbox/dcim/forms/bulk_import.py:859 netbox/dcim/forms/model_forms.py:1323 -#: netbox/virtualization/forms/bulk_import.py:155 -#: netbox/virtualization/forms/model_forms.py:305 +#: netbox/dcim/forms/bulk_import.py:867 netbox/dcim/forms/model_forms.py:1339 +#: netbox/virtualization/forms/bulk_import.py:161 +#: netbox/virtualization/forms/model_forms.py:319 msgid "Parent interface" msgstr "Übergeordnete Schnittstelle" -#: netbox/dcim/forms/bulk_import.py:866 netbox/dcim/forms/model_forms.py:1331 -#: netbox/virtualization/forms/bulk_import.py:162 -#: netbox/virtualization/forms/model_forms.py:313 +#: netbox/dcim/forms/bulk_import.py:874 netbox/dcim/forms/model_forms.py:1347 +#: netbox/virtualization/forms/bulk_import.py:168 +#: netbox/virtualization/forms/model_forms.py:327 msgid "Bridged interface" msgstr "Überbrückte Schnittstelle" -#: netbox/dcim/forms/bulk_import.py:869 +#: netbox/dcim/forms/bulk_import.py:877 msgid "Lag" msgstr "Lag" -#: netbox/dcim/forms/bulk_import.py:873 +#: netbox/dcim/forms/bulk_import.py:881 msgid "Parent LAG interface" msgstr "Übergeordnete LAG-Schnittstelle" -#: netbox/dcim/forms/bulk_import.py:876 +#: netbox/dcim/forms/bulk_import.py:884 msgid "Vdcs" msgstr "Vdcs" -#: netbox/dcim/forms/bulk_import.py:881 +#: netbox/dcim/forms/bulk_import.py:889 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:887 +#: netbox/dcim/forms/bulk_import.py:895 msgid "Physical medium" msgstr "Physikalisches Medium" -#: netbox/dcim/forms/bulk_import.py:890 netbox/dcim/forms/filtersets.py:1365 +#: netbox/dcim/forms/bulk_import.py:898 netbox/dcim/forms/filtersets.py:1370 msgid "Duplex" msgstr "Duplex" -#: netbox/dcim/forms/bulk_import.py:895 +#: netbox/dcim/forms/bulk_import.py:903 msgid "Poe mode" msgstr "PoE-Modus" -#: netbox/dcim/forms/bulk_import.py:901 +#: netbox/dcim/forms/bulk_import.py:909 msgid "Poe type" msgstr "PoE-Typ" -#: netbox/dcim/forms/bulk_import.py:910 -#: netbox/virtualization/forms/bulk_import.py:168 +#: netbox/dcim/forms/bulk_import.py:918 +#: netbox/virtualization/forms/bulk_import.py:174 msgid "IEEE 802.1Q operational mode (for L2 interfaces)" msgstr "IEEE 802.1Q-Betriebsmodus (für L2-Schnittstellen)" -#: netbox/dcim/forms/bulk_import.py:917 netbox/ipam/forms/bulk_import.py:161 -#: netbox/ipam/forms/bulk_import.py:247 netbox/ipam/forms/bulk_import.py:283 -#: netbox/ipam/forms/filtersets.py:201 netbox/ipam/forms/filtersets.py:277 -#: netbox/ipam/forms/filtersets.py:336 -#: netbox/virtualization/forms/bulk_import.py:175 +#: netbox/dcim/forms/bulk_import.py:925 netbox/ipam/forms/bulk_import.py:164 +#: netbox/ipam/forms/bulk_import.py:246 netbox/ipam/forms/bulk_import.py:282 +#: netbox/ipam/forms/filtersets.py:203 netbox/ipam/forms/filtersets.py:280 +#: netbox/ipam/forms/filtersets.py:339 +#: netbox/virtualization/forms/bulk_import.py:181 msgid "Assigned VRF" msgstr "Zugewiesenes VRF" -#: netbox/dcim/forms/bulk_import.py:920 +#: netbox/dcim/forms/bulk_import.py:928 msgid "Rf role" msgstr "Rf-Rolle" -#: netbox/dcim/forms/bulk_import.py:923 +#: netbox/dcim/forms/bulk_import.py:931 msgid "Wireless role (AP/station)" msgstr "WLAN Rolle (AP/Station)" -#: netbox/dcim/forms/bulk_import.py:959 +#: netbox/dcim/forms/bulk_import.py:967 #, 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:973 netbox/dcim/forms/model_forms.py:1007 -#: netbox/dcim/forms/model_forms.py:1582 +#: netbox/dcim/forms/bulk_import.py:981 netbox/dcim/forms/model_forms.py:1020 +#: netbox/dcim/forms/model_forms.py:1624 #: netbox/dcim/forms/object_import.py:117 msgid "Rear port" msgstr "Rückseitenanschluss" -#: netbox/dcim/forms/bulk_import.py:976 +#: netbox/dcim/forms/bulk_import.py:984 msgid "Corresponding rear port" msgstr "Entsprechender Rückanschluss" -#: netbox/dcim/forms/bulk_import.py:981 netbox/dcim/forms/bulk_import.py:1022 -#: netbox/dcim/forms/bulk_import.py:1238 +#: netbox/dcim/forms/bulk_import.py:989 netbox/dcim/forms/bulk_import.py:1030 +#: netbox/dcim/forms/bulk_import.py:1335 msgid "Physical medium classification" msgstr "Klassifizierung des physikalischen Mediums" -#: netbox/dcim/forms/bulk_import.py:1050 netbox/dcim/tables/devices.py:822 +#: netbox/dcim/forms/bulk_import.py:1058 netbox/dcim/tables/devices.py:854 msgid "Installed device" msgstr "Installiertes Gerät" -#: netbox/dcim/forms/bulk_import.py:1054 +#: netbox/dcim/forms/bulk_import.py:1062 msgid "Child device installed within this bay" msgstr "In diesem Schacht installiertes untergeordnetes Gerät" -#: netbox/dcim/forms/bulk_import.py:1056 +#: netbox/dcim/forms/bulk_import.py:1064 msgid "Child device not found." msgstr "Untergeordnetes Gerät wurde nicht gefunden." -#: netbox/dcim/forms/bulk_import.py:1114 +#: netbox/dcim/forms/bulk_import.py:1122 msgid "Parent inventory item" msgstr "Artikel aus dem übergeordneten Inventar" -#: netbox/dcim/forms/bulk_import.py:1117 +#: netbox/dcim/forms/bulk_import.py:1125 msgid "Component type" msgstr "Komponententyp" -#: netbox/dcim/forms/bulk_import.py:1121 +#: netbox/dcim/forms/bulk_import.py:1129 msgid "Component Type" msgstr "Komponententyp" -#: netbox/dcim/forms/bulk_import.py:1124 +#: netbox/dcim/forms/bulk_import.py:1132 msgid "Compnent name" msgstr "Name der Komponente" -#: netbox/dcim/forms/bulk_import.py:1126 +#: netbox/dcim/forms/bulk_import.py:1134 msgid "Component Name" msgstr "Name der Komponente" -#: netbox/dcim/forms/bulk_import.py:1168 +#: netbox/dcim/forms/bulk_import.py:1181 #, python-brace-format msgid "Component not found: {device} - {component_name}" msgstr "Komponente wurde nicht gefunden: {device} - {component_name}" -#: netbox/dcim/forms/bulk_import.py:1193 +#: netbox/dcim/forms/bulk_import.py:1209 netbox/ipam/forms/bulk_import.py:307 +msgid "Parent device of assigned interface (if any)" +msgstr "Übergeordnetes Gerät der zugewiesenen Schnittstelle (falls vorhanden)" + +#: netbox/dcim/forms/bulk_import.py:1212 netbox/ipam/forms/bulk_import.py:310 +#: netbox/ipam/forms/bulk_import.py:547 netbox/ipam/forms/model_forms.py:768 +#: netbox/virtualization/filtersets.py:254 +#: netbox/virtualization/filtersets.py:305 +#: netbox/virtualization/forms/bulk_edit.py:182 +#: netbox/virtualization/forms/bulk_edit.py:316 +#: netbox/virtualization/forms/bulk_import.py:152 +#: netbox/virtualization/forms/bulk_import.py:213 +#: netbox/virtualization/forms/filtersets.py:217 +#: netbox/virtualization/forms/filtersets.py:253 +#: netbox/virtualization/forms/model_forms.py:295 +#: netbox/vpn/forms/bulk_import.py:93 netbox/vpn/forms/bulk_import.py:290 +msgid "Virtual machine" +msgstr "Virtuelle Maschine" + +#: netbox/dcim/forms/bulk_import.py:1216 netbox/ipam/forms/bulk_import.py:314 +msgid "Parent VM of assigned interface (if any)" +msgstr "Übergeordnete VM der zugewiesenen Schnittstelle (falls vorhanden)" + +#: netbox/dcim/forms/bulk_import.py:1223 netbox/ipam/filtersets.py:1021 +#: netbox/ipam/forms/bulk_import.py:321 +msgid "Assigned interface" +msgstr "Zugewiesene Schnittstelle" + +#: netbox/dcim/forms/bulk_import.py:1226 netbox/ipam/forms/bulk_import.py:324 +msgid "Is primary" +msgstr "Ist primär" + +#: netbox/dcim/forms/bulk_import.py:1227 +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:1264 +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:1290 msgid "Side A device" msgstr "Gerät Seite A" -#: netbox/dcim/forms/bulk_import.py:1196 netbox/dcim/forms/bulk_import.py:1214 +#: netbox/dcim/forms/bulk_import.py:1293 netbox/dcim/forms/bulk_import.py:1311 msgid "Device name" msgstr "Name des Geräts" -#: netbox/dcim/forms/bulk_import.py:1199 +#: netbox/dcim/forms/bulk_import.py:1296 msgid "Side A type" msgstr "Typ Seite A" -#: netbox/dcim/forms/bulk_import.py:1202 netbox/dcim/forms/bulk_import.py:1220 -msgid "Termination type" -msgstr "Typ des Abschlusspunktes" - -#: netbox/dcim/forms/bulk_import.py:1205 +#: netbox/dcim/forms/bulk_import.py:1302 msgid "Side A name" msgstr "Name der Seite A" -#: netbox/dcim/forms/bulk_import.py:1206 netbox/dcim/forms/bulk_import.py:1224 +#: netbox/dcim/forms/bulk_import.py:1303 netbox/dcim/forms/bulk_import.py:1321 msgid "Termination name" msgstr "Name des Abschlusspunktes" -#: netbox/dcim/forms/bulk_import.py:1211 +#: netbox/dcim/forms/bulk_import.py:1308 msgid "Side B device" msgstr "Gerät Seite B" -#: netbox/dcim/forms/bulk_import.py:1217 +#: netbox/dcim/forms/bulk_import.py:1314 msgid "Side B type" msgstr "Typ Seite B" -#: netbox/dcim/forms/bulk_import.py:1223 +#: netbox/dcim/forms/bulk_import.py:1320 msgid "Side B name" msgstr "Name der Seite B" -#: netbox/dcim/forms/bulk_import.py:1232 -#: netbox/wireless/forms/bulk_import.py:86 +#: netbox/dcim/forms/bulk_import.py:1329 +#: netbox/wireless/forms/bulk_import.py:91 msgid "Connection status" msgstr "Status der Verbindung" -#: netbox/dcim/forms/bulk_import.py:1284 +#: netbox/dcim/forms/bulk_import.py:1381 #, 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:1290 +#: netbox/dcim/forms/bulk_import.py:1387 #, 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:1315 netbox/dcim/forms/model_forms.py:785 -#: netbox/dcim/tables/devices.py:1027 netbox/templates/dcim/device.html:132 +#: netbox/dcim/forms/bulk_import.py:1412 netbox/dcim/forms/model_forms.py:797 +#: netbox/dcim/tables/devices.py:1059 netbox/templates/dcim/device.html:132 #: netbox/templates/dcim/virtualchassis.html:27 #: netbox/templates/dcim/virtualchassis.html:67 msgid "Master" msgstr "Master" -#: netbox/dcim/forms/bulk_import.py:1319 +#: netbox/dcim/forms/bulk_import.py:1416 msgid "Master device" msgstr "Mastergerät" -#: netbox/dcim/forms/bulk_import.py:1336 +#: netbox/dcim/forms/bulk_import.py:1433 msgid "Name of parent site" msgstr "Name des übergeordneten Standorts" -#: netbox/dcim/forms/bulk_import.py:1370 +#: netbox/dcim/forms/bulk_import.py:1467 msgid "Upstream power panel" msgstr "vorgeschalteter Stromverteiler" -#: netbox/dcim/forms/bulk_import.py:1400 +#: netbox/dcim/forms/bulk_import.py:1497 msgid "Primary or redundant" msgstr "Primär oder redundant" -#: netbox/dcim/forms/bulk_import.py:1405 +#: netbox/dcim/forms/bulk_import.py:1502 msgid "Supply type (AC/DC)" msgstr "Versorgungsart (AC/DC)" -#: netbox/dcim/forms/bulk_import.py:1410 +#: netbox/dcim/forms/bulk_import.py:1507 msgid "Single or three-phase" msgstr "Ein- oder Dreiphasig" -#: netbox/dcim/forms/bulk_import.py:1461 netbox/dcim/forms/model_forms.py:1677 +#: netbox/dcim/forms/bulk_import.py:1558 netbox/dcim/forms/model_forms.py:1722 #: netbox/templates/dcim/device.html:190 #: netbox/templates/dcim/virtualdevicecontext.html:30 #: netbox/templates/virtualization/virtualmachine.html:52 msgid "Primary IPv4" msgstr "Primäre IPv4" -#: netbox/dcim/forms/bulk_import.py:1465 +#: netbox/dcim/forms/bulk_import.py:1562 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:1468 netbox/dcim/forms/model_forms.py:1686 +#: netbox/dcim/forms/bulk_import.py:1565 netbox/dcim/forms/model_forms.py:1731 #: netbox/templates/dcim/device.html:206 #: netbox/templates/dcim/virtualdevicecontext.html:41 #: netbox/templates/virtualization/virtualmachine.html:68 msgid "Primary IPv6" msgstr "Primäre IPv6" -#: netbox/dcim/forms/bulk_import.py:1472 +#: netbox/dcim/forms/bulk_import.py:1569 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" -#: netbox/dcim/forms/common.py:24 netbox/dcim/models/device_components.py:527 +#: netbox/dcim/forms/common.py:19 netbox/dcim/models/device_components.py:515 #: netbox/templates/dcim/interface.html:57 -#: netbox/templates/virtualization/vminterface.html:55 -#: netbox/virtualization/forms/bulk_edit.py:225 +#: netbox/templates/virtualization/vminterface.html:51 +#: netbox/virtualization/forms/bulk_edit.py:207 msgid "MTU" msgstr "MTU" -#: netbox/dcim/forms/common.py:65 +#: netbox/dcim/forms/common.py:60 #, python-brace-format msgid "" "The tagged VLANs ({vlans}) must belong to the same site as the interface's " @@ -4657,7 +5092,7 @@ msgstr "" "übergeordnete Gerät/die übergeordnete VM der Schnittstelle, oder sie müssen " "global sein" -#: netbox/dcim/forms/common.py:126 +#: netbox/dcim/forms/common.py:121 msgid "" "Cannot install module with placeholder values in a module bay with no " "position defined." @@ -4665,7 +5100,7 @@ msgstr "" "Das Modul mit Platzhalterwerten kann nicht in einem Modulschacht ohne " "definierte Position installiert werden." -#: netbox/dcim/forms/common.py:131 +#: netbox/dcim/forms/common.py:127 #, python-brace-format msgid "" "Cannot install module with placeholder values in a module bay tree {level} " @@ -4674,18 +5109,18 @@ msgstr "" "Modul mit Platzhalterwerten kann nicht in einem Modul-Baytree installiert " "werden {level} in einem Baum, aber {tokens} Platzhalter angegeben." -#: netbox/dcim/forms/common.py:144 +#: netbox/dcim/forms/common.py:142 #, python-brace-format msgid "Cannot adopt {model} {name} as it already belongs to a module" msgstr "" "Kann nicht {model} {name} aufnehmenm, da es schon zu einem Modul gehört" -#: netbox/dcim/forms/common.py:153 +#: netbox/dcim/forms/common.py:151 #, python-brace-format msgid "A {model} named {name} already exists" msgstr "Ein {model} genannt {name} existiert bereits" -#: netbox/dcim/forms/connections.py:49 netbox/dcim/forms/model_forms.py:738 +#: netbox/dcim/forms/connections.py:49 netbox/dcim/forms/model_forms.py:749 #: netbox/dcim/tables/power.py:66 #: netbox/templates/dcim/inc/cable_termination.html:37 #: netbox/templates/dcim/powerfeed.html:24 @@ -4694,137 +5129,135 @@ msgstr "Ein {model} genannt {name} existiert bereits" msgid "Power Panel" msgstr "Stromverteiler" -#: netbox/dcim/forms/connections.py:58 netbox/dcim/forms/model_forms.py:765 +#: netbox/dcim/forms/connections.py:58 netbox/dcim/forms/model_forms.py:777 #: netbox/templates/dcim/powerfeed.html:21 #: netbox/templates/dcim/powerport.html:80 msgid "Power Feed" msgstr "Stromzufuhr" -#: netbox/dcim/forms/connections.py:81 -msgid "Side" -msgstr "Seite" - -#: netbox/dcim/forms/filtersets.py:136 netbox/dcim/tables/devices.py:295 +#: netbox/dcim/forms/filtersets.py:137 netbox/dcim/tables/devices.py:305 msgid "Device Status" msgstr "Gerätestatus" -#: netbox/dcim/forms/filtersets.py:149 +#: netbox/dcim/forms/filtersets.py:150 msgid "Parent region" msgstr "Übergeordnete Region" -#: netbox/dcim/forms/filtersets.py:163 netbox/tenancy/forms/bulk_import.py:28 +#: netbox/dcim/forms/filtersets.py:164 netbox/tenancy/forms/bulk_import.py:28 #: netbox/tenancy/forms/bulk_import.py:62 #: netbox/tenancy/forms/filtersets.py:33 netbox/tenancy/forms/filtersets.py:62 -#: netbox/wireless/forms/bulk_import.py:25 -#: netbox/wireless/forms/filtersets.py:25 +#: netbox/wireless/forms/bulk_import.py:27 +#: netbox/wireless/forms/filtersets.py:27 msgid "Parent group" msgstr "Übergeordnete Gruppe" -#: netbox/dcim/forms/filtersets.py:242 netbox/templates/dcim/location.html:58 +#: netbox/dcim/forms/filtersets.py:243 netbox/templates/dcim/location.html:58 #: netbox/templates/dcim/site.html:56 msgid "Facility" msgstr "Einrichtung" -#: netbox/dcim/forms/filtersets.py:397 +#: netbox/dcim/forms/filtersets.py:398 msgid "Function" msgstr "Funktion" -#: netbox/dcim/forms/filtersets.py:483 netbox/dcim/forms/model_forms.py:373 +#: netbox/dcim/forms/filtersets.py:484 netbox/dcim/forms/model_forms.py:382 #: netbox/templates/inc/panels/image_attachments.html:6 msgid "Images" msgstr "Bilder" -#: netbox/dcim/forms/filtersets.py:486 netbox/dcim/forms/filtersets.py:611 -#: netbox/dcim/forms/filtersets.py:726 +#: netbox/dcim/forms/filtersets.py:487 netbox/dcim/forms/filtersets.py:612 +#: netbox/dcim/forms/filtersets.py:727 msgid "Components" msgstr "Komponenten" -#: netbox/dcim/forms/filtersets.py:506 +#: netbox/dcim/forms/filtersets.py:507 msgid "Subdevice role" msgstr "Rolle des Untergeräts" -#: netbox/dcim/forms/filtersets.py:790 netbox/dcim/tables/racks.py:54 +#: netbox/dcim/forms/filtersets.py:791 netbox/dcim/tables/racks.py:54 #: netbox/templates/dcim/racktype.html:20 msgid "Model" msgstr "Modell" -#: netbox/dcim/forms/filtersets.py:834 +#: netbox/dcim/forms/filtersets.py:835 msgid "Has an OOB IP" msgstr "Hat eine OOB-IP" -#: netbox/dcim/forms/filtersets.py:841 +#: netbox/dcim/forms/filtersets.py:842 msgid "Virtual chassis member" msgstr "Virtuelles Gehäusemitglied" -#: netbox/dcim/forms/filtersets.py:890 +#: netbox/dcim/forms/filtersets.py:891 msgid "Has virtual device contexts" msgstr "Hat Virtual Device Contexts" -#: netbox/dcim/forms/filtersets.py:903 netbox/extras/filtersets.py:585 -#: netbox/ipam/forms/filtersets.py:452 -#: netbox/virtualization/forms/filtersets.py:112 +#: netbox/dcim/forms/filtersets.py:904 netbox/extras/filtersets.py:585 +#: netbox/ipam/forms/filtersets.py:455 +#: netbox/virtualization/forms/filtersets.py:117 msgid "Cluster group" msgstr "Clustergruppe" -#: netbox/dcim/forms/filtersets.py:1210 +#: netbox/dcim/forms/filtersets.py:1211 msgid "Cabled" msgstr "Verkabelt" -#: netbox/dcim/forms/filtersets.py:1217 +#: netbox/dcim/forms/filtersets.py:1218 msgid "Occupied" msgstr "Belegt" -#: netbox/dcim/forms/filtersets.py:1244 netbox/dcim/forms/filtersets.py:1269 -#: netbox/dcim/forms/filtersets.py:1293 netbox/dcim/forms/filtersets.py:1313 -#: netbox/dcim/forms/filtersets.py:1336 netbox/dcim/tables/devices.py:364 +#: netbox/dcim/forms/filtersets.py:1245 netbox/dcim/forms/filtersets.py:1270 +#: netbox/dcim/forms/filtersets.py:1294 netbox/dcim/forms/filtersets.py:1314 +#: netbox/dcim/forms/filtersets.py:1341 netbox/dcim/tables/devices.py:374 +#: netbox/dcim/tables/devices.py:663 +#: netbox/templates/circuits/inc/circuit_termination_fields.html:16 #: netbox/templates/dcim/consoleport.html:55 #: netbox/templates/dcim/consoleserverport.html:55 #: netbox/templates/dcim/frontport.html:69 -#: netbox/templates/dcim/interface.html:140 +#: netbox/templates/dcim/interface.html:197 #: netbox/templates/dcim/powerfeed.html:110 -#: netbox/templates/dcim/poweroutlet.html:59 +#: netbox/templates/dcim/poweroutlet.html:69 #: netbox/templates/dcim/powerport.html:59 #: netbox/templates/dcim/rearport.html:65 msgid "Connection" msgstr "Verbindung" -#: netbox/dcim/forms/filtersets.py:1348 netbox/extras/forms/bulk_edit.py:326 +#: netbox/dcim/forms/filtersets.py:1353 netbox/extras/forms/bulk_edit.py:326 #: netbox/extras/forms/bulk_import.py:247 -#: netbox/extras/forms/filtersets.py:464 -#: netbox/extras/forms/model_forms.py:675 netbox/extras/tables/tables.py:579 +#: netbox/extras/forms/filtersets.py:472 +#: netbox/extras/forms/model_forms.py:689 netbox/extras/tables/tables.py:579 #: netbox/templates/extras/journalentry.html:30 msgid "Kind" msgstr "Art" -#: netbox/dcim/forms/filtersets.py:1377 +#: netbox/dcim/forms/filtersets.py:1382 msgid "Mgmt only" msgstr "Nur Verwaltung" -#: netbox/dcim/forms/filtersets.py:1389 netbox/dcim/forms/model_forms.py:1390 -#: netbox/dcim/models/device_components.py:629 -#: netbox/templates/dcim/interface.html:129 +#: netbox/dcim/forms/filtersets.py:1394 netbox/dcim/forms/model_forms.py:1423 +#: netbox/dcim/models/device_components.py:677 +#: netbox/templates/dcim/interface.html:142 msgid "WWN" msgstr "WWN" -#: netbox/dcim/forms/filtersets.py:1409 +#: netbox/dcim/forms/filtersets.py:1414 msgid "Wireless channel" msgstr "WLAN Kanal" -#: netbox/dcim/forms/filtersets.py:1413 +#: netbox/dcim/forms/filtersets.py:1418 msgid "Channel frequency (MHz)" msgstr "Kanalfrequenz (MHz)" -#: netbox/dcim/forms/filtersets.py:1417 +#: netbox/dcim/forms/filtersets.py:1422 msgid "Channel width (MHz)" msgstr "Kanalbreite (MHz)" -#: netbox/dcim/forms/filtersets.py:1421 -#: netbox/templates/dcim/interface.html:85 +#: netbox/dcim/forms/filtersets.py:1426 +#: netbox/templates/dcim/interface.html:91 msgid "Transmit power (dBm)" msgstr "Sendeleistung (dBm)" -#: netbox/dcim/forms/filtersets.py:1446 netbox/dcim/forms/filtersets.py:1471 -#: netbox/dcim/tables/devices.py:327 netbox/templates/dcim/cable.html:12 +#: netbox/dcim/forms/filtersets.py:1451 netbox/dcim/forms/filtersets.py:1476 +#: netbox/dcim/tables/devices.py:337 netbox/templates/dcim/cable.html:12 #: netbox/templates/dcim/cable_trace.html:46 #: netbox/templates/dcim/frontport.html:77 #: netbox/templates/dcim/htmx/cable_edit.html:50 @@ -4834,40 +5267,77 @@ msgstr "Sendeleistung (dBm)" msgid "Cable" msgstr "Kabel" -#: netbox/dcim/forms/filtersets.py:1550 netbox/dcim/tables/devices.py:949 +#: netbox/dcim/forms/filtersets.py:1555 netbox/dcim/tables/devices.py:979 msgid "Discovered" msgstr "Erfasst" +#: netbox/dcim/forms/filtersets.py:1596 netbox/ipam/forms/filtersets.py:350 +msgid "Assigned Device" +msgstr "Zugewiesenes Gerät" + +#: netbox/dcim/forms/filtersets.py:1601 netbox/ipam/forms/filtersets.py:355 +msgid "Assigned VM" +msgstr "Zugewiesene VM" + #: netbox/dcim/forms/formsets.py:20 #, python-brace-format msgid "A virtual chassis member already exists in position {vc_position}." msgstr "Ein virtuelles Chassismitglied ist bereits in Position {vc_position}." -#: netbox/dcim/forms/model_forms.py:140 +#: netbox/dcim/forms/mixins.py:27 netbox/dcim/forms/mixins.py:75 +#: netbox/ipam/forms/bulk_edit.py:420 netbox/ipam/forms/model_forms.py:618 +msgid "Scope type" +msgstr "Art des Geltungsbereichs" + +#: netbox/dcim/forms/mixins.py:30 netbox/dcim/forms/mixins.py:78 +#: netbox/ipam/forms/bulk_edit.py:270 netbox/ipam/forms/bulk_edit.py:423 +#: netbox/ipam/forms/bulk_edit.py:437 netbox/ipam/forms/filtersets.py:175 +#: netbox/ipam/forms/model_forms.py:231 netbox/ipam/forms/model_forms.py:621 +#: netbox/ipam/forms/model_forms.py:631 netbox/ipam/tables/ip.py:194 +#: netbox/ipam/tables/vlans.py:40 netbox/templates/ipam/prefix.html:48 +#: netbox/templates/ipam/vlangroup.html:38 +#: netbox/templates/virtualization/cluster.html:42 +#: netbox/templates/wireless/wirelesslan.html:26 +#: netbox/virtualization/forms/bulk_edit.py:91 +#: netbox/virtualization/forms/filtersets.py:46 +#: netbox/virtualization/forms/model_forms.py:79 +#: netbox/virtualization/tables/clusters.py:80 +#: netbox/wireless/forms/bulk_edit.py:93 +#: netbox/wireless/forms/filtersets.py:37 +#: netbox/wireless/forms/model_forms.py:56 +#: netbox/wireless/tables/wirelesslan.py:58 +msgid "Scope" +msgstr "Geltungsbereich" + +#: netbox/dcim/forms/mixins.py:104 netbox/ipam/forms/bulk_import.py:436 +msgid "Scope type (app & model)" +msgstr "Art des Umfangs (App und Modell)" + +#: netbox/dcim/forms/model_forms.py:144 msgid "Contact Info" msgstr "Kontaktinformationen" -#: netbox/dcim/forms/model_forms.py:195 netbox/templates/dcim/rackrole.html:19 +#: netbox/dcim/forms/model_forms.py:199 netbox/templates/dcim/rackrole.html:19 msgid "Rack Role" msgstr "Rackrolle" -#: netbox/dcim/forms/model_forms.py:212 netbox/dcim/forms/model_forms.py:362 -#: netbox/dcim/forms/model_forms.py:446 +#: netbox/dcim/forms/model_forms.py:217 netbox/dcim/forms/model_forms.py:371 +#: netbox/dcim/forms/model_forms.py:456 #: netbox/utilities/forms/fields/fields.py:47 msgid "Slug" msgstr "URL-Slug" -#: netbox/dcim/forms/model_forms.py:259 +#: netbox/dcim/forms/model_forms.py:264 msgid "Select a pre-defined rack type, or set physical characteristics below." msgstr "" "Wählen Sie einen vordefinierten Racktyp oder legen Sie unten die " "physikalischen Eigenschaften fest." -#: netbox/dcim/forms/model_forms.py:265 +#: netbox/dcim/forms/model_forms.py:273 msgid "Inventory Control" msgstr "Inventarsteuerung" -#: netbox/dcim/forms/model_forms.py:313 +#: netbox/dcim/forms/model_forms.py:321 msgid "" "Comma-separated list of numeric unit IDs. A range may be specified using a " "hyphen." @@ -4875,39 +5345,39 @@ msgstr "" "Kommagetrennte Liste numerischer Einheiten-IDs. Ein Bereich kann mit einem " "Bindestrich angegeben werden." -#: netbox/dcim/forms/model_forms.py:322 netbox/dcim/tables/racks.py:202 +#: netbox/dcim/forms/model_forms.py:330 netbox/dcim/tables/racks.py:201 msgid "Reservation" msgstr "Reservierung" -#: netbox/dcim/forms/model_forms.py:423 +#: netbox/dcim/forms/model_forms.py:432 #: netbox/templates/dcim/devicerole.html:23 msgid "Device Role" msgstr "Rolle des Geräts" -#: netbox/dcim/forms/model_forms.py:490 netbox/dcim/models/devices.py:644 +#: netbox/dcim/forms/model_forms.py:500 netbox/dcim/models/devices.py:635 msgid "The lowest-numbered unit occupied by the device" msgstr "Die HE mit der niedrigsten Nummer, die vom Gerät belegt ist" -#: netbox/dcim/forms/model_forms.py:547 +#: netbox/dcim/forms/model_forms.py:558 msgid "The position in the virtual chassis this device is identified by" msgstr "" "Die Position im virtuellen Gehäuse, durch die dieses Gerät identifiziert " "wird" -#: netbox/dcim/forms/model_forms.py:552 +#: netbox/dcim/forms/model_forms.py:563 msgid "The priority of the device in the virtual chassis" msgstr "Die Priorität des Geräts im virtuellen Gehäuse" -#: netbox/dcim/forms/model_forms.py:659 +#: netbox/dcim/forms/model_forms.py:670 msgid "Automatically populate components associated with this module type" msgstr "" "Füllen Sie automatisch Komponenten aus, die diesem Modultyp zugeordnet sind" -#: netbox/dcim/forms/model_forms.py:767 +#: netbox/dcim/forms/model_forms.py:779 msgid "Characteristics" msgstr "Charakteristiken" -#: netbox/dcim/forms/model_forms.py:914 +#: netbox/dcim/forms/model_forms.py:926 #, python-brace-format msgid "" "Alphanumeric ranges are supported for bulk creation. Mixed cases and types " @@ -4922,60 +5392,35 @@ msgstr "" "{module}, falls vorhanden, wird beim Erstellen eines neuen " "Moduls automatisch durch den Positionswert ersetzt." -#: netbox/dcim/forms/model_forms.py:1094 +#: netbox/dcim/forms/model_forms.py:1107 msgid "Console port template" msgstr "Konsolenanschlussvorlage" -#: netbox/dcim/forms/model_forms.py:1102 +#: netbox/dcim/forms/model_forms.py:1115 msgid "Console server port template" msgstr "Port-Vorlage für Konsolenserver" -#: netbox/dcim/forms/model_forms.py:1110 +#: netbox/dcim/forms/model_forms.py:1123 msgid "Front port template" msgstr "Frontanschluss-Vorlage" -#: netbox/dcim/forms/model_forms.py:1118 +#: netbox/dcim/forms/model_forms.py:1131 msgid "Interface template" msgstr "Schnittstellen-Vorlage" -#: netbox/dcim/forms/model_forms.py:1126 +#: netbox/dcim/forms/model_forms.py:1139 msgid "Power outlet template" msgstr "Vorlage für Steckdosen" -#: netbox/dcim/forms/model_forms.py:1134 +#: netbox/dcim/forms/model_forms.py:1147 msgid "Power port template" msgstr "Vorlage für Stromverteiler" -#: netbox/dcim/forms/model_forms.py:1142 +#: netbox/dcim/forms/model_forms.py:1155 msgid "Rear port template" msgstr "Vorlage für den hinteren Anschluss" -#: netbox/dcim/forms/model_forms.py:1151 netbox/dcim/forms/model_forms.py:1395 -#: netbox/dcim/forms/model_forms.py:1558 netbox/dcim/forms/model_forms.py:1590 -#: netbox/dcim/tables/connections.py:65 netbox/ipam/forms/bulk_import.py:318 -#: netbox/ipam/forms/model_forms.py:280 netbox/ipam/forms/model_forms.py:289 -#: netbox/ipam/tables/fhrp.py:64 netbox/ipam/tables/ip.py:372 -#: netbox/ipam/tables/vlans.py:169 -#: netbox/templates/circuits/inc/circuit_termination_fields.html:51 -#: netbox/templates/dcim/frontport.html:106 -#: netbox/templates/dcim/interface.html:27 -#: netbox/templates/dcim/interface.html:184 -#: netbox/templates/dcim/interface.html:310 -#: netbox/templates/dcim/rearport.html:102 -#: netbox/templates/virtualization/vminterface.html:18 -#: netbox/templates/vpn/tunneltermination.html:31 -#: netbox/templates/wireless/inc/wirelesslink_interface.html:10 -#: netbox/templates/wireless/wirelesslink.html:10 -#: netbox/templates/wireless/wirelesslink.html:55 -#: netbox/virtualization/forms/model_forms.py:348 -#: netbox/vpn/forms/bulk_import.py:297 netbox/vpn/forms/model_forms.py:436 -#: netbox/vpn/forms/model_forms.py:445 -#: netbox/wireless/forms/model_forms.py:113 -#: netbox/wireless/forms/model_forms.py:155 -msgid "Interface" -msgstr "Schnittstelle" - -#: netbox/dcim/forms/model_forms.py:1152 netbox/dcim/forms/model_forms.py:1591 +#: netbox/dcim/forms/model_forms.py:1165 netbox/dcim/forms/model_forms.py:1636 #: netbox/dcim/tables/connections.py:27 #: netbox/templates/dcim/consoleport.html:17 #: netbox/templates/dcim/consoleserverport.html:74 @@ -4983,72 +5428,72 @@ msgstr "Schnittstelle" msgid "Console Port" msgstr "Konsolenanschluss" -#: netbox/dcim/forms/model_forms.py:1153 netbox/dcim/forms/model_forms.py:1592 +#: netbox/dcim/forms/model_forms.py:1166 netbox/dcim/forms/model_forms.py:1637 #: netbox/templates/dcim/consoleport.html:73 #: netbox/templates/dcim/consoleserverport.html:17 #: netbox/templates/dcim/frontport.html:109 msgid "Console Server Port" msgstr "Konsolenserveranschluss" -#: netbox/dcim/forms/model_forms.py:1154 netbox/dcim/forms/model_forms.py:1593 -#: netbox/templates/circuits/inc/circuit_termination_fields.html:52 +#: netbox/dcim/forms/model_forms.py:1167 netbox/dcim/forms/model_forms.py:1638 +#: netbox/templates/circuits/inc/circuit_termination_fields.html:53 #: netbox/templates/dcim/consoleport.html:76 #: netbox/templates/dcim/consoleserverport.html:77 #: netbox/templates/dcim/frontport.html:17 #: netbox/templates/dcim/frontport.html:115 -#: netbox/templates/dcim/interface.html:187 +#: netbox/templates/dcim/interface.html:244 #: netbox/templates/dcim/rearport.html:105 msgid "Front Port" msgstr "Frontanschluss" -#: netbox/dcim/forms/model_forms.py:1155 netbox/dcim/forms/model_forms.py:1594 -#: netbox/dcim/tables/devices.py:710 -#: netbox/templates/circuits/inc/circuit_termination_fields.html:53 +#: netbox/dcim/forms/model_forms.py:1168 netbox/dcim/forms/model_forms.py:1639 +#: netbox/dcim/tables/devices.py:744 +#: netbox/templates/circuits/inc/circuit_termination_fields.html:54 #: netbox/templates/dcim/consoleport.html:79 #: netbox/templates/dcim/consoleserverport.html:80 #: netbox/templates/dcim/frontport.html:50 #: netbox/templates/dcim/frontport.html:118 -#: netbox/templates/dcim/interface.html:190 +#: netbox/templates/dcim/interface.html:247 #: netbox/templates/dcim/rearport.html:17 #: netbox/templates/dcim/rearport.html:108 msgid "Rear Port" msgstr "Rückanschluss" -#: netbox/dcim/forms/model_forms.py:1156 netbox/dcim/forms/model_forms.py:1595 -#: netbox/dcim/tables/connections.py:46 netbox/dcim/tables/devices.py:512 -#: netbox/templates/dcim/poweroutlet.html:44 +#: netbox/dcim/forms/model_forms.py:1169 netbox/dcim/forms/model_forms.py:1640 +#: netbox/dcim/tables/connections.py:46 netbox/dcim/tables/devices.py:521 +#: netbox/templates/dcim/poweroutlet.html:54 #: netbox/templates/dcim/powerport.html:17 msgid "Power Port" msgstr "Stromanschluss" -#: netbox/dcim/forms/model_forms.py:1157 netbox/dcim/forms/model_forms.py:1596 +#: netbox/dcim/forms/model_forms.py:1170 netbox/dcim/forms/model_forms.py:1641 #: netbox/templates/dcim/poweroutlet.html:17 #: netbox/templates/dcim/powerport.html:77 msgid "Power Outlet" msgstr "Stromabgang" -#: netbox/dcim/forms/model_forms.py:1159 netbox/dcim/forms/model_forms.py:1598 +#: netbox/dcim/forms/model_forms.py:1172 netbox/dcim/forms/model_forms.py:1643 msgid "Component Assignment" msgstr "Komponentenzuweisung" -#: netbox/dcim/forms/model_forms.py:1202 netbox/dcim/forms/model_forms.py:1645 +#: netbox/dcim/forms/model_forms.py:1218 netbox/dcim/forms/model_forms.py:1690 msgid "An InventoryItem can only be assigned to a single component." msgstr "" "Ein InventoryItem kann nur einer einzelnen Komponente zugewiesen werden." -#: netbox/dcim/forms/model_forms.py:1339 +#: netbox/dcim/forms/model_forms.py:1355 msgid "LAG interface" msgstr "LAG-Schnittstelle" -#: netbox/dcim/forms/model_forms.py:1362 +#: netbox/dcim/forms/model_forms.py:1378 msgid "Filter VLANs available for assignment by group." msgstr "Filtern Sie VLANs, die für die Zuweisung nach Gruppen verfügbar sind." -#: netbox/dcim/forms/model_forms.py:1491 +#: netbox/dcim/forms/model_forms.py:1533 msgid "Child Device" msgstr "untergeordnetes Gerät" -#: netbox/dcim/forms/model_forms.py:1492 +#: netbox/dcim/forms/model_forms.py:1534 msgid "" "Child devices must first be created and assigned to the site and rack of the" " parent device." @@ -5056,32 +5501,58 @@ msgstr "" "Untergeordnete Geräte müssen zuerst erstellt und dem Standort und dem Rack " "des übergeordneten Geräts zugewiesen werden." -#: netbox/dcim/forms/model_forms.py:1534 +#: netbox/dcim/forms/model_forms.py:1576 msgid "Console port" msgstr "Konsolenanschluss" -#: netbox/dcim/forms/model_forms.py:1542 +#: netbox/dcim/forms/model_forms.py:1584 msgid "Console server port" msgstr "Konsolenserveranschluss" -#: netbox/dcim/forms/model_forms.py:1550 +#: netbox/dcim/forms/model_forms.py:1592 msgid "Front port" msgstr "Frontanschluss" -#: netbox/dcim/forms/model_forms.py:1566 +#: netbox/dcim/forms/model_forms.py:1608 msgid "Power outlet" msgstr "Stromabgang" -#: netbox/dcim/forms/model_forms.py:1586 +#: netbox/dcim/forms/model_forms.py:1630 #: netbox/templates/dcim/inventoryitem.html:17 msgid "Inventory Item" msgstr "Inventar-Artikel" -#: netbox/dcim/forms/model_forms.py:1659 +#: netbox/dcim/forms/model_forms.py:1704 #: netbox/templates/dcim/inventoryitemrole.html:15 msgid "Inventory Item Role" msgstr "Rolle des Inventarartikels" +#: netbox/dcim/forms/model_forms.py:1773 +msgid "VM Interface" +msgstr "VM-Schnittstelle" + +#: netbox/dcim/forms/model_forms.py:1788 netbox/ipam/forms/filtersets.py:608 +#: netbox/ipam/forms/model_forms.py:334 netbox/ipam/forms/model_forms.py:796 +#: netbox/ipam/forms/model_forms.py:822 netbox/ipam/tables/vlans.py:171 +#: netbox/templates/virtualization/virtualdisk.html:21 +#: netbox/templates/virtualization/virtualmachine.html:12 +#: netbox/templates/virtualization/vminterface.html:21 +#: netbox/templates/vpn/tunneltermination.html:25 +#: netbox/virtualization/forms/filtersets.py:202 +#: netbox/virtualization/forms/filtersets.py:247 +#: netbox/virtualization/forms/model_forms.py:227 +#: netbox/virtualization/tables/virtualmachines.py:105 +#: netbox/virtualization/tables/virtualmachines.py:161 +#: netbox/vpn/choices.py:53 netbox/vpn/forms/filtersets.py:293 +#: netbox/vpn/forms/model_forms.py:161 netbox/vpn/forms/model_forms.py:172 +#: netbox/vpn/forms/model_forms.py:274 netbox/vpn/forms/model_forms.py:457 +msgid "Virtual Machine" +msgstr "Virtuelle Maschine" + +#: netbox/dcim/forms/model_forms.py:1827 +msgid "A MAC address can only be assigned to a single object." +msgstr "Eine MAC-Adresse kann nur einem einzelnen Objekt zugewiesen werden." + #: netbox/dcim/forms/object_create.py:48 #: netbox/dcim/forms/object_create.py:199 #: netbox/dcim/forms/object_create.py:347 @@ -5102,7 +5573,7 @@ msgstr "" "{pattern_count} werden erwartet." #: netbox/dcim/forms/object_create.py:110 -#: netbox/dcim/forms/object_create.py:263 netbox/dcim/tables/devices.py:252 +#: netbox/dcim/forms/object_create.py:263 netbox/dcim/tables/devices.py:263 msgid "Rear ports" msgstr "Rückanschlüsse" @@ -5133,7 +5604,7 @@ msgstr "" "der ausgewählten Anzahl der hinteren Anschlusspositionen übereinstimmen " "({rearport_count})." -#: netbox/dcim/forms/object_create.py:401 netbox/dcim/tables/devices.py:1033 +#: netbox/dcim/forms/object_create.py:401 netbox/dcim/tables/devices.py:1065 #: netbox/ipam/tables/fhrp.py:31 netbox/templates/dcim/virtualchassis.html:53 #: netbox/templates/dcim/virtualchassis_edit.html:47 #: netbox/templates/ipam/fhrpgroup.html:38 @@ -5152,30 +5623,30 @@ msgstr "" "Position des ersten Mitgliedsgeräts. Erhöht sich für jedes weitere Mitglied " "um eins." -#: netbox/dcim/forms/object_create.py:427 +#: netbox/dcim/forms/object_create.py:428 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/cables.py:62 -#: netbox/dcim/models/device_component_templates.py:55 -#: netbox/dcim/models/device_components.py:62 +#: netbox/dcim/models/cables.py:64 +#: netbox/dcim/models/device_component_templates.py:51 +#: netbox/dcim/models/device_components.py:57 #: netbox/extras/models/customfields.py:111 msgid "label" msgstr "Label" -#: netbox/dcim/models/cables.py:71 +#: netbox/dcim/models/cables.py:73 msgid "length" msgstr "Länge" -#: netbox/dcim/models/cables.py:78 +#: netbox/dcim/models/cables.py:80 msgid "length unit" msgstr "Längeneinheit" -#: netbox/dcim/models/cables.py:95 +#: netbox/dcim/models/cables.py:98 msgid "cable" msgstr "Kabel" -#: netbox/dcim/models/cables.py:96 +#: netbox/dcim/models/cables.py:99 msgid "cables" msgstr "Kabel" @@ -5205,19 +5676,19 @@ msgid "A and B terminations cannot connect to the same object." msgstr "" "A- und B-Anschlüsse können nicht mit demselben Objekt verbunden werden." -#: netbox/dcim/models/cables.py:260 netbox/ipam/models/asns.py:37 +#: netbox/dcim/models/cables.py:262 netbox/ipam/models/asns.py:37 msgid "end" msgstr "Ende" -#: netbox/dcim/models/cables.py:313 +#: netbox/dcim/models/cables.py:315 msgid "cable termination" msgstr "Kabelabschlusspunkt" -#: netbox/dcim/models/cables.py:314 +#: netbox/dcim/models/cables.py:316 msgid "cable terminations" msgstr "Kabelabschlusspunkte" -#: netbox/dcim/models/cables.py:333 +#: netbox/dcim/models/cables.py:335 #, python-brace-format msgid "" "Duplicate termination found for {app_label}.{model} {termination_id}: cable " @@ -5226,37 +5697,72 @@ msgstr "" "Doppelte Terminierung gefunden für {app_label}.{model} {termination_id}: " "Kabel {cable_pk}" -#: netbox/dcim/models/cables.py:343 +#: netbox/dcim/models/cables.py:345 #, python-brace-format msgid "Cables cannot be terminated to {type_display} interfaces" msgstr "Kabel können nicht an {type_display} Schnittstellen terminiert werden" -#: netbox/dcim/models/cables.py:350 +#: netbox/dcim/models/cables.py:352 msgid "Circuit terminations attached to a provider network may not be cabled." msgstr "" "Transportnetzabschlüsse, die an ein Provider-Netzwerk angeschlossen sind, " "sind möglicherweise nicht verkabelt." -#: netbox/dcim/models/cables.py:448 netbox/extras/models/configs.py:50 +#: netbox/dcim/models/cables.py:450 netbox/extras/models/configs.py:50 msgid "is active" msgstr "ist aktiv" -#: netbox/dcim/models/cables.py:452 +#: netbox/dcim/models/cables.py:454 msgid "is complete" msgstr "ist abgeschlossen" -#: netbox/dcim/models/cables.py:456 +#: netbox/dcim/models/cables.py:458 msgid "is split" msgstr "ist aufgeteilt" -#: netbox/dcim/models/cables.py:464 +#: netbox/dcim/models/cables.py:466 msgid "cable path" msgstr "Kabelweg" -#: netbox/dcim/models/cables.py:465 +#: netbox/dcim/models/cables.py:467 msgid "cable paths" msgstr "Kabelwege" +#: netbox/dcim/models/cables.py:539 +msgid "All originating terminations must be attached to the same link" +msgstr "" +"Alle ursprünglichen Verbindungsabschlüsse müssen an denselben Link angehängt" +" werden" + +#: netbox/dcim/models/cables.py:551 +msgid "All mid-span terminations must have the same termination type" +msgstr "" +"Alle Mid-Span-Verbindungsabschlüsse müssen denselben Abschlusstyp haben" + +#: netbox/dcim/models/cables.py:556 +msgid "All mid-span terminations must have the same parent object" +msgstr "" +"Ein Verbindungsabschluss muss an einem Abschlussobjekt verbunden werden." + +#: netbox/dcim/models/cables.py:580 +msgid "All links must be cable or wireless" +msgstr "Alle Verbindungen müssen verkabelt oder drahtlos sein" + +#: netbox/dcim/models/cables.py:582 +msgid "All links must match first link type" +msgstr "Alle Links müssen dem ersten Linktyp entsprechen" + +#: netbox/dcim/models/cables.py:665 +msgid "" +"All positions counts within the path on opposite ends of links must match" +msgstr "" +"Die Anzahl aller Positionen innerhalb des Pfads an den gegenüberliegenden " +"Enden der Links muss übereinstimmen." + +#: netbox/dcim/models/cables.py:674 +msgid "Remote termination position filter is missing" +msgstr "Der Filter für die Position der entfernten Abschlüsse fehlt" + #: netbox/dcim/models/device_component_templates.py:46 #, python-brace-format msgid "" @@ -5266,18 +5772,18 @@ msgstr "" "{module} wird als Ersatz für die Position des Modulschachts akzeptiert, wenn" " es an einen Modultyp angehängt wird." -#: netbox/dcim/models/device_component_templates.py:58 -#: netbox/dcim/models/device_components.py:65 +#: netbox/dcim/models/device_component_templates.py:54 +#: netbox/dcim/models/device_components.py:60 msgid "Physical label" msgstr "Physisches Label" -#: netbox/dcim/models/device_component_templates.py:103 +#: netbox/dcim/models/device_component_templates.py:99 msgid "Component templates cannot be moved to a different device type." msgstr "" "Komponentenvorlagen können nicht auf einen anderen Gerätetyp verschoben " "werden." -#: netbox/dcim/models/device_component_templates.py:154 +#: netbox/dcim/models/device_component_templates.py:150 msgid "" "A component template cannot be associated with both a device type and a " "module type." @@ -5285,7 +5791,7 @@ msgstr "" "Eine Komponentenvorlage kann nicht gleichzeitig einem Gerätetyp und einem " "Modultyp zugeordnet werden." -#: netbox/dcim/models/device_component_templates.py:158 +#: netbox/dcim/models/device_component_templates.py:154 msgid "" "A component template must be associated with either a device type or a " "module type." @@ -5293,138 +5799,138 @@ msgstr "" "Eine Komponentenvorlage muss entweder einem Gerätetyp oder einem Modultyp " "zugeordnet sein." -#: netbox/dcim/models/device_component_templates.py:212 +#: netbox/dcim/models/device_component_templates.py:209 msgid "console port template" msgstr "Vorlage für Konsolenanschluss" -#: netbox/dcim/models/device_component_templates.py:213 +#: netbox/dcim/models/device_component_templates.py:210 msgid "console port templates" msgstr "Vorlagen für Konsolenanschlüsse" -#: netbox/dcim/models/device_component_templates.py:246 +#: netbox/dcim/models/device_component_templates.py:244 msgid "console server port template" msgstr "Portvorlage für Konsolenserver" -#: netbox/dcim/models/device_component_templates.py:247 +#: netbox/dcim/models/device_component_templates.py:245 msgid "console server port templates" msgstr "Portvorlagen für Konsolenserver" -#: netbox/dcim/models/device_component_templates.py:278 -#: netbox/dcim/models/device_components.py:352 +#: netbox/dcim/models/device_component_templates.py:277 +#: netbox/dcim/models/device_components.py:345 msgid "maximum draw" msgstr "maximale Leistungsaufnahme" -#: netbox/dcim/models/device_component_templates.py:285 -#: netbox/dcim/models/device_components.py:359 +#: netbox/dcim/models/device_component_templates.py:284 +#: netbox/dcim/models/device_components.py:352 msgid "allocated draw" msgstr "zugewiesene Leistungsaufnahme" -#: netbox/dcim/models/device_component_templates.py:295 +#: netbox/dcim/models/device_component_templates.py:294 msgid "power port template" msgstr "Vorlage für Stromanschluss" -#: netbox/dcim/models/device_component_templates.py:296 +#: netbox/dcim/models/device_component_templates.py:295 msgid "power port templates" msgstr "Vorlagen für Stromanschlüsse" #: netbox/dcim/models/device_component_templates.py:315 -#: netbox/dcim/models/device_components.py:382 +#: netbox/dcim/models/device_components.py:372 #, python-brace-format msgid "Allocated draw cannot exceed the maximum draw ({maximum_draw}W)." msgstr "" "Die zugewiesene Leistungsaufnahme darf die maximale Leistung " "({maximum_draw}W) nicht überschreiten." -#: netbox/dcim/models/device_component_templates.py:347 -#: netbox/dcim/models/device_components.py:477 +#: netbox/dcim/models/device_component_templates.py:349 +#: netbox/dcim/models/device_components.py:468 msgid "feed leg" msgstr "Phasenlage" -#: netbox/dcim/models/device_component_templates.py:351 -#: netbox/dcim/models/device_components.py:481 +#: netbox/dcim/models/device_component_templates.py:354 +#: netbox/dcim/models/device_components.py:473 msgid "Phase (for three-phase feeds)" msgstr "Phase (bei dreiphasiger Stromzufuhr)" -#: netbox/dcim/models/device_component_templates.py:357 +#: netbox/dcim/models/device_component_templates.py:360 msgid "power outlet template" msgstr "Vorlage für Stromabgang" -#: netbox/dcim/models/device_component_templates.py:358 +#: netbox/dcim/models/device_component_templates.py:361 msgid "power outlet templates" msgstr "Vorlagen für Steckdosen" -#: netbox/dcim/models/device_component_templates.py:367 +#: netbox/dcim/models/device_component_templates.py:370 #, python-brace-format msgid "Parent power port ({power_port}) must belong to the same device type" msgstr "" "Übergeordneter Stromanschluss ({power_port}) muss zum gleichen Gerätetyp " "gehören" -#: netbox/dcim/models/device_component_templates.py:371 +#: netbox/dcim/models/device_component_templates.py:376 #, python-brace-format msgid "Parent power port ({power_port}) must belong to the same module type" msgstr "" "Übergeordneter Stromanschluss ({power_port}) muss zum gleichen Modultyp " "gehören" -#: netbox/dcim/models/device_component_templates.py:423 -#: netbox/dcim/models/device_components.py:611 +#: netbox/dcim/models/device_component_templates.py:430 +#: netbox/dcim/models/device_components.py:659 msgid "management only" msgstr "Nur Verwaltung" -#: netbox/dcim/models/device_component_templates.py:431 -#: netbox/dcim/models/device_components.py:550 +#: netbox/dcim/models/device_component_templates.py:438 +#: netbox/dcim/models/device_components.py:539 msgid "bridge interface" msgstr "Bridge-Schnittstelle" -#: netbox/dcim/models/device_component_templates.py:449 -#: netbox/dcim/models/device_components.py:636 +#: netbox/dcim/models/device_component_templates.py:459 +#: netbox/dcim/models/device_components.py:685 msgid "wireless role" msgstr "WLAN Rolle" -#: netbox/dcim/models/device_component_templates.py:455 +#: netbox/dcim/models/device_component_templates.py:465 msgid "interface template" msgstr "Schnittstellenvorlage" -#: netbox/dcim/models/device_component_templates.py:456 +#: netbox/dcim/models/device_component_templates.py:466 msgid "interface templates" msgstr "Schnittstellenvorlagen" -#: netbox/dcim/models/device_component_templates.py:463 -#: netbox/dcim/models/device_components.py:804 -#: netbox/virtualization/models/virtualmachines.py:405 +#: netbox/dcim/models/device_component_templates.py:473 +#: netbox/dcim/models/device_components.py:845 +#: netbox/virtualization/models/virtualmachines.py:385 msgid "An interface cannot be bridged to itself." msgstr "Eine Schnittstelle kann nicht zu sich selbst überbrückt werden." -#: netbox/dcim/models/device_component_templates.py:466 +#: netbox/dcim/models/device_component_templates.py:477 #, python-brace-format msgid "Bridge interface ({bridge}) must belong to the same device type" msgstr "Bridge-Schnittstelle ({bridge}) muss zum gleichen Gerätetyp gehören" -#: netbox/dcim/models/device_component_templates.py:470 +#: netbox/dcim/models/device_component_templates.py:483 #, python-brace-format msgid "Bridge interface ({bridge}) must belong to the same module type" msgstr "Bridge-Schnittstelle ({bridge}) muss zum gleichen Modultyp gehören" -#: netbox/dcim/models/device_component_templates.py:526 -#: netbox/dcim/models/device_components.py:984 +#: netbox/dcim/models/device_component_templates.py:540 +#: netbox/dcim/models/device_components.py:1035 msgid "rear port position" msgstr "Position des Rückanschlusses" -#: netbox/dcim/models/device_component_templates.py:551 +#: netbox/dcim/models/device_component_templates.py:565 msgid "front port template" msgstr "Frontanschluss-Vorlage" -#: netbox/dcim/models/device_component_templates.py:552 +#: netbox/dcim/models/device_component_templates.py:566 msgid "front port templates" msgstr "Frontanschluss-Vorlagen" -#: netbox/dcim/models/device_component_templates.py:562 +#: netbox/dcim/models/device_component_templates.py:576 #, python-brace-format msgid "Rear port ({name}) must belong to the same device type" msgstr "Hinterer Anschluss ({name}) muss zum gleichen Gerätetyp gehören" -#: netbox/dcim/models/device_component_templates.py:568 +#: netbox/dcim/models/device_component_templates.py:582 #, python-brace-format msgid "" "Invalid rear port position ({position}); rear port {name} has only {count} " @@ -5433,47 +5939,47 @@ msgstr "" "Ungültige Position des hinteren Anschlusses ({position}); hinterer Anschluss" " {name} hat nur {count} Positionen" -#: netbox/dcim/models/device_component_templates.py:621 -#: netbox/dcim/models/device_components.py:1053 +#: netbox/dcim/models/device_component_templates.py:635 +#: netbox/dcim/models/device_components.py:1101 msgid "positions" msgstr "Positionen" -#: netbox/dcim/models/device_component_templates.py:632 +#: netbox/dcim/models/device_component_templates.py:646 msgid "rear port template" msgstr "Vorlage für den Rückanschluss" -#: netbox/dcim/models/device_component_templates.py:633 +#: netbox/dcim/models/device_component_templates.py:647 msgid "rear port templates" msgstr "Vorlagen für Rückanschlüsse" -#: netbox/dcim/models/device_component_templates.py:662 -#: netbox/dcim/models/device_components.py:1103 +#: netbox/dcim/models/device_component_templates.py:676 +#: netbox/dcim/models/device_components.py:1148 msgid "position" msgstr "Position" -#: netbox/dcim/models/device_component_templates.py:665 -#: netbox/dcim/models/device_components.py:1106 +#: netbox/dcim/models/device_component_templates.py:679 +#: netbox/dcim/models/device_components.py:1151 msgid "Identifier to reference when renaming installed components" msgstr "" "Bezeichner, auf den beim Umbenennen installierter Komponenten verwiesen wird" -#: netbox/dcim/models/device_component_templates.py:671 +#: netbox/dcim/models/device_component_templates.py:685 msgid "module bay template" msgstr "Vorlage für Moduleinsatz" -#: netbox/dcim/models/device_component_templates.py:672 +#: netbox/dcim/models/device_component_templates.py:686 msgid "module bay templates" msgstr "Vorlagen für Moduleinsätze" -#: netbox/dcim/models/device_component_templates.py:699 +#: netbox/dcim/models/device_component_templates.py:713 msgid "device bay template" msgstr "Vorlage für Geräteeinsatz" -#: netbox/dcim/models/device_component_templates.py:700 +#: netbox/dcim/models/device_component_templates.py:714 msgid "device bay templates" msgstr "Vorlagen für Geräteeinsätze" -#: netbox/dcim/models/device_component_templates.py:713 +#: netbox/dcim/models/device_component_templates.py:728 #, python-brace-format msgid "" "Subdevice role of device type ({device_type}) must be set to \"parent\" to " @@ -5482,214 +5988,233 @@ msgstr "" "Untergeräterolle des Gerätetyps ({device_type}) muss auf „Übergeordnet“ " "gesetzt sein, um Geräteschächte zuzulassen." -#: netbox/dcim/models/device_component_templates.py:768 -#: netbox/dcim/models/device_components.py:1262 +#: netbox/dcim/models/device_component_templates.py:784 +#: netbox/dcim/models/device_components.py:1304 msgid "part ID" msgstr "Teile-ID" -#: netbox/dcim/models/device_component_templates.py:770 -#: netbox/dcim/models/device_components.py:1264 +#: netbox/dcim/models/device_component_templates.py:786 +#: netbox/dcim/models/device_components.py:1306 msgid "Manufacturer-assigned part identifier" msgstr "Vom Hersteller zugewiesene Teile-ID" -#: netbox/dcim/models/device_component_templates.py:787 +#: netbox/dcim/models/device_component_templates.py:803 msgid "inventory item template" msgstr "Vorlage für Inventarartikel" -#: netbox/dcim/models/device_component_templates.py:788 +#: netbox/dcim/models/device_component_templates.py:804 msgid "inventory item templates" msgstr "Vorlagen für Inventarartikel" -#: netbox/dcim/models/device_components.py:105 +#: netbox/dcim/models/device_components.py:100 msgid "Components cannot be moved to a different device." msgstr "Komponenten können nicht auf ein anderes Gerät verschoben werden." -#: netbox/dcim/models/device_components.py:144 +#: netbox/dcim/models/device_components.py:139 msgid "cable end" msgstr "Kabelende" -#: netbox/dcim/models/device_components.py:150 +#: netbox/dcim/models/device_components.py:146 msgid "mark connected" msgstr "als verbunden markieren" -#: netbox/dcim/models/device_components.py:152 +#: netbox/dcim/models/device_components.py:148 msgid "Treat as if a cable is connected" msgstr "So behandeln, als ob ein Kabel angeschlossen wäre" -#: netbox/dcim/models/device_components.py:170 +#: netbox/dcim/models/device_components.py:166 msgid "Must specify cable end (A or B) when attaching a cable." msgstr "" "Beim Anschließen eines Kabels muss das Kabelende (A oder B) angegeben " "werden." -#: netbox/dcim/models/device_components.py:174 +#: netbox/dcim/models/device_components.py:170 msgid "Cable end must not be set without a cable." msgstr "Das Kabelende darf nicht ohne Kabel verlegt werden." -#: netbox/dcim/models/device_components.py:178 +#: netbox/dcim/models/device_components.py:174 msgid "Cannot mark as connected with a cable attached." msgstr "Mit angeschlossenem Kabel kann nicht als verbunden markiert werden." -#: netbox/dcim/models/device_components.py:202 +#: netbox/dcim/models/device_components.py:198 #, python-brace-format msgid "{class_name} models must declare a parent_object property" msgstr "" "{class_name} Modelle müssen eine parent_object-Eigenschaft deklarieren" -#: netbox/dcim/models/device_components.py:287 -#: netbox/dcim/models/device_components.py:316 -#: netbox/dcim/models/device_components.py:349 -#: netbox/dcim/models/device_components.py:467 +#: netbox/dcim/models/device_components.py:284 +#: netbox/dcim/models/device_components.py:311 +#: netbox/dcim/models/device_components.py:342 +#: netbox/dcim/models/device_components.py:458 msgid "Physical port type" msgstr "Physischer Anschlusstyp" -#: netbox/dcim/models/device_components.py:290 -#: netbox/dcim/models/device_components.py:319 +#: netbox/dcim/models/device_components.py:287 +#: netbox/dcim/models/device_components.py:314 msgid "speed" msgstr "Geschwindigkeit" -#: netbox/dcim/models/device_components.py:294 -#: netbox/dcim/models/device_components.py:323 +#: netbox/dcim/models/device_components.py:291 +#: netbox/dcim/models/device_components.py:318 msgid "Port speed in bits per second" msgstr "Anschlussgeschwindigkeit in Bit pro Sekunde" -#: netbox/dcim/models/device_components.py:300 +#: netbox/dcim/models/device_components.py:297 msgid "console port" msgstr "Konsolenanschluss" -#: netbox/dcim/models/device_components.py:301 +#: netbox/dcim/models/device_components.py:298 msgid "console ports" msgstr "Konsolenanschlüsse" -#: netbox/dcim/models/device_components.py:329 +#: netbox/dcim/models/device_components.py:324 msgid "console server port" msgstr "Konsolenserveranschluss" -#: netbox/dcim/models/device_components.py:330 +#: netbox/dcim/models/device_components.py:325 msgid "console server ports" msgstr "Konsolenserveranschlüsse" -#: netbox/dcim/models/device_components.py:369 +#: netbox/dcim/models/device_components.py:362 msgid "power port" msgstr "Stromanschluss" -#: netbox/dcim/models/device_components.py:370 +#: netbox/dcim/models/device_components.py:363 msgid "power ports" msgstr "Stromanschlüsse" -#: netbox/dcim/models/device_components.py:487 +#: netbox/dcim/models/device_components.py:483 msgid "power outlet" msgstr "Stromabgang" -#: netbox/dcim/models/device_components.py:488 +#: netbox/dcim/models/device_components.py:484 msgid "power outlets" msgstr "Steckdosen" -#: netbox/dcim/models/device_components.py:499 +#: netbox/dcim/models/device_components.py:492 #, python-brace-format msgid "Parent power port ({power_port}) must belong to the same device" msgstr "" "Übergeordneter Stromanschluss ({power_port}) muss zum selben Gerät gehören" -#: netbox/dcim/models/device_components.py:530 netbox/vpn/models/crypto.py:81 -#: netbox/vpn/models/crypto.py:226 +#: netbox/dcim/models/device_components.py:518 netbox/vpn/models/crypto.py:80 +#: netbox/vpn/models/crypto.py:222 msgid "mode" msgstr "Modus" -#: netbox/dcim/models/device_components.py:534 +#: netbox/dcim/models/device_components.py:523 msgid "IEEE 802.1Q tagging strategy" msgstr "IEEE 802.1Q-Tagging-Strategie" -#: netbox/dcim/models/device_components.py:542 +#: netbox/dcim/models/device_components.py:531 msgid "parent interface" msgstr "übergeordnete Schnittstelle" -#: netbox/dcim/models/device_components.py:602 -msgid "parent LAG" -msgstr "übergeordnete LAG" - -#: netbox/dcim/models/device_components.py:612 -msgid "This interface is used only for out-of-band management" -msgstr "Diese Schnittstelle wird nur für Out-of-Band-Verwaltung verwendet" - -#: netbox/dcim/models/device_components.py:617 -msgid "speed (Kbps)" -msgstr "Geschwindigkeit (Kbps)" - -#: netbox/dcim/models/device_components.py:620 -msgid "duplex" -msgstr "Duplex" - -#: netbox/dcim/models/device_components.py:630 -msgid "64-bit World Wide Name" -msgstr "Weltweiter 64-Bit-Name" - -#: netbox/dcim/models/device_components.py:642 -msgid "wireless channel" -msgstr "WLAN Kanal" - -#: netbox/dcim/models/device_components.py:649 -msgid "channel frequency (MHz)" -msgstr "Kanalfrequenz (MHz)" - -#: netbox/dcim/models/device_components.py:650 -#: netbox/dcim/models/device_components.py:658 -msgid "Populated by selected channel (if set)" -msgstr "Wird vom ausgewählten Kanal aufgefüllt (falls gesetzt)" - -#: netbox/dcim/models/device_components.py:664 -msgid "transmit power (dBm)" -msgstr "Sendeleistung (dBm)" - -#: netbox/dcim/models/device_components.py:689 netbox/wireless/models.py:117 -msgid "wireless LANs" -msgstr "WLANs" - -#: netbox/dcim/models/device_components.py:697 -#: netbox/virtualization/models/virtualmachines.py:335 +#: netbox/dcim/models/device_components.py:547 msgid "untagged VLAN" msgstr "untagged VLAN" -#: netbox/dcim/models/device_components.py:703 -#: netbox/virtualization/models/virtualmachines.py:341 +#: netbox/dcim/models/device_components.py:553 msgid "tagged VLANs" msgstr "tagged VLANs" -#: netbox/dcim/models/device_components.py:745 -#: netbox/virtualization/models/virtualmachines.py:377 +#: netbox/dcim/models/device_components.py:561 +#: netbox/dcim/tables/devices.py:602 netbox/ipam/forms/bulk_edit.py:510 +#: netbox/ipam/forms/bulk_import.py:491 netbox/ipam/forms/filtersets.py:565 +#: netbox/ipam/forms/model_forms.py:692 netbox/ipam/tables/vlans.py:106 +#: netbox/templates/dcim/interface.html:86 netbox/templates/ipam/vlan.html:77 +msgid "Q-in-Q SVLAN" +msgstr "Q-in-Q-SVLAN" + +#: netbox/dcim/models/device_components.py:576 +msgid "primary MAC address" +msgstr "primäre MAC-Adresse" + +#: netbox/dcim/models/device_components.py:588 +msgid "Only Q-in-Q interfaces may specify a service VLAN." +msgstr "Nur Q-in-Q-Schnittstellen können ein Service-VLAN angeben." + +#: netbox/dcim/models/device_components.py:594 +#, python-brace-format +msgid "MAC address {mac_address} is not assigned to this interface." +msgstr "MAC-Adresse {mac_address} ist dieser Schnittstelle nicht zugewiesen." + +#: netbox/dcim/models/device_components.py:650 +msgid "parent LAG" +msgstr "übergeordnete LAG" + +#: netbox/dcim/models/device_components.py:660 +msgid "This interface is used only for out-of-band management" +msgstr "Diese Schnittstelle wird nur für Out-of-Band-Verwaltung verwendet" + +#: netbox/dcim/models/device_components.py:665 +msgid "speed (Kbps)" +msgstr "Geschwindigkeit (Kbps)" + +#: netbox/dcim/models/device_components.py:668 +msgid "duplex" +msgstr "Duplex" + +#: netbox/dcim/models/device_components.py:678 +msgid "64-bit World Wide Name" +msgstr "Weltweiter 64-Bit-Name" + +#: netbox/dcim/models/device_components.py:692 +msgid "wireless channel" +msgstr "WLAN Kanal" + +#: netbox/dcim/models/device_components.py:699 +msgid "channel frequency (MHz)" +msgstr "Kanalfrequenz (MHz)" + +#: netbox/dcim/models/device_components.py:700 +#: netbox/dcim/models/device_components.py:708 +msgid "Populated by selected channel (if set)" +msgstr "Wird vom ausgewählten Kanal aufgefüllt (falls gesetzt)" + +#: netbox/dcim/models/device_components.py:714 +msgid "transmit power (dBm)" +msgstr "Sendeleistung (dBm)" + +#: netbox/dcim/models/device_components.py:741 netbox/wireless/models.py:117 +msgid "wireless LANs" +msgstr "WLANs" + +#: netbox/dcim/models/device_components.py:789 +#: netbox/virtualization/models/virtualmachines.py:359 msgid "interface" msgstr "Schnittstelle" -#: netbox/dcim/models/device_components.py:746 -#: netbox/virtualization/models/virtualmachines.py:378 +#: netbox/dcim/models/device_components.py:790 +#: netbox/virtualization/models/virtualmachines.py:360 msgid "interfaces" msgstr "Schnittstellen" -#: netbox/dcim/models/device_components.py:757 +#: netbox/dcim/models/device_components.py:798 #, python-brace-format msgid "{display_type} interfaces cannot have a cable attached." msgstr "" "{display_type} An Schnittstellen kann kein Kabel angeschlossen werden." -#: netbox/dcim/models/device_components.py:765 +#: netbox/dcim/models/device_components.py:806 #, python-brace-format msgid "{display_type} interfaces cannot be marked as connected." msgstr "" "{display_type} Schnittstellen können nicht als verbunden markiert werden." -#: netbox/dcim/models/device_components.py:774 -#: netbox/virtualization/models/virtualmachines.py:390 +#: netbox/dcim/models/device_components.py:815 +#: netbox/virtualization/models/virtualmachines.py:370 msgid "An interface cannot be its own parent." msgstr "" "Eine Schnittstelle kann nicht seine eigene übergeordnete Schnittstelle sein." -#: netbox/dcim/models/device_components.py:778 +#: netbox/dcim/models/device_components.py:819 msgid "Only virtual interfaces may be assigned to a parent interface." msgstr "" "Nur virtuelle Schnittstellen können einer übergeordneten Schnittstelle " "zugewiesen werden." -#: netbox/dcim/models/device_components.py:785 +#: netbox/dcim/models/device_components.py:826 #, python-brace-format msgid "" "The selected parent interface ({interface}) belongs to a different device " @@ -5698,7 +6223,7 @@ msgstr "" "Die ausgewählte übergeordnete Schnittstelle ({interface}) gehört zu einem " "anderen Gerät ({device})" -#: netbox/dcim/models/device_components.py:791 +#: netbox/dcim/models/device_components.py:832 #, python-brace-format msgid "" "The selected parent interface ({interface}) belongs to {device}, which is " @@ -5707,7 +6232,7 @@ msgstr "" "Die ausgewählte übergeordnete Schnittstelle ({interface}) gehört zu " "{device}, das nicht Teil des virtuellen Chassis ist {virtual_chassis}." -#: netbox/dcim/models/device_components.py:811 +#: netbox/dcim/models/device_components.py:852 #, python-brace-format msgid "" "The selected bridge interface ({bridge}) belongs to a different device " @@ -5716,7 +6241,7 @@ msgstr "" "Die gewählte Bridge-Schnittstelle ({bridge}) gehört zu einem anderen Gerät " "({device})." -#: netbox/dcim/models/device_components.py:817 +#: netbox/dcim/models/device_components.py:858 #, python-brace-format msgid "" "The selected bridge interface ({interface}) belongs to {device}, which is " @@ -5725,17 +6250,17 @@ msgstr "" "Die gewählte Bridge-Schnittstelle ({interface}) gehört zu {device}, das " "nicht Teil des virtuellen Chassis {virtual_chassis}ist." -#: netbox/dcim/models/device_components.py:828 +#: netbox/dcim/models/device_components.py:869 msgid "Virtual interfaces cannot have a parent LAG interface." msgstr "" "Virtuelle Schnittstellen können keine übergeordnete LAG-Schnittstelle haben." -#: netbox/dcim/models/device_components.py:832 +#: netbox/dcim/models/device_components.py:873 msgid "A LAG interface cannot be its own parent." msgstr "" "Eine LAG-Schnittstelle nicht seine eigene übergeordnete Schnittstelle sein." -#: netbox/dcim/models/device_components.py:839 +#: netbox/dcim/models/device_components.py:880 #, python-brace-format msgid "" "The selected LAG interface ({lag}) belongs to a different device ({device})." @@ -5743,7 +6268,7 @@ msgstr "" "Die gewählte LAG-Schnittstelle ({lag}) gehört zu einem anderen Gerät " "({device})." -#: netbox/dcim/models/device_components.py:845 +#: netbox/dcim/models/device_components.py:886 #, python-brace-format msgid "" "The selected LAG interface ({lag}) belongs to {device}, which is not part of" @@ -5752,50 +6277,54 @@ msgstr "" "Die gewählte LAG-Schnittstelle ({lag}) gehört zu {device}, das nicht Teil " "des virtuellen Chassis {virtual_chassis} ist." -#: netbox/dcim/models/device_components.py:856 +#: netbox/dcim/models/device_components.py:897 msgid "Virtual interfaces cannot have a PoE mode." msgstr "Virtuelle Schnittstellen können keinen PoE-Modus haben." -#: netbox/dcim/models/device_components.py:860 +#: netbox/dcim/models/device_components.py:901 msgid "Virtual interfaces cannot have a PoE type." msgstr "Virtuelle Schnittstellen können keinen PoE-Typ haben." -#: netbox/dcim/models/device_components.py:866 +#: netbox/dcim/models/device_components.py:907 msgid "Must specify PoE mode when designating a PoE type." msgstr "" "Bei der Festlegung eines PoE-Typs muss der PoE-Modus angegeben werden." -#: netbox/dcim/models/device_components.py:873 +#: netbox/dcim/models/device_components.py:914 msgid "Wireless role may be set only on wireless interfaces." msgstr "Die WLAN-Rolle kann nur auf Funkschnittstellen festgelegt werden." -#: netbox/dcim/models/device_components.py:875 +#: netbox/dcim/models/device_components.py:916 msgid "Channel may be set only on wireless interfaces." msgstr "Der Kanal kann nur an drahtlosen Schnittstellen eingestellt werden." -#: netbox/dcim/models/device_components.py:881 +#: netbox/dcim/models/device_components.py:922 msgid "Channel frequency may be set only on wireless interfaces." msgstr "" "Die Kanalfrequenz kann nur an drahtlosen Schnittstellen eingestellt werden." -#: netbox/dcim/models/device_components.py:885 +#: netbox/dcim/models/device_components.py:926 msgid "Cannot specify custom frequency with channel selected." msgstr "" "Bei ausgewähltem Kanal kann keine benutzerdefinierte Frequenz angegeben " "werden." -#: netbox/dcim/models/device_components.py:891 +#: netbox/dcim/models/device_components.py:932 msgid "Channel width may be set only on wireless interfaces." msgstr "" "Die Kanalbreite kann nur an drahtlosen Schnittstellen eingestellt werden." -#: netbox/dcim/models/device_components.py:893 +#: netbox/dcim/models/device_components.py:934 msgid "Cannot specify custom width with channel selected." msgstr "" "Bei ausgewähltem Kanal kann keine benutzerdefinierte Breite angegeben " "werden." -#: netbox/dcim/models/device_components.py:901 +#: netbox/dcim/models/device_components.py:938 +msgid "Interface mode does not support an untagged vlan." +msgstr "Der Schnittstellenmodus unterstützt kein ungetaggtes VLAN ." + +#: netbox/dcim/models/device_components.py:944 #, python-brace-format msgid "" "The untagged VLAN ({untagged_vlan}) must belong to the same site as the " @@ -5804,24 +6333,24 @@ msgstr "" "Das untagged VLAN ({untagged_vlan}) muss zu demselben Standort gehören wie " "das übergeordnete Gerät der Schnittstelle, oder es muss global sein." -#: netbox/dcim/models/device_components.py:990 +#: netbox/dcim/models/device_components.py:1041 msgid "Mapped position on corresponding rear port" msgstr "Abgebildete Position am entsprechenden hinteren Anschluss" -#: netbox/dcim/models/device_components.py:1006 +#: netbox/dcim/models/device_components.py:1057 msgid "front port" msgstr "Frontanschluss" -#: netbox/dcim/models/device_components.py:1007 +#: netbox/dcim/models/device_components.py:1058 msgid "front ports" msgstr "Frontanschlüsse" -#: netbox/dcim/models/device_components.py:1021 +#: netbox/dcim/models/device_components.py:1069 #, python-brace-format msgid "Rear port ({rear_port}) must belong to the same device" msgstr "Rückanschluss ({rear_port}) muss zum selben Gerät gehören" -#: netbox/dcim/models/device_components.py:1029 +#: netbox/dcim/models/device_components.py:1077 #, python-brace-format msgid "" "Invalid rear port position ({rear_port_position}): Rear port {name} has only" @@ -5830,19 +6359,19 @@ msgstr "" "Ungültige Position des hinteren Anschlusses ({rear_port_position}): Hinterer" " Anschluss {name} hat nur {positions} Stellungen." -#: netbox/dcim/models/device_components.py:1059 +#: netbox/dcim/models/device_components.py:1107 msgid "Number of front ports which may be mapped" msgstr "Anzahl der Frontanschlüsse, die zugeordnet werden können" -#: netbox/dcim/models/device_components.py:1064 +#: netbox/dcim/models/device_components.py:1112 msgid "rear port" msgstr "Rückanschluss" -#: netbox/dcim/models/device_components.py:1065 +#: netbox/dcim/models/device_components.py:1113 msgid "rear ports" msgstr "Rückanschlüsse" -#: netbox/dcim/models/device_components.py:1079 +#: netbox/dcim/models/device_components.py:1124 #, python-brace-format msgid "" "The number of positions cannot be less than the number of mapped front ports" @@ -5851,38 +6380,38 @@ msgstr "" "Die Anzahl der Positionen darf nicht kleiner sein als die Anzahl der " "zugewiesenen Vorderanschlüsse ({frontport_count})" -#: netbox/dcim/models/device_components.py:1120 +#: netbox/dcim/models/device_components.py:1165 msgid "module bay" msgstr "Moduleinsatz" -#: netbox/dcim/models/device_components.py:1121 +#: netbox/dcim/models/device_components.py:1166 msgid "module bays" msgstr "Moduleinsätze" -#: netbox/dcim/models/device_components.py:1138 -#: netbox/dcim/models/devices.py:1224 +#: netbox/dcim/models/device_components.py:1180 +#: netbox/dcim/models/devices.py:1229 msgid "A module bay cannot belong to a module installed within it." msgstr "" "Ein Modulschacht kann nicht zu einem darin installierten Modul gehören." -#: netbox/dcim/models/device_components.py:1164 +#: netbox/dcim/models/device_components.py:1206 msgid "device bay" msgstr "Geräteeinsatz" -#: netbox/dcim/models/device_components.py:1165 +#: netbox/dcim/models/device_components.py:1207 msgid "device bays" msgstr "Geräteeinsätze" -#: netbox/dcim/models/device_components.py:1175 +#: netbox/dcim/models/device_components.py:1214 #, python-brace-format msgid "This type of device ({device_type}) does not support device bays." msgstr "Dieser Gerätetyp ({device_type}) unterstützt keine Geräteeinsätze." -#: netbox/dcim/models/device_components.py:1181 +#: netbox/dcim/models/device_components.py:1220 msgid "Cannot install a device into itself." msgstr "Ein Gerät kann nicht in sich selbst installiert werden." -#: netbox/dcim/models/device_components.py:1189 +#: netbox/dcim/models/device_components.py:1228 #, python-brace-format msgid "" "Cannot install the specified device; device is already installed in {bay}." @@ -5890,122 +6419,122 @@ msgstr "" "Das angegebene Gerät kann nicht installiert werden; Das Gerät ist bereits " "installiert in {bay}." -#: netbox/dcim/models/device_components.py:1210 +#: netbox/dcim/models/device_components.py:1249 msgid "inventory item role" msgstr "Inventarartikelrolle" -#: netbox/dcim/models/device_components.py:1211 +#: netbox/dcim/models/device_components.py:1250 msgid "inventory item roles" msgstr "Inventarartikelrollen" -#: netbox/dcim/models/device_components.py:1268 -#: netbox/dcim/models/devices.py:607 netbox/dcim/models/devices.py:1181 -#: netbox/dcim/models/racks.py:313 -#: netbox/virtualization/models/virtualmachines.py:131 +#: netbox/dcim/models/device_components.py:1310 +#: netbox/dcim/models/devices.py:598 netbox/dcim/models/devices.py:1189 +#: netbox/dcim/models/racks.py:304 +#: netbox/virtualization/models/virtualmachines.py:126 msgid "serial number" msgstr "Seriennummer" -#: netbox/dcim/models/device_components.py:1276 -#: netbox/dcim/models/devices.py:615 netbox/dcim/models/devices.py:1188 -#: netbox/dcim/models/racks.py:320 +#: netbox/dcim/models/device_components.py:1318 +#: netbox/dcim/models/devices.py:606 netbox/dcim/models/devices.py:1196 +#: netbox/dcim/models/racks.py:311 msgid "asset tag" msgstr "Asset-Tag" -#: netbox/dcim/models/device_components.py:1277 +#: netbox/dcim/models/device_components.py:1319 msgid "A unique tag used to identify this item" msgstr "" "Ein eindeutiges Etikett, das zur Identifizierung dieses Artikels verwendet " "wird" -#: netbox/dcim/models/device_components.py:1280 +#: netbox/dcim/models/device_components.py:1322 msgid "discovered" msgstr "erkannt" -#: netbox/dcim/models/device_components.py:1282 +#: netbox/dcim/models/device_components.py:1324 msgid "This item was automatically discovered" msgstr "Dieser Artikel wurde automatisch erkannt" -#: netbox/dcim/models/device_components.py:1300 +#: netbox/dcim/models/device_components.py:1342 msgid "inventory item" msgstr "Inventarartikel" -#: netbox/dcim/models/device_components.py:1301 +#: netbox/dcim/models/device_components.py:1343 msgid "inventory items" msgstr "Inventarartikel" -#: netbox/dcim/models/device_components.py:1312 +#: netbox/dcim/models/device_components.py:1351 msgid "Cannot assign self as parent." msgstr "Kann sich nicht als übergeordnetes Objekt zuweisen." -#: netbox/dcim/models/device_components.py:1320 +#: netbox/dcim/models/device_components.py:1359 msgid "Parent inventory item does not belong to the same device." msgstr "Der Artikel im übergeordneten Inventar gehört nicht zum selben Gerät." -#: netbox/dcim/models/device_components.py:1326 +#: netbox/dcim/models/device_components.py:1365 msgid "Cannot move an inventory item with dependent children" msgstr "" "Ein Inventargegenstand mit untergeordneten Inventargegenständen kann nicht " "bewegt werden" -#: netbox/dcim/models/device_components.py:1334 +#: netbox/dcim/models/device_components.py:1373 msgid "Cannot assign inventory item to component on another device" msgstr "" "Inventargegenstand kann nicht einer Komponente auf einem anderen Gerät " "zugewiesen werden" -#: netbox/dcim/models/devices.py:54 +#: netbox/dcim/models/devices.py:59 msgid "manufacturer" msgstr "Hersteller" -#: netbox/dcim/models/devices.py:55 +#: netbox/dcim/models/devices.py:60 msgid "manufacturers" msgstr "Hersteller" -#: netbox/dcim/models/devices.py:82 netbox/dcim/models/devices.py:382 +#: netbox/dcim/models/devices.py:84 netbox/dcim/models/devices.py:383 #: netbox/dcim/models/racks.py:133 msgid "model" msgstr "Modell" -#: netbox/dcim/models/devices.py:95 +#: netbox/dcim/models/devices.py:97 msgid "default platform" msgstr "Standard-Betriebssystem" -#: netbox/dcim/models/devices.py:98 netbox/dcim/models/devices.py:386 +#: netbox/dcim/models/devices.py:100 netbox/dcim/models/devices.py:387 msgid "part number" msgstr "Teilenummer" -#: netbox/dcim/models/devices.py:101 netbox/dcim/models/devices.py:389 +#: netbox/dcim/models/devices.py:103 netbox/dcim/models/devices.py:390 msgid "Discrete part number (optional)" msgstr "Diskrete Teilenummer (optional)" -#: netbox/dcim/models/devices.py:107 netbox/dcim/models/racks.py:54 +#: netbox/dcim/models/devices.py:109 netbox/dcim/models/racks.py:53 msgid "height (U)" msgstr "Höhe (HE)" -#: netbox/dcim/models/devices.py:111 +#: netbox/dcim/models/devices.py:113 msgid "exclude from utilization" msgstr "von der Auslastung ausschließen" -#: netbox/dcim/models/devices.py:112 +#: netbox/dcim/models/devices.py:114 msgid "Devices of this type are excluded when calculating rack utilization." msgstr "" "Geräte diesen Typs sind bei der Berechnung der Rackauslastung " "ausgeschlossen." -#: netbox/dcim/models/devices.py:116 +#: netbox/dcim/models/devices.py:118 msgid "is full depth" msgstr "hat volle Tiefe" -#: netbox/dcim/models/devices.py:117 +#: netbox/dcim/models/devices.py:119 msgid "Device consumes both front and rear rack faces." msgstr "" "Das Gerät verbraucht sowohl die vordere als auch die hintere Rackfront." -#: netbox/dcim/models/devices.py:123 +#: netbox/dcim/models/devices.py:126 msgid "parent/child status" msgstr "Über-/Untergeordnetenstatus" -#: netbox/dcim/models/devices.py:124 +#: netbox/dcim/models/devices.py:127 msgid "" "Parent devices house child devices in device bays. Leave blank if this " "device type is neither a parent nor a child." @@ -6014,25 +6543,25 @@ msgstr "" "untergebracht. Lassen Sie das Feld leer, wenn es sich bei diesem Gerätetyp " "weder um ein übergeordnetes noch um ein untergeordnetes handelt." -#: netbox/dcim/models/devices.py:128 netbox/dcim/models/devices.py:392 -#: netbox/dcim/models/devices.py:659 netbox/dcim/models/racks.py:324 +#: netbox/dcim/models/devices.py:131 netbox/dcim/models/devices.py:393 +#: netbox/dcim/models/devices.py:651 netbox/dcim/models/racks.py:315 msgid "airflow" msgstr "Luftstrom" -#: netbox/dcim/models/devices.py:204 +#: netbox/dcim/models/devices.py:208 msgid "device type" msgstr "Gerätetyp" -#: netbox/dcim/models/devices.py:205 +#: netbox/dcim/models/devices.py:209 msgid "device types" msgstr "Gerätetypen" -#: netbox/dcim/models/devices.py:290 +#: netbox/dcim/models/devices.py:291 msgid "U height must be in increments of 0.5 rack units." msgstr "" "Die HE-Höhe muss in Schritten von 0,5 Höheneinheiten (HE) angegeben werden." -#: netbox/dcim/models/devices.py:307 +#: netbox/dcim/models/devices.py:308 #, python-brace-format msgid "" "Device {device} in rack {rack} does not have sufficient space to accommodate" @@ -6041,7 +6570,7 @@ msgstr "" "Gerät {device} im Rack {rack} hat nicht genug Platz für eine Höhe von " "{height}HE" -#: netbox/dcim/models/devices.py:322 +#: netbox/dcim/models/devices.py:323 #, python-brace-format msgid "" "Unable to set 0U height: Found {racked_instance_count} " @@ -6051,7 +6580,7 @@ msgstr "" "href=\"{url}\">{racked_instance_count} Instanzen bereits in Racks " "montiert." -#: netbox/dcim/models/devices.py:331 +#: netbox/dcim/models/devices.py:332 msgid "" "Must delete all device bay templates associated with this device before " "declassifying it as a parent device." @@ -6059,156 +6588,156 @@ msgstr "" "Alle mit diesem Gerät verknüpften Geräteschachtvorlagen müssen gelöscht " "werden, bevor es als übergeordnetes Gerät freigegeben wird." -#: netbox/dcim/models/devices.py:337 +#: netbox/dcim/models/devices.py:338 msgid "Child device types must be 0U." msgstr "Untergeordnete Gerätetypen müssen 0 HE sein." -#: netbox/dcim/models/devices.py:411 +#: netbox/dcim/models/devices.py:413 msgid "module type" msgstr "Modultyp" -#: netbox/dcim/models/devices.py:412 +#: netbox/dcim/models/devices.py:414 msgid "module types" msgstr "Modultypen" -#: netbox/dcim/models/devices.py:485 +#: netbox/dcim/models/devices.py:484 msgid "Virtual machines may be assigned to this role" msgstr "Virtuelle Maschinen können dieser Rolle zugewiesen werden" -#: netbox/dcim/models/devices.py:497 +#: netbox/dcim/models/devices.py:496 msgid "device role" msgstr "Geräterolle" -#: netbox/dcim/models/devices.py:498 +#: netbox/dcim/models/devices.py:497 msgid "device roles" msgstr "Geräterollen" -#: netbox/dcim/models/devices.py:515 +#: netbox/dcim/models/devices.py:511 msgid "Optionally limit this platform to devices of a certain manufacturer" msgstr "" "Beschränken Sie dieses Betriebssystem optional auf Geräte eines bestimmten " "Herstellers" -#: netbox/dcim/models/devices.py:527 +#: netbox/dcim/models/devices.py:523 msgid "platform" msgstr "Betriebssystem" -#: netbox/dcim/models/devices.py:528 +#: netbox/dcim/models/devices.py:524 msgid "platforms" msgstr "Betriebssysteme" -#: netbox/dcim/models/devices.py:576 +#: netbox/dcim/models/devices.py:572 msgid "The function this device serves" msgstr "Die Funktion, die dieses Gerät erfüllt" -#: netbox/dcim/models/devices.py:608 +#: netbox/dcim/models/devices.py:599 msgid "Chassis serial number, assigned by the manufacturer" msgstr "vom Hersteller vergebene Gehäuse-Seriennummer" -#: netbox/dcim/models/devices.py:616 netbox/dcim/models/devices.py:1189 +#: netbox/dcim/models/devices.py:607 netbox/dcim/models/devices.py:1197 msgid "A unique tag used to identify this device" msgstr "" "Ein eindeutiger Wert, der zur Identifizierung dieses Geräts verwendet wird" -#: netbox/dcim/models/devices.py:643 +#: netbox/dcim/models/devices.py:634 msgid "position (U)" msgstr "Position (HE)" -#: netbox/dcim/models/devices.py:650 +#: netbox/dcim/models/devices.py:642 msgid "rack face" msgstr "Rackseite" -#: netbox/dcim/models/devices.py:670 netbox/dcim/models/devices.py:1420 -#: netbox/virtualization/models/virtualmachines.py:100 +#: netbox/dcim/models/devices.py:663 netbox/dcim/models/devices.py:1425 +#: netbox/virtualization/models/virtualmachines.py:95 msgid "primary IPv4" msgstr "primäre IPv4-Adresse" -#: netbox/dcim/models/devices.py:678 netbox/dcim/models/devices.py:1428 -#: netbox/virtualization/models/virtualmachines.py:108 +#: netbox/dcim/models/devices.py:671 netbox/dcim/models/devices.py:1433 +#: netbox/virtualization/models/virtualmachines.py:103 msgid "primary IPv6" msgstr "primäre IPv6-Adresse" -#: netbox/dcim/models/devices.py:686 +#: netbox/dcim/models/devices.py:679 msgid "out-of-band IP" msgstr "Out-of-Band-IP-Adresse" -#: netbox/dcim/models/devices.py:703 +#: netbox/dcim/models/devices.py:696 msgid "VC position" msgstr "VC-Position" -#: netbox/dcim/models/devices.py:706 +#: netbox/dcim/models/devices.py:699 msgid "Virtual chassis position" msgstr "Position des virtuellen Gehäuses" -#: netbox/dcim/models/devices.py:709 +#: netbox/dcim/models/devices.py:702 msgid "VC priority" msgstr "VC-Priorität" -#: netbox/dcim/models/devices.py:713 +#: netbox/dcim/models/devices.py:706 msgid "Virtual chassis master election priority" msgstr "Priorität bei der Masterwahl für virtuelle Gehäuse" -#: netbox/dcim/models/devices.py:716 netbox/dcim/models/sites.py:207 +#: netbox/dcim/models/devices.py:709 netbox/dcim/models/sites.py:208 msgid "latitude" msgstr "Breitengrad" -#: netbox/dcim/models/devices.py:721 netbox/dcim/models/devices.py:729 -#: netbox/dcim/models/sites.py:212 netbox/dcim/models/sites.py:220 +#: netbox/dcim/models/devices.py:714 netbox/dcim/models/devices.py:722 +#: netbox/dcim/models/sites.py:213 netbox/dcim/models/sites.py:221 msgid "GPS coordinate in decimal format (xx.yyyyyy)" msgstr "GPS-Koordinate im Dezimalformat (xx.yyyyyy)" -#: netbox/dcim/models/devices.py:724 netbox/dcim/models/sites.py:215 +#: netbox/dcim/models/devices.py:717 netbox/dcim/models/sites.py:216 msgid "longitude" msgstr "Längengrad" -#: netbox/dcim/models/devices.py:797 +#: netbox/dcim/models/devices.py:790 msgid "Device name must be unique per site." msgstr "Der Name des Geräts muss pro Standort eindeutig sein." -#: netbox/dcim/models/devices.py:808 netbox/ipam/models/services.py:75 +#: netbox/dcim/models/devices.py:801 netbox/ipam/models/services.py:71 msgid "device" msgstr "Gerät" -#: netbox/dcim/models/devices.py:809 +#: netbox/dcim/models/devices.py:802 msgid "devices" msgstr "Geräte" -#: netbox/dcim/models/devices.py:835 +#: netbox/dcim/models/devices.py:821 #, python-brace-format msgid "Rack {rack} does not belong to site {site}." msgstr "Rack {rack} gehört nicht zum Standort {site}." -#: netbox/dcim/models/devices.py:840 +#: netbox/dcim/models/devices.py:826 #, python-brace-format msgid "Location {location} does not belong to site {site}." msgstr "Lokation {location} gehört nicht zum Standort {site}." -#: netbox/dcim/models/devices.py:846 +#: netbox/dcim/models/devices.py:832 #, python-brace-format msgid "Rack {rack} does not belong to location {location}." msgstr "Rack {rack} gehört nicht zur Lokation {location}." -#: netbox/dcim/models/devices.py:853 +#: netbox/dcim/models/devices.py:839 msgid "Cannot select a rack face without assigning a rack." msgstr "" "Es ist nicht möglich, eine Rackseite auszuwählen, ohne ein Rack zuzuweisen." -#: netbox/dcim/models/devices.py:857 +#: netbox/dcim/models/devices.py:843 msgid "Cannot select a rack position without assigning a rack." msgstr "" "Es ist nicht möglich, eine Rackposition auszuwählen, ohne ein Rack " "zuzuweisen." -#: netbox/dcim/models/devices.py:863 +#: netbox/dcim/models/devices.py:849 msgid "Position must be in increments of 0.5 rack units." msgstr "Die Position muss in Schritten von 0,5 Höheneinheiten erfolgen." -#: netbox/dcim/models/devices.py:867 +#: netbox/dcim/models/devices.py:853 msgid "Must specify rack face when defining rack position." msgstr "" "Bei der Definition der Rackposition muss die Rackseite angegeben werden." -#: netbox/dcim/models/devices.py:875 +#: netbox/dcim/models/devices.py:861 #, python-brace-format msgid "" "A 0U device type ({device_type}) cannot be assigned to a rack position." @@ -6216,7 +6745,7 @@ msgstr "" "Ein 0 HE-Gerätetyp ({device_type}) kann keiner Höheneinheit zugewiesen " "werden." -#: netbox/dcim/models/devices.py:886 +#: netbox/dcim/models/devices.py:872 msgid "" "Child device types cannot be assigned to a rack face. This is an attribute " "of the parent device." @@ -6224,7 +6753,7 @@ msgstr "" "Untergeordnete Gerätetypen können keiner Rackseite zugewiesen werden. Dies " "ist ein Attribut des übergeordneten Geräts." -#: netbox/dcim/models/devices.py:893 +#: netbox/dcim/models/devices.py:879 msgid "" "Child device types cannot be assigned to a rack position. This is an " "attribute of the parent device." @@ -6232,7 +6761,7 @@ msgstr "" "Untergeordnete Gerätetypen können keiner Rackposition zugewiesen werden. " "Dies ist ein Attribut des übergeordneten Geräts." -#: netbox/dcim/models/devices.py:907 +#: netbox/dcim/models/devices.py:893 #, python-brace-format msgid "" "U{position} is already occupied or does not have sufficient space to " @@ -6241,22 +6770,22 @@ msgstr "" "HE{position} ist bereits belegt oder verfügt nicht über ausreichend " "Speicherplatz für diesen Gerätetyp: {device_type} ({u_height}HE)" -#: netbox/dcim/models/devices.py:922 +#: netbox/dcim/models/devices.py:908 #, python-brace-format msgid "{ip} is not an IPv4 address." msgstr "{ip} ist keine IPv4-Adresse." -#: netbox/dcim/models/devices.py:931 netbox/dcim/models/devices.py:946 +#: netbox/dcim/models/devices.py:920 netbox/dcim/models/devices.py:938 #, python-brace-format msgid "The specified IP address ({ip}) is not assigned to this device." msgstr "Die angegebene IP-Adresse ({ip}) ist diesem Gerät nicht zugewiesen." -#: netbox/dcim/models/devices.py:937 +#: netbox/dcim/models/devices.py:926 #, python-brace-format msgid "{ip} is not an IPv6 address." msgstr "{ip} ist keine IPv6-Adresse." -#: netbox/dcim/models/devices.py:964 +#: netbox/dcim/models/devices.py:956 #, python-brace-format msgid "" "The assigned platform is limited to {platform_manufacturer} device types, " @@ -6265,12 +6794,17 @@ msgstr "" "Das zugewiesene Betriebssystem ist beschränkt auf {platform_manufacturer} " "Gerätetypen, aber der Typ dieses Geräts gehört zu {devicetype_manufacturer}." -#: netbox/dcim/models/devices.py:975 +#: netbox/dcim/models/devices.py:967 #, python-brace-format msgid "The assigned cluster belongs to a different site ({site})" msgstr "Der zugewiesene Cluster gehört zu einem anderen Standort ({site})" -#: netbox/dcim/models/devices.py:983 +#: netbox/dcim/models/devices.py:974 +#, python-brace-format +msgid "The assigned cluster belongs to a different location ({location})" +msgstr "Der zugewiesene Cluster gehört zu einem anderen Standort ({location})" + +#: netbox/dcim/models/devices.py:982 msgid "A device assigned to a virtual chassis must have its position defined." msgstr "" "Die Position eines Geräts, das einem virtuellen Gehäuse zugewiesen ist, muss" @@ -6285,15 +6819,15 @@ msgstr "" "Gerät kann nicht aus dem virtuellen Gehäuse entfernt werden " "{virtual_chassis} weil es derzeit der Master ist." -#: netbox/dcim/models/devices.py:1196 +#: netbox/dcim/models/devices.py:1204 msgid "module" msgstr "Modul" -#: netbox/dcim/models/devices.py:1197 +#: netbox/dcim/models/devices.py:1205 msgid "modules" msgstr "Module" -#: netbox/dcim/models/devices.py:1213 +#: netbox/dcim/models/devices.py:1218 #, python-brace-format msgid "" "Module must be installed within a module bay belonging to the assigned " @@ -6302,15 +6836,15 @@ msgstr "" "Das Modul muss in einem Modulschacht installiert werden, der zum " "zugewiesenen Gerät gehört ({device})." -#: netbox/dcim/models/devices.py:1339 +#: netbox/dcim/models/devices.py:1346 msgid "domain" msgstr "Domäne" -#: netbox/dcim/models/devices.py:1352 netbox/dcim/models/devices.py:1353 +#: netbox/dcim/models/devices.py:1359 netbox/dcim/models/devices.py:1360 msgid "virtual chassis" msgstr "virtuelles Gehäuse" -#: netbox/dcim/models/devices.py:1368 +#: netbox/dcim/models/devices.py:1372 #, python-brace-format msgid "" "The selected master ({master}) is not assigned to this virtual chassis." @@ -6318,7 +6852,7 @@ msgstr "" "Der gewählte Master ({master}) ist diesem virtuellen Chassis nicht " "zugewiesen." -#: netbox/dcim/models/devices.py:1384 +#: netbox/dcim/models/devices.py:1388 #, python-brace-format msgid "" "Unable to delete virtual chassis {self}. There are member interfaces which " @@ -6327,53 +6861,63 @@ msgstr "" "Das virtuelle Gehäuse kann nicht gelöscht werden {self}. Es gibt " "Mitgliedsschnittstellen, die gehäuseübergreifende LAG-Schnittstellen bilden." -#: netbox/dcim/models/devices.py:1409 netbox/vpn/models/l2vpn.py:37 +#: netbox/dcim/models/devices.py:1414 netbox/vpn/models/l2vpn.py:37 msgid "identifier" msgstr "identifizieren" -#: netbox/dcim/models/devices.py:1410 +#: netbox/dcim/models/devices.py:1415 msgid "Numeric identifier unique to the parent device" msgstr "Numerische Kennung, die für das übergeordnete Gerät eindeutig ist" -#: netbox/dcim/models/devices.py:1438 netbox/extras/models/customfields.py:225 +#: netbox/dcim/models/devices.py:1443 netbox/extras/models/customfields.py:225 #: netbox/extras/models/models.py:107 netbox/extras/models/models.py:694 -#: netbox/netbox/models/__init__.py:115 +#: netbox/netbox/models/__init__.py:120 msgid "comments" msgstr "Kommentare" -#: netbox/dcim/models/devices.py:1454 +#: netbox/dcim/models/devices.py:1459 msgid "virtual device context" msgstr "Virtual Device Context" -#: netbox/dcim/models/devices.py:1455 +#: netbox/dcim/models/devices.py:1460 msgid "virtual device contexts" msgstr "Virtual Device Context" -#: netbox/dcim/models/devices.py:1487 +#: netbox/dcim/models/devices.py:1489 #, python-brace-format msgid "{ip} is not an IPv{family} address." msgstr "{ip} ist keine IPv{family}-Adresse." -#: netbox/dcim/models/devices.py:1493 +#: netbox/dcim/models/devices.py:1495 msgid "Primary IP address must belong to an interface on the assigned device." msgstr "" "Die primäre IP-Adresse muss zu einer Schnittstelle auf dem zugewiesenen " "Gerät gehören." -#: netbox/dcim/models/mixins.py:15 netbox/extras/models/configs.py:41 -#: netbox/extras/models/models.py:313 netbox/extras/models/models.py:522 -#: netbox/extras/models/search.py:48 netbox/ipam/models/ip.py:194 -msgid "weight" -msgstr "Gewicht" +#: netbox/dcim/models/devices.py:1527 +msgid "MAC addresses" +msgstr "MAC-Adressen" -#: netbox/dcim/models/mixins.py:22 -msgid "weight unit" -msgstr "Gewichtseinheit" - -#: netbox/dcim/models/mixins.py:51 -msgid "Must specify a unit when setting a weight" +#: netbox/dcim/models/devices.py:1559 +msgid "" +"Cannot unassign MAC Address while it is designated as the primary MAC for an" +" object" msgstr "" -"Wenn ein Gewicht eingegeben wird, muss auch eine Einheit eingegeben werden." +"Die MAC-Adresse kann nicht aufgehoben werden, solange sie als primäre MAC-" +"Adresse für ein Objekt festgelegt ist" + +#: netbox/dcim/models/devices.py:1563 +msgid "" +"Cannot reassign MAC Address while it is designated as the primary MAC for an" +" object" +msgstr "" +"Die MAC-Adresse kann nicht neu zugewiesen werden, solange sie als primäre " +"MAC-Adresse für ein Objekt festgelegt ist" + +#: netbox/dcim/models/mixins.py:94 +#, python-brace-format +msgid "Please select a {scope_type}." +msgstr "Bitte wählen Sie einen {scope_type}." #: netbox/dcim/models/power.py:55 msgid "power panel" @@ -6383,7 +6927,7 @@ msgstr "Stromverteiler" msgid "power panels" msgstr "Stromverteiler" -#: netbox/dcim/models/power.py:70 +#: netbox/dcim/models/power.py:67 #, python-brace-format msgid "" "Location {location} ({location_site}) is in a different site than {site}" @@ -6391,43 +6935,43 @@ msgstr "" "Lokation {location} ({location_site}) befindet sich auf einem anderen " "Standort als {site}" -#: netbox/dcim/models/power.py:108 +#: netbox/dcim/models/power.py:106 msgid "supply" msgstr "liefern" -#: netbox/dcim/models/power.py:114 +#: netbox/dcim/models/power.py:112 msgid "phase" msgstr "Phase" -#: netbox/dcim/models/power.py:120 +#: netbox/dcim/models/power.py:118 msgid "voltage" msgstr "Spannung" -#: netbox/dcim/models/power.py:125 +#: netbox/dcim/models/power.py:123 msgid "amperage" msgstr "Stromstärke" -#: netbox/dcim/models/power.py:130 +#: netbox/dcim/models/power.py:128 msgid "max utilization" msgstr "maximale Auslastung" -#: netbox/dcim/models/power.py:133 +#: netbox/dcim/models/power.py:131 msgid "Maximum permissible draw (percentage)" msgstr "Maximal zulässige Auslastung (in Prozent)" -#: netbox/dcim/models/power.py:136 +#: netbox/dcim/models/power.py:134 msgid "available power" msgstr "verfügbare Leistung" -#: netbox/dcim/models/power.py:164 +#: netbox/dcim/models/power.py:162 msgid "power feed" msgstr "Stromzufuhr" -#: netbox/dcim/models/power.py:165 +#: netbox/dcim/models/power.py:163 msgid "power feeds" msgstr "Stromzufuhren" -#: netbox/dcim/models/power.py:179 +#: netbox/dcim/models/power.py:174 #, python-brace-format msgid "" "Rack {rack} ({rack_site}) and power panel {powerpanel} ({powerpanel_site}) " @@ -6436,55 +6980,55 @@ msgstr "" "Rack {rack} ({rack_site}) und Stromverteiler {powerpanel} " "({powerpanel_site}) befinden sich an verschiedenen Sites." -#: netbox/dcim/models/power.py:190 +#: netbox/dcim/models/power.py:185 msgid "Voltage cannot be negative for AC supply" msgstr "Die Spannung darf für die Wechselstromversorgung nicht negativ sein" -#: netbox/dcim/models/racks.py:47 +#: netbox/dcim/models/racks.py:46 msgid "width" msgstr "Breite" -#: netbox/dcim/models/racks.py:48 +#: netbox/dcim/models/racks.py:47 msgid "Rail-to-rail width" msgstr "Breite von Schiene zu Schiene" -#: netbox/dcim/models/racks.py:56 +#: netbox/dcim/models/racks.py:55 msgid "Height in rack units" msgstr "Höhe in Höheneinheiten (HE)" -#: netbox/dcim/models/racks.py:60 +#: netbox/dcim/models/racks.py:59 msgid "starting unit" msgstr "Start HE" -#: netbox/dcim/models/racks.py:62 +#: netbox/dcim/models/racks.py:61 msgid "Starting unit for rack" msgstr "Start HE für Rack" -#: netbox/dcim/models/racks.py:66 +#: netbox/dcim/models/racks.py:65 msgid "descending units" msgstr "absteigende Höheneinheiten" -#: netbox/dcim/models/racks.py:67 +#: netbox/dcim/models/racks.py:66 msgid "Units are numbered top-to-bottom" msgstr "Die Höheneinheiten sind von oben nach unten nummeriert" -#: netbox/dcim/models/racks.py:72 +#: netbox/dcim/models/racks.py:71 msgid "outer width" msgstr "äußere Breite" -#: netbox/dcim/models/racks.py:75 +#: netbox/dcim/models/racks.py:74 msgid "Outer dimension of rack (width)" msgstr "Außenabmessungen des Racks (Breite)" -#: netbox/dcim/models/racks.py:78 +#: netbox/dcim/models/racks.py:77 msgid "outer depth" msgstr "äußere Tiefe" -#: netbox/dcim/models/racks.py:81 +#: netbox/dcim/models/racks.py:80 msgid "Outer dimension of rack (depth)" msgstr "Außenabmessung des Racks (Tiefe)" -#: netbox/dcim/models/racks.py:84 +#: netbox/dcim/models/racks.py:83 msgid "outer unit" msgstr "Maßeinheit" @@ -6508,7 +7052,7 @@ msgstr "maximales Gewicht" msgid "Maximum load capacity for the rack" msgstr "Maximale Tragfähigkeit des Racks" -#: netbox/dcim/models/racks.py:125 netbox/dcim/models/racks.py:252 +#: netbox/dcim/models/racks.py:125 netbox/dcim/models/racks.py:247 msgid "form factor" msgstr "Formfaktor" @@ -6520,59 +7064,59 @@ msgstr "Racktyp" msgid "rack types" msgstr "Racktypen" -#: netbox/dcim/models/racks.py:180 netbox/dcim/models/racks.py:379 +#: netbox/dcim/models/racks.py:177 netbox/dcim/models/racks.py:368 msgid "Must specify a unit when setting an outer width/depth" msgstr "" "Muss eine Einheit angeben, wenn eine äußere Breite/Tiefe eingestellt wird" -#: netbox/dcim/models/racks.py:184 netbox/dcim/models/racks.py:383 +#: netbox/dcim/models/racks.py:181 netbox/dcim/models/racks.py:372 msgid "Must specify a unit when setting a maximum weight" msgstr "" "Bei der Einstellung eines Höchstgewichts muss eine Einheit angegeben werden" -#: netbox/dcim/models/racks.py:230 +#: netbox/dcim/models/racks.py:227 msgid "rack role" msgstr "Rolle des Rack" -#: netbox/dcim/models/racks.py:231 +#: netbox/dcim/models/racks.py:228 msgid "rack roles" msgstr "Rackrollen" -#: netbox/dcim/models/racks.py:274 +#: netbox/dcim/models/racks.py:265 msgid "facility ID" msgstr "Einrichtungs-ID" -#: netbox/dcim/models/racks.py:275 +#: netbox/dcim/models/racks.py:266 msgid "Locally-assigned identifier" msgstr "Lokal zugewiesener Bezeichner" -#: netbox/dcim/models/racks.py:308 netbox/ipam/forms/bulk_import.py:201 -#: netbox/ipam/forms/bulk_import.py:266 netbox/ipam/forms/bulk_import.py:301 -#: netbox/ipam/forms/bulk_import.py:483 -#: netbox/virtualization/forms/bulk_import.py:112 +#: netbox/dcim/models/racks.py:299 netbox/ipam/forms/bulk_import.py:197 +#: netbox/ipam/forms/bulk_import.py:265 netbox/ipam/forms/bulk_import.py:300 +#: netbox/ipam/forms/bulk_import.py:482 +#: netbox/virtualization/forms/bulk_import.py:118 msgid "Functional role" msgstr "Funktionelle Rolle" -#: netbox/dcim/models/racks.py:321 +#: netbox/dcim/models/racks.py:312 msgid "A unique tag used to identify this rack" msgstr "" "Ein eindeutiger Wert, das zur Identifizierung dieses Racks verwendet wird" -#: netbox/dcim/models/racks.py:359 +#: netbox/dcim/models/racks.py:351 msgid "rack" msgstr "Rack" -#: netbox/dcim/models/racks.py:360 +#: netbox/dcim/models/racks.py:352 msgid "racks" msgstr "Racks" -#: netbox/dcim/models/racks.py:375 +#: netbox/dcim/models/racks.py:364 #, python-brace-format msgid "Assigned location must belong to parent site ({site})." msgstr "" "Die zugewiesene Lokation muss zum übergeordneten Standort gehören ({site})." -#: netbox/dcim/models/racks.py:393 +#: netbox/dcim/models/racks.py:387 #, python-brace-format msgid "" "Rack must be at least {min_height}U tall to house currently installed " @@ -6581,7 +7125,7 @@ msgstr "" "Das Rack muss mindestens {min_height}HE groß sein, um aktuell installierten " "Geräte unterzubringen." -#: netbox/dcim/models/racks.py:400 +#: netbox/dcim/models/racks.py:396 #, python-brace-format msgid "" "Rack unit numbering must begin at {position} or less to house currently " @@ -6590,127 +7134,127 @@ msgstr "" "Die Nummerierung der Höheneinheiten muss bei {position} oder weniger " "beginnen, um die aktuell installierten Geräte unterzubringen." -#: netbox/dcim/models/racks.py:408 +#: netbox/dcim/models/racks.py:404 #, python-brace-format msgid "Location must be from the same site, {site}." msgstr "Die Lokation muss vom selben Standort stammen, {site}." -#: netbox/dcim/models/racks.py:670 +#: netbox/dcim/models/racks.py:666 msgid "units" msgstr "Einheiten" -#: netbox/dcim/models/racks.py:696 +#: netbox/dcim/models/racks.py:692 msgid "rack reservation" msgstr "HE-Reservierung" -#: netbox/dcim/models/racks.py:697 +#: netbox/dcim/models/racks.py:693 msgid "rack reservations" msgstr "Rackreservierungen" -#: netbox/dcim/models/racks.py:714 +#: netbox/dcim/models/racks.py:707 #, python-brace-format msgid "Invalid unit(s) for {height}U rack: {unit_list}" msgstr "Ungültige Einheit(en) für {height}HE Rack: {unit_list}" -#: netbox/dcim/models/racks.py:727 +#: netbox/dcim/models/racks.py:720 #, python-brace-format msgid "The following units have already been reserved: {unit_list}" msgstr "Die folgenden Einheiten wurden bereits reserviert: {unit_list}" -#: netbox/dcim/models/sites.py:49 +#: netbox/dcim/models/sites.py:53 msgid "A top-level region with this name already exists." msgstr "" "Eine Region der obersten Ebene mit diesem Namen ist bereits vorhanden." -#: netbox/dcim/models/sites.py:59 +#: netbox/dcim/models/sites.py:63 msgid "A top-level region with this slug already exists." msgstr "Eine Top-Level-Region mit dieser URL-Slug existiert bereits." -#: netbox/dcim/models/sites.py:62 +#: netbox/dcim/models/sites.py:66 msgid "region" msgstr "Region" -#: netbox/dcim/models/sites.py:63 +#: netbox/dcim/models/sites.py:67 msgid "regions" msgstr "Regionen" -#: netbox/dcim/models/sites.py:102 +#: netbox/dcim/models/sites.py:109 msgid "A top-level site group with this name already exists." msgstr "" "Eine Standortgruppe auf oberster Ebene mit diesem Namen ist bereits " "vorhanden." -#: netbox/dcim/models/sites.py:112 +#: netbox/dcim/models/sites.py:119 msgid "A top-level site group with this slug already exists." msgstr "" "Eine Standortgruppe auf oberster Ebene mit diesem URL-Slug existiert " "bereits." -#: netbox/dcim/models/sites.py:115 +#: netbox/dcim/models/sites.py:122 msgid "site group" msgstr "Standortgruppe" -#: netbox/dcim/models/sites.py:116 +#: netbox/dcim/models/sites.py:123 msgid "site groups" msgstr "Standortgruppen" -#: netbox/dcim/models/sites.py:141 +#: netbox/dcim/models/sites.py:145 msgid "Full name of the site" msgstr "Vollständiger Name des Standorts" -#: netbox/dcim/models/sites.py:181 netbox/dcim/models/sites.py:279 +#: netbox/dcim/models/sites.py:181 netbox/dcim/models/sites.py:283 msgid "facility" msgstr "Einrichtung" -#: netbox/dcim/models/sites.py:184 netbox/dcim/models/sites.py:282 +#: netbox/dcim/models/sites.py:184 netbox/dcim/models/sites.py:286 msgid "Local facility ID or description" msgstr "Lokale Einrichtungs-ID oder Beschreibung" -#: netbox/dcim/models/sites.py:195 +#: netbox/dcim/models/sites.py:196 msgid "physical address" msgstr "physische Adresse" -#: netbox/dcim/models/sites.py:198 +#: netbox/dcim/models/sites.py:199 msgid "Physical location of the building" msgstr "Physischer Standort des Gebäudes" -#: netbox/dcim/models/sites.py:201 +#: netbox/dcim/models/sites.py:202 msgid "shipping address" msgstr "Lieferadresse" -#: netbox/dcim/models/sites.py:204 +#: netbox/dcim/models/sites.py:205 msgid "If different from the physical address" msgstr "Falls anders als die physische Adresse" -#: netbox/dcim/models/sites.py:238 +#: netbox/dcim/models/sites.py:245 msgid "site" msgstr "Standort" -#: netbox/dcim/models/sites.py:239 +#: netbox/dcim/models/sites.py:246 msgid "sites" msgstr "Standorte" -#: netbox/dcim/models/sites.py:309 +#: netbox/dcim/models/sites.py:319 msgid "A location with this name already exists within the specified site." msgstr "" "Eine Lokation mit diesem Namen ist bereits in dem angegebenen Standort " "vorhanden." -#: netbox/dcim/models/sites.py:319 +#: netbox/dcim/models/sites.py:329 msgid "A location with this slug already exists within the specified site." msgstr "" "Ein Lokation mit diesem URL-Slug existiert bereits auf dem angegebenen " "Standort." -#: netbox/dcim/models/sites.py:322 +#: netbox/dcim/models/sites.py:332 msgid "location" msgstr "Lokation" -#: netbox/dcim/models/sites.py:323 +#: netbox/dcim/models/sites.py:333 msgid "locations" msgstr "Lokationen" -#: netbox/dcim/models/sites.py:337 +#: netbox/dcim/models/sites.py:344 #, python-brace-format msgid "Parent location ({parent}) must belong to the same site ({site})." msgstr "" @@ -6725,11 +7269,11 @@ msgstr "Abschlusspunkt A" msgid "Termination B" msgstr "Abschlusspunkt B" -#: netbox/dcim/tables/cables.py:66 netbox/wireless/tables/wirelesslink.py:23 +#: netbox/dcim/tables/cables.py:66 netbox/wireless/tables/wirelesslink.py:22 msgid "Device A" msgstr "Gerät A" -#: netbox/dcim/tables/cables.py:72 netbox/wireless/tables/wirelesslink.py:32 +#: netbox/dcim/tables/cables.py:72 netbox/wireless/tables/wirelesslink.py:31 msgid "Device B" msgstr "Gerät B" @@ -6763,97 +7307,91 @@ msgstr "Standort B" msgid "Reachable" msgstr "Erreichbar" -#: netbox/dcim/tables/devices.py:58 netbox/dcim/tables/devices.py:106 -#: netbox/dcim/tables/racks.py:150 netbox/dcim/tables/sites.py:105 -#: netbox/dcim/tables/sites.py:148 netbox/extras/tables/tables.py:545 +#: netbox/dcim/tables/devices.py:69 netbox/dcim/tables/devices.py:117 +#: netbox/dcim/tables/racks.py:149 netbox/dcim/tables/sites.py:104 +#: netbox/dcim/tables/sites.py:147 netbox/extras/tables/tables.py:545 #: netbox/netbox/navigation/menu.py:69 netbox/netbox/navigation/menu.py:73 #: netbox/netbox/navigation/menu.py:75 #: netbox/virtualization/forms/model_forms.py:122 -#: netbox/virtualization/tables/clusters.py:83 -#: netbox/virtualization/views.py:204 +#: netbox/virtualization/tables/clusters.py:87 +#: netbox/virtualization/views.py:216 msgid "Devices" msgstr "Geräte" -#: netbox/dcim/tables/devices.py:63 netbox/dcim/tables/devices.py:111 -#: netbox/virtualization/tables/clusters.py:88 +#: netbox/dcim/tables/devices.py:74 netbox/dcim/tables/devices.py:122 +#: netbox/virtualization/tables/clusters.py:92 msgid "VMs" msgstr "VMs" -#: netbox/dcim/tables/devices.py:100 netbox/dcim/tables/devices.py:216 -#: netbox/extras/forms/model_forms.py:630 +#: netbox/dcim/tables/devices.py:111 netbox/dcim/tables/devices.py:227 +#: netbox/extras/forms/model_forms.py:644 #: netbox/templates/dcim/device.html:112 -#: netbox/templates/dcim/device/render_config.html:11 -#: netbox/templates/dcim/device/render_config.html:14 #: netbox/templates/dcim/devicerole.html:44 #: netbox/templates/dcim/platform.html:41 #: netbox/templates/extras/configtemplate.html:10 +#: netbox/templates/extras/object_render_config.html:12 +#: netbox/templates/extras/object_render_config.html:15 #: netbox/templates/virtualization/virtualmachine.html:48 -#: netbox/templates/virtualization/virtualmachine/render_config.html:11 -#: netbox/templates/virtualization/virtualmachine/render_config.html:14 -#: netbox/virtualization/tables/virtualmachines.py:107 +#: netbox/virtualization/tables/virtualmachines.py:77 msgid "Config Template" msgstr "Konfigvorlage" -#: netbox/dcim/tables/devices.py:150 netbox/templates/dcim/sitegroup.html:26 -msgid "Site Group" -msgstr "Standortgruppe" - -#: netbox/dcim/tables/devices.py:187 netbox/dcim/tables/devices.py:1068 -#: netbox/ipam/forms/bulk_import.py:527 netbox/ipam/forms/model_forms.py:306 -#: netbox/ipam/forms/model_forms.py:319 netbox/ipam/tables/ip.py:356 -#: netbox/ipam/tables/ip.py:423 netbox/ipam/tables/ip.py:446 +#: netbox/dcim/tables/devices.py:198 netbox/dcim/tables/devices.py:1100 +#: netbox/ipam/forms/bulk_import.py:562 netbox/ipam/forms/model_forms.py:316 +#: netbox/ipam/forms/model_forms.py:329 netbox/ipam/tables/ip.py:308 +#: netbox/ipam/tables/ip.py:375 netbox/ipam/tables/ip.py:398 #: netbox/templates/ipam/ipaddress.html:11 -#: netbox/virtualization/tables/virtualmachines.py:95 +#: netbox/virtualization/tables/virtualmachines.py:65 msgid "IP Address" msgstr "IP-Adresse" -#: netbox/dcim/tables/devices.py:191 netbox/dcim/tables/devices.py:1072 -#: netbox/virtualization/tables/virtualmachines.py:86 +#: netbox/dcim/tables/devices.py:202 netbox/dcim/tables/devices.py:1104 +#: netbox/virtualization/tables/virtualmachines.py:56 msgid "IPv4 Address" msgstr "IPv4-Adresse" -#: netbox/dcim/tables/devices.py:195 netbox/dcim/tables/devices.py:1076 -#: netbox/virtualization/tables/virtualmachines.py:90 +#: netbox/dcim/tables/devices.py:206 netbox/dcim/tables/devices.py:1108 +#: netbox/virtualization/tables/virtualmachines.py:60 msgid "IPv6 Address" msgstr "IPv6-Adresse" -#: netbox/dcim/tables/devices.py:210 +#: netbox/dcim/tables/devices.py:221 msgid "VC Position" msgstr "VC-Position" -#: netbox/dcim/tables/devices.py:213 +#: netbox/dcim/tables/devices.py:224 msgid "VC Priority" msgstr "VC-Priorität" -#: netbox/dcim/tables/devices.py:220 netbox/templates/dcim/device_edit.html:38 +#: netbox/dcim/tables/devices.py:231 netbox/templates/dcim/device_edit.html:38 #: netbox/templates/dcim/devicebay_populate.html:16 msgid "Parent Device" msgstr "Übergeordnetes Gerät" -#: netbox/dcim/tables/devices.py:225 +#: netbox/dcim/tables/devices.py:236 msgid "Position (Device Bay)" msgstr "Position (Geräteschacht)" -#: netbox/dcim/tables/devices.py:234 +#: netbox/dcim/tables/devices.py:245 msgid "Console ports" msgstr "Konsolenanschlüsse" -#: netbox/dcim/tables/devices.py:237 +#: netbox/dcim/tables/devices.py:248 msgid "Console server ports" msgstr "Konsolenserveranschlüsse" -#: netbox/dcim/tables/devices.py:240 +#: netbox/dcim/tables/devices.py:251 msgid "Power ports" msgstr "Stromanschlüsse" -#: netbox/dcim/tables/devices.py:243 +#: netbox/dcim/tables/devices.py:254 msgid "Power outlets" msgstr "Steckdosen" -#: netbox/dcim/tables/devices.py:246 netbox/dcim/tables/devices.py:1081 -#: netbox/dcim/tables/devicetypes.py:128 netbox/dcim/views.py:1040 -#: netbox/dcim/views.py:1279 netbox/dcim/views.py:1975 -#: netbox/netbox/navigation/menu.py:94 netbox/netbox/navigation/menu.py:250 +#: netbox/dcim/tables/devices.py:257 netbox/dcim/tables/devices.py:1113 +#: netbox/dcim/tables/devicetypes.py:133 netbox/dcim/views.py:1144 +#: netbox/dcim/views.py:1388 netbox/dcim/views.py:2139 +#: netbox/netbox/navigation/menu.py:94 netbox/netbox/navigation/menu.py:258 #: netbox/templates/dcim/device/base.html:37 #: netbox/templates/dcim/device_list.html:43 #: netbox/templates/dcim/devicetype/base.html:34 @@ -6863,35 +7401,35 @@ msgstr "Steckdosen" #: netbox/templates/dcim/virtualdevicecontext.html:81 #: netbox/templates/virtualization/virtualmachine/base.html:27 #: netbox/templates/virtualization/virtualmachine_list.html:14 -#: netbox/virtualization/tables/virtualmachines.py:101 -#: netbox/virtualization/views.py:364 netbox/wireless/tables/wirelesslan.py:55 +#: netbox/virtualization/tables/virtualmachines.py:71 +#: netbox/virtualization/views.py:381 netbox/wireless/tables/wirelesslan.py:63 msgid "Interfaces" msgstr "Schnittstellen" -#: netbox/dcim/tables/devices.py:249 +#: netbox/dcim/tables/devices.py:260 msgid "Front ports" msgstr "Frontanschlüsse" -#: netbox/dcim/tables/devices.py:255 +#: netbox/dcim/tables/devices.py:266 msgid "Device bays" msgstr "Geräteeinsätze" -#: netbox/dcim/tables/devices.py:258 +#: netbox/dcim/tables/devices.py:269 msgid "Module bays" msgstr "Moduleinsätze" -#: netbox/dcim/tables/devices.py:261 +#: netbox/dcim/tables/devices.py:272 msgid "Inventory items" msgstr "Inventarartikel" -#: netbox/dcim/tables/devices.py:305 netbox/dcim/tables/modules.py:57 +#: netbox/dcim/tables/devices.py:315 netbox/dcim/tables/modules.py:57 #: netbox/templates/dcim/modulebay.html:17 msgid "Module Bay" msgstr "Moduleinsatz" -#: netbox/dcim/tables/devices.py:318 netbox/dcim/tables/devicetypes.py:47 -#: netbox/dcim/tables/devicetypes.py:143 netbox/dcim/views.py:1115 -#: netbox/dcim/views.py:2073 netbox/netbox/navigation/menu.py:103 +#: netbox/dcim/tables/devices.py:328 netbox/dcim/tables/devicetypes.py:52 +#: netbox/dcim/tables/devicetypes.py:148 netbox/dcim/views.py:1219 +#: netbox/dcim/views.py:2237 netbox/netbox/navigation/menu.py:103 #: netbox/templates/dcim/device/base.html:52 #: netbox/templates/dcim/device_list.html:71 #: netbox/templates/dcim/devicetype/base.html:49 @@ -6900,124 +7438,133 @@ msgstr "Moduleinsatz" msgid "Inventory Items" msgstr "Inventarartikel" -#: netbox/dcim/tables/devices.py:333 +#: netbox/dcim/tables/devices.py:343 msgid "Cable Color" msgstr "Farbe des Kabels" -#: netbox/dcim/tables/devices.py:339 +#: netbox/dcim/tables/devices.py:349 msgid "Link Peers" msgstr "Verbindungsenden" -#: netbox/dcim/tables/devices.py:342 +#: netbox/dcim/tables/devices.py:352 msgid "Mark Connected" msgstr "Als verbunden markieren" -#: netbox/dcim/tables/devices.py:461 +#: netbox/dcim/tables/devices.py:471 msgid "Maximum draw (W)" msgstr "Maximaler Stromverbrauch (W)" -#: netbox/dcim/tables/devices.py:464 +#: netbox/dcim/tables/devices.py:474 msgid "Allocated draw (W)" msgstr "Zugewiesener Stromverbrauch (W)" -#: netbox/dcim/tables/devices.py:558 netbox/ipam/forms/model_forms.py:734 -#: netbox/ipam/tables/fhrp.py:28 netbox/ipam/views.py:596 -#: netbox/ipam/views.py:696 netbox/netbox/navigation/menu.py:158 -#: netbox/netbox/navigation/menu.py:160 -#: netbox/templates/dcim/interface.html:339 +#: netbox/dcim/tables/devices.py:572 netbox/ipam/forms/model_forms.py:784 +#: netbox/ipam/tables/fhrp.py:28 netbox/ipam/views.py:633 +#: netbox/ipam/views.py:738 netbox/netbox/navigation/menu.py:164 +#: netbox/netbox/navigation/menu.py:166 +#: netbox/templates/dcim/interface.html:396 #: netbox/templates/ipam/ipaddress_bulk_add.html:15 #: netbox/templates/ipam/service.html:40 -#: netbox/templates/virtualization/vminterface.html:85 +#: netbox/templates/virtualization/vminterface.html:101 #: netbox/vpn/tables/tunnels.py:98 msgid "IP Addresses" msgstr "IP-Adressen" -#: netbox/dcim/tables/devices.py:564 netbox/netbox/navigation/menu.py:202 +#: netbox/dcim/tables/devices.py:578 netbox/netbox/navigation/menu.py:210 #: netbox/templates/ipam/inc/panels/fhrp_groups.html:6 msgid "FHRP Groups" msgstr "FHRP-Gruppen" -#: netbox/dcim/tables/devices.py:576 netbox/templates/dcim/interface.html:89 -#: netbox/templates/virtualization/vminterface.html:67 +#: netbox/dcim/tables/devices.py:590 netbox/templates/dcim/interface.html:95 +#: netbox/templates/virtualization/vminterface.html:59 #: netbox/templates/vpn/tunnel.html:18 #: netbox/templates/vpn/tunneltermination.html:13 #: netbox/vpn/forms/bulk_edit.py:76 netbox/vpn/forms/bulk_import.py:76 #: netbox/vpn/forms/filtersets.py:42 netbox/vpn/forms/filtersets.py:82 -#: netbox/vpn/forms/model_forms.py:60 netbox/vpn/forms/model_forms.py:145 +#: netbox/vpn/forms/model_forms.py:61 netbox/vpn/forms/model_forms.py:146 #: netbox/vpn/tables/tunnels.py:78 msgid "Tunnel" msgstr "Tunnel" -#: netbox/dcim/tables/devices.py:604 netbox/dcim/tables/devicetypes.py:227 +#: netbox/dcim/tables/devices.py:626 netbox/dcim/tables/devicetypes.py:234 #: netbox/templates/dcim/interface.html:65 msgid "Management Only" msgstr "Nur zur Verwaltung" -#: netbox/dcim/tables/devices.py:623 +#: netbox/dcim/tables/devices.py:645 msgid "VDCs" msgstr "VDCs" -#: netbox/dcim/tables/devices.py:873 netbox/templates/dcim/modulebay.html:53 +#: netbox/dcim/tables/devices.py:652 netbox/templates/dcim/interface.html:163 +msgid "Virtual Circuit" +msgstr "Virtuelle Verbindung" + +#: netbox/dcim/tables/devices.py:904 netbox/templates/dcim/modulebay.html:53 msgid "Installed Module" msgstr "Installiertes Modul" -#: netbox/dcim/tables/devices.py:876 +#: netbox/dcim/tables/devices.py:907 msgid "Module Serial" msgstr "Seriennummer des Moduls" -#: netbox/dcim/tables/devices.py:880 +#: netbox/dcim/tables/devices.py:911 msgid "Module Asset Tag" msgstr "Modul-Asset-Tag" -#: netbox/dcim/tables/devices.py:889 +#: netbox/dcim/tables/devices.py:920 msgid "Module Status" msgstr "Status des Moduls" -#: netbox/dcim/tables/devices.py:944 netbox/dcim/tables/devicetypes.py:312 -#: netbox/templates/dcim/inventoryitem.html:40 +#: netbox/dcim/tables/devices.py:974 netbox/dcim/tables/devicetypes.py:319 +#: netbox/templates/dcim/inventoryitem.html:44 msgid "Component" msgstr "Komponente" -#: netbox/dcim/tables/devices.py:1000 +#: netbox/dcim/tables/devices.py:1032 msgid "Items" msgstr "Artikel" -#: netbox/dcim/tables/devicetypes.py:37 netbox/netbox/navigation/menu.py:84 +#: netbox/dcim/tables/devicetypes.py:37 netbox/netbox/navigation/menu.py:60 +#: netbox/netbox/navigation/menu.py:62 +msgid "Rack Types" +msgstr "Racktypen" + +#: netbox/dcim/tables/devicetypes.py:42 netbox/netbox/navigation/menu.py:84 #: netbox/netbox/navigation/menu.py:86 msgid "Device Types" msgstr "Gerätetypen" -#: netbox/dcim/tables/devicetypes.py:42 netbox/netbox/navigation/menu.py:87 +#: netbox/dcim/tables/devicetypes.py:47 netbox/netbox/navigation/menu.py:87 msgid "Module Types" msgstr "Modultypen" -#: netbox/dcim/tables/devicetypes.py:52 netbox/extras/forms/filtersets.py:371 -#: netbox/extras/forms/model_forms.py:537 netbox/extras/tables/tables.py:540 +#: netbox/dcim/tables/devicetypes.py:57 netbox/extras/forms/filtersets.py:378 +#: netbox/extras/forms/model_forms.py:551 netbox/extras/tables/tables.py:540 #: netbox/netbox/navigation/menu.py:78 msgid "Platforms" msgstr "Betriebssysteme" -#: netbox/dcim/tables/devicetypes.py:84 +#: netbox/dcim/tables/devicetypes.py:89 #: netbox/templates/dcim/devicetype.html:29 msgid "Default Platform" msgstr "Standard-Betriebssystem" -#: netbox/dcim/tables/devicetypes.py:88 +#: netbox/dcim/tables/devicetypes.py:93 #: netbox/templates/dcim/devicetype.html:45 msgid "Full Depth" msgstr "Volle Tiefe" -#: netbox/dcim/tables/devicetypes.py:98 +#: netbox/dcim/tables/devicetypes.py:103 msgid "U Height" msgstr "Höhe in HE" -#: netbox/dcim/tables/devicetypes.py:113 netbox/dcim/tables/modules.py:26 +#: netbox/dcim/tables/devicetypes.py:118 netbox/dcim/tables/modules.py:26 #: netbox/dcim/tables/racks.py:89 msgid "Instances" msgstr "Instanzen" -#: netbox/dcim/tables/devicetypes.py:116 netbox/dcim/views.py:980 -#: netbox/dcim/views.py:1219 netbox/dcim/views.py:1911 +#: netbox/dcim/tables/devicetypes.py:121 netbox/dcim/views.py:1084 +#: netbox/dcim/views.py:1328 netbox/dcim/views.py:2075 #: netbox/netbox/navigation/menu.py:97 #: netbox/templates/dcim/device/base.html:25 #: netbox/templates/dcim/device_list.html:15 @@ -7027,8 +7574,8 @@ msgstr "Instanzen" msgid "Console Ports" msgstr "Konsolenanschlüsse" -#: netbox/dcim/tables/devicetypes.py:119 netbox/dcim/views.py:995 -#: netbox/dcim/views.py:1234 netbox/dcim/views.py:1927 +#: netbox/dcim/tables/devicetypes.py:124 netbox/dcim/views.py:1099 +#: netbox/dcim/views.py:1343 netbox/dcim/views.py:2091 #: netbox/netbox/navigation/menu.py:98 #: netbox/templates/dcim/device/base.html:28 #: netbox/templates/dcim/device_list.html:22 @@ -7038,8 +7585,8 @@ msgstr "Konsolenanschlüsse" msgid "Console Server Ports" msgstr "Konsolenserveranschlüsse" -#: netbox/dcim/tables/devicetypes.py:122 netbox/dcim/views.py:1010 -#: netbox/dcim/views.py:1249 netbox/dcim/views.py:1943 +#: netbox/dcim/tables/devicetypes.py:127 netbox/dcim/views.py:1114 +#: netbox/dcim/views.py:1358 netbox/dcim/views.py:2107 #: netbox/netbox/navigation/menu.py:99 #: netbox/templates/dcim/device/base.html:31 #: netbox/templates/dcim/device_list.html:29 @@ -7049,8 +7596,8 @@ msgstr "Konsolenserveranschlüsse" msgid "Power Ports" msgstr "Stromanschlüsse" -#: netbox/dcim/tables/devicetypes.py:125 netbox/dcim/views.py:1025 -#: netbox/dcim/views.py:1264 netbox/dcim/views.py:1959 +#: netbox/dcim/tables/devicetypes.py:130 netbox/dcim/views.py:1129 +#: netbox/dcim/views.py:1373 netbox/dcim/views.py:2123 #: netbox/netbox/navigation/menu.py:100 #: netbox/templates/dcim/device/base.html:34 #: netbox/templates/dcim/device_list.html:36 @@ -7060,8 +7607,8 @@ msgstr "Stromanschlüsse" msgid "Power Outlets" msgstr "Steckdosen" -#: netbox/dcim/tables/devicetypes.py:131 netbox/dcim/views.py:1055 -#: netbox/dcim/views.py:1294 netbox/dcim/views.py:1997 +#: netbox/dcim/tables/devicetypes.py:136 netbox/dcim/views.py:1159 +#: netbox/dcim/views.py:1403 netbox/dcim/views.py:2161 #: netbox/netbox/navigation/menu.py:95 #: netbox/templates/dcim/device/base.html:40 #: netbox/templates/dcim/devicetype/base.html:37 @@ -7070,8 +7617,8 @@ msgstr "Steckdosen" msgid "Front Ports" msgstr "Frontanschlüsse" -#: netbox/dcim/tables/devicetypes.py:134 netbox/dcim/views.py:1070 -#: netbox/dcim/views.py:1309 netbox/dcim/views.py:2013 +#: netbox/dcim/tables/devicetypes.py:139 netbox/dcim/views.py:1174 +#: netbox/dcim/views.py:1418 netbox/dcim/views.py:2177 #: netbox/netbox/navigation/menu.py:96 #: netbox/templates/dcim/device/base.html:43 #: netbox/templates/dcim/device_list.html:50 @@ -7081,16 +7628,16 @@ msgstr "Frontanschlüsse" msgid "Rear Ports" msgstr "Rückanschlüsse" -#: netbox/dcim/tables/devicetypes.py:137 netbox/dcim/views.py:1100 -#: netbox/dcim/views.py:2053 netbox/netbox/navigation/menu.py:102 +#: netbox/dcim/tables/devicetypes.py:142 netbox/dcim/views.py:1204 +#: netbox/dcim/views.py:2217 netbox/netbox/navigation/menu.py:102 #: netbox/templates/dcim/device/base.html:49 #: netbox/templates/dcim/device_list.html:57 #: netbox/templates/dcim/devicetype/base.html:46 msgid "Device Bays" msgstr "Geräteeinsätze" -#: netbox/dcim/tables/devicetypes.py:140 netbox/dcim/views.py:1085 -#: netbox/dcim/views.py:1324 netbox/dcim/views.py:2033 +#: netbox/dcim/tables/devicetypes.py:145 netbox/dcim/views.py:1189 +#: netbox/dcim/views.py:1433 netbox/dcim/views.py:2197 #: netbox/netbox/navigation/menu.py:101 #: netbox/templates/dcim/device/base.html:46 #: netbox/templates/dcim/device_list.html:64 @@ -7100,7 +7647,7 @@ msgstr "Geräteeinsätze" msgid "Module Bays" msgstr "Moduleinsätze" -#: netbox/dcim/tables/power.py:36 netbox/netbox/navigation/menu.py:297 +#: netbox/dcim/tables/power.py:36 netbox/netbox/navigation/menu.py:318 #: netbox/templates/dcim/powerpanel.html:51 msgid "Power Feeds" msgstr "Stromzufuhren" @@ -7113,111 +7660,106 @@ msgstr "Max. Auslastung" msgid "Available Power (VA)" msgstr "Verfügbare Leistung (VA)" -#: netbox/dcim/tables/racks.py:30 netbox/dcim/tables/sites.py:143 +#: netbox/dcim/tables/racks.py:30 netbox/dcim/tables/sites.py:142 #: netbox/netbox/navigation/menu.py:43 netbox/netbox/navigation/menu.py:47 #: netbox/netbox/navigation/menu.py:49 msgid "Racks" msgstr "Racks" -#: netbox/dcim/tables/racks.py:63 netbox/dcim/tables/racks.py:142 +#: netbox/dcim/tables/racks.py:63 netbox/dcim/tables/racks.py:141 #: netbox/templates/dcim/device.html:318 #: netbox/templates/dcim/inc/panels/racktype_dimensions.html:14 msgid "Height" msgstr "Höhe" -#: netbox/dcim/tables/racks.py:67 netbox/dcim/tables/racks.py:165 +#: netbox/dcim/tables/racks.py:67 netbox/dcim/tables/racks.py:164 #: netbox/templates/dcim/inc/panels/racktype_dimensions.html:18 msgid "Outer Width" msgstr "Äußere Breite" -#: netbox/dcim/tables/racks.py:71 netbox/dcim/tables/racks.py:169 +#: netbox/dcim/tables/racks.py:71 netbox/dcim/tables/racks.py:168 #: netbox/templates/dcim/inc/panels/racktype_dimensions.html:28 msgid "Outer Depth" msgstr "Äußere Tiefe" -#: netbox/dcim/tables/racks.py:79 netbox/dcim/tables/racks.py:177 +#: netbox/dcim/tables/racks.py:79 netbox/dcim/tables/racks.py:176 msgid "Max Weight" msgstr "Maximales Gewicht" -#: netbox/dcim/tables/racks.py:154 +#: netbox/dcim/tables/racks.py:153 msgid "Space" msgstr "Platz" #: netbox/dcim/tables/sites.py:30 netbox/dcim/tables/sites.py:57 -#: netbox/extras/forms/filtersets.py:351 -#: netbox/extras/forms/model_forms.py:517 netbox/ipam/forms/bulk_edit.py:131 -#: netbox/ipam/forms/model_forms.py:153 netbox/ipam/tables/asn.py:66 +#: netbox/extras/forms/filtersets.py:358 +#: netbox/extras/forms/model_forms.py:531 netbox/ipam/forms/bulk_edit.py:134 +#: netbox/ipam/forms/model_forms.py:159 netbox/ipam/tables/asn.py:66 #: netbox/netbox/navigation/menu.py:15 netbox/netbox/navigation/menu.py:17 msgid "Sites" msgstr "Standorte" -#: netbox/dcim/tests/test_api.py:47 +#: netbox/dcim/tests/test_api.py:50 msgid "Test case must set peer_termination_type" msgstr "Der Testfall muss peer_termination_type setzen" -#: netbox/dcim/views.py:138 +#: netbox/dcim/views.py:137 #, python-brace-format msgid "Disconnected {count} {type}" msgstr "Verbindung von {count} {type} unterbrochen" -#: netbox/dcim/views.py:738 netbox/netbox/navigation/menu.py:51 +#: netbox/dcim/views.py:825 netbox/netbox/navigation/menu.py:51 msgid "Reservations" msgstr "Rackreservierungen" -#: netbox/dcim/views.py:757 netbox/templates/dcim/location.html:90 +#: netbox/dcim/views.py:844 netbox/templates/dcim/location.html:90 #: netbox/templates/dcim/site.html:140 msgid "Non-Racked Devices" msgstr "Nicht in einem Rack befindliche Geräte" -#: netbox/dcim/views.py:2086 netbox/extras/forms/model_forms.py:577 +#: netbox/dcim/views.py:2250 netbox/extras/forms/model_forms.py:591 #: netbox/templates/extras/configcontext.html:10 -#: netbox/virtualization/forms/model_forms.py:225 -#: netbox/virtualization/views.py:405 +#: netbox/virtualization/forms/model_forms.py:232 +#: netbox/virtualization/views.py:422 msgid "Config Context" msgstr "Konfigurationsvorlage" -#: netbox/dcim/views.py:2096 netbox/virtualization/views.py:415 +#: netbox/dcim/views.py:2260 netbox/virtualization/views.py:432 msgid "Render Config" msgstr "Konfiguration rendern" -#: netbox/dcim/views.py:2131 netbox/virtualization/views.py:450 -#, python-brace-format -msgid "An error occurred while rendering the template: {error}" -msgstr "Ein Fehler ist beim Rendern der Vorlage aufgetreten: {error}" - -#: netbox/dcim/views.py:2149 netbox/extras/tables/tables.py:550 -#: netbox/netbox/navigation/menu.py:247 netbox/netbox/navigation/menu.py:249 -#: netbox/virtualization/views.py:178 +#: netbox/dcim/views.py:2273 netbox/extras/tables/tables.py:550 +#: netbox/netbox/navigation/menu.py:255 netbox/netbox/navigation/menu.py:257 +#: netbox/virtualization/views.py:190 msgid "Virtual Machines" msgstr "Virtuelle Maschinen" -#: netbox/dcim/views.py:2907 +#: netbox/dcim/views.py:3106 #, python-brace-format msgid "Installed device {device} in bay {device_bay}." msgstr "Gerät {device} im Schacht {device_bay} installiert." -#: netbox/dcim/views.py:2948 +#: netbox/dcim/views.py:3147 #, python-brace-format msgid "Removed device {device} from bay {device_bay}." msgstr "Gerät {device} im Schacht {device_bay} entfernt." -#: netbox/dcim/views.py:3054 netbox/ipam/tables/ip.py:234 +#: netbox/dcim/views.py:3263 netbox/ipam/tables/ip.py:180 msgid "Children" msgstr "Untergeordnet" -#: netbox/dcim/views.py:3520 +#: netbox/dcim/views.py:3730 #, python-brace-format msgid "Added member {device}" msgstr "Mitglied hinzugefügt {device}" -#: netbox/dcim/views.py:3567 +#: netbox/dcim/views.py:3779 #, python-brace-format msgid "Unable to remove master device {device} from the virtual chassis." msgstr "" "Ein Hauptgerät (Master Device) {device} kann von einem virtuellen Gehäuse " "nicht entfernt werden." -#: netbox/dcim/views.py:3580 +#: netbox/dcim/views.py:3792 #, python-brace-format msgid "Removed {device} from virtual chassis {chassis}" msgstr "{device} vom virtuellen Gehäuse {chassis} entfernt." @@ -7317,7 +7859,7 @@ msgstr "Nein" #: netbox/extras/choices.py:108 netbox/templates/tenancy/contact.html:57 #: netbox/tenancy/forms/bulk_edit.py:118 -#: netbox/wireless/forms/model_forms.py:168 +#: netbox/wireless/forms/model_forms.py:171 msgid "Link" msgstr "Link" @@ -7337,15 +7879,15 @@ msgstr "Alphabetisch (A-Z)" msgid "Alphabetical (Z-A)" msgstr "Alphabetisch (Z-A)" -#: netbox/extras/choices.py:144 netbox/extras/choices.py:167 +#: netbox/extras/choices.py:144 netbox/extras/choices.py:165 msgid "Info" msgstr "Info" -#: netbox/extras/choices.py:145 netbox/extras/choices.py:168 +#: netbox/extras/choices.py:145 netbox/extras/choices.py:166 msgid "Success" msgstr "Erfolg" -#: netbox/extras/choices.py:146 netbox/extras/choices.py:169 +#: netbox/extras/choices.py:146 netbox/extras/choices.py:167 msgid "Warning" msgstr "Warnung" @@ -7353,52 +7895,29 @@ msgstr "Warnung" msgid "Danger" msgstr "Gefahr" -#: netbox/extras/choices.py:165 +#: netbox/extras/choices.py:164 msgid "Debug" msgstr "Debug" -#: netbox/extras/choices.py:166 netbox/netbox/choices.py:101 -msgid "Default" -msgstr "Standard" - -#: netbox/extras/choices.py:170 +#: netbox/extras/choices.py:168 msgid "Failure" msgstr "Fehlschlag" -#: netbox/extras/choices.py:186 -msgid "Hourly" -msgstr "Stündlich" - -#: netbox/extras/choices.py:187 -msgid "12 hours" -msgstr "12 Stunden" - -#: netbox/extras/choices.py:188 -msgid "Daily" -msgstr "täglich" - -#: netbox/extras/choices.py:189 -msgid "Weekly" -msgstr "Wöchentlich" - -#: netbox/extras/choices.py:190 -msgid "30 days" -msgstr "30 Tage" - -#: netbox/extras/choices.py:226 +#: netbox/extras/choices.py:213 #: netbox/templates/dcim/virtualchassis_edit.html:107 #: netbox/templates/generic/bulk_add_component.html:68 #: netbox/templates/generic/object_edit.html:47 #: netbox/templates/generic/object_edit.html:80 +#: netbox/templates/htmx/quick_add.html:24 #: netbox/templates/ipam/inc/ipaddress_edit_header.html:7 msgid "Create" msgstr "Erstellen" -#: netbox/extras/choices.py:227 +#: netbox/extras/choices.py:214 msgid "Update" msgstr "Aktualisieren" -#: netbox/extras/choices.py:228 +#: netbox/extras/choices.py:215 #: netbox/templates/circuits/inc/circuit_termination.html:23 #: netbox/templates/dcim/inc/panels/inventory_items.html:37 #: netbox/templates/dcim/powerpanel.html:66 @@ -7413,82 +7932,82 @@ msgstr "Aktualisieren" msgid "Delete" msgstr "Löschen" -#: netbox/extras/choices.py:252 netbox/netbox/choices.py:57 -#: netbox/netbox/choices.py:102 +#: netbox/extras/choices.py:239 netbox/netbox/choices.py:59 +#: netbox/netbox/choices.py:104 msgid "Blue" msgstr "Blau" -#: netbox/extras/choices.py:253 netbox/netbox/choices.py:56 -#: netbox/netbox/choices.py:103 +#: netbox/extras/choices.py:240 netbox/netbox/choices.py:58 +#: netbox/netbox/choices.py:105 msgid "Indigo" msgstr "Indigo" -#: netbox/extras/choices.py:254 netbox/netbox/choices.py:54 -#: netbox/netbox/choices.py:104 +#: netbox/extras/choices.py:241 netbox/netbox/choices.py:56 +#: netbox/netbox/choices.py:106 msgid "Purple" msgstr "Purpur" -#: netbox/extras/choices.py:255 netbox/netbox/choices.py:51 -#: netbox/netbox/choices.py:105 +#: netbox/extras/choices.py:242 netbox/netbox/choices.py:53 +#: netbox/netbox/choices.py:107 msgid "Pink" msgstr "Pink" -#: netbox/extras/choices.py:256 netbox/netbox/choices.py:50 -#: netbox/netbox/choices.py:106 +#: netbox/extras/choices.py:243 netbox/netbox/choices.py:52 +#: netbox/netbox/choices.py:108 msgid "Red" msgstr "Rot" -#: netbox/extras/choices.py:257 netbox/netbox/choices.py:68 -#: netbox/netbox/choices.py:107 +#: netbox/extras/choices.py:244 netbox/netbox/choices.py:70 +#: netbox/netbox/choices.py:109 msgid "Orange" msgstr "Orange" -#: netbox/extras/choices.py:258 netbox/netbox/choices.py:66 -#: netbox/netbox/choices.py:108 +#: netbox/extras/choices.py:245 netbox/netbox/choices.py:68 +#: netbox/netbox/choices.py:110 msgid "Yellow" msgstr "Gelb" -#: netbox/extras/choices.py:259 netbox/netbox/choices.py:63 -#: netbox/netbox/choices.py:109 +#: netbox/extras/choices.py:246 netbox/netbox/choices.py:65 +#: netbox/netbox/choices.py:111 msgid "Green" msgstr "Grün" -#: netbox/extras/choices.py:260 netbox/netbox/choices.py:60 -#: netbox/netbox/choices.py:110 +#: netbox/extras/choices.py:247 netbox/netbox/choices.py:62 +#: netbox/netbox/choices.py:112 msgid "Teal" msgstr "Türkis" -#: netbox/extras/choices.py:261 netbox/netbox/choices.py:59 -#: netbox/netbox/choices.py:111 +#: netbox/extras/choices.py:248 netbox/netbox/choices.py:61 +#: netbox/netbox/choices.py:113 msgid "Cyan" msgstr "Cyanblau" -#: netbox/extras/choices.py:262 netbox/netbox/choices.py:112 +#: netbox/extras/choices.py:249 netbox/netbox/choices.py:114 msgid "Gray" msgstr "Grau" -#: netbox/extras/choices.py:263 netbox/netbox/choices.py:74 -#: netbox/netbox/choices.py:113 +#: netbox/extras/choices.py:250 netbox/netbox/choices.py:76 +#: netbox/netbox/choices.py:115 msgid "Black" msgstr "Schwarz" -#: netbox/extras/choices.py:264 netbox/netbox/choices.py:75 -#: netbox/netbox/choices.py:114 +#: netbox/extras/choices.py:251 netbox/netbox/choices.py:77 +#: netbox/netbox/choices.py:116 msgid "White" msgstr "Weiß" -#: netbox/extras/choices.py:279 netbox/extras/forms/model_forms.py:353 -#: netbox/extras/forms/model_forms.py:430 +#: netbox/extras/choices.py:266 netbox/extras/forms/model_forms.py:367 +#: netbox/extras/forms/model_forms.py:444 #: netbox/templates/extras/webhook.html:10 msgid "Webhook" msgstr "Webhook" -#: netbox/extras/choices.py:280 netbox/extras/forms/model_forms.py:418 +#: netbox/extras/choices.py:267 netbox/extras/forms/model_forms.py:432 #: netbox/templates/extras/script/base.html:29 msgid "Script" msgstr "Skript" -#: netbox/extras/choices.py:281 +#: netbox/extras/choices.py:268 msgid "Notification" msgstr "Benachrichtigung" @@ -7588,30 +8107,34 @@ msgstr "" msgid "RSS Feed" msgstr "RSS-Feed" -#: netbox/extras/dashboard/widgets.py:279 +#: netbox/extras/dashboard/widgets.py:280 msgid "Embed an RSS feed from an external website." msgstr "Betten Sie einen RSS-Feed von einer externen Website ein." -#: netbox/extras/dashboard/widgets.py:286 +#: netbox/extras/dashboard/widgets.py:287 msgid "Feed URL" msgstr "Feed-URL" -#: netbox/extras/dashboard/widgets.py:291 +#: netbox/extras/dashboard/widgets.py:290 +msgid "Requires external connection" +msgstr "Erfordert eine externe Verbindung" + +#: netbox/extras/dashboard/widgets.py:296 msgid "The maximum number of objects to display" msgstr "Die maximale Anzahl der anzuzeigenden Objekte" -#: netbox/extras/dashboard/widgets.py:296 +#: netbox/extras/dashboard/widgets.py:301 msgid "How long to stored the cached content (in seconds)" msgstr "Wie lange soll der Inhalt zwischengespeichert werden (in Sekunden)" -#: netbox/extras/dashboard/widgets.py:348 +#: netbox/extras/dashboard/widgets.py:358 #: netbox/templates/account/base.html:10 #: netbox/templates/account/bookmarks.html:7 -#: netbox/templates/inc/user_menu.html:48 +#: netbox/templates/inc/user_menu.html:43 msgid "Bookmarks" msgstr "Lesezeichen" -#: netbox/extras/dashboard/widgets.py:352 +#: netbox/extras/dashboard/widgets.py:362 msgid "Show your personal bookmarks" msgstr "Zeige persönliche Lesezeichen an" @@ -7640,17 +8163,17 @@ msgid "Group (name)" msgstr "Gruppe (Name)" #: netbox/extras/filtersets.py:574 -#: netbox/virtualization/forms/filtersets.py:118 +#: netbox/virtualization/forms/filtersets.py:123 msgid "Cluster type" msgstr "Clustertyp" -#: netbox/extras/filtersets.py:580 netbox/virtualization/filtersets.py:95 -#: netbox/virtualization/filtersets.py:147 +#: netbox/extras/filtersets.py:580 netbox/virtualization/filtersets.py:61 +#: netbox/virtualization/filtersets.py:113 msgid "Cluster type (slug)" msgstr "Clustertyp (URL-Slug)" #: netbox/extras/filtersets.py:601 netbox/tenancy/forms/forms.py:16 -#: netbox/tenancy/forms/forms.py:39 +#: netbox/tenancy/forms/forms.py:40 msgid "Tenant group" msgstr "Mandantengruppe" @@ -7659,7 +8182,7 @@ msgstr "Mandantengruppe" msgid "Tenant group (slug)" msgstr "Mandantengruppe (URL-Slug)" -#: netbox/extras/filtersets.py:623 netbox/extras/forms/model_forms.py:495 +#: netbox/extras/filtersets.py:623 netbox/extras/forms/model_forms.py:509 #: netbox/templates/extras/tag.html:11 msgid "Tag" msgstr "Schlagwort" @@ -7668,60 +8191,60 @@ msgstr "Schlagwort" msgid "Tag (slug)" msgstr "Schlagwort (URL-Slug)" -#: netbox/extras/filtersets.py:689 netbox/extras/forms/filtersets.py:429 +#: netbox/extras/filtersets.py:689 netbox/extras/forms/filtersets.py:437 msgid "Has local config context data" msgstr "Hat lokale Konfigurationskontextdaten" -#: netbox/extras/forms/bulk_edit.py:35 netbox/extras/forms/filtersets.py:60 +#: netbox/extras/forms/bulk_edit.py:35 netbox/extras/forms/filtersets.py:61 msgid "Group name" msgstr "Name der Gruppe" -#: netbox/extras/forms/bulk_edit.py:43 netbox/extras/forms/filtersets.py:68 +#: netbox/extras/forms/bulk_edit.py:43 netbox/extras/forms/filtersets.py:69 #: netbox/extras/tables/tables.py:65 #: netbox/templates/extras/customfield.html:38 #: netbox/templates/generic/bulk_import.html:118 msgid "Required" msgstr "Erforderlich" -#: netbox/extras/forms/bulk_edit.py:48 netbox/extras/forms/filtersets.py:75 +#: netbox/extras/forms/bulk_edit.py:48 netbox/extras/forms/filtersets.py:76 msgid "Must be unique" msgstr "Muss einzigartig sein" #: netbox/extras/forms/bulk_edit.py:61 netbox/extras/forms/bulk_import.py:60 -#: netbox/extras/forms/filtersets.py:89 +#: netbox/extras/forms/filtersets.py:90 #: netbox/extras/models/customfields.py:209 msgid "UI visible" msgstr "UI sichtbar" #: netbox/extras/forms/bulk_edit.py:66 netbox/extras/forms/bulk_import.py:66 -#: netbox/extras/forms/filtersets.py:94 +#: netbox/extras/forms/filtersets.py:95 #: netbox/extras/models/customfields.py:216 msgid "UI editable" msgstr "UI editierbar" -#: netbox/extras/forms/bulk_edit.py:71 netbox/extras/forms/filtersets.py:97 +#: netbox/extras/forms/bulk_edit.py:71 netbox/extras/forms/filtersets.py:98 msgid "Is cloneable" msgstr "Ist klonbar" -#: netbox/extras/forms/bulk_edit.py:76 netbox/extras/forms/filtersets.py:104 +#: netbox/extras/forms/bulk_edit.py:76 netbox/extras/forms/filtersets.py:105 msgid "Minimum value" msgstr "Minimaler Wert" -#: netbox/extras/forms/bulk_edit.py:80 netbox/extras/forms/filtersets.py:108 +#: netbox/extras/forms/bulk_edit.py:80 netbox/extras/forms/filtersets.py:109 msgid "Maximum value" msgstr "Maximaler Wert" -#: netbox/extras/forms/bulk_edit.py:84 netbox/extras/forms/filtersets.py:112 +#: netbox/extras/forms/bulk_edit.py:84 netbox/extras/forms/filtersets.py:113 msgid "Validation regex" msgstr "Regex für die Überprüfung" -#: netbox/extras/forms/bulk_edit.py:91 netbox/extras/forms/filtersets.py:46 +#: netbox/extras/forms/bulk_edit.py:91 netbox/extras/forms/filtersets.py:47 #: netbox/extras/forms/model_forms.py:76 #: netbox/templates/extras/customfield.html:70 msgid "Behavior" msgstr "Verhalten" -#: netbox/extras/forms/bulk_edit.py:128 netbox/extras/forms/filtersets.py:149 +#: netbox/extras/forms/bulk_edit.py:128 netbox/extras/forms/filtersets.py:152 msgid "New window" msgstr "Neues Fenster" @@ -7729,31 +8252,31 @@ msgstr "Neues Fenster" msgid "Button class" msgstr "Button-Klasse" -#: netbox/extras/forms/bulk_edit.py:154 netbox/extras/forms/filtersets.py:187 +#: netbox/extras/forms/bulk_edit.py:154 netbox/extras/forms/filtersets.py:191 #: netbox/extras/models/models.py:409 msgid "MIME type" msgstr "MIME-Typ" -#: netbox/extras/forms/bulk_edit.py:159 netbox/extras/forms/filtersets.py:190 +#: netbox/extras/forms/bulk_edit.py:159 netbox/extras/forms/filtersets.py:194 msgid "File extension" msgstr "Dateiendung" -#: netbox/extras/forms/bulk_edit.py:164 netbox/extras/forms/filtersets.py:194 +#: netbox/extras/forms/bulk_edit.py:164 netbox/extras/forms/filtersets.py:198 msgid "As attachment" msgstr "Als Anlage" -#: netbox/extras/forms/bulk_edit.py:192 netbox/extras/forms/filtersets.py:236 +#: netbox/extras/forms/bulk_edit.py:192 netbox/extras/forms/filtersets.py:242 #: netbox/extras/tables/tables.py:256 #: netbox/templates/extras/savedfilter.html:29 msgid "Shared" msgstr "Geteilt" -#: netbox/extras/forms/bulk_edit.py:215 netbox/extras/forms/filtersets.py:265 +#: netbox/extras/forms/bulk_edit.py:215 netbox/extras/forms/filtersets.py:271 #: netbox/extras/models/models.py:174 msgid "HTTP method" msgstr "HTTP-Method" -#: netbox/extras/forms/bulk_edit.py:219 netbox/extras/forms/filtersets.py:259 +#: netbox/extras/forms/bulk_edit.py:219 netbox/extras/forms/filtersets.py:265 #: netbox/templates/extras/webhook.html:30 msgid "Payload URL" msgstr "Payload-URL" @@ -7772,7 +8295,7 @@ msgid "CA file path" msgstr "CA-Dateipfad" #: netbox/extras/forms/bulk_edit.py:253 netbox/extras/forms/bulk_import.py:192 -#: netbox/extras/forms/model_forms.py:377 +#: netbox/extras/forms/model_forms.py:391 msgid "Event types" msgstr "Ereignistypen" @@ -7785,13 +8308,13 @@ msgstr "Ist aktiv" #: netbox/extras/forms/bulk_import.py:139 #: netbox/extras/forms/bulk_import.py:162 #: netbox/extras/forms/bulk_import.py:186 -#: netbox/extras/forms/filtersets.py:137 netbox/extras/forms/filtersets.py:224 +#: netbox/extras/forms/filtersets.py:140 netbox/extras/forms/filtersets.py:230 #: netbox/extras/forms/model_forms.py:47 -#: netbox/extras/forms/model_forms.py:205 -#: netbox/extras/forms/model_forms.py:237 -#: netbox/extras/forms/model_forms.py:278 -#: netbox/extras/forms/model_forms.py:372 -#: netbox/extras/forms/model_forms.py:489 +#: netbox/extras/forms/model_forms.py:219 +#: netbox/extras/forms/model_forms.py:251 +#: netbox/extras/forms/model_forms.py:292 +#: netbox/extras/forms/model_forms.py:386 +#: netbox/extras/forms/model_forms.py:503 #: netbox/users/forms/model_forms.py:276 msgid "Object types" msgstr "Typen von Objekten" @@ -7809,10 +8332,10 @@ msgstr "Ein oder mehrere zugewiesene Objekttypen" msgid "Field data type (e.g. text, integer, etc.)" msgstr "Felddatentyp (z. B. Text, Integer usw.)" -#: netbox/extras/forms/bulk_import.py:47 netbox/extras/forms/filtersets.py:208 -#: netbox/extras/forms/filtersets.py:281 -#: netbox/extras/forms/model_forms.py:304 -#: netbox/extras/forms/model_forms.py:341 +#: netbox/extras/forms/bulk_import.py:47 netbox/extras/forms/filtersets.py:213 +#: netbox/extras/forms/filtersets.py:287 +#: netbox/extras/forms/model_forms.py:318 +#: netbox/extras/forms/model_forms.py:355 #: netbox/tenancy/forms/filtersets.py:92 msgid "Object type" msgstr "Typ des Objekts" @@ -7821,7 +8344,7 @@ msgstr "Typ des Objekts" msgid "Object type (for object or multi-object fields)" msgstr "Objekttyp (für Objekt- oder Mehrfachobjektfelder)" -#: netbox/extras/forms/bulk_import.py:53 netbox/extras/forms/filtersets.py:84 +#: netbox/extras/forms/bulk_import.py:53 netbox/extras/forms/filtersets.py:85 msgid "Choice set" msgstr "Auswahlset" @@ -7897,7 +8420,7 @@ msgid "The classification of entry" msgstr "Die Klassifizierung des Eintrags" #: netbox/extras/forms/bulk_import.py:261 -#: netbox/extras/forms/model_forms.py:320 netbox/netbox/navigation/menu.py:390 +#: netbox/extras/forms/model_forms.py:334 netbox/netbox/navigation/menu.py:411 #: netbox/templates/extras/notificationgroup.html:41 #: netbox/templates/users/group.html:29 netbox/users/forms/model_forms.py:236 #: netbox/users/forms/model_forms.py:248 netbox/users/forms/model_forms.py:300 @@ -7912,7 +8435,8 @@ msgstr "" "Anführungszeichen" #: netbox/extras/forms/bulk_import.py:268 -#: netbox/extras/forms/model_forms.py:315 netbox/netbox/navigation/menu.py:410 +#: netbox/extras/forms/model_forms.py:329 netbox/netbox/navigation/menu.py:294 +#: netbox/netbox/navigation/menu.py:431 #: netbox/templates/extras/notificationgroup.html:31 #: netbox/users/forms/model_forms.py:181 netbox/users/forms/model_forms.py:193 #: netbox/users/forms/model_forms.py:305 netbox/users/tables.py:35 @@ -7925,104 +8449,104 @@ msgid "Group names separated by commas, encased with double quotes" msgstr "" "Gruppennamen, getrennt durch Kommas, umgeben von doppelten Anführungszeichen" -#: netbox/extras/forms/filtersets.py:52 netbox/extras/forms/model_forms.py:56 +#: netbox/extras/forms/filtersets.py:53 netbox/extras/forms/model_forms.py:56 msgid "Related object type" msgstr "Verwandter Objekttyp" -#: netbox/extras/forms/filtersets.py:57 +#: netbox/extras/forms/filtersets.py:58 msgid "Field type" msgstr "Feld-Typ" -#: netbox/extras/forms/filtersets.py:120 +#: netbox/extras/forms/filtersets.py:122 #: netbox/extras/forms/model_forms.py:157 netbox/extras/tables/tables.py:91 #: netbox/templates/generic/bulk_import.html:154 msgid "Choices" msgstr "Auswahlmöglichkeiten" -#: netbox/extras/forms/filtersets.py:164 netbox/extras/forms/filtersets.py:319 -#: netbox/extras/forms/filtersets.py:408 -#: netbox/extras/forms/model_forms.py:572 netbox/templates/core/job.html:96 +#: netbox/extras/forms/filtersets.py:168 netbox/extras/forms/filtersets.py:326 +#: netbox/extras/forms/filtersets.py:416 +#: netbox/extras/forms/model_forms.py:586 netbox/templates/core/job.html:96 #: netbox/templates/extras/eventrule.html:84 msgid "Data" msgstr "Daten" -#: netbox/extras/forms/filtersets.py:175 netbox/extras/forms/filtersets.py:333 -#: netbox/extras/forms/filtersets.py:418 netbox/netbox/choices.py:130 +#: netbox/extras/forms/filtersets.py:179 netbox/extras/forms/filtersets.py:340 +#: netbox/extras/forms/filtersets.py:426 netbox/netbox/choices.py:132 #: netbox/utilities/forms/bulk_import.py:26 msgid "Data file" msgstr "Datei" -#: netbox/extras/forms/filtersets.py:183 +#: netbox/extras/forms/filtersets.py:187 msgid "Content types" msgstr "Inhaltstypen" -#: netbox/extras/forms/filtersets.py:255 netbox/extras/models/models.py:179 +#: netbox/extras/forms/filtersets.py:261 netbox/extras/models/models.py:179 msgid "HTTP content type" msgstr "HTTP-Inhaltstyp" -#: netbox/extras/forms/filtersets.py:286 +#: netbox/extras/forms/filtersets.py:292 msgid "Event type" msgstr "Ereignistyp" -#: netbox/extras/forms/filtersets.py:291 +#: netbox/extras/forms/filtersets.py:297 msgid "Action type" msgstr "Typ der Aktion" -#: netbox/extras/forms/filtersets.py:307 +#: netbox/extras/forms/filtersets.py:313 msgid "Tagged object type" msgstr "Typ des markierten Objekts" -#: netbox/extras/forms/filtersets.py:312 +#: netbox/extras/forms/filtersets.py:318 msgid "Allowed object type" msgstr "Erlaubter Objekttyp" -#: netbox/extras/forms/filtersets.py:341 -#: netbox/extras/forms/model_forms.py:507 netbox/netbox/navigation/menu.py:18 +#: netbox/extras/forms/filtersets.py:348 +#: netbox/extras/forms/model_forms.py:521 netbox/netbox/navigation/menu.py:18 msgid "Regions" msgstr "Regionen" -#: netbox/extras/forms/filtersets.py:346 -#: netbox/extras/forms/model_forms.py:512 +#: netbox/extras/forms/filtersets.py:353 +#: netbox/extras/forms/model_forms.py:526 msgid "Site groups" msgstr "Standortgruppen" -#: netbox/extras/forms/filtersets.py:356 -#: netbox/extras/forms/model_forms.py:522 netbox/netbox/navigation/menu.py:20 +#: netbox/extras/forms/filtersets.py:363 +#: netbox/extras/forms/model_forms.py:536 netbox/netbox/navigation/menu.py:20 #: netbox/templates/dcim/site.html:127 msgid "Locations" msgstr "Lokationen" -#: netbox/extras/forms/filtersets.py:361 -#: netbox/extras/forms/model_forms.py:527 +#: netbox/extras/forms/filtersets.py:368 +#: netbox/extras/forms/model_forms.py:541 msgid "Device types" msgstr "Gerätetypen" -#: netbox/extras/forms/filtersets.py:366 -#: netbox/extras/forms/model_forms.py:532 +#: netbox/extras/forms/filtersets.py:373 +#: netbox/extras/forms/model_forms.py:546 msgid "Roles" msgstr "Prefix und VLAN-Rollen" -#: netbox/extras/forms/filtersets.py:376 -#: netbox/extras/forms/model_forms.py:542 +#: netbox/extras/forms/filtersets.py:383 +#: netbox/extras/forms/model_forms.py:556 msgid "Cluster types" msgstr "Clustertypen" -#: netbox/extras/forms/filtersets.py:381 -#: netbox/extras/forms/model_forms.py:547 +#: netbox/extras/forms/filtersets.py:388 +#: netbox/extras/forms/model_forms.py:561 msgid "Cluster groups" msgstr "Clustergruppen" -#: netbox/extras/forms/filtersets.py:386 -#: netbox/extras/forms/model_forms.py:552 netbox/netbox/navigation/menu.py:255 -#: netbox/netbox/navigation/menu.py:257 +#: netbox/extras/forms/filtersets.py:393 +#: netbox/extras/forms/model_forms.py:566 netbox/netbox/navigation/menu.py:263 +#: netbox/netbox/navigation/menu.py:265 #: netbox/templates/virtualization/clustertype.html:30 #: netbox/virtualization/tables/clusters.py:23 #: netbox/virtualization/tables/clusters.py:45 msgid "Clusters" msgstr "Cluster" -#: netbox/extras/forms/filtersets.py:391 -#: netbox/extras/forms/model_forms.py:557 +#: netbox/extras/forms/filtersets.py:398 +#: netbox/extras/forms/model_forms.py:571 msgid "Tenant groups" msgstr "Mandantengruppen" @@ -8072,7 +8596,7 @@ msgstr "" msgid "Related Object" msgstr "Verwandtes Objekt" -#: netbox/extras/forms/model_forms.py:169 +#: netbox/extras/forms/model_forms.py:170 msgid "" "Enter one choice per line. An optional label may be specified for each " "choice by appending it with a colon. Example:" @@ -8081,16 +8605,16 @@ msgstr "" "Bezeichnung angegeben werden, indem ein Doppelpunkt angehängt wird. " "Beispiel:" -#: netbox/extras/forms/model_forms.py:212 +#: netbox/extras/forms/model_forms.py:226 #: netbox/templates/extras/customlink.html:10 msgid "Custom Link" msgstr "Benutzerdefinierter Link" -#: netbox/extras/forms/model_forms.py:214 +#: netbox/extras/forms/model_forms.py:228 msgid "Templates" msgstr "Vorlagen" -#: netbox/extras/forms/model_forms.py:226 +#: netbox/extras/forms/model_forms.py:240 #, python-brace-format msgid "" "Jinja2 template code for the link text. Reference the object as {example}. " @@ -8100,7 +8624,7 @@ msgstr "" "{example}. Links, die als leerer Text dargestellt werden, werden nicht " "angezeigt." -#: netbox/extras/forms/model_forms.py:230 +#: netbox/extras/forms/model_forms.py:244 #, python-brace-format msgid "" "Jinja2 template code for the link URL. Reference the object as {example}." @@ -8108,63 +8632,63 @@ msgstr "" "Jinja2-Vorlagencode für die Link-URL. Verweisen Sie auf das Objekt als " "{example}." -#: netbox/extras/forms/model_forms.py:241 -#: netbox/extras/forms/model_forms.py:624 +#: netbox/extras/forms/model_forms.py:255 +#: netbox/extras/forms/model_forms.py:638 msgid "Template code" msgstr "Vorlagencode" -#: netbox/extras/forms/model_forms.py:247 +#: netbox/extras/forms/model_forms.py:261 #: netbox/templates/extras/exporttemplate.html:12 msgid "Export Template" msgstr "Vorlage exportieren" -#: netbox/extras/forms/model_forms.py:249 +#: netbox/extras/forms/model_forms.py:263 msgid "Rendering" msgstr "Rendern" -#: netbox/extras/forms/model_forms.py:263 -#: netbox/extras/forms/model_forms.py:649 +#: netbox/extras/forms/model_forms.py:277 +#: netbox/extras/forms/model_forms.py:663 msgid "Template content is populated from the remote source selected below." msgstr "" "Der Vorlageninhalt wird aus der unten ausgewählten Remote-Quelle gefüllt." -#: netbox/extras/forms/model_forms.py:270 -#: netbox/extras/forms/model_forms.py:656 +#: netbox/extras/forms/model_forms.py:284 +#: netbox/extras/forms/model_forms.py:670 msgid "Must specify either local content or a data file" msgstr "Muss entweder lokalen Inhalt oder eine Datendatei angeben" -#: netbox/extras/forms/model_forms.py:284 netbox/netbox/forms/mixins.py:70 +#: netbox/extras/forms/model_forms.py:298 netbox/netbox/forms/mixins.py:70 #: netbox/templates/extras/savedfilter.html:10 msgid "Saved Filter" msgstr "Gespeicherter Filter" -#: netbox/extras/forms/model_forms.py:334 +#: netbox/extras/forms/model_forms.py:348 msgid "A notification group specify at least one user or group." msgstr "" "Eine Benachrichtigungsgruppe muss mindestens einen Benutzer oder eine Gruppe" " haben." -#: netbox/extras/forms/model_forms.py:356 +#: netbox/extras/forms/model_forms.py:370 #: netbox/templates/extras/webhook.html:23 msgid "HTTP Request" msgstr "HTTP-Request" -#: netbox/extras/forms/model_forms.py:358 +#: netbox/extras/forms/model_forms.py:372 #: netbox/templates/extras/webhook.html:44 msgid "SSL" msgstr "SSL" -#: netbox/extras/forms/model_forms.py:380 +#: netbox/extras/forms/model_forms.py:394 msgid "Action choice" msgstr "Wahl der Aktion" -#: netbox/extras/forms/model_forms.py:385 +#: netbox/extras/forms/model_forms.py:399 msgid "Enter conditions in JSON format." msgstr "" "Geben Sie die Bedingungen ein in JSON - " "Format." -#: netbox/extras/forms/model_forms.py:389 +#: netbox/extras/forms/model_forms.py:403 msgid "" "Enter parameters to pass to the action in JSON format." @@ -8172,33 +8696,33 @@ msgstr "" "Geben Sie Parameter ein, die an die Aktion übergeben werden sollen, in JSON formatiert." -#: netbox/extras/forms/model_forms.py:394 +#: netbox/extras/forms/model_forms.py:408 #: netbox/templates/extras/eventrule.html:10 msgid "Event Rule" msgstr "Ereignisregel" -#: netbox/extras/forms/model_forms.py:395 +#: netbox/extras/forms/model_forms.py:409 msgid "Triggers" msgstr "Trigger" -#: netbox/extras/forms/model_forms.py:442 +#: netbox/extras/forms/model_forms.py:456 msgid "Notification group" msgstr "Benachrichtigungsgruppe" -#: netbox/extras/forms/model_forms.py:562 netbox/netbox/navigation/menu.py:26 +#: netbox/extras/forms/model_forms.py:576 netbox/netbox/navigation/menu.py:26 #: netbox/tenancy/tables/tenants.py:22 msgid "Tenants" msgstr "Mandanten" -#: netbox/extras/forms/model_forms.py:606 +#: netbox/extras/forms/model_forms.py:620 msgid "Data is populated from the remote source selected below." msgstr "Die Daten werden aus der unten ausgewählten Remote-Quelle gefüllt." -#: netbox/extras/forms/model_forms.py:612 +#: netbox/extras/forms/model_forms.py:626 msgid "Must specify either local data or a data file" msgstr "Muss entweder lokale Daten oder eine Datendatei angeben" -#: netbox/extras/forms/model_forms.py:631 +#: netbox/extras/forms/model_forms.py:645 #: netbox/templates/core/datafile.html:55 msgid "Content" msgstr "Inhalt" @@ -8262,10 +8786,16 @@ msgstr "Eine Ausnahme ist aufgetreten: " msgid "Database changes have been reverted due to error." msgstr "Datenbankänderungen wurden aufgrund eines Fehlers rückgängig gemacht." -#: netbox/extras/management/commands/reindex.py:66 +#: netbox/extras/management/commands/reindex.py:67 msgid "No indexers found!" msgstr "Keine Indexer gefunden!" +#: netbox/extras/models/configs.py:41 netbox/extras/models/models.py:313 +#: netbox/extras/models/models.py:522 netbox/extras/models/search.py:48 +#: netbox/ipam/models/ip.py:188 netbox/netbox/models/mixins.py:15 +msgid "weight" +msgstr "Gewicht" + #: netbox/extras/models/configs.py:130 msgid "config context" msgstr "Konfigurationsvorlage" @@ -8638,27 +9168,27 @@ msgstr "Ungültige Objekt-ID gefunden: {id}" msgid "Required field cannot be empty." msgstr "Das erforderliche Feld darf nicht leer sein." -#: netbox/extras/models/customfields.py:763 +#: netbox/extras/models/customfields.py:764 msgid "Base set of predefined choices (optional)" msgstr "Basissatz vordefinierter Auswahlmöglichkeiten (optional)" -#: netbox/extras/models/customfields.py:775 +#: netbox/extras/models/customfields.py:776 msgid "Choices are automatically ordered alphabetically" msgstr "Die Auswahlmöglichkeiten werden automatisch alphabetisch sortiert" -#: netbox/extras/models/customfields.py:782 +#: netbox/extras/models/customfields.py:783 msgid "custom field choice set" msgstr "benutzerdefinierter Feldauswahlsatz" -#: netbox/extras/models/customfields.py:783 +#: netbox/extras/models/customfields.py:784 msgid "custom field choice sets" msgstr "Benutzerdefinierte Feldoptionen" -#: netbox/extras/models/customfields.py:825 +#: netbox/extras/models/customfields.py:826 msgid "Must define base or extra choices." msgstr "Muss Basis- oder zusätzliche Auswahlmöglichkeiten definieren." -#: netbox/extras/models/customfields.py:849 +#: netbox/extras/models/customfields.py:850 #, python-brace-format msgid "" "Cannot remove choice {choice} as there are {model} objects which reference " @@ -8962,20 +9492,20 @@ msgstr "Journaleintrag" msgid "journal entries" msgstr "Journaleinträge" -#: netbox/extras/models/models.py:718 +#: netbox/extras/models/models.py:721 #, python-brace-format msgid "Journaling is not supported for this object type ({type})." msgstr "Journaling wird für diesen Objekttyp nicht unterstützt ({type})." -#: netbox/extras/models/models.py:760 +#: netbox/extras/models/models.py:763 msgid "bookmark" msgstr "Lesezeichen" -#: netbox/extras/models/models.py:761 +#: netbox/extras/models/models.py:764 msgid "bookmarks" msgstr "Lesezeichen" -#: netbox/extras/models/models.py:774 +#: netbox/extras/models/models.py:777 #, python-brace-format msgid "Bookmarks cannot be assigned to this object type ({type})." msgstr "Diesem Objekttyp können keine Lesezeichen zugewiesen werden ({type})." @@ -9067,19 +9597,19 @@ msgstr "zwischengespeicherter Wert" msgid "cached values" msgstr "zwischengespeicherte Werte" -#: netbox/extras/models/staging.py:44 +#: netbox/extras/models/staging.py:45 msgid "branch" msgstr "Branch" -#: netbox/extras/models/staging.py:45 +#: netbox/extras/models/staging.py:46 msgid "branches" msgstr "Branches" -#: netbox/extras/models/staging.py:97 +#: netbox/extras/models/staging.py:105 msgid "staged change" msgstr "vorbereitete Änderung" -#: netbox/extras/models/staging.py:98 +#: netbox/extras/models/staging.py:106 msgid "staged changes" msgstr "vorbereitete Änderungen" @@ -9103,11 +9633,11 @@ msgstr "markierter Artikel" msgid "tagged items" msgstr "markierte Artikel" -#: netbox/extras/scripts.py:429 +#: netbox/extras/scripts.py:432 msgid "Script Data" msgstr "Skriptdaten" -#: netbox/extras/scripts.py:433 +#: netbox/extras/scripts.py:436 msgid "Script Execution Parameters" msgstr "Parameter für die Skriptausführung" @@ -9184,12 +9714,11 @@ msgstr "Als Anlage" #: netbox/extras/tables/tables.py:195 netbox/extras/tables/tables.py:487 #: netbox/extras/tables/tables.py:522 netbox/templates/core/datafile.html:24 -#: netbox/templates/dcim/device/render_config.html:22 #: netbox/templates/extras/configcontext.html:39 #: netbox/templates/extras/configtemplate.html:31 #: netbox/templates/extras/exporttemplate.html:45 +#: netbox/templates/extras/object_render_config.html:23 #: netbox/templates/generic/bulk_import.html:35 -#: netbox/templates/virtualization/virtualmachine/render_config.html:22 msgid "Data File" msgstr "Datendatei" @@ -9284,27 +9813,32 @@ msgstr "Ungültiges Attribut \"{name}\" zur Anfrage" msgid "Invalid attribute \"{name}\" for {model}" msgstr "Ungültiges Attribut “{name}\" für {model}" -#: netbox/extras/views.py:960 +#: netbox/extras/views.py:933 +#, python-brace-format +msgid "An error occurred while rendering the template: {error}" +msgstr "Ein Fehler ist beim Rendern der Vorlage aufgetreten: {error}" + +#: netbox/extras/views.py:1085 msgid "Your dashboard has been reset." msgstr "Ihr Dashboard wurde zurückgesetzt." -#: netbox/extras/views.py:1006 +#: netbox/extras/views.py:1131 msgid "Added widget: " msgstr "Hinzugefügtes Widget:" -#: netbox/extras/views.py:1047 +#: netbox/extras/views.py:1172 msgid "Updated widget: " msgstr "Aktualisiertes Widget: " -#: netbox/extras/views.py:1083 +#: netbox/extras/views.py:1208 msgid "Deleted widget: " msgstr "Gelöschtes Widget: " -#: netbox/extras/views.py:1085 +#: netbox/extras/views.py:1210 msgid "Error deleting widget: " msgstr "Fehler beim Löschen des Widgets: " -#: netbox/extras/views.py:1175 +#: netbox/extras/views.py:1308 msgid "Unable to run script: RQ worker process not running." msgstr "" "Das Skript kann nicht ausgeführt werden: Der RQ-Worker-Prozess läuft nicht." @@ -9330,7 +9864,7 @@ msgstr "" msgid "Invalid IP prefix format: {data}" msgstr "Ungültiges IP-Präfixformat: {data}" -#: netbox/ipam/api/views.py:358 +#: netbox/ipam/api/views.py:370 msgid "" "Insufficient space is available to accommodate the requested prefix size(s)" msgstr "" @@ -9373,182 +9907,174 @@ msgstr "Cisco" msgid "Plaintext" msgstr "Klartext" +#: netbox/ipam/choices.py:166 netbox/ipam/forms/model_forms.py:800 +#: netbox/ipam/forms/model_forms.py:828 netbox/templates/ipam/service.html:21 +msgid "Service" +msgstr "Dienst / Port" + +#: netbox/ipam/choices.py:167 +msgid "Customer" +msgstr "Kunde" + #: netbox/ipam/fields.py:36 #, python-brace-format msgid "Invalid IP address format: {address}" msgstr "Ungültiges IP-Adressformat: {address}" -#: netbox/ipam/filtersets.py:48 netbox/vpn/filtersets.py:304 +#: netbox/ipam/filtersets.py:51 netbox/vpn/filtersets.py:304 msgid "Import target" msgstr "Ziel importieren" -#: netbox/ipam/filtersets.py:54 netbox/vpn/filtersets.py:310 +#: netbox/ipam/filtersets.py:57 netbox/vpn/filtersets.py:310 msgid "Import target (name)" msgstr "Importziel (Name)" -#: netbox/ipam/filtersets.py:59 netbox/vpn/filtersets.py:315 +#: netbox/ipam/filtersets.py:62 netbox/vpn/filtersets.py:315 msgid "Export target" msgstr "Ziel exportieren" -#: netbox/ipam/filtersets.py:65 netbox/vpn/filtersets.py:321 +#: netbox/ipam/filtersets.py:68 netbox/vpn/filtersets.py:321 msgid "Export target (name)" msgstr "Exportziel (Name)" -#: netbox/ipam/filtersets.py:86 +#: netbox/ipam/filtersets.py:89 msgid "Importing VRF" msgstr "VRF importieren" -#: netbox/ipam/filtersets.py:92 +#: netbox/ipam/filtersets.py:95 msgid "Import VRF (RD)" msgstr "VRF (RD) importieren" -#: netbox/ipam/filtersets.py:97 +#: netbox/ipam/filtersets.py:100 msgid "Exporting VRF" msgstr "VRF exportieren" -#: netbox/ipam/filtersets.py:103 +#: netbox/ipam/filtersets.py:106 msgid "Export VRF (RD)" msgstr "VRF (RD) exportieren" -#: netbox/ipam/filtersets.py:108 +#: netbox/ipam/filtersets.py:111 msgid "Importing L2VPN" msgstr "L2VPN importieren" -#: netbox/ipam/filtersets.py:114 +#: netbox/ipam/filtersets.py:117 msgid "Importing L2VPN (identifier)" msgstr "L2VPN importieren (Identifier)" -#: netbox/ipam/filtersets.py:119 +#: netbox/ipam/filtersets.py:122 msgid "Exporting L2VPN" msgstr "L2VPN exportieren" -#: netbox/ipam/filtersets.py:125 +#: netbox/ipam/filtersets.py:128 msgid "Exporting L2VPN (identifier)" msgstr "L2VPN exportieren (Identifier)" -#: netbox/ipam/filtersets.py:155 netbox/ipam/filtersets.py:283 -#: netbox/ipam/forms/model_forms.py:229 netbox/ipam/tables/ip.py:212 +#: netbox/ipam/filtersets.py:158 netbox/ipam/filtersets.py:286 +#: netbox/ipam/forms/model_forms.py:229 netbox/ipam/tables/ip.py:158 #: netbox/templates/ipam/prefix.html:12 msgid "Prefix" msgstr "Prefix" -#: netbox/ipam/filtersets.py:159 netbox/ipam/filtersets.py:198 -#: netbox/ipam/filtersets.py:223 +#: netbox/ipam/filtersets.py:162 netbox/ipam/filtersets.py:201 +#: netbox/ipam/filtersets.py:226 msgid "RIR (ID)" msgstr "RIR (ID)" -#: netbox/ipam/filtersets.py:165 netbox/ipam/filtersets.py:204 -#: netbox/ipam/filtersets.py:229 +#: netbox/ipam/filtersets.py:168 netbox/ipam/filtersets.py:207 +#: netbox/ipam/filtersets.py:232 msgid "RIR (slug)" msgstr "RIR (URL-Slug)" -#: netbox/ipam/filtersets.py:287 +#: netbox/ipam/filtersets.py:290 msgid "Within prefix" msgstr "Innerhalb des Prefixes" -#: netbox/ipam/filtersets.py:291 +#: netbox/ipam/filtersets.py:294 msgid "Within and including prefix" msgstr "Innerhalb und einschließlich Präfix" -#: netbox/ipam/filtersets.py:295 +#: netbox/ipam/filtersets.py:298 msgid "Prefixes which contain this prefix or IP" msgstr "Präfixe, die dieses Präfix oder diese IP enthalten" -#: netbox/ipam/filtersets.py:306 netbox/ipam/filtersets.py:574 -#: netbox/ipam/forms/bulk_edit.py:343 netbox/ipam/forms/filtersets.py:196 -#: netbox/ipam/forms/filtersets.py:331 +#: netbox/ipam/filtersets.py:309 netbox/ipam/filtersets.py:541 +#: netbox/ipam/forms/bulk_edit.py:327 netbox/ipam/forms/filtersets.py:198 +#: netbox/ipam/forms/filtersets.py:334 msgid "Mask length" msgstr "Länge der Maske" -#: netbox/ipam/filtersets.py:375 netbox/vpn/filtersets.py:427 +#: netbox/ipam/filtersets.py:342 netbox/vpn/filtersets.py:427 msgid "VLAN (ID)" msgstr "VLAN (ID)" -#: netbox/ipam/filtersets.py:379 netbox/vpn/filtersets.py:422 +#: netbox/ipam/filtersets.py:346 netbox/vpn/filtersets.py:422 msgid "VLAN number (1-4094)" msgstr "VLAN-Nummer (1-4094)" -#: netbox/ipam/filtersets.py:473 netbox/ipam/filtersets.py:477 -#: netbox/ipam/filtersets.py:569 netbox/ipam/forms/model_forms.py:496 +#: netbox/ipam/filtersets.py:440 netbox/ipam/filtersets.py:444 +#: netbox/ipam/filtersets.py:536 netbox/ipam/forms/model_forms.py:506 #: netbox/templates/tenancy/contact.html:53 #: netbox/tenancy/forms/bulk_edit.py:113 msgid "Address" msgstr "Adresse" -#: netbox/ipam/filtersets.py:481 +#: netbox/ipam/filtersets.py:448 msgid "Ranges which contain this prefix or IP" msgstr "Bereiche, die dieses Präfix oder diese IP enthalten" -#: netbox/ipam/filtersets.py:509 netbox/ipam/filtersets.py:565 +#: netbox/ipam/filtersets.py:476 netbox/ipam/filtersets.py:532 msgid "Parent prefix" msgstr "Übergeordnetes Präfix" -#: netbox/ipam/filtersets.py:618 netbox/ipam/filtersets.py:858 -#: netbox/ipam/filtersets.py:1133 netbox/vpn/filtersets.py:385 -msgid "Virtual machine (name)" -msgstr "Virtuelle Maschine (Name)" - -#: netbox/ipam/filtersets.py:623 netbox/ipam/filtersets.py:863 -#: netbox/ipam/filtersets.py:1127 netbox/virtualization/filtersets.py:282 -#: netbox/virtualization/filtersets.py:321 netbox/vpn/filtersets.py:390 -msgid "Virtual machine (ID)" -msgstr "Virtuelle Maschine (ID)" - -#: netbox/ipam/filtersets.py:629 netbox/vpn/filtersets.py:97 -#: netbox/vpn/filtersets.py:396 -msgid "Interface (name)" -msgstr "Schnittstelle (Name)" - -#: netbox/ipam/filtersets.py:640 netbox/vpn/filtersets.py:108 -#: netbox/vpn/filtersets.py:407 -msgid "VM interface (name)" -msgstr "VM-Schnittstelle (Name)" - -#: netbox/ipam/filtersets.py:645 netbox/vpn/filtersets.py:113 -msgid "VM interface (ID)" -msgstr "VM-Schnittstelle (ID)" - -#: netbox/ipam/filtersets.py:650 +#: netbox/ipam/filtersets.py:617 msgid "FHRP group (ID)" msgstr "FHRP-Gruppe (ID)" -#: netbox/ipam/filtersets.py:654 +#: netbox/ipam/filtersets.py:621 msgid "Is assigned to an interface" msgstr "Ist einer Schnittstelle zugewiesen" -#: netbox/ipam/filtersets.py:658 +#: netbox/ipam/filtersets.py:625 msgid "Is assigned" msgstr "Ist zugewiesen" -#: netbox/ipam/filtersets.py:670 +#: netbox/ipam/filtersets.py:637 msgid "Service (ID)" msgstr "Dienst (ID)" -#: netbox/ipam/filtersets.py:675 +#: netbox/ipam/filtersets.py:642 msgid "NAT inside IP address (ID)" msgstr "NAT inside IP-Adresse (ID)" -#: netbox/ipam/filtersets.py:1043 netbox/ipam/forms/bulk_import.py:322 -msgid "Assigned interface" -msgstr "Zugewiesene Schnittstelle" +#: netbox/ipam/filtersets.py:1001 +msgid "Q-in-Q SVLAN (ID)" +msgstr "Q-in-Q-SVLAN (ID)" -#: netbox/ipam/filtersets.py:1048 +#: netbox/ipam/filtersets.py:1005 +msgid "Q-in-Q SVLAN number (1-4094)" +msgstr "Q-in-Q-SVLAN-Nummer (1-4094)" + +#: netbox/ipam/filtersets.py:1026 msgid "Assigned VM interface" msgstr "Zugewiesene VM-Schnittstelle" -#: netbox/ipam/filtersets.py:1138 +#: netbox/ipam/filtersets.py:1097 +msgid "VLAN Translation Policy (name)" +msgstr "VLAN-Übersetzungsrichtlinie (Name)" + +#: netbox/ipam/filtersets.py:1163 msgid "IP address (ID)" msgstr "IP-Adresse (ID)" -#: netbox/ipam/filtersets.py:1144 netbox/ipam/models/ip.py:788 +#: netbox/ipam/filtersets.py:1169 netbox/ipam/models/ip.py:788 msgid "IP address" msgstr "IP-Adresse" -#: netbox/ipam/filtersets.py:1169 +#: netbox/ipam/filtersets.py:1194 msgid "Primary IPv4 (ID)" msgstr "Primäre IPv4 (ID)" -#: netbox/ipam/filtersets.py:1174 +#: netbox/ipam/filtersets.py:1199 msgid "Primary IPv6 (ID)" msgstr "Primäre IPv6 (ID)" @@ -9581,435 +10107,408 @@ msgstr "Eine CIDR-Maske (z. B. /24) ist erforderlich." msgid "Address pattern" msgstr "Adressmuster" -#: netbox/ipam/forms/bulk_edit.py:50 +#: netbox/ipam/forms/bulk_edit.py:53 msgid "Enforce unique space" msgstr "Erzwingen Sie einzigartigen Speicherplatz" -#: netbox/ipam/forms/bulk_edit.py:88 +#: netbox/ipam/forms/bulk_edit.py:91 msgid "Is private" msgstr "Ist privat" -#: netbox/ipam/forms/bulk_edit.py:109 netbox/ipam/forms/bulk_edit.py:138 -#: netbox/ipam/forms/bulk_edit.py:163 netbox/ipam/forms/bulk_import.py:89 -#: netbox/ipam/forms/bulk_import.py:109 netbox/ipam/forms/bulk_import.py:129 -#: netbox/ipam/forms/filtersets.py:110 netbox/ipam/forms/filtersets.py:125 -#: netbox/ipam/forms/filtersets.py:148 netbox/ipam/forms/model_forms.py:96 -#: netbox/ipam/forms/model_forms.py:109 netbox/ipam/forms/model_forms.py:131 -#: netbox/ipam/forms/model_forms.py:149 netbox/ipam/models/asns.py:31 -#: netbox/ipam/models/asns.py:103 netbox/ipam/models/ip.py:71 -#: netbox/ipam/models/ip.py:90 netbox/ipam/tables/asn.py:20 +#: netbox/ipam/forms/bulk_edit.py:112 netbox/ipam/forms/bulk_edit.py:141 +#: netbox/ipam/forms/bulk_edit.py:166 netbox/ipam/forms/bulk_import.py:92 +#: netbox/ipam/forms/bulk_import.py:112 netbox/ipam/forms/bulk_import.py:132 +#: netbox/ipam/forms/filtersets.py:112 netbox/ipam/forms/filtersets.py:127 +#: netbox/ipam/forms/filtersets.py:150 netbox/ipam/forms/model_forms.py:99 +#: netbox/ipam/forms/model_forms.py:112 netbox/ipam/forms/model_forms.py:135 +#: netbox/ipam/forms/model_forms.py:154 netbox/ipam/models/asns.py:31 +#: netbox/ipam/models/asns.py:100 netbox/ipam/models/ip.py:71 +#: netbox/ipam/models/ip.py:87 netbox/ipam/tables/asn.py:20 #: netbox/ipam/tables/asn.py:45 netbox/templates/ipam/aggregate.html:18 #: netbox/templates/ipam/asn.html:27 netbox/templates/ipam/asnrange.html:19 #: netbox/templates/ipam/rir.html:19 msgid "RIR" msgstr "RIR" -#: netbox/ipam/forms/bulk_edit.py:171 +#: netbox/ipam/forms/bulk_edit.py:174 msgid "Date added" msgstr "hinzugefügt am" -#: netbox/ipam/forms/bulk_edit.py:229 netbox/ipam/forms/model_forms.py:619 -#: netbox/ipam/forms/model_forms.py:666 netbox/ipam/tables/ip.py:251 -#: netbox/templates/ipam/vlan_edit.html:37 +#: netbox/ipam/forms/bulk_edit.py:213 netbox/ipam/forms/model_forms.py:629 +#: netbox/ipam/forms/model_forms.py:676 netbox/ipam/tables/ip.py:201 +#: netbox/templates/ipam/vlan_edit.html:45 #: netbox/templates/ipam/vlangroup.html:27 msgid "VLAN Group" msgstr "VLAN-Gruppe" -#: netbox/ipam/forms/bulk_edit.py:234 netbox/ipam/forms/bulk_import.py:185 -#: netbox/ipam/forms/filtersets.py:256 netbox/ipam/forms/model_forms.py:218 -#: netbox/ipam/models/vlans.py:250 netbox/ipam/tables/ip.py:255 -#: netbox/templates/ipam/prefix.html:60 netbox/templates/ipam/vlan.html:12 +#: netbox/ipam/forms/bulk_edit.py:218 netbox/ipam/forms/bulk_import.py:181 +#: netbox/ipam/forms/filtersets.py:259 netbox/ipam/forms/model_forms.py:217 +#: netbox/ipam/models/vlans.py:272 netbox/ipam/tables/ip.py:206 +#: netbox/templates/ipam/prefix.html:56 netbox/templates/ipam/vlan.html:12 #: netbox/templates/ipam/vlan/base.html:6 #: netbox/templates/ipam/vlan_edit.html:10 -#: netbox/templates/wireless/wirelesslan.html:30 +#: netbox/templates/wireless/wirelesslan.html:38 #: netbox/vpn/forms/bulk_import.py:304 netbox/vpn/forms/filtersets.py:284 -#: netbox/vpn/forms/model_forms.py:433 netbox/vpn/forms/model_forms.py:452 -#: netbox/wireless/forms/bulk_edit.py:55 -#: netbox/wireless/forms/bulk_import.py:48 -#: netbox/wireless/forms/model_forms.py:48 netbox/wireless/models.py:102 +#: netbox/vpn/forms/model_forms.py:436 netbox/vpn/forms/model_forms.py:455 +#: netbox/wireless/forms/bulk_edit.py:57 +#: netbox/wireless/forms/bulk_import.py:50 +#: netbox/wireless/forms/model_forms.py:50 netbox/wireless/models.py:102 msgid "VLAN" msgstr "VLAN" -#: netbox/ipam/forms/bulk_edit.py:245 +#: netbox/ipam/forms/bulk_edit.py:229 msgid "Prefix length" msgstr "Länge des Prefixes" -#: netbox/ipam/forms/bulk_edit.py:268 netbox/ipam/forms/filtersets.py:241 -#: netbox/templates/ipam/prefix.html:85 +#: netbox/ipam/forms/bulk_edit.py:252 netbox/ipam/forms/filtersets.py:244 +#: netbox/templates/ipam/prefix.html:81 msgid "Is a pool" msgstr "Ist ein Pool" -#: netbox/ipam/forms/bulk_edit.py:273 netbox/ipam/forms/bulk_edit.py:318 -#: netbox/ipam/forms/filtersets.py:248 netbox/ipam/forms/filtersets.py:293 -#: netbox/ipam/models/ip.py:272 netbox/ipam/models/ip.py:539 +#: netbox/ipam/forms/bulk_edit.py:257 netbox/ipam/forms/bulk_edit.py:302 +#: netbox/ipam/forms/filtersets.py:251 netbox/ipam/forms/filtersets.py:296 +#: netbox/ipam/models/ip.py:256 netbox/ipam/models/ip.py:525 msgid "Treat as fully utilized" msgstr "Als voll ausgelastet behandeln" -#: netbox/ipam/forms/bulk_edit.py:287 netbox/ipam/forms/filtersets.py:171 +#: netbox/ipam/forms/bulk_edit.py:271 netbox/ipam/forms/filtersets.py:173 +#: netbox/ipam/forms/model_forms.py:232 msgid "VLAN Assignment" msgstr "VLAN-Zuweisung" -#: netbox/ipam/forms/bulk_edit.py:366 netbox/ipam/models/ip.py:772 +#: netbox/ipam/forms/bulk_edit.py:350 netbox/ipam/models/ip.py:772 msgid "DNS name" msgstr "DNS-Name" -#: netbox/ipam/forms/bulk_edit.py:387 netbox/ipam/forms/bulk_edit.py:534 -#: netbox/ipam/forms/bulk_import.py:418 netbox/ipam/forms/bulk_import.py:493 -#: netbox/ipam/forms/bulk_import.py:519 netbox/ipam/forms/filtersets.py:390 -#: netbox/ipam/forms/filtersets.py:530 netbox/templates/ipam/fhrpgroup.html:22 +#: netbox/ipam/forms/bulk_edit.py:371 netbox/ipam/forms/bulk_edit.py:562 +#: netbox/ipam/forms/bulk_import.py:417 netbox/ipam/forms/bulk_import.py:528 +#: netbox/ipam/forms/bulk_import.py:554 netbox/ipam/forms/filtersets.py:393 +#: netbox/ipam/forms/filtersets.py:582 netbox/templates/ipam/fhrpgroup.html:22 #: netbox/templates/ipam/inc/panels/fhrp_groups.html:24 #: netbox/templates/ipam/service.html:32 #: netbox/templates/ipam/servicetemplate.html:19 msgid "Protocol" msgstr "Protokoll" -#: netbox/ipam/forms/bulk_edit.py:394 netbox/ipam/forms/filtersets.py:397 +#: netbox/ipam/forms/bulk_edit.py:378 netbox/ipam/forms/filtersets.py:400 #: netbox/ipam/tables/fhrp.py:22 netbox/templates/ipam/fhrpgroup.html:26 msgid "Group ID" msgstr "Gruppen-ID" -#: netbox/ipam/forms/bulk_edit.py:399 netbox/ipam/forms/filtersets.py:402 -#: netbox/wireless/forms/bulk_edit.py:68 -#: netbox/wireless/forms/bulk_edit.py:115 -#: netbox/wireless/forms/bulk_import.py:62 -#: netbox/wireless/forms/bulk_import.py:65 -#: netbox/wireless/forms/bulk_import.py:104 -#: netbox/wireless/forms/bulk_import.py:107 -#: netbox/wireless/forms/filtersets.py:54 -#: netbox/wireless/forms/filtersets.py:88 +#: netbox/ipam/forms/bulk_edit.py:383 netbox/ipam/forms/filtersets.py:405 +#: netbox/wireless/forms/bulk_edit.py:70 +#: netbox/wireless/forms/bulk_edit.py:118 +#: netbox/wireless/forms/bulk_import.py:64 +#: netbox/wireless/forms/bulk_import.py:67 +#: netbox/wireless/forms/bulk_import.py:109 +#: netbox/wireless/forms/bulk_import.py:112 +#: netbox/wireless/forms/filtersets.py:57 +#: netbox/wireless/forms/filtersets.py:116 msgid "Authentication type" msgstr "Typ der Authentifizierung" -#: netbox/ipam/forms/bulk_edit.py:404 netbox/ipam/forms/filtersets.py:406 +#: netbox/ipam/forms/bulk_edit.py:388 netbox/ipam/forms/filtersets.py:409 msgid "Authentication key" msgstr "Authentifizierungsschlüssel" -#: netbox/ipam/forms/bulk_edit.py:421 netbox/ipam/forms/filtersets.py:383 -#: netbox/ipam/forms/model_forms.py:507 netbox/netbox/navigation/menu.py:386 +#: netbox/ipam/forms/bulk_edit.py:405 netbox/ipam/forms/filtersets.py:386 +#: netbox/ipam/forms/model_forms.py:517 netbox/netbox/navigation/menu.py:407 #: netbox/templates/ipam/fhrpgroup.html:49 #: netbox/templates/wireless/inc/authentication_attrs.html:5 -#: netbox/wireless/forms/bulk_edit.py:91 -#: netbox/wireless/forms/bulk_edit.py:149 -#: netbox/wireless/forms/filtersets.py:36 -#: netbox/wireless/forms/filtersets.py:76 -#: netbox/wireless/forms/model_forms.py:55 -#: netbox/wireless/forms/model_forms.py:171 +#: netbox/wireless/forms/bulk_edit.py:94 +#: netbox/wireless/forms/bulk_edit.py:152 +#: netbox/wireless/forms/filtersets.py:39 +#: netbox/wireless/forms/filtersets.py:104 +#: netbox/wireless/forms/model_forms.py:58 +#: netbox/wireless/forms/model_forms.py:174 msgid "Authentication" msgstr "Authentifizierung" -#: netbox/ipam/forms/bulk_edit.py:436 netbox/ipam/forms/model_forms.py:608 -msgid "Scope type" -msgstr "Art des Geltungsbereichs" - -#: netbox/ipam/forms/bulk_edit.py:439 netbox/ipam/forms/bulk_edit.py:453 -#: netbox/ipam/forms/model_forms.py:611 netbox/ipam/forms/model_forms.py:621 -#: netbox/ipam/tables/vlans.py:71 netbox/templates/ipam/vlangroup.html:38 -msgid "Scope" -msgstr "Geltungsbereich" - -#: netbox/ipam/forms/bulk_edit.py:446 netbox/ipam/models/vlans.py:60 +#: netbox/ipam/forms/bulk_edit.py:430 netbox/ipam/models/vlans.py:62 msgid "VLAN ID ranges" msgstr "VLAN-ID-Bereiche" -#: netbox/ipam/forms/bulk_edit.py:525 +#: netbox/ipam/forms/bulk_edit.py:505 netbox/ipam/forms/bulk_import.py:485 +#: netbox/ipam/forms/filtersets.py:557 netbox/ipam/models/vlans.py:232 +#: netbox/ipam/tables/vlans.py:103 +msgid "Q-in-Q role" +msgstr "Q-in-Q-Rolle" + +#: netbox/ipam/forms/bulk_edit.py:522 +msgid "Q-in-Q" +msgstr "Q in Q" + +#: netbox/ipam/forms/bulk_edit.py:523 msgid "Site & Group" msgstr "Standort und Gruppe" -#: netbox/ipam/forms/bulk_edit.py:539 netbox/ipam/forms/model_forms.py:692 -#: netbox/ipam/forms/model_forms.py:724 netbox/ipam/tables/services.py:19 +#: netbox/ipam/forms/bulk_edit.py:546 netbox/ipam/forms/bulk_import.py:515 +#: netbox/ipam/forms/model_forms.py:724 netbox/ipam/tables/vlans.py:256 +#: netbox/templates/ipam/vlantranslationrule.html:14 +#: netbox/vpn/forms/model_forms.py:322 netbox/vpn/forms/model_forms.py:359 +msgid "Policy" +msgstr "Richtlinie" + +#: netbox/ipam/forms/bulk_edit.py:567 netbox/ipam/forms/model_forms.py:742 +#: netbox/ipam/forms/model_forms.py:774 netbox/ipam/tables/services.py:19 #: netbox/ipam/tables/services.py:49 netbox/templates/ipam/service.html:36 #: netbox/templates/ipam/servicetemplate.html:23 msgid "Ports" msgstr "Ports" -#: netbox/ipam/forms/bulk_import.py:48 +#: netbox/ipam/forms/bulk_import.py:51 msgid "Import route targets" msgstr "Routenziele importieren" -#: netbox/ipam/forms/bulk_import.py:54 +#: netbox/ipam/forms/bulk_import.py:57 msgid "Export route targets" msgstr "Routenziele exportieren" -#: netbox/ipam/forms/bulk_import.py:92 netbox/ipam/forms/bulk_import.py:112 -#: netbox/ipam/forms/bulk_import.py:132 +#: netbox/ipam/forms/bulk_import.py:95 netbox/ipam/forms/bulk_import.py:115 +#: netbox/ipam/forms/bulk_import.py:135 msgid "Assigned RIR" msgstr "Zugewiesenes RIR" -#: netbox/ipam/forms/bulk_import.py:182 +#: netbox/ipam/forms/bulk_import.py:178 msgid "VLAN's group (if any)" msgstr "VLAN-Gruppe (falls vorhanden)" -#: netbox/ipam/forms/bulk_import.py:308 -msgid "Parent device of assigned interface (if any)" -msgstr "Übergeordnetes Gerät der zugewiesenen Schnittstelle (falls vorhanden)" - -#: netbox/ipam/forms/bulk_import.py:311 netbox/ipam/forms/bulk_import.py:512 -#: netbox/ipam/forms/model_forms.py:718 -#: netbox/virtualization/filtersets.py:288 -#: netbox/virtualization/filtersets.py:327 -#: netbox/virtualization/forms/bulk_edit.py:200 -#: netbox/virtualization/forms/bulk_edit.py:326 -#: netbox/virtualization/forms/bulk_import.py:146 -#: netbox/virtualization/forms/bulk_import.py:207 -#: netbox/virtualization/forms/filtersets.py:212 -#: netbox/virtualization/forms/filtersets.py:248 -#: netbox/virtualization/forms/model_forms.py:288 -#: netbox/vpn/forms/bulk_import.py:93 netbox/vpn/forms/bulk_import.py:290 -msgid "Virtual machine" -msgstr "Virtuelle Maschine" - -#: netbox/ipam/forms/bulk_import.py:315 -msgid "Parent VM of assigned interface (if any)" -msgstr "Übergeordnete VM der zugewiesenen Schnittstelle (falls vorhanden)" +#: netbox/ipam/forms/bulk_import.py:207 +#: netbox/virtualization/forms/bulk_import.py:80 +#: netbox/wireless/forms/bulk_import.py:83 +msgid "Scope ID" +msgstr "Bereichs-ID" #: netbox/ipam/forms/bulk_import.py:325 -msgid "Is primary" -msgstr "Ist primär" - -#: netbox/ipam/forms/bulk_import.py:326 msgid "Make this the primary IP for the assigned device" msgstr "Machen Sie dies zur primären IP für das zugewiesene Gerät" -#: netbox/ipam/forms/bulk_import.py:330 +#: netbox/ipam/forms/bulk_import.py:329 msgid "Is out-of-band" msgstr "Ist Out-Of-Band" -#: netbox/ipam/forms/bulk_import.py:331 +#: netbox/ipam/forms/bulk_import.py:330 msgid "Designate this as the out-of-band IP address for the assigned device" msgstr "" "Geben Sie dies als Out-of-Band-IP-Adresse für das zugewiesene Gerät an" -#: netbox/ipam/forms/bulk_import.py:371 +#: netbox/ipam/forms/bulk_import.py:370 msgid "No device or virtual machine specified; cannot set as primary IP" msgstr "" "Kein Gerät oder virtuelle Maschine angegeben; kann nicht als primäre IP " "festgelegt werden" -#: netbox/ipam/forms/bulk_import.py:375 +#: netbox/ipam/forms/bulk_import.py:374 msgid "No device specified; cannot set as out-of-band IP" msgstr "" "Kein Gerät angegeben; kann nicht als Out-of-Band-IP eingerichtet werden" -#: netbox/ipam/forms/bulk_import.py:379 +#: netbox/ipam/forms/bulk_import.py:378 msgid "Cannot set out-of-band IP for virtual machines" msgstr "Out-of-Band-IP für virtuelle Maschinen kann nicht eingerichtet werden" -#: netbox/ipam/forms/bulk_import.py:383 +#: netbox/ipam/forms/bulk_import.py:382 msgid "No interface specified; cannot set as primary IP" msgstr "" "Keine Schnittstelle angegeben; kann nicht als primäre IP festgelegt werden" -#: netbox/ipam/forms/bulk_import.py:387 +#: netbox/ipam/forms/bulk_import.py:386 msgid "No interface specified; cannot set as out-of-band IP" msgstr "" "Keine Schnittstelle angegeben; kann nicht als Out-of-Band-IP festgelegt " "werden" -#: netbox/ipam/forms/bulk_import.py:422 +#: netbox/ipam/forms/bulk_import.py:421 msgid "Auth type" msgstr "Authentifizierungstyp" -#: netbox/ipam/forms/bulk_import.py:437 -msgid "Scope type (app & model)" -msgstr "Art des Umfangs (App und Modell)" - -#: netbox/ipam/forms/bulk_import.py:464 +#: netbox/ipam/forms/bulk_import.py:463 msgid "Assigned VLAN group" msgstr "Zugewiesene VLAN-Gruppe" -#: netbox/ipam/forms/bulk_import.py:495 netbox/ipam/forms/bulk_import.py:521 +#: netbox/ipam/forms/bulk_import.py:495 +msgid "Service VLAN (for Q-in-Q/802.1ad customer VLANs)" +msgstr "Service-VLAN (für Q-in-Q/802.1ad-Kunden-VLANs)" + +#: netbox/ipam/forms/bulk_import.py:518 netbox/ipam/models/vlans.py:343 +msgid "VLAN translation policy" +msgstr "VLAN-Übersetzungsrichtlinie" + +#: netbox/ipam/forms/bulk_import.py:530 netbox/ipam/forms/bulk_import.py:556 msgid "IP protocol" msgstr "IP-Protokoll" -#: netbox/ipam/forms/bulk_import.py:509 +#: netbox/ipam/forms/bulk_import.py:544 msgid "Required if not assigned to a VM" msgstr "Erforderlich, wenn es keiner VM zugewiesen ist" -#: netbox/ipam/forms/bulk_import.py:516 +#: netbox/ipam/forms/bulk_import.py:551 msgid "Required if not assigned to a device" msgstr "Erforderlich, wenn es keinem Gerät zugewiesen ist" -#: netbox/ipam/forms/bulk_import.py:541 +#: netbox/ipam/forms/bulk_import.py:576 #, python-brace-format msgid "{ip} is not assigned to this device/VM." msgstr "{ip} ist diesem Gerät/dieser VM nicht zugewiesen." -#: netbox/ipam/forms/filtersets.py:47 netbox/ipam/forms/model_forms.py:63 -#: netbox/netbox/navigation/menu.py:189 netbox/vpn/forms/model_forms.py:410 +#: netbox/ipam/forms/filtersets.py:49 netbox/ipam/forms/model_forms.py:66 +#: netbox/netbox/navigation/menu.py:195 netbox/vpn/forms/model_forms.py:413 msgid "Route Targets" msgstr "Routenziele" -#: netbox/ipam/forms/filtersets.py:53 netbox/ipam/forms/model_forms.py:50 -#: netbox/vpn/forms/filtersets.py:224 netbox/vpn/forms/model_forms.py:397 +#: netbox/ipam/forms/filtersets.py:55 netbox/ipam/forms/model_forms.py:53 +#: netbox/vpn/forms/filtersets.py:224 netbox/vpn/forms/model_forms.py:400 msgid "Import targets" msgstr "Ziele importieren" -#: netbox/ipam/forms/filtersets.py:58 netbox/ipam/forms/model_forms.py:55 -#: netbox/vpn/forms/filtersets.py:229 netbox/vpn/forms/model_forms.py:402 +#: netbox/ipam/forms/filtersets.py:60 netbox/ipam/forms/model_forms.py:58 +#: netbox/vpn/forms/filtersets.py:229 netbox/vpn/forms/model_forms.py:405 msgid "Export targets" msgstr "Ziele exportieren" -#: netbox/ipam/forms/filtersets.py:73 +#: netbox/ipam/forms/filtersets.py:75 msgid "Imported by VRF" msgstr "Importiert von VRF" -#: netbox/ipam/forms/filtersets.py:78 +#: netbox/ipam/forms/filtersets.py:80 msgid "Exported by VRF" msgstr "Exportiert von VRF" -#: netbox/ipam/forms/filtersets.py:87 netbox/ipam/tables/ip.py:89 +#: netbox/ipam/forms/filtersets.py:89 netbox/ipam/tables/ip.py:35 #: netbox/templates/ipam/rir.html:30 msgid "Private" msgstr "Privat" -#: netbox/ipam/forms/filtersets.py:105 netbox/ipam/forms/filtersets.py:191 -#: netbox/ipam/forms/filtersets.py:272 netbox/ipam/forms/filtersets.py:326 +#: netbox/ipam/forms/filtersets.py:107 netbox/ipam/forms/filtersets.py:193 +#: netbox/ipam/forms/filtersets.py:275 netbox/ipam/forms/filtersets.py:329 msgid "Address family" msgstr "Adressfamilie" -#: netbox/ipam/forms/filtersets.py:119 netbox/templates/ipam/asnrange.html:25 +#: netbox/ipam/forms/filtersets.py:121 netbox/templates/ipam/asnrange.html:25 msgid "Range" msgstr "Bereich" -#: netbox/ipam/forms/filtersets.py:128 +#: netbox/ipam/forms/filtersets.py:130 msgid "Start" msgstr "Start" -#: netbox/ipam/forms/filtersets.py:132 +#: netbox/ipam/forms/filtersets.py:134 msgid "End" msgstr "Ende" -#: netbox/ipam/forms/filtersets.py:186 +#: netbox/ipam/forms/filtersets.py:188 msgid "Search within" msgstr "Suche innerhalb" -#: netbox/ipam/forms/filtersets.py:207 netbox/ipam/forms/filtersets.py:342 +#: netbox/ipam/forms/filtersets.py:209 netbox/ipam/forms/filtersets.py:345 msgid "Present in VRF" msgstr "In VRF präsent" -#: netbox/ipam/forms/filtersets.py:311 +#: netbox/ipam/forms/filtersets.py:314 msgid "Device/VM" msgstr "Gerät/VM" -#: netbox/ipam/forms/filtersets.py:321 +#: netbox/ipam/forms/filtersets.py:324 msgid "Parent Prefix" msgstr "Übergeordnetes Prefix" -#: netbox/ipam/forms/filtersets.py:347 -msgid "Assigned Device" -msgstr "Zugewiesenes Gerät" - -#: netbox/ipam/forms/filtersets.py:352 -msgid "Assigned VM" -msgstr "Zugewiesene VM" - -#: netbox/ipam/forms/filtersets.py:366 +#: netbox/ipam/forms/filtersets.py:369 msgid "Assigned to an interface" msgstr "Einer Schnittstelle zugewiesen" -#: netbox/ipam/forms/filtersets.py:373 netbox/templates/ipam/ipaddress.html:51 +#: netbox/ipam/forms/filtersets.py:376 netbox/templates/ipam/ipaddress.html:51 msgid "DNS Name" msgstr "DNS-Name" -#: netbox/ipam/forms/filtersets.py:416 netbox/ipam/models/vlans.py:251 -#: netbox/ipam/tables/ip.py:176 netbox/ipam/tables/vlans.py:82 -#: netbox/ipam/views.py:971 netbox/netbox/navigation/menu.py:193 -#: netbox/netbox/navigation/menu.py:195 +#: netbox/ipam/forms/filtersets.py:419 netbox/ipam/models/vlans.py:273 +#: netbox/ipam/tables/ip.py:122 netbox/ipam/tables/vlans.py:51 +#: netbox/ipam/views.py:1036 netbox/netbox/navigation/menu.py:199 +#: netbox/netbox/navigation/menu.py:201 msgid "VLANs" msgstr "VLANs" -#: netbox/ipam/forms/filtersets.py:457 +#: netbox/ipam/forms/filtersets.py:460 msgid "Contains VLAN ID" msgstr "Enthält VLAN-ID" -#: netbox/ipam/forms/filtersets.py:513 netbox/ipam/models/vlans.py:192 +#: netbox/ipam/forms/filtersets.py:494 netbox/ipam/models/vlans.py:363 +msgid "Local VLAN ID" +msgstr "Lokale VLAN-ID" + +#: netbox/ipam/forms/filtersets.py:499 netbox/ipam/models/vlans.py:371 +msgid "Remote VLAN ID" +msgstr "Remote-VLAN-ID" + +#: netbox/ipam/forms/filtersets.py:509 +msgid "Q-in-Q/802.1ad" +msgstr "Q-in-Q/802.1ad" + +#: netbox/ipam/forms/filtersets.py:554 netbox/ipam/models/vlans.py:191 #: netbox/templates/ipam/vlan.html:31 msgid "VLAN ID" msgstr "VLAN-ID" -#: netbox/ipam/forms/filtersets.py:556 netbox/ipam/forms/model_forms.py:324 -#: netbox/ipam/forms/model_forms.py:746 netbox/ipam/forms/model_forms.py:772 -#: netbox/ipam/tables/vlans.py:195 -#: netbox/templates/virtualization/virtualdisk.html:21 -#: netbox/templates/virtualization/virtualmachine.html:12 -#: netbox/templates/virtualization/vminterface.html:21 -#: netbox/templates/vpn/tunneltermination.html:25 -#: netbox/virtualization/forms/filtersets.py:197 -#: netbox/virtualization/forms/filtersets.py:242 -#: netbox/virtualization/forms/model_forms.py:220 -#: netbox/virtualization/tables/virtualmachines.py:135 -#: netbox/virtualization/tables/virtualmachines.py:190 -#: netbox/vpn/choices.py:53 netbox/vpn/forms/filtersets.py:293 -#: netbox/vpn/forms/model_forms.py:160 netbox/vpn/forms/model_forms.py:171 -#: netbox/vpn/forms/model_forms.py:273 netbox/vpn/forms/model_forms.py:454 -msgid "Virtual Machine" -msgstr "Virtuelle Maschine" - -#: netbox/ipam/forms/model_forms.py:80 +#: netbox/ipam/forms/model_forms.py:83 #: netbox/templates/ipam/routetarget.html:10 msgid "Route Target" msgstr "Ziel der Route" -#: netbox/ipam/forms/model_forms.py:114 netbox/ipam/tables/ip.py:117 +#: netbox/ipam/forms/model_forms.py:118 netbox/ipam/tables/ip.py:63 #: netbox/templates/ipam/aggregate.html:11 #: netbox/templates/ipam/prefix.html:38 msgid "Aggregate" msgstr "Aggregieren" -#: netbox/ipam/forms/model_forms.py:135 netbox/templates/ipam/asnrange.html:12 +#: netbox/ipam/forms/model_forms.py:140 netbox/templates/ipam/asnrange.html:12 msgid "ASN Range" msgstr "ASN-Bereich" -#: netbox/ipam/forms/model_forms.py:231 -msgid "Site/VLAN Assignment" -msgstr "" - -#: netbox/ipam/forms/model_forms.py:259 netbox/templates/ipam/iprange.html:10 +#: netbox/ipam/forms/model_forms.py:269 netbox/templates/ipam/iprange.html:10 msgid "IP Range" msgstr "IP-Bereich" -#: netbox/ipam/forms/model_forms.py:295 netbox/ipam/forms/model_forms.py:325 -#: netbox/ipam/forms/model_forms.py:506 +#: netbox/ipam/forms/model_forms.py:305 netbox/ipam/forms/model_forms.py:335 +#: netbox/ipam/forms/model_forms.py:516 #: netbox/templates/ipam/fhrpgroup.html:19 msgid "FHRP Group" msgstr "FHRP-Gruppe" -#: netbox/ipam/forms/model_forms.py:310 +#: netbox/ipam/forms/model_forms.py:320 msgid "Make this the primary IP for the device/VM" msgstr "Machen Sie dies zur primären IP für das Gerät/die VM" -#: netbox/ipam/forms/model_forms.py:314 +#: netbox/ipam/forms/model_forms.py:324 msgid "Make this the out-of-band IP for the device" msgstr "Machen Sie dies zur Out-of-Band-IP für das Gerät" -#: netbox/ipam/forms/model_forms.py:329 +#: netbox/ipam/forms/model_forms.py:339 msgid "NAT IP (Inside)" msgstr "NAT IP (innen)" -#: netbox/ipam/forms/model_forms.py:391 +#: netbox/ipam/forms/model_forms.py:401 msgid "An IP address can only be assigned to a single object." msgstr "Eine IP-Adresse kann nur einem einzigen Objekt zugewiesen werden." -#: netbox/ipam/forms/model_forms.py:398 +#: netbox/ipam/forms/model_forms.py:408 msgid "Cannot reassign primary IP address for the parent device/VM" msgstr "" "Die primäre IP-Adresse für das übergeordnete Gerät/die virtuelle Maschine " "kann nicht neu zugewiesen werden" -#: netbox/ipam/forms/model_forms.py:402 +#: netbox/ipam/forms/model_forms.py:412 msgid "Cannot reassign out-of-Band IP address for the parent device" msgstr "" "Out-of-Band-IP-Adresse für das übergeordnete Gerät kann nicht neu zugewiesen" " werden" -#: netbox/ipam/forms/model_forms.py:412 +#: netbox/ipam/forms/model_forms.py:422 msgid "" "Only IP addresses assigned to an interface can be designated as primary IPs." msgstr "" "Nur IP-Adressen, die einer Schnittstelle zugewiesen sind, können als primäre" " IPs festgelegt werden." -#: netbox/ipam/forms/model_forms.py:420 +#: netbox/ipam/forms/model_forms.py:430 msgid "" "Only IP addresses assigned to a device interface can be designated as the " "out-of-band IP for a device." @@ -10017,24 +10516,29 @@ msgstr "" "Nur IP-Adressen, die einer Geräteschnittstelle zugewiesen sind, können als " "Out-of-Band-IP für ein Gerät festgelegt werden." -#: netbox/ipam/forms/model_forms.py:508 +#: netbox/ipam/forms/model_forms.py:518 msgid "Virtual IP Address" msgstr "Virtuelle IP-Adresse" -#: netbox/ipam/forms/model_forms.py:593 +#: netbox/ipam/forms/model_forms.py:603 msgid "Assignment already exists" msgstr "Zuweisung ist bereits vorhanden" -#: netbox/ipam/forms/model_forms.py:602 +#: netbox/ipam/forms/model_forms.py:612 #: netbox/templates/ipam/vlangroup.html:42 msgid "VLAN IDs" msgstr "VLAN-IDs" -#: netbox/ipam/forms/model_forms.py:620 +#: netbox/ipam/forms/model_forms.py:630 msgid "Child VLANs" msgstr "Untergeordnete VLANs" -#: netbox/ipam/forms/model_forms.py:697 netbox/ipam/forms/model_forms.py:729 +#: netbox/ipam/forms/model_forms.py:730 +#: netbox/templates/ipam/vlantranslationrule.html:11 +msgid "VLAN Translation Rule" +msgstr "VLAN-Übersetzungsregel" + +#: netbox/ipam/forms/model_forms.py:747 netbox/ipam/forms/model_forms.py:779 msgid "" "Comma-separated list of one or more port numbers. A range may be specified " "using a hyphen." @@ -10042,33 +10546,28 @@ msgstr "" "Kommagetrennte Liste mit einer oder mehreren Portnummern. Ein Bereich kann " "mit einem Bindestrich angegeben werden." -#: netbox/ipam/forms/model_forms.py:702 +#: netbox/ipam/forms/model_forms.py:752 #: netbox/templates/ipam/servicetemplate.html:12 msgid "Service Template" msgstr "Vorlage für den Service" -#: netbox/ipam/forms/model_forms.py:749 +#: netbox/ipam/forms/model_forms.py:799 msgid "Port(s)" msgstr "Port(s)" -#: netbox/ipam/forms/model_forms.py:750 netbox/ipam/forms/model_forms.py:778 -#: netbox/templates/ipam/service.html:21 -msgid "Service" -msgstr "Dienst / Port" - -#: netbox/ipam/forms/model_forms.py:763 +#: netbox/ipam/forms/model_forms.py:813 msgid "Service template" msgstr "Dienstevorlagen (Ports)" -#: netbox/ipam/forms/model_forms.py:775 +#: netbox/ipam/forms/model_forms.py:825 msgid "From Template" msgstr "Aus Vorlage" -#: netbox/ipam/forms/model_forms.py:776 +#: netbox/ipam/forms/model_forms.py:826 msgid "Custom" msgstr "Benutzerdefiniert" -#: netbox/ipam/forms/model_forms.py:806 +#: netbox/ipam/forms/model_forms.py:856 msgid "" "Must specify name, protocol, and port(s) if not using a service template." msgstr "" @@ -10087,29 +10586,29 @@ msgstr "ASN-Bereich" msgid "ASN ranges" msgstr "ASN-Bereiche" -#: netbox/ipam/models/asns.py:72 +#: netbox/ipam/models/asns.py:69 #, python-brace-format msgid "Starting ASN ({start}) must be lower than ending ASN ({end})." msgstr "Der ASN ({start}) muss niedriger sein als das letzte ASN ({end})." -#: netbox/ipam/models/asns.py:104 +#: netbox/ipam/models/asns.py:101 msgid "Regional Internet Registry responsible for this AS number space" msgstr "" "Regionale Internetregistrierung, die für diesen AS-Nummernraum zuständig ist" -#: netbox/ipam/models/asns.py:109 +#: netbox/ipam/models/asns.py:106 msgid "16- or 32-bit autonomous system number" msgstr "16- oder 32-Bit-Autonome Systemnummer" -#: netbox/ipam/models/fhrp.py:22 +#: netbox/ipam/models/fhrp.py:21 msgid "group ID" msgstr "Gruppen-ID" -#: netbox/ipam/models/fhrp.py:30 netbox/ipam/models/services.py:22 +#: netbox/ipam/models/fhrp.py:29 netbox/ipam/models/services.py:21 msgid "protocol" msgstr "Protokoll" -#: netbox/ipam/models/fhrp.py:38 netbox/wireless/models.py:28 +#: netbox/ipam/models/fhrp.py:38 netbox/wireless/models.py:29 msgid "authentication type" msgstr "Authentifizierungstyp" @@ -10125,11 +10624,11 @@ msgstr "FHRP-Gruppe" msgid "FHRP groups" msgstr "FHRP-Gruppen" -#: netbox/ipam/models/fhrp.py:113 +#: netbox/ipam/models/fhrp.py:110 msgid "FHRP group assignment" msgstr "FHRP-Gruppenzuweisung" -#: netbox/ipam/models/fhrp.py:114 +#: netbox/ipam/models/fhrp.py:111 msgid "FHRP group assignments" msgstr "FHRP-Gruppenaufgaben" @@ -10141,36 +10640,36 @@ msgstr "Privat" msgid "IP space managed by this RIR is considered private" msgstr "Der von diesem RIR verwaltete IP-Bereich gilt als privat" -#: netbox/ipam/models/ip.py:72 netbox/netbox/navigation/menu.py:182 +#: netbox/ipam/models/ip.py:72 netbox/netbox/navigation/menu.py:188 msgid "RIRs" msgstr "RIRs" -#: netbox/ipam/models/ip.py:84 +#: netbox/ipam/models/ip.py:81 msgid "IPv4 or IPv6 network" msgstr "IPv4- oder IPv6-Netzwerk" -#: netbox/ipam/models/ip.py:91 +#: netbox/ipam/models/ip.py:88 msgid "Regional Internet Registry responsible for this IP space" msgstr "" "Regionale Internetregistrierung, die für diesen IP-Bereich zuständig ist" -#: netbox/ipam/models/ip.py:101 +#: netbox/ipam/models/ip.py:98 msgid "date added" msgstr "Datum hinzugefügt" -#: netbox/ipam/models/ip.py:115 +#: netbox/ipam/models/ip.py:112 msgid "aggregate" msgstr "Aggregat" -#: netbox/ipam/models/ip.py:116 +#: netbox/ipam/models/ip.py:113 msgid "aggregates" msgstr "aggregiert" -#: netbox/ipam/models/ip.py:132 +#: netbox/ipam/models/ip.py:126 msgid "Cannot create aggregate with /0 mask." msgstr "Ein Aggregat mit der Maske /0 kann nicht erstellt werden." -#: netbox/ipam/models/ip.py:144 +#: netbox/ipam/models/ip.py:138 #, python-brace-format msgid "" "Aggregates cannot overlap. {prefix} is already covered by an existing " @@ -10179,7 +10678,7 @@ msgstr "" "Aggregate können sich nicht überschneiden. {prefix} wird bereits von einem " "vorhandenen Aggregat abgedeckt ({aggregate})." -#: netbox/ipam/models/ip.py:158 +#: netbox/ipam/models/ip.py:152 #, python-brace-format msgid "" "Prefixes cannot overlap aggregates. {prefix} covers an existing aggregate " @@ -10188,130 +10687,125 @@ msgstr "" "Präfixe können Aggregate nicht überlappen. {prefix} deckt ein vorhandenes " "Aggregat ab ({aggregate})." -#: netbox/ipam/models/ip.py:200 netbox/ipam/models/ip.py:737 -#: netbox/vpn/models/tunnels.py:114 -msgid "role" -msgstr "Rolle" - -#: netbox/ipam/models/ip.py:201 +#: netbox/ipam/models/ip.py:195 msgid "roles" msgstr "Rollen" -#: netbox/ipam/models/ip.py:217 netbox/ipam/models/ip.py:293 +#: netbox/ipam/models/ip.py:208 netbox/ipam/models/ip.py:277 msgid "prefix" msgstr "Prefix" -#: netbox/ipam/models/ip.py:218 +#: netbox/ipam/models/ip.py:209 msgid "IPv4 or IPv6 network with mask" msgstr "IPv4- oder IPv6-Netzwerk mit Maske" -#: netbox/ipam/models/ip.py:254 +#: netbox/ipam/models/ip.py:238 msgid "Operational status of this prefix" msgstr "Betriebsstatus dieses Prefixes" -#: netbox/ipam/models/ip.py:262 +#: netbox/ipam/models/ip.py:246 msgid "The primary function of this prefix" msgstr "Die Hauptfunktion dieses Prefixes" -#: netbox/ipam/models/ip.py:265 +#: netbox/ipam/models/ip.py:249 msgid "is a pool" msgstr "ist ein Pool" -#: netbox/ipam/models/ip.py:267 +#: netbox/ipam/models/ip.py:251 msgid "All IP addresses within this prefix are considered usable" msgstr "" "Alle IP-Adressen (inklusive Netzwerk- und Broadcast-Adresse) innerhalb " "dieses Prefixes werden als nutzbar betrachtet" -#: netbox/ipam/models/ip.py:270 netbox/ipam/models/ip.py:537 +#: netbox/ipam/models/ip.py:254 netbox/ipam/models/ip.py:523 msgid "mark utilized" msgstr "als verwendet markieren" -#: netbox/ipam/models/ip.py:294 +#: netbox/ipam/models/ip.py:278 msgid "prefixes" msgstr "Prefixe" -#: netbox/ipam/models/ip.py:317 +#: netbox/ipam/models/ip.py:298 msgid "Cannot create prefix with /0 mask." msgstr "Prefix mit der Maske /0 kann nicht erstellt werden." -#: netbox/ipam/models/ip.py:324 netbox/ipam/models/ip.py:874 +#: netbox/ipam/models/ip.py:305 netbox/ipam/models/ip.py:871 #, python-brace-format msgid "VRF {vrf}" msgstr "VRF {vrf}" -#: netbox/ipam/models/ip.py:324 netbox/ipam/models/ip.py:874 +#: netbox/ipam/models/ip.py:305 netbox/ipam/models/ip.py:871 msgid "global table" msgstr "globale Tabelle" -#: netbox/ipam/models/ip.py:326 +#: netbox/ipam/models/ip.py:307 #, python-brace-format msgid "Duplicate prefix found in {table}: {prefix}" msgstr "Doppeltes Prefix gefunden in {table}: {prefix}" -#: netbox/ipam/models/ip.py:495 +#: netbox/ipam/models/ip.py:481 msgid "start address" msgstr "Startadresse" -#: netbox/ipam/models/ip.py:496 netbox/ipam/models/ip.py:500 -#: netbox/ipam/models/ip.py:712 +#: netbox/ipam/models/ip.py:482 netbox/ipam/models/ip.py:486 +#: netbox/ipam/models/ip.py:711 msgid "IPv4 or IPv6 address (with mask)" msgstr "IPv4- oder IPv6-Adresse (mit Maske)" -#: netbox/ipam/models/ip.py:499 +#: netbox/ipam/models/ip.py:485 msgid "end address" msgstr "Endadresse" -#: netbox/ipam/models/ip.py:526 +#: netbox/ipam/models/ip.py:512 msgid "Operational status of this range" msgstr "Betriebsstatus dieses Bereichs" -#: netbox/ipam/models/ip.py:534 +#: netbox/ipam/models/ip.py:520 msgid "The primary function of this range" msgstr "Die Hauptfunktion dieses Bereichs" -#: netbox/ipam/models/ip.py:548 +#: netbox/ipam/models/ip.py:534 msgid "IP range" msgstr "IP-Bereich" -#: netbox/ipam/models/ip.py:549 +#: netbox/ipam/models/ip.py:535 msgid "IP ranges" msgstr "IP-Bereiche" -#: netbox/ipam/models/ip.py:565 +#: netbox/ipam/models/ip.py:548 msgid "Starting and ending IP address versions must match" msgstr "Die Versionen der Anfangs- und Endadresse müssen übereinstimmen" -#: netbox/ipam/models/ip.py:571 +#: netbox/ipam/models/ip.py:554 msgid "Starting and ending IP address masks must match" msgstr "Die Masken für Start- und Endadressen müssen übereinstimmen" -#: netbox/ipam/models/ip.py:578 +#: netbox/ipam/models/ip.py:561 #, python-brace-format msgid "" "Ending address must be greater than the starting address ({start_address})" msgstr "" "Die Endadresse muss größer als die Startadresse sein ({start_address})" -#: netbox/ipam/models/ip.py:590 +#: netbox/ipam/models/ip.py:589 #, python-brace-format msgid "Defined addresses overlap with range {overlapping_range} in VRF {vrf}" msgstr "" "Definierte Adressen überschneiden sich mit dem Bereich {overlapping_range} " "im VRF {vrf}" -#: netbox/ipam/models/ip.py:599 +#: netbox/ipam/models/ip.py:598 #, python-brace-format msgid "Defined range exceeds maximum supported size ({max_size})" msgstr "" "Der definierte Bereich überschreitet die maximal unterstützte Größe " "({max_size})" -#: netbox/ipam/models/ip.py:711 netbox/tenancy/models/contacts.py:82 +#: netbox/ipam/models/ip.py:710 netbox/tenancy/models/contacts.py:77 msgid "address" msgstr "Adresse" -#: netbox/ipam/models/ip.py:734 +#: netbox/ipam/models/ip.py:733 msgid "The operational status of this IP" msgstr "Der Betriebsstatus dieser IP" @@ -10331,21 +10825,21 @@ msgstr "Die IP, für die diese Adresse die „externe“ IP ist" msgid "Hostname or FQDN (not case-sensitive)" msgstr "Hostname oder FQDN (Groß- und Kleinschreibung nicht beachten)" -#: netbox/ipam/models/ip.py:789 netbox/ipam/models/services.py:94 +#: netbox/ipam/models/ip.py:789 netbox/ipam/models/services.py:90 msgid "IP addresses" msgstr "IP-Adressen" -#: netbox/ipam/models/ip.py:845 +#: netbox/ipam/models/ip.py:842 msgid "Cannot create IP address with /0 mask." msgstr "Die IP-Adresse mit der Maske /0 kann nicht erstellt werden." -#: netbox/ipam/models/ip.py:851 +#: netbox/ipam/models/ip.py:848 #, python-brace-format msgid "{ip} is a network ID, which may not be assigned to an interface." msgstr "" "{ip} ist eine Netzwerk-ID, die keiner Schnittstelle zugewiesen werden darf." -#: netbox/ipam/models/ip.py:862 +#: netbox/ipam/models/ip.py:859 #, python-brace-format msgid "" "{ip} is a broadcast address, which may not be assigned to an interface." @@ -10353,12 +10847,12 @@ msgstr "" "{ip} ist eine Broadcast-Adresse, die keiner Schnittstelle zugewiesen werden " "darf." -#: netbox/ipam/models/ip.py:876 +#: netbox/ipam/models/ip.py:873 #, python-brace-format msgid "Duplicate IP address found in {table}: {ipaddress}" msgstr "Doppelte IP-Adresse gefunden in {table}: {ipaddress}" -#: netbox/ipam/models/ip.py:897 +#: netbox/ipam/models/ip.py:896 msgid "" "Cannot reassign IP address while it is designated as the primary IP for the " "parent object" @@ -10366,75 +10860,75 @@ msgstr "" "Die IP-Adresse kann nicht neu zugewiesen werden, solange sie als primäre IP " "für das übergeordnete Objekt festgelegt ist" -#: netbox/ipam/models/ip.py:903 +#: netbox/ipam/models/ip.py:902 msgid "Only IPv6 addresses can be assigned SLAAC status" msgstr "Nur IPv6-Adressen kann der SLAAC-Status zugewiesen werden" -#: netbox/ipam/models/services.py:33 +#: netbox/ipam/models/services.py:32 msgid "port numbers" msgstr "Portnummern" -#: netbox/ipam/models/services.py:59 +#: netbox/ipam/models/services.py:58 msgid "service template" msgstr "Servicevorlage" -#: netbox/ipam/models/services.py:60 +#: netbox/ipam/models/services.py:59 msgid "service templates" msgstr "Servicevorlagen" -#: netbox/ipam/models/services.py:95 +#: netbox/ipam/models/services.py:91 msgid "The specific IP addresses (if any) to which this service is bound" msgstr "" "Die spezifischen IP-Adressen (falls vorhanden), an die dieser Dienst " "gebunden ist" -#: netbox/ipam/models/services.py:102 +#: netbox/ipam/models/services.py:98 msgid "service" msgstr "Dienst / Port" -#: netbox/ipam/models/services.py:103 +#: netbox/ipam/models/services.py:99 msgid "services" msgstr "Dienste (Ports)" -#: netbox/ipam/models/services.py:117 +#: netbox/ipam/models/services.py:110 msgid "" "A service cannot be associated with both a device and a virtual machine." msgstr "" "Ein Dienst kann nicht gleichzeitig einem Gerät und einer virtuellen Maschine" " zugeordnet werden." -#: netbox/ipam/models/services.py:119 +#: netbox/ipam/models/services.py:112 msgid "" "A service must be associated with either a device or a virtual machine." msgstr "" "Ein Dienst muss entweder einem Gerät oder einer virtuellen Maschine " "zugeordnet sein." -#: netbox/ipam/models/vlans.py:85 +#: netbox/ipam/models/vlans.py:87 msgid "VLAN groups" msgstr "VLAN-Gruppen" -#: netbox/ipam/models/vlans.py:95 +#: netbox/ipam/models/vlans.py:94 msgid "Cannot set scope_type without scope_id." msgstr "scope_type kann nicht ohne scope_id gesetzt werden." -#: netbox/ipam/models/vlans.py:97 +#: netbox/ipam/models/vlans.py:96 msgid "Cannot set scope_id without scope_type." msgstr "scope_id kann nicht ohne scope_type gesetzt werden." -#: netbox/ipam/models/vlans.py:105 +#: netbox/ipam/models/vlans.py:104 #, python-brace-format msgid "Starting VLAN ID in range ({value}) cannot be less than {minimum}" msgstr "" "Start-VLAN-ID im Bereich ({value}) darf nicht kleiner sein als {minimum}" -#: netbox/ipam/models/vlans.py:111 +#: netbox/ipam/models/vlans.py:110 #, python-brace-format msgid "Ending VLAN ID in range ({value}) cannot exceed {maximum}" msgstr "" "Ende der VLAN-ID im Bereich ({value}) darf {maximum}nicht überschreiten " -#: netbox/ipam/models/vlans.py:118 +#: netbox/ipam/models/vlans.py:117 #, python-brace-format msgid "" "Ending VLAN ID in range must be greater than or equal to the starting VLAN " @@ -10443,32 +10937,37 @@ msgstr "" "Die End-VLAN-ID im Bereich muss größer oder gleich der Start-VLAN-ID sein " "({range})" -#: netbox/ipam/models/vlans.py:124 +#: netbox/ipam/models/vlans.py:123 msgid "Ranges cannot overlap." msgstr "Bereiche dürfen sich nicht überschneiden." -#: netbox/ipam/models/vlans.py:181 +#: netbox/ipam/models/vlans.py:180 msgid "The specific site to which this VLAN is assigned (if any)" msgstr "" "Der spezifische Standort, der dieses VLAN zugewiesen ist (falls vorhanden)" -#: netbox/ipam/models/vlans.py:189 +#: netbox/ipam/models/vlans.py:188 msgid "VLAN group (optional)" msgstr "VLAN-Gruppe (optional)" -#: netbox/ipam/models/vlans.py:197 +#: netbox/ipam/models/vlans.py:196 netbox/ipam/models/vlans.py:368 +#: netbox/ipam/models/vlans.py:376 msgid "Numeric VLAN ID (1-4094)" msgstr "Numerische VLAN-ID (1-4094)" -#: netbox/ipam/models/vlans.py:215 +#: netbox/ipam/models/vlans.py:214 msgid "Operational status of this VLAN" msgstr "Betriebsstatus dieses VLAN" -#: netbox/ipam/models/vlans.py:223 +#: netbox/ipam/models/vlans.py:222 msgid "The primary function of this VLAN" msgstr "Die Hauptfunktion dieses VLAN" -#: netbox/ipam/models/vlans.py:266 +#: netbox/ipam/models/vlans.py:237 +msgid "Customer/service VLAN designation (for Q-in-Q/IEEE 802.1ad)" +msgstr "Kunden-/Service-VLAN-Bezeichnung (für Q-in-Q/IEEE 802.1ad)" + +#: netbox/ipam/models/vlans.py:285 #, python-brace-format msgid "" "VLAN is assigned to group {group} (scope: {scope}); cannot also assign to " @@ -10477,42 +10976,58 @@ msgstr "" "VLAN ist der Gruppe {group} (Scope: {scope}) zugewiesen; kann nicht auch dem" " Standort {site} zugewiesen werden." -#: netbox/ipam/models/vlans.py:275 +#: netbox/ipam/models/vlans.py:294 #, python-brace-format msgid "VID must be in ranges {ranges} for VLANs in group {group}" msgstr "" "VID muss in Bereichen liegen {ranges} für VLANs in einer Gruppe {group}" -#: netbox/ipam/models/vrfs.py:30 +#: netbox/ipam/models/vlans.py:301 +msgid "Only Q-in-Q customer VLANs maybe assigned to a service VLAN." +msgstr "Nur Q-in-Q-Kunden-VLANs können einem Service-VLAN zugewiesen werden." + +#: netbox/ipam/models/vlans.py:307 +msgid "A Q-in-Q customer VLAN must be assigned to a service VLAN." +msgstr "Ein Q-in-Q-Kunden-VLAN muss einem Service-VLAN zugewiesen werden." + +#: netbox/ipam/models/vlans.py:344 +msgid "VLAN translation policies" +msgstr "Richtlinien für VLAN-Übersetzungen" + +#: netbox/ipam/models/vlans.py:385 +msgid "VLAN translation rule" +msgstr "VLAN-Übersetzungsregel" + +#: netbox/ipam/models/vrfs.py:29 msgid "route distinguisher" msgstr "Routenunterscheidungsmerkmal" -#: netbox/ipam/models/vrfs.py:31 +#: netbox/ipam/models/vrfs.py:30 msgid "Unique route distinguisher (as defined in RFC 4364)" msgstr "Eindeutiger Routenbezeichner (wie in RFC 4364 definiert)" -#: netbox/ipam/models/vrfs.py:42 +#: netbox/ipam/models/vrfs.py:41 msgid "enforce unique space" msgstr "einzigartigen Raum erzwingen" -#: netbox/ipam/models/vrfs.py:43 +#: netbox/ipam/models/vrfs.py:42 msgid "Prevent duplicate prefixes/IP addresses within this VRF" msgstr "Vermeiden Sie doppelte Präfixe/IP-Adressen in dieser VRF" -#: netbox/ipam/models/vrfs.py:63 netbox/netbox/navigation/menu.py:186 -#: netbox/netbox/navigation/menu.py:188 +#: netbox/ipam/models/vrfs.py:62 netbox/netbox/navigation/menu.py:192 +#: netbox/netbox/navigation/menu.py:194 msgid "VRFs" msgstr "VRFs" -#: netbox/ipam/models/vrfs.py:82 +#: netbox/ipam/models/vrfs.py:78 msgid "Route target value (formatted in accordance with RFC 4360)" msgstr "Routenzielwert (formatiert gemäß RFC 4360)" -#: netbox/ipam/models/vrfs.py:94 +#: netbox/ipam/models/vrfs.py:91 msgid "route target" msgstr "Ziel der Route" -#: netbox/ipam/models/vrfs.py:95 +#: netbox/ipam/models/vrfs.py:92 msgid "route targets" msgstr "Routenziele" @@ -10528,84 +11043,101 @@ msgstr "Anzahl der Standorte" msgid "Provider Count" msgstr "Anzahl der Provider" -#: netbox/ipam/tables/ip.py:95 netbox/netbox/navigation/menu.py:179 -#: netbox/netbox/navigation/menu.py:181 +#: netbox/ipam/tables/ip.py:41 netbox/netbox/navigation/menu.py:185 +#: netbox/netbox/navigation/menu.py:187 msgid "Aggregates" msgstr "Aggregate" -#: netbox/ipam/tables/ip.py:125 +#: netbox/ipam/tables/ip.py:71 msgid "Added" msgstr "Hinzugefügt" -#: netbox/ipam/tables/ip.py:128 netbox/ipam/tables/ip.py:166 -#: netbox/ipam/tables/vlans.py:142 netbox/ipam/views.py:346 -#: netbox/netbox/navigation/menu.py:165 netbox/netbox/navigation/menu.py:167 -#: netbox/templates/ipam/vlan.html:84 +#: netbox/ipam/tables/ip.py:74 netbox/ipam/tables/ip.py:112 +#: netbox/ipam/tables/vlans.py:118 netbox/ipam/views.py:373 +#: netbox/netbox/navigation/menu.py:171 netbox/netbox/navigation/menu.py:173 +#: netbox/templates/ipam/vlan.html:100 msgid "Prefixes" msgstr "Prefixe" -#: netbox/ipam/tables/ip.py:131 netbox/ipam/tables/ip.py:270 -#: netbox/ipam/tables/ip.py:324 netbox/ipam/tables/vlans.py:86 +#: netbox/ipam/tables/ip.py:77 netbox/ipam/tables/ip.py:221 +#: netbox/ipam/tables/ip.py:276 netbox/ipam/tables/vlans.py:55 #: netbox/templates/dcim/device.html:260 #: netbox/templates/ipam/aggregate.html:24 -#: netbox/templates/ipam/iprange.html:29 netbox/templates/ipam/prefix.html:106 +#: netbox/templates/ipam/iprange.html:29 netbox/templates/ipam/prefix.html:102 msgid "Utilization" msgstr "Auslastung" -#: netbox/ipam/tables/ip.py:171 netbox/netbox/navigation/menu.py:161 +#: netbox/ipam/tables/ip.py:117 netbox/netbox/navigation/menu.py:167 msgid "IP Ranges" msgstr "IP-Bereiche" -#: netbox/ipam/tables/ip.py:221 +#: netbox/ipam/tables/ip.py:167 msgid "Prefix (Flat)" msgstr "Prefix (flach)" -#: netbox/ipam/tables/ip.py:225 +#: netbox/ipam/tables/ip.py:171 msgid "Depth" msgstr "Tiefe" -#: netbox/ipam/tables/ip.py:262 +#: netbox/ipam/tables/ip.py:191 netbox/ipam/tables/vlans.py:37 +#: netbox/virtualization/tables/clusters.py:77 +#: netbox/wireless/tables/wirelesslan.py:55 +msgid "Scope Type" +msgstr "Art des Geltungsbereichs" + +#: netbox/ipam/tables/ip.py:213 msgid "Pool" msgstr "Pool" -#: netbox/ipam/tables/ip.py:266 netbox/ipam/tables/ip.py:320 +#: netbox/ipam/tables/ip.py:217 netbox/ipam/tables/ip.py:272 msgid "Marked Utilized" msgstr "Als ausgenutzt markiert" -#: netbox/ipam/tables/ip.py:304 +#: netbox/ipam/tables/ip.py:256 msgid "Start address" msgstr "Startadresse" -#: netbox/ipam/tables/ip.py:383 +#: netbox/ipam/tables/ip.py:335 msgid "NAT (Inside)" msgstr "NAT (Innen)" -#: netbox/ipam/tables/ip.py:388 +#: netbox/ipam/tables/ip.py:340 msgid "NAT (Outside)" msgstr "NAT (Außen)" -#: netbox/ipam/tables/ip.py:393 +#: netbox/ipam/tables/ip.py:345 msgid "Assigned" msgstr "Zugewiesen" -#: netbox/ipam/tables/ip.py:429 netbox/templates/vpn/l2vpntermination.html:16 +#: netbox/ipam/tables/ip.py:381 netbox/templates/vpn/l2vpntermination.html:16 #: netbox/vpn/forms/filtersets.py:240 msgid "Assigned Object" msgstr "Zugewiesenes Objekt" -#: netbox/ipam/tables/vlans.py:68 -msgid "Scope Type" -msgstr "Art des Geltungsbereichs" - -#: netbox/ipam/tables/vlans.py:76 +#: netbox/ipam/tables/vlans.py:45 msgid "VID Ranges" msgstr "VID-Bereiche" -#: netbox/ipam/tables/vlans.py:111 netbox/ipam/tables/vlans.py:214 +#: netbox/ipam/tables/vlans.py:80 netbox/ipam/tables/vlans.py:190 #: netbox/templates/dcim/inc/interface_vlans_table.html:4 msgid "VID" msgstr "VID" +#: netbox/ipam/tables/vlans.py:237 +#: netbox/templates/ipam/vlantranslationpolicy.html:22 +msgid "Rules" +msgstr "Regeln" + +#: netbox/ipam/tables/vlans.py:260 +#: netbox/templates/ipam/vlantranslationrule.html:18 +msgid "Local VID" +msgstr "Lokales VID" + +#: netbox/ipam/tables/vlans.py:264 +#: netbox/templates/ipam/vlantranslationrule.html:22 +msgid "Remote VID" +msgstr "Entfernte-VID" + #: netbox/ipam/tables/vrfs.py:30 msgid "RD" msgstr "RD" @@ -10645,23 +11177,23 @@ msgstr "" "In DNS-Namen sind nur alphanumerische Zeichen, Sternchen, Bindestriche, " "Punkte und Unterstriche zulässig" -#: netbox/ipam/views.py:533 +#: netbox/ipam/views.py:570 msgid "Child Prefixes" msgstr "untergeordnete Prefixe" -#: netbox/ipam/views.py:569 +#: netbox/ipam/views.py:606 msgid "Child Ranges" msgstr "untergeordnete Bereiche" -#: netbox/ipam/views.py:898 +#: netbox/ipam/views.py:958 msgid "Related IPs" msgstr "Verwandte IPs" -#: netbox/ipam/views.py:1127 +#: netbox/ipam/views.py:1315 msgid "Device Interfaces" msgstr "Geräteschnittstellen" -#: netbox/ipam/views.py:1145 +#: netbox/ipam/views.py:1333 msgid "VM Interfaces" msgstr "VM-Schnittstellen" @@ -10710,90 +11242,112 @@ msgstr "{class_name} muss get_view_name () implementieren" msgid "Invalid permission {permission} for model {model}" msgstr "Ungültige Erlaubnis {permission} für Modell {model}" -#: netbox/netbox/choices.py:49 +#: netbox/netbox/choices.py:51 msgid "Dark Red" msgstr "Dunkelrot" -#: netbox/netbox/choices.py:52 +#: netbox/netbox/choices.py:54 msgid "Rose" msgstr "Rose" -#: netbox/netbox/choices.py:53 +#: netbox/netbox/choices.py:55 msgid "Fuchsia" msgstr "Fuchsia" -#: netbox/netbox/choices.py:55 +#: netbox/netbox/choices.py:57 msgid "Dark Purple" msgstr "Dunkles Violett" -#: netbox/netbox/choices.py:58 +#: netbox/netbox/choices.py:60 msgid "Light Blue" msgstr "Hellblau" -#: netbox/netbox/choices.py:61 +#: netbox/netbox/choices.py:63 msgid "Aqua" msgstr "Aquamarin" -#: netbox/netbox/choices.py:62 +#: netbox/netbox/choices.py:64 msgid "Dark Green" msgstr "Dunkelgrün" -#: netbox/netbox/choices.py:64 +#: netbox/netbox/choices.py:66 msgid "Light Green" msgstr "Hellgrün" -#: netbox/netbox/choices.py:65 +#: netbox/netbox/choices.py:67 msgid "Lime" msgstr "Limette" -#: netbox/netbox/choices.py:67 +#: netbox/netbox/choices.py:69 msgid "Amber" msgstr "Bernstein" -#: netbox/netbox/choices.py:69 +#: netbox/netbox/choices.py:71 msgid "Dark Orange" msgstr "Dunkles Orange" -#: netbox/netbox/choices.py:70 +#: netbox/netbox/choices.py:72 msgid "Brown" msgstr "Braun" -#: netbox/netbox/choices.py:71 +#: netbox/netbox/choices.py:73 msgid "Light Grey" msgstr "Hellgrau" -#: netbox/netbox/choices.py:72 +#: netbox/netbox/choices.py:74 msgid "Grey" msgstr "Grau" -#: netbox/netbox/choices.py:73 +#: netbox/netbox/choices.py:75 msgid "Dark Grey" msgstr "Dunkelgrau" -#: netbox/netbox/choices.py:128 +#: netbox/netbox/choices.py:103 netbox/templates/extras/script_result.html:56 +msgid "Default" +msgstr "Standard" + +#: netbox/netbox/choices.py:130 msgid "Direct" msgstr "Direkt" -#: netbox/netbox/choices.py:129 +#: netbox/netbox/choices.py:131 msgid "Upload" msgstr "Hochladen" -#: netbox/netbox/choices.py:141 netbox/netbox/choices.py:155 +#: netbox/netbox/choices.py:143 netbox/netbox/choices.py:157 msgid "Auto-detect" msgstr "Auto-Erkennung" -#: netbox/netbox/choices.py:156 +#: netbox/netbox/choices.py:158 msgid "Comma" msgstr "Komma" -#: netbox/netbox/choices.py:157 +#: netbox/netbox/choices.py:159 msgid "Semicolon" msgstr "Semikolon" -#: netbox/netbox/choices.py:158 +#: netbox/netbox/choices.py:160 msgid "Tab" msgstr "Tab" +#: netbox/netbox/choices.py:193 netbox/templates/dcim/device.html:327 +#: netbox/templates/dcim/rack.html:107 +msgid "Kilograms" +msgstr "Kilogramm" + +#: netbox/netbox/choices.py:194 +msgid "Grams" +msgstr "Gramm" + +#: netbox/netbox/choices.py:195 netbox/templates/dcim/device.html:328 +#: netbox/templates/dcim/rack.html:108 +msgid "Pounds" +msgstr "Pfund" + +#: netbox/netbox/choices.py:196 +msgid "Ounces" +msgstr "Unzen" + #: netbox/netbox/config/__init__.py:67 #, python-brace-format msgid "Invalid configuration parameter: {item}" @@ -11085,6 +11639,27 @@ msgstr "Datum der Synchronisierung " msgid "{class_name} must implement a sync_data() method." msgstr "{class_name} muss eine sync_data () -Methode implementieren." +#: netbox/netbox/models/mixins.py:22 +msgid "weight unit" +msgstr "Gewichtseinheit" + +#: netbox/netbox/models/mixins.py:52 +msgid "Must specify a unit when setting a weight" +msgstr "" +"Wenn ein Gewicht eingegeben wird, muss auch eine Einheit eingegeben werden." + +#: netbox/netbox/models/mixins.py:57 +msgid "distance" +msgstr "Entfernung" + +#: netbox/netbox/models/mixins.py:64 +msgid "distance unit" +msgstr "Entfernungseinheit" + +#: netbox/netbox/models/mixins.py:99 +msgid "Must specify a unit when setting a distance" +msgstr "Beim Einstellen einer Entfernung muss eine Einheit angegeben werden" + #: netbox/netbox/navigation/menu.py:11 msgid "Organization" msgstr "Organisation" @@ -11118,10 +11693,6 @@ msgstr "Rackrollen" msgid "Elevations" msgstr "Rackübersichten" -#: netbox/netbox/navigation/menu.py:60 netbox/netbox/navigation/menu.py:62 -msgid "Rack Types" -msgstr "Racktypen" - #: netbox/netbox/navigation/menu.py:76 msgid "Modules" msgstr "Module" @@ -11144,175 +11715,200 @@ msgstr "Gerätekomponenten" msgid "Inventory Item Roles" msgstr "Inventarartikelrollen" -#: netbox/netbox/navigation/menu.py:111 netbox/netbox/navigation/menu.py:115 +#: netbox/netbox/navigation/menu.py:110 +#: netbox/templates/dcim/interface.html:413 +#: netbox/templates/virtualization/vminterface.html:118 +msgid "MAC Addresses" +msgstr "MAC-Adressen" + +#: netbox/netbox/navigation/menu.py:117 netbox/netbox/navigation/menu.py:121 +#: netbox/templates/dcim/interface.html:182 msgid "Connections" msgstr "Verbindungen" -#: netbox/netbox/navigation/menu.py:117 +#: netbox/netbox/navigation/menu.py:123 msgid "Cables" msgstr "Kabel" -#: netbox/netbox/navigation/menu.py:118 +#: netbox/netbox/navigation/menu.py:124 msgid "Wireless Links" msgstr "Funkverbindungen" -#: netbox/netbox/navigation/menu.py:121 +#: netbox/netbox/navigation/menu.py:127 msgid "Interface Connections" msgstr "Schnittstellenverbindungen" -#: netbox/netbox/navigation/menu.py:126 +#: netbox/netbox/navigation/menu.py:132 msgid "Console Connections" msgstr "Konsolenverbindungen" -#: netbox/netbox/navigation/menu.py:131 +#: netbox/netbox/navigation/menu.py:137 msgid "Power Connections" msgstr "Stromverbindungen" -#: netbox/netbox/navigation/menu.py:147 +#: netbox/netbox/navigation/menu.py:153 msgid "Wireless LAN Groups" msgstr "WLAN-Gruppen" -#: netbox/netbox/navigation/menu.py:168 +#: netbox/netbox/navigation/menu.py:174 msgid "Prefix & VLAN Roles" msgstr "Prefix- und VLAN-Rollen" -#: netbox/netbox/navigation/menu.py:174 +#: netbox/netbox/navigation/menu.py:180 msgid "ASN Ranges" msgstr "ASN-Bereiche" -#: netbox/netbox/navigation/menu.py:196 +#: netbox/netbox/navigation/menu.py:202 msgid "VLAN Groups" msgstr "VLAN-Gruppen" #: netbox/netbox/navigation/menu.py:203 +msgid "VLAN Translation Policies" +msgstr "VLAN-Übersetzungsrichtlinien" + +#: netbox/netbox/navigation/menu.py:204 +#: netbox/templates/ipam/vlantranslationpolicy.html:46 +msgid "VLAN Translation Rules" +msgstr "VLAN-Übersetzungsregeln" + +#: netbox/netbox/navigation/menu.py:211 msgid "Service Templates" msgstr "Dienstevorlagen (Ports)" -#: netbox/netbox/navigation/menu.py:204 netbox/templates/dcim/device.html:302 +#: netbox/netbox/navigation/menu.py:212 netbox/templates/dcim/device.html:302 #: netbox/templates/ipam/ipaddress.html:118 #: netbox/templates/virtualization/virtualmachine.html:154 msgid "Services" msgstr "Dienste (Ports)" -#: netbox/netbox/navigation/menu.py:211 +#: netbox/netbox/navigation/menu.py:219 msgid "VPN" msgstr "VPN" -#: netbox/netbox/navigation/menu.py:215 netbox/netbox/navigation/menu.py:217 +#: netbox/netbox/navigation/menu.py:223 netbox/netbox/navigation/menu.py:225 #: netbox/vpn/tables/tunnels.py:24 msgid "Tunnels" msgstr "Tunnel" -#: netbox/netbox/navigation/menu.py:218 +#: netbox/netbox/navigation/menu.py:226 #: netbox/templates/vpn/tunnelgroup.html:8 msgid "Tunnel Groups" msgstr "Tunnelgruppen" -#: netbox/netbox/navigation/menu.py:219 +#: netbox/netbox/navigation/menu.py:227 msgid "Tunnel Terminations" msgstr "Tunnelabschlusspunkte" -#: netbox/netbox/navigation/menu.py:223 netbox/netbox/navigation/menu.py:225 +#: netbox/netbox/navigation/menu.py:231 netbox/netbox/navigation/menu.py:233 #: netbox/vpn/models/l2vpn.py:64 msgid "L2VPNs" msgstr "L2VPNs" -#: netbox/netbox/navigation/menu.py:226 netbox/templates/vpn/l2vpn.html:56 -#: netbox/templates/vpn/tunnel.html:72 netbox/vpn/tables/tunnels.py:58 -msgid "Terminations" -msgstr "Abschlusspunkte" - -#: netbox/netbox/navigation/menu.py:232 +#: netbox/netbox/navigation/menu.py:240 msgid "IKE Proposals" msgstr "IKE-Vorschläge" -#: netbox/netbox/navigation/menu.py:233 +#: netbox/netbox/navigation/menu.py:241 #: netbox/templates/vpn/ikeproposal.html:41 msgid "IKE Policies" msgstr "IKE-Richtlinien" -#: netbox/netbox/navigation/menu.py:234 +#: netbox/netbox/navigation/menu.py:242 msgid "IPSec Proposals" msgstr "IPSec-Vorschläge" -#: netbox/netbox/navigation/menu.py:235 +#: netbox/netbox/navigation/menu.py:243 #: netbox/templates/vpn/ipsecproposal.html:37 msgid "IPSec Policies" msgstr "IPSec-Richtlinien" -#: netbox/netbox/navigation/menu.py:236 netbox/templates/vpn/ikepolicy.html:38 +#: netbox/netbox/navigation/menu.py:244 netbox/templates/vpn/ikepolicy.html:38 #: netbox/templates/vpn/ipsecpolicy.html:25 msgid "IPSec Profiles" msgstr "IPSec-Profile" -#: netbox/netbox/navigation/menu.py:251 +#: netbox/netbox/navigation/menu.py:259 #: netbox/templates/virtualization/virtualmachine.html:174 #: netbox/templates/virtualization/virtualmachine/base.html:32 #: netbox/templates/virtualization/virtualmachine_list.html:21 -#: netbox/virtualization/tables/virtualmachines.py:104 -#: netbox/virtualization/views.py:386 +#: netbox/virtualization/tables/virtualmachines.py:74 +#: netbox/virtualization/views.py:403 msgid "Virtual Disks" msgstr "Virtuelle Festplatten" -#: netbox/netbox/navigation/menu.py:258 +#: netbox/netbox/navigation/menu.py:266 msgid "Cluster Types" msgstr "Clustertypen" -#: netbox/netbox/navigation/menu.py:259 +#: netbox/netbox/navigation/menu.py:267 msgid "Cluster Groups" msgstr "Clustergruppen" -#: netbox/netbox/navigation/menu.py:273 +#: netbox/netbox/navigation/menu.py:281 msgid "Circuit Types" msgstr "Transportnetztypen" -#: netbox/netbox/navigation/menu.py:274 -msgid "Circuit Groups" -msgstr "Transportnetzgruppe" - -#: netbox/netbox/navigation/menu.py:275 -#: netbox/templates/circuits/circuit.html:66 -msgid "Group Assignments" -msgstr "Gruppenzuweisung" - -#: netbox/netbox/navigation/menu.py:276 +#: netbox/netbox/navigation/menu.py:282 msgid "Circuit Terminations" msgstr "Transportnetzabschlusspunkt" -#: netbox/netbox/navigation/menu.py:280 netbox/netbox/navigation/menu.py:282 +#: netbox/netbox/navigation/menu.py:286 netbox/netbox/navigation/menu.py:288 +#: netbox/templates/circuits/providernetwork.html:55 +msgid "Virtual Circuits" +msgstr "Virtuelle Verbindungen" + +#: netbox/netbox/navigation/menu.py:289 +msgid "Virtual Circuit Types" +msgstr "Virtuelle Verbindungstypen" + +#: netbox/netbox/navigation/menu.py:290 +msgid "Virtual Circuit Terminations" +msgstr "Virtuelle Verbindungsabschlüsse" + +#: netbox/netbox/navigation/menu.py:296 +msgid "Circuit Groups" +msgstr "Transportnetzgruppe" + +#: netbox/netbox/navigation/menu.py:297 +#: netbox/templates/circuits/circuit.html:76 +#: netbox/templates/circuits/virtualcircuit.html:69 +msgid "Group Assignments" +msgstr "Gruppenzuweisung" + +#: netbox/netbox/navigation/menu.py:301 netbox/netbox/navigation/menu.py:303 msgid "Providers" msgstr "Provider" -#: netbox/netbox/navigation/menu.py:283 +#: netbox/netbox/navigation/menu.py:304 #: netbox/templates/circuits/provider.html:51 msgid "Provider Accounts" msgstr "Providerkonten" -#: netbox/netbox/navigation/menu.py:284 +#: netbox/netbox/navigation/menu.py:305 msgid "Provider Networks" msgstr "Provider Netzwerke" -#: netbox/netbox/navigation/menu.py:298 +#: netbox/netbox/navigation/menu.py:319 msgid "Power Panels" msgstr "Stromverteiler" -#: netbox/netbox/navigation/menu.py:309 +#: netbox/netbox/navigation/menu.py:330 msgid "Configurations" msgstr "Konfigurationen" -#: netbox/netbox/navigation/menu.py:311 +#: netbox/netbox/navigation/menu.py:332 msgid "Config Contexts" msgstr "Konfigurationsvorlage" -#: netbox/netbox/navigation/menu.py:312 +#: netbox/netbox/navigation/menu.py:333 msgid "Config Templates" msgstr "Config-Vorlagen" -#: netbox/netbox/navigation/menu.py:319 netbox/netbox/navigation/menu.py:323 +#: netbox/netbox/navigation/menu.py:340 netbox/netbox/navigation/menu.py:344 msgid "Customization" msgstr "Personalisierung" -#: netbox/netbox/navigation/menu.py:325 +#: netbox/netbox/navigation/menu.py:346 #: netbox/templates/dcim/device_edit.html:103 #: netbox/templates/dcim/htmx/cable_edit.html:81 #: netbox/templates/dcim/virtualchassis_add.html:31 @@ -11321,96 +11917,96 @@ msgstr "Personalisierung" #: netbox/templates/htmx/form.html:19 netbox/templates/inc/filter_list.html:30 #: netbox/templates/inc/panels/custom_fields.html:7 #: netbox/templates/ipam/ipaddress_bulk_add.html:35 -#: netbox/templates/ipam/vlan_edit.html:59 +#: netbox/templates/ipam/vlan_edit.html:67 msgid "Custom Fields" msgstr "Benutzerdefinierte Felder" -#: netbox/netbox/navigation/menu.py:326 +#: netbox/netbox/navigation/menu.py:347 msgid "Custom Field Choices" msgstr "Benutzerdefinierte Feldoptionen" -#: netbox/netbox/navigation/menu.py:327 +#: netbox/netbox/navigation/menu.py:348 msgid "Custom Links" msgstr "Benutzerdefinierte Links" -#: netbox/netbox/navigation/menu.py:328 +#: netbox/netbox/navigation/menu.py:349 msgid "Export Templates" msgstr "Exportvorlagen" -#: netbox/netbox/navigation/menu.py:329 +#: netbox/netbox/navigation/menu.py:350 msgid "Saved Filters" msgstr "Gespeicherte Filter" -#: netbox/netbox/navigation/menu.py:331 +#: netbox/netbox/navigation/menu.py:352 msgid "Image Attachments" msgstr "Bildanhänge" -#: netbox/netbox/navigation/menu.py:349 +#: netbox/netbox/navigation/menu.py:370 msgid "Operations" msgstr "Operationen" -#: netbox/netbox/navigation/menu.py:353 +#: netbox/netbox/navigation/menu.py:374 msgid "Integrations" msgstr "Integrationen" -#: netbox/netbox/navigation/menu.py:355 +#: netbox/netbox/navigation/menu.py:376 msgid "Data Sources" msgstr "Datenquellen" -#: netbox/netbox/navigation/menu.py:356 +#: netbox/netbox/navigation/menu.py:377 msgid "Event Rules" msgstr "Ereignisregeln" -#: netbox/netbox/navigation/menu.py:357 +#: netbox/netbox/navigation/menu.py:378 msgid "Webhooks" msgstr "Webhooks" -#: netbox/netbox/navigation/menu.py:361 netbox/netbox/navigation/menu.py:365 -#: netbox/netbox/views/generic/feature_views.py:153 +#: netbox/netbox/navigation/menu.py:382 netbox/netbox/navigation/menu.py:386 +#: netbox/netbox/views/generic/feature_views.py:158 #: netbox/templates/extras/report/base.html:37 #: netbox/templates/extras/script/base.html:36 msgid "Jobs" msgstr "Jobs" -#: netbox/netbox/navigation/menu.py:371 +#: netbox/netbox/navigation/menu.py:392 msgid "Logging" msgstr "Protokollierung" -#: netbox/netbox/navigation/menu.py:373 +#: netbox/netbox/navigation/menu.py:394 msgid "Notification Groups" msgstr "Benachrichtigungsgruppen" -#: netbox/netbox/navigation/menu.py:374 +#: netbox/netbox/navigation/menu.py:395 msgid "Journal Entries" msgstr "Journaleinträge" -#: netbox/netbox/navigation/menu.py:375 +#: netbox/netbox/navigation/menu.py:396 #: netbox/templates/core/objectchange.html:9 #: netbox/templates/core/objectchange_list.html:4 msgid "Change Log" msgstr "Änderungsprotokoll" -#: netbox/netbox/navigation/menu.py:382 netbox/templates/inc/user_menu.html:29 +#: netbox/netbox/navigation/menu.py:403 netbox/templates/inc/user_menu.html:29 msgid "Admin" msgstr "Admin" -#: netbox/netbox/navigation/menu.py:430 netbox/templates/account/base.html:27 -#: netbox/templates/inc/user_menu.html:57 +#: netbox/netbox/navigation/menu.py:451 netbox/templates/account/base.html:27 +#: netbox/templates/inc/user_menu.html:52 msgid "API Tokens" msgstr "API-Token" -#: netbox/netbox/navigation/menu.py:437 netbox/users/forms/model_forms.py:187 +#: netbox/netbox/navigation/menu.py:458 netbox/users/forms/model_forms.py:187 #: netbox/users/forms/model_forms.py:195 netbox/users/forms/model_forms.py:242 #: netbox/users/forms/model_forms.py:249 msgid "Permissions" msgstr "Berechtigungen" -#: netbox/netbox/navigation/menu.py:445 netbox/netbox/navigation/menu.py:449 +#: netbox/netbox/navigation/menu.py:466 netbox/netbox/navigation/menu.py:470 #: netbox/templates/core/system.html:7 msgid "System" msgstr "System" -#: netbox/netbox/navigation/menu.py:454 netbox/netbox/navigation/menu.py:502 +#: netbox/netbox/navigation/menu.py:475 netbox/netbox/navigation/menu.py:523 #: netbox/templates/500.html:35 netbox/templates/account/preferences.html:22 #: netbox/templates/core/plugin.html:13 #: netbox/templates/core/plugin_list.html:7 @@ -11418,31 +12014,31 @@ msgstr "System" msgid "Plugins" msgstr "Plugins" -#: netbox/netbox/navigation/menu.py:459 +#: netbox/netbox/navigation/menu.py:480 msgid "Configuration History" msgstr "Konfigurationsverlauf" -#: netbox/netbox/navigation/menu.py:465 netbox/templates/core/rq_task.html:8 +#: netbox/netbox/navigation/menu.py:486 netbox/templates/core/rq_task.html:8 #: netbox/templates/core/rq_task_list.html:22 msgid "Background Tasks" msgstr "Hintergrundaufgaben" -#: netbox/netbox/plugins/navigation.py:47 -#: netbox/netbox/plugins/navigation.py:69 +#: netbox/netbox/plugins/navigation.py:48 +#: netbox/netbox/plugins/navigation.py:70 msgid "Permissions must be passed as a tuple or list." msgstr "Berechtigungen müssen als Tupel oder Liste übergeben werden." -#: netbox/netbox/plugins/navigation.py:51 +#: netbox/netbox/plugins/navigation.py:52 msgid "Buttons must be passed as a tuple or list." msgstr "Schaltflächen müssen als Tupel oder Liste übergeben werden." -#: netbox/netbox/plugins/navigation.py:73 +#: netbox/netbox/plugins/navigation.py:74 msgid "Button color must be a choice within ButtonColorChoices." msgstr "" "Die Farbe der Schaltfläche muss innerhalb von ButtonColorChoices ausgewählt " "werden." -#: netbox/netbox/plugins/registration.py:25 +#: netbox/netbox/plugins/registration.py:26 #, python-brace-format msgid "" "PluginTemplateExtension class {template_extension} was passed as an " @@ -11451,7 +12047,7 @@ msgstr "" "PluginTemplateExtension-Klasse {template_extension} wurde als Instanz " "übergeben!" -#: netbox/netbox/plugins/registration.py:31 +#: netbox/netbox/plugins/registration.py:32 #, python-brace-format msgid "" "{template_extension} is not a subclass of " @@ -11460,17 +12056,17 @@ msgstr "" "{template_extension} ist keine Unterklasse von " "NetBox.Plugins.PluginTemplateExtension!" -#: netbox/netbox/plugins/registration.py:51 +#: netbox/netbox/plugins/registration.py:57 #, python-brace-format msgid "{item} must be an instance of netbox.plugins.PluginMenuItem" msgstr "{item} muss eine Instanz von NetBox.Plugins.PluginMenuItem sein" -#: netbox/netbox/plugins/registration.py:62 +#: netbox/netbox/plugins/registration.py:68 #, python-brace-format msgid "{menu_link} must be an instance of netbox.plugins.PluginMenuItem" msgstr "{menu_link} muss eine Instanz von NetBox.Plugins.PluginMenuItem sein" -#: netbox/netbox/plugins/registration.py:67 +#: netbox/netbox/plugins/registration.py:73 #, python-brace-format msgid "{button} must be an instance of netbox.plugins.PluginMenuButton" msgstr "{button} muss eine Instanz von NetBox.Plugins.PluginMenuButton sein" @@ -11558,93 +12154,93 @@ msgstr "" msgid "Cannot delete stores from registry" msgstr "Stores können nicht aus der Registrierung gelöscht werden" -#: netbox/netbox/settings.py:760 +#: netbox/netbox/settings.py:752 msgid "Czech" msgstr "Tschechisch" -#: netbox/netbox/settings.py:761 +#: netbox/netbox/settings.py:753 msgid "Danish" msgstr "Dänisch" -#: netbox/netbox/settings.py:762 +#: netbox/netbox/settings.py:754 msgid "German" msgstr "Deutsch" -#: netbox/netbox/settings.py:763 +#: netbox/netbox/settings.py:755 msgid "English" msgstr "Englisch" -#: netbox/netbox/settings.py:764 +#: netbox/netbox/settings.py:756 msgid "Spanish" msgstr "Spanisch" -#: netbox/netbox/settings.py:765 +#: netbox/netbox/settings.py:757 msgid "French" msgstr "Französisch" -#: netbox/netbox/settings.py:766 +#: netbox/netbox/settings.py:758 msgid "Italian" msgstr "Italenisch" -#: netbox/netbox/settings.py:767 +#: netbox/netbox/settings.py:759 msgid "Japanese" msgstr "Japanisch" -#: netbox/netbox/settings.py:768 +#: netbox/netbox/settings.py:760 msgid "Dutch" msgstr "Niederländisch" -#: netbox/netbox/settings.py:769 +#: netbox/netbox/settings.py:761 msgid "Polish" msgstr "Polnisch" -#: netbox/netbox/settings.py:770 +#: netbox/netbox/settings.py:762 msgid "Portuguese" msgstr "Portugiesisch" -#: netbox/netbox/settings.py:771 +#: netbox/netbox/settings.py:763 msgid "Russian" msgstr "Russisch" -#: netbox/netbox/settings.py:772 +#: netbox/netbox/settings.py:764 msgid "Turkish" msgstr "Türkisch" -#: netbox/netbox/settings.py:773 +#: netbox/netbox/settings.py:765 msgid "Ukrainian" msgstr "Ukrainisch" -#: netbox/netbox/settings.py:774 +#: netbox/netbox/settings.py:766 msgid "Chinese" msgstr "Chinesisch" -#: netbox/netbox/tables/columns.py:176 +#: netbox/netbox/tables/columns.py:177 msgid "Select all" msgstr "Alles auswählen" -#: netbox/netbox/tables/columns.py:189 +#: netbox/netbox/tables/columns.py:190 msgid "Toggle all" msgstr "Alles umschalten" -#: netbox/netbox/tables/columns.py:300 +#: netbox/netbox/tables/columns.py:302 msgid "Toggle Dropdown" msgstr "Dropdown umschalten" -#: netbox/netbox/tables/columns.py:572 netbox/templates/core/job.html:53 +#: netbox/netbox/tables/columns.py:575 netbox/templates/core/job.html:53 msgid "Error" msgstr "Fehler" -#: netbox/netbox/tables/tables.py:58 +#: netbox/netbox/tables/tables.py:59 #, python-brace-format msgid "No {model_name} found" msgstr "Kein {model_name} gefunden" -#: netbox/netbox/tables/tables.py:249 +#: netbox/netbox/tables/tables.py:252 #: netbox/templates/generic/bulk_import.html:117 msgid "Field" msgstr "Feld" -#: netbox/netbox/tables/tables.py:252 +#: netbox/netbox/tables/tables.py:255 msgid "Value" msgstr "Wert" @@ -11666,19 +12262,19 @@ msgstr "" msgid "Row {i}: Object with ID {id} does not exist" msgstr "Reihe {i}: Objekt mit ID {id} existiert nicht" -#: netbox/netbox/views/generic/bulk_views.py:709 -#: netbox/netbox/views/generic/bulk_views.py:910 -#: netbox/netbox/views/generic/bulk_views.py:958 +#: netbox/netbox/views/generic/bulk_views.py:703 +#: netbox/netbox/views/generic/bulk_views.py:904 +#: netbox/netbox/views/generic/bulk_views.py:952 #, python-brace-format msgid "No {object_type} were selected." msgstr "Kein {object_type}ausgewählt" -#: netbox/netbox/views/generic/bulk_views.py:788 +#: netbox/netbox/views/generic/bulk_views.py:782 #, python-brace-format msgid "Renamed {count} {object_type}" msgstr "Umbenannt {count} {object_type}" -#: netbox/netbox/views/generic/bulk_views.py:888 +#: netbox/netbox/views/generic/bulk_views.py:882 #, python-brace-format msgid "Deleted {count} {object_type}" msgstr "Gelöscht {count} {object_type}" @@ -11691,16 +12287,16 @@ msgstr "Changelog" msgid "Journal" msgstr "Journal" -#: netbox/netbox/views/generic/feature_views.py:207 +#: netbox/netbox/views/generic/feature_views.py:212 msgid "Unable to synchronize data: No data file set." msgstr "Synchronisation nicht möglich: Keine Datei ausgewählt bzw. gesetzt." -#: netbox/netbox/views/generic/feature_views.py:211 +#: netbox/netbox/views/generic/feature_views.py:216 #, python-brace-format msgid "Synchronized data for {object_type} {object}." msgstr "Daten synchronisiert für {object_type} {object}." -#: netbox/netbox/views/generic/feature_views.py:236 +#: netbox/netbox/views/generic/feature_views.py:241 #, python-brace-format msgid "Synced {count} {object_type}" msgstr "Synchronisiert {count} {object_type}" @@ -11777,9 +12373,9 @@ msgstr "auf GitHub" msgid "Home Page" msgstr "Startseite" -#: netbox/templates/account/base.html:7 netbox/templates/inc/user_menu.html:45 +#: netbox/templates/account/base.html:7 netbox/templates/inc/user_menu.html:40 #: netbox/vpn/forms/bulk_edit.py:255 netbox/vpn/forms/filtersets.py:189 -#: netbox/vpn/forms/model_forms.py:379 +#: netbox/vpn/forms/model_forms.py:382 msgid "Profile" msgstr "Profil" @@ -11791,12 +12387,12 @@ msgstr "Benachrichtigungen" #: netbox/templates/account/base.html:16 #: netbox/templates/account/subscriptions.html:7 -#: netbox/templates/inc/user_menu.html:51 +#: netbox/templates/inc/user_menu.html:46 msgid "Subscriptions" msgstr "Abos" #: netbox/templates/account/base.html:19 -#: netbox/templates/inc/user_menu.html:54 +#: netbox/templates/inc/user_menu.html:49 msgid "Preferences" msgstr "Einstellungen" @@ -11824,6 +12420,7 @@ msgstr "Passwort ändern" #: netbox/templates/generic/object_edit.html:72 #: netbox/templates/htmx/delete_form.html:53 #: netbox/templates/htmx/delete_form.html:55 +#: netbox/templates/htmx/quick_add.html:21 #: netbox/templates/ipam/ipaddress_assign.html:28 #: netbox/templates/virtualization/cluster_add_devices.html:30 msgid "Cancel" @@ -11922,7 +12519,7 @@ msgstr "Zugewiesene Gruppen" #: netbox/templates/core/objectchange.html:142 #: netbox/templates/dcim/devicebay.html:59 #: netbox/templates/dcim/inc/panels/inventory_items.html:45 -#: netbox/templates/dcim/interface.html:296 +#: netbox/templates/dcim/interface.html:353 #: netbox/templates/dcim/modulebay.html:80 #: netbox/templates/extras/configcontext.html:70 #: netbox/templates/extras/eventrule.html:66 @@ -11931,6 +12528,7 @@ msgstr "Zugewiesene Gruppen" #: netbox/templates/extras/webhook.html:75 #: netbox/templates/inc/panel_table.html:13 #: netbox/templates/inc/panels/comments.html:10 +#: netbox/templates/inc/panels/related_objects.html:23 #: netbox/templates/ipam/inc/panels/fhrp_groups.html:56 #: netbox/templates/users/group.html:34 netbox/templates/users/group.html:44 #: netbox/templates/users/objectpermission.html:77 @@ -11968,7 +12566,7 @@ msgstr "Zuletzt benutzt" msgid "Add a Token" msgstr "Einen API-Token hinzufügen" -#: netbox/templates/base/base.html:22 netbox/templates/home.html:27 +#: netbox/templates/base/base.html:23 netbox/templates/home.html:27 msgid "Home" msgstr "Home" @@ -12010,15 +12608,16 @@ msgstr "Quellcode" msgid "Community" msgstr "Community" -#: netbox/templates/circuits/circuit.html:47 +#: netbox/templates/circuits/circuit.html:57 msgid "Install Date" msgstr "Datum der Installation" -#: netbox/templates/circuits/circuit.html:51 +#: netbox/templates/circuits/circuit.html:61 msgid "Termination Date" msgstr "Kündigungsdatum" -#: netbox/templates/circuits/circuit.html:70 +#: netbox/templates/circuits/circuit.html:80 +#: netbox/templates/circuits/virtualcircuit.html:73 #: netbox/templates/ipam/inc/panels/fhrp_groups.html:15 msgid "Assign Group" msgstr "Gruppe zuweisen" @@ -12066,7 +12665,7 @@ msgid "Add" msgstr "Hinzufügen" #: netbox/templates/circuits/inc/circuit_termination.html:15 -#: netbox/templates/circuits/inc/circuit_termination_fields.html:36 +#: netbox/templates/circuits/inc/circuit_termination_fields.html:37 #: netbox/templates/dcim/inc/panels/inventory_items.html:32 #: netbox/templates/dcim/powerpanel.html:56 #: netbox/templates/extras/script_list.html:30 @@ -12081,35 +12680,39 @@ msgstr "Bearbeiten" msgid "Swap" msgstr "Tauschen" -#: netbox/templates/circuits/inc/circuit_termination_fields.html:19 +#: netbox/templates/circuits/inc/circuit_termination_fields.html:5 +msgid "Termination point" +msgstr "Endpunkt" + +#: netbox/templates/circuits/inc/circuit_termination_fields.html:20 #: netbox/templates/dcim/consoleport.html:59 #: netbox/templates/dcim/consoleserverport.html:60 #: netbox/templates/dcim/powerfeed.html:114 msgid "Marked as connected" msgstr "Als verbunden markiert" -#: netbox/templates/circuits/inc/circuit_termination_fields.html:21 +#: netbox/templates/circuits/inc/circuit_termination_fields.html:22 msgid "to" msgstr "zu" -#: netbox/templates/circuits/inc/circuit_termination_fields.html:31 #: netbox/templates/circuits/inc/circuit_termination_fields.html:32 +#: netbox/templates/circuits/inc/circuit_termination_fields.html:33 #: netbox/templates/dcim/frontport.html:80 #: netbox/templates/dcim/inc/connection_endpoints.html:7 -#: netbox/templates/dcim/interface.html:154 +#: netbox/templates/dcim/interface.html:211 #: netbox/templates/dcim/rearport.html:76 msgid "Trace" msgstr "Trace" -#: netbox/templates/circuits/inc/circuit_termination_fields.html:35 +#: netbox/templates/circuits/inc/circuit_termination_fields.html:36 msgid "Edit cable" msgstr "Kabel bearbeiten" -#: netbox/templates/circuits/inc/circuit_termination_fields.html:40 +#: netbox/templates/circuits/inc/circuit_termination_fields.html:41 msgid "Remove cable" msgstr "Kabel entfernen" -#: netbox/templates/circuits/inc/circuit_termination_fields.html:41 +#: netbox/templates/circuits/inc/circuit_termination_fields.html:42 #: netbox/templates/dcim/bulk_disconnect.html:5 #: netbox/templates/dcim/device/consoleports.html:12 #: netbox/templates/dcim/device/consoleserverports.html:12 @@ -12122,33 +12725,33 @@ msgstr "Kabel entfernen" msgid "Disconnect" msgstr "Trennen" -#: netbox/templates/circuits/inc/circuit_termination_fields.html:48 +#: netbox/templates/circuits/inc/circuit_termination_fields.html:49 #: netbox/templates/dcim/consoleport.html:69 #: netbox/templates/dcim/consoleserverport.html:70 #: netbox/templates/dcim/frontport.html:102 -#: netbox/templates/dcim/interface.html:180 -#: netbox/templates/dcim/interface.html:200 +#: netbox/templates/dcim/interface.html:237 +#: netbox/templates/dcim/interface.html:257 #: netbox/templates/dcim/powerfeed.html:127 -#: netbox/templates/dcim/poweroutlet.html:71 -#: netbox/templates/dcim/poweroutlet.html:72 +#: netbox/templates/dcim/poweroutlet.html:81 +#: netbox/templates/dcim/poweroutlet.html:82 #: netbox/templates/dcim/powerport.html:73 #: netbox/templates/dcim/rearport.html:98 msgid "Connect" msgstr "Verbinden" -#: netbox/templates/circuits/inc/circuit_termination_fields.html:70 +#: netbox/templates/circuits/inc/circuit_termination_fields.html:65 msgid "Downstream" msgstr "Downstream" -#: netbox/templates/circuits/inc/circuit_termination_fields.html:71 +#: netbox/templates/circuits/inc/circuit_termination_fields.html:66 msgid "Upstream" msgstr "Upstream" -#: netbox/templates/circuits/inc/circuit_termination_fields.html:80 +#: netbox/templates/circuits/inc/circuit_termination_fields.html:75 msgid "Cross-Connect" msgstr "Cross-Connect" -#: netbox/templates/circuits/inc/circuit_termination_fields.html:84 +#: netbox/templates/circuits/inc/circuit_termination_fields.html:79 msgid "Patch Panel/Port" msgstr "Patchpanel/Anschluss" @@ -12160,6 +12763,27 @@ msgstr "Transportnetz hinzufügen" msgid "Provider Account" msgstr "Providerkonto" +#: netbox/templates/circuits/providernetwork.html:59 +msgid "Add a Virtual Circuit" +msgstr "Einen virtuellen Verbindung hinzufügen" + +#: netbox/templates/circuits/virtualcircuit.html:91 +#: netbox/templates/vpn/tunnel.html:9 +msgid "Add Termination" +msgstr "Abschlusspunkt hinzufügen" + +#: netbox/templates/circuits/virtualcircuittermination.html:23 +msgid "Virtual Circuit Termination" +msgstr "Virtueller Verbindungsabschluß" + +#: netbox/templates/circuits/virtualcircuittype.html:10 +msgid "Add Virtual Circuit" +msgstr "Virtuellen Verbindung hinzufügen" + +#: netbox/templates/circuits/virtualcircuittype.html:19 +msgid "Virtual Circuit Type" +msgstr "Virtueller Verbindungstyp" + #: netbox/templates/core/configrevision.html:35 msgid "Configuration Data" msgstr "Daten zur Konfiguration" @@ -12193,7 +12817,7 @@ msgstr "Geändert" #: netbox/templates/core/datafile.html:42 #: netbox/templates/ipam/iprange.html:25 #: netbox/templates/virtualization/virtualdisk.html:29 -#: netbox/virtualization/tables/virtualmachines.py:198 +#: netbox/virtualization/tables/virtualmachines.py:169 msgid "Size" msgstr "Größe" @@ -12637,8 +13261,8 @@ msgstr "Ausgewählte umbenennen" #: netbox/templates/dcim/consoleport.html:65 #: netbox/templates/dcim/consoleserverport.html:66 #: netbox/templates/dcim/frontport.html:98 -#: netbox/templates/dcim/interface.html:176 -#: netbox/templates/dcim/poweroutlet.html:69 +#: netbox/templates/dcim/interface.html:233 +#: netbox/templates/dcim/poweroutlet.html:79 #: netbox/templates/dcim/powerport.html:69 msgid "Not Connected" msgstr "Nicht verbunden" @@ -12661,7 +13285,7 @@ msgid "Map" msgstr "Karte" #: netbox/templates/dcim/device.html:108 -#: netbox/templates/dcim/inventoryitem.html:56 +#: netbox/templates/dcim/inventoryitem.html:60 #: netbox/templates/dcim/module.html:81 #: netbox/templates/dcim/modulebay.html:74 netbox/templates/dcim/rack.html:61 msgid "Asset Tag" @@ -12677,7 +13301,7 @@ msgstr "VDC erstellen" #: netbox/templates/dcim/device.html:175 #: netbox/templates/dcim/device_edit.html:64 -#: netbox/virtualization/forms/model_forms.py:223 +#: netbox/virtualization/forms/model_forms.py:230 msgid "Management" msgstr "Management" @@ -12794,35 +13418,6 @@ msgstr "Stromanschluss hinzufügen" msgid "Add Rear Ports" msgstr "Rückanschlüsse hinzufügen" -#: netbox/templates/dcim/device/render_config.html:5 -#: netbox/templates/virtualization/virtualmachine/render_config.html:5 -msgid "Config" -msgstr "Konfig" - -#: netbox/templates/dcim/device/render_config.html:35 -#: netbox/templates/virtualization/virtualmachine/render_config.html:35 -msgid "Context Data" -msgstr "Kontextdaten" - -#: netbox/templates/dcim/device/render_config.html:55 -#: netbox/templates/virtualization/virtualmachine/render_config.html:55 -msgid "Rendered Config" -msgstr "Gerenderte Konfiguration" - -#: netbox/templates/dcim/device/render_config.html:57 -#: netbox/templates/virtualization/virtualmachine/render_config.html:57 -msgid "Download" -msgstr "Herunterladen" - -#: netbox/templates/dcim/device/render_config.html:64 -#: netbox/templates/virtualization/virtualmachine/render_config.html:64 -msgid "Error rendering template" -msgstr "Fehler beim Rendern der Vorlage" - -#: netbox/templates/dcim/device/render_config.html:70 -msgid "No configuration template has been assigned for this device." -msgstr "" - #: netbox/templates/dcim/device_edit.html:44 msgid "Parent Bay" msgstr "Übergeordneter Einsatz" @@ -12889,12 +13484,12 @@ msgid "VM Role" msgstr "VM-Rolle" #: netbox/templates/dcim/devicetype.html:18 -#: netbox/templates/dcim/moduletype.html:29 +#: netbox/templates/dcim/moduletype.html:31 msgid "Model Name" msgstr "Name des Modells" #: netbox/templates/dcim/devicetype.html:25 -#: netbox/templates/dcim/moduletype.html:33 +#: netbox/templates/dcim/moduletype.html:35 msgid "Part Number" msgstr "Teilnummer" @@ -12919,8 +13514,8 @@ msgid "Rear Port Position" msgstr "Position des Rück-Anschlusses" #: netbox/templates/dcim/frontport.html:72 -#: netbox/templates/dcim/interface.html:144 -#: netbox/templates/dcim/poweroutlet.html:63 +#: netbox/templates/dcim/interface.html:201 +#: netbox/templates/dcim/poweroutlet.html:73 #: netbox/templates/dcim/powerport.html:63 #: netbox/templates/dcim/rearport.html:68 msgid "Marked as Connected" @@ -13020,77 +13615,79 @@ msgid "PoE Type" msgstr "PoE-Typ" #: netbox/templates/dcim/interface.html:81 -#: netbox/templates/virtualization/vminterface.html:63 +#: netbox/templates/virtualization/vminterface.html:55 +#: netbox/virtualization/forms/model_forms.py:395 msgid "802.1Q Mode" msgstr "802.1Q-Modus" -#: netbox/templates/dcim/interface.html:125 -#: netbox/templates/virtualization/vminterface.html:59 -msgid "MAC Address" -msgstr "MAC-Adresse" +#: netbox/templates/dcim/interface.html:156 +#: netbox/templates/virtualization/vminterface.html:88 +msgid "VLAN Translation" +msgstr "VLAN-Übersetzung" -#: netbox/templates/dcim/interface.html:151 +#: netbox/templates/dcim/interface.html:208 msgid "Wireless Link" msgstr "Funkverbindung" -#: netbox/templates/dcim/interface.html:218 netbox/vpn/choices.py:63 -msgid "Peer" -msgstr "Peer" - -#: netbox/templates/dcim/interface.html:230 +#: netbox/templates/dcim/interface.html:287 #: netbox/templates/wireless/inc/wirelesslink_interface.html:26 msgid "Channel" msgstr "Kanal" -#: netbox/templates/dcim/interface.html:239 +#: netbox/templates/dcim/interface.html:296 #: netbox/templates/wireless/inc/wirelesslink_interface.html:32 msgid "Channel Frequency" msgstr "Kanal-Frequenz" -#: netbox/templates/dcim/interface.html:242 -#: netbox/templates/dcim/interface.html:250 -#: netbox/templates/dcim/interface.html:261 -#: netbox/templates/dcim/interface.html:269 +#: netbox/templates/dcim/interface.html:299 +#: netbox/templates/dcim/interface.html:307 +#: netbox/templates/dcim/interface.html:318 +#: netbox/templates/dcim/interface.html:326 msgid "MHz" msgstr "MHz" -#: netbox/templates/dcim/interface.html:258 +#: netbox/templates/dcim/interface.html:315 #: netbox/templates/wireless/inc/wirelesslink_interface.html:42 msgid "Channel Width" msgstr "Kanal-Breite" -#: netbox/templates/dcim/interface.html:285 +#: netbox/templates/dcim/interface.html:342 #: netbox/templates/wireless/wirelesslan.html:14 #: netbox/templates/wireless/wirelesslink.html:21 -#: netbox/wireless/forms/bulk_edit.py:60 -#: netbox/wireless/forms/bulk_edit.py:102 -#: netbox/wireless/forms/filtersets.py:40 -#: netbox/wireless/forms/filtersets.py:80 netbox/wireless/models.py:82 -#: netbox/wireless/models.py:156 netbox/wireless/tables/wirelesslan.py:44 +#: netbox/wireless/forms/bulk_edit.py:62 +#: netbox/wireless/forms/bulk_edit.py:105 +#: netbox/wireless/forms/filtersets.py:43 +#: netbox/wireless/forms/filtersets.py:108 netbox/wireless/models.py:82 +#: netbox/wireless/models.py:153 netbox/wireless/tables/wirelesslan.py:44 msgid "SSID" msgstr "SSID" -#: netbox/templates/dcim/interface.html:305 +#: netbox/templates/dcim/interface.html:362 msgid "LAG Members" msgstr "LAG-Mitglieder" -#: netbox/templates/dcim/interface.html:323 +#: netbox/templates/dcim/interface.html:380 msgid "No member interfaces" msgstr "Keine Mitgliederschnittstellen" -#: netbox/templates/dcim/interface.html:343 +#: netbox/templates/dcim/interface.html:400 #: netbox/templates/ipam/fhrpgroup.html:73 #: netbox/templates/ipam/iprange/ip_addresses.html:7 #: netbox/templates/ipam/prefix/ip_addresses.html:7 -#: netbox/templates/virtualization/vminterface.html:89 +#: netbox/templates/virtualization/vminterface.html:105 msgid "Add IP Address" msgstr "IP-Adresse hinzufügen" +#: netbox/templates/dcim/interface.html:417 +#: netbox/templates/virtualization/vminterface.html:123 +msgid "Add MAC Address" +msgstr "MAC-Adresse hinzufügen" + #: netbox/templates/dcim/inventoryitem.html:24 msgid "Parent Item" msgstr "Übergeordneter Artikel" -#: netbox/templates/dcim/inventoryitem.html:48 +#: netbox/templates/dcim/inventoryitem.html:52 msgid "Part ID" msgstr "Teile-ID" @@ -13110,6 +13707,10 @@ msgstr "Einen Lokation hinzufügen" msgid "Add a Device" msgstr "Ein Gerät hinzufügen" +#: netbox/templates/dcim/macaddress.html:36 +msgid "Primary for interface" +msgstr "Primär für diese Schnittstelle" + #: netbox/templates/dcim/manufacturer.html:16 msgid "Add Device Type" msgstr "Gerätetyp hinzufügen" @@ -13140,7 +13741,7 @@ msgctxt "Abbreviation for amperes" msgid "A" msgstr "A" -#: netbox/templates/dcim/poweroutlet.html:48 +#: netbox/templates/dcim/poweroutlet.html:58 msgid "Feed Leg" msgstr "Phasenlage" @@ -13574,11 +14175,19 @@ msgstr "Inhalt kann nicht geladen werden. Ungültiger Name des Views" msgid "No content found" msgstr "Kein Inhalt gefunden" -#: netbox/templates/extras/dashboard/widgets/rssfeed.html:18 +#: netbox/templates/extras/dashboard/widgets/rssfeed.html:17 +msgid "" +"This RSS feed requires an external connection. Check the ISOLATED_DEPLOYMENT" +" setting." +msgstr "" +"Für diesen RSS-Feed ist eine externe Verbindung erforderlich. Überprüfen Sie" +" die Einstellung ISOLATED_DEPLOYMENT." + +#: netbox/templates/extras/dashboard/widgets/rssfeed.html:22 msgid "There was a problem fetching the RSS feed" msgstr "Beim Abrufen des RSS-Feeds ist ein Problem aufgetreten" -#: netbox/templates/extras/dashboard/widgets/rssfeed.html:21 +#: netbox/templates/extras/dashboard/widgets/rssfeed.html:25 msgid "HTTP" msgstr "HTTP" @@ -13648,6 +14257,30 @@ msgstr "Quellkontexte" msgid "New Journal Entry" msgstr "Neuer Journaleintrag" +#: netbox/templates/extras/object_render_config.html:6 +msgid "Config" +msgstr "Konfig" + +#: netbox/templates/extras/object_render_config.html:36 +msgid "Context Data" +msgstr "Kontextdaten" + +#: netbox/templates/extras/object_render_config.html:56 +msgid "Rendered Config" +msgstr "Gerenderte Konfiguration" + +#: netbox/templates/extras/object_render_config.html:58 +msgid "Download" +msgstr "Herunterladen" + +#: netbox/templates/extras/object_render_config.html:65 +msgid "Error rendering template" +msgstr "Fehler beim Rendern der Vorlage" + +#: netbox/templates/extras/object_render_config.html:71 +msgid "No configuration template has been assigned." +msgstr "Es wurde keine Konfigurationsvorlage zugewiesen." + #: netbox/templates/extras/report/base.html:30 msgid "Report" msgstr "Bericht" @@ -13735,7 +14368,7 @@ msgstr "Irgendein" msgid "Tagged Item Types" msgstr "Artikeltypen mit Tags" -#: netbox/templates/extras/tag.html:81 +#: netbox/templates/extras/tag.html:82 msgid "Tagged Objects" msgstr "Getaggte Objekte" @@ -14019,6 +14652,21 @@ msgstr "Alle Benachrichtigungen" msgid "Select" msgstr "Auswählen" +#: netbox/templates/htmx/quick_add.html:7 +msgid "Quick Add" +msgstr "Schnelles Hinzufügen" + +#: netbox/templates/htmx/quick_add_created.html:18 +#, python-format +msgid "" +"\n" +" Created %(object_type)s %(object)s\n" +" " +msgstr "" +"\n" +" Erstellt %(object_type)s %(object)s\n" +" " + #: netbox/templates/inc/filter_list.html:43 #: netbox/utilities/templates/helpers/table_config_form.html:39 msgid "Reset" @@ -14090,15 +14738,11 @@ msgstr "Reihenfolge löschen" msgid "Help center" msgstr "Hilfecenter" -#: netbox/templates/inc/user_menu.html:41 -msgid "Django Admin" -msgstr "" - -#: netbox/templates/inc/user_menu.html:61 +#: netbox/templates/inc/user_menu.html:56 msgid "Log Out" msgstr "Abmelden" -#: netbox/templates/inc/user_menu.html:68 netbox/templates/login.html:38 +#: netbox/templates/inc/user_menu.html:63 netbox/templates/login.html:38 msgid "Log In" msgstr "Anmelden" @@ -14195,43 +14839,43 @@ msgstr "Startadresse" msgid "Ending Address" msgstr "Endadresse" -#: netbox/templates/ipam/iprange.html:33 netbox/templates/ipam/prefix.html:110 +#: netbox/templates/ipam/iprange.html:33 netbox/templates/ipam/prefix.html:106 msgid "Marked fully utilized" msgstr "Als voll belegt markiert" -#: netbox/templates/ipam/prefix.html:99 +#: netbox/templates/ipam/prefix.html:95 msgid "Addressing Details" msgstr "Angaben zur Adressierung" -#: netbox/templates/ipam/prefix.html:118 +#: netbox/templates/ipam/prefix.html:114 msgid "Child IPs" msgstr "untergeordnete IPs" -#: netbox/templates/ipam/prefix.html:126 +#: netbox/templates/ipam/prefix.html:122 msgid "Available IPs" msgstr "Verfügbare IPs" -#: netbox/templates/ipam/prefix.html:138 +#: netbox/templates/ipam/prefix.html:134 msgid "First available IP" msgstr "Erste verfügbare IP" -#: netbox/templates/ipam/prefix.html:179 +#: netbox/templates/ipam/prefix.html:175 msgid "Prefix Details" msgstr "Präfix-Details" -#: netbox/templates/ipam/prefix.html:185 +#: netbox/templates/ipam/prefix.html:181 msgid "Network Address" msgstr "Netzwerkadresse" -#: netbox/templates/ipam/prefix.html:189 +#: netbox/templates/ipam/prefix.html:185 msgid "Network Mask" msgstr "Netzwerkmaske" -#: netbox/templates/ipam/prefix.html:193 +#: netbox/templates/ipam/prefix.html:189 msgid "Wildcard Mask" msgstr "Wildcardmaske" -#: netbox/templates/ipam/prefix.html:197 +#: netbox/templates/ipam/prefix.html:193 msgid "Broadcast Address" msgstr "Broadcast-Adresse" @@ -14271,14 +14915,30 @@ msgstr "L2VPNs importieren" msgid "Exporting L2VPNs" msgstr "L2VPNs exportieren" -#: netbox/templates/ipam/vlan.html:88 +#: netbox/templates/ipam/vlan.html:66 +msgid "Q-in-Q Role" +msgstr "Q-in-Q-Rolle" + +#: netbox/templates/ipam/vlan.html:104 msgid "Add a Prefix" msgstr "Präfix hinzufügen" +#: netbox/templates/ipam/vlan.html:114 +msgid "Customer VLANs" +msgstr "Kunden-VLANs" + +#: netbox/templates/ipam/vlan.html:118 +msgid "Add a VLAN" +msgstr "Ein VLAN hinzufügen" + #: netbox/templates/ipam/vlangroup.html:18 msgid "Add VLAN" msgstr "VLAN hinzufügen" +#: netbox/templates/ipam/vlantranslationpolicy.html:51 +msgid "Add Rule" +msgstr "Regel hinzufügen" + #: netbox/templates/ipam/vrf.html:16 msgid "Route Distinguisher" msgstr "Routenunterscheidungsmerkmal" @@ -14357,7 +15017,7 @@ msgstr "" #: netbox/templates/tenancy/contact.html:18 netbox/tenancy/filtersets.py:147 #: netbox/tenancy/forms/bulk_edit.py:137 -#: netbox/tenancy/forms/filtersets.py:102 netbox/tenancy/forms/forms.py:56 +#: netbox/tenancy/forms/filtersets.py:102 netbox/tenancy/forms/forms.py:57 #: netbox/tenancy/forms/model_forms.py:106 #: netbox/tenancy/forms/model_forms.py:130 #: netbox/tenancy/tables/contacts.py:98 @@ -14375,7 +15035,7 @@ msgid "Phone" msgstr "Telefon" #: netbox/templates/tenancy/contactgroup.html:18 -#: netbox/tenancy/forms/forms.py:66 netbox/tenancy/forms/model_forms.py:75 +#: netbox/tenancy/forms/forms.py:67 netbox/tenancy/forms/model_forms.py:75 msgid "Contact Group" msgstr "Kontaktgruppe" @@ -14384,7 +15044,7 @@ msgid "Add Contact Group" msgstr "Kontaktgruppe hinzufügen" #: netbox/templates/tenancy/contactrole.html:15 -#: netbox/tenancy/filtersets.py:152 netbox/tenancy/forms/forms.py:61 +#: netbox/tenancy/filtersets.py:152 netbox/tenancy/forms/forms.py:62 #: netbox/tenancy/forms/model_forms.py:87 msgid "Contact Role" msgstr "Kontaktrolle" @@ -14398,8 +15058,8 @@ msgid "Add Tenant" msgstr "Mandant hinzufügen" #: netbox/templates/tenancy/tenantgroup.html:26 -#: netbox/tenancy/forms/model_forms.py:32 netbox/tenancy/tables/columns.py:51 -#: netbox/tenancy/tables/columns.py:61 +#: netbox/tenancy/forms/model_forms.py:32 netbox/tenancy/tables/columns.py:36 +#: netbox/tenancy/tables/columns.py:46 msgid "Tenant Group" msgstr "Mandantengruppe" @@ -14430,21 +15090,21 @@ msgstr "Einschränkungen" msgid "Assigned Users" msgstr "Zugewiesene Benutzer" -#: netbox/templates/virtualization/cluster.html:52 +#: netbox/templates/virtualization/cluster.html:56 msgid "Allocated Resources" msgstr "Zugewiesene Ressourcen" -#: netbox/templates/virtualization/cluster.html:55 +#: netbox/templates/virtualization/cluster.html:59 #: netbox/templates/virtualization/virtualmachine.html:125 msgid "Virtual CPUs" msgstr "Virtuelle CPUs" -#: netbox/templates/virtualization/cluster.html:59 +#: netbox/templates/virtualization/cluster.html:63 #: netbox/templates/virtualization/virtualmachine.html:129 msgid "Memory" msgstr "Arbeitsspeicher" -#: netbox/templates/virtualization/cluster.html:69 +#: netbox/templates/virtualization/cluster.html:73 #: netbox/templates/virtualization/virtualmachine.html:140 msgid "Disk Space" msgstr "Speicherplatz" @@ -14480,13 +15140,13 @@ msgid "Add Cluster" msgstr "Cluster hinzufügen" #: netbox/templates/virtualization/clustergroup.html:19 -#: netbox/virtualization/forms/model_forms.py:50 +#: netbox/virtualization/forms/model_forms.py:53 msgid "Cluster Group" msgstr "Clustergruppe" #: netbox/templates/virtualization/clustertype.html:19 #: netbox/templates/virtualization/virtualmachine.html:110 -#: netbox/virtualization/forms/model_forms.py:36 +#: netbox/virtualization/forms/model_forms.py:39 msgid "Cluster Type" msgstr "Cluster-Typ" @@ -14495,8 +15155,8 @@ msgid "Virtual Disk" msgstr "Virtuelle Festplatte" #: netbox/templates/virtualization/virtualmachine.html:122 -#: netbox/virtualization/forms/bulk_edit.py:190 -#: netbox/virtualization/forms/model_forms.py:224 +#: netbox/virtualization/forms/bulk_edit.py:172 +#: netbox/virtualization/forms/model_forms.py:231 msgid "Resources" msgstr "Ressourcen" @@ -14504,10 +15164,6 @@ msgstr "Ressourcen" msgid "Add Virtual Disk" msgstr "Virtuelles Laufwerk hinzufügen" -#: netbox/templates/virtualization/virtualmachine/render_config.html:70 -msgid "No configuration template has been assigned for this virtual machine." -msgstr "" - #: netbox/templates/vpn/ikepolicy.html:10 #: netbox/templates/vpn/ipsecprofile.html:33 netbox/vpn/tables/crypto.py:166 msgid "IKE Policy" @@ -14530,7 +15186,7 @@ msgstr "Secret anzeigen" #: netbox/templates/vpn/ipsecpolicy.html:45 #: netbox/templates/vpn/ipsecprofile.html:52 #: netbox/templates/vpn/ipsecprofile.html:77 -#: netbox/vpn/forms/model_forms.py:316 netbox/vpn/forms/model_forms.py:352 +#: netbox/vpn/forms/model_forms.py:317 netbox/vpn/forms/model_forms.py:354 #: netbox/vpn/tables/crypto.py:68 netbox/vpn/tables/crypto.py:134 msgid "Proposals" msgstr "Proposals" @@ -14576,12 +15232,12 @@ msgid "IPSec Policy" msgstr "IPSec-Richtlinie" #: netbox/templates/vpn/ipsecpolicy.html:21 netbox/vpn/forms/bulk_edit.py:210 -#: netbox/vpn/models/crypto.py:193 +#: netbox/vpn/models/crypto.py:191 msgid "PFS group" msgstr "PFS-Gruppe" #: netbox/templates/vpn/ipsecprofile.html:10 -#: netbox/vpn/forms/model_forms.py:54 +#: netbox/vpn/forms/model_forms.py:55 msgid "IPSec Profile" msgstr "IPSec-Profil" @@ -14607,10 +15263,6 @@ msgstr "L2VPN-Attribute" msgid "Add a Termination" msgstr "Abschlusspunkt hinzufügen" -#: netbox/templates/vpn/tunnel.html:9 -msgid "Add Termination" -msgstr "Abschlusspunkt hinzufügen" - #: netbox/templates/vpn/tunnel.html:37 netbox/vpn/forms/bulk_edit.py:49 #: netbox/vpn/forms/bulk_import.py:48 netbox/vpn/forms/filtersets.py:57 msgid "Encapsulation" @@ -14618,7 +15270,7 @@ msgstr "Verkapselung" #: netbox/templates/vpn/tunnel.html:41 netbox/vpn/forms/bulk_edit.py:55 #: netbox/vpn/forms/bulk_import.py:53 netbox/vpn/forms/filtersets.py:64 -#: netbox/vpn/models/crypto.py:250 netbox/vpn/tables/tunnels.py:51 +#: netbox/vpn/models/crypto.py:246 netbox/vpn/tables/tunnels.py:51 msgid "IPSec profile" msgstr "IPSec-Profil" @@ -14641,8 +15293,8 @@ msgid "Tunnel Termination" msgstr "Tunnelabschlusspunkt" #: netbox/templates/vpn/tunneltermination.html:35 -#: netbox/vpn/forms/bulk_import.py:107 netbox/vpn/forms/model_forms.py:102 -#: netbox/vpn/forms/model_forms.py:138 netbox/vpn/forms/model_forms.py:247 +#: netbox/vpn/forms/bulk_import.py:107 netbox/vpn/forms/model_forms.py:103 +#: netbox/vpn/forms/model_forms.py:139 netbox/vpn/forms/model_forms.py:248 #: netbox/vpn/tables/tunnels.py:101 msgid "Outside IP" msgstr "Öffentliche / Outside IP" @@ -14665,7 +15317,7 @@ msgctxt "Abbreviation for megahertz" msgid "MHz" msgstr "MHz" -#: netbox/templates/wireless/wirelesslan.html:57 +#: netbox/templates/wireless/wirelesslan.html:65 msgid "Attached Interfaces" msgstr "Angehängte Schnittstellen" @@ -14674,7 +15326,7 @@ msgid "Add Wireless LAN" msgstr "WLAN hinzufügen" #: netbox/templates/wireless/wirelesslangroup.html:26 -#: netbox/wireless/forms/model_forms.py:28 +#: netbox/wireless/forms/model_forms.py:29 msgid "Wireless LAN Group" msgstr "WLAN-Gruppe" @@ -14686,13 +15338,6 @@ msgstr "WLAN-Gruppe hinzufügen" msgid "Link Properties" msgstr "Link-Eigenschaften" -#: netbox/templates/wireless/wirelesslink.html:38 -#: netbox/wireless/forms/bulk_edit.py:129 -#: netbox/wireless/forms/filtersets.py:102 -#: netbox/wireless/forms/model_forms.py:165 -msgid "Distance" -msgstr "Entfernung" - #: netbox/tenancy/filtersets.py:28 msgid "Parent contact group (ID)" msgstr "Übergeordnete Kontaktgruppe (ID)" @@ -14763,47 +15408,47 @@ msgstr "Kontaktgruppe" msgid "contact groups" msgstr "Kontaktgruppen" -#: netbox/tenancy/models/contacts.py:48 +#: netbox/tenancy/models/contacts.py:42 msgid "contact role" msgstr "Kontaktrolle" -#: netbox/tenancy/models/contacts.py:49 +#: netbox/tenancy/models/contacts.py:43 msgid "contact roles" msgstr "Kontaktrollen" -#: netbox/tenancy/models/contacts.py:68 +#: netbox/tenancy/models/contacts.py:63 msgid "title" msgstr "Titel" -#: netbox/tenancy/models/contacts.py:73 +#: netbox/tenancy/models/contacts.py:68 msgid "phone" msgstr "Telefon" -#: netbox/tenancy/models/contacts.py:78 +#: netbox/tenancy/models/contacts.py:73 msgid "email" msgstr "E-Mail" -#: netbox/tenancy/models/contacts.py:87 +#: netbox/tenancy/models/contacts.py:82 msgid "link" msgstr "Link" -#: netbox/tenancy/models/contacts.py:103 +#: netbox/tenancy/models/contacts.py:98 msgid "contact" msgstr "Kontakt" -#: netbox/tenancy/models/contacts.py:104 +#: netbox/tenancy/models/contacts.py:99 msgid "contacts" msgstr "Kontakte" -#: netbox/tenancy/models/contacts.py:153 +#: netbox/tenancy/models/contacts.py:146 msgid "contact assignment" msgstr "Kontaktzuweisung" -#: netbox/tenancy/models/contacts.py:154 +#: netbox/tenancy/models/contacts.py:147 msgid "contact assignments" msgstr "Kontaktzuweisungen" -#: netbox/tenancy/models/contacts.py:170 +#: netbox/tenancy/models/contacts.py:163 #, python-brace-format msgid "Contacts cannot be assigned to this object type ({type})." msgstr "Kontakte können diesem Objekttyp nicht zugewiesen werden ({type})." @@ -14816,21 +15461,21 @@ msgstr "Mandantengruppe" msgid "tenant groups" msgstr "Mandantengruppen" -#: netbox/tenancy/models/tenants.py:70 +#: netbox/tenancy/models/tenants.py:68 msgid "Tenant name must be unique per group." msgstr "Der Mandantenname muss pro Gruppe eindeutig sein." -#: netbox/tenancy/models/tenants.py:80 +#: netbox/tenancy/models/tenants.py:78 msgid "Tenant slug must be unique per group." msgstr "" "Die URL-freundliche Mandantenbezeichnung (URL-Slug) muss pro Gruppe " "einzigartig sein." -#: netbox/tenancy/models/tenants.py:88 +#: netbox/tenancy/models/tenants.py:86 msgid "tenant" msgstr "Mandant" -#: netbox/tenancy/models/tenants.py:89 +#: netbox/tenancy/models/tenants.py:87 msgid "tenants" msgstr "Mandanten" @@ -15065,7 +15710,7 @@ msgstr "Token" msgid "tokens" msgstr "Token" -#: netbox/users/models/users.py:57 netbox/vpn/models/crypto.py:42 +#: netbox/users/models/users.py:57 netbox/vpn/models/crypto.py:43 msgid "group" msgstr "Gruppe" @@ -15115,26 +15760,26 @@ msgstr "" msgid "{name} has a key defined but CHOICES is not a list" msgstr "{name} hat einen Schlüssel definiert, aber CHOICES ist keine Liste" -#: netbox/utilities/conversion.py:19 +#: netbox/utilities/conversion.py:20 msgid "Weight must be a positive number" msgstr "Das Gewicht muss eine positive Zahl sein" -#: netbox/utilities/conversion.py:21 +#: netbox/utilities/conversion.py:22 #, python-brace-format msgid "Invalid value '{weight}' for weight (must be a number)" msgstr "Ungültiger Wert '{weight}'für Gewicht (muss eine Zahl sein)" -#: netbox/utilities/conversion.py:32 netbox/utilities/conversion.py:62 +#: netbox/utilities/conversion.py:33 netbox/utilities/conversion.py:63 #, python-brace-format msgid "Unknown unit {unit}. Must be one of the following: {valid_units}" msgstr "" "Unbekannte Einheit {unit}. Es muss eine der folgenden sein: {valid_units}" -#: netbox/utilities/conversion.py:45 +#: netbox/utilities/conversion.py:46 msgid "Length must be a positive number" msgstr "Die Länge muss eine positive Zahl sein" -#: netbox/utilities/conversion.py:47 +#: netbox/utilities/conversion.py:48 #, python-brace-format msgid "Invalid value '{length}' for length (must be a number)" msgstr "Ungültiger Wert '{length}' für die Länge (muss eine Zahl sein)" @@ -15152,11 +15797,11 @@ msgstr "" msgid "More than 50" msgstr "Mehr als 50" -#: netbox/utilities/fields.py:30 +#: netbox/utilities/fields.py:29 msgid "RGB color in hexadecimal. Example: " msgstr "RGB Farbe in hexadezimaler Form. Beispiel:" -#: netbox/utilities/fields.py:159 +#: netbox/utilities/fields.py:158 #, python-format msgid "" "%s(%r) is invalid. to_model parameter to CounterCacheField must be a string " @@ -15165,7 +15810,7 @@ msgstr "" "%s(%r) ist ungültig. Der to_model-Parameter für CounterCacheField muss eine " "Zeichenfolge im Format 'app.model' sein" -#: netbox/utilities/fields.py:169 +#: netbox/utilities/fields.py:168 #, python-format msgid "" "%s(%r) is invalid. to_field parameter to CounterCacheField must be a string " @@ -15395,14 +16040,14 @@ msgstr "Ungültiges verwandtes Objektattribut für Spalte“{field}\": {to_field msgid "Required column header \"{header}\" not found." msgstr "Erforderliche Spaltenüberschrift“{header}„nicht gefunden." -#: netbox/utilities/forms/widgets/apiselect.py:124 +#: netbox/utilities/forms/widgets/apiselect.py:133 #, python-brace-format msgid "Missing required value for dynamic query param: '{dynamic_params}'" msgstr "" "Fehlender erforderlicher Wert für den dynamischen Abfrageparameter: " "'{dynamic_params}'" -#: netbox/utilities/forms/widgets/apiselect.py:141 +#: netbox/utilities/forms/widgets/apiselect.py:150 #, python-brace-format msgid "Missing required value for static query param: '{static_params}'" msgstr "" @@ -15531,10 +16176,14 @@ msgstr "Suchen..." msgid "Search NetBox" msgstr "Suche NetBox" -#: netbox/utilities/templates/widgets/apiselect.html:7 +#: netbox/utilities/templates/widgets/apiselect.html:8 msgid "Open selector" msgstr "Selektor öffnen" +#: netbox/utilities/templates/widgets/apiselect.html:22 +msgid "Quick add" +msgstr "Schnelles Hinzufügen" + #: netbox/utilities/templates/widgets/markdown_input.html:6 msgid "Write" msgstr "Schreiben" @@ -15569,115 +16218,121 @@ msgstr "" "darf nur für Ansichten verwendet werden, die einen Basis-Abfragesatz " "definieren" -#: netbox/virtualization/filtersets.py:79 +#: netbox/virtualization/choices.py:50 +msgid "Paused" +msgstr "Pausiert" + +#: netbox/virtualization/filtersets.py:45 msgid "Parent group (ID)" msgstr "Übergeordnete Gruppe (ID)" -#: netbox/virtualization/filtersets.py:85 +#: netbox/virtualization/filtersets.py:51 msgid "Parent group (slug)" msgstr "Übergeordnete Gruppe (URL-Slug)" -#: netbox/virtualization/filtersets.py:89 -#: netbox/virtualization/filtersets.py:141 +#: netbox/virtualization/filtersets.py:55 +#: netbox/virtualization/filtersets.py:107 msgid "Cluster type (ID)" msgstr "Clustertyp (ID)" -#: netbox/virtualization/filtersets.py:151 -#: netbox/virtualization/filtersets.py:271 +#: netbox/virtualization/filtersets.py:117 +#: netbox/virtualization/filtersets.py:237 msgid "Cluster (ID)" msgstr "Cluster (ID)" -#: netbox/virtualization/forms/bulk_edit.py:166 -#: netbox/virtualization/models/virtualmachines.py:115 +#: netbox/virtualization/forms/bulk_edit.py:148 +#: netbox/virtualization/models/virtualmachines.py:110 msgid "vCPUs" msgstr "vCPUs" -#: netbox/virtualization/forms/bulk_edit.py:170 +#: netbox/virtualization/forms/bulk_edit.py:152 msgid "Memory (MB)" msgstr "Speicher (MB)" -#: netbox/virtualization/forms/bulk_edit.py:174 +#: netbox/virtualization/forms/bulk_edit.py:156 msgid "Disk (MB)" msgstr "Festplatte (MB)" -#: netbox/virtualization/forms/bulk_edit.py:334 -#: netbox/virtualization/forms/filtersets.py:251 +#: netbox/virtualization/forms/bulk_edit.py:324 +#: netbox/virtualization/forms/filtersets.py:256 msgid "Size (MB)" msgstr "Größe (MB)" -#: netbox/virtualization/forms/bulk_import.py:44 +#: netbox/virtualization/forms/bulk_import.py:45 msgid "Type of cluster" msgstr "Art des Clusters" -#: netbox/virtualization/forms/bulk_import.py:51 +#: netbox/virtualization/forms/bulk_import.py:52 msgid "Assigned cluster group" msgstr "Zugewiesene Clustergruppe" -#: netbox/virtualization/forms/bulk_import.py:96 +#: netbox/virtualization/forms/bulk_import.py:102 msgid "Assigned cluster" msgstr "Zugewiesener Cluster" -#: netbox/virtualization/forms/bulk_import.py:103 +#: netbox/virtualization/forms/bulk_import.py:109 msgid "Assigned device within cluster" msgstr "Zugewiesenes Gerät innerhalb des Clusters" -#: netbox/virtualization/forms/filtersets.py:183 +#: netbox/virtualization/forms/filtersets.py:188 msgid "Serial number" msgstr "Seriennummer" -#: netbox/virtualization/forms/model_forms.py:153 +#: netbox/virtualization/forms/model_forms.py:158 #, python-brace-format msgid "" -"{device} belongs to a different site ({device_site}) than the cluster " -"({cluster_site})" +"{device} belongs to a different {scope_field} ({device_scope}) than the " +"cluster ({cluster_scope})" msgstr "" +"{device} gehört zu einem anderen {scope_field} ({device_scope}) als der " +"Cluster ({cluster_scope})" -#: netbox/virtualization/forms/model_forms.py:192 +#: netbox/virtualization/forms/model_forms.py:199 msgid "Optionally pin this VM to a specific host device within the cluster" msgstr "" "Verbinden Sie diese VM optional an ein bestimmtes Host-Gerät innerhalb des " "Clusters an" -#: netbox/virtualization/forms/model_forms.py:221 +#: netbox/virtualization/forms/model_forms.py:228 msgid "Site/Cluster" msgstr "Standort/Cluster" -#: netbox/virtualization/forms/model_forms.py:244 +#: netbox/virtualization/forms/model_forms.py:251 msgid "Disk size is managed via the attachment of virtual disks." msgstr "" "Die Festplattengröße wird durch das Anhängen virtueller Festplatten " "verwaltet." -#: netbox/virtualization/forms/model_forms.py:372 -#: netbox/virtualization/tables/virtualmachines.py:111 +#: netbox/virtualization/forms/model_forms.py:405 +#: netbox/virtualization/tables/virtualmachines.py:81 msgid "Disk" msgstr "Festplatte" -#: netbox/virtualization/models/clusters.py:25 +#: netbox/virtualization/models/clusters.py:26 msgid "cluster type" msgstr "Clustertyp" -#: netbox/virtualization/models/clusters.py:26 +#: netbox/virtualization/models/clusters.py:27 msgid "cluster types" msgstr "Clustertypen" -#: netbox/virtualization/models/clusters.py:45 +#: netbox/virtualization/models/clusters.py:43 msgid "cluster group" msgstr "Clustergruppe" -#: netbox/virtualization/models/clusters.py:46 +#: netbox/virtualization/models/clusters.py:44 msgid "cluster groups" msgstr "Clustergruppen" -#: netbox/virtualization/models/clusters.py:121 +#: netbox/virtualization/models/clusters.py:110 msgid "cluster" msgstr "Cluster" -#: netbox/virtualization/models/clusters.py:122 +#: netbox/virtualization/models/clusters.py:111 msgid "clusters" msgstr "Cluster" -#: netbox/virtualization/models/clusters.py:141 +#: netbox/virtualization/models/clusters.py:137 #, python-brace-format msgid "" "{count} devices are assigned as hosts for this cluster but are not in site " @@ -15686,33 +16341,42 @@ msgstr "" "{count} Geräte sind als Hosts für diesen Cluster zugewiesen, befinden sich " "aber nicht an dem Standort {site}" -#: netbox/virtualization/models/virtualmachines.py:123 +#: netbox/virtualization/models/clusters.py:144 +#, python-brace-format +msgid "" +"{count} devices are assigned as hosts for this cluster but are not in " +"location {location}" +msgstr "" +"{count} Geräte sind als Hosts für diesen Cluster zugewiesen, befinden sich " +"aber nicht am Standort {location}" + +#: netbox/virtualization/models/virtualmachines.py:118 msgid "memory (MB)" msgstr "Speicher (MB)" -#: netbox/virtualization/models/virtualmachines.py:128 +#: netbox/virtualization/models/virtualmachines.py:123 msgid "disk (MB)" msgstr "Festplatte (MB)" -#: netbox/virtualization/models/virtualmachines.py:166 +#: netbox/virtualization/models/virtualmachines.py:161 msgid "Virtual machine name must be unique per cluster." msgstr "Der Name der virtuellen Maschine muss pro Cluster eindeutig sein." -#: netbox/virtualization/models/virtualmachines.py:169 +#: netbox/virtualization/models/virtualmachines.py:164 msgid "virtual machine" msgstr "virtuelle Maschine" -#: netbox/virtualization/models/virtualmachines.py:170 +#: netbox/virtualization/models/virtualmachines.py:165 msgid "virtual machines" msgstr "virtuelle Maschinen" -#: netbox/virtualization/models/virtualmachines.py:184 +#: netbox/virtualization/models/virtualmachines.py:176 msgid "A virtual machine must be assigned to a site and/or cluster." msgstr "" "Eine virtuelle Maschine muss einem Standort und/oder einem Cluster " "zugewiesen werden." -#: netbox/virtualization/models/virtualmachines.py:191 +#: netbox/virtualization/models/virtualmachines.py:183 #, python-brace-format msgid "" "The selected cluster ({cluster}) is not assigned to this site ({site})." @@ -15720,11 +16384,11 @@ msgstr "" "Das ausgewählte Cluster ({cluster}) ist diesem Standort nicht zugeordnet " "({site})." -#: netbox/virtualization/models/virtualmachines.py:198 +#: netbox/virtualization/models/virtualmachines.py:190 msgid "Must specify a cluster when assigning a host device." msgstr "Bei der Zuweisung eines Hostgeräts muss ein Cluster angegeben werden." -#: netbox/virtualization/models/virtualmachines.py:203 +#: netbox/virtualization/models/virtualmachines.py:195 #, python-brace-format msgid "" "The selected device ({device}) is not assigned to this cluster ({cluster})." @@ -15732,7 +16396,7 @@ msgstr "" "Das gewählte Gerät ({device}) ist diesem Cluster nicht zugewiesen " "({cluster})." -#: netbox/virtualization/models/virtualmachines.py:215 +#: netbox/virtualization/models/virtualmachines.py:207 #, python-brace-format msgid "" "The specified disk size ({size}) must match the aggregate size of assigned " @@ -15741,18 +16405,18 @@ msgstr "" "Die angegebene Festplattengröße ({size}) muss der Gesamtgröße der " "zugewiesenen virtuellen Laufwerke entsprechen ({total_size})." -#: netbox/virtualization/models/virtualmachines.py:229 +#: netbox/virtualization/models/virtualmachines.py:221 #, python-brace-format msgid "Must be an IPv{family} address. ({ip} is an IPv{version} address.)" msgstr "" "Muss eine IPv{family} Adresse sein. ({ip} ist eine IPv{version} Adresse.)" -#: netbox/virtualization/models/virtualmachines.py:238 +#: netbox/virtualization/models/virtualmachines.py:230 #, python-brace-format msgid "The specified IP address ({ip}) is not assigned to this VM." msgstr "Die angegebene IP-Adresse ({ip}) ist dieser VM nicht zugewiesen." -#: netbox/virtualization/models/virtualmachines.py:396 +#: netbox/virtualization/models/virtualmachines.py:376 #, python-brace-format msgid "" "The selected parent interface ({parent}) belongs to a different virtual " @@ -15761,7 +16425,7 @@ msgstr "" "Die ausgewählte übergeordnete Schnittstelle ({parent}) gehört zu einer " "anderen virtuellen Maschine ({virtual_machine})." -#: netbox/virtualization/models/virtualmachines.py:411 +#: netbox/virtualization/models/virtualmachines.py:391 #, python-brace-format msgid "" "The selected bridge interface ({bridge}) belongs to a different virtual " @@ -15770,7 +16434,7 @@ msgstr "" "Die gewählte Bridge-Schnittstelle ({bridge}) gehört zu einer anderen " "virtuellen Maschine ({virtual_machine})." -#: netbox/virtualization/models/virtualmachines.py:422 +#: netbox/virtualization/models/virtualmachines.py:402 #, python-brace-format msgid "" "The untagged VLAN ({untagged_vlan}) must belong to the same site as the " @@ -15780,24 +16444,24 @@ msgstr "" "wie die übergeordnete virtuelle Maschine der Schnittstelle, oder sie muss " "global sein." -#: netbox/virtualization/models/virtualmachines.py:434 +#: netbox/virtualization/models/virtualmachines.py:414 msgid "size (MB)" msgstr "Größe (MB)" -#: netbox/virtualization/models/virtualmachines.py:438 +#: netbox/virtualization/models/virtualmachines.py:418 msgid "virtual disk" msgstr "virtuelle Festplatte" -#: netbox/virtualization/models/virtualmachines.py:439 +#: netbox/virtualization/models/virtualmachines.py:419 msgid "virtual disks" msgstr "virtuelle Festplatten" -#: netbox/virtualization/views.py:273 +#: netbox/virtualization/views.py:289 #, python-brace-format msgid "Added {count} devices to cluster {cluster}" msgstr "Füge {count} Geräte zum Cluster {cluster}hinzu " -#: netbox/virtualization/views.py:308 +#: netbox/virtualization/views.py:324 #, python-brace-format msgid "Removed {count} devices from cluster {cluster}" msgstr "Entferne {count}Geräte vom Cluster {cluster}" @@ -15834,14 +16498,6 @@ msgstr "L2TP" msgid "PPTP" msgstr "PPTP" -#: netbox/vpn/choices.py:64 -msgid "Hub" -msgstr "Hub" - -#: netbox/vpn/choices.py:65 -msgid "Spoke" -msgstr "Spoke" - #: netbox/vpn/choices.py:88 msgid "Aggressive" msgstr "Aggressiv" @@ -15959,26 +16615,26 @@ msgstr "VLAN (Name)" msgid "Tunnel group" msgstr "Tunnelgruppe" -#: netbox/vpn/forms/bulk_edit.py:117 netbox/vpn/models/crypto.py:47 +#: netbox/vpn/forms/bulk_edit.py:117 netbox/vpn/models/crypto.py:48 msgid "SA lifetime" msgstr "SA-Lebendauer" -#: netbox/vpn/forms/bulk_edit.py:151 netbox/wireless/forms/bulk_edit.py:79 -#: netbox/wireless/forms/bulk_edit.py:126 -#: netbox/wireless/forms/filtersets.py:64 -#: netbox/wireless/forms/filtersets.py:98 +#: netbox/vpn/forms/bulk_edit.py:151 netbox/wireless/forms/bulk_edit.py:81 +#: netbox/wireless/forms/bulk_edit.py:129 +#: netbox/wireless/forms/filtersets.py:67 +#: netbox/wireless/forms/filtersets.py:126 msgid "Pre-shared key" msgstr "Vorab geteilter Schlüssel (PSK)" #: netbox/vpn/forms/bulk_edit.py:237 netbox/vpn/forms/bulk_import.py:239 -#: netbox/vpn/forms/filtersets.py:199 netbox/vpn/forms/model_forms.py:370 +#: netbox/vpn/forms/filtersets.py:199 netbox/vpn/forms/model_forms.py:373 #: netbox/vpn/models/crypto.py:104 msgid "IKE policy" msgstr "IKE-Richtlinie" #: netbox/vpn/forms/bulk_edit.py:242 netbox/vpn/forms/bulk_import.py:244 -#: netbox/vpn/forms/filtersets.py:204 netbox/vpn/forms/model_forms.py:374 -#: netbox/vpn/models/crypto.py:209 +#: netbox/vpn/forms/filtersets.py:204 netbox/vpn/forms/model_forms.py:377 +#: netbox/vpn/models/crypto.py:207 msgid "IPSec policy" msgstr "IPSec-Richtlinie" @@ -15986,10 +16642,6 @@ msgstr "IPSec-Richtlinie" msgid "Tunnel encapsulation" msgstr "Tunnel Encapsulation" -#: netbox/vpn/forms/bulk_import.py:83 -msgid "Operational role" -msgstr "Operative Rolle" - #: netbox/vpn/forms/bulk_import.py:90 msgid "Parent device of assigned interface" msgstr "Übergeordnetes Gerät der zugewiesenen Schnittstelle" @@ -16006,7 +16658,7 @@ msgstr "Geräte- oder VM-Schnittstelle" msgid "IKE proposal(s)" msgstr "IKE-Vorschlag (e)" -#: netbox/vpn/forms/bulk_import.py:215 netbox/vpn/models/crypto.py:197 +#: netbox/vpn/forms/bulk_import.py:215 netbox/vpn/models/crypto.py:195 msgid "Diffie-Hellman group for Perfect Forward Secrecy" msgstr "Diffie-Hellman-Gruppe für Perfect Forward Secrecy" @@ -16056,7 +16708,7 @@ msgid "IKE version" msgstr "IKE-Ausführung" #: netbox/vpn/forms/filtersets.py:142 netbox/vpn/forms/filtersets.py:175 -#: netbox/vpn/forms/model_forms.py:298 netbox/vpn/forms/model_forms.py:334 +#: netbox/vpn/forms/model_forms.py:299 netbox/vpn/forms/model_forms.py:336 msgid "Proposal" msgstr "Vorschlag" @@ -16064,33 +16716,29 @@ msgstr "Vorschlag" msgid "Assigned Object Type" msgstr "Zugewiesener Objekttyp" -#: netbox/vpn/forms/model_forms.py:95 netbox/vpn/forms/model_forms.py:130 -#: netbox/vpn/forms/model_forms.py:240 netbox/vpn/tables/tunnels.py:91 +#: netbox/vpn/forms/model_forms.py:96 netbox/vpn/forms/model_forms.py:131 +#: netbox/vpn/forms/model_forms.py:241 netbox/vpn/tables/tunnels.py:91 msgid "Tunnel interface" msgstr "Tunnelschnittstelle" -#: netbox/vpn/forms/model_forms.py:150 +#: netbox/vpn/forms/model_forms.py:151 msgid "First Termination" msgstr "Erster Endpunkt" -#: netbox/vpn/forms/model_forms.py:153 +#: netbox/vpn/forms/model_forms.py:154 msgid "Second Termination" msgstr "Zweiter Endpunkt" -#: netbox/vpn/forms/model_forms.py:197 +#: netbox/vpn/forms/model_forms.py:198 msgid "This parameter is required when defining a termination." msgstr "" "Dieser Parameter ist erforderlich, wenn ein Abschlusspunkt definiert wird." -#: netbox/vpn/forms/model_forms.py:320 netbox/vpn/forms/model_forms.py:356 -msgid "Policy" -msgstr "Richtlinie" - -#: netbox/vpn/forms/model_forms.py:487 +#: netbox/vpn/forms/model_forms.py:490 msgid "A termination must specify an interface or VLAN." msgstr "Eine Terminierung muss eine Schnittstelle oder ein VLAN angeben." -#: netbox/vpn/forms/model_forms.py:489 +#: netbox/vpn/forms/model_forms.py:492 msgid "" "A termination can only have one terminating object (an interface or VLAN)." msgstr "" @@ -16105,31 +16753,31 @@ msgstr "Verschlüsselungsalgorithmus" msgid "authentication algorithm" msgstr "Authentifizierungsalgorithmus" -#: netbox/vpn/models/crypto.py:44 +#: netbox/vpn/models/crypto.py:45 msgid "Diffie-Hellman group ID" msgstr "Diffie-Hellman-Gruppen-ID" -#: netbox/vpn/models/crypto.py:50 +#: netbox/vpn/models/crypto.py:51 msgid "Security association lifetime (in seconds)" msgstr "Lebensdauer der Sicherheitsverbindung (in Sekunden)" -#: netbox/vpn/models/crypto.py:59 +#: netbox/vpn/models/crypto.py:60 msgid "IKE proposal" msgstr "IKE-Vorschlag" -#: netbox/vpn/models/crypto.py:60 +#: netbox/vpn/models/crypto.py:61 msgid "IKE proposals" msgstr "IKE-Vorschläge" -#: netbox/vpn/models/crypto.py:76 +#: netbox/vpn/models/crypto.py:75 msgid "version" msgstr "Version" -#: netbox/vpn/models/crypto.py:88 netbox/vpn/models/crypto.py:190 +#: netbox/vpn/models/crypto.py:88 netbox/vpn/models/crypto.py:188 msgid "proposals" msgstr "Vorschläge" -#: netbox/vpn/models/crypto.py:91 netbox/wireless/models.py:39 +#: netbox/vpn/models/crypto.py:91 netbox/wireless/models.py:41 msgid "pre-shared key" msgstr "vorab geteilter Schlüssel (PSK)" @@ -16137,19 +16785,19 @@ msgstr "vorab geteilter Schlüssel (PSK)" msgid "IKE policies" msgstr "IKE-Richtlinien" -#: netbox/vpn/models/crypto.py:118 +#: netbox/vpn/models/crypto.py:115 msgid "Mode is required for selected IKE version" msgstr "Der Modus ist für die ausgewählte IKE-Version erforderlich" -#: netbox/vpn/models/crypto.py:122 +#: netbox/vpn/models/crypto.py:119 msgid "Mode cannot be used for selected IKE version" msgstr "Der Modus kann nicht für die ausgewählte IKE-Version verwendet werden" -#: netbox/vpn/models/crypto.py:136 +#: netbox/vpn/models/crypto.py:134 msgid "encryption" msgstr "Verschlüsselung" -#: netbox/vpn/models/crypto.py:141 +#: netbox/vpn/models/crypto.py:140 msgid "authentication" msgstr "Authentifizierung" @@ -16169,34 +16817,34 @@ msgstr "IPSec-Vorschlag" msgid "IPSec proposals" msgstr "IPSec-Vorschläge" -#: netbox/vpn/models/crypto.py:178 +#: netbox/vpn/models/crypto.py:175 msgid "Encryption and/or authentication algorithm must be defined" msgstr "" "Der Verschlüsselungs- und/oder Authentifizierungsalgorithmus muss definiert " "werden" -#: netbox/vpn/models/crypto.py:210 +#: netbox/vpn/models/crypto.py:208 msgid "IPSec policies" msgstr "IPSec-Richtlinien" -#: netbox/vpn/models/crypto.py:251 +#: netbox/vpn/models/crypto.py:247 msgid "IPSec profiles" msgstr "IPSec-Profile" -#: netbox/vpn/models/l2vpn.py:116 +#: netbox/vpn/models/l2vpn.py:113 msgid "L2VPN termination" msgstr "L2VPN-Abschlusspunkt" -#: netbox/vpn/models/l2vpn.py:117 +#: netbox/vpn/models/l2vpn.py:114 msgid "L2VPN terminations" msgstr "L2VPN-Abschlusspunkte" -#: netbox/vpn/models/l2vpn.py:135 +#: netbox/vpn/models/l2vpn.py:129 #, python-brace-format msgid "L2VPN Termination already assigned ({assigned_object})" msgstr "L2VPN-Terminierung wurde bereits zugewiesen ({assigned_object})" -#: netbox/vpn/models/l2vpn.py:147 +#: netbox/vpn/models/l2vpn.py:141 #, python-brace-format msgid "" "{l2vpn_type} L2VPNs cannot have more than two terminations; found " @@ -16213,35 +16861,35 @@ msgstr "Tunnelgruppe" msgid "tunnel groups" msgstr "Tunnelgruppen" -#: netbox/vpn/models/tunnels.py:53 +#: netbox/vpn/models/tunnels.py:51 msgid "encapsulation" msgstr "Encapsulation" -#: netbox/vpn/models/tunnels.py:72 +#: netbox/vpn/models/tunnels.py:70 msgid "tunnel ID" msgstr "Tunnel-ID" -#: netbox/vpn/models/tunnels.py:94 +#: netbox/vpn/models/tunnels.py:92 msgid "tunnel" msgstr "Tunnel" -#: netbox/vpn/models/tunnels.py:95 +#: netbox/vpn/models/tunnels.py:93 msgid "tunnels" msgstr "Tunnel" -#: netbox/vpn/models/tunnels.py:153 +#: netbox/vpn/models/tunnels.py:148 msgid "An object may be terminated to only one tunnel at a time." msgstr "Ein Objekt kann jeweils nur an einem Tunnel terminiert werden." -#: netbox/vpn/models/tunnels.py:156 +#: netbox/vpn/models/tunnels.py:151 msgid "tunnel termination" msgstr "Tunnelabschlusspunkt" -#: netbox/vpn/models/tunnels.py:157 +#: netbox/vpn/models/tunnels.py:152 msgid "tunnel terminations" msgstr "Tunnelabschlusspunkte" -#: netbox/vpn/models/tunnels.py:174 +#: netbox/vpn/models/tunnels.py:169 #, python-brace-format msgid "{name} is already attached to a tunnel ({tunnel})." msgstr "{name} ist bereits an einen Tunnel angeschlossen ({tunnel})." @@ -16302,51 +16950,44 @@ msgstr "WPA Persönlich (PSK)" msgid "WPA Enterprise" msgstr "WPA Enterprise" -#: netbox/wireless/forms/bulk_edit.py:73 -#: netbox/wireless/forms/bulk_edit.py:120 -#: netbox/wireless/forms/bulk_import.py:68 -#: netbox/wireless/forms/bulk_import.py:71 -#: netbox/wireless/forms/bulk_import.py:110 -#: netbox/wireless/forms/bulk_import.py:113 -#: netbox/wireless/forms/filtersets.py:59 -#: netbox/wireless/forms/filtersets.py:93 +#: netbox/wireless/forms/bulk_edit.py:75 +#: netbox/wireless/forms/bulk_edit.py:123 +#: netbox/wireless/forms/bulk_import.py:70 +#: netbox/wireless/forms/bulk_import.py:73 +#: netbox/wireless/forms/bulk_import.py:115 +#: netbox/wireless/forms/bulk_import.py:118 +#: netbox/wireless/forms/filtersets.py:62 +#: netbox/wireless/forms/filtersets.py:121 msgid "Authentication cipher" msgstr "Authentifizierungchiffre" -#: netbox/wireless/forms/bulk_edit.py:134 -#: netbox/wireless/forms/bulk_import.py:116 -#: netbox/wireless/forms/bulk_import.py:119 -#: netbox/wireless/forms/filtersets.py:106 -msgid "Distance unit" -msgstr "Entfernungseinheit" - -#: netbox/wireless/forms/bulk_import.py:52 +#: netbox/wireless/forms/bulk_import.py:54 msgid "Bridged VLAN" msgstr "Bridged VLAN" -#: netbox/wireless/forms/bulk_import.py:89 -#: netbox/wireless/tables/wirelesslink.py:28 +#: netbox/wireless/forms/bulk_import.py:94 +#: netbox/wireless/tables/wirelesslink.py:27 msgid "Interface A" msgstr "Schnittstelle A" -#: netbox/wireless/forms/bulk_import.py:93 -#: netbox/wireless/tables/wirelesslink.py:37 +#: netbox/wireless/forms/bulk_import.py:98 +#: netbox/wireless/tables/wirelesslink.py:36 msgid "Interface B" msgstr "Schnittstelle B" -#: netbox/wireless/forms/model_forms.py:161 +#: netbox/wireless/forms/model_forms.py:164 msgid "Side B" msgstr "Seite B" -#: netbox/wireless/models.py:31 +#: netbox/wireless/models.py:32 msgid "authentication cipher" msgstr "Authentifizierungchiffre" -#: netbox/wireless/models.py:69 +#: netbox/wireless/models.py:72 msgid "wireless LAN group" msgstr "WLAN-Gruppe" -#: netbox/wireless/models.py:70 +#: netbox/wireless/models.py:73 msgid "wireless LAN groups" msgstr "WLAN-Gruppen" @@ -16354,35 +16995,23 @@ msgstr "WLAN-Gruppen" msgid "wireless LAN" msgstr "WLAN" -#: netbox/wireless/models.py:144 +#: netbox/wireless/models.py:141 msgid "interface A" msgstr "Schnittstelle A" -#: netbox/wireless/models.py:151 +#: netbox/wireless/models.py:148 msgid "interface B" msgstr "Schnittstelle B" -#: netbox/wireless/models.py:165 -msgid "distance" -msgstr "Entfernung" - -#: netbox/wireless/models.py:172 -msgid "distance unit" -msgstr "Entfernungseinheit" - -#: netbox/wireless/models.py:219 +#: netbox/wireless/models.py:196 msgid "wireless link" msgstr "Funkverbindung" -#: netbox/wireless/models.py:220 +#: netbox/wireless/models.py:197 msgid "wireless links" msgstr "Funkverbindungen" -#: netbox/wireless/models.py:236 -msgid "Must specify a unit when setting a wireless distance" -msgstr "" - -#: netbox/wireless/models.py:242 netbox/wireless/models.py:248 +#: netbox/wireless/models.py:212 netbox/wireless/models.py:218 #, python-brace-format msgid "{type} is not a wireless interface." msgstr "{type} ist keine Funkschnittstelle." From 9f1ffb54f5a4e3bcabd05c57342f1f186a47f910 Mon Sep 17 00:00:00 2001 From: github-actions <41898282+github-actions[bot]@users.noreply.github.com> Date: Thu, 6 Mar 2025 05:02:11 +0000 Subject: [PATCH 137/152] Update source translation strings --- netbox/translations/en/LC_MESSAGES/django.po | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/netbox/translations/en/LC_MESSAGES/django.po b/netbox/translations/en/LC_MESSAGES/django.po index dc54dd5cf..30f0bf926 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: 2025-03-05 05:01+0000\n" +"POT-Creation-Date: 2025-03-06 05:01+0000\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -11741,24 +11741,24 @@ msgid "" "{error}" msgstr "" -#: netbox/netbox/views/generic/bulk_views.py:416 +#: netbox/netbox/views/generic/bulk_views.py:421 #, python-brace-format msgid "Row {i}: Object with ID {id} does not exist" msgstr "" -#: netbox/netbox/views/generic/bulk_views.py:703 -#: netbox/netbox/views/generic/bulk_views.py:904 -#: netbox/netbox/views/generic/bulk_views.py:952 +#: netbox/netbox/views/generic/bulk_views.py:708 +#: netbox/netbox/views/generic/bulk_views.py:909 +#: netbox/netbox/views/generic/bulk_views.py:957 #, python-brace-format msgid "No {object_type} were selected." msgstr "" -#: netbox/netbox/views/generic/bulk_views.py:782 +#: netbox/netbox/views/generic/bulk_views.py:787 #, python-brace-format msgid "Renamed {count} {object_type}" msgstr "" -#: netbox/netbox/views/generic/bulk_views.py:882 +#: netbox/netbox/views/generic/bulk_views.py:887 #, python-brace-format msgid "Deleted {count} {object_type}" msgstr "" From c933cbf11ec60c61e8c3f2ef252382544bdb7f0a Mon Sep 17 00:00:00 2001 From: Jeremy Stretch Date: Thu, 6 Mar 2025 09:00:09 -0500 Subject: [PATCH 138/152] Update translations --- netbox/translations/cs/LC_MESSAGES/django.mo | Bin 231540 -> 240941 bytes netbox/translations/cs/LC_MESSAGES/django.po | 7393 +++++++++-------- netbox/translations/da/LC_MESSAGES/django.mo | Bin 224346 -> 233601 bytes netbox/translations/da/LC_MESSAGES/django.po | 7395 +++++++++-------- netbox/translations/es/LC_MESSAGES/django.mo | Bin 237992 -> 247711 bytes netbox/translations/es/LC_MESSAGES/django.po | 7396 +++++++++-------- netbox/translations/fr/LC_MESSAGES/django.mo | Bin 239998 -> 249727 bytes netbox/translations/fr/LC_MESSAGES/django.po | 7401 +++++++++-------- netbox/translations/it/LC_MESSAGES/django.mo | Bin 236189 -> 245799 bytes netbox/translations/it/LC_MESSAGES/django.po | 7397 +++++++++-------- netbox/translations/ja/LC_MESSAGES/django.mo | Bin 253226 -> 263914 bytes netbox/translations/ja/LC_MESSAGES/django.po | 7384 +++++++++-------- netbox/translations/nl/LC_MESSAGES/django.mo | Bin 232078 -> 241482 bytes netbox/translations/nl/LC_MESSAGES/django.po | 7402 ++++++++++-------- netbox/translations/pl/LC_MESSAGES/django.mo | Bin 233894 -> 243381 bytes netbox/translations/pl/LC_MESSAGES/django.po | 7397 +++++++++-------- netbox/translations/ru/LC_MESSAGES/django.mo | Bin 300424 -> 312749 bytes netbox/translations/ru/LC_MESSAGES/django.po | 7398 +++++++++-------- netbox/translations/tr/LC_MESSAGES/django.mo | Bin 228424 -> 237552 bytes netbox/translations/tr/LC_MESSAGES/django.po | 7391 +++++++++-------- netbox/translations/uk/LC_MESSAGES/django.mo | Bin 300826 -> 312789 bytes netbox/translations/uk/LC_MESSAGES/django.po | 7354 +++++++++-------- netbox/translations/zh/LC_MESSAGES/django.mo | Bin 212087 -> 219647 bytes netbox/translations/zh/LC_MESSAGES/django.po | 7385 +++++++++-------- 24 files changed, 48089 insertions(+), 40604 deletions(-) diff --git a/netbox/translations/cs/LC_MESSAGES/django.mo b/netbox/translations/cs/LC_MESSAGES/django.mo index ddb972342822d84825a96c6b6d0ad7ef4283562d..13c3a306d79d42375da45e25df36bfd48ef9afc4 100644 GIT binary patch delta 75366 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

    uri?c_Kp!3&^-?t*IgF{nm9n?HJAhab-{7!)rv zs15syTc9SW0!<7%gWAbJi;p$`3{X2>21;Ou;VDqp_BN;!djbX?Ps1qv9KDo=*+DL; z&sCI(c3vNpKvPgVYj6HOpiXEYDB%&Hc+(9RfNFddsDe8|oyb{GCw1A@_dqrN1k}y> zDX`}GkJ#V2mWe^#{n&}k$As3S@Z>PT~g5-J0#Kuz;E0JXD@pb8EG)!0Z- zy!oJXmx1DK1jRdK{!;^a{#D>I4&h@Xd<1oqeFt@<5e7MzB0eZy3Q!H@Fn=+_^5(A& zYNt)j-wM=*I)lm|WH`~sL>(;zb!}II>U^)QkAM=o4(f>S7`_12z`vmGk)Xj&foPzf z?_`EKLFJbPwV_I&@@gCUS~AhmbT=Fh>Ry-usf{!J zx*4~D+Q3;*jo$#3cNbKnZ@@r9VBqI}-YA>$^)67the0)T64a%*WAV43J`?%^s$R^Ypq~F+OmtMWK_zqs^_UF>Rd5!lM%I{r zFQ~8YFM`v-7{i>eZkK`CSU&*s%0JxsMnze$2X%&1IIKJF%GVO0$m? znqk6n#Y5wqguy<z1{exYR%{kS0}Vc|NrU$5^504!Tcn_!puXh zAHEs*`Xknwc?3NY*f~(wP!^lm6k?&)0=?`kw&0g-45Rlu&HRUd0>0bm>i%;r$B~&*BY+3dgicrh#sba0_?aXMM{tp6W=AY zWVgX6*3iXB)Nc;qZvw3XVP2s?UL*czZHaF}EHVYUnn)ei!4$s=rX=3|e{6nI!a6ar zz7!3$ITSp?CU)57ilB9w__#=c{fE*V%wx+(h)*MN6>I*>@Bdj|3S=QR6M+Pbtc-T} zN>emGyfbz}(U|wPQ#nISHiLCEa@TS~U*K)k^}j~)C`6)wZgyD9x?BSCYv8V9aPYn(Yymn8 z_4k*4rOS*e2%$5AvUPU-ixQJXL!cX+NQ`dyc3BfUXrjJxx3CF5!Es%;^*3Uz(d=Xe zrK8Ye)7(zHpT7Un3+Gu1C$r+uNyvuSPlz#$%x_@37UA0}6|5j9ahE2dSxz#P_Y?0= zqi@Nd&in>B--(~Kou?$0m%O!bXE2vt)W5&D&LS4%>~z!&LMIdTQ6M(4q^zgeE_xsq z6@kX^GLSO|tY>2DEsx*acjcpTy@$xUTJ9V4TasU!ocY$&^z^r4`qogW2#$<)tWFxA zj3C^dB-s>1u2SGHc&e9`BDt7fpqYelhK0=~wu)FBa&nM!*fff9D!cK;we=wyImYjx z^DD9lBl;)Gzu0b6RJM$DIuc5NIS>uC_Xz1-@H`^2Gc?jYOgs`fw^%>tB$6@zZagoI zPJM;06j$WL_2SA8=$FlurXQX)+2s zu4n$mU>tng$dP?uy^-7p7O#j#6+PSK5U#HNH9W^C^(1tHxrh43wsOUw_^;7PdMSZ{!L zp8VusFx-gvWD6*Af>9m+E4USih1yLf(RKa1GGvDlA84IweI4>Qglfhim!y%i%@G{>?@UA5+M<_Z;F9HnSP$<@t zcttDl5`JfzNQPf_h?uOI#e10l5)GzeKEUErz_F}-)7WVpMCu_@iK5dup4Jpx&R7j0 z2^f?3QA9U_t>EeN|L>q|fEB8WPDUQ2Xi022 zd4bpeh9pPC8J~hXB@?AklWVQ?a-)5UP0DRIE~S^+ZCL^ zS=M9G>26KLfU_OF_`$0$yp0gdTWnCRH*>Vbn!2O3^tU+A1f%rIU z-0^Vq)`ZrHY2X^`VDi#4p3{W>5woil0)T&w$^E z6=W`}=|JG)fA}&Z-p*oju0rnf_F7{Dqg&pfBco8Ym0?svx|AAh9V)_bO)`ompDbwf>#PdHKM*~Fs z6ih&1ng!p7If*9-{{e3-UB7}i4!mSyneZ>Oc`L&a=pA4TVSKhzsE0-jnkfwDS8y$- zURa-M%OXHJZP)QR;wLHo4+*0fGe~%VkDo8OVzayY*4RY&#qsy2$V)g`S=TeY>uA0u zR-M=)wCl5u3FoME8T?DFfcbtxn81z$e+&dye&+m3+<>)$n1%*IZ3%)hk2TteSW0VV zGxH#u4?`ob&7BNh)J&%e+F5W8acb~8fDq$y9FysM4%c%8;~c>~mXJ%kV_t`%N#J(1 z%X5x(1)Ki?)+3ge+|pLK0!8AXt8Wx7BOao;*;h7FpBkIOehpX;;(W$)gfk%$+pgPj z=G$q`ZAY8j>D+abVwDiRjsK}}6WR$qlAod-(d%UmskXkw^BjI&;O!oRbN zHrB`@{L74|#uBq$XU%9`oTf|D=*lp@4SWyERTpPZx+@EzfQkKy_zD_J3OSv!u@l4| zfScj+Z&6*zL0MKBOu~>gq@hqdXOp7nPN12t0esB*lU&{DE{0kcWIE^P@Fus3nV^`3>ibiE?#J2=T z6^5)ECGpCv@4!DC=D7bM zR?-^3;`n{8h!kCc_zns;w?>TP%7@4`hz(Sb zgxV?JYzv%~k5?UGMCe zZx|+{$%*jRqb1Yh{)%-^YPe}GioRbn+=5F9tf0tK+gVc*-a%@>Isu$(oREiOpNIG( zEAWlReuFcQ+=1|HV|;PvT%ob}{)D@Xxa=VOe0GWNQcL%r>zx(UJk&0eG}RVI=sF96 z%fNl0tTVWprpj=%M;K`-(1_|G#A;d>RqS-Op#O|{Hfv%9oH5QNDejs|N0ks8Y{Fd$ zrlhmj;Bg9cAuc;_JFbIJQrp4WNYhi^itmdKJuTs(=+|I=6iOP_ZJ@njy_As-ncOB- zm)g~dd&Atr1FYx5aEjPG9h^UH4{G5k>&?XTu%B7fYT#Tr{v8XG=@j_@Nk0}iMN%|N z>`ziz>o*&Ftj4GtMpVK#93lQ?Cod)NM>&V%noE(U@b9rMfPPZueB<7=lyw(!2GC6S z!0!Ycg<(FABcUn zgvk`nOe6Jd{XyTyyp2FOy8naZjSz~Gu+46(%8(Z^Hj{7#Ro!!)h^Hp+GI>=fHja2h z8oxt)C!;(kG==pMVzRnu)`asPdEpr27_*2k1OxZ*KL~}jzz;pbIHp4!iP$I;R454z zBt+ybjpkro*G{DeTG?nKEwPKH(T#?xz`H>HLt+KsZbWmc{vVk#BqXA{79_~x63|a! z+C!8Tvy-T11*V2+b}7RAh{JW7{2k==W~Z_|a6WUIStz&we{*a6&oCQk4DYb6e+UAl z2>cB(JH@hs=_&RSk>)hg62t7?e&UyQf#=dvDUPedfv zBhcj!dAL3^517tBGK&ll!xNlG13g)vpsA}Ai$`M<*;QSz4&1>A%kCl418zKGJIK3b zMHFjGZfnL|JB?w)`jS`FINL-r^W~;U7sOK`HXI>+ld?GT-xx==#%d!}AD*loBGpW2 zF`Sd+$~xPQ?on74oeec($YO!Nk>8A%7k*o~d!6QduKkF}hT}XgqIE4_84|K{yeIG- z0^KyEpTf$rS>e7`SiWEN0sE8P=A_A*c3O^?cXBjtpfQBeEKnzK|2yIG)_FmK(Jj$K z!mn0n74Zl(JBYZ8_!uFUnVn^{CdL|WC+9K^d?dfOZEzyInpPtZe%VjGhxKJqnZy#7 z9L%~2ets3j<>o{_A~Y<}EkBDO>2Lh}>JopcK@xniY>oJ7D!ny3o_Hy8`;*%NJWp(? zL;v5$RW#(QM&LYzkt}3cNDRmN5l!r-=x_v26I)GlWf40FCL~8T9e-rziETF{;8!O1 zF%9L!w;246-v3?>nLe^+l|M#5$EbqfYlJJXo5?2Rx1H^T6p12N5#EQ;Qn=-4r~&@V z2xVu!PDs&~;85~cOWEuOI$r#biOU94C)9S*_>j=gVcH{9p5$JPMv(JRY!AsrDcp;s zBg|hjKR^RTX{aN-ajZjaAijIHXpVmdda_@bN1*{P#d4GL4y=oRw>9)$pVWj}WF1u) zi-qWV3XUMDj}_|x&S8{8w43=x*=bE>J(m0uR(uNuGqOGjcQ~6kihd;HPPbg&?>OTz znvtZRvdhj`Q>RE8Npe`*g=kWIaZKnK4c>(?3|~w}8gk;=Msic63|a%&$ZVaOH5LKi zALK=j$n{^q?qv1BJvP69cz(oQQ!GE^9Okcw_;!3tNG@PS(jr_5enNOr$;pnt9b=;- z>++FXfx=^rKg1e8hsL0Y_WY-&(;A3pLBva-A4ydZ4&rUO38J!R4*c(94jLH%?XolOxkFRQ<5y{S0>mxlhQGouJXy7JETXRGa@!%=Z?7s$sfRLJAY@LZ{b>jiZUt zh=kf+JHoW!Its~3g6YW1g0Bz_WM=$B12@1frXSBVg5X}o|GR#VybIz7=&C#-=d3dc zE`&4{flegnXSeSe3-I@`g1_O{?=rk+j7DrO;xEvO#3d_A6MN7~i*6n83b7zK&(KSX zP6T+4asB&2o`o|ep5ut$A(+vM%qB4_i3bt+iLV1(*?5Fbus%uLW4rr_|32$fwvG(< z9Sy8z9o_N*$$ZF#UUp*N_0^c{F^&=xN{>J$JAV1|5r0Q>veOiuXZ-Or8N|9NBC*L^ zY&pB|--26`^=-H(z<*hPrGYsT!4g_C`rI>c|96Mfn8F1u5Sc&?M1OJkfnOKWbQSSY z6uoZ8_ks0P@`{uH0Dd&)iHJ8~GokjwCNdBTjL~Gx8shSCLo}Yq}75vhaas*#Aem zuMQy($*FNhWGzcW$JJ@33kgLS3lX@6|26*o2-g5*Ul{)qn-`|Jfiyn=P6%45(C!Pj z9omiXwS)fxUrOo?^da1e;A-nGtKmx$j}TiyLKEg05Wh@PS$v^(F|Y%^>w{w#Vk_as zf^!!CP`d<8;Fo2-j*%3d1=RY-1Rk>Xork=S#9o%Lj9^sOvXKtB_8|V4AzQ}IW|P=~ z_20%TjBhA~!&(~FCE&%S@mK`9Q)dwCI^;BDJ%%~v)Bkbmy6-Fkp4K)mN9VU}J`0iP zJlC??2)(D-loXi7ZpI@x!kRlnY#Boq8GlXkvv8tqSs!8aC+{jb|8HFXj1UV!DoJn$ z$zMsDY1gs{^WFIS!;$S_}sxWAD13|<-LBgl`*NKXD_ zH2=g`1}qO>R*~G;G?9pTn}CPqRCMhJGXq>m5}Fizo5XTF@ozmivv zV!shPkLWn!_pEVg|7knd{0Z{{@Hdes>wu2eISrqyB}unwK-S9yl7tbONh}`%QSt4i zNF+u9e6#T#MpV|`0oPXw#D}+)F~^R(0lv8uEDhd(SCNx@Pkv!?x9De>vQ{{LV>hyc z4!BmaZbf2x6G~%#!5aKsz;JLZ>`6n%;BVuSgteu54VL|C z$2HLsmLM>Rc_~DfkyHU*GUf+qG}IQ*gzP!F_Zf{T@&~&NCyo_52d5W4nV-=ae_2LK z<{j_{_CLXje#5yFXAtZ5h&*AQl-(p_#G#>=V5p^{SX+vw0S_Wrk_IagzhS9JgJ(T0tnoCF4SWVi)`|kRXs$1uiH^&)(PCF9 z)Q94)Kv^FL0w3e!PfX5oR-0(%0lF1*O4@%eipqwO=wU~15d59dh;f~QRY|_YJcuS^ z(byok=>o|-s^q329+Oyd=1cHrX5N*&x8UDs-l6bs;4Jc@z}d(8Ht~pH3cdfYBWXRO zEkzzf7(#~~86`+aYrA3kKkLRUKH@nT9XO5hG$6YQ{s;dOTBj(mh|PrBW4Nt}M?*Iu z@eS0K`4S;;+?fYHZYBWNH4vN!F$+y?V#wYwnj%^Uk+Br|3TF|8WdD#*dsNURz2 zgXF{jyQ3*PM(iui-_wrF{-(i4`0Iif^)rlcR%i(wJz!o6v7e02Bn(6B0;3YK?!-=q z5o(4&RSF%z7m3C{BRatfCnNs=ji)3wn^=APqltG#NA?xXm73_2&ghVDK&Xqe<@6d4 z;`p-Ri9vc1(i@X9k<>CU22wJt#f4KBe*t*1gpB*B$fn_!y&?CtZLyGD$Pc!T#X1JL zJ;8se^PIY#2(D6r#9WBKMWiYMp*G0`auVBs^KbAdP0fQ7#7HF{``tV}=a)FS+*T$l z7#pQoMEa9a)lOkASO!H8{wDa7M+|&R`Z68OMsz1Tsl`Y~=nk}R_)1csFYNN$r#K$0;4{oFy#}_%6KrHeyo0`8588th-VuJtt8W&QaFCv+fO^AzyZiLhG$jt(TGCp1AA+*g1$> zA_Ii+EHbjI+Cdyj0=-VhHHjgH&+(0ixrRMXv6j{t=7m!le?IUh+mLNXO;($dz3@#V zRtQcJS~_mA7k06S+PR&9dmOH>4U_V;bkPE}NlFoB9}*ryEDi!qm=9*&$frfN0>je2J zzT^~2ZN4Lx)YEoQ#L#brbHhE2ZxfgVY)lguE!K(oWaD2&Zw0loF)Hg<42Dv$2jW-R zMP`Vhwuwm{TMuS8zae%RUk@-YB5RrdNBk)TWkao)vtn(hr}Z$#CK?zAzaY4UF&&@o zKUWIG8Zgo_LM=U$jI0wOzLe8w0amje%%#~kcFAhd*hF?BYhov)c^eA3$%$y1(^LJB%+EiGFLKm=#}*Xm5lJ7|HS2(+cUvDTpyZ$X}kP;%Sxf2`-> zABe94JIED=`^|K^5?c*_Iio8LWn~?ad1-JiIlsf($$TqgjDFX7J|cf1d>%(L#7{9F z16GDyjFE|5jzmayh!Iy4EUJprbf`^+v(8RrD+MbPuY{)TJvy@c_(Ra|Y3XBY!#k=Ag`1AAvrQI$DuyB+Kry^Bo9GVh05opGeBUmjOwW$!d+40Lao-qNEKa9_B$63*u6)zrz2g2J0uQ7T_@ik#yhoXbP{oqmZX0s7l zQ5qOVtv2NNW{}*2q!x@e?5HwrYfTW6-9+@09Zzl=JH|W(Lb7WJpJq&kBb&l_ zL2Nq>{Rb}(MaLL-ErqKw?_u0@>^v7E0k!@`Bh>!Y&j}tad*}gAV+32 zH{p>M&rH!TcI;2#{Q{>iIn|hVBd&iV>FRF8{nqUZ zP9r1!k|frGT!5so_BZ@kG%_fRKOPOPr*KO)a>B?_@NGtO8~*X+gkub`lWvc`%r^+f zKqmVcvzgzp?iKvX_)bzjgpLvGK{HL%81w1iZep?-6qO~R;mZ_kNn@ArJs{qjocX#O z#IKOE2mNrwN}w@G|K4pNgta6LA=rlb2(TQ41rYZ#ULl&3bt_`Uz~zV*#b1CzlUd7Z z*-0G4FB^qMBls~X+>qEIiYV2=9ODlGhr`h{Vr^DZB)3W8!^jv^5)=LIWQ1T2Ny&8}j8P z=@`yDBxS;pI!xuW5NDGd!Ma!I0c%+#xU$>`KZSR}IGw;Twt-+ckBBR!6!?l7tKc@k zUjsa^zc+H%x*cYM0aZSHfp7=0`0T71O%?}bW7$QhwZ)eQ^>6G_mK2Rj6wkyMssi|i zhB*y!;t+dd8vgKH|3oA&q`N63Oa*1d5&gvqYTegFV%hEwgo%~5-3HkSMCAti3(YUA z7b+P$&U`SwRbiTGPQ4WR{C}-E4_fgL2yTEpouoOCYJm?CdCw`VXNPr(CA1xsfx8d? zO8kexXlNxPb_sq#^6u&stijmKWjWzpfVT&p?<+wtXLJY=Uo!0(93 zW`V!r>p;O3_=}MfYWvAO%_gqH$;kW+99cZH|A3o@#zXB0b@S@yL~9^5X0*jIlcX;Q zy6u=n9&RFU@fWmX@5sCXV==`_;LFR1O3~ETd}M1@`4PArZY%tPMr0|-dq|DNq2DL| zB}~DO2=9ZGo}@x_Et`WcGZ-CSBNK@)9-LG7M}lR+{uX1(f3l#De7}fdU6>!WSVY#D zY$L_=eZms#(2wva1Z86&WM(Hnz@CiaoXliv@U)%AWQQ8~Yp!dUABNY}@(b${QEa0X zEJwUOdEMd2vY-`?`5cCC9)-$=>AJj$%%G@jCW!;U3+x~>&8{TLYdaeW=a%vB!h6WN zM<9#WcDVbAeWsZ+6r9AE&-!<}G<)Iq)6a?jMDQ)-3?y&GDf`a+0K`mSSUY2lu7m%p z6@Cd}yfyTc%{*f?rPwDpe=!ab+lTKnxksqA(HfBMY<-_FtQF!qHio>2@s2yz+b(qt0W9r3qgv_L;GV*@$=sA<*LreB!I z36d&6Oi8c>^H5uii0lo?vfC6}OJYU}tOBd!tBCIv@zTsE;ERpsU+DZoqaozKM|Y!& zVrMxCSz!OWAl|S79Uvt#Qa>8#Z^YhUSz;$BFx?tEO2HlEUBcHQ%&}fUcmmuyG|>jm z`amfjH*tb9wCdBdXPd6QgL`-A(#HR9WcLMcNP!sc68>#5+#4eJLlU^ddqXxPcApCw znZ(^Za+$br*~3pH|Qv&*T5EuzO_qkO`&Sas7Ks zxu-<&FRJS9n$n-VyZcF0|FOaD7IFPWr@3c)LLSXx8_-N~c)>-pU=J^oR<-Fd@@d_U+O>YsSX9m^e(^@w}A z|H=`!KT^nwv+kJwM`zv7JpO0r-M_p2J1@F__4o^1ac>IpC%oy-5GADNV|S{Mm5v^&SC2SGgZ9vzf zOS-h_dUS)U`tdm(S|6L&xlPw@A&Z-M68if#@!X2)AJNhCESi6Re@|79zvV#B&|GHh(ty@IyLAk1-J-XDY&!39ufK98?<=>zL>BJ} zk3Uv+Z@X}-cI5F!54m5;n>u>!U%LnQ>C~<3v5DHCzj$fyEVrLO5#1xAe^(Xn;F$jD zO}$AY`A@a;#*7v+w2#*xGPtidYe?mO-aH{$`*~ydzxMU64GL*K$eYsNY>>CJ+uw7D z_jw|J>)GDmAphL?-g-g)a7(-$-R@2yEe3gm{aKcIvjs)(+9J4Lo0fe-uS{racked_instance_count} " @@ -5971,7 +6493,7 @@ msgstr "" "Nelze nastavit výšku 0U: Nalezeno {racked_instance_count} " "instancí již namontované v regálech." -#: netbox/dcim/models/devices.py:331 +#: netbox/dcim/models/devices.py:332 msgid "" "Must delete all device bay templates associated with this device before " "declassifying it as a parent device." @@ -5979,155 +6501,155 @@ msgstr "" "Před odtajněním jako nadřazeného zařízení je nutné odstranit všechny šablony" " rozmístění zařízení přidružené k tomuto zařízení." -#: netbox/dcim/models/devices.py:337 +#: netbox/dcim/models/devices.py:338 msgid "Child device types must be 0U." msgstr "Typ dětského zařízení musí být 0U." -#: netbox/dcim/models/devices.py:411 +#: netbox/dcim/models/devices.py:413 msgid "module type" msgstr "typ modulu" -#: netbox/dcim/models/devices.py:412 +#: netbox/dcim/models/devices.py:414 msgid "module types" msgstr "typy modulů" -#: netbox/dcim/models/devices.py:485 +#: netbox/dcim/models/devices.py:484 msgid "Virtual machines may be assigned to this role" msgstr "Virtuální počítače mohou být přiřazeny k této roli" -#: netbox/dcim/models/devices.py:497 +#: netbox/dcim/models/devices.py:496 msgid "device role" msgstr "role zařízení" -#: netbox/dcim/models/devices.py:498 +#: netbox/dcim/models/devices.py:497 msgid "device roles" msgstr "role zařízení" -#: netbox/dcim/models/devices.py:515 +#: netbox/dcim/models/devices.py:511 msgid "Optionally limit this platform to devices of a certain manufacturer" msgstr "Volitelně omezit tuto platformu na zařízení určitého výrobce" -#: netbox/dcim/models/devices.py:527 +#: netbox/dcim/models/devices.py:523 msgid "platform" msgstr "platforma" -#: netbox/dcim/models/devices.py:528 +#: netbox/dcim/models/devices.py:524 msgid "platforms" msgstr "platformy" -#: netbox/dcim/models/devices.py:576 +#: netbox/dcim/models/devices.py:572 msgid "The function this device serves" msgstr "Funkce, kterou toto zařízení slouží" -#: netbox/dcim/models/devices.py:608 +#: netbox/dcim/models/devices.py:599 msgid "Chassis serial number, assigned by the manufacturer" msgstr "Sériové číslo podvozku přidělené výrobcem" -#: netbox/dcim/models/devices.py:616 netbox/dcim/models/devices.py:1189 +#: netbox/dcim/models/devices.py:607 netbox/dcim/models/devices.py:1197 msgid "A unique tag used to identify this device" msgstr "Jedinečná značka použitá k identifikaci tohoto zařízení" -#: netbox/dcim/models/devices.py:643 +#: netbox/dcim/models/devices.py:634 msgid "position (U)" msgstr "poloha (U)" -#: netbox/dcim/models/devices.py:650 +#: netbox/dcim/models/devices.py:642 msgid "rack face" msgstr "plocha stojanu" -#: netbox/dcim/models/devices.py:670 netbox/dcim/models/devices.py:1420 -#: netbox/virtualization/models/virtualmachines.py:100 +#: netbox/dcim/models/devices.py:663 netbox/dcim/models/devices.py:1425 +#: netbox/virtualization/models/virtualmachines.py:95 msgid "primary IPv4" msgstr "primární IPv4" -#: netbox/dcim/models/devices.py:678 netbox/dcim/models/devices.py:1428 -#: netbox/virtualization/models/virtualmachines.py:108 +#: netbox/dcim/models/devices.py:671 netbox/dcim/models/devices.py:1433 +#: netbox/virtualization/models/virtualmachines.py:103 msgid "primary IPv6" msgstr "primární IPv6" -#: netbox/dcim/models/devices.py:686 +#: netbox/dcim/models/devices.py:679 msgid "out-of-band IP" msgstr "IP mimo pásmo" -#: netbox/dcim/models/devices.py:703 +#: netbox/dcim/models/devices.py:696 msgid "VC position" msgstr "Pozice VC" -#: netbox/dcim/models/devices.py:706 +#: netbox/dcim/models/devices.py:699 msgid "Virtual chassis position" msgstr "Virtuální poloha podvozku" -#: netbox/dcim/models/devices.py:709 +#: netbox/dcim/models/devices.py:702 msgid "VC priority" msgstr "Priorita VC" -#: netbox/dcim/models/devices.py:713 +#: netbox/dcim/models/devices.py:706 msgid "Virtual chassis master election priority" msgstr "Priorita volby hlavního virtuálního šasi" -#: netbox/dcim/models/devices.py:716 netbox/dcim/models/sites.py:207 +#: netbox/dcim/models/devices.py:709 netbox/dcim/models/sites.py:208 msgid "latitude" msgstr "zeměpisná šířka" -#: netbox/dcim/models/devices.py:721 netbox/dcim/models/devices.py:729 -#: netbox/dcim/models/sites.py:212 netbox/dcim/models/sites.py:220 +#: netbox/dcim/models/devices.py:714 netbox/dcim/models/devices.py:722 +#: netbox/dcim/models/sites.py:213 netbox/dcim/models/sites.py:221 msgid "GPS coordinate in decimal format (xx.yyyyyy)" msgstr "Souřadnice GPS v desetinném formátu (xx.rrrrrr)" -#: netbox/dcim/models/devices.py:724 netbox/dcim/models/sites.py:215 +#: netbox/dcim/models/devices.py:717 netbox/dcim/models/sites.py:216 msgid "longitude" msgstr "zeměpisná délka" -#: netbox/dcim/models/devices.py:797 +#: netbox/dcim/models/devices.py:790 msgid "Device name must be unique per site." msgstr "Název zařízení musí být pro každou lokalitu jedinečný." -#: netbox/dcim/models/devices.py:808 netbox/ipam/models/services.py:75 +#: netbox/dcim/models/devices.py:801 netbox/ipam/models/services.py:71 msgid "device" msgstr "zařízení" -#: netbox/dcim/models/devices.py:809 +#: netbox/dcim/models/devices.py:802 msgid "devices" msgstr "zařízení" -#: netbox/dcim/models/devices.py:835 +#: netbox/dcim/models/devices.py:821 #, python-brace-format msgid "Rack {rack} does not belong to site {site}." msgstr "Stojan {rack} nepatří k webu {site}." -#: netbox/dcim/models/devices.py:840 +#: netbox/dcim/models/devices.py:826 #, python-brace-format msgid "Location {location} does not belong to site {site}." msgstr "Lokace {location} nepatří k webu {site}." -#: netbox/dcim/models/devices.py:846 +#: netbox/dcim/models/devices.py:832 #, python-brace-format msgid "Rack {rack} does not belong to location {location}." msgstr "Stojan {rack} nepatří do lokality {location}." -#: netbox/dcim/models/devices.py:853 +#: netbox/dcim/models/devices.py:839 msgid "Cannot select a rack face without assigning a rack." msgstr "Nelze vybrat plochu stojanu bez přiřazení stojanu." -#: netbox/dcim/models/devices.py:857 +#: netbox/dcim/models/devices.py:843 msgid "Cannot select a rack position without assigning a rack." msgstr "Bez přiřazení stojanu nelze vybrat polohu stojanu." -#: netbox/dcim/models/devices.py:863 +#: netbox/dcim/models/devices.py:849 msgid "Position must be in increments of 0.5 rack units." msgstr "Poloha musí být v krocích po 0,5 regálových jednotek." -#: netbox/dcim/models/devices.py:867 +#: netbox/dcim/models/devices.py:853 msgid "Must specify rack face when defining rack position." msgstr "Při definování polohy stojanu je nutné zadat plochu stojanu." -#: netbox/dcim/models/devices.py:875 +#: netbox/dcim/models/devices.py:861 #, python-brace-format msgid "" "A 0U device type ({device_type}) cannot be assigned to a rack position." msgstr "Typ zařízení 0U ({device_type}) nelze přiřadit k poloze stojanu." -#: netbox/dcim/models/devices.py:886 +#: netbox/dcim/models/devices.py:872 msgid "" "Child device types cannot be assigned to a rack face. This is an attribute " "of the parent device." @@ -6135,7 +6657,7 @@ msgstr "" "Podřízené typy zařízení nelze přiřadit k ploše stojanu. Toto je atribut " "nadřazeného zařízení." -#: netbox/dcim/models/devices.py:893 +#: netbox/dcim/models/devices.py:879 msgid "" "Child device types cannot be assigned to a rack position. This is an " "attribute of the parent device." @@ -6143,7 +6665,7 @@ msgstr "" "Podřízené typy zařízení nelze přiřadit k poloze stojanu. Toto je atribut " "nadřazeného zařízení." -#: netbox/dcim/models/devices.py:907 +#: netbox/dcim/models/devices.py:893 #, python-brace-format msgid "" "U{position} is already occupied or does not have sufficient space to " @@ -6152,22 +6674,22 @@ msgstr "" "U{position} je již obsazeno nebo nemá dostatek místa pro umístění tohoto " "typu zařízení: {device_type} ({u_height}U)" -#: netbox/dcim/models/devices.py:922 +#: netbox/dcim/models/devices.py:908 #, python-brace-format msgid "{ip} is not an IPv4 address." msgstr "{ip} Nejedná se o IPv4 adresu." -#: netbox/dcim/models/devices.py:931 netbox/dcim/models/devices.py:946 +#: netbox/dcim/models/devices.py:920 netbox/dcim/models/devices.py:938 #, python-brace-format msgid "The specified IP address ({ip}) is not assigned to this device." msgstr "Zadaná adresa IP ({ip}) není přiřazen k tomuto zařízení." -#: netbox/dcim/models/devices.py:937 +#: netbox/dcim/models/devices.py:926 #, python-brace-format msgid "{ip} is not an IPv6 address." msgstr "{ip} Nejedná se o IPv6 adresu." -#: netbox/dcim/models/devices.py:964 +#: netbox/dcim/models/devices.py:956 #, python-brace-format msgid "" "The assigned platform is limited to {platform_manufacturer} device types, " @@ -6176,12 +6698,17 @@ msgstr "" "Přiřazená platforma je omezena na {platform_manufacturer} typy zařízení, ale" " tento typ zařízení patří {devicetype_manufacturer}." -#: netbox/dcim/models/devices.py:975 +#: netbox/dcim/models/devices.py:967 #, python-brace-format msgid "The assigned cluster belongs to a different site ({site})" msgstr "Přiřazený cluster patří do jiné lokality ({site})" -#: netbox/dcim/models/devices.py:983 +#: netbox/dcim/models/devices.py:974 +#, python-brace-format +msgid "The assigned cluster belongs to a different location ({location})" +msgstr "Přiřazený cluster patří do jiného umístění ({location})" + +#: netbox/dcim/models/devices.py:982 msgid "A device assigned to a virtual chassis must have its position defined." msgstr "Zařízení přiřazené k virtuálnímu šasi musí mít definovanou polohu." @@ -6194,15 +6721,15 @@ msgstr "" "Zařízení nelze odebrat z virtuálního šasi {virtual_chassis} protože je v " "současné době označen jako jeho pán." -#: netbox/dcim/models/devices.py:1196 +#: netbox/dcim/models/devices.py:1204 msgid "module" msgstr "modul" -#: netbox/dcim/models/devices.py:1197 +#: netbox/dcim/models/devices.py:1205 msgid "modules" msgstr "moduly" -#: netbox/dcim/models/devices.py:1213 +#: netbox/dcim/models/devices.py:1218 #, python-brace-format msgid "" "Module must be installed within a module bay belonging to the assigned " @@ -6210,22 +6737,22 @@ msgid "" msgstr "" "Modul musí být instalován v modulu patřící přiřazenému zařízení ({device})." -#: netbox/dcim/models/devices.py:1339 +#: netbox/dcim/models/devices.py:1346 msgid "domain" msgstr "doména" -#: netbox/dcim/models/devices.py:1352 netbox/dcim/models/devices.py:1353 +#: netbox/dcim/models/devices.py:1359 netbox/dcim/models/devices.py:1360 msgid "virtual chassis" msgstr "virtuální podvozek" -#: netbox/dcim/models/devices.py:1368 +#: netbox/dcim/models/devices.py:1372 #, python-brace-format msgid "" "The selected master ({master}) is not assigned to this virtual chassis." msgstr "" "Vybraný master ({master}) není přiřazena k tomuto virtuálnímu podvozku." -#: netbox/dcim/models/devices.py:1384 +#: netbox/dcim/models/devices.py:1388 #, python-brace-format msgid "" "Unable to delete virtual chassis {self}. There are member interfaces which " @@ -6234,50 +6761,61 @@ msgstr "" "Nelze odstranit virtuální šasi {self}. Existují členská rozhraní, která " "tvoří rozhraní LAG napříč podvozky." -#: netbox/dcim/models/devices.py:1409 netbox/vpn/models/l2vpn.py:37 +#: netbox/dcim/models/devices.py:1414 netbox/vpn/models/l2vpn.py:37 msgid "identifier" msgstr "identifikátor" -#: netbox/dcim/models/devices.py:1410 +#: netbox/dcim/models/devices.py:1415 msgid "Numeric identifier unique to the parent device" msgstr "Numerický identifikátor jedinečný pro nadřazené zařízení" -#: netbox/dcim/models/devices.py:1438 netbox/extras/models/customfields.py:225 +#: netbox/dcim/models/devices.py:1443 netbox/extras/models/customfields.py:225 #: netbox/extras/models/models.py:107 netbox/extras/models/models.py:694 -#: netbox/netbox/models/__init__.py:115 +#: netbox/netbox/models/__init__.py:120 msgid "comments" msgstr "komentáře" -#: netbox/dcim/models/devices.py:1454 +#: netbox/dcim/models/devices.py:1459 msgid "virtual device context" msgstr "kontext virtuálního zařízení" -#: netbox/dcim/models/devices.py:1455 +#: netbox/dcim/models/devices.py:1460 msgid "virtual device contexts" msgstr "kontexty virtuálních zařízení" -#: netbox/dcim/models/devices.py:1487 +#: netbox/dcim/models/devices.py:1489 #, python-brace-format msgid "{ip} is not an IPv{family} address." msgstr "{ip} není IPV{family} adresa." -#: netbox/dcim/models/devices.py:1493 +#: netbox/dcim/models/devices.py:1495 msgid "Primary IP address must belong to an interface on the assigned device." msgstr "Primární IP adresa musí patřit k rozhraní na přiřazeném zařízení." -#: netbox/dcim/models/mixins.py:15 netbox/extras/models/configs.py:41 -#: netbox/extras/models/models.py:313 netbox/extras/models/models.py:522 -#: netbox/extras/models/search.py:48 netbox/ipam/models/ip.py:194 -msgid "weight" -msgstr "váha" +#: netbox/dcim/models/devices.py:1527 +msgid "MAC addresses" +msgstr "MAC adresy" -#: netbox/dcim/models/mixins.py:22 -msgid "weight unit" -msgstr "hmotnostní jednotka" +#: netbox/dcim/models/devices.py:1559 +msgid "" +"Cannot unassign MAC Address while it is designated as the primary MAC for an" +" object" +msgstr "" +"Nelze zrušit přiřazení adresy MAC, pokud je určena jako primární MAC pro " +"objekt" -#: netbox/dcim/models/mixins.py:51 -msgid "Must specify a unit when setting a weight" -msgstr "Při nastavování hmotnosti je nutné zadat jednotku" +#: netbox/dcim/models/devices.py:1563 +msgid "" +"Cannot reassign MAC Address while it is designated as the primary MAC for an" +" object" +msgstr "" +"Nelze znovu přiřadit MAC adresu, pokud je určena jako primární MAC pro " +"objekt" + +#: netbox/dcim/models/mixins.py:94 +#, python-brace-format +msgid "Please select a {scope_type}." +msgstr "Vyberte prosím a {scope_type}." #: netbox/dcim/models/power.py:55 msgid "power panel" @@ -6287,49 +6825,49 @@ msgstr "napájecí panel" msgid "power panels" msgstr "napájecí panely" -#: netbox/dcim/models/power.py:70 +#: netbox/dcim/models/power.py:67 #, python-brace-format msgid "" "Location {location} ({location_site}) is in a different site than {site}" msgstr "Lokace {location} ({location_site}) je na jiném místě než {site}" -#: netbox/dcim/models/power.py:108 +#: netbox/dcim/models/power.py:106 msgid "supply" msgstr "zásobování" -#: netbox/dcim/models/power.py:114 +#: netbox/dcim/models/power.py:112 msgid "phase" msgstr "fáze" -#: netbox/dcim/models/power.py:120 +#: netbox/dcim/models/power.py:118 msgid "voltage" msgstr "napětí" -#: netbox/dcim/models/power.py:125 +#: netbox/dcim/models/power.py:123 msgid "amperage" msgstr "proud proudu" -#: netbox/dcim/models/power.py:130 +#: netbox/dcim/models/power.py:128 msgid "max utilization" msgstr "maximální využití" -#: netbox/dcim/models/power.py:133 +#: netbox/dcim/models/power.py:131 msgid "Maximum permissible draw (percentage)" msgstr "Maximální přípustné tažení (v procentech)" -#: netbox/dcim/models/power.py:136 +#: netbox/dcim/models/power.py:134 msgid "available power" msgstr "dostupný výkon" -#: netbox/dcim/models/power.py:164 +#: netbox/dcim/models/power.py:162 msgid "power feed" msgstr "napájecí zdroj" -#: netbox/dcim/models/power.py:165 +#: netbox/dcim/models/power.py:163 msgid "power feeds" msgstr "napájecí zdroje" -#: netbox/dcim/models/power.py:179 +#: netbox/dcim/models/power.py:174 #, python-brace-format msgid "" "Rack {rack} ({rack_site}) and power panel {powerpanel} ({powerpanel_site}) " @@ -6338,55 +6876,55 @@ msgstr "" "Stojan {rack} ({rack_site}) a napájecí panel {powerpanel} " "({powerpanel_site}) jsou na různých místech." -#: netbox/dcim/models/power.py:190 +#: netbox/dcim/models/power.py:185 msgid "Voltage cannot be negative for AC supply" msgstr "Napětí nemůže být záporné pro napájení střídavým proudem" -#: netbox/dcim/models/racks.py:47 +#: netbox/dcim/models/racks.py:46 msgid "width" msgstr "Šířka" -#: netbox/dcim/models/racks.py:48 +#: netbox/dcim/models/racks.py:47 msgid "Rail-to-rail width" msgstr "Šířka kolejnice k kolejnici" -#: netbox/dcim/models/racks.py:56 +#: netbox/dcim/models/racks.py:55 msgid "Height in rack units" msgstr "Výška v regálových jednotkách" -#: netbox/dcim/models/racks.py:60 +#: netbox/dcim/models/racks.py:59 msgid "starting unit" msgstr "startovací jednotka" -#: netbox/dcim/models/racks.py:62 +#: netbox/dcim/models/racks.py:61 msgid "Starting unit for rack" msgstr "Startovací jednotka pro regál" -#: netbox/dcim/models/racks.py:66 +#: netbox/dcim/models/racks.py:65 msgid "descending units" msgstr "sestupné jednotky" -#: netbox/dcim/models/racks.py:67 +#: netbox/dcim/models/racks.py:66 msgid "Units are numbered top-to-bottom" msgstr "Jednotky jsou číslovány shora dolů" -#: netbox/dcim/models/racks.py:72 +#: netbox/dcim/models/racks.py:71 msgid "outer width" msgstr "vnější šířka" -#: netbox/dcim/models/racks.py:75 +#: netbox/dcim/models/racks.py:74 msgid "Outer dimension of rack (width)" msgstr "Vnější rozměr stojanu (šířka)" -#: netbox/dcim/models/racks.py:78 +#: netbox/dcim/models/racks.py:77 msgid "outer depth" msgstr "vnější hloubka" -#: netbox/dcim/models/racks.py:81 +#: netbox/dcim/models/racks.py:80 msgid "Outer dimension of rack (depth)" msgstr "Vnější rozměr stojanu (hloubka)" -#: netbox/dcim/models/racks.py:84 +#: netbox/dcim/models/racks.py:83 msgid "outer unit" msgstr "vnější jednotka" @@ -6410,7 +6948,7 @@ msgstr "max. hmotnost" msgid "Maximum load capacity for the rack" msgstr "Maximální nosnost stojanu" -#: netbox/dcim/models/racks.py:125 netbox/dcim/models/racks.py:252 +#: netbox/dcim/models/racks.py:125 netbox/dcim/models/racks.py:247 msgid "form factor" msgstr "tvarový faktor" @@ -6422,55 +6960,55 @@ msgstr "typ stojanu" msgid "rack types" msgstr "typy stojanů" -#: netbox/dcim/models/racks.py:180 netbox/dcim/models/racks.py:379 +#: netbox/dcim/models/racks.py:177 netbox/dcim/models/racks.py:368 msgid "Must specify a unit when setting an outer width/depth" msgstr "Při nastavování vnější šířky/hloubky musí zadat jednotku" -#: netbox/dcim/models/racks.py:184 netbox/dcim/models/racks.py:383 +#: netbox/dcim/models/racks.py:181 netbox/dcim/models/racks.py:372 msgid "Must specify a unit when setting a maximum weight" msgstr "Při nastavování maximální hmotnosti musí specifikovat jednotku" -#: netbox/dcim/models/racks.py:230 +#: netbox/dcim/models/racks.py:227 msgid "rack role" msgstr "role stojanu" -#: netbox/dcim/models/racks.py:231 +#: netbox/dcim/models/racks.py:228 msgid "rack roles" msgstr "role stojanu" -#: netbox/dcim/models/racks.py:274 +#: netbox/dcim/models/racks.py:265 msgid "facility ID" msgstr "ID zařízení" -#: netbox/dcim/models/racks.py:275 +#: netbox/dcim/models/racks.py:266 msgid "Locally-assigned identifier" msgstr "Lokálně přiřazený identifikátor" -#: netbox/dcim/models/racks.py:308 netbox/ipam/forms/bulk_import.py:201 -#: netbox/ipam/forms/bulk_import.py:266 netbox/ipam/forms/bulk_import.py:301 -#: netbox/ipam/forms/bulk_import.py:483 -#: netbox/virtualization/forms/bulk_import.py:112 +#: netbox/dcim/models/racks.py:299 netbox/ipam/forms/bulk_import.py:197 +#: netbox/ipam/forms/bulk_import.py:265 netbox/ipam/forms/bulk_import.py:300 +#: netbox/ipam/forms/bulk_import.py:482 +#: netbox/virtualization/forms/bulk_import.py:118 msgid "Functional role" msgstr "Funkční role" -#: netbox/dcim/models/racks.py:321 +#: netbox/dcim/models/racks.py:312 msgid "A unique tag used to identify this rack" msgstr "Jedinečná značka použitá k identifikaci tohoto stojanu" -#: netbox/dcim/models/racks.py:359 +#: netbox/dcim/models/racks.py:351 msgid "rack" msgstr "nosič" -#: netbox/dcim/models/racks.py:360 +#: netbox/dcim/models/racks.py:352 msgid "racks" msgstr "regály" -#: netbox/dcim/models/racks.py:375 +#: netbox/dcim/models/racks.py:364 #, python-brace-format msgid "Assigned location must belong to parent site ({site})." msgstr "Přiřazené umístění musí patřit nadřazenému webu ({site})." -#: netbox/dcim/models/racks.py:393 +#: netbox/dcim/models/racks.py:387 #, python-brace-format msgid "" "Rack must be at least {min_height}U tall to house currently installed " @@ -6479,7 +7017,7 @@ msgstr "" "Stojan musí být alespoň {min_height}U vysoký k uložení aktuálně " "nainstalovaných zařízení." -#: netbox/dcim/models/racks.py:400 +#: netbox/dcim/models/racks.py:396 #, python-brace-format msgid "" "Rack unit numbering must begin at {position} or less to house currently " @@ -6488,118 +7026,118 @@ msgstr "" "Číslování regálových jednotek musí začínat na {position} nebo méně pro " "umístění aktuálně nainstalovaných zařízení." -#: netbox/dcim/models/racks.py:408 +#: netbox/dcim/models/racks.py:404 #, python-brace-format msgid "Location must be from the same site, {site}." msgstr "Umístění musí být ze stejného místa, {site}." -#: netbox/dcim/models/racks.py:670 +#: netbox/dcim/models/racks.py:666 msgid "units" msgstr "jednotky" -#: netbox/dcim/models/racks.py:696 +#: netbox/dcim/models/racks.py:692 msgid "rack reservation" msgstr "rezervace stojanu" -#: netbox/dcim/models/racks.py:697 +#: netbox/dcim/models/racks.py:693 msgid "rack reservations" msgstr "rezervace stojanů" -#: netbox/dcim/models/racks.py:714 +#: netbox/dcim/models/racks.py:707 #, python-brace-format msgid "Invalid unit(s) for {height}U rack: {unit_list}" msgstr "Neplatná jednotka (y) pro {height}U stojan: {unit_list}" -#: netbox/dcim/models/racks.py:727 +#: netbox/dcim/models/racks.py:720 #, python-brace-format msgid "The following units have already been reserved: {unit_list}" msgstr "Následující jednotky již byly rezervovány: {unit_list}" -#: netbox/dcim/models/sites.py:49 +#: netbox/dcim/models/sites.py:53 msgid "A top-level region with this name already exists." msgstr "Oblast nejvyšší úrovně s tímto názvem již existuje." -#: netbox/dcim/models/sites.py:59 +#: netbox/dcim/models/sites.py:63 msgid "A top-level region with this slug already exists." msgstr "Oblast nejvyšší úrovně s tímto slimákem již existuje." -#: netbox/dcim/models/sites.py:62 +#: netbox/dcim/models/sites.py:66 msgid "region" msgstr "region" -#: netbox/dcim/models/sites.py:63 +#: netbox/dcim/models/sites.py:67 msgid "regions" msgstr "regiony" -#: netbox/dcim/models/sites.py:102 +#: netbox/dcim/models/sites.py:109 msgid "A top-level site group with this name already exists." msgstr "Skupina webů nejvyšší úrovně s tímto názvem již existuje." -#: netbox/dcim/models/sites.py:112 +#: netbox/dcim/models/sites.py:119 msgid "A top-level site group with this slug already exists." msgstr "Skupina webů nejvyšší úrovně s tímto slimákem již existuje." -#: netbox/dcim/models/sites.py:115 +#: netbox/dcim/models/sites.py:122 msgid "site group" msgstr "skupina stránek" -#: netbox/dcim/models/sites.py:116 +#: netbox/dcim/models/sites.py:123 msgid "site groups" msgstr "skupiny webů" -#: netbox/dcim/models/sites.py:141 +#: netbox/dcim/models/sites.py:145 msgid "Full name of the site" msgstr "Úplný název webu" -#: netbox/dcim/models/sites.py:181 netbox/dcim/models/sites.py:279 +#: netbox/dcim/models/sites.py:181 netbox/dcim/models/sites.py:283 msgid "facility" msgstr "zařízení" -#: netbox/dcim/models/sites.py:184 netbox/dcim/models/sites.py:282 +#: netbox/dcim/models/sites.py:184 netbox/dcim/models/sites.py:286 msgid "Local facility ID or description" msgstr "ID nebo popis místního zařízení" -#: netbox/dcim/models/sites.py:195 +#: netbox/dcim/models/sites.py:196 msgid "physical address" msgstr "fyzická adresa" -#: netbox/dcim/models/sites.py:198 +#: netbox/dcim/models/sites.py:199 msgid "Physical location of the building" msgstr "Fyzické umístění budovy" -#: netbox/dcim/models/sites.py:201 +#: netbox/dcim/models/sites.py:202 msgid "shipping address" msgstr "dodací adresa" -#: netbox/dcim/models/sites.py:204 +#: netbox/dcim/models/sites.py:205 msgid "If different from the physical address" msgstr "Pokud se liší od fyzické adresy" -#: netbox/dcim/models/sites.py:238 +#: netbox/dcim/models/sites.py:245 msgid "site" msgstr "stránky" -#: netbox/dcim/models/sites.py:239 +#: netbox/dcim/models/sites.py:246 msgid "sites" msgstr "stránky" -#: netbox/dcim/models/sites.py:309 +#: netbox/dcim/models/sites.py:319 msgid "A location with this name already exists within the specified site." msgstr "Umístění s tímto názvem již existuje v zadaném webu." -#: netbox/dcim/models/sites.py:319 +#: netbox/dcim/models/sites.py:329 msgid "A location with this slug already exists within the specified site." msgstr "Umístění s tímto slimákem již existuje v zadaném webu." -#: netbox/dcim/models/sites.py:322 +#: netbox/dcim/models/sites.py:332 msgid "location" msgstr "lokace" -#: netbox/dcim/models/sites.py:323 +#: netbox/dcim/models/sites.py:333 msgid "locations" msgstr "lokalitách" -#: netbox/dcim/models/sites.py:337 +#: netbox/dcim/models/sites.py:344 #, python-brace-format msgid "Parent location ({parent}) must belong to the same site ({site})." msgstr "Rodičovská lokalita ({parent}) musí patřit ke stejnému webu ({site})." @@ -6612,11 +7150,11 @@ msgstr "Ukončení A" msgid "Termination B" msgstr "Ukončení B" -#: netbox/dcim/tables/cables.py:66 netbox/wireless/tables/wirelesslink.py:23 +#: netbox/dcim/tables/cables.py:66 netbox/wireless/tables/wirelesslink.py:22 msgid "Device A" msgstr "Zařízení A" -#: netbox/dcim/tables/cables.py:72 netbox/wireless/tables/wirelesslink.py:32 +#: netbox/dcim/tables/cables.py:72 netbox/wireless/tables/wirelesslink.py:31 msgid "Device B" msgstr "Zařízení B" @@ -6650,97 +7188,91 @@ msgstr "Místo B" msgid "Reachable" msgstr "Dosažitelný" -#: netbox/dcim/tables/devices.py:58 netbox/dcim/tables/devices.py:106 -#: netbox/dcim/tables/racks.py:150 netbox/dcim/tables/sites.py:105 -#: netbox/dcim/tables/sites.py:148 netbox/extras/tables/tables.py:545 +#: netbox/dcim/tables/devices.py:69 netbox/dcim/tables/devices.py:117 +#: netbox/dcim/tables/racks.py:149 netbox/dcim/tables/sites.py:104 +#: netbox/dcim/tables/sites.py:147 netbox/extras/tables/tables.py:545 #: netbox/netbox/navigation/menu.py:69 netbox/netbox/navigation/menu.py:73 #: netbox/netbox/navigation/menu.py:75 #: netbox/virtualization/forms/model_forms.py:122 -#: netbox/virtualization/tables/clusters.py:83 -#: netbox/virtualization/views.py:204 +#: netbox/virtualization/tables/clusters.py:87 +#: netbox/virtualization/views.py:216 msgid "Devices" msgstr "Přístroje" -#: netbox/dcim/tables/devices.py:63 netbox/dcim/tables/devices.py:111 -#: netbox/virtualization/tables/clusters.py:88 +#: netbox/dcim/tables/devices.py:74 netbox/dcim/tables/devices.py:122 +#: netbox/virtualization/tables/clusters.py:92 msgid "VMs" msgstr "Virtuální stroje" -#: netbox/dcim/tables/devices.py:100 netbox/dcim/tables/devices.py:216 -#: netbox/extras/forms/model_forms.py:630 +#: netbox/dcim/tables/devices.py:111 netbox/dcim/tables/devices.py:227 +#: netbox/extras/forms/model_forms.py:644 #: netbox/templates/dcim/device.html:112 -#: netbox/templates/dcim/device/render_config.html:11 -#: netbox/templates/dcim/device/render_config.html:14 #: netbox/templates/dcim/devicerole.html:44 #: netbox/templates/dcim/platform.html:41 #: netbox/templates/extras/configtemplate.html:10 +#: netbox/templates/extras/object_render_config.html:12 +#: netbox/templates/extras/object_render_config.html:15 #: netbox/templates/virtualization/virtualmachine.html:48 -#: netbox/templates/virtualization/virtualmachine/render_config.html:11 -#: netbox/templates/virtualization/virtualmachine/render_config.html:14 -#: netbox/virtualization/tables/virtualmachines.py:107 +#: netbox/virtualization/tables/virtualmachines.py:77 msgid "Config Template" msgstr "Konfigurační šablona" -#: netbox/dcim/tables/devices.py:150 netbox/templates/dcim/sitegroup.html:26 -msgid "Site Group" -msgstr "Skupina stránek" - -#: netbox/dcim/tables/devices.py:187 netbox/dcim/tables/devices.py:1068 -#: netbox/ipam/forms/bulk_import.py:527 netbox/ipam/forms/model_forms.py:306 -#: netbox/ipam/forms/model_forms.py:319 netbox/ipam/tables/ip.py:356 -#: netbox/ipam/tables/ip.py:423 netbox/ipam/tables/ip.py:446 +#: netbox/dcim/tables/devices.py:198 netbox/dcim/tables/devices.py:1100 +#: netbox/ipam/forms/bulk_import.py:562 netbox/ipam/forms/model_forms.py:316 +#: netbox/ipam/forms/model_forms.py:329 netbox/ipam/tables/ip.py:308 +#: netbox/ipam/tables/ip.py:375 netbox/ipam/tables/ip.py:398 #: netbox/templates/ipam/ipaddress.html:11 -#: netbox/virtualization/tables/virtualmachines.py:95 +#: netbox/virtualization/tables/virtualmachines.py:65 msgid "IP Address" msgstr "IP adresa" -#: netbox/dcim/tables/devices.py:191 netbox/dcim/tables/devices.py:1072 -#: netbox/virtualization/tables/virtualmachines.py:86 +#: netbox/dcim/tables/devices.py:202 netbox/dcim/tables/devices.py:1104 +#: netbox/virtualization/tables/virtualmachines.py:56 msgid "IPv4 Address" msgstr "IPv4 Adresa" -#: netbox/dcim/tables/devices.py:195 netbox/dcim/tables/devices.py:1076 -#: netbox/virtualization/tables/virtualmachines.py:90 +#: netbox/dcim/tables/devices.py:206 netbox/dcim/tables/devices.py:1108 +#: netbox/virtualization/tables/virtualmachines.py:60 msgid "IPv6 Address" msgstr "Adresa IPv6" -#: netbox/dcim/tables/devices.py:210 +#: netbox/dcim/tables/devices.py:221 msgid "VC Position" msgstr "Pozice VC" -#: netbox/dcim/tables/devices.py:213 +#: netbox/dcim/tables/devices.py:224 msgid "VC Priority" msgstr "Priorita VC" -#: netbox/dcim/tables/devices.py:220 netbox/templates/dcim/device_edit.html:38 +#: netbox/dcim/tables/devices.py:231 netbox/templates/dcim/device_edit.html:38 #: netbox/templates/dcim/devicebay_populate.html:16 msgid "Parent Device" msgstr "Rodičovské zařízení" -#: netbox/dcim/tables/devices.py:225 +#: netbox/dcim/tables/devices.py:236 msgid "Position (Device Bay)" msgstr "Pozice (pole pro zařízení)" -#: netbox/dcim/tables/devices.py:234 +#: netbox/dcim/tables/devices.py:245 msgid "Console ports" msgstr "Porty konzoly" -#: netbox/dcim/tables/devices.py:237 +#: netbox/dcim/tables/devices.py:248 msgid "Console server ports" msgstr "Porty konzolového serveru" -#: netbox/dcim/tables/devices.py:240 +#: netbox/dcim/tables/devices.py:251 msgid "Power ports" msgstr "Napájecí porty" -#: netbox/dcim/tables/devices.py:243 +#: netbox/dcim/tables/devices.py:254 msgid "Power outlets" msgstr "Elektrické zásuvky" -#: netbox/dcim/tables/devices.py:246 netbox/dcim/tables/devices.py:1081 -#: netbox/dcim/tables/devicetypes.py:128 netbox/dcim/views.py:1040 -#: netbox/dcim/views.py:1279 netbox/dcim/views.py:1975 -#: netbox/netbox/navigation/menu.py:94 netbox/netbox/navigation/menu.py:250 +#: netbox/dcim/tables/devices.py:257 netbox/dcim/tables/devices.py:1113 +#: netbox/dcim/tables/devicetypes.py:133 netbox/dcim/views.py:1144 +#: netbox/dcim/views.py:1388 netbox/dcim/views.py:2139 +#: netbox/netbox/navigation/menu.py:94 netbox/netbox/navigation/menu.py:258 #: netbox/templates/dcim/device/base.html:37 #: netbox/templates/dcim/device_list.html:43 #: netbox/templates/dcim/devicetype/base.html:34 @@ -6750,35 +7282,35 @@ msgstr "Elektrické zásuvky" #: netbox/templates/dcim/virtualdevicecontext.html:81 #: netbox/templates/virtualization/virtualmachine/base.html:27 #: netbox/templates/virtualization/virtualmachine_list.html:14 -#: netbox/virtualization/tables/virtualmachines.py:101 -#: netbox/virtualization/views.py:364 netbox/wireless/tables/wirelesslan.py:55 +#: netbox/virtualization/tables/virtualmachines.py:71 +#: netbox/virtualization/views.py:381 netbox/wireless/tables/wirelesslan.py:63 msgid "Interfaces" msgstr "Rozhraní" -#: netbox/dcim/tables/devices.py:249 +#: netbox/dcim/tables/devices.py:260 msgid "Front ports" msgstr "Přední porty" -#: netbox/dcim/tables/devices.py:255 +#: netbox/dcim/tables/devices.py:266 msgid "Device bays" msgstr "Pozice zařízení" -#: netbox/dcim/tables/devices.py:258 +#: netbox/dcim/tables/devices.py:269 msgid "Module bays" msgstr "Modulové pozice" -#: netbox/dcim/tables/devices.py:261 +#: netbox/dcim/tables/devices.py:272 msgid "Inventory items" msgstr "Inventární položky" -#: netbox/dcim/tables/devices.py:305 netbox/dcim/tables/modules.py:57 +#: netbox/dcim/tables/devices.py:315 netbox/dcim/tables/modules.py:57 #: netbox/templates/dcim/modulebay.html:17 msgid "Module Bay" msgstr "Modulová přihrádka" -#: netbox/dcim/tables/devices.py:318 netbox/dcim/tables/devicetypes.py:47 -#: netbox/dcim/tables/devicetypes.py:143 netbox/dcim/views.py:1115 -#: netbox/dcim/views.py:2073 netbox/netbox/navigation/menu.py:103 +#: netbox/dcim/tables/devices.py:328 netbox/dcim/tables/devicetypes.py:52 +#: netbox/dcim/tables/devicetypes.py:148 netbox/dcim/views.py:1219 +#: netbox/dcim/views.py:2237 netbox/netbox/navigation/menu.py:103 #: netbox/templates/dcim/device/base.html:52 #: netbox/templates/dcim/device_list.html:71 #: netbox/templates/dcim/devicetype/base.html:49 @@ -6787,124 +7319,133 @@ msgstr "Modulová přihrádka" msgid "Inventory Items" msgstr "Inventární položky" -#: netbox/dcim/tables/devices.py:333 +#: netbox/dcim/tables/devices.py:343 msgid "Cable Color" msgstr "Barva kabelu" -#: netbox/dcim/tables/devices.py:339 +#: netbox/dcim/tables/devices.py:349 msgid "Link Peers" msgstr "Propojit vrstevníky" -#: netbox/dcim/tables/devices.py:342 +#: netbox/dcim/tables/devices.py:352 msgid "Mark Connected" msgstr "Označit Připojeno" -#: netbox/dcim/tables/devices.py:461 +#: netbox/dcim/tables/devices.py:471 msgid "Maximum draw (W)" msgstr "Maximální tažení (W)" -#: netbox/dcim/tables/devices.py:464 +#: netbox/dcim/tables/devices.py:474 msgid "Allocated draw (W)" msgstr "Přidělené losování (W)" -#: netbox/dcim/tables/devices.py:558 netbox/ipam/forms/model_forms.py:734 -#: netbox/ipam/tables/fhrp.py:28 netbox/ipam/views.py:596 -#: netbox/ipam/views.py:696 netbox/netbox/navigation/menu.py:158 -#: netbox/netbox/navigation/menu.py:160 -#: netbox/templates/dcim/interface.html:339 +#: netbox/dcim/tables/devices.py:572 netbox/ipam/forms/model_forms.py:784 +#: netbox/ipam/tables/fhrp.py:28 netbox/ipam/views.py:633 +#: netbox/ipam/views.py:738 netbox/netbox/navigation/menu.py:164 +#: netbox/netbox/navigation/menu.py:166 +#: netbox/templates/dcim/interface.html:396 #: netbox/templates/ipam/ipaddress_bulk_add.html:15 #: netbox/templates/ipam/service.html:40 -#: netbox/templates/virtualization/vminterface.html:85 +#: netbox/templates/virtualization/vminterface.html:101 #: netbox/vpn/tables/tunnels.py:98 msgid "IP Addresses" msgstr "IP adresy" -#: netbox/dcim/tables/devices.py:564 netbox/netbox/navigation/menu.py:202 +#: netbox/dcim/tables/devices.py:578 netbox/netbox/navigation/menu.py:210 #: netbox/templates/ipam/inc/panels/fhrp_groups.html:6 msgid "FHRP Groups" msgstr "Skupiny FHRP" -#: netbox/dcim/tables/devices.py:576 netbox/templates/dcim/interface.html:89 -#: netbox/templates/virtualization/vminterface.html:67 +#: netbox/dcim/tables/devices.py:590 netbox/templates/dcim/interface.html:95 +#: netbox/templates/virtualization/vminterface.html:59 #: netbox/templates/vpn/tunnel.html:18 #: netbox/templates/vpn/tunneltermination.html:13 #: netbox/vpn/forms/bulk_edit.py:76 netbox/vpn/forms/bulk_import.py:76 #: netbox/vpn/forms/filtersets.py:42 netbox/vpn/forms/filtersets.py:82 -#: netbox/vpn/forms/model_forms.py:60 netbox/vpn/forms/model_forms.py:145 +#: netbox/vpn/forms/model_forms.py:61 netbox/vpn/forms/model_forms.py:146 #: netbox/vpn/tables/tunnels.py:78 msgid "Tunnel" msgstr "Tunel" -#: netbox/dcim/tables/devices.py:604 netbox/dcim/tables/devicetypes.py:227 +#: netbox/dcim/tables/devices.py:626 netbox/dcim/tables/devicetypes.py:234 #: netbox/templates/dcim/interface.html:65 msgid "Management Only" msgstr "Pouze správa" -#: netbox/dcim/tables/devices.py:623 +#: netbox/dcim/tables/devices.py:645 msgid "VDCs" msgstr "VDC" -#: netbox/dcim/tables/devices.py:873 netbox/templates/dcim/modulebay.html:53 +#: netbox/dcim/tables/devices.py:652 netbox/templates/dcim/interface.html:163 +msgid "Virtual Circuit" +msgstr "Virtuální obvod" + +#: netbox/dcim/tables/devices.py:904 netbox/templates/dcim/modulebay.html:53 msgid "Installed Module" msgstr "Instalovaný modul" -#: netbox/dcim/tables/devices.py:876 +#: netbox/dcim/tables/devices.py:907 msgid "Module Serial" msgstr "Sériový modul" -#: netbox/dcim/tables/devices.py:880 +#: netbox/dcim/tables/devices.py:911 msgid "Module Asset Tag" msgstr "Štítek aktiv modulu" -#: netbox/dcim/tables/devices.py:889 +#: netbox/dcim/tables/devices.py:920 msgid "Module Status" msgstr "Stav modulu" -#: netbox/dcim/tables/devices.py:944 netbox/dcim/tables/devicetypes.py:312 -#: netbox/templates/dcim/inventoryitem.html:40 +#: netbox/dcim/tables/devices.py:974 netbox/dcim/tables/devicetypes.py:319 +#: netbox/templates/dcim/inventoryitem.html:44 msgid "Component" msgstr "Komponenta" -#: netbox/dcim/tables/devices.py:1000 +#: netbox/dcim/tables/devices.py:1032 msgid "Items" msgstr "Položky" -#: netbox/dcim/tables/devicetypes.py:37 netbox/netbox/navigation/menu.py:84 +#: netbox/dcim/tables/devicetypes.py:37 netbox/netbox/navigation/menu.py:60 +#: netbox/netbox/navigation/menu.py:62 +msgid "Rack Types" +msgstr "Typy stojanů" + +#: netbox/dcim/tables/devicetypes.py:42 netbox/netbox/navigation/menu.py:84 #: netbox/netbox/navigation/menu.py:86 msgid "Device Types" msgstr "Typy zařízení" -#: netbox/dcim/tables/devicetypes.py:42 netbox/netbox/navigation/menu.py:87 +#: netbox/dcim/tables/devicetypes.py:47 netbox/netbox/navigation/menu.py:87 msgid "Module Types" msgstr "Typy modulů" -#: netbox/dcim/tables/devicetypes.py:52 netbox/extras/forms/filtersets.py:371 -#: netbox/extras/forms/model_forms.py:537 netbox/extras/tables/tables.py:540 +#: netbox/dcim/tables/devicetypes.py:57 netbox/extras/forms/filtersets.py:378 +#: netbox/extras/forms/model_forms.py:551 netbox/extras/tables/tables.py:540 #: netbox/netbox/navigation/menu.py:78 msgid "Platforms" msgstr "Platformy" -#: netbox/dcim/tables/devicetypes.py:84 +#: netbox/dcim/tables/devicetypes.py:89 #: netbox/templates/dcim/devicetype.html:29 msgid "Default Platform" msgstr "Výchozí platforma" -#: netbox/dcim/tables/devicetypes.py:88 +#: netbox/dcim/tables/devicetypes.py:93 #: netbox/templates/dcim/devicetype.html:45 msgid "Full Depth" msgstr "Plná hloubka" -#: netbox/dcim/tables/devicetypes.py:98 +#: netbox/dcim/tables/devicetypes.py:103 msgid "U Height" msgstr "Výška U" -#: netbox/dcim/tables/devicetypes.py:113 netbox/dcim/tables/modules.py:26 +#: netbox/dcim/tables/devicetypes.py:118 netbox/dcim/tables/modules.py:26 #: netbox/dcim/tables/racks.py:89 msgid "Instances" msgstr "Instance" -#: netbox/dcim/tables/devicetypes.py:116 netbox/dcim/views.py:980 -#: netbox/dcim/views.py:1219 netbox/dcim/views.py:1911 +#: netbox/dcim/tables/devicetypes.py:121 netbox/dcim/views.py:1084 +#: netbox/dcim/views.py:1328 netbox/dcim/views.py:2075 #: netbox/netbox/navigation/menu.py:97 #: netbox/templates/dcim/device/base.html:25 #: netbox/templates/dcim/device_list.html:15 @@ -6914,8 +7455,8 @@ msgstr "Instance" msgid "Console Ports" msgstr "Porty konzoly" -#: netbox/dcim/tables/devicetypes.py:119 netbox/dcim/views.py:995 -#: netbox/dcim/views.py:1234 netbox/dcim/views.py:1927 +#: netbox/dcim/tables/devicetypes.py:124 netbox/dcim/views.py:1099 +#: netbox/dcim/views.py:1343 netbox/dcim/views.py:2091 #: netbox/netbox/navigation/menu.py:98 #: netbox/templates/dcim/device/base.html:28 #: netbox/templates/dcim/device_list.html:22 @@ -6925,8 +7466,8 @@ msgstr "Porty konzoly" msgid "Console Server Ports" msgstr "Porty konzolového serveru" -#: netbox/dcim/tables/devicetypes.py:122 netbox/dcim/views.py:1010 -#: netbox/dcim/views.py:1249 netbox/dcim/views.py:1943 +#: netbox/dcim/tables/devicetypes.py:127 netbox/dcim/views.py:1114 +#: netbox/dcim/views.py:1358 netbox/dcim/views.py:2107 #: netbox/netbox/navigation/menu.py:99 #: netbox/templates/dcim/device/base.html:31 #: netbox/templates/dcim/device_list.html:29 @@ -6936,8 +7477,8 @@ msgstr "Porty konzolového serveru" msgid "Power Ports" msgstr "Napájecí porty" -#: netbox/dcim/tables/devicetypes.py:125 netbox/dcim/views.py:1025 -#: netbox/dcim/views.py:1264 netbox/dcim/views.py:1959 +#: netbox/dcim/tables/devicetypes.py:130 netbox/dcim/views.py:1129 +#: netbox/dcim/views.py:1373 netbox/dcim/views.py:2123 #: netbox/netbox/navigation/menu.py:100 #: netbox/templates/dcim/device/base.html:34 #: netbox/templates/dcim/device_list.html:36 @@ -6947,8 +7488,8 @@ msgstr "Napájecí porty" msgid "Power Outlets" msgstr "Napájecí zásuvky" -#: netbox/dcim/tables/devicetypes.py:131 netbox/dcim/views.py:1055 -#: netbox/dcim/views.py:1294 netbox/dcim/views.py:1997 +#: netbox/dcim/tables/devicetypes.py:136 netbox/dcim/views.py:1159 +#: netbox/dcim/views.py:1403 netbox/dcim/views.py:2161 #: netbox/netbox/navigation/menu.py:95 #: netbox/templates/dcim/device/base.html:40 #: netbox/templates/dcim/devicetype/base.html:37 @@ -6957,8 +7498,8 @@ msgstr "Napájecí zásuvky" msgid "Front Ports" msgstr "Přední porty" -#: netbox/dcim/tables/devicetypes.py:134 netbox/dcim/views.py:1070 -#: netbox/dcim/views.py:1309 netbox/dcim/views.py:2013 +#: netbox/dcim/tables/devicetypes.py:139 netbox/dcim/views.py:1174 +#: netbox/dcim/views.py:1418 netbox/dcim/views.py:2177 #: netbox/netbox/navigation/menu.py:96 #: netbox/templates/dcim/device/base.html:43 #: netbox/templates/dcim/device_list.html:50 @@ -6968,16 +7509,16 @@ msgstr "Přední porty" msgid "Rear Ports" msgstr "Zadní porty" -#: netbox/dcim/tables/devicetypes.py:137 netbox/dcim/views.py:1100 -#: netbox/dcim/views.py:2053 netbox/netbox/navigation/menu.py:102 +#: netbox/dcim/tables/devicetypes.py:142 netbox/dcim/views.py:1204 +#: netbox/dcim/views.py:2217 netbox/netbox/navigation/menu.py:102 #: netbox/templates/dcim/device/base.html:49 #: netbox/templates/dcim/device_list.html:57 #: netbox/templates/dcim/devicetype/base.html:46 msgid "Device Bays" msgstr "Pozice pro zařízení" -#: netbox/dcim/tables/devicetypes.py:140 netbox/dcim/views.py:1085 -#: netbox/dcim/views.py:1324 netbox/dcim/views.py:2033 +#: netbox/dcim/tables/devicetypes.py:145 netbox/dcim/views.py:1189 +#: netbox/dcim/views.py:1433 netbox/dcim/views.py:2197 #: netbox/netbox/navigation/menu.py:101 #: netbox/templates/dcim/device/base.html:46 #: netbox/templates/dcim/device_list.html:64 @@ -6987,7 +7528,7 @@ msgstr "Pozice pro zařízení" msgid "Module Bays" msgstr "Modulové pozice" -#: netbox/dcim/tables/power.py:36 netbox/netbox/navigation/menu.py:297 +#: netbox/dcim/tables/power.py:36 netbox/netbox/navigation/menu.py:318 #: netbox/templates/dcim/powerpanel.html:51 msgid "Power Feeds" msgstr "Napájecí zdroje" @@ -7000,109 +7541,104 @@ msgstr "Maximální využití" msgid "Available Power (VA)" msgstr "Dostupný výkon (VA)" -#: netbox/dcim/tables/racks.py:30 netbox/dcim/tables/sites.py:143 +#: netbox/dcim/tables/racks.py:30 netbox/dcim/tables/sites.py:142 #: netbox/netbox/navigation/menu.py:43 netbox/netbox/navigation/menu.py:47 #: netbox/netbox/navigation/menu.py:49 msgid "Racks" msgstr "Stojany" -#: netbox/dcim/tables/racks.py:63 netbox/dcim/tables/racks.py:142 +#: netbox/dcim/tables/racks.py:63 netbox/dcim/tables/racks.py:141 #: netbox/templates/dcim/device.html:318 #: netbox/templates/dcim/inc/panels/racktype_dimensions.html:14 msgid "Height" msgstr "Výška" -#: netbox/dcim/tables/racks.py:67 netbox/dcim/tables/racks.py:165 +#: netbox/dcim/tables/racks.py:67 netbox/dcim/tables/racks.py:164 #: netbox/templates/dcim/inc/panels/racktype_dimensions.html:18 msgid "Outer Width" msgstr "Vnější šířka" -#: netbox/dcim/tables/racks.py:71 netbox/dcim/tables/racks.py:169 +#: netbox/dcim/tables/racks.py:71 netbox/dcim/tables/racks.py:168 #: netbox/templates/dcim/inc/panels/racktype_dimensions.html:28 msgid "Outer Depth" msgstr "Vnější hloubka" -#: netbox/dcim/tables/racks.py:79 netbox/dcim/tables/racks.py:177 +#: netbox/dcim/tables/racks.py:79 netbox/dcim/tables/racks.py:176 msgid "Max Weight" msgstr "Max. hmotnost" -#: netbox/dcim/tables/racks.py:154 +#: netbox/dcim/tables/racks.py:153 msgid "Space" msgstr "Prostor" #: netbox/dcim/tables/sites.py:30 netbox/dcim/tables/sites.py:57 -#: netbox/extras/forms/filtersets.py:351 -#: netbox/extras/forms/model_forms.py:517 netbox/ipam/forms/bulk_edit.py:131 -#: netbox/ipam/forms/model_forms.py:153 netbox/ipam/tables/asn.py:66 +#: netbox/extras/forms/filtersets.py:358 +#: netbox/extras/forms/model_forms.py:531 netbox/ipam/forms/bulk_edit.py:134 +#: netbox/ipam/forms/model_forms.py:159 netbox/ipam/tables/asn.py:66 #: netbox/netbox/navigation/menu.py:15 netbox/netbox/navigation/menu.py:17 msgid "Sites" msgstr "Stránky" -#: netbox/dcim/tests/test_api.py:47 +#: netbox/dcim/tests/test_api.py:50 msgid "Test case must set peer_termination_type" msgstr "Testovací případ musí nastavit peer_termination_type" -#: netbox/dcim/views.py:138 +#: netbox/dcim/views.py:137 #, python-brace-format msgid "Disconnected {count} {type}" msgstr "Odpojeno {count} {type}" -#: netbox/dcim/views.py:738 netbox/netbox/navigation/menu.py:51 +#: netbox/dcim/views.py:825 netbox/netbox/navigation/menu.py:51 msgid "Reservations" msgstr "Rezervace" -#: netbox/dcim/views.py:757 netbox/templates/dcim/location.html:90 +#: netbox/dcim/views.py:844 netbox/templates/dcim/location.html:90 #: netbox/templates/dcim/site.html:140 msgid "Non-Racked Devices" msgstr "Zařízení bez racku" -#: netbox/dcim/views.py:2086 netbox/extras/forms/model_forms.py:577 +#: netbox/dcim/views.py:2250 netbox/extras/forms/model_forms.py:591 #: netbox/templates/extras/configcontext.html:10 -#: netbox/virtualization/forms/model_forms.py:225 -#: netbox/virtualization/views.py:405 +#: netbox/virtualization/forms/model_forms.py:232 +#: netbox/virtualization/views.py:422 msgid "Config Context" msgstr "Kontext konfigurace" -#: netbox/dcim/views.py:2096 netbox/virtualization/views.py:415 +#: netbox/dcim/views.py:2260 netbox/virtualization/views.py:432 msgid "Render Config" msgstr "Konfigurace rendrování" -#: netbox/dcim/views.py:2131 netbox/virtualization/views.py:450 -#, python-brace-format -msgid "An error occurred while rendering the template: {error}" -msgstr "Při vykreslování šablony došlo k chybě: {error}" - -#: netbox/dcim/views.py:2149 netbox/extras/tables/tables.py:550 -#: netbox/netbox/navigation/menu.py:247 netbox/netbox/navigation/menu.py:249 -#: netbox/virtualization/views.py:178 +#: netbox/dcim/views.py:2273 netbox/extras/tables/tables.py:550 +#: netbox/netbox/navigation/menu.py:255 netbox/netbox/navigation/menu.py:257 +#: netbox/virtualization/views.py:190 msgid "Virtual Machines" msgstr "Virtuální stroje" -#: netbox/dcim/views.py:2907 +#: netbox/dcim/views.py:3106 #, python-brace-format msgid "Installed device {device} in bay {device_bay}." msgstr "Nainstalované zařízení {device} v zátoce {device_bay}." -#: netbox/dcim/views.py:2948 +#: netbox/dcim/views.py:3147 #, python-brace-format msgid "Removed device {device} from bay {device_bay}." msgstr "Odstraněné zařízení {device} od zátoky {device_bay}." -#: netbox/dcim/views.py:3054 netbox/ipam/tables/ip.py:234 +#: netbox/dcim/views.py:3263 netbox/ipam/tables/ip.py:180 msgid "Children" msgstr "Děti" -#: netbox/dcim/views.py:3520 +#: netbox/dcim/views.py:3730 #, python-brace-format msgid "Added member {device}" msgstr "Přidán člen {device}" -#: netbox/dcim/views.py:3567 +#: netbox/dcim/views.py:3779 #, python-brace-format msgid "Unable to remove master device {device} from the virtual chassis." msgstr "Nelze odebrat hlavní zařízení {device} z virtuálního podvozku." -#: netbox/dcim/views.py:3580 +#: netbox/dcim/views.py:3792 #, python-brace-format msgid "Removed {device} from virtual chassis {chassis}" msgstr "Odstraněno {device} z virtuálního šasi {chassis}" @@ -7201,7 +7737,7 @@ msgstr "Ne" #: netbox/extras/choices.py:108 netbox/templates/tenancy/contact.html:57 #: netbox/tenancy/forms/bulk_edit.py:118 -#: netbox/wireless/forms/model_forms.py:168 +#: netbox/wireless/forms/model_forms.py:171 msgid "Link" msgstr "Odkaz" @@ -7221,15 +7757,15 @@ msgstr "Abecedně (A-Z)" msgid "Alphabetical (Z-A)" msgstr "Abecedně (Z-A)" -#: netbox/extras/choices.py:144 netbox/extras/choices.py:167 +#: netbox/extras/choices.py:144 netbox/extras/choices.py:165 msgid "Info" msgstr "Informace" -#: netbox/extras/choices.py:145 netbox/extras/choices.py:168 +#: netbox/extras/choices.py:145 netbox/extras/choices.py:166 msgid "Success" msgstr "Úspěch" -#: netbox/extras/choices.py:146 netbox/extras/choices.py:169 +#: netbox/extras/choices.py:146 netbox/extras/choices.py:167 msgid "Warning" msgstr "Varování" @@ -7237,52 +7773,29 @@ msgstr "Varování" msgid "Danger" msgstr "Nebezpečí" -#: netbox/extras/choices.py:165 +#: netbox/extras/choices.py:164 msgid "Debug" msgstr "Ladění" -#: netbox/extras/choices.py:166 netbox/netbox/choices.py:101 -msgid "Default" -msgstr "Výchozí" - -#: netbox/extras/choices.py:170 +#: netbox/extras/choices.py:168 msgid "Failure" msgstr "Porucha" -#: netbox/extras/choices.py:186 -msgid "Hourly" -msgstr "Hodinová" - -#: netbox/extras/choices.py:187 -msgid "12 hours" -msgstr "12 hodin" - -#: netbox/extras/choices.py:188 -msgid "Daily" -msgstr "Denně" - -#: netbox/extras/choices.py:189 -msgid "Weekly" -msgstr "Týdenní" - -#: netbox/extras/choices.py:190 -msgid "30 days" -msgstr "30 dní" - -#: netbox/extras/choices.py:226 +#: netbox/extras/choices.py:213 #: netbox/templates/dcim/virtualchassis_edit.html:107 #: netbox/templates/generic/bulk_add_component.html:68 #: netbox/templates/generic/object_edit.html:47 #: netbox/templates/generic/object_edit.html:80 +#: netbox/templates/htmx/quick_add.html:24 #: netbox/templates/ipam/inc/ipaddress_edit_header.html:7 msgid "Create" msgstr "Vytvořit" -#: netbox/extras/choices.py:227 +#: netbox/extras/choices.py:214 msgid "Update" msgstr "Aktualizovat" -#: netbox/extras/choices.py:228 +#: netbox/extras/choices.py:215 #: netbox/templates/circuits/inc/circuit_termination.html:23 #: netbox/templates/dcim/inc/panels/inventory_items.html:37 #: netbox/templates/dcim/powerpanel.html:66 @@ -7297,82 +7810,82 @@ msgstr "Aktualizovat" msgid "Delete" msgstr "Odstranit" -#: netbox/extras/choices.py:252 netbox/netbox/choices.py:57 -#: netbox/netbox/choices.py:102 +#: netbox/extras/choices.py:239 netbox/netbox/choices.py:59 +#: netbox/netbox/choices.py:104 msgid "Blue" msgstr "Modrý" -#: netbox/extras/choices.py:253 netbox/netbox/choices.py:56 -#: netbox/netbox/choices.py:103 +#: netbox/extras/choices.py:240 netbox/netbox/choices.py:58 +#: netbox/netbox/choices.py:105 msgid "Indigo" msgstr "Indigo" -#: netbox/extras/choices.py:254 netbox/netbox/choices.py:54 -#: netbox/netbox/choices.py:104 +#: netbox/extras/choices.py:241 netbox/netbox/choices.py:56 +#: netbox/netbox/choices.py:106 msgid "Purple" msgstr "Nachový" -#: netbox/extras/choices.py:255 netbox/netbox/choices.py:51 -#: netbox/netbox/choices.py:105 +#: netbox/extras/choices.py:242 netbox/netbox/choices.py:53 +#: netbox/netbox/choices.py:107 msgid "Pink" msgstr "Růžový" -#: netbox/extras/choices.py:256 netbox/netbox/choices.py:50 -#: netbox/netbox/choices.py:106 +#: netbox/extras/choices.py:243 netbox/netbox/choices.py:52 +#: netbox/netbox/choices.py:108 msgid "Red" msgstr "Červené" -#: netbox/extras/choices.py:257 netbox/netbox/choices.py:68 -#: netbox/netbox/choices.py:107 +#: netbox/extras/choices.py:244 netbox/netbox/choices.py:70 +#: netbox/netbox/choices.py:109 msgid "Orange" msgstr "oranžový" -#: netbox/extras/choices.py:258 netbox/netbox/choices.py:66 -#: netbox/netbox/choices.py:108 +#: netbox/extras/choices.py:245 netbox/netbox/choices.py:68 +#: netbox/netbox/choices.py:110 msgid "Yellow" msgstr "Žlutá" -#: netbox/extras/choices.py:259 netbox/netbox/choices.py:63 -#: netbox/netbox/choices.py:109 +#: netbox/extras/choices.py:246 netbox/netbox/choices.py:65 +#: netbox/netbox/choices.py:111 msgid "Green" msgstr "Zelená" -#: netbox/extras/choices.py:260 netbox/netbox/choices.py:60 -#: netbox/netbox/choices.py:110 +#: netbox/extras/choices.py:247 netbox/netbox/choices.py:62 +#: netbox/netbox/choices.py:112 msgid "Teal" msgstr "Šedozelená" -#: netbox/extras/choices.py:261 netbox/netbox/choices.py:59 -#: netbox/netbox/choices.py:111 +#: netbox/extras/choices.py:248 netbox/netbox/choices.py:61 +#: netbox/netbox/choices.py:113 msgid "Cyan" msgstr "Azurová" -#: netbox/extras/choices.py:262 netbox/netbox/choices.py:112 +#: netbox/extras/choices.py:249 netbox/netbox/choices.py:114 msgid "Gray" msgstr "Šedá" -#: netbox/extras/choices.py:263 netbox/netbox/choices.py:74 -#: netbox/netbox/choices.py:113 +#: netbox/extras/choices.py:250 netbox/netbox/choices.py:76 +#: netbox/netbox/choices.py:115 msgid "Black" msgstr "Černá" -#: netbox/extras/choices.py:264 netbox/netbox/choices.py:75 -#: netbox/netbox/choices.py:114 +#: netbox/extras/choices.py:251 netbox/netbox/choices.py:77 +#: netbox/netbox/choices.py:116 msgid "White" msgstr "Bílá" -#: netbox/extras/choices.py:279 netbox/extras/forms/model_forms.py:353 -#: netbox/extras/forms/model_forms.py:430 +#: netbox/extras/choices.py:266 netbox/extras/forms/model_forms.py:367 +#: netbox/extras/forms/model_forms.py:444 #: netbox/templates/extras/webhook.html:10 msgid "Webhook" msgstr "Webový háček" -#: netbox/extras/choices.py:280 netbox/extras/forms/model_forms.py:418 +#: netbox/extras/choices.py:267 netbox/extras/forms/model_forms.py:432 #: netbox/templates/extras/script/base.html:29 msgid "Script" msgstr "Skript" -#: netbox/extras/choices.py:281 +#: netbox/extras/choices.py:268 msgid "Notification" msgstr "Oznámení" @@ -7466,30 +7979,34 @@ msgstr "Neplatný formát. Parametry URL musí být předány jako slovník." msgid "RSS Feed" msgstr "RSS kanál" -#: netbox/extras/dashboard/widgets.py:279 +#: netbox/extras/dashboard/widgets.py:280 msgid "Embed an RSS feed from an external website." msgstr "Vložte kanál RSS z externího webu." -#: netbox/extras/dashboard/widgets.py:286 +#: netbox/extras/dashboard/widgets.py:287 msgid "Feed URL" msgstr "Adresa URL zdroje" -#: netbox/extras/dashboard/widgets.py:291 +#: netbox/extras/dashboard/widgets.py:290 +msgid "Requires external connection" +msgstr "Vyžaduje externí připojení" + +#: netbox/extras/dashboard/widgets.py:296 msgid "The maximum number of objects to display" msgstr "Maximální počet objektů, které se mají zobrazit" -#: netbox/extras/dashboard/widgets.py:296 +#: netbox/extras/dashboard/widgets.py:301 msgid "How long to stored the cached content (in seconds)" msgstr "Jak dlouho uložit obsah uložený v mezipaměti (v sekundách)" -#: netbox/extras/dashboard/widgets.py:348 +#: netbox/extras/dashboard/widgets.py:358 #: netbox/templates/account/base.html:10 #: netbox/templates/account/bookmarks.html:7 -#: netbox/templates/inc/user_menu.html:48 +#: netbox/templates/inc/user_menu.html:43 msgid "Bookmarks" msgstr "Záložky" -#: netbox/extras/dashboard/widgets.py:352 +#: netbox/extras/dashboard/widgets.py:362 msgid "Show your personal bookmarks" msgstr "Zobrazit své osobní záložky" @@ -7518,17 +8035,17 @@ msgid "Group (name)" msgstr "Skupina (název)" #: netbox/extras/filtersets.py:574 -#: netbox/virtualization/forms/filtersets.py:118 +#: netbox/virtualization/forms/filtersets.py:123 msgid "Cluster type" msgstr "Typ clusteru" -#: netbox/extras/filtersets.py:580 netbox/virtualization/filtersets.py:95 -#: netbox/virtualization/filtersets.py:147 +#: netbox/extras/filtersets.py:580 netbox/virtualization/filtersets.py:61 +#: netbox/virtualization/filtersets.py:113 msgid "Cluster type (slug)" msgstr "Typ klastru (slug)" #: netbox/extras/filtersets.py:601 netbox/tenancy/forms/forms.py:16 -#: netbox/tenancy/forms/forms.py:39 +#: netbox/tenancy/forms/forms.py:40 msgid "Tenant group" msgstr "Skupina nájemců" @@ -7537,7 +8054,7 @@ msgstr "Skupina nájemců" msgid "Tenant group (slug)" msgstr "Skupina nájemců (slug)" -#: netbox/extras/filtersets.py:623 netbox/extras/forms/model_forms.py:495 +#: netbox/extras/filtersets.py:623 netbox/extras/forms/model_forms.py:509 #: netbox/templates/extras/tag.html:11 msgid "Tag" msgstr "Značka" @@ -7546,60 +8063,60 @@ msgstr "Značka" msgid "Tag (slug)" msgstr "Štítek (slug)" -#: netbox/extras/filtersets.py:689 netbox/extras/forms/filtersets.py:429 +#: netbox/extras/filtersets.py:689 netbox/extras/forms/filtersets.py:437 msgid "Has local config context data" msgstr "Má místní kontextová data konfigurace" -#: netbox/extras/forms/bulk_edit.py:35 netbox/extras/forms/filtersets.py:60 +#: netbox/extras/forms/bulk_edit.py:35 netbox/extras/forms/filtersets.py:61 msgid "Group name" msgstr "Název skupiny" -#: netbox/extras/forms/bulk_edit.py:43 netbox/extras/forms/filtersets.py:68 +#: netbox/extras/forms/bulk_edit.py:43 netbox/extras/forms/filtersets.py:69 #: netbox/extras/tables/tables.py:65 #: netbox/templates/extras/customfield.html:38 #: netbox/templates/generic/bulk_import.html:118 msgid "Required" msgstr "Požadováno" -#: netbox/extras/forms/bulk_edit.py:48 netbox/extras/forms/filtersets.py:75 +#: netbox/extras/forms/bulk_edit.py:48 netbox/extras/forms/filtersets.py:76 msgid "Must be unique" msgstr "Musí být jedinečný" #: netbox/extras/forms/bulk_edit.py:61 netbox/extras/forms/bulk_import.py:60 -#: netbox/extras/forms/filtersets.py:89 +#: netbox/extras/forms/filtersets.py:90 #: netbox/extras/models/customfields.py:209 msgid "UI visible" msgstr "Uživatelské rozhraní viditelné" #: netbox/extras/forms/bulk_edit.py:66 netbox/extras/forms/bulk_import.py:66 -#: netbox/extras/forms/filtersets.py:94 +#: netbox/extras/forms/filtersets.py:95 #: netbox/extras/models/customfields.py:216 msgid "UI editable" msgstr "Upravitelné uživatelské rozhraní" -#: netbox/extras/forms/bulk_edit.py:71 netbox/extras/forms/filtersets.py:97 +#: netbox/extras/forms/bulk_edit.py:71 netbox/extras/forms/filtersets.py:98 msgid "Is cloneable" msgstr "Je klonovatelný" -#: netbox/extras/forms/bulk_edit.py:76 netbox/extras/forms/filtersets.py:104 +#: netbox/extras/forms/bulk_edit.py:76 netbox/extras/forms/filtersets.py:105 msgid "Minimum value" msgstr "Minimální hodnota" -#: netbox/extras/forms/bulk_edit.py:80 netbox/extras/forms/filtersets.py:108 +#: netbox/extras/forms/bulk_edit.py:80 netbox/extras/forms/filtersets.py:109 msgid "Maximum value" msgstr "Maximální hodnota" -#: netbox/extras/forms/bulk_edit.py:84 netbox/extras/forms/filtersets.py:112 +#: netbox/extras/forms/bulk_edit.py:84 netbox/extras/forms/filtersets.py:113 msgid "Validation regex" msgstr "Ověření regex" -#: netbox/extras/forms/bulk_edit.py:91 netbox/extras/forms/filtersets.py:46 +#: netbox/extras/forms/bulk_edit.py:91 netbox/extras/forms/filtersets.py:47 #: netbox/extras/forms/model_forms.py:76 #: netbox/templates/extras/customfield.html:70 msgid "Behavior" msgstr "Chování" -#: netbox/extras/forms/bulk_edit.py:128 netbox/extras/forms/filtersets.py:149 +#: netbox/extras/forms/bulk_edit.py:128 netbox/extras/forms/filtersets.py:152 msgid "New window" msgstr "Nové okno" @@ -7607,31 +8124,31 @@ msgstr "Nové okno" msgid "Button class" msgstr "Třída tlačítek" -#: netbox/extras/forms/bulk_edit.py:154 netbox/extras/forms/filtersets.py:187 +#: netbox/extras/forms/bulk_edit.py:154 netbox/extras/forms/filtersets.py:191 #: netbox/extras/models/models.py:409 msgid "MIME type" msgstr "Typ MIME" -#: netbox/extras/forms/bulk_edit.py:159 netbox/extras/forms/filtersets.py:190 +#: netbox/extras/forms/bulk_edit.py:159 netbox/extras/forms/filtersets.py:194 msgid "File extension" msgstr "přípona souboru" -#: netbox/extras/forms/bulk_edit.py:164 netbox/extras/forms/filtersets.py:194 +#: netbox/extras/forms/bulk_edit.py:164 netbox/extras/forms/filtersets.py:198 msgid "As attachment" msgstr "Jako příloha" -#: netbox/extras/forms/bulk_edit.py:192 netbox/extras/forms/filtersets.py:236 +#: netbox/extras/forms/bulk_edit.py:192 netbox/extras/forms/filtersets.py:242 #: netbox/extras/tables/tables.py:256 #: netbox/templates/extras/savedfilter.html:29 msgid "Shared" msgstr "Sdílené" -#: netbox/extras/forms/bulk_edit.py:215 netbox/extras/forms/filtersets.py:265 +#: netbox/extras/forms/bulk_edit.py:215 netbox/extras/forms/filtersets.py:271 #: netbox/extras/models/models.py:174 msgid "HTTP method" msgstr "Metoda HTTP" -#: netbox/extras/forms/bulk_edit.py:219 netbox/extras/forms/filtersets.py:259 +#: netbox/extras/forms/bulk_edit.py:219 netbox/extras/forms/filtersets.py:265 #: netbox/templates/extras/webhook.html:30 msgid "Payload URL" msgstr "Adresa URL užitečného zatížení" @@ -7650,7 +8167,7 @@ msgid "CA file path" msgstr "Cesta k souboru CA" #: netbox/extras/forms/bulk_edit.py:253 netbox/extras/forms/bulk_import.py:192 -#: netbox/extras/forms/model_forms.py:377 +#: netbox/extras/forms/model_forms.py:391 msgid "Event types" msgstr "Typy událostí" @@ -7663,13 +8180,13 @@ msgstr "Je aktivní" #: netbox/extras/forms/bulk_import.py:139 #: netbox/extras/forms/bulk_import.py:162 #: netbox/extras/forms/bulk_import.py:186 -#: netbox/extras/forms/filtersets.py:137 netbox/extras/forms/filtersets.py:224 +#: netbox/extras/forms/filtersets.py:140 netbox/extras/forms/filtersets.py:230 #: netbox/extras/forms/model_forms.py:47 -#: netbox/extras/forms/model_forms.py:205 -#: netbox/extras/forms/model_forms.py:237 -#: netbox/extras/forms/model_forms.py:278 -#: netbox/extras/forms/model_forms.py:372 -#: netbox/extras/forms/model_forms.py:489 +#: netbox/extras/forms/model_forms.py:219 +#: netbox/extras/forms/model_forms.py:251 +#: netbox/extras/forms/model_forms.py:292 +#: netbox/extras/forms/model_forms.py:386 +#: netbox/extras/forms/model_forms.py:503 #: netbox/users/forms/model_forms.py:276 msgid "Object types" msgstr "Typy objektů" @@ -7687,10 +8204,10 @@ msgstr "Jeden nebo více přiřazených typů objektů" msgid "Field data type (e.g. text, integer, etc.)" msgstr "Datový typ pole (např. text, celé číslo atd.)" -#: netbox/extras/forms/bulk_import.py:47 netbox/extras/forms/filtersets.py:208 -#: netbox/extras/forms/filtersets.py:281 -#: netbox/extras/forms/model_forms.py:304 -#: netbox/extras/forms/model_forms.py:341 +#: netbox/extras/forms/bulk_import.py:47 netbox/extras/forms/filtersets.py:213 +#: netbox/extras/forms/filtersets.py:287 +#: netbox/extras/forms/model_forms.py:318 +#: netbox/extras/forms/model_forms.py:355 #: netbox/tenancy/forms/filtersets.py:92 msgid "Object type" msgstr "Typ objektu" @@ -7699,7 +8216,7 @@ msgstr "Typ objektu" msgid "Object type (for object or multi-object fields)" msgstr "Typ objektu (pro pole objektu nebo více objektů)" -#: netbox/extras/forms/bulk_import.py:53 netbox/extras/forms/filtersets.py:84 +#: netbox/extras/forms/bulk_import.py:53 netbox/extras/forms/filtersets.py:85 msgid "Choice set" msgstr "Sada na výběr" @@ -7767,7 +8284,7 @@ msgid "The classification of entry" msgstr "Klasifikace vstupu" #: netbox/extras/forms/bulk_import.py:261 -#: netbox/extras/forms/model_forms.py:320 netbox/netbox/navigation/menu.py:390 +#: netbox/extras/forms/model_forms.py:334 netbox/netbox/navigation/menu.py:411 #: netbox/templates/extras/notificationgroup.html:41 #: netbox/templates/users/group.html:29 netbox/users/forms/model_forms.py:236 #: netbox/users/forms/model_forms.py:248 netbox/users/forms/model_forms.py:300 @@ -7780,7 +8297,8 @@ msgid "User names separated by commas, encased with double quotes" msgstr "Uživatelská jména oddělená čárkami, uzavřená dvojitými uvozovkami" #: netbox/extras/forms/bulk_import.py:268 -#: netbox/extras/forms/model_forms.py:315 netbox/netbox/navigation/menu.py:410 +#: netbox/extras/forms/model_forms.py:329 netbox/netbox/navigation/menu.py:294 +#: netbox/netbox/navigation/menu.py:431 #: netbox/templates/extras/notificationgroup.html:31 #: netbox/users/forms/model_forms.py:181 netbox/users/forms/model_forms.py:193 #: netbox/users/forms/model_forms.py:305 netbox/users/tables.py:35 @@ -7792,104 +8310,104 @@ msgstr "Skupiny" msgid "Group names separated by commas, encased with double quotes" msgstr "Názvy skupin oddělené čárkami, uzavřené dvojitými uvozovkami" -#: netbox/extras/forms/filtersets.py:52 netbox/extras/forms/model_forms.py:56 +#: netbox/extras/forms/filtersets.py:53 netbox/extras/forms/model_forms.py:56 msgid "Related object type" msgstr "Typ souvisejícího objektu" -#: netbox/extras/forms/filtersets.py:57 +#: netbox/extras/forms/filtersets.py:58 msgid "Field type" msgstr "Typ pole" -#: netbox/extras/forms/filtersets.py:120 +#: netbox/extras/forms/filtersets.py:122 #: netbox/extras/forms/model_forms.py:157 netbox/extras/tables/tables.py:91 #: netbox/templates/generic/bulk_import.html:154 msgid "Choices" msgstr "Možnosti" -#: netbox/extras/forms/filtersets.py:164 netbox/extras/forms/filtersets.py:319 -#: netbox/extras/forms/filtersets.py:408 -#: netbox/extras/forms/model_forms.py:572 netbox/templates/core/job.html:96 +#: netbox/extras/forms/filtersets.py:168 netbox/extras/forms/filtersets.py:326 +#: netbox/extras/forms/filtersets.py:416 +#: netbox/extras/forms/model_forms.py:586 netbox/templates/core/job.html:96 #: netbox/templates/extras/eventrule.html:84 msgid "Data" msgstr "Údaje" -#: netbox/extras/forms/filtersets.py:175 netbox/extras/forms/filtersets.py:333 -#: netbox/extras/forms/filtersets.py:418 netbox/netbox/choices.py:130 +#: netbox/extras/forms/filtersets.py:179 netbox/extras/forms/filtersets.py:340 +#: netbox/extras/forms/filtersets.py:426 netbox/netbox/choices.py:132 #: netbox/utilities/forms/bulk_import.py:26 msgid "Data file" msgstr "Datový soubor" -#: netbox/extras/forms/filtersets.py:183 +#: netbox/extras/forms/filtersets.py:187 msgid "Content types" msgstr "Typy obsahu" -#: netbox/extras/forms/filtersets.py:255 netbox/extras/models/models.py:179 +#: netbox/extras/forms/filtersets.py:261 netbox/extras/models/models.py:179 msgid "HTTP content type" msgstr "Typ obsahu HTTP" -#: netbox/extras/forms/filtersets.py:286 +#: netbox/extras/forms/filtersets.py:292 msgid "Event type" msgstr "Typ události" -#: netbox/extras/forms/filtersets.py:291 +#: netbox/extras/forms/filtersets.py:297 msgid "Action type" msgstr "Typ akce" -#: netbox/extras/forms/filtersets.py:307 +#: netbox/extras/forms/filtersets.py:313 msgid "Tagged object type" msgstr "Typ označeného objektu" -#: netbox/extras/forms/filtersets.py:312 +#: netbox/extras/forms/filtersets.py:318 msgid "Allowed object type" msgstr "Povolený typ objektu" -#: netbox/extras/forms/filtersets.py:341 -#: netbox/extras/forms/model_forms.py:507 netbox/netbox/navigation/menu.py:18 +#: netbox/extras/forms/filtersets.py:348 +#: netbox/extras/forms/model_forms.py:521 netbox/netbox/navigation/menu.py:18 msgid "Regions" msgstr "Regiony" -#: netbox/extras/forms/filtersets.py:346 -#: netbox/extras/forms/model_forms.py:512 +#: netbox/extras/forms/filtersets.py:353 +#: netbox/extras/forms/model_forms.py:526 msgid "Site groups" msgstr "Skupiny webů" -#: netbox/extras/forms/filtersets.py:356 -#: netbox/extras/forms/model_forms.py:522 netbox/netbox/navigation/menu.py:20 +#: netbox/extras/forms/filtersets.py:363 +#: netbox/extras/forms/model_forms.py:536 netbox/netbox/navigation/menu.py:20 #: netbox/templates/dcim/site.html:127 msgid "Locations" msgstr "Lokality" -#: netbox/extras/forms/filtersets.py:361 -#: netbox/extras/forms/model_forms.py:527 +#: netbox/extras/forms/filtersets.py:368 +#: netbox/extras/forms/model_forms.py:541 msgid "Device types" msgstr "Typy zařízení" -#: netbox/extras/forms/filtersets.py:366 -#: netbox/extras/forms/model_forms.py:532 +#: netbox/extras/forms/filtersets.py:373 +#: netbox/extras/forms/model_forms.py:546 msgid "Roles" msgstr "Role" -#: netbox/extras/forms/filtersets.py:376 -#: netbox/extras/forms/model_forms.py:542 +#: netbox/extras/forms/filtersets.py:383 +#: netbox/extras/forms/model_forms.py:556 msgid "Cluster types" msgstr "Typy klastrů" -#: netbox/extras/forms/filtersets.py:381 -#: netbox/extras/forms/model_forms.py:547 +#: netbox/extras/forms/filtersets.py:388 +#: netbox/extras/forms/model_forms.py:561 msgid "Cluster groups" msgstr "Skupiny klastrů" -#: netbox/extras/forms/filtersets.py:386 -#: netbox/extras/forms/model_forms.py:552 netbox/netbox/navigation/menu.py:255 -#: netbox/netbox/navigation/menu.py:257 +#: netbox/extras/forms/filtersets.py:393 +#: netbox/extras/forms/model_forms.py:566 netbox/netbox/navigation/menu.py:263 +#: netbox/netbox/navigation/menu.py:265 #: netbox/templates/virtualization/clustertype.html:30 #: netbox/virtualization/tables/clusters.py:23 #: netbox/virtualization/tables/clusters.py:45 msgid "Clusters" msgstr "Klastry" -#: netbox/extras/forms/filtersets.py:391 -#: netbox/extras/forms/model_forms.py:557 +#: netbox/extras/forms/filtersets.py:398 +#: netbox/extras/forms/model_forms.py:571 msgid "Tenant groups" msgstr "Skupiny nájemců" @@ -7938,7 +8456,7 @@ msgstr "" msgid "Related Object" msgstr "Související objekt" -#: netbox/extras/forms/model_forms.py:169 +#: netbox/extras/forms/model_forms.py:170 msgid "" "Enter one choice per line. An optional label may be specified for each " "choice by appending it with a colon. Example:" @@ -7946,16 +8464,16 @@ msgstr "" "Zadejte jednu volbu na řádek. Pro každou volbu lze zadat volitelný popisek " "přidáním dvojtečky. Příklad:" -#: netbox/extras/forms/model_forms.py:212 +#: netbox/extras/forms/model_forms.py:226 #: netbox/templates/extras/customlink.html:10 msgid "Custom Link" msgstr "Vlastní odkaz" -#: netbox/extras/forms/model_forms.py:214 +#: netbox/extras/forms/model_forms.py:228 msgid "Templates" msgstr "Šablony" -#: netbox/extras/forms/model_forms.py:226 +#: netbox/extras/forms/model_forms.py:240 #, python-brace-format msgid "" "Jinja2 template code for the link text. Reference the object as {example}. " @@ -7964,7 +8482,7 @@ msgstr "" "Kód šablony Jinja2 pro text odkazu. Referovat na objekt jako {example}. " "Odkazy, které se vykreslují jako prázdný text, se nezobrazí." -#: netbox/extras/forms/model_forms.py:230 +#: netbox/extras/forms/model_forms.py:244 #, python-brace-format msgid "" "Jinja2 template code for the link URL. Reference the object as {example}." @@ -7972,58 +8490,58 @@ msgstr "" "Kód šablony Jinja2 pro adresu URL odkazu. Referovat na objekt jako " "{example}." -#: netbox/extras/forms/model_forms.py:241 -#: netbox/extras/forms/model_forms.py:624 +#: netbox/extras/forms/model_forms.py:255 +#: netbox/extras/forms/model_forms.py:638 msgid "Template code" msgstr "Kód šablony" -#: netbox/extras/forms/model_forms.py:247 +#: netbox/extras/forms/model_forms.py:261 #: netbox/templates/extras/exporttemplate.html:12 msgid "Export Template" msgstr "Šablona exportu" -#: netbox/extras/forms/model_forms.py:249 +#: netbox/extras/forms/model_forms.py:263 msgid "Rendering" msgstr "Vykreslování" -#: netbox/extras/forms/model_forms.py:263 -#: netbox/extras/forms/model_forms.py:649 +#: netbox/extras/forms/model_forms.py:277 +#: netbox/extras/forms/model_forms.py:663 msgid "Template content is populated from the remote source selected below." msgstr "Obsah šablony je vyplněn ze vzdáleného zdroje vybraného níže." -#: netbox/extras/forms/model_forms.py:270 -#: netbox/extras/forms/model_forms.py:656 +#: netbox/extras/forms/model_forms.py:284 +#: netbox/extras/forms/model_forms.py:670 msgid "Must specify either local content or a data file" msgstr "Musí zadat místní obsah nebo datový soubor" -#: netbox/extras/forms/model_forms.py:284 netbox/netbox/forms/mixins.py:70 +#: netbox/extras/forms/model_forms.py:298 netbox/netbox/forms/mixins.py:70 #: netbox/templates/extras/savedfilter.html:10 msgid "Saved Filter" msgstr "Uložený filtr" -#: netbox/extras/forms/model_forms.py:334 +#: netbox/extras/forms/model_forms.py:348 msgid "A notification group specify at least one user or group." msgstr "Skupina oznámení určuje alespoň jednoho uživatele nebo skupinu." -#: netbox/extras/forms/model_forms.py:356 +#: netbox/extras/forms/model_forms.py:370 #: netbox/templates/extras/webhook.html:23 msgid "HTTP Request" msgstr "HTTP požadavek" -#: netbox/extras/forms/model_forms.py:358 +#: netbox/extras/forms/model_forms.py:372 #: netbox/templates/extras/webhook.html:44 msgid "SSL" msgstr "SSL" -#: netbox/extras/forms/model_forms.py:380 +#: netbox/extras/forms/model_forms.py:394 msgid "Action choice" msgstr "Volba akce" -#: netbox/extras/forms/model_forms.py:385 +#: netbox/extras/forms/model_forms.py:399 msgid "Enter conditions in JSON format." msgstr "Zadejte podmínky do JSON Formát." -#: netbox/extras/forms/model_forms.py:389 +#: netbox/extras/forms/model_forms.py:403 msgid "" "Enter parameters to pass to the action in JSON format." @@ -8031,33 +8549,33 @@ msgstr "" "Zadejte parametry, které chcete předat akci v JSON Formát." -#: netbox/extras/forms/model_forms.py:394 +#: netbox/extras/forms/model_forms.py:408 #: netbox/templates/extras/eventrule.html:10 msgid "Event Rule" msgstr "Pravidlo události" -#: netbox/extras/forms/model_forms.py:395 +#: netbox/extras/forms/model_forms.py:409 msgid "Triggers" msgstr "Spouštěče" -#: netbox/extras/forms/model_forms.py:442 +#: netbox/extras/forms/model_forms.py:456 msgid "Notification group" msgstr "Skupina oznámení" -#: netbox/extras/forms/model_forms.py:562 netbox/netbox/navigation/menu.py:26 +#: netbox/extras/forms/model_forms.py:576 netbox/netbox/navigation/menu.py:26 #: netbox/tenancy/tables/tenants.py:22 msgid "Tenants" msgstr "Nájemci" -#: netbox/extras/forms/model_forms.py:606 +#: netbox/extras/forms/model_forms.py:620 msgid "Data is populated from the remote source selected below." msgstr "Data jsou vyplněna ze vzdáleného zdroje vybraného níže." -#: netbox/extras/forms/model_forms.py:612 +#: netbox/extras/forms/model_forms.py:626 msgid "Must specify either local data or a data file" msgstr "Musí zadat buď lokální data nebo datový soubor" -#: netbox/extras/forms/model_forms.py:631 +#: netbox/extras/forms/model_forms.py:645 #: netbox/templates/core/datafile.html:55 msgid "Content" msgstr "Obsah" @@ -8119,10 +8637,16 @@ msgstr "Došlo k výjimce: " msgid "Database changes have been reverted due to error." msgstr "Změny databáze byly vráceny kvůli chybě." -#: netbox/extras/management/commands/reindex.py:66 +#: netbox/extras/management/commands/reindex.py:67 msgid "No indexers found!" msgstr "Nebyly nalezeny žádné indexátory!" +#: netbox/extras/models/configs.py:41 netbox/extras/models/models.py:313 +#: netbox/extras/models/models.py:522 netbox/extras/models/search.py:48 +#: netbox/ipam/models/ip.py:188 netbox/netbox/models/mixins.py:15 +msgid "weight" +msgstr "váha" + #: netbox/extras/models/configs.py:130 msgid "config context" msgstr "kontext konfigurace" @@ -8477,27 +9001,27 @@ msgstr "Nalezeno neplatné ID objektu: {id}" msgid "Required field cannot be empty." msgstr "Povinné pole nesmí být prázdné." -#: netbox/extras/models/customfields.py:763 +#: netbox/extras/models/customfields.py:764 msgid "Base set of predefined choices (optional)" msgstr "Základní sada předdefinovaných možností (volitelné)" -#: netbox/extras/models/customfields.py:775 +#: netbox/extras/models/customfields.py:776 msgid "Choices are automatically ordered alphabetically" msgstr "Volby jsou automaticky seřazeny abecedně" -#: netbox/extras/models/customfields.py:782 +#: netbox/extras/models/customfields.py:783 msgid "custom field choice set" msgstr "vlastní sada výběru polí" -#: netbox/extras/models/customfields.py:783 +#: netbox/extras/models/customfields.py:784 msgid "custom field choice sets" msgstr "vlastní sady výběru polí" -#: netbox/extras/models/customfields.py:825 +#: netbox/extras/models/customfields.py:826 msgid "Must define base or extra choices." msgstr "Musí definovat základní nebo další možnosti." -#: netbox/extras/models/customfields.py:849 +#: netbox/extras/models/customfields.py:850 #, python-brace-format msgid "" "Cannot remove choice {choice} as there are {model} objects which reference " @@ -8795,20 +9319,20 @@ msgstr "zápis do deníku" msgid "journal entries" msgstr "zápisy do deníku" -#: netbox/extras/models/models.py:718 +#: netbox/extras/models/models.py:721 #, python-brace-format msgid "Journaling is not supported for this object type ({type})." msgstr "Žurnálování není pro tento typ objektu podporováno ({type})." -#: netbox/extras/models/models.py:760 +#: netbox/extras/models/models.py:763 msgid "bookmark" msgstr "záložka" -#: netbox/extras/models/models.py:761 +#: netbox/extras/models/models.py:764 msgid "bookmarks" msgstr "záložky" -#: netbox/extras/models/models.py:774 +#: netbox/extras/models/models.py:777 #, python-brace-format msgid "Bookmarks cannot be assigned to this object type ({type})." msgstr "K tomuto typu objektu nelze přiřadit záložky ({type})." @@ -8900,19 +9424,19 @@ msgstr "hodnota uložená v mezipaměti" msgid "cached values" msgstr "hodnoty uložené v mezipaměti" -#: netbox/extras/models/staging.py:44 +#: netbox/extras/models/staging.py:45 msgid "branch" msgstr "větev" -#: netbox/extras/models/staging.py:45 +#: netbox/extras/models/staging.py:46 msgid "branches" msgstr "poboček" -#: netbox/extras/models/staging.py:97 +#: netbox/extras/models/staging.py:105 msgid "staged change" msgstr "postupná změna" -#: netbox/extras/models/staging.py:98 +#: netbox/extras/models/staging.py:106 msgid "staged changes" msgstr "postupné změny" @@ -8936,11 +9460,11 @@ msgstr "označená položka" msgid "tagged items" msgstr "označené položky" -#: netbox/extras/scripts.py:429 +#: netbox/extras/scripts.py:432 msgid "Script Data" msgstr "Data skriptu" -#: netbox/extras/scripts.py:433 +#: netbox/extras/scripts.py:436 msgid "Script Execution Parameters" msgstr "Parametry spuštění skriptu" @@ -9017,12 +9541,11 @@ msgstr "Jako příloha" #: netbox/extras/tables/tables.py:195 netbox/extras/tables/tables.py:487 #: netbox/extras/tables/tables.py:522 netbox/templates/core/datafile.html:24 -#: netbox/templates/dcim/device/render_config.html:22 #: netbox/templates/extras/configcontext.html:39 #: netbox/templates/extras/configtemplate.html:31 #: netbox/templates/extras/exporttemplate.html:45 +#: netbox/templates/extras/object_render_config.html:23 #: netbox/templates/generic/bulk_import.html:35 -#: netbox/templates/virtualization/virtualmachine/render_config.html:22 msgid "Data File" msgstr "Datový soubor" @@ -9114,27 +9637,32 @@ msgstr "Neplatný atribut“{name}„na vyžádání" msgid "Invalid attribute \"{name}\" for {model}" msgstr "Neplatný atribut“{name}„pro {model}" -#: netbox/extras/views.py:960 +#: netbox/extras/views.py:933 +#, python-brace-format +msgid "An error occurred while rendering the template: {error}" +msgstr "Při vykreslování šablony došlo k chybě: {error}" + +#: netbox/extras/views.py:1085 msgid "Your dashboard has been reset." msgstr "Váš řídicí panel byl resetován." -#: netbox/extras/views.py:1006 +#: netbox/extras/views.py:1131 msgid "Added widget: " msgstr "Přidán widget: " -#: netbox/extras/views.py:1047 +#: netbox/extras/views.py:1172 msgid "Updated widget: " msgstr "Aktualizovaný widget: " -#: netbox/extras/views.py:1083 +#: netbox/extras/views.py:1208 msgid "Deleted widget: " msgstr "Odstraněný widget: " -#: netbox/extras/views.py:1085 +#: netbox/extras/views.py:1210 msgid "Error deleting widget: " msgstr "Chyba při mazání widgetu: " -#: netbox/extras/views.py:1175 +#: netbox/extras/views.py:1308 msgid "Unable to run script: RQ worker process not running." msgstr "Nelze spustit skript: Proces RQ Worker není spuštěn." @@ -9156,7 +9684,7 @@ msgstr "Zadejte platnou předponu a masku IPv4 nebo IPv6 v zápisu CIDR." msgid "Invalid IP prefix format: {data}" msgstr "Neplatný formát předpony IP: {data}" -#: netbox/ipam/api/views.py:358 +#: netbox/ipam/api/views.py:370 msgid "" "Insufficient space is available to accommodate the requested prefix size(s)" msgstr "" @@ -9198,182 +9726,174 @@ msgstr "Cisco" msgid "Plaintext" msgstr "Prostý text" +#: netbox/ipam/choices.py:166 netbox/ipam/forms/model_forms.py:800 +#: netbox/ipam/forms/model_forms.py:828 netbox/templates/ipam/service.html:21 +msgid "Service" +msgstr "Servisní služby" + +#: netbox/ipam/choices.py:167 +msgid "Customer" +msgstr "Zákazník" + #: netbox/ipam/fields.py:36 #, python-brace-format msgid "Invalid IP address format: {address}" msgstr "Neplatný formát IP adresy: {address}" -#: netbox/ipam/filtersets.py:48 netbox/vpn/filtersets.py:304 +#: netbox/ipam/filtersets.py:51 netbox/vpn/filtersets.py:304 msgid "Import target" msgstr "Cíl importu" -#: netbox/ipam/filtersets.py:54 netbox/vpn/filtersets.py:310 +#: netbox/ipam/filtersets.py:57 netbox/vpn/filtersets.py:310 msgid "Import target (name)" msgstr "Cíl importu (název)" -#: netbox/ipam/filtersets.py:59 netbox/vpn/filtersets.py:315 +#: netbox/ipam/filtersets.py:62 netbox/vpn/filtersets.py:315 msgid "Export target" msgstr "Cíl exportu" -#: netbox/ipam/filtersets.py:65 netbox/vpn/filtersets.py:321 +#: netbox/ipam/filtersets.py:68 netbox/vpn/filtersets.py:321 msgid "Export target (name)" msgstr "Cíl exportu (název)" -#: netbox/ipam/filtersets.py:86 +#: netbox/ipam/filtersets.py:89 msgid "Importing VRF" msgstr "Import VRF" -#: netbox/ipam/filtersets.py:92 +#: netbox/ipam/filtersets.py:95 msgid "Import VRF (RD)" msgstr "Importovat VRF (RD)" -#: netbox/ipam/filtersets.py:97 +#: netbox/ipam/filtersets.py:100 msgid "Exporting VRF" msgstr "Export VRF" -#: netbox/ipam/filtersets.py:103 +#: netbox/ipam/filtersets.py:106 msgid "Export VRF (RD)" msgstr "Export VRF (RD)" -#: netbox/ipam/filtersets.py:108 +#: netbox/ipam/filtersets.py:111 msgid "Importing L2VPN" msgstr "Import L2VPN" -#: netbox/ipam/filtersets.py:114 +#: netbox/ipam/filtersets.py:117 msgid "Importing L2VPN (identifier)" msgstr "Import L2VPN (identifikátor)" -#: netbox/ipam/filtersets.py:119 +#: netbox/ipam/filtersets.py:122 msgid "Exporting L2VPN" msgstr "Export L2VPN" -#: netbox/ipam/filtersets.py:125 +#: netbox/ipam/filtersets.py:128 msgid "Exporting L2VPN (identifier)" msgstr "Export L2VPN (identifikátor)" -#: netbox/ipam/filtersets.py:155 netbox/ipam/filtersets.py:283 -#: netbox/ipam/forms/model_forms.py:229 netbox/ipam/tables/ip.py:212 +#: netbox/ipam/filtersets.py:158 netbox/ipam/filtersets.py:286 +#: netbox/ipam/forms/model_forms.py:229 netbox/ipam/tables/ip.py:158 #: netbox/templates/ipam/prefix.html:12 msgid "Prefix" msgstr "Předpona" -#: netbox/ipam/filtersets.py:159 netbox/ipam/filtersets.py:198 -#: netbox/ipam/filtersets.py:223 +#: netbox/ipam/filtersets.py:162 netbox/ipam/filtersets.py:201 +#: netbox/ipam/filtersets.py:226 msgid "RIR (ID)" msgstr "RIR (ID)" -#: netbox/ipam/filtersets.py:165 netbox/ipam/filtersets.py:204 -#: netbox/ipam/filtersets.py:229 +#: netbox/ipam/filtersets.py:168 netbox/ipam/filtersets.py:207 +#: netbox/ipam/filtersets.py:232 msgid "RIR (slug)" msgstr "RIR (slug)" -#: netbox/ipam/filtersets.py:287 +#: netbox/ipam/filtersets.py:290 msgid "Within prefix" msgstr "V rámci předpony" -#: netbox/ipam/filtersets.py:291 +#: netbox/ipam/filtersets.py:294 msgid "Within and including prefix" msgstr "V rámci a včetně prefixu" -#: netbox/ipam/filtersets.py:295 +#: netbox/ipam/filtersets.py:298 msgid "Prefixes which contain this prefix or IP" msgstr "Předpony, které obsahují tuto předponu nebo IP" -#: netbox/ipam/filtersets.py:306 netbox/ipam/filtersets.py:574 -#: netbox/ipam/forms/bulk_edit.py:343 netbox/ipam/forms/filtersets.py:196 -#: netbox/ipam/forms/filtersets.py:331 +#: netbox/ipam/filtersets.py:309 netbox/ipam/filtersets.py:541 +#: netbox/ipam/forms/bulk_edit.py:327 netbox/ipam/forms/filtersets.py:198 +#: netbox/ipam/forms/filtersets.py:334 msgid "Mask length" msgstr "Délka masky" -#: netbox/ipam/filtersets.py:375 netbox/vpn/filtersets.py:427 +#: netbox/ipam/filtersets.py:342 netbox/vpn/filtersets.py:427 msgid "VLAN (ID)" msgstr "VLAN (ID)" -#: netbox/ipam/filtersets.py:379 netbox/vpn/filtersets.py:422 +#: netbox/ipam/filtersets.py:346 netbox/vpn/filtersets.py:422 msgid "VLAN number (1-4094)" msgstr "Číslo VLAN (1-4094)" -#: netbox/ipam/filtersets.py:473 netbox/ipam/filtersets.py:477 -#: netbox/ipam/filtersets.py:569 netbox/ipam/forms/model_forms.py:496 +#: netbox/ipam/filtersets.py:440 netbox/ipam/filtersets.py:444 +#: netbox/ipam/filtersets.py:536 netbox/ipam/forms/model_forms.py:506 #: netbox/templates/tenancy/contact.html:53 #: netbox/tenancy/forms/bulk_edit.py:113 msgid "Address" msgstr "Adresa" -#: netbox/ipam/filtersets.py:481 +#: netbox/ipam/filtersets.py:448 msgid "Ranges which contain this prefix or IP" msgstr "Rozsahy, které obsahují tuto předponu nebo IP" -#: netbox/ipam/filtersets.py:509 netbox/ipam/filtersets.py:565 +#: netbox/ipam/filtersets.py:476 netbox/ipam/filtersets.py:532 msgid "Parent prefix" msgstr "Nadřazená předpona" -#: netbox/ipam/filtersets.py:618 netbox/ipam/filtersets.py:858 -#: netbox/ipam/filtersets.py:1133 netbox/vpn/filtersets.py:385 -msgid "Virtual machine (name)" -msgstr "Virtuální počítač (název)" - -#: netbox/ipam/filtersets.py:623 netbox/ipam/filtersets.py:863 -#: netbox/ipam/filtersets.py:1127 netbox/virtualization/filtersets.py:282 -#: netbox/virtualization/filtersets.py:321 netbox/vpn/filtersets.py:390 -msgid "Virtual machine (ID)" -msgstr "Virtuální počítač (ID)" - -#: netbox/ipam/filtersets.py:629 netbox/vpn/filtersets.py:97 -#: netbox/vpn/filtersets.py:396 -msgid "Interface (name)" -msgstr "Rozhraní (název)" - -#: netbox/ipam/filtersets.py:640 netbox/vpn/filtersets.py:108 -#: netbox/vpn/filtersets.py:407 -msgid "VM interface (name)" -msgstr "Rozhraní virtuálního počítače (název)" - -#: netbox/ipam/filtersets.py:645 netbox/vpn/filtersets.py:113 -msgid "VM interface (ID)" -msgstr "Rozhraní virtuálního počítače (ID)" - -#: netbox/ipam/filtersets.py:650 +#: netbox/ipam/filtersets.py:617 msgid "FHRP group (ID)" msgstr "Skupina FHRP (ID)" -#: netbox/ipam/filtersets.py:654 +#: netbox/ipam/filtersets.py:621 msgid "Is assigned to an interface" msgstr "Je přiřazen k rozhraní" -#: netbox/ipam/filtersets.py:658 +#: netbox/ipam/filtersets.py:625 msgid "Is assigned" msgstr "Je přiřazen" -#: netbox/ipam/filtersets.py:670 +#: netbox/ipam/filtersets.py:637 msgid "Service (ID)" msgstr "Služba (ID)" -#: netbox/ipam/filtersets.py:675 +#: netbox/ipam/filtersets.py:642 msgid "NAT inside IP address (ID)" msgstr "NAT uvnitř IP adresy (ID)" -#: netbox/ipam/filtersets.py:1043 netbox/ipam/forms/bulk_import.py:322 -msgid "Assigned interface" -msgstr "Přiřazené rozhraní" +#: netbox/ipam/filtersets.py:1001 +msgid "Q-in-Q SVLAN (ID)" +msgstr "Q-in-Q SVLAN (ID)" -#: netbox/ipam/filtersets.py:1048 +#: netbox/ipam/filtersets.py:1005 +msgid "Q-in-Q SVLAN number (1-4094)" +msgstr "Číslo SVLAN Q-in-Q (1-4094)" + +#: netbox/ipam/filtersets.py:1026 msgid "Assigned VM interface" msgstr "Přiřazené rozhraní virtuálního počítače" -#: netbox/ipam/filtersets.py:1138 +#: netbox/ipam/filtersets.py:1097 +msgid "VLAN Translation Policy (name)" +msgstr "Zásady překladu VLAN (název)" + +#: netbox/ipam/filtersets.py:1163 msgid "IP address (ID)" msgstr "IP adresa (ID)" -#: netbox/ipam/filtersets.py:1144 netbox/ipam/models/ip.py:788 +#: netbox/ipam/filtersets.py:1169 netbox/ipam/models/ip.py:788 msgid "IP address" msgstr "IP adresa" -#: netbox/ipam/filtersets.py:1169 +#: netbox/ipam/filtersets.py:1194 msgid "Primary IPv4 (ID)" msgstr "Primární IPv4 (ID)" -#: netbox/ipam/filtersets.py:1174 +#: netbox/ipam/filtersets.py:1199 msgid "Primary IPv6 (ID)" msgstr "Primární IPv6 (ID)" @@ -9406,427 +9926,400 @@ msgstr "Je vyžadována maska CIDR (např. /24)." msgid "Address pattern" msgstr "Vzor adresy" -#: netbox/ipam/forms/bulk_edit.py:50 +#: netbox/ipam/forms/bulk_edit.py:53 msgid "Enforce unique space" msgstr "Vynutit jedinečný prostor" -#: netbox/ipam/forms/bulk_edit.py:88 +#: netbox/ipam/forms/bulk_edit.py:91 msgid "Is private" msgstr "Je soukromý" -#: netbox/ipam/forms/bulk_edit.py:109 netbox/ipam/forms/bulk_edit.py:138 -#: netbox/ipam/forms/bulk_edit.py:163 netbox/ipam/forms/bulk_import.py:89 -#: netbox/ipam/forms/bulk_import.py:109 netbox/ipam/forms/bulk_import.py:129 -#: netbox/ipam/forms/filtersets.py:110 netbox/ipam/forms/filtersets.py:125 -#: netbox/ipam/forms/filtersets.py:148 netbox/ipam/forms/model_forms.py:96 -#: netbox/ipam/forms/model_forms.py:109 netbox/ipam/forms/model_forms.py:131 -#: netbox/ipam/forms/model_forms.py:149 netbox/ipam/models/asns.py:31 -#: netbox/ipam/models/asns.py:103 netbox/ipam/models/ip.py:71 -#: netbox/ipam/models/ip.py:90 netbox/ipam/tables/asn.py:20 +#: netbox/ipam/forms/bulk_edit.py:112 netbox/ipam/forms/bulk_edit.py:141 +#: netbox/ipam/forms/bulk_edit.py:166 netbox/ipam/forms/bulk_import.py:92 +#: netbox/ipam/forms/bulk_import.py:112 netbox/ipam/forms/bulk_import.py:132 +#: netbox/ipam/forms/filtersets.py:112 netbox/ipam/forms/filtersets.py:127 +#: netbox/ipam/forms/filtersets.py:150 netbox/ipam/forms/model_forms.py:99 +#: netbox/ipam/forms/model_forms.py:112 netbox/ipam/forms/model_forms.py:135 +#: netbox/ipam/forms/model_forms.py:154 netbox/ipam/models/asns.py:31 +#: netbox/ipam/models/asns.py:100 netbox/ipam/models/ip.py:71 +#: netbox/ipam/models/ip.py:87 netbox/ipam/tables/asn.py:20 #: netbox/ipam/tables/asn.py:45 netbox/templates/ipam/aggregate.html:18 #: netbox/templates/ipam/asn.html:27 netbox/templates/ipam/asnrange.html:19 #: netbox/templates/ipam/rir.html:19 msgid "RIR" msgstr "RIR" -#: netbox/ipam/forms/bulk_edit.py:171 +#: netbox/ipam/forms/bulk_edit.py:174 msgid "Date added" msgstr "Datum přidání" -#: netbox/ipam/forms/bulk_edit.py:229 netbox/ipam/forms/model_forms.py:619 -#: netbox/ipam/forms/model_forms.py:666 netbox/ipam/tables/ip.py:251 -#: netbox/templates/ipam/vlan_edit.html:37 +#: netbox/ipam/forms/bulk_edit.py:213 netbox/ipam/forms/model_forms.py:629 +#: netbox/ipam/forms/model_forms.py:676 netbox/ipam/tables/ip.py:201 +#: netbox/templates/ipam/vlan_edit.html:45 #: netbox/templates/ipam/vlangroup.html:27 msgid "VLAN Group" msgstr "Skupina VLAN" -#: netbox/ipam/forms/bulk_edit.py:234 netbox/ipam/forms/bulk_import.py:185 -#: netbox/ipam/forms/filtersets.py:256 netbox/ipam/forms/model_forms.py:218 -#: netbox/ipam/models/vlans.py:250 netbox/ipam/tables/ip.py:255 -#: netbox/templates/ipam/prefix.html:60 netbox/templates/ipam/vlan.html:12 +#: netbox/ipam/forms/bulk_edit.py:218 netbox/ipam/forms/bulk_import.py:181 +#: netbox/ipam/forms/filtersets.py:259 netbox/ipam/forms/model_forms.py:217 +#: netbox/ipam/models/vlans.py:272 netbox/ipam/tables/ip.py:206 +#: netbox/templates/ipam/prefix.html:56 netbox/templates/ipam/vlan.html:12 #: netbox/templates/ipam/vlan/base.html:6 #: netbox/templates/ipam/vlan_edit.html:10 -#: netbox/templates/wireless/wirelesslan.html:30 +#: netbox/templates/wireless/wirelesslan.html:38 #: netbox/vpn/forms/bulk_import.py:304 netbox/vpn/forms/filtersets.py:284 -#: netbox/vpn/forms/model_forms.py:433 netbox/vpn/forms/model_forms.py:452 -#: netbox/wireless/forms/bulk_edit.py:55 -#: netbox/wireless/forms/bulk_import.py:48 -#: netbox/wireless/forms/model_forms.py:48 netbox/wireless/models.py:102 +#: netbox/vpn/forms/model_forms.py:436 netbox/vpn/forms/model_forms.py:455 +#: netbox/wireless/forms/bulk_edit.py:57 +#: netbox/wireless/forms/bulk_import.py:50 +#: netbox/wireless/forms/model_forms.py:50 netbox/wireless/models.py:102 msgid "VLAN" msgstr "WLAN" -#: netbox/ipam/forms/bulk_edit.py:245 +#: netbox/ipam/forms/bulk_edit.py:229 msgid "Prefix length" msgstr "Délka předpony" -#: netbox/ipam/forms/bulk_edit.py:268 netbox/ipam/forms/filtersets.py:241 -#: netbox/templates/ipam/prefix.html:85 +#: netbox/ipam/forms/bulk_edit.py:252 netbox/ipam/forms/filtersets.py:244 +#: netbox/templates/ipam/prefix.html:81 msgid "Is a pool" msgstr "Je bazén" -#: netbox/ipam/forms/bulk_edit.py:273 netbox/ipam/forms/bulk_edit.py:318 -#: netbox/ipam/forms/filtersets.py:248 netbox/ipam/forms/filtersets.py:293 -#: netbox/ipam/models/ip.py:272 netbox/ipam/models/ip.py:539 +#: netbox/ipam/forms/bulk_edit.py:257 netbox/ipam/forms/bulk_edit.py:302 +#: netbox/ipam/forms/filtersets.py:251 netbox/ipam/forms/filtersets.py:296 +#: netbox/ipam/models/ip.py:256 netbox/ipam/models/ip.py:525 msgid "Treat as fully utilized" msgstr "Zacházejte jako plně využívané" -#: netbox/ipam/forms/bulk_edit.py:287 netbox/ipam/forms/filtersets.py:171 +#: netbox/ipam/forms/bulk_edit.py:271 netbox/ipam/forms/filtersets.py:173 +#: netbox/ipam/forms/model_forms.py:232 msgid "VLAN Assignment" msgstr "Přiřazení VLAN" -#: netbox/ipam/forms/bulk_edit.py:366 netbox/ipam/models/ip.py:772 +#: netbox/ipam/forms/bulk_edit.py:350 netbox/ipam/models/ip.py:772 msgid "DNS name" msgstr "Název DNS" -#: netbox/ipam/forms/bulk_edit.py:387 netbox/ipam/forms/bulk_edit.py:534 -#: netbox/ipam/forms/bulk_import.py:418 netbox/ipam/forms/bulk_import.py:493 -#: netbox/ipam/forms/bulk_import.py:519 netbox/ipam/forms/filtersets.py:390 -#: netbox/ipam/forms/filtersets.py:530 netbox/templates/ipam/fhrpgroup.html:22 +#: netbox/ipam/forms/bulk_edit.py:371 netbox/ipam/forms/bulk_edit.py:562 +#: netbox/ipam/forms/bulk_import.py:417 netbox/ipam/forms/bulk_import.py:528 +#: netbox/ipam/forms/bulk_import.py:554 netbox/ipam/forms/filtersets.py:393 +#: netbox/ipam/forms/filtersets.py:582 netbox/templates/ipam/fhrpgroup.html:22 #: netbox/templates/ipam/inc/panels/fhrp_groups.html:24 #: netbox/templates/ipam/service.html:32 #: netbox/templates/ipam/servicetemplate.html:19 msgid "Protocol" msgstr "protokolu" -#: netbox/ipam/forms/bulk_edit.py:394 netbox/ipam/forms/filtersets.py:397 +#: netbox/ipam/forms/bulk_edit.py:378 netbox/ipam/forms/filtersets.py:400 #: netbox/ipam/tables/fhrp.py:22 netbox/templates/ipam/fhrpgroup.html:26 msgid "Group ID" msgstr "ID skupiny" -#: netbox/ipam/forms/bulk_edit.py:399 netbox/ipam/forms/filtersets.py:402 -#: netbox/wireless/forms/bulk_edit.py:68 -#: netbox/wireless/forms/bulk_edit.py:115 -#: netbox/wireless/forms/bulk_import.py:62 -#: netbox/wireless/forms/bulk_import.py:65 -#: netbox/wireless/forms/bulk_import.py:104 -#: netbox/wireless/forms/bulk_import.py:107 -#: netbox/wireless/forms/filtersets.py:54 -#: netbox/wireless/forms/filtersets.py:88 +#: netbox/ipam/forms/bulk_edit.py:383 netbox/ipam/forms/filtersets.py:405 +#: netbox/wireless/forms/bulk_edit.py:70 +#: netbox/wireless/forms/bulk_edit.py:118 +#: netbox/wireless/forms/bulk_import.py:64 +#: netbox/wireless/forms/bulk_import.py:67 +#: netbox/wireless/forms/bulk_import.py:109 +#: netbox/wireless/forms/bulk_import.py:112 +#: netbox/wireless/forms/filtersets.py:57 +#: netbox/wireless/forms/filtersets.py:116 msgid "Authentication type" msgstr "Typ autentizace" -#: netbox/ipam/forms/bulk_edit.py:404 netbox/ipam/forms/filtersets.py:406 +#: netbox/ipam/forms/bulk_edit.py:388 netbox/ipam/forms/filtersets.py:409 msgid "Authentication key" msgstr "Ověřovací klíč" -#: netbox/ipam/forms/bulk_edit.py:421 netbox/ipam/forms/filtersets.py:383 -#: netbox/ipam/forms/model_forms.py:507 netbox/netbox/navigation/menu.py:386 +#: netbox/ipam/forms/bulk_edit.py:405 netbox/ipam/forms/filtersets.py:386 +#: netbox/ipam/forms/model_forms.py:517 netbox/netbox/navigation/menu.py:407 #: netbox/templates/ipam/fhrpgroup.html:49 #: netbox/templates/wireless/inc/authentication_attrs.html:5 -#: netbox/wireless/forms/bulk_edit.py:91 -#: netbox/wireless/forms/bulk_edit.py:149 -#: netbox/wireless/forms/filtersets.py:36 -#: netbox/wireless/forms/filtersets.py:76 -#: netbox/wireless/forms/model_forms.py:55 -#: netbox/wireless/forms/model_forms.py:171 +#: netbox/wireless/forms/bulk_edit.py:94 +#: netbox/wireless/forms/bulk_edit.py:152 +#: netbox/wireless/forms/filtersets.py:39 +#: netbox/wireless/forms/filtersets.py:104 +#: netbox/wireless/forms/model_forms.py:58 +#: netbox/wireless/forms/model_forms.py:174 msgid "Authentication" msgstr "Autentizace" -#: netbox/ipam/forms/bulk_edit.py:436 netbox/ipam/forms/model_forms.py:608 -msgid "Scope type" -msgstr "Typ rozsahu" - -#: netbox/ipam/forms/bulk_edit.py:439 netbox/ipam/forms/bulk_edit.py:453 -#: netbox/ipam/forms/model_forms.py:611 netbox/ipam/forms/model_forms.py:621 -#: netbox/ipam/tables/vlans.py:71 netbox/templates/ipam/vlangroup.html:38 -msgid "Scope" -msgstr "Rozsah" - -#: netbox/ipam/forms/bulk_edit.py:446 netbox/ipam/models/vlans.py:60 +#: netbox/ipam/forms/bulk_edit.py:430 netbox/ipam/models/vlans.py:62 msgid "VLAN ID ranges" msgstr "Rozsahy ID VLAN" -#: netbox/ipam/forms/bulk_edit.py:525 +#: netbox/ipam/forms/bulk_edit.py:505 netbox/ipam/forms/bulk_import.py:485 +#: netbox/ipam/forms/filtersets.py:557 netbox/ipam/models/vlans.py:232 +#: netbox/ipam/tables/vlans.py:103 +msgid "Q-in-Q role" +msgstr "Role Q-in-Q" + +#: netbox/ipam/forms/bulk_edit.py:522 +msgid "Q-in-Q" +msgstr "Q v Q" + +#: netbox/ipam/forms/bulk_edit.py:523 msgid "Site & Group" msgstr "Stránky a skupina" -#: netbox/ipam/forms/bulk_edit.py:539 netbox/ipam/forms/model_forms.py:692 -#: netbox/ipam/forms/model_forms.py:724 netbox/ipam/tables/services.py:19 +#: netbox/ipam/forms/bulk_edit.py:546 netbox/ipam/forms/bulk_import.py:515 +#: netbox/ipam/forms/model_forms.py:724 netbox/ipam/tables/vlans.py:256 +#: netbox/templates/ipam/vlantranslationrule.html:14 +#: netbox/vpn/forms/model_forms.py:322 netbox/vpn/forms/model_forms.py:359 +msgid "Policy" +msgstr "Politika" + +#: netbox/ipam/forms/bulk_edit.py:567 netbox/ipam/forms/model_forms.py:742 +#: netbox/ipam/forms/model_forms.py:774 netbox/ipam/tables/services.py:19 #: netbox/ipam/tables/services.py:49 netbox/templates/ipam/service.html:36 #: netbox/templates/ipam/servicetemplate.html:23 msgid "Ports" msgstr "Přístavy" -#: netbox/ipam/forms/bulk_import.py:48 +#: netbox/ipam/forms/bulk_import.py:51 msgid "Import route targets" msgstr "Importovat cíle trasy" -#: netbox/ipam/forms/bulk_import.py:54 +#: netbox/ipam/forms/bulk_import.py:57 msgid "Export route targets" msgstr "Exportovat cíle trasy" -#: netbox/ipam/forms/bulk_import.py:92 netbox/ipam/forms/bulk_import.py:112 -#: netbox/ipam/forms/bulk_import.py:132 +#: netbox/ipam/forms/bulk_import.py:95 netbox/ipam/forms/bulk_import.py:115 +#: netbox/ipam/forms/bulk_import.py:135 msgid "Assigned RIR" msgstr "Přiřazené RIR" -#: netbox/ipam/forms/bulk_import.py:182 +#: netbox/ipam/forms/bulk_import.py:178 msgid "VLAN's group (if any)" msgstr "Skupina VLAN (pokud existuje)" -#: netbox/ipam/forms/bulk_import.py:308 -msgid "Parent device of assigned interface (if any)" -msgstr "Nadřazené zařízení přiřazeného rozhraní (pokud existuje)" - -#: netbox/ipam/forms/bulk_import.py:311 netbox/ipam/forms/bulk_import.py:512 -#: netbox/ipam/forms/model_forms.py:718 -#: netbox/virtualization/filtersets.py:288 -#: netbox/virtualization/filtersets.py:327 -#: netbox/virtualization/forms/bulk_edit.py:200 -#: netbox/virtualization/forms/bulk_edit.py:326 -#: netbox/virtualization/forms/bulk_import.py:146 -#: netbox/virtualization/forms/bulk_import.py:207 -#: netbox/virtualization/forms/filtersets.py:212 -#: netbox/virtualization/forms/filtersets.py:248 -#: netbox/virtualization/forms/model_forms.py:288 -#: netbox/vpn/forms/bulk_import.py:93 netbox/vpn/forms/bulk_import.py:290 -msgid "Virtual machine" -msgstr "Virtuální stroj" - -#: netbox/ipam/forms/bulk_import.py:315 -msgid "Parent VM of assigned interface (if any)" -msgstr "Nadřazený virtuální počítač přiřazeného rozhraní (pokud existuje)" +#: netbox/ipam/forms/bulk_import.py:207 +#: netbox/virtualization/forms/bulk_import.py:80 +#: netbox/wireless/forms/bulk_import.py:83 +msgid "Scope ID" +msgstr "ID rozsahu" #: netbox/ipam/forms/bulk_import.py:325 -msgid "Is primary" -msgstr "Je primární" - -#: netbox/ipam/forms/bulk_import.py:326 msgid "Make this the primary IP for the assigned device" msgstr "Nastavte to jako primární IP pro přiřazené zařízení" -#: netbox/ipam/forms/bulk_import.py:330 +#: netbox/ipam/forms/bulk_import.py:329 msgid "Is out-of-band" msgstr "Je mimo pásmo" -#: netbox/ipam/forms/bulk_import.py:331 +#: netbox/ipam/forms/bulk_import.py:330 msgid "Designate this as the out-of-band IP address for the assigned device" msgstr "Určete tuto adresu jako mimopásmovou IP adresu přiřazeného zařízení" -#: netbox/ipam/forms/bulk_import.py:371 +#: netbox/ipam/forms/bulk_import.py:370 msgid "No device or virtual machine specified; cannot set as primary IP" msgstr "" "Není určeno žádné zařízení ani virtuální počítač; nelze nastavit jako " "primární IP" -#: netbox/ipam/forms/bulk_import.py:375 +#: netbox/ipam/forms/bulk_import.py:374 msgid "No device specified; cannot set as out-of-band IP" msgstr "Není určeno žádné zařízení; nelze nastavit jako IP mimo pásmo" -#: netbox/ipam/forms/bulk_import.py:379 +#: netbox/ipam/forms/bulk_import.py:378 msgid "Cannot set out-of-band IP for virtual machines" msgstr "Nelze nastavit IP mimo pásmo pro virtuální počítače" -#: netbox/ipam/forms/bulk_import.py:383 +#: netbox/ipam/forms/bulk_import.py:382 msgid "No interface specified; cannot set as primary IP" msgstr "Není určeno žádné rozhraní; nelze nastavit jako primární IP" -#: netbox/ipam/forms/bulk_import.py:387 +#: netbox/ipam/forms/bulk_import.py:386 msgid "No interface specified; cannot set as out-of-band IP" msgstr "Není určeno žádné rozhraní; nelze nastavit jako IP mimo pásmo" -#: netbox/ipam/forms/bulk_import.py:422 +#: netbox/ipam/forms/bulk_import.py:421 msgid "Auth type" msgstr "Typ autentizace" -#: netbox/ipam/forms/bulk_import.py:437 -msgid "Scope type (app & model)" -msgstr "Typ rozsahu (aplikace a model)" - -#: netbox/ipam/forms/bulk_import.py:464 +#: netbox/ipam/forms/bulk_import.py:463 msgid "Assigned VLAN group" msgstr "Přiřazená skupina VLAN" -#: netbox/ipam/forms/bulk_import.py:495 netbox/ipam/forms/bulk_import.py:521 +#: netbox/ipam/forms/bulk_import.py:495 +msgid "Service VLAN (for Q-in-Q/802.1ad customer VLANs)" +msgstr "Servisní VLAN (pro zákaznické sítě VLAN Q-in-Q/802.1ad)" + +#: netbox/ipam/forms/bulk_import.py:518 netbox/ipam/models/vlans.py:343 +msgid "VLAN translation policy" +msgstr "Zásady překladu VLAN" + +#: netbox/ipam/forms/bulk_import.py:530 netbox/ipam/forms/bulk_import.py:556 msgid "IP protocol" msgstr "Protokol IP" -#: netbox/ipam/forms/bulk_import.py:509 +#: netbox/ipam/forms/bulk_import.py:544 msgid "Required if not assigned to a VM" msgstr "Vyžadováno, pokud není přiřazeno k virtuálnímu počítači" -#: netbox/ipam/forms/bulk_import.py:516 +#: netbox/ipam/forms/bulk_import.py:551 msgid "Required if not assigned to a device" msgstr "Požadováno, pokud není přiřazeno k zařízení" -#: netbox/ipam/forms/bulk_import.py:541 +#: netbox/ipam/forms/bulk_import.py:576 #, python-brace-format msgid "{ip} is not assigned to this device/VM." msgstr "{ip} není přiřazen k tomuto zařízení/virtuálnímu počítači." -#: netbox/ipam/forms/filtersets.py:47 netbox/ipam/forms/model_forms.py:63 -#: netbox/netbox/navigation/menu.py:189 netbox/vpn/forms/model_forms.py:410 +#: netbox/ipam/forms/filtersets.py:49 netbox/ipam/forms/model_forms.py:66 +#: netbox/netbox/navigation/menu.py:195 netbox/vpn/forms/model_forms.py:413 msgid "Route Targets" msgstr "Cíle trasy" -#: netbox/ipam/forms/filtersets.py:53 netbox/ipam/forms/model_forms.py:50 -#: netbox/vpn/forms/filtersets.py:224 netbox/vpn/forms/model_forms.py:397 +#: netbox/ipam/forms/filtersets.py:55 netbox/ipam/forms/model_forms.py:53 +#: netbox/vpn/forms/filtersets.py:224 netbox/vpn/forms/model_forms.py:400 msgid "Import targets" msgstr "Importovat cíle" -#: netbox/ipam/forms/filtersets.py:58 netbox/ipam/forms/model_forms.py:55 -#: netbox/vpn/forms/filtersets.py:229 netbox/vpn/forms/model_forms.py:402 +#: netbox/ipam/forms/filtersets.py:60 netbox/ipam/forms/model_forms.py:58 +#: netbox/vpn/forms/filtersets.py:229 netbox/vpn/forms/model_forms.py:405 msgid "Export targets" msgstr "Cíle exportu" -#: netbox/ipam/forms/filtersets.py:73 +#: netbox/ipam/forms/filtersets.py:75 msgid "Imported by VRF" msgstr "Importováno VRF" -#: netbox/ipam/forms/filtersets.py:78 +#: netbox/ipam/forms/filtersets.py:80 msgid "Exported by VRF" msgstr "Exportováno VRF" -#: netbox/ipam/forms/filtersets.py:87 netbox/ipam/tables/ip.py:89 +#: netbox/ipam/forms/filtersets.py:89 netbox/ipam/tables/ip.py:35 #: netbox/templates/ipam/rir.html:30 msgid "Private" msgstr "Soukromé" -#: netbox/ipam/forms/filtersets.py:105 netbox/ipam/forms/filtersets.py:191 -#: netbox/ipam/forms/filtersets.py:272 netbox/ipam/forms/filtersets.py:326 +#: netbox/ipam/forms/filtersets.py:107 netbox/ipam/forms/filtersets.py:193 +#: netbox/ipam/forms/filtersets.py:275 netbox/ipam/forms/filtersets.py:329 msgid "Address family" msgstr "Rodina adres" -#: netbox/ipam/forms/filtersets.py:119 netbox/templates/ipam/asnrange.html:25 +#: netbox/ipam/forms/filtersets.py:121 netbox/templates/ipam/asnrange.html:25 msgid "Range" msgstr "Rozsah" -#: netbox/ipam/forms/filtersets.py:128 +#: netbox/ipam/forms/filtersets.py:130 msgid "Start" msgstr "Začít" -#: netbox/ipam/forms/filtersets.py:132 +#: netbox/ipam/forms/filtersets.py:134 msgid "End" msgstr "Konec" -#: netbox/ipam/forms/filtersets.py:186 +#: netbox/ipam/forms/filtersets.py:188 msgid "Search within" msgstr "Vyhledávání uvnitř" -#: netbox/ipam/forms/filtersets.py:207 netbox/ipam/forms/filtersets.py:342 +#: netbox/ipam/forms/filtersets.py:209 netbox/ipam/forms/filtersets.py:345 msgid "Present in VRF" msgstr "Přítomnost ve VRF" -#: netbox/ipam/forms/filtersets.py:311 +#: netbox/ipam/forms/filtersets.py:314 msgid "Device/VM" msgstr "Zařízení/VM" -#: netbox/ipam/forms/filtersets.py:321 +#: netbox/ipam/forms/filtersets.py:324 msgid "Parent Prefix" msgstr "Nadřazená předpona" -#: netbox/ipam/forms/filtersets.py:347 -msgid "Assigned Device" -msgstr "Přiřazené zařízení" - -#: netbox/ipam/forms/filtersets.py:352 -msgid "Assigned VM" -msgstr "Přiřazený virtuální počítač" - -#: netbox/ipam/forms/filtersets.py:366 +#: netbox/ipam/forms/filtersets.py:369 msgid "Assigned to an interface" msgstr "Přiřazeno k rozhraní" -#: netbox/ipam/forms/filtersets.py:373 netbox/templates/ipam/ipaddress.html:51 +#: netbox/ipam/forms/filtersets.py:376 netbox/templates/ipam/ipaddress.html:51 msgid "DNS Name" msgstr "Název DNS" -#: netbox/ipam/forms/filtersets.py:416 netbox/ipam/models/vlans.py:251 -#: netbox/ipam/tables/ip.py:176 netbox/ipam/tables/vlans.py:82 -#: netbox/ipam/views.py:971 netbox/netbox/navigation/menu.py:193 -#: netbox/netbox/navigation/menu.py:195 +#: netbox/ipam/forms/filtersets.py:419 netbox/ipam/models/vlans.py:273 +#: netbox/ipam/tables/ip.py:122 netbox/ipam/tables/vlans.py:51 +#: netbox/ipam/views.py:1036 netbox/netbox/navigation/menu.py:199 +#: netbox/netbox/navigation/menu.py:201 msgid "VLANs" msgstr "VLAN" -#: netbox/ipam/forms/filtersets.py:457 +#: netbox/ipam/forms/filtersets.py:460 msgid "Contains VLAN ID" msgstr "Obsahuje VLAN ID" -#: netbox/ipam/forms/filtersets.py:513 netbox/ipam/models/vlans.py:192 +#: netbox/ipam/forms/filtersets.py:494 netbox/ipam/models/vlans.py:363 +msgid "Local VLAN ID" +msgstr "Místní VLAN ID" + +#: netbox/ipam/forms/filtersets.py:499 netbox/ipam/models/vlans.py:371 +msgid "Remote VLAN ID" +msgstr "Vzdálené VLAN ID" + +#: netbox/ipam/forms/filtersets.py:509 +msgid "Q-in-Q/802.1ad" +msgstr "Q-in-Q/802.1ad" + +#: netbox/ipam/forms/filtersets.py:554 netbox/ipam/models/vlans.py:191 #: netbox/templates/ipam/vlan.html:31 msgid "VLAN ID" msgstr "ID VLAN" -#: netbox/ipam/forms/filtersets.py:556 netbox/ipam/forms/model_forms.py:324 -#: netbox/ipam/forms/model_forms.py:746 netbox/ipam/forms/model_forms.py:772 -#: netbox/ipam/tables/vlans.py:195 -#: netbox/templates/virtualization/virtualdisk.html:21 -#: netbox/templates/virtualization/virtualmachine.html:12 -#: netbox/templates/virtualization/vminterface.html:21 -#: netbox/templates/vpn/tunneltermination.html:25 -#: netbox/virtualization/forms/filtersets.py:197 -#: netbox/virtualization/forms/filtersets.py:242 -#: netbox/virtualization/forms/model_forms.py:220 -#: netbox/virtualization/tables/virtualmachines.py:135 -#: netbox/virtualization/tables/virtualmachines.py:190 -#: netbox/vpn/choices.py:53 netbox/vpn/forms/filtersets.py:293 -#: netbox/vpn/forms/model_forms.py:160 netbox/vpn/forms/model_forms.py:171 -#: netbox/vpn/forms/model_forms.py:273 netbox/vpn/forms/model_forms.py:454 -msgid "Virtual Machine" -msgstr "Virtuální stroj" - -#: netbox/ipam/forms/model_forms.py:80 +#: netbox/ipam/forms/model_forms.py:83 #: netbox/templates/ipam/routetarget.html:10 msgid "Route Target" msgstr "Cíl trasy" -#: netbox/ipam/forms/model_forms.py:114 netbox/ipam/tables/ip.py:117 +#: netbox/ipam/forms/model_forms.py:118 netbox/ipam/tables/ip.py:63 #: netbox/templates/ipam/aggregate.html:11 #: netbox/templates/ipam/prefix.html:38 msgid "Aggregate" msgstr "Agregát" -#: netbox/ipam/forms/model_forms.py:135 netbox/templates/ipam/asnrange.html:12 +#: netbox/ipam/forms/model_forms.py:140 netbox/templates/ipam/asnrange.html:12 msgid "ASN Range" msgstr "Řada ASN" -#: netbox/ipam/forms/model_forms.py:231 -msgid "Site/VLAN Assignment" -msgstr "" - -#: netbox/ipam/forms/model_forms.py:259 netbox/templates/ipam/iprange.html:10 +#: netbox/ipam/forms/model_forms.py:269 netbox/templates/ipam/iprange.html:10 msgid "IP Range" msgstr "Rozsah IP" -#: netbox/ipam/forms/model_forms.py:295 netbox/ipam/forms/model_forms.py:325 -#: netbox/ipam/forms/model_forms.py:506 +#: netbox/ipam/forms/model_forms.py:305 netbox/ipam/forms/model_forms.py:335 +#: netbox/ipam/forms/model_forms.py:516 #: netbox/templates/ipam/fhrpgroup.html:19 msgid "FHRP Group" msgstr "Skupina FHRP" -#: netbox/ipam/forms/model_forms.py:310 +#: netbox/ipam/forms/model_forms.py:320 msgid "Make this the primary IP for the device/VM" msgstr "Nastavte z něj primární IP pro zařízení/virtuální počítač" -#: netbox/ipam/forms/model_forms.py:314 +#: netbox/ipam/forms/model_forms.py:324 msgid "Make this the out-of-band IP for the device" msgstr "Nastavte z tohoto pole IP mimo pásmo zařízení" -#: netbox/ipam/forms/model_forms.py:329 +#: netbox/ipam/forms/model_forms.py:339 msgid "NAT IP (Inside)" msgstr "NAT IP (uvnitř)" -#: netbox/ipam/forms/model_forms.py:391 +#: netbox/ipam/forms/model_forms.py:401 msgid "An IP address can only be assigned to a single object." msgstr "IP adresu lze přiřadit pouze jednomu objektu." -#: netbox/ipam/forms/model_forms.py:398 +#: netbox/ipam/forms/model_forms.py:408 msgid "Cannot reassign primary IP address for the parent device/VM" msgstr "" "Nelze znovu přiřadit primární adresu IP pro nadřazené zařízení/virtuální " "počítač" -#: netbox/ipam/forms/model_forms.py:402 +#: netbox/ipam/forms/model_forms.py:412 msgid "Cannot reassign out-of-Band IP address for the parent device" msgstr "Nelze znovu přiřadit IP adresu mimo pásmo pro nadřazené zařízení" -#: netbox/ipam/forms/model_forms.py:412 +#: netbox/ipam/forms/model_forms.py:422 msgid "" "Only IP addresses assigned to an interface can be designated as primary IPs." msgstr "" "Jako primární IP adresy lze označit pouze adresy IP přiřazené k rozhraní." -#: netbox/ipam/forms/model_forms.py:420 +#: netbox/ipam/forms/model_forms.py:430 msgid "" "Only IP addresses assigned to a device interface can be designated as the " "out-of-band IP for a device." @@ -9834,24 +10327,29 @@ msgstr "" "Pouze IP adresy přiřazené k rozhraní zařízení mohou být označeny jako IP " "adresy mimo pásmo zařízení." -#: netbox/ipam/forms/model_forms.py:508 +#: netbox/ipam/forms/model_forms.py:518 msgid "Virtual IP Address" msgstr "Virtuální IP adresa" -#: netbox/ipam/forms/model_forms.py:593 +#: netbox/ipam/forms/model_forms.py:603 msgid "Assignment already exists" msgstr "Přiřazení již existuje" -#: netbox/ipam/forms/model_forms.py:602 +#: netbox/ipam/forms/model_forms.py:612 #: netbox/templates/ipam/vlangroup.html:42 msgid "VLAN IDs" msgstr "ID VLAN" -#: netbox/ipam/forms/model_forms.py:620 +#: netbox/ipam/forms/model_forms.py:630 msgid "Child VLANs" msgstr "Dětské sítě VLAN" -#: netbox/ipam/forms/model_forms.py:697 netbox/ipam/forms/model_forms.py:729 +#: netbox/ipam/forms/model_forms.py:730 +#: netbox/templates/ipam/vlantranslationrule.html:11 +msgid "VLAN Translation Rule" +msgstr "Pravidlo překladu VLAN" + +#: netbox/ipam/forms/model_forms.py:747 netbox/ipam/forms/model_forms.py:779 msgid "" "Comma-separated list of one or more port numbers. A range may be specified " "using a hyphen." @@ -9859,33 +10357,28 @@ msgstr "" "Seznam jednoho nebo více čísel portů oddělený čárkami. Rozsah lze zadat " "pomocí pomlčky." -#: netbox/ipam/forms/model_forms.py:702 +#: netbox/ipam/forms/model_forms.py:752 #: netbox/templates/ipam/servicetemplate.html:12 msgid "Service Template" msgstr "Šablona služby" -#: netbox/ipam/forms/model_forms.py:749 +#: netbox/ipam/forms/model_forms.py:799 msgid "Port(s)" msgstr "Přístav (y)" -#: netbox/ipam/forms/model_forms.py:750 netbox/ipam/forms/model_forms.py:778 -#: netbox/templates/ipam/service.html:21 -msgid "Service" -msgstr "Servisní služby" - -#: netbox/ipam/forms/model_forms.py:763 +#: netbox/ipam/forms/model_forms.py:813 msgid "Service template" msgstr "Šablona služby" -#: netbox/ipam/forms/model_forms.py:775 +#: netbox/ipam/forms/model_forms.py:825 msgid "From Template" msgstr "Z šablony" -#: netbox/ipam/forms/model_forms.py:776 +#: netbox/ipam/forms/model_forms.py:826 msgid "Custom" msgstr "Zvyk" -#: netbox/ipam/forms/model_forms.py:806 +#: netbox/ipam/forms/model_forms.py:856 msgid "" "Must specify name, protocol, and port(s) if not using a service template." msgstr "" @@ -9903,28 +10396,28 @@ msgstr "Řada ASN" msgid "ASN ranges" msgstr "Rozsahy ASN" -#: netbox/ipam/models/asns.py:72 +#: netbox/ipam/models/asns.py:69 #, python-brace-format msgid "Starting ASN ({start}) must be lower than ending ASN ({end})." msgstr "Spuštění ASN ({start}) musí být nižší než koncová ASN ({end})." -#: netbox/ipam/models/asns.py:104 +#: netbox/ipam/models/asns.py:101 msgid "Regional Internet Registry responsible for this AS number space" msgstr "Regionální internetový registr odpovědný za tento číselný prostor AS" -#: netbox/ipam/models/asns.py:109 +#: netbox/ipam/models/asns.py:106 msgid "16- or 32-bit autonomous system number" msgstr "16- nebo 32bitové autonomní systémové číslo" -#: netbox/ipam/models/fhrp.py:22 +#: netbox/ipam/models/fhrp.py:21 msgid "group ID" msgstr "ID skupiny" -#: netbox/ipam/models/fhrp.py:30 netbox/ipam/models/services.py:22 +#: netbox/ipam/models/fhrp.py:29 netbox/ipam/models/services.py:21 msgid "protocol" msgstr "protokol" -#: netbox/ipam/models/fhrp.py:38 netbox/wireless/models.py:28 +#: netbox/ipam/models/fhrp.py:38 netbox/wireless/models.py:29 msgid "authentication type" msgstr "typ ověřování" @@ -9940,11 +10433,11 @@ msgstr "Skupina FHRP" msgid "FHRP groups" msgstr "Skupiny FHRP" -#: netbox/ipam/models/fhrp.py:113 +#: netbox/ipam/models/fhrp.py:110 msgid "FHRP group assignment" msgstr "Přiřazení skupiny FHRP" -#: netbox/ipam/models/fhrp.py:114 +#: netbox/ipam/models/fhrp.py:111 msgid "FHRP group assignments" msgstr "Skupinové přiřazení FHRP" @@ -9956,35 +10449,35 @@ msgstr "soukromá" msgid "IP space managed by this RIR is considered private" msgstr "IP prostor spravovaný tímto RIR je považován za soukromý" -#: netbox/ipam/models/ip.py:72 netbox/netbox/navigation/menu.py:182 +#: netbox/ipam/models/ip.py:72 netbox/netbox/navigation/menu.py:188 msgid "RIRs" msgstr "RIR" -#: netbox/ipam/models/ip.py:84 +#: netbox/ipam/models/ip.py:81 msgid "IPv4 or IPv6 network" msgstr "Síť IPv4 nebo IPv6" -#: netbox/ipam/models/ip.py:91 +#: netbox/ipam/models/ip.py:88 msgid "Regional Internet Registry responsible for this IP space" msgstr "Regionální internetový registr odpovědný za tento IP prostor" -#: netbox/ipam/models/ip.py:101 +#: netbox/ipam/models/ip.py:98 msgid "date added" msgstr "datum přidání" -#: netbox/ipam/models/ip.py:115 +#: netbox/ipam/models/ip.py:112 msgid "aggregate" msgstr "agregát" -#: netbox/ipam/models/ip.py:116 +#: netbox/ipam/models/ip.py:113 msgid "aggregates" msgstr "agregáty" -#: netbox/ipam/models/ip.py:132 +#: netbox/ipam/models/ip.py:126 msgid "Cannot create aggregate with /0 mask." msgstr "Nelze vytvořit agregát s maskou /0." -#: netbox/ipam/models/ip.py:144 +#: netbox/ipam/models/ip.py:138 #, python-brace-format msgid "" "Aggregates cannot overlap. {prefix} is already covered by an existing " @@ -9993,7 +10486,7 @@ msgstr "" "Agregáty se nemohou překrývat. {prefix} je již pokryto stávajícím agregátem " "({aggregate})." -#: netbox/ipam/models/ip.py:158 +#: netbox/ipam/models/ip.py:152 #, python-brace-format msgid "" "Prefixes cannot overlap aggregates. {prefix} covers an existing aggregate " @@ -10002,125 +10495,120 @@ msgstr "" "Předpony nemohou překrývat agregáty. {prefix} pokrývá existující agregát " "({aggregate})." -#: netbox/ipam/models/ip.py:200 netbox/ipam/models/ip.py:737 -#: netbox/vpn/models/tunnels.py:114 -msgid "role" -msgstr "role" - -#: netbox/ipam/models/ip.py:201 +#: netbox/ipam/models/ip.py:195 msgid "roles" msgstr "rolí" -#: netbox/ipam/models/ip.py:217 netbox/ipam/models/ip.py:293 +#: netbox/ipam/models/ip.py:208 netbox/ipam/models/ip.py:277 msgid "prefix" msgstr "předpona" -#: netbox/ipam/models/ip.py:218 +#: netbox/ipam/models/ip.py:209 msgid "IPv4 or IPv6 network with mask" msgstr "Síť IPv4 nebo IPv6 s maskou" -#: netbox/ipam/models/ip.py:254 +#: netbox/ipam/models/ip.py:238 msgid "Operational status of this prefix" msgstr "Provozní stav této předpony" -#: netbox/ipam/models/ip.py:262 +#: netbox/ipam/models/ip.py:246 msgid "The primary function of this prefix" msgstr "Primární funkce této předpony" -#: netbox/ipam/models/ip.py:265 +#: netbox/ipam/models/ip.py:249 msgid "is a pool" msgstr "je bazén" -#: netbox/ipam/models/ip.py:267 +#: netbox/ipam/models/ip.py:251 msgid "All IP addresses within this prefix are considered usable" msgstr "Všechny IP adresy v rámci této prefixy jsou považovány za použitelné" -#: netbox/ipam/models/ip.py:270 netbox/ipam/models/ip.py:537 +#: netbox/ipam/models/ip.py:254 netbox/ipam/models/ip.py:523 msgid "mark utilized" msgstr "použitá značka" -#: netbox/ipam/models/ip.py:294 +#: netbox/ipam/models/ip.py:278 msgid "prefixes" msgstr "předpony" -#: netbox/ipam/models/ip.py:317 +#: netbox/ipam/models/ip.py:298 msgid "Cannot create prefix with /0 mask." msgstr "Nelze vytvořit předponu s maskou /0." -#: netbox/ipam/models/ip.py:324 netbox/ipam/models/ip.py:874 +#: netbox/ipam/models/ip.py:305 netbox/ipam/models/ip.py:871 #, python-brace-format msgid "VRF {vrf}" msgstr "VRF {vrf}" -#: netbox/ipam/models/ip.py:324 netbox/ipam/models/ip.py:874 +#: netbox/ipam/models/ip.py:305 netbox/ipam/models/ip.py:871 msgid "global table" msgstr "globální tabulka" -#: netbox/ipam/models/ip.py:326 +#: netbox/ipam/models/ip.py:307 #, python-brace-format msgid "Duplicate prefix found in {table}: {prefix}" msgstr "Duplicitní předpona nalezena v {table}: {prefix}" -#: netbox/ipam/models/ip.py:495 +#: netbox/ipam/models/ip.py:481 msgid "start address" msgstr "Počáteční adresa" -#: netbox/ipam/models/ip.py:496 netbox/ipam/models/ip.py:500 -#: netbox/ipam/models/ip.py:712 +#: netbox/ipam/models/ip.py:482 netbox/ipam/models/ip.py:486 +#: netbox/ipam/models/ip.py:711 msgid "IPv4 or IPv6 address (with mask)" msgstr "Adresa IPv4 nebo IPv6 (s maskou)" -#: netbox/ipam/models/ip.py:499 +#: netbox/ipam/models/ip.py:485 msgid "end address" msgstr "koncová adresa" -#: netbox/ipam/models/ip.py:526 +#: netbox/ipam/models/ip.py:512 msgid "Operational status of this range" msgstr "Provozní stav tohoto rozsahu" -#: netbox/ipam/models/ip.py:534 +#: netbox/ipam/models/ip.py:520 msgid "The primary function of this range" msgstr "Primární funkce tohoto rozsahu" -#: netbox/ipam/models/ip.py:548 +#: netbox/ipam/models/ip.py:534 msgid "IP range" msgstr "Rozsah IP" -#: netbox/ipam/models/ip.py:549 +#: netbox/ipam/models/ip.py:535 msgid "IP ranges" msgstr "Rozsahy IP" -#: netbox/ipam/models/ip.py:565 +#: netbox/ipam/models/ip.py:548 msgid "Starting and ending IP address versions must match" msgstr "Počáteční a koncová verze IP adresy se musí shodovat" -#: netbox/ipam/models/ip.py:571 +#: netbox/ipam/models/ip.py:554 msgid "Starting and ending IP address masks must match" msgstr "Počáteční a koncová maska IP adresy se musí shodovat" -#: netbox/ipam/models/ip.py:578 +#: netbox/ipam/models/ip.py:561 #, python-brace-format msgid "" "Ending address must be greater than the starting address ({start_address})" msgstr "Koncová adresa musí být větší než počáteční adresa ({start_address})" -#: netbox/ipam/models/ip.py:590 +#: netbox/ipam/models/ip.py:589 #, python-brace-format msgid "Defined addresses overlap with range {overlapping_range} in VRF {vrf}" msgstr "" "Definované adresy se překrývají s rozsahem {overlapping_range} na VRF {vrf}" -#: netbox/ipam/models/ip.py:599 +#: netbox/ipam/models/ip.py:598 #, python-brace-format msgid "Defined range exceeds maximum supported size ({max_size})" msgstr "" "Definovaný rozsah přesahuje maximální podporovanou velikost ({max_size})" -#: netbox/ipam/models/ip.py:711 netbox/tenancy/models/contacts.py:82 +#: netbox/ipam/models/ip.py:710 netbox/tenancy/models/contacts.py:77 msgid "address" msgstr "adresa" -#: netbox/ipam/models/ip.py:734 +#: netbox/ipam/models/ip.py:733 msgid "The operational status of this IP" msgstr "Provozní stav tohoto IP" @@ -10140,31 +10628,31 @@ msgstr "IP, pro kterou je tato adresa „vnější“ IP" msgid "Hostname or FQDN (not case-sensitive)" msgstr "Název hostitele nebo FQDN (nerozlišuje velká a malá písmena)" -#: netbox/ipam/models/ip.py:789 netbox/ipam/models/services.py:94 +#: netbox/ipam/models/ip.py:789 netbox/ipam/models/services.py:90 msgid "IP addresses" msgstr "IP adresy" -#: netbox/ipam/models/ip.py:845 +#: netbox/ipam/models/ip.py:842 msgid "Cannot create IP address with /0 mask." msgstr "Nelze vytvořit IP adresu s maskou /0." -#: netbox/ipam/models/ip.py:851 +#: netbox/ipam/models/ip.py:848 #, python-brace-format msgid "{ip} is a network ID, which may not be assigned to an interface." msgstr "{ip} je síťové ID, které nemusí být přiřazeno rozhraní." -#: netbox/ipam/models/ip.py:862 +#: netbox/ipam/models/ip.py:859 #, python-brace-format msgid "" "{ip} is a broadcast address, which may not be assigned to an interface." msgstr "{ip} je vysílací adresa, která nemusí být přiřazena k rozhraní." -#: netbox/ipam/models/ip.py:876 +#: netbox/ipam/models/ip.py:873 #, python-brace-format msgid "Duplicate IP address found in {table}: {ipaddress}" msgstr "Duplicitní adresa IP nalezena v {table}: {ipaddress}" -#: netbox/ipam/models/ip.py:897 +#: netbox/ipam/models/ip.py:896 msgid "" "Cannot reassign IP address while it is designated as the primary IP for the " "parent object" @@ -10172,68 +10660,68 @@ msgstr "" "Nelze znovu přiřadit adresu IP, pokud je určena jako primární IP pro " "nadřazený objekt" -#: netbox/ipam/models/ip.py:903 +#: netbox/ipam/models/ip.py:902 msgid "Only IPv6 addresses can be assigned SLAAC status" msgstr "Stav SLAAC lze přiřadit pouze adresám IPv6" -#: netbox/ipam/models/services.py:33 +#: netbox/ipam/models/services.py:32 msgid "port numbers" msgstr "čísla portů" -#: netbox/ipam/models/services.py:59 +#: netbox/ipam/models/services.py:58 msgid "service template" msgstr "šablona služby" -#: netbox/ipam/models/services.py:60 +#: netbox/ipam/models/services.py:59 msgid "service templates" msgstr "šablony služeb" -#: netbox/ipam/models/services.py:95 +#: netbox/ipam/models/services.py:91 msgid "The specific IP addresses (if any) to which this service is bound" msgstr "Konkrétní IP adresy (pokud existují), na které je tato služba vázána" -#: netbox/ipam/models/services.py:102 +#: netbox/ipam/models/services.py:98 msgid "service" msgstr "služba" -#: netbox/ipam/models/services.py:103 +#: netbox/ipam/models/services.py:99 msgid "services" msgstr "služby" -#: netbox/ipam/models/services.py:117 +#: netbox/ipam/models/services.py:110 msgid "" "A service cannot be associated with both a device and a virtual machine." msgstr "Službu nelze přidružit jak k zařízení, tak k virtuálnímu počítači." -#: netbox/ipam/models/services.py:119 +#: netbox/ipam/models/services.py:112 msgid "" "A service must be associated with either a device or a virtual machine." msgstr "" "Služba musí být přidružena buď k zařízení, nebo k virtuálnímu počítači." -#: netbox/ipam/models/vlans.py:85 +#: netbox/ipam/models/vlans.py:87 msgid "VLAN groups" msgstr "Skupiny VLAN" -#: netbox/ipam/models/vlans.py:95 +#: netbox/ipam/models/vlans.py:94 msgid "Cannot set scope_type without scope_id." msgstr "Nelze nastavit scope_type bez scope_id." -#: netbox/ipam/models/vlans.py:97 +#: netbox/ipam/models/vlans.py:96 msgid "Cannot set scope_id without scope_type." msgstr "Nelze nastavit scope_id bez scope_type." -#: netbox/ipam/models/vlans.py:105 +#: netbox/ipam/models/vlans.py:104 #, python-brace-format msgid "Starting VLAN ID in range ({value}) cannot be less than {minimum}" msgstr "Spuštění VLAN ID v dosahu ({value}) nemůže být menší než {minimum}" -#: netbox/ipam/models/vlans.py:111 +#: netbox/ipam/models/vlans.py:110 #, python-brace-format msgid "Ending VLAN ID in range ({value}) cannot exceed {maximum}" msgstr "Ukončení VLAN ID v rozsahu ({value}) nesmí překročit {maximum}" -#: netbox/ipam/models/vlans.py:118 +#: netbox/ipam/models/vlans.py:117 #, python-brace-format msgid "" "Ending VLAN ID in range must be greater than or equal to the starting VLAN " @@ -10242,31 +10730,36 @@ msgstr "" "Koncové ID VLAN v rozsahu musí být větší nebo roven počátečnímu ID VLAN " "({range})" -#: netbox/ipam/models/vlans.py:124 +#: netbox/ipam/models/vlans.py:123 msgid "Ranges cannot overlap." msgstr "Rozsahy se nemohou překrývat." -#: netbox/ipam/models/vlans.py:181 +#: netbox/ipam/models/vlans.py:180 msgid "The specific site to which this VLAN is assigned (if any)" msgstr "Konkrétní místo, ke kterému je tato VLAN přiřazena (pokud existuje)" -#: netbox/ipam/models/vlans.py:189 +#: netbox/ipam/models/vlans.py:188 msgid "VLAN group (optional)" msgstr "Skupina VLAN (volitelné)" -#: netbox/ipam/models/vlans.py:197 +#: netbox/ipam/models/vlans.py:196 netbox/ipam/models/vlans.py:368 +#: netbox/ipam/models/vlans.py:376 msgid "Numeric VLAN ID (1-4094)" msgstr "Numerické ID VLAN (1-4094)" -#: netbox/ipam/models/vlans.py:215 +#: netbox/ipam/models/vlans.py:214 msgid "Operational status of this VLAN" msgstr "Provozní stav této VLAN" -#: netbox/ipam/models/vlans.py:223 +#: netbox/ipam/models/vlans.py:222 msgid "The primary function of this VLAN" msgstr "Primární funkce této VLAN" -#: netbox/ipam/models/vlans.py:266 +#: netbox/ipam/models/vlans.py:237 +msgid "Customer/service VLAN designation (for Q-in-Q/IEEE 802.1ad)" +msgstr "Označení VLAN zákazníka/služby (pro Q-in-Q/IEEE 802.1ad)" + +#: netbox/ipam/models/vlans.py:285 #, python-brace-format msgid "" "VLAN is assigned to group {group} (scope: {scope}); cannot also assign to " @@ -10275,41 +10768,58 @@ msgstr "" "VLAN je přiřazena ke skupině {group} (oblast působnosti: {scope}); nelze " "také přiřadit k webu {site}." -#: netbox/ipam/models/vlans.py:275 +#: netbox/ipam/models/vlans.py:294 #, python-brace-format msgid "VID must be in ranges {ranges} for VLANs in group {group}" msgstr "VID musí být v rozmezí {ranges} pro sítě VLAN ve skupině {group}" -#: netbox/ipam/models/vrfs.py:30 +#: netbox/ipam/models/vlans.py:301 +msgid "Only Q-in-Q customer VLANs maybe assigned to a service VLAN." +msgstr "" +"Službě VLAN mohou být přiřazeny pouze zákaznické sítě VLAN typu Q-in-Q." + +#: netbox/ipam/models/vlans.py:307 +msgid "A Q-in-Q customer VLAN must be assigned to a service VLAN." +msgstr "Zákaznická VLAN Q-in-Q musí být přiřazena ke službě VLAN služby." + +#: netbox/ipam/models/vlans.py:344 +msgid "VLAN translation policies" +msgstr "Zásady překladu VLAN" + +#: netbox/ipam/models/vlans.py:385 +msgid "VLAN translation rule" +msgstr "Pravidlo překladu VLAN" + +#: netbox/ipam/models/vrfs.py:29 msgid "route distinguisher" msgstr "rozlišovač trasy" -#: netbox/ipam/models/vrfs.py:31 +#: netbox/ipam/models/vrfs.py:30 msgid "Unique route distinguisher (as defined in RFC 4364)" msgstr "Jedinečný rozlišovač tras (podle definice v RFC 4364)" -#: netbox/ipam/models/vrfs.py:42 +#: netbox/ipam/models/vrfs.py:41 msgid "enforce unique space" msgstr "vynutit jedinečný prostor" -#: netbox/ipam/models/vrfs.py:43 +#: netbox/ipam/models/vrfs.py:42 msgid "Prevent duplicate prefixes/IP addresses within this VRF" msgstr "Zabraňte duplicitním předponům/IP adresám v tomto VRF" -#: netbox/ipam/models/vrfs.py:63 netbox/netbox/navigation/menu.py:186 -#: netbox/netbox/navigation/menu.py:188 +#: netbox/ipam/models/vrfs.py:62 netbox/netbox/navigation/menu.py:192 +#: netbox/netbox/navigation/menu.py:194 msgid "VRFs" msgstr "VRF" -#: netbox/ipam/models/vrfs.py:82 +#: netbox/ipam/models/vrfs.py:78 msgid "Route target value (formatted in accordance with RFC 4360)" msgstr "Cílová hodnota trasy (formátovaná v souladu s RFC 4360)" -#: netbox/ipam/models/vrfs.py:94 +#: netbox/ipam/models/vrfs.py:91 msgid "route target" msgstr "cíl trasy" -#: netbox/ipam/models/vrfs.py:95 +#: netbox/ipam/models/vrfs.py:92 msgid "route targets" msgstr "cíle trasy" @@ -10325,84 +10835,101 @@ msgstr "Počet stránek" msgid "Provider Count" msgstr "Počet poskytovatelů" -#: netbox/ipam/tables/ip.py:95 netbox/netbox/navigation/menu.py:179 -#: netbox/netbox/navigation/menu.py:181 +#: netbox/ipam/tables/ip.py:41 netbox/netbox/navigation/menu.py:185 +#: netbox/netbox/navigation/menu.py:187 msgid "Aggregates" msgstr "Agregáty" -#: netbox/ipam/tables/ip.py:125 +#: netbox/ipam/tables/ip.py:71 msgid "Added" msgstr "Přidal" -#: netbox/ipam/tables/ip.py:128 netbox/ipam/tables/ip.py:166 -#: netbox/ipam/tables/vlans.py:142 netbox/ipam/views.py:346 -#: netbox/netbox/navigation/menu.py:165 netbox/netbox/navigation/menu.py:167 -#: netbox/templates/ipam/vlan.html:84 +#: netbox/ipam/tables/ip.py:74 netbox/ipam/tables/ip.py:112 +#: netbox/ipam/tables/vlans.py:118 netbox/ipam/views.py:373 +#: netbox/netbox/navigation/menu.py:171 netbox/netbox/navigation/menu.py:173 +#: netbox/templates/ipam/vlan.html:100 msgid "Prefixes" msgstr "Předpony" -#: netbox/ipam/tables/ip.py:131 netbox/ipam/tables/ip.py:270 -#: netbox/ipam/tables/ip.py:324 netbox/ipam/tables/vlans.py:86 +#: netbox/ipam/tables/ip.py:77 netbox/ipam/tables/ip.py:221 +#: netbox/ipam/tables/ip.py:276 netbox/ipam/tables/vlans.py:55 #: netbox/templates/dcim/device.html:260 #: netbox/templates/ipam/aggregate.html:24 -#: netbox/templates/ipam/iprange.html:29 netbox/templates/ipam/prefix.html:106 +#: netbox/templates/ipam/iprange.html:29 netbox/templates/ipam/prefix.html:102 msgid "Utilization" msgstr "Využití" -#: netbox/ipam/tables/ip.py:171 netbox/netbox/navigation/menu.py:161 +#: netbox/ipam/tables/ip.py:117 netbox/netbox/navigation/menu.py:167 msgid "IP Ranges" msgstr "Rozsahy IP" -#: netbox/ipam/tables/ip.py:221 +#: netbox/ipam/tables/ip.py:167 msgid "Prefix (Flat)" msgstr "Předpona (plochá)" -#: netbox/ipam/tables/ip.py:225 +#: netbox/ipam/tables/ip.py:171 msgid "Depth" msgstr "Hloubka" -#: netbox/ipam/tables/ip.py:262 +#: netbox/ipam/tables/ip.py:191 netbox/ipam/tables/vlans.py:37 +#: netbox/virtualization/tables/clusters.py:77 +#: netbox/wireless/tables/wirelesslan.py:55 +msgid "Scope Type" +msgstr "Typ rozsahu" + +#: netbox/ipam/tables/ip.py:213 msgid "Pool" msgstr "Bazén" -#: netbox/ipam/tables/ip.py:266 netbox/ipam/tables/ip.py:320 +#: netbox/ipam/tables/ip.py:217 netbox/ipam/tables/ip.py:272 msgid "Marked Utilized" msgstr "Označeno Využito" -#: netbox/ipam/tables/ip.py:304 +#: netbox/ipam/tables/ip.py:256 msgid "Start address" msgstr "Počáteční adresa" -#: netbox/ipam/tables/ip.py:383 +#: netbox/ipam/tables/ip.py:335 msgid "NAT (Inside)" msgstr "NAT (uvnitř)" -#: netbox/ipam/tables/ip.py:388 +#: netbox/ipam/tables/ip.py:340 msgid "NAT (Outside)" msgstr "NAT (venku)" -#: netbox/ipam/tables/ip.py:393 +#: netbox/ipam/tables/ip.py:345 msgid "Assigned" msgstr "Přiřazeno" -#: netbox/ipam/tables/ip.py:429 netbox/templates/vpn/l2vpntermination.html:16 +#: netbox/ipam/tables/ip.py:381 netbox/templates/vpn/l2vpntermination.html:16 #: netbox/vpn/forms/filtersets.py:240 msgid "Assigned Object" msgstr "Přiřazený objekt" -#: netbox/ipam/tables/vlans.py:68 -msgid "Scope Type" -msgstr "Typ rozsahu" - -#: netbox/ipam/tables/vlans.py:76 +#: netbox/ipam/tables/vlans.py:45 msgid "VID Ranges" msgstr "Rozsahy VID" -#: netbox/ipam/tables/vlans.py:111 netbox/ipam/tables/vlans.py:214 +#: netbox/ipam/tables/vlans.py:80 netbox/ipam/tables/vlans.py:190 #: netbox/templates/dcim/inc/interface_vlans_table.html:4 msgid "VID" msgstr "VIDIO" +#: netbox/ipam/tables/vlans.py:237 +#: netbox/templates/ipam/vlantranslationpolicy.html:22 +msgid "Rules" +msgstr "Pravidla" + +#: netbox/ipam/tables/vlans.py:260 +#: netbox/templates/ipam/vlantranslationrule.html:18 +msgid "Local VID" +msgstr "Místní VID" + +#: netbox/ipam/tables/vlans.py:264 +#: netbox/templates/ipam/vlantranslationrule.html:22 +msgid "Remote VID" +msgstr "Vzdálený VID" + #: netbox/ipam/tables/vrfs.py:30 msgid "RD" msgstr "RD" @@ -10442,23 +10969,23 @@ msgstr "" "V názvech DNS jsou povoleny pouze alfanumerické znaky, hvězdičky, pomlčky, " "tečky a podtržítka" -#: netbox/ipam/views.py:533 +#: netbox/ipam/views.py:570 msgid "Child Prefixes" msgstr "Dětské předpony" -#: netbox/ipam/views.py:569 +#: netbox/ipam/views.py:606 msgid "Child Ranges" msgstr "Dětské rozsahy" -#: netbox/ipam/views.py:898 +#: netbox/ipam/views.py:958 msgid "Related IPs" msgstr "Související IP adresy" -#: netbox/ipam/views.py:1127 +#: netbox/ipam/views.py:1315 msgid "Device Interfaces" msgstr "Rozhraní zařízení" -#: netbox/ipam/views.py:1145 +#: netbox/ipam/views.py:1333 msgid "VM Interfaces" msgstr "Rozhraní virtuálních počítačů" @@ -10506,90 +11033,112 @@ msgstr "{class_name} musí implementovat get_view_name ()" msgid "Invalid permission {permission} for model {model}" msgstr "Neplatné oprávnění {permission} pro model {model}" -#: netbox/netbox/choices.py:49 +#: netbox/netbox/choices.py:51 msgid "Dark Red" msgstr "Tmavě červená" -#: netbox/netbox/choices.py:52 +#: netbox/netbox/choices.py:54 msgid "Rose" msgstr "růže" -#: netbox/netbox/choices.py:53 +#: netbox/netbox/choices.py:55 msgid "Fuchsia" msgstr "Fuchsiová" -#: netbox/netbox/choices.py:55 +#: netbox/netbox/choices.py:57 msgid "Dark Purple" msgstr "Tmavě fialová" -#: netbox/netbox/choices.py:58 +#: netbox/netbox/choices.py:60 msgid "Light Blue" msgstr "Světle modrá" -#: netbox/netbox/choices.py:61 +#: netbox/netbox/choices.py:63 msgid "Aqua" msgstr "Aqua" -#: netbox/netbox/choices.py:62 +#: netbox/netbox/choices.py:64 msgid "Dark Green" msgstr "Tmavě zelená" -#: netbox/netbox/choices.py:64 +#: netbox/netbox/choices.py:66 msgid "Light Green" msgstr "Světle zelená" -#: netbox/netbox/choices.py:65 +#: netbox/netbox/choices.py:67 msgid "Lime" msgstr "Limetka" -#: netbox/netbox/choices.py:67 +#: netbox/netbox/choices.py:69 msgid "Amber" msgstr "Jantar" -#: netbox/netbox/choices.py:69 +#: netbox/netbox/choices.py:71 msgid "Dark Orange" msgstr "Tmavě oranžová" -#: netbox/netbox/choices.py:70 +#: netbox/netbox/choices.py:72 msgid "Brown" msgstr "Hnědý" -#: netbox/netbox/choices.py:71 +#: netbox/netbox/choices.py:73 msgid "Light Grey" msgstr "Světle šedá" -#: netbox/netbox/choices.py:72 +#: netbox/netbox/choices.py:74 msgid "Grey" msgstr "Šedá" -#: netbox/netbox/choices.py:73 +#: netbox/netbox/choices.py:75 msgid "Dark Grey" msgstr "Tmavě šedá" -#: netbox/netbox/choices.py:128 +#: netbox/netbox/choices.py:103 netbox/templates/extras/script_result.html:56 +msgid "Default" +msgstr "Výchozí" + +#: netbox/netbox/choices.py:130 msgid "Direct" msgstr "Přímo" -#: netbox/netbox/choices.py:129 +#: netbox/netbox/choices.py:131 msgid "Upload" msgstr "Nahrát" -#: netbox/netbox/choices.py:141 netbox/netbox/choices.py:155 +#: netbox/netbox/choices.py:143 netbox/netbox/choices.py:157 msgid "Auto-detect" msgstr "Automatická detekce" -#: netbox/netbox/choices.py:156 +#: netbox/netbox/choices.py:158 msgid "Comma" msgstr "Čárka" -#: netbox/netbox/choices.py:157 +#: netbox/netbox/choices.py:159 msgid "Semicolon" msgstr "Středník" -#: netbox/netbox/choices.py:158 +#: netbox/netbox/choices.py:160 msgid "Tab" msgstr "Záložka" +#: netbox/netbox/choices.py:193 netbox/templates/dcim/device.html:327 +#: netbox/templates/dcim/rack.html:107 +msgid "Kilograms" +msgstr "Kilogramy" + +#: netbox/netbox/choices.py:194 +msgid "Grams" +msgstr "Gramy" + +#: netbox/netbox/choices.py:195 netbox/templates/dcim/device.html:328 +#: netbox/templates/dcim/rack.html:108 +msgid "Pounds" +msgstr "Libry" + +#: netbox/netbox/choices.py:196 +msgid "Ounces" +msgstr "Unce" + #: netbox/netbox/config/__init__.py:67 #, python-brace-format msgid "Invalid configuration parameter: {item}" @@ -10876,6 +11425,26 @@ msgstr "datum synchronizováno" msgid "{class_name} must implement a sync_data() method." msgstr "{class_name} musí implementovat metodu sync_data ()." +#: netbox/netbox/models/mixins.py:22 +msgid "weight unit" +msgstr "hmotnostní jednotka" + +#: netbox/netbox/models/mixins.py:52 +msgid "Must specify a unit when setting a weight" +msgstr "Při nastavování hmotnosti je nutné zadat jednotku" + +#: netbox/netbox/models/mixins.py:57 +msgid "distance" +msgstr "vzdálenost" + +#: netbox/netbox/models/mixins.py:64 +msgid "distance unit" +msgstr "jednotka vzdálenosti" + +#: netbox/netbox/models/mixins.py:99 +msgid "Must specify a unit when setting a distance" +msgstr "Při nastavování vzdálenosti je nutné zadat jednotku" + #: netbox/netbox/navigation/menu.py:11 msgid "Organization" msgstr "Organizace" @@ -10909,10 +11478,6 @@ msgstr "Role stojanu" msgid "Elevations" msgstr "Nadmořská výška" -#: netbox/netbox/navigation/menu.py:60 netbox/netbox/navigation/menu.py:62 -msgid "Rack Types" -msgstr "Typy stojanů" - #: netbox/netbox/navigation/menu.py:76 msgid "Modules" msgstr "Moduly" @@ -10935,175 +11500,200 @@ msgstr "Komponenty zařízení" msgid "Inventory Item Roles" msgstr "Role položek inventáře" -#: netbox/netbox/navigation/menu.py:111 netbox/netbox/navigation/menu.py:115 +#: netbox/netbox/navigation/menu.py:110 +#: netbox/templates/dcim/interface.html:413 +#: netbox/templates/virtualization/vminterface.html:118 +msgid "MAC Addresses" +msgstr "MAC adresy" + +#: netbox/netbox/navigation/menu.py:117 netbox/netbox/navigation/menu.py:121 +#: netbox/templates/dcim/interface.html:182 msgid "Connections" msgstr "Spojení" -#: netbox/netbox/navigation/menu.py:117 +#: netbox/netbox/navigation/menu.py:123 msgid "Cables" msgstr "Kabely" -#: netbox/netbox/navigation/menu.py:118 +#: netbox/netbox/navigation/menu.py:124 msgid "Wireless Links" msgstr "Bezdrátové spoje" -#: netbox/netbox/navigation/menu.py:121 +#: netbox/netbox/navigation/menu.py:127 msgid "Interface Connections" msgstr "Připojení rozhraní" -#: netbox/netbox/navigation/menu.py:126 +#: netbox/netbox/navigation/menu.py:132 msgid "Console Connections" msgstr "Připojení konzoly" -#: netbox/netbox/navigation/menu.py:131 +#: netbox/netbox/navigation/menu.py:137 msgid "Power Connections" msgstr "Napájecí připojení" -#: netbox/netbox/navigation/menu.py:147 +#: netbox/netbox/navigation/menu.py:153 msgid "Wireless LAN Groups" msgstr "Skupiny bezdrátových sítí" -#: netbox/netbox/navigation/menu.py:168 +#: netbox/netbox/navigation/menu.py:174 msgid "Prefix & VLAN Roles" msgstr "Role síťových rozsahů a VLAN" -#: netbox/netbox/navigation/menu.py:174 +#: netbox/netbox/navigation/menu.py:180 msgid "ASN Ranges" msgstr "Rozsahy ASN" -#: netbox/netbox/navigation/menu.py:196 +#: netbox/netbox/navigation/menu.py:202 msgid "VLAN Groups" msgstr "Skupiny VLAN" #: netbox/netbox/navigation/menu.py:203 +msgid "VLAN Translation Policies" +msgstr "Zásady překladu VLAN" + +#: netbox/netbox/navigation/menu.py:204 +#: netbox/templates/ipam/vlantranslationpolicy.html:46 +msgid "VLAN Translation Rules" +msgstr "Pravidla překladu VLAN" + +#: netbox/netbox/navigation/menu.py:211 msgid "Service Templates" msgstr "Šablony služeb" -#: netbox/netbox/navigation/menu.py:204 netbox/templates/dcim/device.html:302 +#: netbox/netbox/navigation/menu.py:212 netbox/templates/dcim/device.html:302 #: netbox/templates/ipam/ipaddress.html:118 #: netbox/templates/virtualization/virtualmachine.html:154 msgid "Services" msgstr "Služby" -#: netbox/netbox/navigation/menu.py:211 +#: netbox/netbox/navigation/menu.py:219 msgid "VPN" msgstr "VPN" -#: netbox/netbox/navigation/menu.py:215 netbox/netbox/navigation/menu.py:217 +#: netbox/netbox/navigation/menu.py:223 netbox/netbox/navigation/menu.py:225 #: netbox/vpn/tables/tunnels.py:24 msgid "Tunnels" msgstr "Tunely" -#: netbox/netbox/navigation/menu.py:218 +#: netbox/netbox/navigation/menu.py:226 #: netbox/templates/vpn/tunnelgroup.html:8 msgid "Tunnel Groups" msgstr "Skupiny tunelů" -#: netbox/netbox/navigation/menu.py:219 +#: netbox/netbox/navigation/menu.py:227 msgid "Tunnel Terminations" msgstr "Zakončení tunelů" -#: netbox/netbox/navigation/menu.py:223 netbox/netbox/navigation/menu.py:225 +#: netbox/netbox/navigation/menu.py:231 netbox/netbox/navigation/menu.py:233 #: netbox/vpn/models/l2vpn.py:64 msgid "L2VPNs" msgstr "L2VPN" -#: netbox/netbox/navigation/menu.py:226 netbox/templates/vpn/l2vpn.html:56 -#: netbox/templates/vpn/tunnel.html:72 netbox/vpn/tables/tunnels.py:58 -msgid "Terminations" -msgstr "Zakončení" - -#: netbox/netbox/navigation/menu.py:232 +#: netbox/netbox/navigation/menu.py:240 msgid "IKE Proposals" msgstr "Návrhy IKE" -#: netbox/netbox/navigation/menu.py:233 +#: netbox/netbox/navigation/menu.py:241 #: netbox/templates/vpn/ikeproposal.html:41 msgid "IKE Policies" msgstr "Zásady IKE" -#: netbox/netbox/navigation/menu.py:234 +#: netbox/netbox/navigation/menu.py:242 msgid "IPSec Proposals" msgstr "Návrhy IPsec" -#: netbox/netbox/navigation/menu.py:235 +#: netbox/netbox/navigation/menu.py:243 #: netbox/templates/vpn/ipsecproposal.html:37 msgid "IPSec Policies" msgstr "Zásady protokolu IPsec" -#: netbox/netbox/navigation/menu.py:236 netbox/templates/vpn/ikepolicy.html:38 +#: netbox/netbox/navigation/menu.py:244 netbox/templates/vpn/ikepolicy.html:38 #: netbox/templates/vpn/ipsecpolicy.html:25 msgid "IPSec Profiles" msgstr "Profily IPsec" -#: netbox/netbox/navigation/menu.py:251 +#: netbox/netbox/navigation/menu.py:259 #: netbox/templates/virtualization/virtualmachine.html:174 #: netbox/templates/virtualization/virtualmachine/base.html:32 #: netbox/templates/virtualization/virtualmachine_list.html:21 -#: netbox/virtualization/tables/virtualmachines.py:104 -#: netbox/virtualization/views.py:386 +#: netbox/virtualization/tables/virtualmachines.py:74 +#: netbox/virtualization/views.py:403 msgid "Virtual Disks" msgstr "Virtuální disky" -#: netbox/netbox/navigation/menu.py:258 +#: netbox/netbox/navigation/menu.py:266 msgid "Cluster Types" msgstr "Typy klastrů" -#: netbox/netbox/navigation/menu.py:259 +#: netbox/netbox/navigation/menu.py:267 msgid "Cluster Groups" msgstr "Skupiny klastrů" -#: netbox/netbox/navigation/menu.py:273 +#: netbox/netbox/navigation/menu.py:281 msgid "Circuit Types" msgstr "Typy obvodů" -#: netbox/netbox/navigation/menu.py:274 -msgid "Circuit Groups" -msgstr "Skupiny obvodů" - -#: netbox/netbox/navigation/menu.py:275 -#: netbox/templates/circuits/circuit.html:66 -msgid "Group Assignments" -msgstr "Skupinové úkoly" - -#: netbox/netbox/navigation/menu.py:276 +#: netbox/netbox/navigation/menu.py:282 msgid "Circuit Terminations" msgstr "Ukončení obvodů" -#: netbox/netbox/navigation/menu.py:280 netbox/netbox/navigation/menu.py:282 +#: netbox/netbox/navigation/menu.py:286 netbox/netbox/navigation/menu.py:288 +#: netbox/templates/circuits/providernetwork.html:55 +msgid "Virtual Circuits" +msgstr "Virtuální obvody" + +#: netbox/netbox/navigation/menu.py:289 +msgid "Virtual Circuit Types" +msgstr "Typy virtuálních obvodů" + +#: netbox/netbox/navigation/menu.py:290 +msgid "Virtual Circuit Terminations" +msgstr "Ukončení virtuálních obvodů" + +#: netbox/netbox/navigation/menu.py:296 +msgid "Circuit Groups" +msgstr "Skupiny obvodů" + +#: netbox/netbox/navigation/menu.py:297 +#: netbox/templates/circuits/circuit.html:76 +#: netbox/templates/circuits/virtualcircuit.html:69 +msgid "Group Assignments" +msgstr "Skupinové úkoly" + +#: netbox/netbox/navigation/menu.py:301 netbox/netbox/navigation/menu.py:303 msgid "Providers" msgstr "Poskytovatelé" -#: netbox/netbox/navigation/menu.py:283 +#: netbox/netbox/navigation/menu.py:304 #: netbox/templates/circuits/provider.html:51 msgid "Provider Accounts" msgstr "Účty poskytovatele" -#: netbox/netbox/navigation/menu.py:284 +#: netbox/netbox/navigation/menu.py:305 msgid "Provider Networks" msgstr "Sítě poskytovatelů" -#: netbox/netbox/navigation/menu.py:298 +#: netbox/netbox/navigation/menu.py:319 msgid "Power Panels" msgstr "Napájecí panely" -#: netbox/netbox/navigation/menu.py:309 +#: netbox/netbox/navigation/menu.py:330 msgid "Configurations" msgstr "Konfigurace" -#: netbox/netbox/navigation/menu.py:311 +#: netbox/netbox/navigation/menu.py:332 msgid "Config Contexts" msgstr "Kontexty konfigurace" -#: netbox/netbox/navigation/menu.py:312 +#: netbox/netbox/navigation/menu.py:333 msgid "Config Templates" msgstr "Konfigurační šablony" -#: netbox/netbox/navigation/menu.py:319 netbox/netbox/navigation/menu.py:323 +#: netbox/netbox/navigation/menu.py:340 netbox/netbox/navigation/menu.py:344 msgid "Customization" msgstr "Přizpůsobení" -#: netbox/netbox/navigation/menu.py:325 +#: netbox/netbox/navigation/menu.py:346 #: netbox/templates/dcim/device_edit.html:103 #: netbox/templates/dcim/htmx/cable_edit.html:81 #: netbox/templates/dcim/virtualchassis_add.html:31 @@ -11112,96 +11702,96 @@ msgstr "Přizpůsobení" #: netbox/templates/htmx/form.html:19 netbox/templates/inc/filter_list.html:30 #: netbox/templates/inc/panels/custom_fields.html:7 #: netbox/templates/ipam/ipaddress_bulk_add.html:35 -#: netbox/templates/ipam/vlan_edit.html:59 +#: netbox/templates/ipam/vlan_edit.html:67 msgid "Custom Fields" msgstr "Vlastní pole" -#: netbox/netbox/navigation/menu.py:326 +#: netbox/netbox/navigation/menu.py:347 msgid "Custom Field Choices" msgstr "Volby uživatelských polí" -#: netbox/netbox/navigation/menu.py:327 +#: netbox/netbox/navigation/menu.py:348 msgid "Custom Links" msgstr "Vlastní odkazy" -#: netbox/netbox/navigation/menu.py:328 +#: netbox/netbox/navigation/menu.py:349 msgid "Export Templates" msgstr "Exportovat šablony" -#: netbox/netbox/navigation/menu.py:329 +#: netbox/netbox/navigation/menu.py:350 msgid "Saved Filters" msgstr "Uložené filtry" -#: netbox/netbox/navigation/menu.py:331 +#: netbox/netbox/navigation/menu.py:352 msgid "Image Attachments" msgstr "Přílohy obrázků" -#: netbox/netbox/navigation/menu.py:349 +#: netbox/netbox/navigation/menu.py:370 msgid "Operations" msgstr "Operace" -#: netbox/netbox/navigation/menu.py:353 +#: netbox/netbox/navigation/menu.py:374 msgid "Integrations" msgstr "Integrace" -#: netbox/netbox/navigation/menu.py:355 +#: netbox/netbox/navigation/menu.py:376 msgid "Data Sources" msgstr "Zdroje dat" -#: netbox/netbox/navigation/menu.py:356 +#: netbox/netbox/navigation/menu.py:377 msgid "Event Rules" msgstr "Pravidla události" -#: netbox/netbox/navigation/menu.py:357 +#: netbox/netbox/navigation/menu.py:378 msgid "Webhooks" msgstr "Webhooky" -#: netbox/netbox/navigation/menu.py:361 netbox/netbox/navigation/menu.py:365 -#: netbox/netbox/views/generic/feature_views.py:153 +#: netbox/netbox/navigation/menu.py:382 netbox/netbox/navigation/menu.py:386 +#: netbox/netbox/views/generic/feature_views.py:158 #: netbox/templates/extras/report/base.html:37 #: netbox/templates/extras/script/base.html:36 msgid "Jobs" msgstr "Pracovní místa" -#: netbox/netbox/navigation/menu.py:371 +#: netbox/netbox/navigation/menu.py:392 msgid "Logging" msgstr "Protokolování" -#: netbox/netbox/navigation/menu.py:373 +#: netbox/netbox/navigation/menu.py:394 msgid "Notification Groups" msgstr "Skupiny oznámení" -#: netbox/netbox/navigation/menu.py:374 +#: netbox/netbox/navigation/menu.py:395 msgid "Journal Entries" msgstr "Záznamy deníku" -#: netbox/netbox/navigation/menu.py:375 +#: netbox/netbox/navigation/menu.py:396 #: netbox/templates/core/objectchange.html:9 #: netbox/templates/core/objectchange_list.html:4 msgid "Change Log" msgstr "Protokol změn" -#: netbox/netbox/navigation/menu.py:382 netbox/templates/inc/user_menu.html:29 +#: netbox/netbox/navigation/menu.py:403 netbox/templates/inc/user_menu.html:29 msgid "Admin" msgstr "Administrátor" -#: netbox/netbox/navigation/menu.py:430 netbox/templates/account/base.html:27 -#: netbox/templates/inc/user_menu.html:57 +#: netbox/netbox/navigation/menu.py:451 netbox/templates/account/base.html:27 +#: netbox/templates/inc/user_menu.html:52 msgid "API Tokens" msgstr "Tokeny API" -#: netbox/netbox/navigation/menu.py:437 netbox/users/forms/model_forms.py:187 +#: netbox/netbox/navigation/menu.py:458 netbox/users/forms/model_forms.py:187 #: netbox/users/forms/model_forms.py:195 netbox/users/forms/model_forms.py:242 #: netbox/users/forms/model_forms.py:249 msgid "Permissions" msgstr "Oprávnění" -#: netbox/netbox/navigation/menu.py:445 netbox/netbox/navigation/menu.py:449 +#: netbox/netbox/navigation/menu.py:466 netbox/netbox/navigation/menu.py:470 #: netbox/templates/core/system.html:7 msgid "System" msgstr "Systém" -#: netbox/netbox/navigation/menu.py:454 netbox/netbox/navigation/menu.py:502 +#: netbox/netbox/navigation/menu.py:475 netbox/netbox/navigation/menu.py:523 #: netbox/templates/500.html:35 netbox/templates/account/preferences.html:22 #: netbox/templates/core/plugin.html:13 #: netbox/templates/core/plugin_list.html:7 @@ -11209,29 +11799,29 @@ msgstr "Systém" msgid "Plugins" msgstr "Pluginy" -#: netbox/netbox/navigation/menu.py:459 +#: netbox/netbox/navigation/menu.py:480 msgid "Configuration History" msgstr "Historie konfigurace" -#: netbox/netbox/navigation/menu.py:465 netbox/templates/core/rq_task.html:8 +#: netbox/netbox/navigation/menu.py:486 netbox/templates/core/rq_task.html:8 #: netbox/templates/core/rq_task_list.html:22 msgid "Background Tasks" msgstr "Úkoly na pozadí" -#: netbox/netbox/plugins/navigation.py:47 -#: netbox/netbox/plugins/navigation.py:69 +#: netbox/netbox/plugins/navigation.py:48 +#: netbox/netbox/plugins/navigation.py:70 msgid "Permissions must be passed as a tuple or list." msgstr "Oprávnění musí být předána jako dvojice nebo seznam." -#: netbox/netbox/plugins/navigation.py:51 +#: netbox/netbox/plugins/navigation.py:52 msgid "Buttons must be passed as a tuple or list." msgstr "Tlačítka musí být předána jako dvojice nebo seznam." -#: netbox/netbox/plugins/navigation.py:73 +#: netbox/netbox/plugins/navigation.py:74 msgid "Button color must be a choice within ButtonColorChoices." msgstr "Barva tlačítka musí být volbou z ButtonColorChoices." -#: netbox/netbox/plugins/registration.py:25 +#: netbox/netbox/plugins/registration.py:26 #, python-brace-format msgid "" "PluginTemplateExtension class {template_extension} was passed as an " @@ -11239,7 +11829,7 @@ msgid "" msgstr "" "Třída PluginTemplateExtension {template_extension} byl předán jako instance!" -#: netbox/netbox/plugins/registration.py:31 +#: netbox/netbox/plugins/registration.py:32 #, python-brace-format msgid "" "{template_extension} is not a subclass of " @@ -11247,17 +11837,17 @@ msgid "" msgstr "" "{template_extension} není podtřídou Netbox.Plugins.PluginTemplateExtension!" -#: netbox/netbox/plugins/registration.py:51 +#: netbox/netbox/plugins/registration.py:57 #, python-brace-format msgid "{item} must be an instance of netbox.plugins.PluginMenuItem" msgstr "{item} musí být instancí Netbox.Plugins.PluginMenuItem" -#: netbox/netbox/plugins/registration.py:62 +#: netbox/netbox/plugins/registration.py:68 #, python-brace-format msgid "{menu_link} must be an instance of netbox.plugins.PluginMenuItem" msgstr "{menu_link} musí být instancí Netbox.Plugins.PluginMenuItem" -#: netbox/netbox/plugins/registration.py:67 +#: netbox/netbox/plugins/registration.py:73 #, python-brace-format msgid "{button} must be an instance of netbox.plugins.PluginMenuButton" msgstr "{button} musí být instancí Netbox.Plugins.PluginMenuButton" @@ -11340,93 +11930,93 @@ msgstr "Po inicializaci nelze do registru přidat úložiště" msgid "Cannot delete stores from registry" msgstr "Nelze odstranit obchody z registru" -#: netbox/netbox/settings.py:760 +#: netbox/netbox/settings.py:752 msgid "Czech" msgstr "Čeština" -#: netbox/netbox/settings.py:761 +#: netbox/netbox/settings.py:753 msgid "Danish" msgstr "Dánština" -#: netbox/netbox/settings.py:762 +#: netbox/netbox/settings.py:754 msgid "German" msgstr "Němčina" -#: netbox/netbox/settings.py:763 +#: netbox/netbox/settings.py:755 msgid "English" msgstr "Angličtina" -#: netbox/netbox/settings.py:764 +#: netbox/netbox/settings.py:756 msgid "Spanish" msgstr "Španělština" -#: netbox/netbox/settings.py:765 +#: netbox/netbox/settings.py:757 msgid "French" msgstr "Francouzština" -#: netbox/netbox/settings.py:766 +#: netbox/netbox/settings.py:758 msgid "Italian" msgstr "Italština" -#: netbox/netbox/settings.py:767 +#: netbox/netbox/settings.py:759 msgid "Japanese" msgstr "Japonština" -#: netbox/netbox/settings.py:768 +#: netbox/netbox/settings.py:760 msgid "Dutch" msgstr "Holandština" -#: netbox/netbox/settings.py:769 +#: netbox/netbox/settings.py:761 msgid "Polish" msgstr "Polština" -#: netbox/netbox/settings.py:770 +#: netbox/netbox/settings.py:762 msgid "Portuguese" msgstr "Portugalština" -#: netbox/netbox/settings.py:771 +#: netbox/netbox/settings.py:763 msgid "Russian" msgstr "Ruština" -#: netbox/netbox/settings.py:772 +#: netbox/netbox/settings.py:764 msgid "Turkish" msgstr "Turečtina" -#: netbox/netbox/settings.py:773 +#: netbox/netbox/settings.py:765 msgid "Ukrainian" msgstr "Ukrajinština" -#: netbox/netbox/settings.py:774 +#: netbox/netbox/settings.py:766 msgid "Chinese" msgstr "Čínština" -#: netbox/netbox/tables/columns.py:176 +#: netbox/netbox/tables/columns.py:177 msgid "Select all" msgstr "Vybrat vše" -#: netbox/netbox/tables/columns.py:189 +#: netbox/netbox/tables/columns.py:190 msgid "Toggle all" msgstr "Přepnout vše" -#: netbox/netbox/tables/columns.py:300 +#: netbox/netbox/tables/columns.py:302 msgid "Toggle Dropdown" msgstr "Přepnout rozevírací nabídku" -#: netbox/netbox/tables/columns.py:572 netbox/templates/core/job.html:53 +#: netbox/netbox/tables/columns.py:575 netbox/templates/core/job.html:53 msgid "Error" msgstr "Chyba" -#: netbox/netbox/tables/tables.py:58 +#: netbox/netbox/tables/tables.py:59 #, python-brace-format msgid "No {model_name} found" msgstr "{model_name} nenalezeno" -#: netbox/netbox/tables/tables.py:249 +#: netbox/netbox/tables/tables.py:252 #: netbox/templates/generic/bulk_import.html:117 msgid "Field" msgstr "Pole" -#: netbox/netbox/tables/tables.py:252 +#: netbox/netbox/tables/tables.py:255 msgid "Value" msgstr "Hodnota" @@ -11442,24 +12032,24 @@ msgid "" msgstr "" "Při vykreslování vybrané šablony exportu došlo k chybě ({template}): {error}" -#: netbox/netbox/views/generic/bulk_views.py:416 +#: netbox/netbox/views/generic/bulk_views.py:421 #, python-brace-format msgid "Row {i}: Object with ID {id} does not exist" msgstr "Řádek {i}: Objekt s ID {id} neexistuje" -#: netbox/netbox/views/generic/bulk_views.py:709 -#: netbox/netbox/views/generic/bulk_views.py:910 -#: netbox/netbox/views/generic/bulk_views.py:958 +#: netbox/netbox/views/generic/bulk_views.py:708 +#: netbox/netbox/views/generic/bulk_views.py:909 +#: netbox/netbox/views/generic/bulk_views.py:957 #, python-brace-format msgid "No {object_type} were selected." msgstr "Ne {object_type} Byly vybrány." -#: netbox/netbox/views/generic/bulk_views.py:788 +#: netbox/netbox/views/generic/bulk_views.py:787 #, python-brace-format msgid "Renamed {count} {object_type}" msgstr "Přejmenováno {count} {object_type}" -#: netbox/netbox/views/generic/bulk_views.py:888 +#: netbox/netbox/views/generic/bulk_views.py:887 #, python-brace-format msgid "Deleted {count} {object_type}" msgstr "Vymazáno {count} {object_type}" @@ -11472,16 +12062,16 @@ msgstr "Seznam změn" msgid "Journal" msgstr "věstníku" -#: netbox/netbox/views/generic/feature_views.py:207 +#: netbox/netbox/views/generic/feature_views.py:212 msgid "Unable to synchronize data: No data file set." msgstr "Nelze synchronizovat data: Žádný datový soubor není nastaven." -#: netbox/netbox/views/generic/feature_views.py:211 +#: netbox/netbox/views/generic/feature_views.py:216 #, python-brace-format msgid "Synchronized data for {object_type} {object}." msgstr "Synchronizovaná data pro {object_type} {object}." -#: netbox/netbox/views/generic/feature_views.py:236 +#: netbox/netbox/views/generic/feature_views.py:241 #, python-brace-format msgid "Synced {count} {object_type}" msgstr "Synchronizováno {count} {object_type}" @@ -11555,9 +12145,9 @@ msgstr "na GitHubu" msgid "Home Page" msgstr "Domovská stránka" -#: netbox/templates/account/base.html:7 netbox/templates/inc/user_menu.html:45 +#: netbox/templates/account/base.html:7 netbox/templates/inc/user_menu.html:40 #: netbox/vpn/forms/bulk_edit.py:255 netbox/vpn/forms/filtersets.py:189 -#: netbox/vpn/forms/model_forms.py:379 +#: netbox/vpn/forms/model_forms.py:382 msgid "Profile" msgstr "Profil" @@ -11569,12 +12159,12 @@ msgstr "Oznámení" #: netbox/templates/account/base.html:16 #: netbox/templates/account/subscriptions.html:7 -#: netbox/templates/inc/user_menu.html:51 +#: netbox/templates/inc/user_menu.html:46 msgid "Subscriptions" msgstr "Předplatné" #: netbox/templates/account/base.html:19 -#: netbox/templates/inc/user_menu.html:54 +#: netbox/templates/inc/user_menu.html:49 msgid "Preferences" msgstr "Předvolby" @@ -11602,6 +12192,7 @@ msgstr "Změnit heslo" #: netbox/templates/generic/object_edit.html:72 #: netbox/templates/htmx/delete_form.html:53 #: netbox/templates/htmx/delete_form.html:55 +#: netbox/templates/htmx/quick_add.html:21 #: netbox/templates/ipam/ipaddress_assign.html:28 #: netbox/templates/virtualization/cluster_add_devices.html:30 msgid "Cancel" @@ -11700,7 +12291,7 @@ msgstr "Přiřazené skupiny" #: netbox/templates/core/objectchange.html:142 #: netbox/templates/dcim/devicebay.html:59 #: netbox/templates/dcim/inc/panels/inventory_items.html:45 -#: netbox/templates/dcim/interface.html:296 +#: netbox/templates/dcim/interface.html:353 #: netbox/templates/dcim/modulebay.html:80 #: netbox/templates/extras/configcontext.html:70 #: netbox/templates/extras/eventrule.html:66 @@ -11709,6 +12300,7 @@ msgstr "Přiřazené skupiny" #: netbox/templates/extras/webhook.html:75 #: netbox/templates/inc/panel_table.html:13 #: netbox/templates/inc/panels/comments.html:10 +#: netbox/templates/inc/panels/related_objects.html:23 #: netbox/templates/ipam/inc/panels/fhrp_groups.html:56 #: netbox/templates/users/group.html:34 netbox/templates/users/group.html:44 #: netbox/templates/users/objectpermission.html:77 @@ -11746,7 +12338,7 @@ msgstr "Naposledy použitý" msgid "Add a Token" msgstr "Přidání žetonu" -#: netbox/templates/base/base.html:22 netbox/templates/home.html:27 +#: netbox/templates/base/base.html:23 netbox/templates/home.html:27 msgid "Home" msgstr "Domov" @@ -11788,15 +12380,16 @@ msgstr "Zdrojový kód" msgid "Community" msgstr "Komunita" -#: netbox/templates/circuits/circuit.html:47 +#: netbox/templates/circuits/circuit.html:57 msgid "Install Date" msgstr "Datum instalace" -#: netbox/templates/circuits/circuit.html:51 +#: netbox/templates/circuits/circuit.html:61 msgid "Termination Date" msgstr "Datum ukončení" -#: netbox/templates/circuits/circuit.html:70 +#: netbox/templates/circuits/circuit.html:80 +#: netbox/templates/circuits/virtualcircuit.html:73 #: netbox/templates/ipam/inc/panels/fhrp_groups.html:15 msgid "Assign Group" msgstr "Přiřadit skupinu" @@ -11844,7 +12437,7 @@ msgid "Add" msgstr "Přidat" #: netbox/templates/circuits/inc/circuit_termination.html:15 -#: netbox/templates/circuits/inc/circuit_termination_fields.html:36 +#: netbox/templates/circuits/inc/circuit_termination_fields.html:37 #: netbox/templates/dcim/inc/panels/inventory_items.html:32 #: netbox/templates/dcim/powerpanel.html:56 #: netbox/templates/extras/script_list.html:30 @@ -11859,35 +12452,39 @@ msgstr "Upravit" msgid "Swap" msgstr "Výměna" -#: netbox/templates/circuits/inc/circuit_termination_fields.html:19 +#: netbox/templates/circuits/inc/circuit_termination_fields.html:5 +msgid "Termination point" +msgstr "Koncový bod" + +#: netbox/templates/circuits/inc/circuit_termination_fields.html:20 #: netbox/templates/dcim/consoleport.html:59 #: netbox/templates/dcim/consoleserverport.html:60 #: netbox/templates/dcim/powerfeed.html:114 msgid "Marked as connected" msgstr "Označeno jako připojeno" -#: netbox/templates/circuits/inc/circuit_termination_fields.html:21 +#: netbox/templates/circuits/inc/circuit_termination_fields.html:22 msgid "to" msgstr "do" -#: netbox/templates/circuits/inc/circuit_termination_fields.html:31 #: netbox/templates/circuits/inc/circuit_termination_fields.html:32 +#: netbox/templates/circuits/inc/circuit_termination_fields.html:33 #: netbox/templates/dcim/frontport.html:80 #: netbox/templates/dcim/inc/connection_endpoints.html:7 -#: netbox/templates/dcim/interface.html:154 +#: netbox/templates/dcim/interface.html:211 #: netbox/templates/dcim/rearport.html:76 msgid "Trace" msgstr "Stopa" -#: netbox/templates/circuits/inc/circuit_termination_fields.html:35 +#: netbox/templates/circuits/inc/circuit_termination_fields.html:36 msgid "Edit cable" msgstr "Upravit kabel" -#: netbox/templates/circuits/inc/circuit_termination_fields.html:40 +#: netbox/templates/circuits/inc/circuit_termination_fields.html:41 msgid "Remove cable" msgstr "Odstraňte kabel" -#: netbox/templates/circuits/inc/circuit_termination_fields.html:41 +#: netbox/templates/circuits/inc/circuit_termination_fields.html:42 #: netbox/templates/dcim/bulk_disconnect.html:5 #: netbox/templates/dcim/device/consoleports.html:12 #: netbox/templates/dcim/device/consoleserverports.html:12 @@ -11900,33 +12497,33 @@ msgstr "Odstraňte kabel" msgid "Disconnect" msgstr "Odpojit" -#: netbox/templates/circuits/inc/circuit_termination_fields.html:48 +#: netbox/templates/circuits/inc/circuit_termination_fields.html:49 #: netbox/templates/dcim/consoleport.html:69 #: netbox/templates/dcim/consoleserverport.html:70 #: netbox/templates/dcim/frontport.html:102 -#: netbox/templates/dcim/interface.html:180 -#: netbox/templates/dcim/interface.html:200 +#: netbox/templates/dcim/interface.html:237 +#: netbox/templates/dcim/interface.html:257 #: netbox/templates/dcim/powerfeed.html:127 -#: netbox/templates/dcim/poweroutlet.html:71 -#: netbox/templates/dcim/poweroutlet.html:72 +#: netbox/templates/dcim/poweroutlet.html:81 +#: netbox/templates/dcim/poweroutlet.html:82 #: netbox/templates/dcim/powerport.html:73 #: netbox/templates/dcim/rearport.html:98 msgid "Connect" msgstr "Připojit" -#: netbox/templates/circuits/inc/circuit_termination_fields.html:70 +#: netbox/templates/circuits/inc/circuit_termination_fields.html:65 msgid "Downstream" msgstr "Po proudu" -#: netbox/templates/circuits/inc/circuit_termination_fields.html:71 +#: netbox/templates/circuits/inc/circuit_termination_fields.html:66 msgid "Upstream" msgstr "Nad proudem" -#: netbox/templates/circuits/inc/circuit_termination_fields.html:80 +#: netbox/templates/circuits/inc/circuit_termination_fields.html:75 msgid "Cross-Connect" msgstr "Křížové připojení" -#: netbox/templates/circuits/inc/circuit_termination_fields.html:84 +#: netbox/templates/circuits/inc/circuit_termination_fields.html:79 msgid "Patch Panel/Port" msgstr "Patch panel/port" @@ -11938,6 +12535,27 @@ msgstr "Přidat obvod" msgid "Provider Account" msgstr "Účet poskytovatele" +#: netbox/templates/circuits/providernetwork.html:59 +msgid "Add a Virtual Circuit" +msgstr "Přidání virtuálního obvodu" + +#: netbox/templates/circuits/virtualcircuit.html:91 +#: netbox/templates/vpn/tunnel.html:9 +msgid "Add Termination" +msgstr "Přidat ukončení" + +#: netbox/templates/circuits/virtualcircuittermination.html:23 +msgid "Virtual Circuit Termination" +msgstr "Ukončení virtuálního obvodu" + +#: netbox/templates/circuits/virtualcircuittype.html:10 +msgid "Add Virtual Circuit" +msgstr "Přidat virtuální obvod" + +#: netbox/templates/circuits/virtualcircuittype.html:19 +msgid "Virtual Circuit Type" +msgstr "Typ virtuálního obvodu" + #: netbox/templates/core/configrevision.html:35 msgid "Configuration Data" msgstr "Konfigurační data" @@ -11971,7 +12589,7 @@ msgstr "Změněno" #: netbox/templates/core/datafile.html:42 #: netbox/templates/ipam/iprange.html:25 #: netbox/templates/virtualization/virtualdisk.html:29 -#: netbox/virtualization/tables/virtualmachines.py:198 +#: netbox/virtualization/tables/virtualmachines.py:169 msgid "Size" msgstr "Velikost" @@ -12411,8 +13029,8 @@ msgstr "Přejmenovat vybrané" #: netbox/templates/dcim/consoleport.html:65 #: netbox/templates/dcim/consoleserverport.html:66 #: netbox/templates/dcim/frontport.html:98 -#: netbox/templates/dcim/interface.html:176 -#: netbox/templates/dcim/poweroutlet.html:69 +#: netbox/templates/dcim/interface.html:233 +#: netbox/templates/dcim/poweroutlet.html:79 #: netbox/templates/dcim/powerport.html:69 msgid "Not Connected" msgstr "Není připojen" @@ -12435,7 +13053,7 @@ msgid "Map" msgstr "Mapa" #: netbox/templates/dcim/device.html:108 -#: netbox/templates/dcim/inventoryitem.html:56 +#: netbox/templates/dcim/inventoryitem.html:60 #: netbox/templates/dcim/module.html:81 #: netbox/templates/dcim/modulebay.html:74 netbox/templates/dcim/rack.html:61 msgid "Asset Tag" @@ -12451,7 +13069,7 @@ msgstr "Vytvořit VDC" #: netbox/templates/dcim/device.html:175 #: netbox/templates/dcim/device_edit.html:64 -#: netbox/virtualization/forms/model_forms.py:223 +#: netbox/virtualization/forms/model_forms.py:230 msgid "Management" msgstr "Řízení" @@ -12568,35 +13186,6 @@ msgstr "Přidat napájecí port" msgid "Add Rear Ports" msgstr "Přidat zadní porty" -#: netbox/templates/dcim/device/render_config.html:5 -#: netbox/templates/virtualization/virtualmachine/render_config.html:5 -msgid "Config" -msgstr "Konfigurace" - -#: netbox/templates/dcim/device/render_config.html:35 -#: netbox/templates/virtualization/virtualmachine/render_config.html:35 -msgid "Context Data" -msgstr "Kontextová data" - -#: netbox/templates/dcim/device/render_config.html:55 -#: netbox/templates/virtualization/virtualmachine/render_config.html:55 -msgid "Rendered Config" -msgstr "Rendrovaná konfigurace" - -#: netbox/templates/dcim/device/render_config.html:57 -#: netbox/templates/virtualization/virtualmachine/render_config.html:57 -msgid "Download" -msgstr "Ke stažení" - -#: netbox/templates/dcim/device/render_config.html:64 -#: netbox/templates/virtualization/virtualmachine/render_config.html:64 -msgid "Error rendering template" -msgstr "Chyba při vykreslování šablony" - -#: netbox/templates/dcim/device/render_config.html:70 -msgid "No configuration template has been assigned for this device." -msgstr "" - #: netbox/templates/dcim/device_edit.html:44 msgid "Parent Bay" msgstr "Mateřská zátoka" @@ -12663,12 +13252,12 @@ msgid "VM Role" msgstr "Role virtuálního počítače" #: netbox/templates/dcim/devicetype.html:18 -#: netbox/templates/dcim/moduletype.html:29 +#: netbox/templates/dcim/moduletype.html:31 msgid "Model Name" msgstr "Název modelu" #: netbox/templates/dcim/devicetype.html:25 -#: netbox/templates/dcim/moduletype.html:33 +#: netbox/templates/dcim/moduletype.html:35 msgid "Part Number" msgstr "Číslo dílu" @@ -12693,8 +13282,8 @@ msgid "Rear Port Position" msgstr "Pozice zadního portu" #: netbox/templates/dcim/frontport.html:72 -#: netbox/templates/dcim/interface.html:144 -#: netbox/templates/dcim/poweroutlet.html:63 +#: netbox/templates/dcim/interface.html:201 +#: netbox/templates/dcim/poweroutlet.html:73 #: netbox/templates/dcim/powerport.html:63 #: netbox/templates/dcim/rearport.html:68 msgid "Marked as Connected" @@ -12794,77 +13383,79 @@ msgid "PoE Type" msgstr "Typ PoE" #: netbox/templates/dcim/interface.html:81 -#: netbox/templates/virtualization/vminterface.html:63 +#: netbox/templates/virtualization/vminterface.html:55 +#: netbox/virtualization/forms/model_forms.py:395 msgid "802.1Q Mode" msgstr "Režim 802.1Q" -#: netbox/templates/dcim/interface.html:125 -#: netbox/templates/virtualization/vminterface.html:59 -msgid "MAC Address" -msgstr "MAC adresa" +#: netbox/templates/dcim/interface.html:156 +#: netbox/templates/virtualization/vminterface.html:88 +msgid "VLAN Translation" +msgstr "Překlad VLAN" -#: netbox/templates/dcim/interface.html:151 +#: netbox/templates/dcim/interface.html:208 msgid "Wireless Link" msgstr "Bezdrátové spojení" -#: netbox/templates/dcim/interface.html:218 netbox/vpn/choices.py:63 -msgid "Peer" -msgstr "Peer" - -#: netbox/templates/dcim/interface.html:230 +#: netbox/templates/dcim/interface.html:287 #: netbox/templates/wireless/inc/wirelesslink_interface.html:26 msgid "Channel" msgstr "Kanál" -#: netbox/templates/dcim/interface.html:239 +#: netbox/templates/dcim/interface.html:296 #: netbox/templates/wireless/inc/wirelesslink_interface.html:32 msgid "Channel Frequency" msgstr "Frekvence kanálu" -#: netbox/templates/dcim/interface.html:242 -#: netbox/templates/dcim/interface.html:250 -#: netbox/templates/dcim/interface.html:261 -#: netbox/templates/dcim/interface.html:269 +#: netbox/templates/dcim/interface.html:299 +#: netbox/templates/dcim/interface.html:307 +#: netbox/templates/dcim/interface.html:318 +#: netbox/templates/dcim/interface.html:326 msgid "MHz" msgstr "MHz" -#: netbox/templates/dcim/interface.html:258 +#: netbox/templates/dcim/interface.html:315 #: netbox/templates/wireless/inc/wirelesslink_interface.html:42 msgid "Channel Width" msgstr "Šířka kanálu" -#: netbox/templates/dcim/interface.html:285 +#: netbox/templates/dcim/interface.html:342 #: netbox/templates/wireless/wirelesslan.html:14 #: netbox/templates/wireless/wirelesslink.html:21 -#: netbox/wireless/forms/bulk_edit.py:60 -#: netbox/wireless/forms/bulk_edit.py:102 -#: netbox/wireless/forms/filtersets.py:40 -#: netbox/wireless/forms/filtersets.py:80 netbox/wireless/models.py:82 -#: netbox/wireless/models.py:156 netbox/wireless/tables/wirelesslan.py:44 +#: netbox/wireless/forms/bulk_edit.py:62 +#: netbox/wireless/forms/bulk_edit.py:105 +#: netbox/wireless/forms/filtersets.py:43 +#: netbox/wireless/forms/filtersets.py:108 netbox/wireless/models.py:82 +#: netbox/wireless/models.py:153 netbox/wireless/tables/wirelesslan.py:44 msgid "SSID" msgstr "SSID" -#: netbox/templates/dcim/interface.html:305 +#: netbox/templates/dcim/interface.html:362 msgid "LAG Members" msgstr "Členové MAS" -#: netbox/templates/dcim/interface.html:323 +#: netbox/templates/dcim/interface.html:380 msgid "No member interfaces" msgstr "Žádná členská rozhraní" -#: netbox/templates/dcim/interface.html:343 +#: netbox/templates/dcim/interface.html:400 #: netbox/templates/ipam/fhrpgroup.html:73 #: netbox/templates/ipam/iprange/ip_addresses.html:7 #: netbox/templates/ipam/prefix/ip_addresses.html:7 -#: netbox/templates/virtualization/vminterface.html:89 +#: netbox/templates/virtualization/vminterface.html:105 msgid "Add IP Address" msgstr "Přidat IP adresu" +#: netbox/templates/dcim/interface.html:417 +#: netbox/templates/virtualization/vminterface.html:123 +msgid "Add MAC Address" +msgstr "Přidat MAC adresu" + #: netbox/templates/dcim/inventoryitem.html:24 msgid "Parent Item" msgstr "Nadřazená položka" -#: netbox/templates/dcim/inventoryitem.html:48 +#: netbox/templates/dcim/inventoryitem.html:52 msgid "Part ID" msgstr "ID součásti" @@ -12884,6 +13475,10 @@ msgstr "Přidání místa" msgid "Add a Device" msgstr "Přidání zařízení" +#: netbox/templates/dcim/macaddress.html:36 +msgid "Primary for interface" +msgstr "Primární pro rozhraní" + #: netbox/templates/dcim/manufacturer.html:16 msgid "Add Device Type" msgstr "Přidat typ zařízení" @@ -12914,7 +13509,7 @@ msgctxt "Abbreviation for amperes" msgid "A" msgstr "A" -#: netbox/templates/dcim/poweroutlet.html:48 +#: netbox/templates/dcim/poweroutlet.html:58 msgid "Feed Leg" msgstr "Krmná noha" @@ -13345,11 +13940,19 @@ msgstr "Nelze načíst obsah. Neplatný název pohledu" msgid "No content found" msgstr "Nebyl nalezen žádný obsah" -#: netbox/templates/extras/dashboard/widgets/rssfeed.html:18 +#: netbox/templates/extras/dashboard/widgets/rssfeed.html:17 +msgid "" +"This RSS feed requires an external connection. Check the ISOLATED_DEPLOYMENT" +" setting." +msgstr "" +"Tento kanál RSS vyžaduje externí připojení. Zkontrolujte nastavení " +"ISOLATED_DEPLOYMENT." + +#: netbox/templates/extras/dashboard/widgets/rssfeed.html:22 msgid "There was a problem fetching the RSS feed" msgstr "Při načítání kanálu RSS došlo k problému" -#: netbox/templates/extras/dashboard/widgets/rssfeed.html:21 +#: netbox/templates/extras/dashboard/widgets/rssfeed.html:25 msgid "HTTP" msgstr "HTTP" @@ -13419,6 +14022,30 @@ msgstr "Zdrojové kontexty" msgid "New Journal Entry" msgstr "Nová položka deníku" +#: netbox/templates/extras/object_render_config.html:6 +msgid "Config" +msgstr "Konfigurace" + +#: netbox/templates/extras/object_render_config.html:36 +msgid "Context Data" +msgstr "Kontextová data" + +#: netbox/templates/extras/object_render_config.html:56 +msgid "Rendered Config" +msgstr "Rendrovaná konfigurace" + +#: netbox/templates/extras/object_render_config.html:58 +msgid "Download" +msgstr "Ke stažení" + +#: netbox/templates/extras/object_render_config.html:65 +msgid "Error rendering template" +msgstr "Chyba při vykreslování šablony" + +#: netbox/templates/extras/object_render_config.html:71 +msgid "No configuration template has been assigned." +msgstr "Nebyla přiřazena žádná šablona konfigurace." + #: netbox/templates/extras/report/base.html:30 msgid "Report" msgstr "Zpráva" @@ -13506,7 +14133,7 @@ msgstr "Jakýkoliv" msgid "Tagged Item Types" msgstr "Typy označených položek" -#: netbox/templates/extras/tag.html:81 +#: netbox/templates/extras/tag.html:82 msgid "Tagged Objects" msgstr "Označené objekty" @@ -13787,6 +14414,21 @@ msgstr "Všechna oznámení" msgid "Select" msgstr "Vybrat" +#: netbox/templates/htmx/quick_add.html:7 +msgid "Quick Add" +msgstr "Rychlé přidání" + +#: netbox/templates/htmx/quick_add_created.html:18 +#, python-format +msgid "" +"\n" +" Created %(object_type)s %(object)s\n" +" " +msgstr "" +"\n" +" Vytvořeno %(object_type)s %(object)s\n" +" " + #: netbox/templates/inc/filter_list.html:43 #: netbox/utilities/templates/helpers/table_config_form.html:39 msgid "Reset" @@ -13858,15 +14500,11 @@ msgstr "Jasné objednávání" msgid "Help center" msgstr "Centrum nápovědy" -#: netbox/templates/inc/user_menu.html:41 -msgid "Django Admin" -msgstr "" - -#: netbox/templates/inc/user_menu.html:61 +#: netbox/templates/inc/user_menu.html:56 msgid "Log Out" msgstr "Odhlásit se" -#: netbox/templates/inc/user_menu.html:68 netbox/templates/login.html:38 +#: netbox/templates/inc/user_menu.html:63 netbox/templates/login.html:38 msgid "Log In" msgstr "Přihlásit se" @@ -13963,43 +14601,43 @@ msgstr "Počáteční adresa" msgid "Ending Address" msgstr "Koncová adresa" -#: netbox/templates/ipam/iprange.html:33 netbox/templates/ipam/prefix.html:110 +#: netbox/templates/ipam/iprange.html:33 netbox/templates/ipam/prefix.html:106 msgid "Marked fully utilized" msgstr "Označeno plně využito" -#: netbox/templates/ipam/prefix.html:99 +#: netbox/templates/ipam/prefix.html:95 msgid "Addressing Details" msgstr "Podrobnosti o adresování" -#: netbox/templates/ipam/prefix.html:118 +#: netbox/templates/ipam/prefix.html:114 msgid "Child IPs" msgstr "Dětské IP adresy" -#: netbox/templates/ipam/prefix.html:126 +#: netbox/templates/ipam/prefix.html:122 msgid "Available IPs" msgstr "Dostupné IP adresy" -#: netbox/templates/ipam/prefix.html:138 +#: netbox/templates/ipam/prefix.html:134 msgid "First available IP" msgstr "První dostupná IP" -#: netbox/templates/ipam/prefix.html:179 +#: netbox/templates/ipam/prefix.html:175 msgid "Prefix Details" msgstr "Podrobnosti o předponě" -#: netbox/templates/ipam/prefix.html:185 +#: netbox/templates/ipam/prefix.html:181 msgid "Network Address" msgstr "Síťová adresa" -#: netbox/templates/ipam/prefix.html:189 +#: netbox/templates/ipam/prefix.html:185 msgid "Network Mask" msgstr "Síťová maska" -#: netbox/templates/ipam/prefix.html:193 +#: netbox/templates/ipam/prefix.html:189 msgid "Wildcard Mask" msgstr "Zástupná maska" -#: netbox/templates/ipam/prefix.html:197 +#: netbox/templates/ipam/prefix.html:193 msgid "Broadcast Address" msgstr "Adresa vysílání" @@ -14039,14 +14677,30 @@ msgstr "Import L2VPN" msgid "Exporting L2VPNs" msgstr "Export L2VPN" -#: netbox/templates/ipam/vlan.html:88 +#: netbox/templates/ipam/vlan.html:66 +msgid "Q-in-Q Role" +msgstr "Role Q-in-Q" + +#: netbox/templates/ipam/vlan.html:104 msgid "Add a Prefix" msgstr "Přidání předpony" +#: netbox/templates/ipam/vlan.html:114 +msgid "Customer VLANs" +msgstr "Zákaznické VLAN" + +#: netbox/templates/ipam/vlan.html:118 +msgid "Add a VLAN" +msgstr "Přidání sítě VLAN" + #: netbox/templates/ipam/vlangroup.html:18 msgid "Add VLAN" msgstr "Přidat VLAN" +#: netbox/templates/ipam/vlantranslationpolicy.html:51 +msgid "Add Rule" +msgstr "Přidat pravidlo" + #: netbox/templates/ipam/vrf.html:16 msgid "Route Distinguisher" msgstr "Rozlišovač tras" @@ -14124,7 +14778,7 @@ msgstr "" #: netbox/templates/tenancy/contact.html:18 netbox/tenancy/filtersets.py:147 #: netbox/tenancy/forms/bulk_edit.py:137 -#: netbox/tenancy/forms/filtersets.py:102 netbox/tenancy/forms/forms.py:56 +#: netbox/tenancy/forms/filtersets.py:102 netbox/tenancy/forms/forms.py:57 #: netbox/tenancy/forms/model_forms.py:106 #: netbox/tenancy/forms/model_forms.py:130 #: netbox/tenancy/tables/contacts.py:98 @@ -14142,7 +14796,7 @@ msgid "Phone" msgstr "Telefon" #: netbox/templates/tenancy/contactgroup.html:18 -#: netbox/tenancy/forms/forms.py:66 netbox/tenancy/forms/model_forms.py:75 +#: netbox/tenancy/forms/forms.py:67 netbox/tenancy/forms/model_forms.py:75 msgid "Contact Group" msgstr "Kontaktní skupina" @@ -14151,7 +14805,7 @@ msgid "Add Contact Group" msgstr "Přidat skupinu kontaktů" #: netbox/templates/tenancy/contactrole.html:15 -#: netbox/tenancy/filtersets.py:152 netbox/tenancy/forms/forms.py:61 +#: netbox/tenancy/filtersets.py:152 netbox/tenancy/forms/forms.py:62 #: netbox/tenancy/forms/model_forms.py:87 msgid "Contact Role" msgstr "Kontaktní role" @@ -14165,8 +14819,8 @@ msgid "Add Tenant" msgstr "Přidat nájemce" #: netbox/templates/tenancy/tenantgroup.html:26 -#: netbox/tenancy/forms/model_forms.py:32 netbox/tenancy/tables/columns.py:51 -#: netbox/tenancy/tables/columns.py:61 +#: netbox/tenancy/forms/model_forms.py:32 netbox/tenancy/tables/columns.py:36 +#: netbox/tenancy/tables/columns.py:46 msgid "Tenant Group" msgstr "Skupina nájemců" @@ -14197,21 +14851,21 @@ msgstr "Omezení" msgid "Assigned Users" msgstr "Přiřazení uživatelé" -#: netbox/templates/virtualization/cluster.html:52 +#: netbox/templates/virtualization/cluster.html:56 msgid "Allocated Resources" msgstr "Přidělené zdroje" -#: netbox/templates/virtualization/cluster.html:55 +#: netbox/templates/virtualization/cluster.html:59 #: netbox/templates/virtualization/virtualmachine.html:125 msgid "Virtual CPUs" msgstr "Virtuální procesory" -#: netbox/templates/virtualization/cluster.html:59 +#: netbox/templates/virtualization/cluster.html:63 #: netbox/templates/virtualization/virtualmachine.html:129 msgid "Memory" msgstr "Paměť" -#: netbox/templates/virtualization/cluster.html:69 +#: netbox/templates/virtualization/cluster.html:73 #: netbox/templates/virtualization/virtualmachine.html:140 msgid "Disk Space" msgstr "Místo na disku" @@ -14247,13 +14901,13 @@ msgid "Add Cluster" msgstr "Přidat cluster" #: netbox/templates/virtualization/clustergroup.html:19 -#: netbox/virtualization/forms/model_forms.py:50 +#: netbox/virtualization/forms/model_forms.py:53 msgid "Cluster Group" msgstr "Skupina klastru" #: netbox/templates/virtualization/clustertype.html:19 #: netbox/templates/virtualization/virtualmachine.html:110 -#: netbox/virtualization/forms/model_forms.py:36 +#: netbox/virtualization/forms/model_forms.py:39 msgid "Cluster Type" msgstr "Typ clusteru" @@ -14262,8 +14916,8 @@ msgid "Virtual Disk" msgstr "Virtuální disk" #: netbox/templates/virtualization/virtualmachine.html:122 -#: netbox/virtualization/forms/bulk_edit.py:190 -#: netbox/virtualization/forms/model_forms.py:224 +#: netbox/virtualization/forms/bulk_edit.py:172 +#: netbox/virtualization/forms/model_forms.py:231 msgid "Resources" msgstr "Zdroje" @@ -14271,10 +14925,6 @@ msgstr "Zdroje" msgid "Add Virtual Disk" msgstr "Přidat virtuální disk" -#: netbox/templates/virtualization/virtualmachine/render_config.html:70 -msgid "No configuration template has been assigned for this virtual machine." -msgstr "" - #: netbox/templates/vpn/ikepolicy.html:10 #: netbox/templates/vpn/ipsecprofile.html:33 netbox/vpn/tables/crypto.py:166 msgid "IKE Policy" @@ -14297,7 +14947,7 @@ msgstr "Zobrazit tajemství" #: netbox/templates/vpn/ipsecpolicy.html:45 #: netbox/templates/vpn/ipsecprofile.html:52 #: netbox/templates/vpn/ipsecprofile.html:77 -#: netbox/vpn/forms/model_forms.py:316 netbox/vpn/forms/model_forms.py:352 +#: netbox/vpn/forms/model_forms.py:317 netbox/vpn/forms/model_forms.py:354 #: netbox/vpn/tables/crypto.py:68 netbox/vpn/tables/crypto.py:134 msgid "Proposals" msgstr "Návrhy" @@ -14343,12 +14993,12 @@ msgid "IPSec Policy" msgstr "Zásady IPsec" #: netbox/templates/vpn/ipsecpolicy.html:21 netbox/vpn/forms/bulk_edit.py:210 -#: netbox/vpn/models/crypto.py:193 +#: netbox/vpn/models/crypto.py:191 msgid "PFS group" msgstr "Skupina PFS" #: netbox/templates/vpn/ipsecprofile.html:10 -#: netbox/vpn/forms/model_forms.py:54 +#: netbox/vpn/forms/model_forms.py:55 msgid "IPSec Profile" msgstr "Profil IPsec" @@ -14374,10 +15024,6 @@ msgstr "L2VPN Atributy" msgid "Add a Termination" msgstr "Přidat ukončení" -#: netbox/templates/vpn/tunnel.html:9 -msgid "Add Termination" -msgstr "Přidat ukončení" - #: netbox/templates/vpn/tunnel.html:37 netbox/vpn/forms/bulk_edit.py:49 #: netbox/vpn/forms/bulk_import.py:48 netbox/vpn/forms/filtersets.py:57 msgid "Encapsulation" @@ -14385,7 +15031,7 @@ msgstr "Zapouzdření" #: netbox/templates/vpn/tunnel.html:41 netbox/vpn/forms/bulk_edit.py:55 #: netbox/vpn/forms/bulk_import.py:53 netbox/vpn/forms/filtersets.py:64 -#: netbox/vpn/models/crypto.py:250 netbox/vpn/tables/tunnels.py:51 +#: netbox/vpn/models/crypto.py:246 netbox/vpn/tables/tunnels.py:51 msgid "IPSec profile" msgstr "Profil IPsec" @@ -14408,8 +15054,8 @@ msgid "Tunnel Termination" msgstr "Ukončení tunelu" #: netbox/templates/vpn/tunneltermination.html:35 -#: netbox/vpn/forms/bulk_import.py:107 netbox/vpn/forms/model_forms.py:102 -#: netbox/vpn/forms/model_forms.py:138 netbox/vpn/forms/model_forms.py:247 +#: netbox/vpn/forms/bulk_import.py:107 netbox/vpn/forms/model_forms.py:103 +#: netbox/vpn/forms/model_forms.py:139 netbox/vpn/forms/model_forms.py:248 #: netbox/vpn/tables/tunnels.py:101 msgid "Outside IP" msgstr "Mimo IP" @@ -14432,7 +15078,7 @@ msgctxt "Abbreviation for megahertz" msgid "MHz" msgstr "MHz" -#: netbox/templates/wireless/wirelesslan.html:57 +#: netbox/templates/wireless/wirelesslan.html:65 msgid "Attached Interfaces" msgstr "Připojená rozhraní" @@ -14441,7 +15087,7 @@ msgid "Add Wireless LAN" msgstr "Přidat bezdrátovou síť LAN" #: netbox/templates/wireless/wirelesslangroup.html:26 -#: netbox/wireless/forms/model_forms.py:28 +#: netbox/wireless/forms/model_forms.py:29 msgid "Wireless LAN Group" msgstr "Skupina bezdrátové sítě LAN" @@ -14453,13 +15099,6 @@ msgstr "Přidat skupinu bezdrátové sítě LAN" msgid "Link Properties" msgstr "Vlastnosti odkazu" -#: netbox/templates/wireless/wirelesslink.html:38 -#: netbox/wireless/forms/bulk_edit.py:129 -#: netbox/wireless/forms/filtersets.py:102 -#: netbox/wireless/forms/model_forms.py:165 -msgid "Distance" -msgstr "Vzdálenost" - #: netbox/tenancy/filtersets.py:28 msgid "Parent contact group (ID)" msgstr "Rodičovská kontaktní skupina (ID)" @@ -14530,47 +15169,47 @@ msgstr "kontaktní skupina" msgid "contact groups" msgstr "kontaktní skupiny" -#: netbox/tenancy/models/contacts.py:48 +#: netbox/tenancy/models/contacts.py:42 msgid "contact role" msgstr "kontaktní role" -#: netbox/tenancy/models/contacts.py:49 +#: netbox/tenancy/models/contacts.py:43 msgid "contact roles" msgstr "kontaktní role" -#: netbox/tenancy/models/contacts.py:68 +#: netbox/tenancy/models/contacts.py:63 msgid "title" msgstr "titul" -#: netbox/tenancy/models/contacts.py:73 +#: netbox/tenancy/models/contacts.py:68 msgid "phone" msgstr "telefon" -#: netbox/tenancy/models/contacts.py:78 +#: netbox/tenancy/models/contacts.py:73 msgid "email" msgstr "e-mailem" -#: netbox/tenancy/models/contacts.py:87 +#: netbox/tenancy/models/contacts.py:82 msgid "link" msgstr "odkaz" -#: netbox/tenancy/models/contacts.py:103 +#: netbox/tenancy/models/contacts.py:98 msgid "contact" msgstr "kontaktovat" -#: netbox/tenancy/models/contacts.py:104 +#: netbox/tenancy/models/contacts.py:99 msgid "contacts" msgstr "kontakty" -#: netbox/tenancy/models/contacts.py:153 +#: netbox/tenancy/models/contacts.py:146 msgid "contact assignment" msgstr "přiřazení kontaktů" -#: netbox/tenancy/models/contacts.py:154 +#: netbox/tenancy/models/contacts.py:147 msgid "contact assignments" msgstr "kontaktní přiřazení" -#: netbox/tenancy/models/contacts.py:170 +#: netbox/tenancy/models/contacts.py:163 #, python-brace-format msgid "Contacts cannot be assigned to this object type ({type})." msgstr "Kontakty nelze přiřadit k tomuto typu objektu ({type})." @@ -14583,19 +15222,19 @@ msgstr "skupina nájemců" msgid "tenant groups" msgstr "skupiny nájemců" -#: netbox/tenancy/models/tenants.py:70 +#: netbox/tenancy/models/tenants.py:68 msgid "Tenant name must be unique per group." msgstr "Název nájemce musí být pro každou skupinu jedinečný." -#: netbox/tenancy/models/tenants.py:80 +#: netbox/tenancy/models/tenants.py:78 msgid "Tenant slug must be unique per group." msgstr "Slimák nájemce musí být jedinečný pro každou skupinu." -#: netbox/tenancy/models/tenants.py:88 +#: netbox/tenancy/models/tenants.py:86 msgid "tenant" msgstr "podnájemník" -#: netbox/tenancy/models/tenants.py:89 +#: netbox/tenancy/models/tenants.py:87 msgid "tenants" msgstr "nájemníci" @@ -14818,7 +15457,7 @@ msgstr "žeton" msgid "tokens" msgstr "žetony" -#: netbox/users/models/users.py:57 netbox/vpn/models/crypto.py:42 +#: netbox/users/models/users.py:57 netbox/vpn/models/crypto.py:43 msgid "group" msgstr "skupina" @@ -14864,27 +15503,27 @@ msgstr "Související objekt nebyl nalezen pomocí zadaného číselného ID: {i msgid "{name} has a key defined but CHOICES is not a list" msgstr "{name} má definovaný klíč, ale CHOICES není seznam" -#: netbox/utilities/conversion.py:19 +#: netbox/utilities/conversion.py:20 msgid "Weight must be a positive number" msgstr "Hmotnost musí být kladné číslo" -#: netbox/utilities/conversion.py:21 +#: netbox/utilities/conversion.py:22 #, python-brace-format msgid "Invalid value '{weight}' for weight (must be a number)" msgstr "Neplatná hodnota '{weight}'pro hmotnost (musí být číslo)" -#: netbox/utilities/conversion.py:32 netbox/utilities/conversion.py:62 +#: netbox/utilities/conversion.py:33 netbox/utilities/conversion.py:63 #, python-brace-format msgid "Unknown unit {unit}. Must be one of the following: {valid_units}" msgstr "" "Neznámá jednotka {unit}. Musí to být jedna z následujících položek: " "{valid_units}" -#: netbox/utilities/conversion.py:45 +#: netbox/utilities/conversion.py:46 msgid "Length must be a positive number" msgstr "Délka musí být kladné číslo" -#: netbox/utilities/conversion.py:47 +#: netbox/utilities/conversion.py:48 #, python-brace-format msgid "Invalid value '{length}' for length (must be a number)" msgstr "Neplatná hodnota '{length}'pro délku (musí být číslo)" @@ -14902,11 +15541,11 @@ msgstr "" msgid "More than 50" msgstr "Více než 50" -#: netbox/utilities/fields.py:30 +#: netbox/utilities/fields.py:29 msgid "RGB color in hexadecimal. Example: " msgstr "RGB barva v hexadecimálním formátu. Příklad: " -#: netbox/utilities/fields.py:159 +#: netbox/utilities/fields.py:158 #, python-format msgid "" "%s(%r) is invalid. to_model parameter to CounterCacheField must be a string " @@ -14915,7 +15554,7 @@ msgstr "" "%s(%r) je neplatný. parametr to_model pro CounterCacheField musí být řetězec" " ve formátu 'app.model'" -#: netbox/utilities/fields.py:169 +#: netbox/utilities/fields.py:168 #, python-format msgid "" "%s(%r) is invalid. to_field parameter to CounterCacheField must be a string " @@ -15141,13 +15780,13 @@ msgstr "" msgid "Required column header \"{header}\" not found." msgstr "Požadovaná záhlaví sloupce“{header}„nenalezeno." -#: netbox/utilities/forms/widgets/apiselect.py:124 +#: netbox/utilities/forms/widgets/apiselect.py:133 #, python-brace-format msgid "Missing required value for dynamic query param: '{dynamic_params}'" msgstr "" "Chybí požadovaná hodnota pro parametr dynamického dotazu: '{dynamic_params}'" -#: netbox/utilities/forms/widgets/apiselect.py:141 +#: netbox/utilities/forms/widgets/apiselect.py:150 #, python-brace-format msgid "Missing required value for static query param: '{static_params}'" msgstr "" @@ -15273,10 +15912,14 @@ msgstr "Hledat..." msgid "Search NetBox" msgstr "Hledat NetBox" -#: netbox/utilities/templates/widgets/apiselect.html:7 +#: netbox/utilities/templates/widgets/apiselect.html:8 msgid "Open selector" msgstr "Otevřít selektor" +#: netbox/utilities/templates/widgets/apiselect.html:22 +msgid "Quick add" +msgstr "Rychlé přidání" + #: netbox/utilities/templates/widgets/markdown_input.html:6 msgid "Write" msgstr "Napsat" @@ -15310,113 +15953,119 @@ msgstr "" "{class_name} nemá definovanou sadu dotazů. ObjectPermissionRequiredMixin lze" " použít pouze v pohledech, které definují základní sadu dotazů" -#: netbox/virtualization/filtersets.py:79 +#: netbox/virtualization/choices.py:50 +msgid "Paused" +msgstr "Pozastaveno" + +#: netbox/virtualization/filtersets.py:45 msgid "Parent group (ID)" msgstr "Nadřazená skupina (ID)" -#: netbox/virtualization/filtersets.py:85 +#: netbox/virtualization/filtersets.py:51 msgid "Parent group (slug)" msgstr "Rodičovská skupina (slug)" -#: netbox/virtualization/filtersets.py:89 -#: netbox/virtualization/filtersets.py:141 +#: netbox/virtualization/filtersets.py:55 +#: netbox/virtualization/filtersets.py:107 msgid "Cluster type (ID)" msgstr "Typ clusteru (ID)" -#: netbox/virtualization/filtersets.py:151 -#: netbox/virtualization/filtersets.py:271 +#: netbox/virtualization/filtersets.py:117 +#: netbox/virtualization/filtersets.py:237 msgid "Cluster (ID)" msgstr "Klastr (ID)" -#: netbox/virtualization/forms/bulk_edit.py:166 -#: netbox/virtualization/models/virtualmachines.py:115 +#: netbox/virtualization/forms/bulk_edit.py:148 +#: netbox/virtualization/models/virtualmachines.py:110 msgid "vCPUs" msgstr "VCPU" -#: netbox/virtualization/forms/bulk_edit.py:170 +#: netbox/virtualization/forms/bulk_edit.py:152 msgid "Memory (MB)" msgstr "Paměť (MB)" -#: netbox/virtualization/forms/bulk_edit.py:174 +#: netbox/virtualization/forms/bulk_edit.py:156 msgid "Disk (MB)" msgstr "Disk (MB)" -#: netbox/virtualization/forms/bulk_edit.py:334 -#: netbox/virtualization/forms/filtersets.py:251 +#: netbox/virtualization/forms/bulk_edit.py:324 +#: netbox/virtualization/forms/filtersets.py:256 msgid "Size (MB)" msgstr "Velikost (MB)" -#: netbox/virtualization/forms/bulk_import.py:44 +#: netbox/virtualization/forms/bulk_import.py:45 msgid "Type of cluster" msgstr "Typ clusteru" -#: netbox/virtualization/forms/bulk_import.py:51 +#: netbox/virtualization/forms/bulk_import.py:52 msgid "Assigned cluster group" msgstr "Přiřazená skupina clusteru" -#: netbox/virtualization/forms/bulk_import.py:96 +#: netbox/virtualization/forms/bulk_import.py:102 msgid "Assigned cluster" msgstr "Přiřazený cluster" -#: netbox/virtualization/forms/bulk_import.py:103 +#: netbox/virtualization/forms/bulk_import.py:109 msgid "Assigned device within cluster" msgstr "Přiřazené zařízení v rámci clusteru" -#: netbox/virtualization/forms/filtersets.py:183 +#: netbox/virtualization/forms/filtersets.py:188 msgid "Serial number" msgstr "Sériové číslo" -#: netbox/virtualization/forms/model_forms.py:153 +#: netbox/virtualization/forms/model_forms.py:158 #, python-brace-format msgid "" -"{device} belongs to a different site ({device_site}) than the cluster " -"({cluster_site})" +"{device} belongs to a different {scope_field} ({device_scope}) than the " +"cluster ({cluster_scope})" msgstr "" +"{device} Patří k jinému {scope_field} ({device_scope}) než klastr " +"({cluster_scope})" -#: netbox/virtualization/forms/model_forms.py:192 +#: netbox/virtualization/forms/model_forms.py:199 msgid "Optionally pin this VM to a specific host device within the cluster" msgstr "" "Volitelně připojte tento virtuální počítač ke konkrétnímu hostitelskému " "zařízení v rámci clusteru" -#: netbox/virtualization/forms/model_forms.py:221 +#: netbox/virtualization/forms/model_forms.py:228 msgid "Site/Cluster" msgstr "Lokalita/Klastr" -#: netbox/virtualization/forms/model_forms.py:244 +#: netbox/virtualization/forms/model_forms.py:251 msgid "Disk size is managed via the attachment of virtual disks." msgstr "Velikost disku je spravována připojením virtuálních disků." -#: netbox/virtualization/forms/model_forms.py:372 -#: netbox/virtualization/tables/virtualmachines.py:111 +#: netbox/virtualization/forms/model_forms.py:405 +#: netbox/virtualization/tables/virtualmachines.py:81 msgid "Disk" msgstr "Disk" -#: netbox/virtualization/models/clusters.py:25 +#: netbox/virtualization/models/clusters.py:26 msgid "cluster type" msgstr "typ clusteru" -#: netbox/virtualization/models/clusters.py:26 +#: netbox/virtualization/models/clusters.py:27 msgid "cluster types" msgstr "typy clusterů" -#: netbox/virtualization/models/clusters.py:45 +#: netbox/virtualization/models/clusters.py:43 msgid "cluster group" msgstr "klastrová skupina" -#: netbox/virtualization/models/clusters.py:46 +#: netbox/virtualization/models/clusters.py:44 msgid "cluster groups" msgstr "klastrové skupiny" -#: netbox/virtualization/models/clusters.py:121 +#: netbox/virtualization/models/clusters.py:110 msgid "cluster" msgstr "shluk" -#: netbox/virtualization/models/clusters.py:122 +#: netbox/virtualization/models/clusters.py:111 msgid "clusters" msgstr "shluky" -#: netbox/virtualization/models/clusters.py:141 +#: netbox/virtualization/models/clusters.py:137 #, python-brace-format msgid "" "{count} devices are assigned as hosts for this cluster but are not in site " @@ -15425,48 +16074,57 @@ msgstr "" "{count} zařízení jsou přiřazena jako hostitelé pro tento cluster, ale nejsou" " na webu {site}" -#: netbox/virtualization/models/virtualmachines.py:123 +#: netbox/virtualization/models/clusters.py:144 +#, python-brace-format +msgid "" +"{count} devices are assigned as hosts for this cluster but are not in " +"location {location}" +msgstr "" +"{count} zařízení jsou přiřazena jako hostitelé pro tento cluster, ale nejsou" +" v místě {location}" + +#: netbox/virtualization/models/virtualmachines.py:118 msgid "memory (MB)" msgstr "Paměť (MB)" -#: netbox/virtualization/models/virtualmachines.py:128 +#: netbox/virtualization/models/virtualmachines.py:123 msgid "disk (MB)" msgstr "disk (MB)" -#: netbox/virtualization/models/virtualmachines.py:166 +#: netbox/virtualization/models/virtualmachines.py:161 msgid "Virtual machine name must be unique per cluster." msgstr "Název virtuálního počítače musí být jedinečný pro každý cluster." -#: netbox/virtualization/models/virtualmachines.py:169 +#: netbox/virtualization/models/virtualmachines.py:164 msgid "virtual machine" msgstr "virtuální stroj" -#: netbox/virtualization/models/virtualmachines.py:170 +#: netbox/virtualization/models/virtualmachines.py:165 msgid "virtual machines" msgstr "virtuální stroje" -#: netbox/virtualization/models/virtualmachines.py:184 +#: netbox/virtualization/models/virtualmachines.py:176 msgid "A virtual machine must be assigned to a site and/or cluster." msgstr "Virtuální počítač musí být přiřazen k webu a/nebo clusteru." -#: netbox/virtualization/models/virtualmachines.py:191 +#: netbox/virtualization/models/virtualmachines.py:183 #, python-brace-format msgid "" "The selected cluster ({cluster}) is not assigned to this site ({site})." msgstr "Vybraný cluster ({cluster}) není přiřazen k tomuto webu ({site})." -#: netbox/virtualization/models/virtualmachines.py:198 +#: netbox/virtualization/models/virtualmachines.py:190 msgid "Must specify a cluster when assigning a host device." msgstr "Při přiřazování hostitelského zařízení je nutné zadat cluster." -#: netbox/virtualization/models/virtualmachines.py:203 +#: netbox/virtualization/models/virtualmachines.py:195 #, python-brace-format msgid "" "The selected device ({device}) is not assigned to this cluster ({cluster})." msgstr "" "Vybrané zařízení ({device}) není přiřazen k tomuto clusteru ({cluster})." -#: netbox/virtualization/models/virtualmachines.py:215 +#: netbox/virtualization/models/virtualmachines.py:207 #, python-brace-format msgid "" "The specified disk size ({size}) must match the aggregate size of assigned " @@ -15475,17 +16133,17 @@ msgstr "" "Zadaná velikost disku ({size}) musí odpovídat souhrnné velikosti přiřazených" " virtuálních disků ({total_size})." -#: netbox/virtualization/models/virtualmachines.py:229 +#: netbox/virtualization/models/virtualmachines.py:221 #, python-brace-format msgid "Must be an IPv{family} address. ({ip} is an IPv{version} address.)" msgstr "Musí to být IPV{family} adresa. ({ip} je IPV{version} adresa.)" -#: netbox/virtualization/models/virtualmachines.py:238 +#: netbox/virtualization/models/virtualmachines.py:230 #, python-brace-format msgid "The specified IP address ({ip}) is not assigned to this VM." msgstr "Zadaná adresa IP ({ip}) není přiřazen k tomuto virtuálnímu počítači." -#: netbox/virtualization/models/virtualmachines.py:396 +#: netbox/virtualization/models/virtualmachines.py:376 #, python-brace-format msgid "" "The selected parent interface ({parent}) belongs to a different virtual " @@ -15494,7 +16152,7 @@ msgstr "" "Vybrané nadřazené rozhraní ({parent}) patří k jinému virtuálnímu počítači " "({virtual_machine})." -#: netbox/virtualization/models/virtualmachines.py:411 +#: netbox/virtualization/models/virtualmachines.py:391 #, python-brace-format msgid "" "The selected bridge interface ({bridge}) belongs to a different virtual " @@ -15503,7 +16161,7 @@ msgstr "" "Vybrané rozhraní můstku ({bridge}) patří k jinému virtuálnímu počítači " "({virtual_machine})." -#: netbox/virtualization/models/virtualmachines.py:422 +#: netbox/virtualization/models/virtualmachines.py:402 #, python-brace-format msgid "" "The untagged VLAN ({untagged_vlan}) must belong to the same site as the " @@ -15512,24 +16170,24 @@ msgstr "" "Neznačená VLAN ({untagged_vlan}) musí patřit ke stejnému webu jako nadřazený" " virtuální stroj rozhraní, nebo musí být globální." -#: netbox/virtualization/models/virtualmachines.py:434 +#: netbox/virtualization/models/virtualmachines.py:414 msgid "size (MB)" msgstr "velikost (MB)" -#: netbox/virtualization/models/virtualmachines.py:438 +#: netbox/virtualization/models/virtualmachines.py:418 msgid "virtual disk" msgstr "virtuální disk" -#: netbox/virtualization/models/virtualmachines.py:439 +#: netbox/virtualization/models/virtualmachines.py:419 msgid "virtual disks" msgstr "virtuální disky" -#: netbox/virtualization/views.py:273 +#: netbox/virtualization/views.py:289 #, python-brace-format msgid "Added {count} devices to cluster {cluster}" msgstr "Přidal {count} zařízení do clusteru {cluster}" -#: netbox/virtualization/views.py:308 +#: netbox/virtualization/views.py:324 #, python-brace-format msgid "Removed {count} devices from cluster {cluster}" msgstr "Odstraněno {count} zařízení z clusteru {cluster}" @@ -15566,14 +16224,6 @@ msgstr "L2TP" msgid "PPTP" msgstr "PPTP" -#: netbox/vpn/choices.py:64 -msgid "Hub" -msgstr "Rozbočovač" - -#: netbox/vpn/choices.py:65 -msgid "Spoke" -msgstr "Mluvil" - #: netbox/vpn/choices.py:88 msgid "Aggressive" msgstr "Agresivní" @@ -15691,26 +16341,26 @@ msgstr "VLAN (název)" msgid "Tunnel group" msgstr "Skupina tunelů" -#: netbox/vpn/forms/bulk_edit.py:117 netbox/vpn/models/crypto.py:47 +#: netbox/vpn/forms/bulk_edit.py:117 netbox/vpn/models/crypto.py:48 msgid "SA lifetime" msgstr "Životnost SA" -#: netbox/vpn/forms/bulk_edit.py:151 netbox/wireless/forms/bulk_edit.py:79 -#: netbox/wireless/forms/bulk_edit.py:126 -#: netbox/wireless/forms/filtersets.py:64 -#: netbox/wireless/forms/filtersets.py:98 +#: netbox/vpn/forms/bulk_edit.py:151 netbox/wireless/forms/bulk_edit.py:81 +#: netbox/wireless/forms/bulk_edit.py:129 +#: netbox/wireless/forms/filtersets.py:67 +#: netbox/wireless/forms/filtersets.py:126 msgid "Pre-shared key" msgstr "Předsdílený klíč" #: netbox/vpn/forms/bulk_edit.py:237 netbox/vpn/forms/bulk_import.py:239 -#: netbox/vpn/forms/filtersets.py:199 netbox/vpn/forms/model_forms.py:370 +#: netbox/vpn/forms/filtersets.py:199 netbox/vpn/forms/model_forms.py:373 #: netbox/vpn/models/crypto.py:104 msgid "IKE policy" msgstr "Zásady IKE" #: netbox/vpn/forms/bulk_edit.py:242 netbox/vpn/forms/bulk_import.py:244 -#: netbox/vpn/forms/filtersets.py:204 netbox/vpn/forms/model_forms.py:374 -#: netbox/vpn/models/crypto.py:209 +#: netbox/vpn/forms/filtersets.py:204 netbox/vpn/forms/model_forms.py:377 +#: netbox/vpn/models/crypto.py:207 msgid "IPSec policy" msgstr "Zásady IPsec" @@ -15718,10 +16368,6 @@ msgstr "Zásady IPsec" msgid "Tunnel encapsulation" msgstr "Zapouzdření tunelu" -#: netbox/vpn/forms/bulk_import.py:83 -msgid "Operational role" -msgstr "Provozní role" - #: netbox/vpn/forms/bulk_import.py:90 msgid "Parent device of assigned interface" msgstr "Nadřazené zařízení přiřazeného rozhraní" @@ -15738,7 +16384,7 @@ msgstr "Rozhraní zařízení nebo virtuálního stroje" msgid "IKE proposal(s)" msgstr "Návrhy IKE" -#: netbox/vpn/forms/bulk_import.py:215 netbox/vpn/models/crypto.py:197 +#: netbox/vpn/forms/bulk_import.py:215 netbox/vpn/models/crypto.py:195 msgid "Diffie-Hellman group for Perfect Forward Secrecy" msgstr "Skupina Diffie-Hellman pro Perfect Forward Secrecy" @@ -15785,7 +16431,7 @@ msgid "IKE version" msgstr "IKE verze" #: netbox/vpn/forms/filtersets.py:142 netbox/vpn/forms/filtersets.py:175 -#: netbox/vpn/forms/model_forms.py:298 netbox/vpn/forms/model_forms.py:334 +#: netbox/vpn/forms/model_forms.py:299 netbox/vpn/forms/model_forms.py:336 msgid "Proposal" msgstr "Návrh" @@ -15793,32 +16439,28 @@ msgstr "Návrh" msgid "Assigned Object Type" msgstr "Typ přiřazeného objektu" -#: netbox/vpn/forms/model_forms.py:95 netbox/vpn/forms/model_forms.py:130 -#: netbox/vpn/forms/model_forms.py:240 netbox/vpn/tables/tunnels.py:91 +#: netbox/vpn/forms/model_forms.py:96 netbox/vpn/forms/model_forms.py:131 +#: netbox/vpn/forms/model_forms.py:241 netbox/vpn/tables/tunnels.py:91 msgid "Tunnel interface" msgstr "Rozhraní tunelu" -#: netbox/vpn/forms/model_forms.py:150 +#: netbox/vpn/forms/model_forms.py:151 msgid "First Termination" msgstr "První ukončení" -#: netbox/vpn/forms/model_forms.py:153 +#: netbox/vpn/forms/model_forms.py:154 msgid "Second Termination" msgstr "Druhé ukončení" -#: netbox/vpn/forms/model_forms.py:197 +#: netbox/vpn/forms/model_forms.py:198 msgid "This parameter is required when defining a termination." msgstr "Tento parametr je vyžadován při definování ukončení." -#: netbox/vpn/forms/model_forms.py:320 netbox/vpn/forms/model_forms.py:356 -msgid "Policy" -msgstr "Politika" - -#: netbox/vpn/forms/model_forms.py:487 +#: netbox/vpn/forms/model_forms.py:490 msgid "A termination must specify an interface or VLAN." msgstr "Ukončení musí specifikovat rozhraní nebo VLAN." -#: netbox/vpn/forms/model_forms.py:489 +#: netbox/vpn/forms/model_forms.py:492 msgid "" "A termination can only have one terminating object (an interface or VLAN)." msgstr "Ukončení může mít pouze jeden ukončující objekt (rozhraní nebo VLAN)." @@ -15831,31 +16473,31 @@ msgstr "šifrovací algoritmus" msgid "authentication algorithm" msgstr "ověřovací algoritmus" -#: netbox/vpn/models/crypto.py:44 +#: netbox/vpn/models/crypto.py:45 msgid "Diffie-Hellman group ID" msgstr "ID skupiny Diffie-Hellman" -#: netbox/vpn/models/crypto.py:50 +#: netbox/vpn/models/crypto.py:51 msgid "Security association lifetime (in seconds)" msgstr "Životnost asociace zabezpečení (v sekundách)" -#: netbox/vpn/models/crypto.py:59 +#: netbox/vpn/models/crypto.py:60 msgid "IKE proposal" msgstr "Návrh IKE" -#: netbox/vpn/models/crypto.py:60 +#: netbox/vpn/models/crypto.py:61 msgid "IKE proposals" msgstr "Návrhy IKE" -#: netbox/vpn/models/crypto.py:76 +#: netbox/vpn/models/crypto.py:75 msgid "version" msgstr "verze" -#: netbox/vpn/models/crypto.py:88 netbox/vpn/models/crypto.py:190 +#: netbox/vpn/models/crypto.py:88 netbox/vpn/models/crypto.py:188 msgid "proposals" msgstr "návrhy" -#: netbox/vpn/models/crypto.py:91 netbox/wireless/models.py:39 +#: netbox/vpn/models/crypto.py:91 netbox/wireless/models.py:41 msgid "pre-shared key" msgstr "předsdílený klíč" @@ -15863,19 +16505,19 @@ msgstr "předsdílený klíč" msgid "IKE policies" msgstr "Zásady IKE" -#: netbox/vpn/models/crypto.py:118 +#: netbox/vpn/models/crypto.py:115 msgid "Mode is required for selected IKE version" msgstr "Režim je vyžadován pro vybranou verzi IKE" -#: netbox/vpn/models/crypto.py:122 +#: netbox/vpn/models/crypto.py:119 msgid "Mode cannot be used for selected IKE version" msgstr "Režim nelze použít pro vybranou verzi IKE" -#: netbox/vpn/models/crypto.py:136 +#: netbox/vpn/models/crypto.py:134 msgid "encryption" msgstr "šifrování" -#: netbox/vpn/models/crypto.py:141 +#: netbox/vpn/models/crypto.py:140 msgid "authentication" msgstr "autentizace" @@ -15895,32 +16537,32 @@ msgstr "Návrh protokolu IPsec" msgid "IPSec proposals" msgstr "Návrhy IPsec" -#: netbox/vpn/models/crypto.py:178 +#: netbox/vpn/models/crypto.py:175 msgid "Encryption and/or authentication algorithm must be defined" msgstr "Musí být definován šifrovací a/nebo ověřovací algoritmus" -#: netbox/vpn/models/crypto.py:210 +#: netbox/vpn/models/crypto.py:208 msgid "IPSec policies" msgstr "Zásady protokolu IPsec" -#: netbox/vpn/models/crypto.py:251 +#: netbox/vpn/models/crypto.py:247 msgid "IPSec profiles" msgstr "Profily IPsec" -#: netbox/vpn/models/l2vpn.py:116 +#: netbox/vpn/models/l2vpn.py:113 msgid "L2VPN termination" msgstr "Ukončení L2VPN" -#: netbox/vpn/models/l2vpn.py:117 +#: netbox/vpn/models/l2vpn.py:114 msgid "L2VPN terminations" msgstr "Ukončení L2VPN" -#: netbox/vpn/models/l2vpn.py:135 +#: netbox/vpn/models/l2vpn.py:129 #, python-brace-format msgid "L2VPN Termination already assigned ({assigned_object})" msgstr "Ukončení L2VPN je již přiřazeno ({assigned_object})" -#: netbox/vpn/models/l2vpn.py:147 +#: netbox/vpn/models/l2vpn.py:141 #, python-brace-format msgid "" "{l2vpn_type} L2VPNs cannot have more than two terminations; found " @@ -15937,35 +16579,35 @@ msgstr "tunelová skupina" msgid "tunnel groups" msgstr "tunelové skupiny" -#: netbox/vpn/models/tunnels.py:53 +#: netbox/vpn/models/tunnels.py:51 msgid "encapsulation" msgstr "zapouzdření" -#: netbox/vpn/models/tunnels.py:72 +#: netbox/vpn/models/tunnels.py:70 msgid "tunnel ID" msgstr "ID tunelu" -#: netbox/vpn/models/tunnels.py:94 +#: netbox/vpn/models/tunnels.py:92 msgid "tunnel" msgstr "tunel" -#: netbox/vpn/models/tunnels.py:95 +#: netbox/vpn/models/tunnels.py:93 msgid "tunnels" msgstr "tunely" -#: netbox/vpn/models/tunnels.py:153 +#: netbox/vpn/models/tunnels.py:148 msgid "An object may be terminated to only one tunnel at a time." msgstr "Objekt může být ukončen pouze v jednom tunelu najednou." -#: netbox/vpn/models/tunnels.py:156 +#: netbox/vpn/models/tunnels.py:151 msgid "tunnel termination" msgstr "zakončení tunelu" -#: netbox/vpn/models/tunnels.py:157 +#: netbox/vpn/models/tunnels.py:152 msgid "tunnel terminations" msgstr "zakončení tunelu" -#: netbox/vpn/models/tunnels.py:174 +#: netbox/vpn/models/tunnels.py:169 #, python-brace-format msgid "{name} is already attached to a tunnel ({tunnel})." msgstr "{name} je již připojen k tunelu ({tunnel})." @@ -16026,51 +16668,44 @@ msgstr "Osobní WPA (PSK)" msgid "WPA Enterprise" msgstr "Podnikové WPA" -#: netbox/wireless/forms/bulk_edit.py:73 -#: netbox/wireless/forms/bulk_edit.py:120 -#: netbox/wireless/forms/bulk_import.py:68 -#: netbox/wireless/forms/bulk_import.py:71 -#: netbox/wireless/forms/bulk_import.py:110 -#: netbox/wireless/forms/bulk_import.py:113 -#: netbox/wireless/forms/filtersets.py:59 -#: netbox/wireless/forms/filtersets.py:93 +#: netbox/wireless/forms/bulk_edit.py:75 +#: netbox/wireless/forms/bulk_edit.py:123 +#: netbox/wireless/forms/bulk_import.py:70 +#: netbox/wireless/forms/bulk_import.py:73 +#: netbox/wireless/forms/bulk_import.py:115 +#: netbox/wireless/forms/bulk_import.py:118 +#: netbox/wireless/forms/filtersets.py:62 +#: netbox/wireless/forms/filtersets.py:121 msgid "Authentication cipher" msgstr "Ověřovací šifra" -#: netbox/wireless/forms/bulk_edit.py:134 -#: netbox/wireless/forms/bulk_import.py:116 -#: netbox/wireless/forms/bulk_import.py:119 -#: netbox/wireless/forms/filtersets.py:106 -msgid "Distance unit" -msgstr "Jednotka vzdálenosti" - -#: netbox/wireless/forms/bulk_import.py:52 +#: netbox/wireless/forms/bulk_import.py:54 msgid "Bridged VLAN" msgstr "Přemostěná VLAN" -#: netbox/wireless/forms/bulk_import.py:89 -#: netbox/wireless/tables/wirelesslink.py:28 +#: netbox/wireless/forms/bulk_import.py:94 +#: netbox/wireless/tables/wirelesslink.py:27 msgid "Interface A" msgstr "Rozhraní A" -#: netbox/wireless/forms/bulk_import.py:93 -#: netbox/wireless/tables/wirelesslink.py:37 +#: netbox/wireless/forms/bulk_import.py:98 +#: netbox/wireless/tables/wirelesslink.py:36 msgid "Interface B" msgstr "Rozhraní B" -#: netbox/wireless/forms/model_forms.py:161 +#: netbox/wireless/forms/model_forms.py:164 msgid "Side B" msgstr "Strana B" -#: netbox/wireless/models.py:31 +#: netbox/wireless/models.py:32 msgid "authentication cipher" msgstr "ověřovací šifra" -#: netbox/wireless/models.py:69 +#: netbox/wireless/models.py:72 msgid "wireless LAN group" msgstr "skupina bezdrátových sítí LAN" -#: netbox/wireless/models.py:70 +#: netbox/wireless/models.py:73 msgid "wireless LAN groups" msgstr "skupiny bezdrátových sítí LAN" @@ -16078,35 +16713,23 @@ msgstr "skupiny bezdrátových sítí LAN" msgid "wireless LAN" msgstr "bezdrátová síť LAN" -#: netbox/wireless/models.py:144 +#: netbox/wireless/models.py:141 msgid "interface A" msgstr "rozhraní A" -#: netbox/wireless/models.py:151 +#: netbox/wireless/models.py:148 msgid "interface B" msgstr "rozhraní B" -#: netbox/wireless/models.py:165 -msgid "distance" -msgstr "vzdálenost" - -#: netbox/wireless/models.py:172 -msgid "distance unit" -msgstr "jednotka vzdálenosti" - -#: netbox/wireless/models.py:219 +#: netbox/wireless/models.py:196 msgid "wireless link" msgstr "bezdrátové spojení" -#: netbox/wireless/models.py:220 +#: netbox/wireless/models.py:197 msgid "wireless links" msgstr "bezdrátové spoje" -#: netbox/wireless/models.py:236 -msgid "Must specify a unit when setting a wireless distance" -msgstr "" - -#: netbox/wireless/models.py:242 netbox/wireless/models.py:248 +#: netbox/wireless/models.py:212 netbox/wireless/models.py:218 #, python-brace-format msgid "{type} is not a wireless interface." msgstr "{type} není bezdrátové rozhraní." diff --git a/netbox/translations/da/LC_MESSAGES/django.mo b/netbox/translations/da/LC_MESSAGES/django.mo index 993b688e4760f2064b2f251acb5af1a899196fd0..37b27ca2d20e42653f4a75dd3a90ac2fe094a501 100644 GIT binary patch delta 75289 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 N^A=V!F{)YK{{zu-0}22D delta 67133 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 " @@ -5978,7 +6503,7 @@ msgstr "" "href=\"{url}\">{racked_instance_count} tilfælde allerede monteret i " "racker." -#: netbox/dcim/models/devices.py:331 +#: netbox/dcim/models/devices.py:332 msgid "" "Must delete all device bay templates associated with this device before " "declassifying it as a parent device." @@ -5986,155 +6511,155 @@ msgstr "" "Du skal slette alle skabeloner til enhedsbugter, der er knyttet til denne " "enhed, før du afklassificerer den som en overordnet enhed." -#: netbox/dcim/models/devices.py:337 +#: netbox/dcim/models/devices.py:338 msgid "Child device types must be 0U." msgstr "Børneenhedstyper skal være 0U." -#: netbox/dcim/models/devices.py:411 +#: netbox/dcim/models/devices.py:413 msgid "module type" msgstr "modultype" -#: netbox/dcim/models/devices.py:412 +#: netbox/dcim/models/devices.py:414 msgid "module types" msgstr "modultyper" -#: netbox/dcim/models/devices.py:485 +#: netbox/dcim/models/devices.py:484 msgid "Virtual machines may be assigned to this role" msgstr "Virtuelle maskiner kan tildeles denne rolle" -#: netbox/dcim/models/devices.py:497 +#: netbox/dcim/models/devices.py:496 msgid "device role" msgstr "enhedsrolle" -#: netbox/dcim/models/devices.py:498 +#: netbox/dcim/models/devices.py:497 msgid "device roles" msgstr "enhedsroller" -#: netbox/dcim/models/devices.py:515 +#: netbox/dcim/models/devices.py:511 msgid "Optionally limit this platform to devices of a certain manufacturer" msgstr "Begræns eventuelt denne platform til enheder fra en bestemt producent" -#: netbox/dcim/models/devices.py:527 +#: netbox/dcim/models/devices.py:523 msgid "platform" msgstr "platform" -#: netbox/dcim/models/devices.py:528 +#: netbox/dcim/models/devices.py:524 msgid "platforms" msgstr "platforme" -#: netbox/dcim/models/devices.py:576 +#: netbox/dcim/models/devices.py:572 msgid "The function this device serves" msgstr "Funktionen denne enhed tjener" -#: netbox/dcim/models/devices.py:608 +#: netbox/dcim/models/devices.py:599 msgid "Chassis serial number, assigned by the manufacturer" msgstr "Chassisserienummer, tildelt af producenten" -#: netbox/dcim/models/devices.py:616 netbox/dcim/models/devices.py:1189 +#: netbox/dcim/models/devices.py:607 netbox/dcim/models/devices.py:1197 msgid "A unique tag used to identify this device" msgstr "Et unikt tag, der bruges til at identificere denne enhed" -#: netbox/dcim/models/devices.py:643 +#: netbox/dcim/models/devices.py:634 msgid "position (U)" msgstr "position (U)" -#: netbox/dcim/models/devices.py:650 +#: netbox/dcim/models/devices.py:642 msgid "rack face" msgstr "rackflade" -#: netbox/dcim/models/devices.py:670 netbox/dcim/models/devices.py:1420 -#: netbox/virtualization/models/virtualmachines.py:100 +#: netbox/dcim/models/devices.py:663 netbox/dcim/models/devices.py:1425 +#: netbox/virtualization/models/virtualmachines.py:95 msgid "primary IPv4" msgstr "Primær IPv4" -#: netbox/dcim/models/devices.py:678 netbox/dcim/models/devices.py:1428 -#: netbox/virtualization/models/virtualmachines.py:108 +#: netbox/dcim/models/devices.py:671 netbox/dcim/models/devices.py:1433 +#: netbox/virtualization/models/virtualmachines.py:103 msgid "primary IPv6" msgstr "Primær IPv6" -#: netbox/dcim/models/devices.py:686 +#: netbox/dcim/models/devices.py:679 msgid "out-of-band IP" msgstr "IP uden for båndet" -#: netbox/dcim/models/devices.py:703 +#: netbox/dcim/models/devices.py:696 msgid "VC position" msgstr "VC position" -#: netbox/dcim/models/devices.py:706 +#: netbox/dcim/models/devices.py:699 msgid "Virtual chassis position" msgstr "Virtuel chassisposition" -#: netbox/dcim/models/devices.py:709 +#: netbox/dcim/models/devices.py:702 msgid "VC priority" msgstr "VC-prioritet" -#: netbox/dcim/models/devices.py:713 +#: netbox/dcim/models/devices.py:706 msgid "Virtual chassis master election priority" msgstr "Virtuelt kabinetthovedvalgsprioritet" -#: netbox/dcim/models/devices.py:716 netbox/dcim/models/sites.py:207 +#: netbox/dcim/models/devices.py:709 netbox/dcim/models/sites.py:208 msgid "latitude" msgstr "breddegrad" -#: netbox/dcim/models/devices.py:721 netbox/dcim/models/devices.py:729 -#: netbox/dcim/models/sites.py:212 netbox/dcim/models/sites.py:220 +#: netbox/dcim/models/devices.py:714 netbox/dcim/models/devices.py:722 +#: netbox/dcim/models/sites.py:213 netbox/dcim/models/sites.py:221 msgid "GPS coordinate in decimal format (xx.yyyyyy)" msgstr "GPS-koordinat i decimalformat (xx.ååååå)" -#: netbox/dcim/models/devices.py:724 netbox/dcim/models/sites.py:215 +#: netbox/dcim/models/devices.py:717 netbox/dcim/models/sites.py:216 msgid "longitude" msgstr "længde" -#: netbox/dcim/models/devices.py:797 +#: netbox/dcim/models/devices.py:790 msgid "Device name must be unique per site." msgstr "Enhedsnavnet skal være entydigt pr. område." -#: netbox/dcim/models/devices.py:808 netbox/ipam/models/services.py:75 +#: netbox/dcim/models/devices.py:801 netbox/ipam/models/services.py:71 msgid "device" msgstr "enhed" -#: netbox/dcim/models/devices.py:809 +#: netbox/dcim/models/devices.py:802 msgid "devices" msgstr "enheder" -#: netbox/dcim/models/devices.py:835 +#: netbox/dcim/models/devices.py:821 #, python-brace-format msgid "Rack {rack} does not belong to site {site}." msgstr "Rack {rack} hører ikke til område {site}." -#: netbox/dcim/models/devices.py:840 +#: netbox/dcim/models/devices.py:826 #, python-brace-format msgid "Location {location} does not belong to site {site}." msgstr "Lokation {location} hører ikke til området {site}." -#: netbox/dcim/models/devices.py:846 +#: netbox/dcim/models/devices.py:832 #, python-brace-format msgid "Rack {rack} does not belong to location {location}." msgstr "Rack {rack} hører ikke til placering {location}." -#: netbox/dcim/models/devices.py:853 +#: netbox/dcim/models/devices.py:839 msgid "Cannot select a rack face without assigning a rack." msgstr "Kan ikke vælge en rackflade uden at tildele et rack." -#: netbox/dcim/models/devices.py:857 +#: netbox/dcim/models/devices.py:843 msgid "Cannot select a rack position without assigning a rack." msgstr "Kan ikke vælge en rackposition uden at tildele et rack." -#: netbox/dcim/models/devices.py:863 +#: netbox/dcim/models/devices.py:849 msgid "Position must be in increments of 0.5 rack units." msgstr "Positionen skal være i trin på 0,5 reoler." -#: netbox/dcim/models/devices.py:867 +#: netbox/dcim/models/devices.py:853 msgid "Must specify rack face when defining rack position." msgstr "Skal angive rackflade, når du definerer rackposition." -#: netbox/dcim/models/devices.py:875 +#: netbox/dcim/models/devices.py:861 #, python-brace-format msgid "" "A 0U device type ({device_type}) cannot be assigned to a rack position." msgstr "En 0U-enhedstype ({device_type}) kan ikke tildeles en rackposition." -#: netbox/dcim/models/devices.py:886 +#: netbox/dcim/models/devices.py:872 msgid "" "Child device types cannot be assigned to a rack face. This is an attribute " "of the parent device." @@ -6142,7 +6667,7 @@ msgstr "" "Underordnede enhedstyper kan ikke tildeles en rackflade. Dette er en " "attribut for den overordnede enhed." -#: netbox/dcim/models/devices.py:893 +#: netbox/dcim/models/devices.py:879 msgid "" "Child device types cannot be assigned to a rack position. This is an " "attribute of the parent device." @@ -6150,7 +6675,7 @@ msgstr "" "Underordnede enhedstyper kan ikke tildeles en rackposition. Dette er en " "attribut for den overordnede enhed." -#: netbox/dcim/models/devices.py:907 +#: netbox/dcim/models/devices.py:893 #, python-brace-format msgid "" "U{position} is already occupied or does not have sufficient space to " @@ -6159,22 +6684,22 @@ msgstr "" "U{position} er allerede besat eller ikke har tilstrækkelig plads til at " "rumme denne enhedstype: {device_type} ({u_height}U)" -#: netbox/dcim/models/devices.py:922 +#: netbox/dcim/models/devices.py:908 #, python-brace-format msgid "{ip} is not an IPv4 address." msgstr "{ip} er ikke en IPv4-adresse." -#: netbox/dcim/models/devices.py:931 netbox/dcim/models/devices.py:946 +#: netbox/dcim/models/devices.py:920 netbox/dcim/models/devices.py:938 #, python-brace-format msgid "The specified IP address ({ip}) is not assigned to this device." msgstr "Den angivne IP-adresse ({ip}) er ikke tildelt denne enhed." -#: netbox/dcim/models/devices.py:937 +#: netbox/dcim/models/devices.py:926 #, python-brace-format msgid "{ip} is not an IPv6 address." msgstr "{ip} Det er ikke en IPv6-adresse." -#: netbox/dcim/models/devices.py:964 +#: netbox/dcim/models/devices.py:956 #, python-brace-format msgid "" "The assigned platform is limited to {platform_manufacturer} device types, " @@ -6183,12 +6708,17 @@ msgstr "" "Den tildelte platform er begrænset til {platform_manufacturer} enhedstyper, " "men denne enheds type hører til {devicetype_manufacturer}." -#: netbox/dcim/models/devices.py:975 +#: netbox/dcim/models/devices.py:967 #, python-brace-format msgid "The assigned cluster belongs to a different site ({site})" msgstr "Det tildelte cluster tilhører et andet område ({site})" -#: netbox/dcim/models/devices.py:983 +#: netbox/dcim/models/devices.py:974 +#, python-brace-format +msgid "The assigned cluster belongs to a different location ({location})" +msgstr "Den tildelte klynge tilhører en anden placering ({location})" + +#: netbox/dcim/models/devices.py:982 msgid "A device assigned to a virtual chassis must have its position defined." msgstr "" "En enhed, der er tildelt et virtuelt chassis, skal have sin position " @@ -6203,15 +6733,15 @@ msgstr "" "Enheden kan ikke fjernes fra det virtuelle chassis {virtual_chassis} fordi " "det i øjeblikket er udpeget som sin herre." -#: netbox/dcim/models/devices.py:1196 +#: netbox/dcim/models/devices.py:1204 msgid "module" msgstr "modul" -#: netbox/dcim/models/devices.py:1197 +#: netbox/dcim/models/devices.py:1205 msgid "modules" msgstr "moduler" -#: netbox/dcim/models/devices.py:1213 +#: netbox/dcim/models/devices.py:1218 #, python-brace-format msgid "" "Module must be installed within a module bay belonging to the assigned " @@ -6220,21 +6750,21 @@ msgstr "" "Modulet skal installeres i en modulplads, der tilhører den tildelte enhed " "({device})." -#: netbox/dcim/models/devices.py:1339 +#: netbox/dcim/models/devices.py:1346 msgid "domain" msgstr "domæne" -#: netbox/dcim/models/devices.py:1352 netbox/dcim/models/devices.py:1353 +#: netbox/dcim/models/devices.py:1359 netbox/dcim/models/devices.py:1360 msgid "virtual chassis" msgstr "virtuelt chassis" -#: netbox/dcim/models/devices.py:1368 +#: netbox/dcim/models/devices.py:1372 #, python-brace-format msgid "" "The selected master ({master}) is not assigned to this virtual chassis." msgstr "Den valgte master ({master}) er ikke tildelt dette virtuelle chassis." -#: netbox/dcim/models/devices.py:1384 +#: netbox/dcim/models/devices.py:1388 #, python-brace-format msgid "" "Unable to delete virtual chassis {self}. There are member interfaces which " @@ -6243,50 +6773,61 @@ msgstr "" "Kan ikke slette virtuelt chassis {self}. Der er medlemsgrænseflader, der " "danner LAG-grænseflader på tværs af chassiserne." -#: netbox/dcim/models/devices.py:1409 netbox/vpn/models/l2vpn.py:37 +#: netbox/dcim/models/devices.py:1414 netbox/vpn/models/l2vpn.py:37 msgid "identifier" msgstr "identificere" -#: netbox/dcim/models/devices.py:1410 +#: netbox/dcim/models/devices.py:1415 msgid "Numeric identifier unique to the parent device" msgstr "Numerisk identifikator, der er unik for den overordnede enhed" -#: netbox/dcim/models/devices.py:1438 netbox/extras/models/customfields.py:225 +#: netbox/dcim/models/devices.py:1443 netbox/extras/models/customfields.py:225 #: netbox/extras/models/models.py:107 netbox/extras/models/models.py:694 -#: netbox/netbox/models/__init__.py:115 +#: netbox/netbox/models/__init__.py:120 msgid "comments" msgstr "kommenterer" -#: netbox/dcim/models/devices.py:1454 +#: netbox/dcim/models/devices.py:1459 msgid "virtual device context" msgstr "virtuel enhedskontekst" -#: netbox/dcim/models/devices.py:1455 +#: netbox/dcim/models/devices.py:1460 msgid "virtual device contexts" msgstr "virtuelle enhedskontekster" -#: netbox/dcim/models/devices.py:1487 +#: netbox/dcim/models/devices.py:1489 #, python-brace-format msgid "{ip} is not an IPv{family} address." msgstr "{ip} er ikke en IPV{family} adresse." -#: netbox/dcim/models/devices.py:1493 +#: netbox/dcim/models/devices.py:1495 msgid "Primary IP address must belong to an interface on the assigned device." msgstr "Primær IP-adresse skal tilhøre en grænseflade på den tildelte enhed." -#: netbox/dcim/models/mixins.py:15 netbox/extras/models/configs.py:41 -#: netbox/extras/models/models.py:313 netbox/extras/models/models.py:522 -#: netbox/extras/models/search.py:48 netbox/ipam/models/ip.py:194 -msgid "weight" -msgstr "vægt" +#: netbox/dcim/models/devices.py:1527 +msgid "MAC addresses" +msgstr "MAC-adresser" -#: netbox/dcim/models/mixins.py:22 -msgid "weight unit" -msgstr "vægtenhed" +#: netbox/dcim/models/devices.py:1559 +msgid "" +"Cannot unassign MAC Address while it is designated as the primary MAC for an" +" object" +msgstr "" +"Kan ikke ophæve tildelingen af MAC-adresse, mens den er angivet som den " +"primære MAC for et objekt" -#: netbox/dcim/models/mixins.py:51 -msgid "Must specify a unit when setting a weight" -msgstr "Skal angive en enhed, når du indstiller en vægt" +#: netbox/dcim/models/devices.py:1563 +msgid "" +"Cannot reassign MAC Address while it is designated as the primary MAC for an" +" object" +msgstr "" +"MAC-adresse kan ikke tildeles igen, mens den er angivet som den primære MAC " +"for et objekt" + +#: netbox/dcim/models/mixins.py:94 +#, python-brace-format +msgid "Please select a {scope_type}." +msgstr "Vælg venligst en {scope_type}." #: netbox/dcim/models/power.py:55 msgid "power panel" @@ -6296,49 +6837,49 @@ msgstr "strømpanel" msgid "power panels" msgstr "strømpaneler" -#: netbox/dcim/models/power.py:70 +#: netbox/dcim/models/power.py:67 #, python-brace-format msgid "" "Location {location} ({location_site}) is in a different site than {site}" msgstr "Lokation {location} ({location_site}) er i et andet område end {site}" -#: netbox/dcim/models/power.py:108 +#: netbox/dcim/models/power.py:106 msgid "supply" msgstr "levere" -#: netbox/dcim/models/power.py:114 +#: netbox/dcim/models/power.py:112 msgid "phase" msgstr "overgang" -#: netbox/dcim/models/power.py:120 +#: netbox/dcim/models/power.py:118 msgid "voltage" msgstr "spænding" -#: netbox/dcim/models/power.py:125 +#: netbox/dcim/models/power.py:123 msgid "amperage" msgstr "strømstyrke" -#: netbox/dcim/models/power.py:130 +#: netbox/dcim/models/power.py:128 msgid "max utilization" msgstr "maksimal udnyttelse" -#: netbox/dcim/models/power.py:133 +#: netbox/dcim/models/power.py:131 msgid "Maximum permissible draw (percentage)" msgstr "Maksimal tilladt trækning (procent)" -#: netbox/dcim/models/power.py:136 +#: netbox/dcim/models/power.py:134 msgid "available power" msgstr "tilgængelig strøm" -#: netbox/dcim/models/power.py:164 +#: netbox/dcim/models/power.py:162 msgid "power feed" msgstr "strømforsyning" -#: netbox/dcim/models/power.py:165 +#: netbox/dcim/models/power.py:163 msgid "power feeds" msgstr "strømforsyninger" -#: netbox/dcim/models/power.py:179 +#: netbox/dcim/models/power.py:174 #, python-brace-format msgid "" "Rack {rack} ({rack_site}) and power panel {powerpanel} ({powerpanel_site}) " @@ -6347,55 +6888,55 @@ msgstr "" "Rack {rack} ({rack_site}) og strømpanel {powerpanel} ({powerpanel_site}) er " "på forskellige områder." -#: netbox/dcim/models/power.py:190 +#: netbox/dcim/models/power.py:185 msgid "Voltage cannot be negative for AC supply" msgstr "Spænding kan ikke være negativ for vekselstrømsforsyning" -#: netbox/dcim/models/racks.py:47 +#: netbox/dcim/models/racks.py:46 msgid "width" msgstr "bredde" -#: netbox/dcim/models/racks.py:48 +#: netbox/dcim/models/racks.py:47 msgid "Rail-to-rail width" msgstr "Skinne-til-skinne-bredde" -#: netbox/dcim/models/racks.py:56 +#: netbox/dcim/models/racks.py:55 msgid "Height in rack units" msgstr "Højde i reoler" -#: netbox/dcim/models/racks.py:60 +#: netbox/dcim/models/racks.py:59 msgid "starting unit" msgstr "startenhed" -#: netbox/dcim/models/racks.py:62 +#: netbox/dcim/models/racks.py:61 msgid "Starting unit for rack" msgstr "Startenhed til rack" -#: netbox/dcim/models/racks.py:66 +#: netbox/dcim/models/racks.py:65 msgid "descending units" msgstr "faldende enheder" -#: netbox/dcim/models/racks.py:67 +#: netbox/dcim/models/racks.py:66 msgid "Units are numbered top-to-bottom" msgstr "Enhederne er nummereret fra top til bund" -#: netbox/dcim/models/racks.py:72 +#: netbox/dcim/models/racks.py:71 msgid "outer width" msgstr "ydre bredde" -#: netbox/dcim/models/racks.py:75 +#: netbox/dcim/models/racks.py:74 msgid "Outer dimension of rack (width)" msgstr "Udvendig dimension af rack (bredde)" -#: netbox/dcim/models/racks.py:78 +#: netbox/dcim/models/racks.py:77 msgid "outer depth" msgstr "ydre dybde" -#: netbox/dcim/models/racks.py:81 +#: netbox/dcim/models/racks.py:80 msgid "Outer dimension of rack (depth)" msgstr "Udvendig dimension af rack (dybde)" -#: netbox/dcim/models/racks.py:84 +#: netbox/dcim/models/racks.py:83 msgid "outer unit" msgstr "ydre enhed" @@ -6419,7 +6960,7 @@ msgstr "max vægt" msgid "Maximum load capacity for the rack" msgstr "Maksimal belastningskapacitet for stativet" -#: netbox/dcim/models/racks.py:125 netbox/dcim/models/racks.py:252 +#: netbox/dcim/models/racks.py:125 netbox/dcim/models/racks.py:247 msgid "form factor" msgstr "formfaktor" @@ -6431,55 +6972,55 @@ msgstr "racktype" msgid "rack types" msgstr "racktyper" -#: netbox/dcim/models/racks.py:180 netbox/dcim/models/racks.py:379 +#: netbox/dcim/models/racks.py:177 netbox/dcim/models/racks.py:368 msgid "Must specify a unit when setting an outer width/depth" msgstr "Skal angive en enhed, når der indstilles en ydre bredde/dybde" -#: netbox/dcim/models/racks.py:184 netbox/dcim/models/racks.py:383 +#: netbox/dcim/models/racks.py:181 netbox/dcim/models/racks.py:372 msgid "Must specify a unit when setting a maximum weight" msgstr "Skal angive en enhed, når der indstilles en maksimal vægt" -#: netbox/dcim/models/racks.py:230 +#: netbox/dcim/models/racks.py:227 msgid "rack role" msgstr "rackrolle" -#: netbox/dcim/models/racks.py:231 +#: netbox/dcim/models/racks.py:228 msgid "rack roles" msgstr "rackroller" -#: netbox/dcim/models/racks.py:274 +#: netbox/dcim/models/racks.py:265 msgid "facility ID" msgstr "facilitets-id" -#: netbox/dcim/models/racks.py:275 +#: netbox/dcim/models/racks.py:266 msgid "Locally-assigned identifier" msgstr "Lokalt tildelt identifikator" -#: netbox/dcim/models/racks.py:308 netbox/ipam/forms/bulk_import.py:201 -#: netbox/ipam/forms/bulk_import.py:266 netbox/ipam/forms/bulk_import.py:301 -#: netbox/ipam/forms/bulk_import.py:483 -#: netbox/virtualization/forms/bulk_import.py:112 +#: netbox/dcim/models/racks.py:299 netbox/ipam/forms/bulk_import.py:197 +#: netbox/ipam/forms/bulk_import.py:265 netbox/ipam/forms/bulk_import.py:300 +#: netbox/ipam/forms/bulk_import.py:482 +#: netbox/virtualization/forms/bulk_import.py:118 msgid "Functional role" msgstr "Funktionel rolle" -#: netbox/dcim/models/racks.py:321 +#: netbox/dcim/models/racks.py:312 msgid "A unique tag used to identify this rack" msgstr "Et unikt tag, der bruges til at identificere dette rack" -#: netbox/dcim/models/racks.py:359 +#: netbox/dcim/models/racks.py:351 msgid "rack" msgstr "rack" -#: netbox/dcim/models/racks.py:360 +#: netbox/dcim/models/racks.py:352 msgid "racks" msgstr "stativer" -#: netbox/dcim/models/racks.py:375 +#: netbox/dcim/models/racks.py:364 #, python-brace-format msgid "Assigned location must belong to parent site ({site})." msgstr "Den tildelte lokation skal tilhøre det overordnede område ({site})." -#: netbox/dcim/models/racks.py:393 +#: netbox/dcim/models/racks.py:387 #, python-brace-format msgid "" "Rack must be at least {min_height}U tall to house currently installed " @@ -6488,7 +7029,7 @@ msgstr "" "Rack skal være mindst {min_height}Du er høj til at huse aktuelt installerede" " enheder." -#: netbox/dcim/models/racks.py:400 +#: netbox/dcim/models/racks.py:396 #, python-brace-format msgid "" "Rack unit numbering must begin at {position} or less to house currently " @@ -6497,121 +7038,121 @@ msgstr "" "Nummerering af rackenheder skal begynde kl {position} eller mindre til at " "huse aktuelt installerede enheder." -#: netbox/dcim/models/racks.py:408 +#: netbox/dcim/models/racks.py:404 #, python-brace-format msgid "Location must be from the same site, {site}." msgstr "Lokation skal være fra samme område, {site}." -#: netbox/dcim/models/racks.py:670 +#: netbox/dcim/models/racks.py:666 msgid "units" msgstr "enkeltdele" -#: netbox/dcim/models/racks.py:696 +#: netbox/dcim/models/racks.py:692 msgid "rack reservation" msgstr "reservation af rack" -#: netbox/dcim/models/racks.py:697 +#: netbox/dcim/models/racks.py:693 msgid "rack reservations" msgstr "rackreservationer" -#: netbox/dcim/models/racks.py:714 +#: netbox/dcim/models/racks.py:707 #, python-brace-format msgid "Invalid unit(s) for {height}U rack: {unit_list}" msgstr "Ugyldig enhed (er) for {height}U-stativ: {unit_list}" -#: netbox/dcim/models/racks.py:727 +#: netbox/dcim/models/racks.py:720 #, python-brace-format msgid "The following units have already been reserved: {unit_list}" msgstr "Følgende enheder er allerede reserveret: {unit_list}" -#: netbox/dcim/models/sites.py:49 +#: netbox/dcim/models/sites.py:53 msgid "A top-level region with this name already exists." msgstr "Der findes allerede en region på øverste niveau med dette navn." -#: netbox/dcim/models/sites.py:59 +#: netbox/dcim/models/sites.py:63 msgid "A top-level region with this slug already exists." msgstr "Der findes allerede en region på øverste niveau med dette slug." -#: netbox/dcim/models/sites.py:62 +#: netbox/dcim/models/sites.py:66 msgid "region" msgstr "område" -#: netbox/dcim/models/sites.py:63 +#: netbox/dcim/models/sites.py:67 msgid "regions" msgstr "regioner" -#: netbox/dcim/models/sites.py:102 +#: netbox/dcim/models/sites.py:109 msgid "A top-level site group with this name already exists." msgstr "" "Der findes allerede en gruppe af områder på øverste niveau med dette navn." -#: netbox/dcim/models/sites.py:112 +#: netbox/dcim/models/sites.py:119 msgid "A top-level site group with this slug already exists." msgstr "Der findes allerede en områdegruppe på øverste niveau med dette slug." -#: netbox/dcim/models/sites.py:115 +#: netbox/dcim/models/sites.py:122 msgid "site group" msgstr "områdegruppe" -#: netbox/dcim/models/sites.py:116 +#: netbox/dcim/models/sites.py:123 msgid "site groups" msgstr "områdegrupper" -#: netbox/dcim/models/sites.py:141 +#: netbox/dcim/models/sites.py:145 msgid "Full name of the site" msgstr "Områdets fulde navn" -#: netbox/dcim/models/sites.py:181 netbox/dcim/models/sites.py:279 +#: netbox/dcim/models/sites.py:181 netbox/dcim/models/sites.py:283 msgid "facility" msgstr "facilitet" -#: netbox/dcim/models/sites.py:184 netbox/dcim/models/sites.py:282 +#: netbox/dcim/models/sites.py:184 netbox/dcim/models/sites.py:286 msgid "Local facility ID or description" msgstr "Lokalt facilitets-id eller beskrivelse" -#: netbox/dcim/models/sites.py:195 +#: netbox/dcim/models/sites.py:196 msgid "physical address" msgstr "Fysisk adresse" -#: netbox/dcim/models/sites.py:198 +#: netbox/dcim/models/sites.py:199 msgid "Physical location of the building" msgstr "Bygningens fysiske placering" -#: netbox/dcim/models/sites.py:201 +#: netbox/dcim/models/sites.py:202 msgid "shipping address" msgstr "leveringsadresse" -#: netbox/dcim/models/sites.py:204 +#: netbox/dcim/models/sites.py:205 msgid "If different from the physical address" msgstr "Hvis forskellig fra den fysiske adresse" -#: netbox/dcim/models/sites.py:238 +#: netbox/dcim/models/sites.py:245 msgid "site" msgstr "Område" -#: netbox/dcim/models/sites.py:239 +#: netbox/dcim/models/sites.py:246 msgid "sites" msgstr "Områder" -#: netbox/dcim/models/sites.py:309 +#: netbox/dcim/models/sites.py:319 msgid "A location with this name already exists within the specified site." msgstr "" "Der findes allerede en lokation med dette navn inden for det angivne område." -#: netbox/dcim/models/sites.py:319 +#: netbox/dcim/models/sites.py:329 msgid "A location with this slug already exists within the specified site." msgstr "" "En lokation med dette slug findes allerede inden for det angivne område." -#: netbox/dcim/models/sites.py:322 +#: netbox/dcim/models/sites.py:332 msgid "location" msgstr "beliggenhed" -#: netbox/dcim/models/sites.py:323 +#: netbox/dcim/models/sites.py:333 msgid "locations" msgstr "steder" -#: netbox/dcim/models/sites.py:337 +#: netbox/dcim/models/sites.py:344 #, python-brace-format msgid "Parent location ({parent}) must belong to the same site ({site})." msgstr "Hovedlokation ({parent}) skal tilhøre det samme område ({site})." @@ -6624,11 +7165,11 @@ msgstr "Opsigelse A" msgid "Termination B" msgstr "Opsigelse B" -#: netbox/dcim/tables/cables.py:66 netbox/wireless/tables/wirelesslink.py:23 +#: netbox/dcim/tables/cables.py:66 netbox/wireless/tables/wirelesslink.py:22 msgid "Device A" msgstr "Enhed A" -#: netbox/dcim/tables/cables.py:72 netbox/wireless/tables/wirelesslink.py:32 +#: netbox/dcim/tables/cables.py:72 netbox/wireless/tables/wirelesslink.py:31 msgid "Device B" msgstr "Enhed B" @@ -6662,97 +7203,91 @@ msgstr "Område B" msgid "Reachable" msgstr "Tilgængelig" -#: netbox/dcim/tables/devices.py:58 netbox/dcim/tables/devices.py:106 -#: netbox/dcim/tables/racks.py:150 netbox/dcim/tables/sites.py:105 -#: netbox/dcim/tables/sites.py:148 netbox/extras/tables/tables.py:545 +#: netbox/dcim/tables/devices.py:69 netbox/dcim/tables/devices.py:117 +#: netbox/dcim/tables/racks.py:149 netbox/dcim/tables/sites.py:104 +#: netbox/dcim/tables/sites.py:147 netbox/extras/tables/tables.py:545 #: netbox/netbox/navigation/menu.py:69 netbox/netbox/navigation/menu.py:73 #: netbox/netbox/navigation/menu.py:75 #: netbox/virtualization/forms/model_forms.py:122 -#: netbox/virtualization/tables/clusters.py:83 -#: netbox/virtualization/views.py:204 +#: netbox/virtualization/tables/clusters.py:87 +#: netbox/virtualization/views.py:216 msgid "Devices" msgstr "Enheder" -#: netbox/dcim/tables/devices.py:63 netbox/dcim/tables/devices.py:111 -#: netbox/virtualization/tables/clusters.py:88 +#: netbox/dcim/tables/devices.py:74 netbox/dcim/tables/devices.py:122 +#: netbox/virtualization/tables/clusters.py:92 msgid "VMs" msgstr "VM'er" -#: netbox/dcim/tables/devices.py:100 netbox/dcim/tables/devices.py:216 -#: netbox/extras/forms/model_forms.py:630 +#: netbox/dcim/tables/devices.py:111 netbox/dcim/tables/devices.py:227 +#: netbox/extras/forms/model_forms.py:644 #: netbox/templates/dcim/device.html:112 -#: netbox/templates/dcim/device/render_config.html:11 -#: netbox/templates/dcim/device/render_config.html:14 #: netbox/templates/dcim/devicerole.html:44 #: netbox/templates/dcim/platform.html:41 #: netbox/templates/extras/configtemplate.html:10 +#: netbox/templates/extras/object_render_config.html:12 +#: netbox/templates/extras/object_render_config.html:15 #: netbox/templates/virtualization/virtualmachine.html:48 -#: netbox/templates/virtualization/virtualmachine/render_config.html:11 -#: netbox/templates/virtualization/virtualmachine/render_config.html:14 -#: netbox/virtualization/tables/virtualmachines.py:107 +#: netbox/virtualization/tables/virtualmachines.py:77 msgid "Config Template" msgstr "Konfigurationsskabelon" -#: netbox/dcim/tables/devices.py:150 netbox/templates/dcim/sitegroup.html:26 -msgid "Site Group" -msgstr "Områdegruppe" - -#: netbox/dcim/tables/devices.py:187 netbox/dcim/tables/devices.py:1068 -#: netbox/ipam/forms/bulk_import.py:527 netbox/ipam/forms/model_forms.py:306 -#: netbox/ipam/forms/model_forms.py:319 netbox/ipam/tables/ip.py:356 -#: netbox/ipam/tables/ip.py:423 netbox/ipam/tables/ip.py:446 +#: netbox/dcim/tables/devices.py:198 netbox/dcim/tables/devices.py:1100 +#: netbox/ipam/forms/bulk_import.py:562 netbox/ipam/forms/model_forms.py:316 +#: netbox/ipam/forms/model_forms.py:329 netbox/ipam/tables/ip.py:308 +#: netbox/ipam/tables/ip.py:375 netbox/ipam/tables/ip.py:398 #: netbox/templates/ipam/ipaddress.html:11 -#: netbox/virtualization/tables/virtualmachines.py:95 +#: netbox/virtualization/tables/virtualmachines.py:65 msgid "IP Address" msgstr "IP adresse" -#: netbox/dcim/tables/devices.py:191 netbox/dcim/tables/devices.py:1072 -#: netbox/virtualization/tables/virtualmachines.py:86 +#: netbox/dcim/tables/devices.py:202 netbox/dcim/tables/devices.py:1104 +#: netbox/virtualization/tables/virtualmachines.py:56 msgid "IPv4 Address" msgstr "IPv4-adresse" -#: netbox/dcim/tables/devices.py:195 netbox/dcim/tables/devices.py:1076 -#: netbox/virtualization/tables/virtualmachines.py:90 +#: netbox/dcim/tables/devices.py:206 netbox/dcim/tables/devices.py:1108 +#: netbox/virtualization/tables/virtualmachines.py:60 msgid "IPv6 Address" msgstr "IPv6-adresse" -#: netbox/dcim/tables/devices.py:210 +#: netbox/dcim/tables/devices.py:221 msgid "VC Position" msgstr "VC Position" -#: netbox/dcim/tables/devices.py:213 +#: netbox/dcim/tables/devices.py:224 msgid "VC Priority" msgstr "VC-prioritet" -#: netbox/dcim/tables/devices.py:220 netbox/templates/dcim/device_edit.html:38 +#: netbox/dcim/tables/devices.py:231 netbox/templates/dcim/device_edit.html:38 #: netbox/templates/dcim/devicebay_populate.html:16 msgid "Parent Device" msgstr "Forældreenhed" -#: netbox/dcim/tables/devices.py:225 +#: netbox/dcim/tables/devices.py:236 msgid "Position (Device Bay)" msgstr "Position (enhedsplads)" -#: netbox/dcim/tables/devices.py:234 +#: netbox/dcim/tables/devices.py:245 msgid "Console ports" msgstr "Konsolporte" -#: netbox/dcim/tables/devices.py:237 +#: netbox/dcim/tables/devices.py:248 msgid "Console server ports" msgstr "Konsolserverporte" -#: netbox/dcim/tables/devices.py:240 +#: netbox/dcim/tables/devices.py:251 msgid "Power ports" msgstr "Strømstik" -#: netbox/dcim/tables/devices.py:243 +#: netbox/dcim/tables/devices.py:254 msgid "Power outlets" msgstr "Strømudtag" -#: netbox/dcim/tables/devices.py:246 netbox/dcim/tables/devices.py:1081 -#: netbox/dcim/tables/devicetypes.py:128 netbox/dcim/views.py:1040 -#: netbox/dcim/views.py:1279 netbox/dcim/views.py:1975 -#: netbox/netbox/navigation/menu.py:94 netbox/netbox/navigation/menu.py:250 +#: netbox/dcim/tables/devices.py:257 netbox/dcim/tables/devices.py:1113 +#: netbox/dcim/tables/devicetypes.py:133 netbox/dcim/views.py:1144 +#: netbox/dcim/views.py:1388 netbox/dcim/views.py:2139 +#: netbox/netbox/navigation/menu.py:94 netbox/netbox/navigation/menu.py:258 #: netbox/templates/dcim/device/base.html:37 #: netbox/templates/dcim/device_list.html:43 #: netbox/templates/dcim/devicetype/base.html:34 @@ -6762,35 +7297,35 @@ msgstr "Strømudtag" #: netbox/templates/dcim/virtualdevicecontext.html:81 #: netbox/templates/virtualization/virtualmachine/base.html:27 #: netbox/templates/virtualization/virtualmachine_list.html:14 -#: netbox/virtualization/tables/virtualmachines.py:101 -#: netbox/virtualization/views.py:364 netbox/wireless/tables/wirelesslan.py:55 +#: netbox/virtualization/tables/virtualmachines.py:71 +#: netbox/virtualization/views.py:381 netbox/wireless/tables/wirelesslan.py:63 msgid "Interfaces" msgstr "Grænseflader" -#: netbox/dcim/tables/devices.py:249 +#: netbox/dcim/tables/devices.py:260 msgid "Front ports" msgstr "Frontporte" -#: netbox/dcim/tables/devices.py:255 +#: netbox/dcim/tables/devices.py:266 msgid "Device bays" msgstr "Enhedsbugter" -#: netbox/dcim/tables/devices.py:258 +#: netbox/dcim/tables/devices.py:269 msgid "Module bays" msgstr "Modulpladser" -#: netbox/dcim/tables/devices.py:261 +#: netbox/dcim/tables/devices.py:272 msgid "Inventory items" msgstr "Lagervarer" -#: netbox/dcim/tables/devices.py:305 netbox/dcim/tables/modules.py:57 +#: netbox/dcim/tables/devices.py:315 netbox/dcim/tables/modules.py:57 #: netbox/templates/dcim/modulebay.html:17 msgid "Module Bay" msgstr "Modulbugt" -#: netbox/dcim/tables/devices.py:318 netbox/dcim/tables/devicetypes.py:47 -#: netbox/dcim/tables/devicetypes.py:143 netbox/dcim/views.py:1115 -#: netbox/dcim/views.py:2073 netbox/netbox/navigation/menu.py:103 +#: netbox/dcim/tables/devices.py:328 netbox/dcim/tables/devicetypes.py:52 +#: netbox/dcim/tables/devicetypes.py:148 netbox/dcim/views.py:1219 +#: netbox/dcim/views.py:2237 netbox/netbox/navigation/menu.py:103 #: netbox/templates/dcim/device/base.html:52 #: netbox/templates/dcim/device_list.html:71 #: netbox/templates/dcim/devicetype/base.html:49 @@ -6799,124 +7334,133 @@ msgstr "Modulbugt" msgid "Inventory Items" msgstr "Lagervarer" -#: netbox/dcim/tables/devices.py:333 +#: netbox/dcim/tables/devices.py:343 msgid "Cable Color" msgstr "Kabelfarve" -#: netbox/dcim/tables/devices.py:339 +#: netbox/dcim/tables/devices.py:349 msgid "Link Peers" msgstr "Link jævnaldrende" -#: netbox/dcim/tables/devices.py:342 +#: netbox/dcim/tables/devices.py:352 msgid "Mark Connected" msgstr "Marker tilsluttet" -#: netbox/dcim/tables/devices.py:461 +#: netbox/dcim/tables/devices.py:471 msgid "Maximum draw (W)" msgstr "Maksimal trækkraft (W)" -#: netbox/dcim/tables/devices.py:464 +#: netbox/dcim/tables/devices.py:474 msgid "Allocated draw (W)" msgstr "Tildelt lodtrækning (W)" -#: netbox/dcim/tables/devices.py:558 netbox/ipam/forms/model_forms.py:734 -#: netbox/ipam/tables/fhrp.py:28 netbox/ipam/views.py:596 -#: netbox/ipam/views.py:696 netbox/netbox/navigation/menu.py:158 -#: netbox/netbox/navigation/menu.py:160 -#: netbox/templates/dcim/interface.html:339 +#: netbox/dcim/tables/devices.py:572 netbox/ipam/forms/model_forms.py:784 +#: netbox/ipam/tables/fhrp.py:28 netbox/ipam/views.py:633 +#: netbox/ipam/views.py:738 netbox/netbox/navigation/menu.py:164 +#: netbox/netbox/navigation/menu.py:166 +#: netbox/templates/dcim/interface.html:396 #: netbox/templates/ipam/ipaddress_bulk_add.html:15 #: netbox/templates/ipam/service.html:40 -#: netbox/templates/virtualization/vminterface.html:85 +#: netbox/templates/virtualization/vminterface.html:101 #: netbox/vpn/tables/tunnels.py:98 msgid "IP Addresses" msgstr "IP-adresser" -#: netbox/dcim/tables/devices.py:564 netbox/netbox/navigation/menu.py:202 +#: netbox/dcim/tables/devices.py:578 netbox/netbox/navigation/menu.py:210 #: netbox/templates/ipam/inc/panels/fhrp_groups.html:6 msgid "FHRP Groups" msgstr "FHRP Grupper" -#: netbox/dcim/tables/devices.py:576 netbox/templates/dcim/interface.html:89 -#: netbox/templates/virtualization/vminterface.html:67 +#: netbox/dcim/tables/devices.py:590 netbox/templates/dcim/interface.html:95 +#: netbox/templates/virtualization/vminterface.html:59 #: netbox/templates/vpn/tunnel.html:18 #: netbox/templates/vpn/tunneltermination.html:13 #: netbox/vpn/forms/bulk_edit.py:76 netbox/vpn/forms/bulk_import.py:76 #: netbox/vpn/forms/filtersets.py:42 netbox/vpn/forms/filtersets.py:82 -#: netbox/vpn/forms/model_forms.py:60 netbox/vpn/forms/model_forms.py:145 +#: netbox/vpn/forms/model_forms.py:61 netbox/vpn/forms/model_forms.py:146 #: netbox/vpn/tables/tunnels.py:78 msgid "Tunnel" msgstr "Tunnel" -#: netbox/dcim/tables/devices.py:604 netbox/dcim/tables/devicetypes.py:227 +#: netbox/dcim/tables/devices.py:626 netbox/dcim/tables/devicetypes.py:234 #: netbox/templates/dcim/interface.html:65 msgid "Management Only" msgstr "Kun ledelse" -#: netbox/dcim/tables/devices.py:623 +#: netbox/dcim/tables/devices.py:645 msgid "VDCs" msgstr "VDC'er" -#: netbox/dcim/tables/devices.py:873 netbox/templates/dcim/modulebay.html:53 +#: netbox/dcim/tables/devices.py:652 netbox/templates/dcim/interface.html:163 +msgid "Virtual Circuit" +msgstr "Virtuelt kredsløb" + +#: netbox/dcim/tables/devices.py:904 netbox/templates/dcim/modulebay.html:53 msgid "Installed Module" msgstr "Installeret modul" -#: netbox/dcim/tables/devices.py:876 +#: netbox/dcim/tables/devices.py:907 msgid "Module Serial" msgstr "Seriel modul" -#: netbox/dcim/tables/devices.py:880 +#: netbox/dcim/tables/devices.py:911 msgid "Module Asset Tag" msgstr "Modulaktivmærke" -#: netbox/dcim/tables/devices.py:889 +#: netbox/dcim/tables/devices.py:920 msgid "Module Status" msgstr "Modulstatus" -#: netbox/dcim/tables/devices.py:944 netbox/dcim/tables/devicetypes.py:312 -#: netbox/templates/dcim/inventoryitem.html:40 +#: netbox/dcim/tables/devices.py:974 netbox/dcim/tables/devicetypes.py:319 +#: netbox/templates/dcim/inventoryitem.html:44 msgid "Component" msgstr "Komponent" -#: netbox/dcim/tables/devices.py:1000 +#: netbox/dcim/tables/devices.py:1032 msgid "Items" msgstr "Varer" -#: netbox/dcim/tables/devicetypes.py:37 netbox/netbox/navigation/menu.py:84 +#: netbox/dcim/tables/devicetypes.py:37 netbox/netbox/navigation/menu.py:60 +#: netbox/netbox/navigation/menu.py:62 +msgid "Rack Types" +msgstr "Racktyper" + +#: netbox/dcim/tables/devicetypes.py:42 netbox/netbox/navigation/menu.py:84 #: netbox/netbox/navigation/menu.py:86 msgid "Device Types" msgstr "Enhedstyper" -#: netbox/dcim/tables/devicetypes.py:42 netbox/netbox/navigation/menu.py:87 +#: netbox/dcim/tables/devicetypes.py:47 netbox/netbox/navigation/menu.py:87 msgid "Module Types" msgstr "Modultyper" -#: netbox/dcim/tables/devicetypes.py:52 netbox/extras/forms/filtersets.py:371 -#: netbox/extras/forms/model_forms.py:537 netbox/extras/tables/tables.py:540 +#: netbox/dcim/tables/devicetypes.py:57 netbox/extras/forms/filtersets.py:378 +#: netbox/extras/forms/model_forms.py:551 netbox/extras/tables/tables.py:540 #: netbox/netbox/navigation/menu.py:78 msgid "Platforms" msgstr "Platforme" -#: netbox/dcim/tables/devicetypes.py:84 +#: netbox/dcim/tables/devicetypes.py:89 #: netbox/templates/dcim/devicetype.html:29 msgid "Default Platform" msgstr "Standardplatform" -#: netbox/dcim/tables/devicetypes.py:88 +#: netbox/dcim/tables/devicetypes.py:93 #: netbox/templates/dcim/devicetype.html:45 msgid "Full Depth" msgstr "Fuld dybde" -#: netbox/dcim/tables/devicetypes.py:98 +#: netbox/dcim/tables/devicetypes.py:103 msgid "U Height" msgstr "U Højde" -#: netbox/dcim/tables/devicetypes.py:113 netbox/dcim/tables/modules.py:26 +#: netbox/dcim/tables/devicetypes.py:118 netbox/dcim/tables/modules.py:26 #: netbox/dcim/tables/racks.py:89 msgid "Instances" msgstr "forekomster" -#: netbox/dcim/tables/devicetypes.py:116 netbox/dcim/views.py:980 -#: netbox/dcim/views.py:1219 netbox/dcim/views.py:1911 +#: netbox/dcim/tables/devicetypes.py:121 netbox/dcim/views.py:1084 +#: netbox/dcim/views.py:1328 netbox/dcim/views.py:2075 #: netbox/netbox/navigation/menu.py:97 #: netbox/templates/dcim/device/base.html:25 #: netbox/templates/dcim/device_list.html:15 @@ -6926,8 +7470,8 @@ msgstr "forekomster" msgid "Console Ports" msgstr "Konsolporte" -#: netbox/dcim/tables/devicetypes.py:119 netbox/dcim/views.py:995 -#: netbox/dcim/views.py:1234 netbox/dcim/views.py:1927 +#: netbox/dcim/tables/devicetypes.py:124 netbox/dcim/views.py:1099 +#: netbox/dcim/views.py:1343 netbox/dcim/views.py:2091 #: netbox/netbox/navigation/menu.py:98 #: netbox/templates/dcim/device/base.html:28 #: netbox/templates/dcim/device_list.html:22 @@ -6937,8 +7481,8 @@ msgstr "Konsolporte" msgid "Console Server Ports" msgstr "Konsolserverporte" -#: netbox/dcim/tables/devicetypes.py:122 netbox/dcim/views.py:1010 -#: netbox/dcim/views.py:1249 netbox/dcim/views.py:1943 +#: netbox/dcim/tables/devicetypes.py:127 netbox/dcim/views.py:1114 +#: netbox/dcim/views.py:1358 netbox/dcim/views.py:2107 #: netbox/netbox/navigation/menu.py:99 #: netbox/templates/dcim/device/base.html:31 #: netbox/templates/dcim/device_list.html:29 @@ -6948,8 +7492,8 @@ msgstr "Konsolserverporte" msgid "Power Ports" msgstr "Strømstik" -#: netbox/dcim/tables/devicetypes.py:125 netbox/dcim/views.py:1025 -#: netbox/dcim/views.py:1264 netbox/dcim/views.py:1959 +#: netbox/dcim/tables/devicetypes.py:130 netbox/dcim/views.py:1129 +#: netbox/dcim/views.py:1373 netbox/dcim/views.py:2123 #: netbox/netbox/navigation/menu.py:100 #: netbox/templates/dcim/device/base.html:34 #: netbox/templates/dcim/device_list.html:36 @@ -6959,8 +7503,8 @@ msgstr "Strømstik" msgid "Power Outlets" msgstr "Strømudtag" -#: netbox/dcim/tables/devicetypes.py:131 netbox/dcim/views.py:1055 -#: netbox/dcim/views.py:1294 netbox/dcim/views.py:1997 +#: netbox/dcim/tables/devicetypes.py:136 netbox/dcim/views.py:1159 +#: netbox/dcim/views.py:1403 netbox/dcim/views.py:2161 #: netbox/netbox/navigation/menu.py:95 #: netbox/templates/dcim/device/base.html:40 #: netbox/templates/dcim/devicetype/base.html:37 @@ -6969,8 +7513,8 @@ msgstr "Strømudtag" msgid "Front Ports" msgstr "Frontporte" -#: netbox/dcim/tables/devicetypes.py:134 netbox/dcim/views.py:1070 -#: netbox/dcim/views.py:1309 netbox/dcim/views.py:2013 +#: netbox/dcim/tables/devicetypes.py:139 netbox/dcim/views.py:1174 +#: netbox/dcim/views.py:1418 netbox/dcim/views.py:2177 #: netbox/netbox/navigation/menu.py:96 #: netbox/templates/dcim/device/base.html:43 #: netbox/templates/dcim/device_list.html:50 @@ -6980,16 +7524,16 @@ msgstr "Frontporte" msgid "Rear Ports" msgstr "Bageste porte" -#: netbox/dcim/tables/devicetypes.py:137 netbox/dcim/views.py:1100 -#: netbox/dcim/views.py:2053 netbox/netbox/navigation/menu.py:102 +#: netbox/dcim/tables/devicetypes.py:142 netbox/dcim/views.py:1204 +#: netbox/dcim/views.py:2217 netbox/netbox/navigation/menu.py:102 #: netbox/templates/dcim/device/base.html:49 #: netbox/templates/dcim/device_list.html:57 #: netbox/templates/dcim/devicetype/base.html:46 msgid "Device Bays" msgstr "Enhedsbugter" -#: netbox/dcim/tables/devicetypes.py:140 netbox/dcim/views.py:1085 -#: netbox/dcim/views.py:1324 netbox/dcim/views.py:2033 +#: netbox/dcim/tables/devicetypes.py:145 netbox/dcim/views.py:1189 +#: netbox/dcim/views.py:1433 netbox/dcim/views.py:2197 #: netbox/netbox/navigation/menu.py:101 #: netbox/templates/dcim/device/base.html:46 #: netbox/templates/dcim/device_list.html:64 @@ -6999,7 +7543,7 @@ msgstr "Enhedsbugter" msgid "Module Bays" msgstr "Modulbugter" -#: netbox/dcim/tables/power.py:36 netbox/netbox/navigation/menu.py:297 +#: netbox/dcim/tables/power.py:36 netbox/netbox/navigation/menu.py:318 #: netbox/templates/dcim/powerpanel.html:51 msgid "Power Feeds" msgstr "Strømforsyninger" @@ -7012,109 +7556,104 @@ msgstr "Maksimal udnyttelse" msgid "Available Power (VA)" msgstr "Tilgængelig effekt (VA)" -#: netbox/dcim/tables/racks.py:30 netbox/dcim/tables/sites.py:143 +#: netbox/dcim/tables/racks.py:30 netbox/dcim/tables/sites.py:142 #: netbox/netbox/navigation/menu.py:43 netbox/netbox/navigation/menu.py:47 #: netbox/netbox/navigation/menu.py:49 msgid "Racks" msgstr "Racker" -#: netbox/dcim/tables/racks.py:63 netbox/dcim/tables/racks.py:142 +#: netbox/dcim/tables/racks.py:63 netbox/dcim/tables/racks.py:141 #: netbox/templates/dcim/device.html:318 #: netbox/templates/dcim/inc/panels/racktype_dimensions.html:14 msgid "Height" msgstr "Højde" -#: netbox/dcim/tables/racks.py:67 netbox/dcim/tables/racks.py:165 +#: netbox/dcim/tables/racks.py:67 netbox/dcim/tables/racks.py:164 #: netbox/templates/dcim/inc/panels/racktype_dimensions.html:18 msgid "Outer Width" msgstr "Udvendig bredde" -#: netbox/dcim/tables/racks.py:71 netbox/dcim/tables/racks.py:169 +#: netbox/dcim/tables/racks.py:71 netbox/dcim/tables/racks.py:168 #: netbox/templates/dcim/inc/panels/racktype_dimensions.html:28 msgid "Outer Depth" msgstr "Ydre dybde" -#: netbox/dcim/tables/racks.py:79 netbox/dcim/tables/racks.py:177 +#: netbox/dcim/tables/racks.py:79 netbox/dcim/tables/racks.py:176 msgid "Max Weight" msgstr "Maks. Vægt" -#: netbox/dcim/tables/racks.py:154 +#: netbox/dcim/tables/racks.py:153 msgid "Space" msgstr "Rummet" #: netbox/dcim/tables/sites.py:30 netbox/dcim/tables/sites.py:57 -#: netbox/extras/forms/filtersets.py:351 -#: netbox/extras/forms/model_forms.py:517 netbox/ipam/forms/bulk_edit.py:131 -#: netbox/ipam/forms/model_forms.py:153 netbox/ipam/tables/asn.py:66 +#: netbox/extras/forms/filtersets.py:358 +#: netbox/extras/forms/model_forms.py:531 netbox/ipam/forms/bulk_edit.py:134 +#: netbox/ipam/forms/model_forms.py:159 netbox/ipam/tables/asn.py:66 #: netbox/netbox/navigation/menu.py:15 netbox/netbox/navigation/menu.py:17 msgid "Sites" msgstr "Områder" -#: netbox/dcim/tests/test_api.py:47 +#: netbox/dcim/tests/test_api.py:50 msgid "Test case must set peer_termination_type" msgstr "Testcase skal indstille peer_termination_type" -#: netbox/dcim/views.py:138 +#: netbox/dcim/views.py:137 #, python-brace-format msgid "Disconnected {count} {type}" msgstr "Afbrudt {count} {type}" -#: netbox/dcim/views.py:738 netbox/netbox/navigation/menu.py:51 +#: netbox/dcim/views.py:825 netbox/netbox/navigation/menu.py:51 msgid "Reservations" msgstr "Reservationer" -#: netbox/dcim/views.py:757 netbox/templates/dcim/location.html:90 +#: netbox/dcim/views.py:844 netbox/templates/dcim/location.html:90 #: netbox/templates/dcim/site.html:140 msgid "Non-Racked Devices" msgstr "Enheder uden rack" -#: netbox/dcim/views.py:2086 netbox/extras/forms/model_forms.py:577 +#: netbox/dcim/views.py:2250 netbox/extras/forms/model_forms.py:591 #: netbox/templates/extras/configcontext.html:10 -#: netbox/virtualization/forms/model_forms.py:225 -#: netbox/virtualization/views.py:405 +#: netbox/virtualization/forms/model_forms.py:232 +#: netbox/virtualization/views.py:422 msgid "Config Context" msgstr "Konfigurationskontekst" -#: netbox/dcim/views.py:2096 netbox/virtualization/views.py:415 +#: netbox/dcim/views.py:2260 netbox/virtualization/views.py:432 msgid "Render Config" msgstr "Gengivelseskonfiguration" -#: netbox/dcim/views.py:2131 netbox/virtualization/views.py:450 -#, python-brace-format -msgid "An error occurred while rendering the template: {error}" -msgstr "Der opstod en fejl under gengivelse af skabelonen: {error}" - -#: netbox/dcim/views.py:2149 netbox/extras/tables/tables.py:550 -#: netbox/netbox/navigation/menu.py:247 netbox/netbox/navigation/menu.py:249 -#: netbox/virtualization/views.py:178 +#: netbox/dcim/views.py:2273 netbox/extras/tables/tables.py:550 +#: netbox/netbox/navigation/menu.py:255 netbox/netbox/navigation/menu.py:257 +#: netbox/virtualization/views.py:190 msgid "Virtual Machines" msgstr "Virtuelle maskiner" -#: netbox/dcim/views.py:2907 +#: netbox/dcim/views.py:3106 #, python-brace-format msgid "Installed device {device} in bay {device_bay}." msgstr "Installeret enhed {device} i bugten {device_bay}." -#: netbox/dcim/views.py:2948 +#: netbox/dcim/views.py:3147 #, python-brace-format msgid "Removed device {device} from bay {device_bay}." msgstr "Fjernet enhed {device} fra bugten {device_bay}." -#: netbox/dcim/views.py:3054 netbox/ipam/tables/ip.py:234 +#: netbox/dcim/views.py:3263 netbox/ipam/tables/ip.py:180 msgid "Children" msgstr "Børn" -#: netbox/dcim/views.py:3520 +#: netbox/dcim/views.py:3730 #, python-brace-format msgid "Added member {device}" msgstr "Tilføjet medlem {device}" -#: netbox/dcim/views.py:3567 +#: netbox/dcim/views.py:3779 #, python-brace-format msgid "Unable to remove master device {device} from the virtual chassis." msgstr "Kan ikke fjerne masterenheden {device} fra det virtuelle chassis." -#: netbox/dcim/views.py:3580 +#: netbox/dcim/views.py:3792 #, python-brace-format msgid "Removed {device} from virtual chassis {chassis}" msgstr "Fjernet {device} fra virtuelt chassis {chassis}" @@ -7213,7 +7752,7 @@ msgstr "Nej" #: netbox/extras/choices.py:108 netbox/templates/tenancy/contact.html:57 #: netbox/tenancy/forms/bulk_edit.py:118 -#: netbox/wireless/forms/model_forms.py:168 +#: netbox/wireless/forms/model_forms.py:171 msgid "Link" msgstr "Forbindelse" @@ -7233,15 +7772,15 @@ msgstr "Alfabetisk (A-Z)" msgid "Alphabetical (Z-A)" msgstr "Alfabetisk (Z-A)" -#: netbox/extras/choices.py:144 netbox/extras/choices.py:167 +#: netbox/extras/choices.py:144 netbox/extras/choices.py:165 msgid "Info" msgstr "Info" -#: netbox/extras/choices.py:145 netbox/extras/choices.py:168 +#: netbox/extras/choices.py:145 netbox/extras/choices.py:166 msgid "Success" msgstr "Succes" -#: netbox/extras/choices.py:146 netbox/extras/choices.py:169 +#: netbox/extras/choices.py:146 netbox/extras/choices.py:167 msgid "Warning" msgstr "Advarsel" @@ -7249,52 +7788,29 @@ msgstr "Advarsel" msgid "Danger" msgstr "Fare" -#: netbox/extras/choices.py:165 +#: netbox/extras/choices.py:164 msgid "Debug" msgstr "Fejlfinding" -#: netbox/extras/choices.py:166 netbox/netbox/choices.py:101 -msgid "Default" -msgstr "Standard" - -#: netbox/extras/choices.py:170 +#: netbox/extras/choices.py:168 msgid "Failure" msgstr "Fejl" -#: netbox/extras/choices.py:186 -msgid "Hourly" -msgstr "Hver time" - -#: netbox/extras/choices.py:187 -msgid "12 hours" -msgstr "12 timer" - -#: netbox/extras/choices.py:188 -msgid "Daily" -msgstr "Dagligt" - -#: netbox/extras/choices.py:189 -msgid "Weekly" -msgstr "Ugentlig" - -#: netbox/extras/choices.py:190 -msgid "30 days" -msgstr "30 dage" - -#: netbox/extras/choices.py:226 +#: netbox/extras/choices.py:213 #: netbox/templates/dcim/virtualchassis_edit.html:107 #: netbox/templates/generic/bulk_add_component.html:68 #: netbox/templates/generic/object_edit.html:47 #: netbox/templates/generic/object_edit.html:80 +#: netbox/templates/htmx/quick_add.html:24 #: netbox/templates/ipam/inc/ipaddress_edit_header.html:7 msgid "Create" msgstr "Opret" -#: netbox/extras/choices.py:227 +#: netbox/extras/choices.py:214 msgid "Update" msgstr "Opdatere" -#: netbox/extras/choices.py:228 +#: netbox/extras/choices.py:215 #: netbox/templates/circuits/inc/circuit_termination.html:23 #: netbox/templates/dcim/inc/panels/inventory_items.html:37 #: netbox/templates/dcim/powerpanel.html:66 @@ -7309,82 +7825,82 @@ msgstr "Opdatere" msgid "Delete" msgstr "Slet" -#: netbox/extras/choices.py:252 netbox/netbox/choices.py:57 -#: netbox/netbox/choices.py:102 +#: netbox/extras/choices.py:239 netbox/netbox/choices.py:59 +#: netbox/netbox/choices.py:104 msgid "Blue" msgstr "Blå" -#: netbox/extras/choices.py:253 netbox/netbox/choices.py:56 -#: netbox/netbox/choices.py:103 +#: netbox/extras/choices.py:240 netbox/netbox/choices.py:58 +#: netbox/netbox/choices.py:105 msgid "Indigo" msgstr "indigo" -#: netbox/extras/choices.py:254 netbox/netbox/choices.py:54 -#: netbox/netbox/choices.py:104 +#: netbox/extras/choices.py:241 netbox/netbox/choices.py:56 +#: netbox/netbox/choices.py:106 msgid "Purple" msgstr "Lilla" -#: netbox/extras/choices.py:255 netbox/netbox/choices.py:51 -#: netbox/netbox/choices.py:105 +#: netbox/extras/choices.py:242 netbox/netbox/choices.py:53 +#: netbox/netbox/choices.py:107 msgid "Pink" msgstr "Lyserød" -#: netbox/extras/choices.py:256 netbox/netbox/choices.py:50 -#: netbox/netbox/choices.py:106 +#: netbox/extras/choices.py:243 netbox/netbox/choices.py:52 +#: netbox/netbox/choices.py:108 msgid "Red" msgstr "Rød" -#: netbox/extras/choices.py:257 netbox/netbox/choices.py:68 -#: netbox/netbox/choices.py:107 +#: netbox/extras/choices.py:244 netbox/netbox/choices.py:70 +#: netbox/netbox/choices.py:109 msgid "Orange" msgstr "orange" -#: netbox/extras/choices.py:258 netbox/netbox/choices.py:66 -#: netbox/netbox/choices.py:108 +#: netbox/extras/choices.py:245 netbox/netbox/choices.py:68 +#: netbox/netbox/choices.py:110 msgid "Yellow" msgstr "Gul" -#: netbox/extras/choices.py:259 netbox/netbox/choices.py:63 -#: netbox/netbox/choices.py:109 +#: netbox/extras/choices.py:246 netbox/netbox/choices.py:65 +#: netbox/netbox/choices.py:111 msgid "Green" msgstr "Grøn" -#: netbox/extras/choices.py:260 netbox/netbox/choices.py:60 -#: netbox/netbox/choices.py:110 +#: netbox/extras/choices.py:247 netbox/netbox/choices.py:62 +#: netbox/netbox/choices.py:112 msgid "Teal" msgstr "krikand" -#: netbox/extras/choices.py:261 netbox/netbox/choices.py:59 -#: netbox/netbox/choices.py:111 +#: netbox/extras/choices.py:248 netbox/netbox/choices.py:61 +#: netbox/netbox/choices.py:113 msgid "Cyan" msgstr "Cyan" -#: netbox/extras/choices.py:262 netbox/netbox/choices.py:112 +#: netbox/extras/choices.py:249 netbox/netbox/choices.py:114 msgid "Gray" msgstr "Grå" -#: netbox/extras/choices.py:263 netbox/netbox/choices.py:74 -#: netbox/netbox/choices.py:113 +#: netbox/extras/choices.py:250 netbox/netbox/choices.py:76 +#: netbox/netbox/choices.py:115 msgid "Black" msgstr "Sort" -#: netbox/extras/choices.py:264 netbox/netbox/choices.py:75 -#: netbox/netbox/choices.py:114 +#: netbox/extras/choices.py:251 netbox/netbox/choices.py:77 +#: netbox/netbox/choices.py:116 msgid "White" msgstr "Hvid" -#: netbox/extras/choices.py:279 netbox/extras/forms/model_forms.py:353 -#: netbox/extras/forms/model_forms.py:430 +#: netbox/extras/choices.py:266 netbox/extras/forms/model_forms.py:367 +#: netbox/extras/forms/model_forms.py:444 #: netbox/templates/extras/webhook.html:10 msgid "Webhook" msgstr "Webhook" -#: netbox/extras/choices.py:280 netbox/extras/forms/model_forms.py:418 +#: netbox/extras/choices.py:267 netbox/extras/forms/model_forms.py:432 #: netbox/templates/extras/script/base.html:29 msgid "Script" msgstr "Manuskript" -#: netbox/extras/choices.py:281 +#: netbox/extras/choices.py:268 msgid "Notification" msgstr "Meddelelse" @@ -7479,30 +7995,34 @@ msgstr "Ugyldigt format. URL-parametre skal sendes som en ordbog." msgid "RSS Feed" msgstr "RSS-feed" -#: netbox/extras/dashboard/widgets.py:279 +#: netbox/extras/dashboard/widgets.py:280 msgid "Embed an RSS feed from an external website." msgstr "Indlejr et RSS-feed fra en ekstern hjemmeside." -#: netbox/extras/dashboard/widgets.py:286 +#: netbox/extras/dashboard/widgets.py:287 msgid "Feed URL" msgstr "Foderwebadresse" -#: netbox/extras/dashboard/widgets.py:291 +#: netbox/extras/dashboard/widgets.py:290 +msgid "Requires external connection" +msgstr "Kræver ekstern forbindelse" + +#: netbox/extras/dashboard/widgets.py:296 msgid "The maximum number of objects to display" msgstr "Det maksimale antal objekter, der skal vises" -#: netbox/extras/dashboard/widgets.py:296 +#: netbox/extras/dashboard/widgets.py:301 msgid "How long to stored the cached content (in seconds)" msgstr "Hvor længe det cachelagrede indhold skal gemmes (i sekunder)" -#: netbox/extras/dashboard/widgets.py:348 +#: netbox/extras/dashboard/widgets.py:358 #: netbox/templates/account/base.html:10 #: netbox/templates/account/bookmarks.html:7 -#: netbox/templates/inc/user_menu.html:48 +#: netbox/templates/inc/user_menu.html:43 msgid "Bookmarks" msgstr "Bogmærker" -#: netbox/extras/dashboard/widgets.py:352 +#: netbox/extras/dashboard/widgets.py:362 msgid "Show your personal bookmarks" msgstr "Vis dine personlige bogmærker" @@ -7531,17 +8051,17 @@ msgid "Group (name)" msgstr "Gruppe (navn)" #: netbox/extras/filtersets.py:574 -#: netbox/virtualization/forms/filtersets.py:118 +#: netbox/virtualization/forms/filtersets.py:123 msgid "Cluster type" msgstr "Klyngetype" -#: netbox/extras/filtersets.py:580 netbox/virtualization/filtersets.py:95 -#: netbox/virtualization/filtersets.py:147 +#: netbox/extras/filtersets.py:580 netbox/virtualization/filtersets.py:61 +#: netbox/virtualization/filtersets.py:113 msgid "Cluster type (slug)" msgstr "Clustertype (slug)" #: netbox/extras/filtersets.py:601 netbox/tenancy/forms/forms.py:16 -#: netbox/tenancy/forms/forms.py:39 +#: netbox/tenancy/forms/forms.py:40 msgid "Tenant group" msgstr "Lejergruppe" @@ -7550,7 +8070,7 @@ msgstr "Lejergruppe" msgid "Tenant group (slug)" msgstr "Lejergruppe (slug)" -#: netbox/extras/filtersets.py:623 netbox/extras/forms/model_forms.py:495 +#: netbox/extras/filtersets.py:623 netbox/extras/forms/model_forms.py:509 #: netbox/templates/extras/tag.html:11 msgid "Tag" msgstr "Mærke" @@ -7559,60 +8079,60 @@ msgstr "Mærke" msgid "Tag (slug)" msgstr "Tag (slug)" -#: netbox/extras/filtersets.py:689 netbox/extras/forms/filtersets.py:429 +#: netbox/extras/filtersets.py:689 netbox/extras/forms/filtersets.py:437 msgid "Has local config context data" msgstr "Har lokale konfigurationskontekstdata" -#: netbox/extras/forms/bulk_edit.py:35 netbox/extras/forms/filtersets.py:60 +#: netbox/extras/forms/bulk_edit.py:35 netbox/extras/forms/filtersets.py:61 msgid "Group name" msgstr "Gruppenavn" -#: netbox/extras/forms/bulk_edit.py:43 netbox/extras/forms/filtersets.py:68 +#: netbox/extras/forms/bulk_edit.py:43 netbox/extras/forms/filtersets.py:69 #: netbox/extras/tables/tables.py:65 #: netbox/templates/extras/customfield.html:38 #: netbox/templates/generic/bulk_import.html:118 msgid "Required" msgstr "Påkrævet" -#: netbox/extras/forms/bulk_edit.py:48 netbox/extras/forms/filtersets.py:75 +#: netbox/extras/forms/bulk_edit.py:48 netbox/extras/forms/filtersets.py:76 msgid "Must be unique" msgstr "Skal være unik" #: netbox/extras/forms/bulk_edit.py:61 netbox/extras/forms/bulk_import.py:60 -#: netbox/extras/forms/filtersets.py:89 +#: netbox/extras/forms/filtersets.py:90 #: netbox/extras/models/customfields.py:209 msgid "UI visible" msgstr "UI synlig" #: netbox/extras/forms/bulk_edit.py:66 netbox/extras/forms/bulk_import.py:66 -#: netbox/extras/forms/filtersets.py:94 +#: netbox/extras/forms/filtersets.py:95 #: netbox/extras/models/customfields.py:216 msgid "UI editable" msgstr "Brugergrænseflade redigerbar" -#: netbox/extras/forms/bulk_edit.py:71 netbox/extras/forms/filtersets.py:97 +#: netbox/extras/forms/bulk_edit.py:71 netbox/extras/forms/filtersets.py:98 msgid "Is cloneable" msgstr "Kan klones" -#: netbox/extras/forms/bulk_edit.py:76 netbox/extras/forms/filtersets.py:104 +#: netbox/extras/forms/bulk_edit.py:76 netbox/extras/forms/filtersets.py:105 msgid "Minimum value" msgstr "Minimumsværdi" -#: netbox/extras/forms/bulk_edit.py:80 netbox/extras/forms/filtersets.py:108 +#: netbox/extras/forms/bulk_edit.py:80 netbox/extras/forms/filtersets.py:109 msgid "Maximum value" msgstr "Maksimal værdi" -#: netbox/extras/forms/bulk_edit.py:84 netbox/extras/forms/filtersets.py:112 +#: netbox/extras/forms/bulk_edit.py:84 netbox/extras/forms/filtersets.py:113 msgid "Validation regex" msgstr "Validering regex" -#: netbox/extras/forms/bulk_edit.py:91 netbox/extras/forms/filtersets.py:46 +#: netbox/extras/forms/bulk_edit.py:91 netbox/extras/forms/filtersets.py:47 #: netbox/extras/forms/model_forms.py:76 #: netbox/templates/extras/customfield.html:70 msgid "Behavior" msgstr "Adfærd" -#: netbox/extras/forms/bulk_edit.py:128 netbox/extras/forms/filtersets.py:149 +#: netbox/extras/forms/bulk_edit.py:128 netbox/extras/forms/filtersets.py:152 msgid "New window" msgstr "Nyt vindue" @@ -7620,31 +8140,31 @@ msgstr "Nyt vindue" msgid "Button class" msgstr "Knapklasse" -#: netbox/extras/forms/bulk_edit.py:154 netbox/extras/forms/filtersets.py:187 +#: netbox/extras/forms/bulk_edit.py:154 netbox/extras/forms/filtersets.py:191 #: netbox/extras/models/models.py:409 msgid "MIME type" msgstr "MIME-type" -#: netbox/extras/forms/bulk_edit.py:159 netbox/extras/forms/filtersets.py:190 +#: netbox/extras/forms/bulk_edit.py:159 netbox/extras/forms/filtersets.py:194 msgid "File extension" msgstr "Filudvidelse" -#: netbox/extras/forms/bulk_edit.py:164 netbox/extras/forms/filtersets.py:194 +#: netbox/extras/forms/bulk_edit.py:164 netbox/extras/forms/filtersets.py:198 msgid "As attachment" msgstr "Som vedhæftet fil" -#: netbox/extras/forms/bulk_edit.py:192 netbox/extras/forms/filtersets.py:236 +#: netbox/extras/forms/bulk_edit.py:192 netbox/extras/forms/filtersets.py:242 #: netbox/extras/tables/tables.py:256 #: netbox/templates/extras/savedfilter.html:29 msgid "Shared" msgstr "Delt" -#: netbox/extras/forms/bulk_edit.py:215 netbox/extras/forms/filtersets.py:265 +#: netbox/extras/forms/bulk_edit.py:215 netbox/extras/forms/filtersets.py:271 #: netbox/extras/models/models.py:174 msgid "HTTP method" msgstr "HTTP-metode" -#: netbox/extras/forms/bulk_edit.py:219 netbox/extras/forms/filtersets.py:259 +#: netbox/extras/forms/bulk_edit.py:219 netbox/extras/forms/filtersets.py:265 #: netbox/templates/extras/webhook.html:30 msgid "Payload URL" msgstr "Nyttelast-URL" @@ -7663,7 +8183,7 @@ msgid "CA file path" msgstr "CA-filsti" #: netbox/extras/forms/bulk_edit.py:253 netbox/extras/forms/bulk_import.py:192 -#: netbox/extras/forms/model_forms.py:377 +#: netbox/extras/forms/model_forms.py:391 msgid "Event types" msgstr "Begivenhedstyper" @@ -7676,13 +8196,13 @@ msgstr "Er aktiv" #: netbox/extras/forms/bulk_import.py:139 #: netbox/extras/forms/bulk_import.py:162 #: netbox/extras/forms/bulk_import.py:186 -#: netbox/extras/forms/filtersets.py:137 netbox/extras/forms/filtersets.py:224 +#: netbox/extras/forms/filtersets.py:140 netbox/extras/forms/filtersets.py:230 #: netbox/extras/forms/model_forms.py:47 -#: netbox/extras/forms/model_forms.py:205 -#: netbox/extras/forms/model_forms.py:237 -#: netbox/extras/forms/model_forms.py:278 -#: netbox/extras/forms/model_forms.py:372 -#: netbox/extras/forms/model_forms.py:489 +#: netbox/extras/forms/model_forms.py:219 +#: netbox/extras/forms/model_forms.py:251 +#: netbox/extras/forms/model_forms.py:292 +#: netbox/extras/forms/model_forms.py:386 +#: netbox/extras/forms/model_forms.py:503 #: netbox/users/forms/model_forms.py:276 msgid "Object types" msgstr "Objekttyper" @@ -7700,10 +8220,10 @@ msgstr "En eller flere tildelte objekttyper" msgid "Field data type (e.g. text, integer, etc.)" msgstr "Feltdatatype (f.eks. tekst, heltal osv.)" -#: netbox/extras/forms/bulk_import.py:47 netbox/extras/forms/filtersets.py:208 -#: netbox/extras/forms/filtersets.py:281 -#: netbox/extras/forms/model_forms.py:304 -#: netbox/extras/forms/model_forms.py:341 +#: netbox/extras/forms/bulk_import.py:47 netbox/extras/forms/filtersets.py:213 +#: netbox/extras/forms/filtersets.py:287 +#: netbox/extras/forms/model_forms.py:318 +#: netbox/extras/forms/model_forms.py:355 #: netbox/tenancy/forms/filtersets.py:92 msgid "Object type" msgstr "Objekttype" @@ -7712,7 +8232,7 @@ msgstr "Objekttype" msgid "Object type (for object or multi-object fields)" msgstr "Objekttype (for objekt- eller flerobjektfelter)" -#: netbox/extras/forms/bulk_import.py:53 netbox/extras/forms/filtersets.py:84 +#: netbox/extras/forms/bulk_import.py:53 netbox/extras/forms/filtersets.py:85 msgid "Choice set" msgstr "Valgsæt" @@ -7781,7 +8301,7 @@ msgid "The classification of entry" msgstr "Klassificering af indrejse" #: netbox/extras/forms/bulk_import.py:261 -#: netbox/extras/forms/model_forms.py:320 netbox/netbox/navigation/menu.py:390 +#: netbox/extras/forms/model_forms.py:334 netbox/netbox/navigation/menu.py:411 #: netbox/templates/extras/notificationgroup.html:41 #: netbox/templates/users/group.html:29 netbox/users/forms/model_forms.py:236 #: netbox/users/forms/model_forms.py:248 netbox/users/forms/model_forms.py:300 @@ -7794,7 +8314,8 @@ msgid "User names separated by commas, encased with double quotes" msgstr "Brugernavne adskilt af kommaer, indkapslet med dobbelte anførselstegn" #: netbox/extras/forms/bulk_import.py:268 -#: netbox/extras/forms/model_forms.py:315 netbox/netbox/navigation/menu.py:410 +#: netbox/extras/forms/model_forms.py:329 netbox/netbox/navigation/menu.py:294 +#: netbox/netbox/navigation/menu.py:431 #: netbox/templates/extras/notificationgroup.html:31 #: netbox/users/forms/model_forms.py:181 netbox/users/forms/model_forms.py:193 #: netbox/users/forms/model_forms.py:305 netbox/users/tables.py:35 @@ -7806,104 +8327,104 @@ msgstr "Grupper" msgid "Group names separated by commas, encased with double quotes" msgstr "Gruppenavne adskilt af kommaer, indkapslet med dobbelte anførselstegn" -#: netbox/extras/forms/filtersets.py:52 netbox/extras/forms/model_forms.py:56 +#: netbox/extras/forms/filtersets.py:53 netbox/extras/forms/model_forms.py:56 msgid "Related object type" msgstr "Relateret objekttype" -#: netbox/extras/forms/filtersets.py:57 +#: netbox/extras/forms/filtersets.py:58 msgid "Field type" msgstr "Felttype" -#: netbox/extras/forms/filtersets.py:120 +#: netbox/extras/forms/filtersets.py:122 #: netbox/extras/forms/model_forms.py:157 netbox/extras/tables/tables.py:91 #: netbox/templates/generic/bulk_import.html:154 msgid "Choices" msgstr "Valg" -#: netbox/extras/forms/filtersets.py:164 netbox/extras/forms/filtersets.py:319 -#: netbox/extras/forms/filtersets.py:408 -#: netbox/extras/forms/model_forms.py:572 netbox/templates/core/job.html:96 +#: netbox/extras/forms/filtersets.py:168 netbox/extras/forms/filtersets.py:326 +#: netbox/extras/forms/filtersets.py:416 +#: netbox/extras/forms/model_forms.py:586 netbox/templates/core/job.html:96 #: netbox/templates/extras/eventrule.html:84 msgid "Data" msgstr "Data" -#: netbox/extras/forms/filtersets.py:175 netbox/extras/forms/filtersets.py:333 -#: netbox/extras/forms/filtersets.py:418 netbox/netbox/choices.py:130 +#: netbox/extras/forms/filtersets.py:179 netbox/extras/forms/filtersets.py:340 +#: netbox/extras/forms/filtersets.py:426 netbox/netbox/choices.py:132 #: netbox/utilities/forms/bulk_import.py:26 msgid "Data file" msgstr "Datafiler" -#: netbox/extras/forms/filtersets.py:183 +#: netbox/extras/forms/filtersets.py:187 msgid "Content types" msgstr "Indholdstyper" -#: netbox/extras/forms/filtersets.py:255 netbox/extras/models/models.py:179 +#: netbox/extras/forms/filtersets.py:261 netbox/extras/models/models.py:179 msgid "HTTP content type" msgstr "HTTP-indholdstype" -#: netbox/extras/forms/filtersets.py:286 +#: netbox/extras/forms/filtersets.py:292 msgid "Event type" msgstr "Begivenhedstype" -#: netbox/extras/forms/filtersets.py:291 +#: netbox/extras/forms/filtersets.py:297 msgid "Action type" msgstr "Handlingstype" -#: netbox/extras/forms/filtersets.py:307 +#: netbox/extras/forms/filtersets.py:313 msgid "Tagged object type" msgstr "Tagget objekttype" -#: netbox/extras/forms/filtersets.py:312 +#: netbox/extras/forms/filtersets.py:318 msgid "Allowed object type" msgstr "Tilladt objekttype" -#: netbox/extras/forms/filtersets.py:341 -#: netbox/extras/forms/model_forms.py:507 netbox/netbox/navigation/menu.py:18 +#: netbox/extras/forms/filtersets.py:348 +#: netbox/extras/forms/model_forms.py:521 netbox/netbox/navigation/menu.py:18 msgid "Regions" msgstr "Regioner" -#: netbox/extras/forms/filtersets.py:346 -#: netbox/extras/forms/model_forms.py:512 +#: netbox/extras/forms/filtersets.py:353 +#: netbox/extras/forms/model_forms.py:526 msgid "Site groups" msgstr "Områdegrupper" -#: netbox/extras/forms/filtersets.py:356 -#: netbox/extras/forms/model_forms.py:522 netbox/netbox/navigation/menu.py:20 +#: netbox/extras/forms/filtersets.py:363 +#: netbox/extras/forms/model_forms.py:536 netbox/netbox/navigation/menu.py:20 #: netbox/templates/dcim/site.html:127 msgid "Locations" msgstr "Steder" -#: netbox/extras/forms/filtersets.py:361 -#: netbox/extras/forms/model_forms.py:527 +#: netbox/extras/forms/filtersets.py:368 +#: netbox/extras/forms/model_forms.py:541 msgid "Device types" msgstr "Enhedstyper" -#: netbox/extras/forms/filtersets.py:366 -#: netbox/extras/forms/model_forms.py:532 +#: netbox/extras/forms/filtersets.py:373 +#: netbox/extras/forms/model_forms.py:546 msgid "Roles" msgstr "Roller" -#: netbox/extras/forms/filtersets.py:376 -#: netbox/extras/forms/model_forms.py:542 +#: netbox/extras/forms/filtersets.py:383 +#: netbox/extras/forms/model_forms.py:556 msgid "Cluster types" msgstr "Klyngetyper" -#: netbox/extras/forms/filtersets.py:381 -#: netbox/extras/forms/model_forms.py:547 +#: netbox/extras/forms/filtersets.py:388 +#: netbox/extras/forms/model_forms.py:561 msgid "Cluster groups" msgstr "Klyngegrupper" -#: netbox/extras/forms/filtersets.py:386 -#: netbox/extras/forms/model_forms.py:552 netbox/netbox/navigation/menu.py:255 -#: netbox/netbox/navigation/menu.py:257 +#: netbox/extras/forms/filtersets.py:393 +#: netbox/extras/forms/model_forms.py:566 netbox/netbox/navigation/menu.py:263 +#: netbox/netbox/navigation/menu.py:265 #: netbox/templates/virtualization/clustertype.html:30 #: netbox/virtualization/tables/clusters.py:23 #: netbox/virtualization/tables/clusters.py:45 msgid "Clusters" msgstr "Klynger" -#: netbox/extras/forms/filtersets.py:391 -#: netbox/extras/forms/model_forms.py:557 +#: netbox/extras/forms/filtersets.py:398 +#: netbox/extras/forms/model_forms.py:571 msgid "Tenant groups" msgstr "Lejergrupper" @@ -7952,7 +8473,7 @@ msgstr "" msgid "Related Object" msgstr "Relateret objekt" -#: netbox/extras/forms/model_forms.py:169 +#: netbox/extras/forms/model_forms.py:170 msgid "" "Enter one choice per line. An optional label may be specified for each " "choice by appending it with a colon. Example:" @@ -7960,16 +8481,16 @@ msgstr "" "Indtast et valg pr. linje. Der kan angives en valgfri etiket for hvert valg " "ved at tilføje det med et kolon. Eksempel:" -#: netbox/extras/forms/model_forms.py:212 +#: netbox/extras/forms/model_forms.py:226 #: netbox/templates/extras/customlink.html:10 msgid "Custom Link" msgstr "Brugerdefineret link" -#: netbox/extras/forms/model_forms.py:214 +#: netbox/extras/forms/model_forms.py:228 msgid "Templates" msgstr "Skabeloner" -#: netbox/extras/forms/model_forms.py:226 +#: netbox/extras/forms/model_forms.py:240 #, python-brace-format msgid "" "Jinja2 template code for the link text. Reference the object as {example}. " @@ -7978,66 +8499,66 @@ msgstr "" "Jinja2 skabelonkode til linkteksten. Henvis objektet som {example}. Links, " "der gengives som tom tekst, vises ikke." -#: netbox/extras/forms/model_forms.py:230 +#: netbox/extras/forms/model_forms.py:244 #, python-brace-format msgid "" "Jinja2 template code for the link URL. Reference the object as {example}." msgstr "Jinja2 skabelonkode til linket URL. Henvis objektet som {example}." -#: netbox/extras/forms/model_forms.py:241 -#: netbox/extras/forms/model_forms.py:624 +#: netbox/extras/forms/model_forms.py:255 +#: netbox/extras/forms/model_forms.py:638 msgid "Template code" msgstr "Skabelonkode" -#: netbox/extras/forms/model_forms.py:247 +#: netbox/extras/forms/model_forms.py:261 #: netbox/templates/extras/exporttemplate.html:12 msgid "Export Template" msgstr "Eksport skabelon" -#: netbox/extras/forms/model_forms.py:249 +#: netbox/extras/forms/model_forms.py:263 msgid "Rendering" msgstr "Gengivelse" -#: netbox/extras/forms/model_forms.py:263 -#: netbox/extras/forms/model_forms.py:649 +#: netbox/extras/forms/model_forms.py:277 +#: netbox/extras/forms/model_forms.py:663 msgid "Template content is populated from the remote source selected below." msgstr "" "Skabelonindhold udfyldes fra den fjerntliggende kilde, der er valgt " "nedenfor." -#: netbox/extras/forms/model_forms.py:270 -#: netbox/extras/forms/model_forms.py:656 +#: netbox/extras/forms/model_forms.py:284 +#: netbox/extras/forms/model_forms.py:670 msgid "Must specify either local content or a data file" msgstr "Skal angive enten lokalt indhold eller en datafil" -#: netbox/extras/forms/model_forms.py:284 netbox/netbox/forms/mixins.py:70 +#: netbox/extras/forms/model_forms.py:298 netbox/netbox/forms/mixins.py:70 #: netbox/templates/extras/savedfilter.html:10 msgid "Saved Filter" msgstr "Gemt filter" -#: netbox/extras/forms/model_forms.py:334 +#: netbox/extras/forms/model_forms.py:348 msgid "A notification group specify at least one user or group." msgstr "En meddelelsesgruppe angiver mindst én bruger eller gruppe." -#: netbox/extras/forms/model_forms.py:356 +#: netbox/extras/forms/model_forms.py:370 #: netbox/templates/extras/webhook.html:23 msgid "HTTP Request" msgstr "HTTP-anmodning" -#: netbox/extras/forms/model_forms.py:358 +#: netbox/extras/forms/model_forms.py:372 #: netbox/templates/extras/webhook.html:44 msgid "SSL" msgstr "SSL" -#: netbox/extras/forms/model_forms.py:380 +#: netbox/extras/forms/model_forms.py:394 msgid "Action choice" msgstr "Valg af handling" -#: netbox/extras/forms/model_forms.py:385 +#: netbox/extras/forms/model_forms.py:399 msgid "Enter conditions in JSON format." msgstr "Indtast betingelser i JSON formatere." -#: netbox/extras/forms/model_forms.py:389 +#: netbox/extras/forms/model_forms.py:403 msgid "" "Enter parameters to pass to the action in JSON format." @@ -8045,33 +8566,33 @@ msgstr "" "Indtast parametre, der skal overføres til handlingen i JSON formatere." -#: netbox/extras/forms/model_forms.py:394 +#: netbox/extras/forms/model_forms.py:408 #: netbox/templates/extras/eventrule.html:10 msgid "Event Rule" msgstr "Begivenhedsregel" -#: netbox/extras/forms/model_forms.py:395 +#: netbox/extras/forms/model_forms.py:409 msgid "Triggers" msgstr "Udløsere" -#: netbox/extras/forms/model_forms.py:442 +#: netbox/extras/forms/model_forms.py:456 msgid "Notification group" msgstr "Meddelelsesgruppe" -#: netbox/extras/forms/model_forms.py:562 netbox/netbox/navigation/menu.py:26 +#: netbox/extras/forms/model_forms.py:576 netbox/netbox/navigation/menu.py:26 #: netbox/tenancy/tables/tenants.py:22 msgid "Tenants" msgstr "Lejere" -#: netbox/extras/forms/model_forms.py:606 +#: netbox/extras/forms/model_forms.py:620 msgid "Data is populated from the remote source selected below." msgstr "Data udfyldes fra den fjerntliggende kilde, der er valgt nedenfor." -#: netbox/extras/forms/model_forms.py:612 +#: netbox/extras/forms/model_forms.py:626 msgid "Must specify either local data or a data file" msgstr "Skal angive enten lokale data eller en datafil" -#: netbox/extras/forms/model_forms.py:631 +#: netbox/extras/forms/model_forms.py:645 #: netbox/templates/core/datafile.html:55 msgid "Content" msgstr "Indhold" @@ -8133,10 +8654,16 @@ msgstr "Der opstod en undtagelse: " msgid "Database changes have been reverted due to error." msgstr "Databaseændringer er blevet tilbageført på grund af fejl." -#: netbox/extras/management/commands/reindex.py:66 +#: netbox/extras/management/commands/reindex.py:67 msgid "No indexers found!" msgstr "Ingen indekser fundet!" +#: netbox/extras/models/configs.py:41 netbox/extras/models/models.py:313 +#: netbox/extras/models/models.py:522 netbox/extras/models/search.py:48 +#: netbox/ipam/models/ip.py:188 netbox/netbox/models/mixins.py:15 +msgid "weight" +msgstr "vægt" + #: netbox/extras/models/configs.py:130 msgid "config context" msgstr "konfigurationskontekst" @@ -8496,27 +9023,27 @@ msgstr "Fundet ugyldigt objekt-id: {id}" msgid "Required field cannot be empty." msgstr "Obligatorisk felt kan ikke være tomt." -#: netbox/extras/models/customfields.py:763 +#: netbox/extras/models/customfields.py:764 msgid "Base set of predefined choices (optional)" msgstr "Basisæt af foruddefinerede valg (valgfrit)" -#: netbox/extras/models/customfields.py:775 +#: netbox/extras/models/customfields.py:776 msgid "Choices are automatically ordered alphabetically" msgstr "Valg sorteres automatisk alfabetisk" -#: netbox/extras/models/customfields.py:782 +#: netbox/extras/models/customfields.py:783 msgid "custom field choice set" msgstr "brugerdefineret felt valgsæt" -#: netbox/extras/models/customfields.py:783 +#: netbox/extras/models/customfields.py:784 msgid "custom field choice sets" msgstr "brugerdefinerede feltvalgssæt" -#: netbox/extras/models/customfields.py:825 +#: netbox/extras/models/customfields.py:826 msgid "Must define base or extra choices." msgstr "Skal definere base eller ekstra valg." -#: netbox/extras/models/customfields.py:849 +#: netbox/extras/models/customfields.py:850 #, python-brace-format msgid "" "Cannot remove choice {choice} as there are {model} objects which reference " @@ -8813,20 +9340,20 @@ msgstr "journalindtastning" msgid "journal entries" msgstr "journalposter" -#: netbox/extras/models/models.py:718 +#: netbox/extras/models/models.py:721 #, python-brace-format msgid "Journaling is not supported for this object type ({type})." msgstr "Journalføring understøttes ikke for denne objekttype ({type})." -#: netbox/extras/models/models.py:760 +#: netbox/extras/models/models.py:763 msgid "bookmark" msgstr "bogmærke" -#: netbox/extras/models/models.py:761 +#: netbox/extras/models/models.py:764 msgid "bookmarks" msgstr "bogmærker" -#: netbox/extras/models/models.py:774 +#: netbox/extras/models/models.py:777 #, python-brace-format msgid "Bookmarks cannot be assigned to this object type ({type})." msgstr "Bogmærker kan ikke tildeles denne objekttype ({type})." @@ -8918,19 +9445,19 @@ msgstr "cachelagret værdi" msgid "cached values" msgstr "cachelagrede værdier" -#: netbox/extras/models/staging.py:44 +#: netbox/extras/models/staging.py:45 msgid "branch" msgstr "gren" -#: netbox/extras/models/staging.py:45 +#: netbox/extras/models/staging.py:46 msgid "branches" msgstr "grene" -#: netbox/extras/models/staging.py:97 +#: netbox/extras/models/staging.py:105 msgid "staged change" msgstr "iscenesat ændring" -#: netbox/extras/models/staging.py:98 +#: netbox/extras/models/staging.py:106 msgid "staged changes" msgstr "iscenesatte ændringer" @@ -8954,11 +9481,11 @@ msgstr "tagget vare" msgid "tagged items" msgstr "mærkede varer" -#: netbox/extras/scripts.py:429 +#: netbox/extras/scripts.py:432 msgid "Script Data" msgstr "Scriptdata" -#: netbox/extras/scripts.py:433 +#: netbox/extras/scripts.py:436 msgid "Script Execution Parameters" msgstr "Parametre for udførelse af script" @@ -9035,12 +9562,11 @@ msgstr "Som vedhæftet fil" #: netbox/extras/tables/tables.py:195 netbox/extras/tables/tables.py:487 #: netbox/extras/tables/tables.py:522 netbox/templates/core/datafile.html:24 -#: netbox/templates/dcim/device/render_config.html:22 #: netbox/templates/extras/configcontext.html:39 #: netbox/templates/extras/configtemplate.html:31 #: netbox/templates/extras/exporttemplate.html:45 +#: netbox/templates/extras/object_render_config.html:23 #: netbox/templates/generic/bulk_import.html:35 -#: netbox/templates/virtualization/virtualmachine/render_config.html:22 msgid "Data File" msgstr "Datafiler" @@ -9132,27 +9658,32 @@ msgstr "Ugyldig attribut“{name}„på forespørgsel" msgid "Invalid attribute \"{name}\" for {model}" msgstr "Ugyldig attribut“{name}„til {model}" -#: netbox/extras/views.py:960 +#: netbox/extras/views.py:933 +#, python-brace-format +msgid "An error occurred while rendering the template: {error}" +msgstr "Der opstod en fejl under gengivelse af skabelonen: {error}" + +#: netbox/extras/views.py:1085 msgid "Your dashboard has been reset." msgstr "Dit dashboard er blevet nulstillet." -#: netbox/extras/views.py:1006 +#: netbox/extras/views.py:1131 msgid "Added widget: " msgstr "Tilføjet widget: " -#: netbox/extras/views.py:1047 +#: netbox/extras/views.py:1172 msgid "Updated widget: " msgstr "Opdateret widget: " -#: netbox/extras/views.py:1083 +#: netbox/extras/views.py:1208 msgid "Deleted widget: " msgstr "Slettet widget: " -#: netbox/extras/views.py:1085 +#: netbox/extras/views.py:1210 msgid "Error deleting widget: " msgstr "Fejl ved sletning af widget: " -#: netbox/extras/views.py:1175 +#: netbox/extras/views.py:1308 msgid "Unable to run script: RQ worker process not running." msgstr "Kan ikke køre script: RQ-arbejderprocessen kører ikke." @@ -9174,7 +9705,7 @@ msgstr "Indtast et gyldigt IPv4- eller IPv6-præfiks og maske i CIDR-notation." msgid "Invalid IP prefix format: {data}" msgstr "Ugyldigt IP-præfiksformat: {data}" -#: netbox/ipam/api/views.py:358 +#: netbox/ipam/api/views.py:370 msgid "" "Insufficient space is available to accommodate the requested prefix size(s)" msgstr "" @@ -9216,182 +9747,174 @@ msgstr "Cisco" msgid "Plaintext" msgstr "Almindelig tekst" +#: netbox/ipam/choices.py:166 netbox/ipam/forms/model_forms.py:800 +#: netbox/ipam/forms/model_forms.py:828 netbox/templates/ipam/service.html:21 +msgid "Service" +msgstr "Serviceydelse" + +#: netbox/ipam/choices.py:167 +msgid "Customer" +msgstr "Kunden" + #: netbox/ipam/fields.py:36 #, python-brace-format msgid "Invalid IP address format: {address}" msgstr "Ugyldigt IP-adresseformat: {address}" -#: netbox/ipam/filtersets.py:48 netbox/vpn/filtersets.py:304 +#: netbox/ipam/filtersets.py:51 netbox/vpn/filtersets.py:304 msgid "Import target" msgstr "Importmål" -#: netbox/ipam/filtersets.py:54 netbox/vpn/filtersets.py:310 +#: netbox/ipam/filtersets.py:57 netbox/vpn/filtersets.py:310 msgid "Import target (name)" msgstr "Importmål (navn)" -#: netbox/ipam/filtersets.py:59 netbox/vpn/filtersets.py:315 +#: netbox/ipam/filtersets.py:62 netbox/vpn/filtersets.py:315 msgid "Export target" msgstr "Eksportmål" -#: netbox/ipam/filtersets.py:65 netbox/vpn/filtersets.py:321 +#: netbox/ipam/filtersets.py:68 netbox/vpn/filtersets.py:321 msgid "Export target (name)" msgstr "Eksportmål (navn)" -#: netbox/ipam/filtersets.py:86 +#: netbox/ipam/filtersets.py:89 msgid "Importing VRF" msgstr "Importere VRF" -#: netbox/ipam/filtersets.py:92 +#: netbox/ipam/filtersets.py:95 msgid "Import VRF (RD)" msgstr "Importer VRF (RD)" -#: netbox/ipam/filtersets.py:97 +#: netbox/ipam/filtersets.py:100 msgid "Exporting VRF" msgstr "Eksport af VRF" -#: netbox/ipam/filtersets.py:103 +#: netbox/ipam/filtersets.py:106 msgid "Export VRF (RD)" msgstr "Eksport VRF (RD)" -#: netbox/ipam/filtersets.py:108 +#: netbox/ipam/filtersets.py:111 msgid "Importing L2VPN" msgstr "Importerer L2VPN" -#: netbox/ipam/filtersets.py:114 +#: netbox/ipam/filtersets.py:117 msgid "Importing L2VPN (identifier)" msgstr "Importerer L2VPN (identifikator)" -#: netbox/ipam/filtersets.py:119 +#: netbox/ipam/filtersets.py:122 msgid "Exporting L2VPN" msgstr "Eksport af L2VPN" -#: netbox/ipam/filtersets.py:125 +#: netbox/ipam/filtersets.py:128 msgid "Exporting L2VPN (identifier)" msgstr "Eksport af L2VPN (identifikator)" -#: netbox/ipam/filtersets.py:155 netbox/ipam/filtersets.py:283 -#: netbox/ipam/forms/model_forms.py:229 netbox/ipam/tables/ip.py:212 +#: netbox/ipam/filtersets.py:158 netbox/ipam/filtersets.py:286 +#: netbox/ipam/forms/model_forms.py:229 netbox/ipam/tables/ip.py:158 #: netbox/templates/ipam/prefix.html:12 msgid "Prefix" msgstr "Præfiks" -#: netbox/ipam/filtersets.py:159 netbox/ipam/filtersets.py:198 -#: netbox/ipam/filtersets.py:223 +#: netbox/ipam/filtersets.py:162 netbox/ipam/filtersets.py:201 +#: netbox/ipam/filtersets.py:226 msgid "RIR (ID)" msgstr "RIR (ID)" -#: netbox/ipam/filtersets.py:165 netbox/ipam/filtersets.py:204 -#: netbox/ipam/filtersets.py:229 +#: netbox/ipam/filtersets.py:168 netbox/ipam/filtersets.py:207 +#: netbox/ipam/filtersets.py:232 msgid "RIR (slug)" msgstr "RIR (slug)" -#: netbox/ipam/filtersets.py:287 +#: netbox/ipam/filtersets.py:290 msgid "Within prefix" msgstr "Inden for præfiks" -#: netbox/ipam/filtersets.py:291 +#: netbox/ipam/filtersets.py:294 msgid "Within and including prefix" msgstr "Inden for og med præfiks" -#: netbox/ipam/filtersets.py:295 +#: netbox/ipam/filtersets.py:298 msgid "Prefixes which contain this prefix or IP" msgstr "Præfikser, der indeholder dette præfiks eller IP" -#: netbox/ipam/filtersets.py:306 netbox/ipam/filtersets.py:574 -#: netbox/ipam/forms/bulk_edit.py:343 netbox/ipam/forms/filtersets.py:196 -#: netbox/ipam/forms/filtersets.py:331 +#: netbox/ipam/filtersets.py:309 netbox/ipam/filtersets.py:541 +#: netbox/ipam/forms/bulk_edit.py:327 netbox/ipam/forms/filtersets.py:198 +#: netbox/ipam/forms/filtersets.py:334 msgid "Mask length" msgstr "Maskelængde" -#: netbox/ipam/filtersets.py:375 netbox/vpn/filtersets.py:427 +#: netbox/ipam/filtersets.py:342 netbox/vpn/filtersets.py:427 msgid "VLAN (ID)" msgstr "VLAN (ID)" -#: netbox/ipam/filtersets.py:379 netbox/vpn/filtersets.py:422 +#: netbox/ipam/filtersets.py:346 netbox/vpn/filtersets.py:422 msgid "VLAN number (1-4094)" msgstr "VLAN-nummer (1-4094)" -#: netbox/ipam/filtersets.py:473 netbox/ipam/filtersets.py:477 -#: netbox/ipam/filtersets.py:569 netbox/ipam/forms/model_forms.py:496 +#: netbox/ipam/filtersets.py:440 netbox/ipam/filtersets.py:444 +#: netbox/ipam/filtersets.py:536 netbox/ipam/forms/model_forms.py:506 #: netbox/templates/tenancy/contact.html:53 #: netbox/tenancy/forms/bulk_edit.py:113 msgid "Address" msgstr "Adresse" -#: netbox/ipam/filtersets.py:481 +#: netbox/ipam/filtersets.py:448 msgid "Ranges which contain this prefix or IP" msgstr "Intervaller, der indeholder dette præfiks eller IP" -#: netbox/ipam/filtersets.py:509 netbox/ipam/filtersets.py:565 +#: netbox/ipam/filtersets.py:476 netbox/ipam/filtersets.py:532 msgid "Parent prefix" msgstr "Forældrepræfiks" -#: netbox/ipam/filtersets.py:618 netbox/ipam/filtersets.py:858 -#: netbox/ipam/filtersets.py:1133 netbox/vpn/filtersets.py:385 -msgid "Virtual machine (name)" -msgstr "Virtuel maskine (navn)" - -#: netbox/ipam/filtersets.py:623 netbox/ipam/filtersets.py:863 -#: netbox/ipam/filtersets.py:1127 netbox/virtualization/filtersets.py:282 -#: netbox/virtualization/filtersets.py:321 netbox/vpn/filtersets.py:390 -msgid "Virtual machine (ID)" -msgstr "Virtuel maskine (ID)" - -#: netbox/ipam/filtersets.py:629 netbox/vpn/filtersets.py:97 -#: netbox/vpn/filtersets.py:396 -msgid "Interface (name)" -msgstr "Grænseflade (navn)" - -#: netbox/ipam/filtersets.py:640 netbox/vpn/filtersets.py:108 -#: netbox/vpn/filtersets.py:407 -msgid "VM interface (name)" -msgstr "VM-grænseflade (navn)" - -#: netbox/ipam/filtersets.py:645 netbox/vpn/filtersets.py:113 -msgid "VM interface (ID)" -msgstr "VM-grænseflade (ID)" - -#: netbox/ipam/filtersets.py:650 +#: netbox/ipam/filtersets.py:617 msgid "FHRP group (ID)" msgstr "FHRP-gruppe (ID)" -#: netbox/ipam/filtersets.py:654 +#: netbox/ipam/filtersets.py:621 msgid "Is assigned to an interface" msgstr "Tildeles til en grænseflade" -#: netbox/ipam/filtersets.py:658 +#: netbox/ipam/filtersets.py:625 msgid "Is assigned" msgstr "Er tildelt" -#: netbox/ipam/filtersets.py:670 +#: netbox/ipam/filtersets.py:637 msgid "Service (ID)" msgstr "Tjeneste (ID)" -#: netbox/ipam/filtersets.py:675 +#: netbox/ipam/filtersets.py:642 msgid "NAT inside IP address (ID)" msgstr "NAT inde i IP-adresse (ID)" -#: netbox/ipam/filtersets.py:1043 netbox/ipam/forms/bulk_import.py:322 -msgid "Assigned interface" -msgstr "Tildelt grænseflade" +#: netbox/ipam/filtersets.py:1001 +msgid "Q-in-Q SVLAN (ID)" +msgstr "Q-i-Q SVLAN (ID)" -#: netbox/ipam/filtersets.py:1048 +#: netbox/ipam/filtersets.py:1005 +msgid "Q-in-Q SVLAN number (1-4094)" +msgstr "Q-in-Q SVLAN-nummer (1-4094)" + +#: netbox/ipam/filtersets.py:1026 msgid "Assigned VM interface" msgstr "Tildelt VM grænseflade" -#: netbox/ipam/filtersets.py:1138 +#: netbox/ipam/filtersets.py:1097 +msgid "VLAN Translation Policy (name)" +msgstr "VLAN-oversættelsespolitik (navn)" + +#: netbox/ipam/filtersets.py:1163 msgid "IP address (ID)" msgstr "IP-adresse (ID)" -#: netbox/ipam/filtersets.py:1144 netbox/ipam/models/ip.py:788 +#: netbox/ipam/filtersets.py:1169 netbox/ipam/models/ip.py:788 msgid "IP address" msgstr "IP adresse" -#: netbox/ipam/filtersets.py:1169 +#: netbox/ipam/filtersets.py:1194 msgid "Primary IPv4 (ID)" msgstr "Primær IPv4 (ID)" -#: netbox/ipam/filtersets.py:1174 +#: netbox/ipam/filtersets.py:1199 msgid "Primary IPv6 (ID)" msgstr "Primær IPv6 (ID)" @@ -9424,427 +9947,400 @@ msgstr "CIDR-maske (f.eks. /24) er påkrævet." msgid "Address pattern" msgstr "Adressemønster" -#: netbox/ipam/forms/bulk_edit.py:50 +#: netbox/ipam/forms/bulk_edit.py:53 msgid "Enforce unique space" msgstr "Håndhæv unikt rum" -#: netbox/ipam/forms/bulk_edit.py:88 +#: netbox/ipam/forms/bulk_edit.py:91 msgid "Is private" msgstr "Er privat" -#: netbox/ipam/forms/bulk_edit.py:109 netbox/ipam/forms/bulk_edit.py:138 -#: netbox/ipam/forms/bulk_edit.py:163 netbox/ipam/forms/bulk_import.py:89 -#: netbox/ipam/forms/bulk_import.py:109 netbox/ipam/forms/bulk_import.py:129 -#: netbox/ipam/forms/filtersets.py:110 netbox/ipam/forms/filtersets.py:125 -#: netbox/ipam/forms/filtersets.py:148 netbox/ipam/forms/model_forms.py:96 -#: netbox/ipam/forms/model_forms.py:109 netbox/ipam/forms/model_forms.py:131 -#: netbox/ipam/forms/model_forms.py:149 netbox/ipam/models/asns.py:31 -#: netbox/ipam/models/asns.py:103 netbox/ipam/models/ip.py:71 -#: netbox/ipam/models/ip.py:90 netbox/ipam/tables/asn.py:20 +#: netbox/ipam/forms/bulk_edit.py:112 netbox/ipam/forms/bulk_edit.py:141 +#: netbox/ipam/forms/bulk_edit.py:166 netbox/ipam/forms/bulk_import.py:92 +#: netbox/ipam/forms/bulk_import.py:112 netbox/ipam/forms/bulk_import.py:132 +#: netbox/ipam/forms/filtersets.py:112 netbox/ipam/forms/filtersets.py:127 +#: netbox/ipam/forms/filtersets.py:150 netbox/ipam/forms/model_forms.py:99 +#: netbox/ipam/forms/model_forms.py:112 netbox/ipam/forms/model_forms.py:135 +#: netbox/ipam/forms/model_forms.py:154 netbox/ipam/models/asns.py:31 +#: netbox/ipam/models/asns.py:100 netbox/ipam/models/ip.py:71 +#: netbox/ipam/models/ip.py:87 netbox/ipam/tables/asn.py:20 #: netbox/ipam/tables/asn.py:45 netbox/templates/ipam/aggregate.html:18 #: netbox/templates/ipam/asn.html:27 netbox/templates/ipam/asnrange.html:19 #: netbox/templates/ipam/rir.html:19 msgid "RIR" msgstr "RIR" -#: netbox/ipam/forms/bulk_edit.py:171 +#: netbox/ipam/forms/bulk_edit.py:174 msgid "Date added" msgstr "Dato tilføjet" -#: netbox/ipam/forms/bulk_edit.py:229 netbox/ipam/forms/model_forms.py:619 -#: netbox/ipam/forms/model_forms.py:666 netbox/ipam/tables/ip.py:251 -#: netbox/templates/ipam/vlan_edit.html:37 +#: netbox/ipam/forms/bulk_edit.py:213 netbox/ipam/forms/model_forms.py:629 +#: netbox/ipam/forms/model_forms.py:676 netbox/ipam/tables/ip.py:201 +#: netbox/templates/ipam/vlan_edit.html:45 #: netbox/templates/ipam/vlangroup.html:27 msgid "VLAN Group" msgstr "VLAN-gruppen" -#: netbox/ipam/forms/bulk_edit.py:234 netbox/ipam/forms/bulk_import.py:185 -#: netbox/ipam/forms/filtersets.py:256 netbox/ipam/forms/model_forms.py:218 -#: netbox/ipam/models/vlans.py:250 netbox/ipam/tables/ip.py:255 -#: netbox/templates/ipam/prefix.html:60 netbox/templates/ipam/vlan.html:12 +#: netbox/ipam/forms/bulk_edit.py:218 netbox/ipam/forms/bulk_import.py:181 +#: netbox/ipam/forms/filtersets.py:259 netbox/ipam/forms/model_forms.py:217 +#: netbox/ipam/models/vlans.py:272 netbox/ipam/tables/ip.py:206 +#: netbox/templates/ipam/prefix.html:56 netbox/templates/ipam/vlan.html:12 #: netbox/templates/ipam/vlan/base.html:6 #: netbox/templates/ipam/vlan_edit.html:10 -#: netbox/templates/wireless/wirelesslan.html:30 +#: netbox/templates/wireless/wirelesslan.html:38 #: netbox/vpn/forms/bulk_import.py:304 netbox/vpn/forms/filtersets.py:284 -#: netbox/vpn/forms/model_forms.py:433 netbox/vpn/forms/model_forms.py:452 -#: netbox/wireless/forms/bulk_edit.py:55 -#: netbox/wireless/forms/bulk_import.py:48 -#: netbox/wireless/forms/model_forms.py:48 netbox/wireless/models.py:102 +#: netbox/vpn/forms/model_forms.py:436 netbox/vpn/forms/model_forms.py:455 +#: netbox/wireless/forms/bulk_edit.py:57 +#: netbox/wireless/forms/bulk_import.py:50 +#: netbox/wireless/forms/model_forms.py:50 netbox/wireless/models.py:102 msgid "VLAN" msgstr "VLAN" -#: netbox/ipam/forms/bulk_edit.py:245 +#: netbox/ipam/forms/bulk_edit.py:229 msgid "Prefix length" msgstr "Præfikslængde" -#: netbox/ipam/forms/bulk_edit.py:268 netbox/ipam/forms/filtersets.py:241 -#: netbox/templates/ipam/prefix.html:85 +#: netbox/ipam/forms/bulk_edit.py:252 netbox/ipam/forms/filtersets.py:244 +#: netbox/templates/ipam/prefix.html:81 msgid "Is a pool" msgstr "Er en pool" -#: netbox/ipam/forms/bulk_edit.py:273 netbox/ipam/forms/bulk_edit.py:318 -#: netbox/ipam/forms/filtersets.py:248 netbox/ipam/forms/filtersets.py:293 -#: netbox/ipam/models/ip.py:272 netbox/ipam/models/ip.py:539 +#: netbox/ipam/forms/bulk_edit.py:257 netbox/ipam/forms/bulk_edit.py:302 +#: netbox/ipam/forms/filtersets.py:251 netbox/ipam/forms/filtersets.py:296 +#: netbox/ipam/models/ip.py:256 netbox/ipam/models/ip.py:525 msgid "Treat as fully utilized" msgstr "Behandl som fuldt udnyttet" -#: netbox/ipam/forms/bulk_edit.py:287 netbox/ipam/forms/filtersets.py:171 +#: netbox/ipam/forms/bulk_edit.py:271 netbox/ipam/forms/filtersets.py:173 +#: netbox/ipam/forms/model_forms.py:232 msgid "VLAN Assignment" msgstr "VLAN-tildeling" -#: netbox/ipam/forms/bulk_edit.py:366 netbox/ipam/models/ip.py:772 +#: netbox/ipam/forms/bulk_edit.py:350 netbox/ipam/models/ip.py:772 msgid "DNS name" msgstr "DNS-navn" -#: netbox/ipam/forms/bulk_edit.py:387 netbox/ipam/forms/bulk_edit.py:534 -#: netbox/ipam/forms/bulk_import.py:418 netbox/ipam/forms/bulk_import.py:493 -#: netbox/ipam/forms/bulk_import.py:519 netbox/ipam/forms/filtersets.py:390 -#: netbox/ipam/forms/filtersets.py:530 netbox/templates/ipam/fhrpgroup.html:22 +#: netbox/ipam/forms/bulk_edit.py:371 netbox/ipam/forms/bulk_edit.py:562 +#: netbox/ipam/forms/bulk_import.py:417 netbox/ipam/forms/bulk_import.py:528 +#: netbox/ipam/forms/bulk_import.py:554 netbox/ipam/forms/filtersets.py:393 +#: netbox/ipam/forms/filtersets.py:582 netbox/templates/ipam/fhrpgroup.html:22 #: netbox/templates/ipam/inc/panels/fhrp_groups.html:24 #: netbox/templates/ipam/service.html:32 #: netbox/templates/ipam/servicetemplate.html:19 msgid "Protocol" msgstr "protokol" -#: netbox/ipam/forms/bulk_edit.py:394 netbox/ipam/forms/filtersets.py:397 +#: netbox/ipam/forms/bulk_edit.py:378 netbox/ipam/forms/filtersets.py:400 #: netbox/ipam/tables/fhrp.py:22 netbox/templates/ipam/fhrpgroup.html:26 msgid "Group ID" msgstr "Gruppe-ID" -#: netbox/ipam/forms/bulk_edit.py:399 netbox/ipam/forms/filtersets.py:402 -#: netbox/wireless/forms/bulk_edit.py:68 -#: netbox/wireless/forms/bulk_edit.py:115 -#: netbox/wireless/forms/bulk_import.py:62 -#: netbox/wireless/forms/bulk_import.py:65 -#: netbox/wireless/forms/bulk_import.py:104 -#: netbox/wireless/forms/bulk_import.py:107 -#: netbox/wireless/forms/filtersets.py:54 -#: netbox/wireless/forms/filtersets.py:88 +#: netbox/ipam/forms/bulk_edit.py:383 netbox/ipam/forms/filtersets.py:405 +#: netbox/wireless/forms/bulk_edit.py:70 +#: netbox/wireless/forms/bulk_edit.py:118 +#: netbox/wireless/forms/bulk_import.py:64 +#: netbox/wireless/forms/bulk_import.py:67 +#: netbox/wireless/forms/bulk_import.py:109 +#: netbox/wireless/forms/bulk_import.py:112 +#: netbox/wireless/forms/filtersets.py:57 +#: netbox/wireless/forms/filtersets.py:116 msgid "Authentication type" msgstr "Autentificeringstype" -#: netbox/ipam/forms/bulk_edit.py:404 netbox/ipam/forms/filtersets.py:406 +#: netbox/ipam/forms/bulk_edit.py:388 netbox/ipam/forms/filtersets.py:409 msgid "Authentication key" msgstr "Autentificeringsnøgle" -#: netbox/ipam/forms/bulk_edit.py:421 netbox/ipam/forms/filtersets.py:383 -#: netbox/ipam/forms/model_forms.py:507 netbox/netbox/navigation/menu.py:386 +#: netbox/ipam/forms/bulk_edit.py:405 netbox/ipam/forms/filtersets.py:386 +#: netbox/ipam/forms/model_forms.py:517 netbox/netbox/navigation/menu.py:407 #: netbox/templates/ipam/fhrpgroup.html:49 #: netbox/templates/wireless/inc/authentication_attrs.html:5 -#: netbox/wireless/forms/bulk_edit.py:91 -#: netbox/wireless/forms/bulk_edit.py:149 -#: netbox/wireless/forms/filtersets.py:36 -#: netbox/wireless/forms/filtersets.py:76 -#: netbox/wireless/forms/model_forms.py:55 -#: netbox/wireless/forms/model_forms.py:171 +#: netbox/wireless/forms/bulk_edit.py:94 +#: netbox/wireless/forms/bulk_edit.py:152 +#: netbox/wireless/forms/filtersets.py:39 +#: netbox/wireless/forms/filtersets.py:104 +#: netbox/wireless/forms/model_forms.py:58 +#: netbox/wireless/forms/model_forms.py:174 msgid "Authentication" msgstr "Autentificering" -#: netbox/ipam/forms/bulk_edit.py:436 netbox/ipam/forms/model_forms.py:608 -msgid "Scope type" -msgstr "Områdetype" - -#: netbox/ipam/forms/bulk_edit.py:439 netbox/ipam/forms/bulk_edit.py:453 -#: netbox/ipam/forms/model_forms.py:611 netbox/ipam/forms/model_forms.py:621 -#: netbox/ipam/tables/vlans.py:71 netbox/templates/ipam/vlangroup.html:38 -msgid "Scope" -msgstr "Anvendelsesområde" - -#: netbox/ipam/forms/bulk_edit.py:446 netbox/ipam/models/vlans.py:60 +#: netbox/ipam/forms/bulk_edit.py:430 netbox/ipam/models/vlans.py:62 msgid "VLAN ID ranges" msgstr "VLAN-ID-intervaller" -#: netbox/ipam/forms/bulk_edit.py:525 +#: netbox/ipam/forms/bulk_edit.py:505 netbox/ipam/forms/bulk_import.py:485 +#: netbox/ipam/forms/filtersets.py:557 netbox/ipam/models/vlans.py:232 +#: netbox/ipam/tables/vlans.py:103 +msgid "Q-in-Q role" +msgstr "Q-in-Q-rolle" + +#: netbox/ipam/forms/bulk_edit.py:522 +msgid "Q-in-Q" +msgstr "Q-i-Q" + +#: netbox/ipam/forms/bulk_edit.py:523 msgid "Site & Group" msgstr "Område & Gruppe" -#: netbox/ipam/forms/bulk_edit.py:539 netbox/ipam/forms/model_forms.py:692 -#: netbox/ipam/forms/model_forms.py:724 netbox/ipam/tables/services.py:19 +#: netbox/ipam/forms/bulk_edit.py:546 netbox/ipam/forms/bulk_import.py:515 +#: netbox/ipam/forms/model_forms.py:724 netbox/ipam/tables/vlans.py:256 +#: netbox/templates/ipam/vlantranslationrule.html:14 +#: netbox/vpn/forms/model_forms.py:322 netbox/vpn/forms/model_forms.py:359 +msgid "Policy" +msgstr "Politik" + +#: netbox/ipam/forms/bulk_edit.py:567 netbox/ipam/forms/model_forms.py:742 +#: netbox/ipam/forms/model_forms.py:774 netbox/ipam/tables/services.py:19 #: netbox/ipam/tables/services.py:49 netbox/templates/ipam/service.html:36 #: netbox/templates/ipam/servicetemplate.html:23 msgid "Ports" msgstr "Havne" -#: netbox/ipam/forms/bulk_import.py:48 +#: netbox/ipam/forms/bulk_import.py:51 msgid "Import route targets" msgstr "Importer rutemål" -#: netbox/ipam/forms/bulk_import.py:54 +#: netbox/ipam/forms/bulk_import.py:57 msgid "Export route targets" msgstr "Eksporter rutemål" -#: netbox/ipam/forms/bulk_import.py:92 netbox/ipam/forms/bulk_import.py:112 -#: netbox/ipam/forms/bulk_import.py:132 +#: netbox/ipam/forms/bulk_import.py:95 netbox/ipam/forms/bulk_import.py:115 +#: netbox/ipam/forms/bulk_import.py:135 msgid "Assigned RIR" msgstr "Tildelt RIR" -#: netbox/ipam/forms/bulk_import.py:182 +#: netbox/ipam/forms/bulk_import.py:178 msgid "VLAN's group (if any)" msgstr "VLANs gruppe (hvis nogen)" -#: netbox/ipam/forms/bulk_import.py:308 -msgid "Parent device of assigned interface (if any)" -msgstr "Overordnet enhed med tildelt grænseflade (hvis nogen)" - -#: netbox/ipam/forms/bulk_import.py:311 netbox/ipam/forms/bulk_import.py:512 -#: netbox/ipam/forms/model_forms.py:718 -#: netbox/virtualization/filtersets.py:288 -#: netbox/virtualization/filtersets.py:327 -#: netbox/virtualization/forms/bulk_edit.py:200 -#: netbox/virtualization/forms/bulk_edit.py:326 -#: netbox/virtualization/forms/bulk_import.py:146 -#: netbox/virtualization/forms/bulk_import.py:207 -#: netbox/virtualization/forms/filtersets.py:212 -#: netbox/virtualization/forms/filtersets.py:248 -#: netbox/virtualization/forms/model_forms.py:288 -#: netbox/vpn/forms/bulk_import.py:93 netbox/vpn/forms/bulk_import.py:290 -msgid "Virtual machine" -msgstr "Virtuel maskine" - -#: netbox/ipam/forms/bulk_import.py:315 -msgid "Parent VM of assigned interface (if any)" -msgstr "Overordnet VM for tildelt grænseflade (hvis nogen)" +#: netbox/ipam/forms/bulk_import.py:207 +#: netbox/virtualization/forms/bulk_import.py:80 +#: netbox/wireless/forms/bulk_import.py:83 +msgid "Scope ID" +msgstr "Område-id" #: netbox/ipam/forms/bulk_import.py:325 -msgid "Is primary" -msgstr "Er primær" - -#: netbox/ipam/forms/bulk_import.py:326 msgid "Make this the primary IP for the assigned device" msgstr "Gør dette til den primære IP for den tildelte enhed" -#: netbox/ipam/forms/bulk_import.py:330 +#: netbox/ipam/forms/bulk_import.py:329 msgid "Is out-of-band" msgstr "Er uden for båndet" -#: netbox/ipam/forms/bulk_import.py:331 +#: netbox/ipam/forms/bulk_import.py:330 msgid "Designate this as the out-of-band IP address for the assigned device" msgstr "Angiv dette som IP-adressen uden for båndet for den tildelte enhed" -#: netbox/ipam/forms/bulk_import.py:371 +#: netbox/ipam/forms/bulk_import.py:370 msgid "No device or virtual machine specified; cannot set as primary IP" msgstr "" "Ingen enhed eller virtuel maskine angivet; kan ikke indstilles som primær IP" -#: netbox/ipam/forms/bulk_import.py:375 +#: netbox/ipam/forms/bulk_import.py:374 msgid "No device specified; cannot set as out-of-band IP" msgstr "Ingen enhed angivet; kan ikke indstilles som IP uden for båndet" -#: netbox/ipam/forms/bulk_import.py:379 +#: netbox/ipam/forms/bulk_import.py:378 msgid "Cannot set out-of-band IP for virtual machines" msgstr "Kan ikke angive IP uden for båndet til virtuelle maskiner" -#: netbox/ipam/forms/bulk_import.py:383 +#: netbox/ipam/forms/bulk_import.py:382 msgid "No interface specified; cannot set as primary IP" msgstr "Ingen grænseflade angivet; kan ikke indstilles som primær IP" -#: netbox/ipam/forms/bulk_import.py:387 +#: netbox/ipam/forms/bulk_import.py:386 msgid "No interface specified; cannot set as out-of-band IP" msgstr "Ingen grænseflade angivet; kan ikke indstilles som IP uden for båndet" -#: netbox/ipam/forms/bulk_import.py:422 +#: netbox/ipam/forms/bulk_import.py:421 msgid "Auth type" msgstr "Autentificeringstype" -#: netbox/ipam/forms/bulk_import.py:437 -msgid "Scope type (app & model)" -msgstr "Omfangstype (app og model)" - -#: netbox/ipam/forms/bulk_import.py:464 +#: netbox/ipam/forms/bulk_import.py:463 msgid "Assigned VLAN group" msgstr "Tildelt VLAN-gruppe" -#: netbox/ipam/forms/bulk_import.py:495 netbox/ipam/forms/bulk_import.py:521 +#: netbox/ipam/forms/bulk_import.py:495 +msgid "Service VLAN (for Q-in-Q/802.1ad customer VLANs)" +msgstr "Service VLAN (til Q-in-Q/802.1ad kunde VLAN'er)" + +#: netbox/ipam/forms/bulk_import.py:518 netbox/ipam/models/vlans.py:343 +msgid "VLAN translation policy" +msgstr "VLAN-oversættelsespolitik" + +#: netbox/ipam/forms/bulk_import.py:530 netbox/ipam/forms/bulk_import.py:556 msgid "IP protocol" msgstr "IP-protokol" -#: netbox/ipam/forms/bulk_import.py:509 +#: netbox/ipam/forms/bulk_import.py:544 msgid "Required if not assigned to a VM" msgstr "Påkrævet, hvis den ikke er tildelt en VM" -#: netbox/ipam/forms/bulk_import.py:516 +#: netbox/ipam/forms/bulk_import.py:551 msgid "Required if not assigned to a device" msgstr "Påkrævet, hvis den ikke er tildelt en enhed" -#: netbox/ipam/forms/bulk_import.py:541 +#: netbox/ipam/forms/bulk_import.py:576 #, python-brace-format msgid "{ip} is not assigned to this device/VM." msgstr "{ip} er ikke tildelt denne enhed/VM." -#: netbox/ipam/forms/filtersets.py:47 netbox/ipam/forms/model_forms.py:63 -#: netbox/netbox/navigation/menu.py:189 netbox/vpn/forms/model_forms.py:410 +#: netbox/ipam/forms/filtersets.py:49 netbox/ipam/forms/model_forms.py:66 +#: netbox/netbox/navigation/menu.py:195 netbox/vpn/forms/model_forms.py:413 msgid "Route Targets" msgstr "Rutemål" -#: netbox/ipam/forms/filtersets.py:53 netbox/ipam/forms/model_forms.py:50 -#: netbox/vpn/forms/filtersets.py:224 netbox/vpn/forms/model_forms.py:397 +#: netbox/ipam/forms/filtersets.py:55 netbox/ipam/forms/model_forms.py:53 +#: netbox/vpn/forms/filtersets.py:224 netbox/vpn/forms/model_forms.py:400 msgid "Import targets" msgstr "Importmål" -#: netbox/ipam/forms/filtersets.py:58 netbox/ipam/forms/model_forms.py:55 -#: netbox/vpn/forms/filtersets.py:229 netbox/vpn/forms/model_forms.py:402 +#: netbox/ipam/forms/filtersets.py:60 netbox/ipam/forms/model_forms.py:58 +#: netbox/vpn/forms/filtersets.py:229 netbox/vpn/forms/model_forms.py:405 msgid "Export targets" msgstr "Eksportmål" -#: netbox/ipam/forms/filtersets.py:73 +#: netbox/ipam/forms/filtersets.py:75 msgid "Imported by VRF" msgstr "Importeret af VRF" -#: netbox/ipam/forms/filtersets.py:78 +#: netbox/ipam/forms/filtersets.py:80 msgid "Exported by VRF" msgstr "Eksporteret af VRF" -#: netbox/ipam/forms/filtersets.py:87 netbox/ipam/tables/ip.py:89 +#: netbox/ipam/forms/filtersets.py:89 netbox/ipam/tables/ip.py:35 #: netbox/templates/ipam/rir.html:30 msgid "Private" msgstr "Privat" -#: netbox/ipam/forms/filtersets.py:105 netbox/ipam/forms/filtersets.py:191 -#: netbox/ipam/forms/filtersets.py:272 netbox/ipam/forms/filtersets.py:326 +#: netbox/ipam/forms/filtersets.py:107 netbox/ipam/forms/filtersets.py:193 +#: netbox/ipam/forms/filtersets.py:275 netbox/ipam/forms/filtersets.py:329 msgid "Address family" msgstr "Adressefamilie" -#: netbox/ipam/forms/filtersets.py:119 netbox/templates/ipam/asnrange.html:25 +#: netbox/ipam/forms/filtersets.py:121 netbox/templates/ipam/asnrange.html:25 msgid "Range" msgstr "Rækkevidde" -#: netbox/ipam/forms/filtersets.py:128 +#: netbox/ipam/forms/filtersets.py:130 msgid "Start" msgstr "Start" -#: netbox/ipam/forms/filtersets.py:132 +#: netbox/ipam/forms/filtersets.py:134 msgid "End" msgstr "Slut" -#: netbox/ipam/forms/filtersets.py:186 +#: netbox/ipam/forms/filtersets.py:188 msgid "Search within" msgstr "Søg inden for" -#: netbox/ipam/forms/filtersets.py:207 netbox/ipam/forms/filtersets.py:342 +#: netbox/ipam/forms/filtersets.py:209 netbox/ipam/forms/filtersets.py:345 msgid "Present in VRF" msgstr "Til stede i VRF" -#: netbox/ipam/forms/filtersets.py:311 +#: netbox/ipam/forms/filtersets.py:314 msgid "Device/VM" msgstr "Enhed/VM" -#: netbox/ipam/forms/filtersets.py:321 +#: netbox/ipam/forms/filtersets.py:324 msgid "Parent Prefix" msgstr "Forældrepræfiks" -#: netbox/ipam/forms/filtersets.py:347 -msgid "Assigned Device" -msgstr "Tildelt enhed" - -#: netbox/ipam/forms/filtersets.py:352 -msgid "Assigned VM" -msgstr "Tildelt VM" - -#: netbox/ipam/forms/filtersets.py:366 +#: netbox/ipam/forms/filtersets.py:369 msgid "Assigned to an interface" msgstr "Tildelt til en grænseflade" -#: netbox/ipam/forms/filtersets.py:373 netbox/templates/ipam/ipaddress.html:51 +#: netbox/ipam/forms/filtersets.py:376 netbox/templates/ipam/ipaddress.html:51 msgid "DNS Name" msgstr "DNS-navn" -#: netbox/ipam/forms/filtersets.py:416 netbox/ipam/models/vlans.py:251 -#: netbox/ipam/tables/ip.py:176 netbox/ipam/tables/vlans.py:82 -#: netbox/ipam/views.py:971 netbox/netbox/navigation/menu.py:193 -#: netbox/netbox/navigation/menu.py:195 +#: netbox/ipam/forms/filtersets.py:419 netbox/ipam/models/vlans.py:273 +#: netbox/ipam/tables/ip.py:122 netbox/ipam/tables/vlans.py:51 +#: netbox/ipam/views.py:1036 netbox/netbox/navigation/menu.py:199 +#: netbox/netbox/navigation/menu.py:201 msgid "VLANs" msgstr "VLAN'er" -#: netbox/ipam/forms/filtersets.py:457 +#: netbox/ipam/forms/filtersets.py:460 msgid "Contains VLAN ID" msgstr "Indeholder VLAN ID" -#: netbox/ipam/forms/filtersets.py:513 netbox/ipam/models/vlans.py:192 +#: netbox/ipam/forms/filtersets.py:494 netbox/ipam/models/vlans.py:363 +msgid "Local VLAN ID" +msgstr "Lokalt VLAN-id" + +#: netbox/ipam/forms/filtersets.py:499 netbox/ipam/models/vlans.py:371 +msgid "Remote VLAN ID" +msgstr "Fjernbetjent VLAN-id" + +#: netbox/ipam/forms/filtersets.py:509 +msgid "Q-in-Q/802.1ad" +msgstr "Q-i-Q/802.1ad" + +#: netbox/ipam/forms/filtersets.py:554 netbox/ipam/models/vlans.py:191 #: netbox/templates/ipam/vlan.html:31 msgid "VLAN ID" msgstr "VLAN-ID" -#: netbox/ipam/forms/filtersets.py:556 netbox/ipam/forms/model_forms.py:324 -#: netbox/ipam/forms/model_forms.py:746 netbox/ipam/forms/model_forms.py:772 -#: netbox/ipam/tables/vlans.py:195 -#: netbox/templates/virtualization/virtualdisk.html:21 -#: netbox/templates/virtualization/virtualmachine.html:12 -#: netbox/templates/virtualization/vminterface.html:21 -#: netbox/templates/vpn/tunneltermination.html:25 -#: netbox/virtualization/forms/filtersets.py:197 -#: netbox/virtualization/forms/filtersets.py:242 -#: netbox/virtualization/forms/model_forms.py:220 -#: netbox/virtualization/tables/virtualmachines.py:135 -#: netbox/virtualization/tables/virtualmachines.py:190 -#: netbox/vpn/choices.py:53 netbox/vpn/forms/filtersets.py:293 -#: netbox/vpn/forms/model_forms.py:160 netbox/vpn/forms/model_forms.py:171 -#: netbox/vpn/forms/model_forms.py:273 netbox/vpn/forms/model_forms.py:454 -msgid "Virtual Machine" -msgstr "Virtuel maskine" - -#: netbox/ipam/forms/model_forms.py:80 +#: netbox/ipam/forms/model_forms.py:83 #: netbox/templates/ipam/routetarget.html:10 msgid "Route Target" msgstr "Rutemål" -#: netbox/ipam/forms/model_forms.py:114 netbox/ipam/tables/ip.py:117 +#: netbox/ipam/forms/model_forms.py:118 netbox/ipam/tables/ip.py:63 #: netbox/templates/ipam/aggregate.html:11 #: netbox/templates/ipam/prefix.html:38 msgid "Aggregate" msgstr "Aggregeret" -#: netbox/ipam/forms/model_forms.py:135 netbox/templates/ipam/asnrange.html:12 +#: netbox/ipam/forms/model_forms.py:140 netbox/templates/ipam/asnrange.html:12 msgid "ASN Range" msgstr "ASN-rækkevidde" -#: netbox/ipam/forms/model_forms.py:231 -msgid "Site/VLAN Assignment" -msgstr "" - -#: netbox/ipam/forms/model_forms.py:259 netbox/templates/ipam/iprange.html:10 +#: netbox/ipam/forms/model_forms.py:269 netbox/templates/ipam/iprange.html:10 msgid "IP Range" msgstr "IP-rækkevidde" -#: netbox/ipam/forms/model_forms.py:295 netbox/ipam/forms/model_forms.py:325 -#: netbox/ipam/forms/model_forms.py:506 +#: netbox/ipam/forms/model_forms.py:305 netbox/ipam/forms/model_forms.py:335 +#: netbox/ipam/forms/model_forms.py:516 #: netbox/templates/ipam/fhrpgroup.html:19 msgid "FHRP Group" msgstr "FHRP-gruppen" -#: netbox/ipam/forms/model_forms.py:310 +#: netbox/ipam/forms/model_forms.py:320 msgid "Make this the primary IP for the device/VM" msgstr "Gør dette til den primære IP for enheden/VM" -#: netbox/ipam/forms/model_forms.py:314 +#: netbox/ipam/forms/model_forms.py:324 msgid "Make this the out-of-band IP for the device" msgstr "Gør dette til enhedens off-band IP" -#: netbox/ipam/forms/model_forms.py:329 +#: netbox/ipam/forms/model_forms.py:339 msgid "NAT IP (Inside)" msgstr "NAT IP (indvendigt)" -#: netbox/ipam/forms/model_forms.py:391 +#: netbox/ipam/forms/model_forms.py:401 msgid "An IP address can only be assigned to a single object." msgstr "En IP-adresse kan kun tildeles et enkelt objekt." -#: netbox/ipam/forms/model_forms.py:398 +#: netbox/ipam/forms/model_forms.py:408 msgid "Cannot reassign primary IP address for the parent device/VM" msgstr "Kan ikke omtildele primær IP-adresse til den overordnede enhed/VM" -#: netbox/ipam/forms/model_forms.py:402 +#: netbox/ipam/forms/model_forms.py:412 msgid "Cannot reassign out-of-Band IP address for the parent device" msgstr "" "Det er ikke muligt at omfordele IP-adressen uden for båndet til den " "overordnede enhed" -#: netbox/ipam/forms/model_forms.py:412 +#: netbox/ipam/forms/model_forms.py:422 msgid "" "Only IP addresses assigned to an interface can be designated as primary IPs." msgstr "" "Kun IP-adresser, der er tildelt en grænseflade, kan betegnes som primære " "IP'er." -#: netbox/ipam/forms/model_forms.py:420 +#: netbox/ipam/forms/model_forms.py:430 msgid "" "Only IP addresses assigned to a device interface can be designated as the " "out-of-band IP for a device." @@ -9852,24 +10348,29 @@ msgstr "" "Kun IP-adresser, der er tildelt en enhedsgrænseflade, kan betegnes som en " "enheds off-band IP." -#: netbox/ipam/forms/model_forms.py:508 +#: netbox/ipam/forms/model_forms.py:518 msgid "Virtual IP Address" msgstr "Virtuel IP-adresse" -#: netbox/ipam/forms/model_forms.py:593 +#: netbox/ipam/forms/model_forms.py:603 msgid "Assignment already exists" msgstr "Opgaven findes allerede" -#: netbox/ipam/forms/model_forms.py:602 +#: netbox/ipam/forms/model_forms.py:612 #: netbox/templates/ipam/vlangroup.html:42 msgid "VLAN IDs" msgstr "VLAN-id'er" -#: netbox/ipam/forms/model_forms.py:620 +#: netbox/ipam/forms/model_forms.py:630 msgid "Child VLANs" msgstr "VLAN'er til børn" -#: netbox/ipam/forms/model_forms.py:697 netbox/ipam/forms/model_forms.py:729 +#: netbox/ipam/forms/model_forms.py:730 +#: netbox/templates/ipam/vlantranslationrule.html:11 +msgid "VLAN Translation Rule" +msgstr "VLAN-oversættelsesregel" + +#: netbox/ipam/forms/model_forms.py:747 netbox/ipam/forms/model_forms.py:779 msgid "" "Comma-separated list of one or more port numbers. A range may be specified " "using a hyphen." @@ -9877,33 +10378,28 @@ msgstr "" "Kommasepareret liste over et eller flere portnumre. Et interval kan angives " "ved hjælp af en bindestreg." -#: netbox/ipam/forms/model_forms.py:702 +#: netbox/ipam/forms/model_forms.py:752 #: netbox/templates/ipam/servicetemplate.html:12 msgid "Service Template" msgstr "Serviceskabelon" -#: netbox/ipam/forms/model_forms.py:749 +#: netbox/ipam/forms/model_forms.py:799 msgid "Port(s)" msgstr "Havn (er)" -#: netbox/ipam/forms/model_forms.py:750 netbox/ipam/forms/model_forms.py:778 -#: netbox/templates/ipam/service.html:21 -msgid "Service" -msgstr "Serviceydelse" - -#: netbox/ipam/forms/model_forms.py:763 +#: netbox/ipam/forms/model_forms.py:813 msgid "Service template" msgstr "Serviceskabelon" -#: netbox/ipam/forms/model_forms.py:775 +#: netbox/ipam/forms/model_forms.py:825 msgid "From Template" msgstr "Fra skabelon" -#: netbox/ipam/forms/model_forms.py:776 +#: netbox/ipam/forms/model_forms.py:826 msgid "Custom" msgstr "Brugerdefineret" -#: netbox/ipam/forms/model_forms.py:806 +#: netbox/ipam/forms/model_forms.py:856 msgid "" "Must specify name, protocol, and port(s) if not using a service template." msgstr "" @@ -9922,28 +10418,28 @@ msgstr "ASN rækkevidde" msgid "ASN ranges" msgstr "ASN intervaller" -#: netbox/ipam/models/asns.py:72 +#: netbox/ipam/models/asns.py:69 #, python-brace-format msgid "Starting ASN ({start}) must be lower than ending ASN ({end})." msgstr "Start ASN ({start}) skal være lavere end slutningen af ASN ({end})." -#: netbox/ipam/models/asns.py:104 +#: netbox/ipam/models/asns.py:101 msgid "Regional Internet Registry responsible for this AS number space" msgstr "Regionalt internetregister, der er ansvarlig for dette AS-nummerrum" -#: netbox/ipam/models/asns.py:109 +#: netbox/ipam/models/asns.py:106 msgid "16- or 32-bit autonomous system number" msgstr "16- eller 32-bit autonomt systemnummer" -#: netbox/ipam/models/fhrp.py:22 +#: netbox/ipam/models/fhrp.py:21 msgid "group ID" msgstr "Gruppe-ID" -#: netbox/ipam/models/fhrp.py:30 netbox/ipam/models/services.py:22 +#: netbox/ipam/models/fhrp.py:29 netbox/ipam/models/services.py:21 msgid "protocol" msgstr "protokol" -#: netbox/ipam/models/fhrp.py:38 netbox/wireless/models.py:28 +#: netbox/ipam/models/fhrp.py:38 netbox/wireless/models.py:29 msgid "authentication type" msgstr "autentificeringstype" @@ -9959,11 +10455,11 @@ msgstr "FHRP-gruppe" msgid "FHRP groups" msgstr "FHRP-grupper" -#: netbox/ipam/models/fhrp.py:113 +#: netbox/ipam/models/fhrp.py:110 msgid "FHRP group assignment" msgstr "FHRP-gruppeopgave" -#: netbox/ipam/models/fhrp.py:114 +#: netbox/ipam/models/fhrp.py:111 msgid "FHRP group assignments" msgstr "FHRP gruppeopgaver" @@ -9975,35 +10471,35 @@ msgstr "privat" msgid "IP space managed by this RIR is considered private" msgstr "IP-plads administreret af denne RIR betragtes som privat" -#: netbox/ipam/models/ip.py:72 netbox/netbox/navigation/menu.py:182 +#: netbox/ipam/models/ip.py:72 netbox/netbox/navigation/menu.py:188 msgid "RIRs" msgstr "RIR'er" -#: netbox/ipam/models/ip.py:84 +#: netbox/ipam/models/ip.py:81 msgid "IPv4 or IPv6 network" msgstr "IPv4- eller IPv6-netværk" -#: netbox/ipam/models/ip.py:91 +#: netbox/ipam/models/ip.py:88 msgid "Regional Internet Registry responsible for this IP space" msgstr "Regionalt internetregister, der er ansvarlig for dette IP-rum" -#: netbox/ipam/models/ip.py:101 +#: netbox/ipam/models/ip.py:98 msgid "date added" msgstr "dato tilføjet" -#: netbox/ipam/models/ip.py:115 +#: netbox/ipam/models/ip.py:112 msgid "aggregate" msgstr "aggregat" -#: netbox/ipam/models/ip.py:116 +#: netbox/ipam/models/ip.py:113 msgid "aggregates" msgstr "aggregater" -#: netbox/ipam/models/ip.py:132 +#: netbox/ipam/models/ip.py:126 msgid "Cannot create aggregate with /0 mask." msgstr "Kan ikke oprette aggregat med /0-maske." -#: netbox/ipam/models/ip.py:144 +#: netbox/ipam/models/ip.py:138 #, python-brace-format msgid "" "Aggregates cannot overlap. {prefix} is already covered by an existing " @@ -10012,7 +10508,7 @@ msgstr "" "Aggregater kan ikke overlappe hinanden. {prefix} er allerede dækket af et " "eksisterende aggregat ({aggregate})." -#: netbox/ipam/models/ip.py:158 +#: netbox/ipam/models/ip.py:152 #, python-brace-format msgid "" "Prefixes cannot overlap aggregates. {prefix} covers an existing aggregate " @@ -10021,127 +10517,122 @@ msgstr "" "Præfikser kan ikke overlappe aggregater. {prefix} dækker et eksisterende " "aggregat ({aggregate})." -#: netbox/ipam/models/ip.py:200 netbox/ipam/models/ip.py:737 -#: netbox/vpn/models/tunnels.py:114 -msgid "role" -msgstr "rolle" - -#: netbox/ipam/models/ip.py:201 +#: netbox/ipam/models/ip.py:195 msgid "roles" msgstr "roller" -#: netbox/ipam/models/ip.py:217 netbox/ipam/models/ip.py:293 +#: netbox/ipam/models/ip.py:208 netbox/ipam/models/ip.py:277 msgid "prefix" msgstr "præfiks" -#: netbox/ipam/models/ip.py:218 +#: netbox/ipam/models/ip.py:209 msgid "IPv4 or IPv6 network with mask" msgstr "IPv4- eller IPv6-netværk med maske" -#: netbox/ipam/models/ip.py:254 +#: netbox/ipam/models/ip.py:238 msgid "Operational status of this prefix" msgstr "Driftsstatus for dette præfiks" -#: netbox/ipam/models/ip.py:262 +#: netbox/ipam/models/ip.py:246 msgid "The primary function of this prefix" msgstr "Den primære funktion af dette præfiks" -#: netbox/ipam/models/ip.py:265 +#: netbox/ipam/models/ip.py:249 msgid "is a pool" msgstr "er en pool" -#: netbox/ipam/models/ip.py:267 +#: netbox/ipam/models/ip.py:251 msgid "All IP addresses within this prefix are considered usable" msgstr "Alle IP-adresser inden for dette præfiks betragtes som brugbare" -#: netbox/ipam/models/ip.py:270 netbox/ipam/models/ip.py:537 +#: netbox/ipam/models/ip.py:254 netbox/ipam/models/ip.py:523 msgid "mark utilized" msgstr "brugt mærke" -#: netbox/ipam/models/ip.py:294 +#: netbox/ipam/models/ip.py:278 msgid "prefixes" msgstr "præfikser" -#: netbox/ipam/models/ip.py:317 +#: netbox/ipam/models/ip.py:298 msgid "Cannot create prefix with /0 mask." msgstr "Kan ikke oprette præfiks med /0-maske." -#: netbox/ipam/models/ip.py:324 netbox/ipam/models/ip.py:874 +#: netbox/ipam/models/ip.py:305 netbox/ipam/models/ip.py:871 #, python-brace-format msgid "VRF {vrf}" msgstr "VRF {vrf}" -#: netbox/ipam/models/ip.py:324 netbox/ipam/models/ip.py:874 +#: netbox/ipam/models/ip.py:305 netbox/ipam/models/ip.py:871 msgid "global table" msgstr "global tabel" -#: netbox/ipam/models/ip.py:326 +#: netbox/ipam/models/ip.py:307 #, python-brace-format msgid "Duplicate prefix found in {table}: {prefix}" msgstr "Duplikat præfiks fundet i {table}: {prefix}" -#: netbox/ipam/models/ip.py:495 +#: netbox/ipam/models/ip.py:481 msgid "start address" msgstr "startadresse" -#: netbox/ipam/models/ip.py:496 netbox/ipam/models/ip.py:500 -#: netbox/ipam/models/ip.py:712 +#: netbox/ipam/models/ip.py:482 netbox/ipam/models/ip.py:486 +#: netbox/ipam/models/ip.py:711 msgid "IPv4 or IPv6 address (with mask)" msgstr "IPv4- eller IPv6-adresse (med maske)" -#: netbox/ipam/models/ip.py:499 +#: netbox/ipam/models/ip.py:485 msgid "end address" msgstr "slutadresse" -#: netbox/ipam/models/ip.py:526 +#: netbox/ipam/models/ip.py:512 msgid "Operational status of this range" msgstr "Driftsstatus for denne rækkevidde" -#: netbox/ipam/models/ip.py:534 +#: netbox/ipam/models/ip.py:520 msgid "The primary function of this range" msgstr "Den primære funktion af dette interval" -#: netbox/ipam/models/ip.py:548 +#: netbox/ipam/models/ip.py:534 msgid "IP range" msgstr "IP-rækkevidde" -#: netbox/ipam/models/ip.py:549 +#: netbox/ipam/models/ip.py:535 msgid "IP ranges" msgstr "IP-intervaller" -#: netbox/ipam/models/ip.py:565 +#: netbox/ipam/models/ip.py:548 msgid "Starting and ending IP address versions must match" msgstr "Startende og afsluttende IP-adresseversioner skal matche" -#: netbox/ipam/models/ip.py:571 +#: netbox/ipam/models/ip.py:554 msgid "Starting and ending IP address masks must match" msgstr "Startende og afsluttende IP-adressemasker skal matche" -#: netbox/ipam/models/ip.py:578 +#: netbox/ipam/models/ip.py:561 #, python-brace-format msgid "" "Ending address must be greater than the starting address ({start_address})" msgstr "Slutadressen skal være større end startadressen ({start_address})" -#: netbox/ipam/models/ip.py:590 +#: netbox/ipam/models/ip.py:589 #, python-brace-format msgid "Defined addresses overlap with range {overlapping_range} in VRF {vrf}" msgstr "" "Definerede adresser overlapper med rækkevidde {overlapping_range} i VRF " "{vrf}" -#: netbox/ipam/models/ip.py:599 +#: netbox/ipam/models/ip.py:598 #, python-brace-format msgid "Defined range exceeds maximum supported size ({max_size})" msgstr "" "Defineret interval overstiger den maksimale understøttede størrelse " "({max_size})" -#: netbox/ipam/models/ip.py:711 netbox/tenancy/models/contacts.py:82 +#: netbox/ipam/models/ip.py:710 netbox/tenancy/models/contacts.py:77 msgid "address" msgstr "adresse" -#: netbox/ipam/models/ip.py:734 +#: netbox/ipam/models/ip.py:733 msgid "The operational status of this IP" msgstr "Den operationelle status for denne IP" @@ -10161,32 +10652,32 @@ msgstr "Den IP, som denne adresse er den „eksterne“ IP for" msgid "Hostname or FQDN (not case-sensitive)" msgstr "Værtsnavn eller FQDN (skelner ikke mellem store og små bogstaver)" -#: netbox/ipam/models/ip.py:789 netbox/ipam/models/services.py:94 +#: netbox/ipam/models/ip.py:789 netbox/ipam/models/services.py:90 msgid "IP addresses" msgstr "IP-adresser" -#: netbox/ipam/models/ip.py:845 +#: netbox/ipam/models/ip.py:842 msgid "Cannot create IP address with /0 mask." msgstr "Kan ikke oprette IP-adresse med /0-maske." -#: netbox/ipam/models/ip.py:851 +#: netbox/ipam/models/ip.py:848 #, python-brace-format msgid "{ip} is a network ID, which may not be assigned to an interface." msgstr "{ip} er et netværks-id, som muligvis ikke tildeles en grænseflade." -#: netbox/ipam/models/ip.py:862 +#: netbox/ipam/models/ip.py:859 #, python-brace-format msgid "" "{ip} is a broadcast address, which may not be assigned to an interface." msgstr "" "{ip} er en udsendelsesadresse, som muligvis ikke tildeles en grænseflade." -#: netbox/ipam/models/ip.py:876 +#: netbox/ipam/models/ip.py:873 #, python-brace-format msgid "Duplicate IP address found in {table}: {ipaddress}" msgstr "Duplikat IP-adresse fundet i {table}: {ipaddress}" -#: netbox/ipam/models/ip.py:897 +#: netbox/ipam/models/ip.py:896 msgid "" "Cannot reassign IP address while it is designated as the primary IP for the " "parent object" @@ -10194,73 +10685,73 @@ msgstr "" "Kan ikke omtildele IP-adresse, mens den er angivet som den primære IP for " "det overordnede objekt" -#: netbox/ipam/models/ip.py:903 +#: netbox/ipam/models/ip.py:902 msgid "Only IPv6 addresses can be assigned SLAAC status" msgstr "Kun IPv6-adresser kan tildeles SLAAC-status" -#: netbox/ipam/models/services.py:33 +#: netbox/ipam/models/services.py:32 msgid "port numbers" msgstr "portnumre" -#: netbox/ipam/models/services.py:59 +#: netbox/ipam/models/services.py:58 msgid "service template" msgstr "service skabelon" -#: netbox/ipam/models/services.py:60 +#: netbox/ipam/models/services.py:59 msgid "service templates" msgstr "service skabeloner" -#: netbox/ipam/models/services.py:95 +#: netbox/ipam/models/services.py:91 msgid "The specific IP addresses (if any) to which this service is bound" msgstr "" "De specifikke IP-adresser (hvis nogen), som denne tjeneste er bundet til" -#: netbox/ipam/models/services.py:102 +#: netbox/ipam/models/services.py:98 msgid "service" msgstr "tjeneste" -#: netbox/ipam/models/services.py:103 +#: netbox/ipam/models/services.py:99 msgid "services" msgstr "ydelser" -#: netbox/ipam/models/services.py:117 +#: netbox/ipam/models/services.py:110 msgid "" "A service cannot be associated with both a device and a virtual machine." msgstr "En tjeneste kan ikke knyttes til både en enhed og en virtuel maskine." -#: netbox/ipam/models/services.py:119 +#: netbox/ipam/models/services.py:112 msgid "" "A service must be associated with either a device or a virtual machine." msgstr "" "En tjeneste skal være tilknyttet enten en enhed eller en virtuel maskine." -#: netbox/ipam/models/vlans.py:85 +#: netbox/ipam/models/vlans.py:87 msgid "VLAN groups" msgstr "VLAN-grupper" -#: netbox/ipam/models/vlans.py:95 +#: netbox/ipam/models/vlans.py:94 msgid "Cannot set scope_type without scope_id." msgstr "Kan ikke indstille scope_type uden scope_id." -#: netbox/ipam/models/vlans.py:97 +#: netbox/ipam/models/vlans.py:96 msgid "Cannot set scope_id without scope_type." msgstr "Kan ikke indstille scope_id uden scope_type." -#: netbox/ipam/models/vlans.py:105 +#: netbox/ipam/models/vlans.py:104 #, python-brace-format msgid "Starting VLAN ID in range ({value}) cannot be less than {minimum}" msgstr "" "Start af VLAN-ID inden for rækkevidde ({value}) kan ikke være mindre end " "{minimum}" -#: netbox/ipam/models/vlans.py:111 +#: netbox/ipam/models/vlans.py:110 #, python-brace-format msgid "Ending VLAN ID in range ({value}) cannot exceed {maximum}" msgstr "" "Afslutning af VLAN-ID inden for rækkevidde ({value}) kan ikke overstige " "{maximum}" -#: netbox/ipam/models/vlans.py:118 +#: netbox/ipam/models/vlans.py:117 #, python-brace-format msgid "" "Ending VLAN ID in range must be greater than or equal to the starting VLAN " @@ -10269,31 +10760,36 @@ msgstr "" "Afsluttende VLAN-id inden for rækkevidde skal være større end eller lig med " "det startende VLAN-id ({range})" -#: netbox/ipam/models/vlans.py:124 +#: netbox/ipam/models/vlans.py:123 msgid "Ranges cannot overlap." msgstr "Intervaller kan ikke overlappe hinanden." -#: netbox/ipam/models/vlans.py:181 +#: netbox/ipam/models/vlans.py:180 msgid "The specific site to which this VLAN is assigned (if any)" msgstr "Det specifikke område, som dette VLAN er tildelt (hvis nogen)" -#: netbox/ipam/models/vlans.py:189 +#: netbox/ipam/models/vlans.py:188 msgid "VLAN group (optional)" msgstr "VLAN-gruppe (valgfrit)" -#: netbox/ipam/models/vlans.py:197 +#: netbox/ipam/models/vlans.py:196 netbox/ipam/models/vlans.py:368 +#: netbox/ipam/models/vlans.py:376 msgid "Numeric VLAN ID (1-4094)" msgstr "Numerisk VLAN-id (1-4094)" -#: netbox/ipam/models/vlans.py:215 +#: netbox/ipam/models/vlans.py:214 msgid "Operational status of this VLAN" msgstr "Driftsstatus for dette VLAN" -#: netbox/ipam/models/vlans.py:223 +#: netbox/ipam/models/vlans.py:222 msgid "The primary function of this VLAN" msgstr "Den primære funktion af denne VLAN" -#: netbox/ipam/models/vlans.py:266 +#: netbox/ipam/models/vlans.py:237 +msgid "Customer/service VLAN designation (for Q-in-Q/IEEE 802.1ad)" +msgstr "Kunde/service VLAN-betegnelse (til Q-in-Q/IEEE 802.1ad)" + +#: netbox/ipam/models/vlans.py:285 #, python-brace-format msgid "" "VLAN is assigned to group {group} (scope: {scope}); cannot also assign to " @@ -10302,42 +10798,58 @@ msgstr "" "VLAN er tildelt til gruppe {group} (anvendelsesområde: {scope}); kan ikke " "også tildele til området {site}." -#: netbox/ipam/models/vlans.py:275 +#: netbox/ipam/models/vlans.py:294 #, python-brace-format msgid "VID must be in ranges {ranges} for VLANs in group {group}" msgstr "" "VID skal være inden for intervaller {ranges} til VLAN'er i gruppe {group}" -#: netbox/ipam/models/vrfs.py:30 +#: netbox/ipam/models/vlans.py:301 +msgid "Only Q-in-Q customer VLANs maybe assigned to a service VLAN." +msgstr "Kun Q-in-Q-kunde-VLAN'er kan tildeles et service-VLAN." + +#: netbox/ipam/models/vlans.py:307 +msgid "A Q-in-Q customer VLAN must be assigned to a service VLAN." +msgstr "Et Q-in-Q-kunde-VLAN skal tildeles et service-VLAN." + +#: netbox/ipam/models/vlans.py:344 +msgid "VLAN translation policies" +msgstr "VLAN-oversættelsespolitikker" + +#: netbox/ipam/models/vlans.py:385 +msgid "VLAN translation rule" +msgstr "VLAN-oversættelsesregel" + +#: netbox/ipam/models/vrfs.py:29 msgid "route distinguisher" msgstr "ruteadskillelse" -#: netbox/ipam/models/vrfs.py:31 +#: netbox/ipam/models/vrfs.py:30 msgid "Unique route distinguisher (as defined in RFC 4364)" msgstr "Unik ruteadskillelse (som defineret i RFC 4364)" -#: netbox/ipam/models/vrfs.py:42 +#: netbox/ipam/models/vrfs.py:41 msgid "enforce unique space" msgstr "håndhæv unikt rum" -#: netbox/ipam/models/vrfs.py:43 +#: netbox/ipam/models/vrfs.py:42 msgid "Prevent duplicate prefixes/IP addresses within this VRF" msgstr "Undgå dublerede præfikser/IP-adresser inden for denne VRF" -#: netbox/ipam/models/vrfs.py:63 netbox/netbox/navigation/menu.py:186 -#: netbox/netbox/navigation/menu.py:188 +#: netbox/ipam/models/vrfs.py:62 netbox/netbox/navigation/menu.py:192 +#: netbox/netbox/navigation/menu.py:194 msgid "VRFs" msgstr "VRF'er" -#: netbox/ipam/models/vrfs.py:82 +#: netbox/ipam/models/vrfs.py:78 msgid "Route target value (formatted in accordance with RFC 4360)" msgstr "Rutemålværdi (formateret i overensstemmelse med RFC 4360)" -#: netbox/ipam/models/vrfs.py:94 +#: netbox/ipam/models/vrfs.py:91 msgid "route target" msgstr "rute mål" -#: netbox/ipam/models/vrfs.py:95 +#: netbox/ipam/models/vrfs.py:92 msgid "route targets" msgstr "rutemål" @@ -10353,84 +10865,101 @@ msgstr "Antal områder" msgid "Provider Count" msgstr "Antal leverandøre" -#: netbox/ipam/tables/ip.py:95 netbox/netbox/navigation/menu.py:179 -#: netbox/netbox/navigation/menu.py:181 +#: netbox/ipam/tables/ip.py:41 netbox/netbox/navigation/menu.py:185 +#: netbox/netbox/navigation/menu.py:187 msgid "Aggregates" msgstr "Aggregater" -#: netbox/ipam/tables/ip.py:125 +#: netbox/ipam/tables/ip.py:71 msgid "Added" msgstr "Tilføjet" -#: netbox/ipam/tables/ip.py:128 netbox/ipam/tables/ip.py:166 -#: netbox/ipam/tables/vlans.py:142 netbox/ipam/views.py:346 -#: netbox/netbox/navigation/menu.py:165 netbox/netbox/navigation/menu.py:167 -#: netbox/templates/ipam/vlan.html:84 +#: netbox/ipam/tables/ip.py:74 netbox/ipam/tables/ip.py:112 +#: netbox/ipam/tables/vlans.py:118 netbox/ipam/views.py:373 +#: netbox/netbox/navigation/menu.py:171 netbox/netbox/navigation/menu.py:173 +#: netbox/templates/ipam/vlan.html:100 msgid "Prefixes" msgstr "Præfikser" -#: netbox/ipam/tables/ip.py:131 netbox/ipam/tables/ip.py:270 -#: netbox/ipam/tables/ip.py:324 netbox/ipam/tables/vlans.py:86 +#: netbox/ipam/tables/ip.py:77 netbox/ipam/tables/ip.py:221 +#: netbox/ipam/tables/ip.py:276 netbox/ipam/tables/vlans.py:55 #: netbox/templates/dcim/device.html:260 #: netbox/templates/ipam/aggregate.html:24 -#: netbox/templates/ipam/iprange.html:29 netbox/templates/ipam/prefix.html:106 +#: netbox/templates/ipam/iprange.html:29 netbox/templates/ipam/prefix.html:102 msgid "Utilization" msgstr "Udnyttelse" -#: netbox/ipam/tables/ip.py:171 netbox/netbox/navigation/menu.py:161 +#: netbox/ipam/tables/ip.py:117 netbox/netbox/navigation/menu.py:167 msgid "IP Ranges" msgstr "IP-intervaller" -#: netbox/ipam/tables/ip.py:221 +#: netbox/ipam/tables/ip.py:167 msgid "Prefix (Flat)" msgstr "Præfiks (flad)" -#: netbox/ipam/tables/ip.py:225 +#: netbox/ipam/tables/ip.py:171 msgid "Depth" msgstr "Dybde" -#: netbox/ipam/tables/ip.py:262 +#: netbox/ipam/tables/ip.py:191 netbox/ipam/tables/vlans.py:37 +#: netbox/virtualization/tables/clusters.py:77 +#: netbox/wireless/tables/wirelesslan.py:55 +msgid "Scope Type" +msgstr "Områdetype" + +#: netbox/ipam/tables/ip.py:213 msgid "Pool" msgstr "Svømmebassin" -#: netbox/ipam/tables/ip.py:266 netbox/ipam/tables/ip.py:320 +#: netbox/ipam/tables/ip.py:217 netbox/ipam/tables/ip.py:272 msgid "Marked Utilized" msgstr "Markeret Udnyttet" -#: netbox/ipam/tables/ip.py:304 +#: netbox/ipam/tables/ip.py:256 msgid "Start address" msgstr "Startadresse" -#: netbox/ipam/tables/ip.py:383 +#: netbox/ipam/tables/ip.py:335 msgid "NAT (Inside)" msgstr "NAT (indvendigt)" -#: netbox/ipam/tables/ip.py:388 +#: netbox/ipam/tables/ip.py:340 msgid "NAT (Outside)" msgstr "NAT (udenfor)" -#: netbox/ipam/tables/ip.py:393 +#: netbox/ipam/tables/ip.py:345 msgid "Assigned" msgstr "Tildelt" -#: netbox/ipam/tables/ip.py:429 netbox/templates/vpn/l2vpntermination.html:16 +#: netbox/ipam/tables/ip.py:381 netbox/templates/vpn/l2vpntermination.html:16 #: netbox/vpn/forms/filtersets.py:240 msgid "Assigned Object" msgstr "Tildelt objekt" -#: netbox/ipam/tables/vlans.py:68 -msgid "Scope Type" -msgstr "Områdetype" - -#: netbox/ipam/tables/vlans.py:76 +#: netbox/ipam/tables/vlans.py:45 msgid "VID Ranges" msgstr "VID intervaller" -#: netbox/ipam/tables/vlans.py:111 netbox/ipam/tables/vlans.py:214 +#: netbox/ipam/tables/vlans.py:80 netbox/ipam/tables/vlans.py:190 #: netbox/templates/dcim/inc/interface_vlans_table.html:4 msgid "VID" msgstr "VIDEO" +#: netbox/ipam/tables/vlans.py:237 +#: netbox/templates/ipam/vlantranslationpolicy.html:22 +msgid "Rules" +msgstr "Regler" + +#: netbox/ipam/tables/vlans.py:260 +#: netbox/templates/ipam/vlantranslationrule.html:18 +msgid "Local VID" +msgstr "Lokal VID" + +#: netbox/ipam/tables/vlans.py:264 +#: netbox/templates/ipam/vlantranslationrule.html:22 +msgid "Remote VID" +msgstr "Fjernbetjening VID" + #: netbox/ipam/tables/vrfs.py:30 msgid "RD" msgstr "RD" @@ -10470,23 +10999,23 @@ msgstr "" "Kun alfanumeriske tegn, stjerner, bindestreger, punktum og understregninger " "er tilladt i DNS-navne" -#: netbox/ipam/views.py:533 +#: netbox/ipam/views.py:570 msgid "Child Prefixes" msgstr "Børnepræfikser" -#: netbox/ipam/views.py:569 +#: netbox/ipam/views.py:606 msgid "Child Ranges" msgstr "Børneområder" -#: netbox/ipam/views.py:898 +#: netbox/ipam/views.py:958 msgid "Related IPs" msgstr "Relaterede IP'er" -#: netbox/ipam/views.py:1127 +#: netbox/ipam/views.py:1315 msgid "Device Interfaces" msgstr "Enhedsgrænseflader" -#: netbox/ipam/views.py:1145 +#: netbox/ipam/views.py:1333 msgid "VM Interfaces" msgstr "VM-grænseflader" @@ -10534,90 +11063,112 @@ msgstr "{class_name} skal implementere get_view_name ()" msgid "Invalid permission {permission} for model {model}" msgstr "Ugyldig tilladelse {permission} til model {model}" -#: netbox/netbox/choices.py:49 +#: netbox/netbox/choices.py:51 msgid "Dark Red" msgstr "Mørk rød" -#: netbox/netbox/choices.py:52 +#: netbox/netbox/choices.py:54 msgid "Rose" msgstr "Rose" -#: netbox/netbox/choices.py:53 +#: netbox/netbox/choices.py:55 msgid "Fuchsia" msgstr "Fuchsia" -#: netbox/netbox/choices.py:55 +#: netbox/netbox/choices.py:57 msgid "Dark Purple" msgstr "Mørk lilla" -#: netbox/netbox/choices.py:58 +#: netbox/netbox/choices.py:60 msgid "Light Blue" msgstr "Lyseblå" -#: netbox/netbox/choices.py:61 +#: netbox/netbox/choices.py:63 msgid "Aqua" msgstr "Aqua" -#: netbox/netbox/choices.py:62 +#: netbox/netbox/choices.py:64 msgid "Dark Green" msgstr "Mørkegrøn" -#: netbox/netbox/choices.py:64 +#: netbox/netbox/choices.py:66 msgid "Light Green" msgstr "Lysegrøn" -#: netbox/netbox/choices.py:65 +#: netbox/netbox/choices.py:67 msgid "Lime" msgstr "Citron" -#: netbox/netbox/choices.py:67 +#: netbox/netbox/choices.py:69 msgid "Amber" msgstr "Rav" -#: netbox/netbox/choices.py:69 +#: netbox/netbox/choices.py:71 msgid "Dark Orange" msgstr "Mørk orange" -#: netbox/netbox/choices.py:70 +#: netbox/netbox/choices.py:72 msgid "Brown" msgstr "Brun" -#: netbox/netbox/choices.py:71 +#: netbox/netbox/choices.py:73 msgid "Light Grey" msgstr "Lysegrå" -#: netbox/netbox/choices.py:72 +#: netbox/netbox/choices.py:74 msgid "Grey" msgstr "Grå" -#: netbox/netbox/choices.py:73 +#: netbox/netbox/choices.py:75 msgid "Dark Grey" msgstr "Mørkegrå" -#: netbox/netbox/choices.py:128 +#: netbox/netbox/choices.py:103 netbox/templates/extras/script_result.html:56 +msgid "Default" +msgstr "Standard" + +#: netbox/netbox/choices.py:130 msgid "Direct" msgstr "Direkte" -#: netbox/netbox/choices.py:129 +#: netbox/netbox/choices.py:131 msgid "Upload" msgstr "Upload" -#: netbox/netbox/choices.py:141 netbox/netbox/choices.py:155 +#: netbox/netbox/choices.py:143 netbox/netbox/choices.py:157 msgid "Auto-detect" msgstr "Automatisk registrering" -#: netbox/netbox/choices.py:156 +#: netbox/netbox/choices.py:158 msgid "Comma" msgstr "Komma" -#: netbox/netbox/choices.py:157 +#: netbox/netbox/choices.py:159 msgid "Semicolon" msgstr "Semikolon" -#: netbox/netbox/choices.py:158 +#: netbox/netbox/choices.py:160 msgid "Tab" msgstr "faneblad" +#: netbox/netbox/choices.py:193 netbox/templates/dcim/device.html:327 +#: netbox/templates/dcim/rack.html:107 +msgid "Kilograms" +msgstr "Kilogram" + +#: netbox/netbox/choices.py:194 +msgid "Grams" +msgstr "Gram" + +#: netbox/netbox/choices.py:195 netbox/templates/dcim/device.html:328 +#: netbox/templates/dcim/rack.html:108 +msgid "Pounds" +msgstr "pund" + +#: netbox/netbox/choices.py:196 +msgid "Ounces" +msgstr "Ounce" + #: netbox/netbox/config/__init__.py:67 #, python-brace-format msgid "Invalid configuration parameter: {item}" @@ -10906,6 +11457,26 @@ msgstr "dato synkroniseret" msgid "{class_name} must implement a sync_data() method." msgstr "{class_name} skal implementere en sync_data () metode." +#: netbox/netbox/models/mixins.py:22 +msgid "weight unit" +msgstr "vægtenhed" + +#: netbox/netbox/models/mixins.py:52 +msgid "Must specify a unit when setting a weight" +msgstr "Skal angive en enhed, når du indstiller en vægt" + +#: netbox/netbox/models/mixins.py:57 +msgid "distance" +msgstr "afstand" + +#: netbox/netbox/models/mixins.py:64 +msgid "distance unit" +msgstr "afstandsenhed" + +#: netbox/netbox/models/mixins.py:99 +msgid "Must specify a unit when setting a distance" +msgstr "Skal angive en enhed, når du indstiller en afstand" + #: netbox/netbox/navigation/menu.py:11 msgid "Organization" msgstr "Organisation" @@ -10939,10 +11510,6 @@ msgstr "Rackroller" msgid "Elevations" msgstr "Forhøjninger" -#: netbox/netbox/navigation/menu.py:60 netbox/netbox/navigation/menu.py:62 -msgid "Rack Types" -msgstr "Racktyper" - #: netbox/netbox/navigation/menu.py:76 msgid "Modules" msgstr "Moduler" @@ -10965,175 +11532,200 @@ msgstr "Enhedskomponenter" msgid "Inventory Item Roles" msgstr "Lagervareroller" -#: netbox/netbox/navigation/menu.py:111 netbox/netbox/navigation/menu.py:115 +#: netbox/netbox/navigation/menu.py:110 +#: netbox/templates/dcim/interface.html:413 +#: netbox/templates/virtualization/vminterface.html:118 +msgid "MAC Addresses" +msgstr "MAC-adresser" + +#: netbox/netbox/navigation/menu.py:117 netbox/netbox/navigation/menu.py:121 +#: netbox/templates/dcim/interface.html:182 msgid "Connections" msgstr "Forbindelser" -#: netbox/netbox/navigation/menu.py:117 +#: netbox/netbox/navigation/menu.py:123 msgid "Cables" msgstr "Kabler" -#: netbox/netbox/navigation/menu.py:118 +#: netbox/netbox/navigation/menu.py:124 msgid "Wireless Links" msgstr "Trådløse links" -#: netbox/netbox/navigation/menu.py:121 +#: netbox/netbox/navigation/menu.py:127 msgid "Interface Connections" msgstr "Grænsefladeforbindelser" -#: netbox/netbox/navigation/menu.py:126 +#: netbox/netbox/navigation/menu.py:132 msgid "Console Connections" msgstr "Konsolforbindelser" -#: netbox/netbox/navigation/menu.py:131 +#: netbox/netbox/navigation/menu.py:137 msgid "Power Connections" msgstr "Strømtilslutninger" -#: netbox/netbox/navigation/menu.py:147 +#: netbox/netbox/navigation/menu.py:153 msgid "Wireless LAN Groups" msgstr "Trådløse LAN-grupper" -#: netbox/netbox/navigation/menu.py:168 +#: netbox/netbox/navigation/menu.py:174 msgid "Prefix & VLAN Roles" msgstr "Præfiks- og VLAN-roller" -#: netbox/netbox/navigation/menu.py:174 +#: netbox/netbox/navigation/menu.py:180 msgid "ASN Ranges" msgstr "ASN-intervaller" -#: netbox/netbox/navigation/menu.py:196 +#: netbox/netbox/navigation/menu.py:202 msgid "VLAN Groups" msgstr "VLAN Grupper" #: netbox/netbox/navigation/menu.py:203 +msgid "VLAN Translation Policies" +msgstr "VLAN-oversættelsespolitikker" + +#: netbox/netbox/navigation/menu.py:204 +#: netbox/templates/ipam/vlantranslationpolicy.html:46 +msgid "VLAN Translation Rules" +msgstr "VLAN-oversættelsesregler" + +#: netbox/netbox/navigation/menu.py:211 msgid "Service Templates" msgstr "Serviceskabeloner" -#: netbox/netbox/navigation/menu.py:204 netbox/templates/dcim/device.html:302 +#: netbox/netbox/navigation/menu.py:212 netbox/templates/dcim/device.html:302 #: netbox/templates/ipam/ipaddress.html:118 #: netbox/templates/virtualization/virtualmachine.html:154 msgid "Services" msgstr "Serviceydelser" -#: netbox/netbox/navigation/menu.py:211 +#: netbox/netbox/navigation/menu.py:219 msgid "VPN" msgstr "VPN" -#: netbox/netbox/navigation/menu.py:215 netbox/netbox/navigation/menu.py:217 +#: netbox/netbox/navigation/menu.py:223 netbox/netbox/navigation/menu.py:225 #: netbox/vpn/tables/tunnels.py:24 msgid "Tunnels" msgstr "Tunneler" -#: netbox/netbox/navigation/menu.py:218 +#: netbox/netbox/navigation/menu.py:226 #: netbox/templates/vpn/tunnelgroup.html:8 msgid "Tunnel Groups" msgstr "Tunnelgrupper" -#: netbox/netbox/navigation/menu.py:219 +#: netbox/netbox/navigation/menu.py:227 msgid "Tunnel Terminations" msgstr "Tunnelafslutninger" -#: netbox/netbox/navigation/menu.py:223 netbox/netbox/navigation/menu.py:225 +#: netbox/netbox/navigation/menu.py:231 netbox/netbox/navigation/menu.py:233 #: netbox/vpn/models/l2vpn.py:64 msgid "L2VPNs" msgstr "L2VPN'er" -#: netbox/netbox/navigation/menu.py:226 netbox/templates/vpn/l2vpn.html:56 -#: netbox/templates/vpn/tunnel.html:72 netbox/vpn/tables/tunnels.py:58 -msgid "Terminations" -msgstr "Opsigelser" - -#: netbox/netbox/navigation/menu.py:232 +#: netbox/netbox/navigation/menu.py:240 msgid "IKE Proposals" msgstr "IKE-forslag" -#: netbox/netbox/navigation/menu.py:233 +#: netbox/netbox/navigation/menu.py:241 #: netbox/templates/vpn/ikeproposal.html:41 msgid "IKE Policies" msgstr "IKE politikker" -#: netbox/netbox/navigation/menu.py:234 +#: netbox/netbox/navigation/menu.py:242 msgid "IPSec Proposals" msgstr "IPsec-forslag" -#: netbox/netbox/navigation/menu.py:235 +#: netbox/netbox/navigation/menu.py:243 #: netbox/templates/vpn/ipsecproposal.html:37 msgid "IPSec Policies" msgstr "IPsec-politikker" -#: netbox/netbox/navigation/menu.py:236 netbox/templates/vpn/ikepolicy.html:38 +#: netbox/netbox/navigation/menu.py:244 netbox/templates/vpn/ikepolicy.html:38 #: netbox/templates/vpn/ipsecpolicy.html:25 msgid "IPSec Profiles" msgstr "IPsec-profiler" -#: netbox/netbox/navigation/menu.py:251 +#: netbox/netbox/navigation/menu.py:259 #: netbox/templates/virtualization/virtualmachine.html:174 #: netbox/templates/virtualization/virtualmachine/base.html:32 #: netbox/templates/virtualization/virtualmachine_list.html:21 -#: netbox/virtualization/tables/virtualmachines.py:104 -#: netbox/virtualization/views.py:386 +#: netbox/virtualization/tables/virtualmachines.py:74 +#: netbox/virtualization/views.py:403 msgid "Virtual Disks" msgstr "Virtuelle diske" -#: netbox/netbox/navigation/menu.py:258 +#: netbox/netbox/navigation/menu.py:266 msgid "Cluster Types" msgstr "Klyngetyper" -#: netbox/netbox/navigation/menu.py:259 +#: netbox/netbox/navigation/menu.py:267 msgid "Cluster Groups" msgstr "Klyngegrupper" -#: netbox/netbox/navigation/menu.py:273 +#: netbox/netbox/navigation/menu.py:281 msgid "Circuit Types" msgstr "Kredsløbstyper" -#: netbox/netbox/navigation/menu.py:274 -msgid "Circuit Groups" -msgstr "Kredsløbsgrupper" - -#: netbox/netbox/navigation/menu.py:275 -#: netbox/templates/circuits/circuit.html:66 -msgid "Group Assignments" -msgstr "Gruppeopgaver" - -#: netbox/netbox/navigation/menu.py:276 +#: netbox/netbox/navigation/menu.py:282 msgid "Circuit Terminations" msgstr "Kredsløbsafslutninger" -#: netbox/netbox/navigation/menu.py:280 netbox/netbox/navigation/menu.py:282 +#: netbox/netbox/navigation/menu.py:286 netbox/netbox/navigation/menu.py:288 +#: netbox/templates/circuits/providernetwork.html:55 +msgid "Virtual Circuits" +msgstr "Virtuelle kredsløb" + +#: netbox/netbox/navigation/menu.py:289 +msgid "Virtual Circuit Types" +msgstr "Virtuelle kredsløbstyper" + +#: netbox/netbox/navigation/menu.py:290 +msgid "Virtual Circuit Terminations" +msgstr "Virtuelle kredsløbsafslutninger" + +#: netbox/netbox/navigation/menu.py:296 +msgid "Circuit Groups" +msgstr "Kredsløbsgrupper" + +#: netbox/netbox/navigation/menu.py:297 +#: netbox/templates/circuits/circuit.html:76 +#: netbox/templates/circuits/virtualcircuit.html:69 +msgid "Group Assignments" +msgstr "Gruppeopgaver" + +#: netbox/netbox/navigation/menu.py:301 netbox/netbox/navigation/menu.py:303 msgid "Providers" msgstr "Leverandøre" -#: netbox/netbox/navigation/menu.py:283 +#: netbox/netbox/navigation/menu.py:304 #: netbox/templates/circuits/provider.html:51 msgid "Provider Accounts" msgstr "Leverandørkonti" -#: netbox/netbox/navigation/menu.py:284 +#: netbox/netbox/navigation/menu.py:305 msgid "Provider Networks" msgstr "Leverandørnetværk" -#: netbox/netbox/navigation/menu.py:298 +#: netbox/netbox/navigation/menu.py:319 msgid "Power Panels" msgstr "Strømpaneler" -#: netbox/netbox/navigation/menu.py:309 +#: netbox/netbox/navigation/menu.py:330 msgid "Configurations" msgstr "Konfigurationer" -#: netbox/netbox/navigation/menu.py:311 +#: netbox/netbox/navigation/menu.py:332 msgid "Config Contexts" msgstr "Konfigurationskontekster" -#: netbox/netbox/navigation/menu.py:312 +#: netbox/netbox/navigation/menu.py:333 msgid "Config Templates" msgstr "Konfigurationsskabeloner" -#: netbox/netbox/navigation/menu.py:319 netbox/netbox/navigation/menu.py:323 +#: netbox/netbox/navigation/menu.py:340 netbox/netbox/navigation/menu.py:344 msgid "Customization" msgstr "Tilpasning" -#: netbox/netbox/navigation/menu.py:325 +#: netbox/netbox/navigation/menu.py:346 #: netbox/templates/dcim/device_edit.html:103 #: netbox/templates/dcim/htmx/cable_edit.html:81 #: netbox/templates/dcim/virtualchassis_add.html:31 @@ -11142,96 +11734,96 @@ msgstr "Tilpasning" #: netbox/templates/htmx/form.html:19 netbox/templates/inc/filter_list.html:30 #: netbox/templates/inc/panels/custom_fields.html:7 #: netbox/templates/ipam/ipaddress_bulk_add.html:35 -#: netbox/templates/ipam/vlan_edit.html:59 +#: netbox/templates/ipam/vlan_edit.html:67 msgid "Custom Fields" msgstr "Brugerdefinerede felter" -#: netbox/netbox/navigation/menu.py:326 +#: netbox/netbox/navigation/menu.py:347 msgid "Custom Field Choices" msgstr "Brugerdefinerede feltvalg" -#: netbox/netbox/navigation/menu.py:327 +#: netbox/netbox/navigation/menu.py:348 msgid "Custom Links" msgstr "Brugerdefinerede links" -#: netbox/netbox/navigation/menu.py:328 +#: netbox/netbox/navigation/menu.py:349 msgid "Export Templates" msgstr "Eksport skabeloner" -#: netbox/netbox/navigation/menu.py:329 +#: netbox/netbox/navigation/menu.py:350 msgid "Saved Filters" msgstr "Gemte filtre" -#: netbox/netbox/navigation/menu.py:331 +#: netbox/netbox/navigation/menu.py:352 msgid "Image Attachments" msgstr "Billedvedhæftede filer" -#: netbox/netbox/navigation/menu.py:349 +#: netbox/netbox/navigation/menu.py:370 msgid "Operations" msgstr "Operationer" -#: netbox/netbox/navigation/menu.py:353 +#: netbox/netbox/navigation/menu.py:374 msgid "Integrations" msgstr "Integrationer" -#: netbox/netbox/navigation/menu.py:355 +#: netbox/netbox/navigation/menu.py:376 msgid "Data Sources" msgstr "Datakilder" -#: netbox/netbox/navigation/menu.py:356 +#: netbox/netbox/navigation/menu.py:377 msgid "Event Rules" msgstr "Begivenhedsregler" -#: netbox/netbox/navigation/menu.py:357 +#: netbox/netbox/navigation/menu.py:378 msgid "Webhooks" msgstr "Webhooks" -#: netbox/netbox/navigation/menu.py:361 netbox/netbox/navigation/menu.py:365 -#: netbox/netbox/views/generic/feature_views.py:153 +#: netbox/netbox/navigation/menu.py:382 netbox/netbox/navigation/menu.py:386 +#: netbox/netbox/views/generic/feature_views.py:158 #: netbox/templates/extras/report/base.html:37 #: netbox/templates/extras/script/base.html:36 msgid "Jobs" msgstr "Job" -#: netbox/netbox/navigation/menu.py:371 +#: netbox/netbox/navigation/menu.py:392 msgid "Logging" msgstr "Logning" -#: netbox/netbox/navigation/menu.py:373 +#: netbox/netbox/navigation/menu.py:394 msgid "Notification Groups" msgstr "Meddelelsesgrupper" -#: netbox/netbox/navigation/menu.py:374 +#: netbox/netbox/navigation/menu.py:395 msgid "Journal Entries" msgstr "Journalposter" -#: netbox/netbox/navigation/menu.py:375 +#: netbox/netbox/navigation/menu.py:396 #: netbox/templates/core/objectchange.html:9 #: netbox/templates/core/objectchange_list.html:4 msgid "Change Log" msgstr "Ændringslog" -#: netbox/netbox/navigation/menu.py:382 netbox/templates/inc/user_menu.html:29 +#: netbox/netbox/navigation/menu.py:403 netbox/templates/inc/user_menu.html:29 msgid "Admin" msgstr "Administrator" -#: netbox/netbox/navigation/menu.py:430 netbox/templates/account/base.html:27 -#: netbox/templates/inc/user_menu.html:57 +#: netbox/netbox/navigation/menu.py:451 netbox/templates/account/base.html:27 +#: netbox/templates/inc/user_menu.html:52 msgid "API Tokens" msgstr "API-tokens" -#: netbox/netbox/navigation/menu.py:437 netbox/users/forms/model_forms.py:187 +#: netbox/netbox/navigation/menu.py:458 netbox/users/forms/model_forms.py:187 #: netbox/users/forms/model_forms.py:195 netbox/users/forms/model_forms.py:242 #: netbox/users/forms/model_forms.py:249 msgid "Permissions" msgstr "Tilladelser" -#: netbox/netbox/navigation/menu.py:445 netbox/netbox/navigation/menu.py:449 +#: netbox/netbox/navigation/menu.py:466 netbox/netbox/navigation/menu.py:470 #: netbox/templates/core/system.html:7 msgid "System" msgstr "Systemet" -#: netbox/netbox/navigation/menu.py:454 netbox/netbox/navigation/menu.py:502 +#: netbox/netbox/navigation/menu.py:475 netbox/netbox/navigation/menu.py:523 #: netbox/templates/500.html:35 netbox/templates/account/preferences.html:22 #: netbox/templates/core/plugin.html:13 #: netbox/templates/core/plugin_list.html:7 @@ -11239,29 +11831,29 @@ msgstr "Systemet" msgid "Plugins" msgstr "Plugins" -#: netbox/netbox/navigation/menu.py:459 +#: netbox/netbox/navigation/menu.py:480 msgid "Configuration History" msgstr "Konfigurationshistorik" -#: netbox/netbox/navigation/menu.py:465 netbox/templates/core/rq_task.html:8 +#: netbox/netbox/navigation/menu.py:486 netbox/templates/core/rq_task.html:8 #: netbox/templates/core/rq_task_list.html:22 msgid "Background Tasks" msgstr "Baggrundsopgaver" -#: netbox/netbox/plugins/navigation.py:47 -#: netbox/netbox/plugins/navigation.py:69 +#: netbox/netbox/plugins/navigation.py:48 +#: netbox/netbox/plugins/navigation.py:70 msgid "Permissions must be passed as a tuple or list." msgstr "Tilladelser skal videregives som en tuple eller liste." -#: netbox/netbox/plugins/navigation.py:51 +#: netbox/netbox/plugins/navigation.py:52 msgid "Buttons must be passed as a tuple or list." msgstr "Knapper skal sendes som en tuple eller liste." -#: netbox/netbox/plugins/navigation.py:73 +#: netbox/netbox/plugins/navigation.py:74 msgid "Button color must be a choice within ButtonColorChoices." msgstr "Knapfarve skal være et valg inden for ButtonColorChoices." -#: netbox/netbox/plugins/registration.py:25 +#: netbox/netbox/plugins/registration.py:26 #, python-brace-format msgid "" "PluginTemplateExtension class {template_extension} was passed as an " @@ -11270,7 +11862,7 @@ msgstr "" "PluginTemplateExtension klasse {template_extension} blev vedtaget som en " "instans!" -#: netbox/netbox/plugins/registration.py:31 +#: netbox/netbox/plugins/registration.py:32 #, python-brace-format msgid "" "{template_extension} is not a subclass of " @@ -11279,17 +11871,17 @@ msgstr "" "{template_extension} er ikke en underklasse af " "Netbox.Plugins.PluginTemplateExtension!" -#: netbox/netbox/plugins/registration.py:51 +#: netbox/netbox/plugins/registration.py:57 #, python-brace-format msgid "{item} must be an instance of netbox.plugins.PluginMenuItem" msgstr "{item} skal være en forekomst af Netbox.Plugins.PluginMenuItem" -#: netbox/netbox/plugins/registration.py:62 +#: netbox/netbox/plugins/registration.py:68 #, python-brace-format msgid "{menu_link} must be an instance of netbox.plugins.PluginMenuItem" msgstr "{menu_link} skal være en forekomst af Netbox.Plugins.PluginMenuItem" -#: netbox/netbox/plugins/registration.py:67 +#: netbox/netbox/plugins/registration.py:73 #, python-brace-format msgid "{button} must be an instance of netbox.plugins.PluginMenuButton" msgstr "{button} skal være en forekomst af Netbox.Plugins.PluginMenuButton" @@ -11373,93 +11965,93 @@ msgstr "" msgid "Cannot delete stores from registry" msgstr "Kan ikke slette butikker fra registreringsdatabasen" -#: netbox/netbox/settings.py:760 +#: netbox/netbox/settings.py:752 msgid "Czech" msgstr "Tjekkisk" -#: netbox/netbox/settings.py:761 +#: netbox/netbox/settings.py:753 msgid "Danish" msgstr "dansk" -#: netbox/netbox/settings.py:762 +#: netbox/netbox/settings.py:754 msgid "German" msgstr "Tysk" -#: netbox/netbox/settings.py:763 +#: netbox/netbox/settings.py:755 msgid "English" msgstr "engelsk" -#: netbox/netbox/settings.py:764 +#: netbox/netbox/settings.py:756 msgid "Spanish" msgstr "spansk" -#: netbox/netbox/settings.py:765 +#: netbox/netbox/settings.py:757 msgid "French" msgstr "franskmænd" -#: netbox/netbox/settings.py:766 +#: netbox/netbox/settings.py:758 msgid "Italian" msgstr "Italiensk" -#: netbox/netbox/settings.py:767 +#: netbox/netbox/settings.py:759 msgid "Japanese" msgstr "Japansk" -#: netbox/netbox/settings.py:768 +#: netbox/netbox/settings.py:760 msgid "Dutch" msgstr "Hollandsk" -#: netbox/netbox/settings.py:769 +#: netbox/netbox/settings.py:761 msgid "Polish" msgstr "Polere" -#: netbox/netbox/settings.py:770 +#: netbox/netbox/settings.py:762 msgid "Portuguese" msgstr "portugisisk" -#: netbox/netbox/settings.py:771 +#: netbox/netbox/settings.py:763 msgid "Russian" msgstr "Russisk" -#: netbox/netbox/settings.py:772 +#: netbox/netbox/settings.py:764 msgid "Turkish" msgstr "Tyrkisk" -#: netbox/netbox/settings.py:773 +#: netbox/netbox/settings.py:765 msgid "Ukrainian" msgstr "Ukrainsk" -#: netbox/netbox/settings.py:774 +#: netbox/netbox/settings.py:766 msgid "Chinese" msgstr "kinesisk" -#: netbox/netbox/tables/columns.py:176 +#: netbox/netbox/tables/columns.py:177 msgid "Select all" msgstr "Vælg alle" -#: netbox/netbox/tables/columns.py:189 +#: netbox/netbox/tables/columns.py:190 msgid "Toggle all" msgstr "Skift alle" -#: netbox/netbox/tables/columns.py:300 +#: netbox/netbox/tables/columns.py:302 msgid "Toggle Dropdown" msgstr "Skift rullemenuen" -#: netbox/netbox/tables/columns.py:572 netbox/templates/core/job.html:53 +#: netbox/netbox/tables/columns.py:575 netbox/templates/core/job.html:53 msgid "Error" msgstr "Fejl" -#: netbox/netbox/tables/tables.py:58 +#: netbox/netbox/tables/tables.py:59 #, python-brace-format msgid "No {model_name} found" msgstr "Nej {model_name} fundet" -#: netbox/netbox/tables/tables.py:249 +#: netbox/netbox/tables/tables.py:252 #: netbox/templates/generic/bulk_import.html:117 msgid "Field" msgstr "Mark" -#: netbox/netbox/tables/tables.py:252 +#: netbox/netbox/tables/tables.py:255 msgid "Value" msgstr "Værdi" @@ -11476,24 +12068,24 @@ msgstr "" "Der opstod en fejl ved gengivelse af den valgte eksportskabelon " "({template}): {error}" -#: netbox/netbox/views/generic/bulk_views.py:416 +#: netbox/netbox/views/generic/bulk_views.py:421 #, python-brace-format msgid "Row {i}: Object with ID {id} does not exist" msgstr "Række {i}: Objekt med ID {id} findes ikke" -#: netbox/netbox/views/generic/bulk_views.py:709 -#: netbox/netbox/views/generic/bulk_views.py:910 -#: netbox/netbox/views/generic/bulk_views.py:958 +#: netbox/netbox/views/generic/bulk_views.py:708 +#: netbox/netbox/views/generic/bulk_views.py:909 +#: netbox/netbox/views/generic/bulk_views.py:957 #, python-brace-format msgid "No {object_type} were selected." msgstr "Nej {object_type} blev udvalgt." -#: netbox/netbox/views/generic/bulk_views.py:788 +#: netbox/netbox/views/generic/bulk_views.py:787 #, python-brace-format msgid "Renamed {count} {object_type}" msgstr "Omdøbt {count} {object_type}" -#: netbox/netbox/views/generic/bulk_views.py:888 +#: netbox/netbox/views/generic/bulk_views.py:887 #, python-brace-format msgid "Deleted {count} {object_type}" msgstr "Slettet {count} {object_type}" @@ -11506,16 +12098,16 @@ msgstr "Ændringslog" msgid "Journal" msgstr "Tidsskrift" -#: netbox/netbox/views/generic/feature_views.py:207 +#: netbox/netbox/views/generic/feature_views.py:212 msgid "Unable to synchronize data: No data file set." msgstr "Kan ikke synkronisere data: Der er ikke angivet nogen datafil." -#: netbox/netbox/views/generic/feature_views.py:211 +#: netbox/netbox/views/generic/feature_views.py:216 #, python-brace-format msgid "Synchronized data for {object_type} {object}." msgstr "Synkroniserede data for {object_type} {object}." -#: netbox/netbox/views/generic/feature_views.py:236 +#: netbox/netbox/views/generic/feature_views.py:241 #, python-brace-format msgid "Synced {count} {object_type}" msgstr "Synkroniseret {count} {object_type}" @@ -11589,9 +12181,9 @@ msgstr "på GitHub" msgid "Home Page" msgstr "Hjemmesiden" -#: netbox/templates/account/base.html:7 netbox/templates/inc/user_menu.html:45 +#: netbox/templates/account/base.html:7 netbox/templates/inc/user_menu.html:40 #: netbox/vpn/forms/bulk_edit.py:255 netbox/vpn/forms/filtersets.py:189 -#: netbox/vpn/forms/model_forms.py:379 +#: netbox/vpn/forms/model_forms.py:382 msgid "Profile" msgstr "Profil" @@ -11603,12 +12195,12 @@ msgstr "Meddelelser" #: netbox/templates/account/base.html:16 #: netbox/templates/account/subscriptions.html:7 -#: netbox/templates/inc/user_menu.html:51 +#: netbox/templates/inc/user_menu.html:46 msgid "Subscriptions" msgstr "Abonnementer" #: netbox/templates/account/base.html:19 -#: netbox/templates/inc/user_menu.html:54 +#: netbox/templates/inc/user_menu.html:49 msgid "Preferences" msgstr "Præferencer" @@ -11636,6 +12228,7 @@ msgstr "Skift adgangskode" #: netbox/templates/generic/object_edit.html:72 #: netbox/templates/htmx/delete_form.html:53 #: netbox/templates/htmx/delete_form.html:55 +#: netbox/templates/htmx/quick_add.html:21 #: netbox/templates/ipam/ipaddress_assign.html:28 #: netbox/templates/virtualization/cluster_add_devices.html:30 msgid "Cancel" @@ -11734,7 +12327,7 @@ msgstr "Tildelte grupper" #: netbox/templates/core/objectchange.html:142 #: netbox/templates/dcim/devicebay.html:59 #: netbox/templates/dcim/inc/panels/inventory_items.html:45 -#: netbox/templates/dcim/interface.html:296 +#: netbox/templates/dcim/interface.html:353 #: netbox/templates/dcim/modulebay.html:80 #: netbox/templates/extras/configcontext.html:70 #: netbox/templates/extras/eventrule.html:66 @@ -11743,6 +12336,7 @@ msgstr "Tildelte grupper" #: netbox/templates/extras/webhook.html:75 #: netbox/templates/inc/panel_table.html:13 #: netbox/templates/inc/panels/comments.html:10 +#: netbox/templates/inc/panels/related_objects.html:23 #: netbox/templates/ipam/inc/panels/fhrp_groups.html:56 #: netbox/templates/users/group.html:34 netbox/templates/users/group.html:44 #: netbox/templates/users/objectpermission.html:77 @@ -11780,7 +12374,7 @@ msgstr "Sidst brugt" msgid "Add a Token" msgstr "Tilføj en token" -#: netbox/templates/base/base.html:22 netbox/templates/home.html:27 +#: netbox/templates/base/base.html:23 netbox/templates/home.html:27 msgid "Home" msgstr "Hjem" @@ -11822,15 +12416,16 @@ msgstr "Kildekode" msgid "Community" msgstr "Fællesskab" -#: netbox/templates/circuits/circuit.html:47 +#: netbox/templates/circuits/circuit.html:57 msgid "Install Date" msgstr "Installationsdato" -#: netbox/templates/circuits/circuit.html:51 +#: netbox/templates/circuits/circuit.html:61 msgid "Termination Date" msgstr "Opsigelsesdato" -#: netbox/templates/circuits/circuit.html:70 +#: netbox/templates/circuits/circuit.html:80 +#: netbox/templates/circuits/virtualcircuit.html:73 #: netbox/templates/ipam/inc/panels/fhrp_groups.html:15 msgid "Assign Group" msgstr "Tildel gruppe" @@ -11878,7 +12473,7 @@ msgid "Add" msgstr "Tilføj" #: netbox/templates/circuits/inc/circuit_termination.html:15 -#: netbox/templates/circuits/inc/circuit_termination_fields.html:36 +#: netbox/templates/circuits/inc/circuit_termination_fields.html:37 #: netbox/templates/dcim/inc/panels/inventory_items.html:32 #: netbox/templates/dcim/powerpanel.html:56 #: netbox/templates/extras/script_list.html:30 @@ -11893,35 +12488,39 @@ msgstr "Rediger" msgid "Swap" msgstr "Bytte" -#: netbox/templates/circuits/inc/circuit_termination_fields.html:19 +#: netbox/templates/circuits/inc/circuit_termination_fields.html:5 +msgid "Termination point" +msgstr "Afslutningspunkt" + +#: netbox/templates/circuits/inc/circuit_termination_fields.html:20 #: netbox/templates/dcim/consoleport.html:59 #: netbox/templates/dcim/consoleserverport.html:60 #: netbox/templates/dcim/powerfeed.html:114 msgid "Marked as connected" msgstr "Markeret som tilsluttet" -#: netbox/templates/circuits/inc/circuit_termination_fields.html:21 +#: netbox/templates/circuits/inc/circuit_termination_fields.html:22 msgid "to" msgstr "til" -#: netbox/templates/circuits/inc/circuit_termination_fields.html:31 #: netbox/templates/circuits/inc/circuit_termination_fields.html:32 +#: netbox/templates/circuits/inc/circuit_termination_fields.html:33 #: netbox/templates/dcim/frontport.html:80 #: netbox/templates/dcim/inc/connection_endpoints.html:7 -#: netbox/templates/dcim/interface.html:154 +#: netbox/templates/dcim/interface.html:211 #: netbox/templates/dcim/rearport.html:76 msgid "Trace" msgstr "Spor" -#: netbox/templates/circuits/inc/circuit_termination_fields.html:35 +#: netbox/templates/circuits/inc/circuit_termination_fields.html:36 msgid "Edit cable" msgstr "Rediger kabel" -#: netbox/templates/circuits/inc/circuit_termination_fields.html:40 +#: netbox/templates/circuits/inc/circuit_termination_fields.html:41 msgid "Remove cable" msgstr "Fjern kablet" -#: netbox/templates/circuits/inc/circuit_termination_fields.html:41 +#: netbox/templates/circuits/inc/circuit_termination_fields.html:42 #: netbox/templates/dcim/bulk_disconnect.html:5 #: netbox/templates/dcim/device/consoleports.html:12 #: netbox/templates/dcim/device/consoleserverports.html:12 @@ -11934,33 +12533,33 @@ msgstr "Fjern kablet" msgid "Disconnect" msgstr "Afbryd forbindelsen" -#: netbox/templates/circuits/inc/circuit_termination_fields.html:48 +#: netbox/templates/circuits/inc/circuit_termination_fields.html:49 #: netbox/templates/dcim/consoleport.html:69 #: netbox/templates/dcim/consoleserverport.html:70 #: netbox/templates/dcim/frontport.html:102 -#: netbox/templates/dcim/interface.html:180 -#: netbox/templates/dcim/interface.html:200 +#: netbox/templates/dcim/interface.html:237 +#: netbox/templates/dcim/interface.html:257 #: netbox/templates/dcim/powerfeed.html:127 -#: netbox/templates/dcim/poweroutlet.html:71 -#: netbox/templates/dcim/poweroutlet.html:72 +#: netbox/templates/dcim/poweroutlet.html:81 +#: netbox/templates/dcim/poweroutlet.html:82 #: netbox/templates/dcim/powerport.html:73 #: netbox/templates/dcim/rearport.html:98 msgid "Connect" msgstr "Forbind" -#: netbox/templates/circuits/inc/circuit_termination_fields.html:70 +#: netbox/templates/circuits/inc/circuit_termination_fields.html:65 msgid "Downstream" msgstr "Nedstrøms" -#: netbox/templates/circuits/inc/circuit_termination_fields.html:71 +#: netbox/templates/circuits/inc/circuit_termination_fields.html:66 msgid "Upstream" msgstr "Opstrøms" -#: netbox/templates/circuits/inc/circuit_termination_fields.html:80 +#: netbox/templates/circuits/inc/circuit_termination_fields.html:75 msgid "Cross-Connect" msgstr "Krydsforbindelse" -#: netbox/templates/circuits/inc/circuit_termination_fields.html:84 +#: netbox/templates/circuits/inc/circuit_termination_fields.html:79 msgid "Patch Panel/Port" msgstr "Patchpanel/port" @@ -11972,6 +12571,27 @@ msgstr "Tilføj kredsløb" msgid "Provider Account" msgstr "Leverandørkonto" +#: netbox/templates/circuits/providernetwork.html:59 +msgid "Add a Virtual Circuit" +msgstr "Tilføj et virtuelt kredsløb" + +#: netbox/templates/circuits/virtualcircuit.html:91 +#: netbox/templates/vpn/tunnel.html:9 +msgid "Add Termination" +msgstr "Tilføj opsigelse" + +#: netbox/templates/circuits/virtualcircuittermination.html:23 +msgid "Virtual Circuit Termination" +msgstr "Virtuel kredsløbsafslutning" + +#: netbox/templates/circuits/virtualcircuittype.html:10 +msgid "Add Virtual Circuit" +msgstr "Tilføj virtuelt kredsløb" + +#: netbox/templates/circuits/virtualcircuittype.html:19 +msgid "Virtual Circuit Type" +msgstr "Virtuel kredsløbstype" + #: netbox/templates/core/configrevision.html:35 msgid "Configuration Data" msgstr "Konfigurationsdata" @@ -12005,7 +12625,7 @@ msgstr "Ændret" #: netbox/templates/core/datafile.html:42 #: netbox/templates/ipam/iprange.html:25 #: netbox/templates/virtualization/virtualdisk.html:29 -#: netbox/virtualization/tables/virtualmachines.py:198 +#: netbox/virtualization/tables/virtualmachines.py:169 msgid "Size" msgstr "Størrelse" @@ -12447,8 +13067,8 @@ msgstr "Omdøb markeret" #: netbox/templates/dcim/consoleport.html:65 #: netbox/templates/dcim/consoleserverport.html:66 #: netbox/templates/dcim/frontport.html:98 -#: netbox/templates/dcim/interface.html:176 -#: netbox/templates/dcim/poweroutlet.html:69 +#: netbox/templates/dcim/interface.html:233 +#: netbox/templates/dcim/poweroutlet.html:79 #: netbox/templates/dcim/powerport.html:69 msgid "Not Connected" msgstr "Ikke tilsluttet" @@ -12471,7 +13091,7 @@ msgid "Map" msgstr "Kort" #: netbox/templates/dcim/device.html:108 -#: netbox/templates/dcim/inventoryitem.html:56 +#: netbox/templates/dcim/inventoryitem.html:60 #: netbox/templates/dcim/module.html:81 #: netbox/templates/dcim/modulebay.html:74 netbox/templates/dcim/rack.html:61 msgid "Asset Tag" @@ -12487,7 +13107,7 @@ msgstr "Opret VDC" #: netbox/templates/dcim/device.html:175 #: netbox/templates/dcim/device_edit.html:64 -#: netbox/virtualization/forms/model_forms.py:223 +#: netbox/virtualization/forms/model_forms.py:230 msgid "Management" msgstr "Ledelse" @@ -12604,35 +13224,6 @@ msgstr "Tilføj strømstik" msgid "Add Rear Ports" msgstr "Tilføj bageste porte" -#: netbox/templates/dcim/device/render_config.html:5 -#: netbox/templates/virtualization/virtualmachine/render_config.html:5 -msgid "Config" -msgstr "Konfiguration" - -#: netbox/templates/dcim/device/render_config.html:35 -#: netbox/templates/virtualization/virtualmachine/render_config.html:35 -msgid "Context Data" -msgstr "Kontekstdata" - -#: netbox/templates/dcim/device/render_config.html:55 -#: netbox/templates/virtualization/virtualmachine/render_config.html:55 -msgid "Rendered Config" -msgstr "Renderet konfiguration" - -#: netbox/templates/dcim/device/render_config.html:57 -#: netbox/templates/virtualization/virtualmachine/render_config.html:57 -msgid "Download" -msgstr "Hent" - -#: netbox/templates/dcim/device/render_config.html:64 -#: netbox/templates/virtualization/virtualmachine/render_config.html:64 -msgid "Error rendering template" -msgstr "Fejl ved gengivelse af skabelon" - -#: netbox/templates/dcim/device/render_config.html:70 -msgid "No configuration template has been assigned for this device." -msgstr "" - #: netbox/templates/dcim/device_edit.html:44 msgid "Parent Bay" msgstr "Forældrebugten" @@ -12699,12 +13290,12 @@ msgid "VM Role" msgstr "VM-rolle" #: netbox/templates/dcim/devicetype.html:18 -#: netbox/templates/dcim/moduletype.html:29 +#: netbox/templates/dcim/moduletype.html:31 msgid "Model Name" msgstr "Modelnavn" #: netbox/templates/dcim/devicetype.html:25 -#: netbox/templates/dcim/moduletype.html:33 +#: netbox/templates/dcim/moduletype.html:35 msgid "Part Number" msgstr "Varenummer" @@ -12729,8 +13320,8 @@ msgid "Rear Port Position" msgstr "Bageste portposition" #: netbox/templates/dcim/frontport.html:72 -#: netbox/templates/dcim/interface.html:144 -#: netbox/templates/dcim/poweroutlet.html:63 +#: netbox/templates/dcim/interface.html:201 +#: netbox/templates/dcim/poweroutlet.html:73 #: netbox/templates/dcim/powerport.html:63 #: netbox/templates/dcim/rearport.html:68 msgid "Marked as Connected" @@ -12830,77 +13421,79 @@ msgid "PoE Type" msgstr "PoE-type" #: netbox/templates/dcim/interface.html:81 -#: netbox/templates/virtualization/vminterface.html:63 +#: netbox/templates/virtualization/vminterface.html:55 +#: netbox/virtualization/forms/model_forms.py:395 msgid "802.1Q Mode" msgstr "802.1Q-tilstand" -#: netbox/templates/dcim/interface.html:125 -#: netbox/templates/virtualization/vminterface.html:59 -msgid "MAC Address" -msgstr "MAC-adresse" +#: netbox/templates/dcim/interface.html:156 +#: netbox/templates/virtualization/vminterface.html:88 +msgid "VLAN Translation" +msgstr "VLAN-oversættelse" -#: netbox/templates/dcim/interface.html:151 +#: netbox/templates/dcim/interface.html:208 msgid "Wireless Link" msgstr "Trådløs forbindelse" -#: netbox/templates/dcim/interface.html:218 netbox/vpn/choices.py:63 -msgid "Peer" -msgstr "jævnaldrende" - -#: netbox/templates/dcim/interface.html:230 +#: netbox/templates/dcim/interface.html:287 #: netbox/templates/wireless/inc/wirelesslink_interface.html:26 msgid "Channel" msgstr "Kanal" -#: netbox/templates/dcim/interface.html:239 +#: netbox/templates/dcim/interface.html:296 #: netbox/templates/wireless/inc/wirelesslink_interface.html:32 msgid "Channel Frequency" msgstr "Kanalfrekvens" -#: netbox/templates/dcim/interface.html:242 -#: netbox/templates/dcim/interface.html:250 -#: netbox/templates/dcim/interface.html:261 -#: netbox/templates/dcim/interface.html:269 +#: netbox/templates/dcim/interface.html:299 +#: netbox/templates/dcim/interface.html:307 +#: netbox/templates/dcim/interface.html:318 +#: netbox/templates/dcim/interface.html:326 msgid "MHz" msgstr "MHz" -#: netbox/templates/dcim/interface.html:258 +#: netbox/templates/dcim/interface.html:315 #: netbox/templates/wireless/inc/wirelesslink_interface.html:42 msgid "Channel Width" msgstr "Kanalbredde" -#: netbox/templates/dcim/interface.html:285 +#: netbox/templates/dcim/interface.html:342 #: netbox/templates/wireless/wirelesslan.html:14 #: netbox/templates/wireless/wirelesslink.html:21 -#: netbox/wireless/forms/bulk_edit.py:60 -#: netbox/wireless/forms/bulk_edit.py:102 -#: netbox/wireless/forms/filtersets.py:40 -#: netbox/wireless/forms/filtersets.py:80 netbox/wireless/models.py:82 -#: netbox/wireless/models.py:156 netbox/wireless/tables/wirelesslan.py:44 +#: netbox/wireless/forms/bulk_edit.py:62 +#: netbox/wireless/forms/bulk_edit.py:105 +#: netbox/wireless/forms/filtersets.py:43 +#: netbox/wireless/forms/filtersets.py:108 netbox/wireless/models.py:82 +#: netbox/wireless/models.py:153 netbox/wireless/tables/wirelesslan.py:44 msgid "SSID" msgstr "SSID" -#: netbox/templates/dcim/interface.html:305 +#: netbox/templates/dcim/interface.html:362 msgid "LAG Members" msgstr "LAG-medlemmer" -#: netbox/templates/dcim/interface.html:323 +#: netbox/templates/dcim/interface.html:380 msgid "No member interfaces" msgstr "Ingen medlemsgrænseflader" -#: netbox/templates/dcim/interface.html:343 +#: netbox/templates/dcim/interface.html:400 #: netbox/templates/ipam/fhrpgroup.html:73 #: netbox/templates/ipam/iprange/ip_addresses.html:7 #: netbox/templates/ipam/prefix/ip_addresses.html:7 -#: netbox/templates/virtualization/vminterface.html:89 +#: netbox/templates/virtualization/vminterface.html:105 msgid "Add IP Address" msgstr "Tilføj IP-adresse" +#: netbox/templates/dcim/interface.html:417 +#: netbox/templates/virtualization/vminterface.html:123 +msgid "Add MAC Address" +msgstr "Tilføj MAC-adresse" + #: netbox/templates/dcim/inventoryitem.html:24 msgid "Parent Item" msgstr "Overordnet element" -#: netbox/templates/dcim/inventoryitem.html:48 +#: netbox/templates/dcim/inventoryitem.html:52 msgid "Part ID" msgstr "Artikel-ID" @@ -12920,6 +13513,10 @@ msgstr "Tilføj en placering" msgid "Add a Device" msgstr "Tilføj en enhed" +#: netbox/templates/dcim/macaddress.html:36 +msgid "Primary for interface" +msgstr "Primær til grænseflade" + #: netbox/templates/dcim/manufacturer.html:16 msgid "Add Device Type" msgstr "Tilføj enhedstype" @@ -12950,7 +13547,7 @@ msgctxt "Abbreviation for amperes" msgid "A" msgstr "EN" -#: netbox/templates/dcim/poweroutlet.html:48 +#: netbox/templates/dcim/poweroutlet.html:58 msgid "Feed Leg" msgstr "Foderben" @@ -13383,11 +13980,19 @@ msgstr "Kan ikke indlæse indhold. Ugyldigt visningsnavn" msgid "No content found" msgstr "Intet indhold fundet" -#: netbox/templates/extras/dashboard/widgets/rssfeed.html:18 +#: netbox/templates/extras/dashboard/widgets/rssfeed.html:17 +msgid "" +"This RSS feed requires an external connection. Check the ISOLATED_DEPLOYMENT" +" setting." +msgstr "" +"Dette RSS-feed kræver en ekstern forbindelse. Kontroller indstillingen " +"ISOLATED_DEPLOYMENT." + +#: netbox/templates/extras/dashboard/widgets/rssfeed.html:22 msgid "There was a problem fetching the RSS feed" msgstr "Der opstod et problem med at hente RSS-feedet" -#: netbox/templates/extras/dashboard/widgets/rssfeed.html:21 +#: netbox/templates/extras/dashboard/widgets/rssfeed.html:25 msgid "HTTP" msgstr "HTTP" @@ -13457,6 +14062,30 @@ msgstr "Kildekontekster" msgid "New Journal Entry" msgstr "Ny journalpost" +#: netbox/templates/extras/object_render_config.html:6 +msgid "Config" +msgstr "Konfiguration" + +#: netbox/templates/extras/object_render_config.html:36 +msgid "Context Data" +msgstr "Kontekstdata" + +#: netbox/templates/extras/object_render_config.html:56 +msgid "Rendered Config" +msgstr "Renderet konfiguration" + +#: netbox/templates/extras/object_render_config.html:58 +msgid "Download" +msgstr "Hent" + +#: netbox/templates/extras/object_render_config.html:65 +msgid "Error rendering template" +msgstr "Fejl ved gengivelse af skabelon" + +#: netbox/templates/extras/object_render_config.html:71 +msgid "No configuration template has been assigned." +msgstr "Der er ikke tildelt nogen konfigurationsskabelon." + #: netbox/templates/extras/report/base.html:30 msgid "Report" msgstr "Rapport" @@ -13544,7 +14173,7 @@ msgstr "Enhver" msgid "Tagged Item Types" msgstr "Mærkede varetyper" -#: netbox/templates/extras/tag.html:81 +#: netbox/templates/extras/tag.html:82 msgid "Tagged Objects" msgstr "Mærkede objekter" @@ -13826,6 +14455,21 @@ msgstr "Alle notifikationer" msgid "Select" msgstr "Vælg" +#: netbox/templates/htmx/quick_add.html:7 +msgid "Quick Add" +msgstr "Hurtig tilføjelse" + +#: netbox/templates/htmx/quick_add_created.html:18 +#, python-format +msgid "" +"\n" +" Created %(object_type)s %(object)s\n" +" " +msgstr "" +"\n" +" Oprettet %(object_type)s %(object)s\n" +" " + #: netbox/templates/inc/filter_list.html:43 #: netbox/utilities/templates/helpers/table_config_form.html:39 msgid "Reset" @@ -13897,15 +14541,11 @@ msgstr "Klar bestilling" msgid "Help center" msgstr "Hjælpecenter" -#: netbox/templates/inc/user_menu.html:41 -msgid "Django Admin" -msgstr "" - -#: netbox/templates/inc/user_menu.html:61 +#: netbox/templates/inc/user_menu.html:56 msgid "Log Out" msgstr "Log ud" -#: netbox/templates/inc/user_menu.html:68 netbox/templates/login.html:38 +#: netbox/templates/inc/user_menu.html:63 netbox/templates/login.html:38 msgid "Log In" msgstr "Log ind" @@ -14002,43 +14642,43 @@ msgstr "Startadresse" msgid "Ending Address" msgstr "Slutadresse" -#: netbox/templates/ipam/iprange.html:33 netbox/templates/ipam/prefix.html:110 +#: netbox/templates/ipam/iprange.html:33 netbox/templates/ipam/prefix.html:106 msgid "Marked fully utilized" msgstr "Markeret fuldt udnyttet" -#: netbox/templates/ipam/prefix.html:99 +#: netbox/templates/ipam/prefix.html:95 msgid "Addressing Details" msgstr "Adresseringsoplysninger" -#: netbox/templates/ipam/prefix.html:118 +#: netbox/templates/ipam/prefix.html:114 msgid "Child IPs" msgstr "Børne-IP'er" -#: netbox/templates/ipam/prefix.html:126 +#: netbox/templates/ipam/prefix.html:122 msgid "Available IPs" msgstr "Tilgængelige IP'er" -#: netbox/templates/ipam/prefix.html:138 +#: netbox/templates/ipam/prefix.html:134 msgid "First available IP" msgstr "Første tilgængelige IP" -#: netbox/templates/ipam/prefix.html:179 +#: netbox/templates/ipam/prefix.html:175 msgid "Prefix Details" msgstr "Præfiksdetaljer" -#: netbox/templates/ipam/prefix.html:185 +#: netbox/templates/ipam/prefix.html:181 msgid "Network Address" msgstr "Netværksadresse" -#: netbox/templates/ipam/prefix.html:189 +#: netbox/templates/ipam/prefix.html:185 msgid "Network Mask" msgstr "Netværksmaske" -#: netbox/templates/ipam/prefix.html:193 +#: netbox/templates/ipam/prefix.html:189 msgid "Wildcard Mask" msgstr "Jokertegnmaske" -#: netbox/templates/ipam/prefix.html:197 +#: netbox/templates/ipam/prefix.html:193 msgid "Broadcast Address" msgstr "Broadcast-adresse" @@ -14078,14 +14718,30 @@ msgstr "Import af L2VPN'er" msgid "Exporting L2VPNs" msgstr "Eksport af L2VPN'er" -#: netbox/templates/ipam/vlan.html:88 +#: netbox/templates/ipam/vlan.html:66 +msgid "Q-in-Q Role" +msgstr "Q-in-Q-rolle" + +#: netbox/templates/ipam/vlan.html:104 msgid "Add a Prefix" msgstr "Tilføj et præfiks" +#: netbox/templates/ipam/vlan.html:114 +msgid "Customer VLANs" +msgstr "Kunde-VLAN'er" + +#: netbox/templates/ipam/vlan.html:118 +msgid "Add a VLAN" +msgstr "Tilføj et VLAN" + #: netbox/templates/ipam/vlangroup.html:18 msgid "Add VLAN" msgstr "Tilføj VLAN" +#: netbox/templates/ipam/vlantranslationpolicy.html:51 +msgid "Add Rule" +msgstr "Tilføj regel" + #: netbox/templates/ipam/vrf.html:16 msgid "Route Distinguisher" msgstr "Ruteadskillelse" @@ -14163,7 +14819,7 @@ msgstr "" #: netbox/templates/tenancy/contact.html:18 netbox/tenancy/filtersets.py:147 #: netbox/tenancy/forms/bulk_edit.py:137 -#: netbox/tenancy/forms/filtersets.py:102 netbox/tenancy/forms/forms.py:56 +#: netbox/tenancy/forms/filtersets.py:102 netbox/tenancy/forms/forms.py:57 #: netbox/tenancy/forms/model_forms.py:106 #: netbox/tenancy/forms/model_forms.py:130 #: netbox/tenancy/tables/contacts.py:98 @@ -14181,7 +14837,7 @@ msgid "Phone" msgstr "Telefonen" #: netbox/templates/tenancy/contactgroup.html:18 -#: netbox/tenancy/forms/forms.py:66 netbox/tenancy/forms/model_forms.py:75 +#: netbox/tenancy/forms/forms.py:67 netbox/tenancy/forms/model_forms.py:75 msgid "Contact Group" msgstr "Kontaktgruppe" @@ -14190,7 +14846,7 @@ msgid "Add Contact Group" msgstr "Tilføj kontaktgruppe" #: netbox/templates/tenancy/contactrole.html:15 -#: netbox/tenancy/filtersets.py:152 netbox/tenancy/forms/forms.py:61 +#: netbox/tenancy/filtersets.py:152 netbox/tenancy/forms/forms.py:62 #: netbox/tenancy/forms/model_forms.py:87 msgid "Contact Role" msgstr "Kontaktrolle" @@ -14204,8 +14860,8 @@ msgid "Add Tenant" msgstr "Tilføj lejer" #: netbox/templates/tenancy/tenantgroup.html:26 -#: netbox/tenancy/forms/model_forms.py:32 netbox/tenancy/tables/columns.py:51 -#: netbox/tenancy/tables/columns.py:61 +#: netbox/tenancy/forms/model_forms.py:32 netbox/tenancy/tables/columns.py:36 +#: netbox/tenancy/tables/columns.py:46 msgid "Tenant Group" msgstr "Lejergruppe" @@ -14236,21 +14892,21 @@ msgstr "Begrænsninger" msgid "Assigned Users" msgstr "Tildelte brugere" -#: netbox/templates/virtualization/cluster.html:52 +#: netbox/templates/virtualization/cluster.html:56 msgid "Allocated Resources" msgstr "Tildelte ressourcer" -#: netbox/templates/virtualization/cluster.html:55 +#: netbox/templates/virtualization/cluster.html:59 #: netbox/templates/virtualization/virtualmachine.html:125 msgid "Virtual CPUs" msgstr "Virtuelle CPU'er" -#: netbox/templates/virtualization/cluster.html:59 +#: netbox/templates/virtualization/cluster.html:63 #: netbox/templates/virtualization/virtualmachine.html:129 msgid "Memory" msgstr "Hukommelse" -#: netbox/templates/virtualization/cluster.html:69 +#: netbox/templates/virtualization/cluster.html:73 #: netbox/templates/virtualization/virtualmachine.html:140 msgid "Disk Space" msgstr "Diskplads" @@ -14286,13 +14942,13 @@ msgid "Add Cluster" msgstr "Tilføj klynge" #: netbox/templates/virtualization/clustergroup.html:19 -#: netbox/virtualization/forms/model_forms.py:50 +#: netbox/virtualization/forms/model_forms.py:53 msgid "Cluster Group" msgstr "Klyngegruppe" #: netbox/templates/virtualization/clustertype.html:19 #: netbox/templates/virtualization/virtualmachine.html:110 -#: netbox/virtualization/forms/model_forms.py:36 +#: netbox/virtualization/forms/model_forms.py:39 msgid "Cluster Type" msgstr "Klyngetype" @@ -14301,8 +14957,8 @@ msgid "Virtual Disk" msgstr "Virtuel disk" #: netbox/templates/virtualization/virtualmachine.html:122 -#: netbox/virtualization/forms/bulk_edit.py:190 -#: netbox/virtualization/forms/model_forms.py:224 +#: netbox/virtualization/forms/bulk_edit.py:172 +#: netbox/virtualization/forms/model_forms.py:231 msgid "Resources" msgstr "Ressourcer" @@ -14310,10 +14966,6 @@ msgstr "Ressourcer" msgid "Add Virtual Disk" msgstr "Tilføj virtuel disk" -#: netbox/templates/virtualization/virtualmachine/render_config.html:70 -msgid "No configuration template has been assigned for this virtual machine." -msgstr "" - #: netbox/templates/vpn/ikepolicy.html:10 #: netbox/templates/vpn/ipsecprofile.html:33 netbox/vpn/tables/crypto.py:166 msgid "IKE Policy" @@ -14336,7 +14988,7 @@ msgstr "Vis hemmelighed" #: netbox/templates/vpn/ipsecpolicy.html:45 #: netbox/templates/vpn/ipsecprofile.html:52 #: netbox/templates/vpn/ipsecprofile.html:77 -#: netbox/vpn/forms/model_forms.py:316 netbox/vpn/forms/model_forms.py:352 +#: netbox/vpn/forms/model_forms.py:317 netbox/vpn/forms/model_forms.py:354 #: netbox/vpn/tables/crypto.py:68 netbox/vpn/tables/crypto.py:134 msgid "Proposals" msgstr "Forslag" @@ -14382,12 +15034,12 @@ msgid "IPSec Policy" msgstr "IPsec-politik" #: netbox/templates/vpn/ipsecpolicy.html:21 netbox/vpn/forms/bulk_edit.py:210 -#: netbox/vpn/models/crypto.py:193 +#: netbox/vpn/models/crypto.py:191 msgid "PFS group" msgstr "PFS-gruppe" #: netbox/templates/vpn/ipsecprofile.html:10 -#: netbox/vpn/forms/model_forms.py:54 +#: netbox/vpn/forms/model_forms.py:55 msgid "IPSec Profile" msgstr "IPsec-profil" @@ -14413,10 +15065,6 @@ msgstr "L2VPN Egenskaber" msgid "Add a Termination" msgstr "Tilføj en opsigelse" -#: netbox/templates/vpn/tunnel.html:9 -msgid "Add Termination" -msgstr "Tilføj opsigelse" - #: netbox/templates/vpn/tunnel.html:37 netbox/vpn/forms/bulk_edit.py:49 #: netbox/vpn/forms/bulk_import.py:48 netbox/vpn/forms/filtersets.py:57 msgid "Encapsulation" @@ -14424,7 +15072,7 @@ msgstr "Indkapsling" #: netbox/templates/vpn/tunnel.html:41 netbox/vpn/forms/bulk_edit.py:55 #: netbox/vpn/forms/bulk_import.py:53 netbox/vpn/forms/filtersets.py:64 -#: netbox/vpn/models/crypto.py:250 netbox/vpn/tables/tunnels.py:51 +#: netbox/vpn/models/crypto.py:246 netbox/vpn/tables/tunnels.py:51 msgid "IPSec profile" msgstr "IPsec-profil" @@ -14447,8 +15095,8 @@ msgid "Tunnel Termination" msgstr "Tunnelafslutning" #: netbox/templates/vpn/tunneltermination.html:35 -#: netbox/vpn/forms/bulk_import.py:107 netbox/vpn/forms/model_forms.py:102 -#: netbox/vpn/forms/model_forms.py:138 netbox/vpn/forms/model_forms.py:247 +#: netbox/vpn/forms/bulk_import.py:107 netbox/vpn/forms/model_forms.py:103 +#: netbox/vpn/forms/model_forms.py:139 netbox/vpn/forms/model_forms.py:248 #: netbox/vpn/tables/tunnels.py:101 msgid "Outside IP" msgstr "Udenfor IP" @@ -14471,7 +15119,7 @@ msgctxt "Abbreviation for megahertz" msgid "MHz" msgstr "MHz" -#: netbox/templates/wireless/wirelesslan.html:57 +#: netbox/templates/wireless/wirelesslan.html:65 msgid "Attached Interfaces" msgstr "Vedhæftede grænseflader" @@ -14480,7 +15128,7 @@ msgid "Add Wireless LAN" msgstr "Tilføj trådløst LAN" #: netbox/templates/wireless/wirelesslangroup.html:26 -#: netbox/wireless/forms/model_forms.py:28 +#: netbox/wireless/forms/model_forms.py:29 msgid "Wireless LAN Group" msgstr "Trådløs LAN-gruppe" @@ -14492,13 +15140,6 @@ msgstr "Tilføj trådløs LAN-gruppe" msgid "Link Properties" msgstr "Linkegenskaber" -#: netbox/templates/wireless/wirelesslink.html:38 -#: netbox/wireless/forms/bulk_edit.py:129 -#: netbox/wireless/forms/filtersets.py:102 -#: netbox/wireless/forms/model_forms.py:165 -msgid "Distance" -msgstr "Afstand" - #: netbox/tenancy/filtersets.py:28 msgid "Parent contact group (ID)" msgstr "Forældrekontaktgruppe (ID)" @@ -14569,47 +15210,47 @@ msgstr "kontaktgruppe" msgid "contact groups" msgstr "kontaktgrupper" -#: netbox/tenancy/models/contacts.py:48 +#: netbox/tenancy/models/contacts.py:42 msgid "contact role" msgstr "kontaktrolle" -#: netbox/tenancy/models/contacts.py:49 +#: netbox/tenancy/models/contacts.py:43 msgid "contact roles" msgstr "kontaktroller" -#: netbox/tenancy/models/contacts.py:68 +#: netbox/tenancy/models/contacts.py:63 msgid "title" msgstr "titel" -#: netbox/tenancy/models/contacts.py:73 +#: netbox/tenancy/models/contacts.py:68 msgid "phone" msgstr "telefon" -#: netbox/tenancy/models/contacts.py:78 +#: netbox/tenancy/models/contacts.py:73 msgid "email" msgstr "e-mail" -#: netbox/tenancy/models/contacts.py:87 +#: netbox/tenancy/models/contacts.py:82 msgid "link" msgstr "link" -#: netbox/tenancy/models/contacts.py:103 +#: netbox/tenancy/models/contacts.py:98 msgid "contact" msgstr "kontakt" -#: netbox/tenancy/models/contacts.py:104 +#: netbox/tenancy/models/contacts.py:99 msgid "contacts" msgstr "kontakter" -#: netbox/tenancy/models/contacts.py:153 +#: netbox/tenancy/models/contacts.py:146 msgid "contact assignment" msgstr "kontaktopgave" -#: netbox/tenancy/models/contacts.py:154 +#: netbox/tenancy/models/contacts.py:147 msgid "contact assignments" msgstr "kontaktopgaver" -#: netbox/tenancy/models/contacts.py:170 +#: netbox/tenancy/models/contacts.py:163 #, python-brace-format msgid "Contacts cannot be assigned to this object type ({type})." msgstr "Kontakter kan ikke tildeles denne objekttype ({type})." @@ -14622,19 +15263,19 @@ msgstr "lejergruppe" msgid "tenant groups" msgstr "lejergrupper" -#: netbox/tenancy/models/tenants.py:70 +#: netbox/tenancy/models/tenants.py:68 msgid "Tenant name must be unique per group." msgstr "Lejernavnet skal være entydigt pr. Gruppe." -#: netbox/tenancy/models/tenants.py:80 +#: netbox/tenancy/models/tenants.py:78 msgid "Tenant slug must be unique per group." msgstr "Lejer-slug skal være unik pr. Gruppe." -#: netbox/tenancy/models/tenants.py:88 +#: netbox/tenancy/models/tenants.py:86 msgid "tenant" msgstr "lejer" -#: netbox/tenancy/models/tenants.py:89 +#: netbox/tenancy/models/tenants.py:87 msgid "tenants" msgstr "lejere" @@ -14860,7 +15501,7 @@ msgstr "symbolet" msgid "tokens" msgstr "tokens" -#: netbox/users/models/users.py:57 netbox/vpn/models/crypto.py:42 +#: netbox/users/models/users.py:57 netbox/vpn/models/crypto.py:43 msgid "group" msgstr "gruppe" @@ -14909,25 +15550,25 @@ msgstr "" msgid "{name} has a key defined but CHOICES is not a list" msgstr "{name} har en nøgle defineret, men CHOICES er ikke en liste" -#: netbox/utilities/conversion.py:19 +#: netbox/utilities/conversion.py:20 msgid "Weight must be a positive number" msgstr "Vægt skal være et positivt tal" -#: netbox/utilities/conversion.py:21 +#: netbox/utilities/conversion.py:22 #, python-brace-format msgid "Invalid value '{weight}' for weight (must be a number)" msgstr "Ugyldig værdi '{weight}'for vægt (skal være et tal)" -#: netbox/utilities/conversion.py:32 netbox/utilities/conversion.py:62 +#: netbox/utilities/conversion.py:33 netbox/utilities/conversion.py:63 #, python-brace-format msgid "Unknown unit {unit}. Must be one of the following: {valid_units}" msgstr "Ukendt enhed {unit}. Skal være en af følgende: {valid_units}" -#: netbox/utilities/conversion.py:45 +#: netbox/utilities/conversion.py:46 msgid "Length must be a positive number" msgstr "Længden skal være et positivt tal" -#: netbox/utilities/conversion.py:47 +#: netbox/utilities/conversion.py:48 #, python-brace-format msgid "Invalid value '{length}' for length (must be a number)" msgstr "Ugyldig værdi '{length}'for længden (skal være et tal)" @@ -14945,11 +15586,11 @@ msgstr "" msgid "More than 50" msgstr "Mere end 50" -#: netbox/utilities/fields.py:30 +#: netbox/utilities/fields.py:29 msgid "RGB color in hexadecimal. Example: " msgstr "RGB-farve i hexadecimalt. Eksempel: " -#: netbox/utilities/fields.py:159 +#: netbox/utilities/fields.py:158 #, python-format msgid "" "%s(%r) is invalid. to_model parameter to CounterCacheField must be a string " @@ -14958,7 +15599,7 @@ msgstr "" "%s(%r) er ugyldig. to_model parameter til counterCacheField skal være en " "streng i formatet 'app.model'" -#: netbox/utilities/fields.py:169 +#: netbox/utilities/fields.py:168 #, python-format msgid "" "%s(%r) is invalid. to_field parameter to CounterCacheField must be a string " @@ -15183,13 +15824,13 @@ msgstr "Ugyldig relateret objektattribut for kolonne“{field}„: {to_field}" msgid "Required column header \"{header}\" not found." msgstr "Påkrævet kolonneoverskrift“{header}„Ikke fundet." -#: netbox/utilities/forms/widgets/apiselect.py:124 +#: netbox/utilities/forms/widgets/apiselect.py:133 #, python-brace-format msgid "Missing required value for dynamic query param: '{dynamic_params}'" msgstr "" "Mangler påkrævet værdi for dynamisk forespørgselsparam: '{dynamic_params}'" -#: netbox/utilities/forms/widgets/apiselect.py:141 +#: netbox/utilities/forms/widgets/apiselect.py:150 #, python-brace-format msgid "Missing required value for static query param: '{static_params}'" msgstr "" @@ -15316,10 +15957,14 @@ msgstr "Søg..." msgid "Search NetBox" msgstr "Søg i NetBox" -#: netbox/utilities/templates/widgets/apiselect.html:7 +#: netbox/utilities/templates/widgets/apiselect.html:8 msgid "Open selector" msgstr "Åbn vælger" +#: netbox/utilities/templates/widgets/apiselect.html:22 +msgid "Quick add" +msgstr "Hurtig tilføjelse" + #: netbox/utilities/templates/widgets/markdown_input.html:6 msgid "Write" msgstr "Skrive" @@ -15353,111 +15998,117 @@ msgstr "" "{class_name} har intet queryset defineret. ObjectPermissionRequiredMixin må " "kun bruges på visninger, der definerer et basisqueryset" -#: netbox/virtualization/filtersets.py:79 +#: netbox/virtualization/choices.py:50 +msgid "Paused" +msgstr "Pauset" + +#: netbox/virtualization/filtersets.py:45 msgid "Parent group (ID)" msgstr "Forældregruppe (ID)" -#: netbox/virtualization/filtersets.py:85 +#: netbox/virtualization/filtersets.py:51 msgid "Parent group (slug)" msgstr "Forældregruppe (slug)" -#: netbox/virtualization/filtersets.py:89 -#: netbox/virtualization/filtersets.py:141 +#: netbox/virtualization/filtersets.py:55 +#: netbox/virtualization/filtersets.py:107 msgid "Cluster type (ID)" msgstr "Klyngetype (ID)" -#: netbox/virtualization/filtersets.py:151 -#: netbox/virtualization/filtersets.py:271 +#: netbox/virtualization/filtersets.py:117 +#: netbox/virtualization/filtersets.py:237 msgid "Cluster (ID)" msgstr "Klynge (ID)" -#: netbox/virtualization/forms/bulk_edit.py:166 -#: netbox/virtualization/models/virtualmachines.py:115 +#: netbox/virtualization/forms/bulk_edit.py:148 +#: netbox/virtualization/models/virtualmachines.py:110 msgid "vCPUs" msgstr "vCPU'er" -#: netbox/virtualization/forms/bulk_edit.py:170 +#: netbox/virtualization/forms/bulk_edit.py:152 msgid "Memory (MB)" msgstr "Hukommelse (MB)" -#: netbox/virtualization/forms/bulk_edit.py:174 +#: netbox/virtualization/forms/bulk_edit.py:156 msgid "Disk (MB)" msgstr "Disk (MB)" -#: netbox/virtualization/forms/bulk_edit.py:334 -#: netbox/virtualization/forms/filtersets.py:251 +#: netbox/virtualization/forms/bulk_edit.py:324 +#: netbox/virtualization/forms/filtersets.py:256 msgid "Size (MB)" msgstr "Størrelse (MB)" -#: netbox/virtualization/forms/bulk_import.py:44 +#: netbox/virtualization/forms/bulk_import.py:45 msgid "Type of cluster" msgstr "Type klynge" -#: netbox/virtualization/forms/bulk_import.py:51 +#: netbox/virtualization/forms/bulk_import.py:52 msgid "Assigned cluster group" msgstr "Tildelt klyngegruppe" -#: netbox/virtualization/forms/bulk_import.py:96 +#: netbox/virtualization/forms/bulk_import.py:102 msgid "Assigned cluster" msgstr "Tildelt klynge" -#: netbox/virtualization/forms/bulk_import.py:103 +#: netbox/virtualization/forms/bulk_import.py:109 msgid "Assigned device within cluster" msgstr "Tildelt enhed inden for klynge" -#: netbox/virtualization/forms/filtersets.py:183 +#: netbox/virtualization/forms/filtersets.py:188 msgid "Serial number" msgstr "Serienummer" -#: netbox/virtualization/forms/model_forms.py:153 +#: netbox/virtualization/forms/model_forms.py:158 #, python-brace-format msgid "" -"{device} belongs to a different site ({device_site}) than the cluster " -"({cluster_site})" +"{device} belongs to a different {scope_field} ({device_scope}) than the " +"cluster ({cluster_scope})" msgstr "" +"{device} tilhører en anden {scope_field} ({device_scope}) end klyngen " +"({cluster_scope})" -#: netbox/virtualization/forms/model_forms.py:192 +#: netbox/virtualization/forms/model_forms.py:199 msgid "Optionally pin this VM to a specific host device within the cluster" msgstr "Fastgør eventuelt denne VM til en bestemt værtsenhed i klyngen" -#: netbox/virtualization/forms/model_forms.py:221 +#: netbox/virtualization/forms/model_forms.py:228 msgid "Site/Cluster" msgstr "Område/Cluster" -#: netbox/virtualization/forms/model_forms.py:244 +#: netbox/virtualization/forms/model_forms.py:251 msgid "Disk size is managed via the attachment of virtual disks." msgstr "Diskstørrelse styres via vedhæftning af virtuelle diske." -#: netbox/virtualization/forms/model_forms.py:372 -#: netbox/virtualization/tables/virtualmachines.py:111 +#: netbox/virtualization/forms/model_forms.py:405 +#: netbox/virtualization/tables/virtualmachines.py:81 msgid "Disk" msgstr "Disken" -#: netbox/virtualization/models/clusters.py:25 +#: netbox/virtualization/models/clusters.py:26 msgid "cluster type" msgstr "klyngetype" -#: netbox/virtualization/models/clusters.py:26 +#: netbox/virtualization/models/clusters.py:27 msgid "cluster types" msgstr "klyngetyper" -#: netbox/virtualization/models/clusters.py:45 +#: netbox/virtualization/models/clusters.py:43 msgid "cluster group" msgstr "klyngegruppe" -#: netbox/virtualization/models/clusters.py:46 +#: netbox/virtualization/models/clusters.py:44 msgid "cluster groups" msgstr "klyngegrupper" -#: netbox/virtualization/models/clusters.py:121 +#: netbox/virtualization/models/clusters.py:110 msgid "cluster" msgstr "klynge" -#: netbox/virtualization/models/clusters.py:122 +#: netbox/virtualization/models/clusters.py:111 msgid "clusters" msgstr "klynger" -#: netbox/virtualization/models/clusters.py:141 +#: netbox/virtualization/models/clusters.py:137 #, python-brace-format msgid "" "{count} devices are assigned as hosts for this cluster but are not in site " @@ -15466,47 +16117,56 @@ msgstr "" "{count} enheder er tildelt som hostene til dette cluster, men er ikke på " "område {site}" -#: netbox/virtualization/models/virtualmachines.py:123 +#: netbox/virtualization/models/clusters.py:144 +#, python-brace-format +msgid "" +"{count} devices are assigned as hosts for this cluster but are not in " +"location {location}" +msgstr "" +"{count} enheder er tildelt som værter til denne klynge, men er ikke placeret" +" {location}" + +#: netbox/virtualization/models/virtualmachines.py:118 msgid "memory (MB)" msgstr "hukommelse (MB)" -#: netbox/virtualization/models/virtualmachines.py:128 +#: netbox/virtualization/models/virtualmachines.py:123 msgid "disk (MB)" msgstr "disk (MB)" -#: netbox/virtualization/models/virtualmachines.py:166 +#: netbox/virtualization/models/virtualmachines.py:161 msgid "Virtual machine name must be unique per cluster." msgstr "Navnet på den virtuelle maskine skal være entydigt pr. klynge." -#: netbox/virtualization/models/virtualmachines.py:169 +#: netbox/virtualization/models/virtualmachines.py:164 msgid "virtual machine" msgstr "virtuel maskine" -#: netbox/virtualization/models/virtualmachines.py:170 +#: netbox/virtualization/models/virtualmachines.py:165 msgid "virtual machines" msgstr "virtuelle maskiner" -#: netbox/virtualization/models/virtualmachines.py:184 +#: netbox/virtualization/models/virtualmachines.py:176 msgid "A virtual machine must be assigned to a site and/or cluster." msgstr "En virtuel maskine skal tildeles et område og/eller et cluster." -#: netbox/virtualization/models/virtualmachines.py:191 +#: netbox/virtualization/models/virtualmachines.py:183 #, python-brace-format msgid "" "The selected cluster ({cluster}) is not assigned to this site ({site})." msgstr "Det valgte cluster ({cluster}) er ikke tildelt dette område ({site})." -#: netbox/virtualization/models/virtualmachines.py:198 +#: netbox/virtualization/models/virtualmachines.py:190 msgid "Must specify a cluster when assigning a host device." msgstr "Skal angive en klynge, når du tildeler en værtsenhed." -#: netbox/virtualization/models/virtualmachines.py:203 +#: netbox/virtualization/models/virtualmachines.py:195 #, python-brace-format msgid "" "The selected device ({device}) is not assigned to this cluster ({cluster})." msgstr "Den valgte enhed ({device}) er ikke tildelt denne klynge ({cluster})." -#: netbox/virtualization/models/virtualmachines.py:215 +#: netbox/virtualization/models/virtualmachines.py:207 #, python-brace-format msgid "" "The specified disk size ({size}) must match the aggregate size of assigned " @@ -15515,17 +16175,17 @@ msgstr "" "Den angivne diskstørrelse ({size}) skal matche den samlede størrelse af " "tildelte virtuelle diske ({total_size})." -#: netbox/virtualization/models/virtualmachines.py:229 +#: netbox/virtualization/models/virtualmachines.py:221 #, python-brace-format msgid "Must be an IPv{family} address. ({ip} is an IPv{version} address.)" msgstr "Skal være en IPV{family} adresse. ({ip} er en IPV{version} adresse.)" -#: netbox/virtualization/models/virtualmachines.py:238 +#: netbox/virtualization/models/virtualmachines.py:230 #, python-brace-format msgid "The specified IP address ({ip}) is not assigned to this VM." msgstr "Den angivne IP-adresse ({ip}) er ikke tildelt denne VM." -#: netbox/virtualization/models/virtualmachines.py:396 +#: netbox/virtualization/models/virtualmachines.py:376 #, python-brace-format msgid "" "The selected parent interface ({parent}) belongs to a different virtual " @@ -15534,7 +16194,7 @@ msgstr "" "Den valgte overordnede grænseflade ({parent}) tilhører en anden virtuel " "maskine ({virtual_machine})." -#: netbox/virtualization/models/virtualmachines.py:411 +#: netbox/virtualization/models/virtualmachines.py:391 #, python-brace-format msgid "" "The selected bridge interface ({bridge}) belongs to a different virtual " @@ -15543,7 +16203,7 @@ msgstr "" "Den valgte brogrænseflade ({bridge}) tilhører en anden virtuel maskine " "({virtual_machine})." -#: netbox/virtualization/models/virtualmachines.py:422 +#: netbox/virtualization/models/virtualmachines.py:402 #, python-brace-format msgid "" "The untagged VLAN ({untagged_vlan}) must belong to the same site as the " @@ -15552,24 +16212,24 @@ msgstr "" "Den umærkede VLAN ({untagged_vlan}) skal tilhøre det samme område som " "grænsefladens overordnede virtuelle maskine, eller den skal være global." -#: netbox/virtualization/models/virtualmachines.py:434 +#: netbox/virtualization/models/virtualmachines.py:414 msgid "size (MB)" msgstr "størrelse (MB)" -#: netbox/virtualization/models/virtualmachines.py:438 +#: netbox/virtualization/models/virtualmachines.py:418 msgid "virtual disk" msgstr "virtuel disk" -#: netbox/virtualization/models/virtualmachines.py:439 +#: netbox/virtualization/models/virtualmachines.py:419 msgid "virtual disks" msgstr "virtuelle diske" -#: netbox/virtualization/views.py:273 +#: netbox/virtualization/views.py:289 #, python-brace-format msgid "Added {count} devices to cluster {cluster}" msgstr "Tilføjet {count} enheder til klynge {cluster}" -#: netbox/virtualization/views.py:308 +#: netbox/virtualization/views.py:324 #, python-brace-format msgid "Removed {count} devices from cluster {cluster}" msgstr "Fjernet {count} enheder fra klynge {cluster}" @@ -15606,14 +16266,6 @@ msgstr "L2TP" msgid "PPTP" msgstr "PPTP" -#: netbox/vpn/choices.py:64 -msgid "Hub" -msgstr "Hub" - -#: netbox/vpn/choices.py:65 -msgid "Spoke" -msgstr "Talede" - #: netbox/vpn/choices.py:88 msgid "Aggressive" msgstr "Aggressiv" @@ -15731,26 +16383,26 @@ msgstr "VLAN (navn)" msgid "Tunnel group" msgstr "Tunnelgruppe" -#: netbox/vpn/forms/bulk_edit.py:117 netbox/vpn/models/crypto.py:47 +#: netbox/vpn/forms/bulk_edit.py:117 netbox/vpn/models/crypto.py:48 msgid "SA lifetime" msgstr "SA levetid" -#: netbox/vpn/forms/bulk_edit.py:151 netbox/wireless/forms/bulk_edit.py:79 -#: netbox/wireless/forms/bulk_edit.py:126 -#: netbox/wireless/forms/filtersets.py:64 -#: netbox/wireless/forms/filtersets.py:98 +#: netbox/vpn/forms/bulk_edit.py:151 netbox/wireless/forms/bulk_edit.py:81 +#: netbox/wireless/forms/bulk_edit.py:129 +#: netbox/wireless/forms/filtersets.py:67 +#: netbox/wireless/forms/filtersets.py:126 msgid "Pre-shared key" msgstr "Foruddelt nøgle" #: netbox/vpn/forms/bulk_edit.py:237 netbox/vpn/forms/bulk_import.py:239 -#: netbox/vpn/forms/filtersets.py:199 netbox/vpn/forms/model_forms.py:370 +#: netbox/vpn/forms/filtersets.py:199 netbox/vpn/forms/model_forms.py:373 #: netbox/vpn/models/crypto.py:104 msgid "IKE policy" msgstr "IKE-politik" #: netbox/vpn/forms/bulk_edit.py:242 netbox/vpn/forms/bulk_import.py:244 -#: netbox/vpn/forms/filtersets.py:204 netbox/vpn/forms/model_forms.py:374 -#: netbox/vpn/models/crypto.py:209 +#: netbox/vpn/forms/filtersets.py:204 netbox/vpn/forms/model_forms.py:377 +#: netbox/vpn/models/crypto.py:207 msgid "IPSec policy" msgstr "IPsec-politik" @@ -15758,10 +16410,6 @@ msgstr "IPsec-politik" msgid "Tunnel encapsulation" msgstr "Tunnelindkapsling" -#: netbox/vpn/forms/bulk_import.py:83 -msgid "Operational role" -msgstr "Operationel rolle" - #: netbox/vpn/forms/bulk_import.py:90 msgid "Parent device of assigned interface" msgstr "Overordnet enhed til tildelt grænseflade" @@ -15778,7 +16426,7 @@ msgstr "Enheds- eller virtuel maskingrænseflade" msgid "IKE proposal(s)" msgstr "IKE-forslag" -#: netbox/vpn/forms/bulk_import.py:215 netbox/vpn/models/crypto.py:197 +#: netbox/vpn/forms/bulk_import.py:215 netbox/vpn/models/crypto.py:195 msgid "Diffie-Hellman group for Perfect Forward Secrecy" msgstr "Diffie-Hellman-gruppe til Perfect Forward Secrecy" @@ -15823,7 +16471,7 @@ msgid "IKE version" msgstr "IKE-udgave" #: netbox/vpn/forms/filtersets.py:142 netbox/vpn/forms/filtersets.py:175 -#: netbox/vpn/forms/model_forms.py:298 netbox/vpn/forms/model_forms.py:334 +#: netbox/vpn/forms/model_forms.py:299 netbox/vpn/forms/model_forms.py:336 msgid "Proposal" msgstr "Forslag" @@ -15831,32 +16479,28 @@ msgstr "Forslag" msgid "Assigned Object Type" msgstr "Tildelt objekttype" -#: netbox/vpn/forms/model_forms.py:95 netbox/vpn/forms/model_forms.py:130 -#: netbox/vpn/forms/model_forms.py:240 netbox/vpn/tables/tunnels.py:91 +#: netbox/vpn/forms/model_forms.py:96 netbox/vpn/forms/model_forms.py:131 +#: netbox/vpn/forms/model_forms.py:241 netbox/vpn/tables/tunnels.py:91 msgid "Tunnel interface" msgstr "Tunnelgrænseflade" -#: netbox/vpn/forms/model_forms.py:150 +#: netbox/vpn/forms/model_forms.py:151 msgid "First Termination" msgstr "Første opsigelse" -#: netbox/vpn/forms/model_forms.py:153 +#: netbox/vpn/forms/model_forms.py:154 msgid "Second Termination" msgstr "Anden opsigelse" -#: netbox/vpn/forms/model_forms.py:197 +#: netbox/vpn/forms/model_forms.py:198 msgid "This parameter is required when defining a termination." msgstr "Denne parameter er påkrævet, når der defineres en opsigelse." -#: netbox/vpn/forms/model_forms.py:320 netbox/vpn/forms/model_forms.py:356 -msgid "Policy" -msgstr "Politik" - -#: netbox/vpn/forms/model_forms.py:487 +#: netbox/vpn/forms/model_forms.py:490 msgid "A termination must specify an interface or VLAN." msgstr "En opsigelse skal angive en grænseflade eller VLAN." -#: netbox/vpn/forms/model_forms.py:489 +#: netbox/vpn/forms/model_forms.py:492 msgid "" "A termination can only have one terminating object (an interface or VLAN)." msgstr "" @@ -15871,31 +16515,31 @@ msgstr "krypteringsalgoritme" msgid "authentication algorithm" msgstr "autentificeringsalgoritme" -#: netbox/vpn/models/crypto.py:44 +#: netbox/vpn/models/crypto.py:45 msgid "Diffie-Hellman group ID" msgstr "Diffie-Hellman gruppe-ID" -#: netbox/vpn/models/crypto.py:50 +#: netbox/vpn/models/crypto.py:51 msgid "Security association lifetime (in seconds)" msgstr "Sikkerhedsforeningens levetid (i sekunder)" -#: netbox/vpn/models/crypto.py:59 +#: netbox/vpn/models/crypto.py:60 msgid "IKE proposal" msgstr "IKE-forslag" -#: netbox/vpn/models/crypto.py:60 +#: netbox/vpn/models/crypto.py:61 msgid "IKE proposals" msgstr "IKE-forslag" -#: netbox/vpn/models/crypto.py:76 +#: netbox/vpn/models/crypto.py:75 msgid "version" msgstr "udgave" -#: netbox/vpn/models/crypto.py:88 netbox/vpn/models/crypto.py:190 +#: netbox/vpn/models/crypto.py:88 netbox/vpn/models/crypto.py:188 msgid "proposals" msgstr "forslag" -#: netbox/vpn/models/crypto.py:91 netbox/wireless/models.py:39 +#: netbox/vpn/models/crypto.py:91 netbox/wireless/models.py:41 msgid "pre-shared key" msgstr "foruddelt nøgle" @@ -15903,19 +16547,19 @@ msgstr "foruddelt nøgle" msgid "IKE policies" msgstr "IKE politikker" -#: netbox/vpn/models/crypto.py:118 +#: netbox/vpn/models/crypto.py:115 msgid "Mode is required for selected IKE version" msgstr "Tilstand er påkrævet for valgt IKE-version" -#: netbox/vpn/models/crypto.py:122 +#: netbox/vpn/models/crypto.py:119 msgid "Mode cannot be used for selected IKE version" msgstr "Tilstand kan ikke bruges til valgt IKE-version" -#: netbox/vpn/models/crypto.py:136 +#: netbox/vpn/models/crypto.py:134 msgid "encryption" msgstr "kryptering" -#: netbox/vpn/models/crypto.py:141 +#: netbox/vpn/models/crypto.py:140 msgid "authentication" msgstr "autentificering" @@ -15935,32 +16579,32 @@ msgstr "IPsec-forslag" msgid "IPSec proposals" msgstr "IPsec-forslag" -#: netbox/vpn/models/crypto.py:178 +#: netbox/vpn/models/crypto.py:175 msgid "Encryption and/or authentication algorithm must be defined" msgstr "Kryptering og/eller autentificeringsalgoritme skal defineres" -#: netbox/vpn/models/crypto.py:210 +#: netbox/vpn/models/crypto.py:208 msgid "IPSec policies" msgstr "IPsec-politikker" -#: netbox/vpn/models/crypto.py:251 +#: netbox/vpn/models/crypto.py:247 msgid "IPSec profiles" msgstr "IPsec-profiler" -#: netbox/vpn/models/l2vpn.py:116 +#: netbox/vpn/models/l2vpn.py:113 msgid "L2VPN termination" msgstr "L2VPN-opsigelse" -#: netbox/vpn/models/l2vpn.py:117 +#: netbox/vpn/models/l2vpn.py:114 msgid "L2VPN terminations" msgstr "L2VPN-opsigelser" -#: netbox/vpn/models/l2vpn.py:135 +#: netbox/vpn/models/l2vpn.py:129 #, python-brace-format msgid "L2VPN Termination already assigned ({assigned_object})" msgstr "L2VPN-opsigelse er allerede tildelt ({assigned_object})" -#: netbox/vpn/models/l2vpn.py:147 +#: netbox/vpn/models/l2vpn.py:141 #, python-brace-format msgid "" "{l2vpn_type} L2VPNs cannot have more than two terminations; found " @@ -15977,35 +16621,35 @@ msgstr "tunnelgruppe" msgid "tunnel groups" msgstr "tunnelgrupper" -#: netbox/vpn/models/tunnels.py:53 +#: netbox/vpn/models/tunnels.py:51 msgid "encapsulation" msgstr "indkapsling" -#: netbox/vpn/models/tunnels.py:72 +#: netbox/vpn/models/tunnels.py:70 msgid "tunnel ID" msgstr "Tunnel-ID" -#: netbox/vpn/models/tunnels.py:94 +#: netbox/vpn/models/tunnels.py:92 msgid "tunnel" msgstr "tunnel" -#: netbox/vpn/models/tunnels.py:95 +#: netbox/vpn/models/tunnels.py:93 msgid "tunnels" msgstr "tunneler" -#: netbox/vpn/models/tunnels.py:153 +#: netbox/vpn/models/tunnels.py:148 msgid "An object may be terminated to only one tunnel at a time." msgstr "Et objekt må kun afsluttes til en tunnel ad gangen." -#: netbox/vpn/models/tunnels.py:156 +#: netbox/vpn/models/tunnels.py:151 msgid "tunnel termination" msgstr "tunnelafslutning" -#: netbox/vpn/models/tunnels.py:157 +#: netbox/vpn/models/tunnels.py:152 msgid "tunnel terminations" msgstr "tunnelafslutninger" -#: netbox/vpn/models/tunnels.py:174 +#: netbox/vpn/models/tunnels.py:169 #, python-brace-format msgid "{name} is already attached to a tunnel ({tunnel})." msgstr "{name} er allerede knyttet til en tunnel ({tunnel})." @@ -16066,51 +16710,44 @@ msgstr "WPA Personlig (PSK)" msgid "WPA Enterprise" msgstr "WPA-virksomhed" -#: netbox/wireless/forms/bulk_edit.py:73 -#: netbox/wireless/forms/bulk_edit.py:120 -#: netbox/wireless/forms/bulk_import.py:68 -#: netbox/wireless/forms/bulk_import.py:71 -#: netbox/wireless/forms/bulk_import.py:110 -#: netbox/wireless/forms/bulk_import.py:113 -#: netbox/wireless/forms/filtersets.py:59 -#: netbox/wireless/forms/filtersets.py:93 +#: netbox/wireless/forms/bulk_edit.py:75 +#: netbox/wireless/forms/bulk_edit.py:123 +#: netbox/wireless/forms/bulk_import.py:70 +#: netbox/wireless/forms/bulk_import.py:73 +#: netbox/wireless/forms/bulk_import.py:115 +#: netbox/wireless/forms/bulk_import.py:118 +#: netbox/wireless/forms/filtersets.py:62 +#: netbox/wireless/forms/filtersets.py:121 msgid "Authentication cipher" msgstr "Autentificeringskryptering" -#: netbox/wireless/forms/bulk_edit.py:134 -#: netbox/wireless/forms/bulk_import.py:116 -#: netbox/wireless/forms/bulk_import.py:119 -#: netbox/wireless/forms/filtersets.py:106 -msgid "Distance unit" -msgstr "Afstandsenhed" - -#: netbox/wireless/forms/bulk_import.py:52 +#: netbox/wireless/forms/bulk_import.py:54 msgid "Bridged VLAN" msgstr "Broet VLAN" -#: netbox/wireless/forms/bulk_import.py:89 -#: netbox/wireless/tables/wirelesslink.py:28 +#: netbox/wireless/forms/bulk_import.py:94 +#: netbox/wireless/tables/wirelesslink.py:27 msgid "Interface A" msgstr "Grænseflade A" -#: netbox/wireless/forms/bulk_import.py:93 -#: netbox/wireless/tables/wirelesslink.py:37 +#: netbox/wireless/forms/bulk_import.py:98 +#: netbox/wireless/tables/wirelesslink.py:36 msgid "Interface B" msgstr "Grænseflade B" -#: netbox/wireless/forms/model_forms.py:161 +#: netbox/wireless/forms/model_forms.py:164 msgid "Side B" msgstr "Side B" -#: netbox/wireless/models.py:31 +#: netbox/wireless/models.py:32 msgid "authentication cipher" msgstr "autentificeringskryptering" -#: netbox/wireless/models.py:69 +#: netbox/wireless/models.py:72 msgid "wireless LAN group" msgstr "trådløs LAN-gruppe" -#: netbox/wireless/models.py:70 +#: netbox/wireless/models.py:73 msgid "wireless LAN groups" msgstr "trådløse LAN-grupper" @@ -16118,35 +16755,23 @@ msgstr "trådløse LAN-grupper" msgid "wireless LAN" msgstr "trådløst LAN" -#: netbox/wireless/models.py:144 +#: netbox/wireless/models.py:141 msgid "interface A" msgstr "grænseflade A" -#: netbox/wireless/models.py:151 +#: netbox/wireless/models.py:148 msgid "interface B" msgstr "grænseflade B" -#: netbox/wireless/models.py:165 -msgid "distance" -msgstr "afstand" - -#: netbox/wireless/models.py:172 -msgid "distance unit" -msgstr "afstandsenhed" - -#: netbox/wireless/models.py:219 +#: netbox/wireless/models.py:196 msgid "wireless link" msgstr "trådløst link" -#: netbox/wireless/models.py:220 +#: netbox/wireless/models.py:197 msgid "wireless links" msgstr "trådløse links" -#: netbox/wireless/models.py:236 -msgid "Must specify a unit when setting a wireless distance" -msgstr "" - -#: netbox/wireless/models.py:242 netbox/wireless/models.py:248 +#: netbox/wireless/models.py:212 netbox/wireless/models.py:218 #, python-brace-format msgid "{type} is not a wireless interface." msgstr "{type} er ikke en trådløs grænseflade." diff --git a/netbox/translations/es/LC_MESSAGES/django.mo b/netbox/translations/es/LC_MESSAGES/django.mo index 29c90fab3934d7f8281867a1fb519397c2c2d640..e43dbe2595ed00bb465b8c8ef60679339620fb42 100644 GIT binary patch delta 75538 zcmXWkd7zC&AHebBB0Jf4uIya;rJPj#wK~QBy!>!tb$J> zLnZcMjzl7v_<}-y8orGee#c_eFJc}nmM=?!coLW4dTf9*@gR1@KKZjGs^cnbgnO_l z{)3lbqXJnHjqwV!eLA+p7qB1WCw`^SmxlJ2W=UL!E3pISD3~QN4tro*+!p-@>r-!8 zC^!Y1QGXl<;n&y%n-1wM_P@Ow1ydPS%+e&S{dM!E~T;ComXixdqhZXcb2 zcKCGkC_3|^#lq6GjE+Uy@5MIw3c5u9Vr9I%c*xW+OuClKDX3H|^u-47Z>Yc{|pRqM7*(4fNk=-cnf-6{wd%`)iS;;0;~S4hN$% zA0O*Cq5;f9?^}U({8X%Oj_yXE{~x+XzKQK6N{0Zeq1T(D&v!;Mmh2ZVTpce=j2C7^ z=fvv^N0Lo)d&wpJCc6>Ry>)WBn zrwba;G^~MlpiA+5bSGX;{S)-XlfPV+L>+98)~90zZa_Eh=V*Ulqk;U2xjp}h@}c8A zXaMEVO;QO>VTag05Ivq(qXCb_p*SVh51<2miDvFQbW{I{F3ou~;H>Fc5*6_ZOje>W zoPw{$JMjwKiFR-ieRCD8kR{O>d!YfWLTBOUgcPAsUDCDDia6P103Clcq-bKj#%$Y6hT z#zWAh7=^w8ABy!u=x0KKs>v*g;uJbo4QoCOt59Evrs@SWg+JnIJdLLK?rLG6rRbY( zCAt~c;0^dJcEYmN!>8dG98CRPG=mjugiTv384JzO3!S5V(G*`DuTMk=m>I9nM>Dqs zo#_+krrH>NBf39&6utkKXttW6zhp@Y4pb#JG(?Y68+2`Zp~q+xdhD)81Gy93oJ)~& zoOmqOx1;a&572&3p-Xul-PHLq!e>AoWNDI#E)=s9$0vegbV%8w3E z7M)omG&7yi=ZD4XQ)Bxg^u9-9eJgt3UcAKff0Tlo=mZ+!DfDyuFC2(X>x2OAM>Dh< zU83jF%+L&=1i+u?h98 z4Z>$ZbM*Sy=rnY9--Zsf9u4G0bT4f~$JvE7a9{LXl7gwIlo_mv4pbjqvun|m&O+C0 z9@^pJ=!$rKJ=)I(bY`2eKE8&&(tpL8Si52PvN{;cQco_Y(2Bwqtb%`FWh~Pu9J@Br z(dedJfDLdjI>1G&g!LO|Nle9o=%(F^U9e)4@ToWn8&Y3`SK=qw*YjWd^6+lH9sL^p z2KK;z(1E%%4e#n(u{QOWuqqyp=4%$-@eR>{CL$dt)}qg!K{Hsjd02wF=+ZUET%P~V z6ii)TG_`}#7sP0E*G@-21@A(a;5{_O2e2@HftmPAyk6;wusJi(z0d;vjOm7cri{Wm zxCRS*{`XNZHQ%5EmuL|Ns)o*>E;`UCG{BqC&2_P)R7u)l82$?7yt&D8aWTFlQJ8FqW+$-KN6rJffwBy;)Md+q_2>opMAhzf2 z81_hMtVes5SRaILx{+u<6VTIfb4t$N!q~794diL`!{gQ1{t+6;F*LwG(3xfJ6z(gA zcASBB+zd^1*Lb}z`uupb|68N?Vh+#$BNW^uPsIzH(A~Zp{ruh+J%*{;bHW+SwP0oufR7j&Th=-wEK1~?_Q--153FiF9+c>wM3nRvstSbr;C{}`)s{d+XvOS^}T zi=)p~K?7@m4%`V{$^r5E2&_YWGWub*7X8dg9--hnzDSRdfd*)#?a|14pdZUuqaCkA zzr#I=W@ZDX;U@ICt?~NnvA#R{0ovcE=yTs86Gm$&CC&u<$unP70*u>BO=i`Nw=w>;CZoX{2!WW9-=nJI_ zmd06VCRRkBKm*!>ru-FjB5y@M!Vc8Gz)ZZXclg3H5U=q3KS05he2i|QLukau&|~*Y zY`=&Gn4?b!pafd4g5|L>x|ar`oA^3(rt{Fvy#c-db@aadnDoZu6g<}#(9iFJeM7wg z)}`JN&B#sYCb}EVz;+ym@1cR#?-zfshxMrsN0;mYY>yA4$Maic?Gt7DbN+p>QvWdX zOfh~okKI3b3o`Pf3!S$e_eEmnqfQaIDqqS!y+1t zXhpnXEjq(z(HXoF-Gz3v7k%zCG_~JE&&Kvk28PX82%S)Qw72*W%a8< z0QE7y=f4#NcV|y@pk-((SD_KVj=llkLOaNEb;wL^G~nWBKn-Gh3-r0J=qc!fp8I*| zW_}fG;;%Ts^Iv9Y=y)o+duO4)t-2iz=nXVwd(eSCMg#c@o%sn&$J6MS*aE}C05#D2 z2cZ29kL_d8AIq0wvIB*E6x=LDuL-}etAg%I$@ntf zg!QoA$nZ1bNc8#pqwkb^?G3%{Z>&ptLRL22|2*aTB+ zh@SW1(d%OS&9OcgP4#`Tz8uZyqi8@IqHm#r9zg?4o}plb|DeYwZCrSl7ephi5bO2P z2iu@)KQPuuqtDGmU*!vd2)aE2AehZ$y|^(JVCZPCp1 zMVDYanu$5+=~#sBg(b0l6*{3O(1D*rm*{nL#-E{?I)ayY{=cJO2dAQEqZiNtE}0O% z3+6!|yc`XnWvq8aXVx2Q;4pLoccJHh8QRag=*&Mvpa0Uj=l^>Oq$2Sb*2YTLhJpH` zuiz`u&ww%54ws|H_6uBymrV>a+kkG?E$D=PK#%e7=w{1yT?ni=UPk>gOxkgK3Qcf2 z8rk#c1Fxc+@Iy4Er_h=Hj%Fe;DcpYvI^#mIUN+XNqaRk8vAq-ed_Qz4Moi-To0}HRz1CpnKxA=!a>bngMsXdH@p+;AIAE}Xn=>%CHXe`E4s-ppsCJ(eF!uiy}x=i6a5TniB9kqG^6v9 z6bxVy8o+9_qjhM6o6!N^i0vQ5_9N*1KcboWC0_p<4Jh{w!P02TGtf*nMf>lCW+XX+ zf&tuu?#{c>HCu(Q{qynq2k7zp67AqjY|lO=eCQNKKMm`mGwX(CpfCE~7>Wiw6`j~k z$bHGgTna{ZHyY_WbbyWM%y&ljp%H(9c61g^<+)hTIyHRW=R^ajjUK;-=-wEIX*dy` z*kr8h`Cm-IH`VKC0AHX3|A5Zm&sfhgEnLr!&Y%o>Up4f;hG-^RVJgM(`iR&*8SOub zKED`KfBv_Uf*n1EuH}p9%wF{d+=F(!AHDA=+QCog{ePqPXPF*moCj@hfo7^By0qQU z=ZBzyjKicCZj3j~LkD^w)*nM3*o@BTO>}R3jCODWeNUW4*Eq+GVW2Y6n&@*)(SEzd z_N!w1wKsD94PZ764zviX;z~@%ooL73pg*Mkh2B?eMtIXzL5{zMI0{=!}n1?{yRB-wywv!52f?&7s4b*oJy3bTeHY+ee|PzcIGoj!s}9I>Qxc ze@~%-Z$&fpeykrt@BbOS|KDURVG-%HSm7RS`*e_0AfTsc}F-ApafKsrYUqp7|&)@P%~_8#=(^)alC zJ7W7OOl`_p;qL|I!8%+Yhz>j-88?}@mx4F0MrZm2I`CFB)o({XMh85C_3$h7aByzp#wdPm2fjwz(ZIa&tp1P zV(-+%_UO+GH=u98WjGUGL^ol^oM2zHpP87Bt1;8h|JNuq#^2H1U*onga38EjeFi$f zBk1pL_C&MZ9{!}H4R)Y?2|B|=*cX37Gu7&jP@jUGslSc=@Y1=Q|B)0%Q)rFvp~olB zys&#apaBd)*KRJl$+kpKp|9A>?hGmKkL{@6i7x40bkBT>F6~J)z(3K`k$Zmp`M>=9 za2)EO54J=%WoLBP4~X?)@%ltG)i=ia{pem<9owHmpWlO?q626EN721-I(lwCYvgXs zwjdmfyy$T$gf*}@zJ_hkKoSeX8sOL73kh6eOH#mbgYL(vhdq7^h0RJ z-65bi(SY|QDHzdVG$qI54d>$xITwYG*CObQ>!5GKuCaXrn$mgb$MZ^b0xw`g+=@={ z6#BwBgJvY_;;_`of)tFb8~VoUg$-~i?!b4@HJp1-SeoT%z>lBKzT;Gmvwq@vmhtd0v zq0jw9`H;=MWm$cjyxQhz9a|yneyD=Renykjf(HF)JDCoufU_FDQM{4z5Sn@)q>8+>Oq3 z8TvJT4LaaKG=QV%x9Q_p9xtNLmA{|!?~JNb7=?{79am#Dd=1@nC(r@XmWB-EK?5j> z22?$oi5b*eqMLFecEUO6o_Y@*_yU^I91n2*U8`abgjAM7Bd>s|z|d3CIJS2~H&Z_} z^~2G?#-TI40lVW2bP3)<`#BKnN3jz1Q`j6Y^^hSbqeoQhy#jZl9rV)L*d`Hh3uXKMmbWGcm*SpQKP7H^du0LsR`F z8tF+ipwsB4J0Gv-SsmJoVQLAYbz^%AG^1V6{sy8;G$LM~g2^jsxHUE$LI?N`-86ro z9p`#Dq_#NPVR>{(GSJkwh;~Oac@?@8W6=I4p)aN+dU{?)pWFK|=id|^jtynkgzxDY z=-Q9NiFh~qMdNSG#F}fvoAMg0N&P;ohdaa#x$%Euh&8YXo9YJM|6NeSOF(s1}=)% zU%^(4pLm~wYnSKokfJNlHSUEj#XR&g;3YJ`z34z+qf7KFx>x=~@2l`cn0X^KkPhhm z1EXWm%{U#4Gk)TE3f}lOI>15nWAbNo&GJ1NW}J==SQ*Vs1GM87vAuhANOU}UY-hy! z9q4mQ&`lsmHevb~Ecq;7f{OA%jL3eQ*^fx1mur@x94*Uta zWXI6wPoe?;5zY2A=ieI(Q}BlJXuVeSa&+^wM<47H9gfwhUypu2ScN|K64t?8=+ga; zK3DOX&`*7|-V!|}J)YtGH={6s1~=jT@xnuBXj z`kpwCmt(CBSrQ|0EV@VbqCY{MMwg)0bDV!?UjMleQ7bgHozOke2VI(x=$^O{4P-f{ z~*(HU<-19&~w_eZ}#134MZ zu`vWt6@9LLv;~^tE@&qEpn+bAz86NJ0VStVaK^Kv^U)W?5;R52Vtp05c5Bdqo{RNY zqVJ*u97Hqr4W>Rr(EfA15Uv+S11cBl$wXxeEh=Xhx$NlNqrKw!{?)CFdyS5nrsOf=zwORAKKwqG!wJX zju)Wkd~Nh)G@t`m1%E;}SK+N;?bFfct3@->Ot*^HdtlOm22jvzqjRFm&`t6T`ikC+ zrv7-W=YJ_2r&egjl4$DhL-)=mbkA%<19=t5#k+u>9ioWU$K z)r--{A46xf86D_T^vCbx=u%~SB?MX=-Q{J_K&znr)<#p_7=6AydS8DukYPy*?#kKd zfX|@s{8z9$9zZ)R|7zI9Rng^N6(Ykoy zT{QI{qLChr^$X|>3TzL7l|)})70@NAiUw96Jw46PP1zgWLqoAQ-iP#)OngJZ)c=I0 z^a2{`r8`2$#nC{@q65@H*Saa%aR)TTePjFZ*nS;)|IFAv5AA13tgpw^`QJ#vNOzze zeH?E%hN-~NjxL~UnDe#po+yC^l7R-^1bq>8MF$#<-ai9f+WFDt(Z{{+`QJjpj`m=A z{3zCcMKkd)`eMrZdI+#M+F|8b&qPz+1_xnRtcH)F_kDMf-8&iRgd4rd`8UOF z;thSHSD{NW8cpHU=pE?&OVI!yLudF>Y=0}Ze-`WCqXC{n-;@P*hUaTwYIE*PhRA!< zU}R&^3|t@Uv(Y7(j}CNCtUrtf@)$akt>|+*(ZKehzp^=oX6yobU%_3WpR(AIdPb6h z$7dQk&`k8k+psb&j_sS#0AG#nK?mH2bMXuG>-aUhL#jujFS3c~r{5jud*jJ?{aJKV zC$~`WMes&!*n`e=Ke}c|;`Nhg06(Dt{)q;hwkMbiU8+mb`_jb znHWI92S;NMoQ`&|C)|+Oho<@~^uE)v{vQseUf`|JJ^@EipNYQnzrvbW@a?c!uR!}9 zfM)y}Ead0^7z)1AZ;lsMpkE}`U@d$VP38BPi5Ia7X1)_T9D-(WbaVnb^U3l0O!WOQ zH?}_*+aJY7p8pLN@LTl8QtyTiYN4l~3A)xD&Bc?TH355MRd$=x(k4e(2x^^!jXcuiS_3^0nx|o6!Mw zqsQz3w!)K``mNaBaR2DNoc|?UxS58VFwX~J=5x`G??ne%gD%C3=uD2HOK<`mFyDva zL#iyAsb*+EozNLyg*9*-*2bmLT_1A(>(KBU4R%~%U+AzJ`l;6hJp}{M84ZiquR~Kk z8-4T5$LhEm?dNUu&H5p_7e0;kV`zWhV+Q_~q~JTh-2U(bL<>x(emhpe_2`S_U34bL z(V6{*&NTZ+p~FJxT9-yMQUMLH9vVn9^nKD64QPC9PfnxY1G8eoqUZzYj8~((`x&&u zjc6dRpaZ@YukS?z`v?u}JM{VAuqj@|n%ML}_!c|{c|MtVmV&8x5gp(N8sYb7icg{+tECTy(^3mNQ16ar;sI=fYthtx6Fn2nb|?f|6g}?cW4-4g&c6d*NrN-J zCOQdS<5}n?To~(1&;i$=GkzK!a0eRThgcVn#`a4;4-=~pt$~i$0DZ1$GG6G42G9>p z^$2tgZ$NkNY^;K-&`r4$?dWavxew9%zlffU*U!Z3=VN=$!{NRn=<~^R3eL1Dw#Q6# z#xv35b$h(N0v-7ASbqjx`)%mJJJAk5jDCV<>Wk{Q`0tl8KyOgw&NlZ>WK$ zrV%N3R=qVVA1~MwPk4NvjF}BY^Com5UXffLF1L*O41nuVqEa>@viGmNji~d~y z5w^nIUxr^Eb;W_yH=?^Y$5$aU_0f(xp#k=Y^&#l4A0F!y;`Qs%fM%oP&BdIIpIAh} zj+UWo`B1#!=~#ae-4k!%6}S)0P~Icq{<7GbdQEh9Ux)SaVf2g3M`#94qT`%FKeWza z(oebkM?*vzXoQ()ikrpuR%ig7a0m`W@7s)~{#7*aJ?P9nMh7??>%XA){e=de(d$*w>kZNC zZQ}KQ@%lKdOndUiSXhk?xC;&7eRRN2&<>BGGdUgWS-uNvSpdykIy&=AbilUpdjIH{ z=!|%ML8vDat0?&O`&l&N_tDfGjP+w!jrz}M3X2^NftAL$s8_{$UPn(s`4iz7563&H zKZKr!%T9(2_s6c(S7B+-{|O2XkoJ9+#NAjESK&7Fn@gV`!u7@IKrf-+mcPdgtng#_ zSnYumsLw_N`5u>HjZ;|?PvV|m-V+UQ4z|Eecn|)D^KAbmOX3>5=r!B~O%Tx^9;paY!5wpiu&&^`gZ?^&#fAEE*Oh6YyTO!!;%9nkw8KEwI%M&S(_ zCS%^S;XgW^g`=qNM}IEJ{3HAT@*KK$f5dw0Kf~W-T8Q3v1buGcU*R90+JP>`Wq*e~ zF$$YeUxO|2@ZX&OaTH3O3tu$uK##>=*b2*@4}SnT6kUqF=qWgh&M3z}A(fY-0ZhQ# z@LM!PqyG&Vd<;8K--o@i=!KApu}KO&X?Pv`WB&ib-%K2Zy{PB97~bK7(fe*d-*h|C zH{=oY75+CGP%(ZBFfR))9Q0?(eOb~{-y5>0r6nd&&%ieL5c)fzWb)>*Cv>by)Y-8=vIsscz zpNYji|Jx}T@&BS$yyX{pimvxqI=;z^nH*gS6X5UwnFdQjHd8wG?1Us=l(`hd|B==)9P4|`sL^Z zx}qIKqh3GrE)57=vBQ*GB^KW#G^XCa`Sp*HFAy&l+=p=;O)Qy)t4 z`eHms`xTnEL*|kAkT>h^F>yw1X4qOwOa3 z$X+B^ELs)o(B1?MbR3qzNmv`_qZ4}x&EP()g5P607AVU3?@ggD1yg!EdSNYk8s5bE zcnl4!aIrAs66lQ6(e}Er-VmKgdo;y8(SSywnVOAeavu8p{lz%{-uNgDm2n%^z^~#B zIg5vLTLKL*6TQDTdaTBvnVE&I{bH<$kD)Vv7ai~zx@142ul9e?e)5;#{JS|SmIx8m zK|5?2>%Gt$ufb|K9UW*5Ita9jl{^nUHJju0U1+L5kA95?{sVenq0(XC3TS&WlY+bR zYBciU=-S_iMz|b()jo}O{0{ofW`C^bFBA4iF*GBc(c?P;ePdo5or3AqZ$>k|3U6fm z#1jyi}h(}MrNXG{4BZ&UqJ)ejqZUD z&-AS^-T}9ds|Wi0wV2S7RyKuf>LVC%U#f;`Kx5%uk?!{)}es z9C{41R0tC(jj7-NRj|N?I_QH}pi9yYJ;$A}I?h0sXdU|IdkHh}QyhkAmxbLw0`2Ec z^!>3o)>ohbtwl5OET;ba?{x~M>}~XckI(?VKqEhjX5=K=!JlYq(<+9*^Pta{MDMGJ z?uGj3spyIhI2=v=H1tinpd#nr6t9X6&qiNEcmIAgGe^+@e?|xT6P;nAQfSYC_H!w^ z))mmbQahT7KGzhTU^{doJu4+cBtvL0!t2nE=b#S%{e(LlPRYdRQxAzhEoWIj66 zW$3H=Y4pAEHahd~(3GD;1I}JG)i3}48wDRsM?1}(f&R_2R@A6cLL4K8O-hH{{;$uish^pF62W~Ry@`(Lp#VoJ7^NGw~y_; z(C4p00~?M8HXaRNW~?tj`&o%D#p9Uz`~Mp#n1O9*s`jEc9*h2j4*YklXRjXW1DvzXflOVO3@oHE&Rt9~pIvPkrG}EoniS?_=`S*tLH2A=DwBy^+fft|;EJQ@8B4fLOAGH0z2Kv8tcw_V>^nusVf!;#{*@r%OFxJ10^&g{W z(ES%i-G=uF@b6_?8-bVZR5M9DU=o0;eKA)vdFdwG={%=VNo`Nc9WVNGLpaXP6JM4`Hb``ou#-jtw zLT7egbPd|i2K4^z=mg%4?H{9oe2uAp|NH0I@HaY8wz|Or=x#2B4pb8jv?ba>$JpK% z4RkE}{KR;D2AY{Wq6^Xf?nRgMk-D6JBYT<#Bi)Q1n>XVPAIJ7D(EGkeJNO+PC~LhC zNPhJBQs{?MRZM+bMl;h74R{24-z4<;Tk3KCo!OlG_}iOeHHrPW9V~R zWBWVkj1I*5m$7~VU4q}xe*TKr|3&vu@{$IjP!gR%2HH_8bjDrLne>V6gV79(MmwB@ z4losc{$?~Yi_z4tiuI>reJeV#-AMn*#E0?1Cupj_K?nRTwx5gj9GM}Y0%*s@(EBQ( z0cW6@X^dv36B_7XbRr|;^$BR;w_xh?e+~sV$KB{m9*j3Uj7IustZ#_dUqolP4Gm-u z8u-WY`q#1jBpTo!v3>y!Bu~Ted?8GI|1VF$3$@T!XlA^j2^v`YSnrKSJ`@dXBpSeV z=<~Orf!!Y4??nT67|qb*Xog-u``L*}J9?XfGye$v<(ScC?)1daG1^nnf0O|kvu zSbq;4U_Yil^`a-yAI<(kzmyhk941f~9j|?3&c6c;p}`l%MD%0y4s=Ejp#eUHcKi~0 z|J&$*2ct*P&2|#a+^^`;{e@;MYm+d65@^5W&T^O(%+QH3e``zf$JrLWULVv!0 z6r>iw`A-j7}ID7r*7 zI;AD9!9{pK{*2vmPG|lM2=}2G?AImuAhx4^I9k3d=id%TQCNr@(FZQ?76O`ueW||^ z&DT8yFdSRcz5zW2r?C(IiH)#xkFaEOFq8T#=uK;@Za^P=1>N1Rp_}V4rr|kspns7)mdMd3ocCPl0GCG7(ahA1*PEbwr6oFWU-Shu zJW0VDXGE?0!kCY4w$*6I&!d69j%MT?^hJ}kZ+Jd8`rasnzVRwXTgLVw(TQjvv(X>L zl1nI5p|Bw~{4d^cI<}|v3msO+n%vhO4e$nZx8I4*Ledreiv8K_mPW?dVrbrFcLv9sNnCZmf4kQ+s7}Ecz;+j%IQ( znwhoe1h!-9-~aoFf@^;i?eHfwpzH%fy)^m?&W!c8Sb_Rg=*(`7E<tD#?;3#!mPSR>n(*g}@r&X6o(m75p1r z%T3pWO}Y;q_y=@p(uN0%;7io2U{_ukU!k9d)kg-GBq@0Q&!Oiz%cu}(PHaZKAUf0T z*cun1pB4Ks9rKJ1za!2--;6^r6PKc?eit9ckI`|i9}~v830>M`l7bny3vb3%*aeG> zO-udFh+#N}`n%`@b;gBF)HK=?P35TQ40Kc8g=X|2bgyhgpMMQ~Z@h~vJ^%d=1$X5s z^ufgVkh+3sU=`8b+W;M?D|%dq#`?9fek(fA-RNdriGB>ffcC!weeM9dL`SfUpZ~wc zhI|vkSEBOhdGCbYI1uaOc=ScI8a*vL(7+PchMAT?1I$1-aZ9X*S7BM4hfZ)k+V2)j z{ri7!Q}Dr0(GI^yBTq~Wn<_6Fd1bVN`e?^((dQ$+M!(O$65C%#_s*wy9i~qTYkm*91S`=c zeI7k6uTSFqyXz0q;O;zv4sarR0S%zYVSLr=V-O34L%s+To|@Ouj=?e-`a9_YEPC0%#_R zVFw(JKKB&5WZTe*y`QAur`$K_%r0OR%swTobw>0G^f>iE2ObgYQ=)gG9j-$6$foFS zG=NXA5tg1B`sou*j-gPG3p3G?a>!jH#E=% z=w@7v9?K`9ThL7G3fGf~0~AdC7oj2X9d@LC8e3tb>EWF}1N%^a4hROLN6Ro z{XTSaoyWd7^p@~-d{eZ@tnl%ABlhI_4(x<^XNNz~>>r(nJs6*VsVsboWxF**+5>%H zC%Pwcvq?Swg`(xr_d^DHy$PD~R?&WV8TE148Sh3j{As*?Bwqg=lWvNlbHbW;Lp$n& zuF)9uJun@6rbH*%eFAwUk|6qjN@+-JMzzvAK$StInjUYl6I4c$D8(GFLmOSLWfzvwUM zhg6<>Lg3ZV`?_E{jzRmGkM5D>@%r{`T=y4{)z_nU##a?5?(+>(Y=)s?SM}3nkAfn3v+02z(>%?H=(=sZFJzHXym`6 znVn(1ylGfy7oV#smfRy*0M2r{YrFz zk!YYdqNia2`ii{=%i-hbDcFOa`?LqbeYwzq3!v|TN@%~yx)i*zDLQa#bWe0cUl3QJ zH;zXKo{FY=9y+6?vHmoA|F-C!c>MrYq5UNKT>fPtLuHUmCli?z(z(zH?QlFgqa>Qb z<=7ZEq8U1gZL!Mo@I7DxdODV)?}-=D&HM^_-}|wi|H1H{D34~Y60-mKH5vssO|5uC zBQz7uq8-o}gp8C!AIQYZu|0OdB&Lopy0(YWjQxVXA#<(_8R&|YsNaij&MoMDA7JXw|Bq8} z2B*--|BmKZ6~1y6LpvOg18@Ugi&-BEnV1}%fo3v^2D||6ZzX#Cov)~bQZyiH3bt*~0h|Z#$E7!WvanWc^bZJ^gdteXhL(on54Eo$AH07_O{q0AO z+jr65(NmRpG)%ZS`Wca|L&4+I72OnL&{QX5`%3h|E$HUliyqUX=uH2>u~>9{Sd!Uz z3-vWH7`ruY@A+gX z9HHTI8qQ!=thF&bP!C=*QTE`Uy19@~?zF zPy?+uLQhj`G?3nCKNHctG8ePqeVF?DKg%dM@T2I=UPjmE4K$Tsp-Yi?HLPJyw4NXB zxEPv=+OggY9iT7P#X;!WFGSD(y|Ml&(A^wx-Hh{$ND043GYXrdpNoQeLlIJf)VXQ*X{^< zZhwsagN>-?-4#;T77e63dS5>@fYIoycLKT@Z$k&XC$>Kv+qa;B?nE+^OuR$E)P96^ z@I$O8c838`XM^yU^!0qI>Nn zO#S`ecPaRx@jrBT7JfS%zq06u(MU|gv6zk%&>7y1cDx-;^)a;LU(f)uyc5oQA@q7W zx-@mr`Ned zbOLoSwf5-qSECb}@Ln>^d=?FMct6_VI<&(r(Ra}RzKqv@LhrvA+w;F4mZTh3ro9Jx z|1|Vdac-=y!}io)L<9IMNx@X-+MAZR28&}gya{XJI_!Y^(U}zcApB*LnrNUupquJn zbP2P5n3np-DoUbz=?1j@7Bt``XzCw9Ur@=XDHzFa^u|x)g;QwCvhNF4P68P7yNj2=NV_j2?DbiiZLAFv7a-;q<6Ow`;TeoNg5J$7@@<90W?R!h(U*Pw66 z7tju0Mg!OxJ&4Zu=UD#>eJilDO>POH| zxr_rLg=5hryAcg!Zmcgx2Yd*9{<-MOXurF$As$9EaOuZt7oFMLSR22_nt16aVZi2Cjrw#nkTsb4?|(m`P@aag zPty{2;brK9&tY}^9DUJb{VZ4wJ5leBU2r-2Li!pru;9V)eV_$ar9K6F;Hu~kcop>~ zhdBRzC@eb^cH{RrgnHWNp@X3~i2D8L1E+92b~>Dv`p@k*VK3@6zX)H?XQ7++1N8J9 zM*}VVWysJ~XolCI@0%~bmxtKSVQd9L-4XBVnM-Xm@n8 zjzQ1;RP>E_N37qA9>2Aij?bg_@8`e2PhI#D{myp^eK6P2FmO@y+}A?e+n@pVKsVo& zu|5KQV_t`iaSHy7&!G3MI2L|_T8HknPw;9?X8$@Zv6jL}^i7rZo3zxwT9J;OvhXQ| z9=nU*hGUfDyKufsMQfvMl<&`*1&z}IOoFkB>$dANJ%CdX@7K$ zhN5q_)#wXlJ-Yk1p|8;Q(Dy`v6XDnCMX??A3HTXqM33E_Cqu>_Ml<*n+V2*;)bqcc zf~ore?eGAa;)Cc~euKXGenj+R=!p(EBDUX*W^5_CNms|~TjKS-v3@-IFWPV6AH#E{ zFquh1MGDn$5IWFpXeJ&&2Uvy9a6OvB=VSdm$e9cF$#`ek$$8t4kN<8|mnUPLqa zCZ^;6(1FgP&t>@~OrR|KT-786Q`Q(qVhgmRN8=4I#`;dIP5VdK5--NQpes`P{>r>D@G7EjNJ%Eic`3wa=jlM=xSL(NLyn3P$EEKtJ!BqYrk$x;PM@ zzy;`%)%ha~+ybjo?}I)+6RY4d^i8+}?eA+W!}y6`D7cyO{uyRe6dkB+tk*z~S$%Yk z8^`w6=!`m}duS+{`qAjXH=qM8LIYkE>wD4uKgZO+|9^r)eHwm8AFTXW_^o#<>_>e$ z8sI53kh9nn&!KCZ`F9B5TJ#M!1znoC=s=6mQ?(L39WSFxwD)h$zYiRZ7k)!GUAA+f zqax^wqYAp_t&Z<@h^#x)%N$zHscq*3>UzV{Dzg z5Walgj2@rO*aMHF184phuHS^2)HmTUJc)g==d*lOj_n$y_{qNC4 z)~u=bLVk3D<8Q- z-gpwb;pN#wM(#wv@vMu!jt2S#R`mRzq~NDlo=d_5jiSBLrI?7W;XT+KA4UT`jDGbx zho-(vj;yH{O=EPI4@HmR3^YSYG;=HC^%pT|3g4%o2czGi5&jnI7tqs@J7?Hb<!em_S)?2hNmnoOm%bFQqZKR6hR2C^RAY%ib#Z$k(C z0DZ?Fj-HDC8_kzH3|J1muNL}Ti&*c54XIy^F8R{j$?(8t8k*6t3w^WwhYoysp3qSb zboUNJQ#u7b*E3^%GrD=VNB5%le}R4jI*qqtk-S+`KhP}2R@8q=QgE}>%9l0ad7p^} z@;Xky^XTRpoj+^pTkl=yY4`}8;b&+-C($?DFX+JM9jYG^{dgPNZvxB z7lrva8V{izwzxE`X$N#EhM}n(6YJB^KyHcNhGuL&dfr!~0d9`%d$2b3&#@}zESSnz zGEtX;H?~68zIV8g7>W)&37y&W*ghwEANpzdNc0)>{w?U6Z#!niH__9v2mS0giUxQF zOL+cs7YeDUi0*L$IF%n_K5bI=#sI;@DhOK|>cP&i40sV-D9EJay#PgIXKMK@Phbd9e;Q$H4+ z$?RBP9_t&>-TfANOb?)&FL$X>zZ?fqpHhnRZwB_#PzR5ro2O{$Fr!lFOzNS#zb&@G z-Z&5+KtEJ|LO1Up=%!066P~{W-K1sFfU2UWs{wj{vm^yO=!AaA^hTFp0d~hv(SRzJ z4e$19Xoo$~j;=)4d^q}l@G+zl=t_3+?#5SU-TiF%QLhk@T>cOJh~q8>5?Y82Vu}6P@5f%;EWeAU3Q<2YM1c zHZP*7`vhI{Z?GR$t`ItyiJqEyXol9I0d7TSxFcSF3*Dq&N6({ss_Ge0;_`d(+2%G9*n+cW}xG&#?<-WO2N&s zA3Y7fp%3P%6dtS?Z56#59e5_1p_SO zjP1!x3eKn_+Ce`|$1&(Y^U;CVqBGlseQ+oGVk%N2WUM6GaRto8`skp8v-w*ipxtVa>atYjhR*Au$tuajZf2%A;t&&&Kwb(ExX#OSC_F7+uQaXhwcU zH|t;VdiD(4Ie(W@aF>=sH(et%!Vc(+2BB*`KGu_HX6{3udkRP6o_M`Rt#E%c^fdKG zGjJ{XUYUb)aXpsv{8y`;HTAFDcf`ijw_^sLK{JqECj{0Gonb$;!(r%oo`%kJC7QW) z*aF``pZ^a#;AM5g&l%&I=;nJ5&BTe={uj2Reo4Kosh?)M zqM2BX-uE=Rd0#~{@IQ2ken!98Br`QY6 z;vj6_Fxy1uyGJ5}A=!BCiDYz!j zqpAJ`jr2=2pyO!j|3F_fX-%`He$$a3Yf|rqX6PoYj_+YTJcABcxmkF=6`GOm=rJ6H zY{Fz>3I#i!g+{yp4PaHcA+a9oP=5}6@GEq$oI+FhCwhP0=HU%j6dkAx`rc@OKGztX zNPBem_rYwQ|Enn2(QtHg&A?P3=rLM_uG#0<9TQiCfqI}z(jQIf{b(b~q88*$wD`)6szEMIS_$@@X^^ zFQWIo8$E>H|2?Mu{{MLj4w$=T_(7u>Hlf}NP4z-Fzz5J7JcV}n3c3g0LpReO=uC6B z3SVYRpn>#6+Xtf0jgC%l#rZe2^JusPH=qM-MrXbUYvB**SFqx(!;A)_Z^#?a-Mt1K zXa}15J(x;0x(Sb>Gd_>*fxKx}vY-{@4f?qvv@Kdffg- z2Q1PyJYNn6P_K@+;vDq8i|BKu+lAj9^+YqVDM{ff3cJt`hw|;i4BMca^2-0Wb{=py zm*M|E!`^#@I`-b9viHg+I~>n*aCnwy*c=U{q|8%hXem;OBT6JGDTUIM(iRPAQ2D<< z-|uyJQvH6f|Nr&BUa#BdzOQ{<_x&B`JP$x6mI`(Nr-7fl5I;cwDHv9}!rRP9h z6*)V*tuF-Xkd_B^2doXsf20Ew9g-nnb1=;WPk^dyFQ`mk2bIW&p!WJpP>Eawl|Y^@ z?hUIfDE&I1-YHvxHNX*|4(~irTfG1zZp5>Mi4ND}pfcQT3U7eA10FN^S0=w`@_b$0 zz(qlIrV^;YV?aH8CV@KC_k!xwN>GPz9jHRKfX=`Fy_1Rd{D9$MP=Swwa`-K%3NP3? ze>b-SYl;72$^ZS3BO<^afjQ8654N#7bf$GpH zP!4_tRpBL2TU4gI-}y4S5~zn%5;zIm4~_s^-sIk>R)V@(-UDU#3+Vj*pQneLVKGn% zlm&Hos)DMh9;m(U464%ppd2KE(n|q#CMMf@0jNW`3{(M+f~~;qpgQ}r@pJd&`d7xK zdb)d<3btdt6%2sqK_yhGmz!WEP}g%!urk;YR3hU{o(^iSr-Di>0!sf*FbZw}wG}OT zyMEjE=K9y6=mkT9;b3_%0aUAJgR1;aPxLuVDR3F{t) zw}L8UJE+dQ1WNx{go&>EPr(LYj=t{UXbLKUPM})W6IAO*fvRjGs7j}SIt#NwJyaer z`BqSYo(B`aH$f%dsGsYv6?h%%NFOGuEDh8ln+Gb;N>C0rfokz9pgQ%Itxtg3^RGeO z!2SdkU}%3=F9gai1JoIq3966tTYCpaNyt`Yuo%deGJ} zlfMDhhW{C;&J-HxR$LyGeKqiUumz~C$^fM|75oyM2Ri@%U&%IwCjdePxt$V=m&?v6|jxa94s1J4wx-XNNpaSm)p8zAH{m$RvsGZp>mL zZJ;_HIm2WQlL~2m=Xbw0fUQ~Ao9MPW8SKY;J*W3-+GTGX!Q|s2j@Lpq}3+LEUhE02RnL-IW&vbw4Q&>gib@lzkWD_W^Y%6Tk+_^fo3n z!L6V&{20syerxz6n4k4;paSQZ;p&wD6{w=En}7<~4%DrC2&h6bKqa~mbZ%szUP@zN zL=KKJQHEcFx>J1*>Rs(TsAs_i!~8SdR+k6$&DyTivZ)3d-MlP*=sKTQO9tPr*=&z6JGK{0FF8ak1N6#ol0L)^kB!|Br*Z zKOD668BiT8c)NR9l>*g?&R`wzE>QL{PhM(s zD}s$c9i9PTTQC*Wp?V6`)p8J&{t-}Tf>~hU`R>o{=YW#mX}HXAz2O#69eN(@4;}$^f2nqtd$xvx zs(b|KeE%0>(gsEOvO}P*^OK-jdKy%q3!tusB6qv;nxOQXfa+vd zFaVARb;$1qb-6zcI=}z(Arrk!{st;wsRgdXDxdfYr<8KG$_%Ij%e*|?|6}!jX zqWYi;=>}@gdx6@bp@tJc>CXToIz$gJk;C1f4#!DTI1l<*7hCAIuB2gEP@Sj%>X6j{ z6|fPg8_e~f6Bv}gp`bdIYU??muC5gex&C#-ISxaI?PIVb_#3E>w7S1ilM?1CD!u zKwjSYR=DqWNh{q-cYqy`{|f4c(_)ot-yW3zzFD?=LR={YYZcmnaE)sP>HkvRY5OMH=5C)98L$7;BruUkAiCXPEdhg24(j; zs6d~9(*N1`IUjPjvMi_qD}r<&;;GI=EoubnA=KIxct#n20;mKhgGyvBs4ZG&_yVX~ z>if3-#n#0hb~{raR42NCI>bZ305}D7{{5c^m^gPjuoi-Ypibv`PzIGAaa-RG)Zyt3 zsxyN@wRR$?0C$7x%xX}F?kVH%0oAD^pgQ#ts4Y7MI{*IXMJ5VZ_)+(=X$fj?$AfC+ zY*5$xGEkk`1S*jopicWdYok9eW*A0l$C&u<}ONz9T4qgKeD-%HLd2{#I?|`j^9v zFmyR=GsQiiT6WCVCqUf?elomZeBa})T`5qNRs^Nj5LD-G1a(8|1*${+K%Joka1c1_ zajt*u#k(+cD$jyy>Cd1X{tl|8d7p4ADF@0yQ&4-^$M}PcKM~Z^a{;I=cm`C(dq5`+ z=)^Jp&k-idEZ-(KP&rV0Qx{YMZ9$#>KA=whNKlXC>7Wu@396NwK{?(Ds-t^A`8@-R0ocM^8X#k<<9;;>9(vcSPemcP?y&

    C%8RpEM26>R~X3Qc|pR3#sR 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 LR$S$um-GJslS{Y$ delta 67159 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, si está presente, se reemplazará automáticamente por " "el valor de posición al crear un nuevo módulo." -#: netbox/dcim/forms/model_forms.py:1094 +#: netbox/dcim/forms/model_forms.py:1107 msgid "Console port template" msgstr "Plantilla de puerto de consola" -#: netbox/dcim/forms/model_forms.py:1102 +#: netbox/dcim/forms/model_forms.py:1115 msgid "Console server port template" msgstr "Plantilla de puerto de servidor de consola" -#: netbox/dcim/forms/model_forms.py:1110 +#: netbox/dcim/forms/model_forms.py:1123 msgid "Front port template" msgstr "Plantilla de puerto frontal" -#: netbox/dcim/forms/model_forms.py:1118 +#: netbox/dcim/forms/model_forms.py:1131 msgid "Interface template" msgstr "Plantilla de interfaz" -#: netbox/dcim/forms/model_forms.py:1126 +#: netbox/dcim/forms/model_forms.py:1139 msgid "Power outlet template" msgstr "Plantilla de toma de corriente" -#: netbox/dcim/forms/model_forms.py:1134 +#: netbox/dcim/forms/model_forms.py:1147 msgid "Power port template" msgstr "Plantilla de puerto de alimentación" -#: netbox/dcim/forms/model_forms.py:1142 +#: netbox/dcim/forms/model_forms.py:1155 msgid "Rear port template" msgstr "Plantilla de puerto trasero" -#: netbox/dcim/forms/model_forms.py:1151 netbox/dcim/forms/model_forms.py:1395 -#: netbox/dcim/forms/model_forms.py:1558 netbox/dcim/forms/model_forms.py:1590 -#: netbox/dcim/tables/connections.py:65 netbox/ipam/forms/bulk_import.py:318 -#: netbox/ipam/forms/model_forms.py:280 netbox/ipam/forms/model_forms.py:289 -#: netbox/ipam/tables/fhrp.py:64 netbox/ipam/tables/ip.py:372 -#: netbox/ipam/tables/vlans.py:169 -#: netbox/templates/circuits/inc/circuit_termination_fields.html:51 -#: netbox/templates/dcim/frontport.html:106 -#: netbox/templates/dcim/interface.html:27 -#: netbox/templates/dcim/interface.html:184 -#: netbox/templates/dcim/interface.html:310 -#: netbox/templates/dcim/rearport.html:102 -#: netbox/templates/virtualization/vminterface.html:18 -#: netbox/templates/vpn/tunneltermination.html:31 -#: netbox/templates/wireless/inc/wirelesslink_interface.html:10 -#: netbox/templates/wireless/wirelesslink.html:10 -#: netbox/templates/wireless/wirelesslink.html:55 -#: netbox/virtualization/forms/model_forms.py:348 -#: netbox/vpn/forms/bulk_import.py:297 netbox/vpn/forms/model_forms.py:436 -#: netbox/vpn/forms/model_forms.py:445 -#: netbox/wireless/forms/model_forms.py:113 -#: netbox/wireless/forms/model_forms.py:155 -msgid "Interface" -msgstr "Interfaz" - -#: netbox/dcim/forms/model_forms.py:1152 netbox/dcim/forms/model_forms.py:1591 +#: netbox/dcim/forms/model_forms.py:1165 netbox/dcim/forms/model_forms.py:1636 #: netbox/dcim/tables/connections.py:27 #: netbox/templates/dcim/consoleport.html:17 #: netbox/templates/dcim/consoleserverport.html:74 @@ -4969,71 +5413,71 @@ msgstr "Interfaz" msgid "Console Port" msgstr "Puerto de consola" -#: netbox/dcim/forms/model_forms.py:1153 netbox/dcim/forms/model_forms.py:1592 +#: netbox/dcim/forms/model_forms.py:1166 netbox/dcim/forms/model_forms.py:1637 #: netbox/templates/dcim/consoleport.html:73 #: netbox/templates/dcim/consoleserverport.html:17 #: netbox/templates/dcim/frontport.html:109 msgid "Console Server Port" msgstr "Puerto de servidor de consola" -#: netbox/dcim/forms/model_forms.py:1154 netbox/dcim/forms/model_forms.py:1593 -#: netbox/templates/circuits/inc/circuit_termination_fields.html:52 +#: netbox/dcim/forms/model_forms.py:1167 netbox/dcim/forms/model_forms.py:1638 +#: netbox/templates/circuits/inc/circuit_termination_fields.html:53 #: netbox/templates/dcim/consoleport.html:76 #: netbox/templates/dcim/consoleserverport.html:77 #: netbox/templates/dcim/frontport.html:17 #: netbox/templates/dcim/frontport.html:115 -#: netbox/templates/dcim/interface.html:187 +#: netbox/templates/dcim/interface.html:244 #: netbox/templates/dcim/rearport.html:105 msgid "Front Port" msgstr "Puerto frontal" -#: netbox/dcim/forms/model_forms.py:1155 netbox/dcim/forms/model_forms.py:1594 -#: netbox/dcim/tables/devices.py:710 -#: netbox/templates/circuits/inc/circuit_termination_fields.html:53 +#: netbox/dcim/forms/model_forms.py:1168 netbox/dcim/forms/model_forms.py:1639 +#: netbox/dcim/tables/devices.py:744 +#: netbox/templates/circuits/inc/circuit_termination_fields.html:54 #: netbox/templates/dcim/consoleport.html:79 #: netbox/templates/dcim/consoleserverport.html:80 #: netbox/templates/dcim/frontport.html:50 #: netbox/templates/dcim/frontport.html:118 -#: netbox/templates/dcim/interface.html:190 +#: netbox/templates/dcim/interface.html:247 #: netbox/templates/dcim/rearport.html:17 #: netbox/templates/dcim/rearport.html:108 msgid "Rear Port" msgstr "Puerto trasero" -#: netbox/dcim/forms/model_forms.py:1156 netbox/dcim/forms/model_forms.py:1595 -#: netbox/dcim/tables/connections.py:46 netbox/dcim/tables/devices.py:512 -#: netbox/templates/dcim/poweroutlet.html:44 +#: netbox/dcim/forms/model_forms.py:1169 netbox/dcim/forms/model_forms.py:1640 +#: netbox/dcim/tables/connections.py:46 netbox/dcim/tables/devices.py:521 +#: netbox/templates/dcim/poweroutlet.html:54 #: netbox/templates/dcim/powerport.html:17 msgid "Power Port" msgstr "Puerto de alimentación" -#: netbox/dcim/forms/model_forms.py:1157 netbox/dcim/forms/model_forms.py:1596 +#: netbox/dcim/forms/model_forms.py:1170 netbox/dcim/forms/model_forms.py:1641 #: netbox/templates/dcim/poweroutlet.html:17 #: netbox/templates/dcim/powerport.html:77 msgid "Power Outlet" msgstr "Toma de corriente" -#: netbox/dcim/forms/model_forms.py:1159 netbox/dcim/forms/model_forms.py:1598 +#: netbox/dcim/forms/model_forms.py:1172 netbox/dcim/forms/model_forms.py:1643 msgid "Component Assignment" msgstr "Asignación de componentes" -#: netbox/dcim/forms/model_forms.py:1202 netbox/dcim/forms/model_forms.py:1645 +#: netbox/dcim/forms/model_forms.py:1218 netbox/dcim/forms/model_forms.py:1690 msgid "An InventoryItem can only be assigned to a single component." msgstr "Un InventoryItem solo se puede asignar a un único componente." -#: netbox/dcim/forms/model_forms.py:1339 +#: netbox/dcim/forms/model_forms.py:1355 msgid "LAG interface" msgstr "Interfaz LAG" -#: netbox/dcim/forms/model_forms.py:1362 +#: netbox/dcim/forms/model_forms.py:1378 msgid "Filter VLANs available for assignment by group." msgstr "Filtre las VLAN disponibles para la asignación por grupo." -#: netbox/dcim/forms/model_forms.py:1491 +#: netbox/dcim/forms/model_forms.py:1533 msgid "Child Device" msgstr "Dispositivo infantil" -#: netbox/dcim/forms/model_forms.py:1492 +#: netbox/dcim/forms/model_forms.py:1534 msgid "" "Child devices must first be created and assigned to the site and rack of the" " parent device." @@ -5041,32 +5485,58 @@ msgstr "" "Los dispositivos secundarios primero deben crearse y asignarse al sitio y al" " rack del dispositivo principal." -#: netbox/dcim/forms/model_forms.py:1534 +#: netbox/dcim/forms/model_forms.py:1576 msgid "Console port" msgstr "Puerto de consola" -#: netbox/dcim/forms/model_forms.py:1542 +#: netbox/dcim/forms/model_forms.py:1584 msgid "Console server port" msgstr "Puerto de servidor de consola" -#: netbox/dcim/forms/model_forms.py:1550 +#: netbox/dcim/forms/model_forms.py:1592 msgid "Front port" msgstr "Puerto frontal" -#: netbox/dcim/forms/model_forms.py:1566 +#: netbox/dcim/forms/model_forms.py:1608 msgid "Power outlet" msgstr "toma de corriente" -#: netbox/dcim/forms/model_forms.py:1586 +#: netbox/dcim/forms/model_forms.py:1630 #: netbox/templates/dcim/inventoryitem.html:17 msgid "Inventory Item" msgstr "Artículo de inventario" -#: netbox/dcim/forms/model_forms.py:1659 +#: netbox/dcim/forms/model_forms.py:1704 #: netbox/templates/dcim/inventoryitemrole.html:15 msgid "Inventory Item Role" msgstr "Función del artículo de inventario" +#: netbox/dcim/forms/model_forms.py:1773 +msgid "VM Interface" +msgstr "Interfaz VM" + +#: netbox/dcim/forms/model_forms.py:1788 netbox/ipam/forms/filtersets.py:608 +#: netbox/ipam/forms/model_forms.py:334 netbox/ipam/forms/model_forms.py:796 +#: netbox/ipam/forms/model_forms.py:822 netbox/ipam/tables/vlans.py:171 +#: netbox/templates/virtualization/virtualdisk.html:21 +#: netbox/templates/virtualization/virtualmachine.html:12 +#: netbox/templates/virtualization/vminterface.html:21 +#: netbox/templates/vpn/tunneltermination.html:25 +#: netbox/virtualization/forms/filtersets.py:202 +#: netbox/virtualization/forms/filtersets.py:247 +#: netbox/virtualization/forms/model_forms.py:227 +#: netbox/virtualization/tables/virtualmachines.py:105 +#: netbox/virtualization/tables/virtualmachines.py:161 +#: netbox/vpn/choices.py:53 netbox/vpn/forms/filtersets.py:293 +#: netbox/vpn/forms/model_forms.py:161 netbox/vpn/forms/model_forms.py:172 +#: netbox/vpn/forms/model_forms.py:274 netbox/vpn/forms/model_forms.py:457 +msgid "Virtual Machine" +msgstr "Máquina virtual" + +#: netbox/dcim/forms/model_forms.py:1827 +msgid "A MAC address can only be assigned to a single object." +msgstr "Una dirección MAC solo se puede asignar a un único objeto." + #: netbox/dcim/forms/object_create.py:48 #: netbox/dcim/forms/object_create.py:199 #: netbox/dcim/forms/object_create.py:347 @@ -5087,7 +5557,7 @@ msgstr "" "{pattern_count} se esperan." #: netbox/dcim/forms/object_create.py:110 -#: netbox/dcim/forms/object_create.py:263 netbox/dcim/tables/devices.py:252 +#: netbox/dcim/forms/object_create.py:263 netbox/dcim/tables/devices.py:263 msgid "Rear ports" msgstr "Puertos traseros" @@ -5118,7 +5588,7 @@ msgstr "" "coincidir con el número seleccionado de posiciones de los puertos traseros " "({rearport_count})." -#: netbox/dcim/forms/object_create.py:401 netbox/dcim/tables/devices.py:1033 +#: netbox/dcim/forms/object_create.py:401 netbox/dcim/tables/devices.py:1065 #: netbox/ipam/tables/fhrp.py:31 netbox/templates/dcim/virtualchassis.html:53 #: netbox/templates/dcim/virtualchassis_edit.html:47 #: netbox/templates/ipam/fhrpgroup.html:38 @@ -5137,30 +5607,30 @@ msgstr "" "Posición del primer dispositivo miembro. Aumenta en uno por cada miembro " "adicional." -#: netbox/dcim/forms/object_create.py:427 +#: netbox/dcim/forms/object_create.py:428 msgid "A position must be specified for the first VC member." msgstr "Se debe especificar un puesto para el primer miembro del VC." -#: netbox/dcim/models/cables.py:62 -#: netbox/dcim/models/device_component_templates.py:55 -#: netbox/dcim/models/device_components.py:62 +#: netbox/dcim/models/cables.py:64 +#: netbox/dcim/models/device_component_templates.py:51 +#: netbox/dcim/models/device_components.py:57 #: netbox/extras/models/customfields.py:111 msgid "label" msgstr "etiqueta" -#: netbox/dcim/models/cables.py:71 +#: netbox/dcim/models/cables.py:73 msgid "length" msgstr "longitud" -#: netbox/dcim/models/cables.py:78 +#: netbox/dcim/models/cables.py:80 msgid "length unit" msgstr "unidad de longitud" -#: netbox/dcim/models/cables.py:95 +#: netbox/dcim/models/cables.py:98 msgid "cable" msgstr "cable" -#: netbox/dcim/models/cables.py:96 +#: netbox/dcim/models/cables.py:99 msgid "cables" msgstr "cables" @@ -5187,19 +5657,19 @@ msgstr "Tipos de terminación incompatibles: {type_a} y {type_b}" msgid "A and B terminations cannot connect to the same object." msgstr "Las terminaciones A y B no pueden conectarse al mismo objeto." -#: netbox/dcim/models/cables.py:260 netbox/ipam/models/asns.py:37 +#: netbox/dcim/models/cables.py:262 netbox/ipam/models/asns.py:37 msgid "end" msgstr "fin" -#: netbox/dcim/models/cables.py:313 +#: netbox/dcim/models/cables.py:315 msgid "cable termination" msgstr "terminación de cable" -#: netbox/dcim/models/cables.py:314 +#: netbox/dcim/models/cables.py:316 msgid "cable terminations" msgstr "terminaciones de cables" -#: netbox/dcim/models/cables.py:333 +#: netbox/dcim/models/cables.py:335 #, python-brace-format msgid "" "Duplicate termination found for {app_label}.{model} {termination_id}: cable " @@ -5208,37 +5678,71 @@ msgstr "" "Se encontró una terminación duplicada para {app_label}.{model} " "{termination_id}: cable {cable_pk}" -#: netbox/dcim/models/cables.py:343 +#: netbox/dcim/models/cables.py:345 #, python-brace-format msgid "Cables cannot be terminated to {type_display} interfaces" msgstr "Los cables no se pueden terminar en {type_display} interfaz" -#: netbox/dcim/models/cables.py:350 +#: netbox/dcim/models/cables.py:352 msgid "Circuit terminations attached to a provider network may not be cabled." msgstr "" "Es posible que las terminaciones de circuito conectadas a la red de un " "proveedor no estén cableadas." -#: netbox/dcim/models/cables.py:448 netbox/extras/models/configs.py:50 +#: netbox/dcim/models/cables.py:450 netbox/extras/models/configs.py:50 msgid "is active" msgstr "está activo" -#: netbox/dcim/models/cables.py:452 +#: netbox/dcim/models/cables.py:454 msgid "is complete" msgstr "está completo" -#: netbox/dcim/models/cables.py:456 +#: netbox/dcim/models/cables.py:458 msgid "is split" msgstr "está dividido" -#: netbox/dcim/models/cables.py:464 +#: netbox/dcim/models/cables.py:466 msgid "cable path" msgstr "ruta de cable" -#: netbox/dcim/models/cables.py:465 +#: netbox/dcim/models/cables.py:467 msgid "cable paths" msgstr "rutas de cable" +#: netbox/dcim/models/cables.py:539 +msgid "All originating terminations must be attached to the same link" +msgstr "Todas las terminaciones originarias deben adjuntarse al mismo enlace" + +#: netbox/dcim/models/cables.py:551 +msgid "All mid-span terminations must have the same termination type" +msgstr "" +"Todas las terminaciones de tramo intermedio deben tener el mismo tipo de " +"terminación" + +#: netbox/dcim/models/cables.py:556 +msgid "All mid-span terminations must have the same parent object" +msgstr "" +"Todas las terminaciones intermedias deben tener el mismo objeto principal" + +#: netbox/dcim/models/cables.py:580 +msgid "All links must be cable or wireless" +msgstr "Todos los enlaces deben ser por cable o inalámbricos" + +#: netbox/dcim/models/cables.py:582 +msgid "All links must match first link type" +msgstr "Todos los enlaces deben coincidir con el primer tipo de enlace" + +#: netbox/dcim/models/cables.py:665 +msgid "" +"All positions counts within the path on opposite ends of links must match" +msgstr "" +"Todos los recuentos de posiciones dentro de la ruta en los extremos opuestos" +" de los enlaces deben coincidir" + +#: netbox/dcim/models/cables.py:674 +msgid "Remote termination position filter is missing" +msgstr "Falta el filtro de posición de terminación remota" + #: netbox/dcim/models/device_component_templates.py:46 #, python-brace-format msgid "" @@ -5248,18 +5752,18 @@ msgstr "" "{module} se acepta como sustituto de la posición del compartimiento del " "módulo cuando se conecta a un tipo de módulo." -#: netbox/dcim/models/device_component_templates.py:58 -#: netbox/dcim/models/device_components.py:65 +#: netbox/dcim/models/device_component_templates.py:54 +#: netbox/dcim/models/device_components.py:60 msgid "Physical label" msgstr "Etiqueta física" -#: netbox/dcim/models/device_component_templates.py:103 +#: netbox/dcim/models/device_component_templates.py:99 msgid "Component templates cannot be moved to a different device type." msgstr "" "Las plantillas de componentes no se pueden mover a un tipo de dispositivo " "diferente." -#: netbox/dcim/models/device_component_templates.py:154 +#: netbox/dcim/models/device_component_templates.py:150 msgid "" "A component template cannot be associated with both a device type and a " "module type." @@ -5267,7 +5771,7 @@ msgstr "" "Una plantilla de componente no se puede asociar a un tipo de dispositivo ni " "a un tipo de módulo." -#: netbox/dcim/models/device_component_templates.py:158 +#: netbox/dcim/models/device_component_templates.py:154 msgid "" "A component template must be associated with either a device type or a " "module type." @@ -5275,138 +5779,138 @@ msgstr "" "Una plantilla de componente debe estar asociada a un tipo de dispositivo o a" " un tipo de módulo." -#: netbox/dcim/models/device_component_templates.py:212 +#: netbox/dcim/models/device_component_templates.py:209 msgid "console port template" msgstr "plantilla de puerto de consola" -#: netbox/dcim/models/device_component_templates.py:213 +#: netbox/dcim/models/device_component_templates.py:210 msgid "console port templates" msgstr "plantillas de puertos de consola" -#: netbox/dcim/models/device_component_templates.py:246 +#: netbox/dcim/models/device_component_templates.py:244 msgid "console server port template" msgstr "plantilla de puerto de servidor de consola" -#: netbox/dcim/models/device_component_templates.py:247 +#: netbox/dcim/models/device_component_templates.py:245 msgid "console server port templates" msgstr "plantillas de puertos de servidor de consola" -#: netbox/dcim/models/device_component_templates.py:278 -#: netbox/dcim/models/device_components.py:352 +#: netbox/dcim/models/device_component_templates.py:277 +#: netbox/dcim/models/device_components.py:345 msgid "maximum draw" msgstr "sorteo máximo" -#: netbox/dcim/models/device_component_templates.py:285 -#: netbox/dcim/models/device_components.py:359 +#: netbox/dcim/models/device_component_templates.py:284 +#: netbox/dcim/models/device_components.py:352 msgid "allocated draw" msgstr "sorteo asignado" -#: netbox/dcim/models/device_component_templates.py:295 +#: netbox/dcim/models/device_component_templates.py:294 msgid "power port template" msgstr "plantilla de puerto de alimentación" -#: netbox/dcim/models/device_component_templates.py:296 +#: netbox/dcim/models/device_component_templates.py:295 msgid "power port templates" msgstr "plantillas de puertos de alimentación" #: netbox/dcim/models/device_component_templates.py:315 -#: netbox/dcim/models/device_components.py:382 +#: netbox/dcim/models/device_components.py:372 #, python-brace-format msgid "Allocated draw cannot exceed the maximum draw ({maximum_draw}W)." msgstr "" "El sorteo asignado no puede superar el sorteo máximo ({maximum_draw}W)." -#: netbox/dcim/models/device_component_templates.py:347 -#: netbox/dcim/models/device_components.py:477 +#: netbox/dcim/models/device_component_templates.py:349 +#: netbox/dcim/models/device_components.py:468 msgid "feed leg" msgstr "pierna de alimentación" -#: netbox/dcim/models/device_component_templates.py:351 -#: netbox/dcim/models/device_components.py:481 +#: netbox/dcim/models/device_component_templates.py:354 +#: netbox/dcim/models/device_components.py:473 msgid "Phase (for three-phase feeds)" msgstr "Fase (para alimentaciones trifásicas)" -#: netbox/dcim/models/device_component_templates.py:357 +#: netbox/dcim/models/device_component_templates.py:360 msgid "power outlet template" msgstr "plantilla de toma de corriente" -#: netbox/dcim/models/device_component_templates.py:358 +#: netbox/dcim/models/device_component_templates.py:361 msgid "power outlet templates" msgstr "plantillas de tomas de corriente" -#: netbox/dcim/models/device_component_templates.py:367 +#: netbox/dcim/models/device_component_templates.py:370 #, python-brace-format msgid "Parent power port ({power_port}) must belong to the same device type" msgstr "" "Puerto de alimentación principal ({power_port}) debe pertenecer al mismo " "tipo de dispositivo" -#: netbox/dcim/models/device_component_templates.py:371 +#: netbox/dcim/models/device_component_templates.py:376 #, python-brace-format msgid "Parent power port ({power_port}) must belong to the same module type" msgstr "" "Puerto de alimentación principal ({power_port}) debe pertenecer al mismo " "tipo de módulo" -#: netbox/dcim/models/device_component_templates.py:423 -#: netbox/dcim/models/device_components.py:611 +#: netbox/dcim/models/device_component_templates.py:430 +#: netbox/dcim/models/device_components.py:659 msgid "management only" msgstr "solo administración" -#: netbox/dcim/models/device_component_templates.py:431 -#: netbox/dcim/models/device_components.py:550 +#: netbox/dcim/models/device_component_templates.py:438 +#: netbox/dcim/models/device_components.py:539 msgid "bridge interface" msgstr "interfaz de puente" -#: netbox/dcim/models/device_component_templates.py:449 -#: netbox/dcim/models/device_components.py:636 +#: netbox/dcim/models/device_component_templates.py:459 +#: netbox/dcim/models/device_components.py:685 msgid "wireless role" msgstr "función inalámbrica" -#: netbox/dcim/models/device_component_templates.py:455 +#: netbox/dcim/models/device_component_templates.py:465 msgid "interface template" msgstr "plantilla de interfaz" -#: netbox/dcim/models/device_component_templates.py:456 +#: netbox/dcim/models/device_component_templates.py:466 msgid "interface templates" msgstr "plantillas de interfaz" -#: netbox/dcim/models/device_component_templates.py:463 -#: netbox/dcim/models/device_components.py:804 -#: netbox/virtualization/models/virtualmachines.py:405 +#: netbox/dcim/models/device_component_templates.py:473 +#: netbox/dcim/models/device_components.py:845 +#: netbox/virtualization/models/virtualmachines.py:385 msgid "An interface cannot be bridged to itself." msgstr "Una interfaz no se puede conectar a sí misma." -#: netbox/dcim/models/device_component_templates.py:466 +#: netbox/dcim/models/device_component_templates.py:477 #, python-brace-format msgid "Bridge interface ({bridge}) must belong to the same device type" msgstr "" "Interfaz de puente ({bridge}) debe pertenecer al mismo tipo de dispositivo" -#: netbox/dcim/models/device_component_templates.py:470 +#: netbox/dcim/models/device_component_templates.py:483 #, python-brace-format msgid "Bridge interface ({bridge}) must belong to the same module type" msgstr "Interfaz de puente ({bridge}) debe pertenecer al mismo tipo de módulo" -#: netbox/dcim/models/device_component_templates.py:526 -#: netbox/dcim/models/device_components.py:984 +#: netbox/dcim/models/device_component_templates.py:540 +#: netbox/dcim/models/device_components.py:1035 msgid "rear port position" msgstr "posición del puerto trasero" -#: netbox/dcim/models/device_component_templates.py:551 +#: netbox/dcim/models/device_component_templates.py:565 msgid "front port template" msgstr "plantilla de puerto frontal" -#: netbox/dcim/models/device_component_templates.py:552 +#: netbox/dcim/models/device_component_templates.py:566 msgid "front port templates" msgstr "plantillas de puertos frontales" -#: netbox/dcim/models/device_component_templates.py:562 +#: netbox/dcim/models/device_component_templates.py:576 #, python-brace-format msgid "Rear port ({name}) must belong to the same device type" msgstr "Puerto trasero ({name}) debe pertenecer al mismo tipo de dispositivo" -#: netbox/dcim/models/device_component_templates.py:568 +#: netbox/dcim/models/device_component_templates.py:582 #, python-brace-format msgid "" "Invalid rear port position ({position}); rear port {name} has only {count} " @@ -5415,48 +5919,48 @@ msgstr "" "Posición del puerto trasero no válida ({position}); puerto trasero {name} " "solo tiene {count} posiciones" -#: netbox/dcim/models/device_component_templates.py:621 -#: netbox/dcim/models/device_components.py:1053 +#: netbox/dcim/models/device_component_templates.py:635 +#: netbox/dcim/models/device_components.py:1101 msgid "positions" msgstr "posiciones" -#: netbox/dcim/models/device_component_templates.py:632 +#: netbox/dcim/models/device_component_templates.py:646 msgid "rear port template" msgstr "plantilla de puerto trasero" -#: netbox/dcim/models/device_component_templates.py:633 +#: netbox/dcim/models/device_component_templates.py:647 msgid "rear port templates" msgstr "plantillas de puertos traseros" -#: netbox/dcim/models/device_component_templates.py:662 -#: netbox/dcim/models/device_components.py:1103 +#: netbox/dcim/models/device_component_templates.py:676 +#: netbox/dcim/models/device_components.py:1148 msgid "position" msgstr "posición" -#: netbox/dcim/models/device_component_templates.py:665 -#: netbox/dcim/models/device_components.py:1106 +#: netbox/dcim/models/device_component_templates.py:679 +#: netbox/dcim/models/device_components.py:1151 msgid "Identifier to reference when renaming installed components" msgstr "" "Identificador al que se debe hacer referencia al cambiar el nombre de los " "componentes instalados" -#: netbox/dcim/models/device_component_templates.py:671 +#: netbox/dcim/models/device_component_templates.py:685 msgid "module bay template" msgstr "plantilla de bahía de módulos" -#: netbox/dcim/models/device_component_templates.py:672 +#: netbox/dcim/models/device_component_templates.py:686 msgid "module bay templates" msgstr "plantillas de compartimentos de módulos" -#: netbox/dcim/models/device_component_templates.py:699 +#: netbox/dcim/models/device_component_templates.py:713 msgid "device bay template" msgstr "plantilla de compartimento de dispositivos" -#: netbox/dcim/models/device_component_templates.py:700 +#: netbox/dcim/models/device_component_templates.py:714 msgid "device bay templates" msgstr "plantillas de compartimentos de dispositivos" -#: netbox/dcim/models/device_component_templates.py:713 +#: netbox/dcim/models/device_component_templates.py:728 #, python-brace-format msgid "" "Subdevice role of device type ({device_type}) must be set to \"parent\" to " @@ -5466,207 +5970,226 @@ msgstr "" "configurarse como «principal» para permitir compartimentos para " "dispositivos." -#: netbox/dcim/models/device_component_templates.py:768 -#: netbox/dcim/models/device_components.py:1262 +#: netbox/dcim/models/device_component_templates.py:784 +#: netbox/dcim/models/device_components.py:1304 msgid "part ID" msgstr "ID de pieza" -#: netbox/dcim/models/device_component_templates.py:770 -#: netbox/dcim/models/device_components.py:1264 +#: netbox/dcim/models/device_component_templates.py:786 +#: netbox/dcim/models/device_components.py:1306 msgid "Manufacturer-assigned part identifier" msgstr "Identificador de pieza asignado por el fabricante" -#: netbox/dcim/models/device_component_templates.py:787 +#: netbox/dcim/models/device_component_templates.py:803 msgid "inventory item template" msgstr "plantilla de artículos de inventario" -#: netbox/dcim/models/device_component_templates.py:788 +#: netbox/dcim/models/device_component_templates.py:804 msgid "inventory item templates" msgstr "plantillas de artículos de inventario" -#: netbox/dcim/models/device_components.py:105 +#: netbox/dcim/models/device_components.py:100 msgid "Components cannot be moved to a different device." msgstr "Los componentes no se pueden mover a un dispositivo diferente." -#: netbox/dcim/models/device_components.py:144 +#: netbox/dcim/models/device_components.py:139 msgid "cable end" msgstr "extremo del cable" -#: netbox/dcim/models/device_components.py:150 +#: netbox/dcim/models/device_components.py:146 msgid "mark connected" msgstr "marcar conectado" -#: netbox/dcim/models/device_components.py:152 +#: netbox/dcim/models/device_components.py:148 msgid "Treat as if a cable is connected" msgstr "Tratar como si hubiera un cable conectado" -#: netbox/dcim/models/device_components.py:170 +#: netbox/dcim/models/device_components.py:166 msgid "Must specify cable end (A or B) when attaching a cable." msgstr "Debe especificar el extremo del cable (A o B) al conectar un cable." -#: netbox/dcim/models/device_components.py:174 +#: netbox/dcim/models/device_components.py:170 msgid "Cable end must not be set without a cable." msgstr "El extremo del cable no se debe colocar sin cable." -#: netbox/dcim/models/device_components.py:178 +#: netbox/dcim/models/device_components.py:174 msgid "Cannot mark as connected with a cable attached." msgstr "No se puede marcar como conectado con un cable conectado." -#: netbox/dcim/models/device_components.py:202 +#: netbox/dcim/models/device_components.py:198 #, python-brace-format msgid "{class_name} models must declare a parent_object property" msgstr "{class_name} los modelos deben declarar una propiedad parent_object" -#: netbox/dcim/models/device_components.py:287 -#: netbox/dcim/models/device_components.py:316 -#: netbox/dcim/models/device_components.py:349 -#: netbox/dcim/models/device_components.py:467 +#: netbox/dcim/models/device_components.py:284 +#: netbox/dcim/models/device_components.py:311 +#: netbox/dcim/models/device_components.py:342 +#: netbox/dcim/models/device_components.py:458 msgid "Physical port type" msgstr "Tipo de puerto físico" -#: netbox/dcim/models/device_components.py:290 -#: netbox/dcim/models/device_components.py:319 +#: netbox/dcim/models/device_components.py:287 +#: netbox/dcim/models/device_components.py:314 msgid "speed" msgstr "velocidad" -#: netbox/dcim/models/device_components.py:294 -#: netbox/dcim/models/device_components.py:323 +#: netbox/dcim/models/device_components.py:291 +#: netbox/dcim/models/device_components.py:318 msgid "Port speed in bits per second" msgstr "Velocidad de puerto en bits por segundo" -#: netbox/dcim/models/device_components.py:300 +#: netbox/dcim/models/device_components.py:297 msgid "console port" msgstr "puerto de consola" -#: netbox/dcim/models/device_components.py:301 +#: netbox/dcim/models/device_components.py:298 msgid "console ports" msgstr "puertos de consola" -#: netbox/dcim/models/device_components.py:329 +#: netbox/dcim/models/device_components.py:324 msgid "console server port" msgstr "puerto de servidor de consola" -#: netbox/dcim/models/device_components.py:330 +#: netbox/dcim/models/device_components.py:325 msgid "console server ports" msgstr "puertos de servidor de consola" -#: netbox/dcim/models/device_components.py:369 +#: netbox/dcim/models/device_components.py:362 msgid "power port" msgstr "puerto de alimentación" -#: netbox/dcim/models/device_components.py:370 +#: netbox/dcim/models/device_components.py:363 msgid "power ports" msgstr "puertos de alimentación" -#: netbox/dcim/models/device_components.py:487 +#: netbox/dcim/models/device_components.py:483 msgid "power outlet" msgstr "toma de corriente" -#: netbox/dcim/models/device_components.py:488 +#: netbox/dcim/models/device_components.py:484 msgid "power outlets" msgstr "tomas de corriente" -#: netbox/dcim/models/device_components.py:499 +#: netbox/dcim/models/device_components.py:492 #, python-brace-format msgid "Parent power port ({power_port}) must belong to the same device" msgstr "" "Puerto de alimentación principal ({power_port}) debe pertenecer al mismo " "dispositivo" -#: netbox/dcim/models/device_components.py:530 netbox/vpn/models/crypto.py:81 -#: netbox/vpn/models/crypto.py:226 +#: netbox/dcim/models/device_components.py:518 netbox/vpn/models/crypto.py:80 +#: netbox/vpn/models/crypto.py:222 msgid "mode" msgstr "modo" -#: netbox/dcim/models/device_components.py:534 +#: netbox/dcim/models/device_components.py:523 msgid "IEEE 802.1Q tagging strategy" msgstr "Estrategia de etiquetado IEEE 802.1Q" -#: netbox/dcim/models/device_components.py:542 +#: netbox/dcim/models/device_components.py:531 msgid "parent interface" msgstr "interfaz principal" -#: netbox/dcim/models/device_components.py:602 -msgid "parent LAG" -msgstr "LAG principal" - -#: netbox/dcim/models/device_components.py:612 -msgid "This interface is used only for out-of-band management" -msgstr "Esta interfaz se usa solo para la administración fuera de banda" - -#: netbox/dcim/models/device_components.py:617 -msgid "speed (Kbps)" -msgstr "velocidad (Kbps)" - -#: netbox/dcim/models/device_components.py:620 -msgid "duplex" -msgstr "dúplex" - -#: netbox/dcim/models/device_components.py:630 -msgid "64-bit World Wide Name" -msgstr "Nombre mundial de 64 bits" - -#: netbox/dcim/models/device_components.py:642 -msgid "wireless channel" -msgstr "canal inalámbrico" - -#: netbox/dcim/models/device_components.py:649 -msgid "channel frequency (MHz)" -msgstr "frecuencia de canal (MHz)" - -#: netbox/dcim/models/device_components.py:650 -#: netbox/dcim/models/device_components.py:658 -msgid "Populated by selected channel (if set)" -msgstr "Se rellena por el canal seleccionado (si está configurado)" - -#: netbox/dcim/models/device_components.py:664 -msgid "transmit power (dBm)" -msgstr "potencia de transmisión (dBm)" - -#: netbox/dcim/models/device_components.py:689 netbox/wireless/models.py:117 -msgid "wireless LANs" -msgstr "LAN inalámbricas" - -#: netbox/dcim/models/device_components.py:697 -#: netbox/virtualization/models/virtualmachines.py:335 +#: netbox/dcim/models/device_components.py:547 msgid "untagged VLAN" msgstr "VLAN sin etiquetar" -#: netbox/dcim/models/device_components.py:703 -#: netbox/virtualization/models/virtualmachines.py:341 +#: netbox/dcim/models/device_components.py:553 msgid "tagged VLANs" msgstr "VLAN etiquetadas" -#: netbox/dcim/models/device_components.py:745 -#: netbox/virtualization/models/virtualmachines.py:377 +#: netbox/dcim/models/device_components.py:561 +#: netbox/dcim/tables/devices.py:602 netbox/ipam/forms/bulk_edit.py:510 +#: netbox/ipam/forms/bulk_import.py:491 netbox/ipam/forms/filtersets.py:565 +#: netbox/ipam/forms/model_forms.py:692 netbox/ipam/tables/vlans.py:106 +#: netbox/templates/dcim/interface.html:86 netbox/templates/ipam/vlan.html:77 +msgid "Q-in-Q SVLAN" +msgstr "SVLAN Q-in-Q" + +#: netbox/dcim/models/device_components.py:576 +msgid "primary MAC address" +msgstr "dirección MAC principal" + +#: netbox/dcim/models/device_components.py:588 +msgid "Only Q-in-Q interfaces may specify a service VLAN." +msgstr "Solo las interfaces Q-in-Q pueden especificar una VLAN de servicio." + +#: netbox/dcim/models/device_components.py:594 +#, python-brace-format +msgid "MAC address {mac_address} is not assigned to this interface." +msgstr "Dirección MAC {mac_address} no está asignado a esta interfaz." + +#: netbox/dcim/models/device_components.py:650 +msgid "parent LAG" +msgstr "LAG principal" + +#: netbox/dcim/models/device_components.py:660 +msgid "This interface is used only for out-of-band management" +msgstr "Esta interfaz se usa solo para la administración fuera de banda" + +#: netbox/dcim/models/device_components.py:665 +msgid "speed (Kbps)" +msgstr "velocidad (Kbps)" + +#: netbox/dcim/models/device_components.py:668 +msgid "duplex" +msgstr "dúplex" + +#: netbox/dcim/models/device_components.py:678 +msgid "64-bit World Wide Name" +msgstr "Nombre mundial de 64 bits" + +#: netbox/dcim/models/device_components.py:692 +msgid "wireless channel" +msgstr "canal inalámbrico" + +#: netbox/dcim/models/device_components.py:699 +msgid "channel frequency (MHz)" +msgstr "frecuencia de canal (MHz)" + +#: netbox/dcim/models/device_components.py:700 +#: netbox/dcim/models/device_components.py:708 +msgid "Populated by selected channel (if set)" +msgstr "Se rellena por el canal seleccionado (si está configurado)" + +#: netbox/dcim/models/device_components.py:714 +msgid "transmit power (dBm)" +msgstr "potencia de transmisión (dBm)" + +#: netbox/dcim/models/device_components.py:741 netbox/wireless/models.py:117 +msgid "wireless LANs" +msgstr "LAN inalámbricas" + +#: netbox/dcim/models/device_components.py:789 +#: netbox/virtualization/models/virtualmachines.py:359 msgid "interface" msgstr "interfaz" -#: netbox/dcim/models/device_components.py:746 -#: netbox/virtualization/models/virtualmachines.py:378 +#: netbox/dcim/models/device_components.py:790 +#: netbox/virtualization/models/virtualmachines.py:360 msgid "interfaces" msgstr "interfaz" -#: netbox/dcim/models/device_components.py:757 +#: netbox/dcim/models/device_components.py:798 #, python-brace-format msgid "{display_type} interfaces cannot have a cable attached." msgstr "{display_type} las interfaces no pueden tener un cable conectado." -#: netbox/dcim/models/device_components.py:765 +#: netbox/dcim/models/device_components.py:806 #, python-brace-format msgid "{display_type} interfaces cannot be marked as connected." msgstr "{display_type} las interfaces no se pueden marcar como conectadas." -#: netbox/dcim/models/device_components.py:774 -#: netbox/virtualization/models/virtualmachines.py:390 +#: netbox/dcim/models/device_components.py:815 +#: netbox/virtualization/models/virtualmachines.py:370 msgid "An interface cannot be its own parent." msgstr "Una interfaz no puede ser su propia interfaz principal." -#: netbox/dcim/models/device_components.py:778 +#: netbox/dcim/models/device_components.py:819 msgid "Only virtual interfaces may be assigned to a parent interface." msgstr "Solo se pueden asignar interfaces virtuales a una interfaz principal." -#: netbox/dcim/models/device_components.py:785 +#: netbox/dcim/models/device_components.py:826 #, python-brace-format msgid "" "The selected parent interface ({interface}) belongs to a different device " @@ -5675,7 +6198,7 @@ msgstr "" "La interfaz principal seleccionada ({interface}) pertenece a un dispositivo " "diferente ({device})" -#: netbox/dcim/models/device_components.py:791 +#: netbox/dcim/models/device_components.py:832 #, python-brace-format msgid "" "The selected parent interface ({interface}) belongs to {device}, which is " @@ -5684,7 +6207,7 @@ msgstr "" "La interfaz principal seleccionada ({interface}) pertenece a {device}, que " "no forma parte del chasis virtual {virtual_chassis}." -#: netbox/dcim/models/device_components.py:811 +#: netbox/dcim/models/device_components.py:852 #, python-brace-format msgid "" "The selected bridge interface ({bridge}) belongs to a different device " @@ -5693,7 +6216,7 @@ msgstr "" "La interfaz de puente seleccionada ({bridge}) pertenece a un dispositivo " "diferente ({device})." -#: netbox/dcim/models/device_components.py:817 +#: netbox/dcim/models/device_components.py:858 #, python-brace-format msgid "" "The selected bridge interface ({interface}) belongs to {device}, which is " @@ -5702,15 +6225,15 @@ msgstr "" "La interfaz de puente seleccionada ({interface}) pertenece a {device}, que " "no forma parte del chasis virtual {virtual_chassis}." -#: netbox/dcim/models/device_components.py:828 +#: netbox/dcim/models/device_components.py:869 msgid "Virtual interfaces cannot have a parent LAG interface." msgstr "Las interfaces virtuales no pueden tener una interfaz LAG principal." -#: netbox/dcim/models/device_components.py:832 +#: netbox/dcim/models/device_components.py:873 msgid "A LAG interface cannot be its own parent." msgstr "Una interfaz LAG no puede ser su propia interfaz principal." -#: netbox/dcim/models/device_components.py:839 +#: netbox/dcim/models/device_components.py:880 #, python-brace-format msgid "" "The selected LAG interface ({lag}) belongs to a different device ({device})." @@ -5718,7 +6241,7 @@ msgstr "" "La interfaz LAG seleccionada ({lag}) pertenece a un dispositivo diferente " "({device})." -#: netbox/dcim/models/device_components.py:845 +#: netbox/dcim/models/device_components.py:886 #, python-brace-format msgid "" "The selected LAG interface ({lag}) belongs to {device}, which is not part of" @@ -5727,51 +6250,55 @@ msgstr "" "La interfaz LAG seleccionada ({lag}) pertenece a {device}, que no forma " "parte del chasis virtual {virtual_chassis}." -#: netbox/dcim/models/device_components.py:856 +#: netbox/dcim/models/device_components.py:897 msgid "Virtual interfaces cannot have a PoE mode." msgstr "Las interfaces virtuales no pueden tener un modo PoE." -#: netbox/dcim/models/device_components.py:860 +#: netbox/dcim/models/device_components.py:901 msgid "Virtual interfaces cannot have a PoE type." msgstr "Las interfaces virtuales no pueden tener un tipo PoE." -#: netbox/dcim/models/device_components.py:866 +#: netbox/dcim/models/device_components.py:907 msgid "Must specify PoE mode when designating a PoE type." msgstr "Debe especificar el modo PoE al designar un tipo de PoE." -#: netbox/dcim/models/device_components.py:873 +#: netbox/dcim/models/device_components.py:914 msgid "Wireless role may be set only on wireless interfaces." msgstr "" "La función inalámbrica solo se puede configurar en las interfaces " "inalámbricas." -#: netbox/dcim/models/device_components.py:875 +#: netbox/dcim/models/device_components.py:916 msgid "Channel may be set only on wireless interfaces." msgstr "El canal solo se puede configurar en las interfaces inalámbricas." -#: netbox/dcim/models/device_components.py:881 +#: netbox/dcim/models/device_components.py:922 msgid "Channel frequency may be set only on wireless interfaces." msgstr "" "La frecuencia del canal solo se puede configurar en las interfaces " "inalámbricas." -#: netbox/dcim/models/device_components.py:885 +#: netbox/dcim/models/device_components.py:926 msgid "Cannot specify custom frequency with channel selected." msgstr "" "No se puede especificar la frecuencia personalizada con el canal " "seleccionado." -#: netbox/dcim/models/device_components.py:891 +#: netbox/dcim/models/device_components.py:932 msgid "Channel width may be set only on wireless interfaces." msgstr "" "El ancho del canal solo se puede establecer en las interfaces inalámbricas." -#: netbox/dcim/models/device_components.py:893 +#: netbox/dcim/models/device_components.py:934 msgid "Cannot specify custom width with channel selected." msgstr "" "No se puede especificar un ancho personalizado con el canal seleccionado." -#: netbox/dcim/models/device_components.py:901 +#: netbox/dcim/models/device_components.py:938 +msgid "Interface mode does not support an untagged vlan." +msgstr "El modo de interfaz no admite una vlan sin etiquetas." + +#: netbox/dcim/models/device_components.py:944 #, python-brace-format msgid "" "The untagged VLAN ({untagged_vlan}) must belong to the same site as the " @@ -5780,24 +6307,24 @@ msgstr "" "La VLAN sin etiquetar ({untagged_vlan}) debe pertenecer al mismo sitio que " "el dispositivo principal de la interfaz o debe ser global." -#: netbox/dcim/models/device_components.py:990 +#: netbox/dcim/models/device_components.py:1041 msgid "Mapped position on corresponding rear port" msgstr "Posición mapeada en el puerto trasero correspondiente" -#: netbox/dcim/models/device_components.py:1006 +#: netbox/dcim/models/device_components.py:1057 msgid "front port" msgstr "puerto frontal" -#: netbox/dcim/models/device_components.py:1007 +#: netbox/dcim/models/device_components.py:1058 msgid "front ports" msgstr "puertos frontales" -#: netbox/dcim/models/device_components.py:1021 +#: netbox/dcim/models/device_components.py:1069 #, python-brace-format msgid "Rear port ({rear_port}) must belong to the same device" msgstr "Puerto trasero ({rear_port}) debe pertenecer al mismo dispositivo" -#: netbox/dcim/models/device_components.py:1029 +#: netbox/dcim/models/device_components.py:1077 #, python-brace-format msgid "" "Invalid rear port position ({rear_port_position}): Rear port {name} has only" @@ -5806,19 +6333,19 @@ msgstr "" "Posición del puerto trasero no válida ({rear_port_position}): puerto trasero" " {name} solo tiene {positions} posiciones." -#: netbox/dcim/models/device_components.py:1059 +#: netbox/dcim/models/device_components.py:1107 msgid "Number of front ports which may be mapped" msgstr "Número de puertos frontales que se pueden mapear" -#: netbox/dcim/models/device_components.py:1064 +#: netbox/dcim/models/device_components.py:1112 msgid "rear port" msgstr "puerto trasero" -#: netbox/dcim/models/device_components.py:1065 +#: netbox/dcim/models/device_components.py:1113 msgid "rear ports" msgstr "puertos traseros" -#: netbox/dcim/models/device_components.py:1079 +#: netbox/dcim/models/device_components.py:1124 #, python-brace-format msgid "" "The number of positions cannot be less than the number of mapped front ports" @@ -5827,40 +6354,40 @@ msgstr "" "El número de posiciones no puede ser inferior al número de puertos frontales" " mapeados ({frontport_count})" -#: netbox/dcim/models/device_components.py:1120 +#: netbox/dcim/models/device_components.py:1165 msgid "module bay" msgstr "compartimiento de módulos" -#: netbox/dcim/models/device_components.py:1121 +#: netbox/dcim/models/device_components.py:1166 msgid "module bays" msgstr "compartimentos de módulos" -#: netbox/dcim/models/device_components.py:1138 -#: netbox/dcim/models/devices.py:1224 +#: netbox/dcim/models/device_components.py:1180 +#: netbox/dcim/models/devices.py:1229 msgid "A module bay cannot belong to a module installed within it." msgstr "" "Una bahía de módulos no puede pertenecer a un módulo instalado en ella." -#: netbox/dcim/models/device_components.py:1164 +#: netbox/dcim/models/device_components.py:1206 msgid "device bay" msgstr "compartimiento de dispositivos" -#: netbox/dcim/models/device_components.py:1165 +#: netbox/dcim/models/device_components.py:1207 msgid "device bays" msgstr "compartimentos para dispositivos" -#: netbox/dcim/models/device_components.py:1175 +#: netbox/dcim/models/device_components.py:1214 #, python-brace-format msgid "This type of device ({device_type}) does not support device bays." msgstr "" "Este tipo de dispositivo ({device_type}) no admite compartimentos para " "dispositivos." -#: netbox/dcim/models/device_components.py:1181 +#: netbox/dcim/models/device_components.py:1220 msgid "Cannot install a device into itself." msgstr "No se puede instalar un dispositivo en sí mismo." -#: netbox/dcim/models/device_components.py:1189 +#: netbox/dcim/models/device_components.py:1228 #, python-brace-format msgid "" "Cannot install the specified device; device is already installed in {bay}." @@ -5868,118 +6395,118 @@ msgstr "" "No se puede instalar el dispositivo especificado; el dispositivo ya está " "instalado en {bay}." -#: netbox/dcim/models/device_components.py:1210 +#: netbox/dcim/models/device_components.py:1249 msgid "inventory item role" msgstr "rol de artículo de inventario" -#: netbox/dcim/models/device_components.py:1211 +#: netbox/dcim/models/device_components.py:1250 msgid "inventory item roles" msgstr "roles de artículos de inventario" -#: netbox/dcim/models/device_components.py:1268 -#: netbox/dcim/models/devices.py:607 netbox/dcim/models/devices.py:1181 -#: netbox/dcim/models/racks.py:313 -#: netbox/virtualization/models/virtualmachines.py:131 +#: netbox/dcim/models/device_components.py:1310 +#: netbox/dcim/models/devices.py:598 netbox/dcim/models/devices.py:1189 +#: netbox/dcim/models/racks.py:304 +#: netbox/virtualization/models/virtualmachines.py:126 msgid "serial number" msgstr "número de serie" -#: netbox/dcim/models/device_components.py:1276 -#: netbox/dcim/models/devices.py:615 netbox/dcim/models/devices.py:1188 -#: netbox/dcim/models/racks.py:320 +#: netbox/dcim/models/device_components.py:1318 +#: netbox/dcim/models/devices.py:606 netbox/dcim/models/devices.py:1196 +#: netbox/dcim/models/racks.py:311 msgid "asset tag" msgstr "etiqueta de activo" -#: netbox/dcim/models/device_components.py:1277 +#: netbox/dcim/models/device_components.py:1319 msgid "A unique tag used to identify this item" msgstr "Una etiqueta única que se utiliza para identificar este artículo" -#: netbox/dcim/models/device_components.py:1280 +#: netbox/dcim/models/device_components.py:1322 msgid "discovered" msgstr "descubierto" -#: netbox/dcim/models/device_components.py:1282 +#: netbox/dcim/models/device_components.py:1324 msgid "This item was automatically discovered" msgstr "Este artículo se descubrió automáticamente" -#: netbox/dcim/models/device_components.py:1300 +#: netbox/dcim/models/device_components.py:1342 msgid "inventory item" msgstr "artículo de inventario" -#: netbox/dcim/models/device_components.py:1301 +#: netbox/dcim/models/device_components.py:1343 msgid "inventory items" msgstr "artículos de inventario" -#: netbox/dcim/models/device_components.py:1312 +#: netbox/dcim/models/device_components.py:1351 msgid "Cannot assign self as parent." msgstr "No se puede asignar a sí mismo como padre." -#: netbox/dcim/models/device_components.py:1320 +#: netbox/dcim/models/device_components.py:1359 msgid "Parent inventory item does not belong to the same device." msgstr "" "El artículo del inventario principal no pertenece al mismo dispositivo." -#: netbox/dcim/models/device_components.py:1326 +#: netbox/dcim/models/device_components.py:1365 msgid "Cannot move an inventory item with dependent children" msgstr "No se puede mover un artículo del inventario con hijos a cargo" -#: netbox/dcim/models/device_components.py:1334 +#: netbox/dcim/models/device_components.py:1373 msgid "Cannot assign inventory item to component on another device" msgstr "" "No se puede asignar un artículo de inventario a un componente de otro " "dispositivo" -#: netbox/dcim/models/devices.py:54 +#: netbox/dcim/models/devices.py:59 msgid "manufacturer" msgstr "fabricante" -#: netbox/dcim/models/devices.py:55 +#: netbox/dcim/models/devices.py:60 msgid "manufacturers" msgstr "fabricantes" -#: netbox/dcim/models/devices.py:82 netbox/dcim/models/devices.py:382 +#: netbox/dcim/models/devices.py:84 netbox/dcim/models/devices.py:383 #: netbox/dcim/models/racks.py:133 msgid "model" msgstr "modelo" -#: netbox/dcim/models/devices.py:95 +#: netbox/dcim/models/devices.py:97 msgid "default platform" msgstr "plataforma predeterminada" -#: netbox/dcim/models/devices.py:98 netbox/dcim/models/devices.py:386 +#: netbox/dcim/models/devices.py:100 netbox/dcim/models/devices.py:387 msgid "part number" msgstr "número de pieza" -#: netbox/dcim/models/devices.py:101 netbox/dcim/models/devices.py:389 +#: netbox/dcim/models/devices.py:103 netbox/dcim/models/devices.py:390 msgid "Discrete part number (optional)" msgstr "Número de pieza discreto (opcional)" -#: netbox/dcim/models/devices.py:107 netbox/dcim/models/racks.py:54 +#: netbox/dcim/models/devices.py:109 netbox/dcim/models/racks.py:53 msgid "height (U)" msgstr "altura (U)" -#: netbox/dcim/models/devices.py:111 +#: netbox/dcim/models/devices.py:113 msgid "exclude from utilization" msgstr "excluir de la utilización" -#: netbox/dcim/models/devices.py:112 +#: netbox/dcim/models/devices.py:114 msgid "Devices of this type are excluded when calculating rack utilization." msgstr "" "Los dispositivos de este tipo se excluyen al calcular la utilización de los " "racks." -#: netbox/dcim/models/devices.py:116 +#: netbox/dcim/models/devices.py:118 msgid "is full depth" msgstr "es de profundidad total" -#: netbox/dcim/models/devices.py:117 +#: netbox/dcim/models/devices.py:119 msgid "Device consumes both front and rear rack faces." msgstr "El dispositivo consume las caras delantera y trasera del bastidor." -#: netbox/dcim/models/devices.py:123 +#: netbox/dcim/models/devices.py:126 msgid "parent/child status" msgstr "estado de padre/hijo" -#: netbox/dcim/models/devices.py:124 +#: netbox/dcim/models/devices.py:127 msgid "" "Parent devices house child devices in device bays. Leave blank if this " "device type is neither a parent nor a child." @@ -5988,24 +6515,24 @@ msgstr "" "compartimentos para dispositivos. Déjelo en blanco si este tipo de " "dispositivo no es para padres ni para niños." -#: netbox/dcim/models/devices.py:128 netbox/dcim/models/devices.py:392 -#: netbox/dcim/models/devices.py:659 netbox/dcim/models/racks.py:324 +#: netbox/dcim/models/devices.py:131 netbox/dcim/models/devices.py:393 +#: netbox/dcim/models/devices.py:651 netbox/dcim/models/racks.py:315 msgid "airflow" msgstr "flujo de aire" -#: netbox/dcim/models/devices.py:204 +#: netbox/dcim/models/devices.py:208 msgid "device type" msgstr "tipo de dispositivo" -#: netbox/dcim/models/devices.py:205 +#: netbox/dcim/models/devices.py:209 msgid "device types" msgstr "tipos de dispositivos" -#: netbox/dcim/models/devices.py:290 +#: netbox/dcim/models/devices.py:291 msgid "U height must be in increments of 0.5 rack units." msgstr "La altura en U debe ser en incrementos de 0,5 unidades de bastidor." -#: netbox/dcim/models/devices.py:307 +#: netbox/dcim/models/devices.py:308 #, python-brace-format msgid "" "Device {device} in rack {rack} does not have sufficient space to accommodate" @@ -6014,7 +6541,7 @@ msgstr "" "Dispositivo {device} en un estante {rack} no tiene espacio suficiente para " "acomodar una altura de {height}U" -#: netbox/dcim/models/devices.py:322 +#: netbox/dcim/models/devices.py:323 #, python-brace-format msgid "" "Unable to set 0U height: Found {racked_instance_count} " @@ -6024,7 +6551,7 @@ msgstr "" "href=\"{url}\">{racked_instance_count} instancias ya está montado dentro" " de bastidores." -#: netbox/dcim/models/devices.py:331 +#: netbox/dcim/models/devices.py:332 msgid "" "Must delete all device bay templates associated with this device before " "declassifying it as a parent device." @@ -6033,155 +6560,155 @@ msgstr "" "asociadas a este dispositivo antes de desclasificarlo como dispositivo " "principal." -#: netbox/dcim/models/devices.py:337 +#: netbox/dcim/models/devices.py:338 msgid "Child device types must be 0U." msgstr "Los tipos de dispositivos secundarios deben ser 0U." -#: netbox/dcim/models/devices.py:411 +#: netbox/dcim/models/devices.py:413 msgid "module type" msgstr "tipo de módulo" -#: netbox/dcim/models/devices.py:412 +#: netbox/dcim/models/devices.py:414 msgid "module types" msgstr "tipos de módulos" -#: netbox/dcim/models/devices.py:485 +#: netbox/dcim/models/devices.py:484 msgid "Virtual machines may be assigned to this role" msgstr "Se pueden asignar máquinas virtuales a esta función" -#: netbox/dcim/models/devices.py:497 +#: netbox/dcim/models/devices.py:496 msgid "device role" msgstr "rol del dispositivo" -#: netbox/dcim/models/devices.py:498 +#: netbox/dcim/models/devices.py:497 msgid "device roles" msgstr "funciones del dispositivo" -#: netbox/dcim/models/devices.py:515 +#: netbox/dcim/models/devices.py:511 msgid "Optionally limit this platform to devices of a certain manufacturer" msgstr "" "Si lo desea, limite esta plataforma a dispositivos de un fabricante " "determinado." -#: netbox/dcim/models/devices.py:527 +#: netbox/dcim/models/devices.py:523 msgid "platform" msgstr "plataforma" -#: netbox/dcim/models/devices.py:528 +#: netbox/dcim/models/devices.py:524 msgid "platforms" msgstr "plataformas" -#: netbox/dcim/models/devices.py:576 +#: netbox/dcim/models/devices.py:572 msgid "The function this device serves" msgstr "La función que cumple este dispositivo" -#: netbox/dcim/models/devices.py:608 +#: netbox/dcim/models/devices.py:599 msgid "Chassis serial number, assigned by the manufacturer" msgstr "Número de serie del chasis, asignado por el fabricante" -#: netbox/dcim/models/devices.py:616 netbox/dcim/models/devices.py:1189 +#: netbox/dcim/models/devices.py:607 netbox/dcim/models/devices.py:1197 msgid "A unique tag used to identify this device" msgstr "Una etiqueta única que se utiliza para identificar este dispositivo" -#: netbox/dcim/models/devices.py:643 +#: netbox/dcim/models/devices.py:634 msgid "position (U)" msgstr "posición (U)" -#: netbox/dcim/models/devices.py:650 +#: netbox/dcim/models/devices.py:642 msgid "rack face" msgstr "cara del estante" -#: netbox/dcim/models/devices.py:670 netbox/dcim/models/devices.py:1420 -#: netbox/virtualization/models/virtualmachines.py:100 +#: netbox/dcim/models/devices.py:663 netbox/dcim/models/devices.py:1425 +#: netbox/virtualization/models/virtualmachines.py:95 msgid "primary IPv4" msgstr "IPv4 principal" -#: netbox/dcim/models/devices.py:678 netbox/dcim/models/devices.py:1428 -#: netbox/virtualization/models/virtualmachines.py:108 +#: netbox/dcim/models/devices.py:671 netbox/dcim/models/devices.py:1433 +#: netbox/virtualization/models/virtualmachines.py:103 msgid "primary IPv6" msgstr "IPv6 principal" -#: netbox/dcim/models/devices.py:686 +#: netbox/dcim/models/devices.py:679 msgid "out-of-band IP" msgstr "IP fuera de banda" -#: netbox/dcim/models/devices.py:703 +#: netbox/dcim/models/devices.py:696 msgid "VC position" msgstr "Posición VC" -#: netbox/dcim/models/devices.py:706 +#: netbox/dcim/models/devices.py:699 msgid "Virtual chassis position" msgstr "Posición virtual del chasis" -#: netbox/dcim/models/devices.py:709 +#: netbox/dcim/models/devices.py:702 msgid "VC priority" msgstr "Prioridad VC" -#: netbox/dcim/models/devices.py:713 +#: netbox/dcim/models/devices.py:706 msgid "Virtual chassis master election priority" msgstr "Prioridad de elección del maestro del chasis virtual" -#: netbox/dcim/models/devices.py:716 netbox/dcim/models/sites.py:207 +#: netbox/dcim/models/devices.py:709 netbox/dcim/models/sites.py:208 msgid "latitude" msgstr "latitud" -#: netbox/dcim/models/devices.py:721 netbox/dcim/models/devices.py:729 -#: netbox/dcim/models/sites.py:212 netbox/dcim/models/sites.py:220 +#: netbox/dcim/models/devices.py:714 netbox/dcim/models/devices.py:722 +#: netbox/dcim/models/sites.py:213 netbox/dcim/models/sites.py:221 msgid "GPS coordinate in decimal format (xx.yyyyyy)" msgstr "Coordenada GPS en formato decimal (xx.aaaaa)" -#: netbox/dcim/models/devices.py:724 netbox/dcim/models/sites.py:215 +#: netbox/dcim/models/devices.py:717 netbox/dcim/models/sites.py:216 msgid "longitude" msgstr "longitud" -#: netbox/dcim/models/devices.py:797 +#: netbox/dcim/models/devices.py:790 msgid "Device name must be unique per site." msgstr "El nombre del dispositivo debe ser único por sitio." -#: netbox/dcim/models/devices.py:808 netbox/ipam/models/services.py:75 +#: netbox/dcim/models/devices.py:801 netbox/ipam/models/services.py:71 msgid "device" msgstr "dispositivo" -#: netbox/dcim/models/devices.py:809 +#: netbox/dcim/models/devices.py:802 msgid "devices" msgstr "dispositivos" -#: netbox/dcim/models/devices.py:835 +#: netbox/dcim/models/devices.py:821 #, python-brace-format msgid "Rack {rack} does not belong to site {site}." msgstr "Estante {rack} no pertenece al sitio {site}." -#: netbox/dcim/models/devices.py:840 +#: netbox/dcim/models/devices.py:826 #, python-brace-format msgid "Location {location} does not belong to site {site}." msgstr "Ubicación {location} no pertenece al sitio {site}." -#: netbox/dcim/models/devices.py:846 +#: netbox/dcim/models/devices.py:832 #, python-brace-format msgid "Rack {rack} does not belong to location {location}." msgstr "Estante {rack} no pertenece a la ubicación {location}." -#: netbox/dcim/models/devices.py:853 +#: netbox/dcim/models/devices.py:839 msgid "Cannot select a rack face without assigning a rack." msgstr "No se puede seleccionar una cara de bastidor sin asignar un bastidor." -#: netbox/dcim/models/devices.py:857 +#: netbox/dcim/models/devices.py:843 msgid "Cannot select a rack position without assigning a rack." msgstr "" "No se puede seleccionar una posición de cremallera sin asignar una " "cremallera." -#: netbox/dcim/models/devices.py:863 +#: netbox/dcim/models/devices.py:849 msgid "Position must be in increments of 0.5 rack units." msgstr "La posición debe estar en incrementos de 0,5 unidades de estante." -#: netbox/dcim/models/devices.py:867 +#: netbox/dcim/models/devices.py:853 msgid "Must specify rack face when defining rack position." msgstr "" "Debe especificar la cara de la cremallera al definir la posición de la " "cremallera." -#: netbox/dcim/models/devices.py:875 +#: netbox/dcim/models/devices.py:861 #, python-brace-format msgid "" "A 0U device type ({device_type}) cannot be assigned to a rack position." @@ -6189,7 +6716,7 @@ msgstr "" "Un tipo de dispositivo 0U ({device_type}) no se puede asignar a una posición" " de estantería." -#: netbox/dcim/models/devices.py:886 +#: netbox/dcim/models/devices.py:872 msgid "" "Child device types cannot be assigned to a rack face. This is an attribute " "of the parent device." @@ -6197,7 +6724,7 @@ msgstr "" "Los tipos de dispositivos secundarios no se pueden asignar a la cara de un " "bastidor. Este es un atributo del dispositivo principal." -#: netbox/dcim/models/devices.py:893 +#: netbox/dcim/models/devices.py:879 msgid "" "Child device types cannot be assigned to a rack position. This is an " "attribute of the parent device." @@ -6205,7 +6732,7 @@ msgstr "" "Los tipos de dispositivos secundarios no se pueden asignar a una posición de" " bastidor. Este es un atributo del dispositivo principal." -#: netbox/dcim/models/devices.py:907 +#: netbox/dcim/models/devices.py:893 #, python-brace-format msgid "" "U{position} is already occupied or does not have sufficient space to " @@ -6214,23 +6741,23 @@ msgstr "" "U{position} ya está ocupado o no tiene espacio suficiente para este tipo de " "dispositivo: {device_type} ({u_height}U)" -#: netbox/dcim/models/devices.py:922 +#: netbox/dcim/models/devices.py:908 #, python-brace-format msgid "{ip} is not an IPv4 address." msgstr "{ip} no es una dirección IPv4." -#: netbox/dcim/models/devices.py:931 netbox/dcim/models/devices.py:946 +#: netbox/dcim/models/devices.py:920 netbox/dcim/models/devices.py:938 #, python-brace-format msgid "The specified IP address ({ip}) is not assigned to this device." msgstr "" "La dirección IP especificada ({ip}) no está asignado a este dispositivo." -#: netbox/dcim/models/devices.py:937 +#: netbox/dcim/models/devices.py:926 #, python-brace-format msgid "{ip} is not an IPv6 address." msgstr "{ip} no es una dirección IPv6." -#: netbox/dcim/models/devices.py:964 +#: netbox/dcim/models/devices.py:956 #, python-brace-format msgid "" "The assigned platform is limited to {platform_manufacturer} device types, " @@ -6240,12 +6767,17 @@ msgstr "" "dispositivos, pero el tipo de este dispositivo pertenece a " "{devicetype_manufacturer}." -#: netbox/dcim/models/devices.py:975 +#: netbox/dcim/models/devices.py:967 #, python-brace-format msgid "The assigned cluster belongs to a different site ({site})" msgstr "El clúster asignado pertenece a un sitio diferente ({site})" -#: netbox/dcim/models/devices.py:983 +#: netbox/dcim/models/devices.py:974 +#, python-brace-format +msgid "The assigned cluster belongs to a different location ({location})" +msgstr "El clúster asignado pertenece a una ubicación diferente ({location})" + +#: netbox/dcim/models/devices.py:982 msgid "A device assigned to a virtual chassis must have its position defined." msgstr "" "Un dispositivo asignado a un chasis virtual debe tener su posición definida." @@ -6259,15 +6791,15 @@ msgstr "" "El dispositivo no se puede extraer del chasis virtual {virtual_chassis} " "porque actualmente está designado como su maestro." -#: netbox/dcim/models/devices.py:1196 +#: netbox/dcim/models/devices.py:1204 msgid "module" msgstr "módulo" -#: netbox/dcim/models/devices.py:1197 +#: netbox/dcim/models/devices.py:1205 msgid "modules" msgstr "módulos" -#: netbox/dcim/models/devices.py:1213 +#: netbox/dcim/models/devices.py:1218 #, python-brace-format msgid "" "Module must be installed within a module bay belonging to the assigned " @@ -6276,22 +6808,22 @@ msgstr "" "El módulo debe instalarse en un compartimiento de módulos que pertenezca al " "dispositivo asignado ({device})." -#: netbox/dcim/models/devices.py:1339 +#: netbox/dcim/models/devices.py:1346 msgid "domain" msgstr "dominio" -#: netbox/dcim/models/devices.py:1352 netbox/dcim/models/devices.py:1353 +#: netbox/dcim/models/devices.py:1359 netbox/dcim/models/devices.py:1360 msgid "virtual chassis" msgstr "chasis virtual" -#: netbox/dcim/models/devices.py:1368 +#: netbox/dcim/models/devices.py:1372 #, python-brace-format msgid "" "The selected master ({master}) is not assigned to this virtual chassis." msgstr "" "El maestro seleccionado ({master}) no está asignado a este chasis virtual." -#: netbox/dcim/models/devices.py:1384 +#: netbox/dcim/models/devices.py:1388 #, python-brace-format msgid "" "Unable to delete virtual chassis {self}. There are member interfaces which " @@ -6300,52 +6832,63 @@ msgstr "" "No se puede eliminar el chasis virtual {self}. Hay interfaces miembros que " "forman interfaces LAG entre chasis." -#: netbox/dcim/models/devices.py:1409 netbox/vpn/models/l2vpn.py:37 +#: netbox/dcim/models/devices.py:1414 netbox/vpn/models/l2vpn.py:37 msgid "identifier" msgstr "identificador" -#: netbox/dcim/models/devices.py:1410 +#: netbox/dcim/models/devices.py:1415 msgid "Numeric identifier unique to the parent device" msgstr "Identificador numérico exclusivo del dispositivo principal" -#: netbox/dcim/models/devices.py:1438 netbox/extras/models/customfields.py:225 +#: netbox/dcim/models/devices.py:1443 netbox/extras/models/customfields.py:225 #: netbox/extras/models/models.py:107 netbox/extras/models/models.py:694 -#: netbox/netbox/models/__init__.py:115 +#: netbox/netbox/models/__init__.py:120 msgid "comments" msgstr "comentarios" -#: netbox/dcim/models/devices.py:1454 +#: netbox/dcim/models/devices.py:1459 msgid "virtual device context" msgstr "contexto de dispositivo virtual" -#: netbox/dcim/models/devices.py:1455 +#: netbox/dcim/models/devices.py:1460 msgid "virtual device contexts" msgstr "contextos de dispositivos virtuales" -#: netbox/dcim/models/devices.py:1487 +#: netbox/dcim/models/devices.py:1489 #, python-brace-format msgid "{ip} is not an IPv{family} address." msgstr "{ip} no es un IPv{family} dirección." -#: netbox/dcim/models/devices.py:1493 +#: netbox/dcim/models/devices.py:1495 msgid "Primary IP address must belong to an interface on the assigned device." msgstr "" "La dirección IP principal debe pertenecer a una interfaz del dispositivo " "asignado." -#: netbox/dcim/models/mixins.py:15 netbox/extras/models/configs.py:41 -#: netbox/extras/models/models.py:313 netbox/extras/models/models.py:522 -#: netbox/extras/models/search.py:48 netbox/ipam/models/ip.py:194 -msgid "weight" -msgstr "peso" +#: netbox/dcim/models/devices.py:1527 +msgid "MAC addresses" +msgstr "direcciones MAC" -#: netbox/dcim/models/mixins.py:22 -msgid "weight unit" -msgstr "unidad de peso" +#: netbox/dcim/models/devices.py:1559 +msgid "" +"Cannot unassign MAC Address while it is designated as the primary MAC for an" +" object" +msgstr "" +"No se puede anular la asignación de la dirección MAC mientras esté designada" +" como la MAC principal de un objeto" -#: netbox/dcim/models/mixins.py:51 -msgid "Must specify a unit when setting a weight" -msgstr "Debe especificar una unidad al establecer un peso" +#: netbox/dcim/models/devices.py:1563 +msgid "" +"Cannot reassign MAC Address while it is designated as the primary MAC for an" +" object" +msgstr "" +"No se puede reasignar la dirección MAC mientras esté designada como la MAC " +"principal de un objeto" + +#: netbox/dcim/models/mixins.py:94 +#, python-brace-format +msgid "Please select a {scope_type}." +msgstr "Por favor, selecciona un {scope_type}." #: netbox/dcim/models/power.py:55 msgid "power panel" @@ -6355,50 +6898,50 @@ msgstr "panel de alimentación" msgid "power panels" msgstr "paneles de alimentación" -#: netbox/dcim/models/power.py:70 +#: netbox/dcim/models/power.py:67 #, python-brace-format msgid "" "Location {location} ({location_site}) is in a different site than {site}" msgstr "" "Ubicación {location} ({location_site}) está en un sitio diferente al {site}" -#: netbox/dcim/models/power.py:108 +#: netbox/dcim/models/power.py:106 msgid "supply" msgstr "suministrar" -#: netbox/dcim/models/power.py:114 +#: netbox/dcim/models/power.py:112 msgid "phase" msgstr "fase" -#: netbox/dcim/models/power.py:120 +#: netbox/dcim/models/power.py:118 msgid "voltage" msgstr "voltaje" -#: netbox/dcim/models/power.py:125 +#: netbox/dcim/models/power.py:123 msgid "amperage" msgstr "amperaje" -#: netbox/dcim/models/power.py:130 +#: netbox/dcim/models/power.py:128 msgid "max utilization" msgstr "utilización máxima" -#: netbox/dcim/models/power.py:133 +#: netbox/dcim/models/power.py:131 msgid "Maximum permissible draw (percentage)" msgstr "Consumo máximo permitido (porcentaje)" -#: netbox/dcim/models/power.py:136 +#: netbox/dcim/models/power.py:134 msgid "available power" msgstr "potencia disponible" -#: netbox/dcim/models/power.py:164 +#: netbox/dcim/models/power.py:162 msgid "power feed" msgstr "alimentación" -#: netbox/dcim/models/power.py:165 +#: netbox/dcim/models/power.py:163 msgid "power feeds" msgstr "fuentes de alimentación" -#: netbox/dcim/models/power.py:179 +#: netbox/dcim/models/power.py:174 #, python-brace-format msgid "" "Rack {rack} ({rack_site}) and power panel {powerpanel} ({powerpanel_site}) " @@ -6407,56 +6950,56 @@ msgstr "" "Estante {rack} ({rack_site}) y panel de alimentación {powerpanel} " "({powerpanel_site}) están en diferentes sitios." -#: netbox/dcim/models/power.py:190 +#: netbox/dcim/models/power.py:185 msgid "Voltage cannot be negative for AC supply" msgstr "" "La tensión no puede ser negativa para el suministro de corriente alterna" -#: netbox/dcim/models/racks.py:47 +#: netbox/dcim/models/racks.py:46 msgid "width" msgstr "anchura" -#: netbox/dcim/models/racks.py:48 +#: netbox/dcim/models/racks.py:47 msgid "Rail-to-rail width" msgstr "Ancho de riel a riel" -#: netbox/dcim/models/racks.py:56 +#: netbox/dcim/models/racks.py:55 msgid "Height in rack units" msgstr "Altura en unidades de estantería" -#: netbox/dcim/models/racks.py:60 +#: netbox/dcim/models/racks.py:59 msgid "starting unit" msgstr "unidad de arranque" -#: netbox/dcim/models/racks.py:62 +#: netbox/dcim/models/racks.py:61 msgid "Starting unit for rack" msgstr "Unidad de arranque para bastidor" -#: netbox/dcim/models/racks.py:66 +#: netbox/dcim/models/racks.py:65 msgid "descending units" msgstr "unidades descendentes" -#: netbox/dcim/models/racks.py:67 +#: netbox/dcim/models/racks.py:66 msgid "Units are numbered top-to-bottom" msgstr "Las unidades están numeradas de arriba a abajo" -#: netbox/dcim/models/racks.py:72 +#: netbox/dcim/models/racks.py:71 msgid "outer width" msgstr "ancho exterior" -#: netbox/dcim/models/racks.py:75 +#: netbox/dcim/models/racks.py:74 msgid "Outer dimension of rack (width)" msgstr "Dimensión exterior del estante (ancho)" -#: netbox/dcim/models/racks.py:78 +#: netbox/dcim/models/racks.py:77 msgid "outer depth" msgstr "profundidad exterior" -#: netbox/dcim/models/racks.py:81 +#: netbox/dcim/models/racks.py:80 msgid "Outer dimension of rack (depth)" msgstr "Dimensión exterior del bastidor (profundidad)" -#: netbox/dcim/models/racks.py:84 +#: netbox/dcim/models/racks.py:83 msgid "outer unit" msgstr "unidad exterior" @@ -6481,7 +7024,7 @@ msgstr "peso máximo" msgid "Maximum load capacity for the rack" msgstr "Capacidad de carga máxima del bastidor" -#: netbox/dcim/models/racks.py:125 netbox/dcim/models/racks.py:252 +#: netbox/dcim/models/racks.py:125 netbox/dcim/models/racks.py:247 msgid "form factor" msgstr "factor de forma" @@ -6493,57 +7036,57 @@ msgstr "tipo de bastidor" msgid "rack types" msgstr "tipos de estanterías" -#: netbox/dcim/models/racks.py:180 netbox/dcim/models/racks.py:379 +#: netbox/dcim/models/racks.py:177 netbox/dcim/models/racks.py:368 msgid "Must specify a unit when setting an outer width/depth" msgstr "" "Debe especificar una unidad al establecer una anchura o profundidad " "exteriores" -#: netbox/dcim/models/racks.py:184 netbox/dcim/models/racks.py:383 +#: netbox/dcim/models/racks.py:181 netbox/dcim/models/racks.py:372 msgid "Must specify a unit when setting a maximum weight" msgstr "Debe especificar una unidad al establecer un peso máximo" -#: netbox/dcim/models/racks.py:230 +#: netbox/dcim/models/racks.py:227 msgid "rack role" msgstr "rol de bastidor" -#: netbox/dcim/models/racks.py:231 +#: netbox/dcim/models/racks.py:228 msgid "rack roles" msgstr "roles de seguimiento" -#: netbox/dcim/models/racks.py:274 +#: netbox/dcim/models/racks.py:265 msgid "facility ID" msgstr "ID de la instalación" -#: netbox/dcim/models/racks.py:275 +#: netbox/dcim/models/racks.py:266 msgid "Locally-assigned identifier" msgstr "Identificador asignado localmente" -#: netbox/dcim/models/racks.py:308 netbox/ipam/forms/bulk_import.py:201 -#: netbox/ipam/forms/bulk_import.py:266 netbox/ipam/forms/bulk_import.py:301 -#: netbox/ipam/forms/bulk_import.py:483 -#: netbox/virtualization/forms/bulk_import.py:112 +#: netbox/dcim/models/racks.py:299 netbox/ipam/forms/bulk_import.py:197 +#: netbox/ipam/forms/bulk_import.py:265 netbox/ipam/forms/bulk_import.py:300 +#: netbox/ipam/forms/bulk_import.py:482 +#: netbox/virtualization/forms/bulk_import.py:118 msgid "Functional role" msgstr "Función funcional" -#: netbox/dcim/models/racks.py:321 +#: netbox/dcim/models/racks.py:312 msgid "A unique tag used to identify this rack" msgstr "Una etiqueta única que se utiliza para identificar este estante" -#: netbox/dcim/models/racks.py:359 +#: netbox/dcim/models/racks.py:351 msgid "rack" msgstr "estante" -#: netbox/dcim/models/racks.py:360 +#: netbox/dcim/models/racks.py:352 msgid "racks" msgstr "bastidores" -#: netbox/dcim/models/racks.py:375 +#: netbox/dcim/models/racks.py:364 #, python-brace-format msgid "Assigned location must belong to parent site ({site})." msgstr "La ubicación asignada debe pertenecer al sitio principal ({site})." -#: netbox/dcim/models/racks.py:393 +#: netbox/dcim/models/racks.py:387 #, python-brace-format msgid "" "Rack must be at least {min_height}U tall to house currently installed " @@ -6552,7 +7095,7 @@ msgstr "" "El estante debe tener al menos {min_height}Hablo para alojar los " "dispositivos instalados actualmente." -#: netbox/dcim/models/racks.py:400 +#: netbox/dcim/models/racks.py:396 #, python-brace-format msgid "" "Rack unit numbering must begin at {position} or less to house currently " @@ -6561,119 +7104,119 @@ msgstr "" "La numeración de las unidades del bastidor debe comenzar en {position} o " "menos para alojar los dispositivos actualmente instalados." -#: netbox/dcim/models/racks.py:408 +#: netbox/dcim/models/racks.py:404 #, python-brace-format msgid "Location must be from the same site, {site}." msgstr "La ubicación debe ser del mismo sitio, {site}." -#: netbox/dcim/models/racks.py:670 +#: netbox/dcim/models/racks.py:666 msgid "units" msgstr "unidades" -#: netbox/dcim/models/racks.py:696 +#: netbox/dcim/models/racks.py:692 msgid "rack reservation" msgstr "reserva de seguimiento" -#: netbox/dcim/models/racks.py:697 +#: netbox/dcim/models/racks.py:693 msgid "rack reservations" msgstr "Seguimiento de reservas" -#: netbox/dcim/models/racks.py:714 +#: netbox/dcim/models/racks.py:707 #, python-brace-format msgid "Invalid unit(s) for {height}U rack: {unit_list}" msgstr "" "Unidad (es) no válida (s) para {height}Rack de Reino Unido: {unit_list}" -#: netbox/dcim/models/racks.py:727 +#: netbox/dcim/models/racks.py:720 #, python-brace-format msgid "The following units have already been reserved: {unit_list}" msgstr "Ya se han reservado las siguientes unidades: {unit_list}" -#: netbox/dcim/models/sites.py:49 +#: netbox/dcim/models/sites.py:53 msgid "A top-level region with this name already exists." msgstr "Ya existe una región de nivel superior con este nombre." -#: netbox/dcim/models/sites.py:59 +#: netbox/dcim/models/sites.py:63 msgid "A top-level region with this slug already exists." msgstr "Ya existe una región de alto nivel con esta babosa." -#: netbox/dcim/models/sites.py:62 +#: netbox/dcim/models/sites.py:66 msgid "region" msgstr "región" -#: netbox/dcim/models/sites.py:63 +#: netbox/dcim/models/sites.py:67 msgid "regions" msgstr "regiones" -#: netbox/dcim/models/sites.py:102 +#: netbox/dcim/models/sites.py:109 msgid "A top-level site group with this name already exists." msgstr "Ya existe un grupo de sitio de nivel superior con este nombre." -#: netbox/dcim/models/sites.py:112 +#: netbox/dcim/models/sites.py:119 msgid "A top-level site group with this slug already exists." msgstr "Ya existe un grupo de sitios de nivel superior con este slug." -#: netbox/dcim/models/sites.py:115 +#: netbox/dcim/models/sites.py:122 msgid "site group" msgstr "grupo de sitios" -#: netbox/dcim/models/sites.py:116 +#: netbox/dcim/models/sites.py:123 msgid "site groups" msgstr "grupos de sitios" -#: netbox/dcim/models/sites.py:141 +#: netbox/dcim/models/sites.py:145 msgid "Full name of the site" msgstr "Nombre completo del sitio" -#: netbox/dcim/models/sites.py:181 netbox/dcim/models/sites.py:279 +#: netbox/dcim/models/sites.py:181 netbox/dcim/models/sites.py:283 msgid "facility" msgstr "instalaciones" -#: netbox/dcim/models/sites.py:184 netbox/dcim/models/sites.py:282 +#: netbox/dcim/models/sites.py:184 netbox/dcim/models/sites.py:286 msgid "Local facility ID or description" msgstr "ID o descripción de la instalación local" -#: netbox/dcim/models/sites.py:195 +#: netbox/dcim/models/sites.py:196 msgid "physical address" msgstr "dirección física" -#: netbox/dcim/models/sites.py:198 +#: netbox/dcim/models/sites.py:199 msgid "Physical location of the building" msgstr "Ubicación física del edificio" -#: netbox/dcim/models/sites.py:201 +#: netbox/dcim/models/sites.py:202 msgid "shipping address" msgstr "dirección de envío" -#: netbox/dcim/models/sites.py:204 +#: netbox/dcim/models/sites.py:205 msgid "If different from the physical address" msgstr "Si es diferente de la dirección física" -#: netbox/dcim/models/sites.py:238 +#: netbox/dcim/models/sites.py:245 msgid "site" msgstr "sitio" -#: netbox/dcim/models/sites.py:239 +#: netbox/dcim/models/sites.py:246 msgid "sites" msgstr "sitios" -#: netbox/dcim/models/sites.py:309 +#: netbox/dcim/models/sites.py:319 msgid "A location with this name already exists within the specified site." msgstr "Ya existe una ubicación con este nombre en el sitio especificado." -#: netbox/dcim/models/sites.py:319 +#: netbox/dcim/models/sites.py:329 msgid "A location with this slug already exists within the specified site." msgstr "Ya existe una ubicación con esta babosa en el sitio especificado." -#: netbox/dcim/models/sites.py:322 +#: netbox/dcim/models/sites.py:332 msgid "location" msgstr "ubicación" -#: netbox/dcim/models/sites.py:323 +#: netbox/dcim/models/sites.py:333 msgid "locations" msgstr "ubicaciones" -#: netbox/dcim/models/sites.py:337 +#: netbox/dcim/models/sites.py:344 #, python-brace-format msgid "Parent location ({parent}) must belong to the same site ({site})." msgstr "" @@ -6687,11 +7230,11 @@ msgstr "Terminación A" msgid "Termination B" msgstr "Terminación B" -#: netbox/dcim/tables/cables.py:66 netbox/wireless/tables/wirelesslink.py:23 +#: netbox/dcim/tables/cables.py:66 netbox/wireless/tables/wirelesslink.py:22 msgid "Device A" msgstr "Dispositivo A" -#: netbox/dcim/tables/cables.py:72 netbox/wireless/tables/wirelesslink.py:32 +#: netbox/dcim/tables/cables.py:72 netbox/wireless/tables/wirelesslink.py:31 msgid "Device B" msgstr "Dispositivo B" @@ -6725,97 +7268,91 @@ msgstr "Sitio B" msgid "Reachable" msgstr "Accesible" -#: netbox/dcim/tables/devices.py:58 netbox/dcim/tables/devices.py:106 -#: netbox/dcim/tables/racks.py:150 netbox/dcim/tables/sites.py:105 -#: netbox/dcim/tables/sites.py:148 netbox/extras/tables/tables.py:545 +#: netbox/dcim/tables/devices.py:69 netbox/dcim/tables/devices.py:117 +#: netbox/dcim/tables/racks.py:149 netbox/dcim/tables/sites.py:104 +#: netbox/dcim/tables/sites.py:147 netbox/extras/tables/tables.py:545 #: netbox/netbox/navigation/menu.py:69 netbox/netbox/navigation/menu.py:73 #: netbox/netbox/navigation/menu.py:75 #: netbox/virtualization/forms/model_forms.py:122 -#: netbox/virtualization/tables/clusters.py:83 -#: netbox/virtualization/views.py:204 +#: netbox/virtualization/tables/clusters.py:87 +#: netbox/virtualization/views.py:216 msgid "Devices" msgstr "Dispositivos" -#: netbox/dcim/tables/devices.py:63 netbox/dcim/tables/devices.py:111 -#: netbox/virtualization/tables/clusters.py:88 +#: netbox/dcim/tables/devices.py:74 netbox/dcim/tables/devices.py:122 +#: netbox/virtualization/tables/clusters.py:92 msgid "VMs" msgstr "VM" -#: netbox/dcim/tables/devices.py:100 netbox/dcim/tables/devices.py:216 -#: netbox/extras/forms/model_forms.py:630 +#: netbox/dcim/tables/devices.py:111 netbox/dcim/tables/devices.py:227 +#: netbox/extras/forms/model_forms.py:644 #: netbox/templates/dcim/device.html:112 -#: netbox/templates/dcim/device/render_config.html:11 -#: netbox/templates/dcim/device/render_config.html:14 #: netbox/templates/dcim/devicerole.html:44 #: netbox/templates/dcim/platform.html:41 #: netbox/templates/extras/configtemplate.html:10 +#: netbox/templates/extras/object_render_config.html:12 +#: netbox/templates/extras/object_render_config.html:15 #: netbox/templates/virtualization/virtualmachine.html:48 -#: netbox/templates/virtualization/virtualmachine/render_config.html:11 -#: netbox/templates/virtualization/virtualmachine/render_config.html:14 -#: netbox/virtualization/tables/virtualmachines.py:107 +#: netbox/virtualization/tables/virtualmachines.py:77 msgid "Config Template" msgstr "Plantilla de configuración" -#: netbox/dcim/tables/devices.py:150 netbox/templates/dcim/sitegroup.html:26 -msgid "Site Group" -msgstr "Grupo de sitios" - -#: netbox/dcim/tables/devices.py:187 netbox/dcim/tables/devices.py:1068 -#: netbox/ipam/forms/bulk_import.py:527 netbox/ipam/forms/model_forms.py:306 -#: netbox/ipam/forms/model_forms.py:319 netbox/ipam/tables/ip.py:356 -#: netbox/ipam/tables/ip.py:423 netbox/ipam/tables/ip.py:446 +#: netbox/dcim/tables/devices.py:198 netbox/dcim/tables/devices.py:1100 +#: netbox/ipam/forms/bulk_import.py:562 netbox/ipam/forms/model_forms.py:316 +#: netbox/ipam/forms/model_forms.py:329 netbox/ipam/tables/ip.py:308 +#: netbox/ipam/tables/ip.py:375 netbox/ipam/tables/ip.py:398 #: netbox/templates/ipam/ipaddress.html:11 -#: netbox/virtualization/tables/virtualmachines.py:95 +#: netbox/virtualization/tables/virtualmachines.py:65 msgid "IP Address" msgstr "Dirección IP" -#: netbox/dcim/tables/devices.py:191 netbox/dcim/tables/devices.py:1072 -#: netbox/virtualization/tables/virtualmachines.py:86 +#: netbox/dcim/tables/devices.py:202 netbox/dcim/tables/devices.py:1104 +#: netbox/virtualization/tables/virtualmachines.py:56 msgid "IPv4 Address" msgstr "Dirección IPv4" -#: netbox/dcim/tables/devices.py:195 netbox/dcim/tables/devices.py:1076 -#: netbox/virtualization/tables/virtualmachines.py:90 +#: netbox/dcim/tables/devices.py:206 netbox/dcim/tables/devices.py:1108 +#: netbox/virtualization/tables/virtualmachines.py:60 msgid "IPv6 Address" msgstr "Dirección IPv6" -#: netbox/dcim/tables/devices.py:210 +#: netbox/dcim/tables/devices.py:221 msgid "VC Position" msgstr "Posición VC" -#: netbox/dcim/tables/devices.py:213 +#: netbox/dcim/tables/devices.py:224 msgid "VC Priority" msgstr "Prioridad VC" -#: netbox/dcim/tables/devices.py:220 netbox/templates/dcim/device_edit.html:38 +#: netbox/dcim/tables/devices.py:231 netbox/templates/dcim/device_edit.html:38 #: netbox/templates/dcim/devicebay_populate.html:16 msgid "Parent Device" msgstr "Dispositivo principal" -#: netbox/dcim/tables/devices.py:225 +#: netbox/dcim/tables/devices.py:236 msgid "Position (Device Bay)" msgstr "Posición (bahía de dispositivos)" -#: netbox/dcim/tables/devices.py:234 +#: netbox/dcim/tables/devices.py:245 msgid "Console ports" msgstr "Puertos de consola" -#: netbox/dcim/tables/devices.py:237 +#: netbox/dcim/tables/devices.py:248 msgid "Console server ports" msgstr "Puertos de servidor de consola" -#: netbox/dcim/tables/devices.py:240 +#: netbox/dcim/tables/devices.py:251 msgid "Power ports" msgstr "Puertos de alimentación" -#: netbox/dcim/tables/devices.py:243 +#: netbox/dcim/tables/devices.py:254 msgid "Power outlets" msgstr "tomas de corriente" -#: netbox/dcim/tables/devices.py:246 netbox/dcim/tables/devices.py:1081 -#: netbox/dcim/tables/devicetypes.py:128 netbox/dcim/views.py:1040 -#: netbox/dcim/views.py:1279 netbox/dcim/views.py:1975 -#: netbox/netbox/navigation/menu.py:94 netbox/netbox/navigation/menu.py:250 +#: netbox/dcim/tables/devices.py:257 netbox/dcim/tables/devices.py:1113 +#: netbox/dcim/tables/devicetypes.py:133 netbox/dcim/views.py:1144 +#: netbox/dcim/views.py:1388 netbox/dcim/views.py:2139 +#: netbox/netbox/navigation/menu.py:94 netbox/netbox/navigation/menu.py:258 #: netbox/templates/dcim/device/base.html:37 #: netbox/templates/dcim/device_list.html:43 #: netbox/templates/dcim/devicetype/base.html:34 @@ -6825,35 +7362,35 @@ msgstr "tomas de corriente" #: netbox/templates/dcim/virtualdevicecontext.html:81 #: netbox/templates/virtualization/virtualmachine/base.html:27 #: netbox/templates/virtualization/virtualmachine_list.html:14 -#: netbox/virtualization/tables/virtualmachines.py:101 -#: netbox/virtualization/views.py:364 netbox/wireless/tables/wirelesslan.py:55 +#: netbox/virtualization/tables/virtualmachines.py:71 +#: netbox/virtualization/views.py:381 netbox/wireless/tables/wirelesslan.py:63 msgid "Interfaces" msgstr "Interfaces" -#: netbox/dcim/tables/devices.py:249 +#: netbox/dcim/tables/devices.py:260 msgid "Front ports" msgstr "Puertos frontales" -#: netbox/dcim/tables/devices.py:255 +#: netbox/dcim/tables/devices.py:266 msgid "Device bays" msgstr "Compartimentos para dispositivos" -#: netbox/dcim/tables/devices.py:258 +#: netbox/dcim/tables/devices.py:269 msgid "Module bays" msgstr "Bahías de módulos" -#: netbox/dcim/tables/devices.py:261 +#: netbox/dcim/tables/devices.py:272 msgid "Inventory items" msgstr "Artículos de inventario" -#: netbox/dcim/tables/devices.py:305 netbox/dcim/tables/modules.py:57 +#: netbox/dcim/tables/devices.py:315 netbox/dcim/tables/modules.py:57 #: netbox/templates/dcim/modulebay.html:17 msgid "Module Bay" msgstr "Bahía de módulos" -#: netbox/dcim/tables/devices.py:318 netbox/dcim/tables/devicetypes.py:47 -#: netbox/dcim/tables/devicetypes.py:143 netbox/dcim/views.py:1115 -#: netbox/dcim/views.py:2073 netbox/netbox/navigation/menu.py:103 +#: netbox/dcim/tables/devices.py:328 netbox/dcim/tables/devicetypes.py:52 +#: netbox/dcim/tables/devicetypes.py:148 netbox/dcim/views.py:1219 +#: netbox/dcim/views.py:2237 netbox/netbox/navigation/menu.py:103 #: netbox/templates/dcim/device/base.html:52 #: netbox/templates/dcim/device_list.html:71 #: netbox/templates/dcim/devicetype/base.html:49 @@ -6862,124 +7399,133 @@ msgstr "Bahía de módulos" msgid "Inventory Items" msgstr "Artículos de inventario" -#: netbox/dcim/tables/devices.py:333 +#: netbox/dcim/tables/devices.py:343 msgid "Cable Color" msgstr "Color del cable" -#: netbox/dcim/tables/devices.py:339 +#: netbox/dcim/tables/devices.py:349 msgid "Link Peers" msgstr "Vincula a tus compañeros" -#: netbox/dcim/tables/devices.py:342 +#: netbox/dcim/tables/devices.py:352 msgid "Mark Connected" msgstr "Marcar conectado" -#: netbox/dcim/tables/devices.py:461 +#: netbox/dcim/tables/devices.py:471 msgid "Maximum draw (W)" msgstr "Consumo máximo (W)" -#: netbox/dcim/tables/devices.py:464 +#: netbox/dcim/tables/devices.py:474 msgid "Allocated draw (W)" msgstr "Sorteo asignado (W)" -#: netbox/dcim/tables/devices.py:558 netbox/ipam/forms/model_forms.py:734 -#: netbox/ipam/tables/fhrp.py:28 netbox/ipam/views.py:596 -#: netbox/ipam/views.py:696 netbox/netbox/navigation/menu.py:158 -#: netbox/netbox/navigation/menu.py:160 -#: netbox/templates/dcim/interface.html:339 +#: netbox/dcim/tables/devices.py:572 netbox/ipam/forms/model_forms.py:784 +#: netbox/ipam/tables/fhrp.py:28 netbox/ipam/views.py:633 +#: netbox/ipam/views.py:738 netbox/netbox/navigation/menu.py:164 +#: netbox/netbox/navigation/menu.py:166 +#: netbox/templates/dcim/interface.html:396 #: netbox/templates/ipam/ipaddress_bulk_add.html:15 #: netbox/templates/ipam/service.html:40 -#: netbox/templates/virtualization/vminterface.html:85 +#: netbox/templates/virtualization/vminterface.html:101 #: netbox/vpn/tables/tunnels.py:98 msgid "IP Addresses" msgstr "Direcciones IP" -#: netbox/dcim/tables/devices.py:564 netbox/netbox/navigation/menu.py:202 +#: netbox/dcim/tables/devices.py:578 netbox/netbox/navigation/menu.py:210 #: netbox/templates/ipam/inc/panels/fhrp_groups.html:6 msgid "FHRP Groups" msgstr "Grupos FHRP" -#: netbox/dcim/tables/devices.py:576 netbox/templates/dcim/interface.html:89 -#: netbox/templates/virtualization/vminterface.html:67 +#: netbox/dcim/tables/devices.py:590 netbox/templates/dcim/interface.html:95 +#: netbox/templates/virtualization/vminterface.html:59 #: netbox/templates/vpn/tunnel.html:18 #: netbox/templates/vpn/tunneltermination.html:13 #: netbox/vpn/forms/bulk_edit.py:76 netbox/vpn/forms/bulk_import.py:76 #: netbox/vpn/forms/filtersets.py:42 netbox/vpn/forms/filtersets.py:82 -#: netbox/vpn/forms/model_forms.py:60 netbox/vpn/forms/model_forms.py:145 +#: netbox/vpn/forms/model_forms.py:61 netbox/vpn/forms/model_forms.py:146 #: netbox/vpn/tables/tunnels.py:78 msgid "Tunnel" msgstr "Túnel" -#: netbox/dcim/tables/devices.py:604 netbox/dcim/tables/devicetypes.py:227 +#: netbox/dcim/tables/devices.py:626 netbox/dcim/tables/devicetypes.py:234 #: netbox/templates/dcim/interface.html:65 msgid "Management Only" msgstr "Solo administración" -#: netbox/dcim/tables/devices.py:623 +#: netbox/dcim/tables/devices.py:645 msgid "VDCs" msgstr "VDC" -#: netbox/dcim/tables/devices.py:873 netbox/templates/dcim/modulebay.html:53 +#: netbox/dcim/tables/devices.py:652 netbox/templates/dcim/interface.html:163 +msgid "Virtual Circuit" +msgstr "Circuito virtual" + +#: netbox/dcim/tables/devices.py:904 netbox/templates/dcim/modulebay.html:53 msgid "Installed Module" msgstr "Módulo instalado" -#: netbox/dcim/tables/devices.py:876 +#: netbox/dcim/tables/devices.py:907 msgid "Module Serial" msgstr "Serie del módulo" -#: netbox/dcim/tables/devices.py:880 +#: netbox/dcim/tables/devices.py:911 msgid "Module Asset Tag" msgstr "Etiqueta de activo del módulo" -#: netbox/dcim/tables/devices.py:889 +#: netbox/dcim/tables/devices.py:920 msgid "Module Status" msgstr "Estado del módulo" -#: netbox/dcim/tables/devices.py:944 netbox/dcim/tables/devicetypes.py:312 -#: netbox/templates/dcim/inventoryitem.html:40 +#: netbox/dcim/tables/devices.py:974 netbox/dcim/tables/devicetypes.py:319 +#: netbox/templates/dcim/inventoryitem.html:44 msgid "Component" msgstr "Componente" -#: netbox/dcim/tables/devices.py:1000 +#: netbox/dcim/tables/devices.py:1032 msgid "Items" msgstr "Artículos" -#: netbox/dcim/tables/devicetypes.py:37 netbox/netbox/navigation/menu.py:84 +#: netbox/dcim/tables/devicetypes.py:37 netbox/netbox/navigation/menu.py:60 +#: netbox/netbox/navigation/menu.py:62 +msgid "Rack Types" +msgstr "Tipos de estanterías" + +#: netbox/dcim/tables/devicetypes.py:42 netbox/netbox/navigation/menu.py:84 #: netbox/netbox/navigation/menu.py:86 msgid "Device Types" msgstr "Tipos de dispositivos" -#: netbox/dcim/tables/devicetypes.py:42 netbox/netbox/navigation/menu.py:87 +#: netbox/dcim/tables/devicetypes.py:47 netbox/netbox/navigation/menu.py:87 msgid "Module Types" msgstr "Tipos de módulos" -#: netbox/dcim/tables/devicetypes.py:52 netbox/extras/forms/filtersets.py:371 -#: netbox/extras/forms/model_forms.py:537 netbox/extras/tables/tables.py:540 +#: netbox/dcim/tables/devicetypes.py:57 netbox/extras/forms/filtersets.py:378 +#: netbox/extras/forms/model_forms.py:551 netbox/extras/tables/tables.py:540 #: netbox/netbox/navigation/menu.py:78 msgid "Platforms" msgstr "Plataformas" -#: netbox/dcim/tables/devicetypes.py:84 +#: netbox/dcim/tables/devicetypes.py:89 #: netbox/templates/dcim/devicetype.html:29 msgid "Default Platform" msgstr "Plataforma predeterminada" -#: netbox/dcim/tables/devicetypes.py:88 +#: netbox/dcim/tables/devicetypes.py:93 #: netbox/templates/dcim/devicetype.html:45 msgid "Full Depth" msgstr "Profundidad total" -#: netbox/dcim/tables/devicetypes.py:98 +#: netbox/dcim/tables/devicetypes.py:103 msgid "U Height" msgstr "Altura en U" -#: netbox/dcim/tables/devicetypes.py:113 netbox/dcim/tables/modules.py:26 +#: netbox/dcim/tables/devicetypes.py:118 netbox/dcim/tables/modules.py:26 #: netbox/dcim/tables/racks.py:89 msgid "Instances" msgstr "Instancias" -#: netbox/dcim/tables/devicetypes.py:116 netbox/dcim/views.py:980 -#: netbox/dcim/views.py:1219 netbox/dcim/views.py:1911 +#: netbox/dcim/tables/devicetypes.py:121 netbox/dcim/views.py:1084 +#: netbox/dcim/views.py:1328 netbox/dcim/views.py:2075 #: netbox/netbox/navigation/menu.py:97 #: netbox/templates/dcim/device/base.html:25 #: netbox/templates/dcim/device_list.html:15 @@ -6989,8 +7535,8 @@ msgstr "Instancias" msgid "Console Ports" msgstr "Puertos de consola" -#: netbox/dcim/tables/devicetypes.py:119 netbox/dcim/views.py:995 -#: netbox/dcim/views.py:1234 netbox/dcim/views.py:1927 +#: netbox/dcim/tables/devicetypes.py:124 netbox/dcim/views.py:1099 +#: netbox/dcim/views.py:1343 netbox/dcim/views.py:2091 #: netbox/netbox/navigation/menu.py:98 #: netbox/templates/dcim/device/base.html:28 #: netbox/templates/dcim/device_list.html:22 @@ -7000,8 +7546,8 @@ msgstr "Puertos de consola" msgid "Console Server Ports" msgstr "Puertos de servidor de consola" -#: netbox/dcim/tables/devicetypes.py:122 netbox/dcim/views.py:1010 -#: netbox/dcim/views.py:1249 netbox/dcim/views.py:1943 +#: netbox/dcim/tables/devicetypes.py:127 netbox/dcim/views.py:1114 +#: netbox/dcim/views.py:1358 netbox/dcim/views.py:2107 #: netbox/netbox/navigation/menu.py:99 #: netbox/templates/dcim/device/base.html:31 #: netbox/templates/dcim/device_list.html:29 @@ -7011,8 +7557,8 @@ msgstr "Puertos de servidor de consola" msgid "Power Ports" msgstr "Puertos de alimentación" -#: netbox/dcim/tables/devicetypes.py:125 netbox/dcim/views.py:1025 -#: netbox/dcim/views.py:1264 netbox/dcim/views.py:1959 +#: netbox/dcim/tables/devicetypes.py:130 netbox/dcim/views.py:1129 +#: netbox/dcim/views.py:1373 netbox/dcim/views.py:2123 #: netbox/netbox/navigation/menu.py:100 #: netbox/templates/dcim/device/base.html:34 #: netbox/templates/dcim/device_list.html:36 @@ -7022,8 +7568,8 @@ msgstr "Puertos de alimentación" msgid "Power Outlets" msgstr "Tomas de corriente" -#: netbox/dcim/tables/devicetypes.py:131 netbox/dcim/views.py:1055 -#: netbox/dcim/views.py:1294 netbox/dcim/views.py:1997 +#: netbox/dcim/tables/devicetypes.py:136 netbox/dcim/views.py:1159 +#: netbox/dcim/views.py:1403 netbox/dcim/views.py:2161 #: netbox/netbox/navigation/menu.py:95 #: netbox/templates/dcim/device/base.html:40 #: netbox/templates/dcim/devicetype/base.html:37 @@ -7032,8 +7578,8 @@ msgstr "Tomas de corriente" msgid "Front Ports" msgstr "Puertos frontales" -#: netbox/dcim/tables/devicetypes.py:134 netbox/dcim/views.py:1070 -#: netbox/dcim/views.py:1309 netbox/dcim/views.py:2013 +#: netbox/dcim/tables/devicetypes.py:139 netbox/dcim/views.py:1174 +#: netbox/dcim/views.py:1418 netbox/dcim/views.py:2177 #: netbox/netbox/navigation/menu.py:96 #: netbox/templates/dcim/device/base.html:43 #: netbox/templates/dcim/device_list.html:50 @@ -7043,16 +7589,16 @@ msgstr "Puertos frontales" msgid "Rear Ports" msgstr "Puertos traseros" -#: netbox/dcim/tables/devicetypes.py:137 netbox/dcim/views.py:1100 -#: netbox/dcim/views.py:2053 netbox/netbox/navigation/menu.py:102 +#: netbox/dcim/tables/devicetypes.py:142 netbox/dcim/views.py:1204 +#: netbox/dcim/views.py:2217 netbox/netbox/navigation/menu.py:102 #: netbox/templates/dcim/device/base.html:49 #: netbox/templates/dcim/device_list.html:57 #: netbox/templates/dcim/devicetype/base.html:46 msgid "Device Bays" msgstr "Bahías de dispositivos" -#: netbox/dcim/tables/devicetypes.py:140 netbox/dcim/views.py:1085 -#: netbox/dcim/views.py:1324 netbox/dcim/views.py:2033 +#: netbox/dcim/tables/devicetypes.py:145 netbox/dcim/views.py:1189 +#: netbox/dcim/views.py:1433 netbox/dcim/views.py:2197 #: netbox/netbox/navigation/menu.py:101 #: netbox/templates/dcim/device/base.html:46 #: netbox/templates/dcim/device_list.html:64 @@ -7062,7 +7608,7 @@ msgstr "Bahías de dispositivos" msgid "Module Bays" msgstr "Bahías de módulos" -#: netbox/dcim/tables/power.py:36 netbox/netbox/navigation/menu.py:297 +#: netbox/dcim/tables/power.py:36 netbox/netbox/navigation/menu.py:318 #: netbox/templates/dcim/powerpanel.html:51 msgid "Power Feeds" msgstr "Fuentes de alimentación" @@ -7075,111 +7621,106 @@ msgstr "Utilización máxima" msgid "Available Power (VA)" msgstr "Potencia disponible (VA)" -#: netbox/dcim/tables/racks.py:30 netbox/dcim/tables/sites.py:143 +#: netbox/dcim/tables/racks.py:30 netbox/dcim/tables/sites.py:142 #: netbox/netbox/navigation/menu.py:43 netbox/netbox/navigation/menu.py:47 #: netbox/netbox/navigation/menu.py:49 msgid "Racks" msgstr "Bastidores" -#: netbox/dcim/tables/racks.py:63 netbox/dcim/tables/racks.py:142 +#: netbox/dcim/tables/racks.py:63 netbox/dcim/tables/racks.py:141 #: netbox/templates/dcim/device.html:318 #: netbox/templates/dcim/inc/panels/racktype_dimensions.html:14 msgid "Height" msgstr "Altura" -#: netbox/dcim/tables/racks.py:67 netbox/dcim/tables/racks.py:165 +#: netbox/dcim/tables/racks.py:67 netbox/dcim/tables/racks.py:164 #: netbox/templates/dcim/inc/panels/racktype_dimensions.html:18 msgid "Outer Width" msgstr "Anchura exterior" -#: netbox/dcim/tables/racks.py:71 netbox/dcim/tables/racks.py:169 +#: netbox/dcim/tables/racks.py:71 netbox/dcim/tables/racks.py:168 #: netbox/templates/dcim/inc/panels/racktype_dimensions.html:28 msgid "Outer Depth" msgstr "Profundidad exterior" -#: netbox/dcim/tables/racks.py:79 netbox/dcim/tables/racks.py:177 +#: netbox/dcim/tables/racks.py:79 netbox/dcim/tables/racks.py:176 msgid "Max Weight" msgstr "Peso máximo" -#: netbox/dcim/tables/racks.py:154 +#: netbox/dcim/tables/racks.py:153 msgid "Space" msgstr "Espacio" #: netbox/dcim/tables/sites.py:30 netbox/dcim/tables/sites.py:57 -#: netbox/extras/forms/filtersets.py:351 -#: netbox/extras/forms/model_forms.py:517 netbox/ipam/forms/bulk_edit.py:131 -#: netbox/ipam/forms/model_forms.py:153 netbox/ipam/tables/asn.py:66 +#: netbox/extras/forms/filtersets.py:358 +#: netbox/extras/forms/model_forms.py:531 netbox/ipam/forms/bulk_edit.py:134 +#: netbox/ipam/forms/model_forms.py:159 netbox/ipam/tables/asn.py:66 #: netbox/netbox/navigation/menu.py:15 netbox/netbox/navigation/menu.py:17 msgid "Sites" msgstr "Sitios" -#: netbox/dcim/tests/test_api.py:47 +#: netbox/dcim/tests/test_api.py:50 msgid "Test case must set peer_termination_type" msgstr "El caso de prueba debe establecer peer_termination_type" -#: netbox/dcim/views.py:138 +#: netbox/dcim/views.py:137 #, python-brace-format msgid "Disconnected {count} {type}" msgstr "Desconectado {count} {type}" -#: netbox/dcim/views.py:738 netbox/netbox/navigation/menu.py:51 +#: netbox/dcim/views.py:825 netbox/netbox/navigation/menu.py:51 msgid "Reservations" msgstr "Reservaciones" -#: netbox/dcim/views.py:757 netbox/templates/dcim/location.html:90 +#: netbox/dcim/views.py:844 netbox/templates/dcim/location.html:90 #: netbox/templates/dcim/site.html:140 msgid "Non-Racked Devices" msgstr "Dispositivos no rakeados" -#: netbox/dcim/views.py:2086 netbox/extras/forms/model_forms.py:577 +#: netbox/dcim/views.py:2250 netbox/extras/forms/model_forms.py:591 #: netbox/templates/extras/configcontext.html:10 -#: netbox/virtualization/forms/model_forms.py:225 -#: netbox/virtualization/views.py:405 +#: netbox/virtualization/forms/model_forms.py:232 +#: netbox/virtualization/views.py:422 msgid "Config Context" msgstr "Contexto de configuración" -#: netbox/dcim/views.py:2096 netbox/virtualization/views.py:415 +#: netbox/dcim/views.py:2260 netbox/virtualization/views.py:432 msgid "Render Config" msgstr "Configuración de renderizado" -#: netbox/dcim/views.py:2131 netbox/virtualization/views.py:450 -#, python-brace-format -msgid "An error occurred while rendering the template: {error}" -msgstr "Se ha producido un error al renderizar la plantilla: {error}" - -#: netbox/dcim/views.py:2149 netbox/extras/tables/tables.py:550 -#: netbox/netbox/navigation/menu.py:247 netbox/netbox/navigation/menu.py:249 -#: netbox/virtualization/views.py:178 +#: netbox/dcim/views.py:2273 netbox/extras/tables/tables.py:550 +#: netbox/netbox/navigation/menu.py:255 netbox/netbox/navigation/menu.py:257 +#: netbox/virtualization/views.py:190 msgid "Virtual Machines" msgstr "Máquinas virtuales" -#: netbox/dcim/views.py:2907 +#: netbox/dcim/views.py:3106 #, python-brace-format msgid "Installed device {device} in bay {device_bay}." msgstr "Dispositivo instalado {device} en la bahía {device_bay}." -#: netbox/dcim/views.py:2948 +#: netbox/dcim/views.py:3147 #, python-brace-format msgid "Removed device {device} from bay {device_bay}." msgstr "Dispositivo eliminado {device} desde la bahía {device_bay}." -#: netbox/dcim/views.py:3054 netbox/ipam/tables/ip.py:234 +#: netbox/dcim/views.py:3263 netbox/ipam/tables/ip.py:180 msgid "Children" msgstr "Niños" -#: netbox/dcim/views.py:3520 +#: netbox/dcim/views.py:3730 #, python-brace-format msgid "Added member {device}" msgstr "Miembro agregado {device}" -#: netbox/dcim/views.py:3567 +#: netbox/dcim/views.py:3779 #, python-brace-format msgid "Unable to remove master device {device} from the virtual chassis." msgstr "" "No se puede eliminar el dispositivo maestro {device} desde el chasis " "virtual." -#: netbox/dcim/views.py:3580 +#: netbox/dcim/views.py:3792 #, python-brace-format msgid "Removed {device} from virtual chassis {chassis}" msgstr "Eliminado {device} desde un chasis virtual {chassis}" @@ -7278,7 +7819,7 @@ msgstr "No" #: netbox/extras/choices.py:108 netbox/templates/tenancy/contact.html:57 #: netbox/tenancy/forms/bulk_edit.py:118 -#: netbox/wireless/forms/model_forms.py:168 +#: netbox/wireless/forms/model_forms.py:171 msgid "Link" msgstr "Enlace" @@ -7298,15 +7839,15 @@ msgstr "Alfabético (A-Z)" msgid "Alphabetical (Z-A)" msgstr "Alfabético (Z-A)" -#: netbox/extras/choices.py:144 netbox/extras/choices.py:167 +#: netbox/extras/choices.py:144 netbox/extras/choices.py:165 msgid "Info" msgstr "Información" -#: netbox/extras/choices.py:145 netbox/extras/choices.py:168 +#: netbox/extras/choices.py:145 netbox/extras/choices.py:166 msgid "Success" msgstr "Éxito" -#: netbox/extras/choices.py:146 netbox/extras/choices.py:169 +#: netbox/extras/choices.py:146 netbox/extras/choices.py:167 msgid "Warning" msgstr "Advertencia" @@ -7314,52 +7855,29 @@ msgstr "Advertencia" msgid "Danger" msgstr "Peligro" -#: netbox/extras/choices.py:165 +#: netbox/extras/choices.py:164 msgid "Debug" msgstr "Depurar" -#: netbox/extras/choices.py:166 netbox/netbox/choices.py:101 -msgid "Default" -msgstr "Predeterminado" - -#: netbox/extras/choices.py:170 +#: netbox/extras/choices.py:168 msgid "Failure" msgstr "Fracaso" -#: netbox/extras/choices.py:186 -msgid "Hourly" -msgstr "Cada hora" - -#: netbox/extras/choices.py:187 -msgid "12 hours" -msgstr "12 horas" - -#: netbox/extras/choices.py:188 -msgid "Daily" -msgstr "Diariamente" - -#: netbox/extras/choices.py:189 -msgid "Weekly" -msgstr "Semanal" - -#: netbox/extras/choices.py:190 -msgid "30 days" -msgstr "30 días" - -#: netbox/extras/choices.py:226 +#: netbox/extras/choices.py:213 #: netbox/templates/dcim/virtualchassis_edit.html:107 #: netbox/templates/generic/bulk_add_component.html:68 #: netbox/templates/generic/object_edit.html:47 #: netbox/templates/generic/object_edit.html:80 +#: netbox/templates/htmx/quick_add.html:24 #: netbox/templates/ipam/inc/ipaddress_edit_header.html:7 msgid "Create" msgstr "Crear" -#: netbox/extras/choices.py:227 +#: netbox/extras/choices.py:214 msgid "Update" msgstr "Actualización" -#: netbox/extras/choices.py:228 +#: netbox/extras/choices.py:215 #: netbox/templates/circuits/inc/circuit_termination.html:23 #: netbox/templates/dcim/inc/panels/inventory_items.html:37 #: netbox/templates/dcim/powerpanel.html:66 @@ -7374,82 +7892,82 @@ msgstr "Actualización" msgid "Delete" msgstr "Eliminar" -#: netbox/extras/choices.py:252 netbox/netbox/choices.py:57 -#: netbox/netbox/choices.py:102 +#: netbox/extras/choices.py:239 netbox/netbox/choices.py:59 +#: netbox/netbox/choices.py:104 msgid "Blue" msgstr "Azul" -#: netbox/extras/choices.py:253 netbox/netbox/choices.py:56 -#: netbox/netbox/choices.py:103 +#: netbox/extras/choices.py:240 netbox/netbox/choices.py:58 +#: netbox/netbox/choices.py:105 msgid "Indigo" msgstr "añil" -#: netbox/extras/choices.py:254 netbox/netbox/choices.py:54 -#: netbox/netbox/choices.py:104 +#: netbox/extras/choices.py:241 netbox/netbox/choices.py:56 +#: netbox/netbox/choices.py:106 msgid "Purple" msgstr "Morado" -#: netbox/extras/choices.py:255 netbox/netbox/choices.py:51 -#: netbox/netbox/choices.py:105 +#: netbox/extras/choices.py:242 netbox/netbox/choices.py:53 +#: netbox/netbox/choices.py:107 msgid "Pink" msgstr "Rosado" -#: netbox/extras/choices.py:256 netbox/netbox/choices.py:50 -#: netbox/netbox/choices.py:106 +#: netbox/extras/choices.py:243 netbox/netbox/choices.py:52 +#: netbox/netbox/choices.py:108 msgid "Red" msgstr "rojo" -#: netbox/extras/choices.py:257 netbox/netbox/choices.py:68 -#: netbox/netbox/choices.py:107 +#: netbox/extras/choices.py:244 netbox/netbox/choices.py:70 +#: netbox/netbox/choices.py:109 msgid "Orange" msgstr "naranja" -#: netbox/extras/choices.py:258 netbox/netbox/choices.py:66 -#: netbox/netbox/choices.py:108 +#: netbox/extras/choices.py:245 netbox/netbox/choices.py:68 +#: netbox/netbox/choices.py:110 msgid "Yellow" msgstr "Amarillo" -#: netbox/extras/choices.py:259 netbox/netbox/choices.py:63 -#: netbox/netbox/choices.py:109 +#: netbox/extras/choices.py:246 netbox/netbox/choices.py:65 +#: netbox/netbox/choices.py:111 msgid "Green" msgstr "Verde" -#: netbox/extras/choices.py:260 netbox/netbox/choices.py:60 -#: netbox/netbox/choices.py:110 +#: netbox/extras/choices.py:247 netbox/netbox/choices.py:62 +#: netbox/netbox/choices.py:112 msgid "Teal" msgstr "Verde azulado" -#: netbox/extras/choices.py:261 netbox/netbox/choices.py:59 -#: netbox/netbox/choices.py:111 +#: netbox/extras/choices.py:248 netbox/netbox/choices.py:61 +#: netbox/netbox/choices.py:113 msgid "Cyan" msgstr "Cian" -#: netbox/extras/choices.py:262 netbox/netbox/choices.py:112 +#: netbox/extras/choices.py:249 netbox/netbox/choices.py:114 msgid "Gray" msgstr "Gris" -#: netbox/extras/choices.py:263 netbox/netbox/choices.py:74 -#: netbox/netbox/choices.py:113 +#: netbox/extras/choices.py:250 netbox/netbox/choices.py:76 +#: netbox/netbox/choices.py:115 msgid "Black" msgstr "Negro" -#: netbox/extras/choices.py:264 netbox/netbox/choices.py:75 -#: netbox/netbox/choices.py:114 +#: netbox/extras/choices.py:251 netbox/netbox/choices.py:77 +#: netbox/netbox/choices.py:116 msgid "White" msgstr "blanco" -#: netbox/extras/choices.py:279 netbox/extras/forms/model_forms.py:353 -#: netbox/extras/forms/model_forms.py:430 +#: netbox/extras/choices.py:266 netbox/extras/forms/model_forms.py:367 +#: netbox/extras/forms/model_forms.py:444 #: netbox/templates/extras/webhook.html:10 msgid "Webhook" msgstr "Webhook" -#: netbox/extras/choices.py:280 netbox/extras/forms/model_forms.py:418 +#: netbox/extras/choices.py:267 netbox/extras/forms/model_forms.py:432 #: netbox/templates/extras/script/base.html:29 msgid "Script" msgstr "Guión" -#: netbox/extras/choices.py:281 +#: netbox/extras/choices.py:268 msgid "Notification" msgstr "Notificación" @@ -7548,30 +8066,34 @@ msgstr "" msgid "RSS Feed" msgstr "Fuente RSS" -#: netbox/extras/dashboard/widgets.py:279 +#: netbox/extras/dashboard/widgets.py:280 msgid "Embed an RSS feed from an external website." msgstr "Inserte una fuente RSS desde un sitio web externo." -#: netbox/extras/dashboard/widgets.py:286 +#: netbox/extras/dashboard/widgets.py:287 msgid "Feed URL" msgstr "URL del feed" -#: netbox/extras/dashboard/widgets.py:291 +#: netbox/extras/dashboard/widgets.py:290 +msgid "Requires external connection" +msgstr "Requiere conexión externa" + +#: netbox/extras/dashboard/widgets.py:296 msgid "The maximum number of objects to display" msgstr "El número máximo de objetos que se van a mostrar" -#: netbox/extras/dashboard/widgets.py:296 +#: netbox/extras/dashboard/widgets.py:301 msgid "How long to stored the cached content (in seconds)" msgstr "Cuánto tiempo se debe almacenar el contenido en caché (en segundos)" -#: netbox/extras/dashboard/widgets.py:348 +#: netbox/extras/dashboard/widgets.py:358 #: netbox/templates/account/base.html:10 #: netbox/templates/account/bookmarks.html:7 -#: netbox/templates/inc/user_menu.html:48 +#: netbox/templates/inc/user_menu.html:43 msgid "Bookmarks" msgstr "Marcadores" -#: netbox/extras/dashboard/widgets.py:352 +#: netbox/extras/dashboard/widgets.py:362 msgid "Show your personal bookmarks" msgstr "Muestra tus marcadores personales" @@ -7600,17 +8122,17 @@ msgid "Group (name)" msgstr "Grupo (nombre)" #: netbox/extras/filtersets.py:574 -#: netbox/virtualization/forms/filtersets.py:118 +#: netbox/virtualization/forms/filtersets.py:123 msgid "Cluster type" msgstr "Tipo de clúster" -#: netbox/extras/filtersets.py:580 netbox/virtualization/filtersets.py:95 -#: netbox/virtualization/filtersets.py:147 +#: netbox/extras/filtersets.py:580 netbox/virtualization/filtersets.py:61 +#: netbox/virtualization/filtersets.py:113 msgid "Cluster type (slug)" msgstr "Tipo de clúster (babosa)" #: netbox/extras/filtersets.py:601 netbox/tenancy/forms/forms.py:16 -#: netbox/tenancy/forms/forms.py:39 +#: netbox/tenancy/forms/forms.py:40 msgid "Tenant group" msgstr "Grupo de inquilinos" @@ -7619,7 +8141,7 @@ msgstr "Grupo de inquilinos" msgid "Tenant group (slug)" msgstr "Grupo de inquilinos (slug)" -#: netbox/extras/filtersets.py:623 netbox/extras/forms/model_forms.py:495 +#: netbox/extras/filtersets.py:623 netbox/extras/forms/model_forms.py:509 #: netbox/templates/extras/tag.html:11 msgid "Tag" msgstr "Etiqueta" @@ -7628,60 +8150,60 @@ msgstr "Etiqueta" msgid "Tag (slug)" msgstr "Etiqueta (babosa)" -#: netbox/extras/filtersets.py:689 netbox/extras/forms/filtersets.py:429 +#: netbox/extras/filtersets.py:689 netbox/extras/forms/filtersets.py:437 msgid "Has local config context data" msgstr "Tiene datos de contexto de configuración local" -#: netbox/extras/forms/bulk_edit.py:35 netbox/extras/forms/filtersets.py:60 +#: netbox/extras/forms/bulk_edit.py:35 netbox/extras/forms/filtersets.py:61 msgid "Group name" msgstr "Nombre del grupo" -#: netbox/extras/forms/bulk_edit.py:43 netbox/extras/forms/filtersets.py:68 +#: netbox/extras/forms/bulk_edit.py:43 netbox/extras/forms/filtersets.py:69 #: netbox/extras/tables/tables.py:65 #: netbox/templates/extras/customfield.html:38 #: netbox/templates/generic/bulk_import.html:118 msgid "Required" msgstr "Obligatorio" -#: netbox/extras/forms/bulk_edit.py:48 netbox/extras/forms/filtersets.py:75 +#: netbox/extras/forms/bulk_edit.py:48 netbox/extras/forms/filtersets.py:76 msgid "Must be unique" msgstr "Debe ser único" #: netbox/extras/forms/bulk_edit.py:61 netbox/extras/forms/bulk_import.py:60 -#: netbox/extras/forms/filtersets.py:89 +#: netbox/extras/forms/filtersets.py:90 #: netbox/extras/models/customfields.py:209 msgid "UI visible" msgstr "Interfaz de usuario visible" #: netbox/extras/forms/bulk_edit.py:66 netbox/extras/forms/bulk_import.py:66 -#: netbox/extras/forms/filtersets.py:94 +#: netbox/extras/forms/filtersets.py:95 #: netbox/extras/models/customfields.py:216 msgid "UI editable" msgstr "Interfaz de usuario editable" -#: netbox/extras/forms/bulk_edit.py:71 netbox/extras/forms/filtersets.py:97 +#: netbox/extras/forms/bulk_edit.py:71 netbox/extras/forms/filtersets.py:98 msgid "Is cloneable" msgstr "Es clonable" -#: netbox/extras/forms/bulk_edit.py:76 netbox/extras/forms/filtersets.py:104 +#: netbox/extras/forms/bulk_edit.py:76 netbox/extras/forms/filtersets.py:105 msgid "Minimum value" msgstr "Valor mínimo" -#: netbox/extras/forms/bulk_edit.py:80 netbox/extras/forms/filtersets.py:108 +#: netbox/extras/forms/bulk_edit.py:80 netbox/extras/forms/filtersets.py:109 msgid "Maximum value" msgstr "Valor máximo" -#: netbox/extras/forms/bulk_edit.py:84 netbox/extras/forms/filtersets.py:112 +#: netbox/extras/forms/bulk_edit.py:84 netbox/extras/forms/filtersets.py:113 msgid "Validation regex" msgstr "Regex de validación" -#: netbox/extras/forms/bulk_edit.py:91 netbox/extras/forms/filtersets.py:46 +#: netbox/extras/forms/bulk_edit.py:91 netbox/extras/forms/filtersets.py:47 #: netbox/extras/forms/model_forms.py:76 #: netbox/templates/extras/customfield.html:70 msgid "Behavior" msgstr "Comportamiento" -#: netbox/extras/forms/bulk_edit.py:128 netbox/extras/forms/filtersets.py:149 +#: netbox/extras/forms/bulk_edit.py:128 netbox/extras/forms/filtersets.py:152 msgid "New window" msgstr "Ventana nueva" @@ -7689,31 +8211,31 @@ msgstr "Ventana nueva" msgid "Button class" msgstr "Clase de botones" -#: netbox/extras/forms/bulk_edit.py:154 netbox/extras/forms/filtersets.py:187 +#: netbox/extras/forms/bulk_edit.py:154 netbox/extras/forms/filtersets.py:191 #: netbox/extras/models/models.py:409 msgid "MIME type" msgstr "Tipo MIME" -#: netbox/extras/forms/bulk_edit.py:159 netbox/extras/forms/filtersets.py:190 +#: netbox/extras/forms/bulk_edit.py:159 netbox/extras/forms/filtersets.py:194 msgid "File extension" msgstr "Extensión de archivo" -#: netbox/extras/forms/bulk_edit.py:164 netbox/extras/forms/filtersets.py:194 +#: netbox/extras/forms/bulk_edit.py:164 netbox/extras/forms/filtersets.py:198 msgid "As attachment" msgstr "Como archivo adjunto" -#: netbox/extras/forms/bulk_edit.py:192 netbox/extras/forms/filtersets.py:236 +#: netbox/extras/forms/bulk_edit.py:192 netbox/extras/forms/filtersets.py:242 #: netbox/extras/tables/tables.py:256 #: netbox/templates/extras/savedfilter.html:29 msgid "Shared" msgstr "Compartido" -#: netbox/extras/forms/bulk_edit.py:215 netbox/extras/forms/filtersets.py:265 +#: netbox/extras/forms/bulk_edit.py:215 netbox/extras/forms/filtersets.py:271 #: netbox/extras/models/models.py:174 msgid "HTTP method" msgstr "Método HTTP" -#: netbox/extras/forms/bulk_edit.py:219 netbox/extras/forms/filtersets.py:259 +#: netbox/extras/forms/bulk_edit.py:219 netbox/extras/forms/filtersets.py:265 #: netbox/templates/extras/webhook.html:30 msgid "Payload URL" msgstr "URL de carga" @@ -7732,7 +8254,7 @@ msgid "CA file path" msgstr "Ruta del archivo CA" #: netbox/extras/forms/bulk_edit.py:253 netbox/extras/forms/bulk_import.py:192 -#: netbox/extras/forms/model_forms.py:377 +#: netbox/extras/forms/model_forms.py:391 msgid "Event types" msgstr "Tipos de eventos" @@ -7745,13 +8267,13 @@ msgstr "Está activo" #: netbox/extras/forms/bulk_import.py:139 #: netbox/extras/forms/bulk_import.py:162 #: netbox/extras/forms/bulk_import.py:186 -#: netbox/extras/forms/filtersets.py:137 netbox/extras/forms/filtersets.py:224 +#: netbox/extras/forms/filtersets.py:140 netbox/extras/forms/filtersets.py:230 #: netbox/extras/forms/model_forms.py:47 -#: netbox/extras/forms/model_forms.py:205 -#: netbox/extras/forms/model_forms.py:237 -#: netbox/extras/forms/model_forms.py:278 -#: netbox/extras/forms/model_forms.py:372 -#: netbox/extras/forms/model_forms.py:489 +#: netbox/extras/forms/model_forms.py:219 +#: netbox/extras/forms/model_forms.py:251 +#: netbox/extras/forms/model_forms.py:292 +#: netbox/extras/forms/model_forms.py:386 +#: netbox/extras/forms/model_forms.py:503 #: netbox/users/forms/model_forms.py:276 msgid "Object types" msgstr "Tipos de objetos" @@ -7769,10 +8291,10 @@ msgstr "Uno o más tipos de objetos asignados" msgid "Field data type (e.g. text, integer, etc.)" msgstr "Tipo de datos de campo (por ejemplo, texto, entero, etc.)" -#: netbox/extras/forms/bulk_import.py:47 netbox/extras/forms/filtersets.py:208 -#: netbox/extras/forms/filtersets.py:281 -#: netbox/extras/forms/model_forms.py:304 -#: netbox/extras/forms/model_forms.py:341 +#: netbox/extras/forms/bulk_import.py:47 netbox/extras/forms/filtersets.py:213 +#: netbox/extras/forms/filtersets.py:287 +#: netbox/extras/forms/model_forms.py:318 +#: netbox/extras/forms/model_forms.py:355 #: netbox/tenancy/forms/filtersets.py:92 msgid "Object type" msgstr "Tipo de objeto" @@ -7781,7 +8303,7 @@ msgstr "Tipo de objeto" msgid "Object type (for object or multi-object fields)" msgstr "Tipo de objeto (para campos de objetos o de varios objetos)" -#: netbox/extras/forms/bulk_import.py:53 netbox/extras/forms/filtersets.py:84 +#: netbox/extras/forms/bulk_import.py:53 netbox/extras/forms/filtersets.py:85 msgid "Choice set" msgstr "Set de elección" @@ -7852,7 +8374,7 @@ msgid "The classification of entry" msgstr "La clasificación de entrada" #: netbox/extras/forms/bulk_import.py:261 -#: netbox/extras/forms/model_forms.py:320 netbox/netbox/navigation/menu.py:390 +#: netbox/extras/forms/model_forms.py:334 netbox/netbox/navigation/menu.py:411 #: netbox/templates/extras/notificationgroup.html:41 #: netbox/templates/users/group.html:29 netbox/users/forms/model_forms.py:236 #: netbox/users/forms/model_forms.py:248 netbox/users/forms/model_forms.py:300 @@ -7865,7 +8387,8 @@ msgid "User names separated by commas, encased with double quotes" msgstr "Nombres de usuario separados por comas y entre comillas dobles" #: netbox/extras/forms/bulk_import.py:268 -#: netbox/extras/forms/model_forms.py:315 netbox/netbox/navigation/menu.py:410 +#: netbox/extras/forms/model_forms.py:329 netbox/netbox/navigation/menu.py:294 +#: netbox/netbox/navigation/menu.py:431 #: netbox/templates/extras/notificationgroup.html:31 #: netbox/users/forms/model_forms.py:181 netbox/users/forms/model_forms.py:193 #: netbox/users/forms/model_forms.py:305 netbox/users/tables.py:35 @@ -7877,104 +8400,104 @@ msgstr "Grupos" msgid "Group names separated by commas, encased with double quotes" msgstr "Nombres de grupos separados por comas y entre comillas" -#: netbox/extras/forms/filtersets.py:52 netbox/extras/forms/model_forms.py:56 +#: netbox/extras/forms/filtersets.py:53 netbox/extras/forms/model_forms.py:56 msgid "Related object type" msgstr "Tipo de objeto relacionado" -#: netbox/extras/forms/filtersets.py:57 +#: netbox/extras/forms/filtersets.py:58 msgid "Field type" msgstr "Tipo de campo" -#: netbox/extras/forms/filtersets.py:120 +#: netbox/extras/forms/filtersets.py:122 #: netbox/extras/forms/model_forms.py:157 netbox/extras/tables/tables.py:91 #: netbox/templates/generic/bulk_import.html:154 msgid "Choices" msgstr "Opciones" -#: netbox/extras/forms/filtersets.py:164 netbox/extras/forms/filtersets.py:319 -#: netbox/extras/forms/filtersets.py:408 -#: netbox/extras/forms/model_forms.py:572 netbox/templates/core/job.html:96 +#: netbox/extras/forms/filtersets.py:168 netbox/extras/forms/filtersets.py:326 +#: netbox/extras/forms/filtersets.py:416 +#: netbox/extras/forms/model_forms.py:586 netbox/templates/core/job.html:96 #: netbox/templates/extras/eventrule.html:84 msgid "Data" msgstr "Datos" -#: netbox/extras/forms/filtersets.py:175 netbox/extras/forms/filtersets.py:333 -#: netbox/extras/forms/filtersets.py:418 netbox/netbox/choices.py:130 +#: netbox/extras/forms/filtersets.py:179 netbox/extras/forms/filtersets.py:340 +#: netbox/extras/forms/filtersets.py:426 netbox/netbox/choices.py:132 #: netbox/utilities/forms/bulk_import.py:26 msgid "Data file" msgstr "Archivo de datos" -#: netbox/extras/forms/filtersets.py:183 +#: netbox/extras/forms/filtersets.py:187 msgid "Content types" msgstr "Tipos de contenido" -#: netbox/extras/forms/filtersets.py:255 netbox/extras/models/models.py:179 +#: netbox/extras/forms/filtersets.py:261 netbox/extras/models/models.py:179 msgid "HTTP content type" msgstr "Tipo de contenido HTTP" -#: netbox/extras/forms/filtersets.py:286 +#: netbox/extras/forms/filtersets.py:292 msgid "Event type" msgstr "Tipo de evento" -#: netbox/extras/forms/filtersets.py:291 +#: netbox/extras/forms/filtersets.py:297 msgid "Action type" msgstr "Tipo de acción" -#: netbox/extras/forms/filtersets.py:307 +#: netbox/extras/forms/filtersets.py:313 msgid "Tagged object type" msgstr "Tipo de objeto etiquetado" -#: netbox/extras/forms/filtersets.py:312 +#: netbox/extras/forms/filtersets.py:318 msgid "Allowed object type" msgstr "Tipo de objeto permitido" -#: netbox/extras/forms/filtersets.py:341 -#: netbox/extras/forms/model_forms.py:507 netbox/netbox/navigation/menu.py:18 +#: netbox/extras/forms/filtersets.py:348 +#: netbox/extras/forms/model_forms.py:521 netbox/netbox/navigation/menu.py:18 msgid "Regions" msgstr "Regiones" -#: netbox/extras/forms/filtersets.py:346 -#: netbox/extras/forms/model_forms.py:512 +#: netbox/extras/forms/filtersets.py:353 +#: netbox/extras/forms/model_forms.py:526 msgid "Site groups" msgstr "Grupos de sitios" -#: netbox/extras/forms/filtersets.py:356 -#: netbox/extras/forms/model_forms.py:522 netbox/netbox/navigation/menu.py:20 +#: netbox/extras/forms/filtersets.py:363 +#: netbox/extras/forms/model_forms.py:536 netbox/netbox/navigation/menu.py:20 #: netbox/templates/dcim/site.html:127 msgid "Locations" msgstr "Ubicaciones" -#: netbox/extras/forms/filtersets.py:361 -#: netbox/extras/forms/model_forms.py:527 +#: netbox/extras/forms/filtersets.py:368 +#: netbox/extras/forms/model_forms.py:541 msgid "Device types" msgstr "Tipos de dispositivos" -#: netbox/extras/forms/filtersets.py:366 -#: netbox/extras/forms/model_forms.py:532 +#: netbox/extras/forms/filtersets.py:373 +#: netbox/extras/forms/model_forms.py:546 msgid "Roles" msgstr "Funciones" -#: netbox/extras/forms/filtersets.py:376 -#: netbox/extras/forms/model_forms.py:542 +#: netbox/extras/forms/filtersets.py:383 +#: netbox/extras/forms/model_forms.py:556 msgid "Cluster types" msgstr "Tipos de clústeres" -#: netbox/extras/forms/filtersets.py:381 -#: netbox/extras/forms/model_forms.py:547 +#: netbox/extras/forms/filtersets.py:388 +#: netbox/extras/forms/model_forms.py:561 msgid "Cluster groups" msgstr "Grupos de clústeres" -#: netbox/extras/forms/filtersets.py:386 -#: netbox/extras/forms/model_forms.py:552 netbox/netbox/navigation/menu.py:255 -#: netbox/netbox/navigation/menu.py:257 +#: netbox/extras/forms/filtersets.py:393 +#: netbox/extras/forms/model_forms.py:566 netbox/netbox/navigation/menu.py:263 +#: netbox/netbox/navigation/menu.py:265 #: netbox/templates/virtualization/clustertype.html:30 #: netbox/virtualization/tables/clusters.py:23 #: netbox/virtualization/tables/clusters.py:45 msgid "Clusters" msgstr "Clústers" -#: netbox/extras/forms/filtersets.py:391 -#: netbox/extras/forms/model_forms.py:557 +#: netbox/extras/forms/filtersets.py:398 +#: netbox/extras/forms/model_forms.py:571 msgid "Tenant groups" msgstr "Grupos de inquilinos" @@ -8024,7 +8547,7 @@ msgstr "" msgid "Related Object" msgstr "Objeto relacionado" -#: netbox/extras/forms/model_forms.py:169 +#: netbox/extras/forms/model_forms.py:170 msgid "" "Enter one choice per line. An optional label may be specified for each " "choice by appending it with a colon. Example:" @@ -8032,16 +8555,16 @@ msgstr "" "Introduzca una opción por línea. Se puede especificar una etiqueta opcional " "para cada elección añadiendo dos puntos. Ejemplo:" -#: netbox/extras/forms/model_forms.py:212 +#: netbox/extras/forms/model_forms.py:226 #: netbox/templates/extras/customlink.html:10 msgid "Custom Link" msgstr "Vínculo personalizado" -#: netbox/extras/forms/model_forms.py:214 +#: netbox/extras/forms/model_forms.py:228 msgid "Templates" msgstr "Plantillas" -#: netbox/extras/forms/model_forms.py:226 +#: netbox/extras/forms/model_forms.py:240 #, python-brace-format msgid "" "Jinja2 template code for the link text. Reference the object as {example}. " @@ -8051,7 +8574,7 @@ msgstr "" "objeto como {example}. Los enlaces que se muestren como texto vacío no se " "mostrarán." -#: netbox/extras/forms/model_forms.py:230 +#: netbox/extras/forms/model_forms.py:244 #, python-brace-format msgid "" "Jinja2 template code for the link URL. Reference the object as {example}." @@ -8059,62 +8582,62 @@ msgstr "" "Código de plantilla Jinja2 para la URL del enlace. Haga referencia al objeto" " como {example}." -#: netbox/extras/forms/model_forms.py:241 -#: netbox/extras/forms/model_forms.py:624 +#: netbox/extras/forms/model_forms.py:255 +#: netbox/extras/forms/model_forms.py:638 msgid "Template code" msgstr "Código de plantilla" -#: netbox/extras/forms/model_forms.py:247 +#: netbox/extras/forms/model_forms.py:261 #: netbox/templates/extras/exporttemplate.html:12 msgid "Export Template" msgstr "Plantilla de exportación" -#: netbox/extras/forms/model_forms.py:249 +#: netbox/extras/forms/model_forms.py:263 msgid "Rendering" msgstr "Renderización" -#: netbox/extras/forms/model_forms.py:263 -#: netbox/extras/forms/model_forms.py:649 +#: netbox/extras/forms/model_forms.py:277 +#: netbox/extras/forms/model_forms.py:663 msgid "Template content is populated from the remote source selected below." msgstr "" "El contenido de la plantilla se rellena desde la fuente remota seleccionada " "a continuación." -#: netbox/extras/forms/model_forms.py:270 -#: netbox/extras/forms/model_forms.py:656 +#: netbox/extras/forms/model_forms.py:284 +#: netbox/extras/forms/model_forms.py:670 msgid "Must specify either local content or a data file" msgstr "Debe especificar el contenido local o un archivo de datos" -#: netbox/extras/forms/model_forms.py:284 netbox/netbox/forms/mixins.py:70 +#: netbox/extras/forms/model_forms.py:298 netbox/netbox/forms/mixins.py:70 #: netbox/templates/extras/savedfilter.html:10 msgid "Saved Filter" msgstr "Filtro guardado" -#: netbox/extras/forms/model_forms.py:334 +#: netbox/extras/forms/model_forms.py:348 msgid "A notification group specify at least one user or group." msgstr "Un grupo de notificaciones especifica al menos un usuario o grupo." -#: netbox/extras/forms/model_forms.py:356 +#: netbox/extras/forms/model_forms.py:370 #: netbox/templates/extras/webhook.html:23 msgid "HTTP Request" msgstr "Solicitud HTTP" -#: netbox/extras/forms/model_forms.py:358 +#: netbox/extras/forms/model_forms.py:372 #: netbox/templates/extras/webhook.html:44 msgid "SSL" msgstr "SSL" -#: netbox/extras/forms/model_forms.py:380 +#: netbox/extras/forms/model_forms.py:394 msgid "Action choice" msgstr "Elección de acción" -#: netbox/extras/forms/model_forms.py:385 +#: netbox/extras/forms/model_forms.py:399 msgid "Enter conditions in JSON format." msgstr "" "Introduzca las condiciones en JSON " "formato." -#: netbox/extras/forms/model_forms.py:389 +#: netbox/extras/forms/model_forms.py:403 msgid "" "Enter parameters to pass to the action in JSON format." @@ -8122,34 +8645,34 @@ msgstr "" "Introduzca los parámetros para pasar a la acción en JSON formato." -#: netbox/extras/forms/model_forms.py:394 +#: netbox/extras/forms/model_forms.py:408 #: netbox/templates/extras/eventrule.html:10 msgid "Event Rule" msgstr "Regla del evento" -#: netbox/extras/forms/model_forms.py:395 +#: netbox/extras/forms/model_forms.py:409 msgid "Triggers" msgstr "Disparadores" -#: netbox/extras/forms/model_forms.py:442 +#: netbox/extras/forms/model_forms.py:456 msgid "Notification group" msgstr "Grupo de notificaciones" -#: netbox/extras/forms/model_forms.py:562 netbox/netbox/navigation/menu.py:26 +#: netbox/extras/forms/model_forms.py:576 netbox/netbox/navigation/menu.py:26 #: netbox/tenancy/tables/tenants.py:22 msgid "Tenants" msgstr "Inquilinos" -#: netbox/extras/forms/model_forms.py:606 +#: netbox/extras/forms/model_forms.py:620 msgid "Data is populated from the remote source selected below." msgstr "" "Los datos se rellenan desde la fuente remota seleccionada a continuación." -#: netbox/extras/forms/model_forms.py:612 +#: netbox/extras/forms/model_forms.py:626 msgid "Must specify either local data or a data file" msgstr "Debe especificar datos locales o un archivo de datos" -#: netbox/extras/forms/model_forms.py:631 +#: netbox/extras/forms/model_forms.py:645 #: netbox/templates/core/datafile.html:55 msgid "Content" msgstr "Contenido" @@ -8213,10 +8736,16 @@ msgstr "Se ha producido una excepción: " msgid "Database changes have been reverted due to error." msgstr "Los cambios en la base de datos se han revertido debido a un error." -#: netbox/extras/management/commands/reindex.py:66 +#: netbox/extras/management/commands/reindex.py:67 msgid "No indexers found!" msgstr "¡No se encontró ningún indexador!" +#: netbox/extras/models/configs.py:41 netbox/extras/models/models.py:313 +#: netbox/extras/models/models.py:522 netbox/extras/models/search.py:48 +#: netbox/ipam/models/ip.py:188 netbox/netbox/models/mixins.py:15 +msgid "weight" +msgstr "peso" + #: netbox/extras/models/configs.py:130 msgid "config context" msgstr "contexto de configuración" @@ -8586,27 +9115,27 @@ msgstr "Se encontró un ID de objeto no válido: {id}" msgid "Required field cannot be empty." msgstr "El campo obligatorio no puede estar vacío." -#: netbox/extras/models/customfields.py:763 +#: netbox/extras/models/customfields.py:764 msgid "Base set of predefined choices (optional)" msgstr "Conjunto básico de opciones predefinidas (opcional)" -#: netbox/extras/models/customfields.py:775 +#: netbox/extras/models/customfields.py:776 msgid "Choices are automatically ordered alphabetically" msgstr "Las opciones se ordenan alfabéticamente automáticamente" -#: netbox/extras/models/customfields.py:782 +#: netbox/extras/models/customfields.py:783 msgid "custom field choice set" msgstr "conjunto de opciones de campo personalizadas" -#: netbox/extras/models/customfields.py:783 +#: netbox/extras/models/customfields.py:784 msgid "custom field choice sets" msgstr "conjuntos de opciones de campo personalizadas" -#: netbox/extras/models/customfields.py:825 +#: netbox/extras/models/customfields.py:826 msgid "Must define base or extra choices." msgstr "Debe definir opciones básicas o adicionales." -#: netbox/extras/models/customfields.py:849 +#: netbox/extras/models/customfields.py:850 #, python-brace-format msgid "" "Cannot remove choice {choice} as there are {model} objects which reference " @@ -8911,20 +9440,20 @@ msgstr "entrada de diario" msgid "journal entries" msgstr "entradas de diario" -#: netbox/extras/models/models.py:718 +#: netbox/extras/models/models.py:721 #, python-brace-format msgid "Journaling is not supported for this object type ({type})." msgstr "No se admite el registro en diario para este tipo de objeto ({type})." -#: netbox/extras/models/models.py:760 +#: netbox/extras/models/models.py:763 msgid "bookmark" msgstr "marcalibros" -#: netbox/extras/models/models.py:761 +#: netbox/extras/models/models.py:764 msgid "bookmarks" msgstr "marcapáginas" -#: netbox/extras/models/models.py:774 +#: netbox/extras/models/models.py:777 #, python-brace-format msgid "Bookmarks cannot be assigned to this object type ({type})." msgstr "No se pueden asignar marcadores a este tipo de objeto ({type})." @@ -9016,19 +9545,19 @@ msgstr "valor almacenado en caché" msgid "cached values" msgstr "valores en caché" -#: netbox/extras/models/staging.py:44 +#: netbox/extras/models/staging.py:45 msgid "branch" msgstr "sucursal" -#: netbox/extras/models/staging.py:45 +#: netbox/extras/models/staging.py:46 msgid "branches" msgstr "sucursales" -#: netbox/extras/models/staging.py:97 +#: netbox/extras/models/staging.py:105 msgid "staged change" msgstr "cambio por etapas" -#: netbox/extras/models/staging.py:98 +#: netbox/extras/models/staging.py:106 msgid "staged changes" msgstr "cambios por etapas" @@ -9052,11 +9581,11 @@ msgstr "artículo etiquetado" msgid "tagged items" msgstr "artículos etiquetados" -#: netbox/extras/scripts.py:429 +#: netbox/extras/scripts.py:432 msgid "Script Data" msgstr "Datos del script" -#: netbox/extras/scripts.py:433 +#: netbox/extras/scripts.py:436 msgid "Script Execution Parameters" msgstr "Parámetros de ejecución del script" @@ -9133,12 +9662,11 @@ msgstr "Como archivo adjunto" #: netbox/extras/tables/tables.py:195 netbox/extras/tables/tables.py:487 #: netbox/extras/tables/tables.py:522 netbox/templates/core/datafile.html:24 -#: netbox/templates/dcim/device/render_config.html:22 #: netbox/templates/extras/configcontext.html:39 #: netbox/templates/extras/configtemplate.html:31 #: netbox/templates/extras/exporttemplate.html:45 +#: netbox/templates/extras/object_render_config.html:23 #: netbox/templates/generic/bulk_import.html:35 -#: netbox/templates/virtualization/virtualmachine/render_config.html:22 msgid "Data File" msgstr "Archivo de datos" @@ -9230,27 +9758,32 @@ msgstr "Atributo no válido»{name}«para solicitar" msgid "Invalid attribute \"{name}\" for {model}" msgstr "Atributo no válido»{name}«para {model}" -#: netbox/extras/views.py:960 +#: netbox/extras/views.py:933 +#, python-brace-format +msgid "An error occurred while rendering the template: {error}" +msgstr "Se ha producido un error al renderizar la plantilla: {error}" + +#: netbox/extras/views.py:1085 msgid "Your dashboard has been reset." msgstr "Tu panel de control se ha restablecido." -#: netbox/extras/views.py:1006 +#: netbox/extras/views.py:1131 msgid "Added widget: " msgstr "Widget añadido: " -#: netbox/extras/views.py:1047 +#: netbox/extras/views.py:1172 msgid "Updated widget: " msgstr "Widget actualizado: " -#: netbox/extras/views.py:1083 +#: netbox/extras/views.py:1208 msgid "Deleted widget: " msgstr "Widget eliminado: " -#: netbox/extras/views.py:1085 +#: netbox/extras/views.py:1210 msgid "Error deleting widget: " msgstr "Error al eliminar el widget: " -#: netbox/extras/views.py:1175 +#: netbox/extras/views.py:1308 msgid "Unable to run script: RQ worker process not running." msgstr "" "No se puede ejecutar el script: el proceso de trabajo de RQ no se está " @@ -9275,7 +9808,7 @@ msgstr "" msgid "Invalid IP prefix format: {data}" msgstr "Formato de prefijo IP no válido: {data}" -#: netbox/ipam/api/views.py:358 +#: netbox/ipam/api/views.py:370 msgid "" "Insufficient space is available to accommodate the requested prefix size(s)" msgstr "" @@ -9317,182 +9850,174 @@ msgstr "Cisco" msgid "Plaintext" msgstr "Texto plano" +#: netbox/ipam/choices.py:166 netbox/ipam/forms/model_forms.py:800 +#: netbox/ipam/forms/model_forms.py:828 netbox/templates/ipam/service.html:21 +msgid "Service" +msgstr "Servicio" + +#: netbox/ipam/choices.py:167 +msgid "Customer" +msgstr "Cliente" + #: netbox/ipam/fields.py:36 #, python-brace-format msgid "Invalid IP address format: {address}" msgstr "Formato de dirección IP no válido: {address}" -#: netbox/ipam/filtersets.py:48 netbox/vpn/filtersets.py:304 +#: netbox/ipam/filtersets.py:51 netbox/vpn/filtersets.py:304 msgid "Import target" msgstr "Objetivo de importación" -#: netbox/ipam/filtersets.py:54 netbox/vpn/filtersets.py:310 +#: netbox/ipam/filtersets.py:57 netbox/vpn/filtersets.py:310 msgid "Import target (name)" msgstr "Destino de importación (nombre)" -#: netbox/ipam/filtersets.py:59 netbox/vpn/filtersets.py:315 +#: netbox/ipam/filtersets.py:62 netbox/vpn/filtersets.py:315 msgid "Export target" msgstr "Objetivo de exportación" -#: netbox/ipam/filtersets.py:65 netbox/vpn/filtersets.py:321 +#: netbox/ipam/filtersets.py:68 netbox/vpn/filtersets.py:321 msgid "Export target (name)" msgstr "Destino de exportación (nombre)" -#: netbox/ipam/filtersets.py:86 +#: netbox/ipam/filtersets.py:89 msgid "Importing VRF" msgstr "Importación de VRF" -#: netbox/ipam/filtersets.py:92 +#: netbox/ipam/filtersets.py:95 msgid "Import VRF (RD)" msgstr "Importar VRF (RD)" -#: netbox/ipam/filtersets.py:97 +#: netbox/ipam/filtersets.py:100 msgid "Exporting VRF" msgstr "Exportación de VRF" -#: netbox/ipam/filtersets.py:103 +#: netbox/ipam/filtersets.py:106 msgid "Export VRF (RD)" msgstr "Exportar VRF (RD)" -#: netbox/ipam/filtersets.py:108 +#: netbox/ipam/filtersets.py:111 msgid "Importing L2VPN" msgstr "Importación de L2VPN" -#: netbox/ipam/filtersets.py:114 +#: netbox/ipam/filtersets.py:117 msgid "Importing L2VPN (identifier)" msgstr "Importación de L2VPN (identificador)" -#: netbox/ipam/filtersets.py:119 +#: netbox/ipam/filtersets.py:122 msgid "Exporting L2VPN" msgstr "Exportación de L2VPN" -#: netbox/ipam/filtersets.py:125 +#: netbox/ipam/filtersets.py:128 msgid "Exporting L2VPN (identifier)" msgstr "Exportación de L2VPN (identificador)" -#: netbox/ipam/filtersets.py:155 netbox/ipam/filtersets.py:283 -#: netbox/ipam/forms/model_forms.py:229 netbox/ipam/tables/ip.py:212 +#: netbox/ipam/filtersets.py:158 netbox/ipam/filtersets.py:286 +#: netbox/ipam/forms/model_forms.py:229 netbox/ipam/tables/ip.py:158 #: netbox/templates/ipam/prefix.html:12 msgid "Prefix" msgstr "Prefijo" -#: netbox/ipam/filtersets.py:159 netbox/ipam/filtersets.py:198 -#: netbox/ipam/filtersets.py:223 +#: netbox/ipam/filtersets.py:162 netbox/ipam/filtersets.py:201 +#: netbox/ipam/filtersets.py:226 msgid "RIR (ID)" msgstr "RIR (ID)" -#: netbox/ipam/filtersets.py:165 netbox/ipam/filtersets.py:204 -#: netbox/ipam/filtersets.py:229 +#: netbox/ipam/filtersets.py:168 netbox/ipam/filtersets.py:207 +#: netbox/ipam/filtersets.py:232 msgid "RIR (slug)" msgstr "RIR (babosa)" -#: netbox/ipam/filtersets.py:287 +#: netbox/ipam/filtersets.py:290 msgid "Within prefix" msgstr "Dentro del prefijo" -#: netbox/ipam/filtersets.py:291 +#: netbox/ipam/filtersets.py:294 msgid "Within and including prefix" msgstr "Dentro del prefijo e incluído" -#: netbox/ipam/filtersets.py:295 +#: netbox/ipam/filtersets.py:298 msgid "Prefixes which contain this prefix or IP" msgstr "Prefijos que contienen este prefijo o IP" -#: netbox/ipam/filtersets.py:306 netbox/ipam/filtersets.py:574 -#: netbox/ipam/forms/bulk_edit.py:343 netbox/ipam/forms/filtersets.py:196 -#: netbox/ipam/forms/filtersets.py:331 +#: netbox/ipam/filtersets.py:309 netbox/ipam/filtersets.py:541 +#: netbox/ipam/forms/bulk_edit.py:327 netbox/ipam/forms/filtersets.py:198 +#: netbox/ipam/forms/filtersets.py:334 msgid "Mask length" msgstr "Longitud de la máscara" -#: netbox/ipam/filtersets.py:375 netbox/vpn/filtersets.py:427 +#: netbox/ipam/filtersets.py:342 netbox/vpn/filtersets.py:427 msgid "VLAN (ID)" msgstr "VLAN (ID)" -#: netbox/ipam/filtersets.py:379 netbox/vpn/filtersets.py:422 +#: netbox/ipam/filtersets.py:346 netbox/vpn/filtersets.py:422 msgid "VLAN number (1-4094)" msgstr "Número de VLAN (1-4094)" -#: netbox/ipam/filtersets.py:473 netbox/ipam/filtersets.py:477 -#: netbox/ipam/filtersets.py:569 netbox/ipam/forms/model_forms.py:496 +#: netbox/ipam/filtersets.py:440 netbox/ipam/filtersets.py:444 +#: netbox/ipam/filtersets.py:536 netbox/ipam/forms/model_forms.py:506 #: netbox/templates/tenancy/contact.html:53 #: netbox/tenancy/forms/bulk_edit.py:113 msgid "Address" msgstr "Dirección" -#: netbox/ipam/filtersets.py:481 +#: netbox/ipam/filtersets.py:448 msgid "Ranges which contain this prefix or IP" msgstr "Intervalos que contienen este prefijo o IP" -#: netbox/ipam/filtersets.py:509 netbox/ipam/filtersets.py:565 +#: netbox/ipam/filtersets.py:476 netbox/ipam/filtersets.py:532 msgid "Parent prefix" msgstr "Prefijo principal" -#: netbox/ipam/filtersets.py:618 netbox/ipam/filtersets.py:858 -#: netbox/ipam/filtersets.py:1133 netbox/vpn/filtersets.py:385 -msgid "Virtual machine (name)" -msgstr "Máquina virtual (nombre)" - -#: netbox/ipam/filtersets.py:623 netbox/ipam/filtersets.py:863 -#: netbox/ipam/filtersets.py:1127 netbox/virtualization/filtersets.py:282 -#: netbox/virtualization/filtersets.py:321 netbox/vpn/filtersets.py:390 -msgid "Virtual machine (ID)" -msgstr "Máquina virtual (ID)" - -#: netbox/ipam/filtersets.py:629 netbox/vpn/filtersets.py:97 -#: netbox/vpn/filtersets.py:396 -msgid "Interface (name)" -msgstr "Interfaz (nombre)" - -#: netbox/ipam/filtersets.py:640 netbox/vpn/filtersets.py:108 -#: netbox/vpn/filtersets.py:407 -msgid "VM interface (name)" -msgstr "Interfaz VM (nombre)" - -#: netbox/ipam/filtersets.py:645 netbox/vpn/filtersets.py:113 -msgid "VM interface (ID)" -msgstr "Interfaz de máquina virtual (ID)" - -#: netbox/ipam/filtersets.py:650 +#: netbox/ipam/filtersets.py:617 msgid "FHRP group (ID)" msgstr "Grupo FHRP (ID)" -#: netbox/ipam/filtersets.py:654 +#: netbox/ipam/filtersets.py:621 msgid "Is assigned to an interface" msgstr "Está asignado a una interfaz" -#: netbox/ipam/filtersets.py:658 +#: netbox/ipam/filtersets.py:625 msgid "Is assigned" msgstr "Está asignado" -#: netbox/ipam/filtersets.py:670 +#: netbox/ipam/filtersets.py:637 msgid "Service (ID)" msgstr "Servicio (ID)" -#: netbox/ipam/filtersets.py:675 +#: netbox/ipam/filtersets.py:642 msgid "NAT inside IP address (ID)" msgstr "Dirección IP interna de NAT (ID)" -#: netbox/ipam/filtersets.py:1043 netbox/ipam/forms/bulk_import.py:322 -msgid "Assigned interface" -msgstr "Interfaz asignada" +#: netbox/ipam/filtersets.py:1001 +msgid "Q-in-Q SVLAN (ID)" +msgstr "SVLAN Q-in-Q (ID)" -#: netbox/ipam/filtersets.py:1048 +#: netbox/ipam/filtersets.py:1005 +msgid "Q-in-Q SVLAN number (1-4094)" +msgstr "Número de SVLAN Q-in-Q (1-4094)" + +#: netbox/ipam/filtersets.py:1026 msgid "Assigned VM interface" msgstr "Interfaz VM asignada" -#: netbox/ipam/filtersets.py:1138 +#: netbox/ipam/filtersets.py:1097 +msgid "VLAN Translation Policy (name)" +msgstr "Política de traducción de VLAN (nombre)" + +#: netbox/ipam/filtersets.py:1163 msgid "IP address (ID)" msgstr "Dirección IP (ID)" -#: netbox/ipam/filtersets.py:1144 netbox/ipam/models/ip.py:788 +#: netbox/ipam/filtersets.py:1169 netbox/ipam/models/ip.py:788 msgid "IP address" msgstr "dirección IP" -#: netbox/ipam/filtersets.py:1169 +#: netbox/ipam/filtersets.py:1194 msgid "Primary IPv4 (ID)" msgstr "IPv4 principal (ID)" -#: netbox/ipam/filtersets.py:1174 +#: netbox/ipam/filtersets.py:1199 msgid "Primary IPv6 (ID)" msgstr "IPv6 principal (ID)" @@ -9525,438 +10050,411 @@ msgstr "Se requiere una máscara CIDR (por ejemplo, /24)." msgid "Address pattern" msgstr "Patrón de direcciones" -#: netbox/ipam/forms/bulk_edit.py:50 +#: netbox/ipam/forms/bulk_edit.py:53 msgid "Enforce unique space" msgstr "Haga valer un espacio único" -#: netbox/ipam/forms/bulk_edit.py:88 +#: netbox/ipam/forms/bulk_edit.py:91 msgid "Is private" msgstr "Es privado" -#: netbox/ipam/forms/bulk_edit.py:109 netbox/ipam/forms/bulk_edit.py:138 -#: netbox/ipam/forms/bulk_edit.py:163 netbox/ipam/forms/bulk_import.py:89 -#: netbox/ipam/forms/bulk_import.py:109 netbox/ipam/forms/bulk_import.py:129 -#: netbox/ipam/forms/filtersets.py:110 netbox/ipam/forms/filtersets.py:125 -#: netbox/ipam/forms/filtersets.py:148 netbox/ipam/forms/model_forms.py:96 -#: netbox/ipam/forms/model_forms.py:109 netbox/ipam/forms/model_forms.py:131 -#: netbox/ipam/forms/model_forms.py:149 netbox/ipam/models/asns.py:31 -#: netbox/ipam/models/asns.py:103 netbox/ipam/models/ip.py:71 -#: netbox/ipam/models/ip.py:90 netbox/ipam/tables/asn.py:20 +#: netbox/ipam/forms/bulk_edit.py:112 netbox/ipam/forms/bulk_edit.py:141 +#: netbox/ipam/forms/bulk_edit.py:166 netbox/ipam/forms/bulk_import.py:92 +#: netbox/ipam/forms/bulk_import.py:112 netbox/ipam/forms/bulk_import.py:132 +#: netbox/ipam/forms/filtersets.py:112 netbox/ipam/forms/filtersets.py:127 +#: netbox/ipam/forms/filtersets.py:150 netbox/ipam/forms/model_forms.py:99 +#: netbox/ipam/forms/model_forms.py:112 netbox/ipam/forms/model_forms.py:135 +#: netbox/ipam/forms/model_forms.py:154 netbox/ipam/models/asns.py:31 +#: netbox/ipam/models/asns.py:100 netbox/ipam/models/ip.py:71 +#: netbox/ipam/models/ip.py:87 netbox/ipam/tables/asn.py:20 #: netbox/ipam/tables/asn.py:45 netbox/templates/ipam/aggregate.html:18 #: netbox/templates/ipam/asn.html:27 netbox/templates/ipam/asnrange.html:19 #: netbox/templates/ipam/rir.html:19 msgid "RIR" msgstr "RIR" -#: netbox/ipam/forms/bulk_edit.py:171 +#: netbox/ipam/forms/bulk_edit.py:174 msgid "Date added" msgstr "Fecha añadida" -#: netbox/ipam/forms/bulk_edit.py:229 netbox/ipam/forms/model_forms.py:619 -#: netbox/ipam/forms/model_forms.py:666 netbox/ipam/tables/ip.py:251 -#: netbox/templates/ipam/vlan_edit.html:37 +#: netbox/ipam/forms/bulk_edit.py:213 netbox/ipam/forms/model_forms.py:629 +#: netbox/ipam/forms/model_forms.py:676 netbox/ipam/tables/ip.py:201 +#: netbox/templates/ipam/vlan_edit.html:45 #: netbox/templates/ipam/vlangroup.html:27 msgid "VLAN Group" msgstr "Grupo VLAN" -#: netbox/ipam/forms/bulk_edit.py:234 netbox/ipam/forms/bulk_import.py:185 -#: netbox/ipam/forms/filtersets.py:256 netbox/ipam/forms/model_forms.py:218 -#: netbox/ipam/models/vlans.py:250 netbox/ipam/tables/ip.py:255 -#: netbox/templates/ipam/prefix.html:60 netbox/templates/ipam/vlan.html:12 +#: netbox/ipam/forms/bulk_edit.py:218 netbox/ipam/forms/bulk_import.py:181 +#: netbox/ipam/forms/filtersets.py:259 netbox/ipam/forms/model_forms.py:217 +#: netbox/ipam/models/vlans.py:272 netbox/ipam/tables/ip.py:206 +#: netbox/templates/ipam/prefix.html:56 netbox/templates/ipam/vlan.html:12 #: netbox/templates/ipam/vlan/base.html:6 #: netbox/templates/ipam/vlan_edit.html:10 -#: netbox/templates/wireless/wirelesslan.html:30 +#: netbox/templates/wireless/wirelesslan.html:38 #: netbox/vpn/forms/bulk_import.py:304 netbox/vpn/forms/filtersets.py:284 -#: netbox/vpn/forms/model_forms.py:433 netbox/vpn/forms/model_forms.py:452 -#: netbox/wireless/forms/bulk_edit.py:55 -#: netbox/wireless/forms/bulk_import.py:48 -#: netbox/wireless/forms/model_forms.py:48 netbox/wireless/models.py:102 +#: netbox/vpn/forms/model_forms.py:436 netbox/vpn/forms/model_forms.py:455 +#: netbox/wireless/forms/bulk_edit.py:57 +#: netbox/wireless/forms/bulk_import.py:50 +#: netbox/wireless/forms/model_forms.py:50 netbox/wireless/models.py:102 msgid "VLAN" msgstr "VLAN" -#: netbox/ipam/forms/bulk_edit.py:245 +#: netbox/ipam/forms/bulk_edit.py:229 msgid "Prefix length" msgstr "Longitud del prefijo" -#: netbox/ipam/forms/bulk_edit.py:268 netbox/ipam/forms/filtersets.py:241 -#: netbox/templates/ipam/prefix.html:85 +#: netbox/ipam/forms/bulk_edit.py:252 netbox/ipam/forms/filtersets.py:244 +#: netbox/templates/ipam/prefix.html:81 msgid "Is a pool" msgstr "Es una piscina" -#: netbox/ipam/forms/bulk_edit.py:273 netbox/ipam/forms/bulk_edit.py:318 -#: netbox/ipam/forms/filtersets.py:248 netbox/ipam/forms/filtersets.py:293 -#: netbox/ipam/models/ip.py:272 netbox/ipam/models/ip.py:539 +#: netbox/ipam/forms/bulk_edit.py:257 netbox/ipam/forms/bulk_edit.py:302 +#: netbox/ipam/forms/filtersets.py:251 netbox/ipam/forms/filtersets.py:296 +#: netbox/ipam/models/ip.py:256 netbox/ipam/models/ip.py:525 msgid "Treat as fully utilized" msgstr "Tratar como si se hubiera utilizado por completo" -#: netbox/ipam/forms/bulk_edit.py:287 netbox/ipam/forms/filtersets.py:171 +#: netbox/ipam/forms/bulk_edit.py:271 netbox/ipam/forms/filtersets.py:173 +#: netbox/ipam/forms/model_forms.py:232 msgid "VLAN Assignment" msgstr "Asignación de VLAN" -#: netbox/ipam/forms/bulk_edit.py:366 netbox/ipam/models/ip.py:772 +#: netbox/ipam/forms/bulk_edit.py:350 netbox/ipam/models/ip.py:772 msgid "DNS name" msgstr "Nombre DNS" -#: netbox/ipam/forms/bulk_edit.py:387 netbox/ipam/forms/bulk_edit.py:534 -#: netbox/ipam/forms/bulk_import.py:418 netbox/ipam/forms/bulk_import.py:493 -#: netbox/ipam/forms/bulk_import.py:519 netbox/ipam/forms/filtersets.py:390 -#: netbox/ipam/forms/filtersets.py:530 netbox/templates/ipam/fhrpgroup.html:22 +#: netbox/ipam/forms/bulk_edit.py:371 netbox/ipam/forms/bulk_edit.py:562 +#: netbox/ipam/forms/bulk_import.py:417 netbox/ipam/forms/bulk_import.py:528 +#: netbox/ipam/forms/bulk_import.py:554 netbox/ipam/forms/filtersets.py:393 +#: netbox/ipam/forms/filtersets.py:582 netbox/templates/ipam/fhrpgroup.html:22 #: netbox/templates/ipam/inc/panels/fhrp_groups.html:24 #: netbox/templates/ipam/service.html:32 #: netbox/templates/ipam/servicetemplate.html:19 msgid "Protocol" msgstr "Protocolo" -#: netbox/ipam/forms/bulk_edit.py:394 netbox/ipam/forms/filtersets.py:397 +#: netbox/ipam/forms/bulk_edit.py:378 netbox/ipam/forms/filtersets.py:400 #: netbox/ipam/tables/fhrp.py:22 netbox/templates/ipam/fhrpgroup.html:26 msgid "Group ID" msgstr "ID de grupo" -#: netbox/ipam/forms/bulk_edit.py:399 netbox/ipam/forms/filtersets.py:402 -#: netbox/wireless/forms/bulk_edit.py:68 -#: netbox/wireless/forms/bulk_edit.py:115 -#: netbox/wireless/forms/bulk_import.py:62 -#: netbox/wireless/forms/bulk_import.py:65 -#: netbox/wireless/forms/bulk_import.py:104 -#: netbox/wireless/forms/bulk_import.py:107 -#: netbox/wireless/forms/filtersets.py:54 -#: netbox/wireless/forms/filtersets.py:88 +#: netbox/ipam/forms/bulk_edit.py:383 netbox/ipam/forms/filtersets.py:405 +#: netbox/wireless/forms/bulk_edit.py:70 +#: netbox/wireless/forms/bulk_edit.py:118 +#: netbox/wireless/forms/bulk_import.py:64 +#: netbox/wireless/forms/bulk_import.py:67 +#: netbox/wireless/forms/bulk_import.py:109 +#: netbox/wireless/forms/bulk_import.py:112 +#: netbox/wireless/forms/filtersets.py:57 +#: netbox/wireless/forms/filtersets.py:116 msgid "Authentication type" msgstr "Tipo de autenticación" -#: netbox/ipam/forms/bulk_edit.py:404 netbox/ipam/forms/filtersets.py:406 +#: netbox/ipam/forms/bulk_edit.py:388 netbox/ipam/forms/filtersets.py:409 msgid "Authentication key" msgstr "Clave de autenticación" -#: netbox/ipam/forms/bulk_edit.py:421 netbox/ipam/forms/filtersets.py:383 -#: netbox/ipam/forms/model_forms.py:507 netbox/netbox/navigation/menu.py:386 +#: netbox/ipam/forms/bulk_edit.py:405 netbox/ipam/forms/filtersets.py:386 +#: netbox/ipam/forms/model_forms.py:517 netbox/netbox/navigation/menu.py:407 #: netbox/templates/ipam/fhrpgroup.html:49 #: netbox/templates/wireless/inc/authentication_attrs.html:5 -#: netbox/wireless/forms/bulk_edit.py:91 -#: netbox/wireless/forms/bulk_edit.py:149 -#: netbox/wireless/forms/filtersets.py:36 -#: netbox/wireless/forms/filtersets.py:76 -#: netbox/wireless/forms/model_forms.py:55 -#: netbox/wireless/forms/model_forms.py:171 +#: netbox/wireless/forms/bulk_edit.py:94 +#: netbox/wireless/forms/bulk_edit.py:152 +#: netbox/wireless/forms/filtersets.py:39 +#: netbox/wireless/forms/filtersets.py:104 +#: netbox/wireless/forms/model_forms.py:58 +#: netbox/wireless/forms/model_forms.py:174 msgid "Authentication" msgstr "AUTENTICACIÓN" -#: netbox/ipam/forms/bulk_edit.py:436 netbox/ipam/forms/model_forms.py:608 -msgid "Scope type" -msgstr "Tipo de ámbito" - -#: netbox/ipam/forms/bulk_edit.py:439 netbox/ipam/forms/bulk_edit.py:453 -#: netbox/ipam/forms/model_forms.py:611 netbox/ipam/forms/model_forms.py:621 -#: netbox/ipam/tables/vlans.py:71 netbox/templates/ipam/vlangroup.html:38 -msgid "Scope" -msgstr "Alcance" - -#: netbox/ipam/forms/bulk_edit.py:446 netbox/ipam/models/vlans.py:60 +#: netbox/ipam/forms/bulk_edit.py:430 netbox/ipam/models/vlans.py:62 msgid "VLAN ID ranges" msgstr "Intervalos de ID de VLAN" -#: netbox/ipam/forms/bulk_edit.py:525 +#: netbox/ipam/forms/bulk_edit.py:505 netbox/ipam/forms/bulk_import.py:485 +#: netbox/ipam/forms/filtersets.py:557 netbox/ipam/models/vlans.py:232 +#: netbox/ipam/tables/vlans.py:103 +msgid "Q-in-Q role" +msgstr "Función de Q-in-Q" + +#: netbox/ipam/forms/bulk_edit.py:522 +msgid "Q-in-Q" +msgstr "Q-in-Q" + +#: netbox/ipam/forms/bulk_edit.py:523 msgid "Site & Group" msgstr "Sitio y grupo" -#: netbox/ipam/forms/bulk_edit.py:539 netbox/ipam/forms/model_forms.py:692 -#: netbox/ipam/forms/model_forms.py:724 netbox/ipam/tables/services.py:19 +#: netbox/ipam/forms/bulk_edit.py:546 netbox/ipam/forms/bulk_import.py:515 +#: netbox/ipam/forms/model_forms.py:724 netbox/ipam/tables/vlans.py:256 +#: netbox/templates/ipam/vlantranslationrule.html:14 +#: netbox/vpn/forms/model_forms.py:322 netbox/vpn/forms/model_forms.py:359 +msgid "Policy" +msgstr "Política" + +#: netbox/ipam/forms/bulk_edit.py:567 netbox/ipam/forms/model_forms.py:742 +#: netbox/ipam/forms/model_forms.py:774 netbox/ipam/tables/services.py:19 #: netbox/ipam/tables/services.py:49 netbox/templates/ipam/service.html:36 #: netbox/templates/ipam/servicetemplate.html:23 msgid "Ports" msgstr "Puertos" -#: netbox/ipam/forms/bulk_import.py:48 +#: netbox/ipam/forms/bulk_import.py:51 msgid "Import route targets" msgstr "Importar destinos de ruta" -#: netbox/ipam/forms/bulk_import.py:54 +#: netbox/ipam/forms/bulk_import.py:57 msgid "Export route targets" msgstr "Exportar destinos de ruta" -#: netbox/ipam/forms/bulk_import.py:92 netbox/ipam/forms/bulk_import.py:112 -#: netbox/ipam/forms/bulk_import.py:132 +#: netbox/ipam/forms/bulk_import.py:95 netbox/ipam/forms/bulk_import.py:115 +#: netbox/ipam/forms/bulk_import.py:135 msgid "Assigned RIR" msgstr "RIR asignado" -#: netbox/ipam/forms/bulk_import.py:182 +#: netbox/ipam/forms/bulk_import.py:178 msgid "VLAN's group (if any)" msgstr "Grupo de VLAN (si lo hay)" -#: netbox/ipam/forms/bulk_import.py:308 -msgid "Parent device of assigned interface (if any)" -msgstr "Dispositivo principal de la interfaz asignada (si existe)" - -#: netbox/ipam/forms/bulk_import.py:311 netbox/ipam/forms/bulk_import.py:512 -#: netbox/ipam/forms/model_forms.py:718 -#: netbox/virtualization/filtersets.py:288 -#: netbox/virtualization/filtersets.py:327 -#: netbox/virtualization/forms/bulk_edit.py:200 -#: netbox/virtualization/forms/bulk_edit.py:326 -#: netbox/virtualization/forms/bulk_import.py:146 -#: netbox/virtualization/forms/bulk_import.py:207 -#: netbox/virtualization/forms/filtersets.py:212 -#: netbox/virtualization/forms/filtersets.py:248 -#: netbox/virtualization/forms/model_forms.py:288 -#: netbox/vpn/forms/bulk_import.py:93 netbox/vpn/forms/bulk_import.py:290 -msgid "Virtual machine" -msgstr "Máquina virtual" - -#: netbox/ipam/forms/bulk_import.py:315 -msgid "Parent VM of assigned interface (if any)" -msgstr "VM principal de la interfaz asignada (si existe)" +#: netbox/ipam/forms/bulk_import.py:207 +#: netbox/virtualization/forms/bulk_import.py:80 +#: netbox/wireless/forms/bulk_import.py:83 +msgid "Scope ID" +msgstr "ID de ámbito" #: netbox/ipam/forms/bulk_import.py:325 -msgid "Is primary" -msgstr "Es primaria" - -#: netbox/ipam/forms/bulk_import.py:326 msgid "Make this the primary IP for the assigned device" msgstr "Conviértase en la IP principal del dispositivo asignado" -#: netbox/ipam/forms/bulk_import.py:330 +#: netbox/ipam/forms/bulk_import.py:329 msgid "Is out-of-band" msgstr "Está fuera de banda" -#: netbox/ipam/forms/bulk_import.py:331 +#: netbox/ipam/forms/bulk_import.py:330 msgid "Designate this as the out-of-band IP address for the assigned device" msgstr "" "Designe esto como la dirección IP fuera de banda para el dispositivo " "asignado" -#: netbox/ipam/forms/bulk_import.py:371 +#: netbox/ipam/forms/bulk_import.py:370 msgid "No device or virtual machine specified; cannot set as primary IP" msgstr "" "No se especificó ningún dispositivo o máquina virtual; no se puede " "establecer como IP principal" -#: netbox/ipam/forms/bulk_import.py:375 +#: netbox/ipam/forms/bulk_import.py:374 msgid "No device specified; cannot set as out-of-band IP" msgstr "" "No se especificó ningún dispositivo; no se puede configurar como IP fuera de" " banda" -#: netbox/ipam/forms/bulk_import.py:379 +#: netbox/ipam/forms/bulk_import.py:378 msgid "Cannot set out-of-band IP for virtual machines" msgstr "" "No se puede configurar la IP fuera de banda para las máquinas virtuales" -#: netbox/ipam/forms/bulk_import.py:383 +#: netbox/ipam/forms/bulk_import.py:382 msgid "No interface specified; cannot set as primary IP" msgstr "" "No se especificó ninguna interfaz; no se puede establecer como IP principal" -#: netbox/ipam/forms/bulk_import.py:387 +#: netbox/ipam/forms/bulk_import.py:386 msgid "No interface specified; cannot set as out-of-band IP" msgstr "" "No se especificó ninguna interfaz; no se puede configurar como IP fuera de " "banda" -#: netbox/ipam/forms/bulk_import.py:422 +#: netbox/ipam/forms/bulk_import.py:421 msgid "Auth type" msgstr "Tipo de autenticación" -#: netbox/ipam/forms/bulk_import.py:437 -msgid "Scope type (app & model)" -msgstr "Tipo de ámbito (aplicación y modelo)" - -#: netbox/ipam/forms/bulk_import.py:464 +#: netbox/ipam/forms/bulk_import.py:463 msgid "Assigned VLAN group" msgstr "Grupo de VLAN asignado" -#: netbox/ipam/forms/bulk_import.py:495 netbox/ipam/forms/bulk_import.py:521 +#: netbox/ipam/forms/bulk_import.py:495 +msgid "Service VLAN (for Q-in-Q/802.1ad customer VLANs)" +msgstr "VLAN de servicio (para VLAN de clientes de Q-in-Q/802.1ad)" + +#: netbox/ipam/forms/bulk_import.py:518 netbox/ipam/models/vlans.py:343 +msgid "VLAN translation policy" +msgstr "Política de traducción de VLAN" + +#: netbox/ipam/forms/bulk_import.py:530 netbox/ipam/forms/bulk_import.py:556 msgid "IP protocol" msgstr "Protocolo IP" -#: netbox/ipam/forms/bulk_import.py:509 +#: netbox/ipam/forms/bulk_import.py:544 msgid "Required if not assigned to a VM" msgstr "Obligatorio si no está asignado a una VM" -#: netbox/ipam/forms/bulk_import.py:516 +#: netbox/ipam/forms/bulk_import.py:551 msgid "Required if not assigned to a device" msgstr "Obligatorio si no está asignado a un dispositivo" -#: netbox/ipam/forms/bulk_import.py:541 +#: netbox/ipam/forms/bulk_import.py:576 #, python-brace-format msgid "{ip} is not assigned to this device/VM." msgstr "{ip} no está asignado a este dispositivo/máquina virtual." -#: netbox/ipam/forms/filtersets.py:47 netbox/ipam/forms/model_forms.py:63 -#: netbox/netbox/navigation/menu.py:189 netbox/vpn/forms/model_forms.py:410 +#: netbox/ipam/forms/filtersets.py:49 netbox/ipam/forms/model_forms.py:66 +#: netbox/netbox/navigation/menu.py:195 netbox/vpn/forms/model_forms.py:413 msgid "Route Targets" msgstr "Objetivos de ruta" -#: netbox/ipam/forms/filtersets.py:53 netbox/ipam/forms/model_forms.py:50 -#: netbox/vpn/forms/filtersets.py:224 netbox/vpn/forms/model_forms.py:397 +#: netbox/ipam/forms/filtersets.py:55 netbox/ipam/forms/model_forms.py:53 +#: netbox/vpn/forms/filtersets.py:224 netbox/vpn/forms/model_forms.py:400 msgid "Import targets" msgstr "Importar objetivos" -#: netbox/ipam/forms/filtersets.py:58 netbox/ipam/forms/model_forms.py:55 -#: netbox/vpn/forms/filtersets.py:229 netbox/vpn/forms/model_forms.py:402 +#: netbox/ipam/forms/filtersets.py:60 netbox/ipam/forms/model_forms.py:58 +#: netbox/vpn/forms/filtersets.py:229 netbox/vpn/forms/model_forms.py:405 msgid "Export targets" msgstr "Objetivos de exportación" -#: netbox/ipam/forms/filtersets.py:73 +#: netbox/ipam/forms/filtersets.py:75 msgid "Imported by VRF" msgstr "Importado por VRF" -#: netbox/ipam/forms/filtersets.py:78 +#: netbox/ipam/forms/filtersets.py:80 msgid "Exported by VRF" msgstr "Exportado por VRF" -#: netbox/ipam/forms/filtersets.py:87 netbox/ipam/tables/ip.py:89 +#: netbox/ipam/forms/filtersets.py:89 netbox/ipam/tables/ip.py:35 #: netbox/templates/ipam/rir.html:30 msgid "Private" msgstr "Privada" -#: netbox/ipam/forms/filtersets.py:105 netbox/ipam/forms/filtersets.py:191 -#: netbox/ipam/forms/filtersets.py:272 netbox/ipam/forms/filtersets.py:326 +#: netbox/ipam/forms/filtersets.py:107 netbox/ipam/forms/filtersets.py:193 +#: netbox/ipam/forms/filtersets.py:275 netbox/ipam/forms/filtersets.py:329 msgid "Address family" msgstr "Familia de direcciones" -#: netbox/ipam/forms/filtersets.py:119 netbox/templates/ipam/asnrange.html:25 +#: netbox/ipam/forms/filtersets.py:121 netbox/templates/ipam/asnrange.html:25 msgid "Range" msgstr "Alcance" -#: netbox/ipam/forms/filtersets.py:128 +#: netbox/ipam/forms/filtersets.py:130 msgid "Start" msgstr "Comenzar" -#: netbox/ipam/forms/filtersets.py:132 +#: netbox/ipam/forms/filtersets.py:134 msgid "End" msgstr "Fin" -#: netbox/ipam/forms/filtersets.py:186 +#: netbox/ipam/forms/filtersets.py:188 msgid "Search within" msgstr "Busca dentro" -#: netbox/ipam/forms/filtersets.py:207 netbox/ipam/forms/filtersets.py:342 +#: netbox/ipam/forms/filtersets.py:209 netbox/ipam/forms/filtersets.py:345 msgid "Present in VRF" msgstr "Presente en VRF" -#: netbox/ipam/forms/filtersets.py:311 +#: netbox/ipam/forms/filtersets.py:314 msgid "Device/VM" msgstr "Dispositivo/VM" -#: netbox/ipam/forms/filtersets.py:321 +#: netbox/ipam/forms/filtersets.py:324 msgid "Parent Prefix" msgstr "Prefijo principal" -#: netbox/ipam/forms/filtersets.py:347 -msgid "Assigned Device" -msgstr "Dispositivo asignado" - -#: netbox/ipam/forms/filtersets.py:352 -msgid "Assigned VM" -msgstr "VM asignada" - -#: netbox/ipam/forms/filtersets.py:366 +#: netbox/ipam/forms/filtersets.py:369 msgid "Assigned to an interface" msgstr "Asignado a una interfaz" -#: netbox/ipam/forms/filtersets.py:373 netbox/templates/ipam/ipaddress.html:51 +#: netbox/ipam/forms/filtersets.py:376 netbox/templates/ipam/ipaddress.html:51 msgid "DNS Name" msgstr "Nombre DNS" -#: netbox/ipam/forms/filtersets.py:416 netbox/ipam/models/vlans.py:251 -#: netbox/ipam/tables/ip.py:176 netbox/ipam/tables/vlans.py:82 -#: netbox/ipam/views.py:971 netbox/netbox/navigation/menu.py:193 -#: netbox/netbox/navigation/menu.py:195 +#: netbox/ipam/forms/filtersets.py:419 netbox/ipam/models/vlans.py:273 +#: netbox/ipam/tables/ip.py:122 netbox/ipam/tables/vlans.py:51 +#: netbox/ipam/views.py:1036 netbox/netbox/navigation/menu.py:199 +#: netbox/netbox/navigation/menu.py:201 msgid "VLANs" msgstr "VLAN" -#: netbox/ipam/forms/filtersets.py:457 +#: netbox/ipam/forms/filtersets.py:460 msgid "Contains VLAN ID" msgstr "Contiene el identificador de VLAN" -#: netbox/ipam/forms/filtersets.py:513 netbox/ipam/models/vlans.py:192 +#: netbox/ipam/forms/filtersets.py:494 netbox/ipam/models/vlans.py:363 +msgid "Local VLAN ID" +msgstr "ID de VLAN local" + +#: netbox/ipam/forms/filtersets.py:499 netbox/ipam/models/vlans.py:371 +msgid "Remote VLAN ID" +msgstr "ID de VLAN remota" + +#: netbox/ipam/forms/filtersets.py:509 +msgid "Q-in-Q/802.1ad" +msgstr "Q-in-Q/802.1ad" + +#: netbox/ipam/forms/filtersets.py:554 netbox/ipam/models/vlans.py:191 #: netbox/templates/ipam/vlan.html:31 msgid "VLAN ID" msgstr "IDENTIFICADOR DE VLAN" -#: netbox/ipam/forms/filtersets.py:556 netbox/ipam/forms/model_forms.py:324 -#: netbox/ipam/forms/model_forms.py:746 netbox/ipam/forms/model_forms.py:772 -#: netbox/ipam/tables/vlans.py:195 -#: netbox/templates/virtualization/virtualdisk.html:21 -#: netbox/templates/virtualization/virtualmachine.html:12 -#: netbox/templates/virtualization/vminterface.html:21 -#: netbox/templates/vpn/tunneltermination.html:25 -#: netbox/virtualization/forms/filtersets.py:197 -#: netbox/virtualization/forms/filtersets.py:242 -#: netbox/virtualization/forms/model_forms.py:220 -#: netbox/virtualization/tables/virtualmachines.py:135 -#: netbox/virtualization/tables/virtualmachines.py:190 -#: netbox/vpn/choices.py:53 netbox/vpn/forms/filtersets.py:293 -#: netbox/vpn/forms/model_forms.py:160 netbox/vpn/forms/model_forms.py:171 -#: netbox/vpn/forms/model_forms.py:273 netbox/vpn/forms/model_forms.py:454 -msgid "Virtual Machine" -msgstr "Máquina virtual" - -#: netbox/ipam/forms/model_forms.py:80 +#: netbox/ipam/forms/model_forms.py:83 #: netbox/templates/ipam/routetarget.html:10 msgid "Route Target" msgstr "Objetivo de ruta" -#: netbox/ipam/forms/model_forms.py:114 netbox/ipam/tables/ip.py:117 +#: netbox/ipam/forms/model_forms.py:118 netbox/ipam/tables/ip.py:63 #: netbox/templates/ipam/aggregate.html:11 #: netbox/templates/ipam/prefix.html:38 msgid "Aggregate" msgstr "Agregado" -#: netbox/ipam/forms/model_forms.py:135 netbox/templates/ipam/asnrange.html:12 +#: netbox/ipam/forms/model_forms.py:140 netbox/templates/ipam/asnrange.html:12 msgid "ASN Range" msgstr "Gama ASN" -#: netbox/ipam/forms/model_forms.py:231 -msgid "Site/VLAN Assignment" -msgstr "" - -#: netbox/ipam/forms/model_forms.py:259 netbox/templates/ipam/iprange.html:10 +#: netbox/ipam/forms/model_forms.py:269 netbox/templates/ipam/iprange.html:10 msgid "IP Range" msgstr "Rango de IP" -#: netbox/ipam/forms/model_forms.py:295 netbox/ipam/forms/model_forms.py:325 -#: netbox/ipam/forms/model_forms.py:506 +#: netbox/ipam/forms/model_forms.py:305 netbox/ipam/forms/model_forms.py:335 +#: netbox/ipam/forms/model_forms.py:516 #: netbox/templates/ipam/fhrpgroup.html:19 msgid "FHRP Group" msgstr "Grupo FHRP" -#: netbox/ipam/forms/model_forms.py:310 +#: netbox/ipam/forms/model_forms.py:320 msgid "Make this the primary IP for the device/VM" msgstr "Haga que esta sea la IP principal del dispositivo/VM" -#: netbox/ipam/forms/model_forms.py:314 +#: netbox/ipam/forms/model_forms.py:324 msgid "Make this the out-of-band IP for the device" msgstr "Convierta esta en la IP fuera de banda del dispositivo" -#: netbox/ipam/forms/model_forms.py:329 +#: netbox/ipam/forms/model_forms.py:339 msgid "NAT IP (Inside)" msgstr "NAT IP (interior)" -#: netbox/ipam/forms/model_forms.py:391 +#: netbox/ipam/forms/model_forms.py:401 msgid "An IP address can only be assigned to a single object." msgstr "Solo se puede asignar una dirección IP a un único objeto." -#: netbox/ipam/forms/model_forms.py:398 +#: netbox/ipam/forms/model_forms.py:408 msgid "Cannot reassign primary IP address for the parent device/VM" msgstr "" "No se puede reasignar la dirección IP principal para el dispositivo o " "máquina virtual principal" -#: netbox/ipam/forms/model_forms.py:402 +#: netbox/ipam/forms/model_forms.py:412 msgid "Cannot reassign out-of-Band IP address for the parent device" msgstr "" "No se puede reasignar la dirección IP fuera de banda para el dispositivo " "principal" -#: netbox/ipam/forms/model_forms.py:412 +#: netbox/ipam/forms/model_forms.py:422 msgid "" "Only IP addresses assigned to an interface can be designated as primary IPs." msgstr "" "Solo las direcciones IP asignadas a una interfaz se pueden designar como IP " "principales." -#: netbox/ipam/forms/model_forms.py:420 +#: netbox/ipam/forms/model_forms.py:430 msgid "" "Only IP addresses assigned to a device interface can be designated as the " "out-of-band IP for a device." @@ -9964,24 +10462,29 @@ msgstr "" "Solo las direcciones IP asignadas a la interfaz de un dispositivo se pueden " "designar como IP fuera de banda de un dispositivo." -#: netbox/ipam/forms/model_forms.py:508 +#: netbox/ipam/forms/model_forms.py:518 msgid "Virtual IP Address" msgstr "Dirección IP virtual" -#: netbox/ipam/forms/model_forms.py:593 +#: netbox/ipam/forms/model_forms.py:603 msgid "Assignment already exists" msgstr "La asignación ya existe" -#: netbox/ipam/forms/model_forms.py:602 +#: netbox/ipam/forms/model_forms.py:612 #: netbox/templates/ipam/vlangroup.html:42 msgid "VLAN IDs" msgstr "ID de VLAN" -#: netbox/ipam/forms/model_forms.py:620 +#: netbox/ipam/forms/model_forms.py:630 msgid "Child VLANs" msgstr "VLAN secundarias" -#: netbox/ipam/forms/model_forms.py:697 netbox/ipam/forms/model_forms.py:729 +#: netbox/ipam/forms/model_forms.py:730 +#: netbox/templates/ipam/vlantranslationrule.html:11 +msgid "VLAN Translation Rule" +msgstr "Regla de traducción de VLAN" + +#: netbox/ipam/forms/model_forms.py:747 netbox/ipam/forms/model_forms.py:779 msgid "" "Comma-separated list of one or more port numbers. A range may be specified " "using a hyphen." @@ -9989,33 +10492,28 @@ msgstr "" "Lista separada por comas de uno o más números de puerto. Se puede " "especificar un rango mediante un guión." -#: netbox/ipam/forms/model_forms.py:702 +#: netbox/ipam/forms/model_forms.py:752 #: netbox/templates/ipam/servicetemplate.html:12 msgid "Service Template" msgstr "Plantilla de servicio" -#: netbox/ipam/forms/model_forms.py:749 +#: netbox/ipam/forms/model_forms.py:799 msgid "Port(s)" msgstr "Puerto (s)" -#: netbox/ipam/forms/model_forms.py:750 netbox/ipam/forms/model_forms.py:778 -#: netbox/templates/ipam/service.html:21 -msgid "Service" -msgstr "Servicio" - -#: netbox/ipam/forms/model_forms.py:763 +#: netbox/ipam/forms/model_forms.py:813 msgid "Service template" msgstr "Plantilla de servicio" -#: netbox/ipam/forms/model_forms.py:775 +#: netbox/ipam/forms/model_forms.py:825 msgid "From Template" msgstr "Desde plantilla" -#: netbox/ipam/forms/model_forms.py:776 +#: netbox/ipam/forms/model_forms.py:826 msgid "Custom" msgstr "Personalizado" -#: netbox/ipam/forms/model_forms.py:806 +#: netbox/ipam/forms/model_forms.py:856 msgid "" "Must specify name, protocol, and port(s) if not using a service template." msgstr "" @@ -10034,28 +10532,28 @@ msgstr "Gama ASN" msgid "ASN ranges" msgstr "Gamas de ASN" -#: netbox/ipam/models/asns.py:72 +#: netbox/ipam/models/asns.py:69 #, python-brace-format msgid "Starting ASN ({start}) must be lower than ending ASN ({end})." msgstr "Iniciar ASN ({start}) debe ser inferior al ASN final ({end})." -#: netbox/ipam/models/asns.py:104 +#: netbox/ipam/models/asns.py:101 msgid "Regional Internet Registry responsible for this AS number space" msgstr "Registro regional de Internet responsable de este espacio numérico AS" -#: netbox/ipam/models/asns.py:109 +#: netbox/ipam/models/asns.py:106 msgid "16- or 32-bit autonomous system number" msgstr "Número de sistema autónomo de 16 o 32 bits" -#: netbox/ipam/models/fhrp.py:22 +#: netbox/ipam/models/fhrp.py:21 msgid "group ID" msgstr "ID de grupo" -#: netbox/ipam/models/fhrp.py:30 netbox/ipam/models/services.py:22 +#: netbox/ipam/models/fhrp.py:29 netbox/ipam/models/services.py:21 msgid "protocol" msgstr "protocolo" -#: netbox/ipam/models/fhrp.py:38 netbox/wireless/models.py:28 +#: netbox/ipam/models/fhrp.py:38 netbox/wireless/models.py:29 msgid "authentication type" msgstr "tipo de autenticación" @@ -10071,11 +10569,11 @@ msgstr "Grupo FHRP" msgid "FHRP groups" msgstr "Grupos FHRP" -#: netbox/ipam/models/fhrp.py:113 +#: netbox/ipam/models/fhrp.py:110 msgid "FHRP group assignment" msgstr "Asignación grupal de FHRP" -#: netbox/ipam/models/fhrp.py:114 +#: netbox/ipam/models/fhrp.py:111 msgid "FHRP group assignments" msgstr "Tareas grupales de FHRP" @@ -10087,35 +10585,35 @@ msgstr "privado" msgid "IP space managed by this RIR is considered private" msgstr "El espacio IP administrado por este RIR se considera privado" -#: netbox/ipam/models/ip.py:72 netbox/netbox/navigation/menu.py:182 +#: netbox/ipam/models/ip.py:72 netbox/netbox/navigation/menu.py:188 msgid "RIRs" msgstr "RIR" -#: netbox/ipam/models/ip.py:84 +#: netbox/ipam/models/ip.py:81 msgid "IPv4 or IPv6 network" msgstr "Red IPv4 o IPv6" -#: netbox/ipam/models/ip.py:91 +#: netbox/ipam/models/ip.py:88 msgid "Regional Internet Registry responsible for this IP space" msgstr "Registro regional de Internet responsable de este espacio IP" -#: netbox/ipam/models/ip.py:101 +#: netbox/ipam/models/ip.py:98 msgid "date added" msgstr "fecha añadida" -#: netbox/ipam/models/ip.py:115 +#: netbox/ipam/models/ip.py:112 msgid "aggregate" msgstr "agregado" -#: netbox/ipam/models/ip.py:116 +#: netbox/ipam/models/ip.py:113 msgid "aggregates" msgstr "agregados" -#: netbox/ipam/models/ip.py:132 +#: netbox/ipam/models/ip.py:126 msgid "Cannot create aggregate with /0 mask." msgstr "No se puede crear un agregado con la máscara /0." -#: netbox/ipam/models/ip.py:144 +#: netbox/ipam/models/ip.py:138 #, python-brace-format msgid "" "Aggregates cannot overlap. {prefix} is already covered by an existing " @@ -10124,7 +10622,7 @@ msgstr "" "Los agregados no pueden superponerse. {prefix} ya está cubierto por un " "agregado existente ({aggregate})." -#: netbox/ipam/models/ip.py:158 +#: netbox/ipam/models/ip.py:152 #, python-brace-format msgid "" "Prefixes cannot overlap aggregates. {prefix} covers an existing aggregate " @@ -10133,128 +10631,123 @@ msgstr "" "Los prefijos no pueden superponerse a los agregados. {prefix} cubre un " "agregado existente ({aggregate})." -#: netbox/ipam/models/ip.py:200 netbox/ipam/models/ip.py:737 -#: netbox/vpn/models/tunnels.py:114 -msgid "role" -msgstr "papel" - -#: netbox/ipam/models/ip.py:201 +#: netbox/ipam/models/ip.py:195 msgid "roles" msgstr "papeles" -#: netbox/ipam/models/ip.py:217 netbox/ipam/models/ip.py:293 +#: netbox/ipam/models/ip.py:208 netbox/ipam/models/ip.py:277 msgid "prefix" msgstr "prefijo" -#: netbox/ipam/models/ip.py:218 +#: netbox/ipam/models/ip.py:209 msgid "IPv4 or IPv6 network with mask" msgstr "Red IPv4 o IPv6 con máscara" -#: netbox/ipam/models/ip.py:254 +#: netbox/ipam/models/ip.py:238 msgid "Operational status of this prefix" msgstr "Estado operativo de este prefijo" -#: netbox/ipam/models/ip.py:262 +#: netbox/ipam/models/ip.py:246 msgid "The primary function of this prefix" msgstr "La función principal de este prefijo" -#: netbox/ipam/models/ip.py:265 +#: netbox/ipam/models/ip.py:249 msgid "is a pool" msgstr "es una piscina" -#: netbox/ipam/models/ip.py:267 +#: netbox/ipam/models/ip.py:251 msgid "All IP addresses within this prefix are considered usable" msgstr "" "Todas las direcciones IP incluidas en este prefijo se consideran " "utilizables." -#: netbox/ipam/models/ip.py:270 netbox/ipam/models/ip.py:537 +#: netbox/ipam/models/ip.py:254 netbox/ipam/models/ip.py:523 msgid "mark utilized" msgstr "marca utilizada" -#: netbox/ipam/models/ip.py:294 +#: netbox/ipam/models/ip.py:278 msgid "prefixes" msgstr "prefijos" -#: netbox/ipam/models/ip.py:317 +#: netbox/ipam/models/ip.py:298 msgid "Cannot create prefix with /0 mask." msgstr "No se puede crear un prefijo con la máscara /0." -#: netbox/ipam/models/ip.py:324 netbox/ipam/models/ip.py:874 +#: netbox/ipam/models/ip.py:305 netbox/ipam/models/ip.py:871 #, python-brace-format msgid "VRF {vrf}" msgstr "VRF {vrf}" -#: netbox/ipam/models/ip.py:324 netbox/ipam/models/ip.py:874 +#: netbox/ipam/models/ip.py:305 netbox/ipam/models/ip.py:871 msgid "global table" msgstr "tabla global" -#: netbox/ipam/models/ip.py:326 +#: netbox/ipam/models/ip.py:307 #, python-brace-format msgid "Duplicate prefix found in {table}: {prefix}" msgstr "Se encuentra un prefijo duplicado en {table}: {prefix}" -#: netbox/ipam/models/ip.py:495 +#: netbox/ipam/models/ip.py:481 msgid "start address" msgstr "dirección de inicio" -#: netbox/ipam/models/ip.py:496 netbox/ipam/models/ip.py:500 -#: netbox/ipam/models/ip.py:712 +#: netbox/ipam/models/ip.py:482 netbox/ipam/models/ip.py:486 +#: netbox/ipam/models/ip.py:711 msgid "IPv4 or IPv6 address (with mask)" msgstr "Dirección IPv4 o IPv6 (con máscara)" -#: netbox/ipam/models/ip.py:499 +#: netbox/ipam/models/ip.py:485 msgid "end address" msgstr "dirección final" -#: netbox/ipam/models/ip.py:526 +#: netbox/ipam/models/ip.py:512 msgid "Operational status of this range" msgstr "Estado operativo de esta gama" -#: netbox/ipam/models/ip.py:534 +#: netbox/ipam/models/ip.py:520 msgid "The primary function of this range" msgstr "La función principal de esta gama" -#: netbox/ipam/models/ip.py:548 +#: netbox/ipam/models/ip.py:534 msgid "IP range" msgstr "Rango IP" -#: netbox/ipam/models/ip.py:549 +#: netbox/ipam/models/ip.py:535 msgid "IP ranges" msgstr "Intervalos de IP" -#: netbox/ipam/models/ip.py:565 +#: netbox/ipam/models/ip.py:548 msgid "Starting and ending IP address versions must match" msgstr "Las versiones de la dirección IP inicial y final deben coincidir" -#: netbox/ipam/models/ip.py:571 +#: netbox/ipam/models/ip.py:554 msgid "Starting and ending IP address masks must match" msgstr "Las máscaras de direcciones IP iniciales y finales deben coincidir" -#: netbox/ipam/models/ip.py:578 +#: netbox/ipam/models/ip.py:561 #, python-brace-format msgid "" "Ending address must be greater than the starting address ({start_address})" msgstr "" "La dirección final debe ser mayor que la dirección inicial ({start_address})" -#: netbox/ipam/models/ip.py:590 +#: netbox/ipam/models/ip.py:589 #, python-brace-format msgid "Defined addresses overlap with range {overlapping_range} in VRF {vrf}" msgstr "" "Las direcciones definidas se superponen con el rango {overlapping_range} en " "VRF {vrf}" -#: netbox/ipam/models/ip.py:599 +#: netbox/ipam/models/ip.py:598 #, python-brace-format msgid "Defined range exceeds maximum supported size ({max_size})" msgstr "El rango definido supera el tamaño máximo admitido ({max_size})" -#: netbox/ipam/models/ip.py:711 netbox/tenancy/models/contacts.py:82 +#: netbox/ipam/models/ip.py:710 netbox/tenancy/models/contacts.py:77 msgid "address" msgstr "dirección" -#: netbox/ipam/models/ip.py:734 +#: netbox/ipam/models/ip.py:733 msgid "The operational status of this IP" msgstr "El estado operativo de esta IP" @@ -10274,20 +10767,20 @@ msgstr "La IP para la que esta dirección es la IP «externa»" msgid "Hostname or FQDN (not case-sensitive)" msgstr "Nombre de host o FQDN (no distingue mayúsculas de minúsculas)" -#: netbox/ipam/models/ip.py:789 netbox/ipam/models/services.py:94 +#: netbox/ipam/models/ip.py:789 netbox/ipam/models/services.py:90 msgid "IP addresses" msgstr "direcciones IP" -#: netbox/ipam/models/ip.py:845 +#: netbox/ipam/models/ip.py:842 msgid "Cannot create IP address with /0 mask." msgstr "No se puede crear una dirección IP con la máscara /0." -#: netbox/ipam/models/ip.py:851 +#: netbox/ipam/models/ip.py:848 #, python-brace-format msgid "{ip} is a network ID, which may not be assigned to an interface." msgstr "{ip} es un ID de red, que no puede asignarse a una interfaz." -#: netbox/ipam/models/ip.py:862 +#: netbox/ipam/models/ip.py:859 #, python-brace-format msgid "" "{ip} is a broadcast address, which may not be assigned to an interface." @@ -10295,12 +10788,12 @@ msgstr "" "{ip} es una dirección de transmisión, que puede no estar asignada a una " "interfaz." -#: netbox/ipam/models/ip.py:876 +#: netbox/ipam/models/ip.py:873 #, python-brace-format msgid "Duplicate IP address found in {table}: {ipaddress}" msgstr "Se encontró una dirección IP duplicada en {table}: {ipaddress}" -#: netbox/ipam/models/ip.py:897 +#: netbox/ipam/models/ip.py:896 msgid "" "Cannot reassign IP address while it is designated as the primary IP for the " "parent object" @@ -10308,76 +10801,76 @@ msgstr "" "No se puede reasignar la dirección IP mientras esté designada como la IP " "principal del objeto principal" -#: netbox/ipam/models/ip.py:903 +#: netbox/ipam/models/ip.py:902 msgid "Only IPv6 addresses can be assigned SLAAC status" msgstr "Solo a las direcciones IPv6 se les puede asignar el estado SLAAC" -#: netbox/ipam/models/services.py:33 +#: netbox/ipam/models/services.py:32 msgid "port numbers" msgstr "números de puerto" -#: netbox/ipam/models/services.py:59 +#: netbox/ipam/models/services.py:58 msgid "service template" msgstr "plantilla de servicio" -#: netbox/ipam/models/services.py:60 +#: netbox/ipam/models/services.py:59 msgid "service templates" msgstr "plantillas de servicio" -#: netbox/ipam/models/services.py:95 +#: netbox/ipam/models/services.py:91 msgid "The specific IP addresses (if any) to which this service is bound" msgstr "" "Las direcciones IP específicas (si las hay) a las que está vinculado este " "servicio" -#: netbox/ipam/models/services.py:102 +#: netbox/ipam/models/services.py:98 msgid "service" msgstr "servicio" -#: netbox/ipam/models/services.py:103 +#: netbox/ipam/models/services.py:99 msgid "services" msgstr "servicios" -#: netbox/ipam/models/services.py:117 +#: netbox/ipam/models/services.py:110 msgid "" "A service cannot be associated with both a device and a virtual machine." msgstr "" "No se puede asociar un servicio tanto a un dispositivo como a una máquina " "virtual." -#: netbox/ipam/models/services.py:119 +#: netbox/ipam/models/services.py:112 msgid "" "A service must be associated with either a device or a virtual machine." msgstr "" "Un servicio debe estar asociado a un dispositivo o a una máquina virtual." -#: netbox/ipam/models/vlans.py:85 +#: netbox/ipam/models/vlans.py:87 msgid "VLAN groups" msgstr "Grupos de VLAN" -#: netbox/ipam/models/vlans.py:95 +#: netbox/ipam/models/vlans.py:94 msgid "Cannot set scope_type without scope_id." msgstr "No se puede establecer scope_type sin scope_id." -#: netbox/ipam/models/vlans.py:97 +#: netbox/ipam/models/vlans.py:96 msgid "Cannot set scope_id without scope_type." msgstr "No se puede establecer scope_id sin scope_type." -#: netbox/ipam/models/vlans.py:105 +#: netbox/ipam/models/vlans.py:104 #, python-brace-format msgid "Starting VLAN ID in range ({value}) cannot be less than {minimum}" msgstr "" "El ID de VLAN inicial está dentro del rango ({value}) no puede ser inferior " "a {minimum}" -#: netbox/ipam/models/vlans.py:111 +#: netbox/ipam/models/vlans.py:110 #, python-brace-format msgid "Ending VLAN ID in range ({value}) cannot exceed {maximum}" msgstr "" "El ID de VLAN final está dentro del rango ({value}) no puede superar " "{maximum}" -#: netbox/ipam/models/vlans.py:118 +#: netbox/ipam/models/vlans.py:117 #, python-brace-format msgid "" "Ending VLAN ID in range must be greater than or equal to the starting VLAN " @@ -10386,31 +10879,36 @@ msgstr "" "El ID de VLAN final dentro del rango debe ser mayor o igual que el ID de " "VLAN inicial ({range})" -#: netbox/ipam/models/vlans.py:124 +#: netbox/ipam/models/vlans.py:123 msgid "Ranges cannot overlap." msgstr "Los rangos no se pueden superponer." -#: netbox/ipam/models/vlans.py:181 +#: netbox/ipam/models/vlans.py:180 msgid "The specific site to which this VLAN is assigned (if any)" msgstr "El sitio específico al que está asignada esta VLAN (si existe)" -#: netbox/ipam/models/vlans.py:189 +#: netbox/ipam/models/vlans.py:188 msgid "VLAN group (optional)" msgstr "Grupo de VLAN (opcional)" -#: netbox/ipam/models/vlans.py:197 +#: netbox/ipam/models/vlans.py:196 netbox/ipam/models/vlans.py:368 +#: netbox/ipam/models/vlans.py:376 msgid "Numeric VLAN ID (1-4094)" msgstr "ID de VLAN numérico (1-4094)" -#: netbox/ipam/models/vlans.py:215 +#: netbox/ipam/models/vlans.py:214 msgid "Operational status of this VLAN" msgstr "Estado operativo de esta VLAN" -#: netbox/ipam/models/vlans.py:223 +#: netbox/ipam/models/vlans.py:222 msgid "The primary function of this VLAN" msgstr "La función principal de esta VLAN" -#: netbox/ipam/models/vlans.py:266 +#: netbox/ipam/models/vlans.py:237 +msgid "Customer/service VLAN designation (for Q-in-Q/IEEE 802.1ad)" +msgstr "Designación de VLAN de cliente/servicio (para Q-in-Q/IEEE 802.1ad)" + +#: netbox/ipam/models/vlans.py:285 #, python-brace-format msgid "" "VLAN is assigned to group {group} (scope: {scope}); cannot also assign to " @@ -10419,41 +10917,58 @@ msgstr "" "La VLAN está asignada al grupo {group} (alcance: {scope}); no se puede " "asignar también al sitio {site}." -#: netbox/ipam/models/vlans.py:275 +#: netbox/ipam/models/vlans.py:294 #, python-brace-format msgid "VID must be in ranges {ranges} for VLANs in group {group}" msgstr "El VID debe estar en rangos {ranges} para VLAN en grupo {group}" -#: netbox/ipam/models/vrfs.py:30 +#: netbox/ipam/models/vlans.py:301 +msgid "Only Q-in-Q customer VLANs maybe assigned to a service VLAN." +msgstr "" +"Solo las VLAN de clientes de Q-in-Q pueden asignarse a una VLAN de servicio." + +#: netbox/ipam/models/vlans.py:307 +msgid "A Q-in-Q customer VLAN must be assigned to a service VLAN." +msgstr "Se debe asignar una VLAN de cliente de Q-in-Q a una VLAN de servicio." + +#: netbox/ipam/models/vlans.py:344 +msgid "VLAN translation policies" +msgstr "Políticas de traducción de VLAN" + +#: netbox/ipam/models/vlans.py:385 +msgid "VLAN translation rule" +msgstr "Regla de traducción de VLAN" + +#: netbox/ipam/models/vrfs.py:29 msgid "route distinguisher" msgstr "distinguidor de rutas" -#: netbox/ipam/models/vrfs.py:31 +#: netbox/ipam/models/vrfs.py:30 msgid "Unique route distinguisher (as defined in RFC 4364)" msgstr "Distintor de ruta único (tal como se define en el RFC 4364)" -#: netbox/ipam/models/vrfs.py:42 +#: netbox/ipam/models/vrfs.py:41 msgid "enforce unique space" msgstr "reforzar un espacio único" -#: netbox/ipam/models/vrfs.py:43 +#: netbox/ipam/models/vrfs.py:42 msgid "Prevent duplicate prefixes/IP addresses within this VRF" msgstr "Evite la duplicación de prefijos/direcciones IP en este VRF" -#: netbox/ipam/models/vrfs.py:63 netbox/netbox/navigation/menu.py:186 -#: netbox/netbox/navigation/menu.py:188 +#: netbox/ipam/models/vrfs.py:62 netbox/netbox/navigation/menu.py:192 +#: netbox/netbox/navigation/menu.py:194 msgid "VRFs" msgstr "VRFs" -#: netbox/ipam/models/vrfs.py:82 +#: netbox/ipam/models/vrfs.py:78 msgid "Route target value (formatted in accordance with RFC 4360)" msgstr "Valor objetivo de ruta (formateado de acuerdo con el RFC 4360)" -#: netbox/ipam/models/vrfs.py:94 +#: netbox/ipam/models/vrfs.py:91 msgid "route target" msgstr "destino de ruta" -#: netbox/ipam/models/vrfs.py:95 +#: netbox/ipam/models/vrfs.py:92 msgid "route targets" msgstr "objetivos de ruta" @@ -10469,84 +10984,101 @@ msgstr "Recuento de sitios" msgid "Provider Count" msgstr "Recuento de proveedores" -#: netbox/ipam/tables/ip.py:95 netbox/netbox/navigation/menu.py:179 -#: netbox/netbox/navigation/menu.py:181 +#: netbox/ipam/tables/ip.py:41 netbox/netbox/navigation/menu.py:185 +#: netbox/netbox/navigation/menu.py:187 msgid "Aggregates" msgstr "Agregados" -#: netbox/ipam/tables/ip.py:125 +#: netbox/ipam/tables/ip.py:71 msgid "Added" msgstr "Añadido" -#: netbox/ipam/tables/ip.py:128 netbox/ipam/tables/ip.py:166 -#: netbox/ipam/tables/vlans.py:142 netbox/ipam/views.py:346 -#: netbox/netbox/navigation/menu.py:165 netbox/netbox/navigation/menu.py:167 -#: netbox/templates/ipam/vlan.html:84 +#: netbox/ipam/tables/ip.py:74 netbox/ipam/tables/ip.py:112 +#: netbox/ipam/tables/vlans.py:118 netbox/ipam/views.py:373 +#: netbox/netbox/navigation/menu.py:171 netbox/netbox/navigation/menu.py:173 +#: netbox/templates/ipam/vlan.html:100 msgid "Prefixes" msgstr "Prefijos" -#: netbox/ipam/tables/ip.py:131 netbox/ipam/tables/ip.py:270 -#: netbox/ipam/tables/ip.py:324 netbox/ipam/tables/vlans.py:86 +#: netbox/ipam/tables/ip.py:77 netbox/ipam/tables/ip.py:221 +#: netbox/ipam/tables/ip.py:276 netbox/ipam/tables/vlans.py:55 #: netbox/templates/dcim/device.html:260 #: netbox/templates/ipam/aggregate.html:24 -#: netbox/templates/ipam/iprange.html:29 netbox/templates/ipam/prefix.html:106 +#: netbox/templates/ipam/iprange.html:29 netbox/templates/ipam/prefix.html:102 msgid "Utilization" msgstr "Utilización" -#: netbox/ipam/tables/ip.py:171 netbox/netbox/navigation/menu.py:161 +#: netbox/ipam/tables/ip.py:117 netbox/netbox/navigation/menu.py:167 msgid "IP Ranges" msgstr "Intervalos de IP" -#: netbox/ipam/tables/ip.py:221 +#: netbox/ipam/tables/ip.py:167 msgid "Prefix (Flat)" msgstr "Prefijo (plano)" -#: netbox/ipam/tables/ip.py:225 +#: netbox/ipam/tables/ip.py:171 msgid "Depth" msgstr "Profundidad" -#: netbox/ipam/tables/ip.py:262 +#: netbox/ipam/tables/ip.py:191 netbox/ipam/tables/vlans.py:37 +#: netbox/virtualization/tables/clusters.py:77 +#: netbox/wireless/tables/wirelesslan.py:55 +msgid "Scope Type" +msgstr "Tipo de ámbito" + +#: netbox/ipam/tables/ip.py:213 msgid "Pool" msgstr "Piscina" -#: netbox/ipam/tables/ip.py:266 netbox/ipam/tables/ip.py:320 +#: netbox/ipam/tables/ip.py:217 netbox/ipam/tables/ip.py:272 msgid "Marked Utilized" msgstr "Marcado como utilizado" -#: netbox/ipam/tables/ip.py:304 +#: netbox/ipam/tables/ip.py:256 msgid "Start address" msgstr "Dirección de inicio" -#: netbox/ipam/tables/ip.py:383 +#: netbox/ipam/tables/ip.py:335 msgid "NAT (Inside)" msgstr "NAT (interior)" -#: netbox/ipam/tables/ip.py:388 +#: netbox/ipam/tables/ip.py:340 msgid "NAT (Outside)" msgstr "NAT (exterior)" -#: netbox/ipam/tables/ip.py:393 +#: netbox/ipam/tables/ip.py:345 msgid "Assigned" msgstr "Asignado" -#: netbox/ipam/tables/ip.py:429 netbox/templates/vpn/l2vpntermination.html:16 +#: netbox/ipam/tables/ip.py:381 netbox/templates/vpn/l2vpntermination.html:16 #: netbox/vpn/forms/filtersets.py:240 msgid "Assigned Object" msgstr "Objeto asignado" -#: netbox/ipam/tables/vlans.py:68 -msgid "Scope Type" -msgstr "Tipo de ámbito" - -#: netbox/ipam/tables/vlans.py:76 +#: netbox/ipam/tables/vlans.py:45 msgid "VID Ranges" msgstr "Gamas VID" -#: netbox/ipam/tables/vlans.py:111 netbox/ipam/tables/vlans.py:214 +#: netbox/ipam/tables/vlans.py:80 netbox/ipam/tables/vlans.py:190 #: netbox/templates/dcim/inc/interface_vlans_table.html:4 msgid "VID" msgstr "VÍDEO" +#: netbox/ipam/tables/vlans.py:237 +#: netbox/templates/ipam/vlantranslationpolicy.html:22 +msgid "Rules" +msgstr "Reglas" + +#: netbox/ipam/tables/vlans.py:260 +#: netbox/templates/ipam/vlantranslationrule.html:18 +msgid "Local VID" +msgstr "VID local" + +#: netbox/ipam/tables/vlans.py:264 +#: netbox/templates/ipam/vlantranslationrule.html:22 +msgid "Remote VID" +msgstr "VID remoto" + #: netbox/ipam/tables/vrfs.py:30 msgid "RD" msgstr "ROJO" @@ -10586,23 +11118,23 @@ msgstr "" "Solo se permiten caracteres alfanuméricos, asteriscos, guiones, puntos y " "guiones bajos en los nombres DNS" -#: netbox/ipam/views.py:533 +#: netbox/ipam/views.py:570 msgid "Child Prefixes" msgstr "Prefijos infantiles" -#: netbox/ipam/views.py:569 +#: netbox/ipam/views.py:606 msgid "Child Ranges" msgstr "Rangos infantiles" -#: netbox/ipam/views.py:898 +#: netbox/ipam/views.py:958 msgid "Related IPs" msgstr "IPs relacionadas" -#: netbox/ipam/views.py:1127 +#: netbox/ipam/views.py:1315 msgid "Device Interfaces" msgstr "Interfaces de dispositivos" -#: netbox/ipam/views.py:1145 +#: netbox/ipam/views.py:1333 msgid "VM Interfaces" msgstr "Interfaces de VM" @@ -10653,90 +11185,112 @@ msgstr "{class_name} debe implementar get_view_name ()" msgid "Invalid permission {permission} for model {model}" msgstr "Permiso no válido {permission} para modelo {model}" -#: netbox/netbox/choices.py:49 +#: netbox/netbox/choices.py:51 msgid "Dark Red" msgstr "rojo oscuro" -#: netbox/netbox/choices.py:52 +#: netbox/netbox/choices.py:54 msgid "Rose" msgstr "Rosa" -#: netbox/netbox/choices.py:53 +#: netbox/netbox/choices.py:55 msgid "Fuchsia" msgstr "Fucsia" -#: netbox/netbox/choices.py:55 +#: netbox/netbox/choices.py:57 msgid "Dark Purple" msgstr "Púrpura oscuro" -#: netbox/netbox/choices.py:58 +#: netbox/netbox/choices.py:60 msgid "Light Blue" msgstr "Azul claro" -#: netbox/netbox/choices.py:61 +#: netbox/netbox/choices.py:63 msgid "Aqua" msgstr "Aguamarina" -#: netbox/netbox/choices.py:62 +#: netbox/netbox/choices.py:64 msgid "Dark Green" msgstr "Verde oscuro" -#: netbox/netbox/choices.py:64 +#: netbox/netbox/choices.py:66 msgid "Light Green" msgstr "Verde claro" -#: netbox/netbox/choices.py:65 +#: netbox/netbox/choices.py:67 msgid "Lime" msgstr "Lima" -#: netbox/netbox/choices.py:67 +#: netbox/netbox/choices.py:69 msgid "Amber" msgstr "Ámbar" -#: netbox/netbox/choices.py:69 +#: netbox/netbox/choices.py:71 msgid "Dark Orange" msgstr "Naranja oscuro" -#: netbox/netbox/choices.py:70 +#: netbox/netbox/choices.py:72 msgid "Brown" msgstr "Marrón" -#: netbox/netbox/choices.py:71 +#: netbox/netbox/choices.py:73 msgid "Light Grey" msgstr "Gris claro" -#: netbox/netbox/choices.py:72 +#: netbox/netbox/choices.py:74 msgid "Grey" msgstr "Gris" -#: netbox/netbox/choices.py:73 +#: netbox/netbox/choices.py:75 msgid "Dark Grey" msgstr "Gris oscuro" -#: netbox/netbox/choices.py:128 +#: netbox/netbox/choices.py:103 netbox/templates/extras/script_result.html:56 +msgid "Default" +msgstr "Predeterminado" + +#: netbox/netbox/choices.py:130 msgid "Direct" msgstr "Directo" -#: netbox/netbox/choices.py:129 +#: netbox/netbox/choices.py:131 msgid "Upload" msgstr "Cargar" -#: netbox/netbox/choices.py:141 netbox/netbox/choices.py:155 +#: netbox/netbox/choices.py:143 netbox/netbox/choices.py:157 msgid "Auto-detect" msgstr "Detección automática" -#: netbox/netbox/choices.py:156 +#: netbox/netbox/choices.py:158 msgid "Comma" msgstr "Coma" -#: netbox/netbox/choices.py:157 +#: netbox/netbox/choices.py:159 msgid "Semicolon" msgstr "Punto y coma" -#: netbox/netbox/choices.py:158 +#: netbox/netbox/choices.py:160 msgid "Tab" msgstr "Pestaña" +#: netbox/netbox/choices.py:193 netbox/templates/dcim/device.html:327 +#: netbox/templates/dcim/rack.html:107 +msgid "Kilograms" +msgstr "Kilogramos" + +#: netbox/netbox/choices.py:194 +msgid "Grams" +msgstr "Gramos" + +#: netbox/netbox/choices.py:195 netbox/templates/dcim/device.html:328 +#: netbox/templates/dcim/rack.html:108 +msgid "Pounds" +msgstr "Libras" + +#: netbox/netbox/choices.py:196 +msgid "Ounces" +msgstr "Onzas" + #: netbox/netbox/config/__init__.py:67 #, python-brace-format msgid "Invalid configuration parameter: {item}" @@ -11032,6 +11586,26 @@ msgstr "fecha sincronizada" msgid "{class_name} must implement a sync_data() method." msgstr "{class_name} debe implementar un método sync_data ()." +#: netbox/netbox/models/mixins.py:22 +msgid "weight unit" +msgstr "unidad de peso" + +#: netbox/netbox/models/mixins.py:52 +msgid "Must specify a unit when setting a weight" +msgstr "Debe especificar una unidad al establecer un peso" + +#: netbox/netbox/models/mixins.py:57 +msgid "distance" +msgstr "distancia" + +#: netbox/netbox/models/mixins.py:64 +msgid "distance unit" +msgstr "unidad de distancia" + +#: netbox/netbox/models/mixins.py:99 +msgid "Must specify a unit when setting a distance" +msgstr "Debe especificar una unidad al establecer una distancia" + #: netbox/netbox/navigation/menu.py:11 msgid "Organization" msgstr "Organización" @@ -11065,10 +11639,6 @@ msgstr "Roles de bastidor" msgid "Elevations" msgstr "Elevaciones" -#: netbox/netbox/navigation/menu.py:60 netbox/netbox/navigation/menu.py:62 -msgid "Rack Types" -msgstr "Tipos de estanterías" - #: netbox/netbox/navigation/menu.py:76 msgid "Modules" msgstr "Módulos" @@ -11091,175 +11661,200 @@ msgstr "Componentes del dispositivo" msgid "Inventory Item Roles" msgstr "Funciones de los artículos de inventario" -#: netbox/netbox/navigation/menu.py:111 netbox/netbox/navigation/menu.py:115 +#: netbox/netbox/navigation/menu.py:110 +#: netbox/templates/dcim/interface.html:413 +#: netbox/templates/virtualization/vminterface.html:118 +msgid "MAC Addresses" +msgstr "Direcciones MAC" + +#: netbox/netbox/navigation/menu.py:117 netbox/netbox/navigation/menu.py:121 +#: netbox/templates/dcim/interface.html:182 msgid "Connections" msgstr "Conexiones" -#: netbox/netbox/navigation/menu.py:117 +#: netbox/netbox/navigation/menu.py:123 msgid "Cables" msgstr "Cables" -#: netbox/netbox/navigation/menu.py:118 +#: netbox/netbox/navigation/menu.py:124 msgid "Wireless Links" msgstr "Vínculos inalámbricos" -#: netbox/netbox/navigation/menu.py:121 +#: netbox/netbox/navigation/menu.py:127 msgid "Interface Connections" msgstr "Conexiones de interfaz" -#: netbox/netbox/navigation/menu.py:126 +#: netbox/netbox/navigation/menu.py:132 msgid "Console Connections" msgstr "Conexiones de consola" -#: netbox/netbox/navigation/menu.py:131 +#: netbox/netbox/navigation/menu.py:137 msgid "Power Connections" msgstr "Conexiones de alimentación" -#: netbox/netbox/navigation/menu.py:147 +#: netbox/netbox/navigation/menu.py:153 msgid "Wireless LAN Groups" msgstr "Grupos de LAN inalámbrica" -#: netbox/netbox/navigation/menu.py:168 +#: netbox/netbox/navigation/menu.py:174 msgid "Prefix & VLAN Roles" msgstr "Funciones de prefijo y VLAN" -#: netbox/netbox/navigation/menu.py:174 +#: netbox/netbox/navigation/menu.py:180 msgid "ASN Ranges" msgstr "Rangos de ASN" -#: netbox/netbox/navigation/menu.py:196 +#: netbox/netbox/navigation/menu.py:202 msgid "VLAN Groups" msgstr "Grupos de VLAN" #: netbox/netbox/navigation/menu.py:203 +msgid "VLAN Translation Policies" +msgstr "Políticas de traducción de VLAN" + +#: netbox/netbox/navigation/menu.py:204 +#: netbox/templates/ipam/vlantranslationpolicy.html:46 +msgid "VLAN Translation Rules" +msgstr "Reglas de traducción de VLAN" + +#: netbox/netbox/navigation/menu.py:211 msgid "Service Templates" msgstr "Plantillas de servicio" -#: netbox/netbox/navigation/menu.py:204 netbox/templates/dcim/device.html:302 +#: netbox/netbox/navigation/menu.py:212 netbox/templates/dcim/device.html:302 #: netbox/templates/ipam/ipaddress.html:118 #: netbox/templates/virtualization/virtualmachine.html:154 msgid "Services" msgstr "Servicios" -#: netbox/netbox/navigation/menu.py:211 +#: netbox/netbox/navigation/menu.py:219 msgid "VPN" msgstr "VPN" -#: netbox/netbox/navigation/menu.py:215 netbox/netbox/navigation/menu.py:217 +#: netbox/netbox/navigation/menu.py:223 netbox/netbox/navigation/menu.py:225 #: netbox/vpn/tables/tunnels.py:24 msgid "Tunnels" msgstr "Túneles" -#: netbox/netbox/navigation/menu.py:218 +#: netbox/netbox/navigation/menu.py:226 #: netbox/templates/vpn/tunnelgroup.html:8 msgid "Tunnel Groups" msgstr "Grupos de túneles" -#: netbox/netbox/navigation/menu.py:219 +#: netbox/netbox/navigation/menu.py:227 msgid "Tunnel Terminations" msgstr "Terminaciones de túneles" -#: netbox/netbox/navigation/menu.py:223 netbox/netbox/navigation/menu.py:225 +#: netbox/netbox/navigation/menu.py:231 netbox/netbox/navigation/menu.py:233 #: netbox/vpn/models/l2vpn.py:64 msgid "L2VPNs" msgstr "VPNs L2" -#: netbox/netbox/navigation/menu.py:226 netbox/templates/vpn/l2vpn.html:56 -#: netbox/templates/vpn/tunnel.html:72 netbox/vpn/tables/tunnels.py:58 -msgid "Terminations" -msgstr "Terminaciones" - -#: netbox/netbox/navigation/menu.py:232 +#: netbox/netbox/navigation/menu.py:240 msgid "IKE Proposals" msgstr "Propuestas IKE" -#: netbox/netbox/navigation/menu.py:233 +#: netbox/netbox/navigation/menu.py:241 #: netbox/templates/vpn/ikeproposal.html:41 msgid "IKE Policies" msgstr "Políticas de IKE" -#: netbox/netbox/navigation/menu.py:234 +#: netbox/netbox/navigation/menu.py:242 msgid "IPSec Proposals" msgstr "Propuestas de IPSec" -#: netbox/netbox/navigation/menu.py:235 +#: netbox/netbox/navigation/menu.py:243 #: netbox/templates/vpn/ipsecproposal.html:37 msgid "IPSec Policies" msgstr "Políticas IPSec" -#: netbox/netbox/navigation/menu.py:236 netbox/templates/vpn/ikepolicy.html:38 +#: netbox/netbox/navigation/menu.py:244 netbox/templates/vpn/ikepolicy.html:38 #: netbox/templates/vpn/ipsecpolicy.html:25 msgid "IPSec Profiles" msgstr "Perfiles IPSec" -#: netbox/netbox/navigation/menu.py:251 +#: netbox/netbox/navigation/menu.py:259 #: netbox/templates/virtualization/virtualmachine.html:174 #: netbox/templates/virtualization/virtualmachine/base.html:32 #: netbox/templates/virtualization/virtualmachine_list.html:21 -#: netbox/virtualization/tables/virtualmachines.py:104 -#: netbox/virtualization/views.py:386 +#: netbox/virtualization/tables/virtualmachines.py:74 +#: netbox/virtualization/views.py:403 msgid "Virtual Disks" msgstr "Discos virtuales" -#: netbox/netbox/navigation/menu.py:258 +#: netbox/netbox/navigation/menu.py:266 msgid "Cluster Types" msgstr "Tipos de clústeres" -#: netbox/netbox/navigation/menu.py:259 +#: netbox/netbox/navigation/menu.py:267 msgid "Cluster Groups" msgstr "Grupos de clústeres" -#: netbox/netbox/navigation/menu.py:273 +#: netbox/netbox/navigation/menu.py:281 msgid "Circuit Types" msgstr "Tipos de circuitos" -#: netbox/netbox/navigation/menu.py:274 -msgid "Circuit Groups" -msgstr "Grupos de circuitos" - -#: netbox/netbox/navigation/menu.py:275 -#: netbox/templates/circuits/circuit.html:66 -msgid "Group Assignments" -msgstr "Tareas grupales" - -#: netbox/netbox/navigation/menu.py:276 +#: netbox/netbox/navigation/menu.py:282 msgid "Circuit Terminations" msgstr "Terminaciones de circuitos" -#: netbox/netbox/navigation/menu.py:280 netbox/netbox/navigation/menu.py:282 +#: netbox/netbox/navigation/menu.py:286 netbox/netbox/navigation/menu.py:288 +#: netbox/templates/circuits/providernetwork.html:55 +msgid "Virtual Circuits" +msgstr "Circuitos virtuales" + +#: netbox/netbox/navigation/menu.py:289 +msgid "Virtual Circuit Types" +msgstr "Tipos de circuitos virtuales" + +#: netbox/netbox/navigation/menu.py:290 +msgid "Virtual Circuit Terminations" +msgstr "Terminaciones de circuitos virtuales" + +#: netbox/netbox/navigation/menu.py:296 +msgid "Circuit Groups" +msgstr "Grupos de circuitos" + +#: netbox/netbox/navigation/menu.py:297 +#: netbox/templates/circuits/circuit.html:76 +#: netbox/templates/circuits/virtualcircuit.html:69 +msgid "Group Assignments" +msgstr "Tareas grupales" + +#: netbox/netbox/navigation/menu.py:301 netbox/netbox/navigation/menu.py:303 msgid "Providers" msgstr "Proveedores" -#: netbox/netbox/navigation/menu.py:283 +#: netbox/netbox/navigation/menu.py:304 #: netbox/templates/circuits/provider.html:51 msgid "Provider Accounts" msgstr "Cuentas de proveedores" -#: netbox/netbox/navigation/menu.py:284 +#: netbox/netbox/navigation/menu.py:305 msgid "Provider Networks" msgstr "Redes de proveedores" -#: netbox/netbox/navigation/menu.py:298 +#: netbox/netbox/navigation/menu.py:319 msgid "Power Panels" msgstr "Paneles de alimentación" -#: netbox/netbox/navigation/menu.py:309 +#: netbox/netbox/navigation/menu.py:330 msgid "Configurations" msgstr "Configuraciones" -#: netbox/netbox/navigation/menu.py:311 +#: netbox/netbox/navigation/menu.py:332 msgid "Config Contexts" msgstr "Contextos de configuración" -#: netbox/netbox/navigation/menu.py:312 +#: netbox/netbox/navigation/menu.py:333 msgid "Config Templates" msgstr "Plantillas de configuración" -#: netbox/netbox/navigation/menu.py:319 netbox/netbox/navigation/menu.py:323 +#: netbox/netbox/navigation/menu.py:340 netbox/netbox/navigation/menu.py:344 msgid "Customization" msgstr "Personalización" -#: netbox/netbox/navigation/menu.py:325 +#: netbox/netbox/navigation/menu.py:346 #: netbox/templates/dcim/device_edit.html:103 #: netbox/templates/dcim/htmx/cable_edit.html:81 #: netbox/templates/dcim/virtualchassis_add.html:31 @@ -11268,96 +11863,96 @@ msgstr "Personalización" #: netbox/templates/htmx/form.html:19 netbox/templates/inc/filter_list.html:30 #: netbox/templates/inc/panels/custom_fields.html:7 #: netbox/templates/ipam/ipaddress_bulk_add.html:35 -#: netbox/templates/ipam/vlan_edit.html:59 +#: netbox/templates/ipam/vlan_edit.html:67 msgid "Custom Fields" msgstr "Campos personalizados" -#: netbox/netbox/navigation/menu.py:326 +#: netbox/netbox/navigation/menu.py:347 msgid "Custom Field Choices" msgstr "Opciones de campo personalizadas" -#: netbox/netbox/navigation/menu.py:327 +#: netbox/netbox/navigation/menu.py:348 msgid "Custom Links" msgstr "Vínculos personalizados" -#: netbox/netbox/navigation/menu.py:328 +#: netbox/netbox/navigation/menu.py:349 msgid "Export Templates" msgstr "Plantillas de exportación" -#: netbox/netbox/navigation/menu.py:329 +#: netbox/netbox/navigation/menu.py:350 msgid "Saved Filters" msgstr "Filtros guardados" -#: netbox/netbox/navigation/menu.py:331 +#: netbox/netbox/navigation/menu.py:352 msgid "Image Attachments" msgstr "Adjuntos de imágenes" -#: netbox/netbox/navigation/menu.py:349 +#: netbox/netbox/navigation/menu.py:370 msgid "Operations" msgstr "Operaciones" -#: netbox/netbox/navigation/menu.py:353 +#: netbox/netbox/navigation/menu.py:374 msgid "Integrations" msgstr "Integraciones" -#: netbox/netbox/navigation/menu.py:355 +#: netbox/netbox/navigation/menu.py:376 msgid "Data Sources" msgstr "Fuentes de datos" -#: netbox/netbox/navigation/menu.py:356 +#: netbox/netbox/navigation/menu.py:377 msgid "Event Rules" msgstr "Reglas del evento" -#: netbox/netbox/navigation/menu.py:357 +#: netbox/netbox/navigation/menu.py:378 msgid "Webhooks" msgstr "Webhooks" -#: netbox/netbox/navigation/menu.py:361 netbox/netbox/navigation/menu.py:365 -#: netbox/netbox/views/generic/feature_views.py:153 +#: netbox/netbox/navigation/menu.py:382 netbox/netbox/navigation/menu.py:386 +#: netbox/netbox/views/generic/feature_views.py:158 #: netbox/templates/extras/report/base.html:37 #: netbox/templates/extras/script/base.html:36 msgid "Jobs" msgstr "Trabajos" -#: netbox/netbox/navigation/menu.py:371 +#: netbox/netbox/navigation/menu.py:392 msgid "Logging" msgstr "Explotación" -#: netbox/netbox/navigation/menu.py:373 +#: netbox/netbox/navigation/menu.py:394 msgid "Notification Groups" msgstr "Grupos de notificaciones" -#: netbox/netbox/navigation/menu.py:374 +#: netbox/netbox/navigation/menu.py:395 msgid "Journal Entries" msgstr "Entradas del diario" -#: netbox/netbox/navigation/menu.py:375 +#: netbox/netbox/navigation/menu.py:396 #: netbox/templates/core/objectchange.html:9 #: netbox/templates/core/objectchange_list.html:4 msgid "Change Log" msgstr "Registro de cambios" -#: netbox/netbox/navigation/menu.py:382 netbox/templates/inc/user_menu.html:29 +#: netbox/netbox/navigation/menu.py:403 netbox/templates/inc/user_menu.html:29 msgid "Admin" msgstr "Admin" -#: netbox/netbox/navigation/menu.py:430 netbox/templates/account/base.html:27 -#: netbox/templates/inc/user_menu.html:57 +#: netbox/netbox/navigation/menu.py:451 netbox/templates/account/base.html:27 +#: netbox/templates/inc/user_menu.html:52 msgid "API Tokens" msgstr "Tokens de API" -#: netbox/netbox/navigation/menu.py:437 netbox/users/forms/model_forms.py:187 +#: netbox/netbox/navigation/menu.py:458 netbox/users/forms/model_forms.py:187 #: netbox/users/forms/model_forms.py:195 netbox/users/forms/model_forms.py:242 #: netbox/users/forms/model_forms.py:249 msgid "Permissions" msgstr "Permisos" -#: netbox/netbox/navigation/menu.py:445 netbox/netbox/navigation/menu.py:449 +#: netbox/netbox/navigation/menu.py:466 netbox/netbox/navigation/menu.py:470 #: netbox/templates/core/system.html:7 msgid "System" msgstr "Sistema" -#: netbox/netbox/navigation/menu.py:454 netbox/netbox/navigation/menu.py:502 +#: netbox/netbox/navigation/menu.py:475 netbox/netbox/navigation/menu.py:523 #: netbox/templates/500.html:35 netbox/templates/account/preferences.html:22 #: netbox/templates/core/plugin.html:13 #: netbox/templates/core/plugin_list.html:7 @@ -11365,29 +11960,29 @@ msgstr "Sistema" msgid "Plugins" msgstr "Plugins" -#: netbox/netbox/navigation/menu.py:459 +#: netbox/netbox/navigation/menu.py:480 msgid "Configuration History" msgstr "Historial de configuración" -#: netbox/netbox/navigation/menu.py:465 netbox/templates/core/rq_task.html:8 +#: netbox/netbox/navigation/menu.py:486 netbox/templates/core/rq_task.html:8 #: netbox/templates/core/rq_task_list.html:22 msgid "Background Tasks" msgstr "Tareas en segundo plano" -#: netbox/netbox/plugins/navigation.py:47 -#: netbox/netbox/plugins/navigation.py:69 +#: netbox/netbox/plugins/navigation.py:48 +#: netbox/netbox/plugins/navigation.py:70 msgid "Permissions must be passed as a tuple or list." msgstr "Los permisos se deben pasar en forma de tupla o lista." -#: netbox/netbox/plugins/navigation.py:51 +#: netbox/netbox/plugins/navigation.py:52 msgid "Buttons must be passed as a tuple or list." msgstr "Los botones se deben pasar como una tupla o una lista." -#: netbox/netbox/plugins/navigation.py:73 +#: netbox/netbox/plugins/navigation.py:74 msgid "Button color must be a choice within ButtonColorChoices." msgstr "El color del botón debe ser una opción dentro de ButtonColorChoices." -#: netbox/netbox/plugins/registration.py:25 +#: netbox/netbox/plugins/registration.py:26 #, python-brace-format msgid "" "PluginTemplateExtension class {template_extension} was passed as an " @@ -11396,7 +11991,7 @@ msgstr "" "Clase PluginTemplateExtension {template_extension} ¡se aprobó como " "instancia!" -#: netbox/netbox/plugins/registration.py:31 +#: netbox/netbox/plugins/registration.py:32 #, python-brace-format msgid "" "{template_extension} is not a subclass of " @@ -11405,17 +12000,17 @@ msgstr "" "{template_extension} ¡no es una subclase de " "NetBox.Plugins.PluginTemplateExtension!" -#: netbox/netbox/plugins/registration.py:51 +#: netbox/netbox/plugins/registration.py:57 #, python-brace-format msgid "{item} must be an instance of netbox.plugins.PluginMenuItem" msgstr "{item} debe ser una instancia de netbox.plugins.PluginMenuItem" -#: netbox/netbox/plugins/registration.py:62 +#: netbox/netbox/plugins/registration.py:68 #, python-brace-format msgid "{menu_link} must be an instance of netbox.plugins.PluginMenuItem" msgstr "{menu_link} debe ser una instancia de netbox.plugins.PluginMenuItem" -#: netbox/netbox/plugins/registration.py:67 +#: netbox/netbox/plugins/registration.py:73 #, python-brace-format msgid "{button} must be an instance of netbox.plugins.PluginMenuButton" msgstr "{button} debe ser una instancia de netbox.plugins.PluginMenuButton" @@ -11499,93 +12094,93 @@ msgstr "No se pueden agregar tiendas al registro después de la inicialización" msgid "Cannot delete stores from registry" msgstr "No se pueden eliminar las tiendas del registro" -#: netbox/netbox/settings.py:760 +#: netbox/netbox/settings.py:752 msgid "Czech" msgstr "checa" -#: netbox/netbox/settings.py:761 +#: netbox/netbox/settings.py:753 msgid "Danish" msgstr "danés" -#: netbox/netbox/settings.py:762 +#: netbox/netbox/settings.py:754 msgid "German" msgstr "alemán" -#: netbox/netbox/settings.py:763 +#: netbox/netbox/settings.py:755 msgid "English" msgstr "Inglés" -#: netbox/netbox/settings.py:764 +#: netbox/netbox/settings.py:756 msgid "Spanish" msgstr "española" -#: netbox/netbox/settings.py:765 +#: netbox/netbox/settings.py:757 msgid "French" msgstr "francesa" -#: netbox/netbox/settings.py:766 +#: netbox/netbox/settings.py:758 msgid "Italian" msgstr "italiano" -#: netbox/netbox/settings.py:767 +#: netbox/netbox/settings.py:759 msgid "Japanese" msgstr "japonés" -#: netbox/netbox/settings.py:768 +#: netbox/netbox/settings.py:760 msgid "Dutch" msgstr "holandesa" -#: netbox/netbox/settings.py:769 +#: netbox/netbox/settings.py:761 msgid "Polish" msgstr "polaco" -#: netbox/netbox/settings.py:770 +#: netbox/netbox/settings.py:762 msgid "Portuguese" msgstr "portugués" -#: netbox/netbox/settings.py:771 +#: netbox/netbox/settings.py:763 msgid "Russian" msgstr "rusa" -#: netbox/netbox/settings.py:772 +#: netbox/netbox/settings.py:764 msgid "Turkish" msgstr "turca" -#: netbox/netbox/settings.py:773 +#: netbox/netbox/settings.py:765 msgid "Ukrainian" msgstr "ucraniana" -#: netbox/netbox/settings.py:774 +#: netbox/netbox/settings.py:766 msgid "Chinese" msgstr "chino" -#: netbox/netbox/tables/columns.py:176 +#: netbox/netbox/tables/columns.py:177 msgid "Select all" msgstr "Selecciona todo" -#: netbox/netbox/tables/columns.py:189 +#: netbox/netbox/tables/columns.py:190 msgid "Toggle all" msgstr "Alternar todo" -#: netbox/netbox/tables/columns.py:300 +#: netbox/netbox/tables/columns.py:302 msgid "Toggle Dropdown" msgstr "Alternar menú desplegable" -#: netbox/netbox/tables/columns.py:572 netbox/templates/core/job.html:53 +#: netbox/netbox/tables/columns.py:575 netbox/templates/core/job.html:53 msgid "Error" msgstr "Error" -#: netbox/netbox/tables/tables.py:58 +#: netbox/netbox/tables/tables.py:59 #, python-brace-format msgid "No {model_name} found" msgstr "No {model_name} encontrado" -#: netbox/netbox/tables/tables.py:249 +#: netbox/netbox/tables/tables.py:252 #: netbox/templates/generic/bulk_import.html:117 msgid "Field" msgstr "Campo" -#: netbox/netbox/tables/tables.py:252 +#: netbox/netbox/tables/tables.py:255 msgid "Value" msgstr "Valor" @@ -11602,24 +12197,24 @@ msgstr "" "Se ha producido un error al procesar la plantilla de exportación " "seleccionada ({template}): {error}" -#: netbox/netbox/views/generic/bulk_views.py:416 +#: netbox/netbox/views/generic/bulk_views.py:421 #, python-brace-format msgid "Row {i}: Object with ID {id} does not exist" msgstr "Fila {i}: Objeto con ID {id} no existe" -#: netbox/netbox/views/generic/bulk_views.py:709 -#: netbox/netbox/views/generic/bulk_views.py:910 -#: netbox/netbox/views/generic/bulk_views.py:958 +#: netbox/netbox/views/generic/bulk_views.py:708 +#: netbox/netbox/views/generic/bulk_views.py:909 +#: netbox/netbox/views/generic/bulk_views.py:957 #, python-brace-format msgid "No {object_type} were selected." msgstr "No {object_type} fueron seleccionados." -#: netbox/netbox/views/generic/bulk_views.py:788 +#: netbox/netbox/views/generic/bulk_views.py:787 #, python-brace-format msgid "Renamed {count} {object_type}" msgstr "Renombrado {count} {object_type}" -#: netbox/netbox/views/generic/bulk_views.py:888 +#: netbox/netbox/views/generic/bulk_views.py:887 #, python-brace-format msgid "Deleted {count} {object_type}" msgstr "Eliminado {count} {object_type}" @@ -11632,18 +12227,18 @@ msgstr "Registro de cambios" msgid "Journal" msgstr "diario" -#: netbox/netbox/views/generic/feature_views.py:207 +#: netbox/netbox/views/generic/feature_views.py:212 msgid "Unable to synchronize data: No data file set." msgstr "" "No se pueden sincronizar los datos: no hay ningún archivo de datos " "establecido." -#: netbox/netbox/views/generic/feature_views.py:211 +#: netbox/netbox/views/generic/feature_views.py:216 #, python-brace-format msgid "Synchronized data for {object_type} {object}." msgstr "Datos sincronizados para {object_type} {object}." -#: netbox/netbox/views/generic/feature_views.py:236 +#: netbox/netbox/views/generic/feature_views.py:241 #, python-brace-format msgid "Synced {count} {object_type}" msgstr "Sincronizado {count} {object_type}" @@ -11719,9 +12314,9 @@ msgstr "en GitHub" msgid "Home Page" msgstr "Página de inicio" -#: netbox/templates/account/base.html:7 netbox/templates/inc/user_menu.html:45 +#: netbox/templates/account/base.html:7 netbox/templates/inc/user_menu.html:40 #: netbox/vpn/forms/bulk_edit.py:255 netbox/vpn/forms/filtersets.py:189 -#: netbox/vpn/forms/model_forms.py:379 +#: netbox/vpn/forms/model_forms.py:382 msgid "Profile" msgstr "Perfil" @@ -11733,12 +12328,12 @@ msgstr "Notificaciones" #: netbox/templates/account/base.html:16 #: netbox/templates/account/subscriptions.html:7 -#: netbox/templates/inc/user_menu.html:51 +#: netbox/templates/inc/user_menu.html:46 msgid "Subscriptions" msgstr "Suscripciones" #: netbox/templates/account/base.html:19 -#: netbox/templates/inc/user_menu.html:54 +#: netbox/templates/inc/user_menu.html:49 msgid "Preferences" msgstr "Preferencias" @@ -11766,6 +12361,7 @@ msgstr "Cambiar contraseña" #: netbox/templates/generic/object_edit.html:72 #: netbox/templates/htmx/delete_form.html:53 #: netbox/templates/htmx/delete_form.html:55 +#: netbox/templates/htmx/quick_add.html:21 #: netbox/templates/ipam/ipaddress_assign.html:28 #: netbox/templates/virtualization/cluster_add_devices.html:30 msgid "Cancel" @@ -11864,7 +12460,7 @@ msgstr "Grupos asignados" #: netbox/templates/core/objectchange.html:142 #: netbox/templates/dcim/devicebay.html:59 #: netbox/templates/dcim/inc/panels/inventory_items.html:45 -#: netbox/templates/dcim/interface.html:296 +#: netbox/templates/dcim/interface.html:353 #: netbox/templates/dcim/modulebay.html:80 #: netbox/templates/extras/configcontext.html:70 #: netbox/templates/extras/eventrule.html:66 @@ -11873,6 +12469,7 @@ msgstr "Grupos asignados" #: netbox/templates/extras/webhook.html:75 #: netbox/templates/inc/panel_table.html:13 #: netbox/templates/inc/panels/comments.html:10 +#: netbox/templates/inc/panels/related_objects.html:23 #: netbox/templates/ipam/inc/panels/fhrp_groups.html:56 #: netbox/templates/users/group.html:34 netbox/templates/users/group.html:44 #: netbox/templates/users/objectpermission.html:77 @@ -11910,7 +12507,7 @@ msgstr "Utilizado por última vez" msgid "Add a Token" msgstr "Añadir un token" -#: netbox/templates/base/base.html:22 netbox/templates/home.html:27 +#: netbox/templates/base/base.html:23 netbox/templates/home.html:27 msgid "Home" msgstr "Inicio" @@ -11952,15 +12549,16 @@ msgstr "Código fuente" msgid "Community" msgstr "Comunidad" -#: netbox/templates/circuits/circuit.html:47 +#: netbox/templates/circuits/circuit.html:57 msgid "Install Date" msgstr "Fecha de instalación" -#: netbox/templates/circuits/circuit.html:51 +#: netbox/templates/circuits/circuit.html:61 msgid "Termination Date" msgstr "Fecha de terminación" -#: netbox/templates/circuits/circuit.html:70 +#: netbox/templates/circuits/circuit.html:80 +#: netbox/templates/circuits/virtualcircuit.html:73 #: netbox/templates/ipam/inc/panels/fhrp_groups.html:15 msgid "Assign Group" msgstr "Asignar grupo" @@ -12008,7 +12606,7 @@ msgid "Add" msgstr "Añadir" #: netbox/templates/circuits/inc/circuit_termination.html:15 -#: netbox/templates/circuits/inc/circuit_termination_fields.html:36 +#: netbox/templates/circuits/inc/circuit_termination_fields.html:37 #: netbox/templates/dcim/inc/panels/inventory_items.html:32 #: netbox/templates/dcim/powerpanel.html:56 #: netbox/templates/extras/script_list.html:30 @@ -12023,35 +12621,39 @@ msgstr "Editar" msgid "Swap" msgstr "Intercambiar" -#: netbox/templates/circuits/inc/circuit_termination_fields.html:19 +#: netbox/templates/circuits/inc/circuit_termination_fields.html:5 +msgid "Termination point" +msgstr "Punto de terminación" + +#: netbox/templates/circuits/inc/circuit_termination_fields.html:20 #: netbox/templates/dcim/consoleport.html:59 #: netbox/templates/dcim/consoleserverport.html:60 #: netbox/templates/dcim/powerfeed.html:114 msgid "Marked as connected" msgstr "Marcado como conectado" -#: netbox/templates/circuits/inc/circuit_termination_fields.html:21 +#: netbox/templates/circuits/inc/circuit_termination_fields.html:22 msgid "to" msgstr "a" -#: netbox/templates/circuits/inc/circuit_termination_fields.html:31 #: netbox/templates/circuits/inc/circuit_termination_fields.html:32 +#: netbox/templates/circuits/inc/circuit_termination_fields.html:33 #: netbox/templates/dcim/frontport.html:80 #: netbox/templates/dcim/inc/connection_endpoints.html:7 -#: netbox/templates/dcim/interface.html:154 +#: netbox/templates/dcim/interface.html:211 #: netbox/templates/dcim/rearport.html:76 msgid "Trace" msgstr "Rastrear" -#: netbox/templates/circuits/inc/circuit_termination_fields.html:35 +#: netbox/templates/circuits/inc/circuit_termination_fields.html:36 msgid "Edit cable" msgstr "Editar cable" -#: netbox/templates/circuits/inc/circuit_termination_fields.html:40 +#: netbox/templates/circuits/inc/circuit_termination_fields.html:41 msgid "Remove cable" msgstr "Quitar el cable" -#: netbox/templates/circuits/inc/circuit_termination_fields.html:41 +#: netbox/templates/circuits/inc/circuit_termination_fields.html:42 #: netbox/templates/dcim/bulk_disconnect.html:5 #: netbox/templates/dcim/device/consoleports.html:12 #: netbox/templates/dcim/device/consoleserverports.html:12 @@ -12064,33 +12666,33 @@ msgstr "Quitar el cable" msgid "Disconnect" msgstr "Desconectar" -#: netbox/templates/circuits/inc/circuit_termination_fields.html:48 +#: netbox/templates/circuits/inc/circuit_termination_fields.html:49 #: netbox/templates/dcim/consoleport.html:69 #: netbox/templates/dcim/consoleserverport.html:70 #: netbox/templates/dcim/frontport.html:102 -#: netbox/templates/dcim/interface.html:180 -#: netbox/templates/dcim/interface.html:200 +#: netbox/templates/dcim/interface.html:237 +#: netbox/templates/dcim/interface.html:257 #: netbox/templates/dcim/powerfeed.html:127 -#: netbox/templates/dcim/poweroutlet.html:71 -#: netbox/templates/dcim/poweroutlet.html:72 +#: netbox/templates/dcim/poweroutlet.html:81 +#: netbox/templates/dcim/poweroutlet.html:82 #: netbox/templates/dcim/powerport.html:73 #: netbox/templates/dcim/rearport.html:98 msgid "Connect" msgstr "Conectar" -#: netbox/templates/circuits/inc/circuit_termination_fields.html:70 +#: netbox/templates/circuits/inc/circuit_termination_fields.html:65 msgid "Downstream" msgstr "Río abajo" -#: netbox/templates/circuits/inc/circuit_termination_fields.html:71 +#: netbox/templates/circuits/inc/circuit_termination_fields.html:66 msgid "Upstream" msgstr "Aguas arriba" -#: netbox/templates/circuits/inc/circuit_termination_fields.html:80 +#: netbox/templates/circuits/inc/circuit_termination_fields.html:75 msgid "Cross-Connect" msgstr "Conexión cruzada" -#: netbox/templates/circuits/inc/circuit_termination_fields.html:84 +#: netbox/templates/circuits/inc/circuit_termination_fields.html:79 msgid "Patch Panel/Port" msgstr "Panel de conexión/puerto" @@ -12102,6 +12704,27 @@ msgstr "Añadir circuito" msgid "Provider Account" msgstr "Cuenta de proveedor" +#: netbox/templates/circuits/providernetwork.html:59 +msgid "Add a Virtual Circuit" +msgstr "Agregar un circuito virtual" + +#: netbox/templates/circuits/virtualcircuit.html:91 +#: netbox/templates/vpn/tunnel.html:9 +msgid "Add Termination" +msgstr "Agregar terminación" + +#: netbox/templates/circuits/virtualcircuittermination.html:23 +msgid "Virtual Circuit Termination" +msgstr "Terminación de circuito virtual" + +#: netbox/templates/circuits/virtualcircuittype.html:10 +msgid "Add Virtual Circuit" +msgstr "Agregar circuito virtual" + +#: netbox/templates/circuits/virtualcircuittype.html:19 +msgid "Virtual Circuit Type" +msgstr "Tipo de circuito virtual" + #: netbox/templates/core/configrevision.html:35 msgid "Configuration Data" msgstr "Datos de configuración" @@ -12135,7 +12758,7 @@ msgstr "Cambiado" #: netbox/templates/core/datafile.html:42 #: netbox/templates/ipam/iprange.html:25 #: netbox/templates/virtualization/virtualdisk.html:29 -#: netbox/virtualization/tables/virtualmachines.py:198 +#: netbox/virtualization/tables/virtualmachines.py:169 msgid "Size" msgstr "Tamaño" @@ -12580,8 +13203,8 @@ msgstr "Cambiar nombre seleccionado" #: netbox/templates/dcim/consoleport.html:65 #: netbox/templates/dcim/consoleserverport.html:66 #: netbox/templates/dcim/frontport.html:98 -#: netbox/templates/dcim/interface.html:176 -#: netbox/templates/dcim/poweroutlet.html:69 +#: netbox/templates/dcim/interface.html:233 +#: netbox/templates/dcim/poweroutlet.html:79 #: netbox/templates/dcim/powerport.html:69 msgid "Not Connected" msgstr "No conectado" @@ -12604,7 +13227,7 @@ msgid "Map" msgstr "Mapa" #: netbox/templates/dcim/device.html:108 -#: netbox/templates/dcim/inventoryitem.html:56 +#: netbox/templates/dcim/inventoryitem.html:60 #: netbox/templates/dcim/module.html:81 #: netbox/templates/dcim/modulebay.html:74 netbox/templates/dcim/rack.html:61 msgid "Asset Tag" @@ -12620,7 +13243,7 @@ msgstr "Crear VDC" #: netbox/templates/dcim/device.html:175 #: netbox/templates/dcim/device_edit.html:64 -#: netbox/virtualization/forms/model_forms.py:223 +#: netbox/virtualization/forms/model_forms.py:230 msgid "Management" msgstr "Administración" @@ -12737,35 +13360,6 @@ msgstr "Agregar puerto de alimentación" msgid "Add Rear Ports" msgstr "Agregar puertos traseros" -#: netbox/templates/dcim/device/render_config.html:5 -#: netbox/templates/virtualization/virtualmachine/render_config.html:5 -msgid "Config" -msgstr "Configuración" - -#: netbox/templates/dcim/device/render_config.html:35 -#: netbox/templates/virtualization/virtualmachine/render_config.html:35 -msgid "Context Data" -msgstr "Datos de contexto" - -#: netbox/templates/dcim/device/render_config.html:55 -#: netbox/templates/virtualization/virtualmachine/render_config.html:55 -msgid "Rendered Config" -msgstr "Configuración renderizada" - -#: netbox/templates/dcim/device/render_config.html:57 -#: netbox/templates/virtualization/virtualmachine/render_config.html:57 -msgid "Download" -msgstr "Descargar" - -#: netbox/templates/dcim/device/render_config.html:64 -#: netbox/templates/virtualization/virtualmachine/render_config.html:64 -msgid "Error rendering template" -msgstr "Error al renderizar la plantilla" - -#: netbox/templates/dcim/device/render_config.html:70 -msgid "No configuration template has been assigned for this device." -msgstr "" - #: netbox/templates/dcim/device_edit.html:44 msgid "Parent Bay" msgstr "Bahía para padres" @@ -12832,12 +13426,12 @@ msgid "VM Role" msgstr "Función de máquina virtual" #: netbox/templates/dcim/devicetype.html:18 -#: netbox/templates/dcim/moduletype.html:29 +#: netbox/templates/dcim/moduletype.html:31 msgid "Model Name" msgstr "Nombre del modelo" #: netbox/templates/dcim/devicetype.html:25 -#: netbox/templates/dcim/moduletype.html:33 +#: netbox/templates/dcim/moduletype.html:35 msgid "Part Number" msgstr "Número de pieza" @@ -12862,8 +13456,8 @@ msgid "Rear Port Position" msgstr "Posición del puerto trasero" #: netbox/templates/dcim/frontport.html:72 -#: netbox/templates/dcim/interface.html:144 -#: netbox/templates/dcim/poweroutlet.html:63 +#: netbox/templates/dcim/interface.html:201 +#: netbox/templates/dcim/poweroutlet.html:73 #: netbox/templates/dcim/powerport.html:63 #: netbox/templates/dcim/rearport.html:68 msgid "Marked as Connected" @@ -12963,77 +13557,79 @@ msgid "PoE Type" msgstr "Tipo de PoE" #: netbox/templates/dcim/interface.html:81 -#: netbox/templates/virtualization/vminterface.html:63 +#: netbox/templates/virtualization/vminterface.html:55 +#: netbox/virtualization/forms/model_forms.py:395 msgid "802.1Q Mode" msgstr "Modo 802.1Q" -#: netbox/templates/dcim/interface.html:125 -#: netbox/templates/virtualization/vminterface.html:59 -msgid "MAC Address" -msgstr "Dirección MAC" +#: netbox/templates/dcim/interface.html:156 +#: netbox/templates/virtualization/vminterface.html:88 +msgid "VLAN Translation" +msgstr "Traducción de VLAN" -#: netbox/templates/dcim/interface.html:151 +#: netbox/templates/dcim/interface.html:208 msgid "Wireless Link" msgstr "Enlace inalámbrico" -#: netbox/templates/dcim/interface.html:218 netbox/vpn/choices.py:63 -msgid "Peer" -msgstr "Par" - -#: netbox/templates/dcim/interface.html:230 +#: netbox/templates/dcim/interface.html:287 #: netbox/templates/wireless/inc/wirelesslink_interface.html:26 msgid "Channel" msgstr "Canal" -#: netbox/templates/dcim/interface.html:239 +#: netbox/templates/dcim/interface.html:296 #: netbox/templates/wireless/inc/wirelesslink_interface.html:32 msgid "Channel Frequency" msgstr "Frecuencia de canal" -#: netbox/templates/dcim/interface.html:242 -#: netbox/templates/dcim/interface.html:250 -#: netbox/templates/dcim/interface.html:261 -#: netbox/templates/dcim/interface.html:269 +#: netbox/templates/dcim/interface.html:299 +#: netbox/templates/dcim/interface.html:307 +#: netbox/templates/dcim/interface.html:318 +#: netbox/templates/dcim/interface.html:326 msgid "MHz" msgstr "megahercio" -#: netbox/templates/dcim/interface.html:258 +#: netbox/templates/dcim/interface.html:315 #: netbox/templates/wireless/inc/wirelesslink_interface.html:42 msgid "Channel Width" msgstr "Ancho de canal" -#: netbox/templates/dcim/interface.html:285 +#: netbox/templates/dcim/interface.html:342 #: netbox/templates/wireless/wirelesslan.html:14 #: netbox/templates/wireless/wirelesslink.html:21 -#: netbox/wireless/forms/bulk_edit.py:60 -#: netbox/wireless/forms/bulk_edit.py:102 -#: netbox/wireless/forms/filtersets.py:40 -#: netbox/wireless/forms/filtersets.py:80 netbox/wireless/models.py:82 -#: netbox/wireless/models.py:156 netbox/wireless/tables/wirelesslan.py:44 +#: netbox/wireless/forms/bulk_edit.py:62 +#: netbox/wireless/forms/bulk_edit.py:105 +#: netbox/wireless/forms/filtersets.py:43 +#: netbox/wireless/forms/filtersets.py:108 netbox/wireless/models.py:82 +#: netbox/wireless/models.py:153 netbox/wireless/tables/wirelesslan.py:44 msgid "SSID" msgstr "SSID" -#: netbox/templates/dcim/interface.html:305 +#: netbox/templates/dcim/interface.html:362 msgid "LAG Members" msgstr "Miembros del LAG" -#: netbox/templates/dcim/interface.html:323 +#: netbox/templates/dcim/interface.html:380 msgid "No member interfaces" msgstr "Sin interfaces de miembros" -#: netbox/templates/dcim/interface.html:343 +#: netbox/templates/dcim/interface.html:400 #: netbox/templates/ipam/fhrpgroup.html:73 #: netbox/templates/ipam/iprange/ip_addresses.html:7 #: netbox/templates/ipam/prefix/ip_addresses.html:7 -#: netbox/templates/virtualization/vminterface.html:89 +#: netbox/templates/virtualization/vminterface.html:105 msgid "Add IP Address" msgstr "Agregar dirección IP" +#: netbox/templates/dcim/interface.html:417 +#: netbox/templates/virtualization/vminterface.html:123 +msgid "Add MAC Address" +msgstr "Agregar dirección MAC" + #: netbox/templates/dcim/inventoryitem.html:24 msgid "Parent Item" msgstr "Artículo principal" -#: netbox/templates/dcim/inventoryitem.html:48 +#: netbox/templates/dcim/inventoryitem.html:52 msgid "Part ID" msgstr "ID de pieza" @@ -13053,6 +13649,10 @@ msgstr "Agregar una ubicación" msgid "Add a Device" msgstr "Agregar un dispositivo" +#: netbox/templates/dcim/macaddress.html:36 +msgid "Primary for interface" +msgstr "Principal para la interfaz" + #: netbox/templates/dcim/manufacturer.html:16 msgid "Add Device Type" msgstr "Agregar tipo de dispositivo" @@ -13083,7 +13683,7 @@ msgctxt "Abbreviation for amperes" msgid "A" msgstr "UN" -#: netbox/templates/dcim/poweroutlet.html:48 +#: netbox/templates/dcim/poweroutlet.html:58 msgid "Feed Leg" msgstr "Pierna de alimentación" @@ -13516,11 +14116,19 @@ msgstr "No se puede cargar el contenido. Nombre de vista no válido" msgid "No content found" msgstr "No se ha encontrado contenido" -#: netbox/templates/extras/dashboard/widgets/rssfeed.html:18 +#: netbox/templates/extras/dashboard/widgets/rssfeed.html:17 +msgid "" +"This RSS feed requires an external connection. Check the ISOLATED_DEPLOYMENT" +" setting." +msgstr "" +"Esta fuente RSS requiere una conexión externa. Compruebe la configuración " +"ISOLATED_DEPLOYMENT." + +#: netbox/templates/extras/dashboard/widgets/rssfeed.html:22 msgid "There was a problem fetching the RSS feed" msgstr "Se ha producido un problema al obtener la fuente RSS" -#: netbox/templates/extras/dashboard/widgets/rssfeed.html:21 +#: netbox/templates/extras/dashboard/widgets/rssfeed.html:25 msgid "HTTP" msgstr "HTTP" @@ -13591,6 +14199,30 @@ msgstr "Contextos de origen" msgid "New Journal Entry" msgstr "Nueva entrada de diario" +#: netbox/templates/extras/object_render_config.html:6 +msgid "Config" +msgstr "Configuración" + +#: netbox/templates/extras/object_render_config.html:36 +msgid "Context Data" +msgstr "Datos de contexto" + +#: netbox/templates/extras/object_render_config.html:56 +msgid "Rendered Config" +msgstr "Configuración renderizada" + +#: netbox/templates/extras/object_render_config.html:58 +msgid "Download" +msgstr "Descargar" + +#: netbox/templates/extras/object_render_config.html:65 +msgid "Error rendering template" +msgstr "Error al renderizar la plantilla" + +#: netbox/templates/extras/object_render_config.html:71 +msgid "No configuration template has been assigned." +msgstr "No se ha asignado ninguna plantilla de configuración." + #: netbox/templates/extras/report/base.html:30 msgid "Report" msgstr "Informe" @@ -13678,7 +14310,7 @@ msgstr "Cualquier" msgid "Tagged Item Types" msgstr "Tipos de artículos etiquetados" -#: netbox/templates/extras/tag.html:81 +#: netbox/templates/extras/tag.html:82 msgid "Tagged Objects" msgstr "Objetos etiquetados" @@ -13961,6 +14593,21 @@ msgstr "Todas las notificaciones" msgid "Select" msgstr "Seleccione" +#: netbox/templates/htmx/quick_add.html:7 +msgid "Quick Add" +msgstr "Agregar rápidamente" + +#: netbox/templates/htmx/quick_add_created.html:18 +#, python-format +msgid "" +"\n" +" Created %(object_type)s %(object)s\n" +" " +msgstr "" +"\n" +" Creado %(object_type)s %(object)s\n" +" " + #: netbox/templates/inc/filter_list.html:43 #: netbox/utilities/templates/helpers/table_config_form.html:39 msgid "Reset" @@ -14032,15 +14679,11 @@ msgstr "Pedido claro" msgid "Help center" msgstr "Centro de ayuda" -#: netbox/templates/inc/user_menu.html:41 -msgid "Django Admin" -msgstr "" - -#: netbox/templates/inc/user_menu.html:61 +#: netbox/templates/inc/user_menu.html:56 msgid "Log Out" msgstr "Cerrar sesión" -#: netbox/templates/inc/user_menu.html:68 netbox/templates/login.html:38 +#: netbox/templates/inc/user_menu.html:63 netbox/templates/login.html:38 msgid "Log In" msgstr "Iniciar sesión" @@ -14137,43 +14780,43 @@ msgstr "Dirección inicial" msgid "Ending Address" msgstr "Dirección final" -#: netbox/templates/ipam/iprange.html:33 netbox/templates/ipam/prefix.html:110 +#: netbox/templates/ipam/iprange.html:33 netbox/templates/ipam/prefix.html:106 msgid "Marked fully utilized" msgstr "Marcado como totalmente utilizado" -#: netbox/templates/ipam/prefix.html:99 +#: netbox/templates/ipam/prefix.html:95 msgid "Addressing Details" msgstr "Detalles de direccionamiento" -#: netbox/templates/ipam/prefix.html:118 +#: netbox/templates/ipam/prefix.html:114 msgid "Child IPs" msgstr "IP para niños" -#: netbox/templates/ipam/prefix.html:126 +#: netbox/templates/ipam/prefix.html:122 msgid "Available IPs" msgstr "IPs disponibles" -#: netbox/templates/ipam/prefix.html:138 +#: netbox/templates/ipam/prefix.html:134 msgid "First available IP" msgstr "Primera IP disponible" -#: netbox/templates/ipam/prefix.html:179 +#: netbox/templates/ipam/prefix.html:175 msgid "Prefix Details" msgstr "Detalles del prefijo" -#: netbox/templates/ipam/prefix.html:185 +#: netbox/templates/ipam/prefix.html:181 msgid "Network Address" msgstr "Dirección de red" -#: netbox/templates/ipam/prefix.html:189 +#: netbox/templates/ipam/prefix.html:185 msgid "Network Mask" msgstr "Máscara de red" -#: netbox/templates/ipam/prefix.html:193 +#: netbox/templates/ipam/prefix.html:189 msgid "Wildcard Mask" msgstr "Máscara Wildcard" -#: netbox/templates/ipam/prefix.html:197 +#: netbox/templates/ipam/prefix.html:193 msgid "Broadcast Address" msgstr "Dirección de transmisión" @@ -14213,14 +14856,30 @@ msgstr "Importación de VPNs L2" msgid "Exporting L2VPNs" msgstr "Exportación de VPNs L2" -#: netbox/templates/ipam/vlan.html:88 +#: netbox/templates/ipam/vlan.html:66 +msgid "Q-in-Q Role" +msgstr "Función de Q-in-Q" + +#: netbox/templates/ipam/vlan.html:104 msgid "Add a Prefix" msgstr "Agregar un prefijo" +#: netbox/templates/ipam/vlan.html:114 +msgid "Customer VLANs" +msgstr "VLAN de clientes" + +#: netbox/templates/ipam/vlan.html:118 +msgid "Add a VLAN" +msgstr "Agregar una VLAN" + #: netbox/templates/ipam/vlangroup.html:18 msgid "Add VLAN" msgstr "Agregar VLAN" +#: netbox/templates/ipam/vlantranslationpolicy.html:51 +msgid "Add Rule" +msgstr "Agregar regla" + #: netbox/templates/ipam/vrf.html:16 msgid "Route Distinguisher" msgstr "Distinguidor de rutas" @@ -14299,7 +14958,7 @@ msgstr "" #: netbox/templates/tenancy/contact.html:18 netbox/tenancy/filtersets.py:147 #: netbox/tenancy/forms/bulk_edit.py:137 -#: netbox/tenancy/forms/filtersets.py:102 netbox/tenancy/forms/forms.py:56 +#: netbox/tenancy/forms/filtersets.py:102 netbox/tenancy/forms/forms.py:57 #: netbox/tenancy/forms/model_forms.py:106 #: netbox/tenancy/forms/model_forms.py:130 #: netbox/tenancy/tables/contacts.py:98 @@ -14317,7 +14976,7 @@ msgid "Phone" msgstr "Teléfono" #: netbox/templates/tenancy/contactgroup.html:18 -#: netbox/tenancy/forms/forms.py:66 netbox/tenancy/forms/model_forms.py:75 +#: netbox/tenancy/forms/forms.py:67 netbox/tenancy/forms/model_forms.py:75 msgid "Contact Group" msgstr "Grupo de contacto" @@ -14326,7 +14985,7 @@ msgid "Add Contact Group" msgstr "Agregar grupo de contactos" #: netbox/templates/tenancy/contactrole.html:15 -#: netbox/tenancy/filtersets.py:152 netbox/tenancy/forms/forms.py:61 +#: netbox/tenancy/filtersets.py:152 netbox/tenancy/forms/forms.py:62 #: netbox/tenancy/forms/model_forms.py:87 msgid "Contact Role" msgstr "Función de contacto" @@ -14340,8 +14999,8 @@ msgid "Add Tenant" msgstr "Agregar inquilino" #: netbox/templates/tenancy/tenantgroup.html:26 -#: netbox/tenancy/forms/model_forms.py:32 netbox/tenancy/tables/columns.py:51 -#: netbox/tenancy/tables/columns.py:61 +#: netbox/tenancy/forms/model_forms.py:32 netbox/tenancy/tables/columns.py:36 +#: netbox/tenancy/tables/columns.py:46 msgid "Tenant Group" msgstr "Grupo de inquilinos" @@ -14372,21 +15031,21 @@ msgstr "Restricciones" msgid "Assigned Users" msgstr "Usuarios asignados" -#: netbox/templates/virtualization/cluster.html:52 +#: netbox/templates/virtualization/cluster.html:56 msgid "Allocated Resources" msgstr "Recursos asignados" -#: netbox/templates/virtualization/cluster.html:55 +#: netbox/templates/virtualization/cluster.html:59 #: netbox/templates/virtualization/virtualmachine.html:125 msgid "Virtual CPUs" msgstr "CPUs virtuales" -#: netbox/templates/virtualization/cluster.html:59 +#: netbox/templates/virtualization/cluster.html:63 #: netbox/templates/virtualization/virtualmachine.html:129 msgid "Memory" msgstr "Memoria" -#: netbox/templates/virtualization/cluster.html:69 +#: netbox/templates/virtualization/cluster.html:73 #: netbox/templates/virtualization/virtualmachine.html:140 msgid "Disk Space" msgstr "Espacio en disco" @@ -14422,13 +15081,13 @@ msgid "Add Cluster" msgstr "Agregar clúster" #: netbox/templates/virtualization/clustergroup.html:19 -#: netbox/virtualization/forms/model_forms.py:50 +#: netbox/virtualization/forms/model_forms.py:53 msgid "Cluster Group" msgstr "Grupo de clústeres" #: netbox/templates/virtualization/clustertype.html:19 #: netbox/templates/virtualization/virtualmachine.html:110 -#: netbox/virtualization/forms/model_forms.py:36 +#: netbox/virtualization/forms/model_forms.py:39 msgid "Cluster Type" msgstr "Tipo de clúster" @@ -14437,8 +15096,8 @@ msgid "Virtual Disk" msgstr "Disco virtual" #: netbox/templates/virtualization/virtualmachine.html:122 -#: netbox/virtualization/forms/bulk_edit.py:190 -#: netbox/virtualization/forms/model_forms.py:224 +#: netbox/virtualization/forms/bulk_edit.py:172 +#: netbox/virtualization/forms/model_forms.py:231 msgid "Resources" msgstr "Recursos" @@ -14446,10 +15105,6 @@ msgstr "Recursos" msgid "Add Virtual Disk" msgstr "Agregar disco virtual" -#: netbox/templates/virtualization/virtualmachine/render_config.html:70 -msgid "No configuration template has been assigned for this virtual machine." -msgstr "" - #: netbox/templates/vpn/ikepolicy.html:10 #: netbox/templates/vpn/ipsecprofile.html:33 netbox/vpn/tables/crypto.py:166 msgid "IKE Policy" @@ -14472,7 +15127,7 @@ msgstr "Mostrar secreto" #: netbox/templates/vpn/ipsecpolicy.html:45 #: netbox/templates/vpn/ipsecprofile.html:52 #: netbox/templates/vpn/ipsecprofile.html:77 -#: netbox/vpn/forms/model_forms.py:316 netbox/vpn/forms/model_forms.py:352 +#: netbox/vpn/forms/model_forms.py:317 netbox/vpn/forms/model_forms.py:354 #: netbox/vpn/tables/crypto.py:68 netbox/vpn/tables/crypto.py:134 msgid "Proposals" msgstr "Propuestas" @@ -14518,12 +15173,12 @@ msgid "IPSec Policy" msgstr "Política IPSec" #: netbox/templates/vpn/ipsecpolicy.html:21 netbox/vpn/forms/bulk_edit.py:210 -#: netbox/vpn/models/crypto.py:193 +#: netbox/vpn/models/crypto.py:191 msgid "PFS group" msgstr "Grupo PFS" #: netbox/templates/vpn/ipsecprofile.html:10 -#: netbox/vpn/forms/model_forms.py:54 +#: netbox/vpn/forms/model_forms.py:55 msgid "IPSec Profile" msgstr "Perfil IPSec" @@ -14549,10 +15204,6 @@ msgstr "Atributos de L2VPN" msgid "Add a Termination" msgstr "Agregar una terminación" -#: netbox/templates/vpn/tunnel.html:9 -msgid "Add Termination" -msgstr "Agregar terminación" - #: netbox/templates/vpn/tunnel.html:37 netbox/vpn/forms/bulk_edit.py:49 #: netbox/vpn/forms/bulk_import.py:48 netbox/vpn/forms/filtersets.py:57 msgid "Encapsulation" @@ -14560,7 +15211,7 @@ msgstr "Encapsulación" #: netbox/templates/vpn/tunnel.html:41 netbox/vpn/forms/bulk_edit.py:55 #: netbox/vpn/forms/bulk_import.py:53 netbox/vpn/forms/filtersets.py:64 -#: netbox/vpn/models/crypto.py:250 netbox/vpn/tables/tunnels.py:51 +#: netbox/vpn/models/crypto.py:246 netbox/vpn/tables/tunnels.py:51 msgid "IPSec profile" msgstr "Perfil IPSec" @@ -14583,8 +15234,8 @@ msgid "Tunnel Termination" msgstr "Terminación del túnel" #: netbox/templates/vpn/tunneltermination.html:35 -#: netbox/vpn/forms/bulk_import.py:107 netbox/vpn/forms/model_forms.py:102 -#: netbox/vpn/forms/model_forms.py:138 netbox/vpn/forms/model_forms.py:247 +#: netbox/vpn/forms/bulk_import.py:107 netbox/vpn/forms/model_forms.py:103 +#: netbox/vpn/forms/model_forms.py:139 netbox/vpn/forms/model_forms.py:248 #: netbox/vpn/tables/tunnels.py:101 msgid "Outside IP" msgstr "IP externa" @@ -14607,7 +15258,7 @@ msgctxt "Abbreviation for megahertz" msgid "MHz" msgstr "megahercio" -#: netbox/templates/wireless/wirelesslan.html:57 +#: netbox/templates/wireless/wirelesslan.html:65 msgid "Attached Interfaces" msgstr "Interfaces conectadas" @@ -14616,7 +15267,7 @@ msgid "Add Wireless LAN" msgstr "Agregar LAN inalámbrica" #: netbox/templates/wireless/wirelesslangroup.html:26 -#: netbox/wireless/forms/model_forms.py:28 +#: netbox/wireless/forms/model_forms.py:29 msgid "Wireless LAN Group" msgstr "Grupo de LAN inalámbrica" @@ -14628,13 +15279,6 @@ msgstr "Agregar grupo de LAN inalámbrica" msgid "Link Properties" msgstr "Propiedades del enlace" -#: netbox/templates/wireless/wirelesslink.html:38 -#: netbox/wireless/forms/bulk_edit.py:129 -#: netbox/wireless/forms/filtersets.py:102 -#: netbox/wireless/forms/model_forms.py:165 -msgid "Distance" -msgstr "Distancia" - #: netbox/tenancy/filtersets.py:28 msgid "Parent contact group (ID)" msgstr "Grupo de contacto de padres (ID)" @@ -14705,47 +15349,47 @@ msgstr "grupo de contacto" msgid "contact groups" msgstr "grupos de contacto" -#: netbox/tenancy/models/contacts.py:48 +#: netbox/tenancy/models/contacts.py:42 msgid "contact role" msgstr "rol de contacto" -#: netbox/tenancy/models/contacts.py:49 +#: netbox/tenancy/models/contacts.py:43 msgid "contact roles" msgstr "roles de contacto" -#: netbox/tenancy/models/contacts.py:68 +#: netbox/tenancy/models/contacts.py:63 msgid "title" msgstr "título" -#: netbox/tenancy/models/contacts.py:73 +#: netbox/tenancy/models/contacts.py:68 msgid "phone" msgstr "llamar por teléfono" -#: netbox/tenancy/models/contacts.py:78 +#: netbox/tenancy/models/contacts.py:73 msgid "email" msgstr "correo electrónico" -#: netbox/tenancy/models/contacts.py:87 +#: netbox/tenancy/models/contacts.py:82 msgid "link" msgstr "eslabón" -#: netbox/tenancy/models/contacts.py:103 +#: netbox/tenancy/models/contacts.py:98 msgid "contact" msgstr "contacto" -#: netbox/tenancy/models/contacts.py:104 +#: netbox/tenancy/models/contacts.py:99 msgid "contacts" msgstr "contactos" -#: netbox/tenancy/models/contacts.py:153 +#: netbox/tenancy/models/contacts.py:146 msgid "contact assignment" msgstr "asignación de contactos" -#: netbox/tenancy/models/contacts.py:154 +#: netbox/tenancy/models/contacts.py:147 msgid "contact assignments" msgstr "asignaciones de contactos" -#: netbox/tenancy/models/contacts.py:170 +#: netbox/tenancy/models/contacts.py:163 #, python-brace-format msgid "Contacts cannot be assigned to this object type ({type})." msgstr "No se pueden asignar contactos a este tipo de objeto ({type})." @@ -14758,19 +15402,19 @@ msgstr "grupo de inquilinos" msgid "tenant groups" msgstr "grupos de inquilinos" -#: netbox/tenancy/models/tenants.py:70 +#: netbox/tenancy/models/tenants.py:68 msgid "Tenant name must be unique per group." msgstr "El nombre del inquilino debe ser único por grupo." -#: netbox/tenancy/models/tenants.py:80 +#: netbox/tenancy/models/tenants.py:78 msgid "Tenant slug must be unique per group." msgstr "La babosa del inquilino debe ser única por grupo." -#: netbox/tenancy/models/tenants.py:88 +#: netbox/tenancy/models/tenants.py:86 msgid "tenant" msgstr "inquilino" -#: netbox/tenancy/models/tenants.py:89 +#: netbox/tenancy/models/tenants.py:87 msgid "tenants" msgstr "inquilinos" @@ -15001,7 +15645,7 @@ msgstr "simbólico" msgid "tokens" msgstr "fichas" -#: netbox/users/models/users.py:57 netbox/vpn/models/crypto.py:42 +#: netbox/users/models/users.py:57 netbox/vpn/models/crypto.py:43 msgid "group" msgstr "grupo" @@ -15051,26 +15695,26 @@ msgstr "" msgid "{name} has a key defined but CHOICES is not a list" msgstr "{name} tiene una clave definida, pero CHOICES no es una lista" -#: netbox/utilities/conversion.py:19 +#: netbox/utilities/conversion.py:20 msgid "Weight must be a positive number" msgstr "El peso debe ser un número positivo" -#: netbox/utilities/conversion.py:21 +#: netbox/utilities/conversion.py:22 #, python-brace-format msgid "Invalid value '{weight}' for weight (must be a number)" msgstr "Valor no válido '{weight}'para el peso (debe ser un número)" -#: netbox/utilities/conversion.py:32 netbox/utilities/conversion.py:62 +#: netbox/utilities/conversion.py:33 netbox/utilities/conversion.py:63 #, python-brace-format msgid "Unknown unit {unit}. Must be one of the following: {valid_units}" msgstr "" "Unidad desconocida {unit}. Debe ser uno de los siguientes: {valid_units}" -#: netbox/utilities/conversion.py:45 +#: netbox/utilities/conversion.py:46 msgid "Length must be a positive number" msgstr "La longitud debe ser un número positivo" -#: netbox/utilities/conversion.py:47 +#: netbox/utilities/conversion.py:48 #, python-brace-format msgid "Invalid value '{length}' for length (must be a number)" msgstr "Valor no válido '{length}'para la longitud (debe ser un número)" @@ -15088,11 +15732,11 @@ msgstr "" msgid "More than 50" msgstr "Más de 50" -#: netbox/utilities/fields.py:30 +#: netbox/utilities/fields.py:29 msgid "RGB color in hexadecimal. Example: " msgstr "Color RGB en hexadecimal. Ejemplo: " -#: netbox/utilities/fields.py:159 +#: netbox/utilities/fields.py:158 #, python-format msgid "" "%s(%r) is invalid. to_model parameter to CounterCacheField must be a string " @@ -15101,7 +15745,7 @@ msgstr "" "%s(%r) no es válido. El parámetro to_model de CounterCacheField debe ser una" " cadena con el formato 'app.model'" -#: netbox/utilities/fields.py:169 +#: netbox/utilities/fields.py:168 #, python-format msgid "" "%s(%r) is invalid. to_field parameter to CounterCacheField must be a string " @@ -15335,14 +15979,14 @@ msgstr "" msgid "Required column header \"{header}\" not found." msgstr "Encabezado de columna obligatorio»{header}«no se encontró." -#: netbox/utilities/forms/widgets/apiselect.py:124 +#: netbox/utilities/forms/widgets/apiselect.py:133 #, python-brace-format msgid "Missing required value for dynamic query param: '{dynamic_params}'" msgstr "" "Falta el valor requerido para el parámetro de consulta dinámica: " "'{dynamic_params}'" -#: netbox/utilities/forms/widgets/apiselect.py:141 +#: netbox/utilities/forms/widgets/apiselect.py:150 #, python-brace-format msgid "Missing required value for static query param: '{static_params}'" msgstr "" @@ -15470,10 +16114,14 @@ msgstr "Buscar..." msgid "Search NetBox" msgstr "Buscar en NetBox" -#: netbox/utilities/templates/widgets/apiselect.html:7 +#: netbox/utilities/templates/widgets/apiselect.html:8 msgid "Open selector" msgstr "Selector abierto" +#: netbox/utilities/templates/widgets/apiselect.html:22 +msgid "Quick add" +msgstr "Adición rápida" + #: netbox/utilities/templates/widgets/markdown_input.html:6 msgid "Write" msgstr "Escribe" @@ -15507,114 +16155,120 @@ msgstr "" "ObjectPermissionRequiredMixin solo se puede usar en vistas que definan un " "conjunto de consultas base" -#: netbox/virtualization/filtersets.py:79 +#: netbox/virtualization/choices.py:50 +msgid "Paused" +msgstr "En pausa" + +#: netbox/virtualization/filtersets.py:45 msgid "Parent group (ID)" msgstr "Grupo de padres (ID)" -#: netbox/virtualization/filtersets.py:85 +#: netbox/virtualization/filtersets.py:51 msgid "Parent group (slug)" msgstr "Grupo de padres (babosas)" -#: netbox/virtualization/filtersets.py:89 -#: netbox/virtualization/filtersets.py:141 +#: netbox/virtualization/filtersets.py:55 +#: netbox/virtualization/filtersets.py:107 msgid "Cluster type (ID)" msgstr "Tipo de clúster (ID)" -#: netbox/virtualization/filtersets.py:151 -#: netbox/virtualization/filtersets.py:271 +#: netbox/virtualization/filtersets.py:117 +#: netbox/virtualization/filtersets.py:237 msgid "Cluster (ID)" msgstr "Clúster (ID)" -#: netbox/virtualization/forms/bulk_edit.py:166 -#: netbox/virtualization/models/virtualmachines.py:115 +#: netbox/virtualization/forms/bulk_edit.py:148 +#: netbox/virtualization/models/virtualmachines.py:110 msgid "vCPUs" msgstr "CPU virtuales" -#: netbox/virtualization/forms/bulk_edit.py:170 +#: netbox/virtualization/forms/bulk_edit.py:152 msgid "Memory (MB)" msgstr "Memoria (MB)" -#: netbox/virtualization/forms/bulk_edit.py:174 +#: netbox/virtualization/forms/bulk_edit.py:156 msgid "Disk (MB)" msgstr "Disco (MB)" -#: netbox/virtualization/forms/bulk_edit.py:334 -#: netbox/virtualization/forms/filtersets.py:251 +#: netbox/virtualization/forms/bulk_edit.py:324 +#: netbox/virtualization/forms/filtersets.py:256 msgid "Size (MB)" msgstr "Tamaño (MB)" -#: netbox/virtualization/forms/bulk_import.py:44 +#: netbox/virtualization/forms/bulk_import.py:45 msgid "Type of cluster" msgstr "Tipo de clúster" -#: netbox/virtualization/forms/bulk_import.py:51 +#: netbox/virtualization/forms/bulk_import.py:52 msgid "Assigned cluster group" msgstr "Grupo de clústeres asignado" -#: netbox/virtualization/forms/bulk_import.py:96 +#: netbox/virtualization/forms/bulk_import.py:102 msgid "Assigned cluster" msgstr "Clúster asignado" -#: netbox/virtualization/forms/bulk_import.py:103 +#: netbox/virtualization/forms/bulk_import.py:109 msgid "Assigned device within cluster" msgstr "Dispositivo asignado dentro del clúster" -#: netbox/virtualization/forms/filtersets.py:183 +#: netbox/virtualization/forms/filtersets.py:188 msgid "Serial number" msgstr "Número de serie" -#: netbox/virtualization/forms/model_forms.py:153 +#: netbox/virtualization/forms/model_forms.py:158 #, python-brace-format msgid "" -"{device} belongs to a different site ({device_site}) than the cluster " -"({cluster_site})" +"{device} belongs to a different {scope_field} ({device_scope}) than the " +"cluster ({cluster_scope})" msgstr "" +"{device} pertenece a una persona diferente {scope_field} ({device_scope}) " +"que el clúster ({cluster_scope})" -#: netbox/virtualization/forms/model_forms.py:192 +#: netbox/virtualization/forms/model_forms.py:199 msgid "Optionally pin this VM to a specific host device within the cluster" msgstr "" "Si lo desea, puede anclar esta máquina virtual a un dispositivo host " "específico dentro del clúster" -#: netbox/virtualization/forms/model_forms.py:221 +#: netbox/virtualization/forms/model_forms.py:228 msgid "Site/Cluster" msgstr "Sitio/Clúster" -#: netbox/virtualization/forms/model_forms.py:244 +#: netbox/virtualization/forms/model_forms.py:251 msgid "Disk size is managed via the attachment of virtual disks." msgstr "" "El tamaño del disco se administra mediante la conexión de discos virtuales." -#: netbox/virtualization/forms/model_forms.py:372 -#: netbox/virtualization/tables/virtualmachines.py:111 +#: netbox/virtualization/forms/model_forms.py:405 +#: netbox/virtualization/tables/virtualmachines.py:81 msgid "Disk" msgstr "Disco" -#: netbox/virtualization/models/clusters.py:25 +#: netbox/virtualization/models/clusters.py:26 msgid "cluster type" msgstr "tipo de clúster" -#: netbox/virtualization/models/clusters.py:26 +#: netbox/virtualization/models/clusters.py:27 msgid "cluster types" msgstr "tipos de clústeres" -#: netbox/virtualization/models/clusters.py:45 +#: netbox/virtualization/models/clusters.py:43 msgid "cluster group" msgstr "grupo de clústeres" -#: netbox/virtualization/models/clusters.py:46 +#: netbox/virtualization/models/clusters.py:44 msgid "cluster groups" msgstr "grupos de clústeres" -#: netbox/virtualization/models/clusters.py:121 +#: netbox/virtualization/models/clusters.py:110 msgid "cluster" msgstr "racimo" -#: netbox/virtualization/models/clusters.py:122 +#: netbox/virtualization/models/clusters.py:111 msgid "clusters" msgstr "racimos" -#: netbox/virtualization/models/clusters.py:141 +#: netbox/virtualization/models/clusters.py:137 #, python-brace-format msgid "" "{count} devices are assigned as hosts for this cluster but are not in site " @@ -15623,42 +16277,51 @@ msgstr "" "{count} los dispositivos se asignan como hosts para este clúster, pero no " "están en el sitio {site}" -#: netbox/virtualization/models/virtualmachines.py:123 +#: netbox/virtualization/models/clusters.py:144 +#, python-brace-format +msgid "" +"{count} devices are assigned as hosts for this cluster but are not in " +"location {location}" +msgstr "" +"{count} los dispositivos están asignados como hosts para este clúster, pero " +"no están en la ubicación {location}" + +#: netbox/virtualization/models/virtualmachines.py:118 msgid "memory (MB)" msgstr "memoria (MB)" -#: netbox/virtualization/models/virtualmachines.py:128 +#: netbox/virtualization/models/virtualmachines.py:123 msgid "disk (MB)" msgstr "disco (MB)" -#: netbox/virtualization/models/virtualmachines.py:166 +#: netbox/virtualization/models/virtualmachines.py:161 msgid "Virtual machine name must be unique per cluster." msgstr "El nombre de la máquina virtual debe ser único por clúster." -#: netbox/virtualization/models/virtualmachines.py:169 +#: netbox/virtualization/models/virtualmachines.py:164 msgid "virtual machine" msgstr "máquina virtual" -#: netbox/virtualization/models/virtualmachines.py:170 +#: netbox/virtualization/models/virtualmachines.py:165 msgid "virtual machines" msgstr "máquinas virtuales" -#: netbox/virtualization/models/virtualmachines.py:184 +#: netbox/virtualization/models/virtualmachines.py:176 msgid "A virtual machine must be assigned to a site and/or cluster." msgstr "Se debe asignar una máquina virtual a un sitio o clúster." -#: netbox/virtualization/models/virtualmachines.py:191 +#: netbox/virtualization/models/virtualmachines.py:183 #, python-brace-format msgid "" "The selected cluster ({cluster}) is not assigned to this site ({site})." msgstr "" "El clúster seleccionado ({cluster}) no está asignado a este sitio ({site})." -#: netbox/virtualization/models/virtualmachines.py:198 +#: netbox/virtualization/models/virtualmachines.py:190 msgid "Must specify a cluster when assigning a host device." msgstr "Debe especificar un clúster al asignar un dispositivo host." -#: netbox/virtualization/models/virtualmachines.py:203 +#: netbox/virtualization/models/virtualmachines.py:195 #, python-brace-format msgid "" "The selected device ({device}) is not assigned to this cluster ({cluster})." @@ -15666,7 +16329,7 @@ msgstr "" "El dispositivo seleccionado ({device}) no está asignado a este clúster " "({cluster})." -#: netbox/virtualization/models/virtualmachines.py:215 +#: netbox/virtualization/models/virtualmachines.py:207 #, python-brace-format msgid "" "The specified disk size ({size}) must match the aggregate size of assigned " @@ -15675,19 +16338,19 @@ msgstr "" "El tamaño de disco especificado ({size}) debe coincidir con el tamaño " "agregado de los discos virtuales asignados ({total_size})." -#: netbox/virtualization/models/virtualmachines.py:229 +#: netbox/virtualization/models/virtualmachines.py:221 #, python-brace-format msgid "Must be an IPv{family} address. ({ip} is an IPv{version} address.)" msgstr "" "Debe ser un IPv{family} dirección. ({ip} es un IPv{version} dirección.)" -#: netbox/virtualization/models/virtualmachines.py:238 +#: netbox/virtualization/models/virtualmachines.py:230 #, python-brace-format msgid "The specified IP address ({ip}) is not assigned to this VM." msgstr "" "La dirección IP especificada ({ip}) no está asignado a esta máquina virtual." -#: netbox/virtualization/models/virtualmachines.py:396 +#: netbox/virtualization/models/virtualmachines.py:376 #, python-brace-format msgid "" "The selected parent interface ({parent}) belongs to a different virtual " @@ -15696,7 +16359,7 @@ msgstr "" "La interfaz principal seleccionada ({parent}) pertenece a una máquina " "virtual diferente ({virtual_machine})." -#: netbox/virtualization/models/virtualmachines.py:411 +#: netbox/virtualization/models/virtualmachines.py:391 #, python-brace-format msgid "" "The selected bridge interface ({bridge}) belongs to a different virtual " @@ -15705,7 +16368,7 @@ msgstr "" "La interfaz de puente seleccionada ({bridge}) pertenece a una máquina " "virtual diferente ({virtual_machine})." -#: netbox/virtualization/models/virtualmachines.py:422 +#: netbox/virtualization/models/virtualmachines.py:402 #, python-brace-format msgid "" "The untagged VLAN ({untagged_vlan}) must belong to the same site as the " @@ -15714,24 +16377,24 @@ msgstr "" "La VLAN sin etiquetar ({untagged_vlan}) debe pertenecer al mismo sitio que " "la máquina virtual principal de la interfaz o debe ser global." -#: netbox/virtualization/models/virtualmachines.py:434 +#: netbox/virtualization/models/virtualmachines.py:414 msgid "size (MB)" msgstr "tamaño (MB)" -#: netbox/virtualization/models/virtualmachines.py:438 +#: netbox/virtualization/models/virtualmachines.py:418 msgid "virtual disk" msgstr "disco virtual" -#: netbox/virtualization/models/virtualmachines.py:439 +#: netbox/virtualization/models/virtualmachines.py:419 msgid "virtual disks" msgstr "discos virtuales" -#: netbox/virtualization/views.py:273 +#: netbox/virtualization/views.py:289 #, python-brace-format msgid "Added {count} devices to cluster {cluster}" msgstr "Añadido {count} dispositivos para agrupar {cluster}" -#: netbox/virtualization/views.py:308 +#: netbox/virtualization/views.py:324 #, python-brace-format msgid "Removed {count} devices from cluster {cluster}" msgstr "Eliminado {count} dispositivos del clúster {cluster}" @@ -15768,14 +16431,6 @@ msgstr "L2TP" msgid "PPTP" msgstr "PPTP" -#: netbox/vpn/choices.py:64 -msgid "Hub" -msgstr "Hub" - -#: netbox/vpn/choices.py:65 -msgid "Spoke" -msgstr "Habló" - #: netbox/vpn/choices.py:88 msgid "Aggressive" msgstr "Agresivo" @@ -15893,26 +16548,26 @@ msgstr "VLAN (nombre)" msgid "Tunnel group" msgstr "Grupo de túneles" -#: netbox/vpn/forms/bulk_edit.py:117 netbox/vpn/models/crypto.py:47 +#: netbox/vpn/forms/bulk_edit.py:117 netbox/vpn/models/crypto.py:48 msgid "SA lifetime" msgstr "Toda una vida" -#: netbox/vpn/forms/bulk_edit.py:151 netbox/wireless/forms/bulk_edit.py:79 -#: netbox/wireless/forms/bulk_edit.py:126 -#: netbox/wireless/forms/filtersets.py:64 -#: netbox/wireless/forms/filtersets.py:98 +#: netbox/vpn/forms/bulk_edit.py:151 netbox/wireless/forms/bulk_edit.py:81 +#: netbox/wireless/forms/bulk_edit.py:129 +#: netbox/wireless/forms/filtersets.py:67 +#: netbox/wireless/forms/filtersets.py:126 msgid "Pre-shared key" msgstr "Clave previamente compartida" #: netbox/vpn/forms/bulk_edit.py:237 netbox/vpn/forms/bulk_import.py:239 -#: netbox/vpn/forms/filtersets.py:199 netbox/vpn/forms/model_forms.py:370 +#: netbox/vpn/forms/filtersets.py:199 netbox/vpn/forms/model_forms.py:373 #: netbox/vpn/models/crypto.py:104 msgid "IKE policy" msgstr "Política de IKE" #: netbox/vpn/forms/bulk_edit.py:242 netbox/vpn/forms/bulk_import.py:244 -#: netbox/vpn/forms/filtersets.py:204 netbox/vpn/forms/model_forms.py:374 -#: netbox/vpn/models/crypto.py:209 +#: netbox/vpn/forms/filtersets.py:204 netbox/vpn/forms/model_forms.py:377 +#: netbox/vpn/models/crypto.py:207 msgid "IPSec policy" msgstr "Política IPSec" @@ -15920,10 +16575,6 @@ msgstr "Política IPSec" msgid "Tunnel encapsulation" msgstr "Encapsulación de túneles" -#: netbox/vpn/forms/bulk_import.py:83 -msgid "Operational role" -msgstr "Función operativa" - #: netbox/vpn/forms/bulk_import.py:90 msgid "Parent device of assigned interface" msgstr "Dispositivo principal de la interfaz asignada" @@ -15940,7 +16591,7 @@ msgstr "Interfaz de dispositivo o máquina virtual" msgid "IKE proposal(s)" msgstr "Propuesta (s) de IKE" -#: netbox/vpn/forms/bulk_import.py:215 netbox/vpn/models/crypto.py:197 +#: netbox/vpn/forms/bulk_import.py:215 netbox/vpn/models/crypto.py:195 msgid "Diffie-Hellman group for Perfect Forward Secrecy" msgstr "Grupo Diffie-Hellman para Perfect Forward Secrecy" @@ -15987,7 +16638,7 @@ msgid "IKE version" msgstr "Versión IKE" #: netbox/vpn/forms/filtersets.py:142 netbox/vpn/forms/filtersets.py:175 -#: netbox/vpn/forms/model_forms.py:298 netbox/vpn/forms/model_forms.py:334 +#: netbox/vpn/forms/model_forms.py:299 netbox/vpn/forms/model_forms.py:336 msgid "Proposal" msgstr "Propuesta" @@ -15995,32 +16646,28 @@ msgstr "Propuesta" msgid "Assigned Object Type" msgstr "Tipo de objeto asignado" -#: netbox/vpn/forms/model_forms.py:95 netbox/vpn/forms/model_forms.py:130 -#: netbox/vpn/forms/model_forms.py:240 netbox/vpn/tables/tunnels.py:91 +#: netbox/vpn/forms/model_forms.py:96 netbox/vpn/forms/model_forms.py:131 +#: netbox/vpn/forms/model_forms.py:241 netbox/vpn/tables/tunnels.py:91 msgid "Tunnel interface" msgstr "Interfaz de túnel" -#: netbox/vpn/forms/model_forms.py:150 +#: netbox/vpn/forms/model_forms.py:151 msgid "First Termination" msgstr "Primera rescisión" -#: netbox/vpn/forms/model_forms.py:153 +#: netbox/vpn/forms/model_forms.py:154 msgid "Second Termination" msgstr "Segunda terminación" -#: netbox/vpn/forms/model_forms.py:197 +#: netbox/vpn/forms/model_forms.py:198 msgid "This parameter is required when defining a termination." msgstr "Este parámetro es obligatorio para definir una terminación." -#: netbox/vpn/forms/model_forms.py:320 netbox/vpn/forms/model_forms.py:356 -msgid "Policy" -msgstr "Política" - -#: netbox/vpn/forms/model_forms.py:487 +#: netbox/vpn/forms/model_forms.py:490 msgid "A termination must specify an interface or VLAN." msgstr "Una terminación debe especificar una interfaz o VLAN." -#: netbox/vpn/forms/model_forms.py:489 +#: netbox/vpn/forms/model_forms.py:492 msgid "" "A termination can only have one terminating object (an interface or VLAN)." msgstr "" @@ -16035,31 +16682,31 @@ msgstr "algoritmo de cifrado" msgid "authentication algorithm" msgstr "algoritmo de autenticación" -#: netbox/vpn/models/crypto.py:44 +#: netbox/vpn/models/crypto.py:45 msgid "Diffie-Hellman group ID" msgstr "ID de grupo Diffie-Hellman" -#: netbox/vpn/models/crypto.py:50 +#: netbox/vpn/models/crypto.py:51 msgid "Security association lifetime (in seconds)" msgstr "Duración de la asociación de seguridad (en segundos)" -#: netbox/vpn/models/crypto.py:59 +#: netbox/vpn/models/crypto.py:60 msgid "IKE proposal" msgstr "Propuesta IKE" -#: netbox/vpn/models/crypto.py:60 +#: netbox/vpn/models/crypto.py:61 msgid "IKE proposals" msgstr "Propuestas de IKE" -#: netbox/vpn/models/crypto.py:76 +#: netbox/vpn/models/crypto.py:75 msgid "version" msgstr "versión" -#: netbox/vpn/models/crypto.py:88 netbox/vpn/models/crypto.py:190 +#: netbox/vpn/models/crypto.py:88 netbox/vpn/models/crypto.py:188 msgid "proposals" msgstr "propuestas" -#: netbox/vpn/models/crypto.py:91 netbox/wireless/models.py:39 +#: netbox/vpn/models/crypto.py:91 netbox/wireless/models.py:41 msgid "pre-shared key" msgstr "clave previamente compartida" @@ -16067,19 +16714,19 @@ msgstr "clave previamente compartida" msgid "IKE policies" msgstr "Políticas de IKE" -#: netbox/vpn/models/crypto.py:118 +#: netbox/vpn/models/crypto.py:115 msgid "Mode is required for selected IKE version" msgstr "El modo es necesario para la versión IKE seleccionada" -#: netbox/vpn/models/crypto.py:122 +#: netbox/vpn/models/crypto.py:119 msgid "Mode cannot be used for selected IKE version" msgstr "El modo no se puede usar para la versión IKE seleccionada" -#: netbox/vpn/models/crypto.py:136 +#: netbox/vpn/models/crypto.py:134 msgid "encryption" msgstr "cifrado" -#: netbox/vpn/models/crypto.py:141 +#: netbox/vpn/models/crypto.py:140 msgid "authentication" msgstr "autenticación" @@ -16099,32 +16746,32 @@ msgstr "Propuesta de IPSec" msgid "IPSec proposals" msgstr "Propuestas de IPSec" -#: netbox/vpn/models/crypto.py:178 +#: netbox/vpn/models/crypto.py:175 msgid "Encryption and/or authentication algorithm must be defined" msgstr "Debe definirse un algoritmo de cifrado y/o autenticación" -#: netbox/vpn/models/crypto.py:210 +#: netbox/vpn/models/crypto.py:208 msgid "IPSec policies" msgstr "Políticas IPSec" -#: netbox/vpn/models/crypto.py:251 +#: netbox/vpn/models/crypto.py:247 msgid "IPSec profiles" msgstr "Perfiles IPSec" -#: netbox/vpn/models/l2vpn.py:116 +#: netbox/vpn/models/l2vpn.py:113 msgid "L2VPN termination" msgstr "Terminación de L2VPN" -#: netbox/vpn/models/l2vpn.py:117 +#: netbox/vpn/models/l2vpn.py:114 msgid "L2VPN terminations" msgstr "Terminaciones de L2VPN" -#: netbox/vpn/models/l2vpn.py:135 +#: netbox/vpn/models/l2vpn.py:129 #, python-brace-format msgid "L2VPN Termination already assigned ({assigned_object})" msgstr "La terminación de L2VPN ya está asignada ({assigned_object})" -#: netbox/vpn/models/l2vpn.py:147 +#: netbox/vpn/models/l2vpn.py:141 #, python-brace-format msgid "" "{l2vpn_type} L2VPNs cannot have more than two terminations; found " @@ -16141,35 +16788,35 @@ msgstr "grupo de túneles" msgid "tunnel groups" msgstr "grupos de túneles" -#: netbox/vpn/models/tunnels.py:53 +#: netbox/vpn/models/tunnels.py:51 msgid "encapsulation" msgstr "encapsulamiento" -#: netbox/vpn/models/tunnels.py:72 +#: netbox/vpn/models/tunnels.py:70 msgid "tunnel ID" msgstr "ID de túnel" -#: netbox/vpn/models/tunnels.py:94 +#: netbox/vpn/models/tunnels.py:92 msgid "tunnel" msgstr "túnel" -#: netbox/vpn/models/tunnels.py:95 +#: netbox/vpn/models/tunnels.py:93 msgid "tunnels" msgstr "túneles" -#: netbox/vpn/models/tunnels.py:153 +#: netbox/vpn/models/tunnels.py:148 msgid "An object may be terminated to only one tunnel at a time." msgstr "Un objeto solo puede terminar en un túnel a la vez." -#: netbox/vpn/models/tunnels.py:156 +#: netbox/vpn/models/tunnels.py:151 msgid "tunnel termination" msgstr "terminación de túnel" -#: netbox/vpn/models/tunnels.py:157 +#: netbox/vpn/models/tunnels.py:152 msgid "tunnel terminations" msgstr "terminaciones de túneles" -#: netbox/vpn/models/tunnels.py:174 +#: netbox/vpn/models/tunnels.py:169 #, python-brace-format msgid "{name} is already attached to a tunnel ({tunnel})." msgstr "{name} ya está conectado a un túnel ({tunnel})." @@ -16230,51 +16877,44 @@ msgstr "WPA Personal (PSK)" msgid "WPA Enterprise" msgstr "Empresa WPA" -#: netbox/wireless/forms/bulk_edit.py:73 -#: netbox/wireless/forms/bulk_edit.py:120 -#: netbox/wireless/forms/bulk_import.py:68 -#: netbox/wireless/forms/bulk_import.py:71 -#: netbox/wireless/forms/bulk_import.py:110 -#: netbox/wireless/forms/bulk_import.py:113 -#: netbox/wireless/forms/filtersets.py:59 -#: netbox/wireless/forms/filtersets.py:93 +#: netbox/wireless/forms/bulk_edit.py:75 +#: netbox/wireless/forms/bulk_edit.py:123 +#: netbox/wireless/forms/bulk_import.py:70 +#: netbox/wireless/forms/bulk_import.py:73 +#: netbox/wireless/forms/bulk_import.py:115 +#: netbox/wireless/forms/bulk_import.py:118 +#: netbox/wireless/forms/filtersets.py:62 +#: netbox/wireless/forms/filtersets.py:121 msgid "Authentication cipher" msgstr "Cifrado de autenticación" -#: netbox/wireless/forms/bulk_edit.py:134 -#: netbox/wireless/forms/bulk_import.py:116 -#: netbox/wireless/forms/bulk_import.py:119 -#: netbox/wireless/forms/filtersets.py:106 -msgid "Distance unit" -msgstr "Unidad de distancia" - -#: netbox/wireless/forms/bulk_import.py:52 +#: netbox/wireless/forms/bulk_import.py:54 msgid "Bridged VLAN" msgstr "VLAN puenteada" -#: netbox/wireless/forms/bulk_import.py:89 -#: netbox/wireless/tables/wirelesslink.py:28 +#: netbox/wireless/forms/bulk_import.py:94 +#: netbox/wireless/tables/wirelesslink.py:27 msgid "Interface A" msgstr "Interfaz A" -#: netbox/wireless/forms/bulk_import.py:93 -#: netbox/wireless/tables/wirelesslink.py:37 +#: netbox/wireless/forms/bulk_import.py:98 +#: netbox/wireless/tables/wirelesslink.py:36 msgid "Interface B" msgstr "Interfaz B" -#: netbox/wireless/forms/model_forms.py:161 +#: netbox/wireless/forms/model_forms.py:164 msgid "Side B" msgstr "Lado B" -#: netbox/wireless/models.py:31 +#: netbox/wireless/models.py:32 msgid "authentication cipher" msgstr "cifrado de autenticación" -#: netbox/wireless/models.py:69 +#: netbox/wireless/models.py:72 msgid "wireless LAN group" msgstr "grupo LAN inalámbrico" -#: netbox/wireless/models.py:70 +#: netbox/wireless/models.py:73 msgid "wireless LAN groups" msgstr "grupos LAN inalámbricos" @@ -16282,35 +16922,23 @@ msgstr "grupos LAN inalámbricos" msgid "wireless LAN" msgstr "LAN inalámbrica" -#: netbox/wireless/models.py:144 +#: netbox/wireless/models.py:141 msgid "interface A" msgstr "interfaz A" -#: netbox/wireless/models.py:151 +#: netbox/wireless/models.py:148 msgid "interface B" msgstr "interfaz B" -#: netbox/wireless/models.py:165 -msgid "distance" -msgstr "distancia" - -#: netbox/wireless/models.py:172 -msgid "distance unit" -msgstr "unidad de distancia" - -#: netbox/wireless/models.py:219 +#: netbox/wireless/models.py:196 msgid "wireless link" msgstr "enlace inalámbrico" -#: netbox/wireless/models.py:220 +#: netbox/wireless/models.py:197 msgid "wireless links" msgstr "enlaces inalámbricos" -#: netbox/wireless/models.py:236 -msgid "Must specify a unit when setting a wireless distance" -msgstr "" - -#: netbox/wireless/models.py:242 netbox/wireless/models.py:248 +#: netbox/wireless/models.py:212 netbox/wireless/models.py:218 #, python-brace-format msgid "{type} is not a wireless interface." msgstr "{type} no es una interfaz inalámbrica." diff --git a/netbox/translations/fr/LC_MESSAGES/django.mo b/netbox/translations/fr/LC_MESSAGES/django.mo index a11e5aecfaeaaabf4b420959f1f9c9649c54b7be..7cc97be4a5fb4dc49c7e5b5cdd59462f71d885a0 100644 GIT binary patch delta 75340 zcmXWkd7zC&AHeZ*FG}{El3e?~?_|v``x<56Q;1TQ_o%F)C?ttQD@AEv6e*P`T1aIn zMGA=&CGYopX5N23GxI#p%x``(^PF=pdH>s!>(a{H$piT^FG=vf|K&&|uErcg6NwFZ z5{ZAe+nPwco-Hj=72m*ecnq^)p6qFf8dwys#g5nk@54d(H4el2InokYaV3_;r;(u& zyYTWvBANJ>LM|G9j2HgELewu|b}W=LEkQhqlDGzI;bh#4ZLnLev_u75j&*SxHpGAM zGOU|BEm02}qwTk2Q{0F>7(eklh3+)8%9ED31s}oIczNEm#7OLf*Wqi?f3PO?rul-m zVI%5KVjnz=^|4|8v_u`8fKBjOY>UUxz-tts&iIMDC>ZHhY>yvfbu3UYq_|ad658Rj z(SzvB3l<7X(=<8)ZGQk;;2Y=?{flL=LE(_80hn|xmr`IY607kFd=|6dCd`CyplkR} zy#8VIbM*QBvHnx6pTf+vU%zLjh;vM(&bl%e)3~#^In+@4|Jr#nf5>*?1TAn zIOfC2Xa@_TkD#0ONpyxUqZ9cs)(@hYIgJMTZ#2hMX^9fluSWZ8lBD1b?a>bVqB9>A z>vy05%tY^7hIaf+tZ$0Gk3Rnex<`J9?L~@)0L!D-8=}v*Lo=4_5ii^nFN}#7CPk;m z>vQAvW$1BSg9h|+Y~O}<_!*kHedv9^#rj2b;JjCd_N$R&o=jAs;EY?M5q6FBfoN)P zK~t4PJD7)Vrlsg}>(M291FyvGv3?kR?i3o(KWMdg$6b4c7 z)i?_q;}*1oOX!;`Z;7--JM4l6upFJqS~RtrVtqTBp|7zS{(^p{R4f^mq76Psy*oaR zKbPeE7oae^ROo0$bR*i)w&-4bjQVjT+le`)(-PgNKUKzecp`BgJ@=i;h79&ZXWS26 zilOKm@X=V`hkhpHE|*M86sFLoTv+n~SeE)+G*uhX6duPFcoI$Vyz*h7htN0OBj{#a ziQ{n{w#8x`VP4G=rrohD}=~84Hcj3+jRqMl-hvo#|8P zrrHpFH~LxhAbS6)Xy!_xzvPt^9H?w;sDmD-7U?a@;*1nuWmbRu)m`xavv&;Q!k@CiEO{pf=yqvz43$y_zeC>J_FF?42i z(af|%pC1sfPl)aF(fgi=^;gjQcHm{6|AQ3VL_ebu{)&EX|AoD=VYLvzgJ_0UpiA@u znz^^p-M<^%ocquL525#;L6<5^_0V1jy{`f$D^RFGLHnV*eJ0xBTpWN4(M|R{`hq$i zy@UpyrA7!S8+u<6G-D;u_ev!+(BbI)Q_%jW*Wmm+li4)rl6YZF^f_!w`-{=j=;o_Y zGt8_Bx+l8C`Uo_@yU-;`q8VL+_P;vTH=qH&Rg?4Y4Ijh{yQANu1N{;`hxMsvsuey9 zu0^kph)zUz_uc3~YtTSmMEBBb=r~)kBJPTwPf{=yrE3Q(p##-K*X(9ArBl&0n~8R~ zAi6AGUxW6u9-Y}HtcmZSuk_!s5>~AfzO44eV$_pMDKw+-GM2?Zu?${aHypbb(P8MO zoP)J+2RgtdER8kmr6nd{Z*4-7NASB8h!3n^tt!ZH{b4f{RrC6 zdGs?NUyJagU1jvS2`!Rgt)|o9PbLqd13Zsznk{ImKZ$;hruggVAvD0_Xa>(?Ys`CH zc&-n6e}8nqk!a>_kM(Iu3Pye(+R?Ij;py1^a&#*?v(M3)|A^lIH`?*#EyF|#pc5#I z_S+DhNLzH^uIPkrKsRG@K)mosys#SGolj#o+>3s5sn{xXFca-?0s4Ykif*Q-(SSA~ zpX-UOXu#)Vdydv26GfwCkWHFQRHI-=P0@(E#2fmfGaZR`JS{pO-BgdFpADbJ_8e`( z9w~}7XfGSSfyxtvseiYjO|Dq4z<(~h?DY!|Vi5Ff%cl-P3=l8DYAvD#0plkdey7u|n zg}{oV?N!hLo1@ozp%WT{PT(%|zS)@c`}w03eBgC-fSu?JzCk-UjLz&NrUs7YYaeD_ z7VWrB^t#yI6@7kS^p<#ia;(p3AJ6}icwtTSMKs0lqJix}J31P#pG7m1-XR230Ns@3 z(Oq2w&FIZ&%5O&}Gz$&%ezd<89XS7Pj%R7G!;R=U-ilRlKYCoUULWqug$7g*?VuvM zRQ1pSTEu#LbfBK--WY-gcw20rf<8AlNx`*QjCS~3yy3N2{~%u9gXOq>3=KF>$Ix+M z^trNVV71VJ+oDU^D_$Rr)u@j}Kg?F4pE=0`6nw`Q=oB(g3yriD8hI!5WBDeu<44f% za8IL|S&!-X68hXL@%rXie?R&u+TT~`b4QSgBooI&A#oZ_$=~SOW$GMekTZHEIzSmT zfU4+ywc_>0XeQdldarnWFgoy<*ggfzQlE|W{rrC+UO0+wmNV$)%iJY=p(u>LP}*Zr zoQh^*S@bD1pqJ5WyyVThN)#L^t<(^#0B0eV<{{8-JqUxxR>ge&_8T>b0;s z^)_fm?nF1yJTwDu;Yj=#4YX#D_(wi{@S4X#^DgH5f63y6oG?Q6-g?@5Hi=+2fN0+D(w!}8QIR7@xr@@Gp z#T!m6RY#v|60f&UQn16`*bE29 z8`j`>>Ko9Mm*^8Z?20Z`f3&09ur&S;OW~T>z8xL-3v}s@#P+{pd!`#gKgj|VyrDe$ zRjCm=qaNsS8jeOj0SDvV=&?J3Zq}1%D$k)4Y1B7tzSij8>5sNQfM$3(+TUs%MmxL`-Atv?K>DM5U^sTh+p!FOfc^yZE4q{wZVUm` z#9W^LW)$3=oza1ops8GrM!Xq)1Ac&ZkaknZOg1#&!e~IXVtW(xxen+l=!TyAndoMI z6D#5G*vs>Ob^p-u1a$XKMSoj$4;s+BXv(&s1MNWr`5vA5&zONH(J!&N2ZRACqWAYg z`yCY9N1#8JKZMEF6n0T?vlJW{eqUD>-2>O5?}wh~kJ-1N1I|DLnvZ_yERSwLJKl!= z9^n!?aHc_FX|6z*tO)kTZi6`g?I}D*gPZD4^v!e$Ol*YQrQ zfi;GNpAm%-9JCZn(NxzR_^@0QP^{d|Z%w->$tC#>xGKTE+GmKYUgSQ)L?M?1U@%}jT6 z2}Yrrn2w%~`RHC)6x)}h6M70A_<3}RHls8C8qL%Jyv*}|gn}LX8a*4mhz@Ys={Jx}&e) z8_>^y;n)(FqQ~}IoQoyLgqf{JH|xvjgnmJf@gL}B%X~`+tT2|OUJ{db+=@bdyd90~ z1@wV8(M`A$P3f=bO#eVLk+?P7e;GRCe6e0E)+?YNR<&b$TlD!J=u!;6mGf_EM$=#i zW6@nZ8Lz|{=-RJDXY?|(kLwFdGg0ade_jjph8? z;Y&0a$kuqn_E_H;>wC}u_n}MjWAt})lU+npooieOGy}cALbNve8PXJ;;1o2YGm{hy zU_Kha3bdouXoQ>40pE@7pT_nB=>5mh%$$nX|3(AKHa=JsO?hQBlMT`SyPz3K4yIrL zQ_$Tx4_&k6=-R&!uYZajzwgiv&cyaCw}lU#g6OAVb#!LeqZ#OqzBl@#0Z%|Db|-RQ zGBJaKkzO8m&-<)s09DcBR|nl2BQYJvpc5O5 z)jj_UDEOw@j0W&6I`A*(49>-R+Qe`@7dnHh(fi7y_til&*$h)Dj@Jjr_OWRHN%Z*z znELa-M=03QT68U6L}&JNy*=}Msk^g%N<8vO!tJC?; zRKiy1&kN(xH{cSSj4z^_u=4a^ceJ0$n1L&>wx9p+P^gE0pu4}~-C^KvSf2VMbb!av z-`#ABX1XW*Nl6QAP5UBrhWoHP{)T3%*}b8D8@8kVA@;yLGdTZ4C=8>}96v^nPxhH% z_qIj@=!dS|40Myd9Q_r2#g?2EQr;6=QlEt`=?-+ye1$IUQ8d7F=;_EdJO2D%e0Dev z)zAl9eG=PKXUN{*&KbtjjH)fs_ zjztdixa7l%SQy{I7HA-exnT{jK)*s&LQ~oa@4;p0-YI%tTHH(nR4g%9D|xE)=?8TW^!S&9byI6BZe^!mnF--^Cqwxjp$ zM3-V8daQp!_s}`yIsX371L2%DMIY#fzPWBf0~?B_Y9t!@MD$$WgKoAZ=z#mt`wpSc z{e~{t?`Xg0V?Fc25KvA`{rTTjsRHL2?VxJBpJuUOlnJz)U z#;-&N+=~Wq5dAj&6Bfry=ySy%~&8eKfFN&BcKi=I zwVDyN1^@R6r{w$l8MpNG;+7ZpXaM|E6evY$&!ed{3{8 zuKh?HgY(cY8h>MLth6e;DFI<<3zKv$`B>L%B&`V-;4+-Pcxp);?7ZqhpFOuL{nAAqj?ZRjza zl%(K?$%5GMB%1oS&`tCixc2cb0 zi$1pq&EN{m;rU-p!GT^t*M3W^e}%5?F?8U>Ghuhs6u+(9P2deXv_}5LTc*4*h#^y&FwlJTxHMqTix{9F1PS zAp}qkeXeG-37X>eXePU%f!=_=7lxt%B_~pF#?zv+(HF!bG(}5deL1>zE75_TkM%dA zAE5*6MKksTranW^{;${=uIEPsx+c__(Jpy=4AXt{g*=qTB8~0fp$0o&BRo+ z<2mR#Uln~F4QMx(#oy4)mH(Bn_8I8&<)gLHOgD?yJ7Lm+dQs4uqtl~H&`t6j`ikC! zrv9f`&-H3JPR-DaCDGI`MEA~1=$?5E4dg>~kLA)gg^_UyZmZ2(6VU1Rne5!L!WPj-q#ZiWI&RFyK)*j z;B)9Z{|)SjyU`AdzZrIMIrMmTKnLg??Gqgo9UYwzor)g2nbG-ZhLaD)8Y{USPp+;4@zu0&s8CD0`)hXz&?Jw1)kP1zOQL;bNUE=2lCCVrq`>VHF1 zdJ&B@&)cEn!e}7H&;hEUYuym-xHX#M?y-GPY`+D)e{yV}iT1N7*4JR_{BNLOq;I1g z?TI%W!c<^rM;FmG%=%7vPZU7|sf-3*AAJ#ZKnEIz-aiRl+S$>i(I>s``G1*$9c{zn z_<5}Vj%MOt^u?5Ea|p07+F_YkuZ^a>1@^%XSRU7+_wB@b_#L{J3cMTczZ#P^l%dcX ztDq^Jh|b{dSbr$iA4dau34IZLh-U5}`u_M64J6xpVW9lcqG)?5bnjF~CtUYE&c7*c z5pU=oy%AlCVQ2~`MDIoKe+Uh5Ejq(jWBUiO{p(mih6Z>ZeN*P%5}vP!sm-}186xjW zgOLqKGcYdJr=d$Q8y)EWSbq!+WGyf|e`RwB&DcfszPwvQKgF;O^~y;K z9-oQmK$FoM@5VB?AhvHp1AH^O4IOY7&cJWcuj2#X52+r4zR1R)pMLkE?~SM9^>yf` zPQFaR7s0!+VH-Nr&(JkH5U(Fa1NaRM@EjU&`nKQ|=u+iD@5?|3s2J;YV!bK)e0yY^ zWTF=Z9~_3A@OHF=ZQ+K*E;QBOqxYSR_5ZLh_1qtX_R%<)`egK-|2bn9tAu;S_wQ-xV(`L%&F@#47kEn#yBX8!us5ti3&S*bmL%u;^%X=40da$>{rG zMr?mLwm*S&J^$-1;E(8ySA7&ZsDhq?`siA>Ml;YIGjK?3pMkFJB6NmJ(EC=QGu?nL z)hlS~-$wiW2$M}Id`+P~7Wz1x+sT;+Mt5t4PeKRd(d*ODy|NJ9<*U$vH=zT( zj~=t#*bI+i>bGJ$!u`W`aQ+u@;Vv5P#O$Ajna@BwegGY4CAt(ZqBA*&F2T>}fH`-D z52<2krW&CEwMA!qBUZ$bSQQ_NZr#cGuSUaZ8tk~luFzq5^i!`sdJ1}>Ga3-D--4!k z8v5p&jTLYO+RumRn{_9;7ru)1Luh};uri)bQt+LB&1c~Uh$fgp{T?ihYtR?TN9as` zLT7dwooSZOLx=g$wJwTgqy!pZ4K$EO==^P`K=8LvQh_j726 z8_+=BKnMIFUf+QR_Bk5Z5%l@f*bpyaC2Y7mdSs~gnC}|`Zefgs~GKxPHZ}w>HE-emSgJs|2hh;%^No0K{Nv=(2o8_ zBQN!3SnCSt^_tPf=*Mwebn^{D0~v|F$RZ_3QnrKH2 z(SVwx8R{JC{i9>hnN3DJoDu5}qtCBKcl$G#T4HoU2e2Go@iph)uS_+*4mWl{AMAl0 zupdsqr_qnqqI<(>se-MkcSJL>7+c^fG_^lO&qOot3xO6yk9+Z0@4S!m?|?VZ;7kWb zZ$;O5D!K{h#`+?3z?JBXpG60J8x3$LR>y;}J-zrIfH&^oyVk~ za=8wMh$^EI)<#p@D7H64189r=us3?&CN%YLqJeKiXSN3&V1KNiLht(v4Lt2ocs}1D z&c7cTSJF@etDpl9K;H{Pu{!<_E8&KC{adudLueq!(Nl67t6;9fA&_g)>n+g$JD{1k z0sY1_>~J!qWE2esG8T>e-gv_@bQiC{uJ|AD9)*GSkiMHs( z`b7t#dt_LWf|1>dEpaM3vn^;Ucc24)fkwU`z5i!)z_aL!C+){Df&A$8a_IFs==B!y zdXIR0B$lB)c}Fa)KnL842Ji_w;FoBJhtQdvjPiPeff&-)l&?!^dhT z98G;18pttRf)#&FOFWJ5VO1RYTlhn+hq1Wl{|gFc;0$_0z7yf+_2y_`ccJI{2`q_w z&{Oeeyk7QXsCPyKoQ_TKCA=R`<4oI6r6mU9Wxt2}M_|$cmr z`(g>|Gq4#xg${5Oufwu`g!a+see19k?nDDVjRscWO!!;%tTPr>O8y=8#87NR zeI+)<{eN@*M^d=zeE6bqFM2Hg!e&_PLihv7{^(NdKu^J0bVir|6H?g#4PZ3hjX$Cp z8uo9<;96`=eHV7cf)_(3MkFb8reQPo#9aS{znM4`yHLO4Qh0~=MeiGrzUj80Z^#4a zEBtRXphEl>U}hRG9Q0?(U1{m5?+sbf(-XH+uZ%75QS^60$paKjQK3xfskQ8bov5$C zQTQwR9_X1lJ$3vBq3?&`(Q)W|V=`vJd(b!L9L$Xm#rm3f{RQ;Z`*LVcCSIrD3+8?F z{O^t)z+BXSMN@tO9Uy0x&~bkBRb2}G@>(A=unT6z@#y*<0v8E^rHAkT2Wari=HKWV=gJ<|vH%)L9V~~V(cS+bI@1kkrgowOUBVJrD@RCi zPjqRPqCW{ejb48roybo)lIf{e?`ax}(~u`;Sc>ZCCTW1Kc^hrr`&3X*o8~pw2ur^uH4sxTrz9>3CMKpj$=o+@g)Q3{Mz5vhD zz7idHS?-X*)o6cDqbc8n|HDr(9oyvz*OS-BLZ9f+=s2{)spva?COU(U(a6uCo9-WU zFI+;uJ!i`suD3)3Zifca9X$mD(EG=R_GDr*1yec;o%#Lfz>lFBcnW>fy@sZ4H@XLY z!E5lcd?CeU(3v(u2j~{tZ$bl@fW0t@F3s0?rJw)5Qn2GJ`9nv=qP5V?*bZHS&gibb z5#1ZNqJd9EXEq~VUyS*wKNYXPiDqhR^uy>UnEL*|i-M`zi>CH4+QHB0OfI0A$WkC! zC|VAy(Ow@7bR-tRTd^w6Mkn?vn!#OI7LQ>D<}S$j?@FOM1ygztdSMlM8s5X2cnA$F zf1xnrBIt}W(Dv%FUI(2>D>TKO(SU}cnVN=XawhuxgM~Q%-uMI!W$-nuh~LK>vK9{K zwg?(vZS?-G=&>4(W@ak7_6x8Su0?155jx-@bjePjul9e?esUGz{JS|y6$uelLpy95 z>s`3Q z)|a6HtwJ-g4pV>rx0!+|`w)HLb2NZ&(Z~;?899n}a1KpvdZ`e2cJ%ox(fdlFd!Z(J zDmtJ84nk8u5q*=+DaH9W#mi&Ey68LT?*9zU%t3U(6X-za&>1F5hxW_Se)6DeT>{-J zRim}h=Nh6DY>7^!bLnJ=q#q4NcnjL`bhM+{XaI}RbNd9^!JBAiK8Ws&?O&nyA3`&6 z5}olybm{Vz3H_Eu@2i!h;LMt%9k!1bx}hBmL<1Qc+oz)U--pidA@sRNV*6@zBF~{S zeg_SBJ36sFXusc}8BQLHg}>1hW-S{oT#42zpdB_u1L=saXke&{y@d z=zHTsbmm9Ul%Gcf&QdPbFaQ1<1s}{nJF1OF*a97}Yi#e2&U_5o!R=^()6o0wN0;bP zbn|UO`}-6fct3jI&uC`OU^YMhFH-PRENl62At#!$!m(Zw?VvK+LH&5WRc!BqK7S(` z*dR2pQD^{@V|@`~gLPK13(fVjVP0;7sp>NKf=n{>q$oY5Rxiq*N7on+JjV19VbOv9c9UO@D<7nV#(3ze` zXP&iEFdv$+tI_8wpn=puGu;fGSdU7ae{UE?gAd$}c6<*y@Er8PMQG|)pliJ*wm%cy zgg(C+oxl$C4fkDaKZ%a>4;tv@m4kVc6ueM0S`IyKwa`dgqXG0q0~&_T_||xR8ak6j z=khqkGW-k48_Uf&LRsW~~weD2T3oiD)%+z{cp>w?;G29?d{kbbwyybHma5 zCdTV`qM4kAPVioI;0MrvRv`WJ`A@-)H$-1WA9x2H=wmdHUFd^*WBqWfACI0z2lx*S zD0|iTB179NpzU?h47Nh=bOikUu=0pd67!7Q7Y=0gN@GW$v@1Ya< z5bb9tx`g}CCHf70KCN0XC#L@X@0Aoh1!d95szw{516+@G*cA=zMs$yiLI;?N&TL_H zCECw=^!~Td349dW_n?6s#?-(6eIhpejSiH#dN4P-o3BC#s)PpG6z!l*Z10W+Is$!u zOuRk`&CI>gxoCe6piBCAbPLQ}Z|UEBR=?Z%1de zJJ!F8^`FrtIF0u6SG@i&x`&dN)e40x(HT@mJ8Fi`xC1(qZn3>Dnt@?xhqs~wOhBK% z3(d>|H1*44{h3&Q1)bRYNdL*i&UoQVG}S+#1D=lU=VSfy+99CaXvc-n`%0q$S4J~a z56w(lG|;~2M25ucqtU>pVCwUKIt4e!Jai@x#~U6)BYh&)*T?HGqBDFA4P+Y{_?~$E zaBM${2KZ;JUql1RUMD=C4^!X&i&OAI74#KaJKj(q4XjnHcSR%bj|Mgb4d52^`6*~% z_r&%G&;TAoGxQ{yp^a!iTQF%yA5w7UpQFDV`Wo%<^21=NE$r1cf=d!qk%0#BYqTpV14wZ*#3H~e~b?B z8KyqM{V;(dXusE>8LE_|V2YZc19d|O7#Qp0(aq(3UcW!O0-I8Q z4kzPr^w)308l*E%z zhZnF7*1R@7(F`Y}DSa!t4@*)16U*V1jnh+q)Y2SBP@jg)@FyIMWt*gaZ;<3)uMNLI zcpKfNr_h;Pz!q4$X$WKz8sJ8(jOoq7fYs2ShP$IPy$zp8W7lI9>djh&8Q+R#ayj}N z)Mv4o-~W$LxQT``*QKZavdO(TiTYpYCLG%`bbJ@ON7kZi{T8~3w#D}S=u)0W*FHS6rEhZGv)MQo0Z+Jph7;dRt!;q~|lw#CA2(^LOd+(7J0 zeJ9St^6kPO-Moy8sAp;)mTXD%du&g8nGV5mn6%@!C``kw*M|$U&_H%$C(Pe5J#ixr zMmu;HJ7Bg>;S}^j_fUUy>0U>FNAw5UPmRv$slQt?0iD1bSPRp;aQ+)nsM{s1$!+Ln zdmdZkPv}6EyN2If-ic;v6?%-mNB7L}SpO4!Po#GX*R!HaRWR1CL6@`=`dpoEoPQgd z#fJ9iG3$xG2Zo?Ou}nesRAMRmie47$E70@465U)+MqftzeLr5`iFv7iiT3|9dj8KQ zDfl9}ynE;;1h|Y9wY<~dVd=I0?avgdcKSBrkEqV#v#QA!J z`;rwXl&7IJ7Q?YzuD+{6=(V_u_AWSz7fA6TVdis(rYFYHem+UT42&KY&hrE` zMR%b~a4$NO_s|($Haxrm`(Ot3rC1kV!uJU z-z(@i@29SF{=TB%O#Z+!m}yKHxB@zp23Q+Ap>N82u^FyM13Q5ZnE94)|5fO5tA^FE zJ^DhMjE?gdI^$aw1m9Z+eLZ6$61~3bq;R99L>ZzbhG9h z7rxuut<7go3u?@bA4*V~AO!H0%GrtN= zc?onz_0Z>9qXBk8GjRj9#8qe@N6^oV(`d%BBqxReu0~T@12eEbdaQ1UjzI(Qe%E|) ztUnd6zZKheMGr;)Kqr#<_V8WudbFQ~(d3g9D%0>Lx+{;Of&7JLin0bU`N%X_0iNd!*)0e8{y~J19RLN zcK;x}k@`Zcizm>%Q2MT5AFNJ&KHi4!p#4>!oSynWHkgbx{Qkd_!joLMg!kZ+Q^MbT zDnB)BvIns>?Yq&AicAZCm1-WE+6y=UTl_CQF%X}?>oF61s~>j3j<_BT=t8v8bpARH z<0o#U&;>W*R7|@&eA@jF-ArGhDLjNO$q6*I=h4h%x+ff`?CATU3|7J>Xog0kn|C{U z>^{c|cpQ@*C=|Fi9GijY?i`N3Feal9%tHfw5?%Xq=Ytt8k}hdbiiKd0OQbrW}^W;iVn0MeFJXB5_kg5WbRpE z2_L}P)bq^_KPk0AGxc)xZS>e~o6TBS_<{yc!4K#QB=?*!(}L(`?1|3oQM9AA=&N=; zx-@U1Gu)28>-VF9UqmO8cW$sexe&D?5qrW?@?x1kgI63xiZ=)}&W6U#e4++PW~KbdGs!8cN8bOuAw4yK?1EQl^e z16YMU@#)xpF}7c}ApE`{7tZ8*SDb}=(Noj^{t)O3y z7N8w}iEgqV(Ev}Q9cNz@EQe(0UW)W83k=fRMY z;^++OpvS6dbPzhwz339HK=0cWeFsy!Ki2o7DLxXtfFAEW4~2e;q8Y6H5a-|2wWPs_ zdZORi#>X4(M`yeez3+`!{{+iW{|UW6`{Izn@@QbS(M{R}4XgtiP=9m+6VXjMZ!zcJ zj@QuO8oi9}<`3fy`_V}MKp#wB67Ihey}x3tUmNQk(T)e88JmPI!voFHUEc={bRc?K#-kt8v(PnOfM#$VHpcDfb6Fk^_vJ+ID}eS> z6WtTZ>*5Vv(SiHK3q#Npjz?4aKQxtd(2P8a&S)L_+}7B>6MgRcc>Oq5qMo)a3|Ix7 zc_Sp#$wYSw{(L_IP0cKHpcUv$H(&$YhQ5mbi?)0uyt3~@_sDB#M)sine1m>RJcZ7< z>hkd2uPK`GmYDj~=t#jCc8NFiMN>B*Is#q8vC;pb11*RyMvw2K(WlYWZi;R}Gx8Za z@OS7Q`w3G&|DTTyIUWtE$v|(Yk8YytV|^Glqkb3OfN!FiDzG9vR}Q_uDfYoWH~?S7 za+vqAa9;y7V_h-n*Wob~jCed6X)-z=dr^M`Tj1|F7Hh3cPfWozXy%Hq3Nx#Ksm+D% zk?Sz^=0x|(05sq`&?TC?it}HY!YUekGkuB~_%qhS%O4MsHbpz=i|+FAnA-K|bL+4^ zet^aCKkSOvtPb^Y*qi!7G=O7xKmM~i8B%@U6XCa8E3p|DK1OGjZB6*nSpeHpABDER zjPByivHmr>Sr4HB{E2O_;M(wG`AwKkeIc5ehtPi3Bq3ec*9@uhU`y;8#2%b8=#SQ zMBjWj#rCn-kNUl6#|Lp1p2gNU<>@fNt>{vHg+6}@t9$;_o(bRAYoY@UMGApl*q{17?1J?+h3j*$EcJ)6 z9&W~xcn%%-%9q1^CD0|Pjs?>AnK4PBDGj|}2{U*YP5GBt2Xns~{s^TNx@l%(8{CO) zvEXZAY5LdVoe6H2`v{^({ln%S?>rTPa%t2GV3SEj9WBZrrlK+aS@Bdle4xd`Z&vIvmZwUFfIV60C+#q3?yS(bMxote-;f`v={OIo=5YmP7AriavKervCn49|}f1 z1f9`j^c>%d{%H0%`rrrXIp2dW&EDuiw8Nw51kRut&AK`4m0W1O7rOgzjP=o&G}3Vt z8sXjXhIg<#^&RLy#orAbmqRmgZLIgf>!{y?zAs)xCvY6ybZ4+J=6f$3*DiQ7^-cIH z7T?18cYv?A#1{_QLE)`oEi=$fSr@&p7kVoCV>?`o1MvVlk*4p5K)YZW>ch~zG%vO< zK{N3jnz4=VC&L@*?bxs#eM5bLZl(jV{VckciESZ}qR~?5CaZ*Y*ciR99r{@@6rIqW z=zVvifj)%pp|wd0zHq)oZ`_B|@i02$!5@UZFdD7TMhAKTJ&uo}dtzO5WAqjDl)Q=F zzXjbxJJCI`ADv+G7zHEyFW!*n!*D~fXeDgP^#*8W{)YxK7Y$$$8o+9F^F4(Q@K*HW z*uFQ`e?$AZfGkZik!5?>RJqY(S1HyzMMuZ>S?G)9SuBs+(Y^6Idj9i#6n;}u9{muy z9=(4qmcysfQ}r48!|iWa)zAN2ABR_BV{~TY(3IVYc02=};RYIV&OFPWFkn$M^;OUSlXc^T4zb}T zbhqAyekd(QclEk>{R1?``(yoAbjFD!SCyLw9{&^wbPSmwFVY&i`5pe)zl) z8WP9R8_%Ne>VMEwrF|JX%8%}uqG$%nL>t8Rj_8v1Mgtff>r1uuqS_OEQ{Ig=@j0xB z-^Y5^Z#e%pG@_7!!*LbPMmJ%({lT7CmioO|4xd8<-h<6B_qSp9cfrck@5Va#0($=u z?29?R3qLE4z%kU{|BmzDl|uFJ!E4D zFX*253q4lpN5ZDehJHxpMK^09+=4yP^IrI;u!I>{fqEPC{gNC{VFiVE(MWInIsE#3 zA~sE9H>110;jwU>nxnhB8=9g1=-!wR>&wyIz5$)khvh4S^g*1O6|X?YHn;Al2f{9E{yhMM>XdhE*l5#9$)&vmj5{^ap!esPAYC3xVTgbUjd=gA1exTr{xDYSo{wt)a9C~AuXfI6d0W_co z(Ey)BGx2=%&3Jt~I@A5=DL9FallVIN@%k#P zPyKoH&G|DrvwP3Sz_1+kC(#M)#IpDkx`a6{g#PMc>d*gLQ*b7I(9JOr-E5;``y@1# zNpy{8qW3+3W@1^qz7EaAi)i4R(ZIh!1O6q}Oa2oAu8B!^e{%}%{G4{mY z&;VNe8_soGY(>2z*1?C+34DxZVt1?`LO1g<^i6mc-5Yr?hQP1B$oY5kRHMO2o1q-I-!B}M+Y8`F79SxwyrLdV=VLR%*V|_K6sZCfLui#M5!zO5^KEdlTPgx^`vI2kW4l^m=qHyQ8n*erSi2 zV*Ot9xm9R?8=_lc`xof*KcW-)74!S~e~N;eB2(625p?EN&~w`yYvD*t?G?O*`b*dY zGp@*#@WpgHw#P@X8y-P3Q!iV{U}tokk!ax4@EXQX%%xBgpRoaVpffyZj^uCqx`np(uGhW}09?!jKrgP*@h6gI;&XoF` zuaACx9)}*A4d_7cp#yz}rt~m&z+>p9s+}iO>IHKxdVd@Abo4^s`Qy>0eiX-G(Y%>b z|L)kFB!%l~IE~j~lYE&{FOqw3A@zM&9Y^KQl==Z>IU2x8bTj>l29T{l7&srgc}qm= zpfhcU?y-^4dFT=+U!c&5!kc(AUQsX%a68)3RP;k>)YrO zet|y!Yiz%SRj3y#lqvN?XiMaMkxY!G;Eng7n{X-G@!IG*^xgdux))Qip;Av_g+X7xefHkL}aZRLw&JdpOotq5(aJ zF2$Q@hCYk+@8b2-Sc~?wBAHTOx$2;A$}w2ZO_8MFCV3ib;BL&oOjm~X(&%SICwvMY zLTA+Qs*v*Q(c?D+-E>pYi9C$HC!WU){22Z2csyROT$D{&f`%3p{I)t2JL5fQM|;p+ zegb`?HMlx_=*&lFejs`h&A@-?9>`xTWUL|@KwWebc0B&F zO#VP;nEjeClVa%gTIdoqM+a&f9T2@Ex&U2@wdj}G7ttj+73-ynhlvg<&iOCy4K(;- z*p2S)%Q8ZHE_9|<(aqBY%|vJHgHNDu#DCCDoVi5Ud_~Xzi=lg~HhN!EG_ba4zde%_ zoY^om)f2EczKedrC|oieuR&Om`UrG0K8SX>5)JHWG}W)8o9jz7)kov?D@tWb{j&Nh zOuhTjQPDILCuR6+xsjc)3N z=<(bd+doA5OC~;x4c|tOL{Eep66ess(#wPnbD%RWh%QxGtcg|884beJ@kKY;^jKeu zrhYRT*bdC%`TvrF1MH6%j-aRE1o}YsvYAr9f-QmrsSiZ&--3S1?Lbp{4Bedn#p_wh zg*Rbtw4ZY5QrAW&&;nE6|GQIgvkXIDom0`xv=}{B&!97U2kl@l+QCognx8|LC|~)| zPieHh5!z30^iW=EziTk*h1V&#S$3m=oIyLtRv~myHrg=S37zp^bdTJLrEv}# z;PYsT-$MJ}hTiu*I`D~TdPUB^sVrPEQ|iCdDS@8T`RD`hVMF{JUF+(5v`Bz`ljd_c0gy?2hG56 zbOKY+`(~j_^B}q;YtYm23VQ!XXhsg8% zQ#7!j&;kEIGnKh&m`DyZGx=k^B%0X@=yS;ivCtarpgX$zhoPywH(q}j?Px7_$4#+* zdA0CdA#_IN(N}I$bf9VIKntSF(F{F}TRi`-Q%I*_a`mvL)6g}Vg}!K>Kwli6psC)4 zzOeS8&;5v|_-8c0^JoUL)(G!|Jm_-;(dUYzOI$G}=f4I8Bd?D}+!@Wp05tOP=$iiz zjeLIeG4#F{us^k#&yG{oPs{T82v0*gT5g*qci^&%i>8i;|1$+{{8Y; zxn78dva zKaVxw{M)de2G@2gx~5;CGye%&<0b5jts92>m*P6=>v0kGX%yD@I6Bh{=qAp2ZOBjs zH02}EB^r+&??;lc;YD=dZ_wlSD;mHRjl;)mDXdGqGgil0SPx%AXMPHu`QPaKB6pL} zUKMSxhi0}Dn%N;}|H)Al?C@SR)i0wRzK!mI571P7fo{Sduo0fb%2=^!cpvme_rf}? zg}-117Hbxkt_hlv4rsq4kc=b~w^ML{B>LvNA3dj=!VQVdSc&>a=!0kD_4MXpDRQEz zErkYN1wD3k(V4bK`|E=4p?>K3ABma${2xof2PUGanuD&*Ds=5%!#emM-hj1RgiPI! z&8RO$Q@a=K=QlLa#C0KnTxfd%tbygxrR!^*@e>cm3)|v_b7)4YwhYImF*=i>m>EZ- zZ^W_aeG|~Vb5C?Jx>QeLaeN6){T_64o39Ks zlf8?k@-wW0-=Q65YaM1@9BWapf(AYa-E1S!=kJa#YR&ogg|M0i*YG1WpgrhMt3RQe zGi#gh^}GRkTyI6+kTcL1%**KJ-HlG<8+0j;piB7=+Hd~0A%L>z64h;+3>~(l!3X=I zn`2n4k3o0!B=n2OD`1 zMQwWuz4wj`J@k%Bk=}bpsv(&`AdM6{44|SY7Mdf96e)s;R2dbq5EN7t3kVhjMa7ON z7F6Va-h1~zME$g9exSO(O!8U^a}eHN%nmxD@d z3)lhN11ivOpc2i~+r9RM4XYS70o9RCpe|J}P#qa=mYugUgF25O+<77|;%>~t|HJ}nc1nQU`0ok-6&j}_9@HHrh zf0#o4zV5Xu0ZLvC)NXGE%0Wj^fqQ}7z#ynSv=!7fkAUjj5m2Y*15oy-KgVk zg2eZHs0nx$RAxVcQoLmRT>af^TnrSy8Yl;KKy~6quou`791Y$JP6xjQlfi@m?jAb| zsxuV^x_hH3==}SiR!o#(4^R&Kfy#V1sFnpmRg`J#`JnU{gGx9Is`9nA-VLf_&x14fx1!E8|2!x9mM$`0izoX?e0gxF5qXN?pSpPyNPrK6>tz(3%nU@1kMHJa672Z z><6{$UjOP262clz^@y3;iQn}dTvwQM0Mhbuq@ zeAI9^s7hY}mGB#&93C?~2Wr>nAMVF^Pqc4 zrhuw&38>BcI;i98NpK(Kx`KLgngmt>*MjxHmp~ok?-Drw`Zz5$-aXH~!CtIqfos7- zU>KY@!F`VRCAuHKDWDv01QqZjP>EEV=>DK#B-oVoU0@w>AJ_*x3l0ZcOme?mC4gqk0Wg>uV;vuT-7ES**k0&0wh%_xt@6Z~^NNK?NR{ z>V9*&9n>ZCrMdnFgqYk8;|XvQ*mSbr^DwvylwzxN_mV6G<>)Zj8LW`ucYdG$SnxsC zAA@S?)J(UaRp70xzX8?Z)GYUY@EE8)_KacZCnidu!4&rg4!c0@iOy5qr`ub>eyk6G z6Tni_{LcSyG8;@{eHm0|lBPTF^PYpC_R_)`?t{!FP=%G5>3$tIA1u#$BN)*6f00Qe z7@vU8dHH^RmU~NmbGEy?OU&_m<|A(h4gmLqIu)h3bc4WApgOZ191s2l>XIbPb&um2 zFgNS(K;3|TGW5;UG3ERfXCj4aU|}!@41g_dJbjmeiqbe_!Vrb^Ivwpdn|f_GMoY`(0!op*~>r$co@_T7#hqKOohx=hP2GsF;9@HM`a;JN#R)8va6W9QJ?oKv~TKqK( zwe&ow4+q~ucN3Nc+pr!9s)7eWo&P;xZSWYV=YmV1I#}*5yCs78Pxz4pb4nm+7`SU91Qxv)1W$V22=$< z+WNAsi!62%stEQ*-T>5x(+p61Yn$ON(E0tJ5heo>><6{`OD}OVuK?;%ssX5$-T*4G z-k<^xH+~RQC#HkazYEl`I{!79XcM&q6<`FY^O*oT z*9e@;dXe!9FLNE&0_C_fs9S0*SOc61s*p9HF2x40I(Pt70$+kktiW>4zXUN%guOvI zNCTD7a!{3T2i3X*hKE4ymBXNp=P~1-0<{Oufa=6WQ1-bVaQWpxts8>>b|fZ)U|#FRHd(hjlt8P5-k3Zd+mFJ zYW*lsh0FvM_z_T@eF{{(w?a&`89oK&DEGtm;R9-y4+9l20aOB0L7j?4pgyeDfpWA1 zRBN+A=^qD`;Fq9w|6ia2H(Ti@))&+!4J9*?;%ra>mV&wzn?QBqFsMqt0s~;aM_m0n zU~AUx3}=GfSVur5bQx5l#aFqN$AE2Fw+GvRb3h6VdG<2VC3p=~t3NaR7VOXZ0;o=O zS?yLh7*wk#fV#HpK*=8iRpB06zYWUoX;7W|9n>+;x5kY#66~VS|2QTx+ze_{8~}5J zZy3G{YLmSWs%4kKN5P_N{ho8+POzz$=lVz8JKV8#?q^5U_3ma4g7UWoRH8dT75XCB zRpe{vgRnZ_@Cxg0A%ma1J9|G0-EuaGJGyY*)p9J+L z^)1*P%(s#AuN%PtCUTGp>IO6y)UI6wDuE|K?SZ|ZGXDV7z5P?epFvfa?=kn16alsA zN`Q^QZlDsK2I^yXG1vrr;W5sC9Fy}f^!YzzlUw;*P=ObMx<5Ps>KZ-*>QZe1mB=e5 ze-m_WM7BN!%Ki&boA4)4$FIOVOhMJsk@G0`=9#qb0ugRc$GgF2qSfy%hZ z7B}H4p!iKe1?mnez*tZTj5q!)P@g%>|{m!f+R;MBV^pcM?>b-$3X2zx0!?pcbfe z-T|x)jtAxVK2WD(3#d&N0af8kpejCQ_@(jx0ClN~ZgVRSfGVgds7u=#RH7Zhk~;q* znP~T?g7v_MKwaBcKn3^+)HOW^s*+sW-2kOPIj#vRp@yLJI)btrW;oI0vq5!wF{n+w z3Uq${w}*+Y$#bCg!U0gN`q0+Dfa*Zu9d5w#paNC{bzf)+>eLJYl|Y8c@3i$wP>JsV zwHICj)ya2vaQ=0TPr^`uFHPYBsLJx}bSo(eD#2=?T38p9yovE!fx16*1m&kcs68+W z)MvyLP_l4XU-Npf=I1pgOb+RG`(M0zCyP(ZirB zI{_-8v!DWh52_=7fa+ZSr(7%!%C0;pyHHIg3fLT!qD73%!AVWP^qg1Y8IKsic~ z0yrI1Lbrn2EBAuZTLY@qJ3s|^1(ctopgM8}ROLUJ-1CgfF9IsT>pgjrp|yOg4!F0K?OVp>Jokms*~Ru zKmT)XL1jWrK`JQ6^FX!kK~NQM2X$%=fC2Cfs7iC~bM4E6(z_m1 zLcKsGG8j~6#~6l^nJB<4Q&8ofa=U%P^~`*D&Pm85<3Sv$M1R9E&yti zH2}34n}X8s2rAw%kitWr6eg-P1S;TSP#LZQbqThDaFp)t|P=Q8+GE6s|Y5dzjbz%jmmaYPo zz>}aVdI3~|FN3;Nhe7F|02S~gs1AJ&s?ZCd^ZS1bzT|F>+Mp6?V(ZSJGVTk?@hzZs z|9DUV(rrD*a3QFKmVxrK0aQUxgVKKk)TMYIQ~_sS;{0n@{%VTe{qBvV45&c$4X+2~ zup_8ShZujPtrI|1nq>UR#-9Z$@%f-`-3x8K8Ps0ezCYwvxDSQ`907GF`xMk3_zhI+ zieCH1F;RdcpjvkvRBOHj z<={6^uVQ5nxPfj2^#n5jRG=hK-yh5YYl3S*UE_nG{JjTC?<}am7eU1<{IZLo(oD43 zDuZfmEl>&62US@cPzHlRIUEJ**d>EHH4ALL22|i@Kz+zk{8?!ms%C zZ_WAl-%NVII1e@jTOV|PLXiSCWW5Qz0Xz;i0*f7Te{@2`pQ85%8$odH|0A6;G^B;KK{Z6(6*crhDupPJ+%mTkNe%xU<;3lv&{7P@Q zZ@I%k=Q9E90{=n7kHHSCYrN_Hjpzih73=+A40s8wPJBQaebW&RPo`+Ob`$NFzH9@(#EFTpzm*~4-93}2ya7T@X&8f~^Y zkNghh)^;~Ki|!np@vm(?930OvbSL9z1qpr$K0pHA9QrK@`YXIOAdh{XH?VsI``xC~ z)%pI_oM$8Gg2ROve2=r{1dIBb$Qk+wc~Rsy;v^sQY1dS_5u2kVQV!ic`1pnOYV@jM za}VnQ)`2<}?@_9+ujfCWkUbxuSP+H!I;_y22#>f^&mPNSB`7if7}9gnE=?gEb3#2w z!DH|<@w0?64?Vu!_QWu+iru5;<3V&rz!&{MyrItjzrvz(fyPc?T6>j@z*Q$`Wj4xYu-7QP_J7QFC~q)>d(69Ng;iJx598WiyzJ zgR}4}nIox8B+!F6X$bE=68{U^D1C$7)9_mw?-0Jc=x(&+K10@+c{_?&ouB>>p(QuK zJRzqzYehoEF}lwTqK==V^65A_MRgsKUrTGPD{ZX0sJs+D??kp4`_q=x7%RG~e*ex} z81x{C^(3L+$tJqqsy_}-G#G;iZGI;SL~thBjqPllPsCpIDf|KOMuSU8G8P+sH`sys zqa-p7zo*dq0QsZxr}Mwug1%t^V0qdbuMP9>2^gh^;kRHsgYFUqCD?KjxS#1;IB&`N zW8{m#*6^<<@ongiX2erH?ORBoaBQdIyBs=|Na$UB|7OK};l@<`ykL;s8Oto*9JR*iVModX z2eK(R;CDtjbOTPd5i5(QW%P)SR4L~+>ULcS8+C_RQwKNj1- zyYRgZ+g<1t$L?XB|NRJ7n87oajEp~E{9yc>&}+fG4C5xZb)K?RHWJ$oU?UQk5C3`W z+tP(n=oPRe>!Kq%1>R0_C(yeKJd97L|0hsfiUI#Z-jihsoF~I(D9*<46LTOZH3&AE z^(bW5p?hZzSvUMd;JX)<`#nBIdkFRjm-u;-?8y2A^S0=YM*CU4pzqF+IUokrhTq zbkGIQDg29yBOi-g)Xw?-jmbE&8-tUr1V|;Bjwn>d*&VF!!!VKc3aciW3bJtWyd@(? zU6|Lhbr`#%_-hJgVY?f@q6sAQ4OjwMJ1{qV=TgO6m48@P=>*!2aU#agVAPVi=qtnP z;oru5F_ov~Na7v%`LWHy-&*u56G-$Sx&d_eBEMNhT0BJVR+&xUPpIluoc)UOPL$#? z7z>tzUkHN*%ta@u{5osxBCs|A52HJi!S@QDbJ!;_L?7XA89}#zALC~zxSVwv^R6g>>DKl8^) z;$_x8e9Ru+w1t<40 z|H0Oqk>7xB6Yw%l+cQLsz{8Apm|p~+#s4L%+EK7S62bfPaQ)}ut2(Hx2RFgOkGeGE?Fq$7Ag>uhi~)%SrXYQSat89#^c5v9e*n#&hsK1uMB z<(Y!5*K9)1AR7W>9KyUfj3fJX@cu$!IO9!Il*9KVqx~h}y+cxe;%qUz4H6n%LY_B= z%|a6V4c}*o@eVRfJo~LsOgSK=xHxKS5=+aK^W2p0`PM zJkCWk;Ju6P$E?ed(1+;0rizjAD?&W)AfLv%6SCWoy}?|Rm6z-Po;&w6!{G@OKSJ0X zM_-cdBAnh~*`{MGDo60{jE``9lF=5shtL(>$@(s^G(KvhGZOw^_-qW`P2ehw>G-}L z-b>(Hy8cHAP=`Rx2=F6V48y$4k79HgXRC2GpD~r|I~iUbf{2oFa;?+my zB~AnQ4Va&lANBuE7*Q$>voGs{jK^`TFQcjuq#cf0u>PI|9<^4VfZv_<&$7p^tOcu# z{7G12Et!Dv>#!b!zUVrzC;ZTJIoi{~6#I~+=xqXavw0Jj<@pqBVx20S!}bT8zmI-f z5~_{f8WI%sF#H7B32b9*&F`0U_n*ELTuFAT!Cx(F88)TmCoyP5w%21+fGQVQ@Cxt> zF$TfEM;(BA65s~xUqI(Q5~|9)L5?I3qjLwmo9Iv_dX9)5fdSUqOv5nGL>_ssI6SYFW5q>Waa|t#Lhx5l) z7_Gp`)|NO+Vx0xvj!cvRe-Z%}+GUzYpw0y7hu#9_`{7q5P!HC_mR3Dpa%tn^xk9VW zTLzjp5n%!NGeb4;PBca}Uz!S~G;VKmFKw&aYOXB1@uql~#fxp02bN-A&_jdHA zS)fKZdH|>2p(kp9-G|ICVB3lHTg=CR`r0!SS(F~brlR7PLUA-$nJS;enJ6EfXbipr zZ!q!!tjCzFD}ghp=ti(84v$dvE}Z$$jUl;P&>fF$23QfD@6ml4`Oo;71O7om%^0H4 z0GLTkmVt#ao{n;V3@hNc5%Zbwg3SNG`3w^1>X^BIoP_rlqX|yi;;yAPG?sf|O(a0`nuxGjaX} z^P36KfdG>jUl4eg>)3M~`(pT9jowD=zG3|sm4xBLQX&>&PW!_cE_S@NV#PQUlg?a5R>rMEdE$L8|S8?oQMF9o{qMt1XGYL!5{4 zDbhFBH&bZnd;WL;N0TrvPL}7*VQp|X<2MZJnZp9QM9?6d+<`2H`Dw-!_<2~*M0XT; zk};CNov`}}d3pSb-ecXJSe=mZ>pDez!KW(8?2KhL)4Jh^`J)HU_u@E8&)|F@N&n9H z)tCivJd4UjZ{m18`X`wWG~O20<1C5g%v+Ga!;Vj`e_I6V(vvXaaoS4@=oOrnhu5Dm zi=f{bzoa=$NB$?(q=J`7x`k`zxgPyrEm&RnxtZ@qrwjbsC}x5>fR9rY+&RQzHj8Ft zor2OTnD?VNpY=Y1iu$r%h~6v`7z7qEzGU&N_h9o9^9ksUA;9&>Z)NanIz7ek*&3ZT z@PA|8n^+a#-%n!wvD5v>(~HFgO^n`0;ah?|f|F-Zs!La{rF(ET3cGvIO)&XUDm`V% zJpykp>ka4(GhPDoG4Mx&A!I$BU$BDbHDou}B2++l8mHq(;8}BghG0))Fa*p=%g~z+ zV+J-if(uz^(1npyd?Wh5z)xW=N`!xiIHF?ciMB-V|Ls}KBVZSda#Ag-?}K3qjzquU zthzgO{@vVmbHraR@!W^=8%cN8aU_Zu#-Nmkpi9B+IJ*n{17~d+$KgMZ;WiwIj>0>JJb}yh zB*C9W_9G*mPQD8NApAQl`8@dg-jaI}+u!8C-T%(aa~{PW7^LH%HpZfdnGb+p55o%9 zUh(@8pcvz3WI=StF-D;~7`>7tDXNFB^%qB{sQgLd|WpAWsc%)bW%$ZvrcrPc73!`lj@1oK7&oM6I4 z;;cmXdaw>y9iO2aQF@U@DmW6wOoS&0Jc;TGGA5DC?~HeHbY?sJLacXk38M5o&fcM- zi);z~SH!Sq4}9}lW%vXk$G*5&Vs)YXdCl3$PQYimk6B1T2vfAYmxV7{*=REqha?F zMRdhB1KF!qc_9jJp&#&fv+Qp-tc#PM8O2TU6`UWyu#l|}nBza-zs)>IBJl)y){+=Q z7lxqwEyWx$n`#uYovu}7h@J<(CEhLi50=`acqc};6SM&a^>Mh-TDgyT7Q8rgZUp<9 z!^IZtE%XxM4K@C00%c({frLeQsInF70m%E{zXm~DgQ5~jM$ccrll>G7%P>Uc8B=hu zmGKjSD}i6&MD!f%8KzeOrxoBo4ewQ)&9bCjP2ML7bQk=eN%kfS8kJSUXL)4K^Iw$t z4T;ROMRn%+8QrWhvH!HH>k)Lj1$#tQK*NyfW;Vpu9ZgrV8{n5fKOMU}@Y#h?$-Ufe z{EcK2gW(1$Nw9!PC_l~!V*CZlbFJ!wRPrMFAEJLy`Z$}i-wK%+hlb((S_XTuDARo?ngd{|t8BW31%>?}ook!t4WqvnDpZ|MW zCAXp^dH@`1N?Iop^eaY99EciQqUGT|V3mZ;*41$TY-4&6f_`o>PU1J#x>H0y;4gs_ z(cO$ssHzR^6(ync5|w_E!|^jX`V{$JU>x$>E%;OD@Rx`kdV@ft;a^Yi7cHm+H!&jU zZF97EQ$qiMe!zc@(Gz9ARb0dzJz~a}akc`T$IMVr&aUT==Wld*OG|FO2+VKYx^wbpX1<7*1K~A>WS@_=CC_m z8H@25bGsxB@zG14{}U0E!ng}YLt&l(o6z>jiHXiAV5aqx=; zO2O#@b1=;uZvcm(HwkA+mf)8J{s{Zq(f5&2O0etd(r6$#uDIt93CXtmvkhR@f7@9;XR0*m-(mo zsKNXIHh-~hgv~<~9V*M>aSTM)Bm9lE=sTRf>rOqRFzko3e(-Xm^90xRR~!^zh-%|# zCUVgt>?c!Yad1Dp3FzzhHi%k-jp0|aZg}+<$4+)P4xa>3#RBNoae@1JkF*v zuMNKeN;NTj$pUPG*Mj+GMir_!W>tI9Sz|g=vB^n!uzACHFQYfm;>}hu#P?Kzk!g-b zgDE(!PWIh!SlTL>BEEjtU+`IEn`n<^d7C+w(mg20qZlUoA;t^l^gBc8yocSx=snK-K6Ep| z`QYv7{0xeUkdSCAy65o2U(xjxA>k(a0sl6P*TAerh6})@j8%*m;FnQSDEiD%UU;G% zj3LbPqZenq-PWz)IB!o8t89Il^+))b0BB+E_+)-r#X zfI-U|l`Av=C-q3^b&OXs|AXM88MBorbUbHgxEy^*Viw~a{Cxp_K&;lx3o>5@h8DYa zSN^<+v%@$$O(Hc=+JVw0q}QLy|6_QmW|fzOio$CQiUu&}uUC7%L4S)SCjM~d zBfz&wLX?mHV8oexMm28}s1ezp1;1nM5C-$Dy@lZahP*kl5mZ(g{*2Bt)K6IQ9O+BYw$HP+-j|U9K}zW zmnEtDE%-+`ScTqZ0<1yyD*UC^rDCjSVRM)v+KA6|=652$VD>k`6P+i~PpNw74d47z_XL}N+nEES3BGTz7eDRfI)(96i*WOQeU z2DlLNOf{o-Q7p@R4UTUk=v(GkdQVw3u8sTWUpTrK{s{CwqJRLwKC?oe#fRw5YwQle zKS$SAqMMA};oS9juyl2uKZ}#Z&&+;AAxht(*a80S(Vv+*KR12ET>ozM%)%lKt<%Oo zKndRyt`zHv^g{o(U^4<7bbX6AeOtuuCMrnlA zE2F^#6WtEKH+V04`z*=3ZA<1ye;|p}ME({@wM3r9D2#3gv#*G5Lz^$e*LBFQ16z>D zI=wg5r`m5UqazrXL@27tc)?=zS!jD(Cr8BDU#U-zQVdUI0w5Y z34Q}>(O$c-nt#FksJ=ofKqj?VR3JbdjNWA23{O-M-ZXR`WF1GMpAd9#jxH^>WH%DH zH#)bF(4E+9R-&w*fuEQ8SWxu5CG4*3bMt9}r{d@#lzNhJ92tMkm@j2yPvNKoNs0W- z!|=NzuSB5N;XOlu=9bh5c!`YX@YUFY{)qle>{qew>v$nqbndkHo=F7x0pSKvGzI0$ z1c=fc3m#qHLlUB1;0-uBV1dS9U!V1HSL~^Z-Rn7Q=UTTUZU_HIUH{$~6(qx|R56O` z`=S&;;j~%^4W{j>1gKAiy}_T+pKnfoCV`p+6eZ%LGqTq#8JEkKH}IA*isQRCzCOVJ zAbdTB|Mcj6a}^4rmvCGSrvq4@M(KU4bRx2W$dYVb6Il<(g4SA9UL}gWY>v)-N|5R# z7=&L2n|Wq`BR0zzq3g)1C4zD0Y#&(E9E34GZU!G)klG}15&jzV(nxX|@_pF1W_{5* zaWA}ObYni97>>>@$g3cqijQX4-fwz)qSya>gby;JR0IV-)rcBmkb$#za5M)8n;5-J zCV4XRCkS-boK_^kzZjxC@M~fF0zSr()LUj3q`+m!Cgh_3HCfz^aXO0MptJ+y9|`t3 zb5R%O?^D66=rzUBTys7Qo+uHgOBoRoyA|FdcyBloJ^;Wi$mU_!9X|<-jo5c$y%qn} z^mFsQC^RP<(RiyO7s2+}d=j#%tm~rN0mG6QmIhykcNe1{iHq70ydgFhnPSIYto z!ue|EJ8&)UC8-aO(u`>zI*b1>?G za|qNE#SG?uVVq))DiZK5=1(#5sv;aNmpycjc@{}`#m9@-#lahd-cB%pKYcYK$|Si1 zR>&G+EWs{WKR!+)P+J^`;$V(K__Y~L2LHsdXchCt$SN>zfZcxZ9n)KGD7~!~q&3N8 z8~;Y|HEcz16K|aHL#Zg`q@oxH5zeK`wJ3IFUe6p>HY4e;MK0=L_8Um@bxX7u_zSXM z=-O`Z1$5`&YcS&$5^sh45%{O|_onig(OHC|8mvD7-zC^|3nG4BIx`((QC_pT8_Z{& zd%$F_21gLvZ>{1L*otmp+z3CJq#tLj)8CufX-dn?!DnQB45ydjXIgc4S&+xTxz>%l zkPYLSiWvE}G|gTKe&MX4G#j}jQR z=LYmXCGkVpJ+1TK2&TS0nobqf(U^+iLyV>buSX(ZfREb7YmZ)(N-#+wxt#Pd`Y+?- zUPXcyD~Q>4L{^IA&JyQkOYS=T!KnQTrgBY%&v7~5Rvd_e*Su-^|Jv&6QeUyU&&di@{9pbLrgxAxwQVLcRXw;=t= z{#yDPXDb={3~6h^k|g#fzSd#)Isxxx48mt_#t`_TLGYp!I*gzknO~sIe-Y#?73Ra~ zOq62aXP|k^lKK?>W#$o_e~jG6coUslaa^5I6aLSZa5TVcOs>PO40ctmh+QV!sPE0c z))s~C0n<_ZhD2_$fM=+tG5ipQcM;%QYq9iWk)?p26YyqiK18QF$-j)=!_22KhT^Y2 z;{$l2zI6B?^V^UWVO>n$n}{x;^a#wJmVFItkr(AEmdtI;Um@rWWS3RxI_K(@P#dCrXGUnPm~uO+gjB(V#uNU-t*O=Di2`5{Y4`m^!<5&pbppC8$4B$|ZnPmXV{e}5L6 z7#+m4DrDTuTHcwYZotW1IM0QSD9(cHCBSfGO$e~xc!kk>-U2=WZv=rJ!p9Tn-UQCU z$9pF4r5`nlmM|V*-WX?HQHn+R7p~W5wpn_^7v;sdD3(Oqp(84Svv!vF5a!?E=M4OM zmh41qHXy&%Y-Q7mbra;y{%>fN9w1n}RUxIqIC}!6wkVfjE`RGS5y^+aYs3)Ev_if_ zHy86Xd@ds39acaLcHNP6w)HvYAM1P5L&lJkqUNjx9XP}MW=l-660GaOpNOM8;1^W? zhjk!G(#;53!IJpg_~k6w#|gGBN8-ouHQMP0^$$ZRs&0vt!g)nYWEz{Q5Y8`HS01qz z4x<%eY!)*9BRZS5Dkw=cN7fvEW7ikI z7!ie)7`;a#hwS>vS#KQ3Z&3{Eqx_{+yd36jBvaHJ=R;4FisQA&UbbY!>zBjd2!g+i z&06%QqU&=Cr~k`w)*t81Ff2$1*5&BPQk=YOZETLtSqw#;zoU4dNRGwl{tUDL?WI70f#!J2V*mX@!`-YU&Y)GFY>h4 zd&=+c)1gy%Uj=Wo(t!aD5>pxs2*hP&WTqwu(*r|$cjy~#QrKIrU@(13VqDN=EY0oh z+$b?UE-NuJkQq!*PE3i-OiWD)Bx4qc&CHCAn-IuM4a8m*ri_ogp4xI5<`?$n^B3sQDbOK4 zK0TO`5x%XM_h_zxSxLe0pyJ+O-cD{Z;Vs3z8!ISh4~oPenwXxM6`K?=d8B6vFTX=K zDKTYIhMVlTU?47b9Pv}r$tXRTgmX`aq@+L&o#fa|>PbjUr#P_#nbXsPj#6@Be1nX% z*p#bvrly$V39(axlot$S#3rk{^k7P6Aa&ftU|eSC|7M%B!B--uq-G{2B*r;ycN0!c zPaN-Dhm`UEk`8sc*CiMq7{R5vl9>u}@<~h0NYq8l2*jmkrONn{j2?C?m(#4a5f($lb0n%E8_7je2zH(j{<1ZSMn`nThC};ey+J8$ZaxT?7xm3xaJvw`Or^d1Ubs_>|tJNg!bPlq!Rnila zW7DTQS2F5QZI;Zv$aL+ByU6)Fye)F&Ny*9#CQXl2U*s*7J6}9!KQ<*U7*1X6tsZH) z*n5|^bw*k+E-_)cZARxT#Rr}H5w3^!2~3?3OfmO~?0>G%)ez4v@t*V5Oh_D`mF`~l z%wTd_5;wxYgxHM0xZoAbV0>ila&N)BiT`#JgsV(>^hOGqu!eN>IXBYrl#{zl*-;u)W@w3;1v6~i?h$> zalxe2l<^snWgmIR741K8(4asEFBG&3(G`9n22S%%rCcBR_oO9iFeOiqdDnHNhj@E_mNB5E`7$?Tgb!k3CL1b1(w^ zQ7+YFG{hC|zcD#2S03@4bAPRs?of73uGxW^g&a{vQr38ag_{JuWh2LO z`Kp!9GmZnwLHnt^Z@j#PHM&~Slxt&MRrmZ4vW$NU z)z^Pm!2E}*7~!TtZ>dPVYQCxdlF?%sxOzatBWwDGjCDSoX7lOd96504K>48C+ z=|LV*BZcevs(K4wdDze1oV_{cvwnm6zWZ|(9g@O_nDY=F)Q5DqRBvC?w$4$COG?y3 zs@=xpQ+c@0ejL|&a!gMgmzBLakiCXSpMayybB=xbh4(i04f1A&?@#fSZo|hOEc$?&n8BSlUlZS5`P&ZZ+vUou0gujc0UoB}CIs1c(&tfkLL!ZD zUJQ7^%HBMYRIa`sEN1ZKdfozHMfMoWao{?ToerEcnaM#+Fz-sqi%sR{_lZu zq#3#JtS`2F1)doLx)~>Vm~h6N01hKE_^2=F_hy8*9{05_-{I<=@0$0VZB_i`D#!6? zlOx%Ne2t*58@M!F=g8UPzQW#GT~Y!Gu{=j=o8<6z&E5)cyXY$yxp2bQJ9m*jiM-$> z26@6y<{lDh_pxt6p75y8e9ekFTPu1(J)Of3_|!PpW;Th;Y@y{p(%sD*igFeDd*PAM@mK_pW4p*hVudzF4NjyBm7q@e@yNx>zd)(t^Fm!V{7>< zL|V1>f8nj}d?gU)oKM=AkiZqx$Nk@4ye_u!7s%g$=ZVc3K|bVSvnFQ+lLEZA#inz* z(bgl2y?NOK#-6VJpNbC;BqZ^nrq{2O|D|UQ14D^Se>e?nI6TKDXK&JV`j;0mUciR= z+ZAwMz-Z<*u_Fz~`KK4r3s`)XbEupydi2hfnMmq<4D%rNU()}p&`w&^`4#i_S3~n+ zmYQ70<8Fv63RmSOxhAjh+BE+=ga1FW{?B;f^vV7n;lcxbfyi@{{S$K+`}?)?3=VI* z!(X~Uz^*0hv8lc?1MD?Bn3Uns3z-VJrt=QpDZ>OgOggzia&p2WR{N_(x=-~ddRt$U zf@w!n2)Hk8|KRGS&CRyQRaJ-i?+LmW>p!viwjk!{ob-&QQ>9;@UaPiv7C%lvb4 zmHGD%y-1lA{_VL+#AWZ+r%jHB$;iu(_?LUH?XCN^kUyHOCp;$ASGHe{u0$V8t%Fw- z#s81in(9?2k>RWT{#-@){7g?w<258*+ddq(&R;#39-hK?uJc!RzGQJ8crtRn#Pwb0 nPs-!I#D&lG@|WxOzr3=gC1qt&dVm1Vv+RGqxJB0a59a=VXa%oK delta 67144 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 RLO!1MHuLX0<2@es{{U?+^2Y!G diff --git a/netbox/translations/fr/LC_MESSAGES/django.po b/netbox/translations/fr/LC_MESSAGES/django.po index d11763d39..9657c8e48 100644 --- a/netbox/translations/fr/LC_MESSAGES/django.po +++ b/netbox/translations/fr/LC_MESSAGES/django.po @@ -12,18 +12,18 @@ # thomas rivemale, 2024 # Jeff Gehlbach, 2024 # marcpaulchand , 2025 -# Jeremy Stretch, 2025 # Mathieu, 2025 # Étienne Brunel, 2025 +# Jeremy Stretch, 2025 # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-01-04 05:02+0000\n" +"POT-Creation-Date: 2025-03-06 05:01+0000\n" "PO-Revision-Date: 2023-10-30 17:48+0000\n" -"Last-Translator: Étienne Brunel, 2025\n" +"Last-Translator: Jeremy Stretch, 2025\n" "Language-Team: French (https://app.transifex.com/netbox-community/teams/178115/fr/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -41,7 +41,7 @@ msgstr "Clé" msgid "Write Enabled" msgstr "Écriture activée" -#: netbox/account/tables.py:35 netbox/core/choices.py:86 +#: netbox/account/tables.py:35 netbox/core/choices.py:102 #: netbox/core/tables/jobs.py:29 netbox/core/tables/tasks.py:79 #: netbox/extras/tables/tables.py:335 netbox/extras/tables/tables.py:566 #: netbox/templates/account/token.html:43 @@ -53,6 +53,7 @@ msgstr "Écriture activée" #: netbox/templates/extras/htmx/script_result.html:12 #: netbox/templates/extras/journalentry.html:22 #: netbox/templates/generic/object.html:58 +#: netbox/templates/htmx/quick_add_created.html:7 #: netbox/templates/users/token.html:35 msgid "Created" msgstr "Créé" @@ -98,34 +99,35 @@ msgstr "Votre mot de passe a été modifié avec succès." #: netbox/circuits/choices.py:21 netbox/dcim/choices.py:20 #: netbox/dcim/choices.py:102 netbox/dcim/choices.py:185 -#: netbox/dcim/choices.py:237 netbox/dcim/choices.py:1532 -#: netbox/dcim/choices.py:1608 netbox/dcim/choices.py:1658 -#: netbox/virtualization/choices.py:20 netbox/virtualization/choices.py:45 -#: netbox/vpn/choices.py:18 +#: netbox/dcim/choices.py:237 netbox/dcim/choices.py:1534 +#: netbox/dcim/choices.py:1592 netbox/dcim/choices.py:1642 +#: netbox/dcim/choices.py:1664 netbox/virtualization/choices.py:20 +#: netbox/virtualization/choices.py:46 netbox/vpn/choices.py:18 msgid "Planned" msgstr "Planifié" -#: netbox/circuits/choices.py:22 netbox/netbox/navigation/menu.py:305 +#: netbox/circuits/choices.py:22 netbox/netbox/navigation/menu.py:326 msgid "Provisioning" msgstr "Approvisionnement" #: netbox/circuits/choices.py:23 netbox/core/tables/tasks.py:22 #: netbox/dcim/choices.py:22 netbox/dcim/choices.py:103 #: netbox/dcim/choices.py:184 netbox/dcim/choices.py:236 -#: netbox/dcim/choices.py:1607 netbox/dcim/choices.py:1657 -#: netbox/extras/tables/tables.py:495 netbox/ipam/choices.py:31 -#: netbox/ipam/choices.py:49 netbox/ipam/choices.py:69 -#: netbox/ipam/choices.py:154 netbox/templates/extras/configcontext.html:25 +#: netbox/dcim/choices.py:1591 netbox/dcim/choices.py:1641 +#: netbox/dcim/choices.py:1663 netbox/extras/tables/tables.py:495 +#: netbox/ipam/choices.py:31 netbox/ipam/choices.py:49 +#: netbox/ipam/choices.py:69 netbox/ipam/choices.py:154 +#: netbox/templates/extras/configcontext.html:25 #: netbox/templates/users/user.html:37 netbox/users/forms/bulk_edit.py:38 -#: netbox/virtualization/choices.py:22 netbox/virtualization/choices.py:44 +#: netbox/virtualization/choices.py:22 netbox/virtualization/choices.py:45 #: netbox/vpn/choices.py:19 netbox/wireless/choices.py:25 msgid "Active" msgstr "Actif" #: netbox/circuits/choices.py:24 netbox/dcim/choices.py:183 -#: netbox/dcim/choices.py:235 netbox/dcim/choices.py:1606 -#: netbox/dcim/choices.py:1659 netbox/virtualization/choices.py:24 -#: netbox/virtualization/choices.py:43 +#: netbox/dcim/choices.py:235 netbox/dcim/choices.py:1590 +#: netbox/dcim/choices.py:1643 netbox/dcim/choices.py:1662 +#: netbox/virtualization/choices.py:24 netbox/virtualization/choices.py:44 msgid "Offline" msgstr "Hors ligne" @@ -137,7 +139,9 @@ msgstr "Déprovisionnement" msgid "Decommissioned" msgstr "Mis hors service" -#: netbox/circuits/choices.py:90 netbox/dcim/choices.py:1619 +#: netbox/circuits/choices.py:90 netbox/dcim/choices.py:1603 +#: netbox/templates/dcim/interface.html:135 +#: netbox/templates/virtualization/vminterface.html:77 #: netbox/tenancy/choices.py:17 msgid "Primary" msgstr "Primaire" @@ -155,195 +159,207 @@ msgstr "Tertiaire" msgid "Inactive" msgstr "Inactif" -#: netbox/circuits/filtersets.py:31 netbox/circuits/filtersets.py:198 -#: netbox/dcim/filtersets.py:98 netbox/dcim/filtersets.py:152 -#: netbox/dcim/filtersets.py:212 netbox/dcim/filtersets.py:333 -#: netbox/dcim/filtersets.py:464 netbox/dcim/filtersets.py:1021 -#: netbox/dcim/filtersets.py:1368 netbox/dcim/filtersets.py:1903 -#: netbox/dcim/filtersets.py:2146 netbox/dcim/filtersets.py:2204 -#: netbox/ipam/filtersets.py:341 netbox/ipam/filtersets.py:961 -#: netbox/virtualization/filtersets.py:45 -#: netbox/virtualization/filtersets.py:173 netbox/vpn/filtersets.py:358 +#: netbox/circuits/choices.py:107 netbox/templates/dcim/interface.html:275 +#: netbox/vpn/choices.py:63 +msgid "Peer" +msgstr "Peer" + +#: netbox/circuits/choices.py:108 netbox/vpn/choices.py:64 +msgid "Hub" +msgstr "Hub" + +#: netbox/circuits/choices.py:109 netbox/vpn/choices.py:65 +msgid "Spoke" +msgstr "Spoke" + +#: netbox/circuits/filtersets.py:37 netbox/circuits/filtersets.py:204 +#: netbox/circuits/filtersets.py:284 netbox/dcim/base_filtersets.py:22 +#: netbox/dcim/filtersets.py:99 netbox/dcim/filtersets.py:153 +#: netbox/dcim/filtersets.py:213 netbox/dcim/filtersets.py:334 +#: netbox/dcim/filtersets.py:465 netbox/dcim/filtersets.py:1022 +#: netbox/dcim/filtersets.py:1370 netbox/dcim/filtersets.py:2027 +#: netbox/dcim/filtersets.py:2270 netbox/dcim/filtersets.py:2328 +#: netbox/ipam/filtersets.py:928 netbox/virtualization/filtersets.py:139 +#: netbox/vpn/filtersets.py:358 msgid "Region (ID)" msgstr "Région (ID)" -#: netbox/circuits/filtersets.py:38 netbox/circuits/filtersets.py:205 -#: netbox/dcim/filtersets.py:105 netbox/dcim/filtersets.py:158 -#: netbox/dcim/filtersets.py:219 netbox/dcim/filtersets.py:340 -#: netbox/dcim/filtersets.py:471 netbox/dcim/filtersets.py:1028 -#: netbox/dcim/filtersets.py:1375 netbox/dcim/filtersets.py:1910 -#: netbox/dcim/filtersets.py:2153 netbox/dcim/filtersets.py:2211 -#: netbox/extras/filtersets.py:509 netbox/ipam/filtersets.py:348 -#: netbox/ipam/filtersets.py:968 netbox/virtualization/filtersets.py:52 -#: netbox/virtualization/filtersets.py:180 netbox/vpn/filtersets.py:353 +#: netbox/circuits/filtersets.py:44 netbox/circuits/filtersets.py:211 +#: netbox/circuits/filtersets.py:291 netbox/dcim/base_filtersets.py:29 +#: netbox/dcim/filtersets.py:106 netbox/dcim/filtersets.py:159 +#: netbox/dcim/filtersets.py:220 netbox/dcim/filtersets.py:341 +#: netbox/dcim/filtersets.py:472 netbox/dcim/filtersets.py:1029 +#: netbox/dcim/filtersets.py:1377 netbox/dcim/filtersets.py:2034 +#: netbox/dcim/filtersets.py:2277 netbox/dcim/filtersets.py:2335 +#: netbox/extras/filtersets.py:509 netbox/ipam/filtersets.py:935 +#: netbox/virtualization/filtersets.py:146 netbox/vpn/filtersets.py:353 msgid "Region (slug)" msgstr "Région (slug)" -#: netbox/circuits/filtersets.py:44 netbox/circuits/filtersets.py:211 -#: netbox/dcim/filtersets.py:128 netbox/dcim/filtersets.py:225 -#: netbox/dcim/filtersets.py:346 netbox/dcim/filtersets.py:477 -#: netbox/dcim/filtersets.py:1034 netbox/dcim/filtersets.py:1381 -#: netbox/dcim/filtersets.py:1916 netbox/dcim/filtersets.py:2159 -#: netbox/dcim/filtersets.py:2217 netbox/ipam/filtersets.py:354 -#: netbox/ipam/filtersets.py:974 netbox/virtualization/filtersets.py:58 -#: netbox/virtualization/filtersets.py:186 +#: netbox/circuits/filtersets.py:50 netbox/circuits/filtersets.py:217 +#: netbox/circuits/filtersets.py:297 netbox/dcim/base_filtersets.py:35 +#: netbox/dcim/filtersets.py:129 netbox/dcim/filtersets.py:226 +#: netbox/dcim/filtersets.py:347 netbox/dcim/filtersets.py:478 +#: netbox/dcim/filtersets.py:1035 netbox/dcim/filtersets.py:1383 +#: netbox/dcim/filtersets.py:2040 netbox/dcim/filtersets.py:2283 +#: netbox/dcim/filtersets.py:2341 netbox/ipam/filtersets.py:941 +#: netbox/virtualization/filtersets.py:152 msgid "Site group (ID)" msgstr "Groupe de sites (ID)" -#: netbox/circuits/filtersets.py:51 netbox/circuits/filtersets.py:218 -#: netbox/dcim/filtersets.py:135 netbox/dcim/filtersets.py:232 -#: netbox/dcim/filtersets.py:353 netbox/dcim/filtersets.py:484 -#: netbox/dcim/filtersets.py:1041 netbox/dcim/filtersets.py:1388 -#: netbox/dcim/filtersets.py:1923 netbox/dcim/filtersets.py:2166 -#: netbox/dcim/filtersets.py:2224 netbox/extras/filtersets.py:515 -#: netbox/ipam/filtersets.py:361 netbox/ipam/filtersets.py:981 -#: netbox/virtualization/filtersets.py:65 -#: netbox/virtualization/filtersets.py:193 +#: netbox/circuits/filtersets.py:57 netbox/circuits/filtersets.py:224 +#: netbox/circuits/filtersets.py:304 netbox/dcim/base_filtersets.py:42 +#: netbox/dcim/filtersets.py:136 netbox/dcim/filtersets.py:233 +#: netbox/dcim/filtersets.py:354 netbox/dcim/filtersets.py:485 +#: netbox/dcim/filtersets.py:1042 netbox/dcim/filtersets.py:1390 +#: netbox/dcim/filtersets.py:2047 netbox/dcim/filtersets.py:2290 +#: netbox/dcim/filtersets.py:2348 netbox/extras/filtersets.py:515 +#: netbox/ipam/filtersets.py:948 netbox/virtualization/filtersets.py:159 msgid "Site group (slug)" msgstr "Groupe de sites (slug)" -#: netbox/circuits/filtersets.py:56 netbox/circuits/forms/bulk_edit.py:188 -#: netbox/circuits/forms/bulk_edit.py:216 -#: netbox/circuits/forms/bulk_import.py:124 -#: netbox/circuits/forms/filtersets.py:51 -#: netbox/circuits/forms/filtersets.py:171 -#: netbox/circuits/forms/filtersets.py:209 -#: netbox/circuits/forms/model_forms.py:138 -#: netbox/circuits/forms/model_forms.py:154 -#: netbox/circuits/tables/circuits.py:113 netbox/dcim/forms/bulk_edit.py:169 -#: netbox/dcim/forms/bulk_edit.py:330 netbox/dcim/forms/bulk_edit.py:683 -#: netbox/dcim/forms/bulk_edit.py:888 netbox/dcim/forms/bulk_import.py:131 -#: netbox/dcim/forms/bulk_import.py:230 netbox/dcim/forms/bulk_import.py:331 -#: netbox/dcim/forms/bulk_import.py:562 netbox/dcim/forms/bulk_import.py:1333 -#: netbox/dcim/forms/bulk_import.py:1361 netbox/dcim/forms/filtersets.py:87 -#: netbox/dcim/forms/filtersets.py:225 netbox/dcim/forms/filtersets.py:342 -#: netbox/dcim/forms/filtersets.py:439 netbox/dcim/forms/filtersets.py:753 -#: netbox/dcim/forms/filtersets.py:997 netbox/dcim/forms/filtersets.py:1021 -#: netbox/dcim/forms/filtersets.py:1111 netbox/dcim/forms/filtersets.py:1149 -#: netbox/dcim/forms/filtersets.py:1584 netbox/dcim/forms/filtersets.py:1608 -#: netbox/dcim/forms/filtersets.py:1632 netbox/dcim/forms/model_forms.py:137 -#: netbox/dcim/forms/model_forms.py:165 netbox/dcim/forms/model_forms.py:238 -#: netbox/dcim/forms/model_forms.py:463 netbox/dcim/forms/model_forms.py:723 -#: netbox/dcim/forms/object_create.py:383 netbox/dcim/tables/devices.py:153 +#: netbox/circuits/filtersets.py:62 netbox/circuits/forms/filtersets.py:59 +#: netbox/circuits/forms/filtersets.py:182 +#: netbox/circuits/forms/filtersets.py:240 +#: netbox/circuits/tables/circuits.py:129 netbox/dcim/forms/bulk_edit.py:172 +#: netbox/dcim/forms/bulk_edit.py:333 netbox/dcim/forms/bulk_edit.py:686 +#: netbox/dcim/forms/bulk_edit.py:891 netbox/dcim/forms/bulk_import.py:133 +#: netbox/dcim/forms/bulk_import.py:232 netbox/dcim/forms/bulk_import.py:333 +#: netbox/dcim/forms/bulk_import.py:567 netbox/dcim/forms/bulk_import.py:1430 +#: netbox/dcim/forms/bulk_import.py:1458 netbox/dcim/forms/filtersets.py:88 +#: netbox/dcim/forms/filtersets.py:226 netbox/dcim/forms/filtersets.py:343 +#: netbox/dcim/forms/filtersets.py:440 netbox/dcim/forms/filtersets.py:754 +#: netbox/dcim/forms/filtersets.py:998 netbox/dcim/forms/filtersets.py:1022 +#: netbox/dcim/forms/filtersets.py:1112 netbox/dcim/forms/filtersets.py:1150 +#: netbox/dcim/forms/filtersets.py:1622 netbox/dcim/forms/filtersets.py:1646 +#: netbox/dcim/forms/filtersets.py:1670 netbox/dcim/forms/model_forms.py:141 +#: netbox/dcim/forms/model_forms.py:169 netbox/dcim/forms/model_forms.py:243 +#: netbox/dcim/forms/model_forms.py:473 netbox/dcim/forms/model_forms.py:734 +#: netbox/dcim/forms/object_create.py:383 netbox/dcim/tables/devices.py:164 #: netbox/dcim/tables/power.py:26 netbox/dcim/tables/power.py:93 -#: netbox/dcim/tables/racks.py:122 netbox/dcim/tables/racks.py:207 -#: netbox/dcim/tables/sites.py:134 netbox/extras/filtersets.py:525 -#: netbox/ipam/forms/bulk_edit.py:218 netbox/ipam/forms/bulk_edit.py:285 -#: netbox/ipam/forms/bulk_edit.py:484 netbox/ipam/forms/bulk_import.py:171 -#: netbox/ipam/forms/bulk_import.py:453 netbox/ipam/forms/filtersets.py:153 -#: netbox/ipam/forms/filtersets.py:231 netbox/ipam/forms/filtersets.py:432 -#: netbox/ipam/forms/filtersets.py:489 netbox/ipam/forms/model_forms.py:205 -#: netbox/ipam/forms/model_forms.py:669 netbox/ipam/tables/ip.py:245 -#: netbox/ipam/tables/vlans.py:118 netbox/ipam/tables/vlans.py:221 -#: netbox/templates/circuits/inc/circuit_termination_fields.html:6 -#: netbox/templates/dcim/device.html:22 +#: netbox/dcim/tables/racks.py:121 netbox/dcim/tables/racks.py:206 +#: netbox/dcim/tables/sites.py:133 netbox/extras/filtersets.py:525 +#: netbox/ipam/forms/bulk_edit.py:468 netbox/ipam/forms/bulk_import.py:452 +#: netbox/ipam/forms/filtersets.py:155 netbox/ipam/forms/filtersets.py:229 +#: netbox/ipam/forms/filtersets.py:435 netbox/ipam/forms/filtersets.py:530 +#: netbox/ipam/forms/model_forms.py:679 netbox/ipam/tables/vlans.py:87 +#: netbox/ipam/tables/vlans.py:197 netbox/templates/dcim/device.html:22 #: netbox/templates/dcim/inc/cable_termination.html:8 #: netbox/templates/dcim/inc/cable_termination.html:33 #: netbox/templates/dcim/location.html:37 #: netbox/templates/dcim/powerpanel.html:22 netbox/templates/dcim/rack.html:20 #: netbox/templates/dcim/rackreservation.html:28 -#: netbox/templates/dcim/site.html:28 netbox/templates/ipam/prefix.html:56 -#: netbox/templates/ipam/vlan.html:23 netbox/templates/ipam/vlan_edit.html:40 -#: netbox/templates/virtualization/cluster.html:42 +#: netbox/templates/dcim/site.html:28 netbox/templates/ipam/vlan.html:23 +#: netbox/templates/ipam/vlan_edit.html:48 #: netbox/templates/virtualization/virtualmachine.html:95 -#: netbox/virtualization/forms/bulk_edit.py:91 -#: netbox/virtualization/forms/bulk_edit.py:109 -#: netbox/virtualization/forms/bulk_edit.py:124 -#: netbox/virtualization/forms/bulk_import.py:59 -#: netbox/virtualization/forms/bulk_import.py:85 -#: netbox/virtualization/forms/filtersets.py:79 -#: netbox/virtualization/forms/filtersets.py:148 -#: netbox/virtualization/forms/model_forms.py:71 +#: netbox/virtualization/forms/bulk_edit.py:106 +#: netbox/virtualization/forms/bulk_import.py:60 +#: netbox/virtualization/forms/bulk_import.py:91 +#: netbox/virtualization/forms/filtersets.py:74 +#: netbox/virtualization/forms/filtersets.py:153 #: netbox/virtualization/forms/model_forms.py:104 -#: netbox/virtualization/forms/model_forms.py:171 -#: netbox/virtualization/tables/clusters.py:77 -#: netbox/virtualization/tables/virtualmachines.py:63 -#: netbox/vpn/forms/filtersets.py:266 netbox/wireless/forms/model_forms.py:76 -#: netbox/wireless/forms/model_forms.py:118 +#: netbox/virtualization/forms/model_forms.py:178 +#: netbox/virtualization/tables/virtualmachines.py:33 +#: netbox/vpn/forms/filtersets.py:266 netbox/wireless/forms/filtersets.py:88 +#: netbox/wireless/forms/model_forms.py:79 +#: netbox/wireless/forms/model_forms.py:121 msgid "Site" msgstr "Site" -#: netbox/circuits/filtersets.py:62 netbox/circuits/filtersets.py:229 -#: netbox/circuits/filtersets.py:274 netbox/dcim/filtersets.py:242 -#: netbox/dcim/filtersets.py:363 netbox/dcim/filtersets.py:458 -#: netbox/extras/filtersets.py:531 netbox/ipam/filtersets.py:240 -#: netbox/ipam/filtersets.py:371 netbox/ipam/filtersets.py:991 -#: netbox/virtualization/filtersets.py:75 -#: netbox/virtualization/filtersets.py:203 netbox/vpn/filtersets.py:363 +#: netbox/circuits/filtersets.py:68 netbox/circuits/filtersets.py:235 +#: netbox/circuits/filtersets.py:315 netbox/dcim/base_filtersets.py:53 +#: netbox/dcim/filtersets.py:243 netbox/dcim/filtersets.py:364 +#: netbox/dcim/filtersets.py:459 netbox/extras/filtersets.py:531 +#: netbox/ipam/filtersets.py:243 netbox/ipam/filtersets.py:958 +#: netbox/virtualization/filtersets.py:169 netbox/vpn/filtersets.py:363 msgid "Site (slug)" msgstr "Site (slug)" -#: netbox/circuits/filtersets.py:67 +#: netbox/circuits/filtersets.py:73 msgid "ASN (ID)" msgstr "ASN (ID)" -#: netbox/circuits/filtersets.py:73 netbox/circuits/forms/filtersets.py:31 -#: netbox/ipam/forms/model_forms.py:159 netbox/ipam/models/asns.py:108 -#: netbox/ipam/models/asns.py:125 netbox/ipam/tables/asn.py:41 +#: netbox/circuits/filtersets.py:79 netbox/circuits/forms/filtersets.py:39 +#: netbox/ipam/forms/model_forms.py:165 netbox/ipam/models/asns.py:105 +#: netbox/ipam/models/asns.py:122 netbox/ipam/tables/asn.py:41 #: netbox/templates/ipam/asn.html:20 msgid "ASN" msgstr "Numéro d'AS" -#: netbox/circuits/filtersets.py:95 netbox/circuits/filtersets.py:122 -#: netbox/circuits/filtersets.py:156 netbox/circuits/filtersets.py:283 -#: netbox/circuits/filtersets.py:325 netbox/ipam/filtersets.py:245 +#: netbox/circuits/filtersets.py:101 netbox/circuits/filtersets.py:128 +#: netbox/circuits/filtersets.py:162 netbox/circuits/filtersets.py:338 +#: netbox/circuits/filtersets.py:406 netbox/circuits/filtersets.py:482 +#: netbox/circuits/filtersets.py:550 netbox/ipam/filtersets.py:248 msgid "Provider (ID)" msgstr "Fournisseur (ID)" -#: netbox/circuits/filtersets.py:101 netbox/circuits/filtersets.py:128 -#: netbox/circuits/filtersets.py:162 netbox/circuits/filtersets.py:289 -#: netbox/circuits/filtersets.py:331 netbox/ipam/filtersets.py:251 +#: netbox/circuits/filtersets.py:107 netbox/circuits/filtersets.py:134 +#: netbox/circuits/filtersets.py:168 netbox/circuits/filtersets.py:344 +#: netbox/circuits/filtersets.py:488 netbox/circuits/filtersets.py:556 +#: netbox/ipam/filtersets.py:254 msgid "Provider (slug)" msgstr "Fournisseur (slug)" -#: netbox/circuits/filtersets.py:167 +#: netbox/circuits/filtersets.py:173 netbox/circuits/filtersets.py:493 +#: netbox/circuits/filtersets.py:561 msgid "Provider account (ID)" msgstr "Compte fournisseur (ID)" -#: netbox/circuits/filtersets.py:173 +#: netbox/circuits/filtersets.py:179 netbox/circuits/filtersets.py:499 +#: netbox/circuits/filtersets.py:567 msgid "Provider account (account)" msgstr "Compte du fournisseur (compte)" -#: netbox/circuits/filtersets.py:178 +#: netbox/circuits/filtersets.py:184 netbox/circuits/filtersets.py:503 +#: netbox/circuits/filtersets.py:572 msgid "Provider network (ID)" msgstr "Réseau fournisseur (ID)" -#: netbox/circuits/filtersets.py:182 +#: netbox/circuits/filtersets.py:188 msgid "Circuit type (ID)" msgstr "Type de circuit (ID)" -#: netbox/circuits/filtersets.py:188 +#: netbox/circuits/filtersets.py:194 msgid "Circuit type (slug)" msgstr "Type de circuit (slug)" -#: netbox/circuits/filtersets.py:223 netbox/circuits/filtersets.py:268 -#: netbox/dcim/filtersets.py:236 netbox/dcim/filtersets.py:357 -#: netbox/dcim/filtersets.py:452 netbox/dcim/filtersets.py:1045 -#: netbox/dcim/filtersets.py:1393 netbox/dcim/filtersets.py:1928 -#: netbox/dcim/filtersets.py:2170 netbox/dcim/filtersets.py:2229 -#: netbox/ipam/filtersets.py:234 netbox/ipam/filtersets.py:365 -#: netbox/ipam/filtersets.py:985 netbox/virtualization/filtersets.py:69 -#: netbox/virtualization/filtersets.py:197 netbox/vpn/filtersets.py:368 +#: netbox/circuits/filtersets.py:229 netbox/circuits/filtersets.py:309 +#: netbox/dcim/base_filtersets.py:47 netbox/dcim/filtersets.py:237 +#: netbox/dcim/filtersets.py:358 netbox/dcim/filtersets.py:453 +#: netbox/dcim/filtersets.py:1046 netbox/dcim/filtersets.py:1395 +#: netbox/dcim/filtersets.py:2052 netbox/dcim/filtersets.py:2294 +#: netbox/dcim/filtersets.py:2353 netbox/ipam/filtersets.py:237 +#: netbox/ipam/filtersets.py:952 netbox/virtualization/filtersets.py:163 +#: netbox/vpn/filtersets.py:368 msgid "Site (ID)" msgstr "Site (ID)" -#: netbox/circuits/filtersets.py:233 netbox/circuits/filtersets.py:237 +#: netbox/circuits/filtersets.py:239 netbox/circuits/filtersets.py:321 +#: netbox/dcim/base_filtersets.py:59 netbox/dcim/filtersets.py:259 +#: netbox/dcim/filtersets.py:370 netbox/dcim/filtersets.py:491 +#: netbox/dcim/filtersets.py:1058 netbox/dcim/filtersets.py:1406 +#: netbox/dcim/filtersets.py:2306 +msgid "Location (ID)" +msgstr "Lieu (ID)" + +#: netbox/circuits/filtersets.py:244 netbox/circuits/filtersets.py:248 msgid "Termination A (ID)" msgstr "Terminaison A (ID)" -#: netbox/circuits/filtersets.py:260 netbox/circuits/filtersets.py:320 -#: netbox/core/filtersets.py:77 netbox/core/filtersets.py:136 -#: netbox/core/filtersets.py:173 netbox/dcim/filtersets.py:751 -#: netbox/dcim/filtersets.py:1362 netbox/dcim/filtersets.py:2277 -#: netbox/extras/filtersets.py:41 netbox/extras/filtersets.py:63 -#: netbox/extras/filtersets.py:92 netbox/extras/filtersets.py:132 -#: netbox/extras/filtersets.py:181 netbox/extras/filtersets.py:209 -#: netbox/extras/filtersets.py:239 netbox/extras/filtersets.py:276 -#: netbox/extras/filtersets.py:348 netbox/extras/filtersets.py:391 -#: netbox/extras/filtersets.py:438 netbox/extras/filtersets.py:498 -#: netbox/extras/filtersets.py:657 netbox/extras/filtersets.py:703 -#: netbox/ipam/forms/model_forms.py:482 netbox/netbox/filtersets.py:282 -#: netbox/netbox/forms/__init__.py:22 netbox/netbox/forms/base.py:167 +#: netbox/circuits/filtersets.py:273 netbox/circuits/filtersets.py:375 +#: netbox/circuits/filtersets.py:537 netbox/core/filtersets.py:77 +#: netbox/core/filtersets.py:136 netbox/core/filtersets.py:173 +#: netbox/dcim/filtersets.py:752 netbox/dcim/filtersets.py:1364 +#: netbox/dcim/filtersets.py:2401 netbox/extras/filtersets.py:41 +#: netbox/extras/filtersets.py:63 netbox/extras/filtersets.py:92 +#: netbox/extras/filtersets.py:132 netbox/extras/filtersets.py:181 +#: netbox/extras/filtersets.py:209 netbox/extras/filtersets.py:239 +#: netbox/extras/filtersets.py:276 netbox/extras/filtersets.py:348 +#: netbox/extras/filtersets.py:391 netbox/extras/filtersets.py:438 +#: netbox/extras/filtersets.py:498 netbox/extras/filtersets.py:657 +#: netbox/extras/filtersets.py:703 netbox/ipam/forms/model_forms.py:492 +#: netbox/netbox/filtersets.py:286 netbox/netbox/forms/__init__.py:22 +#: netbox/netbox/forms/base.py:167 #: netbox/templates/htmx/object_selector.html:28 #: netbox/templates/inc/filter_list.html:46 #: netbox/templates/ipam/ipaddress_assign.html:29 @@ -355,97 +371,150 @@ msgstr "Terminaison A (ID)" msgid "Search" msgstr "Rechercher" -#: netbox/circuits/filtersets.py:264 netbox/circuits/forms/bulk_edit.py:172 -#: netbox/circuits/forms/bulk_edit.py:246 -#: netbox/circuits/forms/bulk_import.py:115 -#: netbox/circuits/forms/filtersets.py:198 -#: netbox/circuits/forms/filtersets.py:214 -#: netbox/circuits/forms/filtersets.py:260 -#: netbox/circuits/forms/model_forms.py:111 -#: netbox/circuits/forms/model_forms.py:133 -#: netbox/circuits/forms/model_forms.py:199 -#: netbox/circuits/tables/circuits.py:104 -#: netbox/circuits/tables/circuits.py:164 netbox/dcim/forms/connections.py:73 +#: netbox/circuits/filtersets.py:277 netbox/circuits/forms/bulk_edit.py:195 +#: netbox/circuits/forms/bulk_edit.py:284 +#: netbox/circuits/forms/bulk_import.py:128 +#: netbox/circuits/forms/filtersets.py:223 +#: netbox/circuits/forms/filtersets.py:250 +#: netbox/circuits/forms/filtersets.py:296 +#: netbox/circuits/forms/model_forms.py:139 +#: netbox/circuits/forms/model_forms.py:162 +#: netbox/circuits/forms/model_forms.py:262 +#: netbox/circuits/tables/circuits.py:108 +#: netbox/circuits/tables/circuits.py:203 netbox/dcim/forms/connections.py:73 #: netbox/templates/circuits/circuit.html:15 -#: netbox/templates/circuits/circuitgroupassignment.html:26 +#: netbox/templates/circuits/circuitgroupassignment.html:30 #: netbox/templates/circuits/circuittermination.html:19 #: netbox/templates/dcim/inc/cable_termination.html:55 #: netbox/templates/dcim/trace/circuit.html:4 msgid "Circuit" msgstr "Circuit" -#: netbox/circuits/filtersets.py:278 +#: netbox/circuits/filtersets.py:328 netbox/dcim/base_filtersets.py:66 +#: netbox/dcim/filtersets.py:266 netbox/dcim/filtersets.py:377 +#: netbox/dcim/filtersets.py:498 netbox/dcim/filtersets.py:1412 +#: netbox/extras/filtersets.py:542 +msgid "Location (slug)" +msgstr "Emplacement (slug)" + +#: netbox/circuits/filtersets.py:333 msgid "ProviderNetwork (ID)" msgstr "Réseau fournisseur (ID)" -#: netbox/circuits/filtersets.py:335 -msgid "Circuit (ID)" -msgstr "Circuit (ID)" - -#: netbox/circuits/filtersets.py:341 +#: netbox/circuits/filtersets.py:381 msgid "Circuit (CID)" msgstr "Circuit (CID)" -#: netbox/circuits/filtersets.py:345 +#: netbox/circuits/filtersets.py:386 +msgid "Circuit (ID)" +msgstr "Circuit (ID)" + +#: netbox/circuits/filtersets.py:391 +msgid "Virtual circuit (CID)" +msgstr "Circuit virtuel (CID)" + +#: netbox/circuits/filtersets.py:396 netbox/dcim/filtersets.py:1849 +msgid "Virtual circuit (ID)" +msgstr "Circuit virtuel (ID)" + +#: netbox/circuits/filtersets.py:401 +msgid "Provider (name)" +msgstr "Fournisseur (nom)" + +#: netbox/circuits/filtersets.py:410 msgid "Circuit group (ID)" msgstr "Groupe de circuits (ID)" -#: netbox/circuits/filtersets.py:351 +#: netbox/circuits/filtersets.py:416 msgid "Circuit group (slug)" msgstr "Groupe de circuits (slug)" -#: netbox/circuits/forms/bulk_edit.py:30 -#: netbox/circuits/forms/filtersets.py:56 -#: netbox/circuits/forms/model_forms.py:29 -#: netbox/circuits/tables/providers.py:33 netbox/dcim/forms/bulk_edit.py:129 -#: netbox/dcim/forms/filtersets.py:195 netbox/dcim/forms/model_forms.py:123 -#: netbox/dcim/tables/sites.py:94 netbox/ipam/models/asns.py:126 -#: netbox/ipam/tables/asn.py:27 netbox/ipam/views.py:213 -#: netbox/netbox/navigation/menu.py:172 netbox/netbox/navigation/menu.py:175 +#: netbox/circuits/filtersets.py:507 +msgid "Virtual circuit type (ID)" +msgstr "Type de circuit virtuel (ID)" + +#: netbox/circuits/filtersets.py:513 +msgid "Virtual circuit type (slug)" +msgstr "Type de circuit virtuel (slug)" + +#: netbox/circuits/filtersets.py:541 netbox/circuits/forms/bulk_edit.py:355 +#: netbox/circuits/forms/bulk_import.py:249 +#: netbox/circuits/forms/filtersets.py:372 +#: netbox/circuits/forms/filtersets.py:378 +#: netbox/circuits/forms/model_forms.py:343 +#: netbox/circuits/forms/model_forms.py:358 +#: netbox/circuits/tables/virtual_circuits.py:88 +#: netbox/templates/circuits/virtualcircuit.html:20 +#: netbox/templates/circuits/virtualcircuittermination.html:38 +msgid "Virtual circuit" +msgstr "Circuit virtuel" + +#: netbox/circuits/filtersets.py:577 netbox/dcim/filtersets.py:1269 +#: netbox/dcim/filtersets.py:1634 netbox/ipam/filtersets.py:601 +#: netbox/vpn/filtersets.py:102 netbox/vpn/filtersets.py:401 +msgid "Interface (ID)" +msgstr "Interface (ID)" + +#: netbox/circuits/forms/bulk_edit.py:42 +#: netbox/circuits/forms/filtersets.py:64 +#: netbox/circuits/forms/model_forms.py:42 +#: netbox/circuits/tables/providers.py:32 netbox/dcim/forms/bulk_edit.py:132 +#: netbox/dcim/forms/filtersets.py:196 netbox/dcim/forms/model_forms.py:127 +#: netbox/dcim/tables/sites.py:94 netbox/ipam/models/asns.py:123 +#: netbox/ipam/tables/asn.py:27 netbox/ipam/views.py:230 +#: netbox/netbox/navigation/menu.py:178 netbox/netbox/navigation/menu.py:181 #: netbox/templates/circuits/provider.html:23 msgid "ASNs" msgstr "Numéros d'AS" -#: netbox/circuits/forms/bulk_edit.py:34 netbox/circuits/forms/bulk_edit.py:56 -#: netbox/circuits/forms/bulk_edit.py:83 -#: netbox/circuits/forms/bulk_edit.py:104 -#: netbox/circuits/forms/bulk_edit.py:164 -#: netbox/circuits/forms/bulk_edit.py:183 -#: netbox/circuits/forms/bulk_edit.py:228 netbox/core/forms/bulk_edit.py:28 -#: netbox/dcim/forms/bulk_create.py:35 netbox/dcim/forms/bulk_edit.py:74 -#: netbox/dcim/forms/bulk_edit.py:93 netbox/dcim/forms/bulk_edit.py:152 -#: netbox/dcim/forms/bulk_edit.py:193 netbox/dcim/forms/bulk_edit.py:211 -#: netbox/dcim/forms/bulk_edit.py:289 netbox/dcim/forms/bulk_edit.py:438 -#: netbox/dcim/forms/bulk_edit.py:472 netbox/dcim/forms/bulk_edit.py:487 -#: netbox/dcim/forms/bulk_edit.py:546 netbox/dcim/forms/bulk_edit.py:590 -#: netbox/dcim/forms/bulk_edit.py:624 netbox/dcim/forms/bulk_edit.py:648 -#: netbox/dcim/forms/bulk_edit.py:721 netbox/dcim/forms/bulk_edit.py:782 -#: netbox/dcim/forms/bulk_edit.py:834 netbox/dcim/forms/bulk_edit.py:857 -#: netbox/dcim/forms/bulk_edit.py:905 netbox/dcim/forms/bulk_edit.py:975 -#: netbox/dcim/forms/bulk_edit.py:1028 netbox/dcim/forms/bulk_edit.py:1063 -#: netbox/dcim/forms/bulk_edit.py:1103 netbox/dcim/forms/bulk_edit.py:1147 -#: netbox/dcim/forms/bulk_edit.py:1192 netbox/dcim/forms/bulk_edit.py:1219 -#: netbox/dcim/forms/bulk_edit.py:1237 netbox/dcim/forms/bulk_edit.py:1255 -#: netbox/dcim/forms/bulk_edit.py:1273 netbox/dcim/forms/bulk_edit.py:1725 -#: netbox/extras/forms/bulk_edit.py:39 netbox/extras/forms/bulk_edit.py:149 -#: netbox/extras/forms/bulk_edit.py:178 netbox/extras/forms/bulk_edit.py:208 -#: netbox/extras/forms/bulk_edit.py:256 netbox/extras/forms/bulk_edit.py:274 -#: netbox/extras/forms/bulk_edit.py:298 netbox/extras/forms/bulk_edit.py:312 -#: netbox/extras/forms/bulk_edit.py:339 netbox/extras/tables/tables.py:79 -#: netbox/ipam/forms/bulk_edit.py:53 netbox/ipam/forms/bulk_edit.py:73 -#: netbox/ipam/forms/bulk_edit.py:93 netbox/ipam/forms/bulk_edit.py:117 -#: netbox/ipam/forms/bulk_edit.py:146 netbox/ipam/forms/bulk_edit.py:175 -#: netbox/ipam/forms/bulk_edit.py:194 netbox/ipam/forms/bulk_edit.py:276 -#: netbox/ipam/forms/bulk_edit.py:321 netbox/ipam/forms/bulk_edit.py:369 -#: netbox/ipam/forms/bulk_edit.py:412 netbox/ipam/forms/bulk_edit.py:428 -#: netbox/ipam/forms/bulk_edit.py:516 netbox/ipam/forms/bulk_edit.py:547 +#: netbox/circuits/forms/bulk_edit.py:46 netbox/circuits/forms/bulk_edit.py:68 +#: netbox/circuits/forms/bulk_edit.py:95 +#: netbox/circuits/forms/bulk_edit.py:116 +#: netbox/circuits/forms/bulk_edit.py:187 +#: netbox/circuits/forms/bulk_edit.py:207 +#: netbox/circuits/forms/bulk_edit.py:266 +#: netbox/circuits/forms/bulk_edit.py:307 +#: netbox/circuits/forms/bulk_edit.py:347 +#: netbox/circuits/forms/bulk_edit.py:371 netbox/core/forms/bulk_edit.py:28 +#: netbox/dcim/forms/bulk_create.py:35 netbox/dcim/forms/bulk_edit.py:77 +#: netbox/dcim/forms/bulk_edit.py:96 netbox/dcim/forms/bulk_edit.py:155 +#: netbox/dcim/forms/bulk_edit.py:196 netbox/dcim/forms/bulk_edit.py:214 +#: netbox/dcim/forms/bulk_edit.py:292 netbox/dcim/forms/bulk_edit.py:441 +#: netbox/dcim/forms/bulk_edit.py:475 netbox/dcim/forms/bulk_edit.py:490 +#: netbox/dcim/forms/bulk_edit.py:549 netbox/dcim/forms/bulk_edit.py:593 +#: netbox/dcim/forms/bulk_edit.py:627 netbox/dcim/forms/bulk_edit.py:651 +#: netbox/dcim/forms/bulk_edit.py:724 netbox/dcim/forms/bulk_edit.py:785 +#: netbox/dcim/forms/bulk_edit.py:837 netbox/dcim/forms/bulk_edit.py:860 +#: netbox/dcim/forms/bulk_edit.py:908 netbox/dcim/forms/bulk_edit.py:978 +#: netbox/dcim/forms/bulk_edit.py:1031 netbox/dcim/forms/bulk_edit.py:1066 +#: netbox/dcim/forms/bulk_edit.py:1106 netbox/dcim/forms/bulk_edit.py:1150 +#: netbox/dcim/forms/bulk_edit.py:1195 netbox/dcim/forms/bulk_edit.py:1222 +#: netbox/dcim/forms/bulk_edit.py:1240 netbox/dcim/forms/bulk_edit.py:1258 +#: netbox/dcim/forms/bulk_edit.py:1276 netbox/dcim/forms/bulk_edit.py:1746 +#: netbox/dcim/forms/bulk_edit.py:1787 netbox/extras/forms/bulk_edit.py:39 +#: netbox/extras/forms/bulk_edit.py:149 netbox/extras/forms/bulk_edit.py:178 +#: netbox/extras/forms/bulk_edit.py:208 netbox/extras/forms/bulk_edit.py:256 +#: netbox/extras/forms/bulk_edit.py:274 netbox/extras/forms/bulk_edit.py:298 +#: netbox/extras/forms/bulk_edit.py:312 netbox/extras/forms/bulk_edit.py:339 +#: netbox/extras/tables/tables.py:79 netbox/ipam/forms/bulk_edit.py:56 +#: netbox/ipam/forms/bulk_edit.py:76 netbox/ipam/forms/bulk_edit.py:96 +#: netbox/ipam/forms/bulk_edit.py:120 netbox/ipam/forms/bulk_edit.py:149 +#: netbox/ipam/forms/bulk_edit.py:178 netbox/ipam/forms/bulk_edit.py:197 +#: netbox/ipam/forms/bulk_edit.py:260 netbox/ipam/forms/bulk_edit.py:305 +#: netbox/ipam/forms/bulk_edit.py:353 netbox/ipam/forms/bulk_edit.py:396 +#: netbox/ipam/forms/bulk_edit.py:412 netbox/ipam/forms/bulk_edit.py:500 +#: netbox/ipam/forms/bulk_edit.py:532 netbox/ipam/forms/bulk_edit.py:575 +#: netbox/ipam/tables/vlans.py:240 netbox/ipam/tables/vlans.py:267 #: netbox/templates/account/token.html:35 -#: netbox/templates/circuits/circuit.html:59 +#: netbox/templates/circuits/circuit.html:69 #: netbox/templates/circuits/circuitgroup.html:32 #: netbox/templates/circuits/circuittype.html:26 -#: netbox/templates/circuits/inc/circuit_termination_fields.html:88 +#: netbox/templates/circuits/inc/circuit_termination_fields.html:83 #: netbox/templates/circuits/provider.html:33 #: netbox/templates/circuits/providernetwork.html:32 +#: netbox/templates/circuits/virtualcircuit.html:56 +#: netbox/templates/circuits/virtualcircuittermination.html:68 +#: netbox/templates/circuits/virtualcircuittype.html:26 #: netbox/templates/core/datasource.html:54 #: netbox/templates/core/plugin.html:80 netbox/templates/dcim/cable.html:36 #: netbox/templates/dcim/consoleport.html:44 @@ -456,13 +525,14 @@ msgstr "Numéros d'AS" #: netbox/templates/dcim/devicetype.html:33 #: netbox/templates/dcim/frontport.html:58 #: netbox/templates/dcim/interface.html:69 -#: netbox/templates/dcim/inventoryitem.html:60 +#: netbox/templates/dcim/inventoryitem.html:64 #: netbox/templates/dcim/inventoryitemrole.html:22 #: netbox/templates/dcim/location.html:33 +#: netbox/templates/dcim/macaddress.html:21 #: netbox/templates/dcim/manufacturer.html:40 #: netbox/templates/dcim/module.html:73 #: netbox/templates/dcim/modulebay.html:42 -#: netbox/templates/dcim/moduletype.html:37 +#: netbox/templates/dcim/moduletype.html:39 #: netbox/templates/dcim/platform.html:33 #: netbox/templates/dcim/powerfeed.html:40 #: netbox/templates/dcim/poweroutlet.html:40 @@ -489,12 +559,14 @@ msgstr "Numéros d'AS" #: netbox/templates/ipam/asnrange.html:38 #: netbox/templates/ipam/fhrpgroup.html:34 #: netbox/templates/ipam/ipaddress.html:55 -#: netbox/templates/ipam/iprange.html:67 netbox/templates/ipam/prefix.html:81 +#: netbox/templates/ipam/iprange.html:67 netbox/templates/ipam/prefix.html:77 #: netbox/templates/ipam/rir.html:26 netbox/templates/ipam/role.html:26 #: netbox/templates/ipam/routetarget.html:21 #: netbox/templates/ipam/service.html:50 #: netbox/templates/ipam/servicetemplate.html:27 #: netbox/templates/ipam/vlan.html:62 netbox/templates/ipam/vlangroup.html:34 +#: netbox/templates/ipam/vlantranslationpolicy.html:18 +#: netbox/templates/ipam/vlantranslationrule.html:26 #: netbox/templates/ipam/vrf.html:33 netbox/templates/tenancy/contact.html:67 #: netbox/templates/tenancy/contactgroup.html:25 #: netbox/templates/tenancy/contactrole.html:22 @@ -508,7 +580,7 @@ msgstr "Numéros d'AS" #: netbox/templates/virtualization/clustertype.html:26 #: netbox/templates/virtualization/virtualdisk.html:39 #: netbox/templates/virtualization/virtualmachine.html:31 -#: netbox/templates/virtualization/vminterface.html:51 +#: netbox/templates/virtualization/vminterface.html:47 #: netbox/templates/vpn/ikepolicy.html:17 #: netbox/templates/vpn/ikeproposal.html:17 #: netbox/templates/vpn/ipsecpolicy.html:17 @@ -518,119 +590,142 @@ msgstr "Numéros d'AS" #: netbox/templates/vpn/ipsecproposal.html:17 #: netbox/templates/vpn/l2vpn.html:26 netbox/templates/vpn/tunnel.html:33 #: netbox/templates/vpn/tunnelgroup.html:30 -#: netbox/templates/wireless/wirelesslan.html:26 +#: netbox/templates/wireless/wirelesslan.html:34 #: netbox/templates/wireless/wirelesslangroup.html:33 #: netbox/templates/wireless/wirelesslink.html:34 #: netbox/tenancy/forms/bulk_edit.py:32 netbox/tenancy/forms/bulk_edit.py:80 #: netbox/tenancy/forms/bulk_edit.py:122 netbox/users/forms/bulk_edit.py:64 #: netbox/users/forms/bulk_edit.py:82 netbox/users/forms/bulk_edit.py:112 -#: netbox/virtualization/forms/bulk_edit.py:32 -#: netbox/virtualization/forms/bulk_edit.py:46 -#: netbox/virtualization/forms/bulk_edit.py:100 -#: netbox/virtualization/forms/bulk_edit.py:177 -#: netbox/virtualization/forms/bulk_edit.py:228 -#: netbox/virtualization/forms/bulk_edit.py:337 +#: netbox/virtualization/forms/bulk_edit.py:33 +#: netbox/virtualization/forms/bulk_edit.py:47 +#: netbox/virtualization/forms/bulk_edit.py:82 +#: netbox/virtualization/forms/bulk_edit.py:159 +#: netbox/virtualization/forms/bulk_edit.py:210 +#: netbox/virtualization/forms/bulk_edit.py:327 #: netbox/vpn/forms/bulk_edit.py:28 netbox/vpn/forms/bulk_edit.py:64 #: netbox/vpn/forms/bulk_edit.py:121 netbox/vpn/forms/bulk_edit.py:155 #: netbox/vpn/forms/bulk_edit.py:190 netbox/vpn/forms/bulk_edit.py:215 #: netbox/vpn/forms/bulk_edit.py:247 netbox/vpn/forms/bulk_edit.py:274 -#: netbox/wireless/forms/bulk_edit.py:29 netbox/wireless/forms/bulk_edit.py:82 -#: netbox/wireless/forms/bulk_edit.py:140 +#: netbox/wireless/forms/bulk_edit.py:31 netbox/wireless/forms/bulk_edit.py:84 +#: netbox/wireless/forms/bulk_edit.py:143 msgid "Description" msgstr "Description" -#: netbox/circuits/forms/bulk_edit.py:51 netbox/circuits/forms/bulk_edit.py:73 -#: netbox/circuits/forms/bulk_edit.py:123 -#: netbox/circuits/forms/bulk_import.py:36 -#: netbox/circuits/forms/bulk_import.py:51 -#: netbox/circuits/forms/bulk_import.py:74 -#: netbox/circuits/forms/filtersets.py:70 -#: netbox/circuits/forms/filtersets.py:88 -#: netbox/circuits/forms/filtersets.py:116 -#: netbox/circuits/forms/filtersets.py:131 -#: netbox/circuits/forms/filtersets.py:199 -#: netbox/circuits/forms/filtersets.py:232 -#: netbox/circuits/forms/filtersets.py:255 -#: netbox/circuits/forms/model_forms.py:47 -#: netbox/circuits/forms/model_forms.py:61 -#: netbox/circuits/forms/model_forms.py:93 -#: netbox/circuits/tables/circuits.py:58 -#: netbox/circuits/tables/circuits.py:108 -#: netbox/circuits/tables/circuits.py:160 -#: netbox/circuits/tables/providers.py:72 -#: netbox/circuits/tables/providers.py:103 +#: netbox/circuits/forms/bulk_edit.py:63 netbox/circuits/forms/bulk_edit.py:85 +#: netbox/circuits/forms/bulk_edit.py:135 +#: netbox/circuits/forms/bulk_import.py:43 +#: netbox/circuits/forms/bulk_import.py:58 +#: netbox/circuits/forms/bulk_import.py:81 +#: netbox/circuits/forms/filtersets.py:78 +#: netbox/circuits/forms/filtersets.py:96 +#: netbox/circuits/forms/filtersets.py:124 +#: netbox/circuits/forms/filtersets.py:142 +#: netbox/circuits/forms/filtersets.py:224 +#: netbox/circuits/forms/filtersets.py:268 +#: netbox/circuits/forms/filtersets.py:291 +#: netbox/circuits/forms/filtersets.py:329 +#: netbox/circuits/forms/filtersets.py:337 +#: netbox/circuits/forms/filtersets.py:373 +#: netbox/circuits/forms/filtersets.py:396 +#: netbox/circuits/forms/model_forms.py:60 +#: netbox/circuits/forms/model_forms.py:76 +#: netbox/circuits/forms/model_forms.py:110 +#: netbox/circuits/tables/circuits.py:57 +#: netbox/circuits/tables/circuits.py:112 +#: netbox/circuits/tables/circuits.py:196 +#: netbox/circuits/tables/providers.py:70 +#: netbox/circuits/tables/providers.py:101 +#: netbox/circuits/tables/virtual_circuits.py:46 +#: netbox/circuits/tables/virtual_circuits.py:93 #: netbox/templates/circuits/circuit.html:18 +#: netbox/templates/circuits/circuitgroupassignment.html:26 #: netbox/templates/circuits/circuittermination.html:25 #: netbox/templates/circuits/provider.html:20 #: netbox/templates/circuits/provideraccount.html:20 #: netbox/templates/circuits/providernetwork.html:20 +#: netbox/templates/circuits/virtualcircuit.html:23 +#: netbox/templates/circuits/virtualcircuittermination.html:26 #: netbox/templates/dcim/inc/cable_termination.html:51 +#: netbox/templates/dcim/interface.html:166 msgid "Provider" msgstr "Prestataire" -#: netbox/circuits/forms/bulk_edit.py:80 -#: netbox/circuits/forms/filtersets.py:91 +#: netbox/circuits/forms/bulk_edit.py:92 +#: netbox/circuits/forms/filtersets.py:99 #: netbox/templates/circuits/providernetwork.html:28 msgid "Service ID" msgstr "Identifiant du service" -#: netbox/circuits/forms/bulk_edit.py:100 -#: netbox/circuits/forms/filtersets.py:107 netbox/dcim/forms/bulk_edit.py:207 -#: netbox/dcim/forms/bulk_edit.py:610 netbox/dcim/forms/bulk_edit.py:819 -#: netbox/dcim/forms/bulk_edit.py:1188 netbox/dcim/forms/bulk_edit.py:1215 -#: netbox/dcim/forms/bulk_edit.py:1721 netbox/dcim/forms/filtersets.py:1064 -#: netbox/dcim/forms/filtersets.py:1455 netbox/dcim/forms/filtersets.py:1479 -#: netbox/dcim/tables/devices.py:704 netbox/dcim/tables/devices.py:761 -#: netbox/dcim/tables/devices.py:1003 netbox/dcim/tables/devicetypes.py:249 -#: netbox/dcim/tables/devicetypes.py:264 netbox/dcim/tables/racks.py:33 -#: netbox/extras/forms/bulk_edit.py:270 netbox/extras/tables/tables.py:443 +#: netbox/circuits/forms/bulk_edit.py:112 +#: netbox/circuits/forms/bulk_edit.py:303 +#: netbox/circuits/forms/filtersets.py:115 +#: netbox/circuits/forms/filtersets.py:320 netbox/dcim/forms/bulk_edit.py:210 +#: netbox/dcim/forms/bulk_edit.py:613 netbox/dcim/forms/bulk_edit.py:822 +#: netbox/dcim/forms/bulk_edit.py:1191 netbox/dcim/forms/bulk_edit.py:1218 +#: netbox/dcim/forms/bulk_edit.py:1742 netbox/dcim/forms/filtersets.py:1065 +#: netbox/dcim/forms/filtersets.py:1323 netbox/dcim/forms/filtersets.py:1460 +#: netbox/dcim/forms/filtersets.py:1484 netbox/dcim/tables/devices.py:738 +#: netbox/dcim/tables/devices.py:794 netbox/dcim/tables/devices.py:1035 +#: netbox/dcim/tables/devicetypes.py:256 netbox/dcim/tables/devicetypes.py:271 +#: netbox/dcim/tables/racks.py:33 netbox/extras/forms/bulk_edit.py:270 +#: netbox/extras/tables/tables.py:443 #: netbox/templates/circuits/circuittype.html:30 +#: netbox/templates/circuits/virtualcircuittype.html:30 #: netbox/templates/dcim/cable.html:40 #: netbox/templates/dcim/devicerole.html:34 #: netbox/templates/dcim/frontport.html:40 #: netbox/templates/dcim/inventoryitemrole.html:26 +#: netbox/templates/dcim/poweroutlet.html:44 #: netbox/templates/dcim/rackrole.html:30 #: netbox/templates/dcim/rearport.html:40 netbox/templates/extras/tag.html:26 msgid "Color" msgstr "Couleur" -#: netbox/circuits/forms/bulk_edit.py:118 -#: netbox/circuits/forms/bulk_import.py:87 -#: netbox/circuits/forms/filtersets.py:126 netbox/core/forms/bulk_edit.py:18 -#: netbox/core/forms/filtersets.py:33 netbox/core/tables/change_logging.py:32 -#: netbox/core/tables/data.py:20 netbox/core/tables/jobs.py:18 -#: netbox/dcim/forms/bulk_edit.py:797 netbox/dcim/forms/bulk_edit.py:936 -#: netbox/dcim/forms/bulk_edit.py:1004 netbox/dcim/forms/bulk_edit.py:1023 -#: netbox/dcim/forms/bulk_edit.py:1046 netbox/dcim/forms/bulk_edit.py:1088 -#: netbox/dcim/forms/bulk_edit.py:1132 netbox/dcim/forms/bulk_edit.py:1183 -#: netbox/dcim/forms/bulk_edit.py:1210 netbox/dcim/forms/bulk_import.py:188 -#: netbox/dcim/forms/bulk_import.py:267 netbox/dcim/forms/bulk_import.py:730 -#: netbox/dcim/forms/bulk_import.py:756 netbox/dcim/forms/bulk_import.py:782 -#: netbox/dcim/forms/bulk_import.py:802 netbox/dcim/forms/bulk_import.py:885 -#: netbox/dcim/forms/bulk_import.py:979 netbox/dcim/forms/bulk_import.py:1021 -#: netbox/dcim/forms/bulk_import.py:1235 netbox/dcim/forms/bulk_import.py:1398 -#: netbox/dcim/forms/filtersets.py:955 netbox/dcim/forms/filtersets.py:1054 -#: netbox/dcim/forms/filtersets.py:1175 netbox/dcim/forms/filtersets.py:1247 -#: netbox/dcim/forms/filtersets.py:1272 netbox/dcim/forms/filtersets.py:1296 -#: netbox/dcim/forms/filtersets.py:1316 netbox/dcim/forms/filtersets.py:1353 -#: netbox/dcim/forms/filtersets.py:1450 netbox/dcim/forms/filtersets.py:1474 -#: netbox/dcim/forms/model_forms.py:703 netbox/dcim/forms/model_forms.py:709 -#: netbox/dcim/forms/object_import.py:84 +#: netbox/circuits/forms/bulk_edit.py:130 +#: netbox/circuits/forms/bulk_edit.py:331 +#: netbox/circuits/forms/bulk_import.py:94 +#: netbox/circuits/forms/bulk_import.py:221 +#: netbox/circuits/forms/filtersets.py:137 +#: netbox/circuits/forms/filtersets.py:358 +#: netbox/circuits/tables/circuits.py:65 +#: netbox/circuits/tables/circuits.py:200 +#: netbox/circuits/tables/virtual_circuits.py:58 +#: netbox/core/forms/bulk_edit.py:18 netbox/core/forms/filtersets.py:33 +#: netbox/core/tables/change_logging.py:32 netbox/core/tables/data.py:20 +#: netbox/core/tables/jobs.py:18 netbox/dcim/forms/bulk_edit.py:800 +#: netbox/dcim/forms/bulk_edit.py:939 netbox/dcim/forms/bulk_edit.py:1007 +#: netbox/dcim/forms/bulk_edit.py:1026 netbox/dcim/forms/bulk_edit.py:1049 +#: netbox/dcim/forms/bulk_edit.py:1091 netbox/dcim/forms/bulk_edit.py:1135 +#: netbox/dcim/forms/bulk_edit.py:1186 netbox/dcim/forms/bulk_edit.py:1213 +#: netbox/dcim/forms/bulk_import.py:190 netbox/dcim/forms/bulk_import.py:269 +#: netbox/dcim/forms/bulk_import.py:735 netbox/dcim/forms/bulk_import.py:761 +#: netbox/dcim/forms/bulk_import.py:787 netbox/dcim/forms/bulk_import.py:807 +#: netbox/dcim/forms/bulk_import.py:893 netbox/dcim/forms/bulk_import.py:987 +#: netbox/dcim/forms/bulk_import.py:1029 netbox/dcim/forms/bulk_import.py:1332 +#: netbox/dcim/forms/bulk_import.py:1495 netbox/dcim/forms/filtersets.py:956 +#: netbox/dcim/forms/filtersets.py:1055 netbox/dcim/forms/filtersets.py:1176 +#: netbox/dcim/forms/filtersets.py:1248 netbox/dcim/forms/filtersets.py:1273 +#: netbox/dcim/forms/filtersets.py:1297 netbox/dcim/forms/filtersets.py:1317 +#: netbox/dcim/forms/filtersets.py:1358 netbox/dcim/forms/filtersets.py:1455 +#: netbox/dcim/forms/filtersets.py:1479 netbox/dcim/forms/model_forms.py:714 +#: netbox/dcim/forms/model_forms.py:720 netbox/dcim/forms/object_import.py:84 #: netbox/dcim/forms/object_import.py:113 -#: netbox/dcim/forms/object_import.py:145 netbox/dcim/tables/devices.py:178 -#: netbox/dcim/tables/devices.py:814 netbox/dcim/tables/power.py:77 -#: netbox/dcim/tables/racks.py:138 netbox/extras/forms/bulk_import.py:42 +#: netbox/dcim/forms/object_import.py:146 netbox/dcim/tables/devices.py:189 +#: netbox/dcim/tables/devices.py:846 netbox/dcim/tables/power.py:77 +#: netbox/dcim/tables/racks.py:137 netbox/extras/forms/bulk_import.py:42 #: netbox/extras/tables/tables.py:405 netbox/extras/tables/tables.py:465 -#: netbox/netbox/tables/tables.py:240 +#: netbox/netbox/tables/tables.py:243 #: netbox/templates/circuits/circuit.html:30 +#: netbox/templates/circuits/virtualcircuit.html:39 +#: netbox/templates/circuits/virtualcircuittermination.html:64 #: netbox/templates/core/datasource.html:38 #: netbox/templates/dcim/cable.html:15 #: netbox/templates/dcim/consoleport.html:36 #: netbox/templates/dcim/consoleserverport.html:36 #: netbox/templates/dcim/frontport.html:36 #: netbox/templates/dcim/interface.html:46 -#: netbox/templates/dcim/interface.html:169 -#: netbox/templates/dcim/interface.html:311 +#: netbox/templates/dcim/interface.html:226 +#: netbox/templates/dcim/interface.html:368 #: netbox/templates/dcim/powerfeed.html:32 #: netbox/templates/dcim/poweroutlet.html:36 #: netbox/templates/dcim/powerport.html:36 @@ -640,65 +735,78 @@ msgstr "Couleur" #: netbox/templates/vpn/l2vpn.html:22 #: netbox/templates/wireless/inc/authentication_attrs.html:8 #: netbox/templates/wireless/inc/wirelesslink_interface.html:14 -#: netbox/virtualization/forms/bulk_edit.py:60 -#: netbox/virtualization/forms/bulk_import.py:41 +#: netbox/virtualization/forms/bulk_edit.py:61 +#: netbox/virtualization/forms/bulk_import.py:42 #: netbox/virtualization/forms/filtersets.py:54 -#: netbox/virtualization/forms/model_forms.py:62 +#: netbox/virtualization/forms/model_forms.py:65 #: netbox/virtualization/tables/clusters.py:66 #: netbox/vpn/forms/bulk_edit.py:264 netbox/vpn/forms/bulk_import.py:264 -#: netbox/vpn/forms/filtersets.py:217 netbox/vpn/forms/model_forms.py:84 -#: netbox/vpn/forms/model_forms.py:119 netbox/vpn/forms/model_forms.py:231 +#: netbox/vpn/forms/filtersets.py:217 netbox/vpn/forms/model_forms.py:85 +#: netbox/vpn/forms/model_forms.py:120 netbox/vpn/forms/model_forms.py:232 msgid "Type" msgstr "Type" -#: netbox/circuits/forms/bulk_edit.py:128 -#: netbox/circuits/forms/bulk_import.py:80 -#: netbox/circuits/forms/filtersets.py:139 -#: netbox/circuits/forms/model_forms.py:98 +#: netbox/circuits/forms/bulk_edit.py:140 +#: netbox/circuits/forms/bulk_edit.py:326 +#: netbox/circuits/forms/bulk_import.py:87 +#: netbox/circuits/forms/bulk_import.py:214 +#: netbox/circuits/forms/filtersets.py:150 +#: netbox/circuits/forms/filtersets.py:345 +#: netbox/circuits/forms/model_forms.py:116 +#: netbox/circuits/forms/model_forms.py:330 +#: netbox/templates/circuits/virtualcircuit.html:31 +#: netbox/templates/circuits/virtualcircuittermination.html:34 msgid "Provider account" msgstr "Identifiant de compte du prestataire" -#: netbox/circuits/forms/bulk_edit.py:136 -#: netbox/circuits/forms/bulk_import.py:93 -#: netbox/circuits/forms/filtersets.py:150 netbox/core/forms/filtersets.py:38 -#: netbox/core/forms/filtersets.py:79 netbox/core/tables/data.py:23 +#: netbox/circuits/forms/bulk_edit.py:148 +#: netbox/circuits/forms/bulk_edit.py:336 +#: netbox/circuits/forms/bulk_import.py:100 +#: netbox/circuits/forms/bulk_import.py:227 +#: netbox/circuits/forms/filtersets.py:161 +#: netbox/circuits/forms/filtersets.py:361 netbox/core/forms/filtersets.py:38 +#: netbox/core/forms/filtersets.py:80 netbox/core/tables/data.py:23 #: netbox/core/tables/jobs.py:26 netbox/core/tables/tasks.py:88 -#: netbox/dcim/forms/bulk_edit.py:107 netbox/dcim/forms/bulk_edit.py:182 -#: netbox/dcim/forms/bulk_edit.py:352 netbox/dcim/forms/bulk_edit.py:706 -#: netbox/dcim/forms/bulk_edit.py:771 netbox/dcim/forms/bulk_edit.py:803 -#: netbox/dcim/forms/bulk_edit.py:930 netbox/dcim/forms/bulk_edit.py:1744 -#: netbox/dcim/forms/bulk_import.py:88 netbox/dcim/forms/bulk_import.py:147 -#: netbox/dcim/forms/bulk_import.py:248 netbox/dcim/forms/bulk_import.py:527 -#: netbox/dcim/forms/bulk_import.py:681 netbox/dcim/forms/bulk_import.py:1229 -#: netbox/dcim/forms/bulk_import.py:1393 netbox/dcim/forms/bulk_import.py:1457 -#: netbox/dcim/forms/filtersets.py:178 netbox/dcim/forms/filtersets.py:237 -#: netbox/dcim/forms/filtersets.py:359 netbox/dcim/forms/filtersets.py:799 -#: netbox/dcim/forms/filtersets.py:924 netbox/dcim/forms/filtersets.py:958 -#: netbox/dcim/forms/filtersets.py:1059 netbox/dcim/forms/filtersets.py:1170 -#: netbox/dcim/tables/devices.py:140 netbox/dcim/tables/devices.py:817 -#: netbox/dcim/tables/devices.py:1063 netbox/dcim/tables/modules.py:70 -#: netbox/dcim/tables/power.py:74 netbox/dcim/tables/racks.py:126 -#: netbox/dcim/tables/sites.py:82 netbox/dcim/tables/sites.py:138 -#: netbox/ipam/forms/bulk_edit.py:256 netbox/ipam/forms/bulk_edit.py:306 -#: netbox/ipam/forms/bulk_edit.py:354 netbox/ipam/forms/bulk_edit.py:506 -#: netbox/ipam/forms/bulk_import.py:192 netbox/ipam/forms/bulk_import.py:257 -#: netbox/ipam/forms/bulk_import.py:293 netbox/ipam/forms/bulk_import.py:474 -#: netbox/ipam/forms/filtersets.py:210 netbox/ipam/forms/filtersets.py:281 -#: netbox/ipam/forms/filtersets.py:355 netbox/ipam/forms/filtersets.py:501 -#: netbox/ipam/forms/model_forms.py:501 netbox/ipam/tables/ip.py:237 -#: netbox/ipam/tables/ip.py:312 netbox/ipam/tables/ip.py:363 -#: netbox/ipam/tables/ip.py:426 netbox/ipam/tables/ip.py:453 -#: netbox/ipam/tables/vlans.py:126 netbox/ipam/tables/vlans.py:232 +#: netbox/dcim/forms/bulk_edit.py:110 netbox/dcim/forms/bulk_edit.py:185 +#: netbox/dcim/forms/bulk_edit.py:355 netbox/dcim/forms/bulk_edit.py:709 +#: netbox/dcim/forms/bulk_edit.py:774 netbox/dcim/forms/bulk_edit.py:806 +#: netbox/dcim/forms/bulk_edit.py:933 netbox/dcim/forms/bulk_edit.py:1723 +#: netbox/dcim/forms/bulk_edit.py:1765 netbox/dcim/forms/bulk_import.py:90 +#: netbox/dcim/forms/bulk_import.py:149 netbox/dcim/forms/bulk_import.py:250 +#: netbox/dcim/forms/bulk_import.py:532 netbox/dcim/forms/bulk_import.py:686 +#: netbox/dcim/forms/bulk_import.py:1137 netbox/dcim/forms/bulk_import.py:1326 +#: netbox/dcim/forms/bulk_import.py:1490 netbox/dcim/forms/bulk_import.py:1554 +#: netbox/dcim/forms/filtersets.py:179 netbox/dcim/forms/filtersets.py:238 +#: netbox/dcim/forms/filtersets.py:360 netbox/dcim/forms/filtersets.py:800 +#: netbox/dcim/forms/filtersets.py:925 netbox/dcim/forms/filtersets.py:959 +#: netbox/dcim/forms/filtersets.py:1060 netbox/dcim/forms/filtersets.py:1171 +#: netbox/dcim/forms/filtersets.py:1562 netbox/dcim/tables/devices.py:151 +#: netbox/dcim/tables/devices.py:849 netbox/dcim/tables/devices.py:983 +#: netbox/dcim/tables/devices.py:1095 netbox/dcim/tables/modules.py:70 +#: netbox/dcim/tables/power.py:74 netbox/dcim/tables/racks.py:125 +#: netbox/dcim/tables/sites.py:82 netbox/dcim/tables/sites.py:137 +#: netbox/ipam/forms/bulk_edit.py:240 netbox/ipam/forms/bulk_edit.py:290 +#: netbox/ipam/forms/bulk_edit.py:338 netbox/ipam/forms/bulk_edit.py:490 +#: netbox/ipam/forms/bulk_import.py:188 netbox/ipam/forms/bulk_import.py:256 +#: netbox/ipam/forms/bulk_import.py:292 netbox/ipam/forms/bulk_import.py:473 +#: netbox/ipam/forms/filtersets.py:212 netbox/ipam/forms/filtersets.py:284 +#: netbox/ipam/forms/filtersets.py:358 netbox/ipam/forms/filtersets.py:542 +#: netbox/ipam/forms/model_forms.py:511 netbox/ipam/tables/ip.py:183 +#: netbox/ipam/tables/ip.py:264 netbox/ipam/tables/ip.py:315 +#: netbox/ipam/tables/ip.py:378 netbox/ipam/tables/ip.py:405 +#: netbox/ipam/tables/vlans.py:95 netbox/ipam/tables/vlans.py:208 #: netbox/templates/circuits/circuit.html:34 +#: netbox/templates/circuits/virtualcircuit.html:43 #: netbox/templates/core/datasource.html:46 netbox/templates/core/job.html:48 #: netbox/templates/core/rq_task.html:81 netbox/templates/core/system.html:18 #: netbox/templates/dcim/cable.html:19 netbox/templates/dcim/device.html:178 +#: netbox/templates/dcim/inventoryitem.html:36 #: netbox/templates/dcim/location.html:45 netbox/templates/dcim/module.html:69 #: netbox/templates/dcim/powerfeed.html:36 netbox/templates/dcim/rack.html:41 #: netbox/templates/dcim/site.html:43 #: netbox/templates/extras/script_list.html:48 #: netbox/templates/ipam/ipaddress.html:37 -#: netbox/templates/ipam/iprange.html:54 netbox/templates/ipam/prefix.html:73 +#: netbox/templates/ipam/iprange.html:54 netbox/templates/ipam/prefix.html:69 #: netbox/templates/ipam/vlan.html:48 #: netbox/templates/virtualization/cluster.html:21 #: netbox/templates/virtualization/virtualmachine.html:19 @@ -706,63 +814,67 @@ msgstr "Identifiant de compte du prestataire" #: netbox/templates/wireless/wirelesslan.html:22 #: netbox/templates/wireless/wirelesslink.html:17 #: netbox/users/forms/filtersets.py:32 netbox/users/forms/model_forms.py:194 -#: netbox/virtualization/forms/bulk_edit.py:70 -#: netbox/virtualization/forms/bulk_edit.py:118 -#: netbox/virtualization/forms/bulk_import.py:54 -#: netbox/virtualization/forms/bulk_import.py:80 -#: netbox/virtualization/forms/filtersets.py:62 -#: netbox/virtualization/forms/filtersets.py:160 +#: netbox/virtualization/forms/bulk_edit.py:71 +#: netbox/virtualization/forms/bulk_edit.py:100 +#: netbox/virtualization/forms/bulk_import.py:55 +#: netbox/virtualization/forms/bulk_import.py:86 +#: netbox/virtualization/forms/filtersets.py:82 +#: netbox/virtualization/forms/filtersets.py:165 #: netbox/virtualization/tables/clusters.py:74 -#: netbox/virtualization/tables/virtualmachines.py:60 +#: netbox/virtualization/tables/virtualmachines.py:30 #: netbox/vpn/forms/bulk_edit.py:39 netbox/vpn/forms/bulk_import.py:37 #: netbox/vpn/forms/filtersets.py:47 netbox/vpn/tables/tunnels.py:48 -#: netbox/wireless/forms/bulk_edit.py:43 -#: netbox/wireless/forms/bulk_edit.py:105 -#: netbox/wireless/forms/bulk_import.py:43 -#: netbox/wireless/forms/bulk_import.py:84 -#: netbox/wireless/forms/filtersets.py:49 -#: netbox/wireless/forms/filtersets.py:83 +#: netbox/wireless/forms/bulk_edit.py:45 +#: netbox/wireless/forms/bulk_edit.py:108 +#: netbox/wireless/forms/bulk_import.py:45 +#: netbox/wireless/forms/bulk_import.py:89 +#: netbox/wireless/forms/filtersets.py:52 +#: netbox/wireless/forms/filtersets.py:111 #: netbox/wireless/tables/wirelesslan.py:52 -#: netbox/wireless/tables/wirelesslink.py:20 +#: netbox/wireless/tables/wirelesslink.py:19 msgid "Status" msgstr "Statut" -#: netbox/circuits/forms/bulk_edit.py:142 -#: netbox/circuits/forms/bulk_edit.py:233 -#: netbox/circuits/forms/bulk_import.py:98 -#: netbox/circuits/forms/bulk_import.py:158 -#: netbox/circuits/forms/filtersets.py:119 -#: netbox/circuits/forms/filtersets.py:241 netbox/dcim/forms/bulk_edit.py:123 -#: netbox/dcim/forms/bulk_edit.py:188 netbox/dcim/forms/bulk_edit.py:347 -#: netbox/dcim/forms/bulk_edit.py:467 netbox/dcim/forms/bulk_edit.py:696 -#: netbox/dcim/forms/bulk_edit.py:809 netbox/dcim/forms/bulk_edit.py:1749 -#: netbox/dcim/forms/bulk_import.py:107 netbox/dcim/forms/bulk_import.py:152 -#: netbox/dcim/forms/bulk_import.py:241 netbox/dcim/forms/bulk_import.py:356 -#: netbox/dcim/forms/bulk_import.py:501 netbox/dcim/forms/bulk_import.py:1241 -#: netbox/dcim/forms/bulk_import.py:1450 netbox/dcim/forms/filtersets.py:173 -#: netbox/dcim/forms/filtersets.py:205 netbox/dcim/forms/filtersets.py:323 -#: netbox/dcim/forms/filtersets.py:399 netbox/dcim/forms/filtersets.py:420 -#: netbox/dcim/forms/filtersets.py:722 netbox/dcim/forms/filtersets.py:916 -#: netbox/dcim/forms/filtersets.py:978 netbox/dcim/forms/filtersets.py:1008 -#: netbox/dcim/forms/filtersets.py:1130 netbox/dcim/tables/power.py:88 -#: netbox/extras/filtersets.py:612 netbox/extras/forms/filtersets.py:323 -#: netbox/extras/forms/filtersets.py:396 netbox/ipam/forms/bulk_edit.py:43 -#: netbox/ipam/forms/bulk_edit.py:68 netbox/ipam/forms/bulk_edit.py:112 -#: netbox/ipam/forms/bulk_edit.py:141 netbox/ipam/forms/bulk_edit.py:166 -#: netbox/ipam/forms/bulk_edit.py:251 netbox/ipam/forms/bulk_edit.py:301 -#: netbox/ipam/forms/bulk_edit.py:349 netbox/ipam/forms/bulk_edit.py:501 -#: netbox/ipam/forms/bulk_import.py:38 netbox/ipam/forms/bulk_import.py:67 -#: netbox/ipam/forms/bulk_import.py:95 netbox/ipam/forms/bulk_import.py:115 -#: netbox/ipam/forms/bulk_import.py:135 netbox/ipam/forms/bulk_import.py:164 -#: netbox/ipam/forms/bulk_import.py:250 netbox/ipam/forms/bulk_import.py:286 -#: netbox/ipam/forms/bulk_import.py:467 netbox/ipam/forms/filtersets.py:48 -#: netbox/ipam/forms/filtersets.py:68 netbox/ipam/forms/filtersets.py:100 -#: netbox/ipam/forms/filtersets.py:120 netbox/ipam/forms/filtersets.py:143 -#: netbox/ipam/forms/filtersets.py:174 netbox/ipam/forms/filtersets.py:267 -#: netbox/ipam/forms/filtersets.py:310 netbox/ipam/forms/filtersets.py:469 -#: netbox/ipam/tables/ip.py:456 netbox/ipam/tables/vlans.py:229 -#: netbox/templates/circuits/circuit.html:38 +#: netbox/circuits/forms/bulk_edit.py:154 +#: netbox/circuits/forms/bulk_edit.py:271 +#: netbox/circuits/forms/bulk_edit.py:342 +#: netbox/circuits/forms/bulk_import.py:111 +#: netbox/circuits/forms/bulk_import.py:170 +#: netbox/circuits/forms/bulk_import.py:232 +#: netbox/circuits/forms/filtersets.py:130 +#: netbox/circuits/forms/filtersets.py:277 +#: netbox/circuits/forms/filtersets.py:331 netbox/dcim/forms/bulk_edit.py:126 +#: netbox/dcim/forms/bulk_edit.py:191 netbox/dcim/forms/bulk_edit.py:350 +#: netbox/dcim/forms/bulk_edit.py:470 netbox/dcim/forms/bulk_edit.py:699 +#: netbox/dcim/forms/bulk_edit.py:812 netbox/dcim/forms/bulk_edit.py:1770 +#: netbox/dcim/forms/bulk_import.py:109 netbox/dcim/forms/bulk_import.py:154 +#: netbox/dcim/forms/bulk_import.py:243 netbox/dcim/forms/bulk_import.py:358 +#: netbox/dcim/forms/bulk_import.py:506 netbox/dcim/forms/bulk_import.py:1338 +#: netbox/dcim/forms/bulk_import.py:1547 netbox/dcim/forms/filtersets.py:174 +#: netbox/dcim/forms/filtersets.py:206 netbox/dcim/forms/filtersets.py:324 +#: netbox/dcim/forms/filtersets.py:400 netbox/dcim/forms/filtersets.py:421 +#: netbox/dcim/forms/filtersets.py:723 netbox/dcim/forms/filtersets.py:917 +#: netbox/dcim/forms/filtersets.py:979 netbox/dcim/forms/filtersets.py:1009 +#: netbox/dcim/forms/filtersets.py:1131 netbox/dcim/tables/power.py:88 +#: netbox/extras/filtersets.py:612 netbox/extras/forms/filtersets.py:330 +#: netbox/extras/forms/filtersets.py:403 netbox/ipam/forms/bulk_edit.py:46 +#: netbox/ipam/forms/bulk_edit.py:71 netbox/ipam/forms/bulk_edit.py:115 +#: netbox/ipam/forms/bulk_edit.py:144 netbox/ipam/forms/bulk_edit.py:169 +#: netbox/ipam/forms/bulk_edit.py:235 netbox/ipam/forms/bulk_edit.py:285 +#: netbox/ipam/forms/bulk_edit.py:333 netbox/ipam/forms/bulk_edit.py:485 +#: netbox/ipam/forms/bulk_import.py:41 netbox/ipam/forms/bulk_import.py:70 +#: netbox/ipam/forms/bulk_import.py:98 netbox/ipam/forms/bulk_import.py:118 +#: netbox/ipam/forms/bulk_import.py:138 netbox/ipam/forms/bulk_import.py:167 +#: netbox/ipam/forms/bulk_import.py:249 netbox/ipam/forms/bulk_import.py:285 +#: netbox/ipam/forms/bulk_import.py:466 netbox/ipam/forms/filtersets.py:50 +#: netbox/ipam/forms/filtersets.py:70 netbox/ipam/forms/filtersets.py:102 +#: netbox/ipam/forms/filtersets.py:122 netbox/ipam/forms/filtersets.py:145 +#: netbox/ipam/forms/filtersets.py:176 netbox/ipam/forms/filtersets.py:270 +#: netbox/ipam/forms/filtersets.py:313 netbox/ipam/forms/filtersets.py:510 +#: netbox/ipam/tables/ip.py:408 netbox/ipam/tables/vlans.py:205 +#: netbox/templates/circuits/circuit.html:48 #: netbox/templates/circuits/circuitgroup.html:36 +#: netbox/templates/circuits/virtualcircuit.html:47 #: netbox/templates/dcim/cable.html:23 netbox/templates/dcim/device.html:79 #: netbox/templates/dcim/location.html:49 #: netbox/templates/dcim/powerfeed.html:44 netbox/templates/dcim/rack.html:32 @@ -779,114 +891,181 @@ msgstr "Statut" #: netbox/templates/virtualization/cluster.html:33 #: netbox/templates/virtualization/virtualmachine.html:39 #: netbox/templates/vpn/l2vpn.html:30 netbox/templates/vpn/tunnel.html:49 -#: netbox/templates/wireless/wirelesslan.html:34 +#: netbox/templates/wireless/wirelesslan.html:42 #: netbox/templates/wireless/wirelesslink.html:25 -#: netbox/tenancy/forms/forms.py:25 netbox/tenancy/forms/forms.py:48 -#: netbox/tenancy/forms/model_forms.py:52 netbox/tenancy/tables/columns.py:64 -#: netbox/virtualization/forms/bulk_edit.py:76 -#: netbox/virtualization/forms/bulk_edit.py:155 -#: netbox/virtualization/forms/bulk_import.py:66 -#: netbox/virtualization/forms/bulk_import.py:115 +#: netbox/tenancy/forms/forms.py:25 netbox/tenancy/forms/forms.py:49 +#: netbox/tenancy/forms/model_forms.py:52 netbox/tenancy/tables/columns.py:49 +#: netbox/virtualization/forms/bulk_edit.py:77 +#: netbox/virtualization/forms/bulk_edit.py:137 +#: netbox/virtualization/forms/bulk_import.py:67 +#: netbox/virtualization/forms/bulk_import.py:121 #: netbox/virtualization/forms/filtersets.py:47 -#: netbox/virtualization/forms/filtersets.py:105 +#: netbox/virtualization/forms/filtersets.py:110 #: netbox/vpn/forms/bulk_edit.py:59 netbox/vpn/forms/bulk_edit.py:269 #: netbox/vpn/forms/bulk_import.py:59 netbox/vpn/forms/bulk_import.py:258 -#: netbox/vpn/forms/filtersets.py:214 netbox/wireless/forms/bulk_edit.py:63 -#: netbox/wireless/forms/bulk_edit.py:110 -#: netbox/wireless/forms/bulk_import.py:55 -#: netbox/wireless/forms/bulk_import.py:97 -#: netbox/wireless/forms/filtersets.py:35 -#: netbox/wireless/forms/filtersets.py:75 +#: netbox/vpn/forms/filtersets.py:214 netbox/wireless/forms/bulk_edit.py:65 +#: netbox/wireless/forms/bulk_edit.py:113 +#: netbox/wireless/forms/bulk_import.py:57 +#: netbox/wireless/forms/bulk_import.py:102 +#: netbox/wireless/forms/filtersets.py:38 +#: netbox/wireless/forms/filtersets.py:103 msgid "Tenant" msgstr "Entité" -#: netbox/circuits/forms/bulk_edit.py:147 -#: netbox/circuits/forms/filtersets.py:174 +#: netbox/circuits/forms/bulk_edit.py:159 +#: netbox/circuits/forms/filtersets.py:190 msgid "Install date" msgstr "Date d'installation" -#: netbox/circuits/forms/bulk_edit.py:152 -#: netbox/circuits/forms/filtersets.py:179 +#: netbox/circuits/forms/bulk_edit.py:164 +#: netbox/circuits/forms/filtersets.py:195 msgid "Termination date" msgstr "Date de résiliation" -#: netbox/circuits/forms/bulk_edit.py:158 -#: netbox/circuits/forms/filtersets.py:186 +#: netbox/circuits/forms/bulk_edit.py:170 +#: netbox/circuits/forms/filtersets.py:202 msgid "Commit rate (Kbps)" msgstr "Débit engagé (Kbits/s)" -#: netbox/circuits/forms/bulk_edit.py:173 -#: netbox/circuits/forms/model_forms.py:112 +#: netbox/circuits/forms/bulk_edit.py:176 +#: netbox/circuits/forms/filtersets.py:208 +#: netbox/circuits/forms/model_forms.py:136 +#: netbox/templates/circuits/circuit.html:38 +#: netbox/templates/wireless/wirelesslink.html:38 +#: netbox/wireless/forms/bulk_edit.py:132 +#: netbox/wireless/forms/filtersets.py:130 +#: netbox/wireless/forms/model_forms.py:168 +msgid "Distance" +msgstr "Distance" + +#: netbox/circuits/forms/bulk_edit.py:181 +#: netbox/circuits/forms/bulk_import.py:105 +#: netbox/circuits/forms/bulk_import.py:108 +#: netbox/circuits/forms/filtersets.py:212 +#: netbox/wireless/forms/bulk_edit.py:137 +#: netbox/wireless/forms/bulk_import.py:121 +#: netbox/wireless/forms/bulk_import.py:124 +#: netbox/wireless/forms/filtersets.py:134 +msgid "Distance unit" +msgstr "Unité de distance" + +#: netbox/circuits/forms/bulk_edit.py:196 +#: netbox/circuits/forms/model_forms.py:141 msgid "Service Parameters" msgstr "Paramètres du service" -#: netbox/circuits/forms/bulk_edit.py:174 -#: netbox/circuits/forms/model_forms.py:113 -#: netbox/circuits/forms/model_forms.py:183 -#: netbox/dcim/forms/model_forms.py:139 netbox/dcim/forms/model_forms.py:181 -#: netbox/dcim/forms/model_forms.py:266 netbox/dcim/forms/model_forms.py:323 -#: netbox/dcim/forms/model_forms.py:768 netbox/dcim/forms/model_forms.py:1699 -#: netbox/ipam/forms/model_forms.py:64 netbox/ipam/forms/model_forms.py:81 -#: netbox/ipam/forms/model_forms.py:115 netbox/ipam/forms/model_forms.py:136 -#: netbox/ipam/forms/model_forms.py:160 netbox/ipam/forms/model_forms.py:232 -#: netbox/ipam/forms/model_forms.py:261 netbox/ipam/forms/model_forms.py:320 +#: netbox/circuits/forms/bulk_edit.py:197 +#: netbox/circuits/forms/filtersets.py:73 +#: netbox/circuits/forms/filtersets.py:91 +#: netbox/circuits/forms/filtersets.py:110 +#: netbox/circuits/forms/filtersets.py:127 +#: netbox/circuits/forms/filtersets.py:315 +#: netbox/circuits/forms/filtersets.py:330 netbox/core/forms/filtersets.py:68 +#: netbox/core/forms/filtersets.py:136 netbox/dcim/forms/bulk_edit.py:846 +#: netbox/dcim/forms/filtersets.py:173 netbox/dcim/forms/filtersets.py:205 +#: netbox/dcim/forms/filtersets.py:916 netbox/dcim/forms/filtersets.py:1008 +#: netbox/dcim/forms/filtersets.py:1132 netbox/dcim/forms/filtersets.py:1240 +#: netbox/dcim/forms/filtersets.py:1264 netbox/dcim/forms/filtersets.py:1289 +#: netbox/dcim/forms/filtersets.py:1308 netbox/dcim/forms/filtersets.py:1332 +#: netbox/dcim/forms/filtersets.py:1446 netbox/dcim/forms/filtersets.py:1470 +#: netbox/dcim/forms/filtersets.py:1494 netbox/dcim/forms/filtersets.py:1512 +#: netbox/dcim/forms/filtersets.py:1528 netbox/extras/forms/bulk_edit.py:90 +#: netbox/extras/forms/filtersets.py:45 netbox/extras/forms/filtersets.py:137 +#: netbox/extras/forms/filtersets.py:169 netbox/extras/forms/filtersets.py:210 +#: netbox/extras/forms/filtersets.py:227 netbox/extras/forms/filtersets.py:258 +#: netbox/extras/forms/filtersets.py:282 netbox/extras/forms/filtersets.py:449 +#: netbox/ipam/forms/filtersets.py:101 netbox/ipam/forms/filtersets.py:269 +#: netbox/ipam/forms/filtersets.py:310 netbox/ipam/forms/filtersets.py:385 +#: netbox/ipam/forms/filtersets.py:470 netbox/ipam/forms/filtersets.py:483 +#: netbox/ipam/forms/filtersets.py:508 netbox/ipam/forms/filtersets.py:579 +#: netbox/ipam/forms/filtersets.py:597 netbox/netbox/tables/tables.py:259 +#: netbox/virtualization/forms/filtersets.py:45 +#: netbox/virtualization/forms/filtersets.py:108 +#: netbox/virtualization/forms/filtersets.py:203 +#: netbox/virtualization/forms/filtersets.py:248 +#: netbox/vpn/forms/filtersets.py:213 netbox/wireless/forms/bulk_edit.py:153 +#: netbox/wireless/forms/filtersets.py:36 +#: netbox/wireless/forms/filtersets.py:102 +msgid "Attributes" +msgstr "Attributs" + +#: netbox/circuits/forms/bulk_edit.py:198 +#: netbox/circuits/forms/bulk_edit.py:356 +#: netbox/circuits/forms/model_forms.py:142 +#: netbox/circuits/forms/model_forms.py:240 +#: netbox/circuits/forms/model_forms.py:345 +#: netbox/dcim/forms/model_forms.py:143 netbox/dcim/forms/model_forms.py:185 +#: netbox/dcim/forms/model_forms.py:274 netbox/dcim/forms/model_forms.py:331 +#: netbox/dcim/forms/model_forms.py:780 netbox/dcim/forms/model_forms.py:1744 +#: netbox/ipam/forms/model_forms.py:67 netbox/ipam/forms/model_forms.py:84 +#: netbox/ipam/forms/model_forms.py:119 netbox/ipam/forms/model_forms.py:141 +#: netbox/ipam/forms/model_forms.py:166 netbox/ipam/forms/model_forms.py:233 +#: netbox/ipam/forms/model_forms.py:271 netbox/ipam/forms/model_forms.py:330 #: netbox/netbox/navigation/menu.py:24 #: netbox/templates/dcim/device_edit.html:85 #: netbox/templates/dcim/htmx/cable_edit.html:72 #: netbox/templates/ipam/ipaddress_bulk_add.html:27 -#: netbox/templates/ipam/vlan_edit.html:22 +#: netbox/templates/ipam/vlan_edit.html:30 #: netbox/virtualization/forms/model_forms.py:80 -#: netbox/virtualization/forms/model_forms.py:222 +#: netbox/virtualization/forms/model_forms.py:229 #: netbox/vpn/forms/bulk_edit.py:78 netbox/vpn/forms/filtersets.py:44 -#: netbox/vpn/forms/model_forms.py:62 netbox/vpn/forms/model_forms.py:147 -#: netbox/vpn/forms/model_forms.py:411 netbox/wireless/forms/model_forms.py:54 -#: netbox/wireless/forms/model_forms.py:170 +#: netbox/vpn/forms/model_forms.py:63 netbox/vpn/forms/model_forms.py:148 +#: netbox/vpn/forms/model_forms.py:414 netbox/wireless/forms/model_forms.py:57 +#: netbox/wireless/forms/model_forms.py:173 msgid "Tenancy" msgstr "Utilisateur" -#: netbox/circuits/forms/bulk_edit.py:193 -#: netbox/circuits/forms/bulk_edit.py:217 -#: netbox/circuits/forms/model_forms.py:155 -#: netbox/circuits/tables/circuits.py:117 -#: netbox/templates/circuits/inc/circuit_termination_fields.html:62 -#: netbox/templates/circuits/providernetwork.html:17 -msgid "Provider Network" -msgstr "Réseau de fournisseurs" +#: netbox/circuits/forms/bulk_edit.py:215 +#: netbox/circuits/forms/model_forms.py:170 +#: netbox/dcim/forms/bulk_import.py:1299 netbox/dcim/forms/bulk_import.py:1317 +msgid "Termination type" +msgstr "Type de terminaison" -#: netbox/circuits/forms/bulk_edit.py:199 +#: netbox/circuits/forms/bulk_edit.py:218 +#: netbox/circuits/forms/bulk_import.py:133 +#: netbox/circuits/forms/filtersets.py:225 +#: netbox/circuits/forms/model_forms.py:173 +#: netbox/templates/circuits/inc/circuit_termination.html:6 +#: netbox/templates/dcim/cable.html:68 netbox/templates/dcim/cable.html:72 +#: netbox/vpn/forms/bulk_import.py:100 netbox/vpn/forms/filtersets.py:77 +msgid "Termination" +msgstr "Terminaison" + +#: netbox/circuits/forms/bulk_edit.py:226 msgid "Port speed (Kbps)" msgstr "Vitesse du port (Kbits/s)" -#: netbox/circuits/forms/bulk_edit.py:203 +#: netbox/circuits/forms/bulk_edit.py:230 msgid "Upstream speed (Kbps)" msgstr "Vitesse ascendante (Kbits/s)" -#: netbox/circuits/forms/bulk_edit.py:206 netbox/dcim/forms/bulk_edit.py:966 -#: netbox/dcim/forms/bulk_edit.py:1330 netbox/dcim/forms/bulk_edit.py:1347 -#: netbox/dcim/forms/bulk_edit.py:1364 netbox/dcim/forms/bulk_edit.py:1382 -#: netbox/dcim/forms/bulk_edit.py:1477 netbox/dcim/forms/bulk_edit.py:1637 -#: netbox/dcim/forms/bulk_edit.py:1654 +#: netbox/circuits/forms/bulk_edit.py:233 netbox/dcim/forms/bulk_edit.py:969 +#: netbox/dcim/forms/bulk_edit.py:1333 netbox/dcim/forms/bulk_edit.py:1350 +#: netbox/dcim/forms/bulk_edit.py:1367 netbox/dcim/forms/bulk_edit.py:1385 +#: netbox/dcim/forms/bulk_edit.py:1480 netbox/dcim/forms/bulk_edit.py:1652 +#: netbox/dcim/forms/bulk_edit.py:1669 msgid "Mark connected" msgstr "Marquer comme connecté" -#: netbox/circuits/forms/bulk_edit.py:219 -#: netbox/circuits/forms/model_forms.py:157 -#: netbox/templates/circuits/inc/circuit_termination_fields.html:54 +#: netbox/circuits/forms/bulk_edit.py:243 +#: netbox/circuits/forms/model_forms.py:184 +#: netbox/templates/circuits/inc/circuit_termination_fields.html:55 #: netbox/templates/dcim/frontport.html:121 -#: netbox/templates/dcim/interface.html:193 +#: netbox/templates/dcim/interface.html:250 #: netbox/templates/dcim/rearport.html:111 msgid "Circuit Termination" msgstr "Terminaison de circuit" -#: netbox/circuits/forms/bulk_edit.py:221 -#: netbox/circuits/forms/model_forms.py:159 +#: netbox/circuits/forms/bulk_edit.py:245 +#: netbox/circuits/forms/model_forms.py:186 msgid "Termination Details" msgstr "Détails de terminaison" -#: netbox/circuits/forms/bulk_edit.py:251 -#: netbox/circuits/forms/filtersets.py:268 -#: netbox/circuits/tables/circuits.py:168 netbox/dcim/forms/model_forms.py:551 -#: netbox/templates/circuits/circuitgroupassignment.html:30 +#: netbox/circuits/forms/bulk_edit.py:289 +#: netbox/circuits/forms/bulk_import.py:188 +#: netbox/circuits/forms/filtersets.py:304 +#: netbox/circuits/tables/circuits.py:207 netbox/dcim/forms/model_forms.py:562 +#: netbox/templates/circuits/circuitgroupassignment.html:34 #: netbox/templates/dcim/device.html:133 #: netbox/templates/dcim/virtualchassis.html:68 #: netbox/templates/dcim/virtualchassis_edit.html:56 @@ -896,227 +1075,313 @@ msgstr "Détails de terminaison" msgid "Priority" msgstr "Priorité" -#: netbox/circuits/forms/bulk_import.py:39 -#: netbox/circuits/forms/bulk_import.py:54 -#: netbox/circuits/forms/bulk_import.py:77 -msgid "Assigned provider" -msgstr "Prestataire assigné" - -#: netbox/circuits/forms/bulk_import.py:83 -msgid "Assigned provider account" -msgstr "Compte opérateur associé" - -#: netbox/circuits/forms/bulk_import.py:90 -msgid "Type of circuit" -msgstr "Type de circuit" - -#: netbox/circuits/forms/bulk_import.py:95 netbox/dcim/forms/bulk_import.py:90 -#: netbox/dcim/forms/bulk_import.py:149 netbox/dcim/forms/bulk_import.py:250 -#: netbox/dcim/forms/bulk_import.py:529 netbox/dcim/forms/bulk_import.py:683 -#: netbox/dcim/forms/bulk_import.py:1395 netbox/ipam/forms/bulk_import.py:194 -#: netbox/ipam/forms/bulk_import.py:259 netbox/ipam/forms/bulk_import.py:295 -#: netbox/ipam/forms/bulk_import.py:476 -#: netbox/virtualization/forms/bulk_import.py:56 -#: netbox/virtualization/forms/bulk_import.py:82 -#: netbox/vpn/forms/bulk_import.py:39 netbox/wireless/forms/bulk_import.py:45 -msgid "Operational status" -msgstr "État opérationnel" - -#: netbox/circuits/forms/bulk_import.py:102 -#: netbox/circuits/forms/bulk_import.py:162 -#: netbox/dcim/forms/bulk_import.py:111 netbox/dcim/forms/bulk_import.py:156 -#: netbox/dcim/forms/bulk_import.py:360 netbox/dcim/forms/bulk_import.py:505 -#: netbox/dcim/forms/bulk_import.py:1245 netbox/dcim/forms/bulk_import.py:1390 -#: netbox/dcim/forms/bulk_import.py:1454 netbox/ipam/forms/bulk_import.py:42 -#: netbox/ipam/forms/bulk_import.py:71 netbox/ipam/forms/bulk_import.py:99 -#: netbox/ipam/forms/bulk_import.py:119 netbox/ipam/forms/bulk_import.py:139 -#: netbox/ipam/forms/bulk_import.py:168 netbox/ipam/forms/bulk_import.py:254 -#: netbox/ipam/forms/bulk_import.py:290 netbox/ipam/forms/bulk_import.py:471 -#: netbox/virtualization/forms/bulk_import.py:70 -#: netbox/virtualization/forms/bulk_import.py:119 -#: netbox/vpn/forms/bulk_import.py:63 netbox/wireless/forms/bulk_import.py:59 -#: netbox/wireless/forms/bulk_import.py:101 -msgid "Assigned tenant" -msgstr "Entité associée" - -#: netbox/circuits/forms/bulk_import.py:120 -#: netbox/templates/circuits/inc/circuit_termination.html:6 -#: netbox/templates/circuits/inc/circuit_termination_fields.html:15 -#: netbox/templates/dcim/cable.html:68 netbox/templates/dcim/cable.html:72 -#: netbox/vpn/forms/bulk_import.py:100 netbox/vpn/forms/filtersets.py:77 -msgid "Termination" -msgstr "Terminaison" - -#: netbox/circuits/forms/bulk_import.py:130 -#: netbox/circuits/forms/filtersets.py:147 -#: netbox/circuits/forms/filtersets.py:227 -#: netbox/circuits/forms/model_forms.py:144 +#: netbox/circuits/forms/bulk_edit.py:321 +#: netbox/circuits/forms/bulk_import.py:208 +#: netbox/circuits/forms/filtersets.py:158 +#: netbox/circuits/forms/filtersets.py:263 +#: netbox/circuits/forms/filtersets.py:353 +#: netbox/circuits/forms/filtersets.py:391 +#: netbox/circuits/forms/model_forms.py:325 +#: netbox/circuits/tables/virtual_circuits.py:51 +#: netbox/circuits/tables/virtual_circuits.py:99 msgid "Provider network" msgstr "Réseau de fournisseurs" -#: netbox/circuits/forms/filtersets.py:30 -#: netbox/circuits/forms/filtersets.py:118 -#: netbox/circuits/forms/filtersets.py:200 netbox/dcim/forms/bulk_edit.py:339 -#: netbox/dcim/forms/bulk_edit.py:447 netbox/dcim/forms/bulk_edit.py:688 -#: netbox/dcim/forms/bulk_edit.py:743 netbox/dcim/forms/bulk_edit.py:897 -#: netbox/dcim/forms/bulk_import.py:235 netbox/dcim/forms/bulk_import.py:337 -#: netbox/dcim/forms/bulk_import.py:568 netbox/dcim/forms/bulk_import.py:1339 -#: netbox/dcim/forms/bulk_import.py:1373 netbox/dcim/forms/filtersets.py:95 -#: netbox/dcim/forms/filtersets.py:322 netbox/dcim/forms/filtersets.py:356 -#: netbox/dcim/forms/filtersets.py:396 netbox/dcim/forms/filtersets.py:447 -#: netbox/dcim/forms/filtersets.py:719 netbox/dcim/forms/filtersets.py:762 -#: netbox/dcim/forms/filtersets.py:977 netbox/dcim/forms/filtersets.py:1006 -#: netbox/dcim/forms/filtersets.py:1026 netbox/dcim/forms/filtersets.py:1090 -#: netbox/dcim/forms/filtersets.py:1120 netbox/dcim/forms/filtersets.py:1129 -#: netbox/dcim/forms/filtersets.py:1240 netbox/dcim/forms/filtersets.py:1264 -#: netbox/dcim/forms/filtersets.py:1289 netbox/dcim/forms/filtersets.py:1308 -#: netbox/dcim/forms/filtersets.py:1331 netbox/dcim/forms/filtersets.py:1442 -#: netbox/dcim/forms/filtersets.py:1466 netbox/dcim/forms/filtersets.py:1490 -#: netbox/dcim/forms/filtersets.py:1508 netbox/dcim/forms/filtersets.py:1525 -#: netbox/dcim/forms/model_forms.py:180 netbox/dcim/forms/model_forms.py:243 -#: netbox/dcim/forms/model_forms.py:468 netbox/dcim/forms/model_forms.py:728 -#: netbox/dcim/tables/devices.py:157 netbox/dcim/tables/power.py:30 -#: netbox/dcim/tables/racks.py:118 netbox/dcim/tables/racks.py:212 -#: netbox/extras/filtersets.py:536 netbox/extras/forms/filtersets.py:320 -#: netbox/ipam/forms/filtersets.py:173 netbox/ipam/forms/filtersets.py:414 -#: netbox/ipam/forms/filtersets.py:437 netbox/ipam/forms/filtersets.py:467 +#: netbox/circuits/forms/bulk_edit.py:365 +#: netbox/circuits/forms/bulk_import.py:254 +#: netbox/circuits/forms/filtersets.py:381 +#: netbox/circuits/forms/model_forms.py:365 netbox/dcim/forms/bulk_edit.py:361 +#: netbox/dcim/forms/bulk_edit.py:1280 netbox/dcim/forms/bulk_edit.py:1713 +#: netbox/dcim/forms/bulk_import.py:255 netbox/dcim/forms/bulk_import.py:1106 +#: netbox/dcim/forms/filtersets.py:368 netbox/dcim/forms/filtersets.py:778 +#: netbox/dcim/forms/filtersets.py:1539 netbox/dcim/forms/model_forms.py:256 +#: netbox/dcim/forms/model_forms.py:1090 netbox/dcim/forms/model_forms.py:1559 +#: netbox/dcim/forms/object_import.py:182 netbox/dcim/tables/devices.py:180 +#: netbox/dcim/tables/devices.py:841 netbox/dcim/tables/devices.py:967 +#: netbox/dcim/tables/devicetypes.py:311 netbox/dcim/tables/racks.py:128 +#: netbox/extras/filtersets.py:552 netbox/ipam/forms/bulk_edit.py:245 +#: netbox/ipam/forms/bulk_edit.py:295 netbox/ipam/forms/bulk_edit.py:343 +#: netbox/ipam/forms/bulk_edit.py:495 netbox/ipam/forms/bulk_import.py:193 +#: netbox/ipam/forms/bulk_import.py:261 netbox/ipam/forms/bulk_import.py:297 +#: netbox/ipam/forms/bulk_import.py:478 netbox/ipam/forms/filtersets.py:240 +#: netbox/ipam/forms/filtersets.py:292 netbox/ipam/forms/filtersets.py:363 +#: netbox/ipam/forms/filtersets.py:550 netbox/ipam/forms/model_forms.py:194 +#: netbox/ipam/forms/model_forms.py:220 netbox/ipam/forms/model_forms.py:259 +#: netbox/ipam/forms/model_forms.py:686 netbox/ipam/tables/ip.py:209 +#: netbox/ipam/tables/ip.py:268 netbox/ipam/tables/ip.py:319 +#: netbox/ipam/tables/vlans.py:99 netbox/ipam/tables/vlans.py:211 +#: netbox/templates/circuits/virtualcircuittermination.html:42 +#: netbox/templates/dcim/device.html:182 +#: netbox/templates/dcim/inc/panels/inventory_items.html:20 +#: netbox/templates/dcim/interface.html:178 +#: netbox/templates/dcim/interface.html:280 +#: netbox/templates/dcim/inventoryitem.html:40 +#: netbox/templates/dcim/rack.html:49 netbox/templates/ipam/ipaddress.html:41 +#: netbox/templates/ipam/iprange.html:50 netbox/templates/ipam/prefix.html:73 +#: netbox/templates/ipam/role.html:19 netbox/templates/ipam/vlan.html:52 +#: netbox/templates/virtualization/virtualmachine.html:23 +#: netbox/templates/vpn/tunneltermination.html:17 +#: netbox/templates/wireless/inc/wirelesslink_interface.html:20 +#: netbox/tenancy/forms/bulk_edit.py:142 +#: netbox/tenancy/forms/filtersets.py:107 +#: netbox/tenancy/forms/model_forms.py:137 +#: netbox/tenancy/tables/contacts.py:102 +#: netbox/virtualization/forms/bulk_edit.py:127 +#: netbox/virtualization/forms/bulk_import.py:112 +#: netbox/virtualization/forms/filtersets.py:162 +#: netbox/virtualization/forms/model_forms.py:202 +#: netbox/virtualization/tables/virtualmachines.py:45 +#: netbox/vpn/forms/bulk_edit.py:87 netbox/vpn/forms/bulk_import.py:81 +#: netbox/vpn/forms/filtersets.py:85 netbox/vpn/forms/model_forms.py:79 +#: netbox/vpn/forms/model_forms.py:114 netbox/vpn/tables/tunnels.py:82 +msgid "Role" +msgstr "Rôle" + +#: netbox/circuits/forms/bulk_import.py:46 +#: netbox/circuits/forms/bulk_import.py:61 +#: netbox/circuits/forms/bulk_import.py:84 +msgid "Assigned provider" +msgstr "Prestataire assigné" + +#: netbox/circuits/forms/bulk_import.py:90 +msgid "Assigned provider account" +msgstr "Compte opérateur associé" + +#: netbox/circuits/forms/bulk_import.py:97 +msgid "Type of circuit" +msgstr "Type de circuit" + +#: netbox/circuits/forms/bulk_import.py:102 +#: netbox/circuits/forms/bulk_import.py:229 +#: netbox/dcim/forms/bulk_import.py:92 netbox/dcim/forms/bulk_import.py:151 +#: netbox/dcim/forms/bulk_import.py:252 netbox/dcim/forms/bulk_import.py:534 +#: netbox/dcim/forms/bulk_import.py:688 netbox/dcim/forms/bulk_import.py:1139 +#: netbox/dcim/forms/bulk_import.py:1492 netbox/ipam/forms/bulk_import.py:190 +#: netbox/ipam/forms/bulk_import.py:258 netbox/ipam/forms/bulk_import.py:294 +#: netbox/ipam/forms/bulk_import.py:475 netbox/ipam/forms/bulk_import.py:488 +#: netbox/virtualization/forms/bulk_import.py:57 +#: netbox/virtualization/forms/bulk_import.py:88 +#: netbox/vpn/forms/bulk_import.py:39 netbox/wireless/forms/bulk_import.py:47 +msgid "Operational status" +msgstr "État opérationnel" + +#: netbox/circuits/forms/bulk_import.py:115 +#: netbox/circuits/forms/bulk_import.py:174 +#: netbox/circuits/forms/bulk_import.py:236 +#: netbox/dcim/forms/bulk_import.py:113 netbox/dcim/forms/bulk_import.py:158 +#: netbox/dcim/forms/bulk_import.py:362 netbox/dcim/forms/bulk_import.py:510 +#: netbox/dcim/forms/bulk_import.py:1342 netbox/dcim/forms/bulk_import.py:1487 +#: netbox/dcim/forms/bulk_import.py:1551 netbox/ipam/forms/bulk_import.py:45 +#: netbox/ipam/forms/bulk_import.py:74 netbox/ipam/forms/bulk_import.py:102 +#: netbox/ipam/forms/bulk_import.py:122 netbox/ipam/forms/bulk_import.py:142 +#: netbox/ipam/forms/bulk_import.py:171 netbox/ipam/forms/bulk_import.py:253 +#: netbox/ipam/forms/bulk_import.py:289 netbox/ipam/forms/bulk_import.py:470 +#: netbox/virtualization/forms/bulk_import.py:71 +#: netbox/virtualization/forms/bulk_import.py:125 +#: netbox/vpn/forms/bulk_import.py:63 netbox/wireless/forms/bulk_import.py:61 +#: netbox/wireless/forms/bulk_import.py:106 +msgid "Assigned tenant" +msgstr "Entité associée" + +#: netbox/circuits/forms/bulk_import.py:139 +msgid "Termination type (app & model)" +msgstr "Type de terminaison (application et modèle)" + +#: netbox/circuits/forms/bulk_import.py:151 +#: netbox/circuits/forms/bulk_import.py:164 +msgid "Termination ID" +msgstr "ID de résiliation" + +#: netbox/circuits/forms/bulk_import.py:185 +msgid "Circuit type (app & model)" +msgstr "Type de circuit (application et modèle)" + +#: netbox/circuits/forms/bulk_import.py:211 +msgid "The network to which this virtual circuit belongs" +msgstr "Le réseau auquel appartient ce circuit virtuel" + +#: netbox/circuits/forms/bulk_import.py:217 +msgid "Assigned provider account (if any)" +msgstr "Compte fournisseur attribué (le cas échéant)" + +#: netbox/circuits/forms/bulk_import.py:224 +msgid "Type of virtual circuit" +msgstr "Type de circuit virtuel" + +#: netbox/circuits/forms/bulk_import.py:256 netbox/vpn/forms/bulk_import.py:83 +msgid "Operational role" +msgstr "Rôle opérationnel" + +#: netbox/circuits/forms/bulk_import.py:259 +#: netbox/circuits/forms/model_forms.py:368 +#: netbox/circuits/tables/virtual_circuits.py:112 +#: netbox/dcim/forms/bulk_import.py:1219 netbox/dcim/forms/model_forms.py:1164 +#: netbox/dcim/forms/model_forms.py:1433 netbox/dcim/forms/model_forms.py:1600 +#: netbox/dcim/forms/model_forms.py:1635 netbox/dcim/forms/model_forms.py:1765 +#: netbox/dcim/tables/connections.py:65 netbox/dcim/tables/devices.py:1141 +#: netbox/ipam/forms/bulk_import.py:317 netbox/ipam/forms/model_forms.py:290 +#: netbox/ipam/forms/model_forms.py:299 netbox/ipam/tables/fhrp.py:64 +#: netbox/ipam/tables/ip.py:324 netbox/ipam/tables/vlans.py:145 +#: netbox/templates/circuits/inc/circuit_termination_fields.html:52 +#: netbox/templates/circuits/virtualcircuittermination.html:53 +#: netbox/templates/circuits/virtualcircuittermination.html:60 +#: netbox/templates/dcim/frontport.html:106 +#: netbox/templates/dcim/interface.html:27 +#: netbox/templates/dcim/interface.html:241 +#: netbox/templates/dcim/interface.html:367 +#: netbox/templates/dcim/rearport.html:102 +#: netbox/templates/virtualization/vminterface.html:18 +#: netbox/templates/vpn/tunneltermination.html:31 +#: netbox/templates/wireless/inc/wirelesslink_interface.html:10 +#: netbox/templates/wireless/wirelesslink.html:10 +#: netbox/templates/wireless/wirelesslink.html:55 +#: netbox/virtualization/forms/model_forms.py:377 +#: netbox/vpn/forms/bulk_import.py:297 netbox/vpn/forms/model_forms.py:439 +#: netbox/vpn/forms/model_forms.py:448 +#: netbox/wireless/forms/model_forms.py:116 +#: netbox/wireless/forms/model_forms.py:158 +msgid "Interface" +msgstr "Interface" + +#: netbox/circuits/forms/filtersets.py:38 +#: netbox/circuits/forms/filtersets.py:129 +#: netbox/circuits/forms/filtersets.py:187 +#: netbox/circuits/forms/filtersets.py:245 +#: netbox/circuits/tables/circuits.py:144 netbox/dcim/forms/bulk_edit.py:342 +#: netbox/dcim/forms/bulk_edit.py:450 netbox/dcim/forms/bulk_edit.py:691 +#: netbox/dcim/forms/bulk_edit.py:746 netbox/dcim/forms/bulk_edit.py:900 +#: netbox/dcim/forms/bulk_import.py:237 netbox/dcim/forms/bulk_import.py:339 +#: netbox/dcim/forms/bulk_import.py:573 netbox/dcim/forms/bulk_import.py:1436 +#: netbox/dcim/forms/bulk_import.py:1470 netbox/dcim/forms/filtersets.py:96 +#: netbox/dcim/forms/filtersets.py:323 netbox/dcim/forms/filtersets.py:357 +#: netbox/dcim/forms/filtersets.py:397 netbox/dcim/forms/filtersets.py:448 +#: netbox/dcim/forms/filtersets.py:720 netbox/dcim/forms/filtersets.py:763 +#: netbox/dcim/forms/filtersets.py:978 netbox/dcim/forms/filtersets.py:1007 +#: netbox/dcim/forms/filtersets.py:1027 netbox/dcim/forms/filtersets.py:1091 +#: netbox/dcim/forms/filtersets.py:1121 netbox/dcim/forms/filtersets.py:1130 +#: netbox/dcim/forms/filtersets.py:1241 netbox/dcim/forms/filtersets.py:1265 +#: netbox/dcim/forms/filtersets.py:1290 netbox/dcim/forms/filtersets.py:1309 +#: netbox/dcim/forms/filtersets.py:1336 netbox/dcim/forms/filtersets.py:1447 +#: netbox/dcim/forms/filtersets.py:1471 netbox/dcim/forms/filtersets.py:1495 +#: netbox/dcim/forms/filtersets.py:1513 netbox/dcim/forms/filtersets.py:1530 +#: netbox/dcim/forms/model_forms.py:184 netbox/dcim/forms/model_forms.py:248 +#: netbox/dcim/forms/model_forms.py:478 netbox/dcim/forms/model_forms.py:739 +#: netbox/dcim/tables/devices.py:168 netbox/dcim/tables/power.py:30 +#: netbox/dcim/tables/racks.py:117 netbox/dcim/tables/racks.py:211 +#: netbox/extras/filtersets.py:536 netbox/extras/forms/filtersets.py:327 +#: netbox/ipam/forms/filtersets.py:234 netbox/ipam/forms/filtersets.py:417 +#: netbox/ipam/forms/filtersets.py:440 netbox/ipam/forms/filtersets.py:507 #: netbox/templates/dcim/device.html:26 #: netbox/templates/dcim/device_edit.html:30 #: netbox/templates/dcim/inc/cable_termination.html:12 #: netbox/templates/dcim/location.html:26 #: netbox/templates/dcim/powerpanel.html:26 netbox/templates/dcim/rack.html:24 #: netbox/templates/dcim/rackreservation.html:32 -#: netbox/virtualization/forms/filtersets.py:46 -#: netbox/virtualization/forms/filtersets.py:100 -#: netbox/wireless/forms/model_forms.py:87 -#: netbox/wireless/forms/model_forms.py:129 +#: netbox/virtualization/forms/filtersets.py:79 +#: netbox/virtualization/forms/filtersets.py:105 +#: netbox/wireless/forms/filtersets.py:93 +#: netbox/wireless/forms/model_forms.py:90 +#: netbox/wireless/forms/model_forms.py:132 msgid "Location" msgstr "Emplacement" -#: netbox/circuits/forms/filtersets.py:32 -#: netbox/circuits/forms/filtersets.py:120 netbox/dcim/forms/filtersets.py:144 -#: netbox/dcim/forms/filtersets.py:158 netbox/dcim/forms/filtersets.py:174 -#: netbox/dcim/forms/filtersets.py:206 netbox/dcim/forms/filtersets.py:328 -#: netbox/dcim/forms/filtersets.py:400 netbox/dcim/forms/filtersets.py:471 -#: netbox/dcim/forms/filtersets.py:723 netbox/dcim/forms/filtersets.py:1091 +#: netbox/circuits/forms/filtersets.py:40 +#: netbox/circuits/forms/filtersets.py:131 netbox/dcim/forms/filtersets.py:145 +#: netbox/dcim/forms/filtersets.py:159 netbox/dcim/forms/filtersets.py:175 +#: netbox/dcim/forms/filtersets.py:207 netbox/dcim/forms/filtersets.py:329 +#: netbox/dcim/forms/filtersets.py:401 netbox/dcim/forms/filtersets.py:472 +#: netbox/dcim/forms/filtersets.py:724 netbox/dcim/forms/filtersets.py:1092 #: netbox/netbox/navigation/menu.py:31 netbox/netbox/navigation/menu.py:33 -#: netbox/tenancy/forms/filtersets.py:42 netbox/tenancy/tables/columns.py:70 +#: netbox/tenancy/forms/filtersets.py:42 netbox/tenancy/tables/columns.py:55 #: netbox/tenancy/tables/contacts.py:25 netbox/tenancy/views.py:19 #: netbox/virtualization/forms/filtersets.py:37 #: netbox/virtualization/forms/filtersets.py:48 -#: netbox/virtualization/forms/filtersets.py:106 +#: netbox/virtualization/forms/filtersets.py:111 msgid "Contacts" msgstr "Contacts" -#: netbox/circuits/forms/filtersets.py:37 -#: netbox/circuits/forms/filtersets.py:157 netbox/dcim/forms/bulk_edit.py:113 -#: netbox/dcim/forms/bulk_edit.py:314 netbox/dcim/forms/bulk_edit.py:872 -#: netbox/dcim/forms/bulk_import.py:93 netbox/dcim/forms/filtersets.py:73 -#: netbox/dcim/forms/filtersets.py:185 netbox/dcim/forms/filtersets.py:211 -#: netbox/dcim/forms/filtersets.py:334 netbox/dcim/forms/filtersets.py:425 -#: netbox/dcim/forms/filtersets.py:739 netbox/dcim/forms/filtersets.py:983 -#: netbox/dcim/forms/filtersets.py:1013 netbox/dcim/forms/filtersets.py:1097 -#: netbox/dcim/forms/filtersets.py:1136 netbox/dcim/forms/filtersets.py:1576 -#: netbox/dcim/forms/filtersets.py:1600 netbox/dcim/forms/filtersets.py:1624 -#: netbox/dcim/forms/model_forms.py:112 netbox/dcim/forms/object_create.py:367 -#: netbox/dcim/tables/devices.py:143 netbox/dcim/tables/sites.py:85 -#: netbox/extras/filtersets.py:503 netbox/ipam/forms/bulk_edit.py:208 -#: netbox/ipam/forms/bulk_edit.py:474 netbox/ipam/forms/filtersets.py:217 -#: netbox/ipam/forms/filtersets.py:422 netbox/ipam/forms/filtersets.py:475 -#: netbox/templates/dcim/device.html:18 netbox/templates/dcim/rack.html:16 +#: netbox/circuits/forms/filtersets.py:45 +#: netbox/circuits/forms/filtersets.py:168 +#: netbox/circuits/forms/filtersets.py:230 +#: netbox/circuits/tables/circuits.py:139 netbox/dcim/forms/bulk_edit.py:116 +#: netbox/dcim/forms/bulk_edit.py:317 netbox/dcim/forms/bulk_edit.py:875 +#: netbox/dcim/forms/bulk_import.py:95 netbox/dcim/forms/filtersets.py:74 +#: netbox/dcim/forms/filtersets.py:186 netbox/dcim/forms/filtersets.py:212 +#: netbox/dcim/forms/filtersets.py:335 netbox/dcim/forms/filtersets.py:426 +#: netbox/dcim/forms/filtersets.py:740 netbox/dcim/forms/filtersets.py:984 +#: netbox/dcim/forms/filtersets.py:1014 netbox/dcim/forms/filtersets.py:1098 +#: netbox/dcim/forms/filtersets.py:1137 netbox/dcim/forms/filtersets.py:1614 +#: netbox/dcim/forms/filtersets.py:1638 netbox/dcim/forms/filtersets.py:1662 +#: netbox/dcim/forms/model_forms.py:114 netbox/dcim/forms/object_create.py:367 +#: netbox/dcim/tables/devices.py:154 netbox/dcim/tables/sites.py:85 +#: netbox/extras/filtersets.py:503 netbox/ipam/forms/bulk_edit.py:458 +#: netbox/ipam/forms/filtersets.py:219 netbox/ipam/forms/filtersets.py:425 +#: netbox/ipam/forms/filtersets.py:516 netbox/templates/dcim/device.html:18 +#: netbox/templates/dcim/rack.html:16 #: netbox/templates/dcim/rackreservation.html:22 #: netbox/templates/dcim/region.html:26 netbox/templates/dcim/site.html:31 -#: netbox/templates/ipam/prefix.html:49 netbox/templates/ipam/vlan.html:16 -#: netbox/virtualization/forms/bulk_edit.py:81 +#: netbox/templates/ipam/vlan.html:16 #: netbox/virtualization/forms/filtersets.py:59 -#: netbox/virtualization/forms/filtersets.py:133 +#: netbox/virtualization/forms/filtersets.py:138 #: netbox/virtualization/forms/model_forms.py:92 -#: netbox/vpn/forms/filtersets.py:257 +#: netbox/vpn/forms/filtersets.py:257 netbox/wireless/forms/filtersets.py:73 msgid "Region" msgstr "Région" -#: netbox/circuits/forms/filtersets.py:42 -#: netbox/circuits/forms/filtersets.py:162 netbox/dcim/forms/bulk_edit.py:322 -#: netbox/dcim/forms/bulk_edit.py:880 netbox/dcim/forms/filtersets.py:78 -#: netbox/dcim/forms/filtersets.py:190 netbox/dcim/forms/filtersets.py:216 -#: netbox/dcim/forms/filtersets.py:347 netbox/dcim/forms/filtersets.py:430 -#: netbox/dcim/forms/filtersets.py:744 netbox/dcim/forms/filtersets.py:988 -#: netbox/dcim/forms/filtersets.py:1102 netbox/dcim/forms/filtersets.py:1141 +#: netbox/circuits/forms/filtersets.py:50 +#: netbox/circuits/forms/filtersets.py:173 +#: netbox/circuits/forms/filtersets.py:235 netbox/dcim/forms/bulk_edit.py:325 +#: netbox/dcim/forms/bulk_edit.py:883 netbox/dcim/forms/filtersets.py:79 +#: netbox/dcim/forms/filtersets.py:191 netbox/dcim/forms/filtersets.py:217 +#: netbox/dcim/forms/filtersets.py:348 netbox/dcim/forms/filtersets.py:431 +#: netbox/dcim/forms/filtersets.py:745 netbox/dcim/forms/filtersets.py:989 +#: netbox/dcim/forms/filtersets.py:1103 netbox/dcim/forms/filtersets.py:1142 #: netbox/dcim/forms/object_create.py:375 netbox/extras/filtersets.py:520 -#: netbox/ipam/forms/bulk_edit.py:213 netbox/ipam/forms/bulk_edit.py:479 -#: netbox/ipam/forms/filtersets.py:222 netbox/ipam/forms/filtersets.py:427 -#: netbox/ipam/forms/filtersets.py:480 -#: netbox/virtualization/forms/bulk_edit.py:86 -#: netbox/virtualization/forms/filtersets.py:69 -#: netbox/virtualization/forms/filtersets.py:138 +#: netbox/ipam/forms/bulk_edit.py:463 netbox/ipam/forms/filtersets.py:224 +#: netbox/ipam/forms/filtersets.py:430 netbox/ipam/forms/filtersets.py:521 +#: netbox/virtualization/forms/filtersets.py:64 +#: netbox/virtualization/forms/filtersets.py:143 #: netbox/virtualization/forms/model_forms.py:98 +#: netbox/wireless/forms/filtersets.py:78 msgid "Site group" msgstr "Groupe de sites" -#: netbox/circuits/forms/filtersets.py:65 -#: netbox/circuits/forms/filtersets.py:83 -#: netbox/circuits/forms/filtersets.py:102 -#: netbox/circuits/forms/filtersets.py:117 netbox/core/forms/filtersets.py:67 -#: netbox/core/forms/filtersets.py:135 netbox/dcim/forms/bulk_edit.py:843 -#: netbox/dcim/forms/filtersets.py:172 netbox/dcim/forms/filtersets.py:204 -#: netbox/dcim/forms/filtersets.py:915 netbox/dcim/forms/filtersets.py:1007 -#: netbox/dcim/forms/filtersets.py:1131 netbox/dcim/forms/filtersets.py:1239 -#: netbox/dcim/forms/filtersets.py:1263 netbox/dcim/forms/filtersets.py:1288 -#: netbox/dcim/forms/filtersets.py:1307 netbox/dcim/forms/filtersets.py:1327 -#: netbox/dcim/forms/filtersets.py:1441 netbox/dcim/forms/filtersets.py:1465 -#: netbox/dcim/forms/filtersets.py:1489 netbox/dcim/forms/filtersets.py:1507 -#: netbox/dcim/forms/filtersets.py:1523 netbox/extras/forms/bulk_edit.py:90 -#: netbox/extras/forms/filtersets.py:44 netbox/extras/forms/filtersets.py:134 -#: netbox/extras/forms/filtersets.py:165 netbox/extras/forms/filtersets.py:205 -#: netbox/extras/forms/filtersets.py:221 netbox/extras/forms/filtersets.py:252 -#: netbox/extras/forms/filtersets.py:276 netbox/extras/forms/filtersets.py:441 -#: netbox/ipam/forms/filtersets.py:99 netbox/ipam/forms/filtersets.py:266 -#: netbox/ipam/forms/filtersets.py:307 netbox/ipam/forms/filtersets.py:382 -#: netbox/ipam/forms/filtersets.py:468 netbox/ipam/forms/filtersets.py:527 -#: netbox/ipam/forms/filtersets.py:545 netbox/netbox/tables/tables.py:256 -#: netbox/virtualization/forms/filtersets.py:45 -#: netbox/virtualization/forms/filtersets.py:103 -#: netbox/virtualization/forms/filtersets.py:198 -#: netbox/virtualization/forms/filtersets.py:243 -#: netbox/vpn/forms/filtersets.py:213 netbox/wireless/forms/bulk_edit.py:150 -#: netbox/wireless/forms/filtersets.py:34 -#: netbox/wireless/forms/filtersets.py:74 -msgid "Attributes" -msgstr "Attributs" - -#: netbox/circuits/forms/filtersets.py:73 -#: netbox/circuits/tables/circuits.py:63 -#: netbox/circuits/tables/providers.py:66 +#: netbox/circuits/forms/filtersets.py:81 +#: netbox/circuits/tables/circuits.py:62 +#: netbox/circuits/tables/providers.py:64 +#: netbox/circuits/tables/virtual_circuits.py:55 +#: netbox/circuits/tables/virtual_circuits.py:103 #: netbox/templates/circuits/circuit.html:22 #: netbox/templates/circuits/provideraccount.html:24 msgid "Account" msgstr "Compte" -#: netbox/circuits/forms/filtersets.py:217 +#: netbox/circuits/forms/filtersets.py:253 msgid "Term Side" msgstr "Côté terme" -#: netbox/circuits/forms/filtersets.py:250 netbox/dcim/forms/bulk_edit.py:1557 -#: netbox/extras/forms/model_forms.py:582 netbox/ipam/forms/filtersets.py:142 -#: netbox/ipam/forms/filtersets.py:546 netbox/ipam/forms/model_forms.py:327 +#: netbox/circuits/forms/filtersets.py:286 netbox/dcim/forms/bulk_edit.py:1572 +#: netbox/extras/forms/model_forms.py:596 netbox/ipam/forms/filtersets.py:144 +#: netbox/ipam/forms/filtersets.py:598 netbox/ipam/forms/model_forms.py:337 +#: netbox/templates/dcim/macaddress.html:25 #: netbox/templates/extras/configcontext.html:60 #: netbox/templates/ipam/ipaddress.html:59 -#: netbox/templates/ipam/vlan_edit.html:30 +#: netbox/templates/ipam/vlan_edit.html:38 #: netbox/tenancy/forms/filtersets.py:87 netbox/users/forms/model_forms.py:314 msgid "Assignment" msgstr "Affectation" -#: netbox/circuits/forms/filtersets.py:265 -#: netbox/circuits/forms/model_forms.py:195 -#: netbox/circuits/tables/circuits.py:155 netbox/dcim/forms/bulk_edit.py:118 -#: netbox/dcim/forms/bulk_import.py:100 netbox/dcim/forms/model_forms.py:117 -#: netbox/dcim/tables/sites.py:89 netbox/extras/forms/filtersets.py:480 -#: netbox/ipam/filtersets.py:1001 netbox/ipam/forms/bulk_edit.py:493 -#: netbox/ipam/forms/bulk_import.py:460 netbox/ipam/forms/model_forms.py:561 -#: netbox/ipam/tables/fhrp.py:67 netbox/ipam/tables/vlans.py:122 -#: netbox/ipam/tables/vlans.py:226 +#: netbox/circuits/forms/filtersets.py:301 +#: netbox/circuits/forms/model_forms.py:252 +#: netbox/circuits/tables/circuits.py:191 netbox/dcim/forms/bulk_edit.py:121 +#: netbox/dcim/forms/bulk_import.py:102 netbox/dcim/forms/model_forms.py:120 +#: netbox/dcim/tables/sites.py:89 netbox/extras/forms/filtersets.py:489 +#: netbox/ipam/filtersets.py:968 netbox/ipam/forms/bulk_edit.py:477 +#: netbox/ipam/forms/bulk_import.py:459 netbox/ipam/forms/model_forms.py:571 +#: netbox/ipam/tables/fhrp.py:67 netbox/ipam/tables/vlans.py:91 +#: netbox/ipam/tables/vlans.py:202 #: netbox/templates/circuits/circuitgroupassignment.html:22 -#: netbox/templates/dcim/interface.html:284 netbox/templates/dcim/site.html:37 +#: netbox/templates/dcim/interface.html:341 netbox/templates/dcim/site.html:37 #: netbox/templates/ipam/inc/panels/fhrp_groups.html:23 #: netbox/templates/ipam/vlan.html:27 netbox/templates/tenancy/contact.html:21 #: netbox/templates/tenancy/tenant.html:20 netbox/templates/users/group.html:6 @@ -1136,226 +1401,242 @@ msgstr "Affectation" #: netbox/tenancy/tables/tenants.py:42 netbox/users/filtersets.py:62 #: netbox/users/filtersets.py:185 netbox/users/forms/filtersets.py:31 #: netbox/users/forms/filtersets.py:37 netbox/users/forms/filtersets.py:79 -#: netbox/virtualization/forms/bulk_edit.py:65 -#: netbox/virtualization/forms/bulk_import.py:47 -#: netbox/virtualization/forms/filtersets.py:85 -#: netbox/virtualization/forms/model_forms.py:66 +#: netbox/virtualization/forms/bulk_edit.py:66 +#: netbox/virtualization/forms/bulk_import.py:48 +#: netbox/virtualization/forms/filtersets.py:90 +#: netbox/virtualization/forms/model_forms.py:70 #: netbox/virtualization/tables/clusters.py:70 #: netbox/vpn/forms/bulk_edit.py:112 netbox/vpn/forms/bulk_import.py:158 #: netbox/vpn/forms/filtersets.py:116 netbox/vpn/tables/crypto.py:31 -#: netbox/vpn/tables/tunnels.py:44 netbox/wireless/forms/bulk_edit.py:48 -#: netbox/wireless/forms/bulk_import.py:36 -#: netbox/wireless/forms/filtersets.py:46 -#: netbox/wireless/forms/model_forms.py:40 +#: netbox/vpn/tables/tunnels.py:44 netbox/wireless/forms/bulk_edit.py:50 +#: netbox/wireless/forms/bulk_import.py:38 +#: netbox/wireless/forms/filtersets.py:49 +#: netbox/wireless/forms/model_forms.py:41 #: netbox/wireless/tables/wirelesslan.py:48 msgid "Group" msgstr "Groupe" -#: netbox/circuits/forms/model_forms.py:182 +#: netbox/circuits/forms/model_forms.py:239 #: netbox/templates/circuits/circuitgroup.html:25 msgid "Circuit Group" msgstr "Groupe de circuits" -#: netbox/circuits/models/circuits.py:27 netbox/dcim/models/cables.py:67 -#: netbox/dcim/models/device_component_templates.py:517 -#: netbox/dcim/models/device_component_templates.py:617 -#: netbox/dcim/models/device_components.py:975 -#: netbox/dcim/models/device_components.py:1049 -#: netbox/dcim/models/device_components.py:1204 -#: netbox/dcim/models/devices.py:479 netbox/dcim/models/racks.py:224 +#: netbox/circuits/forms/model_forms.py:259 +msgid "Circuit type" +msgstr "Type de circuit" + +#: netbox/circuits/forms/model_forms.py:270 +msgid "Group Assignment" +msgstr "Affectation de groupe" + +#: netbox/circuits/models/base.py:18 netbox/dcim/models/cables.py:69 +#: netbox/dcim/models/device_component_templates.py:531 +#: netbox/dcim/models/device_component_templates.py:631 +#: netbox/dcim/models/device_components.py:476 +#: netbox/dcim/models/device_components.py:1026 +#: netbox/dcim/models/device_components.py:1097 +#: netbox/dcim/models/device_components.py:1243 +#: netbox/dcim/models/devices.py:478 netbox/dcim/models/racks.py:221 #: netbox/extras/models/tags.py:28 msgid "color" msgstr "couleur" -#: netbox/circuits/models/circuits.py:36 +#: netbox/circuits/models/circuits.py:34 msgid "circuit type" msgstr "type de circuit" -#: netbox/circuits/models/circuits.py:37 +#: netbox/circuits/models/circuits.py:35 msgid "circuit types" msgstr "types de circuits" -#: netbox/circuits/models/circuits.py:48 +#: netbox/circuits/models/circuits.py:46 +#: netbox/circuits/models/virtual_circuits.py:38 msgid "circuit ID" msgstr "identifiant du circuit" -#: netbox/circuits/models/circuits.py:49 +#: netbox/circuits/models/circuits.py:47 +#: netbox/circuits/models/virtual_circuits.py:39 msgid "Unique circuit ID" msgstr "ID de circuit unique" -#: netbox/circuits/models/circuits.py:69 netbox/core/models/data.py:52 -#: netbox/core/models/jobs.py:85 netbox/dcim/models/cables.py:49 -#: netbox/dcim/models/devices.py:653 netbox/dcim/models/devices.py:1173 -#: netbox/dcim/models/devices.py:1404 netbox/dcim/models/power.py:96 -#: netbox/dcim/models/racks.py:297 netbox/dcim/models/sites.py:154 -#: netbox/dcim/models/sites.py:266 netbox/ipam/models/ip.py:253 -#: netbox/ipam/models/ip.py:522 netbox/ipam/models/ip.py:730 -#: netbox/ipam/models/vlans.py:211 netbox/virtualization/models/clusters.py:74 -#: netbox/virtualization/models/virtualmachines.py:84 -#: netbox/vpn/models/tunnels.py:40 netbox/wireless/models.py:95 -#: netbox/wireless/models.py:159 +#: netbox/circuits/models/circuits.py:67 +#: netbox/circuits/models/virtual_circuits.py:59 netbox/core/models/data.py:52 +#: netbox/core/models/jobs.py:85 netbox/dcim/models/cables.py:51 +#: netbox/dcim/models/device_components.py:1283 +#: netbox/dcim/models/devices.py:645 netbox/dcim/models/devices.py:1181 +#: netbox/dcim/models/devices.py:1409 netbox/dcim/models/power.py:94 +#: netbox/dcim/models/racks.py:288 netbox/dcim/models/sites.py:154 +#: netbox/dcim/models/sites.py:270 netbox/ipam/models/ip.py:237 +#: netbox/ipam/models/ip.py:508 netbox/ipam/models/ip.py:729 +#: netbox/ipam/models/vlans.py:210 netbox/virtualization/models/clusters.py:70 +#: netbox/virtualization/models/virtualmachines.py:79 +#: netbox/vpn/models/tunnels.py:38 netbox/wireless/models.py:95 +#: netbox/wireless/models.py:156 msgid "status" msgstr "statut" -#: netbox/circuits/models/circuits.py:84 netbox/templates/core/plugin.html:20 +#: netbox/circuits/models/circuits.py:82 netbox/templates/core/plugin.html:20 msgid "installed" msgstr "installé" -#: netbox/circuits/models/circuits.py:89 +#: netbox/circuits/models/circuits.py:87 msgid "terminates" msgstr "met fin à" -#: netbox/circuits/models/circuits.py:94 +#: netbox/circuits/models/circuits.py:92 msgid "commit rate (Kbps)" msgstr "taux de validation (Kbits/s)" -#: netbox/circuits/models/circuits.py:95 +#: netbox/circuits/models/circuits.py:93 msgid "Committed rate" msgstr "Taux engagé" -#: netbox/circuits/models/circuits.py:137 +#: netbox/circuits/models/circuits.py:142 msgid "circuit" msgstr "circuit" -#: netbox/circuits/models/circuits.py:138 +#: netbox/circuits/models/circuits.py:143 msgid "circuits" msgstr "circuits" -#: netbox/circuits/models/circuits.py:170 +#: netbox/circuits/models/circuits.py:172 msgid "circuit group" msgstr "groupe de circuits" -#: netbox/circuits/models/circuits.py:171 +#: netbox/circuits/models/circuits.py:173 msgid "circuit groups" msgstr "groupes de circuits" -#: netbox/circuits/models/circuits.py:195 netbox/ipam/models/fhrp.py:93 -#: netbox/tenancy/models/contacts.py:134 +#: netbox/circuits/models/circuits.py:190 +msgid "member ID" +msgstr "ID de membre" + +#: netbox/circuits/models/circuits.py:202 netbox/ipam/models/fhrp.py:90 +#: netbox/tenancy/models/contacts.py:126 msgid "priority" msgstr "priorité" -#: netbox/circuits/models/circuits.py:213 +#: netbox/circuits/models/circuits.py:220 msgid "Circuit group assignment" msgstr "Affectation de groupes de circuits" -#: netbox/circuits/models/circuits.py:214 +#: netbox/circuits/models/circuits.py:221 msgid "Circuit group assignments" msgstr "Assignations de groupes de circuits" -#: netbox/circuits/models/circuits.py:240 -msgid "termination" -msgstr "" +#: netbox/circuits/models/circuits.py:247 +msgid "termination side" +msgstr "côté terminaison" -#: netbox/circuits/models/circuits.py:257 +#: netbox/circuits/models/circuits.py:266 msgid "port speed (Kbps)" msgstr "vitesse du port (Kbps)" -#: netbox/circuits/models/circuits.py:260 +#: netbox/circuits/models/circuits.py:269 msgid "Physical circuit speed" msgstr "Vitesse du circuit physique" -#: netbox/circuits/models/circuits.py:265 +#: netbox/circuits/models/circuits.py:274 msgid "upstream speed (Kbps)" msgstr "vitesse montante (Kbps)" -#: netbox/circuits/models/circuits.py:266 +#: netbox/circuits/models/circuits.py:275 msgid "Upstream speed, if different from port speed" msgstr "Vitesse ascendante, si elle est différente de la vitesse du port" -#: netbox/circuits/models/circuits.py:271 +#: netbox/circuits/models/circuits.py:280 msgid "cross-connect ID" msgstr "ID de connexion croisée" -#: netbox/circuits/models/circuits.py:272 +#: netbox/circuits/models/circuits.py:281 msgid "ID of the local cross-connect" msgstr "ID de l'interconnexion locale" -#: netbox/circuits/models/circuits.py:277 +#: netbox/circuits/models/circuits.py:286 msgid "patch panel/port(s)" msgstr "panneau de raccordement ou port (s)" -#: netbox/circuits/models/circuits.py:278 +#: netbox/circuits/models/circuits.py:287 msgid "Patch panel ID and port number(s)" msgstr "ID du panneau de raccordement et numéro (s) de port" -#: netbox/circuits/models/circuits.py:281 -#: netbox/dcim/models/device_component_templates.py:61 -#: netbox/dcim/models/device_components.py:68 netbox/dcim/models/racks.py:685 +#: netbox/circuits/models/circuits.py:290 +#: netbox/circuits/models/virtual_circuits.py:144 +#: netbox/dcim/models/device_component_templates.py:57 +#: netbox/dcim/models/device_components.py:63 netbox/dcim/models/racks.py:681 #: netbox/extras/models/configs.py:45 netbox/extras/models/configs.py:219 #: netbox/extras/models/customfields.py:125 netbox/extras/models/models.py:61 #: netbox/extras/models/models.py:158 netbox/extras/models/models.py:396 #: netbox/extras/models/models.py:511 #: netbox/extras/models/notifications.py:131 -#: netbox/extras/models/staging.py:31 netbox/extras/models/tags.py:32 -#: netbox/netbox/models/__init__.py:110 netbox/netbox/models/__init__.py:145 -#: netbox/netbox/models/__init__.py:191 netbox/users/models/permissions.py:24 -#: netbox/users/models/tokens.py:57 netbox/users/models/users.py:33 -#: netbox/virtualization/models/virtualmachines.py:289 +#: netbox/extras/models/staging.py:32 netbox/extras/models/tags.py:32 +#: netbox/ipam/models/vlans.py:358 netbox/netbox/models/__init__.py:115 +#: netbox/netbox/models/__init__.py:150 netbox/netbox/models/__init__.py:196 +#: netbox/users/models/permissions.py:24 netbox/users/models/tokens.py:57 +#: netbox/users/models/users.py:33 +#: netbox/virtualization/models/virtualmachines.py:276 msgid "description" msgstr "description" -#: netbox/circuits/models/circuits.py:294 +#: netbox/circuits/models/circuits.py:340 msgid "circuit termination" msgstr "terminaison du circuit" -#: netbox/circuits/models/circuits.py:295 +#: netbox/circuits/models/circuits.py:341 msgid "circuit terminations" msgstr "terminaisons de circuits" -#: netbox/circuits/models/circuits.py:308 -msgid "" -"A circuit termination must attach to either a site or a provider network." +#: netbox/circuits/models/circuits.py:353 +msgid "A circuit termination must attach to a terminating object." msgstr "" +"Une terminaison de circuit doit être rattachée à un objet de terminaison." -#: netbox/circuits/models/circuits.py:310 -msgid "" -"A circuit termination cannot attach to both a site and a provider network." -msgstr "" - -#: netbox/circuits/models/providers.py:22 -#: netbox/circuits/models/providers.py:66 -#: netbox/circuits/models/providers.py:104 netbox/core/models/data.py:39 +#: netbox/circuits/models/providers.py:21 +#: netbox/circuits/models/providers.py:63 +#: netbox/circuits/models/providers.py:98 netbox/core/models/data.py:39 #: netbox/core/models/jobs.py:46 #: netbox/dcim/models/device_component_templates.py:43 -#: netbox/dcim/models/device_components.py:53 -#: netbox/dcim/models/devices.py:593 netbox/dcim/models/devices.py:1335 -#: netbox/dcim/models/devices.py:1400 netbox/dcim/models/power.py:39 -#: netbox/dcim/models/power.py:92 netbox/dcim/models/racks.py:262 -#: netbox/dcim/models/sites.py:138 netbox/extras/models/configs.py:36 +#: netbox/dcim/models/device_components.py:52 +#: netbox/dcim/models/devices.py:589 netbox/dcim/models/devices.py:1341 +#: netbox/dcim/models/devices.py:1404 netbox/dcim/models/power.py:38 +#: netbox/dcim/models/power.py:89 netbox/dcim/models/racks.py:257 +#: netbox/dcim/models/sites.py:142 netbox/extras/models/configs.py:36 #: netbox/extras/models/configs.py:215 netbox/extras/models/customfields.py:92 #: netbox/extras/models/models.py:56 netbox/extras/models/models.py:153 #: netbox/extras/models/models.py:296 netbox/extras/models/models.py:392 #: netbox/extras/models/models.py:501 netbox/extras/models/models.py:596 #: netbox/extras/models/notifications.py:126 -#: netbox/extras/models/scripts.py:30 netbox/extras/models/staging.py:26 -#: netbox/ipam/models/asns.py:18 netbox/ipam/models/fhrp.py:25 -#: netbox/ipam/models/services.py:52 netbox/ipam/models/services.py:88 -#: netbox/ipam/models/vlans.py:36 netbox/ipam/models/vlans.py:200 -#: netbox/ipam/models/vrfs.py:22 netbox/ipam/models/vrfs.py:79 -#: netbox/netbox/models/__init__.py:137 netbox/netbox/models/__init__.py:181 -#: netbox/tenancy/models/contacts.py:64 netbox/tenancy/models/tenants.py:20 -#: netbox/tenancy/models/tenants.py:45 netbox/users/models/permissions.py:20 -#: netbox/users/models/users.py:28 netbox/virtualization/models/clusters.py:57 -#: netbox/virtualization/models/virtualmachines.py:72 -#: netbox/virtualization/models/virtualmachines.py:279 -#: netbox/vpn/models/crypto.py:24 netbox/vpn/models/crypto.py:71 -#: netbox/vpn/models/crypto.py:131 netbox/vpn/models/crypto.py:183 -#: netbox/vpn/models/crypto.py:221 netbox/vpn/models/l2vpn.py:22 -#: netbox/vpn/models/tunnels.py:35 netbox/wireless/models.py:51 +#: netbox/extras/models/scripts.py:30 netbox/extras/models/staging.py:27 +#: netbox/ipam/models/asns.py:17 netbox/ipam/models/fhrp.py:24 +#: netbox/ipam/models/services.py:51 netbox/ipam/models/services.py:84 +#: netbox/ipam/models/vlans.py:37 netbox/ipam/models/vlans.py:199 +#: netbox/ipam/models/vlans.py:337 netbox/ipam/models/vrfs.py:20 +#: netbox/ipam/models/vrfs.py:75 netbox/netbox/models/__init__.py:142 +#: netbox/netbox/models/__init__.py:186 netbox/tenancy/models/contacts.py:58 +#: netbox/tenancy/models/tenants.py:19 netbox/tenancy/models/tenants.py:42 +#: netbox/users/models/permissions.py:20 netbox/users/models/users.py:28 +#: netbox/virtualization/models/clusters.py:52 +#: netbox/virtualization/models/virtualmachines.py:71 +#: netbox/virtualization/models/virtualmachines.py:271 +#: netbox/virtualization/models/virtualmachines.py:305 +#: netbox/vpn/models/crypto.py:23 netbox/vpn/models/crypto.py:69 +#: netbox/vpn/models/crypto.py:128 netbox/vpn/models/crypto.py:180 +#: netbox/vpn/models/crypto.py:216 netbox/vpn/models/l2vpn.py:21 +#: netbox/vpn/models/tunnels.py:32 netbox/wireless/models.py:53 msgid "name" msgstr "nom" -#: netbox/circuits/models/providers.py:25 +#: netbox/circuits/models/providers.py:24 msgid "Full name of the provider" msgstr "Nom complet du fournisseur" -#: netbox/circuits/models/providers.py:28 netbox/dcim/models/devices.py:86 +#: netbox/circuits/models/providers.py:28 netbox/dcim/models/devices.py:88 #: netbox/dcim/models/racks.py:137 netbox/dcim/models/sites.py:149 #: netbox/extras/models/models.py:506 netbox/ipam/models/asns.py:23 -#: netbox/ipam/models/vlans.py:40 netbox/netbox/models/__init__.py:141 -#: netbox/netbox/models/__init__.py:186 netbox/tenancy/models/tenants.py:25 -#: netbox/tenancy/models/tenants.py:49 netbox/vpn/models/l2vpn.py:27 -#: netbox/wireless/models.py:56 +#: netbox/ipam/models/vlans.py:42 netbox/netbox/models/__init__.py:146 +#: netbox/netbox/models/__init__.py:191 netbox/tenancy/models/tenants.py:25 +#: netbox/tenancy/models/tenants.py:47 netbox/vpn/models/l2vpn.py:27 +#: netbox/wireless/models.py:59 msgid "slug" msgstr "slug" @@ -1367,67 +1648,100 @@ msgstr "fournisseur" msgid "providers" msgstr "fournisseurs" -#: netbox/circuits/models/providers.py:63 +#: netbox/circuits/models/providers.py:60 msgid "account ID" msgstr "ID de compte" -#: netbox/circuits/models/providers.py:86 +#: netbox/circuits/models/providers.py:83 msgid "provider account" msgstr "compte fournisseur" -#: netbox/circuits/models/providers.py:87 +#: netbox/circuits/models/providers.py:84 msgid "provider accounts" msgstr "comptes fournisseurs" -#: netbox/circuits/models/providers.py:115 +#: netbox/circuits/models/providers.py:110 msgid "service ID" msgstr "ID de service" -#: netbox/circuits/models/providers.py:126 +#: netbox/circuits/models/providers.py:121 msgid "provider network" msgstr "réseau de fournisseurs" -#: netbox/circuits/models/providers.py:127 +#: netbox/circuits/models/providers.py:122 msgid "provider networks" msgstr "réseaux de fournisseurs" -#: netbox/circuits/tables/circuits.py:32 -#: netbox/circuits/tables/circuits.py:132 +#: netbox/circuits/models/virtual_circuits.py:28 +msgid "virtual circuit type" +msgstr "type de circuit virtuel" + +#: netbox/circuits/models/virtual_circuits.py:29 +msgid "virtual circuit types" +msgstr "types de circuits virtuels" + +#: netbox/circuits/models/virtual_circuits.py:99 +msgid "virtual circuit" +msgstr "circuit virtuel" + +#: netbox/circuits/models/virtual_circuits.py:100 +msgid "virtual circuits" +msgstr "circuits virtuels" + +#: netbox/circuits/models/virtual_circuits.py:133 netbox/ipam/models/ip.py:194 +#: netbox/ipam/models/ip.py:736 netbox/vpn/models/tunnels.py:109 +msgid "role" +msgstr "rôle" + +#: netbox/circuits/models/virtual_circuits.py:151 +msgid "virtual circuit termination" +msgstr "terminaison de circuit virtuel" + +#: netbox/circuits/models/virtual_circuits.py:152 +msgid "virtual circuit terminations" +msgstr "terminaisons de circuits virtuels" + +#: netbox/circuits/tables/circuits.py:30 +#: netbox/circuits/tables/circuits.py:168 #: netbox/circuits/tables/providers.py:18 -#: netbox/circuits/tables/providers.py:69 -#: netbox/circuits/tables/providers.py:99 netbox/core/tables/data.py:16 +#: netbox/circuits/tables/providers.py:67 +#: netbox/circuits/tables/providers.py:97 +#: netbox/circuits/tables/virtual_circuits.py:18 netbox/core/tables/data.py:16 #: netbox/core/tables/jobs.py:14 netbox/core/tables/plugins.py:44 #: netbox/core/tables/tasks.py:11 netbox/core/tables/tasks.py:115 -#: netbox/dcim/forms/filtersets.py:63 netbox/dcim/forms/object_create.py:43 -#: netbox/dcim/tables/devices.py:52 netbox/dcim/tables/devices.py:92 -#: netbox/dcim/tables/devices.py:134 netbox/dcim/tables/devices.py:289 -#: netbox/dcim/tables/devices.py:392 netbox/dcim/tables/devices.py:433 -#: netbox/dcim/tables/devices.py:482 netbox/dcim/tables/devices.py:531 -#: netbox/dcim/tables/devices.py:648 netbox/dcim/tables/devices.py:731 -#: netbox/dcim/tables/devices.py:778 netbox/dcim/tables/devices.py:841 -#: netbox/dcim/tables/devices.py:911 netbox/dcim/tables/devices.py:974 -#: netbox/dcim/tables/devices.py:994 netbox/dcim/tables/devices.py:1023 -#: netbox/dcim/tables/devices.py:1053 netbox/dcim/tables/devicetypes.py:31 +#: netbox/dcim/forms/filtersets.py:64 netbox/dcim/forms/object_create.py:43 +#: netbox/dcim/tables/devices.py:63 netbox/dcim/tables/devices.py:103 +#: netbox/dcim/tables/devices.py:145 netbox/dcim/tables/devices.py:300 +#: netbox/dcim/tables/devices.py:403 netbox/dcim/tables/devices.py:444 +#: netbox/dcim/tables/devices.py:492 netbox/dcim/tables/devices.py:541 +#: netbox/dcim/tables/devices.py:562 netbox/dcim/tables/devices.py:682 +#: netbox/dcim/tables/devices.py:765 netbox/dcim/tables/devices.py:811 +#: netbox/dcim/tables/devices.py:873 netbox/dcim/tables/devices.py:942 +#: netbox/dcim/tables/devices.py:1007 netbox/dcim/tables/devices.py:1026 +#: netbox/dcim/tables/devices.py:1055 netbox/dcim/tables/devices.py:1085 +#: netbox/dcim/tables/devicetypes.py:31 netbox/dcim/tables/devicetypes.py:227 #: netbox/dcim/tables/power.py:22 netbox/dcim/tables/power.py:62 #: netbox/dcim/tables/racks.py:24 netbox/dcim/tables/racks.py:113 #: netbox/dcim/tables/sites.py:24 netbox/dcim/tables/sites.py:51 -#: netbox/dcim/tables/sites.py:78 netbox/dcim/tables/sites.py:130 -#: netbox/extras/forms/filtersets.py:213 netbox/extras/tables/tables.py:58 +#: netbox/dcim/tables/sites.py:78 netbox/dcim/tables/sites.py:129 +#: netbox/extras/forms/filtersets.py:218 netbox/extras/tables/tables.py:58 #: netbox/extras/tables/tables.py:122 netbox/extras/tables/tables.py:155 #: netbox/extras/tables/tables.py:180 netbox/extras/tables/tables.py:246 #: netbox/extras/tables/tables.py:361 netbox/extras/tables/tables.py:378 #: netbox/extras/tables/tables.py:401 netbox/extras/tables/tables.py:439 #: netbox/extras/tables/tables.py:491 netbox/extras/tables/tables.py:514 -#: netbox/ipam/forms/bulk_edit.py:407 netbox/ipam/forms/filtersets.py:386 -#: netbox/ipam/tables/asn.py:16 netbox/ipam/tables/ip.py:85 -#: netbox/ipam/tables/ip.py:160 netbox/ipam/tables/services.py:15 -#: netbox/ipam/tables/services.py:40 netbox/ipam/tables/vlans.py:64 -#: netbox/ipam/tables/vlans.py:114 netbox/ipam/tables/vrfs.py:26 +#: netbox/ipam/forms/bulk_edit.py:391 netbox/ipam/forms/filtersets.py:389 +#: netbox/ipam/forms/filtersets.py:474 netbox/ipam/tables/asn.py:16 +#: netbox/ipam/tables/ip.py:31 netbox/ipam/tables/ip.py:106 +#: netbox/ipam/tables/services.py:15 netbox/ipam/tables/services.py:40 +#: netbox/ipam/tables/vlans.py:33 netbox/ipam/tables/vlans.py:83 +#: netbox/ipam/tables/vlans.py:231 netbox/ipam/tables/vrfs.py:26 #: netbox/ipam/tables/vrfs.py:68 #: netbox/templates/circuits/circuitgroup.html:28 #: netbox/templates/circuits/circuittype.html:22 #: netbox/templates/circuits/provideraccount.html:28 #: netbox/templates/circuits/providernetwork.html:24 +#: netbox/templates/circuits/virtualcircuittype.html:22 #: netbox/templates/core/datasource.html:34 netbox/templates/core/job.html:44 #: netbox/templates/core/plugin.html:54 #: netbox/templates/core/rq_worker.html:43 @@ -1439,7 +1753,7 @@ msgstr "réseaux de fournisseurs" #: netbox/templates/dcim/inc/interface_vlans_table.html:5 #: netbox/templates/dcim/inc/panels/inventory_items.html:18 #: netbox/templates/dcim/interface.html:38 -#: netbox/templates/dcim/interface.html:165 +#: netbox/templates/dcim/interface.html:222 #: netbox/templates/dcim/inventoryitem.html:28 #: netbox/templates/dcim/inventoryitemrole.html:18 #: netbox/templates/dcim/location.html:29 @@ -1469,6 +1783,7 @@ msgstr "réseaux de fournisseurs" #: netbox/templates/ipam/service.html:24 #: netbox/templates/ipam/servicetemplate.html:15 #: netbox/templates/ipam/vlan.html:35 netbox/templates/ipam/vlangroup.html:30 +#: netbox/templates/ipam/vlantranslationpolicy.html:14 #: netbox/templates/tenancy/contact.html:25 #: netbox/templates/tenancy/contactgroup.html:21 #: netbox/templates/tenancy/contactrole.html:18 @@ -1500,106 +1815,218 @@ msgstr "réseaux de fournisseurs" #: netbox/virtualization/tables/clusters.py:17 #: netbox/virtualization/tables/clusters.py:39 #: netbox/virtualization/tables/clusters.py:62 -#: netbox/virtualization/tables/virtualmachines.py:55 -#: netbox/virtualization/tables/virtualmachines.py:139 -#: netbox/virtualization/tables/virtualmachines.py:194 +#: netbox/virtualization/tables/virtualmachines.py:26 +#: netbox/virtualization/tables/virtualmachines.py:109 +#: netbox/virtualization/tables/virtualmachines.py:165 #: netbox/vpn/tables/crypto.py:18 netbox/vpn/tables/crypto.py:57 #: netbox/vpn/tables/crypto.py:93 netbox/vpn/tables/crypto.py:129 #: netbox/vpn/tables/crypto.py:158 netbox/vpn/tables/l2vpn.py:23 #: netbox/vpn/tables/tunnels.py:18 netbox/vpn/tables/tunnels.py:40 #: netbox/wireless/tables/wirelesslan.py:18 -#: netbox/wireless/tables/wirelesslan.py:79 +#: netbox/wireless/tables/wirelesslan.py:88 msgid "Name" msgstr "Nom" -#: netbox/circuits/tables/circuits.py:41 -#: netbox/circuits/tables/circuits.py:138 -#: netbox/circuits/tables/providers.py:45 -#: netbox/circuits/tables/providers.py:79 netbox/netbox/navigation/menu.py:266 -#: netbox/netbox/navigation/menu.py:270 netbox/netbox/navigation/menu.py:272 +#: netbox/circuits/tables/circuits.py:39 +#: netbox/circuits/tables/circuits.py:174 +#: netbox/circuits/tables/providers.py:43 +#: netbox/circuits/tables/providers.py:77 +#: netbox/circuits/tables/virtual_circuits.py:27 +#: netbox/netbox/navigation/menu.py:274 netbox/netbox/navigation/menu.py:278 +#: netbox/netbox/navigation/menu.py:280 #: netbox/templates/circuits/provider.html:57 #: netbox/templates/circuits/provideraccount.html:44 #: netbox/templates/circuits/providernetwork.html:50 msgid "Circuits" msgstr "Circuits" -#: netbox/circuits/tables/circuits.py:55 +#: netbox/circuits/tables/circuits.py:54 +#: netbox/circuits/tables/virtual_circuits.py:42 #: netbox/templates/circuits/circuit.html:26 +#: netbox/templates/circuits/virtualcircuit.html:35 +#: netbox/templates/dcim/interface.html:174 msgid "Circuit ID" msgstr "Identifiant du circuit" -#: netbox/circuits/tables/circuits.py:69 -#: netbox/wireless/forms/model_forms.py:160 +#: netbox/circuits/tables/circuits.py:72 +#: netbox/wireless/forms/model_forms.py:163 msgid "Side A" msgstr "Côté A" -#: netbox/circuits/tables/circuits.py:74 +#: netbox/circuits/tables/circuits.py:77 msgid "Side Z" msgstr "Côté Z" -#: netbox/circuits/tables/circuits.py:77 -#: netbox/templates/circuits/circuit.html:55 +#: netbox/circuits/tables/circuits.py:80 +#: netbox/templates/circuits/circuit.html:65 msgid "Commit Rate" msgstr "Bande passante garantie" -#: netbox/circuits/tables/circuits.py:80 -#: netbox/circuits/tables/providers.py:48 -#: netbox/circuits/tables/providers.py:82 -#: netbox/circuits/tables/providers.py:107 netbox/dcim/tables/devices.py:1036 -#: netbox/dcim/tables/devicetypes.py:92 netbox/dcim/tables/modules.py:29 -#: netbox/dcim/tables/modules.py:73 netbox/dcim/tables/power.py:39 -#: netbox/dcim/tables/power.py:96 netbox/dcim/tables/racks.py:84 -#: netbox/dcim/tables/racks.py:145 netbox/dcim/tables/racks.py:225 -#: netbox/dcim/tables/sites.py:108 netbox/extras/tables/tables.py:582 -#: netbox/ipam/tables/asn.py:69 netbox/ipam/tables/fhrp.py:34 -#: netbox/ipam/tables/ip.py:136 netbox/ipam/tables/ip.py:275 -#: netbox/ipam/tables/ip.py:329 netbox/ipam/tables/ip.py:397 -#: netbox/ipam/tables/services.py:24 netbox/ipam/tables/services.py:54 -#: netbox/ipam/tables/vlans.py:145 netbox/ipam/tables/vrfs.py:47 -#: netbox/ipam/tables/vrfs.py:72 netbox/templates/dcim/htmx/cable_edit.html:89 +#: netbox/circuits/tables/circuits.py:84 +#: netbox/circuits/tables/providers.py:46 +#: netbox/circuits/tables/providers.py:80 +#: netbox/circuits/tables/providers.py:105 +#: netbox/circuits/tables/virtual_circuits.py:68 +#: netbox/dcim/tables/devices.py:1068 netbox/dcim/tables/devicetypes.py:97 +#: netbox/dcim/tables/modules.py:29 netbox/dcim/tables/modules.py:73 +#: netbox/dcim/tables/power.py:39 netbox/dcim/tables/power.py:96 +#: netbox/dcim/tables/racks.py:84 netbox/dcim/tables/racks.py:144 +#: netbox/dcim/tables/racks.py:224 netbox/dcim/tables/sites.py:107 +#: netbox/extras/tables/tables.py:582 netbox/ipam/tables/asn.py:69 +#: netbox/ipam/tables/fhrp.py:34 netbox/ipam/tables/ip.py:82 +#: netbox/ipam/tables/ip.py:226 netbox/ipam/tables/ip.py:281 +#: netbox/ipam/tables/ip.py:349 netbox/ipam/tables/services.py:24 +#: netbox/ipam/tables/services.py:54 netbox/ipam/tables/vlans.py:121 +#: netbox/ipam/tables/vrfs.py:47 netbox/ipam/tables/vrfs.py:72 +#: netbox/templates/dcim/htmx/cable_edit.html:89 #: netbox/templates/generic/bulk_edit.html:86 #: netbox/templates/inc/panels/comments.html:5 #: netbox/tenancy/tables/contacts.py:68 netbox/tenancy/tables/tenants.py:46 #: netbox/utilities/forms/fields/fields.py:29 -#: netbox/virtualization/tables/clusters.py:91 -#: netbox/virtualization/tables/virtualmachines.py:82 +#: netbox/virtualization/tables/clusters.py:95 +#: netbox/virtualization/tables/virtualmachines.py:52 #: netbox/vpn/tables/crypto.py:37 netbox/vpn/tables/crypto.py:74 #: netbox/vpn/tables/crypto.py:109 netbox/vpn/tables/crypto.py:140 #: netbox/vpn/tables/crypto.py:173 netbox/vpn/tables/l2vpn.py:37 #: netbox/vpn/tables/tunnels.py:61 netbox/wireless/tables/wirelesslan.py:27 -#: netbox/wireless/tables/wirelesslan.py:58 +#: netbox/wireless/tables/wirelesslan.py:66 msgid "Comments" msgstr "Commentaires" -#: netbox/circuits/tables/circuits.py:86 +#: netbox/circuits/tables/circuits.py:90 #: netbox/templates/tenancy/contact.html:84 #: netbox/tenancy/tables/contacts.py:73 msgid "Assignments" msgstr "Allocations" +#: netbox/circuits/tables/circuits.py:117 netbox/dcim/forms/connections.py:81 +msgid "Side" +msgstr "Côté" + +#: netbox/circuits/tables/circuits.py:120 +msgid "Termination Type" +msgstr "Type de terminaison" + +#: netbox/circuits/tables/circuits.py:123 +msgid "Termination Point" +msgstr "Point de terminaison" + +#: netbox/circuits/tables/circuits.py:134 netbox/dcim/tables/devices.py:161 +#: netbox/templates/dcim/sitegroup.html:26 +msgid "Site Group" +msgstr "Groupe de sites" + +#: netbox/circuits/tables/circuits.py:149 +#: netbox/templates/circuits/providernetwork.html:17 +#: netbox/templates/circuits/virtualcircuit.html:27 +#: netbox/templates/circuits/virtualcircuittermination.html:30 +#: netbox/templates/dcim/interface.html:170 +msgid "Provider Network" +msgstr "Réseau de fournisseurs" + #: netbox/circuits/tables/providers.py:23 msgid "Accounts" msgstr "Comptes" -#: netbox/circuits/tables/providers.py:29 +#: netbox/circuits/tables/providers.py:28 msgid "Account Count" msgstr "Nombre de comptes" -#: netbox/circuits/tables/providers.py:39 netbox/dcim/tables/sites.py:100 +#: netbox/circuits/tables/providers.py:37 netbox/dcim/tables/sites.py:99 msgid "ASN Count" msgstr "Nombre d'ASN" -#: netbox/circuits/views.py:331 +#: netbox/circuits/tables/virtual_circuits.py:65 +#: netbox/netbox/navigation/menu.py:234 +#: netbox/templates/circuits/virtualcircuit.html:87 +#: netbox/templates/vpn/l2vpn.html:56 netbox/templates/vpn/tunnel.html:72 +#: netbox/vpn/tables/tunnels.py:58 +msgid "Terminations" +msgstr "Terminaisons" + +#: netbox/circuits/tables/virtual_circuits.py:109 +#: netbox/dcim/forms/bulk_edit.py:745 netbox/dcim/forms/bulk_edit.py:1299 +#: netbox/dcim/forms/bulk_edit.py:1708 netbox/dcim/forms/bulk_edit.py:1760 +#: netbox/dcim/forms/bulk_import.py:668 netbox/dcim/forms/bulk_import.py:730 +#: netbox/dcim/forms/bulk_import.py:756 netbox/dcim/forms/bulk_import.py:782 +#: netbox/dcim/forms/bulk_import.py:802 netbox/dcim/forms/bulk_import.py:858 +#: netbox/dcim/forms/bulk_import.py:976 netbox/dcim/forms/bulk_import.py:1024 +#: netbox/dcim/forms/bulk_import.py:1041 netbox/dcim/forms/bulk_import.py:1053 +#: netbox/dcim/forms/bulk_import.py:1101 netbox/dcim/forms/bulk_import.py:1205 +#: netbox/dcim/forms/bulk_import.py:1541 netbox/dcim/forms/connections.py:24 +#: netbox/dcim/forms/filtersets.py:132 netbox/dcim/forms/filtersets.py:922 +#: netbox/dcim/forms/filtersets.py:1052 netbox/dcim/forms/filtersets.py:1243 +#: netbox/dcim/forms/filtersets.py:1268 netbox/dcim/forms/filtersets.py:1292 +#: netbox/dcim/forms/filtersets.py:1312 netbox/dcim/forms/filtersets.py:1339 +#: netbox/dcim/forms/filtersets.py:1449 netbox/dcim/forms/filtersets.py:1474 +#: netbox/dcim/forms/filtersets.py:1498 netbox/dcim/forms/filtersets.py:1516 +#: netbox/dcim/forms/filtersets.py:1533 netbox/dcim/forms/filtersets.py:1630 +#: netbox/dcim/forms/filtersets.py:1654 netbox/dcim/forms/filtersets.py:1678 +#: netbox/dcim/forms/model_forms.py:644 netbox/dcim/forms/model_forms.py:861 +#: netbox/dcim/forms/model_forms.py:1231 netbox/dcim/forms/model_forms.py:1716 +#: netbox/dcim/forms/model_forms.py:1787 +#: netbox/dcim/forms/object_create.py:249 netbox/dcim/tables/connections.py:22 +#: netbox/dcim/tables/connections.py:41 netbox/dcim/tables/connections.py:60 +#: netbox/dcim/tables/devices.py:296 netbox/dcim/tables/devices.py:381 +#: netbox/dcim/tables/devices.py:422 netbox/dcim/tables/devices.py:464 +#: netbox/dcim/tables/devices.py:514 netbox/dcim/tables/devices.py:619 +#: netbox/dcim/tables/devices.py:731 netbox/dcim/tables/devices.py:787 +#: netbox/dcim/tables/devices.py:833 netbox/dcim/tables/devices.py:892 +#: netbox/dcim/tables/devices.py:960 netbox/dcim/tables/devices.py:1089 +#: netbox/dcim/tables/modules.py:53 netbox/extras/forms/filtersets.py:328 +#: netbox/ipam/forms/bulk_import.py:303 netbox/ipam/forms/bulk_import.py:540 +#: netbox/ipam/forms/filtersets.py:603 netbox/ipam/forms/model_forms.py:333 +#: netbox/ipam/forms/model_forms.py:762 netbox/ipam/forms/model_forms.py:795 +#: netbox/ipam/forms/model_forms.py:821 netbox/ipam/tables/vlans.py:156 +#: netbox/templates/circuits/virtualcircuittermination.html:56 +#: netbox/templates/dcim/consoleport.html:20 +#: netbox/templates/dcim/consoleserverport.html:20 +#: netbox/templates/dcim/device.html:15 netbox/templates/dcim/device.html:130 +#: netbox/templates/dcim/device_edit.html:10 +#: netbox/templates/dcim/devicebay.html:20 +#: netbox/templates/dcim/devicebay.html:48 +#: netbox/templates/dcim/frontport.html:20 +#: netbox/templates/dcim/interface.html:30 +#: netbox/templates/dcim/interface.html:218 +#: netbox/templates/dcim/inventoryitem.html:20 +#: netbox/templates/dcim/module.html:57 +#: netbox/templates/dcim/modulebay.html:20 +#: netbox/templates/dcim/poweroutlet.html:20 +#: netbox/templates/dcim/powerport.html:20 +#: netbox/templates/dcim/rearport.html:20 +#: netbox/templates/dcim/virtualchassis.html:65 +#: netbox/templates/dcim/virtualchassis_edit.html:51 +#: netbox/templates/dcim/virtualdevicecontext.html:22 +#: netbox/templates/virtualization/virtualmachine.html:114 +#: netbox/templates/vpn/tunneltermination.html:23 +#: netbox/templates/wireless/inc/wirelesslink_interface.html:6 +#: netbox/virtualization/filtersets.py:133 +#: netbox/virtualization/forms/bulk_edit.py:119 +#: netbox/virtualization/forms/bulk_import.py:105 +#: netbox/virtualization/forms/filtersets.py:133 +#: netbox/virtualization/forms/model_forms.py:192 +#: netbox/virtualization/tables/virtualmachines.py:41 netbox/vpn/choices.py:52 +#: netbox/vpn/forms/bulk_import.py:86 netbox/vpn/forms/bulk_import.py:283 +#: netbox/vpn/forms/filtersets.py:275 netbox/vpn/forms/model_forms.py:91 +#: netbox/vpn/forms/model_forms.py:126 netbox/vpn/forms/model_forms.py:237 +#: netbox/vpn/forms/model_forms.py:456 +#: netbox/wireless/forms/model_forms.py:102 +#: netbox/wireless/forms/model_forms.py:144 +#: netbox/wireless/tables/wirelesslan.py:84 +msgid "Device" +msgstr "Appareil" + +#: netbox/circuits/views.py:356 #, python-brace-format msgid "No terminations have been defined for circuit {circuit}." msgstr "Aucune terminaison n'a été définie pour le circuit {circuit}." -#: netbox/circuits/views.py:380 +#: netbox/circuits/views.py:405 #, python-brace-format msgid "Swapped terminations for circuit {circuit}." msgstr "Terminaisons échangées pour le circuit {circuit}." -#: netbox/core/api/views.py:39 +#: netbox/core/api/views.py:51 msgid "This user does not have permission to synchronize this data source." msgstr "" "Cet utilisateur n'est pas autorisé à synchroniser cette source de données." @@ -1625,12 +2052,13 @@ msgstr "Terminé" #: netbox/core/choices.py:22 netbox/core/choices.py:59 #: netbox/core/constants.py:20 netbox/core/tables/tasks.py:34 #: netbox/dcim/choices.py:187 netbox/dcim/choices.py:239 -#: netbox/dcim/choices.py:1609 netbox/virtualization/choices.py:47 +#: netbox/dcim/choices.py:1593 netbox/dcim/choices.py:1666 +#: netbox/virtualization/choices.py:48 msgid "Failed" msgstr "Échoué" -#: netbox/core/choices.py:35 netbox/netbox/navigation/menu.py:335 -#: netbox/netbox/navigation/menu.py:339 +#: netbox/core/choices.py:35 netbox/netbox/navigation/menu.py:356 +#: netbox/netbox/navigation/menu.py:360 #: netbox/templates/extras/script/base.html:14 #: netbox/templates/extras/script_list.html:7 #: netbox/templates/extras/script_list.html:12 @@ -1660,12 +2088,36 @@ msgstr "En exécution" msgid "Errored" msgstr "En erreur" -#: netbox/core/choices.py:87 netbox/core/tables/plugins.py:63 +#: netbox/core/choices.py:82 +msgid "Minutely" +msgstr "Minutieusement" + +#: netbox/core/choices.py:83 +msgid "Hourly" +msgstr "Toutes les heures" + +#: netbox/core/choices.py:84 +msgid "12 hours" +msgstr "12 heures" + +#: netbox/core/choices.py:85 +msgid "Daily" +msgstr "Tous les jours" + +#: netbox/core/choices.py:86 +msgid "Weekly" +msgstr "Hebdo" + +#: netbox/core/choices.py:87 +msgid "30 days" +msgstr "30 jours" + +#: netbox/core/choices.py:103 netbox/core/tables/plugins.py:63 #: netbox/templates/generic/object.html:61 msgid "Updated" msgstr "Mis à jour" -#: netbox/core/choices.py:88 +#: netbox/core/choices.py:104 msgid "Deleted" msgstr "Supprimé" @@ -1693,7 +2145,7 @@ msgstr "Annulé" #: netbox/core/data_backends.py:32 netbox/core/tables/plugins.py:51 #: netbox/templates/core/plugin.html:88 -#: netbox/templates/dcim/interface.html:216 +#: netbox/templates/dcim/interface.html:273 msgid "Local" msgstr "Local" @@ -1767,7 +2219,7 @@ msgstr "Source de données (ID)" msgid "Data source (name)" msgstr "Source de données (nom)" -#: netbox/core/filtersets.py:145 netbox/dcim/filtersets.py:501 +#: netbox/core/filtersets.py:145 netbox/dcim/filtersets.py:502 #: netbox/extras/filtersets.py:287 netbox/extras/filtersets.py:331 #: netbox/extras/filtersets.py:353 netbox/extras/filtersets.py:413 #: netbox/users/filtersets.py:28 @@ -1779,12 +2231,12 @@ msgid "User name" msgstr "Nom d'utilisateur" #: netbox/core/forms/bulk_edit.py:25 netbox/core/forms/filtersets.py:43 -#: netbox/core/tables/data.py:26 netbox/dcim/forms/bulk_edit.py:1137 -#: netbox/dcim/forms/bulk_edit.py:1415 netbox/dcim/forms/filtersets.py:1370 -#: netbox/dcim/tables/devices.py:553 netbox/dcim/tables/devicetypes.py:224 +#: netbox/core/tables/data.py:26 netbox/dcim/forms/bulk_edit.py:1140 +#: netbox/dcim/forms/bulk_edit.py:1418 netbox/dcim/forms/filtersets.py:1375 +#: netbox/dcim/tables/devices.py:567 netbox/dcim/tables/devicetypes.py:231 #: netbox/extras/forms/bulk_edit.py:123 netbox/extras/forms/bulk_edit.py:187 -#: netbox/extras/forms/bulk_edit.py:246 netbox/extras/forms/filtersets.py:142 -#: netbox/extras/forms/filtersets.py:229 netbox/extras/forms/filtersets.py:294 +#: netbox/extras/forms/bulk_edit.py:246 netbox/extras/forms/filtersets.py:145 +#: netbox/extras/forms/filtersets.py:235 netbox/extras/forms/filtersets.py:300 #: netbox/extras/tables/tables.py:162 netbox/extras/tables/tables.py:253 #: netbox/extras/tables/tables.py:415 netbox/netbox/preferences.py:22 #: netbox/templates/core/datasource.html:42 @@ -1795,18 +2247,18 @@ msgstr "Nom d'utilisateur" #: netbox/templates/users/objectpermission.html:25 #: netbox/templates/virtualization/vminterface.html:29 #: netbox/users/forms/bulk_edit.py:89 netbox/users/forms/filtersets.py:70 -#: netbox/users/tables.py:83 netbox/virtualization/forms/bulk_edit.py:217 -#: netbox/virtualization/forms/filtersets.py:215 +#: netbox/users/tables.py:83 netbox/virtualization/forms/bulk_edit.py:199 +#: netbox/virtualization/forms/filtersets.py:220 msgid "Enabled" msgstr "Activé" -#: netbox/core/forms/bulk_edit.py:34 netbox/extras/forms/model_forms.py:285 +#: netbox/core/forms/bulk_edit.py:34 netbox/extras/forms/model_forms.py:299 #: netbox/templates/extras/savedfilter.html:52 #: netbox/vpn/forms/filtersets.py:97 netbox/vpn/forms/filtersets.py:127 #: netbox/vpn/forms/filtersets.py:151 netbox/vpn/forms/filtersets.py:170 -#: netbox/vpn/forms/model_forms.py:301 netbox/vpn/forms/model_forms.py:321 -#: netbox/vpn/forms/model_forms.py:337 netbox/vpn/forms/model_forms.py:357 -#: netbox/vpn/forms/model_forms.py:380 +#: netbox/vpn/forms/model_forms.py:302 netbox/vpn/forms/model_forms.py:323 +#: netbox/vpn/forms/model_forms.py:339 netbox/vpn/forms/model_forms.py:360 +#: netbox/vpn/forms/model_forms.py:383 msgid "Parameters" msgstr "Paramètres" @@ -1815,16 +2267,15 @@ msgid "Ignore rules" msgstr "Ignorer les règles" #: netbox/core/forms/filtersets.py:30 netbox/core/forms/model_forms.py:97 -#: netbox/extras/forms/model_forms.py:248 -#: netbox/extras/forms/model_forms.py:578 -#: netbox/extras/forms/model_forms.py:632 netbox/extras/tables/tables.py:191 +#: netbox/extras/forms/model_forms.py:262 +#: netbox/extras/forms/model_forms.py:592 +#: netbox/extras/forms/model_forms.py:646 netbox/extras/tables/tables.py:191 #: netbox/extras/tables/tables.py:483 netbox/extras/tables/tables.py:518 #: netbox/templates/core/datasource.html:31 -#: netbox/templates/dcim/device/render_config.html:18 #: netbox/templates/extras/configcontext.html:29 #: netbox/templates/extras/configtemplate.html:21 #: netbox/templates/extras/exporttemplate.html:35 -#: netbox/templates/virtualization/virtualmachine/render_config.html:18 +#: netbox/templates/extras/object_render_config.html:19 msgid "Data Source" msgstr "Source de données" @@ -1833,17 +2284,17 @@ msgid "File" msgstr "Fichier" #: netbox/core/forms/filtersets.py:60 netbox/core/forms/mixins.py:16 -#: netbox/extras/forms/filtersets.py:170 netbox/extras/forms/filtersets.py:328 -#: netbox/extras/forms/filtersets.py:413 +#: netbox/extras/forms/filtersets.py:174 netbox/extras/forms/filtersets.py:335 +#: netbox/extras/forms/filtersets.py:421 msgid "Data source" msgstr "Source de données" -#: netbox/core/forms/filtersets.py:70 netbox/extras/forms/filtersets.py:440 +#: netbox/core/forms/filtersets.py:71 netbox/extras/forms/filtersets.py:448 msgid "Creation" msgstr "Création" -#: netbox/core/forms/filtersets.py:74 netbox/core/forms/filtersets.py:160 -#: netbox/extras/forms/filtersets.py:461 netbox/extras/tables/tables.py:220 +#: netbox/core/forms/filtersets.py:75 netbox/core/forms/filtersets.py:161 +#: netbox/extras/forms/filtersets.py:469 netbox/extras/tables/tables.py:220 #: netbox/extras/tables/tables.py:294 netbox/extras/tables/tables.py:326 #: netbox/extras/tables/tables.py:571 netbox/templates/core/job.html:38 #: netbox/templates/core/objectchange.html:52 @@ -1851,42 +2302,42 @@ msgstr "Création" msgid "Object Type" msgstr "Type d'objet" -#: netbox/core/forms/filtersets.py:84 +#: netbox/core/forms/filtersets.py:85 msgid "Created after" msgstr "Créé après" -#: netbox/core/forms/filtersets.py:89 +#: netbox/core/forms/filtersets.py:90 msgid "Created before" msgstr "Créé avant" -#: netbox/core/forms/filtersets.py:94 +#: netbox/core/forms/filtersets.py:95 msgid "Scheduled after" msgstr "Planifié après" -#: netbox/core/forms/filtersets.py:99 +#: netbox/core/forms/filtersets.py:100 msgid "Scheduled before" msgstr "Planifié avant" -#: netbox/core/forms/filtersets.py:104 +#: netbox/core/forms/filtersets.py:105 msgid "Started after" msgstr "Commencé après" -#: netbox/core/forms/filtersets.py:109 +#: netbox/core/forms/filtersets.py:110 msgid "Started before" msgstr "Commencé avant" -#: netbox/core/forms/filtersets.py:114 +#: netbox/core/forms/filtersets.py:115 msgid "Completed after" msgstr "Terminé après" -#: netbox/core/forms/filtersets.py:119 +#: netbox/core/forms/filtersets.py:120 msgid "Completed before" msgstr "Terminé avant" -#: netbox/core/forms/filtersets.py:126 netbox/core/forms/filtersets.py:155 -#: netbox/dcim/forms/bulk_edit.py:462 netbox/dcim/forms/filtersets.py:418 -#: netbox/dcim/forms/filtersets.py:462 netbox/dcim/forms/model_forms.py:316 -#: netbox/extras/forms/filtersets.py:456 netbox/extras/forms/filtersets.py:475 +#: netbox/core/forms/filtersets.py:127 netbox/core/forms/filtersets.py:156 +#: netbox/dcim/forms/bulk_edit.py:465 netbox/dcim/forms/filtersets.py:419 +#: netbox/dcim/forms/filtersets.py:463 netbox/dcim/forms/model_forms.py:324 +#: netbox/extras/forms/filtersets.py:464 netbox/extras/forms/filtersets.py:484 #: netbox/extras/tables/tables.py:302 netbox/extras/tables/tables.py:342 #: netbox/templates/core/objectchange.html:36 #: netbox/templates/dcim/rackreservation.html:58 @@ -1900,22 +2351,22 @@ msgstr "Terminé avant" msgid "User" msgstr "Utilisateur" -#: netbox/core/forms/filtersets.py:134 netbox/core/tables/change_logging.py:15 +#: netbox/core/forms/filtersets.py:135 netbox/core/tables/change_logging.py:15 #: netbox/extras/tables/tables.py:609 netbox/extras/tables/tables.py:646 #: netbox/templates/core/objectchange.html:32 msgid "Time" msgstr "Heure" -#: netbox/core/forms/filtersets.py:139 netbox/extras/forms/filtersets.py:445 +#: netbox/core/forms/filtersets.py:140 netbox/extras/forms/filtersets.py:453 msgid "After" msgstr "Après" -#: netbox/core/forms/filtersets.py:144 netbox/extras/forms/filtersets.py:450 +#: netbox/core/forms/filtersets.py:145 netbox/extras/forms/filtersets.py:458 msgid "Before" msgstr "Avant" -#: netbox/core/forms/filtersets.py:148 netbox/core/tables/change_logging.py:29 -#: netbox/extras/forms/model_forms.py:396 +#: netbox/core/forms/filtersets.py:149 netbox/core/tables/change_logging.py:29 +#: netbox/extras/forms/model_forms.py:410 #: netbox/templates/core/objectchange.html:46 #: netbox/templates/extras/eventrule.html:71 msgid "Action" @@ -1953,22 +2404,22 @@ msgstr "" msgid "Rack Elevations" msgstr "Élévations des baies" -#: netbox/core/forms/model_forms.py:157 netbox/dcim/choices.py:1520 -#: netbox/dcim/forms/bulk_edit.py:984 netbox/dcim/forms/bulk_edit.py:1372 -#: netbox/dcim/forms/bulk_edit.py:1390 netbox/dcim/tables/racks.py:158 -#: netbox/netbox/navigation/menu.py:291 netbox/netbox/navigation/menu.py:295 +#: netbox/core/forms/model_forms.py:157 netbox/dcim/choices.py:1522 +#: netbox/dcim/forms/bulk_edit.py:987 netbox/dcim/forms/bulk_edit.py:1375 +#: netbox/dcim/forms/bulk_edit.py:1393 netbox/dcim/tables/racks.py:157 +#: netbox/netbox/navigation/menu.py:312 netbox/netbox/navigation/menu.py:316 msgid "Power" msgstr "Puissance" -#: netbox/core/forms/model_forms.py:159 netbox/netbox/navigation/menu.py:154 +#: netbox/core/forms/model_forms.py:159 netbox/netbox/navigation/menu.py:160 #: netbox/templates/core/inc/config_data.html:37 msgid "IPAM" msgstr "IPAM" -#: netbox/core/forms/model_forms.py:160 netbox/netbox/navigation/menu.py:230 +#: netbox/core/forms/model_forms.py:160 netbox/netbox/navigation/menu.py:238 #: netbox/templates/core/inc/config_data.html:50 #: netbox/vpn/forms/bulk_edit.py:77 netbox/vpn/forms/filtersets.py:43 -#: netbox/vpn/forms/model_forms.py:61 netbox/vpn/forms/model_forms.py:146 +#: netbox/vpn/forms/model_forms.py:62 netbox/vpn/forms/model_forms.py:147 msgid "Security" msgstr "Sécurité" @@ -1983,7 +2434,7 @@ msgid "Pagination" msgstr "Pagination" #: netbox/core/forms/model_forms.py:163 netbox/extras/forms/bulk_edit.py:92 -#: netbox/extras/forms/filtersets.py:47 netbox/extras/forms/model_forms.py:116 +#: netbox/extras/forms/filtersets.py:48 netbox/extras/forms/model_forms.py:116 #: netbox/extras/forms/model_forms.py:129 #: netbox/templates/core/inc/config_data.html:93 msgid "Validation" @@ -1994,7 +2445,7 @@ msgstr "Validation" msgid "User Preferences" msgstr "Préférences de l'utilisateur" -#: netbox/core/forms/model_forms.py:167 netbox/dcim/forms/filtersets.py:732 +#: netbox/core/forms/model_forms.py:167 netbox/dcim/forms/filtersets.py:733 #: netbox/templates/core/inc/config_data.html:127 #: netbox/users/forms/model_forms.py:64 msgid "Miscellaneous" @@ -2030,7 +2481,7 @@ msgstr "nom d'utilisateur" msgid "request ID" msgstr "ID de demande" -#: netbox/core/models/change_logging.py:52 netbox/extras/models/staging.py:69 +#: netbox/core/models/change_logging.py:52 netbox/extras/models/staging.py:77 msgid "action" msgstr "action" @@ -2057,9 +2508,9 @@ msgstr "" "La journalisation des modifications n'est pas prise en charge pour ce type " "d'objet ({type})." -#: netbox/core/models/config.py:18 netbox/core/models/data.py:266 +#: netbox/core/models/config.py:18 netbox/core/models/data.py:263 #: netbox/core/models/files.py:27 netbox/core/models/jobs.py:50 -#: netbox/extras/models/models.py:730 netbox/extras/models/notifications.py:39 +#: netbox/extras/models/models.py:733 netbox/extras/models/notifications.py:39 #: netbox/extras/models/notifications.py:186 #: netbox/netbox/models/features.py:53 netbox/users/models/tokens.py:32 msgid "created" @@ -2094,24 +2545,24 @@ msgstr "Configuration actuelle" msgid "Config revision #{id}" msgstr "Révision de configuration #{id}" -#: netbox/core/models/data.py:44 netbox/dcim/models/cables.py:43 -#: netbox/dcim/models/device_component_templates.py:203 -#: netbox/dcim/models/device_component_templates.py:237 -#: netbox/dcim/models/device_component_templates.py:272 -#: netbox/dcim/models/device_component_templates.py:334 -#: netbox/dcim/models/device_component_templates.py:413 -#: netbox/dcim/models/device_component_templates.py:512 -#: netbox/dcim/models/device_component_templates.py:612 -#: netbox/dcim/models/device_components.py:283 -#: netbox/dcim/models/device_components.py:312 -#: netbox/dcim/models/device_components.py:345 -#: netbox/dcim/models/device_components.py:463 -#: netbox/dcim/models/device_components.py:605 -#: netbox/dcim/models/device_components.py:970 -#: netbox/dcim/models/device_components.py:1044 -#: netbox/dcim/models/power.py:102 netbox/extras/models/customfields.py:78 +#: netbox/core/models/data.py:44 netbox/dcim/models/cables.py:44 +#: netbox/dcim/models/device_component_templates.py:199 +#: netbox/dcim/models/device_component_templates.py:234 +#: netbox/dcim/models/device_component_templates.py:270 +#: netbox/dcim/models/device_component_templates.py:335 +#: netbox/dcim/models/device_component_templates.py:420 +#: netbox/dcim/models/device_component_templates.py:526 +#: netbox/dcim/models/device_component_templates.py:626 +#: netbox/dcim/models/device_components.py:279 +#: netbox/dcim/models/device_components.py:306 +#: netbox/dcim/models/device_components.py:337 +#: netbox/dcim/models/device_components.py:453 +#: netbox/dcim/models/device_components.py:653 +#: netbox/dcim/models/device_components.py:1021 +#: netbox/dcim/models/device_components.py:1092 +#: netbox/dcim/models/power.py:100 netbox/extras/models/customfields.py:78 #: netbox/extras/models/search.py:41 -#: netbox/virtualization/models/clusters.py:61 netbox/vpn/models/l2vpn.py:32 +#: netbox/virtualization/models/clusters.py:57 netbox/vpn/models/l2vpn.py:32 msgid "type" msgstr "type" @@ -2123,8 +2574,8 @@ msgid "URL" msgstr "URL" #: netbox/core/models/data.py:59 -#: netbox/dcim/models/device_component_templates.py:418 -#: netbox/dcim/models/device_components.py:512 +#: netbox/dcim/models/device_component_templates.py:425 +#: netbox/dcim/models/device_components.py:505 #: netbox/extras/models/models.py:70 netbox/extras/models/models.py:301 #: netbox/extras/models/models.py:526 netbox/users/models/permissions.py:29 msgid "enabled" @@ -2156,18 +2607,18 @@ msgstr "source de données" msgid "data sources" msgstr "sources de données" -#: netbox/core/models/data.py:122 +#: netbox/core/models/data.py:119 #, python-brace-format msgid "Unknown backend type: {type}" msgstr "Type de backend inconnu : {type}" -#: netbox/core/models/data.py:164 +#: netbox/core/models/data.py:161 msgid "Cannot initiate sync; syncing already in progress." msgstr "" "Impossible de lancer la synchronisation ; la synchronisation est déjà en " "cours." -#: netbox/core/models/data.py:177 +#: netbox/core/models/data.py:174 msgid "" "There was an error initializing the backend. A dependency needs to be " "installed: " @@ -2175,48 +2626,48 @@ msgstr "" "Une erreur s'est produite lors de l'initialisation du backend. Une " "dépendance doit être installée : " -#: netbox/core/models/data.py:270 netbox/core/models/files.py:31 +#: netbox/core/models/data.py:267 netbox/core/models/files.py:31 #: netbox/netbox/models/features.py:59 msgid "last updated" msgstr "dernière mise à jour" -#: netbox/core/models/data.py:280 netbox/dcim/models/cables.py:444 +#: netbox/core/models/data.py:277 netbox/dcim/models/cables.py:446 msgid "path" msgstr "chemin" -#: netbox/core/models/data.py:283 +#: netbox/core/models/data.py:280 msgid "File path relative to the data source's root" msgstr "Chemin du fichier par rapport à la racine de la source de données" -#: netbox/core/models/data.py:287 netbox/ipam/models/ip.py:503 +#: netbox/core/models/data.py:284 netbox/ipam/models/ip.py:489 msgid "size" msgstr "taille" -#: netbox/core/models/data.py:290 +#: netbox/core/models/data.py:287 msgid "hash" msgstr "hachage" -#: netbox/core/models/data.py:294 +#: netbox/core/models/data.py:291 msgid "Length must be 64 hexadecimal characters." msgstr "La longueur doit être de 64 caractères hexadécimaux." -#: netbox/core/models/data.py:296 +#: netbox/core/models/data.py:293 msgid "SHA256 hash of the file data" msgstr "Hachage SHA256 des données du fichier" -#: netbox/core/models/data.py:313 +#: netbox/core/models/data.py:310 msgid "data file" msgstr "fichier de données" -#: netbox/core/models/data.py:314 +#: netbox/core/models/data.py:311 msgid "data files" msgstr "fichiers de données" -#: netbox/core/models/data.py:401 +#: netbox/core/models/data.py:398 msgid "auto sync record" msgstr "enregistrement de synchronisation automatique" -#: netbox/core/models/data.py:402 +#: netbox/core/models/data.py:399 msgid "auto sync records" msgstr "enregistrements de synchronisation automatique" @@ -2240,6 +2691,11 @@ msgstr "fichier géré" msgid "managed files" msgstr "fichiers gérés" +#: netbox/core/models/files.py:100 +#, python-brace-format +msgid "A {model} with this file path already exists ({path})." +msgstr "UNE {model} avec ce chemin de fichier existe déjà ({path})." + #: netbox/core/models/jobs.py:54 msgid "scheduled" msgstr "prévu" @@ -2261,7 +2717,7 @@ msgid "completed" msgstr "terminé" #: netbox/core/models/jobs.py:91 netbox/extras/models/models.py:101 -#: netbox/extras/models/staging.py:87 +#: netbox/extras/models/staging.py:95 msgid "data" msgstr "données" @@ -2293,7 +2749,7 @@ msgstr "" "Statut invalide pour l'arrêt de la tâche. Les choix sont les suivants : " "{choices}" -#: netbox/core/models/jobs.py:221 +#: netbox/core/models/jobs.py:231 msgid "" "enqueue() cannot be called with values for both schedule_at and immediate." msgstr "" @@ -2316,7 +2772,7 @@ msgstr "Nom complet" #: netbox/extras/tables/tables.py:297 netbox/extras/tables/tables.py:329 #: netbox/extras/tables/tables.py:409 netbox/extras/tables/tables.py:470 #: netbox/extras/tables/tables.py:576 netbox/extras/tables/tables.py:616 -#: netbox/extras/tables/tables.py:653 netbox/netbox/tables/tables.py:244 +#: netbox/extras/tables/tables.py:653 netbox/netbox/tables/tables.py:247 #: netbox/templates/core/objectchange.html:58 #: netbox/templates/extras/eventrule.html:78 #: netbox/templates/extras/journalentry.html:18 @@ -2344,11 +2800,11 @@ msgid "Last updated" msgstr "Dernière mise à jour" #: netbox/core/tables/jobs.py:10 netbox/core/tables/tasks.py:76 -#: netbox/dcim/tables/devicetypes.py:164 netbox/extras/tables/tables.py:216 -#: netbox/extras/tables/tables.py:460 netbox/netbox/tables/tables.py:189 +#: netbox/dcim/tables/devicetypes.py:169 netbox/extras/tables/tables.py:216 +#: netbox/extras/tables/tables.py:460 netbox/netbox/tables/tables.py:192 #: netbox/templates/dcim/virtualchassis_edit.html:52 #: netbox/utilities/forms/forms.py:73 -#: netbox/wireless/tables/wirelesslink.py:17 +#: netbox/wireless/tables/wirelesslink.py:16 msgid "ID" msgstr "IDENTIFIANT" @@ -2414,7 +2870,7 @@ msgstr "Travailleurs" msgid "Host" msgstr "Hôte" -#: netbox/core/tables/tasks.py:50 netbox/ipam/forms/filtersets.py:535 +#: netbox/core/tables/tasks.py:50 netbox/ipam/forms/filtersets.py:587 msgid "Port" msgstr "Port" @@ -2462,71 +2918,84 @@ msgstr "PID" msgid "No workers found" msgstr "Aucun travailleur n'a été trouvé" -#: netbox/core/views.py:90 -#, python-brace-format -msgid "Queued job #{id} to sync {datasource}" -msgstr "Tâche en file d'attente #{id} pour synchroniser {datasource}" - -#: netbox/core/views.py:319 -#, python-brace-format -msgid "Restored configuration revision #{id}" -msgstr "Révision de configuration restaurée #{id}" - -#: netbox/core/views.py:412 netbox/core/views.py:455 netbox/core/views.py:531 +#: netbox/core/utils.py:84 netbox/core/utils.py:150 netbox/core/views.py:396 #, python-brace-format msgid "Job {job_id} not found" msgstr "Poste {job_id} introuvable" -#: netbox/core/views.py:463 -#, python-brace-format -msgid "Job {id} has been deleted." -msgstr "Poste {id} a été supprimé." - -#: netbox/core/views.py:465 -#, python-brace-format -msgid "Error deleting job {id}: {error}" -msgstr "Erreur lors de la suppression du job {id}: {error}" - -#: netbox/core/views.py:478 netbox/core/views.py:496 +#: netbox/core/utils.py:102 netbox/core/utils.py:118 #, python-brace-format msgid "Job {id} not found." msgstr "Poste {id} introuvable." -#: netbox/core/views.py:484 +#: netbox/core/views.py:88 +#, python-brace-format +msgid "Queued job #{id} to sync {datasource}" +msgstr "Tâche en file d'attente #{id} pour synchroniser {datasource}" + +#: netbox/core/views.py:332 +#, python-brace-format +msgid "Restored configuration revision #{id}" +msgstr "Révision de configuration restaurée #{id}" + +#: netbox/core/views.py:435 +#, python-brace-format +msgid "Job {id} has been deleted." +msgstr "Poste {id} a été supprimé." + +#: netbox/core/views.py:437 +#, python-brace-format +msgid "Error deleting job {id}: {error}" +msgstr "Erreur lors de la suppression du job {id}: {error}" + +#: netbox/core/views.py:446 #, python-brace-format msgid "Job {id} has been re-enqueued." msgstr "Poste {id} a été replacé dans la file d'attente." -#: netbox/core/views.py:519 +#: netbox/core/views.py:455 #, python-brace-format msgid "Job {id} has been enqueued." msgstr "Poste {id} a été mis en file d'attente." -#: netbox/core/views.py:538 +#: netbox/core/views.py:464 #, python-brace-format msgid "Job {id} has been stopped." msgstr "Poste {id} a été arrêté." -#: netbox/core/views.py:540 +#: netbox/core/views.py:466 #, python-brace-format msgid "Failed to stop job {id}" msgstr "Impossible d'arrêter la tâche {id}" -#: netbox/core/views.py:674 +#: netbox/core/views.py:601 msgid "Plugins catalog could not be loaded" msgstr "Le catalogue des plugins n'a pas pu être chargé" -#: netbox/core/views.py:708 +#: netbox/core/views.py:635 #, python-brace-format msgid "Plugin {name} not found" msgstr "Plug-in {name} introuvable" -#: netbox/dcim/api/serializers_/devices.py:49 -#: netbox/dcim/api/serializers_/devicetypes.py:25 +#: netbox/dcim/api/serializers_/device_components.py:262 +msgid "Interface mode does not support q-in-q service vlan" +msgstr "Le mode interface ne prend pas en charge le VLAN de service q-in-q" + +#: netbox/dcim/api/serializers_/device_components.py:269 +msgid "Interface mode does not support untagged vlan" +msgstr "Le mode interface ne prend pas en charge le VLAN non balisé" + +#: netbox/dcim/api/serializers_/device_components.py:274 +#: netbox/dcim/api/serializers_/device_components.py:279 +msgid "Interface mode does not support tagged vlans" +msgstr "Le mode interface ne prend pas en charge les VLAN balisés" + +#: netbox/dcim/api/serializers_/devices.py:53 +#: netbox/dcim/api/serializers_/devicetypes.py:26 msgid "Position (U)" msgstr "Position (U)" -#: netbox/dcim/api/serializers_/racks.py:112 +#: netbox/dcim/api/serializers_/racks.py:113 #: netbox/templates/dcim/rack.html:28 msgid "Facility ID" msgstr "ID de l'établissement" @@ -2536,8 +3005,9 @@ msgid "Staging" msgstr "Mise en scène" #: netbox/dcim/choices.py:23 netbox/dcim/choices.py:189 -#: netbox/dcim/choices.py:240 netbox/dcim/choices.py:1533 -#: netbox/virtualization/choices.py:23 netbox/virtualization/choices.py:48 +#: netbox/dcim/choices.py:240 netbox/dcim/choices.py:1535 +#: netbox/dcim/choices.py:1667 netbox/virtualization/choices.py:23 +#: netbox/virtualization/choices.py:49 msgid "Decommissioning" msgstr "Démantèlement" @@ -2600,7 +3070,7 @@ msgstr "Obsolète" msgid "Millimeters" msgstr "Millimètres" -#: netbox/dcim/choices.py:115 netbox/dcim/choices.py:1555 +#: netbox/dcim/choices.py:115 netbox/dcim/choices.py:1557 msgid "Inches" msgstr "Pouces" @@ -2614,21 +3084,21 @@ msgstr "De l'avant vers l'arrière" msgid "Rear to front" msgstr "De l'arrière vers l'avant" -#: netbox/dcim/choices.py:151 netbox/dcim/forms/bulk_edit.py:69 -#: netbox/dcim/forms/bulk_edit.py:88 netbox/dcim/forms/bulk_edit.py:174 -#: netbox/dcim/forms/bulk_edit.py:1420 netbox/dcim/forms/bulk_import.py:60 -#: netbox/dcim/forms/bulk_import.py:74 netbox/dcim/forms/bulk_import.py:137 -#: netbox/dcim/forms/bulk_import.py:588 netbox/dcim/forms/bulk_import.py:855 -#: netbox/dcim/forms/bulk_import.py:1110 netbox/dcim/forms/filtersets.py:234 -#: netbox/dcim/forms/model_forms.py:74 netbox/dcim/forms/model_forms.py:93 -#: netbox/dcim/forms/model_forms.py:170 netbox/dcim/forms/model_forms.py:1069 -#: netbox/dcim/forms/model_forms.py:1509 -#: netbox/dcim/forms/object_import.py:176 netbox/dcim/tables/devices.py:656 -#: netbox/dcim/tables/devices.py:869 netbox/dcim/tables/devices.py:954 -#: netbox/extras/tables/tables.py:223 netbox/ipam/tables/fhrp.py:59 -#: netbox/ipam/tables/ip.py:378 netbox/ipam/tables/services.py:44 -#: netbox/templates/dcim/interface.html:102 -#: netbox/templates/dcim/interface.html:309 +#: netbox/dcim/choices.py:151 netbox/dcim/forms/bulk_edit.py:72 +#: netbox/dcim/forms/bulk_edit.py:91 netbox/dcim/forms/bulk_edit.py:177 +#: netbox/dcim/forms/bulk_edit.py:1423 netbox/dcim/forms/bulk_import.py:62 +#: netbox/dcim/forms/bulk_import.py:76 netbox/dcim/forms/bulk_import.py:139 +#: netbox/dcim/forms/bulk_import.py:593 netbox/dcim/forms/bulk_import.py:863 +#: netbox/dcim/forms/bulk_import.py:1118 netbox/dcim/forms/filtersets.py:235 +#: netbox/dcim/forms/model_forms.py:76 netbox/dcim/forms/model_forms.py:95 +#: netbox/dcim/forms/model_forms.py:174 netbox/dcim/forms/model_forms.py:1082 +#: netbox/dcim/forms/model_forms.py:1551 +#: netbox/dcim/forms/object_import.py:177 netbox/dcim/tables/devices.py:690 +#: netbox/dcim/tables/devices.py:900 netbox/dcim/tables/devices.py:987 +#: netbox/dcim/tables/devices.py:1147 netbox/extras/tables/tables.py:223 +#: netbox/ipam/tables/fhrp.py:59 netbox/ipam/tables/ip.py:330 +#: netbox/ipam/tables/services.py:44 netbox/templates/dcim/interface.html:108 +#: netbox/templates/dcim/interface.html:366 #: netbox/templates/dcim/location.html:41 netbox/templates/dcim/region.html:37 #: netbox/templates/dcim/sitegroup.html:37 #: netbox/templates/ipam/service.html:28 @@ -2641,12 +3111,12 @@ msgstr "De l'arrière vers l'avant" #: netbox/tenancy/forms/bulk_import.py:58 #: netbox/tenancy/forms/model_forms.py:25 #: netbox/tenancy/forms/model_forms.py:68 -#: netbox/virtualization/forms/bulk_edit.py:207 -#: netbox/virtualization/forms/bulk_import.py:151 -#: netbox/virtualization/tables/virtualmachines.py:162 -#: netbox/wireless/forms/bulk_edit.py:24 -#: netbox/wireless/forms/bulk_import.py:21 -#: netbox/wireless/forms/model_forms.py:21 +#: netbox/virtualization/forms/bulk_edit.py:189 +#: netbox/virtualization/forms/bulk_import.py:157 +#: netbox/virtualization/tables/virtualmachines.py:132 +#: netbox/wireless/forms/bulk_edit.py:26 +#: netbox/wireless/forms/bulk_import.py:23 +#: netbox/wireless/forms/model_forms.py:22 msgid "Parent" msgstr "Parent" @@ -2669,7 +3139,7 @@ msgid "Rear" msgstr "Arrière" #: netbox/dcim/choices.py:186 netbox/dcim/choices.py:238 -#: netbox/virtualization/choices.py:46 +#: netbox/dcim/choices.py:1665 netbox/virtualization/choices.py:47 msgid "Staged" msgstr "Mis en scène" @@ -2702,7 +3172,7 @@ msgid "Top to bottom" msgstr "De haut en bas" #: netbox/dcim/choices.py:215 netbox/dcim/choices.py:259 -#: netbox/dcim/choices.py:1305 +#: netbox/dcim/choices.py:1307 msgid "Passive" msgstr "Passif" @@ -2732,8 +3202,8 @@ msgstr "Propriétaire" #: netbox/dcim/choices.py:581 netbox/dcim/choices.py:824 #: netbox/dcim/choices.py:1221 netbox/dcim/choices.py:1223 -#: netbox/dcim/choices.py:1449 netbox/dcim/choices.py:1451 -#: netbox/netbox/navigation/menu.py:200 +#: netbox/dcim/choices.py:1451 netbox/dcim/choices.py:1453 +#: netbox/netbox/navigation/menu.py:208 msgid "Other" msgstr "Autres" @@ -2750,10 +3220,10 @@ msgid "Virtual" msgstr "Virtuel" #: netbox/dcim/choices.py:856 netbox/dcim/choices.py:1099 -#: netbox/dcim/forms/bulk_edit.py:1563 netbox/dcim/forms/filtersets.py:1330 -#: netbox/dcim/forms/model_forms.py:995 netbox/dcim/forms/model_forms.py:1404 -#: netbox/netbox/navigation/menu.py:140 netbox/netbox/navigation/menu.py:144 -#: netbox/templates/dcim/interface.html:210 +#: netbox/dcim/forms/bulk_edit.py:1578 netbox/dcim/forms/filtersets.py:1335 +#: netbox/dcim/forms/model_forms.py:1007 netbox/dcim/forms/model_forms.py:1445 +#: netbox/netbox/navigation/menu.py:146 netbox/netbox/navigation/menu.py:150 +#: netbox/templates/dcim/interface.html:267 msgid "Wireless" msgstr "Sans fil" @@ -2761,13 +3231,13 @@ msgstr "Sans fil" msgid "Virtual interfaces" msgstr "Interfaces virtuelles" -#: netbox/dcim/choices.py:1025 netbox/dcim/forms/bulk_edit.py:1428 -#: netbox/dcim/forms/bulk_import.py:862 netbox/dcim/forms/model_forms.py:981 -#: netbox/dcim/tables/devices.py:660 netbox/templates/dcim/interface.html:106 +#: netbox/dcim/choices.py:1025 netbox/dcim/forms/bulk_edit.py:1431 +#: netbox/dcim/forms/bulk_import.py:870 netbox/dcim/forms/model_forms.py:993 +#: netbox/dcim/tables/devices.py:694 netbox/templates/dcim/interface.html:112 #: netbox/templates/virtualization/vminterface.html:43 -#: netbox/virtualization/forms/bulk_edit.py:212 -#: netbox/virtualization/forms/bulk_import.py:158 -#: netbox/virtualization/tables/virtualmachines.py:166 +#: netbox/virtualization/forms/bulk_edit.py:194 +#: netbox/virtualization/forms/bulk_import.py:164 +#: netbox/virtualization/tables/virtualmachines.py:136 msgid "Bridge" msgstr "Passerelle" @@ -2791,10 +3261,10 @@ msgstr "Ethernet (panneau arrière)" msgid "Cellular" msgstr "Cellulaire" -#: netbox/dcim/choices.py:1167 netbox/dcim/forms/filtersets.py:383 -#: netbox/dcim/forms/filtersets.py:809 netbox/dcim/forms/filtersets.py:963 -#: netbox/dcim/forms/filtersets.py:1542 -#: netbox/templates/dcim/inventoryitem.html:52 +#: netbox/dcim/choices.py:1167 netbox/dcim/forms/filtersets.py:384 +#: netbox/dcim/forms/filtersets.py:810 netbox/dcim/forms/filtersets.py:964 +#: netbox/dcim/forms/filtersets.py:1547 +#: netbox/templates/dcim/inventoryitem.html:56 #: netbox/templates/dcim/virtualchassis_edit.html:54 msgid "Serial" msgstr "Série" @@ -2820,109 +3290,95 @@ msgstr "Complet" msgid "Auto" msgstr "Automatique" -#: netbox/dcim/choices.py:1265 +#: netbox/dcim/choices.py:1266 msgid "Access" msgstr "Accès" -#: netbox/dcim/choices.py:1266 netbox/ipam/tables/vlans.py:172 -#: netbox/ipam/tables/vlans.py:217 +#: netbox/dcim/choices.py:1267 netbox/ipam/tables/vlans.py:148 +#: netbox/ipam/tables/vlans.py:193 #: netbox/templates/dcim/inc/interface_vlans_table.html:7 msgid "Tagged" msgstr "Tagué" -#: netbox/dcim/choices.py:1267 +#: netbox/dcim/choices.py:1268 msgid "Tagged (All)" msgstr "Tagué (Tous)" -#: netbox/dcim/choices.py:1296 +#: netbox/dcim/choices.py:1269 netbox/templates/ipam/vlan_edit.html:22 +msgid "Q-in-Q (802.1ad)" +msgstr "Qin-Q (802.1ad)" + +#: netbox/dcim/choices.py:1298 msgid "IEEE Standard" msgstr "Norme IEEE" -#: netbox/dcim/choices.py:1307 +#: netbox/dcim/choices.py:1309 msgid "Passive 24V (2-pair)" msgstr "24 V passif (2 paires)" -#: netbox/dcim/choices.py:1308 +#: netbox/dcim/choices.py:1310 msgid "Passive 24V (4-pair)" msgstr "24 V passif (4 paires)" -#: netbox/dcim/choices.py:1309 +#: netbox/dcim/choices.py:1311 msgid "Passive 48V (2-pair)" msgstr "48 V passif (2 paires)" -#: netbox/dcim/choices.py:1310 +#: netbox/dcim/choices.py:1312 msgid "Passive 48V (4-pair)" msgstr "48 V passif (4 paires)" -#: netbox/dcim/choices.py:1380 netbox/dcim/choices.py:1490 +#: netbox/dcim/choices.py:1382 netbox/dcim/choices.py:1492 msgid "Copper" msgstr "Cuivre" -#: netbox/dcim/choices.py:1403 +#: netbox/dcim/choices.py:1405 msgid "Fiber Optic" msgstr "fibre optique" -#: netbox/dcim/choices.py:1436 netbox/dcim/choices.py:1519 +#: netbox/dcim/choices.py:1438 netbox/dcim/choices.py:1521 msgid "USB" msgstr "USB" -#: netbox/dcim/choices.py:1506 +#: netbox/dcim/choices.py:1508 msgid "Fiber" msgstr "Fibre" -#: netbox/dcim/choices.py:1531 netbox/dcim/forms/filtersets.py:1227 +#: netbox/dcim/choices.py:1533 netbox/dcim/forms/filtersets.py:1228 msgid "Connected" msgstr "Connecté" -#: netbox/dcim/choices.py:1550 netbox/wireless/choices.py:497 +#: netbox/dcim/choices.py:1552 netbox/netbox/choices.py:175 msgid "Kilometers" msgstr "Kilomètres" -#: netbox/dcim/choices.py:1551 netbox/templates/dcim/cable_trace.html:65 -#: netbox/wireless/choices.py:498 +#: netbox/dcim/choices.py:1553 netbox/netbox/choices.py:176 +#: netbox/templates/dcim/cable_trace.html:65 msgid "Meters" msgstr "Compteurs" -#: netbox/dcim/choices.py:1552 +#: netbox/dcim/choices.py:1554 msgid "Centimeters" msgstr "Centimètres" -#: netbox/dcim/choices.py:1553 netbox/wireless/choices.py:499 +#: netbox/dcim/choices.py:1555 netbox/netbox/choices.py:177 msgid "Miles" msgstr "Miles" -#: netbox/dcim/choices.py:1554 netbox/templates/dcim/cable_trace.html:66 -#: netbox/wireless/choices.py:500 +#: netbox/dcim/choices.py:1556 netbox/netbox/choices.py:178 +#: netbox/templates/dcim/cable_trace.html:66 msgid "Feet" msgstr "Pieds" -#: netbox/dcim/choices.py:1570 netbox/templates/dcim/device.html:327 -#: netbox/templates/dcim/rack.html:107 -msgid "Kilograms" -msgstr "Kilogrammes" - -#: netbox/dcim/choices.py:1571 -msgid "Grams" -msgstr "Grammes" - -#: netbox/dcim/choices.py:1572 netbox/templates/dcim/device.html:328 -#: netbox/templates/dcim/rack.html:108 -msgid "Pounds" -msgstr "Livres" - -#: netbox/dcim/choices.py:1573 -msgid "Ounces" -msgstr "Onces" - -#: netbox/dcim/choices.py:1620 +#: netbox/dcim/choices.py:1604 msgid "Redundant" msgstr "Redondant" -#: netbox/dcim/choices.py:1641 +#: netbox/dcim/choices.py:1625 msgid "Single phase" msgstr "Monophasé" -#: netbox/dcim/choices.py:1642 +#: netbox/dcim/choices.py:1626 msgid "Three-phase" msgstr "Triphasé" @@ -2936,335 +3392,319 @@ msgstr "Format d'adresse MAC non valide : {value}" msgid "Invalid WWN format: {value}" msgstr "Format WWN non valide : {value}" -#: netbox/dcim/filtersets.py:86 +#: netbox/dcim/filtersets.py:87 msgid "Parent region (ID)" msgstr "Région parente (ID)" -#: netbox/dcim/filtersets.py:92 +#: netbox/dcim/filtersets.py:93 msgid "Parent region (slug)" msgstr "Région parente (slug)" -#: netbox/dcim/filtersets.py:116 +#: netbox/dcim/filtersets.py:117 msgid "Parent site group (ID)" msgstr "Groupe de sites parent (ID)" -#: netbox/dcim/filtersets.py:122 +#: netbox/dcim/filtersets.py:123 msgid "Parent site group (slug)" msgstr "Groupe de sites parents (slug)" -#: netbox/dcim/filtersets.py:164 netbox/extras/filtersets.py:364 -#: netbox/ipam/filtersets.py:843 netbox/ipam/filtersets.py:995 +#: netbox/dcim/filtersets.py:165 netbox/extras/filtersets.py:364 +#: netbox/ipam/filtersets.py:810 netbox/ipam/filtersets.py:962 msgid "Group (ID)" msgstr "Groupe (ID)" -#: netbox/dcim/filtersets.py:170 +#: netbox/dcim/filtersets.py:171 msgid "Group (slug)" msgstr "Groupe (slug)" -#: netbox/dcim/filtersets.py:176 netbox/dcim/filtersets.py:181 +#: netbox/dcim/filtersets.py:177 netbox/dcim/filtersets.py:182 msgid "AS (ID)" msgstr "COMME (ID)" -#: netbox/dcim/filtersets.py:246 +#: netbox/dcim/filtersets.py:247 msgid "Parent location (ID)" msgstr "Lieu de résidence du parent (ID)" -#: netbox/dcim/filtersets.py:252 +#: netbox/dcim/filtersets.py:253 msgid "Parent location (slug)" msgstr "Localisation du parent (slug)" -#: netbox/dcim/filtersets.py:258 netbox/dcim/filtersets.py:369 -#: netbox/dcim/filtersets.py:490 netbox/dcim/filtersets.py:1057 -#: netbox/dcim/filtersets.py:1404 netbox/dcim/filtersets.py:2182 -msgid "Location (ID)" -msgstr "Lieu (ID)" - -#: netbox/dcim/filtersets.py:265 netbox/dcim/filtersets.py:376 -#: netbox/dcim/filtersets.py:497 netbox/dcim/filtersets.py:1410 -#: netbox/extras/filtersets.py:542 -msgid "Location (slug)" -msgstr "Emplacement (slug)" - -#: netbox/dcim/filtersets.py:296 netbox/dcim/filtersets.py:381 -#: netbox/dcim/filtersets.py:539 netbox/dcim/filtersets.py:678 -#: netbox/dcim/filtersets.py:882 netbox/dcim/filtersets.py:933 -#: netbox/dcim/filtersets.py:973 netbox/dcim/filtersets.py:1306 -#: netbox/dcim/filtersets.py:1840 +#: netbox/dcim/filtersets.py:297 netbox/dcim/filtersets.py:382 +#: netbox/dcim/filtersets.py:540 netbox/dcim/filtersets.py:679 +#: netbox/dcim/filtersets.py:883 netbox/dcim/filtersets.py:934 +#: netbox/dcim/filtersets.py:974 netbox/dcim/filtersets.py:1308 +#: netbox/dcim/filtersets.py:1960 msgid "Manufacturer (ID)" msgstr "Fabricant (ID)" -#: netbox/dcim/filtersets.py:302 netbox/dcim/filtersets.py:387 -#: netbox/dcim/filtersets.py:545 netbox/dcim/filtersets.py:684 -#: netbox/dcim/filtersets.py:888 netbox/dcim/filtersets.py:939 -#: netbox/dcim/filtersets.py:979 netbox/dcim/filtersets.py:1312 -#: netbox/dcim/filtersets.py:1846 +#: netbox/dcim/filtersets.py:303 netbox/dcim/filtersets.py:388 +#: netbox/dcim/filtersets.py:546 netbox/dcim/filtersets.py:685 +#: netbox/dcim/filtersets.py:889 netbox/dcim/filtersets.py:940 +#: netbox/dcim/filtersets.py:980 netbox/dcim/filtersets.py:1314 +#: netbox/dcim/filtersets.py:1966 msgid "Manufacturer (slug)" msgstr "Fabricant (slug)" -#: netbox/dcim/filtersets.py:393 +#: netbox/dcim/filtersets.py:394 msgid "Rack type (slug)" msgstr "Type de baie (slug)" -#: netbox/dcim/filtersets.py:397 +#: netbox/dcim/filtersets.py:398 msgid "Rack type (ID)" msgstr "Type de baie (ID)" -#: netbox/dcim/filtersets.py:411 netbox/dcim/filtersets.py:892 -#: netbox/dcim/filtersets.py:994 netbox/dcim/filtersets.py:1850 -#: netbox/ipam/filtersets.py:383 netbox/ipam/filtersets.py:495 -#: netbox/ipam/filtersets.py:1005 netbox/virtualization/filtersets.py:210 +#: netbox/dcim/filtersets.py:412 netbox/dcim/filtersets.py:893 +#: netbox/dcim/filtersets.py:995 netbox/dcim/filtersets.py:1970 +#: netbox/ipam/filtersets.py:350 netbox/ipam/filtersets.py:462 +#: netbox/ipam/filtersets.py:972 netbox/virtualization/filtersets.py:176 msgid "Role (ID)" msgstr "Rôle (ID)" -#: netbox/dcim/filtersets.py:417 netbox/dcim/filtersets.py:898 -#: netbox/dcim/filtersets.py:1000 netbox/dcim/filtersets.py:1856 -#: netbox/extras/filtersets.py:558 netbox/ipam/filtersets.py:389 -#: netbox/ipam/filtersets.py:501 netbox/ipam/filtersets.py:1011 -#: netbox/virtualization/filtersets.py:216 +#: netbox/dcim/filtersets.py:418 netbox/dcim/filtersets.py:899 +#: netbox/dcim/filtersets.py:1001 netbox/dcim/filtersets.py:1976 +#: netbox/extras/filtersets.py:558 netbox/ipam/filtersets.py:356 +#: netbox/ipam/filtersets.py:468 netbox/ipam/filtersets.py:978 +#: netbox/virtualization/filtersets.py:182 msgid "Role (slug)" msgstr "Rôle (slug)" -#: netbox/dcim/filtersets.py:447 netbox/dcim/filtersets.py:1062 -#: netbox/dcim/filtersets.py:1415 netbox/dcim/filtersets.py:2244 +#: netbox/dcim/filtersets.py:448 netbox/dcim/filtersets.py:1063 +#: netbox/dcim/filtersets.py:1417 netbox/dcim/filtersets.py:2368 msgid "Rack (ID)" msgstr "Baie (ID)" -#: netbox/dcim/filtersets.py:507 netbox/extras/filtersets.py:293 +#: netbox/dcim/filtersets.py:508 netbox/extras/filtersets.py:293 #: netbox/extras/filtersets.py:337 netbox/extras/filtersets.py:359 #: netbox/extras/filtersets.py:419 netbox/users/filtersets.py:113 #: netbox/users/filtersets.py:180 msgid "User (name)" msgstr "Utilisateur (nom)" -#: netbox/dcim/filtersets.py:549 +#: netbox/dcim/filtersets.py:550 msgid "Default platform (ID)" msgstr "Plateforme par défaut (ID)" -#: netbox/dcim/filtersets.py:555 +#: netbox/dcim/filtersets.py:556 msgid "Default platform (slug)" msgstr "Plateforme par défaut (slug)" -#: netbox/dcim/filtersets.py:558 netbox/dcim/forms/filtersets.py:517 +#: netbox/dcim/filtersets.py:559 netbox/dcim/forms/filtersets.py:518 msgid "Has a front image" msgstr "Possède une image frontale" -#: netbox/dcim/filtersets.py:562 netbox/dcim/forms/filtersets.py:524 +#: netbox/dcim/filtersets.py:563 netbox/dcim/forms/filtersets.py:525 msgid "Has a rear image" msgstr "Possède une image arrière" -#: netbox/dcim/filtersets.py:567 netbox/dcim/filtersets.py:688 -#: netbox/dcim/filtersets.py:1131 netbox/dcim/forms/filtersets.py:531 -#: netbox/dcim/forms/filtersets.py:627 netbox/dcim/forms/filtersets.py:848 +#: netbox/dcim/filtersets.py:568 netbox/dcim/filtersets.py:689 +#: netbox/dcim/filtersets.py:1132 netbox/dcim/forms/filtersets.py:532 +#: netbox/dcim/forms/filtersets.py:628 netbox/dcim/forms/filtersets.py:849 msgid "Has console ports" msgstr "Possède des ports de console" -#: netbox/dcim/filtersets.py:571 netbox/dcim/filtersets.py:692 -#: netbox/dcim/filtersets.py:1135 netbox/dcim/forms/filtersets.py:538 -#: netbox/dcim/forms/filtersets.py:634 netbox/dcim/forms/filtersets.py:855 +#: netbox/dcim/filtersets.py:572 netbox/dcim/filtersets.py:693 +#: netbox/dcim/filtersets.py:1136 netbox/dcim/forms/filtersets.py:539 +#: netbox/dcim/forms/filtersets.py:635 netbox/dcim/forms/filtersets.py:856 msgid "Has console server ports" msgstr "Possède des ports de serveur de console" -#: netbox/dcim/filtersets.py:575 netbox/dcim/filtersets.py:696 -#: netbox/dcim/filtersets.py:1139 netbox/dcim/forms/filtersets.py:545 -#: netbox/dcim/forms/filtersets.py:641 netbox/dcim/forms/filtersets.py:862 +#: netbox/dcim/filtersets.py:576 netbox/dcim/filtersets.py:697 +#: netbox/dcim/filtersets.py:1140 netbox/dcim/forms/filtersets.py:546 +#: netbox/dcim/forms/filtersets.py:642 netbox/dcim/forms/filtersets.py:863 msgid "Has power ports" msgstr "Possède des ports d'alimentation" -#: netbox/dcim/filtersets.py:579 netbox/dcim/filtersets.py:700 -#: netbox/dcim/filtersets.py:1143 netbox/dcim/forms/filtersets.py:552 -#: netbox/dcim/forms/filtersets.py:648 netbox/dcim/forms/filtersets.py:869 +#: netbox/dcim/filtersets.py:580 netbox/dcim/filtersets.py:701 +#: netbox/dcim/filtersets.py:1144 netbox/dcim/forms/filtersets.py:553 +#: netbox/dcim/forms/filtersets.py:649 netbox/dcim/forms/filtersets.py:870 msgid "Has power outlets" msgstr "Dispose de prises de courant" -#: netbox/dcim/filtersets.py:583 netbox/dcim/filtersets.py:704 -#: netbox/dcim/filtersets.py:1147 netbox/dcim/forms/filtersets.py:559 -#: netbox/dcim/forms/filtersets.py:655 netbox/dcim/forms/filtersets.py:876 +#: netbox/dcim/filtersets.py:584 netbox/dcim/filtersets.py:705 +#: netbox/dcim/filtersets.py:1148 netbox/dcim/forms/filtersets.py:560 +#: netbox/dcim/forms/filtersets.py:656 netbox/dcim/forms/filtersets.py:877 msgid "Has interfaces" msgstr "Possède des interfaces" -#: netbox/dcim/filtersets.py:587 netbox/dcim/filtersets.py:708 -#: netbox/dcim/filtersets.py:1151 netbox/dcim/forms/filtersets.py:566 -#: netbox/dcim/forms/filtersets.py:662 netbox/dcim/forms/filtersets.py:883 +#: netbox/dcim/filtersets.py:588 netbox/dcim/filtersets.py:709 +#: netbox/dcim/filtersets.py:1152 netbox/dcim/forms/filtersets.py:567 +#: netbox/dcim/forms/filtersets.py:663 netbox/dcim/forms/filtersets.py:884 msgid "Has pass-through ports" msgstr "Possède des ports d'intercommunication" -#: netbox/dcim/filtersets.py:591 netbox/dcim/filtersets.py:1155 -#: netbox/dcim/forms/filtersets.py:580 +#: netbox/dcim/filtersets.py:592 netbox/dcim/filtersets.py:1156 +#: netbox/dcim/forms/filtersets.py:581 msgid "Has module bays" msgstr "Dispose de baies pour modules" -#: netbox/dcim/filtersets.py:595 netbox/dcim/filtersets.py:1159 -#: netbox/dcim/forms/filtersets.py:573 +#: netbox/dcim/filtersets.py:596 netbox/dcim/filtersets.py:1160 +#: netbox/dcim/forms/filtersets.py:574 msgid "Has device bays" msgstr "Dispose de baies pour appareils" -#: netbox/dcim/filtersets.py:599 netbox/dcim/forms/filtersets.py:587 +#: netbox/dcim/filtersets.py:600 netbox/dcim/forms/filtersets.py:588 msgid "Has inventory items" msgstr "Possède des articles en inventaire" -#: netbox/dcim/filtersets.py:756 netbox/dcim/filtersets.py:989 -#: netbox/dcim/filtersets.py:1436 +#: netbox/dcim/filtersets.py:757 netbox/dcim/filtersets.py:990 +#: netbox/dcim/filtersets.py:1438 msgid "Device type (ID)" msgstr "Type d'appareil (ID)" -#: netbox/dcim/filtersets.py:772 netbox/dcim/filtersets.py:1317 +#: netbox/dcim/filtersets.py:773 netbox/dcim/filtersets.py:1319 msgid "Module type (ID)" msgstr "Type de module (ID)" -#: netbox/dcim/filtersets.py:804 netbox/dcim/filtersets.py:1591 +#: netbox/dcim/filtersets.py:805 netbox/dcim/filtersets.py:1593 msgid "Power port (ID)" msgstr "Port d'alimentation (ID)" -#: netbox/dcim/filtersets.py:878 netbox/dcim/filtersets.py:1836 +#: netbox/dcim/filtersets.py:879 netbox/dcim/filtersets.py:1956 msgid "Parent inventory item (ID)" msgstr "Article d'inventaire parent (ID)" -#: netbox/dcim/filtersets.py:921 netbox/dcim/filtersets.py:947 -#: netbox/dcim/filtersets.py:1127 netbox/virtualization/filtersets.py:238 +#: netbox/dcim/filtersets.py:922 netbox/dcim/filtersets.py:948 +#: netbox/dcim/filtersets.py:1128 netbox/virtualization/filtersets.py:204 msgid "Config template (ID)" msgstr "Modèle de configuration (ID)" -#: netbox/dcim/filtersets.py:985 +#: netbox/dcim/filtersets.py:986 msgid "Device type (slug)" msgstr "Type d'appareil (slug)" -#: netbox/dcim/filtersets.py:1005 +#: netbox/dcim/filtersets.py:1006 msgid "Parent Device (ID)" msgstr "Appareil parent (ID)" -#: netbox/dcim/filtersets.py:1009 netbox/virtualization/filtersets.py:220 +#: netbox/dcim/filtersets.py:1010 netbox/virtualization/filtersets.py:186 msgid "Platform (ID)" msgstr "Plateforme (ID)" -#: netbox/dcim/filtersets.py:1015 netbox/extras/filtersets.py:569 -#: netbox/virtualization/filtersets.py:226 +#: netbox/dcim/filtersets.py:1016 netbox/extras/filtersets.py:569 +#: netbox/virtualization/filtersets.py:192 msgid "Platform (slug)" msgstr "Plateforme (slug)" -#: netbox/dcim/filtersets.py:1051 netbox/dcim/filtersets.py:1399 -#: netbox/dcim/filtersets.py:1934 netbox/dcim/filtersets.py:2176 -#: netbox/dcim/filtersets.py:2235 +#: netbox/dcim/filtersets.py:1052 netbox/dcim/filtersets.py:1401 +#: netbox/dcim/filtersets.py:2058 netbox/dcim/filtersets.py:2300 +#: netbox/dcim/filtersets.py:2359 msgid "Site name (slug)" msgstr "Nom du site (slug)" -#: netbox/dcim/filtersets.py:1067 +#: netbox/dcim/filtersets.py:1068 msgid "Parent bay (ID)" msgstr "Enfant parent (ID)" -#: netbox/dcim/filtersets.py:1071 +#: netbox/dcim/filtersets.py:1072 msgid "VM cluster (ID)" msgstr "Cluster de machines virtuelles (ID)" -#: netbox/dcim/filtersets.py:1077 netbox/extras/filtersets.py:591 -#: netbox/virtualization/filtersets.py:136 +#: netbox/dcim/filtersets.py:1078 netbox/extras/filtersets.py:591 +#: netbox/virtualization/filtersets.py:102 msgid "Cluster group (slug)" msgstr "Groupe de clusters (slug)" -#: netbox/dcim/filtersets.py:1082 netbox/virtualization/filtersets.py:130 +#: netbox/dcim/filtersets.py:1083 netbox/virtualization/filtersets.py:96 msgid "Cluster group (ID)" msgstr "Groupe de clusters (ID)" -#: netbox/dcim/filtersets.py:1088 +#: netbox/dcim/filtersets.py:1089 msgid "Device model (slug)" msgstr "Modèle d'appareil (slug)" -#: netbox/dcim/filtersets.py:1099 netbox/dcim/forms/bulk_edit.py:522 +#: netbox/dcim/filtersets.py:1100 netbox/dcim/forms/bulk_edit.py:525 msgid "Is full depth" msgstr "Est en pleine profondeur" -#: netbox/dcim/filtersets.py:1103 netbox/dcim/forms/common.py:18 -#: netbox/dcim/forms/filtersets.py:818 netbox/dcim/forms/filtersets.py:1385 -#: netbox/dcim/models/device_components.py:518 -#: netbox/virtualization/filtersets.py:230 -#: netbox/virtualization/filtersets.py:301 -#: netbox/virtualization/forms/filtersets.py:172 -#: netbox/virtualization/forms/filtersets.py:223 +#: netbox/dcim/filtersets.py:1104 netbox/dcim/forms/filtersets.py:819 +#: netbox/dcim/forms/filtersets.py:1390 netbox/dcim/forms/filtersets.py:1586 +#: netbox/dcim/forms/filtersets.py:1591 netbox/dcim/forms/model_forms.py:1762 +#: netbox/dcim/models/devices.py:1505 netbox/dcim/models/devices.py:1526 +#: netbox/virtualization/filtersets.py:196 +#: netbox/virtualization/filtersets.py:268 +#: netbox/virtualization/forms/filtersets.py:177 +#: netbox/virtualization/forms/filtersets.py:228 msgid "MAC address" msgstr "Adresse MAC" -#: netbox/dcim/filtersets.py:1110 netbox/dcim/filtersets.py:1274 -#: netbox/dcim/forms/filtersets.py:827 netbox/dcim/forms/filtersets.py:930 -#: netbox/virtualization/filtersets.py:234 -#: netbox/virtualization/forms/filtersets.py:176 +#: netbox/dcim/filtersets.py:1111 netbox/dcim/filtersets.py:1276 +#: netbox/dcim/forms/filtersets.py:828 netbox/dcim/forms/filtersets.py:931 +#: netbox/virtualization/filtersets.py:200 +#: netbox/virtualization/forms/filtersets.py:181 msgid "Has a primary IP" msgstr "Possède une adresse IP principale" -#: netbox/dcim/filtersets.py:1114 +#: netbox/dcim/filtersets.py:1115 msgid "Has an out-of-band IP" msgstr "Possède une adresse IP hors bande" -#: netbox/dcim/filtersets.py:1119 +#: netbox/dcim/filtersets.py:1120 msgid "Virtual chassis (ID)" msgstr "Châssis virtuel (ID)" -#: netbox/dcim/filtersets.py:1123 +#: netbox/dcim/filtersets.py:1124 msgid "Is a virtual chassis member" msgstr "Est un membre virtuel du châssis" -#: netbox/dcim/filtersets.py:1164 +#: netbox/dcim/filtersets.py:1165 msgid "OOB IP (ID)" msgstr "GESTION HORS BANDE (ID)" -#: netbox/dcim/filtersets.py:1168 +#: netbox/dcim/filtersets.py:1169 msgid "Has virtual device context" msgstr "Possède un contexte de périphérique virtuel" -#: netbox/dcim/filtersets.py:1257 +#: netbox/dcim/filtersets.py:1259 msgid "VDC (ID)" msgstr "VDC (IDENTIFIANT)" -#: netbox/dcim/filtersets.py:1262 +#: netbox/dcim/filtersets.py:1264 msgid "Device model" msgstr "Modèle d'appareil" -#: netbox/dcim/filtersets.py:1267 netbox/ipam/filtersets.py:634 -#: netbox/vpn/filtersets.py:102 netbox/vpn/filtersets.py:401 -msgid "Interface (ID)" -msgstr "Interface (ID)" - -#: netbox/dcim/filtersets.py:1323 +#: netbox/dcim/filtersets.py:1325 msgid "Module type (model)" msgstr "Type de module (modèle)" -#: netbox/dcim/filtersets.py:1329 +#: netbox/dcim/filtersets.py:1331 msgid "Module bay (ID)" msgstr "Baie modulaire (ID)" -#: netbox/dcim/filtersets.py:1333 netbox/dcim/filtersets.py:1425 -#: netbox/ipam/filtersets.py:613 netbox/ipam/filtersets.py:853 -#: netbox/ipam/filtersets.py:1117 netbox/virtualization/filtersets.py:161 -#: netbox/vpn/filtersets.py:379 +#: netbox/dcim/filtersets.py:1335 netbox/dcim/filtersets.py:1427 +#: netbox/dcim/filtersets.py:1613 netbox/ipam/filtersets.py:580 +#: netbox/ipam/filtersets.py:820 netbox/ipam/filtersets.py:1142 +#: netbox/virtualization/filtersets.py:127 netbox/vpn/filtersets.py:379 msgid "Device (ID)" msgstr "Appareil (ID)" -#: netbox/dcim/filtersets.py:1421 +#: netbox/dcim/filtersets.py:1423 msgid "Rack (name)" msgstr "Baie (nom)" -#: netbox/dcim/filtersets.py:1431 netbox/ipam/filtersets.py:608 -#: netbox/ipam/filtersets.py:848 netbox/ipam/filtersets.py:1123 -#: netbox/vpn/filtersets.py:374 +#: netbox/dcim/filtersets.py:1433 netbox/dcim/filtersets.py:1608 +#: netbox/ipam/filtersets.py:575 netbox/ipam/filtersets.py:815 +#: netbox/ipam/filtersets.py:1148 netbox/vpn/filtersets.py:374 msgid "Device (name)" msgstr "Appareil (nom)" -#: netbox/dcim/filtersets.py:1442 +#: netbox/dcim/filtersets.py:1444 msgid "Device type (model)" msgstr "Type d'appareil (modèle)" -#: netbox/dcim/filtersets.py:1447 +#: netbox/dcim/filtersets.py:1449 msgid "Device role (ID)" msgstr "Rôle de l'appareil (ID)" -#: netbox/dcim/filtersets.py:1453 +#: netbox/dcim/filtersets.py:1455 msgid "Device role (slug)" msgstr "Rôle de l'appareil (slug)" -#: netbox/dcim/filtersets.py:1458 +#: netbox/dcim/filtersets.py:1460 msgid "Virtual Chassis (ID)" msgstr "Châssis virtuel (ID)" -#: netbox/dcim/filtersets.py:1464 netbox/dcim/forms/filtersets.py:109 -#: netbox/dcim/tables/devices.py:206 netbox/netbox/navigation/menu.py:79 +#: netbox/dcim/filtersets.py:1466 netbox/dcim/forms/filtersets.py:110 +#: netbox/dcim/tables/devices.py:217 netbox/netbox/navigation/menu.py:79 #: netbox/templates/dcim/device.html:120 #: netbox/templates/dcim/device_edit.html:93 #: netbox/templates/dcim/virtualchassis.html:20 @@ -3273,168 +3713,231 @@ msgstr "Châssis virtuel (ID)" msgid "Virtual Chassis" msgstr "Châssis virtuel" -#: netbox/dcim/filtersets.py:1488 +#: netbox/dcim/filtersets.py:1490 msgid "Module (ID)" msgstr "Module (ID)" -#: netbox/dcim/filtersets.py:1495 +#: netbox/dcim/filtersets.py:1497 msgid "Cable (ID)" msgstr "Câble (ID)" -#: netbox/dcim/filtersets.py:1604 netbox/ipam/forms/bulk_import.py:189 +#: netbox/dcim/filtersets.py:1618 netbox/ipam/filtersets.py:585 +#: netbox/ipam/filtersets.py:825 netbox/ipam/filtersets.py:1158 +#: netbox/vpn/filtersets.py:385 +msgid "Virtual machine (name)" +msgstr "Machine virtuelle (nom)" + +#: netbox/dcim/filtersets.py:1623 netbox/ipam/filtersets.py:590 +#: netbox/ipam/filtersets.py:830 netbox/ipam/filtersets.py:1152 +#: netbox/virtualization/filtersets.py:248 +#: netbox/virtualization/filtersets.py:299 netbox/vpn/filtersets.py:390 +msgid "Virtual machine (ID)" +msgstr "Machine virtuelle (ID)" + +#: netbox/dcim/filtersets.py:1629 netbox/ipam/filtersets.py:596 +#: netbox/vpn/filtersets.py:97 netbox/vpn/filtersets.py:396 +msgid "Interface (name)" +msgstr "Interface (nom)" + +#: netbox/dcim/filtersets.py:1640 netbox/ipam/filtersets.py:607 +#: netbox/vpn/filtersets.py:108 netbox/vpn/filtersets.py:407 +msgid "VM interface (name)" +msgstr "Interface de machine virtuelle (nom)" + +#: netbox/dcim/filtersets.py:1645 netbox/ipam/filtersets.py:612 +#: netbox/vpn/filtersets.py:113 +msgid "VM interface (ID)" +msgstr "Interface de machine virtuelle (ID)" + +#: netbox/dcim/filtersets.py:1687 netbox/ipam/forms/bulk_import.py:185 #: netbox/vpn/forms/bulk_import.py:308 msgid "Assigned VLAN" msgstr "VLAN attribué" -#: netbox/dcim/filtersets.py:1608 +#: netbox/dcim/filtersets.py:1691 msgid "Assigned VID" msgstr "VID attribué" -#: netbox/dcim/filtersets.py:1613 netbox/dcim/forms/bulk_edit.py:1531 -#: netbox/dcim/forms/bulk_import.py:913 netbox/dcim/forms/filtersets.py:1428 -#: netbox/dcim/forms/model_forms.py:1385 -#: netbox/dcim/models/device_components.py:711 -#: netbox/dcim/tables/devices.py:626 netbox/ipam/filtersets.py:318 -#: netbox/ipam/filtersets.py:329 netbox/ipam/filtersets.py:485 -#: netbox/ipam/filtersets.py:586 netbox/ipam/filtersets.py:597 -#: netbox/ipam/forms/bulk_edit.py:242 netbox/ipam/forms/bulk_edit.py:298 -#: netbox/ipam/forms/bulk_edit.py:340 netbox/ipam/forms/bulk_import.py:157 -#: netbox/ipam/forms/bulk_import.py:243 netbox/ipam/forms/bulk_import.py:279 -#: netbox/ipam/forms/filtersets.py:67 netbox/ipam/forms/filtersets.py:172 -#: netbox/ipam/forms/filtersets.py:309 netbox/ipam/forms/model_forms.py:62 -#: netbox/ipam/forms/model_forms.py:202 netbox/ipam/forms/model_forms.py:247 -#: netbox/ipam/forms/model_forms.py:300 netbox/ipam/forms/model_forms.py:464 -#: netbox/ipam/forms/model_forms.py:478 netbox/ipam/forms/model_forms.py:492 -#: netbox/ipam/models/ip.py:233 netbox/ipam/models/ip.py:512 -#: netbox/ipam/models/ip.py:720 netbox/ipam/models/vrfs.py:62 -#: netbox/ipam/tables/ip.py:242 netbox/ipam/tables/ip.py:309 -#: netbox/ipam/tables/ip.py:360 netbox/ipam/tables/ip.py:450 -#: netbox/templates/dcim/interface.html:133 +#: netbox/dcim/filtersets.py:1696 netbox/dcim/forms/bulk_edit.py:1544 +#: netbox/dcim/forms/bulk_import.py:921 netbox/dcim/forms/filtersets.py:1433 +#: netbox/dcim/forms/model_forms.py:1411 +#: netbox/dcim/models/device_components.py:749 +#: netbox/dcim/tables/devices.py:648 netbox/ipam/filtersets.py:321 +#: netbox/ipam/filtersets.py:332 netbox/ipam/filtersets.py:452 +#: netbox/ipam/filtersets.py:553 netbox/ipam/filtersets.py:564 +#: netbox/ipam/forms/bulk_edit.py:226 netbox/ipam/forms/bulk_edit.py:282 +#: netbox/ipam/forms/bulk_edit.py:324 netbox/ipam/forms/bulk_import.py:160 +#: netbox/ipam/forms/bulk_import.py:242 netbox/ipam/forms/bulk_import.py:278 +#: netbox/ipam/forms/filtersets.py:69 netbox/ipam/forms/filtersets.py:174 +#: netbox/ipam/forms/filtersets.py:312 netbox/ipam/forms/model_forms.py:65 +#: netbox/ipam/forms/model_forms.py:208 netbox/ipam/forms/model_forms.py:256 +#: netbox/ipam/forms/model_forms.py:310 netbox/ipam/forms/model_forms.py:474 +#: netbox/ipam/forms/model_forms.py:488 netbox/ipam/forms/model_forms.py:502 +#: netbox/ipam/models/ip.py:217 netbox/ipam/models/ip.py:498 +#: netbox/ipam/models/ip.py:719 netbox/ipam/models/vrfs.py:61 +#: netbox/ipam/tables/ip.py:188 netbox/ipam/tables/ip.py:261 +#: netbox/ipam/tables/ip.py:312 netbox/ipam/tables/ip.py:402 +#: netbox/templates/dcim/interface.html:152 #: netbox/templates/ipam/ipaddress.html:18 #: netbox/templates/ipam/iprange.html:40 netbox/templates/ipam/prefix.html:19 #: netbox/templates/ipam/vrf.html:7 netbox/templates/ipam/vrf.html:13 -#: netbox/templates/virtualization/vminterface.html:47 -#: netbox/virtualization/forms/bulk_edit.py:261 -#: netbox/virtualization/forms/bulk_import.py:171 -#: netbox/virtualization/forms/filtersets.py:228 -#: netbox/virtualization/forms/model_forms.py:344 -#: netbox/virtualization/models/virtualmachines.py:355 -#: netbox/virtualization/tables/virtualmachines.py:143 +#: netbox/templates/virtualization/vminterface.html:84 +#: netbox/virtualization/forms/bulk_edit.py:243 +#: netbox/virtualization/forms/bulk_import.py:177 +#: netbox/virtualization/forms/filtersets.py:233 +#: netbox/virtualization/forms/model_forms.py:368 +#: netbox/virtualization/models/virtualmachines.py:331 +#: netbox/virtualization/tables/virtualmachines.py:113 msgid "VRF" msgstr "VRF" -#: netbox/dcim/filtersets.py:1619 netbox/ipam/filtersets.py:324 -#: netbox/ipam/filtersets.py:335 netbox/ipam/filtersets.py:491 -#: netbox/ipam/filtersets.py:592 netbox/ipam/filtersets.py:603 +#: netbox/dcim/filtersets.py:1702 netbox/ipam/filtersets.py:327 +#: netbox/ipam/filtersets.py:338 netbox/ipam/filtersets.py:458 +#: netbox/ipam/filtersets.py:559 netbox/ipam/filtersets.py:570 msgid "VRF (RD)" msgstr "VRF (RD)" -#: netbox/dcim/filtersets.py:1624 netbox/ipam/filtersets.py:1032 +#: netbox/dcim/filtersets.py:1707 netbox/ipam/filtersets.py:1010 #: netbox/vpn/filtersets.py:342 msgid "L2VPN (ID)" msgstr "L2VPN (ID)" -#: netbox/dcim/filtersets.py:1630 netbox/dcim/forms/filtersets.py:1433 -#: netbox/dcim/tables/devices.py:570 netbox/ipam/filtersets.py:1038 -#: netbox/ipam/forms/filtersets.py:518 netbox/ipam/tables/vlans.py:137 -#: netbox/templates/dcim/interface.html:93 netbox/templates/ipam/vlan.html:66 +#: netbox/dcim/filtersets.py:1713 netbox/dcim/forms/filtersets.py:1438 +#: netbox/dcim/tables/devices.py:584 netbox/ipam/filtersets.py:1016 +#: netbox/ipam/forms/filtersets.py:570 netbox/ipam/tables/vlans.py:113 +#: netbox/templates/dcim/interface.html:99 netbox/templates/ipam/vlan.html:82 #: netbox/templates/vpn/l2vpntermination.html:12 -#: netbox/virtualization/forms/filtersets.py:233 +#: netbox/virtualization/forms/filtersets.py:238 #: netbox/vpn/forms/bulk_import.py:280 netbox/vpn/forms/filtersets.py:246 -#: netbox/vpn/forms/model_forms.py:409 netbox/vpn/forms/model_forms.py:427 +#: netbox/vpn/forms/model_forms.py:412 netbox/vpn/forms/model_forms.py:430 #: netbox/vpn/models/l2vpn.py:63 netbox/vpn/tables/l2vpn.py:55 msgid "L2VPN" msgstr "L2VPN" -#: netbox/dcim/filtersets.py:1662 +#: netbox/dcim/filtersets.py:1718 netbox/ipam/filtersets.py:1091 +msgid "VLAN Translation Policy (ID)" +msgstr "Politique de traduction VLAN (ID)" + +#: netbox/dcim/filtersets.py:1724 netbox/dcim/forms/model_forms.py:1428 +#: netbox/dcim/models/device_components.py:568 +#: netbox/ipam/forms/filtersets.py:489 netbox/ipam/forms/model_forms.py:712 +#: netbox/templates/ipam/vlantranslationpolicy.html:11 +#: netbox/virtualization/forms/bulk_edit.py:248 +#: netbox/virtualization/forms/model_forms.py:373 +msgid "VLAN Translation Policy" +msgstr "Politique de traduction VLAN" + +#: netbox/dcim/filtersets.py:1758 msgid "Virtual Chassis Interfaces for Device" msgstr "Interfaces de châssis virtuelles pour appareils" -#: netbox/dcim/filtersets.py:1667 +#: netbox/dcim/filtersets.py:1763 msgid "Virtual Chassis Interfaces for Device (ID)" msgstr "Interfaces de châssis virtuel pour le périphérique (ID)" -#: netbox/dcim/filtersets.py:1671 +#: netbox/dcim/filtersets.py:1767 msgid "Kind of interface" msgstr "Type d'interface" -#: netbox/dcim/filtersets.py:1676 netbox/virtualization/filtersets.py:293 +#: netbox/dcim/filtersets.py:1772 netbox/virtualization/filtersets.py:259 msgid "Parent interface (ID)" msgstr "Interface parent (ID)" -#: netbox/dcim/filtersets.py:1681 netbox/virtualization/filtersets.py:298 +#: netbox/dcim/filtersets.py:1777 netbox/virtualization/filtersets.py:264 msgid "Bridged interface (ID)" msgstr "Interface pontée (ID)" -#: netbox/dcim/filtersets.py:1686 +#: netbox/dcim/filtersets.py:1782 msgid "LAG interface (ID)" msgstr "Interface LAG (ID)" -#: netbox/dcim/filtersets.py:1713 netbox/dcim/filtersets.py:1725 -#: netbox/dcim/forms/filtersets.py:1345 netbox/dcim/forms/model_forms.py:1697 +#: netbox/dcim/filtersets.py:1790 netbox/dcim/tables/devices.py:606 +#: netbox/dcim/tables/devices.py:1136 netbox/templates/dcim/interface.html:131 +#: netbox/templates/dcim/macaddress.html:11 +#: netbox/templates/dcim/macaddress.html:14 +#: netbox/templates/virtualization/vminterface.html:73 +msgid "MAC Address" +msgstr "Adresse MAC" + +#: netbox/dcim/filtersets.py:1795 netbox/virtualization/filtersets.py:273 +msgid "Primary MAC address (ID)" +msgstr "Adresse MAC principale (ID)" + +#: netbox/dcim/filtersets.py:1801 netbox/dcim/forms/model_forms.py:1415 +#: netbox/virtualization/filtersets.py:279 +#: netbox/virtualization/forms/model_forms.py:311 +msgid "Primary MAC address" +msgstr "Adresse MAC principale" + +#: netbox/dcim/filtersets.py:1823 netbox/dcim/filtersets.py:1835 +#: netbox/dcim/forms/filtersets.py:1350 netbox/dcim/forms/model_forms.py:1742 #: netbox/templates/dcim/virtualdevicecontext.html:15 msgid "Virtual Device Context" msgstr "Contexte du périphérique virtuel" -#: netbox/dcim/filtersets.py:1719 +#: netbox/dcim/filtersets.py:1829 msgid "Virtual Device Context (Identifier)" msgstr "Contexte du périphérique virtuel (Identifiant)" -#: netbox/dcim/filtersets.py:1730 +#: netbox/dcim/filtersets.py:1840 #: netbox/templates/wireless/wirelesslan.html:11 -#: netbox/wireless/forms/model_forms.py:53 +#: netbox/wireless/forms/model_forms.py:55 msgid "Wireless LAN" msgstr "LAN sans fil" -#: netbox/dcim/filtersets.py:1734 netbox/dcim/tables/devices.py:613 +#: netbox/dcim/filtersets.py:1844 netbox/dcim/tables/devices.py:635 msgid "Wireless link" msgstr "Liaison sans fil" -#: netbox/dcim/filtersets.py:1803 +#: netbox/dcim/filtersets.py:1854 +msgid "Virtual circuit termination (ID)" +msgstr "Terminaison du circuit virtuel (ID)" + +#: netbox/dcim/filtersets.py:1923 msgid "Parent module bay (ID)" msgstr "Baie du module parent (ID)" -#: netbox/dcim/filtersets.py:1808 +#: netbox/dcim/filtersets.py:1928 msgid "Installed module (ID)" msgstr "Module installé (ID)" -#: netbox/dcim/filtersets.py:1819 +#: netbox/dcim/filtersets.py:1939 msgid "Installed device (ID)" msgstr "Appareil installé (ID)" -#: netbox/dcim/filtersets.py:1825 +#: netbox/dcim/filtersets.py:1945 msgid "Installed device (name)" msgstr "Appareil installé (nom)" -#: netbox/dcim/filtersets.py:1891 +#: netbox/dcim/filtersets.py:2015 msgid "Master (ID)" msgstr "Maître (ID)" -#: netbox/dcim/filtersets.py:1897 +#: netbox/dcim/filtersets.py:2021 msgid "Master (name)" msgstr "Master (nom)" -#: netbox/dcim/filtersets.py:1939 netbox/tenancy/filtersets.py:245 +#: netbox/dcim/filtersets.py:2063 netbox/tenancy/filtersets.py:245 msgid "Tenant (ID)" msgstr "Entité (ID)" -#: netbox/dcim/filtersets.py:1945 netbox/extras/filtersets.py:618 +#: netbox/dcim/filtersets.py:2069 netbox/extras/filtersets.py:618 #: netbox/tenancy/filtersets.py:251 msgid "Tenant (slug)" msgstr "Entité (slug)" -#: netbox/dcim/filtersets.py:1981 netbox/dcim/forms/filtersets.py:1077 +#: netbox/dcim/filtersets.py:2105 netbox/dcim/forms/filtersets.py:1078 msgid "Unterminated" msgstr "Non terminé" -#: netbox/dcim/filtersets.py:2239 +#: netbox/dcim/filtersets.py:2363 msgid "Power panel (ID)" msgstr "Panneau d'alimentation (ID)" -#: netbox/dcim/forms/bulk_create.py:40 netbox/extras/forms/filtersets.py:401 -#: netbox/extras/forms/model_forms.py:567 -#: netbox/extras/forms/model_forms.py:619 netbox/netbox/forms/base.py:86 -#: netbox/netbox/forms/mixins.py:81 netbox/netbox/tables/columns.py:478 +#: netbox/dcim/forms/bulk_create.py:40 netbox/extras/forms/filtersets.py:408 +#: netbox/extras/forms/model_forms.py:581 +#: netbox/extras/forms/model_forms.py:633 netbox/netbox/forms/base.py:86 +#: netbox/netbox/forms/mixins.py:91 netbox/netbox/tables/columns.py:481 #: netbox/templates/circuits/inc/circuit_termination.html:32 #: netbox/templates/generic/bulk_edit.html:65 #: netbox/templates/inc/panels/tags.html:5 @@ -3442,11 +3945,11 @@ msgstr "Panneau d'alimentation (ID)" msgid "Tags" msgstr "Étiquettes" -#: netbox/dcim/forms/bulk_create.py:112 netbox/dcim/forms/filtersets.py:1498 -#: netbox/dcim/forms/model_forms.py:488 netbox/dcim/forms/model_forms.py:546 +#: netbox/dcim/forms/bulk_create.py:112 netbox/dcim/forms/filtersets.py:1503 +#: netbox/dcim/forms/model_forms.py:498 netbox/dcim/forms/model_forms.py:557 #: netbox/dcim/forms/object_create.py:197 -#: netbox/dcim/forms/object_create.py:345 netbox/dcim/tables/devices.py:165 -#: netbox/dcim/tables/devices.py:707 netbox/dcim/tables/devicetypes.py:246 +#: netbox/dcim/forms/object_create.py:345 netbox/dcim/tables/devices.py:176 +#: netbox/dcim/tables/devices.py:741 netbox/dcim/tables/devicetypes.py:253 #: netbox/templates/dcim/device.html:43 netbox/templates/dcim/device.html:131 #: netbox/templates/dcim/modulebay.html:38 #: netbox/templates/dcim/virtualchassis.html:66 @@ -3462,114 +3965,114 @@ msgstr "" "Les plages alphanumériques sont prises en charge. (Doit correspondre au " "nombre de noms en cours de création.)" -#: netbox/dcim/forms/bulk_edit.py:133 +#: netbox/dcim/forms/bulk_edit.py:136 msgid "Contact name" msgstr "Nom du contact" -#: netbox/dcim/forms/bulk_edit.py:138 +#: netbox/dcim/forms/bulk_edit.py:141 msgid "Contact phone" msgstr "Téléphone de contact" -#: netbox/dcim/forms/bulk_edit.py:144 +#: netbox/dcim/forms/bulk_edit.py:147 msgid "Contact E-mail" msgstr "Adresse mail de contact" -#: netbox/dcim/forms/bulk_edit.py:147 netbox/dcim/forms/bulk_import.py:123 -#: netbox/dcim/forms/model_forms.py:128 +#: netbox/dcim/forms/bulk_edit.py:150 netbox/dcim/forms/bulk_import.py:125 +#: netbox/dcim/forms/model_forms.py:132 msgid "Time zone" msgstr "Fuseau horaire" -#: netbox/dcim/forms/bulk_edit.py:225 netbox/dcim/forms/bulk_edit.py:501 -#: netbox/dcim/forms/bulk_edit.py:565 netbox/dcim/forms/bulk_edit.py:638 -#: netbox/dcim/forms/bulk_edit.py:662 netbox/dcim/forms/bulk_edit.py:755 -#: netbox/dcim/forms/bulk_edit.py:1282 netbox/dcim/forms/bulk_edit.py:1703 -#: netbox/dcim/forms/bulk_import.py:182 netbox/dcim/forms/bulk_import.py:393 -#: netbox/dcim/forms/bulk_import.py:427 netbox/dcim/forms/bulk_import.py:472 -#: netbox/dcim/forms/bulk_import.py:508 netbox/dcim/forms/bulk_import.py:1104 -#: netbox/dcim/forms/filtersets.py:313 netbox/dcim/forms/filtersets.py:372 -#: netbox/dcim/forms/filtersets.py:494 netbox/dcim/forms/filtersets.py:619 -#: netbox/dcim/forms/filtersets.py:700 netbox/dcim/forms/filtersets.py:782 -#: netbox/dcim/forms/filtersets.py:947 netbox/dcim/forms/filtersets.py:1539 -#: netbox/dcim/forms/model_forms.py:207 netbox/dcim/forms/model_forms.py:337 -#: netbox/dcim/forms/model_forms.py:349 netbox/dcim/forms/model_forms.py:395 -#: netbox/dcim/forms/model_forms.py:436 netbox/dcim/forms/model_forms.py:1082 -#: netbox/dcim/forms/model_forms.py:1522 -#: netbox/dcim/forms/object_import.py:187 netbox/dcim/tables/devices.py:96 -#: netbox/dcim/tables/devices.py:172 netbox/dcim/tables/devices.py:940 -#: netbox/dcim/tables/devicetypes.py:80 netbox/dcim/tables/devicetypes.py:308 +#: netbox/dcim/forms/bulk_edit.py:228 netbox/dcim/forms/bulk_edit.py:504 +#: netbox/dcim/forms/bulk_edit.py:568 netbox/dcim/forms/bulk_edit.py:641 +#: netbox/dcim/forms/bulk_edit.py:665 netbox/dcim/forms/bulk_edit.py:758 +#: netbox/dcim/forms/bulk_edit.py:1285 netbox/dcim/forms/bulk_edit.py:1718 +#: netbox/dcim/forms/bulk_import.py:184 netbox/dcim/forms/bulk_import.py:395 +#: netbox/dcim/forms/bulk_import.py:429 netbox/dcim/forms/bulk_import.py:477 +#: netbox/dcim/forms/bulk_import.py:513 netbox/dcim/forms/bulk_import.py:1112 +#: netbox/dcim/forms/filtersets.py:314 netbox/dcim/forms/filtersets.py:373 +#: netbox/dcim/forms/filtersets.py:495 netbox/dcim/forms/filtersets.py:620 +#: netbox/dcim/forms/filtersets.py:701 netbox/dcim/forms/filtersets.py:783 +#: netbox/dcim/forms/filtersets.py:948 netbox/dcim/forms/filtersets.py:1544 +#: netbox/dcim/forms/model_forms.py:211 netbox/dcim/forms/model_forms.py:345 +#: netbox/dcim/forms/model_forms.py:357 netbox/dcim/forms/model_forms.py:404 +#: netbox/dcim/forms/model_forms.py:445 netbox/dcim/forms/model_forms.py:1095 +#: netbox/dcim/forms/model_forms.py:1564 +#: netbox/dcim/forms/object_import.py:188 netbox/dcim/tables/devices.py:107 +#: netbox/dcim/tables/devices.py:183 netbox/dcim/tables/devices.py:970 +#: netbox/dcim/tables/devicetypes.py:85 netbox/dcim/tables/devicetypes.py:315 #: netbox/dcim/tables/modules.py:20 netbox/dcim/tables/modules.py:61 -#: netbox/dcim/tables/racks.py:58 netbox/dcim/tables/racks.py:132 +#: netbox/dcim/tables/racks.py:58 netbox/dcim/tables/racks.py:131 #: netbox/templates/dcim/devicetype.html:14 -#: netbox/templates/dcim/inventoryitem.html:44 +#: netbox/templates/dcim/inventoryitem.html:48 #: netbox/templates/dcim/manufacturer.html:33 #: netbox/templates/dcim/modulebay.html:62 -#: netbox/templates/dcim/moduletype.html:25 +#: netbox/templates/dcim/moduletype.html:27 #: netbox/templates/dcim/platform.html:37 #: netbox/templates/dcim/racktype.html:16 msgid "Manufacturer" msgstr "Fabricant" -#: netbox/dcim/forms/bulk_edit.py:230 netbox/dcim/forms/bulk_edit.py:378 -#: netbox/dcim/forms/bulk_import.py:191 netbox/dcim/forms/bulk_import.py:270 -#: netbox/dcim/forms/filtersets.py:255 +#: netbox/dcim/forms/bulk_edit.py:233 netbox/dcim/forms/bulk_edit.py:381 +#: netbox/dcim/forms/bulk_import.py:193 netbox/dcim/forms/bulk_import.py:272 +#: netbox/dcim/forms/filtersets.py:256 #: netbox/templates/dcim/inc/panels/racktype_dimensions.html:6 msgid "Form factor" msgstr "Facteur de forme" -#: netbox/dcim/forms/bulk_edit.py:235 netbox/dcim/forms/bulk_edit.py:383 -#: netbox/dcim/forms/bulk_import.py:199 netbox/dcim/forms/bulk_import.py:273 -#: netbox/dcim/forms/filtersets.py:260 +#: netbox/dcim/forms/bulk_edit.py:238 netbox/dcim/forms/bulk_edit.py:386 +#: netbox/dcim/forms/bulk_import.py:201 netbox/dcim/forms/bulk_import.py:275 +#: netbox/dcim/forms/filtersets.py:261 #: netbox/templates/dcim/inc/panels/racktype_dimensions.html:10 msgid "Width" msgstr "Largeur" -#: netbox/dcim/forms/bulk_edit.py:241 netbox/dcim/forms/bulk_edit.py:389 -#: netbox/dcim/forms/bulk_import.py:280 +#: netbox/dcim/forms/bulk_edit.py:244 netbox/dcim/forms/bulk_edit.py:392 +#: netbox/dcim/forms/bulk_import.py:282 #: netbox/templates/dcim/devicetype.html:37 msgid "Height (U)" msgstr "Hauteur (U)" -#: netbox/dcim/forms/bulk_edit.py:250 netbox/dcim/forms/bulk_edit.py:394 -#: netbox/dcim/forms/filtersets.py:274 +#: netbox/dcim/forms/bulk_edit.py:253 netbox/dcim/forms/bulk_edit.py:397 +#: netbox/dcim/forms/filtersets.py:275 msgid "Descending units" msgstr "Unités décroissantes" -#: netbox/dcim/forms/bulk_edit.py:253 netbox/dcim/forms/bulk_edit.py:397 +#: netbox/dcim/forms/bulk_edit.py:256 netbox/dcim/forms/bulk_edit.py:400 msgid "Outer width" msgstr "Largeur extérieure" -#: netbox/dcim/forms/bulk_edit.py:258 netbox/dcim/forms/bulk_edit.py:402 +#: netbox/dcim/forms/bulk_edit.py:261 netbox/dcim/forms/bulk_edit.py:405 msgid "Outer depth" msgstr "Profondeur extérieure" -#: netbox/dcim/forms/bulk_edit.py:263 netbox/dcim/forms/bulk_edit.py:407 -#: netbox/dcim/forms/bulk_import.py:204 netbox/dcim/forms/bulk_import.py:283 +#: netbox/dcim/forms/bulk_edit.py:266 netbox/dcim/forms/bulk_edit.py:410 +#: netbox/dcim/forms/bulk_import.py:206 netbox/dcim/forms/bulk_import.py:285 msgid "Outer unit" msgstr "Unité extérieure" -#: netbox/dcim/forms/bulk_edit.py:268 netbox/dcim/forms/bulk_edit.py:412 +#: netbox/dcim/forms/bulk_edit.py:271 netbox/dcim/forms/bulk_edit.py:415 msgid "Mounting depth" msgstr "Profondeur de montage" -#: netbox/dcim/forms/bulk_edit.py:273 netbox/dcim/forms/bulk_edit.py:300 -#: netbox/dcim/forms/bulk_edit.py:422 netbox/dcim/forms/bulk_edit.py:452 -#: netbox/dcim/forms/bulk_edit.py:535 netbox/dcim/forms/bulk_edit.py:558 -#: netbox/dcim/forms/bulk_edit.py:579 netbox/dcim/forms/bulk_edit.py:601 -#: netbox/dcim/forms/bulk_import.py:406 netbox/dcim/forms/bulk_import.py:438 -#: netbox/dcim/forms/filtersets.py:285 netbox/dcim/forms/filtersets.py:307 -#: netbox/dcim/forms/filtersets.py:327 netbox/dcim/forms/filtersets.py:401 -#: netbox/dcim/forms/filtersets.py:488 netbox/dcim/forms/filtersets.py:594 -#: netbox/dcim/forms/filtersets.py:613 netbox/dcim/forms/filtersets.py:674 -#: netbox/dcim/forms/model_forms.py:221 netbox/dcim/forms/model_forms.py:298 -#: netbox/dcim/tables/devicetypes.py:106 netbox/dcim/tables/modules.py:35 -#: netbox/dcim/tables/racks.py:74 netbox/dcim/tables/racks.py:172 +#: netbox/dcim/forms/bulk_edit.py:276 netbox/dcim/forms/bulk_edit.py:303 +#: netbox/dcim/forms/bulk_edit.py:425 netbox/dcim/forms/bulk_edit.py:455 +#: netbox/dcim/forms/bulk_edit.py:538 netbox/dcim/forms/bulk_edit.py:561 +#: netbox/dcim/forms/bulk_edit.py:582 netbox/dcim/forms/bulk_edit.py:604 +#: netbox/dcim/forms/bulk_import.py:408 netbox/dcim/forms/bulk_import.py:440 +#: netbox/dcim/forms/filtersets.py:286 netbox/dcim/forms/filtersets.py:308 +#: netbox/dcim/forms/filtersets.py:328 netbox/dcim/forms/filtersets.py:402 +#: netbox/dcim/forms/filtersets.py:489 netbox/dcim/forms/filtersets.py:595 +#: netbox/dcim/forms/filtersets.py:614 netbox/dcim/forms/filtersets.py:675 +#: netbox/dcim/forms/model_forms.py:226 netbox/dcim/forms/model_forms.py:306 +#: netbox/dcim/tables/devicetypes.py:111 netbox/dcim/tables/modules.py:35 +#: netbox/dcim/tables/racks.py:74 netbox/dcim/tables/racks.py:171 #: netbox/extras/forms/bulk_edit.py:53 netbox/extras/forms/bulk_edit.py:133 #: netbox/extras/forms/bulk_edit.py:183 netbox/extras/forms/bulk_edit.py:288 -#: netbox/extras/forms/filtersets.py:64 netbox/extras/forms/filtersets.py:156 -#: netbox/extras/forms/filtersets.py:243 netbox/ipam/forms/bulk_edit.py:190 +#: netbox/extras/forms/filtersets.py:65 netbox/extras/forms/filtersets.py:159 +#: netbox/extras/forms/filtersets.py:249 netbox/ipam/forms/bulk_edit.py:193 #: netbox/templates/dcim/device.html:324 #: netbox/templates/dcim/devicetype.html:49 -#: netbox/templates/dcim/moduletype.html:45 netbox/templates/dcim/rack.html:81 +#: netbox/templates/dcim/moduletype.html:47 netbox/templates/dcim/rack.html:81 #: netbox/templates/dcim/racktype.html:41 #: netbox/templates/extras/configcontext.html:17 #: netbox/templates/extras/customlink.html:25 @@ -3578,131 +4081,86 @@ msgstr "Profondeur de montage" msgid "Weight" msgstr "Poids" -#: netbox/dcim/forms/bulk_edit.py:278 netbox/dcim/forms/bulk_edit.py:427 -#: netbox/dcim/forms/filtersets.py:290 +#: netbox/dcim/forms/bulk_edit.py:281 netbox/dcim/forms/bulk_edit.py:430 +#: netbox/dcim/forms/filtersets.py:291 msgid "Max weight" msgstr "Poids maximum" -#: netbox/dcim/forms/bulk_edit.py:283 netbox/dcim/forms/bulk_edit.py:432 -#: netbox/dcim/forms/bulk_edit.py:540 netbox/dcim/forms/bulk_edit.py:584 -#: netbox/dcim/forms/bulk_import.py:210 netbox/dcim/forms/bulk_import.py:295 -#: netbox/dcim/forms/bulk_import.py:411 netbox/dcim/forms/bulk_import.py:443 -#: netbox/dcim/forms/filtersets.py:295 netbox/dcim/forms/filtersets.py:598 -#: netbox/dcim/forms/filtersets.py:678 +#: netbox/dcim/forms/bulk_edit.py:286 netbox/dcim/forms/bulk_edit.py:435 +#: netbox/dcim/forms/bulk_edit.py:543 netbox/dcim/forms/bulk_edit.py:587 +#: netbox/dcim/forms/bulk_import.py:212 netbox/dcim/forms/bulk_import.py:297 +#: netbox/dcim/forms/bulk_import.py:413 netbox/dcim/forms/bulk_import.py:445 +#: netbox/dcim/forms/filtersets.py:296 netbox/dcim/forms/filtersets.py:599 +#: netbox/dcim/forms/filtersets.py:679 msgid "Weight unit" msgstr "Unité de poids" -#: netbox/dcim/forms/bulk_edit.py:297 netbox/dcim/forms/filtersets.py:305 -#: netbox/dcim/forms/model_forms.py:217 netbox/dcim/forms/model_forms.py:256 +#: netbox/dcim/forms/bulk_edit.py:300 netbox/dcim/forms/filtersets.py:306 +#: netbox/dcim/forms/model_forms.py:222 netbox/dcim/forms/model_forms.py:261 #: netbox/templates/dcim/rack.html:45 netbox/templates/dcim/racktype.html:13 msgid "Rack Type" msgstr "Type de baie" -#: netbox/dcim/forms/bulk_edit.py:299 netbox/dcim/forms/model_forms.py:220 -#: netbox/dcim/forms/model_forms.py:297 +#: netbox/dcim/forms/bulk_edit.py:302 netbox/dcim/forms/model_forms.py:225 +#: netbox/dcim/forms/model_forms.py:305 msgid "Outer Dimensions" msgstr "Dimensions extérieures" -#: netbox/dcim/forms/bulk_edit.py:302 netbox/dcim/forms/model_forms.py:222 -#: netbox/dcim/forms/model_forms.py:299 netbox/templates/dcim/device.html:315 +#: netbox/dcim/forms/bulk_edit.py:305 netbox/dcim/forms/model_forms.py:227 +#: netbox/dcim/forms/model_forms.py:307 netbox/templates/dcim/device.html:315 #: netbox/templates/dcim/inc/panels/racktype_dimensions.html:3 msgid "Dimensions" msgstr "Dimensions" -#: netbox/dcim/forms/bulk_edit.py:304 netbox/dcim/forms/filtersets.py:306 -#: netbox/dcim/forms/filtersets.py:326 netbox/dcim/forms/model_forms.py:224 +#: netbox/dcim/forms/bulk_edit.py:307 netbox/dcim/forms/filtersets.py:307 +#: netbox/dcim/forms/filtersets.py:327 netbox/dcim/forms/model_forms.py:229 #: netbox/templates/dcim/inc/panels/racktype_numbering.html:3 msgid "Numbering" msgstr "Numérotation" -#: netbox/dcim/forms/bulk_edit.py:358 netbox/dcim/forms/bulk_edit.py:1277 -#: netbox/dcim/forms/bulk_edit.py:1698 netbox/dcim/forms/bulk_import.py:253 -#: netbox/dcim/forms/bulk_import.py:1098 netbox/dcim/forms/filtersets.py:367 -#: netbox/dcim/forms/filtersets.py:777 netbox/dcim/forms/filtersets.py:1534 -#: netbox/dcim/forms/model_forms.py:251 netbox/dcim/forms/model_forms.py:1077 -#: netbox/dcim/forms/model_forms.py:1517 -#: netbox/dcim/forms/object_import.py:181 netbox/dcim/tables/devices.py:169 -#: netbox/dcim/tables/devices.py:809 netbox/dcim/tables/devices.py:937 -#: netbox/dcim/tables/devicetypes.py:304 netbox/dcim/tables/racks.py:129 -#: netbox/extras/filtersets.py:552 netbox/ipam/forms/bulk_edit.py:261 -#: netbox/ipam/forms/bulk_edit.py:311 netbox/ipam/forms/bulk_edit.py:359 -#: netbox/ipam/forms/bulk_edit.py:511 netbox/ipam/forms/bulk_import.py:197 -#: netbox/ipam/forms/bulk_import.py:262 netbox/ipam/forms/bulk_import.py:298 -#: netbox/ipam/forms/bulk_import.py:479 netbox/ipam/forms/filtersets.py:237 -#: netbox/ipam/forms/filtersets.py:289 netbox/ipam/forms/filtersets.py:360 -#: netbox/ipam/forms/filtersets.py:509 netbox/ipam/forms/model_forms.py:188 -#: netbox/ipam/forms/model_forms.py:221 netbox/ipam/forms/model_forms.py:250 -#: netbox/ipam/forms/model_forms.py:676 netbox/ipam/tables/ip.py:258 -#: netbox/ipam/tables/ip.py:316 netbox/ipam/tables/ip.py:367 -#: netbox/ipam/tables/vlans.py:130 netbox/ipam/tables/vlans.py:235 -#: netbox/templates/dcim/device.html:182 -#: netbox/templates/dcim/inc/panels/inventory_items.html:20 -#: netbox/templates/dcim/interface.html:223 -#: netbox/templates/dcim/inventoryitem.html:36 -#: netbox/templates/dcim/rack.html:49 netbox/templates/ipam/ipaddress.html:41 -#: netbox/templates/ipam/iprange.html:50 netbox/templates/ipam/prefix.html:77 -#: netbox/templates/ipam/role.html:19 netbox/templates/ipam/vlan.html:52 -#: netbox/templates/virtualization/virtualmachine.html:23 -#: netbox/templates/vpn/tunneltermination.html:17 -#: netbox/templates/wireless/inc/wirelesslink_interface.html:20 -#: netbox/tenancy/forms/bulk_edit.py:142 -#: netbox/tenancy/forms/filtersets.py:107 -#: netbox/tenancy/forms/model_forms.py:137 -#: netbox/tenancy/tables/contacts.py:102 -#: netbox/virtualization/forms/bulk_edit.py:145 -#: netbox/virtualization/forms/bulk_import.py:106 -#: netbox/virtualization/forms/filtersets.py:157 -#: netbox/virtualization/forms/model_forms.py:195 -#: netbox/virtualization/tables/virtualmachines.py:75 -#: netbox/vpn/forms/bulk_edit.py:87 netbox/vpn/forms/bulk_import.py:81 -#: netbox/vpn/forms/filtersets.py:85 netbox/vpn/forms/model_forms.py:78 -#: netbox/vpn/forms/model_forms.py:113 netbox/vpn/tables/tunnels.py:82 -msgid "Role" -msgstr "Rôle" - -#: netbox/dcim/forms/bulk_edit.py:363 netbox/dcim/forms/bulk_import.py:260 -#: netbox/dcim/forms/filtersets.py:380 +#: netbox/dcim/forms/bulk_edit.py:366 netbox/dcim/forms/bulk_import.py:262 +#: netbox/dcim/forms/filtersets.py:381 msgid "Rack type" msgstr "Type de baie" -#: netbox/dcim/forms/bulk_edit.py:370 netbox/dcim/forms/bulk_edit.py:718 -#: netbox/dcim/forms/bulk_edit.py:779 netbox/templates/dcim/device.html:104 +#: netbox/dcim/forms/bulk_edit.py:373 netbox/dcim/forms/bulk_edit.py:721 +#: netbox/dcim/forms/bulk_edit.py:782 netbox/templates/dcim/device.html:104 #: netbox/templates/dcim/module.html:77 #: netbox/templates/dcim/modulebay.html:70 netbox/templates/dcim/rack.html:57 #: netbox/templates/virtualization/virtualmachine.html:35 msgid "Serial Number" msgstr "Numéro de série" -#: netbox/dcim/forms/bulk_edit.py:373 netbox/dcim/forms/filtersets.py:387 -#: netbox/dcim/forms/filtersets.py:813 netbox/dcim/forms/filtersets.py:967 -#: netbox/dcim/forms/filtersets.py:1546 +#: netbox/dcim/forms/bulk_edit.py:376 netbox/dcim/forms/filtersets.py:388 +#: netbox/dcim/forms/filtersets.py:814 netbox/dcim/forms/filtersets.py:968 +#: netbox/dcim/forms/filtersets.py:1551 msgid "Asset tag" msgstr "Étiquette d'actif" -#: netbox/dcim/forms/bulk_edit.py:417 netbox/dcim/forms/bulk_edit.py:530 -#: netbox/dcim/forms/bulk_edit.py:574 netbox/dcim/forms/bulk_edit.py:711 -#: netbox/dcim/forms/bulk_import.py:289 netbox/dcim/forms/bulk_import.py:432 -#: netbox/dcim/forms/bulk_import.py:602 netbox/dcim/forms/filtersets.py:280 -#: netbox/dcim/forms/filtersets.py:511 netbox/dcim/forms/filtersets.py:669 -#: netbox/dcim/forms/filtersets.py:804 netbox/templates/dcim/device.html:98 +#: netbox/dcim/forms/bulk_edit.py:420 netbox/dcim/forms/bulk_edit.py:533 +#: netbox/dcim/forms/bulk_edit.py:577 netbox/dcim/forms/bulk_edit.py:714 +#: netbox/dcim/forms/bulk_import.py:291 netbox/dcim/forms/bulk_import.py:434 +#: netbox/dcim/forms/bulk_import.py:607 netbox/dcim/forms/filtersets.py:281 +#: netbox/dcim/forms/filtersets.py:512 netbox/dcim/forms/filtersets.py:670 +#: netbox/dcim/forms/filtersets.py:805 netbox/templates/dcim/device.html:98 #: netbox/templates/dcim/devicetype.html:65 -#: netbox/templates/dcim/moduletype.html:41 netbox/templates/dcim/rack.html:65 +#: netbox/templates/dcim/moduletype.html:43 netbox/templates/dcim/rack.html:65 #: netbox/templates/dcim/racktype.html:28 msgid "Airflow" msgstr "Flux d'air" -#: netbox/dcim/forms/bulk_edit.py:446 netbox/dcim/forms/bulk_edit.py:925 -#: netbox/dcim/forms/bulk_import.py:344 netbox/dcim/forms/bulk_import.py:347 -#: netbox/dcim/forms/bulk_import.py:575 netbox/dcim/forms/bulk_import.py:1380 -#: netbox/dcim/forms/bulk_import.py:1384 netbox/dcim/forms/filtersets.py:104 -#: netbox/dcim/forms/filtersets.py:324 netbox/dcim/forms/filtersets.py:405 -#: netbox/dcim/forms/filtersets.py:419 netbox/dcim/forms/filtersets.py:457 -#: netbox/dcim/forms/filtersets.py:772 netbox/dcim/forms/filtersets.py:1035 -#: netbox/dcim/forms/filtersets.py:1167 netbox/dcim/forms/model_forms.py:264 -#: netbox/dcim/forms/model_forms.py:306 netbox/dcim/forms/model_forms.py:479 -#: netbox/dcim/forms/model_forms.py:755 netbox/dcim/forms/object_create.py:392 -#: netbox/dcim/tables/devices.py:161 netbox/dcim/tables/power.py:70 -#: netbox/dcim/tables/racks.py:217 netbox/ipam/forms/filtersets.py:442 +#: netbox/dcim/forms/bulk_edit.py:449 netbox/dcim/forms/bulk_edit.py:928 +#: netbox/dcim/forms/bulk_import.py:346 netbox/dcim/forms/bulk_import.py:349 +#: netbox/dcim/forms/bulk_import.py:580 netbox/dcim/forms/bulk_import.py:1477 +#: netbox/dcim/forms/bulk_import.py:1481 netbox/dcim/forms/filtersets.py:105 +#: netbox/dcim/forms/filtersets.py:325 netbox/dcim/forms/filtersets.py:406 +#: netbox/dcim/forms/filtersets.py:420 netbox/dcim/forms/filtersets.py:458 +#: netbox/dcim/forms/filtersets.py:773 netbox/dcim/forms/filtersets.py:1036 +#: netbox/dcim/forms/filtersets.py:1168 netbox/dcim/forms/model_forms.py:271 +#: netbox/dcim/forms/model_forms.py:314 netbox/dcim/forms/model_forms.py:489 +#: netbox/dcim/forms/model_forms.py:767 netbox/dcim/forms/object_create.py:392 +#: netbox/dcim/tables/devices.py:172 netbox/dcim/tables/power.py:70 +#: netbox/dcim/tables/racks.py:216 netbox/ipam/forms/filtersets.py:445 #: netbox/templates/dcim/device.html:30 #: netbox/templates/dcim/inc/cable_termination.html:16 #: netbox/templates/dcim/powerfeed.html:28 netbox/templates/dcim/rack.html:13 @@ -3713,212 +4171,144 @@ msgstr "Flux d'air" msgid "Rack" msgstr "Baie" -#: netbox/dcim/forms/bulk_edit.py:450 netbox/dcim/forms/bulk_edit.py:744 -#: netbox/dcim/forms/filtersets.py:325 netbox/dcim/forms/filtersets.py:398 -#: netbox/dcim/forms/filtersets.py:481 netbox/dcim/forms/filtersets.py:608 -#: netbox/dcim/forms/filtersets.py:721 netbox/dcim/forms/filtersets.py:942 -#: netbox/dcim/forms/model_forms.py:670 netbox/dcim/forms/model_forms.py:1587 +#: netbox/dcim/forms/bulk_edit.py:453 netbox/dcim/forms/bulk_edit.py:747 +#: netbox/dcim/forms/filtersets.py:326 netbox/dcim/forms/filtersets.py:399 +#: netbox/dcim/forms/filtersets.py:482 netbox/dcim/forms/filtersets.py:609 +#: netbox/dcim/forms/filtersets.py:722 netbox/dcim/forms/filtersets.py:943 +#: netbox/dcim/forms/model_forms.py:681 netbox/dcim/forms/model_forms.py:1632 #: netbox/templates/dcim/device_edit.html:20 msgid "Hardware" msgstr "Matériel" -#: netbox/dcim/forms/bulk_edit.py:506 netbox/dcim/forms/bulk_import.py:399 -#: netbox/dcim/forms/filtersets.py:499 netbox/dcim/forms/model_forms.py:353 +#: netbox/dcim/forms/bulk_edit.py:509 netbox/dcim/forms/bulk_import.py:401 +#: netbox/dcim/forms/filtersets.py:500 netbox/dcim/forms/model_forms.py:362 msgid "Default platform" msgstr "Plateforme par défaut" -#: netbox/dcim/forms/bulk_edit.py:511 netbox/dcim/forms/bulk_edit.py:570 -#: netbox/dcim/forms/filtersets.py:502 netbox/dcim/forms/filtersets.py:622 +#: netbox/dcim/forms/bulk_edit.py:514 netbox/dcim/forms/bulk_edit.py:573 +#: netbox/dcim/forms/filtersets.py:503 netbox/dcim/forms/filtersets.py:623 msgid "Part number" msgstr "Référence de pièce" -#: netbox/dcim/forms/bulk_edit.py:515 +#: netbox/dcim/forms/bulk_edit.py:518 msgid "U height" msgstr "Hauteur en U" -#: netbox/dcim/forms/bulk_edit.py:527 netbox/dcim/tables/devicetypes.py:102 +#: netbox/dcim/forms/bulk_edit.py:530 netbox/dcim/tables/devicetypes.py:107 msgid "Exclude from utilization" msgstr "Exclure de l'utilisation" -#: netbox/dcim/forms/bulk_edit.py:556 netbox/dcim/forms/model_forms.py:368 -#: netbox/dcim/tables/devicetypes.py:77 netbox/templates/dcim/device.html:88 +#: netbox/dcim/forms/bulk_edit.py:559 netbox/dcim/forms/model_forms.py:377 +#: netbox/dcim/tables/devicetypes.py:82 netbox/templates/dcim/device.html:88 #: netbox/templates/dcim/devicebay.html:52 #: netbox/templates/dcim/module.html:61 msgid "Device Type" msgstr "Type d'appareil" -#: netbox/dcim/forms/bulk_edit.py:598 netbox/dcim/forms/model_forms.py:401 +#: netbox/dcim/forms/bulk_edit.py:601 netbox/dcim/forms/model_forms.py:410 #: netbox/dcim/tables/modules.py:17 netbox/dcim/tables/modules.py:66 #: netbox/templates/dcim/module.html:65 #: netbox/templates/dcim/modulebay.html:66 -#: netbox/templates/dcim/moduletype.html:22 +#: netbox/templates/dcim/moduletype.html:24 msgid "Module Type" msgstr "Type de module" -#: netbox/dcim/forms/bulk_edit.py:602 netbox/dcim/forms/model_forms.py:371 -#: netbox/dcim/forms/model_forms.py:402 +#: netbox/dcim/forms/bulk_edit.py:605 netbox/dcim/forms/model_forms.py:380 +#: netbox/dcim/forms/model_forms.py:411 #: netbox/templates/dcim/devicetype.html:11 msgid "Chassis" msgstr "Châssis" -#: netbox/dcim/forms/bulk_edit.py:616 netbox/dcim/models/devices.py:484 -#: netbox/dcim/tables/devices.py:67 +#: netbox/dcim/forms/bulk_edit.py:619 netbox/dcim/models/devices.py:483 +#: netbox/dcim/tables/devices.py:78 msgid "VM role" msgstr "rôle de machine virtuelle" -#: netbox/dcim/forms/bulk_edit.py:619 netbox/dcim/forms/bulk_edit.py:643 -#: netbox/dcim/forms/bulk_edit.py:726 netbox/dcim/forms/bulk_import.py:456 -#: netbox/dcim/forms/bulk_import.py:460 netbox/dcim/forms/bulk_import.py:479 -#: netbox/dcim/forms/bulk_import.py:483 netbox/dcim/forms/bulk_import.py:608 -#: netbox/dcim/forms/bulk_import.py:612 netbox/dcim/forms/filtersets.py:689 -#: netbox/dcim/forms/filtersets.py:705 netbox/dcim/forms/filtersets.py:823 -#: netbox/dcim/forms/model_forms.py:415 netbox/dcim/forms/model_forms.py:441 -#: netbox/dcim/forms/model_forms.py:555 -#: netbox/virtualization/forms/bulk_import.py:132 -#: netbox/virtualization/forms/bulk_import.py:133 -#: netbox/virtualization/forms/filtersets.py:188 -#: netbox/virtualization/forms/model_forms.py:215 +#: netbox/dcim/forms/bulk_edit.py:622 netbox/dcim/forms/bulk_edit.py:646 +#: netbox/dcim/forms/bulk_edit.py:729 netbox/dcim/forms/bulk_import.py:461 +#: netbox/dcim/forms/bulk_import.py:465 netbox/dcim/forms/bulk_import.py:484 +#: netbox/dcim/forms/bulk_import.py:488 netbox/dcim/forms/bulk_import.py:613 +#: netbox/dcim/forms/bulk_import.py:617 netbox/dcim/forms/filtersets.py:690 +#: netbox/dcim/forms/filtersets.py:706 netbox/dcim/forms/filtersets.py:824 +#: netbox/dcim/forms/model_forms.py:424 netbox/dcim/forms/model_forms.py:451 +#: netbox/dcim/forms/model_forms.py:566 +#: netbox/virtualization/forms/bulk_import.py:138 +#: netbox/virtualization/forms/bulk_import.py:139 +#: netbox/virtualization/forms/filtersets.py:193 +#: netbox/virtualization/forms/model_forms.py:222 msgid "Config template" msgstr "Modèle de configuration" -#: netbox/dcim/forms/bulk_edit.py:667 netbox/dcim/forms/bulk_edit.py:1076 -#: netbox/dcim/forms/bulk_import.py:514 netbox/dcim/forms/filtersets.py:114 -#: netbox/dcim/forms/model_forms.py:501 netbox/dcim/forms/model_forms.py:872 -#: netbox/dcim/forms/model_forms.py:889 netbox/extras/filtersets.py:547 +#: netbox/dcim/forms/bulk_edit.py:670 netbox/dcim/forms/bulk_edit.py:1079 +#: netbox/dcim/forms/bulk_import.py:519 netbox/dcim/forms/filtersets.py:115 +#: netbox/dcim/forms/model_forms.py:511 netbox/dcim/forms/model_forms.py:884 +#: netbox/dcim/forms/model_forms.py:901 netbox/extras/filtersets.py:547 msgid "Device type" msgstr "Type d'appareil" -#: netbox/dcim/forms/bulk_edit.py:678 netbox/dcim/forms/bulk_import.py:495 -#: netbox/dcim/forms/filtersets.py:119 netbox/dcim/forms/model_forms.py:509 +#: netbox/dcim/forms/bulk_edit.py:681 netbox/dcim/forms/bulk_import.py:500 +#: netbox/dcim/forms/filtersets.py:120 netbox/dcim/forms/model_forms.py:519 msgid "Device role" msgstr "Rôle de l'appareil" -#: netbox/dcim/forms/bulk_edit.py:701 netbox/dcim/forms/bulk_import.py:520 -#: netbox/dcim/forms/filtersets.py:796 netbox/dcim/forms/model_forms.py:451 -#: netbox/dcim/forms/model_forms.py:513 netbox/dcim/tables/devices.py:182 +#: netbox/dcim/forms/bulk_edit.py:704 netbox/dcim/forms/bulk_import.py:525 +#: netbox/dcim/forms/filtersets.py:797 netbox/dcim/forms/model_forms.py:461 +#: netbox/dcim/forms/model_forms.py:524 netbox/dcim/tables/devices.py:193 #: netbox/extras/filtersets.py:563 netbox/templates/dcim/device.html:186 #: netbox/templates/dcim/platform.html:26 #: netbox/templates/virtualization/virtualmachine.html:27 -#: netbox/virtualization/forms/bulk_edit.py:160 -#: netbox/virtualization/forms/bulk_import.py:122 -#: netbox/virtualization/forms/filtersets.py:168 -#: netbox/virtualization/forms/model_forms.py:203 -#: netbox/virtualization/tables/virtualmachines.py:79 +#: netbox/virtualization/forms/bulk_edit.py:142 +#: netbox/virtualization/forms/bulk_import.py:128 +#: netbox/virtualization/forms/filtersets.py:173 +#: netbox/virtualization/forms/model_forms.py:210 +#: netbox/virtualization/tables/virtualmachines.py:49 msgid "Platform" msgstr "Plateforme" -#: netbox/dcim/forms/bulk_edit.py:731 netbox/dcim/forms/bulk_import.py:539 -#: netbox/dcim/forms/filtersets.py:728 netbox/dcim/forms/filtersets.py:898 -#: netbox/dcim/forms/model_forms.py:522 netbox/dcim/tables/devices.py:202 -#: netbox/extras/filtersets.py:596 netbox/extras/forms/filtersets.py:322 -#: netbox/ipam/forms/filtersets.py:415 netbox/ipam/forms/filtersets.py:447 +#: netbox/dcim/forms/bulk_edit.py:734 netbox/dcim/forms/bulk_import.py:544 +#: netbox/dcim/forms/filtersets.py:729 netbox/dcim/forms/filtersets.py:899 +#: netbox/dcim/forms/model_forms.py:533 netbox/dcim/tables/devices.py:213 +#: netbox/extras/filtersets.py:596 netbox/extras/forms/filtersets.py:329 +#: netbox/ipam/forms/filtersets.py:418 netbox/ipam/forms/filtersets.py:450 #: netbox/templates/dcim/device.html:239 #: netbox/templates/virtualization/cluster.html:10 #: netbox/templates/virtualization/virtualmachine.html:92 #: netbox/templates/virtualization/virtualmachine.html:101 -#: netbox/virtualization/filtersets.py:157 -#: netbox/virtualization/filtersets.py:277 -#: netbox/virtualization/forms/bulk_edit.py:129 -#: netbox/virtualization/forms/bulk_import.py:92 -#: netbox/virtualization/forms/filtersets.py:99 -#: netbox/virtualization/forms/filtersets.py:123 -#: netbox/virtualization/forms/filtersets.py:204 -#: netbox/virtualization/forms/model_forms.py:79 -#: netbox/virtualization/forms/model_forms.py:176 -#: netbox/virtualization/tables/virtualmachines.py:67 +#: netbox/virtualization/filtersets.py:123 +#: netbox/virtualization/filtersets.py:243 +#: netbox/virtualization/forms/bulk_edit.py:111 +#: netbox/virtualization/forms/bulk_import.py:98 +#: netbox/virtualization/forms/filtersets.py:104 +#: netbox/virtualization/forms/filtersets.py:128 +#: netbox/virtualization/forms/filtersets.py:209 +#: netbox/virtualization/forms/model_forms.py:78 +#: netbox/virtualization/forms/model_forms.py:183 +#: netbox/virtualization/tables/virtualmachines.py:37 msgid "Cluster" msgstr "Cluster" -#: netbox/dcim/forms/bulk_edit.py:742 netbox/dcim/forms/bulk_edit.py:1296 -#: netbox/dcim/forms/bulk_edit.py:1693 netbox/dcim/forms/bulk_edit.py:1739 -#: netbox/dcim/forms/bulk_import.py:663 netbox/dcim/forms/bulk_import.py:725 -#: netbox/dcim/forms/bulk_import.py:751 netbox/dcim/forms/bulk_import.py:777 -#: netbox/dcim/forms/bulk_import.py:797 netbox/dcim/forms/bulk_import.py:850 -#: netbox/dcim/forms/bulk_import.py:968 netbox/dcim/forms/bulk_import.py:1016 -#: netbox/dcim/forms/bulk_import.py:1033 netbox/dcim/forms/bulk_import.py:1045 -#: netbox/dcim/forms/bulk_import.py:1093 netbox/dcim/forms/bulk_import.py:1444 -#: netbox/dcim/forms/connections.py:24 netbox/dcim/forms/filtersets.py:131 -#: netbox/dcim/forms/filtersets.py:921 netbox/dcim/forms/filtersets.py:1051 -#: netbox/dcim/forms/filtersets.py:1242 netbox/dcim/forms/filtersets.py:1267 -#: netbox/dcim/forms/filtersets.py:1291 netbox/dcim/forms/filtersets.py:1311 -#: netbox/dcim/forms/filtersets.py:1334 netbox/dcim/forms/filtersets.py:1444 -#: netbox/dcim/forms/filtersets.py:1469 netbox/dcim/forms/filtersets.py:1493 -#: netbox/dcim/forms/filtersets.py:1511 netbox/dcim/forms/filtersets.py:1528 -#: netbox/dcim/forms/filtersets.py:1592 netbox/dcim/forms/filtersets.py:1616 -#: netbox/dcim/forms/filtersets.py:1640 netbox/dcim/forms/model_forms.py:633 -#: netbox/dcim/forms/model_forms.py:849 netbox/dcim/forms/model_forms.py:1215 -#: netbox/dcim/forms/model_forms.py:1671 -#: netbox/dcim/forms/object_create.py:249 netbox/dcim/tables/connections.py:22 -#: netbox/dcim/tables/connections.py:41 netbox/dcim/tables/connections.py:60 -#: netbox/dcim/tables/devices.py:285 netbox/dcim/tables/devices.py:371 -#: netbox/dcim/tables/devices.py:412 netbox/dcim/tables/devices.py:454 -#: netbox/dcim/tables/devices.py:505 netbox/dcim/tables/devices.py:597 -#: netbox/dcim/tables/devices.py:697 netbox/dcim/tables/devices.py:754 -#: netbox/dcim/tables/devices.py:801 netbox/dcim/tables/devices.py:861 -#: netbox/dcim/tables/devices.py:930 netbox/dcim/tables/devices.py:1057 -#: netbox/dcim/tables/modules.py:53 netbox/extras/forms/filtersets.py:321 -#: netbox/ipam/forms/bulk_import.py:304 netbox/ipam/forms/bulk_import.py:505 -#: netbox/ipam/forms/filtersets.py:551 netbox/ipam/forms/model_forms.py:323 -#: netbox/ipam/forms/model_forms.py:712 netbox/ipam/forms/model_forms.py:745 -#: netbox/ipam/forms/model_forms.py:771 netbox/ipam/tables/vlans.py:180 -#: netbox/templates/dcim/consoleport.html:20 -#: netbox/templates/dcim/consoleserverport.html:20 -#: netbox/templates/dcim/device.html:15 netbox/templates/dcim/device.html:130 -#: netbox/templates/dcim/device_edit.html:10 -#: netbox/templates/dcim/devicebay.html:20 -#: netbox/templates/dcim/devicebay.html:48 -#: netbox/templates/dcim/frontport.html:20 -#: netbox/templates/dcim/interface.html:30 -#: netbox/templates/dcim/interface.html:161 -#: netbox/templates/dcim/inventoryitem.html:20 -#: netbox/templates/dcim/module.html:57 -#: netbox/templates/dcim/modulebay.html:20 -#: netbox/templates/dcim/poweroutlet.html:20 -#: netbox/templates/dcim/powerport.html:20 -#: netbox/templates/dcim/rearport.html:20 -#: netbox/templates/dcim/virtualchassis.html:65 -#: netbox/templates/dcim/virtualchassis_edit.html:51 -#: netbox/templates/dcim/virtualdevicecontext.html:22 -#: netbox/templates/virtualization/virtualmachine.html:114 -#: netbox/templates/vpn/tunneltermination.html:23 -#: netbox/templates/wireless/inc/wirelesslink_interface.html:6 -#: netbox/virtualization/filtersets.py:167 -#: netbox/virtualization/forms/bulk_edit.py:137 -#: netbox/virtualization/forms/bulk_import.py:99 -#: netbox/virtualization/forms/filtersets.py:128 -#: netbox/virtualization/forms/model_forms.py:185 -#: netbox/virtualization/tables/virtualmachines.py:71 netbox/vpn/choices.py:52 -#: netbox/vpn/forms/bulk_import.py:86 netbox/vpn/forms/bulk_import.py:283 -#: netbox/vpn/forms/filtersets.py:275 netbox/vpn/forms/model_forms.py:90 -#: netbox/vpn/forms/model_forms.py:125 netbox/vpn/forms/model_forms.py:236 -#: netbox/vpn/forms/model_forms.py:453 netbox/wireless/forms/model_forms.py:99 -#: netbox/wireless/forms/model_forms.py:141 -#: netbox/wireless/tables/wirelesslan.py:75 -msgid "Device" -msgstr "Appareil" - -#: netbox/dcim/forms/bulk_edit.py:745 +#: netbox/dcim/forms/bulk_edit.py:748 #: netbox/templates/extras/dashboard/widget_config.html:7 -#: netbox/virtualization/forms/bulk_edit.py:191 +#: netbox/virtualization/forms/bulk_edit.py:173 msgid "Configuration" msgstr "Configuration" -#: netbox/dcim/forms/bulk_edit.py:746 netbox/netbox/navigation/menu.py:243 +#: netbox/dcim/forms/bulk_edit.py:749 netbox/netbox/navigation/menu.py:251 #: netbox/templates/dcim/device_edit.html:78 msgid "Virtualization" msgstr "Virtualisation" -#: netbox/dcim/forms/bulk_edit.py:760 netbox/dcim/forms/bulk_import.py:675 -#: netbox/dcim/forms/model_forms.py:647 netbox/dcim/forms/model_forms.py:897 +#: netbox/dcim/forms/bulk_edit.py:763 netbox/dcim/forms/bulk_import.py:680 +#: netbox/dcim/forms/model_forms.py:658 netbox/dcim/forms/model_forms.py:909 msgid "Module type" msgstr "Type de module" -#: netbox/dcim/forms/bulk_edit.py:814 netbox/dcim/forms/bulk_edit.py:999 -#: netbox/dcim/forms/bulk_edit.py:1018 netbox/dcim/forms/bulk_edit.py:1041 -#: netbox/dcim/forms/bulk_edit.py:1083 netbox/dcim/forms/bulk_edit.py:1127 -#: netbox/dcim/forms/bulk_edit.py:1178 netbox/dcim/forms/bulk_edit.py:1205 -#: netbox/dcim/forms/bulk_edit.py:1232 netbox/dcim/forms/bulk_edit.py:1250 -#: netbox/dcim/forms/bulk_edit.py:1268 netbox/dcim/forms/filtersets.py:67 +#: netbox/dcim/forms/bulk_edit.py:817 netbox/dcim/forms/bulk_edit.py:1002 +#: netbox/dcim/forms/bulk_edit.py:1021 netbox/dcim/forms/bulk_edit.py:1044 +#: netbox/dcim/forms/bulk_edit.py:1086 netbox/dcim/forms/bulk_edit.py:1130 +#: netbox/dcim/forms/bulk_edit.py:1181 netbox/dcim/forms/bulk_edit.py:1208 +#: netbox/dcim/forms/bulk_edit.py:1235 netbox/dcim/forms/bulk_edit.py:1253 +#: netbox/dcim/forms/bulk_edit.py:1271 netbox/dcim/forms/filtersets.py:68 #: netbox/dcim/forms/object_create.py:46 netbox/templates/dcim/cable.html:32 #: netbox/templates/dcim/consoleport.html:32 #: netbox/templates/dcim/consoleserverport.html:32 @@ -3936,109 +4326,109 @@ msgstr "Type de module" msgid "Label" msgstr "Libellé" -#: netbox/dcim/forms/bulk_edit.py:823 netbox/dcim/forms/filtersets.py:1068 +#: netbox/dcim/forms/bulk_edit.py:826 netbox/dcim/forms/filtersets.py:1069 #: netbox/templates/dcim/cable.html:50 msgid "Length" msgstr "Longueur" -#: netbox/dcim/forms/bulk_edit.py:828 netbox/dcim/forms/bulk_import.py:1248 -#: netbox/dcim/forms/bulk_import.py:1251 netbox/dcim/forms/filtersets.py:1072 +#: netbox/dcim/forms/bulk_edit.py:831 netbox/dcim/forms/bulk_import.py:1345 +#: netbox/dcim/forms/bulk_import.py:1348 netbox/dcim/forms/filtersets.py:1073 msgid "Length unit" msgstr "Unité de longueur" -#: netbox/dcim/forms/bulk_edit.py:852 +#: netbox/dcim/forms/bulk_edit.py:855 #: netbox/templates/dcim/virtualchassis.html:23 msgid "Domain" msgstr "Domaine" -#: netbox/dcim/forms/bulk_edit.py:920 netbox/dcim/forms/bulk_import.py:1367 -#: netbox/dcim/forms/filtersets.py:1158 netbox/dcim/forms/model_forms.py:750 +#: netbox/dcim/forms/bulk_edit.py:923 netbox/dcim/forms/bulk_import.py:1464 +#: netbox/dcim/forms/filtersets.py:1159 netbox/dcim/forms/model_forms.py:761 msgid "Power panel" msgstr "panneau d'alimentation" -#: netbox/dcim/forms/bulk_edit.py:942 netbox/dcim/forms/bulk_import.py:1403 -#: netbox/dcim/forms/filtersets.py:1180 +#: netbox/dcim/forms/bulk_edit.py:945 netbox/dcim/forms/bulk_import.py:1500 +#: netbox/dcim/forms/filtersets.py:1181 #: netbox/templates/dcim/powerfeed.html:83 msgid "Supply" msgstr "Approvisionnement" -#: netbox/dcim/forms/bulk_edit.py:948 netbox/dcim/forms/bulk_import.py:1408 -#: netbox/dcim/forms/filtersets.py:1185 +#: netbox/dcim/forms/bulk_edit.py:951 netbox/dcim/forms/bulk_import.py:1505 +#: netbox/dcim/forms/filtersets.py:1186 #: netbox/templates/dcim/powerfeed.html:95 msgid "Phase" msgstr "Phase" -#: netbox/dcim/forms/bulk_edit.py:954 netbox/dcim/forms/filtersets.py:1190 +#: netbox/dcim/forms/bulk_edit.py:957 netbox/dcim/forms/filtersets.py:1191 #: netbox/templates/dcim/powerfeed.html:87 msgid "Voltage" msgstr "tension" -#: netbox/dcim/forms/bulk_edit.py:958 netbox/dcim/forms/filtersets.py:1194 +#: netbox/dcim/forms/bulk_edit.py:961 netbox/dcim/forms/filtersets.py:1195 #: netbox/templates/dcim/powerfeed.html:91 msgid "Amperage" msgstr "Ampérage" -#: netbox/dcim/forms/bulk_edit.py:962 netbox/dcim/forms/filtersets.py:1198 +#: netbox/dcim/forms/bulk_edit.py:965 netbox/dcim/forms/filtersets.py:1199 msgid "Max utilization" msgstr "Utilisation maximale" -#: netbox/dcim/forms/bulk_edit.py:1051 +#: netbox/dcim/forms/bulk_edit.py:1054 msgid "Maximum draw" msgstr "Tirage maximum" -#: netbox/dcim/forms/bulk_edit.py:1054 -#: netbox/dcim/models/device_component_templates.py:282 -#: netbox/dcim/models/device_components.py:356 +#: netbox/dcim/forms/bulk_edit.py:1057 +#: netbox/dcim/models/device_component_templates.py:281 +#: netbox/dcim/models/device_components.py:349 msgid "Maximum power draw (watts)" msgstr "Consommation électrique maximale (watts)" -#: netbox/dcim/forms/bulk_edit.py:1057 +#: netbox/dcim/forms/bulk_edit.py:1060 msgid "Allocated draw" msgstr "Tirage au sort attribué" -#: netbox/dcim/forms/bulk_edit.py:1060 -#: netbox/dcim/models/device_component_templates.py:289 -#: netbox/dcim/models/device_components.py:363 +#: netbox/dcim/forms/bulk_edit.py:1063 +#: netbox/dcim/models/device_component_templates.py:288 +#: netbox/dcim/models/device_components.py:356 msgid "Allocated power draw (watts)" msgstr "Consommation électrique allouée (watts)" -#: netbox/dcim/forms/bulk_edit.py:1093 netbox/dcim/forms/bulk_import.py:808 -#: netbox/dcim/forms/model_forms.py:960 netbox/dcim/forms/model_forms.py:1285 -#: netbox/dcim/forms/model_forms.py:1574 netbox/dcim/forms/object_import.py:55 +#: netbox/dcim/forms/bulk_edit.py:1096 netbox/dcim/forms/bulk_import.py:813 +#: netbox/dcim/forms/model_forms.py:972 netbox/dcim/forms/model_forms.py:1301 +#: netbox/dcim/forms/model_forms.py:1616 netbox/dcim/forms/object_import.py:55 msgid "Power port" msgstr "port d'alimentation" -#: netbox/dcim/forms/bulk_edit.py:1098 netbox/dcim/forms/bulk_import.py:815 +#: netbox/dcim/forms/bulk_edit.py:1101 netbox/dcim/forms/bulk_import.py:820 msgid "Feed leg" msgstr "Patte d'alimentation" -#: netbox/dcim/forms/bulk_edit.py:1144 netbox/dcim/forms/bulk_edit.py:1462 +#: netbox/dcim/forms/bulk_edit.py:1147 netbox/dcim/forms/bulk_edit.py:1465 msgid "Management only" msgstr "Gestion uniquement" -#: netbox/dcim/forms/bulk_edit.py:1154 netbox/dcim/forms/bulk_edit.py:1468 -#: netbox/dcim/forms/bulk_import.py:898 netbox/dcim/forms/filtersets.py:1394 +#: netbox/dcim/forms/bulk_edit.py:1157 netbox/dcim/forms/bulk_edit.py:1471 +#: netbox/dcim/forms/bulk_import.py:906 netbox/dcim/forms/filtersets.py:1399 #: netbox/dcim/forms/object_import.py:90 -#: netbox/dcim/models/device_component_templates.py:437 -#: netbox/dcim/models/device_components.py:670 +#: netbox/dcim/models/device_component_templates.py:445 +#: netbox/dcim/models/device_components.py:721 msgid "PoE mode" msgstr "Mode PoE" -#: netbox/dcim/forms/bulk_edit.py:1160 netbox/dcim/forms/bulk_edit.py:1474 -#: netbox/dcim/forms/bulk_import.py:904 netbox/dcim/forms/filtersets.py:1399 +#: netbox/dcim/forms/bulk_edit.py:1163 netbox/dcim/forms/bulk_edit.py:1477 +#: netbox/dcim/forms/bulk_import.py:912 netbox/dcim/forms/filtersets.py:1404 #: netbox/dcim/forms/object_import.py:95 -#: netbox/dcim/models/device_component_templates.py:443 -#: netbox/dcim/models/device_components.py:676 +#: netbox/dcim/models/device_component_templates.py:452 +#: netbox/dcim/models/device_components.py:728 msgid "PoE type" msgstr "Type PoE" -#: netbox/dcim/forms/bulk_edit.py:1166 netbox/dcim/forms/filtersets.py:1404 +#: netbox/dcim/forms/bulk_edit.py:1169 netbox/dcim/forms/filtersets.py:1409 #: netbox/dcim/forms/object_import.py:100 msgid "Wireless role" msgstr "Rôle sans fil" -#: netbox/dcim/forms/bulk_edit.py:1303 netbox/dcim/forms/model_forms.py:669 -#: netbox/dcim/forms/model_forms.py:1230 netbox/dcim/tables/devices.py:313 +#: netbox/dcim/forms/bulk_edit.py:1306 netbox/dcim/forms/model_forms.py:680 +#: netbox/dcim/forms/model_forms.py:1246 netbox/dcim/tables/devices.py:323 #: netbox/templates/dcim/consoleport.html:24 #: netbox/templates/dcim/consoleserverport.html:24 #: netbox/templates/dcim/frontport.html:24 @@ -4052,31 +4442,31 @@ msgstr "Rôle sans fil" msgid "Module" msgstr "Modules" -#: netbox/dcim/forms/bulk_edit.py:1442 netbox/dcim/tables/devices.py:665 -#: netbox/templates/dcim/interface.html:110 +#: netbox/dcim/forms/bulk_edit.py:1445 netbox/dcim/tables/devices.py:699 +#: netbox/templates/dcim/interface.html:116 msgid "LAG" msgstr "DÉCALAGE" -#: netbox/dcim/forms/bulk_edit.py:1447 netbox/dcim/forms/model_forms.py:1312 +#: netbox/dcim/forms/bulk_edit.py:1450 netbox/dcim/forms/model_forms.py:1328 msgid "Virtual device contexts" msgstr "Contextes des appareils virtuels" -#: netbox/dcim/forms/bulk_edit.py:1453 netbox/dcim/forms/bulk_import.py:736 -#: netbox/dcim/forms/bulk_import.py:762 netbox/dcim/forms/filtersets.py:1252 -#: netbox/dcim/forms/filtersets.py:1277 netbox/dcim/forms/filtersets.py:1358 -#: netbox/dcim/tables/devices.py:610 -#: netbox/templates/circuits/inc/circuit_termination_fields.html:67 +#: netbox/dcim/forms/bulk_edit.py:1456 netbox/dcim/forms/bulk_import.py:741 +#: netbox/dcim/forms/bulk_import.py:767 netbox/dcim/forms/filtersets.py:1253 +#: netbox/dcim/forms/filtersets.py:1278 netbox/dcim/forms/filtersets.py:1363 +#: netbox/dcim/tables/devices.py:632 +#: netbox/templates/circuits/inc/circuit_termination_fields.html:62 #: netbox/templates/dcim/consoleport.html:40 #: netbox/templates/dcim/consoleserverport.html:40 msgid "Speed" msgstr "Vitesse" -#: netbox/dcim/forms/bulk_edit.py:1482 netbox/dcim/forms/bulk_import.py:907 +#: netbox/dcim/forms/bulk_edit.py:1485 netbox/dcim/forms/bulk_import.py:915 #: netbox/templates/vpn/ikepolicy.html:25 #: netbox/templates/vpn/ipsecprofile.html:21 #: netbox/templates/vpn/ipsecprofile.html:48 -#: netbox/virtualization/forms/bulk_edit.py:233 -#: netbox/virtualization/forms/bulk_import.py:165 +#: netbox/virtualization/forms/bulk_edit.py:215 +#: netbox/virtualization/forms/bulk_import.py:171 #: netbox/vpn/forms/bulk_edit.py:146 netbox/vpn/forms/bulk_edit.py:232 #: netbox/vpn/forms/bulk_import.py:176 netbox/vpn/forms/bulk_import.py:234 #: netbox/vpn/forms/filtersets.py:135 netbox/vpn/forms/filtersets.py:178 @@ -4085,300 +4475,306 @@ msgstr "Vitesse" msgid "Mode" msgstr "Mode" -#: netbox/dcim/forms/bulk_edit.py:1490 netbox/dcim/forms/model_forms.py:1361 -#: netbox/ipam/forms/bulk_import.py:178 netbox/ipam/forms/filtersets.py:498 -#: netbox/ipam/models/vlans.py:84 netbox/virtualization/forms/bulk_edit.py:240 -#: netbox/virtualization/forms/model_forms.py:321 +#: netbox/dcim/forms/bulk_edit.py:1493 netbox/dcim/forms/model_forms.py:1377 +#: netbox/ipam/forms/bulk_import.py:174 netbox/ipam/forms/filtersets.py:539 +#: netbox/ipam/models/vlans.py:86 netbox/virtualization/forms/bulk_edit.py:222 +#: netbox/virtualization/forms/model_forms.py:335 msgid "VLAN group" msgstr "groupe VLAN" -#: netbox/dcim/forms/bulk_edit.py:1499 netbox/dcim/forms/model_forms.py:1367 -#: netbox/dcim/tables/devices.py:579 -#: netbox/virtualization/forms/bulk_edit.py:248 -#: netbox/virtualization/forms/model_forms.py:326 +#: netbox/dcim/forms/bulk_edit.py:1502 netbox/dcim/forms/model_forms.py:1383 +#: netbox/dcim/tables/devices.py:593 +#: netbox/virtualization/forms/bulk_edit.py:230 +#: netbox/virtualization/forms/model_forms.py:340 msgid "Untagged VLAN" msgstr "VLAN non étiqueté" -#: netbox/dcim/forms/bulk_edit.py:1508 netbox/dcim/forms/model_forms.py:1376 -#: netbox/dcim/tables/devices.py:585 -#: netbox/virtualization/forms/bulk_edit.py:256 -#: netbox/virtualization/forms/model_forms.py:335 +#: netbox/dcim/forms/bulk_edit.py:1511 netbox/dcim/forms/model_forms.py:1392 +#: netbox/dcim/tables/devices.py:599 +#: netbox/virtualization/forms/bulk_edit.py:238 +#: netbox/virtualization/forms/model_forms.py:349 msgid "Tagged VLANs" msgstr "VLAN étiqueté" -#: netbox/dcim/forms/bulk_edit.py:1511 +#: netbox/dcim/forms/bulk_edit.py:1514 msgid "Add tagged VLANs" msgstr "Ajouter des VLANs étiquetés" -#: netbox/dcim/forms/bulk_edit.py:1520 +#: netbox/dcim/forms/bulk_edit.py:1523 msgid "Remove tagged VLANs" msgstr "Retirer des VLANs étiquetés" -#: netbox/dcim/forms/bulk_edit.py:1536 netbox/dcim/forms/model_forms.py:1348 +#: netbox/dcim/forms/bulk_edit.py:1534 netbox/dcim/forms/model_forms.py:1401 +#: netbox/virtualization/forms/model_forms.py:358 +msgid "Q-in-Q Service VLAN" +msgstr "Service VLAN Q-in-Q" + +#: netbox/dcim/forms/bulk_edit.py:1549 netbox/dcim/forms/model_forms.py:1364 msgid "Wireless LAN group" msgstr "Groupe LAN sans fil" -#: netbox/dcim/forms/bulk_edit.py:1541 netbox/dcim/forms/model_forms.py:1353 -#: netbox/dcim/tables/devices.py:619 netbox/netbox/navigation/menu.py:146 -#: netbox/templates/dcim/interface.html:280 +#: netbox/dcim/forms/bulk_edit.py:1554 netbox/dcim/forms/model_forms.py:1369 +#: netbox/dcim/tables/devices.py:641 netbox/netbox/navigation/menu.py:152 +#: netbox/templates/dcim/interface.html:337 #: netbox/wireless/tables/wirelesslan.py:24 msgid "Wireless LANs" msgstr "Réseaux locaux sans fil" -#: netbox/dcim/forms/bulk_edit.py:1550 netbox/dcim/forms/filtersets.py:1328 -#: netbox/dcim/forms/model_forms.py:1397 netbox/ipam/forms/bulk_edit.py:286 -#: netbox/ipam/forms/bulk_edit.py:378 netbox/ipam/forms/filtersets.py:169 -#: netbox/templates/dcim/interface.html:122 -#: netbox/templates/ipam/prefix.html:95 -#: netbox/virtualization/forms/model_forms.py:349 +#: netbox/dcim/forms/bulk_edit.py:1563 netbox/dcim/forms/filtersets.py:1333 +#: netbox/dcim/forms/model_forms.py:1435 netbox/ipam/forms/bulk_edit.py:269 +#: netbox/ipam/forms/bulk_edit.py:362 netbox/ipam/forms/filtersets.py:171 +#: netbox/netbox/navigation/menu.py:108 +#: netbox/templates/dcim/interface.html:128 +#: netbox/templates/ipam/prefix.html:91 +#: netbox/templates/virtualization/vminterface.html:70 +#: netbox/virtualization/forms/model_forms.py:378 msgid "Addressing" msgstr "Adressage" -#: netbox/dcim/forms/bulk_edit.py:1551 netbox/dcim/forms/filtersets.py:720 -#: netbox/dcim/forms/model_forms.py:1398 -#: netbox/virtualization/forms/model_forms.py:350 +#: netbox/dcim/forms/bulk_edit.py:1564 netbox/dcim/forms/filtersets.py:721 +#: netbox/dcim/forms/model_forms.py:1436 +#: netbox/virtualization/forms/model_forms.py:379 msgid "Operation" msgstr "Fonctionnement" -#: netbox/dcim/forms/bulk_edit.py:1552 netbox/dcim/forms/filtersets.py:1329 -#: netbox/dcim/forms/model_forms.py:994 netbox/dcim/forms/model_forms.py:1400 +#: netbox/dcim/forms/bulk_edit.py:1565 netbox/dcim/forms/filtersets.py:1334 +#: netbox/dcim/forms/model_forms.py:1006 netbox/dcim/forms/model_forms.py:1438 msgid "PoE" msgstr "PoE" -#: netbox/dcim/forms/bulk_edit.py:1553 netbox/dcim/forms/model_forms.py:1399 -#: netbox/templates/dcim/interface.html:99 -#: netbox/virtualization/forms/bulk_edit.py:267 -#: netbox/virtualization/forms/model_forms.py:351 +#: netbox/dcim/forms/bulk_edit.py:1566 netbox/dcim/forms/model_forms.py:1437 +#: netbox/templates/dcim/interface.html:105 +#: netbox/virtualization/forms/bulk_edit.py:254 +#: netbox/virtualization/forms/model_forms.py:380 msgid "Related Interfaces" msgstr "Interfaces associées" -#: netbox/dcim/forms/bulk_edit.py:1554 netbox/dcim/forms/model_forms.py:1401 -#: netbox/virtualization/forms/bulk_edit.py:268 -#: netbox/virtualization/forms/model_forms.py:352 +#: netbox/dcim/forms/bulk_edit.py:1568 netbox/dcim/forms/model_forms.py:1441 +#: netbox/virtualization/forms/bulk_edit.py:257 +#: netbox/virtualization/forms/model_forms.py:383 msgid "802.1Q Switching" msgstr "Commutation 802.1Q" -#: netbox/dcim/forms/bulk_edit.py:1558 +#: netbox/dcim/forms/bulk_edit.py:1573 msgid "Add/Remove" msgstr "Ajouter/Supprimer" -#: netbox/dcim/forms/bulk_edit.py:1617 netbox/dcim/forms/bulk_edit.py:1619 +#: netbox/dcim/forms/bulk_edit.py:1632 netbox/dcim/forms/bulk_edit.py:1634 msgid "Interface mode must be specified to assign VLANs" msgstr "Le mode d'interface doit être spécifié pour attribuer des VLAN" -#: netbox/dcim/forms/bulk_edit.py:1624 netbox/dcim/forms/common.py:50 +#: netbox/dcim/forms/bulk_edit.py:1639 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:64 +#: netbox/dcim/forms/bulk_import.py:66 msgid "Name of parent region" msgstr "Nom de la région mère" -#: netbox/dcim/forms/bulk_import.py:78 +#: netbox/dcim/forms/bulk_import.py:80 msgid "Name of parent site group" msgstr "Nom du groupe de sites parent" -#: netbox/dcim/forms/bulk_import.py:97 +#: netbox/dcim/forms/bulk_import.py:99 msgid "Assigned region" msgstr "Région associé" -#: netbox/dcim/forms/bulk_import.py:104 netbox/tenancy/forms/bulk_import.py:44 +#: netbox/dcim/forms/bulk_import.py:106 netbox/tenancy/forms/bulk_import.py:44 #: netbox/tenancy/forms/bulk_import.py:85 -#: netbox/wireless/forms/bulk_import.py:40 +#: netbox/wireless/forms/bulk_import.py:42 msgid "Assigned group" msgstr "Groupe associé" -#: netbox/dcim/forms/bulk_import.py:123 +#: netbox/dcim/forms/bulk_import.py:125 msgid "available options" msgstr "options disponibles" -#: netbox/dcim/forms/bulk_import.py:134 netbox/dcim/forms/bulk_import.py:565 -#: netbox/dcim/forms/bulk_import.py:1364 netbox/ipam/forms/bulk_import.py:175 -#: netbox/ipam/forms/bulk_import.py:457 -#: netbox/virtualization/forms/bulk_import.py:63 -#: netbox/virtualization/forms/bulk_import.py:89 +#: netbox/dcim/forms/bulk_import.py:136 netbox/dcim/forms/bulk_import.py:570 +#: netbox/dcim/forms/bulk_import.py:1461 netbox/ipam/forms/bulk_import.py:456 +#: netbox/virtualization/forms/bulk_import.py:64 +#: netbox/virtualization/forms/bulk_import.py:95 msgid "Assigned site" msgstr "Site associé" -#: netbox/dcim/forms/bulk_import.py:141 +#: netbox/dcim/forms/bulk_import.py:143 msgid "Parent location" msgstr "Emplacement du parent" -#: netbox/dcim/forms/bulk_import.py:143 +#: netbox/dcim/forms/bulk_import.py:145 msgid "Location not found." msgstr "Emplacement introuvable." -#: netbox/dcim/forms/bulk_import.py:185 +#: netbox/dcim/forms/bulk_import.py:187 msgid "The manufacturer of this rack type" msgstr "Le fabricant de ce type de baie" -#: netbox/dcim/forms/bulk_import.py:196 +#: netbox/dcim/forms/bulk_import.py:198 msgid "The lowest-numbered position in the rack" msgstr "La position la plus basse de la baie" -#: netbox/dcim/forms/bulk_import.py:201 netbox/dcim/forms/bulk_import.py:276 +#: netbox/dcim/forms/bulk_import.py:203 netbox/dcim/forms/bulk_import.py:278 msgid "Rail-to-rail width (in inches)" msgstr "Largeur rail à rail (en pouces)" -#: netbox/dcim/forms/bulk_import.py:207 netbox/dcim/forms/bulk_import.py:286 +#: netbox/dcim/forms/bulk_import.py:209 netbox/dcim/forms/bulk_import.py:288 msgid "Unit for outer dimensions" msgstr "Unité pour les dimensions extérieures" -#: netbox/dcim/forms/bulk_import.py:213 netbox/dcim/forms/bulk_import.py:298 +#: netbox/dcim/forms/bulk_import.py:215 netbox/dcim/forms/bulk_import.py:300 msgid "Unit for rack weights" msgstr "Unité de poids de la baie" -#: netbox/dcim/forms/bulk_import.py:245 +#: netbox/dcim/forms/bulk_import.py:247 msgid "Name of assigned tenant" msgstr "Nom de l'entité associée" -#: netbox/dcim/forms/bulk_import.py:257 +#: netbox/dcim/forms/bulk_import.py:259 msgid "Name of assigned role" msgstr "Nom du rôle attribué" -#: netbox/dcim/forms/bulk_import.py:264 +#: netbox/dcim/forms/bulk_import.py:266 msgid "Rack type model" msgstr "Modèle de baie" -#: netbox/dcim/forms/bulk_import.py:292 netbox/dcim/forms/bulk_import.py:435 -#: netbox/dcim/forms/bulk_import.py:605 +#: netbox/dcim/forms/bulk_import.py:294 netbox/dcim/forms/bulk_import.py:437 +#: netbox/dcim/forms/bulk_import.py:610 msgid "Airflow direction" msgstr "Direction du flux d'air" -#: netbox/dcim/forms/bulk_import.py:324 +#: netbox/dcim/forms/bulk_import.py:326 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:326 +#: netbox/dcim/forms/bulk_import.py:328 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:334 +#: netbox/dcim/forms/bulk_import.py:336 msgid "Parent site" msgstr "Site parent" -#: netbox/dcim/forms/bulk_import.py:341 netbox/dcim/forms/bulk_import.py:1377 +#: netbox/dcim/forms/bulk_import.py:343 netbox/dcim/forms/bulk_import.py:1474 msgid "Rack's location (if any)" msgstr "Emplacement de la baie (le cas échéant)" -#: netbox/dcim/forms/bulk_import.py:350 netbox/dcim/forms/model_forms.py:311 -#: netbox/dcim/tables/racks.py:222 +#: netbox/dcim/forms/bulk_import.py:352 netbox/dcim/forms/model_forms.py:319 +#: netbox/dcim/tables/racks.py:221 #: netbox/templates/dcim/rackreservation.html:12 #: netbox/templates/dcim/rackreservation.html:45 msgid "Units" msgstr "Unités" -#: netbox/dcim/forms/bulk_import.py:353 +#: netbox/dcim/forms/bulk_import.py:355 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:396 +#: netbox/dcim/forms/bulk_import.py:398 msgid "The manufacturer which produces this device type" msgstr "Le fabricant qui produit ce type d'appareil" -#: netbox/dcim/forms/bulk_import.py:403 +#: netbox/dcim/forms/bulk_import.py:405 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:408 +#: netbox/dcim/forms/bulk_import.py:410 msgid "Device weight" msgstr "Poids de l'appareil" -#: netbox/dcim/forms/bulk_import.py:414 +#: netbox/dcim/forms/bulk_import.py:416 msgid "Unit for device weight" msgstr "Unité de poids de l'appareil" -#: netbox/dcim/forms/bulk_import.py:440 +#: netbox/dcim/forms/bulk_import.py:442 msgid "Module weight" msgstr "Poids du module" -#: netbox/dcim/forms/bulk_import.py:446 +#: netbox/dcim/forms/bulk_import.py:448 msgid "Unit for module weight" msgstr "Unité pour le poids du module" -#: netbox/dcim/forms/bulk_import.py:476 +#: netbox/dcim/forms/bulk_import.py:481 msgid "Limit platform assignments to this manufacturer" msgstr "Limiter les affectations de plateforme à ce fabricant" -#: netbox/dcim/forms/bulk_import.py:498 netbox/dcim/forms/bulk_import.py:1447 +#: netbox/dcim/forms/bulk_import.py:503 netbox/dcim/forms/bulk_import.py:1544 #: netbox/tenancy/forms/bulk_import.py:106 msgid "Assigned role" msgstr "Rôle attribué" -#: netbox/dcim/forms/bulk_import.py:511 +#: netbox/dcim/forms/bulk_import.py:516 msgid "Device type manufacturer" msgstr "Fabricant du type d'appareil" -#: netbox/dcim/forms/bulk_import.py:517 +#: netbox/dcim/forms/bulk_import.py:522 msgid "Device type model" msgstr "Type d'appareil et modèle" -#: netbox/dcim/forms/bulk_import.py:524 -#: netbox/virtualization/forms/bulk_import.py:126 +#: netbox/dcim/forms/bulk_import.py:529 +#: netbox/virtualization/forms/bulk_import.py:132 msgid "Assigned platform" msgstr "Plateforme attribuée" -#: netbox/dcim/forms/bulk_import.py:532 netbox/dcim/forms/bulk_import.py:536 -#: netbox/dcim/forms/model_forms.py:536 +#: netbox/dcim/forms/bulk_import.py:537 netbox/dcim/forms/bulk_import.py:541 +#: netbox/dcim/forms/model_forms.py:547 msgid "Virtual chassis" msgstr "Châssis virtuel" -#: netbox/dcim/forms/bulk_import.py:543 +#: netbox/dcim/forms/bulk_import.py:548 msgid "Virtualization cluster" msgstr "Cluster de virtualisation" -#: netbox/dcim/forms/bulk_import.py:572 +#: netbox/dcim/forms/bulk_import.py:577 msgid "Assigned location (if any)" msgstr "Emplacement attribué (le cas échéant)" -#: netbox/dcim/forms/bulk_import.py:579 +#: netbox/dcim/forms/bulk_import.py:584 msgid "Assigned rack (if any)" msgstr "Baie attribuée (le cas échéant)" -#: netbox/dcim/forms/bulk_import.py:582 +#: netbox/dcim/forms/bulk_import.py:587 msgid "Face" msgstr "Orientation" -#: netbox/dcim/forms/bulk_import.py:585 +#: netbox/dcim/forms/bulk_import.py:590 msgid "Mounted rack face" msgstr "Face montée en baie" -#: netbox/dcim/forms/bulk_import.py:592 +#: netbox/dcim/forms/bulk_import.py:597 msgid "Parent device (for child devices)" msgstr "Appareil parent (pour les appareils pour enfants)" -#: netbox/dcim/forms/bulk_import.py:595 +#: netbox/dcim/forms/bulk_import.py:600 msgid "Device bay" msgstr "Baie pour appareils" -#: netbox/dcim/forms/bulk_import.py:599 +#: netbox/dcim/forms/bulk_import.py:604 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:666 +#: netbox/dcim/forms/bulk_import.py:671 msgid "The device in which this module is installed" msgstr "L'appareil sur lequel ce module est installé" -#: netbox/dcim/forms/bulk_import.py:669 netbox/dcim/forms/model_forms.py:640 +#: netbox/dcim/forms/bulk_import.py:674 netbox/dcim/forms/model_forms.py:651 msgid "Module bay" msgstr "Baie modulaire" -#: netbox/dcim/forms/bulk_import.py:672 +#: netbox/dcim/forms/bulk_import.py:677 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:678 +#: netbox/dcim/forms/bulk_import.py:683 msgid "The type of module" msgstr "Le type de module" -#: netbox/dcim/forms/bulk_import.py:686 netbox/dcim/forms/model_forms.py:656 +#: netbox/dcim/forms/bulk_import.py:691 netbox/dcim/forms/model_forms.py:667 msgid "Replicate components" msgstr "Répliquer les composants" -#: netbox/dcim/forms/bulk_import.py:688 +#: netbox/dcim/forms/bulk_import.py:693 msgid "" "Automatically populate components associated with this module type (enabled " "by default)" @@ -4386,270 +4782,308 @@ msgstr "" "Remplir automatiquement les composants associés à ce type de module (activé " "par défaut)" -#: netbox/dcim/forms/bulk_import.py:691 netbox/dcim/forms/model_forms.py:662 +#: netbox/dcim/forms/bulk_import.py:696 netbox/dcim/forms/model_forms.py:673 msgid "Adopt components" msgstr "Adoptez des composants" -#: netbox/dcim/forms/bulk_import.py:693 netbox/dcim/forms/model_forms.py:665 +#: netbox/dcim/forms/bulk_import.py:698 netbox/dcim/forms/model_forms.py:676 msgid "Adopt already existing components" msgstr "Adoptez des composants déjà existants" -#: netbox/dcim/forms/bulk_import.py:733 netbox/dcim/forms/bulk_import.py:759 -#: netbox/dcim/forms/bulk_import.py:785 +#: netbox/dcim/forms/bulk_import.py:738 netbox/dcim/forms/bulk_import.py:764 +#: netbox/dcim/forms/bulk_import.py:790 msgid "Port type" msgstr "Type de port" -#: netbox/dcim/forms/bulk_import.py:741 netbox/dcim/forms/bulk_import.py:767 +#: netbox/dcim/forms/bulk_import.py:746 netbox/dcim/forms/bulk_import.py:772 msgid "Port speed in bps" msgstr "Vitesse du port en bits/s" -#: netbox/dcim/forms/bulk_import.py:805 +#: netbox/dcim/forms/bulk_import.py:810 msgid "Outlet type" msgstr "Type de prise" -#: netbox/dcim/forms/bulk_import.py:812 +#: netbox/dcim/forms/bulk_import.py:817 msgid "Local power port which feeds this outlet" msgstr "Port d'alimentation local qui alimente cette prise" -#: netbox/dcim/forms/bulk_import.py:818 +#: netbox/dcim/forms/bulk_import.py:823 msgid "Electrical phase (for three-phase circuits)" msgstr "Phase électrique (pour circuits triphasés)" -#: netbox/dcim/forms/bulk_import.py:859 netbox/dcim/forms/model_forms.py:1323 -#: netbox/virtualization/forms/bulk_import.py:155 -#: netbox/virtualization/forms/model_forms.py:305 +#: netbox/dcim/forms/bulk_import.py:867 netbox/dcim/forms/model_forms.py:1339 +#: netbox/virtualization/forms/bulk_import.py:161 +#: netbox/virtualization/forms/model_forms.py:319 msgid "Parent interface" msgstr "Interface pour les parents" -#: netbox/dcim/forms/bulk_import.py:866 netbox/dcim/forms/model_forms.py:1331 -#: netbox/virtualization/forms/bulk_import.py:162 -#: netbox/virtualization/forms/model_forms.py:313 +#: netbox/dcim/forms/bulk_import.py:874 netbox/dcim/forms/model_forms.py:1347 +#: netbox/virtualization/forms/bulk_import.py:168 +#: netbox/virtualization/forms/model_forms.py:327 msgid "Bridged interface" msgstr "Interface switchée" -#: netbox/dcim/forms/bulk_import.py:869 +#: netbox/dcim/forms/bulk_import.py:877 msgid "Lag" msgstr "Lag" -#: netbox/dcim/forms/bulk_import.py:873 +#: netbox/dcim/forms/bulk_import.py:881 msgid "Parent LAG interface" msgstr "Interface LAG parent" -#: netbox/dcim/forms/bulk_import.py:876 +#: netbox/dcim/forms/bulk_import.py:884 msgid "Vdcs" msgstr "VDC" -#: netbox/dcim/forms/bulk_import.py:881 +#: netbox/dcim/forms/bulk_import.py:889 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:887 +#: netbox/dcim/forms/bulk_import.py:895 msgid "Physical medium" msgstr "Support physique" -#: netbox/dcim/forms/bulk_import.py:890 netbox/dcim/forms/filtersets.py:1365 +#: netbox/dcim/forms/bulk_import.py:898 netbox/dcim/forms/filtersets.py:1370 msgid "Duplex" msgstr "Duplex" -#: netbox/dcim/forms/bulk_import.py:895 +#: netbox/dcim/forms/bulk_import.py:903 msgid "Poe mode" msgstr "Mode PoE" -#: netbox/dcim/forms/bulk_import.py:901 +#: netbox/dcim/forms/bulk_import.py:909 msgid "Poe type" msgstr "Type de POE" -#: netbox/dcim/forms/bulk_import.py:910 -#: netbox/virtualization/forms/bulk_import.py:168 +#: netbox/dcim/forms/bulk_import.py:918 +#: netbox/virtualization/forms/bulk_import.py:174 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:917 netbox/ipam/forms/bulk_import.py:161 -#: netbox/ipam/forms/bulk_import.py:247 netbox/ipam/forms/bulk_import.py:283 -#: netbox/ipam/forms/filtersets.py:201 netbox/ipam/forms/filtersets.py:277 -#: netbox/ipam/forms/filtersets.py:336 -#: netbox/virtualization/forms/bulk_import.py:175 +#: netbox/dcim/forms/bulk_import.py:925 netbox/ipam/forms/bulk_import.py:164 +#: netbox/ipam/forms/bulk_import.py:246 netbox/ipam/forms/bulk_import.py:282 +#: netbox/ipam/forms/filtersets.py:203 netbox/ipam/forms/filtersets.py:280 +#: netbox/ipam/forms/filtersets.py:339 +#: netbox/virtualization/forms/bulk_import.py:181 msgid "Assigned VRF" msgstr "VRF attribué" -#: netbox/dcim/forms/bulk_import.py:920 +#: netbox/dcim/forms/bulk_import.py:928 msgid "Rf role" msgstr "Rôle RF" -#: netbox/dcim/forms/bulk_import.py:923 +#: netbox/dcim/forms/bulk_import.py:931 msgid "Wireless role (AP/station)" msgstr "Rôle sans fil (AP/station)" -#: netbox/dcim/forms/bulk_import.py:959 +#: netbox/dcim/forms/bulk_import.py:967 #, 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:973 netbox/dcim/forms/model_forms.py:1007 -#: netbox/dcim/forms/model_forms.py:1582 +#: netbox/dcim/forms/bulk_import.py:981 netbox/dcim/forms/model_forms.py:1020 +#: netbox/dcim/forms/model_forms.py:1624 #: netbox/dcim/forms/object_import.py:117 msgid "Rear port" msgstr "Port arrière" -#: netbox/dcim/forms/bulk_import.py:976 +#: netbox/dcim/forms/bulk_import.py:984 msgid "Corresponding rear port" msgstr "Port arrière correspondant" -#: netbox/dcim/forms/bulk_import.py:981 netbox/dcim/forms/bulk_import.py:1022 -#: netbox/dcim/forms/bulk_import.py:1238 +#: netbox/dcim/forms/bulk_import.py:989 netbox/dcim/forms/bulk_import.py:1030 +#: netbox/dcim/forms/bulk_import.py:1335 msgid "Physical medium classification" msgstr "Classification des supports physiques" -#: netbox/dcim/forms/bulk_import.py:1050 netbox/dcim/tables/devices.py:822 +#: netbox/dcim/forms/bulk_import.py:1058 netbox/dcim/tables/devices.py:854 msgid "Installed device" msgstr "Appareil installé" -#: netbox/dcim/forms/bulk_import.py:1054 +#: netbox/dcim/forms/bulk_import.py:1062 msgid "Child device installed within this bay" msgstr "Appareil pour enfant installé dans cette baie" -#: netbox/dcim/forms/bulk_import.py:1056 +#: netbox/dcim/forms/bulk_import.py:1064 msgid "Child device not found." msgstr "Appareil pour enfant introuvable." -#: netbox/dcim/forms/bulk_import.py:1114 +#: netbox/dcim/forms/bulk_import.py:1122 msgid "Parent inventory item" msgstr "Article d'inventaire parent" -#: netbox/dcim/forms/bulk_import.py:1117 +#: netbox/dcim/forms/bulk_import.py:1125 msgid "Component type" msgstr "Type de composant" -#: netbox/dcim/forms/bulk_import.py:1121 +#: netbox/dcim/forms/bulk_import.py:1129 msgid "Component Type" msgstr "Type de composant" -#: netbox/dcim/forms/bulk_import.py:1124 +#: netbox/dcim/forms/bulk_import.py:1132 msgid "Compnent name" msgstr "Nom du composant" -#: netbox/dcim/forms/bulk_import.py:1126 +#: netbox/dcim/forms/bulk_import.py:1134 msgid "Component Name" msgstr "Nom du composant" -#: netbox/dcim/forms/bulk_import.py:1168 +#: netbox/dcim/forms/bulk_import.py:1181 #, python-brace-format msgid "Component not found: {device} - {component_name}" msgstr "Composant introuvable : {device} - {component_name}" -#: netbox/dcim/forms/bulk_import.py:1193 +#: netbox/dcim/forms/bulk_import.py:1209 netbox/ipam/forms/bulk_import.py:307 +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:1212 netbox/ipam/forms/bulk_import.py:310 +#: netbox/ipam/forms/bulk_import.py:547 netbox/ipam/forms/model_forms.py:768 +#: netbox/virtualization/filtersets.py:254 +#: netbox/virtualization/filtersets.py:305 +#: netbox/virtualization/forms/bulk_edit.py:182 +#: netbox/virtualization/forms/bulk_edit.py:316 +#: netbox/virtualization/forms/bulk_import.py:152 +#: netbox/virtualization/forms/bulk_import.py:213 +#: netbox/virtualization/forms/filtersets.py:217 +#: netbox/virtualization/forms/filtersets.py:253 +#: netbox/virtualization/forms/model_forms.py:295 +#: netbox/vpn/forms/bulk_import.py:93 netbox/vpn/forms/bulk_import.py:290 +msgid "Virtual machine" +msgstr "Machine virtuelle" + +#: netbox/dcim/forms/bulk_import.py:1216 netbox/ipam/forms/bulk_import.py:314 +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:1223 netbox/ipam/filtersets.py:1021 +#: netbox/ipam/forms/bulk_import.py:321 +msgid "Assigned interface" +msgstr "Interface attribuée" + +#: netbox/dcim/forms/bulk_import.py:1226 netbox/ipam/forms/bulk_import.py:324 +msgid "Is primary" +msgstr "Est principal" + +#: netbox/dcim/forms/bulk_import.py:1227 +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:1264 +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:1290 msgid "Side A device" msgstr "Appareil côté A" -#: netbox/dcim/forms/bulk_import.py:1196 netbox/dcim/forms/bulk_import.py:1214 +#: netbox/dcim/forms/bulk_import.py:1293 netbox/dcim/forms/bulk_import.py:1311 msgid "Device name" msgstr "Nom de l'appareil" -#: netbox/dcim/forms/bulk_import.py:1199 +#: netbox/dcim/forms/bulk_import.py:1296 msgid "Side A type" msgstr "Côté A type" -#: netbox/dcim/forms/bulk_import.py:1202 netbox/dcim/forms/bulk_import.py:1220 -msgid "Termination type" -msgstr "Type de terminaison" - -#: netbox/dcim/forms/bulk_import.py:1205 +#: netbox/dcim/forms/bulk_import.py:1302 msgid "Side A name" msgstr "Nom de la face A" -#: netbox/dcim/forms/bulk_import.py:1206 netbox/dcim/forms/bulk_import.py:1224 +#: netbox/dcim/forms/bulk_import.py:1303 netbox/dcim/forms/bulk_import.py:1321 msgid "Termination name" msgstr "Nom de terminaison" -#: netbox/dcim/forms/bulk_import.py:1211 +#: netbox/dcim/forms/bulk_import.py:1308 msgid "Side B device" msgstr "Appareil Side B" -#: netbox/dcim/forms/bulk_import.py:1217 +#: netbox/dcim/forms/bulk_import.py:1314 msgid "Side B type" msgstr "Type de face B" -#: netbox/dcim/forms/bulk_import.py:1223 +#: netbox/dcim/forms/bulk_import.py:1320 msgid "Side B name" msgstr "Nom de la face B" -#: netbox/dcim/forms/bulk_import.py:1232 -#: netbox/wireless/forms/bulk_import.py:86 +#: netbox/dcim/forms/bulk_import.py:1329 +#: netbox/wireless/forms/bulk_import.py:91 msgid "Connection status" msgstr "État de la connexion" -#: netbox/dcim/forms/bulk_import.py:1284 +#: netbox/dcim/forms/bulk_import.py:1381 #, 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:1290 +#: netbox/dcim/forms/bulk_import.py:1387 #, 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:1315 netbox/dcim/forms/model_forms.py:785 -#: netbox/dcim/tables/devices.py:1027 netbox/templates/dcim/device.html:132 +#: netbox/dcim/forms/bulk_import.py:1412 netbox/dcim/forms/model_forms.py:797 +#: netbox/dcim/tables/devices.py:1059 netbox/templates/dcim/device.html:132 #: netbox/templates/dcim/virtualchassis.html:27 #: netbox/templates/dcim/virtualchassis.html:67 msgid "Master" msgstr "Maître" -#: netbox/dcim/forms/bulk_import.py:1319 +#: netbox/dcim/forms/bulk_import.py:1416 msgid "Master device" msgstr "Appareil principal" -#: netbox/dcim/forms/bulk_import.py:1336 +#: netbox/dcim/forms/bulk_import.py:1433 msgid "Name of parent site" msgstr "Nom du site parent" -#: netbox/dcim/forms/bulk_import.py:1370 +#: netbox/dcim/forms/bulk_import.py:1467 msgid "Upstream power panel" msgstr "Panneau d'alimentation en amont" -#: netbox/dcim/forms/bulk_import.py:1400 +#: netbox/dcim/forms/bulk_import.py:1497 msgid "Primary or redundant" msgstr "Principal ou redondant" -#: netbox/dcim/forms/bulk_import.py:1405 +#: netbox/dcim/forms/bulk_import.py:1502 msgid "Supply type (AC/DC)" msgstr "Type d'alimentation (AC/DC)" -#: netbox/dcim/forms/bulk_import.py:1410 +#: netbox/dcim/forms/bulk_import.py:1507 msgid "Single or three-phase" msgstr "Monophasé ou triphasé" -#: netbox/dcim/forms/bulk_import.py:1461 netbox/dcim/forms/model_forms.py:1677 +#: netbox/dcim/forms/bulk_import.py:1558 netbox/dcim/forms/model_forms.py:1722 #: netbox/templates/dcim/device.html:190 #: netbox/templates/dcim/virtualdevicecontext.html:30 #: netbox/templates/virtualization/virtualmachine.html:52 msgid "Primary IPv4" msgstr "IPv4 principal" -#: netbox/dcim/forms/bulk_import.py:1465 +#: netbox/dcim/forms/bulk_import.py:1562 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:1468 netbox/dcim/forms/model_forms.py:1686 +#: netbox/dcim/forms/bulk_import.py:1565 netbox/dcim/forms/model_forms.py:1731 #: netbox/templates/dcim/device.html:206 #: netbox/templates/dcim/virtualdevicecontext.html:41 #: netbox/templates/virtualization/virtualmachine.html:68 msgid "Primary IPv6" msgstr "IPv6 principal" -#: netbox/dcim/forms/bulk_import.py:1472 +#: netbox/dcim/forms/bulk_import.py:1569 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" -#: netbox/dcim/forms/common.py:24 netbox/dcim/models/device_components.py:527 +#: netbox/dcim/forms/common.py:19 netbox/dcim/models/device_components.py:515 #: netbox/templates/dcim/interface.html:57 -#: netbox/templates/virtualization/vminterface.html:55 -#: netbox/virtualization/forms/bulk_edit.py:225 +#: netbox/templates/virtualization/vminterface.html:51 +#: netbox/virtualization/forms/bulk_edit.py:207 msgid "MTU" msgstr "MTU" -#: netbox/dcim/forms/common.py:65 +#: netbox/dcim/forms/common.py:60 #, python-brace-format msgid "" "The tagged VLANs ({vlans}) must belong to the same site as the interface's " @@ -4659,7 +5093,7 @@ msgstr "" "l'appareil/la machine virtuelle parente de l'interface, ou ils doivent être " "globaux" -#: netbox/dcim/forms/common.py:126 +#: netbox/dcim/forms/common.py:121 msgid "" "Cannot install module with placeholder values in a module bay with no " "position defined." @@ -4667,7 +5101,7 @@ msgstr "" "Impossible d'installer le module avec des valeurs d'espace réservé dans une " "baie de modules dont aucune position n'est définie." -#: netbox/dcim/forms/common.py:131 +#: netbox/dcim/forms/common.py:127 #, python-brace-format msgid "" "Cannot install module with placeholder values in a module bay tree {level} " @@ -4677,18 +5111,18 @@ msgstr "" "arborescence de modules {level} dans un arbre mais {tokens} espaces réservés" " donnés." -#: netbox/dcim/forms/common.py:144 +#: netbox/dcim/forms/common.py:142 #, python-brace-format msgid "Cannot adopt {model} {name} as it already belongs to a module" msgstr "" "Impossible d'adopter {model} {name} car il appartient déjà à un module" -#: netbox/dcim/forms/common.py:153 +#: netbox/dcim/forms/common.py:151 #, python-brace-format msgid "A {model} named {name} already exists" msgstr "UN {model} nommé {name} existe déjà" -#: netbox/dcim/forms/connections.py:49 netbox/dcim/forms/model_forms.py:738 +#: netbox/dcim/forms/connections.py:49 netbox/dcim/forms/model_forms.py:749 #: netbox/dcim/tables/power.py:66 #: netbox/templates/dcim/inc/cable_termination.html:37 #: netbox/templates/dcim/powerfeed.html:24 @@ -4697,137 +5131,135 @@ msgstr "UN {model} nommé {name} existe déjà" msgid "Power Panel" msgstr "Panneau d'alimentation" -#: netbox/dcim/forms/connections.py:58 netbox/dcim/forms/model_forms.py:765 +#: netbox/dcim/forms/connections.py:58 netbox/dcim/forms/model_forms.py:777 #: netbox/templates/dcim/powerfeed.html:21 #: netbox/templates/dcim/powerport.html:80 msgid "Power Feed" msgstr "Alimentation" -#: netbox/dcim/forms/connections.py:81 -msgid "Side" -msgstr "Côté" - -#: netbox/dcim/forms/filtersets.py:136 netbox/dcim/tables/devices.py:295 +#: netbox/dcim/forms/filtersets.py:137 netbox/dcim/tables/devices.py:305 msgid "Device Status" msgstr "État de l'appareil" -#: netbox/dcim/forms/filtersets.py:149 +#: netbox/dcim/forms/filtersets.py:150 msgid "Parent region" msgstr "Région parente" -#: netbox/dcim/forms/filtersets.py:163 netbox/tenancy/forms/bulk_import.py:28 +#: netbox/dcim/forms/filtersets.py:164 netbox/tenancy/forms/bulk_import.py:28 #: netbox/tenancy/forms/bulk_import.py:62 #: netbox/tenancy/forms/filtersets.py:33 netbox/tenancy/forms/filtersets.py:62 -#: netbox/wireless/forms/bulk_import.py:25 -#: netbox/wireless/forms/filtersets.py:25 +#: netbox/wireless/forms/bulk_import.py:27 +#: netbox/wireless/forms/filtersets.py:27 msgid "Parent group" msgstr "Groupe de parents" -#: netbox/dcim/forms/filtersets.py:242 netbox/templates/dcim/location.html:58 +#: netbox/dcim/forms/filtersets.py:243 netbox/templates/dcim/location.html:58 #: netbox/templates/dcim/site.html:56 msgid "Facility" msgstr "Datacentre" -#: netbox/dcim/forms/filtersets.py:397 +#: netbox/dcim/forms/filtersets.py:398 msgid "Function" msgstr "Fonction" -#: netbox/dcim/forms/filtersets.py:483 netbox/dcim/forms/model_forms.py:373 +#: netbox/dcim/forms/filtersets.py:484 netbox/dcim/forms/model_forms.py:382 #: netbox/templates/inc/panels/image_attachments.html:6 msgid "Images" msgstr "Des images" -#: netbox/dcim/forms/filtersets.py:486 netbox/dcim/forms/filtersets.py:611 -#: netbox/dcim/forms/filtersets.py:726 +#: netbox/dcim/forms/filtersets.py:487 netbox/dcim/forms/filtersets.py:612 +#: netbox/dcim/forms/filtersets.py:727 msgid "Components" msgstr "Composantes" -#: netbox/dcim/forms/filtersets.py:506 +#: netbox/dcim/forms/filtersets.py:507 msgid "Subdevice role" msgstr "Rôle du sous-appareil" -#: netbox/dcim/forms/filtersets.py:790 netbox/dcim/tables/racks.py:54 +#: netbox/dcim/forms/filtersets.py:791 netbox/dcim/tables/racks.py:54 #: netbox/templates/dcim/racktype.html:20 msgid "Model" msgstr "Modèle" -#: netbox/dcim/forms/filtersets.py:834 +#: netbox/dcim/forms/filtersets.py:835 msgid "Has an OOB IP" msgstr "Possède une adresse IP OOB" -#: netbox/dcim/forms/filtersets.py:841 +#: netbox/dcim/forms/filtersets.py:842 msgid "Virtual chassis member" msgstr "Membre virtuel du châssis" -#: netbox/dcim/forms/filtersets.py:890 +#: netbox/dcim/forms/filtersets.py:891 msgid "Has virtual device contexts" msgstr "Possède des contextes de périphériques virtuels" -#: netbox/dcim/forms/filtersets.py:903 netbox/extras/filtersets.py:585 -#: netbox/ipam/forms/filtersets.py:452 -#: netbox/virtualization/forms/filtersets.py:112 +#: netbox/dcim/forms/filtersets.py:904 netbox/extras/filtersets.py:585 +#: netbox/ipam/forms/filtersets.py:455 +#: netbox/virtualization/forms/filtersets.py:117 msgid "Cluster group" msgstr "Groupe de clusters" -#: netbox/dcim/forms/filtersets.py:1210 +#: netbox/dcim/forms/filtersets.py:1211 msgid "Cabled" msgstr "câblé" -#: netbox/dcim/forms/filtersets.py:1217 +#: netbox/dcim/forms/filtersets.py:1218 msgid "Occupied" msgstr "Occupé" -#: netbox/dcim/forms/filtersets.py:1244 netbox/dcim/forms/filtersets.py:1269 -#: netbox/dcim/forms/filtersets.py:1293 netbox/dcim/forms/filtersets.py:1313 -#: netbox/dcim/forms/filtersets.py:1336 netbox/dcim/tables/devices.py:364 +#: netbox/dcim/forms/filtersets.py:1245 netbox/dcim/forms/filtersets.py:1270 +#: netbox/dcim/forms/filtersets.py:1294 netbox/dcim/forms/filtersets.py:1314 +#: netbox/dcim/forms/filtersets.py:1341 netbox/dcim/tables/devices.py:374 +#: netbox/dcim/tables/devices.py:663 +#: netbox/templates/circuits/inc/circuit_termination_fields.html:16 #: netbox/templates/dcim/consoleport.html:55 #: netbox/templates/dcim/consoleserverport.html:55 #: netbox/templates/dcim/frontport.html:69 -#: netbox/templates/dcim/interface.html:140 +#: netbox/templates/dcim/interface.html:197 #: netbox/templates/dcim/powerfeed.html:110 -#: netbox/templates/dcim/poweroutlet.html:59 +#: netbox/templates/dcim/poweroutlet.html:69 #: netbox/templates/dcim/powerport.html:59 #: netbox/templates/dcim/rearport.html:65 msgid "Connection" msgstr "Connexion" -#: netbox/dcim/forms/filtersets.py:1348 netbox/extras/forms/bulk_edit.py:326 +#: netbox/dcim/forms/filtersets.py:1353 netbox/extras/forms/bulk_edit.py:326 #: netbox/extras/forms/bulk_import.py:247 -#: netbox/extras/forms/filtersets.py:464 -#: netbox/extras/forms/model_forms.py:675 netbox/extras/tables/tables.py:579 +#: netbox/extras/forms/filtersets.py:472 +#: netbox/extras/forms/model_forms.py:689 netbox/extras/tables/tables.py:579 #: netbox/templates/extras/journalentry.html:30 msgid "Kind" msgstr "Type" -#: netbox/dcim/forms/filtersets.py:1377 +#: netbox/dcim/forms/filtersets.py:1382 msgid "Mgmt only" msgstr "Gestion uniquement" -#: netbox/dcim/forms/filtersets.py:1389 netbox/dcim/forms/model_forms.py:1390 -#: netbox/dcim/models/device_components.py:629 -#: netbox/templates/dcim/interface.html:129 +#: netbox/dcim/forms/filtersets.py:1394 netbox/dcim/forms/model_forms.py:1423 +#: netbox/dcim/models/device_components.py:677 +#: netbox/templates/dcim/interface.html:142 msgid "WWN" msgstr "WWN" -#: netbox/dcim/forms/filtersets.py:1409 +#: netbox/dcim/forms/filtersets.py:1414 msgid "Wireless channel" msgstr "Canal sans fil" -#: netbox/dcim/forms/filtersets.py:1413 +#: netbox/dcim/forms/filtersets.py:1418 msgid "Channel frequency (MHz)" msgstr "Fréquence du canal (MHz)" -#: netbox/dcim/forms/filtersets.py:1417 +#: netbox/dcim/forms/filtersets.py:1422 msgid "Channel width (MHz)" msgstr "Largeur du canal (MHz)" -#: netbox/dcim/forms/filtersets.py:1421 -#: netbox/templates/dcim/interface.html:85 +#: netbox/dcim/forms/filtersets.py:1426 +#: netbox/templates/dcim/interface.html:91 msgid "Transmit power (dBm)" msgstr "Puissance de transmission (dBm)" -#: netbox/dcim/forms/filtersets.py:1446 netbox/dcim/forms/filtersets.py:1471 -#: netbox/dcim/tables/devices.py:327 netbox/templates/dcim/cable.html:12 +#: netbox/dcim/forms/filtersets.py:1451 netbox/dcim/forms/filtersets.py:1476 +#: netbox/dcim/tables/devices.py:337 netbox/templates/dcim/cable.html:12 #: netbox/templates/dcim/cable_trace.html:46 #: netbox/templates/dcim/frontport.html:77 #: netbox/templates/dcim/htmx/cable_edit.html:50 @@ -4837,40 +5269,77 @@ msgstr "Puissance de transmission (dBm)" msgid "Cable" msgstr "câble" -#: netbox/dcim/forms/filtersets.py:1550 netbox/dcim/tables/devices.py:949 +#: netbox/dcim/forms/filtersets.py:1555 netbox/dcim/tables/devices.py:979 msgid "Discovered" msgstr "Découvert" +#: netbox/dcim/forms/filtersets.py:1596 netbox/ipam/forms/filtersets.py:350 +msgid "Assigned Device" +msgstr "Appareil attribué" + +#: netbox/dcim/forms/filtersets.py:1601 netbox/ipam/forms/filtersets.py:355 +msgid "Assigned VM" +msgstr "Machine virtuelle attribuée" + #: netbox/dcim/forms/formsets.py:20 #, python-brace-format msgid "A virtual chassis member already exists in position {vc_position}." msgstr "Un élément de châssis virtuel existe déjà en place {vc_position}." -#: netbox/dcim/forms/model_forms.py:140 +#: netbox/dcim/forms/mixins.py:27 netbox/dcim/forms/mixins.py:75 +#: netbox/ipam/forms/bulk_edit.py:420 netbox/ipam/forms/model_forms.py:618 +msgid "Scope type" +msgstr "Type de portée" + +#: netbox/dcim/forms/mixins.py:30 netbox/dcim/forms/mixins.py:78 +#: netbox/ipam/forms/bulk_edit.py:270 netbox/ipam/forms/bulk_edit.py:423 +#: netbox/ipam/forms/bulk_edit.py:437 netbox/ipam/forms/filtersets.py:175 +#: netbox/ipam/forms/model_forms.py:231 netbox/ipam/forms/model_forms.py:621 +#: netbox/ipam/forms/model_forms.py:631 netbox/ipam/tables/ip.py:194 +#: netbox/ipam/tables/vlans.py:40 netbox/templates/ipam/prefix.html:48 +#: netbox/templates/ipam/vlangroup.html:38 +#: netbox/templates/virtualization/cluster.html:42 +#: netbox/templates/wireless/wirelesslan.html:26 +#: netbox/virtualization/forms/bulk_edit.py:91 +#: netbox/virtualization/forms/filtersets.py:46 +#: netbox/virtualization/forms/model_forms.py:79 +#: netbox/virtualization/tables/clusters.py:80 +#: netbox/wireless/forms/bulk_edit.py:93 +#: netbox/wireless/forms/filtersets.py:37 +#: netbox/wireless/forms/model_forms.py:56 +#: netbox/wireless/tables/wirelesslan.py:58 +msgid "Scope" +msgstr "Champ" + +#: netbox/dcim/forms/mixins.py:104 netbox/ipam/forms/bulk_import.py:436 +msgid "Scope type (app & model)" +msgstr "Type de scope (application et modèle)" + +#: netbox/dcim/forms/model_forms.py:144 msgid "Contact Info" msgstr "Informations de contact" -#: netbox/dcim/forms/model_forms.py:195 netbox/templates/dcim/rackrole.html:19 +#: netbox/dcim/forms/model_forms.py:199 netbox/templates/dcim/rackrole.html:19 msgid "Rack Role" msgstr "Role de la baie" -#: netbox/dcim/forms/model_forms.py:212 netbox/dcim/forms/model_forms.py:362 -#: netbox/dcim/forms/model_forms.py:446 +#: netbox/dcim/forms/model_forms.py:217 netbox/dcim/forms/model_forms.py:371 +#: netbox/dcim/forms/model_forms.py:456 #: netbox/utilities/forms/fields/fields.py:47 msgid "Slug" msgstr "Identifiant" -#: netbox/dcim/forms/model_forms.py:259 +#: netbox/dcim/forms/model_forms.py:264 msgid "Select a pre-defined rack type, or set physical characteristics below." msgstr "" "Sélectionnez un type de baie prédéfini ou définissez les caractéristiques " "physiques ci-dessous." -#: netbox/dcim/forms/model_forms.py:265 +#: netbox/dcim/forms/model_forms.py:273 msgid "Inventory Control" msgstr "Contrôle des stocks" -#: netbox/dcim/forms/model_forms.py:313 +#: netbox/dcim/forms/model_forms.py:321 msgid "" "Comma-separated list of numeric unit IDs. A range may be specified using a " "hyphen." @@ -4878,37 +5347,37 @@ msgstr "" "Liste d'identifiants d'unités numériques séparés par des virgules. Une plage" " peut être spécifiée à l'aide d'un trait d'union." -#: netbox/dcim/forms/model_forms.py:322 netbox/dcim/tables/racks.py:202 +#: netbox/dcim/forms/model_forms.py:330 netbox/dcim/tables/racks.py:201 msgid "Reservation" msgstr "Réservation" -#: netbox/dcim/forms/model_forms.py:423 +#: netbox/dcim/forms/model_forms.py:432 #: netbox/templates/dcim/devicerole.html:23 msgid "Device Role" msgstr "Rôle de l'appareil" -#: netbox/dcim/forms/model_forms.py:490 netbox/dcim/models/devices.py:644 +#: netbox/dcim/forms/model_forms.py:500 netbox/dcim/models/devices.py:635 msgid "The lowest-numbered unit occupied by the device" msgstr "L'unité la moins numérotée occupée par l'appareil" -#: netbox/dcim/forms/model_forms.py:547 +#: netbox/dcim/forms/model_forms.py:558 msgid "The position in the virtual chassis this device is identified by" msgstr "" "La position dans le châssis virtuel par laquelle cet appareil est identifié" -#: netbox/dcim/forms/model_forms.py:552 +#: netbox/dcim/forms/model_forms.py:563 msgid "The priority of the device in the virtual chassis" msgstr "La priorité de l'appareil dans le châssis virtuel" -#: netbox/dcim/forms/model_forms.py:659 +#: netbox/dcim/forms/model_forms.py:670 msgid "Automatically populate components associated with this module type" msgstr "Remplir automatiquement les composants associés à ce type de module" -#: netbox/dcim/forms/model_forms.py:767 +#: netbox/dcim/forms/model_forms.py:779 msgid "Characteristics" msgstr "Caractéristiques" -#: netbox/dcim/forms/model_forms.py:914 +#: netbox/dcim/forms/model_forms.py:926 #, python-brace-format msgid "" "Alphanumeric ranges are supported for bulk creation. Mixed cases and types " @@ -4923,60 +5392,35 @@ msgstr "" "{module}, s'il est présent, sera automatiquement remplacé par " "la valeur de position lors de la création d'un nouveau module." -#: netbox/dcim/forms/model_forms.py:1094 +#: netbox/dcim/forms/model_forms.py:1107 msgid "Console port template" msgstr "Modèle de port de console" -#: netbox/dcim/forms/model_forms.py:1102 +#: netbox/dcim/forms/model_forms.py:1115 msgid "Console server port template" msgstr "Modèle de port de serveur de console" -#: netbox/dcim/forms/model_forms.py:1110 +#: netbox/dcim/forms/model_forms.py:1123 msgid "Front port template" msgstr "Modèle de port avant" -#: netbox/dcim/forms/model_forms.py:1118 +#: netbox/dcim/forms/model_forms.py:1131 msgid "Interface template" msgstr "Modèle d'interface" -#: netbox/dcim/forms/model_forms.py:1126 +#: netbox/dcim/forms/model_forms.py:1139 msgid "Power outlet template" msgstr "Modèle de prise de courant" -#: netbox/dcim/forms/model_forms.py:1134 +#: netbox/dcim/forms/model_forms.py:1147 msgid "Power port template" msgstr "Modèle de port d'alimentation" -#: netbox/dcim/forms/model_forms.py:1142 +#: netbox/dcim/forms/model_forms.py:1155 msgid "Rear port template" msgstr "Modèle de port arrière" -#: netbox/dcim/forms/model_forms.py:1151 netbox/dcim/forms/model_forms.py:1395 -#: netbox/dcim/forms/model_forms.py:1558 netbox/dcim/forms/model_forms.py:1590 -#: netbox/dcim/tables/connections.py:65 netbox/ipam/forms/bulk_import.py:318 -#: netbox/ipam/forms/model_forms.py:280 netbox/ipam/forms/model_forms.py:289 -#: netbox/ipam/tables/fhrp.py:64 netbox/ipam/tables/ip.py:372 -#: netbox/ipam/tables/vlans.py:169 -#: netbox/templates/circuits/inc/circuit_termination_fields.html:51 -#: netbox/templates/dcim/frontport.html:106 -#: netbox/templates/dcim/interface.html:27 -#: netbox/templates/dcim/interface.html:184 -#: netbox/templates/dcim/interface.html:310 -#: netbox/templates/dcim/rearport.html:102 -#: netbox/templates/virtualization/vminterface.html:18 -#: netbox/templates/vpn/tunneltermination.html:31 -#: netbox/templates/wireless/inc/wirelesslink_interface.html:10 -#: netbox/templates/wireless/wirelesslink.html:10 -#: netbox/templates/wireless/wirelesslink.html:55 -#: netbox/virtualization/forms/model_forms.py:348 -#: netbox/vpn/forms/bulk_import.py:297 netbox/vpn/forms/model_forms.py:436 -#: netbox/vpn/forms/model_forms.py:445 -#: netbox/wireless/forms/model_forms.py:113 -#: netbox/wireless/forms/model_forms.py:155 -msgid "Interface" -msgstr "Interface" - -#: netbox/dcim/forms/model_forms.py:1152 netbox/dcim/forms/model_forms.py:1591 +#: netbox/dcim/forms/model_forms.py:1165 netbox/dcim/forms/model_forms.py:1636 #: netbox/dcim/tables/connections.py:27 #: netbox/templates/dcim/consoleport.html:17 #: netbox/templates/dcim/consoleserverport.html:74 @@ -4984,71 +5428,71 @@ msgstr "Interface" msgid "Console Port" msgstr "Port de console" -#: netbox/dcim/forms/model_forms.py:1153 netbox/dcim/forms/model_forms.py:1592 +#: netbox/dcim/forms/model_forms.py:1166 netbox/dcim/forms/model_forms.py:1637 #: netbox/templates/dcim/consoleport.html:73 #: netbox/templates/dcim/consoleserverport.html:17 #: netbox/templates/dcim/frontport.html:109 msgid "Console Server Port" msgstr "Port du serveur de consoles" -#: netbox/dcim/forms/model_forms.py:1154 netbox/dcim/forms/model_forms.py:1593 -#: netbox/templates/circuits/inc/circuit_termination_fields.html:52 +#: netbox/dcim/forms/model_forms.py:1167 netbox/dcim/forms/model_forms.py:1638 +#: netbox/templates/circuits/inc/circuit_termination_fields.html:53 #: netbox/templates/dcim/consoleport.html:76 #: netbox/templates/dcim/consoleserverport.html:77 #: netbox/templates/dcim/frontport.html:17 #: netbox/templates/dcim/frontport.html:115 -#: netbox/templates/dcim/interface.html:187 +#: netbox/templates/dcim/interface.html:244 #: netbox/templates/dcim/rearport.html:105 msgid "Front Port" msgstr "Port avant" -#: netbox/dcim/forms/model_forms.py:1155 netbox/dcim/forms/model_forms.py:1594 -#: netbox/dcim/tables/devices.py:710 -#: netbox/templates/circuits/inc/circuit_termination_fields.html:53 +#: netbox/dcim/forms/model_forms.py:1168 netbox/dcim/forms/model_forms.py:1639 +#: netbox/dcim/tables/devices.py:744 +#: netbox/templates/circuits/inc/circuit_termination_fields.html:54 #: netbox/templates/dcim/consoleport.html:79 #: netbox/templates/dcim/consoleserverport.html:80 #: netbox/templates/dcim/frontport.html:50 #: netbox/templates/dcim/frontport.html:118 -#: netbox/templates/dcim/interface.html:190 +#: netbox/templates/dcim/interface.html:247 #: netbox/templates/dcim/rearport.html:17 #: netbox/templates/dcim/rearport.html:108 msgid "Rear Port" msgstr "Port arrière" -#: netbox/dcim/forms/model_forms.py:1156 netbox/dcim/forms/model_forms.py:1595 -#: netbox/dcim/tables/connections.py:46 netbox/dcim/tables/devices.py:512 -#: netbox/templates/dcim/poweroutlet.html:44 +#: netbox/dcim/forms/model_forms.py:1169 netbox/dcim/forms/model_forms.py:1640 +#: netbox/dcim/tables/connections.py:46 netbox/dcim/tables/devices.py:521 +#: netbox/templates/dcim/poweroutlet.html:54 #: netbox/templates/dcim/powerport.html:17 msgid "Power Port" msgstr "Port d'alimentation" -#: netbox/dcim/forms/model_forms.py:1157 netbox/dcim/forms/model_forms.py:1596 +#: netbox/dcim/forms/model_forms.py:1170 netbox/dcim/forms/model_forms.py:1641 #: netbox/templates/dcim/poweroutlet.html:17 #: netbox/templates/dcim/powerport.html:77 msgid "Power Outlet" msgstr "Prise de courant" -#: netbox/dcim/forms/model_forms.py:1159 netbox/dcim/forms/model_forms.py:1598 +#: netbox/dcim/forms/model_forms.py:1172 netbox/dcim/forms/model_forms.py:1643 msgid "Component Assignment" msgstr "Affectation des composants" -#: netbox/dcim/forms/model_forms.py:1202 netbox/dcim/forms/model_forms.py:1645 +#: netbox/dcim/forms/model_forms.py:1218 netbox/dcim/forms/model_forms.py:1690 msgid "An InventoryItem can only be assigned to a single component." msgstr "Un item d'inventaire ne peut être attribué qu'à un seul composant." -#: netbox/dcim/forms/model_forms.py:1339 +#: netbox/dcim/forms/model_forms.py:1355 msgid "LAG interface" msgstr "Interface LAG" -#: netbox/dcim/forms/model_forms.py:1362 +#: netbox/dcim/forms/model_forms.py:1378 msgid "Filter VLANs available for assignment by group." msgstr "Filtrez les VLAN disponibles pour une attribution par groupe." -#: netbox/dcim/forms/model_forms.py:1491 +#: netbox/dcim/forms/model_forms.py:1533 msgid "Child Device" msgstr "Appareil pour enfants" -#: netbox/dcim/forms/model_forms.py:1492 +#: netbox/dcim/forms/model_forms.py:1534 msgid "" "Child devices must first be created and assigned to the site and rack of the" " parent device." @@ -5056,32 +5500,58 @@ msgstr "" "Les appareils enfants doivent d'abord être créés et affectés au site et à la" " baie de l'appareil parent." -#: netbox/dcim/forms/model_forms.py:1534 +#: netbox/dcim/forms/model_forms.py:1576 msgid "Console port" msgstr "Port de console" -#: netbox/dcim/forms/model_forms.py:1542 +#: netbox/dcim/forms/model_forms.py:1584 msgid "Console server port" msgstr "Port du serveur de console" -#: netbox/dcim/forms/model_forms.py:1550 +#: netbox/dcim/forms/model_forms.py:1592 msgid "Front port" msgstr "Port avant" -#: netbox/dcim/forms/model_forms.py:1566 +#: netbox/dcim/forms/model_forms.py:1608 msgid "Power outlet" msgstr "prise de courant" -#: netbox/dcim/forms/model_forms.py:1586 +#: netbox/dcim/forms/model_forms.py:1630 #: netbox/templates/dcim/inventoryitem.html:17 msgid "Inventory Item" msgstr "Article d'inventaire" -#: netbox/dcim/forms/model_forms.py:1659 +#: netbox/dcim/forms/model_forms.py:1704 #: netbox/templates/dcim/inventoryitemrole.html:15 msgid "Inventory Item Role" msgstr "Rôle de l'article d'inventaire" +#: netbox/dcim/forms/model_forms.py:1773 +msgid "VM Interface" +msgstr "Interface de machine virtuelle" + +#: netbox/dcim/forms/model_forms.py:1788 netbox/ipam/forms/filtersets.py:608 +#: netbox/ipam/forms/model_forms.py:334 netbox/ipam/forms/model_forms.py:796 +#: netbox/ipam/forms/model_forms.py:822 netbox/ipam/tables/vlans.py:171 +#: netbox/templates/virtualization/virtualdisk.html:21 +#: netbox/templates/virtualization/virtualmachine.html:12 +#: netbox/templates/virtualization/vminterface.html:21 +#: netbox/templates/vpn/tunneltermination.html:25 +#: netbox/virtualization/forms/filtersets.py:202 +#: netbox/virtualization/forms/filtersets.py:247 +#: netbox/virtualization/forms/model_forms.py:227 +#: netbox/virtualization/tables/virtualmachines.py:105 +#: netbox/virtualization/tables/virtualmachines.py:161 +#: netbox/vpn/choices.py:53 netbox/vpn/forms/filtersets.py:293 +#: netbox/vpn/forms/model_forms.py:161 netbox/vpn/forms/model_forms.py:172 +#: netbox/vpn/forms/model_forms.py:274 netbox/vpn/forms/model_forms.py:457 +msgid "Virtual Machine" +msgstr "Machine virtuelle" + +#: netbox/dcim/forms/model_forms.py:1827 +msgid "A MAC address can only be assigned to a single object." +msgstr "Une adresse MAC ne peut être attribuée qu'à un seul objet." + #: netbox/dcim/forms/object_create.py:48 #: netbox/dcim/forms/object_create.py:199 #: netbox/dcim/forms/object_create.py:347 @@ -5102,7 +5572,7 @@ msgstr "" "sont attendus." #: netbox/dcim/forms/object_create.py:110 -#: netbox/dcim/forms/object_create.py:263 netbox/dcim/tables/devices.py:252 +#: netbox/dcim/forms/object_create.py:263 netbox/dcim/tables/devices.py:263 msgid "Rear ports" msgstr "Ports arrière" @@ -5130,7 +5600,7 @@ msgstr "" "Le nombre de ports frontaux à créer ({frontport_count}) doit correspondre au" " nombre sélectionné de positions des ports arrière ({rearport_count})." -#: netbox/dcim/forms/object_create.py:401 netbox/dcim/tables/devices.py:1033 +#: netbox/dcim/forms/object_create.py:401 netbox/dcim/tables/devices.py:1065 #: netbox/ipam/tables/fhrp.py:31 netbox/templates/dcim/virtualchassis.html:53 #: netbox/templates/dcim/virtualchassis_edit.html:47 #: netbox/templates/ipam/fhrpgroup.html:38 @@ -5149,30 +5619,30 @@ msgstr "" "Position du premier dispositif membre. Augmente d'une unité pour chaque " "membre supplémentaire." -#: netbox/dcim/forms/object_create.py:427 +#: netbox/dcim/forms/object_create.py:428 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/cables.py:62 -#: netbox/dcim/models/device_component_templates.py:55 -#: netbox/dcim/models/device_components.py:62 +#: netbox/dcim/models/cables.py:64 +#: netbox/dcim/models/device_component_templates.py:51 +#: netbox/dcim/models/device_components.py:57 #: netbox/extras/models/customfields.py:111 msgid "label" msgstr "étiquette" -#: netbox/dcim/models/cables.py:71 +#: netbox/dcim/models/cables.py:73 msgid "length" msgstr "longueur" -#: netbox/dcim/models/cables.py:78 +#: netbox/dcim/models/cables.py:80 msgid "length unit" msgstr "unité de longueur" -#: netbox/dcim/models/cables.py:95 +#: netbox/dcim/models/cables.py:98 msgid "cable" msgstr "câble" -#: netbox/dcim/models/cables.py:96 +#: netbox/dcim/models/cables.py:99 msgid "cables" msgstr "câbles" @@ -5202,19 +5672,19 @@ msgstr "Types de terminaison incompatibles : {type_a} et {type_b}" msgid "A and B terminations cannot connect to the same object." msgstr "Les terminaisons A et B ne peuvent pas se connecter au même objet." -#: netbox/dcim/models/cables.py:260 netbox/ipam/models/asns.py:37 +#: netbox/dcim/models/cables.py:262 netbox/ipam/models/asns.py:37 msgid "end" msgstr "fin" -#: netbox/dcim/models/cables.py:313 +#: netbox/dcim/models/cables.py:315 msgid "cable termination" msgstr "terminaison de câble" -#: netbox/dcim/models/cables.py:314 +#: netbox/dcim/models/cables.py:316 msgid "cable terminations" msgstr "terminaisons de câble" -#: netbox/dcim/models/cables.py:333 +#: netbox/dcim/models/cables.py:335 #, python-brace-format msgid "" "Duplicate termination found for {app_label}.{model} {termination_id}: cable " @@ -5223,37 +5693,71 @@ msgstr "" "Un doublon de terminaison a été trouvé pour {app_label}.{model} " "{termination_id}: câble {cable_pk}" -#: netbox/dcim/models/cables.py:343 +#: netbox/dcim/models/cables.py:345 #, python-brace-format msgid "Cables cannot be terminated to {type_display} interfaces" msgstr "Les câbles ne peuvent pas être raccordés à {type_display} interfaces" -#: netbox/dcim/models/cables.py:350 +#: netbox/dcim/models/cables.py:352 msgid "Circuit terminations attached to a provider network may not be cabled." msgstr "" "Les terminaisons de circuit connectées au réseau d'un fournisseur peuvent ne" " pas être câblées." -#: netbox/dcim/models/cables.py:448 netbox/extras/models/configs.py:50 +#: netbox/dcim/models/cables.py:450 netbox/extras/models/configs.py:50 msgid "is active" msgstr "est actif" -#: netbox/dcim/models/cables.py:452 +#: netbox/dcim/models/cables.py:454 msgid "is complete" msgstr "est terminé" -#: netbox/dcim/models/cables.py:456 +#: netbox/dcim/models/cables.py:458 msgid "is split" msgstr "est divisé" -#: netbox/dcim/models/cables.py:464 +#: netbox/dcim/models/cables.py:466 msgid "cable path" msgstr "chemin de câble" -#: netbox/dcim/models/cables.py:465 +#: netbox/dcim/models/cables.py:467 msgid "cable paths" msgstr "chemins de câbles" +#: netbox/dcim/models/cables.py:539 +msgid "All originating terminations must be attached to the same link" +msgstr "Toutes les terminaisons d'origine doivent être jointes au même lien" + +#: netbox/dcim/models/cables.py:551 +msgid "All mid-span terminations must have the same termination type" +msgstr "" +"Toutes les terminaisons à mi-distance doivent avoir le même type de " +"terminaison" + +#: netbox/dcim/models/cables.py:556 +msgid "All mid-span terminations must have the same parent object" +msgstr "" +"Toutes les terminaisons à mi-travée doivent avoir le même objet parent" + +#: netbox/dcim/models/cables.py:580 +msgid "All links must be cable or wireless" +msgstr "Toutes les liaisons doivent être câblées ou sans fil" + +#: netbox/dcim/models/cables.py:582 +msgid "All links must match first link type" +msgstr "Tous les liens doivent correspondre au premier type de lien" + +#: netbox/dcim/models/cables.py:665 +msgid "" +"All positions counts within the path on opposite ends of links must match" +msgstr "" +"Toutes les positions dénombrées dans le chemin aux extrémités opposées des " +"liens doivent correspondre" + +#: netbox/dcim/models/cables.py:674 +msgid "Remote termination position filter is missing" +msgstr "Le filtre de position de terminaison à distance est manquant" + #: netbox/dcim/models/device_component_templates.py:46 #, python-brace-format msgid "" @@ -5263,18 +5767,18 @@ msgstr "" "{module} est accepté en remplacement de la position de la baie du module " "lorsqu'il est fixé à un type de module." -#: netbox/dcim/models/device_component_templates.py:58 -#: netbox/dcim/models/device_components.py:65 +#: netbox/dcim/models/device_component_templates.py:54 +#: netbox/dcim/models/device_components.py:60 msgid "Physical label" msgstr "Etiquette physique" -#: netbox/dcim/models/device_component_templates.py:103 +#: netbox/dcim/models/device_component_templates.py:99 msgid "Component templates cannot be moved to a different device type." msgstr "" "Les modèles de composants ne peuvent pas être déplacés vers un autre type " "d'appareil." -#: netbox/dcim/models/device_component_templates.py:154 +#: netbox/dcim/models/device_component_templates.py:150 msgid "" "A component template cannot be associated with both a device type and a " "module type." @@ -5282,7 +5786,7 @@ msgstr "" "Un modèle de composant ne peut pas être associé à la fois à un type " "d'appareil et à un type de module." -#: netbox/dcim/models/device_component_templates.py:158 +#: netbox/dcim/models/device_component_templates.py:154 msgid "" "A component template must be associated with either a device type or a " "module type." @@ -5290,137 +5794,137 @@ msgstr "" "Un modèle de composant doit être associé à un type d'appareil ou à un type " "de module." -#: netbox/dcim/models/device_component_templates.py:212 +#: netbox/dcim/models/device_component_templates.py:209 msgid "console port template" msgstr "modèle de port de console" -#: netbox/dcim/models/device_component_templates.py:213 +#: netbox/dcim/models/device_component_templates.py:210 msgid "console port templates" msgstr "modèles de ports de console" -#: netbox/dcim/models/device_component_templates.py:246 +#: netbox/dcim/models/device_component_templates.py:244 msgid "console server port template" msgstr "modèle de port de serveur de console" -#: netbox/dcim/models/device_component_templates.py:247 +#: netbox/dcim/models/device_component_templates.py:245 msgid "console server port templates" msgstr "modèles de ports de serveur de console" -#: netbox/dcim/models/device_component_templates.py:278 -#: netbox/dcim/models/device_components.py:352 +#: netbox/dcim/models/device_component_templates.py:277 +#: netbox/dcim/models/device_components.py:345 msgid "maximum draw" msgstr "tirage maximum" -#: netbox/dcim/models/device_component_templates.py:285 -#: netbox/dcim/models/device_components.py:359 +#: netbox/dcim/models/device_component_templates.py:284 +#: netbox/dcim/models/device_components.py:352 msgid "allocated draw" msgstr "tirage au sort alloué" -#: netbox/dcim/models/device_component_templates.py:295 +#: netbox/dcim/models/device_component_templates.py:294 msgid "power port template" msgstr "modèle de port d'alimentation" -#: netbox/dcim/models/device_component_templates.py:296 +#: netbox/dcim/models/device_component_templates.py:295 msgid "power port templates" msgstr "modèles de ports d'alimentation" #: netbox/dcim/models/device_component_templates.py:315 -#: netbox/dcim/models/device_components.py:382 +#: netbox/dcim/models/device_components.py:372 #, python-brace-format msgid "Allocated draw cannot exceed the maximum draw ({maximum_draw}W)." msgstr "" "Le tirage alloué ne peut pas dépasser le tirage maximum ({maximum_draw}W)." -#: netbox/dcim/models/device_component_templates.py:347 -#: netbox/dcim/models/device_components.py:477 +#: netbox/dcim/models/device_component_templates.py:349 +#: netbox/dcim/models/device_components.py:468 msgid "feed leg" msgstr "patte d'alimentation" -#: netbox/dcim/models/device_component_templates.py:351 -#: netbox/dcim/models/device_components.py:481 +#: netbox/dcim/models/device_component_templates.py:354 +#: netbox/dcim/models/device_components.py:473 msgid "Phase (for three-phase feeds)" msgstr "Phase (pour les alimentations triphasées)" -#: netbox/dcim/models/device_component_templates.py:357 +#: netbox/dcim/models/device_component_templates.py:360 msgid "power outlet template" msgstr "modèle de prise de courant" -#: netbox/dcim/models/device_component_templates.py:358 +#: netbox/dcim/models/device_component_templates.py:361 msgid "power outlet templates" msgstr "modèles de prises de courant" -#: netbox/dcim/models/device_component_templates.py:367 +#: netbox/dcim/models/device_component_templates.py:370 #, python-brace-format msgid "Parent power port ({power_port}) must belong to the same device type" msgstr "" "Port d'alimentation parent ({power_port}) doit appartenir au même type " "d'appareil" -#: netbox/dcim/models/device_component_templates.py:371 +#: netbox/dcim/models/device_component_templates.py:376 #, python-brace-format msgid "Parent power port ({power_port}) must belong to the same module type" msgstr "" "Port d'alimentation parent ({power_port}) doit appartenir au même type de " "module" -#: netbox/dcim/models/device_component_templates.py:423 -#: netbox/dcim/models/device_components.py:611 +#: netbox/dcim/models/device_component_templates.py:430 +#: netbox/dcim/models/device_components.py:659 msgid "management only" msgstr "gestion uniquement" -#: netbox/dcim/models/device_component_templates.py:431 -#: netbox/dcim/models/device_components.py:550 +#: netbox/dcim/models/device_component_templates.py:438 +#: netbox/dcim/models/device_components.py:539 msgid "bridge interface" msgstr "interface de pont" -#: netbox/dcim/models/device_component_templates.py:449 -#: netbox/dcim/models/device_components.py:636 +#: netbox/dcim/models/device_component_templates.py:459 +#: netbox/dcim/models/device_components.py:685 msgid "wireless role" msgstr "rôle sans fil" -#: netbox/dcim/models/device_component_templates.py:455 +#: netbox/dcim/models/device_component_templates.py:465 msgid "interface template" msgstr "modèle d'interface" -#: netbox/dcim/models/device_component_templates.py:456 +#: netbox/dcim/models/device_component_templates.py:466 msgid "interface templates" msgstr "modèles d'interface" -#: netbox/dcim/models/device_component_templates.py:463 -#: netbox/dcim/models/device_components.py:804 -#: netbox/virtualization/models/virtualmachines.py:405 +#: netbox/dcim/models/device_component_templates.py:473 +#: netbox/dcim/models/device_components.py:845 +#: netbox/virtualization/models/virtualmachines.py:385 msgid "An interface cannot be bridged to itself." msgstr "Une interface ne peut pas être reliée à elle-même." -#: netbox/dcim/models/device_component_templates.py:466 +#: netbox/dcim/models/device_component_templates.py:477 #, python-brace-format msgid "Bridge interface ({bridge}) must belong to the same device type" msgstr "Interface de pont ({bridge}) doit appartenir au même type d'appareil" -#: netbox/dcim/models/device_component_templates.py:470 +#: netbox/dcim/models/device_component_templates.py:483 #, python-brace-format msgid "Bridge interface ({bridge}) must belong to the same module type" msgstr "Interface de pont ({bridge}) doit appartenir au même type de module" -#: netbox/dcim/models/device_component_templates.py:526 -#: netbox/dcim/models/device_components.py:984 +#: netbox/dcim/models/device_component_templates.py:540 +#: netbox/dcim/models/device_components.py:1035 msgid "rear port position" msgstr "position du port arrière" -#: netbox/dcim/models/device_component_templates.py:551 +#: netbox/dcim/models/device_component_templates.py:565 msgid "front port template" msgstr "modèle de port avant" -#: netbox/dcim/models/device_component_templates.py:552 +#: netbox/dcim/models/device_component_templates.py:566 msgid "front port templates" msgstr "modèles de port avant" -#: netbox/dcim/models/device_component_templates.py:562 +#: netbox/dcim/models/device_component_templates.py:576 #, python-brace-format msgid "Rear port ({name}) must belong to the same device type" msgstr "Port arrière ({name}) doit appartenir au même type d'appareil" -#: netbox/dcim/models/device_component_templates.py:568 +#: netbox/dcim/models/device_component_templates.py:582 #, python-brace-format msgid "" "Invalid rear port position ({position}); rear port {name} has only {count} " @@ -5429,47 +5933,47 @@ msgstr "" "Position du port arrière non valide ({position}) ; port arrière {name} n'a " "que {count} positions" -#: netbox/dcim/models/device_component_templates.py:621 -#: netbox/dcim/models/device_components.py:1053 +#: netbox/dcim/models/device_component_templates.py:635 +#: netbox/dcim/models/device_components.py:1101 msgid "positions" msgstr "positions" -#: netbox/dcim/models/device_component_templates.py:632 +#: netbox/dcim/models/device_component_templates.py:646 msgid "rear port template" msgstr "modèle de port arrière" -#: netbox/dcim/models/device_component_templates.py:633 +#: netbox/dcim/models/device_component_templates.py:647 msgid "rear port templates" msgstr "modèles de port arrière" -#: netbox/dcim/models/device_component_templates.py:662 -#: netbox/dcim/models/device_components.py:1103 +#: netbox/dcim/models/device_component_templates.py:676 +#: netbox/dcim/models/device_components.py:1148 msgid "position" msgstr "position" -#: netbox/dcim/models/device_component_templates.py:665 -#: netbox/dcim/models/device_components.py:1106 +#: netbox/dcim/models/device_component_templates.py:679 +#: netbox/dcim/models/device_components.py:1151 msgid "Identifier to reference when renaming installed components" msgstr "" "Identifiant à référencer lors du changement de nom des composants installés" -#: netbox/dcim/models/device_component_templates.py:671 +#: netbox/dcim/models/device_component_templates.py:685 msgid "module bay template" msgstr "modèle de baie modulaire" -#: netbox/dcim/models/device_component_templates.py:672 +#: netbox/dcim/models/device_component_templates.py:686 msgid "module bay templates" msgstr "modèles de baies de modules" -#: netbox/dcim/models/device_component_templates.py:699 +#: netbox/dcim/models/device_component_templates.py:713 msgid "device bay template" msgstr "modèle de baie pour appareils" -#: netbox/dcim/models/device_component_templates.py:700 +#: netbox/dcim/models/device_component_templates.py:714 msgid "device bay templates" msgstr "modèles de baies d'appareils" -#: netbox/dcim/models/device_component_templates.py:713 +#: netbox/dcim/models/device_component_templates.py:728 #, python-brace-format msgid "" "Subdevice role of device type ({device_type}) must be set to \"parent\" to " @@ -5478,211 +5982,230 @@ msgstr "" "Rôle du sous-appareil du type d'appareil ({device_type}) doit être défini " "sur « parent » pour autoriser les baies de périphériques." -#: netbox/dcim/models/device_component_templates.py:768 -#: netbox/dcim/models/device_components.py:1262 +#: netbox/dcim/models/device_component_templates.py:784 +#: netbox/dcim/models/device_components.py:1304 msgid "part ID" msgstr "ID de pièce" -#: netbox/dcim/models/device_component_templates.py:770 -#: netbox/dcim/models/device_components.py:1264 +#: netbox/dcim/models/device_component_templates.py:786 +#: netbox/dcim/models/device_components.py:1306 msgid "Manufacturer-assigned part identifier" msgstr "Identifiant de pièce attribué par le fabricant" -#: netbox/dcim/models/device_component_templates.py:787 +#: netbox/dcim/models/device_component_templates.py:803 msgid "inventory item template" msgstr "modèle d'article d'inventaire" -#: netbox/dcim/models/device_component_templates.py:788 +#: netbox/dcim/models/device_component_templates.py:804 msgid "inventory item templates" msgstr "modèles d'articles d'inventaire" -#: netbox/dcim/models/device_components.py:105 +#: netbox/dcim/models/device_components.py:100 msgid "Components cannot be moved to a different device." msgstr "Les composants ne peuvent pas être déplacés vers un autre appareil." -#: netbox/dcim/models/device_components.py:144 +#: netbox/dcim/models/device_components.py:139 msgid "cable end" msgstr "extrémité du câble" -#: netbox/dcim/models/device_components.py:150 +#: netbox/dcim/models/device_components.py:146 msgid "mark connected" msgstr "marque connectée" -#: netbox/dcim/models/device_components.py:152 +#: netbox/dcim/models/device_components.py:148 msgid "Treat as if a cable is connected" msgstr "Traitez comme si un câble était connecté" -#: netbox/dcim/models/device_components.py:170 +#: netbox/dcim/models/device_components.py:166 msgid "Must specify cable end (A or B) when attaching a cable." msgstr "" "Doit spécifier l'extrémité du câble (A ou B) lors de la fixation d'un câble." -#: netbox/dcim/models/device_components.py:174 +#: netbox/dcim/models/device_components.py:170 msgid "Cable end must not be set without a cable." msgstr "L'extrémité du câble ne doit pas être réglée sans câble." -#: netbox/dcim/models/device_components.py:178 +#: netbox/dcim/models/device_components.py:174 msgid "Cannot mark as connected with a cable attached." msgstr "Impossible de marquer comme connecté avec un câble branché." -#: netbox/dcim/models/device_components.py:202 +#: netbox/dcim/models/device_components.py:198 #, python-brace-format msgid "{class_name} models must declare a parent_object property" msgstr "{class_name} les modèles doivent déclarer une propriété parent_object" -#: netbox/dcim/models/device_components.py:287 -#: netbox/dcim/models/device_components.py:316 -#: netbox/dcim/models/device_components.py:349 -#: netbox/dcim/models/device_components.py:467 +#: netbox/dcim/models/device_components.py:284 +#: netbox/dcim/models/device_components.py:311 +#: netbox/dcim/models/device_components.py:342 +#: netbox/dcim/models/device_components.py:458 msgid "Physical port type" msgstr "Type de port physique" -#: netbox/dcim/models/device_components.py:290 -#: netbox/dcim/models/device_components.py:319 +#: netbox/dcim/models/device_components.py:287 +#: netbox/dcim/models/device_components.py:314 msgid "speed" msgstr "vitesse" -#: netbox/dcim/models/device_components.py:294 -#: netbox/dcim/models/device_components.py:323 +#: netbox/dcim/models/device_components.py:291 +#: netbox/dcim/models/device_components.py:318 msgid "Port speed in bits per second" msgstr "Vitesse du port en bits par seconde" -#: netbox/dcim/models/device_components.py:300 +#: netbox/dcim/models/device_components.py:297 msgid "console port" msgstr "port de console" -#: netbox/dcim/models/device_components.py:301 +#: netbox/dcim/models/device_components.py:298 msgid "console ports" msgstr "ports de console" -#: netbox/dcim/models/device_components.py:329 +#: netbox/dcim/models/device_components.py:324 msgid "console server port" msgstr "port du serveur de console" -#: netbox/dcim/models/device_components.py:330 +#: netbox/dcim/models/device_components.py:325 msgid "console server ports" msgstr "ports du serveur de console" -#: netbox/dcim/models/device_components.py:369 +#: netbox/dcim/models/device_components.py:362 msgid "power port" msgstr "port d'alimentation" -#: netbox/dcim/models/device_components.py:370 +#: netbox/dcim/models/device_components.py:363 msgid "power ports" msgstr "ports d'alimentation" -#: netbox/dcim/models/device_components.py:487 +#: netbox/dcim/models/device_components.py:483 msgid "power outlet" msgstr "prise de courant" -#: netbox/dcim/models/device_components.py:488 +#: netbox/dcim/models/device_components.py:484 msgid "power outlets" msgstr "prises de courant" -#: netbox/dcim/models/device_components.py:499 +#: netbox/dcim/models/device_components.py:492 #, python-brace-format msgid "Parent power port ({power_port}) must belong to the same device" msgstr "" "Port d'alimentation parent ({power_port}) doit appartenir au même appareil" -#: netbox/dcim/models/device_components.py:530 netbox/vpn/models/crypto.py:81 -#: netbox/vpn/models/crypto.py:226 +#: netbox/dcim/models/device_components.py:518 netbox/vpn/models/crypto.py:80 +#: netbox/vpn/models/crypto.py:222 msgid "mode" msgstr "mode" -#: netbox/dcim/models/device_components.py:534 +#: netbox/dcim/models/device_components.py:523 msgid "IEEE 802.1Q tagging strategy" msgstr "Stratégie de marquage IEEE 802.1Q" -#: netbox/dcim/models/device_components.py:542 +#: netbox/dcim/models/device_components.py:531 msgid "parent interface" msgstr "interface parente" -#: netbox/dcim/models/device_components.py:602 -msgid "parent LAG" -msgstr "GAL parent" - -#: netbox/dcim/models/device_components.py:612 -msgid "This interface is used only for out-of-band management" -msgstr "Cette interface est utilisée uniquement pour la gestion hors bande" - -#: netbox/dcim/models/device_components.py:617 -msgid "speed (Kbps)" -msgstr "vitesse (Kbps)" - -#: netbox/dcim/models/device_components.py:620 -msgid "duplex" -msgstr "duplex" - -#: netbox/dcim/models/device_components.py:630 -msgid "64-bit World Wide Name" -msgstr "Nom mondial 64 bits" - -#: netbox/dcim/models/device_components.py:642 -msgid "wireless channel" -msgstr "canal sans fil" - -#: netbox/dcim/models/device_components.py:649 -msgid "channel frequency (MHz)" -msgstr "fréquence du canal (MHz)" - -#: netbox/dcim/models/device_components.py:650 -#: netbox/dcim/models/device_components.py:658 -msgid "Populated by selected channel (if set)" -msgstr "Rempli par la chaîne sélectionnée (si définie)" - -#: netbox/dcim/models/device_components.py:664 -msgid "transmit power (dBm)" -msgstr "puissance de transmission (dBm)" - -#: netbox/dcim/models/device_components.py:689 netbox/wireless/models.py:117 -msgid "wireless LANs" -msgstr "réseaux locaux sans fil" - -#: netbox/dcim/models/device_components.py:697 -#: netbox/virtualization/models/virtualmachines.py:335 +#: netbox/dcim/models/device_components.py:547 msgid "untagged VLAN" msgstr "VLAN non étiqueté" -#: netbox/dcim/models/device_components.py:703 -#: netbox/virtualization/models/virtualmachines.py:341 +#: netbox/dcim/models/device_components.py:553 msgid "tagged VLANs" msgstr "VLAN étiquetés" -#: netbox/dcim/models/device_components.py:745 -#: netbox/virtualization/models/virtualmachines.py:377 +#: netbox/dcim/models/device_components.py:561 +#: netbox/dcim/tables/devices.py:602 netbox/ipam/forms/bulk_edit.py:510 +#: netbox/ipam/forms/bulk_import.py:491 netbox/ipam/forms/filtersets.py:565 +#: netbox/ipam/forms/model_forms.py:692 netbox/ipam/tables/vlans.py:106 +#: netbox/templates/dcim/interface.html:86 netbox/templates/ipam/vlan.html:77 +msgid "Q-in-Q SVLAN" +msgstr "SVLAN Q-in-Q" + +#: netbox/dcim/models/device_components.py:576 +msgid "primary MAC address" +msgstr "adresse MAC principale" + +#: netbox/dcim/models/device_components.py:588 +msgid "Only Q-in-Q interfaces may specify a service VLAN." +msgstr "Seules les interfaces Q-in-Q peuvent spécifier un VLAN de service." + +#: netbox/dcim/models/device_components.py:594 +#, python-brace-format +msgid "MAC address {mac_address} is not assigned to this interface." +msgstr "Adresse MAC {mac_address} n'est pas attribué à cette interface." + +#: netbox/dcim/models/device_components.py:650 +msgid "parent LAG" +msgstr "GAL parent" + +#: netbox/dcim/models/device_components.py:660 +msgid "This interface is used only for out-of-band management" +msgstr "Cette interface est utilisée uniquement pour la gestion hors bande" + +#: netbox/dcim/models/device_components.py:665 +msgid "speed (Kbps)" +msgstr "vitesse (Kbps)" + +#: netbox/dcim/models/device_components.py:668 +msgid "duplex" +msgstr "duplex" + +#: netbox/dcim/models/device_components.py:678 +msgid "64-bit World Wide Name" +msgstr "Nom mondial 64 bits" + +#: netbox/dcim/models/device_components.py:692 +msgid "wireless channel" +msgstr "canal sans fil" + +#: netbox/dcim/models/device_components.py:699 +msgid "channel frequency (MHz)" +msgstr "fréquence du canal (MHz)" + +#: netbox/dcim/models/device_components.py:700 +#: netbox/dcim/models/device_components.py:708 +msgid "Populated by selected channel (if set)" +msgstr "Rempli par la chaîne sélectionnée (si définie)" + +#: netbox/dcim/models/device_components.py:714 +msgid "transmit power (dBm)" +msgstr "puissance de transmission (dBm)" + +#: netbox/dcim/models/device_components.py:741 netbox/wireless/models.py:117 +msgid "wireless LANs" +msgstr "réseaux locaux sans fil" + +#: netbox/dcim/models/device_components.py:789 +#: netbox/virtualization/models/virtualmachines.py:359 msgid "interface" msgstr "interface" -#: netbox/dcim/models/device_components.py:746 -#: netbox/virtualization/models/virtualmachines.py:378 +#: netbox/dcim/models/device_components.py:790 +#: netbox/virtualization/models/virtualmachines.py:360 msgid "interfaces" msgstr "interfaces" -#: netbox/dcim/models/device_components.py:757 +#: netbox/dcim/models/device_components.py:798 #, python-brace-format msgid "{display_type} interfaces cannot have a cable attached." msgstr "" "{display_type} les interfaces ne peuvent pas être connectées à un câble." -#: netbox/dcim/models/device_components.py:765 +#: netbox/dcim/models/device_components.py:806 #, python-brace-format msgid "{display_type} interfaces cannot be marked as connected." msgstr "" "{display_type} les interfaces ne peuvent pas être marquées comme connectées." -#: netbox/dcim/models/device_components.py:774 -#: netbox/virtualization/models/virtualmachines.py:390 +#: netbox/dcim/models/device_components.py:815 +#: netbox/virtualization/models/virtualmachines.py:370 msgid "An interface cannot be its own parent." msgstr "Une interface ne peut pas être son propre parent." -#: netbox/dcim/models/device_components.py:778 +#: netbox/dcim/models/device_components.py:819 msgid "Only virtual interfaces may be assigned to a parent interface." msgstr "" "Seules les interfaces virtuelles peuvent être attribuées à une interface " "parent." -#: netbox/dcim/models/device_components.py:785 +#: netbox/dcim/models/device_components.py:826 #, python-brace-format msgid "" "The selected parent interface ({interface}) belongs to a different device " @@ -5691,7 +6214,7 @@ msgstr "" "L'interface parent sélectionnée ({interface}) appartient à un autre appareil" " ({device})" -#: netbox/dcim/models/device_components.py:791 +#: netbox/dcim/models/device_components.py:832 #, python-brace-format msgid "" "The selected parent interface ({interface}) belongs to {device}, which is " @@ -5700,7 +6223,7 @@ msgstr "" "L'interface parent sélectionnée ({interface}) appartient à {device}, qui ne " "fait pas partie du châssis virtuel {virtual_chassis}." -#: netbox/dcim/models/device_components.py:811 +#: netbox/dcim/models/device_components.py:852 #, python-brace-format msgid "" "The selected bridge interface ({bridge}) belongs to a different device " @@ -5709,7 +6232,7 @@ msgstr "" "L'interface de pont sélectionnée ({bridge}) appartient à un autre appareil " "({device})." -#: netbox/dcim/models/device_components.py:817 +#: netbox/dcim/models/device_components.py:858 #, python-brace-format msgid "" "The selected bridge interface ({interface}) belongs to {device}, which is " @@ -5718,16 +6241,16 @@ msgstr "" "L'interface de pont sélectionnée ({interface}) appartient à {device}, qui ne" " fait pas partie du châssis virtuel {virtual_chassis}." -#: netbox/dcim/models/device_components.py:828 +#: netbox/dcim/models/device_components.py:869 msgid "Virtual interfaces cannot have a parent LAG interface." msgstr "" "Les interfaces virtuelles ne peuvent pas avoir d'interface LAG parente." -#: netbox/dcim/models/device_components.py:832 +#: netbox/dcim/models/device_components.py:873 msgid "A LAG interface cannot be its own parent." msgstr "Une interface LAG ne peut pas être son propre parent." -#: netbox/dcim/models/device_components.py:839 +#: netbox/dcim/models/device_components.py:880 #, python-brace-format msgid "" "The selected LAG interface ({lag}) belongs to a different device ({device})." @@ -5735,7 +6258,7 @@ msgstr "" "L'interface LAG sélectionnée ({lag}) appartient à un autre appareil " "({device})." -#: netbox/dcim/models/device_components.py:845 +#: netbox/dcim/models/device_components.py:886 #, python-brace-format msgid "" "The selected LAG interface ({lag}) belongs to {device}, which is not part of" @@ -5744,48 +6267,52 @@ msgstr "" "L'interface LAG sélectionnée ({lag}) appartient à {device}, qui ne fait pas " "partie du châssis virtuel {virtual_chassis}." -#: netbox/dcim/models/device_components.py:856 +#: netbox/dcim/models/device_components.py:897 msgid "Virtual interfaces cannot have a PoE mode." msgstr "Les interfaces virtuelles ne peuvent pas avoir de mode PoE." -#: netbox/dcim/models/device_components.py:860 +#: netbox/dcim/models/device_components.py:901 msgid "Virtual interfaces cannot have a PoE type." msgstr "Les interfaces virtuelles ne peuvent pas avoir de type PoE." -#: netbox/dcim/models/device_components.py:866 +#: netbox/dcim/models/device_components.py:907 msgid "Must specify PoE mode when designating a PoE type." msgstr "Doit spécifier le mode PoE lors de la désignation d'un type de PoE." -#: netbox/dcim/models/device_components.py:873 +#: netbox/dcim/models/device_components.py:914 msgid "Wireless role may be set only on wireless interfaces." msgstr "Le rôle sans fil ne peut être défini que sur les interfaces sans fil." -#: netbox/dcim/models/device_components.py:875 +#: netbox/dcim/models/device_components.py:916 msgid "Channel may be set only on wireless interfaces." msgstr "Le canal ne peut être défini que sur les interfaces sans fil." -#: netbox/dcim/models/device_components.py:881 +#: netbox/dcim/models/device_components.py:922 msgid "Channel frequency may be set only on wireless interfaces." msgstr "" "La fréquence des canaux ne peut être réglée que sur les interfaces sans fil." -#: netbox/dcim/models/device_components.py:885 +#: netbox/dcim/models/device_components.py:926 msgid "Cannot specify custom frequency with channel selected." msgstr "" "Impossible de spécifier une fréquence personnalisée avec le canal " "sélectionné." -#: netbox/dcim/models/device_components.py:891 +#: netbox/dcim/models/device_components.py:932 msgid "Channel width may be set only on wireless interfaces." msgstr "" "La largeur de canal ne peut être réglée que sur les interfaces sans fil." -#: netbox/dcim/models/device_components.py:893 +#: netbox/dcim/models/device_components.py:934 msgid "Cannot specify custom width with channel selected." msgstr "" "Impossible de spécifier une largeur personnalisée avec le canal sélectionné." -#: netbox/dcim/models/device_components.py:901 +#: netbox/dcim/models/device_components.py:938 +msgid "Interface mode does not support an untagged vlan." +msgstr "Le mode Interface ne prend pas en charge un VLAN non balisé." + +#: netbox/dcim/models/device_components.py:944 #, python-brace-format msgid "" "The untagged VLAN ({untagged_vlan}) must belong to the same site as the " @@ -5794,24 +6321,24 @@ msgstr "" "Le VLAN non étiqueté ({untagged_vlan}) doit appartenir au même site que " "l'appareil parent de l'interface, ou il doit être global." -#: netbox/dcim/models/device_components.py:990 +#: netbox/dcim/models/device_components.py:1041 msgid "Mapped position on corresponding rear port" msgstr "Position cartographiée sur le port arrière correspondant" -#: netbox/dcim/models/device_components.py:1006 +#: netbox/dcim/models/device_components.py:1057 msgid "front port" msgstr "port avant" -#: netbox/dcim/models/device_components.py:1007 +#: netbox/dcim/models/device_components.py:1058 msgid "front ports" msgstr "ports avant" -#: netbox/dcim/models/device_components.py:1021 +#: netbox/dcim/models/device_components.py:1069 #, python-brace-format msgid "Rear port ({rear_port}) must belong to the same device" msgstr "Port arrière ({rear_port}) doit appartenir au même appareil" -#: netbox/dcim/models/device_components.py:1029 +#: netbox/dcim/models/device_components.py:1077 #, python-brace-format msgid "" "Invalid rear port position ({rear_port_position}): Rear port {name} has only" @@ -5820,19 +6347,19 @@ msgstr "" "Position du port arrière non valide ({rear_port_position}) : Port arrière " "{name} n'a que {positions} positions." -#: netbox/dcim/models/device_components.py:1059 +#: netbox/dcim/models/device_components.py:1107 msgid "Number of front ports which may be mapped" msgstr "Nombre de ports frontaux pouvant être mappés" -#: netbox/dcim/models/device_components.py:1064 +#: netbox/dcim/models/device_components.py:1112 msgid "rear port" msgstr "port arrière" -#: netbox/dcim/models/device_components.py:1065 +#: netbox/dcim/models/device_components.py:1113 msgid "rear ports" msgstr "ports arrière" -#: netbox/dcim/models/device_components.py:1079 +#: netbox/dcim/models/device_components.py:1124 #, python-brace-format msgid "" "The number of positions cannot be less than the number of mapped front ports" @@ -5841,40 +6368,40 @@ msgstr "" "Le nombre de positions ne peut pas être inférieur au nombre de ports " "frontaux mappés ({frontport_count})" -#: netbox/dcim/models/device_components.py:1120 +#: netbox/dcim/models/device_components.py:1165 msgid "module bay" msgstr "baie modulaire" -#: netbox/dcim/models/device_components.py:1121 +#: netbox/dcim/models/device_components.py:1166 msgid "module bays" msgstr "baies de modules" -#: netbox/dcim/models/device_components.py:1138 -#: netbox/dcim/models/devices.py:1224 +#: netbox/dcim/models/device_components.py:1180 +#: netbox/dcim/models/devices.py:1229 msgid "A module bay cannot belong to a module installed within it." msgstr "" "Une baie de modules ne peut pas appartenir à un module qui y est installé." -#: netbox/dcim/models/device_components.py:1164 +#: netbox/dcim/models/device_components.py:1206 msgid "device bay" msgstr "baie pour appareils" -#: netbox/dcim/models/device_components.py:1165 +#: netbox/dcim/models/device_components.py:1207 msgid "device bays" msgstr "baies pour appareils" -#: netbox/dcim/models/device_components.py:1175 +#: netbox/dcim/models/device_components.py:1214 #, python-brace-format msgid "This type of device ({device_type}) does not support device bays." msgstr "" "Ce type d'appareil ({device_type}) ne prend pas en charge les baies pour " "appareils." -#: netbox/dcim/models/device_components.py:1181 +#: netbox/dcim/models/device_components.py:1220 msgid "Cannot install a device into itself." msgstr "Impossible d'installer un appareil sur lui-même." -#: netbox/dcim/models/device_components.py:1189 +#: netbox/dcim/models/device_components.py:1228 #, python-brace-format msgid "" "Cannot install the specified device; device is already installed in {bay}." @@ -5882,116 +6409,116 @@ msgstr "" "Impossible d'installer le périphérique spécifié ; le périphérique est déjà " "installé dans {bay}." -#: netbox/dcim/models/device_components.py:1210 +#: netbox/dcim/models/device_components.py:1249 msgid "inventory item role" msgstr "rôle des articles d'inventaire" -#: netbox/dcim/models/device_components.py:1211 +#: netbox/dcim/models/device_components.py:1250 msgid "inventory item roles" msgstr "rôles des articles d'inventaire" -#: netbox/dcim/models/device_components.py:1268 -#: netbox/dcim/models/devices.py:607 netbox/dcim/models/devices.py:1181 -#: netbox/dcim/models/racks.py:313 -#: netbox/virtualization/models/virtualmachines.py:131 +#: netbox/dcim/models/device_components.py:1310 +#: netbox/dcim/models/devices.py:598 netbox/dcim/models/devices.py:1189 +#: netbox/dcim/models/racks.py:304 +#: netbox/virtualization/models/virtualmachines.py:126 msgid "serial number" msgstr "numéro de série" -#: netbox/dcim/models/device_components.py:1276 -#: netbox/dcim/models/devices.py:615 netbox/dcim/models/devices.py:1188 -#: netbox/dcim/models/racks.py:320 +#: netbox/dcim/models/device_components.py:1318 +#: netbox/dcim/models/devices.py:606 netbox/dcim/models/devices.py:1196 +#: netbox/dcim/models/racks.py:311 msgid "asset tag" msgstr "étiquette d'actif" -#: netbox/dcim/models/device_components.py:1277 +#: netbox/dcim/models/device_components.py:1319 msgid "A unique tag used to identify this item" msgstr "Une étiquette unique utilisée pour identifier cet article" -#: netbox/dcim/models/device_components.py:1280 +#: netbox/dcim/models/device_components.py:1322 msgid "discovered" msgstr "découvert" -#: netbox/dcim/models/device_components.py:1282 +#: netbox/dcim/models/device_components.py:1324 msgid "This item was automatically discovered" msgstr "Cet objet a été découvert automatiquement" -#: netbox/dcim/models/device_components.py:1300 +#: netbox/dcim/models/device_components.py:1342 msgid "inventory item" msgstr "article d'inventaire" -#: netbox/dcim/models/device_components.py:1301 +#: netbox/dcim/models/device_components.py:1343 msgid "inventory items" msgstr "articles d'inventaire" -#: netbox/dcim/models/device_components.py:1312 +#: netbox/dcim/models/device_components.py:1351 msgid "Cannot assign self as parent." msgstr "Impossible de s'attribuer le statut de parent." -#: netbox/dcim/models/device_components.py:1320 +#: netbox/dcim/models/device_components.py:1359 msgid "Parent inventory item does not belong to the same device." msgstr "L'article d'inventaire parent n'appartient pas au même appareil." -#: netbox/dcim/models/device_components.py:1326 +#: netbox/dcim/models/device_components.py:1365 msgid "Cannot move an inventory item with dependent children" msgstr "Impossible de déplacer un article en stock avec des enfants à charge" -#: netbox/dcim/models/device_components.py:1334 +#: netbox/dcim/models/device_components.py:1373 msgid "Cannot assign inventory item to component on another device" msgstr "" "Impossible d'attribuer un article d'inventaire à un composant sur un autre " "appareil" -#: netbox/dcim/models/devices.py:54 +#: netbox/dcim/models/devices.py:59 msgid "manufacturer" msgstr "fabricant" -#: netbox/dcim/models/devices.py:55 +#: netbox/dcim/models/devices.py:60 msgid "manufacturers" msgstr "fabricants" -#: netbox/dcim/models/devices.py:82 netbox/dcim/models/devices.py:382 +#: netbox/dcim/models/devices.py:84 netbox/dcim/models/devices.py:383 #: netbox/dcim/models/racks.py:133 msgid "model" msgstr "modèle" -#: netbox/dcim/models/devices.py:95 +#: netbox/dcim/models/devices.py:97 msgid "default platform" msgstr "plateforme par défaut" -#: netbox/dcim/models/devices.py:98 netbox/dcim/models/devices.py:386 +#: netbox/dcim/models/devices.py:100 netbox/dcim/models/devices.py:387 msgid "part number" msgstr "numéro de pièce" -#: netbox/dcim/models/devices.py:101 netbox/dcim/models/devices.py:389 +#: netbox/dcim/models/devices.py:103 netbox/dcim/models/devices.py:390 msgid "Discrete part number (optional)" msgstr "Numéro de pièce discret (facultatif)" -#: netbox/dcim/models/devices.py:107 netbox/dcim/models/racks.py:54 +#: netbox/dcim/models/devices.py:109 netbox/dcim/models/racks.py:53 msgid "height (U)" msgstr "hauteur (U)" -#: netbox/dcim/models/devices.py:111 +#: netbox/dcim/models/devices.py:113 msgid "exclude from utilization" msgstr "exclure de l'utilisation" -#: netbox/dcim/models/devices.py:112 +#: netbox/dcim/models/devices.py:114 msgid "Devices of this type are excluded when calculating rack utilization." msgstr "" "Les appareils de ce type sont exclus du calcul de l'utilisation des baies." -#: netbox/dcim/models/devices.py:116 +#: netbox/dcim/models/devices.py:118 msgid "is full depth" msgstr "est en pleine profondeur" -#: netbox/dcim/models/devices.py:117 +#: netbox/dcim/models/devices.py:119 msgid "Device consumes both front and rear rack faces." msgstr "L'appareil consomme à la fois les faces avant et arrière de la baie." -#: netbox/dcim/models/devices.py:123 +#: netbox/dcim/models/devices.py:126 msgid "parent/child status" msgstr "statut parent/enfant" -#: netbox/dcim/models/devices.py:124 +#: netbox/dcim/models/devices.py:127 msgid "" "Parent devices house child devices in device bays. Leave blank if this " "device type is neither a parent nor a child." @@ -6000,24 +6527,24 @@ msgstr "" "pour appareils. Laissez ce champ vide si ce type d'appareil n'est ni un " "parent ni un enfant." -#: netbox/dcim/models/devices.py:128 netbox/dcim/models/devices.py:392 -#: netbox/dcim/models/devices.py:659 netbox/dcim/models/racks.py:324 +#: netbox/dcim/models/devices.py:131 netbox/dcim/models/devices.py:393 +#: netbox/dcim/models/devices.py:651 netbox/dcim/models/racks.py:315 msgid "airflow" msgstr "débit d'air" -#: netbox/dcim/models/devices.py:204 +#: netbox/dcim/models/devices.py:208 msgid "device type" msgstr "type d'appareil" -#: netbox/dcim/models/devices.py:205 +#: netbox/dcim/models/devices.py:209 msgid "device types" msgstr "types d'appareils" -#: netbox/dcim/models/devices.py:290 +#: netbox/dcim/models/devices.py:291 msgid "U height must be in increments of 0.5 rack units." msgstr "La hauteur en U doit être exprimée par incréments de 0,5 unité baie." -#: netbox/dcim/models/devices.py:307 +#: netbox/dcim/models/devices.py:308 #, python-brace-format msgid "" "Device {device} in rack {rack} does not have sufficient space to accommodate" @@ -6026,7 +6553,7 @@ msgstr "" "Appareil {device} en baie {rack} ne dispose pas de suffisamment d'espace " "pour accueillir une hauteur de {height}U" -#: netbox/dcim/models/devices.py:322 +#: netbox/dcim/models/devices.py:323 #, python-brace-format msgid "" "Unable to set 0U height: Found {racked_instance_count} " @@ -6036,7 +6563,7 @@ msgstr "" "href=\"{url}\">{racked_instance_count} les instances déjà monté dans des" " baies." -#: netbox/dcim/models/devices.py:331 +#: netbox/dcim/models/devices.py:332 msgid "" "Must delete all device bay templates associated with this device before " "declassifying it as a parent device." @@ -6044,156 +6571,156 @@ msgstr "" "Vous devez supprimer tous les modèles de baies d'appareils associés à cet " "appareil avant de le déclassifier en tant qu'appareil parent." -#: netbox/dcim/models/devices.py:337 +#: netbox/dcim/models/devices.py:338 msgid "Child device types must be 0U." msgstr "Les types d'appareils pour enfants doivent être 0U." -#: netbox/dcim/models/devices.py:411 +#: netbox/dcim/models/devices.py:413 msgid "module type" msgstr "type de module" -#: netbox/dcim/models/devices.py:412 +#: netbox/dcim/models/devices.py:414 msgid "module types" msgstr "types de modules" -#: netbox/dcim/models/devices.py:485 +#: netbox/dcim/models/devices.py:484 msgid "Virtual machines may be assigned to this role" msgstr "Des machines virtuelles peuvent être affectées à ce rôle" -#: netbox/dcim/models/devices.py:497 +#: netbox/dcim/models/devices.py:496 msgid "device role" msgstr "rôle de l'appareil" -#: netbox/dcim/models/devices.py:498 +#: netbox/dcim/models/devices.py:497 msgid "device roles" msgstr "rôles des appareils" -#: netbox/dcim/models/devices.py:515 +#: netbox/dcim/models/devices.py:511 msgid "Optionally limit this platform to devices of a certain manufacturer" msgstr "" "Limitez éventuellement cette plate-forme aux appareils d'un certain " "fabricant" -#: netbox/dcim/models/devices.py:527 +#: netbox/dcim/models/devices.py:523 msgid "platform" msgstr "plateforme" -#: netbox/dcim/models/devices.py:528 +#: netbox/dcim/models/devices.py:524 msgid "platforms" msgstr "plateformes" -#: netbox/dcim/models/devices.py:576 +#: netbox/dcim/models/devices.py:572 msgid "The function this device serves" msgstr "La fonction de cet appareil" -#: netbox/dcim/models/devices.py:608 +#: netbox/dcim/models/devices.py:599 msgid "Chassis serial number, assigned by the manufacturer" msgstr "Numéro de série du châssis attribué par le fabricant" -#: netbox/dcim/models/devices.py:616 netbox/dcim/models/devices.py:1189 +#: netbox/dcim/models/devices.py:607 netbox/dcim/models/devices.py:1197 msgid "A unique tag used to identify this device" msgstr "Un tag unique utilisé pour identifier cet appareil" -#: netbox/dcim/models/devices.py:643 +#: netbox/dcim/models/devices.py:634 msgid "position (U)" msgstr "position (U)" -#: netbox/dcim/models/devices.py:650 +#: netbox/dcim/models/devices.py:642 msgid "rack face" msgstr "face de la baie" -#: netbox/dcim/models/devices.py:670 netbox/dcim/models/devices.py:1420 -#: netbox/virtualization/models/virtualmachines.py:100 +#: netbox/dcim/models/devices.py:663 netbox/dcim/models/devices.py:1425 +#: netbox/virtualization/models/virtualmachines.py:95 msgid "primary IPv4" msgstr "IPv4 principal" -#: netbox/dcim/models/devices.py:678 netbox/dcim/models/devices.py:1428 -#: netbox/virtualization/models/virtualmachines.py:108 +#: netbox/dcim/models/devices.py:671 netbox/dcim/models/devices.py:1433 +#: netbox/virtualization/models/virtualmachines.py:103 msgid "primary IPv6" msgstr "IPv6 principal" -#: netbox/dcim/models/devices.py:686 +#: netbox/dcim/models/devices.py:679 msgid "out-of-band IP" msgstr "IP hors bande" -#: netbox/dcim/models/devices.py:703 +#: netbox/dcim/models/devices.py:696 msgid "VC position" msgstr "Position en VC" -#: netbox/dcim/models/devices.py:706 +#: netbox/dcim/models/devices.py:699 msgid "Virtual chassis position" msgstr "Position virtuelle du châssis" -#: netbox/dcim/models/devices.py:709 +#: netbox/dcim/models/devices.py:702 msgid "VC priority" msgstr "Priorité VC" -#: netbox/dcim/models/devices.py:713 +#: netbox/dcim/models/devices.py:706 msgid "Virtual chassis master election priority" msgstr "Priorité d'élection principale du châssis virtuel" -#: netbox/dcim/models/devices.py:716 netbox/dcim/models/sites.py:207 +#: netbox/dcim/models/devices.py:709 netbox/dcim/models/sites.py:208 msgid "latitude" msgstr "latitude" -#: netbox/dcim/models/devices.py:721 netbox/dcim/models/devices.py:729 -#: netbox/dcim/models/sites.py:212 netbox/dcim/models/sites.py:220 +#: netbox/dcim/models/devices.py:714 netbox/dcim/models/devices.py:722 +#: netbox/dcim/models/sites.py:213 netbox/dcim/models/sites.py:221 msgid "GPS coordinate in decimal format (xx.yyyyyy)" msgstr "Coordonnées GPS au format décimal (xx.yyyyyy)" -#: netbox/dcim/models/devices.py:724 netbox/dcim/models/sites.py:215 +#: netbox/dcim/models/devices.py:717 netbox/dcim/models/sites.py:216 msgid "longitude" msgstr "longitude" -#: netbox/dcim/models/devices.py:797 +#: netbox/dcim/models/devices.py:790 msgid "Device name must be unique per site." msgstr "Le nom de l'appareil doit être unique par site." -#: netbox/dcim/models/devices.py:808 netbox/ipam/models/services.py:75 +#: netbox/dcim/models/devices.py:801 netbox/ipam/models/services.py:71 msgid "device" msgstr "appareil" -#: netbox/dcim/models/devices.py:809 +#: netbox/dcim/models/devices.py:802 msgid "devices" msgstr "appareils" -#: netbox/dcim/models/devices.py:835 +#: netbox/dcim/models/devices.py:821 #, python-brace-format msgid "Rack {rack} does not belong to site {site}." msgstr "La baie {rack} n'appartient pas au site {site}." -#: netbox/dcim/models/devices.py:840 +#: netbox/dcim/models/devices.py:826 #, python-brace-format msgid "Location {location} does not belong to site {site}." msgstr "Emplacement {location} n'appartient pas au site {site}." -#: netbox/dcim/models/devices.py:846 +#: netbox/dcim/models/devices.py:832 #, python-brace-format msgid "Rack {rack} does not belong to location {location}." msgstr "La baie {rack} n'appartient pas au lieu {location}." -#: netbox/dcim/models/devices.py:853 +#: netbox/dcim/models/devices.py:839 msgid "Cannot select a rack face without assigning a rack." msgstr "" "Impossible de sélectionner la face de baie sans d'abord attribuer une baie." -#: netbox/dcim/models/devices.py:857 +#: netbox/dcim/models/devices.py:843 msgid "Cannot select a rack position without assigning a rack." msgstr "" "Impossible de sélectionner une position en baie sans l'attribuer en premier " "dans une baie." -#: netbox/dcim/models/devices.py:863 +#: netbox/dcim/models/devices.py:849 msgid "Position must be in increments of 0.5 rack units." msgstr "La position doit être exprimée par incréments de 0,5 unité de baie." -#: netbox/dcim/models/devices.py:867 +#: netbox/dcim/models/devices.py:853 msgid "Must specify rack face when defining rack position." msgstr "" "Doit spécifier la face de la baie lors de la définition de la position en " "baie." -#: netbox/dcim/models/devices.py:875 +#: netbox/dcim/models/devices.py:861 #, python-brace-format msgid "" "A 0U device type ({device_type}) cannot be assigned to a rack position." @@ -6201,7 +6728,7 @@ msgstr "" "Un appareil de type 0U ({device_type}) ne peut pas être attribué à une " "position en baie." -#: netbox/dcim/models/devices.py:886 +#: netbox/dcim/models/devices.py:872 msgid "" "Child device types cannot be assigned to a rack face. This is an attribute " "of the parent device." @@ -6209,7 +6736,7 @@ msgstr "" "Les appareils de type enfant ne peuvent pas être attribués à une face de " "baie. Il s'agit d'un attribut de l'appareil parent." -#: netbox/dcim/models/devices.py:893 +#: netbox/dcim/models/devices.py:879 msgid "" "Child device types cannot be assigned to a rack position. This is an " "attribute of the parent device." @@ -6217,7 +6744,7 @@ msgstr "" "Les appareils de type enfant ne peuvent pas être affectés à une position en " "baie. Il s'agit d'un attribut de l'appareil parent." -#: netbox/dcim/models/devices.py:907 +#: netbox/dcim/models/devices.py:893 #, python-brace-format msgid "" "U{position} is already occupied or does not have sufficient space to " @@ -6226,22 +6753,22 @@ msgstr "" "U{position} est déjà occupé ou ne dispose pas de suffisamment d'espace pour " "accueillir ce type d'appareil : {device_type} ({u_height}U)" -#: netbox/dcim/models/devices.py:922 +#: netbox/dcim/models/devices.py:908 #, python-brace-format msgid "{ip} is not an IPv4 address." msgstr "{ip} n'est pas une adresse IPv4." -#: netbox/dcim/models/devices.py:931 netbox/dcim/models/devices.py:946 +#: netbox/dcim/models/devices.py:920 netbox/dcim/models/devices.py:938 #, python-brace-format msgid "The specified IP address ({ip}) is not assigned to this device." msgstr "L'adresse IP spécifiée ({ip}) n'est pas attribué à cet appareil." -#: netbox/dcim/models/devices.py:937 +#: netbox/dcim/models/devices.py:926 #, python-brace-format msgid "{ip} is not an IPv6 address." msgstr "{ip} n'est pas une adresse IPv6." -#: netbox/dcim/models/devices.py:964 +#: netbox/dcim/models/devices.py:956 #, python-brace-format msgid "" "The assigned platform is limited to {platform_manufacturer} device types, " @@ -6251,12 +6778,18 @@ msgstr "" "d'appareils, mais le type de cet appareil appartient à " "{devicetype_manufacturer}." -#: netbox/dcim/models/devices.py:975 +#: netbox/dcim/models/devices.py:967 #, python-brace-format msgid "The assigned cluster belongs to a different site ({site})" msgstr "Le cluster attribué appartient à un autre site ({site})" -#: netbox/dcim/models/devices.py:983 +#: netbox/dcim/models/devices.py:974 +#, python-brace-format +msgid "The assigned cluster belongs to a different location ({location})" +msgstr "" +"Le cluster attribué appartient à un emplacement différent ({location})" + +#: netbox/dcim/models/devices.py:982 msgid "A device assigned to a virtual chassis must have its position defined." msgstr "" "La position d'un appareil affecté à un châssis virtuel doit être définie." @@ -6270,15 +6803,15 @@ msgstr "" "Le périphérique ne peut pas être retiré du châssis virtuel {virtual_chassis}" " car il est actuellement désigné comme son maître." -#: netbox/dcim/models/devices.py:1196 +#: netbox/dcim/models/devices.py:1204 msgid "module" msgstr "module" -#: netbox/dcim/models/devices.py:1197 +#: netbox/dcim/models/devices.py:1205 msgid "modules" msgstr "modules" -#: netbox/dcim/models/devices.py:1213 +#: netbox/dcim/models/devices.py:1218 #, python-brace-format msgid "" "Module must be installed within a module bay belonging to the assigned " @@ -6287,22 +6820,22 @@ msgstr "" "Le module doit être installé dans une baie de modules appartenant au " "périphérique attribué ({device})." -#: netbox/dcim/models/devices.py:1339 +#: netbox/dcim/models/devices.py:1346 msgid "domain" msgstr "domaine" -#: netbox/dcim/models/devices.py:1352 netbox/dcim/models/devices.py:1353 +#: netbox/dcim/models/devices.py:1359 netbox/dcim/models/devices.py:1360 msgid "virtual chassis" msgstr "châssis virtuel" -#: netbox/dcim/models/devices.py:1368 +#: netbox/dcim/models/devices.py:1372 #, python-brace-format msgid "" "The selected master ({master}) is not assigned to this virtual chassis." msgstr "" "Le master sélectionné ({master}) n'est pas attribué à ce châssis virtuel." -#: netbox/dcim/models/devices.py:1384 +#: netbox/dcim/models/devices.py:1388 #, python-brace-format msgid "" "Unable to delete virtual chassis {self}. There are member interfaces which " @@ -6311,52 +6844,63 @@ msgstr "" "Impossible de supprimer le châssis virtuel {self}. Il existe des interfaces " "membres qui forment des interfaces LAG inter-châssis." -#: netbox/dcim/models/devices.py:1409 netbox/vpn/models/l2vpn.py:37 +#: netbox/dcim/models/devices.py:1414 netbox/vpn/models/l2vpn.py:37 msgid "identifier" msgstr "identificateur" -#: netbox/dcim/models/devices.py:1410 +#: netbox/dcim/models/devices.py:1415 msgid "Numeric identifier unique to the parent device" msgstr "Identifiant numérique propre à l'appareil parent" -#: netbox/dcim/models/devices.py:1438 netbox/extras/models/customfields.py:225 +#: netbox/dcim/models/devices.py:1443 netbox/extras/models/customfields.py:225 #: netbox/extras/models/models.py:107 netbox/extras/models/models.py:694 -#: netbox/netbox/models/__init__.py:115 +#: netbox/netbox/models/__init__.py:120 msgid "comments" msgstr "commentaires" -#: netbox/dcim/models/devices.py:1454 +#: netbox/dcim/models/devices.py:1459 msgid "virtual device context" msgstr "contexte du périphérique virtuel" -#: netbox/dcim/models/devices.py:1455 +#: netbox/dcim/models/devices.py:1460 msgid "virtual device contexts" msgstr "contextes de périphériques virtuels" -#: netbox/dcim/models/devices.py:1487 +#: netbox/dcim/models/devices.py:1489 #, python-brace-format msgid "{ip} is not an IPv{family} address." msgstr "{ip} n'est pas un IPV{family} adresse." -#: netbox/dcim/models/devices.py:1493 +#: netbox/dcim/models/devices.py:1495 msgid "Primary IP address must belong to an interface on the assigned device." msgstr "" "L'adresse IP principale doit appartenir à une interface sur l'appareil " "attribué." -#: netbox/dcim/models/mixins.py:15 netbox/extras/models/configs.py:41 -#: netbox/extras/models/models.py:313 netbox/extras/models/models.py:522 -#: netbox/extras/models/search.py:48 netbox/ipam/models/ip.py:194 -msgid "weight" -msgstr "poids" +#: netbox/dcim/models/devices.py:1527 +msgid "MAC addresses" +msgstr "Adresses MAC" -#: netbox/dcim/models/mixins.py:22 -msgid "weight unit" -msgstr "unité de poids" +#: netbox/dcim/models/devices.py:1559 +msgid "" +"Cannot unassign MAC Address while it is designated as the primary MAC for an" +" object" +msgstr "" +"Impossible d'annuler l'attribution d'une adresse MAC alors qu'elle est " +"désignée comme adresse MAC principale pour un objet" -#: netbox/dcim/models/mixins.py:51 -msgid "Must specify a unit when setting a weight" -msgstr "Doit spécifier une unité lors de la définition d'un poids" +#: netbox/dcim/models/devices.py:1563 +msgid "" +"Cannot reassign MAC Address while it is designated as the primary MAC for an" +" object" +msgstr "" +"Impossible de réattribuer l'adresse MAC lorsqu'elle est désignée comme " +"adresse MAC principale pour un objet" + +#: netbox/dcim/models/mixins.py:94 +#, python-brace-format +msgid "Please select a {scope_type}." +msgstr "Veuillez sélectionner un {scope_type}." #: netbox/dcim/models/power.py:55 msgid "power panel" @@ -6366,7 +6910,7 @@ msgstr "panneau d'alimentation" msgid "power panels" msgstr "panneaux d'alimentation" -#: netbox/dcim/models/power.py:70 +#: netbox/dcim/models/power.py:67 #, python-brace-format msgid "" "Location {location} ({location_site}) is in a different site than {site}" @@ -6374,43 +6918,43 @@ msgstr "" "Emplacement {location} ({location_site}) se trouve sur un site différent de " "{site}" -#: netbox/dcim/models/power.py:108 +#: netbox/dcim/models/power.py:106 msgid "supply" msgstr "fourniture" -#: netbox/dcim/models/power.py:114 +#: netbox/dcim/models/power.py:112 msgid "phase" msgstr "phase" -#: netbox/dcim/models/power.py:120 +#: netbox/dcim/models/power.py:118 msgid "voltage" msgstr "tension" -#: netbox/dcim/models/power.py:125 +#: netbox/dcim/models/power.py:123 msgid "amperage" msgstr "ampérage" -#: netbox/dcim/models/power.py:130 +#: netbox/dcim/models/power.py:128 msgid "max utilization" msgstr "utilisation maximale" -#: netbox/dcim/models/power.py:133 +#: netbox/dcim/models/power.py:131 msgid "Maximum permissible draw (percentage)" msgstr "Tirage maximum autorisé (pourcentage)" -#: netbox/dcim/models/power.py:136 +#: netbox/dcim/models/power.py:134 msgid "available power" msgstr "puissance disponible" -#: netbox/dcim/models/power.py:164 +#: netbox/dcim/models/power.py:162 msgid "power feed" msgstr "alimentation" -#: netbox/dcim/models/power.py:165 +#: netbox/dcim/models/power.py:163 msgid "power feeds" msgstr "alimentations" -#: netbox/dcim/models/power.py:179 +#: netbox/dcim/models/power.py:174 #, python-brace-format msgid "" "Rack {rack} ({rack_site}) and power panel {powerpanel} ({powerpanel_site}) " @@ -6419,57 +6963,57 @@ msgstr "" "Baie {rack} ({rack_site}) et panneau d'alimentation {powerpanel} " "({powerpanel_site}) se trouvent sur des sites différents." -#: netbox/dcim/models/power.py:190 +#: netbox/dcim/models/power.py:185 msgid "Voltage cannot be negative for AC supply" msgstr "" "La tension ne peut pas être négative pour l'alimentation en courant " "alternatif" -#: netbox/dcim/models/racks.py:47 +#: netbox/dcim/models/racks.py:46 msgid "width" msgstr "largeur" -#: netbox/dcim/models/racks.py:48 +#: netbox/dcim/models/racks.py:47 msgid "Rail-to-rail width" msgstr "Largeur rail à rail" -#: netbox/dcim/models/racks.py:56 +#: netbox/dcim/models/racks.py:55 msgid "Height in rack units" msgstr "Hauteur en U de la baie" -#: netbox/dcim/models/racks.py:60 +#: netbox/dcim/models/racks.py:59 msgid "starting unit" msgstr "unité de départ" -#: netbox/dcim/models/racks.py:62 +#: netbox/dcim/models/racks.py:61 msgid "Starting unit for rack" msgstr "Unité de départ pour baie" -#: netbox/dcim/models/racks.py:66 +#: netbox/dcim/models/racks.py:65 msgid "descending units" msgstr "unités décroissantes" -#: netbox/dcim/models/racks.py:67 +#: netbox/dcim/models/racks.py:66 msgid "Units are numbered top-to-bottom" msgstr "Les unités sont numérotées de haut en bas" -#: netbox/dcim/models/racks.py:72 +#: netbox/dcim/models/racks.py:71 msgid "outer width" msgstr "largeur extérieure" -#: netbox/dcim/models/racks.py:75 +#: netbox/dcim/models/racks.py:74 msgid "Outer dimension of rack (width)" msgstr "Dimension extérieure de la baie (largeur)" -#: netbox/dcim/models/racks.py:78 +#: netbox/dcim/models/racks.py:77 msgid "outer depth" msgstr "profondeur extérieure" -#: netbox/dcim/models/racks.py:81 +#: netbox/dcim/models/racks.py:80 msgid "Outer dimension of rack (depth)" msgstr "Dimension extérieure de la baie (profondeur)" -#: netbox/dcim/models/racks.py:84 +#: netbox/dcim/models/racks.py:83 msgid "outer unit" msgstr "unité extérieure" @@ -6493,7 +7037,7 @@ msgstr "poids maximum" msgid "Maximum load capacity for the rack" msgstr "Capacité de charge maximale de la baie" -#: netbox/dcim/models/racks.py:125 netbox/dcim/models/racks.py:252 +#: netbox/dcim/models/racks.py:125 netbox/dcim/models/racks.py:247 msgid "form factor" msgstr "facteur de forme" @@ -6505,56 +7049,56 @@ msgstr "type de baie" msgid "rack types" msgstr "types de baies" -#: netbox/dcim/models/racks.py:180 netbox/dcim/models/racks.py:379 +#: netbox/dcim/models/racks.py:177 netbox/dcim/models/racks.py:368 msgid "Must specify a unit when setting an outer width/depth" msgstr "" "Doit spécifier une unité lors du réglage d'une largeur/profondeur extérieure" -#: netbox/dcim/models/racks.py:184 netbox/dcim/models/racks.py:383 +#: netbox/dcim/models/racks.py:181 netbox/dcim/models/racks.py:372 msgid "Must specify a unit when setting a maximum weight" msgstr "Doit spécifier une unité lors de la définition d'un poids maximum" -#: netbox/dcim/models/racks.py:230 +#: netbox/dcim/models/racks.py:227 msgid "rack role" msgstr "rôle de la baie" -#: netbox/dcim/models/racks.py:231 +#: netbox/dcim/models/racks.py:228 msgid "rack roles" msgstr "rôles de la baie" -#: netbox/dcim/models/racks.py:274 +#: netbox/dcim/models/racks.py:265 msgid "facility ID" msgstr "ID de l'établissement" -#: netbox/dcim/models/racks.py:275 +#: netbox/dcim/models/racks.py:266 msgid "Locally-assigned identifier" msgstr "Identifiant attribué localement" -#: netbox/dcim/models/racks.py:308 netbox/ipam/forms/bulk_import.py:201 -#: netbox/ipam/forms/bulk_import.py:266 netbox/ipam/forms/bulk_import.py:301 -#: netbox/ipam/forms/bulk_import.py:483 -#: netbox/virtualization/forms/bulk_import.py:112 +#: netbox/dcim/models/racks.py:299 netbox/ipam/forms/bulk_import.py:197 +#: netbox/ipam/forms/bulk_import.py:265 netbox/ipam/forms/bulk_import.py:300 +#: netbox/ipam/forms/bulk_import.py:482 +#: netbox/virtualization/forms/bulk_import.py:118 msgid "Functional role" msgstr "Rôle fonctionnel" -#: netbox/dcim/models/racks.py:321 +#: netbox/dcim/models/racks.py:312 msgid "A unique tag used to identify this rack" msgstr "Une étiquette unique utilisée pour identifier cette baie" -#: netbox/dcim/models/racks.py:359 +#: netbox/dcim/models/racks.py:351 msgid "rack" msgstr "baie" -#: netbox/dcim/models/racks.py:360 +#: netbox/dcim/models/racks.py:352 msgid "racks" msgstr "baies" -#: netbox/dcim/models/racks.py:375 +#: netbox/dcim/models/racks.py:364 #, python-brace-format msgid "Assigned location must belong to parent site ({site})." msgstr "L'emplacement attribué doit appartenir au site parent ({site})." -#: netbox/dcim/models/racks.py:393 +#: netbox/dcim/models/racks.py:387 #, python-brace-format msgid "" "Rack must be at least {min_height}U tall to house currently installed " @@ -6563,7 +7107,7 @@ msgstr "" "La baie doit être au moins {min_height} pour héberger les appareils " "actuellement installés." -#: netbox/dcim/models/racks.py:400 +#: netbox/dcim/models/racks.py:396 #, python-brace-format msgid "" "Rack unit numbering must begin at {position} or less to house currently " @@ -6572,118 +7116,118 @@ msgstr "" "La numérotation des unités de baie doit commencer à {position} ou moins pour" " héberger les appareils actuellement installés." -#: netbox/dcim/models/racks.py:408 +#: netbox/dcim/models/racks.py:404 #, python-brace-format msgid "Location must be from the same site, {site}." msgstr "L'emplacement doit provenir du même site, {site}." -#: netbox/dcim/models/racks.py:670 +#: netbox/dcim/models/racks.py:666 msgid "units" msgstr "des unités" -#: netbox/dcim/models/racks.py:696 +#: netbox/dcim/models/racks.py:692 msgid "rack reservation" msgstr "réservation de baie" -#: netbox/dcim/models/racks.py:697 +#: netbox/dcim/models/racks.py:693 msgid "rack reservations" msgstr "réservations de baies" -#: netbox/dcim/models/racks.py:714 +#: netbox/dcim/models/racks.py:707 #, python-brace-format msgid "Invalid unit(s) for {height}U rack: {unit_list}" msgstr "Unité(s) non valide(s) pour une baie à {height}U : {unit_list}" -#: netbox/dcim/models/racks.py:727 +#: netbox/dcim/models/racks.py:720 #, python-brace-format msgid "The following units have already been reserved: {unit_list}" msgstr "Les unités suivantes ont déjà été réservées : {unit_list}" -#: netbox/dcim/models/sites.py:49 +#: netbox/dcim/models/sites.py:53 msgid "A top-level region with this name already exists." msgstr "Une région de niveau supérieur portant ce nom existe déjà." -#: netbox/dcim/models/sites.py:59 +#: netbox/dcim/models/sites.py:63 msgid "A top-level region with this slug already exists." msgstr "Une région de niveau supérieur contenant ce slug existe déjà." -#: netbox/dcim/models/sites.py:62 +#: netbox/dcim/models/sites.py:66 msgid "region" msgstr "région" -#: netbox/dcim/models/sites.py:63 +#: netbox/dcim/models/sites.py:67 msgid "regions" msgstr "régions" -#: netbox/dcim/models/sites.py:102 +#: netbox/dcim/models/sites.py:109 msgid "A top-level site group with this name already exists." msgstr "Un groupe de sites de niveau supérieur portant ce nom existe déjà." -#: netbox/dcim/models/sites.py:112 +#: netbox/dcim/models/sites.py:119 msgid "A top-level site group with this slug already exists." msgstr "Un groupe de sites de niveau supérieur contenant ce slug existe déjà." -#: netbox/dcim/models/sites.py:115 +#: netbox/dcim/models/sites.py:122 msgid "site group" msgstr "groupe de sites" -#: netbox/dcim/models/sites.py:116 +#: netbox/dcim/models/sites.py:123 msgid "site groups" msgstr "groupes de sites" -#: netbox/dcim/models/sites.py:141 +#: netbox/dcim/models/sites.py:145 msgid "Full name of the site" msgstr "Nom complet du site" -#: netbox/dcim/models/sites.py:181 netbox/dcim/models/sites.py:279 +#: netbox/dcim/models/sites.py:181 netbox/dcim/models/sites.py:283 msgid "facility" msgstr "installation" -#: netbox/dcim/models/sites.py:184 netbox/dcim/models/sites.py:282 +#: netbox/dcim/models/sites.py:184 netbox/dcim/models/sites.py:286 msgid "Local facility ID or description" msgstr "Identifiant ou description de l'établissement local" -#: netbox/dcim/models/sites.py:195 +#: netbox/dcim/models/sites.py:196 msgid "physical address" msgstr "adresse physique" -#: netbox/dcim/models/sites.py:198 +#: netbox/dcim/models/sites.py:199 msgid "Physical location of the building" msgstr "Emplacement physique du bâtiment" -#: netbox/dcim/models/sites.py:201 +#: netbox/dcim/models/sites.py:202 msgid "shipping address" msgstr "adresse de livraison" -#: netbox/dcim/models/sites.py:204 +#: netbox/dcim/models/sites.py:205 msgid "If different from the physical address" msgstr "Si elle est différente de l'adresse physique" -#: netbox/dcim/models/sites.py:238 +#: netbox/dcim/models/sites.py:245 msgid "site" msgstr "site" -#: netbox/dcim/models/sites.py:239 +#: netbox/dcim/models/sites.py:246 msgid "sites" msgstr "sites" -#: netbox/dcim/models/sites.py:309 +#: netbox/dcim/models/sites.py:319 msgid "A location with this name already exists within the specified site." msgstr "Un emplacement portant ce nom existe déjà au sein du site spécifié." -#: netbox/dcim/models/sites.py:319 +#: netbox/dcim/models/sites.py:329 msgid "A location with this slug already exists within the specified site." msgstr "Un emplacement contenant ce slug existe déjà dans le site spécifié." -#: netbox/dcim/models/sites.py:322 +#: netbox/dcim/models/sites.py:332 msgid "location" msgstr "emplacement" -#: netbox/dcim/models/sites.py:323 +#: netbox/dcim/models/sites.py:333 msgid "locations" msgstr "les lieux" -#: netbox/dcim/models/sites.py:337 +#: netbox/dcim/models/sites.py:344 #, python-brace-format msgid "Parent location ({parent}) must belong to the same site ({site})." msgstr "" @@ -6698,11 +7242,11 @@ msgstr "Terminaison A" msgid "Termination B" msgstr "Terminaison B" -#: netbox/dcim/tables/cables.py:66 netbox/wireless/tables/wirelesslink.py:23 +#: netbox/dcim/tables/cables.py:66 netbox/wireless/tables/wirelesslink.py:22 msgid "Device A" msgstr "Appareil A" -#: netbox/dcim/tables/cables.py:72 netbox/wireless/tables/wirelesslink.py:32 +#: netbox/dcim/tables/cables.py:72 netbox/wireless/tables/wirelesslink.py:31 msgid "Device B" msgstr "Appareil B" @@ -6736,97 +7280,91 @@ msgstr "Site B" msgid "Reachable" msgstr "Joignable" -#: netbox/dcim/tables/devices.py:58 netbox/dcim/tables/devices.py:106 -#: netbox/dcim/tables/racks.py:150 netbox/dcim/tables/sites.py:105 -#: netbox/dcim/tables/sites.py:148 netbox/extras/tables/tables.py:545 +#: netbox/dcim/tables/devices.py:69 netbox/dcim/tables/devices.py:117 +#: netbox/dcim/tables/racks.py:149 netbox/dcim/tables/sites.py:104 +#: netbox/dcim/tables/sites.py:147 netbox/extras/tables/tables.py:545 #: netbox/netbox/navigation/menu.py:69 netbox/netbox/navigation/menu.py:73 #: netbox/netbox/navigation/menu.py:75 #: netbox/virtualization/forms/model_forms.py:122 -#: netbox/virtualization/tables/clusters.py:83 -#: netbox/virtualization/views.py:204 +#: netbox/virtualization/tables/clusters.py:87 +#: netbox/virtualization/views.py:216 msgid "Devices" msgstr "Appareils" -#: netbox/dcim/tables/devices.py:63 netbox/dcim/tables/devices.py:111 -#: netbox/virtualization/tables/clusters.py:88 +#: netbox/dcim/tables/devices.py:74 netbox/dcim/tables/devices.py:122 +#: netbox/virtualization/tables/clusters.py:92 msgid "VMs" msgstr "machines virtuelles" -#: netbox/dcim/tables/devices.py:100 netbox/dcim/tables/devices.py:216 -#: netbox/extras/forms/model_forms.py:630 +#: netbox/dcim/tables/devices.py:111 netbox/dcim/tables/devices.py:227 +#: netbox/extras/forms/model_forms.py:644 #: netbox/templates/dcim/device.html:112 -#: netbox/templates/dcim/device/render_config.html:11 -#: netbox/templates/dcim/device/render_config.html:14 #: netbox/templates/dcim/devicerole.html:44 #: netbox/templates/dcim/platform.html:41 #: netbox/templates/extras/configtemplate.html:10 +#: netbox/templates/extras/object_render_config.html:12 +#: netbox/templates/extras/object_render_config.html:15 #: netbox/templates/virtualization/virtualmachine.html:48 -#: netbox/templates/virtualization/virtualmachine/render_config.html:11 -#: netbox/templates/virtualization/virtualmachine/render_config.html:14 -#: netbox/virtualization/tables/virtualmachines.py:107 +#: netbox/virtualization/tables/virtualmachines.py:77 msgid "Config Template" msgstr "Modèle de configuration" -#: netbox/dcim/tables/devices.py:150 netbox/templates/dcim/sitegroup.html:26 -msgid "Site Group" -msgstr "Groupe de sites" - -#: netbox/dcim/tables/devices.py:187 netbox/dcim/tables/devices.py:1068 -#: netbox/ipam/forms/bulk_import.py:527 netbox/ipam/forms/model_forms.py:306 -#: netbox/ipam/forms/model_forms.py:319 netbox/ipam/tables/ip.py:356 -#: netbox/ipam/tables/ip.py:423 netbox/ipam/tables/ip.py:446 +#: netbox/dcim/tables/devices.py:198 netbox/dcim/tables/devices.py:1100 +#: netbox/ipam/forms/bulk_import.py:562 netbox/ipam/forms/model_forms.py:316 +#: netbox/ipam/forms/model_forms.py:329 netbox/ipam/tables/ip.py:308 +#: netbox/ipam/tables/ip.py:375 netbox/ipam/tables/ip.py:398 #: netbox/templates/ipam/ipaddress.html:11 -#: netbox/virtualization/tables/virtualmachines.py:95 +#: netbox/virtualization/tables/virtualmachines.py:65 msgid "IP Address" msgstr "Adresse IP" -#: netbox/dcim/tables/devices.py:191 netbox/dcim/tables/devices.py:1072 -#: netbox/virtualization/tables/virtualmachines.py:86 +#: netbox/dcim/tables/devices.py:202 netbox/dcim/tables/devices.py:1104 +#: netbox/virtualization/tables/virtualmachines.py:56 msgid "IPv4 Address" msgstr "Adresse IPv4" -#: netbox/dcim/tables/devices.py:195 netbox/dcim/tables/devices.py:1076 -#: netbox/virtualization/tables/virtualmachines.py:90 +#: netbox/dcim/tables/devices.py:206 netbox/dcim/tables/devices.py:1108 +#: netbox/virtualization/tables/virtualmachines.py:60 msgid "IPv6 Address" msgstr "Adresse IPv6" -#: netbox/dcim/tables/devices.py:210 +#: netbox/dcim/tables/devices.py:221 msgid "VC Position" msgstr "Position en VC" -#: netbox/dcim/tables/devices.py:213 +#: netbox/dcim/tables/devices.py:224 msgid "VC Priority" msgstr "Priorité VC" -#: netbox/dcim/tables/devices.py:220 netbox/templates/dcim/device_edit.html:38 +#: netbox/dcim/tables/devices.py:231 netbox/templates/dcim/device_edit.html:38 #: netbox/templates/dcim/devicebay_populate.html:16 msgid "Parent Device" msgstr "Appareil parent" -#: netbox/dcim/tables/devices.py:225 +#: netbox/dcim/tables/devices.py:236 msgid "Position (Device Bay)" msgstr "Position (baie de l'appareil)" -#: netbox/dcim/tables/devices.py:234 +#: netbox/dcim/tables/devices.py:245 msgid "Console ports" msgstr "Ports de console" -#: netbox/dcim/tables/devices.py:237 +#: netbox/dcim/tables/devices.py:248 msgid "Console server ports" msgstr "Ports du serveur de consoles" -#: netbox/dcim/tables/devices.py:240 +#: netbox/dcim/tables/devices.py:251 msgid "Power ports" msgstr "Ports d'alimentation" -#: netbox/dcim/tables/devices.py:243 +#: netbox/dcim/tables/devices.py:254 msgid "Power outlets" msgstr "Prises de courant" -#: netbox/dcim/tables/devices.py:246 netbox/dcim/tables/devices.py:1081 -#: netbox/dcim/tables/devicetypes.py:128 netbox/dcim/views.py:1040 -#: netbox/dcim/views.py:1279 netbox/dcim/views.py:1975 -#: netbox/netbox/navigation/menu.py:94 netbox/netbox/navigation/menu.py:250 +#: netbox/dcim/tables/devices.py:257 netbox/dcim/tables/devices.py:1113 +#: netbox/dcim/tables/devicetypes.py:133 netbox/dcim/views.py:1144 +#: netbox/dcim/views.py:1388 netbox/dcim/views.py:2139 +#: netbox/netbox/navigation/menu.py:94 netbox/netbox/navigation/menu.py:258 #: netbox/templates/dcim/device/base.html:37 #: netbox/templates/dcim/device_list.html:43 #: netbox/templates/dcim/devicetype/base.html:34 @@ -6836,35 +7374,35 @@ msgstr "Prises de courant" #: netbox/templates/dcim/virtualdevicecontext.html:81 #: netbox/templates/virtualization/virtualmachine/base.html:27 #: netbox/templates/virtualization/virtualmachine_list.html:14 -#: netbox/virtualization/tables/virtualmachines.py:101 -#: netbox/virtualization/views.py:364 netbox/wireless/tables/wirelesslan.py:55 +#: netbox/virtualization/tables/virtualmachines.py:71 +#: netbox/virtualization/views.py:381 netbox/wireless/tables/wirelesslan.py:63 msgid "Interfaces" msgstr "Interfaces" -#: netbox/dcim/tables/devices.py:249 +#: netbox/dcim/tables/devices.py:260 msgid "Front ports" msgstr "Ports avant" -#: netbox/dcim/tables/devices.py:255 +#: netbox/dcim/tables/devices.py:266 msgid "Device bays" msgstr "Baies pour appareils" -#: netbox/dcim/tables/devices.py:258 +#: netbox/dcim/tables/devices.py:269 msgid "Module bays" msgstr "Baies pour modules" -#: netbox/dcim/tables/devices.py:261 +#: netbox/dcim/tables/devices.py:272 msgid "Inventory items" msgstr "Articles d'inventaire" -#: netbox/dcim/tables/devices.py:305 netbox/dcim/tables/modules.py:57 +#: netbox/dcim/tables/devices.py:315 netbox/dcim/tables/modules.py:57 #: netbox/templates/dcim/modulebay.html:17 msgid "Module Bay" msgstr "Module Bay" -#: netbox/dcim/tables/devices.py:318 netbox/dcim/tables/devicetypes.py:47 -#: netbox/dcim/tables/devicetypes.py:143 netbox/dcim/views.py:1115 -#: netbox/dcim/views.py:2073 netbox/netbox/navigation/menu.py:103 +#: netbox/dcim/tables/devices.py:328 netbox/dcim/tables/devicetypes.py:52 +#: netbox/dcim/tables/devicetypes.py:148 netbox/dcim/views.py:1219 +#: netbox/dcim/views.py:2237 netbox/netbox/navigation/menu.py:103 #: netbox/templates/dcim/device/base.html:52 #: netbox/templates/dcim/device_list.html:71 #: netbox/templates/dcim/devicetype/base.html:49 @@ -6873,124 +7411,133 @@ msgstr "Module Bay" msgid "Inventory Items" msgstr "Articles d'inventaire" -#: netbox/dcim/tables/devices.py:333 +#: netbox/dcim/tables/devices.py:343 msgid "Cable Color" msgstr "Couleur du câble" -#: netbox/dcim/tables/devices.py:339 +#: netbox/dcim/tables/devices.py:349 msgid "Link Peers" msgstr "Lier les pairs" -#: netbox/dcim/tables/devices.py:342 +#: netbox/dcim/tables/devices.py:352 msgid "Mark Connected" msgstr "Marquer comme connecté" -#: netbox/dcim/tables/devices.py:461 +#: netbox/dcim/tables/devices.py:471 msgid "Maximum draw (W)" msgstr "Tirage maximal (W)" -#: netbox/dcim/tables/devices.py:464 +#: netbox/dcim/tables/devices.py:474 msgid "Allocated draw (W)" msgstr "Tirage alloué (W)" -#: netbox/dcim/tables/devices.py:558 netbox/ipam/forms/model_forms.py:734 -#: netbox/ipam/tables/fhrp.py:28 netbox/ipam/views.py:596 -#: netbox/ipam/views.py:696 netbox/netbox/navigation/menu.py:158 -#: netbox/netbox/navigation/menu.py:160 -#: netbox/templates/dcim/interface.html:339 +#: netbox/dcim/tables/devices.py:572 netbox/ipam/forms/model_forms.py:784 +#: netbox/ipam/tables/fhrp.py:28 netbox/ipam/views.py:633 +#: netbox/ipam/views.py:738 netbox/netbox/navigation/menu.py:164 +#: netbox/netbox/navigation/menu.py:166 +#: netbox/templates/dcim/interface.html:396 #: netbox/templates/ipam/ipaddress_bulk_add.html:15 #: netbox/templates/ipam/service.html:40 -#: netbox/templates/virtualization/vminterface.html:85 +#: netbox/templates/virtualization/vminterface.html:101 #: netbox/vpn/tables/tunnels.py:98 msgid "IP Addresses" msgstr "Adresses IP" -#: netbox/dcim/tables/devices.py:564 netbox/netbox/navigation/menu.py:202 +#: netbox/dcim/tables/devices.py:578 netbox/netbox/navigation/menu.py:210 #: netbox/templates/ipam/inc/panels/fhrp_groups.html:6 msgid "FHRP Groups" msgstr "Groupes FHRP" -#: netbox/dcim/tables/devices.py:576 netbox/templates/dcim/interface.html:89 -#: netbox/templates/virtualization/vminterface.html:67 +#: netbox/dcim/tables/devices.py:590 netbox/templates/dcim/interface.html:95 +#: netbox/templates/virtualization/vminterface.html:59 #: netbox/templates/vpn/tunnel.html:18 #: netbox/templates/vpn/tunneltermination.html:13 #: netbox/vpn/forms/bulk_edit.py:76 netbox/vpn/forms/bulk_import.py:76 #: netbox/vpn/forms/filtersets.py:42 netbox/vpn/forms/filtersets.py:82 -#: netbox/vpn/forms/model_forms.py:60 netbox/vpn/forms/model_forms.py:145 +#: netbox/vpn/forms/model_forms.py:61 netbox/vpn/forms/model_forms.py:146 #: netbox/vpn/tables/tunnels.py:78 msgid "Tunnel" msgstr "Tunnel" -#: netbox/dcim/tables/devices.py:604 netbox/dcim/tables/devicetypes.py:227 +#: netbox/dcim/tables/devices.py:626 netbox/dcim/tables/devicetypes.py:234 #: netbox/templates/dcim/interface.html:65 msgid "Management Only" msgstr "Gestion uniquement" -#: netbox/dcim/tables/devices.py:623 +#: netbox/dcim/tables/devices.py:645 msgid "VDCs" msgstr "VDC" -#: netbox/dcim/tables/devices.py:873 netbox/templates/dcim/modulebay.html:53 +#: netbox/dcim/tables/devices.py:652 netbox/templates/dcim/interface.html:163 +msgid "Virtual Circuit" +msgstr "Circuit virtuel" + +#: netbox/dcim/tables/devices.py:904 netbox/templates/dcim/modulebay.html:53 msgid "Installed Module" msgstr "Module installé" -#: netbox/dcim/tables/devices.py:876 +#: netbox/dcim/tables/devices.py:907 msgid "Module Serial" msgstr "Série du module" -#: netbox/dcim/tables/devices.py:880 +#: netbox/dcim/tables/devices.py:911 msgid "Module Asset Tag" msgstr "Étiquette d'actif du module" -#: netbox/dcim/tables/devices.py:889 +#: netbox/dcim/tables/devices.py:920 msgid "Module Status" msgstr "État du module" -#: netbox/dcim/tables/devices.py:944 netbox/dcim/tables/devicetypes.py:312 -#: netbox/templates/dcim/inventoryitem.html:40 +#: netbox/dcim/tables/devices.py:974 netbox/dcim/tables/devicetypes.py:319 +#: netbox/templates/dcim/inventoryitem.html:44 msgid "Component" msgstr "Composant" -#: netbox/dcim/tables/devices.py:1000 +#: netbox/dcim/tables/devices.py:1032 msgid "Items" msgstr "Objets" -#: netbox/dcim/tables/devicetypes.py:37 netbox/netbox/navigation/menu.py:84 +#: netbox/dcim/tables/devicetypes.py:37 netbox/netbox/navigation/menu.py:60 +#: netbox/netbox/navigation/menu.py:62 +msgid "Rack Types" +msgstr "Types de baie" + +#: netbox/dcim/tables/devicetypes.py:42 netbox/netbox/navigation/menu.py:84 #: netbox/netbox/navigation/menu.py:86 msgid "Device Types" msgstr "Types d'appareils" -#: netbox/dcim/tables/devicetypes.py:42 netbox/netbox/navigation/menu.py:87 +#: netbox/dcim/tables/devicetypes.py:47 netbox/netbox/navigation/menu.py:87 msgid "Module Types" msgstr "Types de modules" -#: netbox/dcim/tables/devicetypes.py:52 netbox/extras/forms/filtersets.py:371 -#: netbox/extras/forms/model_forms.py:537 netbox/extras/tables/tables.py:540 +#: netbox/dcim/tables/devicetypes.py:57 netbox/extras/forms/filtersets.py:378 +#: netbox/extras/forms/model_forms.py:551 netbox/extras/tables/tables.py:540 #: netbox/netbox/navigation/menu.py:78 msgid "Platforms" msgstr "Plateformes" -#: netbox/dcim/tables/devicetypes.py:84 +#: netbox/dcim/tables/devicetypes.py:89 #: netbox/templates/dcim/devicetype.html:29 msgid "Default Platform" msgstr "Plateforme par défaut" -#: netbox/dcim/tables/devicetypes.py:88 +#: netbox/dcim/tables/devicetypes.py:93 #: netbox/templates/dcim/devicetype.html:45 msgid "Full Depth" msgstr "Pleine profondeur" -#: netbox/dcim/tables/devicetypes.py:98 +#: netbox/dcim/tables/devicetypes.py:103 msgid "U Height" msgstr "Hauteur en U" -#: netbox/dcim/tables/devicetypes.py:113 netbox/dcim/tables/modules.py:26 +#: netbox/dcim/tables/devicetypes.py:118 netbox/dcim/tables/modules.py:26 #: netbox/dcim/tables/racks.py:89 msgid "Instances" msgstr "Instances" -#: netbox/dcim/tables/devicetypes.py:116 netbox/dcim/views.py:980 -#: netbox/dcim/views.py:1219 netbox/dcim/views.py:1911 +#: netbox/dcim/tables/devicetypes.py:121 netbox/dcim/views.py:1084 +#: netbox/dcim/views.py:1328 netbox/dcim/views.py:2075 #: netbox/netbox/navigation/menu.py:97 #: netbox/templates/dcim/device/base.html:25 #: netbox/templates/dcim/device_list.html:15 @@ -7000,8 +7547,8 @@ msgstr "Instances" msgid "Console Ports" msgstr "Ports de console" -#: netbox/dcim/tables/devicetypes.py:119 netbox/dcim/views.py:995 -#: netbox/dcim/views.py:1234 netbox/dcim/views.py:1927 +#: netbox/dcim/tables/devicetypes.py:124 netbox/dcim/views.py:1099 +#: netbox/dcim/views.py:1343 netbox/dcim/views.py:2091 #: netbox/netbox/navigation/menu.py:98 #: netbox/templates/dcim/device/base.html:28 #: netbox/templates/dcim/device_list.html:22 @@ -7011,8 +7558,8 @@ msgstr "Ports de console" msgid "Console Server Ports" msgstr "Ports du serveur de consoles" -#: netbox/dcim/tables/devicetypes.py:122 netbox/dcim/views.py:1010 -#: netbox/dcim/views.py:1249 netbox/dcim/views.py:1943 +#: netbox/dcim/tables/devicetypes.py:127 netbox/dcim/views.py:1114 +#: netbox/dcim/views.py:1358 netbox/dcim/views.py:2107 #: netbox/netbox/navigation/menu.py:99 #: netbox/templates/dcim/device/base.html:31 #: netbox/templates/dcim/device_list.html:29 @@ -7022,8 +7569,8 @@ msgstr "Ports du serveur de consoles" msgid "Power Ports" msgstr "Ports d'alimentation" -#: netbox/dcim/tables/devicetypes.py:125 netbox/dcim/views.py:1025 -#: netbox/dcim/views.py:1264 netbox/dcim/views.py:1959 +#: netbox/dcim/tables/devicetypes.py:130 netbox/dcim/views.py:1129 +#: netbox/dcim/views.py:1373 netbox/dcim/views.py:2123 #: netbox/netbox/navigation/menu.py:100 #: netbox/templates/dcim/device/base.html:34 #: netbox/templates/dcim/device_list.html:36 @@ -7033,8 +7580,8 @@ msgstr "Ports d'alimentation" msgid "Power Outlets" msgstr "Prises de courant" -#: netbox/dcim/tables/devicetypes.py:131 netbox/dcim/views.py:1055 -#: netbox/dcim/views.py:1294 netbox/dcim/views.py:1997 +#: netbox/dcim/tables/devicetypes.py:136 netbox/dcim/views.py:1159 +#: netbox/dcim/views.py:1403 netbox/dcim/views.py:2161 #: netbox/netbox/navigation/menu.py:95 #: netbox/templates/dcim/device/base.html:40 #: netbox/templates/dcim/devicetype/base.html:37 @@ -7043,8 +7590,8 @@ msgstr "Prises de courant" msgid "Front Ports" msgstr "Ports avant" -#: netbox/dcim/tables/devicetypes.py:134 netbox/dcim/views.py:1070 -#: netbox/dcim/views.py:1309 netbox/dcim/views.py:2013 +#: netbox/dcim/tables/devicetypes.py:139 netbox/dcim/views.py:1174 +#: netbox/dcim/views.py:1418 netbox/dcim/views.py:2177 #: netbox/netbox/navigation/menu.py:96 #: netbox/templates/dcim/device/base.html:43 #: netbox/templates/dcim/device_list.html:50 @@ -7054,16 +7601,16 @@ msgstr "Ports avant" msgid "Rear Ports" msgstr "Ports arrière" -#: netbox/dcim/tables/devicetypes.py:137 netbox/dcim/views.py:1100 -#: netbox/dcim/views.py:2053 netbox/netbox/navigation/menu.py:102 +#: netbox/dcim/tables/devicetypes.py:142 netbox/dcim/views.py:1204 +#: netbox/dcim/views.py:2217 netbox/netbox/navigation/menu.py:102 #: netbox/templates/dcim/device/base.html:49 #: netbox/templates/dcim/device_list.html:57 #: netbox/templates/dcim/devicetype/base.html:46 msgid "Device Bays" msgstr "Baies pour appareils" -#: netbox/dcim/tables/devicetypes.py:140 netbox/dcim/views.py:1085 -#: netbox/dcim/views.py:1324 netbox/dcim/views.py:2033 +#: netbox/dcim/tables/devicetypes.py:145 netbox/dcim/views.py:1189 +#: netbox/dcim/views.py:1433 netbox/dcim/views.py:2197 #: netbox/netbox/navigation/menu.py:101 #: netbox/templates/dcim/device/base.html:46 #: netbox/templates/dcim/device_list.html:64 @@ -7073,7 +7620,7 @@ msgstr "Baies pour appareils" msgid "Module Bays" msgstr "Baies pour modules" -#: netbox/dcim/tables/power.py:36 netbox/netbox/navigation/menu.py:297 +#: netbox/dcim/tables/power.py:36 netbox/netbox/navigation/menu.py:318 #: netbox/templates/dcim/powerpanel.html:51 msgid "Power Feeds" msgstr "Alimentations" @@ -7086,111 +7633,106 @@ msgstr "Utilisation maximale" msgid "Available Power (VA)" msgstr "Puissance disponible (VA)" -#: netbox/dcim/tables/racks.py:30 netbox/dcim/tables/sites.py:143 +#: netbox/dcim/tables/racks.py:30 netbox/dcim/tables/sites.py:142 #: netbox/netbox/navigation/menu.py:43 netbox/netbox/navigation/menu.py:47 #: netbox/netbox/navigation/menu.py:49 msgid "Racks" msgstr "Baies" -#: netbox/dcim/tables/racks.py:63 netbox/dcim/tables/racks.py:142 +#: netbox/dcim/tables/racks.py:63 netbox/dcim/tables/racks.py:141 #: netbox/templates/dcim/device.html:318 #: netbox/templates/dcim/inc/panels/racktype_dimensions.html:14 msgid "Height" msgstr "Hauteur" -#: netbox/dcim/tables/racks.py:67 netbox/dcim/tables/racks.py:165 +#: netbox/dcim/tables/racks.py:67 netbox/dcim/tables/racks.py:164 #: netbox/templates/dcim/inc/panels/racktype_dimensions.html:18 msgid "Outer Width" msgstr "Largeur extérieure" -#: netbox/dcim/tables/racks.py:71 netbox/dcim/tables/racks.py:169 +#: netbox/dcim/tables/racks.py:71 netbox/dcim/tables/racks.py:168 #: netbox/templates/dcim/inc/panels/racktype_dimensions.html:28 msgid "Outer Depth" msgstr "Profondeur extérieure" -#: netbox/dcim/tables/racks.py:79 netbox/dcim/tables/racks.py:177 +#: netbox/dcim/tables/racks.py:79 netbox/dcim/tables/racks.py:176 msgid "Max Weight" msgstr "Poids maximum" -#: netbox/dcim/tables/racks.py:154 +#: netbox/dcim/tables/racks.py:153 msgid "Space" msgstr "Espace" #: netbox/dcim/tables/sites.py:30 netbox/dcim/tables/sites.py:57 -#: netbox/extras/forms/filtersets.py:351 -#: netbox/extras/forms/model_forms.py:517 netbox/ipam/forms/bulk_edit.py:131 -#: netbox/ipam/forms/model_forms.py:153 netbox/ipam/tables/asn.py:66 +#: netbox/extras/forms/filtersets.py:358 +#: netbox/extras/forms/model_forms.py:531 netbox/ipam/forms/bulk_edit.py:134 +#: netbox/ipam/forms/model_forms.py:159 netbox/ipam/tables/asn.py:66 #: netbox/netbox/navigation/menu.py:15 netbox/netbox/navigation/menu.py:17 msgid "Sites" msgstr "Sites" -#: netbox/dcim/tests/test_api.py:47 +#: netbox/dcim/tests/test_api.py:50 msgid "Test case must set peer_termination_type" msgstr "Le scénario de test doit définir peer_termination_type" -#: netbox/dcim/views.py:138 +#: netbox/dcim/views.py:137 #, python-brace-format msgid "Disconnected {count} {type}" msgstr "Déconnecté {count} {type}" -#: netbox/dcim/views.py:738 netbox/netbox/navigation/menu.py:51 +#: netbox/dcim/views.py:825 netbox/netbox/navigation/menu.py:51 msgid "Reservations" msgstr "Réservations" -#: netbox/dcim/views.py:757 netbox/templates/dcim/location.html:90 +#: netbox/dcim/views.py:844 netbox/templates/dcim/location.html:90 #: netbox/templates/dcim/site.html:140 msgid "Non-Racked Devices" msgstr "Appareils non mis en baie" -#: netbox/dcim/views.py:2086 netbox/extras/forms/model_forms.py:577 +#: netbox/dcim/views.py:2250 netbox/extras/forms/model_forms.py:591 #: netbox/templates/extras/configcontext.html:10 -#: netbox/virtualization/forms/model_forms.py:225 -#: netbox/virtualization/views.py:405 +#: netbox/virtualization/forms/model_forms.py:232 +#: netbox/virtualization/views.py:422 msgid "Config Context" msgstr "Contexte de configuration" -#: netbox/dcim/views.py:2096 netbox/virtualization/views.py:415 +#: netbox/dcim/views.py:2260 netbox/virtualization/views.py:432 msgid "Render Config" msgstr "Configuration du rendu" -#: netbox/dcim/views.py:2131 netbox/virtualization/views.py:450 -#, python-brace-format -msgid "An error occurred while rendering the template: {error}" -msgstr "Une erreur s'est produite lors du rendu du modèle : {error}" - -#: netbox/dcim/views.py:2149 netbox/extras/tables/tables.py:550 -#: netbox/netbox/navigation/menu.py:247 netbox/netbox/navigation/menu.py:249 -#: netbox/virtualization/views.py:178 +#: netbox/dcim/views.py:2273 netbox/extras/tables/tables.py:550 +#: netbox/netbox/navigation/menu.py:255 netbox/netbox/navigation/menu.py:257 +#: netbox/virtualization/views.py:190 msgid "Virtual Machines" msgstr "Machines virtuelles" -#: netbox/dcim/views.py:2907 +#: netbox/dcim/views.py:3106 #, python-brace-format msgid "Installed device {device} in bay {device_bay}." msgstr "Appareil installé {device} dans la baie {device_bay}." -#: netbox/dcim/views.py:2948 +#: netbox/dcim/views.py:3147 #, python-brace-format msgid "Removed device {device} from bay {device_bay}." msgstr "Appareil retiré {device} depuis la baie {device_bay}." -#: netbox/dcim/views.py:3054 netbox/ipam/tables/ip.py:234 +#: netbox/dcim/views.py:3263 netbox/ipam/tables/ip.py:180 msgid "Children" msgstr "Enfants" -#: netbox/dcim/views.py:3520 +#: netbox/dcim/views.py:3730 #, python-brace-format msgid "Added member {device}" msgstr "Membre ajouté {device}" -#: netbox/dcim/views.py:3567 +#: netbox/dcim/views.py:3779 #, python-brace-format msgid "Unable to remove master device {device} from the virtual chassis." msgstr "" "Impossible de supprimer le périphérique principal {device} depuis le châssis" " virtuel." -#: netbox/dcim/views.py:3580 +#: netbox/dcim/views.py:3792 #, python-brace-format msgid "Removed {device} from virtual chassis {chassis}" msgstr "Supprimé {device} depuis un châssis virtuel {chassis}" @@ -7290,7 +7832,7 @@ msgstr "Non" #: netbox/extras/choices.py:108 netbox/templates/tenancy/contact.html:57 #: netbox/tenancy/forms/bulk_edit.py:118 -#: netbox/wireless/forms/model_forms.py:168 +#: netbox/wireless/forms/model_forms.py:171 msgid "Link" msgstr "Lien" @@ -7310,15 +7852,15 @@ msgstr "Alphabétique (A-Z)" msgid "Alphabetical (Z-A)" msgstr "Alphabétique (Z-A)" -#: netbox/extras/choices.py:144 netbox/extras/choices.py:167 +#: netbox/extras/choices.py:144 netbox/extras/choices.py:165 msgid "Info" msgstr "Infos" -#: netbox/extras/choices.py:145 netbox/extras/choices.py:168 +#: netbox/extras/choices.py:145 netbox/extras/choices.py:166 msgid "Success" msgstr "Succès" -#: netbox/extras/choices.py:146 netbox/extras/choices.py:169 +#: netbox/extras/choices.py:146 netbox/extras/choices.py:167 msgid "Warning" msgstr "Avertissement" @@ -7326,52 +7868,29 @@ msgstr "Avertissement" msgid "Danger" msgstr "Danger" -#: netbox/extras/choices.py:165 +#: netbox/extras/choices.py:164 msgid "Debug" msgstr "Déboguer" -#: netbox/extras/choices.py:166 netbox/netbox/choices.py:101 -msgid "Default" -msgstr "Par défaut" - -#: netbox/extras/choices.py:170 +#: netbox/extras/choices.py:168 msgid "Failure" msgstr "Défaillance" -#: netbox/extras/choices.py:186 -msgid "Hourly" -msgstr "Toutes les heures" - -#: netbox/extras/choices.py:187 -msgid "12 hours" -msgstr "12 heures" - -#: netbox/extras/choices.py:188 -msgid "Daily" -msgstr "Tous les jours" - -#: netbox/extras/choices.py:189 -msgid "Weekly" -msgstr "Hebdo" - -#: netbox/extras/choices.py:190 -msgid "30 days" -msgstr "30 jours" - -#: netbox/extras/choices.py:226 +#: netbox/extras/choices.py:213 #: netbox/templates/dcim/virtualchassis_edit.html:107 #: netbox/templates/generic/bulk_add_component.html:68 #: netbox/templates/generic/object_edit.html:47 #: netbox/templates/generic/object_edit.html:80 +#: netbox/templates/htmx/quick_add.html:24 #: netbox/templates/ipam/inc/ipaddress_edit_header.html:7 msgid "Create" msgstr "Créez" -#: netbox/extras/choices.py:227 +#: netbox/extras/choices.py:214 msgid "Update" msgstr "Mise à jour" -#: netbox/extras/choices.py:228 +#: netbox/extras/choices.py:215 #: netbox/templates/circuits/inc/circuit_termination.html:23 #: netbox/templates/dcim/inc/panels/inventory_items.html:37 #: netbox/templates/dcim/powerpanel.html:66 @@ -7386,82 +7905,82 @@ msgstr "Mise à jour" msgid "Delete" msgstr "Supprimer" -#: netbox/extras/choices.py:252 netbox/netbox/choices.py:57 -#: netbox/netbox/choices.py:102 +#: netbox/extras/choices.py:239 netbox/netbox/choices.py:59 +#: netbox/netbox/choices.py:104 msgid "Blue" msgstr "Bleu" -#: netbox/extras/choices.py:253 netbox/netbox/choices.py:56 -#: netbox/netbox/choices.py:103 +#: netbox/extras/choices.py:240 netbox/netbox/choices.py:58 +#: netbox/netbox/choices.py:105 msgid "Indigo" msgstr "Indigo" -#: netbox/extras/choices.py:254 netbox/netbox/choices.py:54 -#: netbox/netbox/choices.py:104 +#: netbox/extras/choices.py:241 netbox/netbox/choices.py:56 +#: netbox/netbox/choices.py:106 msgid "Purple" msgstr "Violet" -#: netbox/extras/choices.py:255 netbox/netbox/choices.py:51 -#: netbox/netbox/choices.py:105 +#: netbox/extras/choices.py:242 netbox/netbox/choices.py:53 +#: netbox/netbox/choices.py:107 msgid "Pink" msgstr "Rose" -#: netbox/extras/choices.py:256 netbox/netbox/choices.py:50 -#: netbox/netbox/choices.py:106 +#: netbox/extras/choices.py:243 netbox/netbox/choices.py:52 +#: netbox/netbox/choices.py:108 msgid "Red" msgstr "Rouge" -#: netbox/extras/choices.py:257 netbox/netbox/choices.py:68 -#: netbox/netbox/choices.py:107 +#: netbox/extras/choices.py:244 netbox/netbox/choices.py:70 +#: netbox/netbox/choices.py:109 msgid "Orange" msgstr "Orange" -#: netbox/extras/choices.py:258 netbox/netbox/choices.py:66 -#: netbox/netbox/choices.py:108 +#: netbox/extras/choices.py:245 netbox/netbox/choices.py:68 +#: netbox/netbox/choices.py:110 msgid "Yellow" msgstr "Jaune" -#: netbox/extras/choices.py:259 netbox/netbox/choices.py:63 -#: netbox/netbox/choices.py:109 +#: netbox/extras/choices.py:246 netbox/netbox/choices.py:65 +#: netbox/netbox/choices.py:111 msgid "Green" msgstr "Vert" -#: netbox/extras/choices.py:260 netbox/netbox/choices.py:60 -#: netbox/netbox/choices.py:110 +#: netbox/extras/choices.py:247 netbox/netbox/choices.py:62 +#: netbox/netbox/choices.py:112 msgid "Teal" msgstr "Sarcelle" -#: netbox/extras/choices.py:261 netbox/netbox/choices.py:59 -#: netbox/netbox/choices.py:111 +#: netbox/extras/choices.py:248 netbox/netbox/choices.py:61 +#: netbox/netbox/choices.py:113 msgid "Cyan" msgstr "Cyan" -#: netbox/extras/choices.py:262 netbox/netbox/choices.py:112 +#: netbox/extras/choices.py:249 netbox/netbox/choices.py:114 msgid "Gray" msgstr "Gris" -#: netbox/extras/choices.py:263 netbox/netbox/choices.py:74 -#: netbox/netbox/choices.py:113 +#: netbox/extras/choices.py:250 netbox/netbox/choices.py:76 +#: netbox/netbox/choices.py:115 msgid "Black" msgstr "Noir" -#: netbox/extras/choices.py:264 netbox/netbox/choices.py:75 -#: netbox/netbox/choices.py:114 +#: netbox/extras/choices.py:251 netbox/netbox/choices.py:77 +#: netbox/netbox/choices.py:116 msgid "White" msgstr "Blanc" -#: netbox/extras/choices.py:279 netbox/extras/forms/model_forms.py:353 -#: netbox/extras/forms/model_forms.py:430 +#: netbox/extras/choices.py:266 netbox/extras/forms/model_forms.py:367 +#: netbox/extras/forms/model_forms.py:444 #: netbox/templates/extras/webhook.html:10 msgid "Webhook" msgstr "Webhook" -#: netbox/extras/choices.py:280 netbox/extras/forms/model_forms.py:418 +#: netbox/extras/choices.py:267 netbox/extras/forms/model_forms.py:432 #: netbox/templates/extras/script/base.html:29 msgid "Script" msgstr "Scénario" -#: netbox/extras/choices.py:281 +#: netbox/extras/choices.py:268 msgid "Notification" msgstr "Notification" @@ -7562,30 +8081,34 @@ msgstr "" msgid "RSS Feed" msgstr "Fil RSS" -#: netbox/extras/dashboard/widgets.py:279 +#: netbox/extras/dashboard/widgets.py:280 msgid "Embed an RSS feed from an external website." msgstr "Intégrez un flux RSS provenant d'un site Web externe." -#: netbox/extras/dashboard/widgets.py:286 +#: netbox/extras/dashboard/widgets.py:287 msgid "Feed URL" msgstr "URL du flux" -#: netbox/extras/dashboard/widgets.py:291 +#: netbox/extras/dashboard/widgets.py:290 +msgid "Requires external connection" +msgstr "Nécessite une connexion externe" + +#: netbox/extras/dashboard/widgets.py:296 msgid "The maximum number of objects to display" msgstr "Le nombre maximum d'objets à afficher" -#: netbox/extras/dashboard/widgets.py:296 +#: netbox/extras/dashboard/widgets.py:301 msgid "How long to stored the cached content (in seconds)" msgstr "Durée de conservation du contenu mis en cache (en secondes)" -#: netbox/extras/dashboard/widgets.py:348 +#: netbox/extras/dashboard/widgets.py:358 #: netbox/templates/account/base.html:10 #: netbox/templates/account/bookmarks.html:7 -#: netbox/templates/inc/user_menu.html:48 +#: netbox/templates/inc/user_menu.html:43 msgid "Bookmarks" msgstr "Signets" -#: netbox/extras/dashboard/widgets.py:352 +#: netbox/extras/dashboard/widgets.py:362 msgid "Show your personal bookmarks" msgstr "Afficher vos favoris personnels" @@ -7615,17 +8138,17 @@ msgid "Group (name)" msgstr "Groupe (nom)" #: netbox/extras/filtersets.py:574 -#: netbox/virtualization/forms/filtersets.py:118 +#: netbox/virtualization/forms/filtersets.py:123 msgid "Cluster type" msgstr "Type de cluster" -#: netbox/extras/filtersets.py:580 netbox/virtualization/filtersets.py:95 -#: netbox/virtualization/filtersets.py:147 +#: netbox/extras/filtersets.py:580 netbox/virtualization/filtersets.py:61 +#: netbox/virtualization/filtersets.py:113 msgid "Cluster type (slug)" msgstr "Type de cluster (slug)" #: netbox/extras/filtersets.py:601 netbox/tenancy/forms/forms.py:16 -#: netbox/tenancy/forms/forms.py:39 +#: netbox/tenancy/forms/forms.py:40 msgid "Tenant group" msgstr "Groupe d'entitées" @@ -7634,7 +8157,7 @@ msgstr "Groupe d'entitées" msgid "Tenant group (slug)" msgstr "Groupe de locataires (slug)" -#: netbox/extras/filtersets.py:623 netbox/extras/forms/model_forms.py:495 +#: netbox/extras/filtersets.py:623 netbox/extras/forms/model_forms.py:509 #: netbox/templates/extras/tag.html:11 msgid "Tag" msgstr "Étiquette" @@ -7643,60 +8166,60 @@ msgstr "Étiquette" msgid "Tag (slug)" msgstr "Étiquette (slug)" -#: netbox/extras/filtersets.py:689 netbox/extras/forms/filtersets.py:429 +#: netbox/extras/filtersets.py:689 netbox/extras/forms/filtersets.py:437 msgid "Has local config context data" msgstr "Possède des données contextuelles de configuration locales" -#: netbox/extras/forms/bulk_edit.py:35 netbox/extras/forms/filtersets.py:60 +#: netbox/extras/forms/bulk_edit.py:35 netbox/extras/forms/filtersets.py:61 msgid "Group name" msgstr "Nom du groupe" -#: netbox/extras/forms/bulk_edit.py:43 netbox/extras/forms/filtersets.py:68 +#: netbox/extras/forms/bulk_edit.py:43 netbox/extras/forms/filtersets.py:69 #: netbox/extras/tables/tables.py:65 #: netbox/templates/extras/customfield.html:38 #: netbox/templates/generic/bulk_import.html:118 msgid "Required" msgstr "Obligatoire" -#: netbox/extras/forms/bulk_edit.py:48 netbox/extras/forms/filtersets.py:75 +#: netbox/extras/forms/bulk_edit.py:48 netbox/extras/forms/filtersets.py:76 msgid "Must be unique" msgstr "Doit être unique" #: netbox/extras/forms/bulk_edit.py:61 netbox/extras/forms/bulk_import.py:60 -#: netbox/extras/forms/filtersets.py:89 +#: netbox/extras/forms/filtersets.py:90 #: netbox/extras/models/customfields.py:209 msgid "UI visible" msgstr "Interface utilisateur visible" #: netbox/extras/forms/bulk_edit.py:66 netbox/extras/forms/bulk_import.py:66 -#: netbox/extras/forms/filtersets.py:94 +#: netbox/extras/forms/filtersets.py:95 #: netbox/extras/models/customfields.py:216 msgid "UI editable" msgstr "Interface utilisateur modifiable" -#: netbox/extras/forms/bulk_edit.py:71 netbox/extras/forms/filtersets.py:97 +#: netbox/extras/forms/bulk_edit.py:71 netbox/extras/forms/filtersets.py:98 msgid "Is cloneable" msgstr "Est cloneable" -#: netbox/extras/forms/bulk_edit.py:76 netbox/extras/forms/filtersets.py:104 +#: netbox/extras/forms/bulk_edit.py:76 netbox/extras/forms/filtersets.py:105 msgid "Minimum value" msgstr "Valeur minimale" -#: netbox/extras/forms/bulk_edit.py:80 netbox/extras/forms/filtersets.py:108 +#: netbox/extras/forms/bulk_edit.py:80 netbox/extras/forms/filtersets.py:109 msgid "Maximum value" msgstr "Valeur maximale" -#: netbox/extras/forms/bulk_edit.py:84 netbox/extras/forms/filtersets.py:112 +#: netbox/extras/forms/bulk_edit.py:84 netbox/extras/forms/filtersets.py:113 msgid "Validation regex" msgstr "Regex de validation" -#: netbox/extras/forms/bulk_edit.py:91 netbox/extras/forms/filtersets.py:46 +#: netbox/extras/forms/bulk_edit.py:91 netbox/extras/forms/filtersets.py:47 #: netbox/extras/forms/model_forms.py:76 #: netbox/templates/extras/customfield.html:70 msgid "Behavior" msgstr "Comportement" -#: netbox/extras/forms/bulk_edit.py:128 netbox/extras/forms/filtersets.py:149 +#: netbox/extras/forms/bulk_edit.py:128 netbox/extras/forms/filtersets.py:152 msgid "New window" msgstr "Nouvelle fenêtre" @@ -7704,31 +8227,31 @@ msgstr "Nouvelle fenêtre" msgid "Button class" msgstr "Classe de boutons" -#: netbox/extras/forms/bulk_edit.py:154 netbox/extras/forms/filtersets.py:187 +#: netbox/extras/forms/bulk_edit.py:154 netbox/extras/forms/filtersets.py:191 #: netbox/extras/models/models.py:409 msgid "MIME type" msgstr "Type MIME" -#: netbox/extras/forms/bulk_edit.py:159 netbox/extras/forms/filtersets.py:190 +#: netbox/extras/forms/bulk_edit.py:159 netbox/extras/forms/filtersets.py:194 msgid "File extension" msgstr "Extension de fichier" -#: netbox/extras/forms/bulk_edit.py:164 netbox/extras/forms/filtersets.py:194 +#: netbox/extras/forms/bulk_edit.py:164 netbox/extras/forms/filtersets.py:198 msgid "As attachment" msgstr "En pièce jointe" -#: netbox/extras/forms/bulk_edit.py:192 netbox/extras/forms/filtersets.py:236 +#: netbox/extras/forms/bulk_edit.py:192 netbox/extras/forms/filtersets.py:242 #: netbox/extras/tables/tables.py:256 #: netbox/templates/extras/savedfilter.html:29 msgid "Shared" msgstr "Partagé" -#: netbox/extras/forms/bulk_edit.py:215 netbox/extras/forms/filtersets.py:265 +#: netbox/extras/forms/bulk_edit.py:215 netbox/extras/forms/filtersets.py:271 #: netbox/extras/models/models.py:174 msgid "HTTP method" msgstr "Méthode HTTP" -#: netbox/extras/forms/bulk_edit.py:219 netbox/extras/forms/filtersets.py:259 +#: netbox/extras/forms/bulk_edit.py:219 netbox/extras/forms/filtersets.py:265 #: netbox/templates/extras/webhook.html:30 msgid "Payload URL" msgstr "URL de charge utile" @@ -7747,7 +8270,7 @@ msgid "CA file path" msgstr "chemin du fichier CA" #: netbox/extras/forms/bulk_edit.py:253 netbox/extras/forms/bulk_import.py:192 -#: netbox/extras/forms/model_forms.py:377 +#: netbox/extras/forms/model_forms.py:391 msgid "Event types" msgstr "Types d'événements" @@ -7760,13 +8283,13 @@ msgstr "Est actif" #: netbox/extras/forms/bulk_import.py:139 #: netbox/extras/forms/bulk_import.py:162 #: netbox/extras/forms/bulk_import.py:186 -#: netbox/extras/forms/filtersets.py:137 netbox/extras/forms/filtersets.py:224 +#: netbox/extras/forms/filtersets.py:140 netbox/extras/forms/filtersets.py:230 #: netbox/extras/forms/model_forms.py:47 -#: netbox/extras/forms/model_forms.py:205 -#: netbox/extras/forms/model_forms.py:237 -#: netbox/extras/forms/model_forms.py:278 -#: netbox/extras/forms/model_forms.py:372 -#: netbox/extras/forms/model_forms.py:489 +#: netbox/extras/forms/model_forms.py:219 +#: netbox/extras/forms/model_forms.py:251 +#: netbox/extras/forms/model_forms.py:292 +#: netbox/extras/forms/model_forms.py:386 +#: netbox/extras/forms/model_forms.py:503 #: netbox/users/forms/model_forms.py:276 msgid "Object types" msgstr "Types d'objets" @@ -7784,10 +8307,10 @@ msgstr "Un ou plusieurs types d'objets attribués" msgid "Field data type (e.g. text, integer, etc.)" msgstr "Type de données de champ (par exemple texte, entier, etc.)" -#: netbox/extras/forms/bulk_import.py:47 netbox/extras/forms/filtersets.py:208 -#: netbox/extras/forms/filtersets.py:281 -#: netbox/extras/forms/model_forms.py:304 -#: netbox/extras/forms/model_forms.py:341 +#: netbox/extras/forms/bulk_import.py:47 netbox/extras/forms/filtersets.py:213 +#: netbox/extras/forms/filtersets.py:287 +#: netbox/extras/forms/model_forms.py:318 +#: netbox/extras/forms/model_forms.py:355 #: netbox/tenancy/forms/filtersets.py:92 msgid "Object type" msgstr "Type d'objet" @@ -7796,7 +8319,7 @@ msgstr "Type d'objet" msgid "Object type (for object or multi-object fields)" msgstr "Type d'objet (pour les champs d'objets ou multi-objets)" -#: netbox/extras/forms/bulk_import.py:53 netbox/extras/forms/filtersets.py:84 +#: netbox/extras/forms/bulk_import.py:53 netbox/extras/forms/filtersets.py:85 msgid "Choice set" msgstr "Coffret Choice" @@ -7866,7 +8389,7 @@ msgid "The classification of entry" msgstr "La classification de l'entrée" #: netbox/extras/forms/bulk_import.py:261 -#: netbox/extras/forms/model_forms.py:320 netbox/netbox/navigation/menu.py:390 +#: netbox/extras/forms/model_forms.py:334 netbox/netbox/navigation/menu.py:411 #: netbox/templates/extras/notificationgroup.html:41 #: netbox/templates/users/group.html:29 netbox/users/forms/model_forms.py:236 #: netbox/users/forms/model_forms.py:248 netbox/users/forms/model_forms.py:300 @@ -7880,7 +8403,8 @@ msgstr "" "Noms d'utilisateur séparés par des virgules, encadrés par des guillemets" #: netbox/extras/forms/bulk_import.py:268 -#: netbox/extras/forms/model_forms.py:315 netbox/netbox/navigation/menu.py:410 +#: netbox/extras/forms/model_forms.py:329 netbox/netbox/navigation/menu.py:294 +#: netbox/netbox/navigation/menu.py:431 #: netbox/templates/extras/notificationgroup.html:31 #: netbox/users/forms/model_forms.py:181 netbox/users/forms/model_forms.py:193 #: netbox/users/forms/model_forms.py:305 netbox/users/tables.py:35 @@ -7892,104 +8416,104 @@ msgstr "Groupes" msgid "Group names separated by commas, encased with double quotes" msgstr "Noms de groupes séparés par des virgules, entre guillemets doubles" -#: netbox/extras/forms/filtersets.py:52 netbox/extras/forms/model_forms.py:56 +#: netbox/extras/forms/filtersets.py:53 netbox/extras/forms/model_forms.py:56 msgid "Related object type" msgstr "Type d'objet associé" -#: netbox/extras/forms/filtersets.py:57 +#: netbox/extras/forms/filtersets.py:58 msgid "Field type" msgstr "Type de champ" -#: netbox/extras/forms/filtersets.py:120 +#: netbox/extras/forms/filtersets.py:122 #: netbox/extras/forms/model_forms.py:157 netbox/extras/tables/tables.py:91 #: netbox/templates/generic/bulk_import.html:154 msgid "Choices" msgstr "Choix" -#: netbox/extras/forms/filtersets.py:164 netbox/extras/forms/filtersets.py:319 -#: netbox/extras/forms/filtersets.py:408 -#: netbox/extras/forms/model_forms.py:572 netbox/templates/core/job.html:96 +#: netbox/extras/forms/filtersets.py:168 netbox/extras/forms/filtersets.py:326 +#: netbox/extras/forms/filtersets.py:416 +#: netbox/extras/forms/model_forms.py:586 netbox/templates/core/job.html:96 #: netbox/templates/extras/eventrule.html:84 msgid "Data" msgstr "Données" -#: netbox/extras/forms/filtersets.py:175 netbox/extras/forms/filtersets.py:333 -#: netbox/extras/forms/filtersets.py:418 netbox/netbox/choices.py:130 +#: netbox/extras/forms/filtersets.py:179 netbox/extras/forms/filtersets.py:340 +#: netbox/extras/forms/filtersets.py:426 netbox/netbox/choices.py:132 #: netbox/utilities/forms/bulk_import.py:26 msgid "Data file" msgstr "Fichier de données" -#: netbox/extras/forms/filtersets.py:183 +#: netbox/extras/forms/filtersets.py:187 msgid "Content types" msgstr "Types de contenu" -#: netbox/extras/forms/filtersets.py:255 netbox/extras/models/models.py:179 +#: netbox/extras/forms/filtersets.py:261 netbox/extras/models/models.py:179 msgid "HTTP content type" msgstr "Type de contenu HTTP" -#: netbox/extras/forms/filtersets.py:286 +#: netbox/extras/forms/filtersets.py:292 msgid "Event type" msgstr "Type d'événement" -#: netbox/extras/forms/filtersets.py:291 +#: netbox/extras/forms/filtersets.py:297 msgid "Action type" msgstr "Type d'action" -#: netbox/extras/forms/filtersets.py:307 +#: netbox/extras/forms/filtersets.py:313 msgid "Tagged object type" msgstr "Type d'objet étiqueté" -#: netbox/extras/forms/filtersets.py:312 +#: netbox/extras/forms/filtersets.py:318 msgid "Allowed object type" msgstr "Type d'objet autorisé" -#: netbox/extras/forms/filtersets.py:341 -#: netbox/extras/forms/model_forms.py:507 netbox/netbox/navigation/menu.py:18 +#: netbox/extras/forms/filtersets.py:348 +#: netbox/extras/forms/model_forms.py:521 netbox/netbox/navigation/menu.py:18 msgid "Regions" msgstr "Régions" -#: netbox/extras/forms/filtersets.py:346 -#: netbox/extras/forms/model_forms.py:512 +#: netbox/extras/forms/filtersets.py:353 +#: netbox/extras/forms/model_forms.py:526 msgid "Site groups" msgstr "Groupes de sites" -#: netbox/extras/forms/filtersets.py:356 -#: netbox/extras/forms/model_forms.py:522 netbox/netbox/navigation/menu.py:20 +#: netbox/extras/forms/filtersets.py:363 +#: netbox/extras/forms/model_forms.py:536 netbox/netbox/navigation/menu.py:20 #: netbox/templates/dcim/site.html:127 msgid "Locations" msgstr "Localisations" -#: netbox/extras/forms/filtersets.py:361 -#: netbox/extras/forms/model_forms.py:527 +#: netbox/extras/forms/filtersets.py:368 +#: netbox/extras/forms/model_forms.py:541 msgid "Device types" msgstr "Types d'appareils" -#: netbox/extras/forms/filtersets.py:366 -#: netbox/extras/forms/model_forms.py:532 +#: netbox/extras/forms/filtersets.py:373 +#: netbox/extras/forms/model_forms.py:546 msgid "Roles" msgstr "Rôles" -#: netbox/extras/forms/filtersets.py:376 -#: netbox/extras/forms/model_forms.py:542 +#: netbox/extras/forms/filtersets.py:383 +#: netbox/extras/forms/model_forms.py:556 msgid "Cluster types" msgstr "Types de clusters" -#: netbox/extras/forms/filtersets.py:381 -#: netbox/extras/forms/model_forms.py:547 +#: netbox/extras/forms/filtersets.py:388 +#: netbox/extras/forms/model_forms.py:561 msgid "Cluster groups" msgstr "Groupes de clusters" -#: netbox/extras/forms/filtersets.py:386 -#: netbox/extras/forms/model_forms.py:552 netbox/netbox/navigation/menu.py:255 -#: netbox/netbox/navigation/menu.py:257 +#: netbox/extras/forms/filtersets.py:393 +#: netbox/extras/forms/model_forms.py:566 netbox/netbox/navigation/menu.py:263 +#: netbox/netbox/navigation/menu.py:265 #: netbox/templates/virtualization/clustertype.html:30 #: netbox/virtualization/tables/clusters.py:23 #: netbox/virtualization/tables/clusters.py:45 msgid "Clusters" msgstr "Clusters" -#: netbox/extras/forms/filtersets.py:391 -#: netbox/extras/forms/model_forms.py:557 +#: netbox/extras/forms/filtersets.py:398 +#: netbox/extras/forms/model_forms.py:571 msgid "Tenant groups" msgstr "Groupes d'entitées" @@ -8040,7 +8564,7 @@ msgstr "" msgid "Related Object" msgstr "Objet associé" -#: netbox/extras/forms/model_forms.py:169 +#: netbox/extras/forms/model_forms.py:170 msgid "" "Enter one choice per line. An optional label may be specified for each " "choice by appending it with a colon. Example:" @@ -8048,16 +8572,16 @@ msgstr "" "Entrez un choix par ligne. Une étiquette facultative peut être spécifiée " "pour chaque choix en l'ajoutant par deux points. Exemple :" -#: netbox/extras/forms/model_forms.py:212 +#: netbox/extras/forms/model_forms.py:226 #: netbox/templates/extras/customlink.html:10 msgid "Custom Link" msgstr "Lien personnalisé" -#: netbox/extras/forms/model_forms.py:214 +#: netbox/extras/forms/model_forms.py:228 msgid "Templates" msgstr "Modèles" -#: netbox/extras/forms/model_forms.py:226 +#: netbox/extras/forms/model_forms.py:240 #, python-brace-format msgid "" "Jinja2 template code for the link text. Reference the object as {example}. " @@ -8067,68 +8591,68 @@ msgstr "" "{example}. Les liens qui s'affichent sous forme de texte vide ne seront pas " "affichés." -#: netbox/extras/forms/model_forms.py:230 +#: netbox/extras/forms/model_forms.py:244 #, python-brace-format msgid "" "Jinja2 template code for the link URL. Reference the object as {example}." msgstr "" "Code modèle Jinja2 pour l'URL du lien. Référencez l'objet comme {example}." -#: netbox/extras/forms/model_forms.py:241 -#: netbox/extras/forms/model_forms.py:624 +#: netbox/extras/forms/model_forms.py:255 +#: netbox/extras/forms/model_forms.py:638 msgid "Template code" msgstr "Code du modèle" -#: netbox/extras/forms/model_forms.py:247 +#: netbox/extras/forms/model_forms.py:261 #: netbox/templates/extras/exporttemplate.html:12 msgid "Export Template" msgstr "Modèle d'exportation" -#: netbox/extras/forms/model_forms.py:249 +#: netbox/extras/forms/model_forms.py:263 msgid "Rendering" msgstr "Rendu" -#: netbox/extras/forms/model_forms.py:263 -#: netbox/extras/forms/model_forms.py:649 +#: netbox/extras/forms/model_forms.py:277 +#: netbox/extras/forms/model_forms.py:663 msgid "Template content is populated from the remote source selected below." msgstr "" "Le contenu du modèle est renseigné à partir de la source distante " "sélectionnée ci-dessous." -#: netbox/extras/forms/model_forms.py:270 -#: netbox/extras/forms/model_forms.py:656 +#: netbox/extras/forms/model_forms.py:284 +#: netbox/extras/forms/model_forms.py:670 msgid "Must specify either local content or a data file" msgstr "Doit spécifier un contenu local ou un fichier de données" -#: netbox/extras/forms/model_forms.py:284 netbox/netbox/forms/mixins.py:70 +#: netbox/extras/forms/model_forms.py:298 netbox/netbox/forms/mixins.py:70 #: netbox/templates/extras/savedfilter.html:10 msgid "Saved Filter" msgstr "Filtre enregistré" -#: netbox/extras/forms/model_forms.py:334 +#: netbox/extras/forms/model_forms.py:348 msgid "A notification group specify at least one user or group." msgstr "" "Un groupe de notifications spécifie au moins un utilisateur ou un groupe." -#: netbox/extras/forms/model_forms.py:356 +#: netbox/extras/forms/model_forms.py:370 #: netbox/templates/extras/webhook.html:23 msgid "HTTP Request" msgstr "Requête HTTP" -#: netbox/extras/forms/model_forms.py:358 +#: netbox/extras/forms/model_forms.py:372 #: netbox/templates/extras/webhook.html:44 msgid "SSL" msgstr "SLL" -#: netbox/extras/forms/model_forms.py:380 +#: netbox/extras/forms/model_forms.py:394 msgid "Action choice" msgstr "Choix de l'action" -#: netbox/extras/forms/model_forms.py:385 +#: netbox/extras/forms/model_forms.py:399 msgid "Enter conditions in JSON format." msgstr "Entrez les conditions dans JSON format." -#: netbox/extras/forms/model_forms.py:389 +#: netbox/extras/forms/model_forms.py:403 msgid "" "Enter parameters to pass to the action in JSON format." @@ -8136,35 +8660,35 @@ msgstr "" "Entrez les paramètres à transmettre à l'action dans JSON format." -#: netbox/extras/forms/model_forms.py:394 +#: netbox/extras/forms/model_forms.py:408 #: netbox/templates/extras/eventrule.html:10 msgid "Event Rule" msgstr "Règle de l'événement" -#: netbox/extras/forms/model_forms.py:395 +#: netbox/extras/forms/model_forms.py:409 msgid "Triggers" msgstr "éléments déclencheurs" -#: netbox/extras/forms/model_forms.py:442 +#: netbox/extras/forms/model_forms.py:456 msgid "Notification group" msgstr "Groupe de notifications" -#: netbox/extras/forms/model_forms.py:562 netbox/netbox/navigation/menu.py:26 +#: netbox/extras/forms/model_forms.py:576 netbox/netbox/navigation/menu.py:26 #: netbox/tenancy/tables/tenants.py:22 msgid "Tenants" msgstr "Entité" -#: netbox/extras/forms/model_forms.py:606 +#: netbox/extras/forms/model_forms.py:620 msgid "Data is populated from the remote source selected below." msgstr "" "Les données sont renseignées à partir de la source distante sélectionnée ci-" "dessous." -#: netbox/extras/forms/model_forms.py:612 +#: netbox/extras/forms/model_forms.py:626 msgid "Must specify either local data or a data file" msgstr "Doit spécifier des données locales ou un fichier de données" -#: netbox/extras/forms/model_forms.py:631 +#: netbox/extras/forms/model_forms.py:645 #: netbox/templates/core/datafile.html:55 msgid "Content" msgstr "Contenu" @@ -8232,10 +8756,16 @@ msgstr "" "Les modifications apportées à la base de données ont été annulées en raison " "d'une erreur." -#: netbox/extras/management/commands/reindex.py:66 +#: netbox/extras/management/commands/reindex.py:67 msgid "No indexers found!" msgstr "Aucun indexeur n'a été trouvé !" +#: netbox/extras/models/configs.py:41 netbox/extras/models/models.py:313 +#: netbox/extras/models/models.py:522 netbox/extras/models/search.py:48 +#: netbox/ipam/models/ip.py:188 netbox/netbox/models/mixins.py:15 +msgid "weight" +msgstr "poids" + #: netbox/extras/models/configs.py:130 msgid "config context" msgstr "contexte de configuration" @@ -8612,27 +9142,27 @@ msgstr "ID d'objet non valide trouvé : {id}" msgid "Required field cannot be empty." msgstr "Le champ obligatoire ne peut pas être vide." -#: netbox/extras/models/customfields.py:763 +#: netbox/extras/models/customfields.py:764 msgid "Base set of predefined choices (optional)" msgstr "Ensemble de base de choix prédéfinis (facultatif)" -#: netbox/extras/models/customfields.py:775 +#: netbox/extras/models/customfields.py:776 msgid "Choices are automatically ordered alphabetically" msgstr "Les choix sont automatiquement classés par ordre alphabétique" -#: netbox/extras/models/customfields.py:782 +#: netbox/extras/models/customfields.py:783 msgid "custom field choice set" msgstr "ensemble de choix de champs personnalisés" -#: netbox/extras/models/customfields.py:783 +#: netbox/extras/models/customfields.py:784 msgid "custom field choice sets" msgstr "ensembles de choix de champs personnalisés" -#: netbox/extras/models/customfields.py:825 +#: netbox/extras/models/customfields.py:826 msgid "Must define base or extra choices." msgstr "Doit définir des choix de base ou supplémentaires." -#: netbox/extras/models/customfields.py:849 +#: netbox/extras/models/customfields.py:850 #, python-brace-format msgid "" "Cannot remove choice {choice} as there are {model} objects which reference " @@ -8935,21 +9465,21 @@ msgstr "entrée de journal" msgid "journal entries" msgstr "entrées de journal" -#: netbox/extras/models/models.py:718 +#: netbox/extras/models/models.py:721 #, python-brace-format msgid "Journaling is not supported for this object type ({type})." msgstr "" "La journalisation n'est pas prise en charge pour ce type d'objet ({type})." -#: netbox/extras/models/models.py:760 +#: netbox/extras/models/models.py:763 msgid "bookmark" msgstr "signet" -#: netbox/extras/models/models.py:761 +#: netbox/extras/models/models.py:764 msgid "bookmarks" msgstr "signets" -#: netbox/extras/models/models.py:774 +#: netbox/extras/models/models.py:777 #, python-brace-format msgid "Bookmarks cannot be assigned to this object type ({type})." msgstr "Les signets ne peuvent pas être affectés à ce type d'objet ({type})." @@ -9042,19 +9572,19 @@ msgstr "valeur mise en cache" msgid "cached values" msgstr "valeurs mises en cache" -#: netbox/extras/models/staging.py:44 +#: netbox/extras/models/staging.py:45 msgid "branch" msgstr "succursale" -#: netbox/extras/models/staging.py:45 +#: netbox/extras/models/staging.py:46 msgid "branches" msgstr "branches" -#: netbox/extras/models/staging.py:97 +#: netbox/extras/models/staging.py:105 msgid "staged change" msgstr "changement par étapes" -#: netbox/extras/models/staging.py:98 +#: netbox/extras/models/staging.py:106 msgid "staged changes" msgstr "modifications échelonnées" @@ -9078,11 +9608,11 @@ msgstr "article étiqueté" msgid "tagged items" msgstr "articles étiquetés" -#: netbox/extras/scripts.py:429 +#: netbox/extras/scripts.py:432 msgid "Script Data" msgstr "Données de script" -#: netbox/extras/scripts.py:433 +#: netbox/extras/scripts.py:436 msgid "Script Execution Parameters" msgstr "Paramètres d'exécution du script" @@ -9159,12 +9689,11 @@ msgstr "En tant que pièce jointe" #: netbox/extras/tables/tables.py:195 netbox/extras/tables/tables.py:487 #: netbox/extras/tables/tables.py:522 netbox/templates/core/datafile.html:24 -#: netbox/templates/dcim/device/render_config.html:22 #: netbox/templates/extras/configcontext.html:39 #: netbox/templates/extras/configtemplate.html:31 #: netbox/templates/extras/exporttemplate.html:45 +#: netbox/templates/extras/object_render_config.html:23 #: netbox/templates/generic/bulk_import.html:35 -#: netbox/templates/virtualization/virtualmachine/render_config.html:22 msgid "Data File" msgstr "Fichier de données" @@ -9257,27 +9786,32 @@ msgstr "Attribut non valide »{name}« pour demande" msgid "Invalid attribute \"{name}\" for {model}" msgstr "Attribut non valide »{name}« pour {model}" -#: netbox/extras/views.py:960 +#: netbox/extras/views.py:933 +#, python-brace-format +msgid "An error occurred while rendering the template: {error}" +msgstr "Une erreur s'est produite lors du rendu du modèle : {error}" + +#: netbox/extras/views.py:1085 msgid "Your dashboard has been reset." msgstr "Votre tableau de bord a été réinitialisé." -#: netbox/extras/views.py:1006 +#: netbox/extras/views.py:1131 msgid "Added widget: " msgstr "Widget ajouté : " -#: netbox/extras/views.py:1047 +#: netbox/extras/views.py:1172 msgid "Updated widget: " msgstr "Widget mis à jour : " -#: netbox/extras/views.py:1083 +#: netbox/extras/views.py:1208 msgid "Deleted widget: " msgstr "Widget supprimé : " -#: netbox/extras/views.py:1085 +#: netbox/extras/views.py:1210 msgid "Error deleting widget: " msgstr "Erreur lors de la suppression du widget : " -#: netbox/extras/views.py:1175 +#: netbox/extras/views.py:1308 msgid "Unable to run script: RQ worker process not running." msgstr "" "Impossible d'exécuter le script : le processus de travail RQ n'est pas en " @@ -9301,7 +9835,7 @@ msgstr "Entrez un préfixe IPv4 ou IPv6 valide et un masque en notation CIDR." msgid "Invalid IP prefix format: {data}" msgstr "Format de préfixe IP non valide : {data}" -#: netbox/ipam/api/views.py:358 +#: netbox/ipam/api/views.py:370 msgid "" "Insufficient space is available to accommodate the requested prefix size(s)" msgstr "" @@ -9344,182 +9878,174 @@ msgstr "Cisco" msgid "Plaintext" msgstr "Texte brut" +#: netbox/ipam/choices.py:166 netbox/ipam/forms/model_forms.py:800 +#: netbox/ipam/forms/model_forms.py:828 netbox/templates/ipam/service.html:21 +msgid "Service" +msgstr "Service" + +#: netbox/ipam/choices.py:167 +msgid "Customer" +msgstr "Client" + #: netbox/ipam/fields.py:36 #, python-brace-format msgid "Invalid IP address format: {address}" msgstr "Format d'adresse IP non valide : {address}" -#: netbox/ipam/filtersets.py:48 netbox/vpn/filtersets.py:304 +#: netbox/ipam/filtersets.py:51 netbox/vpn/filtersets.py:304 msgid "Import target" msgstr "Objectif d'importation" -#: netbox/ipam/filtersets.py:54 netbox/vpn/filtersets.py:310 +#: netbox/ipam/filtersets.py:57 netbox/vpn/filtersets.py:310 msgid "Import target (name)" msgstr "Cible d'importation (nom)" -#: netbox/ipam/filtersets.py:59 netbox/vpn/filtersets.py:315 +#: netbox/ipam/filtersets.py:62 netbox/vpn/filtersets.py:315 msgid "Export target" msgstr "Objectif d'exportation" -#: netbox/ipam/filtersets.py:65 netbox/vpn/filtersets.py:321 +#: netbox/ipam/filtersets.py:68 netbox/vpn/filtersets.py:321 msgid "Export target (name)" msgstr "Cible d'exportation (nom)" -#: netbox/ipam/filtersets.py:86 +#: netbox/ipam/filtersets.py:89 msgid "Importing VRF" msgstr "Importation de VRF" -#: netbox/ipam/filtersets.py:92 +#: netbox/ipam/filtersets.py:95 msgid "Import VRF (RD)" msgstr "Importer VRF (RD)" -#: netbox/ipam/filtersets.py:97 +#: netbox/ipam/filtersets.py:100 msgid "Exporting VRF" msgstr "Exportation de fichiers VRF" -#: netbox/ipam/filtersets.py:103 +#: netbox/ipam/filtersets.py:106 msgid "Export VRF (RD)" msgstr "Exporter VRF (RD)" -#: netbox/ipam/filtersets.py:108 +#: netbox/ipam/filtersets.py:111 msgid "Importing L2VPN" msgstr "Importation de L2VPN" -#: netbox/ipam/filtersets.py:114 +#: netbox/ipam/filtersets.py:117 msgid "Importing L2VPN (identifier)" msgstr "Importation de L2VPN (identifiant)" -#: netbox/ipam/filtersets.py:119 +#: netbox/ipam/filtersets.py:122 msgid "Exporting L2VPN" msgstr "Exportation de L2VPN" -#: netbox/ipam/filtersets.py:125 +#: netbox/ipam/filtersets.py:128 msgid "Exporting L2VPN (identifier)" msgstr "Exportation de L2VPN (identifiant)" -#: netbox/ipam/filtersets.py:155 netbox/ipam/filtersets.py:283 -#: netbox/ipam/forms/model_forms.py:229 netbox/ipam/tables/ip.py:212 +#: netbox/ipam/filtersets.py:158 netbox/ipam/filtersets.py:286 +#: netbox/ipam/forms/model_forms.py:229 netbox/ipam/tables/ip.py:158 #: netbox/templates/ipam/prefix.html:12 msgid "Prefix" msgstr "Préfixe" -#: netbox/ipam/filtersets.py:159 netbox/ipam/filtersets.py:198 -#: netbox/ipam/filtersets.py:223 +#: netbox/ipam/filtersets.py:162 netbox/ipam/filtersets.py:201 +#: netbox/ipam/filtersets.py:226 msgid "RIR (ID)" msgstr "RIRE (ID)" -#: netbox/ipam/filtersets.py:165 netbox/ipam/filtersets.py:204 -#: netbox/ipam/filtersets.py:229 +#: netbox/ipam/filtersets.py:168 netbox/ipam/filtersets.py:207 +#: netbox/ipam/filtersets.py:232 msgid "RIR (slug)" msgstr "RIR (slug)" -#: netbox/ipam/filtersets.py:287 +#: netbox/ipam/filtersets.py:290 msgid "Within prefix" msgstr "Dans le préfixe" -#: netbox/ipam/filtersets.py:291 +#: netbox/ipam/filtersets.py:294 msgid "Within and including prefix" msgstr "Dans le préfixe et y compris" -#: netbox/ipam/filtersets.py:295 +#: netbox/ipam/filtersets.py:298 msgid "Prefixes which contain this prefix or IP" msgstr "Préfixes contenant ce préfixe ou cette adresse IP" -#: netbox/ipam/filtersets.py:306 netbox/ipam/filtersets.py:574 -#: netbox/ipam/forms/bulk_edit.py:343 netbox/ipam/forms/filtersets.py:196 -#: netbox/ipam/forms/filtersets.py:331 +#: netbox/ipam/filtersets.py:309 netbox/ipam/filtersets.py:541 +#: netbox/ipam/forms/bulk_edit.py:327 netbox/ipam/forms/filtersets.py:198 +#: netbox/ipam/forms/filtersets.py:334 msgid "Mask length" msgstr "Longueur du masque" -#: netbox/ipam/filtersets.py:375 netbox/vpn/filtersets.py:427 +#: netbox/ipam/filtersets.py:342 netbox/vpn/filtersets.py:427 msgid "VLAN (ID)" msgstr "VLAN (IDENTIFIANT)" -#: netbox/ipam/filtersets.py:379 netbox/vpn/filtersets.py:422 +#: netbox/ipam/filtersets.py:346 netbox/vpn/filtersets.py:422 msgid "VLAN number (1-4094)" msgstr "Numéro de VLAN (1-4094)" -#: netbox/ipam/filtersets.py:473 netbox/ipam/filtersets.py:477 -#: netbox/ipam/filtersets.py:569 netbox/ipam/forms/model_forms.py:496 +#: netbox/ipam/filtersets.py:440 netbox/ipam/filtersets.py:444 +#: netbox/ipam/filtersets.py:536 netbox/ipam/forms/model_forms.py:506 #: netbox/templates/tenancy/contact.html:53 #: netbox/tenancy/forms/bulk_edit.py:113 msgid "Address" msgstr "Adresse" -#: netbox/ipam/filtersets.py:481 +#: netbox/ipam/filtersets.py:448 msgid "Ranges which contain this prefix or IP" msgstr "Plages contenant ce préfixe ou cette adresse IP" -#: netbox/ipam/filtersets.py:509 netbox/ipam/filtersets.py:565 +#: netbox/ipam/filtersets.py:476 netbox/ipam/filtersets.py:532 msgid "Parent prefix" msgstr "Préfixe parent" -#: netbox/ipam/filtersets.py:618 netbox/ipam/filtersets.py:858 -#: netbox/ipam/filtersets.py:1133 netbox/vpn/filtersets.py:385 -msgid "Virtual machine (name)" -msgstr "Machine virtuelle (nom)" - -#: netbox/ipam/filtersets.py:623 netbox/ipam/filtersets.py:863 -#: netbox/ipam/filtersets.py:1127 netbox/virtualization/filtersets.py:282 -#: netbox/virtualization/filtersets.py:321 netbox/vpn/filtersets.py:390 -msgid "Virtual machine (ID)" -msgstr "Machine virtuelle (ID)" - -#: netbox/ipam/filtersets.py:629 netbox/vpn/filtersets.py:97 -#: netbox/vpn/filtersets.py:396 -msgid "Interface (name)" -msgstr "Interface (nom)" - -#: netbox/ipam/filtersets.py:640 netbox/vpn/filtersets.py:108 -#: netbox/vpn/filtersets.py:407 -msgid "VM interface (name)" -msgstr "Interface de machine virtuelle (nom)" - -#: netbox/ipam/filtersets.py:645 netbox/vpn/filtersets.py:113 -msgid "VM interface (ID)" -msgstr "Interface de machine virtuelle (ID)" - -#: netbox/ipam/filtersets.py:650 +#: netbox/ipam/filtersets.py:617 msgid "FHRP group (ID)" msgstr "Groupe FHRP (ID)" -#: netbox/ipam/filtersets.py:654 +#: netbox/ipam/filtersets.py:621 msgid "Is assigned to an interface" msgstr "Est affecté à une interface" -#: netbox/ipam/filtersets.py:658 +#: netbox/ipam/filtersets.py:625 msgid "Is assigned" msgstr "Est attribué" -#: netbox/ipam/filtersets.py:670 +#: netbox/ipam/filtersets.py:637 msgid "Service (ID)" msgstr "Service (ID)" -#: netbox/ipam/filtersets.py:675 +#: netbox/ipam/filtersets.py:642 msgid "NAT inside IP address (ID)" msgstr "Adresse IP intérieure NAT (ID)" -#: netbox/ipam/filtersets.py:1043 netbox/ipam/forms/bulk_import.py:322 -msgid "Assigned interface" -msgstr "Interface attribuée" +#: netbox/ipam/filtersets.py:1001 +msgid "Q-in-Q SVLAN (ID)" +msgstr "SVLAN Q-in-Q (ID)" -#: netbox/ipam/filtersets.py:1048 +#: netbox/ipam/filtersets.py:1005 +msgid "Q-in-Q SVLAN number (1-4094)" +msgstr "Numéro SVLAN Q-in-Q (1-4094)" + +#: netbox/ipam/filtersets.py:1026 msgid "Assigned VM interface" msgstr "Interface de machine virtuelle attribuée" -#: netbox/ipam/filtersets.py:1138 +#: netbox/ipam/filtersets.py:1097 +msgid "VLAN Translation Policy (name)" +msgstr "Politique de traduction VLAN (nom)" + +#: netbox/ipam/filtersets.py:1163 msgid "IP address (ID)" msgstr "Adresse IP (ID)" -#: netbox/ipam/filtersets.py:1144 netbox/ipam/models/ip.py:788 +#: netbox/ipam/filtersets.py:1169 netbox/ipam/models/ip.py:788 msgid "IP address" msgstr "Adresse IP" -#: netbox/ipam/filtersets.py:1169 +#: netbox/ipam/filtersets.py:1194 msgid "Primary IPv4 (ID)" msgstr "IPv4 principal (ID)" -#: netbox/ipam/filtersets.py:1174 +#: netbox/ipam/filtersets.py:1199 msgid "Primary IPv6 (ID)" msgstr "IPv6 principal (ID)" @@ -9552,435 +10078,408 @@ msgstr "Un masque CIDR (par exemple /24) est requis." msgid "Address pattern" msgstr "Modèle d'adresse" -#: netbox/ipam/forms/bulk_edit.py:50 +#: netbox/ipam/forms/bulk_edit.py:53 msgid "Enforce unique space" msgstr "Forcer l'unicité des préfixes IP" -#: netbox/ipam/forms/bulk_edit.py:88 +#: netbox/ipam/forms/bulk_edit.py:91 msgid "Is private" msgstr "Est privé" -#: netbox/ipam/forms/bulk_edit.py:109 netbox/ipam/forms/bulk_edit.py:138 -#: netbox/ipam/forms/bulk_edit.py:163 netbox/ipam/forms/bulk_import.py:89 -#: netbox/ipam/forms/bulk_import.py:109 netbox/ipam/forms/bulk_import.py:129 -#: netbox/ipam/forms/filtersets.py:110 netbox/ipam/forms/filtersets.py:125 -#: netbox/ipam/forms/filtersets.py:148 netbox/ipam/forms/model_forms.py:96 -#: netbox/ipam/forms/model_forms.py:109 netbox/ipam/forms/model_forms.py:131 -#: netbox/ipam/forms/model_forms.py:149 netbox/ipam/models/asns.py:31 -#: netbox/ipam/models/asns.py:103 netbox/ipam/models/ip.py:71 -#: netbox/ipam/models/ip.py:90 netbox/ipam/tables/asn.py:20 +#: netbox/ipam/forms/bulk_edit.py:112 netbox/ipam/forms/bulk_edit.py:141 +#: netbox/ipam/forms/bulk_edit.py:166 netbox/ipam/forms/bulk_import.py:92 +#: netbox/ipam/forms/bulk_import.py:112 netbox/ipam/forms/bulk_import.py:132 +#: netbox/ipam/forms/filtersets.py:112 netbox/ipam/forms/filtersets.py:127 +#: netbox/ipam/forms/filtersets.py:150 netbox/ipam/forms/model_forms.py:99 +#: netbox/ipam/forms/model_forms.py:112 netbox/ipam/forms/model_forms.py:135 +#: netbox/ipam/forms/model_forms.py:154 netbox/ipam/models/asns.py:31 +#: netbox/ipam/models/asns.py:100 netbox/ipam/models/ip.py:71 +#: netbox/ipam/models/ip.py:87 netbox/ipam/tables/asn.py:20 #: netbox/ipam/tables/asn.py:45 netbox/templates/ipam/aggregate.html:18 #: netbox/templates/ipam/asn.html:27 netbox/templates/ipam/asnrange.html:19 #: netbox/templates/ipam/rir.html:19 msgid "RIR" msgstr "RIR" -#: netbox/ipam/forms/bulk_edit.py:171 +#: netbox/ipam/forms/bulk_edit.py:174 msgid "Date added" msgstr "Date d'ajout" -#: netbox/ipam/forms/bulk_edit.py:229 netbox/ipam/forms/model_forms.py:619 -#: netbox/ipam/forms/model_forms.py:666 netbox/ipam/tables/ip.py:251 -#: netbox/templates/ipam/vlan_edit.html:37 +#: netbox/ipam/forms/bulk_edit.py:213 netbox/ipam/forms/model_forms.py:629 +#: netbox/ipam/forms/model_forms.py:676 netbox/ipam/tables/ip.py:201 +#: netbox/templates/ipam/vlan_edit.html:45 #: netbox/templates/ipam/vlangroup.html:27 msgid "VLAN Group" msgstr "Groupe VLAN" -#: netbox/ipam/forms/bulk_edit.py:234 netbox/ipam/forms/bulk_import.py:185 -#: netbox/ipam/forms/filtersets.py:256 netbox/ipam/forms/model_forms.py:218 -#: netbox/ipam/models/vlans.py:250 netbox/ipam/tables/ip.py:255 -#: netbox/templates/ipam/prefix.html:60 netbox/templates/ipam/vlan.html:12 +#: netbox/ipam/forms/bulk_edit.py:218 netbox/ipam/forms/bulk_import.py:181 +#: netbox/ipam/forms/filtersets.py:259 netbox/ipam/forms/model_forms.py:217 +#: netbox/ipam/models/vlans.py:272 netbox/ipam/tables/ip.py:206 +#: netbox/templates/ipam/prefix.html:56 netbox/templates/ipam/vlan.html:12 #: netbox/templates/ipam/vlan/base.html:6 #: netbox/templates/ipam/vlan_edit.html:10 -#: netbox/templates/wireless/wirelesslan.html:30 +#: netbox/templates/wireless/wirelesslan.html:38 #: netbox/vpn/forms/bulk_import.py:304 netbox/vpn/forms/filtersets.py:284 -#: netbox/vpn/forms/model_forms.py:433 netbox/vpn/forms/model_forms.py:452 -#: netbox/wireless/forms/bulk_edit.py:55 -#: netbox/wireless/forms/bulk_import.py:48 -#: netbox/wireless/forms/model_forms.py:48 netbox/wireless/models.py:102 +#: netbox/vpn/forms/model_forms.py:436 netbox/vpn/forms/model_forms.py:455 +#: netbox/wireless/forms/bulk_edit.py:57 +#: netbox/wireless/forms/bulk_import.py:50 +#: netbox/wireless/forms/model_forms.py:50 netbox/wireless/models.py:102 msgid "VLAN" msgstr "VLAN" -#: netbox/ipam/forms/bulk_edit.py:245 +#: netbox/ipam/forms/bulk_edit.py:229 msgid "Prefix length" msgstr "Longueur du préfixe" -#: netbox/ipam/forms/bulk_edit.py:268 netbox/ipam/forms/filtersets.py:241 -#: netbox/templates/ipam/prefix.html:85 +#: netbox/ipam/forms/bulk_edit.py:252 netbox/ipam/forms/filtersets.py:244 +#: netbox/templates/ipam/prefix.html:81 msgid "Is a pool" msgstr "C'est une plage d'adresses" -#: netbox/ipam/forms/bulk_edit.py:273 netbox/ipam/forms/bulk_edit.py:318 -#: netbox/ipam/forms/filtersets.py:248 netbox/ipam/forms/filtersets.py:293 -#: netbox/ipam/models/ip.py:272 netbox/ipam/models/ip.py:539 +#: netbox/ipam/forms/bulk_edit.py:257 netbox/ipam/forms/bulk_edit.py:302 +#: netbox/ipam/forms/filtersets.py:251 netbox/ipam/forms/filtersets.py:296 +#: netbox/ipam/models/ip.py:256 netbox/ipam/models/ip.py:525 msgid "Treat as fully utilized" msgstr "Traiter comme s'il avait été pleinement utilisé" -#: netbox/ipam/forms/bulk_edit.py:287 netbox/ipam/forms/filtersets.py:171 +#: netbox/ipam/forms/bulk_edit.py:271 netbox/ipam/forms/filtersets.py:173 +#: netbox/ipam/forms/model_forms.py:232 msgid "VLAN Assignment" msgstr "Attribution de VLAN" -#: netbox/ipam/forms/bulk_edit.py:366 netbox/ipam/models/ip.py:772 +#: netbox/ipam/forms/bulk_edit.py:350 netbox/ipam/models/ip.py:772 msgid "DNS name" msgstr "Nom DNS" -#: netbox/ipam/forms/bulk_edit.py:387 netbox/ipam/forms/bulk_edit.py:534 -#: netbox/ipam/forms/bulk_import.py:418 netbox/ipam/forms/bulk_import.py:493 -#: netbox/ipam/forms/bulk_import.py:519 netbox/ipam/forms/filtersets.py:390 -#: netbox/ipam/forms/filtersets.py:530 netbox/templates/ipam/fhrpgroup.html:22 +#: netbox/ipam/forms/bulk_edit.py:371 netbox/ipam/forms/bulk_edit.py:562 +#: netbox/ipam/forms/bulk_import.py:417 netbox/ipam/forms/bulk_import.py:528 +#: netbox/ipam/forms/bulk_import.py:554 netbox/ipam/forms/filtersets.py:393 +#: netbox/ipam/forms/filtersets.py:582 netbox/templates/ipam/fhrpgroup.html:22 #: netbox/templates/ipam/inc/panels/fhrp_groups.html:24 #: netbox/templates/ipam/service.html:32 #: netbox/templates/ipam/servicetemplate.html:19 msgid "Protocol" msgstr "Protocole" -#: netbox/ipam/forms/bulk_edit.py:394 netbox/ipam/forms/filtersets.py:397 +#: netbox/ipam/forms/bulk_edit.py:378 netbox/ipam/forms/filtersets.py:400 #: netbox/ipam/tables/fhrp.py:22 netbox/templates/ipam/fhrpgroup.html:26 msgid "Group ID" msgstr "ID de groupe" -#: netbox/ipam/forms/bulk_edit.py:399 netbox/ipam/forms/filtersets.py:402 -#: netbox/wireless/forms/bulk_edit.py:68 -#: netbox/wireless/forms/bulk_edit.py:115 -#: netbox/wireless/forms/bulk_import.py:62 -#: netbox/wireless/forms/bulk_import.py:65 -#: netbox/wireless/forms/bulk_import.py:104 -#: netbox/wireless/forms/bulk_import.py:107 -#: netbox/wireless/forms/filtersets.py:54 -#: netbox/wireless/forms/filtersets.py:88 +#: netbox/ipam/forms/bulk_edit.py:383 netbox/ipam/forms/filtersets.py:405 +#: netbox/wireless/forms/bulk_edit.py:70 +#: netbox/wireless/forms/bulk_edit.py:118 +#: netbox/wireless/forms/bulk_import.py:64 +#: netbox/wireless/forms/bulk_import.py:67 +#: netbox/wireless/forms/bulk_import.py:109 +#: netbox/wireless/forms/bulk_import.py:112 +#: netbox/wireless/forms/filtersets.py:57 +#: netbox/wireless/forms/filtersets.py:116 msgid "Authentication type" msgstr "Type d'authentification" -#: netbox/ipam/forms/bulk_edit.py:404 netbox/ipam/forms/filtersets.py:406 +#: netbox/ipam/forms/bulk_edit.py:388 netbox/ipam/forms/filtersets.py:409 msgid "Authentication key" msgstr "Clé d'authentification" -#: netbox/ipam/forms/bulk_edit.py:421 netbox/ipam/forms/filtersets.py:383 -#: netbox/ipam/forms/model_forms.py:507 netbox/netbox/navigation/menu.py:386 +#: netbox/ipam/forms/bulk_edit.py:405 netbox/ipam/forms/filtersets.py:386 +#: netbox/ipam/forms/model_forms.py:517 netbox/netbox/navigation/menu.py:407 #: netbox/templates/ipam/fhrpgroup.html:49 #: netbox/templates/wireless/inc/authentication_attrs.html:5 -#: netbox/wireless/forms/bulk_edit.py:91 -#: netbox/wireless/forms/bulk_edit.py:149 -#: netbox/wireless/forms/filtersets.py:36 -#: netbox/wireless/forms/filtersets.py:76 -#: netbox/wireless/forms/model_forms.py:55 -#: netbox/wireless/forms/model_forms.py:171 +#: netbox/wireless/forms/bulk_edit.py:94 +#: netbox/wireless/forms/bulk_edit.py:152 +#: netbox/wireless/forms/filtersets.py:39 +#: netbox/wireless/forms/filtersets.py:104 +#: netbox/wireless/forms/model_forms.py:58 +#: netbox/wireless/forms/model_forms.py:174 msgid "Authentication" msgstr "Authentification" -#: netbox/ipam/forms/bulk_edit.py:436 netbox/ipam/forms/model_forms.py:608 -msgid "Scope type" -msgstr "Type de portée" - -#: netbox/ipam/forms/bulk_edit.py:439 netbox/ipam/forms/bulk_edit.py:453 -#: netbox/ipam/forms/model_forms.py:611 netbox/ipam/forms/model_forms.py:621 -#: netbox/ipam/tables/vlans.py:71 netbox/templates/ipam/vlangroup.html:38 -msgid "Scope" -msgstr "Champ" - -#: netbox/ipam/forms/bulk_edit.py:446 netbox/ipam/models/vlans.py:60 +#: netbox/ipam/forms/bulk_edit.py:430 netbox/ipam/models/vlans.py:62 msgid "VLAN ID ranges" msgstr "Plages d'ID VLAN" -#: netbox/ipam/forms/bulk_edit.py:525 +#: netbox/ipam/forms/bulk_edit.py:505 netbox/ipam/forms/bulk_import.py:485 +#: netbox/ipam/forms/filtersets.py:557 netbox/ipam/models/vlans.py:232 +#: netbox/ipam/tables/vlans.py:103 +msgid "Q-in-Q role" +msgstr "Rôle Q-in-Q" + +#: netbox/ipam/forms/bulk_edit.py:522 +msgid "Q-in-Q" +msgstr "Q-en-Q" + +#: netbox/ipam/forms/bulk_edit.py:523 msgid "Site & Group" msgstr "Site et groupe" -#: netbox/ipam/forms/bulk_edit.py:539 netbox/ipam/forms/model_forms.py:692 -#: netbox/ipam/forms/model_forms.py:724 netbox/ipam/tables/services.py:19 +#: netbox/ipam/forms/bulk_edit.py:546 netbox/ipam/forms/bulk_import.py:515 +#: netbox/ipam/forms/model_forms.py:724 netbox/ipam/tables/vlans.py:256 +#: netbox/templates/ipam/vlantranslationrule.html:14 +#: netbox/vpn/forms/model_forms.py:322 netbox/vpn/forms/model_forms.py:359 +msgid "Policy" +msgstr "Politique" + +#: netbox/ipam/forms/bulk_edit.py:567 netbox/ipam/forms/model_forms.py:742 +#: netbox/ipam/forms/model_forms.py:774 netbox/ipam/tables/services.py:19 #: netbox/ipam/tables/services.py:49 netbox/templates/ipam/service.html:36 #: netbox/templates/ipam/servicetemplate.html:23 msgid "Ports" msgstr "Ports" -#: netbox/ipam/forms/bulk_import.py:48 +#: netbox/ipam/forms/bulk_import.py:51 msgid "Import route targets" msgstr "Importer des cibles d'itinéraire" -#: netbox/ipam/forms/bulk_import.py:54 +#: netbox/ipam/forms/bulk_import.py:57 msgid "Export route targets" msgstr "Cibles d'itinéraire d'exportation" -#: netbox/ipam/forms/bulk_import.py:92 netbox/ipam/forms/bulk_import.py:112 -#: netbox/ipam/forms/bulk_import.py:132 +#: netbox/ipam/forms/bulk_import.py:95 netbox/ipam/forms/bulk_import.py:115 +#: netbox/ipam/forms/bulk_import.py:135 msgid "Assigned RIR" msgstr "RIR attribué" -#: netbox/ipam/forms/bulk_import.py:182 +#: netbox/ipam/forms/bulk_import.py:178 msgid "VLAN's group (if any)" msgstr "Le groupe du VLAN (le cas échéant)" -#: netbox/ipam/forms/bulk_import.py:308 -msgid "Parent device of assigned interface (if any)" -msgstr "Appareil parent auquel est attribuée l'interface (le cas échéant)" - -#: netbox/ipam/forms/bulk_import.py:311 netbox/ipam/forms/bulk_import.py:512 -#: netbox/ipam/forms/model_forms.py:718 -#: netbox/virtualization/filtersets.py:288 -#: netbox/virtualization/filtersets.py:327 -#: netbox/virtualization/forms/bulk_edit.py:200 -#: netbox/virtualization/forms/bulk_edit.py:326 -#: netbox/virtualization/forms/bulk_import.py:146 -#: netbox/virtualization/forms/bulk_import.py:207 -#: netbox/virtualization/forms/filtersets.py:212 -#: netbox/virtualization/forms/filtersets.py:248 -#: netbox/virtualization/forms/model_forms.py:288 -#: netbox/vpn/forms/bulk_import.py:93 netbox/vpn/forms/bulk_import.py:290 -msgid "Virtual machine" -msgstr "Machine virtuelle" - -#: netbox/ipam/forms/bulk_import.py:315 -msgid "Parent VM of assigned interface (if any)" -msgstr "VM parent de l'interface attribuée (le cas échéant)" +#: netbox/ipam/forms/bulk_import.py:207 +#: netbox/virtualization/forms/bulk_import.py:80 +#: netbox/wireless/forms/bulk_import.py:83 +msgid "Scope ID" +msgstr "Identifiant de l'étendue" #: netbox/ipam/forms/bulk_import.py:325 -msgid "Is primary" -msgstr "Est principal" - -#: netbox/ipam/forms/bulk_import.py:326 msgid "Make this the primary IP for the assigned device" msgstr "Faites-en l'adresse IP principale de l'appareil attribué" -#: netbox/ipam/forms/bulk_import.py:330 +#: netbox/ipam/forms/bulk_import.py:329 msgid "Is out-of-band" msgstr "Est hors bande" -#: netbox/ipam/forms/bulk_import.py:331 +#: netbox/ipam/forms/bulk_import.py:330 msgid "Designate this as the out-of-band IP address for the assigned device" msgstr "Désignez-le comme adresse IP hors bande pour l'appareil attribué" -#: netbox/ipam/forms/bulk_import.py:371 +#: netbox/ipam/forms/bulk_import.py:370 msgid "No device or virtual machine specified; cannot set as primary IP" msgstr "" "Aucun périphérique ou machine virtuelle spécifié ; impossible de le définir " "comme adresse IP principale" -#: netbox/ipam/forms/bulk_import.py:375 +#: netbox/ipam/forms/bulk_import.py:374 msgid "No device specified; cannot set as out-of-band IP" msgstr "" "Aucun appareil n'a été spécifié ; impossible de le définir comme IP hors " "bande" -#: netbox/ipam/forms/bulk_import.py:379 +#: netbox/ipam/forms/bulk_import.py:378 msgid "Cannot set out-of-band IP for virtual machines" msgstr "" "Impossible de définir une adresse IP hors bande pour les machines virtuelles" -#: netbox/ipam/forms/bulk_import.py:383 +#: netbox/ipam/forms/bulk_import.py:382 msgid "No interface specified; cannot set as primary IP" msgstr "" "Aucune interface spécifiée ; impossible de définir comme adresse IP " "principale" -#: netbox/ipam/forms/bulk_import.py:387 +#: netbox/ipam/forms/bulk_import.py:386 msgid "No interface specified; cannot set as out-of-band IP" msgstr "" "Aucune interface spécifiée ; impossible de définir comme IP hors bande" -#: netbox/ipam/forms/bulk_import.py:422 +#: netbox/ipam/forms/bulk_import.py:421 msgid "Auth type" msgstr "Type d'authentification" -#: netbox/ipam/forms/bulk_import.py:437 -msgid "Scope type (app & model)" -msgstr "Type de scope (application et modèle)" - -#: netbox/ipam/forms/bulk_import.py:464 +#: netbox/ipam/forms/bulk_import.py:463 msgid "Assigned VLAN group" msgstr "Groupe VLAN attribué" -#: netbox/ipam/forms/bulk_import.py:495 netbox/ipam/forms/bulk_import.py:521 +#: netbox/ipam/forms/bulk_import.py:495 +msgid "Service VLAN (for Q-in-Q/802.1ad customer VLANs)" +msgstr "Service VLAN (pour les VLAN clients Q-in-Q/802.1ad)" + +#: netbox/ipam/forms/bulk_import.py:518 netbox/ipam/models/vlans.py:343 +msgid "VLAN translation policy" +msgstr "Politique de traduction VLAN" + +#: netbox/ipam/forms/bulk_import.py:530 netbox/ipam/forms/bulk_import.py:556 msgid "IP protocol" msgstr "Protocole IP" -#: netbox/ipam/forms/bulk_import.py:509 +#: netbox/ipam/forms/bulk_import.py:544 msgid "Required if not assigned to a VM" msgstr "Obligatoire s'il n'est pas attribué à une machine virtuelle" -#: netbox/ipam/forms/bulk_import.py:516 +#: netbox/ipam/forms/bulk_import.py:551 msgid "Required if not assigned to a device" msgstr "Obligatoire s'il n'est pas attribué à un appareil" -#: netbox/ipam/forms/bulk_import.py:541 +#: netbox/ipam/forms/bulk_import.py:576 #, python-brace-format msgid "{ip} is not assigned to this device/VM." msgstr "{ip} n'est pas attribué à cet appareil/à cette machine virtuelle." -#: netbox/ipam/forms/filtersets.py:47 netbox/ipam/forms/model_forms.py:63 -#: netbox/netbox/navigation/menu.py:189 netbox/vpn/forms/model_forms.py:410 +#: netbox/ipam/forms/filtersets.py:49 netbox/ipam/forms/model_forms.py:66 +#: netbox/netbox/navigation/menu.py:195 netbox/vpn/forms/model_forms.py:413 msgid "Route Targets" msgstr "Cibles de l'itinéraire" -#: netbox/ipam/forms/filtersets.py:53 netbox/ipam/forms/model_forms.py:50 -#: netbox/vpn/forms/filtersets.py:224 netbox/vpn/forms/model_forms.py:397 +#: netbox/ipam/forms/filtersets.py:55 netbox/ipam/forms/model_forms.py:53 +#: netbox/vpn/forms/filtersets.py:224 netbox/vpn/forms/model_forms.py:400 msgid "Import targets" msgstr "Cibles d'importation" -#: netbox/ipam/forms/filtersets.py:58 netbox/ipam/forms/model_forms.py:55 -#: netbox/vpn/forms/filtersets.py:229 netbox/vpn/forms/model_forms.py:402 +#: netbox/ipam/forms/filtersets.py:60 netbox/ipam/forms/model_forms.py:58 +#: netbox/vpn/forms/filtersets.py:229 netbox/vpn/forms/model_forms.py:405 msgid "Export targets" msgstr "Objectifs d'exportation" -#: netbox/ipam/forms/filtersets.py:73 +#: netbox/ipam/forms/filtersets.py:75 msgid "Imported by VRF" msgstr "Importé par VRF" -#: netbox/ipam/forms/filtersets.py:78 +#: netbox/ipam/forms/filtersets.py:80 msgid "Exported by VRF" msgstr "Exporté par VRF" -#: netbox/ipam/forms/filtersets.py:87 netbox/ipam/tables/ip.py:89 +#: netbox/ipam/forms/filtersets.py:89 netbox/ipam/tables/ip.py:35 #: netbox/templates/ipam/rir.html:30 msgid "Private" msgstr "Privé" -#: netbox/ipam/forms/filtersets.py:105 netbox/ipam/forms/filtersets.py:191 -#: netbox/ipam/forms/filtersets.py:272 netbox/ipam/forms/filtersets.py:326 +#: netbox/ipam/forms/filtersets.py:107 netbox/ipam/forms/filtersets.py:193 +#: netbox/ipam/forms/filtersets.py:275 netbox/ipam/forms/filtersets.py:329 msgid "Address family" msgstr "Famille d'adresses" -#: netbox/ipam/forms/filtersets.py:119 netbox/templates/ipam/asnrange.html:25 +#: netbox/ipam/forms/filtersets.py:121 netbox/templates/ipam/asnrange.html:25 msgid "Range" msgstr "Plage" -#: netbox/ipam/forms/filtersets.py:128 +#: netbox/ipam/forms/filtersets.py:130 msgid "Start" msgstr "Démarrer" -#: netbox/ipam/forms/filtersets.py:132 +#: netbox/ipam/forms/filtersets.py:134 msgid "End" msgstr "Fin" -#: netbox/ipam/forms/filtersets.py:186 +#: netbox/ipam/forms/filtersets.py:188 msgid "Search within" msgstr "Rechercher dans" -#: netbox/ipam/forms/filtersets.py:207 netbox/ipam/forms/filtersets.py:342 +#: netbox/ipam/forms/filtersets.py:209 netbox/ipam/forms/filtersets.py:345 msgid "Present in VRF" msgstr "Présent en VRF" -#: netbox/ipam/forms/filtersets.py:311 +#: netbox/ipam/forms/filtersets.py:314 msgid "Device/VM" msgstr "Appareil/VM" -#: netbox/ipam/forms/filtersets.py:321 +#: netbox/ipam/forms/filtersets.py:324 msgid "Parent Prefix" msgstr "Préfixe parent" -#: netbox/ipam/forms/filtersets.py:347 -msgid "Assigned Device" -msgstr "Appareil attribué" - -#: netbox/ipam/forms/filtersets.py:352 -msgid "Assigned VM" -msgstr "Machine virtuelle attribuée" - -#: netbox/ipam/forms/filtersets.py:366 +#: netbox/ipam/forms/filtersets.py:369 msgid "Assigned to an interface" msgstr "Affecté à une interface" -#: netbox/ipam/forms/filtersets.py:373 netbox/templates/ipam/ipaddress.html:51 +#: netbox/ipam/forms/filtersets.py:376 netbox/templates/ipam/ipaddress.html:51 msgid "DNS Name" msgstr "Nom DNS" -#: netbox/ipam/forms/filtersets.py:416 netbox/ipam/models/vlans.py:251 -#: netbox/ipam/tables/ip.py:176 netbox/ipam/tables/vlans.py:82 -#: netbox/ipam/views.py:971 netbox/netbox/navigation/menu.py:193 -#: netbox/netbox/navigation/menu.py:195 +#: netbox/ipam/forms/filtersets.py:419 netbox/ipam/models/vlans.py:273 +#: netbox/ipam/tables/ip.py:122 netbox/ipam/tables/vlans.py:51 +#: netbox/ipam/views.py:1036 netbox/netbox/navigation/menu.py:199 +#: netbox/netbox/navigation/menu.py:201 msgid "VLANs" msgstr "VLAN" -#: netbox/ipam/forms/filtersets.py:457 +#: netbox/ipam/forms/filtersets.py:460 msgid "Contains VLAN ID" msgstr "Contient un ID de VLAN" -#: netbox/ipam/forms/filtersets.py:513 netbox/ipam/models/vlans.py:192 +#: netbox/ipam/forms/filtersets.py:494 netbox/ipam/models/vlans.py:363 +msgid "Local VLAN ID" +msgstr "ID de VLAN local" + +#: netbox/ipam/forms/filtersets.py:499 netbox/ipam/models/vlans.py:371 +msgid "Remote VLAN ID" +msgstr "ID de VLAN distant" + +#: netbox/ipam/forms/filtersets.py:509 +msgid "Q-in-Q/802.1ad" +msgstr "Q-en-Q/802.1AD" + +#: netbox/ipam/forms/filtersets.py:554 netbox/ipam/models/vlans.py:191 #: netbox/templates/ipam/vlan.html:31 msgid "VLAN ID" msgstr "IDENTIFIANT DE VLAN" -#: netbox/ipam/forms/filtersets.py:556 netbox/ipam/forms/model_forms.py:324 -#: netbox/ipam/forms/model_forms.py:746 netbox/ipam/forms/model_forms.py:772 -#: netbox/ipam/tables/vlans.py:195 -#: netbox/templates/virtualization/virtualdisk.html:21 -#: netbox/templates/virtualization/virtualmachine.html:12 -#: netbox/templates/virtualization/vminterface.html:21 -#: netbox/templates/vpn/tunneltermination.html:25 -#: netbox/virtualization/forms/filtersets.py:197 -#: netbox/virtualization/forms/filtersets.py:242 -#: netbox/virtualization/forms/model_forms.py:220 -#: netbox/virtualization/tables/virtualmachines.py:135 -#: netbox/virtualization/tables/virtualmachines.py:190 -#: netbox/vpn/choices.py:53 netbox/vpn/forms/filtersets.py:293 -#: netbox/vpn/forms/model_forms.py:160 netbox/vpn/forms/model_forms.py:171 -#: netbox/vpn/forms/model_forms.py:273 netbox/vpn/forms/model_forms.py:454 -msgid "Virtual Machine" -msgstr "Machine virtuelle" - -#: netbox/ipam/forms/model_forms.py:80 +#: netbox/ipam/forms/model_forms.py:83 #: netbox/templates/ipam/routetarget.html:10 msgid "Route Target" msgstr "Cible de l'itinéraire" -#: netbox/ipam/forms/model_forms.py:114 netbox/ipam/tables/ip.py:117 +#: netbox/ipam/forms/model_forms.py:118 netbox/ipam/tables/ip.py:63 #: netbox/templates/ipam/aggregate.html:11 #: netbox/templates/ipam/prefix.html:38 msgid "Aggregate" msgstr "Agrégat" -#: netbox/ipam/forms/model_forms.py:135 netbox/templates/ipam/asnrange.html:12 +#: netbox/ipam/forms/model_forms.py:140 netbox/templates/ipam/asnrange.html:12 msgid "ASN Range" msgstr "Plage ASN" -#: netbox/ipam/forms/model_forms.py:231 -msgid "Site/VLAN Assignment" -msgstr "" - -#: netbox/ipam/forms/model_forms.py:259 netbox/templates/ipam/iprange.html:10 +#: netbox/ipam/forms/model_forms.py:269 netbox/templates/ipam/iprange.html:10 msgid "IP Range" msgstr "Plage IP" -#: netbox/ipam/forms/model_forms.py:295 netbox/ipam/forms/model_forms.py:325 -#: netbox/ipam/forms/model_forms.py:506 +#: netbox/ipam/forms/model_forms.py:305 netbox/ipam/forms/model_forms.py:335 +#: netbox/ipam/forms/model_forms.py:516 #: netbox/templates/ipam/fhrpgroup.html:19 msgid "FHRP Group" msgstr "Groupe FHRP" -#: netbox/ipam/forms/model_forms.py:310 +#: netbox/ipam/forms/model_forms.py:320 msgid "Make this the primary IP for the device/VM" msgstr "" "Faites-en l'adresse IP principale de l'appareil/de la machine virtuelle" -#: netbox/ipam/forms/model_forms.py:314 +#: netbox/ipam/forms/model_forms.py:324 msgid "Make this the out-of-band IP for the device" msgstr "Choisissez cette adresse IP hors bande pour l'appareil" -#: netbox/ipam/forms/model_forms.py:329 +#: netbox/ipam/forms/model_forms.py:339 msgid "NAT IP (Inside)" msgstr "IP NAT (interne)" -#: netbox/ipam/forms/model_forms.py:391 +#: netbox/ipam/forms/model_forms.py:401 msgid "An IP address can only be assigned to a single object." msgstr "Une adresse IP ne peut être attribuée qu'à un seul objet." -#: netbox/ipam/forms/model_forms.py:398 +#: netbox/ipam/forms/model_forms.py:408 msgid "Cannot reassign primary IP address for the parent device/VM" msgstr "" "Impossible de réattribuer l'adresse IP principale à l'appareil parent/à la " "machine virtuelle" -#: netbox/ipam/forms/model_forms.py:402 +#: netbox/ipam/forms/model_forms.py:412 msgid "Cannot reassign out-of-Band IP address for the parent device" msgstr "Impossible de réattribuer l'adresse IP hors bande à l'appareil parent" -#: netbox/ipam/forms/model_forms.py:412 +#: netbox/ipam/forms/model_forms.py:422 msgid "" "Only IP addresses assigned to an interface can be designated as primary IPs." msgstr "" "Seules les adresses IP attribuées à une interface peuvent être désignées " "comme adresses IP principales." -#: netbox/ipam/forms/model_forms.py:420 +#: netbox/ipam/forms/model_forms.py:430 msgid "" "Only IP addresses assigned to a device interface can be designated as the " "out-of-band IP for a device." @@ -9988,24 +10487,29 @@ msgstr "" "Seules les adresses IP attribuées à l'interface d'un appareil peuvent être " "désignées comme IP hors bande pour un appareil." -#: netbox/ipam/forms/model_forms.py:508 +#: netbox/ipam/forms/model_forms.py:518 msgid "Virtual IP Address" msgstr "Adresse IP virtuelle" -#: netbox/ipam/forms/model_forms.py:593 +#: netbox/ipam/forms/model_forms.py:603 msgid "Assignment already exists" msgstr "L'affectation existe déjà" -#: netbox/ipam/forms/model_forms.py:602 +#: netbox/ipam/forms/model_forms.py:612 #: netbox/templates/ipam/vlangroup.html:42 msgid "VLAN IDs" msgstr "ID de VLAN" -#: netbox/ipam/forms/model_forms.py:620 +#: netbox/ipam/forms/model_forms.py:630 msgid "Child VLANs" msgstr "VLAN pour enfants" -#: netbox/ipam/forms/model_forms.py:697 netbox/ipam/forms/model_forms.py:729 +#: netbox/ipam/forms/model_forms.py:730 +#: netbox/templates/ipam/vlantranslationrule.html:11 +msgid "VLAN Translation Rule" +msgstr "Règle de traduction VLAN" + +#: netbox/ipam/forms/model_forms.py:747 netbox/ipam/forms/model_forms.py:779 msgid "" "Comma-separated list of one or more port numbers. A range may be specified " "using a hyphen." @@ -10013,33 +10517,28 @@ msgstr "" "Liste séparée par des virgules d'un ou de plusieurs numéros de port. Une " "plage peut être spécifiée à l'aide d'un trait d'union." -#: netbox/ipam/forms/model_forms.py:702 +#: netbox/ipam/forms/model_forms.py:752 #: netbox/templates/ipam/servicetemplate.html:12 msgid "Service Template" msgstr "Modèle de service" -#: netbox/ipam/forms/model_forms.py:749 +#: netbox/ipam/forms/model_forms.py:799 msgid "Port(s)" msgstr "Port (x)" -#: netbox/ipam/forms/model_forms.py:750 netbox/ipam/forms/model_forms.py:778 -#: netbox/templates/ipam/service.html:21 -msgid "Service" -msgstr "Service" - -#: netbox/ipam/forms/model_forms.py:763 +#: netbox/ipam/forms/model_forms.py:813 msgid "Service template" msgstr "Modèle de service" -#: netbox/ipam/forms/model_forms.py:775 +#: netbox/ipam/forms/model_forms.py:825 msgid "From Template" msgstr "À partir du modèle" -#: netbox/ipam/forms/model_forms.py:776 +#: netbox/ipam/forms/model_forms.py:826 msgid "Custom" msgstr "Personnalisé" -#: netbox/ipam/forms/model_forms.py:806 +#: netbox/ipam/forms/model_forms.py:856 msgid "" "Must specify name, protocol, and port(s) if not using a service template." msgstr "" @@ -10058,29 +10557,29 @@ msgstr "Plage ASN" msgid "ASN ranges" msgstr "Plages ASN" -#: netbox/ipam/models/asns.py:72 +#: netbox/ipam/models/asns.py:69 #, python-brace-format msgid "Starting ASN ({start}) must be lower than ending ASN ({end})." msgstr "" "Démarrage de l'ASN ({start}) doit être inférieur à l'ASN final ({end})." -#: netbox/ipam/models/asns.py:104 +#: netbox/ipam/models/asns.py:101 msgid "Regional Internet Registry responsible for this AS number space" msgstr "Registre Internet régional responsable de cet espace numérique AS" -#: netbox/ipam/models/asns.py:109 +#: netbox/ipam/models/asns.py:106 msgid "16- or 32-bit autonomous system number" msgstr "Numéro de système autonome 16 ou 32 bits" -#: netbox/ipam/models/fhrp.py:22 +#: netbox/ipam/models/fhrp.py:21 msgid "group ID" msgstr "ID de groupe" -#: netbox/ipam/models/fhrp.py:30 netbox/ipam/models/services.py:22 +#: netbox/ipam/models/fhrp.py:29 netbox/ipam/models/services.py:21 msgid "protocol" msgstr "protocole" -#: netbox/ipam/models/fhrp.py:38 netbox/wireless/models.py:28 +#: netbox/ipam/models/fhrp.py:38 netbox/wireless/models.py:29 msgid "authentication type" msgstr "type d'authentification" @@ -10096,11 +10595,11 @@ msgstr "Groupe FHRP" msgid "FHRP groups" msgstr "Groupes FHRP" -#: netbox/ipam/models/fhrp.py:113 +#: netbox/ipam/models/fhrp.py:110 msgid "FHRP group assignment" msgstr "Affectation au groupe FHRP" -#: netbox/ipam/models/fhrp.py:114 +#: netbox/ipam/models/fhrp.py:111 msgid "FHRP group assignments" msgstr "Missions du groupe FHRP" @@ -10112,35 +10611,35 @@ msgstr "privé" msgid "IP space managed by this RIR is considered private" msgstr "L'espace IP géré par ce RIR est considéré comme privé" -#: netbox/ipam/models/ip.py:72 netbox/netbox/navigation/menu.py:182 +#: netbox/ipam/models/ip.py:72 netbox/netbox/navigation/menu.py:188 msgid "RIRs" msgstr "IR" -#: netbox/ipam/models/ip.py:84 +#: netbox/ipam/models/ip.py:81 msgid "IPv4 or IPv6 network" msgstr "Réseau IPv4 ou IPv6" -#: netbox/ipam/models/ip.py:91 +#: netbox/ipam/models/ip.py:88 msgid "Regional Internet Registry responsible for this IP space" msgstr "Registre Internet régional responsable de cet espace IP" -#: netbox/ipam/models/ip.py:101 +#: netbox/ipam/models/ip.py:98 msgid "date added" msgstr "date d'ajout" -#: netbox/ipam/models/ip.py:115 +#: netbox/ipam/models/ip.py:112 msgid "aggregate" msgstr "global" -#: netbox/ipam/models/ip.py:116 +#: netbox/ipam/models/ip.py:113 msgid "aggregates" msgstr "agrégats" -#: netbox/ipam/models/ip.py:132 +#: netbox/ipam/models/ip.py:126 msgid "Cannot create aggregate with /0 mask." msgstr "Impossible de créer un agrégat avec le masque /0." -#: netbox/ipam/models/ip.py:144 +#: netbox/ipam/models/ip.py:138 #, python-brace-format msgid "" "Aggregates cannot overlap. {prefix} is already covered by an existing " @@ -10149,7 +10648,7 @@ msgstr "" "Les agrégats ne peuvent pas se chevaucher. {prefix} est déjà couvert par un " "agrégat existant ({aggregate})." -#: netbox/ipam/models/ip.py:158 +#: netbox/ipam/models/ip.py:152 #, python-brace-format msgid "" "Prefixes cannot overlap aggregates. {prefix} covers an existing aggregate " @@ -10158,129 +10657,124 @@ msgstr "" "Les préfixes ne peuvent pas chevaucher des agrégats. {prefix} couvre un " "agrégat existant ({aggregate})." -#: netbox/ipam/models/ip.py:200 netbox/ipam/models/ip.py:737 -#: netbox/vpn/models/tunnels.py:114 -msgid "role" -msgstr "rôle" - -#: netbox/ipam/models/ip.py:201 +#: netbox/ipam/models/ip.py:195 msgid "roles" msgstr "rôles" -#: netbox/ipam/models/ip.py:217 netbox/ipam/models/ip.py:293 +#: netbox/ipam/models/ip.py:208 netbox/ipam/models/ip.py:277 msgid "prefix" msgstr "préfixe" -#: netbox/ipam/models/ip.py:218 +#: netbox/ipam/models/ip.py:209 msgid "IPv4 or IPv6 network with mask" msgstr "Réseau IPv4 ou IPv6 avec masque" -#: netbox/ipam/models/ip.py:254 +#: netbox/ipam/models/ip.py:238 msgid "Operational status of this prefix" msgstr "État opérationnel de ce préfixe" -#: netbox/ipam/models/ip.py:262 +#: netbox/ipam/models/ip.py:246 msgid "The primary function of this prefix" msgstr "La fonction principale de ce préfixe" -#: netbox/ipam/models/ip.py:265 +#: netbox/ipam/models/ip.py:249 msgid "is a pool" msgstr "est une plage d'adresses" -#: netbox/ipam/models/ip.py:267 +#: netbox/ipam/models/ip.py:251 msgid "All IP addresses within this prefix are considered usable" msgstr "" "Toutes les adresses IP comprises dans ce préfixe sont considérées comme " "utilisables" -#: netbox/ipam/models/ip.py:270 netbox/ipam/models/ip.py:537 +#: netbox/ipam/models/ip.py:254 netbox/ipam/models/ip.py:523 msgid "mark utilized" msgstr "marque utilisée" -#: netbox/ipam/models/ip.py:294 +#: netbox/ipam/models/ip.py:278 msgid "prefixes" msgstr "préfixes" -#: netbox/ipam/models/ip.py:317 +#: netbox/ipam/models/ip.py:298 msgid "Cannot create prefix with /0 mask." msgstr "Impossible de créer un préfixe avec le masque /0." -#: netbox/ipam/models/ip.py:324 netbox/ipam/models/ip.py:874 +#: netbox/ipam/models/ip.py:305 netbox/ipam/models/ip.py:871 #, python-brace-format msgid "VRF {vrf}" msgstr "VRF {vrf}" -#: netbox/ipam/models/ip.py:324 netbox/ipam/models/ip.py:874 +#: netbox/ipam/models/ip.py:305 netbox/ipam/models/ip.py:871 msgid "global table" msgstr "tableau global" -#: netbox/ipam/models/ip.py:326 +#: netbox/ipam/models/ip.py:307 #, python-brace-format msgid "Duplicate prefix found in {table}: {prefix}" msgstr "Préfixe dupliqué trouvé dans {table}: {prefix}" -#: netbox/ipam/models/ip.py:495 +#: netbox/ipam/models/ip.py:481 msgid "start address" msgstr "adresse de départ" -#: netbox/ipam/models/ip.py:496 netbox/ipam/models/ip.py:500 -#: netbox/ipam/models/ip.py:712 +#: netbox/ipam/models/ip.py:482 netbox/ipam/models/ip.py:486 +#: netbox/ipam/models/ip.py:711 msgid "IPv4 or IPv6 address (with mask)" msgstr "Adresse IPv4 ou IPv6 (avec masque)" -#: netbox/ipam/models/ip.py:499 +#: netbox/ipam/models/ip.py:485 msgid "end address" msgstr "adresse finale" -#: netbox/ipam/models/ip.py:526 +#: netbox/ipam/models/ip.py:512 msgid "Operational status of this range" msgstr "État opérationnel de cette gamme" -#: netbox/ipam/models/ip.py:534 +#: netbox/ipam/models/ip.py:520 msgid "The primary function of this range" msgstr "La principale fonction de cette gamme" -#: netbox/ipam/models/ip.py:548 +#: netbox/ipam/models/ip.py:534 msgid "IP range" msgstr "plage IP" -#: netbox/ipam/models/ip.py:549 +#: netbox/ipam/models/ip.py:535 msgid "IP ranges" msgstr "Plages IP" -#: netbox/ipam/models/ip.py:565 +#: netbox/ipam/models/ip.py:548 msgid "Starting and ending IP address versions must match" msgstr "Les versions des adresses IP de début et de fin doivent correspondre" -#: netbox/ipam/models/ip.py:571 +#: netbox/ipam/models/ip.py:554 msgid "Starting and ending IP address masks must match" msgstr "Les masques d'adresse IP de début et de fin doivent correspondre" -#: netbox/ipam/models/ip.py:578 +#: netbox/ipam/models/ip.py:561 #, python-brace-format msgid "" "Ending address must be greater than the starting address ({start_address})" msgstr "" "L'adresse de fin doit être supérieure à l'adresse de début ({start_address})" -#: netbox/ipam/models/ip.py:590 +#: netbox/ipam/models/ip.py:589 #, python-brace-format msgid "Defined addresses overlap with range {overlapping_range} in VRF {vrf}" msgstr "" "Les adresses définies se chevauchent avec la plage {overlapping_range} en " "VRF {vrf}" -#: netbox/ipam/models/ip.py:599 +#: netbox/ipam/models/ip.py:598 #, python-brace-format msgid "Defined range exceeds maximum supported size ({max_size})" msgstr "" "La plage définie dépasse la taille maximale prise en charge ({max_size})" -#: netbox/ipam/models/ip.py:711 netbox/tenancy/models/contacts.py:82 +#: netbox/ipam/models/ip.py:710 netbox/tenancy/models/contacts.py:77 msgid "address" msgstr "adresse" -#: netbox/ipam/models/ip.py:734 +#: netbox/ipam/models/ip.py:733 msgid "The operational status of this IP" msgstr "L'état opérationnel de cette adresse IP" @@ -10301,22 +10795,22 @@ msgstr "" msgid "Hostname or FQDN (not case-sensitive)" msgstr "Nom d'hôte ou FQDN (pas de distinction majuscules/minuscules)" -#: netbox/ipam/models/ip.py:789 netbox/ipam/models/services.py:94 +#: netbox/ipam/models/ip.py:789 netbox/ipam/models/services.py:90 msgid "IP addresses" msgstr "Adresses IP" -#: netbox/ipam/models/ip.py:845 +#: netbox/ipam/models/ip.py:842 msgid "Cannot create IP address with /0 mask." msgstr "Impossible de créer une adresse IP avec le masque /0." -#: netbox/ipam/models/ip.py:851 +#: netbox/ipam/models/ip.py:848 #, python-brace-format msgid "{ip} is a network ID, which may not be assigned to an interface." msgstr "" "{ip} est un identifiant réseau, qui ne peut pas être attribué à une " "interface." -#: netbox/ipam/models/ip.py:862 +#: netbox/ipam/models/ip.py:859 #, python-brace-format msgid "" "{ip} is a broadcast address, which may not be assigned to an interface." @@ -10324,12 +10818,12 @@ msgstr "" "{ip} est une adresse de diffusion, qui ne peut pas être attribuée à une " "interface." -#: netbox/ipam/models/ip.py:876 +#: netbox/ipam/models/ip.py:873 #, python-brace-format msgid "Duplicate IP address found in {table}: {ipaddress}" msgstr "Adresse IP dupliquée trouvée dans {table}: {ipaddress}" -#: netbox/ipam/models/ip.py:897 +#: netbox/ipam/models/ip.py:896 msgid "" "Cannot reassign IP address while it is designated as the primary IP for the " "parent object" @@ -10337,76 +10831,76 @@ msgstr "" "Impossible de réattribuer l'adresse IP lorsqu'elle est désignée comme " "adresse IP principale pour l'objet parent" -#: netbox/ipam/models/ip.py:903 +#: netbox/ipam/models/ip.py:902 msgid "Only IPv6 addresses can be assigned SLAAC status" msgstr "" "Seules les adresses IPv6 peuvent être de type SLAAC (Configuration " "automatique des adresses sans état)" -#: netbox/ipam/models/services.py:33 +#: netbox/ipam/models/services.py:32 msgid "port numbers" msgstr "numéros de port" -#: netbox/ipam/models/services.py:59 +#: netbox/ipam/models/services.py:58 msgid "service template" msgstr "modèle de service" -#: netbox/ipam/models/services.py:60 +#: netbox/ipam/models/services.py:59 msgid "service templates" msgstr "modèles de services" -#: netbox/ipam/models/services.py:95 +#: netbox/ipam/models/services.py:91 msgid "The specific IP addresses (if any) to which this service is bound" msgstr "" "Les adresses IP spécifiques (le cas échéant) auxquelles ce service est lié" -#: netbox/ipam/models/services.py:102 +#: netbox/ipam/models/services.py:98 msgid "service" msgstr "service" -#: netbox/ipam/models/services.py:103 +#: netbox/ipam/models/services.py:99 msgid "services" msgstr "services" -#: netbox/ipam/models/services.py:117 +#: netbox/ipam/models/services.py:110 msgid "" "A service cannot be associated with both a device and a virtual machine." msgstr "" "Un service ne peut pas être associé à la fois à un appareil et à une machine" " virtuelle." -#: netbox/ipam/models/services.py:119 +#: netbox/ipam/models/services.py:112 msgid "" "A service must be associated with either a device or a virtual machine." msgstr "" "Un service doit être associé à un appareil ou à une machine virtuelle." -#: netbox/ipam/models/vlans.py:85 +#: netbox/ipam/models/vlans.py:87 msgid "VLAN groups" msgstr "groupes VLAN" -#: netbox/ipam/models/vlans.py:95 +#: netbox/ipam/models/vlans.py:94 msgid "Cannot set scope_type without scope_id." msgstr "Impossible de définir scope_type sans scope_id." -#: netbox/ipam/models/vlans.py:97 +#: netbox/ipam/models/vlans.py:96 msgid "Cannot set scope_id without scope_type." msgstr "Impossible de définir scope_id sans scope_type." -#: netbox/ipam/models/vlans.py:105 +#: netbox/ipam/models/vlans.py:104 #, python-brace-format msgid "Starting VLAN ID in range ({value}) cannot be less than {minimum}" msgstr "" "ID de VLAN de démarrage dans la plage ({value}) ne peut pas être inférieur à" " {minimum}" -#: netbox/ipam/models/vlans.py:111 +#: netbox/ipam/models/vlans.py:110 #, python-brace-format msgid "Ending VLAN ID in range ({value}) cannot exceed {maximum}" msgstr "" "Fin de l'ID VLAN dans la plage ({value}) ne peut pas dépasser {maximum}" -#: netbox/ipam/models/vlans.py:118 +#: netbox/ipam/models/vlans.py:117 #, python-brace-format msgid "" "Ending VLAN ID in range must be greater than or equal to the starting VLAN " @@ -10415,31 +10909,36 @@ msgstr "" "L'ID VLAN final dans la plage doit être supérieur ou égal à l'ID VLAN de " "départ ({range})" -#: netbox/ipam/models/vlans.py:124 +#: netbox/ipam/models/vlans.py:123 msgid "Ranges cannot overlap." msgstr "Les plages ne peuvent pas se chevaucher." -#: netbox/ipam/models/vlans.py:181 +#: netbox/ipam/models/vlans.py:180 msgid "The specific site to which this VLAN is assigned (if any)" msgstr "Le site spécifique auquel ce VLAN est associé (le cas échéant)" -#: netbox/ipam/models/vlans.py:189 +#: netbox/ipam/models/vlans.py:188 msgid "VLAN group (optional)" msgstr "Groupe VLAN (facultatif)" -#: netbox/ipam/models/vlans.py:197 +#: netbox/ipam/models/vlans.py:196 netbox/ipam/models/vlans.py:368 +#: netbox/ipam/models/vlans.py:376 msgid "Numeric VLAN ID (1-4094)" msgstr "ID VLAN numérique (1-4094)" -#: netbox/ipam/models/vlans.py:215 +#: netbox/ipam/models/vlans.py:214 msgid "Operational status of this VLAN" msgstr "État opérationnel de ce VLAN" -#: netbox/ipam/models/vlans.py:223 +#: netbox/ipam/models/vlans.py:222 msgid "The primary function of this VLAN" msgstr "La principale fonction de ce VLAN" -#: netbox/ipam/models/vlans.py:266 +#: netbox/ipam/models/vlans.py:237 +msgid "Customer/service VLAN designation (for Q-in-Q/IEEE 802.1ad)" +msgstr "Désignation du VLAN client/service (pour Q-in-Q/IEEE 802.1ad)" + +#: netbox/ipam/models/vlans.py:285 #, python-brace-format msgid "" "VLAN is assigned to group {group} (scope: {scope}); cannot also assign to " @@ -10448,43 +10947,60 @@ msgstr "" "Le VLAN est associé au groupe {group} (champ d'application : {scope}) ; ne " "peut pas également être associé au site {site}." -#: netbox/ipam/models/vlans.py:275 +#: netbox/ipam/models/vlans.py:294 #, python-brace-format msgid "VID must be in ranges {ranges} for VLANs in group {group}" msgstr "" "Le VID doit être compris dans des plages {ranges} pour les VLAN en groupe " "{group}" -#: netbox/ipam/models/vrfs.py:30 +#: netbox/ipam/models/vlans.py:301 +msgid "Only Q-in-Q customer VLANs maybe assigned to a service VLAN." +msgstr "" +"Seuls les VLAN clients Q-in-Q peuvent être affectés à un VLAN de service." + +#: netbox/ipam/models/vlans.py:307 +msgid "A Q-in-Q customer VLAN must be assigned to a service VLAN." +msgstr "Un VLAN client Q-in-Q doit être attribué à un VLAN de service." + +#: netbox/ipam/models/vlans.py:344 +msgid "VLAN translation policies" +msgstr "Politiques de traduction VLAN" + +#: netbox/ipam/models/vlans.py:385 +msgid "VLAN translation rule" +msgstr "Règle de traduction VLAN" + +#: netbox/ipam/models/vrfs.py:29 msgid "route distinguisher" msgstr "Distincteur d'itinéraire" -#: netbox/ipam/models/vrfs.py:31 +#: netbox/ipam/models/vrfs.py:30 msgid "Unique route distinguisher (as defined in RFC 4364)" msgstr "Distincteur d'itinéraire unique (tel que défini dans la RFC 4364)" -#: netbox/ipam/models/vrfs.py:42 +#: netbox/ipam/models/vrfs.py:41 msgid "enforce unique space" msgstr "renforcer un espace unique" -#: netbox/ipam/models/vrfs.py:43 +#: netbox/ipam/models/vrfs.py:42 msgid "Prevent duplicate prefixes/IP addresses within this VRF" msgstr "Empêchez les préfixes/adresses IP dupliqués dans ce VRF" -#: netbox/ipam/models/vrfs.py:63 netbox/netbox/navigation/menu.py:186 -#: netbox/netbox/navigation/menu.py:188 +#: netbox/ipam/models/vrfs.py:62 netbox/netbox/navigation/menu.py:192 +#: netbox/netbox/navigation/menu.py:194 msgid "VRFs" msgstr "VRF" -#: netbox/ipam/models/vrfs.py:82 +#: netbox/ipam/models/vrfs.py:78 msgid "Route target value (formatted in accordance with RFC 4360)" msgstr "Valeur cible de l'itinéraire (formatée conformément à la RFC 4360)" -#: netbox/ipam/models/vrfs.py:94 +#: netbox/ipam/models/vrfs.py:91 msgid "route target" msgstr "cible de l'itinéraire" -#: netbox/ipam/models/vrfs.py:95 +#: netbox/ipam/models/vrfs.py:92 msgid "route targets" msgstr "cibles de l'itinéraire" @@ -10500,84 +11016,101 @@ msgstr "Nombre de sites" msgid "Provider Count" msgstr "Nombre de fournisseurs" -#: netbox/ipam/tables/ip.py:95 netbox/netbox/navigation/menu.py:179 -#: netbox/netbox/navigation/menu.py:181 +#: netbox/ipam/tables/ip.py:41 netbox/netbox/navigation/menu.py:185 +#: netbox/netbox/navigation/menu.py:187 msgid "Aggregates" msgstr "Agrégats" -#: netbox/ipam/tables/ip.py:125 +#: netbox/ipam/tables/ip.py:71 msgid "Added" msgstr "Ajouté" -#: netbox/ipam/tables/ip.py:128 netbox/ipam/tables/ip.py:166 -#: netbox/ipam/tables/vlans.py:142 netbox/ipam/views.py:346 -#: netbox/netbox/navigation/menu.py:165 netbox/netbox/navigation/menu.py:167 -#: netbox/templates/ipam/vlan.html:84 +#: netbox/ipam/tables/ip.py:74 netbox/ipam/tables/ip.py:112 +#: netbox/ipam/tables/vlans.py:118 netbox/ipam/views.py:373 +#: netbox/netbox/navigation/menu.py:171 netbox/netbox/navigation/menu.py:173 +#: netbox/templates/ipam/vlan.html:100 msgid "Prefixes" msgstr "Préfixes" -#: netbox/ipam/tables/ip.py:131 netbox/ipam/tables/ip.py:270 -#: netbox/ipam/tables/ip.py:324 netbox/ipam/tables/vlans.py:86 +#: netbox/ipam/tables/ip.py:77 netbox/ipam/tables/ip.py:221 +#: netbox/ipam/tables/ip.py:276 netbox/ipam/tables/vlans.py:55 #: netbox/templates/dcim/device.html:260 #: netbox/templates/ipam/aggregate.html:24 -#: netbox/templates/ipam/iprange.html:29 netbox/templates/ipam/prefix.html:106 +#: netbox/templates/ipam/iprange.html:29 netbox/templates/ipam/prefix.html:102 msgid "Utilization" msgstr "Utilisation" -#: netbox/ipam/tables/ip.py:171 netbox/netbox/navigation/menu.py:161 +#: netbox/ipam/tables/ip.py:117 netbox/netbox/navigation/menu.py:167 msgid "IP Ranges" msgstr "Plages d'adresses IP" -#: netbox/ipam/tables/ip.py:221 +#: netbox/ipam/tables/ip.py:167 msgid "Prefix (Flat)" msgstr "Préfixe (plat)" -#: netbox/ipam/tables/ip.py:225 +#: netbox/ipam/tables/ip.py:171 msgid "Depth" msgstr "Profondeur" -#: netbox/ipam/tables/ip.py:262 +#: netbox/ipam/tables/ip.py:191 netbox/ipam/tables/vlans.py:37 +#: netbox/virtualization/tables/clusters.py:77 +#: netbox/wireless/tables/wirelesslan.py:55 +msgid "Scope Type" +msgstr "Type de portée" + +#: netbox/ipam/tables/ip.py:213 msgid "Pool" msgstr "Plage d'adresses" -#: netbox/ipam/tables/ip.py:266 netbox/ipam/tables/ip.py:320 +#: netbox/ipam/tables/ip.py:217 netbox/ipam/tables/ip.py:272 msgid "Marked Utilized" msgstr "Marqué comme utilisé" -#: netbox/ipam/tables/ip.py:304 +#: netbox/ipam/tables/ip.py:256 msgid "Start address" msgstr "Adresse de départ" -#: netbox/ipam/tables/ip.py:383 +#: netbox/ipam/tables/ip.py:335 msgid "NAT (Inside)" msgstr "NAT (intérieur)" -#: netbox/ipam/tables/ip.py:388 +#: netbox/ipam/tables/ip.py:340 msgid "NAT (Outside)" msgstr "NAT (extérieur)" -#: netbox/ipam/tables/ip.py:393 +#: netbox/ipam/tables/ip.py:345 msgid "Assigned" msgstr "Attribué" -#: netbox/ipam/tables/ip.py:429 netbox/templates/vpn/l2vpntermination.html:16 +#: netbox/ipam/tables/ip.py:381 netbox/templates/vpn/l2vpntermination.html:16 #: netbox/vpn/forms/filtersets.py:240 msgid "Assigned Object" msgstr "Objet attribué" -#: netbox/ipam/tables/vlans.py:68 -msgid "Scope Type" -msgstr "Type de portée" - -#: netbox/ipam/tables/vlans.py:76 +#: netbox/ipam/tables/vlans.py:45 msgid "VID Ranges" msgstr "Gammes VID" -#: netbox/ipam/tables/vlans.py:111 netbox/ipam/tables/vlans.py:214 +#: netbox/ipam/tables/vlans.py:80 netbox/ipam/tables/vlans.py:190 #: netbox/templates/dcim/inc/interface_vlans_table.html:4 msgid "VID" msgstr "VID" +#: netbox/ipam/tables/vlans.py:237 +#: netbox/templates/ipam/vlantranslationpolicy.html:22 +msgid "Rules" +msgstr "Règles" + +#: netbox/ipam/tables/vlans.py:260 +#: netbox/templates/ipam/vlantranslationrule.html:18 +msgid "Local VID" +msgstr "VID local" + +#: netbox/ipam/tables/vlans.py:264 +#: netbox/templates/ipam/vlantranslationrule.html:22 +msgid "Remote VID" +msgstr "VID à distance" + #: netbox/ipam/tables/vrfs.py:30 msgid "RD" msgstr "RD" @@ -10619,23 +11152,23 @@ 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:533 +#: netbox/ipam/views.py:570 msgid "Child Prefixes" msgstr "Préfixes pour enfants" -#: netbox/ipam/views.py:569 +#: netbox/ipam/views.py:606 msgid "Child Ranges" msgstr "Plages pour enfants" -#: netbox/ipam/views.py:898 +#: netbox/ipam/views.py:958 msgid "Related IPs" msgstr "IP associées" -#: netbox/ipam/views.py:1127 +#: netbox/ipam/views.py:1315 msgid "Device Interfaces" msgstr "Interfaces des appareils" -#: netbox/ipam/views.py:1145 +#: netbox/ipam/views.py:1333 msgid "VM Interfaces" msgstr "Interfaces de machines virtuelles" @@ -10688,90 +11221,112 @@ msgstr "{class_name} doit implémenter get_view_name ()" msgid "Invalid permission {permission} for model {model}" msgstr "Autorisation non valide {permission} pour modèle {model}" -#: netbox/netbox/choices.py:49 +#: netbox/netbox/choices.py:51 msgid "Dark Red" msgstr "Rouge foncé" -#: netbox/netbox/choices.py:52 +#: netbox/netbox/choices.py:54 msgid "Rose" msgstr "Rose" -#: netbox/netbox/choices.py:53 +#: netbox/netbox/choices.py:55 msgid "Fuchsia" msgstr "Fuchsia" -#: netbox/netbox/choices.py:55 +#: netbox/netbox/choices.py:57 msgid "Dark Purple" msgstr "Violet foncé" -#: netbox/netbox/choices.py:58 +#: netbox/netbox/choices.py:60 msgid "Light Blue" msgstr "Bleu clair" -#: netbox/netbox/choices.py:61 +#: netbox/netbox/choices.py:63 msgid "Aqua" msgstr "Aqua" -#: netbox/netbox/choices.py:62 +#: netbox/netbox/choices.py:64 msgid "Dark Green" msgstr "Vert foncé" -#: netbox/netbox/choices.py:64 +#: netbox/netbox/choices.py:66 msgid "Light Green" msgstr "Vert clair" -#: netbox/netbox/choices.py:65 +#: netbox/netbox/choices.py:67 msgid "Lime" msgstr "Citron" -#: netbox/netbox/choices.py:67 +#: netbox/netbox/choices.py:69 msgid "Amber" msgstr "Ambre" -#: netbox/netbox/choices.py:69 +#: netbox/netbox/choices.py:71 msgid "Dark Orange" msgstr "Orange foncé" -#: netbox/netbox/choices.py:70 +#: netbox/netbox/choices.py:72 msgid "Brown" msgstr "Marron" -#: netbox/netbox/choices.py:71 +#: netbox/netbox/choices.py:73 msgid "Light Grey" msgstr "gris clair" -#: netbox/netbox/choices.py:72 +#: netbox/netbox/choices.py:74 msgid "Grey" msgstr "gris" -#: netbox/netbox/choices.py:73 +#: netbox/netbox/choices.py:75 msgid "Dark Grey" msgstr "gris foncé" -#: netbox/netbox/choices.py:128 +#: netbox/netbox/choices.py:103 netbox/templates/extras/script_result.html:56 +msgid "Default" +msgstr "Par défaut" + +#: netbox/netbox/choices.py:130 msgid "Direct" msgstr "Directement" -#: netbox/netbox/choices.py:129 +#: netbox/netbox/choices.py:131 msgid "Upload" msgstr "Téléverser" -#: netbox/netbox/choices.py:141 netbox/netbox/choices.py:155 +#: netbox/netbox/choices.py:143 netbox/netbox/choices.py:157 msgid "Auto-detect" msgstr "Détection automatique" -#: netbox/netbox/choices.py:156 +#: netbox/netbox/choices.py:158 msgid "Comma" msgstr "Virgule" -#: netbox/netbox/choices.py:157 +#: netbox/netbox/choices.py:159 msgid "Semicolon" msgstr "Point-virgule" -#: netbox/netbox/choices.py:158 +#: netbox/netbox/choices.py:160 msgid "Tab" msgstr "Onglet" +#: netbox/netbox/choices.py:193 netbox/templates/dcim/device.html:327 +#: netbox/templates/dcim/rack.html:107 +msgid "Kilograms" +msgstr "Kilogrammes" + +#: netbox/netbox/choices.py:194 +msgid "Grams" +msgstr "Grammes" + +#: netbox/netbox/choices.py:195 netbox/templates/dcim/device.html:328 +#: netbox/templates/dcim/rack.html:108 +msgid "Pounds" +msgstr "Livres" + +#: netbox/netbox/choices.py:196 +msgid "Ounces" +msgstr "Onces" + #: netbox/netbox/config/__init__.py:67 #, python-brace-format msgid "Invalid configuration parameter: {item}" @@ -11069,6 +11624,26 @@ msgstr "date de synchronisation" msgid "{class_name} must implement a sync_data() method." msgstr "{class_name} doit implémenter une méthode sync_data ()." +#: netbox/netbox/models/mixins.py:22 +msgid "weight unit" +msgstr "unité de poids" + +#: netbox/netbox/models/mixins.py:52 +msgid "Must specify a unit when setting a weight" +msgstr "Doit spécifier une unité lors de la définition d'un poids" + +#: netbox/netbox/models/mixins.py:57 +msgid "distance" +msgstr "distance" + +#: netbox/netbox/models/mixins.py:64 +msgid "distance unit" +msgstr "unité de distance" + +#: netbox/netbox/models/mixins.py:99 +msgid "Must specify a unit when setting a distance" +msgstr "Vous devez spécifier une unité lors du réglage d'une distance" + #: netbox/netbox/navigation/menu.py:11 msgid "Organization" msgstr "Organisation" @@ -11102,10 +11677,6 @@ msgstr "Rôles de la baie" msgid "Elevations" msgstr "Élévations" -#: netbox/netbox/navigation/menu.py:60 netbox/netbox/navigation/menu.py:62 -msgid "Rack Types" -msgstr "Types de baie" - #: netbox/netbox/navigation/menu.py:76 msgid "Modules" msgstr "Modules" @@ -11128,175 +11699,200 @@ msgstr "Composants de l'appareil" msgid "Inventory Item Roles" msgstr "Rôles des articles d'inventaire" -#: netbox/netbox/navigation/menu.py:111 netbox/netbox/navigation/menu.py:115 +#: netbox/netbox/navigation/menu.py:110 +#: netbox/templates/dcim/interface.html:413 +#: netbox/templates/virtualization/vminterface.html:118 +msgid "MAC Addresses" +msgstr "Adresses MAC" + +#: netbox/netbox/navigation/menu.py:117 netbox/netbox/navigation/menu.py:121 +#: netbox/templates/dcim/interface.html:182 msgid "Connections" msgstr "Connexions" -#: netbox/netbox/navigation/menu.py:117 +#: netbox/netbox/navigation/menu.py:123 msgid "Cables" msgstr "Câbles" -#: netbox/netbox/navigation/menu.py:118 +#: netbox/netbox/navigation/menu.py:124 msgid "Wireless Links" msgstr "Liaisons sans fil" -#: netbox/netbox/navigation/menu.py:121 +#: netbox/netbox/navigation/menu.py:127 msgid "Interface Connections" msgstr "Connexions d'interface" -#: netbox/netbox/navigation/menu.py:126 +#: netbox/netbox/navigation/menu.py:132 msgid "Console Connections" msgstr "Connexions à la console" -#: netbox/netbox/navigation/menu.py:131 +#: netbox/netbox/navigation/menu.py:137 msgid "Power Connections" msgstr "Connexions électriques" -#: netbox/netbox/navigation/menu.py:147 +#: netbox/netbox/navigation/menu.py:153 msgid "Wireless LAN Groups" msgstr "Groupes réseaux sans fil" -#: netbox/netbox/navigation/menu.py:168 +#: netbox/netbox/navigation/menu.py:174 msgid "Prefix & VLAN Roles" msgstr "Préfixes et rôles VLAN" -#: netbox/netbox/navigation/menu.py:174 +#: netbox/netbox/navigation/menu.py:180 msgid "ASN Ranges" msgstr "Plages ASN" -#: netbox/netbox/navigation/menu.py:196 +#: netbox/netbox/navigation/menu.py:202 msgid "VLAN Groups" msgstr "Groupes VLAN" #: netbox/netbox/navigation/menu.py:203 +msgid "VLAN Translation Policies" +msgstr "Politiques de traduction VLAN" + +#: netbox/netbox/navigation/menu.py:204 +#: netbox/templates/ipam/vlantranslationpolicy.html:46 +msgid "VLAN Translation Rules" +msgstr "Règles de traduction VLAN" + +#: netbox/netbox/navigation/menu.py:211 msgid "Service Templates" msgstr "Modèles de services" -#: netbox/netbox/navigation/menu.py:204 netbox/templates/dcim/device.html:302 +#: netbox/netbox/navigation/menu.py:212 netbox/templates/dcim/device.html:302 #: netbox/templates/ipam/ipaddress.html:118 #: netbox/templates/virtualization/virtualmachine.html:154 msgid "Services" msgstr "Des services" -#: netbox/netbox/navigation/menu.py:211 +#: netbox/netbox/navigation/menu.py:219 msgid "VPN" msgstr "VPN" -#: netbox/netbox/navigation/menu.py:215 netbox/netbox/navigation/menu.py:217 +#: netbox/netbox/navigation/menu.py:223 netbox/netbox/navigation/menu.py:225 #: netbox/vpn/tables/tunnels.py:24 msgid "Tunnels" msgstr "Tunnels" -#: netbox/netbox/navigation/menu.py:218 +#: netbox/netbox/navigation/menu.py:226 #: netbox/templates/vpn/tunnelgroup.html:8 msgid "Tunnel Groups" msgstr "Groupes de tunnels" -#: netbox/netbox/navigation/menu.py:219 +#: netbox/netbox/navigation/menu.py:227 msgid "Tunnel Terminations" msgstr "Terminaisons de tunnels" -#: netbox/netbox/navigation/menu.py:223 netbox/netbox/navigation/menu.py:225 +#: netbox/netbox/navigation/menu.py:231 netbox/netbox/navigation/menu.py:233 #: netbox/vpn/models/l2vpn.py:64 msgid "L2VPNs" msgstr "VPN L2" -#: netbox/netbox/navigation/menu.py:226 netbox/templates/vpn/l2vpn.html:56 -#: netbox/templates/vpn/tunnel.html:72 netbox/vpn/tables/tunnels.py:58 -msgid "Terminations" -msgstr "Terminaisons" - -#: netbox/netbox/navigation/menu.py:232 +#: netbox/netbox/navigation/menu.py:240 msgid "IKE Proposals" msgstr "Propositions IKE" -#: netbox/netbox/navigation/menu.py:233 +#: netbox/netbox/navigation/menu.py:241 #: netbox/templates/vpn/ikeproposal.html:41 msgid "IKE Policies" msgstr "Politiques IKE" -#: netbox/netbox/navigation/menu.py:234 +#: netbox/netbox/navigation/menu.py:242 msgid "IPSec Proposals" msgstr "Propositions IPSec" -#: netbox/netbox/navigation/menu.py:235 +#: netbox/netbox/navigation/menu.py:243 #: netbox/templates/vpn/ipsecproposal.html:37 msgid "IPSec Policies" msgstr "Politiques IPSec" -#: netbox/netbox/navigation/menu.py:236 netbox/templates/vpn/ikepolicy.html:38 +#: netbox/netbox/navigation/menu.py:244 netbox/templates/vpn/ikepolicy.html:38 #: netbox/templates/vpn/ipsecpolicy.html:25 msgid "IPSec Profiles" msgstr "Profils IPSec" -#: netbox/netbox/navigation/menu.py:251 +#: netbox/netbox/navigation/menu.py:259 #: netbox/templates/virtualization/virtualmachine.html:174 #: netbox/templates/virtualization/virtualmachine/base.html:32 #: netbox/templates/virtualization/virtualmachine_list.html:21 -#: netbox/virtualization/tables/virtualmachines.py:104 -#: netbox/virtualization/views.py:386 +#: netbox/virtualization/tables/virtualmachines.py:74 +#: netbox/virtualization/views.py:403 msgid "Virtual Disks" msgstr "Disques virtuels" -#: netbox/netbox/navigation/menu.py:258 +#: netbox/netbox/navigation/menu.py:266 msgid "Cluster Types" msgstr "Types de clusters" -#: netbox/netbox/navigation/menu.py:259 +#: netbox/netbox/navigation/menu.py:267 msgid "Cluster Groups" msgstr "Groupes de clusters" -#: netbox/netbox/navigation/menu.py:273 +#: netbox/netbox/navigation/menu.py:281 msgid "Circuit Types" msgstr "Types de circuits" -#: netbox/netbox/navigation/menu.py:274 -msgid "Circuit Groups" -msgstr "Groupes de circuits" - -#: netbox/netbox/navigation/menu.py:275 -#: netbox/templates/circuits/circuit.html:66 -msgid "Group Assignments" -msgstr "Devoirs de groupe" - -#: netbox/netbox/navigation/menu.py:276 +#: netbox/netbox/navigation/menu.py:282 msgid "Circuit Terminations" msgstr "Terminaisons de circuits" -#: netbox/netbox/navigation/menu.py:280 netbox/netbox/navigation/menu.py:282 +#: netbox/netbox/navigation/menu.py:286 netbox/netbox/navigation/menu.py:288 +#: netbox/templates/circuits/providernetwork.html:55 +msgid "Virtual Circuits" +msgstr "Circuits virtuels" + +#: netbox/netbox/navigation/menu.py:289 +msgid "Virtual Circuit Types" +msgstr "Types de circuits virtuels" + +#: netbox/netbox/navigation/menu.py:290 +msgid "Virtual Circuit Terminations" +msgstr "Terminaisons de circuits virtuels" + +#: netbox/netbox/navigation/menu.py:296 +msgid "Circuit Groups" +msgstr "Groupes de circuits" + +#: netbox/netbox/navigation/menu.py:297 +#: netbox/templates/circuits/circuit.html:76 +#: netbox/templates/circuits/virtualcircuit.html:69 +msgid "Group Assignments" +msgstr "Devoirs de groupe" + +#: netbox/netbox/navigation/menu.py:301 netbox/netbox/navigation/menu.py:303 msgid "Providers" msgstr "Prestataires" -#: netbox/netbox/navigation/menu.py:283 +#: netbox/netbox/navigation/menu.py:304 #: netbox/templates/circuits/provider.html:51 msgid "Provider Accounts" msgstr "Comptes des fournisseurs" -#: netbox/netbox/navigation/menu.py:284 +#: netbox/netbox/navigation/menu.py:305 msgid "Provider Networks" msgstr "Réseaux de fournisseurs" -#: netbox/netbox/navigation/menu.py:298 +#: netbox/netbox/navigation/menu.py:319 msgid "Power Panels" msgstr "Panneaux d'alimentation" -#: netbox/netbox/navigation/menu.py:309 +#: netbox/netbox/navigation/menu.py:330 msgid "Configurations" msgstr "Configurations" -#: netbox/netbox/navigation/menu.py:311 +#: netbox/netbox/navigation/menu.py:332 msgid "Config Contexts" msgstr "Contextes de configuration" -#: netbox/netbox/navigation/menu.py:312 +#: netbox/netbox/navigation/menu.py:333 msgid "Config Templates" msgstr "Modèles de configuration" -#: netbox/netbox/navigation/menu.py:319 netbox/netbox/navigation/menu.py:323 +#: netbox/netbox/navigation/menu.py:340 netbox/netbox/navigation/menu.py:344 msgid "Customization" msgstr "Personnalisation" -#: netbox/netbox/navigation/menu.py:325 +#: netbox/netbox/navigation/menu.py:346 #: netbox/templates/dcim/device_edit.html:103 #: netbox/templates/dcim/htmx/cable_edit.html:81 #: netbox/templates/dcim/virtualchassis_add.html:31 @@ -11305,96 +11901,96 @@ msgstr "Personnalisation" #: netbox/templates/htmx/form.html:19 netbox/templates/inc/filter_list.html:30 #: netbox/templates/inc/panels/custom_fields.html:7 #: netbox/templates/ipam/ipaddress_bulk_add.html:35 -#: netbox/templates/ipam/vlan_edit.html:59 +#: netbox/templates/ipam/vlan_edit.html:67 msgid "Custom Fields" msgstr "Champs personnalisés" -#: netbox/netbox/navigation/menu.py:326 +#: netbox/netbox/navigation/menu.py:347 msgid "Custom Field Choices" msgstr "Choix de champs personnalisés" -#: netbox/netbox/navigation/menu.py:327 +#: netbox/netbox/navigation/menu.py:348 msgid "Custom Links" msgstr "Liens personnalisés" -#: netbox/netbox/navigation/menu.py:328 +#: netbox/netbox/navigation/menu.py:349 msgid "Export Templates" msgstr "Modèles d'exportation" -#: netbox/netbox/navigation/menu.py:329 +#: netbox/netbox/navigation/menu.py:350 msgid "Saved Filters" msgstr "Filtres enregistrés" -#: netbox/netbox/navigation/menu.py:331 +#: netbox/netbox/navigation/menu.py:352 msgid "Image Attachments" msgstr "Pièces jointes à des images" -#: netbox/netbox/navigation/menu.py:349 +#: netbox/netbox/navigation/menu.py:370 msgid "Operations" msgstr "Opérations" -#: netbox/netbox/navigation/menu.py:353 +#: netbox/netbox/navigation/menu.py:374 msgid "Integrations" msgstr "Intégrations" -#: netbox/netbox/navigation/menu.py:355 +#: netbox/netbox/navigation/menu.py:376 msgid "Data Sources" msgstr "Sources de données" -#: netbox/netbox/navigation/menu.py:356 +#: netbox/netbox/navigation/menu.py:377 msgid "Event Rules" msgstr "Règles de l'événement" -#: netbox/netbox/navigation/menu.py:357 +#: netbox/netbox/navigation/menu.py:378 msgid "Webhooks" msgstr "Webhooks" -#: netbox/netbox/navigation/menu.py:361 netbox/netbox/navigation/menu.py:365 -#: netbox/netbox/views/generic/feature_views.py:153 +#: netbox/netbox/navigation/menu.py:382 netbox/netbox/navigation/menu.py:386 +#: netbox/netbox/views/generic/feature_views.py:158 #: netbox/templates/extras/report/base.html:37 #: netbox/templates/extras/script/base.html:36 msgid "Jobs" msgstr "Emplois" -#: netbox/netbox/navigation/menu.py:371 +#: netbox/netbox/navigation/menu.py:392 msgid "Logging" msgstr "Journalisation" -#: netbox/netbox/navigation/menu.py:373 +#: netbox/netbox/navigation/menu.py:394 msgid "Notification Groups" msgstr "Groupes de notifications" -#: netbox/netbox/navigation/menu.py:374 +#: netbox/netbox/navigation/menu.py:395 msgid "Journal Entries" msgstr "Entrées de journal" -#: netbox/netbox/navigation/menu.py:375 +#: netbox/netbox/navigation/menu.py:396 #: netbox/templates/core/objectchange.html:9 #: netbox/templates/core/objectchange_list.html:4 msgid "Change Log" msgstr "Journal des modifications" -#: netbox/netbox/navigation/menu.py:382 netbox/templates/inc/user_menu.html:29 +#: netbox/netbox/navigation/menu.py:403 netbox/templates/inc/user_menu.html:29 msgid "Admin" msgstr "Administrateur" -#: netbox/netbox/navigation/menu.py:430 netbox/templates/account/base.html:27 -#: netbox/templates/inc/user_menu.html:57 +#: netbox/netbox/navigation/menu.py:451 netbox/templates/account/base.html:27 +#: netbox/templates/inc/user_menu.html:52 msgid "API Tokens" msgstr "Jetons d'API" -#: netbox/netbox/navigation/menu.py:437 netbox/users/forms/model_forms.py:187 +#: netbox/netbox/navigation/menu.py:458 netbox/users/forms/model_forms.py:187 #: netbox/users/forms/model_forms.py:195 netbox/users/forms/model_forms.py:242 #: netbox/users/forms/model_forms.py:249 msgid "Permissions" msgstr "Autorisations" -#: netbox/netbox/navigation/menu.py:445 netbox/netbox/navigation/menu.py:449 +#: netbox/netbox/navigation/menu.py:466 netbox/netbox/navigation/menu.py:470 #: netbox/templates/core/system.html:7 msgid "System" msgstr "Système" -#: netbox/netbox/navigation/menu.py:454 netbox/netbox/navigation/menu.py:502 +#: netbox/netbox/navigation/menu.py:475 netbox/netbox/navigation/menu.py:523 #: netbox/templates/500.html:35 netbox/templates/account/preferences.html:22 #: netbox/templates/core/plugin.html:13 #: netbox/templates/core/plugin_list.html:7 @@ -11402,30 +11998,30 @@ msgstr "Système" msgid "Plugins" msgstr "Plug-ins" -#: netbox/netbox/navigation/menu.py:459 +#: netbox/netbox/navigation/menu.py:480 msgid "Configuration History" msgstr "Historique de configuration" -#: netbox/netbox/navigation/menu.py:465 netbox/templates/core/rq_task.html:8 +#: netbox/netbox/navigation/menu.py:486 netbox/templates/core/rq_task.html:8 #: netbox/templates/core/rq_task_list.html:22 msgid "Background Tasks" msgstr "Tâches d'arrière-plan" -#: netbox/netbox/plugins/navigation.py:47 -#: netbox/netbox/plugins/navigation.py:69 +#: netbox/netbox/plugins/navigation.py:48 +#: netbox/netbox/plugins/navigation.py:70 msgid "Permissions must be passed as a tuple or list." msgstr "" "Les autorisations doivent être transmises sous forme de tuple ou de liste." -#: netbox/netbox/plugins/navigation.py:51 +#: netbox/netbox/plugins/navigation.py:52 msgid "Buttons must be passed as a tuple or list." msgstr "Les boutons doivent être transmis sous forme de tuple ou de liste." -#: netbox/netbox/plugins/navigation.py:73 +#: netbox/netbox/plugins/navigation.py:74 msgid "Button color must be a choice within ButtonColorChoices." msgstr "La couleur du bouton doit être sélectionnée dans ButtonColorChoices." -#: netbox/netbox/plugins/registration.py:25 +#: netbox/netbox/plugins/registration.py:26 #, python-brace-format msgid "" "PluginTemplateExtension class {template_extension} was passed as an " @@ -11434,7 +12030,7 @@ msgstr "" "Classe PluginTemplateExtension {template_extension} a été transmis en tant " "qu'instance !" -#: netbox/netbox/plugins/registration.py:31 +#: netbox/netbox/plugins/registration.py:32 #, python-brace-format msgid "" "{template_extension} is not a subclass of " @@ -11443,17 +12039,17 @@ msgstr "" "{template_extension} n'est pas une sous-classe de " "Netbox.Plugins.PluginTemplateExtension !" -#: netbox/netbox/plugins/registration.py:51 +#: netbox/netbox/plugins/registration.py:57 #, python-brace-format msgid "{item} must be an instance of netbox.plugins.PluginMenuItem" msgstr "{item} doit être une instance de Netbox.Plugins.PluginMenuItem" -#: netbox/netbox/plugins/registration.py:62 +#: netbox/netbox/plugins/registration.py:68 #, python-brace-format msgid "{menu_link} must be an instance of netbox.plugins.PluginMenuItem" msgstr "{menu_link} doit être une instance de Netbox.Plugins.PluginMenuItem" -#: netbox/netbox/plugins/registration.py:67 +#: netbox/netbox/plugins/registration.py:73 #, python-brace-format msgid "{button} must be an instance of netbox.plugins.PluginMenuButton" msgstr "{button} doit être une instance de Netbox.Plugins.PluginMenuButton" @@ -11539,93 +12135,93 @@ msgstr "Impossible d'ajouter des magasins au registre après l'initialisation" msgid "Cannot delete stores from registry" msgstr "Impossible de supprimer des magasins du registre" -#: netbox/netbox/settings.py:760 +#: netbox/netbox/settings.py:752 msgid "Czech" msgstr "tchèque" -#: netbox/netbox/settings.py:761 +#: netbox/netbox/settings.py:753 msgid "Danish" msgstr "danois" -#: netbox/netbox/settings.py:762 +#: netbox/netbox/settings.py:754 msgid "German" msgstr "allemand" -#: netbox/netbox/settings.py:763 +#: netbox/netbox/settings.py:755 msgid "English" msgstr "Anglais" -#: netbox/netbox/settings.py:764 +#: netbox/netbox/settings.py:756 msgid "Spanish" msgstr "espagnol" -#: netbox/netbox/settings.py:765 +#: netbox/netbox/settings.py:757 msgid "French" msgstr "français" -#: netbox/netbox/settings.py:766 +#: netbox/netbox/settings.py:758 msgid "Italian" msgstr "italien" -#: netbox/netbox/settings.py:767 +#: netbox/netbox/settings.py:759 msgid "Japanese" msgstr "japonais" -#: netbox/netbox/settings.py:768 +#: netbox/netbox/settings.py:760 msgid "Dutch" msgstr "néerlandais" -#: netbox/netbox/settings.py:769 +#: netbox/netbox/settings.py:761 msgid "Polish" msgstr "polonais" -#: netbox/netbox/settings.py:770 +#: netbox/netbox/settings.py:762 msgid "Portuguese" msgstr "portugais" -#: netbox/netbox/settings.py:771 +#: netbox/netbox/settings.py:763 msgid "Russian" msgstr "russe" -#: netbox/netbox/settings.py:772 +#: netbox/netbox/settings.py:764 msgid "Turkish" msgstr "Turc" -#: netbox/netbox/settings.py:773 +#: netbox/netbox/settings.py:765 msgid "Ukrainian" msgstr "Ukrainien" -#: netbox/netbox/settings.py:774 +#: netbox/netbox/settings.py:766 msgid "Chinese" msgstr "chinois" -#: netbox/netbox/tables/columns.py:176 +#: netbox/netbox/tables/columns.py:177 msgid "Select all" msgstr "Tout sélectionner" -#: netbox/netbox/tables/columns.py:189 +#: netbox/netbox/tables/columns.py:190 msgid "Toggle all" msgstr "Tout afficher" -#: netbox/netbox/tables/columns.py:300 +#: netbox/netbox/tables/columns.py:302 msgid "Toggle Dropdown" msgstr "Basculer vers le menu déroulant" -#: netbox/netbox/tables/columns.py:572 netbox/templates/core/job.html:53 +#: netbox/netbox/tables/columns.py:575 netbox/templates/core/job.html:53 msgid "Error" msgstr "Erreur" -#: netbox/netbox/tables/tables.py:58 +#: netbox/netbox/tables/tables.py:59 #, python-brace-format msgid "No {model_name} found" msgstr "{model_name} non trouvé" -#: netbox/netbox/tables/tables.py:249 +#: netbox/netbox/tables/tables.py:252 #: netbox/templates/generic/bulk_import.html:117 msgid "Field" msgstr "Champ" -#: netbox/netbox/tables/tables.py:252 +#: netbox/netbox/tables/tables.py:255 msgid "Value" msgstr "Valeur" @@ -11642,24 +12238,24 @@ msgstr "" "Une erreur s'est produite lors de l'affichage du modèle d'exportation " "sélectionné ({template}) : {error}" -#: netbox/netbox/views/generic/bulk_views.py:416 +#: netbox/netbox/views/generic/bulk_views.py:421 #, python-brace-format msgid "Row {i}: Object with ID {id} does not exist" msgstr "Rangée {i}: Objet avec identifiant {id} n'existe pas" -#: netbox/netbox/views/generic/bulk_views.py:709 -#: netbox/netbox/views/generic/bulk_views.py:910 -#: netbox/netbox/views/generic/bulk_views.py:958 +#: netbox/netbox/views/generic/bulk_views.py:708 +#: netbox/netbox/views/generic/bulk_views.py:909 +#: netbox/netbox/views/generic/bulk_views.py:957 #, python-brace-format msgid "No {object_type} were selected." msgstr "Non {object_type} ont été sélectionnés." -#: netbox/netbox/views/generic/bulk_views.py:788 +#: netbox/netbox/views/generic/bulk_views.py:787 #, python-brace-format msgid "Renamed {count} {object_type}" msgstr "Renommé {count} {object_type}" -#: netbox/netbox/views/generic/bulk_views.py:888 +#: netbox/netbox/views/generic/bulk_views.py:887 #, python-brace-format msgid "Deleted {count} {object_type}" msgstr "Supprimé {count} {object_type}" @@ -11672,18 +12268,18 @@ msgstr "Journal des modifications" msgid "Journal" msgstr "Journal" -#: netbox/netbox/views/generic/feature_views.py:207 +#: netbox/netbox/views/generic/feature_views.py:212 msgid "Unable to synchronize data: No data file set." msgstr "" "Impossible de synchroniser les données : aucun fichier de données n'est " "défini." -#: netbox/netbox/views/generic/feature_views.py:211 +#: netbox/netbox/views/generic/feature_views.py:216 #, python-brace-format msgid "Synchronized data for {object_type} {object}." msgstr "Données synchronisées pour {object_type} {object}." -#: netbox/netbox/views/generic/feature_views.py:236 +#: netbox/netbox/views/generic/feature_views.py:241 #, python-brace-format msgid "Synced {count} {object_type}" msgstr "Synchronisé {count} {object_type}" @@ -11760,9 +12356,9 @@ msgstr "sur GitHub" msgid "Home Page" msgstr "Page d'accueil" -#: netbox/templates/account/base.html:7 netbox/templates/inc/user_menu.html:45 +#: netbox/templates/account/base.html:7 netbox/templates/inc/user_menu.html:40 #: netbox/vpn/forms/bulk_edit.py:255 netbox/vpn/forms/filtersets.py:189 -#: netbox/vpn/forms/model_forms.py:379 +#: netbox/vpn/forms/model_forms.py:382 msgid "Profile" msgstr "Profil" @@ -11774,12 +12370,12 @@ msgstr "Notifications" #: netbox/templates/account/base.html:16 #: netbox/templates/account/subscriptions.html:7 -#: netbox/templates/inc/user_menu.html:51 +#: netbox/templates/inc/user_menu.html:46 msgid "Subscriptions" msgstr "Abonnements" #: netbox/templates/account/base.html:19 -#: netbox/templates/inc/user_menu.html:54 +#: netbox/templates/inc/user_menu.html:49 msgid "Preferences" msgstr "Préférences" @@ -11807,6 +12403,7 @@ msgstr "Modifier le mot de passe" #: netbox/templates/generic/object_edit.html:72 #: netbox/templates/htmx/delete_form.html:53 #: netbox/templates/htmx/delete_form.html:55 +#: netbox/templates/htmx/quick_add.html:21 #: netbox/templates/ipam/ipaddress_assign.html:28 #: netbox/templates/virtualization/cluster_add_devices.html:30 msgid "Cancel" @@ -11905,7 +12502,7 @@ msgstr "Groupes associés" #: netbox/templates/core/objectchange.html:142 #: netbox/templates/dcim/devicebay.html:59 #: netbox/templates/dcim/inc/panels/inventory_items.html:45 -#: netbox/templates/dcim/interface.html:296 +#: netbox/templates/dcim/interface.html:353 #: netbox/templates/dcim/modulebay.html:80 #: netbox/templates/extras/configcontext.html:70 #: netbox/templates/extras/eventrule.html:66 @@ -11914,6 +12511,7 @@ msgstr "Groupes associés" #: netbox/templates/extras/webhook.html:75 #: netbox/templates/inc/panel_table.html:13 #: netbox/templates/inc/panels/comments.html:10 +#: netbox/templates/inc/panels/related_objects.html:23 #: netbox/templates/ipam/inc/panels/fhrp_groups.html:56 #: netbox/templates/users/group.html:34 netbox/templates/users/group.html:44 #: netbox/templates/users/objectpermission.html:77 @@ -11951,7 +12549,7 @@ msgstr "Dernière utilisation" msgid "Add a Token" msgstr "Ajouter un jeton" -#: netbox/templates/base/base.html:22 netbox/templates/home.html:27 +#: netbox/templates/base/base.html:23 netbox/templates/home.html:27 msgid "Home" msgstr "Accueil" @@ -11993,15 +12591,16 @@ msgstr "Code source" msgid "Community" msgstr "Communauté" -#: netbox/templates/circuits/circuit.html:47 +#: netbox/templates/circuits/circuit.html:57 msgid "Install Date" msgstr "Date d'installation" -#: netbox/templates/circuits/circuit.html:51 +#: netbox/templates/circuits/circuit.html:61 msgid "Termination Date" msgstr "Date de résiliation" -#: netbox/templates/circuits/circuit.html:70 +#: netbox/templates/circuits/circuit.html:80 +#: netbox/templates/circuits/virtualcircuit.html:73 #: netbox/templates/ipam/inc/panels/fhrp_groups.html:15 msgid "Assign Group" msgstr "Associer un groupe" @@ -12049,7 +12648,7 @@ msgid "Add" msgstr "Ajouter" #: netbox/templates/circuits/inc/circuit_termination.html:15 -#: netbox/templates/circuits/inc/circuit_termination_fields.html:36 +#: netbox/templates/circuits/inc/circuit_termination_fields.html:37 #: netbox/templates/dcim/inc/panels/inventory_items.html:32 #: netbox/templates/dcim/powerpanel.html:56 #: netbox/templates/extras/script_list.html:30 @@ -12064,35 +12663,39 @@ msgstr "Modifier" msgid "Swap" msgstr "Échange" -#: netbox/templates/circuits/inc/circuit_termination_fields.html:19 +#: netbox/templates/circuits/inc/circuit_termination_fields.html:5 +msgid "Termination point" +msgstr "Point de terminaison" + +#: netbox/templates/circuits/inc/circuit_termination_fields.html:20 #: netbox/templates/dcim/consoleport.html:59 #: netbox/templates/dcim/consoleserverport.html:60 #: netbox/templates/dcim/powerfeed.html:114 msgid "Marked as connected" msgstr "Marqué comme connecté" -#: netbox/templates/circuits/inc/circuit_termination_fields.html:21 +#: netbox/templates/circuits/inc/circuit_termination_fields.html:22 msgid "to" msgstr "pour" -#: netbox/templates/circuits/inc/circuit_termination_fields.html:31 #: netbox/templates/circuits/inc/circuit_termination_fields.html:32 +#: netbox/templates/circuits/inc/circuit_termination_fields.html:33 #: netbox/templates/dcim/frontport.html:80 #: netbox/templates/dcim/inc/connection_endpoints.html:7 -#: netbox/templates/dcim/interface.html:154 +#: netbox/templates/dcim/interface.html:211 #: netbox/templates/dcim/rearport.html:76 msgid "Trace" msgstr "Trace" -#: netbox/templates/circuits/inc/circuit_termination_fields.html:35 +#: netbox/templates/circuits/inc/circuit_termination_fields.html:36 msgid "Edit cable" msgstr "Modifier le câble" -#: netbox/templates/circuits/inc/circuit_termination_fields.html:40 +#: netbox/templates/circuits/inc/circuit_termination_fields.html:41 msgid "Remove cable" msgstr "Retirez le câble" -#: netbox/templates/circuits/inc/circuit_termination_fields.html:41 +#: netbox/templates/circuits/inc/circuit_termination_fields.html:42 #: netbox/templates/dcim/bulk_disconnect.html:5 #: netbox/templates/dcim/device/consoleports.html:12 #: netbox/templates/dcim/device/consoleserverports.html:12 @@ -12105,33 +12708,33 @@ msgstr "Retirez le câble" msgid "Disconnect" msgstr "Déconnectez" -#: netbox/templates/circuits/inc/circuit_termination_fields.html:48 +#: netbox/templates/circuits/inc/circuit_termination_fields.html:49 #: netbox/templates/dcim/consoleport.html:69 #: netbox/templates/dcim/consoleserverport.html:70 #: netbox/templates/dcim/frontport.html:102 -#: netbox/templates/dcim/interface.html:180 -#: netbox/templates/dcim/interface.html:200 +#: netbox/templates/dcim/interface.html:237 +#: netbox/templates/dcim/interface.html:257 #: netbox/templates/dcim/powerfeed.html:127 -#: netbox/templates/dcim/poweroutlet.html:71 -#: netbox/templates/dcim/poweroutlet.html:72 +#: netbox/templates/dcim/poweroutlet.html:81 +#: netbox/templates/dcim/poweroutlet.html:82 #: netbox/templates/dcim/powerport.html:73 #: netbox/templates/dcim/rearport.html:98 msgid "Connect" msgstr "Connecter" -#: netbox/templates/circuits/inc/circuit_termination_fields.html:70 +#: netbox/templates/circuits/inc/circuit_termination_fields.html:65 msgid "Downstream" msgstr "En aval" -#: netbox/templates/circuits/inc/circuit_termination_fields.html:71 +#: netbox/templates/circuits/inc/circuit_termination_fields.html:66 msgid "Upstream" msgstr "En amont" -#: netbox/templates/circuits/inc/circuit_termination_fields.html:80 +#: netbox/templates/circuits/inc/circuit_termination_fields.html:75 msgid "Cross-Connect" msgstr "Connexion croisée" -#: netbox/templates/circuits/inc/circuit_termination_fields.html:84 +#: netbox/templates/circuits/inc/circuit_termination_fields.html:79 msgid "Patch Panel/Port" msgstr "Panneau de raccordement et port" @@ -12143,6 +12746,27 @@ msgstr "Ajouter un circuit" msgid "Provider Account" msgstr "Compte du fournisseur" +#: netbox/templates/circuits/providernetwork.html:59 +msgid "Add a Virtual Circuit" +msgstr "Ajouter un circuit virtuel" + +#: netbox/templates/circuits/virtualcircuit.html:91 +#: netbox/templates/vpn/tunnel.html:9 +msgid "Add Termination" +msgstr "Ajouter une terminaison" + +#: netbox/templates/circuits/virtualcircuittermination.html:23 +msgid "Virtual Circuit Termination" +msgstr "Terminaison du circuit virtuel" + +#: netbox/templates/circuits/virtualcircuittype.html:10 +msgid "Add Virtual Circuit" +msgstr "Ajouter un circuit virtuel" + +#: netbox/templates/circuits/virtualcircuittype.html:19 +msgid "Virtual Circuit Type" +msgstr "Type de circuit virtuel" + #: netbox/templates/core/configrevision.html:35 msgid "Configuration Data" msgstr "Données de configuration" @@ -12176,7 +12800,7 @@ msgstr "Modifié" #: netbox/templates/core/datafile.html:42 #: netbox/templates/ipam/iprange.html:25 #: netbox/templates/virtualization/virtualdisk.html:29 -#: netbox/virtualization/tables/virtualmachines.py:198 +#: netbox/virtualization/tables/virtualmachines.py:169 msgid "Size" msgstr "Taille" @@ -12620,8 +13244,8 @@ msgstr "Renommer la sélection" #: netbox/templates/dcim/consoleport.html:65 #: netbox/templates/dcim/consoleserverport.html:66 #: netbox/templates/dcim/frontport.html:98 -#: netbox/templates/dcim/interface.html:176 -#: netbox/templates/dcim/poweroutlet.html:69 +#: netbox/templates/dcim/interface.html:233 +#: netbox/templates/dcim/poweroutlet.html:79 #: netbox/templates/dcim/powerport.html:69 msgid "Not Connected" msgstr "Non connecté" @@ -12644,7 +13268,7 @@ msgid "Map" msgstr "Carte" #: netbox/templates/dcim/device.html:108 -#: netbox/templates/dcim/inventoryitem.html:56 +#: netbox/templates/dcim/inventoryitem.html:60 #: netbox/templates/dcim/module.html:81 #: netbox/templates/dcim/modulebay.html:74 netbox/templates/dcim/rack.html:61 msgid "Asset Tag" @@ -12660,7 +13284,7 @@ msgstr "Créer un VDC" #: netbox/templates/dcim/device.html:175 #: netbox/templates/dcim/device_edit.html:64 -#: netbox/virtualization/forms/model_forms.py:223 +#: netbox/virtualization/forms/model_forms.py:230 msgid "Management" msgstr "Gestion" @@ -12777,35 +13401,6 @@ msgstr "Ajouter un port d'alimentation" msgid "Add Rear Ports" msgstr "Ajouter des ports arrière" -#: netbox/templates/dcim/device/render_config.html:5 -#: netbox/templates/virtualization/virtualmachine/render_config.html:5 -msgid "Config" -msgstr "Configuration" - -#: netbox/templates/dcim/device/render_config.html:35 -#: netbox/templates/virtualization/virtualmachine/render_config.html:35 -msgid "Context Data" -msgstr "Données de contexte" - -#: netbox/templates/dcim/device/render_config.html:55 -#: netbox/templates/virtualization/virtualmachine/render_config.html:55 -msgid "Rendered Config" -msgstr "Configuration rendue" - -#: netbox/templates/dcim/device/render_config.html:57 -#: netbox/templates/virtualization/virtualmachine/render_config.html:57 -msgid "Download" -msgstr "Télécharger" - -#: netbox/templates/dcim/device/render_config.html:64 -#: netbox/templates/virtualization/virtualmachine/render_config.html:64 -msgid "Error rendering template" -msgstr "Erreur lors du rendu du modèle" - -#: netbox/templates/dcim/device/render_config.html:70 -msgid "No configuration template has been assigned for this device." -msgstr "" - #: netbox/templates/dcim/device_edit.html:44 msgid "Parent Bay" msgstr "Baie Parent" @@ -12872,12 +13467,12 @@ msgid "VM Role" msgstr "Rôle de la machine virtuelle" #: netbox/templates/dcim/devicetype.html:18 -#: netbox/templates/dcim/moduletype.html:29 +#: netbox/templates/dcim/moduletype.html:31 msgid "Model Name" msgstr "Nom du modèle" #: netbox/templates/dcim/devicetype.html:25 -#: netbox/templates/dcim/moduletype.html:33 +#: netbox/templates/dcim/moduletype.html:35 msgid "Part Number" msgstr "Numéro de pièce" @@ -12902,8 +13497,8 @@ msgid "Rear Port Position" msgstr "Position du port arrière" #: netbox/templates/dcim/frontport.html:72 -#: netbox/templates/dcim/interface.html:144 -#: netbox/templates/dcim/poweroutlet.html:63 +#: netbox/templates/dcim/interface.html:201 +#: netbox/templates/dcim/poweroutlet.html:73 #: netbox/templates/dcim/powerport.html:63 #: netbox/templates/dcim/rearport.html:68 msgid "Marked as Connected" @@ -13003,77 +13598,79 @@ msgid "PoE Type" msgstr "Type de PoE" #: netbox/templates/dcim/interface.html:81 -#: netbox/templates/virtualization/vminterface.html:63 +#: netbox/templates/virtualization/vminterface.html:55 +#: netbox/virtualization/forms/model_forms.py:395 msgid "802.1Q Mode" msgstr "Mode 802.1Q" -#: netbox/templates/dcim/interface.html:125 -#: netbox/templates/virtualization/vminterface.html:59 -msgid "MAC Address" -msgstr "Adresse MAC" +#: netbox/templates/dcim/interface.html:156 +#: netbox/templates/virtualization/vminterface.html:88 +msgid "VLAN Translation" +msgstr "Traduction VLAN" -#: netbox/templates/dcim/interface.html:151 +#: netbox/templates/dcim/interface.html:208 msgid "Wireless Link" msgstr "Liaison sans fil" -#: netbox/templates/dcim/interface.html:218 netbox/vpn/choices.py:63 -msgid "Peer" -msgstr "Peer" - -#: netbox/templates/dcim/interface.html:230 +#: netbox/templates/dcim/interface.html:287 #: netbox/templates/wireless/inc/wirelesslink_interface.html:26 msgid "Channel" msgstr "Canal" -#: netbox/templates/dcim/interface.html:239 +#: netbox/templates/dcim/interface.html:296 #: netbox/templates/wireless/inc/wirelesslink_interface.html:32 msgid "Channel Frequency" msgstr "Fréquence du canal" -#: netbox/templates/dcim/interface.html:242 -#: netbox/templates/dcim/interface.html:250 -#: netbox/templates/dcim/interface.html:261 -#: netbox/templates/dcim/interface.html:269 +#: netbox/templates/dcim/interface.html:299 +#: netbox/templates/dcim/interface.html:307 +#: netbox/templates/dcim/interface.html:318 +#: netbox/templates/dcim/interface.html:326 msgid "MHz" msgstr "MHz" -#: netbox/templates/dcim/interface.html:258 +#: netbox/templates/dcim/interface.html:315 #: netbox/templates/wireless/inc/wirelesslink_interface.html:42 msgid "Channel Width" msgstr "Largeur du canal" -#: netbox/templates/dcim/interface.html:285 +#: netbox/templates/dcim/interface.html:342 #: netbox/templates/wireless/wirelesslan.html:14 #: netbox/templates/wireless/wirelesslink.html:21 -#: netbox/wireless/forms/bulk_edit.py:60 -#: netbox/wireless/forms/bulk_edit.py:102 -#: netbox/wireless/forms/filtersets.py:40 -#: netbox/wireless/forms/filtersets.py:80 netbox/wireless/models.py:82 -#: netbox/wireless/models.py:156 netbox/wireless/tables/wirelesslan.py:44 +#: netbox/wireless/forms/bulk_edit.py:62 +#: netbox/wireless/forms/bulk_edit.py:105 +#: netbox/wireless/forms/filtersets.py:43 +#: netbox/wireless/forms/filtersets.py:108 netbox/wireless/models.py:82 +#: netbox/wireless/models.py:153 netbox/wireless/tables/wirelesslan.py:44 msgid "SSID" msgstr "SSID" -#: netbox/templates/dcim/interface.html:305 +#: netbox/templates/dcim/interface.html:362 msgid "LAG Members" msgstr "Membres de l'aggrégat (LAG)" -#: netbox/templates/dcim/interface.html:323 +#: netbox/templates/dcim/interface.html:380 msgid "No member interfaces" msgstr "Aucune interface membre" -#: netbox/templates/dcim/interface.html:343 +#: netbox/templates/dcim/interface.html:400 #: netbox/templates/ipam/fhrpgroup.html:73 #: netbox/templates/ipam/iprange/ip_addresses.html:7 #: netbox/templates/ipam/prefix/ip_addresses.html:7 -#: netbox/templates/virtualization/vminterface.html:89 +#: netbox/templates/virtualization/vminterface.html:105 msgid "Add IP Address" msgstr "Ajouter une adresse IP" +#: netbox/templates/dcim/interface.html:417 +#: netbox/templates/virtualization/vminterface.html:123 +msgid "Add MAC Address" +msgstr "Ajouter une adresse MAC" + #: netbox/templates/dcim/inventoryitem.html:24 msgid "Parent Item" msgstr "Objet parent" -#: netbox/templates/dcim/inventoryitem.html:48 +#: netbox/templates/dcim/inventoryitem.html:52 msgid "Part ID" msgstr "Identifiant de la pièce" @@ -13093,6 +13690,10 @@ msgstr "Ajouter un lieu" msgid "Add a Device" msgstr "Ajouter un appareil" +#: netbox/templates/dcim/macaddress.html:36 +msgid "Primary for interface" +msgstr "Principale pour l'interface" + #: netbox/templates/dcim/manufacturer.html:16 msgid "Add Device Type" msgstr "Ajouter un type d'appareil" @@ -13123,7 +13724,7 @@ msgctxt "Abbreviation for amperes" msgid "A" msgstr "A" -#: netbox/templates/dcim/poweroutlet.html:48 +#: netbox/templates/dcim/poweroutlet.html:58 msgid "Feed Leg" msgstr "Circuit" @@ -13558,11 +14159,19 @@ msgstr "Impossible de charger le contenu. Nom de vue invalide" msgid "No content found" msgstr "Aucun contenu trouvé" -#: netbox/templates/extras/dashboard/widgets/rssfeed.html:18 +#: netbox/templates/extras/dashboard/widgets/rssfeed.html:17 +msgid "" +"This RSS feed requires an external connection. Check the ISOLATED_DEPLOYMENT" +" setting." +msgstr "" +"Ce flux RSS nécessite une connexion externe. Vérifiez le paramètre " +"ISOLATED_DEPLOYMENT." + +#: netbox/templates/extras/dashboard/widgets/rssfeed.html:22 msgid "There was a problem fetching the RSS feed" msgstr "Un problème s'est produit lors de la récupération du flux RSS" -#: netbox/templates/extras/dashboard/widgets/rssfeed.html:21 +#: netbox/templates/extras/dashboard/widgets/rssfeed.html:25 msgid "HTTP" msgstr "HTTP" @@ -13632,6 +14241,30 @@ msgstr "Contextes sources" msgid "New Journal Entry" msgstr "Nouvelle entrée de journal" +#: netbox/templates/extras/object_render_config.html:6 +msgid "Config" +msgstr "Configuration" + +#: netbox/templates/extras/object_render_config.html:36 +msgid "Context Data" +msgstr "Données de contexte" + +#: netbox/templates/extras/object_render_config.html:56 +msgid "Rendered Config" +msgstr "Configuration rendue" + +#: netbox/templates/extras/object_render_config.html:58 +msgid "Download" +msgstr "Télécharger" + +#: netbox/templates/extras/object_render_config.html:65 +msgid "Error rendering template" +msgstr "Erreur lors du rendu du modèle" + +#: netbox/templates/extras/object_render_config.html:71 +msgid "No configuration template has been assigned." +msgstr "Aucun modèle de configuration n'a été attribué." + #: netbox/templates/extras/report/base.html:30 msgid "Report" msgstr "Rapport" @@ -13719,7 +14352,7 @@ msgstr "N'importe lequel" msgid "Tagged Item Types" msgstr "Types d'articles étiquetés" -#: netbox/templates/extras/tag.html:81 +#: netbox/templates/extras/tag.html:82 msgid "Tagged Objects" msgstr "Objets étiquetés" @@ -14003,6 +14636,21 @@ msgstr "Toutes les notifications" msgid "Select" msgstr "Sélectionner" +#: netbox/templates/htmx/quick_add.html:7 +msgid "Quick Add" +msgstr "Ajout rapide" + +#: netbox/templates/htmx/quick_add_created.html:18 +#, python-format +msgid "" +"\n" +" Created %(object_type)s %(object)s\n" +" " +msgstr "" +"\n" +" Créé %(object_type)s %(object)s\n" +" " + #: netbox/templates/inc/filter_list.html:43 #: netbox/utilities/templates/helpers/table_config_form.html:39 msgid "Reset" @@ -14074,15 +14722,11 @@ msgstr "Commande claire" msgid "Help center" msgstr "Centre d'aide" -#: netbox/templates/inc/user_menu.html:41 -msgid "Django Admin" -msgstr "" - -#: netbox/templates/inc/user_menu.html:61 +#: netbox/templates/inc/user_menu.html:56 msgid "Log Out" msgstr "Déconnexion" -#: netbox/templates/inc/user_menu.html:68 netbox/templates/login.html:38 +#: netbox/templates/inc/user_menu.html:63 netbox/templates/login.html:38 msgid "Log In" msgstr "Connexion" @@ -14179,43 +14823,43 @@ msgstr "Adresse de début" msgid "Ending Address" msgstr "Adresse de fin" -#: netbox/templates/ipam/iprange.html:33 netbox/templates/ipam/prefix.html:110 +#: netbox/templates/ipam/iprange.html:33 netbox/templates/ipam/prefix.html:106 msgid "Marked fully utilized" msgstr "Marqué comme entièrement utilisé" -#: netbox/templates/ipam/prefix.html:99 +#: netbox/templates/ipam/prefix.html:95 msgid "Addressing Details" msgstr "Détails du préfixe" -#: netbox/templates/ipam/prefix.html:118 +#: netbox/templates/ipam/prefix.html:114 msgid "Child IPs" msgstr "IP enfants" -#: netbox/templates/ipam/prefix.html:126 +#: netbox/templates/ipam/prefix.html:122 msgid "Available IPs" msgstr "IP disponibles" -#: netbox/templates/ipam/prefix.html:138 +#: netbox/templates/ipam/prefix.html:134 msgid "First available IP" msgstr "Première adresse IP disponible" -#: netbox/templates/ipam/prefix.html:179 +#: netbox/templates/ipam/prefix.html:175 msgid "Prefix Details" msgstr "Détails du préfixe" -#: netbox/templates/ipam/prefix.html:185 +#: netbox/templates/ipam/prefix.html:181 msgid "Network Address" msgstr "Adresse réseau" -#: netbox/templates/ipam/prefix.html:189 +#: netbox/templates/ipam/prefix.html:185 msgid "Network Mask" msgstr "Masque de sous-réseau" -#: netbox/templates/ipam/prefix.html:193 +#: netbox/templates/ipam/prefix.html:189 msgid "Wildcard Mask" msgstr "Masque Wildcard" -#: netbox/templates/ipam/prefix.html:197 +#: netbox/templates/ipam/prefix.html:193 msgid "Broadcast Address" msgstr "Adresse de diffusion" @@ -14255,14 +14899,30 @@ msgstr "Importer des L2VPN" msgid "Exporting L2VPNs" msgstr "Exporter des L2VPN" -#: netbox/templates/ipam/vlan.html:88 +#: netbox/templates/ipam/vlan.html:66 +msgid "Q-in-Q Role" +msgstr "Rôle Q-in-Q" + +#: netbox/templates/ipam/vlan.html:104 msgid "Add a Prefix" msgstr "Ajouter un préfixe" +#: netbox/templates/ipam/vlan.html:114 +msgid "Customer VLANs" +msgstr "VLAN pour les clients" + +#: netbox/templates/ipam/vlan.html:118 +msgid "Add a VLAN" +msgstr "Ajouter un VLAN" + #: netbox/templates/ipam/vlangroup.html:18 msgid "Add VLAN" msgstr "Ajouter un VLAN" +#: netbox/templates/ipam/vlantranslationpolicy.html:51 +msgid "Add Rule" +msgstr "Ajouter une règle" + #: netbox/templates/ipam/vrf.html:16 msgid "Route Distinguisher" msgstr "Route Distinguisher" @@ -14340,7 +15000,7 @@ msgstr "" #: netbox/templates/tenancy/contact.html:18 netbox/tenancy/filtersets.py:147 #: netbox/tenancy/forms/bulk_edit.py:137 -#: netbox/tenancy/forms/filtersets.py:102 netbox/tenancy/forms/forms.py:56 +#: netbox/tenancy/forms/filtersets.py:102 netbox/tenancy/forms/forms.py:57 #: netbox/tenancy/forms/model_forms.py:106 #: netbox/tenancy/forms/model_forms.py:130 #: netbox/tenancy/tables/contacts.py:98 @@ -14358,7 +15018,7 @@ msgid "Phone" msgstr "Téléphone" #: netbox/templates/tenancy/contactgroup.html:18 -#: netbox/tenancy/forms/forms.py:66 netbox/tenancy/forms/model_forms.py:75 +#: netbox/tenancy/forms/forms.py:67 netbox/tenancy/forms/model_forms.py:75 msgid "Contact Group" msgstr "Groupe de contact" @@ -14367,7 +15027,7 @@ msgid "Add Contact Group" msgstr "Ajouter un groupe de contacts" #: netbox/templates/tenancy/contactrole.html:15 -#: netbox/tenancy/filtersets.py:152 netbox/tenancy/forms/forms.py:61 +#: netbox/tenancy/filtersets.py:152 netbox/tenancy/forms/forms.py:62 #: netbox/tenancy/forms/model_forms.py:87 msgid "Contact Role" msgstr "Rôle du contact" @@ -14381,8 +15041,8 @@ msgid "Add Tenant" msgstr "Ajouter un locataire" #: netbox/templates/tenancy/tenantgroup.html:26 -#: netbox/tenancy/forms/model_forms.py:32 netbox/tenancy/tables/columns.py:51 -#: netbox/tenancy/tables/columns.py:61 +#: netbox/tenancy/forms/model_forms.py:32 netbox/tenancy/tables/columns.py:36 +#: netbox/tenancy/tables/columns.py:46 msgid "Tenant Group" msgstr "Groupe de locataires" @@ -14413,21 +15073,21 @@ msgstr "Contraintes" msgid "Assigned Users" msgstr "Utilisateurs associés" -#: netbox/templates/virtualization/cluster.html:52 +#: netbox/templates/virtualization/cluster.html:56 msgid "Allocated Resources" msgstr "Ressources allouées" -#: netbox/templates/virtualization/cluster.html:55 +#: netbox/templates/virtualization/cluster.html:59 #: netbox/templates/virtualization/virtualmachine.html:125 msgid "Virtual CPUs" msgstr "Processeurs virtuels" -#: netbox/templates/virtualization/cluster.html:59 +#: netbox/templates/virtualization/cluster.html:63 #: netbox/templates/virtualization/virtualmachine.html:129 msgid "Memory" msgstr "Mémoire" -#: netbox/templates/virtualization/cluster.html:69 +#: netbox/templates/virtualization/cluster.html:73 #: netbox/templates/virtualization/virtualmachine.html:140 msgid "Disk Space" msgstr "Espace disque" @@ -14463,13 +15123,13 @@ msgid "Add Cluster" msgstr "Ajouter un cluster" #: netbox/templates/virtualization/clustergroup.html:19 -#: netbox/virtualization/forms/model_forms.py:50 +#: netbox/virtualization/forms/model_forms.py:53 msgid "Cluster Group" msgstr "Groupe Cluster" #: netbox/templates/virtualization/clustertype.html:19 #: netbox/templates/virtualization/virtualmachine.html:110 -#: netbox/virtualization/forms/model_forms.py:36 +#: netbox/virtualization/forms/model_forms.py:39 msgid "Cluster Type" msgstr "Type de cluster" @@ -14478,8 +15138,8 @@ msgid "Virtual Disk" msgstr "Disque virtuel" #: netbox/templates/virtualization/virtualmachine.html:122 -#: netbox/virtualization/forms/bulk_edit.py:190 -#: netbox/virtualization/forms/model_forms.py:224 +#: netbox/virtualization/forms/bulk_edit.py:172 +#: netbox/virtualization/forms/model_forms.py:231 msgid "Resources" msgstr "Ressources" @@ -14487,10 +15147,6 @@ msgstr "Ressources" msgid "Add Virtual Disk" msgstr "Ajouter un disque virtuel" -#: netbox/templates/virtualization/virtualmachine/render_config.html:70 -msgid "No configuration template has been assigned for this virtual machine." -msgstr "" - #: netbox/templates/vpn/ikepolicy.html:10 #: netbox/templates/vpn/ipsecprofile.html:33 netbox/vpn/tables/crypto.py:166 msgid "IKE Policy" @@ -14513,7 +15169,7 @@ msgstr "Afficher le secret" #: netbox/templates/vpn/ipsecpolicy.html:45 #: netbox/templates/vpn/ipsecprofile.html:52 #: netbox/templates/vpn/ipsecprofile.html:77 -#: netbox/vpn/forms/model_forms.py:316 netbox/vpn/forms/model_forms.py:352 +#: netbox/vpn/forms/model_forms.py:317 netbox/vpn/forms/model_forms.py:354 #: netbox/vpn/tables/crypto.py:68 netbox/vpn/tables/crypto.py:134 msgid "Proposals" msgstr "Propositions" @@ -14559,12 +15215,12 @@ msgid "IPSec Policy" msgstr "Politique IPSec" #: netbox/templates/vpn/ipsecpolicy.html:21 netbox/vpn/forms/bulk_edit.py:210 -#: netbox/vpn/models/crypto.py:193 +#: netbox/vpn/models/crypto.py:191 msgid "PFS group" msgstr "groupe PFS" #: netbox/templates/vpn/ipsecprofile.html:10 -#: netbox/vpn/forms/model_forms.py:54 +#: netbox/vpn/forms/model_forms.py:55 msgid "IPSec Profile" msgstr "Profil IPSec" @@ -14590,10 +15246,6 @@ msgstr "Attributs L2VPN" msgid "Add a Termination" msgstr "Ajouter une terminaison" -#: netbox/templates/vpn/tunnel.html:9 -msgid "Add Termination" -msgstr "Ajouter une terminaison" - #: netbox/templates/vpn/tunnel.html:37 netbox/vpn/forms/bulk_edit.py:49 #: netbox/vpn/forms/bulk_import.py:48 netbox/vpn/forms/filtersets.py:57 msgid "Encapsulation" @@ -14601,7 +15253,7 @@ msgstr "Encapsulation" #: netbox/templates/vpn/tunnel.html:41 netbox/vpn/forms/bulk_edit.py:55 #: netbox/vpn/forms/bulk_import.py:53 netbox/vpn/forms/filtersets.py:64 -#: netbox/vpn/models/crypto.py:250 netbox/vpn/tables/tunnels.py:51 +#: netbox/vpn/models/crypto.py:246 netbox/vpn/tables/tunnels.py:51 msgid "IPSec profile" msgstr "profil IPSec" @@ -14624,8 +15276,8 @@ msgid "Tunnel Termination" msgstr "Terminaison du tunnel" #: netbox/templates/vpn/tunneltermination.html:35 -#: netbox/vpn/forms/bulk_import.py:107 netbox/vpn/forms/model_forms.py:102 -#: netbox/vpn/forms/model_forms.py:138 netbox/vpn/forms/model_forms.py:247 +#: netbox/vpn/forms/bulk_import.py:107 netbox/vpn/forms/model_forms.py:103 +#: netbox/vpn/forms/model_forms.py:139 netbox/vpn/forms/model_forms.py:248 #: netbox/vpn/tables/tunnels.py:101 msgid "Outside IP" msgstr "IP externe" @@ -14648,7 +15300,7 @@ msgctxt "Abbreviation for megahertz" msgid "MHz" msgstr "MHz" -#: netbox/templates/wireless/wirelesslan.html:57 +#: netbox/templates/wireless/wirelesslan.html:65 msgid "Attached Interfaces" msgstr "Interfaces attachées" @@ -14657,7 +15309,7 @@ msgid "Add Wireless LAN" msgstr "Ajouter un réseau sans fil" #: netbox/templates/wireless/wirelesslangroup.html:26 -#: netbox/wireless/forms/model_forms.py:28 +#: netbox/wireless/forms/model_forms.py:29 msgid "Wireless LAN Group" msgstr "Groupe LAN sans fil" @@ -14669,13 +15321,6 @@ msgstr "Ajouter un groupe de réseau local sans fil" msgid "Link Properties" msgstr "Propriétés du lien" -#: netbox/templates/wireless/wirelesslink.html:38 -#: netbox/wireless/forms/bulk_edit.py:129 -#: netbox/wireless/forms/filtersets.py:102 -#: netbox/wireless/forms/model_forms.py:165 -msgid "Distance" -msgstr "Distance" - #: netbox/tenancy/filtersets.py:28 msgid "Parent contact group (ID)" msgstr "Groupe de contact pour les parents (ID)" @@ -14746,47 +15391,47 @@ msgstr "groupe de contacts" msgid "contact groups" msgstr "groupes de contacts" -#: netbox/tenancy/models/contacts.py:48 +#: netbox/tenancy/models/contacts.py:42 msgid "contact role" msgstr "rôle du contact" -#: netbox/tenancy/models/contacts.py:49 +#: netbox/tenancy/models/contacts.py:43 msgid "contact roles" msgstr "rôles du contact" -#: netbox/tenancy/models/contacts.py:68 +#: netbox/tenancy/models/contacts.py:63 msgid "title" msgstr "titre" -#: netbox/tenancy/models/contacts.py:73 +#: netbox/tenancy/models/contacts.py:68 msgid "phone" msgstr "téléphone" -#: netbox/tenancy/models/contacts.py:78 +#: netbox/tenancy/models/contacts.py:73 msgid "email" msgstr "courriel" -#: netbox/tenancy/models/contacts.py:87 +#: netbox/tenancy/models/contacts.py:82 msgid "link" msgstr "lien" -#: netbox/tenancy/models/contacts.py:103 +#: netbox/tenancy/models/contacts.py:98 msgid "contact" msgstr "contacter" -#: netbox/tenancy/models/contacts.py:104 +#: netbox/tenancy/models/contacts.py:99 msgid "contacts" msgstr "contacts" -#: netbox/tenancy/models/contacts.py:153 +#: netbox/tenancy/models/contacts.py:146 msgid "contact assignment" msgstr "Associer un contact" -#: netbox/tenancy/models/contacts.py:154 +#: netbox/tenancy/models/contacts.py:147 msgid "contact assignments" msgstr "Contacts associés" -#: netbox/tenancy/models/contacts.py:170 +#: netbox/tenancy/models/contacts.py:163 #, python-brace-format msgid "Contacts cannot be assigned to this object type ({type})." msgstr "Les contacts ne peuvent pas être affectés à ce type d'objet ({type})." @@ -14799,19 +15444,19 @@ msgstr "groupe de locataires" msgid "tenant groups" msgstr "groupes de locataires" -#: netbox/tenancy/models/tenants.py:70 +#: netbox/tenancy/models/tenants.py:68 msgid "Tenant name must be unique per group." msgstr "Le nom du locataire doit être unique par groupe." -#: netbox/tenancy/models/tenants.py:80 +#: netbox/tenancy/models/tenants.py:78 msgid "Tenant slug must be unique per group." msgstr "Le slug tenant doit être unique par groupe." -#: netbox/tenancy/models/tenants.py:88 +#: netbox/tenancy/models/tenants.py:86 msgid "tenant" msgstr "locataire" -#: netbox/tenancy/models/tenants.py:89 +#: netbox/tenancy/models/tenants.py:87 msgid "tenants" msgstr "locataires" @@ -15043,7 +15688,7 @@ msgstr "jeton" msgid "tokens" msgstr "jetons" -#: netbox/users/models/users.py:57 netbox/vpn/models/crypto.py:42 +#: netbox/users/models/users.py:57 netbox/vpn/models/crypto.py:43 msgid "group" msgstr "groupe" @@ -15089,25 +15734,25 @@ msgstr "" msgid "{name} has a key defined but CHOICES is not a list" msgstr "{name} a une clé définie mais CHOICES n'est pas une liste" -#: netbox/utilities/conversion.py:19 +#: netbox/utilities/conversion.py:20 msgid "Weight must be a positive number" msgstr "Le poids doit être un nombre positif" -#: netbox/utilities/conversion.py:21 +#: netbox/utilities/conversion.py:22 #, python-brace-format msgid "Invalid value '{weight}' for weight (must be a number)" msgstr "Valeur non valide '{weight}'pour le poids (doit être un chiffre)" -#: netbox/utilities/conversion.py:32 netbox/utilities/conversion.py:62 +#: netbox/utilities/conversion.py:33 netbox/utilities/conversion.py:63 #, python-brace-format msgid "Unknown unit {unit}. Must be one of the following: {valid_units}" msgstr "Unité inconnue {unit}. Doit être l'un des suivants : {valid_units}" -#: netbox/utilities/conversion.py:45 +#: netbox/utilities/conversion.py:46 msgid "Length must be a positive number" msgstr "La longueur doit être un nombre positif" -#: netbox/utilities/conversion.py:47 +#: netbox/utilities/conversion.py:48 #, python-brace-format msgid "Invalid value '{length}' for length (must be a number)" msgstr "Valeur non valide '{length}'pour la longueur (doit être un chiffre)" @@ -15125,11 +15770,11 @@ msgstr "" msgid "More than 50" msgstr "Plus de 50" -#: netbox/utilities/fields.py:30 +#: netbox/utilities/fields.py:29 msgid "RGB color in hexadecimal. Example: " msgstr "Couleur RVB en hexadécimal. Exemple :" -#: netbox/utilities/fields.py:159 +#: netbox/utilities/fields.py:158 #, python-format msgid "" "%s(%r) is invalid. to_model parameter to CounterCacheField must be a string " @@ -15138,7 +15783,7 @@ msgstr "" "%s(%r) n'est pas valide. Le paramètre to_model de CounterCacheField doit " "être une chaîne au format « app.model »" -#: netbox/utilities/fields.py:169 +#: netbox/utilities/fields.py:168 #, python-format msgid "" "%s(%r) is invalid. to_field parameter to CounterCacheField must be a string " @@ -15374,14 +16019,14 @@ msgstr "" msgid "Required column header \"{header}\" not found." msgstr "En-tête de colonne obligatoire «{header}» introuvable." -#: netbox/utilities/forms/widgets/apiselect.py:124 +#: netbox/utilities/forms/widgets/apiselect.py:133 #, python-brace-format msgid "Missing required value for dynamic query param: '{dynamic_params}'" msgstr "" "Valeur requise manquante pour le paramètre de requête dynamique : " "'{dynamic_params}'" -#: netbox/utilities/forms/widgets/apiselect.py:141 +#: netbox/utilities/forms/widgets/apiselect.py:150 #, python-brace-format msgid "Missing required value for static query param: '{static_params}'" msgstr "" @@ -15508,10 +16153,14 @@ msgstr "Rechercher..." msgid "Search NetBox" msgstr "Rechercher dans NetBox" -#: netbox/utilities/templates/widgets/apiselect.html:7 +#: netbox/utilities/templates/widgets/apiselect.html:8 msgid "Open selector" msgstr "Ouvrir le sélecteur" +#: netbox/utilities/templates/widgets/apiselect.html:22 +msgid "Quick add" +msgstr "Ajout rapide" + #: netbox/utilities/templates/widgets/markdown_input.html:6 msgid "Write" msgstr "Écrire" @@ -15545,113 +16194,119 @@ msgstr "" "ne peut être utilisé que sur les vues qui définissent un objet QuerySet de " "base" -#: netbox/virtualization/filtersets.py:79 +#: netbox/virtualization/choices.py:50 +msgid "Paused" +msgstr "En pause" + +#: netbox/virtualization/filtersets.py:45 msgid "Parent group (ID)" msgstr "Groupe de parents (ID)" -#: netbox/virtualization/filtersets.py:85 +#: netbox/virtualization/filtersets.py:51 msgid "Parent group (slug)" msgstr "Groupe de parents (slug)" -#: netbox/virtualization/filtersets.py:89 -#: netbox/virtualization/filtersets.py:141 +#: netbox/virtualization/filtersets.py:55 +#: netbox/virtualization/filtersets.py:107 msgid "Cluster type (ID)" msgstr "Type de cluster (ID)" -#: netbox/virtualization/filtersets.py:151 -#: netbox/virtualization/filtersets.py:271 +#: netbox/virtualization/filtersets.py:117 +#: netbox/virtualization/filtersets.py:237 msgid "Cluster (ID)" msgstr "Cluster (ID)" -#: netbox/virtualization/forms/bulk_edit.py:166 -#: netbox/virtualization/models/virtualmachines.py:115 +#: netbox/virtualization/forms/bulk_edit.py:148 +#: netbox/virtualization/models/virtualmachines.py:110 msgid "vCPUs" msgstr "processeurs virtuels" -#: netbox/virtualization/forms/bulk_edit.py:170 +#: netbox/virtualization/forms/bulk_edit.py:152 msgid "Memory (MB)" msgstr "Mémoire (Mo)" -#: netbox/virtualization/forms/bulk_edit.py:174 +#: netbox/virtualization/forms/bulk_edit.py:156 msgid "Disk (MB)" msgstr "Disque (Mo)" -#: netbox/virtualization/forms/bulk_edit.py:334 -#: netbox/virtualization/forms/filtersets.py:251 +#: netbox/virtualization/forms/bulk_edit.py:324 +#: netbox/virtualization/forms/filtersets.py:256 msgid "Size (MB)" msgstr "Taille (Mo)" -#: netbox/virtualization/forms/bulk_import.py:44 +#: netbox/virtualization/forms/bulk_import.py:45 msgid "Type of cluster" msgstr "Type de cluster" -#: netbox/virtualization/forms/bulk_import.py:51 +#: netbox/virtualization/forms/bulk_import.py:52 msgid "Assigned cluster group" msgstr "Groupe de clusters attribué" -#: netbox/virtualization/forms/bulk_import.py:96 +#: netbox/virtualization/forms/bulk_import.py:102 msgid "Assigned cluster" msgstr "Cluster attribué" -#: netbox/virtualization/forms/bulk_import.py:103 +#: netbox/virtualization/forms/bulk_import.py:109 msgid "Assigned device within cluster" msgstr "Appareil attribué au sein du cluster" -#: netbox/virtualization/forms/filtersets.py:183 +#: netbox/virtualization/forms/filtersets.py:188 msgid "Serial number" msgstr "Numéro de série" -#: netbox/virtualization/forms/model_forms.py:153 +#: netbox/virtualization/forms/model_forms.py:158 #, python-brace-format msgid "" -"{device} belongs to a different site ({device_site}) than the cluster " -"({cluster_site})" +"{device} belongs to a different {scope_field} ({device_scope}) than the " +"cluster ({cluster_scope})" msgstr "" +"{device} appartient à un autre {scope_field} ({device_scope}) plutôt que le " +"cluster ({cluster_scope})" -#: netbox/virtualization/forms/model_forms.py:192 +#: netbox/virtualization/forms/model_forms.py:199 msgid "Optionally pin this VM to a specific host device within the cluster" msgstr "" "Épinglez éventuellement cette machine virtuelle à un périphérique hôte " "spécifique au sein du cluster" -#: netbox/virtualization/forms/model_forms.py:221 +#: netbox/virtualization/forms/model_forms.py:228 msgid "Site/Cluster" msgstr "Site/Cluster" -#: netbox/virtualization/forms/model_forms.py:244 +#: netbox/virtualization/forms/model_forms.py:251 msgid "Disk size is managed via the attachment of virtual disks." msgstr "La taille du disque est gérée via la connexion de disques virtuels." -#: netbox/virtualization/forms/model_forms.py:372 -#: netbox/virtualization/tables/virtualmachines.py:111 +#: netbox/virtualization/forms/model_forms.py:405 +#: netbox/virtualization/tables/virtualmachines.py:81 msgid "Disk" msgstr "Disque" -#: netbox/virtualization/models/clusters.py:25 +#: netbox/virtualization/models/clusters.py:26 msgid "cluster type" msgstr "type de cluster" -#: netbox/virtualization/models/clusters.py:26 +#: netbox/virtualization/models/clusters.py:27 msgid "cluster types" msgstr "types de clusters" -#: netbox/virtualization/models/clusters.py:45 +#: netbox/virtualization/models/clusters.py:43 msgid "cluster group" msgstr "groupe de clusters" -#: netbox/virtualization/models/clusters.py:46 +#: netbox/virtualization/models/clusters.py:44 msgid "cluster groups" msgstr "groupes de clusters" -#: netbox/virtualization/models/clusters.py:121 +#: netbox/virtualization/models/clusters.py:110 msgid "cluster" msgstr "cluster" -#: netbox/virtualization/models/clusters.py:122 +#: netbox/virtualization/models/clusters.py:111 msgid "clusters" msgstr "clusters" -#: netbox/virtualization/models/clusters.py:141 +#: netbox/virtualization/models/clusters.py:137 #, python-brace-format msgid "" "{count} devices are assigned as hosts for this cluster but are not in site " @@ -15660,44 +16315,53 @@ msgstr "" "{count} les appareils sont affectés en tant qu'hôtes à ce cluster mais ne " "sont pas sur le site {site}" -#: netbox/virtualization/models/virtualmachines.py:123 +#: netbox/virtualization/models/clusters.py:144 +#, python-brace-format +msgid "" +"{count} devices are assigned as hosts for this cluster but are not in " +"location {location}" +msgstr "" +"{count} les périphériques sont affectés en tant qu'hôtes pour ce cluster " +"mais ne sont pas localisés {location}" + +#: netbox/virtualization/models/virtualmachines.py:118 msgid "memory (MB)" msgstr "mémoire (Mo)" -#: netbox/virtualization/models/virtualmachines.py:128 +#: netbox/virtualization/models/virtualmachines.py:123 msgid "disk (MB)" msgstr "disque (Mo)" -#: netbox/virtualization/models/virtualmachines.py:166 +#: netbox/virtualization/models/virtualmachines.py:161 msgid "Virtual machine name must be unique per cluster." msgstr "Le nom de la machine virtuelle doit être unique par cluster." -#: netbox/virtualization/models/virtualmachines.py:169 +#: netbox/virtualization/models/virtualmachines.py:164 msgid "virtual machine" msgstr "machine virtuelle" -#: netbox/virtualization/models/virtualmachines.py:170 +#: netbox/virtualization/models/virtualmachines.py:165 msgid "virtual machines" msgstr "machines virtuelles" -#: netbox/virtualization/models/virtualmachines.py:184 +#: netbox/virtualization/models/virtualmachines.py:176 msgid "A virtual machine must be assigned to a site and/or cluster." msgstr "" "Une machine virtuelle doit être attribuée à un site et/ou à un cluster." -#: netbox/virtualization/models/virtualmachines.py:191 +#: netbox/virtualization/models/virtualmachines.py:183 #, python-brace-format msgid "" "The selected cluster ({cluster}) is not assigned to this site ({site})." msgstr "" "Le cluster sélectionné ({cluster}) n'est pas attribué à ce site ({site})." -#: netbox/virtualization/models/virtualmachines.py:198 +#: netbox/virtualization/models/virtualmachines.py:190 msgid "Must specify a cluster when assigning a host device." msgstr "" "Il faut indiquer un cluster lors de l'attribution d'un périphérique hôte." -#: netbox/virtualization/models/virtualmachines.py:203 +#: netbox/virtualization/models/virtualmachines.py:195 #, python-brace-format msgid "" "The selected device ({device}) is not assigned to this cluster ({cluster})." @@ -15705,7 +16369,7 @@ msgstr "" "L'appareil sélectionné ({device}) n'est pas affecté à ce cluster " "({cluster})." -#: netbox/virtualization/models/virtualmachines.py:215 +#: netbox/virtualization/models/virtualmachines.py:207 #, python-brace-format msgid "" "The specified disk size ({size}) must match the aggregate size of assigned " @@ -15714,19 +16378,19 @@ msgstr "" "La taille de disque indiquée ({size}) doit correspondre à la taille agrégée " "des disques virtuels assignés ({total_size})." -#: netbox/virtualization/models/virtualmachines.py:229 +#: netbox/virtualization/models/virtualmachines.py:221 #, python-brace-format msgid "Must be an IPv{family} address. ({ip} is an IPv{version} address.)" msgstr "" "Doit être une address IPv{family}. ({ip} est une addresse IPv{version}.)" -#: netbox/virtualization/models/virtualmachines.py:238 +#: netbox/virtualization/models/virtualmachines.py:230 #, python-brace-format msgid "The specified IP address ({ip}) is not assigned to this VM." msgstr "" "L'adresse IP indiquée ({ip}) n'est pas attribué à cette machine virtuelle." -#: netbox/virtualization/models/virtualmachines.py:396 +#: netbox/virtualization/models/virtualmachines.py:376 #, python-brace-format msgid "" "The selected parent interface ({parent}) belongs to a different virtual " @@ -15735,7 +16399,7 @@ msgstr "" "L'interface parent sélectionnée ({parent}) appartient à une autre machine " "virtuelle ({virtual_machine})." -#: netbox/virtualization/models/virtualmachines.py:411 +#: netbox/virtualization/models/virtualmachines.py:391 #, python-brace-format msgid "" "The selected bridge interface ({bridge}) belongs to a different virtual " @@ -15744,7 +16408,7 @@ msgstr "" "L'interface de pont sélectionnée ({bridge}) appartient à une autre machine " "virtuelle ({virtual_machine})." -#: netbox/virtualization/models/virtualmachines.py:422 +#: netbox/virtualization/models/virtualmachines.py:402 #, python-brace-format msgid "" "The untagged VLAN ({untagged_vlan}) must belong to the same site as the " @@ -15753,24 +16417,24 @@ msgstr "" "Le VLAN non étiqueté ({untagged_vlan}) doit appartenir au même site que la " "machine virtuelle parente de l'interface, ou il doit être global." -#: netbox/virtualization/models/virtualmachines.py:434 +#: netbox/virtualization/models/virtualmachines.py:414 msgid "size (MB)" msgstr "taille (Mo)" -#: netbox/virtualization/models/virtualmachines.py:438 +#: netbox/virtualization/models/virtualmachines.py:418 msgid "virtual disk" msgstr "disque virtuel" -#: netbox/virtualization/models/virtualmachines.py:439 +#: netbox/virtualization/models/virtualmachines.py:419 msgid "virtual disks" msgstr "disques virtuels" -#: netbox/virtualization/views.py:273 +#: netbox/virtualization/views.py:289 #, python-brace-format msgid "Added {count} devices to cluster {cluster}" msgstr "Ajouté {count} appareils à mettre en cluster {cluster}" -#: netbox/virtualization/views.py:308 +#: netbox/virtualization/views.py:324 #, python-brace-format msgid "Removed {count} devices from cluster {cluster}" msgstr "Supprimé {count} appareils du cluster {cluster}" @@ -15807,14 +16471,6 @@ msgstr "L2TP" msgid "PPTP" msgstr "PPTP" -#: netbox/vpn/choices.py:64 -msgid "Hub" -msgstr "Hub" - -#: netbox/vpn/choices.py:65 -msgid "Spoke" -msgstr "Spoke" - #: netbox/vpn/choices.py:88 msgid "Aggressive" msgstr "Agressif" @@ -15932,26 +16588,26 @@ msgstr "VLAN (nom)" msgid "Tunnel group" msgstr "Groupe de tunnels" -#: netbox/vpn/forms/bulk_edit.py:117 netbox/vpn/models/crypto.py:47 +#: netbox/vpn/forms/bulk_edit.py:117 netbox/vpn/models/crypto.py:48 msgid "SA lifetime" msgstr "Durée de vie de l'association de sécurité (SA)" -#: netbox/vpn/forms/bulk_edit.py:151 netbox/wireless/forms/bulk_edit.py:79 -#: netbox/wireless/forms/bulk_edit.py:126 -#: netbox/wireless/forms/filtersets.py:64 -#: netbox/wireless/forms/filtersets.py:98 +#: netbox/vpn/forms/bulk_edit.py:151 netbox/wireless/forms/bulk_edit.py:81 +#: netbox/wireless/forms/bulk_edit.py:129 +#: netbox/wireless/forms/filtersets.py:67 +#: netbox/wireless/forms/filtersets.py:126 msgid "Pre-shared key" msgstr "Clé pré-partagée" #: netbox/vpn/forms/bulk_edit.py:237 netbox/vpn/forms/bulk_import.py:239 -#: netbox/vpn/forms/filtersets.py:199 netbox/vpn/forms/model_forms.py:370 +#: netbox/vpn/forms/filtersets.py:199 netbox/vpn/forms/model_forms.py:373 #: netbox/vpn/models/crypto.py:104 msgid "IKE policy" msgstr "Politique IKE" #: netbox/vpn/forms/bulk_edit.py:242 netbox/vpn/forms/bulk_import.py:244 -#: netbox/vpn/forms/filtersets.py:204 netbox/vpn/forms/model_forms.py:374 -#: netbox/vpn/models/crypto.py:209 +#: netbox/vpn/forms/filtersets.py:204 netbox/vpn/forms/model_forms.py:377 +#: netbox/vpn/models/crypto.py:207 msgid "IPSec policy" msgstr "Politique IPSec" @@ -15959,10 +16615,6 @@ msgstr "Politique IPSec" msgid "Tunnel encapsulation" msgstr "Encapsulation du tunnel" -#: netbox/vpn/forms/bulk_import.py:83 -msgid "Operational role" -msgstr "Rôle opérationnel" - #: netbox/vpn/forms/bulk_import.py:90 msgid "Parent device of assigned interface" msgstr "Appareil parent à l'interface attribuée" @@ -15979,7 +16631,7 @@ msgstr "Interface de périphérique ou de machine virtuelle" msgid "IKE proposal(s)" msgstr "Proposition(s) de l'IKE" -#: netbox/vpn/forms/bulk_import.py:215 netbox/vpn/models/crypto.py:197 +#: netbox/vpn/forms/bulk_import.py:215 netbox/vpn/models/crypto.py:195 msgid "Diffie-Hellman group for Perfect Forward Secrecy" msgstr "Groupe Diffie-Hellman PFS (Perfect Forward Secrecy)" @@ -16026,7 +16678,7 @@ msgid "IKE version" msgstr "Version IKE" #: netbox/vpn/forms/filtersets.py:142 netbox/vpn/forms/filtersets.py:175 -#: netbox/vpn/forms/model_forms.py:298 netbox/vpn/forms/model_forms.py:334 +#: netbox/vpn/forms/model_forms.py:299 netbox/vpn/forms/model_forms.py:336 msgid "Proposal" msgstr "Proposition" @@ -16034,32 +16686,28 @@ msgstr "Proposition" msgid "Assigned Object Type" msgstr "Type d'objet attribué" -#: netbox/vpn/forms/model_forms.py:95 netbox/vpn/forms/model_forms.py:130 -#: netbox/vpn/forms/model_forms.py:240 netbox/vpn/tables/tunnels.py:91 +#: netbox/vpn/forms/model_forms.py:96 netbox/vpn/forms/model_forms.py:131 +#: netbox/vpn/forms/model_forms.py:241 netbox/vpn/tables/tunnels.py:91 msgid "Tunnel interface" msgstr "Interface de tunnel" -#: netbox/vpn/forms/model_forms.py:150 +#: netbox/vpn/forms/model_forms.py:151 msgid "First Termination" msgstr "Première extrémité" -#: netbox/vpn/forms/model_forms.py:153 +#: netbox/vpn/forms/model_forms.py:154 msgid "Second Termination" msgstr "Deuxième extrémité" -#: netbox/vpn/forms/model_forms.py:197 +#: netbox/vpn/forms/model_forms.py:198 msgid "This parameter is required when defining a termination." msgstr "Ce paramètre est obligatoire lors de la définition d'une terminaison." -#: netbox/vpn/forms/model_forms.py:320 netbox/vpn/forms/model_forms.py:356 -msgid "Policy" -msgstr "Politique" - -#: netbox/vpn/forms/model_forms.py:487 +#: netbox/vpn/forms/model_forms.py:490 msgid "A termination must specify an interface or VLAN." msgstr "Une terminaison doit spécifier une interface ou un VLAN." -#: netbox/vpn/forms/model_forms.py:489 +#: netbox/vpn/forms/model_forms.py:492 msgid "" "A termination can only have one terminating object (an interface or VLAN)." msgstr "" @@ -16074,31 +16722,31 @@ msgstr "algorithme de chiffrement" msgid "authentication algorithm" msgstr "algorithme d'authentification" -#: netbox/vpn/models/crypto.py:44 +#: netbox/vpn/models/crypto.py:45 msgid "Diffie-Hellman group ID" msgstr "ID de groupe Diffie-Hellman" -#: netbox/vpn/models/crypto.py:50 +#: netbox/vpn/models/crypto.py:51 msgid "Security association lifetime (in seconds)" msgstr "Durée de vie de l'association de sécurité (en secondes)" -#: netbox/vpn/models/crypto.py:59 +#: netbox/vpn/models/crypto.py:60 msgid "IKE proposal" msgstr "Proposal IKE" -#: netbox/vpn/models/crypto.py:60 +#: netbox/vpn/models/crypto.py:61 msgid "IKE proposals" msgstr "Proposals IKE" -#: netbox/vpn/models/crypto.py:76 +#: netbox/vpn/models/crypto.py:75 msgid "version" msgstr "version" -#: netbox/vpn/models/crypto.py:88 netbox/vpn/models/crypto.py:190 +#: netbox/vpn/models/crypto.py:88 netbox/vpn/models/crypto.py:188 msgid "proposals" msgstr "propositions" -#: netbox/vpn/models/crypto.py:91 netbox/wireless/models.py:39 +#: netbox/vpn/models/crypto.py:91 netbox/wireless/models.py:41 msgid "pre-shared key" msgstr "clé pré-partagée" @@ -16106,19 +16754,19 @@ msgstr "clé pré-partagée" msgid "IKE policies" msgstr "Politiques IKE" -#: netbox/vpn/models/crypto.py:118 +#: netbox/vpn/models/crypto.py:115 msgid "Mode is required for selected IKE version" msgstr "Le mode est requis pour la version IKE sélectionnée" -#: netbox/vpn/models/crypto.py:122 +#: netbox/vpn/models/crypto.py:119 msgid "Mode cannot be used for selected IKE version" msgstr "Le mode ne peut pas être utilisé pour la version IKE sélectionnée" -#: netbox/vpn/models/crypto.py:136 +#: netbox/vpn/models/crypto.py:134 msgid "encryption" msgstr "chiffrement" -#: netbox/vpn/models/crypto.py:141 +#: netbox/vpn/models/crypto.py:140 msgid "authentication" msgstr "authentification" @@ -16138,33 +16786,33 @@ msgstr "Proposal IPSec" msgid "IPSec proposals" msgstr "Proposals IPSec" -#: netbox/vpn/models/crypto.py:178 +#: netbox/vpn/models/crypto.py:175 msgid "Encryption and/or authentication algorithm must be defined" msgstr "" "Un algorithme de chiffrement et/ou d'authentification doit être défini" -#: netbox/vpn/models/crypto.py:210 +#: netbox/vpn/models/crypto.py:208 msgid "IPSec policies" msgstr "Politiques IPSec" -#: netbox/vpn/models/crypto.py:251 +#: netbox/vpn/models/crypto.py:247 msgid "IPSec profiles" msgstr "Profils IPSec" -#: netbox/vpn/models/l2vpn.py:116 +#: netbox/vpn/models/l2vpn.py:113 msgid "L2VPN termination" msgstr "Terminaison L2VPN" -#: netbox/vpn/models/l2vpn.py:117 +#: netbox/vpn/models/l2vpn.py:114 msgid "L2VPN terminations" msgstr "Terminaisons L2VPN" -#: netbox/vpn/models/l2vpn.py:135 +#: netbox/vpn/models/l2vpn.py:129 #, python-brace-format msgid "L2VPN Termination already assigned ({assigned_object})" msgstr "Terminaison L2VPN déjà attribuée ({assigned_object})" -#: netbox/vpn/models/l2vpn.py:147 +#: netbox/vpn/models/l2vpn.py:141 #, python-brace-format msgid "" "{l2vpn_type} L2VPNs cannot have more than two terminations; found " @@ -16181,35 +16829,35 @@ msgstr "groupe de tunnels" msgid "tunnel groups" msgstr "groupes de tunnels" -#: netbox/vpn/models/tunnels.py:53 +#: netbox/vpn/models/tunnels.py:51 msgid "encapsulation" msgstr "encapsulation" -#: netbox/vpn/models/tunnels.py:72 +#: netbox/vpn/models/tunnels.py:70 msgid "tunnel ID" msgstr "ID du tunnel" -#: netbox/vpn/models/tunnels.py:94 +#: netbox/vpn/models/tunnels.py:92 msgid "tunnel" msgstr "tunnel" -#: netbox/vpn/models/tunnels.py:95 +#: netbox/vpn/models/tunnels.py:93 msgid "tunnels" msgstr "tunnels" -#: netbox/vpn/models/tunnels.py:153 +#: netbox/vpn/models/tunnels.py:148 msgid "An object may be terminated to only one tunnel at a time." msgstr "Un objet ne peut être l'extrémité que d'un seul tunnel." -#: netbox/vpn/models/tunnels.py:156 +#: netbox/vpn/models/tunnels.py:151 msgid "tunnel termination" msgstr "terminaison du tunnel" -#: netbox/vpn/models/tunnels.py:157 +#: netbox/vpn/models/tunnels.py:152 msgid "tunnel terminations" msgstr "terminaisons de tunnels" -#: netbox/vpn/models/tunnels.py:174 +#: netbox/vpn/models/tunnels.py:169 #, python-brace-format msgid "{name} is already attached to a tunnel ({tunnel})." msgstr "{name} est déjà rattaché à un tunnel ({tunnel})." @@ -16270,51 +16918,44 @@ msgstr "WPA Personnel (PSK)" msgid "WPA Enterprise" msgstr "WPA Entreprise" -#: netbox/wireless/forms/bulk_edit.py:73 -#: netbox/wireless/forms/bulk_edit.py:120 -#: netbox/wireless/forms/bulk_import.py:68 -#: netbox/wireless/forms/bulk_import.py:71 -#: netbox/wireless/forms/bulk_import.py:110 -#: netbox/wireless/forms/bulk_import.py:113 -#: netbox/wireless/forms/filtersets.py:59 -#: netbox/wireless/forms/filtersets.py:93 +#: netbox/wireless/forms/bulk_edit.py:75 +#: netbox/wireless/forms/bulk_edit.py:123 +#: netbox/wireless/forms/bulk_import.py:70 +#: netbox/wireless/forms/bulk_import.py:73 +#: netbox/wireless/forms/bulk_import.py:115 +#: netbox/wireless/forms/bulk_import.py:118 +#: netbox/wireless/forms/filtersets.py:62 +#: netbox/wireless/forms/filtersets.py:121 msgid "Authentication cipher" msgstr "Algorithme de chiffrement pour l'authentification" -#: netbox/wireless/forms/bulk_edit.py:134 -#: netbox/wireless/forms/bulk_import.py:116 -#: netbox/wireless/forms/bulk_import.py:119 -#: netbox/wireless/forms/filtersets.py:106 -msgid "Distance unit" -msgstr "Unité de distance" - -#: netbox/wireless/forms/bulk_import.py:52 +#: netbox/wireless/forms/bulk_import.py:54 msgid "Bridged VLAN" msgstr "VLAN bridgé" -#: netbox/wireless/forms/bulk_import.py:89 -#: netbox/wireless/tables/wirelesslink.py:28 +#: netbox/wireless/forms/bulk_import.py:94 +#: netbox/wireless/tables/wirelesslink.py:27 msgid "Interface A" msgstr "Interface A" -#: netbox/wireless/forms/bulk_import.py:93 -#: netbox/wireless/tables/wirelesslink.py:37 +#: netbox/wireless/forms/bulk_import.py:98 +#: netbox/wireless/tables/wirelesslink.py:36 msgid "Interface B" msgstr "Interface B" -#: netbox/wireless/forms/model_forms.py:161 +#: netbox/wireless/forms/model_forms.py:164 msgid "Side B" msgstr "Côté B" -#: netbox/wireless/models.py:31 +#: netbox/wireless/models.py:32 msgid "authentication cipher" msgstr "algorithme de chiffrement pour l'authentification" -#: netbox/wireless/models.py:69 +#: netbox/wireless/models.py:72 msgid "wireless LAN group" msgstr "groupe réseaux sans fil" -#: netbox/wireless/models.py:70 +#: netbox/wireless/models.py:73 msgid "wireless LAN groups" msgstr "groupes réseaux sans fil" @@ -16322,35 +16963,23 @@ msgstr "groupes réseaux sans fil" msgid "wireless LAN" msgstr "Réseau sans fil" -#: netbox/wireless/models.py:144 +#: netbox/wireless/models.py:141 msgid "interface A" msgstr "interface A" -#: netbox/wireless/models.py:151 +#: netbox/wireless/models.py:148 msgid "interface B" msgstr "interface B" -#: netbox/wireless/models.py:165 -msgid "distance" -msgstr "distance" - -#: netbox/wireless/models.py:172 -msgid "distance unit" -msgstr "unité de distance" - -#: netbox/wireless/models.py:219 +#: netbox/wireless/models.py:196 msgid "wireless link" msgstr "liaison sans fil" -#: netbox/wireless/models.py:220 +#: netbox/wireless/models.py:197 msgid "wireless links" msgstr "liaisons sans fil" -#: netbox/wireless/models.py:236 -msgid "Must specify a unit when setting a wireless distance" -msgstr "" - -#: netbox/wireless/models.py:242 netbox/wireless/models.py:248 +#: netbox/wireless/models.py:212 netbox/wireless/models.py:218 #, python-brace-format msgid "{type} is not a wireless interface." msgstr "{type} n'est pas une interface sans fil." diff --git a/netbox/translations/it/LC_MESSAGES/django.mo b/netbox/translations/it/LC_MESSAGES/django.mo index 70dc73ff31c4aa6e97945b525dba2b6a47d8f37c..c1f137b424642915407af8a44585b260efc3dfc5 100644 GIT binary patch delta 75579 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

    trA-c|xUf$TW^WmctJj3;4pk|x@W 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 delta 67130 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 diff --git a/netbox/translations/it/LC_MESSAGES/django.po b/netbox/translations/it/LC_MESSAGES/django.po index 5ca09b38e..ccf91c3bc 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: 2025-01-04 05:02+0000\n" +"POT-Creation-Date: 2025-03-06 05:01+0000\n" "PO-Revision-Date: 2023-10-30 17:48+0000\n" "Last-Translator: Jeremy Stretch, 2025\n" "Language-Team: Italian (https://app.transifex.com/netbox-community/teams/178115/it/)\n" @@ -34,7 +34,7 @@ msgstr "Chiave" msgid "Write Enabled" msgstr "Scrittura abilitata" -#: netbox/account/tables.py:35 netbox/core/choices.py:86 +#: netbox/account/tables.py:35 netbox/core/choices.py:102 #: netbox/core/tables/jobs.py:29 netbox/core/tables/tasks.py:79 #: netbox/extras/tables/tables.py:335 netbox/extras/tables/tables.py:566 #: netbox/templates/account/token.html:43 @@ -46,6 +46,7 @@ msgstr "Scrittura abilitata" #: netbox/templates/extras/htmx/script_result.html:12 #: netbox/templates/extras/journalentry.html:22 #: netbox/templates/generic/object.html:58 +#: netbox/templates/htmx/quick_add_created.html:7 #: netbox/templates/users/token.html:35 msgid "Created" msgstr "Creato" @@ -91,34 +92,35 @@ msgstr "La tua password è stata cambiata con successo." #: netbox/circuits/choices.py:21 netbox/dcim/choices.py:20 #: netbox/dcim/choices.py:102 netbox/dcim/choices.py:185 -#: netbox/dcim/choices.py:237 netbox/dcim/choices.py:1532 -#: netbox/dcim/choices.py:1608 netbox/dcim/choices.py:1658 -#: netbox/virtualization/choices.py:20 netbox/virtualization/choices.py:45 -#: netbox/vpn/choices.py:18 +#: netbox/dcim/choices.py:237 netbox/dcim/choices.py:1534 +#: netbox/dcim/choices.py:1592 netbox/dcim/choices.py:1642 +#: netbox/dcim/choices.py:1664 netbox/virtualization/choices.py:20 +#: netbox/virtualization/choices.py:46 netbox/vpn/choices.py:18 msgid "Planned" msgstr "Pianificato" -#: netbox/circuits/choices.py:22 netbox/netbox/navigation/menu.py:305 +#: netbox/circuits/choices.py:22 netbox/netbox/navigation/menu.py:326 msgid "Provisioning" msgstr "Approvvigionamento" #: netbox/circuits/choices.py:23 netbox/core/tables/tasks.py:22 #: netbox/dcim/choices.py:22 netbox/dcim/choices.py:103 #: netbox/dcim/choices.py:184 netbox/dcim/choices.py:236 -#: netbox/dcim/choices.py:1607 netbox/dcim/choices.py:1657 -#: netbox/extras/tables/tables.py:495 netbox/ipam/choices.py:31 -#: netbox/ipam/choices.py:49 netbox/ipam/choices.py:69 -#: netbox/ipam/choices.py:154 netbox/templates/extras/configcontext.html:25 +#: netbox/dcim/choices.py:1591 netbox/dcim/choices.py:1641 +#: netbox/dcim/choices.py:1663 netbox/extras/tables/tables.py:495 +#: netbox/ipam/choices.py:31 netbox/ipam/choices.py:49 +#: netbox/ipam/choices.py:69 netbox/ipam/choices.py:154 +#: netbox/templates/extras/configcontext.html:25 #: netbox/templates/users/user.html:37 netbox/users/forms/bulk_edit.py:38 -#: netbox/virtualization/choices.py:22 netbox/virtualization/choices.py:44 +#: netbox/virtualization/choices.py:22 netbox/virtualization/choices.py:45 #: netbox/vpn/choices.py:19 netbox/wireless/choices.py:25 msgid "Active" msgstr "Attivo" #: netbox/circuits/choices.py:24 netbox/dcim/choices.py:183 -#: netbox/dcim/choices.py:235 netbox/dcim/choices.py:1606 -#: netbox/dcim/choices.py:1659 netbox/virtualization/choices.py:24 -#: netbox/virtualization/choices.py:43 +#: netbox/dcim/choices.py:235 netbox/dcim/choices.py:1590 +#: netbox/dcim/choices.py:1643 netbox/dcim/choices.py:1662 +#: netbox/virtualization/choices.py:24 netbox/virtualization/choices.py:44 msgid "Offline" msgstr "Offline" @@ -130,7 +132,9 @@ msgstr "Deprovisioning" msgid "Decommissioned" msgstr "Dismesso" -#: netbox/circuits/choices.py:90 netbox/dcim/choices.py:1619 +#: netbox/circuits/choices.py:90 netbox/dcim/choices.py:1603 +#: netbox/templates/dcim/interface.html:135 +#: netbox/templates/virtualization/vminterface.html:77 #: netbox/tenancy/choices.py:17 msgid "Primary" msgstr "Primaria" @@ -148,195 +152,207 @@ msgstr "Terziario" msgid "Inactive" msgstr "Inattivo" -#: netbox/circuits/filtersets.py:31 netbox/circuits/filtersets.py:198 -#: netbox/dcim/filtersets.py:98 netbox/dcim/filtersets.py:152 -#: netbox/dcim/filtersets.py:212 netbox/dcim/filtersets.py:333 -#: netbox/dcim/filtersets.py:464 netbox/dcim/filtersets.py:1021 -#: netbox/dcim/filtersets.py:1368 netbox/dcim/filtersets.py:1903 -#: netbox/dcim/filtersets.py:2146 netbox/dcim/filtersets.py:2204 -#: netbox/ipam/filtersets.py:341 netbox/ipam/filtersets.py:961 -#: netbox/virtualization/filtersets.py:45 -#: netbox/virtualization/filtersets.py:173 netbox/vpn/filtersets.py:358 +#: netbox/circuits/choices.py:107 netbox/templates/dcim/interface.html:275 +#: netbox/vpn/choices.py:63 +msgid "Peer" +msgstr "Pari" + +#: netbox/circuits/choices.py:108 netbox/vpn/choices.py:64 +msgid "Hub" +msgstr "Hub" + +#: netbox/circuits/choices.py:109 netbox/vpn/choices.py:65 +msgid "Spoke" +msgstr "Ha parlato" + +#: netbox/circuits/filtersets.py:37 netbox/circuits/filtersets.py:204 +#: netbox/circuits/filtersets.py:284 netbox/dcim/base_filtersets.py:22 +#: netbox/dcim/filtersets.py:99 netbox/dcim/filtersets.py:153 +#: netbox/dcim/filtersets.py:213 netbox/dcim/filtersets.py:334 +#: netbox/dcim/filtersets.py:465 netbox/dcim/filtersets.py:1022 +#: netbox/dcim/filtersets.py:1370 netbox/dcim/filtersets.py:2027 +#: netbox/dcim/filtersets.py:2270 netbox/dcim/filtersets.py:2328 +#: netbox/ipam/filtersets.py:928 netbox/virtualization/filtersets.py:139 +#: netbox/vpn/filtersets.py:358 msgid "Region (ID)" msgstr "Regione (ID)" -#: netbox/circuits/filtersets.py:38 netbox/circuits/filtersets.py:205 -#: netbox/dcim/filtersets.py:105 netbox/dcim/filtersets.py:158 -#: netbox/dcim/filtersets.py:219 netbox/dcim/filtersets.py:340 -#: netbox/dcim/filtersets.py:471 netbox/dcim/filtersets.py:1028 -#: netbox/dcim/filtersets.py:1375 netbox/dcim/filtersets.py:1910 -#: netbox/dcim/filtersets.py:2153 netbox/dcim/filtersets.py:2211 -#: netbox/extras/filtersets.py:509 netbox/ipam/filtersets.py:348 -#: netbox/ipam/filtersets.py:968 netbox/virtualization/filtersets.py:52 -#: netbox/virtualization/filtersets.py:180 netbox/vpn/filtersets.py:353 +#: netbox/circuits/filtersets.py:44 netbox/circuits/filtersets.py:211 +#: netbox/circuits/filtersets.py:291 netbox/dcim/base_filtersets.py:29 +#: netbox/dcim/filtersets.py:106 netbox/dcim/filtersets.py:159 +#: netbox/dcim/filtersets.py:220 netbox/dcim/filtersets.py:341 +#: netbox/dcim/filtersets.py:472 netbox/dcim/filtersets.py:1029 +#: netbox/dcim/filtersets.py:1377 netbox/dcim/filtersets.py:2034 +#: netbox/dcim/filtersets.py:2277 netbox/dcim/filtersets.py:2335 +#: netbox/extras/filtersets.py:509 netbox/ipam/filtersets.py:935 +#: netbox/virtualization/filtersets.py:146 netbox/vpn/filtersets.py:353 msgid "Region (slug)" msgstr "Regione (slug)" -#: netbox/circuits/filtersets.py:44 netbox/circuits/filtersets.py:211 -#: netbox/dcim/filtersets.py:128 netbox/dcim/filtersets.py:225 -#: netbox/dcim/filtersets.py:346 netbox/dcim/filtersets.py:477 -#: netbox/dcim/filtersets.py:1034 netbox/dcim/filtersets.py:1381 -#: netbox/dcim/filtersets.py:1916 netbox/dcim/filtersets.py:2159 -#: netbox/dcim/filtersets.py:2217 netbox/ipam/filtersets.py:354 -#: netbox/ipam/filtersets.py:974 netbox/virtualization/filtersets.py:58 -#: netbox/virtualization/filtersets.py:186 +#: netbox/circuits/filtersets.py:50 netbox/circuits/filtersets.py:217 +#: netbox/circuits/filtersets.py:297 netbox/dcim/base_filtersets.py:35 +#: netbox/dcim/filtersets.py:129 netbox/dcim/filtersets.py:226 +#: netbox/dcim/filtersets.py:347 netbox/dcim/filtersets.py:478 +#: netbox/dcim/filtersets.py:1035 netbox/dcim/filtersets.py:1383 +#: netbox/dcim/filtersets.py:2040 netbox/dcim/filtersets.py:2283 +#: netbox/dcim/filtersets.py:2341 netbox/ipam/filtersets.py:941 +#: netbox/virtualization/filtersets.py:152 msgid "Site group (ID)" msgstr "Gruppo del sito (ID)" -#: netbox/circuits/filtersets.py:51 netbox/circuits/filtersets.py:218 -#: netbox/dcim/filtersets.py:135 netbox/dcim/filtersets.py:232 -#: netbox/dcim/filtersets.py:353 netbox/dcim/filtersets.py:484 -#: netbox/dcim/filtersets.py:1041 netbox/dcim/filtersets.py:1388 -#: netbox/dcim/filtersets.py:1923 netbox/dcim/filtersets.py:2166 -#: netbox/dcim/filtersets.py:2224 netbox/extras/filtersets.py:515 -#: netbox/ipam/filtersets.py:361 netbox/ipam/filtersets.py:981 -#: netbox/virtualization/filtersets.py:65 -#: netbox/virtualization/filtersets.py:193 +#: netbox/circuits/filtersets.py:57 netbox/circuits/filtersets.py:224 +#: netbox/circuits/filtersets.py:304 netbox/dcim/base_filtersets.py:42 +#: netbox/dcim/filtersets.py:136 netbox/dcim/filtersets.py:233 +#: netbox/dcim/filtersets.py:354 netbox/dcim/filtersets.py:485 +#: netbox/dcim/filtersets.py:1042 netbox/dcim/filtersets.py:1390 +#: netbox/dcim/filtersets.py:2047 netbox/dcim/filtersets.py:2290 +#: netbox/dcim/filtersets.py:2348 netbox/extras/filtersets.py:515 +#: netbox/ipam/filtersets.py:948 netbox/virtualization/filtersets.py:159 msgid "Site group (slug)" msgstr "Gruppo del sito (slug)" -#: netbox/circuits/filtersets.py:56 netbox/circuits/forms/bulk_edit.py:188 -#: netbox/circuits/forms/bulk_edit.py:216 -#: netbox/circuits/forms/bulk_import.py:124 -#: netbox/circuits/forms/filtersets.py:51 -#: netbox/circuits/forms/filtersets.py:171 -#: netbox/circuits/forms/filtersets.py:209 -#: netbox/circuits/forms/model_forms.py:138 -#: netbox/circuits/forms/model_forms.py:154 -#: netbox/circuits/tables/circuits.py:113 netbox/dcim/forms/bulk_edit.py:169 -#: netbox/dcim/forms/bulk_edit.py:330 netbox/dcim/forms/bulk_edit.py:683 -#: netbox/dcim/forms/bulk_edit.py:888 netbox/dcim/forms/bulk_import.py:131 -#: netbox/dcim/forms/bulk_import.py:230 netbox/dcim/forms/bulk_import.py:331 -#: netbox/dcim/forms/bulk_import.py:562 netbox/dcim/forms/bulk_import.py:1333 -#: netbox/dcim/forms/bulk_import.py:1361 netbox/dcim/forms/filtersets.py:87 -#: netbox/dcim/forms/filtersets.py:225 netbox/dcim/forms/filtersets.py:342 -#: netbox/dcim/forms/filtersets.py:439 netbox/dcim/forms/filtersets.py:753 -#: netbox/dcim/forms/filtersets.py:997 netbox/dcim/forms/filtersets.py:1021 -#: netbox/dcim/forms/filtersets.py:1111 netbox/dcim/forms/filtersets.py:1149 -#: netbox/dcim/forms/filtersets.py:1584 netbox/dcim/forms/filtersets.py:1608 -#: netbox/dcim/forms/filtersets.py:1632 netbox/dcim/forms/model_forms.py:137 -#: netbox/dcim/forms/model_forms.py:165 netbox/dcim/forms/model_forms.py:238 -#: netbox/dcim/forms/model_forms.py:463 netbox/dcim/forms/model_forms.py:723 -#: netbox/dcim/forms/object_create.py:383 netbox/dcim/tables/devices.py:153 +#: netbox/circuits/filtersets.py:62 netbox/circuits/forms/filtersets.py:59 +#: netbox/circuits/forms/filtersets.py:182 +#: netbox/circuits/forms/filtersets.py:240 +#: netbox/circuits/tables/circuits.py:129 netbox/dcim/forms/bulk_edit.py:172 +#: netbox/dcim/forms/bulk_edit.py:333 netbox/dcim/forms/bulk_edit.py:686 +#: netbox/dcim/forms/bulk_edit.py:891 netbox/dcim/forms/bulk_import.py:133 +#: netbox/dcim/forms/bulk_import.py:232 netbox/dcim/forms/bulk_import.py:333 +#: netbox/dcim/forms/bulk_import.py:567 netbox/dcim/forms/bulk_import.py:1430 +#: netbox/dcim/forms/bulk_import.py:1458 netbox/dcim/forms/filtersets.py:88 +#: netbox/dcim/forms/filtersets.py:226 netbox/dcim/forms/filtersets.py:343 +#: netbox/dcim/forms/filtersets.py:440 netbox/dcim/forms/filtersets.py:754 +#: netbox/dcim/forms/filtersets.py:998 netbox/dcim/forms/filtersets.py:1022 +#: netbox/dcim/forms/filtersets.py:1112 netbox/dcim/forms/filtersets.py:1150 +#: netbox/dcim/forms/filtersets.py:1622 netbox/dcim/forms/filtersets.py:1646 +#: netbox/dcim/forms/filtersets.py:1670 netbox/dcim/forms/model_forms.py:141 +#: netbox/dcim/forms/model_forms.py:169 netbox/dcim/forms/model_forms.py:243 +#: netbox/dcim/forms/model_forms.py:473 netbox/dcim/forms/model_forms.py:734 +#: netbox/dcim/forms/object_create.py:383 netbox/dcim/tables/devices.py:164 #: netbox/dcim/tables/power.py:26 netbox/dcim/tables/power.py:93 -#: netbox/dcim/tables/racks.py:122 netbox/dcim/tables/racks.py:207 -#: netbox/dcim/tables/sites.py:134 netbox/extras/filtersets.py:525 -#: netbox/ipam/forms/bulk_edit.py:218 netbox/ipam/forms/bulk_edit.py:285 -#: netbox/ipam/forms/bulk_edit.py:484 netbox/ipam/forms/bulk_import.py:171 -#: netbox/ipam/forms/bulk_import.py:453 netbox/ipam/forms/filtersets.py:153 -#: netbox/ipam/forms/filtersets.py:231 netbox/ipam/forms/filtersets.py:432 -#: netbox/ipam/forms/filtersets.py:489 netbox/ipam/forms/model_forms.py:205 -#: netbox/ipam/forms/model_forms.py:669 netbox/ipam/tables/ip.py:245 -#: netbox/ipam/tables/vlans.py:118 netbox/ipam/tables/vlans.py:221 -#: netbox/templates/circuits/inc/circuit_termination_fields.html:6 -#: netbox/templates/dcim/device.html:22 +#: netbox/dcim/tables/racks.py:121 netbox/dcim/tables/racks.py:206 +#: netbox/dcim/tables/sites.py:133 netbox/extras/filtersets.py:525 +#: netbox/ipam/forms/bulk_edit.py:468 netbox/ipam/forms/bulk_import.py:452 +#: netbox/ipam/forms/filtersets.py:155 netbox/ipam/forms/filtersets.py:229 +#: netbox/ipam/forms/filtersets.py:435 netbox/ipam/forms/filtersets.py:530 +#: netbox/ipam/forms/model_forms.py:679 netbox/ipam/tables/vlans.py:87 +#: netbox/ipam/tables/vlans.py:197 netbox/templates/dcim/device.html:22 #: netbox/templates/dcim/inc/cable_termination.html:8 #: netbox/templates/dcim/inc/cable_termination.html:33 #: netbox/templates/dcim/location.html:37 #: netbox/templates/dcim/powerpanel.html:22 netbox/templates/dcim/rack.html:20 #: netbox/templates/dcim/rackreservation.html:28 -#: netbox/templates/dcim/site.html:28 netbox/templates/ipam/prefix.html:56 -#: netbox/templates/ipam/vlan.html:23 netbox/templates/ipam/vlan_edit.html:40 -#: netbox/templates/virtualization/cluster.html:42 +#: netbox/templates/dcim/site.html:28 netbox/templates/ipam/vlan.html:23 +#: netbox/templates/ipam/vlan_edit.html:48 #: netbox/templates/virtualization/virtualmachine.html:95 -#: netbox/virtualization/forms/bulk_edit.py:91 -#: netbox/virtualization/forms/bulk_edit.py:109 -#: netbox/virtualization/forms/bulk_edit.py:124 -#: netbox/virtualization/forms/bulk_import.py:59 -#: netbox/virtualization/forms/bulk_import.py:85 -#: netbox/virtualization/forms/filtersets.py:79 -#: netbox/virtualization/forms/filtersets.py:148 -#: netbox/virtualization/forms/model_forms.py:71 +#: netbox/virtualization/forms/bulk_edit.py:106 +#: netbox/virtualization/forms/bulk_import.py:60 +#: netbox/virtualization/forms/bulk_import.py:91 +#: netbox/virtualization/forms/filtersets.py:74 +#: netbox/virtualization/forms/filtersets.py:153 #: netbox/virtualization/forms/model_forms.py:104 -#: netbox/virtualization/forms/model_forms.py:171 -#: netbox/virtualization/tables/clusters.py:77 -#: netbox/virtualization/tables/virtualmachines.py:63 -#: netbox/vpn/forms/filtersets.py:266 netbox/wireless/forms/model_forms.py:76 -#: netbox/wireless/forms/model_forms.py:118 +#: netbox/virtualization/forms/model_forms.py:178 +#: netbox/virtualization/tables/virtualmachines.py:33 +#: netbox/vpn/forms/filtersets.py:266 netbox/wireless/forms/filtersets.py:88 +#: netbox/wireless/forms/model_forms.py:79 +#: netbox/wireless/forms/model_forms.py:121 msgid "Site" msgstr "Sito" -#: netbox/circuits/filtersets.py:62 netbox/circuits/filtersets.py:229 -#: netbox/circuits/filtersets.py:274 netbox/dcim/filtersets.py:242 -#: netbox/dcim/filtersets.py:363 netbox/dcim/filtersets.py:458 -#: netbox/extras/filtersets.py:531 netbox/ipam/filtersets.py:240 -#: netbox/ipam/filtersets.py:371 netbox/ipam/filtersets.py:991 -#: netbox/virtualization/filtersets.py:75 -#: netbox/virtualization/filtersets.py:203 netbox/vpn/filtersets.py:363 +#: netbox/circuits/filtersets.py:68 netbox/circuits/filtersets.py:235 +#: netbox/circuits/filtersets.py:315 netbox/dcim/base_filtersets.py:53 +#: netbox/dcim/filtersets.py:243 netbox/dcim/filtersets.py:364 +#: netbox/dcim/filtersets.py:459 netbox/extras/filtersets.py:531 +#: netbox/ipam/filtersets.py:243 netbox/ipam/filtersets.py:958 +#: netbox/virtualization/filtersets.py:169 netbox/vpn/filtersets.py:363 msgid "Site (slug)" msgstr "Sito (slug)" -#: netbox/circuits/filtersets.py:67 +#: netbox/circuits/filtersets.py:73 msgid "ASN (ID)" msgstr "ASN (ID)" -#: netbox/circuits/filtersets.py:73 netbox/circuits/forms/filtersets.py:31 -#: netbox/ipam/forms/model_forms.py:159 netbox/ipam/models/asns.py:108 -#: netbox/ipam/models/asns.py:125 netbox/ipam/tables/asn.py:41 +#: netbox/circuits/filtersets.py:79 netbox/circuits/forms/filtersets.py:39 +#: netbox/ipam/forms/model_forms.py:165 netbox/ipam/models/asns.py:105 +#: netbox/ipam/models/asns.py:122 netbox/ipam/tables/asn.py:41 #: netbox/templates/ipam/asn.html:20 msgid "ASN" msgstr "ASN" -#: netbox/circuits/filtersets.py:95 netbox/circuits/filtersets.py:122 -#: netbox/circuits/filtersets.py:156 netbox/circuits/filtersets.py:283 -#: netbox/circuits/filtersets.py:325 netbox/ipam/filtersets.py:245 +#: netbox/circuits/filtersets.py:101 netbox/circuits/filtersets.py:128 +#: netbox/circuits/filtersets.py:162 netbox/circuits/filtersets.py:338 +#: netbox/circuits/filtersets.py:406 netbox/circuits/filtersets.py:482 +#: netbox/circuits/filtersets.py:550 netbox/ipam/filtersets.py:248 msgid "Provider (ID)" msgstr "Provider (ID)" -#: netbox/circuits/filtersets.py:101 netbox/circuits/filtersets.py:128 -#: netbox/circuits/filtersets.py:162 netbox/circuits/filtersets.py:289 -#: netbox/circuits/filtersets.py:331 netbox/ipam/filtersets.py:251 +#: netbox/circuits/filtersets.py:107 netbox/circuits/filtersets.py:134 +#: netbox/circuits/filtersets.py:168 netbox/circuits/filtersets.py:344 +#: netbox/circuits/filtersets.py:488 netbox/circuits/filtersets.py:556 +#: netbox/ipam/filtersets.py:254 msgid "Provider (slug)" msgstr "Provider (slug)" -#: netbox/circuits/filtersets.py:167 +#: netbox/circuits/filtersets.py:173 netbox/circuits/filtersets.py:493 +#: netbox/circuits/filtersets.py:561 msgid "Provider account (ID)" msgstr "Provider account (ID)" -#: netbox/circuits/filtersets.py:173 +#: netbox/circuits/filtersets.py:179 netbox/circuits/filtersets.py:499 +#: netbox/circuits/filtersets.py:567 msgid "Provider account (account)" msgstr "Provider account (account)" -#: netbox/circuits/filtersets.py:178 +#: netbox/circuits/filtersets.py:184 netbox/circuits/filtersets.py:503 +#: netbox/circuits/filtersets.py:572 msgid "Provider network (ID)" msgstr "Provider network (ID)" -#: netbox/circuits/filtersets.py:182 +#: netbox/circuits/filtersets.py:188 msgid "Circuit type (ID)" msgstr "Tipo di circuito (ID)" -#: netbox/circuits/filtersets.py:188 +#: netbox/circuits/filtersets.py:194 msgid "Circuit type (slug)" msgstr "Tipo di circuito (slug)" -#: netbox/circuits/filtersets.py:223 netbox/circuits/filtersets.py:268 -#: netbox/dcim/filtersets.py:236 netbox/dcim/filtersets.py:357 -#: netbox/dcim/filtersets.py:452 netbox/dcim/filtersets.py:1045 -#: netbox/dcim/filtersets.py:1393 netbox/dcim/filtersets.py:1928 -#: netbox/dcim/filtersets.py:2170 netbox/dcim/filtersets.py:2229 -#: netbox/ipam/filtersets.py:234 netbox/ipam/filtersets.py:365 -#: netbox/ipam/filtersets.py:985 netbox/virtualization/filtersets.py:69 -#: netbox/virtualization/filtersets.py:197 netbox/vpn/filtersets.py:368 +#: netbox/circuits/filtersets.py:229 netbox/circuits/filtersets.py:309 +#: netbox/dcim/base_filtersets.py:47 netbox/dcim/filtersets.py:237 +#: netbox/dcim/filtersets.py:358 netbox/dcim/filtersets.py:453 +#: netbox/dcim/filtersets.py:1046 netbox/dcim/filtersets.py:1395 +#: netbox/dcim/filtersets.py:2052 netbox/dcim/filtersets.py:2294 +#: netbox/dcim/filtersets.py:2353 netbox/ipam/filtersets.py:237 +#: netbox/ipam/filtersets.py:952 netbox/virtualization/filtersets.py:163 +#: netbox/vpn/filtersets.py:368 msgid "Site (ID)" msgstr "Sito (ID)" -#: netbox/circuits/filtersets.py:233 netbox/circuits/filtersets.py:237 +#: netbox/circuits/filtersets.py:239 netbox/circuits/filtersets.py:321 +#: netbox/dcim/base_filtersets.py:59 netbox/dcim/filtersets.py:259 +#: netbox/dcim/filtersets.py:370 netbox/dcim/filtersets.py:491 +#: netbox/dcim/filtersets.py:1058 netbox/dcim/filtersets.py:1406 +#: netbox/dcim/filtersets.py:2306 +msgid "Location (ID)" +msgstr "Ubicazione (ID)" + +#: netbox/circuits/filtersets.py:244 netbox/circuits/filtersets.py:248 msgid "Termination A (ID)" msgstr "Terminazione A (ID)" -#: netbox/circuits/filtersets.py:260 netbox/circuits/filtersets.py:320 -#: netbox/core/filtersets.py:77 netbox/core/filtersets.py:136 -#: netbox/core/filtersets.py:173 netbox/dcim/filtersets.py:751 -#: netbox/dcim/filtersets.py:1362 netbox/dcim/filtersets.py:2277 -#: netbox/extras/filtersets.py:41 netbox/extras/filtersets.py:63 -#: netbox/extras/filtersets.py:92 netbox/extras/filtersets.py:132 -#: netbox/extras/filtersets.py:181 netbox/extras/filtersets.py:209 -#: netbox/extras/filtersets.py:239 netbox/extras/filtersets.py:276 -#: netbox/extras/filtersets.py:348 netbox/extras/filtersets.py:391 -#: netbox/extras/filtersets.py:438 netbox/extras/filtersets.py:498 -#: netbox/extras/filtersets.py:657 netbox/extras/filtersets.py:703 -#: netbox/ipam/forms/model_forms.py:482 netbox/netbox/filtersets.py:282 -#: netbox/netbox/forms/__init__.py:22 netbox/netbox/forms/base.py:167 +#: netbox/circuits/filtersets.py:273 netbox/circuits/filtersets.py:375 +#: netbox/circuits/filtersets.py:537 netbox/core/filtersets.py:77 +#: netbox/core/filtersets.py:136 netbox/core/filtersets.py:173 +#: netbox/dcim/filtersets.py:752 netbox/dcim/filtersets.py:1364 +#: netbox/dcim/filtersets.py:2401 netbox/extras/filtersets.py:41 +#: netbox/extras/filtersets.py:63 netbox/extras/filtersets.py:92 +#: netbox/extras/filtersets.py:132 netbox/extras/filtersets.py:181 +#: netbox/extras/filtersets.py:209 netbox/extras/filtersets.py:239 +#: netbox/extras/filtersets.py:276 netbox/extras/filtersets.py:348 +#: netbox/extras/filtersets.py:391 netbox/extras/filtersets.py:438 +#: netbox/extras/filtersets.py:498 netbox/extras/filtersets.py:657 +#: netbox/extras/filtersets.py:703 netbox/ipam/forms/model_forms.py:492 +#: netbox/netbox/filtersets.py:286 netbox/netbox/forms/__init__.py:22 +#: netbox/netbox/forms/base.py:167 #: netbox/templates/htmx/object_selector.html:28 #: netbox/templates/inc/filter_list.html:46 #: netbox/templates/ipam/ipaddress_assign.html:29 @@ -348,97 +364,150 @@ msgstr "Terminazione A (ID)" msgid "Search" msgstr "Cerca" -#: netbox/circuits/filtersets.py:264 netbox/circuits/forms/bulk_edit.py:172 -#: netbox/circuits/forms/bulk_edit.py:246 -#: netbox/circuits/forms/bulk_import.py:115 -#: netbox/circuits/forms/filtersets.py:198 -#: netbox/circuits/forms/filtersets.py:214 -#: netbox/circuits/forms/filtersets.py:260 -#: netbox/circuits/forms/model_forms.py:111 -#: netbox/circuits/forms/model_forms.py:133 -#: netbox/circuits/forms/model_forms.py:199 -#: netbox/circuits/tables/circuits.py:104 -#: netbox/circuits/tables/circuits.py:164 netbox/dcim/forms/connections.py:73 +#: netbox/circuits/filtersets.py:277 netbox/circuits/forms/bulk_edit.py:195 +#: netbox/circuits/forms/bulk_edit.py:284 +#: netbox/circuits/forms/bulk_import.py:128 +#: netbox/circuits/forms/filtersets.py:223 +#: netbox/circuits/forms/filtersets.py:250 +#: netbox/circuits/forms/filtersets.py:296 +#: netbox/circuits/forms/model_forms.py:139 +#: netbox/circuits/forms/model_forms.py:162 +#: netbox/circuits/forms/model_forms.py:262 +#: netbox/circuits/tables/circuits.py:108 +#: netbox/circuits/tables/circuits.py:203 netbox/dcim/forms/connections.py:73 #: netbox/templates/circuits/circuit.html:15 -#: netbox/templates/circuits/circuitgroupassignment.html:26 +#: netbox/templates/circuits/circuitgroupassignment.html:30 #: netbox/templates/circuits/circuittermination.html:19 #: netbox/templates/dcim/inc/cable_termination.html:55 #: netbox/templates/dcim/trace/circuit.html:4 msgid "Circuit" msgstr "Circuito" -#: netbox/circuits/filtersets.py:278 +#: netbox/circuits/filtersets.py:328 netbox/dcim/base_filtersets.py:66 +#: netbox/dcim/filtersets.py:266 netbox/dcim/filtersets.py:377 +#: netbox/dcim/filtersets.py:498 netbox/dcim/filtersets.py:1412 +#: netbox/extras/filtersets.py:542 +msgid "Location (slug)" +msgstr "Posizione (slug)" + +#: netbox/circuits/filtersets.py:333 msgid "ProviderNetwork (ID)" msgstr "Provider network (ID)" -#: netbox/circuits/filtersets.py:335 -msgid "Circuit (ID)" -msgstr "Circuito (ID)" - -#: netbox/circuits/filtersets.py:341 +#: netbox/circuits/filtersets.py:381 msgid "Circuit (CID)" msgstr "Circuito (CID)" -#: netbox/circuits/filtersets.py:345 +#: netbox/circuits/filtersets.py:386 +msgid "Circuit (ID)" +msgstr "Circuito (ID)" + +#: netbox/circuits/filtersets.py:391 +msgid "Virtual circuit (CID)" +msgstr "Circuito virtuale (CID)" + +#: netbox/circuits/filtersets.py:396 netbox/dcim/filtersets.py:1849 +msgid "Virtual circuit (ID)" +msgstr "Circuito virtuale (ID)" + +#: netbox/circuits/filtersets.py:401 +msgid "Provider (name)" +msgstr "Fornitore (nome)" + +#: netbox/circuits/filtersets.py:410 msgid "Circuit group (ID)" msgstr "Gruppo di circuiti (ID)" -#: netbox/circuits/filtersets.py:351 +#: netbox/circuits/filtersets.py:416 msgid "Circuit group (slug)" msgstr "Gruppo di circuiti (slug)" -#: netbox/circuits/forms/bulk_edit.py:30 -#: netbox/circuits/forms/filtersets.py:56 -#: netbox/circuits/forms/model_forms.py:29 -#: netbox/circuits/tables/providers.py:33 netbox/dcim/forms/bulk_edit.py:129 -#: netbox/dcim/forms/filtersets.py:195 netbox/dcim/forms/model_forms.py:123 -#: netbox/dcim/tables/sites.py:94 netbox/ipam/models/asns.py:126 -#: netbox/ipam/tables/asn.py:27 netbox/ipam/views.py:213 -#: netbox/netbox/navigation/menu.py:172 netbox/netbox/navigation/menu.py:175 +#: netbox/circuits/filtersets.py:507 +msgid "Virtual circuit type (ID)" +msgstr "Tipo di circuito virtuale (ID)" + +#: netbox/circuits/filtersets.py:513 +msgid "Virtual circuit type (slug)" +msgstr "Tipo di circuito virtuale (slug)" + +#: netbox/circuits/filtersets.py:541 netbox/circuits/forms/bulk_edit.py:355 +#: netbox/circuits/forms/bulk_import.py:249 +#: netbox/circuits/forms/filtersets.py:372 +#: netbox/circuits/forms/filtersets.py:378 +#: netbox/circuits/forms/model_forms.py:343 +#: netbox/circuits/forms/model_forms.py:358 +#: netbox/circuits/tables/virtual_circuits.py:88 +#: netbox/templates/circuits/virtualcircuit.html:20 +#: netbox/templates/circuits/virtualcircuittermination.html:38 +msgid "Virtual circuit" +msgstr "Circuito virtuale" + +#: netbox/circuits/filtersets.py:577 netbox/dcim/filtersets.py:1269 +#: netbox/dcim/filtersets.py:1634 netbox/ipam/filtersets.py:601 +#: netbox/vpn/filtersets.py:102 netbox/vpn/filtersets.py:401 +msgid "Interface (ID)" +msgstr "Interfaccia (ID)" + +#: netbox/circuits/forms/bulk_edit.py:42 +#: netbox/circuits/forms/filtersets.py:64 +#: netbox/circuits/forms/model_forms.py:42 +#: netbox/circuits/tables/providers.py:32 netbox/dcim/forms/bulk_edit.py:132 +#: netbox/dcim/forms/filtersets.py:196 netbox/dcim/forms/model_forms.py:127 +#: netbox/dcim/tables/sites.py:94 netbox/ipam/models/asns.py:123 +#: netbox/ipam/tables/asn.py:27 netbox/ipam/views.py:230 +#: netbox/netbox/navigation/menu.py:178 netbox/netbox/navigation/menu.py:181 #: netbox/templates/circuits/provider.html:23 msgid "ASNs" msgstr "ASN" -#: netbox/circuits/forms/bulk_edit.py:34 netbox/circuits/forms/bulk_edit.py:56 -#: netbox/circuits/forms/bulk_edit.py:83 -#: netbox/circuits/forms/bulk_edit.py:104 -#: netbox/circuits/forms/bulk_edit.py:164 -#: netbox/circuits/forms/bulk_edit.py:183 -#: netbox/circuits/forms/bulk_edit.py:228 netbox/core/forms/bulk_edit.py:28 -#: netbox/dcim/forms/bulk_create.py:35 netbox/dcim/forms/bulk_edit.py:74 -#: netbox/dcim/forms/bulk_edit.py:93 netbox/dcim/forms/bulk_edit.py:152 -#: netbox/dcim/forms/bulk_edit.py:193 netbox/dcim/forms/bulk_edit.py:211 -#: netbox/dcim/forms/bulk_edit.py:289 netbox/dcim/forms/bulk_edit.py:438 -#: netbox/dcim/forms/bulk_edit.py:472 netbox/dcim/forms/bulk_edit.py:487 -#: netbox/dcim/forms/bulk_edit.py:546 netbox/dcim/forms/bulk_edit.py:590 -#: netbox/dcim/forms/bulk_edit.py:624 netbox/dcim/forms/bulk_edit.py:648 -#: netbox/dcim/forms/bulk_edit.py:721 netbox/dcim/forms/bulk_edit.py:782 -#: netbox/dcim/forms/bulk_edit.py:834 netbox/dcim/forms/bulk_edit.py:857 -#: netbox/dcim/forms/bulk_edit.py:905 netbox/dcim/forms/bulk_edit.py:975 -#: netbox/dcim/forms/bulk_edit.py:1028 netbox/dcim/forms/bulk_edit.py:1063 -#: netbox/dcim/forms/bulk_edit.py:1103 netbox/dcim/forms/bulk_edit.py:1147 -#: netbox/dcim/forms/bulk_edit.py:1192 netbox/dcim/forms/bulk_edit.py:1219 -#: netbox/dcim/forms/bulk_edit.py:1237 netbox/dcim/forms/bulk_edit.py:1255 -#: netbox/dcim/forms/bulk_edit.py:1273 netbox/dcim/forms/bulk_edit.py:1725 -#: netbox/extras/forms/bulk_edit.py:39 netbox/extras/forms/bulk_edit.py:149 -#: netbox/extras/forms/bulk_edit.py:178 netbox/extras/forms/bulk_edit.py:208 -#: netbox/extras/forms/bulk_edit.py:256 netbox/extras/forms/bulk_edit.py:274 -#: netbox/extras/forms/bulk_edit.py:298 netbox/extras/forms/bulk_edit.py:312 -#: netbox/extras/forms/bulk_edit.py:339 netbox/extras/tables/tables.py:79 -#: netbox/ipam/forms/bulk_edit.py:53 netbox/ipam/forms/bulk_edit.py:73 -#: netbox/ipam/forms/bulk_edit.py:93 netbox/ipam/forms/bulk_edit.py:117 -#: netbox/ipam/forms/bulk_edit.py:146 netbox/ipam/forms/bulk_edit.py:175 -#: netbox/ipam/forms/bulk_edit.py:194 netbox/ipam/forms/bulk_edit.py:276 -#: netbox/ipam/forms/bulk_edit.py:321 netbox/ipam/forms/bulk_edit.py:369 -#: netbox/ipam/forms/bulk_edit.py:412 netbox/ipam/forms/bulk_edit.py:428 -#: netbox/ipam/forms/bulk_edit.py:516 netbox/ipam/forms/bulk_edit.py:547 +#: netbox/circuits/forms/bulk_edit.py:46 netbox/circuits/forms/bulk_edit.py:68 +#: netbox/circuits/forms/bulk_edit.py:95 +#: netbox/circuits/forms/bulk_edit.py:116 +#: netbox/circuits/forms/bulk_edit.py:187 +#: netbox/circuits/forms/bulk_edit.py:207 +#: netbox/circuits/forms/bulk_edit.py:266 +#: netbox/circuits/forms/bulk_edit.py:307 +#: netbox/circuits/forms/bulk_edit.py:347 +#: netbox/circuits/forms/bulk_edit.py:371 netbox/core/forms/bulk_edit.py:28 +#: netbox/dcim/forms/bulk_create.py:35 netbox/dcim/forms/bulk_edit.py:77 +#: netbox/dcim/forms/bulk_edit.py:96 netbox/dcim/forms/bulk_edit.py:155 +#: netbox/dcim/forms/bulk_edit.py:196 netbox/dcim/forms/bulk_edit.py:214 +#: netbox/dcim/forms/bulk_edit.py:292 netbox/dcim/forms/bulk_edit.py:441 +#: netbox/dcim/forms/bulk_edit.py:475 netbox/dcim/forms/bulk_edit.py:490 +#: netbox/dcim/forms/bulk_edit.py:549 netbox/dcim/forms/bulk_edit.py:593 +#: netbox/dcim/forms/bulk_edit.py:627 netbox/dcim/forms/bulk_edit.py:651 +#: netbox/dcim/forms/bulk_edit.py:724 netbox/dcim/forms/bulk_edit.py:785 +#: netbox/dcim/forms/bulk_edit.py:837 netbox/dcim/forms/bulk_edit.py:860 +#: netbox/dcim/forms/bulk_edit.py:908 netbox/dcim/forms/bulk_edit.py:978 +#: netbox/dcim/forms/bulk_edit.py:1031 netbox/dcim/forms/bulk_edit.py:1066 +#: netbox/dcim/forms/bulk_edit.py:1106 netbox/dcim/forms/bulk_edit.py:1150 +#: netbox/dcim/forms/bulk_edit.py:1195 netbox/dcim/forms/bulk_edit.py:1222 +#: netbox/dcim/forms/bulk_edit.py:1240 netbox/dcim/forms/bulk_edit.py:1258 +#: netbox/dcim/forms/bulk_edit.py:1276 netbox/dcim/forms/bulk_edit.py:1746 +#: netbox/dcim/forms/bulk_edit.py:1787 netbox/extras/forms/bulk_edit.py:39 +#: netbox/extras/forms/bulk_edit.py:149 netbox/extras/forms/bulk_edit.py:178 +#: netbox/extras/forms/bulk_edit.py:208 netbox/extras/forms/bulk_edit.py:256 +#: netbox/extras/forms/bulk_edit.py:274 netbox/extras/forms/bulk_edit.py:298 +#: netbox/extras/forms/bulk_edit.py:312 netbox/extras/forms/bulk_edit.py:339 +#: netbox/extras/tables/tables.py:79 netbox/ipam/forms/bulk_edit.py:56 +#: netbox/ipam/forms/bulk_edit.py:76 netbox/ipam/forms/bulk_edit.py:96 +#: netbox/ipam/forms/bulk_edit.py:120 netbox/ipam/forms/bulk_edit.py:149 +#: netbox/ipam/forms/bulk_edit.py:178 netbox/ipam/forms/bulk_edit.py:197 +#: netbox/ipam/forms/bulk_edit.py:260 netbox/ipam/forms/bulk_edit.py:305 +#: netbox/ipam/forms/bulk_edit.py:353 netbox/ipam/forms/bulk_edit.py:396 +#: netbox/ipam/forms/bulk_edit.py:412 netbox/ipam/forms/bulk_edit.py:500 +#: netbox/ipam/forms/bulk_edit.py:532 netbox/ipam/forms/bulk_edit.py:575 +#: netbox/ipam/tables/vlans.py:240 netbox/ipam/tables/vlans.py:267 #: netbox/templates/account/token.html:35 -#: netbox/templates/circuits/circuit.html:59 +#: netbox/templates/circuits/circuit.html:69 #: netbox/templates/circuits/circuitgroup.html:32 #: netbox/templates/circuits/circuittype.html:26 -#: netbox/templates/circuits/inc/circuit_termination_fields.html:88 +#: netbox/templates/circuits/inc/circuit_termination_fields.html:83 #: netbox/templates/circuits/provider.html:33 #: netbox/templates/circuits/providernetwork.html:32 +#: netbox/templates/circuits/virtualcircuit.html:56 +#: netbox/templates/circuits/virtualcircuittermination.html:68 +#: netbox/templates/circuits/virtualcircuittype.html:26 #: netbox/templates/core/datasource.html:54 #: netbox/templates/core/plugin.html:80 netbox/templates/dcim/cable.html:36 #: netbox/templates/dcim/consoleport.html:44 @@ -449,13 +518,14 @@ msgstr "ASN" #: netbox/templates/dcim/devicetype.html:33 #: netbox/templates/dcim/frontport.html:58 #: netbox/templates/dcim/interface.html:69 -#: netbox/templates/dcim/inventoryitem.html:60 +#: netbox/templates/dcim/inventoryitem.html:64 #: netbox/templates/dcim/inventoryitemrole.html:22 #: netbox/templates/dcim/location.html:33 +#: netbox/templates/dcim/macaddress.html:21 #: netbox/templates/dcim/manufacturer.html:40 #: netbox/templates/dcim/module.html:73 #: netbox/templates/dcim/modulebay.html:42 -#: netbox/templates/dcim/moduletype.html:37 +#: netbox/templates/dcim/moduletype.html:39 #: netbox/templates/dcim/platform.html:33 #: netbox/templates/dcim/powerfeed.html:40 #: netbox/templates/dcim/poweroutlet.html:40 @@ -482,12 +552,14 @@ msgstr "ASN" #: netbox/templates/ipam/asnrange.html:38 #: netbox/templates/ipam/fhrpgroup.html:34 #: netbox/templates/ipam/ipaddress.html:55 -#: netbox/templates/ipam/iprange.html:67 netbox/templates/ipam/prefix.html:81 +#: netbox/templates/ipam/iprange.html:67 netbox/templates/ipam/prefix.html:77 #: netbox/templates/ipam/rir.html:26 netbox/templates/ipam/role.html:26 #: netbox/templates/ipam/routetarget.html:21 #: netbox/templates/ipam/service.html:50 #: netbox/templates/ipam/servicetemplate.html:27 #: netbox/templates/ipam/vlan.html:62 netbox/templates/ipam/vlangroup.html:34 +#: netbox/templates/ipam/vlantranslationpolicy.html:18 +#: netbox/templates/ipam/vlantranslationrule.html:26 #: netbox/templates/ipam/vrf.html:33 netbox/templates/tenancy/contact.html:67 #: netbox/templates/tenancy/contactgroup.html:25 #: netbox/templates/tenancy/contactrole.html:22 @@ -501,7 +573,7 @@ msgstr "ASN" #: netbox/templates/virtualization/clustertype.html:26 #: netbox/templates/virtualization/virtualdisk.html:39 #: netbox/templates/virtualization/virtualmachine.html:31 -#: netbox/templates/virtualization/vminterface.html:51 +#: netbox/templates/virtualization/vminterface.html:47 #: netbox/templates/vpn/ikepolicy.html:17 #: netbox/templates/vpn/ikeproposal.html:17 #: netbox/templates/vpn/ipsecpolicy.html:17 @@ -511,119 +583,142 @@ msgstr "ASN" #: netbox/templates/vpn/ipsecproposal.html:17 #: netbox/templates/vpn/l2vpn.html:26 netbox/templates/vpn/tunnel.html:33 #: netbox/templates/vpn/tunnelgroup.html:30 -#: netbox/templates/wireless/wirelesslan.html:26 +#: netbox/templates/wireless/wirelesslan.html:34 #: netbox/templates/wireless/wirelesslangroup.html:33 #: netbox/templates/wireless/wirelesslink.html:34 #: netbox/tenancy/forms/bulk_edit.py:32 netbox/tenancy/forms/bulk_edit.py:80 #: netbox/tenancy/forms/bulk_edit.py:122 netbox/users/forms/bulk_edit.py:64 #: netbox/users/forms/bulk_edit.py:82 netbox/users/forms/bulk_edit.py:112 -#: netbox/virtualization/forms/bulk_edit.py:32 -#: netbox/virtualization/forms/bulk_edit.py:46 -#: netbox/virtualization/forms/bulk_edit.py:100 -#: netbox/virtualization/forms/bulk_edit.py:177 -#: netbox/virtualization/forms/bulk_edit.py:228 -#: netbox/virtualization/forms/bulk_edit.py:337 +#: netbox/virtualization/forms/bulk_edit.py:33 +#: netbox/virtualization/forms/bulk_edit.py:47 +#: netbox/virtualization/forms/bulk_edit.py:82 +#: netbox/virtualization/forms/bulk_edit.py:159 +#: netbox/virtualization/forms/bulk_edit.py:210 +#: netbox/virtualization/forms/bulk_edit.py:327 #: netbox/vpn/forms/bulk_edit.py:28 netbox/vpn/forms/bulk_edit.py:64 #: netbox/vpn/forms/bulk_edit.py:121 netbox/vpn/forms/bulk_edit.py:155 #: netbox/vpn/forms/bulk_edit.py:190 netbox/vpn/forms/bulk_edit.py:215 #: netbox/vpn/forms/bulk_edit.py:247 netbox/vpn/forms/bulk_edit.py:274 -#: netbox/wireless/forms/bulk_edit.py:29 netbox/wireless/forms/bulk_edit.py:82 -#: netbox/wireless/forms/bulk_edit.py:140 +#: netbox/wireless/forms/bulk_edit.py:31 netbox/wireless/forms/bulk_edit.py:84 +#: netbox/wireless/forms/bulk_edit.py:143 msgid "Description" msgstr "Descrizione" -#: netbox/circuits/forms/bulk_edit.py:51 netbox/circuits/forms/bulk_edit.py:73 -#: netbox/circuits/forms/bulk_edit.py:123 -#: netbox/circuits/forms/bulk_import.py:36 -#: netbox/circuits/forms/bulk_import.py:51 -#: netbox/circuits/forms/bulk_import.py:74 -#: netbox/circuits/forms/filtersets.py:70 -#: netbox/circuits/forms/filtersets.py:88 -#: netbox/circuits/forms/filtersets.py:116 -#: netbox/circuits/forms/filtersets.py:131 -#: netbox/circuits/forms/filtersets.py:199 -#: netbox/circuits/forms/filtersets.py:232 -#: netbox/circuits/forms/filtersets.py:255 -#: netbox/circuits/forms/model_forms.py:47 -#: netbox/circuits/forms/model_forms.py:61 -#: netbox/circuits/forms/model_forms.py:93 -#: netbox/circuits/tables/circuits.py:58 -#: netbox/circuits/tables/circuits.py:108 -#: netbox/circuits/tables/circuits.py:160 -#: netbox/circuits/tables/providers.py:72 -#: netbox/circuits/tables/providers.py:103 +#: netbox/circuits/forms/bulk_edit.py:63 netbox/circuits/forms/bulk_edit.py:85 +#: netbox/circuits/forms/bulk_edit.py:135 +#: netbox/circuits/forms/bulk_import.py:43 +#: netbox/circuits/forms/bulk_import.py:58 +#: netbox/circuits/forms/bulk_import.py:81 +#: netbox/circuits/forms/filtersets.py:78 +#: netbox/circuits/forms/filtersets.py:96 +#: netbox/circuits/forms/filtersets.py:124 +#: netbox/circuits/forms/filtersets.py:142 +#: netbox/circuits/forms/filtersets.py:224 +#: netbox/circuits/forms/filtersets.py:268 +#: netbox/circuits/forms/filtersets.py:291 +#: netbox/circuits/forms/filtersets.py:329 +#: netbox/circuits/forms/filtersets.py:337 +#: netbox/circuits/forms/filtersets.py:373 +#: netbox/circuits/forms/filtersets.py:396 +#: netbox/circuits/forms/model_forms.py:60 +#: netbox/circuits/forms/model_forms.py:76 +#: netbox/circuits/forms/model_forms.py:110 +#: netbox/circuits/tables/circuits.py:57 +#: netbox/circuits/tables/circuits.py:112 +#: netbox/circuits/tables/circuits.py:196 +#: netbox/circuits/tables/providers.py:70 +#: netbox/circuits/tables/providers.py:101 +#: netbox/circuits/tables/virtual_circuits.py:46 +#: netbox/circuits/tables/virtual_circuits.py:93 #: netbox/templates/circuits/circuit.html:18 +#: netbox/templates/circuits/circuitgroupassignment.html:26 #: netbox/templates/circuits/circuittermination.html:25 #: netbox/templates/circuits/provider.html:20 #: netbox/templates/circuits/provideraccount.html:20 #: netbox/templates/circuits/providernetwork.html:20 +#: netbox/templates/circuits/virtualcircuit.html:23 +#: netbox/templates/circuits/virtualcircuittermination.html:26 #: netbox/templates/dcim/inc/cable_termination.html:51 +#: netbox/templates/dcim/interface.html:166 msgid "Provider" msgstr "Provider " -#: netbox/circuits/forms/bulk_edit.py:80 -#: netbox/circuits/forms/filtersets.py:91 +#: netbox/circuits/forms/bulk_edit.py:92 +#: netbox/circuits/forms/filtersets.py:99 #: netbox/templates/circuits/providernetwork.html:28 msgid "Service ID" msgstr "ID del servizio" -#: netbox/circuits/forms/bulk_edit.py:100 -#: netbox/circuits/forms/filtersets.py:107 netbox/dcim/forms/bulk_edit.py:207 -#: netbox/dcim/forms/bulk_edit.py:610 netbox/dcim/forms/bulk_edit.py:819 -#: netbox/dcim/forms/bulk_edit.py:1188 netbox/dcim/forms/bulk_edit.py:1215 -#: netbox/dcim/forms/bulk_edit.py:1721 netbox/dcim/forms/filtersets.py:1064 -#: netbox/dcim/forms/filtersets.py:1455 netbox/dcim/forms/filtersets.py:1479 -#: netbox/dcim/tables/devices.py:704 netbox/dcim/tables/devices.py:761 -#: netbox/dcim/tables/devices.py:1003 netbox/dcim/tables/devicetypes.py:249 -#: netbox/dcim/tables/devicetypes.py:264 netbox/dcim/tables/racks.py:33 -#: netbox/extras/forms/bulk_edit.py:270 netbox/extras/tables/tables.py:443 +#: netbox/circuits/forms/bulk_edit.py:112 +#: netbox/circuits/forms/bulk_edit.py:303 +#: netbox/circuits/forms/filtersets.py:115 +#: netbox/circuits/forms/filtersets.py:320 netbox/dcim/forms/bulk_edit.py:210 +#: netbox/dcim/forms/bulk_edit.py:613 netbox/dcim/forms/bulk_edit.py:822 +#: netbox/dcim/forms/bulk_edit.py:1191 netbox/dcim/forms/bulk_edit.py:1218 +#: netbox/dcim/forms/bulk_edit.py:1742 netbox/dcim/forms/filtersets.py:1065 +#: netbox/dcim/forms/filtersets.py:1323 netbox/dcim/forms/filtersets.py:1460 +#: netbox/dcim/forms/filtersets.py:1484 netbox/dcim/tables/devices.py:738 +#: netbox/dcim/tables/devices.py:794 netbox/dcim/tables/devices.py:1035 +#: netbox/dcim/tables/devicetypes.py:256 netbox/dcim/tables/devicetypes.py:271 +#: netbox/dcim/tables/racks.py:33 netbox/extras/forms/bulk_edit.py:270 +#: netbox/extras/tables/tables.py:443 #: netbox/templates/circuits/circuittype.html:30 +#: netbox/templates/circuits/virtualcircuittype.html:30 #: netbox/templates/dcim/cable.html:40 #: netbox/templates/dcim/devicerole.html:34 #: netbox/templates/dcim/frontport.html:40 #: netbox/templates/dcim/inventoryitemrole.html:26 +#: netbox/templates/dcim/poweroutlet.html:44 #: netbox/templates/dcim/rackrole.html:30 #: netbox/templates/dcim/rearport.html:40 netbox/templates/extras/tag.html:26 msgid "Color" msgstr "Colore" -#: netbox/circuits/forms/bulk_edit.py:118 -#: netbox/circuits/forms/bulk_import.py:87 -#: netbox/circuits/forms/filtersets.py:126 netbox/core/forms/bulk_edit.py:18 -#: netbox/core/forms/filtersets.py:33 netbox/core/tables/change_logging.py:32 -#: netbox/core/tables/data.py:20 netbox/core/tables/jobs.py:18 -#: netbox/dcim/forms/bulk_edit.py:797 netbox/dcim/forms/bulk_edit.py:936 -#: netbox/dcim/forms/bulk_edit.py:1004 netbox/dcim/forms/bulk_edit.py:1023 -#: netbox/dcim/forms/bulk_edit.py:1046 netbox/dcim/forms/bulk_edit.py:1088 -#: netbox/dcim/forms/bulk_edit.py:1132 netbox/dcim/forms/bulk_edit.py:1183 -#: netbox/dcim/forms/bulk_edit.py:1210 netbox/dcim/forms/bulk_import.py:188 -#: netbox/dcim/forms/bulk_import.py:267 netbox/dcim/forms/bulk_import.py:730 -#: netbox/dcim/forms/bulk_import.py:756 netbox/dcim/forms/bulk_import.py:782 -#: netbox/dcim/forms/bulk_import.py:802 netbox/dcim/forms/bulk_import.py:885 -#: netbox/dcim/forms/bulk_import.py:979 netbox/dcim/forms/bulk_import.py:1021 -#: netbox/dcim/forms/bulk_import.py:1235 netbox/dcim/forms/bulk_import.py:1398 -#: netbox/dcim/forms/filtersets.py:955 netbox/dcim/forms/filtersets.py:1054 -#: netbox/dcim/forms/filtersets.py:1175 netbox/dcim/forms/filtersets.py:1247 -#: netbox/dcim/forms/filtersets.py:1272 netbox/dcim/forms/filtersets.py:1296 -#: netbox/dcim/forms/filtersets.py:1316 netbox/dcim/forms/filtersets.py:1353 -#: netbox/dcim/forms/filtersets.py:1450 netbox/dcim/forms/filtersets.py:1474 -#: netbox/dcim/forms/model_forms.py:703 netbox/dcim/forms/model_forms.py:709 -#: netbox/dcim/forms/object_import.py:84 +#: netbox/circuits/forms/bulk_edit.py:130 +#: netbox/circuits/forms/bulk_edit.py:331 +#: netbox/circuits/forms/bulk_import.py:94 +#: netbox/circuits/forms/bulk_import.py:221 +#: netbox/circuits/forms/filtersets.py:137 +#: netbox/circuits/forms/filtersets.py:358 +#: netbox/circuits/tables/circuits.py:65 +#: netbox/circuits/tables/circuits.py:200 +#: netbox/circuits/tables/virtual_circuits.py:58 +#: netbox/core/forms/bulk_edit.py:18 netbox/core/forms/filtersets.py:33 +#: netbox/core/tables/change_logging.py:32 netbox/core/tables/data.py:20 +#: netbox/core/tables/jobs.py:18 netbox/dcim/forms/bulk_edit.py:800 +#: netbox/dcim/forms/bulk_edit.py:939 netbox/dcim/forms/bulk_edit.py:1007 +#: netbox/dcim/forms/bulk_edit.py:1026 netbox/dcim/forms/bulk_edit.py:1049 +#: netbox/dcim/forms/bulk_edit.py:1091 netbox/dcim/forms/bulk_edit.py:1135 +#: netbox/dcim/forms/bulk_edit.py:1186 netbox/dcim/forms/bulk_edit.py:1213 +#: netbox/dcim/forms/bulk_import.py:190 netbox/dcim/forms/bulk_import.py:269 +#: netbox/dcim/forms/bulk_import.py:735 netbox/dcim/forms/bulk_import.py:761 +#: netbox/dcim/forms/bulk_import.py:787 netbox/dcim/forms/bulk_import.py:807 +#: netbox/dcim/forms/bulk_import.py:893 netbox/dcim/forms/bulk_import.py:987 +#: netbox/dcim/forms/bulk_import.py:1029 netbox/dcim/forms/bulk_import.py:1332 +#: netbox/dcim/forms/bulk_import.py:1495 netbox/dcim/forms/filtersets.py:956 +#: netbox/dcim/forms/filtersets.py:1055 netbox/dcim/forms/filtersets.py:1176 +#: netbox/dcim/forms/filtersets.py:1248 netbox/dcim/forms/filtersets.py:1273 +#: netbox/dcim/forms/filtersets.py:1297 netbox/dcim/forms/filtersets.py:1317 +#: netbox/dcim/forms/filtersets.py:1358 netbox/dcim/forms/filtersets.py:1455 +#: netbox/dcim/forms/filtersets.py:1479 netbox/dcim/forms/model_forms.py:714 +#: netbox/dcim/forms/model_forms.py:720 netbox/dcim/forms/object_import.py:84 #: netbox/dcim/forms/object_import.py:113 -#: netbox/dcim/forms/object_import.py:145 netbox/dcim/tables/devices.py:178 -#: netbox/dcim/tables/devices.py:814 netbox/dcim/tables/power.py:77 -#: netbox/dcim/tables/racks.py:138 netbox/extras/forms/bulk_import.py:42 +#: netbox/dcim/forms/object_import.py:146 netbox/dcim/tables/devices.py:189 +#: netbox/dcim/tables/devices.py:846 netbox/dcim/tables/power.py:77 +#: netbox/dcim/tables/racks.py:137 netbox/extras/forms/bulk_import.py:42 #: netbox/extras/tables/tables.py:405 netbox/extras/tables/tables.py:465 -#: netbox/netbox/tables/tables.py:240 +#: netbox/netbox/tables/tables.py:243 #: netbox/templates/circuits/circuit.html:30 +#: netbox/templates/circuits/virtualcircuit.html:39 +#: netbox/templates/circuits/virtualcircuittermination.html:64 #: netbox/templates/core/datasource.html:38 #: netbox/templates/dcim/cable.html:15 #: netbox/templates/dcim/consoleport.html:36 #: netbox/templates/dcim/consoleserverport.html:36 #: netbox/templates/dcim/frontport.html:36 #: netbox/templates/dcim/interface.html:46 -#: netbox/templates/dcim/interface.html:169 -#: netbox/templates/dcim/interface.html:311 +#: netbox/templates/dcim/interface.html:226 +#: netbox/templates/dcim/interface.html:368 #: netbox/templates/dcim/powerfeed.html:32 #: netbox/templates/dcim/poweroutlet.html:36 #: netbox/templates/dcim/powerport.html:36 @@ -633,65 +728,78 @@ msgstr "Colore" #: netbox/templates/vpn/l2vpn.html:22 #: netbox/templates/wireless/inc/authentication_attrs.html:8 #: netbox/templates/wireless/inc/wirelesslink_interface.html:14 -#: netbox/virtualization/forms/bulk_edit.py:60 -#: netbox/virtualization/forms/bulk_import.py:41 +#: netbox/virtualization/forms/bulk_edit.py:61 +#: netbox/virtualization/forms/bulk_import.py:42 #: netbox/virtualization/forms/filtersets.py:54 -#: netbox/virtualization/forms/model_forms.py:62 +#: netbox/virtualization/forms/model_forms.py:65 #: netbox/virtualization/tables/clusters.py:66 #: netbox/vpn/forms/bulk_edit.py:264 netbox/vpn/forms/bulk_import.py:264 -#: netbox/vpn/forms/filtersets.py:217 netbox/vpn/forms/model_forms.py:84 -#: netbox/vpn/forms/model_forms.py:119 netbox/vpn/forms/model_forms.py:231 +#: netbox/vpn/forms/filtersets.py:217 netbox/vpn/forms/model_forms.py:85 +#: netbox/vpn/forms/model_forms.py:120 netbox/vpn/forms/model_forms.py:232 msgid "Type" msgstr "Tipo" -#: netbox/circuits/forms/bulk_edit.py:128 -#: netbox/circuits/forms/bulk_import.py:80 -#: netbox/circuits/forms/filtersets.py:139 -#: netbox/circuits/forms/model_forms.py:98 +#: netbox/circuits/forms/bulk_edit.py:140 +#: netbox/circuits/forms/bulk_edit.py:326 +#: netbox/circuits/forms/bulk_import.py:87 +#: netbox/circuits/forms/bulk_import.py:214 +#: netbox/circuits/forms/filtersets.py:150 +#: netbox/circuits/forms/filtersets.py:345 +#: netbox/circuits/forms/model_forms.py:116 +#: netbox/circuits/forms/model_forms.py:330 +#: netbox/templates/circuits/virtualcircuit.html:31 +#: netbox/templates/circuits/virtualcircuittermination.html:34 msgid "Provider account" msgstr "Provider account " -#: netbox/circuits/forms/bulk_edit.py:136 -#: netbox/circuits/forms/bulk_import.py:93 -#: netbox/circuits/forms/filtersets.py:150 netbox/core/forms/filtersets.py:38 -#: netbox/core/forms/filtersets.py:79 netbox/core/tables/data.py:23 +#: netbox/circuits/forms/bulk_edit.py:148 +#: netbox/circuits/forms/bulk_edit.py:336 +#: netbox/circuits/forms/bulk_import.py:100 +#: netbox/circuits/forms/bulk_import.py:227 +#: netbox/circuits/forms/filtersets.py:161 +#: netbox/circuits/forms/filtersets.py:361 netbox/core/forms/filtersets.py:38 +#: netbox/core/forms/filtersets.py:80 netbox/core/tables/data.py:23 #: netbox/core/tables/jobs.py:26 netbox/core/tables/tasks.py:88 -#: netbox/dcim/forms/bulk_edit.py:107 netbox/dcim/forms/bulk_edit.py:182 -#: netbox/dcim/forms/bulk_edit.py:352 netbox/dcim/forms/bulk_edit.py:706 -#: netbox/dcim/forms/bulk_edit.py:771 netbox/dcim/forms/bulk_edit.py:803 -#: netbox/dcim/forms/bulk_edit.py:930 netbox/dcim/forms/bulk_edit.py:1744 -#: netbox/dcim/forms/bulk_import.py:88 netbox/dcim/forms/bulk_import.py:147 -#: netbox/dcim/forms/bulk_import.py:248 netbox/dcim/forms/bulk_import.py:527 -#: netbox/dcim/forms/bulk_import.py:681 netbox/dcim/forms/bulk_import.py:1229 -#: netbox/dcim/forms/bulk_import.py:1393 netbox/dcim/forms/bulk_import.py:1457 -#: netbox/dcim/forms/filtersets.py:178 netbox/dcim/forms/filtersets.py:237 -#: netbox/dcim/forms/filtersets.py:359 netbox/dcim/forms/filtersets.py:799 -#: netbox/dcim/forms/filtersets.py:924 netbox/dcim/forms/filtersets.py:958 -#: netbox/dcim/forms/filtersets.py:1059 netbox/dcim/forms/filtersets.py:1170 -#: netbox/dcim/tables/devices.py:140 netbox/dcim/tables/devices.py:817 -#: netbox/dcim/tables/devices.py:1063 netbox/dcim/tables/modules.py:70 -#: netbox/dcim/tables/power.py:74 netbox/dcim/tables/racks.py:126 -#: netbox/dcim/tables/sites.py:82 netbox/dcim/tables/sites.py:138 -#: netbox/ipam/forms/bulk_edit.py:256 netbox/ipam/forms/bulk_edit.py:306 -#: netbox/ipam/forms/bulk_edit.py:354 netbox/ipam/forms/bulk_edit.py:506 -#: netbox/ipam/forms/bulk_import.py:192 netbox/ipam/forms/bulk_import.py:257 -#: netbox/ipam/forms/bulk_import.py:293 netbox/ipam/forms/bulk_import.py:474 -#: netbox/ipam/forms/filtersets.py:210 netbox/ipam/forms/filtersets.py:281 -#: netbox/ipam/forms/filtersets.py:355 netbox/ipam/forms/filtersets.py:501 -#: netbox/ipam/forms/model_forms.py:501 netbox/ipam/tables/ip.py:237 -#: netbox/ipam/tables/ip.py:312 netbox/ipam/tables/ip.py:363 -#: netbox/ipam/tables/ip.py:426 netbox/ipam/tables/ip.py:453 -#: netbox/ipam/tables/vlans.py:126 netbox/ipam/tables/vlans.py:232 +#: netbox/dcim/forms/bulk_edit.py:110 netbox/dcim/forms/bulk_edit.py:185 +#: netbox/dcim/forms/bulk_edit.py:355 netbox/dcim/forms/bulk_edit.py:709 +#: netbox/dcim/forms/bulk_edit.py:774 netbox/dcim/forms/bulk_edit.py:806 +#: netbox/dcim/forms/bulk_edit.py:933 netbox/dcim/forms/bulk_edit.py:1723 +#: netbox/dcim/forms/bulk_edit.py:1765 netbox/dcim/forms/bulk_import.py:90 +#: netbox/dcim/forms/bulk_import.py:149 netbox/dcim/forms/bulk_import.py:250 +#: netbox/dcim/forms/bulk_import.py:532 netbox/dcim/forms/bulk_import.py:686 +#: netbox/dcim/forms/bulk_import.py:1137 netbox/dcim/forms/bulk_import.py:1326 +#: netbox/dcim/forms/bulk_import.py:1490 netbox/dcim/forms/bulk_import.py:1554 +#: netbox/dcim/forms/filtersets.py:179 netbox/dcim/forms/filtersets.py:238 +#: netbox/dcim/forms/filtersets.py:360 netbox/dcim/forms/filtersets.py:800 +#: netbox/dcim/forms/filtersets.py:925 netbox/dcim/forms/filtersets.py:959 +#: netbox/dcim/forms/filtersets.py:1060 netbox/dcim/forms/filtersets.py:1171 +#: netbox/dcim/forms/filtersets.py:1562 netbox/dcim/tables/devices.py:151 +#: netbox/dcim/tables/devices.py:849 netbox/dcim/tables/devices.py:983 +#: netbox/dcim/tables/devices.py:1095 netbox/dcim/tables/modules.py:70 +#: netbox/dcim/tables/power.py:74 netbox/dcim/tables/racks.py:125 +#: netbox/dcim/tables/sites.py:82 netbox/dcim/tables/sites.py:137 +#: netbox/ipam/forms/bulk_edit.py:240 netbox/ipam/forms/bulk_edit.py:290 +#: netbox/ipam/forms/bulk_edit.py:338 netbox/ipam/forms/bulk_edit.py:490 +#: netbox/ipam/forms/bulk_import.py:188 netbox/ipam/forms/bulk_import.py:256 +#: netbox/ipam/forms/bulk_import.py:292 netbox/ipam/forms/bulk_import.py:473 +#: netbox/ipam/forms/filtersets.py:212 netbox/ipam/forms/filtersets.py:284 +#: netbox/ipam/forms/filtersets.py:358 netbox/ipam/forms/filtersets.py:542 +#: netbox/ipam/forms/model_forms.py:511 netbox/ipam/tables/ip.py:183 +#: netbox/ipam/tables/ip.py:264 netbox/ipam/tables/ip.py:315 +#: netbox/ipam/tables/ip.py:378 netbox/ipam/tables/ip.py:405 +#: netbox/ipam/tables/vlans.py:95 netbox/ipam/tables/vlans.py:208 #: netbox/templates/circuits/circuit.html:34 +#: netbox/templates/circuits/virtualcircuit.html:43 #: netbox/templates/core/datasource.html:46 netbox/templates/core/job.html:48 #: netbox/templates/core/rq_task.html:81 netbox/templates/core/system.html:18 #: netbox/templates/dcim/cable.html:19 netbox/templates/dcim/device.html:178 +#: netbox/templates/dcim/inventoryitem.html:36 #: netbox/templates/dcim/location.html:45 netbox/templates/dcim/module.html:69 #: netbox/templates/dcim/powerfeed.html:36 netbox/templates/dcim/rack.html:41 #: netbox/templates/dcim/site.html:43 #: netbox/templates/extras/script_list.html:48 #: netbox/templates/ipam/ipaddress.html:37 -#: netbox/templates/ipam/iprange.html:54 netbox/templates/ipam/prefix.html:73 +#: netbox/templates/ipam/iprange.html:54 netbox/templates/ipam/prefix.html:69 #: netbox/templates/ipam/vlan.html:48 #: netbox/templates/virtualization/cluster.html:21 #: netbox/templates/virtualization/virtualmachine.html:19 @@ -699,63 +807,67 @@ msgstr "Provider account " #: netbox/templates/wireless/wirelesslan.html:22 #: netbox/templates/wireless/wirelesslink.html:17 #: netbox/users/forms/filtersets.py:32 netbox/users/forms/model_forms.py:194 -#: netbox/virtualization/forms/bulk_edit.py:70 -#: netbox/virtualization/forms/bulk_edit.py:118 -#: netbox/virtualization/forms/bulk_import.py:54 -#: netbox/virtualization/forms/bulk_import.py:80 -#: netbox/virtualization/forms/filtersets.py:62 -#: netbox/virtualization/forms/filtersets.py:160 +#: netbox/virtualization/forms/bulk_edit.py:71 +#: netbox/virtualization/forms/bulk_edit.py:100 +#: netbox/virtualization/forms/bulk_import.py:55 +#: netbox/virtualization/forms/bulk_import.py:86 +#: netbox/virtualization/forms/filtersets.py:82 +#: netbox/virtualization/forms/filtersets.py:165 #: netbox/virtualization/tables/clusters.py:74 -#: netbox/virtualization/tables/virtualmachines.py:60 +#: netbox/virtualization/tables/virtualmachines.py:30 #: netbox/vpn/forms/bulk_edit.py:39 netbox/vpn/forms/bulk_import.py:37 #: netbox/vpn/forms/filtersets.py:47 netbox/vpn/tables/tunnels.py:48 -#: netbox/wireless/forms/bulk_edit.py:43 -#: netbox/wireless/forms/bulk_edit.py:105 -#: netbox/wireless/forms/bulk_import.py:43 -#: netbox/wireless/forms/bulk_import.py:84 -#: netbox/wireless/forms/filtersets.py:49 -#: netbox/wireless/forms/filtersets.py:83 +#: netbox/wireless/forms/bulk_edit.py:45 +#: netbox/wireless/forms/bulk_edit.py:108 +#: netbox/wireless/forms/bulk_import.py:45 +#: netbox/wireless/forms/bulk_import.py:89 +#: netbox/wireless/forms/filtersets.py:52 +#: netbox/wireless/forms/filtersets.py:111 #: netbox/wireless/tables/wirelesslan.py:52 -#: netbox/wireless/tables/wirelesslink.py:20 +#: netbox/wireless/tables/wirelesslink.py:19 msgid "Status" msgstr "Status" -#: netbox/circuits/forms/bulk_edit.py:142 -#: netbox/circuits/forms/bulk_edit.py:233 -#: netbox/circuits/forms/bulk_import.py:98 -#: netbox/circuits/forms/bulk_import.py:158 -#: netbox/circuits/forms/filtersets.py:119 -#: netbox/circuits/forms/filtersets.py:241 netbox/dcim/forms/bulk_edit.py:123 -#: netbox/dcim/forms/bulk_edit.py:188 netbox/dcim/forms/bulk_edit.py:347 -#: netbox/dcim/forms/bulk_edit.py:467 netbox/dcim/forms/bulk_edit.py:696 -#: netbox/dcim/forms/bulk_edit.py:809 netbox/dcim/forms/bulk_edit.py:1749 -#: netbox/dcim/forms/bulk_import.py:107 netbox/dcim/forms/bulk_import.py:152 -#: netbox/dcim/forms/bulk_import.py:241 netbox/dcim/forms/bulk_import.py:356 -#: netbox/dcim/forms/bulk_import.py:501 netbox/dcim/forms/bulk_import.py:1241 -#: netbox/dcim/forms/bulk_import.py:1450 netbox/dcim/forms/filtersets.py:173 -#: netbox/dcim/forms/filtersets.py:205 netbox/dcim/forms/filtersets.py:323 -#: netbox/dcim/forms/filtersets.py:399 netbox/dcim/forms/filtersets.py:420 -#: netbox/dcim/forms/filtersets.py:722 netbox/dcim/forms/filtersets.py:916 -#: netbox/dcim/forms/filtersets.py:978 netbox/dcim/forms/filtersets.py:1008 -#: netbox/dcim/forms/filtersets.py:1130 netbox/dcim/tables/power.py:88 -#: netbox/extras/filtersets.py:612 netbox/extras/forms/filtersets.py:323 -#: netbox/extras/forms/filtersets.py:396 netbox/ipam/forms/bulk_edit.py:43 -#: netbox/ipam/forms/bulk_edit.py:68 netbox/ipam/forms/bulk_edit.py:112 -#: netbox/ipam/forms/bulk_edit.py:141 netbox/ipam/forms/bulk_edit.py:166 -#: netbox/ipam/forms/bulk_edit.py:251 netbox/ipam/forms/bulk_edit.py:301 -#: netbox/ipam/forms/bulk_edit.py:349 netbox/ipam/forms/bulk_edit.py:501 -#: netbox/ipam/forms/bulk_import.py:38 netbox/ipam/forms/bulk_import.py:67 -#: netbox/ipam/forms/bulk_import.py:95 netbox/ipam/forms/bulk_import.py:115 -#: netbox/ipam/forms/bulk_import.py:135 netbox/ipam/forms/bulk_import.py:164 -#: netbox/ipam/forms/bulk_import.py:250 netbox/ipam/forms/bulk_import.py:286 -#: netbox/ipam/forms/bulk_import.py:467 netbox/ipam/forms/filtersets.py:48 -#: netbox/ipam/forms/filtersets.py:68 netbox/ipam/forms/filtersets.py:100 -#: netbox/ipam/forms/filtersets.py:120 netbox/ipam/forms/filtersets.py:143 -#: netbox/ipam/forms/filtersets.py:174 netbox/ipam/forms/filtersets.py:267 -#: netbox/ipam/forms/filtersets.py:310 netbox/ipam/forms/filtersets.py:469 -#: netbox/ipam/tables/ip.py:456 netbox/ipam/tables/vlans.py:229 -#: netbox/templates/circuits/circuit.html:38 +#: netbox/circuits/forms/bulk_edit.py:154 +#: netbox/circuits/forms/bulk_edit.py:271 +#: netbox/circuits/forms/bulk_edit.py:342 +#: netbox/circuits/forms/bulk_import.py:111 +#: netbox/circuits/forms/bulk_import.py:170 +#: netbox/circuits/forms/bulk_import.py:232 +#: netbox/circuits/forms/filtersets.py:130 +#: netbox/circuits/forms/filtersets.py:277 +#: netbox/circuits/forms/filtersets.py:331 netbox/dcim/forms/bulk_edit.py:126 +#: netbox/dcim/forms/bulk_edit.py:191 netbox/dcim/forms/bulk_edit.py:350 +#: netbox/dcim/forms/bulk_edit.py:470 netbox/dcim/forms/bulk_edit.py:699 +#: netbox/dcim/forms/bulk_edit.py:812 netbox/dcim/forms/bulk_edit.py:1770 +#: netbox/dcim/forms/bulk_import.py:109 netbox/dcim/forms/bulk_import.py:154 +#: netbox/dcim/forms/bulk_import.py:243 netbox/dcim/forms/bulk_import.py:358 +#: netbox/dcim/forms/bulk_import.py:506 netbox/dcim/forms/bulk_import.py:1338 +#: netbox/dcim/forms/bulk_import.py:1547 netbox/dcim/forms/filtersets.py:174 +#: netbox/dcim/forms/filtersets.py:206 netbox/dcim/forms/filtersets.py:324 +#: netbox/dcim/forms/filtersets.py:400 netbox/dcim/forms/filtersets.py:421 +#: netbox/dcim/forms/filtersets.py:723 netbox/dcim/forms/filtersets.py:917 +#: netbox/dcim/forms/filtersets.py:979 netbox/dcim/forms/filtersets.py:1009 +#: netbox/dcim/forms/filtersets.py:1131 netbox/dcim/tables/power.py:88 +#: netbox/extras/filtersets.py:612 netbox/extras/forms/filtersets.py:330 +#: netbox/extras/forms/filtersets.py:403 netbox/ipam/forms/bulk_edit.py:46 +#: netbox/ipam/forms/bulk_edit.py:71 netbox/ipam/forms/bulk_edit.py:115 +#: netbox/ipam/forms/bulk_edit.py:144 netbox/ipam/forms/bulk_edit.py:169 +#: netbox/ipam/forms/bulk_edit.py:235 netbox/ipam/forms/bulk_edit.py:285 +#: netbox/ipam/forms/bulk_edit.py:333 netbox/ipam/forms/bulk_edit.py:485 +#: netbox/ipam/forms/bulk_import.py:41 netbox/ipam/forms/bulk_import.py:70 +#: netbox/ipam/forms/bulk_import.py:98 netbox/ipam/forms/bulk_import.py:118 +#: netbox/ipam/forms/bulk_import.py:138 netbox/ipam/forms/bulk_import.py:167 +#: netbox/ipam/forms/bulk_import.py:249 netbox/ipam/forms/bulk_import.py:285 +#: netbox/ipam/forms/bulk_import.py:466 netbox/ipam/forms/filtersets.py:50 +#: netbox/ipam/forms/filtersets.py:70 netbox/ipam/forms/filtersets.py:102 +#: netbox/ipam/forms/filtersets.py:122 netbox/ipam/forms/filtersets.py:145 +#: netbox/ipam/forms/filtersets.py:176 netbox/ipam/forms/filtersets.py:270 +#: netbox/ipam/forms/filtersets.py:313 netbox/ipam/forms/filtersets.py:510 +#: netbox/ipam/tables/ip.py:408 netbox/ipam/tables/vlans.py:205 +#: netbox/templates/circuits/circuit.html:48 #: netbox/templates/circuits/circuitgroup.html:36 +#: netbox/templates/circuits/virtualcircuit.html:47 #: netbox/templates/dcim/cable.html:23 netbox/templates/dcim/device.html:79 #: netbox/templates/dcim/location.html:49 #: netbox/templates/dcim/powerfeed.html:44 netbox/templates/dcim/rack.html:32 @@ -772,114 +884,181 @@ msgstr "Status" #: netbox/templates/virtualization/cluster.html:33 #: netbox/templates/virtualization/virtualmachine.html:39 #: netbox/templates/vpn/l2vpn.html:30 netbox/templates/vpn/tunnel.html:49 -#: netbox/templates/wireless/wirelesslan.html:34 +#: netbox/templates/wireless/wirelesslan.html:42 #: netbox/templates/wireless/wirelesslink.html:25 -#: netbox/tenancy/forms/forms.py:25 netbox/tenancy/forms/forms.py:48 -#: netbox/tenancy/forms/model_forms.py:52 netbox/tenancy/tables/columns.py:64 -#: netbox/virtualization/forms/bulk_edit.py:76 -#: netbox/virtualization/forms/bulk_edit.py:155 -#: netbox/virtualization/forms/bulk_import.py:66 -#: netbox/virtualization/forms/bulk_import.py:115 +#: netbox/tenancy/forms/forms.py:25 netbox/tenancy/forms/forms.py:49 +#: netbox/tenancy/forms/model_forms.py:52 netbox/tenancy/tables/columns.py:49 +#: netbox/virtualization/forms/bulk_edit.py:77 +#: netbox/virtualization/forms/bulk_edit.py:137 +#: netbox/virtualization/forms/bulk_import.py:67 +#: netbox/virtualization/forms/bulk_import.py:121 #: netbox/virtualization/forms/filtersets.py:47 -#: netbox/virtualization/forms/filtersets.py:105 +#: netbox/virtualization/forms/filtersets.py:110 #: netbox/vpn/forms/bulk_edit.py:59 netbox/vpn/forms/bulk_edit.py:269 #: netbox/vpn/forms/bulk_import.py:59 netbox/vpn/forms/bulk_import.py:258 -#: netbox/vpn/forms/filtersets.py:214 netbox/wireless/forms/bulk_edit.py:63 -#: netbox/wireless/forms/bulk_edit.py:110 -#: netbox/wireless/forms/bulk_import.py:55 -#: netbox/wireless/forms/bulk_import.py:97 -#: netbox/wireless/forms/filtersets.py:35 -#: netbox/wireless/forms/filtersets.py:75 +#: netbox/vpn/forms/filtersets.py:214 netbox/wireless/forms/bulk_edit.py:65 +#: netbox/wireless/forms/bulk_edit.py:113 +#: netbox/wireless/forms/bulk_import.py:57 +#: netbox/wireless/forms/bulk_import.py:102 +#: netbox/wireless/forms/filtersets.py:38 +#: netbox/wireless/forms/filtersets.py:103 msgid "Tenant" msgstr "Tenant" -#: netbox/circuits/forms/bulk_edit.py:147 -#: netbox/circuits/forms/filtersets.py:174 +#: netbox/circuits/forms/bulk_edit.py:159 +#: netbox/circuits/forms/filtersets.py:190 msgid "Install date" msgstr "Data di installazione" -#: netbox/circuits/forms/bulk_edit.py:152 -#: netbox/circuits/forms/filtersets.py:179 +#: netbox/circuits/forms/bulk_edit.py:164 +#: netbox/circuits/forms/filtersets.py:195 msgid "Termination date" msgstr "Data di dismissione" -#: netbox/circuits/forms/bulk_edit.py:158 -#: netbox/circuits/forms/filtersets.py:186 +#: netbox/circuits/forms/bulk_edit.py:170 +#: netbox/circuits/forms/filtersets.py:202 msgid "Commit rate (Kbps)" msgstr "Commit ratet (Kbps)" -#: netbox/circuits/forms/bulk_edit.py:173 -#: netbox/circuits/forms/model_forms.py:112 +#: netbox/circuits/forms/bulk_edit.py:176 +#: netbox/circuits/forms/filtersets.py:208 +#: netbox/circuits/forms/model_forms.py:136 +#: netbox/templates/circuits/circuit.html:38 +#: netbox/templates/wireless/wirelesslink.html:38 +#: netbox/wireless/forms/bulk_edit.py:132 +#: netbox/wireless/forms/filtersets.py:130 +#: netbox/wireless/forms/model_forms.py:168 +msgid "Distance" +msgstr "Distanza" + +#: netbox/circuits/forms/bulk_edit.py:181 +#: netbox/circuits/forms/bulk_import.py:105 +#: netbox/circuits/forms/bulk_import.py:108 +#: netbox/circuits/forms/filtersets.py:212 +#: netbox/wireless/forms/bulk_edit.py:137 +#: netbox/wireless/forms/bulk_import.py:121 +#: netbox/wireless/forms/bulk_import.py:124 +#: netbox/wireless/forms/filtersets.py:134 +msgid "Distance unit" +msgstr "Unità di distanza" + +#: netbox/circuits/forms/bulk_edit.py:196 +#: netbox/circuits/forms/model_forms.py:141 msgid "Service Parameters" msgstr "Parametri del servizio" -#: netbox/circuits/forms/bulk_edit.py:174 -#: netbox/circuits/forms/model_forms.py:113 -#: netbox/circuits/forms/model_forms.py:183 -#: netbox/dcim/forms/model_forms.py:139 netbox/dcim/forms/model_forms.py:181 -#: netbox/dcim/forms/model_forms.py:266 netbox/dcim/forms/model_forms.py:323 -#: netbox/dcim/forms/model_forms.py:768 netbox/dcim/forms/model_forms.py:1699 -#: netbox/ipam/forms/model_forms.py:64 netbox/ipam/forms/model_forms.py:81 -#: netbox/ipam/forms/model_forms.py:115 netbox/ipam/forms/model_forms.py:136 -#: netbox/ipam/forms/model_forms.py:160 netbox/ipam/forms/model_forms.py:232 -#: netbox/ipam/forms/model_forms.py:261 netbox/ipam/forms/model_forms.py:320 +#: netbox/circuits/forms/bulk_edit.py:197 +#: netbox/circuits/forms/filtersets.py:73 +#: netbox/circuits/forms/filtersets.py:91 +#: netbox/circuits/forms/filtersets.py:110 +#: netbox/circuits/forms/filtersets.py:127 +#: netbox/circuits/forms/filtersets.py:315 +#: netbox/circuits/forms/filtersets.py:330 netbox/core/forms/filtersets.py:68 +#: netbox/core/forms/filtersets.py:136 netbox/dcim/forms/bulk_edit.py:846 +#: netbox/dcim/forms/filtersets.py:173 netbox/dcim/forms/filtersets.py:205 +#: netbox/dcim/forms/filtersets.py:916 netbox/dcim/forms/filtersets.py:1008 +#: netbox/dcim/forms/filtersets.py:1132 netbox/dcim/forms/filtersets.py:1240 +#: netbox/dcim/forms/filtersets.py:1264 netbox/dcim/forms/filtersets.py:1289 +#: netbox/dcim/forms/filtersets.py:1308 netbox/dcim/forms/filtersets.py:1332 +#: netbox/dcim/forms/filtersets.py:1446 netbox/dcim/forms/filtersets.py:1470 +#: netbox/dcim/forms/filtersets.py:1494 netbox/dcim/forms/filtersets.py:1512 +#: netbox/dcim/forms/filtersets.py:1528 netbox/extras/forms/bulk_edit.py:90 +#: netbox/extras/forms/filtersets.py:45 netbox/extras/forms/filtersets.py:137 +#: netbox/extras/forms/filtersets.py:169 netbox/extras/forms/filtersets.py:210 +#: netbox/extras/forms/filtersets.py:227 netbox/extras/forms/filtersets.py:258 +#: netbox/extras/forms/filtersets.py:282 netbox/extras/forms/filtersets.py:449 +#: netbox/ipam/forms/filtersets.py:101 netbox/ipam/forms/filtersets.py:269 +#: netbox/ipam/forms/filtersets.py:310 netbox/ipam/forms/filtersets.py:385 +#: netbox/ipam/forms/filtersets.py:470 netbox/ipam/forms/filtersets.py:483 +#: netbox/ipam/forms/filtersets.py:508 netbox/ipam/forms/filtersets.py:579 +#: netbox/ipam/forms/filtersets.py:597 netbox/netbox/tables/tables.py:259 +#: netbox/virtualization/forms/filtersets.py:45 +#: netbox/virtualization/forms/filtersets.py:108 +#: netbox/virtualization/forms/filtersets.py:203 +#: netbox/virtualization/forms/filtersets.py:248 +#: netbox/vpn/forms/filtersets.py:213 netbox/wireless/forms/bulk_edit.py:153 +#: netbox/wireless/forms/filtersets.py:36 +#: netbox/wireless/forms/filtersets.py:102 +msgid "Attributes" +msgstr "Attributi" + +#: netbox/circuits/forms/bulk_edit.py:198 +#: netbox/circuits/forms/bulk_edit.py:356 +#: netbox/circuits/forms/model_forms.py:142 +#: netbox/circuits/forms/model_forms.py:240 +#: netbox/circuits/forms/model_forms.py:345 +#: netbox/dcim/forms/model_forms.py:143 netbox/dcim/forms/model_forms.py:185 +#: netbox/dcim/forms/model_forms.py:274 netbox/dcim/forms/model_forms.py:331 +#: netbox/dcim/forms/model_forms.py:780 netbox/dcim/forms/model_forms.py:1744 +#: netbox/ipam/forms/model_forms.py:67 netbox/ipam/forms/model_forms.py:84 +#: netbox/ipam/forms/model_forms.py:119 netbox/ipam/forms/model_forms.py:141 +#: netbox/ipam/forms/model_forms.py:166 netbox/ipam/forms/model_forms.py:233 +#: netbox/ipam/forms/model_forms.py:271 netbox/ipam/forms/model_forms.py:330 #: netbox/netbox/navigation/menu.py:24 #: netbox/templates/dcim/device_edit.html:85 #: netbox/templates/dcim/htmx/cable_edit.html:72 #: netbox/templates/ipam/ipaddress_bulk_add.html:27 -#: netbox/templates/ipam/vlan_edit.html:22 +#: netbox/templates/ipam/vlan_edit.html:30 #: netbox/virtualization/forms/model_forms.py:80 -#: netbox/virtualization/forms/model_forms.py:222 +#: netbox/virtualization/forms/model_forms.py:229 #: netbox/vpn/forms/bulk_edit.py:78 netbox/vpn/forms/filtersets.py:44 -#: netbox/vpn/forms/model_forms.py:62 netbox/vpn/forms/model_forms.py:147 -#: netbox/vpn/forms/model_forms.py:411 netbox/wireless/forms/model_forms.py:54 -#: netbox/wireless/forms/model_forms.py:170 +#: netbox/vpn/forms/model_forms.py:63 netbox/vpn/forms/model_forms.py:148 +#: netbox/vpn/forms/model_forms.py:414 netbox/wireless/forms/model_forms.py:57 +#: netbox/wireless/forms/model_forms.py:173 msgid "Tenancy" msgstr "Tenancy" -#: netbox/circuits/forms/bulk_edit.py:193 -#: netbox/circuits/forms/bulk_edit.py:217 -#: netbox/circuits/forms/model_forms.py:155 -#: netbox/circuits/tables/circuits.py:117 -#: netbox/templates/circuits/inc/circuit_termination_fields.html:62 -#: netbox/templates/circuits/providernetwork.html:17 -msgid "Provider Network" -msgstr "Provider Network" +#: netbox/circuits/forms/bulk_edit.py:215 +#: netbox/circuits/forms/model_forms.py:170 +#: netbox/dcim/forms/bulk_import.py:1299 netbox/dcim/forms/bulk_import.py:1317 +msgid "Termination type" +msgstr "Tipo di terminazione" -#: netbox/circuits/forms/bulk_edit.py:199 +#: netbox/circuits/forms/bulk_edit.py:218 +#: netbox/circuits/forms/bulk_import.py:133 +#: netbox/circuits/forms/filtersets.py:225 +#: netbox/circuits/forms/model_forms.py:173 +#: netbox/templates/circuits/inc/circuit_termination.html:6 +#: netbox/templates/dcim/cable.html:68 netbox/templates/dcim/cable.html:72 +#: netbox/vpn/forms/bulk_import.py:100 netbox/vpn/forms/filtersets.py:77 +msgid "Termination" +msgstr "Cessazione" + +#: netbox/circuits/forms/bulk_edit.py:226 msgid "Port speed (Kbps)" msgstr "Port speed (Kbps)" -#: netbox/circuits/forms/bulk_edit.py:203 +#: netbox/circuits/forms/bulk_edit.py:230 msgid "Upstream speed (Kbps)" msgstr "Upstream speed (Kbps)" -#: netbox/circuits/forms/bulk_edit.py:206 netbox/dcim/forms/bulk_edit.py:966 -#: netbox/dcim/forms/bulk_edit.py:1330 netbox/dcim/forms/bulk_edit.py:1347 -#: netbox/dcim/forms/bulk_edit.py:1364 netbox/dcim/forms/bulk_edit.py:1382 -#: netbox/dcim/forms/bulk_edit.py:1477 netbox/dcim/forms/bulk_edit.py:1637 -#: netbox/dcim/forms/bulk_edit.py:1654 +#: netbox/circuits/forms/bulk_edit.py:233 netbox/dcim/forms/bulk_edit.py:969 +#: netbox/dcim/forms/bulk_edit.py:1333 netbox/dcim/forms/bulk_edit.py:1350 +#: netbox/dcim/forms/bulk_edit.py:1367 netbox/dcim/forms/bulk_edit.py:1385 +#: netbox/dcim/forms/bulk_edit.py:1480 netbox/dcim/forms/bulk_edit.py:1652 +#: netbox/dcim/forms/bulk_edit.py:1669 msgid "Mark connected" msgstr "Segna connesso" -#: netbox/circuits/forms/bulk_edit.py:219 -#: netbox/circuits/forms/model_forms.py:157 -#: netbox/templates/circuits/inc/circuit_termination_fields.html:54 +#: netbox/circuits/forms/bulk_edit.py:243 +#: netbox/circuits/forms/model_forms.py:184 +#: netbox/templates/circuits/inc/circuit_termination_fields.html:55 #: netbox/templates/dcim/frontport.html:121 -#: netbox/templates/dcim/interface.html:193 +#: netbox/templates/dcim/interface.html:250 #: netbox/templates/dcim/rearport.html:111 msgid "Circuit Termination" msgstr "Terminazione del circuito" -#: netbox/circuits/forms/bulk_edit.py:221 -#: netbox/circuits/forms/model_forms.py:159 +#: netbox/circuits/forms/bulk_edit.py:245 +#: netbox/circuits/forms/model_forms.py:186 msgid "Termination Details" msgstr "Dettagli sulla cessazione" -#: netbox/circuits/forms/bulk_edit.py:251 -#: netbox/circuits/forms/filtersets.py:268 -#: netbox/circuits/tables/circuits.py:168 netbox/dcim/forms/model_forms.py:551 -#: netbox/templates/circuits/circuitgroupassignment.html:30 +#: netbox/circuits/forms/bulk_edit.py:289 +#: netbox/circuits/forms/bulk_import.py:188 +#: netbox/circuits/forms/filtersets.py:304 +#: netbox/circuits/tables/circuits.py:207 netbox/dcim/forms/model_forms.py:562 +#: netbox/templates/circuits/circuitgroupassignment.html:34 #: netbox/templates/dcim/device.html:133 #: netbox/templates/dcim/virtualchassis.html:68 #: netbox/templates/dcim/virtualchassis_edit.html:56 @@ -889,227 +1068,313 @@ msgstr "Dettagli sulla cessazione" msgid "Priority" msgstr "Priorità" -#: netbox/circuits/forms/bulk_import.py:39 -#: netbox/circuits/forms/bulk_import.py:54 -#: netbox/circuits/forms/bulk_import.py:77 -msgid "Assigned provider" -msgstr "Provider assegnato" - -#: netbox/circuits/forms/bulk_import.py:83 -msgid "Assigned provider account" -msgstr "Account provider assegnato" - -#: netbox/circuits/forms/bulk_import.py:90 -msgid "Type of circuit" -msgstr "Tipo di circuito" - -#: netbox/circuits/forms/bulk_import.py:95 netbox/dcim/forms/bulk_import.py:90 -#: netbox/dcim/forms/bulk_import.py:149 netbox/dcim/forms/bulk_import.py:250 -#: netbox/dcim/forms/bulk_import.py:529 netbox/dcim/forms/bulk_import.py:683 -#: netbox/dcim/forms/bulk_import.py:1395 netbox/ipam/forms/bulk_import.py:194 -#: netbox/ipam/forms/bulk_import.py:259 netbox/ipam/forms/bulk_import.py:295 -#: netbox/ipam/forms/bulk_import.py:476 -#: netbox/virtualization/forms/bulk_import.py:56 -#: netbox/virtualization/forms/bulk_import.py:82 -#: netbox/vpn/forms/bulk_import.py:39 netbox/wireless/forms/bulk_import.py:45 -msgid "Operational status" -msgstr "Stato operativo" - -#: netbox/circuits/forms/bulk_import.py:102 -#: netbox/circuits/forms/bulk_import.py:162 -#: netbox/dcim/forms/bulk_import.py:111 netbox/dcim/forms/bulk_import.py:156 -#: netbox/dcim/forms/bulk_import.py:360 netbox/dcim/forms/bulk_import.py:505 -#: netbox/dcim/forms/bulk_import.py:1245 netbox/dcim/forms/bulk_import.py:1390 -#: netbox/dcim/forms/bulk_import.py:1454 netbox/ipam/forms/bulk_import.py:42 -#: netbox/ipam/forms/bulk_import.py:71 netbox/ipam/forms/bulk_import.py:99 -#: netbox/ipam/forms/bulk_import.py:119 netbox/ipam/forms/bulk_import.py:139 -#: netbox/ipam/forms/bulk_import.py:168 netbox/ipam/forms/bulk_import.py:254 -#: netbox/ipam/forms/bulk_import.py:290 netbox/ipam/forms/bulk_import.py:471 -#: netbox/virtualization/forms/bulk_import.py:70 -#: netbox/virtualization/forms/bulk_import.py:119 -#: netbox/vpn/forms/bulk_import.py:63 netbox/wireless/forms/bulk_import.py:59 -#: netbox/wireless/forms/bulk_import.py:101 -msgid "Assigned tenant" -msgstr "Tenant assegnato" - -#: netbox/circuits/forms/bulk_import.py:120 -#: netbox/templates/circuits/inc/circuit_termination.html:6 -#: netbox/templates/circuits/inc/circuit_termination_fields.html:15 -#: netbox/templates/dcim/cable.html:68 netbox/templates/dcim/cable.html:72 -#: netbox/vpn/forms/bulk_import.py:100 netbox/vpn/forms/filtersets.py:77 -msgid "Termination" -msgstr "Cessazione" - -#: netbox/circuits/forms/bulk_import.py:130 -#: netbox/circuits/forms/filtersets.py:147 -#: netbox/circuits/forms/filtersets.py:227 -#: netbox/circuits/forms/model_forms.py:144 +#: netbox/circuits/forms/bulk_edit.py:321 +#: netbox/circuits/forms/bulk_import.py:208 +#: netbox/circuits/forms/filtersets.py:158 +#: netbox/circuits/forms/filtersets.py:263 +#: netbox/circuits/forms/filtersets.py:353 +#: netbox/circuits/forms/filtersets.py:391 +#: netbox/circuits/forms/model_forms.py:325 +#: netbox/circuits/tables/virtual_circuits.py:51 +#: netbox/circuits/tables/virtual_circuits.py:99 msgid "Provider network" msgstr "Provider network" -#: netbox/circuits/forms/filtersets.py:30 -#: netbox/circuits/forms/filtersets.py:118 -#: netbox/circuits/forms/filtersets.py:200 netbox/dcim/forms/bulk_edit.py:339 -#: netbox/dcim/forms/bulk_edit.py:447 netbox/dcim/forms/bulk_edit.py:688 -#: netbox/dcim/forms/bulk_edit.py:743 netbox/dcim/forms/bulk_edit.py:897 -#: netbox/dcim/forms/bulk_import.py:235 netbox/dcim/forms/bulk_import.py:337 -#: netbox/dcim/forms/bulk_import.py:568 netbox/dcim/forms/bulk_import.py:1339 -#: netbox/dcim/forms/bulk_import.py:1373 netbox/dcim/forms/filtersets.py:95 -#: netbox/dcim/forms/filtersets.py:322 netbox/dcim/forms/filtersets.py:356 -#: netbox/dcim/forms/filtersets.py:396 netbox/dcim/forms/filtersets.py:447 -#: netbox/dcim/forms/filtersets.py:719 netbox/dcim/forms/filtersets.py:762 -#: netbox/dcim/forms/filtersets.py:977 netbox/dcim/forms/filtersets.py:1006 -#: netbox/dcim/forms/filtersets.py:1026 netbox/dcim/forms/filtersets.py:1090 -#: netbox/dcim/forms/filtersets.py:1120 netbox/dcim/forms/filtersets.py:1129 -#: netbox/dcim/forms/filtersets.py:1240 netbox/dcim/forms/filtersets.py:1264 -#: netbox/dcim/forms/filtersets.py:1289 netbox/dcim/forms/filtersets.py:1308 -#: netbox/dcim/forms/filtersets.py:1331 netbox/dcim/forms/filtersets.py:1442 -#: netbox/dcim/forms/filtersets.py:1466 netbox/dcim/forms/filtersets.py:1490 -#: netbox/dcim/forms/filtersets.py:1508 netbox/dcim/forms/filtersets.py:1525 -#: netbox/dcim/forms/model_forms.py:180 netbox/dcim/forms/model_forms.py:243 -#: netbox/dcim/forms/model_forms.py:468 netbox/dcim/forms/model_forms.py:728 -#: netbox/dcim/tables/devices.py:157 netbox/dcim/tables/power.py:30 -#: netbox/dcim/tables/racks.py:118 netbox/dcim/tables/racks.py:212 -#: netbox/extras/filtersets.py:536 netbox/extras/forms/filtersets.py:320 -#: netbox/ipam/forms/filtersets.py:173 netbox/ipam/forms/filtersets.py:414 -#: netbox/ipam/forms/filtersets.py:437 netbox/ipam/forms/filtersets.py:467 +#: netbox/circuits/forms/bulk_edit.py:365 +#: netbox/circuits/forms/bulk_import.py:254 +#: netbox/circuits/forms/filtersets.py:381 +#: netbox/circuits/forms/model_forms.py:365 netbox/dcim/forms/bulk_edit.py:361 +#: netbox/dcim/forms/bulk_edit.py:1280 netbox/dcim/forms/bulk_edit.py:1713 +#: netbox/dcim/forms/bulk_import.py:255 netbox/dcim/forms/bulk_import.py:1106 +#: netbox/dcim/forms/filtersets.py:368 netbox/dcim/forms/filtersets.py:778 +#: netbox/dcim/forms/filtersets.py:1539 netbox/dcim/forms/model_forms.py:256 +#: netbox/dcim/forms/model_forms.py:1090 netbox/dcim/forms/model_forms.py:1559 +#: netbox/dcim/forms/object_import.py:182 netbox/dcim/tables/devices.py:180 +#: netbox/dcim/tables/devices.py:841 netbox/dcim/tables/devices.py:967 +#: netbox/dcim/tables/devicetypes.py:311 netbox/dcim/tables/racks.py:128 +#: netbox/extras/filtersets.py:552 netbox/ipam/forms/bulk_edit.py:245 +#: netbox/ipam/forms/bulk_edit.py:295 netbox/ipam/forms/bulk_edit.py:343 +#: netbox/ipam/forms/bulk_edit.py:495 netbox/ipam/forms/bulk_import.py:193 +#: netbox/ipam/forms/bulk_import.py:261 netbox/ipam/forms/bulk_import.py:297 +#: netbox/ipam/forms/bulk_import.py:478 netbox/ipam/forms/filtersets.py:240 +#: netbox/ipam/forms/filtersets.py:292 netbox/ipam/forms/filtersets.py:363 +#: netbox/ipam/forms/filtersets.py:550 netbox/ipam/forms/model_forms.py:194 +#: netbox/ipam/forms/model_forms.py:220 netbox/ipam/forms/model_forms.py:259 +#: netbox/ipam/forms/model_forms.py:686 netbox/ipam/tables/ip.py:209 +#: netbox/ipam/tables/ip.py:268 netbox/ipam/tables/ip.py:319 +#: netbox/ipam/tables/vlans.py:99 netbox/ipam/tables/vlans.py:211 +#: netbox/templates/circuits/virtualcircuittermination.html:42 +#: netbox/templates/dcim/device.html:182 +#: netbox/templates/dcim/inc/panels/inventory_items.html:20 +#: netbox/templates/dcim/interface.html:178 +#: netbox/templates/dcim/interface.html:280 +#: netbox/templates/dcim/inventoryitem.html:40 +#: netbox/templates/dcim/rack.html:49 netbox/templates/ipam/ipaddress.html:41 +#: netbox/templates/ipam/iprange.html:50 netbox/templates/ipam/prefix.html:73 +#: netbox/templates/ipam/role.html:19 netbox/templates/ipam/vlan.html:52 +#: netbox/templates/virtualization/virtualmachine.html:23 +#: netbox/templates/vpn/tunneltermination.html:17 +#: netbox/templates/wireless/inc/wirelesslink_interface.html:20 +#: netbox/tenancy/forms/bulk_edit.py:142 +#: netbox/tenancy/forms/filtersets.py:107 +#: netbox/tenancy/forms/model_forms.py:137 +#: netbox/tenancy/tables/contacts.py:102 +#: netbox/virtualization/forms/bulk_edit.py:127 +#: netbox/virtualization/forms/bulk_import.py:112 +#: netbox/virtualization/forms/filtersets.py:162 +#: netbox/virtualization/forms/model_forms.py:202 +#: netbox/virtualization/tables/virtualmachines.py:45 +#: netbox/vpn/forms/bulk_edit.py:87 netbox/vpn/forms/bulk_import.py:81 +#: netbox/vpn/forms/filtersets.py:85 netbox/vpn/forms/model_forms.py:79 +#: netbox/vpn/forms/model_forms.py:114 netbox/vpn/tables/tunnels.py:82 +msgid "Role" +msgstr "Ruolo" + +#: netbox/circuits/forms/bulk_import.py:46 +#: netbox/circuits/forms/bulk_import.py:61 +#: netbox/circuits/forms/bulk_import.py:84 +msgid "Assigned provider" +msgstr "Provider assegnato" + +#: netbox/circuits/forms/bulk_import.py:90 +msgid "Assigned provider account" +msgstr "Account provider assegnato" + +#: netbox/circuits/forms/bulk_import.py:97 +msgid "Type of circuit" +msgstr "Tipo di circuito" + +#: netbox/circuits/forms/bulk_import.py:102 +#: netbox/circuits/forms/bulk_import.py:229 +#: netbox/dcim/forms/bulk_import.py:92 netbox/dcim/forms/bulk_import.py:151 +#: netbox/dcim/forms/bulk_import.py:252 netbox/dcim/forms/bulk_import.py:534 +#: netbox/dcim/forms/bulk_import.py:688 netbox/dcim/forms/bulk_import.py:1139 +#: netbox/dcim/forms/bulk_import.py:1492 netbox/ipam/forms/bulk_import.py:190 +#: netbox/ipam/forms/bulk_import.py:258 netbox/ipam/forms/bulk_import.py:294 +#: netbox/ipam/forms/bulk_import.py:475 netbox/ipam/forms/bulk_import.py:488 +#: netbox/virtualization/forms/bulk_import.py:57 +#: netbox/virtualization/forms/bulk_import.py:88 +#: netbox/vpn/forms/bulk_import.py:39 netbox/wireless/forms/bulk_import.py:47 +msgid "Operational status" +msgstr "Stato operativo" + +#: netbox/circuits/forms/bulk_import.py:115 +#: netbox/circuits/forms/bulk_import.py:174 +#: netbox/circuits/forms/bulk_import.py:236 +#: netbox/dcim/forms/bulk_import.py:113 netbox/dcim/forms/bulk_import.py:158 +#: netbox/dcim/forms/bulk_import.py:362 netbox/dcim/forms/bulk_import.py:510 +#: netbox/dcim/forms/bulk_import.py:1342 netbox/dcim/forms/bulk_import.py:1487 +#: netbox/dcim/forms/bulk_import.py:1551 netbox/ipam/forms/bulk_import.py:45 +#: netbox/ipam/forms/bulk_import.py:74 netbox/ipam/forms/bulk_import.py:102 +#: netbox/ipam/forms/bulk_import.py:122 netbox/ipam/forms/bulk_import.py:142 +#: netbox/ipam/forms/bulk_import.py:171 netbox/ipam/forms/bulk_import.py:253 +#: netbox/ipam/forms/bulk_import.py:289 netbox/ipam/forms/bulk_import.py:470 +#: netbox/virtualization/forms/bulk_import.py:71 +#: netbox/virtualization/forms/bulk_import.py:125 +#: netbox/vpn/forms/bulk_import.py:63 netbox/wireless/forms/bulk_import.py:61 +#: netbox/wireless/forms/bulk_import.py:106 +msgid "Assigned tenant" +msgstr "Tenant assegnato" + +#: netbox/circuits/forms/bulk_import.py:139 +msgid "Termination type (app & model)" +msgstr "Tipo di disdetta (app e modello)" + +#: netbox/circuits/forms/bulk_import.py:151 +#: netbox/circuits/forms/bulk_import.py:164 +msgid "Termination ID" +msgstr "ID di cessazione" + +#: netbox/circuits/forms/bulk_import.py:185 +msgid "Circuit type (app & model)" +msgstr "Tipo di circuito (app e modello)" + +#: netbox/circuits/forms/bulk_import.py:211 +msgid "The network to which this virtual circuit belongs" +msgstr "La rete a cui appartiene questo circuito virtuale" + +#: netbox/circuits/forms/bulk_import.py:217 +msgid "Assigned provider account (if any)" +msgstr "Account fornitore assegnato (se presente)" + +#: netbox/circuits/forms/bulk_import.py:224 +msgid "Type of virtual circuit" +msgstr "Tipo di circuito virtuale" + +#: netbox/circuits/forms/bulk_import.py:256 netbox/vpn/forms/bulk_import.py:83 +msgid "Operational role" +msgstr "Ruolo operativo" + +#: netbox/circuits/forms/bulk_import.py:259 +#: netbox/circuits/forms/model_forms.py:368 +#: netbox/circuits/tables/virtual_circuits.py:112 +#: netbox/dcim/forms/bulk_import.py:1219 netbox/dcim/forms/model_forms.py:1164 +#: netbox/dcim/forms/model_forms.py:1433 netbox/dcim/forms/model_forms.py:1600 +#: netbox/dcim/forms/model_forms.py:1635 netbox/dcim/forms/model_forms.py:1765 +#: netbox/dcim/tables/connections.py:65 netbox/dcim/tables/devices.py:1141 +#: netbox/ipam/forms/bulk_import.py:317 netbox/ipam/forms/model_forms.py:290 +#: netbox/ipam/forms/model_forms.py:299 netbox/ipam/tables/fhrp.py:64 +#: netbox/ipam/tables/ip.py:324 netbox/ipam/tables/vlans.py:145 +#: netbox/templates/circuits/inc/circuit_termination_fields.html:52 +#: netbox/templates/circuits/virtualcircuittermination.html:53 +#: netbox/templates/circuits/virtualcircuittermination.html:60 +#: netbox/templates/dcim/frontport.html:106 +#: netbox/templates/dcim/interface.html:27 +#: netbox/templates/dcim/interface.html:241 +#: netbox/templates/dcim/interface.html:367 +#: netbox/templates/dcim/rearport.html:102 +#: netbox/templates/virtualization/vminterface.html:18 +#: netbox/templates/vpn/tunneltermination.html:31 +#: netbox/templates/wireless/inc/wirelesslink_interface.html:10 +#: netbox/templates/wireless/wirelesslink.html:10 +#: netbox/templates/wireless/wirelesslink.html:55 +#: netbox/virtualization/forms/model_forms.py:377 +#: netbox/vpn/forms/bulk_import.py:297 netbox/vpn/forms/model_forms.py:439 +#: netbox/vpn/forms/model_forms.py:448 +#: netbox/wireless/forms/model_forms.py:116 +#: netbox/wireless/forms/model_forms.py:158 +msgid "Interface" +msgstr "Interfaccia" + +#: netbox/circuits/forms/filtersets.py:38 +#: netbox/circuits/forms/filtersets.py:129 +#: netbox/circuits/forms/filtersets.py:187 +#: netbox/circuits/forms/filtersets.py:245 +#: netbox/circuits/tables/circuits.py:144 netbox/dcim/forms/bulk_edit.py:342 +#: netbox/dcim/forms/bulk_edit.py:450 netbox/dcim/forms/bulk_edit.py:691 +#: netbox/dcim/forms/bulk_edit.py:746 netbox/dcim/forms/bulk_edit.py:900 +#: netbox/dcim/forms/bulk_import.py:237 netbox/dcim/forms/bulk_import.py:339 +#: netbox/dcim/forms/bulk_import.py:573 netbox/dcim/forms/bulk_import.py:1436 +#: netbox/dcim/forms/bulk_import.py:1470 netbox/dcim/forms/filtersets.py:96 +#: netbox/dcim/forms/filtersets.py:323 netbox/dcim/forms/filtersets.py:357 +#: netbox/dcim/forms/filtersets.py:397 netbox/dcim/forms/filtersets.py:448 +#: netbox/dcim/forms/filtersets.py:720 netbox/dcim/forms/filtersets.py:763 +#: netbox/dcim/forms/filtersets.py:978 netbox/dcim/forms/filtersets.py:1007 +#: netbox/dcim/forms/filtersets.py:1027 netbox/dcim/forms/filtersets.py:1091 +#: netbox/dcim/forms/filtersets.py:1121 netbox/dcim/forms/filtersets.py:1130 +#: netbox/dcim/forms/filtersets.py:1241 netbox/dcim/forms/filtersets.py:1265 +#: netbox/dcim/forms/filtersets.py:1290 netbox/dcim/forms/filtersets.py:1309 +#: netbox/dcim/forms/filtersets.py:1336 netbox/dcim/forms/filtersets.py:1447 +#: netbox/dcim/forms/filtersets.py:1471 netbox/dcim/forms/filtersets.py:1495 +#: netbox/dcim/forms/filtersets.py:1513 netbox/dcim/forms/filtersets.py:1530 +#: netbox/dcim/forms/model_forms.py:184 netbox/dcim/forms/model_forms.py:248 +#: netbox/dcim/forms/model_forms.py:478 netbox/dcim/forms/model_forms.py:739 +#: netbox/dcim/tables/devices.py:168 netbox/dcim/tables/power.py:30 +#: netbox/dcim/tables/racks.py:117 netbox/dcim/tables/racks.py:211 +#: netbox/extras/filtersets.py:536 netbox/extras/forms/filtersets.py:327 +#: netbox/ipam/forms/filtersets.py:234 netbox/ipam/forms/filtersets.py:417 +#: netbox/ipam/forms/filtersets.py:440 netbox/ipam/forms/filtersets.py:507 #: netbox/templates/dcim/device.html:26 #: netbox/templates/dcim/device_edit.html:30 #: netbox/templates/dcim/inc/cable_termination.html:12 #: netbox/templates/dcim/location.html:26 #: netbox/templates/dcim/powerpanel.html:26 netbox/templates/dcim/rack.html:24 #: netbox/templates/dcim/rackreservation.html:32 -#: netbox/virtualization/forms/filtersets.py:46 -#: netbox/virtualization/forms/filtersets.py:100 -#: netbox/wireless/forms/model_forms.py:87 -#: netbox/wireless/forms/model_forms.py:129 +#: netbox/virtualization/forms/filtersets.py:79 +#: netbox/virtualization/forms/filtersets.py:105 +#: netbox/wireless/forms/filtersets.py:93 +#: netbox/wireless/forms/model_forms.py:90 +#: netbox/wireless/forms/model_forms.py:132 msgid "Location" msgstr "Locazione" -#: netbox/circuits/forms/filtersets.py:32 -#: netbox/circuits/forms/filtersets.py:120 netbox/dcim/forms/filtersets.py:144 -#: netbox/dcim/forms/filtersets.py:158 netbox/dcim/forms/filtersets.py:174 -#: netbox/dcim/forms/filtersets.py:206 netbox/dcim/forms/filtersets.py:328 -#: netbox/dcim/forms/filtersets.py:400 netbox/dcim/forms/filtersets.py:471 -#: netbox/dcim/forms/filtersets.py:723 netbox/dcim/forms/filtersets.py:1091 +#: netbox/circuits/forms/filtersets.py:40 +#: netbox/circuits/forms/filtersets.py:131 netbox/dcim/forms/filtersets.py:145 +#: netbox/dcim/forms/filtersets.py:159 netbox/dcim/forms/filtersets.py:175 +#: netbox/dcim/forms/filtersets.py:207 netbox/dcim/forms/filtersets.py:329 +#: netbox/dcim/forms/filtersets.py:401 netbox/dcim/forms/filtersets.py:472 +#: netbox/dcim/forms/filtersets.py:724 netbox/dcim/forms/filtersets.py:1092 #: netbox/netbox/navigation/menu.py:31 netbox/netbox/navigation/menu.py:33 -#: netbox/tenancy/forms/filtersets.py:42 netbox/tenancy/tables/columns.py:70 +#: netbox/tenancy/forms/filtersets.py:42 netbox/tenancy/tables/columns.py:55 #: netbox/tenancy/tables/contacts.py:25 netbox/tenancy/views.py:19 #: netbox/virtualization/forms/filtersets.py:37 #: netbox/virtualization/forms/filtersets.py:48 -#: netbox/virtualization/forms/filtersets.py:106 +#: netbox/virtualization/forms/filtersets.py:111 msgid "Contacts" msgstr "Contatti" -#: netbox/circuits/forms/filtersets.py:37 -#: netbox/circuits/forms/filtersets.py:157 netbox/dcim/forms/bulk_edit.py:113 -#: netbox/dcim/forms/bulk_edit.py:314 netbox/dcim/forms/bulk_edit.py:872 -#: netbox/dcim/forms/bulk_import.py:93 netbox/dcim/forms/filtersets.py:73 -#: netbox/dcim/forms/filtersets.py:185 netbox/dcim/forms/filtersets.py:211 -#: netbox/dcim/forms/filtersets.py:334 netbox/dcim/forms/filtersets.py:425 -#: netbox/dcim/forms/filtersets.py:739 netbox/dcim/forms/filtersets.py:983 -#: netbox/dcim/forms/filtersets.py:1013 netbox/dcim/forms/filtersets.py:1097 -#: netbox/dcim/forms/filtersets.py:1136 netbox/dcim/forms/filtersets.py:1576 -#: netbox/dcim/forms/filtersets.py:1600 netbox/dcim/forms/filtersets.py:1624 -#: netbox/dcim/forms/model_forms.py:112 netbox/dcim/forms/object_create.py:367 -#: netbox/dcim/tables/devices.py:143 netbox/dcim/tables/sites.py:85 -#: netbox/extras/filtersets.py:503 netbox/ipam/forms/bulk_edit.py:208 -#: netbox/ipam/forms/bulk_edit.py:474 netbox/ipam/forms/filtersets.py:217 -#: netbox/ipam/forms/filtersets.py:422 netbox/ipam/forms/filtersets.py:475 -#: netbox/templates/dcim/device.html:18 netbox/templates/dcim/rack.html:16 +#: netbox/circuits/forms/filtersets.py:45 +#: netbox/circuits/forms/filtersets.py:168 +#: netbox/circuits/forms/filtersets.py:230 +#: netbox/circuits/tables/circuits.py:139 netbox/dcim/forms/bulk_edit.py:116 +#: netbox/dcim/forms/bulk_edit.py:317 netbox/dcim/forms/bulk_edit.py:875 +#: netbox/dcim/forms/bulk_import.py:95 netbox/dcim/forms/filtersets.py:74 +#: netbox/dcim/forms/filtersets.py:186 netbox/dcim/forms/filtersets.py:212 +#: netbox/dcim/forms/filtersets.py:335 netbox/dcim/forms/filtersets.py:426 +#: netbox/dcim/forms/filtersets.py:740 netbox/dcim/forms/filtersets.py:984 +#: netbox/dcim/forms/filtersets.py:1014 netbox/dcim/forms/filtersets.py:1098 +#: netbox/dcim/forms/filtersets.py:1137 netbox/dcim/forms/filtersets.py:1614 +#: netbox/dcim/forms/filtersets.py:1638 netbox/dcim/forms/filtersets.py:1662 +#: netbox/dcim/forms/model_forms.py:114 netbox/dcim/forms/object_create.py:367 +#: netbox/dcim/tables/devices.py:154 netbox/dcim/tables/sites.py:85 +#: netbox/extras/filtersets.py:503 netbox/ipam/forms/bulk_edit.py:458 +#: netbox/ipam/forms/filtersets.py:219 netbox/ipam/forms/filtersets.py:425 +#: netbox/ipam/forms/filtersets.py:516 netbox/templates/dcim/device.html:18 +#: netbox/templates/dcim/rack.html:16 #: netbox/templates/dcim/rackreservation.html:22 #: netbox/templates/dcim/region.html:26 netbox/templates/dcim/site.html:31 -#: netbox/templates/ipam/prefix.html:49 netbox/templates/ipam/vlan.html:16 -#: netbox/virtualization/forms/bulk_edit.py:81 +#: netbox/templates/ipam/vlan.html:16 #: netbox/virtualization/forms/filtersets.py:59 -#: netbox/virtualization/forms/filtersets.py:133 +#: netbox/virtualization/forms/filtersets.py:138 #: netbox/virtualization/forms/model_forms.py:92 -#: netbox/vpn/forms/filtersets.py:257 +#: netbox/vpn/forms/filtersets.py:257 netbox/wireless/forms/filtersets.py:73 msgid "Region" msgstr "Regione" -#: netbox/circuits/forms/filtersets.py:42 -#: netbox/circuits/forms/filtersets.py:162 netbox/dcim/forms/bulk_edit.py:322 -#: netbox/dcim/forms/bulk_edit.py:880 netbox/dcim/forms/filtersets.py:78 -#: netbox/dcim/forms/filtersets.py:190 netbox/dcim/forms/filtersets.py:216 -#: netbox/dcim/forms/filtersets.py:347 netbox/dcim/forms/filtersets.py:430 -#: netbox/dcim/forms/filtersets.py:744 netbox/dcim/forms/filtersets.py:988 -#: netbox/dcim/forms/filtersets.py:1102 netbox/dcim/forms/filtersets.py:1141 +#: netbox/circuits/forms/filtersets.py:50 +#: netbox/circuits/forms/filtersets.py:173 +#: netbox/circuits/forms/filtersets.py:235 netbox/dcim/forms/bulk_edit.py:325 +#: netbox/dcim/forms/bulk_edit.py:883 netbox/dcim/forms/filtersets.py:79 +#: netbox/dcim/forms/filtersets.py:191 netbox/dcim/forms/filtersets.py:217 +#: netbox/dcim/forms/filtersets.py:348 netbox/dcim/forms/filtersets.py:431 +#: netbox/dcim/forms/filtersets.py:745 netbox/dcim/forms/filtersets.py:989 +#: netbox/dcim/forms/filtersets.py:1103 netbox/dcim/forms/filtersets.py:1142 #: netbox/dcim/forms/object_create.py:375 netbox/extras/filtersets.py:520 -#: netbox/ipam/forms/bulk_edit.py:213 netbox/ipam/forms/bulk_edit.py:479 -#: netbox/ipam/forms/filtersets.py:222 netbox/ipam/forms/filtersets.py:427 -#: netbox/ipam/forms/filtersets.py:480 -#: netbox/virtualization/forms/bulk_edit.py:86 -#: netbox/virtualization/forms/filtersets.py:69 -#: netbox/virtualization/forms/filtersets.py:138 +#: netbox/ipam/forms/bulk_edit.py:463 netbox/ipam/forms/filtersets.py:224 +#: netbox/ipam/forms/filtersets.py:430 netbox/ipam/forms/filtersets.py:521 +#: netbox/virtualization/forms/filtersets.py:64 +#: netbox/virtualization/forms/filtersets.py:143 #: netbox/virtualization/forms/model_forms.py:98 +#: netbox/wireless/forms/filtersets.py:78 msgid "Site group" msgstr "Gruppo del sito" -#: netbox/circuits/forms/filtersets.py:65 -#: netbox/circuits/forms/filtersets.py:83 -#: netbox/circuits/forms/filtersets.py:102 -#: netbox/circuits/forms/filtersets.py:117 netbox/core/forms/filtersets.py:67 -#: netbox/core/forms/filtersets.py:135 netbox/dcim/forms/bulk_edit.py:843 -#: netbox/dcim/forms/filtersets.py:172 netbox/dcim/forms/filtersets.py:204 -#: netbox/dcim/forms/filtersets.py:915 netbox/dcim/forms/filtersets.py:1007 -#: netbox/dcim/forms/filtersets.py:1131 netbox/dcim/forms/filtersets.py:1239 -#: netbox/dcim/forms/filtersets.py:1263 netbox/dcim/forms/filtersets.py:1288 -#: netbox/dcim/forms/filtersets.py:1307 netbox/dcim/forms/filtersets.py:1327 -#: netbox/dcim/forms/filtersets.py:1441 netbox/dcim/forms/filtersets.py:1465 -#: netbox/dcim/forms/filtersets.py:1489 netbox/dcim/forms/filtersets.py:1507 -#: netbox/dcim/forms/filtersets.py:1523 netbox/extras/forms/bulk_edit.py:90 -#: netbox/extras/forms/filtersets.py:44 netbox/extras/forms/filtersets.py:134 -#: netbox/extras/forms/filtersets.py:165 netbox/extras/forms/filtersets.py:205 -#: netbox/extras/forms/filtersets.py:221 netbox/extras/forms/filtersets.py:252 -#: netbox/extras/forms/filtersets.py:276 netbox/extras/forms/filtersets.py:441 -#: netbox/ipam/forms/filtersets.py:99 netbox/ipam/forms/filtersets.py:266 -#: netbox/ipam/forms/filtersets.py:307 netbox/ipam/forms/filtersets.py:382 -#: netbox/ipam/forms/filtersets.py:468 netbox/ipam/forms/filtersets.py:527 -#: netbox/ipam/forms/filtersets.py:545 netbox/netbox/tables/tables.py:256 -#: netbox/virtualization/forms/filtersets.py:45 -#: netbox/virtualization/forms/filtersets.py:103 -#: netbox/virtualization/forms/filtersets.py:198 -#: netbox/virtualization/forms/filtersets.py:243 -#: netbox/vpn/forms/filtersets.py:213 netbox/wireless/forms/bulk_edit.py:150 -#: netbox/wireless/forms/filtersets.py:34 -#: netbox/wireless/forms/filtersets.py:74 -msgid "Attributes" -msgstr "Attributi" - -#: netbox/circuits/forms/filtersets.py:73 -#: netbox/circuits/tables/circuits.py:63 -#: netbox/circuits/tables/providers.py:66 +#: netbox/circuits/forms/filtersets.py:81 +#: netbox/circuits/tables/circuits.py:62 +#: netbox/circuits/tables/providers.py:64 +#: netbox/circuits/tables/virtual_circuits.py:55 +#: netbox/circuits/tables/virtual_circuits.py:103 #: netbox/templates/circuits/circuit.html:22 #: netbox/templates/circuits/provideraccount.html:24 msgid "Account" msgstr "Account" -#: netbox/circuits/forms/filtersets.py:217 +#: netbox/circuits/forms/filtersets.py:253 msgid "Term Side" msgstr "Lato del termine" -#: netbox/circuits/forms/filtersets.py:250 netbox/dcim/forms/bulk_edit.py:1557 -#: netbox/extras/forms/model_forms.py:582 netbox/ipam/forms/filtersets.py:142 -#: netbox/ipam/forms/filtersets.py:546 netbox/ipam/forms/model_forms.py:327 +#: netbox/circuits/forms/filtersets.py:286 netbox/dcim/forms/bulk_edit.py:1572 +#: netbox/extras/forms/model_forms.py:596 netbox/ipam/forms/filtersets.py:144 +#: netbox/ipam/forms/filtersets.py:598 netbox/ipam/forms/model_forms.py:337 +#: netbox/templates/dcim/macaddress.html:25 #: netbox/templates/extras/configcontext.html:60 #: netbox/templates/ipam/ipaddress.html:59 -#: netbox/templates/ipam/vlan_edit.html:30 +#: netbox/templates/ipam/vlan_edit.html:38 #: netbox/tenancy/forms/filtersets.py:87 netbox/users/forms/model_forms.py:314 msgid "Assignment" msgstr "Assegnazione" -#: netbox/circuits/forms/filtersets.py:265 -#: netbox/circuits/forms/model_forms.py:195 -#: netbox/circuits/tables/circuits.py:155 netbox/dcim/forms/bulk_edit.py:118 -#: netbox/dcim/forms/bulk_import.py:100 netbox/dcim/forms/model_forms.py:117 -#: netbox/dcim/tables/sites.py:89 netbox/extras/forms/filtersets.py:480 -#: netbox/ipam/filtersets.py:1001 netbox/ipam/forms/bulk_edit.py:493 -#: netbox/ipam/forms/bulk_import.py:460 netbox/ipam/forms/model_forms.py:561 -#: netbox/ipam/tables/fhrp.py:67 netbox/ipam/tables/vlans.py:122 -#: netbox/ipam/tables/vlans.py:226 +#: netbox/circuits/forms/filtersets.py:301 +#: netbox/circuits/forms/model_forms.py:252 +#: netbox/circuits/tables/circuits.py:191 netbox/dcim/forms/bulk_edit.py:121 +#: netbox/dcim/forms/bulk_import.py:102 netbox/dcim/forms/model_forms.py:120 +#: netbox/dcim/tables/sites.py:89 netbox/extras/forms/filtersets.py:489 +#: netbox/ipam/filtersets.py:968 netbox/ipam/forms/bulk_edit.py:477 +#: netbox/ipam/forms/bulk_import.py:459 netbox/ipam/forms/model_forms.py:571 +#: netbox/ipam/tables/fhrp.py:67 netbox/ipam/tables/vlans.py:91 +#: netbox/ipam/tables/vlans.py:202 #: netbox/templates/circuits/circuitgroupassignment.html:22 -#: netbox/templates/dcim/interface.html:284 netbox/templates/dcim/site.html:37 +#: netbox/templates/dcim/interface.html:341 netbox/templates/dcim/site.html:37 #: netbox/templates/ipam/inc/panels/fhrp_groups.html:23 #: netbox/templates/ipam/vlan.html:27 netbox/templates/tenancy/contact.html:21 #: netbox/templates/tenancy/tenant.html:20 netbox/templates/users/group.html:6 @@ -1129,226 +1394,242 @@ msgstr "Assegnazione" #: netbox/tenancy/tables/tenants.py:42 netbox/users/filtersets.py:62 #: netbox/users/filtersets.py:185 netbox/users/forms/filtersets.py:31 #: netbox/users/forms/filtersets.py:37 netbox/users/forms/filtersets.py:79 -#: netbox/virtualization/forms/bulk_edit.py:65 -#: netbox/virtualization/forms/bulk_import.py:47 -#: netbox/virtualization/forms/filtersets.py:85 -#: netbox/virtualization/forms/model_forms.py:66 +#: netbox/virtualization/forms/bulk_edit.py:66 +#: netbox/virtualization/forms/bulk_import.py:48 +#: netbox/virtualization/forms/filtersets.py:90 +#: netbox/virtualization/forms/model_forms.py:70 #: netbox/virtualization/tables/clusters.py:70 #: netbox/vpn/forms/bulk_edit.py:112 netbox/vpn/forms/bulk_import.py:158 #: netbox/vpn/forms/filtersets.py:116 netbox/vpn/tables/crypto.py:31 -#: netbox/vpn/tables/tunnels.py:44 netbox/wireless/forms/bulk_edit.py:48 -#: netbox/wireless/forms/bulk_import.py:36 -#: netbox/wireless/forms/filtersets.py:46 -#: netbox/wireless/forms/model_forms.py:40 +#: netbox/vpn/tables/tunnels.py:44 netbox/wireless/forms/bulk_edit.py:50 +#: netbox/wireless/forms/bulk_import.py:38 +#: netbox/wireless/forms/filtersets.py:49 +#: netbox/wireless/forms/model_forms.py:41 #: netbox/wireless/tables/wirelesslan.py:48 msgid "Group" msgstr "Gruppo" -#: netbox/circuits/forms/model_forms.py:182 +#: netbox/circuits/forms/model_forms.py:239 #: netbox/templates/circuits/circuitgroup.html:25 msgid "Circuit Group" msgstr "Gruppo Circuit" -#: netbox/circuits/models/circuits.py:27 netbox/dcim/models/cables.py:67 -#: netbox/dcim/models/device_component_templates.py:517 -#: netbox/dcim/models/device_component_templates.py:617 -#: netbox/dcim/models/device_components.py:975 -#: netbox/dcim/models/device_components.py:1049 -#: netbox/dcim/models/device_components.py:1204 -#: netbox/dcim/models/devices.py:479 netbox/dcim/models/racks.py:224 +#: netbox/circuits/forms/model_forms.py:259 +msgid "Circuit type" +msgstr "Tipo di circuito" + +#: netbox/circuits/forms/model_forms.py:270 +msgid "Group Assignment" +msgstr "Assegnazione di gruppo" + +#: netbox/circuits/models/base.py:18 netbox/dcim/models/cables.py:69 +#: netbox/dcim/models/device_component_templates.py:531 +#: netbox/dcim/models/device_component_templates.py:631 +#: netbox/dcim/models/device_components.py:476 +#: netbox/dcim/models/device_components.py:1026 +#: netbox/dcim/models/device_components.py:1097 +#: netbox/dcim/models/device_components.py:1243 +#: netbox/dcim/models/devices.py:478 netbox/dcim/models/racks.py:221 #: netbox/extras/models/tags.py:28 msgid "color" msgstr "colore" -#: netbox/circuits/models/circuits.py:36 +#: netbox/circuits/models/circuits.py:34 msgid "circuit type" msgstr "tipo di circuito" -#: netbox/circuits/models/circuits.py:37 +#: netbox/circuits/models/circuits.py:35 msgid "circuit types" msgstr "tipi di circuiti" -#: netbox/circuits/models/circuits.py:48 +#: netbox/circuits/models/circuits.py:46 +#: netbox/circuits/models/virtual_circuits.py:38 msgid "circuit ID" msgstr "ID del circuito" -#: netbox/circuits/models/circuits.py:49 +#: netbox/circuits/models/circuits.py:47 +#: netbox/circuits/models/virtual_circuits.py:39 msgid "Unique circuit ID" msgstr "ID univoco del circuito" -#: netbox/circuits/models/circuits.py:69 netbox/core/models/data.py:52 -#: netbox/core/models/jobs.py:85 netbox/dcim/models/cables.py:49 -#: netbox/dcim/models/devices.py:653 netbox/dcim/models/devices.py:1173 -#: netbox/dcim/models/devices.py:1404 netbox/dcim/models/power.py:96 -#: netbox/dcim/models/racks.py:297 netbox/dcim/models/sites.py:154 -#: netbox/dcim/models/sites.py:266 netbox/ipam/models/ip.py:253 -#: netbox/ipam/models/ip.py:522 netbox/ipam/models/ip.py:730 -#: netbox/ipam/models/vlans.py:211 netbox/virtualization/models/clusters.py:74 -#: netbox/virtualization/models/virtualmachines.py:84 -#: netbox/vpn/models/tunnels.py:40 netbox/wireless/models.py:95 -#: netbox/wireless/models.py:159 +#: netbox/circuits/models/circuits.py:67 +#: netbox/circuits/models/virtual_circuits.py:59 netbox/core/models/data.py:52 +#: netbox/core/models/jobs.py:85 netbox/dcim/models/cables.py:51 +#: netbox/dcim/models/device_components.py:1283 +#: netbox/dcim/models/devices.py:645 netbox/dcim/models/devices.py:1181 +#: netbox/dcim/models/devices.py:1409 netbox/dcim/models/power.py:94 +#: netbox/dcim/models/racks.py:288 netbox/dcim/models/sites.py:154 +#: netbox/dcim/models/sites.py:270 netbox/ipam/models/ip.py:237 +#: netbox/ipam/models/ip.py:508 netbox/ipam/models/ip.py:729 +#: netbox/ipam/models/vlans.py:210 netbox/virtualization/models/clusters.py:70 +#: netbox/virtualization/models/virtualmachines.py:79 +#: netbox/vpn/models/tunnels.py:38 netbox/wireless/models.py:95 +#: netbox/wireless/models.py:156 msgid "status" msgstr "stato" -#: netbox/circuits/models/circuits.py:84 netbox/templates/core/plugin.html:20 +#: netbox/circuits/models/circuits.py:82 netbox/templates/core/plugin.html:20 msgid "installed" msgstr "installato" -#: netbox/circuits/models/circuits.py:89 +#: netbox/circuits/models/circuits.py:87 msgid "terminates" msgstr "termina" -#: netbox/circuits/models/circuits.py:94 +#: netbox/circuits/models/circuits.py:92 msgid "commit rate (Kbps)" msgstr "tasso di commit (Kbps)" -#: netbox/circuits/models/circuits.py:95 +#: netbox/circuits/models/circuits.py:93 msgid "Committed rate" msgstr "Tariffa impegnata" -#: netbox/circuits/models/circuits.py:137 +#: netbox/circuits/models/circuits.py:142 msgid "circuit" msgstr "circuito" -#: netbox/circuits/models/circuits.py:138 +#: netbox/circuits/models/circuits.py:143 msgid "circuits" msgstr "circuiti" -#: netbox/circuits/models/circuits.py:170 +#: netbox/circuits/models/circuits.py:172 msgid "circuit group" msgstr "gruppo di circuiti" -#: netbox/circuits/models/circuits.py:171 +#: netbox/circuits/models/circuits.py:173 msgid "circuit groups" msgstr "gruppi di circuiti" -#: netbox/circuits/models/circuits.py:195 netbox/ipam/models/fhrp.py:93 -#: netbox/tenancy/models/contacts.py:134 +#: netbox/circuits/models/circuits.py:190 +msgid "member ID" +msgstr "ID membro" + +#: netbox/circuits/models/circuits.py:202 netbox/ipam/models/fhrp.py:90 +#: netbox/tenancy/models/contacts.py:126 msgid "priority" msgstr "priorità" -#: netbox/circuits/models/circuits.py:213 +#: netbox/circuits/models/circuits.py:220 msgid "Circuit group assignment" msgstr "Assegnazione di gruppi di circuiti" -#: netbox/circuits/models/circuits.py:214 +#: netbox/circuits/models/circuits.py:221 msgid "Circuit group assignments" msgstr "Assegnazioni di gruppi di circuiti" -#: netbox/circuits/models/circuits.py:240 -msgid "termination" -msgstr "" +#: netbox/circuits/models/circuits.py:247 +msgid "termination side" +msgstr "lato terminazione" -#: netbox/circuits/models/circuits.py:257 +#: netbox/circuits/models/circuits.py:266 msgid "port speed (Kbps)" msgstr "velocità della porta (Kbps)" -#: netbox/circuits/models/circuits.py:260 +#: netbox/circuits/models/circuits.py:269 msgid "Physical circuit speed" msgstr "Velocità fisica del circuito" -#: netbox/circuits/models/circuits.py:265 +#: netbox/circuits/models/circuits.py:274 msgid "upstream speed (Kbps)" msgstr "velocità upstream (Kbps)" -#: netbox/circuits/models/circuits.py:266 +#: netbox/circuits/models/circuits.py:275 msgid "Upstream speed, if different from port speed" msgstr "Velocità upstream, se diversa dalla velocità della porta" -#: netbox/circuits/models/circuits.py:271 +#: netbox/circuits/models/circuits.py:280 msgid "cross-connect ID" msgstr "ID di connessione incrociata" -#: netbox/circuits/models/circuits.py:272 +#: netbox/circuits/models/circuits.py:281 msgid "ID of the local cross-connect" msgstr "ID della connessione incrociata locale" -#: netbox/circuits/models/circuits.py:277 +#: netbox/circuits/models/circuits.py:286 msgid "patch panel/port(s)" msgstr "pannello di permutazione/porte" -#: netbox/circuits/models/circuits.py:278 +#: netbox/circuits/models/circuits.py:287 msgid "Patch panel ID and port number(s)" msgstr "ID del patch panel e numero/i di porta" -#: netbox/circuits/models/circuits.py:281 -#: netbox/dcim/models/device_component_templates.py:61 -#: netbox/dcim/models/device_components.py:68 netbox/dcim/models/racks.py:685 +#: netbox/circuits/models/circuits.py:290 +#: netbox/circuits/models/virtual_circuits.py:144 +#: netbox/dcim/models/device_component_templates.py:57 +#: netbox/dcim/models/device_components.py:63 netbox/dcim/models/racks.py:681 #: netbox/extras/models/configs.py:45 netbox/extras/models/configs.py:219 #: netbox/extras/models/customfields.py:125 netbox/extras/models/models.py:61 #: netbox/extras/models/models.py:158 netbox/extras/models/models.py:396 #: netbox/extras/models/models.py:511 #: netbox/extras/models/notifications.py:131 -#: netbox/extras/models/staging.py:31 netbox/extras/models/tags.py:32 -#: netbox/netbox/models/__init__.py:110 netbox/netbox/models/__init__.py:145 -#: netbox/netbox/models/__init__.py:191 netbox/users/models/permissions.py:24 -#: netbox/users/models/tokens.py:57 netbox/users/models/users.py:33 -#: netbox/virtualization/models/virtualmachines.py:289 +#: netbox/extras/models/staging.py:32 netbox/extras/models/tags.py:32 +#: netbox/ipam/models/vlans.py:358 netbox/netbox/models/__init__.py:115 +#: netbox/netbox/models/__init__.py:150 netbox/netbox/models/__init__.py:196 +#: netbox/users/models/permissions.py:24 netbox/users/models/tokens.py:57 +#: netbox/users/models/users.py:33 +#: netbox/virtualization/models/virtualmachines.py:276 msgid "description" msgstr "descrizione" -#: netbox/circuits/models/circuits.py:294 +#: netbox/circuits/models/circuits.py:340 msgid "circuit termination" msgstr "terminazione del circuito" -#: netbox/circuits/models/circuits.py:295 +#: netbox/circuits/models/circuits.py:341 msgid "circuit terminations" msgstr "terminazioni del circuito" -#: netbox/circuits/models/circuits.py:308 -msgid "" -"A circuit termination must attach to either a site or a provider network." +#: netbox/circuits/models/circuits.py:353 +msgid "A circuit termination must attach to a terminating object." msgstr "" +"Una terminazione di circuito deve essere collegata a un oggetto terminante." -#: netbox/circuits/models/circuits.py:310 -msgid "" -"A circuit termination cannot attach to both a site and a provider network." -msgstr "" - -#: netbox/circuits/models/providers.py:22 -#: netbox/circuits/models/providers.py:66 -#: netbox/circuits/models/providers.py:104 netbox/core/models/data.py:39 +#: netbox/circuits/models/providers.py:21 +#: netbox/circuits/models/providers.py:63 +#: netbox/circuits/models/providers.py:98 netbox/core/models/data.py:39 #: netbox/core/models/jobs.py:46 #: netbox/dcim/models/device_component_templates.py:43 -#: netbox/dcim/models/device_components.py:53 -#: netbox/dcim/models/devices.py:593 netbox/dcim/models/devices.py:1335 -#: netbox/dcim/models/devices.py:1400 netbox/dcim/models/power.py:39 -#: netbox/dcim/models/power.py:92 netbox/dcim/models/racks.py:262 -#: netbox/dcim/models/sites.py:138 netbox/extras/models/configs.py:36 +#: netbox/dcim/models/device_components.py:52 +#: netbox/dcim/models/devices.py:589 netbox/dcim/models/devices.py:1341 +#: netbox/dcim/models/devices.py:1404 netbox/dcim/models/power.py:38 +#: netbox/dcim/models/power.py:89 netbox/dcim/models/racks.py:257 +#: netbox/dcim/models/sites.py:142 netbox/extras/models/configs.py:36 #: netbox/extras/models/configs.py:215 netbox/extras/models/customfields.py:92 #: netbox/extras/models/models.py:56 netbox/extras/models/models.py:153 #: netbox/extras/models/models.py:296 netbox/extras/models/models.py:392 #: netbox/extras/models/models.py:501 netbox/extras/models/models.py:596 #: netbox/extras/models/notifications.py:126 -#: netbox/extras/models/scripts.py:30 netbox/extras/models/staging.py:26 -#: netbox/ipam/models/asns.py:18 netbox/ipam/models/fhrp.py:25 -#: netbox/ipam/models/services.py:52 netbox/ipam/models/services.py:88 -#: netbox/ipam/models/vlans.py:36 netbox/ipam/models/vlans.py:200 -#: netbox/ipam/models/vrfs.py:22 netbox/ipam/models/vrfs.py:79 -#: netbox/netbox/models/__init__.py:137 netbox/netbox/models/__init__.py:181 -#: netbox/tenancy/models/contacts.py:64 netbox/tenancy/models/tenants.py:20 -#: netbox/tenancy/models/tenants.py:45 netbox/users/models/permissions.py:20 -#: netbox/users/models/users.py:28 netbox/virtualization/models/clusters.py:57 -#: netbox/virtualization/models/virtualmachines.py:72 -#: netbox/virtualization/models/virtualmachines.py:279 -#: netbox/vpn/models/crypto.py:24 netbox/vpn/models/crypto.py:71 -#: netbox/vpn/models/crypto.py:131 netbox/vpn/models/crypto.py:183 -#: netbox/vpn/models/crypto.py:221 netbox/vpn/models/l2vpn.py:22 -#: netbox/vpn/models/tunnels.py:35 netbox/wireless/models.py:51 +#: netbox/extras/models/scripts.py:30 netbox/extras/models/staging.py:27 +#: netbox/ipam/models/asns.py:17 netbox/ipam/models/fhrp.py:24 +#: netbox/ipam/models/services.py:51 netbox/ipam/models/services.py:84 +#: netbox/ipam/models/vlans.py:37 netbox/ipam/models/vlans.py:199 +#: netbox/ipam/models/vlans.py:337 netbox/ipam/models/vrfs.py:20 +#: netbox/ipam/models/vrfs.py:75 netbox/netbox/models/__init__.py:142 +#: netbox/netbox/models/__init__.py:186 netbox/tenancy/models/contacts.py:58 +#: netbox/tenancy/models/tenants.py:19 netbox/tenancy/models/tenants.py:42 +#: netbox/users/models/permissions.py:20 netbox/users/models/users.py:28 +#: netbox/virtualization/models/clusters.py:52 +#: netbox/virtualization/models/virtualmachines.py:71 +#: netbox/virtualization/models/virtualmachines.py:271 +#: netbox/virtualization/models/virtualmachines.py:305 +#: netbox/vpn/models/crypto.py:23 netbox/vpn/models/crypto.py:69 +#: netbox/vpn/models/crypto.py:128 netbox/vpn/models/crypto.py:180 +#: netbox/vpn/models/crypto.py:216 netbox/vpn/models/l2vpn.py:21 +#: netbox/vpn/models/tunnels.py:32 netbox/wireless/models.py:53 msgid "name" msgstr "nome" -#: netbox/circuits/models/providers.py:25 +#: netbox/circuits/models/providers.py:24 msgid "Full name of the provider" msgstr "Nome completo del fornitore" -#: netbox/circuits/models/providers.py:28 netbox/dcim/models/devices.py:86 +#: netbox/circuits/models/providers.py:28 netbox/dcim/models/devices.py:88 #: netbox/dcim/models/racks.py:137 netbox/dcim/models/sites.py:149 #: netbox/extras/models/models.py:506 netbox/ipam/models/asns.py:23 -#: netbox/ipam/models/vlans.py:40 netbox/netbox/models/__init__.py:141 -#: netbox/netbox/models/__init__.py:186 netbox/tenancy/models/tenants.py:25 -#: netbox/tenancy/models/tenants.py:49 netbox/vpn/models/l2vpn.py:27 -#: netbox/wireless/models.py:56 +#: netbox/ipam/models/vlans.py:42 netbox/netbox/models/__init__.py:146 +#: netbox/netbox/models/__init__.py:191 netbox/tenancy/models/tenants.py:25 +#: netbox/tenancy/models/tenants.py:47 netbox/vpn/models/l2vpn.py:27 +#: netbox/wireless/models.py:59 msgid "slug" msgstr "pallottola" @@ -1360,67 +1641,100 @@ msgstr "fornitore" msgid "providers" msgstr "fornitori" -#: netbox/circuits/models/providers.py:63 +#: netbox/circuits/models/providers.py:60 msgid "account ID" msgstr "ID dell'account" -#: netbox/circuits/models/providers.py:86 +#: netbox/circuits/models/providers.py:83 msgid "provider account" msgstr "account del fornitore" -#: netbox/circuits/models/providers.py:87 +#: netbox/circuits/models/providers.py:84 msgid "provider accounts" msgstr "account del fornitore" -#: netbox/circuits/models/providers.py:115 +#: netbox/circuits/models/providers.py:110 msgid "service ID" msgstr "ID di servizio" -#: netbox/circuits/models/providers.py:126 +#: netbox/circuits/models/providers.py:121 msgid "provider network" msgstr "rete di fornitori" -#: netbox/circuits/models/providers.py:127 +#: netbox/circuits/models/providers.py:122 msgid "provider networks" msgstr "reti di fornitori" -#: netbox/circuits/tables/circuits.py:32 -#: netbox/circuits/tables/circuits.py:132 +#: netbox/circuits/models/virtual_circuits.py:28 +msgid "virtual circuit type" +msgstr "tipo di circuito virtuale" + +#: netbox/circuits/models/virtual_circuits.py:29 +msgid "virtual circuit types" +msgstr "tipi di circuiti virtuali" + +#: netbox/circuits/models/virtual_circuits.py:99 +msgid "virtual circuit" +msgstr "circuito virtuale" + +#: netbox/circuits/models/virtual_circuits.py:100 +msgid "virtual circuits" +msgstr "circuiti virtuali" + +#: netbox/circuits/models/virtual_circuits.py:133 netbox/ipam/models/ip.py:194 +#: netbox/ipam/models/ip.py:736 netbox/vpn/models/tunnels.py:109 +msgid "role" +msgstr "ruolo" + +#: netbox/circuits/models/virtual_circuits.py:151 +msgid "virtual circuit termination" +msgstr "terminazione del circuito virtuale" + +#: netbox/circuits/models/virtual_circuits.py:152 +msgid "virtual circuit terminations" +msgstr "terminazioni di circuiti virtuali" + +#: netbox/circuits/tables/circuits.py:30 +#: netbox/circuits/tables/circuits.py:168 #: netbox/circuits/tables/providers.py:18 -#: netbox/circuits/tables/providers.py:69 -#: netbox/circuits/tables/providers.py:99 netbox/core/tables/data.py:16 +#: netbox/circuits/tables/providers.py:67 +#: netbox/circuits/tables/providers.py:97 +#: netbox/circuits/tables/virtual_circuits.py:18 netbox/core/tables/data.py:16 #: netbox/core/tables/jobs.py:14 netbox/core/tables/plugins.py:44 #: netbox/core/tables/tasks.py:11 netbox/core/tables/tasks.py:115 -#: netbox/dcim/forms/filtersets.py:63 netbox/dcim/forms/object_create.py:43 -#: netbox/dcim/tables/devices.py:52 netbox/dcim/tables/devices.py:92 -#: netbox/dcim/tables/devices.py:134 netbox/dcim/tables/devices.py:289 -#: netbox/dcim/tables/devices.py:392 netbox/dcim/tables/devices.py:433 -#: netbox/dcim/tables/devices.py:482 netbox/dcim/tables/devices.py:531 -#: netbox/dcim/tables/devices.py:648 netbox/dcim/tables/devices.py:731 -#: netbox/dcim/tables/devices.py:778 netbox/dcim/tables/devices.py:841 -#: netbox/dcim/tables/devices.py:911 netbox/dcim/tables/devices.py:974 -#: netbox/dcim/tables/devices.py:994 netbox/dcim/tables/devices.py:1023 -#: netbox/dcim/tables/devices.py:1053 netbox/dcim/tables/devicetypes.py:31 +#: netbox/dcim/forms/filtersets.py:64 netbox/dcim/forms/object_create.py:43 +#: netbox/dcim/tables/devices.py:63 netbox/dcim/tables/devices.py:103 +#: netbox/dcim/tables/devices.py:145 netbox/dcim/tables/devices.py:300 +#: netbox/dcim/tables/devices.py:403 netbox/dcim/tables/devices.py:444 +#: netbox/dcim/tables/devices.py:492 netbox/dcim/tables/devices.py:541 +#: netbox/dcim/tables/devices.py:562 netbox/dcim/tables/devices.py:682 +#: netbox/dcim/tables/devices.py:765 netbox/dcim/tables/devices.py:811 +#: netbox/dcim/tables/devices.py:873 netbox/dcim/tables/devices.py:942 +#: netbox/dcim/tables/devices.py:1007 netbox/dcim/tables/devices.py:1026 +#: netbox/dcim/tables/devices.py:1055 netbox/dcim/tables/devices.py:1085 +#: netbox/dcim/tables/devicetypes.py:31 netbox/dcim/tables/devicetypes.py:227 #: netbox/dcim/tables/power.py:22 netbox/dcim/tables/power.py:62 #: netbox/dcim/tables/racks.py:24 netbox/dcim/tables/racks.py:113 #: netbox/dcim/tables/sites.py:24 netbox/dcim/tables/sites.py:51 -#: netbox/dcim/tables/sites.py:78 netbox/dcim/tables/sites.py:130 -#: netbox/extras/forms/filtersets.py:213 netbox/extras/tables/tables.py:58 +#: netbox/dcim/tables/sites.py:78 netbox/dcim/tables/sites.py:129 +#: netbox/extras/forms/filtersets.py:218 netbox/extras/tables/tables.py:58 #: netbox/extras/tables/tables.py:122 netbox/extras/tables/tables.py:155 #: netbox/extras/tables/tables.py:180 netbox/extras/tables/tables.py:246 #: netbox/extras/tables/tables.py:361 netbox/extras/tables/tables.py:378 #: netbox/extras/tables/tables.py:401 netbox/extras/tables/tables.py:439 #: netbox/extras/tables/tables.py:491 netbox/extras/tables/tables.py:514 -#: netbox/ipam/forms/bulk_edit.py:407 netbox/ipam/forms/filtersets.py:386 -#: netbox/ipam/tables/asn.py:16 netbox/ipam/tables/ip.py:85 -#: netbox/ipam/tables/ip.py:160 netbox/ipam/tables/services.py:15 -#: netbox/ipam/tables/services.py:40 netbox/ipam/tables/vlans.py:64 -#: netbox/ipam/tables/vlans.py:114 netbox/ipam/tables/vrfs.py:26 +#: netbox/ipam/forms/bulk_edit.py:391 netbox/ipam/forms/filtersets.py:389 +#: netbox/ipam/forms/filtersets.py:474 netbox/ipam/tables/asn.py:16 +#: netbox/ipam/tables/ip.py:31 netbox/ipam/tables/ip.py:106 +#: netbox/ipam/tables/services.py:15 netbox/ipam/tables/services.py:40 +#: netbox/ipam/tables/vlans.py:33 netbox/ipam/tables/vlans.py:83 +#: netbox/ipam/tables/vlans.py:231 netbox/ipam/tables/vrfs.py:26 #: netbox/ipam/tables/vrfs.py:68 #: netbox/templates/circuits/circuitgroup.html:28 #: netbox/templates/circuits/circuittype.html:22 #: netbox/templates/circuits/provideraccount.html:28 #: netbox/templates/circuits/providernetwork.html:24 +#: netbox/templates/circuits/virtualcircuittype.html:22 #: netbox/templates/core/datasource.html:34 netbox/templates/core/job.html:44 #: netbox/templates/core/plugin.html:54 #: netbox/templates/core/rq_worker.html:43 @@ -1432,7 +1746,7 @@ msgstr "reti di fornitori" #: netbox/templates/dcim/inc/interface_vlans_table.html:5 #: netbox/templates/dcim/inc/panels/inventory_items.html:18 #: netbox/templates/dcim/interface.html:38 -#: netbox/templates/dcim/interface.html:165 +#: netbox/templates/dcim/interface.html:222 #: netbox/templates/dcim/inventoryitem.html:28 #: netbox/templates/dcim/inventoryitemrole.html:18 #: netbox/templates/dcim/location.html:29 @@ -1462,6 +1776,7 @@ msgstr "reti di fornitori" #: netbox/templates/ipam/service.html:24 #: netbox/templates/ipam/servicetemplate.html:15 #: netbox/templates/ipam/vlan.html:35 netbox/templates/ipam/vlangroup.html:30 +#: netbox/templates/ipam/vlantranslationpolicy.html:14 #: netbox/templates/tenancy/contact.html:25 #: netbox/templates/tenancy/contactgroup.html:21 #: netbox/templates/tenancy/contactrole.html:18 @@ -1493,106 +1808,218 @@ msgstr "reti di fornitori" #: netbox/virtualization/tables/clusters.py:17 #: netbox/virtualization/tables/clusters.py:39 #: netbox/virtualization/tables/clusters.py:62 -#: netbox/virtualization/tables/virtualmachines.py:55 -#: netbox/virtualization/tables/virtualmachines.py:139 -#: netbox/virtualization/tables/virtualmachines.py:194 +#: netbox/virtualization/tables/virtualmachines.py:26 +#: netbox/virtualization/tables/virtualmachines.py:109 +#: netbox/virtualization/tables/virtualmachines.py:165 #: netbox/vpn/tables/crypto.py:18 netbox/vpn/tables/crypto.py:57 #: netbox/vpn/tables/crypto.py:93 netbox/vpn/tables/crypto.py:129 #: netbox/vpn/tables/crypto.py:158 netbox/vpn/tables/l2vpn.py:23 #: netbox/vpn/tables/tunnels.py:18 netbox/vpn/tables/tunnels.py:40 #: netbox/wireless/tables/wirelesslan.py:18 -#: netbox/wireless/tables/wirelesslan.py:79 +#: netbox/wireless/tables/wirelesslan.py:88 msgid "Name" msgstr "Nome" -#: netbox/circuits/tables/circuits.py:41 -#: netbox/circuits/tables/circuits.py:138 -#: netbox/circuits/tables/providers.py:45 -#: netbox/circuits/tables/providers.py:79 netbox/netbox/navigation/menu.py:266 -#: netbox/netbox/navigation/menu.py:270 netbox/netbox/navigation/menu.py:272 +#: netbox/circuits/tables/circuits.py:39 +#: netbox/circuits/tables/circuits.py:174 +#: netbox/circuits/tables/providers.py:43 +#: netbox/circuits/tables/providers.py:77 +#: netbox/circuits/tables/virtual_circuits.py:27 +#: netbox/netbox/navigation/menu.py:274 netbox/netbox/navigation/menu.py:278 +#: netbox/netbox/navigation/menu.py:280 #: netbox/templates/circuits/provider.html:57 #: netbox/templates/circuits/provideraccount.html:44 #: netbox/templates/circuits/providernetwork.html:50 msgid "Circuits" msgstr "Circuiti" -#: netbox/circuits/tables/circuits.py:55 +#: netbox/circuits/tables/circuits.py:54 +#: netbox/circuits/tables/virtual_circuits.py:42 #: netbox/templates/circuits/circuit.html:26 +#: netbox/templates/circuits/virtualcircuit.html:35 +#: netbox/templates/dcim/interface.html:174 msgid "Circuit ID" msgstr "ID circuito" -#: netbox/circuits/tables/circuits.py:69 -#: netbox/wireless/forms/model_forms.py:160 +#: netbox/circuits/tables/circuits.py:72 +#: netbox/wireless/forms/model_forms.py:163 msgid "Side A" msgstr "Lato A" -#: netbox/circuits/tables/circuits.py:74 +#: netbox/circuits/tables/circuits.py:77 msgid "Side Z" msgstr "Lato Z" -#: netbox/circuits/tables/circuits.py:77 -#: netbox/templates/circuits/circuit.html:55 +#: netbox/circuits/tables/circuits.py:80 +#: netbox/templates/circuits/circuit.html:65 msgid "Commit Rate" msgstr "Tasso di impegno" -#: netbox/circuits/tables/circuits.py:80 -#: netbox/circuits/tables/providers.py:48 -#: netbox/circuits/tables/providers.py:82 -#: netbox/circuits/tables/providers.py:107 netbox/dcim/tables/devices.py:1036 -#: netbox/dcim/tables/devicetypes.py:92 netbox/dcim/tables/modules.py:29 -#: netbox/dcim/tables/modules.py:73 netbox/dcim/tables/power.py:39 -#: netbox/dcim/tables/power.py:96 netbox/dcim/tables/racks.py:84 -#: netbox/dcim/tables/racks.py:145 netbox/dcim/tables/racks.py:225 -#: netbox/dcim/tables/sites.py:108 netbox/extras/tables/tables.py:582 -#: netbox/ipam/tables/asn.py:69 netbox/ipam/tables/fhrp.py:34 -#: netbox/ipam/tables/ip.py:136 netbox/ipam/tables/ip.py:275 -#: netbox/ipam/tables/ip.py:329 netbox/ipam/tables/ip.py:397 -#: netbox/ipam/tables/services.py:24 netbox/ipam/tables/services.py:54 -#: netbox/ipam/tables/vlans.py:145 netbox/ipam/tables/vrfs.py:47 -#: netbox/ipam/tables/vrfs.py:72 netbox/templates/dcim/htmx/cable_edit.html:89 +#: netbox/circuits/tables/circuits.py:84 +#: netbox/circuits/tables/providers.py:46 +#: netbox/circuits/tables/providers.py:80 +#: netbox/circuits/tables/providers.py:105 +#: netbox/circuits/tables/virtual_circuits.py:68 +#: netbox/dcim/tables/devices.py:1068 netbox/dcim/tables/devicetypes.py:97 +#: netbox/dcim/tables/modules.py:29 netbox/dcim/tables/modules.py:73 +#: netbox/dcim/tables/power.py:39 netbox/dcim/tables/power.py:96 +#: netbox/dcim/tables/racks.py:84 netbox/dcim/tables/racks.py:144 +#: netbox/dcim/tables/racks.py:224 netbox/dcim/tables/sites.py:107 +#: netbox/extras/tables/tables.py:582 netbox/ipam/tables/asn.py:69 +#: netbox/ipam/tables/fhrp.py:34 netbox/ipam/tables/ip.py:82 +#: netbox/ipam/tables/ip.py:226 netbox/ipam/tables/ip.py:281 +#: netbox/ipam/tables/ip.py:349 netbox/ipam/tables/services.py:24 +#: netbox/ipam/tables/services.py:54 netbox/ipam/tables/vlans.py:121 +#: netbox/ipam/tables/vrfs.py:47 netbox/ipam/tables/vrfs.py:72 +#: netbox/templates/dcim/htmx/cable_edit.html:89 #: netbox/templates/generic/bulk_edit.html:86 #: netbox/templates/inc/panels/comments.html:5 #: netbox/tenancy/tables/contacts.py:68 netbox/tenancy/tables/tenants.py:46 #: netbox/utilities/forms/fields/fields.py:29 -#: netbox/virtualization/tables/clusters.py:91 -#: netbox/virtualization/tables/virtualmachines.py:82 +#: netbox/virtualization/tables/clusters.py:95 +#: netbox/virtualization/tables/virtualmachines.py:52 #: netbox/vpn/tables/crypto.py:37 netbox/vpn/tables/crypto.py:74 #: netbox/vpn/tables/crypto.py:109 netbox/vpn/tables/crypto.py:140 #: netbox/vpn/tables/crypto.py:173 netbox/vpn/tables/l2vpn.py:37 #: netbox/vpn/tables/tunnels.py:61 netbox/wireless/tables/wirelesslan.py:27 -#: netbox/wireless/tables/wirelesslan.py:58 +#: netbox/wireless/tables/wirelesslan.py:66 msgid "Comments" msgstr "Commenti" -#: netbox/circuits/tables/circuits.py:86 +#: netbox/circuits/tables/circuits.py:90 #: netbox/templates/tenancy/contact.html:84 #: netbox/tenancy/tables/contacts.py:73 msgid "Assignments" msgstr "Incarichi" +#: netbox/circuits/tables/circuits.py:117 netbox/dcim/forms/connections.py:81 +msgid "Side" +msgstr "Lato" + +#: netbox/circuits/tables/circuits.py:120 +msgid "Termination Type" +msgstr "Tipo di terminazione" + +#: netbox/circuits/tables/circuits.py:123 +msgid "Termination Point" +msgstr "Punto di terminazione" + +#: netbox/circuits/tables/circuits.py:134 netbox/dcim/tables/devices.py:161 +#: netbox/templates/dcim/sitegroup.html:26 +msgid "Site Group" +msgstr "Gruppo del sito" + +#: netbox/circuits/tables/circuits.py:149 +#: netbox/templates/circuits/providernetwork.html:17 +#: netbox/templates/circuits/virtualcircuit.html:27 +#: netbox/templates/circuits/virtualcircuittermination.html:30 +#: netbox/templates/dcim/interface.html:170 +msgid "Provider Network" +msgstr "Provider Network" + #: netbox/circuits/tables/providers.py:23 msgid "Accounts" msgstr "Account" -#: netbox/circuits/tables/providers.py:29 +#: netbox/circuits/tables/providers.py:28 msgid "Account Count" msgstr "Numero di account" -#: netbox/circuits/tables/providers.py:39 netbox/dcim/tables/sites.py:100 +#: netbox/circuits/tables/providers.py:37 netbox/dcim/tables/sites.py:99 msgid "ASN Count" msgstr "Numero ASN" -#: netbox/circuits/views.py:331 +#: netbox/circuits/tables/virtual_circuits.py:65 +#: netbox/netbox/navigation/menu.py:234 +#: netbox/templates/circuits/virtualcircuit.html:87 +#: netbox/templates/vpn/l2vpn.html:56 netbox/templates/vpn/tunnel.html:72 +#: netbox/vpn/tables/tunnels.py:58 +msgid "Terminations" +msgstr "Terminazioni" + +#: netbox/circuits/tables/virtual_circuits.py:109 +#: netbox/dcim/forms/bulk_edit.py:745 netbox/dcim/forms/bulk_edit.py:1299 +#: netbox/dcim/forms/bulk_edit.py:1708 netbox/dcim/forms/bulk_edit.py:1760 +#: netbox/dcim/forms/bulk_import.py:668 netbox/dcim/forms/bulk_import.py:730 +#: netbox/dcim/forms/bulk_import.py:756 netbox/dcim/forms/bulk_import.py:782 +#: netbox/dcim/forms/bulk_import.py:802 netbox/dcim/forms/bulk_import.py:858 +#: netbox/dcim/forms/bulk_import.py:976 netbox/dcim/forms/bulk_import.py:1024 +#: netbox/dcim/forms/bulk_import.py:1041 netbox/dcim/forms/bulk_import.py:1053 +#: netbox/dcim/forms/bulk_import.py:1101 netbox/dcim/forms/bulk_import.py:1205 +#: netbox/dcim/forms/bulk_import.py:1541 netbox/dcim/forms/connections.py:24 +#: netbox/dcim/forms/filtersets.py:132 netbox/dcim/forms/filtersets.py:922 +#: netbox/dcim/forms/filtersets.py:1052 netbox/dcim/forms/filtersets.py:1243 +#: netbox/dcim/forms/filtersets.py:1268 netbox/dcim/forms/filtersets.py:1292 +#: netbox/dcim/forms/filtersets.py:1312 netbox/dcim/forms/filtersets.py:1339 +#: netbox/dcim/forms/filtersets.py:1449 netbox/dcim/forms/filtersets.py:1474 +#: netbox/dcim/forms/filtersets.py:1498 netbox/dcim/forms/filtersets.py:1516 +#: netbox/dcim/forms/filtersets.py:1533 netbox/dcim/forms/filtersets.py:1630 +#: netbox/dcim/forms/filtersets.py:1654 netbox/dcim/forms/filtersets.py:1678 +#: netbox/dcim/forms/model_forms.py:644 netbox/dcim/forms/model_forms.py:861 +#: netbox/dcim/forms/model_forms.py:1231 netbox/dcim/forms/model_forms.py:1716 +#: netbox/dcim/forms/model_forms.py:1787 +#: netbox/dcim/forms/object_create.py:249 netbox/dcim/tables/connections.py:22 +#: netbox/dcim/tables/connections.py:41 netbox/dcim/tables/connections.py:60 +#: netbox/dcim/tables/devices.py:296 netbox/dcim/tables/devices.py:381 +#: netbox/dcim/tables/devices.py:422 netbox/dcim/tables/devices.py:464 +#: netbox/dcim/tables/devices.py:514 netbox/dcim/tables/devices.py:619 +#: netbox/dcim/tables/devices.py:731 netbox/dcim/tables/devices.py:787 +#: netbox/dcim/tables/devices.py:833 netbox/dcim/tables/devices.py:892 +#: netbox/dcim/tables/devices.py:960 netbox/dcim/tables/devices.py:1089 +#: netbox/dcim/tables/modules.py:53 netbox/extras/forms/filtersets.py:328 +#: netbox/ipam/forms/bulk_import.py:303 netbox/ipam/forms/bulk_import.py:540 +#: netbox/ipam/forms/filtersets.py:603 netbox/ipam/forms/model_forms.py:333 +#: netbox/ipam/forms/model_forms.py:762 netbox/ipam/forms/model_forms.py:795 +#: netbox/ipam/forms/model_forms.py:821 netbox/ipam/tables/vlans.py:156 +#: netbox/templates/circuits/virtualcircuittermination.html:56 +#: netbox/templates/dcim/consoleport.html:20 +#: netbox/templates/dcim/consoleserverport.html:20 +#: netbox/templates/dcim/device.html:15 netbox/templates/dcim/device.html:130 +#: netbox/templates/dcim/device_edit.html:10 +#: netbox/templates/dcim/devicebay.html:20 +#: netbox/templates/dcim/devicebay.html:48 +#: netbox/templates/dcim/frontport.html:20 +#: netbox/templates/dcim/interface.html:30 +#: netbox/templates/dcim/interface.html:218 +#: netbox/templates/dcim/inventoryitem.html:20 +#: netbox/templates/dcim/module.html:57 +#: netbox/templates/dcim/modulebay.html:20 +#: netbox/templates/dcim/poweroutlet.html:20 +#: netbox/templates/dcim/powerport.html:20 +#: netbox/templates/dcim/rearport.html:20 +#: netbox/templates/dcim/virtualchassis.html:65 +#: netbox/templates/dcim/virtualchassis_edit.html:51 +#: netbox/templates/dcim/virtualdevicecontext.html:22 +#: netbox/templates/virtualization/virtualmachine.html:114 +#: netbox/templates/vpn/tunneltermination.html:23 +#: netbox/templates/wireless/inc/wirelesslink_interface.html:6 +#: netbox/virtualization/filtersets.py:133 +#: netbox/virtualization/forms/bulk_edit.py:119 +#: netbox/virtualization/forms/bulk_import.py:105 +#: netbox/virtualization/forms/filtersets.py:133 +#: netbox/virtualization/forms/model_forms.py:192 +#: netbox/virtualization/tables/virtualmachines.py:41 netbox/vpn/choices.py:52 +#: netbox/vpn/forms/bulk_import.py:86 netbox/vpn/forms/bulk_import.py:283 +#: netbox/vpn/forms/filtersets.py:275 netbox/vpn/forms/model_forms.py:91 +#: netbox/vpn/forms/model_forms.py:126 netbox/vpn/forms/model_forms.py:237 +#: netbox/vpn/forms/model_forms.py:456 +#: netbox/wireless/forms/model_forms.py:102 +#: netbox/wireless/forms/model_forms.py:144 +#: netbox/wireless/tables/wirelesslan.py:84 +msgid "Device" +msgstr "Dispositivo" + +#: netbox/circuits/views.py:356 #, python-brace-format msgid "No terminations have been defined for circuit {circuit}." msgstr "Non sono state definite terminazioni per il circuito {circuit}." -#: netbox/circuits/views.py:380 +#: netbox/circuits/views.py:405 #, python-brace-format msgid "Swapped terminations for circuit {circuit}." msgstr "Terminazioni sostituite per circuito {circuit}." -#: netbox/core/api/views.py:39 +#: netbox/core/api/views.py:51 msgid "This user does not have permission to synchronize this data source." msgstr "" "Questo utente non dispone dell'autorizzazione per sincronizzare questa " @@ -1619,12 +2046,13 @@ msgstr "Completato" #: netbox/core/choices.py:22 netbox/core/choices.py:59 #: netbox/core/constants.py:20 netbox/core/tables/tasks.py:34 #: netbox/dcim/choices.py:187 netbox/dcim/choices.py:239 -#: netbox/dcim/choices.py:1609 netbox/virtualization/choices.py:47 +#: netbox/dcim/choices.py:1593 netbox/dcim/choices.py:1666 +#: netbox/virtualization/choices.py:48 msgid "Failed" msgstr "Fallito" -#: netbox/core/choices.py:35 netbox/netbox/navigation/menu.py:335 -#: netbox/netbox/navigation/menu.py:339 +#: netbox/core/choices.py:35 netbox/netbox/navigation/menu.py:356 +#: netbox/netbox/navigation/menu.py:360 #: netbox/templates/extras/script/base.html:14 #: netbox/templates/extras/script_list.html:7 #: netbox/templates/extras/script_list.html:12 @@ -1654,12 +2082,36 @@ msgstr "Correre" msgid "Errored" msgstr "Errore" -#: netbox/core/choices.py:87 netbox/core/tables/plugins.py:63 +#: netbox/core/choices.py:82 +msgid "Minutely" +msgstr "Minuziosamente" + +#: netbox/core/choices.py:83 +msgid "Hourly" +msgstr "Ogni ora" + +#: netbox/core/choices.py:84 +msgid "12 hours" +msgstr "12 ore" + +#: netbox/core/choices.py:85 +msgid "Daily" +msgstr "Quotidiano" + +#: netbox/core/choices.py:86 +msgid "Weekly" +msgstr "Settimanale" + +#: netbox/core/choices.py:87 +msgid "30 days" +msgstr "30 giorni" + +#: netbox/core/choices.py:103 netbox/core/tables/plugins.py:63 #: netbox/templates/generic/object.html:61 msgid "Updated" msgstr "Aggiornato" -#: netbox/core/choices.py:88 +#: netbox/core/choices.py:104 msgid "Deleted" msgstr "Eliminato" @@ -1687,7 +2139,7 @@ msgstr "Annullato" #: netbox/core/data_backends.py:32 netbox/core/tables/plugins.py:51 #: netbox/templates/core/plugin.html:88 -#: netbox/templates/dcim/interface.html:216 +#: netbox/templates/dcim/interface.html:273 msgid "Local" msgstr "Locale" @@ -1761,7 +2213,7 @@ msgstr "Fonte dati (ID)" msgid "Data source (name)" msgstr "Fonte dati (nome)" -#: netbox/core/filtersets.py:145 netbox/dcim/filtersets.py:501 +#: netbox/core/filtersets.py:145 netbox/dcim/filtersets.py:502 #: netbox/extras/filtersets.py:287 netbox/extras/filtersets.py:331 #: netbox/extras/filtersets.py:353 netbox/extras/filtersets.py:413 #: netbox/users/filtersets.py:28 @@ -1773,12 +2225,12 @@ msgid "User name" msgstr "Nome utente" #: netbox/core/forms/bulk_edit.py:25 netbox/core/forms/filtersets.py:43 -#: netbox/core/tables/data.py:26 netbox/dcim/forms/bulk_edit.py:1137 -#: netbox/dcim/forms/bulk_edit.py:1415 netbox/dcim/forms/filtersets.py:1370 -#: netbox/dcim/tables/devices.py:553 netbox/dcim/tables/devicetypes.py:224 +#: netbox/core/tables/data.py:26 netbox/dcim/forms/bulk_edit.py:1140 +#: netbox/dcim/forms/bulk_edit.py:1418 netbox/dcim/forms/filtersets.py:1375 +#: netbox/dcim/tables/devices.py:567 netbox/dcim/tables/devicetypes.py:231 #: netbox/extras/forms/bulk_edit.py:123 netbox/extras/forms/bulk_edit.py:187 -#: netbox/extras/forms/bulk_edit.py:246 netbox/extras/forms/filtersets.py:142 -#: netbox/extras/forms/filtersets.py:229 netbox/extras/forms/filtersets.py:294 +#: netbox/extras/forms/bulk_edit.py:246 netbox/extras/forms/filtersets.py:145 +#: netbox/extras/forms/filtersets.py:235 netbox/extras/forms/filtersets.py:300 #: netbox/extras/tables/tables.py:162 netbox/extras/tables/tables.py:253 #: netbox/extras/tables/tables.py:415 netbox/netbox/preferences.py:22 #: netbox/templates/core/datasource.html:42 @@ -1789,18 +2241,18 @@ msgstr "Nome utente" #: netbox/templates/users/objectpermission.html:25 #: netbox/templates/virtualization/vminterface.html:29 #: netbox/users/forms/bulk_edit.py:89 netbox/users/forms/filtersets.py:70 -#: netbox/users/tables.py:83 netbox/virtualization/forms/bulk_edit.py:217 -#: netbox/virtualization/forms/filtersets.py:215 +#: netbox/users/tables.py:83 netbox/virtualization/forms/bulk_edit.py:199 +#: netbox/virtualization/forms/filtersets.py:220 msgid "Enabled" msgstr "Abilitato" -#: netbox/core/forms/bulk_edit.py:34 netbox/extras/forms/model_forms.py:285 +#: netbox/core/forms/bulk_edit.py:34 netbox/extras/forms/model_forms.py:299 #: netbox/templates/extras/savedfilter.html:52 #: netbox/vpn/forms/filtersets.py:97 netbox/vpn/forms/filtersets.py:127 #: netbox/vpn/forms/filtersets.py:151 netbox/vpn/forms/filtersets.py:170 -#: netbox/vpn/forms/model_forms.py:301 netbox/vpn/forms/model_forms.py:321 -#: netbox/vpn/forms/model_forms.py:337 netbox/vpn/forms/model_forms.py:357 -#: netbox/vpn/forms/model_forms.py:380 +#: netbox/vpn/forms/model_forms.py:302 netbox/vpn/forms/model_forms.py:323 +#: netbox/vpn/forms/model_forms.py:339 netbox/vpn/forms/model_forms.py:360 +#: netbox/vpn/forms/model_forms.py:383 msgid "Parameters" msgstr "Parametri" @@ -1809,16 +2261,15 @@ msgid "Ignore rules" msgstr "Ignora le regole" #: netbox/core/forms/filtersets.py:30 netbox/core/forms/model_forms.py:97 -#: netbox/extras/forms/model_forms.py:248 -#: netbox/extras/forms/model_forms.py:578 -#: netbox/extras/forms/model_forms.py:632 netbox/extras/tables/tables.py:191 +#: netbox/extras/forms/model_forms.py:262 +#: netbox/extras/forms/model_forms.py:592 +#: netbox/extras/forms/model_forms.py:646 netbox/extras/tables/tables.py:191 #: netbox/extras/tables/tables.py:483 netbox/extras/tables/tables.py:518 #: netbox/templates/core/datasource.html:31 -#: netbox/templates/dcim/device/render_config.html:18 #: netbox/templates/extras/configcontext.html:29 #: netbox/templates/extras/configtemplate.html:21 #: netbox/templates/extras/exporttemplate.html:35 -#: netbox/templates/virtualization/virtualmachine/render_config.html:18 +#: netbox/templates/extras/object_render_config.html:19 msgid "Data Source" msgstr "Fonte dati" @@ -1827,17 +2278,17 @@ msgid "File" msgstr "File" #: netbox/core/forms/filtersets.py:60 netbox/core/forms/mixins.py:16 -#: netbox/extras/forms/filtersets.py:170 netbox/extras/forms/filtersets.py:328 -#: netbox/extras/forms/filtersets.py:413 +#: netbox/extras/forms/filtersets.py:174 netbox/extras/forms/filtersets.py:335 +#: netbox/extras/forms/filtersets.py:421 msgid "Data source" msgstr "Fonte dati" -#: netbox/core/forms/filtersets.py:70 netbox/extras/forms/filtersets.py:440 +#: netbox/core/forms/filtersets.py:71 netbox/extras/forms/filtersets.py:448 msgid "Creation" msgstr "Creazione" -#: netbox/core/forms/filtersets.py:74 netbox/core/forms/filtersets.py:160 -#: netbox/extras/forms/filtersets.py:461 netbox/extras/tables/tables.py:220 +#: netbox/core/forms/filtersets.py:75 netbox/core/forms/filtersets.py:161 +#: netbox/extras/forms/filtersets.py:469 netbox/extras/tables/tables.py:220 #: netbox/extras/tables/tables.py:294 netbox/extras/tables/tables.py:326 #: netbox/extras/tables/tables.py:571 netbox/templates/core/job.html:38 #: netbox/templates/core/objectchange.html:52 @@ -1845,42 +2296,42 @@ msgstr "Creazione" msgid "Object Type" msgstr "Tipo di oggetto" -#: netbox/core/forms/filtersets.py:84 +#: netbox/core/forms/filtersets.py:85 msgid "Created after" msgstr "Creato dopo" -#: netbox/core/forms/filtersets.py:89 +#: netbox/core/forms/filtersets.py:90 msgid "Created before" msgstr "Creato prima" -#: netbox/core/forms/filtersets.py:94 +#: netbox/core/forms/filtersets.py:95 msgid "Scheduled after" msgstr "Pianificato dopo" -#: netbox/core/forms/filtersets.py:99 +#: netbox/core/forms/filtersets.py:100 msgid "Scheduled before" msgstr "Pianificato prima" -#: netbox/core/forms/filtersets.py:104 +#: netbox/core/forms/filtersets.py:105 msgid "Started after" msgstr "Iniziato dopo" -#: netbox/core/forms/filtersets.py:109 +#: netbox/core/forms/filtersets.py:110 msgid "Started before" msgstr "Iniziato prima" -#: netbox/core/forms/filtersets.py:114 +#: netbox/core/forms/filtersets.py:115 msgid "Completed after" msgstr "Completato dopo" -#: netbox/core/forms/filtersets.py:119 +#: netbox/core/forms/filtersets.py:120 msgid "Completed before" msgstr "Completato prima" -#: netbox/core/forms/filtersets.py:126 netbox/core/forms/filtersets.py:155 -#: netbox/dcim/forms/bulk_edit.py:462 netbox/dcim/forms/filtersets.py:418 -#: netbox/dcim/forms/filtersets.py:462 netbox/dcim/forms/model_forms.py:316 -#: netbox/extras/forms/filtersets.py:456 netbox/extras/forms/filtersets.py:475 +#: netbox/core/forms/filtersets.py:127 netbox/core/forms/filtersets.py:156 +#: netbox/dcim/forms/bulk_edit.py:465 netbox/dcim/forms/filtersets.py:419 +#: netbox/dcim/forms/filtersets.py:463 netbox/dcim/forms/model_forms.py:324 +#: netbox/extras/forms/filtersets.py:464 netbox/extras/forms/filtersets.py:484 #: netbox/extras/tables/tables.py:302 netbox/extras/tables/tables.py:342 #: netbox/templates/core/objectchange.html:36 #: netbox/templates/dcim/rackreservation.html:58 @@ -1894,22 +2345,22 @@ msgstr "Completato prima" msgid "User" msgstr "Utente" -#: netbox/core/forms/filtersets.py:134 netbox/core/tables/change_logging.py:15 +#: netbox/core/forms/filtersets.py:135 netbox/core/tables/change_logging.py:15 #: netbox/extras/tables/tables.py:609 netbox/extras/tables/tables.py:646 #: netbox/templates/core/objectchange.html:32 msgid "Time" msgstr "Ora" -#: netbox/core/forms/filtersets.py:139 netbox/extras/forms/filtersets.py:445 +#: netbox/core/forms/filtersets.py:140 netbox/extras/forms/filtersets.py:453 msgid "After" msgstr "Dopo" -#: netbox/core/forms/filtersets.py:144 netbox/extras/forms/filtersets.py:450 +#: netbox/core/forms/filtersets.py:145 netbox/extras/forms/filtersets.py:458 msgid "Before" msgstr "Prima" -#: netbox/core/forms/filtersets.py:148 netbox/core/tables/change_logging.py:29 -#: netbox/extras/forms/model_forms.py:396 +#: netbox/core/forms/filtersets.py:149 netbox/core/tables/change_logging.py:29 +#: netbox/extras/forms/model_forms.py:410 #: netbox/templates/core/objectchange.html:46 #: netbox/templates/extras/eventrule.html:71 msgid "Action" @@ -1944,22 +2395,22 @@ msgstr "" msgid "Rack Elevations" msgstr "Elevazioni dei rack" -#: netbox/core/forms/model_forms.py:157 netbox/dcim/choices.py:1520 -#: netbox/dcim/forms/bulk_edit.py:984 netbox/dcim/forms/bulk_edit.py:1372 -#: netbox/dcim/forms/bulk_edit.py:1390 netbox/dcim/tables/racks.py:158 -#: netbox/netbox/navigation/menu.py:291 netbox/netbox/navigation/menu.py:295 +#: netbox/core/forms/model_forms.py:157 netbox/dcim/choices.py:1522 +#: netbox/dcim/forms/bulk_edit.py:987 netbox/dcim/forms/bulk_edit.py:1375 +#: netbox/dcim/forms/bulk_edit.py:1393 netbox/dcim/tables/racks.py:157 +#: netbox/netbox/navigation/menu.py:312 netbox/netbox/navigation/menu.py:316 msgid "Power" msgstr "Energia" -#: netbox/core/forms/model_forms.py:159 netbox/netbox/navigation/menu.py:154 +#: netbox/core/forms/model_forms.py:159 netbox/netbox/navigation/menu.py:160 #: netbox/templates/core/inc/config_data.html:37 msgid "IPAM" msgstr "IPAM" -#: netbox/core/forms/model_forms.py:160 netbox/netbox/navigation/menu.py:230 +#: netbox/core/forms/model_forms.py:160 netbox/netbox/navigation/menu.py:238 #: netbox/templates/core/inc/config_data.html:50 #: netbox/vpn/forms/bulk_edit.py:77 netbox/vpn/forms/filtersets.py:43 -#: netbox/vpn/forms/model_forms.py:61 netbox/vpn/forms/model_forms.py:146 +#: netbox/vpn/forms/model_forms.py:62 netbox/vpn/forms/model_forms.py:147 msgid "Security" msgstr "Sicurezza" @@ -1974,7 +2425,7 @@ msgid "Pagination" msgstr "Impaginazione" #: netbox/core/forms/model_forms.py:163 netbox/extras/forms/bulk_edit.py:92 -#: netbox/extras/forms/filtersets.py:47 netbox/extras/forms/model_forms.py:116 +#: netbox/extras/forms/filtersets.py:48 netbox/extras/forms/model_forms.py:116 #: netbox/extras/forms/model_forms.py:129 #: netbox/templates/core/inc/config_data.html:93 msgid "Validation" @@ -1985,7 +2436,7 @@ msgstr "Validazione" msgid "User Preferences" msgstr "Preferenze utente" -#: netbox/core/forms/model_forms.py:167 netbox/dcim/forms/filtersets.py:732 +#: netbox/core/forms/model_forms.py:167 netbox/dcim/forms/filtersets.py:733 #: netbox/templates/core/inc/config_data.html:127 #: netbox/users/forms/model_forms.py:64 msgid "Miscellaneous" @@ -2021,7 +2472,7 @@ msgstr "nome utente" msgid "request ID" msgstr "ID della richiesta" -#: netbox/core/models/change_logging.py:52 netbox/extras/models/staging.py:69 +#: netbox/core/models/change_logging.py:52 netbox/extras/models/staging.py:77 msgid "action" msgstr "azione" @@ -2048,9 +2499,9 @@ msgstr "" "La registrazione delle modifiche non è supportata per questo tipo di oggetto" " ({type})." -#: netbox/core/models/config.py:18 netbox/core/models/data.py:266 +#: netbox/core/models/config.py:18 netbox/core/models/data.py:263 #: netbox/core/models/files.py:27 netbox/core/models/jobs.py:50 -#: netbox/extras/models/models.py:730 netbox/extras/models/notifications.py:39 +#: netbox/extras/models/models.py:733 netbox/extras/models/notifications.py:39 #: netbox/extras/models/notifications.py:186 #: netbox/netbox/models/features.py:53 netbox/users/models/tokens.py:32 msgid "created" @@ -2085,24 +2536,24 @@ msgstr "Configurazione attuale" msgid "Config revision #{id}" msgstr "Revisione della configurazione #{id}" -#: netbox/core/models/data.py:44 netbox/dcim/models/cables.py:43 -#: netbox/dcim/models/device_component_templates.py:203 -#: netbox/dcim/models/device_component_templates.py:237 -#: netbox/dcim/models/device_component_templates.py:272 -#: netbox/dcim/models/device_component_templates.py:334 -#: netbox/dcim/models/device_component_templates.py:413 -#: netbox/dcim/models/device_component_templates.py:512 -#: netbox/dcim/models/device_component_templates.py:612 -#: netbox/dcim/models/device_components.py:283 -#: netbox/dcim/models/device_components.py:312 -#: netbox/dcim/models/device_components.py:345 -#: netbox/dcim/models/device_components.py:463 -#: netbox/dcim/models/device_components.py:605 -#: netbox/dcim/models/device_components.py:970 -#: netbox/dcim/models/device_components.py:1044 -#: netbox/dcim/models/power.py:102 netbox/extras/models/customfields.py:78 +#: netbox/core/models/data.py:44 netbox/dcim/models/cables.py:44 +#: netbox/dcim/models/device_component_templates.py:199 +#: netbox/dcim/models/device_component_templates.py:234 +#: netbox/dcim/models/device_component_templates.py:270 +#: netbox/dcim/models/device_component_templates.py:335 +#: netbox/dcim/models/device_component_templates.py:420 +#: netbox/dcim/models/device_component_templates.py:526 +#: netbox/dcim/models/device_component_templates.py:626 +#: netbox/dcim/models/device_components.py:279 +#: netbox/dcim/models/device_components.py:306 +#: netbox/dcim/models/device_components.py:337 +#: netbox/dcim/models/device_components.py:453 +#: netbox/dcim/models/device_components.py:653 +#: netbox/dcim/models/device_components.py:1021 +#: netbox/dcim/models/device_components.py:1092 +#: netbox/dcim/models/power.py:100 netbox/extras/models/customfields.py:78 #: netbox/extras/models/search.py:41 -#: netbox/virtualization/models/clusters.py:61 netbox/vpn/models/l2vpn.py:32 +#: netbox/virtualization/models/clusters.py:57 netbox/vpn/models/l2vpn.py:32 msgid "type" msgstr "tipo" @@ -2114,8 +2565,8 @@ msgid "URL" msgstr "URL" #: netbox/core/models/data.py:59 -#: netbox/dcim/models/device_component_templates.py:418 -#: netbox/dcim/models/device_components.py:512 +#: netbox/dcim/models/device_component_templates.py:425 +#: netbox/dcim/models/device_components.py:505 #: netbox/extras/models/models.py:70 netbox/extras/models/models.py:301 #: netbox/extras/models/models.py:526 netbox/users/models/permissions.py:29 msgid "enabled" @@ -2147,17 +2598,17 @@ msgstr "origine dati" msgid "data sources" msgstr "fonti di dati" -#: netbox/core/models/data.py:122 +#: netbox/core/models/data.py:119 #, python-brace-format msgid "Unknown backend type: {type}" msgstr "Tipo di backend sconosciuto: {type}" -#: netbox/core/models/data.py:164 +#: netbox/core/models/data.py:161 msgid "Cannot initiate sync; syncing already in progress." msgstr "" "Impossibile avviare la sincronizzazione. La sincronizzazione è già in corso." -#: netbox/core/models/data.py:177 +#: netbox/core/models/data.py:174 msgid "" "There was an error initializing the backend. A dependency needs to be " "installed: " @@ -2165,48 +2616,48 @@ msgstr "" "Si è verificato un errore durante l'inizializzazione del backend. È " "necessario installare una dipendenza: " -#: netbox/core/models/data.py:270 netbox/core/models/files.py:31 +#: netbox/core/models/data.py:267 netbox/core/models/files.py:31 #: netbox/netbox/models/features.py:59 msgid "last updated" msgstr "ultimo aggiornamento" -#: netbox/core/models/data.py:280 netbox/dcim/models/cables.py:444 +#: netbox/core/models/data.py:277 netbox/dcim/models/cables.py:446 msgid "path" msgstr "sentiero" -#: netbox/core/models/data.py:283 +#: netbox/core/models/data.py:280 msgid "File path relative to the data source's root" msgstr "Percorso del file relativo alla radice dell'origine dati" -#: netbox/core/models/data.py:287 netbox/ipam/models/ip.py:503 +#: netbox/core/models/data.py:284 netbox/ipam/models/ip.py:489 msgid "size" msgstr "taglia" -#: netbox/core/models/data.py:290 +#: netbox/core/models/data.py:287 msgid "hash" msgstr "cancelletto" -#: netbox/core/models/data.py:294 +#: netbox/core/models/data.py:291 msgid "Length must be 64 hexadecimal characters." msgstr "La lunghezza deve essere di 64 caratteri esadecimali." -#: netbox/core/models/data.py:296 +#: netbox/core/models/data.py:293 msgid "SHA256 hash of the file data" msgstr "Hash SHA256 dei dati del file" -#: netbox/core/models/data.py:313 +#: netbox/core/models/data.py:310 msgid "data file" msgstr "file di dati" -#: netbox/core/models/data.py:314 +#: netbox/core/models/data.py:311 msgid "data files" msgstr "file di dati" -#: netbox/core/models/data.py:401 +#: netbox/core/models/data.py:398 msgid "auto sync record" msgstr "registrazione di sincronizzazione automatica" -#: netbox/core/models/data.py:402 +#: netbox/core/models/data.py:399 msgid "auto sync records" msgstr "sincronizzazione automatica dei record" @@ -2230,6 +2681,11 @@ msgstr "file gestito" msgid "managed files" msgstr "file gestiti" +#: netbox/core/models/files.py:100 +#, python-brace-format +msgid "A {model} with this file path already exists ({path})." +msgstr "UN {model} con questo percorso di file esiste già ({path})." + #: netbox/core/models/jobs.py:54 msgid "scheduled" msgstr "pianificata" @@ -2251,7 +2707,7 @@ msgid "completed" msgstr "completato" #: netbox/core/models/jobs.py:91 netbox/extras/models/models.py:101 -#: netbox/extras/models/staging.py:87 +#: netbox/extras/models/staging.py:95 msgid "data" msgstr "dato" @@ -2283,7 +2739,7 @@ msgid "Invalid status for job termination. Choices are: {choices}" msgstr "" "Stato non valido per la cessazione del lavoro. Le scelte sono: {choices}" -#: netbox/core/models/jobs.py:221 +#: netbox/core/models/jobs.py:231 msgid "" "enqueue() cannot be called with values for both schedule_at and immediate." msgstr "" @@ -2306,7 +2762,7 @@ msgstr "Nome completo" #: netbox/extras/tables/tables.py:297 netbox/extras/tables/tables.py:329 #: netbox/extras/tables/tables.py:409 netbox/extras/tables/tables.py:470 #: netbox/extras/tables/tables.py:576 netbox/extras/tables/tables.py:616 -#: netbox/extras/tables/tables.py:653 netbox/netbox/tables/tables.py:244 +#: netbox/extras/tables/tables.py:653 netbox/netbox/tables/tables.py:247 #: netbox/templates/core/objectchange.html:58 #: netbox/templates/extras/eventrule.html:78 #: netbox/templates/extras/journalentry.html:18 @@ -2334,11 +2790,11 @@ msgid "Last updated" msgstr "Ultimo aggiornamento" #: netbox/core/tables/jobs.py:10 netbox/core/tables/tasks.py:76 -#: netbox/dcim/tables/devicetypes.py:164 netbox/extras/tables/tables.py:216 -#: netbox/extras/tables/tables.py:460 netbox/netbox/tables/tables.py:189 +#: netbox/dcim/tables/devicetypes.py:169 netbox/extras/tables/tables.py:216 +#: netbox/extras/tables/tables.py:460 netbox/netbox/tables/tables.py:192 #: netbox/templates/dcim/virtualchassis_edit.html:52 #: netbox/utilities/forms/forms.py:73 -#: netbox/wireless/tables/wirelesslink.py:17 +#: netbox/wireless/tables/wirelesslink.py:16 msgid "ID" msgstr "ID" @@ -2404,7 +2860,7 @@ msgstr "Lavoratori" msgid "Host" msgstr "Ospite" -#: netbox/core/tables/tasks.py:50 netbox/ipam/forms/filtersets.py:535 +#: netbox/core/tables/tasks.py:50 netbox/ipam/forms/filtersets.py:587 msgid "Port" msgstr "Porto" @@ -2452,71 +2908,84 @@ msgstr "PID" msgid "No workers found" msgstr "Nessun lavoratore trovato" -#: netbox/core/views.py:90 -#, python-brace-format -msgid "Queued job #{id} to sync {datasource}" -msgstr "Lavoro in coda #{id} da sincronizzare {datasource}" - -#: netbox/core/views.py:319 -#, python-brace-format -msgid "Restored configuration revision #{id}" -msgstr "Revisione della configurazione ripristinata #{id}" - -#: netbox/core/views.py:412 netbox/core/views.py:455 netbox/core/views.py:531 +#: netbox/core/utils.py:84 netbox/core/utils.py:150 netbox/core/views.py:396 #, python-brace-format msgid "Job {job_id} not found" msgstr "Lavoro {job_id} non trovato" -#: netbox/core/views.py:463 -#, python-brace-format -msgid "Job {id} has been deleted." -msgstr "Lavoro {id} è stato eliminato." - -#: netbox/core/views.py:465 -#, python-brace-format -msgid "Error deleting job {id}: {error}" -msgstr "Errore durante l'eliminazione del lavoro {id}: {error}" - -#: netbox/core/views.py:478 netbox/core/views.py:496 +#: netbox/core/utils.py:102 netbox/core/utils.py:118 #, python-brace-format msgid "Job {id} not found." msgstr "Lavoro {id} non trovato." -#: netbox/core/views.py:484 +#: netbox/core/views.py:88 +#, python-brace-format +msgid "Queued job #{id} to sync {datasource}" +msgstr "Lavoro in coda #{id} da sincronizzare {datasource}" + +#: netbox/core/views.py:332 +#, python-brace-format +msgid "Restored configuration revision #{id}" +msgstr "Revisione della configurazione ripristinata #{id}" + +#: netbox/core/views.py:435 +#, python-brace-format +msgid "Job {id} has been deleted." +msgstr "Lavoro {id} è stato eliminato." + +#: netbox/core/views.py:437 +#, python-brace-format +msgid "Error deleting job {id}: {error}" +msgstr "Errore durante l'eliminazione del lavoro {id}: {error}" + +#: netbox/core/views.py:446 #, python-brace-format msgid "Job {id} has been re-enqueued." msgstr "Lavoro {id} è stato nuovamente accodato." -#: netbox/core/views.py:519 +#: netbox/core/views.py:455 #, python-brace-format msgid "Job {id} has been enqueued." msgstr "Lavoro {id} è stato messo in coda." -#: netbox/core/views.py:538 +#: netbox/core/views.py:464 #, python-brace-format msgid "Job {id} has been stopped." msgstr "Lavoro {id} è stato fermato." -#: netbox/core/views.py:540 +#: netbox/core/views.py:466 #, python-brace-format msgid "Failed to stop job {id}" msgstr "Interruzione del lavoro non riuscita {id}" -#: netbox/core/views.py:674 +#: netbox/core/views.py:601 msgid "Plugins catalog could not be loaded" msgstr "Impossibile caricare il catalogo dei plugin" -#: netbox/core/views.py:708 +#: netbox/core/views.py:635 #, python-brace-format msgid "Plugin {name} not found" msgstr "Plugin {name} non trovato" -#: netbox/dcim/api/serializers_/devices.py:49 -#: netbox/dcim/api/serializers_/devicetypes.py:25 +#: netbox/dcim/api/serializers_/device_components.py:262 +msgid "Interface mode does not support q-in-q service vlan" +msgstr "La modalità interfaccia non supporta il servizio vlan q-in-q" + +#: netbox/dcim/api/serializers_/device_components.py:269 +msgid "Interface mode does not support untagged vlan" +msgstr "La modalità interfaccia non supporta vlan senza tag" + +#: netbox/dcim/api/serializers_/device_components.py:274 +#: netbox/dcim/api/serializers_/device_components.py:279 +msgid "Interface mode does not support tagged vlans" +msgstr "La modalità interfaccia non supporta le vlan con tag" + +#: netbox/dcim/api/serializers_/devices.py:53 +#: netbox/dcim/api/serializers_/devicetypes.py:26 msgid "Position (U)" msgstr "Posizione (U)" -#: netbox/dcim/api/serializers_/racks.py:112 +#: netbox/dcim/api/serializers_/racks.py:113 #: netbox/templates/dcim/rack.html:28 msgid "Facility ID" msgstr "ID struttura" @@ -2526,8 +2995,9 @@ msgid "Staging" msgstr "Messa in scena" #: netbox/dcim/choices.py:23 netbox/dcim/choices.py:189 -#: netbox/dcim/choices.py:240 netbox/dcim/choices.py:1533 -#: netbox/virtualization/choices.py:23 netbox/virtualization/choices.py:48 +#: netbox/dcim/choices.py:240 netbox/dcim/choices.py:1535 +#: netbox/dcim/choices.py:1667 netbox/virtualization/choices.py:23 +#: netbox/virtualization/choices.py:49 msgid "Decommissioning" msgstr "Smantellamento" @@ -2590,7 +3060,7 @@ msgstr "Obsoleto" msgid "Millimeters" msgstr "Millimetri" -#: netbox/dcim/choices.py:115 netbox/dcim/choices.py:1555 +#: netbox/dcim/choices.py:115 netbox/dcim/choices.py:1557 msgid "Inches" msgstr "Pollici" @@ -2604,21 +3074,21 @@ msgstr "Da anteriore a posteriore" msgid "Rear to front" msgstr "Posteriore/anteriore" -#: netbox/dcim/choices.py:151 netbox/dcim/forms/bulk_edit.py:69 -#: netbox/dcim/forms/bulk_edit.py:88 netbox/dcim/forms/bulk_edit.py:174 -#: netbox/dcim/forms/bulk_edit.py:1420 netbox/dcim/forms/bulk_import.py:60 -#: netbox/dcim/forms/bulk_import.py:74 netbox/dcim/forms/bulk_import.py:137 -#: netbox/dcim/forms/bulk_import.py:588 netbox/dcim/forms/bulk_import.py:855 -#: netbox/dcim/forms/bulk_import.py:1110 netbox/dcim/forms/filtersets.py:234 -#: netbox/dcim/forms/model_forms.py:74 netbox/dcim/forms/model_forms.py:93 -#: netbox/dcim/forms/model_forms.py:170 netbox/dcim/forms/model_forms.py:1069 -#: netbox/dcim/forms/model_forms.py:1509 -#: netbox/dcim/forms/object_import.py:176 netbox/dcim/tables/devices.py:656 -#: netbox/dcim/tables/devices.py:869 netbox/dcim/tables/devices.py:954 -#: netbox/extras/tables/tables.py:223 netbox/ipam/tables/fhrp.py:59 -#: netbox/ipam/tables/ip.py:378 netbox/ipam/tables/services.py:44 -#: netbox/templates/dcim/interface.html:102 -#: netbox/templates/dcim/interface.html:309 +#: netbox/dcim/choices.py:151 netbox/dcim/forms/bulk_edit.py:72 +#: netbox/dcim/forms/bulk_edit.py:91 netbox/dcim/forms/bulk_edit.py:177 +#: netbox/dcim/forms/bulk_edit.py:1423 netbox/dcim/forms/bulk_import.py:62 +#: netbox/dcim/forms/bulk_import.py:76 netbox/dcim/forms/bulk_import.py:139 +#: netbox/dcim/forms/bulk_import.py:593 netbox/dcim/forms/bulk_import.py:863 +#: netbox/dcim/forms/bulk_import.py:1118 netbox/dcim/forms/filtersets.py:235 +#: netbox/dcim/forms/model_forms.py:76 netbox/dcim/forms/model_forms.py:95 +#: netbox/dcim/forms/model_forms.py:174 netbox/dcim/forms/model_forms.py:1082 +#: netbox/dcim/forms/model_forms.py:1551 +#: netbox/dcim/forms/object_import.py:177 netbox/dcim/tables/devices.py:690 +#: netbox/dcim/tables/devices.py:900 netbox/dcim/tables/devices.py:987 +#: netbox/dcim/tables/devices.py:1147 netbox/extras/tables/tables.py:223 +#: netbox/ipam/tables/fhrp.py:59 netbox/ipam/tables/ip.py:330 +#: netbox/ipam/tables/services.py:44 netbox/templates/dcim/interface.html:108 +#: netbox/templates/dcim/interface.html:366 #: netbox/templates/dcim/location.html:41 netbox/templates/dcim/region.html:37 #: netbox/templates/dcim/sitegroup.html:37 #: netbox/templates/ipam/service.html:28 @@ -2631,12 +3101,12 @@ msgstr "Posteriore/anteriore" #: netbox/tenancy/forms/bulk_import.py:58 #: netbox/tenancy/forms/model_forms.py:25 #: netbox/tenancy/forms/model_forms.py:68 -#: netbox/virtualization/forms/bulk_edit.py:207 -#: netbox/virtualization/forms/bulk_import.py:151 -#: netbox/virtualization/tables/virtualmachines.py:162 -#: netbox/wireless/forms/bulk_edit.py:24 -#: netbox/wireless/forms/bulk_import.py:21 -#: netbox/wireless/forms/model_forms.py:21 +#: netbox/virtualization/forms/bulk_edit.py:189 +#: netbox/virtualization/forms/bulk_import.py:157 +#: netbox/virtualization/tables/virtualmachines.py:132 +#: netbox/wireless/forms/bulk_edit.py:26 +#: netbox/wireless/forms/bulk_import.py:23 +#: netbox/wireless/forms/model_forms.py:22 msgid "Parent" msgstr "Genitore" @@ -2659,7 +3129,7 @@ msgid "Rear" msgstr "Posteriore" #: netbox/dcim/choices.py:186 netbox/dcim/choices.py:238 -#: netbox/virtualization/choices.py:46 +#: netbox/dcim/choices.py:1665 netbox/virtualization/choices.py:47 msgid "Staged" msgstr "Messo in scena" @@ -2692,7 +3162,7 @@ msgid "Top to bottom" msgstr "Dall'alto verso il basso" #: netbox/dcim/choices.py:215 netbox/dcim/choices.py:259 -#: netbox/dcim/choices.py:1305 +#: netbox/dcim/choices.py:1307 msgid "Passive" msgstr "Passivo" @@ -2722,8 +3192,8 @@ msgstr "Proprietario" #: netbox/dcim/choices.py:581 netbox/dcim/choices.py:824 #: netbox/dcim/choices.py:1221 netbox/dcim/choices.py:1223 -#: netbox/dcim/choices.py:1449 netbox/dcim/choices.py:1451 -#: netbox/netbox/navigation/menu.py:200 +#: netbox/dcim/choices.py:1451 netbox/dcim/choices.py:1453 +#: netbox/netbox/navigation/menu.py:208 msgid "Other" msgstr "Altro" @@ -2740,10 +3210,10 @@ msgid "Virtual" msgstr "Virtuale" #: netbox/dcim/choices.py:856 netbox/dcim/choices.py:1099 -#: netbox/dcim/forms/bulk_edit.py:1563 netbox/dcim/forms/filtersets.py:1330 -#: netbox/dcim/forms/model_forms.py:995 netbox/dcim/forms/model_forms.py:1404 -#: netbox/netbox/navigation/menu.py:140 netbox/netbox/navigation/menu.py:144 -#: netbox/templates/dcim/interface.html:210 +#: netbox/dcim/forms/bulk_edit.py:1578 netbox/dcim/forms/filtersets.py:1335 +#: netbox/dcim/forms/model_forms.py:1007 netbox/dcim/forms/model_forms.py:1445 +#: netbox/netbox/navigation/menu.py:146 netbox/netbox/navigation/menu.py:150 +#: netbox/templates/dcim/interface.html:267 msgid "Wireless" msgstr "Wireless" @@ -2751,13 +3221,13 @@ msgstr "Wireless" msgid "Virtual interfaces" msgstr "Interfacce virtuali" -#: netbox/dcim/choices.py:1025 netbox/dcim/forms/bulk_edit.py:1428 -#: netbox/dcim/forms/bulk_import.py:862 netbox/dcim/forms/model_forms.py:981 -#: netbox/dcim/tables/devices.py:660 netbox/templates/dcim/interface.html:106 +#: netbox/dcim/choices.py:1025 netbox/dcim/forms/bulk_edit.py:1431 +#: netbox/dcim/forms/bulk_import.py:870 netbox/dcim/forms/model_forms.py:993 +#: netbox/dcim/tables/devices.py:694 netbox/templates/dcim/interface.html:112 #: netbox/templates/virtualization/vminterface.html:43 -#: netbox/virtualization/forms/bulk_edit.py:212 -#: netbox/virtualization/forms/bulk_import.py:158 -#: netbox/virtualization/tables/virtualmachines.py:166 +#: netbox/virtualization/forms/bulk_edit.py:194 +#: netbox/virtualization/forms/bulk_import.py:164 +#: netbox/virtualization/tables/virtualmachines.py:136 msgid "Bridge" msgstr "ponte" @@ -2781,10 +3251,10 @@ msgstr "Ethernet (backplane)" msgid "Cellular" msgstr "Cellulare" -#: netbox/dcim/choices.py:1167 netbox/dcim/forms/filtersets.py:383 -#: netbox/dcim/forms/filtersets.py:809 netbox/dcim/forms/filtersets.py:963 -#: netbox/dcim/forms/filtersets.py:1542 -#: netbox/templates/dcim/inventoryitem.html:52 +#: netbox/dcim/choices.py:1167 netbox/dcim/forms/filtersets.py:384 +#: netbox/dcim/forms/filtersets.py:810 netbox/dcim/forms/filtersets.py:964 +#: netbox/dcim/forms/filtersets.py:1547 +#: netbox/templates/dcim/inventoryitem.html:56 #: netbox/templates/dcim/virtualchassis_edit.html:54 msgid "Serial" msgstr "Seriale" @@ -2810,109 +3280,95 @@ msgstr "Completo" msgid "Auto" msgstr "Auto" -#: netbox/dcim/choices.py:1265 +#: netbox/dcim/choices.py:1266 msgid "Access" msgstr "Accesso" -#: netbox/dcim/choices.py:1266 netbox/ipam/tables/vlans.py:172 -#: netbox/ipam/tables/vlans.py:217 +#: netbox/dcim/choices.py:1267 netbox/ipam/tables/vlans.py:148 +#: netbox/ipam/tables/vlans.py:193 #: netbox/templates/dcim/inc/interface_vlans_table.html:7 msgid "Tagged" msgstr "Taggato" -#: netbox/dcim/choices.py:1267 +#: netbox/dcim/choices.py:1268 msgid "Tagged (All)" msgstr "Contrassegnati (tutti)" -#: netbox/dcim/choices.py:1296 +#: netbox/dcim/choices.py:1269 netbox/templates/ipam/vlan_edit.html:22 +msgid "Q-in-Q (802.1ad)" +msgstr "Q-in-Q (802.1ad)" + +#: netbox/dcim/choices.py:1298 msgid "IEEE Standard" msgstr "Norma IEEE" -#: netbox/dcim/choices.py:1307 +#: netbox/dcim/choices.py:1309 msgid "Passive 24V (2-pair)" msgstr "24V passivo (2 coppie)" -#: netbox/dcim/choices.py:1308 +#: netbox/dcim/choices.py:1310 msgid "Passive 24V (4-pair)" msgstr "24V passivo (4 coppie)" -#: netbox/dcim/choices.py:1309 +#: netbox/dcim/choices.py:1311 msgid "Passive 48V (2-pair)" msgstr "48V passivo (2 coppie)" -#: netbox/dcim/choices.py:1310 +#: netbox/dcim/choices.py:1312 msgid "Passive 48V (4-pair)" msgstr "48V passivo (4 coppie)" -#: netbox/dcim/choices.py:1380 netbox/dcim/choices.py:1490 +#: netbox/dcim/choices.py:1382 netbox/dcim/choices.py:1492 msgid "Copper" msgstr "Rame" -#: netbox/dcim/choices.py:1403 +#: netbox/dcim/choices.py:1405 msgid "Fiber Optic" msgstr "Fibra ottica" -#: netbox/dcim/choices.py:1436 netbox/dcim/choices.py:1519 +#: netbox/dcim/choices.py:1438 netbox/dcim/choices.py:1521 msgid "USB" msgstr "USB" -#: netbox/dcim/choices.py:1506 +#: netbox/dcim/choices.py:1508 msgid "Fiber" msgstr "Fibra" -#: netbox/dcim/choices.py:1531 netbox/dcim/forms/filtersets.py:1227 +#: netbox/dcim/choices.py:1533 netbox/dcim/forms/filtersets.py:1228 msgid "Connected" msgstr "Connesso" -#: netbox/dcim/choices.py:1550 netbox/wireless/choices.py:497 +#: netbox/dcim/choices.py:1552 netbox/netbox/choices.py:175 msgid "Kilometers" msgstr "Chilometri" -#: netbox/dcim/choices.py:1551 netbox/templates/dcim/cable_trace.html:65 -#: netbox/wireless/choices.py:498 +#: netbox/dcim/choices.py:1553 netbox/netbox/choices.py:176 +#: netbox/templates/dcim/cable_trace.html:65 msgid "Meters" msgstr "Metri" -#: netbox/dcim/choices.py:1552 +#: netbox/dcim/choices.py:1554 msgid "Centimeters" msgstr "Centimetri" -#: netbox/dcim/choices.py:1553 netbox/wireless/choices.py:499 +#: netbox/dcim/choices.py:1555 netbox/netbox/choices.py:177 msgid "Miles" msgstr "Miglia" -#: netbox/dcim/choices.py:1554 netbox/templates/dcim/cable_trace.html:66 -#: netbox/wireless/choices.py:500 +#: netbox/dcim/choices.py:1556 netbox/netbox/choices.py:178 +#: netbox/templates/dcim/cable_trace.html:66 msgid "Feet" msgstr "Piedi" -#: netbox/dcim/choices.py:1570 netbox/templates/dcim/device.html:327 -#: netbox/templates/dcim/rack.html:107 -msgid "Kilograms" -msgstr "Chilogrammi" - -#: netbox/dcim/choices.py:1571 -msgid "Grams" -msgstr "Grammi" - -#: netbox/dcim/choices.py:1572 netbox/templates/dcim/device.html:328 -#: netbox/templates/dcim/rack.html:108 -msgid "Pounds" -msgstr "Sterline" - -#: netbox/dcim/choices.py:1573 -msgid "Ounces" -msgstr "Once" - -#: netbox/dcim/choices.py:1620 +#: netbox/dcim/choices.py:1604 msgid "Redundant" msgstr "Ridondante" -#: netbox/dcim/choices.py:1641 +#: netbox/dcim/choices.py:1625 msgid "Single phase" msgstr "Monofase" -#: netbox/dcim/choices.py:1642 +#: netbox/dcim/choices.py:1626 msgid "Three-phase" msgstr "Trifase" @@ -2926,335 +3382,319 @@ msgstr "Formato dell'indirizzo MAC non valido: {value}" msgid "Invalid WWN format: {value}" msgstr "Formato WWN non valido: {value}" -#: netbox/dcim/filtersets.py:86 +#: netbox/dcim/filtersets.py:87 msgid "Parent region (ID)" msgstr "Regione principale (ID)" -#: netbox/dcim/filtersets.py:92 +#: netbox/dcim/filtersets.py:93 msgid "Parent region (slug)" msgstr "Regione madre (slug)" -#: netbox/dcim/filtersets.py:116 +#: netbox/dcim/filtersets.py:117 msgid "Parent site group (ID)" msgstr "Gruppo del sito principale (ID)" -#: netbox/dcim/filtersets.py:122 +#: netbox/dcim/filtersets.py:123 msgid "Parent site group (slug)" msgstr "Gruppo del sito principale (slug)" -#: netbox/dcim/filtersets.py:164 netbox/extras/filtersets.py:364 -#: netbox/ipam/filtersets.py:843 netbox/ipam/filtersets.py:995 +#: netbox/dcim/filtersets.py:165 netbox/extras/filtersets.py:364 +#: netbox/ipam/filtersets.py:810 netbox/ipam/filtersets.py:962 msgid "Group (ID)" msgstr "Gruppo (ID)" -#: netbox/dcim/filtersets.py:170 +#: netbox/dcim/filtersets.py:171 msgid "Group (slug)" msgstr "Gruppo (slug)" -#: netbox/dcim/filtersets.py:176 netbox/dcim/filtersets.py:181 +#: netbox/dcim/filtersets.py:177 netbox/dcim/filtersets.py:182 msgid "AS (ID)" msgstr "COME (ID)" -#: netbox/dcim/filtersets.py:246 +#: netbox/dcim/filtersets.py:247 msgid "Parent location (ID)" msgstr "Sede principale (ID)" -#: netbox/dcim/filtersets.py:252 +#: netbox/dcim/filtersets.py:253 msgid "Parent location (slug)" msgstr "Sede principale (slug)" -#: netbox/dcim/filtersets.py:258 netbox/dcim/filtersets.py:369 -#: netbox/dcim/filtersets.py:490 netbox/dcim/filtersets.py:1057 -#: netbox/dcim/filtersets.py:1404 netbox/dcim/filtersets.py:2182 -msgid "Location (ID)" -msgstr "Ubicazione (ID)" - -#: netbox/dcim/filtersets.py:265 netbox/dcim/filtersets.py:376 -#: netbox/dcim/filtersets.py:497 netbox/dcim/filtersets.py:1410 -#: netbox/extras/filtersets.py:542 -msgid "Location (slug)" -msgstr "Posizione (slug)" - -#: netbox/dcim/filtersets.py:296 netbox/dcim/filtersets.py:381 -#: netbox/dcim/filtersets.py:539 netbox/dcim/filtersets.py:678 -#: netbox/dcim/filtersets.py:882 netbox/dcim/filtersets.py:933 -#: netbox/dcim/filtersets.py:973 netbox/dcim/filtersets.py:1306 -#: netbox/dcim/filtersets.py:1840 +#: netbox/dcim/filtersets.py:297 netbox/dcim/filtersets.py:382 +#: netbox/dcim/filtersets.py:540 netbox/dcim/filtersets.py:679 +#: netbox/dcim/filtersets.py:883 netbox/dcim/filtersets.py:934 +#: netbox/dcim/filtersets.py:974 netbox/dcim/filtersets.py:1308 +#: netbox/dcim/filtersets.py:1960 msgid "Manufacturer (ID)" msgstr "Produttore (ID)" -#: netbox/dcim/filtersets.py:302 netbox/dcim/filtersets.py:387 -#: netbox/dcim/filtersets.py:545 netbox/dcim/filtersets.py:684 -#: netbox/dcim/filtersets.py:888 netbox/dcim/filtersets.py:939 -#: netbox/dcim/filtersets.py:979 netbox/dcim/filtersets.py:1312 -#: netbox/dcim/filtersets.py:1846 +#: netbox/dcim/filtersets.py:303 netbox/dcim/filtersets.py:388 +#: netbox/dcim/filtersets.py:546 netbox/dcim/filtersets.py:685 +#: netbox/dcim/filtersets.py:889 netbox/dcim/filtersets.py:940 +#: netbox/dcim/filtersets.py:980 netbox/dcim/filtersets.py:1314 +#: netbox/dcim/filtersets.py:1966 msgid "Manufacturer (slug)" msgstr "Produttore (lumaca)" -#: netbox/dcim/filtersets.py:393 +#: netbox/dcim/filtersets.py:394 msgid "Rack type (slug)" msgstr "Tipo di rack (slug)" -#: netbox/dcim/filtersets.py:397 +#: netbox/dcim/filtersets.py:398 msgid "Rack type (ID)" msgstr "Tipo di rack (ID)" -#: netbox/dcim/filtersets.py:411 netbox/dcim/filtersets.py:892 -#: netbox/dcim/filtersets.py:994 netbox/dcim/filtersets.py:1850 -#: netbox/ipam/filtersets.py:383 netbox/ipam/filtersets.py:495 -#: netbox/ipam/filtersets.py:1005 netbox/virtualization/filtersets.py:210 +#: netbox/dcim/filtersets.py:412 netbox/dcim/filtersets.py:893 +#: netbox/dcim/filtersets.py:995 netbox/dcim/filtersets.py:1970 +#: netbox/ipam/filtersets.py:350 netbox/ipam/filtersets.py:462 +#: netbox/ipam/filtersets.py:972 netbox/virtualization/filtersets.py:176 msgid "Role (ID)" msgstr "Ruolo (ID)" -#: netbox/dcim/filtersets.py:417 netbox/dcim/filtersets.py:898 -#: netbox/dcim/filtersets.py:1000 netbox/dcim/filtersets.py:1856 -#: netbox/extras/filtersets.py:558 netbox/ipam/filtersets.py:389 -#: netbox/ipam/filtersets.py:501 netbox/ipam/filtersets.py:1011 -#: netbox/virtualization/filtersets.py:216 +#: netbox/dcim/filtersets.py:418 netbox/dcim/filtersets.py:899 +#: netbox/dcim/filtersets.py:1001 netbox/dcim/filtersets.py:1976 +#: netbox/extras/filtersets.py:558 netbox/ipam/filtersets.py:356 +#: netbox/ipam/filtersets.py:468 netbox/ipam/filtersets.py:978 +#: netbox/virtualization/filtersets.py:182 msgid "Role (slug)" msgstr "Ruolo (slug)" -#: netbox/dcim/filtersets.py:447 netbox/dcim/filtersets.py:1062 -#: netbox/dcim/filtersets.py:1415 netbox/dcim/filtersets.py:2244 +#: netbox/dcim/filtersets.py:448 netbox/dcim/filtersets.py:1063 +#: netbox/dcim/filtersets.py:1417 netbox/dcim/filtersets.py:2368 msgid "Rack (ID)" msgstr "Cremagliera (ID)" -#: netbox/dcim/filtersets.py:507 netbox/extras/filtersets.py:293 +#: netbox/dcim/filtersets.py:508 netbox/extras/filtersets.py:293 #: netbox/extras/filtersets.py:337 netbox/extras/filtersets.py:359 #: netbox/extras/filtersets.py:419 netbox/users/filtersets.py:113 #: netbox/users/filtersets.py:180 msgid "User (name)" msgstr "Utente (nome)" -#: netbox/dcim/filtersets.py:549 +#: netbox/dcim/filtersets.py:550 msgid "Default platform (ID)" msgstr "Piattaforma predefinita (ID)" -#: netbox/dcim/filtersets.py:555 +#: netbox/dcim/filtersets.py:556 msgid "Default platform (slug)" msgstr "Piattaforma predefinita (slug)" -#: netbox/dcim/filtersets.py:558 netbox/dcim/forms/filtersets.py:517 +#: netbox/dcim/filtersets.py:559 netbox/dcim/forms/filtersets.py:518 msgid "Has a front image" msgstr "Ha un'immagine frontale" -#: netbox/dcim/filtersets.py:562 netbox/dcim/forms/filtersets.py:524 +#: netbox/dcim/filtersets.py:563 netbox/dcim/forms/filtersets.py:525 msgid "Has a rear image" msgstr "Ha un'immagine posteriore" -#: netbox/dcim/filtersets.py:567 netbox/dcim/filtersets.py:688 -#: netbox/dcim/filtersets.py:1131 netbox/dcim/forms/filtersets.py:531 -#: netbox/dcim/forms/filtersets.py:627 netbox/dcim/forms/filtersets.py:848 +#: netbox/dcim/filtersets.py:568 netbox/dcim/filtersets.py:689 +#: netbox/dcim/filtersets.py:1132 netbox/dcim/forms/filtersets.py:532 +#: netbox/dcim/forms/filtersets.py:628 netbox/dcim/forms/filtersets.py:849 msgid "Has console ports" msgstr "Dispone di porte per console" -#: netbox/dcim/filtersets.py:571 netbox/dcim/filtersets.py:692 -#: netbox/dcim/filtersets.py:1135 netbox/dcim/forms/filtersets.py:538 -#: netbox/dcim/forms/filtersets.py:634 netbox/dcim/forms/filtersets.py:855 +#: netbox/dcim/filtersets.py:572 netbox/dcim/filtersets.py:693 +#: netbox/dcim/filtersets.py:1136 netbox/dcim/forms/filtersets.py:539 +#: netbox/dcim/forms/filtersets.py:635 netbox/dcim/forms/filtersets.py:856 msgid "Has console server ports" msgstr "Dispone di porte console server" -#: netbox/dcim/filtersets.py:575 netbox/dcim/filtersets.py:696 -#: netbox/dcim/filtersets.py:1139 netbox/dcim/forms/filtersets.py:545 -#: netbox/dcim/forms/filtersets.py:641 netbox/dcim/forms/filtersets.py:862 +#: netbox/dcim/filtersets.py:576 netbox/dcim/filtersets.py:697 +#: netbox/dcim/filtersets.py:1140 netbox/dcim/forms/filtersets.py:546 +#: netbox/dcim/forms/filtersets.py:642 netbox/dcim/forms/filtersets.py:863 msgid "Has power ports" msgstr "Dispone di porte di alimentazione" -#: netbox/dcim/filtersets.py:579 netbox/dcim/filtersets.py:700 -#: netbox/dcim/filtersets.py:1143 netbox/dcim/forms/filtersets.py:552 -#: netbox/dcim/forms/filtersets.py:648 netbox/dcim/forms/filtersets.py:869 +#: netbox/dcim/filtersets.py:580 netbox/dcim/filtersets.py:701 +#: netbox/dcim/filtersets.py:1144 netbox/dcim/forms/filtersets.py:553 +#: netbox/dcim/forms/filtersets.py:649 netbox/dcim/forms/filtersets.py:870 msgid "Has power outlets" msgstr "Dispone di prese di corrente" -#: netbox/dcim/filtersets.py:583 netbox/dcim/filtersets.py:704 -#: netbox/dcim/filtersets.py:1147 netbox/dcim/forms/filtersets.py:559 -#: netbox/dcim/forms/filtersets.py:655 netbox/dcim/forms/filtersets.py:876 +#: netbox/dcim/filtersets.py:584 netbox/dcim/filtersets.py:705 +#: netbox/dcim/filtersets.py:1148 netbox/dcim/forms/filtersets.py:560 +#: netbox/dcim/forms/filtersets.py:656 netbox/dcim/forms/filtersets.py:877 msgid "Has interfaces" msgstr "Dispone di interfacce" -#: netbox/dcim/filtersets.py:587 netbox/dcim/filtersets.py:708 -#: netbox/dcim/filtersets.py:1151 netbox/dcim/forms/filtersets.py:566 -#: netbox/dcim/forms/filtersets.py:662 netbox/dcim/forms/filtersets.py:883 +#: netbox/dcim/filtersets.py:588 netbox/dcim/filtersets.py:709 +#: netbox/dcim/filtersets.py:1152 netbox/dcim/forms/filtersets.py:567 +#: netbox/dcim/forms/filtersets.py:663 netbox/dcim/forms/filtersets.py:884 msgid "Has pass-through ports" msgstr "Dispone di porte pass-through" -#: netbox/dcim/filtersets.py:591 netbox/dcim/filtersets.py:1155 -#: netbox/dcim/forms/filtersets.py:580 +#: netbox/dcim/filtersets.py:592 netbox/dcim/filtersets.py:1156 +#: netbox/dcim/forms/filtersets.py:581 msgid "Has module bays" msgstr "Dispone di alloggiamenti per moduli" -#: netbox/dcim/filtersets.py:595 netbox/dcim/filtersets.py:1159 -#: netbox/dcim/forms/filtersets.py:573 +#: netbox/dcim/filtersets.py:596 netbox/dcim/filtersets.py:1160 +#: netbox/dcim/forms/filtersets.py:574 msgid "Has device bays" msgstr "Dispone di alloggiamenti per dispositivi" -#: netbox/dcim/filtersets.py:599 netbox/dcim/forms/filtersets.py:587 +#: netbox/dcim/filtersets.py:600 netbox/dcim/forms/filtersets.py:588 msgid "Has inventory items" msgstr "Ha articoli di inventario" -#: netbox/dcim/filtersets.py:756 netbox/dcim/filtersets.py:989 -#: netbox/dcim/filtersets.py:1436 +#: netbox/dcim/filtersets.py:757 netbox/dcim/filtersets.py:990 +#: netbox/dcim/filtersets.py:1438 msgid "Device type (ID)" msgstr "Tipo di dispositivo (ID)" -#: netbox/dcim/filtersets.py:772 netbox/dcim/filtersets.py:1317 +#: netbox/dcim/filtersets.py:773 netbox/dcim/filtersets.py:1319 msgid "Module type (ID)" msgstr "Tipo di modulo (ID)" -#: netbox/dcim/filtersets.py:804 netbox/dcim/filtersets.py:1591 +#: netbox/dcim/filtersets.py:805 netbox/dcim/filtersets.py:1593 msgid "Power port (ID)" msgstr "Porta di alimentazione (ID)" -#: netbox/dcim/filtersets.py:878 netbox/dcim/filtersets.py:1836 +#: netbox/dcim/filtersets.py:879 netbox/dcim/filtersets.py:1956 msgid "Parent inventory item (ID)" msgstr "Articolo di inventario principale (ID)" -#: netbox/dcim/filtersets.py:921 netbox/dcim/filtersets.py:947 -#: netbox/dcim/filtersets.py:1127 netbox/virtualization/filtersets.py:238 +#: netbox/dcim/filtersets.py:922 netbox/dcim/filtersets.py:948 +#: netbox/dcim/filtersets.py:1128 netbox/virtualization/filtersets.py:204 msgid "Config template (ID)" msgstr "Modello di configurazione (ID)" -#: netbox/dcim/filtersets.py:985 +#: netbox/dcim/filtersets.py:986 msgid "Device type (slug)" msgstr "Tipo di dispositivo (slug)" -#: netbox/dcim/filtersets.py:1005 +#: netbox/dcim/filtersets.py:1006 msgid "Parent Device (ID)" msgstr "Dispositivo principale (ID)" -#: netbox/dcim/filtersets.py:1009 netbox/virtualization/filtersets.py:220 +#: netbox/dcim/filtersets.py:1010 netbox/virtualization/filtersets.py:186 msgid "Platform (ID)" msgstr "Piattaforma (ID)" -#: netbox/dcim/filtersets.py:1015 netbox/extras/filtersets.py:569 -#: netbox/virtualization/filtersets.py:226 +#: netbox/dcim/filtersets.py:1016 netbox/extras/filtersets.py:569 +#: netbox/virtualization/filtersets.py:192 msgid "Platform (slug)" msgstr "Piattaforma (slug)" -#: netbox/dcim/filtersets.py:1051 netbox/dcim/filtersets.py:1399 -#: netbox/dcim/filtersets.py:1934 netbox/dcim/filtersets.py:2176 -#: netbox/dcim/filtersets.py:2235 +#: netbox/dcim/filtersets.py:1052 netbox/dcim/filtersets.py:1401 +#: netbox/dcim/filtersets.py:2058 netbox/dcim/filtersets.py:2300 +#: netbox/dcim/filtersets.py:2359 msgid "Site name (slug)" msgstr "Nome del sito (slug)" -#: netbox/dcim/filtersets.py:1067 +#: netbox/dcim/filtersets.py:1068 msgid "Parent bay (ID)" msgstr "Bambino per genitori (ID)" -#: netbox/dcim/filtersets.py:1071 +#: netbox/dcim/filtersets.py:1072 msgid "VM cluster (ID)" msgstr "Cluster VM (ID)" -#: netbox/dcim/filtersets.py:1077 netbox/extras/filtersets.py:591 -#: netbox/virtualization/filtersets.py:136 +#: netbox/dcim/filtersets.py:1078 netbox/extras/filtersets.py:591 +#: netbox/virtualization/filtersets.py:102 msgid "Cluster group (slug)" msgstr "Gruppo Cluster (slug)" -#: netbox/dcim/filtersets.py:1082 netbox/virtualization/filtersets.py:130 +#: netbox/dcim/filtersets.py:1083 netbox/virtualization/filtersets.py:96 msgid "Cluster group (ID)" msgstr "Gruppo cluster (ID)" -#: netbox/dcim/filtersets.py:1088 +#: netbox/dcim/filtersets.py:1089 msgid "Device model (slug)" msgstr "Modello del dispositivo (slug)" -#: netbox/dcim/filtersets.py:1099 netbox/dcim/forms/bulk_edit.py:522 +#: netbox/dcim/filtersets.py:1100 netbox/dcim/forms/bulk_edit.py:525 msgid "Is full depth" msgstr "È a piena profondità" -#: netbox/dcim/filtersets.py:1103 netbox/dcim/forms/common.py:18 -#: netbox/dcim/forms/filtersets.py:818 netbox/dcim/forms/filtersets.py:1385 -#: netbox/dcim/models/device_components.py:518 -#: netbox/virtualization/filtersets.py:230 -#: netbox/virtualization/filtersets.py:301 -#: netbox/virtualization/forms/filtersets.py:172 -#: netbox/virtualization/forms/filtersets.py:223 +#: netbox/dcim/filtersets.py:1104 netbox/dcim/forms/filtersets.py:819 +#: netbox/dcim/forms/filtersets.py:1390 netbox/dcim/forms/filtersets.py:1586 +#: netbox/dcim/forms/filtersets.py:1591 netbox/dcim/forms/model_forms.py:1762 +#: netbox/dcim/models/devices.py:1505 netbox/dcim/models/devices.py:1526 +#: netbox/virtualization/filtersets.py:196 +#: netbox/virtualization/filtersets.py:268 +#: netbox/virtualization/forms/filtersets.py:177 +#: netbox/virtualization/forms/filtersets.py:228 msgid "MAC address" msgstr "Indirizzo MAC" -#: netbox/dcim/filtersets.py:1110 netbox/dcim/filtersets.py:1274 -#: netbox/dcim/forms/filtersets.py:827 netbox/dcim/forms/filtersets.py:930 -#: netbox/virtualization/filtersets.py:234 -#: netbox/virtualization/forms/filtersets.py:176 +#: netbox/dcim/filtersets.py:1111 netbox/dcim/filtersets.py:1276 +#: netbox/dcim/forms/filtersets.py:828 netbox/dcim/forms/filtersets.py:931 +#: netbox/virtualization/filtersets.py:200 +#: netbox/virtualization/forms/filtersets.py:181 msgid "Has a primary IP" msgstr "Ha un IP primario" -#: netbox/dcim/filtersets.py:1114 +#: netbox/dcim/filtersets.py:1115 msgid "Has an out-of-band IP" msgstr "Ha un IP fuori banda" -#: netbox/dcim/filtersets.py:1119 +#: netbox/dcim/filtersets.py:1120 msgid "Virtual chassis (ID)" msgstr "Chassis virtuale (ID)" -#: netbox/dcim/filtersets.py:1123 +#: netbox/dcim/filtersets.py:1124 msgid "Is a virtual chassis member" msgstr "È un membro virtuale dello chassis" -#: netbox/dcim/filtersets.py:1164 +#: netbox/dcim/filtersets.py:1165 msgid "OOB IP (ID)" msgstr "OOB IP (ID)" -#: netbox/dcim/filtersets.py:1168 +#: netbox/dcim/filtersets.py:1169 msgid "Has virtual device context" msgstr "Ha un contesto di dispositivo virtuale" -#: netbox/dcim/filtersets.py:1257 +#: netbox/dcim/filtersets.py:1259 msgid "VDC (ID)" msgstr "VDC (ID)" -#: netbox/dcim/filtersets.py:1262 +#: netbox/dcim/filtersets.py:1264 msgid "Device model" msgstr "Modello del dispositivo" -#: netbox/dcim/filtersets.py:1267 netbox/ipam/filtersets.py:634 -#: netbox/vpn/filtersets.py:102 netbox/vpn/filtersets.py:401 -msgid "Interface (ID)" -msgstr "Interfaccia (ID)" - -#: netbox/dcim/filtersets.py:1323 +#: netbox/dcim/filtersets.py:1325 msgid "Module type (model)" msgstr "Tipo di modulo (modello)" -#: netbox/dcim/filtersets.py:1329 +#: netbox/dcim/filtersets.py:1331 msgid "Module bay (ID)" msgstr "Alloggiamento per moduli (ID)" -#: netbox/dcim/filtersets.py:1333 netbox/dcim/filtersets.py:1425 -#: netbox/ipam/filtersets.py:613 netbox/ipam/filtersets.py:853 -#: netbox/ipam/filtersets.py:1117 netbox/virtualization/filtersets.py:161 -#: netbox/vpn/filtersets.py:379 +#: netbox/dcim/filtersets.py:1335 netbox/dcim/filtersets.py:1427 +#: netbox/dcim/filtersets.py:1613 netbox/ipam/filtersets.py:580 +#: netbox/ipam/filtersets.py:820 netbox/ipam/filtersets.py:1142 +#: netbox/virtualization/filtersets.py:127 netbox/vpn/filtersets.py:379 msgid "Device (ID)" msgstr "Dispositivo (ID)" -#: netbox/dcim/filtersets.py:1421 +#: netbox/dcim/filtersets.py:1423 msgid "Rack (name)" msgstr "Rack (nome)" -#: netbox/dcim/filtersets.py:1431 netbox/ipam/filtersets.py:608 -#: netbox/ipam/filtersets.py:848 netbox/ipam/filtersets.py:1123 -#: netbox/vpn/filtersets.py:374 +#: netbox/dcim/filtersets.py:1433 netbox/dcim/filtersets.py:1608 +#: netbox/ipam/filtersets.py:575 netbox/ipam/filtersets.py:815 +#: netbox/ipam/filtersets.py:1148 netbox/vpn/filtersets.py:374 msgid "Device (name)" msgstr "Dispositivo (nome)" -#: netbox/dcim/filtersets.py:1442 +#: netbox/dcim/filtersets.py:1444 msgid "Device type (model)" msgstr "Tipo di dispositivo (modello)" -#: netbox/dcim/filtersets.py:1447 +#: netbox/dcim/filtersets.py:1449 msgid "Device role (ID)" msgstr "Ruolo del dispositivo (ID)" -#: netbox/dcim/filtersets.py:1453 +#: netbox/dcim/filtersets.py:1455 msgid "Device role (slug)" msgstr "Ruolo del dispositivo (slug)" -#: netbox/dcim/filtersets.py:1458 +#: netbox/dcim/filtersets.py:1460 msgid "Virtual Chassis (ID)" msgstr "Chassis virtuale (ID)" -#: netbox/dcim/filtersets.py:1464 netbox/dcim/forms/filtersets.py:109 -#: netbox/dcim/tables/devices.py:206 netbox/netbox/navigation/menu.py:79 +#: netbox/dcim/filtersets.py:1466 netbox/dcim/forms/filtersets.py:110 +#: netbox/dcim/tables/devices.py:217 netbox/netbox/navigation/menu.py:79 #: netbox/templates/dcim/device.html:120 #: netbox/templates/dcim/device_edit.html:93 #: netbox/templates/dcim/virtualchassis.html:20 @@ -3263,168 +3703,231 @@ msgstr "Chassis virtuale (ID)" msgid "Virtual Chassis" msgstr "Chassis virtuale" -#: netbox/dcim/filtersets.py:1488 +#: netbox/dcim/filtersets.py:1490 msgid "Module (ID)" msgstr "Modulo (ID)" -#: netbox/dcim/filtersets.py:1495 +#: netbox/dcim/filtersets.py:1497 msgid "Cable (ID)" msgstr "Cavo (ID)" -#: netbox/dcim/filtersets.py:1604 netbox/ipam/forms/bulk_import.py:189 +#: netbox/dcim/filtersets.py:1618 netbox/ipam/filtersets.py:585 +#: netbox/ipam/filtersets.py:825 netbox/ipam/filtersets.py:1158 +#: netbox/vpn/filtersets.py:385 +msgid "Virtual machine (name)" +msgstr "Macchina virtuale (nome)" + +#: netbox/dcim/filtersets.py:1623 netbox/ipam/filtersets.py:590 +#: netbox/ipam/filtersets.py:830 netbox/ipam/filtersets.py:1152 +#: netbox/virtualization/filtersets.py:248 +#: netbox/virtualization/filtersets.py:299 netbox/vpn/filtersets.py:390 +msgid "Virtual machine (ID)" +msgstr "Macchina virtuale (ID)" + +#: netbox/dcim/filtersets.py:1629 netbox/ipam/filtersets.py:596 +#: netbox/vpn/filtersets.py:97 netbox/vpn/filtersets.py:396 +msgid "Interface (name)" +msgstr "Interfaccia (nome)" + +#: netbox/dcim/filtersets.py:1640 netbox/ipam/filtersets.py:607 +#: netbox/vpn/filtersets.py:108 netbox/vpn/filtersets.py:407 +msgid "VM interface (name)" +msgstr "Interfaccia VM (nome)" + +#: netbox/dcim/filtersets.py:1645 netbox/ipam/filtersets.py:612 +#: netbox/vpn/filtersets.py:113 +msgid "VM interface (ID)" +msgstr "Interfaccia VM (ID)" + +#: netbox/dcim/filtersets.py:1687 netbox/ipam/forms/bulk_import.py:185 #: netbox/vpn/forms/bulk_import.py:308 msgid "Assigned VLAN" msgstr "VLAN assegnata" -#: netbox/dcim/filtersets.py:1608 +#: netbox/dcim/filtersets.py:1691 msgid "Assigned VID" msgstr "VID assegnato" -#: netbox/dcim/filtersets.py:1613 netbox/dcim/forms/bulk_edit.py:1531 -#: netbox/dcim/forms/bulk_import.py:913 netbox/dcim/forms/filtersets.py:1428 -#: netbox/dcim/forms/model_forms.py:1385 -#: netbox/dcim/models/device_components.py:711 -#: netbox/dcim/tables/devices.py:626 netbox/ipam/filtersets.py:318 -#: netbox/ipam/filtersets.py:329 netbox/ipam/filtersets.py:485 -#: netbox/ipam/filtersets.py:586 netbox/ipam/filtersets.py:597 -#: netbox/ipam/forms/bulk_edit.py:242 netbox/ipam/forms/bulk_edit.py:298 -#: netbox/ipam/forms/bulk_edit.py:340 netbox/ipam/forms/bulk_import.py:157 -#: netbox/ipam/forms/bulk_import.py:243 netbox/ipam/forms/bulk_import.py:279 -#: netbox/ipam/forms/filtersets.py:67 netbox/ipam/forms/filtersets.py:172 -#: netbox/ipam/forms/filtersets.py:309 netbox/ipam/forms/model_forms.py:62 -#: netbox/ipam/forms/model_forms.py:202 netbox/ipam/forms/model_forms.py:247 -#: netbox/ipam/forms/model_forms.py:300 netbox/ipam/forms/model_forms.py:464 -#: netbox/ipam/forms/model_forms.py:478 netbox/ipam/forms/model_forms.py:492 -#: netbox/ipam/models/ip.py:233 netbox/ipam/models/ip.py:512 -#: netbox/ipam/models/ip.py:720 netbox/ipam/models/vrfs.py:62 -#: netbox/ipam/tables/ip.py:242 netbox/ipam/tables/ip.py:309 -#: netbox/ipam/tables/ip.py:360 netbox/ipam/tables/ip.py:450 -#: netbox/templates/dcim/interface.html:133 +#: netbox/dcim/filtersets.py:1696 netbox/dcim/forms/bulk_edit.py:1544 +#: netbox/dcim/forms/bulk_import.py:921 netbox/dcim/forms/filtersets.py:1433 +#: netbox/dcim/forms/model_forms.py:1411 +#: netbox/dcim/models/device_components.py:749 +#: netbox/dcim/tables/devices.py:648 netbox/ipam/filtersets.py:321 +#: netbox/ipam/filtersets.py:332 netbox/ipam/filtersets.py:452 +#: netbox/ipam/filtersets.py:553 netbox/ipam/filtersets.py:564 +#: netbox/ipam/forms/bulk_edit.py:226 netbox/ipam/forms/bulk_edit.py:282 +#: netbox/ipam/forms/bulk_edit.py:324 netbox/ipam/forms/bulk_import.py:160 +#: netbox/ipam/forms/bulk_import.py:242 netbox/ipam/forms/bulk_import.py:278 +#: netbox/ipam/forms/filtersets.py:69 netbox/ipam/forms/filtersets.py:174 +#: netbox/ipam/forms/filtersets.py:312 netbox/ipam/forms/model_forms.py:65 +#: netbox/ipam/forms/model_forms.py:208 netbox/ipam/forms/model_forms.py:256 +#: netbox/ipam/forms/model_forms.py:310 netbox/ipam/forms/model_forms.py:474 +#: netbox/ipam/forms/model_forms.py:488 netbox/ipam/forms/model_forms.py:502 +#: netbox/ipam/models/ip.py:217 netbox/ipam/models/ip.py:498 +#: netbox/ipam/models/ip.py:719 netbox/ipam/models/vrfs.py:61 +#: netbox/ipam/tables/ip.py:188 netbox/ipam/tables/ip.py:261 +#: netbox/ipam/tables/ip.py:312 netbox/ipam/tables/ip.py:402 +#: netbox/templates/dcim/interface.html:152 #: netbox/templates/ipam/ipaddress.html:18 #: netbox/templates/ipam/iprange.html:40 netbox/templates/ipam/prefix.html:19 #: netbox/templates/ipam/vrf.html:7 netbox/templates/ipam/vrf.html:13 -#: netbox/templates/virtualization/vminterface.html:47 -#: netbox/virtualization/forms/bulk_edit.py:261 -#: netbox/virtualization/forms/bulk_import.py:171 -#: netbox/virtualization/forms/filtersets.py:228 -#: netbox/virtualization/forms/model_forms.py:344 -#: netbox/virtualization/models/virtualmachines.py:355 -#: netbox/virtualization/tables/virtualmachines.py:143 +#: netbox/templates/virtualization/vminterface.html:84 +#: netbox/virtualization/forms/bulk_edit.py:243 +#: netbox/virtualization/forms/bulk_import.py:177 +#: netbox/virtualization/forms/filtersets.py:233 +#: netbox/virtualization/forms/model_forms.py:368 +#: netbox/virtualization/models/virtualmachines.py:331 +#: netbox/virtualization/tables/virtualmachines.py:113 msgid "VRF" msgstr "VRF" -#: netbox/dcim/filtersets.py:1619 netbox/ipam/filtersets.py:324 -#: netbox/ipam/filtersets.py:335 netbox/ipam/filtersets.py:491 -#: netbox/ipam/filtersets.py:592 netbox/ipam/filtersets.py:603 +#: netbox/dcim/filtersets.py:1702 netbox/ipam/filtersets.py:327 +#: netbox/ipam/filtersets.py:338 netbox/ipam/filtersets.py:458 +#: netbox/ipam/filtersets.py:559 netbox/ipam/filtersets.py:570 msgid "VRF (RD)" msgstr "VRF (ROSSO)" -#: netbox/dcim/filtersets.py:1624 netbox/ipam/filtersets.py:1032 +#: netbox/dcim/filtersets.py:1707 netbox/ipam/filtersets.py:1010 #: netbox/vpn/filtersets.py:342 msgid "L2VPN (ID)" msgstr "L2VPN (ID)" -#: netbox/dcim/filtersets.py:1630 netbox/dcim/forms/filtersets.py:1433 -#: netbox/dcim/tables/devices.py:570 netbox/ipam/filtersets.py:1038 -#: netbox/ipam/forms/filtersets.py:518 netbox/ipam/tables/vlans.py:137 -#: netbox/templates/dcim/interface.html:93 netbox/templates/ipam/vlan.html:66 +#: netbox/dcim/filtersets.py:1713 netbox/dcim/forms/filtersets.py:1438 +#: netbox/dcim/tables/devices.py:584 netbox/ipam/filtersets.py:1016 +#: netbox/ipam/forms/filtersets.py:570 netbox/ipam/tables/vlans.py:113 +#: netbox/templates/dcim/interface.html:99 netbox/templates/ipam/vlan.html:82 #: netbox/templates/vpn/l2vpntermination.html:12 -#: netbox/virtualization/forms/filtersets.py:233 +#: netbox/virtualization/forms/filtersets.py:238 #: netbox/vpn/forms/bulk_import.py:280 netbox/vpn/forms/filtersets.py:246 -#: netbox/vpn/forms/model_forms.py:409 netbox/vpn/forms/model_forms.py:427 +#: netbox/vpn/forms/model_forms.py:412 netbox/vpn/forms/model_forms.py:430 #: netbox/vpn/models/l2vpn.py:63 netbox/vpn/tables/l2vpn.py:55 msgid "L2VPN" msgstr "L2VPN" -#: netbox/dcim/filtersets.py:1662 +#: netbox/dcim/filtersets.py:1718 netbox/ipam/filtersets.py:1091 +msgid "VLAN Translation Policy (ID)" +msgstr "Politica di traduzione VLAN (ID)" + +#: netbox/dcim/filtersets.py:1724 netbox/dcim/forms/model_forms.py:1428 +#: netbox/dcim/models/device_components.py:568 +#: netbox/ipam/forms/filtersets.py:489 netbox/ipam/forms/model_forms.py:712 +#: netbox/templates/ipam/vlantranslationpolicy.html:11 +#: netbox/virtualization/forms/bulk_edit.py:248 +#: netbox/virtualization/forms/model_forms.py:373 +msgid "VLAN Translation Policy" +msgstr "Politica di traduzione VLAN" + +#: netbox/dcim/filtersets.py:1758 msgid "Virtual Chassis Interfaces for Device" msgstr "Interfacce virtuali dello chassis per dispositivi" -#: netbox/dcim/filtersets.py:1667 +#: netbox/dcim/filtersets.py:1763 msgid "Virtual Chassis Interfaces for Device (ID)" msgstr "Interfacce virtuali dello chassis per dispositivi (ID)" -#: netbox/dcim/filtersets.py:1671 +#: netbox/dcim/filtersets.py:1767 msgid "Kind of interface" msgstr "Tipo di interfaccia" -#: netbox/dcim/filtersets.py:1676 netbox/virtualization/filtersets.py:293 +#: netbox/dcim/filtersets.py:1772 netbox/virtualization/filtersets.py:259 msgid "Parent interface (ID)" msgstr "Interfaccia principale (ID)" -#: netbox/dcim/filtersets.py:1681 netbox/virtualization/filtersets.py:298 +#: netbox/dcim/filtersets.py:1777 netbox/virtualization/filtersets.py:264 msgid "Bridged interface (ID)" msgstr "Interfaccia con ponte (ID)" -#: netbox/dcim/filtersets.py:1686 +#: netbox/dcim/filtersets.py:1782 msgid "LAG interface (ID)" msgstr "Interfaccia LAG (ID)" -#: netbox/dcim/filtersets.py:1713 netbox/dcim/filtersets.py:1725 -#: netbox/dcim/forms/filtersets.py:1345 netbox/dcim/forms/model_forms.py:1697 +#: netbox/dcim/filtersets.py:1790 netbox/dcim/tables/devices.py:606 +#: netbox/dcim/tables/devices.py:1136 netbox/templates/dcim/interface.html:131 +#: netbox/templates/dcim/macaddress.html:11 +#: netbox/templates/dcim/macaddress.html:14 +#: netbox/templates/virtualization/vminterface.html:73 +msgid "MAC Address" +msgstr "Indirizzo MAC" + +#: netbox/dcim/filtersets.py:1795 netbox/virtualization/filtersets.py:273 +msgid "Primary MAC address (ID)" +msgstr "Indirizzo MAC (ID) primario" + +#: netbox/dcim/filtersets.py:1801 netbox/dcim/forms/model_forms.py:1415 +#: netbox/virtualization/filtersets.py:279 +#: netbox/virtualization/forms/model_forms.py:311 +msgid "Primary MAC address" +msgstr "Indirizzo MAC primario" + +#: netbox/dcim/filtersets.py:1823 netbox/dcim/filtersets.py:1835 +#: netbox/dcim/forms/filtersets.py:1350 netbox/dcim/forms/model_forms.py:1742 #: netbox/templates/dcim/virtualdevicecontext.html:15 msgid "Virtual Device Context" msgstr "Contesto del dispositivo virtuale" -#: netbox/dcim/filtersets.py:1719 +#: netbox/dcim/filtersets.py:1829 msgid "Virtual Device Context (Identifier)" msgstr "Contesto del dispositivo virtuale (identificatore)" -#: netbox/dcim/filtersets.py:1730 +#: netbox/dcim/filtersets.py:1840 #: netbox/templates/wireless/wirelesslan.html:11 -#: netbox/wireless/forms/model_forms.py:53 +#: netbox/wireless/forms/model_forms.py:55 msgid "Wireless LAN" msgstr "LAN senza fili" -#: netbox/dcim/filtersets.py:1734 netbox/dcim/tables/devices.py:613 +#: netbox/dcim/filtersets.py:1844 netbox/dcim/tables/devices.py:635 msgid "Wireless link" msgstr "Collegamento wireless" -#: netbox/dcim/filtersets.py:1803 +#: netbox/dcim/filtersets.py:1854 +msgid "Virtual circuit termination (ID)" +msgstr "Terminazione del circuito virtuale (ID)" + +#: netbox/dcim/filtersets.py:1923 msgid "Parent module bay (ID)" msgstr "Alloggiamento del modulo principale (ID)" -#: netbox/dcim/filtersets.py:1808 +#: netbox/dcim/filtersets.py:1928 msgid "Installed module (ID)" msgstr "Modulo installato (ID)" -#: netbox/dcim/filtersets.py:1819 +#: netbox/dcim/filtersets.py:1939 msgid "Installed device (ID)" msgstr "Dispositivo installato (ID)" -#: netbox/dcim/filtersets.py:1825 +#: netbox/dcim/filtersets.py:1945 msgid "Installed device (name)" msgstr "Dispositivo installato (nome)" -#: netbox/dcim/filtersets.py:1891 +#: netbox/dcim/filtersets.py:2015 msgid "Master (ID)" msgstr "Maestro (ID)" -#: netbox/dcim/filtersets.py:1897 +#: netbox/dcim/filtersets.py:2021 msgid "Master (name)" msgstr "Master (nome)" -#: netbox/dcim/filtersets.py:1939 netbox/tenancy/filtersets.py:245 +#: netbox/dcim/filtersets.py:2063 netbox/tenancy/filtersets.py:245 msgid "Tenant (ID)" msgstr "Inquilino (ID)" -#: netbox/dcim/filtersets.py:1945 netbox/extras/filtersets.py:618 +#: netbox/dcim/filtersets.py:2069 netbox/extras/filtersets.py:618 #: netbox/tenancy/filtersets.py:251 msgid "Tenant (slug)" msgstr "Inquilino (slug)" -#: netbox/dcim/filtersets.py:1981 netbox/dcim/forms/filtersets.py:1077 +#: netbox/dcim/filtersets.py:2105 netbox/dcim/forms/filtersets.py:1078 msgid "Unterminated" msgstr "Interminato" -#: netbox/dcim/filtersets.py:2239 +#: netbox/dcim/filtersets.py:2363 msgid "Power panel (ID)" msgstr "Pannello di alimentazione (ID)" -#: netbox/dcim/forms/bulk_create.py:40 netbox/extras/forms/filtersets.py:401 -#: netbox/extras/forms/model_forms.py:567 -#: netbox/extras/forms/model_forms.py:619 netbox/netbox/forms/base.py:86 -#: netbox/netbox/forms/mixins.py:81 netbox/netbox/tables/columns.py:478 +#: netbox/dcim/forms/bulk_create.py:40 netbox/extras/forms/filtersets.py:408 +#: netbox/extras/forms/model_forms.py:581 +#: netbox/extras/forms/model_forms.py:633 netbox/netbox/forms/base.py:86 +#: netbox/netbox/forms/mixins.py:91 netbox/netbox/tables/columns.py:481 #: netbox/templates/circuits/inc/circuit_termination.html:32 #: netbox/templates/generic/bulk_edit.html:65 #: netbox/templates/inc/panels/tags.html:5 @@ -3432,11 +3935,11 @@ msgstr "Pannello di alimentazione (ID)" msgid "Tags" msgstr "Etichette" -#: netbox/dcim/forms/bulk_create.py:112 netbox/dcim/forms/filtersets.py:1498 -#: netbox/dcim/forms/model_forms.py:488 netbox/dcim/forms/model_forms.py:546 +#: netbox/dcim/forms/bulk_create.py:112 netbox/dcim/forms/filtersets.py:1503 +#: netbox/dcim/forms/model_forms.py:498 netbox/dcim/forms/model_forms.py:557 #: netbox/dcim/forms/object_create.py:197 -#: netbox/dcim/forms/object_create.py:345 netbox/dcim/tables/devices.py:165 -#: netbox/dcim/tables/devices.py:707 netbox/dcim/tables/devicetypes.py:246 +#: netbox/dcim/forms/object_create.py:345 netbox/dcim/tables/devices.py:176 +#: netbox/dcim/tables/devices.py:741 netbox/dcim/tables/devicetypes.py:253 #: netbox/templates/dcim/device.html:43 netbox/templates/dcim/device.html:131 #: netbox/templates/dcim/modulebay.html:38 #: netbox/templates/dcim/virtualchassis.html:66 @@ -3452,114 +3955,114 @@ msgstr "" "Sono supportati gli intervalli alfanumerici. (Deve corrispondere al numero " "di nomi da creare.)" -#: netbox/dcim/forms/bulk_edit.py:133 +#: netbox/dcim/forms/bulk_edit.py:136 msgid "Contact name" msgstr "Nome del contatto" -#: netbox/dcim/forms/bulk_edit.py:138 +#: netbox/dcim/forms/bulk_edit.py:141 msgid "Contact phone" msgstr "Telefono di contatto" -#: netbox/dcim/forms/bulk_edit.py:144 +#: netbox/dcim/forms/bulk_edit.py:147 msgid "Contact E-mail" msgstr "E-mail di contatto" -#: netbox/dcim/forms/bulk_edit.py:147 netbox/dcim/forms/bulk_import.py:123 -#: netbox/dcim/forms/model_forms.py:128 +#: netbox/dcim/forms/bulk_edit.py:150 netbox/dcim/forms/bulk_import.py:125 +#: netbox/dcim/forms/model_forms.py:132 msgid "Time zone" msgstr "Fuso orario" -#: netbox/dcim/forms/bulk_edit.py:225 netbox/dcim/forms/bulk_edit.py:501 -#: netbox/dcim/forms/bulk_edit.py:565 netbox/dcim/forms/bulk_edit.py:638 -#: netbox/dcim/forms/bulk_edit.py:662 netbox/dcim/forms/bulk_edit.py:755 -#: netbox/dcim/forms/bulk_edit.py:1282 netbox/dcim/forms/bulk_edit.py:1703 -#: netbox/dcim/forms/bulk_import.py:182 netbox/dcim/forms/bulk_import.py:393 -#: netbox/dcim/forms/bulk_import.py:427 netbox/dcim/forms/bulk_import.py:472 -#: netbox/dcim/forms/bulk_import.py:508 netbox/dcim/forms/bulk_import.py:1104 -#: netbox/dcim/forms/filtersets.py:313 netbox/dcim/forms/filtersets.py:372 -#: netbox/dcim/forms/filtersets.py:494 netbox/dcim/forms/filtersets.py:619 -#: netbox/dcim/forms/filtersets.py:700 netbox/dcim/forms/filtersets.py:782 -#: netbox/dcim/forms/filtersets.py:947 netbox/dcim/forms/filtersets.py:1539 -#: netbox/dcim/forms/model_forms.py:207 netbox/dcim/forms/model_forms.py:337 -#: netbox/dcim/forms/model_forms.py:349 netbox/dcim/forms/model_forms.py:395 -#: netbox/dcim/forms/model_forms.py:436 netbox/dcim/forms/model_forms.py:1082 -#: netbox/dcim/forms/model_forms.py:1522 -#: netbox/dcim/forms/object_import.py:187 netbox/dcim/tables/devices.py:96 -#: netbox/dcim/tables/devices.py:172 netbox/dcim/tables/devices.py:940 -#: netbox/dcim/tables/devicetypes.py:80 netbox/dcim/tables/devicetypes.py:308 +#: netbox/dcim/forms/bulk_edit.py:228 netbox/dcim/forms/bulk_edit.py:504 +#: netbox/dcim/forms/bulk_edit.py:568 netbox/dcim/forms/bulk_edit.py:641 +#: netbox/dcim/forms/bulk_edit.py:665 netbox/dcim/forms/bulk_edit.py:758 +#: netbox/dcim/forms/bulk_edit.py:1285 netbox/dcim/forms/bulk_edit.py:1718 +#: netbox/dcim/forms/bulk_import.py:184 netbox/dcim/forms/bulk_import.py:395 +#: netbox/dcim/forms/bulk_import.py:429 netbox/dcim/forms/bulk_import.py:477 +#: netbox/dcim/forms/bulk_import.py:513 netbox/dcim/forms/bulk_import.py:1112 +#: netbox/dcim/forms/filtersets.py:314 netbox/dcim/forms/filtersets.py:373 +#: netbox/dcim/forms/filtersets.py:495 netbox/dcim/forms/filtersets.py:620 +#: netbox/dcim/forms/filtersets.py:701 netbox/dcim/forms/filtersets.py:783 +#: netbox/dcim/forms/filtersets.py:948 netbox/dcim/forms/filtersets.py:1544 +#: netbox/dcim/forms/model_forms.py:211 netbox/dcim/forms/model_forms.py:345 +#: netbox/dcim/forms/model_forms.py:357 netbox/dcim/forms/model_forms.py:404 +#: netbox/dcim/forms/model_forms.py:445 netbox/dcim/forms/model_forms.py:1095 +#: netbox/dcim/forms/model_forms.py:1564 +#: netbox/dcim/forms/object_import.py:188 netbox/dcim/tables/devices.py:107 +#: netbox/dcim/tables/devices.py:183 netbox/dcim/tables/devices.py:970 +#: netbox/dcim/tables/devicetypes.py:85 netbox/dcim/tables/devicetypes.py:315 #: netbox/dcim/tables/modules.py:20 netbox/dcim/tables/modules.py:61 -#: netbox/dcim/tables/racks.py:58 netbox/dcim/tables/racks.py:132 +#: netbox/dcim/tables/racks.py:58 netbox/dcim/tables/racks.py:131 #: netbox/templates/dcim/devicetype.html:14 -#: netbox/templates/dcim/inventoryitem.html:44 +#: netbox/templates/dcim/inventoryitem.html:48 #: netbox/templates/dcim/manufacturer.html:33 #: netbox/templates/dcim/modulebay.html:62 -#: netbox/templates/dcim/moduletype.html:25 +#: netbox/templates/dcim/moduletype.html:27 #: netbox/templates/dcim/platform.html:37 #: netbox/templates/dcim/racktype.html:16 msgid "Manufacturer" msgstr "Produttore" -#: netbox/dcim/forms/bulk_edit.py:230 netbox/dcim/forms/bulk_edit.py:378 -#: netbox/dcim/forms/bulk_import.py:191 netbox/dcim/forms/bulk_import.py:270 -#: netbox/dcim/forms/filtersets.py:255 +#: netbox/dcim/forms/bulk_edit.py:233 netbox/dcim/forms/bulk_edit.py:381 +#: netbox/dcim/forms/bulk_import.py:193 netbox/dcim/forms/bulk_import.py:272 +#: netbox/dcim/forms/filtersets.py:256 #: netbox/templates/dcim/inc/panels/racktype_dimensions.html:6 msgid "Form factor" msgstr "Fattore di forma" -#: netbox/dcim/forms/bulk_edit.py:235 netbox/dcim/forms/bulk_edit.py:383 -#: netbox/dcim/forms/bulk_import.py:199 netbox/dcim/forms/bulk_import.py:273 -#: netbox/dcim/forms/filtersets.py:260 +#: netbox/dcim/forms/bulk_edit.py:238 netbox/dcim/forms/bulk_edit.py:386 +#: netbox/dcim/forms/bulk_import.py:201 netbox/dcim/forms/bulk_import.py:275 +#: netbox/dcim/forms/filtersets.py:261 #: netbox/templates/dcim/inc/panels/racktype_dimensions.html:10 msgid "Width" msgstr "Larghezza" -#: netbox/dcim/forms/bulk_edit.py:241 netbox/dcim/forms/bulk_edit.py:389 -#: netbox/dcim/forms/bulk_import.py:280 +#: netbox/dcim/forms/bulk_edit.py:244 netbox/dcim/forms/bulk_edit.py:392 +#: netbox/dcim/forms/bulk_import.py:282 #: netbox/templates/dcim/devicetype.html:37 msgid "Height (U)" msgstr "Altezza (U)" -#: netbox/dcim/forms/bulk_edit.py:250 netbox/dcim/forms/bulk_edit.py:394 -#: netbox/dcim/forms/filtersets.py:274 +#: netbox/dcim/forms/bulk_edit.py:253 netbox/dcim/forms/bulk_edit.py:397 +#: netbox/dcim/forms/filtersets.py:275 msgid "Descending units" msgstr "Unità discendenti" -#: netbox/dcim/forms/bulk_edit.py:253 netbox/dcim/forms/bulk_edit.py:397 +#: netbox/dcim/forms/bulk_edit.py:256 netbox/dcim/forms/bulk_edit.py:400 msgid "Outer width" msgstr "Larghezza esterna" -#: netbox/dcim/forms/bulk_edit.py:258 netbox/dcim/forms/bulk_edit.py:402 +#: netbox/dcim/forms/bulk_edit.py:261 netbox/dcim/forms/bulk_edit.py:405 msgid "Outer depth" msgstr "Profondità esterna" -#: netbox/dcim/forms/bulk_edit.py:263 netbox/dcim/forms/bulk_edit.py:407 -#: netbox/dcim/forms/bulk_import.py:204 netbox/dcim/forms/bulk_import.py:283 +#: netbox/dcim/forms/bulk_edit.py:266 netbox/dcim/forms/bulk_edit.py:410 +#: netbox/dcim/forms/bulk_import.py:206 netbox/dcim/forms/bulk_import.py:285 msgid "Outer unit" msgstr "Unità esterna" -#: netbox/dcim/forms/bulk_edit.py:268 netbox/dcim/forms/bulk_edit.py:412 +#: netbox/dcim/forms/bulk_edit.py:271 netbox/dcim/forms/bulk_edit.py:415 msgid "Mounting depth" msgstr "Profondità di montaggio" -#: netbox/dcim/forms/bulk_edit.py:273 netbox/dcim/forms/bulk_edit.py:300 -#: netbox/dcim/forms/bulk_edit.py:422 netbox/dcim/forms/bulk_edit.py:452 -#: netbox/dcim/forms/bulk_edit.py:535 netbox/dcim/forms/bulk_edit.py:558 -#: netbox/dcim/forms/bulk_edit.py:579 netbox/dcim/forms/bulk_edit.py:601 -#: netbox/dcim/forms/bulk_import.py:406 netbox/dcim/forms/bulk_import.py:438 -#: netbox/dcim/forms/filtersets.py:285 netbox/dcim/forms/filtersets.py:307 -#: netbox/dcim/forms/filtersets.py:327 netbox/dcim/forms/filtersets.py:401 -#: netbox/dcim/forms/filtersets.py:488 netbox/dcim/forms/filtersets.py:594 -#: netbox/dcim/forms/filtersets.py:613 netbox/dcim/forms/filtersets.py:674 -#: netbox/dcim/forms/model_forms.py:221 netbox/dcim/forms/model_forms.py:298 -#: netbox/dcim/tables/devicetypes.py:106 netbox/dcim/tables/modules.py:35 -#: netbox/dcim/tables/racks.py:74 netbox/dcim/tables/racks.py:172 +#: netbox/dcim/forms/bulk_edit.py:276 netbox/dcim/forms/bulk_edit.py:303 +#: netbox/dcim/forms/bulk_edit.py:425 netbox/dcim/forms/bulk_edit.py:455 +#: netbox/dcim/forms/bulk_edit.py:538 netbox/dcim/forms/bulk_edit.py:561 +#: netbox/dcim/forms/bulk_edit.py:582 netbox/dcim/forms/bulk_edit.py:604 +#: netbox/dcim/forms/bulk_import.py:408 netbox/dcim/forms/bulk_import.py:440 +#: netbox/dcim/forms/filtersets.py:286 netbox/dcim/forms/filtersets.py:308 +#: netbox/dcim/forms/filtersets.py:328 netbox/dcim/forms/filtersets.py:402 +#: netbox/dcim/forms/filtersets.py:489 netbox/dcim/forms/filtersets.py:595 +#: netbox/dcim/forms/filtersets.py:614 netbox/dcim/forms/filtersets.py:675 +#: netbox/dcim/forms/model_forms.py:226 netbox/dcim/forms/model_forms.py:306 +#: netbox/dcim/tables/devicetypes.py:111 netbox/dcim/tables/modules.py:35 +#: netbox/dcim/tables/racks.py:74 netbox/dcim/tables/racks.py:171 #: netbox/extras/forms/bulk_edit.py:53 netbox/extras/forms/bulk_edit.py:133 #: netbox/extras/forms/bulk_edit.py:183 netbox/extras/forms/bulk_edit.py:288 -#: netbox/extras/forms/filtersets.py:64 netbox/extras/forms/filtersets.py:156 -#: netbox/extras/forms/filtersets.py:243 netbox/ipam/forms/bulk_edit.py:190 +#: netbox/extras/forms/filtersets.py:65 netbox/extras/forms/filtersets.py:159 +#: netbox/extras/forms/filtersets.py:249 netbox/ipam/forms/bulk_edit.py:193 #: netbox/templates/dcim/device.html:324 #: netbox/templates/dcim/devicetype.html:49 -#: netbox/templates/dcim/moduletype.html:45 netbox/templates/dcim/rack.html:81 +#: netbox/templates/dcim/moduletype.html:47 netbox/templates/dcim/rack.html:81 #: netbox/templates/dcim/racktype.html:41 #: netbox/templates/extras/configcontext.html:17 #: netbox/templates/extras/customlink.html:25 @@ -3568,131 +4071,86 @@ msgstr "Profondità di montaggio" msgid "Weight" msgstr "Peso" -#: netbox/dcim/forms/bulk_edit.py:278 netbox/dcim/forms/bulk_edit.py:427 -#: netbox/dcim/forms/filtersets.py:290 +#: netbox/dcim/forms/bulk_edit.py:281 netbox/dcim/forms/bulk_edit.py:430 +#: netbox/dcim/forms/filtersets.py:291 msgid "Max weight" msgstr "Peso massimo" -#: netbox/dcim/forms/bulk_edit.py:283 netbox/dcim/forms/bulk_edit.py:432 -#: netbox/dcim/forms/bulk_edit.py:540 netbox/dcim/forms/bulk_edit.py:584 -#: netbox/dcim/forms/bulk_import.py:210 netbox/dcim/forms/bulk_import.py:295 -#: netbox/dcim/forms/bulk_import.py:411 netbox/dcim/forms/bulk_import.py:443 -#: netbox/dcim/forms/filtersets.py:295 netbox/dcim/forms/filtersets.py:598 -#: netbox/dcim/forms/filtersets.py:678 +#: netbox/dcim/forms/bulk_edit.py:286 netbox/dcim/forms/bulk_edit.py:435 +#: netbox/dcim/forms/bulk_edit.py:543 netbox/dcim/forms/bulk_edit.py:587 +#: netbox/dcim/forms/bulk_import.py:212 netbox/dcim/forms/bulk_import.py:297 +#: netbox/dcim/forms/bulk_import.py:413 netbox/dcim/forms/bulk_import.py:445 +#: netbox/dcim/forms/filtersets.py:296 netbox/dcim/forms/filtersets.py:599 +#: netbox/dcim/forms/filtersets.py:679 msgid "Weight unit" msgstr "Unità di peso" -#: netbox/dcim/forms/bulk_edit.py:297 netbox/dcim/forms/filtersets.py:305 -#: netbox/dcim/forms/model_forms.py:217 netbox/dcim/forms/model_forms.py:256 +#: netbox/dcim/forms/bulk_edit.py:300 netbox/dcim/forms/filtersets.py:306 +#: netbox/dcim/forms/model_forms.py:222 netbox/dcim/forms/model_forms.py:261 #: netbox/templates/dcim/rack.html:45 netbox/templates/dcim/racktype.html:13 msgid "Rack Type" msgstr "Tipo di rack" -#: netbox/dcim/forms/bulk_edit.py:299 netbox/dcim/forms/model_forms.py:220 -#: netbox/dcim/forms/model_forms.py:297 +#: netbox/dcim/forms/bulk_edit.py:302 netbox/dcim/forms/model_forms.py:225 +#: netbox/dcim/forms/model_forms.py:305 msgid "Outer Dimensions" msgstr "Dimensioni esterne" -#: netbox/dcim/forms/bulk_edit.py:302 netbox/dcim/forms/model_forms.py:222 -#: netbox/dcim/forms/model_forms.py:299 netbox/templates/dcim/device.html:315 +#: netbox/dcim/forms/bulk_edit.py:305 netbox/dcim/forms/model_forms.py:227 +#: netbox/dcim/forms/model_forms.py:307 netbox/templates/dcim/device.html:315 #: netbox/templates/dcim/inc/panels/racktype_dimensions.html:3 msgid "Dimensions" msgstr "Dimensioni" -#: netbox/dcim/forms/bulk_edit.py:304 netbox/dcim/forms/filtersets.py:306 -#: netbox/dcim/forms/filtersets.py:326 netbox/dcim/forms/model_forms.py:224 +#: netbox/dcim/forms/bulk_edit.py:307 netbox/dcim/forms/filtersets.py:307 +#: netbox/dcim/forms/filtersets.py:327 netbox/dcim/forms/model_forms.py:229 #: netbox/templates/dcim/inc/panels/racktype_numbering.html:3 msgid "Numbering" msgstr "Numerazione" -#: netbox/dcim/forms/bulk_edit.py:358 netbox/dcim/forms/bulk_edit.py:1277 -#: netbox/dcim/forms/bulk_edit.py:1698 netbox/dcim/forms/bulk_import.py:253 -#: netbox/dcim/forms/bulk_import.py:1098 netbox/dcim/forms/filtersets.py:367 -#: netbox/dcim/forms/filtersets.py:777 netbox/dcim/forms/filtersets.py:1534 -#: netbox/dcim/forms/model_forms.py:251 netbox/dcim/forms/model_forms.py:1077 -#: netbox/dcim/forms/model_forms.py:1517 -#: netbox/dcim/forms/object_import.py:181 netbox/dcim/tables/devices.py:169 -#: netbox/dcim/tables/devices.py:809 netbox/dcim/tables/devices.py:937 -#: netbox/dcim/tables/devicetypes.py:304 netbox/dcim/tables/racks.py:129 -#: netbox/extras/filtersets.py:552 netbox/ipam/forms/bulk_edit.py:261 -#: netbox/ipam/forms/bulk_edit.py:311 netbox/ipam/forms/bulk_edit.py:359 -#: netbox/ipam/forms/bulk_edit.py:511 netbox/ipam/forms/bulk_import.py:197 -#: netbox/ipam/forms/bulk_import.py:262 netbox/ipam/forms/bulk_import.py:298 -#: netbox/ipam/forms/bulk_import.py:479 netbox/ipam/forms/filtersets.py:237 -#: netbox/ipam/forms/filtersets.py:289 netbox/ipam/forms/filtersets.py:360 -#: netbox/ipam/forms/filtersets.py:509 netbox/ipam/forms/model_forms.py:188 -#: netbox/ipam/forms/model_forms.py:221 netbox/ipam/forms/model_forms.py:250 -#: netbox/ipam/forms/model_forms.py:676 netbox/ipam/tables/ip.py:258 -#: netbox/ipam/tables/ip.py:316 netbox/ipam/tables/ip.py:367 -#: netbox/ipam/tables/vlans.py:130 netbox/ipam/tables/vlans.py:235 -#: netbox/templates/dcim/device.html:182 -#: netbox/templates/dcim/inc/panels/inventory_items.html:20 -#: netbox/templates/dcim/interface.html:223 -#: netbox/templates/dcim/inventoryitem.html:36 -#: netbox/templates/dcim/rack.html:49 netbox/templates/ipam/ipaddress.html:41 -#: netbox/templates/ipam/iprange.html:50 netbox/templates/ipam/prefix.html:77 -#: netbox/templates/ipam/role.html:19 netbox/templates/ipam/vlan.html:52 -#: netbox/templates/virtualization/virtualmachine.html:23 -#: netbox/templates/vpn/tunneltermination.html:17 -#: netbox/templates/wireless/inc/wirelesslink_interface.html:20 -#: netbox/tenancy/forms/bulk_edit.py:142 -#: netbox/tenancy/forms/filtersets.py:107 -#: netbox/tenancy/forms/model_forms.py:137 -#: netbox/tenancy/tables/contacts.py:102 -#: netbox/virtualization/forms/bulk_edit.py:145 -#: netbox/virtualization/forms/bulk_import.py:106 -#: netbox/virtualization/forms/filtersets.py:157 -#: netbox/virtualization/forms/model_forms.py:195 -#: netbox/virtualization/tables/virtualmachines.py:75 -#: netbox/vpn/forms/bulk_edit.py:87 netbox/vpn/forms/bulk_import.py:81 -#: netbox/vpn/forms/filtersets.py:85 netbox/vpn/forms/model_forms.py:78 -#: netbox/vpn/forms/model_forms.py:113 netbox/vpn/tables/tunnels.py:82 -msgid "Role" -msgstr "Ruolo" - -#: netbox/dcim/forms/bulk_edit.py:363 netbox/dcim/forms/bulk_import.py:260 -#: netbox/dcim/forms/filtersets.py:380 +#: netbox/dcim/forms/bulk_edit.py:366 netbox/dcim/forms/bulk_import.py:262 +#: netbox/dcim/forms/filtersets.py:381 msgid "Rack type" msgstr "Tipo di rack" -#: netbox/dcim/forms/bulk_edit.py:370 netbox/dcim/forms/bulk_edit.py:718 -#: netbox/dcim/forms/bulk_edit.py:779 netbox/templates/dcim/device.html:104 +#: netbox/dcim/forms/bulk_edit.py:373 netbox/dcim/forms/bulk_edit.py:721 +#: netbox/dcim/forms/bulk_edit.py:782 netbox/templates/dcim/device.html:104 #: netbox/templates/dcim/module.html:77 #: netbox/templates/dcim/modulebay.html:70 netbox/templates/dcim/rack.html:57 #: netbox/templates/virtualization/virtualmachine.html:35 msgid "Serial Number" msgstr "Numero di serie" -#: netbox/dcim/forms/bulk_edit.py:373 netbox/dcim/forms/filtersets.py:387 -#: netbox/dcim/forms/filtersets.py:813 netbox/dcim/forms/filtersets.py:967 -#: netbox/dcim/forms/filtersets.py:1546 +#: netbox/dcim/forms/bulk_edit.py:376 netbox/dcim/forms/filtersets.py:388 +#: netbox/dcim/forms/filtersets.py:814 netbox/dcim/forms/filtersets.py:968 +#: netbox/dcim/forms/filtersets.py:1551 msgid "Asset tag" msgstr "Etichetta dell'asset" -#: netbox/dcim/forms/bulk_edit.py:417 netbox/dcim/forms/bulk_edit.py:530 -#: netbox/dcim/forms/bulk_edit.py:574 netbox/dcim/forms/bulk_edit.py:711 -#: netbox/dcim/forms/bulk_import.py:289 netbox/dcim/forms/bulk_import.py:432 -#: netbox/dcim/forms/bulk_import.py:602 netbox/dcim/forms/filtersets.py:280 -#: netbox/dcim/forms/filtersets.py:511 netbox/dcim/forms/filtersets.py:669 -#: netbox/dcim/forms/filtersets.py:804 netbox/templates/dcim/device.html:98 +#: netbox/dcim/forms/bulk_edit.py:420 netbox/dcim/forms/bulk_edit.py:533 +#: netbox/dcim/forms/bulk_edit.py:577 netbox/dcim/forms/bulk_edit.py:714 +#: netbox/dcim/forms/bulk_import.py:291 netbox/dcim/forms/bulk_import.py:434 +#: netbox/dcim/forms/bulk_import.py:607 netbox/dcim/forms/filtersets.py:281 +#: netbox/dcim/forms/filtersets.py:512 netbox/dcim/forms/filtersets.py:670 +#: netbox/dcim/forms/filtersets.py:805 netbox/templates/dcim/device.html:98 #: netbox/templates/dcim/devicetype.html:65 -#: netbox/templates/dcim/moduletype.html:41 netbox/templates/dcim/rack.html:65 +#: netbox/templates/dcim/moduletype.html:43 netbox/templates/dcim/rack.html:65 #: netbox/templates/dcim/racktype.html:28 msgid "Airflow" msgstr "Flusso d'aria" -#: netbox/dcim/forms/bulk_edit.py:446 netbox/dcim/forms/bulk_edit.py:925 -#: netbox/dcim/forms/bulk_import.py:344 netbox/dcim/forms/bulk_import.py:347 -#: netbox/dcim/forms/bulk_import.py:575 netbox/dcim/forms/bulk_import.py:1380 -#: netbox/dcim/forms/bulk_import.py:1384 netbox/dcim/forms/filtersets.py:104 -#: netbox/dcim/forms/filtersets.py:324 netbox/dcim/forms/filtersets.py:405 -#: netbox/dcim/forms/filtersets.py:419 netbox/dcim/forms/filtersets.py:457 -#: netbox/dcim/forms/filtersets.py:772 netbox/dcim/forms/filtersets.py:1035 -#: netbox/dcim/forms/filtersets.py:1167 netbox/dcim/forms/model_forms.py:264 -#: netbox/dcim/forms/model_forms.py:306 netbox/dcim/forms/model_forms.py:479 -#: netbox/dcim/forms/model_forms.py:755 netbox/dcim/forms/object_create.py:392 -#: netbox/dcim/tables/devices.py:161 netbox/dcim/tables/power.py:70 -#: netbox/dcim/tables/racks.py:217 netbox/ipam/forms/filtersets.py:442 +#: netbox/dcim/forms/bulk_edit.py:449 netbox/dcim/forms/bulk_edit.py:928 +#: netbox/dcim/forms/bulk_import.py:346 netbox/dcim/forms/bulk_import.py:349 +#: netbox/dcim/forms/bulk_import.py:580 netbox/dcim/forms/bulk_import.py:1477 +#: netbox/dcim/forms/bulk_import.py:1481 netbox/dcim/forms/filtersets.py:105 +#: netbox/dcim/forms/filtersets.py:325 netbox/dcim/forms/filtersets.py:406 +#: netbox/dcim/forms/filtersets.py:420 netbox/dcim/forms/filtersets.py:458 +#: netbox/dcim/forms/filtersets.py:773 netbox/dcim/forms/filtersets.py:1036 +#: netbox/dcim/forms/filtersets.py:1168 netbox/dcim/forms/model_forms.py:271 +#: netbox/dcim/forms/model_forms.py:314 netbox/dcim/forms/model_forms.py:489 +#: netbox/dcim/forms/model_forms.py:767 netbox/dcim/forms/object_create.py:392 +#: netbox/dcim/tables/devices.py:172 netbox/dcim/tables/power.py:70 +#: netbox/dcim/tables/racks.py:216 netbox/ipam/forms/filtersets.py:445 #: netbox/templates/dcim/device.html:30 #: netbox/templates/dcim/inc/cable_termination.html:16 #: netbox/templates/dcim/powerfeed.html:28 netbox/templates/dcim/rack.html:13 @@ -3703,212 +4161,144 @@ msgstr "Flusso d'aria" msgid "Rack" msgstr "cremagliera" -#: netbox/dcim/forms/bulk_edit.py:450 netbox/dcim/forms/bulk_edit.py:744 -#: netbox/dcim/forms/filtersets.py:325 netbox/dcim/forms/filtersets.py:398 -#: netbox/dcim/forms/filtersets.py:481 netbox/dcim/forms/filtersets.py:608 -#: netbox/dcim/forms/filtersets.py:721 netbox/dcim/forms/filtersets.py:942 -#: netbox/dcim/forms/model_forms.py:670 netbox/dcim/forms/model_forms.py:1587 +#: netbox/dcim/forms/bulk_edit.py:453 netbox/dcim/forms/bulk_edit.py:747 +#: netbox/dcim/forms/filtersets.py:326 netbox/dcim/forms/filtersets.py:399 +#: netbox/dcim/forms/filtersets.py:482 netbox/dcim/forms/filtersets.py:609 +#: netbox/dcim/forms/filtersets.py:722 netbox/dcim/forms/filtersets.py:943 +#: netbox/dcim/forms/model_forms.py:681 netbox/dcim/forms/model_forms.py:1632 #: netbox/templates/dcim/device_edit.html:20 msgid "Hardware" msgstr "Hardware" -#: netbox/dcim/forms/bulk_edit.py:506 netbox/dcim/forms/bulk_import.py:399 -#: netbox/dcim/forms/filtersets.py:499 netbox/dcim/forms/model_forms.py:353 +#: netbox/dcim/forms/bulk_edit.py:509 netbox/dcim/forms/bulk_import.py:401 +#: netbox/dcim/forms/filtersets.py:500 netbox/dcim/forms/model_forms.py:362 msgid "Default platform" msgstr "Piattaforma predefinita" -#: netbox/dcim/forms/bulk_edit.py:511 netbox/dcim/forms/bulk_edit.py:570 -#: netbox/dcim/forms/filtersets.py:502 netbox/dcim/forms/filtersets.py:622 +#: netbox/dcim/forms/bulk_edit.py:514 netbox/dcim/forms/bulk_edit.py:573 +#: netbox/dcim/forms/filtersets.py:503 netbox/dcim/forms/filtersets.py:623 msgid "Part number" msgstr "Numero del pezzo" -#: netbox/dcim/forms/bulk_edit.py:515 +#: netbox/dcim/forms/bulk_edit.py:518 msgid "U height" msgstr "Altezza U" -#: netbox/dcim/forms/bulk_edit.py:527 netbox/dcim/tables/devicetypes.py:102 +#: netbox/dcim/forms/bulk_edit.py:530 netbox/dcim/tables/devicetypes.py:107 msgid "Exclude from utilization" msgstr "Escludi dall'utilizzo" -#: netbox/dcim/forms/bulk_edit.py:556 netbox/dcim/forms/model_forms.py:368 -#: netbox/dcim/tables/devicetypes.py:77 netbox/templates/dcim/device.html:88 +#: netbox/dcim/forms/bulk_edit.py:559 netbox/dcim/forms/model_forms.py:377 +#: netbox/dcim/tables/devicetypes.py:82 netbox/templates/dcim/device.html:88 #: netbox/templates/dcim/devicebay.html:52 #: netbox/templates/dcim/module.html:61 msgid "Device Type" msgstr "Tipo di dispositivo" -#: netbox/dcim/forms/bulk_edit.py:598 netbox/dcim/forms/model_forms.py:401 +#: netbox/dcim/forms/bulk_edit.py:601 netbox/dcim/forms/model_forms.py:410 #: netbox/dcim/tables/modules.py:17 netbox/dcim/tables/modules.py:66 #: netbox/templates/dcim/module.html:65 #: netbox/templates/dcim/modulebay.html:66 -#: netbox/templates/dcim/moduletype.html:22 +#: netbox/templates/dcim/moduletype.html:24 msgid "Module Type" msgstr "Tipo di modulo" -#: netbox/dcim/forms/bulk_edit.py:602 netbox/dcim/forms/model_forms.py:371 -#: netbox/dcim/forms/model_forms.py:402 +#: netbox/dcim/forms/bulk_edit.py:605 netbox/dcim/forms/model_forms.py:380 +#: netbox/dcim/forms/model_forms.py:411 #: netbox/templates/dcim/devicetype.html:11 msgid "Chassis" msgstr "Telaio" -#: netbox/dcim/forms/bulk_edit.py:616 netbox/dcim/models/devices.py:484 -#: netbox/dcim/tables/devices.py:67 +#: netbox/dcim/forms/bulk_edit.py:619 netbox/dcim/models/devices.py:483 +#: netbox/dcim/tables/devices.py:78 msgid "VM role" msgstr "Ruolo VM" -#: netbox/dcim/forms/bulk_edit.py:619 netbox/dcim/forms/bulk_edit.py:643 -#: netbox/dcim/forms/bulk_edit.py:726 netbox/dcim/forms/bulk_import.py:456 -#: netbox/dcim/forms/bulk_import.py:460 netbox/dcim/forms/bulk_import.py:479 -#: netbox/dcim/forms/bulk_import.py:483 netbox/dcim/forms/bulk_import.py:608 -#: netbox/dcim/forms/bulk_import.py:612 netbox/dcim/forms/filtersets.py:689 -#: netbox/dcim/forms/filtersets.py:705 netbox/dcim/forms/filtersets.py:823 -#: netbox/dcim/forms/model_forms.py:415 netbox/dcim/forms/model_forms.py:441 -#: netbox/dcim/forms/model_forms.py:555 -#: netbox/virtualization/forms/bulk_import.py:132 -#: netbox/virtualization/forms/bulk_import.py:133 -#: netbox/virtualization/forms/filtersets.py:188 -#: netbox/virtualization/forms/model_forms.py:215 +#: netbox/dcim/forms/bulk_edit.py:622 netbox/dcim/forms/bulk_edit.py:646 +#: netbox/dcim/forms/bulk_edit.py:729 netbox/dcim/forms/bulk_import.py:461 +#: netbox/dcim/forms/bulk_import.py:465 netbox/dcim/forms/bulk_import.py:484 +#: netbox/dcim/forms/bulk_import.py:488 netbox/dcim/forms/bulk_import.py:613 +#: netbox/dcim/forms/bulk_import.py:617 netbox/dcim/forms/filtersets.py:690 +#: netbox/dcim/forms/filtersets.py:706 netbox/dcim/forms/filtersets.py:824 +#: netbox/dcim/forms/model_forms.py:424 netbox/dcim/forms/model_forms.py:451 +#: netbox/dcim/forms/model_forms.py:566 +#: netbox/virtualization/forms/bulk_import.py:138 +#: netbox/virtualization/forms/bulk_import.py:139 +#: netbox/virtualization/forms/filtersets.py:193 +#: netbox/virtualization/forms/model_forms.py:222 msgid "Config template" msgstr "Modello di configurazione" -#: netbox/dcim/forms/bulk_edit.py:667 netbox/dcim/forms/bulk_edit.py:1076 -#: netbox/dcim/forms/bulk_import.py:514 netbox/dcim/forms/filtersets.py:114 -#: netbox/dcim/forms/model_forms.py:501 netbox/dcim/forms/model_forms.py:872 -#: netbox/dcim/forms/model_forms.py:889 netbox/extras/filtersets.py:547 +#: netbox/dcim/forms/bulk_edit.py:670 netbox/dcim/forms/bulk_edit.py:1079 +#: netbox/dcim/forms/bulk_import.py:519 netbox/dcim/forms/filtersets.py:115 +#: netbox/dcim/forms/model_forms.py:511 netbox/dcim/forms/model_forms.py:884 +#: netbox/dcim/forms/model_forms.py:901 netbox/extras/filtersets.py:547 msgid "Device type" msgstr "Tipo di dispositivo" -#: netbox/dcim/forms/bulk_edit.py:678 netbox/dcim/forms/bulk_import.py:495 -#: netbox/dcim/forms/filtersets.py:119 netbox/dcim/forms/model_forms.py:509 +#: netbox/dcim/forms/bulk_edit.py:681 netbox/dcim/forms/bulk_import.py:500 +#: netbox/dcim/forms/filtersets.py:120 netbox/dcim/forms/model_forms.py:519 msgid "Device role" msgstr "Ruolo del dispositivo" -#: netbox/dcim/forms/bulk_edit.py:701 netbox/dcim/forms/bulk_import.py:520 -#: netbox/dcim/forms/filtersets.py:796 netbox/dcim/forms/model_forms.py:451 -#: netbox/dcim/forms/model_forms.py:513 netbox/dcim/tables/devices.py:182 +#: netbox/dcim/forms/bulk_edit.py:704 netbox/dcim/forms/bulk_import.py:525 +#: netbox/dcim/forms/filtersets.py:797 netbox/dcim/forms/model_forms.py:461 +#: netbox/dcim/forms/model_forms.py:524 netbox/dcim/tables/devices.py:193 #: netbox/extras/filtersets.py:563 netbox/templates/dcim/device.html:186 #: netbox/templates/dcim/platform.html:26 #: netbox/templates/virtualization/virtualmachine.html:27 -#: netbox/virtualization/forms/bulk_edit.py:160 -#: netbox/virtualization/forms/bulk_import.py:122 -#: netbox/virtualization/forms/filtersets.py:168 -#: netbox/virtualization/forms/model_forms.py:203 -#: netbox/virtualization/tables/virtualmachines.py:79 +#: netbox/virtualization/forms/bulk_edit.py:142 +#: netbox/virtualization/forms/bulk_import.py:128 +#: netbox/virtualization/forms/filtersets.py:173 +#: netbox/virtualization/forms/model_forms.py:210 +#: netbox/virtualization/tables/virtualmachines.py:49 msgid "Platform" msgstr "piattaforma" -#: netbox/dcim/forms/bulk_edit.py:731 netbox/dcim/forms/bulk_import.py:539 -#: netbox/dcim/forms/filtersets.py:728 netbox/dcim/forms/filtersets.py:898 -#: netbox/dcim/forms/model_forms.py:522 netbox/dcim/tables/devices.py:202 -#: netbox/extras/filtersets.py:596 netbox/extras/forms/filtersets.py:322 -#: netbox/ipam/forms/filtersets.py:415 netbox/ipam/forms/filtersets.py:447 +#: netbox/dcim/forms/bulk_edit.py:734 netbox/dcim/forms/bulk_import.py:544 +#: netbox/dcim/forms/filtersets.py:729 netbox/dcim/forms/filtersets.py:899 +#: netbox/dcim/forms/model_forms.py:533 netbox/dcim/tables/devices.py:213 +#: netbox/extras/filtersets.py:596 netbox/extras/forms/filtersets.py:329 +#: netbox/ipam/forms/filtersets.py:418 netbox/ipam/forms/filtersets.py:450 #: netbox/templates/dcim/device.html:239 #: netbox/templates/virtualization/cluster.html:10 #: netbox/templates/virtualization/virtualmachine.html:92 #: netbox/templates/virtualization/virtualmachine.html:101 -#: netbox/virtualization/filtersets.py:157 -#: netbox/virtualization/filtersets.py:277 -#: netbox/virtualization/forms/bulk_edit.py:129 -#: netbox/virtualization/forms/bulk_import.py:92 -#: netbox/virtualization/forms/filtersets.py:99 -#: netbox/virtualization/forms/filtersets.py:123 -#: netbox/virtualization/forms/filtersets.py:204 -#: netbox/virtualization/forms/model_forms.py:79 -#: netbox/virtualization/forms/model_forms.py:176 -#: netbox/virtualization/tables/virtualmachines.py:67 +#: netbox/virtualization/filtersets.py:123 +#: netbox/virtualization/filtersets.py:243 +#: netbox/virtualization/forms/bulk_edit.py:111 +#: netbox/virtualization/forms/bulk_import.py:98 +#: netbox/virtualization/forms/filtersets.py:104 +#: netbox/virtualization/forms/filtersets.py:128 +#: netbox/virtualization/forms/filtersets.py:209 +#: netbox/virtualization/forms/model_forms.py:78 +#: netbox/virtualization/forms/model_forms.py:183 +#: netbox/virtualization/tables/virtualmachines.py:37 msgid "Cluster" msgstr "Grappolo" -#: netbox/dcim/forms/bulk_edit.py:742 netbox/dcim/forms/bulk_edit.py:1296 -#: netbox/dcim/forms/bulk_edit.py:1693 netbox/dcim/forms/bulk_edit.py:1739 -#: netbox/dcim/forms/bulk_import.py:663 netbox/dcim/forms/bulk_import.py:725 -#: netbox/dcim/forms/bulk_import.py:751 netbox/dcim/forms/bulk_import.py:777 -#: netbox/dcim/forms/bulk_import.py:797 netbox/dcim/forms/bulk_import.py:850 -#: netbox/dcim/forms/bulk_import.py:968 netbox/dcim/forms/bulk_import.py:1016 -#: netbox/dcim/forms/bulk_import.py:1033 netbox/dcim/forms/bulk_import.py:1045 -#: netbox/dcim/forms/bulk_import.py:1093 netbox/dcim/forms/bulk_import.py:1444 -#: netbox/dcim/forms/connections.py:24 netbox/dcim/forms/filtersets.py:131 -#: netbox/dcim/forms/filtersets.py:921 netbox/dcim/forms/filtersets.py:1051 -#: netbox/dcim/forms/filtersets.py:1242 netbox/dcim/forms/filtersets.py:1267 -#: netbox/dcim/forms/filtersets.py:1291 netbox/dcim/forms/filtersets.py:1311 -#: netbox/dcim/forms/filtersets.py:1334 netbox/dcim/forms/filtersets.py:1444 -#: netbox/dcim/forms/filtersets.py:1469 netbox/dcim/forms/filtersets.py:1493 -#: netbox/dcim/forms/filtersets.py:1511 netbox/dcim/forms/filtersets.py:1528 -#: netbox/dcim/forms/filtersets.py:1592 netbox/dcim/forms/filtersets.py:1616 -#: netbox/dcim/forms/filtersets.py:1640 netbox/dcim/forms/model_forms.py:633 -#: netbox/dcim/forms/model_forms.py:849 netbox/dcim/forms/model_forms.py:1215 -#: netbox/dcim/forms/model_forms.py:1671 -#: netbox/dcim/forms/object_create.py:249 netbox/dcim/tables/connections.py:22 -#: netbox/dcim/tables/connections.py:41 netbox/dcim/tables/connections.py:60 -#: netbox/dcim/tables/devices.py:285 netbox/dcim/tables/devices.py:371 -#: netbox/dcim/tables/devices.py:412 netbox/dcim/tables/devices.py:454 -#: netbox/dcim/tables/devices.py:505 netbox/dcim/tables/devices.py:597 -#: netbox/dcim/tables/devices.py:697 netbox/dcim/tables/devices.py:754 -#: netbox/dcim/tables/devices.py:801 netbox/dcim/tables/devices.py:861 -#: netbox/dcim/tables/devices.py:930 netbox/dcim/tables/devices.py:1057 -#: netbox/dcim/tables/modules.py:53 netbox/extras/forms/filtersets.py:321 -#: netbox/ipam/forms/bulk_import.py:304 netbox/ipam/forms/bulk_import.py:505 -#: netbox/ipam/forms/filtersets.py:551 netbox/ipam/forms/model_forms.py:323 -#: netbox/ipam/forms/model_forms.py:712 netbox/ipam/forms/model_forms.py:745 -#: netbox/ipam/forms/model_forms.py:771 netbox/ipam/tables/vlans.py:180 -#: netbox/templates/dcim/consoleport.html:20 -#: netbox/templates/dcim/consoleserverport.html:20 -#: netbox/templates/dcim/device.html:15 netbox/templates/dcim/device.html:130 -#: netbox/templates/dcim/device_edit.html:10 -#: netbox/templates/dcim/devicebay.html:20 -#: netbox/templates/dcim/devicebay.html:48 -#: netbox/templates/dcim/frontport.html:20 -#: netbox/templates/dcim/interface.html:30 -#: netbox/templates/dcim/interface.html:161 -#: netbox/templates/dcim/inventoryitem.html:20 -#: netbox/templates/dcim/module.html:57 -#: netbox/templates/dcim/modulebay.html:20 -#: netbox/templates/dcim/poweroutlet.html:20 -#: netbox/templates/dcim/powerport.html:20 -#: netbox/templates/dcim/rearport.html:20 -#: netbox/templates/dcim/virtualchassis.html:65 -#: netbox/templates/dcim/virtualchassis_edit.html:51 -#: netbox/templates/dcim/virtualdevicecontext.html:22 -#: netbox/templates/virtualization/virtualmachine.html:114 -#: netbox/templates/vpn/tunneltermination.html:23 -#: netbox/templates/wireless/inc/wirelesslink_interface.html:6 -#: netbox/virtualization/filtersets.py:167 -#: netbox/virtualization/forms/bulk_edit.py:137 -#: netbox/virtualization/forms/bulk_import.py:99 -#: netbox/virtualization/forms/filtersets.py:128 -#: netbox/virtualization/forms/model_forms.py:185 -#: netbox/virtualization/tables/virtualmachines.py:71 netbox/vpn/choices.py:52 -#: netbox/vpn/forms/bulk_import.py:86 netbox/vpn/forms/bulk_import.py:283 -#: netbox/vpn/forms/filtersets.py:275 netbox/vpn/forms/model_forms.py:90 -#: netbox/vpn/forms/model_forms.py:125 netbox/vpn/forms/model_forms.py:236 -#: netbox/vpn/forms/model_forms.py:453 netbox/wireless/forms/model_forms.py:99 -#: netbox/wireless/forms/model_forms.py:141 -#: netbox/wireless/tables/wirelesslan.py:75 -msgid "Device" -msgstr "Dispositivo" - -#: netbox/dcim/forms/bulk_edit.py:745 +#: netbox/dcim/forms/bulk_edit.py:748 #: netbox/templates/extras/dashboard/widget_config.html:7 -#: netbox/virtualization/forms/bulk_edit.py:191 +#: netbox/virtualization/forms/bulk_edit.py:173 msgid "Configuration" msgstr "Configurazione" -#: netbox/dcim/forms/bulk_edit.py:746 netbox/netbox/navigation/menu.py:243 +#: netbox/dcim/forms/bulk_edit.py:749 netbox/netbox/navigation/menu.py:251 #: netbox/templates/dcim/device_edit.html:78 msgid "Virtualization" msgstr "Virtualizzazione" -#: netbox/dcim/forms/bulk_edit.py:760 netbox/dcim/forms/bulk_import.py:675 -#: netbox/dcim/forms/model_forms.py:647 netbox/dcim/forms/model_forms.py:897 +#: netbox/dcim/forms/bulk_edit.py:763 netbox/dcim/forms/bulk_import.py:680 +#: netbox/dcim/forms/model_forms.py:658 netbox/dcim/forms/model_forms.py:909 msgid "Module type" msgstr "Tipo di modulo" -#: netbox/dcim/forms/bulk_edit.py:814 netbox/dcim/forms/bulk_edit.py:999 -#: netbox/dcim/forms/bulk_edit.py:1018 netbox/dcim/forms/bulk_edit.py:1041 -#: netbox/dcim/forms/bulk_edit.py:1083 netbox/dcim/forms/bulk_edit.py:1127 -#: netbox/dcim/forms/bulk_edit.py:1178 netbox/dcim/forms/bulk_edit.py:1205 -#: netbox/dcim/forms/bulk_edit.py:1232 netbox/dcim/forms/bulk_edit.py:1250 -#: netbox/dcim/forms/bulk_edit.py:1268 netbox/dcim/forms/filtersets.py:67 +#: netbox/dcim/forms/bulk_edit.py:817 netbox/dcim/forms/bulk_edit.py:1002 +#: netbox/dcim/forms/bulk_edit.py:1021 netbox/dcim/forms/bulk_edit.py:1044 +#: netbox/dcim/forms/bulk_edit.py:1086 netbox/dcim/forms/bulk_edit.py:1130 +#: netbox/dcim/forms/bulk_edit.py:1181 netbox/dcim/forms/bulk_edit.py:1208 +#: netbox/dcim/forms/bulk_edit.py:1235 netbox/dcim/forms/bulk_edit.py:1253 +#: netbox/dcim/forms/bulk_edit.py:1271 netbox/dcim/forms/filtersets.py:68 #: netbox/dcim/forms/object_create.py:46 netbox/templates/dcim/cable.html:32 #: netbox/templates/dcim/consoleport.html:32 #: netbox/templates/dcim/consoleserverport.html:32 @@ -3926,109 +4316,109 @@ msgstr "Tipo di modulo" msgid "Label" msgstr "Etichetta" -#: netbox/dcim/forms/bulk_edit.py:823 netbox/dcim/forms/filtersets.py:1068 +#: netbox/dcim/forms/bulk_edit.py:826 netbox/dcim/forms/filtersets.py:1069 #: netbox/templates/dcim/cable.html:50 msgid "Length" msgstr "Lunghezza" -#: netbox/dcim/forms/bulk_edit.py:828 netbox/dcim/forms/bulk_import.py:1248 -#: netbox/dcim/forms/bulk_import.py:1251 netbox/dcim/forms/filtersets.py:1072 +#: netbox/dcim/forms/bulk_edit.py:831 netbox/dcim/forms/bulk_import.py:1345 +#: netbox/dcim/forms/bulk_import.py:1348 netbox/dcim/forms/filtersets.py:1073 msgid "Length unit" msgstr "Unità di lunghezza" -#: netbox/dcim/forms/bulk_edit.py:852 +#: netbox/dcim/forms/bulk_edit.py:855 #: netbox/templates/dcim/virtualchassis.html:23 msgid "Domain" msgstr "Dominio" -#: netbox/dcim/forms/bulk_edit.py:920 netbox/dcim/forms/bulk_import.py:1367 -#: netbox/dcim/forms/filtersets.py:1158 netbox/dcim/forms/model_forms.py:750 +#: netbox/dcim/forms/bulk_edit.py:923 netbox/dcim/forms/bulk_import.py:1464 +#: netbox/dcim/forms/filtersets.py:1159 netbox/dcim/forms/model_forms.py:761 msgid "Power panel" msgstr "Pannello di alimentazione" -#: netbox/dcim/forms/bulk_edit.py:942 netbox/dcim/forms/bulk_import.py:1403 -#: netbox/dcim/forms/filtersets.py:1180 +#: netbox/dcim/forms/bulk_edit.py:945 netbox/dcim/forms/bulk_import.py:1500 +#: netbox/dcim/forms/filtersets.py:1181 #: netbox/templates/dcim/powerfeed.html:83 msgid "Supply" msgstr "Fornitura" -#: netbox/dcim/forms/bulk_edit.py:948 netbox/dcim/forms/bulk_import.py:1408 -#: netbox/dcim/forms/filtersets.py:1185 +#: netbox/dcim/forms/bulk_edit.py:951 netbox/dcim/forms/bulk_import.py:1505 +#: netbox/dcim/forms/filtersets.py:1186 #: netbox/templates/dcim/powerfeed.html:95 msgid "Phase" msgstr "Fase" -#: netbox/dcim/forms/bulk_edit.py:954 netbox/dcim/forms/filtersets.py:1190 +#: netbox/dcim/forms/bulk_edit.py:957 netbox/dcim/forms/filtersets.py:1191 #: netbox/templates/dcim/powerfeed.html:87 msgid "Voltage" msgstr "Voltaggio" -#: netbox/dcim/forms/bulk_edit.py:958 netbox/dcim/forms/filtersets.py:1194 +#: netbox/dcim/forms/bulk_edit.py:961 netbox/dcim/forms/filtersets.py:1195 #: netbox/templates/dcim/powerfeed.html:91 msgid "Amperage" msgstr "Amperaggio" -#: netbox/dcim/forms/bulk_edit.py:962 netbox/dcim/forms/filtersets.py:1198 +#: netbox/dcim/forms/bulk_edit.py:965 netbox/dcim/forms/filtersets.py:1199 msgid "Max utilization" msgstr "Utilizzo massimo" -#: netbox/dcim/forms/bulk_edit.py:1051 +#: netbox/dcim/forms/bulk_edit.py:1054 msgid "Maximum draw" msgstr "Pareggio massimo" -#: netbox/dcim/forms/bulk_edit.py:1054 -#: netbox/dcim/models/device_component_templates.py:282 -#: netbox/dcim/models/device_components.py:356 +#: netbox/dcim/forms/bulk_edit.py:1057 +#: netbox/dcim/models/device_component_templates.py:281 +#: netbox/dcim/models/device_components.py:349 msgid "Maximum power draw (watts)" msgstr "Potenza massima assorbita (watt)" -#: netbox/dcim/forms/bulk_edit.py:1057 +#: netbox/dcim/forms/bulk_edit.py:1060 msgid "Allocated draw" msgstr "Pareggio assegnato" -#: netbox/dcim/forms/bulk_edit.py:1060 -#: netbox/dcim/models/device_component_templates.py:289 -#: netbox/dcim/models/device_components.py:363 +#: netbox/dcim/forms/bulk_edit.py:1063 +#: netbox/dcim/models/device_component_templates.py:288 +#: netbox/dcim/models/device_components.py:356 msgid "Allocated power draw (watts)" msgstr "Potenza assorbita allocata (watt)" -#: netbox/dcim/forms/bulk_edit.py:1093 netbox/dcim/forms/bulk_import.py:808 -#: netbox/dcim/forms/model_forms.py:960 netbox/dcim/forms/model_forms.py:1285 -#: netbox/dcim/forms/model_forms.py:1574 netbox/dcim/forms/object_import.py:55 +#: netbox/dcim/forms/bulk_edit.py:1096 netbox/dcim/forms/bulk_import.py:813 +#: netbox/dcim/forms/model_forms.py:972 netbox/dcim/forms/model_forms.py:1301 +#: netbox/dcim/forms/model_forms.py:1616 netbox/dcim/forms/object_import.py:55 msgid "Power port" msgstr "Porta di alimentazione" -#: netbox/dcim/forms/bulk_edit.py:1098 netbox/dcim/forms/bulk_import.py:815 +#: netbox/dcim/forms/bulk_edit.py:1101 netbox/dcim/forms/bulk_import.py:820 msgid "Feed leg" msgstr "Gamba di alimentazione" -#: netbox/dcim/forms/bulk_edit.py:1144 netbox/dcim/forms/bulk_edit.py:1462 +#: netbox/dcim/forms/bulk_edit.py:1147 netbox/dcim/forms/bulk_edit.py:1465 msgid "Management only" msgstr "Solo gestione" -#: netbox/dcim/forms/bulk_edit.py:1154 netbox/dcim/forms/bulk_edit.py:1468 -#: netbox/dcim/forms/bulk_import.py:898 netbox/dcim/forms/filtersets.py:1394 +#: netbox/dcim/forms/bulk_edit.py:1157 netbox/dcim/forms/bulk_edit.py:1471 +#: netbox/dcim/forms/bulk_import.py:906 netbox/dcim/forms/filtersets.py:1399 #: netbox/dcim/forms/object_import.py:90 -#: netbox/dcim/models/device_component_templates.py:437 -#: netbox/dcim/models/device_components.py:670 +#: netbox/dcim/models/device_component_templates.py:445 +#: netbox/dcim/models/device_components.py:721 msgid "PoE mode" msgstr "modalità PoE" -#: netbox/dcim/forms/bulk_edit.py:1160 netbox/dcim/forms/bulk_edit.py:1474 -#: netbox/dcim/forms/bulk_import.py:904 netbox/dcim/forms/filtersets.py:1399 +#: netbox/dcim/forms/bulk_edit.py:1163 netbox/dcim/forms/bulk_edit.py:1477 +#: netbox/dcim/forms/bulk_import.py:912 netbox/dcim/forms/filtersets.py:1404 #: netbox/dcim/forms/object_import.py:95 -#: netbox/dcim/models/device_component_templates.py:443 -#: netbox/dcim/models/device_components.py:676 +#: netbox/dcim/models/device_component_templates.py:452 +#: netbox/dcim/models/device_components.py:728 msgid "PoE type" msgstr "Tipo PoE" -#: netbox/dcim/forms/bulk_edit.py:1166 netbox/dcim/forms/filtersets.py:1404 +#: netbox/dcim/forms/bulk_edit.py:1169 netbox/dcim/forms/filtersets.py:1409 #: netbox/dcim/forms/object_import.py:100 msgid "Wireless role" msgstr "Ruolo wireless" -#: netbox/dcim/forms/bulk_edit.py:1303 netbox/dcim/forms/model_forms.py:669 -#: netbox/dcim/forms/model_forms.py:1230 netbox/dcim/tables/devices.py:313 +#: netbox/dcim/forms/bulk_edit.py:1306 netbox/dcim/forms/model_forms.py:680 +#: netbox/dcim/forms/model_forms.py:1246 netbox/dcim/tables/devices.py:323 #: netbox/templates/dcim/consoleport.html:24 #: netbox/templates/dcim/consoleserverport.html:24 #: netbox/templates/dcim/frontport.html:24 @@ -4042,31 +4432,31 @@ msgstr "Ruolo wireless" msgid "Module" msgstr "Modulo" -#: netbox/dcim/forms/bulk_edit.py:1442 netbox/dcim/tables/devices.py:665 -#: netbox/templates/dcim/interface.html:110 +#: netbox/dcim/forms/bulk_edit.py:1445 netbox/dcim/tables/devices.py:699 +#: netbox/templates/dcim/interface.html:116 msgid "LAG" msgstr "RITARDO" -#: netbox/dcim/forms/bulk_edit.py:1447 netbox/dcim/forms/model_forms.py:1312 +#: netbox/dcim/forms/bulk_edit.py:1450 netbox/dcim/forms/model_forms.py:1328 msgid "Virtual device contexts" msgstr "Contesti dei dispositivi virtuali" -#: netbox/dcim/forms/bulk_edit.py:1453 netbox/dcim/forms/bulk_import.py:736 -#: netbox/dcim/forms/bulk_import.py:762 netbox/dcim/forms/filtersets.py:1252 -#: netbox/dcim/forms/filtersets.py:1277 netbox/dcim/forms/filtersets.py:1358 -#: netbox/dcim/tables/devices.py:610 -#: netbox/templates/circuits/inc/circuit_termination_fields.html:67 +#: netbox/dcim/forms/bulk_edit.py:1456 netbox/dcim/forms/bulk_import.py:741 +#: netbox/dcim/forms/bulk_import.py:767 netbox/dcim/forms/filtersets.py:1253 +#: netbox/dcim/forms/filtersets.py:1278 netbox/dcim/forms/filtersets.py:1363 +#: netbox/dcim/tables/devices.py:632 +#: netbox/templates/circuits/inc/circuit_termination_fields.html:62 #: netbox/templates/dcim/consoleport.html:40 #: netbox/templates/dcim/consoleserverport.html:40 msgid "Speed" msgstr "Velocità" -#: netbox/dcim/forms/bulk_edit.py:1482 netbox/dcim/forms/bulk_import.py:907 +#: netbox/dcim/forms/bulk_edit.py:1485 netbox/dcim/forms/bulk_import.py:915 #: netbox/templates/vpn/ikepolicy.html:25 #: netbox/templates/vpn/ipsecprofile.html:21 #: netbox/templates/vpn/ipsecprofile.html:48 -#: netbox/virtualization/forms/bulk_edit.py:233 -#: netbox/virtualization/forms/bulk_import.py:165 +#: netbox/virtualization/forms/bulk_edit.py:215 +#: netbox/virtualization/forms/bulk_import.py:171 #: netbox/vpn/forms/bulk_edit.py:146 netbox/vpn/forms/bulk_edit.py:232 #: netbox/vpn/forms/bulk_import.py:176 netbox/vpn/forms/bulk_import.py:234 #: netbox/vpn/forms/filtersets.py:135 netbox/vpn/forms/filtersets.py:178 @@ -4075,303 +4465,309 @@ msgstr "Velocità" msgid "Mode" msgstr "modalità" -#: netbox/dcim/forms/bulk_edit.py:1490 netbox/dcim/forms/model_forms.py:1361 -#: netbox/ipam/forms/bulk_import.py:178 netbox/ipam/forms/filtersets.py:498 -#: netbox/ipam/models/vlans.py:84 netbox/virtualization/forms/bulk_edit.py:240 -#: netbox/virtualization/forms/model_forms.py:321 +#: netbox/dcim/forms/bulk_edit.py:1493 netbox/dcim/forms/model_forms.py:1377 +#: netbox/ipam/forms/bulk_import.py:174 netbox/ipam/forms/filtersets.py:539 +#: netbox/ipam/models/vlans.py:86 netbox/virtualization/forms/bulk_edit.py:222 +#: netbox/virtualization/forms/model_forms.py:335 msgid "VLAN group" msgstr "Gruppo VLAN" -#: netbox/dcim/forms/bulk_edit.py:1499 netbox/dcim/forms/model_forms.py:1367 -#: netbox/dcim/tables/devices.py:579 -#: netbox/virtualization/forms/bulk_edit.py:248 -#: netbox/virtualization/forms/model_forms.py:326 +#: netbox/dcim/forms/bulk_edit.py:1502 netbox/dcim/forms/model_forms.py:1383 +#: netbox/dcim/tables/devices.py:593 +#: netbox/virtualization/forms/bulk_edit.py:230 +#: netbox/virtualization/forms/model_forms.py:340 msgid "Untagged VLAN" msgstr "VLAN senza tag" -#: netbox/dcim/forms/bulk_edit.py:1508 netbox/dcim/forms/model_forms.py:1376 -#: netbox/dcim/tables/devices.py:585 -#: netbox/virtualization/forms/bulk_edit.py:256 -#: netbox/virtualization/forms/model_forms.py:335 +#: netbox/dcim/forms/bulk_edit.py:1511 netbox/dcim/forms/model_forms.py:1392 +#: netbox/dcim/tables/devices.py:599 +#: netbox/virtualization/forms/bulk_edit.py:238 +#: netbox/virtualization/forms/model_forms.py:349 msgid "Tagged VLANs" msgstr "Taggato VLAN" -#: netbox/dcim/forms/bulk_edit.py:1511 +#: netbox/dcim/forms/bulk_edit.py:1514 msgid "Add tagged VLANs" msgstr "Aggiungi VLAN con tag" -#: netbox/dcim/forms/bulk_edit.py:1520 +#: netbox/dcim/forms/bulk_edit.py:1523 msgid "Remove tagged VLANs" msgstr "Rimuovi le VLAN contrassegnate" -#: netbox/dcim/forms/bulk_edit.py:1536 netbox/dcim/forms/model_forms.py:1348 +#: netbox/dcim/forms/bulk_edit.py:1534 netbox/dcim/forms/model_forms.py:1401 +#: netbox/virtualization/forms/model_forms.py:358 +msgid "Q-in-Q Service VLAN" +msgstr "VLAN di servizio Q-in-Q" + +#: netbox/dcim/forms/bulk_edit.py:1549 netbox/dcim/forms/model_forms.py:1364 msgid "Wireless LAN group" msgstr "Gruppo LAN wireless" -#: netbox/dcim/forms/bulk_edit.py:1541 netbox/dcim/forms/model_forms.py:1353 -#: netbox/dcim/tables/devices.py:619 netbox/netbox/navigation/menu.py:146 -#: netbox/templates/dcim/interface.html:280 +#: netbox/dcim/forms/bulk_edit.py:1554 netbox/dcim/forms/model_forms.py:1369 +#: netbox/dcim/tables/devices.py:641 netbox/netbox/navigation/menu.py:152 +#: netbox/templates/dcim/interface.html:337 #: netbox/wireless/tables/wirelesslan.py:24 msgid "Wireless LANs" msgstr "LAN wireless" -#: netbox/dcim/forms/bulk_edit.py:1550 netbox/dcim/forms/filtersets.py:1328 -#: netbox/dcim/forms/model_forms.py:1397 netbox/ipam/forms/bulk_edit.py:286 -#: netbox/ipam/forms/bulk_edit.py:378 netbox/ipam/forms/filtersets.py:169 -#: netbox/templates/dcim/interface.html:122 -#: netbox/templates/ipam/prefix.html:95 -#: netbox/virtualization/forms/model_forms.py:349 +#: netbox/dcim/forms/bulk_edit.py:1563 netbox/dcim/forms/filtersets.py:1333 +#: netbox/dcim/forms/model_forms.py:1435 netbox/ipam/forms/bulk_edit.py:269 +#: netbox/ipam/forms/bulk_edit.py:362 netbox/ipam/forms/filtersets.py:171 +#: netbox/netbox/navigation/menu.py:108 +#: netbox/templates/dcim/interface.html:128 +#: netbox/templates/ipam/prefix.html:91 +#: netbox/templates/virtualization/vminterface.html:70 +#: netbox/virtualization/forms/model_forms.py:378 msgid "Addressing" msgstr "Indirizzamento" -#: netbox/dcim/forms/bulk_edit.py:1551 netbox/dcim/forms/filtersets.py:720 -#: netbox/dcim/forms/model_forms.py:1398 -#: netbox/virtualization/forms/model_forms.py:350 +#: netbox/dcim/forms/bulk_edit.py:1564 netbox/dcim/forms/filtersets.py:721 +#: netbox/dcim/forms/model_forms.py:1436 +#: netbox/virtualization/forms/model_forms.py:379 msgid "Operation" msgstr "Operazione" -#: netbox/dcim/forms/bulk_edit.py:1552 netbox/dcim/forms/filtersets.py:1329 -#: netbox/dcim/forms/model_forms.py:994 netbox/dcim/forms/model_forms.py:1400 +#: netbox/dcim/forms/bulk_edit.py:1565 netbox/dcim/forms/filtersets.py:1334 +#: netbox/dcim/forms/model_forms.py:1006 netbox/dcim/forms/model_forms.py:1438 msgid "PoE" msgstr "PoE" -#: netbox/dcim/forms/bulk_edit.py:1553 netbox/dcim/forms/model_forms.py:1399 -#: netbox/templates/dcim/interface.html:99 -#: netbox/virtualization/forms/bulk_edit.py:267 -#: netbox/virtualization/forms/model_forms.py:351 +#: netbox/dcim/forms/bulk_edit.py:1566 netbox/dcim/forms/model_forms.py:1437 +#: netbox/templates/dcim/interface.html:105 +#: netbox/virtualization/forms/bulk_edit.py:254 +#: netbox/virtualization/forms/model_forms.py:380 msgid "Related Interfaces" msgstr "Interfacce correlate" -#: netbox/dcim/forms/bulk_edit.py:1554 netbox/dcim/forms/model_forms.py:1401 -#: netbox/virtualization/forms/bulk_edit.py:268 -#: netbox/virtualization/forms/model_forms.py:352 +#: netbox/dcim/forms/bulk_edit.py:1568 netbox/dcim/forms/model_forms.py:1441 +#: netbox/virtualization/forms/bulk_edit.py:257 +#: netbox/virtualization/forms/model_forms.py:383 msgid "802.1Q Switching" msgstr "Commutazione 802.1Q" -#: netbox/dcim/forms/bulk_edit.py:1558 +#: netbox/dcim/forms/bulk_edit.py:1573 msgid "Add/Remove" msgstr "Aggiungi/Rimuovi" -#: netbox/dcim/forms/bulk_edit.py:1617 netbox/dcim/forms/bulk_edit.py:1619 +#: netbox/dcim/forms/bulk_edit.py:1632 netbox/dcim/forms/bulk_edit.py:1634 msgid "Interface mode must be specified to assign VLANs" msgstr "" "La modalità di interfaccia deve essere specificata per assegnare le VLAN" -#: netbox/dcim/forms/bulk_edit.py:1624 netbox/dcim/forms/common.py:50 +#: netbox/dcim/forms/bulk_edit.py:1639 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:64 +#: netbox/dcim/forms/bulk_import.py:66 msgid "Name of parent region" msgstr "Nome della regione madre" -#: netbox/dcim/forms/bulk_import.py:78 +#: netbox/dcim/forms/bulk_import.py:80 msgid "Name of parent site group" msgstr "Nome del gruppo del sito principale" -#: netbox/dcim/forms/bulk_import.py:97 +#: netbox/dcim/forms/bulk_import.py:99 msgid "Assigned region" msgstr "Regione assegnata" -#: netbox/dcim/forms/bulk_import.py:104 netbox/tenancy/forms/bulk_import.py:44 +#: netbox/dcim/forms/bulk_import.py:106 netbox/tenancy/forms/bulk_import.py:44 #: netbox/tenancy/forms/bulk_import.py:85 -#: netbox/wireless/forms/bulk_import.py:40 +#: netbox/wireless/forms/bulk_import.py:42 msgid "Assigned group" msgstr "Gruppo assegnato" -#: netbox/dcim/forms/bulk_import.py:123 +#: netbox/dcim/forms/bulk_import.py:125 msgid "available options" msgstr "opzioni disponibili" -#: netbox/dcim/forms/bulk_import.py:134 netbox/dcim/forms/bulk_import.py:565 -#: netbox/dcim/forms/bulk_import.py:1364 netbox/ipam/forms/bulk_import.py:175 -#: netbox/ipam/forms/bulk_import.py:457 -#: netbox/virtualization/forms/bulk_import.py:63 -#: netbox/virtualization/forms/bulk_import.py:89 +#: netbox/dcim/forms/bulk_import.py:136 netbox/dcim/forms/bulk_import.py:570 +#: netbox/dcim/forms/bulk_import.py:1461 netbox/ipam/forms/bulk_import.py:456 +#: netbox/virtualization/forms/bulk_import.py:64 +#: netbox/virtualization/forms/bulk_import.py:95 msgid "Assigned site" msgstr "Sito assegnato" -#: netbox/dcim/forms/bulk_import.py:141 +#: netbox/dcim/forms/bulk_import.py:143 msgid "Parent location" msgstr "Sede del genitore" -#: netbox/dcim/forms/bulk_import.py:143 +#: netbox/dcim/forms/bulk_import.py:145 msgid "Location not found." msgstr "Posizione non trovata." -#: netbox/dcim/forms/bulk_import.py:185 +#: netbox/dcim/forms/bulk_import.py:187 msgid "The manufacturer of this rack type" msgstr "Il produttore di questo tipo di rack" -#: netbox/dcim/forms/bulk_import.py:196 +#: netbox/dcim/forms/bulk_import.py:198 msgid "The lowest-numbered position in the rack" msgstr "La posizione con il numero più basso nel rack" -#: netbox/dcim/forms/bulk_import.py:201 netbox/dcim/forms/bulk_import.py:276 +#: netbox/dcim/forms/bulk_import.py:203 netbox/dcim/forms/bulk_import.py:278 msgid "Rail-to-rail width (in inches)" msgstr "Larghezza da rotaia a rotaia (in pollici)" -#: netbox/dcim/forms/bulk_import.py:207 netbox/dcim/forms/bulk_import.py:286 +#: netbox/dcim/forms/bulk_import.py:209 netbox/dcim/forms/bulk_import.py:288 msgid "Unit for outer dimensions" msgstr "Unità per dimensioni esterne" -#: netbox/dcim/forms/bulk_import.py:213 netbox/dcim/forms/bulk_import.py:298 +#: netbox/dcim/forms/bulk_import.py:215 netbox/dcim/forms/bulk_import.py:300 msgid "Unit for rack weights" msgstr "Unità per pesi a scaffale" -#: netbox/dcim/forms/bulk_import.py:245 +#: netbox/dcim/forms/bulk_import.py:247 msgid "Name of assigned tenant" msgstr "Nome dell'inquilino assegnato" -#: netbox/dcim/forms/bulk_import.py:257 +#: netbox/dcim/forms/bulk_import.py:259 msgid "Name of assigned role" msgstr "Nome del ruolo assegnato" -#: netbox/dcim/forms/bulk_import.py:264 +#: netbox/dcim/forms/bulk_import.py:266 msgid "Rack type model" msgstr "Modello tipo rack" -#: netbox/dcim/forms/bulk_import.py:292 netbox/dcim/forms/bulk_import.py:435 -#: netbox/dcim/forms/bulk_import.py:605 +#: netbox/dcim/forms/bulk_import.py:294 netbox/dcim/forms/bulk_import.py:437 +#: netbox/dcim/forms/bulk_import.py:610 msgid "Airflow direction" msgstr "Direzione del flusso d'aria" -#: netbox/dcim/forms/bulk_import.py:324 +#: netbox/dcim/forms/bulk_import.py:326 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:326 +#: netbox/dcim/forms/bulk_import.py:328 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:334 +#: netbox/dcim/forms/bulk_import.py:336 msgid "Parent site" msgstr "Sito principale" -#: netbox/dcim/forms/bulk_import.py:341 netbox/dcim/forms/bulk_import.py:1377 +#: netbox/dcim/forms/bulk_import.py:343 netbox/dcim/forms/bulk_import.py:1474 msgid "Rack's location (if any)" msgstr "Posizione del rack (se presente)" -#: netbox/dcim/forms/bulk_import.py:350 netbox/dcim/forms/model_forms.py:311 -#: netbox/dcim/tables/racks.py:222 +#: netbox/dcim/forms/bulk_import.py:352 netbox/dcim/forms/model_forms.py:319 +#: netbox/dcim/tables/racks.py:221 #: netbox/templates/dcim/rackreservation.html:12 #: netbox/templates/dcim/rackreservation.html:45 msgid "Units" msgstr "Unità" -#: netbox/dcim/forms/bulk_import.py:353 +#: netbox/dcim/forms/bulk_import.py:355 msgid "Comma-separated list of individual unit numbers" msgstr "Elenco separato da virgole di numeri di unità individuali" -#: netbox/dcim/forms/bulk_import.py:396 +#: netbox/dcim/forms/bulk_import.py:398 msgid "The manufacturer which produces this device type" msgstr "Il produttore che produce questo tipo di dispositivo" -#: netbox/dcim/forms/bulk_import.py:403 +#: netbox/dcim/forms/bulk_import.py:405 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:408 +#: netbox/dcim/forms/bulk_import.py:410 msgid "Device weight" msgstr "Peso del dispositivo" -#: netbox/dcim/forms/bulk_import.py:414 +#: netbox/dcim/forms/bulk_import.py:416 msgid "Unit for device weight" msgstr "Unità per il peso del dispositivo" -#: netbox/dcim/forms/bulk_import.py:440 +#: netbox/dcim/forms/bulk_import.py:442 msgid "Module weight" msgstr "Peso del modulo" -#: netbox/dcim/forms/bulk_import.py:446 +#: netbox/dcim/forms/bulk_import.py:448 msgid "Unit for module weight" msgstr "Unità per il peso del modulo" -#: netbox/dcim/forms/bulk_import.py:476 +#: netbox/dcim/forms/bulk_import.py:481 msgid "Limit platform assignments to this manufacturer" msgstr "Limita le assegnazioni delle piattaforme a questo produttore" -#: netbox/dcim/forms/bulk_import.py:498 netbox/dcim/forms/bulk_import.py:1447 +#: netbox/dcim/forms/bulk_import.py:503 netbox/dcim/forms/bulk_import.py:1544 #: netbox/tenancy/forms/bulk_import.py:106 msgid "Assigned role" msgstr "Ruolo assegnato" -#: netbox/dcim/forms/bulk_import.py:511 +#: netbox/dcim/forms/bulk_import.py:516 msgid "Device type manufacturer" msgstr "Produttore del tipo di dispositivo" -#: netbox/dcim/forms/bulk_import.py:517 +#: netbox/dcim/forms/bulk_import.py:522 msgid "Device type model" msgstr "Tipo di dispositivo modello" -#: netbox/dcim/forms/bulk_import.py:524 -#: netbox/virtualization/forms/bulk_import.py:126 +#: netbox/dcim/forms/bulk_import.py:529 +#: netbox/virtualization/forms/bulk_import.py:132 msgid "Assigned platform" msgstr "Piattaforma assegnata" -#: netbox/dcim/forms/bulk_import.py:532 netbox/dcim/forms/bulk_import.py:536 -#: netbox/dcim/forms/model_forms.py:536 +#: netbox/dcim/forms/bulk_import.py:537 netbox/dcim/forms/bulk_import.py:541 +#: netbox/dcim/forms/model_forms.py:547 msgid "Virtual chassis" msgstr "Chassis virtuale" -#: netbox/dcim/forms/bulk_import.py:543 +#: netbox/dcim/forms/bulk_import.py:548 msgid "Virtualization cluster" msgstr "Cluster di virtualizzazione" -#: netbox/dcim/forms/bulk_import.py:572 +#: netbox/dcim/forms/bulk_import.py:577 msgid "Assigned location (if any)" msgstr "Posizione assegnata (se presente)" -#: netbox/dcim/forms/bulk_import.py:579 +#: netbox/dcim/forms/bulk_import.py:584 msgid "Assigned rack (if any)" msgstr "Rack assegnato (se presente)" -#: netbox/dcim/forms/bulk_import.py:582 +#: netbox/dcim/forms/bulk_import.py:587 msgid "Face" msgstr "Viso" -#: netbox/dcim/forms/bulk_import.py:585 +#: netbox/dcim/forms/bulk_import.py:590 msgid "Mounted rack face" msgstr "Faccia del rack montata" -#: netbox/dcim/forms/bulk_import.py:592 +#: netbox/dcim/forms/bulk_import.py:597 msgid "Parent device (for child devices)" msgstr "Dispositivo principale (per dispositivi per bambini)" -#: netbox/dcim/forms/bulk_import.py:595 +#: netbox/dcim/forms/bulk_import.py:600 msgid "Device bay" msgstr "Alloggiamento per dispositivi" -#: netbox/dcim/forms/bulk_import.py:599 +#: netbox/dcim/forms/bulk_import.py:604 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:666 +#: netbox/dcim/forms/bulk_import.py:671 msgid "The device in which this module is installed" msgstr "Il dispositivo in cui è installato questo modulo" -#: netbox/dcim/forms/bulk_import.py:669 netbox/dcim/forms/model_forms.py:640 +#: netbox/dcim/forms/bulk_import.py:674 netbox/dcim/forms/model_forms.py:651 msgid "Module bay" msgstr "alloggiamento per moduli" -#: netbox/dcim/forms/bulk_import.py:672 +#: netbox/dcim/forms/bulk_import.py:677 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:678 +#: netbox/dcim/forms/bulk_import.py:683 msgid "The type of module" msgstr "Il tipo di modulo" -#: netbox/dcim/forms/bulk_import.py:686 netbox/dcim/forms/model_forms.py:656 +#: netbox/dcim/forms/bulk_import.py:691 netbox/dcim/forms/model_forms.py:667 msgid "Replicate components" msgstr "Componenti replicati" -#: netbox/dcim/forms/bulk_import.py:688 +#: netbox/dcim/forms/bulk_import.py:693 msgid "" "Automatically populate components associated with this module type (enabled " "by default)" @@ -4379,271 +4775,309 @@ msgstr "" "Compila automaticamente i componenti associati a questo tipo di modulo " "(abilitato per impostazione predefinita)" -#: netbox/dcim/forms/bulk_import.py:691 netbox/dcim/forms/model_forms.py:662 +#: netbox/dcim/forms/bulk_import.py:696 netbox/dcim/forms/model_forms.py:673 msgid "Adopt components" msgstr "Adotta i componenti" -#: netbox/dcim/forms/bulk_import.py:693 netbox/dcim/forms/model_forms.py:665 +#: netbox/dcim/forms/bulk_import.py:698 netbox/dcim/forms/model_forms.py:676 msgid "Adopt already existing components" msgstr "Adotta componenti già esistenti" -#: netbox/dcim/forms/bulk_import.py:733 netbox/dcim/forms/bulk_import.py:759 -#: netbox/dcim/forms/bulk_import.py:785 +#: netbox/dcim/forms/bulk_import.py:738 netbox/dcim/forms/bulk_import.py:764 +#: netbox/dcim/forms/bulk_import.py:790 msgid "Port type" msgstr "Tipo di porta" -#: netbox/dcim/forms/bulk_import.py:741 netbox/dcim/forms/bulk_import.py:767 +#: netbox/dcim/forms/bulk_import.py:746 netbox/dcim/forms/bulk_import.py:772 msgid "Port speed in bps" msgstr "Velocità della porta in bps" -#: netbox/dcim/forms/bulk_import.py:805 +#: netbox/dcim/forms/bulk_import.py:810 msgid "Outlet type" msgstr "Tipo di presa" -#: netbox/dcim/forms/bulk_import.py:812 +#: netbox/dcim/forms/bulk_import.py:817 msgid "Local power port which feeds this outlet" msgstr "Porta di alimentazione locale che alimenta questa presa" -#: netbox/dcim/forms/bulk_import.py:818 +#: netbox/dcim/forms/bulk_import.py:823 msgid "Electrical phase (for three-phase circuits)" msgstr "Fase elettrica (per circuiti trifase)" -#: netbox/dcim/forms/bulk_import.py:859 netbox/dcim/forms/model_forms.py:1323 -#: netbox/virtualization/forms/bulk_import.py:155 -#: netbox/virtualization/forms/model_forms.py:305 +#: netbox/dcim/forms/bulk_import.py:867 netbox/dcim/forms/model_forms.py:1339 +#: netbox/virtualization/forms/bulk_import.py:161 +#: netbox/virtualization/forms/model_forms.py:319 msgid "Parent interface" msgstr "Interfaccia principale" -#: netbox/dcim/forms/bulk_import.py:866 netbox/dcim/forms/model_forms.py:1331 -#: netbox/virtualization/forms/bulk_import.py:162 -#: netbox/virtualization/forms/model_forms.py:313 +#: netbox/dcim/forms/bulk_import.py:874 netbox/dcim/forms/model_forms.py:1347 +#: netbox/virtualization/forms/bulk_import.py:168 +#: netbox/virtualization/forms/model_forms.py:327 msgid "Bridged interface" msgstr "Interfaccia con ponte" -#: netbox/dcim/forms/bulk_import.py:869 +#: netbox/dcim/forms/bulk_import.py:877 msgid "Lag" msgstr "Ritardo" -#: netbox/dcim/forms/bulk_import.py:873 +#: netbox/dcim/forms/bulk_import.py:881 msgid "Parent LAG interface" msgstr "Interfaccia LAG principale" -#: netbox/dcim/forms/bulk_import.py:876 +#: netbox/dcim/forms/bulk_import.py:884 msgid "Vdcs" msgstr "Vdc" -#: netbox/dcim/forms/bulk_import.py:881 +#: netbox/dcim/forms/bulk_import.py:889 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:887 +#: netbox/dcim/forms/bulk_import.py:895 msgid "Physical medium" msgstr "Supporto fisico" -#: netbox/dcim/forms/bulk_import.py:890 netbox/dcim/forms/filtersets.py:1365 +#: netbox/dcim/forms/bulk_import.py:898 netbox/dcim/forms/filtersets.py:1370 msgid "Duplex" msgstr "Duplex" -#: netbox/dcim/forms/bulk_import.py:895 +#: netbox/dcim/forms/bulk_import.py:903 msgid "Poe mode" msgstr "modalità Poe" -#: netbox/dcim/forms/bulk_import.py:901 +#: netbox/dcim/forms/bulk_import.py:909 msgid "Poe type" msgstr "Tipo Poe" -#: netbox/dcim/forms/bulk_import.py:910 -#: netbox/virtualization/forms/bulk_import.py:168 +#: netbox/dcim/forms/bulk_import.py:918 +#: netbox/virtualization/forms/bulk_import.py:174 msgid "IEEE 802.1Q operational mode (for L2 interfaces)" msgstr "Modalità operativa IEEE 802.1Q (per interfacce L2)" -#: netbox/dcim/forms/bulk_import.py:917 netbox/ipam/forms/bulk_import.py:161 -#: netbox/ipam/forms/bulk_import.py:247 netbox/ipam/forms/bulk_import.py:283 -#: netbox/ipam/forms/filtersets.py:201 netbox/ipam/forms/filtersets.py:277 -#: netbox/ipam/forms/filtersets.py:336 -#: netbox/virtualization/forms/bulk_import.py:175 +#: netbox/dcim/forms/bulk_import.py:925 netbox/ipam/forms/bulk_import.py:164 +#: netbox/ipam/forms/bulk_import.py:246 netbox/ipam/forms/bulk_import.py:282 +#: netbox/ipam/forms/filtersets.py:203 netbox/ipam/forms/filtersets.py:280 +#: netbox/ipam/forms/filtersets.py:339 +#: netbox/virtualization/forms/bulk_import.py:181 msgid "Assigned VRF" msgstr "VRF assegnato" -#: netbox/dcim/forms/bulk_import.py:920 +#: netbox/dcim/forms/bulk_import.py:928 msgid "Rf role" msgstr "Ruolo Rf" -#: netbox/dcim/forms/bulk_import.py:923 +#: netbox/dcim/forms/bulk_import.py:931 msgid "Wireless role (AP/station)" msgstr "Ruolo wireless (AP/stazione)" -#: netbox/dcim/forms/bulk_import.py:959 +#: netbox/dcim/forms/bulk_import.py:967 #, 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:973 netbox/dcim/forms/model_forms.py:1007 -#: netbox/dcim/forms/model_forms.py:1582 +#: netbox/dcim/forms/bulk_import.py:981 netbox/dcim/forms/model_forms.py:1020 +#: netbox/dcim/forms/model_forms.py:1624 #: netbox/dcim/forms/object_import.py:117 msgid "Rear port" msgstr "Porta posteriore" -#: netbox/dcim/forms/bulk_import.py:976 +#: netbox/dcim/forms/bulk_import.py:984 msgid "Corresponding rear port" msgstr "Porta posteriore corrispondente" -#: netbox/dcim/forms/bulk_import.py:981 netbox/dcim/forms/bulk_import.py:1022 -#: netbox/dcim/forms/bulk_import.py:1238 +#: netbox/dcim/forms/bulk_import.py:989 netbox/dcim/forms/bulk_import.py:1030 +#: netbox/dcim/forms/bulk_import.py:1335 msgid "Physical medium classification" msgstr "Classificazione del mezzo fisico" -#: netbox/dcim/forms/bulk_import.py:1050 netbox/dcim/tables/devices.py:822 +#: netbox/dcim/forms/bulk_import.py:1058 netbox/dcim/tables/devices.py:854 msgid "Installed device" msgstr "Dispositivo installato" -#: netbox/dcim/forms/bulk_import.py:1054 +#: netbox/dcim/forms/bulk_import.py:1062 msgid "Child device installed within this bay" msgstr "" "Dispositivo per bambini installato all'interno di questo alloggiamento" -#: netbox/dcim/forms/bulk_import.py:1056 +#: netbox/dcim/forms/bulk_import.py:1064 msgid "Child device not found." msgstr "Dispositivo secondario non trovato." -#: netbox/dcim/forms/bulk_import.py:1114 +#: netbox/dcim/forms/bulk_import.py:1122 msgid "Parent inventory item" msgstr "Articolo di inventario principale" -#: netbox/dcim/forms/bulk_import.py:1117 +#: netbox/dcim/forms/bulk_import.py:1125 msgid "Component type" msgstr "Tipo di componente" -#: netbox/dcim/forms/bulk_import.py:1121 +#: netbox/dcim/forms/bulk_import.py:1129 msgid "Component Type" msgstr "Tipo di componente" -#: netbox/dcim/forms/bulk_import.py:1124 +#: netbox/dcim/forms/bulk_import.py:1132 msgid "Compnent name" msgstr "Nome del componente" -#: netbox/dcim/forms/bulk_import.py:1126 +#: netbox/dcim/forms/bulk_import.py:1134 msgid "Component Name" msgstr "Nome del componente" -#: netbox/dcim/forms/bulk_import.py:1168 +#: netbox/dcim/forms/bulk_import.py:1181 #, python-brace-format msgid "Component not found: {device} - {component_name}" msgstr "Componente non trovato: {device} - {component_name}" -#: netbox/dcim/forms/bulk_import.py:1193 +#: netbox/dcim/forms/bulk_import.py:1209 netbox/ipam/forms/bulk_import.py:307 +msgid "Parent device of assigned interface (if any)" +msgstr "Dispositivo principale dell'interfaccia assegnata (se presente)" + +#: netbox/dcim/forms/bulk_import.py:1212 netbox/ipam/forms/bulk_import.py:310 +#: netbox/ipam/forms/bulk_import.py:547 netbox/ipam/forms/model_forms.py:768 +#: netbox/virtualization/filtersets.py:254 +#: netbox/virtualization/filtersets.py:305 +#: netbox/virtualization/forms/bulk_edit.py:182 +#: netbox/virtualization/forms/bulk_edit.py:316 +#: netbox/virtualization/forms/bulk_import.py:152 +#: netbox/virtualization/forms/bulk_import.py:213 +#: netbox/virtualization/forms/filtersets.py:217 +#: netbox/virtualization/forms/filtersets.py:253 +#: netbox/virtualization/forms/model_forms.py:295 +#: netbox/vpn/forms/bulk_import.py:93 netbox/vpn/forms/bulk_import.py:290 +msgid "Virtual machine" +msgstr "Macchina virtuale" + +#: netbox/dcim/forms/bulk_import.py:1216 netbox/ipam/forms/bulk_import.py:314 +msgid "Parent VM of assigned interface (if any)" +msgstr "VM principale dell'interfaccia assegnata (se presente)" + +#: netbox/dcim/forms/bulk_import.py:1223 netbox/ipam/filtersets.py:1021 +#: netbox/ipam/forms/bulk_import.py:321 +msgid "Assigned interface" +msgstr "Interfaccia assegnata" + +#: netbox/dcim/forms/bulk_import.py:1226 netbox/ipam/forms/bulk_import.py:324 +msgid "Is primary" +msgstr "È primario" + +#: netbox/dcim/forms/bulk_import.py:1227 +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:1264 +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:1290 msgid "Side A device" msgstr "Dispositivo lato A" -#: netbox/dcim/forms/bulk_import.py:1196 netbox/dcim/forms/bulk_import.py:1214 +#: netbox/dcim/forms/bulk_import.py:1293 netbox/dcim/forms/bulk_import.py:1311 msgid "Device name" msgstr "Nome del dispositivo" -#: netbox/dcim/forms/bulk_import.py:1199 +#: netbox/dcim/forms/bulk_import.py:1296 msgid "Side A type" msgstr "Tipo Lato A" -#: netbox/dcim/forms/bulk_import.py:1202 netbox/dcim/forms/bulk_import.py:1220 -msgid "Termination type" -msgstr "Tipo di terminazione" - -#: netbox/dcim/forms/bulk_import.py:1205 +#: netbox/dcim/forms/bulk_import.py:1302 msgid "Side A name" msgstr "Nome del lato A" -#: netbox/dcim/forms/bulk_import.py:1206 netbox/dcim/forms/bulk_import.py:1224 +#: netbox/dcim/forms/bulk_import.py:1303 netbox/dcim/forms/bulk_import.py:1321 msgid "Termination name" msgstr "Nome della cessazione" -#: netbox/dcim/forms/bulk_import.py:1211 +#: netbox/dcim/forms/bulk_import.py:1308 msgid "Side B device" msgstr "Dispositivo lato B" -#: netbox/dcim/forms/bulk_import.py:1217 +#: netbox/dcim/forms/bulk_import.py:1314 msgid "Side B type" msgstr "Tipo B laterale" -#: netbox/dcim/forms/bulk_import.py:1223 +#: netbox/dcim/forms/bulk_import.py:1320 msgid "Side B name" msgstr "Nome lato B" -#: netbox/dcim/forms/bulk_import.py:1232 -#: netbox/wireless/forms/bulk_import.py:86 +#: netbox/dcim/forms/bulk_import.py:1329 +#: netbox/wireless/forms/bulk_import.py:91 msgid "Connection status" msgstr "Stato della connessione" -#: netbox/dcim/forms/bulk_import.py:1284 +#: netbox/dcim/forms/bulk_import.py:1381 #, 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:1290 +#: netbox/dcim/forms/bulk_import.py:1387 #, 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:1315 netbox/dcim/forms/model_forms.py:785 -#: netbox/dcim/tables/devices.py:1027 netbox/templates/dcim/device.html:132 +#: netbox/dcim/forms/bulk_import.py:1412 netbox/dcim/forms/model_forms.py:797 +#: netbox/dcim/tables/devices.py:1059 netbox/templates/dcim/device.html:132 #: netbox/templates/dcim/virtualchassis.html:27 #: netbox/templates/dcim/virtualchassis.html:67 msgid "Master" msgstr "Maestro" -#: netbox/dcim/forms/bulk_import.py:1319 +#: netbox/dcim/forms/bulk_import.py:1416 msgid "Master device" msgstr "Dispositivo master" -#: netbox/dcim/forms/bulk_import.py:1336 +#: netbox/dcim/forms/bulk_import.py:1433 msgid "Name of parent site" msgstr "Nome del sito principale" -#: netbox/dcim/forms/bulk_import.py:1370 +#: netbox/dcim/forms/bulk_import.py:1467 msgid "Upstream power panel" msgstr "Pannello di alimentazione upstream" -#: netbox/dcim/forms/bulk_import.py:1400 +#: netbox/dcim/forms/bulk_import.py:1497 msgid "Primary or redundant" msgstr "Primario o ridondante" -#: netbox/dcim/forms/bulk_import.py:1405 +#: netbox/dcim/forms/bulk_import.py:1502 msgid "Supply type (AC/DC)" msgstr "Tipo di alimentazione (AC/DC)" -#: netbox/dcim/forms/bulk_import.py:1410 +#: netbox/dcim/forms/bulk_import.py:1507 msgid "Single or three-phase" msgstr "Monofase o trifase" -#: netbox/dcim/forms/bulk_import.py:1461 netbox/dcim/forms/model_forms.py:1677 +#: netbox/dcim/forms/bulk_import.py:1558 netbox/dcim/forms/model_forms.py:1722 #: netbox/templates/dcim/device.html:190 #: netbox/templates/dcim/virtualdevicecontext.html:30 #: netbox/templates/virtualization/virtualmachine.html:52 msgid "Primary IPv4" msgstr "IPv4 primario" -#: netbox/dcim/forms/bulk_import.py:1465 +#: netbox/dcim/forms/bulk_import.py:1562 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:1468 netbox/dcim/forms/model_forms.py:1686 +#: netbox/dcim/forms/bulk_import.py:1565 netbox/dcim/forms/model_forms.py:1731 #: netbox/templates/dcim/device.html:206 #: netbox/templates/dcim/virtualdevicecontext.html:41 #: netbox/templates/virtualization/virtualmachine.html:68 msgid "Primary IPv6" msgstr "IPv6 primario" -#: netbox/dcim/forms/bulk_import.py:1472 +#: netbox/dcim/forms/bulk_import.py:1569 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" -#: netbox/dcim/forms/common.py:24 netbox/dcim/models/device_components.py:527 +#: netbox/dcim/forms/common.py:19 netbox/dcim/models/device_components.py:515 #: netbox/templates/dcim/interface.html:57 -#: netbox/templates/virtualization/vminterface.html:55 -#: netbox/virtualization/forms/bulk_edit.py:225 +#: netbox/templates/virtualization/vminterface.html:51 +#: netbox/virtualization/forms/bulk_edit.py:207 msgid "MTU" msgstr "MTU" -#: netbox/dcim/forms/common.py:65 +#: netbox/dcim/forms/common.py:60 #, python-brace-format msgid "" "The tagged VLANs ({vlans}) must belong to the same site as the interface's " @@ -4653,7 +5087,7 @@ msgstr "" "dispositivo/macchina virtuale principale dell'interfaccia oppure devono " "essere globali" -#: netbox/dcim/forms/common.py:126 +#: netbox/dcim/forms/common.py:121 msgid "" "Cannot install module with placeholder values in a module bay with no " "position defined." @@ -4661,7 +5095,7 @@ msgstr "" "Impossibile installare un modulo con valori segnaposto in un alloggiamento " "per moduli senza una posizione definita." -#: netbox/dcim/forms/common.py:131 +#: netbox/dcim/forms/common.py:127 #, python-brace-format msgid "" "Cannot install module with placeholder values in a module bay tree {level} " @@ -4670,17 +5104,17 @@ msgstr "" "Impossibile installare un modulo con valori segnaposto in un albero di " "alloggiamento del modulo {level} in un albero ma {tokens} segnaposto dati." -#: netbox/dcim/forms/common.py:144 +#: netbox/dcim/forms/common.py:142 #, python-brace-format msgid "Cannot adopt {model} {name} as it already belongs to a module" msgstr "Non può adottare {model} {name} in quanto appartiene già a un modulo" -#: netbox/dcim/forms/common.py:153 +#: netbox/dcim/forms/common.py:151 #, python-brace-format msgid "A {model} named {name} already exists" msgstr "UN {model} denominato {name} esiste già" -#: netbox/dcim/forms/connections.py:49 netbox/dcim/forms/model_forms.py:738 +#: netbox/dcim/forms/connections.py:49 netbox/dcim/forms/model_forms.py:749 #: netbox/dcim/tables/power.py:66 #: netbox/templates/dcim/inc/cable_termination.html:37 #: netbox/templates/dcim/powerfeed.html:24 @@ -4689,137 +5123,135 @@ msgstr "UN {model} denominato {name} esiste già" msgid "Power Panel" msgstr "Pannello di alimentazione" -#: netbox/dcim/forms/connections.py:58 netbox/dcim/forms/model_forms.py:765 +#: netbox/dcim/forms/connections.py:58 netbox/dcim/forms/model_forms.py:777 #: netbox/templates/dcim/powerfeed.html:21 #: netbox/templates/dcim/powerport.html:80 msgid "Power Feed" msgstr "Alimentazione" -#: netbox/dcim/forms/connections.py:81 -msgid "Side" -msgstr "Lato" - -#: netbox/dcim/forms/filtersets.py:136 netbox/dcim/tables/devices.py:295 +#: netbox/dcim/forms/filtersets.py:137 netbox/dcim/tables/devices.py:305 msgid "Device Status" msgstr "Stato del dispositivo" -#: netbox/dcim/forms/filtersets.py:149 +#: netbox/dcim/forms/filtersets.py:150 msgid "Parent region" msgstr "Regione principale" -#: netbox/dcim/forms/filtersets.py:163 netbox/tenancy/forms/bulk_import.py:28 +#: netbox/dcim/forms/filtersets.py:164 netbox/tenancy/forms/bulk_import.py:28 #: netbox/tenancy/forms/bulk_import.py:62 #: netbox/tenancy/forms/filtersets.py:33 netbox/tenancy/forms/filtersets.py:62 -#: netbox/wireless/forms/bulk_import.py:25 -#: netbox/wireless/forms/filtersets.py:25 +#: netbox/wireless/forms/bulk_import.py:27 +#: netbox/wireless/forms/filtersets.py:27 msgid "Parent group" msgstr "Gruppo di genitori" -#: netbox/dcim/forms/filtersets.py:242 netbox/templates/dcim/location.html:58 +#: netbox/dcim/forms/filtersets.py:243 netbox/templates/dcim/location.html:58 #: netbox/templates/dcim/site.html:56 msgid "Facility" msgstr "Struttura" -#: netbox/dcim/forms/filtersets.py:397 +#: netbox/dcim/forms/filtersets.py:398 msgid "Function" msgstr "Funzione" -#: netbox/dcim/forms/filtersets.py:483 netbox/dcim/forms/model_forms.py:373 +#: netbox/dcim/forms/filtersets.py:484 netbox/dcim/forms/model_forms.py:382 #: netbox/templates/inc/panels/image_attachments.html:6 msgid "Images" msgstr "Immagini" -#: netbox/dcim/forms/filtersets.py:486 netbox/dcim/forms/filtersets.py:611 -#: netbox/dcim/forms/filtersets.py:726 +#: netbox/dcim/forms/filtersets.py:487 netbox/dcim/forms/filtersets.py:612 +#: netbox/dcim/forms/filtersets.py:727 msgid "Components" msgstr "Componenti" -#: netbox/dcim/forms/filtersets.py:506 +#: netbox/dcim/forms/filtersets.py:507 msgid "Subdevice role" msgstr "Ruolo del dispositivo secondario" -#: netbox/dcim/forms/filtersets.py:790 netbox/dcim/tables/racks.py:54 +#: netbox/dcim/forms/filtersets.py:791 netbox/dcim/tables/racks.py:54 #: netbox/templates/dcim/racktype.html:20 msgid "Model" msgstr "Modello" -#: netbox/dcim/forms/filtersets.py:834 +#: netbox/dcim/forms/filtersets.py:835 msgid "Has an OOB IP" msgstr "Ha un IP OOB" -#: netbox/dcim/forms/filtersets.py:841 +#: netbox/dcim/forms/filtersets.py:842 msgid "Virtual chassis member" msgstr "Membro virtuale dello chassis" -#: netbox/dcim/forms/filtersets.py:890 +#: netbox/dcim/forms/filtersets.py:891 msgid "Has virtual device contexts" msgstr "Dispone di contesti di dispositivi virtuali" -#: netbox/dcim/forms/filtersets.py:903 netbox/extras/filtersets.py:585 -#: netbox/ipam/forms/filtersets.py:452 -#: netbox/virtualization/forms/filtersets.py:112 +#: netbox/dcim/forms/filtersets.py:904 netbox/extras/filtersets.py:585 +#: netbox/ipam/forms/filtersets.py:455 +#: netbox/virtualization/forms/filtersets.py:117 msgid "Cluster group" msgstr "Gruppo Cluster" -#: netbox/dcim/forms/filtersets.py:1210 +#: netbox/dcim/forms/filtersets.py:1211 msgid "Cabled" msgstr "cablato" -#: netbox/dcim/forms/filtersets.py:1217 +#: netbox/dcim/forms/filtersets.py:1218 msgid "Occupied" msgstr "Occupato" -#: netbox/dcim/forms/filtersets.py:1244 netbox/dcim/forms/filtersets.py:1269 -#: netbox/dcim/forms/filtersets.py:1293 netbox/dcim/forms/filtersets.py:1313 -#: netbox/dcim/forms/filtersets.py:1336 netbox/dcim/tables/devices.py:364 +#: netbox/dcim/forms/filtersets.py:1245 netbox/dcim/forms/filtersets.py:1270 +#: netbox/dcim/forms/filtersets.py:1294 netbox/dcim/forms/filtersets.py:1314 +#: netbox/dcim/forms/filtersets.py:1341 netbox/dcim/tables/devices.py:374 +#: netbox/dcim/tables/devices.py:663 +#: netbox/templates/circuits/inc/circuit_termination_fields.html:16 #: netbox/templates/dcim/consoleport.html:55 #: netbox/templates/dcim/consoleserverport.html:55 #: netbox/templates/dcim/frontport.html:69 -#: netbox/templates/dcim/interface.html:140 +#: netbox/templates/dcim/interface.html:197 #: netbox/templates/dcim/powerfeed.html:110 -#: netbox/templates/dcim/poweroutlet.html:59 +#: netbox/templates/dcim/poweroutlet.html:69 #: netbox/templates/dcim/powerport.html:59 #: netbox/templates/dcim/rearport.html:65 msgid "Connection" msgstr "Connessione" -#: netbox/dcim/forms/filtersets.py:1348 netbox/extras/forms/bulk_edit.py:326 +#: netbox/dcim/forms/filtersets.py:1353 netbox/extras/forms/bulk_edit.py:326 #: netbox/extras/forms/bulk_import.py:247 -#: netbox/extras/forms/filtersets.py:464 -#: netbox/extras/forms/model_forms.py:675 netbox/extras/tables/tables.py:579 +#: netbox/extras/forms/filtersets.py:472 +#: netbox/extras/forms/model_forms.py:689 netbox/extras/tables/tables.py:579 #: netbox/templates/extras/journalentry.html:30 msgid "Kind" msgstr "Gentile" -#: netbox/dcim/forms/filtersets.py:1377 +#: netbox/dcim/forms/filtersets.py:1382 msgid "Mgmt only" msgstr "Solo gestione" -#: netbox/dcim/forms/filtersets.py:1389 netbox/dcim/forms/model_forms.py:1390 -#: netbox/dcim/models/device_components.py:629 -#: netbox/templates/dcim/interface.html:129 +#: netbox/dcim/forms/filtersets.py:1394 netbox/dcim/forms/model_forms.py:1423 +#: netbox/dcim/models/device_components.py:677 +#: netbox/templates/dcim/interface.html:142 msgid "WWN" msgstr "WWN" -#: netbox/dcim/forms/filtersets.py:1409 +#: netbox/dcim/forms/filtersets.py:1414 msgid "Wireless channel" msgstr "Canale wireless" -#: netbox/dcim/forms/filtersets.py:1413 +#: netbox/dcim/forms/filtersets.py:1418 msgid "Channel frequency (MHz)" msgstr "Frequenza del canale (MHz)" -#: netbox/dcim/forms/filtersets.py:1417 +#: netbox/dcim/forms/filtersets.py:1422 msgid "Channel width (MHz)" msgstr "Larghezza del canale (MHz)" -#: netbox/dcim/forms/filtersets.py:1421 -#: netbox/templates/dcim/interface.html:85 +#: netbox/dcim/forms/filtersets.py:1426 +#: netbox/templates/dcim/interface.html:91 msgid "Transmit power (dBm)" msgstr "Potenza di trasmissione (dBm)" -#: netbox/dcim/forms/filtersets.py:1446 netbox/dcim/forms/filtersets.py:1471 -#: netbox/dcim/tables/devices.py:327 netbox/templates/dcim/cable.html:12 +#: netbox/dcim/forms/filtersets.py:1451 netbox/dcim/forms/filtersets.py:1476 +#: netbox/dcim/tables/devices.py:337 netbox/templates/dcim/cable.html:12 #: netbox/templates/dcim/cable_trace.html:46 #: netbox/templates/dcim/frontport.html:77 #: netbox/templates/dcim/htmx/cable_edit.html:50 @@ -4829,41 +5261,78 @@ msgstr "Potenza di trasmissione (dBm)" msgid "Cable" msgstr "Cavo" -#: netbox/dcim/forms/filtersets.py:1550 netbox/dcim/tables/devices.py:949 +#: netbox/dcim/forms/filtersets.py:1555 netbox/dcim/tables/devices.py:979 msgid "Discovered" msgstr "Scoperto" +#: netbox/dcim/forms/filtersets.py:1596 netbox/ipam/forms/filtersets.py:350 +msgid "Assigned Device" +msgstr "Dispositivo assegnato" + +#: netbox/dcim/forms/filtersets.py:1601 netbox/ipam/forms/filtersets.py:355 +msgid "Assigned VM" +msgstr "VM assegnata" + #: netbox/dcim/forms/formsets.py:20 #, python-brace-format msgid "A virtual chassis member already exists in position {vc_position}." msgstr "" "Un membro virtuale dello chassis esiste già in posizione {vc_position}." -#: netbox/dcim/forms/model_forms.py:140 +#: netbox/dcim/forms/mixins.py:27 netbox/dcim/forms/mixins.py:75 +#: netbox/ipam/forms/bulk_edit.py:420 netbox/ipam/forms/model_forms.py:618 +msgid "Scope type" +msgstr "Tipo di ambito" + +#: netbox/dcim/forms/mixins.py:30 netbox/dcim/forms/mixins.py:78 +#: netbox/ipam/forms/bulk_edit.py:270 netbox/ipam/forms/bulk_edit.py:423 +#: netbox/ipam/forms/bulk_edit.py:437 netbox/ipam/forms/filtersets.py:175 +#: netbox/ipam/forms/model_forms.py:231 netbox/ipam/forms/model_forms.py:621 +#: netbox/ipam/forms/model_forms.py:631 netbox/ipam/tables/ip.py:194 +#: netbox/ipam/tables/vlans.py:40 netbox/templates/ipam/prefix.html:48 +#: netbox/templates/ipam/vlangroup.html:38 +#: netbox/templates/virtualization/cluster.html:42 +#: netbox/templates/wireless/wirelesslan.html:26 +#: netbox/virtualization/forms/bulk_edit.py:91 +#: netbox/virtualization/forms/filtersets.py:46 +#: netbox/virtualization/forms/model_forms.py:79 +#: netbox/virtualization/tables/clusters.py:80 +#: netbox/wireless/forms/bulk_edit.py:93 +#: netbox/wireless/forms/filtersets.py:37 +#: netbox/wireless/forms/model_forms.py:56 +#: netbox/wireless/tables/wirelesslan.py:58 +msgid "Scope" +msgstr "Ambito" + +#: netbox/dcim/forms/mixins.py:104 netbox/ipam/forms/bulk_import.py:436 +msgid "Scope type (app & model)" +msgstr "Tipo di ambito (app e modello)" + +#: netbox/dcim/forms/model_forms.py:144 msgid "Contact Info" msgstr "Informazioni di contatto" -#: netbox/dcim/forms/model_forms.py:195 netbox/templates/dcim/rackrole.html:19 +#: netbox/dcim/forms/model_forms.py:199 netbox/templates/dcim/rackrole.html:19 msgid "Rack Role" msgstr "Ruolo del rack" -#: netbox/dcim/forms/model_forms.py:212 netbox/dcim/forms/model_forms.py:362 -#: netbox/dcim/forms/model_forms.py:446 +#: netbox/dcim/forms/model_forms.py:217 netbox/dcim/forms/model_forms.py:371 +#: netbox/dcim/forms/model_forms.py:456 #: netbox/utilities/forms/fields/fields.py:47 msgid "Slug" msgstr "lumaca" -#: netbox/dcim/forms/model_forms.py:259 +#: netbox/dcim/forms/model_forms.py:264 msgid "Select a pre-defined rack type, or set physical characteristics below." msgstr "" "Seleziona un tipo di rack predefinito o imposta le caratteristiche fisiche " "di seguito." -#: netbox/dcim/forms/model_forms.py:265 +#: netbox/dcim/forms/model_forms.py:273 msgid "Inventory Control" msgstr "Controllo dell'inventario" -#: netbox/dcim/forms/model_forms.py:313 +#: netbox/dcim/forms/model_forms.py:321 msgid "" "Comma-separated list of numeric unit IDs. A range may be specified using a " "hyphen." @@ -4871,39 +5340,39 @@ msgstr "" "Elenco separato da virgole di ID di unità numeriche. È possibile specificare" " un intervallo utilizzando un trattino." -#: netbox/dcim/forms/model_forms.py:322 netbox/dcim/tables/racks.py:202 +#: netbox/dcim/forms/model_forms.py:330 netbox/dcim/tables/racks.py:201 msgid "Reservation" msgstr "Prenotazione" -#: netbox/dcim/forms/model_forms.py:423 +#: netbox/dcim/forms/model_forms.py:432 #: netbox/templates/dcim/devicerole.html:23 msgid "Device Role" msgstr "Ruolo del dispositivo" -#: netbox/dcim/forms/model_forms.py:490 netbox/dcim/models/devices.py:644 +#: netbox/dcim/forms/model_forms.py:500 netbox/dcim/models/devices.py:635 msgid "The lowest-numbered unit occupied by the device" msgstr "L'unità con il numero più basso occupata dal dispositivo" -#: netbox/dcim/forms/model_forms.py:547 +#: netbox/dcim/forms/model_forms.py:558 msgid "The position in the virtual chassis this device is identified by" msgstr "" "La posizione nello chassis virtuale da cui viene identificato questo " "dispositivo" -#: netbox/dcim/forms/model_forms.py:552 +#: netbox/dcim/forms/model_forms.py:563 msgid "The priority of the device in the virtual chassis" msgstr "La priorità del dispositivo nello chassis virtuale" -#: netbox/dcim/forms/model_forms.py:659 +#: netbox/dcim/forms/model_forms.py:670 msgid "Automatically populate components associated with this module type" msgstr "" "Compila automaticamente i componenti associati a questo tipo di modulo" -#: netbox/dcim/forms/model_forms.py:767 +#: netbox/dcim/forms/model_forms.py:779 msgid "Characteristics" msgstr "Caratteristiche" -#: netbox/dcim/forms/model_forms.py:914 +#: netbox/dcim/forms/model_forms.py:926 #, python-brace-format msgid "" "Alphanumeric ranges are supported for bulk creation. Mixed cases and types " @@ -4918,60 +5387,35 @@ msgstr "" "{module}, se presente, verrà automaticamente sostituito con il " "valore della posizione durante la creazione di un nuovo modulo." -#: netbox/dcim/forms/model_forms.py:1094 +#: netbox/dcim/forms/model_forms.py:1107 msgid "Console port template" msgstr "Modello di porta console" -#: netbox/dcim/forms/model_forms.py:1102 +#: netbox/dcim/forms/model_forms.py:1115 msgid "Console server port template" msgstr "Modello di porta del server console" -#: netbox/dcim/forms/model_forms.py:1110 +#: netbox/dcim/forms/model_forms.py:1123 msgid "Front port template" msgstr "Modello di porta anteriore" -#: netbox/dcim/forms/model_forms.py:1118 +#: netbox/dcim/forms/model_forms.py:1131 msgid "Interface template" msgstr "Modello di interfaccia" -#: netbox/dcim/forms/model_forms.py:1126 +#: netbox/dcim/forms/model_forms.py:1139 msgid "Power outlet template" msgstr "Modello di presa di corrente" -#: netbox/dcim/forms/model_forms.py:1134 +#: netbox/dcim/forms/model_forms.py:1147 msgid "Power port template" msgstr "Modello di porta di alimentazione" -#: netbox/dcim/forms/model_forms.py:1142 +#: netbox/dcim/forms/model_forms.py:1155 msgid "Rear port template" msgstr "Modello di porta posteriore" -#: netbox/dcim/forms/model_forms.py:1151 netbox/dcim/forms/model_forms.py:1395 -#: netbox/dcim/forms/model_forms.py:1558 netbox/dcim/forms/model_forms.py:1590 -#: netbox/dcim/tables/connections.py:65 netbox/ipam/forms/bulk_import.py:318 -#: netbox/ipam/forms/model_forms.py:280 netbox/ipam/forms/model_forms.py:289 -#: netbox/ipam/tables/fhrp.py:64 netbox/ipam/tables/ip.py:372 -#: netbox/ipam/tables/vlans.py:169 -#: netbox/templates/circuits/inc/circuit_termination_fields.html:51 -#: netbox/templates/dcim/frontport.html:106 -#: netbox/templates/dcim/interface.html:27 -#: netbox/templates/dcim/interface.html:184 -#: netbox/templates/dcim/interface.html:310 -#: netbox/templates/dcim/rearport.html:102 -#: netbox/templates/virtualization/vminterface.html:18 -#: netbox/templates/vpn/tunneltermination.html:31 -#: netbox/templates/wireless/inc/wirelesslink_interface.html:10 -#: netbox/templates/wireless/wirelesslink.html:10 -#: netbox/templates/wireless/wirelesslink.html:55 -#: netbox/virtualization/forms/model_forms.py:348 -#: netbox/vpn/forms/bulk_import.py:297 netbox/vpn/forms/model_forms.py:436 -#: netbox/vpn/forms/model_forms.py:445 -#: netbox/wireless/forms/model_forms.py:113 -#: netbox/wireless/forms/model_forms.py:155 -msgid "Interface" -msgstr "Interfaccia" - -#: netbox/dcim/forms/model_forms.py:1152 netbox/dcim/forms/model_forms.py:1591 +#: netbox/dcim/forms/model_forms.py:1165 netbox/dcim/forms/model_forms.py:1636 #: netbox/dcim/tables/connections.py:27 #: netbox/templates/dcim/consoleport.html:17 #: netbox/templates/dcim/consoleserverport.html:74 @@ -4979,71 +5423,71 @@ msgstr "Interfaccia" msgid "Console Port" msgstr "Porta console" -#: netbox/dcim/forms/model_forms.py:1153 netbox/dcim/forms/model_forms.py:1592 +#: netbox/dcim/forms/model_forms.py:1166 netbox/dcim/forms/model_forms.py:1637 #: netbox/templates/dcim/consoleport.html:73 #: netbox/templates/dcim/consoleserverport.html:17 #: netbox/templates/dcim/frontport.html:109 msgid "Console Server Port" msgstr "Porta Console Server" -#: netbox/dcim/forms/model_forms.py:1154 netbox/dcim/forms/model_forms.py:1593 -#: netbox/templates/circuits/inc/circuit_termination_fields.html:52 +#: netbox/dcim/forms/model_forms.py:1167 netbox/dcim/forms/model_forms.py:1638 +#: netbox/templates/circuits/inc/circuit_termination_fields.html:53 #: netbox/templates/dcim/consoleport.html:76 #: netbox/templates/dcim/consoleserverport.html:77 #: netbox/templates/dcim/frontport.html:17 #: netbox/templates/dcim/frontport.html:115 -#: netbox/templates/dcim/interface.html:187 +#: netbox/templates/dcim/interface.html:244 #: netbox/templates/dcim/rearport.html:105 msgid "Front Port" msgstr "Porta anteriore" -#: netbox/dcim/forms/model_forms.py:1155 netbox/dcim/forms/model_forms.py:1594 -#: netbox/dcim/tables/devices.py:710 -#: netbox/templates/circuits/inc/circuit_termination_fields.html:53 +#: netbox/dcim/forms/model_forms.py:1168 netbox/dcim/forms/model_forms.py:1639 +#: netbox/dcim/tables/devices.py:744 +#: netbox/templates/circuits/inc/circuit_termination_fields.html:54 #: netbox/templates/dcim/consoleport.html:79 #: netbox/templates/dcim/consoleserverport.html:80 #: netbox/templates/dcim/frontport.html:50 #: netbox/templates/dcim/frontport.html:118 -#: netbox/templates/dcim/interface.html:190 +#: netbox/templates/dcim/interface.html:247 #: netbox/templates/dcim/rearport.html:17 #: netbox/templates/dcim/rearport.html:108 msgid "Rear Port" msgstr "Porta posteriore" -#: netbox/dcim/forms/model_forms.py:1156 netbox/dcim/forms/model_forms.py:1595 -#: netbox/dcim/tables/connections.py:46 netbox/dcim/tables/devices.py:512 -#: netbox/templates/dcim/poweroutlet.html:44 +#: netbox/dcim/forms/model_forms.py:1169 netbox/dcim/forms/model_forms.py:1640 +#: netbox/dcim/tables/connections.py:46 netbox/dcim/tables/devices.py:521 +#: netbox/templates/dcim/poweroutlet.html:54 #: netbox/templates/dcim/powerport.html:17 msgid "Power Port" msgstr "Porta di alimentazione" -#: netbox/dcim/forms/model_forms.py:1157 netbox/dcim/forms/model_forms.py:1596 +#: netbox/dcim/forms/model_forms.py:1170 netbox/dcim/forms/model_forms.py:1641 #: netbox/templates/dcim/poweroutlet.html:17 #: netbox/templates/dcim/powerport.html:77 msgid "Power Outlet" msgstr "Presa di corrente" -#: netbox/dcim/forms/model_forms.py:1159 netbox/dcim/forms/model_forms.py:1598 +#: netbox/dcim/forms/model_forms.py:1172 netbox/dcim/forms/model_forms.py:1643 msgid "Component Assignment" msgstr "Assegnazione dei componenti" -#: netbox/dcim/forms/model_forms.py:1202 netbox/dcim/forms/model_forms.py:1645 +#: netbox/dcim/forms/model_forms.py:1218 netbox/dcim/forms/model_forms.py:1690 msgid "An InventoryItem can only be assigned to a single component." msgstr "Un InventoryItem può essere assegnato solo a un singolo componente." -#: netbox/dcim/forms/model_forms.py:1339 +#: netbox/dcim/forms/model_forms.py:1355 msgid "LAG interface" msgstr "Interfaccia LAG" -#: netbox/dcim/forms/model_forms.py:1362 +#: netbox/dcim/forms/model_forms.py:1378 msgid "Filter VLANs available for assignment by group." msgstr "Filtra le VLAN disponibili per l'assegnazione per gruppo." -#: netbox/dcim/forms/model_forms.py:1491 +#: netbox/dcim/forms/model_forms.py:1533 msgid "Child Device" msgstr "Dispositivo per bambini" -#: netbox/dcim/forms/model_forms.py:1492 +#: netbox/dcim/forms/model_forms.py:1534 msgid "" "Child devices must first be created and assigned to the site and rack of the" " parent device." @@ -5051,32 +5495,58 @@ msgstr "" "I dispositivi secondari devono prima essere creati e assegnati al sito e al " "rack del dispositivo principale." -#: netbox/dcim/forms/model_forms.py:1534 +#: netbox/dcim/forms/model_forms.py:1576 msgid "Console port" msgstr "Porta console" -#: netbox/dcim/forms/model_forms.py:1542 +#: netbox/dcim/forms/model_forms.py:1584 msgid "Console server port" msgstr "Porta console server" -#: netbox/dcim/forms/model_forms.py:1550 +#: netbox/dcim/forms/model_forms.py:1592 msgid "Front port" msgstr "Porta anteriore" -#: netbox/dcim/forms/model_forms.py:1566 +#: netbox/dcim/forms/model_forms.py:1608 msgid "Power outlet" msgstr "Presa di corrente" -#: netbox/dcim/forms/model_forms.py:1586 +#: netbox/dcim/forms/model_forms.py:1630 #: netbox/templates/dcim/inventoryitem.html:17 msgid "Inventory Item" msgstr "Articolo di inventario" -#: netbox/dcim/forms/model_forms.py:1659 +#: netbox/dcim/forms/model_forms.py:1704 #: netbox/templates/dcim/inventoryitemrole.html:15 msgid "Inventory Item Role" msgstr "Ruolo dell'articolo di inventario" +#: netbox/dcim/forms/model_forms.py:1773 +msgid "VM Interface" +msgstr "Interfaccia VM" + +#: netbox/dcim/forms/model_forms.py:1788 netbox/ipam/forms/filtersets.py:608 +#: netbox/ipam/forms/model_forms.py:334 netbox/ipam/forms/model_forms.py:796 +#: netbox/ipam/forms/model_forms.py:822 netbox/ipam/tables/vlans.py:171 +#: netbox/templates/virtualization/virtualdisk.html:21 +#: netbox/templates/virtualization/virtualmachine.html:12 +#: netbox/templates/virtualization/vminterface.html:21 +#: netbox/templates/vpn/tunneltermination.html:25 +#: netbox/virtualization/forms/filtersets.py:202 +#: netbox/virtualization/forms/filtersets.py:247 +#: netbox/virtualization/forms/model_forms.py:227 +#: netbox/virtualization/tables/virtualmachines.py:105 +#: netbox/virtualization/tables/virtualmachines.py:161 +#: netbox/vpn/choices.py:53 netbox/vpn/forms/filtersets.py:293 +#: netbox/vpn/forms/model_forms.py:161 netbox/vpn/forms/model_forms.py:172 +#: netbox/vpn/forms/model_forms.py:274 netbox/vpn/forms/model_forms.py:457 +msgid "Virtual Machine" +msgstr "Macchina virtuale" + +#: netbox/dcim/forms/model_forms.py:1827 +msgid "A MAC address can only be assigned to a single object." +msgstr "Un indirizzo MAC può essere assegnato a un solo oggetto." + #: netbox/dcim/forms/object_create.py:48 #: netbox/dcim/forms/object_create.py:199 #: netbox/dcim/forms/object_create.py:347 @@ -5097,7 +5567,7 @@ msgstr "" "attesi." #: netbox/dcim/forms/object_create.py:110 -#: netbox/dcim/forms/object_create.py:263 netbox/dcim/tables/devices.py:252 +#: netbox/dcim/forms/object_create.py:263 netbox/dcim/tables/devices.py:263 msgid "Rear ports" msgstr "Porte posteriori" @@ -5128,7 +5598,7 @@ msgstr "" " al numero selezionato di posizioni delle porte posteriori " "({rearport_count})." -#: netbox/dcim/forms/object_create.py:401 netbox/dcim/tables/devices.py:1033 +#: netbox/dcim/forms/object_create.py:401 netbox/dcim/tables/devices.py:1065 #: netbox/ipam/tables/fhrp.py:31 netbox/templates/dcim/virtualchassis.html:53 #: netbox/templates/dcim/virtualchassis_edit.html:47 #: netbox/templates/ipam/fhrpgroup.html:38 @@ -5147,30 +5617,30 @@ msgstr "" "Posizione del primo dispositivo membro. Aumenta di uno per ogni membro " "aggiuntivo." -#: netbox/dcim/forms/object_create.py:427 +#: netbox/dcim/forms/object_create.py:428 msgid "A position must be specified for the first VC member." msgstr "È necessario specificare una posizione per il primo membro VC." -#: netbox/dcim/models/cables.py:62 -#: netbox/dcim/models/device_component_templates.py:55 -#: netbox/dcim/models/device_components.py:62 +#: netbox/dcim/models/cables.py:64 +#: netbox/dcim/models/device_component_templates.py:51 +#: netbox/dcim/models/device_components.py:57 #: netbox/extras/models/customfields.py:111 msgid "label" msgstr "etichetta" -#: netbox/dcim/models/cables.py:71 +#: netbox/dcim/models/cables.py:73 msgid "length" msgstr "lunghezza" -#: netbox/dcim/models/cables.py:78 +#: netbox/dcim/models/cables.py:80 msgid "length unit" msgstr "unità di lunghezza" -#: netbox/dcim/models/cables.py:95 +#: netbox/dcim/models/cables.py:98 msgid "cable" msgstr "cavo" -#: netbox/dcim/models/cables.py:96 +#: netbox/dcim/models/cables.py:99 msgid "cables" msgstr "cavi" @@ -5199,19 +5669,19 @@ msgstr "Tipi di terminazione incompatibili: {type_a} e {type_b}" msgid "A and B terminations cannot connect to the same object." msgstr "Le terminazioni A e B non possono connettersi allo stesso oggetto." -#: netbox/dcim/models/cables.py:260 netbox/ipam/models/asns.py:37 +#: netbox/dcim/models/cables.py:262 netbox/ipam/models/asns.py:37 msgid "end" msgstr "fine" -#: netbox/dcim/models/cables.py:313 +#: netbox/dcim/models/cables.py:315 msgid "cable termination" msgstr "terminazione del cavo" -#: netbox/dcim/models/cables.py:314 +#: netbox/dcim/models/cables.py:316 msgid "cable terminations" msgstr "terminazioni dei cavi" -#: netbox/dcim/models/cables.py:333 +#: netbox/dcim/models/cables.py:335 #, python-brace-format msgid "" "Duplicate termination found for {app_label}.{model} {termination_id}: cable " @@ -5220,37 +5690,71 @@ msgstr "" "È stata rilevata una terminazione duplicata per {app_label}.{model} " "{termination_id}: cavo {cable_pk}" -#: netbox/dcim/models/cables.py:343 +#: netbox/dcim/models/cables.py:345 #, python-brace-format msgid "Cables cannot be terminated to {type_display} interfaces" msgstr "I cavi non possono essere terminati {type_display} interfacce" -#: netbox/dcim/models/cables.py:350 +#: netbox/dcim/models/cables.py:352 msgid "Circuit terminations attached to a provider network may not be cabled." msgstr "" "Le terminazioni dei circuiti collegate alla rete di un provider potrebbero " "non essere cablate." -#: netbox/dcim/models/cables.py:448 netbox/extras/models/configs.py:50 +#: netbox/dcim/models/cables.py:450 netbox/extras/models/configs.py:50 msgid "is active" msgstr "è attivo" -#: netbox/dcim/models/cables.py:452 +#: netbox/dcim/models/cables.py:454 msgid "is complete" msgstr "è completo" -#: netbox/dcim/models/cables.py:456 +#: netbox/dcim/models/cables.py:458 msgid "is split" msgstr "è diviso" -#: netbox/dcim/models/cables.py:464 +#: netbox/dcim/models/cables.py:466 msgid "cable path" msgstr "percorso via cavo" -#: netbox/dcim/models/cables.py:465 +#: netbox/dcim/models/cables.py:467 msgid "cable paths" msgstr "percorsi via cavo" +#: netbox/dcim/models/cables.py:539 +msgid "All originating terminations must be attached to the same link" +msgstr "" +"Tutte le terminazioni originarie devono essere allegate allo stesso link" + +#: netbox/dcim/models/cables.py:551 +msgid "All mid-span terminations must have the same termination type" +msgstr "" +"Tutte le terminazioni mid-span devono avere lo stesso tipo di terminazione" + +#: netbox/dcim/models/cables.py:556 +msgid "All mid-span terminations must have the same parent object" +msgstr "" +"Tutte le terminazioni mid-span devono avere lo stesso oggetto principale" + +#: netbox/dcim/models/cables.py:580 +msgid "All links must be cable or wireless" +msgstr "Tutti i collegamenti devono essere via cavo o wireless" + +#: netbox/dcim/models/cables.py:582 +msgid "All links must match first link type" +msgstr "Tutti i link devono corrispondere al primo tipo di link" + +#: netbox/dcim/models/cables.py:665 +msgid "" +"All positions counts within the path on opposite ends of links must match" +msgstr "" +"Tutti i conteggi delle posizioni all'interno del percorso alle estremità " +"opposte dei collegamenti devono corrispondere" + +#: netbox/dcim/models/cables.py:674 +msgid "Remote termination position filter is missing" +msgstr "Manca il filtro della posizione di terminazione remota" + #: netbox/dcim/models/device_component_templates.py:46 #, python-brace-format msgid "" @@ -5260,18 +5764,18 @@ msgstr "" "{module} è accettato come sostituto della posizione dell'alloggiamento del " "modulo quando è collegato a un tipo di modulo." -#: netbox/dcim/models/device_component_templates.py:58 -#: netbox/dcim/models/device_components.py:65 +#: netbox/dcim/models/device_component_templates.py:54 +#: netbox/dcim/models/device_components.py:60 msgid "Physical label" msgstr "Etichetta fisica" -#: netbox/dcim/models/device_component_templates.py:103 +#: netbox/dcim/models/device_component_templates.py:99 msgid "Component templates cannot be moved to a different device type." msgstr "" "I modelli di componente non possono essere spostati su un tipo di " "dispositivo diverso." -#: netbox/dcim/models/device_component_templates.py:154 +#: netbox/dcim/models/device_component_templates.py:150 msgid "" "A component template cannot be associated with both a device type and a " "module type." @@ -5279,7 +5783,7 @@ msgstr "" "Un modello di componente non può essere associato sia a un tipo di " "dispositivo che a un tipo di modulo." -#: netbox/dcim/models/device_component_templates.py:158 +#: netbox/dcim/models/device_component_templates.py:154 msgid "" "A component template must be associated with either a device type or a " "module type." @@ -5287,142 +5791,142 @@ msgstr "" "Un modello di componente deve essere associato a un tipo di dispositivo o a " "un tipo di modulo." -#: netbox/dcim/models/device_component_templates.py:212 +#: netbox/dcim/models/device_component_templates.py:209 msgid "console port template" msgstr "modello di porta console" -#: netbox/dcim/models/device_component_templates.py:213 +#: netbox/dcim/models/device_component_templates.py:210 msgid "console port templates" msgstr "modelli di porte per console" -#: netbox/dcim/models/device_component_templates.py:246 +#: netbox/dcim/models/device_component_templates.py:244 msgid "console server port template" msgstr "modello di porta console server" -#: netbox/dcim/models/device_component_templates.py:247 +#: netbox/dcim/models/device_component_templates.py:245 msgid "console server port templates" msgstr "modelli di porte per console server" -#: netbox/dcim/models/device_component_templates.py:278 -#: netbox/dcim/models/device_components.py:352 +#: netbox/dcim/models/device_component_templates.py:277 +#: netbox/dcim/models/device_components.py:345 msgid "maximum draw" msgstr "pareggio massimo" -#: netbox/dcim/models/device_component_templates.py:285 -#: netbox/dcim/models/device_components.py:359 +#: netbox/dcim/models/device_component_templates.py:284 +#: netbox/dcim/models/device_components.py:352 msgid "allocated draw" msgstr "pareggio assegnato" -#: netbox/dcim/models/device_component_templates.py:295 +#: netbox/dcim/models/device_component_templates.py:294 msgid "power port template" msgstr "modello di porta di alimentazione" -#: netbox/dcim/models/device_component_templates.py:296 +#: netbox/dcim/models/device_component_templates.py:295 msgid "power port templates" msgstr "modelli di porte di alimentazione" #: netbox/dcim/models/device_component_templates.py:315 -#: netbox/dcim/models/device_components.py:382 +#: netbox/dcim/models/device_components.py:372 #, python-brace-format msgid "Allocated draw cannot exceed the maximum draw ({maximum_draw}W)." msgstr "" "Il pareggio assegnato non può superare il pareggio massimo " "({maximum_draw}W)." -#: netbox/dcim/models/device_component_templates.py:347 -#: netbox/dcim/models/device_components.py:477 +#: netbox/dcim/models/device_component_templates.py:349 +#: netbox/dcim/models/device_components.py:468 msgid "feed leg" msgstr "gamba di alimentazione" -#: netbox/dcim/models/device_component_templates.py:351 -#: netbox/dcim/models/device_components.py:481 +#: netbox/dcim/models/device_component_templates.py:354 +#: netbox/dcim/models/device_components.py:473 msgid "Phase (for three-phase feeds)" msgstr "Fase (per alimentazioni trifase)" -#: netbox/dcim/models/device_component_templates.py:357 +#: netbox/dcim/models/device_component_templates.py:360 msgid "power outlet template" msgstr "modello di presa di corrente" -#: netbox/dcim/models/device_component_templates.py:358 +#: netbox/dcim/models/device_component_templates.py:361 msgid "power outlet templates" msgstr "modelli di prese di corrente" -#: netbox/dcim/models/device_component_templates.py:367 +#: netbox/dcim/models/device_component_templates.py:370 #, python-brace-format msgid "Parent power port ({power_port}) must belong to the same device type" msgstr "" "Porta di alimentazione principale ({power_port}) deve appartenere allo " "stesso tipo di dispositivo" -#: netbox/dcim/models/device_component_templates.py:371 +#: netbox/dcim/models/device_component_templates.py:376 #, python-brace-format msgid "Parent power port ({power_port}) must belong to the same module type" msgstr "" "Porta di alimentazione principale ({power_port}) deve appartenere allo " "stesso tipo di modulo" -#: netbox/dcim/models/device_component_templates.py:423 -#: netbox/dcim/models/device_components.py:611 +#: netbox/dcim/models/device_component_templates.py:430 +#: netbox/dcim/models/device_components.py:659 msgid "management only" msgstr "solo gestione" -#: netbox/dcim/models/device_component_templates.py:431 -#: netbox/dcim/models/device_components.py:550 +#: netbox/dcim/models/device_component_templates.py:438 +#: netbox/dcim/models/device_components.py:539 msgid "bridge interface" msgstr "interfaccia bridge" -#: netbox/dcim/models/device_component_templates.py:449 -#: netbox/dcim/models/device_components.py:636 +#: netbox/dcim/models/device_component_templates.py:459 +#: netbox/dcim/models/device_components.py:685 msgid "wireless role" msgstr "ruolo wireless" -#: netbox/dcim/models/device_component_templates.py:455 +#: netbox/dcim/models/device_component_templates.py:465 msgid "interface template" msgstr "modello di interfaccia" -#: netbox/dcim/models/device_component_templates.py:456 +#: netbox/dcim/models/device_component_templates.py:466 msgid "interface templates" msgstr "modelli di interfaccia" -#: netbox/dcim/models/device_component_templates.py:463 -#: netbox/dcim/models/device_components.py:804 -#: netbox/virtualization/models/virtualmachines.py:405 +#: netbox/dcim/models/device_component_templates.py:473 +#: netbox/dcim/models/device_components.py:845 +#: netbox/virtualization/models/virtualmachines.py:385 msgid "An interface cannot be bridged to itself." msgstr "Un'interfaccia non può essere collegata a se stessa." -#: netbox/dcim/models/device_component_templates.py:466 +#: netbox/dcim/models/device_component_templates.py:477 #, python-brace-format msgid "Bridge interface ({bridge}) must belong to the same device type" msgstr "" "Interfaccia bridge ({bridge}) deve appartenere allo stesso tipo di " "dispositivo" -#: netbox/dcim/models/device_component_templates.py:470 +#: netbox/dcim/models/device_component_templates.py:483 #, python-brace-format msgid "Bridge interface ({bridge}) must belong to the same module type" msgstr "" "Interfaccia bridge ({bridge}) deve appartenere allo stesso tipo di modulo" -#: netbox/dcim/models/device_component_templates.py:526 -#: netbox/dcim/models/device_components.py:984 +#: netbox/dcim/models/device_component_templates.py:540 +#: netbox/dcim/models/device_components.py:1035 msgid "rear port position" msgstr "posizione della porta posteriore" -#: netbox/dcim/models/device_component_templates.py:551 +#: netbox/dcim/models/device_component_templates.py:565 msgid "front port template" msgstr "modello di porta anteriore" -#: netbox/dcim/models/device_component_templates.py:552 +#: netbox/dcim/models/device_component_templates.py:566 msgid "front port templates" msgstr "modelli di porte anteriori" -#: netbox/dcim/models/device_component_templates.py:562 +#: netbox/dcim/models/device_component_templates.py:576 #, python-brace-format msgid "Rear port ({name}) must belong to the same device type" msgstr "" "Porta posteriore ({name}) deve appartenere allo stesso tipo di dispositivo" -#: netbox/dcim/models/device_component_templates.py:568 +#: netbox/dcim/models/device_component_templates.py:582 #, python-brace-format msgid "" "Invalid rear port position ({position}); rear port {name} has only {count} " @@ -5431,48 +5935,48 @@ msgstr "" "Posizione della porta posteriore non valida ({position}); porta posteriore " "{name} ha solo {count} posizioni" -#: netbox/dcim/models/device_component_templates.py:621 -#: netbox/dcim/models/device_components.py:1053 +#: netbox/dcim/models/device_component_templates.py:635 +#: netbox/dcim/models/device_components.py:1101 msgid "positions" msgstr "posizioni" -#: netbox/dcim/models/device_component_templates.py:632 +#: netbox/dcim/models/device_component_templates.py:646 msgid "rear port template" msgstr "modello di porta posteriore" -#: netbox/dcim/models/device_component_templates.py:633 +#: netbox/dcim/models/device_component_templates.py:647 msgid "rear port templates" msgstr "modelli di porte posteriori" -#: netbox/dcim/models/device_component_templates.py:662 -#: netbox/dcim/models/device_components.py:1103 +#: netbox/dcim/models/device_component_templates.py:676 +#: netbox/dcim/models/device_components.py:1148 msgid "position" msgstr "posizione" -#: netbox/dcim/models/device_component_templates.py:665 -#: netbox/dcim/models/device_components.py:1106 +#: netbox/dcim/models/device_component_templates.py:679 +#: netbox/dcim/models/device_components.py:1151 msgid "Identifier to reference when renaming installed components" msgstr "" "Identificatore a cui fare riferimento quando si rinominano i componenti " "installati" -#: netbox/dcim/models/device_component_templates.py:671 +#: netbox/dcim/models/device_component_templates.py:685 msgid "module bay template" msgstr "modello di alloggiamento del modulo" -#: netbox/dcim/models/device_component_templates.py:672 +#: netbox/dcim/models/device_component_templates.py:686 msgid "module bay templates" msgstr "modelli module bay" -#: netbox/dcim/models/device_component_templates.py:699 +#: netbox/dcim/models/device_component_templates.py:713 msgid "device bay template" msgstr "modello di alloggiamento per dispositivi" -#: netbox/dcim/models/device_component_templates.py:700 +#: netbox/dcim/models/device_component_templates.py:714 msgid "device bay templates" msgstr "modelli di alloggiamento per dispositivi" -#: netbox/dcim/models/device_component_templates.py:713 +#: netbox/dcim/models/device_component_templates.py:728 #, python-brace-format msgid "" "Subdevice role of device type ({device_type}) must be set to \"parent\" to " @@ -5481,213 +5985,232 @@ msgstr "" "Ruolo del tipo di dispositivo secondario ({device_type}) deve essere " "impostato su «principale» per consentire gli alloggiamenti dei dispositivi." -#: netbox/dcim/models/device_component_templates.py:768 -#: netbox/dcim/models/device_components.py:1262 +#: netbox/dcim/models/device_component_templates.py:784 +#: netbox/dcim/models/device_components.py:1304 msgid "part ID" msgstr "ID della parte" -#: netbox/dcim/models/device_component_templates.py:770 -#: netbox/dcim/models/device_components.py:1264 +#: netbox/dcim/models/device_component_templates.py:786 +#: netbox/dcim/models/device_components.py:1306 msgid "Manufacturer-assigned part identifier" msgstr "Identificativo del pezzo assegnato dal produttore" -#: netbox/dcim/models/device_component_templates.py:787 +#: netbox/dcim/models/device_component_templates.py:803 msgid "inventory item template" msgstr "modello di articolo di inventario" -#: netbox/dcim/models/device_component_templates.py:788 +#: netbox/dcim/models/device_component_templates.py:804 msgid "inventory item templates" msgstr "modelli di articoli di inventario" -#: netbox/dcim/models/device_components.py:105 +#: netbox/dcim/models/device_components.py:100 msgid "Components cannot be moved to a different device." msgstr "I componenti non possono essere spostati su un dispositivo diverso." -#: netbox/dcim/models/device_components.py:144 +#: netbox/dcim/models/device_components.py:139 msgid "cable end" msgstr "estremità del cavo" -#: netbox/dcim/models/device_components.py:150 +#: netbox/dcim/models/device_components.py:146 msgid "mark connected" msgstr "contrassegnare connesso" -#: netbox/dcim/models/device_components.py:152 +#: netbox/dcim/models/device_components.py:148 msgid "Treat as if a cable is connected" msgstr "Tratta come se fosse collegato un cavo" -#: netbox/dcim/models/device_components.py:170 +#: netbox/dcim/models/device_components.py:166 msgid "Must specify cable end (A or B) when attaching a cable." msgstr "" "È necessario specificare l'estremità del cavo (A o B) quando si collega un " "cavo." -#: netbox/dcim/models/device_components.py:174 +#: netbox/dcim/models/device_components.py:170 msgid "Cable end must not be set without a cable." msgstr "L'estremità del cavo non deve essere impostata senza un cavo." -#: netbox/dcim/models/device_components.py:178 +#: netbox/dcim/models/device_components.py:174 msgid "Cannot mark as connected with a cable attached." msgstr "Non è possibile contrassegnare come connesso con un cavo collegato." -#: netbox/dcim/models/device_components.py:202 +#: netbox/dcim/models/device_components.py:198 #, python-brace-format msgid "{class_name} models must declare a parent_object property" msgstr "{class_name} i modelli devono dichiarare una proprietà parent_object" -#: netbox/dcim/models/device_components.py:287 -#: netbox/dcim/models/device_components.py:316 -#: netbox/dcim/models/device_components.py:349 -#: netbox/dcim/models/device_components.py:467 +#: netbox/dcim/models/device_components.py:284 +#: netbox/dcim/models/device_components.py:311 +#: netbox/dcim/models/device_components.py:342 +#: netbox/dcim/models/device_components.py:458 msgid "Physical port type" msgstr "Tipo di porta fisica" -#: netbox/dcim/models/device_components.py:290 -#: netbox/dcim/models/device_components.py:319 +#: netbox/dcim/models/device_components.py:287 +#: netbox/dcim/models/device_components.py:314 msgid "speed" msgstr "velocità" -#: netbox/dcim/models/device_components.py:294 -#: netbox/dcim/models/device_components.py:323 +#: netbox/dcim/models/device_components.py:291 +#: netbox/dcim/models/device_components.py:318 msgid "Port speed in bits per second" msgstr "Velocità della porta in bit al secondo" -#: netbox/dcim/models/device_components.py:300 +#: netbox/dcim/models/device_components.py:297 msgid "console port" msgstr "porta console" -#: netbox/dcim/models/device_components.py:301 +#: netbox/dcim/models/device_components.py:298 msgid "console ports" msgstr "porte console" -#: netbox/dcim/models/device_components.py:329 +#: netbox/dcim/models/device_components.py:324 msgid "console server port" msgstr "porta console server" -#: netbox/dcim/models/device_components.py:330 +#: netbox/dcim/models/device_components.py:325 msgid "console server ports" msgstr "porte console server" -#: netbox/dcim/models/device_components.py:369 +#: netbox/dcim/models/device_components.py:362 msgid "power port" msgstr "porta di alimentazione" -#: netbox/dcim/models/device_components.py:370 +#: netbox/dcim/models/device_components.py:363 msgid "power ports" msgstr "porte di alimentazione" -#: netbox/dcim/models/device_components.py:487 +#: netbox/dcim/models/device_components.py:483 msgid "power outlet" msgstr "presa di corrente" -#: netbox/dcim/models/device_components.py:488 +#: netbox/dcim/models/device_components.py:484 msgid "power outlets" msgstr "prese di corrente" -#: netbox/dcim/models/device_components.py:499 +#: netbox/dcim/models/device_components.py:492 #, python-brace-format msgid "Parent power port ({power_port}) must belong to the same device" msgstr "" "Porta di alimentazione principale ({power_port}) deve appartenere allo " "stesso dispositivo" -#: netbox/dcim/models/device_components.py:530 netbox/vpn/models/crypto.py:81 -#: netbox/vpn/models/crypto.py:226 +#: netbox/dcim/models/device_components.py:518 netbox/vpn/models/crypto.py:80 +#: netbox/vpn/models/crypto.py:222 msgid "mode" msgstr "modalità" -#: netbox/dcim/models/device_components.py:534 +#: netbox/dcim/models/device_components.py:523 msgid "IEEE 802.1Q tagging strategy" msgstr "Strategia di etichettatura IEEE 802.1Q" -#: netbox/dcim/models/device_components.py:542 +#: netbox/dcim/models/device_components.py:531 msgid "parent interface" msgstr "interfaccia principale" -#: netbox/dcim/models/device_components.py:602 -msgid "parent LAG" -msgstr "GAL capogruppo" - -#: netbox/dcim/models/device_components.py:612 -msgid "This interface is used only for out-of-band management" -msgstr "Questa interfaccia viene utilizzata solo per la gestione fuori banda" - -#: netbox/dcim/models/device_components.py:617 -msgid "speed (Kbps)" -msgstr "velocità (Kbps)" - -#: netbox/dcim/models/device_components.py:620 -msgid "duplex" -msgstr "bifamiliare" - -#: netbox/dcim/models/device_components.py:630 -msgid "64-bit World Wide Name" -msgstr "Nome mondiale a 64 bit" - -#: netbox/dcim/models/device_components.py:642 -msgid "wireless channel" -msgstr "canale wireless" - -#: netbox/dcim/models/device_components.py:649 -msgid "channel frequency (MHz)" -msgstr "frequenza del canale (MHz)" - -#: netbox/dcim/models/device_components.py:650 -#: netbox/dcim/models/device_components.py:658 -msgid "Populated by selected channel (if set)" -msgstr "Popolato dal canale selezionato (se impostato)" - -#: netbox/dcim/models/device_components.py:664 -msgid "transmit power (dBm)" -msgstr "potenza di trasmissione (dBm)" - -#: netbox/dcim/models/device_components.py:689 netbox/wireless/models.py:117 -msgid "wireless LANs" -msgstr "LAN wireless" - -#: netbox/dcim/models/device_components.py:697 -#: netbox/virtualization/models/virtualmachines.py:335 +#: netbox/dcim/models/device_components.py:547 msgid "untagged VLAN" msgstr "VLAN senza tag" -#: netbox/dcim/models/device_components.py:703 -#: netbox/virtualization/models/virtualmachines.py:341 +#: netbox/dcim/models/device_components.py:553 msgid "tagged VLANs" msgstr "VLAN contrassegnate" -#: netbox/dcim/models/device_components.py:745 -#: netbox/virtualization/models/virtualmachines.py:377 +#: netbox/dcim/models/device_components.py:561 +#: netbox/dcim/tables/devices.py:602 netbox/ipam/forms/bulk_edit.py:510 +#: netbox/ipam/forms/bulk_import.py:491 netbox/ipam/forms/filtersets.py:565 +#: netbox/ipam/forms/model_forms.py:692 netbox/ipam/tables/vlans.py:106 +#: netbox/templates/dcim/interface.html:86 netbox/templates/ipam/vlan.html:77 +msgid "Q-in-Q SVLAN" +msgstr "SVLAN Q-in-Q" + +#: netbox/dcim/models/device_components.py:576 +msgid "primary MAC address" +msgstr "indirizzo MAC primario" + +#: netbox/dcim/models/device_components.py:588 +msgid "Only Q-in-Q interfaces may specify a service VLAN." +msgstr "Solo le interfacce Q-in-Q possono specificare una VLAN di servizio." + +#: netbox/dcim/models/device_components.py:594 +#, python-brace-format +msgid "MAC address {mac_address} is not assigned to this interface." +msgstr "Indirizzo MAC {mac_address} non è assegnato a questa interfaccia." + +#: netbox/dcim/models/device_components.py:650 +msgid "parent LAG" +msgstr "GAL capogruppo" + +#: netbox/dcim/models/device_components.py:660 +msgid "This interface is used only for out-of-band management" +msgstr "Questa interfaccia viene utilizzata solo per la gestione fuori banda" + +#: netbox/dcim/models/device_components.py:665 +msgid "speed (Kbps)" +msgstr "velocità (Kbps)" + +#: netbox/dcim/models/device_components.py:668 +msgid "duplex" +msgstr "bifamiliare" + +#: netbox/dcim/models/device_components.py:678 +msgid "64-bit World Wide Name" +msgstr "Nome mondiale a 64 bit" + +#: netbox/dcim/models/device_components.py:692 +msgid "wireless channel" +msgstr "canale wireless" + +#: netbox/dcim/models/device_components.py:699 +msgid "channel frequency (MHz)" +msgstr "frequenza del canale (MHz)" + +#: netbox/dcim/models/device_components.py:700 +#: netbox/dcim/models/device_components.py:708 +msgid "Populated by selected channel (if set)" +msgstr "Popolato dal canale selezionato (se impostato)" + +#: netbox/dcim/models/device_components.py:714 +msgid "transmit power (dBm)" +msgstr "potenza di trasmissione (dBm)" + +#: netbox/dcim/models/device_components.py:741 netbox/wireless/models.py:117 +msgid "wireless LANs" +msgstr "LAN wireless" + +#: netbox/dcim/models/device_components.py:789 +#: netbox/virtualization/models/virtualmachines.py:359 msgid "interface" msgstr "interfaccia" -#: netbox/dcim/models/device_components.py:746 -#: netbox/virtualization/models/virtualmachines.py:378 +#: netbox/dcim/models/device_components.py:790 +#: netbox/virtualization/models/virtualmachines.py:360 msgid "interfaces" msgstr "interfacce" -#: netbox/dcim/models/device_components.py:757 +#: netbox/dcim/models/device_components.py:798 #, python-brace-format msgid "{display_type} interfaces cannot have a cable attached." msgstr "{display_type} alle interfacce non è possibile collegare un cavo." -#: netbox/dcim/models/device_components.py:765 +#: netbox/dcim/models/device_components.py:806 #, python-brace-format msgid "{display_type} interfaces cannot be marked as connected." msgstr "" "{display_type} le interfacce non possono essere contrassegnate come " "connesse." -#: netbox/dcim/models/device_components.py:774 -#: netbox/virtualization/models/virtualmachines.py:390 +#: netbox/dcim/models/device_components.py:815 +#: netbox/virtualization/models/virtualmachines.py:370 msgid "An interface cannot be its own parent." msgstr "Un'interfaccia non può essere la propria madre." -#: netbox/dcim/models/device_components.py:778 +#: netbox/dcim/models/device_components.py:819 msgid "Only virtual interfaces may be assigned to a parent interface." msgstr "" "Solo le interfacce virtuali possono essere assegnate a un'interfaccia " "principale." -#: netbox/dcim/models/device_components.py:785 +#: netbox/dcim/models/device_components.py:826 #, python-brace-format msgid "" "The selected parent interface ({interface}) belongs to a different device " @@ -5696,7 +6219,7 @@ msgstr "" "L'interfaccia principale selezionata ({interface}) appartiene a un " "dispositivo diverso ({device})" -#: netbox/dcim/models/device_components.py:791 +#: netbox/dcim/models/device_components.py:832 #, python-brace-format msgid "" "The selected parent interface ({interface}) belongs to {device}, which is " @@ -5705,7 +6228,7 @@ msgstr "" "L'interfaccia principale selezionata ({interface}) appartiene a {device}, " "che non fa parte dello chassis virtuale {virtual_chassis}." -#: netbox/dcim/models/device_components.py:811 +#: netbox/dcim/models/device_components.py:852 #, python-brace-format msgid "" "The selected bridge interface ({bridge}) belongs to a different device " @@ -5714,7 +6237,7 @@ msgstr "" "L'interfaccia bridge selezionata ({bridge}) appartiene a un dispositivo " "diverso ({device})." -#: netbox/dcim/models/device_components.py:817 +#: netbox/dcim/models/device_components.py:858 #, python-brace-format msgid "" "The selected bridge interface ({interface}) belongs to {device}, which is " @@ -5723,16 +6246,16 @@ msgstr "" "L'interfaccia bridge selezionata ({interface}) appartiene a {device}, che " "non fa parte dello chassis virtuale {virtual_chassis}." -#: netbox/dcim/models/device_components.py:828 +#: netbox/dcim/models/device_components.py:869 msgid "Virtual interfaces cannot have a parent LAG interface." msgstr "" "Le interfacce virtuali non possono avere un'interfaccia LAG principale." -#: netbox/dcim/models/device_components.py:832 +#: netbox/dcim/models/device_components.py:873 msgid "A LAG interface cannot be its own parent." msgstr "Un'interfaccia LAG non può essere la propria interfaccia principale." -#: netbox/dcim/models/device_components.py:839 +#: netbox/dcim/models/device_components.py:880 #, python-brace-format msgid "" "The selected LAG interface ({lag}) belongs to a different device ({device})." @@ -5740,7 +6263,7 @@ msgstr "" "L'interfaccia LAG selezionata ({lag}) appartiene a un dispositivo diverso " "({device})." -#: netbox/dcim/models/device_components.py:845 +#: netbox/dcim/models/device_components.py:886 #, python-brace-format msgid "" "The selected LAG interface ({lag}) belongs to {device}, which is not part of" @@ -5749,51 +6272,55 @@ msgstr "" "L'interfaccia LAG selezionata ({lag}) appartiene a {device}, che non fa " "parte dello chassis virtuale {virtual_chassis}." -#: netbox/dcim/models/device_components.py:856 +#: netbox/dcim/models/device_components.py:897 msgid "Virtual interfaces cannot have a PoE mode." msgstr "Le interfacce virtuali non possono avere una modalità PoE." -#: netbox/dcim/models/device_components.py:860 +#: netbox/dcim/models/device_components.py:901 msgid "Virtual interfaces cannot have a PoE type." msgstr "Le interfacce virtuali non possono avere un tipo PoE." -#: netbox/dcim/models/device_components.py:866 +#: netbox/dcim/models/device_components.py:907 msgid "Must specify PoE mode when designating a PoE type." msgstr "" "È necessario specificare la modalità PoE quando si designa un tipo PoE." -#: netbox/dcim/models/device_components.py:873 +#: netbox/dcim/models/device_components.py:914 msgid "Wireless role may be set only on wireless interfaces." msgstr "" "Il ruolo wireless può essere impostato solo sulle interfacce wireless." -#: netbox/dcim/models/device_components.py:875 +#: netbox/dcim/models/device_components.py:916 msgid "Channel may be set only on wireless interfaces." msgstr "Il canale può essere impostato solo su interfacce wireless." -#: netbox/dcim/models/device_components.py:881 +#: netbox/dcim/models/device_components.py:922 msgid "Channel frequency may be set only on wireless interfaces." msgstr "" "La frequenza del canale può essere impostata solo sulle interfacce wireless." -#: netbox/dcim/models/device_components.py:885 +#: netbox/dcim/models/device_components.py:926 msgid "Cannot specify custom frequency with channel selected." msgstr "" "Impossibile specificare una frequenza personalizzata con il canale " "selezionato." -#: netbox/dcim/models/device_components.py:891 +#: netbox/dcim/models/device_components.py:932 msgid "Channel width may be set only on wireless interfaces." msgstr "" "La larghezza del canale può essere impostata solo sulle interfacce wireless." -#: netbox/dcim/models/device_components.py:893 +#: netbox/dcim/models/device_components.py:934 msgid "Cannot specify custom width with channel selected." msgstr "" "Impossibile specificare una larghezza personalizzata con il canale " "selezionato." -#: netbox/dcim/models/device_components.py:901 +#: netbox/dcim/models/device_components.py:938 +msgid "Interface mode does not support an untagged vlan." +msgstr "La modalità interfaccia non supporta un vlan senza tag." + +#: netbox/dcim/models/device_components.py:944 #, python-brace-format msgid "" "The untagged VLAN ({untagged_vlan}) must belong to the same site as the " @@ -5802,25 +6329,25 @@ msgstr "" "La VLAN senza tag ({untagged_vlan}) deve appartenere allo stesso sito del " "dispositivo principale dell'interfaccia o deve essere globale." -#: netbox/dcim/models/device_components.py:990 +#: netbox/dcim/models/device_components.py:1041 msgid "Mapped position on corresponding rear port" msgstr "Posizione mappata sulla porta posteriore corrispondente" -#: netbox/dcim/models/device_components.py:1006 +#: netbox/dcim/models/device_components.py:1057 msgid "front port" msgstr "porta anteriore" -#: netbox/dcim/models/device_components.py:1007 +#: netbox/dcim/models/device_components.py:1058 msgid "front ports" msgstr "porte anteriori" -#: netbox/dcim/models/device_components.py:1021 +#: netbox/dcim/models/device_components.py:1069 #, python-brace-format msgid "Rear port ({rear_port}) must belong to the same device" msgstr "" "Porta posteriore ({rear_port}) deve appartenere allo stesso dispositivo" -#: netbox/dcim/models/device_components.py:1029 +#: netbox/dcim/models/device_components.py:1077 #, python-brace-format msgid "" "Invalid rear port position ({rear_port_position}): Rear port {name} has only" @@ -5829,19 +6356,19 @@ msgstr "" "Posizione della porta posteriore non valida ({rear_port_position}): Porta " "posteriore {name} ha solo {positions} posizioni." -#: netbox/dcim/models/device_components.py:1059 +#: netbox/dcim/models/device_components.py:1107 msgid "Number of front ports which may be mapped" msgstr "Numero di porte anteriori che possono essere mappate" -#: netbox/dcim/models/device_components.py:1064 +#: netbox/dcim/models/device_components.py:1112 msgid "rear port" msgstr "porta posteriore" -#: netbox/dcim/models/device_components.py:1065 +#: netbox/dcim/models/device_components.py:1113 msgid "rear ports" msgstr "porte posteriori" -#: netbox/dcim/models/device_components.py:1079 +#: netbox/dcim/models/device_components.py:1124 #, python-brace-format msgid "" "The number of positions cannot be less than the number of mapped front ports" @@ -5850,41 +6377,41 @@ msgstr "" "Il numero di posizioni non può essere inferiore al numero di porte frontali " "mappate ({frontport_count})" -#: netbox/dcim/models/device_components.py:1120 +#: netbox/dcim/models/device_components.py:1165 msgid "module bay" msgstr "alloggiamento per moduli" -#: netbox/dcim/models/device_components.py:1121 +#: netbox/dcim/models/device_components.py:1166 msgid "module bays" msgstr "alloggiamenti per moduli" -#: netbox/dcim/models/device_components.py:1138 -#: netbox/dcim/models/devices.py:1224 +#: netbox/dcim/models/device_components.py:1180 +#: netbox/dcim/models/devices.py:1229 msgid "A module bay cannot belong to a module installed within it." msgstr "" "Un alloggiamento per moduli non può appartenere a un modulo installato al " "suo interno." -#: netbox/dcim/models/device_components.py:1164 +#: netbox/dcim/models/device_components.py:1206 msgid "device bay" msgstr "alloggiamento per dispositivi" -#: netbox/dcim/models/device_components.py:1165 +#: netbox/dcim/models/device_components.py:1207 msgid "device bays" msgstr "alloggiamenti per dispositivi" -#: netbox/dcim/models/device_components.py:1175 +#: netbox/dcim/models/device_components.py:1214 #, python-brace-format msgid "This type of device ({device_type}) does not support device bays." msgstr "" "Questo tipo di dispositivo ({device_type}) non supporta gli alloggiamenti " "per dispositivi." -#: netbox/dcim/models/device_components.py:1181 +#: netbox/dcim/models/device_components.py:1220 msgid "Cannot install a device into itself." msgstr "Impossibile installare un dispositivo su se stesso." -#: netbox/dcim/models/device_components.py:1189 +#: netbox/dcim/models/device_components.py:1228 #, python-brace-format msgid "" "Cannot install the specified device; device is already installed in {bay}." @@ -5892,120 +6419,120 @@ msgstr "" "Impossibile installare il dispositivo specificato; il dispositivo è già " "installato in {bay}." -#: netbox/dcim/models/device_components.py:1210 +#: netbox/dcim/models/device_components.py:1249 msgid "inventory item role" msgstr "ruolo dell'articolo di inventario" -#: netbox/dcim/models/device_components.py:1211 +#: netbox/dcim/models/device_components.py:1250 msgid "inventory item roles" msgstr "ruoli degli articoli di inventario" -#: netbox/dcim/models/device_components.py:1268 -#: netbox/dcim/models/devices.py:607 netbox/dcim/models/devices.py:1181 -#: netbox/dcim/models/racks.py:313 -#: netbox/virtualization/models/virtualmachines.py:131 +#: netbox/dcim/models/device_components.py:1310 +#: netbox/dcim/models/devices.py:598 netbox/dcim/models/devices.py:1189 +#: netbox/dcim/models/racks.py:304 +#: netbox/virtualization/models/virtualmachines.py:126 msgid "serial number" msgstr "numero di serie" -#: netbox/dcim/models/device_components.py:1276 -#: netbox/dcim/models/devices.py:615 netbox/dcim/models/devices.py:1188 -#: netbox/dcim/models/racks.py:320 +#: netbox/dcim/models/device_components.py:1318 +#: netbox/dcim/models/devices.py:606 netbox/dcim/models/devices.py:1196 +#: netbox/dcim/models/racks.py:311 msgid "asset tag" msgstr "etichetta dell'asset" -#: netbox/dcim/models/device_components.py:1277 +#: netbox/dcim/models/device_components.py:1319 msgid "A unique tag used to identify this item" msgstr "Un tag univoco utilizzato per identificare questo articolo" -#: netbox/dcim/models/device_components.py:1280 +#: netbox/dcim/models/device_components.py:1322 msgid "discovered" msgstr "scoperto" -#: netbox/dcim/models/device_components.py:1282 +#: netbox/dcim/models/device_components.py:1324 msgid "This item was automatically discovered" msgstr "Questo articolo è stato scoperto automaticamente" -#: netbox/dcim/models/device_components.py:1300 +#: netbox/dcim/models/device_components.py:1342 msgid "inventory item" msgstr "articolo di inventario" -#: netbox/dcim/models/device_components.py:1301 +#: netbox/dcim/models/device_components.py:1343 msgid "inventory items" msgstr "articoli di inventario" -#: netbox/dcim/models/device_components.py:1312 +#: netbox/dcim/models/device_components.py:1351 msgid "Cannot assign self as parent." msgstr "Non può assegnarsi come genitore." -#: netbox/dcim/models/device_components.py:1320 +#: netbox/dcim/models/device_components.py:1359 msgid "Parent inventory item does not belong to the same device." msgstr "" "L'articolo dell'inventario principale non appartiene allo stesso " "dispositivo." -#: netbox/dcim/models/device_components.py:1326 +#: netbox/dcim/models/device_components.py:1365 msgid "Cannot move an inventory item with dependent children" msgstr "Impossibile spostare un articolo dell'inventario con figli a carico" -#: netbox/dcim/models/device_components.py:1334 +#: netbox/dcim/models/device_components.py:1373 msgid "Cannot assign inventory item to component on another device" msgstr "" "Impossibile assegnare un articolo di inventario a un componente su un altro " "dispositivo" -#: netbox/dcim/models/devices.py:54 +#: netbox/dcim/models/devices.py:59 msgid "manufacturer" msgstr "produttore" -#: netbox/dcim/models/devices.py:55 +#: netbox/dcim/models/devices.py:60 msgid "manufacturers" msgstr "produttori" -#: netbox/dcim/models/devices.py:82 netbox/dcim/models/devices.py:382 +#: netbox/dcim/models/devices.py:84 netbox/dcim/models/devices.py:383 #: netbox/dcim/models/racks.py:133 msgid "model" msgstr "modello" -#: netbox/dcim/models/devices.py:95 +#: netbox/dcim/models/devices.py:97 msgid "default platform" msgstr "piattaforma predefinita" -#: netbox/dcim/models/devices.py:98 netbox/dcim/models/devices.py:386 +#: netbox/dcim/models/devices.py:100 netbox/dcim/models/devices.py:387 msgid "part number" msgstr "numero del pezzo" -#: netbox/dcim/models/devices.py:101 netbox/dcim/models/devices.py:389 +#: netbox/dcim/models/devices.py:103 netbox/dcim/models/devices.py:390 msgid "Discrete part number (optional)" msgstr "Numero di parte discreto (opzionale)" -#: netbox/dcim/models/devices.py:107 netbox/dcim/models/racks.py:54 +#: netbox/dcim/models/devices.py:109 netbox/dcim/models/racks.py:53 msgid "height (U)" msgstr "altezza (U)" -#: netbox/dcim/models/devices.py:111 +#: netbox/dcim/models/devices.py:113 msgid "exclude from utilization" msgstr "escludere dall'utilizzo" -#: netbox/dcim/models/devices.py:112 +#: netbox/dcim/models/devices.py:114 msgid "Devices of this type are excluded when calculating rack utilization." msgstr "" "I dispositivi di questo tipo sono esclusi dal calcolo dell'utilizzo del " "rack." -#: netbox/dcim/models/devices.py:116 +#: netbox/dcim/models/devices.py:118 msgid "is full depth" msgstr "è a piena profondità" -#: netbox/dcim/models/devices.py:117 +#: netbox/dcim/models/devices.py:119 msgid "Device consumes both front and rear rack faces." msgstr "" "Il dispositivo consuma entrambe le facce del rack anteriore e posteriore." -#: netbox/dcim/models/devices.py:123 +#: netbox/dcim/models/devices.py:126 msgid "parent/child status" msgstr "stato genitore/figlio" -#: netbox/dcim/models/devices.py:124 +#: netbox/dcim/models/devices.py:127 msgid "" "Parent devices house child devices in device bays. Leave blank if this " "device type is neither a parent nor a child." @@ -6014,24 +6541,24 @@ msgstr "" "alloggiamenti dei dispositivi. Lascia vuoto se questo tipo di dispositivo " "non è né un genitore né un bambino." -#: netbox/dcim/models/devices.py:128 netbox/dcim/models/devices.py:392 -#: netbox/dcim/models/devices.py:659 netbox/dcim/models/racks.py:324 +#: netbox/dcim/models/devices.py:131 netbox/dcim/models/devices.py:393 +#: netbox/dcim/models/devices.py:651 netbox/dcim/models/racks.py:315 msgid "airflow" msgstr "flusso d'aria" -#: netbox/dcim/models/devices.py:204 +#: netbox/dcim/models/devices.py:208 msgid "device type" msgstr "tipo di dispositivo" -#: netbox/dcim/models/devices.py:205 +#: netbox/dcim/models/devices.py:209 msgid "device types" msgstr "tipi di dispositivi" -#: netbox/dcim/models/devices.py:290 +#: netbox/dcim/models/devices.py:291 msgid "U height must be in increments of 0.5 rack units." msgstr "L'altezza U deve essere espressa in incrementi di 0,5 unità rack." -#: netbox/dcim/models/devices.py:307 +#: netbox/dcim/models/devices.py:308 #, python-brace-format msgid "" "Device {device} in rack {rack} does not have sufficient space to accommodate" @@ -6040,7 +6567,7 @@ msgstr "" "Dispositivo {device} nella cremagliera {rack} non dispone di spazio " "sufficiente per ospitare un'altezza di {height}U" -#: netbox/dcim/models/devices.py:322 +#: netbox/dcim/models/devices.py:323 #, python-brace-format msgid "" "Unable to set 0U height: Found {racked_instance_count} " @@ -6050,7 +6577,7 @@ msgstr "" "href=\"{url}\">{racked_instance_count} casi già montato all'interno di " "rack." -#: netbox/dcim/models/devices.py:331 +#: netbox/dcim/models/devices.py:332 msgid "" "Must delete all device bay templates associated with this device before " "declassifying it as a parent device." @@ -6059,155 +6586,155 @@ msgstr "" "associati a questo dispositivo prima di declassificarlo come dispositivo " "principale." -#: netbox/dcim/models/devices.py:337 +#: netbox/dcim/models/devices.py:338 msgid "Child device types must be 0U." msgstr "I tipi di dispositivi per bambini devono essere 0U." -#: netbox/dcim/models/devices.py:411 +#: netbox/dcim/models/devices.py:413 msgid "module type" msgstr "tipo di modulo" -#: netbox/dcim/models/devices.py:412 +#: netbox/dcim/models/devices.py:414 msgid "module types" msgstr "tipi di moduli" -#: netbox/dcim/models/devices.py:485 +#: netbox/dcim/models/devices.py:484 msgid "Virtual machines may be assigned to this role" msgstr "Le macchine virtuali possono essere assegnate a questo ruolo" -#: netbox/dcim/models/devices.py:497 +#: netbox/dcim/models/devices.py:496 msgid "device role" msgstr "ruolo del dispositivo" -#: netbox/dcim/models/devices.py:498 +#: netbox/dcim/models/devices.py:497 msgid "device roles" msgstr "ruoli dei dispositivi" -#: netbox/dcim/models/devices.py:515 +#: netbox/dcim/models/devices.py:511 msgid "Optionally limit this platform to devices of a certain manufacturer" msgstr "" "Facoltativamente, limita questa piattaforma ai dispositivi di un determinato" " produttore" -#: netbox/dcim/models/devices.py:527 +#: netbox/dcim/models/devices.py:523 msgid "platform" msgstr "piattaforma" -#: netbox/dcim/models/devices.py:528 +#: netbox/dcim/models/devices.py:524 msgid "platforms" msgstr "piattaforme" -#: netbox/dcim/models/devices.py:576 +#: netbox/dcim/models/devices.py:572 msgid "The function this device serves" msgstr "La funzione utilizzata da questo dispositivo" -#: netbox/dcim/models/devices.py:608 +#: netbox/dcim/models/devices.py:599 msgid "Chassis serial number, assigned by the manufacturer" msgstr "Numero di serie del telaio, assegnato dal produttore" -#: netbox/dcim/models/devices.py:616 netbox/dcim/models/devices.py:1189 +#: netbox/dcim/models/devices.py:607 netbox/dcim/models/devices.py:1197 msgid "A unique tag used to identify this device" msgstr "Un tag univoco utilizzato per identificare questo dispositivo" -#: netbox/dcim/models/devices.py:643 +#: netbox/dcim/models/devices.py:634 msgid "position (U)" msgstr "posizione (U)" -#: netbox/dcim/models/devices.py:650 +#: netbox/dcim/models/devices.py:642 msgid "rack face" msgstr "faccia cremagliera" -#: netbox/dcim/models/devices.py:670 netbox/dcim/models/devices.py:1420 -#: netbox/virtualization/models/virtualmachines.py:100 +#: netbox/dcim/models/devices.py:663 netbox/dcim/models/devices.py:1425 +#: netbox/virtualization/models/virtualmachines.py:95 msgid "primary IPv4" msgstr "IPv4 primario" -#: netbox/dcim/models/devices.py:678 netbox/dcim/models/devices.py:1428 -#: netbox/virtualization/models/virtualmachines.py:108 +#: netbox/dcim/models/devices.py:671 netbox/dcim/models/devices.py:1433 +#: netbox/virtualization/models/virtualmachines.py:103 msgid "primary IPv6" msgstr "IPv6 primario" -#: netbox/dcim/models/devices.py:686 +#: netbox/dcim/models/devices.py:679 msgid "out-of-band IP" msgstr "IP fuori banda" -#: netbox/dcim/models/devices.py:703 +#: netbox/dcim/models/devices.py:696 msgid "VC position" msgstr "Posizione VC" -#: netbox/dcim/models/devices.py:706 +#: netbox/dcim/models/devices.py:699 msgid "Virtual chassis position" msgstr "Posizione virtuale dello chassis" -#: netbox/dcim/models/devices.py:709 +#: netbox/dcim/models/devices.py:702 msgid "VC priority" msgstr "Priorità VC" -#: netbox/dcim/models/devices.py:713 +#: netbox/dcim/models/devices.py:706 msgid "Virtual chassis master election priority" msgstr "Priorità di elezione del master dello chassis virtuale" -#: netbox/dcim/models/devices.py:716 netbox/dcim/models/sites.py:207 +#: netbox/dcim/models/devices.py:709 netbox/dcim/models/sites.py:208 msgid "latitude" msgstr "latitudine" -#: netbox/dcim/models/devices.py:721 netbox/dcim/models/devices.py:729 -#: netbox/dcim/models/sites.py:212 netbox/dcim/models/sites.py:220 +#: netbox/dcim/models/devices.py:714 netbox/dcim/models/devices.py:722 +#: netbox/dcim/models/sites.py:213 netbox/dcim/models/sites.py:221 msgid "GPS coordinate in decimal format (xx.yyyyyy)" msgstr "Coordinate GPS in formato decimale (xx.yyyyyy)" -#: netbox/dcim/models/devices.py:724 netbox/dcim/models/sites.py:215 +#: netbox/dcim/models/devices.py:717 netbox/dcim/models/sites.py:216 msgid "longitude" msgstr "longitudine" -#: netbox/dcim/models/devices.py:797 +#: netbox/dcim/models/devices.py:790 msgid "Device name must be unique per site." msgstr "Il nome del dispositivo deve essere univoco per sito." -#: netbox/dcim/models/devices.py:808 netbox/ipam/models/services.py:75 +#: netbox/dcim/models/devices.py:801 netbox/ipam/models/services.py:71 msgid "device" msgstr "dispositivo" -#: netbox/dcim/models/devices.py:809 +#: netbox/dcim/models/devices.py:802 msgid "devices" msgstr "dispositivi" -#: netbox/dcim/models/devices.py:835 +#: netbox/dcim/models/devices.py:821 #, python-brace-format msgid "Rack {rack} does not belong to site {site}." msgstr "cremagliera {rack} non appartiene al sito {site}." -#: netbox/dcim/models/devices.py:840 +#: netbox/dcim/models/devices.py:826 #, python-brace-format msgid "Location {location} does not belong to site {site}." msgstr "Posizione {location} non appartiene al sito {site}." -#: netbox/dcim/models/devices.py:846 +#: netbox/dcim/models/devices.py:832 #, python-brace-format msgid "Rack {rack} does not belong to location {location}." msgstr "cremagliera {rack} non appartiene alla località {location}." -#: netbox/dcim/models/devices.py:853 +#: netbox/dcim/models/devices.py:839 msgid "Cannot select a rack face without assigning a rack." msgstr "" "Non è possibile selezionare una faccia del rack senza assegnare un rack." -#: netbox/dcim/models/devices.py:857 +#: netbox/dcim/models/devices.py:843 msgid "Cannot select a rack position without assigning a rack." msgstr "" "Non è possibile selezionare una posizione del rack senza assegnare un rack." -#: netbox/dcim/models/devices.py:863 +#: netbox/dcim/models/devices.py:849 msgid "Position must be in increments of 0.5 rack units." msgstr "La posizione deve essere in incrementi di 0,5 unità rack." -#: netbox/dcim/models/devices.py:867 +#: netbox/dcim/models/devices.py:853 msgid "Must specify rack face when defining rack position." msgstr "" "È necessario specificare la faccia del rack quando si definisce la posizione" " del rack." -#: netbox/dcim/models/devices.py:875 +#: netbox/dcim/models/devices.py:861 #, python-brace-format msgid "" "A 0U device type ({device_type}) cannot be assigned to a rack position." @@ -6215,7 +6742,7 @@ msgstr "" "Un tipo di dispositivo 0U ({device_type}) non può essere assegnato a una " "posizione nel rack." -#: netbox/dcim/models/devices.py:886 +#: netbox/dcim/models/devices.py:872 msgid "" "Child device types cannot be assigned to a rack face. This is an attribute " "of the parent device." @@ -6223,7 +6750,7 @@ msgstr "" "I tipi di dispositivi per bambini non possono essere assegnati a un rack. " "Questo è un attributo del dispositivo principale." -#: netbox/dcim/models/devices.py:893 +#: netbox/dcim/models/devices.py:879 msgid "" "Child device types cannot be assigned to a rack position. This is an " "attribute of the parent device." @@ -6231,7 +6758,7 @@ msgstr "" "I tipi di dispositivi per bambini non possono essere assegnati a una " "posizione rack. Questo è un attributo del dispositivo principale." -#: netbox/dcim/models/devices.py:907 +#: netbox/dcim/models/devices.py:893 #, python-brace-format msgid "" "U{position} is already occupied or does not have sufficient space to " @@ -6240,23 +6767,23 @@ msgstr "" "U{position} è già occupato o non dispone di spazio sufficiente per ospitare " "questo tipo di dispositivo: {device_type} ({u_height}U)" -#: netbox/dcim/models/devices.py:922 +#: netbox/dcim/models/devices.py:908 #, python-brace-format msgid "{ip} is not an IPv4 address." msgstr "{ip} non è un indirizzo IPv4." -#: netbox/dcim/models/devices.py:931 netbox/dcim/models/devices.py:946 +#: netbox/dcim/models/devices.py:920 netbox/dcim/models/devices.py:938 #, python-brace-format msgid "The specified IP address ({ip}) is not assigned to this device." msgstr "" "L'indirizzo IP specificato ({ip}) non è assegnato a questo dispositivo." -#: netbox/dcim/models/devices.py:937 +#: netbox/dcim/models/devices.py:926 #, python-brace-format msgid "{ip} is not an IPv6 address." msgstr "{ip} non è un indirizzo IPv6." -#: netbox/dcim/models/devices.py:964 +#: netbox/dcim/models/devices.py:956 #, python-brace-format msgid "" "The assigned platform is limited to {platform_manufacturer} device types, " @@ -6266,12 +6793,17 @@ msgstr "" "dispositivo, ma il tipo di questo dispositivo appartiene a " "{devicetype_manufacturer}." -#: netbox/dcim/models/devices.py:975 +#: netbox/dcim/models/devices.py:967 #, python-brace-format msgid "The assigned cluster belongs to a different site ({site})" msgstr "Il cluster assegnato appartiene a un sito diverso ({site})" -#: netbox/dcim/models/devices.py:983 +#: netbox/dcim/models/devices.py:974 +#, python-brace-format +msgid "The assigned cluster belongs to a different location ({location})" +msgstr "Il cluster assegnato appartiene a una posizione diversa ({location})" + +#: netbox/dcim/models/devices.py:982 msgid "A device assigned to a virtual chassis must have its position defined." msgstr "" "La posizione di un dispositivo assegnato a uno chassis virtuale deve essere " @@ -6286,15 +6818,15 @@ msgstr "" "Il dispositivo non può essere rimosso dallo chassis virtuale " "{virtual_chassis} perché attualmente è designato come suo padrone." -#: netbox/dcim/models/devices.py:1196 +#: netbox/dcim/models/devices.py:1204 msgid "module" msgstr "modulo" -#: netbox/dcim/models/devices.py:1197 +#: netbox/dcim/models/devices.py:1205 msgid "modules" msgstr "moduli" -#: netbox/dcim/models/devices.py:1213 +#: netbox/dcim/models/devices.py:1218 #, python-brace-format msgid "" "Module must be installed within a module bay belonging to the assigned " @@ -6303,22 +6835,22 @@ msgstr "" "Il modulo deve essere installato all'interno di un vano del modulo " "appartenente al dispositivo assegnato ({device})." -#: netbox/dcim/models/devices.py:1339 +#: netbox/dcim/models/devices.py:1346 msgid "domain" msgstr "dominio" -#: netbox/dcim/models/devices.py:1352 netbox/dcim/models/devices.py:1353 +#: netbox/dcim/models/devices.py:1359 netbox/dcim/models/devices.py:1360 msgid "virtual chassis" msgstr "chassis virtuale" -#: netbox/dcim/models/devices.py:1368 +#: netbox/dcim/models/devices.py:1372 #, python-brace-format msgid "" "The selected master ({master}) is not assigned to this virtual chassis." msgstr "" "Il master selezionato ({master}) non è assegnato a questo chassis virtuale." -#: netbox/dcim/models/devices.py:1384 +#: netbox/dcim/models/devices.py:1388 #, python-brace-format msgid "" "Unable to delete virtual chassis {self}. There are member interfaces which " @@ -6327,52 +6859,63 @@ msgstr "" "Impossibile eliminare lo chassis virtuale {self}. Esistono interfacce tra i " "membri che formano interfacce GAL trasversali." -#: netbox/dcim/models/devices.py:1409 netbox/vpn/models/l2vpn.py:37 +#: netbox/dcim/models/devices.py:1414 netbox/vpn/models/l2vpn.py:37 msgid "identifier" msgstr "identificatore" -#: netbox/dcim/models/devices.py:1410 +#: netbox/dcim/models/devices.py:1415 msgid "Numeric identifier unique to the parent device" msgstr "Identificatore numerico univoco per il dispositivo principale" -#: netbox/dcim/models/devices.py:1438 netbox/extras/models/customfields.py:225 +#: netbox/dcim/models/devices.py:1443 netbox/extras/models/customfields.py:225 #: netbox/extras/models/models.py:107 netbox/extras/models/models.py:694 -#: netbox/netbox/models/__init__.py:115 +#: netbox/netbox/models/__init__.py:120 msgid "comments" msgstr "commenti" -#: netbox/dcim/models/devices.py:1454 +#: netbox/dcim/models/devices.py:1459 msgid "virtual device context" msgstr "contesto del dispositivo virtuale" -#: netbox/dcim/models/devices.py:1455 +#: netbox/dcim/models/devices.py:1460 msgid "virtual device contexts" msgstr "contesti dei dispositivi virtuali" -#: netbox/dcim/models/devices.py:1487 +#: netbox/dcim/models/devices.py:1489 #, python-brace-format msgid "{ip} is not an IPv{family} address." msgstr "{ip} non è un IPv{family} indirizzo." -#: netbox/dcim/models/devices.py:1493 +#: netbox/dcim/models/devices.py:1495 msgid "Primary IP address must belong to an interface on the assigned device." msgstr "" "L'indirizzo IP primario deve appartenere a un'interfaccia sul dispositivo " "assegnato." -#: netbox/dcim/models/mixins.py:15 netbox/extras/models/configs.py:41 -#: netbox/extras/models/models.py:313 netbox/extras/models/models.py:522 -#: netbox/extras/models/search.py:48 netbox/ipam/models/ip.py:194 -msgid "weight" -msgstr "peso" +#: netbox/dcim/models/devices.py:1527 +msgid "MAC addresses" +msgstr "Indirizzi MAC" -#: netbox/dcim/models/mixins.py:22 -msgid "weight unit" -msgstr "unità di peso" +#: netbox/dcim/models/devices.py:1559 +msgid "" +"Cannot unassign MAC Address while it is designated as the primary MAC for an" +" object" +msgstr "" +"Impossibile annullare l'assegnazione dell'indirizzo MAC mentre è designato " +"come MAC primario per un oggetto" -#: netbox/dcim/models/mixins.py:51 -msgid "Must specify a unit when setting a weight" -msgstr "È necessario specificare un'unità quando si imposta un peso" +#: netbox/dcim/models/devices.py:1563 +msgid "" +"Cannot reassign MAC Address while it is designated as the primary MAC for an" +" object" +msgstr "" +"Impossibile riassegnare l'indirizzo MAC mentre è designato come MAC primario" +" per un oggetto" + +#: netbox/dcim/models/mixins.py:94 +#, python-brace-format +msgid "Please select a {scope_type}." +msgstr "Seleziona un {scope_type}." #: netbox/dcim/models/power.py:55 msgid "power panel" @@ -6382,50 +6925,50 @@ msgstr "pannello di alimentazione" msgid "power panels" msgstr "pannelli di alimentazione" -#: netbox/dcim/models/power.py:70 +#: netbox/dcim/models/power.py:67 #, python-brace-format msgid "" "Location {location} ({location_site}) is in a different site than {site}" msgstr "" "Posizione {location} ({location_site}) si trova in un sito diverso da {site}" -#: netbox/dcim/models/power.py:108 +#: netbox/dcim/models/power.py:106 msgid "supply" msgstr "approvvigionamento" -#: netbox/dcim/models/power.py:114 +#: netbox/dcim/models/power.py:112 msgid "phase" msgstr "fase" -#: netbox/dcim/models/power.py:120 +#: netbox/dcim/models/power.py:118 msgid "voltage" msgstr "voltaggio" -#: netbox/dcim/models/power.py:125 +#: netbox/dcim/models/power.py:123 msgid "amperage" msgstr "amperaggio" -#: netbox/dcim/models/power.py:130 +#: netbox/dcim/models/power.py:128 msgid "max utilization" msgstr "utilizzo massimo" -#: netbox/dcim/models/power.py:133 +#: netbox/dcim/models/power.py:131 msgid "Maximum permissible draw (percentage)" msgstr "Estrazione massima consentita (percentuale)" -#: netbox/dcim/models/power.py:136 +#: netbox/dcim/models/power.py:134 msgid "available power" msgstr "potenza disponibile" -#: netbox/dcim/models/power.py:164 +#: netbox/dcim/models/power.py:162 msgid "power feed" msgstr "alimentazione" -#: netbox/dcim/models/power.py:165 +#: netbox/dcim/models/power.py:163 msgid "power feeds" msgstr "alimentazioni" -#: netbox/dcim/models/power.py:179 +#: netbox/dcim/models/power.py:174 #, python-brace-format msgid "" "Rack {rack} ({rack_site}) and power panel {powerpanel} ({powerpanel_site}) " @@ -6434,55 +6977,55 @@ msgstr "" "cremagliera {rack} ({rack_site}) e pannello di alimentazione {powerpanel} " "({powerpanel_site}) si trovano in siti diversi." -#: netbox/dcim/models/power.py:190 +#: netbox/dcim/models/power.py:185 msgid "Voltage cannot be negative for AC supply" msgstr "La tensione non può essere negativa per l'alimentazione AC" -#: netbox/dcim/models/racks.py:47 +#: netbox/dcim/models/racks.py:46 msgid "width" msgstr "larghezza" -#: netbox/dcim/models/racks.py:48 +#: netbox/dcim/models/racks.py:47 msgid "Rail-to-rail width" msgstr "Larghezza da rotaia a rotaia" -#: netbox/dcim/models/racks.py:56 +#: netbox/dcim/models/racks.py:55 msgid "Height in rack units" msgstr "Altezza nelle unità rack" -#: netbox/dcim/models/racks.py:60 +#: netbox/dcim/models/racks.py:59 msgid "starting unit" msgstr "unità di partenza" -#: netbox/dcim/models/racks.py:62 +#: netbox/dcim/models/racks.py:61 msgid "Starting unit for rack" msgstr "Unità di partenza per cremagliera" -#: netbox/dcim/models/racks.py:66 +#: netbox/dcim/models/racks.py:65 msgid "descending units" msgstr "unità discendenti" -#: netbox/dcim/models/racks.py:67 +#: netbox/dcim/models/racks.py:66 msgid "Units are numbered top-to-bottom" msgstr "Le unità sono numerate dall'alto verso il basso" -#: netbox/dcim/models/racks.py:72 +#: netbox/dcim/models/racks.py:71 msgid "outer width" msgstr "larghezza esterna" -#: netbox/dcim/models/racks.py:75 +#: netbox/dcim/models/racks.py:74 msgid "Outer dimension of rack (width)" msgstr "Dimensione esterna del rack (larghezza)" -#: netbox/dcim/models/racks.py:78 +#: netbox/dcim/models/racks.py:77 msgid "outer depth" msgstr "profondità esterna" -#: netbox/dcim/models/racks.py:81 +#: netbox/dcim/models/racks.py:80 msgid "Outer dimension of rack (depth)" msgstr "Dimensione esterna del rack (profondità)" -#: netbox/dcim/models/racks.py:84 +#: netbox/dcim/models/racks.py:83 msgid "outer unit" msgstr "unità esterna" @@ -6506,7 +7049,7 @@ msgstr "peso massimo" msgid "Maximum load capacity for the rack" msgstr "Capacità di carico massima per il rack" -#: netbox/dcim/models/racks.py:125 netbox/dcim/models/racks.py:252 +#: netbox/dcim/models/racks.py:125 netbox/dcim/models/racks.py:247 msgid "form factor" msgstr "fattore di forma" @@ -6518,57 +7061,57 @@ msgstr "tipo di rack" msgid "rack types" msgstr "tipi di rack" -#: netbox/dcim/models/racks.py:180 netbox/dcim/models/racks.py:379 +#: netbox/dcim/models/racks.py:177 netbox/dcim/models/racks.py:368 msgid "Must specify a unit when setting an outer width/depth" msgstr "" "È necessario specificare un'unità quando si imposta una larghezza/profondità" " esterna" -#: netbox/dcim/models/racks.py:184 netbox/dcim/models/racks.py:383 +#: netbox/dcim/models/racks.py:181 netbox/dcim/models/racks.py:372 msgid "Must specify a unit when setting a maximum weight" msgstr "È necessario specificare un'unità quando si imposta un peso massimo" -#: netbox/dcim/models/racks.py:230 +#: netbox/dcim/models/racks.py:227 msgid "rack role" msgstr "ruolo rack" -#: netbox/dcim/models/racks.py:231 +#: netbox/dcim/models/racks.py:228 msgid "rack roles" msgstr "ruoli rack" -#: netbox/dcim/models/racks.py:274 +#: netbox/dcim/models/racks.py:265 msgid "facility ID" msgstr "ID struttura" -#: netbox/dcim/models/racks.py:275 +#: netbox/dcim/models/racks.py:266 msgid "Locally-assigned identifier" msgstr "Identificatore assegnato localmente" -#: netbox/dcim/models/racks.py:308 netbox/ipam/forms/bulk_import.py:201 -#: netbox/ipam/forms/bulk_import.py:266 netbox/ipam/forms/bulk_import.py:301 -#: netbox/ipam/forms/bulk_import.py:483 -#: netbox/virtualization/forms/bulk_import.py:112 +#: netbox/dcim/models/racks.py:299 netbox/ipam/forms/bulk_import.py:197 +#: netbox/ipam/forms/bulk_import.py:265 netbox/ipam/forms/bulk_import.py:300 +#: netbox/ipam/forms/bulk_import.py:482 +#: netbox/virtualization/forms/bulk_import.py:118 msgid "Functional role" msgstr "Ruolo funzionale" -#: netbox/dcim/models/racks.py:321 +#: netbox/dcim/models/racks.py:312 msgid "A unique tag used to identify this rack" msgstr "Un tag univoco utilizzato per identificare questo rack" -#: netbox/dcim/models/racks.py:359 +#: netbox/dcim/models/racks.py:351 msgid "rack" msgstr "scaffale" -#: netbox/dcim/models/racks.py:360 +#: netbox/dcim/models/racks.py:352 msgid "racks" msgstr "griglie" -#: netbox/dcim/models/racks.py:375 +#: netbox/dcim/models/racks.py:364 #, python-brace-format msgid "Assigned location must belong to parent site ({site})." msgstr "La posizione assegnata deve appartenere al sito principale ({site})." -#: netbox/dcim/models/racks.py:393 +#: netbox/dcim/models/racks.py:387 #, python-brace-format msgid "" "Rack must be at least {min_height}U tall to house currently installed " @@ -6577,7 +7120,7 @@ msgstr "" "Il rack deve essere almeno {min_height}Parlo per ospitare i dispositivi " "attualmente installati." -#: netbox/dcim/models/racks.py:400 +#: netbox/dcim/models/racks.py:396 #, python-brace-format msgid "" "Rack unit numbering must begin at {position} or less to house currently " @@ -6586,120 +7129,120 @@ msgstr "" "La numerazione delle unità rack deve iniziare da {position} o meno per " "ospitare i dispositivi attualmente installati." -#: netbox/dcim/models/racks.py:408 +#: netbox/dcim/models/racks.py:404 #, python-brace-format msgid "Location must be from the same site, {site}." msgstr "La posizione deve provenire dallo stesso sito, {site}." -#: netbox/dcim/models/racks.py:670 +#: netbox/dcim/models/racks.py:666 msgid "units" msgstr "unità" -#: netbox/dcim/models/racks.py:696 +#: netbox/dcim/models/racks.py:692 msgid "rack reservation" msgstr "prenotazione del rack" -#: netbox/dcim/models/racks.py:697 +#: netbox/dcim/models/racks.py:693 msgid "rack reservations" msgstr "Tieni traccia delle prenotazioni" -#: netbox/dcim/models/racks.py:714 +#: netbox/dcim/models/racks.py:707 #, python-brace-format msgid "Invalid unit(s) for {height}U rack: {unit_list}" msgstr "Unità non valide per {height}Rack U: {unit_list}" -#: netbox/dcim/models/racks.py:727 +#: netbox/dcim/models/racks.py:720 #, python-brace-format msgid "The following units have already been reserved: {unit_list}" msgstr "Le seguenti unità sono già state prenotate: {unit_list}" -#: netbox/dcim/models/sites.py:49 +#: netbox/dcim/models/sites.py:53 msgid "A top-level region with this name already exists." msgstr "Esiste già una regione di primo livello con questo nome." -#: netbox/dcim/models/sites.py:59 +#: netbox/dcim/models/sites.py:63 msgid "A top-level region with this slug already exists." msgstr "Esiste già una regione di primo livello con questo slug." -#: netbox/dcim/models/sites.py:62 +#: netbox/dcim/models/sites.py:66 msgid "region" msgstr "regione" -#: netbox/dcim/models/sites.py:63 +#: netbox/dcim/models/sites.py:67 msgid "regions" msgstr "regioni" -#: netbox/dcim/models/sites.py:102 +#: netbox/dcim/models/sites.py:109 msgid "A top-level site group with this name already exists." msgstr "Esiste già un gruppo del sito principale con questo nome." -#: netbox/dcim/models/sites.py:112 +#: netbox/dcim/models/sites.py:119 msgid "A top-level site group with this slug already exists." msgstr "Esiste già un gruppo del sito di primo livello con questo slug." -#: netbox/dcim/models/sites.py:115 +#: netbox/dcim/models/sites.py:122 msgid "site group" msgstr "gruppo del sito" -#: netbox/dcim/models/sites.py:116 +#: netbox/dcim/models/sites.py:123 msgid "site groups" msgstr "gruppi del sito" -#: netbox/dcim/models/sites.py:141 +#: netbox/dcim/models/sites.py:145 msgid "Full name of the site" msgstr "Nome completo del sito" -#: netbox/dcim/models/sites.py:181 netbox/dcim/models/sites.py:279 +#: netbox/dcim/models/sites.py:181 netbox/dcim/models/sites.py:283 msgid "facility" msgstr "servizio, struttura" -#: netbox/dcim/models/sites.py:184 netbox/dcim/models/sites.py:282 +#: netbox/dcim/models/sites.py:184 netbox/dcim/models/sites.py:286 msgid "Local facility ID or description" msgstr "ID o descrizione della struttura locale" -#: netbox/dcim/models/sites.py:195 +#: netbox/dcim/models/sites.py:196 msgid "physical address" msgstr "indirizzo fisico" -#: netbox/dcim/models/sites.py:198 +#: netbox/dcim/models/sites.py:199 msgid "Physical location of the building" msgstr "Ubicazione fisica dell'edificio" -#: netbox/dcim/models/sites.py:201 +#: netbox/dcim/models/sites.py:202 msgid "shipping address" msgstr "indirizzo di spedizione" -#: netbox/dcim/models/sites.py:204 +#: netbox/dcim/models/sites.py:205 msgid "If different from the physical address" msgstr "Se diverso dall'indirizzo fisico" -#: netbox/dcim/models/sites.py:238 +#: netbox/dcim/models/sites.py:245 msgid "site" msgstr "sito" -#: netbox/dcim/models/sites.py:239 +#: netbox/dcim/models/sites.py:246 msgid "sites" msgstr "siti" -#: netbox/dcim/models/sites.py:309 +#: netbox/dcim/models/sites.py:319 msgid "A location with this name already exists within the specified site." msgstr "" "Una posizione con questo nome esiste già all'interno del sito specificato." -#: netbox/dcim/models/sites.py:319 +#: netbox/dcim/models/sites.py:329 msgid "A location with this slug already exists within the specified site." msgstr "" "Una posizione con questo slug esiste già all'interno del sito specificato." -#: netbox/dcim/models/sites.py:322 +#: netbox/dcim/models/sites.py:332 msgid "location" msgstr "posizione" -#: netbox/dcim/models/sites.py:323 +#: netbox/dcim/models/sites.py:333 msgid "locations" msgstr "posizioni" -#: netbox/dcim/models/sites.py:337 +#: netbox/dcim/models/sites.py:344 #, python-brace-format msgid "Parent location ({parent}) must belong to the same site ({site})." msgstr "" @@ -6713,11 +7256,11 @@ msgstr "Terminazione A" msgid "Termination B" msgstr "Terminazione B" -#: netbox/dcim/tables/cables.py:66 netbox/wireless/tables/wirelesslink.py:23 +#: netbox/dcim/tables/cables.py:66 netbox/wireless/tables/wirelesslink.py:22 msgid "Device A" msgstr "Dispositivo A" -#: netbox/dcim/tables/cables.py:72 netbox/wireless/tables/wirelesslink.py:32 +#: netbox/dcim/tables/cables.py:72 netbox/wireless/tables/wirelesslink.py:31 msgid "Device B" msgstr "Dispositivo B" @@ -6751,97 +7294,91 @@ msgstr "Sito B" msgid "Reachable" msgstr "Raggiungibile" -#: netbox/dcim/tables/devices.py:58 netbox/dcim/tables/devices.py:106 -#: netbox/dcim/tables/racks.py:150 netbox/dcim/tables/sites.py:105 -#: netbox/dcim/tables/sites.py:148 netbox/extras/tables/tables.py:545 +#: netbox/dcim/tables/devices.py:69 netbox/dcim/tables/devices.py:117 +#: netbox/dcim/tables/racks.py:149 netbox/dcim/tables/sites.py:104 +#: netbox/dcim/tables/sites.py:147 netbox/extras/tables/tables.py:545 #: netbox/netbox/navigation/menu.py:69 netbox/netbox/navigation/menu.py:73 #: netbox/netbox/navigation/menu.py:75 #: netbox/virtualization/forms/model_forms.py:122 -#: netbox/virtualization/tables/clusters.py:83 -#: netbox/virtualization/views.py:204 +#: netbox/virtualization/tables/clusters.py:87 +#: netbox/virtualization/views.py:216 msgid "Devices" msgstr "Dispositivi" -#: netbox/dcim/tables/devices.py:63 netbox/dcim/tables/devices.py:111 -#: netbox/virtualization/tables/clusters.py:88 +#: netbox/dcim/tables/devices.py:74 netbox/dcim/tables/devices.py:122 +#: netbox/virtualization/tables/clusters.py:92 msgid "VMs" msgstr "VM" -#: netbox/dcim/tables/devices.py:100 netbox/dcim/tables/devices.py:216 -#: netbox/extras/forms/model_forms.py:630 +#: netbox/dcim/tables/devices.py:111 netbox/dcim/tables/devices.py:227 +#: netbox/extras/forms/model_forms.py:644 #: netbox/templates/dcim/device.html:112 -#: netbox/templates/dcim/device/render_config.html:11 -#: netbox/templates/dcim/device/render_config.html:14 #: netbox/templates/dcim/devicerole.html:44 #: netbox/templates/dcim/platform.html:41 #: netbox/templates/extras/configtemplate.html:10 +#: netbox/templates/extras/object_render_config.html:12 +#: netbox/templates/extras/object_render_config.html:15 #: netbox/templates/virtualization/virtualmachine.html:48 -#: netbox/templates/virtualization/virtualmachine/render_config.html:11 -#: netbox/templates/virtualization/virtualmachine/render_config.html:14 -#: netbox/virtualization/tables/virtualmachines.py:107 +#: netbox/virtualization/tables/virtualmachines.py:77 msgid "Config Template" msgstr "Modello di configurazione" -#: netbox/dcim/tables/devices.py:150 netbox/templates/dcim/sitegroup.html:26 -msgid "Site Group" -msgstr "Gruppo del sito" - -#: netbox/dcim/tables/devices.py:187 netbox/dcim/tables/devices.py:1068 -#: netbox/ipam/forms/bulk_import.py:527 netbox/ipam/forms/model_forms.py:306 -#: netbox/ipam/forms/model_forms.py:319 netbox/ipam/tables/ip.py:356 -#: netbox/ipam/tables/ip.py:423 netbox/ipam/tables/ip.py:446 +#: netbox/dcim/tables/devices.py:198 netbox/dcim/tables/devices.py:1100 +#: netbox/ipam/forms/bulk_import.py:562 netbox/ipam/forms/model_forms.py:316 +#: netbox/ipam/forms/model_forms.py:329 netbox/ipam/tables/ip.py:308 +#: netbox/ipam/tables/ip.py:375 netbox/ipam/tables/ip.py:398 #: netbox/templates/ipam/ipaddress.html:11 -#: netbox/virtualization/tables/virtualmachines.py:95 +#: netbox/virtualization/tables/virtualmachines.py:65 msgid "IP Address" msgstr "Indirizzo IP" -#: netbox/dcim/tables/devices.py:191 netbox/dcim/tables/devices.py:1072 -#: netbox/virtualization/tables/virtualmachines.py:86 +#: netbox/dcim/tables/devices.py:202 netbox/dcim/tables/devices.py:1104 +#: netbox/virtualization/tables/virtualmachines.py:56 msgid "IPv4 Address" msgstr "Indirizzo IPv4" -#: netbox/dcim/tables/devices.py:195 netbox/dcim/tables/devices.py:1076 -#: netbox/virtualization/tables/virtualmachines.py:90 +#: netbox/dcim/tables/devices.py:206 netbox/dcim/tables/devices.py:1108 +#: netbox/virtualization/tables/virtualmachines.py:60 msgid "IPv6 Address" msgstr "Indirizzo IPv6" -#: netbox/dcim/tables/devices.py:210 +#: netbox/dcim/tables/devices.py:221 msgid "VC Position" msgstr "Posizione VC" -#: netbox/dcim/tables/devices.py:213 +#: netbox/dcim/tables/devices.py:224 msgid "VC Priority" msgstr "Priorità VC" -#: netbox/dcim/tables/devices.py:220 netbox/templates/dcim/device_edit.html:38 +#: netbox/dcim/tables/devices.py:231 netbox/templates/dcim/device_edit.html:38 #: netbox/templates/dcim/devicebay_populate.html:16 msgid "Parent Device" msgstr "Dispositivo principale" -#: netbox/dcim/tables/devices.py:225 +#: netbox/dcim/tables/devices.py:236 msgid "Position (Device Bay)" msgstr "Posizione (vano dispositivo)" -#: netbox/dcim/tables/devices.py:234 +#: netbox/dcim/tables/devices.py:245 msgid "Console ports" msgstr "Porte console" -#: netbox/dcim/tables/devices.py:237 +#: netbox/dcim/tables/devices.py:248 msgid "Console server ports" msgstr "Porte console server" -#: netbox/dcim/tables/devices.py:240 +#: netbox/dcim/tables/devices.py:251 msgid "Power ports" msgstr "Porte di alimentazione" -#: netbox/dcim/tables/devices.py:243 +#: netbox/dcim/tables/devices.py:254 msgid "Power outlets" msgstr "Prese di corrente" -#: netbox/dcim/tables/devices.py:246 netbox/dcim/tables/devices.py:1081 -#: netbox/dcim/tables/devicetypes.py:128 netbox/dcim/views.py:1040 -#: netbox/dcim/views.py:1279 netbox/dcim/views.py:1975 -#: netbox/netbox/navigation/menu.py:94 netbox/netbox/navigation/menu.py:250 +#: netbox/dcim/tables/devices.py:257 netbox/dcim/tables/devices.py:1113 +#: netbox/dcim/tables/devicetypes.py:133 netbox/dcim/views.py:1144 +#: netbox/dcim/views.py:1388 netbox/dcim/views.py:2139 +#: netbox/netbox/navigation/menu.py:94 netbox/netbox/navigation/menu.py:258 #: netbox/templates/dcim/device/base.html:37 #: netbox/templates/dcim/device_list.html:43 #: netbox/templates/dcim/devicetype/base.html:34 @@ -6851,35 +7388,35 @@ msgstr "Prese di corrente" #: netbox/templates/dcim/virtualdevicecontext.html:81 #: netbox/templates/virtualization/virtualmachine/base.html:27 #: netbox/templates/virtualization/virtualmachine_list.html:14 -#: netbox/virtualization/tables/virtualmachines.py:101 -#: netbox/virtualization/views.py:364 netbox/wireless/tables/wirelesslan.py:55 +#: netbox/virtualization/tables/virtualmachines.py:71 +#: netbox/virtualization/views.py:381 netbox/wireless/tables/wirelesslan.py:63 msgid "Interfaces" msgstr "Interfacce" -#: netbox/dcim/tables/devices.py:249 +#: netbox/dcim/tables/devices.py:260 msgid "Front ports" msgstr "Porte anteriori" -#: netbox/dcim/tables/devices.py:255 +#: netbox/dcim/tables/devices.py:266 msgid "Device bays" msgstr "Alloggiamenti per dispositivi" -#: netbox/dcim/tables/devices.py:258 +#: netbox/dcim/tables/devices.py:269 msgid "Module bays" msgstr "Alloggiamenti per moduli" -#: netbox/dcim/tables/devices.py:261 +#: netbox/dcim/tables/devices.py:272 msgid "Inventory items" msgstr "Articoli di inventario" -#: netbox/dcim/tables/devices.py:305 netbox/dcim/tables/modules.py:57 +#: netbox/dcim/tables/devices.py:315 netbox/dcim/tables/modules.py:57 #: netbox/templates/dcim/modulebay.html:17 msgid "Module Bay" msgstr "Modulo Bay" -#: netbox/dcim/tables/devices.py:318 netbox/dcim/tables/devicetypes.py:47 -#: netbox/dcim/tables/devicetypes.py:143 netbox/dcim/views.py:1115 -#: netbox/dcim/views.py:2073 netbox/netbox/navigation/menu.py:103 +#: netbox/dcim/tables/devices.py:328 netbox/dcim/tables/devicetypes.py:52 +#: netbox/dcim/tables/devicetypes.py:148 netbox/dcim/views.py:1219 +#: netbox/dcim/views.py:2237 netbox/netbox/navigation/menu.py:103 #: netbox/templates/dcim/device/base.html:52 #: netbox/templates/dcim/device_list.html:71 #: netbox/templates/dcim/devicetype/base.html:49 @@ -6888,124 +7425,133 @@ msgstr "Modulo Bay" msgid "Inventory Items" msgstr "Articoli di inventario" -#: netbox/dcim/tables/devices.py:333 +#: netbox/dcim/tables/devices.py:343 msgid "Cable Color" msgstr "Colore del cavo" -#: netbox/dcim/tables/devices.py:339 +#: netbox/dcim/tables/devices.py:349 msgid "Link Peers" msgstr "Collegamento tra colleghi" -#: netbox/dcim/tables/devices.py:342 +#: netbox/dcim/tables/devices.py:352 msgid "Mark Connected" msgstr "Contrassegna connesso" -#: netbox/dcim/tables/devices.py:461 +#: netbox/dcim/tables/devices.py:471 msgid "Maximum draw (W)" msgstr "Assorbimento massimo (W)" -#: netbox/dcim/tables/devices.py:464 +#: netbox/dcim/tables/devices.py:474 msgid "Allocated draw (W)" msgstr "Pareggio assegnato (W)" -#: netbox/dcim/tables/devices.py:558 netbox/ipam/forms/model_forms.py:734 -#: netbox/ipam/tables/fhrp.py:28 netbox/ipam/views.py:596 -#: netbox/ipam/views.py:696 netbox/netbox/navigation/menu.py:158 -#: netbox/netbox/navigation/menu.py:160 -#: netbox/templates/dcim/interface.html:339 +#: netbox/dcim/tables/devices.py:572 netbox/ipam/forms/model_forms.py:784 +#: netbox/ipam/tables/fhrp.py:28 netbox/ipam/views.py:633 +#: netbox/ipam/views.py:738 netbox/netbox/navigation/menu.py:164 +#: netbox/netbox/navigation/menu.py:166 +#: netbox/templates/dcim/interface.html:396 #: netbox/templates/ipam/ipaddress_bulk_add.html:15 #: netbox/templates/ipam/service.html:40 -#: netbox/templates/virtualization/vminterface.html:85 +#: netbox/templates/virtualization/vminterface.html:101 #: netbox/vpn/tables/tunnels.py:98 msgid "IP Addresses" msgstr "Indirizzi IP" -#: netbox/dcim/tables/devices.py:564 netbox/netbox/navigation/menu.py:202 +#: netbox/dcim/tables/devices.py:578 netbox/netbox/navigation/menu.py:210 #: netbox/templates/ipam/inc/panels/fhrp_groups.html:6 msgid "FHRP Groups" msgstr "Gruppi FHRP" -#: netbox/dcim/tables/devices.py:576 netbox/templates/dcim/interface.html:89 -#: netbox/templates/virtualization/vminterface.html:67 +#: netbox/dcim/tables/devices.py:590 netbox/templates/dcim/interface.html:95 +#: netbox/templates/virtualization/vminterface.html:59 #: netbox/templates/vpn/tunnel.html:18 #: netbox/templates/vpn/tunneltermination.html:13 #: netbox/vpn/forms/bulk_edit.py:76 netbox/vpn/forms/bulk_import.py:76 #: netbox/vpn/forms/filtersets.py:42 netbox/vpn/forms/filtersets.py:82 -#: netbox/vpn/forms/model_forms.py:60 netbox/vpn/forms/model_forms.py:145 +#: netbox/vpn/forms/model_forms.py:61 netbox/vpn/forms/model_forms.py:146 #: netbox/vpn/tables/tunnels.py:78 msgid "Tunnel" msgstr "Tunnel" -#: netbox/dcim/tables/devices.py:604 netbox/dcim/tables/devicetypes.py:227 +#: netbox/dcim/tables/devices.py:626 netbox/dcim/tables/devicetypes.py:234 #: netbox/templates/dcim/interface.html:65 msgid "Management Only" msgstr "Solo gestione" -#: netbox/dcim/tables/devices.py:623 +#: netbox/dcim/tables/devices.py:645 msgid "VDCs" msgstr "VDC" -#: netbox/dcim/tables/devices.py:873 netbox/templates/dcim/modulebay.html:53 +#: netbox/dcim/tables/devices.py:652 netbox/templates/dcim/interface.html:163 +msgid "Virtual Circuit" +msgstr "Circuito virtuale" + +#: netbox/dcim/tables/devices.py:904 netbox/templates/dcim/modulebay.html:53 msgid "Installed Module" msgstr "Modulo installato" -#: netbox/dcim/tables/devices.py:876 +#: netbox/dcim/tables/devices.py:907 msgid "Module Serial" msgstr "Modulo seriale" -#: netbox/dcim/tables/devices.py:880 +#: netbox/dcim/tables/devices.py:911 msgid "Module Asset Tag" msgstr "Tag delle risorse del modulo" -#: netbox/dcim/tables/devices.py:889 +#: netbox/dcim/tables/devices.py:920 msgid "Module Status" msgstr "Stato del modulo" -#: netbox/dcim/tables/devices.py:944 netbox/dcim/tables/devicetypes.py:312 -#: netbox/templates/dcim/inventoryitem.html:40 +#: netbox/dcim/tables/devices.py:974 netbox/dcim/tables/devicetypes.py:319 +#: netbox/templates/dcim/inventoryitem.html:44 msgid "Component" msgstr "Componente" -#: netbox/dcim/tables/devices.py:1000 +#: netbox/dcim/tables/devices.py:1032 msgid "Items" msgstr "Oggetti" -#: netbox/dcim/tables/devicetypes.py:37 netbox/netbox/navigation/menu.py:84 +#: netbox/dcim/tables/devicetypes.py:37 netbox/netbox/navigation/menu.py:60 +#: netbox/netbox/navigation/menu.py:62 +msgid "Rack Types" +msgstr "Tipi di rack" + +#: netbox/dcim/tables/devicetypes.py:42 netbox/netbox/navigation/menu.py:84 #: netbox/netbox/navigation/menu.py:86 msgid "Device Types" msgstr "Tipi di dispositivi" -#: netbox/dcim/tables/devicetypes.py:42 netbox/netbox/navigation/menu.py:87 +#: netbox/dcim/tables/devicetypes.py:47 netbox/netbox/navigation/menu.py:87 msgid "Module Types" msgstr "Tipi di moduli" -#: netbox/dcim/tables/devicetypes.py:52 netbox/extras/forms/filtersets.py:371 -#: netbox/extras/forms/model_forms.py:537 netbox/extras/tables/tables.py:540 +#: netbox/dcim/tables/devicetypes.py:57 netbox/extras/forms/filtersets.py:378 +#: netbox/extras/forms/model_forms.py:551 netbox/extras/tables/tables.py:540 #: netbox/netbox/navigation/menu.py:78 msgid "Platforms" msgstr "piattaforme" -#: netbox/dcim/tables/devicetypes.py:84 +#: netbox/dcim/tables/devicetypes.py:89 #: netbox/templates/dcim/devicetype.html:29 msgid "Default Platform" msgstr "Piattaforma predefinita" -#: netbox/dcim/tables/devicetypes.py:88 +#: netbox/dcim/tables/devicetypes.py:93 #: netbox/templates/dcim/devicetype.html:45 msgid "Full Depth" msgstr "Profondità completa" -#: netbox/dcim/tables/devicetypes.py:98 +#: netbox/dcim/tables/devicetypes.py:103 msgid "U Height" msgstr "Altezza U" -#: netbox/dcim/tables/devicetypes.py:113 netbox/dcim/tables/modules.py:26 +#: netbox/dcim/tables/devicetypes.py:118 netbox/dcim/tables/modules.py:26 #: netbox/dcim/tables/racks.py:89 msgid "Instances" msgstr "Istanze" -#: netbox/dcim/tables/devicetypes.py:116 netbox/dcim/views.py:980 -#: netbox/dcim/views.py:1219 netbox/dcim/views.py:1911 +#: netbox/dcim/tables/devicetypes.py:121 netbox/dcim/views.py:1084 +#: netbox/dcim/views.py:1328 netbox/dcim/views.py:2075 #: netbox/netbox/navigation/menu.py:97 #: netbox/templates/dcim/device/base.html:25 #: netbox/templates/dcim/device_list.html:15 @@ -7015,8 +7561,8 @@ msgstr "Istanze" msgid "Console Ports" msgstr "Porte console" -#: netbox/dcim/tables/devicetypes.py:119 netbox/dcim/views.py:995 -#: netbox/dcim/views.py:1234 netbox/dcim/views.py:1927 +#: netbox/dcim/tables/devicetypes.py:124 netbox/dcim/views.py:1099 +#: netbox/dcim/views.py:1343 netbox/dcim/views.py:2091 #: netbox/netbox/navigation/menu.py:98 #: netbox/templates/dcim/device/base.html:28 #: netbox/templates/dcim/device_list.html:22 @@ -7026,8 +7572,8 @@ msgstr "Porte console" msgid "Console Server Ports" msgstr "Porte Console Server" -#: netbox/dcim/tables/devicetypes.py:122 netbox/dcim/views.py:1010 -#: netbox/dcim/views.py:1249 netbox/dcim/views.py:1943 +#: netbox/dcim/tables/devicetypes.py:127 netbox/dcim/views.py:1114 +#: netbox/dcim/views.py:1358 netbox/dcim/views.py:2107 #: netbox/netbox/navigation/menu.py:99 #: netbox/templates/dcim/device/base.html:31 #: netbox/templates/dcim/device_list.html:29 @@ -7037,8 +7583,8 @@ msgstr "Porte Console Server" msgid "Power Ports" msgstr "Porte di alimentazione" -#: netbox/dcim/tables/devicetypes.py:125 netbox/dcim/views.py:1025 -#: netbox/dcim/views.py:1264 netbox/dcim/views.py:1959 +#: netbox/dcim/tables/devicetypes.py:130 netbox/dcim/views.py:1129 +#: netbox/dcim/views.py:1373 netbox/dcim/views.py:2123 #: netbox/netbox/navigation/menu.py:100 #: netbox/templates/dcim/device/base.html:34 #: netbox/templates/dcim/device_list.html:36 @@ -7048,8 +7594,8 @@ msgstr "Porte di alimentazione" msgid "Power Outlets" msgstr "Prese di corrente" -#: netbox/dcim/tables/devicetypes.py:131 netbox/dcim/views.py:1055 -#: netbox/dcim/views.py:1294 netbox/dcim/views.py:1997 +#: netbox/dcim/tables/devicetypes.py:136 netbox/dcim/views.py:1159 +#: netbox/dcim/views.py:1403 netbox/dcim/views.py:2161 #: netbox/netbox/navigation/menu.py:95 #: netbox/templates/dcim/device/base.html:40 #: netbox/templates/dcim/devicetype/base.html:37 @@ -7058,8 +7604,8 @@ msgstr "Prese di corrente" msgid "Front Ports" msgstr "Porte anteriori" -#: netbox/dcim/tables/devicetypes.py:134 netbox/dcim/views.py:1070 -#: netbox/dcim/views.py:1309 netbox/dcim/views.py:2013 +#: netbox/dcim/tables/devicetypes.py:139 netbox/dcim/views.py:1174 +#: netbox/dcim/views.py:1418 netbox/dcim/views.py:2177 #: netbox/netbox/navigation/menu.py:96 #: netbox/templates/dcim/device/base.html:43 #: netbox/templates/dcim/device_list.html:50 @@ -7069,16 +7615,16 @@ msgstr "Porte anteriori" msgid "Rear Ports" msgstr "Porte posteriori" -#: netbox/dcim/tables/devicetypes.py:137 netbox/dcim/views.py:1100 -#: netbox/dcim/views.py:2053 netbox/netbox/navigation/menu.py:102 +#: netbox/dcim/tables/devicetypes.py:142 netbox/dcim/views.py:1204 +#: netbox/dcim/views.py:2217 netbox/netbox/navigation/menu.py:102 #: netbox/templates/dcim/device/base.html:49 #: netbox/templates/dcim/device_list.html:57 #: netbox/templates/dcim/devicetype/base.html:46 msgid "Device Bays" msgstr "Alloggiamenti per dispositivi" -#: netbox/dcim/tables/devicetypes.py:140 netbox/dcim/views.py:1085 -#: netbox/dcim/views.py:1324 netbox/dcim/views.py:2033 +#: netbox/dcim/tables/devicetypes.py:145 netbox/dcim/views.py:1189 +#: netbox/dcim/views.py:1433 netbox/dcim/views.py:2197 #: netbox/netbox/navigation/menu.py:101 #: netbox/templates/dcim/device/base.html:46 #: netbox/templates/dcim/device_list.html:64 @@ -7088,7 +7634,7 @@ msgstr "Alloggiamenti per dispositivi" msgid "Module Bays" msgstr "Baie per moduli" -#: netbox/dcim/tables/power.py:36 netbox/netbox/navigation/menu.py:297 +#: netbox/dcim/tables/power.py:36 netbox/netbox/navigation/menu.py:318 #: netbox/templates/dcim/powerpanel.html:51 msgid "Power Feeds" msgstr "Alimenti di alimentazione" @@ -7101,110 +7647,105 @@ msgstr "Utilizzo massimo" msgid "Available Power (VA)" msgstr "Potenza disponibile (VA)" -#: netbox/dcim/tables/racks.py:30 netbox/dcim/tables/sites.py:143 +#: netbox/dcim/tables/racks.py:30 netbox/dcim/tables/sites.py:142 #: netbox/netbox/navigation/menu.py:43 netbox/netbox/navigation/menu.py:47 #: netbox/netbox/navigation/menu.py:49 msgid "Racks" msgstr "Scaffali" -#: netbox/dcim/tables/racks.py:63 netbox/dcim/tables/racks.py:142 +#: netbox/dcim/tables/racks.py:63 netbox/dcim/tables/racks.py:141 #: netbox/templates/dcim/device.html:318 #: netbox/templates/dcim/inc/panels/racktype_dimensions.html:14 msgid "Height" msgstr "Altezza" -#: netbox/dcim/tables/racks.py:67 netbox/dcim/tables/racks.py:165 +#: netbox/dcim/tables/racks.py:67 netbox/dcim/tables/racks.py:164 #: netbox/templates/dcim/inc/panels/racktype_dimensions.html:18 msgid "Outer Width" msgstr "Larghezza esterna" -#: netbox/dcim/tables/racks.py:71 netbox/dcim/tables/racks.py:169 +#: netbox/dcim/tables/racks.py:71 netbox/dcim/tables/racks.py:168 #: netbox/templates/dcim/inc/panels/racktype_dimensions.html:28 msgid "Outer Depth" msgstr "Profondità esterna" -#: netbox/dcim/tables/racks.py:79 netbox/dcim/tables/racks.py:177 +#: netbox/dcim/tables/racks.py:79 netbox/dcim/tables/racks.py:176 msgid "Max Weight" msgstr "Peso massimo" -#: netbox/dcim/tables/racks.py:154 +#: netbox/dcim/tables/racks.py:153 msgid "Space" msgstr "Spazio" #: netbox/dcim/tables/sites.py:30 netbox/dcim/tables/sites.py:57 -#: netbox/extras/forms/filtersets.py:351 -#: netbox/extras/forms/model_forms.py:517 netbox/ipam/forms/bulk_edit.py:131 -#: netbox/ipam/forms/model_forms.py:153 netbox/ipam/tables/asn.py:66 +#: netbox/extras/forms/filtersets.py:358 +#: netbox/extras/forms/model_forms.py:531 netbox/ipam/forms/bulk_edit.py:134 +#: netbox/ipam/forms/model_forms.py:159 netbox/ipam/tables/asn.py:66 #: netbox/netbox/navigation/menu.py:15 netbox/netbox/navigation/menu.py:17 msgid "Sites" msgstr "Siti" -#: netbox/dcim/tests/test_api.py:47 +#: netbox/dcim/tests/test_api.py:50 msgid "Test case must set peer_termination_type" msgstr "Il test case deve impostare peer_termination_type" -#: netbox/dcim/views.py:138 +#: netbox/dcim/views.py:137 #, python-brace-format msgid "Disconnected {count} {type}" msgstr "Disconnesso {count} {type}" -#: netbox/dcim/views.py:738 netbox/netbox/navigation/menu.py:51 +#: netbox/dcim/views.py:825 netbox/netbox/navigation/menu.py:51 msgid "Reservations" msgstr "Prenotazioni" -#: netbox/dcim/views.py:757 netbox/templates/dcim/location.html:90 +#: netbox/dcim/views.py:844 netbox/templates/dcim/location.html:90 #: netbox/templates/dcim/site.html:140 msgid "Non-Racked Devices" msgstr "Dispositivi non montati su rack" -#: netbox/dcim/views.py:2086 netbox/extras/forms/model_forms.py:577 +#: netbox/dcim/views.py:2250 netbox/extras/forms/model_forms.py:591 #: netbox/templates/extras/configcontext.html:10 -#: netbox/virtualization/forms/model_forms.py:225 -#: netbox/virtualization/views.py:405 +#: netbox/virtualization/forms/model_forms.py:232 +#: netbox/virtualization/views.py:422 msgid "Config Context" msgstr "Contesto di configurazione" -#: netbox/dcim/views.py:2096 netbox/virtualization/views.py:415 +#: netbox/dcim/views.py:2260 netbox/virtualization/views.py:432 msgid "Render Config" msgstr "Configurazione del rendering" -#: netbox/dcim/views.py:2131 netbox/virtualization/views.py:450 -#, python-brace-format -msgid "An error occurred while rendering the template: {error}" -msgstr "Si è verificato un errore durante il rendering del modello: {error}" - -#: netbox/dcim/views.py:2149 netbox/extras/tables/tables.py:550 -#: netbox/netbox/navigation/menu.py:247 netbox/netbox/navigation/menu.py:249 -#: netbox/virtualization/views.py:178 +#: netbox/dcim/views.py:2273 netbox/extras/tables/tables.py:550 +#: netbox/netbox/navigation/menu.py:255 netbox/netbox/navigation/menu.py:257 +#: netbox/virtualization/views.py:190 msgid "Virtual Machines" msgstr "Macchine virtuali" -#: netbox/dcim/views.py:2907 +#: netbox/dcim/views.py:3106 #, python-brace-format msgid "Installed device {device} in bay {device_bay}." msgstr "Dispositivo installato {device} nella baia {device_bay}." -#: netbox/dcim/views.py:2948 +#: netbox/dcim/views.py:3147 #, python-brace-format msgid "Removed device {device} from bay {device_bay}." msgstr "Dispositivo rimosso {device} dalla baia {device_bay}." -#: netbox/dcim/views.py:3054 netbox/ipam/tables/ip.py:234 +#: netbox/dcim/views.py:3263 netbox/ipam/tables/ip.py:180 msgid "Children" msgstr "Bambini" -#: netbox/dcim/views.py:3520 +#: netbox/dcim/views.py:3730 #, python-brace-format msgid "Added member {device}" msgstr "Membro aggiunto {device}" -#: netbox/dcim/views.py:3567 +#: netbox/dcim/views.py:3779 #, python-brace-format msgid "Unable to remove master device {device} from the virtual chassis." msgstr "" "Impossibile rimuovere il dispositivo master {device} dallo chassis virtuale." -#: netbox/dcim/views.py:3580 +#: netbox/dcim/views.py:3792 #, python-brace-format msgid "Removed {device} from virtual chassis {chassis}" msgstr "Rimosso {device} da chassis virtuale {chassis}" @@ -7303,7 +7844,7 @@ msgstr "No" #: netbox/extras/choices.py:108 netbox/templates/tenancy/contact.html:57 #: netbox/tenancy/forms/bulk_edit.py:118 -#: netbox/wireless/forms/model_forms.py:168 +#: netbox/wireless/forms/model_forms.py:171 msgid "Link" msgstr "Link" @@ -7323,15 +7864,15 @@ msgstr "Alfabetico (A-Z)" msgid "Alphabetical (Z-A)" msgstr "Alfabetico (Z-A)" -#: netbox/extras/choices.py:144 netbox/extras/choices.py:167 +#: netbox/extras/choices.py:144 netbox/extras/choices.py:165 msgid "Info" msgstr "Informazioni" -#: netbox/extras/choices.py:145 netbox/extras/choices.py:168 +#: netbox/extras/choices.py:145 netbox/extras/choices.py:166 msgid "Success" msgstr "Successo" -#: netbox/extras/choices.py:146 netbox/extras/choices.py:169 +#: netbox/extras/choices.py:146 netbox/extras/choices.py:167 msgid "Warning" msgstr "Avvertenza" @@ -7339,52 +7880,29 @@ msgstr "Avvertenza" msgid "Danger" msgstr "Pericolo" -#: netbox/extras/choices.py:165 +#: netbox/extras/choices.py:164 msgid "Debug" msgstr "Eseguire il debug" -#: netbox/extras/choices.py:166 netbox/netbox/choices.py:101 -msgid "Default" -msgstr "Predefinito" - -#: netbox/extras/choices.py:170 +#: netbox/extras/choices.py:168 msgid "Failure" msgstr "Fallimento" -#: netbox/extras/choices.py:186 -msgid "Hourly" -msgstr "Ogni ora" - -#: netbox/extras/choices.py:187 -msgid "12 hours" -msgstr "12 ore" - -#: netbox/extras/choices.py:188 -msgid "Daily" -msgstr "Quotidiano" - -#: netbox/extras/choices.py:189 -msgid "Weekly" -msgstr "Settimanale" - -#: netbox/extras/choices.py:190 -msgid "30 days" -msgstr "30 giorni" - -#: netbox/extras/choices.py:226 +#: netbox/extras/choices.py:213 #: netbox/templates/dcim/virtualchassis_edit.html:107 #: netbox/templates/generic/bulk_add_component.html:68 #: netbox/templates/generic/object_edit.html:47 #: netbox/templates/generic/object_edit.html:80 +#: netbox/templates/htmx/quick_add.html:24 #: netbox/templates/ipam/inc/ipaddress_edit_header.html:7 msgid "Create" msgstr "Crea" -#: netbox/extras/choices.py:227 +#: netbox/extras/choices.py:214 msgid "Update" msgstr "Aggiornamento" -#: netbox/extras/choices.py:228 +#: netbox/extras/choices.py:215 #: netbox/templates/circuits/inc/circuit_termination.html:23 #: netbox/templates/dcim/inc/panels/inventory_items.html:37 #: netbox/templates/dcim/powerpanel.html:66 @@ -7399,82 +7917,82 @@ msgstr "Aggiornamento" msgid "Delete" msgstr "Elimina" -#: netbox/extras/choices.py:252 netbox/netbox/choices.py:57 -#: netbox/netbox/choices.py:102 +#: netbox/extras/choices.py:239 netbox/netbox/choices.py:59 +#: netbox/netbox/choices.py:104 msgid "Blue" msgstr "Blu" -#: netbox/extras/choices.py:253 netbox/netbox/choices.py:56 -#: netbox/netbox/choices.py:103 +#: netbox/extras/choices.py:240 netbox/netbox/choices.py:58 +#: netbox/netbox/choices.py:105 msgid "Indigo" msgstr "Indaco" -#: netbox/extras/choices.py:254 netbox/netbox/choices.py:54 -#: netbox/netbox/choices.py:104 +#: netbox/extras/choices.py:241 netbox/netbox/choices.py:56 +#: netbox/netbox/choices.py:106 msgid "Purple" msgstr "Viola" -#: netbox/extras/choices.py:255 netbox/netbox/choices.py:51 -#: netbox/netbox/choices.py:105 +#: netbox/extras/choices.py:242 netbox/netbox/choices.py:53 +#: netbox/netbox/choices.py:107 msgid "Pink" msgstr "Rosa" -#: netbox/extras/choices.py:256 netbox/netbox/choices.py:50 -#: netbox/netbox/choices.py:106 +#: netbox/extras/choices.py:243 netbox/netbox/choices.py:52 +#: netbox/netbox/choices.py:108 msgid "Red" msgstr "Rosso" -#: netbox/extras/choices.py:257 netbox/netbox/choices.py:68 -#: netbox/netbox/choices.py:107 +#: netbox/extras/choices.py:244 netbox/netbox/choices.py:70 +#: netbox/netbox/choices.py:109 msgid "Orange" msgstr "arancia" -#: netbox/extras/choices.py:258 netbox/netbox/choices.py:66 -#: netbox/netbox/choices.py:108 +#: netbox/extras/choices.py:245 netbox/netbox/choices.py:68 +#: netbox/netbox/choices.py:110 msgid "Yellow" msgstr "Giallo" -#: netbox/extras/choices.py:259 netbox/netbox/choices.py:63 -#: netbox/netbox/choices.py:109 +#: netbox/extras/choices.py:246 netbox/netbox/choices.py:65 +#: netbox/netbox/choices.py:111 msgid "Green" msgstr "Verde" -#: netbox/extras/choices.py:260 netbox/netbox/choices.py:60 -#: netbox/netbox/choices.py:110 +#: netbox/extras/choices.py:247 netbox/netbox/choices.py:62 +#: netbox/netbox/choices.py:112 msgid "Teal" msgstr "color tè blu" -#: netbox/extras/choices.py:261 netbox/netbox/choices.py:59 -#: netbox/netbox/choices.py:111 +#: netbox/extras/choices.py:248 netbox/netbox/choices.py:61 +#: netbox/netbox/choices.py:113 msgid "Cyan" msgstr "Ciano" -#: netbox/extras/choices.py:262 netbox/netbox/choices.py:112 +#: netbox/extras/choices.py:249 netbox/netbox/choices.py:114 msgid "Gray" msgstr "Grigio" -#: netbox/extras/choices.py:263 netbox/netbox/choices.py:74 -#: netbox/netbox/choices.py:113 +#: netbox/extras/choices.py:250 netbox/netbox/choices.py:76 +#: netbox/netbox/choices.py:115 msgid "Black" msgstr "Nero" -#: netbox/extras/choices.py:264 netbox/netbox/choices.py:75 -#: netbox/netbox/choices.py:114 +#: netbox/extras/choices.py:251 netbox/netbox/choices.py:77 +#: netbox/netbox/choices.py:116 msgid "White" msgstr "bianco" -#: netbox/extras/choices.py:279 netbox/extras/forms/model_forms.py:353 -#: netbox/extras/forms/model_forms.py:430 +#: netbox/extras/choices.py:266 netbox/extras/forms/model_forms.py:367 +#: netbox/extras/forms/model_forms.py:444 #: netbox/templates/extras/webhook.html:10 msgid "Webhook" msgstr "Webhook" -#: netbox/extras/choices.py:280 netbox/extras/forms/model_forms.py:418 +#: netbox/extras/choices.py:267 netbox/extras/forms/model_forms.py:432 #: netbox/templates/extras/script/base.html:29 msgid "Script" msgstr "Sceneggiatura" -#: netbox/extras/choices.py:281 +#: netbox/extras/choices.py:268 msgid "Notification" msgstr "Notifica" @@ -7575,32 +8093,36 @@ msgstr "" msgid "RSS Feed" msgstr "Feed RSS" -#: netbox/extras/dashboard/widgets.py:279 +#: netbox/extras/dashboard/widgets.py:280 msgid "Embed an RSS feed from an external website." msgstr "Incorpora un feed RSS da un sito Web esterno." -#: netbox/extras/dashboard/widgets.py:286 +#: netbox/extras/dashboard/widgets.py:287 msgid "Feed URL" msgstr "URL del feed" -#: netbox/extras/dashboard/widgets.py:291 +#: netbox/extras/dashboard/widgets.py:290 +msgid "Requires external connection" +msgstr "Richiede una connessione esterna" + +#: netbox/extras/dashboard/widgets.py:296 msgid "The maximum number of objects to display" msgstr "Il numero massimo di oggetti da visualizzare" -#: netbox/extras/dashboard/widgets.py:296 +#: netbox/extras/dashboard/widgets.py:301 msgid "How long to stored the cached content (in seconds)" msgstr "" "Per quanto tempo conservare il contenuto memorizzato nella cache (in " "secondi)" -#: netbox/extras/dashboard/widgets.py:348 +#: netbox/extras/dashboard/widgets.py:358 #: netbox/templates/account/base.html:10 #: netbox/templates/account/bookmarks.html:7 -#: netbox/templates/inc/user_menu.html:48 +#: netbox/templates/inc/user_menu.html:43 msgid "Bookmarks" msgstr "Segnalibri" -#: netbox/extras/dashboard/widgets.py:352 +#: netbox/extras/dashboard/widgets.py:362 msgid "Show your personal bookmarks" msgstr "Mostra i tuoi segnalibri personali" @@ -7629,17 +8151,17 @@ msgid "Group (name)" msgstr "Gruppo (nome)" #: netbox/extras/filtersets.py:574 -#: netbox/virtualization/forms/filtersets.py:118 +#: netbox/virtualization/forms/filtersets.py:123 msgid "Cluster type" msgstr "Tipo di cluster" -#: netbox/extras/filtersets.py:580 netbox/virtualization/filtersets.py:95 -#: netbox/virtualization/filtersets.py:147 +#: netbox/extras/filtersets.py:580 netbox/virtualization/filtersets.py:61 +#: netbox/virtualization/filtersets.py:113 msgid "Cluster type (slug)" msgstr "Tipo di cluster (slug)" #: netbox/extras/filtersets.py:601 netbox/tenancy/forms/forms.py:16 -#: netbox/tenancy/forms/forms.py:39 +#: netbox/tenancy/forms/forms.py:40 msgid "Tenant group" msgstr "Gruppo di inquilini" @@ -7648,7 +8170,7 @@ msgstr "Gruppo di inquilini" msgid "Tenant group (slug)" msgstr "Gruppo di inquilini (slug)" -#: netbox/extras/filtersets.py:623 netbox/extras/forms/model_forms.py:495 +#: netbox/extras/filtersets.py:623 netbox/extras/forms/model_forms.py:509 #: netbox/templates/extras/tag.html:11 msgid "Tag" msgstr "Etichetta" @@ -7657,60 +8179,60 @@ msgstr "Etichetta" msgid "Tag (slug)" msgstr "Etichetta (lumaca)" -#: netbox/extras/filtersets.py:689 netbox/extras/forms/filtersets.py:429 +#: netbox/extras/filtersets.py:689 netbox/extras/forms/filtersets.py:437 msgid "Has local config context data" msgstr "Dispone di dati di contesto di configurazione locali" -#: netbox/extras/forms/bulk_edit.py:35 netbox/extras/forms/filtersets.py:60 +#: netbox/extras/forms/bulk_edit.py:35 netbox/extras/forms/filtersets.py:61 msgid "Group name" msgstr "Nome del gruppo" -#: netbox/extras/forms/bulk_edit.py:43 netbox/extras/forms/filtersets.py:68 +#: netbox/extras/forms/bulk_edit.py:43 netbox/extras/forms/filtersets.py:69 #: netbox/extras/tables/tables.py:65 #: netbox/templates/extras/customfield.html:38 #: netbox/templates/generic/bulk_import.html:118 msgid "Required" msgstr "Richiesto" -#: netbox/extras/forms/bulk_edit.py:48 netbox/extras/forms/filtersets.py:75 +#: netbox/extras/forms/bulk_edit.py:48 netbox/extras/forms/filtersets.py:76 msgid "Must be unique" msgstr "Deve essere unico" #: netbox/extras/forms/bulk_edit.py:61 netbox/extras/forms/bulk_import.py:60 -#: netbox/extras/forms/filtersets.py:89 +#: netbox/extras/forms/filtersets.py:90 #: netbox/extras/models/customfields.py:209 msgid "UI visible" msgstr "Interfaccia utente visibile" #: netbox/extras/forms/bulk_edit.py:66 netbox/extras/forms/bulk_import.py:66 -#: netbox/extras/forms/filtersets.py:94 +#: netbox/extras/forms/filtersets.py:95 #: netbox/extras/models/customfields.py:216 msgid "UI editable" msgstr "Interfaccia utente modificabile" -#: netbox/extras/forms/bulk_edit.py:71 netbox/extras/forms/filtersets.py:97 +#: netbox/extras/forms/bulk_edit.py:71 netbox/extras/forms/filtersets.py:98 msgid "Is cloneable" msgstr "È clonabile" -#: netbox/extras/forms/bulk_edit.py:76 netbox/extras/forms/filtersets.py:104 +#: netbox/extras/forms/bulk_edit.py:76 netbox/extras/forms/filtersets.py:105 msgid "Minimum value" msgstr "Valore minimo" -#: netbox/extras/forms/bulk_edit.py:80 netbox/extras/forms/filtersets.py:108 +#: netbox/extras/forms/bulk_edit.py:80 netbox/extras/forms/filtersets.py:109 msgid "Maximum value" msgstr "Valore massimo" -#: netbox/extras/forms/bulk_edit.py:84 netbox/extras/forms/filtersets.py:112 +#: netbox/extras/forms/bulk_edit.py:84 netbox/extras/forms/filtersets.py:113 msgid "Validation regex" msgstr "Regex di convalida" -#: netbox/extras/forms/bulk_edit.py:91 netbox/extras/forms/filtersets.py:46 +#: netbox/extras/forms/bulk_edit.py:91 netbox/extras/forms/filtersets.py:47 #: netbox/extras/forms/model_forms.py:76 #: netbox/templates/extras/customfield.html:70 msgid "Behavior" msgstr "Comportamento" -#: netbox/extras/forms/bulk_edit.py:128 netbox/extras/forms/filtersets.py:149 +#: netbox/extras/forms/bulk_edit.py:128 netbox/extras/forms/filtersets.py:152 msgid "New window" msgstr "Nuova finestra" @@ -7718,31 +8240,31 @@ msgstr "Nuova finestra" msgid "Button class" msgstr "Classe Button" -#: netbox/extras/forms/bulk_edit.py:154 netbox/extras/forms/filtersets.py:187 +#: netbox/extras/forms/bulk_edit.py:154 netbox/extras/forms/filtersets.py:191 #: netbox/extras/models/models.py:409 msgid "MIME type" msgstr "Tipo MIME" -#: netbox/extras/forms/bulk_edit.py:159 netbox/extras/forms/filtersets.py:190 +#: netbox/extras/forms/bulk_edit.py:159 netbox/extras/forms/filtersets.py:194 msgid "File extension" msgstr "Estensione del file" -#: netbox/extras/forms/bulk_edit.py:164 netbox/extras/forms/filtersets.py:194 +#: netbox/extras/forms/bulk_edit.py:164 netbox/extras/forms/filtersets.py:198 msgid "As attachment" msgstr "Come allegato" -#: netbox/extras/forms/bulk_edit.py:192 netbox/extras/forms/filtersets.py:236 +#: netbox/extras/forms/bulk_edit.py:192 netbox/extras/forms/filtersets.py:242 #: netbox/extras/tables/tables.py:256 #: netbox/templates/extras/savedfilter.html:29 msgid "Shared" msgstr "Condiviso" -#: netbox/extras/forms/bulk_edit.py:215 netbox/extras/forms/filtersets.py:265 +#: netbox/extras/forms/bulk_edit.py:215 netbox/extras/forms/filtersets.py:271 #: netbox/extras/models/models.py:174 msgid "HTTP method" msgstr "Metodo HTTP" -#: netbox/extras/forms/bulk_edit.py:219 netbox/extras/forms/filtersets.py:259 +#: netbox/extras/forms/bulk_edit.py:219 netbox/extras/forms/filtersets.py:265 #: netbox/templates/extras/webhook.html:30 msgid "Payload URL" msgstr "URL del payload" @@ -7761,7 +8283,7 @@ msgid "CA file path" msgstr "Percorso del file CA" #: netbox/extras/forms/bulk_edit.py:253 netbox/extras/forms/bulk_import.py:192 -#: netbox/extras/forms/model_forms.py:377 +#: netbox/extras/forms/model_forms.py:391 msgid "Event types" msgstr "Tipi di eventi" @@ -7774,13 +8296,13 @@ msgstr "È attivo" #: netbox/extras/forms/bulk_import.py:139 #: netbox/extras/forms/bulk_import.py:162 #: netbox/extras/forms/bulk_import.py:186 -#: netbox/extras/forms/filtersets.py:137 netbox/extras/forms/filtersets.py:224 +#: netbox/extras/forms/filtersets.py:140 netbox/extras/forms/filtersets.py:230 #: netbox/extras/forms/model_forms.py:47 -#: netbox/extras/forms/model_forms.py:205 -#: netbox/extras/forms/model_forms.py:237 -#: netbox/extras/forms/model_forms.py:278 -#: netbox/extras/forms/model_forms.py:372 -#: netbox/extras/forms/model_forms.py:489 +#: netbox/extras/forms/model_forms.py:219 +#: netbox/extras/forms/model_forms.py:251 +#: netbox/extras/forms/model_forms.py:292 +#: netbox/extras/forms/model_forms.py:386 +#: netbox/extras/forms/model_forms.py:503 #: netbox/users/forms/model_forms.py:276 msgid "Object types" msgstr "Tipi di oggetti" @@ -7798,10 +8320,10 @@ msgstr "Uno o più tipi di oggetti assegnati" msgid "Field data type (e.g. text, integer, etc.)" msgstr "Tipo di dati del campo (ad esempio testo, numero intero, ecc.)" -#: netbox/extras/forms/bulk_import.py:47 netbox/extras/forms/filtersets.py:208 -#: netbox/extras/forms/filtersets.py:281 -#: netbox/extras/forms/model_forms.py:304 -#: netbox/extras/forms/model_forms.py:341 +#: netbox/extras/forms/bulk_import.py:47 netbox/extras/forms/filtersets.py:213 +#: netbox/extras/forms/filtersets.py:287 +#: netbox/extras/forms/model_forms.py:318 +#: netbox/extras/forms/model_forms.py:355 #: netbox/tenancy/forms/filtersets.py:92 msgid "Object type" msgstr "Tipo di oggetto" @@ -7810,7 +8332,7 @@ msgstr "Tipo di oggetto" msgid "Object type (for object or multi-object fields)" msgstr "Tipo di oggetto (per campi oggetto o multioggetto)" -#: netbox/extras/forms/bulk_import.py:53 netbox/extras/forms/filtersets.py:84 +#: netbox/extras/forms/bulk_import.py:53 netbox/extras/forms/filtersets.py:85 msgid "Choice set" msgstr "Set a scelta" @@ -7881,7 +8403,7 @@ msgid "The classification of entry" msgstr "La classificazione degli ingressi" #: netbox/extras/forms/bulk_import.py:261 -#: netbox/extras/forms/model_forms.py:320 netbox/netbox/navigation/menu.py:390 +#: netbox/extras/forms/model_forms.py:334 netbox/netbox/navigation/menu.py:411 #: netbox/templates/extras/notificationgroup.html:41 #: netbox/templates/users/group.html:29 netbox/users/forms/model_forms.py:236 #: netbox/users/forms/model_forms.py:248 netbox/users/forms/model_forms.py:300 @@ -7894,7 +8416,8 @@ msgid "User names separated by commas, encased with double quotes" msgstr "Nomi utente separati da virgole, racchiusi tra virgolette" #: netbox/extras/forms/bulk_import.py:268 -#: netbox/extras/forms/model_forms.py:315 netbox/netbox/navigation/menu.py:410 +#: netbox/extras/forms/model_forms.py:329 netbox/netbox/navigation/menu.py:294 +#: netbox/netbox/navigation/menu.py:431 #: netbox/templates/extras/notificationgroup.html:31 #: netbox/users/forms/model_forms.py:181 netbox/users/forms/model_forms.py:193 #: netbox/users/forms/model_forms.py:305 netbox/users/tables.py:35 @@ -7906,104 +8429,104 @@ msgstr "Gruppi" msgid "Group names separated by commas, encased with double quotes" msgstr "Nomi di gruppo separati da virgole, racchiusi tra virgolette doppie" -#: netbox/extras/forms/filtersets.py:52 netbox/extras/forms/model_forms.py:56 +#: netbox/extras/forms/filtersets.py:53 netbox/extras/forms/model_forms.py:56 msgid "Related object type" msgstr "Tipo di oggetto correlato" -#: netbox/extras/forms/filtersets.py:57 +#: netbox/extras/forms/filtersets.py:58 msgid "Field type" msgstr "Tipo di campo" -#: netbox/extras/forms/filtersets.py:120 +#: netbox/extras/forms/filtersets.py:122 #: netbox/extras/forms/model_forms.py:157 netbox/extras/tables/tables.py:91 #: netbox/templates/generic/bulk_import.html:154 msgid "Choices" msgstr "Scelte" -#: netbox/extras/forms/filtersets.py:164 netbox/extras/forms/filtersets.py:319 -#: netbox/extras/forms/filtersets.py:408 -#: netbox/extras/forms/model_forms.py:572 netbox/templates/core/job.html:96 +#: netbox/extras/forms/filtersets.py:168 netbox/extras/forms/filtersets.py:326 +#: netbox/extras/forms/filtersets.py:416 +#: netbox/extras/forms/model_forms.py:586 netbox/templates/core/job.html:96 #: netbox/templates/extras/eventrule.html:84 msgid "Data" msgstr "Dati" -#: netbox/extras/forms/filtersets.py:175 netbox/extras/forms/filtersets.py:333 -#: netbox/extras/forms/filtersets.py:418 netbox/netbox/choices.py:130 +#: netbox/extras/forms/filtersets.py:179 netbox/extras/forms/filtersets.py:340 +#: netbox/extras/forms/filtersets.py:426 netbox/netbox/choices.py:132 #: netbox/utilities/forms/bulk_import.py:26 msgid "Data file" msgstr "File di dati" -#: netbox/extras/forms/filtersets.py:183 +#: netbox/extras/forms/filtersets.py:187 msgid "Content types" msgstr "Tipi di contenuto" -#: netbox/extras/forms/filtersets.py:255 netbox/extras/models/models.py:179 +#: netbox/extras/forms/filtersets.py:261 netbox/extras/models/models.py:179 msgid "HTTP content type" msgstr "Tipo di contenuto HTTP" -#: netbox/extras/forms/filtersets.py:286 +#: netbox/extras/forms/filtersets.py:292 msgid "Event type" msgstr "Tipo di evento" -#: netbox/extras/forms/filtersets.py:291 +#: netbox/extras/forms/filtersets.py:297 msgid "Action type" msgstr "Tipo di azione" -#: netbox/extras/forms/filtersets.py:307 +#: netbox/extras/forms/filtersets.py:313 msgid "Tagged object type" msgstr "Tipo di oggetto con tag" -#: netbox/extras/forms/filtersets.py:312 +#: netbox/extras/forms/filtersets.py:318 msgid "Allowed object type" msgstr "Tipo di oggetto consentito" -#: netbox/extras/forms/filtersets.py:341 -#: netbox/extras/forms/model_forms.py:507 netbox/netbox/navigation/menu.py:18 +#: netbox/extras/forms/filtersets.py:348 +#: netbox/extras/forms/model_forms.py:521 netbox/netbox/navigation/menu.py:18 msgid "Regions" msgstr "Regioni" -#: netbox/extras/forms/filtersets.py:346 -#: netbox/extras/forms/model_forms.py:512 +#: netbox/extras/forms/filtersets.py:353 +#: netbox/extras/forms/model_forms.py:526 msgid "Site groups" msgstr "Gruppi del sito" -#: netbox/extras/forms/filtersets.py:356 -#: netbox/extras/forms/model_forms.py:522 netbox/netbox/navigation/menu.py:20 +#: netbox/extras/forms/filtersets.py:363 +#: netbox/extras/forms/model_forms.py:536 netbox/netbox/navigation/menu.py:20 #: netbox/templates/dcim/site.html:127 msgid "Locations" msgstr "Sedi" -#: netbox/extras/forms/filtersets.py:361 -#: netbox/extras/forms/model_forms.py:527 +#: netbox/extras/forms/filtersets.py:368 +#: netbox/extras/forms/model_forms.py:541 msgid "Device types" msgstr "Tipi di dispositivi" -#: netbox/extras/forms/filtersets.py:366 -#: netbox/extras/forms/model_forms.py:532 +#: netbox/extras/forms/filtersets.py:373 +#: netbox/extras/forms/model_forms.py:546 msgid "Roles" msgstr "Ruoli" -#: netbox/extras/forms/filtersets.py:376 -#: netbox/extras/forms/model_forms.py:542 +#: netbox/extras/forms/filtersets.py:383 +#: netbox/extras/forms/model_forms.py:556 msgid "Cluster types" msgstr "Tipi di cluster" -#: netbox/extras/forms/filtersets.py:381 -#: netbox/extras/forms/model_forms.py:547 +#: netbox/extras/forms/filtersets.py:388 +#: netbox/extras/forms/model_forms.py:561 msgid "Cluster groups" msgstr "Gruppi di cluster" -#: netbox/extras/forms/filtersets.py:386 -#: netbox/extras/forms/model_forms.py:552 netbox/netbox/navigation/menu.py:255 -#: netbox/netbox/navigation/menu.py:257 +#: netbox/extras/forms/filtersets.py:393 +#: netbox/extras/forms/model_forms.py:566 netbox/netbox/navigation/menu.py:263 +#: netbox/netbox/navigation/menu.py:265 #: netbox/templates/virtualization/clustertype.html:30 #: netbox/virtualization/tables/clusters.py:23 #: netbox/virtualization/tables/clusters.py:45 msgid "Clusters" msgstr "Cluster" -#: netbox/extras/forms/filtersets.py:391 -#: netbox/extras/forms/model_forms.py:557 +#: netbox/extras/forms/filtersets.py:398 +#: netbox/extras/forms/model_forms.py:571 msgid "Tenant groups" msgstr "Gruppi di inquilini" @@ -8053,7 +8576,7 @@ msgstr "" msgid "Related Object" msgstr "Oggetto correlato" -#: netbox/extras/forms/model_forms.py:169 +#: netbox/extras/forms/model_forms.py:170 msgid "" "Enter one choice per line. An optional label may be specified for each " "choice by appending it with a colon. Example:" @@ -8061,16 +8584,16 @@ msgstr "" "Inserisci una scelta per riga. È possibile specificare un'etichetta " "opzionale per ciascuna scelta aggiungendola con i due punti. Esempio:" -#: netbox/extras/forms/model_forms.py:212 +#: netbox/extras/forms/model_forms.py:226 #: netbox/templates/extras/customlink.html:10 msgid "Custom Link" msgstr "Link personalizzato" -#: netbox/extras/forms/model_forms.py:214 +#: netbox/extras/forms/model_forms.py:228 msgid "Templates" msgstr "Modelli" -#: netbox/extras/forms/model_forms.py:226 +#: netbox/extras/forms/model_forms.py:240 #, python-brace-format msgid "" "Jinja2 template code for the link text. Reference the object as {example}. " @@ -8080,7 +8603,7 @@ msgstr "" "come {example}. I link che vengono visualizzati come testo vuoto non " "verranno visualizzati." -#: netbox/extras/forms/model_forms.py:230 +#: netbox/extras/forms/model_forms.py:244 #, python-brace-format msgid "" "Jinja2 template code for the link URL. Reference the object as {example}." @@ -8088,61 +8611,61 @@ msgstr "" "Codice modello Jinja2 per l'URL del link. Fai riferimento all'oggetto come " "{example}." -#: netbox/extras/forms/model_forms.py:241 -#: netbox/extras/forms/model_forms.py:624 +#: netbox/extras/forms/model_forms.py:255 +#: netbox/extras/forms/model_forms.py:638 msgid "Template code" msgstr "Codice modello" -#: netbox/extras/forms/model_forms.py:247 +#: netbox/extras/forms/model_forms.py:261 #: netbox/templates/extras/exporttemplate.html:12 msgid "Export Template" msgstr "Modello di esportazione" -#: netbox/extras/forms/model_forms.py:249 +#: netbox/extras/forms/model_forms.py:263 msgid "Rendering" msgstr "Rendering" -#: netbox/extras/forms/model_forms.py:263 -#: netbox/extras/forms/model_forms.py:649 +#: netbox/extras/forms/model_forms.py:277 +#: netbox/extras/forms/model_forms.py:663 msgid "Template content is populated from the remote source selected below." msgstr "" "Il contenuto del modello viene compilato dalla fonte remota selezionata di " "seguito." -#: netbox/extras/forms/model_forms.py:270 -#: netbox/extras/forms/model_forms.py:656 +#: netbox/extras/forms/model_forms.py:284 +#: netbox/extras/forms/model_forms.py:670 msgid "Must specify either local content or a data file" msgstr "È necessario specificare il contenuto locale o un file di dati" -#: netbox/extras/forms/model_forms.py:284 netbox/netbox/forms/mixins.py:70 +#: netbox/extras/forms/model_forms.py:298 netbox/netbox/forms/mixins.py:70 #: netbox/templates/extras/savedfilter.html:10 msgid "Saved Filter" msgstr "Filtro salvato" -#: netbox/extras/forms/model_forms.py:334 +#: netbox/extras/forms/model_forms.py:348 msgid "A notification group specify at least one user or group." msgstr "Un gruppo di notifiche specifica almeno un utente o un gruppo." -#: netbox/extras/forms/model_forms.py:356 +#: netbox/extras/forms/model_forms.py:370 #: netbox/templates/extras/webhook.html:23 msgid "HTTP Request" msgstr "Richiesta HTTP" -#: netbox/extras/forms/model_forms.py:358 +#: netbox/extras/forms/model_forms.py:372 #: netbox/templates/extras/webhook.html:44 msgid "SSL" msgstr "SSL" -#: netbox/extras/forms/model_forms.py:380 +#: netbox/extras/forms/model_forms.py:394 msgid "Action choice" msgstr "Scelta dell'azione" -#: netbox/extras/forms/model_forms.py:385 +#: netbox/extras/forms/model_forms.py:399 msgid "Enter conditions in JSON format." msgstr "" "Inserisci le condizioni in JSON formato." -#: netbox/extras/forms/model_forms.py:389 +#: netbox/extras/forms/model_forms.py:403 msgid "" "Enter parameters to pass to the action in JSON format." @@ -8150,33 +8673,33 @@ msgstr "" "Inserisci i parametri da passare all'azione in JSON formato." -#: netbox/extras/forms/model_forms.py:394 +#: netbox/extras/forms/model_forms.py:408 #: netbox/templates/extras/eventrule.html:10 msgid "Event Rule" msgstr "Regola dell'evento" -#: netbox/extras/forms/model_forms.py:395 +#: netbox/extras/forms/model_forms.py:409 msgid "Triggers" msgstr "Trigger" -#: netbox/extras/forms/model_forms.py:442 +#: netbox/extras/forms/model_forms.py:456 msgid "Notification group" msgstr "Gruppo di notifiche" -#: netbox/extras/forms/model_forms.py:562 netbox/netbox/navigation/menu.py:26 +#: netbox/extras/forms/model_forms.py:576 netbox/netbox/navigation/menu.py:26 #: netbox/tenancy/tables/tenants.py:22 msgid "Tenants" msgstr "Inquilini" -#: netbox/extras/forms/model_forms.py:606 +#: netbox/extras/forms/model_forms.py:620 msgid "Data is populated from the remote source selected below." msgstr "I dati vengono compilati dalla fonte remota selezionata di seguito." -#: netbox/extras/forms/model_forms.py:612 +#: netbox/extras/forms/model_forms.py:626 msgid "Must specify either local data or a data file" msgstr "È necessario specificare dati locali o un file di dati" -#: netbox/extras/forms/model_forms.py:631 +#: netbox/extras/forms/model_forms.py:645 #: netbox/templates/core/datafile.html:55 msgid "Content" msgstr "Contenuto" @@ -8240,10 +8763,16 @@ msgstr "Si è verificata un'eccezione: " msgid "Database changes have been reverted due to error." msgstr "Le modifiche al database sono state annullate a causa di un errore." -#: netbox/extras/management/commands/reindex.py:66 +#: netbox/extras/management/commands/reindex.py:67 msgid "No indexers found!" msgstr "Nessun indicizzatore trovato!" +#: netbox/extras/models/configs.py:41 netbox/extras/models/models.py:313 +#: netbox/extras/models/models.py:522 netbox/extras/models/search.py:48 +#: netbox/ipam/models/ip.py:188 netbox/netbox/models/mixins.py:15 +msgid "weight" +msgstr "peso" + #: netbox/extras/models/configs.py:130 msgid "config context" msgstr "contesto di configurazione" @@ -8613,27 +9142,27 @@ msgstr "È stato trovato un ID oggetto non valido: {id}" msgid "Required field cannot be empty." msgstr "Il campo obbligatorio non può essere vuoto." -#: netbox/extras/models/customfields.py:763 +#: netbox/extras/models/customfields.py:764 msgid "Base set of predefined choices (optional)" msgstr "Set base di scelte predefinite (opzionale)" -#: netbox/extras/models/customfields.py:775 +#: netbox/extras/models/customfields.py:776 msgid "Choices are automatically ordered alphabetically" msgstr "Le scelte vengono ordinate automaticamente alfabeticamente" -#: netbox/extras/models/customfields.py:782 +#: netbox/extras/models/customfields.py:783 msgid "custom field choice set" msgstr "set di scelta dei campi personalizzati" -#: netbox/extras/models/customfields.py:783 +#: netbox/extras/models/customfields.py:784 msgid "custom field choice sets" msgstr "set di scelte di campi personalizzati" -#: netbox/extras/models/customfields.py:825 +#: netbox/extras/models/customfields.py:826 msgid "Must define base or extra choices." msgstr "È necessario definire scelte di base o extra." -#: netbox/extras/models/customfields.py:849 +#: netbox/extras/models/customfields.py:850 #, python-brace-format msgid "" "Cannot remove choice {choice} as there are {model} objects which reference " @@ -8936,20 +9465,20 @@ msgstr "voce nel diario" msgid "journal entries" msgstr "voci di diario" -#: netbox/extras/models/models.py:718 +#: netbox/extras/models/models.py:721 #, python-brace-format msgid "Journaling is not supported for this object type ({type})." msgstr "Il journaling non è supportato per questo tipo di oggetto ({type})." -#: netbox/extras/models/models.py:760 +#: netbox/extras/models/models.py:763 msgid "bookmark" msgstr "segnalibro" -#: netbox/extras/models/models.py:761 +#: netbox/extras/models/models.py:764 msgid "bookmarks" msgstr "segnalibri" -#: netbox/extras/models/models.py:774 +#: netbox/extras/models/models.py:777 #, python-brace-format msgid "Bookmarks cannot be assigned to this object type ({type})." msgstr "" @@ -9042,19 +9571,19 @@ msgstr "valore memorizzato nella cache" msgid "cached values" msgstr "valori memorizzati nella cache" -#: netbox/extras/models/staging.py:44 +#: netbox/extras/models/staging.py:45 msgid "branch" msgstr "filiale" -#: netbox/extras/models/staging.py:45 +#: netbox/extras/models/staging.py:46 msgid "branches" msgstr "rami" -#: netbox/extras/models/staging.py:97 +#: netbox/extras/models/staging.py:105 msgid "staged change" msgstr "cambiamento graduale" -#: netbox/extras/models/staging.py:98 +#: netbox/extras/models/staging.py:106 msgid "staged changes" msgstr "modifiche graduali" @@ -9078,11 +9607,11 @@ msgstr "articolo etichettato" msgid "tagged items" msgstr "articoli etichettati" -#: netbox/extras/scripts.py:429 +#: netbox/extras/scripts.py:432 msgid "Script Data" msgstr "Dati dello script" -#: netbox/extras/scripts.py:433 +#: netbox/extras/scripts.py:436 msgid "Script Execution Parameters" msgstr "Parametri di esecuzione dello script" @@ -9159,12 +9688,11 @@ msgstr "Come allegato" #: netbox/extras/tables/tables.py:195 netbox/extras/tables/tables.py:487 #: netbox/extras/tables/tables.py:522 netbox/templates/core/datafile.html:24 -#: netbox/templates/dcim/device/render_config.html:22 #: netbox/templates/extras/configcontext.html:39 #: netbox/templates/extras/configtemplate.html:31 #: netbox/templates/extras/exporttemplate.html:45 +#: netbox/templates/extras/object_render_config.html:23 #: netbox/templates/generic/bulk_import.html:35 -#: netbox/templates/virtualization/virtualmachine/render_config.html:22 msgid "Data File" msgstr "File di dati" @@ -9256,27 +9784,32 @@ msgstr "Attributo non valido»{name}\"per richiesta" msgid "Invalid attribute \"{name}\" for {model}" msgstr "Attributo non valido»{name}\"per {model}" -#: netbox/extras/views.py:960 +#: netbox/extras/views.py:933 +#, python-brace-format +msgid "An error occurred while rendering the template: {error}" +msgstr "Si è verificato un errore durante il rendering del modello: {error}" + +#: netbox/extras/views.py:1085 msgid "Your dashboard has been reset." msgstr "La tua dashboard è stata reimpostata." -#: netbox/extras/views.py:1006 +#: netbox/extras/views.py:1131 msgid "Added widget: " msgstr "Widget aggiunto: " -#: netbox/extras/views.py:1047 +#: netbox/extras/views.py:1172 msgid "Updated widget: " msgstr "Widget aggiornato: " -#: netbox/extras/views.py:1083 +#: netbox/extras/views.py:1208 msgid "Deleted widget: " msgstr "Widget eliminato: " -#: netbox/extras/views.py:1085 +#: netbox/extras/views.py:1210 msgid "Error deleting widget: " msgstr "Errore durante l'eliminazione del widget: " -#: netbox/extras/views.py:1175 +#: netbox/extras/views.py:1308 msgid "Unable to run script: RQ worker process not running." msgstr "" "Impossibile eseguire lo script: processo di lavoro RQ non in esecuzione." @@ -9301,7 +9834,7 @@ msgstr "" msgid "Invalid IP prefix format: {data}" msgstr "Formato del prefisso IP non valido: {data}" -#: netbox/ipam/api/views.py:358 +#: netbox/ipam/api/views.py:370 msgid "" "Insufficient space is available to accommodate the requested prefix size(s)" msgstr "" @@ -9344,182 +9877,174 @@ msgstr "Cisco" msgid "Plaintext" msgstr "Testo in chiaro" +#: netbox/ipam/choices.py:166 netbox/ipam/forms/model_forms.py:800 +#: netbox/ipam/forms/model_forms.py:828 netbox/templates/ipam/service.html:21 +msgid "Service" +msgstr "Servizio" + +#: netbox/ipam/choices.py:167 +msgid "Customer" +msgstr "Cliente" + #: netbox/ipam/fields.py:36 #, python-brace-format msgid "Invalid IP address format: {address}" msgstr "Formato dell'indirizzo IP non valido: {address}" -#: netbox/ipam/filtersets.py:48 netbox/vpn/filtersets.py:304 +#: netbox/ipam/filtersets.py:51 netbox/vpn/filtersets.py:304 msgid "Import target" msgstr "Obiettivo di importazione" -#: netbox/ipam/filtersets.py:54 netbox/vpn/filtersets.py:310 +#: netbox/ipam/filtersets.py:57 netbox/vpn/filtersets.py:310 msgid "Import target (name)" msgstr "Obiettivo di importazione (nome)" -#: netbox/ipam/filtersets.py:59 netbox/vpn/filtersets.py:315 +#: netbox/ipam/filtersets.py:62 netbox/vpn/filtersets.py:315 msgid "Export target" msgstr "Obiettivo di esportazione" -#: netbox/ipam/filtersets.py:65 netbox/vpn/filtersets.py:321 +#: netbox/ipam/filtersets.py:68 netbox/vpn/filtersets.py:321 msgid "Export target (name)" msgstr "Destinazione di esportazione (nome)" -#: netbox/ipam/filtersets.py:86 +#: netbox/ipam/filtersets.py:89 msgid "Importing VRF" msgstr "Importazione di VRF" -#: netbox/ipam/filtersets.py:92 +#: netbox/ipam/filtersets.py:95 msgid "Import VRF (RD)" msgstr "Importa VRF (RD)" -#: netbox/ipam/filtersets.py:97 +#: netbox/ipam/filtersets.py:100 msgid "Exporting VRF" msgstr "Esportazione di VRF" -#: netbox/ipam/filtersets.py:103 +#: netbox/ipam/filtersets.py:106 msgid "Export VRF (RD)" msgstr "Esporta VRF (RD)" -#: netbox/ipam/filtersets.py:108 +#: netbox/ipam/filtersets.py:111 msgid "Importing L2VPN" msgstr "Importazione di L2VPN" -#: netbox/ipam/filtersets.py:114 +#: netbox/ipam/filtersets.py:117 msgid "Importing L2VPN (identifier)" msgstr "Importazione di L2VPN (identificatore)" -#: netbox/ipam/filtersets.py:119 +#: netbox/ipam/filtersets.py:122 msgid "Exporting L2VPN" msgstr "Esportazione di L2VPN" -#: netbox/ipam/filtersets.py:125 +#: netbox/ipam/filtersets.py:128 msgid "Exporting L2VPN (identifier)" msgstr "Esportazione di L2VPN (identificatore)" -#: netbox/ipam/filtersets.py:155 netbox/ipam/filtersets.py:283 -#: netbox/ipam/forms/model_forms.py:229 netbox/ipam/tables/ip.py:212 +#: netbox/ipam/filtersets.py:158 netbox/ipam/filtersets.py:286 +#: netbox/ipam/forms/model_forms.py:229 netbox/ipam/tables/ip.py:158 #: netbox/templates/ipam/prefix.html:12 msgid "Prefix" msgstr "Prefisso" -#: netbox/ipam/filtersets.py:159 netbox/ipam/filtersets.py:198 -#: netbox/ipam/filtersets.py:223 +#: netbox/ipam/filtersets.py:162 netbox/ipam/filtersets.py:201 +#: netbox/ipam/filtersets.py:226 msgid "RIR (ID)" msgstr "RIR (ID)" -#: netbox/ipam/filtersets.py:165 netbox/ipam/filtersets.py:204 -#: netbox/ipam/filtersets.py:229 +#: netbox/ipam/filtersets.py:168 netbox/ipam/filtersets.py:207 +#: netbox/ipam/filtersets.py:232 msgid "RIR (slug)" msgstr "RIR (lumaca)" -#: netbox/ipam/filtersets.py:287 +#: netbox/ipam/filtersets.py:290 msgid "Within prefix" msgstr "All'interno del prefisso" -#: netbox/ipam/filtersets.py:291 +#: netbox/ipam/filtersets.py:294 msgid "Within and including prefix" msgstr "All'interno e incluso il prefisso" -#: netbox/ipam/filtersets.py:295 +#: netbox/ipam/filtersets.py:298 msgid "Prefixes which contain this prefix or IP" msgstr "Prefissi che contengono questo prefisso o IP" -#: netbox/ipam/filtersets.py:306 netbox/ipam/filtersets.py:574 -#: netbox/ipam/forms/bulk_edit.py:343 netbox/ipam/forms/filtersets.py:196 -#: netbox/ipam/forms/filtersets.py:331 +#: netbox/ipam/filtersets.py:309 netbox/ipam/filtersets.py:541 +#: netbox/ipam/forms/bulk_edit.py:327 netbox/ipam/forms/filtersets.py:198 +#: netbox/ipam/forms/filtersets.py:334 msgid "Mask length" msgstr "Lunghezza della maschera" -#: netbox/ipam/filtersets.py:375 netbox/vpn/filtersets.py:427 +#: netbox/ipam/filtersets.py:342 netbox/vpn/filtersets.py:427 msgid "VLAN (ID)" msgstr "VLAN (ID)" -#: netbox/ipam/filtersets.py:379 netbox/vpn/filtersets.py:422 +#: netbox/ipam/filtersets.py:346 netbox/vpn/filtersets.py:422 msgid "VLAN number (1-4094)" msgstr "Numero VLAN (1-4094)" -#: netbox/ipam/filtersets.py:473 netbox/ipam/filtersets.py:477 -#: netbox/ipam/filtersets.py:569 netbox/ipam/forms/model_forms.py:496 +#: netbox/ipam/filtersets.py:440 netbox/ipam/filtersets.py:444 +#: netbox/ipam/filtersets.py:536 netbox/ipam/forms/model_forms.py:506 #: netbox/templates/tenancy/contact.html:53 #: netbox/tenancy/forms/bulk_edit.py:113 msgid "Address" msgstr "Indirizzo" -#: netbox/ipam/filtersets.py:481 +#: netbox/ipam/filtersets.py:448 msgid "Ranges which contain this prefix or IP" msgstr "Intervalli che contengono questo prefisso o IP" -#: netbox/ipam/filtersets.py:509 netbox/ipam/filtersets.py:565 +#: netbox/ipam/filtersets.py:476 netbox/ipam/filtersets.py:532 msgid "Parent prefix" msgstr "Prefisso principale" -#: netbox/ipam/filtersets.py:618 netbox/ipam/filtersets.py:858 -#: netbox/ipam/filtersets.py:1133 netbox/vpn/filtersets.py:385 -msgid "Virtual machine (name)" -msgstr "Macchina virtuale (nome)" - -#: netbox/ipam/filtersets.py:623 netbox/ipam/filtersets.py:863 -#: netbox/ipam/filtersets.py:1127 netbox/virtualization/filtersets.py:282 -#: netbox/virtualization/filtersets.py:321 netbox/vpn/filtersets.py:390 -msgid "Virtual machine (ID)" -msgstr "Macchina virtuale (ID)" - -#: netbox/ipam/filtersets.py:629 netbox/vpn/filtersets.py:97 -#: netbox/vpn/filtersets.py:396 -msgid "Interface (name)" -msgstr "Interfaccia (nome)" - -#: netbox/ipam/filtersets.py:640 netbox/vpn/filtersets.py:108 -#: netbox/vpn/filtersets.py:407 -msgid "VM interface (name)" -msgstr "Interfaccia VM (nome)" - -#: netbox/ipam/filtersets.py:645 netbox/vpn/filtersets.py:113 -msgid "VM interface (ID)" -msgstr "Interfaccia VM (ID)" - -#: netbox/ipam/filtersets.py:650 +#: netbox/ipam/filtersets.py:617 msgid "FHRP group (ID)" msgstr "Gruppo FHRP (ID)" -#: netbox/ipam/filtersets.py:654 +#: netbox/ipam/filtersets.py:621 msgid "Is assigned to an interface" msgstr "È assegnato a un'interfaccia" -#: netbox/ipam/filtersets.py:658 +#: netbox/ipam/filtersets.py:625 msgid "Is assigned" msgstr "È assegnato" -#: netbox/ipam/filtersets.py:670 +#: netbox/ipam/filtersets.py:637 msgid "Service (ID)" msgstr "Servizio (ID)" -#: netbox/ipam/filtersets.py:675 +#: netbox/ipam/filtersets.py:642 msgid "NAT inside IP address (ID)" msgstr "Indirizzo IP interno (ID) NAT" -#: netbox/ipam/filtersets.py:1043 netbox/ipam/forms/bulk_import.py:322 -msgid "Assigned interface" -msgstr "Interfaccia assegnata" +#: netbox/ipam/filtersets.py:1001 +msgid "Q-in-Q SVLAN (ID)" +msgstr "SVLAN Q-in-Q (ID)" -#: netbox/ipam/filtersets.py:1048 +#: netbox/ipam/filtersets.py:1005 +msgid "Q-in-Q SVLAN number (1-4094)" +msgstr "Numero SVLAN Q-in-Q (1-4094)" + +#: netbox/ipam/filtersets.py:1026 msgid "Assigned VM interface" msgstr "Interfaccia VM assegnata" -#: netbox/ipam/filtersets.py:1138 +#: netbox/ipam/filtersets.py:1097 +msgid "VLAN Translation Policy (name)" +msgstr "Politica di traduzione VLAN (nome)" + +#: netbox/ipam/filtersets.py:1163 msgid "IP address (ID)" msgstr "Indirizzo IP (ID)" -#: netbox/ipam/filtersets.py:1144 netbox/ipam/models/ip.py:788 +#: netbox/ipam/filtersets.py:1169 netbox/ipam/models/ip.py:788 msgid "IP address" msgstr "indirizzo IP" -#: netbox/ipam/filtersets.py:1169 +#: netbox/ipam/filtersets.py:1194 msgid "Primary IPv4 (ID)" msgstr "IPv4 (ID) primario" -#: netbox/ipam/filtersets.py:1174 +#: netbox/ipam/filtersets.py:1199 msgid "Primary IPv6 (ID)" msgstr "IPv6 primario (ID)" @@ -9552,435 +10077,408 @@ msgstr "È richiesta la mascherina CIDR (ad es. /24)." msgid "Address pattern" msgstr "Schema di indirizzo" -#: netbox/ipam/forms/bulk_edit.py:50 +#: netbox/ipam/forms/bulk_edit.py:53 msgid "Enforce unique space" msgstr "Applica uno spazio unico" -#: netbox/ipam/forms/bulk_edit.py:88 +#: netbox/ipam/forms/bulk_edit.py:91 msgid "Is private" msgstr "È privato" -#: netbox/ipam/forms/bulk_edit.py:109 netbox/ipam/forms/bulk_edit.py:138 -#: netbox/ipam/forms/bulk_edit.py:163 netbox/ipam/forms/bulk_import.py:89 -#: netbox/ipam/forms/bulk_import.py:109 netbox/ipam/forms/bulk_import.py:129 -#: netbox/ipam/forms/filtersets.py:110 netbox/ipam/forms/filtersets.py:125 -#: netbox/ipam/forms/filtersets.py:148 netbox/ipam/forms/model_forms.py:96 -#: netbox/ipam/forms/model_forms.py:109 netbox/ipam/forms/model_forms.py:131 -#: netbox/ipam/forms/model_forms.py:149 netbox/ipam/models/asns.py:31 -#: netbox/ipam/models/asns.py:103 netbox/ipam/models/ip.py:71 -#: netbox/ipam/models/ip.py:90 netbox/ipam/tables/asn.py:20 +#: netbox/ipam/forms/bulk_edit.py:112 netbox/ipam/forms/bulk_edit.py:141 +#: netbox/ipam/forms/bulk_edit.py:166 netbox/ipam/forms/bulk_import.py:92 +#: netbox/ipam/forms/bulk_import.py:112 netbox/ipam/forms/bulk_import.py:132 +#: netbox/ipam/forms/filtersets.py:112 netbox/ipam/forms/filtersets.py:127 +#: netbox/ipam/forms/filtersets.py:150 netbox/ipam/forms/model_forms.py:99 +#: netbox/ipam/forms/model_forms.py:112 netbox/ipam/forms/model_forms.py:135 +#: netbox/ipam/forms/model_forms.py:154 netbox/ipam/models/asns.py:31 +#: netbox/ipam/models/asns.py:100 netbox/ipam/models/ip.py:71 +#: netbox/ipam/models/ip.py:87 netbox/ipam/tables/asn.py:20 #: netbox/ipam/tables/asn.py:45 netbox/templates/ipam/aggregate.html:18 #: netbox/templates/ipam/asn.html:27 netbox/templates/ipam/asnrange.html:19 #: netbox/templates/ipam/rir.html:19 msgid "RIR" msgstr "RIR" -#: netbox/ipam/forms/bulk_edit.py:171 +#: netbox/ipam/forms/bulk_edit.py:174 msgid "Date added" msgstr "Data aggiunta" -#: netbox/ipam/forms/bulk_edit.py:229 netbox/ipam/forms/model_forms.py:619 -#: netbox/ipam/forms/model_forms.py:666 netbox/ipam/tables/ip.py:251 -#: netbox/templates/ipam/vlan_edit.html:37 +#: netbox/ipam/forms/bulk_edit.py:213 netbox/ipam/forms/model_forms.py:629 +#: netbox/ipam/forms/model_forms.py:676 netbox/ipam/tables/ip.py:201 +#: netbox/templates/ipam/vlan_edit.html:45 #: netbox/templates/ipam/vlangroup.html:27 msgid "VLAN Group" msgstr "Gruppo VLAN" -#: netbox/ipam/forms/bulk_edit.py:234 netbox/ipam/forms/bulk_import.py:185 -#: netbox/ipam/forms/filtersets.py:256 netbox/ipam/forms/model_forms.py:218 -#: netbox/ipam/models/vlans.py:250 netbox/ipam/tables/ip.py:255 -#: netbox/templates/ipam/prefix.html:60 netbox/templates/ipam/vlan.html:12 +#: netbox/ipam/forms/bulk_edit.py:218 netbox/ipam/forms/bulk_import.py:181 +#: netbox/ipam/forms/filtersets.py:259 netbox/ipam/forms/model_forms.py:217 +#: netbox/ipam/models/vlans.py:272 netbox/ipam/tables/ip.py:206 +#: netbox/templates/ipam/prefix.html:56 netbox/templates/ipam/vlan.html:12 #: netbox/templates/ipam/vlan/base.html:6 #: netbox/templates/ipam/vlan_edit.html:10 -#: netbox/templates/wireless/wirelesslan.html:30 +#: netbox/templates/wireless/wirelesslan.html:38 #: netbox/vpn/forms/bulk_import.py:304 netbox/vpn/forms/filtersets.py:284 -#: netbox/vpn/forms/model_forms.py:433 netbox/vpn/forms/model_forms.py:452 -#: netbox/wireless/forms/bulk_edit.py:55 -#: netbox/wireless/forms/bulk_import.py:48 -#: netbox/wireless/forms/model_forms.py:48 netbox/wireless/models.py:102 +#: netbox/vpn/forms/model_forms.py:436 netbox/vpn/forms/model_forms.py:455 +#: netbox/wireless/forms/bulk_edit.py:57 +#: netbox/wireless/forms/bulk_import.py:50 +#: netbox/wireless/forms/model_forms.py:50 netbox/wireless/models.py:102 msgid "VLAN" msgstr "VLAN" -#: netbox/ipam/forms/bulk_edit.py:245 +#: netbox/ipam/forms/bulk_edit.py:229 msgid "Prefix length" msgstr "Lunghezza del prefisso" -#: netbox/ipam/forms/bulk_edit.py:268 netbox/ipam/forms/filtersets.py:241 -#: netbox/templates/ipam/prefix.html:85 +#: netbox/ipam/forms/bulk_edit.py:252 netbox/ipam/forms/filtersets.py:244 +#: netbox/templates/ipam/prefix.html:81 msgid "Is a pool" msgstr "È una piscina" -#: netbox/ipam/forms/bulk_edit.py:273 netbox/ipam/forms/bulk_edit.py:318 -#: netbox/ipam/forms/filtersets.py:248 netbox/ipam/forms/filtersets.py:293 -#: netbox/ipam/models/ip.py:272 netbox/ipam/models/ip.py:539 +#: netbox/ipam/forms/bulk_edit.py:257 netbox/ipam/forms/bulk_edit.py:302 +#: netbox/ipam/forms/filtersets.py:251 netbox/ipam/forms/filtersets.py:296 +#: netbox/ipam/models/ip.py:256 netbox/ipam/models/ip.py:525 msgid "Treat as fully utilized" msgstr "Trattare come completamente utilizzato" -#: netbox/ipam/forms/bulk_edit.py:287 netbox/ipam/forms/filtersets.py:171 +#: netbox/ipam/forms/bulk_edit.py:271 netbox/ipam/forms/filtersets.py:173 +#: netbox/ipam/forms/model_forms.py:232 msgid "VLAN Assignment" msgstr "Assegnazione VLAN" -#: netbox/ipam/forms/bulk_edit.py:366 netbox/ipam/models/ip.py:772 +#: netbox/ipam/forms/bulk_edit.py:350 netbox/ipam/models/ip.py:772 msgid "DNS name" msgstr "Nome DNS" -#: netbox/ipam/forms/bulk_edit.py:387 netbox/ipam/forms/bulk_edit.py:534 -#: netbox/ipam/forms/bulk_import.py:418 netbox/ipam/forms/bulk_import.py:493 -#: netbox/ipam/forms/bulk_import.py:519 netbox/ipam/forms/filtersets.py:390 -#: netbox/ipam/forms/filtersets.py:530 netbox/templates/ipam/fhrpgroup.html:22 +#: netbox/ipam/forms/bulk_edit.py:371 netbox/ipam/forms/bulk_edit.py:562 +#: netbox/ipam/forms/bulk_import.py:417 netbox/ipam/forms/bulk_import.py:528 +#: netbox/ipam/forms/bulk_import.py:554 netbox/ipam/forms/filtersets.py:393 +#: netbox/ipam/forms/filtersets.py:582 netbox/templates/ipam/fhrpgroup.html:22 #: netbox/templates/ipam/inc/panels/fhrp_groups.html:24 #: netbox/templates/ipam/service.html:32 #: netbox/templates/ipam/servicetemplate.html:19 msgid "Protocol" msgstr "Protocollo" -#: netbox/ipam/forms/bulk_edit.py:394 netbox/ipam/forms/filtersets.py:397 +#: netbox/ipam/forms/bulk_edit.py:378 netbox/ipam/forms/filtersets.py:400 #: netbox/ipam/tables/fhrp.py:22 netbox/templates/ipam/fhrpgroup.html:26 msgid "Group ID" msgstr "ID gruppo" -#: netbox/ipam/forms/bulk_edit.py:399 netbox/ipam/forms/filtersets.py:402 -#: netbox/wireless/forms/bulk_edit.py:68 -#: netbox/wireless/forms/bulk_edit.py:115 -#: netbox/wireless/forms/bulk_import.py:62 -#: netbox/wireless/forms/bulk_import.py:65 -#: netbox/wireless/forms/bulk_import.py:104 -#: netbox/wireless/forms/bulk_import.py:107 -#: netbox/wireless/forms/filtersets.py:54 -#: netbox/wireless/forms/filtersets.py:88 +#: netbox/ipam/forms/bulk_edit.py:383 netbox/ipam/forms/filtersets.py:405 +#: netbox/wireless/forms/bulk_edit.py:70 +#: netbox/wireless/forms/bulk_edit.py:118 +#: netbox/wireless/forms/bulk_import.py:64 +#: netbox/wireless/forms/bulk_import.py:67 +#: netbox/wireless/forms/bulk_import.py:109 +#: netbox/wireless/forms/bulk_import.py:112 +#: netbox/wireless/forms/filtersets.py:57 +#: netbox/wireless/forms/filtersets.py:116 msgid "Authentication type" msgstr "Tipo di autenticazione" -#: netbox/ipam/forms/bulk_edit.py:404 netbox/ipam/forms/filtersets.py:406 +#: netbox/ipam/forms/bulk_edit.py:388 netbox/ipam/forms/filtersets.py:409 msgid "Authentication key" msgstr "Chiave di autenticazione" -#: netbox/ipam/forms/bulk_edit.py:421 netbox/ipam/forms/filtersets.py:383 -#: netbox/ipam/forms/model_forms.py:507 netbox/netbox/navigation/menu.py:386 +#: netbox/ipam/forms/bulk_edit.py:405 netbox/ipam/forms/filtersets.py:386 +#: netbox/ipam/forms/model_forms.py:517 netbox/netbox/navigation/menu.py:407 #: netbox/templates/ipam/fhrpgroup.html:49 #: netbox/templates/wireless/inc/authentication_attrs.html:5 -#: netbox/wireless/forms/bulk_edit.py:91 -#: netbox/wireless/forms/bulk_edit.py:149 -#: netbox/wireless/forms/filtersets.py:36 -#: netbox/wireless/forms/filtersets.py:76 -#: netbox/wireless/forms/model_forms.py:55 -#: netbox/wireless/forms/model_forms.py:171 +#: netbox/wireless/forms/bulk_edit.py:94 +#: netbox/wireless/forms/bulk_edit.py:152 +#: netbox/wireless/forms/filtersets.py:39 +#: netbox/wireless/forms/filtersets.py:104 +#: netbox/wireless/forms/model_forms.py:58 +#: netbox/wireless/forms/model_forms.py:174 msgid "Authentication" msgstr "Autenticazione" -#: netbox/ipam/forms/bulk_edit.py:436 netbox/ipam/forms/model_forms.py:608 -msgid "Scope type" -msgstr "Tipo di ambito" - -#: netbox/ipam/forms/bulk_edit.py:439 netbox/ipam/forms/bulk_edit.py:453 -#: netbox/ipam/forms/model_forms.py:611 netbox/ipam/forms/model_forms.py:621 -#: netbox/ipam/tables/vlans.py:71 netbox/templates/ipam/vlangroup.html:38 -msgid "Scope" -msgstr "Ambito" - -#: netbox/ipam/forms/bulk_edit.py:446 netbox/ipam/models/vlans.py:60 +#: netbox/ipam/forms/bulk_edit.py:430 netbox/ipam/models/vlans.py:62 msgid "VLAN ID ranges" msgstr "Intervalli di ID VLAN" -#: netbox/ipam/forms/bulk_edit.py:525 +#: netbox/ipam/forms/bulk_edit.py:505 netbox/ipam/forms/bulk_import.py:485 +#: netbox/ipam/forms/filtersets.py:557 netbox/ipam/models/vlans.py:232 +#: netbox/ipam/tables/vlans.py:103 +msgid "Q-in-Q role" +msgstr "Ruolo Q-in-Q" + +#: netbox/ipam/forms/bulk_edit.py:522 +msgid "Q-in-Q" +msgstr "Q-in-Q" + +#: netbox/ipam/forms/bulk_edit.py:523 msgid "Site & Group" msgstr "Sito e gruppo" -#: netbox/ipam/forms/bulk_edit.py:539 netbox/ipam/forms/model_forms.py:692 -#: netbox/ipam/forms/model_forms.py:724 netbox/ipam/tables/services.py:19 +#: netbox/ipam/forms/bulk_edit.py:546 netbox/ipam/forms/bulk_import.py:515 +#: netbox/ipam/forms/model_forms.py:724 netbox/ipam/tables/vlans.py:256 +#: netbox/templates/ipam/vlantranslationrule.html:14 +#: netbox/vpn/forms/model_forms.py:322 netbox/vpn/forms/model_forms.py:359 +msgid "Policy" +msgstr "Politica" + +#: netbox/ipam/forms/bulk_edit.py:567 netbox/ipam/forms/model_forms.py:742 +#: netbox/ipam/forms/model_forms.py:774 netbox/ipam/tables/services.py:19 #: netbox/ipam/tables/services.py:49 netbox/templates/ipam/service.html:36 #: netbox/templates/ipam/servicetemplate.html:23 msgid "Ports" msgstr "Porte" -#: netbox/ipam/forms/bulk_import.py:48 +#: netbox/ipam/forms/bulk_import.py:51 msgid "Import route targets" msgstr "Importa gli obiettivi del percorso" -#: netbox/ipam/forms/bulk_import.py:54 +#: netbox/ipam/forms/bulk_import.py:57 msgid "Export route targets" msgstr "Obiettivi del percorso di esportazione" -#: netbox/ipam/forms/bulk_import.py:92 netbox/ipam/forms/bulk_import.py:112 -#: netbox/ipam/forms/bulk_import.py:132 +#: netbox/ipam/forms/bulk_import.py:95 netbox/ipam/forms/bulk_import.py:115 +#: netbox/ipam/forms/bulk_import.py:135 msgid "Assigned RIR" msgstr "RIR assegnato" -#: netbox/ipam/forms/bulk_import.py:182 +#: netbox/ipam/forms/bulk_import.py:178 msgid "VLAN's group (if any)" msgstr "Gruppo VLAN (se presente)" -#: netbox/ipam/forms/bulk_import.py:308 -msgid "Parent device of assigned interface (if any)" -msgstr "Dispositivo principale dell'interfaccia assegnata (se presente)" - -#: netbox/ipam/forms/bulk_import.py:311 netbox/ipam/forms/bulk_import.py:512 -#: netbox/ipam/forms/model_forms.py:718 -#: netbox/virtualization/filtersets.py:288 -#: netbox/virtualization/filtersets.py:327 -#: netbox/virtualization/forms/bulk_edit.py:200 -#: netbox/virtualization/forms/bulk_edit.py:326 -#: netbox/virtualization/forms/bulk_import.py:146 -#: netbox/virtualization/forms/bulk_import.py:207 -#: netbox/virtualization/forms/filtersets.py:212 -#: netbox/virtualization/forms/filtersets.py:248 -#: netbox/virtualization/forms/model_forms.py:288 -#: netbox/vpn/forms/bulk_import.py:93 netbox/vpn/forms/bulk_import.py:290 -msgid "Virtual machine" -msgstr "Macchina virtuale" - -#: netbox/ipam/forms/bulk_import.py:315 -msgid "Parent VM of assigned interface (if any)" -msgstr "VM principale dell'interfaccia assegnata (se presente)" +#: netbox/ipam/forms/bulk_import.py:207 +#: netbox/virtualization/forms/bulk_import.py:80 +#: netbox/wireless/forms/bulk_import.py:83 +msgid "Scope ID" +msgstr "ID ambito" #: netbox/ipam/forms/bulk_import.py:325 -msgid "Is primary" -msgstr "È primario" - -#: netbox/ipam/forms/bulk_import.py:326 msgid "Make this the primary IP for the assigned device" msgstr "Imposta questo indirizzo IP primario per il dispositivo assegnato" -#: netbox/ipam/forms/bulk_import.py:330 +#: netbox/ipam/forms/bulk_import.py:329 msgid "Is out-of-band" msgstr "È fuori banda" -#: netbox/ipam/forms/bulk_import.py:331 +#: netbox/ipam/forms/bulk_import.py:330 msgid "Designate this as the out-of-band IP address for the assigned device" msgstr "Designalo come indirizzo IP fuori banda per il dispositivo assegnato" -#: netbox/ipam/forms/bulk_import.py:371 +#: netbox/ipam/forms/bulk_import.py:370 msgid "No device or virtual machine specified; cannot set as primary IP" msgstr "" "Nessun dispositivo o macchina virtuale specificato; non può essere impostato" " come IP primario" -#: netbox/ipam/forms/bulk_import.py:375 +#: netbox/ipam/forms/bulk_import.py:374 msgid "No device specified; cannot set as out-of-band IP" msgstr "" "Nessun dispositivo specificato; non può essere impostato come IP fuori banda" -#: netbox/ipam/forms/bulk_import.py:379 +#: netbox/ipam/forms/bulk_import.py:378 msgid "Cannot set out-of-band IP for virtual machines" msgstr "Impossibile impostare l'IP fuori banda per le macchine virtuali" -#: netbox/ipam/forms/bulk_import.py:383 +#: netbox/ipam/forms/bulk_import.py:382 msgid "No interface specified; cannot set as primary IP" msgstr "" "Nessuna interfaccia specificata; non può essere impostato come IP primario" -#: netbox/ipam/forms/bulk_import.py:387 +#: netbox/ipam/forms/bulk_import.py:386 msgid "No interface specified; cannot set as out-of-band IP" msgstr "" "Nessuna interfaccia specificata; non può essere impostato come IP fuori " "banda" -#: netbox/ipam/forms/bulk_import.py:422 +#: netbox/ipam/forms/bulk_import.py:421 msgid "Auth type" msgstr "Tipo di autenticazione" -#: netbox/ipam/forms/bulk_import.py:437 -msgid "Scope type (app & model)" -msgstr "Tipo di ambito (app e modello)" - -#: netbox/ipam/forms/bulk_import.py:464 +#: netbox/ipam/forms/bulk_import.py:463 msgid "Assigned VLAN group" msgstr "Gruppo VLAN assegnato" -#: netbox/ipam/forms/bulk_import.py:495 netbox/ipam/forms/bulk_import.py:521 +#: netbox/ipam/forms/bulk_import.py:495 +msgid "Service VLAN (for Q-in-Q/802.1ad customer VLANs)" +msgstr "VLAN di servizio (per le VLAN dei clienti Q-in-Q/802.1ad)" + +#: netbox/ipam/forms/bulk_import.py:518 netbox/ipam/models/vlans.py:343 +msgid "VLAN translation policy" +msgstr "Politica di traduzione VLAN" + +#: netbox/ipam/forms/bulk_import.py:530 netbox/ipam/forms/bulk_import.py:556 msgid "IP protocol" msgstr "Protocollo IP" -#: netbox/ipam/forms/bulk_import.py:509 +#: netbox/ipam/forms/bulk_import.py:544 msgid "Required if not assigned to a VM" msgstr "Obbligatorio se non assegnato a una VM" -#: netbox/ipam/forms/bulk_import.py:516 +#: netbox/ipam/forms/bulk_import.py:551 msgid "Required if not assigned to a device" msgstr "Obbligatorio se non assegnato a un dispositivo" -#: netbox/ipam/forms/bulk_import.py:541 +#: netbox/ipam/forms/bulk_import.py:576 #, python-brace-format msgid "{ip} is not assigned to this device/VM." msgstr "{ip} non è assegnato a questo dispositivo/macchina virtuale." -#: netbox/ipam/forms/filtersets.py:47 netbox/ipam/forms/model_forms.py:63 -#: netbox/netbox/navigation/menu.py:189 netbox/vpn/forms/model_forms.py:410 +#: netbox/ipam/forms/filtersets.py:49 netbox/ipam/forms/model_forms.py:66 +#: netbox/netbox/navigation/menu.py:195 netbox/vpn/forms/model_forms.py:413 msgid "Route Targets" msgstr "Obiettivi del percorso" -#: netbox/ipam/forms/filtersets.py:53 netbox/ipam/forms/model_forms.py:50 -#: netbox/vpn/forms/filtersets.py:224 netbox/vpn/forms/model_forms.py:397 +#: netbox/ipam/forms/filtersets.py:55 netbox/ipam/forms/model_forms.py:53 +#: netbox/vpn/forms/filtersets.py:224 netbox/vpn/forms/model_forms.py:400 msgid "Import targets" msgstr "Obiettivi di importazione" -#: netbox/ipam/forms/filtersets.py:58 netbox/ipam/forms/model_forms.py:55 -#: netbox/vpn/forms/filtersets.py:229 netbox/vpn/forms/model_forms.py:402 +#: netbox/ipam/forms/filtersets.py:60 netbox/ipam/forms/model_forms.py:58 +#: netbox/vpn/forms/filtersets.py:229 netbox/vpn/forms/model_forms.py:405 msgid "Export targets" msgstr "Obiettivi di esportazione" -#: netbox/ipam/forms/filtersets.py:73 +#: netbox/ipam/forms/filtersets.py:75 msgid "Imported by VRF" msgstr "Importato da VRF" -#: netbox/ipam/forms/filtersets.py:78 +#: netbox/ipam/forms/filtersets.py:80 msgid "Exported by VRF" msgstr "Esportato da VRF" -#: netbox/ipam/forms/filtersets.py:87 netbox/ipam/tables/ip.py:89 +#: netbox/ipam/forms/filtersets.py:89 netbox/ipam/tables/ip.py:35 #: netbox/templates/ipam/rir.html:30 msgid "Private" msgstr "Privato" -#: netbox/ipam/forms/filtersets.py:105 netbox/ipam/forms/filtersets.py:191 -#: netbox/ipam/forms/filtersets.py:272 netbox/ipam/forms/filtersets.py:326 +#: netbox/ipam/forms/filtersets.py:107 netbox/ipam/forms/filtersets.py:193 +#: netbox/ipam/forms/filtersets.py:275 netbox/ipam/forms/filtersets.py:329 msgid "Address family" msgstr "Famiglia di indirizzi" -#: netbox/ipam/forms/filtersets.py:119 netbox/templates/ipam/asnrange.html:25 +#: netbox/ipam/forms/filtersets.py:121 netbox/templates/ipam/asnrange.html:25 msgid "Range" msgstr "Intervallo" -#: netbox/ipam/forms/filtersets.py:128 +#: netbox/ipam/forms/filtersets.py:130 msgid "Start" msgstr "Inizio" -#: netbox/ipam/forms/filtersets.py:132 +#: netbox/ipam/forms/filtersets.py:134 msgid "End" msgstr "Fine" -#: netbox/ipam/forms/filtersets.py:186 +#: netbox/ipam/forms/filtersets.py:188 msgid "Search within" msgstr "Cerca all'interno" -#: netbox/ipam/forms/filtersets.py:207 netbox/ipam/forms/filtersets.py:342 +#: netbox/ipam/forms/filtersets.py:209 netbox/ipam/forms/filtersets.py:345 msgid "Present in VRF" msgstr "Presente in VRF" -#: netbox/ipam/forms/filtersets.py:311 +#: netbox/ipam/forms/filtersets.py:314 msgid "Device/VM" msgstr "Dispositivo/VM" -#: netbox/ipam/forms/filtersets.py:321 +#: netbox/ipam/forms/filtersets.py:324 msgid "Parent Prefix" msgstr "Prefisso principale" -#: netbox/ipam/forms/filtersets.py:347 -msgid "Assigned Device" -msgstr "Dispositivo assegnato" - -#: netbox/ipam/forms/filtersets.py:352 -msgid "Assigned VM" -msgstr "VM assegnata" - -#: netbox/ipam/forms/filtersets.py:366 +#: netbox/ipam/forms/filtersets.py:369 msgid "Assigned to an interface" msgstr "Assegnata a un'interfaccia" -#: netbox/ipam/forms/filtersets.py:373 netbox/templates/ipam/ipaddress.html:51 +#: netbox/ipam/forms/filtersets.py:376 netbox/templates/ipam/ipaddress.html:51 msgid "DNS Name" msgstr "Nome DNS" -#: netbox/ipam/forms/filtersets.py:416 netbox/ipam/models/vlans.py:251 -#: netbox/ipam/tables/ip.py:176 netbox/ipam/tables/vlans.py:82 -#: netbox/ipam/views.py:971 netbox/netbox/navigation/menu.py:193 -#: netbox/netbox/navigation/menu.py:195 +#: netbox/ipam/forms/filtersets.py:419 netbox/ipam/models/vlans.py:273 +#: netbox/ipam/tables/ip.py:122 netbox/ipam/tables/vlans.py:51 +#: netbox/ipam/views.py:1036 netbox/netbox/navigation/menu.py:199 +#: netbox/netbox/navigation/menu.py:201 msgid "VLANs" msgstr "VLAN" -#: netbox/ipam/forms/filtersets.py:457 +#: netbox/ipam/forms/filtersets.py:460 msgid "Contains VLAN ID" msgstr "Contiene l'ID VLAN" -#: netbox/ipam/forms/filtersets.py:513 netbox/ipam/models/vlans.py:192 +#: netbox/ipam/forms/filtersets.py:494 netbox/ipam/models/vlans.py:363 +msgid "Local VLAN ID" +msgstr "ID VLAN locale" + +#: netbox/ipam/forms/filtersets.py:499 netbox/ipam/models/vlans.py:371 +msgid "Remote VLAN ID" +msgstr "ID VLAN remoto" + +#: netbox/ipam/forms/filtersets.py:509 +msgid "Q-in-Q/802.1ad" +msgstr "Q-in-Q/802.1ad" + +#: netbox/ipam/forms/filtersets.py:554 netbox/ipam/models/vlans.py:191 #: netbox/templates/ipam/vlan.html:31 msgid "VLAN ID" msgstr "ID VLAN" -#: netbox/ipam/forms/filtersets.py:556 netbox/ipam/forms/model_forms.py:324 -#: netbox/ipam/forms/model_forms.py:746 netbox/ipam/forms/model_forms.py:772 -#: netbox/ipam/tables/vlans.py:195 -#: netbox/templates/virtualization/virtualdisk.html:21 -#: netbox/templates/virtualization/virtualmachine.html:12 -#: netbox/templates/virtualization/vminterface.html:21 -#: netbox/templates/vpn/tunneltermination.html:25 -#: netbox/virtualization/forms/filtersets.py:197 -#: netbox/virtualization/forms/filtersets.py:242 -#: netbox/virtualization/forms/model_forms.py:220 -#: netbox/virtualization/tables/virtualmachines.py:135 -#: netbox/virtualization/tables/virtualmachines.py:190 -#: netbox/vpn/choices.py:53 netbox/vpn/forms/filtersets.py:293 -#: netbox/vpn/forms/model_forms.py:160 netbox/vpn/forms/model_forms.py:171 -#: netbox/vpn/forms/model_forms.py:273 netbox/vpn/forms/model_forms.py:454 -msgid "Virtual Machine" -msgstr "Macchina virtuale" - -#: netbox/ipam/forms/model_forms.py:80 +#: netbox/ipam/forms/model_forms.py:83 #: netbox/templates/ipam/routetarget.html:10 msgid "Route Target" msgstr "Obiettivo del percorso" -#: netbox/ipam/forms/model_forms.py:114 netbox/ipam/tables/ip.py:117 +#: netbox/ipam/forms/model_forms.py:118 netbox/ipam/tables/ip.py:63 #: netbox/templates/ipam/aggregate.html:11 #: netbox/templates/ipam/prefix.html:38 msgid "Aggregate" msgstr "Aggregato" -#: netbox/ipam/forms/model_forms.py:135 netbox/templates/ipam/asnrange.html:12 +#: netbox/ipam/forms/model_forms.py:140 netbox/templates/ipam/asnrange.html:12 msgid "ASN Range" msgstr "Gamma ASN" -#: netbox/ipam/forms/model_forms.py:231 -msgid "Site/VLAN Assignment" -msgstr "" - -#: netbox/ipam/forms/model_forms.py:259 netbox/templates/ipam/iprange.html:10 +#: netbox/ipam/forms/model_forms.py:269 netbox/templates/ipam/iprange.html:10 msgid "IP Range" msgstr "Intervallo IP" -#: netbox/ipam/forms/model_forms.py:295 netbox/ipam/forms/model_forms.py:325 -#: netbox/ipam/forms/model_forms.py:506 +#: netbox/ipam/forms/model_forms.py:305 netbox/ipam/forms/model_forms.py:335 +#: netbox/ipam/forms/model_forms.py:516 #: netbox/templates/ipam/fhrpgroup.html:19 msgid "FHRP Group" msgstr "Gruppo FHRP" -#: netbox/ipam/forms/model_forms.py:310 +#: netbox/ipam/forms/model_forms.py:320 msgid "Make this the primary IP for the device/VM" msgstr "" "Imposta questo indirizzo IP primario per il dispositivo/macchina virtuale" -#: netbox/ipam/forms/model_forms.py:314 +#: netbox/ipam/forms/model_forms.py:324 msgid "Make this the out-of-band IP for the device" msgstr "Imposta questo indirizzo IP fuori banda per il dispositivo" -#: netbox/ipam/forms/model_forms.py:329 +#: netbox/ipam/forms/model_forms.py:339 msgid "NAT IP (Inside)" msgstr "NAT IP (interno)" -#: netbox/ipam/forms/model_forms.py:391 +#: netbox/ipam/forms/model_forms.py:401 msgid "An IP address can only be assigned to a single object." msgstr "Un indirizzo IP può essere assegnato a un solo oggetto." -#: netbox/ipam/forms/model_forms.py:398 +#: netbox/ipam/forms/model_forms.py:408 msgid "Cannot reassign primary IP address for the parent device/VM" msgstr "" "Impossibile riassegnare l'indirizzo IP primario per il dispositivo/macchina " "virtuale principale" -#: netbox/ipam/forms/model_forms.py:402 +#: netbox/ipam/forms/model_forms.py:412 msgid "Cannot reassign out-of-Band IP address for the parent device" msgstr "" "Impossibile riassegnare l'indirizzo IP fuori banda per il dispositivo " "principale" -#: netbox/ipam/forms/model_forms.py:412 +#: netbox/ipam/forms/model_forms.py:422 msgid "" "Only IP addresses assigned to an interface can be designated as primary IPs." msgstr "" "Solo gli indirizzi IP assegnati a un'interfaccia possono essere designati " "come IP primari." -#: netbox/ipam/forms/model_forms.py:420 +#: netbox/ipam/forms/model_forms.py:430 msgid "" "Only IP addresses assigned to a device interface can be designated as the " "out-of-band IP for a device." @@ -9988,24 +10486,29 @@ msgstr "" "Solo gli indirizzi IP assegnati a un'interfaccia del dispositivo possono " "essere designati come IP fuori banda per un dispositivo." -#: netbox/ipam/forms/model_forms.py:508 +#: netbox/ipam/forms/model_forms.py:518 msgid "Virtual IP Address" msgstr "Indirizzo IP virtuale" -#: netbox/ipam/forms/model_forms.py:593 +#: netbox/ipam/forms/model_forms.py:603 msgid "Assignment already exists" msgstr "L'assegnazione esiste già" -#: netbox/ipam/forms/model_forms.py:602 +#: netbox/ipam/forms/model_forms.py:612 #: netbox/templates/ipam/vlangroup.html:42 msgid "VLAN IDs" msgstr "ID VLAN" -#: netbox/ipam/forms/model_forms.py:620 +#: netbox/ipam/forms/model_forms.py:630 msgid "Child VLANs" msgstr "VLAN per bambini" -#: netbox/ipam/forms/model_forms.py:697 netbox/ipam/forms/model_forms.py:729 +#: netbox/ipam/forms/model_forms.py:730 +#: netbox/templates/ipam/vlantranslationrule.html:11 +msgid "VLAN Translation Rule" +msgstr "Regola di traduzione VLAN" + +#: netbox/ipam/forms/model_forms.py:747 netbox/ipam/forms/model_forms.py:779 msgid "" "Comma-separated list of one or more port numbers. A range may be specified " "using a hyphen." @@ -10013,33 +10516,28 @@ msgstr "" "Elenco separato da virgole di uno o più numeri di porta. È possibile " "specificare un intervallo utilizzando un trattino." -#: netbox/ipam/forms/model_forms.py:702 +#: netbox/ipam/forms/model_forms.py:752 #: netbox/templates/ipam/servicetemplate.html:12 msgid "Service Template" msgstr "Modello di servizio" -#: netbox/ipam/forms/model_forms.py:749 +#: netbox/ipam/forms/model_forms.py:799 msgid "Port(s)" msgstr "Porta/e" -#: netbox/ipam/forms/model_forms.py:750 netbox/ipam/forms/model_forms.py:778 -#: netbox/templates/ipam/service.html:21 -msgid "Service" -msgstr "Servizio" - -#: netbox/ipam/forms/model_forms.py:763 +#: netbox/ipam/forms/model_forms.py:813 msgid "Service template" msgstr "Modello di servizio" -#: netbox/ipam/forms/model_forms.py:775 +#: netbox/ipam/forms/model_forms.py:825 msgid "From Template" msgstr "Da modello" -#: netbox/ipam/forms/model_forms.py:776 +#: netbox/ipam/forms/model_forms.py:826 msgid "Custom" msgstr "Personalizzato" -#: netbox/ipam/forms/model_forms.py:806 +#: netbox/ipam/forms/model_forms.py:856 msgid "" "Must specify name, protocol, and port(s) if not using a service template." msgstr "" @@ -10058,29 +10556,29 @@ msgstr "Serie ASN" msgid "ASN ranges" msgstr "Intervalli ASN" -#: netbox/ipam/models/asns.py:72 +#: netbox/ipam/models/asns.py:69 #, python-brace-format msgid "Starting ASN ({start}) must be lower than ending ASN ({end})." msgstr "" "Avvio dell'ASN ({start}) deve essere inferiore all'ASN finale ({end})." -#: netbox/ipam/models/asns.py:104 +#: netbox/ipam/models/asns.py:101 msgid "Regional Internet Registry responsible for this AS number space" msgstr "Registro Internet regionale responsabile di questo spazio numerico AS" -#: netbox/ipam/models/asns.py:109 +#: netbox/ipam/models/asns.py:106 msgid "16- or 32-bit autonomous system number" msgstr "Numero di sistema autonomo a 16 o 32 bit" -#: netbox/ipam/models/fhrp.py:22 +#: netbox/ipam/models/fhrp.py:21 msgid "group ID" msgstr "ID gruppo" -#: netbox/ipam/models/fhrp.py:30 netbox/ipam/models/services.py:22 +#: netbox/ipam/models/fhrp.py:29 netbox/ipam/models/services.py:21 msgid "protocol" msgstr "protocollo" -#: netbox/ipam/models/fhrp.py:38 netbox/wireless/models.py:28 +#: netbox/ipam/models/fhrp.py:38 netbox/wireless/models.py:29 msgid "authentication type" msgstr "tipo di autenticazione" @@ -10096,11 +10594,11 @@ msgstr "Gruppo FHRP" msgid "FHRP groups" msgstr "Gruppi FHRP" -#: netbox/ipam/models/fhrp.py:113 +#: netbox/ipam/models/fhrp.py:110 msgid "FHRP group assignment" msgstr "Assegnazione del gruppo FHRP" -#: netbox/ipam/models/fhrp.py:114 +#: netbox/ipam/models/fhrp.py:111 msgid "FHRP group assignments" msgstr "Incarichi del gruppo FHRP" @@ -10112,35 +10610,35 @@ msgstr "privato" msgid "IP space managed by this RIR is considered private" msgstr "Lo spazio IP gestito da questo RIR è considerato privato" -#: netbox/ipam/models/ip.py:72 netbox/netbox/navigation/menu.py:182 +#: netbox/ipam/models/ip.py:72 netbox/netbox/navigation/menu.py:188 msgid "RIRs" msgstr "RIR" -#: netbox/ipam/models/ip.py:84 +#: netbox/ipam/models/ip.py:81 msgid "IPv4 or IPv6 network" msgstr "Rete IPv4 o IPv6" -#: netbox/ipam/models/ip.py:91 +#: netbox/ipam/models/ip.py:88 msgid "Regional Internet Registry responsible for this IP space" msgstr "Registro Internet regionale responsabile di questo spazio IP" -#: netbox/ipam/models/ip.py:101 +#: netbox/ipam/models/ip.py:98 msgid "date added" msgstr "data aggiunta" -#: netbox/ipam/models/ip.py:115 +#: netbox/ipam/models/ip.py:112 msgid "aggregate" msgstr "aggregare" -#: netbox/ipam/models/ip.py:116 +#: netbox/ipam/models/ip.py:113 msgid "aggregates" msgstr "aggregati" -#: netbox/ipam/models/ip.py:132 +#: netbox/ipam/models/ip.py:126 msgid "Cannot create aggregate with /0 mask." msgstr "Impossibile creare un aggregato con la maschera /0." -#: netbox/ipam/models/ip.py:144 +#: netbox/ipam/models/ip.py:138 #, python-brace-format msgid "" "Aggregates cannot overlap. {prefix} is already covered by an existing " @@ -10149,7 +10647,7 @@ msgstr "" "Gli aggregati non possono sovrapporsi. {prefix} è già coperto da un " "aggregato esistente ({aggregate})." -#: netbox/ipam/models/ip.py:158 +#: netbox/ipam/models/ip.py:152 #, python-brace-format msgid "" "Prefixes cannot overlap aggregates. {prefix} covers an existing aggregate " @@ -10158,105 +10656,100 @@ msgstr "" "I prefissi non possono sovrapporsi agli aggregati. {prefix} copre un " "aggregato esistente ({aggregate})." -#: netbox/ipam/models/ip.py:200 netbox/ipam/models/ip.py:737 -#: netbox/vpn/models/tunnels.py:114 -msgid "role" -msgstr "ruolo" - -#: netbox/ipam/models/ip.py:201 +#: netbox/ipam/models/ip.py:195 msgid "roles" msgstr "ruoli" -#: netbox/ipam/models/ip.py:217 netbox/ipam/models/ip.py:293 +#: netbox/ipam/models/ip.py:208 netbox/ipam/models/ip.py:277 msgid "prefix" msgstr "prefisso" -#: netbox/ipam/models/ip.py:218 +#: netbox/ipam/models/ip.py:209 msgid "IPv4 or IPv6 network with mask" msgstr "Rete IPv4 o IPv6 con maschera" -#: netbox/ipam/models/ip.py:254 +#: netbox/ipam/models/ip.py:238 msgid "Operational status of this prefix" msgstr "Stato operativo di questo prefisso" -#: netbox/ipam/models/ip.py:262 +#: netbox/ipam/models/ip.py:246 msgid "The primary function of this prefix" msgstr "La funzione principale di questo prefisso" -#: netbox/ipam/models/ip.py:265 +#: netbox/ipam/models/ip.py:249 msgid "is a pool" msgstr "è una piscina" -#: netbox/ipam/models/ip.py:267 +#: netbox/ipam/models/ip.py:251 msgid "All IP addresses within this prefix are considered usable" msgstr "" "Tutti gli indirizzi IP all'interno di questo prefisso sono considerati " "utilizzabili" -#: netbox/ipam/models/ip.py:270 netbox/ipam/models/ip.py:537 +#: netbox/ipam/models/ip.py:254 netbox/ipam/models/ip.py:523 msgid "mark utilized" msgstr "marchio utilizzato" -#: netbox/ipam/models/ip.py:294 +#: netbox/ipam/models/ip.py:278 msgid "prefixes" msgstr "prefissi" -#: netbox/ipam/models/ip.py:317 +#: netbox/ipam/models/ip.py:298 msgid "Cannot create prefix with /0 mask." msgstr "Impossibile creare un prefisso con la maschera /0." -#: netbox/ipam/models/ip.py:324 netbox/ipam/models/ip.py:874 +#: netbox/ipam/models/ip.py:305 netbox/ipam/models/ip.py:871 #, python-brace-format msgid "VRF {vrf}" msgstr "VRF {vrf}" -#: netbox/ipam/models/ip.py:324 netbox/ipam/models/ip.py:874 +#: netbox/ipam/models/ip.py:305 netbox/ipam/models/ip.py:871 msgid "global table" msgstr "tabella globale" -#: netbox/ipam/models/ip.py:326 +#: netbox/ipam/models/ip.py:307 #, python-brace-format msgid "Duplicate prefix found in {table}: {prefix}" msgstr "Prefisso duplicato trovato in {table}: {prefix}" -#: netbox/ipam/models/ip.py:495 +#: netbox/ipam/models/ip.py:481 msgid "start address" msgstr "indirizzo iniziale" -#: netbox/ipam/models/ip.py:496 netbox/ipam/models/ip.py:500 -#: netbox/ipam/models/ip.py:712 +#: netbox/ipam/models/ip.py:482 netbox/ipam/models/ip.py:486 +#: netbox/ipam/models/ip.py:711 msgid "IPv4 or IPv6 address (with mask)" msgstr "Indirizzo IPv4 o IPv6 (con maschera)" -#: netbox/ipam/models/ip.py:499 +#: netbox/ipam/models/ip.py:485 msgid "end address" msgstr "indirizzo finale" -#: netbox/ipam/models/ip.py:526 +#: netbox/ipam/models/ip.py:512 msgid "Operational status of this range" msgstr "Stato operativo di questa gamma" -#: netbox/ipam/models/ip.py:534 +#: netbox/ipam/models/ip.py:520 msgid "The primary function of this range" msgstr "La funzione principale di questa gamma" -#: netbox/ipam/models/ip.py:548 +#: netbox/ipam/models/ip.py:534 msgid "IP range" msgstr "Intervallo IP" -#: netbox/ipam/models/ip.py:549 +#: netbox/ipam/models/ip.py:535 msgid "IP ranges" msgstr "Intervalli IP" -#: netbox/ipam/models/ip.py:565 +#: netbox/ipam/models/ip.py:548 msgid "Starting and ending IP address versions must match" msgstr "Le versioni iniziali e finali degli indirizzi IP devono corrispondere" -#: netbox/ipam/models/ip.py:571 +#: netbox/ipam/models/ip.py:554 msgid "Starting and ending IP address masks must match" msgstr "Le maschere di indirizzo IP iniziale e finale devono corrispondere" -#: netbox/ipam/models/ip.py:578 +#: netbox/ipam/models/ip.py:561 #, python-brace-format msgid "" "Ending address must be greater than the starting address ({start_address})" @@ -10264,24 +10757,24 @@ msgstr "" "L'indirizzo finale deve essere maggiore dell'indirizzo iniziale " "({start_address})" -#: netbox/ipam/models/ip.py:590 +#: netbox/ipam/models/ip.py:589 #, python-brace-format msgid "Defined addresses overlap with range {overlapping_range} in VRF {vrf}" msgstr "" "Gli indirizzi definiti si sovrappongono all'intervallo {overlapping_range} " "in VRF {vrf}" -#: netbox/ipam/models/ip.py:599 +#: netbox/ipam/models/ip.py:598 #, python-brace-format msgid "Defined range exceeds maximum supported size ({max_size})" msgstr "" "L'intervallo definito supera la dimensione massima supportata ({max_size})" -#: netbox/ipam/models/ip.py:711 netbox/tenancy/models/contacts.py:82 +#: netbox/ipam/models/ip.py:710 netbox/tenancy/models/contacts.py:77 msgid "address" msgstr "indirizzo" -#: netbox/ipam/models/ip.py:734 +#: netbox/ipam/models/ip.py:733 msgid "The operational status of this IP" msgstr "Lo stato operativo di questo IP" @@ -10301,20 +10794,20 @@ msgstr "L'IP per il quale questo indirizzo è l'IP «esterno»" msgid "Hostname or FQDN (not case-sensitive)" msgstr "Nome host o FQDN (senza distinzione tra maiuscole e minuscole)" -#: netbox/ipam/models/ip.py:789 netbox/ipam/models/services.py:94 +#: netbox/ipam/models/ip.py:789 netbox/ipam/models/services.py:90 msgid "IP addresses" msgstr "Indirizzi IP" -#: netbox/ipam/models/ip.py:845 +#: netbox/ipam/models/ip.py:842 msgid "Cannot create IP address with /0 mask." msgstr "Impossibile creare un indirizzo IP con la maschera /0." -#: netbox/ipam/models/ip.py:851 +#: netbox/ipam/models/ip.py:848 #, python-brace-format msgid "{ip} is a network ID, which may not be assigned to an interface." msgstr "{ip} è un ID di rete, che non può essere assegnato a un'interfaccia." -#: netbox/ipam/models/ip.py:862 +#: netbox/ipam/models/ip.py:859 #, python-brace-format msgid "" "{ip} is a broadcast address, which may not be assigned to an interface." @@ -10322,12 +10815,12 @@ msgstr "" "{ip} è un indirizzo di trasmissione, che non può essere assegnato a " "un'interfaccia." -#: netbox/ipam/models/ip.py:876 +#: netbox/ipam/models/ip.py:873 #, python-brace-format msgid "Duplicate IP address found in {table}: {ipaddress}" msgstr "Indirizzo IP duplicato trovato in {table}: {ipaddress}" -#: netbox/ipam/models/ip.py:897 +#: netbox/ipam/models/ip.py:896 msgid "" "Cannot reassign IP address while it is designated as the primary IP for the " "parent object" @@ -10335,75 +10828,75 @@ msgstr "" "Impossibile riassegnare l'indirizzo IP mentre è designato come IP primario " "per l'oggetto padre" -#: netbox/ipam/models/ip.py:903 +#: netbox/ipam/models/ip.py:902 msgid "Only IPv6 addresses can be assigned SLAAC status" msgstr "Solo agli indirizzi IPv6 può essere assegnato lo stato SLAAC" -#: netbox/ipam/models/services.py:33 +#: netbox/ipam/models/services.py:32 msgid "port numbers" msgstr "numeri di porta" -#: netbox/ipam/models/services.py:59 +#: netbox/ipam/models/services.py:58 msgid "service template" msgstr "modello di servizio" -#: netbox/ipam/models/services.py:60 +#: netbox/ipam/models/services.py:59 msgid "service templates" msgstr "modelli di servizio" -#: netbox/ipam/models/services.py:95 +#: netbox/ipam/models/services.py:91 msgid "The specific IP addresses (if any) to which this service is bound" msgstr "" "Gli indirizzi IP specifici (se presenti) a cui è associato questo servizio" -#: netbox/ipam/models/services.py:102 +#: netbox/ipam/models/services.py:98 msgid "service" msgstr "servizio" -#: netbox/ipam/models/services.py:103 +#: netbox/ipam/models/services.py:99 msgid "services" msgstr "servizi" -#: netbox/ipam/models/services.py:117 +#: netbox/ipam/models/services.py:110 msgid "" "A service cannot be associated with both a device and a virtual machine." msgstr "" "Un servizio non può essere associato sia a un dispositivo che a una macchina" " virtuale." -#: netbox/ipam/models/services.py:119 +#: netbox/ipam/models/services.py:112 msgid "" "A service must be associated with either a device or a virtual machine." msgstr "" "Un servizio deve essere associato a un dispositivo o a una macchina " "virtuale." -#: netbox/ipam/models/vlans.py:85 +#: netbox/ipam/models/vlans.py:87 msgid "VLAN groups" msgstr "Gruppi VLAN" -#: netbox/ipam/models/vlans.py:95 +#: netbox/ipam/models/vlans.py:94 msgid "Cannot set scope_type without scope_id." msgstr "Impossibile impostare scope_type senza scope_id." -#: netbox/ipam/models/vlans.py:97 +#: netbox/ipam/models/vlans.py:96 msgid "Cannot set scope_id without scope_type." msgstr "Impossibile impostare scope_id senza scope_type." -#: netbox/ipam/models/vlans.py:105 +#: netbox/ipam/models/vlans.py:104 #, python-brace-format msgid "Starting VLAN ID in range ({value}) cannot be less than {minimum}" msgstr "" "Avvio dell'ID VLAN nell'intervallo ({value}) non può essere inferiore a " "{minimum}" -#: netbox/ipam/models/vlans.py:111 +#: netbox/ipam/models/vlans.py:110 #, python-brace-format msgid "Ending VLAN ID in range ({value}) cannot exceed {maximum}" msgstr "" "Termine dell'ID VLAN nell'intervallo ({value}) non può superare {maximum}" -#: netbox/ipam/models/vlans.py:118 +#: netbox/ipam/models/vlans.py:117 #, python-brace-format msgid "" "Ending VLAN ID in range must be greater than or equal to the starting VLAN " @@ -10412,31 +10905,36 @@ msgstr "" "L'ID VLAN finale nell'intervallo deve essere maggiore o uguale all'ID VLAN " "iniziale ({range})" -#: netbox/ipam/models/vlans.py:124 +#: netbox/ipam/models/vlans.py:123 msgid "Ranges cannot overlap." msgstr "Gli intervalli non possono sovrapporsi." -#: netbox/ipam/models/vlans.py:181 +#: netbox/ipam/models/vlans.py:180 msgid "The specific site to which this VLAN is assigned (if any)" msgstr "Il sito specifico a cui è assegnata questa VLAN (se presente)" -#: netbox/ipam/models/vlans.py:189 +#: netbox/ipam/models/vlans.py:188 msgid "VLAN group (optional)" msgstr "Gruppo VLAN (opzionale)" -#: netbox/ipam/models/vlans.py:197 +#: netbox/ipam/models/vlans.py:196 netbox/ipam/models/vlans.py:368 +#: netbox/ipam/models/vlans.py:376 msgid "Numeric VLAN ID (1-4094)" msgstr "ID VLAN numerico (1-4094)" -#: netbox/ipam/models/vlans.py:215 +#: netbox/ipam/models/vlans.py:214 msgid "Operational status of this VLAN" msgstr "Stato operativo di questa VLAN" -#: netbox/ipam/models/vlans.py:223 +#: netbox/ipam/models/vlans.py:222 msgid "The primary function of this VLAN" msgstr "La funzione principale di questa VLAN" -#: netbox/ipam/models/vlans.py:266 +#: netbox/ipam/models/vlans.py:237 +msgid "Customer/service VLAN designation (for Q-in-Q/IEEE 802.1ad)" +msgstr "Designazione VLAN cliente/servizio (per Q-in-Q/IEEE 802.1ad)" + +#: netbox/ipam/models/vlans.py:285 #, python-brace-format msgid "" "VLAN is assigned to group {group} (scope: {scope}); cannot also assign to " @@ -10445,43 +10943,61 @@ msgstr "" "La VLAN è assegnata al gruppo {group} (scopo: {scope}); non può essere " "assegnato anche al sito {site}." -#: netbox/ipam/models/vlans.py:275 +#: netbox/ipam/models/vlans.py:294 #, python-brace-format msgid "VID must be in ranges {ranges} for VLANs in group {group}" msgstr "" "Il VID deve essere compreso negli intervalli {ranges} per le VLAN in gruppo " "{group}" -#: netbox/ipam/models/vrfs.py:30 +#: netbox/ipam/models/vlans.py:301 +msgid "Only Q-in-Q customer VLANs maybe assigned to a service VLAN." +msgstr "" +"Solo le VLAN dei clienti Q-in-Q possono essere assegnate a una VLAN di " +"servizio." + +#: netbox/ipam/models/vlans.py:307 +msgid "A Q-in-Q customer VLAN must be assigned to a service VLAN." +msgstr "Una VLAN cliente Q-in-Q deve essere assegnata a una VLAN di servizio." + +#: netbox/ipam/models/vlans.py:344 +msgid "VLAN translation policies" +msgstr "Politiche di traduzione VLAN" + +#: netbox/ipam/models/vlans.py:385 +msgid "VLAN translation rule" +msgstr "Regola di traduzione VLAN" + +#: netbox/ipam/models/vrfs.py:29 msgid "route distinguisher" msgstr "identificatore di percorso" -#: netbox/ipam/models/vrfs.py:31 +#: netbox/ipam/models/vrfs.py:30 msgid "Unique route distinguisher (as defined in RFC 4364)" msgstr "Distinguitore di percorso univoco (come definito in RFC 4364)" -#: netbox/ipam/models/vrfs.py:42 +#: netbox/ipam/models/vrfs.py:41 msgid "enforce unique space" msgstr "imporre uno spazio unico" -#: netbox/ipam/models/vrfs.py:43 +#: netbox/ipam/models/vrfs.py:42 msgid "Prevent duplicate prefixes/IP addresses within this VRF" msgstr "Impedire prefissi/indirizzi IP duplicati all'interno di questo VRF" -#: netbox/ipam/models/vrfs.py:63 netbox/netbox/navigation/menu.py:186 -#: netbox/netbox/navigation/menu.py:188 +#: netbox/ipam/models/vrfs.py:62 netbox/netbox/navigation/menu.py:192 +#: netbox/netbox/navigation/menu.py:194 msgid "VRFs" msgstr "VRF" -#: netbox/ipam/models/vrfs.py:82 +#: netbox/ipam/models/vrfs.py:78 msgid "Route target value (formatted in accordance with RFC 4360)" msgstr "Valore target del percorso (formattato secondo RFC 4360)" -#: netbox/ipam/models/vrfs.py:94 +#: netbox/ipam/models/vrfs.py:91 msgid "route target" msgstr "destinazione del percorso" -#: netbox/ipam/models/vrfs.py:95 +#: netbox/ipam/models/vrfs.py:92 msgid "route targets" msgstr "obiettivi del percorso" @@ -10497,84 +11013,101 @@ msgstr "Numero siti" msgid "Provider Count" msgstr "Numero di fornitori" -#: netbox/ipam/tables/ip.py:95 netbox/netbox/navigation/menu.py:179 -#: netbox/netbox/navigation/menu.py:181 +#: netbox/ipam/tables/ip.py:41 netbox/netbox/navigation/menu.py:185 +#: netbox/netbox/navigation/menu.py:187 msgid "Aggregates" msgstr "Aggregati" -#: netbox/ipam/tables/ip.py:125 +#: netbox/ipam/tables/ip.py:71 msgid "Added" msgstr "Aggiunto" -#: netbox/ipam/tables/ip.py:128 netbox/ipam/tables/ip.py:166 -#: netbox/ipam/tables/vlans.py:142 netbox/ipam/views.py:346 -#: netbox/netbox/navigation/menu.py:165 netbox/netbox/navigation/menu.py:167 -#: netbox/templates/ipam/vlan.html:84 +#: netbox/ipam/tables/ip.py:74 netbox/ipam/tables/ip.py:112 +#: netbox/ipam/tables/vlans.py:118 netbox/ipam/views.py:373 +#: netbox/netbox/navigation/menu.py:171 netbox/netbox/navigation/menu.py:173 +#: netbox/templates/ipam/vlan.html:100 msgid "Prefixes" msgstr "Prefissi" -#: netbox/ipam/tables/ip.py:131 netbox/ipam/tables/ip.py:270 -#: netbox/ipam/tables/ip.py:324 netbox/ipam/tables/vlans.py:86 +#: netbox/ipam/tables/ip.py:77 netbox/ipam/tables/ip.py:221 +#: netbox/ipam/tables/ip.py:276 netbox/ipam/tables/vlans.py:55 #: netbox/templates/dcim/device.html:260 #: netbox/templates/ipam/aggregate.html:24 -#: netbox/templates/ipam/iprange.html:29 netbox/templates/ipam/prefix.html:106 +#: netbox/templates/ipam/iprange.html:29 netbox/templates/ipam/prefix.html:102 msgid "Utilization" msgstr "Utilizzo" -#: netbox/ipam/tables/ip.py:171 netbox/netbox/navigation/menu.py:161 +#: netbox/ipam/tables/ip.py:117 netbox/netbox/navigation/menu.py:167 msgid "IP Ranges" msgstr "Intervalli IP" -#: netbox/ipam/tables/ip.py:221 +#: netbox/ipam/tables/ip.py:167 msgid "Prefix (Flat)" msgstr "Prefisso (piatto)" -#: netbox/ipam/tables/ip.py:225 +#: netbox/ipam/tables/ip.py:171 msgid "Depth" msgstr "Profondità" -#: netbox/ipam/tables/ip.py:262 +#: netbox/ipam/tables/ip.py:191 netbox/ipam/tables/vlans.py:37 +#: netbox/virtualization/tables/clusters.py:77 +#: netbox/wireless/tables/wirelesslan.py:55 +msgid "Scope Type" +msgstr "Tipo di ambito" + +#: netbox/ipam/tables/ip.py:213 msgid "Pool" msgstr "Piscina" -#: netbox/ipam/tables/ip.py:266 netbox/ipam/tables/ip.py:320 +#: netbox/ipam/tables/ip.py:217 netbox/ipam/tables/ip.py:272 msgid "Marked Utilized" msgstr "Contrassegnato Utilizzato" -#: netbox/ipam/tables/ip.py:304 +#: netbox/ipam/tables/ip.py:256 msgid "Start address" msgstr "Indirizzo iniziale" -#: netbox/ipam/tables/ip.py:383 +#: netbox/ipam/tables/ip.py:335 msgid "NAT (Inside)" msgstr "NAT (interno)" -#: netbox/ipam/tables/ip.py:388 +#: netbox/ipam/tables/ip.py:340 msgid "NAT (Outside)" msgstr "NAT (esterno)" -#: netbox/ipam/tables/ip.py:393 +#: netbox/ipam/tables/ip.py:345 msgid "Assigned" msgstr "Assegnata" -#: netbox/ipam/tables/ip.py:429 netbox/templates/vpn/l2vpntermination.html:16 +#: netbox/ipam/tables/ip.py:381 netbox/templates/vpn/l2vpntermination.html:16 #: netbox/vpn/forms/filtersets.py:240 msgid "Assigned Object" msgstr "Oggetto assegnato" -#: netbox/ipam/tables/vlans.py:68 -msgid "Scope Type" -msgstr "Tipo di ambito" - -#: netbox/ipam/tables/vlans.py:76 +#: netbox/ipam/tables/vlans.py:45 msgid "VID Ranges" msgstr "Gamme VID" -#: netbox/ipam/tables/vlans.py:111 netbox/ipam/tables/vlans.py:214 +#: netbox/ipam/tables/vlans.py:80 netbox/ipam/tables/vlans.py:190 #: netbox/templates/dcim/inc/interface_vlans_table.html:4 msgid "VID" msgstr "VID" +#: netbox/ipam/tables/vlans.py:237 +#: netbox/templates/ipam/vlantranslationpolicy.html:22 +msgid "Rules" +msgstr "Regole" + +#: netbox/ipam/tables/vlans.py:260 +#: netbox/templates/ipam/vlantranslationrule.html:18 +msgid "Local VID" +msgstr "VID locale" + +#: netbox/ipam/tables/vlans.py:264 +#: netbox/templates/ipam/vlantranslationrule.html:22 +msgid "Remote VID" +msgstr "VID remoto" + #: netbox/ipam/tables/vrfs.py:30 msgid "RD" msgstr "ROSSO" @@ -10616,23 +11149,23 @@ msgstr "" "Nei nomi DNS sono consentiti solo caratteri alfanumerici, asterischi, " "trattini, punti e trattini bassi" -#: netbox/ipam/views.py:533 +#: netbox/ipam/views.py:570 msgid "Child Prefixes" msgstr "Prefissi per bambini" -#: netbox/ipam/views.py:569 +#: netbox/ipam/views.py:606 msgid "Child Ranges" msgstr "Gamme per bambini" -#: netbox/ipam/views.py:898 +#: netbox/ipam/views.py:958 msgid "Related IPs" msgstr "IP correlati" -#: netbox/ipam/views.py:1127 +#: netbox/ipam/views.py:1315 msgid "Device Interfaces" msgstr "Interfacce dei dispositivi" -#: netbox/ipam/views.py:1145 +#: netbox/ipam/views.py:1333 msgid "VM Interfaces" msgstr "Interfacce VM" @@ -10683,90 +11216,112 @@ msgstr "{class_name} deve implementare get_view_name ()" msgid "Invalid permission {permission} for model {model}" msgstr "Autorizzazione non valida {permission} per modello {model}" -#: netbox/netbox/choices.py:49 +#: netbox/netbox/choices.py:51 msgid "Dark Red" msgstr "Rosso scuro" -#: netbox/netbox/choices.py:52 +#: netbox/netbox/choices.py:54 msgid "Rose" msgstr "Rosa" -#: netbox/netbox/choices.py:53 +#: netbox/netbox/choices.py:55 msgid "Fuchsia" msgstr "Fucsia" -#: netbox/netbox/choices.py:55 +#: netbox/netbox/choices.py:57 msgid "Dark Purple" msgstr "Viola scuro" -#: netbox/netbox/choices.py:58 +#: netbox/netbox/choices.py:60 msgid "Light Blue" msgstr "Azzurro chiaro" -#: netbox/netbox/choices.py:61 +#: netbox/netbox/choices.py:63 msgid "Aqua" msgstr "acqua" -#: netbox/netbox/choices.py:62 +#: netbox/netbox/choices.py:64 msgid "Dark Green" msgstr "Verde scuro" -#: netbox/netbox/choices.py:64 +#: netbox/netbox/choices.py:66 msgid "Light Green" msgstr "Verde chiaro" -#: netbox/netbox/choices.py:65 +#: netbox/netbox/choices.py:67 msgid "Lime" msgstr "Calce" -#: netbox/netbox/choices.py:67 +#: netbox/netbox/choices.py:69 msgid "Amber" msgstr "Ambra" -#: netbox/netbox/choices.py:69 +#: netbox/netbox/choices.py:71 msgid "Dark Orange" msgstr "Arancio scuro" -#: netbox/netbox/choices.py:70 +#: netbox/netbox/choices.py:72 msgid "Brown" msgstr "Marrone" -#: netbox/netbox/choices.py:71 +#: netbox/netbox/choices.py:73 msgid "Light Grey" msgstr "Grigio chiaro" -#: netbox/netbox/choices.py:72 +#: netbox/netbox/choices.py:74 msgid "Grey" msgstr "Grigio" -#: netbox/netbox/choices.py:73 +#: netbox/netbox/choices.py:75 msgid "Dark Grey" msgstr "Grigio scuro" -#: netbox/netbox/choices.py:128 +#: netbox/netbox/choices.py:103 netbox/templates/extras/script_result.html:56 +msgid "Default" +msgstr "Predefinito" + +#: netbox/netbox/choices.py:130 msgid "Direct" msgstr "Diretto" -#: netbox/netbox/choices.py:129 +#: netbox/netbox/choices.py:131 msgid "Upload" msgstr "Carica" -#: netbox/netbox/choices.py:141 netbox/netbox/choices.py:155 +#: netbox/netbox/choices.py:143 netbox/netbox/choices.py:157 msgid "Auto-detect" msgstr "Rilevamento automatico" -#: netbox/netbox/choices.py:156 +#: netbox/netbox/choices.py:158 msgid "Comma" msgstr "Virgola" -#: netbox/netbox/choices.py:157 +#: netbox/netbox/choices.py:159 msgid "Semicolon" msgstr "Punto e virgola" -#: netbox/netbox/choices.py:158 +#: netbox/netbox/choices.py:160 msgid "Tab" msgstr "Tab" +#: netbox/netbox/choices.py:193 netbox/templates/dcim/device.html:327 +#: netbox/templates/dcim/rack.html:107 +msgid "Kilograms" +msgstr "Chilogrammi" + +#: netbox/netbox/choices.py:194 +msgid "Grams" +msgstr "Grammi" + +#: netbox/netbox/choices.py:195 netbox/templates/dcim/device.html:328 +#: netbox/templates/dcim/rack.html:108 +msgid "Pounds" +msgstr "Sterline" + +#: netbox/netbox/choices.py:196 +msgid "Ounces" +msgstr "Once" + #: netbox/netbox/config/__init__.py:67 #, python-brace-format msgid "Invalid configuration parameter: {item}" @@ -11061,6 +11616,26 @@ msgstr "data sincronizzata" msgid "{class_name} must implement a sync_data() method." msgstr "{class_name} deve implementare un metodo sync_data ()." +#: netbox/netbox/models/mixins.py:22 +msgid "weight unit" +msgstr "unità di peso" + +#: netbox/netbox/models/mixins.py:52 +msgid "Must specify a unit when setting a weight" +msgstr "È necessario specificare un'unità quando si imposta un peso" + +#: netbox/netbox/models/mixins.py:57 +msgid "distance" +msgstr "distanza" + +#: netbox/netbox/models/mixins.py:64 +msgid "distance unit" +msgstr "unità di distanza" + +#: netbox/netbox/models/mixins.py:99 +msgid "Must specify a unit when setting a distance" +msgstr "È necessario specificare un'unità quando si imposta una distanza" + #: netbox/netbox/navigation/menu.py:11 msgid "Organization" msgstr "Organizzazione" @@ -11094,10 +11669,6 @@ msgstr "Ruoli Rack" msgid "Elevations" msgstr "Elevazioni" -#: netbox/netbox/navigation/menu.py:60 netbox/netbox/navigation/menu.py:62 -msgid "Rack Types" -msgstr "Tipi di rack" - #: netbox/netbox/navigation/menu.py:76 msgid "Modules" msgstr "Moduli" @@ -11120,175 +11691,200 @@ msgstr "Componenti del dispositivo" msgid "Inventory Item Roles" msgstr "Ruoli degli articoli di inventario" -#: netbox/netbox/navigation/menu.py:111 netbox/netbox/navigation/menu.py:115 +#: netbox/netbox/navigation/menu.py:110 +#: netbox/templates/dcim/interface.html:413 +#: netbox/templates/virtualization/vminterface.html:118 +msgid "MAC Addresses" +msgstr "Indirizzi MAC" + +#: netbox/netbox/navigation/menu.py:117 netbox/netbox/navigation/menu.py:121 +#: netbox/templates/dcim/interface.html:182 msgid "Connections" msgstr "Connessioni" -#: netbox/netbox/navigation/menu.py:117 +#: netbox/netbox/navigation/menu.py:123 msgid "Cables" msgstr "Cavi" -#: netbox/netbox/navigation/menu.py:118 +#: netbox/netbox/navigation/menu.py:124 msgid "Wireless Links" msgstr "Collegamenti wireless" -#: netbox/netbox/navigation/menu.py:121 +#: netbox/netbox/navigation/menu.py:127 msgid "Interface Connections" msgstr "Connessioni di interfaccia" -#: netbox/netbox/navigation/menu.py:126 +#: netbox/netbox/navigation/menu.py:132 msgid "Console Connections" msgstr "Connessioni alla console" -#: netbox/netbox/navigation/menu.py:131 +#: netbox/netbox/navigation/menu.py:137 msgid "Power Connections" msgstr "Connessioni di alimentazione" -#: netbox/netbox/navigation/menu.py:147 +#: netbox/netbox/navigation/menu.py:153 msgid "Wireless LAN Groups" msgstr "Gruppi LAN wireless" -#: netbox/netbox/navigation/menu.py:168 +#: netbox/netbox/navigation/menu.py:174 msgid "Prefix & VLAN Roles" msgstr "Prefisso e ruoli VLAN" -#: netbox/netbox/navigation/menu.py:174 +#: netbox/netbox/navigation/menu.py:180 msgid "ASN Ranges" msgstr "Intervalli ASN" -#: netbox/netbox/navigation/menu.py:196 +#: netbox/netbox/navigation/menu.py:202 msgid "VLAN Groups" msgstr "Gruppi VLAN" #: netbox/netbox/navigation/menu.py:203 +msgid "VLAN Translation Policies" +msgstr "Politiche di traduzione VLAN" + +#: netbox/netbox/navigation/menu.py:204 +#: netbox/templates/ipam/vlantranslationpolicy.html:46 +msgid "VLAN Translation Rules" +msgstr "Regole di traduzione VLAN" + +#: netbox/netbox/navigation/menu.py:211 msgid "Service Templates" msgstr "Modelli di servizio" -#: netbox/netbox/navigation/menu.py:204 netbox/templates/dcim/device.html:302 +#: netbox/netbox/navigation/menu.py:212 netbox/templates/dcim/device.html:302 #: netbox/templates/ipam/ipaddress.html:118 #: netbox/templates/virtualization/virtualmachine.html:154 msgid "Services" msgstr "Servizi" -#: netbox/netbox/navigation/menu.py:211 +#: netbox/netbox/navigation/menu.py:219 msgid "VPN" msgstr "VPN" -#: netbox/netbox/navigation/menu.py:215 netbox/netbox/navigation/menu.py:217 +#: netbox/netbox/navigation/menu.py:223 netbox/netbox/navigation/menu.py:225 #: netbox/vpn/tables/tunnels.py:24 msgid "Tunnels" msgstr "Tunnel" -#: netbox/netbox/navigation/menu.py:218 +#: netbox/netbox/navigation/menu.py:226 #: netbox/templates/vpn/tunnelgroup.html:8 msgid "Tunnel Groups" msgstr "Gruppi di tunnel" -#: netbox/netbox/navigation/menu.py:219 +#: netbox/netbox/navigation/menu.py:227 msgid "Tunnel Terminations" msgstr "Terminazioni dei tunnel" -#: netbox/netbox/navigation/menu.py:223 netbox/netbox/navigation/menu.py:225 +#: netbox/netbox/navigation/menu.py:231 netbox/netbox/navigation/menu.py:233 #: netbox/vpn/models/l2vpn.py:64 msgid "L2VPNs" msgstr "VPN L2" -#: netbox/netbox/navigation/menu.py:226 netbox/templates/vpn/l2vpn.html:56 -#: netbox/templates/vpn/tunnel.html:72 netbox/vpn/tables/tunnels.py:58 -msgid "Terminations" -msgstr "Terminazioni" - -#: netbox/netbox/navigation/menu.py:232 +#: netbox/netbox/navigation/menu.py:240 msgid "IKE Proposals" msgstr "Proposte IKE" -#: netbox/netbox/navigation/menu.py:233 +#: netbox/netbox/navigation/menu.py:241 #: netbox/templates/vpn/ikeproposal.html:41 msgid "IKE Policies" msgstr "Politiche IKE" -#: netbox/netbox/navigation/menu.py:234 +#: netbox/netbox/navigation/menu.py:242 msgid "IPSec Proposals" msgstr "Proposte IPSec" -#: netbox/netbox/navigation/menu.py:235 +#: netbox/netbox/navigation/menu.py:243 #: netbox/templates/vpn/ipsecproposal.html:37 msgid "IPSec Policies" msgstr "Criteri IPSec" -#: netbox/netbox/navigation/menu.py:236 netbox/templates/vpn/ikepolicy.html:38 +#: netbox/netbox/navigation/menu.py:244 netbox/templates/vpn/ikepolicy.html:38 #: netbox/templates/vpn/ipsecpolicy.html:25 msgid "IPSec Profiles" msgstr "Profili IPSec" -#: netbox/netbox/navigation/menu.py:251 +#: netbox/netbox/navigation/menu.py:259 #: netbox/templates/virtualization/virtualmachine.html:174 #: netbox/templates/virtualization/virtualmachine/base.html:32 #: netbox/templates/virtualization/virtualmachine_list.html:21 -#: netbox/virtualization/tables/virtualmachines.py:104 -#: netbox/virtualization/views.py:386 +#: netbox/virtualization/tables/virtualmachines.py:74 +#: netbox/virtualization/views.py:403 msgid "Virtual Disks" msgstr "Dischi virtuali" -#: netbox/netbox/navigation/menu.py:258 +#: netbox/netbox/navigation/menu.py:266 msgid "Cluster Types" msgstr "Tipi di cluster" -#: netbox/netbox/navigation/menu.py:259 +#: netbox/netbox/navigation/menu.py:267 msgid "Cluster Groups" msgstr "Gruppi di cluster" -#: netbox/netbox/navigation/menu.py:273 +#: netbox/netbox/navigation/menu.py:281 msgid "Circuit Types" msgstr "Tipi di circuiti" -#: netbox/netbox/navigation/menu.py:274 -msgid "Circuit Groups" -msgstr "Gruppi di circuiti" - -#: netbox/netbox/navigation/menu.py:275 -#: netbox/templates/circuits/circuit.html:66 -msgid "Group Assignments" -msgstr "Assegnazioni di gruppo" - -#: netbox/netbox/navigation/menu.py:276 +#: netbox/netbox/navigation/menu.py:282 msgid "Circuit Terminations" msgstr "Terminazioni del circuito" -#: netbox/netbox/navigation/menu.py:280 netbox/netbox/navigation/menu.py:282 +#: netbox/netbox/navigation/menu.py:286 netbox/netbox/navigation/menu.py:288 +#: netbox/templates/circuits/providernetwork.html:55 +msgid "Virtual Circuits" +msgstr "Circuiti virtuali" + +#: netbox/netbox/navigation/menu.py:289 +msgid "Virtual Circuit Types" +msgstr "Tipi di circuiti virtuali" + +#: netbox/netbox/navigation/menu.py:290 +msgid "Virtual Circuit Terminations" +msgstr "Terminazioni di circuiti virtuali" + +#: netbox/netbox/navigation/menu.py:296 +msgid "Circuit Groups" +msgstr "Gruppi di circuiti" + +#: netbox/netbox/navigation/menu.py:297 +#: netbox/templates/circuits/circuit.html:76 +#: netbox/templates/circuits/virtualcircuit.html:69 +msgid "Group Assignments" +msgstr "Assegnazioni di gruppo" + +#: netbox/netbox/navigation/menu.py:301 netbox/netbox/navigation/menu.py:303 msgid "Providers" msgstr "Fornitori" -#: netbox/netbox/navigation/menu.py:283 +#: netbox/netbox/navigation/menu.py:304 #: netbox/templates/circuits/provider.html:51 msgid "Provider Accounts" msgstr "Account dei fornitori" -#: netbox/netbox/navigation/menu.py:284 +#: netbox/netbox/navigation/menu.py:305 msgid "Provider Networks" msgstr "Reti di fornitori" -#: netbox/netbox/navigation/menu.py:298 +#: netbox/netbox/navigation/menu.py:319 msgid "Power Panels" msgstr "Pannelli di alimentazione" -#: netbox/netbox/navigation/menu.py:309 +#: netbox/netbox/navigation/menu.py:330 msgid "Configurations" msgstr "Configurazioni" -#: netbox/netbox/navigation/menu.py:311 +#: netbox/netbox/navigation/menu.py:332 msgid "Config Contexts" msgstr "Contesti di configurazione" -#: netbox/netbox/navigation/menu.py:312 +#: netbox/netbox/navigation/menu.py:333 msgid "Config Templates" msgstr "Modelli di configurazione" -#: netbox/netbox/navigation/menu.py:319 netbox/netbox/navigation/menu.py:323 +#: netbox/netbox/navigation/menu.py:340 netbox/netbox/navigation/menu.py:344 msgid "Customization" msgstr "Personalizzazione" -#: netbox/netbox/navigation/menu.py:325 +#: netbox/netbox/navigation/menu.py:346 #: netbox/templates/dcim/device_edit.html:103 #: netbox/templates/dcim/htmx/cable_edit.html:81 #: netbox/templates/dcim/virtualchassis_add.html:31 @@ -11297,96 +11893,96 @@ msgstr "Personalizzazione" #: netbox/templates/htmx/form.html:19 netbox/templates/inc/filter_list.html:30 #: netbox/templates/inc/panels/custom_fields.html:7 #: netbox/templates/ipam/ipaddress_bulk_add.html:35 -#: netbox/templates/ipam/vlan_edit.html:59 +#: netbox/templates/ipam/vlan_edit.html:67 msgid "Custom Fields" msgstr "Campi personalizzati" -#: netbox/netbox/navigation/menu.py:326 +#: netbox/netbox/navigation/menu.py:347 msgid "Custom Field Choices" msgstr "Scelte di campo personalizzate" -#: netbox/netbox/navigation/menu.py:327 +#: netbox/netbox/navigation/menu.py:348 msgid "Custom Links" msgstr "Link personalizzati" -#: netbox/netbox/navigation/menu.py:328 +#: netbox/netbox/navigation/menu.py:349 msgid "Export Templates" msgstr "Modelli di esportazione" -#: netbox/netbox/navigation/menu.py:329 +#: netbox/netbox/navigation/menu.py:350 msgid "Saved Filters" msgstr "Filtri salvati" -#: netbox/netbox/navigation/menu.py:331 +#: netbox/netbox/navigation/menu.py:352 msgid "Image Attachments" msgstr "Allegati di immagini" -#: netbox/netbox/navigation/menu.py:349 +#: netbox/netbox/navigation/menu.py:370 msgid "Operations" msgstr "Operazioni" -#: netbox/netbox/navigation/menu.py:353 +#: netbox/netbox/navigation/menu.py:374 msgid "Integrations" msgstr "Integrazioni" -#: netbox/netbox/navigation/menu.py:355 +#: netbox/netbox/navigation/menu.py:376 msgid "Data Sources" msgstr "Fonti di dati" -#: netbox/netbox/navigation/menu.py:356 +#: netbox/netbox/navigation/menu.py:377 msgid "Event Rules" msgstr "Regole dell'evento" -#: netbox/netbox/navigation/menu.py:357 +#: netbox/netbox/navigation/menu.py:378 msgid "Webhooks" msgstr "Webhook" -#: netbox/netbox/navigation/menu.py:361 netbox/netbox/navigation/menu.py:365 -#: netbox/netbox/views/generic/feature_views.py:153 +#: netbox/netbox/navigation/menu.py:382 netbox/netbox/navigation/menu.py:386 +#: netbox/netbox/views/generic/feature_views.py:158 #: netbox/templates/extras/report/base.html:37 #: netbox/templates/extras/script/base.html:36 msgid "Jobs" msgstr "Offerte di lavoro" -#: netbox/netbox/navigation/menu.py:371 +#: netbox/netbox/navigation/menu.py:392 msgid "Logging" msgstr "Registrazione" -#: netbox/netbox/navigation/menu.py:373 +#: netbox/netbox/navigation/menu.py:394 msgid "Notification Groups" msgstr "Gruppi di notifiche" -#: netbox/netbox/navigation/menu.py:374 +#: netbox/netbox/navigation/menu.py:395 msgid "Journal Entries" msgstr "Voci di diario" -#: netbox/netbox/navigation/menu.py:375 +#: netbox/netbox/navigation/menu.py:396 #: netbox/templates/core/objectchange.html:9 #: netbox/templates/core/objectchange_list.html:4 msgid "Change Log" msgstr "Registro delle modifiche" -#: netbox/netbox/navigation/menu.py:382 netbox/templates/inc/user_menu.html:29 +#: netbox/netbox/navigation/menu.py:403 netbox/templates/inc/user_menu.html:29 msgid "Admin" msgstr "Amministratore" -#: netbox/netbox/navigation/menu.py:430 netbox/templates/account/base.html:27 -#: netbox/templates/inc/user_menu.html:57 +#: netbox/netbox/navigation/menu.py:451 netbox/templates/account/base.html:27 +#: netbox/templates/inc/user_menu.html:52 msgid "API Tokens" msgstr "Token API" -#: netbox/netbox/navigation/menu.py:437 netbox/users/forms/model_forms.py:187 +#: netbox/netbox/navigation/menu.py:458 netbox/users/forms/model_forms.py:187 #: netbox/users/forms/model_forms.py:195 netbox/users/forms/model_forms.py:242 #: netbox/users/forms/model_forms.py:249 msgid "Permissions" msgstr "Autorizzazioni" -#: netbox/netbox/navigation/menu.py:445 netbox/netbox/navigation/menu.py:449 +#: netbox/netbox/navigation/menu.py:466 netbox/netbox/navigation/menu.py:470 #: netbox/templates/core/system.html:7 msgid "System" msgstr "Sistema" -#: netbox/netbox/navigation/menu.py:454 netbox/netbox/navigation/menu.py:502 +#: netbox/netbox/navigation/menu.py:475 netbox/netbox/navigation/menu.py:523 #: netbox/templates/500.html:35 netbox/templates/account/preferences.html:22 #: netbox/templates/core/plugin.html:13 #: netbox/templates/core/plugin_list.html:7 @@ -11394,31 +11990,31 @@ msgstr "Sistema" msgid "Plugins" msgstr "Plugin" -#: netbox/netbox/navigation/menu.py:459 +#: netbox/netbox/navigation/menu.py:480 msgid "Configuration History" msgstr "Cronologia della configurazione" -#: netbox/netbox/navigation/menu.py:465 netbox/templates/core/rq_task.html:8 +#: netbox/netbox/navigation/menu.py:486 netbox/templates/core/rq_task.html:8 #: netbox/templates/core/rq_task_list.html:22 msgid "Background Tasks" msgstr "Attività in background" -#: netbox/netbox/plugins/navigation.py:47 -#: netbox/netbox/plugins/navigation.py:69 +#: netbox/netbox/plugins/navigation.py:48 +#: netbox/netbox/plugins/navigation.py:70 msgid "Permissions must be passed as a tuple or list." msgstr "Le autorizzazioni devono essere passate come tupla o elenco." -#: netbox/netbox/plugins/navigation.py:51 +#: netbox/netbox/plugins/navigation.py:52 msgid "Buttons must be passed as a tuple or list." msgstr "I pulsanti devono essere passati come tupla o lista." -#: netbox/netbox/plugins/navigation.py:73 +#: netbox/netbox/plugins/navigation.py:74 msgid "Button color must be a choice within ButtonColorChoices." msgstr "" "Il colore del pulsante deve essere una scelta all'interno di " "ButtonColorChoices." -#: netbox/netbox/plugins/registration.py:25 +#: netbox/netbox/plugins/registration.py:26 #, python-brace-format msgid "" "PluginTemplateExtension class {template_extension} was passed as an " @@ -11427,7 +12023,7 @@ msgstr "" "classe PluginTemplateExtension {template_extension} è stato approvato come " "istanza!" -#: netbox/netbox/plugins/registration.py:31 +#: netbox/netbox/plugins/registration.py:32 #, python-brace-format msgid "" "{template_extension} is not a subclass of " @@ -11436,17 +12032,17 @@ msgstr "" "{template_extension} non è una sottoclasse di " "Netbox.plugins.PluginTemplateExtension!" -#: netbox/netbox/plugins/registration.py:51 +#: netbox/netbox/plugins/registration.py:57 #, python-brace-format msgid "{item} must be an instance of netbox.plugins.PluginMenuItem" msgstr "{item} deve essere un'istanza di Netbox.Plugins.PluginMenuItem" -#: netbox/netbox/plugins/registration.py:62 +#: netbox/netbox/plugins/registration.py:68 #, python-brace-format msgid "{menu_link} must be an instance of netbox.plugins.PluginMenuItem" msgstr "{menu_link} deve essere un'istanza di Netbox.Plugins.PluginMenuItem" -#: netbox/netbox/plugins/registration.py:67 +#: netbox/netbox/plugins/registration.py:73 #, python-brace-format msgid "{button} must be an instance of netbox.plugins.PluginMenuButton" msgstr "{button} deve essere un'istanza di Netbox.plugins.PluginMenuButton" @@ -11532,93 +12128,93 @@ msgstr "Impossibile aggiungere negozi al registro dopo l'inizializzazione" msgid "Cannot delete stores from registry" msgstr "Impossibile eliminare i negozi dal registro" -#: netbox/netbox/settings.py:760 +#: netbox/netbox/settings.py:752 msgid "Czech" msgstr "cechi" -#: netbox/netbox/settings.py:761 +#: netbox/netbox/settings.py:753 msgid "Danish" msgstr "danese" -#: netbox/netbox/settings.py:762 +#: netbox/netbox/settings.py:754 msgid "German" msgstr "Tedesco" -#: netbox/netbox/settings.py:763 +#: netbox/netbox/settings.py:755 msgid "English" msgstr "Inglese" -#: netbox/netbox/settings.py:764 +#: netbox/netbox/settings.py:756 msgid "Spanish" msgstr "spagnolo" -#: netbox/netbox/settings.py:765 +#: netbox/netbox/settings.py:757 msgid "French" msgstr "Francese" -#: netbox/netbox/settings.py:766 +#: netbox/netbox/settings.py:758 msgid "Italian" msgstr "Italiano" -#: netbox/netbox/settings.py:767 +#: netbox/netbox/settings.py:759 msgid "Japanese" msgstr "Giapponese" -#: netbox/netbox/settings.py:768 +#: netbox/netbox/settings.py:760 msgid "Dutch" msgstr "Olandese" -#: netbox/netbox/settings.py:769 +#: netbox/netbox/settings.py:761 msgid "Polish" msgstr "Polacco" -#: netbox/netbox/settings.py:770 +#: netbox/netbox/settings.py:762 msgid "Portuguese" msgstr "portoghese" -#: netbox/netbox/settings.py:771 +#: netbox/netbox/settings.py:763 msgid "Russian" msgstr "Russo" -#: netbox/netbox/settings.py:772 +#: netbox/netbox/settings.py:764 msgid "Turkish" msgstr "turco" -#: netbox/netbox/settings.py:773 +#: netbox/netbox/settings.py:765 msgid "Ukrainian" msgstr "ucraino" -#: netbox/netbox/settings.py:774 +#: netbox/netbox/settings.py:766 msgid "Chinese" msgstr "Cinese" -#: netbox/netbox/tables/columns.py:176 +#: netbox/netbox/tables/columns.py:177 msgid "Select all" msgstr "Seleziona tutto" -#: netbox/netbox/tables/columns.py:189 +#: netbox/netbox/tables/columns.py:190 msgid "Toggle all" msgstr "Attiva tutto" -#: netbox/netbox/tables/columns.py:300 +#: netbox/netbox/tables/columns.py:302 msgid "Toggle Dropdown" msgstr "Attiva il menu a discesa" -#: netbox/netbox/tables/columns.py:572 netbox/templates/core/job.html:53 +#: netbox/netbox/tables/columns.py:575 netbox/templates/core/job.html:53 msgid "Error" msgstr "Errore" -#: netbox/netbox/tables/tables.py:58 +#: netbox/netbox/tables/tables.py:59 #, python-brace-format msgid "No {model_name} found" msgstr "No {model_name} trovato" -#: netbox/netbox/tables/tables.py:249 +#: netbox/netbox/tables/tables.py:252 #: netbox/templates/generic/bulk_import.html:117 msgid "Field" msgstr "Campo" -#: netbox/netbox/tables/tables.py:252 +#: netbox/netbox/tables/tables.py:255 msgid "Value" msgstr "Valore" @@ -11635,24 +12231,24 @@ msgstr "" "Si è verificato un errore durante il rendering del modello di esportazione " "selezionato ({template}): {error}" -#: netbox/netbox/views/generic/bulk_views.py:416 +#: netbox/netbox/views/generic/bulk_views.py:421 #, python-brace-format msgid "Row {i}: Object with ID {id} does not exist" msgstr "Fila {i}: Oggetto con ID {id} non esiste" -#: netbox/netbox/views/generic/bulk_views.py:709 -#: netbox/netbox/views/generic/bulk_views.py:910 -#: netbox/netbox/views/generic/bulk_views.py:958 +#: netbox/netbox/views/generic/bulk_views.py:708 +#: netbox/netbox/views/generic/bulk_views.py:909 +#: netbox/netbox/views/generic/bulk_views.py:957 #, python-brace-format msgid "No {object_type} were selected." msgstr "No {object_type} sono stati selezionati." -#: netbox/netbox/views/generic/bulk_views.py:788 +#: netbox/netbox/views/generic/bulk_views.py:787 #, python-brace-format msgid "Renamed {count} {object_type}" msgstr "Rinominato {count} {object_type}" -#: netbox/netbox/views/generic/bulk_views.py:888 +#: netbox/netbox/views/generic/bulk_views.py:887 #, python-brace-format msgid "Deleted {count} {object_type}" msgstr "Eliminato {count} {object_type}" @@ -11665,16 +12261,16 @@ msgstr "Registro delle modifiche" msgid "Journal" msgstr "rivista" -#: netbox/netbox/views/generic/feature_views.py:207 +#: netbox/netbox/views/generic/feature_views.py:212 msgid "Unable to synchronize data: No data file set." msgstr "Impossibile sincronizzare i dati: nessun file di dati impostato." -#: netbox/netbox/views/generic/feature_views.py:211 +#: netbox/netbox/views/generic/feature_views.py:216 #, python-brace-format msgid "Synchronized data for {object_type} {object}." msgstr "Dati sincronizzati per {object_type} {object}." -#: netbox/netbox/views/generic/feature_views.py:236 +#: netbox/netbox/views/generic/feature_views.py:241 #, python-brace-format msgid "Synced {count} {object_type}" msgstr "Sincronizzato {count} {object_type}" @@ -11749,9 +12345,9 @@ msgstr "su GitHub" msgid "Home Page" msgstr "Pagina iniziale" -#: netbox/templates/account/base.html:7 netbox/templates/inc/user_menu.html:45 +#: netbox/templates/account/base.html:7 netbox/templates/inc/user_menu.html:40 #: netbox/vpn/forms/bulk_edit.py:255 netbox/vpn/forms/filtersets.py:189 -#: netbox/vpn/forms/model_forms.py:379 +#: netbox/vpn/forms/model_forms.py:382 msgid "Profile" msgstr "Profilo" @@ -11763,12 +12359,12 @@ msgstr "Notifiche" #: netbox/templates/account/base.html:16 #: netbox/templates/account/subscriptions.html:7 -#: netbox/templates/inc/user_menu.html:51 +#: netbox/templates/inc/user_menu.html:46 msgid "Subscriptions" msgstr "Abbonamenti" #: netbox/templates/account/base.html:19 -#: netbox/templates/inc/user_menu.html:54 +#: netbox/templates/inc/user_menu.html:49 msgid "Preferences" msgstr "Preferenze" @@ -11796,6 +12392,7 @@ msgstr "Cambia password" #: netbox/templates/generic/object_edit.html:72 #: netbox/templates/htmx/delete_form.html:53 #: netbox/templates/htmx/delete_form.html:55 +#: netbox/templates/htmx/quick_add.html:21 #: netbox/templates/ipam/ipaddress_assign.html:28 #: netbox/templates/virtualization/cluster_add_devices.html:30 msgid "Cancel" @@ -11894,7 +12491,7 @@ msgstr "Gruppi assegnati" #: netbox/templates/core/objectchange.html:142 #: netbox/templates/dcim/devicebay.html:59 #: netbox/templates/dcim/inc/panels/inventory_items.html:45 -#: netbox/templates/dcim/interface.html:296 +#: netbox/templates/dcim/interface.html:353 #: netbox/templates/dcim/modulebay.html:80 #: netbox/templates/extras/configcontext.html:70 #: netbox/templates/extras/eventrule.html:66 @@ -11903,6 +12500,7 @@ msgstr "Gruppi assegnati" #: netbox/templates/extras/webhook.html:75 #: netbox/templates/inc/panel_table.html:13 #: netbox/templates/inc/panels/comments.html:10 +#: netbox/templates/inc/panels/related_objects.html:23 #: netbox/templates/ipam/inc/panels/fhrp_groups.html:56 #: netbox/templates/users/group.html:34 netbox/templates/users/group.html:44 #: netbox/templates/users/objectpermission.html:77 @@ -11940,7 +12538,7 @@ msgstr "Usato per ultimo" msgid "Add a Token" msgstr "Aggiungi un token" -#: netbox/templates/base/base.html:22 netbox/templates/home.html:27 +#: netbox/templates/base/base.html:23 netbox/templates/home.html:27 msgid "Home" msgstr "Home" @@ -11982,15 +12580,16 @@ msgstr "Codice sorgente" msgid "Community" msgstr "Comunità" -#: netbox/templates/circuits/circuit.html:47 +#: netbox/templates/circuits/circuit.html:57 msgid "Install Date" msgstr "Data di installazione" -#: netbox/templates/circuits/circuit.html:51 +#: netbox/templates/circuits/circuit.html:61 msgid "Termination Date" msgstr "Data di cessazione" -#: netbox/templates/circuits/circuit.html:70 +#: netbox/templates/circuits/circuit.html:80 +#: netbox/templates/circuits/virtualcircuit.html:73 #: netbox/templates/ipam/inc/panels/fhrp_groups.html:15 msgid "Assign Group" msgstr "Assegna gruppo" @@ -12038,7 +12637,7 @@ msgid "Add" msgstr "Inserisci" #: netbox/templates/circuits/inc/circuit_termination.html:15 -#: netbox/templates/circuits/inc/circuit_termination_fields.html:36 +#: netbox/templates/circuits/inc/circuit_termination_fields.html:37 #: netbox/templates/dcim/inc/panels/inventory_items.html:32 #: netbox/templates/dcim/powerpanel.html:56 #: netbox/templates/extras/script_list.html:30 @@ -12053,35 +12652,39 @@ msgstr "Modifica" msgid "Swap" msgstr "Scambia" -#: netbox/templates/circuits/inc/circuit_termination_fields.html:19 +#: netbox/templates/circuits/inc/circuit_termination_fields.html:5 +msgid "Termination point" +msgstr "Punto di terminazione" + +#: netbox/templates/circuits/inc/circuit_termination_fields.html:20 #: netbox/templates/dcim/consoleport.html:59 #: netbox/templates/dcim/consoleserverport.html:60 #: netbox/templates/dcim/powerfeed.html:114 msgid "Marked as connected" msgstr "Contrassegnata come connessa" -#: netbox/templates/circuits/inc/circuit_termination_fields.html:21 +#: netbox/templates/circuits/inc/circuit_termination_fields.html:22 msgid "to" msgstr "a" -#: netbox/templates/circuits/inc/circuit_termination_fields.html:31 #: netbox/templates/circuits/inc/circuit_termination_fields.html:32 +#: netbox/templates/circuits/inc/circuit_termination_fields.html:33 #: netbox/templates/dcim/frontport.html:80 #: netbox/templates/dcim/inc/connection_endpoints.html:7 -#: netbox/templates/dcim/interface.html:154 +#: netbox/templates/dcim/interface.html:211 #: netbox/templates/dcim/rearport.html:76 msgid "Trace" msgstr "Traccia" -#: netbox/templates/circuits/inc/circuit_termination_fields.html:35 +#: netbox/templates/circuits/inc/circuit_termination_fields.html:36 msgid "Edit cable" msgstr "Modifica cavo" -#: netbox/templates/circuits/inc/circuit_termination_fields.html:40 +#: netbox/templates/circuits/inc/circuit_termination_fields.html:41 msgid "Remove cable" msgstr "Rimuovere il cavo" -#: netbox/templates/circuits/inc/circuit_termination_fields.html:41 +#: netbox/templates/circuits/inc/circuit_termination_fields.html:42 #: netbox/templates/dcim/bulk_disconnect.html:5 #: netbox/templates/dcim/device/consoleports.html:12 #: netbox/templates/dcim/device/consoleserverports.html:12 @@ -12094,33 +12697,33 @@ msgstr "Rimuovere il cavo" msgid "Disconnect" msgstr "Disconnetti" -#: netbox/templates/circuits/inc/circuit_termination_fields.html:48 +#: netbox/templates/circuits/inc/circuit_termination_fields.html:49 #: netbox/templates/dcim/consoleport.html:69 #: netbox/templates/dcim/consoleserverport.html:70 #: netbox/templates/dcim/frontport.html:102 -#: netbox/templates/dcim/interface.html:180 -#: netbox/templates/dcim/interface.html:200 +#: netbox/templates/dcim/interface.html:237 +#: netbox/templates/dcim/interface.html:257 #: netbox/templates/dcim/powerfeed.html:127 -#: netbox/templates/dcim/poweroutlet.html:71 -#: netbox/templates/dcim/poweroutlet.html:72 +#: netbox/templates/dcim/poweroutlet.html:81 +#: netbox/templates/dcim/poweroutlet.html:82 #: netbox/templates/dcim/powerport.html:73 #: netbox/templates/dcim/rearport.html:98 msgid "Connect" msgstr "Connetti" -#: netbox/templates/circuits/inc/circuit_termination_fields.html:70 +#: netbox/templates/circuits/inc/circuit_termination_fields.html:65 msgid "Downstream" msgstr "A valle" -#: netbox/templates/circuits/inc/circuit_termination_fields.html:71 +#: netbox/templates/circuits/inc/circuit_termination_fields.html:66 msgid "Upstream" msgstr "A monte" -#: netbox/templates/circuits/inc/circuit_termination_fields.html:80 +#: netbox/templates/circuits/inc/circuit_termination_fields.html:75 msgid "Cross-Connect" msgstr "Connessione incrociata" -#: netbox/templates/circuits/inc/circuit_termination_fields.html:84 +#: netbox/templates/circuits/inc/circuit_termination_fields.html:79 msgid "Patch Panel/Port" msgstr "Pannello di permutazione/porta" @@ -12132,6 +12735,27 @@ msgstr "Aggiungi circuito" msgid "Provider Account" msgstr "Account fornitore" +#: netbox/templates/circuits/providernetwork.html:59 +msgid "Add a Virtual Circuit" +msgstr "Aggiungi un circuito virtuale" + +#: netbox/templates/circuits/virtualcircuit.html:91 +#: netbox/templates/vpn/tunnel.html:9 +msgid "Add Termination" +msgstr "Aggiungi terminazione" + +#: netbox/templates/circuits/virtualcircuittermination.html:23 +msgid "Virtual Circuit Termination" +msgstr "Terminazione del circuito virtuale" + +#: netbox/templates/circuits/virtualcircuittype.html:10 +msgid "Add Virtual Circuit" +msgstr "Aggiungi circuito virtuale" + +#: netbox/templates/circuits/virtualcircuittype.html:19 +msgid "Virtual Circuit Type" +msgstr "Tipo di circuito virtuale" + #: netbox/templates/core/configrevision.html:35 msgid "Configuration Data" msgstr "Dati di configurazione" @@ -12165,7 +12789,7 @@ msgstr "Modificato" #: netbox/templates/core/datafile.html:42 #: netbox/templates/ipam/iprange.html:25 #: netbox/templates/virtualization/virtualdisk.html:29 -#: netbox/virtualization/tables/virtualmachines.py:198 +#: netbox/virtualization/tables/virtualmachines.py:169 msgid "Size" msgstr "Taglia" @@ -12608,8 +13232,8 @@ msgstr "Rinomina selezionato" #: netbox/templates/dcim/consoleport.html:65 #: netbox/templates/dcim/consoleserverport.html:66 #: netbox/templates/dcim/frontport.html:98 -#: netbox/templates/dcim/interface.html:176 -#: netbox/templates/dcim/poweroutlet.html:69 +#: netbox/templates/dcim/interface.html:233 +#: netbox/templates/dcim/poweroutlet.html:79 #: netbox/templates/dcim/powerport.html:69 msgid "Not Connected" msgstr "Non connesso" @@ -12632,7 +13256,7 @@ msgid "Map" msgstr "Mappa" #: netbox/templates/dcim/device.html:108 -#: netbox/templates/dcim/inventoryitem.html:56 +#: netbox/templates/dcim/inventoryitem.html:60 #: netbox/templates/dcim/module.html:81 #: netbox/templates/dcim/modulebay.html:74 netbox/templates/dcim/rack.html:61 msgid "Asset Tag" @@ -12648,7 +13272,7 @@ msgstr "Crea VDC" #: netbox/templates/dcim/device.html:175 #: netbox/templates/dcim/device_edit.html:64 -#: netbox/virtualization/forms/model_forms.py:223 +#: netbox/virtualization/forms/model_forms.py:230 msgid "Management" msgstr "Direzione" @@ -12765,35 +13389,6 @@ msgstr "Aggiungi porta di alimentazione" msgid "Add Rear Ports" msgstr "Aggiungi porte posteriori" -#: netbox/templates/dcim/device/render_config.html:5 -#: netbox/templates/virtualization/virtualmachine/render_config.html:5 -msgid "Config" -msgstr "Configurazione" - -#: netbox/templates/dcim/device/render_config.html:35 -#: netbox/templates/virtualization/virtualmachine/render_config.html:35 -msgid "Context Data" -msgstr "Dati contestuali" - -#: netbox/templates/dcim/device/render_config.html:55 -#: netbox/templates/virtualization/virtualmachine/render_config.html:55 -msgid "Rendered Config" -msgstr "Configurazione renderizzata" - -#: netbox/templates/dcim/device/render_config.html:57 -#: netbox/templates/virtualization/virtualmachine/render_config.html:57 -msgid "Download" -msgstr "Scarica" - -#: netbox/templates/dcim/device/render_config.html:64 -#: netbox/templates/virtualization/virtualmachine/render_config.html:64 -msgid "Error rendering template" -msgstr "Errore nel rendering del modello" - -#: netbox/templates/dcim/device/render_config.html:70 -msgid "No configuration template has been assigned for this device." -msgstr "" - #: netbox/templates/dcim/device_edit.html:44 msgid "Parent Bay" msgstr "Baia dei genitori" @@ -12860,12 +13455,12 @@ msgid "VM Role" msgstr "Ruolo VM" #: netbox/templates/dcim/devicetype.html:18 -#: netbox/templates/dcim/moduletype.html:29 +#: netbox/templates/dcim/moduletype.html:31 msgid "Model Name" msgstr "Nome del modello" #: netbox/templates/dcim/devicetype.html:25 -#: netbox/templates/dcim/moduletype.html:33 +#: netbox/templates/dcim/moduletype.html:35 msgid "Part Number" msgstr "Numero del pezzo" @@ -12890,8 +13485,8 @@ msgid "Rear Port Position" msgstr "Posizione porta posteriore" #: netbox/templates/dcim/frontport.html:72 -#: netbox/templates/dcim/interface.html:144 -#: netbox/templates/dcim/poweroutlet.html:63 +#: netbox/templates/dcim/interface.html:201 +#: netbox/templates/dcim/poweroutlet.html:73 #: netbox/templates/dcim/powerport.html:63 #: netbox/templates/dcim/rearport.html:68 msgid "Marked as Connected" @@ -12991,77 +13586,79 @@ msgid "PoE Type" msgstr "Tipo PoE" #: netbox/templates/dcim/interface.html:81 -#: netbox/templates/virtualization/vminterface.html:63 +#: netbox/templates/virtualization/vminterface.html:55 +#: netbox/virtualization/forms/model_forms.py:395 msgid "802.1Q Mode" msgstr "Modalità 802.1Q" -#: netbox/templates/dcim/interface.html:125 -#: netbox/templates/virtualization/vminterface.html:59 -msgid "MAC Address" -msgstr "Indirizzo MAC" +#: netbox/templates/dcim/interface.html:156 +#: netbox/templates/virtualization/vminterface.html:88 +msgid "VLAN Translation" +msgstr "Traduzione VLAN" -#: netbox/templates/dcim/interface.html:151 +#: netbox/templates/dcim/interface.html:208 msgid "Wireless Link" msgstr "Collegamento wireless" -#: netbox/templates/dcim/interface.html:218 netbox/vpn/choices.py:63 -msgid "Peer" -msgstr "Pari" - -#: netbox/templates/dcim/interface.html:230 +#: netbox/templates/dcim/interface.html:287 #: netbox/templates/wireless/inc/wirelesslink_interface.html:26 msgid "Channel" msgstr "Canale" -#: netbox/templates/dcim/interface.html:239 +#: netbox/templates/dcim/interface.html:296 #: netbox/templates/wireless/inc/wirelesslink_interface.html:32 msgid "Channel Frequency" msgstr "Frequenza del canale" -#: netbox/templates/dcim/interface.html:242 -#: netbox/templates/dcim/interface.html:250 -#: netbox/templates/dcim/interface.html:261 -#: netbox/templates/dcim/interface.html:269 +#: netbox/templates/dcim/interface.html:299 +#: netbox/templates/dcim/interface.html:307 +#: netbox/templates/dcim/interface.html:318 +#: netbox/templates/dcim/interface.html:326 msgid "MHz" msgstr "MHz" -#: netbox/templates/dcim/interface.html:258 +#: netbox/templates/dcim/interface.html:315 #: netbox/templates/wireless/inc/wirelesslink_interface.html:42 msgid "Channel Width" msgstr "Larghezza del canale" -#: netbox/templates/dcim/interface.html:285 +#: netbox/templates/dcim/interface.html:342 #: netbox/templates/wireless/wirelesslan.html:14 #: netbox/templates/wireless/wirelesslink.html:21 -#: netbox/wireless/forms/bulk_edit.py:60 -#: netbox/wireless/forms/bulk_edit.py:102 -#: netbox/wireless/forms/filtersets.py:40 -#: netbox/wireless/forms/filtersets.py:80 netbox/wireless/models.py:82 -#: netbox/wireless/models.py:156 netbox/wireless/tables/wirelesslan.py:44 +#: netbox/wireless/forms/bulk_edit.py:62 +#: netbox/wireless/forms/bulk_edit.py:105 +#: netbox/wireless/forms/filtersets.py:43 +#: netbox/wireless/forms/filtersets.py:108 netbox/wireless/models.py:82 +#: netbox/wireless/models.py:153 netbox/wireless/tables/wirelesslan.py:44 msgid "SSID" msgstr "SSID" -#: netbox/templates/dcim/interface.html:305 +#: netbox/templates/dcim/interface.html:362 msgid "LAG Members" msgstr "Membri del GAL" -#: netbox/templates/dcim/interface.html:323 +#: netbox/templates/dcim/interface.html:380 msgid "No member interfaces" msgstr "Nessuna interfaccia membro" -#: netbox/templates/dcim/interface.html:343 +#: netbox/templates/dcim/interface.html:400 #: netbox/templates/ipam/fhrpgroup.html:73 #: netbox/templates/ipam/iprange/ip_addresses.html:7 #: netbox/templates/ipam/prefix/ip_addresses.html:7 -#: netbox/templates/virtualization/vminterface.html:89 +#: netbox/templates/virtualization/vminterface.html:105 msgid "Add IP Address" msgstr "Aggiungi indirizzo IP" +#: netbox/templates/dcim/interface.html:417 +#: netbox/templates/virtualization/vminterface.html:123 +msgid "Add MAC Address" +msgstr "Aggiungi indirizzo MAC" + #: netbox/templates/dcim/inventoryitem.html:24 msgid "Parent Item" msgstr "Elemento principale" -#: netbox/templates/dcim/inventoryitem.html:48 +#: netbox/templates/dcim/inventoryitem.html:52 msgid "Part ID" msgstr "ID della parte" @@ -13081,6 +13678,10 @@ msgstr "Aggiungi una posizione" msgid "Add a Device" msgstr "Aggiungi un dispositivo" +#: netbox/templates/dcim/macaddress.html:36 +msgid "Primary for interface" +msgstr "Principale per l'interfaccia" + #: netbox/templates/dcim/manufacturer.html:16 msgid "Add Device Type" msgstr "Aggiungi tipo di dispositivo" @@ -13111,7 +13712,7 @@ msgctxt "Abbreviation for amperes" msgid "A" msgstr "UN" -#: netbox/templates/dcim/poweroutlet.html:48 +#: netbox/templates/dcim/poweroutlet.html:58 msgid "Feed Leg" msgstr "Feed Leg" @@ -13545,11 +14146,19 @@ msgstr "Impossibile caricare il contenuto. Nome di visualizzazione non valido" msgid "No content found" msgstr "Nessun contenuto trovato" -#: netbox/templates/extras/dashboard/widgets/rssfeed.html:18 +#: netbox/templates/extras/dashboard/widgets/rssfeed.html:17 +msgid "" +"This RSS feed requires an external connection. Check the ISOLATED_DEPLOYMENT" +" setting." +msgstr "" +"Questo feed RSS richiede una connessione esterna. Controlla l'impostazione " +"ISOLATED_DEPLOYMENT." + +#: netbox/templates/extras/dashboard/widgets/rssfeed.html:22 msgid "There was a problem fetching the RSS feed" msgstr "Si è verificato un problema durante il recupero del feed RSS" -#: netbox/templates/extras/dashboard/widgets/rssfeed.html:21 +#: netbox/templates/extras/dashboard/widgets/rssfeed.html:25 msgid "HTTP" msgstr "HTTP" @@ -13620,6 +14229,30 @@ msgstr "Contesti di origine" msgid "New Journal Entry" msgstr "Nuova voce nel diario" +#: netbox/templates/extras/object_render_config.html:6 +msgid "Config" +msgstr "Configurazione" + +#: netbox/templates/extras/object_render_config.html:36 +msgid "Context Data" +msgstr "Dati contestuali" + +#: netbox/templates/extras/object_render_config.html:56 +msgid "Rendered Config" +msgstr "Configurazione renderizzata" + +#: netbox/templates/extras/object_render_config.html:58 +msgid "Download" +msgstr "Scarica" + +#: netbox/templates/extras/object_render_config.html:65 +msgid "Error rendering template" +msgstr "Errore nel rendering del modello" + +#: netbox/templates/extras/object_render_config.html:71 +msgid "No configuration template has been assigned." +msgstr "Non è stato assegnato alcun modello di configurazione." + #: netbox/templates/extras/report/base.html:30 msgid "Report" msgstr "Rapporto" @@ -13707,7 +14340,7 @@ msgstr "Qualsiasi" msgid "Tagged Item Types" msgstr "Tipi di articoli con tag" -#: netbox/templates/extras/tag.html:81 +#: netbox/templates/extras/tag.html:82 msgid "Tagged Objects" msgstr "Oggetti taggati" @@ -13991,6 +14624,21 @@ msgstr "Tutte le notifiche" msgid "Select" msgstr "Seleziona" +#: netbox/templates/htmx/quick_add.html:7 +msgid "Quick Add" +msgstr "Aggiunta rapida" + +#: netbox/templates/htmx/quick_add_created.html:18 +#, python-format +msgid "" +"\n" +" Created %(object_type)s %(object)s\n" +" " +msgstr "" +"\n" +" Creato %(object_type)s %(object)s\n" +" " + #: netbox/templates/inc/filter_list.html:43 #: netbox/utilities/templates/helpers/table_config_form.html:39 msgid "Reset" @@ -14062,15 +14710,11 @@ msgstr "Ordinazione chiara" msgid "Help center" msgstr "Centro assistenza" -#: netbox/templates/inc/user_menu.html:41 -msgid "Django Admin" -msgstr "" - -#: netbox/templates/inc/user_menu.html:61 +#: netbox/templates/inc/user_menu.html:56 msgid "Log Out" msgstr "Esci" -#: netbox/templates/inc/user_menu.html:68 netbox/templates/login.html:38 +#: netbox/templates/inc/user_menu.html:63 netbox/templates/login.html:38 msgid "Log In" msgstr "Effettua il login" @@ -14167,43 +14811,43 @@ msgstr "Indirizzo di partenza" msgid "Ending Address" msgstr "Indirizzo finale" -#: netbox/templates/ipam/iprange.html:33 netbox/templates/ipam/prefix.html:110 +#: netbox/templates/ipam/iprange.html:33 netbox/templates/ipam/prefix.html:106 msgid "Marked fully utilized" msgstr "Contrassegnato come completamente utilizzato" -#: netbox/templates/ipam/prefix.html:99 +#: netbox/templates/ipam/prefix.html:95 msgid "Addressing Details" msgstr "Dettagli di indirizzamento" -#: netbox/templates/ipam/prefix.html:118 +#: netbox/templates/ipam/prefix.html:114 msgid "Child IPs" msgstr "IP per bambini" -#: netbox/templates/ipam/prefix.html:126 +#: netbox/templates/ipam/prefix.html:122 msgid "Available IPs" msgstr "IP disponibili" -#: netbox/templates/ipam/prefix.html:138 +#: netbox/templates/ipam/prefix.html:134 msgid "First available IP" msgstr "Primo IP disponibile" -#: netbox/templates/ipam/prefix.html:179 +#: netbox/templates/ipam/prefix.html:175 msgid "Prefix Details" msgstr "Dettagli del prefisso" -#: netbox/templates/ipam/prefix.html:185 +#: netbox/templates/ipam/prefix.html:181 msgid "Network Address" msgstr "Indirizzo di rete" -#: netbox/templates/ipam/prefix.html:189 +#: netbox/templates/ipam/prefix.html:185 msgid "Network Mask" msgstr "Maschera di rete" -#: netbox/templates/ipam/prefix.html:193 +#: netbox/templates/ipam/prefix.html:189 msgid "Wildcard Mask" msgstr "Maschera Wildcard" -#: netbox/templates/ipam/prefix.html:197 +#: netbox/templates/ipam/prefix.html:193 msgid "Broadcast Address" msgstr "Indirizzo di trasmissione" @@ -14243,14 +14887,30 @@ msgstr "Importazione di VPN L2" msgid "Exporting L2VPNs" msgstr "Esportazione di VPN L2" -#: netbox/templates/ipam/vlan.html:88 +#: netbox/templates/ipam/vlan.html:66 +msgid "Q-in-Q Role" +msgstr "Ruolo Q-in-Q" + +#: netbox/templates/ipam/vlan.html:104 msgid "Add a Prefix" msgstr "Aggiungere un prefisso" +#: netbox/templates/ipam/vlan.html:114 +msgid "Customer VLANs" +msgstr "VLAN per i clienti" + +#: netbox/templates/ipam/vlan.html:118 +msgid "Add a VLAN" +msgstr "Aggiungi una VLAN" + #: netbox/templates/ipam/vlangroup.html:18 msgid "Add VLAN" msgstr "Aggiungi VLAN" +#: netbox/templates/ipam/vlantranslationpolicy.html:51 +msgid "Add Rule" +msgstr "Aggiungi regola" + #: netbox/templates/ipam/vrf.html:16 msgid "Route Distinguisher" msgstr "Distinguitore del percorso" @@ -14329,7 +14989,7 @@ msgstr "" #: netbox/templates/tenancy/contact.html:18 netbox/tenancy/filtersets.py:147 #: netbox/tenancy/forms/bulk_edit.py:137 -#: netbox/tenancy/forms/filtersets.py:102 netbox/tenancy/forms/forms.py:56 +#: netbox/tenancy/forms/filtersets.py:102 netbox/tenancy/forms/forms.py:57 #: netbox/tenancy/forms/model_forms.py:106 #: netbox/tenancy/forms/model_forms.py:130 #: netbox/tenancy/tables/contacts.py:98 @@ -14347,7 +15007,7 @@ msgid "Phone" msgstr "Telefono" #: netbox/templates/tenancy/contactgroup.html:18 -#: netbox/tenancy/forms/forms.py:66 netbox/tenancy/forms/model_forms.py:75 +#: netbox/tenancy/forms/forms.py:67 netbox/tenancy/forms/model_forms.py:75 msgid "Contact Group" msgstr "Gruppo di contatto" @@ -14356,7 +15016,7 @@ msgid "Add Contact Group" msgstr "Aggiungi gruppo di contatti" #: netbox/templates/tenancy/contactrole.html:15 -#: netbox/tenancy/filtersets.py:152 netbox/tenancy/forms/forms.py:61 +#: netbox/tenancy/filtersets.py:152 netbox/tenancy/forms/forms.py:62 #: netbox/tenancy/forms/model_forms.py:87 msgid "Contact Role" msgstr "Ruolo di contatto" @@ -14370,8 +15030,8 @@ msgid "Add Tenant" msgstr "Aggiungi inquilino" #: netbox/templates/tenancy/tenantgroup.html:26 -#: netbox/tenancy/forms/model_forms.py:32 netbox/tenancy/tables/columns.py:51 -#: netbox/tenancy/tables/columns.py:61 +#: netbox/tenancy/forms/model_forms.py:32 netbox/tenancy/tables/columns.py:36 +#: netbox/tenancy/tables/columns.py:46 msgid "Tenant Group" msgstr "Gruppo di inquilini" @@ -14402,21 +15062,21 @@ msgstr "Vincoli" msgid "Assigned Users" msgstr "Utenti assegnati" -#: netbox/templates/virtualization/cluster.html:52 +#: netbox/templates/virtualization/cluster.html:56 msgid "Allocated Resources" msgstr "Risorse allocate" -#: netbox/templates/virtualization/cluster.html:55 +#: netbox/templates/virtualization/cluster.html:59 #: netbox/templates/virtualization/virtualmachine.html:125 msgid "Virtual CPUs" msgstr "CPU virtuali" -#: netbox/templates/virtualization/cluster.html:59 +#: netbox/templates/virtualization/cluster.html:63 #: netbox/templates/virtualization/virtualmachine.html:129 msgid "Memory" msgstr "Memoria" -#: netbox/templates/virtualization/cluster.html:69 +#: netbox/templates/virtualization/cluster.html:73 #: netbox/templates/virtualization/virtualmachine.html:140 msgid "Disk Space" msgstr "Spazio su disco" @@ -14452,13 +15112,13 @@ msgid "Add Cluster" msgstr "Aggiungi cluster" #: netbox/templates/virtualization/clustergroup.html:19 -#: netbox/virtualization/forms/model_forms.py:50 +#: netbox/virtualization/forms/model_forms.py:53 msgid "Cluster Group" msgstr "Gruppo Cluster" #: netbox/templates/virtualization/clustertype.html:19 #: netbox/templates/virtualization/virtualmachine.html:110 -#: netbox/virtualization/forms/model_forms.py:36 +#: netbox/virtualization/forms/model_forms.py:39 msgid "Cluster Type" msgstr "Tipo di cluster" @@ -14467,8 +15127,8 @@ msgid "Virtual Disk" msgstr "Disco virtuale" #: netbox/templates/virtualization/virtualmachine.html:122 -#: netbox/virtualization/forms/bulk_edit.py:190 -#: netbox/virtualization/forms/model_forms.py:224 +#: netbox/virtualization/forms/bulk_edit.py:172 +#: netbox/virtualization/forms/model_forms.py:231 msgid "Resources" msgstr "Risorse" @@ -14476,10 +15136,6 @@ msgstr "Risorse" msgid "Add Virtual Disk" msgstr "Aggiungi disco virtuale" -#: netbox/templates/virtualization/virtualmachine/render_config.html:70 -msgid "No configuration template has been assigned for this virtual machine." -msgstr "" - #: netbox/templates/vpn/ikepolicy.html:10 #: netbox/templates/vpn/ipsecprofile.html:33 netbox/vpn/tables/crypto.py:166 msgid "IKE Policy" @@ -14502,7 +15158,7 @@ msgstr "Mostra segreto" #: netbox/templates/vpn/ipsecpolicy.html:45 #: netbox/templates/vpn/ipsecprofile.html:52 #: netbox/templates/vpn/ipsecprofile.html:77 -#: netbox/vpn/forms/model_forms.py:316 netbox/vpn/forms/model_forms.py:352 +#: netbox/vpn/forms/model_forms.py:317 netbox/vpn/forms/model_forms.py:354 #: netbox/vpn/tables/crypto.py:68 netbox/vpn/tables/crypto.py:134 msgid "Proposals" msgstr "Proposte" @@ -14548,12 +15204,12 @@ msgid "IPSec Policy" msgstr "Politica IPSec" #: netbox/templates/vpn/ipsecpolicy.html:21 netbox/vpn/forms/bulk_edit.py:210 -#: netbox/vpn/models/crypto.py:193 +#: netbox/vpn/models/crypto.py:191 msgid "PFS group" msgstr "Gruppo PFS" #: netbox/templates/vpn/ipsecprofile.html:10 -#: netbox/vpn/forms/model_forms.py:54 +#: netbox/vpn/forms/model_forms.py:55 msgid "IPSec Profile" msgstr "Profilo IPSec" @@ -14579,10 +15235,6 @@ msgstr "Attributi L2VPN" msgid "Add a Termination" msgstr "Aggiungi una terminazione" -#: netbox/templates/vpn/tunnel.html:9 -msgid "Add Termination" -msgstr "Aggiungi terminazione" - #: netbox/templates/vpn/tunnel.html:37 netbox/vpn/forms/bulk_edit.py:49 #: netbox/vpn/forms/bulk_import.py:48 netbox/vpn/forms/filtersets.py:57 msgid "Encapsulation" @@ -14590,7 +15242,7 @@ msgstr "Incapsulamento" #: netbox/templates/vpn/tunnel.html:41 netbox/vpn/forms/bulk_edit.py:55 #: netbox/vpn/forms/bulk_import.py:53 netbox/vpn/forms/filtersets.py:64 -#: netbox/vpn/models/crypto.py:250 netbox/vpn/tables/tunnels.py:51 +#: netbox/vpn/models/crypto.py:246 netbox/vpn/tables/tunnels.py:51 msgid "IPSec profile" msgstr "Profilo IPSec" @@ -14613,8 +15265,8 @@ msgid "Tunnel Termination" msgstr "Terminazione del tunnel" #: netbox/templates/vpn/tunneltermination.html:35 -#: netbox/vpn/forms/bulk_import.py:107 netbox/vpn/forms/model_forms.py:102 -#: netbox/vpn/forms/model_forms.py:138 netbox/vpn/forms/model_forms.py:247 +#: netbox/vpn/forms/bulk_import.py:107 netbox/vpn/forms/model_forms.py:103 +#: netbox/vpn/forms/model_forms.py:139 netbox/vpn/forms/model_forms.py:248 #: netbox/vpn/tables/tunnels.py:101 msgid "Outside IP" msgstr "IP esterno" @@ -14637,7 +15289,7 @@ msgctxt "Abbreviation for megahertz" msgid "MHz" msgstr "MHz" -#: netbox/templates/wireless/wirelesslan.html:57 +#: netbox/templates/wireless/wirelesslan.html:65 msgid "Attached Interfaces" msgstr "Interfacce collegate" @@ -14646,7 +15298,7 @@ msgid "Add Wireless LAN" msgstr "Aggiungi LAN wireless" #: netbox/templates/wireless/wirelesslangroup.html:26 -#: netbox/wireless/forms/model_forms.py:28 +#: netbox/wireless/forms/model_forms.py:29 msgid "Wireless LAN Group" msgstr "Gruppo LAN wireless" @@ -14658,13 +15310,6 @@ msgstr "Aggiungi gruppo LAN wireless" msgid "Link Properties" msgstr "Proprietà dei link" -#: netbox/templates/wireless/wirelesslink.html:38 -#: netbox/wireless/forms/bulk_edit.py:129 -#: netbox/wireless/forms/filtersets.py:102 -#: netbox/wireless/forms/model_forms.py:165 -msgid "Distance" -msgstr "Distanza" - #: netbox/tenancy/filtersets.py:28 msgid "Parent contact group (ID)" msgstr "Gruppo di contatto dei genitori (ID)" @@ -14735,47 +15380,47 @@ msgstr "gruppo di contatti" msgid "contact groups" msgstr "gruppi di contatti" -#: netbox/tenancy/models/contacts.py:48 +#: netbox/tenancy/models/contacts.py:42 msgid "contact role" msgstr "ruolo di contatto" -#: netbox/tenancy/models/contacts.py:49 +#: netbox/tenancy/models/contacts.py:43 msgid "contact roles" msgstr "ruoli di contatto" -#: netbox/tenancy/models/contacts.py:68 +#: netbox/tenancy/models/contacts.py:63 msgid "title" msgstr "titolo" -#: netbox/tenancy/models/contacts.py:73 +#: netbox/tenancy/models/contacts.py:68 msgid "phone" msgstr "telefono" -#: netbox/tenancy/models/contacts.py:78 +#: netbox/tenancy/models/contacts.py:73 msgid "email" msgstr "e-mail" -#: netbox/tenancy/models/contacts.py:87 +#: netbox/tenancy/models/contacts.py:82 msgid "link" msgstr "collegamento" -#: netbox/tenancy/models/contacts.py:103 +#: netbox/tenancy/models/contacts.py:98 msgid "contact" msgstr "contatto" -#: netbox/tenancy/models/contacts.py:104 +#: netbox/tenancy/models/contacts.py:99 msgid "contacts" msgstr "contatta" -#: netbox/tenancy/models/contacts.py:153 +#: netbox/tenancy/models/contacts.py:146 msgid "contact assignment" msgstr "assegnazione dei contatti" -#: netbox/tenancy/models/contacts.py:154 +#: netbox/tenancy/models/contacts.py:147 msgid "contact assignments" msgstr "assegnazioni di contatto" -#: netbox/tenancy/models/contacts.py:170 +#: netbox/tenancy/models/contacts.py:163 #, python-brace-format msgid "Contacts cannot be assigned to this object type ({type})." msgstr "" @@ -14789,19 +15434,19 @@ msgstr "gruppo di inquilini" msgid "tenant groups" msgstr "gruppi di inquilini" -#: netbox/tenancy/models/tenants.py:70 +#: netbox/tenancy/models/tenants.py:68 msgid "Tenant name must be unique per group." msgstr "Il nome del tenant deve essere univoco per gruppo." -#: netbox/tenancy/models/tenants.py:80 +#: netbox/tenancy/models/tenants.py:78 msgid "Tenant slug must be unique per group." msgstr "Lo slug del tenant deve essere unico per gruppo." -#: netbox/tenancy/models/tenants.py:88 +#: netbox/tenancy/models/tenants.py:86 msgid "tenant" msgstr "inquilino" -#: netbox/tenancy/models/tenants.py:89 +#: netbox/tenancy/models/tenants.py:87 msgid "tenants" msgstr "inquilini" @@ -15031,7 +15676,7 @@ msgstr "gettone" msgid "tokens" msgstr "gettoni" -#: netbox/users/models/users.py:57 netbox/vpn/models/crypto.py:42 +#: netbox/users/models/users.py:57 netbox/vpn/models/crypto.py:43 msgid "group" msgstr "gruppo" @@ -15077,25 +15722,25 @@ msgstr "Oggetto correlato non trovato utilizzando l'ID numerico fornito: {id}" msgid "{name} has a key defined but CHOICES is not a list" msgstr "{name} ha una chiave definita ma CHOICES non è una lista" -#: netbox/utilities/conversion.py:19 +#: netbox/utilities/conversion.py:20 msgid "Weight must be a positive number" msgstr "Il peso deve essere un numero positivo" -#: netbox/utilities/conversion.py:21 +#: netbox/utilities/conversion.py:22 #, python-brace-format msgid "Invalid value '{weight}' for weight (must be a number)" msgstr "Valore non valido '{weight}'per il peso (deve essere un numero)" -#: netbox/utilities/conversion.py:32 netbox/utilities/conversion.py:62 +#: netbox/utilities/conversion.py:33 netbox/utilities/conversion.py:63 #, python-brace-format msgid "Unknown unit {unit}. Must be one of the following: {valid_units}" msgstr "Unità sconosciuta {unit}. Deve essere uno dei seguenti: {valid_units}" -#: netbox/utilities/conversion.py:45 +#: netbox/utilities/conversion.py:46 msgid "Length must be a positive number" msgstr "La lunghezza deve essere un numero positivo" -#: netbox/utilities/conversion.py:47 +#: netbox/utilities/conversion.py:48 #, python-brace-format msgid "Invalid value '{length}' for length (must be a number)" msgstr "Valore non valido '{length}'per la lunghezza (deve essere un numero)" @@ -15113,11 +15758,11 @@ msgstr "" msgid "More than 50" msgstr "Più di 50" -#: netbox/utilities/fields.py:30 +#: netbox/utilities/fields.py:29 msgid "RGB color in hexadecimal. Example: " msgstr "Colore RGB in formato esadecimale. Esempio: " -#: netbox/utilities/fields.py:159 +#: netbox/utilities/fields.py:158 #, python-format msgid "" "%s(%r) is invalid. to_model parameter to CounterCacheField must be a string " @@ -15126,7 +15771,7 @@ msgstr "" "%s(%r) non è valido. Il parametro to_model di CounterCacheField deve essere " "una stringa nel formato 'app.model'" -#: netbox/utilities/fields.py:169 +#: netbox/utilities/fields.py:168 #, python-format msgid "" "%s(%r) is invalid. to_field parameter to CounterCacheField must be a string " @@ -15358,14 +16003,14 @@ msgstr "" msgid "Required column header \"{header}\" not found." msgstr "Intestazione di colonna obbligatoria»{header}\"non trovato." -#: netbox/utilities/forms/widgets/apiselect.py:124 +#: netbox/utilities/forms/widgets/apiselect.py:133 #, python-brace-format msgid "Missing required value for dynamic query param: '{dynamic_params}'" msgstr "" "Valore obbligatorio mancante per il parametro di interrogazione dinamica: " "'{dynamic_params}»" -#: netbox/utilities/forms/widgets/apiselect.py:141 +#: netbox/utilities/forms/widgets/apiselect.py:150 #, python-brace-format msgid "Missing required value for static query param: '{static_params}'" msgstr "" @@ -15493,10 +16138,14 @@ msgstr "Cerca..." msgid "Search NetBox" msgstr "Cerca NetBox" -#: netbox/utilities/templates/widgets/apiselect.html:7 +#: netbox/utilities/templates/widgets/apiselect.html:8 msgid "Open selector" msgstr "Apri selettore" +#: netbox/utilities/templates/widgets/apiselect.html:22 +msgid "Quick add" +msgstr "Aggiunta rapida" + #: netbox/utilities/templates/widgets/markdown_input.html:6 msgid "Write" msgstr "Scrivere" @@ -15530,115 +16179,121 @@ msgstr "" "{class_name} non ha un set di query definito. ObjectPermissionRequiredMixin " "può essere utilizzato solo su viste che definiscono un set di query di base" -#: netbox/virtualization/filtersets.py:79 +#: netbox/virtualization/choices.py:50 +msgid "Paused" +msgstr "In pausa" + +#: netbox/virtualization/filtersets.py:45 msgid "Parent group (ID)" msgstr "Gruppo padre (ID)" -#: netbox/virtualization/filtersets.py:85 +#: netbox/virtualization/filtersets.py:51 msgid "Parent group (slug)" msgstr "Gruppo principale (slug)" -#: netbox/virtualization/filtersets.py:89 -#: netbox/virtualization/filtersets.py:141 +#: netbox/virtualization/filtersets.py:55 +#: netbox/virtualization/filtersets.py:107 msgid "Cluster type (ID)" msgstr "Tipo di cluster (ID)" -#: netbox/virtualization/filtersets.py:151 -#: netbox/virtualization/filtersets.py:271 +#: netbox/virtualization/filtersets.py:117 +#: netbox/virtualization/filtersets.py:237 msgid "Cluster (ID)" msgstr "Cluster (ID)" -#: netbox/virtualization/forms/bulk_edit.py:166 -#: netbox/virtualization/models/virtualmachines.py:115 +#: netbox/virtualization/forms/bulk_edit.py:148 +#: netbox/virtualization/models/virtualmachines.py:110 msgid "vCPUs" msgstr "vCPU" -#: netbox/virtualization/forms/bulk_edit.py:170 +#: netbox/virtualization/forms/bulk_edit.py:152 msgid "Memory (MB)" msgstr "Memoria (MB)" -#: netbox/virtualization/forms/bulk_edit.py:174 +#: netbox/virtualization/forms/bulk_edit.py:156 msgid "Disk (MB)" msgstr "Disco (MB)" -#: netbox/virtualization/forms/bulk_edit.py:334 -#: netbox/virtualization/forms/filtersets.py:251 +#: netbox/virtualization/forms/bulk_edit.py:324 +#: netbox/virtualization/forms/filtersets.py:256 msgid "Size (MB)" msgstr "Dimensioni (MB)" -#: netbox/virtualization/forms/bulk_import.py:44 +#: netbox/virtualization/forms/bulk_import.py:45 msgid "Type of cluster" msgstr "Tipo di cluster" -#: netbox/virtualization/forms/bulk_import.py:51 +#: netbox/virtualization/forms/bulk_import.py:52 msgid "Assigned cluster group" msgstr "Gruppo di cluster assegnato" -#: netbox/virtualization/forms/bulk_import.py:96 +#: netbox/virtualization/forms/bulk_import.py:102 msgid "Assigned cluster" msgstr "Cluster assegnato" -#: netbox/virtualization/forms/bulk_import.py:103 +#: netbox/virtualization/forms/bulk_import.py:109 msgid "Assigned device within cluster" msgstr "Dispositivo assegnato all'interno del cluster" -#: netbox/virtualization/forms/filtersets.py:183 +#: netbox/virtualization/forms/filtersets.py:188 msgid "Serial number" msgstr "Numero di serie" -#: netbox/virtualization/forms/model_forms.py:153 +#: netbox/virtualization/forms/model_forms.py:158 #, python-brace-format msgid "" -"{device} belongs to a different site ({device_site}) than the cluster " -"({cluster_site})" +"{device} belongs to a different {scope_field} ({device_scope}) than the " +"cluster ({cluster_scope})" msgstr "" +"{device} appartiene a un altro {scope_field} ({device_scope}) rispetto al " +"cluster ({cluster_scope})" -#: netbox/virtualization/forms/model_forms.py:192 +#: netbox/virtualization/forms/model_forms.py:199 msgid "Optionally pin this VM to a specific host device within the cluster" msgstr "" "Facoltativamente, aggiungi questa VM a un dispositivo host specifico " "all'interno del cluster" -#: netbox/virtualization/forms/model_forms.py:221 +#: netbox/virtualization/forms/model_forms.py:228 msgid "Site/Cluster" msgstr "Sito/cluster" -#: netbox/virtualization/forms/model_forms.py:244 +#: netbox/virtualization/forms/model_forms.py:251 msgid "Disk size is managed via the attachment of virtual disks." msgstr "" "La dimensione del disco viene gestita tramite il collegamento di dischi " "virtuali." -#: netbox/virtualization/forms/model_forms.py:372 -#: netbox/virtualization/tables/virtualmachines.py:111 +#: netbox/virtualization/forms/model_forms.py:405 +#: netbox/virtualization/tables/virtualmachines.py:81 msgid "Disk" msgstr "Disco" -#: netbox/virtualization/models/clusters.py:25 +#: netbox/virtualization/models/clusters.py:26 msgid "cluster type" msgstr "tipo di cluster" -#: netbox/virtualization/models/clusters.py:26 +#: netbox/virtualization/models/clusters.py:27 msgid "cluster types" msgstr "tipi di cluster" -#: netbox/virtualization/models/clusters.py:45 +#: netbox/virtualization/models/clusters.py:43 msgid "cluster group" msgstr "gruppo di cluster" -#: netbox/virtualization/models/clusters.py:46 +#: netbox/virtualization/models/clusters.py:44 msgid "cluster groups" msgstr "gruppi di cluster" -#: netbox/virtualization/models/clusters.py:121 +#: netbox/virtualization/models/clusters.py:110 msgid "cluster" msgstr "grappolo" -#: netbox/virtualization/models/clusters.py:122 +#: netbox/virtualization/models/clusters.py:111 msgid "clusters" msgstr "grappoli" -#: netbox/virtualization/models/clusters.py:141 +#: netbox/virtualization/models/clusters.py:137 #, python-brace-format msgid "" "{count} devices are assigned as hosts for this cluster but are not in site " @@ -15647,44 +16302,53 @@ msgstr "" "{count} i dispositivi vengono assegnati come host per questo cluster ma non " "si trovano nel sito {site}" -#: netbox/virtualization/models/virtualmachines.py:123 +#: netbox/virtualization/models/clusters.py:144 +#, python-brace-format +msgid "" +"{count} devices are assigned as hosts for this cluster but are not in " +"location {location}" +msgstr "" +"{count} i dispositivi vengono assegnati come host per questo cluster ma non " +"sono ubicati {location}" + +#: netbox/virtualization/models/virtualmachines.py:118 msgid "memory (MB)" msgstr "memoria (MB)" -#: netbox/virtualization/models/virtualmachines.py:128 +#: netbox/virtualization/models/virtualmachines.py:123 msgid "disk (MB)" msgstr "disco (MB)" -#: netbox/virtualization/models/virtualmachines.py:166 +#: netbox/virtualization/models/virtualmachines.py:161 msgid "Virtual machine name must be unique per cluster." msgstr "Il nome della macchina virtuale deve essere univoco per cluster." -#: netbox/virtualization/models/virtualmachines.py:169 +#: netbox/virtualization/models/virtualmachines.py:164 msgid "virtual machine" msgstr "macchina virtuale" -#: netbox/virtualization/models/virtualmachines.py:170 +#: netbox/virtualization/models/virtualmachines.py:165 msgid "virtual machines" msgstr "macchine virtuali" -#: netbox/virtualization/models/virtualmachines.py:184 +#: netbox/virtualization/models/virtualmachines.py:176 msgid "A virtual machine must be assigned to a site and/or cluster." msgstr "" "Una macchina virtuale deve essere assegnata a un sito e/o a un cluster." -#: netbox/virtualization/models/virtualmachines.py:191 +#: netbox/virtualization/models/virtualmachines.py:183 #, python-brace-format msgid "" "The selected cluster ({cluster}) is not assigned to this site ({site})." msgstr "" "Il cluster selezionato ({cluster}) non è assegnato a questo sito ({site})." -#: netbox/virtualization/models/virtualmachines.py:198 +#: netbox/virtualization/models/virtualmachines.py:190 msgid "Must specify a cluster when assigning a host device." msgstr "" "È necessario specificare un cluster quando si assegna un dispositivo host." -#: netbox/virtualization/models/virtualmachines.py:203 +#: netbox/virtualization/models/virtualmachines.py:195 #, python-brace-format msgid "" "The selected device ({device}) is not assigned to this cluster ({cluster})." @@ -15692,7 +16356,7 @@ msgstr "" "Il dispositivo selezionato ({device}) non è assegnato a questo cluster " "({cluster})." -#: netbox/virtualization/models/virtualmachines.py:215 +#: netbox/virtualization/models/virtualmachines.py:207 #, python-brace-format msgid "" "The specified disk size ({size}) must match the aggregate size of assigned " @@ -15701,18 +16365,18 @@ msgstr "" "La dimensione del disco specificata ({size}) deve corrispondere alla " "dimensione aggregata dei dischi virtuali assegnati ({total_size})." -#: netbox/virtualization/models/virtualmachines.py:229 +#: netbox/virtualization/models/virtualmachines.py:221 #, python-brace-format msgid "Must be an IPv{family} address. ({ip} is an IPv{version} address.)" msgstr "" "Deve essere un IPV{family} indirizzo. ({ip} è un IPv{version} indirizzo.)" -#: netbox/virtualization/models/virtualmachines.py:238 +#: netbox/virtualization/models/virtualmachines.py:230 #, python-brace-format msgid "The specified IP address ({ip}) is not assigned to this VM." msgstr "L'indirizzo IP specificato ({ip}) non è assegnato a questa VM." -#: netbox/virtualization/models/virtualmachines.py:396 +#: netbox/virtualization/models/virtualmachines.py:376 #, python-brace-format msgid "" "The selected parent interface ({parent}) belongs to a different virtual " @@ -15721,7 +16385,7 @@ msgstr "" "L'interfaccia principale selezionata ({parent}) appartiene a una macchina " "virtuale diversa ({virtual_machine})." -#: netbox/virtualization/models/virtualmachines.py:411 +#: netbox/virtualization/models/virtualmachines.py:391 #, python-brace-format msgid "" "The selected bridge interface ({bridge}) belongs to a different virtual " @@ -15730,7 +16394,7 @@ msgstr "" "L'interfaccia bridge selezionata ({bridge}) appartiene a una macchina " "virtuale diversa ({virtual_machine})." -#: netbox/virtualization/models/virtualmachines.py:422 +#: netbox/virtualization/models/virtualmachines.py:402 #, python-brace-format msgid "" "The untagged VLAN ({untagged_vlan}) must belong to the same site as the " @@ -15739,24 +16403,24 @@ msgstr "" "La VLAN senza tag ({untagged_vlan}) deve appartenere allo stesso sito della " "macchina virtuale principale dell'interfaccia o deve essere globale." -#: netbox/virtualization/models/virtualmachines.py:434 +#: netbox/virtualization/models/virtualmachines.py:414 msgid "size (MB)" msgstr "dimensione (MB)" -#: netbox/virtualization/models/virtualmachines.py:438 +#: netbox/virtualization/models/virtualmachines.py:418 msgid "virtual disk" msgstr "disco virtuale" -#: netbox/virtualization/models/virtualmachines.py:439 +#: netbox/virtualization/models/virtualmachines.py:419 msgid "virtual disks" msgstr "dischi virtuali" -#: netbox/virtualization/views.py:273 +#: netbox/virtualization/views.py:289 #, python-brace-format msgid "Added {count} devices to cluster {cluster}" msgstr "Aggiunto {count} dispositivi da raggruppare {cluster}" -#: netbox/virtualization/views.py:308 +#: netbox/virtualization/views.py:324 #, python-brace-format msgid "Removed {count} devices from cluster {cluster}" msgstr "Rimosso {count} dispositivi dal cluster {cluster}" @@ -15793,14 +16457,6 @@ msgstr "L2TP" msgid "PPTP" msgstr "PPTP" -#: netbox/vpn/choices.py:64 -msgid "Hub" -msgstr "Hub" - -#: netbox/vpn/choices.py:65 -msgid "Spoke" -msgstr "Ha parlato" - #: netbox/vpn/choices.py:88 msgid "Aggressive" msgstr "Agressivo" @@ -15918,26 +16574,26 @@ msgstr "VLAN (nome)" msgid "Tunnel group" msgstr "Gruppo Tunnel" -#: netbox/vpn/forms/bulk_edit.py:117 netbox/vpn/models/crypto.py:47 +#: netbox/vpn/forms/bulk_edit.py:117 netbox/vpn/models/crypto.py:48 msgid "SA lifetime" msgstr "Una vita" -#: netbox/vpn/forms/bulk_edit.py:151 netbox/wireless/forms/bulk_edit.py:79 -#: netbox/wireless/forms/bulk_edit.py:126 -#: netbox/wireless/forms/filtersets.py:64 -#: netbox/wireless/forms/filtersets.py:98 +#: netbox/vpn/forms/bulk_edit.py:151 netbox/wireless/forms/bulk_edit.py:81 +#: netbox/wireless/forms/bulk_edit.py:129 +#: netbox/wireless/forms/filtersets.py:67 +#: netbox/wireless/forms/filtersets.py:126 msgid "Pre-shared key" msgstr "Chiave precondivisa" #: netbox/vpn/forms/bulk_edit.py:237 netbox/vpn/forms/bulk_import.py:239 -#: netbox/vpn/forms/filtersets.py:199 netbox/vpn/forms/model_forms.py:370 +#: netbox/vpn/forms/filtersets.py:199 netbox/vpn/forms/model_forms.py:373 #: netbox/vpn/models/crypto.py:104 msgid "IKE policy" msgstr "Politica IKE" #: netbox/vpn/forms/bulk_edit.py:242 netbox/vpn/forms/bulk_import.py:244 -#: netbox/vpn/forms/filtersets.py:204 netbox/vpn/forms/model_forms.py:374 -#: netbox/vpn/models/crypto.py:209 +#: netbox/vpn/forms/filtersets.py:204 netbox/vpn/forms/model_forms.py:377 +#: netbox/vpn/models/crypto.py:207 msgid "IPSec policy" msgstr "Politica IPSec" @@ -15945,10 +16601,6 @@ msgstr "Politica IPSec" msgid "Tunnel encapsulation" msgstr "Incapsulamento del tunnel" -#: netbox/vpn/forms/bulk_import.py:83 -msgid "Operational role" -msgstr "Ruolo operativo" - #: netbox/vpn/forms/bulk_import.py:90 msgid "Parent device of assigned interface" msgstr "Dispositivo principale dell'interfaccia assegnata" @@ -15965,7 +16617,7 @@ msgstr "Interfaccia dispositivo o macchina virtuale" msgid "IKE proposal(s)" msgstr "IKE proposal(s)" -#: netbox/vpn/forms/bulk_import.py:215 netbox/vpn/models/crypto.py:197 +#: netbox/vpn/forms/bulk_import.py:215 netbox/vpn/models/crypto.py:195 msgid "Diffie-Hellman group for Perfect Forward Secrecy" msgstr "Gruppo Diffie-Hellman per Perfect Forward Secrecy" @@ -16012,7 +16664,7 @@ msgid "IKE version" msgstr "Versione IKE" #: netbox/vpn/forms/filtersets.py:142 netbox/vpn/forms/filtersets.py:175 -#: netbox/vpn/forms/model_forms.py:298 netbox/vpn/forms/model_forms.py:334 +#: netbox/vpn/forms/model_forms.py:299 netbox/vpn/forms/model_forms.py:336 msgid "Proposal" msgstr "Proposta" @@ -16020,32 +16672,28 @@ msgstr "Proposta" msgid "Assigned Object Type" msgstr "Tipo di oggetto assegnato" -#: netbox/vpn/forms/model_forms.py:95 netbox/vpn/forms/model_forms.py:130 -#: netbox/vpn/forms/model_forms.py:240 netbox/vpn/tables/tunnels.py:91 +#: netbox/vpn/forms/model_forms.py:96 netbox/vpn/forms/model_forms.py:131 +#: netbox/vpn/forms/model_forms.py:241 netbox/vpn/tables/tunnels.py:91 msgid "Tunnel interface" msgstr "Interfaccia tunnel" -#: netbox/vpn/forms/model_forms.py:150 +#: netbox/vpn/forms/model_forms.py:151 msgid "First Termination" msgstr "Prima cessazione" -#: netbox/vpn/forms/model_forms.py:153 +#: netbox/vpn/forms/model_forms.py:154 msgid "Second Termination" msgstr "Seconda cessazione" -#: netbox/vpn/forms/model_forms.py:197 +#: netbox/vpn/forms/model_forms.py:198 msgid "This parameter is required when defining a termination." msgstr "Questo parametro è obbligatorio per definire una terminazione." -#: netbox/vpn/forms/model_forms.py:320 netbox/vpn/forms/model_forms.py:356 -msgid "Policy" -msgstr "Politica" - -#: netbox/vpn/forms/model_forms.py:487 +#: netbox/vpn/forms/model_forms.py:490 msgid "A termination must specify an interface or VLAN." msgstr "Una terminazione deve specificare un'interfaccia o una VLAN." -#: netbox/vpn/forms/model_forms.py:489 +#: netbox/vpn/forms/model_forms.py:492 msgid "" "A termination can only have one terminating object (an interface or VLAN)." msgstr "" @@ -16060,31 +16708,31 @@ msgstr "algoritmo di crittografia" msgid "authentication algorithm" msgstr "algoritmo di autenticazione" -#: netbox/vpn/models/crypto.py:44 +#: netbox/vpn/models/crypto.py:45 msgid "Diffie-Hellman group ID" msgstr "ID del gruppo Diffie-Hellman" -#: netbox/vpn/models/crypto.py:50 +#: netbox/vpn/models/crypto.py:51 msgid "Security association lifetime (in seconds)" msgstr "Durata dell'associazione di sicurezza (in secondi)" -#: netbox/vpn/models/crypto.py:59 +#: netbox/vpn/models/crypto.py:60 msgid "IKE proposal" msgstr "Proposta IKE" -#: netbox/vpn/models/crypto.py:60 +#: netbox/vpn/models/crypto.py:61 msgid "IKE proposals" msgstr "Proposte IKE" -#: netbox/vpn/models/crypto.py:76 +#: netbox/vpn/models/crypto.py:75 msgid "version" msgstr "versione" -#: netbox/vpn/models/crypto.py:88 netbox/vpn/models/crypto.py:190 +#: netbox/vpn/models/crypto.py:88 netbox/vpn/models/crypto.py:188 msgid "proposals" msgstr "proposte" -#: netbox/vpn/models/crypto.py:91 netbox/wireless/models.py:39 +#: netbox/vpn/models/crypto.py:91 netbox/wireless/models.py:41 msgid "pre-shared key" msgstr "chiave precondivisa" @@ -16092,19 +16740,19 @@ msgstr "chiave precondivisa" msgid "IKE policies" msgstr "Politiche IKE" -#: netbox/vpn/models/crypto.py:118 +#: netbox/vpn/models/crypto.py:115 msgid "Mode is required for selected IKE version" msgstr "La modalità è richiesta per la versione IKE selezionata" -#: netbox/vpn/models/crypto.py:122 +#: netbox/vpn/models/crypto.py:119 msgid "Mode cannot be used for selected IKE version" msgstr "La modalità non può essere utilizzata per la versione IKE selezionata" -#: netbox/vpn/models/crypto.py:136 +#: netbox/vpn/models/crypto.py:134 msgid "encryption" msgstr "cifratura" -#: netbox/vpn/models/crypto.py:141 +#: netbox/vpn/models/crypto.py:140 msgid "authentication" msgstr "autenticazione" @@ -16124,32 +16772,32 @@ msgstr "Proposta IPSec" msgid "IPSec proposals" msgstr "Proposte IPSec" -#: netbox/vpn/models/crypto.py:178 +#: netbox/vpn/models/crypto.py:175 msgid "Encryption and/or authentication algorithm must be defined" msgstr "È necessario definire un algoritmo di crittografia e/o autenticazione" -#: netbox/vpn/models/crypto.py:210 +#: netbox/vpn/models/crypto.py:208 msgid "IPSec policies" msgstr "Criteri IPSec" -#: netbox/vpn/models/crypto.py:251 +#: netbox/vpn/models/crypto.py:247 msgid "IPSec profiles" msgstr "Profili IPSec" -#: netbox/vpn/models/l2vpn.py:116 +#: netbox/vpn/models/l2vpn.py:113 msgid "L2VPN termination" msgstr "Terminazione L2VPN" -#: netbox/vpn/models/l2vpn.py:117 +#: netbox/vpn/models/l2vpn.py:114 msgid "L2VPN terminations" msgstr "Terminazioni L2VPN" -#: netbox/vpn/models/l2vpn.py:135 +#: netbox/vpn/models/l2vpn.py:129 #, python-brace-format msgid "L2VPN Termination already assigned ({assigned_object})" msgstr "Terminazione L2VPN già assegnata ({assigned_object})" -#: netbox/vpn/models/l2vpn.py:147 +#: netbox/vpn/models/l2vpn.py:141 #, python-brace-format msgid "" "{l2vpn_type} L2VPNs cannot have more than two terminations; found " @@ -16166,35 +16814,35 @@ msgstr "gruppo tunnel" msgid "tunnel groups" msgstr "gruppi di tunnel" -#: netbox/vpn/models/tunnels.py:53 +#: netbox/vpn/models/tunnels.py:51 msgid "encapsulation" msgstr "incapsulamento" -#: netbox/vpn/models/tunnels.py:72 +#: netbox/vpn/models/tunnels.py:70 msgid "tunnel ID" msgstr "ID del tunnel" -#: netbox/vpn/models/tunnels.py:94 +#: netbox/vpn/models/tunnels.py:92 msgid "tunnel" msgstr "tunnel" -#: netbox/vpn/models/tunnels.py:95 +#: netbox/vpn/models/tunnels.py:93 msgid "tunnels" msgstr "tunnels" -#: netbox/vpn/models/tunnels.py:153 +#: netbox/vpn/models/tunnels.py:148 msgid "An object may be terminated to only one tunnel at a time." msgstr "Un oggetto può terminare in un solo tunnel alla volta." -#: netbox/vpn/models/tunnels.py:156 +#: netbox/vpn/models/tunnels.py:151 msgid "tunnel termination" msgstr "terminazione del tunnel" -#: netbox/vpn/models/tunnels.py:157 +#: netbox/vpn/models/tunnels.py:152 msgid "tunnel terminations" msgstr "terminazioni dei tunnel" -#: netbox/vpn/models/tunnels.py:174 +#: netbox/vpn/models/tunnels.py:169 #, python-brace-format msgid "{name} is already attached to a tunnel ({tunnel})." msgstr "{name} è già collegato a un tunnel ({tunnel})." @@ -16255,51 +16903,44 @@ msgstr "WPA personal (PSK)" msgid "WPA Enterprise" msgstr "WPA Enterprise" -#: netbox/wireless/forms/bulk_edit.py:73 -#: netbox/wireless/forms/bulk_edit.py:120 -#: netbox/wireless/forms/bulk_import.py:68 -#: netbox/wireless/forms/bulk_import.py:71 -#: netbox/wireless/forms/bulk_import.py:110 -#: netbox/wireless/forms/bulk_import.py:113 -#: netbox/wireless/forms/filtersets.py:59 -#: netbox/wireless/forms/filtersets.py:93 +#: netbox/wireless/forms/bulk_edit.py:75 +#: netbox/wireless/forms/bulk_edit.py:123 +#: netbox/wireless/forms/bulk_import.py:70 +#: netbox/wireless/forms/bulk_import.py:73 +#: netbox/wireless/forms/bulk_import.py:115 +#: netbox/wireless/forms/bulk_import.py:118 +#: netbox/wireless/forms/filtersets.py:62 +#: netbox/wireless/forms/filtersets.py:121 msgid "Authentication cipher" msgstr "Cifrario di autenticazione" -#: netbox/wireless/forms/bulk_edit.py:134 -#: netbox/wireless/forms/bulk_import.py:116 -#: netbox/wireless/forms/bulk_import.py:119 -#: netbox/wireless/forms/filtersets.py:106 -msgid "Distance unit" -msgstr "Unità di distanza" - -#: netbox/wireless/forms/bulk_import.py:52 +#: netbox/wireless/forms/bulk_import.py:54 msgid "Bridged VLAN" msgstr "VLAN con bridge" -#: netbox/wireless/forms/bulk_import.py:89 -#: netbox/wireless/tables/wirelesslink.py:28 +#: netbox/wireless/forms/bulk_import.py:94 +#: netbox/wireless/tables/wirelesslink.py:27 msgid "Interface A" msgstr "Interfaccia A" -#: netbox/wireless/forms/bulk_import.py:93 -#: netbox/wireless/tables/wirelesslink.py:37 +#: netbox/wireless/forms/bulk_import.py:98 +#: netbox/wireless/tables/wirelesslink.py:36 msgid "Interface B" msgstr "Interfaccia B" -#: netbox/wireless/forms/model_forms.py:161 +#: netbox/wireless/forms/model_forms.py:164 msgid "Side B" msgstr "Lato B" -#: netbox/wireless/models.py:31 +#: netbox/wireless/models.py:32 msgid "authentication cipher" msgstr "cifrario di autenticazione" -#: netbox/wireless/models.py:69 +#: netbox/wireless/models.py:72 msgid "wireless LAN group" msgstr "gruppo LAN wireless" -#: netbox/wireless/models.py:70 +#: netbox/wireless/models.py:73 msgid "wireless LAN groups" msgstr "gruppi LAN wireless" @@ -16307,35 +16948,23 @@ msgstr "gruppi LAN wireless" msgid "wireless LAN" msgstr "LAN senza fili" -#: netbox/wireless/models.py:144 +#: netbox/wireless/models.py:141 msgid "interface A" msgstr "interfaccia A" -#: netbox/wireless/models.py:151 +#: netbox/wireless/models.py:148 msgid "interface B" msgstr "interfaccia B" -#: netbox/wireless/models.py:165 -msgid "distance" -msgstr "distanza" - -#: netbox/wireless/models.py:172 -msgid "distance unit" -msgstr "unità di distanza" - -#: netbox/wireless/models.py:219 +#: netbox/wireless/models.py:196 msgid "wireless link" msgstr "collegamento wireless" -#: netbox/wireless/models.py:220 +#: netbox/wireless/models.py:197 msgid "wireless links" msgstr "collegamenti wireless" -#: netbox/wireless/models.py:236 -msgid "Must specify a unit when setting a wireless distance" -msgstr "" - -#: netbox/wireless/models.py:242 netbox/wireless/models.py:248 +#: netbox/wireless/models.py:212 netbox/wireless/models.py:218 #, python-brace-format msgid "{type} is not a wireless interface." msgstr "{type} non è un'interfaccia wireless." diff --git a/netbox/translations/ja/LC_MESSAGES/django.mo b/netbox/translations/ja/LC_MESSAGES/django.mo index cd9706cf02b377874f98cc96ad3c8ac93cd12abc..ecc0a238098183fa0693990140faa41c7cfc292b 100644 GIT binary patch delta 75603 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 diff --git a/netbox/translations/ja/LC_MESSAGES/django.po b/netbox/translations/ja/LC_MESSAGES/django.po index 6c20b3128..e67f13553 100644 --- a/netbox/translations/ja/LC_MESSAGES/django.po +++ b/netbox/translations/ja/LC_MESSAGES/django.po @@ -5,17 +5,17 @@ # # Translators: # Tatsuya Ueda , 2024 -# Jeremy Stretch, 2024 # teapot, 2025 +# Jeremy Stretch, 2025 # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-01-04 05:02+0000\n" +"POT-Creation-Date: 2025-03-06 05:01+0000\n" "PO-Revision-Date: 2023-10-30 17:48+0000\n" -"Last-Translator: teapot, 2025\n" +"Last-Translator: Jeremy Stretch, 2025\n" "Language-Team: Japanese (https://app.transifex.com/netbox-community/teams/178115/ja/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -33,7 +33,7 @@ msgstr "Key" msgid "Write Enabled" msgstr "書き込み可能" -#: netbox/account/tables.py:35 netbox/core/choices.py:86 +#: netbox/account/tables.py:35 netbox/core/choices.py:102 #: netbox/core/tables/jobs.py:29 netbox/core/tables/tasks.py:79 #: netbox/extras/tables/tables.py:335 netbox/extras/tables/tables.py:566 #: netbox/templates/account/token.html:43 @@ -45,6 +45,7 @@ msgstr "書き込み可能" #: netbox/templates/extras/htmx/script_result.html:12 #: netbox/templates/extras/journalentry.html:22 #: netbox/templates/generic/object.html:58 +#: netbox/templates/htmx/quick_add_created.html:7 #: netbox/templates/users/token.html:35 msgid "Created" msgstr "作成" @@ -88,34 +89,35 @@ msgstr "パスワードは正常に変更されました。" #: netbox/circuits/choices.py:21 netbox/dcim/choices.py:20 #: netbox/dcim/choices.py:102 netbox/dcim/choices.py:185 -#: netbox/dcim/choices.py:237 netbox/dcim/choices.py:1532 -#: netbox/dcim/choices.py:1608 netbox/dcim/choices.py:1658 -#: netbox/virtualization/choices.py:20 netbox/virtualization/choices.py:45 -#: netbox/vpn/choices.py:18 +#: netbox/dcim/choices.py:237 netbox/dcim/choices.py:1534 +#: netbox/dcim/choices.py:1592 netbox/dcim/choices.py:1642 +#: netbox/dcim/choices.py:1664 netbox/virtualization/choices.py:20 +#: netbox/virtualization/choices.py:46 netbox/vpn/choices.py:18 msgid "Planned" msgstr "計画中" -#: netbox/circuits/choices.py:22 netbox/netbox/navigation/menu.py:305 +#: netbox/circuits/choices.py:22 netbox/netbox/navigation/menu.py:326 msgid "Provisioning" msgstr "プロビジョニング" #: netbox/circuits/choices.py:23 netbox/core/tables/tasks.py:22 #: netbox/dcim/choices.py:22 netbox/dcim/choices.py:103 #: netbox/dcim/choices.py:184 netbox/dcim/choices.py:236 -#: netbox/dcim/choices.py:1607 netbox/dcim/choices.py:1657 -#: netbox/extras/tables/tables.py:495 netbox/ipam/choices.py:31 -#: netbox/ipam/choices.py:49 netbox/ipam/choices.py:69 -#: netbox/ipam/choices.py:154 netbox/templates/extras/configcontext.html:25 +#: netbox/dcim/choices.py:1591 netbox/dcim/choices.py:1641 +#: netbox/dcim/choices.py:1663 netbox/extras/tables/tables.py:495 +#: netbox/ipam/choices.py:31 netbox/ipam/choices.py:49 +#: netbox/ipam/choices.py:69 netbox/ipam/choices.py:154 +#: netbox/templates/extras/configcontext.html:25 #: netbox/templates/users/user.html:37 netbox/users/forms/bulk_edit.py:38 -#: netbox/virtualization/choices.py:22 netbox/virtualization/choices.py:44 +#: netbox/virtualization/choices.py:22 netbox/virtualization/choices.py:45 #: netbox/vpn/choices.py:19 netbox/wireless/choices.py:25 msgid "Active" msgstr "アクティブ" #: netbox/circuits/choices.py:24 netbox/dcim/choices.py:183 -#: netbox/dcim/choices.py:235 netbox/dcim/choices.py:1606 -#: netbox/dcim/choices.py:1659 netbox/virtualization/choices.py:24 -#: netbox/virtualization/choices.py:43 +#: netbox/dcim/choices.py:235 netbox/dcim/choices.py:1590 +#: netbox/dcim/choices.py:1643 netbox/dcim/choices.py:1662 +#: netbox/virtualization/choices.py:24 netbox/virtualization/choices.py:44 msgid "Offline" msgstr "オフライン" @@ -127,7 +129,9 @@ msgstr "デプロビジョニング" msgid "Decommissioned" msgstr "廃止" -#: netbox/circuits/choices.py:90 netbox/dcim/choices.py:1619 +#: netbox/circuits/choices.py:90 netbox/dcim/choices.py:1603 +#: netbox/templates/dcim/interface.html:135 +#: netbox/templates/virtualization/vminterface.html:77 #: netbox/tenancy/choices.py:17 msgid "Primary" msgstr "プライマリ" @@ -145,195 +149,207 @@ msgstr "三次" msgid "Inactive" msgstr "非アクティブ" -#: netbox/circuits/filtersets.py:31 netbox/circuits/filtersets.py:198 -#: netbox/dcim/filtersets.py:98 netbox/dcim/filtersets.py:152 -#: netbox/dcim/filtersets.py:212 netbox/dcim/filtersets.py:333 -#: netbox/dcim/filtersets.py:464 netbox/dcim/filtersets.py:1021 -#: netbox/dcim/filtersets.py:1368 netbox/dcim/filtersets.py:1903 -#: netbox/dcim/filtersets.py:2146 netbox/dcim/filtersets.py:2204 -#: netbox/ipam/filtersets.py:341 netbox/ipam/filtersets.py:961 -#: netbox/virtualization/filtersets.py:45 -#: netbox/virtualization/filtersets.py:173 netbox/vpn/filtersets.py:358 +#: netbox/circuits/choices.py:107 netbox/templates/dcim/interface.html:275 +#: netbox/vpn/choices.py:63 +msgid "Peer" +msgstr "ピア" + +#: netbox/circuits/choices.py:108 netbox/vpn/choices.py:64 +msgid "Hub" +msgstr "ハブ" + +#: netbox/circuits/choices.py:109 netbox/vpn/choices.py:65 +msgid "Spoke" +msgstr "スポーク" + +#: netbox/circuits/filtersets.py:37 netbox/circuits/filtersets.py:204 +#: netbox/circuits/filtersets.py:284 netbox/dcim/base_filtersets.py:22 +#: netbox/dcim/filtersets.py:99 netbox/dcim/filtersets.py:153 +#: netbox/dcim/filtersets.py:213 netbox/dcim/filtersets.py:334 +#: netbox/dcim/filtersets.py:465 netbox/dcim/filtersets.py:1022 +#: netbox/dcim/filtersets.py:1370 netbox/dcim/filtersets.py:2027 +#: netbox/dcim/filtersets.py:2270 netbox/dcim/filtersets.py:2328 +#: netbox/ipam/filtersets.py:928 netbox/virtualization/filtersets.py:139 +#: netbox/vpn/filtersets.py:358 msgid "Region (ID)" msgstr "リージョン (ID)" -#: netbox/circuits/filtersets.py:38 netbox/circuits/filtersets.py:205 -#: netbox/dcim/filtersets.py:105 netbox/dcim/filtersets.py:158 -#: netbox/dcim/filtersets.py:219 netbox/dcim/filtersets.py:340 -#: netbox/dcim/filtersets.py:471 netbox/dcim/filtersets.py:1028 -#: netbox/dcim/filtersets.py:1375 netbox/dcim/filtersets.py:1910 -#: netbox/dcim/filtersets.py:2153 netbox/dcim/filtersets.py:2211 -#: netbox/extras/filtersets.py:509 netbox/ipam/filtersets.py:348 -#: netbox/ipam/filtersets.py:968 netbox/virtualization/filtersets.py:52 -#: netbox/virtualization/filtersets.py:180 netbox/vpn/filtersets.py:353 +#: netbox/circuits/filtersets.py:44 netbox/circuits/filtersets.py:211 +#: netbox/circuits/filtersets.py:291 netbox/dcim/base_filtersets.py:29 +#: netbox/dcim/filtersets.py:106 netbox/dcim/filtersets.py:159 +#: netbox/dcim/filtersets.py:220 netbox/dcim/filtersets.py:341 +#: netbox/dcim/filtersets.py:472 netbox/dcim/filtersets.py:1029 +#: netbox/dcim/filtersets.py:1377 netbox/dcim/filtersets.py:2034 +#: netbox/dcim/filtersets.py:2277 netbox/dcim/filtersets.py:2335 +#: netbox/extras/filtersets.py:509 netbox/ipam/filtersets.py:935 +#: netbox/virtualization/filtersets.py:146 netbox/vpn/filtersets.py:353 msgid "Region (slug)" msgstr "リージョン (slug)" -#: netbox/circuits/filtersets.py:44 netbox/circuits/filtersets.py:211 -#: netbox/dcim/filtersets.py:128 netbox/dcim/filtersets.py:225 -#: netbox/dcim/filtersets.py:346 netbox/dcim/filtersets.py:477 -#: netbox/dcim/filtersets.py:1034 netbox/dcim/filtersets.py:1381 -#: netbox/dcim/filtersets.py:1916 netbox/dcim/filtersets.py:2159 -#: netbox/dcim/filtersets.py:2217 netbox/ipam/filtersets.py:354 -#: netbox/ipam/filtersets.py:974 netbox/virtualization/filtersets.py:58 -#: netbox/virtualization/filtersets.py:186 +#: netbox/circuits/filtersets.py:50 netbox/circuits/filtersets.py:217 +#: netbox/circuits/filtersets.py:297 netbox/dcim/base_filtersets.py:35 +#: netbox/dcim/filtersets.py:129 netbox/dcim/filtersets.py:226 +#: netbox/dcim/filtersets.py:347 netbox/dcim/filtersets.py:478 +#: netbox/dcim/filtersets.py:1035 netbox/dcim/filtersets.py:1383 +#: netbox/dcim/filtersets.py:2040 netbox/dcim/filtersets.py:2283 +#: netbox/dcim/filtersets.py:2341 netbox/ipam/filtersets.py:941 +#: netbox/virtualization/filtersets.py:152 msgid "Site group (ID)" msgstr "サイトグループ (ID)" -#: netbox/circuits/filtersets.py:51 netbox/circuits/filtersets.py:218 -#: netbox/dcim/filtersets.py:135 netbox/dcim/filtersets.py:232 -#: netbox/dcim/filtersets.py:353 netbox/dcim/filtersets.py:484 -#: netbox/dcim/filtersets.py:1041 netbox/dcim/filtersets.py:1388 -#: netbox/dcim/filtersets.py:1923 netbox/dcim/filtersets.py:2166 -#: netbox/dcim/filtersets.py:2224 netbox/extras/filtersets.py:515 -#: netbox/ipam/filtersets.py:361 netbox/ipam/filtersets.py:981 -#: netbox/virtualization/filtersets.py:65 -#: netbox/virtualization/filtersets.py:193 +#: netbox/circuits/filtersets.py:57 netbox/circuits/filtersets.py:224 +#: netbox/circuits/filtersets.py:304 netbox/dcim/base_filtersets.py:42 +#: netbox/dcim/filtersets.py:136 netbox/dcim/filtersets.py:233 +#: netbox/dcim/filtersets.py:354 netbox/dcim/filtersets.py:485 +#: netbox/dcim/filtersets.py:1042 netbox/dcim/filtersets.py:1390 +#: netbox/dcim/filtersets.py:2047 netbox/dcim/filtersets.py:2290 +#: netbox/dcim/filtersets.py:2348 netbox/extras/filtersets.py:515 +#: netbox/ipam/filtersets.py:948 netbox/virtualization/filtersets.py:159 msgid "Site group (slug)" msgstr "サイトグループ (slug)" -#: netbox/circuits/filtersets.py:56 netbox/circuits/forms/bulk_edit.py:188 -#: netbox/circuits/forms/bulk_edit.py:216 -#: netbox/circuits/forms/bulk_import.py:124 -#: netbox/circuits/forms/filtersets.py:51 -#: netbox/circuits/forms/filtersets.py:171 -#: netbox/circuits/forms/filtersets.py:209 -#: netbox/circuits/forms/model_forms.py:138 -#: netbox/circuits/forms/model_forms.py:154 -#: netbox/circuits/tables/circuits.py:113 netbox/dcim/forms/bulk_edit.py:169 -#: netbox/dcim/forms/bulk_edit.py:330 netbox/dcim/forms/bulk_edit.py:683 -#: netbox/dcim/forms/bulk_edit.py:888 netbox/dcim/forms/bulk_import.py:131 -#: netbox/dcim/forms/bulk_import.py:230 netbox/dcim/forms/bulk_import.py:331 -#: netbox/dcim/forms/bulk_import.py:562 netbox/dcim/forms/bulk_import.py:1333 -#: netbox/dcim/forms/bulk_import.py:1361 netbox/dcim/forms/filtersets.py:87 -#: netbox/dcim/forms/filtersets.py:225 netbox/dcim/forms/filtersets.py:342 -#: netbox/dcim/forms/filtersets.py:439 netbox/dcim/forms/filtersets.py:753 -#: netbox/dcim/forms/filtersets.py:997 netbox/dcim/forms/filtersets.py:1021 -#: netbox/dcim/forms/filtersets.py:1111 netbox/dcim/forms/filtersets.py:1149 -#: netbox/dcim/forms/filtersets.py:1584 netbox/dcim/forms/filtersets.py:1608 -#: netbox/dcim/forms/filtersets.py:1632 netbox/dcim/forms/model_forms.py:137 -#: netbox/dcim/forms/model_forms.py:165 netbox/dcim/forms/model_forms.py:238 -#: netbox/dcim/forms/model_forms.py:463 netbox/dcim/forms/model_forms.py:723 -#: netbox/dcim/forms/object_create.py:383 netbox/dcim/tables/devices.py:153 +#: netbox/circuits/filtersets.py:62 netbox/circuits/forms/filtersets.py:59 +#: netbox/circuits/forms/filtersets.py:182 +#: netbox/circuits/forms/filtersets.py:240 +#: netbox/circuits/tables/circuits.py:129 netbox/dcim/forms/bulk_edit.py:172 +#: netbox/dcim/forms/bulk_edit.py:333 netbox/dcim/forms/bulk_edit.py:686 +#: netbox/dcim/forms/bulk_edit.py:891 netbox/dcim/forms/bulk_import.py:133 +#: netbox/dcim/forms/bulk_import.py:232 netbox/dcim/forms/bulk_import.py:333 +#: netbox/dcim/forms/bulk_import.py:567 netbox/dcim/forms/bulk_import.py:1430 +#: netbox/dcim/forms/bulk_import.py:1458 netbox/dcim/forms/filtersets.py:88 +#: netbox/dcim/forms/filtersets.py:226 netbox/dcim/forms/filtersets.py:343 +#: netbox/dcim/forms/filtersets.py:440 netbox/dcim/forms/filtersets.py:754 +#: netbox/dcim/forms/filtersets.py:998 netbox/dcim/forms/filtersets.py:1022 +#: netbox/dcim/forms/filtersets.py:1112 netbox/dcim/forms/filtersets.py:1150 +#: netbox/dcim/forms/filtersets.py:1622 netbox/dcim/forms/filtersets.py:1646 +#: netbox/dcim/forms/filtersets.py:1670 netbox/dcim/forms/model_forms.py:141 +#: netbox/dcim/forms/model_forms.py:169 netbox/dcim/forms/model_forms.py:243 +#: netbox/dcim/forms/model_forms.py:473 netbox/dcim/forms/model_forms.py:734 +#: netbox/dcim/forms/object_create.py:383 netbox/dcim/tables/devices.py:164 #: netbox/dcim/tables/power.py:26 netbox/dcim/tables/power.py:93 -#: netbox/dcim/tables/racks.py:122 netbox/dcim/tables/racks.py:207 -#: netbox/dcim/tables/sites.py:134 netbox/extras/filtersets.py:525 -#: netbox/ipam/forms/bulk_edit.py:218 netbox/ipam/forms/bulk_edit.py:285 -#: netbox/ipam/forms/bulk_edit.py:484 netbox/ipam/forms/bulk_import.py:171 -#: netbox/ipam/forms/bulk_import.py:453 netbox/ipam/forms/filtersets.py:153 -#: netbox/ipam/forms/filtersets.py:231 netbox/ipam/forms/filtersets.py:432 -#: netbox/ipam/forms/filtersets.py:489 netbox/ipam/forms/model_forms.py:205 -#: netbox/ipam/forms/model_forms.py:669 netbox/ipam/tables/ip.py:245 -#: netbox/ipam/tables/vlans.py:118 netbox/ipam/tables/vlans.py:221 -#: netbox/templates/circuits/inc/circuit_termination_fields.html:6 -#: netbox/templates/dcim/device.html:22 +#: netbox/dcim/tables/racks.py:121 netbox/dcim/tables/racks.py:206 +#: netbox/dcim/tables/sites.py:133 netbox/extras/filtersets.py:525 +#: netbox/ipam/forms/bulk_edit.py:468 netbox/ipam/forms/bulk_import.py:452 +#: netbox/ipam/forms/filtersets.py:155 netbox/ipam/forms/filtersets.py:229 +#: netbox/ipam/forms/filtersets.py:435 netbox/ipam/forms/filtersets.py:530 +#: netbox/ipam/forms/model_forms.py:679 netbox/ipam/tables/vlans.py:87 +#: netbox/ipam/tables/vlans.py:197 netbox/templates/dcim/device.html:22 #: netbox/templates/dcim/inc/cable_termination.html:8 #: netbox/templates/dcim/inc/cable_termination.html:33 #: netbox/templates/dcim/location.html:37 #: netbox/templates/dcim/powerpanel.html:22 netbox/templates/dcim/rack.html:20 #: netbox/templates/dcim/rackreservation.html:28 -#: netbox/templates/dcim/site.html:28 netbox/templates/ipam/prefix.html:56 -#: netbox/templates/ipam/vlan.html:23 netbox/templates/ipam/vlan_edit.html:40 -#: netbox/templates/virtualization/cluster.html:42 +#: netbox/templates/dcim/site.html:28 netbox/templates/ipam/vlan.html:23 +#: netbox/templates/ipam/vlan_edit.html:48 #: netbox/templates/virtualization/virtualmachine.html:95 -#: netbox/virtualization/forms/bulk_edit.py:91 -#: netbox/virtualization/forms/bulk_edit.py:109 -#: netbox/virtualization/forms/bulk_edit.py:124 -#: netbox/virtualization/forms/bulk_import.py:59 -#: netbox/virtualization/forms/bulk_import.py:85 -#: netbox/virtualization/forms/filtersets.py:79 -#: netbox/virtualization/forms/filtersets.py:148 -#: netbox/virtualization/forms/model_forms.py:71 +#: netbox/virtualization/forms/bulk_edit.py:106 +#: netbox/virtualization/forms/bulk_import.py:60 +#: netbox/virtualization/forms/bulk_import.py:91 +#: netbox/virtualization/forms/filtersets.py:74 +#: netbox/virtualization/forms/filtersets.py:153 #: netbox/virtualization/forms/model_forms.py:104 -#: netbox/virtualization/forms/model_forms.py:171 -#: netbox/virtualization/tables/clusters.py:77 -#: netbox/virtualization/tables/virtualmachines.py:63 -#: netbox/vpn/forms/filtersets.py:266 netbox/wireless/forms/model_forms.py:76 -#: netbox/wireless/forms/model_forms.py:118 +#: netbox/virtualization/forms/model_forms.py:178 +#: netbox/virtualization/tables/virtualmachines.py:33 +#: netbox/vpn/forms/filtersets.py:266 netbox/wireless/forms/filtersets.py:88 +#: netbox/wireless/forms/model_forms.py:79 +#: netbox/wireless/forms/model_forms.py:121 msgid "Site" msgstr "サイト" -#: netbox/circuits/filtersets.py:62 netbox/circuits/filtersets.py:229 -#: netbox/circuits/filtersets.py:274 netbox/dcim/filtersets.py:242 -#: netbox/dcim/filtersets.py:363 netbox/dcim/filtersets.py:458 -#: netbox/extras/filtersets.py:531 netbox/ipam/filtersets.py:240 -#: netbox/ipam/filtersets.py:371 netbox/ipam/filtersets.py:991 -#: netbox/virtualization/filtersets.py:75 -#: netbox/virtualization/filtersets.py:203 netbox/vpn/filtersets.py:363 +#: netbox/circuits/filtersets.py:68 netbox/circuits/filtersets.py:235 +#: netbox/circuits/filtersets.py:315 netbox/dcim/base_filtersets.py:53 +#: netbox/dcim/filtersets.py:243 netbox/dcim/filtersets.py:364 +#: netbox/dcim/filtersets.py:459 netbox/extras/filtersets.py:531 +#: netbox/ipam/filtersets.py:243 netbox/ipam/filtersets.py:958 +#: netbox/virtualization/filtersets.py:169 netbox/vpn/filtersets.py:363 msgid "Site (slug)" msgstr "サイト (slug)" -#: netbox/circuits/filtersets.py:67 +#: netbox/circuits/filtersets.py:73 msgid "ASN (ID)" msgstr "ASN (ID)" -#: netbox/circuits/filtersets.py:73 netbox/circuits/forms/filtersets.py:31 -#: netbox/ipam/forms/model_forms.py:159 netbox/ipam/models/asns.py:108 -#: netbox/ipam/models/asns.py:125 netbox/ipam/tables/asn.py:41 +#: netbox/circuits/filtersets.py:79 netbox/circuits/forms/filtersets.py:39 +#: netbox/ipam/forms/model_forms.py:165 netbox/ipam/models/asns.py:105 +#: netbox/ipam/models/asns.py:122 netbox/ipam/tables/asn.py:41 #: netbox/templates/ipam/asn.html:20 msgid "ASN" msgstr "ASN" -#: netbox/circuits/filtersets.py:95 netbox/circuits/filtersets.py:122 -#: netbox/circuits/filtersets.py:156 netbox/circuits/filtersets.py:283 -#: netbox/circuits/filtersets.py:325 netbox/ipam/filtersets.py:245 +#: netbox/circuits/filtersets.py:101 netbox/circuits/filtersets.py:128 +#: netbox/circuits/filtersets.py:162 netbox/circuits/filtersets.py:338 +#: netbox/circuits/filtersets.py:406 netbox/circuits/filtersets.py:482 +#: netbox/circuits/filtersets.py:550 netbox/ipam/filtersets.py:248 msgid "Provider (ID)" msgstr "プロバイダ (ID)" -#: netbox/circuits/filtersets.py:101 netbox/circuits/filtersets.py:128 -#: netbox/circuits/filtersets.py:162 netbox/circuits/filtersets.py:289 -#: netbox/circuits/filtersets.py:331 netbox/ipam/filtersets.py:251 +#: netbox/circuits/filtersets.py:107 netbox/circuits/filtersets.py:134 +#: netbox/circuits/filtersets.py:168 netbox/circuits/filtersets.py:344 +#: netbox/circuits/filtersets.py:488 netbox/circuits/filtersets.py:556 +#: netbox/ipam/filtersets.py:254 msgid "Provider (slug)" msgstr "プロバイダ (slug)" -#: netbox/circuits/filtersets.py:167 +#: netbox/circuits/filtersets.py:173 netbox/circuits/filtersets.py:493 +#: netbox/circuits/filtersets.py:561 msgid "Provider account (ID)" msgstr "プロバイダアカウント (ID)" -#: netbox/circuits/filtersets.py:173 +#: netbox/circuits/filtersets.py:179 netbox/circuits/filtersets.py:499 +#: netbox/circuits/filtersets.py:567 msgid "Provider account (account)" msgstr "プロバイダーアカウント (アカウント)" -#: netbox/circuits/filtersets.py:178 +#: netbox/circuits/filtersets.py:184 netbox/circuits/filtersets.py:503 +#: netbox/circuits/filtersets.py:572 msgid "Provider network (ID)" msgstr "プロバイダネットワーク (ID)" -#: netbox/circuits/filtersets.py:182 +#: netbox/circuits/filtersets.py:188 msgid "Circuit type (ID)" msgstr "回線タイプ (ID)" -#: netbox/circuits/filtersets.py:188 +#: netbox/circuits/filtersets.py:194 msgid "Circuit type (slug)" msgstr "回線タイプ (slug)" -#: netbox/circuits/filtersets.py:223 netbox/circuits/filtersets.py:268 -#: netbox/dcim/filtersets.py:236 netbox/dcim/filtersets.py:357 -#: netbox/dcim/filtersets.py:452 netbox/dcim/filtersets.py:1045 -#: netbox/dcim/filtersets.py:1393 netbox/dcim/filtersets.py:1928 -#: netbox/dcim/filtersets.py:2170 netbox/dcim/filtersets.py:2229 -#: netbox/ipam/filtersets.py:234 netbox/ipam/filtersets.py:365 -#: netbox/ipam/filtersets.py:985 netbox/virtualization/filtersets.py:69 -#: netbox/virtualization/filtersets.py:197 netbox/vpn/filtersets.py:368 +#: netbox/circuits/filtersets.py:229 netbox/circuits/filtersets.py:309 +#: netbox/dcim/base_filtersets.py:47 netbox/dcim/filtersets.py:237 +#: netbox/dcim/filtersets.py:358 netbox/dcim/filtersets.py:453 +#: netbox/dcim/filtersets.py:1046 netbox/dcim/filtersets.py:1395 +#: netbox/dcim/filtersets.py:2052 netbox/dcim/filtersets.py:2294 +#: netbox/dcim/filtersets.py:2353 netbox/ipam/filtersets.py:237 +#: netbox/ipam/filtersets.py:952 netbox/virtualization/filtersets.py:163 +#: netbox/vpn/filtersets.py:368 msgid "Site (ID)" msgstr "サイト (ID)" -#: netbox/circuits/filtersets.py:233 netbox/circuits/filtersets.py:237 +#: netbox/circuits/filtersets.py:239 netbox/circuits/filtersets.py:321 +#: netbox/dcim/base_filtersets.py:59 netbox/dcim/filtersets.py:259 +#: netbox/dcim/filtersets.py:370 netbox/dcim/filtersets.py:491 +#: netbox/dcim/filtersets.py:1058 netbox/dcim/filtersets.py:1406 +#: netbox/dcim/filtersets.py:2306 +msgid "Location (ID)" +msgstr "ロケーション (ID)" + +#: netbox/circuits/filtersets.py:244 netbox/circuits/filtersets.py:248 msgid "Termination A (ID)" msgstr "ターミネーション A (ID)" -#: netbox/circuits/filtersets.py:260 netbox/circuits/filtersets.py:320 -#: netbox/core/filtersets.py:77 netbox/core/filtersets.py:136 -#: netbox/core/filtersets.py:173 netbox/dcim/filtersets.py:751 -#: netbox/dcim/filtersets.py:1362 netbox/dcim/filtersets.py:2277 -#: netbox/extras/filtersets.py:41 netbox/extras/filtersets.py:63 -#: netbox/extras/filtersets.py:92 netbox/extras/filtersets.py:132 -#: netbox/extras/filtersets.py:181 netbox/extras/filtersets.py:209 -#: netbox/extras/filtersets.py:239 netbox/extras/filtersets.py:276 -#: netbox/extras/filtersets.py:348 netbox/extras/filtersets.py:391 -#: netbox/extras/filtersets.py:438 netbox/extras/filtersets.py:498 -#: netbox/extras/filtersets.py:657 netbox/extras/filtersets.py:703 -#: netbox/ipam/forms/model_forms.py:482 netbox/netbox/filtersets.py:282 -#: netbox/netbox/forms/__init__.py:22 netbox/netbox/forms/base.py:167 +#: netbox/circuits/filtersets.py:273 netbox/circuits/filtersets.py:375 +#: netbox/circuits/filtersets.py:537 netbox/core/filtersets.py:77 +#: netbox/core/filtersets.py:136 netbox/core/filtersets.py:173 +#: netbox/dcim/filtersets.py:752 netbox/dcim/filtersets.py:1364 +#: netbox/dcim/filtersets.py:2401 netbox/extras/filtersets.py:41 +#: netbox/extras/filtersets.py:63 netbox/extras/filtersets.py:92 +#: netbox/extras/filtersets.py:132 netbox/extras/filtersets.py:181 +#: netbox/extras/filtersets.py:209 netbox/extras/filtersets.py:239 +#: netbox/extras/filtersets.py:276 netbox/extras/filtersets.py:348 +#: netbox/extras/filtersets.py:391 netbox/extras/filtersets.py:438 +#: netbox/extras/filtersets.py:498 netbox/extras/filtersets.py:657 +#: netbox/extras/filtersets.py:703 netbox/ipam/forms/model_forms.py:492 +#: netbox/netbox/filtersets.py:286 netbox/netbox/forms/__init__.py:22 +#: netbox/netbox/forms/base.py:167 #: netbox/templates/htmx/object_selector.html:28 #: netbox/templates/inc/filter_list.html:46 #: netbox/templates/ipam/ipaddress_assign.html:29 @@ -345,97 +361,150 @@ msgstr "ターミネーション A (ID)" msgid "Search" msgstr "検索" -#: netbox/circuits/filtersets.py:264 netbox/circuits/forms/bulk_edit.py:172 -#: netbox/circuits/forms/bulk_edit.py:246 -#: netbox/circuits/forms/bulk_import.py:115 -#: netbox/circuits/forms/filtersets.py:198 -#: netbox/circuits/forms/filtersets.py:214 -#: netbox/circuits/forms/filtersets.py:260 -#: netbox/circuits/forms/model_forms.py:111 -#: netbox/circuits/forms/model_forms.py:133 -#: netbox/circuits/forms/model_forms.py:199 -#: netbox/circuits/tables/circuits.py:104 -#: netbox/circuits/tables/circuits.py:164 netbox/dcim/forms/connections.py:73 +#: netbox/circuits/filtersets.py:277 netbox/circuits/forms/bulk_edit.py:195 +#: netbox/circuits/forms/bulk_edit.py:284 +#: netbox/circuits/forms/bulk_import.py:128 +#: netbox/circuits/forms/filtersets.py:223 +#: netbox/circuits/forms/filtersets.py:250 +#: netbox/circuits/forms/filtersets.py:296 +#: netbox/circuits/forms/model_forms.py:139 +#: netbox/circuits/forms/model_forms.py:162 +#: netbox/circuits/forms/model_forms.py:262 +#: netbox/circuits/tables/circuits.py:108 +#: netbox/circuits/tables/circuits.py:203 netbox/dcim/forms/connections.py:73 #: netbox/templates/circuits/circuit.html:15 -#: netbox/templates/circuits/circuitgroupassignment.html:26 +#: netbox/templates/circuits/circuitgroupassignment.html:30 #: netbox/templates/circuits/circuittermination.html:19 #: netbox/templates/dcim/inc/cable_termination.html:55 #: netbox/templates/dcim/trace/circuit.html:4 msgid "Circuit" msgstr "回線" -#: netbox/circuits/filtersets.py:278 +#: netbox/circuits/filtersets.py:328 netbox/dcim/base_filtersets.py:66 +#: netbox/dcim/filtersets.py:266 netbox/dcim/filtersets.py:377 +#: netbox/dcim/filtersets.py:498 netbox/dcim/filtersets.py:1412 +#: netbox/extras/filtersets.py:542 +msgid "Location (slug)" +msgstr "ロケーション (slug)" + +#: netbox/circuits/filtersets.py:333 msgid "ProviderNetwork (ID)" msgstr "プロバイダネットワーク (ID)" -#: netbox/circuits/filtersets.py:335 -msgid "Circuit (ID)" -msgstr "回線 (ID)" - -#: netbox/circuits/filtersets.py:341 +#: netbox/circuits/filtersets.py:381 msgid "Circuit (CID)" msgstr "回線 (CID)" -#: netbox/circuits/filtersets.py:345 +#: netbox/circuits/filtersets.py:386 +msgid "Circuit (ID)" +msgstr "回線 (ID)" + +#: netbox/circuits/filtersets.py:391 +msgid "Virtual circuit (CID)" +msgstr "バーチャルサーキット (CID)" + +#: netbox/circuits/filtersets.py:396 netbox/dcim/filtersets.py:1849 +msgid "Virtual circuit (ID)" +msgstr "バーチャルサーキット (ID)" + +#: netbox/circuits/filtersets.py:401 +msgid "Provider (name)" +msgstr "プロバイダー (名前)" + +#: netbox/circuits/filtersets.py:410 msgid "Circuit group (ID)" msgstr "回路グループ (ID)" -#: netbox/circuits/filtersets.py:351 +#: netbox/circuits/filtersets.py:416 msgid "Circuit group (slug)" msgstr "回線グループ (slug)" -#: netbox/circuits/forms/bulk_edit.py:30 -#: netbox/circuits/forms/filtersets.py:56 -#: netbox/circuits/forms/model_forms.py:29 -#: netbox/circuits/tables/providers.py:33 netbox/dcim/forms/bulk_edit.py:129 -#: netbox/dcim/forms/filtersets.py:195 netbox/dcim/forms/model_forms.py:123 -#: netbox/dcim/tables/sites.py:94 netbox/ipam/models/asns.py:126 -#: netbox/ipam/tables/asn.py:27 netbox/ipam/views.py:213 -#: netbox/netbox/navigation/menu.py:172 netbox/netbox/navigation/menu.py:175 +#: netbox/circuits/filtersets.py:507 +msgid "Virtual circuit type (ID)" +msgstr "仮想回線タイプ (ID)" + +#: netbox/circuits/filtersets.py:513 +msgid "Virtual circuit type (slug)" +msgstr "バーチャルサーキットタイプ (スラッグ)" + +#: netbox/circuits/filtersets.py:541 netbox/circuits/forms/bulk_edit.py:355 +#: netbox/circuits/forms/bulk_import.py:249 +#: netbox/circuits/forms/filtersets.py:372 +#: netbox/circuits/forms/filtersets.py:378 +#: netbox/circuits/forms/model_forms.py:343 +#: netbox/circuits/forms/model_forms.py:358 +#: netbox/circuits/tables/virtual_circuits.py:88 +#: netbox/templates/circuits/virtualcircuit.html:20 +#: netbox/templates/circuits/virtualcircuittermination.html:38 +msgid "Virtual circuit" +msgstr "バーチャルサーキット" + +#: netbox/circuits/filtersets.py:577 netbox/dcim/filtersets.py:1269 +#: netbox/dcim/filtersets.py:1634 netbox/ipam/filtersets.py:601 +#: netbox/vpn/filtersets.py:102 netbox/vpn/filtersets.py:401 +msgid "Interface (ID)" +msgstr "インタフェース (ID)" + +#: netbox/circuits/forms/bulk_edit.py:42 +#: netbox/circuits/forms/filtersets.py:64 +#: netbox/circuits/forms/model_forms.py:42 +#: netbox/circuits/tables/providers.py:32 netbox/dcim/forms/bulk_edit.py:132 +#: netbox/dcim/forms/filtersets.py:196 netbox/dcim/forms/model_forms.py:127 +#: netbox/dcim/tables/sites.py:94 netbox/ipam/models/asns.py:123 +#: netbox/ipam/tables/asn.py:27 netbox/ipam/views.py:230 +#: netbox/netbox/navigation/menu.py:178 netbox/netbox/navigation/menu.py:181 #: netbox/templates/circuits/provider.html:23 msgid "ASNs" msgstr "ASN" -#: netbox/circuits/forms/bulk_edit.py:34 netbox/circuits/forms/bulk_edit.py:56 -#: netbox/circuits/forms/bulk_edit.py:83 -#: netbox/circuits/forms/bulk_edit.py:104 -#: netbox/circuits/forms/bulk_edit.py:164 -#: netbox/circuits/forms/bulk_edit.py:183 -#: netbox/circuits/forms/bulk_edit.py:228 netbox/core/forms/bulk_edit.py:28 -#: netbox/dcim/forms/bulk_create.py:35 netbox/dcim/forms/bulk_edit.py:74 -#: netbox/dcim/forms/bulk_edit.py:93 netbox/dcim/forms/bulk_edit.py:152 -#: netbox/dcim/forms/bulk_edit.py:193 netbox/dcim/forms/bulk_edit.py:211 -#: netbox/dcim/forms/bulk_edit.py:289 netbox/dcim/forms/bulk_edit.py:438 -#: netbox/dcim/forms/bulk_edit.py:472 netbox/dcim/forms/bulk_edit.py:487 -#: netbox/dcim/forms/bulk_edit.py:546 netbox/dcim/forms/bulk_edit.py:590 -#: netbox/dcim/forms/bulk_edit.py:624 netbox/dcim/forms/bulk_edit.py:648 -#: netbox/dcim/forms/bulk_edit.py:721 netbox/dcim/forms/bulk_edit.py:782 -#: netbox/dcim/forms/bulk_edit.py:834 netbox/dcim/forms/bulk_edit.py:857 -#: netbox/dcim/forms/bulk_edit.py:905 netbox/dcim/forms/bulk_edit.py:975 -#: netbox/dcim/forms/bulk_edit.py:1028 netbox/dcim/forms/bulk_edit.py:1063 -#: netbox/dcim/forms/bulk_edit.py:1103 netbox/dcim/forms/bulk_edit.py:1147 -#: netbox/dcim/forms/bulk_edit.py:1192 netbox/dcim/forms/bulk_edit.py:1219 -#: netbox/dcim/forms/bulk_edit.py:1237 netbox/dcim/forms/bulk_edit.py:1255 -#: netbox/dcim/forms/bulk_edit.py:1273 netbox/dcim/forms/bulk_edit.py:1725 -#: netbox/extras/forms/bulk_edit.py:39 netbox/extras/forms/bulk_edit.py:149 -#: netbox/extras/forms/bulk_edit.py:178 netbox/extras/forms/bulk_edit.py:208 -#: netbox/extras/forms/bulk_edit.py:256 netbox/extras/forms/bulk_edit.py:274 -#: netbox/extras/forms/bulk_edit.py:298 netbox/extras/forms/bulk_edit.py:312 -#: netbox/extras/forms/bulk_edit.py:339 netbox/extras/tables/tables.py:79 -#: netbox/ipam/forms/bulk_edit.py:53 netbox/ipam/forms/bulk_edit.py:73 -#: netbox/ipam/forms/bulk_edit.py:93 netbox/ipam/forms/bulk_edit.py:117 -#: netbox/ipam/forms/bulk_edit.py:146 netbox/ipam/forms/bulk_edit.py:175 -#: netbox/ipam/forms/bulk_edit.py:194 netbox/ipam/forms/bulk_edit.py:276 -#: netbox/ipam/forms/bulk_edit.py:321 netbox/ipam/forms/bulk_edit.py:369 -#: netbox/ipam/forms/bulk_edit.py:412 netbox/ipam/forms/bulk_edit.py:428 -#: netbox/ipam/forms/bulk_edit.py:516 netbox/ipam/forms/bulk_edit.py:547 +#: netbox/circuits/forms/bulk_edit.py:46 netbox/circuits/forms/bulk_edit.py:68 +#: netbox/circuits/forms/bulk_edit.py:95 +#: netbox/circuits/forms/bulk_edit.py:116 +#: netbox/circuits/forms/bulk_edit.py:187 +#: netbox/circuits/forms/bulk_edit.py:207 +#: netbox/circuits/forms/bulk_edit.py:266 +#: netbox/circuits/forms/bulk_edit.py:307 +#: netbox/circuits/forms/bulk_edit.py:347 +#: netbox/circuits/forms/bulk_edit.py:371 netbox/core/forms/bulk_edit.py:28 +#: netbox/dcim/forms/bulk_create.py:35 netbox/dcim/forms/bulk_edit.py:77 +#: netbox/dcim/forms/bulk_edit.py:96 netbox/dcim/forms/bulk_edit.py:155 +#: netbox/dcim/forms/bulk_edit.py:196 netbox/dcim/forms/bulk_edit.py:214 +#: netbox/dcim/forms/bulk_edit.py:292 netbox/dcim/forms/bulk_edit.py:441 +#: netbox/dcim/forms/bulk_edit.py:475 netbox/dcim/forms/bulk_edit.py:490 +#: netbox/dcim/forms/bulk_edit.py:549 netbox/dcim/forms/bulk_edit.py:593 +#: netbox/dcim/forms/bulk_edit.py:627 netbox/dcim/forms/bulk_edit.py:651 +#: netbox/dcim/forms/bulk_edit.py:724 netbox/dcim/forms/bulk_edit.py:785 +#: netbox/dcim/forms/bulk_edit.py:837 netbox/dcim/forms/bulk_edit.py:860 +#: netbox/dcim/forms/bulk_edit.py:908 netbox/dcim/forms/bulk_edit.py:978 +#: netbox/dcim/forms/bulk_edit.py:1031 netbox/dcim/forms/bulk_edit.py:1066 +#: netbox/dcim/forms/bulk_edit.py:1106 netbox/dcim/forms/bulk_edit.py:1150 +#: netbox/dcim/forms/bulk_edit.py:1195 netbox/dcim/forms/bulk_edit.py:1222 +#: netbox/dcim/forms/bulk_edit.py:1240 netbox/dcim/forms/bulk_edit.py:1258 +#: netbox/dcim/forms/bulk_edit.py:1276 netbox/dcim/forms/bulk_edit.py:1746 +#: netbox/dcim/forms/bulk_edit.py:1787 netbox/extras/forms/bulk_edit.py:39 +#: netbox/extras/forms/bulk_edit.py:149 netbox/extras/forms/bulk_edit.py:178 +#: netbox/extras/forms/bulk_edit.py:208 netbox/extras/forms/bulk_edit.py:256 +#: netbox/extras/forms/bulk_edit.py:274 netbox/extras/forms/bulk_edit.py:298 +#: netbox/extras/forms/bulk_edit.py:312 netbox/extras/forms/bulk_edit.py:339 +#: netbox/extras/tables/tables.py:79 netbox/ipam/forms/bulk_edit.py:56 +#: netbox/ipam/forms/bulk_edit.py:76 netbox/ipam/forms/bulk_edit.py:96 +#: netbox/ipam/forms/bulk_edit.py:120 netbox/ipam/forms/bulk_edit.py:149 +#: netbox/ipam/forms/bulk_edit.py:178 netbox/ipam/forms/bulk_edit.py:197 +#: netbox/ipam/forms/bulk_edit.py:260 netbox/ipam/forms/bulk_edit.py:305 +#: netbox/ipam/forms/bulk_edit.py:353 netbox/ipam/forms/bulk_edit.py:396 +#: netbox/ipam/forms/bulk_edit.py:412 netbox/ipam/forms/bulk_edit.py:500 +#: netbox/ipam/forms/bulk_edit.py:532 netbox/ipam/forms/bulk_edit.py:575 +#: netbox/ipam/tables/vlans.py:240 netbox/ipam/tables/vlans.py:267 #: netbox/templates/account/token.html:35 -#: netbox/templates/circuits/circuit.html:59 +#: netbox/templates/circuits/circuit.html:69 #: netbox/templates/circuits/circuitgroup.html:32 #: netbox/templates/circuits/circuittype.html:26 -#: netbox/templates/circuits/inc/circuit_termination_fields.html:88 +#: netbox/templates/circuits/inc/circuit_termination_fields.html:83 #: netbox/templates/circuits/provider.html:33 #: netbox/templates/circuits/providernetwork.html:32 +#: netbox/templates/circuits/virtualcircuit.html:56 +#: netbox/templates/circuits/virtualcircuittermination.html:68 +#: netbox/templates/circuits/virtualcircuittype.html:26 #: netbox/templates/core/datasource.html:54 #: netbox/templates/core/plugin.html:80 netbox/templates/dcim/cable.html:36 #: netbox/templates/dcim/consoleport.html:44 @@ -446,13 +515,14 @@ msgstr "ASN" #: netbox/templates/dcim/devicetype.html:33 #: netbox/templates/dcim/frontport.html:58 #: netbox/templates/dcim/interface.html:69 -#: netbox/templates/dcim/inventoryitem.html:60 +#: netbox/templates/dcim/inventoryitem.html:64 #: netbox/templates/dcim/inventoryitemrole.html:22 #: netbox/templates/dcim/location.html:33 +#: netbox/templates/dcim/macaddress.html:21 #: netbox/templates/dcim/manufacturer.html:40 #: netbox/templates/dcim/module.html:73 #: netbox/templates/dcim/modulebay.html:42 -#: netbox/templates/dcim/moduletype.html:37 +#: netbox/templates/dcim/moduletype.html:39 #: netbox/templates/dcim/platform.html:33 #: netbox/templates/dcim/powerfeed.html:40 #: netbox/templates/dcim/poweroutlet.html:40 @@ -479,12 +549,14 @@ msgstr "ASN" #: netbox/templates/ipam/asnrange.html:38 #: netbox/templates/ipam/fhrpgroup.html:34 #: netbox/templates/ipam/ipaddress.html:55 -#: netbox/templates/ipam/iprange.html:67 netbox/templates/ipam/prefix.html:81 +#: netbox/templates/ipam/iprange.html:67 netbox/templates/ipam/prefix.html:77 #: netbox/templates/ipam/rir.html:26 netbox/templates/ipam/role.html:26 #: netbox/templates/ipam/routetarget.html:21 #: netbox/templates/ipam/service.html:50 #: netbox/templates/ipam/servicetemplate.html:27 #: netbox/templates/ipam/vlan.html:62 netbox/templates/ipam/vlangroup.html:34 +#: netbox/templates/ipam/vlantranslationpolicy.html:18 +#: netbox/templates/ipam/vlantranslationrule.html:26 #: netbox/templates/ipam/vrf.html:33 netbox/templates/tenancy/contact.html:67 #: netbox/templates/tenancy/contactgroup.html:25 #: netbox/templates/tenancy/contactrole.html:22 @@ -498,7 +570,7 @@ msgstr "ASN" #: netbox/templates/virtualization/clustertype.html:26 #: netbox/templates/virtualization/virtualdisk.html:39 #: netbox/templates/virtualization/virtualmachine.html:31 -#: netbox/templates/virtualization/vminterface.html:51 +#: netbox/templates/virtualization/vminterface.html:47 #: netbox/templates/vpn/ikepolicy.html:17 #: netbox/templates/vpn/ikeproposal.html:17 #: netbox/templates/vpn/ipsecpolicy.html:17 @@ -508,119 +580,142 @@ msgstr "ASN" #: netbox/templates/vpn/ipsecproposal.html:17 #: netbox/templates/vpn/l2vpn.html:26 netbox/templates/vpn/tunnel.html:33 #: netbox/templates/vpn/tunnelgroup.html:30 -#: netbox/templates/wireless/wirelesslan.html:26 +#: netbox/templates/wireless/wirelesslan.html:34 #: netbox/templates/wireless/wirelesslangroup.html:33 #: netbox/templates/wireless/wirelesslink.html:34 #: netbox/tenancy/forms/bulk_edit.py:32 netbox/tenancy/forms/bulk_edit.py:80 #: netbox/tenancy/forms/bulk_edit.py:122 netbox/users/forms/bulk_edit.py:64 #: netbox/users/forms/bulk_edit.py:82 netbox/users/forms/bulk_edit.py:112 -#: netbox/virtualization/forms/bulk_edit.py:32 -#: netbox/virtualization/forms/bulk_edit.py:46 -#: netbox/virtualization/forms/bulk_edit.py:100 -#: netbox/virtualization/forms/bulk_edit.py:177 -#: netbox/virtualization/forms/bulk_edit.py:228 -#: netbox/virtualization/forms/bulk_edit.py:337 +#: netbox/virtualization/forms/bulk_edit.py:33 +#: netbox/virtualization/forms/bulk_edit.py:47 +#: netbox/virtualization/forms/bulk_edit.py:82 +#: netbox/virtualization/forms/bulk_edit.py:159 +#: netbox/virtualization/forms/bulk_edit.py:210 +#: netbox/virtualization/forms/bulk_edit.py:327 #: netbox/vpn/forms/bulk_edit.py:28 netbox/vpn/forms/bulk_edit.py:64 #: netbox/vpn/forms/bulk_edit.py:121 netbox/vpn/forms/bulk_edit.py:155 #: netbox/vpn/forms/bulk_edit.py:190 netbox/vpn/forms/bulk_edit.py:215 #: netbox/vpn/forms/bulk_edit.py:247 netbox/vpn/forms/bulk_edit.py:274 -#: netbox/wireless/forms/bulk_edit.py:29 netbox/wireless/forms/bulk_edit.py:82 -#: netbox/wireless/forms/bulk_edit.py:140 +#: netbox/wireless/forms/bulk_edit.py:31 netbox/wireless/forms/bulk_edit.py:84 +#: netbox/wireless/forms/bulk_edit.py:143 msgid "Description" msgstr "説明" -#: netbox/circuits/forms/bulk_edit.py:51 netbox/circuits/forms/bulk_edit.py:73 -#: netbox/circuits/forms/bulk_edit.py:123 -#: netbox/circuits/forms/bulk_import.py:36 -#: netbox/circuits/forms/bulk_import.py:51 -#: netbox/circuits/forms/bulk_import.py:74 -#: netbox/circuits/forms/filtersets.py:70 -#: netbox/circuits/forms/filtersets.py:88 -#: netbox/circuits/forms/filtersets.py:116 -#: netbox/circuits/forms/filtersets.py:131 -#: netbox/circuits/forms/filtersets.py:199 -#: netbox/circuits/forms/filtersets.py:232 -#: netbox/circuits/forms/filtersets.py:255 -#: netbox/circuits/forms/model_forms.py:47 -#: netbox/circuits/forms/model_forms.py:61 -#: netbox/circuits/forms/model_forms.py:93 -#: netbox/circuits/tables/circuits.py:58 -#: netbox/circuits/tables/circuits.py:108 -#: netbox/circuits/tables/circuits.py:160 -#: netbox/circuits/tables/providers.py:72 -#: netbox/circuits/tables/providers.py:103 +#: netbox/circuits/forms/bulk_edit.py:63 netbox/circuits/forms/bulk_edit.py:85 +#: netbox/circuits/forms/bulk_edit.py:135 +#: netbox/circuits/forms/bulk_import.py:43 +#: netbox/circuits/forms/bulk_import.py:58 +#: netbox/circuits/forms/bulk_import.py:81 +#: netbox/circuits/forms/filtersets.py:78 +#: netbox/circuits/forms/filtersets.py:96 +#: netbox/circuits/forms/filtersets.py:124 +#: netbox/circuits/forms/filtersets.py:142 +#: netbox/circuits/forms/filtersets.py:224 +#: netbox/circuits/forms/filtersets.py:268 +#: netbox/circuits/forms/filtersets.py:291 +#: netbox/circuits/forms/filtersets.py:329 +#: netbox/circuits/forms/filtersets.py:337 +#: netbox/circuits/forms/filtersets.py:373 +#: netbox/circuits/forms/filtersets.py:396 +#: netbox/circuits/forms/model_forms.py:60 +#: netbox/circuits/forms/model_forms.py:76 +#: netbox/circuits/forms/model_forms.py:110 +#: netbox/circuits/tables/circuits.py:57 +#: netbox/circuits/tables/circuits.py:112 +#: netbox/circuits/tables/circuits.py:196 +#: netbox/circuits/tables/providers.py:70 +#: netbox/circuits/tables/providers.py:101 +#: netbox/circuits/tables/virtual_circuits.py:46 +#: netbox/circuits/tables/virtual_circuits.py:93 #: netbox/templates/circuits/circuit.html:18 +#: netbox/templates/circuits/circuitgroupassignment.html:26 #: netbox/templates/circuits/circuittermination.html:25 #: netbox/templates/circuits/provider.html:20 #: netbox/templates/circuits/provideraccount.html:20 #: netbox/templates/circuits/providernetwork.html:20 +#: netbox/templates/circuits/virtualcircuit.html:23 +#: netbox/templates/circuits/virtualcircuittermination.html:26 #: netbox/templates/dcim/inc/cable_termination.html:51 +#: netbox/templates/dcim/interface.html:166 msgid "Provider" msgstr "プロバイダ" -#: netbox/circuits/forms/bulk_edit.py:80 -#: netbox/circuits/forms/filtersets.py:91 +#: netbox/circuits/forms/bulk_edit.py:92 +#: netbox/circuits/forms/filtersets.py:99 #: netbox/templates/circuits/providernetwork.html:28 msgid "Service ID" msgstr "サービス ID" -#: netbox/circuits/forms/bulk_edit.py:100 -#: netbox/circuits/forms/filtersets.py:107 netbox/dcim/forms/bulk_edit.py:207 -#: netbox/dcim/forms/bulk_edit.py:610 netbox/dcim/forms/bulk_edit.py:819 -#: netbox/dcim/forms/bulk_edit.py:1188 netbox/dcim/forms/bulk_edit.py:1215 -#: netbox/dcim/forms/bulk_edit.py:1721 netbox/dcim/forms/filtersets.py:1064 -#: netbox/dcim/forms/filtersets.py:1455 netbox/dcim/forms/filtersets.py:1479 -#: netbox/dcim/tables/devices.py:704 netbox/dcim/tables/devices.py:761 -#: netbox/dcim/tables/devices.py:1003 netbox/dcim/tables/devicetypes.py:249 -#: netbox/dcim/tables/devicetypes.py:264 netbox/dcim/tables/racks.py:33 -#: netbox/extras/forms/bulk_edit.py:270 netbox/extras/tables/tables.py:443 +#: netbox/circuits/forms/bulk_edit.py:112 +#: netbox/circuits/forms/bulk_edit.py:303 +#: netbox/circuits/forms/filtersets.py:115 +#: netbox/circuits/forms/filtersets.py:320 netbox/dcim/forms/bulk_edit.py:210 +#: netbox/dcim/forms/bulk_edit.py:613 netbox/dcim/forms/bulk_edit.py:822 +#: netbox/dcim/forms/bulk_edit.py:1191 netbox/dcim/forms/bulk_edit.py:1218 +#: netbox/dcim/forms/bulk_edit.py:1742 netbox/dcim/forms/filtersets.py:1065 +#: netbox/dcim/forms/filtersets.py:1323 netbox/dcim/forms/filtersets.py:1460 +#: netbox/dcim/forms/filtersets.py:1484 netbox/dcim/tables/devices.py:738 +#: netbox/dcim/tables/devices.py:794 netbox/dcim/tables/devices.py:1035 +#: netbox/dcim/tables/devicetypes.py:256 netbox/dcim/tables/devicetypes.py:271 +#: netbox/dcim/tables/racks.py:33 netbox/extras/forms/bulk_edit.py:270 +#: netbox/extras/tables/tables.py:443 #: netbox/templates/circuits/circuittype.html:30 +#: netbox/templates/circuits/virtualcircuittype.html:30 #: netbox/templates/dcim/cable.html:40 #: netbox/templates/dcim/devicerole.html:34 #: netbox/templates/dcim/frontport.html:40 #: netbox/templates/dcim/inventoryitemrole.html:26 +#: netbox/templates/dcim/poweroutlet.html:44 #: netbox/templates/dcim/rackrole.html:30 #: netbox/templates/dcim/rearport.html:40 netbox/templates/extras/tag.html:26 msgid "Color" msgstr "色" -#: netbox/circuits/forms/bulk_edit.py:118 -#: netbox/circuits/forms/bulk_import.py:87 -#: netbox/circuits/forms/filtersets.py:126 netbox/core/forms/bulk_edit.py:18 -#: netbox/core/forms/filtersets.py:33 netbox/core/tables/change_logging.py:32 -#: netbox/core/tables/data.py:20 netbox/core/tables/jobs.py:18 -#: netbox/dcim/forms/bulk_edit.py:797 netbox/dcim/forms/bulk_edit.py:936 -#: netbox/dcim/forms/bulk_edit.py:1004 netbox/dcim/forms/bulk_edit.py:1023 -#: netbox/dcim/forms/bulk_edit.py:1046 netbox/dcim/forms/bulk_edit.py:1088 -#: netbox/dcim/forms/bulk_edit.py:1132 netbox/dcim/forms/bulk_edit.py:1183 -#: netbox/dcim/forms/bulk_edit.py:1210 netbox/dcim/forms/bulk_import.py:188 -#: netbox/dcim/forms/bulk_import.py:267 netbox/dcim/forms/bulk_import.py:730 -#: netbox/dcim/forms/bulk_import.py:756 netbox/dcim/forms/bulk_import.py:782 -#: netbox/dcim/forms/bulk_import.py:802 netbox/dcim/forms/bulk_import.py:885 -#: netbox/dcim/forms/bulk_import.py:979 netbox/dcim/forms/bulk_import.py:1021 -#: netbox/dcim/forms/bulk_import.py:1235 netbox/dcim/forms/bulk_import.py:1398 -#: netbox/dcim/forms/filtersets.py:955 netbox/dcim/forms/filtersets.py:1054 -#: netbox/dcim/forms/filtersets.py:1175 netbox/dcim/forms/filtersets.py:1247 -#: netbox/dcim/forms/filtersets.py:1272 netbox/dcim/forms/filtersets.py:1296 -#: netbox/dcim/forms/filtersets.py:1316 netbox/dcim/forms/filtersets.py:1353 -#: netbox/dcim/forms/filtersets.py:1450 netbox/dcim/forms/filtersets.py:1474 -#: netbox/dcim/forms/model_forms.py:703 netbox/dcim/forms/model_forms.py:709 -#: netbox/dcim/forms/object_import.py:84 +#: netbox/circuits/forms/bulk_edit.py:130 +#: netbox/circuits/forms/bulk_edit.py:331 +#: netbox/circuits/forms/bulk_import.py:94 +#: netbox/circuits/forms/bulk_import.py:221 +#: netbox/circuits/forms/filtersets.py:137 +#: netbox/circuits/forms/filtersets.py:358 +#: netbox/circuits/tables/circuits.py:65 +#: netbox/circuits/tables/circuits.py:200 +#: netbox/circuits/tables/virtual_circuits.py:58 +#: netbox/core/forms/bulk_edit.py:18 netbox/core/forms/filtersets.py:33 +#: netbox/core/tables/change_logging.py:32 netbox/core/tables/data.py:20 +#: netbox/core/tables/jobs.py:18 netbox/dcim/forms/bulk_edit.py:800 +#: netbox/dcim/forms/bulk_edit.py:939 netbox/dcim/forms/bulk_edit.py:1007 +#: netbox/dcim/forms/bulk_edit.py:1026 netbox/dcim/forms/bulk_edit.py:1049 +#: netbox/dcim/forms/bulk_edit.py:1091 netbox/dcim/forms/bulk_edit.py:1135 +#: netbox/dcim/forms/bulk_edit.py:1186 netbox/dcim/forms/bulk_edit.py:1213 +#: netbox/dcim/forms/bulk_import.py:190 netbox/dcim/forms/bulk_import.py:269 +#: netbox/dcim/forms/bulk_import.py:735 netbox/dcim/forms/bulk_import.py:761 +#: netbox/dcim/forms/bulk_import.py:787 netbox/dcim/forms/bulk_import.py:807 +#: netbox/dcim/forms/bulk_import.py:893 netbox/dcim/forms/bulk_import.py:987 +#: netbox/dcim/forms/bulk_import.py:1029 netbox/dcim/forms/bulk_import.py:1332 +#: netbox/dcim/forms/bulk_import.py:1495 netbox/dcim/forms/filtersets.py:956 +#: netbox/dcim/forms/filtersets.py:1055 netbox/dcim/forms/filtersets.py:1176 +#: netbox/dcim/forms/filtersets.py:1248 netbox/dcim/forms/filtersets.py:1273 +#: netbox/dcim/forms/filtersets.py:1297 netbox/dcim/forms/filtersets.py:1317 +#: netbox/dcim/forms/filtersets.py:1358 netbox/dcim/forms/filtersets.py:1455 +#: netbox/dcim/forms/filtersets.py:1479 netbox/dcim/forms/model_forms.py:714 +#: netbox/dcim/forms/model_forms.py:720 netbox/dcim/forms/object_import.py:84 #: netbox/dcim/forms/object_import.py:113 -#: netbox/dcim/forms/object_import.py:145 netbox/dcim/tables/devices.py:178 -#: netbox/dcim/tables/devices.py:814 netbox/dcim/tables/power.py:77 -#: netbox/dcim/tables/racks.py:138 netbox/extras/forms/bulk_import.py:42 +#: netbox/dcim/forms/object_import.py:146 netbox/dcim/tables/devices.py:189 +#: netbox/dcim/tables/devices.py:846 netbox/dcim/tables/power.py:77 +#: netbox/dcim/tables/racks.py:137 netbox/extras/forms/bulk_import.py:42 #: netbox/extras/tables/tables.py:405 netbox/extras/tables/tables.py:465 -#: netbox/netbox/tables/tables.py:240 +#: netbox/netbox/tables/tables.py:243 #: netbox/templates/circuits/circuit.html:30 +#: netbox/templates/circuits/virtualcircuit.html:39 +#: netbox/templates/circuits/virtualcircuittermination.html:64 #: netbox/templates/core/datasource.html:38 #: netbox/templates/dcim/cable.html:15 #: netbox/templates/dcim/consoleport.html:36 #: netbox/templates/dcim/consoleserverport.html:36 #: netbox/templates/dcim/frontport.html:36 #: netbox/templates/dcim/interface.html:46 -#: netbox/templates/dcim/interface.html:169 -#: netbox/templates/dcim/interface.html:311 +#: netbox/templates/dcim/interface.html:226 +#: netbox/templates/dcim/interface.html:368 #: netbox/templates/dcim/powerfeed.html:32 #: netbox/templates/dcim/poweroutlet.html:36 #: netbox/templates/dcim/powerport.html:36 @@ -630,65 +725,78 @@ msgstr "色" #: netbox/templates/vpn/l2vpn.html:22 #: netbox/templates/wireless/inc/authentication_attrs.html:8 #: netbox/templates/wireless/inc/wirelesslink_interface.html:14 -#: netbox/virtualization/forms/bulk_edit.py:60 -#: netbox/virtualization/forms/bulk_import.py:41 +#: netbox/virtualization/forms/bulk_edit.py:61 +#: netbox/virtualization/forms/bulk_import.py:42 #: netbox/virtualization/forms/filtersets.py:54 -#: netbox/virtualization/forms/model_forms.py:62 +#: netbox/virtualization/forms/model_forms.py:65 #: netbox/virtualization/tables/clusters.py:66 #: netbox/vpn/forms/bulk_edit.py:264 netbox/vpn/forms/bulk_import.py:264 -#: netbox/vpn/forms/filtersets.py:217 netbox/vpn/forms/model_forms.py:84 -#: netbox/vpn/forms/model_forms.py:119 netbox/vpn/forms/model_forms.py:231 +#: netbox/vpn/forms/filtersets.py:217 netbox/vpn/forms/model_forms.py:85 +#: netbox/vpn/forms/model_forms.py:120 netbox/vpn/forms/model_forms.py:232 msgid "Type" msgstr "タイプ" -#: netbox/circuits/forms/bulk_edit.py:128 -#: netbox/circuits/forms/bulk_import.py:80 -#: netbox/circuits/forms/filtersets.py:139 -#: netbox/circuits/forms/model_forms.py:98 +#: netbox/circuits/forms/bulk_edit.py:140 +#: netbox/circuits/forms/bulk_edit.py:326 +#: netbox/circuits/forms/bulk_import.py:87 +#: netbox/circuits/forms/bulk_import.py:214 +#: netbox/circuits/forms/filtersets.py:150 +#: netbox/circuits/forms/filtersets.py:345 +#: netbox/circuits/forms/model_forms.py:116 +#: netbox/circuits/forms/model_forms.py:330 +#: netbox/templates/circuits/virtualcircuit.html:31 +#: netbox/templates/circuits/virtualcircuittermination.html:34 msgid "Provider account" msgstr "プロバイダアカウント" -#: netbox/circuits/forms/bulk_edit.py:136 -#: netbox/circuits/forms/bulk_import.py:93 -#: netbox/circuits/forms/filtersets.py:150 netbox/core/forms/filtersets.py:38 -#: netbox/core/forms/filtersets.py:79 netbox/core/tables/data.py:23 +#: netbox/circuits/forms/bulk_edit.py:148 +#: netbox/circuits/forms/bulk_edit.py:336 +#: netbox/circuits/forms/bulk_import.py:100 +#: netbox/circuits/forms/bulk_import.py:227 +#: netbox/circuits/forms/filtersets.py:161 +#: netbox/circuits/forms/filtersets.py:361 netbox/core/forms/filtersets.py:38 +#: netbox/core/forms/filtersets.py:80 netbox/core/tables/data.py:23 #: netbox/core/tables/jobs.py:26 netbox/core/tables/tasks.py:88 -#: netbox/dcim/forms/bulk_edit.py:107 netbox/dcim/forms/bulk_edit.py:182 -#: netbox/dcim/forms/bulk_edit.py:352 netbox/dcim/forms/bulk_edit.py:706 -#: netbox/dcim/forms/bulk_edit.py:771 netbox/dcim/forms/bulk_edit.py:803 -#: netbox/dcim/forms/bulk_edit.py:930 netbox/dcim/forms/bulk_edit.py:1744 -#: netbox/dcim/forms/bulk_import.py:88 netbox/dcim/forms/bulk_import.py:147 -#: netbox/dcim/forms/bulk_import.py:248 netbox/dcim/forms/bulk_import.py:527 -#: netbox/dcim/forms/bulk_import.py:681 netbox/dcim/forms/bulk_import.py:1229 -#: netbox/dcim/forms/bulk_import.py:1393 netbox/dcim/forms/bulk_import.py:1457 -#: netbox/dcim/forms/filtersets.py:178 netbox/dcim/forms/filtersets.py:237 -#: netbox/dcim/forms/filtersets.py:359 netbox/dcim/forms/filtersets.py:799 -#: netbox/dcim/forms/filtersets.py:924 netbox/dcim/forms/filtersets.py:958 -#: netbox/dcim/forms/filtersets.py:1059 netbox/dcim/forms/filtersets.py:1170 -#: netbox/dcim/tables/devices.py:140 netbox/dcim/tables/devices.py:817 -#: netbox/dcim/tables/devices.py:1063 netbox/dcim/tables/modules.py:70 -#: netbox/dcim/tables/power.py:74 netbox/dcim/tables/racks.py:126 -#: netbox/dcim/tables/sites.py:82 netbox/dcim/tables/sites.py:138 -#: netbox/ipam/forms/bulk_edit.py:256 netbox/ipam/forms/bulk_edit.py:306 -#: netbox/ipam/forms/bulk_edit.py:354 netbox/ipam/forms/bulk_edit.py:506 -#: netbox/ipam/forms/bulk_import.py:192 netbox/ipam/forms/bulk_import.py:257 -#: netbox/ipam/forms/bulk_import.py:293 netbox/ipam/forms/bulk_import.py:474 -#: netbox/ipam/forms/filtersets.py:210 netbox/ipam/forms/filtersets.py:281 -#: netbox/ipam/forms/filtersets.py:355 netbox/ipam/forms/filtersets.py:501 -#: netbox/ipam/forms/model_forms.py:501 netbox/ipam/tables/ip.py:237 -#: netbox/ipam/tables/ip.py:312 netbox/ipam/tables/ip.py:363 -#: netbox/ipam/tables/ip.py:426 netbox/ipam/tables/ip.py:453 -#: netbox/ipam/tables/vlans.py:126 netbox/ipam/tables/vlans.py:232 +#: netbox/dcim/forms/bulk_edit.py:110 netbox/dcim/forms/bulk_edit.py:185 +#: netbox/dcim/forms/bulk_edit.py:355 netbox/dcim/forms/bulk_edit.py:709 +#: netbox/dcim/forms/bulk_edit.py:774 netbox/dcim/forms/bulk_edit.py:806 +#: netbox/dcim/forms/bulk_edit.py:933 netbox/dcim/forms/bulk_edit.py:1723 +#: netbox/dcim/forms/bulk_edit.py:1765 netbox/dcim/forms/bulk_import.py:90 +#: netbox/dcim/forms/bulk_import.py:149 netbox/dcim/forms/bulk_import.py:250 +#: netbox/dcim/forms/bulk_import.py:532 netbox/dcim/forms/bulk_import.py:686 +#: netbox/dcim/forms/bulk_import.py:1137 netbox/dcim/forms/bulk_import.py:1326 +#: netbox/dcim/forms/bulk_import.py:1490 netbox/dcim/forms/bulk_import.py:1554 +#: netbox/dcim/forms/filtersets.py:179 netbox/dcim/forms/filtersets.py:238 +#: netbox/dcim/forms/filtersets.py:360 netbox/dcim/forms/filtersets.py:800 +#: netbox/dcim/forms/filtersets.py:925 netbox/dcim/forms/filtersets.py:959 +#: netbox/dcim/forms/filtersets.py:1060 netbox/dcim/forms/filtersets.py:1171 +#: netbox/dcim/forms/filtersets.py:1562 netbox/dcim/tables/devices.py:151 +#: netbox/dcim/tables/devices.py:849 netbox/dcim/tables/devices.py:983 +#: netbox/dcim/tables/devices.py:1095 netbox/dcim/tables/modules.py:70 +#: netbox/dcim/tables/power.py:74 netbox/dcim/tables/racks.py:125 +#: netbox/dcim/tables/sites.py:82 netbox/dcim/tables/sites.py:137 +#: netbox/ipam/forms/bulk_edit.py:240 netbox/ipam/forms/bulk_edit.py:290 +#: netbox/ipam/forms/bulk_edit.py:338 netbox/ipam/forms/bulk_edit.py:490 +#: netbox/ipam/forms/bulk_import.py:188 netbox/ipam/forms/bulk_import.py:256 +#: netbox/ipam/forms/bulk_import.py:292 netbox/ipam/forms/bulk_import.py:473 +#: netbox/ipam/forms/filtersets.py:212 netbox/ipam/forms/filtersets.py:284 +#: netbox/ipam/forms/filtersets.py:358 netbox/ipam/forms/filtersets.py:542 +#: netbox/ipam/forms/model_forms.py:511 netbox/ipam/tables/ip.py:183 +#: netbox/ipam/tables/ip.py:264 netbox/ipam/tables/ip.py:315 +#: netbox/ipam/tables/ip.py:378 netbox/ipam/tables/ip.py:405 +#: netbox/ipam/tables/vlans.py:95 netbox/ipam/tables/vlans.py:208 #: netbox/templates/circuits/circuit.html:34 +#: netbox/templates/circuits/virtualcircuit.html:43 #: netbox/templates/core/datasource.html:46 netbox/templates/core/job.html:48 #: netbox/templates/core/rq_task.html:81 netbox/templates/core/system.html:18 #: netbox/templates/dcim/cable.html:19 netbox/templates/dcim/device.html:178 +#: netbox/templates/dcim/inventoryitem.html:36 #: netbox/templates/dcim/location.html:45 netbox/templates/dcim/module.html:69 #: netbox/templates/dcim/powerfeed.html:36 netbox/templates/dcim/rack.html:41 #: netbox/templates/dcim/site.html:43 #: netbox/templates/extras/script_list.html:48 #: netbox/templates/ipam/ipaddress.html:37 -#: netbox/templates/ipam/iprange.html:54 netbox/templates/ipam/prefix.html:73 +#: netbox/templates/ipam/iprange.html:54 netbox/templates/ipam/prefix.html:69 #: netbox/templates/ipam/vlan.html:48 #: netbox/templates/virtualization/cluster.html:21 #: netbox/templates/virtualization/virtualmachine.html:19 @@ -696,63 +804,67 @@ msgstr "プロバイダアカウント" #: netbox/templates/wireless/wirelesslan.html:22 #: netbox/templates/wireless/wirelesslink.html:17 #: netbox/users/forms/filtersets.py:32 netbox/users/forms/model_forms.py:194 -#: netbox/virtualization/forms/bulk_edit.py:70 -#: netbox/virtualization/forms/bulk_edit.py:118 -#: netbox/virtualization/forms/bulk_import.py:54 -#: netbox/virtualization/forms/bulk_import.py:80 -#: netbox/virtualization/forms/filtersets.py:62 -#: netbox/virtualization/forms/filtersets.py:160 +#: netbox/virtualization/forms/bulk_edit.py:71 +#: netbox/virtualization/forms/bulk_edit.py:100 +#: netbox/virtualization/forms/bulk_import.py:55 +#: netbox/virtualization/forms/bulk_import.py:86 +#: netbox/virtualization/forms/filtersets.py:82 +#: netbox/virtualization/forms/filtersets.py:165 #: netbox/virtualization/tables/clusters.py:74 -#: netbox/virtualization/tables/virtualmachines.py:60 +#: netbox/virtualization/tables/virtualmachines.py:30 #: netbox/vpn/forms/bulk_edit.py:39 netbox/vpn/forms/bulk_import.py:37 #: netbox/vpn/forms/filtersets.py:47 netbox/vpn/tables/tunnels.py:48 -#: netbox/wireless/forms/bulk_edit.py:43 -#: netbox/wireless/forms/bulk_edit.py:105 -#: netbox/wireless/forms/bulk_import.py:43 -#: netbox/wireless/forms/bulk_import.py:84 -#: netbox/wireless/forms/filtersets.py:49 -#: netbox/wireless/forms/filtersets.py:83 +#: netbox/wireless/forms/bulk_edit.py:45 +#: netbox/wireless/forms/bulk_edit.py:108 +#: netbox/wireless/forms/bulk_import.py:45 +#: netbox/wireless/forms/bulk_import.py:89 +#: netbox/wireless/forms/filtersets.py:52 +#: netbox/wireless/forms/filtersets.py:111 #: netbox/wireless/tables/wirelesslan.py:52 -#: netbox/wireless/tables/wirelesslink.py:20 +#: netbox/wireless/tables/wirelesslink.py:19 msgid "Status" msgstr "ステータス" -#: netbox/circuits/forms/bulk_edit.py:142 -#: netbox/circuits/forms/bulk_edit.py:233 -#: netbox/circuits/forms/bulk_import.py:98 -#: netbox/circuits/forms/bulk_import.py:158 -#: netbox/circuits/forms/filtersets.py:119 -#: netbox/circuits/forms/filtersets.py:241 netbox/dcim/forms/bulk_edit.py:123 -#: netbox/dcim/forms/bulk_edit.py:188 netbox/dcim/forms/bulk_edit.py:347 -#: netbox/dcim/forms/bulk_edit.py:467 netbox/dcim/forms/bulk_edit.py:696 -#: netbox/dcim/forms/bulk_edit.py:809 netbox/dcim/forms/bulk_edit.py:1749 -#: netbox/dcim/forms/bulk_import.py:107 netbox/dcim/forms/bulk_import.py:152 -#: netbox/dcim/forms/bulk_import.py:241 netbox/dcim/forms/bulk_import.py:356 -#: netbox/dcim/forms/bulk_import.py:501 netbox/dcim/forms/bulk_import.py:1241 -#: netbox/dcim/forms/bulk_import.py:1450 netbox/dcim/forms/filtersets.py:173 -#: netbox/dcim/forms/filtersets.py:205 netbox/dcim/forms/filtersets.py:323 -#: netbox/dcim/forms/filtersets.py:399 netbox/dcim/forms/filtersets.py:420 -#: netbox/dcim/forms/filtersets.py:722 netbox/dcim/forms/filtersets.py:916 -#: netbox/dcim/forms/filtersets.py:978 netbox/dcim/forms/filtersets.py:1008 -#: netbox/dcim/forms/filtersets.py:1130 netbox/dcim/tables/power.py:88 -#: netbox/extras/filtersets.py:612 netbox/extras/forms/filtersets.py:323 -#: netbox/extras/forms/filtersets.py:396 netbox/ipam/forms/bulk_edit.py:43 -#: netbox/ipam/forms/bulk_edit.py:68 netbox/ipam/forms/bulk_edit.py:112 -#: netbox/ipam/forms/bulk_edit.py:141 netbox/ipam/forms/bulk_edit.py:166 -#: netbox/ipam/forms/bulk_edit.py:251 netbox/ipam/forms/bulk_edit.py:301 -#: netbox/ipam/forms/bulk_edit.py:349 netbox/ipam/forms/bulk_edit.py:501 -#: netbox/ipam/forms/bulk_import.py:38 netbox/ipam/forms/bulk_import.py:67 -#: netbox/ipam/forms/bulk_import.py:95 netbox/ipam/forms/bulk_import.py:115 -#: netbox/ipam/forms/bulk_import.py:135 netbox/ipam/forms/bulk_import.py:164 -#: netbox/ipam/forms/bulk_import.py:250 netbox/ipam/forms/bulk_import.py:286 -#: netbox/ipam/forms/bulk_import.py:467 netbox/ipam/forms/filtersets.py:48 -#: netbox/ipam/forms/filtersets.py:68 netbox/ipam/forms/filtersets.py:100 -#: netbox/ipam/forms/filtersets.py:120 netbox/ipam/forms/filtersets.py:143 -#: netbox/ipam/forms/filtersets.py:174 netbox/ipam/forms/filtersets.py:267 -#: netbox/ipam/forms/filtersets.py:310 netbox/ipam/forms/filtersets.py:469 -#: netbox/ipam/tables/ip.py:456 netbox/ipam/tables/vlans.py:229 -#: netbox/templates/circuits/circuit.html:38 +#: netbox/circuits/forms/bulk_edit.py:154 +#: netbox/circuits/forms/bulk_edit.py:271 +#: netbox/circuits/forms/bulk_edit.py:342 +#: netbox/circuits/forms/bulk_import.py:111 +#: netbox/circuits/forms/bulk_import.py:170 +#: netbox/circuits/forms/bulk_import.py:232 +#: netbox/circuits/forms/filtersets.py:130 +#: netbox/circuits/forms/filtersets.py:277 +#: netbox/circuits/forms/filtersets.py:331 netbox/dcim/forms/bulk_edit.py:126 +#: netbox/dcim/forms/bulk_edit.py:191 netbox/dcim/forms/bulk_edit.py:350 +#: netbox/dcim/forms/bulk_edit.py:470 netbox/dcim/forms/bulk_edit.py:699 +#: netbox/dcim/forms/bulk_edit.py:812 netbox/dcim/forms/bulk_edit.py:1770 +#: netbox/dcim/forms/bulk_import.py:109 netbox/dcim/forms/bulk_import.py:154 +#: netbox/dcim/forms/bulk_import.py:243 netbox/dcim/forms/bulk_import.py:358 +#: netbox/dcim/forms/bulk_import.py:506 netbox/dcim/forms/bulk_import.py:1338 +#: netbox/dcim/forms/bulk_import.py:1547 netbox/dcim/forms/filtersets.py:174 +#: netbox/dcim/forms/filtersets.py:206 netbox/dcim/forms/filtersets.py:324 +#: netbox/dcim/forms/filtersets.py:400 netbox/dcim/forms/filtersets.py:421 +#: netbox/dcim/forms/filtersets.py:723 netbox/dcim/forms/filtersets.py:917 +#: netbox/dcim/forms/filtersets.py:979 netbox/dcim/forms/filtersets.py:1009 +#: netbox/dcim/forms/filtersets.py:1131 netbox/dcim/tables/power.py:88 +#: netbox/extras/filtersets.py:612 netbox/extras/forms/filtersets.py:330 +#: netbox/extras/forms/filtersets.py:403 netbox/ipam/forms/bulk_edit.py:46 +#: netbox/ipam/forms/bulk_edit.py:71 netbox/ipam/forms/bulk_edit.py:115 +#: netbox/ipam/forms/bulk_edit.py:144 netbox/ipam/forms/bulk_edit.py:169 +#: netbox/ipam/forms/bulk_edit.py:235 netbox/ipam/forms/bulk_edit.py:285 +#: netbox/ipam/forms/bulk_edit.py:333 netbox/ipam/forms/bulk_edit.py:485 +#: netbox/ipam/forms/bulk_import.py:41 netbox/ipam/forms/bulk_import.py:70 +#: netbox/ipam/forms/bulk_import.py:98 netbox/ipam/forms/bulk_import.py:118 +#: netbox/ipam/forms/bulk_import.py:138 netbox/ipam/forms/bulk_import.py:167 +#: netbox/ipam/forms/bulk_import.py:249 netbox/ipam/forms/bulk_import.py:285 +#: netbox/ipam/forms/bulk_import.py:466 netbox/ipam/forms/filtersets.py:50 +#: netbox/ipam/forms/filtersets.py:70 netbox/ipam/forms/filtersets.py:102 +#: netbox/ipam/forms/filtersets.py:122 netbox/ipam/forms/filtersets.py:145 +#: netbox/ipam/forms/filtersets.py:176 netbox/ipam/forms/filtersets.py:270 +#: netbox/ipam/forms/filtersets.py:313 netbox/ipam/forms/filtersets.py:510 +#: netbox/ipam/tables/ip.py:408 netbox/ipam/tables/vlans.py:205 +#: netbox/templates/circuits/circuit.html:48 #: netbox/templates/circuits/circuitgroup.html:36 +#: netbox/templates/circuits/virtualcircuit.html:47 #: netbox/templates/dcim/cable.html:23 netbox/templates/dcim/device.html:79 #: netbox/templates/dcim/location.html:49 #: netbox/templates/dcim/powerfeed.html:44 netbox/templates/dcim/rack.html:32 @@ -769,114 +881,181 @@ msgstr "ステータス" #: netbox/templates/virtualization/cluster.html:33 #: netbox/templates/virtualization/virtualmachine.html:39 #: netbox/templates/vpn/l2vpn.html:30 netbox/templates/vpn/tunnel.html:49 -#: netbox/templates/wireless/wirelesslan.html:34 +#: netbox/templates/wireless/wirelesslan.html:42 #: netbox/templates/wireless/wirelesslink.html:25 -#: netbox/tenancy/forms/forms.py:25 netbox/tenancy/forms/forms.py:48 -#: netbox/tenancy/forms/model_forms.py:52 netbox/tenancy/tables/columns.py:64 -#: netbox/virtualization/forms/bulk_edit.py:76 -#: netbox/virtualization/forms/bulk_edit.py:155 -#: netbox/virtualization/forms/bulk_import.py:66 -#: netbox/virtualization/forms/bulk_import.py:115 +#: netbox/tenancy/forms/forms.py:25 netbox/tenancy/forms/forms.py:49 +#: netbox/tenancy/forms/model_forms.py:52 netbox/tenancy/tables/columns.py:49 +#: netbox/virtualization/forms/bulk_edit.py:77 +#: netbox/virtualization/forms/bulk_edit.py:137 +#: netbox/virtualization/forms/bulk_import.py:67 +#: netbox/virtualization/forms/bulk_import.py:121 #: netbox/virtualization/forms/filtersets.py:47 -#: netbox/virtualization/forms/filtersets.py:105 +#: netbox/virtualization/forms/filtersets.py:110 #: netbox/vpn/forms/bulk_edit.py:59 netbox/vpn/forms/bulk_edit.py:269 #: netbox/vpn/forms/bulk_import.py:59 netbox/vpn/forms/bulk_import.py:258 -#: netbox/vpn/forms/filtersets.py:214 netbox/wireless/forms/bulk_edit.py:63 -#: netbox/wireless/forms/bulk_edit.py:110 -#: netbox/wireless/forms/bulk_import.py:55 -#: netbox/wireless/forms/bulk_import.py:97 -#: netbox/wireless/forms/filtersets.py:35 -#: netbox/wireless/forms/filtersets.py:75 +#: netbox/vpn/forms/filtersets.py:214 netbox/wireless/forms/bulk_edit.py:65 +#: netbox/wireless/forms/bulk_edit.py:113 +#: netbox/wireless/forms/bulk_import.py:57 +#: netbox/wireless/forms/bulk_import.py:102 +#: netbox/wireless/forms/filtersets.py:38 +#: netbox/wireless/forms/filtersets.py:103 msgid "Tenant" msgstr "テナント" -#: netbox/circuits/forms/bulk_edit.py:147 -#: netbox/circuits/forms/filtersets.py:174 +#: netbox/circuits/forms/bulk_edit.py:159 +#: netbox/circuits/forms/filtersets.py:190 msgid "Install date" msgstr "開通日" -#: netbox/circuits/forms/bulk_edit.py:152 -#: netbox/circuits/forms/filtersets.py:179 +#: netbox/circuits/forms/bulk_edit.py:164 +#: netbox/circuits/forms/filtersets.py:195 msgid "Termination date" msgstr "終了日" -#: netbox/circuits/forms/bulk_edit.py:158 -#: netbox/circuits/forms/filtersets.py:186 +#: netbox/circuits/forms/bulk_edit.py:170 +#: netbox/circuits/forms/filtersets.py:202 msgid "Commit rate (Kbps)" msgstr "保証帯域 (Kbps)" -#: netbox/circuits/forms/bulk_edit.py:173 -#: netbox/circuits/forms/model_forms.py:112 +#: netbox/circuits/forms/bulk_edit.py:176 +#: netbox/circuits/forms/filtersets.py:208 +#: netbox/circuits/forms/model_forms.py:136 +#: netbox/templates/circuits/circuit.html:38 +#: netbox/templates/wireless/wirelesslink.html:38 +#: netbox/wireless/forms/bulk_edit.py:132 +#: netbox/wireless/forms/filtersets.py:130 +#: netbox/wireless/forms/model_forms.py:168 +msgid "Distance" +msgstr "距離" + +#: netbox/circuits/forms/bulk_edit.py:181 +#: netbox/circuits/forms/bulk_import.py:105 +#: netbox/circuits/forms/bulk_import.py:108 +#: netbox/circuits/forms/filtersets.py:212 +#: netbox/wireless/forms/bulk_edit.py:137 +#: netbox/wireless/forms/bulk_import.py:121 +#: netbox/wireless/forms/bulk_import.py:124 +#: netbox/wireless/forms/filtersets.py:134 +msgid "Distance unit" +msgstr "距離単位" + +#: netbox/circuits/forms/bulk_edit.py:196 +#: netbox/circuits/forms/model_forms.py:141 msgid "Service Parameters" msgstr "サービス情報" -#: netbox/circuits/forms/bulk_edit.py:174 -#: netbox/circuits/forms/model_forms.py:113 -#: netbox/circuits/forms/model_forms.py:183 -#: netbox/dcim/forms/model_forms.py:139 netbox/dcim/forms/model_forms.py:181 -#: netbox/dcim/forms/model_forms.py:266 netbox/dcim/forms/model_forms.py:323 -#: netbox/dcim/forms/model_forms.py:768 netbox/dcim/forms/model_forms.py:1699 -#: netbox/ipam/forms/model_forms.py:64 netbox/ipam/forms/model_forms.py:81 -#: netbox/ipam/forms/model_forms.py:115 netbox/ipam/forms/model_forms.py:136 -#: netbox/ipam/forms/model_forms.py:160 netbox/ipam/forms/model_forms.py:232 -#: netbox/ipam/forms/model_forms.py:261 netbox/ipam/forms/model_forms.py:320 +#: netbox/circuits/forms/bulk_edit.py:197 +#: netbox/circuits/forms/filtersets.py:73 +#: netbox/circuits/forms/filtersets.py:91 +#: netbox/circuits/forms/filtersets.py:110 +#: netbox/circuits/forms/filtersets.py:127 +#: netbox/circuits/forms/filtersets.py:315 +#: netbox/circuits/forms/filtersets.py:330 netbox/core/forms/filtersets.py:68 +#: netbox/core/forms/filtersets.py:136 netbox/dcim/forms/bulk_edit.py:846 +#: netbox/dcim/forms/filtersets.py:173 netbox/dcim/forms/filtersets.py:205 +#: netbox/dcim/forms/filtersets.py:916 netbox/dcim/forms/filtersets.py:1008 +#: netbox/dcim/forms/filtersets.py:1132 netbox/dcim/forms/filtersets.py:1240 +#: netbox/dcim/forms/filtersets.py:1264 netbox/dcim/forms/filtersets.py:1289 +#: netbox/dcim/forms/filtersets.py:1308 netbox/dcim/forms/filtersets.py:1332 +#: netbox/dcim/forms/filtersets.py:1446 netbox/dcim/forms/filtersets.py:1470 +#: netbox/dcim/forms/filtersets.py:1494 netbox/dcim/forms/filtersets.py:1512 +#: netbox/dcim/forms/filtersets.py:1528 netbox/extras/forms/bulk_edit.py:90 +#: netbox/extras/forms/filtersets.py:45 netbox/extras/forms/filtersets.py:137 +#: netbox/extras/forms/filtersets.py:169 netbox/extras/forms/filtersets.py:210 +#: netbox/extras/forms/filtersets.py:227 netbox/extras/forms/filtersets.py:258 +#: netbox/extras/forms/filtersets.py:282 netbox/extras/forms/filtersets.py:449 +#: netbox/ipam/forms/filtersets.py:101 netbox/ipam/forms/filtersets.py:269 +#: netbox/ipam/forms/filtersets.py:310 netbox/ipam/forms/filtersets.py:385 +#: netbox/ipam/forms/filtersets.py:470 netbox/ipam/forms/filtersets.py:483 +#: netbox/ipam/forms/filtersets.py:508 netbox/ipam/forms/filtersets.py:579 +#: netbox/ipam/forms/filtersets.py:597 netbox/netbox/tables/tables.py:259 +#: netbox/virtualization/forms/filtersets.py:45 +#: netbox/virtualization/forms/filtersets.py:108 +#: netbox/virtualization/forms/filtersets.py:203 +#: netbox/virtualization/forms/filtersets.py:248 +#: netbox/vpn/forms/filtersets.py:213 netbox/wireless/forms/bulk_edit.py:153 +#: netbox/wireless/forms/filtersets.py:36 +#: netbox/wireless/forms/filtersets.py:102 +msgid "Attributes" +msgstr "属性" + +#: netbox/circuits/forms/bulk_edit.py:198 +#: netbox/circuits/forms/bulk_edit.py:356 +#: netbox/circuits/forms/model_forms.py:142 +#: netbox/circuits/forms/model_forms.py:240 +#: netbox/circuits/forms/model_forms.py:345 +#: netbox/dcim/forms/model_forms.py:143 netbox/dcim/forms/model_forms.py:185 +#: netbox/dcim/forms/model_forms.py:274 netbox/dcim/forms/model_forms.py:331 +#: netbox/dcim/forms/model_forms.py:780 netbox/dcim/forms/model_forms.py:1744 +#: netbox/ipam/forms/model_forms.py:67 netbox/ipam/forms/model_forms.py:84 +#: netbox/ipam/forms/model_forms.py:119 netbox/ipam/forms/model_forms.py:141 +#: netbox/ipam/forms/model_forms.py:166 netbox/ipam/forms/model_forms.py:233 +#: netbox/ipam/forms/model_forms.py:271 netbox/ipam/forms/model_forms.py:330 #: netbox/netbox/navigation/menu.py:24 #: netbox/templates/dcim/device_edit.html:85 #: netbox/templates/dcim/htmx/cable_edit.html:72 #: netbox/templates/ipam/ipaddress_bulk_add.html:27 -#: netbox/templates/ipam/vlan_edit.html:22 +#: netbox/templates/ipam/vlan_edit.html:30 #: netbox/virtualization/forms/model_forms.py:80 -#: netbox/virtualization/forms/model_forms.py:222 +#: netbox/virtualization/forms/model_forms.py:229 #: netbox/vpn/forms/bulk_edit.py:78 netbox/vpn/forms/filtersets.py:44 -#: netbox/vpn/forms/model_forms.py:62 netbox/vpn/forms/model_forms.py:147 -#: netbox/vpn/forms/model_forms.py:411 netbox/wireless/forms/model_forms.py:54 -#: netbox/wireless/forms/model_forms.py:170 +#: netbox/vpn/forms/model_forms.py:63 netbox/vpn/forms/model_forms.py:148 +#: netbox/vpn/forms/model_forms.py:414 netbox/wireless/forms/model_forms.py:57 +#: netbox/wireless/forms/model_forms.py:173 msgid "Tenancy" msgstr "テナンシー" -#: netbox/circuits/forms/bulk_edit.py:193 -#: netbox/circuits/forms/bulk_edit.py:217 -#: netbox/circuits/forms/model_forms.py:155 -#: netbox/circuits/tables/circuits.py:117 -#: netbox/templates/circuits/inc/circuit_termination_fields.html:62 -#: netbox/templates/circuits/providernetwork.html:17 -msgid "Provider Network" -msgstr "プロバイダネットワーク" +#: netbox/circuits/forms/bulk_edit.py:215 +#: netbox/circuits/forms/model_forms.py:170 +#: netbox/dcim/forms/bulk_import.py:1299 netbox/dcim/forms/bulk_import.py:1317 +msgid "Termination type" +msgstr "終了タイプ" -#: netbox/circuits/forms/bulk_edit.py:199 +#: netbox/circuits/forms/bulk_edit.py:218 +#: netbox/circuits/forms/bulk_import.py:133 +#: netbox/circuits/forms/filtersets.py:225 +#: netbox/circuits/forms/model_forms.py:173 +#: netbox/templates/circuits/inc/circuit_termination.html:6 +#: netbox/templates/dcim/cable.html:68 netbox/templates/dcim/cable.html:72 +#: netbox/vpn/forms/bulk_import.py:100 netbox/vpn/forms/filtersets.py:77 +msgid "Termination" +msgstr "終了" + +#: netbox/circuits/forms/bulk_edit.py:226 msgid "Port speed (Kbps)" msgstr "ポートスピード (Kbps)" -#: netbox/circuits/forms/bulk_edit.py:203 +#: netbox/circuits/forms/bulk_edit.py:230 msgid "Upstream speed (Kbps)" msgstr "アップストリーム速度 (Kbps)" -#: netbox/circuits/forms/bulk_edit.py:206 netbox/dcim/forms/bulk_edit.py:966 -#: netbox/dcim/forms/bulk_edit.py:1330 netbox/dcim/forms/bulk_edit.py:1347 -#: netbox/dcim/forms/bulk_edit.py:1364 netbox/dcim/forms/bulk_edit.py:1382 -#: netbox/dcim/forms/bulk_edit.py:1477 netbox/dcim/forms/bulk_edit.py:1637 -#: netbox/dcim/forms/bulk_edit.py:1654 +#: netbox/circuits/forms/bulk_edit.py:233 netbox/dcim/forms/bulk_edit.py:969 +#: netbox/dcim/forms/bulk_edit.py:1333 netbox/dcim/forms/bulk_edit.py:1350 +#: netbox/dcim/forms/bulk_edit.py:1367 netbox/dcim/forms/bulk_edit.py:1385 +#: netbox/dcim/forms/bulk_edit.py:1480 netbox/dcim/forms/bulk_edit.py:1652 +#: netbox/dcim/forms/bulk_edit.py:1669 msgid "Mark connected" msgstr "接続済みにする" -#: netbox/circuits/forms/bulk_edit.py:219 -#: netbox/circuits/forms/model_forms.py:157 -#: netbox/templates/circuits/inc/circuit_termination_fields.html:54 +#: netbox/circuits/forms/bulk_edit.py:243 +#: netbox/circuits/forms/model_forms.py:184 +#: netbox/templates/circuits/inc/circuit_termination_fields.html:55 #: netbox/templates/dcim/frontport.html:121 -#: netbox/templates/dcim/interface.html:193 +#: netbox/templates/dcim/interface.html:250 #: netbox/templates/dcim/rearport.html:111 msgid "Circuit Termination" msgstr "回線終端" -#: netbox/circuits/forms/bulk_edit.py:221 -#: netbox/circuits/forms/model_forms.py:159 +#: netbox/circuits/forms/bulk_edit.py:245 +#: netbox/circuits/forms/model_forms.py:186 msgid "Termination Details" msgstr "終了詳細" -#: netbox/circuits/forms/bulk_edit.py:251 -#: netbox/circuits/forms/filtersets.py:268 -#: netbox/circuits/tables/circuits.py:168 netbox/dcim/forms/model_forms.py:551 -#: netbox/templates/circuits/circuitgroupassignment.html:30 +#: netbox/circuits/forms/bulk_edit.py:289 +#: netbox/circuits/forms/bulk_import.py:188 +#: netbox/circuits/forms/filtersets.py:304 +#: netbox/circuits/tables/circuits.py:207 netbox/dcim/forms/model_forms.py:562 +#: netbox/templates/circuits/circuitgroupassignment.html:34 #: netbox/templates/dcim/device.html:133 #: netbox/templates/dcim/virtualchassis.html:68 #: netbox/templates/dcim/virtualchassis_edit.html:56 @@ -886,227 +1065,313 @@ msgstr "終了詳細" msgid "Priority" msgstr "優先度" -#: netbox/circuits/forms/bulk_import.py:39 -#: netbox/circuits/forms/bulk_import.py:54 -#: netbox/circuits/forms/bulk_import.py:77 -msgid "Assigned provider" -msgstr "割当プロバイダ" - -#: netbox/circuits/forms/bulk_import.py:83 -msgid "Assigned provider account" -msgstr "割当プロバイダアカウント" - -#: netbox/circuits/forms/bulk_import.py:90 -msgid "Type of circuit" -msgstr "回線のタイプ" - -#: netbox/circuits/forms/bulk_import.py:95 netbox/dcim/forms/bulk_import.py:90 -#: netbox/dcim/forms/bulk_import.py:149 netbox/dcim/forms/bulk_import.py:250 -#: netbox/dcim/forms/bulk_import.py:529 netbox/dcim/forms/bulk_import.py:683 -#: netbox/dcim/forms/bulk_import.py:1395 netbox/ipam/forms/bulk_import.py:194 -#: netbox/ipam/forms/bulk_import.py:259 netbox/ipam/forms/bulk_import.py:295 -#: netbox/ipam/forms/bulk_import.py:476 -#: netbox/virtualization/forms/bulk_import.py:56 -#: netbox/virtualization/forms/bulk_import.py:82 -#: netbox/vpn/forms/bulk_import.py:39 netbox/wireless/forms/bulk_import.py:45 -msgid "Operational status" -msgstr "運用状況" - -#: netbox/circuits/forms/bulk_import.py:102 -#: netbox/circuits/forms/bulk_import.py:162 -#: netbox/dcim/forms/bulk_import.py:111 netbox/dcim/forms/bulk_import.py:156 -#: netbox/dcim/forms/bulk_import.py:360 netbox/dcim/forms/bulk_import.py:505 -#: netbox/dcim/forms/bulk_import.py:1245 netbox/dcim/forms/bulk_import.py:1390 -#: netbox/dcim/forms/bulk_import.py:1454 netbox/ipam/forms/bulk_import.py:42 -#: netbox/ipam/forms/bulk_import.py:71 netbox/ipam/forms/bulk_import.py:99 -#: netbox/ipam/forms/bulk_import.py:119 netbox/ipam/forms/bulk_import.py:139 -#: netbox/ipam/forms/bulk_import.py:168 netbox/ipam/forms/bulk_import.py:254 -#: netbox/ipam/forms/bulk_import.py:290 netbox/ipam/forms/bulk_import.py:471 -#: netbox/virtualization/forms/bulk_import.py:70 -#: netbox/virtualization/forms/bulk_import.py:119 -#: netbox/vpn/forms/bulk_import.py:63 netbox/wireless/forms/bulk_import.py:59 -#: netbox/wireless/forms/bulk_import.py:101 -msgid "Assigned tenant" -msgstr "割当テナント" - -#: netbox/circuits/forms/bulk_import.py:120 -#: netbox/templates/circuits/inc/circuit_termination.html:6 -#: netbox/templates/circuits/inc/circuit_termination_fields.html:15 -#: netbox/templates/dcim/cable.html:68 netbox/templates/dcim/cable.html:72 -#: netbox/vpn/forms/bulk_import.py:100 netbox/vpn/forms/filtersets.py:77 -msgid "Termination" -msgstr "終了" - -#: netbox/circuits/forms/bulk_import.py:130 -#: netbox/circuits/forms/filtersets.py:147 -#: netbox/circuits/forms/filtersets.py:227 -#: netbox/circuits/forms/model_forms.py:144 +#: netbox/circuits/forms/bulk_edit.py:321 +#: netbox/circuits/forms/bulk_import.py:208 +#: netbox/circuits/forms/filtersets.py:158 +#: netbox/circuits/forms/filtersets.py:263 +#: netbox/circuits/forms/filtersets.py:353 +#: netbox/circuits/forms/filtersets.py:391 +#: netbox/circuits/forms/model_forms.py:325 +#: netbox/circuits/tables/virtual_circuits.py:51 +#: netbox/circuits/tables/virtual_circuits.py:99 msgid "Provider network" msgstr "プロバイダネットワーク" -#: netbox/circuits/forms/filtersets.py:30 -#: netbox/circuits/forms/filtersets.py:118 -#: netbox/circuits/forms/filtersets.py:200 netbox/dcim/forms/bulk_edit.py:339 -#: netbox/dcim/forms/bulk_edit.py:447 netbox/dcim/forms/bulk_edit.py:688 -#: netbox/dcim/forms/bulk_edit.py:743 netbox/dcim/forms/bulk_edit.py:897 -#: netbox/dcim/forms/bulk_import.py:235 netbox/dcim/forms/bulk_import.py:337 -#: netbox/dcim/forms/bulk_import.py:568 netbox/dcim/forms/bulk_import.py:1339 -#: netbox/dcim/forms/bulk_import.py:1373 netbox/dcim/forms/filtersets.py:95 -#: netbox/dcim/forms/filtersets.py:322 netbox/dcim/forms/filtersets.py:356 -#: netbox/dcim/forms/filtersets.py:396 netbox/dcim/forms/filtersets.py:447 -#: netbox/dcim/forms/filtersets.py:719 netbox/dcim/forms/filtersets.py:762 -#: netbox/dcim/forms/filtersets.py:977 netbox/dcim/forms/filtersets.py:1006 -#: netbox/dcim/forms/filtersets.py:1026 netbox/dcim/forms/filtersets.py:1090 -#: netbox/dcim/forms/filtersets.py:1120 netbox/dcim/forms/filtersets.py:1129 -#: netbox/dcim/forms/filtersets.py:1240 netbox/dcim/forms/filtersets.py:1264 -#: netbox/dcim/forms/filtersets.py:1289 netbox/dcim/forms/filtersets.py:1308 -#: netbox/dcim/forms/filtersets.py:1331 netbox/dcim/forms/filtersets.py:1442 -#: netbox/dcim/forms/filtersets.py:1466 netbox/dcim/forms/filtersets.py:1490 -#: netbox/dcim/forms/filtersets.py:1508 netbox/dcim/forms/filtersets.py:1525 -#: netbox/dcim/forms/model_forms.py:180 netbox/dcim/forms/model_forms.py:243 -#: netbox/dcim/forms/model_forms.py:468 netbox/dcim/forms/model_forms.py:728 -#: netbox/dcim/tables/devices.py:157 netbox/dcim/tables/power.py:30 -#: netbox/dcim/tables/racks.py:118 netbox/dcim/tables/racks.py:212 -#: netbox/extras/filtersets.py:536 netbox/extras/forms/filtersets.py:320 -#: netbox/ipam/forms/filtersets.py:173 netbox/ipam/forms/filtersets.py:414 -#: netbox/ipam/forms/filtersets.py:437 netbox/ipam/forms/filtersets.py:467 +#: netbox/circuits/forms/bulk_edit.py:365 +#: netbox/circuits/forms/bulk_import.py:254 +#: netbox/circuits/forms/filtersets.py:381 +#: netbox/circuits/forms/model_forms.py:365 netbox/dcim/forms/bulk_edit.py:361 +#: netbox/dcim/forms/bulk_edit.py:1280 netbox/dcim/forms/bulk_edit.py:1713 +#: netbox/dcim/forms/bulk_import.py:255 netbox/dcim/forms/bulk_import.py:1106 +#: netbox/dcim/forms/filtersets.py:368 netbox/dcim/forms/filtersets.py:778 +#: netbox/dcim/forms/filtersets.py:1539 netbox/dcim/forms/model_forms.py:256 +#: netbox/dcim/forms/model_forms.py:1090 netbox/dcim/forms/model_forms.py:1559 +#: netbox/dcim/forms/object_import.py:182 netbox/dcim/tables/devices.py:180 +#: netbox/dcim/tables/devices.py:841 netbox/dcim/tables/devices.py:967 +#: netbox/dcim/tables/devicetypes.py:311 netbox/dcim/tables/racks.py:128 +#: netbox/extras/filtersets.py:552 netbox/ipam/forms/bulk_edit.py:245 +#: netbox/ipam/forms/bulk_edit.py:295 netbox/ipam/forms/bulk_edit.py:343 +#: netbox/ipam/forms/bulk_edit.py:495 netbox/ipam/forms/bulk_import.py:193 +#: netbox/ipam/forms/bulk_import.py:261 netbox/ipam/forms/bulk_import.py:297 +#: netbox/ipam/forms/bulk_import.py:478 netbox/ipam/forms/filtersets.py:240 +#: netbox/ipam/forms/filtersets.py:292 netbox/ipam/forms/filtersets.py:363 +#: netbox/ipam/forms/filtersets.py:550 netbox/ipam/forms/model_forms.py:194 +#: netbox/ipam/forms/model_forms.py:220 netbox/ipam/forms/model_forms.py:259 +#: netbox/ipam/forms/model_forms.py:686 netbox/ipam/tables/ip.py:209 +#: netbox/ipam/tables/ip.py:268 netbox/ipam/tables/ip.py:319 +#: netbox/ipam/tables/vlans.py:99 netbox/ipam/tables/vlans.py:211 +#: netbox/templates/circuits/virtualcircuittermination.html:42 +#: netbox/templates/dcim/device.html:182 +#: netbox/templates/dcim/inc/panels/inventory_items.html:20 +#: netbox/templates/dcim/interface.html:178 +#: netbox/templates/dcim/interface.html:280 +#: netbox/templates/dcim/inventoryitem.html:40 +#: netbox/templates/dcim/rack.html:49 netbox/templates/ipam/ipaddress.html:41 +#: netbox/templates/ipam/iprange.html:50 netbox/templates/ipam/prefix.html:73 +#: netbox/templates/ipam/role.html:19 netbox/templates/ipam/vlan.html:52 +#: netbox/templates/virtualization/virtualmachine.html:23 +#: netbox/templates/vpn/tunneltermination.html:17 +#: netbox/templates/wireless/inc/wirelesslink_interface.html:20 +#: netbox/tenancy/forms/bulk_edit.py:142 +#: netbox/tenancy/forms/filtersets.py:107 +#: netbox/tenancy/forms/model_forms.py:137 +#: netbox/tenancy/tables/contacts.py:102 +#: netbox/virtualization/forms/bulk_edit.py:127 +#: netbox/virtualization/forms/bulk_import.py:112 +#: netbox/virtualization/forms/filtersets.py:162 +#: netbox/virtualization/forms/model_forms.py:202 +#: netbox/virtualization/tables/virtualmachines.py:45 +#: netbox/vpn/forms/bulk_edit.py:87 netbox/vpn/forms/bulk_import.py:81 +#: netbox/vpn/forms/filtersets.py:85 netbox/vpn/forms/model_forms.py:79 +#: netbox/vpn/forms/model_forms.py:114 netbox/vpn/tables/tunnels.py:82 +msgid "Role" +msgstr "ロール" + +#: netbox/circuits/forms/bulk_import.py:46 +#: netbox/circuits/forms/bulk_import.py:61 +#: netbox/circuits/forms/bulk_import.py:84 +msgid "Assigned provider" +msgstr "割当プロバイダ" + +#: netbox/circuits/forms/bulk_import.py:90 +msgid "Assigned provider account" +msgstr "割当プロバイダアカウント" + +#: netbox/circuits/forms/bulk_import.py:97 +msgid "Type of circuit" +msgstr "回線のタイプ" + +#: netbox/circuits/forms/bulk_import.py:102 +#: netbox/circuits/forms/bulk_import.py:229 +#: netbox/dcim/forms/bulk_import.py:92 netbox/dcim/forms/bulk_import.py:151 +#: netbox/dcim/forms/bulk_import.py:252 netbox/dcim/forms/bulk_import.py:534 +#: netbox/dcim/forms/bulk_import.py:688 netbox/dcim/forms/bulk_import.py:1139 +#: netbox/dcim/forms/bulk_import.py:1492 netbox/ipam/forms/bulk_import.py:190 +#: netbox/ipam/forms/bulk_import.py:258 netbox/ipam/forms/bulk_import.py:294 +#: netbox/ipam/forms/bulk_import.py:475 netbox/ipam/forms/bulk_import.py:488 +#: netbox/virtualization/forms/bulk_import.py:57 +#: netbox/virtualization/forms/bulk_import.py:88 +#: netbox/vpn/forms/bulk_import.py:39 netbox/wireless/forms/bulk_import.py:47 +msgid "Operational status" +msgstr "運用状況" + +#: netbox/circuits/forms/bulk_import.py:115 +#: netbox/circuits/forms/bulk_import.py:174 +#: netbox/circuits/forms/bulk_import.py:236 +#: netbox/dcim/forms/bulk_import.py:113 netbox/dcim/forms/bulk_import.py:158 +#: netbox/dcim/forms/bulk_import.py:362 netbox/dcim/forms/bulk_import.py:510 +#: netbox/dcim/forms/bulk_import.py:1342 netbox/dcim/forms/bulk_import.py:1487 +#: netbox/dcim/forms/bulk_import.py:1551 netbox/ipam/forms/bulk_import.py:45 +#: netbox/ipam/forms/bulk_import.py:74 netbox/ipam/forms/bulk_import.py:102 +#: netbox/ipam/forms/bulk_import.py:122 netbox/ipam/forms/bulk_import.py:142 +#: netbox/ipam/forms/bulk_import.py:171 netbox/ipam/forms/bulk_import.py:253 +#: netbox/ipam/forms/bulk_import.py:289 netbox/ipam/forms/bulk_import.py:470 +#: netbox/virtualization/forms/bulk_import.py:71 +#: netbox/virtualization/forms/bulk_import.py:125 +#: netbox/vpn/forms/bulk_import.py:63 netbox/wireless/forms/bulk_import.py:61 +#: netbox/wireless/forms/bulk_import.py:106 +msgid "Assigned tenant" +msgstr "割当テナント" + +#: netbox/circuits/forms/bulk_import.py:139 +msgid "Termination type (app & model)" +msgstr "終了タイプ (アプリとモデル)" + +#: netbox/circuits/forms/bulk_import.py:151 +#: netbox/circuits/forms/bulk_import.py:164 +msgid "Termination ID" +msgstr "ターミネーション ID" + +#: netbox/circuits/forms/bulk_import.py:185 +msgid "Circuit type (app & model)" +msgstr "回路タイプ (アプリとモデル)" + +#: netbox/circuits/forms/bulk_import.py:211 +msgid "The network to which this virtual circuit belongs" +msgstr "この仮想回線が属するネットワーク" + +#: netbox/circuits/forms/bulk_import.py:217 +msgid "Assigned provider account (if any)" +msgstr "割り当てられたプロバイダーアカウント (存在する場合)" + +#: netbox/circuits/forms/bulk_import.py:224 +msgid "Type of virtual circuit" +msgstr "仮想回線のタイプ" + +#: netbox/circuits/forms/bulk_import.py:256 netbox/vpn/forms/bulk_import.py:83 +msgid "Operational role" +msgstr "運用上のロール" + +#: netbox/circuits/forms/bulk_import.py:259 +#: netbox/circuits/forms/model_forms.py:368 +#: netbox/circuits/tables/virtual_circuits.py:112 +#: netbox/dcim/forms/bulk_import.py:1219 netbox/dcim/forms/model_forms.py:1164 +#: netbox/dcim/forms/model_forms.py:1433 netbox/dcim/forms/model_forms.py:1600 +#: netbox/dcim/forms/model_forms.py:1635 netbox/dcim/forms/model_forms.py:1765 +#: netbox/dcim/tables/connections.py:65 netbox/dcim/tables/devices.py:1141 +#: netbox/ipam/forms/bulk_import.py:317 netbox/ipam/forms/model_forms.py:290 +#: netbox/ipam/forms/model_forms.py:299 netbox/ipam/tables/fhrp.py:64 +#: netbox/ipam/tables/ip.py:324 netbox/ipam/tables/vlans.py:145 +#: netbox/templates/circuits/inc/circuit_termination_fields.html:52 +#: netbox/templates/circuits/virtualcircuittermination.html:53 +#: netbox/templates/circuits/virtualcircuittermination.html:60 +#: netbox/templates/dcim/frontport.html:106 +#: netbox/templates/dcim/interface.html:27 +#: netbox/templates/dcim/interface.html:241 +#: netbox/templates/dcim/interface.html:367 +#: netbox/templates/dcim/rearport.html:102 +#: netbox/templates/virtualization/vminterface.html:18 +#: netbox/templates/vpn/tunneltermination.html:31 +#: netbox/templates/wireless/inc/wirelesslink_interface.html:10 +#: netbox/templates/wireless/wirelesslink.html:10 +#: netbox/templates/wireless/wirelesslink.html:55 +#: netbox/virtualization/forms/model_forms.py:377 +#: netbox/vpn/forms/bulk_import.py:297 netbox/vpn/forms/model_forms.py:439 +#: netbox/vpn/forms/model_forms.py:448 +#: netbox/wireless/forms/model_forms.py:116 +#: netbox/wireless/forms/model_forms.py:158 +msgid "Interface" +msgstr "インタフェース" + +#: netbox/circuits/forms/filtersets.py:38 +#: netbox/circuits/forms/filtersets.py:129 +#: netbox/circuits/forms/filtersets.py:187 +#: netbox/circuits/forms/filtersets.py:245 +#: netbox/circuits/tables/circuits.py:144 netbox/dcim/forms/bulk_edit.py:342 +#: netbox/dcim/forms/bulk_edit.py:450 netbox/dcim/forms/bulk_edit.py:691 +#: netbox/dcim/forms/bulk_edit.py:746 netbox/dcim/forms/bulk_edit.py:900 +#: netbox/dcim/forms/bulk_import.py:237 netbox/dcim/forms/bulk_import.py:339 +#: netbox/dcim/forms/bulk_import.py:573 netbox/dcim/forms/bulk_import.py:1436 +#: netbox/dcim/forms/bulk_import.py:1470 netbox/dcim/forms/filtersets.py:96 +#: netbox/dcim/forms/filtersets.py:323 netbox/dcim/forms/filtersets.py:357 +#: netbox/dcim/forms/filtersets.py:397 netbox/dcim/forms/filtersets.py:448 +#: netbox/dcim/forms/filtersets.py:720 netbox/dcim/forms/filtersets.py:763 +#: netbox/dcim/forms/filtersets.py:978 netbox/dcim/forms/filtersets.py:1007 +#: netbox/dcim/forms/filtersets.py:1027 netbox/dcim/forms/filtersets.py:1091 +#: netbox/dcim/forms/filtersets.py:1121 netbox/dcim/forms/filtersets.py:1130 +#: netbox/dcim/forms/filtersets.py:1241 netbox/dcim/forms/filtersets.py:1265 +#: netbox/dcim/forms/filtersets.py:1290 netbox/dcim/forms/filtersets.py:1309 +#: netbox/dcim/forms/filtersets.py:1336 netbox/dcim/forms/filtersets.py:1447 +#: netbox/dcim/forms/filtersets.py:1471 netbox/dcim/forms/filtersets.py:1495 +#: netbox/dcim/forms/filtersets.py:1513 netbox/dcim/forms/filtersets.py:1530 +#: netbox/dcim/forms/model_forms.py:184 netbox/dcim/forms/model_forms.py:248 +#: netbox/dcim/forms/model_forms.py:478 netbox/dcim/forms/model_forms.py:739 +#: netbox/dcim/tables/devices.py:168 netbox/dcim/tables/power.py:30 +#: netbox/dcim/tables/racks.py:117 netbox/dcim/tables/racks.py:211 +#: netbox/extras/filtersets.py:536 netbox/extras/forms/filtersets.py:327 +#: netbox/ipam/forms/filtersets.py:234 netbox/ipam/forms/filtersets.py:417 +#: netbox/ipam/forms/filtersets.py:440 netbox/ipam/forms/filtersets.py:507 #: netbox/templates/dcim/device.html:26 #: netbox/templates/dcim/device_edit.html:30 #: netbox/templates/dcim/inc/cable_termination.html:12 #: netbox/templates/dcim/location.html:26 #: netbox/templates/dcim/powerpanel.html:26 netbox/templates/dcim/rack.html:24 #: netbox/templates/dcim/rackreservation.html:32 -#: netbox/virtualization/forms/filtersets.py:46 -#: netbox/virtualization/forms/filtersets.py:100 -#: netbox/wireless/forms/model_forms.py:87 -#: netbox/wireless/forms/model_forms.py:129 +#: netbox/virtualization/forms/filtersets.py:79 +#: netbox/virtualization/forms/filtersets.py:105 +#: netbox/wireless/forms/filtersets.py:93 +#: netbox/wireless/forms/model_forms.py:90 +#: netbox/wireless/forms/model_forms.py:132 msgid "Location" msgstr "ロケーション" -#: netbox/circuits/forms/filtersets.py:32 -#: netbox/circuits/forms/filtersets.py:120 netbox/dcim/forms/filtersets.py:144 -#: netbox/dcim/forms/filtersets.py:158 netbox/dcim/forms/filtersets.py:174 -#: netbox/dcim/forms/filtersets.py:206 netbox/dcim/forms/filtersets.py:328 -#: netbox/dcim/forms/filtersets.py:400 netbox/dcim/forms/filtersets.py:471 -#: netbox/dcim/forms/filtersets.py:723 netbox/dcim/forms/filtersets.py:1091 +#: netbox/circuits/forms/filtersets.py:40 +#: netbox/circuits/forms/filtersets.py:131 netbox/dcim/forms/filtersets.py:145 +#: netbox/dcim/forms/filtersets.py:159 netbox/dcim/forms/filtersets.py:175 +#: netbox/dcim/forms/filtersets.py:207 netbox/dcim/forms/filtersets.py:329 +#: netbox/dcim/forms/filtersets.py:401 netbox/dcim/forms/filtersets.py:472 +#: netbox/dcim/forms/filtersets.py:724 netbox/dcim/forms/filtersets.py:1092 #: netbox/netbox/navigation/menu.py:31 netbox/netbox/navigation/menu.py:33 -#: netbox/tenancy/forms/filtersets.py:42 netbox/tenancy/tables/columns.py:70 +#: netbox/tenancy/forms/filtersets.py:42 netbox/tenancy/tables/columns.py:55 #: netbox/tenancy/tables/contacts.py:25 netbox/tenancy/views.py:19 #: netbox/virtualization/forms/filtersets.py:37 #: netbox/virtualization/forms/filtersets.py:48 -#: netbox/virtualization/forms/filtersets.py:106 +#: netbox/virtualization/forms/filtersets.py:111 msgid "Contacts" msgstr "連絡先" -#: netbox/circuits/forms/filtersets.py:37 -#: netbox/circuits/forms/filtersets.py:157 netbox/dcim/forms/bulk_edit.py:113 -#: netbox/dcim/forms/bulk_edit.py:314 netbox/dcim/forms/bulk_edit.py:872 -#: netbox/dcim/forms/bulk_import.py:93 netbox/dcim/forms/filtersets.py:73 -#: netbox/dcim/forms/filtersets.py:185 netbox/dcim/forms/filtersets.py:211 -#: netbox/dcim/forms/filtersets.py:334 netbox/dcim/forms/filtersets.py:425 -#: netbox/dcim/forms/filtersets.py:739 netbox/dcim/forms/filtersets.py:983 -#: netbox/dcim/forms/filtersets.py:1013 netbox/dcim/forms/filtersets.py:1097 -#: netbox/dcim/forms/filtersets.py:1136 netbox/dcim/forms/filtersets.py:1576 -#: netbox/dcim/forms/filtersets.py:1600 netbox/dcim/forms/filtersets.py:1624 -#: netbox/dcim/forms/model_forms.py:112 netbox/dcim/forms/object_create.py:367 -#: netbox/dcim/tables/devices.py:143 netbox/dcim/tables/sites.py:85 -#: netbox/extras/filtersets.py:503 netbox/ipam/forms/bulk_edit.py:208 -#: netbox/ipam/forms/bulk_edit.py:474 netbox/ipam/forms/filtersets.py:217 -#: netbox/ipam/forms/filtersets.py:422 netbox/ipam/forms/filtersets.py:475 -#: netbox/templates/dcim/device.html:18 netbox/templates/dcim/rack.html:16 +#: netbox/circuits/forms/filtersets.py:45 +#: netbox/circuits/forms/filtersets.py:168 +#: netbox/circuits/forms/filtersets.py:230 +#: netbox/circuits/tables/circuits.py:139 netbox/dcim/forms/bulk_edit.py:116 +#: netbox/dcim/forms/bulk_edit.py:317 netbox/dcim/forms/bulk_edit.py:875 +#: netbox/dcim/forms/bulk_import.py:95 netbox/dcim/forms/filtersets.py:74 +#: netbox/dcim/forms/filtersets.py:186 netbox/dcim/forms/filtersets.py:212 +#: netbox/dcim/forms/filtersets.py:335 netbox/dcim/forms/filtersets.py:426 +#: netbox/dcim/forms/filtersets.py:740 netbox/dcim/forms/filtersets.py:984 +#: netbox/dcim/forms/filtersets.py:1014 netbox/dcim/forms/filtersets.py:1098 +#: netbox/dcim/forms/filtersets.py:1137 netbox/dcim/forms/filtersets.py:1614 +#: netbox/dcim/forms/filtersets.py:1638 netbox/dcim/forms/filtersets.py:1662 +#: netbox/dcim/forms/model_forms.py:114 netbox/dcim/forms/object_create.py:367 +#: netbox/dcim/tables/devices.py:154 netbox/dcim/tables/sites.py:85 +#: netbox/extras/filtersets.py:503 netbox/ipam/forms/bulk_edit.py:458 +#: netbox/ipam/forms/filtersets.py:219 netbox/ipam/forms/filtersets.py:425 +#: netbox/ipam/forms/filtersets.py:516 netbox/templates/dcim/device.html:18 +#: netbox/templates/dcim/rack.html:16 #: netbox/templates/dcim/rackreservation.html:22 #: netbox/templates/dcim/region.html:26 netbox/templates/dcim/site.html:31 -#: netbox/templates/ipam/prefix.html:49 netbox/templates/ipam/vlan.html:16 -#: netbox/virtualization/forms/bulk_edit.py:81 +#: netbox/templates/ipam/vlan.html:16 #: netbox/virtualization/forms/filtersets.py:59 -#: netbox/virtualization/forms/filtersets.py:133 +#: netbox/virtualization/forms/filtersets.py:138 #: netbox/virtualization/forms/model_forms.py:92 -#: netbox/vpn/forms/filtersets.py:257 +#: netbox/vpn/forms/filtersets.py:257 netbox/wireless/forms/filtersets.py:73 msgid "Region" msgstr "リージョン" -#: netbox/circuits/forms/filtersets.py:42 -#: netbox/circuits/forms/filtersets.py:162 netbox/dcim/forms/bulk_edit.py:322 -#: netbox/dcim/forms/bulk_edit.py:880 netbox/dcim/forms/filtersets.py:78 -#: netbox/dcim/forms/filtersets.py:190 netbox/dcim/forms/filtersets.py:216 -#: netbox/dcim/forms/filtersets.py:347 netbox/dcim/forms/filtersets.py:430 -#: netbox/dcim/forms/filtersets.py:744 netbox/dcim/forms/filtersets.py:988 -#: netbox/dcim/forms/filtersets.py:1102 netbox/dcim/forms/filtersets.py:1141 +#: netbox/circuits/forms/filtersets.py:50 +#: netbox/circuits/forms/filtersets.py:173 +#: netbox/circuits/forms/filtersets.py:235 netbox/dcim/forms/bulk_edit.py:325 +#: netbox/dcim/forms/bulk_edit.py:883 netbox/dcim/forms/filtersets.py:79 +#: netbox/dcim/forms/filtersets.py:191 netbox/dcim/forms/filtersets.py:217 +#: netbox/dcim/forms/filtersets.py:348 netbox/dcim/forms/filtersets.py:431 +#: netbox/dcim/forms/filtersets.py:745 netbox/dcim/forms/filtersets.py:989 +#: netbox/dcim/forms/filtersets.py:1103 netbox/dcim/forms/filtersets.py:1142 #: netbox/dcim/forms/object_create.py:375 netbox/extras/filtersets.py:520 -#: netbox/ipam/forms/bulk_edit.py:213 netbox/ipam/forms/bulk_edit.py:479 -#: netbox/ipam/forms/filtersets.py:222 netbox/ipam/forms/filtersets.py:427 -#: netbox/ipam/forms/filtersets.py:480 -#: netbox/virtualization/forms/bulk_edit.py:86 -#: netbox/virtualization/forms/filtersets.py:69 -#: netbox/virtualization/forms/filtersets.py:138 +#: netbox/ipam/forms/bulk_edit.py:463 netbox/ipam/forms/filtersets.py:224 +#: netbox/ipam/forms/filtersets.py:430 netbox/ipam/forms/filtersets.py:521 +#: netbox/virtualization/forms/filtersets.py:64 +#: netbox/virtualization/forms/filtersets.py:143 #: netbox/virtualization/forms/model_forms.py:98 +#: netbox/wireless/forms/filtersets.py:78 msgid "Site group" msgstr "サイトグループ" -#: netbox/circuits/forms/filtersets.py:65 -#: netbox/circuits/forms/filtersets.py:83 -#: netbox/circuits/forms/filtersets.py:102 -#: netbox/circuits/forms/filtersets.py:117 netbox/core/forms/filtersets.py:67 -#: netbox/core/forms/filtersets.py:135 netbox/dcim/forms/bulk_edit.py:843 -#: netbox/dcim/forms/filtersets.py:172 netbox/dcim/forms/filtersets.py:204 -#: netbox/dcim/forms/filtersets.py:915 netbox/dcim/forms/filtersets.py:1007 -#: netbox/dcim/forms/filtersets.py:1131 netbox/dcim/forms/filtersets.py:1239 -#: netbox/dcim/forms/filtersets.py:1263 netbox/dcim/forms/filtersets.py:1288 -#: netbox/dcim/forms/filtersets.py:1307 netbox/dcim/forms/filtersets.py:1327 -#: netbox/dcim/forms/filtersets.py:1441 netbox/dcim/forms/filtersets.py:1465 -#: netbox/dcim/forms/filtersets.py:1489 netbox/dcim/forms/filtersets.py:1507 -#: netbox/dcim/forms/filtersets.py:1523 netbox/extras/forms/bulk_edit.py:90 -#: netbox/extras/forms/filtersets.py:44 netbox/extras/forms/filtersets.py:134 -#: netbox/extras/forms/filtersets.py:165 netbox/extras/forms/filtersets.py:205 -#: netbox/extras/forms/filtersets.py:221 netbox/extras/forms/filtersets.py:252 -#: netbox/extras/forms/filtersets.py:276 netbox/extras/forms/filtersets.py:441 -#: netbox/ipam/forms/filtersets.py:99 netbox/ipam/forms/filtersets.py:266 -#: netbox/ipam/forms/filtersets.py:307 netbox/ipam/forms/filtersets.py:382 -#: netbox/ipam/forms/filtersets.py:468 netbox/ipam/forms/filtersets.py:527 -#: netbox/ipam/forms/filtersets.py:545 netbox/netbox/tables/tables.py:256 -#: netbox/virtualization/forms/filtersets.py:45 -#: netbox/virtualization/forms/filtersets.py:103 -#: netbox/virtualization/forms/filtersets.py:198 -#: netbox/virtualization/forms/filtersets.py:243 -#: netbox/vpn/forms/filtersets.py:213 netbox/wireless/forms/bulk_edit.py:150 -#: netbox/wireless/forms/filtersets.py:34 -#: netbox/wireless/forms/filtersets.py:74 -msgid "Attributes" -msgstr "属性" - -#: netbox/circuits/forms/filtersets.py:73 -#: netbox/circuits/tables/circuits.py:63 -#: netbox/circuits/tables/providers.py:66 +#: netbox/circuits/forms/filtersets.py:81 +#: netbox/circuits/tables/circuits.py:62 +#: netbox/circuits/tables/providers.py:64 +#: netbox/circuits/tables/virtual_circuits.py:55 +#: netbox/circuits/tables/virtual_circuits.py:103 #: netbox/templates/circuits/circuit.html:22 #: netbox/templates/circuits/provideraccount.html:24 msgid "Account" msgstr "アカウント" -#: netbox/circuits/forms/filtersets.py:217 +#: netbox/circuits/forms/filtersets.py:253 msgid "Term Side" msgstr "タームサイド" -#: netbox/circuits/forms/filtersets.py:250 netbox/dcim/forms/bulk_edit.py:1557 -#: netbox/extras/forms/model_forms.py:582 netbox/ipam/forms/filtersets.py:142 -#: netbox/ipam/forms/filtersets.py:546 netbox/ipam/forms/model_forms.py:327 +#: netbox/circuits/forms/filtersets.py:286 netbox/dcim/forms/bulk_edit.py:1572 +#: netbox/extras/forms/model_forms.py:596 netbox/ipam/forms/filtersets.py:144 +#: netbox/ipam/forms/filtersets.py:598 netbox/ipam/forms/model_forms.py:337 +#: netbox/templates/dcim/macaddress.html:25 #: netbox/templates/extras/configcontext.html:60 #: netbox/templates/ipam/ipaddress.html:59 -#: netbox/templates/ipam/vlan_edit.html:30 +#: netbox/templates/ipam/vlan_edit.html:38 #: netbox/tenancy/forms/filtersets.py:87 netbox/users/forms/model_forms.py:314 msgid "Assignment" msgstr "割当" -#: netbox/circuits/forms/filtersets.py:265 -#: netbox/circuits/forms/model_forms.py:195 -#: netbox/circuits/tables/circuits.py:155 netbox/dcim/forms/bulk_edit.py:118 -#: netbox/dcim/forms/bulk_import.py:100 netbox/dcim/forms/model_forms.py:117 -#: netbox/dcim/tables/sites.py:89 netbox/extras/forms/filtersets.py:480 -#: netbox/ipam/filtersets.py:1001 netbox/ipam/forms/bulk_edit.py:493 -#: netbox/ipam/forms/bulk_import.py:460 netbox/ipam/forms/model_forms.py:561 -#: netbox/ipam/tables/fhrp.py:67 netbox/ipam/tables/vlans.py:122 -#: netbox/ipam/tables/vlans.py:226 +#: netbox/circuits/forms/filtersets.py:301 +#: netbox/circuits/forms/model_forms.py:252 +#: netbox/circuits/tables/circuits.py:191 netbox/dcim/forms/bulk_edit.py:121 +#: netbox/dcim/forms/bulk_import.py:102 netbox/dcim/forms/model_forms.py:120 +#: netbox/dcim/tables/sites.py:89 netbox/extras/forms/filtersets.py:489 +#: netbox/ipam/filtersets.py:968 netbox/ipam/forms/bulk_edit.py:477 +#: netbox/ipam/forms/bulk_import.py:459 netbox/ipam/forms/model_forms.py:571 +#: netbox/ipam/tables/fhrp.py:67 netbox/ipam/tables/vlans.py:91 +#: netbox/ipam/tables/vlans.py:202 #: netbox/templates/circuits/circuitgroupassignment.html:22 -#: netbox/templates/dcim/interface.html:284 netbox/templates/dcim/site.html:37 +#: netbox/templates/dcim/interface.html:341 netbox/templates/dcim/site.html:37 #: netbox/templates/ipam/inc/panels/fhrp_groups.html:23 #: netbox/templates/ipam/vlan.html:27 netbox/templates/tenancy/contact.html:21 #: netbox/templates/tenancy/tenant.html:20 netbox/templates/users/group.html:6 @@ -1126,226 +1391,241 @@ msgstr "割当" #: netbox/tenancy/tables/tenants.py:42 netbox/users/filtersets.py:62 #: netbox/users/filtersets.py:185 netbox/users/forms/filtersets.py:31 #: netbox/users/forms/filtersets.py:37 netbox/users/forms/filtersets.py:79 -#: netbox/virtualization/forms/bulk_edit.py:65 -#: netbox/virtualization/forms/bulk_import.py:47 -#: netbox/virtualization/forms/filtersets.py:85 -#: netbox/virtualization/forms/model_forms.py:66 +#: netbox/virtualization/forms/bulk_edit.py:66 +#: netbox/virtualization/forms/bulk_import.py:48 +#: netbox/virtualization/forms/filtersets.py:90 +#: netbox/virtualization/forms/model_forms.py:70 #: netbox/virtualization/tables/clusters.py:70 #: netbox/vpn/forms/bulk_edit.py:112 netbox/vpn/forms/bulk_import.py:158 #: netbox/vpn/forms/filtersets.py:116 netbox/vpn/tables/crypto.py:31 -#: netbox/vpn/tables/tunnels.py:44 netbox/wireless/forms/bulk_edit.py:48 -#: netbox/wireless/forms/bulk_import.py:36 -#: netbox/wireless/forms/filtersets.py:46 -#: netbox/wireless/forms/model_forms.py:40 +#: netbox/vpn/tables/tunnels.py:44 netbox/wireless/forms/bulk_edit.py:50 +#: netbox/wireless/forms/bulk_import.py:38 +#: netbox/wireless/forms/filtersets.py:49 +#: netbox/wireless/forms/model_forms.py:41 #: netbox/wireless/tables/wirelesslan.py:48 msgid "Group" msgstr "グループ" -#: netbox/circuits/forms/model_forms.py:182 +#: netbox/circuits/forms/model_forms.py:239 #: netbox/templates/circuits/circuitgroup.html:25 msgid "Circuit Group" msgstr "回線グループ" -#: netbox/circuits/models/circuits.py:27 netbox/dcim/models/cables.py:67 -#: netbox/dcim/models/device_component_templates.py:517 -#: netbox/dcim/models/device_component_templates.py:617 -#: netbox/dcim/models/device_components.py:975 -#: netbox/dcim/models/device_components.py:1049 -#: netbox/dcim/models/device_components.py:1204 -#: netbox/dcim/models/devices.py:479 netbox/dcim/models/racks.py:224 +#: netbox/circuits/forms/model_forms.py:259 +msgid "Circuit type" +msgstr "回路タイプ" + +#: netbox/circuits/forms/model_forms.py:270 +msgid "Group Assignment" +msgstr "グループ課題" + +#: netbox/circuits/models/base.py:18 netbox/dcim/models/cables.py:69 +#: netbox/dcim/models/device_component_templates.py:531 +#: netbox/dcim/models/device_component_templates.py:631 +#: netbox/dcim/models/device_components.py:476 +#: netbox/dcim/models/device_components.py:1026 +#: netbox/dcim/models/device_components.py:1097 +#: netbox/dcim/models/device_components.py:1243 +#: netbox/dcim/models/devices.py:478 netbox/dcim/models/racks.py:221 #: netbox/extras/models/tags.py:28 msgid "color" msgstr "色" -#: netbox/circuits/models/circuits.py:36 +#: netbox/circuits/models/circuits.py:34 msgid "circuit type" msgstr "回線タイプ" -#: netbox/circuits/models/circuits.py:37 +#: netbox/circuits/models/circuits.py:35 msgid "circuit types" msgstr "回線タイプ" -#: netbox/circuits/models/circuits.py:48 +#: netbox/circuits/models/circuits.py:46 +#: netbox/circuits/models/virtual_circuits.py:38 msgid "circuit ID" msgstr "回線 ID" -#: netbox/circuits/models/circuits.py:49 +#: netbox/circuits/models/circuits.py:47 +#: netbox/circuits/models/virtual_circuits.py:39 msgid "Unique circuit ID" msgstr "一意な回線 ID" -#: netbox/circuits/models/circuits.py:69 netbox/core/models/data.py:52 -#: netbox/core/models/jobs.py:85 netbox/dcim/models/cables.py:49 -#: netbox/dcim/models/devices.py:653 netbox/dcim/models/devices.py:1173 -#: netbox/dcim/models/devices.py:1404 netbox/dcim/models/power.py:96 -#: netbox/dcim/models/racks.py:297 netbox/dcim/models/sites.py:154 -#: netbox/dcim/models/sites.py:266 netbox/ipam/models/ip.py:253 -#: netbox/ipam/models/ip.py:522 netbox/ipam/models/ip.py:730 -#: netbox/ipam/models/vlans.py:211 netbox/virtualization/models/clusters.py:74 -#: netbox/virtualization/models/virtualmachines.py:84 -#: netbox/vpn/models/tunnels.py:40 netbox/wireless/models.py:95 -#: netbox/wireless/models.py:159 +#: netbox/circuits/models/circuits.py:67 +#: netbox/circuits/models/virtual_circuits.py:59 netbox/core/models/data.py:52 +#: netbox/core/models/jobs.py:85 netbox/dcim/models/cables.py:51 +#: netbox/dcim/models/device_components.py:1283 +#: netbox/dcim/models/devices.py:645 netbox/dcim/models/devices.py:1181 +#: netbox/dcim/models/devices.py:1409 netbox/dcim/models/power.py:94 +#: netbox/dcim/models/racks.py:288 netbox/dcim/models/sites.py:154 +#: netbox/dcim/models/sites.py:270 netbox/ipam/models/ip.py:237 +#: netbox/ipam/models/ip.py:508 netbox/ipam/models/ip.py:729 +#: netbox/ipam/models/vlans.py:210 netbox/virtualization/models/clusters.py:70 +#: netbox/virtualization/models/virtualmachines.py:79 +#: netbox/vpn/models/tunnels.py:38 netbox/wireless/models.py:95 +#: netbox/wireless/models.py:156 msgid "status" msgstr "状態" -#: netbox/circuits/models/circuits.py:84 netbox/templates/core/plugin.html:20 +#: netbox/circuits/models/circuits.py:82 netbox/templates/core/plugin.html:20 msgid "installed" msgstr "開通済" -#: netbox/circuits/models/circuits.py:89 +#: netbox/circuits/models/circuits.py:87 msgid "terminates" msgstr "終端" -#: netbox/circuits/models/circuits.py:94 +#: netbox/circuits/models/circuits.py:92 msgid "commit rate (Kbps)" msgstr "保証帯域 (Kbps)" -#: netbox/circuits/models/circuits.py:95 +#: netbox/circuits/models/circuits.py:93 msgid "Committed rate" msgstr "保証帯域" -#: netbox/circuits/models/circuits.py:137 +#: netbox/circuits/models/circuits.py:142 msgid "circuit" msgstr "回線" -#: netbox/circuits/models/circuits.py:138 +#: netbox/circuits/models/circuits.py:143 msgid "circuits" msgstr "回線" -#: netbox/circuits/models/circuits.py:170 +#: netbox/circuits/models/circuits.py:172 msgid "circuit group" msgstr "回線グループ" -#: netbox/circuits/models/circuits.py:171 +#: netbox/circuits/models/circuits.py:173 msgid "circuit groups" msgstr "回線グループ" -#: netbox/circuits/models/circuits.py:195 netbox/ipam/models/fhrp.py:93 -#: netbox/tenancy/models/contacts.py:134 +#: netbox/circuits/models/circuits.py:190 +msgid "member ID" +msgstr "メンバー ID" + +#: netbox/circuits/models/circuits.py:202 netbox/ipam/models/fhrp.py:90 +#: netbox/tenancy/models/contacts.py:126 msgid "priority" msgstr "優先度" -#: netbox/circuits/models/circuits.py:213 +#: netbox/circuits/models/circuits.py:220 msgid "Circuit group assignment" msgstr "割当回線グループ" -#: netbox/circuits/models/circuits.py:214 +#: netbox/circuits/models/circuits.py:221 msgid "Circuit group assignments" msgstr "割当回線グループ" -#: netbox/circuits/models/circuits.py:240 -msgid "termination" -msgstr "" +#: netbox/circuits/models/circuits.py:247 +msgid "termination side" +msgstr "ターミネーション側" -#: netbox/circuits/models/circuits.py:257 +#: netbox/circuits/models/circuits.py:266 msgid "port speed (Kbps)" msgstr "ポート速度 (Kbps)" -#: netbox/circuits/models/circuits.py:260 +#: netbox/circuits/models/circuits.py:269 msgid "Physical circuit speed" msgstr "物理回線速度" -#: netbox/circuits/models/circuits.py:265 +#: netbox/circuits/models/circuits.py:274 msgid "upstream speed (Kbps)" msgstr "アップストリーム速度 (Kbps)" -#: netbox/circuits/models/circuits.py:266 +#: netbox/circuits/models/circuits.py:275 msgid "Upstream speed, if different from port speed" msgstr "アップストリーム速度 (ポート速度と異なる場合)" -#: netbox/circuits/models/circuits.py:271 +#: netbox/circuits/models/circuits.py:280 msgid "cross-connect ID" msgstr "クロスコネクト ID" -#: netbox/circuits/models/circuits.py:272 +#: netbox/circuits/models/circuits.py:281 msgid "ID of the local cross-connect" msgstr "ローカル・クロスコネクトの ID" -#: netbox/circuits/models/circuits.py:277 +#: netbox/circuits/models/circuits.py:286 msgid "patch panel/port(s)" msgstr "パッチパネル/ポート" -#: netbox/circuits/models/circuits.py:278 +#: netbox/circuits/models/circuits.py:287 msgid "Patch panel ID and port number(s)" msgstr "パッチパネル ID とポート番号" -#: netbox/circuits/models/circuits.py:281 -#: netbox/dcim/models/device_component_templates.py:61 -#: netbox/dcim/models/device_components.py:68 netbox/dcim/models/racks.py:685 +#: netbox/circuits/models/circuits.py:290 +#: netbox/circuits/models/virtual_circuits.py:144 +#: netbox/dcim/models/device_component_templates.py:57 +#: netbox/dcim/models/device_components.py:63 netbox/dcim/models/racks.py:681 #: netbox/extras/models/configs.py:45 netbox/extras/models/configs.py:219 #: netbox/extras/models/customfields.py:125 netbox/extras/models/models.py:61 #: netbox/extras/models/models.py:158 netbox/extras/models/models.py:396 #: netbox/extras/models/models.py:511 #: netbox/extras/models/notifications.py:131 -#: netbox/extras/models/staging.py:31 netbox/extras/models/tags.py:32 -#: netbox/netbox/models/__init__.py:110 netbox/netbox/models/__init__.py:145 -#: netbox/netbox/models/__init__.py:191 netbox/users/models/permissions.py:24 -#: netbox/users/models/tokens.py:57 netbox/users/models/users.py:33 -#: netbox/virtualization/models/virtualmachines.py:289 +#: netbox/extras/models/staging.py:32 netbox/extras/models/tags.py:32 +#: netbox/ipam/models/vlans.py:358 netbox/netbox/models/__init__.py:115 +#: netbox/netbox/models/__init__.py:150 netbox/netbox/models/__init__.py:196 +#: netbox/users/models/permissions.py:24 netbox/users/models/tokens.py:57 +#: netbox/users/models/users.py:33 +#: netbox/virtualization/models/virtualmachines.py:276 msgid "description" msgstr "説明" -#: netbox/circuits/models/circuits.py:294 +#: netbox/circuits/models/circuits.py:340 msgid "circuit termination" msgstr "回線終端" -#: netbox/circuits/models/circuits.py:295 +#: netbox/circuits/models/circuits.py:341 msgid "circuit terminations" msgstr "回線終端" -#: netbox/circuits/models/circuits.py:308 -msgid "" -"A circuit termination must attach to either a site or a provider network." -msgstr "" +#: netbox/circuits/models/circuits.py:353 +msgid "A circuit termination must attach to a terminating object." +msgstr "回路終端は終端オブジェクトに接続する必要があります。" -#: netbox/circuits/models/circuits.py:310 -msgid "" -"A circuit termination cannot attach to both a site and a provider network." -msgstr "" - -#: netbox/circuits/models/providers.py:22 -#: netbox/circuits/models/providers.py:66 -#: netbox/circuits/models/providers.py:104 netbox/core/models/data.py:39 +#: netbox/circuits/models/providers.py:21 +#: netbox/circuits/models/providers.py:63 +#: netbox/circuits/models/providers.py:98 netbox/core/models/data.py:39 #: netbox/core/models/jobs.py:46 #: netbox/dcim/models/device_component_templates.py:43 -#: netbox/dcim/models/device_components.py:53 -#: netbox/dcim/models/devices.py:593 netbox/dcim/models/devices.py:1335 -#: netbox/dcim/models/devices.py:1400 netbox/dcim/models/power.py:39 -#: netbox/dcim/models/power.py:92 netbox/dcim/models/racks.py:262 -#: netbox/dcim/models/sites.py:138 netbox/extras/models/configs.py:36 +#: netbox/dcim/models/device_components.py:52 +#: netbox/dcim/models/devices.py:589 netbox/dcim/models/devices.py:1341 +#: netbox/dcim/models/devices.py:1404 netbox/dcim/models/power.py:38 +#: netbox/dcim/models/power.py:89 netbox/dcim/models/racks.py:257 +#: netbox/dcim/models/sites.py:142 netbox/extras/models/configs.py:36 #: netbox/extras/models/configs.py:215 netbox/extras/models/customfields.py:92 #: netbox/extras/models/models.py:56 netbox/extras/models/models.py:153 #: netbox/extras/models/models.py:296 netbox/extras/models/models.py:392 #: netbox/extras/models/models.py:501 netbox/extras/models/models.py:596 #: netbox/extras/models/notifications.py:126 -#: netbox/extras/models/scripts.py:30 netbox/extras/models/staging.py:26 -#: netbox/ipam/models/asns.py:18 netbox/ipam/models/fhrp.py:25 -#: netbox/ipam/models/services.py:52 netbox/ipam/models/services.py:88 -#: netbox/ipam/models/vlans.py:36 netbox/ipam/models/vlans.py:200 -#: netbox/ipam/models/vrfs.py:22 netbox/ipam/models/vrfs.py:79 -#: netbox/netbox/models/__init__.py:137 netbox/netbox/models/__init__.py:181 -#: netbox/tenancy/models/contacts.py:64 netbox/tenancy/models/tenants.py:20 -#: netbox/tenancy/models/tenants.py:45 netbox/users/models/permissions.py:20 -#: netbox/users/models/users.py:28 netbox/virtualization/models/clusters.py:57 -#: netbox/virtualization/models/virtualmachines.py:72 -#: netbox/virtualization/models/virtualmachines.py:279 -#: netbox/vpn/models/crypto.py:24 netbox/vpn/models/crypto.py:71 -#: netbox/vpn/models/crypto.py:131 netbox/vpn/models/crypto.py:183 -#: netbox/vpn/models/crypto.py:221 netbox/vpn/models/l2vpn.py:22 -#: netbox/vpn/models/tunnels.py:35 netbox/wireless/models.py:51 +#: netbox/extras/models/scripts.py:30 netbox/extras/models/staging.py:27 +#: netbox/ipam/models/asns.py:17 netbox/ipam/models/fhrp.py:24 +#: netbox/ipam/models/services.py:51 netbox/ipam/models/services.py:84 +#: netbox/ipam/models/vlans.py:37 netbox/ipam/models/vlans.py:199 +#: netbox/ipam/models/vlans.py:337 netbox/ipam/models/vrfs.py:20 +#: netbox/ipam/models/vrfs.py:75 netbox/netbox/models/__init__.py:142 +#: netbox/netbox/models/__init__.py:186 netbox/tenancy/models/contacts.py:58 +#: netbox/tenancy/models/tenants.py:19 netbox/tenancy/models/tenants.py:42 +#: netbox/users/models/permissions.py:20 netbox/users/models/users.py:28 +#: netbox/virtualization/models/clusters.py:52 +#: netbox/virtualization/models/virtualmachines.py:71 +#: netbox/virtualization/models/virtualmachines.py:271 +#: netbox/virtualization/models/virtualmachines.py:305 +#: netbox/vpn/models/crypto.py:23 netbox/vpn/models/crypto.py:69 +#: netbox/vpn/models/crypto.py:128 netbox/vpn/models/crypto.py:180 +#: netbox/vpn/models/crypto.py:216 netbox/vpn/models/l2vpn.py:21 +#: netbox/vpn/models/tunnels.py:32 netbox/wireless/models.py:53 msgid "name" msgstr "名前" -#: netbox/circuits/models/providers.py:25 +#: netbox/circuits/models/providers.py:24 msgid "Full name of the provider" msgstr "プロバイダのフルネーム" -#: netbox/circuits/models/providers.py:28 netbox/dcim/models/devices.py:86 +#: netbox/circuits/models/providers.py:28 netbox/dcim/models/devices.py:88 #: netbox/dcim/models/racks.py:137 netbox/dcim/models/sites.py:149 #: netbox/extras/models/models.py:506 netbox/ipam/models/asns.py:23 -#: netbox/ipam/models/vlans.py:40 netbox/netbox/models/__init__.py:141 -#: netbox/netbox/models/__init__.py:186 netbox/tenancy/models/tenants.py:25 -#: netbox/tenancy/models/tenants.py:49 netbox/vpn/models/l2vpn.py:27 -#: netbox/wireless/models.py:56 +#: netbox/ipam/models/vlans.py:42 netbox/netbox/models/__init__.py:146 +#: netbox/netbox/models/__init__.py:191 netbox/tenancy/models/tenants.py:25 +#: netbox/tenancy/models/tenants.py:47 netbox/vpn/models/l2vpn.py:27 +#: netbox/wireless/models.py:59 msgid "slug" msgstr "slug" @@ -1357,67 +1637,100 @@ msgstr "プロバイダ" msgid "providers" msgstr "プロバイダ" -#: netbox/circuits/models/providers.py:63 +#: netbox/circuits/models/providers.py:60 msgid "account ID" msgstr "アカウント ID" -#: netbox/circuits/models/providers.py:86 +#: netbox/circuits/models/providers.py:83 msgid "provider account" msgstr "プロバイダアカウント" -#: netbox/circuits/models/providers.py:87 +#: netbox/circuits/models/providers.py:84 msgid "provider accounts" msgstr "プロバイダアカウント" -#: netbox/circuits/models/providers.py:115 +#: netbox/circuits/models/providers.py:110 msgid "service ID" msgstr "サービス ID" -#: netbox/circuits/models/providers.py:126 +#: netbox/circuits/models/providers.py:121 msgid "provider network" msgstr "プロバイダネットワーク" -#: netbox/circuits/models/providers.py:127 +#: netbox/circuits/models/providers.py:122 msgid "provider networks" msgstr "プロバイダネットワーク" -#: netbox/circuits/tables/circuits.py:32 -#: netbox/circuits/tables/circuits.py:132 +#: netbox/circuits/models/virtual_circuits.py:28 +msgid "virtual circuit type" +msgstr "仮想回線タイプ" + +#: netbox/circuits/models/virtual_circuits.py:29 +msgid "virtual circuit types" +msgstr "仮想回線タイプ" + +#: netbox/circuits/models/virtual_circuits.py:99 +msgid "virtual circuit" +msgstr "バーチャルサーキット" + +#: netbox/circuits/models/virtual_circuits.py:100 +msgid "virtual circuits" +msgstr "バーチャルサーキット" + +#: netbox/circuits/models/virtual_circuits.py:133 netbox/ipam/models/ip.py:194 +#: netbox/ipam/models/ip.py:736 netbox/vpn/models/tunnels.py:109 +msgid "role" +msgstr "ロール" + +#: netbox/circuits/models/virtual_circuits.py:151 +msgid "virtual circuit termination" +msgstr "仮想回線終端" + +#: netbox/circuits/models/virtual_circuits.py:152 +msgid "virtual circuit terminations" +msgstr "仮想回線終端" + +#: netbox/circuits/tables/circuits.py:30 +#: netbox/circuits/tables/circuits.py:168 #: netbox/circuits/tables/providers.py:18 -#: netbox/circuits/tables/providers.py:69 -#: netbox/circuits/tables/providers.py:99 netbox/core/tables/data.py:16 +#: netbox/circuits/tables/providers.py:67 +#: netbox/circuits/tables/providers.py:97 +#: netbox/circuits/tables/virtual_circuits.py:18 netbox/core/tables/data.py:16 #: netbox/core/tables/jobs.py:14 netbox/core/tables/plugins.py:44 #: netbox/core/tables/tasks.py:11 netbox/core/tables/tasks.py:115 -#: netbox/dcim/forms/filtersets.py:63 netbox/dcim/forms/object_create.py:43 -#: netbox/dcim/tables/devices.py:52 netbox/dcim/tables/devices.py:92 -#: netbox/dcim/tables/devices.py:134 netbox/dcim/tables/devices.py:289 -#: netbox/dcim/tables/devices.py:392 netbox/dcim/tables/devices.py:433 -#: netbox/dcim/tables/devices.py:482 netbox/dcim/tables/devices.py:531 -#: netbox/dcim/tables/devices.py:648 netbox/dcim/tables/devices.py:731 -#: netbox/dcim/tables/devices.py:778 netbox/dcim/tables/devices.py:841 -#: netbox/dcim/tables/devices.py:911 netbox/dcim/tables/devices.py:974 -#: netbox/dcim/tables/devices.py:994 netbox/dcim/tables/devices.py:1023 -#: netbox/dcim/tables/devices.py:1053 netbox/dcim/tables/devicetypes.py:31 +#: netbox/dcim/forms/filtersets.py:64 netbox/dcim/forms/object_create.py:43 +#: netbox/dcim/tables/devices.py:63 netbox/dcim/tables/devices.py:103 +#: netbox/dcim/tables/devices.py:145 netbox/dcim/tables/devices.py:300 +#: netbox/dcim/tables/devices.py:403 netbox/dcim/tables/devices.py:444 +#: netbox/dcim/tables/devices.py:492 netbox/dcim/tables/devices.py:541 +#: netbox/dcim/tables/devices.py:562 netbox/dcim/tables/devices.py:682 +#: netbox/dcim/tables/devices.py:765 netbox/dcim/tables/devices.py:811 +#: netbox/dcim/tables/devices.py:873 netbox/dcim/tables/devices.py:942 +#: netbox/dcim/tables/devices.py:1007 netbox/dcim/tables/devices.py:1026 +#: netbox/dcim/tables/devices.py:1055 netbox/dcim/tables/devices.py:1085 +#: netbox/dcim/tables/devicetypes.py:31 netbox/dcim/tables/devicetypes.py:227 #: netbox/dcim/tables/power.py:22 netbox/dcim/tables/power.py:62 #: netbox/dcim/tables/racks.py:24 netbox/dcim/tables/racks.py:113 #: netbox/dcim/tables/sites.py:24 netbox/dcim/tables/sites.py:51 -#: netbox/dcim/tables/sites.py:78 netbox/dcim/tables/sites.py:130 -#: netbox/extras/forms/filtersets.py:213 netbox/extras/tables/tables.py:58 +#: netbox/dcim/tables/sites.py:78 netbox/dcim/tables/sites.py:129 +#: netbox/extras/forms/filtersets.py:218 netbox/extras/tables/tables.py:58 #: netbox/extras/tables/tables.py:122 netbox/extras/tables/tables.py:155 #: netbox/extras/tables/tables.py:180 netbox/extras/tables/tables.py:246 #: netbox/extras/tables/tables.py:361 netbox/extras/tables/tables.py:378 #: netbox/extras/tables/tables.py:401 netbox/extras/tables/tables.py:439 #: netbox/extras/tables/tables.py:491 netbox/extras/tables/tables.py:514 -#: netbox/ipam/forms/bulk_edit.py:407 netbox/ipam/forms/filtersets.py:386 -#: netbox/ipam/tables/asn.py:16 netbox/ipam/tables/ip.py:85 -#: netbox/ipam/tables/ip.py:160 netbox/ipam/tables/services.py:15 -#: netbox/ipam/tables/services.py:40 netbox/ipam/tables/vlans.py:64 -#: netbox/ipam/tables/vlans.py:114 netbox/ipam/tables/vrfs.py:26 +#: netbox/ipam/forms/bulk_edit.py:391 netbox/ipam/forms/filtersets.py:389 +#: netbox/ipam/forms/filtersets.py:474 netbox/ipam/tables/asn.py:16 +#: netbox/ipam/tables/ip.py:31 netbox/ipam/tables/ip.py:106 +#: netbox/ipam/tables/services.py:15 netbox/ipam/tables/services.py:40 +#: netbox/ipam/tables/vlans.py:33 netbox/ipam/tables/vlans.py:83 +#: netbox/ipam/tables/vlans.py:231 netbox/ipam/tables/vrfs.py:26 #: netbox/ipam/tables/vrfs.py:68 #: netbox/templates/circuits/circuitgroup.html:28 #: netbox/templates/circuits/circuittype.html:22 #: netbox/templates/circuits/provideraccount.html:28 #: netbox/templates/circuits/providernetwork.html:24 +#: netbox/templates/circuits/virtualcircuittype.html:22 #: netbox/templates/core/datasource.html:34 netbox/templates/core/job.html:44 #: netbox/templates/core/plugin.html:54 #: netbox/templates/core/rq_worker.html:43 @@ -1429,7 +1742,7 @@ msgstr "プロバイダネットワーク" #: netbox/templates/dcim/inc/interface_vlans_table.html:5 #: netbox/templates/dcim/inc/panels/inventory_items.html:18 #: netbox/templates/dcim/interface.html:38 -#: netbox/templates/dcim/interface.html:165 +#: netbox/templates/dcim/interface.html:222 #: netbox/templates/dcim/inventoryitem.html:28 #: netbox/templates/dcim/inventoryitemrole.html:18 #: netbox/templates/dcim/location.html:29 @@ -1459,6 +1772,7 @@ msgstr "プロバイダネットワーク" #: netbox/templates/ipam/service.html:24 #: netbox/templates/ipam/servicetemplate.html:15 #: netbox/templates/ipam/vlan.html:35 netbox/templates/ipam/vlangroup.html:30 +#: netbox/templates/ipam/vlantranslationpolicy.html:14 #: netbox/templates/tenancy/contact.html:25 #: netbox/templates/tenancy/contactgroup.html:21 #: netbox/templates/tenancy/contactrole.html:18 @@ -1490,106 +1804,218 @@ msgstr "プロバイダネットワーク" #: netbox/virtualization/tables/clusters.py:17 #: netbox/virtualization/tables/clusters.py:39 #: netbox/virtualization/tables/clusters.py:62 -#: netbox/virtualization/tables/virtualmachines.py:55 -#: netbox/virtualization/tables/virtualmachines.py:139 -#: netbox/virtualization/tables/virtualmachines.py:194 +#: netbox/virtualization/tables/virtualmachines.py:26 +#: netbox/virtualization/tables/virtualmachines.py:109 +#: netbox/virtualization/tables/virtualmachines.py:165 #: netbox/vpn/tables/crypto.py:18 netbox/vpn/tables/crypto.py:57 #: netbox/vpn/tables/crypto.py:93 netbox/vpn/tables/crypto.py:129 #: netbox/vpn/tables/crypto.py:158 netbox/vpn/tables/l2vpn.py:23 #: netbox/vpn/tables/tunnels.py:18 netbox/vpn/tables/tunnels.py:40 #: netbox/wireless/tables/wirelesslan.py:18 -#: netbox/wireless/tables/wirelesslan.py:79 +#: netbox/wireless/tables/wirelesslan.py:88 msgid "Name" msgstr "名前" -#: netbox/circuits/tables/circuits.py:41 -#: netbox/circuits/tables/circuits.py:138 -#: netbox/circuits/tables/providers.py:45 -#: netbox/circuits/tables/providers.py:79 netbox/netbox/navigation/menu.py:266 -#: netbox/netbox/navigation/menu.py:270 netbox/netbox/navigation/menu.py:272 +#: netbox/circuits/tables/circuits.py:39 +#: netbox/circuits/tables/circuits.py:174 +#: netbox/circuits/tables/providers.py:43 +#: netbox/circuits/tables/providers.py:77 +#: netbox/circuits/tables/virtual_circuits.py:27 +#: netbox/netbox/navigation/menu.py:274 netbox/netbox/navigation/menu.py:278 +#: netbox/netbox/navigation/menu.py:280 #: netbox/templates/circuits/provider.html:57 #: netbox/templates/circuits/provideraccount.html:44 #: netbox/templates/circuits/providernetwork.html:50 msgid "Circuits" msgstr "回線" -#: netbox/circuits/tables/circuits.py:55 +#: netbox/circuits/tables/circuits.py:54 +#: netbox/circuits/tables/virtual_circuits.py:42 #: netbox/templates/circuits/circuit.html:26 +#: netbox/templates/circuits/virtualcircuit.html:35 +#: netbox/templates/dcim/interface.html:174 msgid "Circuit ID" msgstr "回線 ID" -#: netbox/circuits/tables/circuits.py:69 -#: netbox/wireless/forms/model_forms.py:160 +#: netbox/circuits/tables/circuits.py:72 +#: netbox/wireless/forms/model_forms.py:163 msgid "Side A" msgstr "サイド A" -#: netbox/circuits/tables/circuits.py:74 +#: netbox/circuits/tables/circuits.py:77 msgid "Side Z" msgstr "サイド Z" -#: netbox/circuits/tables/circuits.py:77 -#: netbox/templates/circuits/circuit.html:55 +#: netbox/circuits/tables/circuits.py:80 +#: netbox/templates/circuits/circuit.html:65 msgid "Commit Rate" msgstr "保証帯域" -#: netbox/circuits/tables/circuits.py:80 -#: netbox/circuits/tables/providers.py:48 -#: netbox/circuits/tables/providers.py:82 -#: netbox/circuits/tables/providers.py:107 netbox/dcim/tables/devices.py:1036 -#: netbox/dcim/tables/devicetypes.py:92 netbox/dcim/tables/modules.py:29 -#: netbox/dcim/tables/modules.py:73 netbox/dcim/tables/power.py:39 -#: netbox/dcim/tables/power.py:96 netbox/dcim/tables/racks.py:84 -#: netbox/dcim/tables/racks.py:145 netbox/dcim/tables/racks.py:225 -#: netbox/dcim/tables/sites.py:108 netbox/extras/tables/tables.py:582 -#: netbox/ipam/tables/asn.py:69 netbox/ipam/tables/fhrp.py:34 -#: netbox/ipam/tables/ip.py:136 netbox/ipam/tables/ip.py:275 -#: netbox/ipam/tables/ip.py:329 netbox/ipam/tables/ip.py:397 -#: netbox/ipam/tables/services.py:24 netbox/ipam/tables/services.py:54 -#: netbox/ipam/tables/vlans.py:145 netbox/ipam/tables/vrfs.py:47 -#: netbox/ipam/tables/vrfs.py:72 netbox/templates/dcim/htmx/cable_edit.html:89 +#: netbox/circuits/tables/circuits.py:84 +#: netbox/circuits/tables/providers.py:46 +#: netbox/circuits/tables/providers.py:80 +#: netbox/circuits/tables/providers.py:105 +#: netbox/circuits/tables/virtual_circuits.py:68 +#: netbox/dcim/tables/devices.py:1068 netbox/dcim/tables/devicetypes.py:97 +#: netbox/dcim/tables/modules.py:29 netbox/dcim/tables/modules.py:73 +#: netbox/dcim/tables/power.py:39 netbox/dcim/tables/power.py:96 +#: netbox/dcim/tables/racks.py:84 netbox/dcim/tables/racks.py:144 +#: netbox/dcim/tables/racks.py:224 netbox/dcim/tables/sites.py:107 +#: netbox/extras/tables/tables.py:582 netbox/ipam/tables/asn.py:69 +#: netbox/ipam/tables/fhrp.py:34 netbox/ipam/tables/ip.py:82 +#: netbox/ipam/tables/ip.py:226 netbox/ipam/tables/ip.py:281 +#: netbox/ipam/tables/ip.py:349 netbox/ipam/tables/services.py:24 +#: netbox/ipam/tables/services.py:54 netbox/ipam/tables/vlans.py:121 +#: netbox/ipam/tables/vrfs.py:47 netbox/ipam/tables/vrfs.py:72 +#: netbox/templates/dcim/htmx/cable_edit.html:89 #: netbox/templates/generic/bulk_edit.html:86 #: netbox/templates/inc/panels/comments.html:5 #: netbox/tenancy/tables/contacts.py:68 netbox/tenancy/tables/tenants.py:46 #: netbox/utilities/forms/fields/fields.py:29 -#: netbox/virtualization/tables/clusters.py:91 -#: netbox/virtualization/tables/virtualmachines.py:82 +#: netbox/virtualization/tables/clusters.py:95 +#: netbox/virtualization/tables/virtualmachines.py:52 #: netbox/vpn/tables/crypto.py:37 netbox/vpn/tables/crypto.py:74 #: netbox/vpn/tables/crypto.py:109 netbox/vpn/tables/crypto.py:140 #: netbox/vpn/tables/crypto.py:173 netbox/vpn/tables/l2vpn.py:37 #: netbox/vpn/tables/tunnels.py:61 netbox/wireless/tables/wirelesslan.py:27 -#: netbox/wireless/tables/wirelesslan.py:58 +#: netbox/wireless/tables/wirelesslan.py:66 msgid "Comments" msgstr "コメント" -#: netbox/circuits/tables/circuits.py:86 +#: netbox/circuits/tables/circuits.py:90 #: netbox/templates/tenancy/contact.html:84 #: netbox/tenancy/tables/contacts.py:73 msgid "Assignments" msgstr "割当" +#: netbox/circuits/tables/circuits.py:117 netbox/dcim/forms/connections.py:81 +msgid "Side" +msgstr "サイド" + +#: netbox/circuits/tables/circuits.py:120 +msgid "Termination Type" +msgstr "終了タイプ" + +#: netbox/circuits/tables/circuits.py:123 +msgid "Termination Point" +msgstr "ターミネーションポイント" + +#: netbox/circuits/tables/circuits.py:134 netbox/dcim/tables/devices.py:161 +#: netbox/templates/dcim/sitegroup.html:26 +msgid "Site Group" +msgstr "サイトグループ" + +#: netbox/circuits/tables/circuits.py:149 +#: netbox/templates/circuits/providernetwork.html:17 +#: netbox/templates/circuits/virtualcircuit.html:27 +#: netbox/templates/circuits/virtualcircuittermination.html:30 +#: netbox/templates/dcim/interface.html:170 +msgid "Provider Network" +msgstr "プロバイダネットワーク" + #: netbox/circuits/tables/providers.py:23 msgid "Accounts" msgstr "アカウント" -#: netbox/circuits/tables/providers.py:29 +#: netbox/circuits/tables/providers.py:28 msgid "Account Count" msgstr "アカウント数" -#: netbox/circuits/tables/providers.py:39 netbox/dcim/tables/sites.py:100 +#: netbox/circuits/tables/providers.py:37 netbox/dcim/tables/sites.py:99 msgid "ASN Count" msgstr "ASN 数" -#: netbox/circuits/views.py:331 +#: netbox/circuits/tables/virtual_circuits.py:65 +#: netbox/netbox/navigation/menu.py:234 +#: netbox/templates/circuits/virtualcircuit.html:87 +#: netbox/templates/vpn/l2vpn.html:56 netbox/templates/vpn/tunnel.html:72 +#: netbox/vpn/tables/tunnels.py:58 +msgid "Terminations" +msgstr "終端" + +#: netbox/circuits/tables/virtual_circuits.py:109 +#: netbox/dcim/forms/bulk_edit.py:745 netbox/dcim/forms/bulk_edit.py:1299 +#: netbox/dcim/forms/bulk_edit.py:1708 netbox/dcim/forms/bulk_edit.py:1760 +#: netbox/dcim/forms/bulk_import.py:668 netbox/dcim/forms/bulk_import.py:730 +#: netbox/dcim/forms/bulk_import.py:756 netbox/dcim/forms/bulk_import.py:782 +#: netbox/dcim/forms/bulk_import.py:802 netbox/dcim/forms/bulk_import.py:858 +#: netbox/dcim/forms/bulk_import.py:976 netbox/dcim/forms/bulk_import.py:1024 +#: netbox/dcim/forms/bulk_import.py:1041 netbox/dcim/forms/bulk_import.py:1053 +#: netbox/dcim/forms/bulk_import.py:1101 netbox/dcim/forms/bulk_import.py:1205 +#: netbox/dcim/forms/bulk_import.py:1541 netbox/dcim/forms/connections.py:24 +#: netbox/dcim/forms/filtersets.py:132 netbox/dcim/forms/filtersets.py:922 +#: netbox/dcim/forms/filtersets.py:1052 netbox/dcim/forms/filtersets.py:1243 +#: netbox/dcim/forms/filtersets.py:1268 netbox/dcim/forms/filtersets.py:1292 +#: netbox/dcim/forms/filtersets.py:1312 netbox/dcim/forms/filtersets.py:1339 +#: netbox/dcim/forms/filtersets.py:1449 netbox/dcim/forms/filtersets.py:1474 +#: netbox/dcim/forms/filtersets.py:1498 netbox/dcim/forms/filtersets.py:1516 +#: netbox/dcim/forms/filtersets.py:1533 netbox/dcim/forms/filtersets.py:1630 +#: netbox/dcim/forms/filtersets.py:1654 netbox/dcim/forms/filtersets.py:1678 +#: netbox/dcim/forms/model_forms.py:644 netbox/dcim/forms/model_forms.py:861 +#: netbox/dcim/forms/model_forms.py:1231 netbox/dcim/forms/model_forms.py:1716 +#: netbox/dcim/forms/model_forms.py:1787 +#: netbox/dcim/forms/object_create.py:249 netbox/dcim/tables/connections.py:22 +#: netbox/dcim/tables/connections.py:41 netbox/dcim/tables/connections.py:60 +#: netbox/dcim/tables/devices.py:296 netbox/dcim/tables/devices.py:381 +#: netbox/dcim/tables/devices.py:422 netbox/dcim/tables/devices.py:464 +#: netbox/dcim/tables/devices.py:514 netbox/dcim/tables/devices.py:619 +#: netbox/dcim/tables/devices.py:731 netbox/dcim/tables/devices.py:787 +#: netbox/dcim/tables/devices.py:833 netbox/dcim/tables/devices.py:892 +#: netbox/dcim/tables/devices.py:960 netbox/dcim/tables/devices.py:1089 +#: netbox/dcim/tables/modules.py:53 netbox/extras/forms/filtersets.py:328 +#: netbox/ipam/forms/bulk_import.py:303 netbox/ipam/forms/bulk_import.py:540 +#: netbox/ipam/forms/filtersets.py:603 netbox/ipam/forms/model_forms.py:333 +#: netbox/ipam/forms/model_forms.py:762 netbox/ipam/forms/model_forms.py:795 +#: netbox/ipam/forms/model_forms.py:821 netbox/ipam/tables/vlans.py:156 +#: netbox/templates/circuits/virtualcircuittermination.html:56 +#: netbox/templates/dcim/consoleport.html:20 +#: netbox/templates/dcim/consoleserverport.html:20 +#: netbox/templates/dcim/device.html:15 netbox/templates/dcim/device.html:130 +#: netbox/templates/dcim/device_edit.html:10 +#: netbox/templates/dcim/devicebay.html:20 +#: netbox/templates/dcim/devicebay.html:48 +#: netbox/templates/dcim/frontport.html:20 +#: netbox/templates/dcim/interface.html:30 +#: netbox/templates/dcim/interface.html:218 +#: netbox/templates/dcim/inventoryitem.html:20 +#: netbox/templates/dcim/module.html:57 +#: netbox/templates/dcim/modulebay.html:20 +#: netbox/templates/dcim/poweroutlet.html:20 +#: netbox/templates/dcim/powerport.html:20 +#: netbox/templates/dcim/rearport.html:20 +#: netbox/templates/dcim/virtualchassis.html:65 +#: netbox/templates/dcim/virtualchassis_edit.html:51 +#: netbox/templates/dcim/virtualdevicecontext.html:22 +#: netbox/templates/virtualization/virtualmachine.html:114 +#: netbox/templates/vpn/tunneltermination.html:23 +#: netbox/templates/wireless/inc/wirelesslink_interface.html:6 +#: netbox/virtualization/filtersets.py:133 +#: netbox/virtualization/forms/bulk_edit.py:119 +#: netbox/virtualization/forms/bulk_import.py:105 +#: netbox/virtualization/forms/filtersets.py:133 +#: netbox/virtualization/forms/model_forms.py:192 +#: netbox/virtualization/tables/virtualmachines.py:41 netbox/vpn/choices.py:52 +#: netbox/vpn/forms/bulk_import.py:86 netbox/vpn/forms/bulk_import.py:283 +#: netbox/vpn/forms/filtersets.py:275 netbox/vpn/forms/model_forms.py:91 +#: netbox/vpn/forms/model_forms.py:126 netbox/vpn/forms/model_forms.py:237 +#: netbox/vpn/forms/model_forms.py:456 +#: netbox/wireless/forms/model_forms.py:102 +#: netbox/wireless/forms/model_forms.py:144 +#: netbox/wireless/tables/wirelesslan.py:84 +msgid "Device" +msgstr "デバイス" + +#: netbox/circuits/views.py:356 #, python-brace-format msgid "No terminations have been defined for circuit {circuit}." msgstr "回路には終端が定義されていません {circuit}。" -#: netbox/circuits/views.py:380 +#: netbox/circuits/views.py:405 #, python-brace-format msgid "Swapped terminations for circuit {circuit}." msgstr "回路のスワップ端子 {circuit}。" -#: netbox/core/api/views.py:39 +#: netbox/core/api/views.py:51 msgid "This user does not have permission to synchronize this data source." msgstr "このユーザーには、このデータソースを同期する権限がありません。" @@ -1614,12 +2040,13 @@ msgstr "完了" #: netbox/core/choices.py:22 netbox/core/choices.py:59 #: netbox/core/constants.py:20 netbox/core/tables/tasks.py:34 #: netbox/dcim/choices.py:187 netbox/dcim/choices.py:239 -#: netbox/dcim/choices.py:1609 netbox/virtualization/choices.py:47 +#: netbox/dcim/choices.py:1593 netbox/dcim/choices.py:1666 +#: netbox/virtualization/choices.py:48 msgid "Failed" msgstr "失敗" -#: netbox/core/choices.py:35 netbox/netbox/navigation/menu.py:335 -#: netbox/netbox/navigation/menu.py:339 +#: netbox/core/choices.py:35 netbox/netbox/navigation/menu.py:356 +#: netbox/netbox/navigation/menu.py:360 #: netbox/templates/extras/script/base.html:14 #: netbox/templates/extras/script_list.html:7 #: netbox/templates/extras/script_list.html:12 @@ -1649,12 +2076,36 @@ msgstr "実行中" msgid "Errored" msgstr "エラー" -#: netbox/core/choices.py:87 netbox/core/tables/plugins.py:63 +#: netbox/core/choices.py:82 +msgid "Minutely" +msgstr "細かく" + +#: netbox/core/choices.py:83 +msgid "Hourly" +msgstr "毎時" + +#: netbox/core/choices.py:84 +msgid "12 hours" +msgstr "12 時間毎" + +#: netbox/core/choices.py:85 +msgid "Daily" +msgstr "毎日" + +#: netbox/core/choices.py:86 +msgid "Weekly" +msgstr "毎週" + +#: netbox/core/choices.py:87 +msgid "30 days" +msgstr "30 日毎" + +#: netbox/core/choices.py:103 netbox/core/tables/plugins.py:63 #: netbox/templates/generic/object.html:61 msgid "Updated" msgstr "更新" -#: netbox/core/choices.py:88 +#: netbox/core/choices.py:104 msgid "Deleted" msgstr "削除" @@ -1682,7 +2133,7 @@ msgstr "キャンセル済" #: netbox/core/data_backends.py:32 netbox/core/tables/plugins.py:51 #: netbox/templates/core/plugin.html:88 -#: netbox/templates/dcim/interface.html:216 +#: netbox/templates/dcim/interface.html:273 msgid "Local" msgstr "ローカル" @@ -1756,7 +2207,7 @@ msgstr "データソース (ID)" msgid "Data source (name)" msgstr "データソース (名前)" -#: netbox/core/filtersets.py:145 netbox/dcim/filtersets.py:501 +#: netbox/core/filtersets.py:145 netbox/dcim/filtersets.py:502 #: netbox/extras/filtersets.py:287 netbox/extras/filtersets.py:331 #: netbox/extras/filtersets.py:353 netbox/extras/filtersets.py:413 #: netbox/users/filtersets.py:28 @@ -1768,12 +2219,12 @@ msgid "User name" msgstr "ユーザ名" #: netbox/core/forms/bulk_edit.py:25 netbox/core/forms/filtersets.py:43 -#: netbox/core/tables/data.py:26 netbox/dcim/forms/bulk_edit.py:1137 -#: netbox/dcim/forms/bulk_edit.py:1415 netbox/dcim/forms/filtersets.py:1370 -#: netbox/dcim/tables/devices.py:553 netbox/dcim/tables/devicetypes.py:224 +#: netbox/core/tables/data.py:26 netbox/dcim/forms/bulk_edit.py:1140 +#: netbox/dcim/forms/bulk_edit.py:1418 netbox/dcim/forms/filtersets.py:1375 +#: netbox/dcim/tables/devices.py:567 netbox/dcim/tables/devicetypes.py:231 #: netbox/extras/forms/bulk_edit.py:123 netbox/extras/forms/bulk_edit.py:187 -#: netbox/extras/forms/bulk_edit.py:246 netbox/extras/forms/filtersets.py:142 -#: netbox/extras/forms/filtersets.py:229 netbox/extras/forms/filtersets.py:294 +#: netbox/extras/forms/bulk_edit.py:246 netbox/extras/forms/filtersets.py:145 +#: netbox/extras/forms/filtersets.py:235 netbox/extras/forms/filtersets.py:300 #: netbox/extras/tables/tables.py:162 netbox/extras/tables/tables.py:253 #: netbox/extras/tables/tables.py:415 netbox/netbox/preferences.py:22 #: netbox/templates/core/datasource.html:42 @@ -1784,18 +2235,18 @@ msgstr "ユーザ名" #: netbox/templates/users/objectpermission.html:25 #: netbox/templates/virtualization/vminterface.html:29 #: netbox/users/forms/bulk_edit.py:89 netbox/users/forms/filtersets.py:70 -#: netbox/users/tables.py:83 netbox/virtualization/forms/bulk_edit.py:217 -#: netbox/virtualization/forms/filtersets.py:215 +#: netbox/users/tables.py:83 netbox/virtualization/forms/bulk_edit.py:199 +#: netbox/virtualization/forms/filtersets.py:220 msgid "Enabled" msgstr "有効" -#: netbox/core/forms/bulk_edit.py:34 netbox/extras/forms/model_forms.py:285 +#: netbox/core/forms/bulk_edit.py:34 netbox/extras/forms/model_forms.py:299 #: netbox/templates/extras/savedfilter.html:52 #: netbox/vpn/forms/filtersets.py:97 netbox/vpn/forms/filtersets.py:127 #: netbox/vpn/forms/filtersets.py:151 netbox/vpn/forms/filtersets.py:170 -#: netbox/vpn/forms/model_forms.py:301 netbox/vpn/forms/model_forms.py:321 -#: netbox/vpn/forms/model_forms.py:337 netbox/vpn/forms/model_forms.py:357 -#: netbox/vpn/forms/model_forms.py:380 +#: netbox/vpn/forms/model_forms.py:302 netbox/vpn/forms/model_forms.py:323 +#: netbox/vpn/forms/model_forms.py:339 netbox/vpn/forms/model_forms.py:360 +#: netbox/vpn/forms/model_forms.py:383 msgid "Parameters" msgstr "パラメータ" @@ -1804,16 +2255,15 @@ msgid "Ignore rules" msgstr "ignoreルール" #: netbox/core/forms/filtersets.py:30 netbox/core/forms/model_forms.py:97 -#: netbox/extras/forms/model_forms.py:248 -#: netbox/extras/forms/model_forms.py:578 -#: netbox/extras/forms/model_forms.py:632 netbox/extras/tables/tables.py:191 +#: netbox/extras/forms/model_forms.py:262 +#: netbox/extras/forms/model_forms.py:592 +#: netbox/extras/forms/model_forms.py:646 netbox/extras/tables/tables.py:191 #: netbox/extras/tables/tables.py:483 netbox/extras/tables/tables.py:518 #: netbox/templates/core/datasource.html:31 -#: netbox/templates/dcim/device/render_config.html:18 #: netbox/templates/extras/configcontext.html:29 #: netbox/templates/extras/configtemplate.html:21 #: netbox/templates/extras/exporttemplate.html:35 -#: netbox/templates/virtualization/virtualmachine/render_config.html:18 +#: netbox/templates/extras/object_render_config.html:19 msgid "Data Source" msgstr "データソース" @@ -1822,17 +2272,17 @@ msgid "File" msgstr "ファイル" #: netbox/core/forms/filtersets.py:60 netbox/core/forms/mixins.py:16 -#: netbox/extras/forms/filtersets.py:170 netbox/extras/forms/filtersets.py:328 -#: netbox/extras/forms/filtersets.py:413 +#: netbox/extras/forms/filtersets.py:174 netbox/extras/forms/filtersets.py:335 +#: netbox/extras/forms/filtersets.py:421 msgid "Data source" msgstr "データソース" -#: netbox/core/forms/filtersets.py:70 netbox/extras/forms/filtersets.py:440 +#: netbox/core/forms/filtersets.py:71 netbox/extras/forms/filtersets.py:448 msgid "Creation" msgstr "作成" -#: netbox/core/forms/filtersets.py:74 netbox/core/forms/filtersets.py:160 -#: netbox/extras/forms/filtersets.py:461 netbox/extras/tables/tables.py:220 +#: netbox/core/forms/filtersets.py:75 netbox/core/forms/filtersets.py:161 +#: netbox/extras/forms/filtersets.py:469 netbox/extras/tables/tables.py:220 #: netbox/extras/tables/tables.py:294 netbox/extras/tables/tables.py:326 #: netbox/extras/tables/tables.py:571 netbox/templates/core/job.html:38 #: netbox/templates/core/objectchange.html:52 @@ -1840,42 +2290,42 @@ msgstr "作成" msgid "Object Type" msgstr "オブジェクトタイプ" -#: netbox/core/forms/filtersets.py:84 +#: netbox/core/forms/filtersets.py:85 msgid "Created after" msgstr "以降に作成" -#: netbox/core/forms/filtersets.py:89 +#: netbox/core/forms/filtersets.py:90 msgid "Created before" msgstr "以前に作成" -#: netbox/core/forms/filtersets.py:94 +#: netbox/core/forms/filtersets.py:95 msgid "Scheduled after" msgstr "以降に予定" -#: netbox/core/forms/filtersets.py:99 +#: netbox/core/forms/filtersets.py:100 msgid "Scheduled before" msgstr "以前に予定" -#: netbox/core/forms/filtersets.py:104 +#: netbox/core/forms/filtersets.py:105 msgid "Started after" msgstr "以降に開始" -#: netbox/core/forms/filtersets.py:109 +#: netbox/core/forms/filtersets.py:110 msgid "Started before" msgstr "以前に開始" -#: netbox/core/forms/filtersets.py:114 +#: netbox/core/forms/filtersets.py:115 msgid "Completed after" msgstr "以降に完了" -#: netbox/core/forms/filtersets.py:119 +#: netbox/core/forms/filtersets.py:120 msgid "Completed before" msgstr "以前に完了" -#: netbox/core/forms/filtersets.py:126 netbox/core/forms/filtersets.py:155 -#: netbox/dcim/forms/bulk_edit.py:462 netbox/dcim/forms/filtersets.py:418 -#: netbox/dcim/forms/filtersets.py:462 netbox/dcim/forms/model_forms.py:316 -#: netbox/extras/forms/filtersets.py:456 netbox/extras/forms/filtersets.py:475 +#: netbox/core/forms/filtersets.py:127 netbox/core/forms/filtersets.py:156 +#: netbox/dcim/forms/bulk_edit.py:465 netbox/dcim/forms/filtersets.py:419 +#: netbox/dcim/forms/filtersets.py:463 netbox/dcim/forms/model_forms.py:324 +#: netbox/extras/forms/filtersets.py:464 netbox/extras/forms/filtersets.py:484 #: netbox/extras/tables/tables.py:302 netbox/extras/tables/tables.py:342 #: netbox/templates/core/objectchange.html:36 #: netbox/templates/dcim/rackreservation.html:58 @@ -1889,22 +2339,22 @@ msgstr "以前に完了" msgid "User" msgstr "ユーザ" -#: netbox/core/forms/filtersets.py:134 netbox/core/tables/change_logging.py:15 +#: netbox/core/forms/filtersets.py:135 netbox/core/tables/change_logging.py:15 #: netbox/extras/tables/tables.py:609 netbox/extras/tables/tables.py:646 #: netbox/templates/core/objectchange.html:32 msgid "Time" msgstr "時間" -#: netbox/core/forms/filtersets.py:139 netbox/extras/forms/filtersets.py:445 +#: netbox/core/forms/filtersets.py:140 netbox/extras/forms/filtersets.py:453 msgid "After" msgstr "以降" -#: netbox/core/forms/filtersets.py:144 netbox/extras/forms/filtersets.py:450 +#: netbox/core/forms/filtersets.py:145 netbox/extras/forms/filtersets.py:458 msgid "Before" msgstr "以前" -#: netbox/core/forms/filtersets.py:148 netbox/core/tables/change_logging.py:29 -#: netbox/extras/forms/model_forms.py:396 +#: netbox/core/forms/filtersets.py:149 netbox/core/tables/change_logging.py:29 +#: netbox/extras/forms/model_forms.py:410 #: netbox/templates/core/objectchange.html:46 #: netbox/templates/extras/eventrule.html:71 msgid "Action" @@ -1938,22 +2388,22 @@ msgstr "同期するファイルをアップロードするか、データファ msgid "Rack Elevations" msgstr "ラック図" -#: netbox/core/forms/model_forms.py:157 netbox/dcim/choices.py:1520 -#: netbox/dcim/forms/bulk_edit.py:984 netbox/dcim/forms/bulk_edit.py:1372 -#: netbox/dcim/forms/bulk_edit.py:1390 netbox/dcim/tables/racks.py:158 -#: netbox/netbox/navigation/menu.py:291 netbox/netbox/navigation/menu.py:295 +#: netbox/core/forms/model_forms.py:157 netbox/dcim/choices.py:1522 +#: netbox/dcim/forms/bulk_edit.py:987 netbox/dcim/forms/bulk_edit.py:1375 +#: netbox/dcim/forms/bulk_edit.py:1393 netbox/dcim/tables/racks.py:157 +#: netbox/netbox/navigation/menu.py:312 netbox/netbox/navigation/menu.py:316 msgid "Power" msgstr "電源" -#: netbox/core/forms/model_forms.py:159 netbox/netbox/navigation/menu.py:154 +#: netbox/core/forms/model_forms.py:159 netbox/netbox/navigation/menu.py:160 #: netbox/templates/core/inc/config_data.html:37 msgid "IPAM" msgstr "IPAM" -#: netbox/core/forms/model_forms.py:160 netbox/netbox/navigation/menu.py:230 +#: netbox/core/forms/model_forms.py:160 netbox/netbox/navigation/menu.py:238 #: netbox/templates/core/inc/config_data.html:50 #: netbox/vpn/forms/bulk_edit.py:77 netbox/vpn/forms/filtersets.py:43 -#: netbox/vpn/forms/model_forms.py:61 netbox/vpn/forms/model_forms.py:146 +#: netbox/vpn/forms/model_forms.py:62 netbox/vpn/forms/model_forms.py:147 msgid "Security" msgstr "セキュリティ" @@ -1968,7 +2418,7 @@ msgid "Pagination" msgstr "ページネーション" #: netbox/core/forms/model_forms.py:163 netbox/extras/forms/bulk_edit.py:92 -#: netbox/extras/forms/filtersets.py:47 netbox/extras/forms/model_forms.py:116 +#: netbox/extras/forms/filtersets.py:48 netbox/extras/forms/model_forms.py:116 #: netbox/extras/forms/model_forms.py:129 #: netbox/templates/core/inc/config_data.html:93 msgid "Validation" @@ -1979,7 +2429,7 @@ msgstr "検証" msgid "User Preferences" msgstr "ユーザ設定" -#: netbox/core/forms/model_forms.py:167 netbox/dcim/forms/filtersets.py:732 +#: netbox/core/forms/model_forms.py:167 netbox/dcim/forms/filtersets.py:733 #: netbox/templates/core/inc/config_data.html:127 #: netbox/users/forms/model_forms.py:64 msgid "Miscellaneous" @@ -2014,7 +2464,7 @@ msgstr "ユーザ名" msgid "request ID" msgstr "リクエスト ID" -#: netbox/core/models/change_logging.py:52 netbox/extras/models/staging.py:69 +#: netbox/core/models/change_logging.py:52 netbox/extras/models/staging.py:77 msgid "action" msgstr "アクション" @@ -2039,9 +2489,9 @@ msgstr "オブジェクト変更" msgid "Change logging is not supported for this object type ({type})." msgstr "このオブジェクトタイプ ({type}) では変更ログはサポートされていません。" -#: netbox/core/models/config.py:18 netbox/core/models/data.py:266 +#: netbox/core/models/config.py:18 netbox/core/models/data.py:263 #: netbox/core/models/files.py:27 netbox/core/models/jobs.py:50 -#: netbox/extras/models/models.py:730 netbox/extras/models/notifications.py:39 +#: netbox/extras/models/models.py:733 netbox/extras/models/notifications.py:39 #: netbox/extras/models/notifications.py:186 #: netbox/netbox/models/features.py:53 netbox/users/models/tokens.py:32 msgid "created" @@ -2076,24 +2526,24 @@ msgstr "現在の設定" msgid "Config revision #{id}" msgstr "設定履歴 #{id}" -#: netbox/core/models/data.py:44 netbox/dcim/models/cables.py:43 -#: netbox/dcim/models/device_component_templates.py:203 -#: netbox/dcim/models/device_component_templates.py:237 -#: netbox/dcim/models/device_component_templates.py:272 -#: netbox/dcim/models/device_component_templates.py:334 -#: netbox/dcim/models/device_component_templates.py:413 -#: netbox/dcim/models/device_component_templates.py:512 -#: netbox/dcim/models/device_component_templates.py:612 -#: netbox/dcim/models/device_components.py:283 -#: netbox/dcim/models/device_components.py:312 -#: netbox/dcim/models/device_components.py:345 -#: netbox/dcim/models/device_components.py:463 -#: netbox/dcim/models/device_components.py:605 -#: netbox/dcim/models/device_components.py:970 -#: netbox/dcim/models/device_components.py:1044 -#: netbox/dcim/models/power.py:102 netbox/extras/models/customfields.py:78 +#: netbox/core/models/data.py:44 netbox/dcim/models/cables.py:44 +#: netbox/dcim/models/device_component_templates.py:199 +#: netbox/dcim/models/device_component_templates.py:234 +#: netbox/dcim/models/device_component_templates.py:270 +#: netbox/dcim/models/device_component_templates.py:335 +#: netbox/dcim/models/device_component_templates.py:420 +#: netbox/dcim/models/device_component_templates.py:526 +#: netbox/dcim/models/device_component_templates.py:626 +#: netbox/dcim/models/device_components.py:279 +#: netbox/dcim/models/device_components.py:306 +#: netbox/dcim/models/device_components.py:337 +#: netbox/dcim/models/device_components.py:453 +#: netbox/dcim/models/device_components.py:653 +#: netbox/dcim/models/device_components.py:1021 +#: netbox/dcim/models/device_components.py:1092 +#: netbox/dcim/models/power.py:100 netbox/extras/models/customfields.py:78 #: netbox/extras/models/search.py:41 -#: netbox/virtualization/models/clusters.py:61 netbox/vpn/models/l2vpn.py:32 +#: netbox/virtualization/models/clusters.py:57 netbox/vpn/models/l2vpn.py:32 msgid "type" msgstr "タイプ" @@ -2105,8 +2555,8 @@ msgid "URL" msgstr "URL" #: netbox/core/models/data.py:59 -#: netbox/dcim/models/device_component_templates.py:418 -#: netbox/dcim/models/device_components.py:512 +#: netbox/dcim/models/device_component_templates.py:425 +#: netbox/dcim/models/device_components.py:505 #: netbox/extras/models/models.py:70 netbox/extras/models/models.py:301 #: netbox/extras/models/models.py:526 netbox/users/models/permissions.py:29 msgid "enabled" @@ -2136,63 +2586,63 @@ msgstr "データソース" msgid "data sources" msgstr "データソース" -#: netbox/core/models/data.py:122 +#: netbox/core/models/data.py:119 #, python-brace-format msgid "Unknown backend type: {type}" msgstr "不明なバックエンドタイプ: {type}" -#: netbox/core/models/data.py:164 +#: netbox/core/models/data.py:161 msgid "Cannot initiate sync; syncing already in progress." msgstr "同期を開始できません。同期はすでに進行中です。" -#: netbox/core/models/data.py:177 +#: netbox/core/models/data.py:174 msgid "" "There was an error initializing the backend. A dependency needs to be " "installed: " msgstr "バックエンドの初期化中にエラーが発生しました。依存関係をインストールする必要があります。 " -#: netbox/core/models/data.py:270 netbox/core/models/files.py:31 +#: netbox/core/models/data.py:267 netbox/core/models/files.py:31 #: netbox/netbox/models/features.py:59 msgid "last updated" msgstr "最終更新日時" -#: netbox/core/models/data.py:280 netbox/dcim/models/cables.py:444 +#: netbox/core/models/data.py:277 netbox/dcim/models/cables.py:446 msgid "path" msgstr "パス" -#: netbox/core/models/data.py:283 +#: netbox/core/models/data.py:280 msgid "File path relative to the data source's root" msgstr "データソースのルートを基準にしたファイルパス" -#: netbox/core/models/data.py:287 netbox/ipam/models/ip.py:503 +#: netbox/core/models/data.py:284 netbox/ipam/models/ip.py:489 msgid "size" msgstr "サイズ" -#: netbox/core/models/data.py:290 +#: netbox/core/models/data.py:287 msgid "hash" msgstr "ハッシュ" -#: netbox/core/models/data.py:294 +#: netbox/core/models/data.py:291 msgid "Length must be 64 hexadecimal characters." msgstr "64 桁の 16 進数でなければなりません。" -#: netbox/core/models/data.py:296 +#: netbox/core/models/data.py:293 msgid "SHA256 hash of the file data" msgstr "ファイルデータの SHA256 ハッシュ" -#: netbox/core/models/data.py:313 +#: netbox/core/models/data.py:310 msgid "data file" msgstr "データファイル" -#: netbox/core/models/data.py:314 +#: netbox/core/models/data.py:311 msgid "data files" msgstr "データファイル" -#: netbox/core/models/data.py:401 +#: netbox/core/models/data.py:398 msgid "auto sync record" msgstr "自動同期レコード" -#: netbox/core/models/data.py:402 +#: netbox/core/models/data.py:399 msgid "auto sync records" msgstr "自動同期レコード" @@ -2216,6 +2666,11 @@ msgstr "管理対象ファイル" msgid "managed files" msgstr "管理対象ファイル" +#: netbox/core/models/files.py:100 +#, python-brace-format +msgid "A {model} with this file path already exists ({path})." +msgstr "A {model} このファイルパスは既に存在します ({path})。" + #: netbox/core/models/jobs.py:54 msgid "scheduled" msgstr "予定日時" @@ -2237,7 +2692,7 @@ msgid "completed" msgstr "完了日時" #: netbox/core/models/jobs.py:91 netbox/extras/models/models.py:101 -#: netbox/extras/models/staging.py:87 +#: netbox/extras/models/staging.py:95 msgid "data" msgstr "データ" @@ -2267,7 +2722,7 @@ msgstr "このオブジェクトタイプにはジョブを割り当てられま msgid "Invalid status for job termination. Choices are: {choices}" msgstr "ジョブ終了のステータスが無効です。選択肢は以下のとおりです。 {choices}" -#: netbox/core/models/jobs.py:221 +#: netbox/core/models/jobs.py:231 msgid "" "enqueue() cannot be called with values for both schedule_at and immediate." msgstr "enqueue () は schedule_at と immediate の両方の値を指定して呼び出すことはできません。" @@ -2288,7 +2743,7 @@ msgstr "フルネーム" #: netbox/extras/tables/tables.py:297 netbox/extras/tables/tables.py:329 #: netbox/extras/tables/tables.py:409 netbox/extras/tables/tables.py:470 #: netbox/extras/tables/tables.py:576 netbox/extras/tables/tables.py:616 -#: netbox/extras/tables/tables.py:653 netbox/netbox/tables/tables.py:244 +#: netbox/extras/tables/tables.py:653 netbox/netbox/tables/tables.py:247 #: netbox/templates/core/objectchange.html:58 #: netbox/templates/extras/eventrule.html:78 #: netbox/templates/extras/journalentry.html:18 @@ -2316,11 +2771,11 @@ msgid "Last updated" msgstr "最終更新日" #: netbox/core/tables/jobs.py:10 netbox/core/tables/tasks.py:76 -#: netbox/dcim/tables/devicetypes.py:164 netbox/extras/tables/tables.py:216 -#: netbox/extras/tables/tables.py:460 netbox/netbox/tables/tables.py:189 +#: netbox/dcim/tables/devicetypes.py:169 netbox/extras/tables/tables.py:216 +#: netbox/extras/tables/tables.py:460 netbox/netbox/tables/tables.py:192 #: netbox/templates/dcim/virtualchassis_edit.html:52 #: netbox/utilities/forms/forms.py:73 -#: netbox/wireless/tables/wirelesslink.py:17 +#: netbox/wireless/tables/wirelesslink.py:16 msgid "ID" msgstr "ID" @@ -2386,7 +2841,7 @@ msgstr "ワーカー" msgid "Host" msgstr "ホスト" -#: netbox/core/tables/tasks.py:50 netbox/ipam/forms/filtersets.py:535 +#: netbox/core/tables/tasks.py:50 netbox/ipam/forms/filtersets.py:587 msgid "Port" msgstr "ポート" @@ -2434,71 +2889,84 @@ msgstr "PID" msgid "No workers found" msgstr "作業者が見つかりませんでした" -#: netbox/core/views.py:90 -#, python-brace-format -msgid "Queued job #{id} to sync {datasource}" -msgstr "キューに入っているジョブ #{id} 同期するには {datasource}" - -#: netbox/core/views.py:319 -#, python-brace-format -msgid "Restored configuration revision #{id}" -msgstr "復元された設定リビジョン #{id}" - -#: netbox/core/views.py:412 netbox/core/views.py:455 netbox/core/views.py:531 +#: netbox/core/utils.py:84 netbox/core/utils.py:150 netbox/core/views.py:396 #, python-brace-format msgid "Job {job_id} not found" msgstr "ジョブ {job_id} 見つかりません" -#: netbox/core/views.py:463 -#, python-brace-format -msgid "Job {id} has been deleted." -msgstr "ジョブ {id} が削除されました。" - -#: netbox/core/views.py:465 -#, python-brace-format -msgid "Error deleting job {id}: {error}" -msgstr "ジョブの削除中にエラーが発生しました {id}: {error}" - -#: netbox/core/views.py:478 netbox/core/views.py:496 +#: netbox/core/utils.py:102 netbox/core/utils.py:118 #, python-brace-format msgid "Job {id} not found." msgstr "ジョブ {id} 見つかりません。" -#: netbox/core/views.py:484 +#: netbox/core/views.py:88 +#, python-brace-format +msgid "Queued job #{id} to sync {datasource}" +msgstr "キューに入っているジョブ #{id} 同期するには {datasource}" + +#: netbox/core/views.py:332 +#, python-brace-format +msgid "Restored configuration revision #{id}" +msgstr "復元された設定リビジョン #{id}" + +#: netbox/core/views.py:435 +#, python-brace-format +msgid "Job {id} has been deleted." +msgstr "ジョブ {id} が削除されました。" + +#: netbox/core/views.py:437 +#, python-brace-format +msgid "Error deleting job {id}: {error}" +msgstr "ジョブの削除中にエラーが発生しました {id}: {error}" + +#: netbox/core/views.py:446 #, python-brace-format msgid "Job {id} has been re-enqueued." msgstr "ジョブ {id} が再エンキューされました。" -#: netbox/core/views.py:519 +#: netbox/core/views.py:455 #, python-brace-format msgid "Job {id} has been enqueued." msgstr "ジョブ {id} キューに追加されました。" -#: netbox/core/views.py:538 +#: netbox/core/views.py:464 #, python-brace-format msgid "Job {id} has been stopped." msgstr "ジョブ {id} 停止されました。" -#: netbox/core/views.py:540 +#: netbox/core/views.py:466 #, python-brace-format msgid "Failed to stop job {id}" msgstr "ジョブを停止できませんでした {id}" -#: netbox/core/views.py:674 +#: netbox/core/views.py:601 msgid "Plugins catalog could not be loaded" msgstr "プラグインカタログを読み込めませんでした" -#: netbox/core/views.py:708 +#: netbox/core/views.py:635 #, python-brace-format msgid "Plugin {name} not found" msgstr "プラグイン {name} が見つかりません" -#: netbox/dcim/api/serializers_/devices.py:49 -#: netbox/dcim/api/serializers_/devicetypes.py:25 +#: netbox/dcim/api/serializers_/device_components.py:262 +msgid "Interface mode does not support q-in-q service vlan" +msgstr "インターフェイスモードは Q-in-Q サービス VLAN をサポートしていません" + +#: netbox/dcim/api/serializers_/device_components.py:269 +msgid "Interface mode does not support untagged vlan" +msgstr "インターフェイスモードはタグなし VLAN をサポートしていません" + +#: netbox/dcim/api/serializers_/device_components.py:274 +#: netbox/dcim/api/serializers_/device_components.py:279 +msgid "Interface mode does not support tagged vlans" +msgstr "インターフェイスモードはタグ付き VLAN をサポートしていません" + +#: netbox/dcim/api/serializers_/devices.py:53 +#: netbox/dcim/api/serializers_/devicetypes.py:26 msgid "Position (U)" msgstr "ポジション (U)" -#: netbox/dcim/api/serializers_/racks.py:112 +#: netbox/dcim/api/serializers_/racks.py:113 #: netbox/templates/dcim/rack.html:28 msgid "Facility ID" msgstr "ファシリティ ID" @@ -2508,8 +2976,9 @@ msgid "Staging" msgstr "ステージング" #: netbox/dcim/choices.py:23 netbox/dcim/choices.py:189 -#: netbox/dcim/choices.py:240 netbox/dcim/choices.py:1533 -#: netbox/virtualization/choices.py:23 netbox/virtualization/choices.py:48 +#: netbox/dcim/choices.py:240 netbox/dcim/choices.py:1535 +#: netbox/dcim/choices.py:1667 netbox/virtualization/choices.py:23 +#: netbox/virtualization/choices.py:49 msgid "Decommissioning" msgstr "廃止" @@ -2572,7 +3041,7 @@ msgstr "廃止済" msgid "Millimeters" msgstr "ミリメートル" -#: netbox/dcim/choices.py:115 netbox/dcim/choices.py:1555 +#: netbox/dcim/choices.py:115 netbox/dcim/choices.py:1557 msgid "Inches" msgstr "インチ" @@ -2586,21 +3055,21 @@ msgstr "前面から背面" msgid "Rear to front" msgstr "背面から前面" -#: netbox/dcim/choices.py:151 netbox/dcim/forms/bulk_edit.py:69 -#: netbox/dcim/forms/bulk_edit.py:88 netbox/dcim/forms/bulk_edit.py:174 -#: netbox/dcim/forms/bulk_edit.py:1420 netbox/dcim/forms/bulk_import.py:60 -#: netbox/dcim/forms/bulk_import.py:74 netbox/dcim/forms/bulk_import.py:137 -#: netbox/dcim/forms/bulk_import.py:588 netbox/dcim/forms/bulk_import.py:855 -#: netbox/dcim/forms/bulk_import.py:1110 netbox/dcim/forms/filtersets.py:234 -#: netbox/dcim/forms/model_forms.py:74 netbox/dcim/forms/model_forms.py:93 -#: netbox/dcim/forms/model_forms.py:170 netbox/dcim/forms/model_forms.py:1069 -#: netbox/dcim/forms/model_forms.py:1509 -#: netbox/dcim/forms/object_import.py:176 netbox/dcim/tables/devices.py:656 -#: netbox/dcim/tables/devices.py:869 netbox/dcim/tables/devices.py:954 -#: netbox/extras/tables/tables.py:223 netbox/ipam/tables/fhrp.py:59 -#: netbox/ipam/tables/ip.py:378 netbox/ipam/tables/services.py:44 -#: netbox/templates/dcim/interface.html:102 -#: netbox/templates/dcim/interface.html:309 +#: netbox/dcim/choices.py:151 netbox/dcim/forms/bulk_edit.py:72 +#: netbox/dcim/forms/bulk_edit.py:91 netbox/dcim/forms/bulk_edit.py:177 +#: netbox/dcim/forms/bulk_edit.py:1423 netbox/dcim/forms/bulk_import.py:62 +#: netbox/dcim/forms/bulk_import.py:76 netbox/dcim/forms/bulk_import.py:139 +#: netbox/dcim/forms/bulk_import.py:593 netbox/dcim/forms/bulk_import.py:863 +#: netbox/dcim/forms/bulk_import.py:1118 netbox/dcim/forms/filtersets.py:235 +#: netbox/dcim/forms/model_forms.py:76 netbox/dcim/forms/model_forms.py:95 +#: netbox/dcim/forms/model_forms.py:174 netbox/dcim/forms/model_forms.py:1082 +#: netbox/dcim/forms/model_forms.py:1551 +#: netbox/dcim/forms/object_import.py:177 netbox/dcim/tables/devices.py:690 +#: netbox/dcim/tables/devices.py:900 netbox/dcim/tables/devices.py:987 +#: netbox/dcim/tables/devices.py:1147 netbox/extras/tables/tables.py:223 +#: netbox/ipam/tables/fhrp.py:59 netbox/ipam/tables/ip.py:330 +#: netbox/ipam/tables/services.py:44 netbox/templates/dcim/interface.html:108 +#: netbox/templates/dcim/interface.html:366 #: netbox/templates/dcim/location.html:41 netbox/templates/dcim/region.html:37 #: netbox/templates/dcim/sitegroup.html:37 #: netbox/templates/ipam/service.html:28 @@ -2613,12 +3082,12 @@ msgstr "背面から前面" #: netbox/tenancy/forms/bulk_import.py:58 #: netbox/tenancy/forms/model_forms.py:25 #: netbox/tenancy/forms/model_forms.py:68 -#: netbox/virtualization/forms/bulk_edit.py:207 -#: netbox/virtualization/forms/bulk_import.py:151 -#: netbox/virtualization/tables/virtualmachines.py:162 -#: netbox/wireless/forms/bulk_edit.py:24 -#: netbox/wireless/forms/bulk_import.py:21 -#: netbox/wireless/forms/model_forms.py:21 +#: netbox/virtualization/forms/bulk_edit.py:189 +#: netbox/virtualization/forms/bulk_import.py:157 +#: netbox/virtualization/tables/virtualmachines.py:132 +#: netbox/wireless/forms/bulk_edit.py:26 +#: netbox/wireless/forms/bulk_import.py:23 +#: netbox/wireless/forms/model_forms.py:22 msgid "Parent" msgstr "親" @@ -2641,7 +3110,7 @@ msgid "Rear" msgstr "背面" #: netbox/dcim/choices.py:186 netbox/dcim/choices.py:238 -#: netbox/virtualization/choices.py:46 +#: netbox/dcim/choices.py:1665 netbox/virtualization/choices.py:47 msgid "Staged" msgstr "検証" @@ -2674,7 +3143,7 @@ msgid "Top to bottom" msgstr "上から下へ" #: netbox/dcim/choices.py:215 netbox/dcim/choices.py:259 -#: netbox/dcim/choices.py:1305 +#: netbox/dcim/choices.py:1307 msgid "Passive" msgstr "パッシブ" @@ -2704,8 +3173,8 @@ msgstr "独自規格" #: netbox/dcim/choices.py:581 netbox/dcim/choices.py:824 #: netbox/dcim/choices.py:1221 netbox/dcim/choices.py:1223 -#: netbox/dcim/choices.py:1449 netbox/dcim/choices.py:1451 -#: netbox/netbox/navigation/menu.py:200 +#: netbox/dcim/choices.py:1451 netbox/dcim/choices.py:1453 +#: netbox/netbox/navigation/menu.py:208 msgid "Other" msgstr "その他" @@ -2722,10 +3191,10 @@ msgid "Virtual" msgstr "仮想" #: netbox/dcim/choices.py:856 netbox/dcim/choices.py:1099 -#: netbox/dcim/forms/bulk_edit.py:1563 netbox/dcim/forms/filtersets.py:1330 -#: netbox/dcim/forms/model_forms.py:995 netbox/dcim/forms/model_forms.py:1404 -#: netbox/netbox/navigation/menu.py:140 netbox/netbox/navigation/menu.py:144 -#: netbox/templates/dcim/interface.html:210 +#: netbox/dcim/forms/bulk_edit.py:1578 netbox/dcim/forms/filtersets.py:1335 +#: netbox/dcim/forms/model_forms.py:1007 netbox/dcim/forms/model_forms.py:1445 +#: netbox/netbox/navigation/menu.py:146 netbox/netbox/navigation/menu.py:150 +#: netbox/templates/dcim/interface.html:267 msgid "Wireless" msgstr "無線" @@ -2733,13 +3202,13 @@ msgstr "無線" msgid "Virtual interfaces" msgstr "仮想インタフェース" -#: netbox/dcim/choices.py:1025 netbox/dcim/forms/bulk_edit.py:1428 -#: netbox/dcim/forms/bulk_import.py:862 netbox/dcim/forms/model_forms.py:981 -#: netbox/dcim/tables/devices.py:660 netbox/templates/dcim/interface.html:106 +#: netbox/dcim/choices.py:1025 netbox/dcim/forms/bulk_edit.py:1431 +#: netbox/dcim/forms/bulk_import.py:870 netbox/dcim/forms/model_forms.py:993 +#: netbox/dcim/tables/devices.py:694 netbox/templates/dcim/interface.html:112 #: netbox/templates/virtualization/vminterface.html:43 -#: netbox/virtualization/forms/bulk_edit.py:212 -#: netbox/virtualization/forms/bulk_import.py:158 -#: netbox/virtualization/tables/virtualmachines.py:166 +#: netbox/virtualization/forms/bulk_edit.py:194 +#: netbox/virtualization/forms/bulk_import.py:164 +#: netbox/virtualization/tables/virtualmachines.py:136 msgid "Bridge" msgstr "ブリッジ" @@ -2763,10 +3232,10 @@ msgstr "イーサネット (バックプレーン)" msgid "Cellular" msgstr "セルラー" -#: netbox/dcim/choices.py:1167 netbox/dcim/forms/filtersets.py:383 -#: netbox/dcim/forms/filtersets.py:809 netbox/dcim/forms/filtersets.py:963 -#: netbox/dcim/forms/filtersets.py:1542 -#: netbox/templates/dcim/inventoryitem.html:52 +#: netbox/dcim/choices.py:1167 netbox/dcim/forms/filtersets.py:384 +#: netbox/dcim/forms/filtersets.py:810 netbox/dcim/forms/filtersets.py:964 +#: netbox/dcim/forms/filtersets.py:1547 +#: netbox/templates/dcim/inventoryitem.html:56 #: netbox/templates/dcim/virtualchassis_edit.html:54 msgid "Serial" msgstr "シリアル" @@ -2792,109 +3261,95 @@ msgstr "全二重" msgid "Auto" msgstr "自動" -#: netbox/dcim/choices.py:1265 +#: netbox/dcim/choices.py:1266 msgid "Access" msgstr "アクセス" -#: netbox/dcim/choices.py:1266 netbox/ipam/tables/vlans.py:172 -#: netbox/ipam/tables/vlans.py:217 +#: netbox/dcim/choices.py:1267 netbox/ipam/tables/vlans.py:148 +#: netbox/ipam/tables/vlans.py:193 #: netbox/templates/dcim/inc/interface_vlans_table.html:7 msgid "Tagged" msgstr "タグ付き" -#: netbox/dcim/choices.py:1267 +#: netbox/dcim/choices.py:1268 msgid "Tagged (All)" msgstr "タグ付き (全て)" -#: netbox/dcim/choices.py:1296 +#: netbox/dcim/choices.py:1269 netbox/templates/ipam/vlan_edit.html:22 +msgid "Q-in-Q (802.1ad)" +msgstr "Q-in-Q (802.1ad)" + +#: netbox/dcim/choices.py:1298 msgid "IEEE Standard" msgstr "IEEE スタンダード" -#: netbox/dcim/choices.py:1307 +#: netbox/dcim/choices.py:1309 msgid "Passive 24V (2-pair)" msgstr "パッシブ 24V (2 ペア)" -#: netbox/dcim/choices.py:1308 +#: netbox/dcim/choices.py:1310 msgid "Passive 24V (4-pair)" msgstr "パッシブ 24V (4ペア)" -#: netbox/dcim/choices.py:1309 +#: netbox/dcim/choices.py:1311 msgid "Passive 48V (2-pair)" msgstr "パッシブ 48V (2 ペア)" -#: netbox/dcim/choices.py:1310 +#: netbox/dcim/choices.py:1312 msgid "Passive 48V (4-pair)" msgstr "パッシブ 48V (4ペア)" -#: netbox/dcim/choices.py:1380 netbox/dcim/choices.py:1490 +#: netbox/dcim/choices.py:1382 netbox/dcim/choices.py:1492 msgid "Copper" msgstr "カッパー" -#: netbox/dcim/choices.py:1403 +#: netbox/dcim/choices.py:1405 msgid "Fiber Optic" msgstr "光ファイバー" -#: netbox/dcim/choices.py:1436 netbox/dcim/choices.py:1519 +#: netbox/dcim/choices.py:1438 netbox/dcim/choices.py:1521 msgid "USB" msgstr "USB" -#: netbox/dcim/choices.py:1506 +#: netbox/dcim/choices.py:1508 msgid "Fiber" msgstr "ファイバー" -#: netbox/dcim/choices.py:1531 netbox/dcim/forms/filtersets.py:1227 +#: netbox/dcim/choices.py:1533 netbox/dcim/forms/filtersets.py:1228 msgid "Connected" msgstr "接続済" -#: netbox/dcim/choices.py:1550 netbox/wireless/choices.py:497 +#: netbox/dcim/choices.py:1552 netbox/netbox/choices.py:175 msgid "Kilometers" msgstr "キロメートル" -#: netbox/dcim/choices.py:1551 netbox/templates/dcim/cable_trace.html:65 -#: netbox/wireless/choices.py:498 +#: netbox/dcim/choices.py:1553 netbox/netbox/choices.py:176 +#: netbox/templates/dcim/cable_trace.html:65 msgid "Meters" msgstr "メートル" -#: netbox/dcim/choices.py:1552 +#: netbox/dcim/choices.py:1554 msgid "Centimeters" msgstr "センチメートル" -#: netbox/dcim/choices.py:1553 netbox/wireless/choices.py:499 +#: netbox/dcim/choices.py:1555 netbox/netbox/choices.py:177 msgid "Miles" msgstr "マイル" -#: netbox/dcim/choices.py:1554 netbox/templates/dcim/cable_trace.html:66 -#: netbox/wireless/choices.py:500 +#: netbox/dcim/choices.py:1556 netbox/netbox/choices.py:178 +#: netbox/templates/dcim/cable_trace.html:66 msgid "Feet" msgstr "フィート" -#: netbox/dcim/choices.py:1570 netbox/templates/dcim/device.html:327 -#: netbox/templates/dcim/rack.html:107 -msgid "Kilograms" -msgstr "キログラム" - -#: netbox/dcim/choices.py:1571 -msgid "Grams" -msgstr "グラム" - -#: netbox/dcim/choices.py:1572 netbox/templates/dcim/device.html:328 -#: netbox/templates/dcim/rack.html:108 -msgid "Pounds" -msgstr "ポンド" - -#: netbox/dcim/choices.py:1573 -msgid "Ounces" -msgstr "オンス" - -#: netbox/dcim/choices.py:1620 +#: netbox/dcim/choices.py:1604 msgid "Redundant" msgstr "冗長" -#: netbox/dcim/choices.py:1641 +#: netbox/dcim/choices.py:1625 msgid "Single phase" msgstr "単相" -#: netbox/dcim/choices.py:1642 +#: netbox/dcim/choices.py:1626 msgid "Three-phase" msgstr "三相" @@ -2908,335 +3363,319 @@ msgstr "MAC アドレス形式が無効です: {value}" msgid "Invalid WWN format: {value}" msgstr "WWN 形式が無効です: {value}" -#: netbox/dcim/filtersets.py:86 +#: netbox/dcim/filtersets.py:87 msgid "Parent region (ID)" msgstr "親リージョン (ID)" -#: netbox/dcim/filtersets.py:92 +#: netbox/dcim/filtersets.py:93 msgid "Parent region (slug)" msgstr "親リージョン (slug)" -#: netbox/dcim/filtersets.py:116 +#: netbox/dcim/filtersets.py:117 msgid "Parent site group (ID)" msgstr "親サイトグループ (ID)" -#: netbox/dcim/filtersets.py:122 +#: netbox/dcim/filtersets.py:123 msgid "Parent site group (slug)" msgstr "親サイトグループ (slug)" -#: netbox/dcim/filtersets.py:164 netbox/extras/filtersets.py:364 -#: netbox/ipam/filtersets.py:843 netbox/ipam/filtersets.py:995 +#: netbox/dcim/filtersets.py:165 netbox/extras/filtersets.py:364 +#: netbox/ipam/filtersets.py:810 netbox/ipam/filtersets.py:962 msgid "Group (ID)" msgstr "グループ (ID)" -#: netbox/dcim/filtersets.py:170 +#: netbox/dcim/filtersets.py:171 msgid "Group (slug)" msgstr "グループ (slug)" -#: netbox/dcim/filtersets.py:176 netbox/dcim/filtersets.py:181 +#: netbox/dcim/filtersets.py:177 netbox/dcim/filtersets.py:182 msgid "AS (ID)" msgstr "AS (ID)" -#: netbox/dcim/filtersets.py:246 +#: netbox/dcim/filtersets.py:247 msgid "Parent location (ID)" msgstr "親のロケーション (ID)" -#: netbox/dcim/filtersets.py:252 +#: netbox/dcim/filtersets.py:253 msgid "Parent location (slug)" msgstr "親の場所 (スラッグ)" -#: netbox/dcim/filtersets.py:258 netbox/dcim/filtersets.py:369 -#: netbox/dcim/filtersets.py:490 netbox/dcim/filtersets.py:1057 -#: netbox/dcim/filtersets.py:1404 netbox/dcim/filtersets.py:2182 -msgid "Location (ID)" -msgstr "ロケーション (ID)" - -#: netbox/dcim/filtersets.py:265 netbox/dcim/filtersets.py:376 -#: netbox/dcim/filtersets.py:497 netbox/dcim/filtersets.py:1410 -#: netbox/extras/filtersets.py:542 -msgid "Location (slug)" -msgstr "ロケーション (slug)" - -#: netbox/dcim/filtersets.py:296 netbox/dcim/filtersets.py:381 -#: netbox/dcim/filtersets.py:539 netbox/dcim/filtersets.py:678 -#: netbox/dcim/filtersets.py:882 netbox/dcim/filtersets.py:933 -#: netbox/dcim/filtersets.py:973 netbox/dcim/filtersets.py:1306 -#: netbox/dcim/filtersets.py:1840 +#: netbox/dcim/filtersets.py:297 netbox/dcim/filtersets.py:382 +#: netbox/dcim/filtersets.py:540 netbox/dcim/filtersets.py:679 +#: netbox/dcim/filtersets.py:883 netbox/dcim/filtersets.py:934 +#: netbox/dcim/filtersets.py:974 netbox/dcim/filtersets.py:1308 +#: netbox/dcim/filtersets.py:1960 msgid "Manufacturer (ID)" msgstr "メーカ (ID)" -#: netbox/dcim/filtersets.py:302 netbox/dcim/filtersets.py:387 -#: netbox/dcim/filtersets.py:545 netbox/dcim/filtersets.py:684 -#: netbox/dcim/filtersets.py:888 netbox/dcim/filtersets.py:939 -#: netbox/dcim/filtersets.py:979 netbox/dcim/filtersets.py:1312 -#: netbox/dcim/filtersets.py:1846 +#: netbox/dcim/filtersets.py:303 netbox/dcim/filtersets.py:388 +#: netbox/dcim/filtersets.py:546 netbox/dcim/filtersets.py:685 +#: netbox/dcim/filtersets.py:889 netbox/dcim/filtersets.py:940 +#: netbox/dcim/filtersets.py:980 netbox/dcim/filtersets.py:1314 +#: netbox/dcim/filtersets.py:1966 msgid "Manufacturer (slug)" msgstr "メーカ (slug)" -#: netbox/dcim/filtersets.py:393 +#: netbox/dcim/filtersets.py:394 msgid "Rack type (slug)" msgstr "ラックタイプ (slug)" -#: netbox/dcim/filtersets.py:397 +#: netbox/dcim/filtersets.py:398 msgid "Rack type (ID)" msgstr "ラックタイプ (ID)" -#: netbox/dcim/filtersets.py:411 netbox/dcim/filtersets.py:892 -#: netbox/dcim/filtersets.py:994 netbox/dcim/filtersets.py:1850 -#: netbox/ipam/filtersets.py:383 netbox/ipam/filtersets.py:495 -#: netbox/ipam/filtersets.py:1005 netbox/virtualization/filtersets.py:210 +#: netbox/dcim/filtersets.py:412 netbox/dcim/filtersets.py:893 +#: netbox/dcim/filtersets.py:995 netbox/dcim/filtersets.py:1970 +#: netbox/ipam/filtersets.py:350 netbox/ipam/filtersets.py:462 +#: netbox/ipam/filtersets.py:972 netbox/virtualization/filtersets.py:176 msgid "Role (ID)" msgstr "ロール (ID)" -#: netbox/dcim/filtersets.py:417 netbox/dcim/filtersets.py:898 -#: netbox/dcim/filtersets.py:1000 netbox/dcim/filtersets.py:1856 -#: netbox/extras/filtersets.py:558 netbox/ipam/filtersets.py:389 -#: netbox/ipam/filtersets.py:501 netbox/ipam/filtersets.py:1011 -#: netbox/virtualization/filtersets.py:216 +#: netbox/dcim/filtersets.py:418 netbox/dcim/filtersets.py:899 +#: netbox/dcim/filtersets.py:1001 netbox/dcim/filtersets.py:1976 +#: netbox/extras/filtersets.py:558 netbox/ipam/filtersets.py:356 +#: netbox/ipam/filtersets.py:468 netbox/ipam/filtersets.py:978 +#: netbox/virtualization/filtersets.py:182 msgid "Role (slug)" msgstr "ロール (slug)" -#: netbox/dcim/filtersets.py:447 netbox/dcim/filtersets.py:1062 -#: netbox/dcim/filtersets.py:1415 netbox/dcim/filtersets.py:2244 +#: netbox/dcim/filtersets.py:448 netbox/dcim/filtersets.py:1063 +#: netbox/dcim/filtersets.py:1417 netbox/dcim/filtersets.py:2368 msgid "Rack (ID)" msgstr "ラック (ID)" -#: netbox/dcim/filtersets.py:507 netbox/extras/filtersets.py:293 +#: netbox/dcim/filtersets.py:508 netbox/extras/filtersets.py:293 #: netbox/extras/filtersets.py:337 netbox/extras/filtersets.py:359 #: netbox/extras/filtersets.py:419 netbox/users/filtersets.py:113 #: netbox/users/filtersets.py:180 msgid "User (name)" msgstr "ユーザ (名前)" -#: netbox/dcim/filtersets.py:549 +#: netbox/dcim/filtersets.py:550 msgid "Default platform (ID)" msgstr "デフォルトプラットフォーム (ID)" -#: netbox/dcim/filtersets.py:555 +#: netbox/dcim/filtersets.py:556 msgid "Default platform (slug)" msgstr "デフォルトプラットフォーム (slug)" -#: netbox/dcim/filtersets.py:558 netbox/dcim/forms/filtersets.py:517 +#: netbox/dcim/filtersets.py:559 netbox/dcim/forms/filtersets.py:518 msgid "Has a front image" msgstr "正面画像がある" -#: netbox/dcim/filtersets.py:562 netbox/dcim/forms/filtersets.py:524 +#: netbox/dcim/filtersets.py:563 netbox/dcim/forms/filtersets.py:525 msgid "Has a rear image" msgstr "背面画像がある" -#: netbox/dcim/filtersets.py:567 netbox/dcim/filtersets.py:688 -#: netbox/dcim/filtersets.py:1131 netbox/dcim/forms/filtersets.py:531 -#: netbox/dcim/forms/filtersets.py:627 netbox/dcim/forms/filtersets.py:848 +#: netbox/dcim/filtersets.py:568 netbox/dcim/filtersets.py:689 +#: netbox/dcim/filtersets.py:1132 netbox/dcim/forms/filtersets.py:532 +#: netbox/dcim/forms/filtersets.py:628 netbox/dcim/forms/filtersets.py:849 msgid "Has console ports" msgstr "コンソールポートがある" -#: netbox/dcim/filtersets.py:571 netbox/dcim/filtersets.py:692 -#: netbox/dcim/filtersets.py:1135 netbox/dcim/forms/filtersets.py:538 -#: netbox/dcim/forms/filtersets.py:634 netbox/dcim/forms/filtersets.py:855 +#: netbox/dcim/filtersets.py:572 netbox/dcim/filtersets.py:693 +#: netbox/dcim/filtersets.py:1136 netbox/dcim/forms/filtersets.py:539 +#: netbox/dcim/forms/filtersets.py:635 netbox/dcim/forms/filtersets.py:856 msgid "Has console server ports" msgstr "コンソールサーバポートがある" -#: netbox/dcim/filtersets.py:575 netbox/dcim/filtersets.py:696 -#: netbox/dcim/filtersets.py:1139 netbox/dcim/forms/filtersets.py:545 -#: netbox/dcim/forms/filtersets.py:641 netbox/dcim/forms/filtersets.py:862 +#: netbox/dcim/filtersets.py:576 netbox/dcim/filtersets.py:697 +#: netbox/dcim/filtersets.py:1140 netbox/dcim/forms/filtersets.py:546 +#: netbox/dcim/forms/filtersets.py:642 netbox/dcim/forms/filtersets.py:863 msgid "Has power ports" msgstr "電源ポートがある" -#: netbox/dcim/filtersets.py:579 netbox/dcim/filtersets.py:700 -#: netbox/dcim/filtersets.py:1143 netbox/dcim/forms/filtersets.py:552 -#: netbox/dcim/forms/filtersets.py:648 netbox/dcim/forms/filtersets.py:869 +#: netbox/dcim/filtersets.py:580 netbox/dcim/filtersets.py:701 +#: netbox/dcim/filtersets.py:1144 netbox/dcim/forms/filtersets.py:553 +#: netbox/dcim/forms/filtersets.py:649 netbox/dcim/forms/filtersets.py:870 msgid "Has power outlets" msgstr "電源コンセントがある" -#: netbox/dcim/filtersets.py:583 netbox/dcim/filtersets.py:704 -#: netbox/dcim/filtersets.py:1147 netbox/dcim/forms/filtersets.py:559 -#: netbox/dcim/forms/filtersets.py:655 netbox/dcim/forms/filtersets.py:876 +#: netbox/dcim/filtersets.py:584 netbox/dcim/filtersets.py:705 +#: netbox/dcim/filtersets.py:1148 netbox/dcim/forms/filtersets.py:560 +#: netbox/dcim/forms/filtersets.py:656 netbox/dcim/forms/filtersets.py:877 msgid "Has interfaces" msgstr "インタフェースを持つ" -#: netbox/dcim/filtersets.py:587 netbox/dcim/filtersets.py:708 -#: netbox/dcim/filtersets.py:1151 netbox/dcim/forms/filtersets.py:566 -#: netbox/dcim/forms/filtersets.py:662 netbox/dcim/forms/filtersets.py:883 +#: netbox/dcim/filtersets.py:588 netbox/dcim/filtersets.py:709 +#: netbox/dcim/filtersets.py:1152 netbox/dcim/forms/filtersets.py:567 +#: netbox/dcim/forms/filtersets.py:663 netbox/dcim/forms/filtersets.py:884 msgid "Has pass-through ports" msgstr "パススルーポートがある" -#: netbox/dcim/filtersets.py:591 netbox/dcim/filtersets.py:1155 -#: netbox/dcim/forms/filtersets.py:580 +#: netbox/dcim/filtersets.py:592 netbox/dcim/filtersets.py:1156 +#: netbox/dcim/forms/filtersets.py:581 msgid "Has module bays" msgstr "モジュールベイがある" -#: netbox/dcim/filtersets.py:595 netbox/dcim/filtersets.py:1159 -#: netbox/dcim/forms/filtersets.py:573 +#: netbox/dcim/filtersets.py:596 netbox/dcim/filtersets.py:1160 +#: netbox/dcim/forms/filtersets.py:574 msgid "Has device bays" msgstr "デバイスベイがある" -#: netbox/dcim/filtersets.py:599 netbox/dcim/forms/filtersets.py:587 +#: netbox/dcim/filtersets.py:600 netbox/dcim/forms/filtersets.py:588 msgid "Has inventory items" msgstr "在庫品目がある" -#: netbox/dcim/filtersets.py:756 netbox/dcim/filtersets.py:989 -#: netbox/dcim/filtersets.py:1436 +#: netbox/dcim/filtersets.py:757 netbox/dcim/filtersets.py:990 +#: netbox/dcim/filtersets.py:1438 msgid "Device type (ID)" msgstr "デバイスタイプ (ID)" -#: netbox/dcim/filtersets.py:772 netbox/dcim/filtersets.py:1317 +#: netbox/dcim/filtersets.py:773 netbox/dcim/filtersets.py:1319 msgid "Module type (ID)" msgstr "モジュールタイプ (ID)" -#: netbox/dcim/filtersets.py:804 netbox/dcim/filtersets.py:1591 +#: netbox/dcim/filtersets.py:805 netbox/dcim/filtersets.py:1593 msgid "Power port (ID)" msgstr "電源ポート (ID)" -#: netbox/dcim/filtersets.py:878 netbox/dcim/filtersets.py:1836 +#: netbox/dcim/filtersets.py:879 netbox/dcim/filtersets.py:1956 msgid "Parent inventory item (ID)" msgstr "親在庫品目 (ID)" -#: netbox/dcim/filtersets.py:921 netbox/dcim/filtersets.py:947 -#: netbox/dcim/filtersets.py:1127 netbox/virtualization/filtersets.py:238 +#: netbox/dcim/filtersets.py:922 netbox/dcim/filtersets.py:948 +#: netbox/dcim/filtersets.py:1128 netbox/virtualization/filtersets.py:204 msgid "Config template (ID)" msgstr "設定テンプレート (ID)" -#: netbox/dcim/filtersets.py:985 +#: netbox/dcim/filtersets.py:986 msgid "Device type (slug)" msgstr "デバイスタイプ (slug)" -#: netbox/dcim/filtersets.py:1005 +#: netbox/dcim/filtersets.py:1006 msgid "Parent Device (ID)" msgstr "親デバイス (ID)" -#: netbox/dcim/filtersets.py:1009 netbox/virtualization/filtersets.py:220 +#: netbox/dcim/filtersets.py:1010 netbox/virtualization/filtersets.py:186 msgid "Platform (ID)" msgstr "プラットフォーム (ID)" -#: netbox/dcim/filtersets.py:1015 netbox/extras/filtersets.py:569 -#: netbox/virtualization/filtersets.py:226 +#: netbox/dcim/filtersets.py:1016 netbox/extras/filtersets.py:569 +#: netbox/virtualization/filtersets.py:192 msgid "Platform (slug)" msgstr "プラットフォーム (slug)" -#: netbox/dcim/filtersets.py:1051 netbox/dcim/filtersets.py:1399 -#: netbox/dcim/filtersets.py:1934 netbox/dcim/filtersets.py:2176 -#: netbox/dcim/filtersets.py:2235 +#: netbox/dcim/filtersets.py:1052 netbox/dcim/filtersets.py:1401 +#: netbox/dcim/filtersets.py:2058 netbox/dcim/filtersets.py:2300 +#: netbox/dcim/filtersets.py:2359 msgid "Site name (slug)" msgstr "サイト名 (slug)" -#: netbox/dcim/filtersets.py:1067 +#: netbox/dcim/filtersets.py:1068 msgid "Parent bay (ID)" msgstr "親ベイ (ID)" -#: netbox/dcim/filtersets.py:1071 +#: netbox/dcim/filtersets.py:1072 msgid "VM cluster (ID)" msgstr "VM クラスタ (ID)" -#: netbox/dcim/filtersets.py:1077 netbox/extras/filtersets.py:591 -#: netbox/virtualization/filtersets.py:136 +#: netbox/dcim/filtersets.py:1078 netbox/extras/filtersets.py:591 +#: netbox/virtualization/filtersets.py:102 msgid "Cluster group (slug)" msgstr "クラスタグループ (slug)" -#: netbox/dcim/filtersets.py:1082 netbox/virtualization/filtersets.py:130 +#: netbox/dcim/filtersets.py:1083 netbox/virtualization/filtersets.py:96 msgid "Cluster group (ID)" msgstr "クラスタグループ (ID)" -#: netbox/dcim/filtersets.py:1088 +#: netbox/dcim/filtersets.py:1089 msgid "Device model (slug)" msgstr "デバイスモデル (slug)" -#: netbox/dcim/filtersets.py:1099 netbox/dcim/forms/bulk_edit.py:522 +#: netbox/dcim/filtersets.py:1100 netbox/dcim/forms/bulk_edit.py:525 msgid "Is full depth" msgstr "奥行きをすべて使うか" -#: netbox/dcim/filtersets.py:1103 netbox/dcim/forms/common.py:18 -#: netbox/dcim/forms/filtersets.py:818 netbox/dcim/forms/filtersets.py:1385 -#: netbox/dcim/models/device_components.py:518 -#: netbox/virtualization/filtersets.py:230 -#: netbox/virtualization/filtersets.py:301 -#: netbox/virtualization/forms/filtersets.py:172 -#: netbox/virtualization/forms/filtersets.py:223 +#: netbox/dcim/filtersets.py:1104 netbox/dcim/forms/filtersets.py:819 +#: netbox/dcim/forms/filtersets.py:1390 netbox/dcim/forms/filtersets.py:1586 +#: netbox/dcim/forms/filtersets.py:1591 netbox/dcim/forms/model_forms.py:1762 +#: netbox/dcim/models/devices.py:1505 netbox/dcim/models/devices.py:1526 +#: netbox/virtualization/filtersets.py:196 +#: netbox/virtualization/filtersets.py:268 +#: netbox/virtualization/forms/filtersets.py:177 +#: netbox/virtualization/forms/filtersets.py:228 msgid "MAC address" msgstr "MAC アドレス" -#: netbox/dcim/filtersets.py:1110 netbox/dcim/filtersets.py:1274 -#: netbox/dcim/forms/filtersets.py:827 netbox/dcim/forms/filtersets.py:930 -#: netbox/virtualization/filtersets.py:234 -#: netbox/virtualization/forms/filtersets.py:176 +#: netbox/dcim/filtersets.py:1111 netbox/dcim/filtersets.py:1276 +#: netbox/dcim/forms/filtersets.py:828 netbox/dcim/forms/filtersets.py:931 +#: netbox/virtualization/filtersets.py:200 +#: netbox/virtualization/forms/filtersets.py:181 msgid "Has a primary IP" msgstr "プライマリ IP がある" -#: netbox/dcim/filtersets.py:1114 +#: netbox/dcim/filtersets.py:1115 msgid "Has an out-of-band IP" msgstr "帯域外 IP がある" -#: netbox/dcim/filtersets.py:1119 +#: netbox/dcim/filtersets.py:1120 msgid "Virtual chassis (ID)" msgstr "バーチャルシャーシ (ID)" -#: netbox/dcim/filtersets.py:1123 +#: netbox/dcim/filtersets.py:1124 msgid "Is a virtual chassis member" msgstr "バーチャルシャーシのメンバーか" -#: netbox/dcim/filtersets.py:1164 +#: netbox/dcim/filtersets.py:1165 msgid "OOB IP (ID)" msgstr "OOB IP (ID)" -#: netbox/dcim/filtersets.py:1168 +#: netbox/dcim/filtersets.py:1169 msgid "Has virtual device context" msgstr "仮想デバイスコンテキストあり" -#: netbox/dcim/filtersets.py:1257 +#: netbox/dcim/filtersets.py:1259 msgid "VDC (ID)" msgstr "VDC (ID)" -#: netbox/dcim/filtersets.py:1262 +#: netbox/dcim/filtersets.py:1264 msgid "Device model" msgstr "デバイスモデル" -#: netbox/dcim/filtersets.py:1267 netbox/ipam/filtersets.py:634 -#: netbox/vpn/filtersets.py:102 netbox/vpn/filtersets.py:401 -msgid "Interface (ID)" -msgstr "インタフェース (ID)" - -#: netbox/dcim/filtersets.py:1323 +#: netbox/dcim/filtersets.py:1325 msgid "Module type (model)" msgstr "モジュールタイプ (モデル)" -#: netbox/dcim/filtersets.py:1329 +#: netbox/dcim/filtersets.py:1331 msgid "Module bay (ID)" msgstr "モジュールベイ (ID)" -#: netbox/dcim/filtersets.py:1333 netbox/dcim/filtersets.py:1425 -#: netbox/ipam/filtersets.py:613 netbox/ipam/filtersets.py:853 -#: netbox/ipam/filtersets.py:1117 netbox/virtualization/filtersets.py:161 -#: netbox/vpn/filtersets.py:379 +#: netbox/dcim/filtersets.py:1335 netbox/dcim/filtersets.py:1427 +#: netbox/dcim/filtersets.py:1613 netbox/ipam/filtersets.py:580 +#: netbox/ipam/filtersets.py:820 netbox/ipam/filtersets.py:1142 +#: netbox/virtualization/filtersets.py:127 netbox/vpn/filtersets.py:379 msgid "Device (ID)" msgstr "デバイス (ID)" -#: netbox/dcim/filtersets.py:1421 +#: netbox/dcim/filtersets.py:1423 msgid "Rack (name)" msgstr "ラック (名前)" -#: netbox/dcim/filtersets.py:1431 netbox/ipam/filtersets.py:608 -#: netbox/ipam/filtersets.py:848 netbox/ipam/filtersets.py:1123 -#: netbox/vpn/filtersets.py:374 +#: netbox/dcim/filtersets.py:1433 netbox/dcim/filtersets.py:1608 +#: netbox/ipam/filtersets.py:575 netbox/ipam/filtersets.py:815 +#: netbox/ipam/filtersets.py:1148 netbox/vpn/filtersets.py:374 msgid "Device (name)" msgstr "デバイス (名前)" -#: netbox/dcim/filtersets.py:1442 +#: netbox/dcim/filtersets.py:1444 msgid "Device type (model)" msgstr "デバイスタイプ (モデル)" -#: netbox/dcim/filtersets.py:1447 +#: netbox/dcim/filtersets.py:1449 msgid "Device role (ID)" msgstr "デバイスロール (ID)" -#: netbox/dcim/filtersets.py:1453 +#: netbox/dcim/filtersets.py:1455 msgid "Device role (slug)" msgstr "デバイスロール (slug)" -#: netbox/dcim/filtersets.py:1458 +#: netbox/dcim/filtersets.py:1460 msgid "Virtual Chassis (ID)" msgstr "バーチャルシャーシ (ID)" -#: netbox/dcim/filtersets.py:1464 netbox/dcim/forms/filtersets.py:109 -#: netbox/dcim/tables/devices.py:206 netbox/netbox/navigation/menu.py:79 +#: netbox/dcim/filtersets.py:1466 netbox/dcim/forms/filtersets.py:110 +#: netbox/dcim/tables/devices.py:217 netbox/netbox/navigation/menu.py:79 #: netbox/templates/dcim/device.html:120 #: netbox/templates/dcim/device_edit.html:93 #: netbox/templates/dcim/virtualchassis.html:20 @@ -3245,168 +3684,231 @@ msgstr "バーチャルシャーシ (ID)" msgid "Virtual Chassis" msgstr "バーチャルシャーシ" -#: netbox/dcim/filtersets.py:1488 +#: netbox/dcim/filtersets.py:1490 msgid "Module (ID)" msgstr "モジュール (ID)" -#: netbox/dcim/filtersets.py:1495 +#: netbox/dcim/filtersets.py:1497 msgid "Cable (ID)" msgstr "ケーブル (ID)" -#: netbox/dcim/filtersets.py:1604 netbox/ipam/forms/bulk_import.py:189 +#: netbox/dcim/filtersets.py:1618 netbox/ipam/filtersets.py:585 +#: netbox/ipam/filtersets.py:825 netbox/ipam/filtersets.py:1158 +#: netbox/vpn/filtersets.py:385 +msgid "Virtual machine (name)" +msgstr "仮想マシン (名前)" + +#: netbox/dcim/filtersets.py:1623 netbox/ipam/filtersets.py:590 +#: netbox/ipam/filtersets.py:830 netbox/ipam/filtersets.py:1152 +#: netbox/virtualization/filtersets.py:248 +#: netbox/virtualization/filtersets.py:299 netbox/vpn/filtersets.py:390 +msgid "Virtual machine (ID)" +msgstr "仮想マシン (ID)" + +#: netbox/dcim/filtersets.py:1629 netbox/ipam/filtersets.py:596 +#: netbox/vpn/filtersets.py:97 netbox/vpn/filtersets.py:396 +msgid "Interface (name)" +msgstr "インタフェース (名前)" + +#: netbox/dcim/filtersets.py:1640 netbox/ipam/filtersets.py:607 +#: netbox/vpn/filtersets.py:108 netbox/vpn/filtersets.py:407 +msgid "VM interface (name)" +msgstr "VM インタフェース (名前)" + +#: netbox/dcim/filtersets.py:1645 netbox/ipam/filtersets.py:612 +#: netbox/vpn/filtersets.py:113 +msgid "VM interface (ID)" +msgstr "VM インタフェース (ID)" + +#: netbox/dcim/filtersets.py:1687 netbox/ipam/forms/bulk_import.py:185 #: netbox/vpn/forms/bulk_import.py:308 msgid "Assigned VLAN" msgstr "割当 VLAN" -#: netbox/dcim/filtersets.py:1608 +#: netbox/dcim/filtersets.py:1691 msgid "Assigned VID" msgstr "割当 VID" -#: netbox/dcim/filtersets.py:1613 netbox/dcim/forms/bulk_edit.py:1531 -#: netbox/dcim/forms/bulk_import.py:913 netbox/dcim/forms/filtersets.py:1428 -#: netbox/dcim/forms/model_forms.py:1385 -#: netbox/dcim/models/device_components.py:711 -#: netbox/dcim/tables/devices.py:626 netbox/ipam/filtersets.py:318 -#: netbox/ipam/filtersets.py:329 netbox/ipam/filtersets.py:485 -#: netbox/ipam/filtersets.py:586 netbox/ipam/filtersets.py:597 -#: netbox/ipam/forms/bulk_edit.py:242 netbox/ipam/forms/bulk_edit.py:298 -#: netbox/ipam/forms/bulk_edit.py:340 netbox/ipam/forms/bulk_import.py:157 -#: netbox/ipam/forms/bulk_import.py:243 netbox/ipam/forms/bulk_import.py:279 -#: netbox/ipam/forms/filtersets.py:67 netbox/ipam/forms/filtersets.py:172 -#: netbox/ipam/forms/filtersets.py:309 netbox/ipam/forms/model_forms.py:62 -#: netbox/ipam/forms/model_forms.py:202 netbox/ipam/forms/model_forms.py:247 -#: netbox/ipam/forms/model_forms.py:300 netbox/ipam/forms/model_forms.py:464 -#: netbox/ipam/forms/model_forms.py:478 netbox/ipam/forms/model_forms.py:492 -#: netbox/ipam/models/ip.py:233 netbox/ipam/models/ip.py:512 -#: netbox/ipam/models/ip.py:720 netbox/ipam/models/vrfs.py:62 -#: netbox/ipam/tables/ip.py:242 netbox/ipam/tables/ip.py:309 -#: netbox/ipam/tables/ip.py:360 netbox/ipam/tables/ip.py:450 -#: netbox/templates/dcim/interface.html:133 +#: netbox/dcim/filtersets.py:1696 netbox/dcim/forms/bulk_edit.py:1544 +#: netbox/dcim/forms/bulk_import.py:921 netbox/dcim/forms/filtersets.py:1433 +#: netbox/dcim/forms/model_forms.py:1411 +#: netbox/dcim/models/device_components.py:749 +#: netbox/dcim/tables/devices.py:648 netbox/ipam/filtersets.py:321 +#: netbox/ipam/filtersets.py:332 netbox/ipam/filtersets.py:452 +#: netbox/ipam/filtersets.py:553 netbox/ipam/filtersets.py:564 +#: netbox/ipam/forms/bulk_edit.py:226 netbox/ipam/forms/bulk_edit.py:282 +#: netbox/ipam/forms/bulk_edit.py:324 netbox/ipam/forms/bulk_import.py:160 +#: netbox/ipam/forms/bulk_import.py:242 netbox/ipam/forms/bulk_import.py:278 +#: netbox/ipam/forms/filtersets.py:69 netbox/ipam/forms/filtersets.py:174 +#: netbox/ipam/forms/filtersets.py:312 netbox/ipam/forms/model_forms.py:65 +#: netbox/ipam/forms/model_forms.py:208 netbox/ipam/forms/model_forms.py:256 +#: netbox/ipam/forms/model_forms.py:310 netbox/ipam/forms/model_forms.py:474 +#: netbox/ipam/forms/model_forms.py:488 netbox/ipam/forms/model_forms.py:502 +#: netbox/ipam/models/ip.py:217 netbox/ipam/models/ip.py:498 +#: netbox/ipam/models/ip.py:719 netbox/ipam/models/vrfs.py:61 +#: netbox/ipam/tables/ip.py:188 netbox/ipam/tables/ip.py:261 +#: netbox/ipam/tables/ip.py:312 netbox/ipam/tables/ip.py:402 +#: netbox/templates/dcim/interface.html:152 #: netbox/templates/ipam/ipaddress.html:18 #: netbox/templates/ipam/iprange.html:40 netbox/templates/ipam/prefix.html:19 #: netbox/templates/ipam/vrf.html:7 netbox/templates/ipam/vrf.html:13 -#: netbox/templates/virtualization/vminterface.html:47 -#: netbox/virtualization/forms/bulk_edit.py:261 -#: netbox/virtualization/forms/bulk_import.py:171 -#: netbox/virtualization/forms/filtersets.py:228 -#: netbox/virtualization/forms/model_forms.py:344 -#: netbox/virtualization/models/virtualmachines.py:355 -#: netbox/virtualization/tables/virtualmachines.py:143 +#: netbox/templates/virtualization/vminterface.html:84 +#: netbox/virtualization/forms/bulk_edit.py:243 +#: netbox/virtualization/forms/bulk_import.py:177 +#: netbox/virtualization/forms/filtersets.py:233 +#: netbox/virtualization/forms/model_forms.py:368 +#: netbox/virtualization/models/virtualmachines.py:331 +#: netbox/virtualization/tables/virtualmachines.py:113 msgid "VRF" msgstr "VRF" -#: netbox/dcim/filtersets.py:1619 netbox/ipam/filtersets.py:324 -#: netbox/ipam/filtersets.py:335 netbox/ipam/filtersets.py:491 -#: netbox/ipam/filtersets.py:592 netbox/ipam/filtersets.py:603 +#: netbox/dcim/filtersets.py:1702 netbox/ipam/filtersets.py:327 +#: netbox/ipam/filtersets.py:338 netbox/ipam/filtersets.py:458 +#: netbox/ipam/filtersets.py:559 netbox/ipam/filtersets.py:570 msgid "VRF (RD)" msgstr "VRF (RD)" -#: netbox/dcim/filtersets.py:1624 netbox/ipam/filtersets.py:1032 +#: netbox/dcim/filtersets.py:1707 netbox/ipam/filtersets.py:1010 #: netbox/vpn/filtersets.py:342 msgid "L2VPN (ID)" msgstr "L2VPN (ID)" -#: netbox/dcim/filtersets.py:1630 netbox/dcim/forms/filtersets.py:1433 -#: netbox/dcim/tables/devices.py:570 netbox/ipam/filtersets.py:1038 -#: netbox/ipam/forms/filtersets.py:518 netbox/ipam/tables/vlans.py:137 -#: netbox/templates/dcim/interface.html:93 netbox/templates/ipam/vlan.html:66 +#: netbox/dcim/filtersets.py:1713 netbox/dcim/forms/filtersets.py:1438 +#: netbox/dcim/tables/devices.py:584 netbox/ipam/filtersets.py:1016 +#: netbox/ipam/forms/filtersets.py:570 netbox/ipam/tables/vlans.py:113 +#: netbox/templates/dcim/interface.html:99 netbox/templates/ipam/vlan.html:82 #: netbox/templates/vpn/l2vpntermination.html:12 -#: netbox/virtualization/forms/filtersets.py:233 +#: netbox/virtualization/forms/filtersets.py:238 #: netbox/vpn/forms/bulk_import.py:280 netbox/vpn/forms/filtersets.py:246 -#: netbox/vpn/forms/model_forms.py:409 netbox/vpn/forms/model_forms.py:427 +#: netbox/vpn/forms/model_forms.py:412 netbox/vpn/forms/model_forms.py:430 #: netbox/vpn/models/l2vpn.py:63 netbox/vpn/tables/l2vpn.py:55 msgid "L2VPN" msgstr "L2VPN" -#: netbox/dcim/filtersets.py:1662 +#: netbox/dcim/filtersets.py:1718 netbox/ipam/filtersets.py:1091 +msgid "VLAN Translation Policy (ID)" +msgstr "VLAN トランスレーションポリシー (ID)" + +#: netbox/dcim/filtersets.py:1724 netbox/dcim/forms/model_forms.py:1428 +#: netbox/dcim/models/device_components.py:568 +#: netbox/ipam/forms/filtersets.py:489 netbox/ipam/forms/model_forms.py:712 +#: netbox/templates/ipam/vlantranslationpolicy.html:11 +#: netbox/virtualization/forms/bulk_edit.py:248 +#: netbox/virtualization/forms/model_forms.py:373 +msgid "VLAN Translation Policy" +msgstr "VLAN トランスレーションポリシー" + +#: netbox/dcim/filtersets.py:1758 msgid "Virtual Chassis Interfaces for Device" msgstr "バーチャルシャーシインタフェース" -#: netbox/dcim/filtersets.py:1667 +#: netbox/dcim/filtersets.py:1763 msgid "Virtual Chassis Interfaces for Device (ID)" msgstr "バーチャルシャーシインタフェース (ID)" -#: netbox/dcim/filtersets.py:1671 +#: netbox/dcim/filtersets.py:1767 msgid "Kind of interface" msgstr "インタフェースの種類" -#: netbox/dcim/filtersets.py:1676 netbox/virtualization/filtersets.py:293 +#: netbox/dcim/filtersets.py:1772 netbox/virtualization/filtersets.py:259 msgid "Parent interface (ID)" msgstr "親インタフェース (ID)" -#: netbox/dcim/filtersets.py:1681 netbox/virtualization/filtersets.py:298 +#: netbox/dcim/filtersets.py:1777 netbox/virtualization/filtersets.py:264 msgid "Bridged interface (ID)" msgstr "ブリッジインタフェース (ID)" -#: netbox/dcim/filtersets.py:1686 +#: netbox/dcim/filtersets.py:1782 msgid "LAG interface (ID)" msgstr "LAG インタフェース (ID)" -#: netbox/dcim/filtersets.py:1713 netbox/dcim/filtersets.py:1725 -#: netbox/dcim/forms/filtersets.py:1345 netbox/dcim/forms/model_forms.py:1697 +#: netbox/dcim/filtersets.py:1790 netbox/dcim/tables/devices.py:606 +#: netbox/dcim/tables/devices.py:1136 netbox/templates/dcim/interface.html:131 +#: netbox/templates/dcim/macaddress.html:11 +#: netbox/templates/dcim/macaddress.html:14 +#: netbox/templates/virtualization/vminterface.html:73 +msgid "MAC Address" +msgstr "MAC アドレス" + +#: netbox/dcim/filtersets.py:1795 netbox/virtualization/filtersets.py:273 +msgid "Primary MAC address (ID)" +msgstr "プライマリ MAC アドレス (ID)" + +#: netbox/dcim/filtersets.py:1801 netbox/dcim/forms/model_forms.py:1415 +#: netbox/virtualization/filtersets.py:279 +#: netbox/virtualization/forms/model_forms.py:311 +msgid "Primary MAC address" +msgstr "プライマリ MAC アドレス" + +#: netbox/dcim/filtersets.py:1823 netbox/dcim/filtersets.py:1835 +#: netbox/dcim/forms/filtersets.py:1350 netbox/dcim/forms/model_forms.py:1742 #: netbox/templates/dcim/virtualdevicecontext.html:15 msgid "Virtual Device Context" msgstr "仮想デバイスコンテキスト" -#: netbox/dcim/filtersets.py:1719 +#: netbox/dcim/filtersets.py:1829 msgid "Virtual Device Context (Identifier)" msgstr "仮想デバイスコンテキスト (識別子)" -#: netbox/dcim/filtersets.py:1730 +#: netbox/dcim/filtersets.py:1840 #: netbox/templates/wireless/wirelesslan.html:11 -#: netbox/wireless/forms/model_forms.py:53 +#: netbox/wireless/forms/model_forms.py:55 msgid "Wireless LAN" msgstr "無線 LAN" -#: netbox/dcim/filtersets.py:1734 netbox/dcim/tables/devices.py:613 +#: netbox/dcim/filtersets.py:1844 netbox/dcim/tables/devices.py:635 msgid "Wireless link" msgstr "無線リンク" -#: netbox/dcim/filtersets.py:1803 +#: netbox/dcim/filtersets.py:1854 +msgid "Virtual circuit termination (ID)" +msgstr "仮想回線終端 (ID)" + +#: netbox/dcim/filtersets.py:1923 msgid "Parent module bay (ID)" msgstr "親モジュールベイ (ID)" -#: netbox/dcim/filtersets.py:1808 +#: netbox/dcim/filtersets.py:1928 msgid "Installed module (ID)" msgstr "インストール済モジュール (ID)" -#: netbox/dcim/filtersets.py:1819 +#: netbox/dcim/filtersets.py:1939 msgid "Installed device (ID)" msgstr "インストール済デバイス (ID)" -#: netbox/dcim/filtersets.py:1825 +#: netbox/dcim/filtersets.py:1945 msgid "Installed device (name)" msgstr "インストール済みデバイス (名前)" -#: netbox/dcim/filtersets.py:1891 +#: netbox/dcim/filtersets.py:2015 msgid "Master (ID)" msgstr "マスター (ID)" -#: netbox/dcim/filtersets.py:1897 +#: netbox/dcim/filtersets.py:2021 msgid "Master (name)" msgstr "マスター (名前)" -#: netbox/dcim/filtersets.py:1939 netbox/tenancy/filtersets.py:245 +#: netbox/dcim/filtersets.py:2063 netbox/tenancy/filtersets.py:245 msgid "Tenant (ID)" msgstr "テナント (ID)" -#: netbox/dcim/filtersets.py:1945 netbox/extras/filtersets.py:618 +#: netbox/dcim/filtersets.py:2069 netbox/extras/filtersets.py:618 #: netbox/tenancy/filtersets.py:251 msgid "Tenant (slug)" msgstr "テナント (slug)" -#: netbox/dcim/filtersets.py:1981 netbox/dcim/forms/filtersets.py:1077 +#: netbox/dcim/filtersets.py:2105 netbox/dcim/forms/filtersets.py:1078 msgid "Unterminated" msgstr "未終端" -#: netbox/dcim/filtersets.py:2239 +#: netbox/dcim/filtersets.py:2363 msgid "Power panel (ID)" msgstr "電源盤 (ID)" -#: netbox/dcim/forms/bulk_create.py:40 netbox/extras/forms/filtersets.py:401 -#: netbox/extras/forms/model_forms.py:567 -#: netbox/extras/forms/model_forms.py:619 netbox/netbox/forms/base.py:86 -#: netbox/netbox/forms/mixins.py:81 netbox/netbox/tables/columns.py:478 +#: netbox/dcim/forms/bulk_create.py:40 netbox/extras/forms/filtersets.py:408 +#: netbox/extras/forms/model_forms.py:581 +#: netbox/extras/forms/model_forms.py:633 netbox/netbox/forms/base.py:86 +#: netbox/netbox/forms/mixins.py:91 netbox/netbox/tables/columns.py:481 #: netbox/templates/circuits/inc/circuit_termination.html:32 #: netbox/templates/generic/bulk_edit.html:65 #: netbox/templates/inc/panels/tags.html:5 @@ -3414,11 +3916,11 @@ msgstr "電源盤 (ID)" msgid "Tags" msgstr "タグ" -#: netbox/dcim/forms/bulk_create.py:112 netbox/dcim/forms/filtersets.py:1498 -#: netbox/dcim/forms/model_forms.py:488 netbox/dcim/forms/model_forms.py:546 +#: netbox/dcim/forms/bulk_create.py:112 netbox/dcim/forms/filtersets.py:1503 +#: netbox/dcim/forms/model_forms.py:498 netbox/dcim/forms/model_forms.py:557 #: netbox/dcim/forms/object_create.py:197 -#: netbox/dcim/forms/object_create.py:345 netbox/dcim/tables/devices.py:165 -#: netbox/dcim/tables/devices.py:707 netbox/dcim/tables/devicetypes.py:246 +#: netbox/dcim/forms/object_create.py:345 netbox/dcim/tables/devices.py:176 +#: netbox/dcim/tables/devices.py:741 netbox/dcim/tables/devicetypes.py:253 #: netbox/templates/dcim/device.html:43 netbox/templates/dcim/device.html:131 #: netbox/templates/dcim/modulebay.html:38 #: netbox/templates/dcim/virtualchassis.html:66 @@ -3432,114 +3934,114 @@ msgid "" "created.)" msgstr "英数字の範囲が使用できます。(作成する名前の数と一致する必要があります)" -#: netbox/dcim/forms/bulk_edit.py:133 +#: netbox/dcim/forms/bulk_edit.py:136 msgid "Contact name" msgstr "連絡先名" -#: netbox/dcim/forms/bulk_edit.py:138 +#: netbox/dcim/forms/bulk_edit.py:141 msgid "Contact phone" msgstr "連絡先電話番号" -#: netbox/dcim/forms/bulk_edit.py:144 +#: netbox/dcim/forms/bulk_edit.py:147 msgid "Contact E-mail" msgstr "連絡先電子メール" -#: netbox/dcim/forms/bulk_edit.py:147 netbox/dcim/forms/bulk_import.py:123 -#: netbox/dcim/forms/model_forms.py:128 +#: netbox/dcim/forms/bulk_edit.py:150 netbox/dcim/forms/bulk_import.py:125 +#: netbox/dcim/forms/model_forms.py:132 msgid "Time zone" msgstr "タイムゾーン" -#: netbox/dcim/forms/bulk_edit.py:225 netbox/dcim/forms/bulk_edit.py:501 -#: netbox/dcim/forms/bulk_edit.py:565 netbox/dcim/forms/bulk_edit.py:638 -#: netbox/dcim/forms/bulk_edit.py:662 netbox/dcim/forms/bulk_edit.py:755 -#: netbox/dcim/forms/bulk_edit.py:1282 netbox/dcim/forms/bulk_edit.py:1703 -#: netbox/dcim/forms/bulk_import.py:182 netbox/dcim/forms/bulk_import.py:393 -#: netbox/dcim/forms/bulk_import.py:427 netbox/dcim/forms/bulk_import.py:472 -#: netbox/dcim/forms/bulk_import.py:508 netbox/dcim/forms/bulk_import.py:1104 -#: netbox/dcim/forms/filtersets.py:313 netbox/dcim/forms/filtersets.py:372 -#: netbox/dcim/forms/filtersets.py:494 netbox/dcim/forms/filtersets.py:619 -#: netbox/dcim/forms/filtersets.py:700 netbox/dcim/forms/filtersets.py:782 -#: netbox/dcim/forms/filtersets.py:947 netbox/dcim/forms/filtersets.py:1539 -#: netbox/dcim/forms/model_forms.py:207 netbox/dcim/forms/model_forms.py:337 -#: netbox/dcim/forms/model_forms.py:349 netbox/dcim/forms/model_forms.py:395 -#: netbox/dcim/forms/model_forms.py:436 netbox/dcim/forms/model_forms.py:1082 -#: netbox/dcim/forms/model_forms.py:1522 -#: netbox/dcim/forms/object_import.py:187 netbox/dcim/tables/devices.py:96 -#: netbox/dcim/tables/devices.py:172 netbox/dcim/tables/devices.py:940 -#: netbox/dcim/tables/devicetypes.py:80 netbox/dcim/tables/devicetypes.py:308 +#: netbox/dcim/forms/bulk_edit.py:228 netbox/dcim/forms/bulk_edit.py:504 +#: netbox/dcim/forms/bulk_edit.py:568 netbox/dcim/forms/bulk_edit.py:641 +#: netbox/dcim/forms/bulk_edit.py:665 netbox/dcim/forms/bulk_edit.py:758 +#: netbox/dcim/forms/bulk_edit.py:1285 netbox/dcim/forms/bulk_edit.py:1718 +#: netbox/dcim/forms/bulk_import.py:184 netbox/dcim/forms/bulk_import.py:395 +#: netbox/dcim/forms/bulk_import.py:429 netbox/dcim/forms/bulk_import.py:477 +#: netbox/dcim/forms/bulk_import.py:513 netbox/dcim/forms/bulk_import.py:1112 +#: netbox/dcim/forms/filtersets.py:314 netbox/dcim/forms/filtersets.py:373 +#: netbox/dcim/forms/filtersets.py:495 netbox/dcim/forms/filtersets.py:620 +#: netbox/dcim/forms/filtersets.py:701 netbox/dcim/forms/filtersets.py:783 +#: netbox/dcim/forms/filtersets.py:948 netbox/dcim/forms/filtersets.py:1544 +#: netbox/dcim/forms/model_forms.py:211 netbox/dcim/forms/model_forms.py:345 +#: netbox/dcim/forms/model_forms.py:357 netbox/dcim/forms/model_forms.py:404 +#: netbox/dcim/forms/model_forms.py:445 netbox/dcim/forms/model_forms.py:1095 +#: netbox/dcim/forms/model_forms.py:1564 +#: netbox/dcim/forms/object_import.py:188 netbox/dcim/tables/devices.py:107 +#: netbox/dcim/tables/devices.py:183 netbox/dcim/tables/devices.py:970 +#: netbox/dcim/tables/devicetypes.py:85 netbox/dcim/tables/devicetypes.py:315 #: netbox/dcim/tables/modules.py:20 netbox/dcim/tables/modules.py:61 -#: netbox/dcim/tables/racks.py:58 netbox/dcim/tables/racks.py:132 +#: netbox/dcim/tables/racks.py:58 netbox/dcim/tables/racks.py:131 #: netbox/templates/dcim/devicetype.html:14 -#: netbox/templates/dcim/inventoryitem.html:44 +#: netbox/templates/dcim/inventoryitem.html:48 #: netbox/templates/dcim/manufacturer.html:33 #: netbox/templates/dcim/modulebay.html:62 -#: netbox/templates/dcim/moduletype.html:25 +#: netbox/templates/dcim/moduletype.html:27 #: netbox/templates/dcim/platform.html:37 #: netbox/templates/dcim/racktype.html:16 msgid "Manufacturer" msgstr "メーカ" -#: netbox/dcim/forms/bulk_edit.py:230 netbox/dcim/forms/bulk_edit.py:378 -#: netbox/dcim/forms/bulk_import.py:191 netbox/dcim/forms/bulk_import.py:270 -#: netbox/dcim/forms/filtersets.py:255 +#: netbox/dcim/forms/bulk_edit.py:233 netbox/dcim/forms/bulk_edit.py:381 +#: netbox/dcim/forms/bulk_import.py:193 netbox/dcim/forms/bulk_import.py:272 +#: netbox/dcim/forms/filtersets.py:256 #: netbox/templates/dcim/inc/panels/racktype_dimensions.html:6 msgid "Form factor" msgstr "フォームファクタ" -#: netbox/dcim/forms/bulk_edit.py:235 netbox/dcim/forms/bulk_edit.py:383 -#: netbox/dcim/forms/bulk_import.py:199 netbox/dcim/forms/bulk_import.py:273 -#: netbox/dcim/forms/filtersets.py:260 +#: netbox/dcim/forms/bulk_edit.py:238 netbox/dcim/forms/bulk_edit.py:386 +#: netbox/dcim/forms/bulk_import.py:201 netbox/dcim/forms/bulk_import.py:275 +#: netbox/dcim/forms/filtersets.py:261 #: netbox/templates/dcim/inc/panels/racktype_dimensions.html:10 msgid "Width" msgstr "幅" -#: netbox/dcim/forms/bulk_edit.py:241 netbox/dcim/forms/bulk_edit.py:389 -#: netbox/dcim/forms/bulk_import.py:280 +#: netbox/dcim/forms/bulk_edit.py:244 netbox/dcim/forms/bulk_edit.py:392 +#: netbox/dcim/forms/bulk_import.py:282 #: netbox/templates/dcim/devicetype.html:37 msgid "Height (U)" msgstr "高さ (U)" -#: netbox/dcim/forms/bulk_edit.py:250 netbox/dcim/forms/bulk_edit.py:394 -#: netbox/dcim/forms/filtersets.py:274 +#: netbox/dcim/forms/bulk_edit.py:253 netbox/dcim/forms/bulk_edit.py:397 +#: netbox/dcim/forms/filtersets.py:275 msgid "Descending units" msgstr "降順" -#: netbox/dcim/forms/bulk_edit.py:253 netbox/dcim/forms/bulk_edit.py:397 +#: netbox/dcim/forms/bulk_edit.py:256 netbox/dcim/forms/bulk_edit.py:400 msgid "Outer width" msgstr "外形の幅" -#: netbox/dcim/forms/bulk_edit.py:258 netbox/dcim/forms/bulk_edit.py:402 +#: netbox/dcim/forms/bulk_edit.py:261 netbox/dcim/forms/bulk_edit.py:405 msgid "Outer depth" msgstr "外形の奥行" -#: netbox/dcim/forms/bulk_edit.py:263 netbox/dcim/forms/bulk_edit.py:407 -#: netbox/dcim/forms/bulk_import.py:204 netbox/dcim/forms/bulk_import.py:283 +#: netbox/dcim/forms/bulk_edit.py:266 netbox/dcim/forms/bulk_edit.py:410 +#: netbox/dcim/forms/bulk_import.py:206 netbox/dcim/forms/bulk_import.py:285 msgid "Outer unit" msgstr "外形の単位" -#: netbox/dcim/forms/bulk_edit.py:268 netbox/dcim/forms/bulk_edit.py:412 +#: netbox/dcim/forms/bulk_edit.py:271 netbox/dcim/forms/bulk_edit.py:415 msgid "Mounting depth" msgstr "取り付け奥行き" -#: netbox/dcim/forms/bulk_edit.py:273 netbox/dcim/forms/bulk_edit.py:300 -#: netbox/dcim/forms/bulk_edit.py:422 netbox/dcim/forms/bulk_edit.py:452 -#: netbox/dcim/forms/bulk_edit.py:535 netbox/dcim/forms/bulk_edit.py:558 -#: netbox/dcim/forms/bulk_edit.py:579 netbox/dcim/forms/bulk_edit.py:601 -#: netbox/dcim/forms/bulk_import.py:406 netbox/dcim/forms/bulk_import.py:438 -#: netbox/dcim/forms/filtersets.py:285 netbox/dcim/forms/filtersets.py:307 -#: netbox/dcim/forms/filtersets.py:327 netbox/dcim/forms/filtersets.py:401 -#: netbox/dcim/forms/filtersets.py:488 netbox/dcim/forms/filtersets.py:594 -#: netbox/dcim/forms/filtersets.py:613 netbox/dcim/forms/filtersets.py:674 -#: netbox/dcim/forms/model_forms.py:221 netbox/dcim/forms/model_forms.py:298 -#: netbox/dcim/tables/devicetypes.py:106 netbox/dcim/tables/modules.py:35 -#: netbox/dcim/tables/racks.py:74 netbox/dcim/tables/racks.py:172 +#: netbox/dcim/forms/bulk_edit.py:276 netbox/dcim/forms/bulk_edit.py:303 +#: netbox/dcim/forms/bulk_edit.py:425 netbox/dcim/forms/bulk_edit.py:455 +#: netbox/dcim/forms/bulk_edit.py:538 netbox/dcim/forms/bulk_edit.py:561 +#: netbox/dcim/forms/bulk_edit.py:582 netbox/dcim/forms/bulk_edit.py:604 +#: netbox/dcim/forms/bulk_import.py:408 netbox/dcim/forms/bulk_import.py:440 +#: netbox/dcim/forms/filtersets.py:286 netbox/dcim/forms/filtersets.py:308 +#: netbox/dcim/forms/filtersets.py:328 netbox/dcim/forms/filtersets.py:402 +#: netbox/dcim/forms/filtersets.py:489 netbox/dcim/forms/filtersets.py:595 +#: netbox/dcim/forms/filtersets.py:614 netbox/dcim/forms/filtersets.py:675 +#: netbox/dcim/forms/model_forms.py:226 netbox/dcim/forms/model_forms.py:306 +#: netbox/dcim/tables/devicetypes.py:111 netbox/dcim/tables/modules.py:35 +#: netbox/dcim/tables/racks.py:74 netbox/dcim/tables/racks.py:171 #: netbox/extras/forms/bulk_edit.py:53 netbox/extras/forms/bulk_edit.py:133 #: netbox/extras/forms/bulk_edit.py:183 netbox/extras/forms/bulk_edit.py:288 -#: netbox/extras/forms/filtersets.py:64 netbox/extras/forms/filtersets.py:156 -#: netbox/extras/forms/filtersets.py:243 netbox/ipam/forms/bulk_edit.py:190 +#: netbox/extras/forms/filtersets.py:65 netbox/extras/forms/filtersets.py:159 +#: netbox/extras/forms/filtersets.py:249 netbox/ipam/forms/bulk_edit.py:193 #: netbox/templates/dcim/device.html:324 #: netbox/templates/dcim/devicetype.html:49 -#: netbox/templates/dcim/moduletype.html:45 netbox/templates/dcim/rack.html:81 +#: netbox/templates/dcim/moduletype.html:47 netbox/templates/dcim/rack.html:81 #: netbox/templates/dcim/racktype.html:41 #: netbox/templates/extras/configcontext.html:17 #: netbox/templates/extras/customlink.html:25 @@ -3548,131 +4050,86 @@ msgstr "取り付け奥行き" msgid "Weight" msgstr "重量" -#: netbox/dcim/forms/bulk_edit.py:278 netbox/dcim/forms/bulk_edit.py:427 -#: netbox/dcim/forms/filtersets.py:290 +#: netbox/dcim/forms/bulk_edit.py:281 netbox/dcim/forms/bulk_edit.py:430 +#: netbox/dcim/forms/filtersets.py:291 msgid "Max weight" msgstr "最大重量" -#: netbox/dcim/forms/bulk_edit.py:283 netbox/dcim/forms/bulk_edit.py:432 -#: netbox/dcim/forms/bulk_edit.py:540 netbox/dcim/forms/bulk_edit.py:584 -#: netbox/dcim/forms/bulk_import.py:210 netbox/dcim/forms/bulk_import.py:295 -#: netbox/dcim/forms/bulk_import.py:411 netbox/dcim/forms/bulk_import.py:443 -#: netbox/dcim/forms/filtersets.py:295 netbox/dcim/forms/filtersets.py:598 -#: netbox/dcim/forms/filtersets.py:678 +#: netbox/dcim/forms/bulk_edit.py:286 netbox/dcim/forms/bulk_edit.py:435 +#: netbox/dcim/forms/bulk_edit.py:543 netbox/dcim/forms/bulk_edit.py:587 +#: netbox/dcim/forms/bulk_import.py:212 netbox/dcim/forms/bulk_import.py:297 +#: netbox/dcim/forms/bulk_import.py:413 netbox/dcim/forms/bulk_import.py:445 +#: netbox/dcim/forms/filtersets.py:296 netbox/dcim/forms/filtersets.py:599 +#: netbox/dcim/forms/filtersets.py:679 msgid "Weight unit" msgstr "重量単位" -#: netbox/dcim/forms/bulk_edit.py:297 netbox/dcim/forms/filtersets.py:305 -#: netbox/dcim/forms/model_forms.py:217 netbox/dcim/forms/model_forms.py:256 +#: netbox/dcim/forms/bulk_edit.py:300 netbox/dcim/forms/filtersets.py:306 +#: netbox/dcim/forms/model_forms.py:222 netbox/dcim/forms/model_forms.py:261 #: netbox/templates/dcim/rack.html:45 netbox/templates/dcim/racktype.html:13 msgid "Rack Type" msgstr "ラックタイプ" -#: netbox/dcim/forms/bulk_edit.py:299 netbox/dcim/forms/model_forms.py:220 -#: netbox/dcim/forms/model_forms.py:297 +#: netbox/dcim/forms/bulk_edit.py:302 netbox/dcim/forms/model_forms.py:225 +#: netbox/dcim/forms/model_forms.py:305 msgid "Outer Dimensions" msgstr "外形寸法" -#: netbox/dcim/forms/bulk_edit.py:302 netbox/dcim/forms/model_forms.py:222 -#: netbox/dcim/forms/model_forms.py:299 netbox/templates/dcim/device.html:315 +#: netbox/dcim/forms/bulk_edit.py:305 netbox/dcim/forms/model_forms.py:227 +#: netbox/dcim/forms/model_forms.py:307 netbox/templates/dcim/device.html:315 #: netbox/templates/dcim/inc/panels/racktype_dimensions.html:3 msgid "Dimensions" msgstr "寸法" -#: netbox/dcim/forms/bulk_edit.py:304 netbox/dcim/forms/filtersets.py:306 -#: netbox/dcim/forms/filtersets.py:326 netbox/dcim/forms/model_forms.py:224 +#: netbox/dcim/forms/bulk_edit.py:307 netbox/dcim/forms/filtersets.py:307 +#: netbox/dcim/forms/filtersets.py:327 netbox/dcim/forms/model_forms.py:229 #: netbox/templates/dcim/inc/panels/racktype_numbering.html:3 msgid "Numbering" msgstr "ナンバリング" -#: netbox/dcim/forms/bulk_edit.py:358 netbox/dcim/forms/bulk_edit.py:1277 -#: netbox/dcim/forms/bulk_edit.py:1698 netbox/dcim/forms/bulk_import.py:253 -#: netbox/dcim/forms/bulk_import.py:1098 netbox/dcim/forms/filtersets.py:367 -#: netbox/dcim/forms/filtersets.py:777 netbox/dcim/forms/filtersets.py:1534 -#: netbox/dcim/forms/model_forms.py:251 netbox/dcim/forms/model_forms.py:1077 -#: netbox/dcim/forms/model_forms.py:1517 -#: netbox/dcim/forms/object_import.py:181 netbox/dcim/tables/devices.py:169 -#: netbox/dcim/tables/devices.py:809 netbox/dcim/tables/devices.py:937 -#: netbox/dcim/tables/devicetypes.py:304 netbox/dcim/tables/racks.py:129 -#: netbox/extras/filtersets.py:552 netbox/ipam/forms/bulk_edit.py:261 -#: netbox/ipam/forms/bulk_edit.py:311 netbox/ipam/forms/bulk_edit.py:359 -#: netbox/ipam/forms/bulk_edit.py:511 netbox/ipam/forms/bulk_import.py:197 -#: netbox/ipam/forms/bulk_import.py:262 netbox/ipam/forms/bulk_import.py:298 -#: netbox/ipam/forms/bulk_import.py:479 netbox/ipam/forms/filtersets.py:237 -#: netbox/ipam/forms/filtersets.py:289 netbox/ipam/forms/filtersets.py:360 -#: netbox/ipam/forms/filtersets.py:509 netbox/ipam/forms/model_forms.py:188 -#: netbox/ipam/forms/model_forms.py:221 netbox/ipam/forms/model_forms.py:250 -#: netbox/ipam/forms/model_forms.py:676 netbox/ipam/tables/ip.py:258 -#: netbox/ipam/tables/ip.py:316 netbox/ipam/tables/ip.py:367 -#: netbox/ipam/tables/vlans.py:130 netbox/ipam/tables/vlans.py:235 -#: netbox/templates/dcim/device.html:182 -#: netbox/templates/dcim/inc/panels/inventory_items.html:20 -#: netbox/templates/dcim/interface.html:223 -#: netbox/templates/dcim/inventoryitem.html:36 -#: netbox/templates/dcim/rack.html:49 netbox/templates/ipam/ipaddress.html:41 -#: netbox/templates/ipam/iprange.html:50 netbox/templates/ipam/prefix.html:77 -#: netbox/templates/ipam/role.html:19 netbox/templates/ipam/vlan.html:52 -#: netbox/templates/virtualization/virtualmachine.html:23 -#: netbox/templates/vpn/tunneltermination.html:17 -#: netbox/templates/wireless/inc/wirelesslink_interface.html:20 -#: netbox/tenancy/forms/bulk_edit.py:142 -#: netbox/tenancy/forms/filtersets.py:107 -#: netbox/tenancy/forms/model_forms.py:137 -#: netbox/tenancy/tables/contacts.py:102 -#: netbox/virtualization/forms/bulk_edit.py:145 -#: netbox/virtualization/forms/bulk_import.py:106 -#: netbox/virtualization/forms/filtersets.py:157 -#: netbox/virtualization/forms/model_forms.py:195 -#: netbox/virtualization/tables/virtualmachines.py:75 -#: netbox/vpn/forms/bulk_edit.py:87 netbox/vpn/forms/bulk_import.py:81 -#: netbox/vpn/forms/filtersets.py:85 netbox/vpn/forms/model_forms.py:78 -#: netbox/vpn/forms/model_forms.py:113 netbox/vpn/tables/tunnels.py:82 -msgid "Role" -msgstr "ロール" - -#: netbox/dcim/forms/bulk_edit.py:363 netbox/dcim/forms/bulk_import.py:260 -#: netbox/dcim/forms/filtersets.py:380 +#: netbox/dcim/forms/bulk_edit.py:366 netbox/dcim/forms/bulk_import.py:262 +#: netbox/dcim/forms/filtersets.py:381 msgid "Rack type" msgstr "ラックタイプ" -#: netbox/dcim/forms/bulk_edit.py:370 netbox/dcim/forms/bulk_edit.py:718 -#: netbox/dcim/forms/bulk_edit.py:779 netbox/templates/dcim/device.html:104 +#: netbox/dcim/forms/bulk_edit.py:373 netbox/dcim/forms/bulk_edit.py:721 +#: netbox/dcim/forms/bulk_edit.py:782 netbox/templates/dcim/device.html:104 #: netbox/templates/dcim/module.html:77 #: netbox/templates/dcim/modulebay.html:70 netbox/templates/dcim/rack.html:57 #: netbox/templates/virtualization/virtualmachine.html:35 msgid "Serial Number" msgstr "シリアル番号" -#: netbox/dcim/forms/bulk_edit.py:373 netbox/dcim/forms/filtersets.py:387 -#: netbox/dcim/forms/filtersets.py:813 netbox/dcim/forms/filtersets.py:967 -#: netbox/dcim/forms/filtersets.py:1546 +#: netbox/dcim/forms/bulk_edit.py:376 netbox/dcim/forms/filtersets.py:388 +#: netbox/dcim/forms/filtersets.py:814 netbox/dcim/forms/filtersets.py:968 +#: netbox/dcim/forms/filtersets.py:1551 msgid "Asset tag" msgstr "アセットタグ" -#: netbox/dcim/forms/bulk_edit.py:417 netbox/dcim/forms/bulk_edit.py:530 -#: netbox/dcim/forms/bulk_edit.py:574 netbox/dcim/forms/bulk_edit.py:711 -#: netbox/dcim/forms/bulk_import.py:289 netbox/dcim/forms/bulk_import.py:432 -#: netbox/dcim/forms/bulk_import.py:602 netbox/dcim/forms/filtersets.py:280 -#: netbox/dcim/forms/filtersets.py:511 netbox/dcim/forms/filtersets.py:669 -#: netbox/dcim/forms/filtersets.py:804 netbox/templates/dcim/device.html:98 +#: netbox/dcim/forms/bulk_edit.py:420 netbox/dcim/forms/bulk_edit.py:533 +#: netbox/dcim/forms/bulk_edit.py:577 netbox/dcim/forms/bulk_edit.py:714 +#: netbox/dcim/forms/bulk_import.py:291 netbox/dcim/forms/bulk_import.py:434 +#: netbox/dcim/forms/bulk_import.py:607 netbox/dcim/forms/filtersets.py:281 +#: netbox/dcim/forms/filtersets.py:512 netbox/dcim/forms/filtersets.py:670 +#: netbox/dcim/forms/filtersets.py:805 netbox/templates/dcim/device.html:98 #: netbox/templates/dcim/devicetype.html:65 -#: netbox/templates/dcim/moduletype.html:41 netbox/templates/dcim/rack.html:65 +#: netbox/templates/dcim/moduletype.html:43 netbox/templates/dcim/rack.html:65 #: netbox/templates/dcim/racktype.html:28 msgid "Airflow" msgstr "エアフロー" -#: netbox/dcim/forms/bulk_edit.py:446 netbox/dcim/forms/bulk_edit.py:925 -#: netbox/dcim/forms/bulk_import.py:344 netbox/dcim/forms/bulk_import.py:347 -#: netbox/dcim/forms/bulk_import.py:575 netbox/dcim/forms/bulk_import.py:1380 -#: netbox/dcim/forms/bulk_import.py:1384 netbox/dcim/forms/filtersets.py:104 -#: netbox/dcim/forms/filtersets.py:324 netbox/dcim/forms/filtersets.py:405 -#: netbox/dcim/forms/filtersets.py:419 netbox/dcim/forms/filtersets.py:457 -#: netbox/dcim/forms/filtersets.py:772 netbox/dcim/forms/filtersets.py:1035 -#: netbox/dcim/forms/filtersets.py:1167 netbox/dcim/forms/model_forms.py:264 -#: netbox/dcim/forms/model_forms.py:306 netbox/dcim/forms/model_forms.py:479 -#: netbox/dcim/forms/model_forms.py:755 netbox/dcim/forms/object_create.py:392 -#: netbox/dcim/tables/devices.py:161 netbox/dcim/tables/power.py:70 -#: netbox/dcim/tables/racks.py:217 netbox/ipam/forms/filtersets.py:442 +#: netbox/dcim/forms/bulk_edit.py:449 netbox/dcim/forms/bulk_edit.py:928 +#: netbox/dcim/forms/bulk_import.py:346 netbox/dcim/forms/bulk_import.py:349 +#: netbox/dcim/forms/bulk_import.py:580 netbox/dcim/forms/bulk_import.py:1477 +#: netbox/dcim/forms/bulk_import.py:1481 netbox/dcim/forms/filtersets.py:105 +#: netbox/dcim/forms/filtersets.py:325 netbox/dcim/forms/filtersets.py:406 +#: netbox/dcim/forms/filtersets.py:420 netbox/dcim/forms/filtersets.py:458 +#: netbox/dcim/forms/filtersets.py:773 netbox/dcim/forms/filtersets.py:1036 +#: netbox/dcim/forms/filtersets.py:1168 netbox/dcim/forms/model_forms.py:271 +#: netbox/dcim/forms/model_forms.py:314 netbox/dcim/forms/model_forms.py:489 +#: netbox/dcim/forms/model_forms.py:767 netbox/dcim/forms/object_create.py:392 +#: netbox/dcim/tables/devices.py:172 netbox/dcim/tables/power.py:70 +#: netbox/dcim/tables/racks.py:216 netbox/ipam/forms/filtersets.py:445 #: netbox/templates/dcim/device.html:30 #: netbox/templates/dcim/inc/cable_termination.html:16 #: netbox/templates/dcim/powerfeed.html:28 netbox/templates/dcim/rack.html:13 @@ -3683,212 +4140,144 @@ msgstr "エアフロー" msgid "Rack" msgstr "ラック" -#: netbox/dcim/forms/bulk_edit.py:450 netbox/dcim/forms/bulk_edit.py:744 -#: netbox/dcim/forms/filtersets.py:325 netbox/dcim/forms/filtersets.py:398 -#: netbox/dcim/forms/filtersets.py:481 netbox/dcim/forms/filtersets.py:608 -#: netbox/dcim/forms/filtersets.py:721 netbox/dcim/forms/filtersets.py:942 -#: netbox/dcim/forms/model_forms.py:670 netbox/dcim/forms/model_forms.py:1587 +#: netbox/dcim/forms/bulk_edit.py:453 netbox/dcim/forms/bulk_edit.py:747 +#: netbox/dcim/forms/filtersets.py:326 netbox/dcim/forms/filtersets.py:399 +#: netbox/dcim/forms/filtersets.py:482 netbox/dcim/forms/filtersets.py:609 +#: netbox/dcim/forms/filtersets.py:722 netbox/dcim/forms/filtersets.py:943 +#: netbox/dcim/forms/model_forms.py:681 netbox/dcim/forms/model_forms.py:1632 #: netbox/templates/dcim/device_edit.html:20 msgid "Hardware" msgstr "ハードウェア" -#: netbox/dcim/forms/bulk_edit.py:506 netbox/dcim/forms/bulk_import.py:399 -#: netbox/dcim/forms/filtersets.py:499 netbox/dcim/forms/model_forms.py:353 +#: netbox/dcim/forms/bulk_edit.py:509 netbox/dcim/forms/bulk_import.py:401 +#: netbox/dcim/forms/filtersets.py:500 netbox/dcim/forms/model_forms.py:362 msgid "Default platform" msgstr "デフォルトプラットフォーム" -#: netbox/dcim/forms/bulk_edit.py:511 netbox/dcim/forms/bulk_edit.py:570 -#: netbox/dcim/forms/filtersets.py:502 netbox/dcim/forms/filtersets.py:622 +#: netbox/dcim/forms/bulk_edit.py:514 netbox/dcim/forms/bulk_edit.py:573 +#: netbox/dcim/forms/filtersets.py:503 netbox/dcim/forms/filtersets.py:623 msgid "Part number" msgstr "パーツ番号" -#: netbox/dcim/forms/bulk_edit.py:515 +#: netbox/dcim/forms/bulk_edit.py:518 msgid "U height" msgstr "ユニット数" -#: netbox/dcim/forms/bulk_edit.py:527 netbox/dcim/tables/devicetypes.py:102 +#: netbox/dcim/forms/bulk_edit.py:530 netbox/dcim/tables/devicetypes.py:107 msgid "Exclude from utilization" msgstr "ラック利用率に含めない" -#: netbox/dcim/forms/bulk_edit.py:556 netbox/dcim/forms/model_forms.py:368 -#: netbox/dcim/tables/devicetypes.py:77 netbox/templates/dcim/device.html:88 +#: netbox/dcim/forms/bulk_edit.py:559 netbox/dcim/forms/model_forms.py:377 +#: netbox/dcim/tables/devicetypes.py:82 netbox/templates/dcim/device.html:88 #: netbox/templates/dcim/devicebay.html:52 #: netbox/templates/dcim/module.html:61 msgid "Device Type" msgstr "デバイスタイプ" -#: netbox/dcim/forms/bulk_edit.py:598 netbox/dcim/forms/model_forms.py:401 +#: netbox/dcim/forms/bulk_edit.py:601 netbox/dcim/forms/model_forms.py:410 #: netbox/dcim/tables/modules.py:17 netbox/dcim/tables/modules.py:66 #: netbox/templates/dcim/module.html:65 #: netbox/templates/dcim/modulebay.html:66 -#: netbox/templates/dcim/moduletype.html:22 +#: netbox/templates/dcim/moduletype.html:24 msgid "Module Type" msgstr "モジュールタイプ" -#: netbox/dcim/forms/bulk_edit.py:602 netbox/dcim/forms/model_forms.py:371 -#: netbox/dcim/forms/model_forms.py:402 +#: netbox/dcim/forms/bulk_edit.py:605 netbox/dcim/forms/model_forms.py:380 +#: netbox/dcim/forms/model_forms.py:411 #: netbox/templates/dcim/devicetype.html:11 msgid "Chassis" msgstr "シャーシ" -#: netbox/dcim/forms/bulk_edit.py:616 netbox/dcim/models/devices.py:484 -#: netbox/dcim/tables/devices.py:67 +#: netbox/dcim/forms/bulk_edit.py:619 netbox/dcim/models/devices.py:483 +#: netbox/dcim/tables/devices.py:78 msgid "VM role" msgstr "VMのロール" -#: netbox/dcim/forms/bulk_edit.py:619 netbox/dcim/forms/bulk_edit.py:643 -#: netbox/dcim/forms/bulk_edit.py:726 netbox/dcim/forms/bulk_import.py:456 -#: netbox/dcim/forms/bulk_import.py:460 netbox/dcim/forms/bulk_import.py:479 -#: netbox/dcim/forms/bulk_import.py:483 netbox/dcim/forms/bulk_import.py:608 -#: netbox/dcim/forms/bulk_import.py:612 netbox/dcim/forms/filtersets.py:689 -#: netbox/dcim/forms/filtersets.py:705 netbox/dcim/forms/filtersets.py:823 -#: netbox/dcim/forms/model_forms.py:415 netbox/dcim/forms/model_forms.py:441 -#: netbox/dcim/forms/model_forms.py:555 -#: netbox/virtualization/forms/bulk_import.py:132 -#: netbox/virtualization/forms/bulk_import.py:133 -#: netbox/virtualization/forms/filtersets.py:188 -#: netbox/virtualization/forms/model_forms.py:215 +#: netbox/dcim/forms/bulk_edit.py:622 netbox/dcim/forms/bulk_edit.py:646 +#: netbox/dcim/forms/bulk_edit.py:729 netbox/dcim/forms/bulk_import.py:461 +#: netbox/dcim/forms/bulk_import.py:465 netbox/dcim/forms/bulk_import.py:484 +#: netbox/dcim/forms/bulk_import.py:488 netbox/dcim/forms/bulk_import.py:613 +#: netbox/dcim/forms/bulk_import.py:617 netbox/dcim/forms/filtersets.py:690 +#: netbox/dcim/forms/filtersets.py:706 netbox/dcim/forms/filtersets.py:824 +#: netbox/dcim/forms/model_forms.py:424 netbox/dcim/forms/model_forms.py:451 +#: netbox/dcim/forms/model_forms.py:566 +#: netbox/virtualization/forms/bulk_import.py:138 +#: netbox/virtualization/forms/bulk_import.py:139 +#: netbox/virtualization/forms/filtersets.py:193 +#: netbox/virtualization/forms/model_forms.py:222 msgid "Config template" msgstr "設定テンプレート" -#: netbox/dcim/forms/bulk_edit.py:667 netbox/dcim/forms/bulk_edit.py:1076 -#: netbox/dcim/forms/bulk_import.py:514 netbox/dcim/forms/filtersets.py:114 -#: netbox/dcim/forms/model_forms.py:501 netbox/dcim/forms/model_forms.py:872 -#: netbox/dcim/forms/model_forms.py:889 netbox/extras/filtersets.py:547 +#: netbox/dcim/forms/bulk_edit.py:670 netbox/dcim/forms/bulk_edit.py:1079 +#: netbox/dcim/forms/bulk_import.py:519 netbox/dcim/forms/filtersets.py:115 +#: netbox/dcim/forms/model_forms.py:511 netbox/dcim/forms/model_forms.py:884 +#: netbox/dcim/forms/model_forms.py:901 netbox/extras/filtersets.py:547 msgid "Device type" msgstr "デバイスタイプ" -#: netbox/dcim/forms/bulk_edit.py:678 netbox/dcim/forms/bulk_import.py:495 -#: netbox/dcim/forms/filtersets.py:119 netbox/dcim/forms/model_forms.py:509 +#: netbox/dcim/forms/bulk_edit.py:681 netbox/dcim/forms/bulk_import.py:500 +#: netbox/dcim/forms/filtersets.py:120 netbox/dcim/forms/model_forms.py:519 msgid "Device role" msgstr "デバイスロール" -#: netbox/dcim/forms/bulk_edit.py:701 netbox/dcim/forms/bulk_import.py:520 -#: netbox/dcim/forms/filtersets.py:796 netbox/dcim/forms/model_forms.py:451 -#: netbox/dcim/forms/model_forms.py:513 netbox/dcim/tables/devices.py:182 +#: netbox/dcim/forms/bulk_edit.py:704 netbox/dcim/forms/bulk_import.py:525 +#: netbox/dcim/forms/filtersets.py:797 netbox/dcim/forms/model_forms.py:461 +#: netbox/dcim/forms/model_forms.py:524 netbox/dcim/tables/devices.py:193 #: netbox/extras/filtersets.py:563 netbox/templates/dcim/device.html:186 #: netbox/templates/dcim/platform.html:26 #: netbox/templates/virtualization/virtualmachine.html:27 -#: netbox/virtualization/forms/bulk_edit.py:160 -#: netbox/virtualization/forms/bulk_import.py:122 -#: netbox/virtualization/forms/filtersets.py:168 -#: netbox/virtualization/forms/model_forms.py:203 -#: netbox/virtualization/tables/virtualmachines.py:79 +#: netbox/virtualization/forms/bulk_edit.py:142 +#: netbox/virtualization/forms/bulk_import.py:128 +#: netbox/virtualization/forms/filtersets.py:173 +#: netbox/virtualization/forms/model_forms.py:210 +#: netbox/virtualization/tables/virtualmachines.py:49 msgid "Platform" msgstr "プラットフォーム" -#: netbox/dcim/forms/bulk_edit.py:731 netbox/dcim/forms/bulk_import.py:539 -#: netbox/dcim/forms/filtersets.py:728 netbox/dcim/forms/filtersets.py:898 -#: netbox/dcim/forms/model_forms.py:522 netbox/dcim/tables/devices.py:202 -#: netbox/extras/filtersets.py:596 netbox/extras/forms/filtersets.py:322 -#: netbox/ipam/forms/filtersets.py:415 netbox/ipam/forms/filtersets.py:447 +#: netbox/dcim/forms/bulk_edit.py:734 netbox/dcim/forms/bulk_import.py:544 +#: netbox/dcim/forms/filtersets.py:729 netbox/dcim/forms/filtersets.py:899 +#: netbox/dcim/forms/model_forms.py:533 netbox/dcim/tables/devices.py:213 +#: netbox/extras/filtersets.py:596 netbox/extras/forms/filtersets.py:329 +#: netbox/ipam/forms/filtersets.py:418 netbox/ipam/forms/filtersets.py:450 #: netbox/templates/dcim/device.html:239 #: netbox/templates/virtualization/cluster.html:10 #: netbox/templates/virtualization/virtualmachine.html:92 #: netbox/templates/virtualization/virtualmachine.html:101 -#: netbox/virtualization/filtersets.py:157 -#: netbox/virtualization/filtersets.py:277 -#: netbox/virtualization/forms/bulk_edit.py:129 -#: netbox/virtualization/forms/bulk_import.py:92 -#: netbox/virtualization/forms/filtersets.py:99 -#: netbox/virtualization/forms/filtersets.py:123 -#: netbox/virtualization/forms/filtersets.py:204 -#: netbox/virtualization/forms/model_forms.py:79 -#: netbox/virtualization/forms/model_forms.py:176 -#: netbox/virtualization/tables/virtualmachines.py:67 +#: netbox/virtualization/filtersets.py:123 +#: netbox/virtualization/filtersets.py:243 +#: netbox/virtualization/forms/bulk_edit.py:111 +#: netbox/virtualization/forms/bulk_import.py:98 +#: netbox/virtualization/forms/filtersets.py:104 +#: netbox/virtualization/forms/filtersets.py:128 +#: netbox/virtualization/forms/filtersets.py:209 +#: netbox/virtualization/forms/model_forms.py:78 +#: netbox/virtualization/forms/model_forms.py:183 +#: netbox/virtualization/tables/virtualmachines.py:37 msgid "Cluster" msgstr "クラスタ" -#: netbox/dcim/forms/bulk_edit.py:742 netbox/dcim/forms/bulk_edit.py:1296 -#: netbox/dcim/forms/bulk_edit.py:1693 netbox/dcim/forms/bulk_edit.py:1739 -#: netbox/dcim/forms/bulk_import.py:663 netbox/dcim/forms/bulk_import.py:725 -#: netbox/dcim/forms/bulk_import.py:751 netbox/dcim/forms/bulk_import.py:777 -#: netbox/dcim/forms/bulk_import.py:797 netbox/dcim/forms/bulk_import.py:850 -#: netbox/dcim/forms/bulk_import.py:968 netbox/dcim/forms/bulk_import.py:1016 -#: netbox/dcim/forms/bulk_import.py:1033 netbox/dcim/forms/bulk_import.py:1045 -#: netbox/dcim/forms/bulk_import.py:1093 netbox/dcim/forms/bulk_import.py:1444 -#: netbox/dcim/forms/connections.py:24 netbox/dcim/forms/filtersets.py:131 -#: netbox/dcim/forms/filtersets.py:921 netbox/dcim/forms/filtersets.py:1051 -#: netbox/dcim/forms/filtersets.py:1242 netbox/dcim/forms/filtersets.py:1267 -#: netbox/dcim/forms/filtersets.py:1291 netbox/dcim/forms/filtersets.py:1311 -#: netbox/dcim/forms/filtersets.py:1334 netbox/dcim/forms/filtersets.py:1444 -#: netbox/dcim/forms/filtersets.py:1469 netbox/dcim/forms/filtersets.py:1493 -#: netbox/dcim/forms/filtersets.py:1511 netbox/dcim/forms/filtersets.py:1528 -#: netbox/dcim/forms/filtersets.py:1592 netbox/dcim/forms/filtersets.py:1616 -#: netbox/dcim/forms/filtersets.py:1640 netbox/dcim/forms/model_forms.py:633 -#: netbox/dcim/forms/model_forms.py:849 netbox/dcim/forms/model_forms.py:1215 -#: netbox/dcim/forms/model_forms.py:1671 -#: netbox/dcim/forms/object_create.py:249 netbox/dcim/tables/connections.py:22 -#: netbox/dcim/tables/connections.py:41 netbox/dcim/tables/connections.py:60 -#: netbox/dcim/tables/devices.py:285 netbox/dcim/tables/devices.py:371 -#: netbox/dcim/tables/devices.py:412 netbox/dcim/tables/devices.py:454 -#: netbox/dcim/tables/devices.py:505 netbox/dcim/tables/devices.py:597 -#: netbox/dcim/tables/devices.py:697 netbox/dcim/tables/devices.py:754 -#: netbox/dcim/tables/devices.py:801 netbox/dcim/tables/devices.py:861 -#: netbox/dcim/tables/devices.py:930 netbox/dcim/tables/devices.py:1057 -#: netbox/dcim/tables/modules.py:53 netbox/extras/forms/filtersets.py:321 -#: netbox/ipam/forms/bulk_import.py:304 netbox/ipam/forms/bulk_import.py:505 -#: netbox/ipam/forms/filtersets.py:551 netbox/ipam/forms/model_forms.py:323 -#: netbox/ipam/forms/model_forms.py:712 netbox/ipam/forms/model_forms.py:745 -#: netbox/ipam/forms/model_forms.py:771 netbox/ipam/tables/vlans.py:180 -#: netbox/templates/dcim/consoleport.html:20 -#: netbox/templates/dcim/consoleserverport.html:20 -#: netbox/templates/dcim/device.html:15 netbox/templates/dcim/device.html:130 -#: netbox/templates/dcim/device_edit.html:10 -#: netbox/templates/dcim/devicebay.html:20 -#: netbox/templates/dcim/devicebay.html:48 -#: netbox/templates/dcim/frontport.html:20 -#: netbox/templates/dcim/interface.html:30 -#: netbox/templates/dcim/interface.html:161 -#: netbox/templates/dcim/inventoryitem.html:20 -#: netbox/templates/dcim/module.html:57 -#: netbox/templates/dcim/modulebay.html:20 -#: netbox/templates/dcim/poweroutlet.html:20 -#: netbox/templates/dcim/powerport.html:20 -#: netbox/templates/dcim/rearport.html:20 -#: netbox/templates/dcim/virtualchassis.html:65 -#: netbox/templates/dcim/virtualchassis_edit.html:51 -#: netbox/templates/dcim/virtualdevicecontext.html:22 -#: netbox/templates/virtualization/virtualmachine.html:114 -#: netbox/templates/vpn/tunneltermination.html:23 -#: netbox/templates/wireless/inc/wirelesslink_interface.html:6 -#: netbox/virtualization/filtersets.py:167 -#: netbox/virtualization/forms/bulk_edit.py:137 -#: netbox/virtualization/forms/bulk_import.py:99 -#: netbox/virtualization/forms/filtersets.py:128 -#: netbox/virtualization/forms/model_forms.py:185 -#: netbox/virtualization/tables/virtualmachines.py:71 netbox/vpn/choices.py:52 -#: netbox/vpn/forms/bulk_import.py:86 netbox/vpn/forms/bulk_import.py:283 -#: netbox/vpn/forms/filtersets.py:275 netbox/vpn/forms/model_forms.py:90 -#: netbox/vpn/forms/model_forms.py:125 netbox/vpn/forms/model_forms.py:236 -#: netbox/vpn/forms/model_forms.py:453 netbox/wireless/forms/model_forms.py:99 -#: netbox/wireless/forms/model_forms.py:141 -#: netbox/wireless/tables/wirelesslan.py:75 -msgid "Device" -msgstr "デバイス" - -#: netbox/dcim/forms/bulk_edit.py:745 +#: netbox/dcim/forms/bulk_edit.py:748 #: netbox/templates/extras/dashboard/widget_config.html:7 -#: netbox/virtualization/forms/bulk_edit.py:191 +#: netbox/virtualization/forms/bulk_edit.py:173 msgid "Configuration" msgstr "設定" -#: netbox/dcim/forms/bulk_edit.py:746 netbox/netbox/navigation/menu.py:243 +#: netbox/dcim/forms/bulk_edit.py:749 netbox/netbox/navigation/menu.py:251 #: netbox/templates/dcim/device_edit.html:78 msgid "Virtualization" msgstr "仮想化" -#: netbox/dcim/forms/bulk_edit.py:760 netbox/dcim/forms/bulk_import.py:675 -#: netbox/dcim/forms/model_forms.py:647 netbox/dcim/forms/model_forms.py:897 +#: netbox/dcim/forms/bulk_edit.py:763 netbox/dcim/forms/bulk_import.py:680 +#: netbox/dcim/forms/model_forms.py:658 netbox/dcim/forms/model_forms.py:909 msgid "Module type" msgstr "モジュールタイプ" -#: netbox/dcim/forms/bulk_edit.py:814 netbox/dcim/forms/bulk_edit.py:999 -#: netbox/dcim/forms/bulk_edit.py:1018 netbox/dcim/forms/bulk_edit.py:1041 -#: netbox/dcim/forms/bulk_edit.py:1083 netbox/dcim/forms/bulk_edit.py:1127 -#: netbox/dcim/forms/bulk_edit.py:1178 netbox/dcim/forms/bulk_edit.py:1205 -#: netbox/dcim/forms/bulk_edit.py:1232 netbox/dcim/forms/bulk_edit.py:1250 -#: netbox/dcim/forms/bulk_edit.py:1268 netbox/dcim/forms/filtersets.py:67 +#: netbox/dcim/forms/bulk_edit.py:817 netbox/dcim/forms/bulk_edit.py:1002 +#: netbox/dcim/forms/bulk_edit.py:1021 netbox/dcim/forms/bulk_edit.py:1044 +#: netbox/dcim/forms/bulk_edit.py:1086 netbox/dcim/forms/bulk_edit.py:1130 +#: netbox/dcim/forms/bulk_edit.py:1181 netbox/dcim/forms/bulk_edit.py:1208 +#: netbox/dcim/forms/bulk_edit.py:1235 netbox/dcim/forms/bulk_edit.py:1253 +#: netbox/dcim/forms/bulk_edit.py:1271 netbox/dcim/forms/filtersets.py:68 #: netbox/dcim/forms/object_create.py:46 netbox/templates/dcim/cable.html:32 #: netbox/templates/dcim/consoleport.html:32 #: netbox/templates/dcim/consoleserverport.html:32 @@ -3906,109 +4295,109 @@ msgstr "モジュールタイプ" msgid "Label" msgstr "ラベル" -#: netbox/dcim/forms/bulk_edit.py:823 netbox/dcim/forms/filtersets.py:1068 +#: netbox/dcim/forms/bulk_edit.py:826 netbox/dcim/forms/filtersets.py:1069 #: netbox/templates/dcim/cable.html:50 msgid "Length" msgstr "長さ" -#: netbox/dcim/forms/bulk_edit.py:828 netbox/dcim/forms/bulk_import.py:1248 -#: netbox/dcim/forms/bulk_import.py:1251 netbox/dcim/forms/filtersets.py:1072 +#: netbox/dcim/forms/bulk_edit.py:831 netbox/dcim/forms/bulk_import.py:1345 +#: netbox/dcim/forms/bulk_import.py:1348 netbox/dcim/forms/filtersets.py:1073 msgid "Length unit" msgstr "長さの単位" -#: netbox/dcim/forms/bulk_edit.py:852 +#: netbox/dcim/forms/bulk_edit.py:855 #: netbox/templates/dcim/virtualchassis.html:23 msgid "Domain" msgstr "ドメイン" -#: netbox/dcim/forms/bulk_edit.py:920 netbox/dcim/forms/bulk_import.py:1367 -#: netbox/dcim/forms/filtersets.py:1158 netbox/dcim/forms/model_forms.py:750 +#: netbox/dcim/forms/bulk_edit.py:923 netbox/dcim/forms/bulk_import.py:1464 +#: netbox/dcim/forms/filtersets.py:1159 netbox/dcim/forms/model_forms.py:761 msgid "Power panel" msgstr "電源盤" -#: netbox/dcim/forms/bulk_edit.py:942 netbox/dcim/forms/bulk_import.py:1403 -#: netbox/dcim/forms/filtersets.py:1180 +#: netbox/dcim/forms/bulk_edit.py:945 netbox/dcim/forms/bulk_import.py:1500 +#: netbox/dcim/forms/filtersets.py:1181 #: netbox/templates/dcim/powerfeed.html:83 msgid "Supply" msgstr "供給電源" -#: netbox/dcim/forms/bulk_edit.py:948 netbox/dcim/forms/bulk_import.py:1408 -#: netbox/dcim/forms/filtersets.py:1185 +#: netbox/dcim/forms/bulk_edit.py:951 netbox/dcim/forms/bulk_import.py:1505 +#: netbox/dcim/forms/filtersets.py:1186 #: netbox/templates/dcim/powerfeed.html:95 msgid "Phase" msgstr "電力相" -#: netbox/dcim/forms/bulk_edit.py:954 netbox/dcim/forms/filtersets.py:1190 +#: netbox/dcim/forms/bulk_edit.py:957 netbox/dcim/forms/filtersets.py:1191 #: netbox/templates/dcim/powerfeed.html:87 msgid "Voltage" msgstr "電圧" -#: netbox/dcim/forms/bulk_edit.py:958 netbox/dcim/forms/filtersets.py:1194 +#: netbox/dcim/forms/bulk_edit.py:961 netbox/dcim/forms/filtersets.py:1195 #: netbox/templates/dcim/powerfeed.html:91 msgid "Amperage" msgstr "アンペア数" -#: netbox/dcim/forms/bulk_edit.py:962 netbox/dcim/forms/filtersets.py:1198 +#: netbox/dcim/forms/bulk_edit.py:965 netbox/dcim/forms/filtersets.py:1199 msgid "Max utilization" msgstr "最大使用率" -#: netbox/dcim/forms/bulk_edit.py:1051 +#: netbox/dcim/forms/bulk_edit.py:1054 msgid "Maximum draw" msgstr "最大消費電力" -#: netbox/dcim/forms/bulk_edit.py:1054 -#: netbox/dcim/models/device_component_templates.py:282 -#: netbox/dcim/models/device_components.py:356 +#: netbox/dcim/forms/bulk_edit.py:1057 +#: netbox/dcim/models/device_component_templates.py:281 +#: netbox/dcim/models/device_components.py:349 msgid "Maximum power draw (watts)" msgstr "最大消費電力 (ワット)" -#: netbox/dcim/forms/bulk_edit.py:1057 +#: netbox/dcim/forms/bulk_edit.py:1060 msgid "Allocated draw" msgstr "割当電力" -#: netbox/dcim/forms/bulk_edit.py:1060 -#: netbox/dcim/models/device_component_templates.py:289 -#: netbox/dcim/models/device_components.py:363 +#: netbox/dcim/forms/bulk_edit.py:1063 +#: netbox/dcim/models/device_component_templates.py:288 +#: netbox/dcim/models/device_components.py:356 msgid "Allocated power draw (watts)" msgstr "割当消費電力 (ワット)" -#: netbox/dcim/forms/bulk_edit.py:1093 netbox/dcim/forms/bulk_import.py:808 -#: netbox/dcim/forms/model_forms.py:960 netbox/dcim/forms/model_forms.py:1285 -#: netbox/dcim/forms/model_forms.py:1574 netbox/dcim/forms/object_import.py:55 +#: netbox/dcim/forms/bulk_edit.py:1096 netbox/dcim/forms/bulk_import.py:813 +#: netbox/dcim/forms/model_forms.py:972 netbox/dcim/forms/model_forms.py:1301 +#: netbox/dcim/forms/model_forms.py:1616 netbox/dcim/forms/object_import.py:55 msgid "Power port" msgstr "電源ポート" -#: netbox/dcim/forms/bulk_edit.py:1098 netbox/dcim/forms/bulk_import.py:815 +#: netbox/dcim/forms/bulk_edit.py:1101 netbox/dcim/forms/bulk_import.py:820 msgid "Feed leg" msgstr "供給端子" -#: netbox/dcim/forms/bulk_edit.py:1144 netbox/dcim/forms/bulk_edit.py:1462 +#: netbox/dcim/forms/bulk_edit.py:1147 netbox/dcim/forms/bulk_edit.py:1465 msgid "Management only" msgstr "管理のみ" -#: netbox/dcim/forms/bulk_edit.py:1154 netbox/dcim/forms/bulk_edit.py:1468 -#: netbox/dcim/forms/bulk_import.py:898 netbox/dcim/forms/filtersets.py:1394 +#: netbox/dcim/forms/bulk_edit.py:1157 netbox/dcim/forms/bulk_edit.py:1471 +#: netbox/dcim/forms/bulk_import.py:906 netbox/dcim/forms/filtersets.py:1399 #: netbox/dcim/forms/object_import.py:90 -#: netbox/dcim/models/device_component_templates.py:437 -#: netbox/dcim/models/device_components.py:670 +#: netbox/dcim/models/device_component_templates.py:445 +#: netbox/dcim/models/device_components.py:721 msgid "PoE mode" msgstr "PoE モード" -#: netbox/dcim/forms/bulk_edit.py:1160 netbox/dcim/forms/bulk_edit.py:1474 -#: netbox/dcim/forms/bulk_import.py:904 netbox/dcim/forms/filtersets.py:1399 +#: netbox/dcim/forms/bulk_edit.py:1163 netbox/dcim/forms/bulk_edit.py:1477 +#: netbox/dcim/forms/bulk_import.py:912 netbox/dcim/forms/filtersets.py:1404 #: netbox/dcim/forms/object_import.py:95 -#: netbox/dcim/models/device_component_templates.py:443 -#: netbox/dcim/models/device_components.py:676 +#: netbox/dcim/models/device_component_templates.py:452 +#: netbox/dcim/models/device_components.py:728 msgid "PoE type" msgstr "PoE タイプ" -#: netbox/dcim/forms/bulk_edit.py:1166 netbox/dcim/forms/filtersets.py:1404 +#: netbox/dcim/forms/bulk_edit.py:1169 netbox/dcim/forms/filtersets.py:1409 #: netbox/dcim/forms/object_import.py:100 msgid "Wireless role" msgstr "無線ロール" -#: netbox/dcim/forms/bulk_edit.py:1303 netbox/dcim/forms/model_forms.py:669 -#: netbox/dcim/forms/model_forms.py:1230 netbox/dcim/tables/devices.py:313 +#: netbox/dcim/forms/bulk_edit.py:1306 netbox/dcim/forms/model_forms.py:680 +#: netbox/dcim/forms/model_forms.py:1246 netbox/dcim/tables/devices.py:323 #: netbox/templates/dcim/consoleport.html:24 #: netbox/templates/dcim/consoleserverport.html:24 #: netbox/templates/dcim/frontport.html:24 @@ -4022,31 +4411,31 @@ msgstr "無線ロール" msgid "Module" msgstr "モジュール" -#: netbox/dcim/forms/bulk_edit.py:1442 netbox/dcim/tables/devices.py:665 -#: netbox/templates/dcim/interface.html:110 +#: netbox/dcim/forms/bulk_edit.py:1445 netbox/dcim/tables/devices.py:699 +#: netbox/templates/dcim/interface.html:116 msgid "LAG" msgstr "LAG" -#: netbox/dcim/forms/bulk_edit.py:1447 netbox/dcim/forms/model_forms.py:1312 +#: netbox/dcim/forms/bulk_edit.py:1450 netbox/dcim/forms/model_forms.py:1328 msgid "Virtual device contexts" msgstr "仮想デバイスコンテキスト" -#: netbox/dcim/forms/bulk_edit.py:1453 netbox/dcim/forms/bulk_import.py:736 -#: netbox/dcim/forms/bulk_import.py:762 netbox/dcim/forms/filtersets.py:1252 -#: netbox/dcim/forms/filtersets.py:1277 netbox/dcim/forms/filtersets.py:1358 -#: netbox/dcim/tables/devices.py:610 -#: netbox/templates/circuits/inc/circuit_termination_fields.html:67 +#: netbox/dcim/forms/bulk_edit.py:1456 netbox/dcim/forms/bulk_import.py:741 +#: netbox/dcim/forms/bulk_import.py:767 netbox/dcim/forms/filtersets.py:1253 +#: netbox/dcim/forms/filtersets.py:1278 netbox/dcim/forms/filtersets.py:1363 +#: netbox/dcim/tables/devices.py:632 +#: netbox/templates/circuits/inc/circuit_termination_fields.html:62 #: netbox/templates/dcim/consoleport.html:40 #: netbox/templates/dcim/consoleserverport.html:40 msgid "Speed" msgstr "速度" -#: netbox/dcim/forms/bulk_edit.py:1482 netbox/dcim/forms/bulk_import.py:907 +#: netbox/dcim/forms/bulk_edit.py:1485 netbox/dcim/forms/bulk_import.py:915 #: netbox/templates/vpn/ikepolicy.html:25 #: netbox/templates/vpn/ipsecprofile.html:21 #: netbox/templates/vpn/ipsecprofile.html:48 -#: netbox/virtualization/forms/bulk_edit.py:233 -#: netbox/virtualization/forms/bulk_import.py:165 +#: netbox/virtualization/forms/bulk_edit.py:215 +#: netbox/virtualization/forms/bulk_import.py:171 #: netbox/vpn/forms/bulk_edit.py:146 netbox/vpn/forms/bulk_edit.py:232 #: netbox/vpn/forms/bulk_import.py:176 netbox/vpn/forms/bulk_import.py:234 #: netbox/vpn/forms/filtersets.py:135 netbox/vpn/forms/filtersets.py:178 @@ -4055,578 +4444,620 @@ msgstr "速度" msgid "Mode" msgstr "モード" -#: netbox/dcim/forms/bulk_edit.py:1490 netbox/dcim/forms/model_forms.py:1361 -#: netbox/ipam/forms/bulk_import.py:178 netbox/ipam/forms/filtersets.py:498 -#: netbox/ipam/models/vlans.py:84 netbox/virtualization/forms/bulk_edit.py:240 -#: netbox/virtualization/forms/model_forms.py:321 +#: netbox/dcim/forms/bulk_edit.py:1493 netbox/dcim/forms/model_forms.py:1377 +#: netbox/ipam/forms/bulk_import.py:174 netbox/ipam/forms/filtersets.py:539 +#: netbox/ipam/models/vlans.py:86 netbox/virtualization/forms/bulk_edit.py:222 +#: netbox/virtualization/forms/model_forms.py:335 msgid "VLAN group" msgstr "VLAN グループ" -#: netbox/dcim/forms/bulk_edit.py:1499 netbox/dcim/forms/model_forms.py:1367 -#: netbox/dcim/tables/devices.py:579 -#: netbox/virtualization/forms/bulk_edit.py:248 -#: netbox/virtualization/forms/model_forms.py:326 +#: netbox/dcim/forms/bulk_edit.py:1502 netbox/dcim/forms/model_forms.py:1383 +#: netbox/dcim/tables/devices.py:593 +#: netbox/virtualization/forms/bulk_edit.py:230 +#: netbox/virtualization/forms/model_forms.py:340 msgid "Untagged VLAN" msgstr "タグなし VLAN" -#: netbox/dcim/forms/bulk_edit.py:1508 netbox/dcim/forms/model_forms.py:1376 -#: netbox/dcim/tables/devices.py:585 -#: netbox/virtualization/forms/bulk_edit.py:256 -#: netbox/virtualization/forms/model_forms.py:335 +#: netbox/dcim/forms/bulk_edit.py:1511 netbox/dcim/forms/model_forms.py:1392 +#: netbox/dcim/tables/devices.py:599 +#: netbox/virtualization/forms/bulk_edit.py:238 +#: netbox/virtualization/forms/model_forms.py:349 msgid "Tagged VLANs" msgstr "タグ付き VLAN" -#: netbox/dcim/forms/bulk_edit.py:1511 +#: netbox/dcim/forms/bulk_edit.py:1514 msgid "Add tagged VLANs" msgstr "タグ付 VLAN の追加" -#: netbox/dcim/forms/bulk_edit.py:1520 +#: netbox/dcim/forms/bulk_edit.py:1523 msgid "Remove tagged VLANs" msgstr "タグ付 VLAN の削除" -#: netbox/dcim/forms/bulk_edit.py:1536 netbox/dcim/forms/model_forms.py:1348 +#: netbox/dcim/forms/bulk_edit.py:1534 netbox/dcim/forms/model_forms.py:1401 +#: netbox/virtualization/forms/model_forms.py:358 +msgid "Q-in-Q Service VLAN" +msgstr "Q-in-Q サービス VLAN" + +#: netbox/dcim/forms/bulk_edit.py:1549 netbox/dcim/forms/model_forms.py:1364 msgid "Wireless LAN group" msgstr "無線 LAN グループ" -#: netbox/dcim/forms/bulk_edit.py:1541 netbox/dcim/forms/model_forms.py:1353 -#: netbox/dcim/tables/devices.py:619 netbox/netbox/navigation/menu.py:146 -#: netbox/templates/dcim/interface.html:280 +#: netbox/dcim/forms/bulk_edit.py:1554 netbox/dcim/forms/model_forms.py:1369 +#: netbox/dcim/tables/devices.py:641 netbox/netbox/navigation/menu.py:152 +#: netbox/templates/dcim/interface.html:337 #: netbox/wireless/tables/wirelesslan.py:24 msgid "Wireless LANs" msgstr "無線 LAN" -#: netbox/dcim/forms/bulk_edit.py:1550 netbox/dcim/forms/filtersets.py:1328 -#: netbox/dcim/forms/model_forms.py:1397 netbox/ipam/forms/bulk_edit.py:286 -#: netbox/ipam/forms/bulk_edit.py:378 netbox/ipam/forms/filtersets.py:169 -#: netbox/templates/dcim/interface.html:122 -#: netbox/templates/ipam/prefix.html:95 -#: netbox/virtualization/forms/model_forms.py:349 +#: netbox/dcim/forms/bulk_edit.py:1563 netbox/dcim/forms/filtersets.py:1333 +#: netbox/dcim/forms/model_forms.py:1435 netbox/ipam/forms/bulk_edit.py:269 +#: netbox/ipam/forms/bulk_edit.py:362 netbox/ipam/forms/filtersets.py:171 +#: netbox/netbox/navigation/menu.py:108 +#: netbox/templates/dcim/interface.html:128 +#: netbox/templates/ipam/prefix.html:91 +#: netbox/templates/virtualization/vminterface.html:70 +#: netbox/virtualization/forms/model_forms.py:378 msgid "Addressing" msgstr "アドレス" -#: netbox/dcim/forms/bulk_edit.py:1551 netbox/dcim/forms/filtersets.py:720 -#: netbox/dcim/forms/model_forms.py:1398 -#: netbox/virtualization/forms/model_forms.py:350 +#: netbox/dcim/forms/bulk_edit.py:1564 netbox/dcim/forms/filtersets.py:721 +#: netbox/dcim/forms/model_forms.py:1436 +#: netbox/virtualization/forms/model_forms.py:379 msgid "Operation" msgstr "オペレーション" -#: netbox/dcim/forms/bulk_edit.py:1552 netbox/dcim/forms/filtersets.py:1329 -#: netbox/dcim/forms/model_forms.py:994 netbox/dcim/forms/model_forms.py:1400 +#: netbox/dcim/forms/bulk_edit.py:1565 netbox/dcim/forms/filtersets.py:1334 +#: netbox/dcim/forms/model_forms.py:1006 netbox/dcim/forms/model_forms.py:1438 msgid "PoE" msgstr "PoE" -#: netbox/dcim/forms/bulk_edit.py:1553 netbox/dcim/forms/model_forms.py:1399 -#: netbox/templates/dcim/interface.html:99 -#: netbox/virtualization/forms/bulk_edit.py:267 -#: netbox/virtualization/forms/model_forms.py:351 +#: netbox/dcim/forms/bulk_edit.py:1566 netbox/dcim/forms/model_forms.py:1437 +#: netbox/templates/dcim/interface.html:105 +#: netbox/virtualization/forms/bulk_edit.py:254 +#: netbox/virtualization/forms/model_forms.py:380 msgid "Related Interfaces" msgstr "関連インタフェース" -#: netbox/dcim/forms/bulk_edit.py:1554 netbox/dcim/forms/model_forms.py:1401 -#: netbox/virtualization/forms/bulk_edit.py:268 -#: netbox/virtualization/forms/model_forms.py:352 +#: netbox/dcim/forms/bulk_edit.py:1568 netbox/dcim/forms/model_forms.py:1441 +#: netbox/virtualization/forms/bulk_edit.py:257 +#: netbox/virtualization/forms/model_forms.py:383 msgid "802.1Q Switching" msgstr "802.1Q スイッチング" -#: netbox/dcim/forms/bulk_edit.py:1558 +#: netbox/dcim/forms/bulk_edit.py:1573 msgid "Add/Remove" msgstr "追加/削除" -#: netbox/dcim/forms/bulk_edit.py:1617 netbox/dcim/forms/bulk_edit.py:1619 +#: netbox/dcim/forms/bulk_edit.py:1632 netbox/dcim/forms/bulk_edit.py:1634 msgid "Interface mode must be specified to assign VLANs" msgstr "VLAN を割り当てるには、インタフェースモードを指定する必要があります" -#: netbox/dcim/forms/bulk_edit.py:1624 netbox/dcim/forms/common.py:50 +#: netbox/dcim/forms/bulk_edit.py:1639 msgid "An access interface cannot have tagged VLANs assigned." msgstr "アクセスインタフェースにはタグ付き VLAN を割り当てることはできません。" -#: netbox/dcim/forms/bulk_import.py:64 +#: netbox/dcim/forms/bulk_import.py:66 msgid "Name of parent region" msgstr "親リージョン名" -#: netbox/dcim/forms/bulk_import.py:78 +#: netbox/dcim/forms/bulk_import.py:80 msgid "Name of parent site group" msgstr "親サイトグループ名" -#: netbox/dcim/forms/bulk_import.py:97 +#: netbox/dcim/forms/bulk_import.py:99 msgid "Assigned region" msgstr "割当リージョン" -#: netbox/dcim/forms/bulk_import.py:104 netbox/tenancy/forms/bulk_import.py:44 +#: netbox/dcim/forms/bulk_import.py:106 netbox/tenancy/forms/bulk_import.py:44 #: netbox/tenancy/forms/bulk_import.py:85 -#: netbox/wireless/forms/bulk_import.py:40 +#: netbox/wireless/forms/bulk_import.py:42 msgid "Assigned group" msgstr "割当グループ" -#: netbox/dcim/forms/bulk_import.py:123 +#: netbox/dcim/forms/bulk_import.py:125 msgid "available options" msgstr "使用可能なオプション" -#: netbox/dcim/forms/bulk_import.py:134 netbox/dcim/forms/bulk_import.py:565 -#: netbox/dcim/forms/bulk_import.py:1364 netbox/ipam/forms/bulk_import.py:175 -#: netbox/ipam/forms/bulk_import.py:457 -#: netbox/virtualization/forms/bulk_import.py:63 -#: netbox/virtualization/forms/bulk_import.py:89 +#: netbox/dcim/forms/bulk_import.py:136 netbox/dcim/forms/bulk_import.py:570 +#: netbox/dcim/forms/bulk_import.py:1461 netbox/ipam/forms/bulk_import.py:456 +#: netbox/virtualization/forms/bulk_import.py:64 +#: netbox/virtualization/forms/bulk_import.py:95 msgid "Assigned site" msgstr "割当サイト" -#: netbox/dcim/forms/bulk_import.py:141 +#: netbox/dcim/forms/bulk_import.py:143 msgid "Parent location" msgstr "親ロケーション" -#: netbox/dcim/forms/bulk_import.py:143 +#: netbox/dcim/forms/bulk_import.py:145 msgid "Location not found." msgstr "ロケーションが見つかりません。" -#: netbox/dcim/forms/bulk_import.py:185 +#: netbox/dcim/forms/bulk_import.py:187 msgid "The manufacturer of this rack type" msgstr "このラックタイプのメーカ" -#: netbox/dcim/forms/bulk_import.py:196 +#: netbox/dcim/forms/bulk_import.py:198 msgid "The lowest-numbered position in the rack" msgstr "ラック内の一番小さい番号の位置" -#: netbox/dcim/forms/bulk_import.py:201 netbox/dcim/forms/bulk_import.py:276 +#: netbox/dcim/forms/bulk_import.py:203 netbox/dcim/forms/bulk_import.py:278 msgid "Rail-to-rail width (in inches)" msgstr "レール間の幅 (インチ)" -#: netbox/dcim/forms/bulk_import.py:207 netbox/dcim/forms/bulk_import.py:286 +#: netbox/dcim/forms/bulk_import.py:209 netbox/dcim/forms/bulk_import.py:288 msgid "Unit for outer dimensions" msgstr "外形寸法の単位" -#: netbox/dcim/forms/bulk_import.py:213 netbox/dcim/forms/bulk_import.py:298 +#: netbox/dcim/forms/bulk_import.py:215 netbox/dcim/forms/bulk_import.py:300 msgid "Unit for rack weights" msgstr "重量の単位" -#: netbox/dcim/forms/bulk_import.py:245 +#: netbox/dcim/forms/bulk_import.py:247 msgid "Name of assigned tenant" msgstr "割当テナント名" -#: netbox/dcim/forms/bulk_import.py:257 +#: netbox/dcim/forms/bulk_import.py:259 msgid "Name of assigned role" msgstr "割当ロール名" -#: netbox/dcim/forms/bulk_import.py:264 +#: netbox/dcim/forms/bulk_import.py:266 msgid "Rack type model" msgstr "ラックタイプモデル" -#: netbox/dcim/forms/bulk_import.py:292 netbox/dcim/forms/bulk_import.py:435 -#: netbox/dcim/forms/bulk_import.py:605 +#: netbox/dcim/forms/bulk_import.py:294 netbox/dcim/forms/bulk_import.py:437 +#: netbox/dcim/forms/bulk_import.py:610 msgid "Airflow direction" msgstr "エアフロー" -#: netbox/dcim/forms/bulk_import.py:324 +#: netbox/dcim/forms/bulk_import.py:326 msgid "Width must be set if not specifying a rack type." msgstr "ラックタイプを指定しない場合は、幅を設定する必要があります。" -#: netbox/dcim/forms/bulk_import.py:326 +#: netbox/dcim/forms/bulk_import.py:328 msgid "U height must be set if not specifying a rack type." msgstr "ラックタイプを指定しない場合は U 高さを設定する必要があります。" -#: netbox/dcim/forms/bulk_import.py:334 +#: netbox/dcim/forms/bulk_import.py:336 msgid "Parent site" msgstr "親サイト" -#: netbox/dcim/forms/bulk_import.py:341 netbox/dcim/forms/bulk_import.py:1377 +#: netbox/dcim/forms/bulk_import.py:343 netbox/dcim/forms/bulk_import.py:1474 msgid "Rack's location (if any)" msgstr "ラックのロケーション (存在する場合)" -#: netbox/dcim/forms/bulk_import.py:350 netbox/dcim/forms/model_forms.py:311 -#: netbox/dcim/tables/racks.py:222 +#: netbox/dcim/forms/bulk_import.py:352 netbox/dcim/forms/model_forms.py:319 +#: netbox/dcim/tables/racks.py:221 #: netbox/templates/dcim/rackreservation.html:12 #: netbox/templates/dcim/rackreservation.html:45 msgid "Units" msgstr "単位" -#: netbox/dcim/forms/bulk_import.py:353 +#: netbox/dcim/forms/bulk_import.py:355 msgid "Comma-separated list of individual unit numbers" msgstr "カンマ区切りのユニット番号" -#: netbox/dcim/forms/bulk_import.py:396 +#: netbox/dcim/forms/bulk_import.py:398 msgid "The manufacturer which produces this device type" msgstr "製造メーカ" -#: netbox/dcim/forms/bulk_import.py:403 +#: netbox/dcim/forms/bulk_import.py:405 msgid "The default platform for devices of this type (optional)" msgstr "デフォルトのプラットフォーム (オプション)" -#: netbox/dcim/forms/bulk_import.py:408 +#: netbox/dcim/forms/bulk_import.py:410 msgid "Device weight" msgstr "デバイス重量" -#: netbox/dcim/forms/bulk_import.py:414 +#: netbox/dcim/forms/bulk_import.py:416 msgid "Unit for device weight" msgstr "デバイス重量の単位" -#: netbox/dcim/forms/bulk_import.py:440 +#: netbox/dcim/forms/bulk_import.py:442 msgid "Module weight" msgstr "モジュール重量" -#: netbox/dcim/forms/bulk_import.py:446 +#: netbox/dcim/forms/bulk_import.py:448 msgid "Unit for module weight" msgstr "モジュール重量の単位" -#: netbox/dcim/forms/bulk_import.py:476 +#: netbox/dcim/forms/bulk_import.py:481 msgid "Limit platform assignments to this manufacturer" msgstr "プラットフォーム割り当てをこのメーカに限定する" -#: netbox/dcim/forms/bulk_import.py:498 netbox/dcim/forms/bulk_import.py:1447 +#: netbox/dcim/forms/bulk_import.py:503 netbox/dcim/forms/bulk_import.py:1544 #: netbox/tenancy/forms/bulk_import.py:106 msgid "Assigned role" msgstr "割当ロール" -#: netbox/dcim/forms/bulk_import.py:511 +#: netbox/dcim/forms/bulk_import.py:516 msgid "Device type manufacturer" msgstr "デバイスタイプメーカ" -#: netbox/dcim/forms/bulk_import.py:517 +#: netbox/dcim/forms/bulk_import.py:522 msgid "Device type model" msgstr "デバイスタイプモデル" -#: netbox/dcim/forms/bulk_import.py:524 -#: netbox/virtualization/forms/bulk_import.py:126 +#: netbox/dcim/forms/bulk_import.py:529 +#: netbox/virtualization/forms/bulk_import.py:132 msgid "Assigned platform" msgstr "割当プラットフォーム" -#: netbox/dcim/forms/bulk_import.py:532 netbox/dcim/forms/bulk_import.py:536 -#: netbox/dcim/forms/model_forms.py:536 +#: netbox/dcim/forms/bulk_import.py:537 netbox/dcim/forms/bulk_import.py:541 +#: netbox/dcim/forms/model_forms.py:547 msgid "Virtual chassis" msgstr "バーチャルシャーシ" -#: netbox/dcim/forms/bulk_import.py:543 +#: netbox/dcim/forms/bulk_import.py:548 msgid "Virtualization cluster" msgstr "仮想化クラスタ" -#: netbox/dcim/forms/bulk_import.py:572 +#: netbox/dcim/forms/bulk_import.py:577 msgid "Assigned location (if any)" msgstr "割当ロケーション (存在する場合)" -#: netbox/dcim/forms/bulk_import.py:579 +#: netbox/dcim/forms/bulk_import.py:584 msgid "Assigned rack (if any)" msgstr "割当ラック (存在する場合)" -#: netbox/dcim/forms/bulk_import.py:582 +#: netbox/dcim/forms/bulk_import.py:587 msgid "Face" msgstr "面" -#: netbox/dcim/forms/bulk_import.py:585 +#: netbox/dcim/forms/bulk_import.py:590 msgid "Mounted rack face" msgstr "ラック取付面" -#: netbox/dcim/forms/bulk_import.py:592 +#: netbox/dcim/forms/bulk_import.py:597 msgid "Parent device (for child devices)" msgstr "親デバイス (子デバイス用)" -#: netbox/dcim/forms/bulk_import.py:595 +#: netbox/dcim/forms/bulk_import.py:600 msgid "Device bay" msgstr "デバイスベイ" -#: netbox/dcim/forms/bulk_import.py:599 +#: netbox/dcim/forms/bulk_import.py:604 msgid "Device bay in which this device is installed (for child devices)" msgstr "取付られているデバイスベイ (子デバイス用)" -#: netbox/dcim/forms/bulk_import.py:666 +#: netbox/dcim/forms/bulk_import.py:671 msgid "The device in which this module is installed" msgstr "取付られているデバイス" -#: netbox/dcim/forms/bulk_import.py:669 netbox/dcim/forms/model_forms.py:640 +#: netbox/dcim/forms/bulk_import.py:674 netbox/dcim/forms/model_forms.py:651 msgid "Module bay" msgstr "モジュールベイ" -#: netbox/dcim/forms/bulk_import.py:672 +#: netbox/dcim/forms/bulk_import.py:677 msgid "The module bay in which this module is installed" msgstr "取付られているモジュールベイ" -#: netbox/dcim/forms/bulk_import.py:678 +#: netbox/dcim/forms/bulk_import.py:683 msgid "The type of module" msgstr "モジュールタイプ" -#: netbox/dcim/forms/bulk_import.py:686 netbox/dcim/forms/model_forms.py:656 +#: netbox/dcim/forms/bulk_import.py:691 netbox/dcim/forms/model_forms.py:667 msgid "Replicate components" msgstr "構成要素を複製" -#: netbox/dcim/forms/bulk_import.py:688 +#: netbox/dcim/forms/bulk_import.py:693 msgid "" "Automatically populate components associated with this module type (enabled " "by default)" msgstr "関連する構成要素を自動的に登録 (デフォルト)" -#: netbox/dcim/forms/bulk_import.py:691 netbox/dcim/forms/model_forms.py:662 +#: netbox/dcim/forms/bulk_import.py:696 netbox/dcim/forms/model_forms.py:673 msgid "Adopt components" msgstr "既存の構成要素を採用" -#: netbox/dcim/forms/bulk_import.py:693 netbox/dcim/forms/model_forms.py:665 +#: netbox/dcim/forms/bulk_import.py:698 netbox/dcim/forms/model_forms.py:676 msgid "Adopt already existing components" msgstr "既存の構成要素を採用" -#: netbox/dcim/forms/bulk_import.py:733 netbox/dcim/forms/bulk_import.py:759 -#: netbox/dcim/forms/bulk_import.py:785 +#: netbox/dcim/forms/bulk_import.py:738 netbox/dcim/forms/bulk_import.py:764 +#: netbox/dcim/forms/bulk_import.py:790 msgid "Port type" msgstr "ポートタイプ" -#: netbox/dcim/forms/bulk_import.py:741 netbox/dcim/forms/bulk_import.py:767 +#: netbox/dcim/forms/bulk_import.py:746 netbox/dcim/forms/bulk_import.py:772 msgid "Port speed in bps" msgstr "ポート速度 (bps)" -#: netbox/dcim/forms/bulk_import.py:805 +#: netbox/dcim/forms/bulk_import.py:810 msgid "Outlet type" msgstr "コンセントタイプ" -#: netbox/dcim/forms/bulk_import.py:812 +#: netbox/dcim/forms/bulk_import.py:817 msgid "Local power port which feeds this outlet" msgstr "このコンセントに給電する電源ポート" -#: netbox/dcim/forms/bulk_import.py:818 +#: netbox/dcim/forms/bulk_import.py:823 msgid "Electrical phase (for three-phase circuits)" msgstr "電気位相 (三相回路用)" -#: netbox/dcim/forms/bulk_import.py:859 netbox/dcim/forms/model_forms.py:1323 -#: netbox/virtualization/forms/bulk_import.py:155 -#: netbox/virtualization/forms/model_forms.py:305 +#: netbox/dcim/forms/bulk_import.py:867 netbox/dcim/forms/model_forms.py:1339 +#: netbox/virtualization/forms/bulk_import.py:161 +#: netbox/virtualization/forms/model_forms.py:319 msgid "Parent interface" msgstr "親インタフェース" -#: netbox/dcim/forms/bulk_import.py:866 netbox/dcim/forms/model_forms.py:1331 -#: netbox/virtualization/forms/bulk_import.py:162 -#: netbox/virtualization/forms/model_forms.py:313 +#: netbox/dcim/forms/bulk_import.py:874 netbox/dcim/forms/model_forms.py:1347 +#: netbox/virtualization/forms/bulk_import.py:168 +#: netbox/virtualization/forms/model_forms.py:327 msgid "Bridged interface" msgstr "ブリッジインタフェース" -#: netbox/dcim/forms/bulk_import.py:869 +#: netbox/dcim/forms/bulk_import.py:877 msgid "Lag" msgstr "Lag" -#: netbox/dcim/forms/bulk_import.py:873 +#: netbox/dcim/forms/bulk_import.py:881 msgid "Parent LAG interface" msgstr "親 LAG インタフェース" -#: netbox/dcim/forms/bulk_import.py:876 +#: netbox/dcim/forms/bulk_import.py:884 msgid "Vdcs" msgstr "VDC" -#: netbox/dcim/forms/bulk_import.py:881 +#: netbox/dcim/forms/bulk_import.py:889 msgid "VDC names separated by commas, encased with double quotes. Example:" msgstr "VDC 名をコンマで区切り、二重引用符で囲みます。例:" -#: netbox/dcim/forms/bulk_import.py:887 +#: netbox/dcim/forms/bulk_import.py:895 msgid "Physical medium" msgstr "物理媒体" -#: netbox/dcim/forms/bulk_import.py:890 netbox/dcim/forms/filtersets.py:1365 +#: netbox/dcim/forms/bulk_import.py:898 netbox/dcim/forms/filtersets.py:1370 msgid "Duplex" msgstr "デュプレックス" -#: netbox/dcim/forms/bulk_import.py:895 +#: netbox/dcim/forms/bulk_import.py:903 msgid "Poe mode" msgstr "PoEモード" -#: netbox/dcim/forms/bulk_import.py:901 +#: netbox/dcim/forms/bulk_import.py:909 msgid "Poe type" msgstr "PoEタイプ" -#: netbox/dcim/forms/bulk_import.py:910 -#: netbox/virtualization/forms/bulk_import.py:168 +#: netbox/dcim/forms/bulk_import.py:918 +#: netbox/virtualization/forms/bulk_import.py:174 msgid "IEEE 802.1Q operational mode (for L2 interfaces)" msgstr "IEEE 802.1Q モード(L2 インタフェース用)" -#: netbox/dcim/forms/bulk_import.py:917 netbox/ipam/forms/bulk_import.py:161 -#: netbox/ipam/forms/bulk_import.py:247 netbox/ipam/forms/bulk_import.py:283 -#: netbox/ipam/forms/filtersets.py:201 netbox/ipam/forms/filtersets.py:277 -#: netbox/ipam/forms/filtersets.py:336 -#: netbox/virtualization/forms/bulk_import.py:175 +#: netbox/dcim/forms/bulk_import.py:925 netbox/ipam/forms/bulk_import.py:164 +#: netbox/ipam/forms/bulk_import.py:246 netbox/ipam/forms/bulk_import.py:282 +#: netbox/ipam/forms/filtersets.py:203 netbox/ipam/forms/filtersets.py:280 +#: netbox/ipam/forms/filtersets.py:339 +#: netbox/virtualization/forms/bulk_import.py:181 msgid "Assigned VRF" msgstr "割当 VRF" -#: netbox/dcim/forms/bulk_import.py:920 +#: netbox/dcim/forms/bulk_import.py:928 msgid "Rf role" msgstr "RF ロール" -#: netbox/dcim/forms/bulk_import.py:923 +#: netbox/dcim/forms/bulk_import.py:931 msgid "Wireless role (AP/station)" msgstr "無線ロール (AP/ステーション)" -#: netbox/dcim/forms/bulk_import.py:959 +#: netbox/dcim/forms/bulk_import.py:967 #, python-brace-format msgid "VDC {vdc} is not assigned to device {device}" msgstr "VDC {vdc} デバイスには割り当てられていません {device}" -#: netbox/dcim/forms/bulk_import.py:973 netbox/dcim/forms/model_forms.py:1007 -#: netbox/dcim/forms/model_forms.py:1582 +#: netbox/dcim/forms/bulk_import.py:981 netbox/dcim/forms/model_forms.py:1020 +#: netbox/dcim/forms/model_forms.py:1624 #: netbox/dcim/forms/object_import.py:117 msgid "Rear port" msgstr "背面ポート" -#: netbox/dcim/forms/bulk_import.py:976 +#: netbox/dcim/forms/bulk_import.py:984 msgid "Corresponding rear port" msgstr "対応する背面ポート" -#: netbox/dcim/forms/bulk_import.py:981 netbox/dcim/forms/bulk_import.py:1022 -#: netbox/dcim/forms/bulk_import.py:1238 +#: netbox/dcim/forms/bulk_import.py:989 netbox/dcim/forms/bulk_import.py:1030 +#: netbox/dcim/forms/bulk_import.py:1335 msgid "Physical medium classification" msgstr "物理媒体の分類" -#: netbox/dcim/forms/bulk_import.py:1050 netbox/dcim/tables/devices.py:822 +#: netbox/dcim/forms/bulk_import.py:1058 netbox/dcim/tables/devices.py:854 msgid "Installed device" msgstr "取付済みデバイス" -#: netbox/dcim/forms/bulk_import.py:1054 +#: netbox/dcim/forms/bulk_import.py:1062 msgid "Child device installed within this bay" msgstr "このベイ内に取付された子デバイス" -#: netbox/dcim/forms/bulk_import.py:1056 +#: netbox/dcim/forms/bulk_import.py:1064 msgid "Child device not found." msgstr "子デバイスが見つかりません。" -#: netbox/dcim/forms/bulk_import.py:1114 +#: netbox/dcim/forms/bulk_import.py:1122 msgid "Parent inventory item" msgstr "親在庫品目" -#: netbox/dcim/forms/bulk_import.py:1117 +#: netbox/dcim/forms/bulk_import.py:1125 msgid "Component type" msgstr "構成要素タイプ" -#: netbox/dcim/forms/bulk_import.py:1121 +#: netbox/dcim/forms/bulk_import.py:1129 msgid "Component Type" msgstr "構成要素タイプ" -#: netbox/dcim/forms/bulk_import.py:1124 +#: netbox/dcim/forms/bulk_import.py:1132 msgid "Compnent name" msgstr "コンポーネント名" -#: netbox/dcim/forms/bulk_import.py:1126 +#: netbox/dcim/forms/bulk_import.py:1134 msgid "Component Name" msgstr "構成要素名" -#: netbox/dcim/forms/bulk_import.py:1168 +#: netbox/dcim/forms/bulk_import.py:1181 #, python-brace-format msgid "Component not found: {device} - {component_name}" msgstr "コンポーネントが見つかりません: {device} - {component_name}" -#: netbox/dcim/forms/bulk_import.py:1193 +#: netbox/dcim/forms/bulk_import.py:1209 netbox/ipam/forms/bulk_import.py:307 +msgid "Parent device of assigned interface (if any)" +msgstr "割当インタフェースの親デバイス (存在する場合)" + +#: netbox/dcim/forms/bulk_import.py:1212 netbox/ipam/forms/bulk_import.py:310 +#: netbox/ipam/forms/bulk_import.py:547 netbox/ipam/forms/model_forms.py:768 +#: netbox/virtualization/filtersets.py:254 +#: netbox/virtualization/filtersets.py:305 +#: netbox/virtualization/forms/bulk_edit.py:182 +#: netbox/virtualization/forms/bulk_edit.py:316 +#: netbox/virtualization/forms/bulk_import.py:152 +#: netbox/virtualization/forms/bulk_import.py:213 +#: netbox/virtualization/forms/filtersets.py:217 +#: netbox/virtualization/forms/filtersets.py:253 +#: netbox/virtualization/forms/model_forms.py:295 +#: netbox/vpn/forms/bulk_import.py:93 netbox/vpn/forms/bulk_import.py:290 +msgid "Virtual machine" +msgstr "仮想マシン" + +#: netbox/dcim/forms/bulk_import.py:1216 netbox/ipam/forms/bulk_import.py:314 +msgid "Parent VM of assigned interface (if any)" +msgstr "割当インタフェースの親VM (存在する場合)" + +#: netbox/dcim/forms/bulk_import.py:1223 netbox/ipam/filtersets.py:1021 +#: netbox/ipam/forms/bulk_import.py:321 +msgid "Assigned interface" +msgstr "割当インタフェース" + +#: netbox/dcim/forms/bulk_import.py:1226 netbox/ipam/forms/bulk_import.py:324 +msgid "Is primary" +msgstr "プライマリ" + +#: netbox/dcim/forms/bulk_import.py:1227 +msgid "Make this the primary MAC address for the assigned interface" +msgstr "これを割り当てられたインターフェースのプライマリ MAC アドレスにします。" + +#: netbox/dcim/forms/bulk_import.py:1264 +msgid "Must specify the parent device or VM when assigning an interface" +msgstr "インターフェイスを割り当てるときは、親デバイスまたは VM を指定する必要があります" + +#: netbox/dcim/forms/bulk_import.py:1290 msgid "Side A device" msgstr "サイド A デバイス" -#: netbox/dcim/forms/bulk_import.py:1196 netbox/dcim/forms/bulk_import.py:1214 +#: netbox/dcim/forms/bulk_import.py:1293 netbox/dcim/forms/bulk_import.py:1311 msgid "Device name" msgstr "デバイス名" -#: netbox/dcim/forms/bulk_import.py:1199 +#: netbox/dcim/forms/bulk_import.py:1296 msgid "Side A type" msgstr "サイド A タイプ" -#: netbox/dcim/forms/bulk_import.py:1202 netbox/dcim/forms/bulk_import.py:1220 -msgid "Termination type" -msgstr "終了タイプ" - -#: netbox/dcim/forms/bulk_import.py:1205 +#: netbox/dcim/forms/bulk_import.py:1302 msgid "Side A name" msgstr "サイド A 名" -#: netbox/dcim/forms/bulk_import.py:1206 netbox/dcim/forms/bulk_import.py:1224 +#: netbox/dcim/forms/bulk_import.py:1303 netbox/dcim/forms/bulk_import.py:1321 msgid "Termination name" msgstr "終端名" -#: netbox/dcim/forms/bulk_import.py:1211 +#: netbox/dcim/forms/bulk_import.py:1308 msgid "Side B device" msgstr "サイド B デバイス" -#: netbox/dcim/forms/bulk_import.py:1217 +#: netbox/dcim/forms/bulk_import.py:1314 msgid "Side B type" msgstr "サイド B タイプ" -#: netbox/dcim/forms/bulk_import.py:1223 +#: netbox/dcim/forms/bulk_import.py:1320 msgid "Side B name" msgstr "サイド B 名" -#: netbox/dcim/forms/bulk_import.py:1232 -#: netbox/wireless/forms/bulk_import.py:86 +#: netbox/dcim/forms/bulk_import.py:1329 +#: netbox/wireless/forms/bulk_import.py:91 msgid "Connection status" msgstr "接続ステータス" -#: netbox/dcim/forms/bulk_import.py:1284 +#: netbox/dcim/forms/bulk_import.py:1381 #, 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:1290 +#: netbox/dcim/forms/bulk_import.py:1387 #, python-brace-format msgid "{side_upper} side termination not found: {device} {name}" msgstr "{side_upper} サイドターミネーションが見つかりません: {device} {name}" -#: netbox/dcim/forms/bulk_import.py:1315 netbox/dcim/forms/model_forms.py:785 -#: netbox/dcim/tables/devices.py:1027 netbox/templates/dcim/device.html:132 +#: netbox/dcim/forms/bulk_import.py:1412 netbox/dcim/forms/model_forms.py:797 +#: netbox/dcim/tables/devices.py:1059 netbox/templates/dcim/device.html:132 #: netbox/templates/dcim/virtualchassis.html:27 #: netbox/templates/dcim/virtualchassis.html:67 msgid "Master" msgstr "マスター" -#: netbox/dcim/forms/bulk_import.py:1319 +#: netbox/dcim/forms/bulk_import.py:1416 msgid "Master device" msgstr "マスターデバイス" -#: netbox/dcim/forms/bulk_import.py:1336 +#: netbox/dcim/forms/bulk_import.py:1433 msgid "Name of parent site" msgstr "親サイトの名前" -#: netbox/dcim/forms/bulk_import.py:1370 +#: netbox/dcim/forms/bulk_import.py:1467 msgid "Upstream power panel" msgstr "上流電源盤" -#: netbox/dcim/forms/bulk_import.py:1400 +#: netbox/dcim/forms/bulk_import.py:1497 msgid "Primary or redundant" msgstr "プライマリまたは冗長" -#: netbox/dcim/forms/bulk_import.py:1405 +#: netbox/dcim/forms/bulk_import.py:1502 msgid "Supply type (AC/DC)" msgstr "電源タイプ (AC/DC)" -#: netbox/dcim/forms/bulk_import.py:1410 +#: netbox/dcim/forms/bulk_import.py:1507 msgid "Single or three-phase" msgstr "単相または三相" -#: netbox/dcim/forms/bulk_import.py:1461 netbox/dcim/forms/model_forms.py:1677 +#: netbox/dcim/forms/bulk_import.py:1558 netbox/dcim/forms/model_forms.py:1722 #: netbox/templates/dcim/device.html:190 #: netbox/templates/dcim/virtualdevicecontext.html:30 #: netbox/templates/virtualization/virtualmachine.html:52 msgid "Primary IPv4" msgstr "プライマリ IPv4" -#: netbox/dcim/forms/bulk_import.py:1465 +#: netbox/dcim/forms/bulk_import.py:1562 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:1468 netbox/dcim/forms/model_forms.py:1686 +#: netbox/dcim/forms/bulk_import.py:1565 netbox/dcim/forms/model_forms.py:1731 #: netbox/templates/dcim/device.html:206 #: netbox/templates/dcim/virtualdevicecontext.html:41 #: netbox/templates/virtualization/virtualmachine.html:68 msgid "Primary IPv6" msgstr "プライマリ IPv6" -#: netbox/dcim/forms/bulk_import.py:1472 +#: netbox/dcim/forms/bulk_import.py:1569 msgid "IPv6 address with prefix length, e.g. 2001:db8::1/64" msgstr "プレフィックス長のある IPv6 アドレス、例:2001: db8:: 1/64" -#: netbox/dcim/forms/common.py:24 netbox/dcim/models/device_components.py:527 +#: netbox/dcim/forms/common.py:19 netbox/dcim/models/device_components.py:515 #: netbox/templates/dcim/interface.html:57 -#: netbox/templates/virtualization/vminterface.html:55 -#: netbox/virtualization/forms/bulk_edit.py:225 +#: netbox/templates/virtualization/vminterface.html:51 +#: netbox/virtualization/forms/bulk_edit.py:207 msgid "MTU" msgstr "MTU" -#: netbox/dcim/forms/common.py:65 +#: netbox/dcim/forms/common.py:60 #, python-brace-format msgid "" "The tagged VLANs ({vlans}) must belong to the same site as the interface's " "parent device/VM, or they must be global" msgstr "タグ付き VLAN ({vlans}) はインタフェースの親デバイス/VMと同サイトに属しているか、グローバルである必要があります" -#: netbox/dcim/forms/common.py:126 +#: netbox/dcim/forms/common.py:121 msgid "" "Cannot install module with placeholder values in a module bay with no " "position defined." msgstr "位置が定義されていないモジュールベイには、プレースホルダー値のあるモジュールを挿入できません。" -#: netbox/dcim/forms/common.py:131 +#: netbox/dcim/forms/common.py:127 #, python-brace-format msgid "" "Cannot install module with placeholder values in a module bay tree {level} " @@ -4635,17 +5066,17 @@ msgstr "" "モジュールベイツリーの{level}レベルにはプレースホルダ値のあるモジュールをインストールできませんが、 " "{tokens}個のプレースホルダが与えられています。" -#: netbox/dcim/forms/common.py:144 +#: netbox/dcim/forms/common.py:142 #, python-brace-format msgid "Cannot adopt {model} {name} as it already belongs to a module" msgstr " {model} {name} は既にモジュールに属しているので採用できません" -#: netbox/dcim/forms/common.py:153 +#: netbox/dcim/forms/common.py:151 #, python-brace-format msgid "A {model} named {name} already exists" msgstr "{model} {name} は既に存在しています" -#: netbox/dcim/forms/connections.py:49 netbox/dcim/forms/model_forms.py:738 +#: netbox/dcim/forms/connections.py:49 netbox/dcim/forms/model_forms.py:749 #: netbox/dcim/tables/power.py:66 #: netbox/templates/dcim/inc/cable_termination.html:37 #: netbox/templates/dcim/powerfeed.html:24 @@ -4654,137 +5085,135 @@ msgstr "{model} {name} は既に存在しています" msgid "Power Panel" msgstr "電源盤" -#: netbox/dcim/forms/connections.py:58 netbox/dcim/forms/model_forms.py:765 +#: netbox/dcim/forms/connections.py:58 netbox/dcim/forms/model_forms.py:777 #: netbox/templates/dcim/powerfeed.html:21 #: netbox/templates/dcim/powerport.html:80 msgid "Power Feed" msgstr "電源タップ" -#: netbox/dcim/forms/connections.py:81 -msgid "Side" -msgstr "サイド" - -#: netbox/dcim/forms/filtersets.py:136 netbox/dcim/tables/devices.py:295 +#: netbox/dcim/forms/filtersets.py:137 netbox/dcim/tables/devices.py:305 msgid "Device Status" msgstr "デバイスステータス" -#: netbox/dcim/forms/filtersets.py:149 +#: netbox/dcim/forms/filtersets.py:150 msgid "Parent region" msgstr "親リージョン" -#: netbox/dcim/forms/filtersets.py:163 netbox/tenancy/forms/bulk_import.py:28 +#: netbox/dcim/forms/filtersets.py:164 netbox/tenancy/forms/bulk_import.py:28 #: netbox/tenancy/forms/bulk_import.py:62 #: netbox/tenancy/forms/filtersets.py:33 netbox/tenancy/forms/filtersets.py:62 -#: netbox/wireless/forms/bulk_import.py:25 -#: netbox/wireless/forms/filtersets.py:25 +#: netbox/wireless/forms/bulk_import.py:27 +#: netbox/wireless/forms/filtersets.py:27 msgid "Parent group" msgstr "親グループ" -#: netbox/dcim/forms/filtersets.py:242 netbox/templates/dcim/location.html:58 +#: netbox/dcim/forms/filtersets.py:243 netbox/templates/dcim/location.html:58 #: netbox/templates/dcim/site.html:56 msgid "Facility" msgstr "ファシリティ" -#: netbox/dcim/forms/filtersets.py:397 +#: netbox/dcim/forms/filtersets.py:398 msgid "Function" msgstr "機能" -#: netbox/dcim/forms/filtersets.py:483 netbox/dcim/forms/model_forms.py:373 +#: netbox/dcim/forms/filtersets.py:484 netbox/dcim/forms/model_forms.py:382 #: netbox/templates/inc/panels/image_attachments.html:6 msgid "Images" msgstr "画像" -#: netbox/dcim/forms/filtersets.py:486 netbox/dcim/forms/filtersets.py:611 -#: netbox/dcim/forms/filtersets.py:726 +#: netbox/dcim/forms/filtersets.py:487 netbox/dcim/forms/filtersets.py:612 +#: netbox/dcim/forms/filtersets.py:727 msgid "Components" msgstr "構成要素" -#: netbox/dcim/forms/filtersets.py:506 +#: netbox/dcim/forms/filtersets.py:507 msgid "Subdevice role" msgstr "サブデバイスロール" -#: netbox/dcim/forms/filtersets.py:790 netbox/dcim/tables/racks.py:54 +#: netbox/dcim/forms/filtersets.py:791 netbox/dcim/tables/racks.py:54 #: netbox/templates/dcim/racktype.html:20 msgid "Model" msgstr "モデル" -#: netbox/dcim/forms/filtersets.py:834 +#: netbox/dcim/forms/filtersets.py:835 msgid "Has an OOB IP" msgstr "OOB IP アドレスを持っている" -#: netbox/dcim/forms/filtersets.py:841 +#: netbox/dcim/forms/filtersets.py:842 msgid "Virtual chassis member" msgstr "バーチャルシャーシメンバー" -#: netbox/dcim/forms/filtersets.py:890 +#: netbox/dcim/forms/filtersets.py:891 msgid "Has virtual device contexts" msgstr "仮想デバイスコンテキストがある" -#: netbox/dcim/forms/filtersets.py:903 netbox/extras/filtersets.py:585 -#: netbox/ipam/forms/filtersets.py:452 -#: netbox/virtualization/forms/filtersets.py:112 +#: netbox/dcim/forms/filtersets.py:904 netbox/extras/filtersets.py:585 +#: netbox/ipam/forms/filtersets.py:455 +#: netbox/virtualization/forms/filtersets.py:117 msgid "Cluster group" msgstr "クラスタグループ" -#: netbox/dcim/forms/filtersets.py:1210 +#: netbox/dcim/forms/filtersets.py:1211 msgid "Cabled" msgstr "配線済" -#: netbox/dcim/forms/filtersets.py:1217 +#: netbox/dcim/forms/filtersets.py:1218 msgid "Occupied" msgstr "専有済" -#: netbox/dcim/forms/filtersets.py:1244 netbox/dcim/forms/filtersets.py:1269 -#: netbox/dcim/forms/filtersets.py:1293 netbox/dcim/forms/filtersets.py:1313 -#: netbox/dcim/forms/filtersets.py:1336 netbox/dcim/tables/devices.py:364 +#: netbox/dcim/forms/filtersets.py:1245 netbox/dcim/forms/filtersets.py:1270 +#: netbox/dcim/forms/filtersets.py:1294 netbox/dcim/forms/filtersets.py:1314 +#: netbox/dcim/forms/filtersets.py:1341 netbox/dcim/tables/devices.py:374 +#: netbox/dcim/tables/devices.py:663 +#: netbox/templates/circuits/inc/circuit_termination_fields.html:16 #: netbox/templates/dcim/consoleport.html:55 #: netbox/templates/dcim/consoleserverport.html:55 #: netbox/templates/dcim/frontport.html:69 -#: netbox/templates/dcim/interface.html:140 +#: netbox/templates/dcim/interface.html:197 #: netbox/templates/dcim/powerfeed.html:110 -#: netbox/templates/dcim/poweroutlet.html:59 +#: netbox/templates/dcim/poweroutlet.html:69 #: netbox/templates/dcim/powerport.html:59 #: netbox/templates/dcim/rearport.html:65 msgid "Connection" msgstr "接続" -#: netbox/dcim/forms/filtersets.py:1348 netbox/extras/forms/bulk_edit.py:326 +#: netbox/dcim/forms/filtersets.py:1353 netbox/extras/forms/bulk_edit.py:326 #: netbox/extras/forms/bulk_import.py:247 -#: netbox/extras/forms/filtersets.py:464 -#: netbox/extras/forms/model_forms.py:675 netbox/extras/tables/tables.py:579 +#: netbox/extras/forms/filtersets.py:472 +#: netbox/extras/forms/model_forms.py:689 netbox/extras/tables/tables.py:579 #: netbox/templates/extras/journalentry.html:30 msgid "Kind" msgstr "種類" -#: netbox/dcim/forms/filtersets.py:1377 +#: netbox/dcim/forms/filtersets.py:1382 msgid "Mgmt only" msgstr "管理のみ" -#: netbox/dcim/forms/filtersets.py:1389 netbox/dcim/forms/model_forms.py:1390 -#: netbox/dcim/models/device_components.py:629 -#: netbox/templates/dcim/interface.html:129 +#: netbox/dcim/forms/filtersets.py:1394 netbox/dcim/forms/model_forms.py:1423 +#: netbox/dcim/models/device_components.py:677 +#: netbox/templates/dcim/interface.html:142 msgid "WWN" msgstr "WWN" -#: netbox/dcim/forms/filtersets.py:1409 +#: netbox/dcim/forms/filtersets.py:1414 msgid "Wireless channel" msgstr "無線チャネル" -#: netbox/dcim/forms/filtersets.py:1413 +#: netbox/dcim/forms/filtersets.py:1418 msgid "Channel frequency (MHz)" msgstr "チャネル周波数 (MHz)" -#: netbox/dcim/forms/filtersets.py:1417 +#: netbox/dcim/forms/filtersets.py:1422 msgid "Channel width (MHz)" msgstr "チャネル幅 (MHz)" -#: netbox/dcim/forms/filtersets.py:1421 -#: netbox/templates/dcim/interface.html:85 +#: netbox/dcim/forms/filtersets.py:1426 +#: netbox/templates/dcim/interface.html:91 msgid "Transmit power (dBm)" msgstr "送信出力 (dBm)" -#: netbox/dcim/forms/filtersets.py:1446 netbox/dcim/forms/filtersets.py:1471 -#: netbox/dcim/tables/devices.py:327 netbox/templates/dcim/cable.html:12 +#: netbox/dcim/forms/filtersets.py:1451 netbox/dcim/forms/filtersets.py:1476 +#: netbox/dcim/tables/devices.py:337 netbox/templates/dcim/cable.html:12 #: netbox/templates/dcim/cable_trace.html:46 #: netbox/templates/dcim/frontport.html:77 #: netbox/templates/dcim/htmx/cable_edit.html:50 @@ -4794,73 +5223,110 @@ msgstr "送信出力 (dBm)" msgid "Cable" msgstr "ケーブル" -#: netbox/dcim/forms/filtersets.py:1550 netbox/dcim/tables/devices.py:949 +#: netbox/dcim/forms/filtersets.py:1555 netbox/dcim/tables/devices.py:979 msgid "Discovered" msgstr "自動検出" +#: netbox/dcim/forms/filtersets.py:1596 netbox/ipam/forms/filtersets.py:350 +msgid "Assigned Device" +msgstr "割当デバイス" + +#: netbox/dcim/forms/filtersets.py:1601 netbox/ipam/forms/filtersets.py:355 +msgid "Assigned VM" +msgstr "割当VM" + #: netbox/dcim/forms/formsets.py:20 #, python-brace-format msgid "A virtual chassis member already exists in position {vc_position}." msgstr "バーチャルシャーシメンバーはすでに{vc_position}に存在します 。" -#: netbox/dcim/forms/model_forms.py:140 +#: netbox/dcim/forms/mixins.py:27 netbox/dcim/forms/mixins.py:75 +#: netbox/ipam/forms/bulk_edit.py:420 netbox/ipam/forms/model_forms.py:618 +msgid "Scope type" +msgstr "スコープタイプ" + +#: netbox/dcim/forms/mixins.py:30 netbox/dcim/forms/mixins.py:78 +#: netbox/ipam/forms/bulk_edit.py:270 netbox/ipam/forms/bulk_edit.py:423 +#: netbox/ipam/forms/bulk_edit.py:437 netbox/ipam/forms/filtersets.py:175 +#: netbox/ipam/forms/model_forms.py:231 netbox/ipam/forms/model_forms.py:621 +#: netbox/ipam/forms/model_forms.py:631 netbox/ipam/tables/ip.py:194 +#: netbox/ipam/tables/vlans.py:40 netbox/templates/ipam/prefix.html:48 +#: netbox/templates/ipam/vlangroup.html:38 +#: netbox/templates/virtualization/cluster.html:42 +#: netbox/templates/wireless/wirelesslan.html:26 +#: netbox/virtualization/forms/bulk_edit.py:91 +#: netbox/virtualization/forms/filtersets.py:46 +#: netbox/virtualization/forms/model_forms.py:79 +#: netbox/virtualization/tables/clusters.py:80 +#: netbox/wireless/forms/bulk_edit.py:93 +#: netbox/wireless/forms/filtersets.py:37 +#: netbox/wireless/forms/model_forms.py:56 +#: netbox/wireless/tables/wirelesslan.py:58 +msgid "Scope" +msgstr "スコープ" + +#: netbox/dcim/forms/mixins.py:104 netbox/ipam/forms/bulk_import.py:436 +msgid "Scope type (app & model)" +msgstr "スコープの種類 (アプリとモデル)" + +#: netbox/dcim/forms/model_forms.py:144 msgid "Contact Info" msgstr "連絡先情報" -#: netbox/dcim/forms/model_forms.py:195 netbox/templates/dcim/rackrole.html:19 +#: netbox/dcim/forms/model_forms.py:199 netbox/templates/dcim/rackrole.html:19 msgid "Rack Role" msgstr "ラックロール" -#: netbox/dcim/forms/model_forms.py:212 netbox/dcim/forms/model_forms.py:362 -#: netbox/dcim/forms/model_forms.py:446 +#: netbox/dcim/forms/model_forms.py:217 netbox/dcim/forms/model_forms.py:371 +#: netbox/dcim/forms/model_forms.py:456 #: netbox/utilities/forms/fields/fields.py:47 msgid "Slug" msgstr "Slug" -#: netbox/dcim/forms/model_forms.py:259 +#: netbox/dcim/forms/model_forms.py:264 msgid "Select a pre-defined rack type, or set physical characteristics below." msgstr "定義済みのラックタイプを選択するか、以下で物理特性を設定してください。" -#: netbox/dcim/forms/model_forms.py:265 +#: netbox/dcim/forms/model_forms.py:273 msgid "Inventory Control" msgstr "在庫管理" -#: netbox/dcim/forms/model_forms.py:313 +#: netbox/dcim/forms/model_forms.py:321 msgid "" "Comma-separated list of numeric unit IDs. A range may be specified using a " "hyphen." msgstr "カンマ区切りのユニット ID 。範囲はハイフンを使用して指定できます。" -#: netbox/dcim/forms/model_forms.py:322 netbox/dcim/tables/racks.py:202 +#: netbox/dcim/forms/model_forms.py:330 netbox/dcim/tables/racks.py:201 msgid "Reservation" msgstr "予約" -#: netbox/dcim/forms/model_forms.py:423 +#: netbox/dcim/forms/model_forms.py:432 #: netbox/templates/dcim/devicerole.html:23 msgid "Device Role" msgstr "デバイスロール" -#: netbox/dcim/forms/model_forms.py:490 netbox/dcim/models/devices.py:644 +#: netbox/dcim/forms/model_forms.py:500 netbox/dcim/models/devices.py:635 msgid "The lowest-numbered unit occupied by the device" msgstr "デバイスが使用している最も小さいユニット番号" -#: netbox/dcim/forms/model_forms.py:547 +#: netbox/dcim/forms/model_forms.py:558 msgid "The position in the virtual chassis this device is identified by" msgstr "仮想シャーシ内の位置" -#: netbox/dcim/forms/model_forms.py:552 +#: netbox/dcim/forms/model_forms.py:563 msgid "The priority of the device in the virtual chassis" msgstr "仮想シャーシ内の優先度" -#: netbox/dcim/forms/model_forms.py:659 +#: netbox/dcim/forms/model_forms.py:670 msgid "Automatically populate components associated with this module type" msgstr "このモジュールタイプに関連する構成要素を自動的に入力する" -#: netbox/dcim/forms/model_forms.py:767 +#: netbox/dcim/forms/model_forms.py:779 msgid "Characteristics" msgstr "特性" -#: netbox/dcim/forms/model_forms.py:914 +#: netbox/dcim/forms/model_forms.py:926 #, python-brace-format msgid "" "Alphanumeric ranges are supported for bulk creation. Mixed cases and types " @@ -4873,60 +5339,35 @@ msgstr "" "1[ge,xe]-0/0/[0-9]1)。トークン " "{module}が存在する場合、新しいモジュールを作成する際に、自動的に位置の値に置き換えられます。" -#: netbox/dcim/forms/model_forms.py:1094 +#: netbox/dcim/forms/model_forms.py:1107 msgid "Console port template" msgstr "コンソールポートテンプレート" -#: netbox/dcim/forms/model_forms.py:1102 +#: netbox/dcim/forms/model_forms.py:1115 msgid "Console server port template" msgstr "コンソールサーバポートテンプレート" -#: netbox/dcim/forms/model_forms.py:1110 +#: netbox/dcim/forms/model_forms.py:1123 msgid "Front port template" msgstr "全面ポートテンプレート" -#: netbox/dcim/forms/model_forms.py:1118 +#: netbox/dcim/forms/model_forms.py:1131 msgid "Interface template" msgstr "インタフェーステンプレート" -#: netbox/dcim/forms/model_forms.py:1126 +#: netbox/dcim/forms/model_forms.py:1139 msgid "Power outlet template" msgstr "電源コンセントテンプレート" -#: netbox/dcim/forms/model_forms.py:1134 +#: netbox/dcim/forms/model_forms.py:1147 msgid "Power port template" msgstr "電源ポートテンプレート" -#: netbox/dcim/forms/model_forms.py:1142 +#: netbox/dcim/forms/model_forms.py:1155 msgid "Rear port template" msgstr "背面ポートテンプレート" -#: netbox/dcim/forms/model_forms.py:1151 netbox/dcim/forms/model_forms.py:1395 -#: netbox/dcim/forms/model_forms.py:1558 netbox/dcim/forms/model_forms.py:1590 -#: netbox/dcim/tables/connections.py:65 netbox/ipam/forms/bulk_import.py:318 -#: netbox/ipam/forms/model_forms.py:280 netbox/ipam/forms/model_forms.py:289 -#: netbox/ipam/tables/fhrp.py:64 netbox/ipam/tables/ip.py:372 -#: netbox/ipam/tables/vlans.py:169 -#: netbox/templates/circuits/inc/circuit_termination_fields.html:51 -#: netbox/templates/dcim/frontport.html:106 -#: netbox/templates/dcim/interface.html:27 -#: netbox/templates/dcim/interface.html:184 -#: netbox/templates/dcim/interface.html:310 -#: netbox/templates/dcim/rearport.html:102 -#: netbox/templates/virtualization/vminterface.html:18 -#: netbox/templates/vpn/tunneltermination.html:31 -#: netbox/templates/wireless/inc/wirelesslink_interface.html:10 -#: netbox/templates/wireless/wirelesslink.html:10 -#: netbox/templates/wireless/wirelesslink.html:55 -#: netbox/virtualization/forms/model_forms.py:348 -#: netbox/vpn/forms/bulk_import.py:297 netbox/vpn/forms/model_forms.py:436 -#: netbox/vpn/forms/model_forms.py:445 -#: netbox/wireless/forms/model_forms.py:113 -#: netbox/wireless/forms/model_forms.py:155 -msgid "Interface" -msgstr "インタフェース" - -#: netbox/dcim/forms/model_forms.py:1152 netbox/dcim/forms/model_forms.py:1591 +#: netbox/dcim/forms/model_forms.py:1165 netbox/dcim/forms/model_forms.py:1636 #: netbox/dcim/tables/connections.py:27 #: netbox/templates/dcim/consoleport.html:17 #: netbox/templates/dcim/consoleserverport.html:74 @@ -4934,102 +5375,128 @@ msgstr "インタフェース" msgid "Console Port" msgstr "コンソールポート" -#: netbox/dcim/forms/model_forms.py:1153 netbox/dcim/forms/model_forms.py:1592 +#: netbox/dcim/forms/model_forms.py:1166 netbox/dcim/forms/model_forms.py:1637 #: netbox/templates/dcim/consoleport.html:73 #: netbox/templates/dcim/consoleserverport.html:17 #: netbox/templates/dcim/frontport.html:109 msgid "Console Server Port" msgstr "コンソールサーバポート" -#: netbox/dcim/forms/model_forms.py:1154 netbox/dcim/forms/model_forms.py:1593 -#: netbox/templates/circuits/inc/circuit_termination_fields.html:52 +#: netbox/dcim/forms/model_forms.py:1167 netbox/dcim/forms/model_forms.py:1638 +#: netbox/templates/circuits/inc/circuit_termination_fields.html:53 #: netbox/templates/dcim/consoleport.html:76 #: netbox/templates/dcim/consoleserverport.html:77 #: netbox/templates/dcim/frontport.html:17 #: netbox/templates/dcim/frontport.html:115 -#: netbox/templates/dcim/interface.html:187 +#: netbox/templates/dcim/interface.html:244 #: netbox/templates/dcim/rearport.html:105 msgid "Front Port" msgstr "前面ポート" -#: netbox/dcim/forms/model_forms.py:1155 netbox/dcim/forms/model_forms.py:1594 -#: netbox/dcim/tables/devices.py:710 -#: netbox/templates/circuits/inc/circuit_termination_fields.html:53 +#: netbox/dcim/forms/model_forms.py:1168 netbox/dcim/forms/model_forms.py:1639 +#: netbox/dcim/tables/devices.py:744 +#: netbox/templates/circuits/inc/circuit_termination_fields.html:54 #: netbox/templates/dcim/consoleport.html:79 #: netbox/templates/dcim/consoleserverport.html:80 #: netbox/templates/dcim/frontport.html:50 #: netbox/templates/dcim/frontport.html:118 -#: netbox/templates/dcim/interface.html:190 +#: netbox/templates/dcim/interface.html:247 #: netbox/templates/dcim/rearport.html:17 #: netbox/templates/dcim/rearport.html:108 msgid "Rear Port" msgstr "背面ポート" -#: netbox/dcim/forms/model_forms.py:1156 netbox/dcim/forms/model_forms.py:1595 -#: netbox/dcim/tables/connections.py:46 netbox/dcim/tables/devices.py:512 -#: netbox/templates/dcim/poweroutlet.html:44 +#: netbox/dcim/forms/model_forms.py:1169 netbox/dcim/forms/model_forms.py:1640 +#: netbox/dcim/tables/connections.py:46 netbox/dcim/tables/devices.py:521 +#: netbox/templates/dcim/poweroutlet.html:54 #: netbox/templates/dcim/powerport.html:17 msgid "Power Port" msgstr "電源ポート" -#: netbox/dcim/forms/model_forms.py:1157 netbox/dcim/forms/model_forms.py:1596 +#: netbox/dcim/forms/model_forms.py:1170 netbox/dcim/forms/model_forms.py:1641 #: netbox/templates/dcim/poweroutlet.html:17 #: netbox/templates/dcim/powerport.html:77 msgid "Power Outlet" msgstr "電源コンセント" -#: netbox/dcim/forms/model_forms.py:1159 netbox/dcim/forms/model_forms.py:1598 +#: netbox/dcim/forms/model_forms.py:1172 netbox/dcim/forms/model_forms.py:1643 msgid "Component Assignment" msgstr "構成要素割り当て" -#: netbox/dcim/forms/model_forms.py:1202 netbox/dcim/forms/model_forms.py:1645 +#: netbox/dcim/forms/model_forms.py:1218 netbox/dcim/forms/model_forms.py:1690 msgid "An InventoryItem can only be assigned to a single component." msgstr "在庫品目は1つの構成要素にのみ割り当てることができます。" -#: netbox/dcim/forms/model_forms.py:1339 +#: netbox/dcim/forms/model_forms.py:1355 msgid "LAG interface" msgstr "LAG インタフェース" -#: netbox/dcim/forms/model_forms.py:1362 +#: netbox/dcim/forms/model_forms.py:1378 msgid "Filter VLANs available for assignment by group." msgstr "割り当て可能な VLAN をグループ別にフィルタリングします。" -#: netbox/dcim/forms/model_forms.py:1491 +#: netbox/dcim/forms/model_forms.py:1533 msgid "Child Device" msgstr "子デバイス" -#: netbox/dcim/forms/model_forms.py:1492 +#: netbox/dcim/forms/model_forms.py:1534 msgid "" "Child devices must first be created and assigned to the site and rack of the" " parent device." msgstr "まず子デバイスを作成し、親デバイスのサイトとラックに割り当てる必要があります。" -#: netbox/dcim/forms/model_forms.py:1534 +#: netbox/dcim/forms/model_forms.py:1576 msgid "Console port" msgstr "コンソールポート" -#: netbox/dcim/forms/model_forms.py:1542 +#: netbox/dcim/forms/model_forms.py:1584 msgid "Console server port" msgstr "コンソールサーバポート" -#: netbox/dcim/forms/model_forms.py:1550 +#: netbox/dcim/forms/model_forms.py:1592 msgid "Front port" msgstr "前面ポート" -#: netbox/dcim/forms/model_forms.py:1566 +#: netbox/dcim/forms/model_forms.py:1608 msgid "Power outlet" msgstr "電源コンセント" -#: netbox/dcim/forms/model_forms.py:1586 +#: netbox/dcim/forms/model_forms.py:1630 #: netbox/templates/dcim/inventoryitem.html:17 msgid "Inventory Item" msgstr "在庫品目" -#: netbox/dcim/forms/model_forms.py:1659 +#: netbox/dcim/forms/model_forms.py:1704 #: netbox/templates/dcim/inventoryitemrole.html:15 msgid "Inventory Item Role" msgstr "在庫品目ロール" +#: netbox/dcim/forms/model_forms.py:1773 +msgid "VM Interface" +msgstr "VM インターフェイス" + +#: netbox/dcim/forms/model_forms.py:1788 netbox/ipam/forms/filtersets.py:608 +#: netbox/ipam/forms/model_forms.py:334 netbox/ipam/forms/model_forms.py:796 +#: netbox/ipam/forms/model_forms.py:822 netbox/ipam/tables/vlans.py:171 +#: netbox/templates/virtualization/virtualdisk.html:21 +#: netbox/templates/virtualization/virtualmachine.html:12 +#: netbox/templates/virtualization/vminterface.html:21 +#: netbox/templates/vpn/tunneltermination.html:25 +#: netbox/virtualization/forms/filtersets.py:202 +#: netbox/virtualization/forms/filtersets.py:247 +#: netbox/virtualization/forms/model_forms.py:227 +#: netbox/virtualization/tables/virtualmachines.py:105 +#: netbox/virtualization/tables/virtualmachines.py:161 +#: netbox/vpn/choices.py:53 netbox/vpn/forms/filtersets.py:293 +#: netbox/vpn/forms/model_forms.py:161 netbox/vpn/forms/model_forms.py:172 +#: netbox/vpn/forms/model_forms.py:274 netbox/vpn/forms/model_forms.py:457 +msgid "Virtual Machine" +msgstr "仮想マシン" + +#: netbox/dcim/forms/model_forms.py:1827 +msgid "A MAC address can only be assigned to a single object." +msgstr "MAC アドレスは 1 つのオブジェクトにのみ割り当てることができます。" + #: netbox/dcim/forms/object_create.py:48 #: netbox/dcim/forms/object_create.py:199 #: netbox/dcim/forms/object_create.py:347 @@ -5046,7 +5513,7 @@ msgid "" msgstr "パターンは {value_count} 個の値を示す範囲を指定しますが、 {pattern_count} 個の値が必要です。" #: netbox/dcim/forms/object_create.py:110 -#: netbox/dcim/forms/object_create.py:263 netbox/dcim/tables/devices.py:252 +#: netbox/dcim/forms/object_create.py:263 netbox/dcim/tables/devices.py:263 msgid "Rear ports" msgstr "背面ポート" @@ -5072,7 +5539,7 @@ msgid "" msgstr "" "前面ポートの数 ({frontport_count}) は選択した背面ポートの数 ({rearport_count}) と一致する必要があります。" -#: netbox/dcim/forms/object_create.py:401 netbox/dcim/tables/devices.py:1033 +#: netbox/dcim/forms/object_create.py:401 netbox/dcim/tables/devices.py:1065 #: netbox/ipam/tables/fhrp.py:31 netbox/templates/dcim/virtualchassis.html:53 #: netbox/templates/dcim/virtualchassis_edit.html:47 #: netbox/templates/ipam/fhrpgroup.html:38 @@ -5089,30 +5556,30 @@ msgid "" "member." msgstr "最初のメンバーのポジション。メンバーが増えるごとに 1 ずつ増えます。" -#: netbox/dcim/forms/object_create.py:427 +#: netbox/dcim/forms/object_create.py:428 msgid "A position must be specified for the first VC member." msgstr "最初の VC メンバーのポジションを指定する必要があります。" -#: netbox/dcim/models/cables.py:62 -#: netbox/dcim/models/device_component_templates.py:55 -#: netbox/dcim/models/device_components.py:62 +#: netbox/dcim/models/cables.py:64 +#: netbox/dcim/models/device_component_templates.py:51 +#: netbox/dcim/models/device_components.py:57 #: netbox/extras/models/customfields.py:111 msgid "label" msgstr "ラベル" -#: netbox/dcim/models/cables.py:71 +#: netbox/dcim/models/cables.py:73 msgid "length" msgstr "長さ" -#: netbox/dcim/models/cables.py:78 +#: netbox/dcim/models/cables.py:80 msgid "length unit" msgstr "長さの単位" -#: netbox/dcim/models/cables.py:95 +#: netbox/dcim/models/cables.py:98 msgid "cable" msgstr "ケーブル" -#: netbox/dcim/models/cables.py:96 +#: netbox/dcim/models/cables.py:99 msgid "cables" msgstr "ケーブル" @@ -5137,54 +5604,83 @@ msgstr "互換性のない終端タイプ: {type_a} そして {type_b}" msgid "A and B terminations cannot connect to the same object." msgstr "A 端子と B 端子を同じオブジェクトに接続することはできません。" -#: netbox/dcim/models/cables.py:260 netbox/ipam/models/asns.py:37 +#: netbox/dcim/models/cables.py:262 netbox/ipam/models/asns.py:37 msgid "end" msgstr "端" -#: netbox/dcim/models/cables.py:313 +#: netbox/dcim/models/cables.py:315 msgid "cable termination" msgstr "ケーブル終端" -#: netbox/dcim/models/cables.py:314 +#: netbox/dcim/models/cables.py:316 msgid "cable terminations" msgstr "ケーブル終端" -#: netbox/dcim/models/cables.py:333 +#: netbox/dcim/models/cables.py:335 #, python-brace-format msgid "" "Duplicate termination found for {app_label}.{model} {termination_id}: cable " "{cable_pk}" msgstr "の重複終了が見つかりました {app_label}。{model} {termination_id}: ケーブル {cable_pk}" -#: netbox/dcim/models/cables.py:343 +#: netbox/dcim/models/cables.py:345 #, python-brace-format msgid "Cables cannot be terminated to {type_display} interfaces" msgstr "ケーブルは終端できません {type_display} インターフェース" -#: netbox/dcim/models/cables.py:350 +#: netbox/dcim/models/cables.py:352 msgid "Circuit terminations attached to a provider network may not be cabled." msgstr "プロバイダーネットワークに接続されている回線終端はケーブル接続できない場合があります。" -#: netbox/dcim/models/cables.py:448 netbox/extras/models/configs.py:50 +#: netbox/dcim/models/cables.py:450 netbox/extras/models/configs.py:50 msgid "is active" msgstr "アクティブ" -#: netbox/dcim/models/cables.py:452 +#: netbox/dcim/models/cables.py:454 msgid "is complete" msgstr "完了" -#: netbox/dcim/models/cables.py:456 +#: netbox/dcim/models/cables.py:458 msgid "is split" msgstr "分割" -#: netbox/dcim/models/cables.py:464 +#: netbox/dcim/models/cables.py:466 msgid "cable path" msgstr "ケーブル経路" -#: netbox/dcim/models/cables.py:465 +#: netbox/dcim/models/cables.py:467 msgid "cable paths" msgstr "ケーブル経路" +#: netbox/dcim/models/cables.py:539 +msgid "All originating terminations must be attached to the same link" +msgstr "元の端子はすべて同じリンクに接続する必要があります" + +#: netbox/dcim/models/cables.py:551 +msgid "All mid-span terminations must have the same termination type" +msgstr "ミッドスパン終端はすべて同じ終端タイプでなければなりません" + +#: netbox/dcim/models/cables.py:556 +msgid "All mid-span terminations must have the same parent object" +msgstr "すべてのミッドスパン終端には同じ親オブジェクトが必要です" + +#: netbox/dcim/models/cables.py:580 +msgid "All links must be cable or wireless" +msgstr "すべてのリンクはケーブルまたはワイヤレスでなければなりません" + +#: netbox/dcim/models/cables.py:582 +msgid "All links must match first link type" +msgstr "すべてのリンクは最初のリンクタイプと一致する必要があります" + +#: netbox/dcim/models/cables.py:665 +msgid "" +"All positions counts within the path on opposite ends of links must match" +msgstr "リンクの両端のパス内の位置数はすべて一致する必要があります" + +#: netbox/dcim/models/cables.py:674 +msgid "Remote termination position filter is missing" +msgstr "リモートターミネーションポジションフィルタがありません" + #: netbox/dcim/models/device_component_templates.py:46 #, python-brace-format msgid "" @@ -5192,199 +5688,199 @@ msgid "" "attached to a module type." msgstr "{module} は、モジュールタイプに取り付けられる場合、モジュールベイ位置の代わりとして使用できます。" -#: netbox/dcim/models/device_component_templates.py:58 -#: netbox/dcim/models/device_components.py:65 +#: netbox/dcim/models/device_component_templates.py:54 +#: netbox/dcim/models/device_components.py:60 msgid "Physical label" msgstr "物理ラベル" -#: netbox/dcim/models/device_component_templates.py:103 +#: netbox/dcim/models/device_component_templates.py:99 msgid "Component templates cannot be moved to a different device type." msgstr "構成要素テンプレートを別のデバイスタイプに移動することはできません。" -#: netbox/dcim/models/device_component_templates.py:154 +#: netbox/dcim/models/device_component_templates.py:150 msgid "" "A component template cannot be associated with both a device type and a " "module type." msgstr "構成要素テンプレートをデバイスタイプとモジュールタイプの両方に関連付けることはできません。" -#: netbox/dcim/models/device_component_templates.py:158 +#: netbox/dcim/models/device_component_templates.py:154 msgid "" "A component template must be associated with either a device type or a " "module type." msgstr "構成要素テンプレートは、デバイスタイプまたはモジュールタイプのいずれかに関連付ける必要があります。" -#: netbox/dcim/models/device_component_templates.py:212 +#: netbox/dcim/models/device_component_templates.py:209 msgid "console port template" msgstr "コンソールポートテンプレート" -#: netbox/dcim/models/device_component_templates.py:213 +#: netbox/dcim/models/device_component_templates.py:210 msgid "console port templates" msgstr "コンソールポートテンプレート" -#: netbox/dcim/models/device_component_templates.py:246 +#: netbox/dcim/models/device_component_templates.py:244 msgid "console server port template" msgstr "コンソールサーバポートテンプレート" -#: netbox/dcim/models/device_component_templates.py:247 +#: netbox/dcim/models/device_component_templates.py:245 msgid "console server port templates" msgstr "コンソールサーバポートテンプレート" -#: netbox/dcim/models/device_component_templates.py:278 -#: netbox/dcim/models/device_components.py:352 +#: netbox/dcim/models/device_component_templates.py:277 +#: netbox/dcim/models/device_components.py:345 msgid "maximum draw" msgstr "最大消費電力" -#: netbox/dcim/models/device_component_templates.py:285 -#: netbox/dcim/models/device_components.py:359 +#: netbox/dcim/models/device_component_templates.py:284 +#: netbox/dcim/models/device_components.py:352 msgid "allocated draw" msgstr "割当消費電力" -#: netbox/dcim/models/device_component_templates.py:295 +#: netbox/dcim/models/device_component_templates.py:294 msgid "power port template" msgstr "電源ポートテンプレート" -#: netbox/dcim/models/device_component_templates.py:296 +#: netbox/dcim/models/device_component_templates.py:295 msgid "power port templates" msgstr "電源ポートテンプレート" #: netbox/dcim/models/device_component_templates.py:315 -#: netbox/dcim/models/device_components.py:382 +#: netbox/dcim/models/device_components.py:372 #, python-brace-format msgid "Allocated draw cannot exceed the maximum draw ({maximum_draw}W)." msgstr "割当消費電力は最大消費電力 ({maximum_draw}W) を超えることはできません。" -#: netbox/dcim/models/device_component_templates.py:347 -#: netbox/dcim/models/device_components.py:477 +#: netbox/dcim/models/device_component_templates.py:349 +#: netbox/dcim/models/device_components.py:468 msgid "feed leg" msgstr "供給端子" -#: netbox/dcim/models/device_component_templates.py:351 -#: netbox/dcim/models/device_components.py:481 +#: netbox/dcim/models/device_component_templates.py:354 +#: netbox/dcim/models/device_components.py:473 msgid "Phase (for three-phase feeds)" msgstr "電力相 (三相電源用)" -#: netbox/dcim/models/device_component_templates.py:357 +#: netbox/dcim/models/device_component_templates.py:360 msgid "power outlet template" msgstr "電源コンセントテンプレート" -#: netbox/dcim/models/device_component_templates.py:358 +#: netbox/dcim/models/device_component_templates.py:361 msgid "power outlet templates" msgstr "電源コンセントテンプレート" -#: netbox/dcim/models/device_component_templates.py:367 +#: netbox/dcim/models/device_component_templates.py:370 #, python-brace-format msgid "Parent power port ({power_port}) must belong to the same device type" msgstr "親電源ポート ({power_port}) は同じデバイスタイプに属している必要があります" -#: netbox/dcim/models/device_component_templates.py:371 +#: netbox/dcim/models/device_component_templates.py:376 #, python-brace-format msgid "Parent power port ({power_port}) must belong to the same module type" msgstr "親電源ポート ({power_port}) は同じモジュールタイプに属している必要があります" -#: netbox/dcim/models/device_component_templates.py:423 -#: netbox/dcim/models/device_components.py:611 +#: netbox/dcim/models/device_component_templates.py:430 +#: netbox/dcim/models/device_components.py:659 msgid "management only" msgstr "管理のみ" -#: netbox/dcim/models/device_component_templates.py:431 -#: netbox/dcim/models/device_components.py:550 +#: netbox/dcim/models/device_component_templates.py:438 +#: netbox/dcim/models/device_components.py:539 msgid "bridge interface" msgstr "ブリッジインタフェース" -#: netbox/dcim/models/device_component_templates.py:449 -#: netbox/dcim/models/device_components.py:636 +#: netbox/dcim/models/device_component_templates.py:459 +#: netbox/dcim/models/device_components.py:685 msgid "wireless role" msgstr "無線ロール" -#: netbox/dcim/models/device_component_templates.py:455 +#: netbox/dcim/models/device_component_templates.py:465 msgid "interface template" msgstr "インタフェーステンプレート" -#: netbox/dcim/models/device_component_templates.py:456 +#: netbox/dcim/models/device_component_templates.py:466 msgid "interface templates" msgstr "インタフェーステンプレート" -#: netbox/dcim/models/device_component_templates.py:463 -#: netbox/dcim/models/device_components.py:804 -#: netbox/virtualization/models/virtualmachines.py:405 +#: netbox/dcim/models/device_component_templates.py:473 +#: netbox/dcim/models/device_components.py:845 +#: netbox/virtualization/models/virtualmachines.py:385 msgid "An interface cannot be bridged to itself." msgstr "インタフェースを自分自身にブリッジすることはできません。" -#: netbox/dcim/models/device_component_templates.py:466 +#: netbox/dcim/models/device_component_templates.py:477 #, python-brace-format msgid "Bridge interface ({bridge}) must belong to the same device type" msgstr "ブリッジインタフェース ({bridge}) は同じデバイスタイプに属している必要があります" -#: netbox/dcim/models/device_component_templates.py:470 +#: netbox/dcim/models/device_component_templates.py:483 #, python-brace-format msgid "Bridge interface ({bridge}) must belong to the same module type" msgstr "ブリッジインタフェース ({bridge}) は同じモジュールタイプに属している必要があります" -#: netbox/dcim/models/device_component_templates.py:526 -#: netbox/dcim/models/device_components.py:984 +#: netbox/dcim/models/device_component_templates.py:540 +#: netbox/dcim/models/device_components.py:1035 msgid "rear port position" msgstr "背面ポート位置" -#: netbox/dcim/models/device_component_templates.py:551 +#: netbox/dcim/models/device_component_templates.py:565 msgid "front port template" msgstr "前面ポートテンプレート" -#: netbox/dcim/models/device_component_templates.py:552 +#: netbox/dcim/models/device_component_templates.py:566 msgid "front port templates" msgstr "前面ポートテンプレート" -#: netbox/dcim/models/device_component_templates.py:562 +#: netbox/dcim/models/device_component_templates.py:576 #, python-brace-format msgid "Rear port ({name}) must belong to the same device type" msgstr "背面ポート ({name}) は同じデバイスタイプに属している必要があります" -#: netbox/dcim/models/device_component_templates.py:568 +#: netbox/dcim/models/device_component_templates.py:582 #, python-brace-format msgid "" "Invalid rear port position ({position}); rear port {name} has only {count} " "positions" msgstr "背面ポートの位置 ({position}) が無効です; 背面ポート {name} は{count}箇所しかありません" -#: netbox/dcim/models/device_component_templates.py:621 -#: netbox/dcim/models/device_components.py:1053 +#: netbox/dcim/models/device_component_templates.py:635 +#: netbox/dcim/models/device_components.py:1101 msgid "positions" msgstr "位置" -#: netbox/dcim/models/device_component_templates.py:632 +#: netbox/dcim/models/device_component_templates.py:646 msgid "rear port template" msgstr "背面ポートテンプレート" -#: netbox/dcim/models/device_component_templates.py:633 +#: netbox/dcim/models/device_component_templates.py:647 msgid "rear port templates" msgstr "背面ポートテンプレート" -#: netbox/dcim/models/device_component_templates.py:662 -#: netbox/dcim/models/device_components.py:1103 +#: netbox/dcim/models/device_component_templates.py:676 +#: netbox/dcim/models/device_components.py:1148 msgid "position" msgstr "位置" -#: netbox/dcim/models/device_component_templates.py:665 -#: netbox/dcim/models/device_components.py:1106 +#: netbox/dcim/models/device_component_templates.py:679 +#: netbox/dcim/models/device_components.py:1151 msgid "Identifier to reference when renaming installed components" msgstr "取付済み構成要素名を変更する際に参照する識別子" -#: netbox/dcim/models/device_component_templates.py:671 +#: netbox/dcim/models/device_component_templates.py:685 msgid "module bay template" msgstr "モジュールベイテンプレート" -#: netbox/dcim/models/device_component_templates.py:672 +#: netbox/dcim/models/device_component_templates.py:686 msgid "module bay templates" msgstr "モジュールベイテンプレート" -#: netbox/dcim/models/device_component_templates.py:699 +#: netbox/dcim/models/device_component_templates.py:713 msgid "device bay template" msgstr "デバイスベイテンプレート" -#: netbox/dcim/models/device_component_templates.py:700 +#: netbox/dcim/models/device_component_templates.py:714 msgid "device bay templates" msgstr "デバイスベイテンプレート" -#: netbox/dcim/models/device_component_templates.py:713 +#: netbox/dcim/models/device_component_templates.py:728 #, python-brace-format msgid "" "Subdevice role of device type ({device_type}) must be set to \"parent\" to " @@ -5392,212 +5888,231 @@ msgid "" msgstr "" "デバイスベイを許可するためには、デバイスタイプ ({device_type}) のサブデバイスロールを「parent」に設定する必要があります。" -#: netbox/dcim/models/device_component_templates.py:768 -#: netbox/dcim/models/device_components.py:1262 +#: netbox/dcim/models/device_component_templates.py:784 +#: netbox/dcim/models/device_components.py:1304 msgid "part ID" msgstr "パーツ ID" -#: netbox/dcim/models/device_component_templates.py:770 -#: netbox/dcim/models/device_components.py:1264 +#: netbox/dcim/models/device_component_templates.py:786 +#: netbox/dcim/models/device_components.py:1306 msgid "Manufacturer-assigned part identifier" msgstr "メーカ指定の部品識別子" -#: netbox/dcim/models/device_component_templates.py:787 +#: netbox/dcim/models/device_component_templates.py:803 msgid "inventory item template" msgstr "在庫品目テンプレート" -#: netbox/dcim/models/device_component_templates.py:788 +#: netbox/dcim/models/device_component_templates.py:804 msgid "inventory item templates" msgstr "在庫品目テンプレート" -#: netbox/dcim/models/device_components.py:105 +#: netbox/dcim/models/device_components.py:100 msgid "Components cannot be moved to a different device." msgstr "構成要素を別のデバイスに移動することはできません。" -#: netbox/dcim/models/device_components.py:144 +#: netbox/dcim/models/device_components.py:139 msgid "cable end" msgstr "ケーブル端" -#: netbox/dcim/models/device_components.py:150 +#: netbox/dcim/models/device_components.py:146 msgid "mark connected" msgstr "接続済みとしてマークする" -#: netbox/dcim/models/device_components.py:152 +#: netbox/dcim/models/device_components.py:148 msgid "Treat as if a cable is connected" msgstr "ケーブルが接続されているかのように扱う" -#: netbox/dcim/models/device_components.py:170 +#: netbox/dcim/models/device_components.py:166 msgid "Must specify cable end (A or B) when attaching a cable." msgstr "ケーブルを接続するときは、ケーブルの端 (A または B) を指定する必要があります。" -#: netbox/dcim/models/device_components.py:174 +#: netbox/dcim/models/device_components.py:170 msgid "Cable end must not be set without a cable." msgstr "ケーブルの端はケーブルなしでセットしないでください。" -#: netbox/dcim/models/device_components.py:178 +#: netbox/dcim/models/device_components.py:174 msgid "Cannot mark as connected with a cable attached." msgstr "ケーブルが接続されている状態では接続済みとマークできません。" -#: netbox/dcim/models/device_components.py:202 +#: netbox/dcim/models/device_components.py:198 #, python-brace-format msgid "{class_name} models must declare a parent_object property" msgstr "{class_name} モデルは親オブジェクトプロパティを宣言しなければなりません" -#: netbox/dcim/models/device_components.py:287 -#: netbox/dcim/models/device_components.py:316 -#: netbox/dcim/models/device_components.py:349 -#: netbox/dcim/models/device_components.py:467 +#: netbox/dcim/models/device_components.py:284 +#: netbox/dcim/models/device_components.py:311 +#: netbox/dcim/models/device_components.py:342 +#: netbox/dcim/models/device_components.py:458 msgid "Physical port type" msgstr "物理ポートタイプ" -#: netbox/dcim/models/device_components.py:290 -#: netbox/dcim/models/device_components.py:319 +#: netbox/dcim/models/device_components.py:287 +#: netbox/dcim/models/device_components.py:314 msgid "speed" msgstr "速度" -#: netbox/dcim/models/device_components.py:294 -#: netbox/dcim/models/device_components.py:323 +#: netbox/dcim/models/device_components.py:291 +#: netbox/dcim/models/device_components.py:318 msgid "Port speed in bits per second" msgstr "ポート速度 (bps)" -#: netbox/dcim/models/device_components.py:300 +#: netbox/dcim/models/device_components.py:297 msgid "console port" msgstr "コンソールポート" -#: netbox/dcim/models/device_components.py:301 +#: netbox/dcim/models/device_components.py:298 msgid "console ports" msgstr "コンソールポート" -#: netbox/dcim/models/device_components.py:329 +#: netbox/dcim/models/device_components.py:324 msgid "console server port" msgstr "コンソールサーバポート" -#: netbox/dcim/models/device_components.py:330 +#: netbox/dcim/models/device_components.py:325 msgid "console server ports" msgstr "コンソールサーバポート" -#: netbox/dcim/models/device_components.py:369 +#: netbox/dcim/models/device_components.py:362 msgid "power port" msgstr "電源ポート" -#: netbox/dcim/models/device_components.py:370 +#: netbox/dcim/models/device_components.py:363 msgid "power ports" msgstr "電源ポート" -#: netbox/dcim/models/device_components.py:487 +#: netbox/dcim/models/device_components.py:483 msgid "power outlet" msgstr "電源コンセント" -#: netbox/dcim/models/device_components.py:488 +#: netbox/dcim/models/device_components.py:484 msgid "power outlets" msgstr "電源コンセント" -#: netbox/dcim/models/device_components.py:499 +#: netbox/dcim/models/device_components.py:492 #, python-brace-format msgid "Parent power port ({power_port}) must belong to the same device" msgstr "親電源ポート ({power_port}) は同じデバイスに属している必要があります" -#: netbox/dcim/models/device_components.py:530 netbox/vpn/models/crypto.py:81 -#: netbox/vpn/models/crypto.py:226 +#: netbox/dcim/models/device_components.py:518 netbox/vpn/models/crypto.py:80 +#: netbox/vpn/models/crypto.py:222 msgid "mode" msgstr "モード" -#: netbox/dcim/models/device_components.py:534 +#: netbox/dcim/models/device_components.py:523 msgid "IEEE 802.1Q tagging strategy" msgstr "IEEE 802.1Q タギング戦略" -#: netbox/dcim/models/device_components.py:542 +#: netbox/dcim/models/device_components.py:531 msgid "parent interface" msgstr "親インタフェース" -#: netbox/dcim/models/device_components.py:602 -msgid "parent LAG" -msgstr "親ラグ" - -#: netbox/dcim/models/device_components.py:612 -msgid "This interface is used only for out-of-band management" -msgstr "このインタフェースは帯域外管理にのみ使用されます。" - -#: netbox/dcim/models/device_components.py:617 -msgid "speed (Kbps)" -msgstr "速度 (Kbps)" - -#: netbox/dcim/models/device_components.py:620 -msgid "duplex" -msgstr "デュプレックス" - -#: netbox/dcim/models/device_components.py:630 -msgid "64-bit World Wide Name" -msgstr "64 ビットのWWN (World Wide Name)" - -#: netbox/dcim/models/device_components.py:642 -msgid "wireless channel" -msgstr "無線チャネル" - -#: netbox/dcim/models/device_components.py:649 -msgid "channel frequency (MHz)" -msgstr "チャネル周波数 (MHz)" - -#: netbox/dcim/models/device_components.py:650 -#: netbox/dcim/models/device_components.py:658 -msgid "Populated by selected channel (if set)" -msgstr "選択したチャンネルによって設定されます (設定されている場合)" - -#: netbox/dcim/models/device_components.py:664 -msgid "transmit power (dBm)" -msgstr "送信パワー (dBm)" - -#: netbox/dcim/models/device_components.py:689 netbox/wireless/models.py:117 -msgid "wireless LANs" -msgstr "無線 LAN" - -#: netbox/dcim/models/device_components.py:697 -#: netbox/virtualization/models/virtualmachines.py:335 +#: netbox/dcim/models/device_components.py:547 msgid "untagged VLAN" msgstr "タグなし VLAN" -#: netbox/dcim/models/device_components.py:703 -#: netbox/virtualization/models/virtualmachines.py:341 +#: netbox/dcim/models/device_components.py:553 msgid "tagged VLANs" msgstr "タグ付き VLAN" -#: netbox/dcim/models/device_components.py:745 -#: netbox/virtualization/models/virtualmachines.py:377 +#: netbox/dcim/models/device_components.py:561 +#: netbox/dcim/tables/devices.py:602 netbox/ipam/forms/bulk_edit.py:510 +#: netbox/ipam/forms/bulk_import.py:491 netbox/ipam/forms/filtersets.py:565 +#: netbox/ipam/forms/model_forms.py:692 netbox/ipam/tables/vlans.py:106 +#: netbox/templates/dcim/interface.html:86 netbox/templates/ipam/vlan.html:77 +msgid "Q-in-Q SVLAN" +msgstr "Q-in-Q スVLAN" + +#: netbox/dcim/models/device_components.py:576 +msgid "primary MAC address" +msgstr "プライマリ MAC アドレス" + +#: netbox/dcim/models/device_components.py:588 +msgid "Only Q-in-Q interfaces may specify a service VLAN." +msgstr "Q-in-Q インターフェイスのみがサービス VLAN を指定できます。" + +#: netbox/dcim/models/device_components.py:594 +#, python-brace-format +msgid "MAC address {mac_address} is not assigned to this interface." +msgstr "MAC アドレス {mac_address} このインターフェースには割り当てられていません。" + +#: netbox/dcim/models/device_components.py:650 +msgid "parent LAG" +msgstr "親ラグ" + +#: netbox/dcim/models/device_components.py:660 +msgid "This interface is used only for out-of-band management" +msgstr "このインタフェースは帯域外管理にのみ使用されます。" + +#: netbox/dcim/models/device_components.py:665 +msgid "speed (Kbps)" +msgstr "速度 (Kbps)" + +#: netbox/dcim/models/device_components.py:668 +msgid "duplex" +msgstr "デュプレックス" + +#: netbox/dcim/models/device_components.py:678 +msgid "64-bit World Wide Name" +msgstr "64 ビットのWWN (World Wide Name)" + +#: netbox/dcim/models/device_components.py:692 +msgid "wireless channel" +msgstr "無線チャネル" + +#: netbox/dcim/models/device_components.py:699 +msgid "channel frequency (MHz)" +msgstr "チャネル周波数 (MHz)" + +#: netbox/dcim/models/device_components.py:700 +#: netbox/dcim/models/device_components.py:708 +msgid "Populated by selected channel (if set)" +msgstr "選択したチャンネルによって設定されます (設定されている場合)" + +#: netbox/dcim/models/device_components.py:714 +msgid "transmit power (dBm)" +msgstr "送信パワー (dBm)" + +#: netbox/dcim/models/device_components.py:741 netbox/wireless/models.py:117 +msgid "wireless LANs" +msgstr "無線 LAN" + +#: netbox/dcim/models/device_components.py:789 +#: netbox/virtualization/models/virtualmachines.py:359 msgid "interface" msgstr "インタフェース" -#: netbox/dcim/models/device_components.py:746 -#: netbox/virtualization/models/virtualmachines.py:378 +#: netbox/dcim/models/device_components.py:790 +#: netbox/virtualization/models/virtualmachines.py:360 msgid "interfaces" msgstr "インタフェース" -#: netbox/dcim/models/device_components.py:757 +#: netbox/dcim/models/device_components.py:798 #, python-brace-format msgid "{display_type} interfaces cannot have a cable attached." msgstr "{display_type} インタフェースにはケーブルを接続できません。" -#: netbox/dcim/models/device_components.py:765 +#: netbox/dcim/models/device_components.py:806 #, python-brace-format msgid "{display_type} interfaces cannot be marked as connected." msgstr "{display_type} インタフェースは接続済みとしてマークできません。" -#: netbox/dcim/models/device_components.py:774 -#: netbox/virtualization/models/virtualmachines.py:390 +#: netbox/dcim/models/device_components.py:815 +#: netbox/virtualization/models/virtualmachines.py:370 msgid "An interface cannot be its own parent." msgstr "インタフェースを自身の親にすることはできません。" -#: netbox/dcim/models/device_components.py:778 +#: netbox/dcim/models/device_components.py:819 msgid "Only virtual interfaces may be assigned to a parent interface." msgstr "親インタフェースに割り当てることができるのは仮想インタフェースだけです。" -#: netbox/dcim/models/device_components.py:785 +#: netbox/dcim/models/device_components.py:826 #, python-brace-format msgid "" "The selected parent interface ({interface}) belongs to a different device " "({device})" msgstr "選択した親インタフェース ({interface}) は別のデバイス ({device}) に属しています" -#: netbox/dcim/models/device_components.py:791 +#: netbox/dcim/models/device_components.py:832 #, python-brace-format msgid "" "The selected parent interface ({interface}) belongs to {device}, which is " @@ -5606,14 +6121,14 @@ msgstr "" "選択した親インタフェース ({interface}) が属する {device} " "は、バーチャルシャーシ{virtual_chassis}には含まれていません。 。" -#: netbox/dcim/models/device_components.py:811 +#: netbox/dcim/models/device_components.py:852 #, python-brace-format msgid "" "The selected bridge interface ({bridge}) belongs to a different device " "({device})." msgstr "選択したブリッジインタフェース ({bridge}) は別のデバイス ({device}) に属しています。" -#: netbox/dcim/models/device_components.py:817 +#: netbox/dcim/models/device_components.py:858 #, python-brace-format msgid "" "The selected bridge interface ({interface}) belongs to {device}, which is " @@ -5622,21 +6137,21 @@ msgstr "" "選択したブリッジインタフェース ({interface}) が属する " "{device}は、バーチャルシャーシ{virtual_chassis}には含まれていません。 " -#: netbox/dcim/models/device_components.py:828 +#: netbox/dcim/models/device_components.py:869 msgid "Virtual interfaces cannot have a parent LAG interface." msgstr "仮想インタフェースは親 LAG インタフェースを持つことはできません。" -#: netbox/dcim/models/device_components.py:832 +#: netbox/dcim/models/device_components.py:873 msgid "A LAG interface cannot be its own parent." msgstr "LAG インタフェースを自身の親にすることはできません。" -#: netbox/dcim/models/device_components.py:839 +#: netbox/dcim/models/device_components.py:880 #, python-brace-format msgid "" "The selected LAG interface ({lag}) belongs to a different device ({device})." msgstr "選択した LAG インタフェース ({lag}) は別のデバイス ({device}) に属しています。" -#: netbox/dcim/models/device_components.py:845 +#: netbox/dcim/models/device_components.py:886 #, python-brace-format msgid "" "The selected LAG interface ({lag}) belongs to {device}, which is not part of" @@ -5645,43 +6160,47 @@ msgstr "" "選択した LAG インタフェース ({lag}) が属する {device}は、バーチャルシャーシには含まれていません " "{virtual_chassis}。" -#: netbox/dcim/models/device_components.py:856 +#: netbox/dcim/models/device_components.py:897 msgid "Virtual interfaces cannot have a PoE mode." msgstr "仮想インタフェースには PoE モードを設定できません。" -#: netbox/dcim/models/device_components.py:860 +#: netbox/dcim/models/device_components.py:901 msgid "Virtual interfaces cannot have a PoE type." msgstr "仮想インタフェースに PoE タイプを設定することはできません。" -#: netbox/dcim/models/device_components.py:866 +#: netbox/dcim/models/device_components.py:907 msgid "Must specify PoE mode when designating a PoE type." msgstr "PoE タイプを指定するときは、PoE モードを指定する必要があります。" -#: netbox/dcim/models/device_components.py:873 +#: netbox/dcim/models/device_components.py:914 msgid "Wireless role may be set only on wireless interfaces." msgstr "無線ロールは無線インタフェースでのみ設定できます。" -#: netbox/dcim/models/device_components.py:875 +#: netbox/dcim/models/device_components.py:916 msgid "Channel may be set only on wireless interfaces." msgstr "チャネルは無線インタフェースでのみ設定できます。" -#: netbox/dcim/models/device_components.py:881 +#: netbox/dcim/models/device_components.py:922 msgid "Channel frequency may be set only on wireless interfaces." msgstr "チャネル周波数は、無線インタフェースでのみ設定できます。" -#: netbox/dcim/models/device_components.py:885 +#: netbox/dcim/models/device_components.py:926 msgid "Cannot specify custom frequency with channel selected." msgstr "選択したチャンネルではカスタム周波数を指定できません。" -#: netbox/dcim/models/device_components.py:891 +#: netbox/dcim/models/device_components.py:932 msgid "Channel width may be set only on wireless interfaces." msgstr "チャネル幅は無線インタフェースでのみ設定できます。" -#: netbox/dcim/models/device_components.py:893 +#: netbox/dcim/models/device_components.py:934 msgid "Cannot specify custom width with channel selected." msgstr "選択したチャンネルではカスタム幅を指定できません。" -#: netbox/dcim/models/device_components.py:901 +#: netbox/dcim/models/device_components.py:938 +msgid "Interface mode does not support an untagged vlan." +msgstr "インターフェイスモードはタグなし VLAN をサポートしていません。" + +#: netbox/dcim/models/device_components.py:944 #, python-brace-format msgid "" "The untagged VLAN ({untagged_vlan}) must belong to the same site as the " @@ -5689,24 +6208,24 @@ msgid "" msgstr "" "タグ無し VLAN ({untagged_vlan}) はインタフェースの親デバイスと同じサイトに属しているか、グローバルである必要があります。" -#: netbox/dcim/models/device_components.py:990 +#: netbox/dcim/models/device_components.py:1041 msgid "Mapped position on corresponding rear port" msgstr "対応する背面ポートのマップ位置" -#: netbox/dcim/models/device_components.py:1006 +#: netbox/dcim/models/device_components.py:1057 msgid "front port" msgstr "前面ポート" -#: netbox/dcim/models/device_components.py:1007 +#: netbox/dcim/models/device_components.py:1058 msgid "front ports" msgstr "前面ポート" -#: netbox/dcim/models/device_components.py:1021 +#: netbox/dcim/models/device_components.py:1069 #, python-brace-format msgid "Rear port ({rear_port}) must belong to the same device" msgstr "背面ポート ({rear_port}) は同じデバイスに属している必要があります" -#: netbox/dcim/models/device_components.py:1029 +#: netbox/dcim/models/device_components.py:1077 #, python-brace-format msgid "" "Invalid rear port position ({rear_port_position}): Rear port {name} has only" @@ -5714,198 +6233,198 @@ msgid "" msgstr "" "背面ポートの位置 ({rear_port_position}) が無効です: 背面ポート {name} は {positions} 箇所しかありません。" -#: netbox/dcim/models/device_components.py:1059 +#: netbox/dcim/models/device_components.py:1107 msgid "Number of front ports which may be mapped" msgstr "マップできる前面ポートの数" -#: netbox/dcim/models/device_components.py:1064 +#: netbox/dcim/models/device_components.py:1112 msgid "rear port" msgstr "背面ポート" -#: netbox/dcim/models/device_components.py:1065 +#: netbox/dcim/models/device_components.py:1113 msgid "rear ports" msgstr "背面ポート" -#: netbox/dcim/models/device_components.py:1079 +#: netbox/dcim/models/device_components.py:1124 #, python-brace-format msgid "" "The number of positions cannot be less than the number of mapped front ports" " ({frontport_count})" msgstr "ポジションの数は、マップされた前面ポートの数より少なくすることはできません ({frontport_count})" -#: netbox/dcim/models/device_components.py:1120 +#: netbox/dcim/models/device_components.py:1165 msgid "module bay" msgstr "モジュールベイ" -#: netbox/dcim/models/device_components.py:1121 +#: netbox/dcim/models/device_components.py:1166 msgid "module bays" msgstr "モジュールベイ" -#: netbox/dcim/models/device_components.py:1138 -#: netbox/dcim/models/devices.py:1224 +#: netbox/dcim/models/device_components.py:1180 +#: netbox/dcim/models/devices.py:1229 msgid "A module bay cannot belong to a module installed within it." msgstr "モジュールベイは、その中に取り付けられているモジュールに属することはできません。" -#: netbox/dcim/models/device_components.py:1164 +#: netbox/dcim/models/device_components.py:1206 msgid "device bay" msgstr "デバイスベイ" -#: netbox/dcim/models/device_components.py:1165 +#: netbox/dcim/models/device_components.py:1207 msgid "device bays" msgstr "デバイスベイ" -#: netbox/dcim/models/device_components.py:1175 +#: netbox/dcim/models/device_components.py:1214 #, python-brace-format msgid "This type of device ({device_type}) does not support device bays." msgstr "このタイプ ({device_type}) のデバイスは、デバイスベイをサポートしていません。" -#: netbox/dcim/models/device_components.py:1181 +#: netbox/dcim/models/device_components.py:1220 msgid "Cannot install a device into itself." msgstr "デバイスをそれ自体に挿入することはできません。" -#: netbox/dcim/models/device_components.py:1189 +#: netbox/dcim/models/device_components.py:1228 #, python-brace-format msgid "" "Cannot install the specified device; device is already installed in {bay}." msgstr "指定されたデバイスは取付できません。デバイスは既に {bay} に取付られています 。" -#: netbox/dcim/models/device_components.py:1210 +#: netbox/dcim/models/device_components.py:1249 msgid "inventory item role" msgstr "在庫品目ロール" -#: netbox/dcim/models/device_components.py:1211 +#: netbox/dcim/models/device_components.py:1250 msgid "inventory item roles" msgstr "在庫品目ロール" -#: netbox/dcim/models/device_components.py:1268 -#: netbox/dcim/models/devices.py:607 netbox/dcim/models/devices.py:1181 -#: netbox/dcim/models/racks.py:313 -#: netbox/virtualization/models/virtualmachines.py:131 +#: netbox/dcim/models/device_components.py:1310 +#: netbox/dcim/models/devices.py:598 netbox/dcim/models/devices.py:1189 +#: netbox/dcim/models/racks.py:304 +#: netbox/virtualization/models/virtualmachines.py:126 msgid "serial number" msgstr "シリアル番号" -#: netbox/dcim/models/device_components.py:1276 -#: netbox/dcim/models/devices.py:615 netbox/dcim/models/devices.py:1188 -#: netbox/dcim/models/racks.py:320 +#: netbox/dcim/models/device_components.py:1318 +#: netbox/dcim/models/devices.py:606 netbox/dcim/models/devices.py:1196 +#: netbox/dcim/models/racks.py:311 msgid "asset tag" msgstr "アセットタグ" -#: netbox/dcim/models/device_components.py:1277 +#: netbox/dcim/models/device_components.py:1319 msgid "A unique tag used to identify this item" msgstr "この部品を識別するために使用される一意のタグ" -#: netbox/dcim/models/device_components.py:1280 +#: netbox/dcim/models/device_components.py:1322 msgid "discovered" msgstr "自動検出" -#: netbox/dcim/models/device_components.py:1282 +#: netbox/dcim/models/device_components.py:1324 msgid "This item was automatically discovered" msgstr "このアイテムは自動的に検出されました" -#: netbox/dcim/models/device_components.py:1300 +#: netbox/dcim/models/device_components.py:1342 msgid "inventory item" msgstr "在庫品目" -#: netbox/dcim/models/device_components.py:1301 +#: netbox/dcim/models/device_components.py:1343 msgid "inventory items" msgstr "在庫品目" -#: netbox/dcim/models/device_components.py:1312 +#: netbox/dcim/models/device_components.py:1351 msgid "Cannot assign self as parent." msgstr "自分を親として割り当てることはできません。" -#: netbox/dcim/models/device_components.py:1320 +#: netbox/dcim/models/device_components.py:1359 msgid "Parent inventory item does not belong to the same device." msgstr "親在庫品目は同じデバイスに属していません。" -#: netbox/dcim/models/device_components.py:1326 +#: netbox/dcim/models/device_components.py:1365 msgid "Cannot move an inventory item with dependent children" msgstr "子を持つ在庫品目は移動できません" -#: netbox/dcim/models/device_components.py:1334 +#: netbox/dcim/models/device_components.py:1373 msgid "Cannot assign inventory item to component on another device" msgstr "在庫品目を別のデバイスの構成要素に割り当てることはできません" -#: netbox/dcim/models/devices.py:54 +#: netbox/dcim/models/devices.py:59 msgid "manufacturer" msgstr "メーカ" -#: netbox/dcim/models/devices.py:55 +#: netbox/dcim/models/devices.py:60 msgid "manufacturers" msgstr "メーカ" -#: netbox/dcim/models/devices.py:82 netbox/dcim/models/devices.py:382 +#: netbox/dcim/models/devices.py:84 netbox/dcim/models/devices.py:383 #: netbox/dcim/models/racks.py:133 msgid "model" msgstr "型" -#: netbox/dcim/models/devices.py:95 +#: netbox/dcim/models/devices.py:97 msgid "default platform" msgstr "デフォルトプラットフォーム" -#: netbox/dcim/models/devices.py:98 netbox/dcim/models/devices.py:386 +#: netbox/dcim/models/devices.py:100 netbox/dcim/models/devices.py:387 msgid "part number" msgstr "パーツ番号" -#: netbox/dcim/models/devices.py:101 netbox/dcim/models/devices.py:389 +#: netbox/dcim/models/devices.py:103 netbox/dcim/models/devices.py:390 msgid "Discrete part number (optional)" msgstr "個別の部品番号 (オプション)" -#: netbox/dcim/models/devices.py:107 netbox/dcim/models/racks.py:54 +#: netbox/dcim/models/devices.py:109 netbox/dcim/models/racks.py:53 msgid "height (U)" msgstr "高さ (U)" -#: netbox/dcim/models/devices.py:111 +#: netbox/dcim/models/devices.py:113 msgid "exclude from utilization" msgstr "使用率から除外" -#: netbox/dcim/models/devices.py:112 +#: netbox/dcim/models/devices.py:114 msgid "Devices of this type are excluded when calculating rack utilization." msgstr "このタイプのデバイスは、ラック使用率の計算時に除外されます。" -#: netbox/dcim/models/devices.py:116 +#: netbox/dcim/models/devices.py:118 msgid "is full depth" msgstr "奥行きをすべて利用する" -#: netbox/dcim/models/devices.py:117 +#: netbox/dcim/models/devices.py:119 msgid "Device consumes both front and rear rack faces." msgstr "デバイスは前面と背面の両方のラック面を使用します。" -#: netbox/dcim/models/devices.py:123 +#: netbox/dcim/models/devices.py:126 msgid "parent/child status" msgstr "親/子のステータス" -#: netbox/dcim/models/devices.py:124 +#: netbox/dcim/models/devices.py:127 msgid "" "Parent devices house child devices in device bays. Leave blank if this " "device type is neither a parent nor a child." msgstr "親デバイスはデバイスベイに子デバイスを収納します。このデバイスタイプが親でも子供でもない場合は、空白のままにしてください。" -#: netbox/dcim/models/devices.py:128 netbox/dcim/models/devices.py:392 -#: netbox/dcim/models/devices.py:659 netbox/dcim/models/racks.py:324 +#: netbox/dcim/models/devices.py:131 netbox/dcim/models/devices.py:393 +#: netbox/dcim/models/devices.py:651 netbox/dcim/models/racks.py:315 msgid "airflow" msgstr "エアフロー" -#: netbox/dcim/models/devices.py:204 +#: netbox/dcim/models/devices.py:208 msgid "device type" msgstr "デバイスタイプ" -#: netbox/dcim/models/devices.py:205 +#: netbox/dcim/models/devices.py:209 msgid "device types" msgstr "デバイスタイプ" -#: netbox/dcim/models/devices.py:290 +#: netbox/dcim/models/devices.py:291 msgid "U height must be in increments of 0.5 rack units." msgstr "U の高さは 0.5 ラック単位でなければなりません。" -#: netbox/dcim/models/devices.py:307 +#: netbox/dcim/models/devices.py:308 #, python-brace-format msgid "" "Device {device} in rack {rack} does not have sufficient space to accommodate" " a height of {height}U" msgstr "ラック内 {rack} のデバイス {device} は高さ{height}Uに対応する十分なスペースが有りません " -#: netbox/dcim/models/devices.py:322 +#: netbox/dcim/models/devices.py:323 #, python-brace-format msgid "" "Unable to set 0U height: Found {racked_instance_count} " @@ -5914,173 +6433,173 @@ msgstr "" "高さは 0U にできません: {racked_instance_count} インスタンス " "がラックに取り付け済みです。" -#: netbox/dcim/models/devices.py:331 +#: netbox/dcim/models/devices.py:332 msgid "" "Must delete all device bay templates associated with this device before " "declassifying it as a parent device." msgstr "このデバイスを親デバイスとして分類解除する前に、このデバイスに関連付けられているすべてのデバイスベイテンプレートを削除する必要があります。" -#: netbox/dcim/models/devices.py:337 +#: netbox/dcim/models/devices.py:338 msgid "Child device types must be 0U." msgstr "子デバイスタイプは 0U でなければなりません。" -#: netbox/dcim/models/devices.py:411 +#: netbox/dcim/models/devices.py:413 msgid "module type" msgstr "モジュールタイプ" -#: netbox/dcim/models/devices.py:412 +#: netbox/dcim/models/devices.py:414 msgid "module types" msgstr "モジュールタイプ" -#: netbox/dcim/models/devices.py:485 +#: netbox/dcim/models/devices.py:484 msgid "Virtual machines may be assigned to this role" msgstr "仮想マシンをこのロールに割り当てることができます" -#: netbox/dcim/models/devices.py:497 +#: netbox/dcim/models/devices.py:496 msgid "device role" msgstr "デバイスロール" -#: netbox/dcim/models/devices.py:498 +#: netbox/dcim/models/devices.py:497 msgid "device roles" msgstr "デバイスロール" -#: netbox/dcim/models/devices.py:515 +#: netbox/dcim/models/devices.py:511 msgid "Optionally limit this platform to devices of a certain manufacturer" msgstr "オプションで、このプラットフォームを特定のメーカのデバイスに限定できます" -#: netbox/dcim/models/devices.py:527 +#: netbox/dcim/models/devices.py:523 msgid "platform" msgstr "プラットフォーム" -#: netbox/dcim/models/devices.py:528 +#: netbox/dcim/models/devices.py:524 msgid "platforms" msgstr "プラットフォーム" -#: netbox/dcim/models/devices.py:576 +#: netbox/dcim/models/devices.py:572 msgid "The function this device serves" msgstr "このデバイスが果たす機能" -#: netbox/dcim/models/devices.py:608 +#: netbox/dcim/models/devices.py:599 msgid "Chassis serial number, assigned by the manufacturer" msgstr "製造元によって割当られた、シャーシのシリアル番号" -#: netbox/dcim/models/devices.py:616 netbox/dcim/models/devices.py:1189 +#: netbox/dcim/models/devices.py:607 netbox/dcim/models/devices.py:1197 msgid "A unique tag used to identify this device" msgstr "このデバイスを識別するために使用される一意のタグ" -#: netbox/dcim/models/devices.py:643 +#: netbox/dcim/models/devices.py:634 msgid "position (U)" msgstr "ポジション (U)" -#: netbox/dcim/models/devices.py:650 +#: netbox/dcim/models/devices.py:642 msgid "rack face" msgstr "ラックフェイス" -#: netbox/dcim/models/devices.py:670 netbox/dcim/models/devices.py:1420 -#: netbox/virtualization/models/virtualmachines.py:100 +#: netbox/dcim/models/devices.py:663 netbox/dcim/models/devices.py:1425 +#: netbox/virtualization/models/virtualmachines.py:95 msgid "primary IPv4" msgstr "プライマリ IPv4" -#: netbox/dcim/models/devices.py:678 netbox/dcim/models/devices.py:1428 -#: netbox/virtualization/models/virtualmachines.py:108 +#: netbox/dcim/models/devices.py:671 netbox/dcim/models/devices.py:1433 +#: netbox/virtualization/models/virtualmachines.py:103 msgid "primary IPv6" msgstr "プライマリ IPv6" -#: netbox/dcim/models/devices.py:686 +#: netbox/dcim/models/devices.py:679 msgid "out-of-band IP" msgstr "out-of-band IP" -#: netbox/dcim/models/devices.py:703 +#: netbox/dcim/models/devices.py:696 msgid "VC position" msgstr "VCポジション" -#: netbox/dcim/models/devices.py:706 +#: netbox/dcim/models/devices.py:699 msgid "Virtual chassis position" msgstr "バーチャルシャーシポジション" -#: netbox/dcim/models/devices.py:709 +#: netbox/dcim/models/devices.py:702 msgid "VC priority" msgstr "VC プライオリティ" -#: netbox/dcim/models/devices.py:713 +#: netbox/dcim/models/devices.py:706 msgid "Virtual chassis master election priority" msgstr "バーチャルシャーシのマスター選択優先順位" -#: netbox/dcim/models/devices.py:716 netbox/dcim/models/sites.py:207 +#: netbox/dcim/models/devices.py:709 netbox/dcim/models/sites.py:208 msgid "latitude" msgstr "緯度" -#: netbox/dcim/models/devices.py:721 netbox/dcim/models/devices.py:729 -#: netbox/dcim/models/sites.py:212 netbox/dcim/models/sites.py:220 +#: netbox/dcim/models/devices.py:714 netbox/dcim/models/devices.py:722 +#: netbox/dcim/models/sites.py:213 netbox/dcim/models/sites.py:221 msgid "GPS coordinate in decimal format (xx.yyyyyy)" msgstr "10 進数形式の GPS 座標 (xx.yyyyyy)" -#: netbox/dcim/models/devices.py:724 netbox/dcim/models/sites.py:215 +#: netbox/dcim/models/devices.py:717 netbox/dcim/models/sites.py:216 msgid "longitude" msgstr "経度" -#: netbox/dcim/models/devices.py:797 +#: netbox/dcim/models/devices.py:790 msgid "Device name must be unique per site." msgstr "デバイス名はサイトごとに一意である必要があります。" -#: netbox/dcim/models/devices.py:808 netbox/ipam/models/services.py:75 +#: netbox/dcim/models/devices.py:801 netbox/ipam/models/services.py:71 msgid "device" msgstr "デバイス" -#: netbox/dcim/models/devices.py:809 +#: netbox/dcim/models/devices.py:802 msgid "devices" msgstr "デバイス" -#: netbox/dcim/models/devices.py:835 +#: netbox/dcim/models/devices.py:821 #, python-brace-format msgid "Rack {rack} does not belong to site {site}." msgstr "ラック {rack} はサイト{site}に属していません 。" -#: netbox/dcim/models/devices.py:840 +#: netbox/dcim/models/devices.py:826 #, python-brace-format msgid "Location {location} does not belong to site {site}." msgstr "ロケーション {location} はサイト{site}に属していません 。" -#: netbox/dcim/models/devices.py:846 +#: netbox/dcim/models/devices.py:832 #, python-brace-format msgid "Rack {rack} does not belong to location {location}." msgstr "ラック {rack} はロケーション{location}に属していません 。" -#: netbox/dcim/models/devices.py:853 +#: netbox/dcim/models/devices.py:839 msgid "Cannot select a rack face without assigning a rack." msgstr "ラックを割り当てないとラックフェースは選択できません。" -#: netbox/dcim/models/devices.py:857 +#: netbox/dcim/models/devices.py:843 msgid "Cannot select a rack position without assigning a rack." msgstr "ラックを割り当てないとラックポジションを選択できません。" -#: netbox/dcim/models/devices.py:863 +#: netbox/dcim/models/devices.py:849 msgid "Position must be in increments of 0.5 rack units." msgstr "ポジションは 0.5 ラックユニット単位で入力する必要があります。" -#: netbox/dcim/models/devices.py:867 +#: netbox/dcim/models/devices.py:853 msgid "Must specify rack face when defining rack position." msgstr "ラックの位置を定義するときは、ラックの面を指定する必要があります。" -#: netbox/dcim/models/devices.py:875 +#: netbox/dcim/models/devices.py:861 #, python-brace-format msgid "" "A 0U device type ({device_type}) cannot be assigned to a rack position." msgstr "0U デバイスタイプ ({device_type}) をラックポジションに割り当てることはできません。" -#: netbox/dcim/models/devices.py:886 +#: netbox/dcim/models/devices.py:872 msgid "" "Child device types cannot be assigned to a rack face. This is an attribute " "of the parent device." msgstr "子デバイスタイプをラックフェースに割り当てることはできません。これは親デバイスの属性です。" -#: netbox/dcim/models/devices.py:893 +#: netbox/dcim/models/devices.py:879 msgid "" "Child device types cannot be assigned to a rack position. This is an " "attribute of the parent device." msgstr "子デバイスタイプをラックポジションに割り当てることはできません。これは親デバイスの属性です。" -#: netbox/dcim/models/devices.py:907 +#: netbox/dcim/models/devices.py:893 #, python-brace-format msgid "" "U{position} is already occupied or does not have sufficient space to " @@ -6089,22 +6608,22 @@ msgstr "" "U{position} が既に占有されているか、このデバイスタイプを収容するのに十分なスペースがありません: {device_type} " "({u_height}U)" -#: netbox/dcim/models/devices.py:922 +#: netbox/dcim/models/devices.py:908 #, python-brace-format msgid "{ip} is not an IPv4 address." msgstr "{ip} は IPv4 アドレスではありません。" -#: netbox/dcim/models/devices.py:931 netbox/dcim/models/devices.py:946 +#: netbox/dcim/models/devices.py:920 netbox/dcim/models/devices.py:938 #, python-brace-format msgid "The specified IP address ({ip}) is not assigned to this device." msgstr "指定された IP アドレス ({ip}) はこのデバイスに割り当てられていません。" -#: netbox/dcim/models/devices.py:937 +#: netbox/dcim/models/devices.py:926 #, python-brace-format msgid "{ip} is not an IPv6 address." msgstr "{ip} IPv6 アドレスではありません。" -#: netbox/dcim/models/devices.py:964 +#: netbox/dcim/models/devices.py:956 #, python-brace-format msgid "" "The assigned platform is limited to {platform_manufacturer} device types, " @@ -6113,12 +6632,17 @@ msgstr "" "割当られたプラットフォームは{platform_manufacturer} のデバイスタイプに限定されます 。しかし、このデバイスのタイプは " "{devicetype_manufacturer}に属します。" -#: netbox/dcim/models/devices.py:975 +#: netbox/dcim/models/devices.py:967 #, python-brace-format msgid "The assigned cluster belongs to a different site ({site})" msgstr "割当クラスタは別のサイトに属しています ({site})" -#: netbox/dcim/models/devices.py:983 +#: netbox/dcim/models/devices.py:974 +#, python-brace-format +msgid "The assigned cluster belongs to a different location ({location})" +msgstr "割り当てられたクラスターは別の場所に属しています ({location})" + +#: netbox/dcim/models/devices.py:982 msgid "A device assigned to a virtual chassis must have its position defined." msgstr "仮想シャーシに割当られたデバイスには、その位置が定義されている必要があります。" @@ -6129,86 +6653,93 @@ msgid "" "is currently designated as its master." msgstr "デバイスを仮想シャーシから削除できない {virtual_chassis} 現在マスターとして指定されているからです。" -#: netbox/dcim/models/devices.py:1196 +#: netbox/dcim/models/devices.py:1204 msgid "module" msgstr "モジュール" -#: netbox/dcim/models/devices.py:1197 +#: netbox/dcim/models/devices.py:1205 msgid "modules" msgstr "モジュール" -#: netbox/dcim/models/devices.py:1213 +#: netbox/dcim/models/devices.py:1218 #, python-brace-format msgid "" "Module must be installed within a module bay belonging to the assigned " "device ({device})." msgstr "モジュールは、割当デバイスに属するモジュールベイ内に取り付ける必要があります ({device})。" -#: netbox/dcim/models/devices.py:1339 +#: netbox/dcim/models/devices.py:1346 msgid "domain" msgstr "ドメイン" -#: netbox/dcim/models/devices.py:1352 netbox/dcim/models/devices.py:1353 +#: netbox/dcim/models/devices.py:1359 netbox/dcim/models/devices.py:1360 msgid "virtual chassis" msgstr "バーチャルシャーシ" -#: netbox/dcim/models/devices.py:1368 +#: netbox/dcim/models/devices.py:1372 #, python-brace-format msgid "" "The selected master ({master}) is not assigned to this virtual chassis." msgstr "選択したマスター ({master}) はこの仮想シャーシに割り当てられていません。" -#: netbox/dcim/models/devices.py:1384 +#: netbox/dcim/models/devices.py:1388 #, python-brace-format msgid "" "Unable to delete virtual chassis {self}. There are member interfaces which " "form a cross-chassis LAG interfaces." msgstr "バーチャルシャーシ{self}を削除できません 。クロスシャーシ LAG インタフェースを形成するメンバーインタフェースがあります。" -#: netbox/dcim/models/devices.py:1409 netbox/vpn/models/l2vpn.py:37 +#: netbox/dcim/models/devices.py:1414 netbox/vpn/models/l2vpn.py:37 msgid "identifier" msgstr "識別子" -#: netbox/dcim/models/devices.py:1410 +#: netbox/dcim/models/devices.py:1415 msgid "Numeric identifier unique to the parent device" msgstr "親デバイスに固有の数値識別子" -#: netbox/dcim/models/devices.py:1438 netbox/extras/models/customfields.py:225 +#: netbox/dcim/models/devices.py:1443 netbox/extras/models/customfields.py:225 #: netbox/extras/models/models.py:107 netbox/extras/models/models.py:694 -#: netbox/netbox/models/__init__.py:115 +#: netbox/netbox/models/__init__.py:120 msgid "comments" msgstr "コメント" -#: netbox/dcim/models/devices.py:1454 +#: netbox/dcim/models/devices.py:1459 msgid "virtual device context" msgstr "仮想デバイスコンテキスト" -#: netbox/dcim/models/devices.py:1455 +#: netbox/dcim/models/devices.py:1460 msgid "virtual device contexts" msgstr "仮想デバイスコンテキスト" -#: netbox/dcim/models/devices.py:1487 +#: netbox/dcim/models/devices.py:1489 #, python-brace-format msgid "{ip} is not an IPv{family} address." msgstr "{ip}は IPv{family}アドレスではありません。" -#: netbox/dcim/models/devices.py:1493 +#: netbox/dcim/models/devices.py:1495 msgid "Primary IP address must belong to an interface on the assigned device." msgstr "プライマリ IP アドレスは、割当デバイスのインタフェースに属している必要があります。" -#: netbox/dcim/models/mixins.py:15 netbox/extras/models/configs.py:41 -#: netbox/extras/models/models.py:313 netbox/extras/models/models.py:522 -#: netbox/extras/models/search.py:48 netbox/ipam/models/ip.py:194 -msgid "weight" -msgstr "重量" +#: netbox/dcim/models/devices.py:1527 +msgid "MAC addresses" +msgstr "MAC アドレス" -#: netbox/dcim/models/mixins.py:22 -msgid "weight unit" -msgstr "重量単位" +#: netbox/dcim/models/devices.py:1559 +msgid "" +"Cannot unassign MAC Address while it is designated as the primary MAC for an" +" object" +msgstr "オブジェクトのプライマリ MAC として指定されている間は、MAC アドレスの割り当てを解除できません" -#: netbox/dcim/models/mixins.py:51 -msgid "Must specify a unit when setting a weight" -msgstr "重量を設定するときは単位を指定する必要があります" +#: netbox/dcim/models/devices.py:1563 +msgid "" +"Cannot reassign MAC Address while it is designated as the primary MAC for an" +" object" +msgstr "オブジェクトのプライマリ MAC として指定されている間は MAC アドレスを再割り当てできません" + +#: netbox/dcim/models/mixins.py:94 +#, python-brace-format +msgid "Please select a {scope_type}." +msgstr "選択してください {scope_type}。" #: netbox/dcim/models/power.py:55 msgid "power panel" @@ -6218,49 +6749,49 @@ msgstr "電源盤" msgid "power panels" msgstr "電源盤" -#: netbox/dcim/models/power.py:70 +#: netbox/dcim/models/power.py:67 #, python-brace-format msgid "" "Location {location} ({location_site}) is in a different site than {site}" msgstr "ロケーション {location} ({location_site}) は{site}とは別のサイトにあります " -#: netbox/dcim/models/power.py:108 +#: netbox/dcim/models/power.py:106 msgid "supply" msgstr "供給" -#: netbox/dcim/models/power.py:114 +#: netbox/dcim/models/power.py:112 msgid "phase" msgstr "電力相" -#: netbox/dcim/models/power.py:120 +#: netbox/dcim/models/power.py:118 msgid "voltage" msgstr "電圧" -#: netbox/dcim/models/power.py:125 +#: netbox/dcim/models/power.py:123 msgid "amperage" msgstr "アンペア数" -#: netbox/dcim/models/power.py:130 +#: netbox/dcim/models/power.py:128 msgid "max utilization" msgstr "最大使用率" -#: netbox/dcim/models/power.py:133 +#: netbox/dcim/models/power.py:131 msgid "Maximum permissible draw (percentage)" msgstr "最大許容電力 (パーセンテージ)" -#: netbox/dcim/models/power.py:136 +#: netbox/dcim/models/power.py:134 msgid "available power" msgstr "使用可能な電力" -#: netbox/dcim/models/power.py:164 +#: netbox/dcim/models/power.py:162 msgid "power feed" msgstr "電源タップ" -#: netbox/dcim/models/power.py:165 +#: netbox/dcim/models/power.py:163 msgid "power feeds" msgstr "電源タップ" -#: netbox/dcim/models/power.py:179 +#: netbox/dcim/models/power.py:174 #, python-brace-format msgid "" "Rack {rack} ({rack_site}) and power panel {powerpanel} ({powerpanel_site}) " @@ -6268,55 +6799,55 @@ msgid "" msgstr "" "ラック {rack} ({rack_site}) と電源盤 {powerpanel} ({powerpanel_site}) は別のサイトにあります。" -#: netbox/dcim/models/power.py:190 +#: netbox/dcim/models/power.py:185 msgid "Voltage cannot be negative for AC supply" msgstr "AC 電源の電圧を負にすることはできません" -#: netbox/dcim/models/racks.py:47 +#: netbox/dcim/models/racks.py:46 msgid "width" msgstr "幅" -#: netbox/dcim/models/racks.py:48 +#: netbox/dcim/models/racks.py:47 msgid "Rail-to-rail width" msgstr "レール間の幅" -#: netbox/dcim/models/racks.py:56 +#: netbox/dcim/models/racks.py:55 msgid "Height in rack units" msgstr "ラックユニットの高さ" -#: netbox/dcim/models/racks.py:60 +#: netbox/dcim/models/racks.py:59 msgid "starting unit" msgstr "開始ユニット" -#: netbox/dcim/models/racks.py:62 +#: netbox/dcim/models/racks.py:61 msgid "Starting unit for rack" msgstr "ラック用開始ユニット" -#: netbox/dcim/models/racks.py:66 +#: netbox/dcim/models/racks.py:65 msgid "descending units" msgstr "降順" -#: netbox/dcim/models/racks.py:67 +#: netbox/dcim/models/racks.py:66 msgid "Units are numbered top-to-bottom" msgstr "ユニットには上から下に番号が付けられています" -#: netbox/dcim/models/racks.py:72 +#: netbox/dcim/models/racks.py:71 msgid "outer width" msgstr "外形の幅" -#: netbox/dcim/models/racks.py:75 +#: netbox/dcim/models/racks.py:74 msgid "Outer dimension of rack (width)" msgstr "ラックの外形寸法(幅)" -#: netbox/dcim/models/racks.py:78 +#: netbox/dcim/models/racks.py:77 msgid "outer depth" msgstr "外形の奥行" -#: netbox/dcim/models/racks.py:81 +#: netbox/dcim/models/racks.py:80 msgid "Outer dimension of rack (depth)" msgstr "ラックの外形寸法(奥行き)" -#: netbox/dcim/models/racks.py:84 +#: netbox/dcim/models/racks.py:83 msgid "outer unit" msgstr "外形の単位" @@ -6338,7 +6869,7 @@ msgstr "最大重量" msgid "Maximum load capacity for the rack" msgstr "ラックの最大積載量" -#: netbox/dcim/models/racks.py:125 netbox/dcim/models/racks.py:252 +#: netbox/dcim/models/racks.py:125 netbox/dcim/models/racks.py:247 msgid "form factor" msgstr "フォームファクタ" @@ -6350,180 +6881,180 @@ msgstr "ラックタイプ" msgid "rack types" msgstr "ラックタイプ" -#: netbox/dcim/models/racks.py:180 netbox/dcim/models/racks.py:379 +#: netbox/dcim/models/racks.py:177 netbox/dcim/models/racks.py:368 msgid "Must specify a unit when setting an outer width/depth" msgstr "外形の幅/奥行きを設定する場合は単位を指定する必要があります" -#: netbox/dcim/models/racks.py:184 netbox/dcim/models/racks.py:383 +#: netbox/dcim/models/racks.py:181 netbox/dcim/models/racks.py:372 msgid "Must specify a unit when setting a maximum weight" msgstr "最大重量を設定する場合は単位を指定する必要があります" -#: netbox/dcim/models/racks.py:230 +#: netbox/dcim/models/racks.py:227 msgid "rack role" msgstr "ラックロール" -#: netbox/dcim/models/racks.py:231 +#: netbox/dcim/models/racks.py:228 msgid "rack roles" msgstr "ラックロール" -#: netbox/dcim/models/racks.py:274 +#: netbox/dcim/models/racks.py:265 msgid "facility ID" msgstr "ファシリティ ID" -#: netbox/dcim/models/racks.py:275 +#: netbox/dcim/models/racks.py:266 msgid "Locally-assigned identifier" msgstr "ローカル識別子" -#: netbox/dcim/models/racks.py:308 netbox/ipam/forms/bulk_import.py:201 -#: netbox/ipam/forms/bulk_import.py:266 netbox/ipam/forms/bulk_import.py:301 -#: netbox/ipam/forms/bulk_import.py:483 -#: netbox/virtualization/forms/bulk_import.py:112 +#: netbox/dcim/models/racks.py:299 netbox/ipam/forms/bulk_import.py:197 +#: netbox/ipam/forms/bulk_import.py:265 netbox/ipam/forms/bulk_import.py:300 +#: netbox/ipam/forms/bulk_import.py:482 +#: netbox/virtualization/forms/bulk_import.py:118 msgid "Functional role" msgstr "機能的ロール" -#: netbox/dcim/models/racks.py:321 +#: netbox/dcim/models/racks.py:312 msgid "A unique tag used to identify this rack" msgstr "このラックの識別に使用される固有のタグ" -#: netbox/dcim/models/racks.py:359 +#: netbox/dcim/models/racks.py:351 msgid "rack" msgstr "ラック" -#: netbox/dcim/models/racks.py:360 +#: netbox/dcim/models/racks.py:352 msgid "racks" msgstr "ラック" -#: netbox/dcim/models/racks.py:375 +#: netbox/dcim/models/racks.py:364 #, python-brace-format msgid "Assigned location must belong to parent site ({site})." msgstr "割当ロケーションは親サイト ({site}) に属している必要があります。" -#: netbox/dcim/models/racks.py:393 +#: netbox/dcim/models/racks.py:387 #, python-brace-format msgid "" "Rack must be at least {min_height}U tall to house currently installed " "devices." msgstr "現在取付られているデバイスを収納するには、ラックは少なくとも{min_height} U 必要です 。" -#: netbox/dcim/models/racks.py:400 +#: netbox/dcim/models/racks.py:396 #, python-brace-format msgid "" "Rack unit numbering must begin at {position} or less to house currently " "installed devices." msgstr "現在取付られているデバイスを収納するには、ラックユニット番号は {position} 以下で始まる必要があります 。" -#: netbox/dcim/models/racks.py:408 +#: netbox/dcim/models/racks.py:404 #, python-brace-format msgid "Location must be from the same site, {site}." msgstr "ロケーションは同じサイト {site} のものでなければなりません。 。" -#: netbox/dcim/models/racks.py:670 +#: netbox/dcim/models/racks.py:666 msgid "units" msgstr "単位" -#: netbox/dcim/models/racks.py:696 +#: netbox/dcim/models/racks.py:692 msgid "rack reservation" msgstr "ラック予約" -#: netbox/dcim/models/racks.py:697 +#: netbox/dcim/models/racks.py:693 msgid "rack reservations" msgstr "ラック予約" -#: netbox/dcim/models/racks.py:714 +#: netbox/dcim/models/racks.py:707 #, python-brace-format msgid "Invalid unit(s) for {height}U rack: {unit_list}" msgstr " {height}U ラックのユニットが無効です: {unit_list}" -#: netbox/dcim/models/racks.py:727 +#: netbox/dcim/models/racks.py:720 #, python-brace-format msgid "The following units have already been reserved: {unit_list}" msgstr "次のユニットはすでに予約されています: {unit_list}" -#: netbox/dcim/models/sites.py:49 +#: netbox/dcim/models/sites.py:53 msgid "A top-level region with this name already exists." msgstr "同名のトップレベルリージョンが存在します。" -#: netbox/dcim/models/sites.py:59 +#: netbox/dcim/models/sites.py:63 msgid "A top-level region with this slug already exists." msgstr "このslugを含むトップレベルリージョンは存在します。" -#: netbox/dcim/models/sites.py:62 +#: netbox/dcim/models/sites.py:66 msgid "region" msgstr "領域" -#: netbox/dcim/models/sites.py:63 +#: netbox/dcim/models/sites.py:67 msgid "regions" msgstr "リージョン" -#: netbox/dcim/models/sites.py:102 +#: netbox/dcim/models/sites.py:109 msgid "A top-level site group with this name already exists." msgstr "同名のトップレベルサイトグループが存在します。" -#: netbox/dcim/models/sites.py:112 +#: netbox/dcim/models/sites.py:119 msgid "A top-level site group with this slug already exists." msgstr "このslugを含むトップレベルサイトグループが存在します。" -#: netbox/dcim/models/sites.py:115 +#: netbox/dcim/models/sites.py:122 msgid "site group" msgstr "サイトグループ" -#: netbox/dcim/models/sites.py:116 +#: netbox/dcim/models/sites.py:123 msgid "site groups" msgstr "サイトグループ" -#: netbox/dcim/models/sites.py:141 +#: netbox/dcim/models/sites.py:145 msgid "Full name of the site" msgstr "サイトのフルネーム" -#: netbox/dcim/models/sites.py:181 netbox/dcim/models/sites.py:279 +#: netbox/dcim/models/sites.py:181 netbox/dcim/models/sites.py:283 msgid "facility" msgstr "施設" -#: netbox/dcim/models/sites.py:184 netbox/dcim/models/sites.py:282 +#: netbox/dcim/models/sites.py:184 netbox/dcim/models/sites.py:286 msgid "Local facility ID or description" msgstr "ローカルファシリティ ID または説明" -#: netbox/dcim/models/sites.py:195 +#: netbox/dcim/models/sites.py:196 msgid "physical address" msgstr "物理アドレス" -#: netbox/dcim/models/sites.py:198 +#: netbox/dcim/models/sites.py:199 msgid "Physical location of the building" msgstr "建物の物理的位置" -#: netbox/dcim/models/sites.py:201 +#: netbox/dcim/models/sites.py:202 msgid "shipping address" msgstr "配送先住所" -#: netbox/dcim/models/sites.py:204 +#: netbox/dcim/models/sites.py:205 msgid "If different from the physical address" msgstr "実際の住所と異なる場合" -#: netbox/dcim/models/sites.py:238 +#: netbox/dcim/models/sites.py:245 msgid "site" msgstr "サイト" -#: netbox/dcim/models/sites.py:239 +#: netbox/dcim/models/sites.py:246 msgid "sites" msgstr "サイト" -#: netbox/dcim/models/sites.py:309 +#: netbox/dcim/models/sites.py:319 msgid "A location with this name already exists within the specified site." msgstr "この名前のロケーションは、サイト内に存在します。" -#: netbox/dcim/models/sites.py:319 +#: netbox/dcim/models/sites.py:329 msgid "A location with this slug already exists within the specified site." msgstr "このslugのロケーションは、サイト内に存在します。" -#: netbox/dcim/models/sites.py:322 +#: netbox/dcim/models/sites.py:332 msgid "location" msgstr "ロケーション" -#: netbox/dcim/models/sites.py:323 +#: netbox/dcim/models/sites.py:333 msgid "locations" msgstr "ロケーション" -#: netbox/dcim/models/sites.py:337 +#: netbox/dcim/models/sites.py:344 #, python-brace-format msgid "Parent location ({parent}) must belong to the same site ({site})." msgstr "親のロケーション ({parent}) は同じサイト ({site}) に属している必要があります。" @@ -6536,11 +7067,11 @@ msgstr "終端 A" msgid "Termination B" msgstr "終端 B" -#: netbox/dcim/tables/cables.py:66 netbox/wireless/tables/wirelesslink.py:23 +#: netbox/dcim/tables/cables.py:66 netbox/wireless/tables/wirelesslink.py:22 msgid "Device A" msgstr "デバイス A" -#: netbox/dcim/tables/cables.py:72 netbox/wireless/tables/wirelesslink.py:32 +#: netbox/dcim/tables/cables.py:72 netbox/wireless/tables/wirelesslink.py:31 msgid "Device B" msgstr "デバイス B" @@ -6574,97 +7105,91 @@ msgstr "サイト B" msgid "Reachable" msgstr "到達可能" -#: netbox/dcim/tables/devices.py:58 netbox/dcim/tables/devices.py:106 -#: netbox/dcim/tables/racks.py:150 netbox/dcim/tables/sites.py:105 -#: netbox/dcim/tables/sites.py:148 netbox/extras/tables/tables.py:545 +#: netbox/dcim/tables/devices.py:69 netbox/dcim/tables/devices.py:117 +#: netbox/dcim/tables/racks.py:149 netbox/dcim/tables/sites.py:104 +#: netbox/dcim/tables/sites.py:147 netbox/extras/tables/tables.py:545 #: netbox/netbox/navigation/menu.py:69 netbox/netbox/navigation/menu.py:73 #: netbox/netbox/navigation/menu.py:75 #: netbox/virtualization/forms/model_forms.py:122 -#: netbox/virtualization/tables/clusters.py:83 -#: netbox/virtualization/views.py:204 +#: netbox/virtualization/tables/clusters.py:87 +#: netbox/virtualization/views.py:216 msgid "Devices" msgstr "デバイス" -#: netbox/dcim/tables/devices.py:63 netbox/dcim/tables/devices.py:111 -#: netbox/virtualization/tables/clusters.py:88 +#: netbox/dcim/tables/devices.py:74 netbox/dcim/tables/devices.py:122 +#: netbox/virtualization/tables/clusters.py:92 msgid "VMs" msgstr "VM" -#: netbox/dcim/tables/devices.py:100 netbox/dcim/tables/devices.py:216 -#: netbox/extras/forms/model_forms.py:630 +#: netbox/dcim/tables/devices.py:111 netbox/dcim/tables/devices.py:227 +#: netbox/extras/forms/model_forms.py:644 #: netbox/templates/dcim/device.html:112 -#: netbox/templates/dcim/device/render_config.html:11 -#: netbox/templates/dcim/device/render_config.html:14 #: netbox/templates/dcim/devicerole.html:44 #: netbox/templates/dcim/platform.html:41 #: netbox/templates/extras/configtemplate.html:10 +#: netbox/templates/extras/object_render_config.html:12 +#: netbox/templates/extras/object_render_config.html:15 #: netbox/templates/virtualization/virtualmachine.html:48 -#: netbox/templates/virtualization/virtualmachine/render_config.html:11 -#: netbox/templates/virtualization/virtualmachine/render_config.html:14 -#: netbox/virtualization/tables/virtualmachines.py:107 +#: netbox/virtualization/tables/virtualmachines.py:77 msgid "Config Template" msgstr "設定テンプレート" -#: netbox/dcim/tables/devices.py:150 netbox/templates/dcim/sitegroup.html:26 -msgid "Site Group" -msgstr "サイトグループ" - -#: netbox/dcim/tables/devices.py:187 netbox/dcim/tables/devices.py:1068 -#: netbox/ipam/forms/bulk_import.py:527 netbox/ipam/forms/model_forms.py:306 -#: netbox/ipam/forms/model_forms.py:319 netbox/ipam/tables/ip.py:356 -#: netbox/ipam/tables/ip.py:423 netbox/ipam/tables/ip.py:446 +#: netbox/dcim/tables/devices.py:198 netbox/dcim/tables/devices.py:1100 +#: netbox/ipam/forms/bulk_import.py:562 netbox/ipam/forms/model_forms.py:316 +#: netbox/ipam/forms/model_forms.py:329 netbox/ipam/tables/ip.py:308 +#: netbox/ipam/tables/ip.py:375 netbox/ipam/tables/ip.py:398 #: netbox/templates/ipam/ipaddress.html:11 -#: netbox/virtualization/tables/virtualmachines.py:95 +#: netbox/virtualization/tables/virtualmachines.py:65 msgid "IP Address" msgstr "IP アドレス" -#: netbox/dcim/tables/devices.py:191 netbox/dcim/tables/devices.py:1072 -#: netbox/virtualization/tables/virtualmachines.py:86 +#: netbox/dcim/tables/devices.py:202 netbox/dcim/tables/devices.py:1104 +#: netbox/virtualization/tables/virtualmachines.py:56 msgid "IPv4 Address" msgstr "IPv4 アドレス" -#: netbox/dcim/tables/devices.py:195 netbox/dcim/tables/devices.py:1076 -#: netbox/virtualization/tables/virtualmachines.py:90 +#: netbox/dcim/tables/devices.py:206 netbox/dcim/tables/devices.py:1108 +#: netbox/virtualization/tables/virtualmachines.py:60 msgid "IPv6 Address" msgstr "IPv6 アドレス" -#: netbox/dcim/tables/devices.py:210 +#: netbox/dcim/tables/devices.py:221 msgid "VC Position" msgstr "VC ポジション" -#: netbox/dcim/tables/devices.py:213 +#: netbox/dcim/tables/devices.py:224 msgid "VC Priority" msgstr "VC プライオリティ" -#: netbox/dcim/tables/devices.py:220 netbox/templates/dcim/device_edit.html:38 +#: netbox/dcim/tables/devices.py:231 netbox/templates/dcim/device_edit.html:38 #: netbox/templates/dcim/devicebay_populate.html:16 msgid "Parent Device" msgstr "親デバイス" -#: netbox/dcim/tables/devices.py:225 +#: netbox/dcim/tables/devices.py:236 msgid "Position (Device Bay)" msgstr "位置 (デバイスベイ)" -#: netbox/dcim/tables/devices.py:234 +#: netbox/dcim/tables/devices.py:245 msgid "Console ports" msgstr "コンソールポート" -#: netbox/dcim/tables/devices.py:237 +#: netbox/dcim/tables/devices.py:248 msgid "Console server ports" msgstr "コンソールサーバポート" -#: netbox/dcim/tables/devices.py:240 +#: netbox/dcim/tables/devices.py:251 msgid "Power ports" msgstr "電源ポート" -#: netbox/dcim/tables/devices.py:243 +#: netbox/dcim/tables/devices.py:254 msgid "Power outlets" msgstr "電源コンセント" -#: netbox/dcim/tables/devices.py:246 netbox/dcim/tables/devices.py:1081 -#: netbox/dcim/tables/devicetypes.py:128 netbox/dcim/views.py:1040 -#: netbox/dcim/views.py:1279 netbox/dcim/views.py:1975 -#: netbox/netbox/navigation/menu.py:94 netbox/netbox/navigation/menu.py:250 +#: netbox/dcim/tables/devices.py:257 netbox/dcim/tables/devices.py:1113 +#: netbox/dcim/tables/devicetypes.py:133 netbox/dcim/views.py:1144 +#: netbox/dcim/views.py:1388 netbox/dcim/views.py:2139 +#: netbox/netbox/navigation/menu.py:94 netbox/netbox/navigation/menu.py:258 #: netbox/templates/dcim/device/base.html:37 #: netbox/templates/dcim/device_list.html:43 #: netbox/templates/dcim/devicetype/base.html:34 @@ -6674,35 +7199,35 @@ msgstr "電源コンセント" #: netbox/templates/dcim/virtualdevicecontext.html:81 #: netbox/templates/virtualization/virtualmachine/base.html:27 #: netbox/templates/virtualization/virtualmachine_list.html:14 -#: netbox/virtualization/tables/virtualmachines.py:101 -#: netbox/virtualization/views.py:364 netbox/wireless/tables/wirelesslan.py:55 +#: netbox/virtualization/tables/virtualmachines.py:71 +#: netbox/virtualization/views.py:381 netbox/wireless/tables/wirelesslan.py:63 msgid "Interfaces" msgstr "インタフェース" -#: netbox/dcim/tables/devices.py:249 +#: netbox/dcim/tables/devices.py:260 msgid "Front ports" msgstr "前面ポート" -#: netbox/dcim/tables/devices.py:255 +#: netbox/dcim/tables/devices.py:266 msgid "Device bays" msgstr "デバイスベイ" -#: netbox/dcim/tables/devices.py:258 +#: netbox/dcim/tables/devices.py:269 msgid "Module bays" msgstr "モジュールベイ" -#: netbox/dcim/tables/devices.py:261 +#: netbox/dcim/tables/devices.py:272 msgid "Inventory items" msgstr "在庫品目" -#: netbox/dcim/tables/devices.py:305 netbox/dcim/tables/modules.py:57 +#: netbox/dcim/tables/devices.py:315 netbox/dcim/tables/modules.py:57 #: netbox/templates/dcim/modulebay.html:17 msgid "Module Bay" msgstr "モジュールベイ" -#: netbox/dcim/tables/devices.py:318 netbox/dcim/tables/devicetypes.py:47 -#: netbox/dcim/tables/devicetypes.py:143 netbox/dcim/views.py:1115 -#: netbox/dcim/views.py:2073 netbox/netbox/navigation/menu.py:103 +#: netbox/dcim/tables/devices.py:328 netbox/dcim/tables/devicetypes.py:52 +#: netbox/dcim/tables/devicetypes.py:148 netbox/dcim/views.py:1219 +#: netbox/dcim/views.py:2237 netbox/netbox/navigation/menu.py:103 #: netbox/templates/dcim/device/base.html:52 #: netbox/templates/dcim/device_list.html:71 #: netbox/templates/dcim/devicetype/base.html:49 @@ -6711,124 +7236,133 @@ msgstr "モジュールベイ" msgid "Inventory Items" msgstr "在庫品目" -#: netbox/dcim/tables/devices.py:333 +#: netbox/dcim/tables/devices.py:343 msgid "Cable Color" msgstr "ケーブル色" -#: netbox/dcim/tables/devices.py:339 +#: netbox/dcim/tables/devices.py:349 msgid "Link Peers" msgstr "対向" -#: netbox/dcim/tables/devices.py:342 +#: netbox/dcim/tables/devices.py:352 msgid "Mark Connected" msgstr "接続済みとしてマークする" -#: netbox/dcim/tables/devices.py:461 +#: netbox/dcim/tables/devices.py:471 msgid "Maximum draw (W)" msgstr "最大電力 (W)" -#: netbox/dcim/tables/devices.py:464 +#: netbox/dcim/tables/devices.py:474 msgid "Allocated draw (W)" msgstr "割当電力 (W)" -#: netbox/dcim/tables/devices.py:558 netbox/ipam/forms/model_forms.py:734 -#: netbox/ipam/tables/fhrp.py:28 netbox/ipam/views.py:596 -#: netbox/ipam/views.py:696 netbox/netbox/navigation/menu.py:158 -#: netbox/netbox/navigation/menu.py:160 -#: netbox/templates/dcim/interface.html:339 +#: netbox/dcim/tables/devices.py:572 netbox/ipam/forms/model_forms.py:784 +#: netbox/ipam/tables/fhrp.py:28 netbox/ipam/views.py:633 +#: netbox/ipam/views.py:738 netbox/netbox/navigation/menu.py:164 +#: netbox/netbox/navigation/menu.py:166 +#: netbox/templates/dcim/interface.html:396 #: netbox/templates/ipam/ipaddress_bulk_add.html:15 #: netbox/templates/ipam/service.html:40 -#: netbox/templates/virtualization/vminterface.html:85 +#: netbox/templates/virtualization/vminterface.html:101 #: netbox/vpn/tables/tunnels.py:98 msgid "IP Addresses" msgstr "IP アドレス" -#: netbox/dcim/tables/devices.py:564 netbox/netbox/navigation/menu.py:202 +#: netbox/dcim/tables/devices.py:578 netbox/netbox/navigation/menu.py:210 #: netbox/templates/ipam/inc/panels/fhrp_groups.html:6 msgid "FHRP Groups" msgstr "FHRP グループ" -#: netbox/dcim/tables/devices.py:576 netbox/templates/dcim/interface.html:89 -#: netbox/templates/virtualization/vminterface.html:67 +#: netbox/dcim/tables/devices.py:590 netbox/templates/dcim/interface.html:95 +#: netbox/templates/virtualization/vminterface.html:59 #: netbox/templates/vpn/tunnel.html:18 #: netbox/templates/vpn/tunneltermination.html:13 #: netbox/vpn/forms/bulk_edit.py:76 netbox/vpn/forms/bulk_import.py:76 #: netbox/vpn/forms/filtersets.py:42 netbox/vpn/forms/filtersets.py:82 -#: netbox/vpn/forms/model_forms.py:60 netbox/vpn/forms/model_forms.py:145 +#: netbox/vpn/forms/model_forms.py:61 netbox/vpn/forms/model_forms.py:146 #: netbox/vpn/tables/tunnels.py:78 msgid "Tunnel" msgstr "トンネル" -#: netbox/dcim/tables/devices.py:604 netbox/dcim/tables/devicetypes.py:227 +#: netbox/dcim/tables/devices.py:626 netbox/dcim/tables/devicetypes.py:234 #: netbox/templates/dcim/interface.html:65 msgid "Management Only" msgstr "管理のみ" -#: netbox/dcim/tables/devices.py:623 +#: netbox/dcim/tables/devices.py:645 msgid "VDCs" msgstr "VDC" -#: netbox/dcim/tables/devices.py:873 netbox/templates/dcim/modulebay.html:53 +#: netbox/dcim/tables/devices.py:652 netbox/templates/dcim/interface.html:163 +msgid "Virtual Circuit" +msgstr "バーチャルサーキット" + +#: netbox/dcim/tables/devices.py:904 netbox/templates/dcim/modulebay.html:53 msgid "Installed Module" msgstr "取付済みモジュール" -#: netbox/dcim/tables/devices.py:876 +#: netbox/dcim/tables/devices.py:907 msgid "Module Serial" msgstr "モジュールシリアル番号" -#: netbox/dcim/tables/devices.py:880 +#: netbox/dcim/tables/devices.py:911 msgid "Module Asset Tag" msgstr "モジュール資産タグ" -#: netbox/dcim/tables/devices.py:889 +#: netbox/dcim/tables/devices.py:920 msgid "Module Status" msgstr "モジュールステータス" -#: netbox/dcim/tables/devices.py:944 netbox/dcim/tables/devicetypes.py:312 -#: netbox/templates/dcim/inventoryitem.html:40 +#: netbox/dcim/tables/devices.py:974 netbox/dcim/tables/devicetypes.py:319 +#: netbox/templates/dcim/inventoryitem.html:44 msgid "Component" msgstr "構成要素" -#: netbox/dcim/tables/devices.py:1000 +#: netbox/dcim/tables/devices.py:1032 msgid "Items" msgstr "アイテム" -#: netbox/dcim/tables/devicetypes.py:37 netbox/netbox/navigation/menu.py:84 +#: netbox/dcim/tables/devicetypes.py:37 netbox/netbox/navigation/menu.py:60 +#: netbox/netbox/navigation/menu.py:62 +msgid "Rack Types" +msgstr "ラックタイプ" + +#: netbox/dcim/tables/devicetypes.py:42 netbox/netbox/navigation/menu.py:84 #: netbox/netbox/navigation/menu.py:86 msgid "Device Types" msgstr "デバイスタイプ" -#: netbox/dcim/tables/devicetypes.py:42 netbox/netbox/navigation/menu.py:87 +#: netbox/dcim/tables/devicetypes.py:47 netbox/netbox/navigation/menu.py:87 msgid "Module Types" msgstr "モジュールタイプ" -#: netbox/dcim/tables/devicetypes.py:52 netbox/extras/forms/filtersets.py:371 -#: netbox/extras/forms/model_forms.py:537 netbox/extras/tables/tables.py:540 +#: netbox/dcim/tables/devicetypes.py:57 netbox/extras/forms/filtersets.py:378 +#: netbox/extras/forms/model_forms.py:551 netbox/extras/tables/tables.py:540 #: netbox/netbox/navigation/menu.py:78 msgid "Platforms" msgstr "プラットフォーム" -#: netbox/dcim/tables/devicetypes.py:84 +#: netbox/dcim/tables/devicetypes.py:89 #: netbox/templates/dcim/devicetype.html:29 msgid "Default Platform" msgstr "デフォルトプラットフォーム" -#: netbox/dcim/tables/devicetypes.py:88 +#: netbox/dcim/tables/devicetypes.py:93 #: netbox/templates/dcim/devicetype.html:45 msgid "Full Depth" msgstr "奥行きをすべて利用する" -#: netbox/dcim/tables/devicetypes.py:98 +#: netbox/dcim/tables/devicetypes.py:103 msgid "U Height" msgstr "ユニット数" -#: netbox/dcim/tables/devicetypes.py:113 netbox/dcim/tables/modules.py:26 +#: netbox/dcim/tables/devicetypes.py:118 netbox/dcim/tables/modules.py:26 #: netbox/dcim/tables/racks.py:89 msgid "Instances" msgstr "インスタンス" -#: netbox/dcim/tables/devicetypes.py:116 netbox/dcim/views.py:980 -#: netbox/dcim/views.py:1219 netbox/dcim/views.py:1911 +#: netbox/dcim/tables/devicetypes.py:121 netbox/dcim/views.py:1084 +#: netbox/dcim/views.py:1328 netbox/dcim/views.py:2075 #: netbox/netbox/navigation/menu.py:97 #: netbox/templates/dcim/device/base.html:25 #: netbox/templates/dcim/device_list.html:15 @@ -6838,8 +7372,8 @@ msgstr "インスタンス" msgid "Console Ports" msgstr "コンソールポート" -#: netbox/dcim/tables/devicetypes.py:119 netbox/dcim/views.py:995 -#: netbox/dcim/views.py:1234 netbox/dcim/views.py:1927 +#: netbox/dcim/tables/devicetypes.py:124 netbox/dcim/views.py:1099 +#: netbox/dcim/views.py:1343 netbox/dcim/views.py:2091 #: netbox/netbox/navigation/menu.py:98 #: netbox/templates/dcim/device/base.html:28 #: netbox/templates/dcim/device_list.html:22 @@ -6849,8 +7383,8 @@ msgstr "コンソールポート" msgid "Console Server Ports" msgstr "コンソールサーバポート" -#: netbox/dcim/tables/devicetypes.py:122 netbox/dcim/views.py:1010 -#: netbox/dcim/views.py:1249 netbox/dcim/views.py:1943 +#: netbox/dcim/tables/devicetypes.py:127 netbox/dcim/views.py:1114 +#: netbox/dcim/views.py:1358 netbox/dcim/views.py:2107 #: netbox/netbox/navigation/menu.py:99 #: netbox/templates/dcim/device/base.html:31 #: netbox/templates/dcim/device_list.html:29 @@ -6860,8 +7394,8 @@ msgstr "コンソールサーバポート" msgid "Power Ports" msgstr "電源ポート" -#: netbox/dcim/tables/devicetypes.py:125 netbox/dcim/views.py:1025 -#: netbox/dcim/views.py:1264 netbox/dcim/views.py:1959 +#: netbox/dcim/tables/devicetypes.py:130 netbox/dcim/views.py:1129 +#: netbox/dcim/views.py:1373 netbox/dcim/views.py:2123 #: netbox/netbox/navigation/menu.py:100 #: netbox/templates/dcim/device/base.html:34 #: netbox/templates/dcim/device_list.html:36 @@ -6871,8 +7405,8 @@ msgstr "電源ポート" msgid "Power Outlets" msgstr "電源コンセント" -#: netbox/dcim/tables/devicetypes.py:131 netbox/dcim/views.py:1055 -#: netbox/dcim/views.py:1294 netbox/dcim/views.py:1997 +#: netbox/dcim/tables/devicetypes.py:136 netbox/dcim/views.py:1159 +#: netbox/dcim/views.py:1403 netbox/dcim/views.py:2161 #: netbox/netbox/navigation/menu.py:95 #: netbox/templates/dcim/device/base.html:40 #: netbox/templates/dcim/devicetype/base.html:37 @@ -6881,8 +7415,8 @@ msgstr "電源コンセント" msgid "Front Ports" msgstr "前面ポート" -#: netbox/dcim/tables/devicetypes.py:134 netbox/dcim/views.py:1070 -#: netbox/dcim/views.py:1309 netbox/dcim/views.py:2013 +#: netbox/dcim/tables/devicetypes.py:139 netbox/dcim/views.py:1174 +#: netbox/dcim/views.py:1418 netbox/dcim/views.py:2177 #: netbox/netbox/navigation/menu.py:96 #: netbox/templates/dcim/device/base.html:43 #: netbox/templates/dcim/device_list.html:50 @@ -6892,16 +7426,16 @@ msgstr "前面ポート" msgid "Rear Ports" msgstr "背面ポート" -#: netbox/dcim/tables/devicetypes.py:137 netbox/dcim/views.py:1100 -#: netbox/dcim/views.py:2053 netbox/netbox/navigation/menu.py:102 +#: netbox/dcim/tables/devicetypes.py:142 netbox/dcim/views.py:1204 +#: netbox/dcim/views.py:2217 netbox/netbox/navigation/menu.py:102 #: netbox/templates/dcim/device/base.html:49 #: netbox/templates/dcim/device_list.html:57 #: netbox/templates/dcim/devicetype/base.html:46 msgid "Device Bays" msgstr "デバイスベイ" -#: netbox/dcim/tables/devicetypes.py:140 netbox/dcim/views.py:1085 -#: netbox/dcim/views.py:1324 netbox/dcim/views.py:2033 +#: netbox/dcim/tables/devicetypes.py:145 netbox/dcim/views.py:1189 +#: netbox/dcim/views.py:1433 netbox/dcim/views.py:2197 #: netbox/netbox/navigation/menu.py:101 #: netbox/templates/dcim/device/base.html:46 #: netbox/templates/dcim/device_list.html:64 @@ -6911,7 +7445,7 @@ msgstr "デバイスベイ" msgid "Module Bays" msgstr "モジュールベイ" -#: netbox/dcim/tables/power.py:36 netbox/netbox/navigation/menu.py:297 +#: netbox/dcim/tables/power.py:36 netbox/netbox/navigation/menu.py:318 #: netbox/templates/dcim/powerpanel.html:51 msgid "Power Feeds" msgstr "電源タップ" @@ -6924,109 +7458,104 @@ msgstr "最大使用率" msgid "Available Power (VA)" msgstr "使用可能な電力 (VA)" -#: netbox/dcim/tables/racks.py:30 netbox/dcim/tables/sites.py:143 +#: netbox/dcim/tables/racks.py:30 netbox/dcim/tables/sites.py:142 #: netbox/netbox/navigation/menu.py:43 netbox/netbox/navigation/menu.py:47 #: netbox/netbox/navigation/menu.py:49 msgid "Racks" msgstr "ラック" -#: netbox/dcim/tables/racks.py:63 netbox/dcim/tables/racks.py:142 +#: netbox/dcim/tables/racks.py:63 netbox/dcim/tables/racks.py:141 #: netbox/templates/dcim/device.html:318 #: netbox/templates/dcim/inc/panels/racktype_dimensions.html:14 msgid "Height" msgstr "高さ" -#: netbox/dcim/tables/racks.py:67 netbox/dcim/tables/racks.py:165 +#: netbox/dcim/tables/racks.py:67 netbox/dcim/tables/racks.py:164 #: netbox/templates/dcim/inc/panels/racktype_dimensions.html:18 msgid "Outer Width" msgstr "外形幅" -#: netbox/dcim/tables/racks.py:71 netbox/dcim/tables/racks.py:169 +#: netbox/dcim/tables/racks.py:71 netbox/dcim/tables/racks.py:168 #: netbox/templates/dcim/inc/panels/racktype_dimensions.html:28 msgid "Outer Depth" msgstr "外形奥行" -#: netbox/dcim/tables/racks.py:79 netbox/dcim/tables/racks.py:177 +#: netbox/dcim/tables/racks.py:79 netbox/dcim/tables/racks.py:176 msgid "Max Weight" msgstr "最大重量" -#: netbox/dcim/tables/racks.py:154 +#: netbox/dcim/tables/racks.py:153 msgid "Space" msgstr "スペース" #: netbox/dcim/tables/sites.py:30 netbox/dcim/tables/sites.py:57 -#: netbox/extras/forms/filtersets.py:351 -#: netbox/extras/forms/model_forms.py:517 netbox/ipam/forms/bulk_edit.py:131 -#: netbox/ipam/forms/model_forms.py:153 netbox/ipam/tables/asn.py:66 +#: netbox/extras/forms/filtersets.py:358 +#: netbox/extras/forms/model_forms.py:531 netbox/ipam/forms/bulk_edit.py:134 +#: netbox/ipam/forms/model_forms.py:159 netbox/ipam/tables/asn.py:66 #: netbox/netbox/navigation/menu.py:15 netbox/netbox/navigation/menu.py:17 msgid "Sites" msgstr "サイト" -#: netbox/dcim/tests/test_api.py:47 +#: netbox/dcim/tests/test_api.py:50 msgid "Test case must set peer_termination_type" msgstr "テストケースは peer_termination_type を設定する必要があります" -#: netbox/dcim/views.py:138 +#: netbox/dcim/views.py:137 #, python-brace-format msgid "Disconnected {count} {type}" msgstr "切断されました {count} {type}" -#: netbox/dcim/views.py:738 netbox/netbox/navigation/menu.py:51 +#: netbox/dcim/views.py:825 netbox/netbox/navigation/menu.py:51 msgid "Reservations" msgstr "予約" -#: netbox/dcim/views.py:757 netbox/templates/dcim/location.html:90 +#: netbox/dcim/views.py:844 netbox/templates/dcim/location.html:90 #: netbox/templates/dcim/site.html:140 msgid "Non-Racked Devices" msgstr "ラック搭載でないデバイス" -#: netbox/dcim/views.py:2086 netbox/extras/forms/model_forms.py:577 +#: netbox/dcim/views.py:2250 netbox/extras/forms/model_forms.py:591 #: netbox/templates/extras/configcontext.html:10 -#: netbox/virtualization/forms/model_forms.py:225 -#: netbox/virtualization/views.py:405 +#: netbox/virtualization/forms/model_forms.py:232 +#: netbox/virtualization/views.py:422 msgid "Config Context" msgstr "コンフィグコンテキスト" -#: netbox/dcim/views.py:2096 netbox/virtualization/views.py:415 +#: netbox/dcim/views.py:2260 netbox/virtualization/views.py:432 msgid "Render Config" msgstr "レンダーコンフィグ" -#: netbox/dcim/views.py:2131 netbox/virtualization/views.py:450 -#, python-brace-format -msgid "An error occurred while rendering the template: {error}" -msgstr "テンプレートをレンダリング中にエラーが発生しました: {error}" - -#: netbox/dcim/views.py:2149 netbox/extras/tables/tables.py:550 -#: netbox/netbox/navigation/menu.py:247 netbox/netbox/navigation/menu.py:249 -#: netbox/virtualization/views.py:178 +#: netbox/dcim/views.py:2273 netbox/extras/tables/tables.py:550 +#: netbox/netbox/navigation/menu.py:255 netbox/netbox/navigation/menu.py:257 +#: netbox/virtualization/views.py:190 msgid "Virtual Machines" msgstr "仮想マシン" -#: netbox/dcim/views.py:2907 +#: netbox/dcim/views.py:3106 #, python-brace-format msgid "Installed device {device} in bay {device_bay}." msgstr "インストール済みデバイス {device} イン・ベイ {device_bay}。" -#: netbox/dcim/views.py:2948 +#: netbox/dcim/views.py:3147 #, python-brace-format msgid "Removed device {device} from bay {device_bay}." msgstr "削除されたデバイス {device} ベイから {device_bay}。" -#: netbox/dcim/views.py:3054 netbox/ipam/tables/ip.py:234 +#: netbox/dcim/views.py:3263 netbox/ipam/tables/ip.py:180 msgid "Children" msgstr "子ども" -#: netbox/dcim/views.py:3520 +#: netbox/dcim/views.py:3730 #, python-brace-format msgid "Added member {device}" msgstr "メンバー追加 {device}" -#: netbox/dcim/views.py:3567 +#: netbox/dcim/views.py:3779 #, python-brace-format msgid "Unable to remove master device {device} from the virtual chassis." msgstr "マスターデバイスを削除できません {device} バーチャルシャーシから。" -#: netbox/dcim/views.py:3580 +#: netbox/dcim/views.py:3792 #, python-brace-format msgid "Removed {device} from virtual chassis {chassis}" msgstr "削除済み {device} バーチャルシャーシから {chassis}" @@ -7125,7 +7654,7 @@ msgstr "いいえ" #: netbox/extras/choices.py:108 netbox/templates/tenancy/contact.html:57 #: netbox/tenancy/forms/bulk_edit.py:118 -#: netbox/wireless/forms/model_forms.py:168 +#: netbox/wireless/forms/model_forms.py:171 msgid "Link" msgstr "リンク" @@ -7145,15 +7674,15 @@ msgstr "アルファベット順 (A-Z)" msgid "Alphabetical (Z-A)" msgstr "アルファベット順 (Z-A)" -#: netbox/extras/choices.py:144 netbox/extras/choices.py:167 +#: netbox/extras/choices.py:144 netbox/extras/choices.py:165 msgid "Info" msgstr "情報" -#: netbox/extras/choices.py:145 netbox/extras/choices.py:168 +#: netbox/extras/choices.py:145 netbox/extras/choices.py:166 msgid "Success" msgstr "成功" -#: netbox/extras/choices.py:146 netbox/extras/choices.py:169 +#: netbox/extras/choices.py:146 netbox/extras/choices.py:167 msgid "Warning" msgstr "警告" @@ -7161,52 +7690,29 @@ msgstr "警告" msgid "Danger" msgstr "危険" -#: netbox/extras/choices.py:165 +#: netbox/extras/choices.py:164 msgid "Debug" msgstr "デバッグ" -#: netbox/extras/choices.py:166 netbox/netbox/choices.py:101 -msgid "Default" -msgstr "デフォルト" - -#: netbox/extras/choices.py:170 +#: netbox/extras/choices.py:168 msgid "Failure" msgstr "失敗" -#: netbox/extras/choices.py:186 -msgid "Hourly" -msgstr "毎時" - -#: netbox/extras/choices.py:187 -msgid "12 hours" -msgstr "12 時間毎" - -#: netbox/extras/choices.py:188 -msgid "Daily" -msgstr "毎日" - -#: netbox/extras/choices.py:189 -msgid "Weekly" -msgstr "毎週" - -#: netbox/extras/choices.py:190 -msgid "30 days" -msgstr "30 日毎" - -#: netbox/extras/choices.py:226 +#: netbox/extras/choices.py:213 #: netbox/templates/dcim/virtualchassis_edit.html:107 #: netbox/templates/generic/bulk_add_component.html:68 #: netbox/templates/generic/object_edit.html:47 #: netbox/templates/generic/object_edit.html:80 +#: netbox/templates/htmx/quick_add.html:24 #: netbox/templates/ipam/inc/ipaddress_edit_header.html:7 msgid "Create" msgstr "作成" -#: netbox/extras/choices.py:227 +#: netbox/extras/choices.py:214 msgid "Update" msgstr "更新" -#: netbox/extras/choices.py:228 +#: netbox/extras/choices.py:215 #: netbox/templates/circuits/inc/circuit_termination.html:23 #: netbox/templates/dcim/inc/panels/inventory_items.html:37 #: netbox/templates/dcim/powerpanel.html:66 @@ -7221,82 +7727,82 @@ msgstr "更新" msgid "Delete" msgstr "削除" -#: netbox/extras/choices.py:252 netbox/netbox/choices.py:57 -#: netbox/netbox/choices.py:102 +#: netbox/extras/choices.py:239 netbox/netbox/choices.py:59 +#: netbox/netbox/choices.py:104 msgid "Blue" msgstr "青" -#: netbox/extras/choices.py:253 netbox/netbox/choices.py:56 -#: netbox/netbox/choices.py:103 +#: netbox/extras/choices.py:240 netbox/netbox/choices.py:58 +#: netbox/netbox/choices.py:105 msgid "Indigo" msgstr "藍" -#: netbox/extras/choices.py:254 netbox/netbox/choices.py:54 -#: netbox/netbox/choices.py:104 +#: netbox/extras/choices.py:241 netbox/netbox/choices.py:56 +#: netbox/netbox/choices.py:106 msgid "Purple" msgstr "紫" -#: netbox/extras/choices.py:255 netbox/netbox/choices.py:51 -#: netbox/netbox/choices.py:105 +#: netbox/extras/choices.py:242 netbox/netbox/choices.py:53 +#: netbox/netbox/choices.py:107 msgid "Pink" msgstr "桃" -#: netbox/extras/choices.py:256 netbox/netbox/choices.py:50 -#: netbox/netbox/choices.py:106 +#: netbox/extras/choices.py:243 netbox/netbox/choices.py:52 +#: netbox/netbox/choices.py:108 msgid "Red" msgstr "赤" -#: netbox/extras/choices.py:257 netbox/netbox/choices.py:68 -#: netbox/netbox/choices.py:107 +#: netbox/extras/choices.py:244 netbox/netbox/choices.py:70 +#: netbox/netbox/choices.py:109 msgid "Orange" msgstr "橙" -#: netbox/extras/choices.py:258 netbox/netbox/choices.py:66 -#: netbox/netbox/choices.py:108 +#: netbox/extras/choices.py:245 netbox/netbox/choices.py:68 +#: netbox/netbox/choices.py:110 msgid "Yellow" msgstr "黄" -#: netbox/extras/choices.py:259 netbox/netbox/choices.py:63 -#: netbox/netbox/choices.py:109 +#: netbox/extras/choices.py:246 netbox/netbox/choices.py:65 +#: netbox/netbox/choices.py:111 msgid "Green" msgstr "緑" -#: netbox/extras/choices.py:260 netbox/netbox/choices.py:60 -#: netbox/netbox/choices.py:110 +#: netbox/extras/choices.py:247 netbox/netbox/choices.py:62 +#: netbox/netbox/choices.py:112 msgid "Teal" msgstr "青緑" -#: netbox/extras/choices.py:261 netbox/netbox/choices.py:59 -#: netbox/netbox/choices.py:111 +#: netbox/extras/choices.py:248 netbox/netbox/choices.py:61 +#: netbox/netbox/choices.py:113 msgid "Cyan" msgstr "水" -#: netbox/extras/choices.py:262 netbox/netbox/choices.py:112 +#: netbox/extras/choices.py:249 netbox/netbox/choices.py:114 msgid "Gray" msgstr "灰" -#: netbox/extras/choices.py:263 netbox/netbox/choices.py:74 -#: netbox/netbox/choices.py:113 +#: netbox/extras/choices.py:250 netbox/netbox/choices.py:76 +#: netbox/netbox/choices.py:115 msgid "Black" msgstr "黒" -#: netbox/extras/choices.py:264 netbox/netbox/choices.py:75 -#: netbox/netbox/choices.py:114 +#: netbox/extras/choices.py:251 netbox/netbox/choices.py:77 +#: netbox/netbox/choices.py:116 msgid "White" msgstr "白" -#: netbox/extras/choices.py:279 netbox/extras/forms/model_forms.py:353 -#: netbox/extras/forms/model_forms.py:430 +#: netbox/extras/choices.py:266 netbox/extras/forms/model_forms.py:367 +#: netbox/extras/forms/model_forms.py:444 #: netbox/templates/extras/webhook.html:10 msgid "Webhook" msgstr "Webhook" -#: netbox/extras/choices.py:280 netbox/extras/forms/model_forms.py:418 +#: netbox/extras/choices.py:267 netbox/extras/forms/model_forms.py:432 #: netbox/templates/extras/script/base.html:29 msgid "Script" msgstr "スクリプト" -#: netbox/extras/choices.py:281 +#: netbox/extras/choices.py:268 msgid "Notification" msgstr "通知" @@ -7388,30 +7894,34 @@ msgstr "形式が無効です。URL パラメータはディクショナリと msgid "RSS Feed" msgstr "RSS フィード" -#: netbox/extras/dashboard/widgets.py:279 +#: netbox/extras/dashboard/widgets.py:280 msgid "Embed an RSS feed from an external website." msgstr "外部 Web サイトの RSS フィードを埋め込みます。" -#: netbox/extras/dashboard/widgets.py:286 +#: netbox/extras/dashboard/widgets.py:287 msgid "Feed URL" msgstr "フィード URL" -#: netbox/extras/dashboard/widgets.py:291 +#: netbox/extras/dashboard/widgets.py:290 +msgid "Requires external connection" +msgstr "外部接続が必要" + +#: netbox/extras/dashboard/widgets.py:296 msgid "The maximum number of objects to display" msgstr "表示するオブジェクトの最大数" -#: netbox/extras/dashboard/widgets.py:296 +#: netbox/extras/dashboard/widgets.py:301 msgid "How long to stored the cached content (in seconds)" msgstr "キャッシュされたコンテンツを保存する時間 (秒)" -#: netbox/extras/dashboard/widgets.py:348 +#: netbox/extras/dashboard/widgets.py:358 #: netbox/templates/account/base.html:10 #: netbox/templates/account/bookmarks.html:7 -#: netbox/templates/inc/user_menu.html:48 +#: netbox/templates/inc/user_menu.html:43 msgid "Bookmarks" msgstr "ブックマーク" -#: netbox/extras/dashboard/widgets.py:352 +#: netbox/extras/dashboard/widgets.py:362 msgid "Show your personal bookmarks" msgstr "個人用のブックマークを表示する" @@ -7440,17 +7950,17 @@ msgid "Group (name)" msgstr "グループ (名前)" #: netbox/extras/filtersets.py:574 -#: netbox/virtualization/forms/filtersets.py:118 +#: netbox/virtualization/forms/filtersets.py:123 msgid "Cluster type" msgstr "クラスタタイプ" -#: netbox/extras/filtersets.py:580 netbox/virtualization/filtersets.py:95 -#: netbox/virtualization/filtersets.py:147 +#: netbox/extras/filtersets.py:580 netbox/virtualization/filtersets.py:61 +#: netbox/virtualization/filtersets.py:113 msgid "Cluster type (slug)" msgstr "クラスタタイプ (slug)" #: netbox/extras/filtersets.py:601 netbox/tenancy/forms/forms.py:16 -#: netbox/tenancy/forms/forms.py:39 +#: netbox/tenancy/forms/forms.py:40 msgid "Tenant group" msgstr "テナントグループ" @@ -7459,7 +7969,7 @@ msgstr "テナントグループ" msgid "Tenant group (slug)" msgstr "テナントグループ (slug)" -#: netbox/extras/filtersets.py:623 netbox/extras/forms/model_forms.py:495 +#: netbox/extras/filtersets.py:623 netbox/extras/forms/model_forms.py:509 #: netbox/templates/extras/tag.html:11 msgid "Tag" msgstr "タグ" @@ -7468,60 +7978,60 @@ msgstr "タグ" msgid "Tag (slug)" msgstr "タグ (slug)" -#: netbox/extras/filtersets.py:689 netbox/extras/forms/filtersets.py:429 +#: netbox/extras/filtersets.py:689 netbox/extras/forms/filtersets.py:437 msgid "Has local config context data" msgstr "ローカル設定コンテキストがある" -#: netbox/extras/forms/bulk_edit.py:35 netbox/extras/forms/filtersets.py:60 +#: netbox/extras/forms/bulk_edit.py:35 netbox/extras/forms/filtersets.py:61 msgid "Group name" msgstr "グループ名" -#: netbox/extras/forms/bulk_edit.py:43 netbox/extras/forms/filtersets.py:68 +#: netbox/extras/forms/bulk_edit.py:43 netbox/extras/forms/filtersets.py:69 #: netbox/extras/tables/tables.py:65 #: netbox/templates/extras/customfield.html:38 #: netbox/templates/generic/bulk_import.html:118 msgid "Required" msgstr "必須" -#: netbox/extras/forms/bulk_edit.py:48 netbox/extras/forms/filtersets.py:75 +#: netbox/extras/forms/bulk_edit.py:48 netbox/extras/forms/filtersets.py:76 msgid "Must be unique" msgstr "一意でなければならない" #: netbox/extras/forms/bulk_edit.py:61 netbox/extras/forms/bulk_import.py:60 -#: netbox/extras/forms/filtersets.py:89 +#: netbox/extras/forms/filtersets.py:90 #: netbox/extras/models/customfields.py:209 msgid "UI visible" msgstr "UI で表示される" #: netbox/extras/forms/bulk_edit.py:66 netbox/extras/forms/bulk_import.py:66 -#: netbox/extras/forms/filtersets.py:94 +#: netbox/extras/forms/filtersets.py:95 #: netbox/extras/models/customfields.py:216 msgid "UI editable" msgstr "UI で編集可能" -#: netbox/extras/forms/bulk_edit.py:71 netbox/extras/forms/filtersets.py:97 +#: netbox/extras/forms/bulk_edit.py:71 netbox/extras/forms/filtersets.py:98 msgid "Is cloneable" msgstr "複製可能" -#: netbox/extras/forms/bulk_edit.py:76 netbox/extras/forms/filtersets.py:104 +#: netbox/extras/forms/bulk_edit.py:76 netbox/extras/forms/filtersets.py:105 msgid "Minimum value" msgstr "最小値" -#: netbox/extras/forms/bulk_edit.py:80 netbox/extras/forms/filtersets.py:108 +#: netbox/extras/forms/bulk_edit.py:80 netbox/extras/forms/filtersets.py:109 msgid "Maximum value" msgstr "最大値" -#: netbox/extras/forms/bulk_edit.py:84 netbox/extras/forms/filtersets.py:112 +#: netbox/extras/forms/bulk_edit.py:84 netbox/extras/forms/filtersets.py:113 msgid "Validation regex" msgstr "検証正規表現" -#: netbox/extras/forms/bulk_edit.py:91 netbox/extras/forms/filtersets.py:46 +#: netbox/extras/forms/bulk_edit.py:91 netbox/extras/forms/filtersets.py:47 #: netbox/extras/forms/model_forms.py:76 #: netbox/templates/extras/customfield.html:70 msgid "Behavior" msgstr "動作" -#: netbox/extras/forms/bulk_edit.py:128 netbox/extras/forms/filtersets.py:149 +#: netbox/extras/forms/bulk_edit.py:128 netbox/extras/forms/filtersets.py:152 msgid "New window" msgstr "新しいウィンドウ" @@ -7529,31 +8039,31 @@ msgstr "新しいウィンドウ" msgid "Button class" msgstr "ボタンクラス" -#: netbox/extras/forms/bulk_edit.py:154 netbox/extras/forms/filtersets.py:187 +#: netbox/extras/forms/bulk_edit.py:154 netbox/extras/forms/filtersets.py:191 #: netbox/extras/models/models.py:409 msgid "MIME type" msgstr "MIMEタイプ" -#: netbox/extras/forms/bulk_edit.py:159 netbox/extras/forms/filtersets.py:190 +#: netbox/extras/forms/bulk_edit.py:159 netbox/extras/forms/filtersets.py:194 msgid "File extension" msgstr "ファイル拡張子" -#: netbox/extras/forms/bulk_edit.py:164 netbox/extras/forms/filtersets.py:194 +#: netbox/extras/forms/bulk_edit.py:164 netbox/extras/forms/filtersets.py:198 msgid "As attachment" msgstr "添付ファイルとして" -#: netbox/extras/forms/bulk_edit.py:192 netbox/extras/forms/filtersets.py:236 +#: netbox/extras/forms/bulk_edit.py:192 netbox/extras/forms/filtersets.py:242 #: netbox/extras/tables/tables.py:256 #: netbox/templates/extras/savedfilter.html:29 msgid "Shared" msgstr "共有" -#: netbox/extras/forms/bulk_edit.py:215 netbox/extras/forms/filtersets.py:265 +#: netbox/extras/forms/bulk_edit.py:215 netbox/extras/forms/filtersets.py:271 #: netbox/extras/models/models.py:174 msgid "HTTP method" msgstr "HTTP メソッド" -#: netbox/extras/forms/bulk_edit.py:219 netbox/extras/forms/filtersets.py:259 +#: netbox/extras/forms/bulk_edit.py:219 netbox/extras/forms/filtersets.py:265 #: netbox/templates/extras/webhook.html:30 msgid "Payload URL" msgstr "ペイロード URL" @@ -7572,7 +8082,7 @@ msgid "CA file path" msgstr "CA ファイルパス" #: netbox/extras/forms/bulk_edit.py:253 netbox/extras/forms/bulk_import.py:192 -#: netbox/extras/forms/model_forms.py:377 +#: netbox/extras/forms/model_forms.py:391 msgid "Event types" msgstr "イベントタイプ" @@ -7585,13 +8095,13 @@ msgstr "有効" #: netbox/extras/forms/bulk_import.py:139 #: netbox/extras/forms/bulk_import.py:162 #: netbox/extras/forms/bulk_import.py:186 -#: netbox/extras/forms/filtersets.py:137 netbox/extras/forms/filtersets.py:224 +#: netbox/extras/forms/filtersets.py:140 netbox/extras/forms/filtersets.py:230 #: netbox/extras/forms/model_forms.py:47 -#: netbox/extras/forms/model_forms.py:205 -#: netbox/extras/forms/model_forms.py:237 -#: netbox/extras/forms/model_forms.py:278 -#: netbox/extras/forms/model_forms.py:372 -#: netbox/extras/forms/model_forms.py:489 +#: netbox/extras/forms/model_forms.py:219 +#: netbox/extras/forms/model_forms.py:251 +#: netbox/extras/forms/model_forms.py:292 +#: netbox/extras/forms/model_forms.py:386 +#: netbox/extras/forms/model_forms.py:503 #: netbox/users/forms/model_forms.py:276 msgid "Object types" msgstr "オブジェクトタイプ" @@ -7609,10 +8119,10 @@ msgstr "1 つ以上の割当オブジェクトタイプ" msgid "Field data type (e.g. text, integer, etc.)" msgstr "フィールドデータタイプ (テキスト、整数など)" -#: netbox/extras/forms/bulk_import.py:47 netbox/extras/forms/filtersets.py:208 -#: netbox/extras/forms/filtersets.py:281 -#: netbox/extras/forms/model_forms.py:304 -#: netbox/extras/forms/model_forms.py:341 +#: netbox/extras/forms/bulk_import.py:47 netbox/extras/forms/filtersets.py:213 +#: netbox/extras/forms/filtersets.py:287 +#: netbox/extras/forms/model_forms.py:318 +#: netbox/extras/forms/model_forms.py:355 #: netbox/tenancy/forms/filtersets.py:92 msgid "Object type" msgstr "オブジェクトタイプ" @@ -7621,7 +8131,7 @@ msgstr "オブジェクトタイプ" msgid "Object type (for object or multi-object fields)" msgstr "オブジェクトタイプ (オブジェクトフィールドまたはマルチオブジェクトフィールド用)" -#: netbox/extras/forms/bulk_import.py:53 netbox/extras/forms/filtersets.py:84 +#: netbox/extras/forms/bulk_import.py:53 netbox/extras/forms/filtersets.py:85 msgid "Choice set" msgstr "選択肢" @@ -7689,7 +8199,7 @@ msgid "The classification of entry" msgstr "エントリの分類" #: netbox/extras/forms/bulk_import.py:261 -#: netbox/extras/forms/model_forms.py:320 netbox/netbox/navigation/menu.py:390 +#: netbox/extras/forms/model_forms.py:334 netbox/netbox/navigation/menu.py:411 #: netbox/templates/extras/notificationgroup.html:41 #: netbox/templates/users/group.html:29 netbox/users/forms/model_forms.py:236 #: netbox/users/forms/model_forms.py:248 netbox/users/forms/model_forms.py:300 @@ -7702,7 +8212,8 @@ msgid "User names separated by commas, encased with double quotes" msgstr "二重引用符で囲まれたカンマ区切りユーザ名" #: netbox/extras/forms/bulk_import.py:268 -#: netbox/extras/forms/model_forms.py:315 netbox/netbox/navigation/menu.py:410 +#: netbox/extras/forms/model_forms.py:329 netbox/netbox/navigation/menu.py:294 +#: netbox/netbox/navigation/menu.py:431 #: netbox/templates/extras/notificationgroup.html:31 #: netbox/users/forms/model_forms.py:181 netbox/users/forms/model_forms.py:193 #: netbox/users/forms/model_forms.py:305 netbox/users/tables.py:35 @@ -7714,104 +8225,104 @@ msgstr "グループ" msgid "Group names separated by commas, encased with double quotes" msgstr "二重引用符で囲まれたカンマで区切りグループ名" -#: netbox/extras/forms/filtersets.py:52 netbox/extras/forms/model_forms.py:56 +#: netbox/extras/forms/filtersets.py:53 netbox/extras/forms/model_forms.py:56 msgid "Related object type" msgstr "関連オブジェクトタイプ" -#: netbox/extras/forms/filtersets.py:57 +#: netbox/extras/forms/filtersets.py:58 msgid "Field type" msgstr "フィールドタイプ" -#: netbox/extras/forms/filtersets.py:120 +#: netbox/extras/forms/filtersets.py:122 #: netbox/extras/forms/model_forms.py:157 netbox/extras/tables/tables.py:91 #: netbox/templates/generic/bulk_import.html:154 msgid "Choices" msgstr "選択肢" -#: netbox/extras/forms/filtersets.py:164 netbox/extras/forms/filtersets.py:319 -#: netbox/extras/forms/filtersets.py:408 -#: netbox/extras/forms/model_forms.py:572 netbox/templates/core/job.html:96 +#: netbox/extras/forms/filtersets.py:168 netbox/extras/forms/filtersets.py:326 +#: netbox/extras/forms/filtersets.py:416 +#: netbox/extras/forms/model_forms.py:586 netbox/templates/core/job.html:96 #: netbox/templates/extras/eventrule.html:84 msgid "Data" msgstr "データ" -#: netbox/extras/forms/filtersets.py:175 netbox/extras/forms/filtersets.py:333 -#: netbox/extras/forms/filtersets.py:418 netbox/netbox/choices.py:130 +#: netbox/extras/forms/filtersets.py:179 netbox/extras/forms/filtersets.py:340 +#: netbox/extras/forms/filtersets.py:426 netbox/netbox/choices.py:132 #: netbox/utilities/forms/bulk_import.py:26 msgid "Data file" msgstr "データファイル" -#: netbox/extras/forms/filtersets.py:183 +#: netbox/extras/forms/filtersets.py:187 msgid "Content types" msgstr "コンテンツタイプ" -#: netbox/extras/forms/filtersets.py:255 netbox/extras/models/models.py:179 +#: netbox/extras/forms/filtersets.py:261 netbox/extras/models/models.py:179 msgid "HTTP content type" msgstr "HTTP content type" -#: netbox/extras/forms/filtersets.py:286 +#: netbox/extras/forms/filtersets.py:292 msgid "Event type" msgstr "イベントタイプ" -#: netbox/extras/forms/filtersets.py:291 +#: netbox/extras/forms/filtersets.py:297 msgid "Action type" msgstr "アクションタイプ" -#: netbox/extras/forms/filtersets.py:307 +#: netbox/extras/forms/filtersets.py:313 msgid "Tagged object type" msgstr "タグ付きオブジェクトタイプ" -#: netbox/extras/forms/filtersets.py:312 +#: netbox/extras/forms/filtersets.py:318 msgid "Allowed object type" msgstr "許可されるオブジェクトタイプ" -#: netbox/extras/forms/filtersets.py:341 -#: netbox/extras/forms/model_forms.py:507 netbox/netbox/navigation/menu.py:18 +#: netbox/extras/forms/filtersets.py:348 +#: netbox/extras/forms/model_forms.py:521 netbox/netbox/navigation/menu.py:18 msgid "Regions" msgstr "リージョン" -#: netbox/extras/forms/filtersets.py:346 -#: netbox/extras/forms/model_forms.py:512 +#: netbox/extras/forms/filtersets.py:353 +#: netbox/extras/forms/model_forms.py:526 msgid "Site groups" msgstr "サイトグループ" -#: netbox/extras/forms/filtersets.py:356 -#: netbox/extras/forms/model_forms.py:522 netbox/netbox/navigation/menu.py:20 +#: netbox/extras/forms/filtersets.py:363 +#: netbox/extras/forms/model_forms.py:536 netbox/netbox/navigation/menu.py:20 #: netbox/templates/dcim/site.html:127 msgid "Locations" msgstr "ロケーション" -#: netbox/extras/forms/filtersets.py:361 -#: netbox/extras/forms/model_forms.py:527 +#: netbox/extras/forms/filtersets.py:368 +#: netbox/extras/forms/model_forms.py:541 msgid "Device types" msgstr "デバイスタイプ" -#: netbox/extras/forms/filtersets.py:366 -#: netbox/extras/forms/model_forms.py:532 +#: netbox/extras/forms/filtersets.py:373 +#: netbox/extras/forms/model_forms.py:546 msgid "Roles" msgstr "ロール" -#: netbox/extras/forms/filtersets.py:376 -#: netbox/extras/forms/model_forms.py:542 +#: netbox/extras/forms/filtersets.py:383 +#: netbox/extras/forms/model_forms.py:556 msgid "Cluster types" msgstr "クラスタタイプ" -#: netbox/extras/forms/filtersets.py:381 -#: netbox/extras/forms/model_forms.py:547 +#: netbox/extras/forms/filtersets.py:388 +#: netbox/extras/forms/model_forms.py:561 msgid "Cluster groups" msgstr "クラスタグループ" -#: netbox/extras/forms/filtersets.py:386 -#: netbox/extras/forms/model_forms.py:552 netbox/netbox/navigation/menu.py:255 -#: netbox/netbox/navigation/menu.py:257 +#: netbox/extras/forms/filtersets.py:393 +#: netbox/extras/forms/model_forms.py:566 netbox/netbox/navigation/menu.py:263 +#: netbox/netbox/navigation/menu.py:265 #: netbox/templates/virtualization/clustertype.html:30 #: netbox/virtualization/tables/clusters.py:23 #: netbox/virtualization/tables/clusters.py:45 msgid "Clusters" msgstr "クラスタ" -#: netbox/extras/forms/filtersets.py:391 -#: netbox/extras/forms/model_forms.py:557 +#: netbox/extras/forms/filtersets.py:398 +#: netbox/extras/forms/model_forms.py:571 msgid "Tenant groups" msgstr "テナントグループ" @@ -7857,22 +8368,22 @@ msgstr "これはフォームフィールドのヘルプテキストとして表 msgid "Related Object" msgstr "関連オブジェクト" -#: netbox/extras/forms/model_forms.py:169 +#: netbox/extras/forms/model_forms.py:170 msgid "" "Enter one choice per line. An optional label may be specified for each " "choice by appending it with a colon. Example:" msgstr "1 行に 1 つの選択肢を入力します。必要に応じて、各選択肢にコロンを付けることで、ラベルを指定できます。例:" -#: netbox/extras/forms/model_forms.py:212 +#: netbox/extras/forms/model_forms.py:226 #: netbox/templates/extras/customlink.html:10 msgid "Custom Link" msgstr "カスタムリンク" -#: netbox/extras/forms/model_forms.py:214 +#: netbox/extras/forms/model_forms.py:228 msgid "Templates" msgstr "テンプレート" -#: netbox/extras/forms/model_forms.py:226 +#: netbox/extras/forms/model_forms.py:240 #, python-brace-format msgid "" "Jinja2 template code for the link text. Reference the object as {example}. " @@ -7881,96 +8392,96 @@ msgstr "" "リンクテキストの Jinja2 テンプレートコード。オブジェクトを次のように参照します。 " "{example}。空のテキストとしてレンダリングされるリンクは表示されません。" -#: netbox/extras/forms/model_forms.py:230 +#: netbox/extras/forms/model_forms.py:244 #, python-brace-format msgid "" "Jinja2 template code for the link URL. Reference the object as {example}." msgstr "リンク URL の Jinja2 テンプレートコード。オブジェクトを次のように参照します。 {example}。" -#: netbox/extras/forms/model_forms.py:241 -#: netbox/extras/forms/model_forms.py:624 +#: netbox/extras/forms/model_forms.py:255 +#: netbox/extras/forms/model_forms.py:638 msgid "Template code" msgstr "テンプレートコード" -#: netbox/extras/forms/model_forms.py:247 +#: netbox/extras/forms/model_forms.py:261 #: netbox/templates/extras/exporttemplate.html:12 msgid "Export Template" msgstr "エクスポートテンプレート" -#: netbox/extras/forms/model_forms.py:249 +#: netbox/extras/forms/model_forms.py:263 msgid "Rendering" msgstr "レンダリング" -#: netbox/extras/forms/model_forms.py:263 -#: netbox/extras/forms/model_forms.py:649 +#: netbox/extras/forms/model_forms.py:277 +#: netbox/extras/forms/model_forms.py:663 msgid "Template content is populated from the remote source selected below." msgstr "選択したリモートソースから、テンプレートコンテンツが入力されます。" -#: netbox/extras/forms/model_forms.py:270 -#: netbox/extras/forms/model_forms.py:656 +#: netbox/extras/forms/model_forms.py:284 +#: netbox/extras/forms/model_forms.py:670 msgid "Must specify either local content or a data file" msgstr "ローカルコンテンツまたはデータファイルのいずれかを指定する必要があります" -#: netbox/extras/forms/model_forms.py:284 netbox/netbox/forms/mixins.py:70 +#: netbox/extras/forms/model_forms.py:298 netbox/netbox/forms/mixins.py:70 #: netbox/templates/extras/savedfilter.html:10 msgid "Saved Filter" msgstr "保存済みフィルタ" -#: netbox/extras/forms/model_forms.py:334 +#: netbox/extras/forms/model_forms.py:348 msgid "A notification group specify at least one user or group." msgstr "通知グループには、少なくとも 1 人のユーザまたはグループを指定します。" -#: netbox/extras/forms/model_forms.py:356 +#: netbox/extras/forms/model_forms.py:370 #: netbox/templates/extras/webhook.html:23 msgid "HTTP Request" msgstr "HTTP リクエスト" -#: netbox/extras/forms/model_forms.py:358 +#: netbox/extras/forms/model_forms.py:372 #: netbox/templates/extras/webhook.html:44 msgid "SSL" msgstr "SSL" -#: netbox/extras/forms/model_forms.py:380 +#: netbox/extras/forms/model_forms.py:394 msgid "Action choice" msgstr "スクリプト" -#: netbox/extras/forms/model_forms.py:385 +#: netbox/extras/forms/model_forms.py:399 msgid "Enter conditions in JSON format." msgstr "JSON フォーマットで条件を入力。" -#: netbox/extras/forms/model_forms.py:389 +#: netbox/extras/forms/model_forms.py:403 msgid "" "Enter parameters to pass to the action in JSON format." msgstr "JSON フォーマットでアクションに渡すパラメータを入力してください。" -#: netbox/extras/forms/model_forms.py:394 +#: netbox/extras/forms/model_forms.py:408 #: netbox/templates/extras/eventrule.html:10 msgid "Event Rule" msgstr "イベントルール" -#: netbox/extras/forms/model_forms.py:395 +#: netbox/extras/forms/model_forms.py:409 msgid "Triggers" msgstr "トリガー" -#: netbox/extras/forms/model_forms.py:442 +#: netbox/extras/forms/model_forms.py:456 msgid "Notification group" msgstr "通知グループ" -#: netbox/extras/forms/model_forms.py:562 netbox/netbox/navigation/menu.py:26 +#: netbox/extras/forms/model_forms.py:576 netbox/netbox/navigation/menu.py:26 #: netbox/tenancy/tables/tenants.py:22 msgid "Tenants" msgstr "テナント" -#: netbox/extras/forms/model_forms.py:606 +#: netbox/extras/forms/model_forms.py:620 msgid "Data is populated from the remote source selected below." msgstr "データは、以下で選択したリモートソースから入力されます。" -#: netbox/extras/forms/model_forms.py:612 +#: netbox/extras/forms/model_forms.py:626 msgid "Must specify either local data or a data file" msgstr "ローカルデータまたはデータファイルのいずれかを指定する必要があります" -#: netbox/extras/forms/model_forms.py:631 +#: netbox/extras/forms/model_forms.py:645 #: netbox/templates/core/datafile.html:55 msgid "Content" msgstr "コンテンツ" @@ -8032,10 +8543,16 @@ msgstr "例外が発生しました: " msgid "Database changes have been reverted due to error." msgstr "エラーにより、データベースの変更が元に戻されました。" -#: netbox/extras/management/commands/reindex.py:66 +#: netbox/extras/management/commands/reindex.py:67 msgid "No indexers found!" msgstr "indexerが見つかりません" +#: netbox/extras/models/configs.py:41 netbox/extras/models/models.py:313 +#: netbox/extras/models/models.py:522 netbox/extras/models/search.py:48 +#: netbox/ipam/models/ip.py:188 netbox/netbox/models/mixins.py:15 +msgid "weight" +msgstr "重量" + #: netbox/extras/models/configs.py:130 msgid "config context" msgstr "コンフィグコンテキスト" @@ -8374,27 +8891,27 @@ msgstr "無効なオブジェクト ID が見つかりました: {id}" msgid "Required field cannot be empty." msgstr "必須フィールドを空にすることはできません。" -#: netbox/extras/models/customfields.py:763 +#: netbox/extras/models/customfields.py:764 msgid "Base set of predefined choices (optional)" msgstr "定義済みの選択肢の基本セット (オプション)" -#: netbox/extras/models/customfields.py:775 +#: netbox/extras/models/customfields.py:776 msgid "Choices are automatically ordered alphabetically" msgstr "選択肢は自動的にアルファベット順に並べられます" -#: netbox/extras/models/customfields.py:782 +#: netbox/extras/models/customfields.py:783 msgid "custom field choice set" msgstr "カスタムフィールド選択肢" -#: netbox/extras/models/customfields.py:783 +#: netbox/extras/models/customfields.py:784 msgid "custom field choice sets" msgstr "カスタムフィールド選択肢" -#: netbox/extras/models/customfields.py:825 +#: netbox/extras/models/customfields.py:826 msgid "Must define base or extra choices." msgstr "基本選択肢または追加選択肢を定義する必要があります。" -#: netbox/extras/models/customfields.py:849 +#: netbox/extras/models/customfields.py:850 #, python-brace-format msgid "" "Cannot remove choice {choice} as there are {model} objects which reference " @@ -8679,20 +9196,20 @@ msgstr "ジャーナルエントリ" msgid "journal entries" msgstr "ジャーナルエントリ" -#: netbox/extras/models/models.py:718 +#: netbox/extras/models/models.py:721 #, python-brace-format msgid "Journaling is not supported for this object type ({type})." msgstr "このオブジェクトタイプ({type})ではジャーナリングはサポートされていません 。" -#: netbox/extras/models/models.py:760 +#: netbox/extras/models/models.py:763 msgid "bookmark" msgstr "ブックマーク" -#: netbox/extras/models/models.py:761 +#: netbox/extras/models/models.py:764 msgid "bookmarks" msgstr "ブックマーク" -#: netbox/extras/models/models.py:774 +#: netbox/extras/models/models.py:777 #, python-brace-format msgid "Bookmarks cannot be assigned to this object type ({type})." msgstr "このオブジェクトタイプ ({type})にはブックマークを割り当てられません。" @@ -8784,19 +9301,19 @@ msgstr "キャッシュ値" msgid "cached values" msgstr "キャッシュ値" -#: netbox/extras/models/staging.py:44 +#: netbox/extras/models/staging.py:45 msgid "branch" msgstr "ブランチ" -#: netbox/extras/models/staging.py:45 +#: netbox/extras/models/staging.py:46 msgid "branches" msgstr "ブランチ" -#: netbox/extras/models/staging.py:97 +#: netbox/extras/models/staging.py:105 msgid "staged change" msgstr "段階的変更" -#: netbox/extras/models/staging.py:98 +#: netbox/extras/models/staging.py:106 msgid "staged changes" msgstr "段階的変更" @@ -8820,11 +9337,11 @@ msgstr "タグ付きアイテム" msgid "tagged items" msgstr "タグ付きアイテム" -#: netbox/extras/scripts.py:429 +#: netbox/extras/scripts.py:432 msgid "Script Data" msgstr "スクリプトデータ" -#: netbox/extras/scripts.py:433 +#: netbox/extras/scripts.py:436 msgid "Script Execution Parameters" msgstr "スクリプト実行パラメータ" @@ -8901,12 +9418,11 @@ msgstr "添付ファイルとして" #: netbox/extras/tables/tables.py:195 netbox/extras/tables/tables.py:487 #: netbox/extras/tables/tables.py:522 netbox/templates/core/datafile.html:24 -#: netbox/templates/dcim/device/render_config.html:22 #: netbox/templates/extras/configcontext.html:39 #: netbox/templates/extras/configtemplate.html:31 #: netbox/templates/extras/exporttemplate.html:45 +#: netbox/templates/extras/object_render_config.html:23 #: netbox/templates/generic/bulk_import.html:35 -#: netbox/templates/virtualization/virtualmachine/render_config.html:22 msgid "Data File" msgstr "データファイル" @@ -8998,27 +9514,32 @@ msgstr "属性が無効です」{name}「」(リクエスト用)" msgid "Invalid attribute \"{name}\" for {model}" msgstr "{model}において{name}属性は無効です" -#: netbox/extras/views.py:960 +#: netbox/extras/views.py:933 +#, python-brace-format +msgid "An error occurred while rendering the template: {error}" +msgstr "テンプレートをレンダリング中にエラーが発生しました: {error}" + +#: netbox/extras/views.py:1085 msgid "Your dashboard has been reset." msgstr "ダッシュボードがリセットされました。" -#: netbox/extras/views.py:1006 +#: netbox/extras/views.py:1131 msgid "Added widget: " msgstr "ウィジェットの追加: " -#: netbox/extras/views.py:1047 +#: netbox/extras/views.py:1172 msgid "Updated widget: " msgstr "ウィジェットの更新: " -#: netbox/extras/views.py:1083 +#: netbox/extras/views.py:1208 msgid "Deleted widget: " msgstr "削除したウィジェット: " -#: netbox/extras/views.py:1085 +#: netbox/extras/views.py:1210 msgid "Error deleting widget: " msgstr "ウィジェットの削除中にエラーが発生しました: " -#: netbox/extras/views.py:1175 +#: netbox/extras/views.py:1308 msgid "Unable to run script: RQ worker process not running." msgstr "スクリプトを実行できません:RQ ワーカープロセスが実行されていません。" @@ -9040,7 +9561,7 @@ msgstr "有効な IPv4 または IPv6 プレフィックスとマスクを CIDR msgid "Invalid IP prefix format: {data}" msgstr "IP プレフィックス形式が無効です: {data}" -#: netbox/ipam/api/views.py:358 +#: netbox/ipam/api/views.py:370 msgid "" "Insufficient space is available to accommodate the requested prefix size(s)" msgstr "要求されたプレフィックスサイズを収容するにはスペースが足りません" @@ -9081,182 +9602,174 @@ msgstr "Cisco" msgid "Plaintext" msgstr "プレーンテキスト" +#: netbox/ipam/choices.py:166 netbox/ipam/forms/model_forms.py:800 +#: netbox/ipam/forms/model_forms.py:828 netbox/templates/ipam/service.html:21 +msgid "Service" +msgstr "サービス" + +#: netbox/ipam/choices.py:167 +msgid "Customer" +msgstr "顧客" + #: netbox/ipam/fields.py:36 #, python-brace-format msgid "Invalid IP address format: {address}" msgstr "IP アドレス形式が無効です: {address}" -#: netbox/ipam/filtersets.py:48 netbox/vpn/filtersets.py:304 +#: netbox/ipam/filtersets.py:51 netbox/vpn/filtersets.py:304 msgid "Import target" msgstr "インポート対象" -#: netbox/ipam/filtersets.py:54 netbox/vpn/filtersets.py:310 +#: netbox/ipam/filtersets.py:57 netbox/vpn/filtersets.py:310 msgid "Import target (name)" msgstr "インポート対象 (名前)" -#: netbox/ipam/filtersets.py:59 netbox/vpn/filtersets.py:315 +#: netbox/ipam/filtersets.py:62 netbox/vpn/filtersets.py:315 msgid "Export target" msgstr "エクスポート対象" -#: netbox/ipam/filtersets.py:65 netbox/vpn/filtersets.py:321 +#: netbox/ipam/filtersets.py:68 netbox/vpn/filtersets.py:321 msgid "Export target (name)" msgstr "エクスポート対象 (名前)" -#: netbox/ipam/filtersets.py:86 +#: netbox/ipam/filtersets.py:89 msgid "Importing VRF" msgstr "VRF のインポート" -#: netbox/ipam/filtersets.py:92 +#: netbox/ipam/filtersets.py:95 msgid "Import VRF (RD)" msgstr "VRF (RD) をインポート" -#: netbox/ipam/filtersets.py:97 +#: netbox/ipam/filtersets.py:100 msgid "Exporting VRF" msgstr "VRF のエクスポート" -#: netbox/ipam/filtersets.py:103 +#: netbox/ipam/filtersets.py:106 msgid "Export VRF (RD)" msgstr "VRF (RD) をエクスポート" -#: netbox/ipam/filtersets.py:108 +#: netbox/ipam/filtersets.py:111 msgid "Importing L2VPN" msgstr "L2VPN のインポート" -#: netbox/ipam/filtersets.py:114 +#: netbox/ipam/filtersets.py:117 msgid "Importing L2VPN (identifier)" msgstr "L2VPN (識別子) のインポート" -#: netbox/ipam/filtersets.py:119 +#: netbox/ipam/filtersets.py:122 msgid "Exporting L2VPN" msgstr "L2VPN のエクスポート" -#: netbox/ipam/filtersets.py:125 +#: netbox/ipam/filtersets.py:128 msgid "Exporting L2VPN (identifier)" msgstr "L2VPN (識別子) のエクスポート" -#: netbox/ipam/filtersets.py:155 netbox/ipam/filtersets.py:283 -#: netbox/ipam/forms/model_forms.py:229 netbox/ipam/tables/ip.py:212 +#: netbox/ipam/filtersets.py:158 netbox/ipam/filtersets.py:286 +#: netbox/ipam/forms/model_forms.py:229 netbox/ipam/tables/ip.py:158 #: netbox/templates/ipam/prefix.html:12 msgid "Prefix" msgstr "プレフィックス" -#: netbox/ipam/filtersets.py:159 netbox/ipam/filtersets.py:198 -#: netbox/ipam/filtersets.py:223 +#: netbox/ipam/filtersets.py:162 netbox/ipam/filtersets.py:201 +#: netbox/ipam/filtersets.py:226 msgid "RIR (ID)" msgstr "RIR (ID)" -#: netbox/ipam/filtersets.py:165 netbox/ipam/filtersets.py:204 -#: netbox/ipam/filtersets.py:229 +#: netbox/ipam/filtersets.py:168 netbox/ipam/filtersets.py:207 +#: netbox/ipam/filtersets.py:232 msgid "RIR (slug)" msgstr "RIR (slug)" -#: netbox/ipam/filtersets.py:287 +#: netbox/ipam/filtersets.py:290 msgid "Within prefix" msgstr "プレフィックス内" -#: netbox/ipam/filtersets.py:291 +#: netbox/ipam/filtersets.py:294 msgid "Within and including prefix" msgstr "プレフィックス内およびプレフィックスを含む" -#: netbox/ipam/filtersets.py:295 +#: netbox/ipam/filtersets.py:298 msgid "Prefixes which contain this prefix or IP" msgstr "このプレフィックス / IP を含むプレフィックス" -#: netbox/ipam/filtersets.py:306 netbox/ipam/filtersets.py:574 -#: netbox/ipam/forms/bulk_edit.py:343 netbox/ipam/forms/filtersets.py:196 -#: netbox/ipam/forms/filtersets.py:331 +#: netbox/ipam/filtersets.py:309 netbox/ipam/filtersets.py:541 +#: netbox/ipam/forms/bulk_edit.py:327 netbox/ipam/forms/filtersets.py:198 +#: netbox/ipam/forms/filtersets.py:334 msgid "Mask length" msgstr "マスクの長さ" -#: netbox/ipam/filtersets.py:375 netbox/vpn/filtersets.py:427 +#: netbox/ipam/filtersets.py:342 netbox/vpn/filtersets.py:427 msgid "VLAN (ID)" msgstr "VLAN (ID)" -#: netbox/ipam/filtersets.py:379 netbox/vpn/filtersets.py:422 +#: netbox/ipam/filtersets.py:346 netbox/vpn/filtersets.py:422 msgid "VLAN number (1-4094)" msgstr "VLAN 番号 (1-4094)" -#: netbox/ipam/filtersets.py:473 netbox/ipam/filtersets.py:477 -#: netbox/ipam/filtersets.py:569 netbox/ipam/forms/model_forms.py:496 +#: netbox/ipam/filtersets.py:440 netbox/ipam/filtersets.py:444 +#: netbox/ipam/filtersets.py:536 netbox/ipam/forms/model_forms.py:506 #: netbox/templates/tenancy/contact.html:53 #: netbox/tenancy/forms/bulk_edit.py:113 msgid "Address" msgstr "アドレス" -#: netbox/ipam/filtersets.py:481 +#: netbox/ipam/filtersets.py:448 msgid "Ranges which contain this prefix or IP" msgstr "このプレフィックス / IP を含む範囲" -#: netbox/ipam/filtersets.py:509 netbox/ipam/filtersets.py:565 +#: netbox/ipam/filtersets.py:476 netbox/ipam/filtersets.py:532 msgid "Parent prefix" msgstr "親プレフィックス" -#: netbox/ipam/filtersets.py:618 netbox/ipam/filtersets.py:858 -#: netbox/ipam/filtersets.py:1133 netbox/vpn/filtersets.py:385 -msgid "Virtual machine (name)" -msgstr "仮想マシン (名前)" - -#: netbox/ipam/filtersets.py:623 netbox/ipam/filtersets.py:863 -#: netbox/ipam/filtersets.py:1127 netbox/virtualization/filtersets.py:282 -#: netbox/virtualization/filtersets.py:321 netbox/vpn/filtersets.py:390 -msgid "Virtual machine (ID)" -msgstr "仮想マシン (ID)" - -#: netbox/ipam/filtersets.py:629 netbox/vpn/filtersets.py:97 -#: netbox/vpn/filtersets.py:396 -msgid "Interface (name)" -msgstr "インタフェース (名前)" - -#: netbox/ipam/filtersets.py:640 netbox/vpn/filtersets.py:108 -#: netbox/vpn/filtersets.py:407 -msgid "VM interface (name)" -msgstr "VM インタフェース (名前)" - -#: netbox/ipam/filtersets.py:645 netbox/vpn/filtersets.py:113 -msgid "VM interface (ID)" -msgstr "VM インタフェース (ID)" - -#: netbox/ipam/filtersets.py:650 +#: netbox/ipam/filtersets.py:617 msgid "FHRP group (ID)" msgstr "FHRP グループ (ID)" -#: netbox/ipam/filtersets.py:654 +#: netbox/ipam/filtersets.py:621 msgid "Is assigned to an interface" msgstr "インタフェースに割り当てられているか" -#: netbox/ipam/filtersets.py:658 +#: netbox/ipam/filtersets.py:625 msgid "Is assigned" msgstr "割当済みか" -#: netbox/ipam/filtersets.py:670 +#: netbox/ipam/filtersets.py:637 msgid "Service (ID)" msgstr "サービス (ID)" -#: netbox/ipam/filtersets.py:675 +#: netbox/ipam/filtersets.py:642 msgid "NAT inside IP address (ID)" msgstr "NAT 内部の IP アドレス (ID)" -#: netbox/ipam/filtersets.py:1043 netbox/ipam/forms/bulk_import.py:322 -msgid "Assigned interface" -msgstr "割当インタフェース" +#: netbox/ipam/filtersets.py:1001 +msgid "Q-in-Q SVLAN (ID)" +msgstr "Q-in-Q スVLAN (ID)" -#: netbox/ipam/filtersets.py:1048 +#: netbox/ipam/filtersets.py:1005 +msgid "Q-in-Q SVLAN number (1-4094)" +msgstr "Q-In-Q スプラン番号 (1-4094)" + +#: netbox/ipam/filtersets.py:1026 msgid "Assigned VM interface" msgstr "割り当てられた VM インターフェイス" -#: netbox/ipam/filtersets.py:1138 +#: netbox/ipam/filtersets.py:1097 +msgid "VLAN Translation Policy (name)" +msgstr "VLAN 変換ポリシー (名前)" + +#: netbox/ipam/filtersets.py:1163 msgid "IP address (ID)" msgstr "IP アドレス (ID)" -#: netbox/ipam/filtersets.py:1144 netbox/ipam/models/ip.py:788 +#: netbox/ipam/filtersets.py:1169 netbox/ipam/models/ip.py:788 msgid "IP address" msgstr "IP アドレス" -#: netbox/ipam/filtersets.py:1169 +#: netbox/ipam/filtersets.py:1194 msgid "Primary IPv4 (ID)" msgstr "プライマリ IPv4 (ID)" -#: netbox/ipam/filtersets.py:1174 +#: netbox/ipam/filtersets.py:1199 msgid "Primary IPv6 (ID)" msgstr "プライマリ IPv6 (ID)" @@ -9289,477 +9802,450 @@ msgstr "CIDR マスク (例:/24) が必要です。" msgid "Address pattern" msgstr "アドレスパターン" -#: netbox/ipam/forms/bulk_edit.py:50 +#: netbox/ipam/forms/bulk_edit.py:53 msgid "Enforce unique space" msgstr "重複を禁止する" -#: netbox/ipam/forms/bulk_edit.py:88 +#: netbox/ipam/forms/bulk_edit.py:91 msgid "Is private" msgstr "非公開" -#: netbox/ipam/forms/bulk_edit.py:109 netbox/ipam/forms/bulk_edit.py:138 -#: netbox/ipam/forms/bulk_edit.py:163 netbox/ipam/forms/bulk_import.py:89 -#: netbox/ipam/forms/bulk_import.py:109 netbox/ipam/forms/bulk_import.py:129 -#: netbox/ipam/forms/filtersets.py:110 netbox/ipam/forms/filtersets.py:125 -#: netbox/ipam/forms/filtersets.py:148 netbox/ipam/forms/model_forms.py:96 -#: netbox/ipam/forms/model_forms.py:109 netbox/ipam/forms/model_forms.py:131 -#: netbox/ipam/forms/model_forms.py:149 netbox/ipam/models/asns.py:31 -#: netbox/ipam/models/asns.py:103 netbox/ipam/models/ip.py:71 -#: netbox/ipam/models/ip.py:90 netbox/ipam/tables/asn.py:20 +#: netbox/ipam/forms/bulk_edit.py:112 netbox/ipam/forms/bulk_edit.py:141 +#: netbox/ipam/forms/bulk_edit.py:166 netbox/ipam/forms/bulk_import.py:92 +#: netbox/ipam/forms/bulk_import.py:112 netbox/ipam/forms/bulk_import.py:132 +#: netbox/ipam/forms/filtersets.py:112 netbox/ipam/forms/filtersets.py:127 +#: netbox/ipam/forms/filtersets.py:150 netbox/ipam/forms/model_forms.py:99 +#: netbox/ipam/forms/model_forms.py:112 netbox/ipam/forms/model_forms.py:135 +#: netbox/ipam/forms/model_forms.py:154 netbox/ipam/models/asns.py:31 +#: netbox/ipam/models/asns.py:100 netbox/ipam/models/ip.py:71 +#: netbox/ipam/models/ip.py:87 netbox/ipam/tables/asn.py:20 #: netbox/ipam/tables/asn.py:45 netbox/templates/ipam/aggregate.html:18 #: netbox/templates/ipam/asn.html:27 netbox/templates/ipam/asnrange.html:19 #: netbox/templates/ipam/rir.html:19 msgid "RIR" msgstr "RIR" -#: netbox/ipam/forms/bulk_edit.py:171 +#: netbox/ipam/forms/bulk_edit.py:174 msgid "Date added" msgstr "追加日" -#: netbox/ipam/forms/bulk_edit.py:229 netbox/ipam/forms/model_forms.py:619 -#: netbox/ipam/forms/model_forms.py:666 netbox/ipam/tables/ip.py:251 -#: netbox/templates/ipam/vlan_edit.html:37 +#: netbox/ipam/forms/bulk_edit.py:213 netbox/ipam/forms/model_forms.py:629 +#: netbox/ipam/forms/model_forms.py:676 netbox/ipam/tables/ip.py:201 +#: netbox/templates/ipam/vlan_edit.html:45 #: netbox/templates/ipam/vlangroup.html:27 msgid "VLAN Group" msgstr "VLAN グループ" -#: netbox/ipam/forms/bulk_edit.py:234 netbox/ipam/forms/bulk_import.py:185 -#: netbox/ipam/forms/filtersets.py:256 netbox/ipam/forms/model_forms.py:218 -#: netbox/ipam/models/vlans.py:250 netbox/ipam/tables/ip.py:255 -#: netbox/templates/ipam/prefix.html:60 netbox/templates/ipam/vlan.html:12 +#: netbox/ipam/forms/bulk_edit.py:218 netbox/ipam/forms/bulk_import.py:181 +#: netbox/ipam/forms/filtersets.py:259 netbox/ipam/forms/model_forms.py:217 +#: netbox/ipam/models/vlans.py:272 netbox/ipam/tables/ip.py:206 +#: netbox/templates/ipam/prefix.html:56 netbox/templates/ipam/vlan.html:12 #: netbox/templates/ipam/vlan/base.html:6 #: netbox/templates/ipam/vlan_edit.html:10 -#: netbox/templates/wireless/wirelesslan.html:30 +#: netbox/templates/wireless/wirelesslan.html:38 #: netbox/vpn/forms/bulk_import.py:304 netbox/vpn/forms/filtersets.py:284 -#: netbox/vpn/forms/model_forms.py:433 netbox/vpn/forms/model_forms.py:452 -#: netbox/wireless/forms/bulk_edit.py:55 -#: netbox/wireless/forms/bulk_import.py:48 -#: netbox/wireless/forms/model_forms.py:48 netbox/wireless/models.py:102 +#: netbox/vpn/forms/model_forms.py:436 netbox/vpn/forms/model_forms.py:455 +#: netbox/wireless/forms/bulk_edit.py:57 +#: netbox/wireless/forms/bulk_import.py:50 +#: netbox/wireless/forms/model_forms.py:50 netbox/wireless/models.py:102 msgid "VLAN" msgstr "VLAN" -#: netbox/ipam/forms/bulk_edit.py:245 +#: netbox/ipam/forms/bulk_edit.py:229 msgid "Prefix length" msgstr "プレフィックス長" -#: netbox/ipam/forms/bulk_edit.py:268 netbox/ipam/forms/filtersets.py:241 -#: netbox/templates/ipam/prefix.html:85 +#: netbox/ipam/forms/bulk_edit.py:252 netbox/ipam/forms/filtersets.py:244 +#: netbox/templates/ipam/prefix.html:81 msgid "Is a pool" msgstr "プールです" -#: netbox/ipam/forms/bulk_edit.py:273 netbox/ipam/forms/bulk_edit.py:318 -#: netbox/ipam/forms/filtersets.py:248 netbox/ipam/forms/filtersets.py:293 -#: netbox/ipam/models/ip.py:272 netbox/ipam/models/ip.py:539 +#: netbox/ipam/forms/bulk_edit.py:257 netbox/ipam/forms/bulk_edit.py:302 +#: netbox/ipam/forms/filtersets.py:251 netbox/ipam/forms/filtersets.py:296 +#: netbox/ipam/models/ip.py:256 netbox/ipam/models/ip.py:525 msgid "Treat as fully utilized" msgstr "すべて使用済として扱う" -#: netbox/ipam/forms/bulk_edit.py:287 netbox/ipam/forms/filtersets.py:171 +#: netbox/ipam/forms/bulk_edit.py:271 netbox/ipam/forms/filtersets.py:173 +#: netbox/ipam/forms/model_forms.py:232 msgid "VLAN Assignment" msgstr "VLAN アサイメント" -#: netbox/ipam/forms/bulk_edit.py:366 netbox/ipam/models/ip.py:772 +#: netbox/ipam/forms/bulk_edit.py:350 netbox/ipam/models/ip.py:772 msgid "DNS name" msgstr "DNS ネーム" -#: netbox/ipam/forms/bulk_edit.py:387 netbox/ipam/forms/bulk_edit.py:534 -#: netbox/ipam/forms/bulk_import.py:418 netbox/ipam/forms/bulk_import.py:493 -#: netbox/ipam/forms/bulk_import.py:519 netbox/ipam/forms/filtersets.py:390 -#: netbox/ipam/forms/filtersets.py:530 netbox/templates/ipam/fhrpgroup.html:22 +#: netbox/ipam/forms/bulk_edit.py:371 netbox/ipam/forms/bulk_edit.py:562 +#: netbox/ipam/forms/bulk_import.py:417 netbox/ipam/forms/bulk_import.py:528 +#: netbox/ipam/forms/bulk_import.py:554 netbox/ipam/forms/filtersets.py:393 +#: netbox/ipam/forms/filtersets.py:582 netbox/templates/ipam/fhrpgroup.html:22 #: netbox/templates/ipam/inc/panels/fhrp_groups.html:24 #: netbox/templates/ipam/service.html:32 #: netbox/templates/ipam/servicetemplate.html:19 msgid "Protocol" msgstr "プロトコル" -#: netbox/ipam/forms/bulk_edit.py:394 netbox/ipam/forms/filtersets.py:397 +#: netbox/ipam/forms/bulk_edit.py:378 netbox/ipam/forms/filtersets.py:400 #: netbox/ipam/tables/fhrp.py:22 netbox/templates/ipam/fhrpgroup.html:26 msgid "Group ID" msgstr "グループ ID" -#: netbox/ipam/forms/bulk_edit.py:399 netbox/ipam/forms/filtersets.py:402 -#: netbox/wireless/forms/bulk_edit.py:68 -#: netbox/wireless/forms/bulk_edit.py:115 -#: netbox/wireless/forms/bulk_import.py:62 -#: netbox/wireless/forms/bulk_import.py:65 -#: netbox/wireless/forms/bulk_import.py:104 -#: netbox/wireless/forms/bulk_import.py:107 -#: netbox/wireless/forms/filtersets.py:54 -#: netbox/wireless/forms/filtersets.py:88 +#: netbox/ipam/forms/bulk_edit.py:383 netbox/ipam/forms/filtersets.py:405 +#: netbox/wireless/forms/bulk_edit.py:70 +#: netbox/wireless/forms/bulk_edit.py:118 +#: netbox/wireless/forms/bulk_import.py:64 +#: netbox/wireless/forms/bulk_import.py:67 +#: netbox/wireless/forms/bulk_import.py:109 +#: netbox/wireless/forms/bulk_import.py:112 +#: netbox/wireless/forms/filtersets.py:57 +#: netbox/wireless/forms/filtersets.py:116 msgid "Authentication type" msgstr "認証タイプ" -#: netbox/ipam/forms/bulk_edit.py:404 netbox/ipam/forms/filtersets.py:406 +#: netbox/ipam/forms/bulk_edit.py:388 netbox/ipam/forms/filtersets.py:409 msgid "Authentication key" msgstr "認証キー" -#: netbox/ipam/forms/bulk_edit.py:421 netbox/ipam/forms/filtersets.py:383 -#: netbox/ipam/forms/model_forms.py:507 netbox/netbox/navigation/menu.py:386 +#: netbox/ipam/forms/bulk_edit.py:405 netbox/ipam/forms/filtersets.py:386 +#: netbox/ipam/forms/model_forms.py:517 netbox/netbox/navigation/menu.py:407 #: netbox/templates/ipam/fhrpgroup.html:49 #: netbox/templates/wireless/inc/authentication_attrs.html:5 -#: netbox/wireless/forms/bulk_edit.py:91 -#: netbox/wireless/forms/bulk_edit.py:149 -#: netbox/wireless/forms/filtersets.py:36 -#: netbox/wireless/forms/filtersets.py:76 -#: netbox/wireless/forms/model_forms.py:55 -#: netbox/wireless/forms/model_forms.py:171 +#: netbox/wireless/forms/bulk_edit.py:94 +#: netbox/wireless/forms/bulk_edit.py:152 +#: netbox/wireless/forms/filtersets.py:39 +#: netbox/wireless/forms/filtersets.py:104 +#: netbox/wireless/forms/model_forms.py:58 +#: netbox/wireless/forms/model_forms.py:174 msgid "Authentication" msgstr "認証" -#: netbox/ipam/forms/bulk_edit.py:436 netbox/ipam/forms/model_forms.py:608 -msgid "Scope type" -msgstr "スコープタイプ" - -#: netbox/ipam/forms/bulk_edit.py:439 netbox/ipam/forms/bulk_edit.py:453 -#: netbox/ipam/forms/model_forms.py:611 netbox/ipam/forms/model_forms.py:621 -#: netbox/ipam/tables/vlans.py:71 netbox/templates/ipam/vlangroup.html:38 -msgid "Scope" -msgstr "スコープ" - -#: netbox/ipam/forms/bulk_edit.py:446 netbox/ipam/models/vlans.py:60 +#: netbox/ipam/forms/bulk_edit.py:430 netbox/ipam/models/vlans.py:62 msgid "VLAN ID ranges" msgstr "VLAN ID の範囲" -#: netbox/ipam/forms/bulk_edit.py:525 +#: netbox/ipam/forms/bulk_edit.py:505 netbox/ipam/forms/bulk_import.py:485 +#: netbox/ipam/forms/filtersets.py:557 netbox/ipam/models/vlans.py:232 +#: netbox/ipam/tables/vlans.py:103 +msgid "Q-in-Q role" +msgstr "Q-in-Q ロール" + +#: netbox/ipam/forms/bulk_edit.py:522 +msgid "Q-in-Q" +msgstr "Q-in-Q" + +#: netbox/ipam/forms/bulk_edit.py:523 msgid "Site & Group" msgstr "サイトとグループ" -#: netbox/ipam/forms/bulk_edit.py:539 netbox/ipam/forms/model_forms.py:692 -#: netbox/ipam/forms/model_forms.py:724 netbox/ipam/tables/services.py:19 +#: netbox/ipam/forms/bulk_edit.py:546 netbox/ipam/forms/bulk_import.py:515 +#: netbox/ipam/forms/model_forms.py:724 netbox/ipam/tables/vlans.py:256 +#: netbox/templates/ipam/vlantranslationrule.html:14 +#: netbox/vpn/forms/model_forms.py:322 netbox/vpn/forms/model_forms.py:359 +msgid "Policy" +msgstr "ポリシー" + +#: netbox/ipam/forms/bulk_edit.py:567 netbox/ipam/forms/model_forms.py:742 +#: netbox/ipam/forms/model_forms.py:774 netbox/ipam/tables/services.py:19 #: netbox/ipam/tables/services.py:49 netbox/templates/ipam/service.html:36 #: netbox/templates/ipam/servicetemplate.html:23 msgid "Ports" msgstr "ポート" -#: netbox/ipam/forms/bulk_import.py:48 +#: netbox/ipam/forms/bulk_import.py:51 msgid "Import route targets" msgstr "インポートルートターゲット" -#: netbox/ipam/forms/bulk_import.py:54 +#: netbox/ipam/forms/bulk_import.py:57 msgid "Export route targets" msgstr "エクスポートルートターゲット" -#: netbox/ipam/forms/bulk_import.py:92 netbox/ipam/forms/bulk_import.py:112 -#: netbox/ipam/forms/bulk_import.py:132 +#: netbox/ipam/forms/bulk_import.py:95 netbox/ipam/forms/bulk_import.py:115 +#: netbox/ipam/forms/bulk_import.py:135 msgid "Assigned RIR" msgstr "割当 RIR" -#: netbox/ipam/forms/bulk_import.py:182 +#: netbox/ipam/forms/bulk_import.py:178 msgid "VLAN's group (if any)" msgstr "VLAN のグループ (存在する場合)" -#: netbox/ipam/forms/bulk_import.py:308 -msgid "Parent device of assigned interface (if any)" -msgstr "割当インタフェースの親デバイス (存在する場合)" - -#: netbox/ipam/forms/bulk_import.py:311 netbox/ipam/forms/bulk_import.py:512 -#: netbox/ipam/forms/model_forms.py:718 -#: netbox/virtualization/filtersets.py:288 -#: netbox/virtualization/filtersets.py:327 -#: netbox/virtualization/forms/bulk_edit.py:200 -#: netbox/virtualization/forms/bulk_edit.py:326 -#: netbox/virtualization/forms/bulk_import.py:146 -#: netbox/virtualization/forms/bulk_import.py:207 -#: netbox/virtualization/forms/filtersets.py:212 -#: netbox/virtualization/forms/filtersets.py:248 -#: netbox/virtualization/forms/model_forms.py:288 -#: netbox/vpn/forms/bulk_import.py:93 netbox/vpn/forms/bulk_import.py:290 -msgid "Virtual machine" -msgstr "仮想マシン" - -#: netbox/ipam/forms/bulk_import.py:315 -msgid "Parent VM of assigned interface (if any)" -msgstr "割当インタフェースの親VM (存在する場合)" +#: netbox/ipam/forms/bulk_import.py:207 +#: netbox/virtualization/forms/bulk_import.py:80 +#: netbox/wireless/forms/bulk_import.py:83 +msgid "Scope ID" +msgstr "スコープ ID" #: netbox/ipam/forms/bulk_import.py:325 -msgid "Is primary" -msgstr "プライマリ" - -#: netbox/ipam/forms/bulk_import.py:326 msgid "Make this the primary IP for the assigned device" msgstr "割当デバイスのプライマリ IP アドレスにする" -#: netbox/ipam/forms/bulk_import.py:330 +#: netbox/ipam/forms/bulk_import.py:329 msgid "Is out-of-band" msgstr "帯域外" -#: netbox/ipam/forms/bulk_import.py:331 +#: netbox/ipam/forms/bulk_import.py:330 msgid "Designate this as the out-of-band IP address for the assigned device" msgstr "これを、割当デバイスの帯域外 IP アドレスとして指定します。" -#: netbox/ipam/forms/bulk_import.py:371 +#: netbox/ipam/forms/bulk_import.py:370 msgid "No device or virtual machine specified; cannot set as primary IP" msgstr "デバイスまたは仮想マシンが指定されていないため、プライマリ IP として設定できません" -#: netbox/ipam/forms/bulk_import.py:375 +#: netbox/ipam/forms/bulk_import.py:374 msgid "No device specified; cannot set as out-of-band IP" msgstr "デバイスが指定されていないため、帯域外IP として設定できません" -#: netbox/ipam/forms/bulk_import.py:379 +#: netbox/ipam/forms/bulk_import.py:378 msgid "Cannot set out-of-band IP for virtual machines" msgstr "仮想マシンには帯域外 IP を設定できません" -#: netbox/ipam/forms/bulk_import.py:383 +#: netbox/ipam/forms/bulk_import.py:382 msgid "No interface specified; cannot set as primary IP" msgstr "インタフェースが指定されていないため、プライマリ IP として設定できません" -#: netbox/ipam/forms/bulk_import.py:387 +#: netbox/ipam/forms/bulk_import.py:386 msgid "No interface specified; cannot set as out-of-band IP" msgstr "インターフェイスが指定されていないため、帯域外IP として設定できません" -#: netbox/ipam/forms/bulk_import.py:422 +#: netbox/ipam/forms/bulk_import.py:421 msgid "Auth type" msgstr "認証タイプ" -#: netbox/ipam/forms/bulk_import.py:437 -msgid "Scope type (app & model)" -msgstr "スコープの種類 (アプリとモデル)" - -#: netbox/ipam/forms/bulk_import.py:464 +#: netbox/ipam/forms/bulk_import.py:463 msgid "Assigned VLAN group" msgstr "割当 VLAN グループ" -#: netbox/ipam/forms/bulk_import.py:495 netbox/ipam/forms/bulk_import.py:521 +#: netbox/ipam/forms/bulk_import.py:495 +msgid "Service VLAN (for Q-in-Q/802.1ad customer VLANs)" +msgstr "サービス VLAN(Q-in-Q/802.1ad カスタマー VLAN 用)" + +#: netbox/ipam/forms/bulk_import.py:518 netbox/ipam/models/vlans.py:343 +msgid "VLAN translation policy" +msgstr "VLAN 変換ポリシー" + +#: netbox/ipam/forms/bulk_import.py:530 netbox/ipam/forms/bulk_import.py:556 msgid "IP protocol" msgstr "IP プロトコル" -#: netbox/ipam/forms/bulk_import.py:509 +#: netbox/ipam/forms/bulk_import.py:544 msgid "Required if not assigned to a VM" msgstr "VM に割り当てられていない場合は必須" -#: netbox/ipam/forms/bulk_import.py:516 +#: netbox/ipam/forms/bulk_import.py:551 msgid "Required if not assigned to a device" msgstr "デバイスに割り当てられていない場合は必須" -#: netbox/ipam/forms/bulk_import.py:541 +#: netbox/ipam/forms/bulk_import.py:576 #, python-brace-format msgid "{ip} is not assigned to this device/VM." msgstr "{ip} はこのデバイス/VM には割り当てられていません。" -#: netbox/ipam/forms/filtersets.py:47 netbox/ipam/forms/model_forms.py:63 -#: netbox/netbox/navigation/menu.py:189 netbox/vpn/forms/model_forms.py:410 +#: netbox/ipam/forms/filtersets.py:49 netbox/ipam/forms/model_forms.py:66 +#: netbox/netbox/navigation/menu.py:195 netbox/vpn/forms/model_forms.py:413 msgid "Route Targets" msgstr "ルートターゲット" -#: netbox/ipam/forms/filtersets.py:53 netbox/ipam/forms/model_forms.py:50 -#: netbox/vpn/forms/filtersets.py:224 netbox/vpn/forms/model_forms.py:397 +#: netbox/ipam/forms/filtersets.py:55 netbox/ipam/forms/model_forms.py:53 +#: netbox/vpn/forms/filtersets.py:224 netbox/vpn/forms/model_forms.py:400 msgid "Import targets" msgstr "インポートターゲット" -#: netbox/ipam/forms/filtersets.py:58 netbox/ipam/forms/model_forms.py:55 -#: netbox/vpn/forms/filtersets.py:229 netbox/vpn/forms/model_forms.py:402 +#: netbox/ipam/forms/filtersets.py:60 netbox/ipam/forms/model_forms.py:58 +#: netbox/vpn/forms/filtersets.py:229 netbox/vpn/forms/model_forms.py:405 msgid "Export targets" msgstr "エクスポートターゲット" -#: netbox/ipam/forms/filtersets.py:73 +#: netbox/ipam/forms/filtersets.py:75 msgid "Imported by VRF" msgstr "VRF によるインポート" -#: netbox/ipam/forms/filtersets.py:78 +#: netbox/ipam/forms/filtersets.py:80 msgid "Exported by VRF" msgstr "VRF によるエクスポート" -#: netbox/ipam/forms/filtersets.py:87 netbox/ipam/tables/ip.py:89 +#: netbox/ipam/forms/filtersets.py:89 netbox/ipam/tables/ip.py:35 #: netbox/templates/ipam/rir.html:30 msgid "Private" msgstr "プライベート" -#: netbox/ipam/forms/filtersets.py:105 netbox/ipam/forms/filtersets.py:191 -#: netbox/ipam/forms/filtersets.py:272 netbox/ipam/forms/filtersets.py:326 +#: netbox/ipam/forms/filtersets.py:107 netbox/ipam/forms/filtersets.py:193 +#: netbox/ipam/forms/filtersets.py:275 netbox/ipam/forms/filtersets.py:329 msgid "Address family" msgstr "アドレスファミリー" -#: netbox/ipam/forms/filtersets.py:119 netbox/templates/ipam/asnrange.html:25 +#: netbox/ipam/forms/filtersets.py:121 netbox/templates/ipam/asnrange.html:25 msgid "Range" msgstr "レンジ" -#: netbox/ipam/forms/filtersets.py:128 +#: netbox/ipam/forms/filtersets.py:130 msgid "Start" msgstr "開始" -#: netbox/ipam/forms/filtersets.py:132 +#: netbox/ipam/forms/filtersets.py:134 msgid "End" msgstr "終了" -#: netbox/ipam/forms/filtersets.py:186 +#: netbox/ipam/forms/filtersets.py:188 msgid "Search within" msgstr "範囲内を検索" -#: netbox/ipam/forms/filtersets.py:207 netbox/ipam/forms/filtersets.py:342 +#: netbox/ipam/forms/filtersets.py:209 netbox/ipam/forms/filtersets.py:345 msgid "Present in VRF" msgstr "VRF 内に存在する" -#: netbox/ipam/forms/filtersets.py:311 +#: netbox/ipam/forms/filtersets.py:314 msgid "Device/VM" msgstr "デバイス/VM" -#: netbox/ipam/forms/filtersets.py:321 +#: netbox/ipam/forms/filtersets.py:324 msgid "Parent Prefix" msgstr "親プレフィックス" -#: netbox/ipam/forms/filtersets.py:347 -msgid "Assigned Device" -msgstr "割当デバイス" - -#: netbox/ipam/forms/filtersets.py:352 -msgid "Assigned VM" -msgstr "割当VM" - -#: netbox/ipam/forms/filtersets.py:366 +#: netbox/ipam/forms/filtersets.py:369 msgid "Assigned to an interface" msgstr "インタフェースに割当済" -#: netbox/ipam/forms/filtersets.py:373 netbox/templates/ipam/ipaddress.html:51 +#: netbox/ipam/forms/filtersets.py:376 netbox/templates/ipam/ipaddress.html:51 msgid "DNS Name" msgstr "DNS名" -#: netbox/ipam/forms/filtersets.py:416 netbox/ipam/models/vlans.py:251 -#: netbox/ipam/tables/ip.py:176 netbox/ipam/tables/vlans.py:82 -#: netbox/ipam/views.py:971 netbox/netbox/navigation/menu.py:193 -#: netbox/netbox/navigation/menu.py:195 +#: netbox/ipam/forms/filtersets.py:419 netbox/ipam/models/vlans.py:273 +#: netbox/ipam/tables/ip.py:122 netbox/ipam/tables/vlans.py:51 +#: netbox/ipam/views.py:1036 netbox/netbox/navigation/menu.py:199 +#: netbox/netbox/navigation/menu.py:201 msgid "VLANs" msgstr "VLAN" -#: netbox/ipam/forms/filtersets.py:457 +#: netbox/ipam/forms/filtersets.py:460 msgid "Contains VLAN ID" msgstr "VLAN ID が含まれています" -#: netbox/ipam/forms/filtersets.py:513 netbox/ipam/models/vlans.py:192 +#: netbox/ipam/forms/filtersets.py:494 netbox/ipam/models/vlans.py:363 +msgid "Local VLAN ID" +msgstr "ローカル VLAN ID" + +#: netbox/ipam/forms/filtersets.py:499 netbox/ipam/models/vlans.py:371 +msgid "Remote VLAN ID" +msgstr "リモート VLAN ID" + +#: netbox/ipam/forms/filtersets.py:509 +msgid "Q-in-Q/802.1ad" +msgstr "Q-in-Q/802.1ad" + +#: netbox/ipam/forms/filtersets.py:554 netbox/ipam/models/vlans.py:191 #: netbox/templates/ipam/vlan.html:31 msgid "VLAN ID" msgstr "VLAN ID" -#: netbox/ipam/forms/filtersets.py:556 netbox/ipam/forms/model_forms.py:324 -#: netbox/ipam/forms/model_forms.py:746 netbox/ipam/forms/model_forms.py:772 -#: netbox/ipam/tables/vlans.py:195 -#: netbox/templates/virtualization/virtualdisk.html:21 -#: netbox/templates/virtualization/virtualmachine.html:12 -#: netbox/templates/virtualization/vminterface.html:21 -#: netbox/templates/vpn/tunneltermination.html:25 -#: netbox/virtualization/forms/filtersets.py:197 -#: netbox/virtualization/forms/filtersets.py:242 -#: netbox/virtualization/forms/model_forms.py:220 -#: netbox/virtualization/tables/virtualmachines.py:135 -#: netbox/virtualization/tables/virtualmachines.py:190 -#: netbox/vpn/choices.py:53 netbox/vpn/forms/filtersets.py:293 -#: netbox/vpn/forms/model_forms.py:160 netbox/vpn/forms/model_forms.py:171 -#: netbox/vpn/forms/model_forms.py:273 netbox/vpn/forms/model_forms.py:454 -msgid "Virtual Machine" -msgstr "仮想マシン" - -#: netbox/ipam/forms/model_forms.py:80 +#: netbox/ipam/forms/model_forms.py:83 #: netbox/templates/ipam/routetarget.html:10 msgid "Route Target" msgstr "ルートターゲット" -#: netbox/ipam/forms/model_forms.py:114 netbox/ipam/tables/ip.py:117 +#: netbox/ipam/forms/model_forms.py:118 netbox/ipam/tables/ip.py:63 #: netbox/templates/ipam/aggregate.html:11 #: netbox/templates/ipam/prefix.html:38 msgid "Aggregate" msgstr "集約" -#: netbox/ipam/forms/model_forms.py:135 netbox/templates/ipam/asnrange.html:12 +#: netbox/ipam/forms/model_forms.py:140 netbox/templates/ipam/asnrange.html:12 msgid "ASN Range" msgstr "ASN レンジ" -#: netbox/ipam/forms/model_forms.py:231 -msgid "Site/VLAN Assignment" -msgstr "" - -#: netbox/ipam/forms/model_forms.py:259 netbox/templates/ipam/iprange.html:10 +#: netbox/ipam/forms/model_forms.py:269 netbox/templates/ipam/iprange.html:10 msgid "IP Range" msgstr "IP アドレス範囲" -#: netbox/ipam/forms/model_forms.py:295 netbox/ipam/forms/model_forms.py:325 -#: netbox/ipam/forms/model_forms.py:506 +#: netbox/ipam/forms/model_forms.py:305 netbox/ipam/forms/model_forms.py:335 +#: netbox/ipam/forms/model_forms.py:516 #: netbox/templates/ipam/fhrpgroup.html:19 msgid "FHRP Group" msgstr "FHRP グループ" -#: netbox/ipam/forms/model_forms.py:310 +#: netbox/ipam/forms/model_forms.py:320 msgid "Make this the primary IP for the device/VM" msgstr "デバイス/VMのプライマリIPにする" -#: netbox/ipam/forms/model_forms.py:314 +#: netbox/ipam/forms/model_forms.py:324 msgid "Make this the out-of-band IP for the device" msgstr "これをデバイスの帯域外IPにする" -#: netbox/ipam/forms/model_forms.py:329 +#: netbox/ipam/forms/model_forms.py:339 msgid "NAT IP (Inside)" msgstr "NAT IP (インサイド)" -#: netbox/ipam/forms/model_forms.py:391 +#: netbox/ipam/forms/model_forms.py:401 msgid "An IP address can only be assigned to a single object." msgstr "IP アドレスは 1 つのオブジェクトにのみ割り当てることができます。" -#: netbox/ipam/forms/model_forms.py:398 +#: netbox/ipam/forms/model_forms.py:408 msgid "Cannot reassign primary IP address for the parent device/VM" msgstr "親デバイス/VMのプライマリ IP アドレスを再割り当てできません" -#: netbox/ipam/forms/model_forms.py:402 +#: netbox/ipam/forms/model_forms.py:412 msgid "Cannot reassign out-of-Band IP address for the parent device" msgstr "親デバイスに帯域外IP アドレスを再割り当てできません" -#: netbox/ipam/forms/model_forms.py:412 +#: netbox/ipam/forms/model_forms.py:422 msgid "" "Only IP addresses assigned to an interface can be designated as primary IPs." msgstr "プライマリ IP として指定できるのは、インタフェースに割り当てられた IP アドレスのみです。" -#: netbox/ipam/forms/model_forms.py:420 +#: netbox/ipam/forms/model_forms.py:430 msgid "" "Only IP addresses assigned to a device interface can be designated as the " "out-of-band IP for a device." msgstr "デバイスの帯域外 IP として指定できるのは、デバイスインタフェイスに割り当てられた IP アドレスのみです。" -#: netbox/ipam/forms/model_forms.py:508 +#: netbox/ipam/forms/model_forms.py:518 msgid "Virtual IP Address" msgstr "仮想 IP アドレス" -#: netbox/ipam/forms/model_forms.py:593 +#: netbox/ipam/forms/model_forms.py:603 msgid "Assignment already exists" msgstr "既に割り当てられています" -#: netbox/ipam/forms/model_forms.py:602 +#: netbox/ipam/forms/model_forms.py:612 #: netbox/templates/ipam/vlangroup.html:42 msgid "VLAN IDs" msgstr "VLAN ID" -#: netbox/ipam/forms/model_forms.py:620 +#: netbox/ipam/forms/model_forms.py:630 msgid "Child VLANs" msgstr "子 VLAN" -#: netbox/ipam/forms/model_forms.py:697 netbox/ipam/forms/model_forms.py:729 +#: netbox/ipam/forms/model_forms.py:730 +#: netbox/templates/ipam/vlantranslationrule.html:11 +msgid "VLAN Translation Rule" +msgstr "VLAN トランスレーションルール" + +#: netbox/ipam/forms/model_forms.py:747 netbox/ipam/forms/model_forms.py:779 msgid "" "Comma-separated list of one or more port numbers. A range may be specified " "using a hyphen." msgstr "カンマ区切りのポート番号のリスト。範囲はハイフンを使用して指定できます。" -#: netbox/ipam/forms/model_forms.py:702 +#: netbox/ipam/forms/model_forms.py:752 #: netbox/templates/ipam/servicetemplate.html:12 msgid "Service Template" msgstr "サービステンプレート" -#: netbox/ipam/forms/model_forms.py:749 +#: netbox/ipam/forms/model_forms.py:799 msgid "Port(s)" msgstr "ポート (s)" -#: netbox/ipam/forms/model_forms.py:750 netbox/ipam/forms/model_forms.py:778 -#: netbox/templates/ipam/service.html:21 -msgid "Service" -msgstr "サービス" - -#: netbox/ipam/forms/model_forms.py:763 +#: netbox/ipam/forms/model_forms.py:813 msgid "Service template" msgstr "サービステンプレート" -#: netbox/ipam/forms/model_forms.py:775 +#: netbox/ipam/forms/model_forms.py:825 msgid "From Template" msgstr "テンプレートから" -#: netbox/ipam/forms/model_forms.py:776 +#: netbox/ipam/forms/model_forms.py:826 msgid "Custom" msgstr "カスタム" -#: netbox/ipam/forms/model_forms.py:806 +#: netbox/ipam/forms/model_forms.py:856 msgid "" "Must specify name, protocol, and port(s) if not using a service template." msgstr "サービステンプレートを使用しない場合は、名前、プロトコル、およびポートを指定する必要があります。" @@ -9776,28 +10262,28 @@ msgstr "ASN レンジ" msgid "ASN ranges" msgstr "ASN レンジ" -#: netbox/ipam/models/asns.py:72 +#: netbox/ipam/models/asns.py:69 #, python-brace-format msgid "Starting ASN ({start}) must be lower than ending ASN ({end})." msgstr "開始ASN ({start}) は終了ASN ({end}) より小さくなければなりません)。" -#: netbox/ipam/models/asns.py:104 +#: netbox/ipam/models/asns.py:101 msgid "Regional Internet Registry responsible for this AS number space" msgstr "この AS 番号空間を担当する地域インターネットレジストリ" -#: netbox/ipam/models/asns.py:109 +#: netbox/ipam/models/asns.py:106 msgid "16- or 32-bit autonomous system number" msgstr "16 または 32 ビットのAS番号" -#: netbox/ipam/models/fhrp.py:22 +#: netbox/ipam/models/fhrp.py:21 msgid "group ID" msgstr "グループ ID" -#: netbox/ipam/models/fhrp.py:30 netbox/ipam/models/services.py:22 +#: netbox/ipam/models/fhrp.py:29 netbox/ipam/models/services.py:21 msgid "protocol" msgstr "プロトコル" -#: netbox/ipam/models/fhrp.py:38 netbox/wireless/models.py:28 +#: netbox/ipam/models/fhrp.py:38 netbox/wireless/models.py:29 msgid "authentication type" msgstr "認証タイプ" @@ -9813,11 +10299,11 @@ msgstr "FHRP グループ" msgid "FHRP groups" msgstr "FHRP グループ" -#: netbox/ipam/models/fhrp.py:113 +#: netbox/ipam/models/fhrp.py:110 msgid "FHRP group assignment" msgstr "FHRP グループ割当" -#: netbox/ipam/models/fhrp.py:114 +#: netbox/ipam/models/fhrp.py:111 msgid "FHRP group assignments" msgstr "FHRP グループ割当" @@ -9829,165 +10315,160 @@ msgstr "プライベート" msgid "IP space managed by this RIR is considered private" msgstr "この RIR が管理する IP スペースはプライベートと見なされます" -#: netbox/ipam/models/ip.py:72 netbox/netbox/navigation/menu.py:182 +#: netbox/ipam/models/ip.py:72 netbox/netbox/navigation/menu.py:188 msgid "RIRs" msgstr "RIR" -#: netbox/ipam/models/ip.py:84 +#: netbox/ipam/models/ip.py:81 msgid "IPv4 or IPv6 network" msgstr "IPv4 または IPv6 ネットワーク" -#: netbox/ipam/models/ip.py:91 +#: netbox/ipam/models/ip.py:88 msgid "Regional Internet Registry responsible for this IP space" msgstr "この IP スペースを管理する地域インターネットレジストリ" -#: netbox/ipam/models/ip.py:101 +#: netbox/ipam/models/ip.py:98 msgid "date added" msgstr "追加日" -#: netbox/ipam/models/ip.py:115 +#: netbox/ipam/models/ip.py:112 msgid "aggregate" msgstr "集約" -#: netbox/ipam/models/ip.py:116 +#: netbox/ipam/models/ip.py:113 msgid "aggregates" msgstr "集約" -#: netbox/ipam/models/ip.py:132 +#: netbox/ipam/models/ip.py:126 msgid "Cannot create aggregate with /0 mask." msgstr "/0 マスクを使用して集約を作成することはできません。" -#: netbox/ipam/models/ip.py:144 +#: netbox/ipam/models/ip.py:138 #, python-brace-format msgid "" "Aggregates cannot overlap. {prefix} is already covered by an existing " "aggregate ({aggregate})." msgstr "集約は重複できません。{prefix} は既存の集約({aggregate}) に含まれます。" -#: netbox/ipam/models/ip.py:158 +#: netbox/ipam/models/ip.py:152 #, python-brace-format msgid "" "Prefixes cannot overlap aggregates. {prefix} covers an existing aggregate " "({aggregate})." msgstr "プレフィックスは集約と重複できません。 {prefix} は既存の集約 ({aggregate}) に含まれます。" -#: netbox/ipam/models/ip.py:200 netbox/ipam/models/ip.py:737 -#: netbox/vpn/models/tunnels.py:114 -msgid "role" -msgstr "ロール" - -#: netbox/ipam/models/ip.py:201 +#: netbox/ipam/models/ip.py:195 msgid "roles" msgstr "ロール" -#: netbox/ipam/models/ip.py:217 netbox/ipam/models/ip.py:293 +#: netbox/ipam/models/ip.py:208 netbox/ipam/models/ip.py:277 msgid "prefix" msgstr "プレフィックス" -#: netbox/ipam/models/ip.py:218 +#: netbox/ipam/models/ip.py:209 msgid "IPv4 or IPv6 network with mask" msgstr "マスク付きの IPv4 または IPv6 ネットワーク" -#: netbox/ipam/models/ip.py:254 +#: netbox/ipam/models/ip.py:238 msgid "Operational status of this prefix" msgstr "このプレフィックスの動作ステータス" -#: netbox/ipam/models/ip.py:262 +#: netbox/ipam/models/ip.py:246 msgid "The primary function of this prefix" msgstr "このプレフィックスの主な機能" -#: netbox/ipam/models/ip.py:265 +#: netbox/ipam/models/ip.py:249 msgid "is a pool" msgstr "プールか" -#: netbox/ipam/models/ip.py:267 +#: netbox/ipam/models/ip.py:251 msgid "All IP addresses within this prefix are considered usable" msgstr "このプレフィックス内のすべての IP アドレスが使用可能と見なされます。" -#: netbox/ipam/models/ip.py:270 netbox/ipam/models/ip.py:537 +#: netbox/ipam/models/ip.py:254 netbox/ipam/models/ip.py:523 msgid "mark utilized" msgstr "使用済み" -#: netbox/ipam/models/ip.py:294 +#: netbox/ipam/models/ip.py:278 msgid "prefixes" msgstr "プレフィックス" -#: netbox/ipam/models/ip.py:317 +#: netbox/ipam/models/ip.py:298 msgid "Cannot create prefix with /0 mask." msgstr "/0 マスクではプレフィックスを作成できません。" -#: netbox/ipam/models/ip.py:324 netbox/ipam/models/ip.py:874 +#: netbox/ipam/models/ip.py:305 netbox/ipam/models/ip.py:871 #, python-brace-format msgid "VRF {vrf}" msgstr "VRF {vrf}" -#: netbox/ipam/models/ip.py:324 netbox/ipam/models/ip.py:874 +#: netbox/ipam/models/ip.py:305 netbox/ipam/models/ip.py:871 msgid "global table" msgstr "グローバルテーブル" -#: netbox/ipam/models/ip.py:326 +#: netbox/ipam/models/ip.py:307 #, python-brace-format msgid "Duplicate prefix found in {table}: {prefix}" msgstr "重複したプレフィックスが見つかりました {table}: {prefix}" -#: netbox/ipam/models/ip.py:495 +#: netbox/ipam/models/ip.py:481 msgid "start address" msgstr "開始アドレス" -#: netbox/ipam/models/ip.py:496 netbox/ipam/models/ip.py:500 -#: netbox/ipam/models/ip.py:712 +#: netbox/ipam/models/ip.py:482 netbox/ipam/models/ip.py:486 +#: netbox/ipam/models/ip.py:711 msgid "IPv4 or IPv6 address (with mask)" msgstr "IPv4 または IPv6 アドレス (マスク付き)" -#: netbox/ipam/models/ip.py:499 +#: netbox/ipam/models/ip.py:485 msgid "end address" msgstr "終了アドレス" -#: netbox/ipam/models/ip.py:526 +#: netbox/ipam/models/ip.py:512 msgid "Operational status of this range" msgstr "この範囲の動作状況" -#: netbox/ipam/models/ip.py:534 +#: netbox/ipam/models/ip.py:520 msgid "The primary function of this range" msgstr "この範囲の主な機能" -#: netbox/ipam/models/ip.py:548 +#: netbox/ipam/models/ip.py:534 msgid "IP range" msgstr "IP アドレス範囲" -#: netbox/ipam/models/ip.py:549 +#: netbox/ipam/models/ip.py:535 msgid "IP ranges" msgstr "IP アドレス範囲" -#: netbox/ipam/models/ip.py:565 +#: netbox/ipam/models/ip.py:548 msgid "Starting and ending IP address versions must match" msgstr "開始・終了 IP アドレスのバージョンが一致している必要があります" -#: netbox/ipam/models/ip.py:571 +#: netbox/ipam/models/ip.py:554 msgid "Starting and ending IP address masks must match" msgstr "開始・終了 IP アドレスマスクは一致する必要があります" -#: netbox/ipam/models/ip.py:578 +#: netbox/ipam/models/ip.py:561 #, python-brace-format msgid "" "Ending address must be greater than the starting address ({start_address})" msgstr "終了アドレスは開始アドレスより大きくなければなりません ({start_address})" -#: netbox/ipam/models/ip.py:590 +#: netbox/ipam/models/ip.py:589 #, python-brace-format msgid "Defined addresses overlap with range {overlapping_range} in VRF {vrf}" msgstr "VRF{vrf}において、定義されたアドレスが範囲{overlapping_range}と重複しています " -#: netbox/ipam/models/ip.py:599 +#: netbox/ipam/models/ip.py:598 #, python-brace-format msgid "Defined range exceeds maximum supported size ({max_size})" msgstr "定義された範囲がサポートされている最大サイズを超えています ({max_size})" -#: netbox/ipam/models/ip.py:711 netbox/tenancy/models/contacts.py:82 +#: netbox/ipam/models/ip.py:710 netbox/tenancy/models/contacts.py:77 msgid "address" msgstr "アドレス" -#: netbox/ipam/models/ip.py:734 +#: netbox/ipam/models/ip.py:733 msgid "The operational status of this IP" msgstr "この IP の動作ステータス" @@ -10007,169 +10488,190 @@ msgstr "このアドレスが「アウトサイド」IPであるIP" msgid "Hostname or FQDN (not case-sensitive)" msgstr "ホスト名または FQDN (大文字と小文字は区別されません)" -#: netbox/ipam/models/ip.py:789 netbox/ipam/models/services.py:94 +#: netbox/ipam/models/ip.py:789 netbox/ipam/models/services.py:90 msgid "IP addresses" msgstr "IP アドレス" -#: netbox/ipam/models/ip.py:845 +#: netbox/ipam/models/ip.py:842 msgid "Cannot create IP address with /0 mask." msgstr "/0 マスクで IP アドレスを作成することはできません。" -#: netbox/ipam/models/ip.py:851 +#: netbox/ipam/models/ip.py:848 #, python-brace-format msgid "{ip} is a network ID, which may not be assigned to an interface." msgstr "{ip} はネットワーク ID のため、インタフェースに割り当てることはできません。" -#: netbox/ipam/models/ip.py:862 +#: netbox/ipam/models/ip.py:859 #, python-brace-format msgid "" "{ip} is a broadcast address, which may not be assigned to an interface." msgstr "{ip} はブロードキャストアドレスのため、インタフェースに割り当てることはできません。" -#: netbox/ipam/models/ip.py:876 +#: netbox/ipam/models/ip.py:873 #, python-brace-format msgid "Duplicate IP address found in {table}: {ipaddress}" msgstr "重複した IP アドレスが見つかりました {table}: {ipaddress}" -#: netbox/ipam/models/ip.py:897 +#: netbox/ipam/models/ip.py:896 msgid "" "Cannot reassign IP address while it is designated as the primary IP for the " "parent object" msgstr "親オブジェクトのプライマリ IP として指定されている間は IP アドレスを再割り当てできません" -#: netbox/ipam/models/ip.py:903 +#: netbox/ipam/models/ip.py:902 msgid "Only IPv6 addresses can be assigned SLAAC status" msgstr "SLAAC ステータスを割り当てることができるのは IPv6 アドレスのみです" -#: netbox/ipam/models/services.py:33 +#: netbox/ipam/models/services.py:32 msgid "port numbers" msgstr "ポート番号" -#: netbox/ipam/models/services.py:59 +#: netbox/ipam/models/services.py:58 msgid "service template" msgstr "サービステンプレート" -#: netbox/ipam/models/services.py:60 +#: netbox/ipam/models/services.py:59 msgid "service templates" msgstr "サービステンプレート" -#: netbox/ipam/models/services.py:95 +#: netbox/ipam/models/services.py:91 msgid "The specific IP addresses (if any) to which this service is bound" msgstr "このサービスがバインドされている IP アドレス (存在する場合)" -#: netbox/ipam/models/services.py:102 +#: netbox/ipam/models/services.py:98 msgid "service" msgstr "サービス" -#: netbox/ipam/models/services.py:103 +#: netbox/ipam/models/services.py:99 msgid "services" msgstr "サービス" -#: netbox/ipam/models/services.py:117 +#: netbox/ipam/models/services.py:110 msgid "" "A service cannot be associated with both a device and a virtual machine." msgstr "サービスをデバイスと仮想マシンの両方に関連付けることはできません。" -#: netbox/ipam/models/services.py:119 +#: netbox/ipam/models/services.py:112 msgid "" "A service must be associated with either a device or a virtual machine." msgstr "サービスは、デバイスまたは仮想マシンのいずれかに関連付ける必要があります。" -#: netbox/ipam/models/vlans.py:85 +#: netbox/ipam/models/vlans.py:87 msgid "VLAN groups" msgstr "VLAN グループ" -#: netbox/ipam/models/vlans.py:95 +#: netbox/ipam/models/vlans.py:94 msgid "Cannot set scope_type without scope_id." msgstr "scope_id なしでscope_typeを設定することはできません。" -#: netbox/ipam/models/vlans.py:97 +#: netbox/ipam/models/vlans.py:96 msgid "Cannot set scope_id without scope_type." msgstr "scope_typeなしでscope_idを設定することはできません。" -#: netbox/ipam/models/vlans.py:105 +#: netbox/ipam/models/vlans.py:104 #, python-brace-format msgid "Starting VLAN ID in range ({value}) cannot be less than {minimum}" msgstr "範囲の開始 VLAN ID ({value}) は{minimum}以下であってはなりません " -#: netbox/ipam/models/vlans.py:111 +#: netbox/ipam/models/vlans.py:110 #, python-brace-format msgid "Ending VLAN ID in range ({value}) cannot exceed {maximum}" msgstr "範囲の終了 VLAN ID ({value}) は{maximum}を超えることはできません " -#: netbox/ipam/models/vlans.py:118 +#: netbox/ipam/models/vlans.py:117 #, python-brace-format msgid "" "Ending VLAN ID in range must be greater than or equal to the starting VLAN " "ID ({range})" msgstr "範囲の終了 VLAN ID は、開始 VLAN ID ({range})以上である必要があります" -#: netbox/ipam/models/vlans.py:124 +#: netbox/ipam/models/vlans.py:123 msgid "Ranges cannot overlap." msgstr "範囲は重複できません。" -#: netbox/ipam/models/vlans.py:181 +#: netbox/ipam/models/vlans.py:180 msgid "The specific site to which this VLAN is assigned (if any)" msgstr "この VLAN が割り当てられているサイト (存在する場合)" -#: netbox/ipam/models/vlans.py:189 +#: netbox/ipam/models/vlans.py:188 msgid "VLAN group (optional)" msgstr "VLAN グループ (オプション)" -#: netbox/ipam/models/vlans.py:197 +#: netbox/ipam/models/vlans.py:196 netbox/ipam/models/vlans.py:368 +#: netbox/ipam/models/vlans.py:376 msgid "Numeric VLAN ID (1-4094)" msgstr "数値によるVLAN ID (1-4094)" -#: netbox/ipam/models/vlans.py:215 +#: netbox/ipam/models/vlans.py:214 msgid "Operational status of this VLAN" msgstr "この VLAN の動作ステータス" -#: netbox/ipam/models/vlans.py:223 +#: netbox/ipam/models/vlans.py:222 msgid "The primary function of this VLAN" msgstr "この VLAN の主な機能" -#: netbox/ipam/models/vlans.py:266 +#: netbox/ipam/models/vlans.py:237 +msgid "Customer/service VLAN designation (for Q-in-Q/IEEE 802.1ad)" +msgstr "カスタマー/サービス VLAN 指定 (Q-in-Q/IEEE 802.1ad 用)" + +#: netbox/ipam/models/vlans.py:285 #, python-brace-format msgid "" "VLAN is assigned to group {group} (scope: {scope}); cannot also assign to " "site {site}." msgstr "VLANはグループ{group}に割り当てられています (スコープ: {scope}) サイト{site}への割り当てはできません 。" -#: netbox/ipam/models/vlans.py:275 +#: netbox/ipam/models/vlans.py:294 #, python-brace-format msgid "VID must be in ranges {ranges} for VLANs in group {group}" msgstr "VID は範囲内にある必要があります {ranges} グループ内の VLAN 用 {group}" -#: netbox/ipam/models/vrfs.py:30 +#: netbox/ipam/models/vlans.py:301 +msgid "Only Q-in-Q customer VLANs maybe assigned to a service VLAN." +msgstr "サービス VLAN に割り当てることができるのは Q-in-Q カスタマー VLAN だけです。" + +#: netbox/ipam/models/vlans.py:307 +msgid "A Q-in-Q customer VLAN must be assigned to a service VLAN." +msgstr "Q-in-Q カスタマー VLAN はサービス VLAN に割り当てる必要があります。" + +#: netbox/ipam/models/vlans.py:344 +msgid "VLAN translation policies" +msgstr "VLAN 変換ポリシー" + +#: netbox/ipam/models/vlans.py:385 +msgid "VLAN translation rule" +msgstr "VLAN トランスレーションルール" + +#: netbox/ipam/models/vrfs.py:29 msgid "route distinguisher" msgstr "ルート識別子(RD)" -#: netbox/ipam/models/vrfs.py:31 +#: netbox/ipam/models/vrfs.py:30 msgid "Unique route distinguisher (as defined in RFC 4364)" msgstr "一意のルート識別子 (RFC 4364 におけるRoute Distinguisher)" -#: netbox/ipam/models/vrfs.py:42 +#: netbox/ipam/models/vrfs.py:41 msgid "enforce unique space" msgstr "重複を禁止する" -#: netbox/ipam/models/vrfs.py:43 +#: netbox/ipam/models/vrfs.py:42 msgid "Prevent duplicate prefixes/IP addresses within this VRF" msgstr "この VRF 内のプレフィックス/IP アドレスの重複を防ぐ" -#: netbox/ipam/models/vrfs.py:63 netbox/netbox/navigation/menu.py:186 -#: netbox/netbox/navigation/menu.py:188 +#: netbox/ipam/models/vrfs.py:62 netbox/netbox/navigation/menu.py:192 +#: netbox/netbox/navigation/menu.py:194 msgid "VRFs" msgstr "VRF" -#: netbox/ipam/models/vrfs.py:82 +#: netbox/ipam/models/vrfs.py:78 msgid "Route target value (formatted in accordance with RFC 4360)" msgstr "ルートターゲット値 (RFC 4360 に従ってフォーマットされています)" -#: netbox/ipam/models/vrfs.py:94 +#: netbox/ipam/models/vrfs.py:91 msgid "route target" msgstr "ルートターゲット" -#: netbox/ipam/models/vrfs.py:95 +#: netbox/ipam/models/vrfs.py:92 msgid "route targets" msgstr "ルートターゲット" @@ -10185,84 +10687,101 @@ msgstr "サイト数" msgid "Provider Count" msgstr "プロバイダ数" -#: netbox/ipam/tables/ip.py:95 netbox/netbox/navigation/menu.py:179 -#: netbox/netbox/navigation/menu.py:181 +#: netbox/ipam/tables/ip.py:41 netbox/netbox/navigation/menu.py:185 +#: netbox/netbox/navigation/menu.py:187 msgid "Aggregates" msgstr "集約" -#: netbox/ipam/tables/ip.py:125 +#: netbox/ipam/tables/ip.py:71 msgid "Added" msgstr "追加日" -#: netbox/ipam/tables/ip.py:128 netbox/ipam/tables/ip.py:166 -#: netbox/ipam/tables/vlans.py:142 netbox/ipam/views.py:346 -#: netbox/netbox/navigation/menu.py:165 netbox/netbox/navigation/menu.py:167 -#: netbox/templates/ipam/vlan.html:84 +#: netbox/ipam/tables/ip.py:74 netbox/ipam/tables/ip.py:112 +#: netbox/ipam/tables/vlans.py:118 netbox/ipam/views.py:373 +#: netbox/netbox/navigation/menu.py:171 netbox/netbox/navigation/menu.py:173 +#: netbox/templates/ipam/vlan.html:100 msgid "Prefixes" msgstr "プレフィックス" -#: netbox/ipam/tables/ip.py:131 netbox/ipam/tables/ip.py:270 -#: netbox/ipam/tables/ip.py:324 netbox/ipam/tables/vlans.py:86 +#: netbox/ipam/tables/ip.py:77 netbox/ipam/tables/ip.py:221 +#: netbox/ipam/tables/ip.py:276 netbox/ipam/tables/vlans.py:55 #: netbox/templates/dcim/device.html:260 #: netbox/templates/ipam/aggregate.html:24 -#: netbox/templates/ipam/iprange.html:29 netbox/templates/ipam/prefix.html:106 +#: netbox/templates/ipam/iprange.html:29 netbox/templates/ipam/prefix.html:102 msgid "Utilization" msgstr "使用率" -#: netbox/ipam/tables/ip.py:171 netbox/netbox/navigation/menu.py:161 +#: netbox/ipam/tables/ip.py:117 netbox/netbox/navigation/menu.py:167 msgid "IP Ranges" msgstr "IP アドレス範囲" -#: netbox/ipam/tables/ip.py:221 +#: netbox/ipam/tables/ip.py:167 msgid "Prefix (Flat)" msgstr "プレフィックス (フラット)" -#: netbox/ipam/tables/ip.py:225 +#: netbox/ipam/tables/ip.py:171 msgid "Depth" msgstr "階層" -#: netbox/ipam/tables/ip.py:262 +#: netbox/ipam/tables/ip.py:191 netbox/ipam/tables/vlans.py:37 +#: netbox/virtualization/tables/clusters.py:77 +#: netbox/wireless/tables/wirelesslan.py:55 +msgid "Scope Type" +msgstr "スコープタイプ" + +#: netbox/ipam/tables/ip.py:213 msgid "Pool" msgstr "プール" -#: netbox/ipam/tables/ip.py:266 netbox/ipam/tables/ip.py:320 +#: netbox/ipam/tables/ip.py:217 netbox/ipam/tables/ip.py:272 msgid "Marked Utilized" msgstr "使用済み" -#: netbox/ipam/tables/ip.py:304 +#: netbox/ipam/tables/ip.py:256 msgid "Start address" msgstr "開始アドレス" -#: netbox/ipam/tables/ip.py:383 +#: netbox/ipam/tables/ip.py:335 msgid "NAT (Inside)" msgstr "NAT (インサイド)" -#: netbox/ipam/tables/ip.py:388 +#: netbox/ipam/tables/ip.py:340 msgid "NAT (Outside)" msgstr "NAT (アウトサイド)" -#: netbox/ipam/tables/ip.py:393 +#: netbox/ipam/tables/ip.py:345 msgid "Assigned" msgstr "割当済" -#: netbox/ipam/tables/ip.py:429 netbox/templates/vpn/l2vpntermination.html:16 +#: netbox/ipam/tables/ip.py:381 netbox/templates/vpn/l2vpntermination.html:16 #: netbox/vpn/forms/filtersets.py:240 msgid "Assigned Object" msgstr "割当オブジェクト" -#: netbox/ipam/tables/vlans.py:68 -msgid "Scope Type" -msgstr "スコープタイプ" - -#: netbox/ipam/tables/vlans.py:76 +#: netbox/ipam/tables/vlans.py:45 msgid "VID Ranges" msgstr "VID レンジ" -#: netbox/ipam/tables/vlans.py:111 netbox/ipam/tables/vlans.py:214 +#: netbox/ipam/tables/vlans.py:80 netbox/ipam/tables/vlans.py:190 #: netbox/templates/dcim/inc/interface_vlans_table.html:4 msgid "VID" msgstr "VID" +#: netbox/ipam/tables/vlans.py:237 +#: netbox/templates/ipam/vlantranslationpolicy.html:22 +msgid "Rules" +msgstr "ルール" + +#: netbox/ipam/tables/vlans.py:260 +#: netbox/templates/ipam/vlantranslationrule.html:18 +msgid "Local VID" +msgstr "ローカル VID" + +#: netbox/ipam/tables/vlans.py:264 +#: netbox/templates/ipam/vlantranslationrule.html:22 +msgid "Remote VID" +msgstr "リモート VID" + #: netbox/ipam/tables/vrfs.py:30 msgid "RD" msgstr "RD" @@ -10300,23 +10819,23 @@ msgid "" "are allowed in DNS names" msgstr "DNS 名に使用できるのは、英数字、アスタリスク、ハイフン、ピリオド、アンダースコアのみです。" -#: netbox/ipam/views.py:533 +#: netbox/ipam/views.py:570 msgid "Child Prefixes" msgstr "子プレフィックス" -#: netbox/ipam/views.py:569 +#: netbox/ipam/views.py:606 msgid "Child Ranges" msgstr "子レンジ" -#: netbox/ipam/views.py:898 +#: netbox/ipam/views.py:958 msgid "Related IPs" msgstr "関連IPアドレス" -#: netbox/ipam/views.py:1127 +#: netbox/ipam/views.py:1315 msgid "Device Interfaces" msgstr "デバイスインタフェース" -#: netbox/ipam/views.py:1145 +#: netbox/ipam/views.py:1333 msgid "VM Interfaces" msgstr "VM インタフェース" @@ -10362,90 +10881,112 @@ msgstr "{class_name} get_view_name () を実装する必要があります" msgid "Invalid permission {permission} for model {model}" msgstr "モデル{model}において権限{permission}が無効です " -#: netbox/netbox/choices.py:49 +#: netbox/netbox/choices.py:51 msgid "Dark Red" msgstr "ダークレッド" -#: netbox/netbox/choices.py:52 +#: netbox/netbox/choices.py:54 msgid "Rose" msgstr "ローズ" -#: netbox/netbox/choices.py:53 +#: netbox/netbox/choices.py:55 msgid "Fuchsia" msgstr "フクシア" -#: netbox/netbox/choices.py:55 +#: netbox/netbox/choices.py:57 msgid "Dark Purple" msgstr "ダークパープル" -#: netbox/netbox/choices.py:58 +#: netbox/netbox/choices.py:60 msgid "Light Blue" msgstr "ライトブルー" -#: netbox/netbox/choices.py:61 +#: netbox/netbox/choices.py:63 msgid "Aqua" msgstr "アクア" -#: netbox/netbox/choices.py:62 +#: netbox/netbox/choices.py:64 msgid "Dark Green" msgstr "ダークグリーン" -#: netbox/netbox/choices.py:64 +#: netbox/netbox/choices.py:66 msgid "Light Green" msgstr "ライトグリーン" -#: netbox/netbox/choices.py:65 +#: netbox/netbox/choices.py:67 msgid "Lime" msgstr "ライム" -#: netbox/netbox/choices.py:67 +#: netbox/netbox/choices.py:69 msgid "Amber" msgstr "アンバー" -#: netbox/netbox/choices.py:69 +#: netbox/netbox/choices.py:71 msgid "Dark Orange" msgstr "ダークオレンジ" -#: netbox/netbox/choices.py:70 +#: netbox/netbox/choices.py:72 msgid "Brown" msgstr "ブラウン" -#: netbox/netbox/choices.py:71 +#: netbox/netbox/choices.py:73 msgid "Light Grey" msgstr "ライトグレー" -#: netbox/netbox/choices.py:72 +#: netbox/netbox/choices.py:74 msgid "Grey" msgstr "グレー" -#: netbox/netbox/choices.py:73 +#: netbox/netbox/choices.py:75 msgid "Dark Grey" msgstr "ダークグレー" -#: netbox/netbox/choices.py:128 +#: netbox/netbox/choices.py:103 netbox/templates/extras/script_result.html:56 +msgid "Default" +msgstr "デフォルト" + +#: netbox/netbox/choices.py:130 msgid "Direct" msgstr "直接" -#: netbox/netbox/choices.py:129 +#: netbox/netbox/choices.py:131 msgid "Upload" msgstr "アップロード" -#: netbox/netbox/choices.py:141 netbox/netbox/choices.py:155 +#: netbox/netbox/choices.py:143 netbox/netbox/choices.py:157 msgid "Auto-detect" msgstr "自動検出" -#: netbox/netbox/choices.py:156 +#: netbox/netbox/choices.py:158 msgid "Comma" msgstr "カンマ" -#: netbox/netbox/choices.py:157 +#: netbox/netbox/choices.py:159 msgid "Semicolon" msgstr "セミコロン" -#: netbox/netbox/choices.py:158 +#: netbox/netbox/choices.py:160 msgid "Tab" msgstr "タブ" +#: netbox/netbox/choices.py:193 netbox/templates/dcim/device.html:327 +#: netbox/templates/dcim/rack.html:107 +msgid "Kilograms" +msgstr "キログラム" + +#: netbox/netbox/choices.py:194 +msgid "Grams" +msgstr "グラム" + +#: netbox/netbox/choices.py:195 netbox/templates/dcim/device.html:328 +#: netbox/templates/dcim/rack.html:108 +msgid "Pounds" +msgstr "ポンド" + +#: netbox/netbox/choices.py:196 +msgid "Ounces" +msgstr "オンス" + #: netbox/netbox/config/__init__.py:67 #, python-brace-format msgid "Invalid configuration parameter: {item}" @@ -10728,6 +11269,26 @@ msgstr "同期日付" msgid "{class_name} must implement a sync_data() method." msgstr "{class_name} はsync_data () メソッドを実装する必要があります。" +#: netbox/netbox/models/mixins.py:22 +msgid "weight unit" +msgstr "重量単位" + +#: netbox/netbox/models/mixins.py:52 +msgid "Must specify a unit when setting a weight" +msgstr "重量を設定するときは単位を指定する必要があります" + +#: netbox/netbox/models/mixins.py:57 +msgid "distance" +msgstr "距離" + +#: netbox/netbox/models/mixins.py:64 +msgid "distance unit" +msgstr "距離単位" + +#: netbox/netbox/models/mixins.py:99 +msgid "Must specify a unit when setting a distance" +msgstr "距離を設定するときは単位を指定する必要があります" + #: netbox/netbox/navigation/menu.py:11 msgid "Organization" msgstr "組織" @@ -10761,10 +11322,6 @@ msgstr "ラックロール" msgid "Elevations" msgstr "ラック図" -#: netbox/netbox/navigation/menu.py:60 netbox/netbox/navigation/menu.py:62 -msgid "Rack Types" -msgstr "ラックタイプ" - #: netbox/netbox/navigation/menu.py:76 msgid "Modules" msgstr "モジュール" @@ -10787,175 +11344,200 @@ msgstr "デバイス構成要素" msgid "Inventory Item Roles" msgstr "在庫品目のロール" -#: netbox/netbox/navigation/menu.py:111 netbox/netbox/navigation/menu.py:115 +#: netbox/netbox/navigation/menu.py:110 +#: netbox/templates/dcim/interface.html:413 +#: netbox/templates/virtualization/vminterface.html:118 +msgid "MAC Addresses" +msgstr "MAC アドレス" + +#: netbox/netbox/navigation/menu.py:117 netbox/netbox/navigation/menu.py:121 +#: netbox/templates/dcim/interface.html:182 msgid "Connections" msgstr "接続" -#: netbox/netbox/navigation/menu.py:117 +#: netbox/netbox/navigation/menu.py:123 msgid "Cables" msgstr "ケーブル" -#: netbox/netbox/navigation/menu.py:118 +#: netbox/netbox/navigation/menu.py:124 msgid "Wireless Links" msgstr "無線リンク" -#: netbox/netbox/navigation/menu.py:121 +#: netbox/netbox/navigation/menu.py:127 msgid "Interface Connections" msgstr "インタフェース接続" -#: netbox/netbox/navigation/menu.py:126 +#: netbox/netbox/navigation/menu.py:132 msgid "Console Connections" msgstr "コンソール接続" -#: netbox/netbox/navigation/menu.py:131 +#: netbox/netbox/navigation/menu.py:137 msgid "Power Connections" msgstr "電源接続" -#: netbox/netbox/navigation/menu.py:147 +#: netbox/netbox/navigation/menu.py:153 msgid "Wireless LAN Groups" msgstr "無線 LAN グループ" -#: netbox/netbox/navigation/menu.py:168 +#: netbox/netbox/navigation/menu.py:174 msgid "Prefix & VLAN Roles" msgstr "プレフィックスと VLAN のロール" -#: netbox/netbox/navigation/menu.py:174 +#: netbox/netbox/navigation/menu.py:180 msgid "ASN Ranges" msgstr "ASN レンジ" -#: netbox/netbox/navigation/menu.py:196 +#: netbox/netbox/navigation/menu.py:202 msgid "VLAN Groups" msgstr "VLAN グループ" #: netbox/netbox/navigation/menu.py:203 +msgid "VLAN Translation Policies" +msgstr "VLAN トランスレーションポリシー" + +#: netbox/netbox/navigation/menu.py:204 +#: netbox/templates/ipam/vlantranslationpolicy.html:46 +msgid "VLAN Translation Rules" +msgstr "VLAN トランスレーションルール" + +#: netbox/netbox/navigation/menu.py:211 msgid "Service Templates" msgstr "サービステンプレート" -#: netbox/netbox/navigation/menu.py:204 netbox/templates/dcim/device.html:302 +#: netbox/netbox/navigation/menu.py:212 netbox/templates/dcim/device.html:302 #: netbox/templates/ipam/ipaddress.html:118 #: netbox/templates/virtualization/virtualmachine.html:154 msgid "Services" msgstr "サービス" -#: netbox/netbox/navigation/menu.py:211 +#: netbox/netbox/navigation/menu.py:219 msgid "VPN" msgstr "VPN" -#: netbox/netbox/navigation/menu.py:215 netbox/netbox/navigation/menu.py:217 +#: netbox/netbox/navigation/menu.py:223 netbox/netbox/navigation/menu.py:225 #: netbox/vpn/tables/tunnels.py:24 msgid "Tunnels" msgstr "トンネル" -#: netbox/netbox/navigation/menu.py:218 +#: netbox/netbox/navigation/menu.py:226 #: netbox/templates/vpn/tunnelgroup.html:8 msgid "Tunnel Groups" msgstr "トンネルグループ" -#: netbox/netbox/navigation/menu.py:219 +#: netbox/netbox/navigation/menu.py:227 msgid "Tunnel Terminations" msgstr "トンネルターミネーション" -#: netbox/netbox/navigation/menu.py:223 netbox/netbox/navigation/menu.py:225 +#: netbox/netbox/navigation/menu.py:231 netbox/netbox/navigation/menu.py:233 #: netbox/vpn/models/l2vpn.py:64 msgid "L2VPNs" msgstr "L2 VPN" -#: netbox/netbox/navigation/menu.py:226 netbox/templates/vpn/l2vpn.html:56 -#: netbox/templates/vpn/tunnel.html:72 netbox/vpn/tables/tunnels.py:58 -msgid "Terminations" -msgstr "終端" - -#: netbox/netbox/navigation/menu.py:232 +#: netbox/netbox/navigation/menu.py:240 msgid "IKE Proposals" msgstr "IKEプロポザール" -#: netbox/netbox/navigation/menu.py:233 +#: netbox/netbox/navigation/menu.py:241 #: netbox/templates/vpn/ikeproposal.html:41 msgid "IKE Policies" msgstr "IKE ポリシ" -#: netbox/netbox/navigation/menu.py:234 +#: netbox/netbox/navigation/menu.py:242 msgid "IPSec Proposals" msgstr "IPsec プロポーザル" -#: netbox/netbox/navigation/menu.py:235 +#: netbox/netbox/navigation/menu.py:243 #: netbox/templates/vpn/ipsecproposal.html:37 msgid "IPSec Policies" msgstr "IPsec ポリシ" -#: netbox/netbox/navigation/menu.py:236 netbox/templates/vpn/ikepolicy.html:38 +#: netbox/netbox/navigation/menu.py:244 netbox/templates/vpn/ikepolicy.html:38 #: netbox/templates/vpn/ipsecpolicy.html:25 msgid "IPSec Profiles" msgstr "IPsec プロファイル" -#: netbox/netbox/navigation/menu.py:251 +#: netbox/netbox/navigation/menu.py:259 #: netbox/templates/virtualization/virtualmachine.html:174 #: netbox/templates/virtualization/virtualmachine/base.html:32 #: netbox/templates/virtualization/virtualmachine_list.html:21 -#: netbox/virtualization/tables/virtualmachines.py:104 -#: netbox/virtualization/views.py:386 +#: netbox/virtualization/tables/virtualmachines.py:74 +#: netbox/virtualization/views.py:403 msgid "Virtual Disks" msgstr "仮想ディスク" -#: netbox/netbox/navigation/menu.py:258 +#: netbox/netbox/navigation/menu.py:266 msgid "Cluster Types" msgstr "クラスタタイプ" -#: netbox/netbox/navigation/menu.py:259 +#: netbox/netbox/navigation/menu.py:267 msgid "Cluster Groups" msgstr "クラスタグループ" -#: netbox/netbox/navigation/menu.py:273 +#: netbox/netbox/navigation/menu.py:281 msgid "Circuit Types" msgstr "回線タイプ" -#: netbox/netbox/navigation/menu.py:274 -msgid "Circuit Groups" -msgstr "回路グループ" - -#: netbox/netbox/navigation/menu.py:275 -#: netbox/templates/circuits/circuit.html:66 -msgid "Group Assignments" -msgstr "グループ課題" - -#: netbox/netbox/navigation/menu.py:276 +#: netbox/netbox/navigation/menu.py:282 msgid "Circuit Terminations" msgstr "回路終端" -#: netbox/netbox/navigation/menu.py:280 netbox/netbox/navigation/menu.py:282 +#: netbox/netbox/navigation/menu.py:286 netbox/netbox/navigation/menu.py:288 +#: netbox/templates/circuits/providernetwork.html:55 +msgid "Virtual Circuits" +msgstr "バーチャルサーキット" + +#: netbox/netbox/navigation/menu.py:289 +msgid "Virtual Circuit Types" +msgstr "仮想回線タイプ" + +#: netbox/netbox/navigation/menu.py:290 +msgid "Virtual Circuit Terminations" +msgstr "バーチャルサーキットターミネーション" + +#: netbox/netbox/navigation/menu.py:296 +msgid "Circuit Groups" +msgstr "回路グループ" + +#: netbox/netbox/navigation/menu.py:297 +#: netbox/templates/circuits/circuit.html:76 +#: netbox/templates/circuits/virtualcircuit.html:69 +msgid "Group Assignments" +msgstr "グループ課題" + +#: netbox/netbox/navigation/menu.py:301 netbox/netbox/navigation/menu.py:303 msgid "Providers" msgstr "プロバイダ" -#: netbox/netbox/navigation/menu.py:283 +#: netbox/netbox/navigation/menu.py:304 #: netbox/templates/circuits/provider.html:51 msgid "Provider Accounts" msgstr "プロバイダアカウント" -#: netbox/netbox/navigation/menu.py:284 +#: netbox/netbox/navigation/menu.py:305 msgid "Provider Networks" msgstr "プロバイダネットワーク" -#: netbox/netbox/navigation/menu.py:298 +#: netbox/netbox/navigation/menu.py:319 msgid "Power Panels" msgstr "電源盤" -#: netbox/netbox/navigation/menu.py:309 +#: netbox/netbox/navigation/menu.py:330 msgid "Configurations" msgstr "コンフィギュレーション" -#: netbox/netbox/navigation/menu.py:311 +#: netbox/netbox/navigation/menu.py:332 msgid "Config Contexts" msgstr "コンフィグコンテキスト" -#: netbox/netbox/navigation/menu.py:312 +#: netbox/netbox/navigation/menu.py:333 msgid "Config Templates" msgstr "設定テンプレート" -#: netbox/netbox/navigation/menu.py:319 netbox/netbox/navigation/menu.py:323 +#: netbox/netbox/navigation/menu.py:340 netbox/netbox/navigation/menu.py:344 msgid "Customization" msgstr "カスタマイズ" -#: netbox/netbox/navigation/menu.py:325 +#: netbox/netbox/navigation/menu.py:346 #: netbox/templates/dcim/device_edit.html:103 #: netbox/templates/dcim/htmx/cable_edit.html:81 #: netbox/templates/dcim/virtualchassis_add.html:31 @@ -10964,96 +11546,96 @@ msgstr "カスタマイズ" #: netbox/templates/htmx/form.html:19 netbox/templates/inc/filter_list.html:30 #: netbox/templates/inc/panels/custom_fields.html:7 #: netbox/templates/ipam/ipaddress_bulk_add.html:35 -#: netbox/templates/ipam/vlan_edit.html:59 +#: netbox/templates/ipam/vlan_edit.html:67 msgid "Custom Fields" msgstr "カスタムフィールド" -#: netbox/netbox/navigation/menu.py:326 +#: netbox/netbox/navigation/menu.py:347 msgid "Custom Field Choices" msgstr "カスタムフィールド選択肢" -#: netbox/netbox/navigation/menu.py:327 +#: netbox/netbox/navigation/menu.py:348 msgid "Custom Links" msgstr "カスタムリンク" -#: netbox/netbox/navigation/menu.py:328 +#: netbox/netbox/navigation/menu.py:349 msgid "Export Templates" msgstr "エクスポートテンプレート" -#: netbox/netbox/navigation/menu.py:329 +#: netbox/netbox/navigation/menu.py:350 msgid "Saved Filters" msgstr "保存済フィルタ" -#: netbox/netbox/navigation/menu.py:331 +#: netbox/netbox/navigation/menu.py:352 msgid "Image Attachments" msgstr "画像添付ファイル" -#: netbox/netbox/navigation/menu.py:349 +#: netbox/netbox/navigation/menu.py:370 msgid "Operations" msgstr "オペレーション" -#: netbox/netbox/navigation/menu.py:353 +#: netbox/netbox/navigation/menu.py:374 msgid "Integrations" msgstr "インテグレーション" -#: netbox/netbox/navigation/menu.py:355 +#: netbox/netbox/navigation/menu.py:376 msgid "Data Sources" msgstr "データソース" -#: netbox/netbox/navigation/menu.py:356 +#: netbox/netbox/navigation/menu.py:377 msgid "Event Rules" msgstr "イベントルール" -#: netbox/netbox/navigation/menu.py:357 +#: netbox/netbox/navigation/menu.py:378 msgid "Webhooks" msgstr "Webhooks" -#: netbox/netbox/navigation/menu.py:361 netbox/netbox/navigation/menu.py:365 -#: netbox/netbox/views/generic/feature_views.py:153 +#: netbox/netbox/navigation/menu.py:382 netbox/netbox/navigation/menu.py:386 +#: netbox/netbox/views/generic/feature_views.py:158 #: netbox/templates/extras/report/base.html:37 #: netbox/templates/extras/script/base.html:36 msgid "Jobs" msgstr "ジョブ" -#: netbox/netbox/navigation/menu.py:371 +#: netbox/netbox/navigation/menu.py:392 msgid "Logging" msgstr "ロギング" -#: netbox/netbox/navigation/menu.py:373 +#: netbox/netbox/navigation/menu.py:394 msgid "Notification Groups" msgstr "通知グループ" -#: netbox/netbox/navigation/menu.py:374 +#: netbox/netbox/navigation/menu.py:395 msgid "Journal Entries" msgstr "ジャーナルエントリ" -#: netbox/netbox/navigation/menu.py:375 +#: netbox/netbox/navigation/menu.py:396 #: netbox/templates/core/objectchange.html:9 #: netbox/templates/core/objectchange_list.html:4 msgid "Change Log" msgstr "変更ログ" -#: netbox/netbox/navigation/menu.py:382 netbox/templates/inc/user_menu.html:29 +#: netbox/netbox/navigation/menu.py:403 netbox/templates/inc/user_menu.html:29 msgid "Admin" msgstr "管理者" -#: netbox/netbox/navigation/menu.py:430 netbox/templates/account/base.html:27 -#: netbox/templates/inc/user_menu.html:57 +#: netbox/netbox/navigation/menu.py:451 netbox/templates/account/base.html:27 +#: netbox/templates/inc/user_menu.html:52 msgid "API Tokens" msgstr "API トークン" -#: netbox/netbox/navigation/menu.py:437 netbox/users/forms/model_forms.py:187 +#: netbox/netbox/navigation/menu.py:458 netbox/users/forms/model_forms.py:187 #: netbox/users/forms/model_forms.py:195 netbox/users/forms/model_forms.py:242 #: netbox/users/forms/model_forms.py:249 msgid "Permissions" msgstr "権限" -#: netbox/netbox/navigation/menu.py:445 netbox/netbox/navigation/menu.py:449 +#: netbox/netbox/navigation/menu.py:466 netbox/netbox/navigation/menu.py:470 #: netbox/templates/core/system.html:7 msgid "System" msgstr "システム" -#: netbox/netbox/navigation/menu.py:454 netbox/netbox/navigation/menu.py:502 +#: netbox/netbox/navigation/menu.py:475 netbox/netbox/navigation/menu.py:523 #: netbox/templates/500.html:35 netbox/templates/account/preferences.html:22 #: netbox/templates/core/plugin.html:13 #: netbox/templates/core/plugin_list.html:7 @@ -11061,36 +11643,36 @@ msgstr "システム" msgid "Plugins" msgstr "プラグイン" -#: netbox/netbox/navigation/menu.py:459 +#: netbox/netbox/navigation/menu.py:480 msgid "Configuration History" msgstr "設定履歴" -#: netbox/netbox/navigation/menu.py:465 netbox/templates/core/rq_task.html:8 +#: netbox/netbox/navigation/menu.py:486 netbox/templates/core/rq_task.html:8 #: netbox/templates/core/rq_task_list.html:22 msgid "Background Tasks" msgstr "バックグラウンドタスク" -#: netbox/netbox/plugins/navigation.py:47 -#: netbox/netbox/plugins/navigation.py:69 +#: netbox/netbox/plugins/navigation.py:48 +#: netbox/netbox/plugins/navigation.py:70 msgid "Permissions must be passed as a tuple or list." msgstr "権限はタプルまたはリストとして渡す必要があります。" -#: netbox/netbox/plugins/navigation.py:51 +#: netbox/netbox/plugins/navigation.py:52 msgid "Buttons must be passed as a tuple or list." msgstr "ボタンはタプルまたはリストとして渡す必要があります。" -#: netbox/netbox/plugins/navigation.py:73 +#: netbox/netbox/plugins/navigation.py:74 msgid "Button color must be a choice within ButtonColorChoices." msgstr "ボタンの色はButtonColorChoicesから選択する必要があります。" -#: netbox/netbox/plugins/registration.py:25 +#: netbox/netbox/plugins/registration.py:26 #, python-brace-format msgid "" "PluginTemplateExtension class {template_extension} was passed as an " "instance!" msgstr "PluginTemplateExtension クラス {template_extension} がインスタンスとして渡されました!" -#: netbox/netbox/plugins/registration.py:31 +#: netbox/netbox/plugins/registration.py:32 #, python-brace-format msgid "" "{template_extension} is not a subclass of " @@ -11099,17 +11681,17 @@ msgstr "" "{template_extension} はnetbox.plugins.Plugins.PluginTemplate Extension " "のサブクラスではありません!" -#: netbox/netbox/plugins/registration.py:51 +#: netbox/netbox/plugins/registration.py:57 #, python-brace-format msgid "{item} must be an instance of netbox.plugins.PluginMenuItem" msgstr "{item} はnetbox.Plugins.PluginMenuItem のインスタンスでなければなりません" -#: netbox/netbox/plugins/registration.py:62 +#: netbox/netbox/plugins/registration.py:68 #, python-brace-format msgid "{menu_link} must be an instance of netbox.plugins.PluginMenuItem" msgstr "{menu_link} はnetbox.plugins.PluginMenuItem のインスタンスでなければなりません" -#: netbox/netbox/plugins/registration.py:67 +#: netbox/netbox/plugins/registration.py:73 #, python-brace-format msgid "{button} must be an instance of netbox.plugins.PluginMenuButton" msgstr "{button} netbox.plugins.Plugin.MenuButton のインスタンスでなければなりません" @@ -11191,93 +11773,93 @@ msgstr "初期化後にストアをレジストリに追加できません" msgid "Cannot delete stores from registry" msgstr "レジストリからストアを削除できません" -#: netbox/netbox/settings.py:760 +#: netbox/netbox/settings.py:752 msgid "Czech" msgstr "チェコ語" -#: netbox/netbox/settings.py:761 +#: netbox/netbox/settings.py:753 msgid "Danish" msgstr "デンマーク語" -#: netbox/netbox/settings.py:762 +#: netbox/netbox/settings.py:754 msgid "German" msgstr "ドイツ語" -#: netbox/netbox/settings.py:763 +#: netbox/netbox/settings.py:755 msgid "English" msgstr "英語" -#: netbox/netbox/settings.py:764 +#: netbox/netbox/settings.py:756 msgid "Spanish" msgstr "スペイン語" -#: netbox/netbox/settings.py:765 +#: netbox/netbox/settings.py:757 msgid "French" msgstr "フランス語" -#: netbox/netbox/settings.py:766 +#: netbox/netbox/settings.py:758 msgid "Italian" msgstr "イタリア語" -#: netbox/netbox/settings.py:767 +#: netbox/netbox/settings.py:759 msgid "Japanese" msgstr "日本語" -#: netbox/netbox/settings.py:768 +#: netbox/netbox/settings.py:760 msgid "Dutch" msgstr "オランダ語" -#: netbox/netbox/settings.py:769 +#: netbox/netbox/settings.py:761 msgid "Polish" msgstr "ポーランド語" -#: netbox/netbox/settings.py:770 +#: netbox/netbox/settings.py:762 msgid "Portuguese" msgstr "ポルトガル語" -#: netbox/netbox/settings.py:771 +#: netbox/netbox/settings.py:763 msgid "Russian" msgstr "ロシア語" -#: netbox/netbox/settings.py:772 +#: netbox/netbox/settings.py:764 msgid "Turkish" msgstr "トルコ語" -#: netbox/netbox/settings.py:773 +#: netbox/netbox/settings.py:765 msgid "Ukrainian" msgstr "ウクライナ語" -#: netbox/netbox/settings.py:774 +#: netbox/netbox/settings.py:766 msgid "Chinese" msgstr "中国語" -#: netbox/netbox/tables/columns.py:176 +#: netbox/netbox/tables/columns.py:177 msgid "Select all" msgstr "すべて選択" -#: netbox/netbox/tables/columns.py:189 +#: netbox/netbox/tables/columns.py:190 msgid "Toggle all" msgstr "すべて切り替え" -#: netbox/netbox/tables/columns.py:300 +#: netbox/netbox/tables/columns.py:302 msgid "Toggle Dropdown" msgstr "ドロップダウンを切り替え" -#: netbox/netbox/tables/columns.py:572 netbox/templates/core/job.html:53 +#: netbox/netbox/tables/columns.py:575 netbox/templates/core/job.html:53 msgid "Error" msgstr "エラー" -#: netbox/netbox/tables/tables.py:58 +#: netbox/netbox/tables/tables.py:59 #, python-brace-format msgid "No {model_name} found" msgstr "{model_name} が見つかりません" -#: netbox/netbox/tables/tables.py:249 +#: netbox/netbox/tables/tables.py:252 #: netbox/templates/generic/bulk_import.html:117 msgid "Field" msgstr "フィールド" -#: netbox/netbox/tables/tables.py:252 +#: netbox/netbox/tables/tables.py:255 msgid "Value" msgstr "値" @@ -11292,24 +11874,24 @@ msgid "" "{error}" msgstr "選択したエクスポートテンプレートをレンダリング中にエラーが発生しました ({template}): {error}" -#: netbox/netbox/views/generic/bulk_views.py:416 +#: netbox/netbox/views/generic/bulk_views.py:421 #, python-brace-format msgid "Row {i}: Object with ID {id} does not exist" msgstr "行 {i}: ID {id}のオブジェクトは存在しません" -#: netbox/netbox/views/generic/bulk_views.py:709 -#: netbox/netbox/views/generic/bulk_views.py:910 -#: netbox/netbox/views/generic/bulk_views.py:958 +#: netbox/netbox/views/generic/bulk_views.py:708 +#: netbox/netbox/views/generic/bulk_views.py:909 +#: netbox/netbox/views/generic/bulk_views.py:957 #, python-brace-format msgid "No {object_type} were selected." msgstr "いいえ {object_type} が選ばれました。" -#: netbox/netbox/views/generic/bulk_views.py:788 +#: netbox/netbox/views/generic/bulk_views.py:787 #, python-brace-format msgid "Renamed {count} {object_type}" msgstr "名前が変更されました {count} {object_type}" -#: netbox/netbox/views/generic/bulk_views.py:888 +#: netbox/netbox/views/generic/bulk_views.py:887 #, python-brace-format msgid "Deleted {count} {object_type}" msgstr "削除済み {count} {object_type}" @@ -11322,16 +11904,16 @@ msgstr "変更ログ" msgid "Journal" msgstr "ジャーナル" -#: netbox/netbox/views/generic/feature_views.py:207 +#: netbox/netbox/views/generic/feature_views.py:212 msgid "Unable to synchronize data: No data file set." msgstr "データを同期できません:データファイルが設定されていません。" -#: netbox/netbox/views/generic/feature_views.py:211 +#: netbox/netbox/views/generic/feature_views.py:216 #, python-brace-format msgid "Synchronized data for {object_type} {object}." msgstr "の同期データ {object_type} {object}。" -#: netbox/netbox/views/generic/feature_views.py:236 +#: netbox/netbox/views/generic/feature_views.py:241 #, python-brace-format msgid "Synced {count} {object_type}" msgstr "同期済み {count} {object_type}" @@ -11403,9 +11985,9 @@ msgstr "(GitHub)" msgid "Home Page" msgstr "ホームページ" -#: netbox/templates/account/base.html:7 netbox/templates/inc/user_menu.html:45 +#: netbox/templates/account/base.html:7 netbox/templates/inc/user_menu.html:40 #: netbox/vpn/forms/bulk_edit.py:255 netbox/vpn/forms/filtersets.py:189 -#: netbox/vpn/forms/model_forms.py:379 +#: netbox/vpn/forms/model_forms.py:382 msgid "Profile" msgstr "プロフィール" @@ -11417,12 +11999,12 @@ msgstr "通知" #: netbox/templates/account/base.html:16 #: netbox/templates/account/subscriptions.html:7 -#: netbox/templates/inc/user_menu.html:51 +#: netbox/templates/inc/user_menu.html:46 msgid "Subscriptions" msgstr "サブスクリプション" #: netbox/templates/account/base.html:19 -#: netbox/templates/inc/user_menu.html:54 +#: netbox/templates/inc/user_menu.html:49 msgid "Preferences" msgstr "環境設定" @@ -11450,6 +12032,7 @@ msgstr "パスワードを変更" #: netbox/templates/generic/object_edit.html:72 #: netbox/templates/htmx/delete_form.html:53 #: netbox/templates/htmx/delete_form.html:55 +#: netbox/templates/htmx/quick_add.html:21 #: netbox/templates/ipam/ipaddress_assign.html:28 #: netbox/templates/virtualization/cluster_add_devices.html:30 msgid "Cancel" @@ -11548,7 +12131,7 @@ msgstr "割当グループ" #: netbox/templates/core/objectchange.html:142 #: netbox/templates/dcim/devicebay.html:59 #: netbox/templates/dcim/inc/panels/inventory_items.html:45 -#: netbox/templates/dcim/interface.html:296 +#: netbox/templates/dcim/interface.html:353 #: netbox/templates/dcim/modulebay.html:80 #: netbox/templates/extras/configcontext.html:70 #: netbox/templates/extras/eventrule.html:66 @@ -11557,6 +12140,7 @@ msgstr "割当グループ" #: netbox/templates/extras/webhook.html:75 #: netbox/templates/inc/panel_table.html:13 #: netbox/templates/inc/panels/comments.html:10 +#: netbox/templates/inc/panels/related_objects.html:23 #: netbox/templates/ipam/inc/panels/fhrp_groups.html:56 #: netbox/templates/users/group.html:34 netbox/templates/users/group.html:44 #: netbox/templates/users/objectpermission.html:77 @@ -11594,7 +12178,7 @@ msgstr "最終使用日" msgid "Add a Token" msgstr "トークンを追加" -#: netbox/templates/base/base.html:22 netbox/templates/home.html:27 +#: netbox/templates/base/base.html:23 netbox/templates/home.html:27 msgid "Home" msgstr "ホーム" @@ -11636,15 +12220,16 @@ msgstr "ソースコード" msgid "Community" msgstr "コミュニティ" -#: netbox/templates/circuits/circuit.html:47 +#: netbox/templates/circuits/circuit.html:57 msgid "Install Date" msgstr "インストール日" -#: netbox/templates/circuits/circuit.html:51 +#: netbox/templates/circuits/circuit.html:61 msgid "Termination Date" msgstr "終端日" -#: netbox/templates/circuits/circuit.html:70 +#: netbox/templates/circuits/circuit.html:80 +#: netbox/templates/circuits/virtualcircuit.html:73 #: netbox/templates/ipam/inc/panels/fhrp_groups.html:15 msgid "Assign Group" msgstr "グループを割り当て" @@ -11692,7 +12277,7 @@ msgid "Add" msgstr "追加" #: netbox/templates/circuits/inc/circuit_termination.html:15 -#: netbox/templates/circuits/inc/circuit_termination_fields.html:36 +#: netbox/templates/circuits/inc/circuit_termination_fields.html:37 #: netbox/templates/dcim/inc/panels/inventory_items.html:32 #: netbox/templates/dcim/powerpanel.html:56 #: netbox/templates/extras/script_list.html:30 @@ -11707,35 +12292,39 @@ msgstr "編集" msgid "Swap" msgstr "スワップ" -#: netbox/templates/circuits/inc/circuit_termination_fields.html:19 +#: netbox/templates/circuits/inc/circuit_termination_fields.html:5 +msgid "Termination point" +msgstr "ターミネーションポイント" + +#: netbox/templates/circuits/inc/circuit_termination_fields.html:20 #: netbox/templates/dcim/consoleport.html:59 #: netbox/templates/dcim/consoleserverport.html:60 #: netbox/templates/dcim/powerfeed.html:114 msgid "Marked as connected" msgstr "接続済みとしてマークされています" -#: netbox/templates/circuits/inc/circuit_termination_fields.html:21 +#: netbox/templates/circuits/inc/circuit_termination_fields.html:22 msgid "to" msgstr "に" -#: netbox/templates/circuits/inc/circuit_termination_fields.html:31 #: netbox/templates/circuits/inc/circuit_termination_fields.html:32 +#: netbox/templates/circuits/inc/circuit_termination_fields.html:33 #: netbox/templates/dcim/frontport.html:80 #: netbox/templates/dcim/inc/connection_endpoints.html:7 -#: netbox/templates/dcim/interface.html:154 +#: netbox/templates/dcim/interface.html:211 #: netbox/templates/dcim/rearport.html:76 msgid "Trace" msgstr "トレース" -#: netbox/templates/circuits/inc/circuit_termination_fields.html:35 +#: netbox/templates/circuits/inc/circuit_termination_fields.html:36 msgid "Edit cable" msgstr "ケーブル編集" -#: netbox/templates/circuits/inc/circuit_termination_fields.html:40 +#: netbox/templates/circuits/inc/circuit_termination_fields.html:41 msgid "Remove cable" msgstr "ケーブルを取り外す" -#: netbox/templates/circuits/inc/circuit_termination_fields.html:41 +#: netbox/templates/circuits/inc/circuit_termination_fields.html:42 #: netbox/templates/dcim/bulk_disconnect.html:5 #: netbox/templates/dcim/device/consoleports.html:12 #: netbox/templates/dcim/device/consoleserverports.html:12 @@ -11748,33 +12337,33 @@ msgstr "ケーブルを取り外す" msgid "Disconnect" msgstr "接続解除" -#: netbox/templates/circuits/inc/circuit_termination_fields.html:48 +#: netbox/templates/circuits/inc/circuit_termination_fields.html:49 #: netbox/templates/dcim/consoleport.html:69 #: netbox/templates/dcim/consoleserverport.html:70 #: netbox/templates/dcim/frontport.html:102 -#: netbox/templates/dcim/interface.html:180 -#: netbox/templates/dcim/interface.html:200 +#: netbox/templates/dcim/interface.html:237 +#: netbox/templates/dcim/interface.html:257 #: netbox/templates/dcim/powerfeed.html:127 -#: netbox/templates/dcim/poweroutlet.html:71 -#: netbox/templates/dcim/poweroutlet.html:72 +#: netbox/templates/dcim/poweroutlet.html:81 +#: netbox/templates/dcim/poweroutlet.html:82 #: netbox/templates/dcim/powerport.html:73 #: netbox/templates/dcim/rearport.html:98 msgid "Connect" msgstr "接続" -#: netbox/templates/circuits/inc/circuit_termination_fields.html:70 +#: netbox/templates/circuits/inc/circuit_termination_fields.html:65 msgid "Downstream" msgstr "ダウンストリーム" -#: netbox/templates/circuits/inc/circuit_termination_fields.html:71 +#: netbox/templates/circuits/inc/circuit_termination_fields.html:66 msgid "Upstream" msgstr "アップストリーム" -#: netbox/templates/circuits/inc/circuit_termination_fields.html:80 +#: netbox/templates/circuits/inc/circuit_termination_fields.html:75 msgid "Cross-Connect" msgstr "クロスコネクト" -#: netbox/templates/circuits/inc/circuit_termination_fields.html:84 +#: netbox/templates/circuits/inc/circuit_termination_fields.html:79 msgid "Patch Panel/Port" msgstr "パッチパネル/ポート" @@ -11786,6 +12375,27 @@ msgstr "回線を追加" msgid "Provider Account" msgstr "プロバイダアカウント" +#: netbox/templates/circuits/providernetwork.html:59 +msgid "Add a Virtual Circuit" +msgstr "バーチャルサーキットの追加" + +#: netbox/templates/circuits/virtualcircuit.html:91 +#: netbox/templates/vpn/tunnel.html:9 +msgid "Add Termination" +msgstr "終了を追加" + +#: netbox/templates/circuits/virtualcircuittermination.html:23 +msgid "Virtual Circuit Termination" +msgstr "バーチャルサーキットターミネーション" + +#: netbox/templates/circuits/virtualcircuittype.html:10 +msgid "Add Virtual Circuit" +msgstr "バーチャルサーキットを追加" + +#: netbox/templates/circuits/virtualcircuittype.html:19 +msgid "Virtual Circuit Type" +msgstr "仮想回線タイプ" + #: netbox/templates/core/configrevision.html:35 msgid "Configuration Data" msgstr "設定データ" @@ -11819,7 +12429,7 @@ msgstr "変更日" #: netbox/templates/core/datafile.html:42 #: netbox/templates/ipam/iprange.html:25 #: netbox/templates/virtualization/virtualdisk.html:29 -#: netbox/virtualization/tables/virtualmachines.py:198 +#: netbox/virtualization/tables/virtualmachines.py:169 msgid "Size" msgstr "サイズ" @@ -12257,8 +12867,8 @@ msgstr "選択項目の名前を変更" #: netbox/templates/dcim/consoleport.html:65 #: netbox/templates/dcim/consoleserverport.html:66 #: netbox/templates/dcim/frontport.html:98 -#: netbox/templates/dcim/interface.html:176 -#: netbox/templates/dcim/poweroutlet.html:69 +#: netbox/templates/dcim/interface.html:233 +#: netbox/templates/dcim/poweroutlet.html:79 #: netbox/templates/dcim/powerport.html:69 msgid "Not Connected" msgstr "未接続" @@ -12281,7 +12891,7 @@ msgid "Map" msgstr "マップ" #: netbox/templates/dcim/device.html:108 -#: netbox/templates/dcim/inventoryitem.html:56 +#: netbox/templates/dcim/inventoryitem.html:60 #: netbox/templates/dcim/module.html:81 #: netbox/templates/dcim/modulebay.html:74 netbox/templates/dcim/rack.html:61 msgid "Asset Tag" @@ -12297,7 +12907,7 @@ msgstr "VDC の作成" #: netbox/templates/dcim/device.html:175 #: netbox/templates/dcim/device_edit.html:64 -#: netbox/virtualization/forms/model_forms.py:223 +#: netbox/virtualization/forms/model_forms.py:230 msgid "Management" msgstr "マネジメント" @@ -12414,35 +13024,6 @@ msgstr "電源ポートを追加" msgid "Add Rear Ports" msgstr "背面ポートを追加" -#: netbox/templates/dcim/device/render_config.html:5 -#: netbox/templates/virtualization/virtualmachine/render_config.html:5 -msgid "Config" -msgstr "コンフィグ" - -#: netbox/templates/dcim/device/render_config.html:35 -#: netbox/templates/virtualization/virtualmachine/render_config.html:35 -msgid "Context Data" -msgstr "コンテキストデータ" - -#: netbox/templates/dcim/device/render_config.html:55 -#: netbox/templates/virtualization/virtualmachine/render_config.html:55 -msgid "Rendered Config" -msgstr "レンダリング設定" - -#: netbox/templates/dcim/device/render_config.html:57 -#: netbox/templates/virtualization/virtualmachine/render_config.html:57 -msgid "Download" -msgstr "ダウンロード" - -#: netbox/templates/dcim/device/render_config.html:64 -#: netbox/templates/virtualization/virtualmachine/render_config.html:64 -msgid "Error rendering template" -msgstr "エラーレンダリングテンプレート" - -#: netbox/templates/dcim/device/render_config.html:70 -msgid "No configuration template has been assigned for this device." -msgstr "" - #: netbox/templates/dcim/device_edit.html:44 msgid "Parent Bay" msgstr "親ベイ" @@ -12509,12 +13090,12 @@ msgid "VM Role" msgstr "VMのロール" #: netbox/templates/dcim/devicetype.html:18 -#: netbox/templates/dcim/moduletype.html:29 +#: netbox/templates/dcim/moduletype.html:31 msgid "Model Name" msgstr "モデル名" #: netbox/templates/dcim/devicetype.html:25 -#: netbox/templates/dcim/moduletype.html:33 +#: netbox/templates/dcim/moduletype.html:35 msgid "Part Number" msgstr "パーツ番号" @@ -12539,8 +13120,8 @@ msgid "Rear Port Position" msgstr "背面ポート位置" #: netbox/templates/dcim/frontport.html:72 -#: netbox/templates/dcim/interface.html:144 -#: netbox/templates/dcim/poweroutlet.html:63 +#: netbox/templates/dcim/interface.html:201 +#: netbox/templates/dcim/poweroutlet.html:73 #: netbox/templates/dcim/powerport.html:63 #: netbox/templates/dcim/rearport.html:68 msgid "Marked as Connected" @@ -12640,77 +13221,79 @@ msgid "PoE Type" msgstr "PoE タイプ" #: netbox/templates/dcim/interface.html:81 -#: netbox/templates/virtualization/vminterface.html:63 +#: netbox/templates/virtualization/vminterface.html:55 +#: netbox/virtualization/forms/model_forms.py:395 msgid "802.1Q Mode" msgstr "802.1Q モード" -#: netbox/templates/dcim/interface.html:125 -#: netbox/templates/virtualization/vminterface.html:59 -msgid "MAC Address" -msgstr "MAC アドレス" +#: netbox/templates/dcim/interface.html:156 +#: netbox/templates/virtualization/vminterface.html:88 +msgid "VLAN Translation" +msgstr "VLAN トランスレーション" -#: netbox/templates/dcim/interface.html:151 +#: netbox/templates/dcim/interface.html:208 msgid "Wireless Link" msgstr "無線リンク" -#: netbox/templates/dcim/interface.html:218 netbox/vpn/choices.py:63 -msgid "Peer" -msgstr "ピア" - -#: netbox/templates/dcim/interface.html:230 +#: netbox/templates/dcim/interface.html:287 #: netbox/templates/wireless/inc/wirelesslink_interface.html:26 msgid "Channel" msgstr "チャネル" -#: netbox/templates/dcim/interface.html:239 +#: netbox/templates/dcim/interface.html:296 #: netbox/templates/wireless/inc/wirelesslink_interface.html:32 msgid "Channel Frequency" msgstr "チャンネル周波数" -#: netbox/templates/dcim/interface.html:242 -#: netbox/templates/dcim/interface.html:250 -#: netbox/templates/dcim/interface.html:261 -#: netbox/templates/dcim/interface.html:269 +#: netbox/templates/dcim/interface.html:299 +#: netbox/templates/dcim/interface.html:307 +#: netbox/templates/dcim/interface.html:318 +#: netbox/templates/dcim/interface.html:326 msgid "MHz" msgstr "メガヘルツ" -#: netbox/templates/dcim/interface.html:258 +#: netbox/templates/dcim/interface.html:315 #: netbox/templates/wireless/inc/wirelesslink_interface.html:42 msgid "Channel Width" msgstr "チャンネル幅" -#: netbox/templates/dcim/interface.html:285 +#: netbox/templates/dcim/interface.html:342 #: netbox/templates/wireless/wirelesslan.html:14 #: netbox/templates/wireless/wirelesslink.html:21 -#: netbox/wireless/forms/bulk_edit.py:60 -#: netbox/wireless/forms/bulk_edit.py:102 -#: netbox/wireless/forms/filtersets.py:40 -#: netbox/wireless/forms/filtersets.py:80 netbox/wireless/models.py:82 -#: netbox/wireless/models.py:156 netbox/wireless/tables/wirelesslan.py:44 +#: netbox/wireless/forms/bulk_edit.py:62 +#: netbox/wireless/forms/bulk_edit.py:105 +#: netbox/wireless/forms/filtersets.py:43 +#: netbox/wireless/forms/filtersets.py:108 netbox/wireless/models.py:82 +#: netbox/wireless/models.py:153 netbox/wireless/tables/wirelesslan.py:44 msgid "SSID" msgstr "SSID" -#: netbox/templates/dcim/interface.html:305 +#: netbox/templates/dcim/interface.html:362 msgid "LAG Members" msgstr "LAG メンバー" -#: netbox/templates/dcim/interface.html:323 +#: netbox/templates/dcim/interface.html:380 msgid "No member interfaces" msgstr "メンバーインタフェースなし" -#: netbox/templates/dcim/interface.html:343 +#: netbox/templates/dcim/interface.html:400 #: netbox/templates/ipam/fhrpgroup.html:73 #: netbox/templates/ipam/iprange/ip_addresses.html:7 #: netbox/templates/ipam/prefix/ip_addresses.html:7 -#: netbox/templates/virtualization/vminterface.html:89 +#: netbox/templates/virtualization/vminterface.html:105 msgid "Add IP Address" msgstr "IP アドレスを追加" +#: netbox/templates/dcim/interface.html:417 +#: netbox/templates/virtualization/vminterface.html:123 +msgid "Add MAC Address" +msgstr "MAC アドレスを追加" + #: netbox/templates/dcim/inventoryitem.html:24 msgid "Parent Item" msgstr "親アイテム" -#: netbox/templates/dcim/inventoryitem.html:48 +#: netbox/templates/dcim/inventoryitem.html:52 msgid "Part ID" msgstr "パーツ ID" @@ -12730,6 +13313,10 @@ msgstr "ロケーションを追加" msgid "Add a Device" msgstr "デバイスを追加" +#: netbox/templates/dcim/macaddress.html:36 +msgid "Primary for interface" +msgstr "インターフェイスのプライマリ" + #: netbox/templates/dcim/manufacturer.html:16 msgid "Add Device Type" msgstr "デバイスタイプを追加" @@ -12760,7 +13347,7 @@ msgctxt "Abbreviation for amperes" msgid "A" msgstr "A" -#: netbox/templates/dcim/poweroutlet.html:48 +#: netbox/templates/dcim/poweroutlet.html:58 msgid "Feed Leg" msgstr "供給端子" @@ -13174,11 +13761,17 @@ msgstr "コンテンツを読み込めません。ビュー名が無効です。 msgid "No content found" msgstr "コンテンツが見つかりません" -#: netbox/templates/extras/dashboard/widgets/rssfeed.html:18 +#: netbox/templates/extras/dashboard/widgets/rssfeed.html:17 +msgid "" +"This RSS feed requires an external connection. Check the ISOLATED_DEPLOYMENT" +" setting." +msgstr "この RSS フィードには外部接続が必要です。ISOLATED_DEPLOYMENT の設定を確認してください。" + +#: netbox/templates/extras/dashboard/widgets/rssfeed.html:22 msgid "There was a problem fetching the RSS feed" msgstr "RSS フィードの取得中に問題が発生しました" -#: netbox/templates/extras/dashboard/widgets/rssfeed.html:21 +#: netbox/templates/extras/dashboard/widgets/rssfeed.html:25 msgid "HTTP" msgstr "HTTP" @@ -13248,6 +13841,30 @@ msgstr "ソースコンテキスト" msgid "New Journal Entry" msgstr "新しいジャーナルエントリ" +#: netbox/templates/extras/object_render_config.html:6 +msgid "Config" +msgstr "コンフィグ" + +#: netbox/templates/extras/object_render_config.html:36 +msgid "Context Data" +msgstr "コンテキストデータ" + +#: netbox/templates/extras/object_render_config.html:56 +msgid "Rendered Config" +msgstr "レンダリング設定" + +#: netbox/templates/extras/object_render_config.html:58 +msgid "Download" +msgstr "ダウンロード" + +#: netbox/templates/extras/object_render_config.html:65 +msgid "Error rendering template" +msgstr "エラーレンダリングテンプレート" + +#: netbox/templates/extras/object_render_config.html:71 +msgid "No configuration template has been assigned." +msgstr "設定テンプレートは割り当てられていません。" + #: netbox/templates/extras/report/base.html:30 msgid "Report" msgstr "報告書" @@ -13335,7 +13952,7 @@ msgstr "任意" msgid "Tagged Item Types" msgstr "タグ付きアイテムタイプ" -#: netbox/templates/extras/tag.html:81 +#: netbox/templates/extras/tag.html:82 msgid "Tagged Objects" msgstr "タグ付きオブジェクト" @@ -13613,6 +14230,21 @@ msgstr "すべての通知" msgid "Select" msgstr "選択" +#: netbox/templates/htmx/quick_add.html:7 +msgid "Quick Add" +msgstr "クイック追加" + +#: netbox/templates/htmx/quick_add_created.html:18 +#, python-format +msgid "" +"\n" +" Created %(object_type)s %(object)s\n" +" " +msgstr "" +"\n" +" 作成されました %(object_type)s %(object)s\n" +" " + #: netbox/templates/inc/filter_list.html:43 #: netbox/utilities/templates/helpers/table_config_form.html:39 msgid "Reset" @@ -13683,15 +14315,11 @@ msgstr "注文をクリア" msgid "Help center" msgstr "ヘルプセンター" -#: netbox/templates/inc/user_menu.html:41 -msgid "Django Admin" -msgstr "" - -#: netbox/templates/inc/user_menu.html:61 +#: netbox/templates/inc/user_menu.html:56 msgid "Log Out" msgstr "ログアウト" -#: netbox/templates/inc/user_menu.html:68 netbox/templates/login.html:38 +#: netbox/templates/inc/user_menu.html:63 netbox/templates/login.html:38 msgid "Log In" msgstr "ログイン" @@ -13788,43 +14416,43 @@ msgstr "開始アドレス" msgid "Ending Address" msgstr "終了アドレス" -#: netbox/templates/ipam/iprange.html:33 netbox/templates/ipam/prefix.html:110 +#: netbox/templates/ipam/iprange.html:33 netbox/templates/ipam/prefix.html:106 msgid "Marked fully utilized" msgstr "「完全使用済み」とマークされています" -#: netbox/templates/ipam/prefix.html:99 +#: netbox/templates/ipam/prefix.html:95 msgid "Addressing Details" msgstr "アドレス詳細" -#: netbox/templates/ipam/prefix.html:118 +#: netbox/templates/ipam/prefix.html:114 msgid "Child IPs" msgstr "子供 IP" -#: netbox/templates/ipam/prefix.html:126 +#: netbox/templates/ipam/prefix.html:122 msgid "Available IPs" msgstr "使用可能な IP" -#: netbox/templates/ipam/prefix.html:138 +#: netbox/templates/ipam/prefix.html:134 msgid "First available IP" msgstr "最初に利用可能な IP" -#: netbox/templates/ipam/prefix.html:179 +#: netbox/templates/ipam/prefix.html:175 msgid "Prefix Details" msgstr "プレフィックスの詳細" -#: netbox/templates/ipam/prefix.html:185 +#: netbox/templates/ipam/prefix.html:181 msgid "Network Address" msgstr "ネットワークアドレス" -#: netbox/templates/ipam/prefix.html:189 +#: netbox/templates/ipam/prefix.html:185 msgid "Network Mask" msgstr "ネットワークマスク" -#: netbox/templates/ipam/prefix.html:193 +#: netbox/templates/ipam/prefix.html:189 msgid "Wildcard Mask" msgstr "ワイルドカードマスク" -#: netbox/templates/ipam/prefix.html:197 +#: netbox/templates/ipam/prefix.html:193 msgid "Broadcast Address" msgstr "ブロードキャストアドレス" @@ -13864,14 +14492,30 @@ msgstr "L2VPN のインポート" msgid "Exporting L2VPNs" msgstr "L2VPN のエクスポート" -#: netbox/templates/ipam/vlan.html:88 +#: netbox/templates/ipam/vlan.html:66 +msgid "Q-in-Q Role" +msgstr "Q-in-Q ロール" + +#: netbox/templates/ipam/vlan.html:104 msgid "Add a Prefix" msgstr "プレフィックスを追加" +#: netbox/templates/ipam/vlan.html:114 +msgid "Customer VLANs" +msgstr "カスタマー VLAN" + +#: netbox/templates/ipam/vlan.html:118 +msgid "Add a VLAN" +msgstr "VLAN の追加" + #: netbox/templates/ipam/vlangroup.html:18 msgid "Add VLAN" msgstr "VLAN の追加" +#: netbox/templates/ipam/vlantranslationpolicy.html:51 +msgid "Add Rule" +msgstr "ルールを追加" + #: netbox/templates/ipam/vrf.html:16 msgid "Route Distinguisher" msgstr "ルート識別子" @@ -13945,7 +14589,7 @@ msgstr "クリック ここに NetBox をもう一 #: netbox/templates/tenancy/contact.html:18 netbox/tenancy/filtersets.py:147 #: netbox/tenancy/forms/bulk_edit.py:137 -#: netbox/tenancy/forms/filtersets.py:102 netbox/tenancy/forms/forms.py:56 +#: netbox/tenancy/forms/filtersets.py:102 netbox/tenancy/forms/forms.py:57 #: netbox/tenancy/forms/model_forms.py:106 #: netbox/tenancy/forms/model_forms.py:130 #: netbox/tenancy/tables/contacts.py:98 @@ -13963,7 +14607,7 @@ msgid "Phone" msgstr "電話" #: netbox/templates/tenancy/contactgroup.html:18 -#: netbox/tenancy/forms/forms.py:66 netbox/tenancy/forms/model_forms.py:75 +#: netbox/tenancy/forms/forms.py:67 netbox/tenancy/forms/model_forms.py:75 msgid "Contact Group" msgstr "コンタクトグループ" @@ -13972,7 +14616,7 @@ msgid "Add Contact Group" msgstr "連絡先グループを追加" #: netbox/templates/tenancy/contactrole.html:15 -#: netbox/tenancy/filtersets.py:152 netbox/tenancy/forms/forms.py:61 +#: netbox/tenancy/filtersets.py:152 netbox/tenancy/forms/forms.py:62 #: netbox/tenancy/forms/model_forms.py:87 msgid "Contact Role" msgstr "連絡先のロール" @@ -13986,8 +14630,8 @@ msgid "Add Tenant" msgstr "テナントを追加" #: netbox/templates/tenancy/tenantgroup.html:26 -#: netbox/tenancy/forms/model_forms.py:32 netbox/tenancy/tables/columns.py:51 -#: netbox/tenancy/tables/columns.py:61 +#: netbox/tenancy/forms/model_forms.py:32 netbox/tenancy/tables/columns.py:36 +#: netbox/tenancy/tables/columns.py:46 msgid "Tenant Group" msgstr "テナントグループ" @@ -14018,21 +14662,21 @@ msgstr "制約" msgid "Assigned Users" msgstr "割当ユーザ" -#: netbox/templates/virtualization/cluster.html:52 +#: netbox/templates/virtualization/cluster.html:56 msgid "Allocated Resources" msgstr "割り当てられたリソース" -#: netbox/templates/virtualization/cluster.html:55 +#: netbox/templates/virtualization/cluster.html:59 #: netbox/templates/virtualization/virtualmachine.html:125 msgid "Virtual CPUs" msgstr "バーチャル CPU" -#: netbox/templates/virtualization/cluster.html:59 +#: netbox/templates/virtualization/cluster.html:63 #: netbox/templates/virtualization/virtualmachine.html:129 msgid "Memory" msgstr "メモリー" -#: netbox/templates/virtualization/cluster.html:69 +#: netbox/templates/virtualization/cluster.html:73 #: netbox/templates/virtualization/virtualmachine.html:140 msgid "Disk Space" msgstr "ディスク容量" @@ -14068,13 +14712,13 @@ msgid "Add Cluster" msgstr "クラスタを追加" #: netbox/templates/virtualization/clustergroup.html:19 -#: netbox/virtualization/forms/model_forms.py:50 +#: netbox/virtualization/forms/model_forms.py:53 msgid "Cluster Group" msgstr "クラスタグループ" #: netbox/templates/virtualization/clustertype.html:19 #: netbox/templates/virtualization/virtualmachine.html:110 -#: netbox/virtualization/forms/model_forms.py:36 +#: netbox/virtualization/forms/model_forms.py:39 msgid "Cluster Type" msgstr "クラスタタイプ" @@ -14083,8 +14727,8 @@ msgid "Virtual Disk" msgstr "仮想ディスク" #: netbox/templates/virtualization/virtualmachine.html:122 -#: netbox/virtualization/forms/bulk_edit.py:190 -#: netbox/virtualization/forms/model_forms.py:224 +#: netbox/virtualization/forms/bulk_edit.py:172 +#: netbox/virtualization/forms/model_forms.py:231 msgid "Resources" msgstr "リソース" @@ -14092,10 +14736,6 @@ msgstr "リソース" msgid "Add Virtual Disk" msgstr "仮想ディスクを追加" -#: netbox/templates/virtualization/virtualmachine/render_config.html:70 -msgid "No configuration template has been assigned for this virtual machine." -msgstr "" - #: netbox/templates/vpn/ikepolicy.html:10 #: netbox/templates/vpn/ipsecprofile.html:33 netbox/vpn/tables/crypto.py:166 msgid "IKE Policy" @@ -14118,7 +14758,7 @@ msgstr "シークレットを表示" #: netbox/templates/vpn/ipsecpolicy.html:45 #: netbox/templates/vpn/ipsecprofile.html:52 #: netbox/templates/vpn/ipsecprofile.html:77 -#: netbox/vpn/forms/model_forms.py:316 netbox/vpn/forms/model_forms.py:352 +#: netbox/vpn/forms/model_forms.py:317 netbox/vpn/forms/model_forms.py:354 #: netbox/vpn/tables/crypto.py:68 netbox/vpn/tables/crypto.py:134 msgid "Proposals" msgstr "提案" @@ -14164,12 +14804,12 @@ msgid "IPSec Policy" msgstr "IPsec ポリシー" #: netbox/templates/vpn/ipsecpolicy.html:21 netbox/vpn/forms/bulk_edit.py:210 -#: netbox/vpn/models/crypto.py:193 +#: netbox/vpn/models/crypto.py:191 msgid "PFS group" msgstr "PFS グループ" #: netbox/templates/vpn/ipsecprofile.html:10 -#: netbox/vpn/forms/model_forms.py:54 +#: netbox/vpn/forms/model_forms.py:55 msgid "IPSec Profile" msgstr "IPsec プロファイル" @@ -14195,10 +14835,6 @@ msgstr "L2VPN アトリビュート" msgid "Add a Termination" msgstr "終了を追加" -#: netbox/templates/vpn/tunnel.html:9 -msgid "Add Termination" -msgstr "終了を追加" - #: netbox/templates/vpn/tunnel.html:37 netbox/vpn/forms/bulk_edit.py:49 #: netbox/vpn/forms/bulk_import.py:48 netbox/vpn/forms/filtersets.py:57 msgid "Encapsulation" @@ -14206,7 +14842,7 @@ msgstr "カプセル化" #: netbox/templates/vpn/tunnel.html:41 netbox/vpn/forms/bulk_edit.py:55 #: netbox/vpn/forms/bulk_import.py:53 netbox/vpn/forms/filtersets.py:64 -#: netbox/vpn/models/crypto.py:250 netbox/vpn/tables/tunnels.py:51 +#: netbox/vpn/models/crypto.py:246 netbox/vpn/tables/tunnels.py:51 msgid "IPSec profile" msgstr "IPsec プロファイル" @@ -14229,8 +14865,8 @@ msgid "Tunnel Termination" msgstr "トンネル終端" #: netbox/templates/vpn/tunneltermination.html:35 -#: netbox/vpn/forms/bulk_import.py:107 netbox/vpn/forms/model_forms.py:102 -#: netbox/vpn/forms/model_forms.py:138 netbox/vpn/forms/model_forms.py:247 +#: netbox/vpn/forms/bulk_import.py:107 netbox/vpn/forms/model_forms.py:103 +#: netbox/vpn/forms/model_forms.py:139 netbox/vpn/forms/model_forms.py:248 #: netbox/vpn/tables/tunnels.py:101 msgid "Outside IP" msgstr "外部IP" @@ -14253,7 +14889,7 @@ msgctxt "Abbreviation for megahertz" msgid "MHz" msgstr "MHz" -#: netbox/templates/wireless/wirelesslan.html:57 +#: netbox/templates/wireless/wirelesslan.html:65 msgid "Attached Interfaces" msgstr "接続インタフェース" @@ -14262,7 +14898,7 @@ msgid "Add Wireless LAN" msgstr "無線 LAN の追加" #: netbox/templates/wireless/wirelesslangroup.html:26 -#: netbox/wireless/forms/model_forms.py:28 +#: netbox/wireless/forms/model_forms.py:29 msgid "Wireless LAN Group" msgstr "無線 LAN グループ" @@ -14274,13 +14910,6 @@ msgstr "無線 LAN グループの追加" msgid "Link Properties" msgstr "リンクプロパティ" -#: netbox/templates/wireless/wirelesslink.html:38 -#: netbox/wireless/forms/bulk_edit.py:129 -#: netbox/wireless/forms/filtersets.py:102 -#: netbox/wireless/forms/model_forms.py:165 -msgid "Distance" -msgstr "距離" - #: netbox/tenancy/filtersets.py:28 msgid "Parent contact group (ID)" msgstr "親連絡先グループ (ID)" @@ -14351,47 +14980,47 @@ msgstr "連絡先グループ" msgid "contact groups" msgstr "連絡先グループ" -#: netbox/tenancy/models/contacts.py:48 +#: netbox/tenancy/models/contacts.py:42 msgid "contact role" msgstr "連絡先のロール" -#: netbox/tenancy/models/contacts.py:49 +#: netbox/tenancy/models/contacts.py:43 msgid "contact roles" msgstr "連絡先のロール" -#: netbox/tenancy/models/contacts.py:68 +#: netbox/tenancy/models/contacts.py:63 msgid "title" msgstr "タイトル" -#: netbox/tenancy/models/contacts.py:73 +#: netbox/tenancy/models/contacts.py:68 msgid "phone" msgstr "電話" -#: netbox/tenancy/models/contacts.py:78 +#: netbox/tenancy/models/contacts.py:73 msgid "email" msgstr "Eメール" -#: netbox/tenancy/models/contacts.py:87 +#: netbox/tenancy/models/contacts.py:82 msgid "link" msgstr "リンク" -#: netbox/tenancy/models/contacts.py:103 +#: netbox/tenancy/models/contacts.py:98 msgid "contact" msgstr "接触" -#: netbox/tenancy/models/contacts.py:104 +#: netbox/tenancy/models/contacts.py:99 msgid "contacts" msgstr "連絡先" -#: netbox/tenancy/models/contacts.py:153 +#: netbox/tenancy/models/contacts.py:146 msgid "contact assignment" msgstr "連絡先割り当て" -#: netbox/tenancy/models/contacts.py:154 +#: netbox/tenancy/models/contacts.py:147 msgid "contact assignments" msgstr "連絡先の割り当て" -#: netbox/tenancy/models/contacts.py:170 +#: netbox/tenancy/models/contacts.py:163 #, python-brace-format msgid "Contacts cannot be assigned to this object type ({type})." msgstr "このオブジェクトタイプには連絡先を割り当てられません ({type})。" @@ -14404,19 +15033,19 @@ msgstr "テナントグループ" msgid "tenant groups" msgstr "テナントグループ" -#: netbox/tenancy/models/tenants.py:70 +#: netbox/tenancy/models/tenants.py:68 msgid "Tenant name must be unique per group." msgstr "テナント名はグループごとに一意である必要があります。" -#: netbox/tenancy/models/tenants.py:80 +#: netbox/tenancy/models/tenants.py:78 msgid "Tenant slug must be unique per group." msgstr "テナントslugはグループごとにユニークでなければなりません。" -#: netbox/tenancy/models/tenants.py:88 +#: netbox/tenancy/models/tenants.py:86 msgid "tenant" msgstr "テナント" -#: netbox/tenancy/models/tenants.py:89 +#: netbox/tenancy/models/tenants.py:87 msgid "tenants" msgstr "テナント" @@ -14636,7 +15265,7 @@ msgstr "トークン" msgid "tokens" msgstr "トークン" -#: netbox/users/models/users.py:57 netbox/vpn/models/crypto.py:42 +#: netbox/users/models/users.py:57 netbox/vpn/models/crypto.py:43 msgid "group" msgstr "グループ" @@ -14679,25 +15308,25 @@ msgstr "指定された数値 ID を使用しても関連オブジェクトが msgid "{name} has a key defined but CHOICES is not a list" msgstr "{name} キーは定義されているが、CHOICES はリストではない" -#: netbox/utilities/conversion.py:19 +#: netbox/utilities/conversion.py:20 msgid "Weight must be a positive number" msgstr "重量は正の数でなければなりません" -#: netbox/utilities/conversion.py:21 +#: netbox/utilities/conversion.py:22 #, python-brace-format msgid "Invalid value '{weight}' for weight (must be a number)" msgstr "値 'が無効です{weight}'は重みを表す (数字でなければならない)" -#: netbox/utilities/conversion.py:32 netbox/utilities/conversion.py:62 +#: netbox/utilities/conversion.py:33 netbox/utilities/conversion.py:63 #, python-brace-format msgid "Unknown unit {unit}. Must be one of the following: {valid_units}" msgstr "不明なユニット {unit}。次のいずれかである必要があります。 {valid_units}" -#: netbox/utilities/conversion.py:45 +#: netbox/utilities/conversion.py:46 msgid "Length must be a positive number" msgstr "長さは正の数でなければなりません" -#: netbox/utilities/conversion.py:47 +#: netbox/utilities/conversion.py:48 #, python-brace-format msgid "Invalid value '{length}' for length (must be a number)" msgstr "値 'が無効です{length}'は長さを表す (数字でなければならない)" @@ -14713,11 +15342,11 @@ msgstr "削除できません {objects}。 {count} 依存オブ msgid "More than 50" msgstr "50 個以上" -#: netbox/utilities/fields.py:30 +#: netbox/utilities/fields.py:29 msgid "RGB color in hexadecimal. Example: " msgstr "16 進 RGB カラー。例: " -#: netbox/utilities/fields.py:159 +#: netbox/utilities/fields.py:158 #, python-format msgid "" "%s(%r) is invalid. to_model parameter to CounterCacheField must be a string " @@ -14726,7 +15355,7 @@ msgstr "" "%s(%r) は無効です。CounterCacheField の to_model パラメータは 'app.model' " "形式の文字列でなければなりません" -#: netbox/utilities/fields.py:169 +#: netbox/utilities/fields.py:168 #, python-format msgid "" "%s(%r) is invalid. to_field parameter to CounterCacheField must be a string " @@ -14933,12 +15562,12 @@ msgstr "列 \"の関連オブジェクト属性が無効です{field}「: {to_fi msgid "Required column header \"{header}\" not found." msgstr "必須の列ヘッダー」{header}「が見つかりません。" -#: netbox/utilities/forms/widgets/apiselect.py:124 +#: netbox/utilities/forms/widgets/apiselect.py:133 #, python-brace-format msgid "Missing required value for dynamic query param: '{dynamic_params}'" msgstr "動的クエリパラメータに必要な値が見つかりません:'{dynamic_params}'" -#: netbox/utilities/forms/widgets/apiselect.py:141 +#: netbox/utilities/forms/widgets/apiselect.py:150 #, python-brace-format msgid "Missing required value for static query param: '{static_params}'" msgstr "静的クエリパラメータに必要な値が見つかりません:'{static_params}'" @@ -15059,10 +15688,14 @@ msgstr "検索..." msgid "Search NetBox" msgstr "NetBoxを検索" -#: netbox/utilities/templates/widgets/apiselect.html:7 +#: netbox/utilities/templates/widgets/apiselect.html:8 msgid "Open selector" msgstr "セレクターを開く" +#: netbox/utilities/templates/widgets/apiselect.html:22 +msgid "Quick add" +msgstr "クイック追加" + #: netbox/utilities/templates/widgets/markdown_input.html:6 msgid "Write" msgstr "書き込み" @@ -15095,189 +15728,201 @@ msgstr "" "{class_name} クエリセットが定義されていません。ObjectPermissionRequiredMixin " "は、基本クエリセットを定義するビューでのみ使用できます。" -#: netbox/virtualization/filtersets.py:79 +#: netbox/virtualization/choices.py:50 +msgid "Paused" +msgstr "一時停止" + +#: netbox/virtualization/filtersets.py:45 msgid "Parent group (ID)" msgstr "親グループ (ID)" -#: netbox/virtualization/filtersets.py:85 +#: netbox/virtualization/filtersets.py:51 msgid "Parent group (slug)" msgstr "親グループ (slug)" -#: netbox/virtualization/filtersets.py:89 -#: netbox/virtualization/filtersets.py:141 +#: netbox/virtualization/filtersets.py:55 +#: netbox/virtualization/filtersets.py:107 msgid "Cluster type (ID)" msgstr "クラスタタイプ (ID)" -#: netbox/virtualization/filtersets.py:151 -#: netbox/virtualization/filtersets.py:271 +#: netbox/virtualization/filtersets.py:117 +#: netbox/virtualization/filtersets.py:237 msgid "Cluster (ID)" msgstr "クラスタ (ID)" -#: netbox/virtualization/forms/bulk_edit.py:166 -#: netbox/virtualization/models/virtualmachines.py:115 +#: netbox/virtualization/forms/bulk_edit.py:148 +#: netbox/virtualization/models/virtualmachines.py:110 msgid "vCPUs" msgstr "vCPU" -#: netbox/virtualization/forms/bulk_edit.py:170 +#: netbox/virtualization/forms/bulk_edit.py:152 msgid "Memory (MB)" msgstr "メモリ (MB)" -#: netbox/virtualization/forms/bulk_edit.py:174 +#: netbox/virtualization/forms/bulk_edit.py:156 msgid "Disk (MB)" msgstr "ディスク (MB)" -#: netbox/virtualization/forms/bulk_edit.py:334 -#: netbox/virtualization/forms/filtersets.py:251 +#: netbox/virtualization/forms/bulk_edit.py:324 +#: netbox/virtualization/forms/filtersets.py:256 msgid "Size (MB)" msgstr "サイズ (MB)" -#: netbox/virtualization/forms/bulk_import.py:44 +#: netbox/virtualization/forms/bulk_import.py:45 msgid "Type of cluster" msgstr "クラスタのタイプ" -#: netbox/virtualization/forms/bulk_import.py:51 +#: netbox/virtualization/forms/bulk_import.py:52 msgid "Assigned cluster group" msgstr "割当クラスタグループ" -#: netbox/virtualization/forms/bulk_import.py:96 +#: netbox/virtualization/forms/bulk_import.py:102 msgid "Assigned cluster" msgstr "割り当て済みクラスタ" -#: netbox/virtualization/forms/bulk_import.py:103 +#: netbox/virtualization/forms/bulk_import.py:109 msgid "Assigned device within cluster" msgstr "クラスタ内の割り当て済みデバイス" -#: netbox/virtualization/forms/filtersets.py:183 +#: netbox/virtualization/forms/filtersets.py:188 msgid "Serial number" msgstr "シリアル番号" -#: netbox/virtualization/forms/model_forms.py:153 +#: netbox/virtualization/forms/model_forms.py:158 #, python-brace-format msgid "" -"{device} belongs to a different site ({device_site}) than the cluster " -"({cluster_site})" +"{device} belongs to a different {scope_field} ({device_scope}) than the " +"cluster ({cluster_scope})" msgstr "" +"{device} 別のものに属する {scope_field} ({device_scope}) よりもクラスタ ({cluster_scope})" -#: netbox/virtualization/forms/model_forms.py:192 +#: netbox/virtualization/forms/model_forms.py:199 msgid "Optionally pin this VM to a specific host device within the cluster" msgstr "オプションで、この VM をクラスタ内の特定のホストデバイスにピン留めできます。" -#: netbox/virtualization/forms/model_forms.py:221 +#: netbox/virtualization/forms/model_forms.py:228 msgid "Site/Cluster" msgstr "サイト/クラスタ" -#: netbox/virtualization/forms/model_forms.py:244 +#: netbox/virtualization/forms/model_forms.py:251 msgid "Disk size is managed via the attachment of virtual disks." msgstr "ディスクサイズは、仮想ディスクのアタッチメントによって管理されます。" -#: netbox/virtualization/forms/model_forms.py:372 -#: netbox/virtualization/tables/virtualmachines.py:111 +#: netbox/virtualization/forms/model_forms.py:405 +#: netbox/virtualization/tables/virtualmachines.py:81 msgid "Disk" msgstr "ディスク" -#: netbox/virtualization/models/clusters.py:25 +#: netbox/virtualization/models/clusters.py:26 msgid "cluster type" msgstr "クラスタタイプ" -#: netbox/virtualization/models/clusters.py:26 +#: netbox/virtualization/models/clusters.py:27 msgid "cluster types" msgstr "クラスタタイプ" -#: netbox/virtualization/models/clusters.py:45 +#: netbox/virtualization/models/clusters.py:43 msgid "cluster group" msgstr "クラスタグループ" -#: netbox/virtualization/models/clusters.py:46 +#: netbox/virtualization/models/clusters.py:44 msgid "cluster groups" msgstr "クラスタグループ" -#: netbox/virtualization/models/clusters.py:121 +#: netbox/virtualization/models/clusters.py:110 msgid "cluster" msgstr "クラスタ" -#: netbox/virtualization/models/clusters.py:122 +#: netbox/virtualization/models/clusters.py:111 msgid "clusters" msgstr "クラスタ" -#: netbox/virtualization/models/clusters.py:141 +#: netbox/virtualization/models/clusters.py:137 #, python-brace-format msgid "" "{count} devices are assigned as hosts for this cluster but are not in site " "{site}" msgstr "{count} デバイスはこのクラスタのホストとして割り当てられているが、サイトにはない {site}" -#: netbox/virtualization/models/virtualmachines.py:123 +#: netbox/virtualization/models/clusters.py:144 +#, python-brace-format +msgid "" +"{count} devices are assigned as hosts for this cluster but are not in " +"location {location}" +msgstr "{count} デバイスはこのクラスタのホストとして割り当てられているが、ロケーションにはない {location}" + +#: netbox/virtualization/models/virtualmachines.py:118 msgid "memory (MB)" msgstr "メモリ (MB)" -#: netbox/virtualization/models/virtualmachines.py:128 +#: netbox/virtualization/models/virtualmachines.py:123 msgid "disk (MB)" msgstr "ディスク (MB)" -#: netbox/virtualization/models/virtualmachines.py:166 +#: netbox/virtualization/models/virtualmachines.py:161 msgid "Virtual machine name must be unique per cluster." msgstr "仮想マシン名はクラスタごとに一意である必要があります。" -#: netbox/virtualization/models/virtualmachines.py:169 +#: netbox/virtualization/models/virtualmachines.py:164 msgid "virtual machine" msgstr "仮想マシン" -#: netbox/virtualization/models/virtualmachines.py:170 +#: netbox/virtualization/models/virtualmachines.py:165 msgid "virtual machines" msgstr "仮想マシン" -#: netbox/virtualization/models/virtualmachines.py:184 +#: netbox/virtualization/models/virtualmachines.py:176 msgid "A virtual machine must be assigned to a site and/or cluster." msgstr "仮想マシンをサイトまたはクラスタに割り当てる必要があります。" -#: netbox/virtualization/models/virtualmachines.py:191 +#: netbox/virtualization/models/virtualmachines.py:183 #, python-brace-format msgid "" "The selected cluster ({cluster}) is not assigned to this site ({site})." msgstr "選択したクラスタ ({cluster}) はこのサイトに割り当てられていません ({site})。" -#: netbox/virtualization/models/virtualmachines.py:198 +#: netbox/virtualization/models/virtualmachines.py:190 msgid "Must specify a cluster when assigning a host device." msgstr "ホストデバイスを割り当てるときは、クラスタを指定する必要があります。" -#: netbox/virtualization/models/virtualmachines.py:203 +#: netbox/virtualization/models/virtualmachines.py:195 #, python-brace-format msgid "" "The selected device ({device}) is not assigned to this cluster ({cluster})." msgstr "選択したデバイス ({device}) はこのクラスタに割り当てられていません ({cluster})。" -#: netbox/virtualization/models/virtualmachines.py:215 +#: netbox/virtualization/models/virtualmachines.py:207 #, python-brace-format msgid "" "The specified disk size ({size}) must match the aggregate size of assigned " "virtual disks ({total_size})." msgstr "指定されたディスクサイズ ({size}) は割当仮想ディスクの合計サイズと一致する必要がある ({total_size})。" -#: netbox/virtualization/models/virtualmachines.py:229 +#: netbox/virtualization/models/virtualmachines.py:221 #, python-brace-format msgid "Must be an IPv{family} address. ({ip} is an IPv{version} address.)" msgstr "IPvである必要があります{family} 住所。({ip} は IPv です{version} 住所。)" -#: netbox/virtualization/models/virtualmachines.py:238 +#: netbox/virtualization/models/virtualmachines.py:230 #, python-brace-format msgid "The specified IP address ({ip}) is not assigned to this VM." msgstr "指定された IP アドレス ({ip}) はこの VM に割り当てられていません。" -#: netbox/virtualization/models/virtualmachines.py:396 +#: netbox/virtualization/models/virtualmachines.py:376 #, python-brace-format msgid "" "The selected parent interface ({parent}) belongs to a different virtual " "machine ({virtual_machine})." msgstr "選択した親インタフェース ({parent}) は別の仮想マシンに属しています ({virtual_machine})。" -#: netbox/virtualization/models/virtualmachines.py:411 +#: netbox/virtualization/models/virtualmachines.py:391 #, python-brace-format msgid "" "The selected bridge interface ({bridge}) belongs to a different virtual " "machine ({virtual_machine})." msgstr "選択したブリッジインタフェース ({bridge}) は別の仮想マシンに属しています ({virtual_machine})。" -#: netbox/virtualization/models/virtualmachines.py:422 +#: netbox/virtualization/models/virtualmachines.py:402 #, python-brace-format msgid "" "The untagged VLAN ({untagged_vlan}) must belong to the same site as the " @@ -15286,24 +15931,24 @@ msgstr "" "タグが付いていない VLAN ({untagged_vlan}) " "はインタフェースの親仮想マシンと同じサイトに属しているか、またはグローバルである必要があります。" -#: netbox/virtualization/models/virtualmachines.py:434 +#: netbox/virtualization/models/virtualmachines.py:414 msgid "size (MB)" msgstr "サイズ (MB)" -#: netbox/virtualization/models/virtualmachines.py:438 +#: netbox/virtualization/models/virtualmachines.py:418 msgid "virtual disk" msgstr "仮想ディスク" -#: netbox/virtualization/models/virtualmachines.py:439 +#: netbox/virtualization/models/virtualmachines.py:419 msgid "virtual disks" msgstr "仮想ディスク" -#: netbox/virtualization/views.py:273 +#: netbox/virtualization/views.py:289 #, python-brace-format msgid "Added {count} devices to cluster {cluster}" msgstr "追加しました {count} デバイスをクラスタに {cluster}" -#: netbox/virtualization/views.py:308 +#: netbox/virtualization/views.py:324 #, python-brace-format msgid "Removed {count} devices from cluster {cluster}" msgstr "削除済み {count} クラスターのデバイス {cluster}" @@ -15340,14 +15985,6 @@ msgstr "L2TP" msgid "PPTP" msgstr "PPTP" -#: netbox/vpn/choices.py:64 -msgid "Hub" -msgstr "ハブ" - -#: netbox/vpn/choices.py:65 -msgid "Spoke" -msgstr "スポーク" - #: netbox/vpn/choices.py:88 msgid "Aggressive" msgstr "アグレッシブ" @@ -15465,26 +16102,26 @@ msgstr "VLAN (名前)" msgid "Tunnel group" msgstr "トンネルグループ" -#: netbox/vpn/forms/bulk_edit.py:117 netbox/vpn/models/crypto.py:47 +#: netbox/vpn/forms/bulk_edit.py:117 netbox/vpn/models/crypto.py:48 msgid "SA lifetime" msgstr "SA ライフタイム" -#: netbox/vpn/forms/bulk_edit.py:151 netbox/wireless/forms/bulk_edit.py:79 -#: netbox/wireless/forms/bulk_edit.py:126 -#: netbox/wireless/forms/filtersets.py:64 -#: netbox/wireless/forms/filtersets.py:98 +#: netbox/vpn/forms/bulk_edit.py:151 netbox/wireless/forms/bulk_edit.py:81 +#: netbox/wireless/forms/bulk_edit.py:129 +#: netbox/wireless/forms/filtersets.py:67 +#: netbox/wireless/forms/filtersets.py:126 msgid "Pre-shared key" msgstr "事前共有キー" #: netbox/vpn/forms/bulk_edit.py:237 netbox/vpn/forms/bulk_import.py:239 -#: netbox/vpn/forms/filtersets.py:199 netbox/vpn/forms/model_forms.py:370 +#: netbox/vpn/forms/filtersets.py:199 netbox/vpn/forms/model_forms.py:373 #: netbox/vpn/models/crypto.py:104 msgid "IKE policy" msgstr "IKE ポリシー" #: netbox/vpn/forms/bulk_edit.py:242 netbox/vpn/forms/bulk_import.py:244 -#: netbox/vpn/forms/filtersets.py:204 netbox/vpn/forms/model_forms.py:374 -#: netbox/vpn/models/crypto.py:209 +#: netbox/vpn/forms/filtersets.py:204 netbox/vpn/forms/model_forms.py:377 +#: netbox/vpn/models/crypto.py:207 msgid "IPSec policy" msgstr "IPsec ポリシー" @@ -15492,10 +16129,6 @@ msgstr "IPsec ポリシー" msgid "Tunnel encapsulation" msgstr "トンネルカプセル化" -#: netbox/vpn/forms/bulk_import.py:83 -msgid "Operational role" -msgstr "運用上のロール" - #: netbox/vpn/forms/bulk_import.py:90 msgid "Parent device of assigned interface" msgstr "割当インタフェースの親デバイス" @@ -15512,7 +16145,7 @@ msgstr "デバイスまたは仮想マシンのインタフェース" msgid "IKE proposal(s)" msgstr "IKE プロポーザル" -#: netbox/vpn/forms/bulk_import.py:215 netbox/vpn/models/crypto.py:197 +#: netbox/vpn/forms/bulk_import.py:215 netbox/vpn/models/crypto.py:195 msgid "Diffie-Hellman group for Perfect Forward Secrecy" msgstr "パーフェクト・フォワード・シークレシのディフィー・ヘルマン・グループ" @@ -15557,7 +16190,7 @@ msgid "IKE version" msgstr "IKE バージョン" #: netbox/vpn/forms/filtersets.py:142 netbox/vpn/forms/filtersets.py:175 -#: netbox/vpn/forms/model_forms.py:298 netbox/vpn/forms/model_forms.py:334 +#: netbox/vpn/forms/model_forms.py:299 netbox/vpn/forms/model_forms.py:336 msgid "Proposal" msgstr "提案" @@ -15565,32 +16198,28 @@ msgstr "提案" msgid "Assigned Object Type" msgstr "割当オブジェクトタイプ" -#: netbox/vpn/forms/model_forms.py:95 netbox/vpn/forms/model_forms.py:130 -#: netbox/vpn/forms/model_forms.py:240 netbox/vpn/tables/tunnels.py:91 +#: netbox/vpn/forms/model_forms.py:96 netbox/vpn/forms/model_forms.py:131 +#: netbox/vpn/forms/model_forms.py:241 netbox/vpn/tables/tunnels.py:91 msgid "Tunnel interface" msgstr "トンネルインターフェイス" -#: netbox/vpn/forms/model_forms.py:150 +#: netbox/vpn/forms/model_forms.py:151 msgid "First Termination" msgstr "1 回目の終端" -#: netbox/vpn/forms/model_forms.py:153 +#: netbox/vpn/forms/model_forms.py:154 msgid "Second Termination" msgstr "2 回目の終端" -#: netbox/vpn/forms/model_forms.py:197 +#: netbox/vpn/forms/model_forms.py:198 msgid "This parameter is required when defining a termination." msgstr "このパラメータは、終端を定義する場合に必要です。" -#: netbox/vpn/forms/model_forms.py:320 netbox/vpn/forms/model_forms.py:356 -msgid "Policy" -msgstr "ポリシー" - -#: netbox/vpn/forms/model_forms.py:487 +#: netbox/vpn/forms/model_forms.py:490 msgid "A termination must specify an interface or VLAN." msgstr "終端にはインタフェースまたは VLAN を指定する必要があります。" -#: netbox/vpn/forms/model_forms.py:489 +#: netbox/vpn/forms/model_forms.py:492 msgid "" "A termination can only have one terminating object (an interface or VLAN)." msgstr "終端には、1 つの終端オブジェクト(インタフェースまたは VLAN)しか設定できません。" @@ -15603,31 +16232,31 @@ msgstr "暗号化アルゴリズム" msgid "authentication algorithm" msgstr "認証アルゴリズム" -#: netbox/vpn/models/crypto.py:44 +#: netbox/vpn/models/crypto.py:45 msgid "Diffie-Hellman group ID" msgstr "Diffie-Hellmanグループ ID" -#: netbox/vpn/models/crypto.py:50 +#: netbox/vpn/models/crypto.py:51 msgid "Security association lifetime (in seconds)" msgstr "セキュリティアソシエーションの有効期間 (秒単位)" -#: netbox/vpn/models/crypto.py:59 +#: netbox/vpn/models/crypto.py:60 msgid "IKE proposal" msgstr "IKEプロポザール" -#: netbox/vpn/models/crypto.py:60 +#: netbox/vpn/models/crypto.py:61 msgid "IKE proposals" msgstr "IKEプロポザール" -#: netbox/vpn/models/crypto.py:76 +#: netbox/vpn/models/crypto.py:75 msgid "version" msgstr "版" -#: netbox/vpn/models/crypto.py:88 netbox/vpn/models/crypto.py:190 +#: netbox/vpn/models/crypto.py:88 netbox/vpn/models/crypto.py:188 msgid "proposals" msgstr "提案" -#: netbox/vpn/models/crypto.py:91 netbox/wireless/models.py:39 +#: netbox/vpn/models/crypto.py:91 netbox/wireless/models.py:41 msgid "pre-shared key" msgstr "事前共有キー" @@ -15635,19 +16264,19 @@ msgstr "事前共有キー" msgid "IKE policies" msgstr "IKE ポリシー" -#: netbox/vpn/models/crypto.py:118 +#: netbox/vpn/models/crypto.py:115 msgid "Mode is required for selected IKE version" msgstr "選択した IKE バージョンにはモードが必要です" -#: netbox/vpn/models/crypto.py:122 +#: netbox/vpn/models/crypto.py:119 msgid "Mode cannot be used for selected IKE version" msgstr "モードは選択された IKE バージョンでは使用できません" -#: netbox/vpn/models/crypto.py:136 +#: netbox/vpn/models/crypto.py:134 msgid "encryption" msgstr "暗号化" -#: netbox/vpn/models/crypto.py:141 +#: netbox/vpn/models/crypto.py:140 msgid "authentication" msgstr "認証" @@ -15667,32 +16296,32 @@ msgstr "IPsec プロポーザル" msgid "IPSec proposals" msgstr "IPsec プロポーザル" -#: netbox/vpn/models/crypto.py:178 +#: netbox/vpn/models/crypto.py:175 msgid "Encryption and/or authentication algorithm must be defined" msgstr "暗号化および/または認証アルゴリズムを定義する必要があります" -#: netbox/vpn/models/crypto.py:210 +#: netbox/vpn/models/crypto.py:208 msgid "IPSec policies" msgstr "IPsec ポリシー" -#: netbox/vpn/models/crypto.py:251 +#: netbox/vpn/models/crypto.py:247 msgid "IPSec profiles" msgstr "IPsec プロファイル" -#: netbox/vpn/models/l2vpn.py:116 +#: netbox/vpn/models/l2vpn.py:113 msgid "L2VPN termination" msgstr "L2 VPN ターミネーション" -#: netbox/vpn/models/l2vpn.py:117 +#: netbox/vpn/models/l2vpn.py:114 msgid "L2VPN terminations" msgstr "L2 VPN ターミネーション" -#: netbox/vpn/models/l2vpn.py:135 +#: netbox/vpn/models/l2vpn.py:129 #, python-brace-format msgid "L2VPN Termination already assigned ({assigned_object})" msgstr "L2VPN ターミネーションはすでに割り当てられています({assigned_object})" -#: netbox/vpn/models/l2vpn.py:147 +#: netbox/vpn/models/l2vpn.py:141 #, python-brace-format msgid "" "{l2vpn_type} L2VPNs cannot have more than two terminations; found " @@ -15708,35 +16337,35 @@ msgstr "トンネルグループ" msgid "tunnel groups" msgstr "トンネルグループ" -#: netbox/vpn/models/tunnels.py:53 +#: netbox/vpn/models/tunnels.py:51 msgid "encapsulation" msgstr "カプセル化" -#: netbox/vpn/models/tunnels.py:72 +#: netbox/vpn/models/tunnels.py:70 msgid "tunnel ID" msgstr "トンネル ID" -#: netbox/vpn/models/tunnels.py:94 +#: netbox/vpn/models/tunnels.py:92 msgid "tunnel" msgstr "トンネル" -#: netbox/vpn/models/tunnels.py:95 +#: netbox/vpn/models/tunnels.py:93 msgid "tunnels" msgstr "トンネル" -#: netbox/vpn/models/tunnels.py:153 +#: netbox/vpn/models/tunnels.py:148 msgid "An object may be terminated to only one tunnel at a time." msgstr "オブジェクトは一度に 1 つのトンネルにしか終端できません。" -#: netbox/vpn/models/tunnels.py:156 +#: netbox/vpn/models/tunnels.py:151 msgid "tunnel termination" msgstr "トンネル終端" -#: netbox/vpn/models/tunnels.py:157 +#: netbox/vpn/models/tunnels.py:152 msgid "tunnel terminations" msgstr "トンネル終端" -#: netbox/vpn/models/tunnels.py:174 +#: netbox/vpn/models/tunnels.py:169 #, python-brace-format msgid "{name} is already attached to a tunnel ({tunnel})." msgstr "{name} すでにトンネルに接続されています ({tunnel})。" @@ -15797,51 +16426,44 @@ msgstr "WPA パーソナル (PSK)" msgid "WPA Enterprise" msgstr "WPA エンタープライズ" -#: netbox/wireless/forms/bulk_edit.py:73 -#: netbox/wireless/forms/bulk_edit.py:120 -#: netbox/wireless/forms/bulk_import.py:68 -#: netbox/wireless/forms/bulk_import.py:71 -#: netbox/wireless/forms/bulk_import.py:110 -#: netbox/wireless/forms/bulk_import.py:113 -#: netbox/wireless/forms/filtersets.py:59 -#: netbox/wireless/forms/filtersets.py:93 +#: netbox/wireless/forms/bulk_edit.py:75 +#: netbox/wireless/forms/bulk_edit.py:123 +#: netbox/wireless/forms/bulk_import.py:70 +#: netbox/wireless/forms/bulk_import.py:73 +#: netbox/wireless/forms/bulk_import.py:115 +#: netbox/wireless/forms/bulk_import.py:118 +#: netbox/wireless/forms/filtersets.py:62 +#: netbox/wireless/forms/filtersets.py:121 msgid "Authentication cipher" msgstr "認証暗号" -#: netbox/wireless/forms/bulk_edit.py:134 -#: netbox/wireless/forms/bulk_import.py:116 -#: netbox/wireless/forms/bulk_import.py:119 -#: netbox/wireless/forms/filtersets.py:106 -msgid "Distance unit" -msgstr "距離単位" - -#: netbox/wireless/forms/bulk_import.py:52 +#: netbox/wireless/forms/bulk_import.py:54 msgid "Bridged VLAN" msgstr "ブリッジド VLAN" -#: netbox/wireless/forms/bulk_import.py:89 -#: netbox/wireless/tables/wirelesslink.py:28 +#: netbox/wireless/forms/bulk_import.py:94 +#: netbox/wireless/tables/wirelesslink.py:27 msgid "Interface A" msgstr "インタフェース A" -#: netbox/wireless/forms/bulk_import.py:93 -#: netbox/wireless/tables/wirelesslink.py:37 +#: netbox/wireless/forms/bulk_import.py:98 +#: netbox/wireless/tables/wirelesslink.py:36 msgid "Interface B" msgstr "インタフェース B" -#: netbox/wireless/forms/model_forms.py:161 +#: netbox/wireless/forms/model_forms.py:164 msgid "Side B" msgstr "サイド B" -#: netbox/wireless/models.py:31 +#: netbox/wireless/models.py:32 msgid "authentication cipher" msgstr "認証暗号" -#: netbox/wireless/models.py:69 +#: netbox/wireless/models.py:72 msgid "wireless LAN group" msgstr "無線 LAN グループ" -#: netbox/wireless/models.py:70 +#: netbox/wireless/models.py:73 msgid "wireless LAN groups" msgstr "無線 LAN グループ" @@ -15849,35 +16471,23 @@ msgstr "無線 LAN グループ" msgid "wireless LAN" msgstr "無線 LAN" -#: netbox/wireless/models.py:144 +#: netbox/wireless/models.py:141 msgid "interface A" msgstr "インタフェース A" -#: netbox/wireless/models.py:151 +#: netbox/wireless/models.py:148 msgid "interface B" msgstr "インタフェース B" -#: netbox/wireless/models.py:165 -msgid "distance" -msgstr "距離" - -#: netbox/wireless/models.py:172 -msgid "distance unit" -msgstr "距離単位" - -#: netbox/wireless/models.py:219 +#: netbox/wireless/models.py:196 msgid "wireless link" msgstr "無線リンク" -#: netbox/wireless/models.py:220 +#: netbox/wireless/models.py:197 msgid "wireless links" msgstr "無線リンク" -#: netbox/wireless/models.py:236 -msgid "Must specify a unit when setting a wireless distance" -msgstr "" - -#: netbox/wireless/models.py:242 netbox/wireless/models.py:248 +#: netbox/wireless/models.py:212 netbox/wireless/models.py:218 #, python-brace-format msgid "{type} is not a wireless interface." msgstr "{type} 無線インタフェースではありません。" diff --git a/netbox/translations/nl/LC_MESSAGES/django.mo b/netbox/translations/nl/LC_MESSAGES/django.mo index 20bb66a541143347b6496f92796a627412114c77..062a191157f5c8916cb29a8c5f7fed50d53f9476 100644 GIT binary patch delta 75100 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 MEqz$+trzzH0E*?{ssI20 diff --git a/netbox/translations/nl/LC_MESSAGES/django.po b/netbox/translations/nl/LC_MESSAGES/django.po index 84052a119..e421051d7 100644 --- a/netbox/translations/nl/LC_MESSAGES/django.po +++ b/netbox/translations/nl/LC_MESSAGES/django.po @@ -8,17 +8,17 @@ # deku_m, 2024 # Peter Mulder , 2024 # Sebastian Berm, 2024 -# Jeremy Stretch, 2025 # Jorg de Jong, 2025 +# Jeremy Stretch, 2025 # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-01-04 05:02+0000\n" +"POT-Creation-Date: 2025-03-06 05:01+0000\n" "PO-Revision-Date: 2023-10-30 17:48+0000\n" -"Last-Translator: Jorg de Jong, 2025\n" +"Last-Translator: Jeremy Stretch, 2025\n" "Language-Team: Dutch (https://app.transifex.com/netbox-community/teams/178115/nl/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -36,7 +36,7 @@ msgstr "Sleutel" msgid "Write Enabled" msgstr "Schrijven ingeschakeld" -#: netbox/account/tables.py:35 netbox/core/choices.py:86 +#: netbox/account/tables.py:35 netbox/core/choices.py:102 #: netbox/core/tables/jobs.py:29 netbox/core/tables/tasks.py:79 #: netbox/extras/tables/tables.py:335 netbox/extras/tables/tables.py:566 #: netbox/templates/account/token.html:43 @@ -48,6 +48,7 @@ msgstr "Schrijven ingeschakeld" #: netbox/templates/extras/htmx/script_result.html:12 #: netbox/templates/extras/journalentry.html:22 #: netbox/templates/generic/object.html:58 +#: netbox/templates/htmx/quick_add_created.html:7 #: netbox/templates/users/token.html:35 msgid "Created" msgstr "Aangemaakt" @@ -93,34 +94,35 @@ msgstr "Je wachtwoord is succesvol gewijzigd." #: netbox/circuits/choices.py:21 netbox/dcim/choices.py:20 #: netbox/dcim/choices.py:102 netbox/dcim/choices.py:185 -#: netbox/dcim/choices.py:237 netbox/dcim/choices.py:1532 -#: netbox/dcim/choices.py:1608 netbox/dcim/choices.py:1658 -#: netbox/virtualization/choices.py:20 netbox/virtualization/choices.py:45 -#: netbox/vpn/choices.py:18 +#: netbox/dcim/choices.py:237 netbox/dcim/choices.py:1534 +#: netbox/dcim/choices.py:1592 netbox/dcim/choices.py:1642 +#: netbox/dcim/choices.py:1664 netbox/virtualization/choices.py:20 +#: netbox/virtualization/choices.py:46 netbox/vpn/choices.py:18 msgid "Planned" msgstr "Gepland" -#: netbox/circuits/choices.py:22 netbox/netbox/navigation/menu.py:305 +#: netbox/circuits/choices.py:22 netbox/netbox/navigation/menu.py:326 msgid "Provisioning" msgstr "Provisioning" #: netbox/circuits/choices.py:23 netbox/core/tables/tasks.py:22 #: netbox/dcim/choices.py:22 netbox/dcim/choices.py:103 #: netbox/dcim/choices.py:184 netbox/dcim/choices.py:236 -#: netbox/dcim/choices.py:1607 netbox/dcim/choices.py:1657 -#: netbox/extras/tables/tables.py:495 netbox/ipam/choices.py:31 -#: netbox/ipam/choices.py:49 netbox/ipam/choices.py:69 -#: netbox/ipam/choices.py:154 netbox/templates/extras/configcontext.html:25 +#: netbox/dcim/choices.py:1591 netbox/dcim/choices.py:1641 +#: netbox/dcim/choices.py:1663 netbox/extras/tables/tables.py:495 +#: netbox/ipam/choices.py:31 netbox/ipam/choices.py:49 +#: netbox/ipam/choices.py:69 netbox/ipam/choices.py:154 +#: netbox/templates/extras/configcontext.html:25 #: netbox/templates/users/user.html:37 netbox/users/forms/bulk_edit.py:38 -#: netbox/virtualization/choices.py:22 netbox/virtualization/choices.py:44 +#: netbox/virtualization/choices.py:22 netbox/virtualization/choices.py:45 #: netbox/vpn/choices.py:19 netbox/wireless/choices.py:25 msgid "Active" msgstr "Actief" #: netbox/circuits/choices.py:24 netbox/dcim/choices.py:183 -#: netbox/dcim/choices.py:235 netbox/dcim/choices.py:1606 -#: netbox/dcim/choices.py:1659 netbox/virtualization/choices.py:24 -#: netbox/virtualization/choices.py:43 +#: netbox/dcim/choices.py:235 netbox/dcim/choices.py:1590 +#: netbox/dcim/choices.py:1643 netbox/dcim/choices.py:1662 +#: netbox/virtualization/choices.py:24 netbox/virtualization/choices.py:44 msgid "Offline" msgstr "Offline" @@ -132,7 +134,9 @@ msgstr "Deprovisioning" msgid "Decommissioned" msgstr "Buiten gebruik" -#: netbox/circuits/choices.py:90 netbox/dcim/choices.py:1619 +#: netbox/circuits/choices.py:90 netbox/dcim/choices.py:1603 +#: netbox/templates/dcim/interface.html:135 +#: netbox/templates/virtualization/vminterface.html:77 #: netbox/tenancy/choices.py:17 msgid "Primary" msgstr "Primair" @@ -150,195 +154,207 @@ msgstr "Tertiair" msgid "Inactive" msgstr "Inactief" -#: netbox/circuits/filtersets.py:31 netbox/circuits/filtersets.py:198 -#: netbox/dcim/filtersets.py:98 netbox/dcim/filtersets.py:152 -#: netbox/dcim/filtersets.py:212 netbox/dcim/filtersets.py:333 -#: netbox/dcim/filtersets.py:464 netbox/dcim/filtersets.py:1021 -#: netbox/dcim/filtersets.py:1368 netbox/dcim/filtersets.py:1903 -#: netbox/dcim/filtersets.py:2146 netbox/dcim/filtersets.py:2204 -#: netbox/ipam/filtersets.py:341 netbox/ipam/filtersets.py:961 -#: netbox/virtualization/filtersets.py:45 -#: netbox/virtualization/filtersets.py:173 netbox/vpn/filtersets.py:358 +#: netbox/circuits/choices.py:107 netbox/templates/dcim/interface.html:275 +#: netbox/vpn/choices.py:63 +msgid "Peer" +msgstr "Peer" + +#: netbox/circuits/choices.py:108 netbox/vpn/choices.py:64 +msgid "Hub" +msgstr "Hub" + +#: netbox/circuits/choices.py:109 netbox/vpn/choices.py:65 +msgid "Spoke" +msgstr "Spoke" + +#: netbox/circuits/filtersets.py:37 netbox/circuits/filtersets.py:204 +#: netbox/circuits/filtersets.py:284 netbox/dcim/base_filtersets.py:22 +#: netbox/dcim/filtersets.py:99 netbox/dcim/filtersets.py:153 +#: netbox/dcim/filtersets.py:213 netbox/dcim/filtersets.py:334 +#: netbox/dcim/filtersets.py:465 netbox/dcim/filtersets.py:1022 +#: netbox/dcim/filtersets.py:1370 netbox/dcim/filtersets.py:2027 +#: netbox/dcim/filtersets.py:2270 netbox/dcim/filtersets.py:2328 +#: netbox/ipam/filtersets.py:928 netbox/virtualization/filtersets.py:139 +#: netbox/vpn/filtersets.py:358 msgid "Region (ID)" msgstr "Regio (ID)" -#: netbox/circuits/filtersets.py:38 netbox/circuits/filtersets.py:205 -#: netbox/dcim/filtersets.py:105 netbox/dcim/filtersets.py:158 -#: netbox/dcim/filtersets.py:219 netbox/dcim/filtersets.py:340 -#: netbox/dcim/filtersets.py:471 netbox/dcim/filtersets.py:1028 -#: netbox/dcim/filtersets.py:1375 netbox/dcim/filtersets.py:1910 -#: netbox/dcim/filtersets.py:2153 netbox/dcim/filtersets.py:2211 -#: netbox/extras/filtersets.py:509 netbox/ipam/filtersets.py:348 -#: netbox/ipam/filtersets.py:968 netbox/virtualization/filtersets.py:52 -#: netbox/virtualization/filtersets.py:180 netbox/vpn/filtersets.py:353 +#: netbox/circuits/filtersets.py:44 netbox/circuits/filtersets.py:211 +#: netbox/circuits/filtersets.py:291 netbox/dcim/base_filtersets.py:29 +#: netbox/dcim/filtersets.py:106 netbox/dcim/filtersets.py:159 +#: netbox/dcim/filtersets.py:220 netbox/dcim/filtersets.py:341 +#: netbox/dcim/filtersets.py:472 netbox/dcim/filtersets.py:1029 +#: netbox/dcim/filtersets.py:1377 netbox/dcim/filtersets.py:2034 +#: netbox/dcim/filtersets.py:2277 netbox/dcim/filtersets.py:2335 +#: netbox/extras/filtersets.py:509 netbox/ipam/filtersets.py:935 +#: netbox/virtualization/filtersets.py:146 netbox/vpn/filtersets.py:353 msgid "Region (slug)" msgstr "Regio (slug)" -#: netbox/circuits/filtersets.py:44 netbox/circuits/filtersets.py:211 -#: netbox/dcim/filtersets.py:128 netbox/dcim/filtersets.py:225 -#: netbox/dcim/filtersets.py:346 netbox/dcim/filtersets.py:477 -#: netbox/dcim/filtersets.py:1034 netbox/dcim/filtersets.py:1381 -#: netbox/dcim/filtersets.py:1916 netbox/dcim/filtersets.py:2159 -#: netbox/dcim/filtersets.py:2217 netbox/ipam/filtersets.py:354 -#: netbox/ipam/filtersets.py:974 netbox/virtualization/filtersets.py:58 -#: netbox/virtualization/filtersets.py:186 +#: netbox/circuits/filtersets.py:50 netbox/circuits/filtersets.py:217 +#: netbox/circuits/filtersets.py:297 netbox/dcim/base_filtersets.py:35 +#: netbox/dcim/filtersets.py:129 netbox/dcim/filtersets.py:226 +#: netbox/dcim/filtersets.py:347 netbox/dcim/filtersets.py:478 +#: netbox/dcim/filtersets.py:1035 netbox/dcim/filtersets.py:1383 +#: netbox/dcim/filtersets.py:2040 netbox/dcim/filtersets.py:2283 +#: netbox/dcim/filtersets.py:2341 netbox/ipam/filtersets.py:941 +#: netbox/virtualization/filtersets.py:152 msgid "Site group (ID)" msgstr "Sitegroep (ID)" -#: netbox/circuits/filtersets.py:51 netbox/circuits/filtersets.py:218 -#: netbox/dcim/filtersets.py:135 netbox/dcim/filtersets.py:232 -#: netbox/dcim/filtersets.py:353 netbox/dcim/filtersets.py:484 -#: netbox/dcim/filtersets.py:1041 netbox/dcim/filtersets.py:1388 -#: netbox/dcim/filtersets.py:1923 netbox/dcim/filtersets.py:2166 -#: netbox/dcim/filtersets.py:2224 netbox/extras/filtersets.py:515 -#: netbox/ipam/filtersets.py:361 netbox/ipam/filtersets.py:981 -#: netbox/virtualization/filtersets.py:65 -#: netbox/virtualization/filtersets.py:193 +#: netbox/circuits/filtersets.py:57 netbox/circuits/filtersets.py:224 +#: netbox/circuits/filtersets.py:304 netbox/dcim/base_filtersets.py:42 +#: netbox/dcim/filtersets.py:136 netbox/dcim/filtersets.py:233 +#: netbox/dcim/filtersets.py:354 netbox/dcim/filtersets.py:485 +#: netbox/dcim/filtersets.py:1042 netbox/dcim/filtersets.py:1390 +#: netbox/dcim/filtersets.py:2047 netbox/dcim/filtersets.py:2290 +#: netbox/dcim/filtersets.py:2348 netbox/extras/filtersets.py:515 +#: netbox/ipam/filtersets.py:948 netbox/virtualization/filtersets.py:159 msgid "Site group (slug)" msgstr "Sitegroep (slug)" -#: netbox/circuits/filtersets.py:56 netbox/circuits/forms/bulk_edit.py:188 -#: netbox/circuits/forms/bulk_edit.py:216 -#: netbox/circuits/forms/bulk_import.py:124 -#: netbox/circuits/forms/filtersets.py:51 -#: netbox/circuits/forms/filtersets.py:171 -#: netbox/circuits/forms/filtersets.py:209 -#: netbox/circuits/forms/model_forms.py:138 -#: netbox/circuits/forms/model_forms.py:154 -#: netbox/circuits/tables/circuits.py:113 netbox/dcim/forms/bulk_edit.py:169 -#: netbox/dcim/forms/bulk_edit.py:330 netbox/dcim/forms/bulk_edit.py:683 -#: netbox/dcim/forms/bulk_edit.py:888 netbox/dcim/forms/bulk_import.py:131 -#: netbox/dcim/forms/bulk_import.py:230 netbox/dcim/forms/bulk_import.py:331 -#: netbox/dcim/forms/bulk_import.py:562 netbox/dcim/forms/bulk_import.py:1333 -#: netbox/dcim/forms/bulk_import.py:1361 netbox/dcim/forms/filtersets.py:87 -#: netbox/dcim/forms/filtersets.py:225 netbox/dcim/forms/filtersets.py:342 -#: netbox/dcim/forms/filtersets.py:439 netbox/dcim/forms/filtersets.py:753 -#: netbox/dcim/forms/filtersets.py:997 netbox/dcim/forms/filtersets.py:1021 -#: netbox/dcim/forms/filtersets.py:1111 netbox/dcim/forms/filtersets.py:1149 -#: netbox/dcim/forms/filtersets.py:1584 netbox/dcim/forms/filtersets.py:1608 -#: netbox/dcim/forms/filtersets.py:1632 netbox/dcim/forms/model_forms.py:137 -#: netbox/dcim/forms/model_forms.py:165 netbox/dcim/forms/model_forms.py:238 -#: netbox/dcim/forms/model_forms.py:463 netbox/dcim/forms/model_forms.py:723 -#: netbox/dcim/forms/object_create.py:383 netbox/dcim/tables/devices.py:153 +#: netbox/circuits/filtersets.py:62 netbox/circuits/forms/filtersets.py:59 +#: netbox/circuits/forms/filtersets.py:182 +#: netbox/circuits/forms/filtersets.py:240 +#: netbox/circuits/tables/circuits.py:129 netbox/dcim/forms/bulk_edit.py:172 +#: netbox/dcim/forms/bulk_edit.py:333 netbox/dcim/forms/bulk_edit.py:686 +#: netbox/dcim/forms/bulk_edit.py:891 netbox/dcim/forms/bulk_import.py:133 +#: netbox/dcim/forms/bulk_import.py:232 netbox/dcim/forms/bulk_import.py:333 +#: netbox/dcim/forms/bulk_import.py:567 netbox/dcim/forms/bulk_import.py:1430 +#: netbox/dcim/forms/bulk_import.py:1458 netbox/dcim/forms/filtersets.py:88 +#: netbox/dcim/forms/filtersets.py:226 netbox/dcim/forms/filtersets.py:343 +#: netbox/dcim/forms/filtersets.py:440 netbox/dcim/forms/filtersets.py:754 +#: netbox/dcim/forms/filtersets.py:998 netbox/dcim/forms/filtersets.py:1022 +#: netbox/dcim/forms/filtersets.py:1112 netbox/dcim/forms/filtersets.py:1150 +#: netbox/dcim/forms/filtersets.py:1622 netbox/dcim/forms/filtersets.py:1646 +#: netbox/dcim/forms/filtersets.py:1670 netbox/dcim/forms/model_forms.py:141 +#: netbox/dcim/forms/model_forms.py:169 netbox/dcim/forms/model_forms.py:243 +#: netbox/dcim/forms/model_forms.py:473 netbox/dcim/forms/model_forms.py:734 +#: netbox/dcim/forms/object_create.py:383 netbox/dcim/tables/devices.py:164 #: netbox/dcim/tables/power.py:26 netbox/dcim/tables/power.py:93 -#: netbox/dcim/tables/racks.py:122 netbox/dcim/tables/racks.py:207 -#: netbox/dcim/tables/sites.py:134 netbox/extras/filtersets.py:525 -#: netbox/ipam/forms/bulk_edit.py:218 netbox/ipam/forms/bulk_edit.py:285 -#: netbox/ipam/forms/bulk_edit.py:484 netbox/ipam/forms/bulk_import.py:171 -#: netbox/ipam/forms/bulk_import.py:453 netbox/ipam/forms/filtersets.py:153 -#: netbox/ipam/forms/filtersets.py:231 netbox/ipam/forms/filtersets.py:432 -#: netbox/ipam/forms/filtersets.py:489 netbox/ipam/forms/model_forms.py:205 -#: netbox/ipam/forms/model_forms.py:669 netbox/ipam/tables/ip.py:245 -#: netbox/ipam/tables/vlans.py:118 netbox/ipam/tables/vlans.py:221 -#: netbox/templates/circuits/inc/circuit_termination_fields.html:6 -#: netbox/templates/dcim/device.html:22 +#: netbox/dcim/tables/racks.py:121 netbox/dcim/tables/racks.py:206 +#: netbox/dcim/tables/sites.py:133 netbox/extras/filtersets.py:525 +#: netbox/ipam/forms/bulk_edit.py:468 netbox/ipam/forms/bulk_import.py:452 +#: netbox/ipam/forms/filtersets.py:155 netbox/ipam/forms/filtersets.py:229 +#: netbox/ipam/forms/filtersets.py:435 netbox/ipam/forms/filtersets.py:530 +#: netbox/ipam/forms/model_forms.py:679 netbox/ipam/tables/vlans.py:87 +#: netbox/ipam/tables/vlans.py:197 netbox/templates/dcim/device.html:22 #: netbox/templates/dcim/inc/cable_termination.html:8 #: netbox/templates/dcim/inc/cable_termination.html:33 #: netbox/templates/dcim/location.html:37 #: netbox/templates/dcim/powerpanel.html:22 netbox/templates/dcim/rack.html:20 #: netbox/templates/dcim/rackreservation.html:28 -#: netbox/templates/dcim/site.html:28 netbox/templates/ipam/prefix.html:56 -#: netbox/templates/ipam/vlan.html:23 netbox/templates/ipam/vlan_edit.html:40 -#: netbox/templates/virtualization/cluster.html:42 +#: netbox/templates/dcim/site.html:28 netbox/templates/ipam/vlan.html:23 +#: netbox/templates/ipam/vlan_edit.html:48 #: netbox/templates/virtualization/virtualmachine.html:95 -#: netbox/virtualization/forms/bulk_edit.py:91 -#: netbox/virtualization/forms/bulk_edit.py:109 -#: netbox/virtualization/forms/bulk_edit.py:124 -#: netbox/virtualization/forms/bulk_import.py:59 -#: netbox/virtualization/forms/bulk_import.py:85 -#: netbox/virtualization/forms/filtersets.py:79 -#: netbox/virtualization/forms/filtersets.py:148 -#: netbox/virtualization/forms/model_forms.py:71 +#: netbox/virtualization/forms/bulk_edit.py:106 +#: netbox/virtualization/forms/bulk_import.py:60 +#: netbox/virtualization/forms/bulk_import.py:91 +#: netbox/virtualization/forms/filtersets.py:74 +#: netbox/virtualization/forms/filtersets.py:153 #: netbox/virtualization/forms/model_forms.py:104 -#: netbox/virtualization/forms/model_forms.py:171 -#: netbox/virtualization/tables/clusters.py:77 -#: netbox/virtualization/tables/virtualmachines.py:63 -#: netbox/vpn/forms/filtersets.py:266 netbox/wireless/forms/model_forms.py:76 -#: netbox/wireless/forms/model_forms.py:118 +#: netbox/virtualization/forms/model_forms.py:178 +#: netbox/virtualization/tables/virtualmachines.py:33 +#: netbox/vpn/forms/filtersets.py:266 netbox/wireless/forms/filtersets.py:88 +#: netbox/wireless/forms/model_forms.py:79 +#: netbox/wireless/forms/model_forms.py:121 msgid "Site" msgstr "Site" -#: netbox/circuits/filtersets.py:62 netbox/circuits/filtersets.py:229 -#: netbox/circuits/filtersets.py:274 netbox/dcim/filtersets.py:242 -#: netbox/dcim/filtersets.py:363 netbox/dcim/filtersets.py:458 -#: netbox/extras/filtersets.py:531 netbox/ipam/filtersets.py:240 -#: netbox/ipam/filtersets.py:371 netbox/ipam/filtersets.py:991 -#: netbox/virtualization/filtersets.py:75 -#: netbox/virtualization/filtersets.py:203 netbox/vpn/filtersets.py:363 +#: netbox/circuits/filtersets.py:68 netbox/circuits/filtersets.py:235 +#: netbox/circuits/filtersets.py:315 netbox/dcim/base_filtersets.py:53 +#: netbox/dcim/filtersets.py:243 netbox/dcim/filtersets.py:364 +#: netbox/dcim/filtersets.py:459 netbox/extras/filtersets.py:531 +#: netbox/ipam/filtersets.py:243 netbox/ipam/filtersets.py:958 +#: netbox/virtualization/filtersets.py:169 netbox/vpn/filtersets.py:363 msgid "Site (slug)" msgstr "Site (slug)" -#: netbox/circuits/filtersets.py:67 +#: netbox/circuits/filtersets.py:73 msgid "ASN (ID)" msgstr "ASN (ID)" -#: netbox/circuits/filtersets.py:73 netbox/circuits/forms/filtersets.py:31 -#: netbox/ipam/forms/model_forms.py:159 netbox/ipam/models/asns.py:108 -#: netbox/ipam/models/asns.py:125 netbox/ipam/tables/asn.py:41 +#: netbox/circuits/filtersets.py:79 netbox/circuits/forms/filtersets.py:39 +#: netbox/ipam/forms/model_forms.py:165 netbox/ipam/models/asns.py:105 +#: netbox/ipam/models/asns.py:122 netbox/ipam/tables/asn.py:41 #: netbox/templates/ipam/asn.html:20 msgid "ASN" msgstr "ASN" -#: netbox/circuits/filtersets.py:95 netbox/circuits/filtersets.py:122 -#: netbox/circuits/filtersets.py:156 netbox/circuits/filtersets.py:283 -#: netbox/circuits/filtersets.py:325 netbox/ipam/filtersets.py:245 +#: netbox/circuits/filtersets.py:101 netbox/circuits/filtersets.py:128 +#: netbox/circuits/filtersets.py:162 netbox/circuits/filtersets.py:338 +#: netbox/circuits/filtersets.py:406 netbox/circuits/filtersets.py:482 +#: netbox/circuits/filtersets.py:550 netbox/ipam/filtersets.py:248 msgid "Provider (ID)" msgstr "Provider (ID)" -#: netbox/circuits/filtersets.py:101 netbox/circuits/filtersets.py:128 -#: netbox/circuits/filtersets.py:162 netbox/circuits/filtersets.py:289 -#: netbox/circuits/filtersets.py:331 netbox/ipam/filtersets.py:251 +#: netbox/circuits/filtersets.py:107 netbox/circuits/filtersets.py:134 +#: netbox/circuits/filtersets.py:168 netbox/circuits/filtersets.py:344 +#: netbox/circuits/filtersets.py:488 netbox/circuits/filtersets.py:556 +#: netbox/ipam/filtersets.py:254 msgid "Provider (slug)" msgstr "Provider (slug)" -#: netbox/circuits/filtersets.py:167 +#: netbox/circuits/filtersets.py:173 netbox/circuits/filtersets.py:493 +#: netbox/circuits/filtersets.py:561 msgid "Provider account (ID)" msgstr "Provideraccount (ID)" -#: netbox/circuits/filtersets.py:173 +#: netbox/circuits/filtersets.py:179 netbox/circuits/filtersets.py:499 +#: netbox/circuits/filtersets.py:567 msgid "Provider account (account)" msgstr "Provideraccount (account)" -#: netbox/circuits/filtersets.py:178 +#: netbox/circuits/filtersets.py:184 netbox/circuits/filtersets.py:503 +#: netbox/circuits/filtersets.py:572 msgid "Provider network (ID)" msgstr "Providernetwerk (ID)" -#: netbox/circuits/filtersets.py:182 +#: netbox/circuits/filtersets.py:188 msgid "Circuit type (ID)" msgstr "Circuittype (ID)" -#: netbox/circuits/filtersets.py:188 +#: netbox/circuits/filtersets.py:194 msgid "Circuit type (slug)" msgstr "Circuittype (slug)" -#: netbox/circuits/filtersets.py:223 netbox/circuits/filtersets.py:268 -#: netbox/dcim/filtersets.py:236 netbox/dcim/filtersets.py:357 -#: netbox/dcim/filtersets.py:452 netbox/dcim/filtersets.py:1045 -#: netbox/dcim/filtersets.py:1393 netbox/dcim/filtersets.py:1928 -#: netbox/dcim/filtersets.py:2170 netbox/dcim/filtersets.py:2229 -#: netbox/ipam/filtersets.py:234 netbox/ipam/filtersets.py:365 -#: netbox/ipam/filtersets.py:985 netbox/virtualization/filtersets.py:69 -#: netbox/virtualization/filtersets.py:197 netbox/vpn/filtersets.py:368 +#: netbox/circuits/filtersets.py:229 netbox/circuits/filtersets.py:309 +#: netbox/dcim/base_filtersets.py:47 netbox/dcim/filtersets.py:237 +#: netbox/dcim/filtersets.py:358 netbox/dcim/filtersets.py:453 +#: netbox/dcim/filtersets.py:1046 netbox/dcim/filtersets.py:1395 +#: netbox/dcim/filtersets.py:2052 netbox/dcim/filtersets.py:2294 +#: netbox/dcim/filtersets.py:2353 netbox/ipam/filtersets.py:237 +#: netbox/ipam/filtersets.py:952 netbox/virtualization/filtersets.py:163 +#: netbox/vpn/filtersets.py:368 msgid "Site (ID)" msgstr "Locatie (ID)" -#: netbox/circuits/filtersets.py:233 netbox/circuits/filtersets.py:237 +#: netbox/circuits/filtersets.py:239 netbox/circuits/filtersets.py:321 +#: netbox/dcim/base_filtersets.py:59 netbox/dcim/filtersets.py:259 +#: netbox/dcim/filtersets.py:370 netbox/dcim/filtersets.py:491 +#: netbox/dcim/filtersets.py:1058 netbox/dcim/filtersets.py:1406 +#: netbox/dcim/filtersets.py:2306 +msgid "Location (ID)" +msgstr "Locatie (ID)" + +#: netbox/circuits/filtersets.py:244 netbox/circuits/filtersets.py:248 msgid "Termination A (ID)" msgstr "Eindpunt A (ID)" -#: netbox/circuits/filtersets.py:260 netbox/circuits/filtersets.py:320 -#: netbox/core/filtersets.py:77 netbox/core/filtersets.py:136 -#: netbox/core/filtersets.py:173 netbox/dcim/filtersets.py:751 -#: netbox/dcim/filtersets.py:1362 netbox/dcim/filtersets.py:2277 -#: netbox/extras/filtersets.py:41 netbox/extras/filtersets.py:63 -#: netbox/extras/filtersets.py:92 netbox/extras/filtersets.py:132 -#: netbox/extras/filtersets.py:181 netbox/extras/filtersets.py:209 -#: netbox/extras/filtersets.py:239 netbox/extras/filtersets.py:276 -#: netbox/extras/filtersets.py:348 netbox/extras/filtersets.py:391 -#: netbox/extras/filtersets.py:438 netbox/extras/filtersets.py:498 -#: netbox/extras/filtersets.py:657 netbox/extras/filtersets.py:703 -#: netbox/ipam/forms/model_forms.py:482 netbox/netbox/filtersets.py:282 -#: netbox/netbox/forms/__init__.py:22 netbox/netbox/forms/base.py:167 +#: netbox/circuits/filtersets.py:273 netbox/circuits/filtersets.py:375 +#: netbox/circuits/filtersets.py:537 netbox/core/filtersets.py:77 +#: netbox/core/filtersets.py:136 netbox/core/filtersets.py:173 +#: netbox/dcim/filtersets.py:752 netbox/dcim/filtersets.py:1364 +#: netbox/dcim/filtersets.py:2401 netbox/extras/filtersets.py:41 +#: netbox/extras/filtersets.py:63 netbox/extras/filtersets.py:92 +#: netbox/extras/filtersets.py:132 netbox/extras/filtersets.py:181 +#: netbox/extras/filtersets.py:209 netbox/extras/filtersets.py:239 +#: netbox/extras/filtersets.py:276 netbox/extras/filtersets.py:348 +#: netbox/extras/filtersets.py:391 netbox/extras/filtersets.py:438 +#: netbox/extras/filtersets.py:498 netbox/extras/filtersets.py:657 +#: netbox/extras/filtersets.py:703 netbox/ipam/forms/model_forms.py:492 +#: netbox/netbox/filtersets.py:286 netbox/netbox/forms/__init__.py:22 +#: netbox/netbox/forms/base.py:167 #: netbox/templates/htmx/object_selector.html:28 #: netbox/templates/inc/filter_list.html:46 #: netbox/templates/ipam/ipaddress_assign.html:29 @@ -350,97 +366,150 @@ msgstr "Eindpunt A (ID)" msgid "Search" msgstr "Zoeken" -#: netbox/circuits/filtersets.py:264 netbox/circuits/forms/bulk_edit.py:172 -#: netbox/circuits/forms/bulk_edit.py:246 -#: netbox/circuits/forms/bulk_import.py:115 -#: netbox/circuits/forms/filtersets.py:198 -#: netbox/circuits/forms/filtersets.py:214 -#: netbox/circuits/forms/filtersets.py:260 -#: netbox/circuits/forms/model_forms.py:111 -#: netbox/circuits/forms/model_forms.py:133 -#: netbox/circuits/forms/model_forms.py:199 -#: netbox/circuits/tables/circuits.py:104 -#: netbox/circuits/tables/circuits.py:164 netbox/dcim/forms/connections.py:73 +#: netbox/circuits/filtersets.py:277 netbox/circuits/forms/bulk_edit.py:195 +#: netbox/circuits/forms/bulk_edit.py:284 +#: netbox/circuits/forms/bulk_import.py:128 +#: netbox/circuits/forms/filtersets.py:223 +#: netbox/circuits/forms/filtersets.py:250 +#: netbox/circuits/forms/filtersets.py:296 +#: netbox/circuits/forms/model_forms.py:139 +#: netbox/circuits/forms/model_forms.py:162 +#: netbox/circuits/forms/model_forms.py:262 +#: netbox/circuits/tables/circuits.py:108 +#: netbox/circuits/tables/circuits.py:203 netbox/dcim/forms/connections.py:73 #: netbox/templates/circuits/circuit.html:15 -#: netbox/templates/circuits/circuitgroupassignment.html:26 +#: netbox/templates/circuits/circuitgroupassignment.html:30 #: netbox/templates/circuits/circuittermination.html:19 #: netbox/templates/dcim/inc/cable_termination.html:55 #: netbox/templates/dcim/trace/circuit.html:4 msgid "Circuit" msgstr "Circuit" -#: netbox/circuits/filtersets.py:278 +#: netbox/circuits/filtersets.py:328 netbox/dcim/base_filtersets.py:66 +#: netbox/dcim/filtersets.py:266 netbox/dcim/filtersets.py:377 +#: netbox/dcim/filtersets.py:498 netbox/dcim/filtersets.py:1412 +#: netbox/extras/filtersets.py:542 +msgid "Location (slug)" +msgstr "Locatie (slug)" + +#: netbox/circuits/filtersets.py:333 msgid "ProviderNetwork (ID)" msgstr "Providernetwerk (ID)" -#: netbox/circuits/filtersets.py:335 -msgid "Circuit (ID)" -msgstr "Circuit (ID)" - -#: netbox/circuits/filtersets.py:341 +#: netbox/circuits/filtersets.py:381 msgid "Circuit (CID)" msgstr "Circuit (CID)" -#: netbox/circuits/filtersets.py:345 +#: netbox/circuits/filtersets.py:386 +msgid "Circuit (ID)" +msgstr "Circuit (ID)" + +#: netbox/circuits/filtersets.py:391 +msgid "Virtual circuit (CID)" +msgstr "Virtueel circuit (CID)" + +#: netbox/circuits/filtersets.py:396 netbox/dcim/filtersets.py:1849 +msgid "Virtual circuit (ID)" +msgstr "Virtueel circuit (ID)" + +#: netbox/circuits/filtersets.py:401 +msgid "Provider (name)" +msgstr "Provider (naam)" + +#: netbox/circuits/filtersets.py:410 msgid "Circuit group (ID)" msgstr "Circuitgroep (ID)" -#: netbox/circuits/filtersets.py:351 +#: netbox/circuits/filtersets.py:416 msgid "Circuit group (slug)" msgstr "Circuitgroep (slug)" -#: netbox/circuits/forms/bulk_edit.py:30 -#: netbox/circuits/forms/filtersets.py:56 -#: netbox/circuits/forms/model_forms.py:29 -#: netbox/circuits/tables/providers.py:33 netbox/dcim/forms/bulk_edit.py:129 -#: netbox/dcim/forms/filtersets.py:195 netbox/dcim/forms/model_forms.py:123 -#: netbox/dcim/tables/sites.py:94 netbox/ipam/models/asns.py:126 -#: netbox/ipam/tables/asn.py:27 netbox/ipam/views.py:213 -#: netbox/netbox/navigation/menu.py:172 netbox/netbox/navigation/menu.py:175 +#: netbox/circuits/filtersets.py:507 +msgid "Virtual circuit type (ID)" +msgstr "Type virtueel circuit (ID)" + +#: netbox/circuits/filtersets.py:513 +msgid "Virtual circuit type (slug)" +msgstr "Type virtueel circuit (slug)" + +#: netbox/circuits/filtersets.py:541 netbox/circuits/forms/bulk_edit.py:355 +#: netbox/circuits/forms/bulk_import.py:249 +#: netbox/circuits/forms/filtersets.py:372 +#: netbox/circuits/forms/filtersets.py:378 +#: netbox/circuits/forms/model_forms.py:343 +#: netbox/circuits/forms/model_forms.py:358 +#: netbox/circuits/tables/virtual_circuits.py:88 +#: netbox/templates/circuits/virtualcircuit.html:20 +#: netbox/templates/circuits/virtualcircuittermination.html:38 +msgid "Virtual circuit" +msgstr "Virtueel circuit" + +#: netbox/circuits/filtersets.py:577 netbox/dcim/filtersets.py:1269 +#: netbox/dcim/filtersets.py:1634 netbox/ipam/filtersets.py:601 +#: netbox/vpn/filtersets.py:102 netbox/vpn/filtersets.py:401 +msgid "Interface (ID)" +msgstr "Interface (ID)" + +#: netbox/circuits/forms/bulk_edit.py:42 +#: netbox/circuits/forms/filtersets.py:64 +#: netbox/circuits/forms/model_forms.py:42 +#: netbox/circuits/tables/providers.py:32 netbox/dcim/forms/bulk_edit.py:132 +#: netbox/dcim/forms/filtersets.py:196 netbox/dcim/forms/model_forms.py:127 +#: netbox/dcim/tables/sites.py:94 netbox/ipam/models/asns.py:123 +#: netbox/ipam/tables/asn.py:27 netbox/ipam/views.py:230 +#: netbox/netbox/navigation/menu.py:178 netbox/netbox/navigation/menu.py:181 #: netbox/templates/circuits/provider.html:23 msgid "ASNs" msgstr "ASN's" -#: netbox/circuits/forms/bulk_edit.py:34 netbox/circuits/forms/bulk_edit.py:56 -#: netbox/circuits/forms/bulk_edit.py:83 -#: netbox/circuits/forms/bulk_edit.py:104 -#: netbox/circuits/forms/bulk_edit.py:164 -#: netbox/circuits/forms/bulk_edit.py:183 -#: netbox/circuits/forms/bulk_edit.py:228 netbox/core/forms/bulk_edit.py:28 -#: netbox/dcim/forms/bulk_create.py:35 netbox/dcim/forms/bulk_edit.py:74 -#: netbox/dcim/forms/bulk_edit.py:93 netbox/dcim/forms/bulk_edit.py:152 -#: netbox/dcim/forms/bulk_edit.py:193 netbox/dcim/forms/bulk_edit.py:211 -#: netbox/dcim/forms/bulk_edit.py:289 netbox/dcim/forms/bulk_edit.py:438 -#: netbox/dcim/forms/bulk_edit.py:472 netbox/dcim/forms/bulk_edit.py:487 -#: netbox/dcim/forms/bulk_edit.py:546 netbox/dcim/forms/bulk_edit.py:590 -#: netbox/dcim/forms/bulk_edit.py:624 netbox/dcim/forms/bulk_edit.py:648 -#: netbox/dcim/forms/bulk_edit.py:721 netbox/dcim/forms/bulk_edit.py:782 -#: netbox/dcim/forms/bulk_edit.py:834 netbox/dcim/forms/bulk_edit.py:857 -#: netbox/dcim/forms/bulk_edit.py:905 netbox/dcim/forms/bulk_edit.py:975 -#: netbox/dcim/forms/bulk_edit.py:1028 netbox/dcim/forms/bulk_edit.py:1063 -#: netbox/dcim/forms/bulk_edit.py:1103 netbox/dcim/forms/bulk_edit.py:1147 -#: netbox/dcim/forms/bulk_edit.py:1192 netbox/dcim/forms/bulk_edit.py:1219 -#: netbox/dcim/forms/bulk_edit.py:1237 netbox/dcim/forms/bulk_edit.py:1255 -#: netbox/dcim/forms/bulk_edit.py:1273 netbox/dcim/forms/bulk_edit.py:1725 -#: netbox/extras/forms/bulk_edit.py:39 netbox/extras/forms/bulk_edit.py:149 -#: netbox/extras/forms/bulk_edit.py:178 netbox/extras/forms/bulk_edit.py:208 -#: netbox/extras/forms/bulk_edit.py:256 netbox/extras/forms/bulk_edit.py:274 -#: netbox/extras/forms/bulk_edit.py:298 netbox/extras/forms/bulk_edit.py:312 -#: netbox/extras/forms/bulk_edit.py:339 netbox/extras/tables/tables.py:79 -#: netbox/ipam/forms/bulk_edit.py:53 netbox/ipam/forms/bulk_edit.py:73 -#: netbox/ipam/forms/bulk_edit.py:93 netbox/ipam/forms/bulk_edit.py:117 -#: netbox/ipam/forms/bulk_edit.py:146 netbox/ipam/forms/bulk_edit.py:175 -#: netbox/ipam/forms/bulk_edit.py:194 netbox/ipam/forms/bulk_edit.py:276 -#: netbox/ipam/forms/bulk_edit.py:321 netbox/ipam/forms/bulk_edit.py:369 -#: netbox/ipam/forms/bulk_edit.py:412 netbox/ipam/forms/bulk_edit.py:428 -#: netbox/ipam/forms/bulk_edit.py:516 netbox/ipam/forms/bulk_edit.py:547 +#: netbox/circuits/forms/bulk_edit.py:46 netbox/circuits/forms/bulk_edit.py:68 +#: netbox/circuits/forms/bulk_edit.py:95 +#: netbox/circuits/forms/bulk_edit.py:116 +#: netbox/circuits/forms/bulk_edit.py:187 +#: netbox/circuits/forms/bulk_edit.py:207 +#: netbox/circuits/forms/bulk_edit.py:266 +#: netbox/circuits/forms/bulk_edit.py:307 +#: netbox/circuits/forms/bulk_edit.py:347 +#: netbox/circuits/forms/bulk_edit.py:371 netbox/core/forms/bulk_edit.py:28 +#: netbox/dcim/forms/bulk_create.py:35 netbox/dcim/forms/bulk_edit.py:77 +#: netbox/dcim/forms/bulk_edit.py:96 netbox/dcim/forms/bulk_edit.py:155 +#: netbox/dcim/forms/bulk_edit.py:196 netbox/dcim/forms/bulk_edit.py:214 +#: netbox/dcim/forms/bulk_edit.py:292 netbox/dcim/forms/bulk_edit.py:441 +#: netbox/dcim/forms/bulk_edit.py:475 netbox/dcim/forms/bulk_edit.py:490 +#: netbox/dcim/forms/bulk_edit.py:549 netbox/dcim/forms/bulk_edit.py:593 +#: netbox/dcim/forms/bulk_edit.py:627 netbox/dcim/forms/bulk_edit.py:651 +#: netbox/dcim/forms/bulk_edit.py:724 netbox/dcim/forms/bulk_edit.py:785 +#: netbox/dcim/forms/bulk_edit.py:837 netbox/dcim/forms/bulk_edit.py:860 +#: netbox/dcim/forms/bulk_edit.py:908 netbox/dcim/forms/bulk_edit.py:978 +#: netbox/dcim/forms/bulk_edit.py:1031 netbox/dcim/forms/bulk_edit.py:1066 +#: netbox/dcim/forms/bulk_edit.py:1106 netbox/dcim/forms/bulk_edit.py:1150 +#: netbox/dcim/forms/bulk_edit.py:1195 netbox/dcim/forms/bulk_edit.py:1222 +#: netbox/dcim/forms/bulk_edit.py:1240 netbox/dcim/forms/bulk_edit.py:1258 +#: netbox/dcim/forms/bulk_edit.py:1276 netbox/dcim/forms/bulk_edit.py:1746 +#: netbox/dcim/forms/bulk_edit.py:1787 netbox/extras/forms/bulk_edit.py:39 +#: netbox/extras/forms/bulk_edit.py:149 netbox/extras/forms/bulk_edit.py:178 +#: netbox/extras/forms/bulk_edit.py:208 netbox/extras/forms/bulk_edit.py:256 +#: netbox/extras/forms/bulk_edit.py:274 netbox/extras/forms/bulk_edit.py:298 +#: netbox/extras/forms/bulk_edit.py:312 netbox/extras/forms/bulk_edit.py:339 +#: netbox/extras/tables/tables.py:79 netbox/ipam/forms/bulk_edit.py:56 +#: netbox/ipam/forms/bulk_edit.py:76 netbox/ipam/forms/bulk_edit.py:96 +#: netbox/ipam/forms/bulk_edit.py:120 netbox/ipam/forms/bulk_edit.py:149 +#: netbox/ipam/forms/bulk_edit.py:178 netbox/ipam/forms/bulk_edit.py:197 +#: netbox/ipam/forms/bulk_edit.py:260 netbox/ipam/forms/bulk_edit.py:305 +#: netbox/ipam/forms/bulk_edit.py:353 netbox/ipam/forms/bulk_edit.py:396 +#: netbox/ipam/forms/bulk_edit.py:412 netbox/ipam/forms/bulk_edit.py:500 +#: netbox/ipam/forms/bulk_edit.py:532 netbox/ipam/forms/bulk_edit.py:575 +#: netbox/ipam/tables/vlans.py:240 netbox/ipam/tables/vlans.py:267 #: netbox/templates/account/token.html:35 -#: netbox/templates/circuits/circuit.html:59 +#: netbox/templates/circuits/circuit.html:69 #: netbox/templates/circuits/circuitgroup.html:32 #: netbox/templates/circuits/circuittype.html:26 -#: netbox/templates/circuits/inc/circuit_termination_fields.html:88 +#: netbox/templates/circuits/inc/circuit_termination_fields.html:83 #: netbox/templates/circuits/provider.html:33 #: netbox/templates/circuits/providernetwork.html:32 +#: netbox/templates/circuits/virtualcircuit.html:56 +#: netbox/templates/circuits/virtualcircuittermination.html:68 +#: netbox/templates/circuits/virtualcircuittype.html:26 #: netbox/templates/core/datasource.html:54 #: netbox/templates/core/plugin.html:80 netbox/templates/dcim/cable.html:36 #: netbox/templates/dcim/consoleport.html:44 @@ -451,13 +520,14 @@ msgstr "ASN's" #: netbox/templates/dcim/devicetype.html:33 #: netbox/templates/dcim/frontport.html:58 #: netbox/templates/dcim/interface.html:69 -#: netbox/templates/dcim/inventoryitem.html:60 +#: netbox/templates/dcim/inventoryitem.html:64 #: netbox/templates/dcim/inventoryitemrole.html:22 #: netbox/templates/dcim/location.html:33 +#: netbox/templates/dcim/macaddress.html:21 #: netbox/templates/dcim/manufacturer.html:40 #: netbox/templates/dcim/module.html:73 #: netbox/templates/dcim/modulebay.html:42 -#: netbox/templates/dcim/moduletype.html:37 +#: netbox/templates/dcim/moduletype.html:39 #: netbox/templates/dcim/platform.html:33 #: netbox/templates/dcim/powerfeed.html:40 #: netbox/templates/dcim/poweroutlet.html:40 @@ -484,12 +554,14 @@ msgstr "ASN's" #: netbox/templates/ipam/asnrange.html:38 #: netbox/templates/ipam/fhrpgroup.html:34 #: netbox/templates/ipam/ipaddress.html:55 -#: netbox/templates/ipam/iprange.html:67 netbox/templates/ipam/prefix.html:81 +#: netbox/templates/ipam/iprange.html:67 netbox/templates/ipam/prefix.html:77 #: netbox/templates/ipam/rir.html:26 netbox/templates/ipam/role.html:26 #: netbox/templates/ipam/routetarget.html:21 #: netbox/templates/ipam/service.html:50 #: netbox/templates/ipam/servicetemplate.html:27 #: netbox/templates/ipam/vlan.html:62 netbox/templates/ipam/vlangroup.html:34 +#: netbox/templates/ipam/vlantranslationpolicy.html:18 +#: netbox/templates/ipam/vlantranslationrule.html:26 #: netbox/templates/ipam/vrf.html:33 netbox/templates/tenancy/contact.html:67 #: netbox/templates/tenancy/contactgroup.html:25 #: netbox/templates/tenancy/contactrole.html:22 @@ -503,7 +575,7 @@ msgstr "ASN's" #: netbox/templates/virtualization/clustertype.html:26 #: netbox/templates/virtualization/virtualdisk.html:39 #: netbox/templates/virtualization/virtualmachine.html:31 -#: netbox/templates/virtualization/vminterface.html:51 +#: netbox/templates/virtualization/vminterface.html:47 #: netbox/templates/vpn/ikepolicy.html:17 #: netbox/templates/vpn/ikeproposal.html:17 #: netbox/templates/vpn/ipsecpolicy.html:17 @@ -513,119 +585,142 @@ msgstr "ASN's" #: netbox/templates/vpn/ipsecproposal.html:17 #: netbox/templates/vpn/l2vpn.html:26 netbox/templates/vpn/tunnel.html:33 #: netbox/templates/vpn/tunnelgroup.html:30 -#: netbox/templates/wireless/wirelesslan.html:26 +#: netbox/templates/wireless/wirelesslan.html:34 #: netbox/templates/wireless/wirelesslangroup.html:33 #: netbox/templates/wireless/wirelesslink.html:34 #: netbox/tenancy/forms/bulk_edit.py:32 netbox/tenancy/forms/bulk_edit.py:80 #: netbox/tenancy/forms/bulk_edit.py:122 netbox/users/forms/bulk_edit.py:64 #: netbox/users/forms/bulk_edit.py:82 netbox/users/forms/bulk_edit.py:112 -#: netbox/virtualization/forms/bulk_edit.py:32 -#: netbox/virtualization/forms/bulk_edit.py:46 -#: netbox/virtualization/forms/bulk_edit.py:100 -#: netbox/virtualization/forms/bulk_edit.py:177 -#: netbox/virtualization/forms/bulk_edit.py:228 -#: netbox/virtualization/forms/bulk_edit.py:337 +#: netbox/virtualization/forms/bulk_edit.py:33 +#: netbox/virtualization/forms/bulk_edit.py:47 +#: netbox/virtualization/forms/bulk_edit.py:82 +#: netbox/virtualization/forms/bulk_edit.py:159 +#: netbox/virtualization/forms/bulk_edit.py:210 +#: netbox/virtualization/forms/bulk_edit.py:327 #: netbox/vpn/forms/bulk_edit.py:28 netbox/vpn/forms/bulk_edit.py:64 #: netbox/vpn/forms/bulk_edit.py:121 netbox/vpn/forms/bulk_edit.py:155 #: netbox/vpn/forms/bulk_edit.py:190 netbox/vpn/forms/bulk_edit.py:215 #: netbox/vpn/forms/bulk_edit.py:247 netbox/vpn/forms/bulk_edit.py:274 -#: netbox/wireless/forms/bulk_edit.py:29 netbox/wireless/forms/bulk_edit.py:82 -#: netbox/wireless/forms/bulk_edit.py:140 +#: netbox/wireless/forms/bulk_edit.py:31 netbox/wireless/forms/bulk_edit.py:84 +#: netbox/wireless/forms/bulk_edit.py:143 msgid "Description" msgstr "Omschrijving" -#: netbox/circuits/forms/bulk_edit.py:51 netbox/circuits/forms/bulk_edit.py:73 -#: netbox/circuits/forms/bulk_edit.py:123 -#: netbox/circuits/forms/bulk_import.py:36 -#: netbox/circuits/forms/bulk_import.py:51 -#: netbox/circuits/forms/bulk_import.py:74 -#: netbox/circuits/forms/filtersets.py:70 -#: netbox/circuits/forms/filtersets.py:88 -#: netbox/circuits/forms/filtersets.py:116 -#: netbox/circuits/forms/filtersets.py:131 -#: netbox/circuits/forms/filtersets.py:199 -#: netbox/circuits/forms/filtersets.py:232 -#: netbox/circuits/forms/filtersets.py:255 -#: netbox/circuits/forms/model_forms.py:47 -#: netbox/circuits/forms/model_forms.py:61 -#: netbox/circuits/forms/model_forms.py:93 -#: netbox/circuits/tables/circuits.py:58 -#: netbox/circuits/tables/circuits.py:108 -#: netbox/circuits/tables/circuits.py:160 -#: netbox/circuits/tables/providers.py:72 -#: netbox/circuits/tables/providers.py:103 +#: netbox/circuits/forms/bulk_edit.py:63 netbox/circuits/forms/bulk_edit.py:85 +#: netbox/circuits/forms/bulk_edit.py:135 +#: netbox/circuits/forms/bulk_import.py:43 +#: netbox/circuits/forms/bulk_import.py:58 +#: netbox/circuits/forms/bulk_import.py:81 +#: netbox/circuits/forms/filtersets.py:78 +#: netbox/circuits/forms/filtersets.py:96 +#: netbox/circuits/forms/filtersets.py:124 +#: netbox/circuits/forms/filtersets.py:142 +#: netbox/circuits/forms/filtersets.py:224 +#: netbox/circuits/forms/filtersets.py:268 +#: netbox/circuits/forms/filtersets.py:291 +#: netbox/circuits/forms/filtersets.py:329 +#: netbox/circuits/forms/filtersets.py:337 +#: netbox/circuits/forms/filtersets.py:373 +#: netbox/circuits/forms/filtersets.py:396 +#: netbox/circuits/forms/model_forms.py:60 +#: netbox/circuits/forms/model_forms.py:76 +#: netbox/circuits/forms/model_forms.py:110 +#: netbox/circuits/tables/circuits.py:57 +#: netbox/circuits/tables/circuits.py:112 +#: netbox/circuits/tables/circuits.py:196 +#: netbox/circuits/tables/providers.py:70 +#: netbox/circuits/tables/providers.py:101 +#: netbox/circuits/tables/virtual_circuits.py:46 +#: netbox/circuits/tables/virtual_circuits.py:93 #: netbox/templates/circuits/circuit.html:18 +#: netbox/templates/circuits/circuitgroupassignment.html:26 #: netbox/templates/circuits/circuittermination.html:25 #: netbox/templates/circuits/provider.html:20 #: netbox/templates/circuits/provideraccount.html:20 #: netbox/templates/circuits/providernetwork.html:20 +#: netbox/templates/circuits/virtualcircuit.html:23 +#: netbox/templates/circuits/virtualcircuittermination.html:26 #: netbox/templates/dcim/inc/cable_termination.html:51 +#: netbox/templates/dcim/interface.html:166 msgid "Provider" msgstr "Provider" -#: netbox/circuits/forms/bulk_edit.py:80 -#: netbox/circuits/forms/filtersets.py:91 +#: netbox/circuits/forms/bulk_edit.py:92 +#: netbox/circuits/forms/filtersets.py:99 #: netbox/templates/circuits/providernetwork.html:28 msgid "Service ID" msgstr "Service-ID" -#: netbox/circuits/forms/bulk_edit.py:100 -#: netbox/circuits/forms/filtersets.py:107 netbox/dcim/forms/bulk_edit.py:207 -#: netbox/dcim/forms/bulk_edit.py:610 netbox/dcim/forms/bulk_edit.py:819 -#: netbox/dcim/forms/bulk_edit.py:1188 netbox/dcim/forms/bulk_edit.py:1215 -#: netbox/dcim/forms/bulk_edit.py:1721 netbox/dcim/forms/filtersets.py:1064 -#: netbox/dcim/forms/filtersets.py:1455 netbox/dcim/forms/filtersets.py:1479 -#: netbox/dcim/tables/devices.py:704 netbox/dcim/tables/devices.py:761 -#: netbox/dcim/tables/devices.py:1003 netbox/dcim/tables/devicetypes.py:249 -#: netbox/dcim/tables/devicetypes.py:264 netbox/dcim/tables/racks.py:33 -#: netbox/extras/forms/bulk_edit.py:270 netbox/extras/tables/tables.py:443 +#: netbox/circuits/forms/bulk_edit.py:112 +#: netbox/circuits/forms/bulk_edit.py:303 +#: netbox/circuits/forms/filtersets.py:115 +#: netbox/circuits/forms/filtersets.py:320 netbox/dcim/forms/bulk_edit.py:210 +#: netbox/dcim/forms/bulk_edit.py:613 netbox/dcim/forms/bulk_edit.py:822 +#: netbox/dcim/forms/bulk_edit.py:1191 netbox/dcim/forms/bulk_edit.py:1218 +#: netbox/dcim/forms/bulk_edit.py:1742 netbox/dcim/forms/filtersets.py:1065 +#: netbox/dcim/forms/filtersets.py:1323 netbox/dcim/forms/filtersets.py:1460 +#: netbox/dcim/forms/filtersets.py:1484 netbox/dcim/tables/devices.py:738 +#: netbox/dcim/tables/devices.py:794 netbox/dcim/tables/devices.py:1035 +#: netbox/dcim/tables/devicetypes.py:256 netbox/dcim/tables/devicetypes.py:271 +#: netbox/dcim/tables/racks.py:33 netbox/extras/forms/bulk_edit.py:270 +#: netbox/extras/tables/tables.py:443 #: netbox/templates/circuits/circuittype.html:30 +#: netbox/templates/circuits/virtualcircuittype.html:30 #: netbox/templates/dcim/cable.html:40 #: netbox/templates/dcim/devicerole.html:34 #: netbox/templates/dcim/frontport.html:40 #: netbox/templates/dcim/inventoryitemrole.html:26 +#: netbox/templates/dcim/poweroutlet.html:44 #: netbox/templates/dcim/rackrole.html:30 #: netbox/templates/dcim/rearport.html:40 netbox/templates/extras/tag.html:26 msgid "Color" msgstr "Kleur" -#: netbox/circuits/forms/bulk_edit.py:118 -#: netbox/circuits/forms/bulk_import.py:87 -#: netbox/circuits/forms/filtersets.py:126 netbox/core/forms/bulk_edit.py:18 -#: netbox/core/forms/filtersets.py:33 netbox/core/tables/change_logging.py:32 -#: netbox/core/tables/data.py:20 netbox/core/tables/jobs.py:18 -#: netbox/dcim/forms/bulk_edit.py:797 netbox/dcim/forms/bulk_edit.py:936 -#: netbox/dcim/forms/bulk_edit.py:1004 netbox/dcim/forms/bulk_edit.py:1023 -#: netbox/dcim/forms/bulk_edit.py:1046 netbox/dcim/forms/bulk_edit.py:1088 -#: netbox/dcim/forms/bulk_edit.py:1132 netbox/dcim/forms/bulk_edit.py:1183 -#: netbox/dcim/forms/bulk_edit.py:1210 netbox/dcim/forms/bulk_import.py:188 -#: netbox/dcim/forms/bulk_import.py:267 netbox/dcim/forms/bulk_import.py:730 -#: netbox/dcim/forms/bulk_import.py:756 netbox/dcim/forms/bulk_import.py:782 -#: netbox/dcim/forms/bulk_import.py:802 netbox/dcim/forms/bulk_import.py:885 -#: netbox/dcim/forms/bulk_import.py:979 netbox/dcim/forms/bulk_import.py:1021 -#: netbox/dcim/forms/bulk_import.py:1235 netbox/dcim/forms/bulk_import.py:1398 -#: netbox/dcim/forms/filtersets.py:955 netbox/dcim/forms/filtersets.py:1054 -#: netbox/dcim/forms/filtersets.py:1175 netbox/dcim/forms/filtersets.py:1247 -#: netbox/dcim/forms/filtersets.py:1272 netbox/dcim/forms/filtersets.py:1296 -#: netbox/dcim/forms/filtersets.py:1316 netbox/dcim/forms/filtersets.py:1353 -#: netbox/dcim/forms/filtersets.py:1450 netbox/dcim/forms/filtersets.py:1474 -#: netbox/dcim/forms/model_forms.py:703 netbox/dcim/forms/model_forms.py:709 -#: netbox/dcim/forms/object_import.py:84 +#: netbox/circuits/forms/bulk_edit.py:130 +#: netbox/circuits/forms/bulk_edit.py:331 +#: netbox/circuits/forms/bulk_import.py:94 +#: netbox/circuits/forms/bulk_import.py:221 +#: netbox/circuits/forms/filtersets.py:137 +#: netbox/circuits/forms/filtersets.py:358 +#: netbox/circuits/tables/circuits.py:65 +#: netbox/circuits/tables/circuits.py:200 +#: netbox/circuits/tables/virtual_circuits.py:58 +#: netbox/core/forms/bulk_edit.py:18 netbox/core/forms/filtersets.py:33 +#: netbox/core/tables/change_logging.py:32 netbox/core/tables/data.py:20 +#: netbox/core/tables/jobs.py:18 netbox/dcim/forms/bulk_edit.py:800 +#: netbox/dcim/forms/bulk_edit.py:939 netbox/dcim/forms/bulk_edit.py:1007 +#: netbox/dcim/forms/bulk_edit.py:1026 netbox/dcim/forms/bulk_edit.py:1049 +#: netbox/dcim/forms/bulk_edit.py:1091 netbox/dcim/forms/bulk_edit.py:1135 +#: netbox/dcim/forms/bulk_edit.py:1186 netbox/dcim/forms/bulk_edit.py:1213 +#: netbox/dcim/forms/bulk_import.py:190 netbox/dcim/forms/bulk_import.py:269 +#: netbox/dcim/forms/bulk_import.py:735 netbox/dcim/forms/bulk_import.py:761 +#: netbox/dcim/forms/bulk_import.py:787 netbox/dcim/forms/bulk_import.py:807 +#: netbox/dcim/forms/bulk_import.py:893 netbox/dcim/forms/bulk_import.py:987 +#: netbox/dcim/forms/bulk_import.py:1029 netbox/dcim/forms/bulk_import.py:1332 +#: netbox/dcim/forms/bulk_import.py:1495 netbox/dcim/forms/filtersets.py:956 +#: netbox/dcim/forms/filtersets.py:1055 netbox/dcim/forms/filtersets.py:1176 +#: netbox/dcim/forms/filtersets.py:1248 netbox/dcim/forms/filtersets.py:1273 +#: netbox/dcim/forms/filtersets.py:1297 netbox/dcim/forms/filtersets.py:1317 +#: netbox/dcim/forms/filtersets.py:1358 netbox/dcim/forms/filtersets.py:1455 +#: netbox/dcim/forms/filtersets.py:1479 netbox/dcim/forms/model_forms.py:714 +#: netbox/dcim/forms/model_forms.py:720 netbox/dcim/forms/object_import.py:84 #: netbox/dcim/forms/object_import.py:113 -#: netbox/dcim/forms/object_import.py:145 netbox/dcim/tables/devices.py:178 -#: netbox/dcim/tables/devices.py:814 netbox/dcim/tables/power.py:77 -#: netbox/dcim/tables/racks.py:138 netbox/extras/forms/bulk_import.py:42 +#: netbox/dcim/forms/object_import.py:146 netbox/dcim/tables/devices.py:189 +#: netbox/dcim/tables/devices.py:846 netbox/dcim/tables/power.py:77 +#: netbox/dcim/tables/racks.py:137 netbox/extras/forms/bulk_import.py:42 #: netbox/extras/tables/tables.py:405 netbox/extras/tables/tables.py:465 -#: netbox/netbox/tables/tables.py:240 +#: netbox/netbox/tables/tables.py:243 #: netbox/templates/circuits/circuit.html:30 +#: netbox/templates/circuits/virtualcircuit.html:39 +#: netbox/templates/circuits/virtualcircuittermination.html:64 #: netbox/templates/core/datasource.html:38 #: netbox/templates/dcim/cable.html:15 #: netbox/templates/dcim/consoleport.html:36 #: netbox/templates/dcim/consoleserverport.html:36 #: netbox/templates/dcim/frontport.html:36 #: netbox/templates/dcim/interface.html:46 -#: netbox/templates/dcim/interface.html:169 -#: netbox/templates/dcim/interface.html:311 +#: netbox/templates/dcim/interface.html:226 +#: netbox/templates/dcim/interface.html:368 #: netbox/templates/dcim/powerfeed.html:32 #: netbox/templates/dcim/poweroutlet.html:36 #: netbox/templates/dcim/powerport.html:36 @@ -635,65 +730,78 @@ msgstr "Kleur" #: netbox/templates/vpn/l2vpn.html:22 #: netbox/templates/wireless/inc/authentication_attrs.html:8 #: netbox/templates/wireless/inc/wirelesslink_interface.html:14 -#: netbox/virtualization/forms/bulk_edit.py:60 -#: netbox/virtualization/forms/bulk_import.py:41 +#: netbox/virtualization/forms/bulk_edit.py:61 +#: netbox/virtualization/forms/bulk_import.py:42 #: netbox/virtualization/forms/filtersets.py:54 -#: netbox/virtualization/forms/model_forms.py:62 +#: netbox/virtualization/forms/model_forms.py:65 #: netbox/virtualization/tables/clusters.py:66 #: netbox/vpn/forms/bulk_edit.py:264 netbox/vpn/forms/bulk_import.py:264 -#: netbox/vpn/forms/filtersets.py:217 netbox/vpn/forms/model_forms.py:84 -#: netbox/vpn/forms/model_forms.py:119 netbox/vpn/forms/model_forms.py:231 +#: netbox/vpn/forms/filtersets.py:217 netbox/vpn/forms/model_forms.py:85 +#: netbox/vpn/forms/model_forms.py:120 netbox/vpn/forms/model_forms.py:232 msgid "Type" msgstr "Type" -#: netbox/circuits/forms/bulk_edit.py:128 -#: netbox/circuits/forms/bulk_import.py:80 -#: netbox/circuits/forms/filtersets.py:139 -#: netbox/circuits/forms/model_forms.py:98 +#: netbox/circuits/forms/bulk_edit.py:140 +#: netbox/circuits/forms/bulk_edit.py:326 +#: netbox/circuits/forms/bulk_import.py:87 +#: netbox/circuits/forms/bulk_import.py:214 +#: netbox/circuits/forms/filtersets.py:150 +#: netbox/circuits/forms/filtersets.py:345 +#: netbox/circuits/forms/model_forms.py:116 +#: netbox/circuits/forms/model_forms.py:330 +#: netbox/templates/circuits/virtualcircuit.html:31 +#: netbox/templates/circuits/virtualcircuittermination.html:34 msgid "Provider account" msgstr "Provideraccount" -#: netbox/circuits/forms/bulk_edit.py:136 -#: netbox/circuits/forms/bulk_import.py:93 -#: netbox/circuits/forms/filtersets.py:150 netbox/core/forms/filtersets.py:38 -#: netbox/core/forms/filtersets.py:79 netbox/core/tables/data.py:23 +#: netbox/circuits/forms/bulk_edit.py:148 +#: netbox/circuits/forms/bulk_edit.py:336 +#: netbox/circuits/forms/bulk_import.py:100 +#: netbox/circuits/forms/bulk_import.py:227 +#: netbox/circuits/forms/filtersets.py:161 +#: netbox/circuits/forms/filtersets.py:361 netbox/core/forms/filtersets.py:38 +#: netbox/core/forms/filtersets.py:80 netbox/core/tables/data.py:23 #: netbox/core/tables/jobs.py:26 netbox/core/tables/tasks.py:88 -#: netbox/dcim/forms/bulk_edit.py:107 netbox/dcim/forms/bulk_edit.py:182 -#: netbox/dcim/forms/bulk_edit.py:352 netbox/dcim/forms/bulk_edit.py:706 -#: netbox/dcim/forms/bulk_edit.py:771 netbox/dcim/forms/bulk_edit.py:803 -#: netbox/dcim/forms/bulk_edit.py:930 netbox/dcim/forms/bulk_edit.py:1744 -#: netbox/dcim/forms/bulk_import.py:88 netbox/dcim/forms/bulk_import.py:147 -#: netbox/dcim/forms/bulk_import.py:248 netbox/dcim/forms/bulk_import.py:527 -#: netbox/dcim/forms/bulk_import.py:681 netbox/dcim/forms/bulk_import.py:1229 -#: netbox/dcim/forms/bulk_import.py:1393 netbox/dcim/forms/bulk_import.py:1457 -#: netbox/dcim/forms/filtersets.py:178 netbox/dcim/forms/filtersets.py:237 -#: netbox/dcim/forms/filtersets.py:359 netbox/dcim/forms/filtersets.py:799 -#: netbox/dcim/forms/filtersets.py:924 netbox/dcim/forms/filtersets.py:958 -#: netbox/dcim/forms/filtersets.py:1059 netbox/dcim/forms/filtersets.py:1170 -#: netbox/dcim/tables/devices.py:140 netbox/dcim/tables/devices.py:817 -#: netbox/dcim/tables/devices.py:1063 netbox/dcim/tables/modules.py:70 -#: netbox/dcim/tables/power.py:74 netbox/dcim/tables/racks.py:126 -#: netbox/dcim/tables/sites.py:82 netbox/dcim/tables/sites.py:138 -#: netbox/ipam/forms/bulk_edit.py:256 netbox/ipam/forms/bulk_edit.py:306 -#: netbox/ipam/forms/bulk_edit.py:354 netbox/ipam/forms/bulk_edit.py:506 -#: netbox/ipam/forms/bulk_import.py:192 netbox/ipam/forms/bulk_import.py:257 -#: netbox/ipam/forms/bulk_import.py:293 netbox/ipam/forms/bulk_import.py:474 -#: netbox/ipam/forms/filtersets.py:210 netbox/ipam/forms/filtersets.py:281 -#: netbox/ipam/forms/filtersets.py:355 netbox/ipam/forms/filtersets.py:501 -#: netbox/ipam/forms/model_forms.py:501 netbox/ipam/tables/ip.py:237 -#: netbox/ipam/tables/ip.py:312 netbox/ipam/tables/ip.py:363 -#: netbox/ipam/tables/ip.py:426 netbox/ipam/tables/ip.py:453 -#: netbox/ipam/tables/vlans.py:126 netbox/ipam/tables/vlans.py:232 +#: netbox/dcim/forms/bulk_edit.py:110 netbox/dcim/forms/bulk_edit.py:185 +#: netbox/dcim/forms/bulk_edit.py:355 netbox/dcim/forms/bulk_edit.py:709 +#: netbox/dcim/forms/bulk_edit.py:774 netbox/dcim/forms/bulk_edit.py:806 +#: netbox/dcim/forms/bulk_edit.py:933 netbox/dcim/forms/bulk_edit.py:1723 +#: netbox/dcim/forms/bulk_edit.py:1765 netbox/dcim/forms/bulk_import.py:90 +#: netbox/dcim/forms/bulk_import.py:149 netbox/dcim/forms/bulk_import.py:250 +#: netbox/dcim/forms/bulk_import.py:532 netbox/dcim/forms/bulk_import.py:686 +#: netbox/dcim/forms/bulk_import.py:1137 netbox/dcim/forms/bulk_import.py:1326 +#: netbox/dcim/forms/bulk_import.py:1490 netbox/dcim/forms/bulk_import.py:1554 +#: netbox/dcim/forms/filtersets.py:179 netbox/dcim/forms/filtersets.py:238 +#: netbox/dcim/forms/filtersets.py:360 netbox/dcim/forms/filtersets.py:800 +#: netbox/dcim/forms/filtersets.py:925 netbox/dcim/forms/filtersets.py:959 +#: netbox/dcim/forms/filtersets.py:1060 netbox/dcim/forms/filtersets.py:1171 +#: netbox/dcim/forms/filtersets.py:1562 netbox/dcim/tables/devices.py:151 +#: netbox/dcim/tables/devices.py:849 netbox/dcim/tables/devices.py:983 +#: netbox/dcim/tables/devices.py:1095 netbox/dcim/tables/modules.py:70 +#: netbox/dcim/tables/power.py:74 netbox/dcim/tables/racks.py:125 +#: netbox/dcim/tables/sites.py:82 netbox/dcim/tables/sites.py:137 +#: netbox/ipam/forms/bulk_edit.py:240 netbox/ipam/forms/bulk_edit.py:290 +#: netbox/ipam/forms/bulk_edit.py:338 netbox/ipam/forms/bulk_edit.py:490 +#: netbox/ipam/forms/bulk_import.py:188 netbox/ipam/forms/bulk_import.py:256 +#: netbox/ipam/forms/bulk_import.py:292 netbox/ipam/forms/bulk_import.py:473 +#: netbox/ipam/forms/filtersets.py:212 netbox/ipam/forms/filtersets.py:284 +#: netbox/ipam/forms/filtersets.py:358 netbox/ipam/forms/filtersets.py:542 +#: netbox/ipam/forms/model_forms.py:511 netbox/ipam/tables/ip.py:183 +#: netbox/ipam/tables/ip.py:264 netbox/ipam/tables/ip.py:315 +#: netbox/ipam/tables/ip.py:378 netbox/ipam/tables/ip.py:405 +#: netbox/ipam/tables/vlans.py:95 netbox/ipam/tables/vlans.py:208 #: netbox/templates/circuits/circuit.html:34 +#: netbox/templates/circuits/virtualcircuit.html:43 #: netbox/templates/core/datasource.html:46 netbox/templates/core/job.html:48 #: netbox/templates/core/rq_task.html:81 netbox/templates/core/system.html:18 #: netbox/templates/dcim/cable.html:19 netbox/templates/dcim/device.html:178 +#: netbox/templates/dcim/inventoryitem.html:36 #: netbox/templates/dcim/location.html:45 netbox/templates/dcim/module.html:69 #: netbox/templates/dcim/powerfeed.html:36 netbox/templates/dcim/rack.html:41 #: netbox/templates/dcim/site.html:43 #: netbox/templates/extras/script_list.html:48 #: netbox/templates/ipam/ipaddress.html:37 -#: netbox/templates/ipam/iprange.html:54 netbox/templates/ipam/prefix.html:73 +#: netbox/templates/ipam/iprange.html:54 netbox/templates/ipam/prefix.html:69 #: netbox/templates/ipam/vlan.html:48 #: netbox/templates/virtualization/cluster.html:21 #: netbox/templates/virtualization/virtualmachine.html:19 @@ -701,63 +809,67 @@ msgstr "Provideraccount" #: netbox/templates/wireless/wirelesslan.html:22 #: netbox/templates/wireless/wirelesslink.html:17 #: netbox/users/forms/filtersets.py:32 netbox/users/forms/model_forms.py:194 -#: netbox/virtualization/forms/bulk_edit.py:70 -#: netbox/virtualization/forms/bulk_edit.py:118 -#: netbox/virtualization/forms/bulk_import.py:54 -#: netbox/virtualization/forms/bulk_import.py:80 -#: netbox/virtualization/forms/filtersets.py:62 -#: netbox/virtualization/forms/filtersets.py:160 +#: netbox/virtualization/forms/bulk_edit.py:71 +#: netbox/virtualization/forms/bulk_edit.py:100 +#: netbox/virtualization/forms/bulk_import.py:55 +#: netbox/virtualization/forms/bulk_import.py:86 +#: netbox/virtualization/forms/filtersets.py:82 +#: netbox/virtualization/forms/filtersets.py:165 #: netbox/virtualization/tables/clusters.py:74 -#: netbox/virtualization/tables/virtualmachines.py:60 +#: netbox/virtualization/tables/virtualmachines.py:30 #: netbox/vpn/forms/bulk_edit.py:39 netbox/vpn/forms/bulk_import.py:37 #: netbox/vpn/forms/filtersets.py:47 netbox/vpn/tables/tunnels.py:48 -#: netbox/wireless/forms/bulk_edit.py:43 -#: netbox/wireless/forms/bulk_edit.py:105 -#: netbox/wireless/forms/bulk_import.py:43 -#: netbox/wireless/forms/bulk_import.py:84 -#: netbox/wireless/forms/filtersets.py:49 -#: netbox/wireless/forms/filtersets.py:83 +#: netbox/wireless/forms/bulk_edit.py:45 +#: netbox/wireless/forms/bulk_edit.py:108 +#: netbox/wireless/forms/bulk_import.py:45 +#: netbox/wireless/forms/bulk_import.py:89 +#: netbox/wireless/forms/filtersets.py:52 +#: netbox/wireless/forms/filtersets.py:111 #: netbox/wireless/tables/wirelesslan.py:52 -#: netbox/wireless/tables/wirelesslink.py:20 +#: netbox/wireless/tables/wirelesslink.py:19 msgid "Status" msgstr "Status" -#: netbox/circuits/forms/bulk_edit.py:142 -#: netbox/circuits/forms/bulk_edit.py:233 -#: netbox/circuits/forms/bulk_import.py:98 -#: netbox/circuits/forms/bulk_import.py:158 -#: netbox/circuits/forms/filtersets.py:119 -#: netbox/circuits/forms/filtersets.py:241 netbox/dcim/forms/bulk_edit.py:123 -#: netbox/dcim/forms/bulk_edit.py:188 netbox/dcim/forms/bulk_edit.py:347 -#: netbox/dcim/forms/bulk_edit.py:467 netbox/dcim/forms/bulk_edit.py:696 -#: netbox/dcim/forms/bulk_edit.py:809 netbox/dcim/forms/bulk_edit.py:1749 -#: netbox/dcim/forms/bulk_import.py:107 netbox/dcim/forms/bulk_import.py:152 -#: netbox/dcim/forms/bulk_import.py:241 netbox/dcim/forms/bulk_import.py:356 -#: netbox/dcim/forms/bulk_import.py:501 netbox/dcim/forms/bulk_import.py:1241 -#: netbox/dcim/forms/bulk_import.py:1450 netbox/dcim/forms/filtersets.py:173 -#: netbox/dcim/forms/filtersets.py:205 netbox/dcim/forms/filtersets.py:323 -#: netbox/dcim/forms/filtersets.py:399 netbox/dcim/forms/filtersets.py:420 -#: netbox/dcim/forms/filtersets.py:722 netbox/dcim/forms/filtersets.py:916 -#: netbox/dcim/forms/filtersets.py:978 netbox/dcim/forms/filtersets.py:1008 -#: netbox/dcim/forms/filtersets.py:1130 netbox/dcim/tables/power.py:88 -#: netbox/extras/filtersets.py:612 netbox/extras/forms/filtersets.py:323 -#: netbox/extras/forms/filtersets.py:396 netbox/ipam/forms/bulk_edit.py:43 -#: netbox/ipam/forms/bulk_edit.py:68 netbox/ipam/forms/bulk_edit.py:112 -#: netbox/ipam/forms/bulk_edit.py:141 netbox/ipam/forms/bulk_edit.py:166 -#: netbox/ipam/forms/bulk_edit.py:251 netbox/ipam/forms/bulk_edit.py:301 -#: netbox/ipam/forms/bulk_edit.py:349 netbox/ipam/forms/bulk_edit.py:501 -#: netbox/ipam/forms/bulk_import.py:38 netbox/ipam/forms/bulk_import.py:67 -#: netbox/ipam/forms/bulk_import.py:95 netbox/ipam/forms/bulk_import.py:115 -#: netbox/ipam/forms/bulk_import.py:135 netbox/ipam/forms/bulk_import.py:164 -#: netbox/ipam/forms/bulk_import.py:250 netbox/ipam/forms/bulk_import.py:286 -#: netbox/ipam/forms/bulk_import.py:467 netbox/ipam/forms/filtersets.py:48 -#: netbox/ipam/forms/filtersets.py:68 netbox/ipam/forms/filtersets.py:100 -#: netbox/ipam/forms/filtersets.py:120 netbox/ipam/forms/filtersets.py:143 -#: netbox/ipam/forms/filtersets.py:174 netbox/ipam/forms/filtersets.py:267 -#: netbox/ipam/forms/filtersets.py:310 netbox/ipam/forms/filtersets.py:469 -#: netbox/ipam/tables/ip.py:456 netbox/ipam/tables/vlans.py:229 -#: netbox/templates/circuits/circuit.html:38 +#: netbox/circuits/forms/bulk_edit.py:154 +#: netbox/circuits/forms/bulk_edit.py:271 +#: netbox/circuits/forms/bulk_edit.py:342 +#: netbox/circuits/forms/bulk_import.py:111 +#: netbox/circuits/forms/bulk_import.py:170 +#: netbox/circuits/forms/bulk_import.py:232 +#: netbox/circuits/forms/filtersets.py:130 +#: netbox/circuits/forms/filtersets.py:277 +#: netbox/circuits/forms/filtersets.py:331 netbox/dcim/forms/bulk_edit.py:126 +#: netbox/dcim/forms/bulk_edit.py:191 netbox/dcim/forms/bulk_edit.py:350 +#: netbox/dcim/forms/bulk_edit.py:470 netbox/dcim/forms/bulk_edit.py:699 +#: netbox/dcim/forms/bulk_edit.py:812 netbox/dcim/forms/bulk_edit.py:1770 +#: netbox/dcim/forms/bulk_import.py:109 netbox/dcim/forms/bulk_import.py:154 +#: netbox/dcim/forms/bulk_import.py:243 netbox/dcim/forms/bulk_import.py:358 +#: netbox/dcim/forms/bulk_import.py:506 netbox/dcim/forms/bulk_import.py:1338 +#: netbox/dcim/forms/bulk_import.py:1547 netbox/dcim/forms/filtersets.py:174 +#: netbox/dcim/forms/filtersets.py:206 netbox/dcim/forms/filtersets.py:324 +#: netbox/dcim/forms/filtersets.py:400 netbox/dcim/forms/filtersets.py:421 +#: netbox/dcim/forms/filtersets.py:723 netbox/dcim/forms/filtersets.py:917 +#: netbox/dcim/forms/filtersets.py:979 netbox/dcim/forms/filtersets.py:1009 +#: netbox/dcim/forms/filtersets.py:1131 netbox/dcim/tables/power.py:88 +#: netbox/extras/filtersets.py:612 netbox/extras/forms/filtersets.py:330 +#: netbox/extras/forms/filtersets.py:403 netbox/ipam/forms/bulk_edit.py:46 +#: netbox/ipam/forms/bulk_edit.py:71 netbox/ipam/forms/bulk_edit.py:115 +#: netbox/ipam/forms/bulk_edit.py:144 netbox/ipam/forms/bulk_edit.py:169 +#: netbox/ipam/forms/bulk_edit.py:235 netbox/ipam/forms/bulk_edit.py:285 +#: netbox/ipam/forms/bulk_edit.py:333 netbox/ipam/forms/bulk_edit.py:485 +#: netbox/ipam/forms/bulk_import.py:41 netbox/ipam/forms/bulk_import.py:70 +#: netbox/ipam/forms/bulk_import.py:98 netbox/ipam/forms/bulk_import.py:118 +#: netbox/ipam/forms/bulk_import.py:138 netbox/ipam/forms/bulk_import.py:167 +#: netbox/ipam/forms/bulk_import.py:249 netbox/ipam/forms/bulk_import.py:285 +#: netbox/ipam/forms/bulk_import.py:466 netbox/ipam/forms/filtersets.py:50 +#: netbox/ipam/forms/filtersets.py:70 netbox/ipam/forms/filtersets.py:102 +#: netbox/ipam/forms/filtersets.py:122 netbox/ipam/forms/filtersets.py:145 +#: netbox/ipam/forms/filtersets.py:176 netbox/ipam/forms/filtersets.py:270 +#: netbox/ipam/forms/filtersets.py:313 netbox/ipam/forms/filtersets.py:510 +#: netbox/ipam/tables/ip.py:408 netbox/ipam/tables/vlans.py:205 +#: netbox/templates/circuits/circuit.html:48 #: netbox/templates/circuits/circuitgroup.html:36 +#: netbox/templates/circuits/virtualcircuit.html:47 #: netbox/templates/dcim/cable.html:23 netbox/templates/dcim/device.html:79 #: netbox/templates/dcim/location.html:49 #: netbox/templates/dcim/powerfeed.html:44 netbox/templates/dcim/rack.html:32 @@ -774,114 +886,181 @@ msgstr "Status" #: netbox/templates/virtualization/cluster.html:33 #: netbox/templates/virtualization/virtualmachine.html:39 #: netbox/templates/vpn/l2vpn.html:30 netbox/templates/vpn/tunnel.html:49 -#: netbox/templates/wireless/wirelesslan.html:34 +#: netbox/templates/wireless/wirelesslan.html:42 #: netbox/templates/wireless/wirelesslink.html:25 -#: netbox/tenancy/forms/forms.py:25 netbox/tenancy/forms/forms.py:48 -#: netbox/tenancy/forms/model_forms.py:52 netbox/tenancy/tables/columns.py:64 -#: netbox/virtualization/forms/bulk_edit.py:76 -#: netbox/virtualization/forms/bulk_edit.py:155 -#: netbox/virtualization/forms/bulk_import.py:66 -#: netbox/virtualization/forms/bulk_import.py:115 +#: netbox/tenancy/forms/forms.py:25 netbox/tenancy/forms/forms.py:49 +#: netbox/tenancy/forms/model_forms.py:52 netbox/tenancy/tables/columns.py:49 +#: netbox/virtualization/forms/bulk_edit.py:77 +#: netbox/virtualization/forms/bulk_edit.py:137 +#: netbox/virtualization/forms/bulk_import.py:67 +#: netbox/virtualization/forms/bulk_import.py:121 #: netbox/virtualization/forms/filtersets.py:47 -#: netbox/virtualization/forms/filtersets.py:105 +#: netbox/virtualization/forms/filtersets.py:110 #: netbox/vpn/forms/bulk_edit.py:59 netbox/vpn/forms/bulk_edit.py:269 #: netbox/vpn/forms/bulk_import.py:59 netbox/vpn/forms/bulk_import.py:258 -#: netbox/vpn/forms/filtersets.py:214 netbox/wireless/forms/bulk_edit.py:63 -#: netbox/wireless/forms/bulk_edit.py:110 -#: netbox/wireless/forms/bulk_import.py:55 -#: netbox/wireless/forms/bulk_import.py:97 -#: netbox/wireless/forms/filtersets.py:35 -#: netbox/wireless/forms/filtersets.py:75 +#: netbox/vpn/forms/filtersets.py:214 netbox/wireless/forms/bulk_edit.py:65 +#: netbox/wireless/forms/bulk_edit.py:113 +#: netbox/wireless/forms/bulk_import.py:57 +#: netbox/wireless/forms/bulk_import.py:102 +#: netbox/wireless/forms/filtersets.py:38 +#: netbox/wireless/forms/filtersets.py:103 msgid "Tenant" msgstr "Tenant" -#: netbox/circuits/forms/bulk_edit.py:147 -#: netbox/circuits/forms/filtersets.py:174 +#: netbox/circuits/forms/bulk_edit.py:159 +#: netbox/circuits/forms/filtersets.py:190 msgid "Install date" msgstr "Installatiedatum" -#: netbox/circuits/forms/bulk_edit.py:152 -#: netbox/circuits/forms/filtersets.py:179 +#: netbox/circuits/forms/bulk_edit.py:164 +#: netbox/circuits/forms/filtersets.py:195 msgid "Termination date" msgstr "Beëindigingsdatum" -#: netbox/circuits/forms/bulk_edit.py:158 -#: netbox/circuits/forms/filtersets.py:186 +#: netbox/circuits/forms/bulk_edit.py:170 +#: netbox/circuits/forms/filtersets.py:202 msgid "Commit rate (Kbps)" msgstr "Vastleggingssnelheid (Kbps)" -#: netbox/circuits/forms/bulk_edit.py:173 -#: netbox/circuits/forms/model_forms.py:112 +#: netbox/circuits/forms/bulk_edit.py:176 +#: netbox/circuits/forms/filtersets.py:208 +#: netbox/circuits/forms/model_forms.py:136 +#: netbox/templates/circuits/circuit.html:38 +#: netbox/templates/wireless/wirelesslink.html:38 +#: netbox/wireless/forms/bulk_edit.py:132 +#: netbox/wireless/forms/filtersets.py:130 +#: netbox/wireless/forms/model_forms.py:168 +msgid "Distance" +msgstr "Afstand" + +#: netbox/circuits/forms/bulk_edit.py:181 +#: netbox/circuits/forms/bulk_import.py:105 +#: netbox/circuits/forms/bulk_import.py:108 +#: netbox/circuits/forms/filtersets.py:212 +#: netbox/wireless/forms/bulk_edit.py:137 +#: netbox/wireless/forms/bulk_import.py:121 +#: netbox/wireless/forms/bulk_import.py:124 +#: netbox/wireless/forms/filtersets.py:134 +msgid "Distance unit" +msgstr "Afstandseenheid" + +#: netbox/circuits/forms/bulk_edit.py:196 +#: netbox/circuits/forms/model_forms.py:141 msgid "Service Parameters" msgstr "Serviceparameters" -#: netbox/circuits/forms/bulk_edit.py:174 -#: netbox/circuits/forms/model_forms.py:113 -#: netbox/circuits/forms/model_forms.py:183 -#: netbox/dcim/forms/model_forms.py:139 netbox/dcim/forms/model_forms.py:181 -#: netbox/dcim/forms/model_forms.py:266 netbox/dcim/forms/model_forms.py:323 -#: netbox/dcim/forms/model_forms.py:768 netbox/dcim/forms/model_forms.py:1699 -#: netbox/ipam/forms/model_forms.py:64 netbox/ipam/forms/model_forms.py:81 -#: netbox/ipam/forms/model_forms.py:115 netbox/ipam/forms/model_forms.py:136 -#: netbox/ipam/forms/model_forms.py:160 netbox/ipam/forms/model_forms.py:232 -#: netbox/ipam/forms/model_forms.py:261 netbox/ipam/forms/model_forms.py:320 +#: netbox/circuits/forms/bulk_edit.py:197 +#: netbox/circuits/forms/filtersets.py:73 +#: netbox/circuits/forms/filtersets.py:91 +#: netbox/circuits/forms/filtersets.py:110 +#: netbox/circuits/forms/filtersets.py:127 +#: netbox/circuits/forms/filtersets.py:315 +#: netbox/circuits/forms/filtersets.py:330 netbox/core/forms/filtersets.py:68 +#: netbox/core/forms/filtersets.py:136 netbox/dcim/forms/bulk_edit.py:846 +#: netbox/dcim/forms/filtersets.py:173 netbox/dcim/forms/filtersets.py:205 +#: netbox/dcim/forms/filtersets.py:916 netbox/dcim/forms/filtersets.py:1008 +#: netbox/dcim/forms/filtersets.py:1132 netbox/dcim/forms/filtersets.py:1240 +#: netbox/dcim/forms/filtersets.py:1264 netbox/dcim/forms/filtersets.py:1289 +#: netbox/dcim/forms/filtersets.py:1308 netbox/dcim/forms/filtersets.py:1332 +#: netbox/dcim/forms/filtersets.py:1446 netbox/dcim/forms/filtersets.py:1470 +#: netbox/dcim/forms/filtersets.py:1494 netbox/dcim/forms/filtersets.py:1512 +#: netbox/dcim/forms/filtersets.py:1528 netbox/extras/forms/bulk_edit.py:90 +#: netbox/extras/forms/filtersets.py:45 netbox/extras/forms/filtersets.py:137 +#: netbox/extras/forms/filtersets.py:169 netbox/extras/forms/filtersets.py:210 +#: netbox/extras/forms/filtersets.py:227 netbox/extras/forms/filtersets.py:258 +#: netbox/extras/forms/filtersets.py:282 netbox/extras/forms/filtersets.py:449 +#: netbox/ipam/forms/filtersets.py:101 netbox/ipam/forms/filtersets.py:269 +#: netbox/ipam/forms/filtersets.py:310 netbox/ipam/forms/filtersets.py:385 +#: netbox/ipam/forms/filtersets.py:470 netbox/ipam/forms/filtersets.py:483 +#: netbox/ipam/forms/filtersets.py:508 netbox/ipam/forms/filtersets.py:579 +#: netbox/ipam/forms/filtersets.py:597 netbox/netbox/tables/tables.py:259 +#: netbox/virtualization/forms/filtersets.py:45 +#: netbox/virtualization/forms/filtersets.py:108 +#: netbox/virtualization/forms/filtersets.py:203 +#: netbox/virtualization/forms/filtersets.py:248 +#: netbox/vpn/forms/filtersets.py:213 netbox/wireless/forms/bulk_edit.py:153 +#: netbox/wireless/forms/filtersets.py:36 +#: netbox/wireless/forms/filtersets.py:102 +msgid "Attributes" +msgstr "Attributen" + +#: netbox/circuits/forms/bulk_edit.py:198 +#: netbox/circuits/forms/bulk_edit.py:356 +#: netbox/circuits/forms/model_forms.py:142 +#: netbox/circuits/forms/model_forms.py:240 +#: netbox/circuits/forms/model_forms.py:345 +#: netbox/dcim/forms/model_forms.py:143 netbox/dcim/forms/model_forms.py:185 +#: netbox/dcim/forms/model_forms.py:274 netbox/dcim/forms/model_forms.py:331 +#: netbox/dcim/forms/model_forms.py:780 netbox/dcim/forms/model_forms.py:1744 +#: netbox/ipam/forms/model_forms.py:67 netbox/ipam/forms/model_forms.py:84 +#: netbox/ipam/forms/model_forms.py:119 netbox/ipam/forms/model_forms.py:141 +#: netbox/ipam/forms/model_forms.py:166 netbox/ipam/forms/model_forms.py:233 +#: netbox/ipam/forms/model_forms.py:271 netbox/ipam/forms/model_forms.py:330 #: netbox/netbox/navigation/menu.py:24 #: netbox/templates/dcim/device_edit.html:85 #: netbox/templates/dcim/htmx/cable_edit.html:72 #: netbox/templates/ipam/ipaddress_bulk_add.html:27 -#: netbox/templates/ipam/vlan_edit.html:22 +#: netbox/templates/ipam/vlan_edit.html:30 #: netbox/virtualization/forms/model_forms.py:80 -#: netbox/virtualization/forms/model_forms.py:222 +#: netbox/virtualization/forms/model_forms.py:229 #: netbox/vpn/forms/bulk_edit.py:78 netbox/vpn/forms/filtersets.py:44 -#: netbox/vpn/forms/model_forms.py:62 netbox/vpn/forms/model_forms.py:147 -#: netbox/vpn/forms/model_forms.py:411 netbox/wireless/forms/model_forms.py:54 -#: netbox/wireless/forms/model_forms.py:170 +#: netbox/vpn/forms/model_forms.py:63 netbox/vpn/forms/model_forms.py:148 +#: netbox/vpn/forms/model_forms.py:414 netbox/wireless/forms/model_forms.py:57 +#: netbox/wireless/forms/model_forms.py:173 msgid "Tenancy" msgstr "Tenants" -#: netbox/circuits/forms/bulk_edit.py:193 -#: netbox/circuits/forms/bulk_edit.py:217 -#: netbox/circuits/forms/model_forms.py:155 -#: netbox/circuits/tables/circuits.py:117 -#: netbox/templates/circuits/inc/circuit_termination_fields.html:62 -#: netbox/templates/circuits/providernetwork.html:17 -msgid "Provider Network" -msgstr "Netwerkprovider" +#: netbox/circuits/forms/bulk_edit.py:215 +#: netbox/circuits/forms/model_forms.py:170 +#: netbox/dcim/forms/bulk_import.py:1299 netbox/dcim/forms/bulk_import.py:1317 +msgid "Termination type" +msgstr "Soort beëindiging" -#: netbox/circuits/forms/bulk_edit.py:199 +#: netbox/circuits/forms/bulk_edit.py:218 +#: netbox/circuits/forms/bulk_import.py:133 +#: netbox/circuits/forms/filtersets.py:225 +#: netbox/circuits/forms/model_forms.py:173 +#: netbox/templates/circuits/inc/circuit_termination.html:6 +#: netbox/templates/dcim/cable.html:68 netbox/templates/dcim/cable.html:72 +#: netbox/vpn/forms/bulk_import.py:100 netbox/vpn/forms/filtersets.py:77 +msgid "Termination" +msgstr "Opzegging" + +#: netbox/circuits/forms/bulk_edit.py:226 msgid "Port speed (Kbps)" msgstr "Poortsnelheid (Kbps)" -#: netbox/circuits/forms/bulk_edit.py:203 +#: netbox/circuits/forms/bulk_edit.py:230 msgid "Upstream speed (Kbps)" msgstr "Upstreamsnelheid (Kbps)" -#: netbox/circuits/forms/bulk_edit.py:206 netbox/dcim/forms/bulk_edit.py:966 -#: netbox/dcim/forms/bulk_edit.py:1330 netbox/dcim/forms/bulk_edit.py:1347 -#: netbox/dcim/forms/bulk_edit.py:1364 netbox/dcim/forms/bulk_edit.py:1382 -#: netbox/dcim/forms/bulk_edit.py:1477 netbox/dcim/forms/bulk_edit.py:1637 -#: netbox/dcim/forms/bulk_edit.py:1654 +#: netbox/circuits/forms/bulk_edit.py:233 netbox/dcim/forms/bulk_edit.py:969 +#: netbox/dcim/forms/bulk_edit.py:1333 netbox/dcim/forms/bulk_edit.py:1350 +#: netbox/dcim/forms/bulk_edit.py:1367 netbox/dcim/forms/bulk_edit.py:1385 +#: netbox/dcim/forms/bulk_edit.py:1480 netbox/dcim/forms/bulk_edit.py:1652 +#: netbox/dcim/forms/bulk_edit.py:1669 msgid "Mark connected" msgstr "Markeren als verbonden" -#: netbox/circuits/forms/bulk_edit.py:219 -#: netbox/circuits/forms/model_forms.py:157 -#: netbox/templates/circuits/inc/circuit_termination_fields.html:54 +#: netbox/circuits/forms/bulk_edit.py:243 +#: netbox/circuits/forms/model_forms.py:184 +#: netbox/templates/circuits/inc/circuit_termination_fields.html:55 #: netbox/templates/dcim/frontport.html:121 -#: netbox/templates/dcim/interface.html:193 +#: netbox/templates/dcim/interface.html:250 #: netbox/templates/dcim/rearport.html:111 msgid "Circuit Termination" msgstr "Circuitbeëindiging" -#: netbox/circuits/forms/bulk_edit.py:221 -#: netbox/circuits/forms/model_forms.py:159 +#: netbox/circuits/forms/bulk_edit.py:245 +#: netbox/circuits/forms/model_forms.py:186 msgid "Termination Details" msgstr "Details van de beëindiging" -#: netbox/circuits/forms/bulk_edit.py:251 -#: netbox/circuits/forms/filtersets.py:268 -#: netbox/circuits/tables/circuits.py:168 netbox/dcim/forms/model_forms.py:551 -#: netbox/templates/circuits/circuitgroupassignment.html:30 +#: netbox/circuits/forms/bulk_edit.py:289 +#: netbox/circuits/forms/bulk_import.py:188 +#: netbox/circuits/forms/filtersets.py:304 +#: netbox/circuits/tables/circuits.py:207 netbox/dcim/forms/model_forms.py:562 +#: netbox/templates/circuits/circuitgroupassignment.html:34 #: netbox/templates/dcim/device.html:133 #: netbox/templates/dcim/virtualchassis.html:68 #: netbox/templates/dcim/virtualchassis_edit.html:56 @@ -891,227 +1070,313 @@ msgstr "Details van de beëindiging" msgid "Priority" msgstr "Prioriteit" -#: netbox/circuits/forms/bulk_import.py:39 -#: netbox/circuits/forms/bulk_import.py:54 -#: netbox/circuits/forms/bulk_import.py:77 -msgid "Assigned provider" -msgstr "Toegewezen provider" - -#: netbox/circuits/forms/bulk_import.py:83 -msgid "Assigned provider account" -msgstr "Toegewezen provideraccount" - -#: netbox/circuits/forms/bulk_import.py:90 -msgid "Type of circuit" -msgstr "Soort circuit" - -#: netbox/circuits/forms/bulk_import.py:95 netbox/dcim/forms/bulk_import.py:90 -#: netbox/dcim/forms/bulk_import.py:149 netbox/dcim/forms/bulk_import.py:250 -#: netbox/dcim/forms/bulk_import.py:529 netbox/dcim/forms/bulk_import.py:683 -#: netbox/dcim/forms/bulk_import.py:1395 netbox/ipam/forms/bulk_import.py:194 -#: netbox/ipam/forms/bulk_import.py:259 netbox/ipam/forms/bulk_import.py:295 -#: netbox/ipam/forms/bulk_import.py:476 -#: netbox/virtualization/forms/bulk_import.py:56 -#: netbox/virtualization/forms/bulk_import.py:82 -#: netbox/vpn/forms/bulk_import.py:39 netbox/wireless/forms/bulk_import.py:45 -msgid "Operational status" -msgstr "Operationele status" - -#: netbox/circuits/forms/bulk_import.py:102 -#: netbox/circuits/forms/bulk_import.py:162 -#: netbox/dcim/forms/bulk_import.py:111 netbox/dcim/forms/bulk_import.py:156 -#: netbox/dcim/forms/bulk_import.py:360 netbox/dcim/forms/bulk_import.py:505 -#: netbox/dcim/forms/bulk_import.py:1245 netbox/dcim/forms/bulk_import.py:1390 -#: netbox/dcim/forms/bulk_import.py:1454 netbox/ipam/forms/bulk_import.py:42 -#: netbox/ipam/forms/bulk_import.py:71 netbox/ipam/forms/bulk_import.py:99 -#: netbox/ipam/forms/bulk_import.py:119 netbox/ipam/forms/bulk_import.py:139 -#: netbox/ipam/forms/bulk_import.py:168 netbox/ipam/forms/bulk_import.py:254 -#: netbox/ipam/forms/bulk_import.py:290 netbox/ipam/forms/bulk_import.py:471 -#: netbox/virtualization/forms/bulk_import.py:70 -#: netbox/virtualization/forms/bulk_import.py:119 -#: netbox/vpn/forms/bulk_import.py:63 netbox/wireless/forms/bulk_import.py:59 -#: netbox/wireless/forms/bulk_import.py:101 -msgid "Assigned tenant" -msgstr "Toegewezen huurder" - -#: netbox/circuits/forms/bulk_import.py:120 -#: netbox/templates/circuits/inc/circuit_termination.html:6 -#: netbox/templates/circuits/inc/circuit_termination_fields.html:15 -#: netbox/templates/dcim/cable.html:68 netbox/templates/dcim/cable.html:72 -#: netbox/vpn/forms/bulk_import.py:100 netbox/vpn/forms/filtersets.py:77 -msgid "Termination" -msgstr "Opzegging" - -#: netbox/circuits/forms/bulk_import.py:130 -#: netbox/circuits/forms/filtersets.py:147 -#: netbox/circuits/forms/filtersets.py:227 -#: netbox/circuits/forms/model_forms.py:144 +#: netbox/circuits/forms/bulk_edit.py:321 +#: netbox/circuits/forms/bulk_import.py:208 +#: netbox/circuits/forms/filtersets.py:158 +#: netbox/circuits/forms/filtersets.py:263 +#: netbox/circuits/forms/filtersets.py:353 +#: netbox/circuits/forms/filtersets.py:391 +#: netbox/circuits/forms/model_forms.py:325 +#: netbox/circuits/tables/virtual_circuits.py:51 +#: netbox/circuits/tables/virtual_circuits.py:99 msgid "Provider network" msgstr "Netwerkprovider" -#: netbox/circuits/forms/filtersets.py:30 -#: netbox/circuits/forms/filtersets.py:118 -#: netbox/circuits/forms/filtersets.py:200 netbox/dcim/forms/bulk_edit.py:339 -#: netbox/dcim/forms/bulk_edit.py:447 netbox/dcim/forms/bulk_edit.py:688 -#: netbox/dcim/forms/bulk_edit.py:743 netbox/dcim/forms/bulk_edit.py:897 -#: netbox/dcim/forms/bulk_import.py:235 netbox/dcim/forms/bulk_import.py:337 -#: netbox/dcim/forms/bulk_import.py:568 netbox/dcim/forms/bulk_import.py:1339 -#: netbox/dcim/forms/bulk_import.py:1373 netbox/dcim/forms/filtersets.py:95 -#: netbox/dcim/forms/filtersets.py:322 netbox/dcim/forms/filtersets.py:356 -#: netbox/dcim/forms/filtersets.py:396 netbox/dcim/forms/filtersets.py:447 -#: netbox/dcim/forms/filtersets.py:719 netbox/dcim/forms/filtersets.py:762 -#: netbox/dcim/forms/filtersets.py:977 netbox/dcim/forms/filtersets.py:1006 -#: netbox/dcim/forms/filtersets.py:1026 netbox/dcim/forms/filtersets.py:1090 -#: netbox/dcim/forms/filtersets.py:1120 netbox/dcim/forms/filtersets.py:1129 -#: netbox/dcim/forms/filtersets.py:1240 netbox/dcim/forms/filtersets.py:1264 -#: netbox/dcim/forms/filtersets.py:1289 netbox/dcim/forms/filtersets.py:1308 -#: netbox/dcim/forms/filtersets.py:1331 netbox/dcim/forms/filtersets.py:1442 -#: netbox/dcim/forms/filtersets.py:1466 netbox/dcim/forms/filtersets.py:1490 -#: netbox/dcim/forms/filtersets.py:1508 netbox/dcim/forms/filtersets.py:1525 -#: netbox/dcim/forms/model_forms.py:180 netbox/dcim/forms/model_forms.py:243 -#: netbox/dcim/forms/model_forms.py:468 netbox/dcim/forms/model_forms.py:728 -#: netbox/dcim/tables/devices.py:157 netbox/dcim/tables/power.py:30 -#: netbox/dcim/tables/racks.py:118 netbox/dcim/tables/racks.py:212 -#: netbox/extras/filtersets.py:536 netbox/extras/forms/filtersets.py:320 -#: netbox/ipam/forms/filtersets.py:173 netbox/ipam/forms/filtersets.py:414 -#: netbox/ipam/forms/filtersets.py:437 netbox/ipam/forms/filtersets.py:467 +#: netbox/circuits/forms/bulk_edit.py:365 +#: netbox/circuits/forms/bulk_import.py:254 +#: netbox/circuits/forms/filtersets.py:381 +#: netbox/circuits/forms/model_forms.py:365 netbox/dcim/forms/bulk_edit.py:361 +#: netbox/dcim/forms/bulk_edit.py:1280 netbox/dcim/forms/bulk_edit.py:1713 +#: netbox/dcim/forms/bulk_import.py:255 netbox/dcim/forms/bulk_import.py:1106 +#: netbox/dcim/forms/filtersets.py:368 netbox/dcim/forms/filtersets.py:778 +#: netbox/dcim/forms/filtersets.py:1539 netbox/dcim/forms/model_forms.py:256 +#: netbox/dcim/forms/model_forms.py:1090 netbox/dcim/forms/model_forms.py:1559 +#: netbox/dcim/forms/object_import.py:182 netbox/dcim/tables/devices.py:180 +#: netbox/dcim/tables/devices.py:841 netbox/dcim/tables/devices.py:967 +#: netbox/dcim/tables/devicetypes.py:311 netbox/dcim/tables/racks.py:128 +#: netbox/extras/filtersets.py:552 netbox/ipam/forms/bulk_edit.py:245 +#: netbox/ipam/forms/bulk_edit.py:295 netbox/ipam/forms/bulk_edit.py:343 +#: netbox/ipam/forms/bulk_edit.py:495 netbox/ipam/forms/bulk_import.py:193 +#: netbox/ipam/forms/bulk_import.py:261 netbox/ipam/forms/bulk_import.py:297 +#: netbox/ipam/forms/bulk_import.py:478 netbox/ipam/forms/filtersets.py:240 +#: netbox/ipam/forms/filtersets.py:292 netbox/ipam/forms/filtersets.py:363 +#: netbox/ipam/forms/filtersets.py:550 netbox/ipam/forms/model_forms.py:194 +#: netbox/ipam/forms/model_forms.py:220 netbox/ipam/forms/model_forms.py:259 +#: netbox/ipam/forms/model_forms.py:686 netbox/ipam/tables/ip.py:209 +#: netbox/ipam/tables/ip.py:268 netbox/ipam/tables/ip.py:319 +#: netbox/ipam/tables/vlans.py:99 netbox/ipam/tables/vlans.py:211 +#: netbox/templates/circuits/virtualcircuittermination.html:42 +#: netbox/templates/dcim/device.html:182 +#: netbox/templates/dcim/inc/panels/inventory_items.html:20 +#: netbox/templates/dcim/interface.html:178 +#: netbox/templates/dcim/interface.html:280 +#: netbox/templates/dcim/inventoryitem.html:40 +#: netbox/templates/dcim/rack.html:49 netbox/templates/ipam/ipaddress.html:41 +#: netbox/templates/ipam/iprange.html:50 netbox/templates/ipam/prefix.html:73 +#: netbox/templates/ipam/role.html:19 netbox/templates/ipam/vlan.html:52 +#: netbox/templates/virtualization/virtualmachine.html:23 +#: netbox/templates/vpn/tunneltermination.html:17 +#: netbox/templates/wireless/inc/wirelesslink_interface.html:20 +#: netbox/tenancy/forms/bulk_edit.py:142 +#: netbox/tenancy/forms/filtersets.py:107 +#: netbox/tenancy/forms/model_forms.py:137 +#: netbox/tenancy/tables/contacts.py:102 +#: netbox/virtualization/forms/bulk_edit.py:127 +#: netbox/virtualization/forms/bulk_import.py:112 +#: netbox/virtualization/forms/filtersets.py:162 +#: netbox/virtualization/forms/model_forms.py:202 +#: netbox/virtualization/tables/virtualmachines.py:45 +#: netbox/vpn/forms/bulk_edit.py:87 netbox/vpn/forms/bulk_import.py:81 +#: netbox/vpn/forms/filtersets.py:85 netbox/vpn/forms/model_forms.py:79 +#: netbox/vpn/forms/model_forms.py:114 netbox/vpn/tables/tunnels.py:82 +msgid "Role" +msgstr "Rol" + +#: netbox/circuits/forms/bulk_import.py:46 +#: netbox/circuits/forms/bulk_import.py:61 +#: netbox/circuits/forms/bulk_import.py:84 +msgid "Assigned provider" +msgstr "Toegewezen provider" + +#: netbox/circuits/forms/bulk_import.py:90 +msgid "Assigned provider account" +msgstr "Toegewezen provideraccount" + +#: netbox/circuits/forms/bulk_import.py:97 +msgid "Type of circuit" +msgstr "Soort circuit" + +#: netbox/circuits/forms/bulk_import.py:102 +#: netbox/circuits/forms/bulk_import.py:229 +#: netbox/dcim/forms/bulk_import.py:92 netbox/dcim/forms/bulk_import.py:151 +#: netbox/dcim/forms/bulk_import.py:252 netbox/dcim/forms/bulk_import.py:534 +#: netbox/dcim/forms/bulk_import.py:688 netbox/dcim/forms/bulk_import.py:1139 +#: netbox/dcim/forms/bulk_import.py:1492 netbox/ipam/forms/bulk_import.py:190 +#: netbox/ipam/forms/bulk_import.py:258 netbox/ipam/forms/bulk_import.py:294 +#: netbox/ipam/forms/bulk_import.py:475 netbox/ipam/forms/bulk_import.py:488 +#: netbox/virtualization/forms/bulk_import.py:57 +#: netbox/virtualization/forms/bulk_import.py:88 +#: netbox/vpn/forms/bulk_import.py:39 netbox/wireless/forms/bulk_import.py:47 +msgid "Operational status" +msgstr "Operationele status" + +#: netbox/circuits/forms/bulk_import.py:115 +#: netbox/circuits/forms/bulk_import.py:174 +#: netbox/circuits/forms/bulk_import.py:236 +#: netbox/dcim/forms/bulk_import.py:113 netbox/dcim/forms/bulk_import.py:158 +#: netbox/dcim/forms/bulk_import.py:362 netbox/dcim/forms/bulk_import.py:510 +#: netbox/dcim/forms/bulk_import.py:1342 netbox/dcim/forms/bulk_import.py:1487 +#: netbox/dcim/forms/bulk_import.py:1551 netbox/ipam/forms/bulk_import.py:45 +#: netbox/ipam/forms/bulk_import.py:74 netbox/ipam/forms/bulk_import.py:102 +#: netbox/ipam/forms/bulk_import.py:122 netbox/ipam/forms/bulk_import.py:142 +#: netbox/ipam/forms/bulk_import.py:171 netbox/ipam/forms/bulk_import.py:253 +#: netbox/ipam/forms/bulk_import.py:289 netbox/ipam/forms/bulk_import.py:470 +#: netbox/virtualization/forms/bulk_import.py:71 +#: netbox/virtualization/forms/bulk_import.py:125 +#: netbox/vpn/forms/bulk_import.py:63 netbox/wireless/forms/bulk_import.py:61 +#: netbox/wireless/forms/bulk_import.py:106 +msgid "Assigned tenant" +msgstr "Toegewezen huurder" + +#: netbox/circuits/forms/bulk_import.py:139 +msgid "Termination type (app & model)" +msgstr "Beëindigingstype (app en model)" + +#: netbox/circuits/forms/bulk_import.py:151 +#: netbox/circuits/forms/bulk_import.py:164 +msgid "Termination ID" +msgstr "Beëindigings-" + +#: netbox/circuits/forms/bulk_import.py:185 +msgid "Circuit type (app & model)" +msgstr "Circuittype (app en model)" + +#: netbox/circuits/forms/bulk_import.py:211 +msgid "The network to which this virtual circuit belongs" +msgstr "Het netwerk waartoe dit virtuele circuit behoort" + +#: netbox/circuits/forms/bulk_import.py:217 +msgid "Assigned provider account (if any)" +msgstr "Toegewezen provideraccount (indien aanwezig)" + +#: netbox/circuits/forms/bulk_import.py:224 +msgid "Type of virtual circuit" +msgstr "Soort virtueel circuit" + +#: netbox/circuits/forms/bulk_import.py:256 netbox/vpn/forms/bulk_import.py:83 +msgid "Operational role" +msgstr "Operationele rol" + +#: netbox/circuits/forms/bulk_import.py:259 +#: netbox/circuits/forms/model_forms.py:368 +#: netbox/circuits/tables/virtual_circuits.py:112 +#: netbox/dcim/forms/bulk_import.py:1219 netbox/dcim/forms/model_forms.py:1164 +#: netbox/dcim/forms/model_forms.py:1433 netbox/dcim/forms/model_forms.py:1600 +#: netbox/dcim/forms/model_forms.py:1635 netbox/dcim/forms/model_forms.py:1765 +#: netbox/dcim/tables/connections.py:65 netbox/dcim/tables/devices.py:1141 +#: netbox/ipam/forms/bulk_import.py:317 netbox/ipam/forms/model_forms.py:290 +#: netbox/ipam/forms/model_forms.py:299 netbox/ipam/tables/fhrp.py:64 +#: netbox/ipam/tables/ip.py:324 netbox/ipam/tables/vlans.py:145 +#: netbox/templates/circuits/inc/circuit_termination_fields.html:52 +#: netbox/templates/circuits/virtualcircuittermination.html:53 +#: netbox/templates/circuits/virtualcircuittermination.html:60 +#: netbox/templates/dcim/frontport.html:106 +#: netbox/templates/dcim/interface.html:27 +#: netbox/templates/dcim/interface.html:241 +#: netbox/templates/dcim/interface.html:367 +#: netbox/templates/dcim/rearport.html:102 +#: netbox/templates/virtualization/vminterface.html:18 +#: netbox/templates/vpn/tunneltermination.html:31 +#: netbox/templates/wireless/inc/wirelesslink_interface.html:10 +#: netbox/templates/wireless/wirelesslink.html:10 +#: netbox/templates/wireless/wirelesslink.html:55 +#: netbox/virtualization/forms/model_forms.py:377 +#: netbox/vpn/forms/bulk_import.py:297 netbox/vpn/forms/model_forms.py:439 +#: netbox/vpn/forms/model_forms.py:448 +#: netbox/wireless/forms/model_forms.py:116 +#: netbox/wireless/forms/model_forms.py:158 +msgid "Interface" +msgstr "Interface" + +#: netbox/circuits/forms/filtersets.py:38 +#: netbox/circuits/forms/filtersets.py:129 +#: netbox/circuits/forms/filtersets.py:187 +#: netbox/circuits/forms/filtersets.py:245 +#: netbox/circuits/tables/circuits.py:144 netbox/dcim/forms/bulk_edit.py:342 +#: netbox/dcim/forms/bulk_edit.py:450 netbox/dcim/forms/bulk_edit.py:691 +#: netbox/dcim/forms/bulk_edit.py:746 netbox/dcim/forms/bulk_edit.py:900 +#: netbox/dcim/forms/bulk_import.py:237 netbox/dcim/forms/bulk_import.py:339 +#: netbox/dcim/forms/bulk_import.py:573 netbox/dcim/forms/bulk_import.py:1436 +#: netbox/dcim/forms/bulk_import.py:1470 netbox/dcim/forms/filtersets.py:96 +#: netbox/dcim/forms/filtersets.py:323 netbox/dcim/forms/filtersets.py:357 +#: netbox/dcim/forms/filtersets.py:397 netbox/dcim/forms/filtersets.py:448 +#: netbox/dcim/forms/filtersets.py:720 netbox/dcim/forms/filtersets.py:763 +#: netbox/dcim/forms/filtersets.py:978 netbox/dcim/forms/filtersets.py:1007 +#: netbox/dcim/forms/filtersets.py:1027 netbox/dcim/forms/filtersets.py:1091 +#: netbox/dcim/forms/filtersets.py:1121 netbox/dcim/forms/filtersets.py:1130 +#: netbox/dcim/forms/filtersets.py:1241 netbox/dcim/forms/filtersets.py:1265 +#: netbox/dcim/forms/filtersets.py:1290 netbox/dcim/forms/filtersets.py:1309 +#: netbox/dcim/forms/filtersets.py:1336 netbox/dcim/forms/filtersets.py:1447 +#: netbox/dcim/forms/filtersets.py:1471 netbox/dcim/forms/filtersets.py:1495 +#: netbox/dcim/forms/filtersets.py:1513 netbox/dcim/forms/filtersets.py:1530 +#: netbox/dcim/forms/model_forms.py:184 netbox/dcim/forms/model_forms.py:248 +#: netbox/dcim/forms/model_forms.py:478 netbox/dcim/forms/model_forms.py:739 +#: netbox/dcim/tables/devices.py:168 netbox/dcim/tables/power.py:30 +#: netbox/dcim/tables/racks.py:117 netbox/dcim/tables/racks.py:211 +#: netbox/extras/filtersets.py:536 netbox/extras/forms/filtersets.py:327 +#: netbox/ipam/forms/filtersets.py:234 netbox/ipam/forms/filtersets.py:417 +#: netbox/ipam/forms/filtersets.py:440 netbox/ipam/forms/filtersets.py:507 #: netbox/templates/dcim/device.html:26 #: netbox/templates/dcim/device_edit.html:30 #: netbox/templates/dcim/inc/cable_termination.html:12 #: netbox/templates/dcim/location.html:26 #: netbox/templates/dcim/powerpanel.html:26 netbox/templates/dcim/rack.html:24 #: netbox/templates/dcim/rackreservation.html:32 -#: netbox/virtualization/forms/filtersets.py:46 -#: netbox/virtualization/forms/filtersets.py:100 -#: netbox/wireless/forms/model_forms.py:87 -#: netbox/wireless/forms/model_forms.py:129 +#: netbox/virtualization/forms/filtersets.py:79 +#: netbox/virtualization/forms/filtersets.py:105 +#: netbox/wireless/forms/filtersets.py:93 +#: netbox/wireless/forms/model_forms.py:90 +#: netbox/wireless/forms/model_forms.py:132 msgid "Location" msgstr "Locatie" -#: netbox/circuits/forms/filtersets.py:32 -#: netbox/circuits/forms/filtersets.py:120 netbox/dcim/forms/filtersets.py:144 -#: netbox/dcim/forms/filtersets.py:158 netbox/dcim/forms/filtersets.py:174 -#: netbox/dcim/forms/filtersets.py:206 netbox/dcim/forms/filtersets.py:328 -#: netbox/dcim/forms/filtersets.py:400 netbox/dcim/forms/filtersets.py:471 -#: netbox/dcim/forms/filtersets.py:723 netbox/dcim/forms/filtersets.py:1091 +#: netbox/circuits/forms/filtersets.py:40 +#: netbox/circuits/forms/filtersets.py:131 netbox/dcim/forms/filtersets.py:145 +#: netbox/dcim/forms/filtersets.py:159 netbox/dcim/forms/filtersets.py:175 +#: netbox/dcim/forms/filtersets.py:207 netbox/dcim/forms/filtersets.py:329 +#: netbox/dcim/forms/filtersets.py:401 netbox/dcim/forms/filtersets.py:472 +#: netbox/dcim/forms/filtersets.py:724 netbox/dcim/forms/filtersets.py:1092 #: netbox/netbox/navigation/menu.py:31 netbox/netbox/navigation/menu.py:33 -#: netbox/tenancy/forms/filtersets.py:42 netbox/tenancy/tables/columns.py:70 +#: netbox/tenancy/forms/filtersets.py:42 netbox/tenancy/tables/columns.py:55 #: netbox/tenancy/tables/contacts.py:25 netbox/tenancy/views.py:19 #: netbox/virtualization/forms/filtersets.py:37 #: netbox/virtualization/forms/filtersets.py:48 -#: netbox/virtualization/forms/filtersets.py:106 +#: netbox/virtualization/forms/filtersets.py:111 msgid "Contacts" msgstr "Contacten" -#: netbox/circuits/forms/filtersets.py:37 -#: netbox/circuits/forms/filtersets.py:157 netbox/dcim/forms/bulk_edit.py:113 -#: netbox/dcim/forms/bulk_edit.py:314 netbox/dcim/forms/bulk_edit.py:872 -#: netbox/dcim/forms/bulk_import.py:93 netbox/dcim/forms/filtersets.py:73 -#: netbox/dcim/forms/filtersets.py:185 netbox/dcim/forms/filtersets.py:211 -#: netbox/dcim/forms/filtersets.py:334 netbox/dcim/forms/filtersets.py:425 -#: netbox/dcim/forms/filtersets.py:739 netbox/dcim/forms/filtersets.py:983 -#: netbox/dcim/forms/filtersets.py:1013 netbox/dcim/forms/filtersets.py:1097 -#: netbox/dcim/forms/filtersets.py:1136 netbox/dcim/forms/filtersets.py:1576 -#: netbox/dcim/forms/filtersets.py:1600 netbox/dcim/forms/filtersets.py:1624 -#: netbox/dcim/forms/model_forms.py:112 netbox/dcim/forms/object_create.py:367 -#: netbox/dcim/tables/devices.py:143 netbox/dcim/tables/sites.py:85 -#: netbox/extras/filtersets.py:503 netbox/ipam/forms/bulk_edit.py:208 -#: netbox/ipam/forms/bulk_edit.py:474 netbox/ipam/forms/filtersets.py:217 -#: netbox/ipam/forms/filtersets.py:422 netbox/ipam/forms/filtersets.py:475 -#: netbox/templates/dcim/device.html:18 netbox/templates/dcim/rack.html:16 +#: netbox/circuits/forms/filtersets.py:45 +#: netbox/circuits/forms/filtersets.py:168 +#: netbox/circuits/forms/filtersets.py:230 +#: netbox/circuits/tables/circuits.py:139 netbox/dcim/forms/bulk_edit.py:116 +#: netbox/dcim/forms/bulk_edit.py:317 netbox/dcim/forms/bulk_edit.py:875 +#: netbox/dcim/forms/bulk_import.py:95 netbox/dcim/forms/filtersets.py:74 +#: netbox/dcim/forms/filtersets.py:186 netbox/dcim/forms/filtersets.py:212 +#: netbox/dcim/forms/filtersets.py:335 netbox/dcim/forms/filtersets.py:426 +#: netbox/dcim/forms/filtersets.py:740 netbox/dcim/forms/filtersets.py:984 +#: netbox/dcim/forms/filtersets.py:1014 netbox/dcim/forms/filtersets.py:1098 +#: netbox/dcim/forms/filtersets.py:1137 netbox/dcim/forms/filtersets.py:1614 +#: netbox/dcim/forms/filtersets.py:1638 netbox/dcim/forms/filtersets.py:1662 +#: netbox/dcim/forms/model_forms.py:114 netbox/dcim/forms/object_create.py:367 +#: netbox/dcim/tables/devices.py:154 netbox/dcim/tables/sites.py:85 +#: netbox/extras/filtersets.py:503 netbox/ipam/forms/bulk_edit.py:458 +#: netbox/ipam/forms/filtersets.py:219 netbox/ipam/forms/filtersets.py:425 +#: netbox/ipam/forms/filtersets.py:516 netbox/templates/dcim/device.html:18 +#: netbox/templates/dcim/rack.html:16 #: netbox/templates/dcim/rackreservation.html:22 #: netbox/templates/dcim/region.html:26 netbox/templates/dcim/site.html:31 -#: netbox/templates/ipam/prefix.html:49 netbox/templates/ipam/vlan.html:16 -#: netbox/virtualization/forms/bulk_edit.py:81 +#: netbox/templates/ipam/vlan.html:16 #: netbox/virtualization/forms/filtersets.py:59 -#: netbox/virtualization/forms/filtersets.py:133 +#: netbox/virtualization/forms/filtersets.py:138 #: netbox/virtualization/forms/model_forms.py:92 -#: netbox/vpn/forms/filtersets.py:257 +#: netbox/vpn/forms/filtersets.py:257 netbox/wireless/forms/filtersets.py:73 msgid "Region" msgstr "Regio" -#: netbox/circuits/forms/filtersets.py:42 -#: netbox/circuits/forms/filtersets.py:162 netbox/dcim/forms/bulk_edit.py:322 -#: netbox/dcim/forms/bulk_edit.py:880 netbox/dcim/forms/filtersets.py:78 -#: netbox/dcim/forms/filtersets.py:190 netbox/dcim/forms/filtersets.py:216 -#: netbox/dcim/forms/filtersets.py:347 netbox/dcim/forms/filtersets.py:430 -#: netbox/dcim/forms/filtersets.py:744 netbox/dcim/forms/filtersets.py:988 -#: netbox/dcim/forms/filtersets.py:1102 netbox/dcim/forms/filtersets.py:1141 +#: netbox/circuits/forms/filtersets.py:50 +#: netbox/circuits/forms/filtersets.py:173 +#: netbox/circuits/forms/filtersets.py:235 netbox/dcim/forms/bulk_edit.py:325 +#: netbox/dcim/forms/bulk_edit.py:883 netbox/dcim/forms/filtersets.py:79 +#: netbox/dcim/forms/filtersets.py:191 netbox/dcim/forms/filtersets.py:217 +#: netbox/dcim/forms/filtersets.py:348 netbox/dcim/forms/filtersets.py:431 +#: netbox/dcim/forms/filtersets.py:745 netbox/dcim/forms/filtersets.py:989 +#: netbox/dcim/forms/filtersets.py:1103 netbox/dcim/forms/filtersets.py:1142 #: netbox/dcim/forms/object_create.py:375 netbox/extras/filtersets.py:520 -#: netbox/ipam/forms/bulk_edit.py:213 netbox/ipam/forms/bulk_edit.py:479 -#: netbox/ipam/forms/filtersets.py:222 netbox/ipam/forms/filtersets.py:427 -#: netbox/ipam/forms/filtersets.py:480 -#: netbox/virtualization/forms/bulk_edit.py:86 -#: netbox/virtualization/forms/filtersets.py:69 -#: netbox/virtualization/forms/filtersets.py:138 +#: netbox/ipam/forms/bulk_edit.py:463 netbox/ipam/forms/filtersets.py:224 +#: netbox/ipam/forms/filtersets.py:430 netbox/ipam/forms/filtersets.py:521 +#: netbox/virtualization/forms/filtersets.py:64 +#: netbox/virtualization/forms/filtersets.py:143 #: netbox/virtualization/forms/model_forms.py:98 +#: netbox/wireless/forms/filtersets.py:78 msgid "Site group" msgstr "Sitegroep" -#: netbox/circuits/forms/filtersets.py:65 -#: netbox/circuits/forms/filtersets.py:83 -#: netbox/circuits/forms/filtersets.py:102 -#: netbox/circuits/forms/filtersets.py:117 netbox/core/forms/filtersets.py:67 -#: netbox/core/forms/filtersets.py:135 netbox/dcim/forms/bulk_edit.py:843 -#: netbox/dcim/forms/filtersets.py:172 netbox/dcim/forms/filtersets.py:204 -#: netbox/dcim/forms/filtersets.py:915 netbox/dcim/forms/filtersets.py:1007 -#: netbox/dcim/forms/filtersets.py:1131 netbox/dcim/forms/filtersets.py:1239 -#: netbox/dcim/forms/filtersets.py:1263 netbox/dcim/forms/filtersets.py:1288 -#: netbox/dcim/forms/filtersets.py:1307 netbox/dcim/forms/filtersets.py:1327 -#: netbox/dcim/forms/filtersets.py:1441 netbox/dcim/forms/filtersets.py:1465 -#: netbox/dcim/forms/filtersets.py:1489 netbox/dcim/forms/filtersets.py:1507 -#: netbox/dcim/forms/filtersets.py:1523 netbox/extras/forms/bulk_edit.py:90 -#: netbox/extras/forms/filtersets.py:44 netbox/extras/forms/filtersets.py:134 -#: netbox/extras/forms/filtersets.py:165 netbox/extras/forms/filtersets.py:205 -#: netbox/extras/forms/filtersets.py:221 netbox/extras/forms/filtersets.py:252 -#: netbox/extras/forms/filtersets.py:276 netbox/extras/forms/filtersets.py:441 -#: netbox/ipam/forms/filtersets.py:99 netbox/ipam/forms/filtersets.py:266 -#: netbox/ipam/forms/filtersets.py:307 netbox/ipam/forms/filtersets.py:382 -#: netbox/ipam/forms/filtersets.py:468 netbox/ipam/forms/filtersets.py:527 -#: netbox/ipam/forms/filtersets.py:545 netbox/netbox/tables/tables.py:256 -#: netbox/virtualization/forms/filtersets.py:45 -#: netbox/virtualization/forms/filtersets.py:103 -#: netbox/virtualization/forms/filtersets.py:198 -#: netbox/virtualization/forms/filtersets.py:243 -#: netbox/vpn/forms/filtersets.py:213 netbox/wireless/forms/bulk_edit.py:150 -#: netbox/wireless/forms/filtersets.py:34 -#: netbox/wireless/forms/filtersets.py:74 -msgid "Attributes" -msgstr "Attributen" - -#: netbox/circuits/forms/filtersets.py:73 -#: netbox/circuits/tables/circuits.py:63 -#: netbox/circuits/tables/providers.py:66 +#: netbox/circuits/forms/filtersets.py:81 +#: netbox/circuits/tables/circuits.py:62 +#: netbox/circuits/tables/providers.py:64 +#: netbox/circuits/tables/virtual_circuits.py:55 +#: netbox/circuits/tables/virtual_circuits.py:103 #: netbox/templates/circuits/circuit.html:22 #: netbox/templates/circuits/provideraccount.html:24 msgid "Account" msgstr "Account" -#: netbox/circuits/forms/filtersets.py:217 +#: netbox/circuits/forms/filtersets.py:253 msgid "Term Side" msgstr "Termzijde" -#: netbox/circuits/forms/filtersets.py:250 netbox/dcim/forms/bulk_edit.py:1557 -#: netbox/extras/forms/model_forms.py:582 netbox/ipam/forms/filtersets.py:142 -#: netbox/ipam/forms/filtersets.py:546 netbox/ipam/forms/model_forms.py:327 +#: netbox/circuits/forms/filtersets.py:286 netbox/dcim/forms/bulk_edit.py:1572 +#: netbox/extras/forms/model_forms.py:596 netbox/ipam/forms/filtersets.py:144 +#: netbox/ipam/forms/filtersets.py:598 netbox/ipam/forms/model_forms.py:337 +#: netbox/templates/dcim/macaddress.html:25 #: netbox/templates/extras/configcontext.html:60 #: netbox/templates/ipam/ipaddress.html:59 -#: netbox/templates/ipam/vlan_edit.html:30 +#: netbox/templates/ipam/vlan_edit.html:38 #: netbox/tenancy/forms/filtersets.py:87 netbox/users/forms/model_forms.py:314 msgid "Assignment" msgstr "Opdracht" -#: netbox/circuits/forms/filtersets.py:265 -#: netbox/circuits/forms/model_forms.py:195 -#: netbox/circuits/tables/circuits.py:155 netbox/dcim/forms/bulk_edit.py:118 -#: netbox/dcim/forms/bulk_import.py:100 netbox/dcim/forms/model_forms.py:117 -#: netbox/dcim/tables/sites.py:89 netbox/extras/forms/filtersets.py:480 -#: netbox/ipam/filtersets.py:1001 netbox/ipam/forms/bulk_edit.py:493 -#: netbox/ipam/forms/bulk_import.py:460 netbox/ipam/forms/model_forms.py:561 -#: netbox/ipam/tables/fhrp.py:67 netbox/ipam/tables/vlans.py:122 -#: netbox/ipam/tables/vlans.py:226 +#: netbox/circuits/forms/filtersets.py:301 +#: netbox/circuits/forms/model_forms.py:252 +#: netbox/circuits/tables/circuits.py:191 netbox/dcim/forms/bulk_edit.py:121 +#: netbox/dcim/forms/bulk_import.py:102 netbox/dcim/forms/model_forms.py:120 +#: netbox/dcim/tables/sites.py:89 netbox/extras/forms/filtersets.py:489 +#: netbox/ipam/filtersets.py:968 netbox/ipam/forms/bulk_edit.py:477 +#: netbox/ipam/forms/bulk_import.py:459 netbox/ipam/forms/model_forms.py:571 +#: netbox/ipam/tables/fhrp.py:67 netbox/ipam/tables/vlans.py:91 +#: netbox/ipam/tables/vlans.py:202 #: netbox/templates/circuits/circuitgroupassignment.html:22 -#: netbox/templates/dcim/interface.html:284 netbox/templates/dcim/site.html:37 +#: netbox/templates/dcim/interface.html:341 netbox/templates/dcim/site.html:37 #: netbox/templates/ipam/inc/panels/fhrp_groups.html:23 #: netbox/templates/ipam/vlan.html:27 netbox/templates/tenancy/contact.html:21 #: netbox/templates/tenancy/tenant.html:20 netbox/templates/users/group.html:6 @@ -1131,226 +1396,242 @@ msgstr "Opdracht" #: netbox/tenancy/tables/tenants.py:42 netbox/users/filtersets.py:62 #: netbox/users/filtersets.py:185 netbox/users/forms/filtersets.py:31 #: netbox/users/forms/filtersets.py:37 netbox/users/forms/filtersets.py:79 -#: netbox/virtualization/forms/bulk_edit.py:65 -#: netbox/virtualization/forms/bulk_import.py:47 -#: netbox/virtualization/forms/filtersets.py:85 -#: netbox/virtualization/forms/model_forms.py:66 +#: netbox/virtualization/forms/bulk_edit.py:66 +#: netbox/virtualization/forms/bulk_import.py:48 +#: netbox/virtualization/forms/filtersets.py:90 +#: netbox/virtualization/forms/model_forms.py:70 #: netbox/virtualization/tables/clusters.py:70 #: netbox/vpn/forms/bulk_edit.py:112 netbox/vpn/forms/bulk_import.py:158 #: netbox/vpn/forms/filtersets.py:116 netbox/vpn/tables/crypto.py:31 -#: netbox/vpn/tables/tunnels.py:44 netbox/wireless/forms/bulk_edit.py:48 -#: netbox/wireless/forms/bulk_import.py:36 -#: netbox/wireless/forms/filtersets.py:46 -#: netbox/wireless/forms/model_forms.py:40 +#: netbox/vpn/tables/tunnels.py:44 netbox/wireless/forms/bulk_edit.py:50 +#: netbox/wireless/forms/bulk_import.py:38 +#: netbox/wireless/forms/filtersets.py:49 +#: netbox/wireless/forms/model_forms.py:41 #: netbox/wireless/tables/wirelesslan.py:48 msgid "Group" msgstr "groep" -#: netbox/circuits/forms/model_forms.py:182 +#: netbox/circuits/forms/model_forms.py:239 #: netbox/templates/circuits/circuitgroup.html:25 msgid "Circuit Group" msgstr "Circuitgroep" -#: netbox/circuits/models/circuits.py:27 netbox/dcim/models/cables.py:67 -#: netbox/dcim/models/device_component_templates.py:517 -#: netbox/dcim/models/device_component_templates.py:617 -#: netbox/dcim/models/device_components.py:975 -#: netbox/dcim/models/device_components.py:1049 -#: netbox/dcim/models/device_components.py:1204 -#: netbox/dcim/models/devices.py:479 netbox/dcim/models/racks.py:224 +#: netbox/circuits/forms/model_forms.py:259 +msgid "Circuit type" +msgstr "Circuittype" + +#: netbox/circuits/forms/model_forms.py:270 +msgid "Group Assignment" +msgstr "Groepsopdracht" + +#: netbox/circuits/models/base.py:18 netbox/dcim/models/cables.py:69 +#: netbox/dcim/models/device_component_templates.py:531 +#: netbox/dcim/models/device_component_templates.py:631 +#: netbox/dcim/models/device_components.py:476 +#: netbox/dcim/models/device_components.py:1026 +#: netbox/dcim/models/device_components.py:1097 +#: netbox/dcim/models/device_components.py:1243 +#: netbox/dcim/models/devices.py:478 netbox/dcim/models/racks.py:221 #: netbox/extras/models/tags.py:28 msgid "color" msgstr "kleur" -#: netbox/circuits/models/circuits.py:36 +#: netbox/circuits/models/circuits.py:34 msgid "circuit type" msgstr "soort circuit" -#: netbox/circuits/models/circuits.py:37 +#: netbox/circuits/models/circuits.py:35 msgid "circuit types" msgstr "soorten circuits" -#: netbox/circuits/models/circuits.py:48 +#: netbox/circuits/models/circuits.py:46 +#: netbox/circuits/models/virtual_circuits.py:38 msgid "circuit ID" msgstr "circuit-ID" -#: netbox/circuits/models/circuits.py:49 +#: netbox/circuits/models/circuits.py:47 +#: netbox/circuits/models/virtual_circuits.py:39 msgid "Unique circuit ID" msgstr "Uniek circuit-ID" -#: netbox/circuits/models/circuits.py:69 netbox/core/models/data.py:52 -#: netbox/core/models/jobs.py:85 netbox/dcim/models/cables.py:49 -#: netbox/dcim/models/devices.py:653 netbox/dcim/models/devices.py:1173 -#: netbox/dcim/models/devices.py:1404 netbox/dcim/models/power.py:96 -#: netbox/dcim/models/racks.py:297 netbox/dcim/models/sites.py:154 -#: netbox/dcim/models/sites.py:266 netbox/ipam/models/ip.py:253 -#: netbox/ipam/models/ip.py:522 netbox/ipam/models/ip.py:730 -#: netbox/ipam/models/vlans.py:211 netbox/virtualization/models/clusters.py:74 -#: netbox/virtualization/models/virtualmachines.py:84 -#: netbox/vpn/models/tunnels.py:40 netbox/wireless/models.py:95 -#: netbox/wireless/models.py:159 +#: netbox/circuits/models/circuits.py:67 +#: netbox/circuits/models/virtual_circuits.py:59 netbox/core/models/data.py:52 +#: netbox/core/models/jobs.py:85 netbox/dcim/models/cables.py:51 +#: netbox/dcim/models/device_components.py:1283 +#: netbox/dcim/models/devices.py:645 netbox/dcim/models/devices.py:1181 +#: netbox/dcim/models/devices.py:1409 netbox/dcim/models/power.py:94 +#: netbox/dcim/models/racks.py:288 netbox/dcim/models/sites.py:154 +#: netbox/dcim/models/sites.py:270 netbox/ipam/models/ip.py:237 +#: netbox/ipam/models/ip.py:508 netbox/ipam/models/ip.py:729 +#: netbox/ipam/models/vlans.py:210 netbox/virtualization/models/clusters.py:70 +#: netbox/virtualization/models/virtualmachines.py:79 +#: netbox/vpn/models/tunnels.py:38 netbox/wireless/models.py:95 +#: netbox/wireless/models.py:156 msgid "status" msgstr "-status" -#: netbox/circuits/models/circuits.py:84 netbox/templates/core/plugin.html:20 +#: netbox/circuits/models/circuits.py:82 netbox/templates/core/plugin.html:20 msgid "installed" msgstr "geïnstalleerd" -#: netbox/circuits/models/circuits.py:89 +#: netbox/circuits/models/circuits.py:87 msgid "terminates" msgstr "beëindigt" -#: netbox/circuits/models/circuits.py:94 +#: netbox/circuits/models/circuits.py:92 msgid "commit rate (Kbps)" msgstr "Toewijzingssnelheid (Kbps)" -#: netbox/circuits/models/circuits.py:95 +#: netbox/circuits/models/circuits.py:93 msgid "Committed rate" msgstr "Toegewijde rente" -#: netbox/circuits/models/circuits.py:137 +#: netbox/circuits/models/circuits.py:142 msgid "circuit" msgstr "circuit" -#: netbox/circuits/models/circuits.py:138 +#: netbox/circuits/models/circuits.py:143 msgid "circuits" msgstr "circuits" -#: netbox/circuits/models/circuits.py:170 +#: netbox/circuits/models/circuits.py:172 msgid "circuit group" msgstr "circuitgroep" -#: netbox/circuits/models/circuits.py:171 +#: netbox/circuits/models/circuits.py:173 msgid "circuit groups" msgstr "circuitgroepen" -#: netbox/circuits/models/circuits.py:195 netbox/ipam/models/fhrp.py:93 -#: netbox/tenancy/models/contacts.py:134 +#: netbox/circuits/models/circuits.py:190 +msgid "member ID" +msgstr "ID van het lid" + +#: netbox/circuits/models/circuits.py:202 netbox/ipam/models/fhrp.py:90 +#: netbox/tenancy/models/contacts.py:126 msgid "priority" msgstr "prioriteit" -#: netbox/circuits/models/circuits.py:213 +#: netbox/circuits/models/circuits.py:220 msgid "Circuit group assignment" msgstr "Circuitgroepopdracht" -#: netbox/circuits/models/circuits.py:214 +#: netbox/circuits/models/circuits.py:221 msgid "Circuit group assignments" msgstr "Circuitgroeptoewijzingen" -#: netbox/circuits/models/circuits.py:240 -msgid "termination" -msgstr "" +#: netbox/circuits/models/circuits.py:247 +msgid "termination side" +msgstr "eindzijde" -#: netbox/circuits/models/circuits.py:257 +#: netbox/circuits/models/circuits.py:266 msgid "port speed (Kbps)" msgstr "poortsnelheid (Kbps)" -#: netbox/circuits/models/circuits.py:260 +#: netbox/circuits/models/circuits.py:269 msgid "Physical circuit speed" msgstr "Fysieke circuitsnelheid" -#: netbox/circuits/models/circuits.py:265 +#: netbox/circuits/models/circuits.py:274 msgid "upstream speed (Kbps)" msgstr "upstream snelheid (Kbps)" -#: netbox/circuits/models/circuits.py:266 +#: netbox/circuits/models/circuits.py:275 msgid "Upstream speed, if different from port speed" msgstr "Upstream snelheid, indien verschillend van de poortsnelheid" -#: netbox/circuits/models/circuits.py:271 +#: netbox/circuits/models/circuits.py:280 msgid "cross-connect ID" msgstr "ID voor kruisverbinding" -#: netbox/circuits/models/circuits.py:272 +#: netbox/circuits/models/circuits.py:281 msgid "ID of the local cross-connect" msgstr "ID van de lokale kruisverbinding" -#: netbox/circuits/models/circuits.py:277 +#: netbox/circuits/models/circuits.py:286 msgid "patch panel/port(s)" msgstr "patchpaneel/poort (en)" -#: netbox/circuits/models/circuits.py:278 +#: netbox/circuits/models/circuits.py:287 msgid "Patch panel ID and port number(s)" msgstr "ID en poortnummer(s) van het patchpaneel" -#: netbox/circuits/models/circuits.py:281 -#: netbox/dcim/models/device_component_templates.py:61 -#: netbox/dcim/models/device_components.py:68 netbox/dcim/models/racks.py:685 +#: netbox/circuits/models/circuits.py:290 +#: netbox/circuits/models/virtual_circuits.py:144 +#: netbox/dcim/models/device_component_templates.py:57 +#: netbox/dcim/models/device_components.py:63 netbox/dcim/models/racks.py:681 #: netbox/extras/models/configs.py:45 netbox/extras/models/configs.py:219 #: netbox/extras/models/customfields.py:125 netbox/extras/models/models.py:61 #: netbox/extras/models/models.py:158 netbox/extras/models/models.py:396 #: netbox/extras/models/models.py:511 #: netbox/extras/models/notifications.py:131 -#: netbox/extras/models/staging.py:31 netbox/extras/models/tags.py:32 -#: netbox/netbox/models/__init__.py:110 netbox/netbox/models/__init__.py:145 -#: netbox/netbox/models/__init__.py:191 netbox/users/models/permissions.py:24 -#: netbox/users/models/tokens.py:57 netbox/users/models/users.py:33 -#: netbox/virtualization/models/virtualmachines.py:289 +#: netbox/extras/models/staging.py:32 netbox/extras/models/tags.py:32 +#: netbox/ipam/models/vlans.py:358 netbox/netbox/models/__init__.py:115 +#: netbox/netbox/models/__init__.py:150 netbox/netbox/models/__init__.py:196 +#: netbox/users/models/permissions.py:24 netbox/users/models/tokens.py:57 +#: netbox/users/models/users.py:33 +#: netbox/virtualization/models/virtualmachines.py:276 msgid "description" msgstr "omschrijving" -#: netbox/circuits/models/circuits.py:294 +#: netbox/circuits/models/circuits.py:340 msgid "circuit termination" msgstr "beëindiging van het circuit" -#: netbox/circuits/models/circuits.py:295 +#: netbox/circuits/models/circuits.py:341 msgid "circuit terminations" msgstr "circuitafsluitingen" -#: netbox/circuits/models/circuits.py:308 -msgid "" -"A circuit termination must attach to either a site or a provider network." +#: netbox/circuits/models/circuits.py:353 +msgid "A circuit termination must attach to a terminating object." msgstr "" +"Een circuitafsluiting moet worden aangesloten op een afsluitend object." -#: netbox/circuits/models/circuits.py:310 -msgid "" -"A circuit termination cannot attach to both a site and a provider network." -msgstr "" - -#: netbox/circuits/models/providers.py:22 -#: netbox/circuits/models/providers.py:66 -#: netbox/circuits/models/providers.py:104 netbox/core/models/data.py:39 +#: netbox/circuits/models/providers.py:21 +#: netbox/circuits/models/providers.py:63 +#: netbox/circuits/models/providers.py:98 netbox/core/models/data.py:39 #: netbox/core/models/jobs.py:46 #: netbox/dcim/models/device_component_templates.py:43 -#: netbox/dcim/models/device_components.py:53 -#: netbox/dcim/models/devices.py:593 netbox/dcim/models/devices.py:1335 -#: netbox/dcim/models/devices.py:1400 netbox/dcim/models/power.py:39 -#: netbox/dcim/models/power.py:92 netbox/dcim/models/racks.py:262 -#: netbox/dcim/models/sites.py:138 netbox/extras/models/configs.py:36 +#: netbox/dcim/models/device_components.py:52 +#: netbox/dcim/models/devices.py:589 netbox/dcim/models/devices.py:1341 +#: netbox/dcim/models/devices.py:1404 netbox/dcim/models/power.py:38 +#: netbox/dcim/models/power.py:89 netbox/dcim/models/racks.py:257 +#: netbox/dcim/models/sites.py:142 netbox/extras/models/configs.py:36 #: netbox/extras/models/configs.py:215 netbox/extras/models/customfields.py:92 #: netbox/extras/models/models.py:56 netbox/extras/models/models.py:153 #: netbox/extras/models/models.py:296 netbox/extras/models/models.py:392 #: netbox/extras/models/models.py:501 netbox/extras/models/models.py:596 #: netbox/extras/models/notifications.py:126 -#: netbox/extras/models/scripts.py:30 netbox/extras/models/staging.py:26 -#: netbox/ipam/models/asns.py:18 netbox/ipam/models/fhrp.py:25 -#: netbox/ipam/models/services.py:52 netbox/ipam/models/services.py:88 -#: netbox/ipam/models/vlans.py:36 netbox/ipam/models/vlans.py:200 -#: netbox/ipam/models/vrfs.py:22 netbox/ipam/models/vrfs.py:79 -#: netbox/netbox/models/__init__.py:137 netbox/netbox/models/__init__.py:181 -#: netbox/tenancy/models/contacts.py:64 netbox/tenancy/models/tenants.py:20 -#: netbox/tenancy/models/tenants.py:45 netbox/users/models/permissions.py:20 -#: netbox/users/models/users.py:28 netbox/virtualization/models/clusters.py:57 -#: netbox/virtualization/models/virtualmachines.py:72 -#: netbox/virtualization/models/virtualmachines.py:279 -#: netbox/vpn/models/crypto.py:24 netbox/vpn/models/crypto.py:71 -#: netbox/vpn/models/crypto.py:131 netbox/vpn/models/crypto.py:183 -#: netbox/vpn/models/crypto.py:221 netbox/vpn/models/l2vpn.py:22 -#: netbox/vpn/models/tunnels.py:35 netbox/wireless/models.py:51 +#: netbox/extras/models/scripts.py:30 netbox/extras/models/staging.py:27 +#: netbox/ipam/models/asns.py:17 netbox/ipam/models/fhrp.py:24 +#: netbox/ipam/models/services.py:51 netbox/ipam/models/services.py:84 +#: netbox/ipam/models/vlans.py:37 netbox/ipam/models/vlans.py:199 +#: netbox/ipam/models/vlans.py:337 netbox/ipam/models/vrfs.py:20 +#: netbox/ipam/models/vrfs.py:75 netbox/netbox/models/__init__.py:142 +#: netbox/netbox/models/__init__.py:186 netbox/tenancy/models/contacts.py:58 +#: netbox/tenancy/models/tenants.py:19 netbox/tenancy/models/tenants.py:42 +#: netbox/users/models/permissions.py:20 netbox/users/models/users.py:28 +#: netbox/virtualization/models/clusters.py:52 +#: netbox/virtualization/models/virtualmachines.py:71 +#: netbox/virtualization/models/virtualmachines.py:271 +#: netbox/virtualization/models/virtualmachines.py:305 +#: netbox/vpn/models/crypto.py:23 netbox/vpn/models/crypto.py:69 +#: netbox/vpn/models/crypto.py:128 netbox/vpn/models/crypto.py:180 +#: netbox/vpn/models/crypto.py:216 netbox/vpn/models/l2vpn.py:21 +#: netbox/vpn/models/tunnels.py:32 netbox/wireless/models.py:53 msgid "name" msgstr "naam" -#: netbox/circuits/models/providers.py:25 +#: netbox/circuits/models/providers.py:24 msgid "Full name of the provider" msgstr "Volledige naam van de provider" -#: netbox/circuits/models/providers.py:28 netbox/dcim/models/devices.py:86 +#: netbox/circuits/models/providers.py:28 netbox/dcim/models/devices.py:88 #: netbox/dcim/models/racks.py:137 netbox/dcim/models/sites.py:149 #: netbox/extras/models/models.py:506 netbox/ipam/models/asns.py:23 -#: netbox/ipam/models/vlans.py:40 netbox/netbox/models/__init__.py:141 -#: netbox/netbox/models/__init__.py:186 netbox/tenancy/models/tenants.py:25 -#: netbox/tenancy/models/tenants.py:49 netbox/vpn/models/l2vpn.py:27 -#: netbox/wireless/models.py:56 +#: netbox/ipam/models/vlans.py:42 netbox/netbox/models/__init__.py:146 +#: netbox/netbox/models/__init__.py:191 netbox/tenancy/models/tenants.py:25 +#: netbox/tenancy/models/tenants.py:47 netbox/vpn/models/l2vpn.py:27 +#: netbox/wireless/models.py:59 msgid "slug" msgstr "slug" @@ -1362,67 +1643,100 @@ msgstr "provider" msgid "providers" msgstr "providers" -#: netbox/circuits/models/providers.py:63 +#: netbox/circuits/models/providers.py:60 msgid "account ID" msgstr "account-ID" -#: netbox/circuits/models/providers.py:86 +#: netbox/circuits/models/providers.py:83 msgid "provider account" msgstr "provideraccount" -#: netbox/circuits/models/providers.py:87 +#: netbox/circuits/models/providers.py:84 msgid "provider accounts" msgstr "provideraccounts" -#: netbox/circuits/models/providers.py:115 +#: netbox/circuits/models/providers.py:110 msgid "service ID" msgstr "service-ID" -#: netbox/circuits/models/providers.py:126 +#: netbox/circuits/models/providers.py:121 msgid "provider network" msgstr "netwerkprovider" -#: netbox/circuits/models/providers.py:127 +#: netbox/circuits/models/providers.py:122 msgid "provider networks" msgstr "providernetwerken" -#: netbox/circuits/tables/circuits.py:32 -#: netbox/circuits/tables/circuits.py:132 +#: netbox/circuits/models/virtual_circuits.py:28 +msgid "virtual circuit type" +msgstr "type virtueel circuit" + +#: netbox/circuits/models/virtual_circuits.py:29 +msgid "virtual circuit types" +msgstr "soorten virtuele circuits" + +#: netbox/circuits/models/virtual_circuits.py:99 +msgid "virtual circuit" +msgstr "virtueel circuit" + +#: netbox/circuits/models/virtual_circuits.py:100 +msgid "virtual circuits" +msgstr "virtuele circuits" + +#: netbox/circuits/models/virtual_circuits.py:133 netbox/ipam/models/ip.py:194 +#: netbox/ipam/models/ip.py:736 netbox/vpn/models/tunnels.py:109 +msgid "role" +msgstr "functie" + +#: netbox/circuits/models/virtual_circuits.py:151 +msgid "virtual circuit termination" +msgstr "beëindiging van het virtuele circuit" + +#: netbox/circuits/models/virtual_circuits.py:152 +msgid "virtual circuit terminations" +msgstr "beëindigingen van virtuele circuits" + +#: netbox/circuits/tables/circuits.py:30 +#: netbox/circuits/tables/circuits.py:168 #: netbox/circuits/tables/providers.py:18 -#: netbox/circuits/tables/providers.py:69 -#: netbox/circuits/tables/providers.py:99 netbox/core/tables/data.py:16 +#: netbox/circuits/tables/providers.py:67 +#: netbox/circuits/tables/providers.py:97 +#: netbox/circuits/tables/virtual_circuits.py:18 netbox/core/tables/data.py:16 #: netbox/core/tables/jobs.py:14 netbox/core/tables/plugins.py:44 #: netbox/core/tables/tasks.py:11 netbox/core/tables/tasks.py:115 -#: netbox/dcim/forms/filtersets.py:63 netbox/dcim/forms/object_create.py:43 -#: netbox/dcim/tables/devices.py:52 netbox/dcim/tables/devices.py:92 -#: netbox/dcim/tables/devices.py:134 netbox/dcim/tables/devices.py:289 -#: netbox/dcim/tables/devices.py:392 netbox/dcim/tables/devices.py:433 -#: netbox/dcim/tables/devices.py:482 netbox/dcim/tables/devices.py:531 -#: netbox/dcim/tables/devices.py:648 netbox/dcim/tables/devices.py:731 -#: netbox/dcim/tables/devices.py:778 netbox/dcim/tables/devices.py:841 -#: netbox/dcim/tables/devices.py:911 netbox/dcim/tables/devices.py:974 -#: netbox/dcim/tables/devices.py:994 netbox/dcim/tables/devices.py:1023 -#: netbox/dcim/tables/devices.py:1053 netbox/dcim/tables/devicetypes.py:31 +#: netbox/dcim/forms/filtersets.py:64 netbox/dcim/forms/object_create.py:43 +#: netbox/dcim/tables/devices.py:63 netbox/dcim/tables/devices.py:103 +#: netbox/dcim/tables/devices.py:145 netbox/dcim/tables/devices.py:300 +#: netbox/dcim/tables/devices.py:403 netbox/dcim/tables/devices.py:444 +#: netbox/dcim/tables/devices.py:492 netbox/dcim/tables/devices.py:541 +#: netbox/dcim/tables/devices.py:562 netbox/dcim/tables/devices.py:682 +#: netbox/dcim/tables/devices.py:765 netbox/dcim/tables/devices.py:811 +#: netbox/dcim/tables/devices.py:873 netbox/dcim/tables/devices.py:942 +#: netbox/dcim/tables/devices.py:1007 netbox/dcim/tables/devices.py:1026 +#: netbox/dcim/tables/devices.py:1055 netbox/dcim/tables/devices.py:1085 +#: netbox/dcim/tables/devicetypes.py:31 netbox/dcim/tables/devicetypes.py:227 #: netbox/dcim/tables/power.py:22 netbox/dcim/tables/power.py:62 #: netbox/dcim/tables/racks.py:24 netbox/dcim/tables/racks.py:113 #: netbox/dcim/tables/sites.py:24 netbox/dcim/tables/sites.py:51 -#: netbox/dcim/tables/sites.py:78 netbox/dcim/tables/sites.py:130 -#: netbox/extras/forms/filtersets.py:213 netbox/extras/tables/tables.py:58 +#: netbox/dcim/tables/sites.py:78 netbox/dcim/tables/sites.py:129 +#: netbox/extras/forms/filtersets.py:218 netbox/extras/tables/tables.py:58 #: netbox/extras/tables/tables.py:122 netbox/extras/tables/tables.py:155 #: netbox/extras/tables/tables.py:180 netbox/extras/tables/tables.py:246 #: netbox/extras/tables/tables.py:361 netbox/extras/tables/tables.py:378 #: netbox/extras/tables/tables.py:401 netbox/extras/tables/tables.py:439 #: netbox/extras/tables/tables.py:491 netbox/extras/tables/tables.py:514 -#: netbox/ipam/forms/bulk_edit.py:407 netbox/ipam/forms/filtersets.py:386 -#: netbox/ipam/tables/asn.py:16 netbox/ipam/tables/ip.py:85 -#: netbox/ipam/tables/ip.py:160 netbox/ipam/tables/services.py:15 -#: netbox/ipam/tables/services.py:40 netbox/ipam/tables/vlans.py:64 -#: netbox/ipam/tables/vlans.py:114 netbox/ipam/tables/vrfs.py:26 +#: netbox/ipam/forms/bulk_edit.py:391 netbox/ipam/forms/filtersets.py:389 +#: netbox/ipam/forms/filtersets.py:474 netbox/ipam/tables/asn.py:16 +#: netbox/ipam/tables/ip.py:31 netbox/ipam/tables/ip.py:106 +#: netbox/ipam/tables/services.py:15 netbox/ipam/tables/services.py:40 +#: netbox/ipam/tables/vlans.py:33 netbox/ipam/tables/vlans.py:83 +#: netbox/ipam/tables/vlans.py:231 netbox/ipam/tables/vrfs.py:26 #: netbox/ipam/tables/vrfs.py:68 #: netbox/templates/circuits/circuitgroup.html:28 #: netbox/templates/circuits/circuittype.html:22 #: netbox/templates/circuits/provideraccount.html:28 #: netbox/templates/circuits/providernetwork.html:24 +#: netbox/templates/circuits/virtualcircuittype.html:22 #: netbox/templates/core/datasource.html:34 netbox/templates/core/job.html:44 #: netbox/templates/core/plugin.html:54 #: netbox/templates/core/rq_worker.html:43 @@ -1434,7 +1748,7 @@ msgstr "providernetwerken" #: netbox/templates/dcim/inc/interface_vlans_table.html:5 #: netbox/templates/dcim/inc/panels/inventory_items.html:18 #: netbox/templates/dcim/interface.html:38 -#: netbox/templates/dcim/interface.html:165 +#: netbox/templates/dcim/interface.html:222 #: netbox/templates/dcim/inventoryitem.html:28 #: netbox/templates/dcim/inventoryitemrole.html:18 #: netbox/templates/dcim/location.html:29 @@ -1464,6 +1778,7 @@ msgstr "providernetwerken" #: netbox/templates/ipam/service.html:24 #: netbox/templates/ipam/servicetemplate.html:15 #: netbox/templates/ipam/vlan.html:35 netbox/templates/ipam/vlangroup.html:30 +#: netbox/templates/ipam/vlantranslationpolicy.html:14 #: netbox/templates/tenancy/contact.html:25 #: netbox/templates/tenancy/contactgroup.html:21 #: netbox/templates/tenancy/contactrole.html:18 @@ -1495,106 +1810,218 @@ msgstr "providernetwerken" #: netbox/virtualization/tables/clusters.py:17 #: netbox/virtualization/tables/clusters.py:39 #: netbox/virtualization/tables/clusters.py:62 -#: netbox/virtualization/tables/virtualmachines.py:55 -#: netbox/virtualization/tables/virtualmachines.py:139 -#: netbox/virtualization/tables/virtualmachines.py:194 +#: netbox/virtualization/tables/virtualmachines.py:26 +#: netbox/virtualization/tables/virtualmachines.py:109 +#: netbox/virtualization/tables/virtualmachines.py:165 #: netbox/vpn/tables/crypto.py:18 netbox/vpn/tables/crypto.py:57 #: netbox/vpn/tables/crypto.py:93 netbox/vpn/tables/crypto.py:129 #: netbox/vpn/tables/crypto.py:158 netbox/vpn/tables/l2vpn.py:23 #: netbox/vpn/tables/tunnels.py:18 netbox/vpn/tables/tunnels.py:40 #: netbox/wireless/tables/wirelesslan.py:18 -#: netbox/wireless/tables/wirelesslan.py:79 +#: netbox/wireless/tables/wirelesslan.py:88 msgid "Name" msgstr "Naam" -#: netbox/circuits/tables/circuits.py:41 -#: netbox/circuits/tables/circuits.py:138 -#: netbox/circuits/tables/providers.py:45 -#: netbox/circuits/tables/providers.py:79 netbox/netbox/navigation/menu.py:266 -#: netbox/netbox/navigation/menu.py:270 netbox/netbox/navigation/menu.py:272 +#: netbox/circuits/tables/circuits.py:39 +#: netbox/circuits/tables/circuits.py:174 +#: netbox/circuits/tables/providers.py:43 +#: netbox/circuits/tables/providers.py:77 +#: netbox/circuits/tables/virtual_circuits.py:27 +#: netbox/netbox/navigation/menu.py:274 netbox/netbox/navigation/menu.py:278 +#: netbox/netbox/navigation/menu.py:280 #: netbox/templates/circuits/provider.html:57 #: netbox/templates/circuits/provideraccount.html:44 #: netbox/templates/circuits/providernetwork.html:50 msgid "Circuits" msgstr "Circuits" -#: netbox/circuits/tables/circuits.py:55 +#: netbox/circuits/tables/circuits.py:54 +#: netbox/circuits/tables/virtual_circuits.py:42 #: netbox/templates/circuits/circuit.html:26 +#: netbox/templates/circuits/virtualcircuit.html:35 +#: netbox/templates/dcim/interface.html:174 msgid "Circuit ID" msgstr "Circuit-ID" -#: netbox/circuits/tables/circuits.py:69 -#: netbox/wireless/forms/model_forms.py:160 +#: netbox/circuits/tables/circuits.py:72 +#: netbox/wireless/forms/model_forms.py:163 msgid "Side A" msgstr "Kant A" -#: netbox/circuits/tables/circuits.py:74 +#: netbox/circuits/tables/circuits.py:77 msgid "Side Z" msgstr "Kant Z" -#: netbox/circuits/tables/circuits.py:77 -#: netbox/templates/circuits/circuit.html:55 +#: netbox/circuits/tables/circuits.py:80 +#: netbox/templates/circuits/circuit.html:65 msgid "Commit Rate" msgstr "Vastleggingspercentage" -#: netbox/circuits/tables/circuits.py:80 -#: netbox/circuits/tables/providers.py:48 -#: netbox/circuits/tables/providers.py:82 -#: netbox/circuits/tables/providers.py:107 netbox/dcim/tables/devices.py:1036 -#: netbox/dcim/tables/devicetypes.py:92 netbox/dcim/tables/modules.py:29 -#: netbox/dcim/tables/modules.py:73 netbox/dcim/tables/power.py:39 -#: netbox/dcim/tables/power.py:96 netbox/dcim/tables/racks.py:84 -#: netbox/dcim/tables/racks.py:145 netbox/dcim/tables/racks.py:225 -#: netbox/dcim/tables/sites.py:108 netbox/extras/tables/tables.py:582 -#: netbox/ipam/tables/asn.py:69 netbox/ipam/tables/fhrp.py:34 -#: netbox/ipam/tables/ip.py:136 netbox/ipam/tables/ip.py:275 -#: netbox/ipam/tables/ip.py:329 netbox/ipam/tables/ip.py:397 -#: netbox/ipam/tables/services.py:24 netbox/ipam/tables/services.py:54 -#: netbox/ipam/tables/vlans.py:145 netbox/ipam/tables/vrfs.py:47 -#: netbox/ipam/tables/vrfs.py:72 netbox/templates/dcim/htmx/cable_edit.html:89 +#: netbox/circuits/tables/circuits.py:84 +#: netbox/circuits/tables/providers.py:46 +#: netbox/circuits/tables/providers.py:80 +#: netbox/circuits/tables/providers.py:105 +#: netbox/circuits/tables/virtual_circuits.py:68 +#: netbox/dcim/tables/devices.py:1068 netbox/dcim/tables/devicetypes.py:97 +#: netbox/dcim/tables/modules.py:29 netbox/dcim/tables/modules.py:73 +#: netbox/dcim/tables/power.py:39 netbox/dcim/tables/power.py:96 +#: netbox/dcim/tables/racks.py:84 netbox/dcim/tables/racks.py:144 +#: netbox/dcim/tables/racks.py:224 netbox/dcim/tables/sites.py:107 +#: netbox/extras/tables/tables.py:582 netbox/ipam/tables/asn.py:69 +#: netbox/ipam/tables/fhrp.py:34 netbox/ipam/tables/ip.py:82 +#: netbox/ipam/tables/ip.py:226 netbox/ipam/tables/ip.py:281 +#: netbox/ipam/tables/ip.py:349 netbox/ipam/tables/services.py:24 +#: netbox/ipam/tables/services.py:54 netbox/ipam/tables/vlans.py:121 +#: netbox/ipam/tables/vrfs.py:47 netbox/ipam/tables/vrfs.py:72 +#: netbox/templates/dcim/htmx/cable_edit.html:89 #: netbox/templates/generic/bulk_edit.html:86 #: netbox/templates/inc/panels/comments.html:5 #: netbox/tenancy/tables/contacts.py:68 netbox/tenancy/tables/tenants.py:46 #: netbox/utilities/forms/fields/fields.py:29 -#: netbox/virtualization/tables/clusters.py:91 -#: netbox/virtualization/tables/virtualmachines.py:82 +#: netbox/virtualization/tables/clusters.py:95 +#: netbox/virtualization/tables/virtualmachines.py:52 #: netbox/vpn/tables/crypto.py:37 netbox/vpn/tables/crypto.py:74 #: netbox/vpn/tables/crypto.py:109 netbox/vpn/tables/crypto.py:140 #: netbox/vpn/tables/crypto.py:173 netbox/vpn/tables/l2vpn.py:37 #: netbox/vpn/tables/tunnels.py:61 netbox/wireless/tables/wirelesslan.py:27 -#: netbox/wireless/tables/wirelesslan.py:58 +#: netbox/wireless/tables/wirelesslan.py:66 msgid "Comments" msgstr "Opmerkingen" -#: netbox/circuits/tables/circuits.py:86 +#: netbox/circuits/tables/circuits.py:90 #: netbox/templates/tenancy/contact.html:84 #: netbox/tenancy/tables/contacts.py:73 msgid "Assignments" msgstr "Toewijzingen" +#: netbox/circuits/tables/circuits.py:117 netbox/dcim/forms/connections.py:81 +msgid "Side" +msgstr "Kant" + +#: netbox/circuits/tables/circuits.py:120 +msgid "Termination Type" +msgstr "Type beëindiging" + +#: netbox/circuits/tables/circuits.py:123 +msgid "Termination Point" +msgstr "Eindpunt" + +#: netbox/circuits/tables/circuits.py:134 netbox/dcim/tables/devices.py:161 +#: netbox/templates/dcim/sitegroup.html:26 +msgid "Site Group" +msgstr "Sitegroep" + +#: netbox/circuits/tables/circuits.py:149 +#: netbox/templates/circuits/providernetwork.html:17 +#: netbox/templates/circuits/virtualcircuit.html:27 +#: netbox/templates/circuits/virtualcircuittermination.html:30 +#: netbox/templates/dcim/interface.html:170 +msgid "Provider Network" +msgstr "Netwerkprovider" + #: netbox/circuits/tables/providers.py:23 msgid "Accounts" msgstr "Accounts" -#: netbox/circuits/tables/providers.py:29 +#: netbox/circuits/tables/providers.py:28 msgid "Account Count" msgstr "Aantal accounts" -#: netbox/circuits/tables/providers.py:39 netbox/dcim/tables/sites.py:100 +#: netbox/circuits/tables/providers.py:37 netbox/dcim/tables/sites.py:99 msgid "ASN Count" msgstr "Aantal ASN's" -#: netbox/circuits/views.py:331 +#: netbox/circuits/tables/virtual_circuits.py:65 +#: netbox/netbox/navigation/menu.py:234 +#: netbox/templates/circuits/virtualcircuit.html:87 +#: netbox/templates/vpn/l2vpn.html:56 netbox/templates/vpn/tunnel.html:72 +#: netbox/vpn/tables/tunnels.py:58 +msgid "Terminations" +msgstr "Beëindigingen" + +#: netbox/circuits/tables/virtual_circuits.py:109 +#: netbox/dcim/forms/bulk_edit.py:745 netbox/dcim/forms/bulk_edit.py:1299 +#: netbox/dcim/forms/bulk_edit.py:1708 netbox/dcim/forms/bulk_edit.py:1760 +#: netbox/dcim/forms/bulk_import.py:668 netbox/dcim/forms/bulk_import.py:730 +#: netbox/dcim/forms/bulk_import.py:756 netbox/dcim/forms/bulk_import.py:782 +#: netbox/dcim/forms/bulk_import.py:802 netbox/dcim/forms/bulk_import.py:858 +#: netbox/dcim/forms/bulk_import.py:976 netbox/dcim/forms/bulk_import.py:1024 +#: netbox/dcim/forms/bulk_import.py:1041 netbox/dcim/forms/bulk_import.py:1053 +#: netbox/dcim/forms/bulk_import.py:1101 netbox/dcim/forms/bulk_import.py:1205 +#: netbox/dcim/forms/bulk_import.py:1541 netbox/dcim/forms/connections.py:24 +#: netbox/dcim/forms/filtersets.py:132 netbox/dcim/forms/filtersets.py:922 +#: netbox/dcim/forms/filtersets.py:1052 netbox/dcim/forms/filtersets.py:1243 +#: netbox/dcim/forms/filtersets.py:1268 netbox/dcim/forms/filtersets.py:1292 +#: netbox/dcim/forms/filtersets.py:1312 netbox/dcim/forms/filtersets.py:1339 +#: netbox/dcim/forms/filtersets.py:1449 netbox/dcim/forms/filtersets.py:1474 +#: netbox/dcim/forms/filtersets.py:1498 netbox/dcim/forms/filtersets.py:1516 +#: netbox/dcim/forms/filtersets.py:1533 netbox/dcim/forms/filtersets.py:1630 +#: netbox/dcim/forms/filtersets.py:1654 netbox/dcim/forms/filtersets.py:1678 +#: netbox/dcim/forms/model_forms.py:644 netbox/dcim/forms/model_forms.py:861 +#: netbox/dcim/forms/model_forms.py:1231 netbox/dcim/forms/model_forms.py:1716 +#: netbox/dcim/forms/model_forms.py:1787 +#: netbox/dcim/forms/object_create.py:249 netbox/dcim/tables/connections.py:22 +#: netbox/dcim/tables/connections.py:41 netbox/dcim/tables/connections.py:60 +#: netbox/dcim/tables/devices.py:296 netbox/dcim/tables/devices.py:381 +#: netbox/dcim/tables/devices.py:422 netbox/dcim/tables/devices.py:464 +#: netbox/dcim/tables/devices.py:514 netbox/dcim/tables/devices.py:619 +#: netbox/dcim/tables/devices.py:731 netbox/dcim/tables/devices.py:787 +#: netbox/dcim/tables/devices.py:833 netbox/dcim/tables/devices.py:892 +#: netbox/dcim/tables/devices.py:960 netbox/dcim/tables/devices.py:1089 +#: netbox/dcim/tables/modules.py:53 netbox/extras/forms/filtersets.py:328 +#: netbox/ipam/forms/bulk_import.py:303 netbox/ipam/forms/bulk_import.py:540 +#: netbox/ipam/forms/filtersets.py:603 netbox/ipam/forms/model_forms.py:333 +#: netbox/ipam/forms/model_forms.py:762 netbox/ipam/forms/model_forms.py:795 +#: netbox/ipam/forms/model_forms.py:821 netbox/ipam/tables/vlans.py:156 +#: netbox/templates/circuits/virtualcircuittermination.html:56 +#: netbox/templates/dcim/consoleport.html:20 +#: netbox/templates/dcim/consoleserverport.html:20 +#: netbox/templates/dcim/device.html:15 netbox/templates/dcim/device.html:130 +#: netbox/templates/dcim/device_edit.html:10 +#: netbox/templates/dcim/devicebay.html:20 +#: netbox/templates/dcim/devicebay.html:48 +#: netbox/templates/dcim/frontport.html:20 +#: netbox/templates/dcim/interface.html:30 +#: netbox/templates/dcim/interface.html:218 +#: netbox/templates/dcim/inventoryitem.html:20 +#: netbox/templates/dcim/module.html:57 +#: netbox/templates/dcim/modulebay.html:20 +#: netbox/templates/dcim/poweroutlet.html:20 +#: netbox/templates/dcim/powerport.html:20 +#: netbox/templates/dcim/rearport.html:20 +#: netbox/templates/dcim/virtualchassis.html:65 +#: netbox/templates/dcim/virtualchassis_edit.html:51 +#: netbox/templates/dcim/virtualdevicecontext.html:22 +#: netbox/templates/virtualization/virtualmachine.html:114 +#: netbox/templates/vpn/tunneltermination.html:23 +#: netbox/templates/wireless/inc/wirelesslink_interface.html:6 +#: netbox/virtualization/filtersets.py:133 +#: netbox/virtualization/forms/bulk_edit.py:119 +#: netbox/virtualization/forms/bulk_import.py:105 +#: netbox/virtualization/forms/filtersets.py:133 +#: netbox/virtualization/forms/model_forms.py:192 +#: netbox/virtualization/tables/virtualmachines.py:41 netbox/vpn/choices.py:52 +#: netbox/vpn/forms/bulk_import.py:86 netbox/vpn/forms/bulk_import.py:283 +#: netbox/vpn/forms/filtersets.py:275 netbox/vpn/forms/model_forms.py:91 +#: netbox/vpn/forms/model_forms.py:126 netbox/vpn/forms/model_forms.py:237 +#: netbox/vpn/forms/model_forms.py:456 +#: netbox/wireless/forms/model_forms.py:102 +#: netbox/wireless/forms/model_forms.py:144 +#: netbox/wireless/tables/wirelesslan.py:84 +msgid "Device" +msgstr "Apparaat" + +#: netbox/circuits/views.py:356 #, python-brace-format msgid "No terminations have been defined for circuit {circuit}." msgstr "Er zijn geen afsluitingen gedefinieerd voor het circuit {circuit}." -#: netbox/circuits/views.py:380 +#: netbox/circuits/views.py:405 #, python-brace-format msgid "Swapped terminations for circuit {circuit}." msgstr "Verwisselde aansluitingen voor het circuit {circuit}." -#: netbox/core/api/views.py:39 +#: netbox/core/api/views.py:51 msgid "This user does not have permission to synchronize this data source." msgstr "" "Deze gebruiker heeft geen toestemming om deze gegevensbron te " @@ -1621,12 +2048,13 @@ msgstr "Voltooid" #: netbox/core/choices.py:22 netbox/core/choices.py:59 #: netbox/core/constants.py:20 netbox/core/tables/tasks.py:34 #: netbox/dcim/choices.py:187 netbox/dcim/choices.py:239 -#: netbox/dcim/choices.py:1609 netbox/virtualization/choices.py:47 +#: netbox/dcim/choices.py:1593 netbox/dcim/choices.py:1666 +#: netbox/virtualization/choices.py:48 msgid "Failed" msgstr "Mislukt" -#: netbox/core/choices.py:35 netbox/netbox/navigation/menu.py:335 -#: netbox/netbox/navigation/menu.py:339 +#: netbox/core/choices.py:35 netbox/netbox/navigation/menu.py:356 +#: netbox/netbox/navigation/menu.py:360 #: netbox/templates/extras/script/base.html:14 #: netbox/templates/extras/script_list.html:7 #: netbox/templates/extras/script_list.html:12 @@ -1656,12 +2084,36 @@ msgstr "Wordt uitgevoerd" msgid "Errored" msgstr "Fout" -#: netbox/core/choices.py:87 netbox/core/tables/plugins.py:63 +#: netbox/core/choices.py:82 +msgid "Minutely" +msgstr "Minutieus" + +#: netbox/core/choices.py:83 +msgid "Hourly" +msgstr "Elk uur" + +#: netbox/core/choices.py:84 +msgid "12 hours" +msgstr "12 uur" + +#: netbox/core/choices.py:85 +msgid "Daily" +msgstr "Dagelijks" + +#: netbox/core/choices.py:86 +msgid "Weekly" +msgstr "Wekelijks" + +#: netbox/core/choices.py:87 +msgid "30 days" +msgstr "30 dagen" + +#: netbox/core/choices.py:103 netbox/core/tables/plugins.py:63 #: netbox/templates/generic/object.html:61 msgid "Updated" msgstr "Bijgewerkt" -#: netbox/core/choices.py:88 +#: netbox/core/choices.py:104 msgid "Deleted" msgstr "Verwijderd" @@ -1689,7 +2141,7 @@ msgstr "Geannuleerd" #: netbox/core/data_backends.py:32 netbox/core/tables/plugins.py:51 #: netbox/templates/core/plugin.html:88 -#: netbox/templates/dcim/interface.html:216 +#: netbox/templates/dcim/interface.html:273 msgid "Local" msgstr "Lokaal" @@ -1763,7 +2215,7 @@ msgstr "Gegevensbron (ID)" msgid "Data source (name)" msgstr "Gegevensbron (naam)" -#: netbox/core/filtersets.py:145 netbox/dcim/filtersets.py:501 +#: netbox/core/filtersets.py:145 netbox/dcim/filtersets.py:502 #: netbox/extras/filtersets.py:287 netbox/extras/filtersets.py:331 #: netbox/extras/filtersets.py:353 netbox/extras/filtersets.py:413 #: netbox/users/filtersets.py:28 @@ -1775,12 +2227,12 @@ msgid "User name" msgstr "Gebruikersnaam" #: netbox/core/forms/bulk_edit.py:25 netbox/core/forms/filtersets.py:43 -#: netbox/core/tables/data.py:26 netbox/dcim/forms/bulk_edit.py:1137 -#: netbox/dcim/forms/bulk_edit.py:1415 netbox/dcim/forms/filtersets.py:1370 -#: netbox/dcim/tables/devices.py:553 netbox/dcim/tables/devicetypes.py:224 +#: netbox/core/tables/data.py:26 netbox/dcim/forms/bulk_edit.py:1140 +#: netbox/dcim/forms/bulk_edit.py:1418 netbox/dcim/forms/filtersets.py:1375 +#: netbox/dcim/tables/devices.py:567 netbox/dcim/tables/devicetypes.py:231 #: netbox/extras/forms/bulk_edit.py:123 netbox/extras/forms/bulk_edit.py:187 -#: netbox/extras/forms/bulk_edit.py:246 netbox/extras/forms/filtersets.py:142 -#: netbox/extras/forms/filtersets.py:229 netbox/extras/forms/filtersets.py:294 +#: netbox/extras/forms/bulk_edit.py:246 netbox/extras/forms/filtersets.py:145 +#: netbox/extras/forms/filtersets.py:235 netbox/extras/forms/filtersets.py:300 #: netbox/extras/tables/tables.py:162 netbox/extras/tables/tables.py:253 #: netbox/extras/tables/tables.py:415 netbox/netbox/preferences.py:22 #: netbox/templates/core/datasource.html:42 @@ -1791,18 +2243,18 @@ msgstr "Gebruikersnaam" #: netbox/templates/users/objectpermission.html:25 #: netbox/templates/virtualization/vminterface.html:29 #: netbox/users/forms/bulk_edit.py:89 netbox/users/forms/filtersets.py:70 -#: netbox/users/tables.py:83 netbox/virtualization/forms/bulk_edit.py:217 -#: netbox/virtualization/forms/filtersets.py:215 +#: netbox/users/tables.py:83 netbox/virtualization/forms/bulk_edit.py:199 +#: netbox/virtualization/forms/filtersets.py:220 msgid "Enabled" msgstr "Ingeschakeld" -#: netbox/core/forms/bulk_edit.py:34 netbox/extras/forms/model_forms.py:285 +#: netbox/core/forms/bulk_edit.py:34 netbox/extras/forms/model_forms.py:299 #: netbox/templates/extras/savedfilter.html:52 #: netbox/vpn/forms/filtersets.py:97 netbox/vpn/forms/filtersets.py:127 #: netbox/vpn/forms/filtersets.py:151 netbox/vpn/forms/filtersets.py:170 -#: netbox/vpn/forms/model_forms.py:301 netbox/vpn/forms/model_forms.py:321 -#: netbox/vpn/forms/model_forms.py:337 netbox/vpn/forms/model_forms.py:357 -#: netbox/vpn/forms/model_forms.py:380 +#: netbox/vpn/forms/model_forms.py:302 netbox/vpn/forms/model_forms.py:323 +#: netbox/vpn/forms/model_forms.py:339 netbox/vpn/forms/model_forms.py:360 +#: netbox/vpn/forms/model_forms.py:383 msgid "Parameters" msgstr "Parameters" @@ -1811,16 +2263,15 @@ msgid "Ignore rules" msgstr "Regels negeren" #: netbox/core/forms/filtersets.py:30 netbox/core/forms/model_forms.py:97 -#: netbox/extras/forms/model_forms.py:248 -#: netbox/extras/forms/model_forms.py:578 -#: netbox/extras/forms/model_forms.py:632 netbox/extras/tables/tables.py:191 +#: netbox/extras/forms/model_forms.py:262 +#: netbox/extras/forms/model_forms.py:592 +#: netbox/extras/forms/model_forms.py:646 netbox/extras/tables/tables.py:191 #: netbox/extras/tables/tables.py:483 netbox/extras/tables/tables.py:518 #: netbox/templates/core/datasource.html:31 -#: netbox/templates/dcim/device/render_config.html:18 #: netbox/templates/extras/configcontext.html:29 #: netbox/templates/extras/configtemplate.html:21 #: netbox/templates/extras/exporttemplate.html:35 -#: netbox/templates/virtualization/virtualmachine/render_config.html:18 +#: netbox/templates/extras/object_render_config.html:19 msgid "Data Source" msgstr "Gegevensbron" @@ -1829,17 +2280,17 @@ msgid "File" msgstr "Bestand" #: netbox/core/forms/filtersets.py:60 netbox/core/forms/mixins.py:16 -#: netbox/extras/forms/filtersets.py:170 netbox/extras/forms/filtersets.py:328 -#: netbox/extras/forms/filtersets.py:413 +#: netbox/extras/forms/filtersets.py:174 netbox/extras/forms/filtersets.py:335 +#: netbox/extras/forms/filtersets.py:421 msgid "Data source" msgstr "Gegevensbron" -#: netbox/core/forms/filtersets.py:70 netbox/extras/forms/filtersets.py:440 +#: netbox/core/forms/filtersets.py:71 netbox/extras/forms/filtersets.py:448 msgid "Creation" msgstr "Aangemaakt" -#: netbox/core/forms/filtersets.py:74 netbox/core/forms/filtersets.py:160 -#: netbox/extras/forms/filtersets.py:461 netbox/extras/tables/tables.py:220 +#: netbox/core/forms/filtersets.py:75 netbox/core/forms/filtersets.py:161 +#: netbox/extras/forms/filtersets.py:469 netbox/extras/tables/tables.py:220 #: netbox/extras/tables/tables.py:294 netbox/extras/tables/tables.py:326 #: netbox/extras/tables/tables.py:571 netbox/templates/core/job.html:38 #: netbox/templates/core/objectchange.html:52 @@ -1847,42 +2298,42 @@ msgstr "Aangemaakt" msgid "Object Type" msgstr "Soort object" -#: netbox/core/forms/filtersets.py:84 +#: netbox/core/forms/filtersets.py:85 msgid "Created after" msgstr "Aangemaakt na" -#: netbox/core/forms/filtersets.py:89 +#: netbox/core/forms/filtersets.py:90 msgid "Created before" msgstr "Eerder gemaakt" -#: netbox/core/forms/filtersets.py:94 +#: netbox/core/forms/filtersets.py:95 msgid "Scheduled after" msgstr "Daarna gepland" -#: netbox/core/forms/filtersets.py:99 +#: netbox/core/forms/filtersets.py:100 msgid "Scheduled before" msgstr "Eerder gepland" -#: netbox/core/forms/filtersets.py:104 +#: netbox/core/forms/filtersets.py:105 msgid "Started after" msgstr "Begonnen na" -#: netbox/core/forms/filtersets.py:109 +#: netbox/core/forms/filtersets.py:110 msgid "Started before" msgstr "Eerder begonnen" -#: netbox/core/forms/filtersets.py:114 +#: netbox/core/forms/filtersets.py:115 msgid "Completed after" msgstr "Voltooid na" -#: netbox/core/forms/filtersets.py:119 +#: netbox/core/forms/filtersets.py:120 msgid "Completed before" msgstr "Eerder voltooid" -#: netbox/core/forms/filtersets.py:126 netbox/core/forms/filtersets.py:155 -#: netbox/dcim/forms/bulk_edit.py:462 netbox/dcim/forms/filtersets.py:418 -#: netbox/dcim/forms/filtersets.py:462 netbox/dcim/forms/model_forms.py:316 -#: netbox/extras/forms/filtersets.py:456 netbox/extras/forms/filtersets.py:475 +#: netbox/core/forms/filtersets.py:127 netbox/core/forms/filtersets.py:156 +#: netbox/dcim/forms/bulk_edit.py:465 netbox/dcim/forms/filtersets.py:419 +#: netbox/dcim/forms/filtersets.py:463 netbox/dcim/forms/model_forms.py:324 +#: netbox/extras/forms/filtersets.py:464 netbox/extras/forms/filtersets.py:484 #: netbox/extras/tables/tables.py:302 netbox/extras/tables/tables.py:342 #: netbox/templates/core/objectchange.html:36 #: netbox/templates/dcim/rackreservation.html:58 @@ -1896,22 +2347,22 @@ msgstr "Eerder voltooid" msgid "User" msgstr "Gebruiker" -#: netbox/core/forms/filtersets.py:134 netbox/core/tables/change_logging.py:15 +#: netbox/core/forms/filtersets.py:135 netbox/core/tables/change_logging.py:15 #: netbox/extras/tables/tables.py:609 netbox/extras/tables/tables.py:646 #: netbox/templates/core/objectchange.html:32 msgid "Time" msgstr "Tijd" -#: netbox/core/forms/filtersets.py:139 netbox/extras/forms/filtersets.py:445 +#: netbox/core/forms/filtersets.py:140 netbox/extras/forms/filtersets.py:453 msgid "After" msgstr "Na" -#: netbox/core/forms/filtersets.py:144 netbox/extras/forms/filtersets.py:450 +#: netbox/core/forms/filtersets.py:145 netbox/extras/forms/filtersets.py:458 msgid "Before" msgstr "Voordien" -#: netbox/core/forms/filtersets.py:148 netbox/core/tables/change_logging.py:29 -#: netbox/extras/forms/model_forms.py:396 +#: netbox/core/forms/filtersets.py:149 netbox/core/tables/change_logging.py:29 +#: netbox/extras/forms/model_forms.py:410 #: netbox/templates/core/objectchange.html:46 #: netbox/templates/extras/eventrule.html:71 msgid "Action" @@ -1948,22 +2399,22 @@ msgstr "" msgid "Rack Elevations" msgstr "Rackverhogingen" -#: netbox/core/forms/model_forms.py:157 netbox/dcim/choices.py:1520 -#: netbox/dcim/forms/bulk_edit.py:984 netbox/dcim/forms/bulk_edit.py:1372 -#: netbox/dcim/forms/bulk_edit.py:1390 netbox/dcim/tables/racks.py:158 -#: netbox/netbox/navigation/menu.py:291 netbox/netbox/navigation/menu.py:295 +#: netbox/core/forms/model_forms.py:157 netbox/dcim/choices.py:1522 +#: netbox/dcim/forms/bulk_edit.py:987 netbox/dcim/forms/bulk_edit.py:1375 +#: netbox/dcim/forms/bulk_edit.py:1393 netbox/dcim/tables/racks.py:157 +#: netbox/netbox/navigation/menu.py:312 netbox/netbox/navigation/menu.py:316 msgid "Power" msgstr "Stroom" -#: netbox/core/forms/model_forms.py:159 netbox/netbox/navigation/menu.py:154 +#: netbox/core/forms/model_forms.py:159 netbox/netbox/navigation/menu.py:160 #: netbox/templates/core/inc/config_data.html:37 msgid "IPAM" msgstr "IPAM" -#: netbox/core/forms/model_forms.py:160 netbox/netbox/navigation/menu.py:230 +#: netbox/core/forms/model_forms.py:160 netbox/netbox/navigation/menu.py:238 #: netbox/templates/core/inc/config_data.html:50 #: netbox/vpn/forms/bulk_edit.py:77 netbox/vpn/forms/filtersets.py:43 -#: netbox/vpn/forms/model_forms.py:61 netbox/vpn/forms/model_forms.py:146 +#: netbox/vpn/forms/model_forms.py:62 netbox/vpn/forms/model_forms.py:147 msgid "Security" msgstr "Beveiliging" @@ -1978,7 +2429,7 @@ msgid "Pagination" msgstr "Paginering" #: netbox/core/forms/model_forms.py:163 netbox/extras/forms/bulk_edit.py:92 -#: netbox/extras/forms/filtersets.py:47 netbox/extras/forms/model_forms.py:116 +#: netbox/extras/forms/filtersets.py:48 netbox/extras/forms/model_forms.py:116 #: netbox/extras/forms/model_forms.py:129 #: netbox/templates/core/inc/config_data.html:93 msgid "Validation" @@ -1989,7 +2440,7 @@ msgstr "Validatie" msgid "User Preferences" msgstr "Gebruikersvoorkeuren" -#: netbox/core/forms/model_forms.py:167 netbox/dcim/forms/filtersets.py:732 +#: netbox/core/forms/model_forms.py:167 netbox/dcim/forms/filtersets.py:733 #: netbox/templates/core/inc/config_data.html:127 #: netbox/users/forms/model_forms.py:64 msgid "Miscellaneous" @@ -2024,7 +2475,7 @@ msgstr "gebruikersnaam" msgid "request ID" msgstr "verzoek-ID" -#: netbox/core/models/change_logging.py:52 netbox/extras/models/staging.py:69 +#: netbox/core/models/change_logging.py:52 netbox/extras/models/staging.py:77 msgid "action" msgstr "daad" @@ -2051,9 +2502,9 @@ msgstr "" "Logboekregistratie van wijzigingen wordt niet ondersteund voor dit " "objecttype ({type})." -#: netbox/core/models/config.py:18 netbox/core/models/data.py:266 +#: netbox/core/models/config.py:18 netbox/core/models/data.py:263 #: netbox/core/models/files.py:27 netbox/core/models/jobs.py:50 -#: netbox/extras/models/models.py:730 netbox/extras/models/notifications.py:39 +#: netbox/extras/models/models.py:733 netbox/extras/models/notifications.py:39 #: netbox/extras/models/notifications.py:186 #: netbox/netbox/models/features.py:53 netbox/users/models/tokens.py:32 msgid "created" @@ -2088,24 +2539,24 @@ msgstr "Huidige configuratie" msgid "Config revision #{id}" msgstr "Revisie van de configuratie #{id}" -#: netbox/core/models/data.py:44 netbox/dcim/models/cables.py:43 -#: netbox/dcim/models/device_component_templates.py:203 -#: netbox/dcim/models/device_component_templates.py:237 -#: netbox/dcim/models/device_component_templates.py:272 -#: netbox/dcim/models/device_component_templates.py:334 -#: netbox/dcim/models/device_component_templates.py:413 -#: netbox/dcim/models/device_component_templates.py:512 -#: netbox/dcim/models/device_component_templates.py:612 -#: netbox/dcim/models/device_components.py:283 -#: netbox/dcim/models/device_components.py:312 -#: netbox/dcim/models/device_components.py:345 -#: netbox/dcim/models/device_components.py:463 -#: netbox/dcim/models/device_components.py:605 -#: netbox/dcim/models/device_components.py:970 -#: netbox/dcim/models/device_components.py:1044 -#: netbox/dcim/models/power.py:102 netbox/extras/models/customfields.py:78 +#: netbox/core/models/data.py:44 netbox/dcim/models/cables.py:44 +#: netbox/dcim/models/device_component_templates.py:199 +#: netbox/dcim/models/device_component_templates.py:234 +#: netbox/dcim/models/device_component_templates.py:270 +#: netbox/dcim/models/device_component_templates.py:335 +#: netbox/dcim/models/device_component_templates.py:420 +#: netbox/dcim/models/device_component_templates.py:526 +#: netbox/dcim/models/device_component_templates.py:626 +#: netbox/dcim/models/device_components.py:279 +#: netbox/dcim/models/device_components.py:306 +#: netbox/dcim/models/device_components.py:337 +#: netbox/dcim/models/device_components.py:453 +#: netbox/dcim/models/device_components.py:653 +#: netbox/dcim/models/device_components.py:1021 +#: netbox/dcim/models/device_components.py:1092 +#: netbox/dcim/models/power.py:100 netbox/extras/models/customfields.py:78 #: netbox/extras/models/search.py:41 -#: netbox/virtualization/models/clusters.py:61 netbox/vpn/models/l2vpn.py:32 +#: netbox/virtualization/models/clusters.py:57 netbox/vpn/models/l2vpn.py:32 msgid "type" msgstr "type" @@ -2117,8 +2568,8 @@ msgid "URL" msgstr "URL" #: netbox/core/models/data.py:59 -#: netbox/dcim/models/device_component_templates.py:418 -#: netbox/dcim/models/device_components.py:512 +#: netbox/dcim/models/device_component_templates.py:425 +#: netbox/dcim/models/device_components.py:505 #: netbox/extras/models/models.py:70 netbox/extras/models/models.py:301 #: netbox/extras/models/models.py:526 netbox/users/models/permissions.py:29 msgid "enabled" @@ -2150,16 +2601,16 @@ msgstr "gegevensbron" msgid "data sources" msgstr "gegevensbronnen" -#: netbox/core/models/data.py:122 +#: netbox/core/models/data.py:119 #, python-brace-format msgid "Unknown backend type: {type}" msgstr "Onbekend backend-type: {type}" -#: netbox/core/models/data.py:164 +#: netbox/core/models/data.py:161 msgid "Cannot initiate sync; syncing already in progress." msgstr "Kan de synchronisatie niet starten; de synchronisatie is al bezig." -#: netbox/core/models/data.py:177 +#: netbox/core/models/data.py:174 msgid "" "There was an error initializing the backend. A dependency needs to be " "installed: " @@ -2167,48 +2618,48 @@ msgstr "" "Er is een fout opgetreden bij het initialiseren van de backend. Er moet een " "afhankelijkheid worden geïnstalleerd: " -#: netbox/core/models/data.py:270 netbox/core/models/files.py:31 +#: netbox/core/models/data.py:267 netbox/core/models/files.py:31 #: netbox/netbox/models/features.py:59 msgid "last updated" msgstr "laatst bijgewerkt" -#: netbox/core/models/data.py:280 netbox/dcim/models/cables.py:444 +#: netbox/core/models/data.py:277 netbox/dcim/models/cables.py:446 msgid "path" msgstr "pad" -#: netbox/core/models/data.py:283 +#: netbox/core/models/data.py:280 msgid "File path relative to the data source's root" msgstr "Bestandspad relatief ten opzichte van de hoofdmap van de gegevensbron" -#: netbox/core/models/data.py:287 netbox/ipam/models/ip.py:503 +#: netbox/core/models/data.py:284 netbox/ipam/models/ip.py:489 msgid "size" msgstr "grootte" -#: netbox/core/models/data.py:290 +#: netbox/core/models/data.py:287 msgid "hash" msgstr "hash" -#: netbox/core/models/data.py:294 +#: netbox/core/models/data.py:291 msgid "Length must be 64 hexadecimal characters." msgstr "De lengte moet 64 hexadecimale tekens zijn." -#: netbox/core/models/data.py:296 +#: netbox/core/models/data.py:293 msgid "SHA256 hash of the file data" msgstr "SHA256-hash van de bestandsgegevens" -#: netbox/core/models/data.py:313 +#: netbox/core/models/data.py:310 msgid "data file" msgstr "gegevensbestand" -#: netbox/core/models/data.py:314 +#: netbox/core/models/data.py:311 msgid "data files" msgstr "gegevensbestanden" -#: netbox/core/models/data.py:401 +#: netbox/core/models/data.py:398 msgid "auto sync record" msgstr "opname automatisch synchroniseren" -#: netbox/core/models/data.py:402 +#: netbox/core/models/data.py:399 msgid "auto sync records" msgstr "records automatisch synchroniseren" @@ -2232,6 +2683,11 @@ msgstr "beheerd bestand" msgid "managed files" msgstr "beheerde bestanden" +#: netbox/core/models/files.py:100 +#, python-brace-format +msgid "A {model} with this file path already exists ({path})." +msgstr "EEN {model} waarbij dit bestandspad al bestaat ({path})." + #: netbox/core/models/jobs.py:54 msgid "scheduled" msgstr "gepland" @@ -2253,7 +2709,7 @@ msgid "completed" msgstr "voltooid" #: netbox/core/models/jobs.py:91 netbox/extras/models/models.py:101 -#: netbox/extras/models/staging.py:87 +#: netbox/extras/models/staging.py:95 msgid "data" msgstr "gegevens" @@ -2285,7 +2741,7 @@ msgstr "" "Ongeldige status voor beëindiging van het dienstverband. De keuzes zijn: " "{choices}" -#: netbox/core/models/jobs.py:221 +#: netbox/core/models/jobs.py:231 msgid "" "enqueue() cannot be called with values for both schedule_at and immediate." msgstr "" @@ -2308,7 +2764,7 @@ msgstr "Volledige naam" #: netbox/extras/tables/tables.py:297 netbox/extras/tables/tables.py:329 #: netbox/extras/tables/tables.py:409 netbox/extras/tables/tables.py:470 #: netbox/extras/tables/tables.py:576 netbox/extras/tables/tables.py:616 -#: netbox/extras/tables/tables.py:653 netbox/netbox/tables/tables.py:244 +#: netbox/extras/tables/tables.py:653 netbox/netbox/tables/tables.py:247 #: netbox/templates/core/objectchange.html:58 #: netbox/templates/extras/eventrule.html:78 #: netbox/templates/extras/journalentry.html:18 @@ -2336,11 +2792,11 @@ msgid "Last updated" msgstr "Laatst bijgewerkt" #: netbox/core/tables/jobs.py:10 netbox/core/tables/tasks.py:76 -#: netbox/dcim/tables/devicetypes.py:164 netbox/extras/tables/tables.py:216 -#: netbox/extras/tables/tables.py:460 netbox/netbox/tables/tables.py:189 +#: netbox/dcim/tables/devicetypes.py:169 netbox/extras/tables/tables.py:216 +#: netbox/extras/tables/tables.py:460 netbox/netbox/tables/tables.py:192 #: netbox/templates/dcim/virtualchassis_edit.html:52 #: netbox/utilities/forms/forms.py:73 -#: netbox/wireless/tables/wirelesslink.py:17 +#: netbox/wireless/tables/wirelesslink.py:16 msgid "ID" msgstr "ID" @@ -2406,7 +2862,7 @@ msgstr "Workers" msgid "Host" msgstr "Host" -#: netbox/core/tables/tasks.py:50 netbox/ipam/forms/filtersets.py:535 +#: netbox/core/tables/tasks.py:50 netbox/ipam/forms/filtersets.py:587 msgid "Port" msgstr "Poort" @@ -2454,71 +2910,84 @@ msgstr "PIDE" msgid "No workers found" msgstr "Geen workers gevonden" -#: netbox/core/views.py:90 -#, python-brace-format -msgid "Queued job #{id} to sync {datasource}" -msgstr "Taak in de wachtrij #{id} om te synchroniseren {datasource}" - -#: netbox/core/views.py:319 -#, python-brace-format -msgid "Restored configuration revision #{id}" -msgstr "Herstelde configuratierevisie #{id}" - -#: netbox/core/views.py:412 netbox/core/views.py:455 netbox/core/views.py:531 +#: netbox/core/utils.py:84 netbox/core/utils.py:150 netbox/core/views.py:396 #, python-brace-format msgid "Job {job_id} not found" msgstr "Taak {job_id} niet gevonden" -#: netbox/core/views.py:463 -#, python-brace-format -msgid "Job {id} has been deleted." -msgstr "Baan {id} is verwijderd." - -#: netbox/core/views.py:465 -#, python-brace-format -msgid "Error deleting job {id}: {error}" -msgstr "Fout bij het verwijderen van de taak {id}: {error}" - -#: netbox/core/views.py:478 netbox/core/views.py:496 +#: netbox/core/utils.py:102 netbox/core/utils.py:118 #, python-brace-format msgid "Job {id} not found." msgstr "Baan {id} niet gevonden." -#: netbox/core/views.py:484 +#: netbox/core/views.py:88 +#, python-brace-format +msgid "Queued job #{id} to sync {datasource}" +msgstr "Taak in de wachtrij #{id} om te synchroniseren {datasource}" + +#: netbox/core/views.py:332 +#, python-brace-format +msgid "Restored configuration revision #{id}" +msgstr "Herstelde configuratierevisie #{id}" + +#: netbox/core/views.py:435 +#, python-brace-format +msgid "Job {id} has been deleted." +msgstr "Baan {id} is verwijderd." + +#: netbox/core/views.py:437 +#, python-brace-format +msgid "Error deleting job {id}: {error}" +msgstr "Fout bij het verwijderen van de taak {id}: {error}" + +#: netbox/core/views.py:446 #, python-brace-format msgid "Job {id} has been re-enqueued." msgstr "Baan {id} is opnieuw gevraagd." -#: netbox/core/views.py:519 +#: netbox/core/views.py:455 #, python-brace-format msgid "Job {id} has been enqueued." msgstr "Baan {id} is ondervraagd." -#: netbox/core/views.py:538 +#: netbox/core/views.py:464 #, python-brace-format msgid "Job {id} has been stopped." msgstr "Baan {id} is gestopt." -#: netbox/core/views.py:540 +#: netbox/core/views.py:466 #, python-brace-format msgid "Failed to stop job {id}" msgstr "Kon de taak niet stoppen {id}" -#: netbox/core/views.py:674 +#: netbox/core/views.py:601 msgid "Plugins catalog could not be loaded" msgstr "De catalogus met plug-ins kon niet worden geladen" -#: netbox/core/views.py:708 +#: netbox/core/views.py:635 #, python-brace-format msgid "Plugin {name} not found" msgstr "Plug-in {name} niet gevonden" -#: netbox/dcim/api/serializers_/devices.py:49 -#: netbox/dcim/api/serializers_/devicetypes.py:25 +#: netbox/dcim/api/serializers_/device_components.py:262 +msgid "Interface mode does not support q-in-q service vlan" +msgstr "De interfacemodus biedt geen ondersteuning voor q-in-q service VLAN" + +#: netbox/dcim/api/serializers_/device_components.py:269 +msgid "Interface mode does not support untagged vlan" +msgstr "De interfacemodus ondersteunt niet-gelabelde VLAN niet" + +#: netbox/dcim/api/serializers_/device_components.py:274 +#: netbox/dcim/api/serializers_/device_components.py:279 +msgid "Interface mode does not support tagged vlans" +msgstr "De interfacemodus ondersteunt geen gelabelde VLAN's" + +#: netbox/dcim/api/serializers_/devices.py:53 +#: netbox/dcim/api/serializers_/devicetypes.py:26 msgid "Position (U)" msgstr "Positie (U)" -#: netbox/dcim/api/serializers_/racks.py:112 +#: netbox/dcim/api/serializers_/racks.py:113 #: netbox/templates/dcim/rack.html:28 msgid "Facility ID" msgstr "Faciliteits-ID" @@ -2528,8 +2997,9 @@ msgid "Staging" msgstr "Klaarzetten" #: netbox/dcim/choices.py:23 netbox/dcim/choices.py:189 -#: netbox/dcim/choices.py:240 netbox/dcim/choices.py:1533 -#: netbox/virtualization/choices.py:23 netbox/virtualization/choices.py:48 +#: netbox/dcim/choices.py:240 netbox/dcim/choices.py:1535 +#: netbox/dcim/choices.py:1667 netbox/virtualization/choices.py:23 +#: netbox/virtualization/choices.py:49 msgid "Decommissioning" msgstr "Ontmanteling" @@ -2592,7 +3062,7 @@ msgstr "Verouderd" msgid "Millimeters" msgstr "Millimeters" -#: netbox/dcim/choices.py:115 netbox/dcim/choices.py:1555 +#: netbox/dcim/choices.py:115 netbox/dcim/choices.py:1557 msgid "Inches" msgstr "Inches" @@ -2606,21 +3076,21 @@ msgstr "Van voor naar achter" msgid "Rear to front" msgstr "Van achter naar voren" -#: netbox/dcim/choices.py:151 netbox/dcim/forms/bulk_edit.py:69 -#: netbox/dcim/forms/bulk_edit.py:88 netbox/dcim/forms/bulk_edit.py:174 -#: netbox/dcim/forms/bulk_edit.py:1420 netbox/dcim/forms/bulk_import.py:60 -#: netbox/dcim/forms/bulk_import.py:74 netbox/dcim/forms/bulk_import.py:137 -#: netbox/dcim/forms/bulk_import.py:588 netbox/dcim/forms/bulk_import.py:855 -#: netbox/dcim/forms/bulk_import.py:1110 netbox/dcim/forms/filtersets.py:234 -#: netbox/dcim/forms/model_forms.py:74 netbox/dcim/forms/model_forms.py:93 -#: netbox/dcim/forms/model_forms.py:170 netbox/dcim/forms/model_forms.py:1069 -#: netbox/dcim/forms/model_forms.py:1509 -#: netbox/dcim/forms/object_import.py:176 netbox/dcim/tables/devices.py:656 -#: netbox/dcim/tables/devices.py:869 netbox/dcim/tables/devices.py:954 -#: netbox/extras/tables/tables.py:223 netbox/ipam/tables/fhrp.py:59 -#: netbox/ipam/tables/ip.py:378 netbox/ipam/tables/services.py:44 -#: netbox/templates/dcim/interface.html:102 -#: netbox/templates/dcim/interface.html:309 +#: netbox/dcim/choices.py:151 netbox/dcim/forms/bulk_edit.py:72 +#: netbox/dcim/forms/bulk_edit.py:91 netbox/dcim/forms/bulk_edit.py:177 +#: netbox/dcim/forms/bulk_edit.py:1423 netbox/dcim/forms/bulk_import.py:62 +#: netbox/dcim/forms/bulk_import.py:76 netbox/dcim/forms/bulk_import.py:139 +#: netbox/dcim/forms/bulk_import.py:593 netbox/dcim/forms/bulk_import.py:863 +#: netbox/dcim/forms/bulk_import.py:1118 netbox/dcim/forms/filtersets.py:235 +#: netbox/dcim/forms/model_forms.py:76 netbox/dcim/forms/model_forms.py:95 +#: netbox/dcim/forms/model_forms.py:174 netbox/dcim/forms/model_forms.py:1082 +#: netbox/dcim/forms/model_forms.py:1551 +#: netbox/dcim/forms/object_import.py:177 netbox/dcim/tables/devices.py:690 +#: netbox/dcim/tables/devices.py:900 netbox/dcim/tables/devices.py:987 +#: netbox/dcim/tables/devices.py:1147 netbox/extras/tables/tables.py:223 +#: netbox/ipam/tables/fhrp.py:59 netbox/ipam/tables/ip.py:330 +#: netbox/ipam/tables/services.py:44 netbox/templates/dcim/interface.html:108 +#: netbox/templates/dcim/interface.html:366 #: netbox/templates/dcim/location.html:41 netbox/templates/dcim/region.html:37 #: netbox/templates/dcim/sitegroup.html:37 #: netbox/templates/ipam/service.html:28 @@ -2633,12 +3103,12 @@ msgstr "Van achter naar voren" #: netbox/tenancy/forms/bulk_import.py:58 #: netbox/tenancy/forms/model_forms.py:25 #: netbox/tenancy/forms/model_forms.py:68 -#: netbox/virtualization/forms/bulk_edit.py:207 -#: netbox/virtualization/forms/bulk_import.py:151 -#: netbox/virtualization/tables/virtualmachines.py:162 -#: netbox/wireless/forms/bulk_edit.py:24 -#: netbox/wireless/forms/bulk_import.py:21 -#: netbox/wireless/forms/model_forms.py:21 +#: netbox/virtualization/forms/bulk_edit.py:189 +#: netbox/virtualization/forms/bulk_import.py:157 +#: netbox/virtualization/tables/virtualmachines.py:132 +#: netbox/wireless/forms/bulk_edit.py:26 +#: netbox/wireless/forms/bulk_import.py:23 +#: netbox/wireless/forms/model_forms.py:22 msgid "Parent" msgstr "Ouder" @@ -2661,7 +3131,7 @@ msgid "Rear" msgstr "Achterkant" #: netbox/dcim/choices.py:186 netbox/dcim/choices.py:238 -#: netbox/virtualization/choices.py:46 +#: netbox/dcim/choices.py:1665 netbox/virtualization/choices.py:47 msgid "Staged" msgstr "Klaargezet" @@ -2694,7 +3164,7 @@ msgid "Top to bottom" msgstr "Van boven naar beneden" #: netbox/dcim/choices.py:215 netbox/dcim/choices.py:259 -#: netbox/dcim/choices.py:1305 +#: netbox/dcim/choices.py:1307 msgid "Passive" msgstr "Passief" @@ -2724,8 +3194,8 @@ msgstr "Gepatenteerd" #: netbox/dcim/choices.py:581 netbox/dcim/choices.py:824 #: netbox/dcim/choices.py:1221 netbox/dcim/choices.py:1223 -#: netbox/dcim/choices.py:1449 netbox/dcim/choices.py:1451 -#: netbox/netbox/navigation/menu.py:200 +#: netbox/dcim/choices.py:1451 netbox/dcim/choices.py:1453 +#: netbox/netbox/navigation/menu.py:208 msgid "Other" msgstr "Andere" @@ -2742,10 +3212,10 @@ msgid "Virtual" msgstr "Virtueel" #: netbox/dcim/choices.py:856 netbox/dcim/choices.py:1099 -#: netbox/dcim/forms/bulk_edit.py:1563 netbox/dcim/forms/filtersets.py:1330 -#: netbox/dcim/forms/model_forms.py:995 netbox/dcim/forms/model_forms.py:1404 -#: netbox/netbox/navigation/menu.py:140 netbox/netbox/navigation/menu.py:144 -#: netbox/templates/dcim/interface.html:210 +#: netbox/dcim/forms/bulk_edit.py:1578 netbox/dcim/forms/filtersets.py:1335 +#: netbox/dcim/forms/model_forms.py:1007 netbox/dcim/forms/model_forms.py:1445 +#: netbox/netbox/navigation/menu.py:146 netbox/netbox/navigation/menu.py:150 +#: netbox/templates/dcim/interface.html:267 msgid "Wireless" msgstr "Draadloos" @@ -2753,13 +3223,13 @@ msgstr "Draadloos" msgid "Virtual interfaces" msgstr "Virtuele interfaces" -#: netbox/dcim/choices.py:1025 netbox/dcim/forms/bulk_edit.py:1428 -#: netbox/dcim/forms/bulk_import.py:862 netbox/dcim/forms/model_forms.py:981 -#: netbox/dcim/tables/devices.py:660 netbox/templates/dcim/interface.html:106 +#: netbox/dcim/choices.py:1025 netbox/dcim/forms/bulk_edit.py:1431 +#: netbox/dcim/forms/bulk_import.py:870 netbox/dcim/forms/model_forms.py:993 +#: netbox/dcim/tables/devices.py:694 netbox/templates/dcim/interface.html:112 #: netbox/templates/virtualization/vminterface.html:43 -#: netbox/virtualization/forms/bulk_edit.py:212 -#: netbox/virtualization/forms/bulk_import.py:158 -#: netbox/virtualization/tables/virtualmachines.py:166 +#: netbox/virtualization/forms/bulk_edit.py:194 +#: netbox/virtualization/forms/bulk_import.py:164 +#: netbox/virtualization/tables/virtualmachines.py:136 msgid "Bridge" msgstr "Bridge" @@ -2783,10 +3253,10 @@ msgstr "Ethernet (backplane)" msgid "Cellular" msgstr "Mobiel" -#: netbox/dcim/choices.py:1167 netbox/dcim/forms/filtersets.py:383 -#: netbox/dcim/forms/filtersets.py:809 netbox/dcim/forms/filtersets.py:963 -#: netbox/dcim/forms/filtersets.py:1542 -#: netbox/templates/dcim/inventoryitem.html:52 +#: netbox/dcim/choices.py:1167 netbox/dcim/forms/filtersets.py:384 +#: netbox/dcim/forms/filtersets.py:810 netbox/dcim/forms/filtersets.py:964 +#: netbox/dcim/forms/filtersets.py:1547 +#: netbox/templates/dcim/inventoryitem.html:56 #: netbox/templates/dcim/virtualchassis_edit.html:54 msgid "Serial" msgstr "Serienummer" @@ -2812,109 +3282,95 @@ msgstr "Volledig" msgid "Auto" msgstr "Auto" -#: netbox/dcim/choices.py:1265 +#: netbox/dcim/choices.py:1266 msgid "Access" msgstr "Toegang" -#: netbox/dcim/choices.py:1266 netbox/ipam/tables/vlans.py:172 -#: netbox/ipam/tables/vlans.py:217 +#: netbox/dcim/choices.py:1267 netbox/ipam/tables/vlans.py:148 +#: netbox/ipam/tables/vlans.py:193 #: netbox/templates/dcim/inc/interface_vlans_table.html:7 msgid "Tagged" msgstr "Getagd" -#: netbox/dcim/choices.py:1267 +#: netbox/dcim/choices.py:1268 msgid "Tagged (All)" msgstr "Getagd (Alles)" -#: netbox/dcim/choices.py:1296 +#: netbox/dcim/choices.py:1269 netbox/templates/ipam/vlan_edit.html:22 +msgid "Q-in-Q (802.1ad)" +msgstr "Q-in-Q (802.1ad)" + +#: netbox/dcim/choices.py:1298 msgid "IEEE Standard" msgstr "IEEE-standaard" -#: netbox/dcim/choices.py:1307 +#: netbox/dcim/choices.py:1309 msgid "Passive 24V (2-pair)" msgstr "Passief 24V (2 paren)" -#: netbox/dcim/choices.py:1308 +#: netbox/dcim/choices.py:1310 msgid "Passive 24V (4-pair)" msgstr "Passief 24V (4 paren)" -#: netbox/dcim/choices.py:1309 +#: netbox/dcim/choices.py:1311 msgid "Passive 48V (2-pair)" msgstr "Passief 48V (2 paren)" -#: netbox/dcim/choices.py:1310 +#: netbox/dcim/choices.py:1312 msgid "Passive 48V (4-pair)" msgstr "Passief 48V (4 paren)" -#: netbox/dcim/choices.py:1380 netbox/dcim/choices.py:1490 +#: netbox/dcim/choices.py:1382 netbox/dcim/choices.py:1492 msgid "Copper" msgstr "Koper" -#: netbox/dcim/choices.py:1403 +#: netbox/dcim/choices.py:1405 msgid "Fiber Optic" msgstr "Glasvezel" -#: netbox/dcim/choices.py:1436 netbox/dcim/choices.py:1519 +#: netbox/dcim/choices.py:1438 netbox/dcim/choices.py:1521 msgid "USB" msgstr "USB" -#: netbox/dcim/choices.py:1506 +#: netbox/dcim/choices.py:1508 msgid "Fiber" msgstr "Vezel" -#: netbox/dcim/choices.py:1531 netbox/dcim/forms/filtersets.py:1227 +#: netbox/dcim/choices.py:1533 netbox/dcim/forms/filtersets.py:1228 msgid "Connected" msgstr "Verbonden" -#: netbox/dcim/choices.py:1550 netbox/wireless/choices.py:497 +#: netbox/dcim/choices.py:1552 netbox/netbox/choices.py:175 msgid "Kilometers" msgstr "Kilometers" -#: netbox/dcim/choices.py:1551 netbox/templates/dcim/cable_trace.html:65 -#: netbox/wireless/choices.py:498 +#: netbox/dcim/choices.py:1553 netbox/netbox/choices.py:176 +#: netbox/templates/dcim/cable_trace.html:65 msgid "Meters" msgstr "Meters" -#: netbox/dcim/choices.py:1552 +#: netbox/dcim/choices.py:1554 msgid "Centimeters" msgstr "Centimeters" -#: netbox/dcim/choices.py:1553 netbox/wireless/choices.py:499 +#: netbox/dcim/choices.py:1555 netbox/netbox/choices.py:177 msgid "Miles" msgstr "Mijlen" -#: netbox/dcim/choices.py:1554 netbox/templates/dcim/cable_trace.html:66 -#: netbox/wireless/choices.py:500 +#: netbox/dcim/choices.py:1556 netbox/netbox/choices.py:178 +#: netbox/templates/dcim/cable_trace.html:66 msgid "Feet" msgstr "Feet" -#: netbox/dcim/choices.py:1570 netbox/templates/dcim/device.html:327 -#: netbox/templates/dcim/rack.html:107 -msgid "Kilograms" -msgstr "Kilogrammen" - -#: netbox/dcim/choices.py:1571 -msgid "Grams" -msgstr "Gram" - -#: netbox/dcim/choices.py:1572 netbox/templates/dcim/device.html:328 -#: netbox/templates/dcim/rack.html:108 -msgid "Pounds" -msgstr "Ponden" - -#: netbox/dcim/choices.py:1573 -msgid "Ounces" -msgstr "Ons" - -#: netbox/dcim/choices.py:1620 +#: netbox/dcim/choices.py:1604 msgid "Redundant" msgstr "Redundant" -#: netbox/dcim/choices.py:1641 +#: netbox/dcim/choices.py:1625 msgid "Single phase" msgstr "Een fase" -#: netbox/dcim/choices.py:1642 +#: netbox/dcim/choices.py:1626 msgid "Three-phase" msgstr "Drie fase" @@ -2928,335 +3384,319 @@ msgstr "Ongeldig formaat van het MAC-adres: {value}" msgid "Invalid WWN format: {value}" msgstr "Ongeldig WWN-formaat: {value}" -#: netbox/dcim/filtersets.py:86 +#: netbox/dcim/filtersets.py:87 msgid "Parent region (ID)" msgstr "Ouderregio (ID)" -#: netbox/dcim/filtersets.py:92 +#: netbox/dcim/filtersets.py:93 msgid "Parent region (slug)" msgstr "Ouderregio (slug)" -#: netbox/dcim/filtersets.py:116 +#: netbox/dcim/filtersets.py:117 msgid "Parent site group (ID)" msgstr "Oudersitegroep (ID)" -#: netbox/dcim/filtersets.py:122 +#: netbox/dcim/filtersets.py:123 msgid "Parent site group (slug)" msgstr "Bovenliggende sitegroep (slug)" -#: netbox/dcim/filtersets.py:164 netbox/extras/filtersets.py:364 -#: netbox/ipam/filtersets.py:843 netbox/ipam/filtersets.py:995 +#: netbox/dcim/filtersets.py:165 netbox/extras/filtersets.py:364 +#: netbox/ipam/filtersets.py:810 netbox/ipam/filtersets.py:962 msgid "Group (ID)" msgstr "Groep (ID)" -#: netbox/dcim/filtersets.py:170 +#: netbox/dcim/filtersets.py:171 msgid "Group (slug)" msgstr "Groep (slug)" -#: netbox/dcim/filtersets.py:176 netbox/dcim/filtersets.py:181 +#: netbox/dcim/filtersets.py:177 netbox/dcim/filtersets.py:182 msgid "AS (ID)" msgstr "ALS (ID)" -#: netbox/dcim/filtersets.py:246 +#: netbox/dcim/filtersets.py:247 msgid "Parent location (ID)" msgstr "Locatie van de ouder (ID)" -#: netbox/dcim/filtersets.py:252 +#: netbox/dcim/filtersets.py:253 msgid "Parent location (slug)" msgstr "Locatie van de ouder (slug)" -#: netbox/dcim/filtersets.py:258 netbox/dcim/filtersets.py:369 -#: netbox/dcim/filtersets.py:490 netbox/dcim/filtersets.py:1057 -#: netbox/dcim/filtersets.py:1404 netbox/dcim/filtersets.py:2182 -msgid "Location (ID)" -msgstr "Locatie (ID)" - -#: netbox/dcim/filtersets.py:265 netbox/dcim/filtersets.py:376 -#: netbox/dcim/filtersets.py:497 netbox/dcim/filtersets.py:1410 -#: netbox/extras/filtersets.py:542 -msgid "Location (slug)" -msgstr "Locatie (slug)" - -#: netbox/dcim/filtersets.py:296 netbox/dcim/filtersets.py:381 -#: netbox/dcim/filtersets.py:539 netbox/dcim/filtersets.py:678 -#: netbox/dcim/filtersets.py:882 netbox/dcim/filtersets.py:933 -#: netbox/dcim/filtersets.py:973 netbox/dcim/filtersets.py:1306 -#: netbox/dcim/filtersets.py:1840 +#: netbox/dcim/filtersets.py:297 netbox/dcim/filtersets.py:382 +#: netbox/dcim/filtersets.py:540 netbox/dcim/filtersets.py:679 +#: netbox/dcim/filtersets.py:883 netbox/dcim/filtersets.py:934 +#: netbox/dcim/filtersets.py:974 netbox/dcim/filtersets.py:1308 +#: netbox/dcim/filtersets.py:1960 msgid "Manufacturer (ID)" msgstr "Fabrikant (ID)" -#: netbox/dcim/filtersets.py:302 netbox/dcim/filtersets.py:387 -#: netbox/dcim/filtersets.py:545 netbox/dcim/filtersets.py:684 -#: netbox/dcim/filtersets.py:888 netbox/dcim/filtersets.py:939 -#: netbox/dcim/filtersets.py:979 netbox/dcim/filtersets.py:1312 -#: netbox/dcim/filtersets.py:1846 +#: netbox/dcim/filtersets.py:303 netbox/dcim/filtersets.py:388 +#: netbox/dcim/filtersets.py:546 netbox/dcim/filtersets.py:685 +#: netbox/dcim/filtersets.py:889 netbox/dcim/filtersets.py:940 +#: netbox/dcim/filtersets.py:980 netbox/dcim/filtersets.py:1314 +#: netbox/dcim/filtersets.py:1966 msgid "Manufacturer (slug)" msgstr "Fabrikant (slug)" -#: netbox/dcim/filtersets.py:393 +#: netbox/dcim/filtersets.py:394 msgid "Rack type (slug)" msgstr "Racktype (slug)" -#: netbox/dcim/filtersets.py:397 +#: netbox/dcim/filtersets.py:398 msgid "Rack type (ID)" msgstr "Racktype (ID)" -#: netbox/dcim/filtersets.py:411 netbox/dcim/filtersets.py:892 -#: netbox/dcim/filtersets.py:994 netbox/dcim/filtersets.py:1850 -#: netbox/ipam/filtersets.py:383 netbox/ipam/filtersets.py:495 -#: netbox/ipam/filtersets.py:1005 netbox/virtualization/filtersets.py:210 +#: netbox/dcim/filtersets.py:412 netbox/dcim/filtersets.py:893 +#: netbox/dcim/filtersets.py:995 netbox/dcim/filtersets.py:1970 +#: netbox/ipam/filtersets.py:350 netbox/ipam/filtersets.py:462 +#: netbox/ipam/filtersets.py:972 netbox/virtualization/filtersets.py:176 msgid "Role (ID)" msgstr "Rol (ID)" -#: netbox/dcim/filtersets.py:417 netbox/dcim/filtersets.py:898 -#: netbox/dcim/filtersets.py:1000 netbox/dcim/filtersets.py:1856 -#: netbox/extras/filtersets.py:558 netbox/ipam/filtersets.py:389 -#: netbox/ipam/filtersets.py:501 netbox/ipam/filtersets.py:1011 -#: netbox/virtualization/filtersets.py:216 +#: netbox/dcim/filtersets.py:418 netbox/dcim/filtersets.py:899 +#: netbox/dcim/filtersets.py:1001 netbox/dcim/filtersets.py:1976 +#: netbox/extras/filtersets.py:558 netbox/ipam/filtersets.py:356 +#: netbox/ipam/filtersets.py:468 netbox/ipam/filtersets.py:978 +#: netbox/virtualization/filtersets.py:182 msgid "Role (slug)" msgstr "Rol (slug)" -#: netbox/dcim/filtersets.py:447 netbox/dcim/filtersets.py:1062 -#: netbox/dcim/filtersets.py:1415 netbox/dcim/filtersets.py:2244 +#: netbox/dcim/filtersets.py:448 netbox/dcim/filtersets.py:1063 +#: netbox/dcim/filtersets.py:1417 netbox/dcim/filtersets.py:2368 msgid "Rack (ID)" msgstr "Rek (ID)" -#: netbox/dcim/filtersets.py:507 netbox/extras/filtersets.py:293 +#: netbox/dcim/filtersets.py:508 netbox/extras/filtersets.py:293 #: netbox/extras/filtersets.py:337 netbox/extras/filtersets.py:359 #: netbox/extras/filtersets.py:419 netbox/users/filtersets.py:113 #: netbox/users/filtersets.py:180 msgid "User (name)" msgstr "Gebruiker (naam)" -#: netbox/dcim/filtersets.py:549 +#: netbox/dcim/filtersets.py:550 msgid "Default platform (ID)" msgstr "Standaardplatform (ID)" -#: netbox/dcim/filtersets.py:555 +#: netbox/dcim/filtersets.py:556 msgid "Default platform (slug)" msgstr "Standaardplatform (slug)" -#: netbox/dcim/filtersets.py:558 netbox/dcim/forms/filtersets.py:517 +#: netbox/dcim/filtersets.py:559 netbox/dcim/forms/filtersets.py:518 msgid "Has a front image" msgstr "Heeft een afbeelding van de voorkant" -#: netbox/dcim/filtersets.py:562 netbox/dcim/forms/filtersets.py:524 +#: netbox/dcim/filtersets.py:563 netbox/dcim/forms/filtersets.py:525 msgid "Has a rear image" msgstr "Heeft een afbeelding van de achterkant" -#: netbox/dcim/filtersets.py:567 netbox/dcim/filtersets.py:688 -#: netbox/dcim/filtersets.py:1131 netbox/dcim/forms/filtersets.py:531 -#: netbox/dcim/forms/filtersets.py:627 netbox/dcim/forms/filtersets.py:848 +#: netbox/dcim/filtersets.py:568 netbox/dcim/filtersets.py:689 +#: netbox/dcim/filtersets.py:1132 netbox/dcim/forms/filtersets.py:532 +#: netbox/dcim/forms/filtersets.py:628 netbox/dcim/forms/filtersets.py:849 msgid "Has console ports" msgstr "Heeft consolepoorten" -#: netbox/dcim/filtersets.py:571 netbox/dcim/filtersets.py:692 -#: netbox/dcim/filtersets.py:1135 netbox/dcim/forms/filtersets.py:538 -#: netbox/dcim/forms/filtersets.py:634 netbox/dcim/forms/filtersets.py:855 +#: netbox/dcim/filtersets.py:572 netbox/dcim/filtersets.py:693 +#: netbox/dcim/filtersets.py:1136 netbox/dcim/forms/filtersets.py:539 +#: netbox/dcim/forms/filtersets.py:635 netbox/dcim/forms/filtersets.py:856 msgid "Has console server ports" msgstr "Heeft consoleserverpoorten" -#: netbox/dcim/filtersets.py:575 netbox/dcim/filtersets.py:696 -#: netbox/dcim/filtersets.py:1139 netbox/dcim/forms/filtersets.py:545 -#: netbox/dcim/forms/filtersets.py:641 netbox/dcim/forms/filtersets.py:862 +#: netbox/dcim/filtersets.py:576 netbox/dcim/filtersets.py:697 +#: netbox/dcim/filtersets.py:1140 netbox/dcim/forms/filtersets.py:546 +#: netbox/dcim/forms/filtersets.py:642 netbox/dcim/forms/filtersets.py:863 msgid "Has power ports" msgstr "Heeft voedingspoorten" -#: netbox/dcim/filtersets.py:579 netbox/dcim/filtersets.py:700 -#: netbox/dcim/filtersets.py:1143 netbox/dcim/forms/filtersets.py:552 -#: netbox/dcim/forms/filtersets.py:648 netbox/dcim/forms/filtersets.py:869 +#: netbox/dcim/filtersets.py:580 netbox/dcim/filtersets.py:701 +#: netbox/dcim/filtersets.py:1144 netbox/dcim/forms/filtersets.py:553 +#: netbox/dcim/forms/filtersets.py:649 netbox/dcim/forms/filtersets.py:870 msgid "Has power outlets" msgstr "Heeft stopcontacten" -#: netbox/dcim/filtersets.py:583 netbox/dcim/filtersets.py:704 -#: netbox/dcim/filtersets.py:1147 netbox/dcim/forms/filtersets.py:559 -#: netbox/dcim/forms/filtersets.py:655 netbox/dcim/forms/filtersets.py:876 +#: netbox/dcim/filtersets.py:584 netbox/dcim/filtersets.py:705 +#: netbox/dcim/filtersets.py:1148 netbox/dcim/forms/filtersets.py:560 +#: netbox/dcim/forms/filtersets.py:656 netbox/dcim/forms/filtersets.py:877 msgid "Has interfaces" msgstr "Heeft interfaces" -#: netbox/dcim/filtersets.py:587 netbox/dcim/filtersets.py:708 -#: netbox/dcim/filtersets.py:1151 netbox/dcim/forms/filtersets.py:566 -#: netbox/dcim/forms/filtersets.py:662 netbox/dcim/forms/filtersets.py:883 +#: netbox/dcim/filtersets.py:588 netbox/dcim/filtersets.py:709 +#: netbox/dcim/filtersets.py:1152 netbox/dcim/forms/filtersets.py:567 +#: netbox/dcim/forms/filtersets.py:663 netbox/dcim/forms/filtersets.py:884 msgid "Has pass-through ports" msgstr "Heeft pass-through-poorten" -#: netbox/dcim/filtersets.py:591 netbox/dcim/filtersets.py:1155 -#: netbox/dcim/forms/filtersets.py:580 +#: netbox/dcim/filtersets.py:592 netbox/dcim/filtersets.py:1156 +#: netbox/dcim/forms/filtersets.py:581 msgid "Has module bays" msgstr "Heeft modulevakken" -#: netbox/dcim/filtersets.py:595 netbox/dcim/filtersets.py:1159 -#: netbox/dcim/forms/filtersets.py:573 +#: netbox/dcim/filtersets.py:596 netbox/dcim/filtersets.py:1160 +#: netbox/dcim/forms/filtersets.py:574 msgid "Has device bays" msgstr "Heeft apparaatvakken" -#: netbox/dcim/filtersets.py:599 netbox/dcim/forms/filtersets.py:587 +#: netbox/dcim/filtersets.py:600 netbox/dcim/forms/filtersets.py:588 msgid "Has inventory items" msgstr "Heeft inventarisitems" -#: netbox/dcim/filtersets.py:756 netbox/dcim/filtersets.py:989 -#: netbox/dcim/filtersets.py:1436 +#: netbox/dcim/filtersets.py:757 netbox/dcim/filtersets.py:990 +#: netbox/dcim/filtersets.py:1438 msgid "Device type (ID)" msgstr "Soort apparaat (ID)" -#: netbox/dcim/filtersets.py:772 netbox/dcim/filtersets.py:1317 +#: netbox/dcim/filtersets.py:773 netbox/dcim/filtersets.py:1319 msgid "Module type (ID)" msgstr "Moduletype (ID)" -#: netbox/dcim/filtersets.py:804 netbox/dcim/filtersets.py:1591 +#: netbox/dcim/filtersets.py:805 netbox/dcim/filtersets.py:1593 msgid "Power port (ID)" msgstr "Voedingspoort (ID)" -#: netbox/dcim/filtersets.py:878 netbox/dcim/filtersets.py:1836 +#: netbox/dcim/filtersets.py:879 netbox/dcim/filtersets.py:1956 msgid "Parent inventory item (ID)" msgstr "Onderliggend inventarisitem (ID)" -#: netbox/dcim/filtersets.py:921 netbox/dcim/filtersets.py:947 -#: netbox/dcim/filtersets.py:1127 netbox/virtualization/filtersets.py:238 +#: netbox/dcim/filtersets.py:922 netbox/dcim/filtersets.py:948 +#: netbox/dcim/filtersets.py:1128 netbox/virtualization/filtersets.py:204 msgid "Config template (ID)" msgstr "Configuratiesjabloon (ID)" -#: netbox/dcim/filtersets.py:985 +#: netbox/dcim/filtersets.py:986 msgid "Device type (slug)" msgstr "Soort apparaat (slug)" -#: netbox/dcim/filtersets.py:1005 +#: netbox/dcim/filtersets.py:1006 msgid "Parent Device (ID)" msgstr "Ouderapparaat (ID)" -#: netbox/dcim/filtersets.py:1009 netbox/virtualization/filtersets.py:220 +#: netbox/dcim/filtersets.py:1010 netbox/virtualization/filtersets.py:186 msgid "Platform (ID)" msgstr "Platform (ID)" -#: netbox/dcim/filtersets.py:1015 netbox/extras/filtersets.py:569 -#: netbox/virtualization/filtersets.py:226 +#: netbox/dcim/filtersets.py:1016 netbox/extras/filtersets.py:569 +#: netbox/virtualization/filtersets.py:192 msgid "Platform (slug)" msgstr "Platform (slug)" -#: netbox/dcim/filtersets.py:1051 netbox/dcim/filtersets.py:1399 -#: netbox/dcim/filtersets.py:1934 netbox/dcim/filtersets.py:2176 -#: netbox/dcim/filtersets.py:2235 +#: netbox/dcim/filtersets.py:1052 netbox/dcim/filtersets.py:1401 +#: netbox/dcim/filtersets.py:2058 netbox/dcim/filtersets.py:2300 +#: netbox/dcim/filtersets.py:2359 msgid "Site name (slug)" msgstr "Sitenaam (slug)" -#: netbox/dcim/filtersets.py:1067 +#: netbox/dcim/filtersets.py:1068 msgid "Parent bay (ID)" msgstr "Ouderbaby (ID)" -#: netbox/dcim/filtersets.py:1071 +#: netbox/dcim/filtersets.py:1072 msgid "VM cluster (ID)" msgstr "VM-cluster (ID)" -#: netbox/dcim/filtersets.py:1077 netbox/extras/filtersets.py:591 -#: netbox/virtualization/filtersets.py:136 +#: netbox/dcim/filtersets.py:1078 netbox/extras/filtersets.py:591 +#: netbox/virtualization/filtersets.py:102 msgid "Cluster group (slug)" msgstr "Clustergroep (slug)" -#: netbox/dcim/filtersets.py:1082 netbox/virtualization/filtersets.py:130 +#: netbox/dcim/filtersets.py:1083 netbox/virtualization/filtersets.py:96 msgid "Cluster group (ID)" msgstr "Clustergroep (ID)" -#: netbox/dcim/filtersets.py:1088 +#: netbox/dcim/filtersets.py:1089 msgid "Device model (slug)" msgstr "Apparaatmodel (slug)" -#: netbox/dcim/filtersets.py:1099 netbox/dcim/forms/bulk_edit.py:522 +#: netbox/dcim/filtersets.py:1100 netbox/dcim/forms/bulk_edit.py:525 msgid "Is full depth" msgstr "Is volledige diepte" -#: netbox/dcim/filtersets.py:1103 netbox/dcim/forms/common.py:18 -#: netbox/dcim/forms/filtersets.py:818 netbox/dcim/forms/filtersets.py:1385 -#: netbox/dcim/models/device_components.py:518 -#: netbox/virtualization/filtersets.py:230 -#: netbox/virtualization/filtersets.py:301 -#: netbox/virtualization/forms/filtersets.py:172 -#: netbox/virtualization/forms/filtersets.py:223 +#: netbox/dcim/filtersets.py:1104 netbox/dcim/forms/filtersets.py:819 +#: netbox/dcim/forms/filtersets.py:1390 netbox/dcim/forms/filtersets.py:1586 +#: netbox/dcim/forms/filtersets.py:1591 netbox/dcim/forms/model_forms.py:1762 +#: netbox/dcim/models/devices.py:1505 netbox/dcim/models/devices.py:1526 +#: netbox/virtualization/filtersets.py:196 +#: netbox/virtualization/filtersets.py:268 +#: netbox/virtualization/forms/filtersets.py:177 +#: netbox/virtualization/forms/filtersets.py:228 msgid "MAC address" msgstr "MAC-adres" -#: netbox/dcim/filtersets.py:1110 netbox/dcim/filtersets.py:1274 -#: netbox/dcim/forms/filtersets.py:827 netbox/dcim/forms/filtersets.py:930 -#: netbox/virtualization/filtersets.py:234 -#: netbox/virtualization/forms/filtersets.py:176 +#: netbox/dcim/filtersets.py:1111 netbox/dcim/filtersets.py:1276 +#: netbox/dcim/forms/filtersets.py:828 netbox/dcim/forms/filtersets.py:931 +#: netbox/virtualization/filtersets.py:200 +#: netbox/virtualization/forms/filtersets.py:181 msgid "Has a primary IP" msgstr "Heeft een primair IP-adres" -#: netbox/dcim/filtersets.py:1114 +#: netbox/dcim/filtersets.py:1115 msgid "Has an out-of-band IP" msgstr "Heeft een IP-adres buiten de band" -#: netbox/dcim/filtersets.py:1119 +#: netbox/dcim/filtersets.py:1120 msgid "Virtual chassis (ID)" msgstr "Virtueel chassis (ID)" -#: netbox/dcim/filtersets.py:1123 +#: netbox/dcim/filtersets.py:1124 msgid "Is a virtual chassis member" msgstr "Is een virtueel chassislid" -#: netbox/dcim/filtersets.py:1164 +#: netbox/dcim/filtersets.py:1165 msgid "OOB IP (ID)" msgstr "OOB IP (ID)" -#: netbox/dcim/filtersets.py:1168 +#: netbox/dcim/filtersets.py:1169 msgid "Has virtual device context" msgstr "Heeft een context voor een virtueel apparaat" -#: netbox/dcim/filtersets.py:1257 +#: netbox/dcim/filtersets.py:1259 msgid "VDC (ID)" msgstr "VDC (ID)" -#: netbox/dcim/filtersets.py:1262 +#: netbox/dcim/filtersets.py:1264 msgid "Device model" msgstr "Model van het apparaat" -#: netbox/dcim/filtersets.py:1267 netbox/ipam/filtersets.py:634 -#: netbox/vpn/filtersets.py:102 netbox/vpn/filtersets.py:401 -msgid "Interface (ID)" -msgstr "Interface (ID)" - -#: netbox/dcim/filtersets.py:1323 +#: netbox/dcim/filtersets.py:1325 msgid "Module type (model)" msgstr "Moduletype (model)" -#: netbox/dcim/filtersets.py:1329 +#: netbox/dcim/filtersets.py:1331 msgid "Module bay (ID)" msgstr "Modulevak (ID)" -#: netbox/dcim/filtersets.py:1333 netbox/dcim/filtersets.py:1425 -#: netbox/ipam/filtersets.py:613 netbox/ipam/filtersets.py:853 -#: netbox/ipam/filtersets.py:1117 netbox/virtualization/filtersets.py:161 -#: netbox/vpn/filtersets.py:379 +#: netbox/dcim/filtersets.py:1335 netbox/dcim/filtersets.py:1427 +#: netbox/dcim/filtersets.py:1613 netbox/ipam/filtersets.py:580 +#: netbox/ipam/filtersets.py:820 netbox/ipam/filtersets.py:1142 +#: netbox/virtualization/filtersets.py:127 netbox/vpn/filtersets.py:379 msgid "Device (ID)" msgstr "Apparaat (ID)" -#: netbox/dcim/filtersets.py:1421 +#: netbox/dcim/filtersets.py:1423 msgid "Rack (name)" msgstr "Rack (naam)" -#: netbox/dcim/filtersets.py:1431 netbox/ipam/filtersets.py:608 -#: netbox/ipam/filtersets.py:848 netbox/ipam/filtersets.py:1123 -#: netbox/vpn/filtersets.py:374 +#: netbox/dcim/filtersets.py:1433 netbox/dcim/filtersets.py:1608 +#: netbox/ipam/filtersets.py:575 netbox/ipam/filtersets.py:815 +#: netbox/ipam/filtersets.py:1148 netbox/vpn/filtersets.py:374 msgid "Device (name)" msgstr "Apparaat (naam)" -#: netbox/dcim/filtersets.py:1442 +#: netbox/dcim/filtersets.py:1444 msgid "Device type (model)" msgstr "Soort apparaat (model)" -#: netbox/dcim/filtersets.py:1447 +#: netbox/dcim/filtersets.py:1449 msgid "Device role (ID)" msgstr "Rol van het apparaat (ID)" -#: netbox/dcim/filtersets.py:1453 +#: netbox/dcim/filtersets.py:1455 msgid "Device role (slug)" msgstr "Rol van het apparaat (slug)" -#: netbox/dcim/filtersets.py:1458 +#: netbox/dcim/filtersets.py:1460 msgid "Virtual Chassis (ID)" msgstr "Virtueel chassis (ID)" -#: netbox/dcim/filtersets.py:1464 netbox/dcim/forms/filtersets.py:109 -#: netbox/dcim/tables/devices.py:206 netbox/netbox/navigation/menu.py:79 +#: netbox/dcim/filtersets.py:1466 netbox/dcim/forms/filtersets.py:110 +#: netbox/dcim/tables/devices.py:217 netbox/netbox/navigation/menu.py:79 #: netbox/templates/dcim/device.html:120 #: netbox/templates/dcim/device_edit.html:93 #: netbox/templates/dcim/virtualchassis.html:20 @@ -3265,168 +3705,231 @@ msgstr "Virtueel chassis (ID)" msgid "Virtual Chassis" msgstr "Virtueel chassis" -#: netbox/dcim/filtersets.py:1488 +#: netbox/dcim/filtersets.py:1490 msgid "Module (ID)" msgstr "Module (ID)" -#: netbox/dcim/filtersets.py:1495 +#: netbox/dcim/filtersets.py:1497 msgid "Cable (ID)" msgstr "Kabel (ID)" -#: netbox/dcim/filtersets.py:1604 netbox/ipam/forms/bulk_import.py:189 +#: netbox/dcim/filtersets.py:1618 netbox/ipam/filtersets.py:585 +#: netbox/ipam/filtersets.py:825 netbox/ipam/filtersets.py:1158 +#: netbox/vpn/filtersets.py:385 +msgid "Virtual machine (name)" +msgstr "Virtuele machine (naam)" + +#: netbox/dcim/filtersets.py:1623 netbox/ipam/filtersets.py:590 +#: netbox/ipam/filtersets.py:830 netbox/ipam/filtersets.py:1152 +#: netbox/virtualization/filtersets.py:248 +#: netbox/virtualization/filtersets.py:299 netbox/vpn/filtersets.py:390 +msgid "Virtual machine (ID)" +msgstr "Virtuele machine (ID)" + +#: netbox/dcim/filtersets.py:1629 netbox/ipam/filtersets.py:596 +#: netbox/vpn/filtersets.py:97 netbox/vpn/filtersets.py:396 +msgid "Interface (name)" +msgstr "Interface (naam)" + +#: netbox/dcim/filtersets.py:1640 netbox/ipam/filtersets.py:607 +#: netbox/vpn/filtersets.py:108 netbox/vpn/filtersets.py:407 +msgid "VM interface (name)" +msgstr "VM-interface (naam)" + +#: netbox/dcim/filtersets.py:1645 netbox/ipam/filtersets.py:612 +#: netbox/vpn/filtersets.py:113 +msgid "VM interface (ID)" +msgstr "VM-interface (ID)" + +#: netbox/dcim/filtersets.py:1687 netbox/ipam/forms/bulk_import.py:185 #: netbox/vpn/forms/bulk_import.py:308 msgid "Assigned VLAN" msgstr "Toegewezen VLAN" -#: netbox/dcim/filtersets.py:1608 +#: netbox/dcim/filtersets.py:1691 msgid "Assigned VID" msgstr "Toegewezen VID" -#: netbox/dcim/filtersets.py:1613 netbox/dcim/forms/bulk_edit.py:1531 -#: netbox/dcim/forms/bulk_import.py:913 netbox/dcim/forms/filtersets.py:1428 -#: netbox/dcim/forms/model_forms.py:1385 -#: netbox/dcim/models/device_components.py:711 -#: netbox/dcim/tables/devices.py:626 netbox/ipam/filtersets.py:318 -#: netbox/ipam/filtersets.py:329 netbox/ipam/filtersets.py:485 -#: netbox/ipam/filtersets.py:586 netbox/ipam/filtersets.py:597 -#: netbox/ipam/forms/bulk_edit.py:242 netbox/ipam/forms/bulk_edit.py:298 -#: netbox/ipam/forms/bulk_edit.py:340 netbox/ipam/forms/bulk_import.py:157 -#: netbox/ipam/forms/bulk_import.py:243 netbox/ipam/forms/bulk_import.py:279 -#: netbox/ipam/forms/filtersets.py:67 netbox/ipam/forms/filtersets.py:172 -#: netbox/ipam/forms/filtersets.py:309 netbox/ipam/forms/model_forms.py:62 -#: netbox/ipam/forms/model_forms.py:202 netbox/ipam/forms/model_forms.py:247 -#: netbox/ipam/forms/model_forms.py:300 netbox/ipam/forms/model_forms.py:464 -#: netbox/ipam/forms/model_forms.py:478 netbox/ipam/forms/model_forms.py:492 -#: netbox/ipam/models/ip.py:233 netbox/ipam/models/ip.py:512 -#: netbox/ipam/models/ip.py:720 netbox/ipam/models/vrfs.py:62 -#: netbox/ipam/tables/ip.py:242 netbox/ipam/tables/ip.py:309 -#: netbox/ipam/tables/ip.py:360 netbox/ipam/tables/ip.py:450 -#: netbox/templates/dcim/interface.html:133 +#: netbox/dcim/filtersets.py:1696 netbox/dcim/forms/bulk_edit.py:1544 +#: netbox/dcim/forms/bulk_import.py:921 netbox/dcim/forms/filtersets.py:1433 +#: netbox/dcim/forms/model_forms.py:1411 +#: netbox/dcim/models/device_components.py:749 +#: netbox/dcim/tables/devices.py:648 netbox/ipam/filtersets.py:321 +#: netbox/ipam/filtersets.py:332 netbox/ipam/filtersets.py:452 +#: netbox/ipam/filtersets.py:553 netbox/ipam/filtersets.py:564 +#: netbox/ipam/forms/bulk_edit.py:226 netbox/ipam/forms/bulk_edit.py:282 +#: netbox/ipam/forms/bulk_edit.py:324 netbox/ipam/forms/bulk_import.py:160 +#: netbox/ipam/forms/bulk_import.py:242 netbox/ipam/forms/bulk_import.py:278 +#: netbox/ipam/forms/filtersets.py:69 netbox/ipam/forms/filtersets.py:174 +#: netbox/ipam/forms/filtersets.py:312 netbox/ipam/forms/model_forms.py:65 +#: netbox/ipam/forms/model_forms.py:208 netbox/ipam/forms/model_forms.py:256 +#: netbox/ipam/forms/model_forms.py:310 netbox/ipam/forms/model_forms.py:474 +#: netbox/ipam/forms/model_forms.py:488 netbox/ipam/forms/model_forms.py:502 +#: netbox/ipam/models/ip.py:217 netbox/ipam/models/ip.py:498 +#: netbox/ipam/models/ip.py:719 netbox/ipam/models/vrfs.py:61 +#: netbox/ipam/tables/ip.py:188 netbox/ipam/tables/ip.py:261 +#: netbox/ipam/tables/ip.py:312 netbox/ipam/tables/ip.py:402 +#: netbox/templates/dcim/interface.html:152 #: netbox/templates/ipam/ipaddress.html:18 #: netbox/templates/ipam/iprange.html:40 netbox/templates/ipam/prefix.html:19 #: netbox/templates/ipam/vrf.html:7 netbox/templates/ipam/vrf.html:13 -#: netbox/templates/virtualization/vminterface.html:47 -#: netbox/virtualization/forms/bulk_edit.py:261 -#: netbox/virtualization/forms/bulk_import.py:171 -#: netbox/virtualization/forms/filtersets.py:228 -#: netbox/virtualization/forms/model_forms.py:344 -#: netbox/virtualization/models/virtualmachines.py:355 -#: netbox/virtualization/tables/virtualmachines.py:143 +#: netbox/templates/virtualization/vminterface.html:84 +#: netbox/virtualization/forms/bulk_edit.py:243 +#: netbox/virtualization/forms/bulk_import.py:177 +#: netbox/virtualization/forms/filtersets.py:233 +#: netbox/virtualization/forms/model_forms.py:368 +#: netbox/virtualization/models/virtualmachines.py:331 +#: netbox/virtualization/tables/virtualmachines.py:113 msgid "VRF" msgstr "VRF" -#: netbox/dcim/filtersets.py:1619 netbox/ipam/filtersets.py:324 -#: netbox/ipam/filtersets.py:335 netbox/ipam/filtersets.py:491 -#: netbox/ipam/filtersets.py:592 netbox/ipam/filtersets.py:603 +#: netbox/dcim/filtersets.py:1702 netbox/ipam/filtersets.py:327 +#: netbox/ipam/filtersets.py:338 netbox/ipam/filtersets.py:458 +#: netbox/ipam/filtersets.py:559 netbox/ipam/filtersets.py:570 msgid "VRF (RD)" msgstr "VRF (RD)" -#: netbox/dcim/filtersets.py:1624 netbox/ipam/filtersets.py:1032 +#: netbox/dcim/filtersets.py:1707 netbox/ipam/filtersets.py:1010 #: netbox/vpn/filtersets.py:342 msgid "L2VPN (ID)" msgstr "L2VPN (ID)" -#: netbox/dcim/filtersets.py:1630 netbox/dcim/forms/filtersets.py:1433 -#: netbox/dcim/tables/devices.py:570 netbox/ipam/filtersets.py:1038 -#: netbox/ipam/forms/filtersets.py:518 netbox/ipam/tables/vlans.py:137 -#: netbox/templates/dcim/interface.html:93 netbox/templates/ipam/vlan.html:66 +#: netbox/dcim/filtersets.py:1713 netbox/dcim/forms/filtersets.py:1438 +#: netbox/dcim/tables/devices.py:584 netbox/ipam/filtersets.py:1016 +#: netbox/ipam/forms/filtersets.py:570 netbox/ipam/tables/vlans.py:113 +#: netbox/templates/dcim/interface.html:99 netbox/templates/ipam/vlan.html:82 #: netbox/templates/vpn/l2vpntermination.html:12 -#: netbox/virtualization/forms/filtersets.py:233 +#: netbox/virtualization/forms/filtersets.py:238 #: netbox/vpn/forms/bulk_import.py:280 netbox/vpn/forms/filtersets.py:246 -#: netbox/vpn/forms/model_forms.py:409 netbox/vpn/forms/model_forms.py:427 +#: netbox/vpn/forms/model_forms.py:412 netbox/vpn/forms/model_forms.py:430 #: netbox/vpn/models/l2vpn.py:63 netbox/vpn/tables/l2vpn.py:55 msgid "L2VPN" msgstr "L2VPN" -#: netbox/dcim/filtersets.py:1662 +#: netbox/dcim/filtersets.py:1718 netbox/ipam/filtersets.py:1091 +msgid "VLAN Translation Policy (ID)" +msgstr "VLAN-vertaalbeleid (ID)" + +#: netbox/dcim/filtersets.py:1724 netbox/dcim/forms/model_forms.py:1428 +#: netbox/dcim/models/device_components.py:568 +#: netbox/ipam/forms/filtersets.py:489 netbox/ipam/forms/model_forms.py:712 +#: netbox/templates/ipam/vlantranslationpolicy.html:11 +#: netbox/virtualization/forms/bulk_edit.py:248 +#: netbox/virtualization/forms/model_forms.py:373 +msgid "VLAN Translation Policy" +msgstr "VLAN-vertaalbeleid" + +#: netbox/dcim/filtersets.py:1758 msgid "Virtual Chassis Interfaces for Device" msgstr "Virtuele chassisinterfaces voor apparaten" -#: netbox/dcim/filtersets.py:1667 +#: netbox/dcim/filtersets.py:1763 msgid "Virtual Chassis Interfaces for Device (ID)" msgstr "Virtuele chassisinterfaces voor apparaat (ID)" -#: netbox/dcim/filtersets.py:1671 +#: netbox/dcim/filtersets.py:1767 msgid "Kind of interface" msgstr "Soort interface" -#: netbox/dcim/filtersets.py:1676 netbox/virtualization/filtersets.py:293 +#: netbox/dcim/filtersets.py:1772 netbox/virtualization/filtersets.py:259 msgid "Parent interface (ID)" msgstr "Ouderinterface (ID)" -#: netbox/dcim/filtersets.py:1681 netbox/virtualization/filtersets.py:298 +#: netbox/dcim/filtersets.py:1777 netbox/virtualization/filtersets.py:264 msgid "Bridged interface (ID)" msgstr "Overbrugde interface (ID)" -#: netbox/dcim/filtersets.py:1686 +#: netbox/dcim/filtersets.py:1782 msgid "LAG interface (ID)" msgstr "LAG-interface (ID)" -#: netbox/dcim/filtersets.py:1713 netbox/dcim/filtersets.py:1725 -#: netbox/dcim/forms/filtersets.py:1345 netbox/dcim/forms/model_forms.py:1697 +#: netbox/dcim/filtersets.py:1790 netbox/dcim/tables/devices.py:606 +#: netbox/dcim/tables/devices.py:1136 netbox/templates/dcim/interface.html:131 +#: netbox/templates/dcim/macaddress.html:11 +#: netbox/templates/dcim/macaddress.html:14 +#: netbox/templates/virtualization/vminterface.html:73 +msgid "MAC Address" +msgstr "MAC-adres" + +#: netbox/dcim/filtersets.py:1795 netbox/virtualization/filtersets.py:273 +msgid "Primary MAC address (ID)" +msgstr "Primair MAC-adres (ID)" + +#: netbox/dcim/filtersets.py:1801 netbox/dcim/forms/model_forms.py:1415 +#: netbox/virtualization/filtersets.py:279 +#: netbox/virtualization/forms/model_forms.py:311 +msgid "Primary MAC address" +msgstr "Primair MAC-adres" + +#: netbox/dcim/filtersets.py:1823 netbox/dcim/filtersets.py:1835 +#: netbox/dcim/forms/filtersets.py:1350 netbox/dcim/forms/model_forms.py:1742 #: netbox/templates/dcim/virtualdevicecontext.html:15 msgid "Virtual Device Context" msgstr "Context van het virtuele apparaat" -#: netbox/dcim/filtersets.py:1719 +#: netbox/dcim/filtersets.py:1829 msgid "Virtual Device Context (Identifier)" msgstr "Context van het virtuele apparaat (ID)" -#: netbox/dcim/filtersets.py:1730 +#: netbox/dcim/filtersets.py:1840 #: netbox/templates/wireless/wirelesslan.html:11 -#: netbox/wireless/forms/model_forms.py:53 +#: netbox/wireless/forms/model_forms.py:55 msgid "Wireless LAN" msgstr "Draadloos LAN" -#: netbox/dcim/filtersets.py:1734 netbox/dcim/tables/devices.py:613 +#: netbox/dcim/filtersets.py:1844 netbox/dcim/tables/devices.py:635 msgid "Wireless link" msgstr "Draadloze link" -#: netbox/dcim/filtersets.py:1803 +#: netbox/dcim/filtersets.py:1854 +msgid "Virtual circuit termination (ID)" +msgstr "Beëindiging van het virtuele circuit (ID)" + +#: netbox/dcim/filtersets.py:1923 msgid "Parent module bay (ID)" msgstr "Baai voor oudermodule (ID)" -#: netbox/dcim/filtersets.py:1808 +#: netbox/dcim/filtersets.py:1928 msgid "Installed module (ID)" msgstr "Geïnstalleerde module (ID)" -#: netbox/dcim/filtersets.py:1819 +#: netbox/dcim/filtersets.py:1939 msgid "Installed device (ID)" msgstr "Geïnstalleerd apparaat (ID)" -#: netbox/dcim/filtersets.py:1825 +#: netbox/dcim/filtersets.py:1945 msgid "Installed device (name)" msgstr "Geïnstalleerd apparaat (naam)" -#: netbox/dcim/filtersets.py:1891 +#: netbox/dcim/filtersets.py:2015 msgid "Master (ID)" msgstr "Meester (ID)" -#: netbox/dcim/filtersets.py:1897 +#: netbox/dcim/filtersets.py:2021 msgid "Master (name)" msgstr "Master (naam)" -#: netbox/dcim/filtersets.py:1939 netbox/tenancy/filtersets.py:245 +#: netbox/dcim/filtersets.py:2063 netbox/tenancy/filtersets.py:245 msgid "Tenant (ID)" msgstr "Tenant (ID)" -#: netbox/dcim/filtersets.py:1945 netbox/extras/filtersets.py:618 +#: netbox/dcim/filtersets.py:2069 netbox/extras/filtersets.py:618 #: netbox/tenancy/filtersets.py:251 msgid "Tenant (slug)" msgstr "Tenant (slug)" -#: netbox/dcim/filtersets.py:1981 netbox/dcim/forms/filtersets.py:1077 +#: netbox/dcim/filtersets.py:2105 netbox/dcim/forms/filtersets.py:1078 msgid "Unterminated" msgstr "Onbeëindigd" -#: netbox/dcim/filtersets.py:2239 +#: netbox/dcim/filtersets.py:2363 msgid "Power panel (ID)" msgstr "Voedingspaneel (ID)" -#: netbox/dcim/forms/bulk_create.py:40 netbox/extras/forms/filtersets.py:401 -#: netbox/extras/forms/model_forms.py:567 -#: netbox/extras/forms/model_forms.py:619 netbox/netbox/forms/base.py:86 -#: netbox/netbox/forms/mixins.py:81 netbox/netbox/tables/columns.py:478 +#: netbox/dcim/forms/bulk_create.py:40 netbox/extras/forms/filtersets.py:408 +#: netbox/extras/forms/model_forms.py:581 +#: netbox/extras/forms/model_forms.py:633 netbox/netbox/forms/base.py:86 +#: netbox/netbox/forms/mixins.py:91 netbox/netbox/tables/columns.py:481 #: netbox/templates/circuits/inc/circuit_termination.html:32 #: netbox/templates/generic/bulk_edit.html:65 #: netbox/templates/inc/panels/tags.html:5 @@ -3434,11 +3937,11 @@ msgstr "Voedingspaneel (ID)" msgid "Tags" msgstr "Labels" -#: netbox/dcim/forms/bulk_create.py:112 netbox/dcim/forms/filtersets.py:1498 -#: netbox/dcim/forms/model_forms.py:488 netbox/dcim/forms/model_forms.py:546 +#: netbox/dcim/forms/bulk_create.py:112 netbox/dcim/forms/filtersets.py:1503 +#: netbox/dcim/forms/model_forms.py:498 netbox/dcim/forms/model_forms.py:557 #: netbox/dcim/forms/object_create.py:197 -#: netbox/dcim/forms/object_create.py:345 netbox/dcim/tables/devices.py:165 -#: netbox/dcim/tables/devices.py:707 netbox/dcim/tables/devicetypes.py:246 +#: netbox/dcim/forms/object_create.py:345 netbox/dcim/tables/devices.py:176 +#: netbox/dcim/tables/devices.py:741 netbox/dcim/tables/devicetypes.py:253 #: netbox/templates/dcim/device.html:43 netbox/templates/dcim/device.html:131 #: netbox/templates/dcim/modulebay.html:38 #: netbox/templates/dcim/virtualchassis.html:66 @@ -3454,114 +3957,114 @@ msgstr "" "Alfanumerieke reeksen worden ondersteund. (Moet overeenkomen met het aantal " "namen dat wordt aangemaakt.)" -#: netbox/dcim/forms/bulk_edit.py:133 +#: netbox/dcim/forms/bulk_edit.py:136 msgid "Contact name" msgstr "Naam van de contactpersoon" -#: netbox/dcim/forms/bulk_edit.py:138 +#: netbox/dcim/forms/bulk_edit.py:141 msgid "Contact phone" msgstr "Telefoonnummer contacteren" -#: netbox/dcim/forms/bulk_edit.py:144 +#: netbox/dcim/forms/bulk_edit.py:147 msgid "Contact E-mail" msgstr "E-mailadres voor contact" -#: netbox/dcim/forms/bulk_edit.py:147 netbox/dcim/forms/bulk_import.py:123 -#: netbox/dcim/forms/model_forms.py:128 +#: netbox/dcim/forms/bulk_edit.py:150 netbox/dcim/forms/bulk_import.py:125 +#: netbox/dcim/forms/model_forms.py:132 msgid "Time zone" msgstr "Tijdzone" -#: netbox/dcim/forms/bulk_edit.py:225 netbox/dcim/forms/bulk_edit.py:501 -#: netbox/dcim/forms/bulk_edit.py:565 netbox/dcim/forms/bulk_edit.py:638 -#: netbox/dcim/forms/bulk_edit.py:662 netbox/dcim/forms/bulk_edit.py:755 -#: netbox/dcim/forms/bulk_edit.py:1282 netbox/dcim/forms/bulk_edit.py:1703 -#: netbox/dcim/forms/bulk_import.py:182 netbox/dcim/forms/bulk_import.py:393 -#: netbox/dcim/forms/bulk_import.py:427 netbox/dcim/forms/bulk_import.py:472 -#: netbox/dcim/forms/bulk_import.py:508 netbox/dcim/forms/bulk_import.py:1104 -#: netbox/dcim/forms/filtersets.py:313 netbox/dcim/forms/filtersets.py:372 -#: netbox/dcim/forms/filtersets.py:494 netbox/dcim/forms/filtersets.py:619 -#: netbox/dcim/forms/filtersets.py:700 netbox/dcim/forms/filtersets.py:782 -#: netbox/dcim/forms/filtersets.py:947 netbox/dcim/forms/filtersets.py:1539 -#: netbox/dcim/forms/model_forms.py:207 netbox/dcim/forms/model_forms.py:337 -#: netbox/dcim/forms/model_forms.py:349 netbox/dcim/forms/model_forms.py:395 -#: netbox/dcim/forms/model_forms.py:436 netbox/dcim/forms/model_forms.py:1082 -#: netbox/dcim/forms/model_forms.py:1522 -#: netbox/dcim/forms/object_import.py:187 netbox/dcim/tables/devices.py:96 -#: netbox/dcim/tables/devices.py:172 netbox/dcim/tables/devices.py:940 -#: netbox/dcim/tables/devicetypes.py:80 netbox/dcim/tables/devicetypes.py:308 +#: netbox/dcim/forms/bulk_edit.py:228 netbox/dcim/forms/bulk_edit.py:504 +#: netbox/dcim/forms/bulk_edit.py:568 netbox/dcim/forms/bulk_edit.py:641 +#: netbox/dcim/forms/bulk_edit.py:665 netbox/dcim/forms/bulk_edit.py:758 +#: netbox/dcim/forms/bulk_edit.py:1285 netbox/dcim/forms/bulk_edit.py:1718 +#: netbox/dcim/forms/bulk_import.py:184 netbox/dcim/forms/bulk_import.py:395 +#: netbox/dcim/forms/bulk_import.py:429 netbox/dcim/forms/bulk_import.py:477 +#: netbox/dcim/forms/bulk_import.py:513 netbox/dcim/forms/bulk_import.py:1112 +#: netbox/dcim/forms/filtersets.py:314 netbox/dcim/forms/filtersets.py:373 +#: netbox/dcim/forms/filtersets.py:495 netbox/dcim/forms/filtersets.py:620 +#: netbox/dcim/forms/filtersets.py:701 netbox/dcim/forms/filtersets.py:783 +#: netbox/dcim/forms/filtersets.py:948 netbox/dcim/forms/filtersets.py:1544 +#: netbox/dcim/forms/model_forms.py:211 netbox/dcim/forms/model_forms.py:345 +#: netbox/dcim/forms/model_forms.py:357 netbox/dcim/forms/model_forms.py:404 +#: netbox/dcim/forms/model_forms.py:445 netbox/dcim/forms/model_forms.py:1095 +#: netbox/dcim/forms/model_forms.py:1564 +#: netbox/dcim/forms/object_import.py:188 netbox/dcim/tables/devices.py:107 +#: netbox/dcim/tables/devices.py:183 netbox/dcim/tables/devices.py:970 +#: netbox/dcim/tables/devicetypes.py:85 netbox/dcim/tables/devicetypes.py:315 #: netbox/dcim/tables/modules.py:20 netbox/dcim/tables/modules.py:61 -#: netbox/dcim/tables/racks.py:58 netbox/dcim/tables/racks.py:132 +#: netbox/dcim/tables/racks.py:58 netbox/dcim/tables/racks.py:131 #: netbox/templates/dcim/devicetype.html:14 -#: netbox/templates/dcim/inventoryitem.html:44 +#: netbox/templates/dcim/inventoryitem.html:48 #: netbox/templates/dcim/manufacturer.html:33 #: netbox/templates/dcim/modulebay.html:62 -#: netbox/templates/dcim/moduletype.html:25 +#: netbox/templates/dcim/moduletype.html:27 #: netbox/templates/dcim/platform.html:37 #: netbox/templates/dcim/racktype.html:16 msgid "Manufacturer" msgstr "Fabrikant" -#: netbox/dcim/forms/bulk_edit.py:230 netbox/dcim/forms/bulk_edit.py:378 -#: netbox/dcim/forms/bulk_import.py:191 netbox/dcim/forms/bulk_import.py:270 -#: netbox/dcim/forms/filtersets.py:255 +#: netbox/dcim/forms/bulk_edit.py:233 netbox/dcim/forms/bulk_edit.py:381 +#: netbox/dcim/forms/bulk_import.py:193 netbox/dcim/forms/bulk_import.py:272 +#: netbox/dcim/forms/filtersets.py:256 #: netbox/templates/dcim/inc/panels/racktype_dimensions.html:6 msgid "Form factor" msgstr "Vormfactor" -#: netbox/dcim/forms/bulk_edit.py:235 netbox/dcim/forms/bulk_edit.py:383 -#: netbox/dcim/forms/bulk_import.py:199 netbox/dcim/forms/bulk_import.py:273 -#: netbox/dcim/forms/filtersets.py:260 +#: netbox/dcim/forms/bulk_edit.py:238 netbox/dcim/forms/bulk_edit.py:386 +#: netbox/dcim/forms/bulk_import.py:201 netbox/dcim/forms/bulk_import.py:275 +#: netbox/dcim/forms/filtersets.py:261 #: netbox/templates/dcim/inc/panels/racktype_dimensions.html:10 msgid "Width" msgstr "Breedte" -#: netbox/dcim/forms/bulk_edit.py:241 netbox/dcim/forms/bulk_edit.py:389 -#: netbox/dcim/forms/bulk_import.py:280 +#: netbox/dcim/forms/bulk_edit.py:244 netbox/dcim/forms/bulk_edit.py:392 +#: netbox/dcim/forms/bulk_import.py:282 #: netbox/templates/dcim/devicetype.html:37 msgid "Height (U)" msgstr "Hoogte (U)" -#: netbox/dcim/forms/bulk_edit.py:250 netbox/dcim/forms/bulk_edit.py:394 -#: netbox/dcim/forms/filtersets.py:274 +#: netbox/dcim/forms/bulk_edit.py:253 netbox/dcim/forms/bulk_edit.py:397 +#: netbox/dcim/forms/filtersets.py:275 msgid "Descending units" msgstr "Aflopende eenheden" -#: netbox/dcim/forms/bulk_edit.py:253 netbox/dcim/forms/bulk_edit.py:397 +#: netbox/dcim/forms/bulk_edit.py:256 netbox/dcim/forms/bulk_edit.py:400 msgid "Outer width" msgstr "Buitenbreedte" -#: netbox/dcim/forms/bulk_edit.py:258 netbox/dcim/forms/bulk_edit.py:402 +#: netbox/dcim/forms/bulk_edit.py:261 netbox/dcim/forms/bulk_edit.py:405 msgid "Outer depth" msgstr "Buitendiepte" -#: netbox/dcim/forms/bulk_edit.py:263 netbox/dcim/forms/bulk_edit.py:407 -#: netbox/dcim/forms/bulk_import.py:204 netbox/dcim/forms/bulk_import.py:283 +#: netbox/dcim/forms/bulk_edit.py:266 netbox/dcim/forms/bulk_edit.py:410 +#: netbox/dcim/forms/bulk_import.py:206 netbox/dcim/forms/bulk_import.py:285 msgid "Outer unit" msgstr "Buitenste eenheid" -#: netbox/dcim/forms/bulk_edit.py:268 netbox/dcim/forms/bulk_edit.py:412 +#: netbox/dcim/forms/bulk_edit.py:271 netbox/dcim/forms/bulk_edit.py:415 msgid "Mounting depth" msgstr "Inbouwdiepte" -#: netbox/dcim/forms/bulk_edit.py:273 netbox/dcim/forms/bulk_edit.py:300 -#: netbox/dcim/forms/bulk_edit.py:422 netbox/dcim/forms/bulk_edit.py:452 -#: netbox/dcim/forms/bulk_edit.py:535 netbox/dcim/forms/bulk_edit.py:558 -#: netbox/dcim/forms/bulk_edit.py:579 netbox/dcim/forms/bulk_edit.py:601 -#: netbox/dcim/forms/bulk_import.py:406 netbox/dcim/forms/bulk_import.py:438 -#: netbox/dcim/forms/filtersets.py:285 netbox/dcim/forms/filtersets.py:307 -#: netbox/dcim/forms/filtersets.py:327 netbox/dcim/forms/filtersets.py:401 -#: netbox/dcim/forms/filtersets.py:488 netbox/dcim/forms/filtersets.py:594 -#: netbox/dcim/forms/filtersets.py:613 netbox/dcim/forms/filtersets.py:674 -#: netbox/dcim/forms/model_forms.py:221 netbox/dcim/forms/model_forms.py:298 -#: netbox/dcim/tables/devicetypes.py:106 netbox/dcim/tables/modules.py:35 -#: netbox/dcim/tables/racks.py:74 netbox/dcim/tables/racks.py:172 +#: netbox/dcim/forms/bulk_edit.py:276 netbox/dcim/forms/bulk_edit.py:303 +#: netbox/dcim/forms/bulk_edit.py:425 netbox/dcim/forms/bulk_edit.py:455 +#: netbox/dcim/forms/bulk_edit.py:538 netbox/dcim/forms/bulk_edit.py:561 +#: netbox/dcim/forms/bulk_edit.py:582 netbox/dcim/forms/bulk_edit.py:604 +#: netbox/dcim/forms/bulk_import.py:408 netbox/dcim/forms/bulk_import.py:440 +#: netbox/dcim/forms/filtersets.py:286 netbox/dcim/forms/filtersets.py:308 +#: netbox/dcim/forms/filtersets.py:328 netbox/dcim/forms/filtersets.py:402 +#: netbox/dcim/forms/filtersets.py:489 netbox/dcim/forms/filtersets.py:595 +#: netbox/dcim/forms/filtersets.py:614 netbox/dcim/forms/filtersets.py:675 +#: netbox/dcim/forms/model_forms.py:226 netbox/dcim/forms/model_forms.py:306 +#: netbox/dcim/tables/devicetypes.py:111 netbox/dcim/tables/modules.py:35 +#: netbox/dcim/tables/racks.py:74 netbox/dcim/tables/racks.py:171 #: netbox/extras/forms/bulk_edit.py:53 netbox/extras/forms/bulk_edit.py:133 #: netbox/extras/forms/bulk_edit.py:183 netbox/extras/forms/bulk_edit.py:288 -#: netbox/extras/forms/filtersets.py:64 netbox/extras/forms/filtersets.py:156 -#: netbox/extras/forms/filtersets.py:243 netbox/ipam/forms/bulk_edit.py:190 +#: netbox/extras/forms/filtersets.py:65 netbox/extras/forms/filtersets.py:159 +#: netbox/extras/forms/filtersets.py:249 netbox/ipam/forms/bulk_edit.py:193 #: netbox/templates/dcim/device.html:324 #: netbox/templates/dcim/devicetype.html:49 -#: netbox/templates/dcim/moduletype.html:45 netbox/templates/dcim/rack.html:81 +#: netbox/templates/dcim/moduletype.html:47 netbox/templates/dcim/rack.html:81 #: netbox/templates/dcim/racktype.html:41 #: netbox/templates/extras/configcontext.html:17 #: netbox/templates/extras/customlink.html:25 @@ -3570,131 +4073,86 @@ msgstr "Inbouwdiepte" msgid "Weight" msgstr "Gewicht" -#: netbox/dcim/forms/bulk_edit.py:278 netbox/dcim/forms/bulk_edit.py:427 -#: netbox/dcim/forms/filtersets.py:290 +#: netbox/dcim/forms/bulk_edit.py:281 netbox/dcim/forms/bulk_edit.py:430 +#: netbox/dcim/forms/filtersets.py:291 msgid "Max weight" msgstr "Maximaal gewicht" -#: netbox/dcim/forms/bulk_edit.py:283 netbox/dcim/forms/bulk_edit.py:432 -#: netbox/dcim/forms/bulk_edit.py:540 netbox/dcim/forms/bulk_edit.py:584 -#: netbox/dcim/forms/bulk_import.py:210 netbox/dcim/forms/bulk_import.py:295 -#: netbox/dcim/forms/bulk_import.py:411 netbox/dcim/forms/bulk_import.py:443 -#: netbox/dcim/forms/filtersets.py:295 netbox/dcim/forms/filtersets.py:598 -#: netbox/dcim/forms/filtersets.py:678 +#: netbox/dcim/forms/bulk_edit.py:286 netbox/dcim/forms/bulk_edit.py:435 +#: netbox/dcim/forms/bulk_edit.py:543 netbox/dcim/forms/bulk_edit.py:587 +#: netbox/dcim/forms/bulk_import.py:212 netbox/dcim/forms/bulk_import.py:297 +#: netbox/dcim/forms/bulk_import.py:413 netbox/dcim/forms/bulk_import.py:445 +#: netbox/dcim/forms/filtersets.py:296 netbox/dcim/forms/filtersets.py:599 +#: netbox/dcim/forms/filtersets.py:679 msgid "Weight unit" msgstr "Gewichtseenheid" -#: netbox/dcim/forms/bulk_edit.py:297 netbox/dcim/forms/filtersets.py:305 -#: netbox/dcim/forms/model_forms.py:217 netbox/dcim/forms/model_forms.py:256 +#: netbox/dcim/forms/bulk_edit.py:300 netbox/dcim/forms/filtersets.py:306 +#: netbox/dcim/forms/model_forms.py:222 netbox/dcim/forms/model_forms.py:261 #: netbox/templates/dcim/rack.html:45 netbox/templates/dcim/racktype.html:13 msgid "Rack Type" msgstr "Racktype" -#: netbox/dcim/forms/bulk_edit.py:299 netbox/dcim/forms/model_forms.py:220 -#: netbox/dcim/forms/model_forms.py:297 +#: netbox/dcim/forms/bulk_edit.py:302 netbox/dcim/forms/model_forms.py:225 +#: netbox/dcim/forms/model_forms.py:305 msgid "Outer Dimensions" msgstr "Buitenafmetingen" -#: netbox/dcim/forms/bulk_edit.py:302 netbox/dcim/forms/model_forms.py:222 -#: netbox/dcim/forms/model_forms.py:299 netbox/templates/dcim/device.html:315 +#: netbox/dcim/forms/bulk_edit.py:305 netbox/dcim/forms/model_forms.py:227 +#: netbox/dcim/forms/model_forms.py:307 netbox/templates/dcim/device.html:315 #: netbox/templates/dcim/inc/panels/racktype_dimensions.html:3 msgid "Dimensions" msgstr "Dimensies" -#: netbox/dcim/forms/bulk_edit.py:304 netbox/dcim/forms/filtersets.py:306 -#: netbox/dcim/forms/filtersets.py:326 netbox/dcim/forms/model_forms.py:224 +#: netbox/dcim/forms/bulk_edit.py:307 netbox/dcim/forms/filtersets.py:307 +#: netbox/dcim/forms/filtersets.py:327 netbox/dcim/forms/model_forms.py:229 #: netbox/templates/dcim/inc/panels/racktype_numbering.html:3 msgid "Numbering" msgstr "Nummering" -#: netbox/dcim/forms/bulk_edit.py:358 netbox/dcim/forms/bulk_edit.py:1277 -#: netbox/dcim/forms/bulk_edit.py:1698 netbox/dcim/forms/bulk_import.py:253 -#: netbox/dcim/forms/bulk_import.py:1098 netbox/dcim/forms/filtersets.py:367 -#: netbox/dcim/forms/filtersets.py:777 netbox/dcim/forms/filtersets.py:1534 -#: netbox/dcim/forms/model_forms.py:251 netbox/dcim/forms/model_forms.py:1077 -#: netbox/dcim/forms/model_forms.py:1517 -#: netbox/dcim/forms/object_import.py:181 netbox/dcim/tables/devices.py:169 -#: netbox/dcim/tables/devices.py:809 netbox/dcim/tables/devices.py:937 -#: netbox/dcim/tables/devicetypes.py:304 netbox/dcim/tables/racks.py:129 -#: netbox/extras/filtersets.py:552 netbox/ipam/forms/bulk_edit.py:261 -#: netbox/ipam/forms/bulk_edit.py:311 netbox/ipam/forms/bulk_edit.py:359 -#: netbox/ipam/forms/bulk_edit.py:511 netbox/ipam/forms/bulk_import.py:197 -#: netbox/ipam/forms/bulk_import.py:262 netbox/ipam/forms/bulk_import.py:298 -#: netbox/ipam/forms/bulk_import.py:479 netbox/ipam/forms/filtersets.py:237 -#: netbox/ipam/forms/filtersets.py:289 netbox/ipam/forms/filtersets.py:360 -#: netbox/ipam/forms/filtersets.py:509 netbox/ipam/forms/model_forms.py:188 -#: netbox/ipam/forms/model_forms.py:221 netbox/ipam/forms/model_forms.py:250 -#: netbox/ipam/forms/model_forms.py:676 netbox/ipam/tables/ip.py:258 -#: netbox/ipam/tables/ip.py:316 netbox/ipam/tables/ip.py:367 -#: netbox/ipam/tables/vlans.py:130 netbox/ipam/tables/vlans.py:235 -#: netbox/templates/dcim/device.html:182 -#: netbox/templates/dcim/inc/panels/inventory_items.html:20 -#: netbox/templates/dcim/interface.html:223 -#: netbox/templates/dcim/inventoryitem.html:36 -#: netbox/templates/dcim/rack.html:49 netbox/templates/ipam/ipaddress.html:41 -#: netbox/templates/ipam/iprange.html:50 netbox/templates/ipam/prefix.html:77 -#: netbox/templates/ipam/role.html:19 netbox/templates/ipam/vlan.html:52 -#: netbox/templates/virtualization/virtualmachine.html:23 -#: netbox/templates/vpn/tunneltermination.html:17 -#: netbox/templates/wireless/inc/wirelesslink_interface.html:20 -#: netbox/tenancy/forms/bulk_edit.py:142 -#: netbox/tenancy/forms/filtersets.py:107 -#: netbox/tenancy/forms/model_forms.py:137 -#: netbox/tenancy/tables/contacts.py:102 -#: netbox/virtualization/forms/bulk_edit.py:145 -#: netbox/virtualization/forms/bulk_import.py:106 -#: netbox/virtualization/forms/filtersets.py:157 -#: netbox/virtualization/forms/model_forms.py:195 -#: netbox/virtualization/tables/virtualmachines.py:75 -#: netbox/vpn/forms/bulk_edit.py:87 netbox/vpn/forms/bulk_import.py:81 -#: netbox/vpn/forms/filtersets.py:85 netbox/vpn/forms/model_forms.py:78 -#: netbox/vpn/forms/model_forms.py:113 netbox/vpn/tables/tunnels.py:82 -msgid "Role" -msgstr "Rol" - -#: netbox/dcim/forms/bulk_edit.py:363 netbox/dcim/forms/bulk_import.py:260 -#: netbox/dcim/forms/filtersets.py:380 +#: netbox/dcim/forms/bulk_edit.py:366 netbox/dcim/forms/bulk_import.py:262 +#: netbox/dcim/forms/filtersets.py:381 msgid "Rack type" msgstr "Racktype" -#: netbox/dcim/forms/bulk_edit.py:370 netbox/dcim/forms/bulk_edit.py:718 -#: netbox/dcim/forms/bulk_edit.py:779 netbox/templates/dcim/device.html:104 +#: netbox/dcim/forms/bulk_edit.py:373 netbox/dcim/forms/bulk_edit.py:721 +#: netbox/dcim/forms/bulk_edit.py:782 netbox/templates/dcim/device.html:104 #: netbox/templates/dcim/module.html:77 #: netbox/templates/dcim/modulebay.html:70 netbox/templates/dcim/rack.html:57 #: netbox/templates/virtualization/virtualmachine.html:35 msgid "Serial Number" msgstr "Serienummer" -#: netbox/dcim/forms/bulk_edit.py:373 netbox/dcim/forms/filtersets.py:387 -#: netbox/dcim/forms/filtersets.py:813 netbox/dcim/forms/filtersets.py:967 -#: netbox/dcim/forms/filtersets.py:1546 +#: netbox/dcim/forms/bulk_edit.py:376 netbox/dcim/forms/filtersets.py:388 +#: netbox/dcim/forms/filtersets.py:814 netbox/dcim/forms/filtersets.py:968 +#: netbox/dcim/forms/filtersets.py:1551 msgid "Asset tag" msgstr "Tag voor bedrijfsmiddelen" -#: netbox/dcim/forms/bulk_edit.py:417 netbox/dcim/forms/bulk_edit.py:530 -#: netbox/dcim/forms/bulk_edit.py:574 netbox/dcim/forms/bulk_edit.py:711 -#: netbox/dcim/forms/bulk_import.py:289 netbox/dcim/forms/bulk_import.py:432 -#: netbox/dcim/forms/bulk_import.py:602 netbox/dcim/forms/filtersets.py:280 -#: netbox/dcim/forms/filtersets.py:511 netbox/dcim/forms/filtersets.py:669 -#: netbox/dcim/forms/filtersets.py:804 netbox/templates/dcim/device.html:98 +#: netbox/dcim/forms/bulk_edit.py:420 netbox/dcim/forms/bulk_edit.py:533 +#: netbox/dcim/forms/bulk_edit.py:577 netbox/dcim/forms/bulk_edit.py:714 +#: netbox/dcim/forms/bulk_import.py:291 netbox/dcim/forms/bulk_import.py:434 +#: netbox/dcim/forms/bulk_import.py:607 netbox/dcim/forms/filtersets.py:281 +#: netbox/dcim/forms/filtersets.py:512 netbox/dcim/forms/filtersets.py:670 +#: netbox/dcim/forms/filtersets.py:805 netbox/templates/dcim/device.html:98 #: netbox/templates/dcim/devicetype.html:65 -#: netbox/templates/dcim/moduletype.html:41 netbox/templates/dcim/rack.html:65 +#: netbox/templates/dcim/moduletype.html:43 netbox/templates/dcim/rack.html:65 #: netbox/templates/dcim/racktype.html:28 msgid "Airflow" msgstr "Luchtstroom" -#: netbox/dcim/forms/bulk_edit.py:446 netbox/dcim/forms/bulk_edit.py:925 -#: netbox/dcim/forms/bulk_import.py:344 netbox/dcim/forms/bulk_import.py:347 -#: netbox/dcim/forms/bulk_import.py:575 netbox/dcim/forms/bulk_import.py:1380 -#: netbox/dcim/forms/bulk_import.py:1384 netbox/dcim/forms/filtersets.py:104 -#: netbox/dcim/forms/filtersets.py:324 netbox/dcim/forms/filtersets.py:405 -#: netbox/dcim/forms/filtersets.py:419 netbox/dcim/forms/filtersets.py:457 -#: netbox/dcim/forms/filtersets.py:772 netbox/dcim/forms/filtersets.py:1035 -#: netbox/dcim/forms/filtersets.py:1167 netbox/dcim/forms/model_forms.py:264 -#: netbox/dcim/forms/model_forms.py:306 netbox/dcim/forms/model_forms.py:479 -#: netbox/dcim/forms/model_forms.py:755 netbox/dcim/forms/object_create.py:392 -#: netbox/dcim/tables/devices.py:161 netbox/dcim/tables/power.py:70 -#: netbox/dcim/tables/racks.py:217 netbox/ipam/forms/filtersets.py:442 +#: netbox/dcim/forms/bulk_edit.py:449 netbox/dcim/forms/bulk_edit.py:928 +#: netbox/dcim/forms/bulk_import.py:346 netbox/dcim/forms/bulk_import.py:349 +#: netbox/dcim/forms/bulk_import.py:580 netbox/dcim/forms/bulk_import.py:1477 +#: netbox/dcim/forms/bulk_import.py:1481 netbox/dcim/forms/filtersets.py:105 +#: netbox/dcim/forms/filtersets.py:325 netbox/dcim/forms/filtersets.py:406 +#: netbox/dcim/forms/filtersets.py:420 netbox/dcim/forms/filtersets.py:458 +#: netbox/dcim/forms/filtersets.py:773 netbox/dcim/forms/filtersets.py:1036 +#: netbox/dcim/forms/filtersets.py:1168 netbox/dcim/forms/model_forms.py:271 +#: netbox/dcim/forms/model_forms.py:314 netbox/dcim/forms/model_forms.py:489 +#: netbox/dcim/forms/model_forms.py:767 netbox/dcim/forms/object_create.py:392 +#: netbox/dcim/tables/devices.py:172 netbox/dcim/tables/power.py:70 +#: netbox/dcim/tables/racks.py:216 netbox/ipam/forms/filtersets.py:445 #: netbox/templates/dcim/device.html:30 #: netbox/templates/dcim/inc/cable_termination.html:16 #: netbox/templates/dcim/powerfeed.html:28 netbox/templates/dcim/rack.html:13 @@ -3705,212 +4163,144 @@ msgstr "Luchtstroom" msgid "Rack" msgstr "Rek" -#: netbox/dcim/forms/bulk_edit.py:450 netbox/dcim/forms/bulk_edit.py:744 -#: netbox/dcim/forms/filtersets.py:325 netbox/dcim/forms/filtersets.py:398 -#: netbox/dcim/forms/filtersets.py:481 netbox/dcim/forms/filtersets.py:608 -#: netbox/dcim/forms/filtersets.py:721 netbox/dcim/forms/filtersets.py:942 -#: netbox/dcim/forms/model_forms.py:670 netbox/dcim/forms/model_forms.py:1587 +#: netbox/dcim/forms/bulk_edit.py:453 netbox/dcim/forms/bulk_edit.py:747 +#: netbox/dcim/forms/filtersets.py:326 netbox/dcim/forms/filtersets.py:399 +#: netbox/dcim/forms/filtersets.py:482 netbox/dcim/forms/filtersets.py:609 +#: netbox/dcim/forms/filtersets.py:722 netbox/dcim/forms/filtersets.py:943 +#: netbox/dcim/forms/model_forms.py:681 netbox/dcim/forms/model_forms.py:1632 #: netbox/templates/dcim/device_edit.html:20 msgid "Hardware" msgstr "Hardware" -#: netbox/dcim/forms/bulk_edit.py:506 netbox/dcim/forms/bulk_import.py:399 -#: netbox/dcim/forms/filtersets.py:499 netbox/dcim/forms/model_forms.py:353 +#: netbox/dcim/forms/bulk_edit.py:509 netbox/dcim/forms/bulk_import.py:401 +#: netbox/dcim/forms/filtersets.py:500 netbox/dcim/forms/model_forms.py:362 msgid "Default platform" msgstr "Standaardplatform" -#: netbox/dcim/forms/bulk_edit.py:511 netbox/dcim/forms/bulk_edit.py:570 -#: netbox/dcim/forms/filtersets.py:502 netbox/dcim/forms/filtersets.py:622 +#: netbox/dcim/forms/bulk_edit.py:514 netbox/dcim/forms/bulk_edit.py:573 +#: netbox/dcim/forms/filtersets.py:503 netbox/dcim/forms/filtersets.py:623 msgid "Part number" msgstr "Onderdeelnummer" -#: netbox/dcim/forms/bulk_edit.py:515 +#: netbox/dcim/forms/bulk_edit.py:518 msgid "U height" msgstr "U-hoogte" -#: netbox/dcim/forms/bulk_edit.py:527 netbox/dcim/tables/devicetypes.py:102 +#: netbox/dcim/forms/bulk_edit.py:530 netbox/dcim/tables/devicetypes.py:107 msgid "Exclude from utilization" msgstr "Uitsluiten van gebruik" -#: netbox/dcim/forms/bulk_edit.py:556 netbox/dcim/forms/model_forms.py:368 -#: netbox/dcim/tables/devicetypes.py:77 netbox/templates/dcim/device.html:88 +#: netbox/dcim/forms/bulk_edit.py:559 netbox/dcim/forms/model_forms.py:377 +#: netbox/dcim/tables/devicetypes.py:82 netbox/templates/dcim/device.html:88 #: netbox/templates/dcim/devicebay.html:52 #: netbox/templates/dcim/module.html:61 msgid "Device Type" msgstr "Soort apparaat" -#: netbox/dcim/forms/bulk_edit.py:598 netbox/dcim/forms/model_forms.py:401 +#: netbox/dcim/forms/bulk_edit.py:601 netbox/dcim/forms/model_forms.py:410 #: netbox/dcim/tables/modules.py:17 netbox/dcim/tables/modules.py:66 #: netbox/templates/dcim/module.html:65 #: netbox/templates/dcim/modulebay.html:66 -#: netbox/templates/dcim/moduletype.html:22 +#: netbox/templates/dcim/moduletype.html:24 msgid "Module Type" msgstr "Moduletype" -#: netbox/dcim/forms/bulk_edit.py:602 netbox/dcim/forms/model_forms.py:371 -#: netbox/dcim/forms/model_forms.py:402 +#: netbox/dcim/forms/bulk_edit.py:605 netbox/dcim/forms/model_forms.py:380 +#: netbox/dcim/forms/model_forms.py:411 #: netbox/templates/dcim/devicetype.html:11 msgid "Chassis" msgstr "Chassis" -#: netbox/dcim/forms/bulk_edit.py:616 netbox/dcim/models/devices.py:484 -#: netbox/dcim/tables/devices.py:67 +#: netbox/dcim/forms/bulk_edit.py:619 netbox/dcim/models/devices.py:483 +#: netbox/dcim/tables/devices.py:78 msgid "VM role" msgstr "VM-rol" -#: netbox/dcim/forms/bulk_edit.py:619 netbox/dcim/forms/bulk_edit.py:643 -#: netbox/dcim/forms/bulk_edit.py:726 netbox/dcim/forms/bulk_import.py:456 -#: netbox/dcim/forms/bulk_import.py:460 netbox/dcim/forms/bulk_import.py:479 -#: netbox/dcim/forms/bulk_import.py:483 netbox/dcim/forms/bulk_import.py:608 -#: netbox/dcim/forms/bulk_import.py:612 netbox/dcim/forms/filtersets.py:689 -#: netbox/dcim/forms/filtersets.py:705 netbox/dcim/forms/filtersets.py:823 -#: netbox/dcim/forms/model_forms.py:415 netbox/dcim/forms/model_forms.py:441 -#: netbox/dcim/forms/model_forms.py:555 -#: netbox/virtualization/forms/bulk_import.py:132 -#: netbox/virtualization/forms/bulk_import.py:133 -#: netbox/virtualization/forms/filtersets.py:188 -#: netbox/virtualization/forms/model_forms.py:215 +#: netbox/dcim/forms/bulk_edit.py:622 netbox/dcim/forms/bulk_edit.py:646 +#: netbox/dcim/forms/bulk_edit.py:729 netbox/dcim/forms/bulk_import.py:461 +#: netbox/dcim/forms/bulk_import.py:465 netbox/dcim/forms/bulk_import.py:484 +#: netbox/dcim/forms/bulk_import.py:488 netbox/dcim/forms/bulk_import.py:613 +#: netbox/dcim/forms/bulk_import.py:617 netbox/dcim/forms/filtersets.py:690 +#: netbox/dcim/forms/filtersets.py:706 netbox/dcim/forms/filtersets.py:824 +#: netbox/dcim/forms/model_forms.py:424 netbox/dcim/forms/model_forms.py:451 +#: netbox/dcim/forms/model_forms.py:566 +#: netbox/virtualization/forms/bulk_import.py:138 +#: netbox/virtualization/forms/bulk_import.py:139 +#: netbox/virtualization/forms/filtersets.py:193 +#: netbox/virtualization/forms/model_forms.py:222 msgid "Config template" msgstr "Configuratiesjabloon" -#: netbox/dcim/forms/bulk_edit.py:667 netbox/dcim/forms/bulk_edit.py:1076 -#: netbox/dcim/forms/bulk_import.py:514 netbox/dcim/forms/filtersets.py:114 -#: netbox/dcim/forms/model_forms.py:501 netbox/dcim/forms/model_forms.py:872 -#: netbox/dcim/forms/model_forms.py:889 netbox/extras/filtersets.py:547 +#: netbox/dcim/forms/bulk_edit.py:670 netbox/dcim/forms/bulk_edit.py:1079 +#: netbox/dcim/forms/bulk_import.py:519 netbox/dcim/forms/filtersets.py:115 +#: netbox/dcim/forms/model_forms.py:511 netbox/dcim/forms/model_forms.py:884 +#: netbox/dcim/forms/model_forms.py:901 netbox/extras/filtersets.py:547 msgid "Device type" msgstr "Soort apparaat" -#: netbox/dcim/forms/bulk_edit.py:678 netbox/dcim/forms/bulk_import.py:495 -#: netbox/dcim/forms/filtersets.py:119 netbox/dcim/forms/model_forms.py:509 +#: netbox/dcim/forms/bulk_edit.py:681 netbox/dcim/forms/bulk_import.py:500 +#: netbox/dcim/forms/filtersets.py:120 netbox/dcim/forms/model_forms.py:519 msgid "Device role" msgstr "Rol van het apparaat" -#: netbox/dcim/forms/bulk_edit.py:701 netbox/dcim/forms/bulk_import.py:520 -#: netbox/dcim/forms/filtersets.py:796 netbox/dcim/forms/model_forms.py:451 -#: netbox/dcim/forms/model_forms.py:513 netbox/dcim/tables/devices.py:182 +#: netbox/dcim/forms/bulk_edit.py:704 netbox/dcim/forms/bulk_import.py:525 +#: netbox/dcim/forms/filtersets.py:797 netbox/dcim/forms/model_forms.py:461 +#: netbox/dcim/forms/model_forms.py:524 netbox/dcim/tables/devices.py:193 #: netbox/extras/filtersets.py:563 netbox/templates/dcim/device.html:186 #: netbox/templates/dcim/platform.html:26 #: netbox/templates/virtualization/virtualmachine.html:27 -#: netbox/virtualization/forms/bulk_edit.py:160 -#: netbox/virtualization/forms/bulk_import.py:122 -#: netbox/virtualization/forms/filtersets.py:168 -#: netbox/virtualization/forms/model_forms.py:203 -#: netbox/virtualization/tables/virtualmachines.py:79 +#: netbox/virtualization/forms/bulk_edit.py:142 +#: netbox/virtualization/forms/bulk_import.py:128 +#: netbox/virtualization/forms/filtersets.py:173 +#: netbox/virtualization/forms/model_forms.py:210 +#: netbox/virtualization/tables/virtualmachines.py:49 msgid "Platform" msgstr "Platform" -#: netbox/dcim/forms/bulk_edit.py:731 netbox/dcim/forms/bulk_import.py:539 -#: netbox/dcim/forms/filtersets.py:728 netbox/dcim/forms/filtersets.py:898 -#: netbox/dcim/forms/model_forms.py:522 netbox/dcim/tables/devices.py:202 -#: netbox/extras/filtersets.py:596 netbox/extras/forms/filtersets.py:322 -#: netbox/ipam/forms/filtersets.py:415 netbox/ipam/forms/filtersets.py:447 +#: netbox/dcim/forms/bulk_edit.py:734 netbox/dcim/forms/bulk_import.py:544 +#: netbox/dcim/forms/filtersets.py:729 netbox/dcim/forms/filtersets.py:899 +#: netbox/dcim/forms/model_forms.py:533 netbox/dcim/tables/devices.py:213 +#: netbox/extras/filtersets.py:596 netbox/extras/forms/filtersets.py:329 +#: netbox/ipam/forms/filtersets.py:418 netbox/ipam/forms/filtersets.py:450 #: netbox/templates/dcim/device.html:239 #: netbox/templates/virtualization/cluster.html:10 #: netbox/templates/virtualization/virtualmachine.html:92 #: netbox/templates/virtualization/virtualmachine.html:101 -#: netbox/virtualization/filtersets.py:157 -#: netbox/virtualization/filtersets.py:277 -#: netbox/virtualization/forms/bulk_edit.py:129 -#: netbox/virtualization/forms/bulk_import.py:92 -#: netbox/virtualization/forms/filtersets.py:99 -#: netbox/virtualization/forms/filtersets.py:123 -#: netbox/virtualization/forms/filtersets.py:204 -#: netbox/virtualization/forms/model_forms.py:79 -#: netbox/virtualization/forms/model_forms.py:176 -#: netbox/virtualization/tables/virtualmachines.py:67 +#: netbox/virtualization/filtersets.py:123 +#: netbox/virtualization/filtersets.py:243 +#: netbox/virtualization/forms/bulk_edit.py:111 +#: netbox/virtualization/forms/bulk_import.py:98 +#: netbox/virtualization/forms/filtersets.py:104 +#: netbox/virtualization/forms/filtersets.py:128 +#: netbox/virtualization/forms/filtersets.py:209 +#: netbox/virtualization/forms/model_forms.py:78 +#: netbox/virtualization/forms/model_forms.py:183 +#: netbox/virtualization/tables/virtualmachines.py:37 msgid "Cluster" msgstr "Cluster" -#: netbox/dcim/forms/bulk_edit.py:742 netbox/dcim/forms/bulk_edit.py:1296 -#: netbox/dcim/forms/bulk_edit.py:1693 netbox/dcim/forms/bulk_edit.py:1739 -#: netbox/dcim/forms/bulk_import.py:663 netbox/dcim/forms/bulk_import.py:725 -#: netbox/dcim/forms/bulk_import.py:751 netbox/dcim/forms/bulk_import.py:777 -#: netbox/dcim/forms/bulk_import.py:797 netbox/dcim/forms/bulk_import.py:850 -#: netbox/dcim/forms/bulk_import.py:968 netbox/dcim/forms/bulk_import.py:1016 -#: netbox/dcim/forms/bulk_import.py:1033 netbox/dcim/forms/bulk_import.py:1045 -#: netbox/dcim/forms/bulk_import.py:1093 netbox/dcim/forms/bulk_import.py:1444 -#: netbox/dcim/forms/connections.py:24 netbox/dcim/forms/filtersets.py:131 -#: netbox/dcim/forms/filtersets.py:921 netbox/dcim/forms/filtersets.py:1051 -#: netbox/dcim/forms/filtersets.py:1242 netbox/dcim/forms/filtersets.py:1267 -#: netbox/dcim/forms/filtersets.py:1291 netbox/dcim/forms/filtersets.py:1311 -#: netbox/dcim/forms/filtersets.py:1334 netbox/dcim/forms/filtersets.py:1444 -#: netbox/dcim/forms/filtersets.py:1469 netbox/dcim/forms/filtersets.py:1493 -#: netbox/dcim/forms/filtersets.py:1511 netbox/dcim/forms/filtersets.py:1528 -#: netbox/dcim/forms/filtersets.py:1592 netbox/dcim/forms/filtersets.py:1616 -#: netbox/dcim/forms/filtersets.py:1640 netbox/dcim/forms/model_forms.py:633 -#: netbox/dcim/forms/model_forms.py:849 netbox/dcim/forms/model_forms.py:1215 -#: netbox/dcim/forms/model_forms.py:1671 -#: netbox/dcim/forms/object_create.py:249 netbox/dcim/tables/connections.py:22 -#: netbox/dcim/tables/connections.py:41 netbox/dcim/tables/connections.py:60 -#: netbox/dcim/tables/devices.py:285 netbox/dcim/tables/devices.py:371 -#: netbox/dcim/tables/devices.py:412 netbox/dcim/tables/devices.py:454 -#: netbox/dcim/tables/devices.py:505 netbox/dcim/tables/devices.py:597 -#: netbox/dcim/tables/devices.py:697 netbox/dcim/tables/devices.py:754 -#: netbox/dcim/tables/devices.py:801 netbox/dcim/tables/devices.py:861 -#: netbox/dcim/tables/devices.py:930 netbox/dcim/tables/devices.py:1057 -#: netbox/dcim/tables/modules.py:53 netbox/extras/forms/filtersets.py:321 -#: netbox/ipam/forms/bulk_import.py:304 netbox/ipam/forms/bulk_import.py:505 -#: netbox/ipam/forms/filtersets.py:551 netbox/ipam/forms/model_forms.py:323 -#: netbox/ipam/forms/model_forms.py:712 netbox/ipam/forms/model_forms.py:745 -#: netbox/ipam/forms/model_forms.py:771 netbox/ipam/tables/vlans.py:180 -#: netbox/templates/dcim/consoleport.html:20 -#: netbox/templates/dcim/consoleserverport.html:20 -#: netbox/templates/dcim/device.html:15 netbox/templates/dcim/device.html:130 -#: netbox/templates/dcim/device_edit.html:10 -#: netbox/templates/dcim/devicebay.html:20 -#: netbox/templates/dcim/devicebay.html:48 -#: netbox/templates/dcim/frontport.html:20 -#: netbox/templates/dcim/interface.html:30 -#: netbox/templates/dcim/interface.html:161 -#: netbox/templates/dcim/inventoryitem.html:20 -#: netbox/templates/dcim/module.html:57 -#: netbox/templates/dcim/modulebay.html:20 -#: netbox/templates/dcim/poweroutlet.html:20 -#: netbox/templates/dcim/powerport.html:20 -#: netbox/templates/dcim/rearport.html:20 -#: netbox/templates/dcim/virtualchassis.html:65 -#: netbox/templates/dcim/virtualchassis_edit.html:51 -#: netbox/templates/dcim/virtualdevicecontext.html:22 -#: netbox/templates/virtualization/virtualmachine.html:114 -#: netbox/templates/vpn/tunneltermination.html:23 -#: netbox/templates/wireless/inc/wirelesslink_interface.html:6 -#: netbox/virtualization/filtersets.py:167 -#: netbox/virtualization/forms/bulk_edit.py:137 -#: netbox/virtualization/forms/bulk_import.py:99 -#: netbox/virtualization/forms/filtersets.py:128 -#: netbox/virtualization/forms/model_forms.py:185 -#: netbox/virtualization/tables/virtualmachines.py:71 netbox/vpn/choices.py:52 -#: netbox/vpn/forms/bulk_import.py:86 netbox/vpn/forms/bulk_import.py:283 -#: netbox/vpn/forms/filtersets.py:275 netbox/vpn/forms/model_forms.py:90 -#: netbox/vpn/forms/model_forms.py:125 netbox/vpn/forms/model_forms.py:236 -#: netbox/vpn/forms/model_forms.py:453 netbox/wireless/forms/model_forms.py:99 -#: netbox/wireless/forms/model_forms.py:141 -#: netbox/wireless/tables/wirelesslan.py:75 -msgid "Device" -msgstr "Apparaat" - -#: netbox/dcim/forms/bulk_edit.py:745 +#: netbox/dcim/forms/bulk_edit.py:748 #: netbox/templates/extras/dashboard/widget_config.html:7 -#: netbox/virtualization/forms/bulk_edit.py:191 +#: netbox/virtualization/forms/bulk_edit.py:173 msgid "Configuration" msgstr "Configuratie" -#: netbox/dcim/forms/bulk_edit.py:746 netbox/netbox/navigation/menu.py:243 +#: netbox/dcim/forms/bulk_edit.py:749 netbox/netbox/navigation/menu.py:251 #: netbox/templates/dcim/device_edit.html:78 msgid "Virtualization" msgstr "Virtualisatie" -#: netbox/dcim/forms/bulk_edit.py:760 netbox/dcim/forms/bulk_import.py:675 -#: netbox/dcim/forms/model_forms.py:647 netbox/dcim/forms/model_forms.py:897 +#: netbox/dcim/forms/bulk_edit.py:763 netbox/dcim/forms/bulk_import.py:680 +#: netbox/dcim/forms/model_forms.py:658 netbox/dcim/forms/model_forms.py:909 msgid "Module type" msgstr "Moduletype" -#: netbox/dcim/forms/bulk_edit.py:814 netbox/dcim/forms/bulk_edit.py:999 -#: netbox/dcim/forms/bulk_edit.py:1018 netbox/dcim/forms/bulk_edit.py:1041 -#: netbox/dcim/forms/bulk_edit.py:1083 netbox/dcim/forms/bulk_edit.py:1127 -#: netbox/dcim/forms/bulk_edit.py:1178 netbox/dcim/forms/bulk_edit.py:1205 -#: netbox/dcim/forms/bulk_edit.py:1232 netbox/dcim/forms/bulk_edit.py:1250 -#: netbox/dcim/forms/bulk_edit.py:1268 netbox/dcim/forms/filtersets.py:67 +#: netbox/dcim/forms/bulk_edit.py:817 netbox/dcim/forms/bulk_edit.py:1002 +#: netbox/dcim/forms/bulk_edit.py:1021 netbox/dcim/forms/bulk_edit.py:1044 +#: netbox/dcim/forms/bulk_edit.py:1086 netbox/dcim/forms/bulk_edit.py:1130 +#: netbox/dcim/forms/bulk_edit.py:1181 netbox/dcim/forms/bulk_edit.py:1208 +#: netbox/dcim/forms/bulk_edit.py:1235 netbox/dcim/forms/bulk_edit.py:1253 +#: netbox/dcim/forms/bulk_edit.py:1271 netbox/dcim/forms/filtersets.py:68 #: netbox/dcim/forms/object_create.py:46 netbox/templates/dcim/cable.html:32 #: netbox/templates/dcim/consoleport.html:32 #: netbox/templates/dcim/consoleserverport.html:32 @@ -3928,109 +4318,109 @@ msgstr "Moduletype" msgid "Label" msgstr "Label" -#: netbox/dcim/forms/bulk_edit.py:823 netbox/dcim/forms/filtersets.py:1068 +#: netbox/dcim/forms/bulk_edit.py:826 netbox/dcim/forms/filtersets.py:1069 #: netbox/templates/dcim/cable.html:50 msgid "Length" msgstr "Lengte" -#: netbox/dcim/forms/bulk_edit.py:828 netbox/dcim/forms/bulk_import.py:1248 -#: netbox/dcim/forms/bulk_import.py:1251 netbox/dcim/forms/filtersets.py:1072 +#: netbox/dcim/forms/bulk_edit.py:831 netbox/dcim/forms/bulk_import.py:1345 +#: netbox/dcim/forms/bulk_import.py:1348 netbox/dcim/forms/filtersets.py:1073 msgid "Length unit" msgstr "Lengte-eenheid" -#: netbox/dcim/forms/bulk_edit.py:852 +#: netbox/dcim/forms/bulk_edit.py:855 #: netbox/templates/dcim/virtualchassis.html:23 msgid "Domain" msgstr "Domein" -#: netbox/dcim/forms/bulk_edit.py:920 netbox/dcim/forms/bulk_import.py:1367 -#: netbox/dcim/forms/filtersets.py:1158 netbox/dcim/forms/model_forms.py:750 +#: netbox/dcim/forms/bulk_edit.py:923 netbox/dcim/forms/bulk_import.py:1464 +#: netbox/dcim/forms/filtersets.py:1159 netbox/dcim/forms/model_forms.py:761 msgid "Power panel" msgstr "Voedingspaneel" -#: netbox/dcim/forms/bulk_edit.py:942 netbox/dcim/forms/bulk_import.py:1403 -#: netbox/dcim/forms/filtersets.py:1180 +#: netbox/dcim/forms/bulk_edit.py:945 netbox/dcim/forms/bulk_import.py:1500 +#: netbox/dcim/forms/filtersets.py:1181 #: netbox/templates/dcim/powerfeed.html:83 msgid "Supply" msgstr "Levering" -#: netbox/dcim/forms/bulk_edit.py:948 netbox/dcim/forms/bulk_import.py:1408 -#: netbox/dcim/forms/filtersets.py:1185 +#: netbox/dcim/forms/bulk_edit.py:951 netbox/dcim/forms/bulk_import.py:1505 +#: netbox/dcim/forms/filtersets.py:1186 #: netbox/templates/dcim/powerfeed.html:95 msgid "Phase" msgstr "Fase" -#: netbox/dcim/forms/bulk_edit.py:954 netbox/dcim/forms/filtersets.py:1190 +#: netbox/dcim/forms/bulk_edit.py:957 netbox/dcim/forms/filtersets.py:1191 #: netbox/templates/dcim/powerfeed.html:87 msgid "Voltage" msgstr "Spanning" -#: netbox/dcim/forms/bulk_edit.py:958 netbox/dcim/forms/filtersets.py:1194 +#: netbox/dcim/forms/bulk_edit.py:961 netbox/dcim/forms/filtersets.py:1195 #: netbox/templates/dcim/powerfeed.html:91 msgid "Amperage" msgstr "Stroomsterkte" -#: netbox/dcim/forms/bulk_edit.py:962 netbox/dcim/forms/filtersets.py:1198 +#: netbox/dcim/forms/bulk_edit.py:965 netbox/dcim/forms/filtersets.py:1199 msgid "Max utilization" msgstr "Maximaal gebruik" -#: netbox/dcim/forms/bulk_edit.py:1051 +#: netbox/dcim/forms/bulk_edit.py:1054 msgid "Maximum draw" msgstr "Maximale trekking" -#: netbox/dcim/forms/bulk_edit.py:1054 -#: netbox/dcim/models/device_component_templates.py:282 -#: netbox/dcim/models/device_components.py:356 +#: netbox/dcim/forms/bulk_edit.py:1057 +#: netbox/dcim/models/device_component_templates.py:281 +#: netbox/dcim/models/device_components.py:349 msgid "Maximum power draw (watts)" msgstr "Maximaal stroomverbruik (watt)" -#: netbox/dcim/forms/bulk_edit.py:1057 +#: netbox/dcim/forms/bulk_edit.py:1060 msgid "Allocated draw" msgstr "Toegewezen loting" -#: netbox/dcim/forms/bulk_edit.py:1060 -#: netbox/dcim/models/device_component_templates.py:289 -#: netbox/dcim/models/device_components.py:363 +#: netbox/dcim/forms/bulk_edit.py:1063 +#: netbox/dcim/models/device_component_templates.py:288 +#: netbox/dcim/models/device_components.py:356 msgid "Allocated power draw (watts)" msgstr "Toegewezen stroomverbruik (watt)" -#: netbox/dcim/forms/bulk_edit.py:1093 netbox/dcim/forms/bulk_import.py:808 -#: netbox/dcim/forms/model_forms.py:960 netbox/dcim/forms/model_forms.py:1285 -#: netbox/dcim/forms/model_forms.py:1574 netbox/dcim/forms/object_import.py:55 +#: netbox/dcim/forms/bulk_edit.py:1096 netbox/dcim/forms/bulk_import.py:813 +#: netbox/dcim/forms/model_forms.py:972 netbox/dcim/forms/model_forms.py:1301 +#: netbox/dcim/forms/model_forms.py:1616 netbox/dcim/forms/object_import.py:55 msgid "Power port" msgstr "Voedingspoort" -#: netbox/dcim/forms/bulk_edit.py:1098 netbox/dcim/forms/bulk_import.py:815 +#: netbox/dcim/forms/bulk_edit.py:1101 netbox/dcim/forms/bulk_import.py:820 msgid "Feed leg" msgstr "Voer de poot in" -#: netbox/dcim/forms/bulk_edit.py:1144 netbox/dcim/forms/bulk_edit.py:1462 +#: netbox/dcim/forms/bulk_edit.py:1147 netbox/dcim/forms/bulk_edit.py:1465 msgid "Management only" msgstr "Alleen voor beheer" -#: netbox/dcim/forms/bulk_edit.py:1154 netbox/dcim/forms/bulk_edit.py:1468 -#: netbox/dcim/forms/bulk_import.py:898 netbox/dcim/forms/filtersets.py:1394 +#: netbox/dcim/forms/bulk_edit.py:1157 netbox/dcim/forms/bulk_edit.py:1471 +#: netbox/dcim/forms/bulk_import.py:906 netbox/dcim/forms/filtersets.py:1399 #: netbox/dcim/forms/object_import.py:90 -#: netbox/dcim/models/device_component_templates.py:437 -#: netbox/dcim/models/device_components.py:670 +#: netbox/dcim/models/device_component_templates.py:445 +#: netbox/dcim/models/device_components.py:721 msgid "PoE mode" msgstr "PoE-modus" -#: netbox/dcim/forms/bulk_edit.py:1160 netbox/dcim/forms/bulk_edit.py:1474 -#: netbox/dcim/forms/bulk_import.py:904 netbox/dcim/forms/filtersets.py:1399 +#: netbox/dcim/forms/bulk_edit.py:1163 netbox/dcim/forms/bulk_edit.py:1477 +#: netbox/dcim/forms/bulk_import.py:912 netbox/dcim/forms/filtersets.py:1404 #: netbox/dcim/forms/object_import.py:95 -#: netbox/dcim/models/device_component_templates.py:443 -#: netbox/dcim/models/device_components.py:676 +#: netbox/dcim/models/device_component_templates.py:452 +#: netbox/dcim/models/device_components.py:728 msgid "PoE type" msgstr "PoE-type" -#: netbox/dcim/forms/bulk_edit.py:1166 netbox/dcim/forms/filtersets.py:1404 +#: netbox/dcim/forms/bulk_edit.py:1169 netbox/dcim/forms/filtersets.py:1409 #: netbox/dcim/forms/object_import.py:100 msgid "Wireless role" msgstr "Draadloze rol" -#: netbox/dcim/forms/bulk_edit.py:1303 netbox/dcim/forms/model_forms.py:669 -#: netbox/dcim/forms/model_forms.py:1230 netbox/dcim/tables/devices.py:313 +#: netbox/dcim/forms/bulk_edit.py:1306 netbox/dcim/forms/model_forms.py:680 +#: netbox/dcim/forms/model_forms.py:1246 netbox/dcim/tables/devices.py:323 #: netbox/templates/dcim/consoleport.html:24 #: netbox/templates/dcim/consoleserverport.html:24 #: netbox/templates/dcim/frontport.html:24 @@ -4044,31 +4434,31 @@ msgstr "Draadloze rol" msgid "Module" msgstr "Module" -#: netbox/dcim/forms/bulk_edit.py:1442 netbox/dcim/tables/devices.py:665 -#: netbox/templates/dcim/interface.html:110 +#: netbox/dcim/forms/bulk_edit.py:1445 netbox/dcim/tables/devices.py:699 +#: netbox/templates/dcim/interface.html:116 msgid "LAG" msgstr "LAG" -#: netbox/dcim/forms/bulk_edit.py:1447 netbox/dcim/forms/model_forms.py:1312 +#: netbox/dcim/forms/bulk_edit.py:1450 netbox/dcim/forms/model_forms.py:1328 msgid "Virtual device contexts" msgstr "Contexten van virtuele apparaten" -#: netbox/dcim/forms/bulk_edit.py:1453 netbox/dcim/forms/bulk_import.py:736 -#: netbox/dcim/forms/bulk_import.py:762 netbox/dcim/forms/filtersets.py:1252 -#: netbox/dcim/forms/filtersets.py:1277 netbox/dcim/forms/filtersets.py:1358 -#: netbox/dcim/tables/devices.py:610 -#: netbox/templates/circuits/inc/circuit_termination_fields.html:67 +#: netbox/dcim/forms/bulk_edit.py:1456 netbox/dcim/forms/bulk_import.py:741 +#: netbox/dcim/forms/bulk_import.py:767 netbox/dcim/forms/filtersets.py:1253 +#: netbox/dcim/forms/filtersets.py:1278 netbox/dcim/forms/filtersets.py:1363 +#: netbox/dcim/tables/devices.py:632 +#: netbox/templates/circuits/inc/circuit_termination_fields.html:62 #: netbox/templates/dcim/consoleport.html:40 #: netbox/templates/dcim/consoleserverport.html:40 msgid "Speed" msgstr "Snelheid" -#: netbox/dcim/forms/bulk_edit.py:1482 netbox/dcim/forms/bulk_import.py:907 +#: netbox/dcim/forms/bulk_edit.py:1485 netbox/dcim/forms/bulk_import.py:915 #: netbox/templates/vpn/ikepolicy.html:25 #: netbox/templates/vpn/ipsecprofile.html:21 #: netbox/templates/vpn/ipsecprofile.html:48 -#: netbox/virtualization/forms/bulk_edit.py:233 -#: netbox/virtualization/forms/bulk_import.py:165 +#: netbox/virtualization/forms/bulk_edit.py:215 +#: netbox/virtualization/forms/bulk_import.py:171 #: netbox/vpn/forms/bulk_edit.py:146 netbox/vpn/forms/bulk_edit.py:232 #: netbox/vpn/forms/bulk_import.py:176 netbox/vpn/forms/bulk_import.py:234 #: netbox/vpn/forms/filtersets.py:135 netbox/vpn/forms/filtersets.py:178 @@ -4077,302 +4467,308 @@ msgstr "Snelheid" msgid "Mode" msgstr "Modus" -#: netbox/dcim/forms/bulk_edit.py:1490 netbox/dcim/forms/model_forms.py:1361 -#: netbox/ipam/forms/bulk_import.py:178 netbox/ipam/forms/filtersets.py:498 -#: netbox/ipam/models/vlans.py:84 netbox/virtualization/forms/bulk_edit.py:240 -#: netbox/virtualization/forms/model_forms.py:321 +#: netbox/dcim/forms/bulk_edit.py:1493 netbox/dcim/forms/model_forms.py:1377 +#: netbox/ipam/forms/bulk_import.py:174 netbox/ipam/forms/filtersets.py:539 +#: netbox/ipam/models/vlans.py:86 netbox/virtualization/forms/bulk_edit.py:222 +#: netbox/virtualization/forms/model_forms.py:335 msgid "VLAN group" msgstr "VLAN-groep" -#: netbox/dcim/forms/bulk_edit.py:1499 netbox/dcim/forms/model_forms.py:1367 -#: netbox/dcim/tables/devices.py:579 -#: netbox/virtualization/forms/bulk_edit.py:248 -#: netbox/virtualization/forms/model_forms.py:326 +#: netbox/dcim/forms/bulk_edit.py:1502 netbox/dcim/forms/model_forms.py:1383 +#: netbox/dcim/tables/devices.py:593 +#: netbox/virtualization/forms/bulk_edit.py:230 +#: netbox/virtualization/forms/model_forms.py:340 msgid "Untagged VLAN" msgstr "VLAN zonder label" -#: netbox/dcim/forms/bulk_edit.py:1508 netbox/dcim/forms/model_forms.py:1376 -#: netbox/dcim/tables/devices.py:585 -#: netbox/virtualization/forms/bulk_edit.py:256 -#: netbox/virtualization/forms/model_forms.py:335 +#: netbox/dcim/forms/bulk_edit.py:1511 netbox/dcim/forms/model_forms.py:1392 +#: netbox/dcim/tables/devices.py:599 +#: netbox/virtualization/forms/bulk_edit.py:238 +#: netbox/virtualization/forms/model_forms.py:349 msgid "Tagged VLANs" msgstr "Getagde VLAN's" -#: netbox/dcim/forms/bulk_edit.py:1511 +#: netbox/dcim/forms/bulk_edit.py:1514 msgid "Add tagged VLANs" msgstr "Getagde VLAN's toevoegen" -#: netbox/dcim/forms/bulk_edit.py:1520 +#: netbox/dcim/forms/bulk_edit.py:1523 msgid "Remove tagged VLANs" msgstr "Getagde VLAN's verwijderen" -#: netbox/dcim/forms/bulk_edit.py:1536 netbox/dcim/forms/model_forms.py:1348 +#: netbox/dcim/forms/bulk_edit.py:1534 netbox/dcim/forms/model_forms.py:1401 +#: netbox/virtualization/forms/model_forms.py:358 +msgid "Q-in-Q Service VLAN" +msgstr "VLAN voor Q-in-Q-service" + +#: netbox/dcim/forms/bulk_edit.py:1549 netbox/dcim/forms/model_forms.py:1364 msgid "Wireless LAN group" msgstr "Draadloze LAN-groep" -#: netbox/dcim/forms/bulk_edit.py:1541 netbox/dcim/forms/model_forms.py:1353 -#: netbox/dcim/tables/devices.py:619 netbox/netbox/navigation/menu.py:146 -#: netbox/templates/dcim/interface.html:280 +#: netbox/dcim/forms/bulk_edit.py:1554 netbox/dcim/forms/model_forms.py:1369 +#: netbox/dcim/tables/devices.py:641 netbox/netbox/navigation/menu.py:152 +#: netbox/templates/dcim/interface.html:337 #: netbox/wireless/tables/wirelesslan.py:24 msgid "Wireless LANs" msgstr "Draadloze LAN's" -#: netbox/dcim/forms/bulk_edit.py:1550 netbox/dcim/forms/filtersets.py:1328 -#: netbox/dcim/forms/model_forms.py:1397 netbox/ipam/forms/bulk_edit.py:286 -#: netbox/ipam/forms/bulk_edit.py:378 netbox/ipam/forms/filtersets.py:169 -#: netbox/templates/dcim/interface.html:122 -#: netbox/templates/ipam/prefix.html:95 -#: netbox/virtualization/forms/model_forms.py:349 +#: netbox/dcim/forms/bulk_edit.py:1563 netbox/dcim/forms/filtersets.py:1333 +#: netbox/dcim/forms/model_forms.py:1435 netbox/ipam/forms/bulk_edit.py:269 +#: netbox/ipam/forms/bulk_edit.py:362 netbox/ipam/forms/filtersets.py:171 +#: netbox/netbox/navigation/menu.py:108 +#: netbox/templates/dcim/interface.html:128 +#: netbox/templates/ipam/prefix.html:91 +#: netbox/templates/virtualization/vminterface.html:70 +#: netbox/virtualization/forms/model_forms.py:378 msgid "Addressing" msgstr "Addressing" -#: netbox/dcim/forms/bulk_edit.py:1551 netbox/dcim/forms/filtersets.py:720 -#: netbox/dcim/forms/model_forms.py:1398 -#: netbox/virtualization/forms/model_forms.py:350 +#: netbox/dcim/forms/bulk_edit.py:1564 netbox/dcim/forms/filtersets.py:721 +#: netbox/dcim/forms/model_forms.py:1436 +#: netbox/virtualization/forms/model_forms.py:379 msgid "Operation" msgstr "Operatie" -#: netbox/dcim/forms/bulk_edit.py:1552 netbox/dcim/forms/filtersets.py:1329 -#: netbox/dcim/forms/model_forms.py:994 netbox/dcim/forms/model_forms.py:1400 +#: netbox/dcim/forms/bulk_edit.py:1565 netbox/dcim/forms/filtersets.py:1334 +#: netbox/dcim/forms/model_forms.py:1006 netbox/dcim/forms/model_forms.py:1438 msgid "PoE" msgstr "PoE" -#: netbox/dcim/forms/bulk_edit.py:1553 netbox/dcim/forms/model_forms.py:1399 -#: netbox/templates/dcim/interface.html:99 -#: netbox/virtualization/forms/bulk_edit.py:267 -#: netbox/virtualization/forms/model_forms.py:351 +#: netbox/dcim/forms/bulk_edit.py:1566 netbox/dcim/forms/model_forms.py:1437 +#: netbox/templates/dcim/interface.html:105 +#: netbox/virtualization/forms/bulk_edit.py:254 +#: netbox/virtualization/forms/model_forms.py:380 msgid "Related Interfaces" msgstr "Gerelateerde interfaces" -#: netbox/dcim/forms/bulk_edit.py:1554 netbox/dcim/forms/model_forms.py:1401 -#: netbox/virtualization/forms/bulk_edit.py:268 -#: netbox/virtualization/forms/model_forms.py:352 +#: netbox/dcim/forms/bulk_edit.py:1568 netbox/dcim/forms/model_forms.py:1441 +#: netbox/virtualization/forms/bulk_edit.py:257 +#: netbox/virtualization/forms/model_forms.py:383 msgid "802.1Q Switching" msgstr "802.1Q-omschakeling" -#: netbox/dcim/forms/bulk_edit.py:1558 +#: netbox/dcim/forms/bulk_edit.py:1573 msgid "Add/Remove" msgstr "Toevoegen/verwijderen" -#: netbox/dcim/forms/bulk_edit.py:1617 netbox/dcim/forms/bulk_edit.py:1619 +#: netbox/dcim/forms/bulk_edit.py:1632 netbox/dcim/forms/bulk_edit.py:1634 msgid "Interface mode must be specified to assign VLANs" msgstr "De interfacemodus moet worden gespecificeerd om VLAN's toe te wijzen" -#: netbox/dcim/forms/bulk_edit.py:1624 netbox/dcim/forms/common.py:50 +#: netbox/dcim/forms/bulk_edit.py:1639 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:64 +#: netbox/dcim/forms/bulk_import.py:66 msgid "Name of parent region" msgstr "Naam van de moederregio" -#: netbox/dcim/forms/bulk_import.py:78 +#: netbox/dcim/forms/bulk_import.py:80 msgid "Name of parent site group" msgstr "Naam van de oudersitegroep" -#: netbox/dcim/forms/bulk_import.py:97 +#: netbox/dcim/forms/bulk_import.py:99 msgid "Assigned region" msgstr "Toegewezen regio" -#: netbox/dcim/forms/bulk_import.py:104 netbox/tenancy/forms/bulk_import.py:44 +#: netbox/dcim/forms/bulk_import.py:106 netbox/tenancy/forms/bulk_import.py:44 #: netbox/tenancy/forms/bulk_import.py:85 -#: netbox/wireless/forms/bulk_import.py:40 +#: netbox/wireless/forms/bulk_import.py:42 msgid "Assigned group" msgstr "Toegewezen groep" -#: netbox/dcim/forms/bulk_import.py:123 +#: netbox/dcim/forms/bulk_import.py:125 msgid "available options" msgstr "beschikbare opties" -#: netbox/dcim/forms/bulk_import.py:134 netbox/dcim/forms/bulk_import.py:565 -#: netbox/dcim/forms/bulk_import.py:1364 netbox/ipam/forms/bulk_import.py:175 -#: netbox/ipam/forms/bulk_import.py:457 -#: netbox/virtualization/forms/bulk_import.py:63 -#: netbox/virtualization/forms/bulk_import.py:89 +#: netbox/dcim/forms/bulk_import.py:136 netbox/dcim/forms/bulk_import.py:570 +#: netbox/dcim/forms/bulk_import.py:1461 netbox/ipam/forms/bulk_import.py:456 +#: netbox/virtualization/forms/bulk_import.py:64 +#: netbox/virtualization/forms/bulk_import.py:95 msgid "Assigned site" msgstr "Toegewezen site" -#: netbox/dcim/forms/bulk_import.py:141 +#: netbox/dcim/forms/bulk_import.py:143 msgid "Parent location" msgstr "Locatie van de ouders" -#: netbox/dcim/forms/bulk_import.py:143 +#: netbox/dcim/forms/bulk_import.py:145 msgid "Location not found." msgstr "Locatie niet gevonden." -#: netbox/dcim/forms/bulk_import.py:185 +#: netbox/dcim/forms/bulk_import.py:187 msgid "The manufacturer of this rack type" msgstr "De fabrikant van dit racktype" -#: netbox/dcim/forms/bulk_import.py:196 +#: netbox/dcim/forms/bulk_import.py:198 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:201 netbox/dcim/forms/bulk_import.py:276 +#: netbox/dcim/forms/bulk_import.py:203 netbox/dcim/forms/bulk_import.py:278 msgid "Rail-to-rail width (in inches)" msgstr "Breedte van rail tot rail (in inches)" -#: netbox/dcim/forms/bulk_import.py:207 netbox/dcim/forms/bulk_import.py:286 +#: netbox/dcim/forms/bulk_import.py:209 netbox/dcim/forms/bulk_import.py:288 msgid "Unit for outer dimensions" msgstr "Eenheid voor buitenafmetingen" -#: netbox/dcim/forms/bulk_import.py:213 netbox/dcim/forms/bulk_import.py:298 +#: netbox/dcim/forms/bulk_import.py:215 netbox/dcim/forms/bulk_import.py:300 msgid "Unit for rack weights" msgstr "Eenheid voor rackgewichten" -#: netbox/dcim/forms/bulk_import.py:245 +#: netbox/dcim/forms/bulk_import.py:247 msgid "Name of assigned tenant" msgstr "Naam van de toegewezen tenant" -#: netbox/dcim/forms/bulk_import.py:257 +#: netbox/dcim/forms/bulk_import.py:259 msgid "Name of assigned role" msgstr "Naam van de toegewezen rol" -#: netbox/dcim/forms/bulk_import.py:264 +#: netbox/dcim/forms/bulk_import.py:266 msgid "Rack type model" msgstr "Model van het type rack" -#: netbox/dcim/forms/bulk_import.py:292 netbox/dcim/forms/bulk_import.py:435 -#: netbox/dcim/forms/bulk_import.py:605 +#: netbox/dcim/forms/bulk_import.py:294 netbox/dcim/forms/bulk_import.py:437 +#: netbox/dcim/forms/bulk_import.py:610 msgid "Airflow direction" msgstr "Richting van de luchtstroom" -#: netbox/dcim/forms/bulk_import.py:324 +#: netbox/dcim/forms/bulk_import.py:326 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:326 +#: netbox/dcim/forms/bulk_import.py:328 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:334 +#: netbox/dcim/forms/bulk_import.py:336 msgid "Parent site" msgstr "Site voor ouders" -#: netbox/dcim/forms/bulk_import.py:341 netbox/dcim/forms/bulk_import.py:1377 +#: netbox/dcim/forms/bulk_import.py:343 netbox/dcim/forms/bulk_import.py:1474 msgid "Rack's location (if any)" msgstr "Locatie van het rek (indien aanwezig)" -#: netbox/dcim/forms/bulk_import.py:350 netbox/dcim/forms/model_forms.py:311 -#: netbox/dcim/tables/racks.py:222 +#: netbox/dcim/forms/bulk_import.py:352 netbox/dcim/forms/model_forms.py:319 +#: netbox/dcim/tables/racks.py:221 #: netbox/templates/dcim/rackreservation.html:12 #: netbox/templates/dcim/rackreservation.html:45 msgid "Units" msgstr "Eenheden" -#: netbox/dcim/forms/bulk_import.py:353 +#: netbox/dcim/forms/bulk_import.py:355 msgid "Comma-separated list of individual unit numbers" msgstr "Door komma's gescheiden lijst van individuele eenheidsnummers" -#: netbox/dcim/forms/bulk_import.py:396 +#: netbox/dcim/forms/bulk_import.py:398 msgid "The manufacturer which produces this device type" msgstr "De fabrikant die dit apparaattype produceert" -#: netbox/dcim/forms/bulk_import.py:403 +#: netbox/dcim/forms/bulk_import.py:405 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:408 +#: netbox/dcim/forms/bulk_import.py:410 msgid "Device weight" msgstr "Gewicht van het apparaat" -#: netbox/dcim/forms/bulk_import.py:414 +#: netbox/dcim/forms/bulk_import.py:416 msgid "Unit for device weight" msgstr "Eenheid voor het gewicht van het apparaat" -#: netbox/dcim/forms/bulk_import.py:440 +#: netbox/dcim/forms/bulk_import.py:442 msgid "Module weight" msgstr "Gewicht van de module" -#: netbox/dcim/forms/bulk_import.py:446 +#: netbox/dcim/forms/bulk_import.py:448 msgid "Unit for module weight" msgstr "Eenheid voor modulegewicht" -#: netbox/dcim/forms/bulk_import.py:476 +#: netbox/dcim/forms/bulk_import.py:481 msgid "Limit platform assignments to this manufacturer" msgstr "Beperk de platformtoewijzingen aan deze fabrikant" -#: netbox/dcim/forms/bulk_import.py:498 netbox/dcim/forms/bulk_import.py:1447 +#: netbox/dcim/forms/bulk_import.py:503 netbox/dcim/forms/bulk_import.py:1544 #: netbox/tenancy/forms/bulk_import.py:106 msgid "Assigned role" msgstr "Toegewezen rol" -#: netbox/dcim/forms/bulk_import.py:511 +#: netbox/dcim/forms/bulk_import.py:516 msgid "Device type manufacturer" msgstr "Apparaattype fabrikant" -#: netbox/dcim/forms/bulk_import.py:517 +#: netbox/dcim/forms/bulk_import.py:522 msgid "Device type model" msgstr "Apparaattype model" -#: netbox/dcim/forms/bulk_import.py:524 -#: netbox/virtualization/forms/bulk_import.py:126 +#: netbox/dcim/forms/bulk_import.py:529 +#: netbox/virtualization/forms/bulk_import.py:132 msgid "Assigned platform" msgstr "Toegewezen platform" -#: netbox/dcim/forms/bulk_import.py:532 netbox/dcim/forms/bulk_import.py:536 -#: netbox/dcim/forms/model_forms.py:536 +#: netbox/dcim/forms/bulk_import.py:537 netbox/dcim/forms/bulk_import.py:541 +#: netbox/dcim/forms/model_forms.py:547 msgid "Virtual chassis" msgstr "Virtueel chassis" -#: netbox/dcim/forms/bulk_import.py:543 +#: netbox/dcim/forms/bulk_import.py:548 msgid "Virtualization cluster" msgstr "Virtualisatiecluster" -#: netbox/dcim/forms/bulk_import.py:572 +#: netbox/dcim/forms/bulk_import.py:577 msgid "Assigned location (if any)" msgstr "Toegewezen locatie (indien aanwezig)" -#: netbox/dcim/forms/bulk_import.py:579 +#: netbox/dcim/forms/bulk_import.py:584 msgid "Assigned rack (if any)" msgstr "Toegewezen rek (indien aanwezig)" -#: netbox/dcim/forms/bulk_import.py:582 +#: netbox/dcim/forms/bulk_import.py:587 msgid "Face" msgstr "Gezicht" -#: netbox/dcim/forms/bulk_import.py:585 +#: netbox/dcim/forms/bulk_import.py:590 msgid "Mounted rack face" msgstr "Gemonteerd rackfront" -#: netbox/dcim/forms/bulk_import.py:592 +#: netbox/dcim/forms/bulk_import.py:597 msgid "Parent device (for child devices)" msgstr "Ouderapparaat (voor apparaten voor kinderen)" -#: netbox/dcim/forms/bulk_import.py:595 +#: netbox/dcim/forms/bulk_import.py:600 msgid "Device bay" msgstr "Toestelvak" -#: netbox/dcim/forms/bulk_import.py:599 +#: netbox/dcim/forms/bulk_import.py:604 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:666 +#: netbox/dcim/forms/bulk_import.py:671 msgid "The device in which this module is installed" msgstr "Het apparaat waarop deze module is geïnstalleerd" -#: netbox/dcim/forms/bulk_import.py:669 netbox/dcim/forms/model_forms.py:640 +#: netbox/dcim/forms/bulk_import.py:674 netbox/dcim/forms/model_forms.py:651 msgid "Module bay" msgstr "Modulevak" -#: netbox/dcim/forms/bulk_import.py:672 +#: netbox/dcim/forms/bulk_import.py:677 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:678 +#: netbox/dcim/forms/bulk_import.py:683 msgid "The type of module" msgstr "Het type module" -#: netbox/dcim/forms/bulk_import.py:686 netbox/dcim/forms/model_forms.py:656 +#: netbox/dcim/forms/bulk_import.py:691 netbox/dcim/forms/model_forms.py:667 msgid "Replicate components" msgstr "Componenten repliceren" -#: netbox/dcim/forms/bulk_import.py:688 +#: netbox/dcim/forms/bulk_import.py:693 msgid "" "Automatically populate components associated with this module type (enabled " "by default)" @@ -4380,271 +4776,309 @@ msgstr "" "Componenten die aan dit moduletype zijn gekoppeld automatisch invullen " "(standaard ingeschakeld)" -#: netbox/dcim/forms/bulk_import.py:691 netbox/dcim/forms/model_forms.py:662 +#: netbox/dcim/forms/bulk_import.py:696 netbox/dcim/forms/model_forms.py:673 msgid "Adopt components" msgstr "Componenten adopteren" -#: netbox/dcim/forms/bulk_import.py:693 netbox/dcim/forms/model_forms.py:665 +#: netbox/dcim/forms/bulk_import.py:698 netbox/dcim/forms/model_forms.py:676 msgid "Adopt already existing components" msgstr "Reeds bestaande componenten adopteren" -#: netbox/dcim/forms/bulk_import.py:733 netbox/dcim/forms/bulk_import.py:759 -#: netbox/dcim/forms/bulk_import.py:785 +#: netbox/dcim/forms/bulk_import.py:738 netbox/dcim/forms/bulk_import.py:764 +#: netbox/dcim/forms/bulk_import.py:790 msgid "Port type" msgstr "Poorttype" -#: netbox/dcim/forms/bulk_import.py:741 netbox/dcim/forms/bulk_import.py:767 +#: netbox/dcim/forms/bulk_import.py:746 netbox/dcim/forms/bulk_import.py:772 msgid "Port speed in bps" msgstr "Poortsnelheid in bps" -#: netbox/dcim/forms/bulk_import.py:805 +#: netbox/dcim/forms/bulk_import.py:810 msgid "Outlet type" msgstr "Type stopcontact" -#: netbox/dcim/forms/bulk_import.py:812 +#: netbox/dcim/forms/bulk_import.py:817 msgid "Local power port which feeds this outlet" msgstr "Lokale voedingspoort die dit stopcontact voedt" -#: netbox/dcim/forms/bulk_import.py:818 +#: netbox/dcim/forms/bulk_import.py:823 msgid "Electrical phase (for three-phase circuits)" msgstr "Elektrische fase (voor driefasige circuits)" -#: netbox/dcim/forms/bulk_import.py:859 netbox/dcim/forms/model_forms.py:1323 -#: netbox/virtualization/forms/bulk_import.py:155 -#: netbox/virtualization/forms/model_forms.py:305 +#: netbox/dcim/forms/bulk_import.py:867 netbox/dcim/forms/model_forms.py:1339 +#: netbox/virtualization/forms/bulk_import.py:161 +#: netbox/virtualization/forms/model_forms.py:319 msgid "Parent interface" msgstr "Interface voor ouders" -#: netbox/dcim/forms/bulk_import.py:866 netbox/dcim/forms/model_forms.py:1331 -#: netbox/virtualization/forms/bulk_import.py:162 -#: netbox/virtualization/forms/model_forms.py:313 +#: netbox/dcim/forms/bulk_import.py:874 netbox/dcim/forms/model_forms.py:1347 +#: netbox/virtualization/forms/bulk_import.py:168 +#: netbox/virtualization/forms/model_forms.py:327 msgid "Bridged interface" msgstr "Overbrugde interface" -#: netbox/dcim/forms/bulk_import.py:869 +#: netbox/dcim/forms/bulk_import.py:877 msgid "Lag" msgstr "Lag" -#: netbox/dcim/forms/bulk_import.py:873 +#: netbox/dcim/forms/bulk_import.py:881 msgid "Parent LAG interface" msgstr "LAG-interface voor ouders" -#: netbox/dcim/forms/bulk_import.py:876 +#: netbox/dcim/forms/bulk_import.py:884 msgid "Vdcs" msgstr "Vdcs" -#: netbox/dcim/forms/bulk_import.py:881 +#: netbox/dcim/forms/bulk_import.py:889 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:887 +#: netbox/dcim/forms/bulk_import.py:895 msgid "Physical medium" msgstr "Fysiek medium" -#: netbox/dcim/forms/bulk_import.py:890 netbox/dcim/forms/filtersets.py:1365 +#: netbox/dcim/forms/bulk_import.py:898 netbox/dcim/forms/filtersets.py:1370 msgid "Duplex" msgstr "Dubbelzijdig" -#: netbox/dcim/forms/bulk_import.py:895 +#: netbox/dcim/forms/bulk_import.py:903 msgid "Poe mode" msgstr "Poe-modus" -#: netbox/dcim/forms/bulk_import.py:901 +#: netbox/dcim/forms/bulk_import.py:909 msgid "Poe type" msgstr "Poe-type" -#: netbox/dcim/forms/bulk_import.py:910 -#: netbox/virtualization/forms/bulk_import.py:168 +#: netbox/dcim/forms/bulk_import.py:918 +#: netbox/virtualization/forms/bulk_import.py:174 msgid "IEEE 802.1Q operational mode (for L2 interfaces)" msgstr "IEEE 802.1Q operationele modus (voor L2-interfaces)" -#: netbox/dcim/forms/bulk_import.py:917 netbox/ipam/forms/bulk_import.py:161 -#: netbox/ipam/forms/bulk_import.py:247 netbox/ipam/forms/bulk_import.py:283 -#: netbox/ipam/forms/filtersets.py:201 netbox/ipam/forms/filtersets.py:277 -#: netbox/ipam/forms/filtersets.py:336 -#: netbox/virtualization/forms/bulk_import.py:175 +#: netbox/dcim/forms/bulk_import.py:925 netbox/ipam/forms/bulk_import.py:164 +#: netbox/ipam/forms/bulk_import.py:246 netbox/ipam/forms/bulk_import.py:282 +#: netbox/ipam/forms/filtersets.py:203 netbox/ipam/forms/filtersets.py:280 +#: netbox/ipam/forms/filtersets.py:339 +#: netbox/virtualization/forms/bulk_import.py:181 msgid "Assigned VRF" msgstr "Toegewezen VRF" -#: netbox/dcim/forms/bulk_import.py:920 +#: netbox/dcim/forms/bulk_import.py:928 msgid "Rf role" msgstr "Rf-rol" -#: netbox/dcim/forms/bulk_import.py:923 +#: netbox/dcim/forms/bulk_import.py:931 msgid "Wireless role (AP/station)" msgstr "Draadloze rol (AP/station)" -#: netbox/dcim/forms/bulk_import.py:959 +#: netbox/dcim/forms/bulk_import.py:967 #, 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:973 netbox/dcim/forms/model_forms.py:1007 -#: netbox/dcim/forms/model_forms.py:1582 +#: netbox/dcim/forms/bulk_import.py:981 netbox/dcim/forms/model_forms.py:1020 +#: netbox/dcim/forms/model_forms.py:1624 #: netbox/dcim/forms/object_import.py:117 msgid "Rear port" msgstr "Poort aan de achterkant" -#: netbox/dcim/forms/bulk_import.py:976 +#: netbox/dcim/forms/bulk_import.py:984 msgid "Corresponding rear port" msgstr "Bijbehorende poort aan de achterkant" -#: netbox/dcim/forms/bulk_import.py:981 netbox/dcim/forms/bulk_import.py:1022 -#: netbox/dcim/forms/bulk_import.py:1238 +#: netbox/dcim/forms/bulk_import.py:989 netbox/dcim/forms/bulk_import.py:1030 +#: netbox/dcim/forms/bulk_import.py:1335 msgid "Physical medium classification" msgstr "Classificatie van fysieke media" -#: netbox/dcim/forms/bulk_import.py:1050 netbox/dcim/tables/devices.py:822 +#: netbox/dcim/forms/bulk_import.py:1058 netbox/dcim/tables/devices.py:854 msgid "Installed device" msgstr "Geïnstalleerd apparaat" -#: netbox/dcim/forms/bulk_import.py:1054 +#: netbox/dcim/forms/bulk_import.py:1062 msgid "Child device installed within this bay" msgstr "Kinderapparaat dat in deze bay is geïnstalleerd" -#: netbox/dcim/forms/bulk_import.py:1056 +#: netbox/dcim/forms/bulk_import.py:1064 msgid "Child device not found." msgstr "Kinderapparaat niet gevonden." -#: netbox/dcim/forms/bulk_import.py:1114 +#: netbox/dcim/forms/bulk_import.py:1122 msgid "Parent inventory item" msgstr "Onderliggend inventarisitem" -#: netbox/dcim/forms/bulk_import.py:1117 +#: netbox/dcim/forms/bulk_import.py:1125 msgid "Component type" msgstr "Soort onderdeel" -#: netbox/dcim/forms/bulk_import.py:1121 +#: netbox/dcim/forms/bulk_import.py:1129 msgid "Component Type" msgstr "Soort onderdeel" -#: netbox/dcim/forms/bulk_import.py:1124 +#: netbox/dcim/forms/bulk_import.py:1132 msgid "Compnent name" msgstr "Naam van het onderdeel" -#: netbox/dcim/forms/bulk_import.py:1126 +#: netbox/dcim/forms/bulk_import.py:1134 msgid "Component Name" msgstr "Naam van de component" -#: netbox/dcim/forms/bulk_import.py:1168 +#: netbox/dcim/forms/bulk_import.py:1181 #, python-brace-format msgid "Component not found: {device} - {component_name}" msgstr "Onderdeel niet gevonden: {device} - {component_name}" -#: netbox/dcim/forms/bulk_import.py:1193 +#: netbox/dcim/forms/bulk_import.py:1209 netbox/ipam/forms/bulk_import.py:307 +msgid "Parent device of assigned interface (if any)" +msgstr "Ouderapparaat met toegewezen interface (indien aanwezig)" + +#: netbox/dcim/forms/bulk_import.py:1212 netbox/ipam/forms/bulk_import.py:310 +#: netbox/ipam/forms/bulk_import.py:547 netbox/ipam/forms/model_forms.py:768 +#: netbox/virtualization/filtersets.py:254 +#: netbox/virtualization/filtersets.py:305 +#: netbox/virtualization/forms/bulk_edit.py:182 +#: netbox/virtualization/forms/bulk_edit.py:316 +#: netbox/virtualization/forms/bulk_import.py:152 +#: netbox/virtualization/forms/bulk_import.py:213 +#: netbox/virtualization/forms/filtersets.py:217 +#: netbox/virtualization/forms/filtersets.py:253 +#: netbox/virtualization/forms/model_forms.py:295 +#: netbox/vpn/forms/bulk_import.py:93 netbox/vpn/forms/bulk_import.py:290 +msgid "Virtual machine" +msgstr "Virtuele machine" + +#: netbox/dcim/forms/bulk_import.py:1216 netbox/ipam/forms/bulk_import.py:314 +msgid "Parent VM of assigned interface (if any)" +msgstr "Bovenliggende VM van de toegewezen interface (indien aanwezig)" + +#: netbox/dcim/forms/bulk_import.py:1223 netbox/ipam/filtersets.py:1021 +#: netbox/ipam/forms/bulk_import.py:321 +msgid "Assigned interface" +msgstr "Toegewezen interface" + +#: netbox/dcim/forms/bulk_import.py:1226 netbox/ipam/forms/bulk_import.py:324 +msgid "Is primary" +msgstr "Is primair" + +#: netbox/dcim/forms/bulk_import.py:1227 +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:1264 +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:1290 msgid "Side A device" msgstr "Side A-apparaat" -#: netbox/dcim/forms/bulk_import.py:1196 netbox/dcim/forms/bulk_import.py:1214 +#: netbox/dcim/forms/bulk_import.py:1293 netbox/dcim/forms/bulk_import.py:1311 msgid "Device name" msgstr "Naam van het apparaat" -#: netbox/dcim/forms/bulk_import.py:1199 +#: netbox/dcim/forms/bulk_import.py:1296 msgid "Side A type" msgstr "Type kant A" -#: netbox/dcim/forms/bulk_import.py:1202 netbox/dcim/forms/bulk_import.py:1220 -msgid "Termination type" -msgstr "Soort beëindiging" - -#: netbox/dcim/forms/bulk_import.py:1205 +#: netbox/dcim/forms/bulk_import.py:1302 msgid "Side A name" msgstr "Naam van kant A" -#: netbox/dcim/forms/bulk_import.py:1206 netbox/dcim/forms/bulk_import.py:1224 +#: netbox/dcim/forms/bulk_import.py:1303 netbox/dcim/forms/bulk_import.py:1321 msgid "Termination name" msgstr "Naam van beëindiging" -#: netbox/dcim/forms/bulk_import.py:1211 +#: netbox/dcim/forms/bulk_import.py:1308 msgid "Side B device" msgstr "Side B-apparaat" -#: netbox/dcim/forms/bulk_import.py:1217 +#: netbox/dcim/forms/bulk_import.py:1314 msgid "Side B type" msgstr "Type kant B" -#: netbox/dcim/forms/bulk_import.py:1223 +#: netbox/dcim/forms/bulk_import.py:1320 msgid "Side B name" msgstr "Naam van kant B" -#: netbox/dcim/forms/bulk_import.py:1232 -#: netbox/wireless/forms/bulk_import.py:86 +#: netbox/dcim/forms/bulk_import.py:1329 +#: netbox/wireless/forms/bulk_import.py:91 msgid "Connection status" msgstr "Status van de verbinding" -#: netbox/dcim/forms/bulk_import.py:1284 +#: netbox/dcim/forms/bulk_import.py:1381 #, 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:1290 +#: netbox/dcim/forms/bulk_import.py:1387 #, 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:1315 netbox/dcim/forms/model_forms.py:785 -#: netbox/dcim/tables/devices.py:1027 netbox/templates/dcim/device.html:132 +#: netbox/dcim/forms/bulk_import.py:1412 netbox/dcim/forms/model_forms.py:797 +#: netbox/dcim/tables/devices.py:1059 netbox/templates/dcim/device.html:132 #: netbox/templates/dcim/virtualchassis.html:27 #: netbox/templates/dcim/virtualchassis.html:67 msgid "Master" msgstr "Meester" -#: netbox/dcim/forms/bulk_import.py:1319 +#: netbox/dcim/forms/bulk_import.py:1416 msgid "Master device" msgstr "Master-apparaat" -#: netbox/dcim/forms/bulk_import.py:1336 +#: netbox/dcim/forms/bulk_import.py:1433 msgid "Name of parent site" msgstr "Naam van de moedersite" -#: netbox/dcim/forms/bulk_import.py:1370 +#: netbox/dcim/forms/bulk_import.py:1467 msgid "Upstream power panel" msgstr "Stroomopwaarts stroompaneel" -#: netbox/dcim/forms/bulk_import.py:1400 +#: netbox/dcim/forms/bulk_import.py:1497 msgid "Primary or redundant" msgstr "Primair of redundant" -#: netbox/dcim/forms/bulk_import.py:1405 +#: netbox/dcim/forms/bulk_import.py:1502 msgid "Supply type (AC/DC)" msgstr "Soort voeding (AC/DC)" -#: netbox/dcim/forms/bulk_import.py:1410 +#: netbox/dcim/forms/bulk_import.py:1507 msgid "Single or three-phase" msgstr "Enkel- of driefasig" -#: netbox/dcim/forms/bulk_import.py:1461 netbox/dcim/forms/model_forms.py:1677 +#: netbox/dcim/forms/bulk_import.py:1558 netbox/dcim/forms/model_forms.py:1722 #: netbox/templates/dcim/device.html:190 #: netbox/templates/dcim/virtualdevicecontext.html:30 #: netbox/templates/virtualization/virtualmachine.html:52 msgid "Primary IPv4" msgstr "Primaire IPv4" -#: netbox/dcim/forms/bulk_import.py:1465 +#: netbox/dcim/forms/bulk_import.py:1562 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:1468 netbox/dcim/forms/model_forms.py:1686 +#: netbox/dcim/forms/bulk_import.py:1565 netbox/dcim/forms/model_forms.py:1731 #: netbox/templates/dcim/device.html:206 #: netbox/templates/dcim/virtualdevicecontext.html:41 #: netbox/templates/virtualization/virtualmachine.html:68 msgid "Primary IPv6" msgstr "Primaire IPv6" -#: netbox/dcim/forms/bulk_import.py:1472 +#: netbox/dcim/forms/bulk_import.py:1569 msgid "IPv6 address with prefix length, e.g. 2001:db8::1/64" msgstr "IPv6-adres met prefixlengte, bijvoorbeeld 2001:db8: :1/64" -#: netbox/dcim/forms/common.py:24 netbox/dcim/models/device_components.py:527 +#: netbox/dcim/forms/common.py:19 netbox/dcim/models/device_components.py:515 #: netbox/templates/dcim/interface.html:57 -#: netbox/templates/virtualization/vminterface.html:55 -#: netbox/virtualization/forms/bulk_edit.py:225 +#: netbox/templates/virtualization/vminterface.html:51 +#: netbox/virtualization/forms/bulk_edit.py:207 msgid "MTU" msgstr "MTU" -#: netbox/dcim/forms/common.py:65 +#: netbox/dcim/forms/common.py:60 #, python-brace-format msgid "" "The tagged VLANs ({vlans}) must belong to the same site as the interface's " @@ -4653,7 +5087,7 @@ msgstr "" "De gelabelde VLAN's ({vlans}) moeten tot dezelfde site behoren als het " "bovenliggende apparaat/VM van de interface, of ze moeten globaal zijn" -#: netbox/dcim/forms/common.py:126 +#: netbox/dcim/forms/common.py:121 msgid "" "Cannot install module with placeholder values in a module bay with no " "position defined." @@ -4661,7 +5095,7 @@ msgstr "" "Kan een module met tijdelijke aanduidingen niet installeren in een " "modulecompartiment zonder gedefinieerde positie." -#: netbox/dcim/forms/common.py:131 +#: netbox/dcim/forms/common.py:127 #, python-brace-format msgid "" "Cannot install module with placeholder values in a module bay tree {level} " @@ -4671,17 +5105,17 @@ msgstr "" "modulelaurierboom {level} in een boom, maar {tokens} tijdelijke aanduidingen" " gegeven." -#: netbox/dcim/forms/common.py:144 +#: netbox/dcim/forms/common.py:142 #, python-brace-format msgid "Cannot adopt {model} {name} as it already belongs to a module" msgstr "Kan niet adopteren {model} {name} omdat het al bij een module hoort" -#: netbox/dcim/forms/common.py:153 +#: netbox/dcim/forms/common.py:151 #, python-brace-format msgid "A {model} named {name} already exists" msgstr "EEN {model} genoemd {name} bestaat al" -#: netbox/dcim/forms/connections.py:49 netbox/dcim/forms/model_forms.py:738 +#: netbox/dcim/forms/connections.py:49 netbox/dcim/forms/model_forms.py:749 #: netbox/dcim/tables/power.py:66 #: netbox/templates/dcim/inc/cable_termination.html:37 #: netbox/templates/dcim/powerfeed.html:24 @@ -4690,137 +5124,135 @@ msgstr "EEN {model} genoemd {name} bestaat al" msgid "Power Panel" msgstr "Voedingspaneel" -#: netbox/dcim/forms/connections.py:58 netbox/dcim/forms/model_forms.py:765 +#: netbox/dcim/forms/connections.py:58 netbox/dcim/forms/model_forms.py:777 #: netbox/templates/dcim/powerfeed.html:21 #: netbox/templates/dcim/powerport.html:80 msgid "Power Feed" msgstr "Stroomvoorziening" -#: netbox/dcim/forms/connections.py:81 -msgid "Side" -msgstr "Kant" - -#: netbox/dcim/forms/filtersets.py:136 netbox/dcim/tables/devices.py:295 +#: netbox/dcim/forms/filtersets.py:137 netbox/dcim/tables/devices.py:305 msgid "Device Status" msgstr "Status van het apparaat" -#: netbox/dcim/forms/filtersets.py:149 +#: netbox/dcim/forms/filtersets.py:150 msgid "Parent region" msgstr "Regio van het moederland" -#: netbox/dcim/forms/filtersets.py:163 netbox/tenancy/forms/bulk_import.py:28 +#: netbox/dcim/forms/filtersets.py:164 netbox/tenancy/forms/bulk_import.py:28 #: netbox/tenancy/forms/bulk_import.py:62 #: netbox/tenancy/forms/filtersets.py:33 netbox/tenancy/forms/filtersets.py:62 -#: netbox/wireless/forms/bulk_import.py:25 -#: netbox/wireless/forms/filtersets.py:25 +#: netbox/wireless/forms/bulk_import.py:27 +#: netbox/wireless/forms/filtersets.py:27 msgid "Parent group" msgstr "Oudergroep" -#: netbox/dcim/forms/filtersets.py:242 netbox/templates/dcim/location.html:58 +#: netbox/dcim/forms/filtersets.py:243 netbox/templates/dcim/location.html:58 #: netbox/templates/dcim/site.html:56 msgid "Facility" msgstr "Faciliteit" -#: netbox/dcim/forms/filtersets.py:397 +#: netbox/dcim/forms/filtersets.py:398 msgid "Function" msgstr "Functie" -#: netbox/dcim/forms/filtersets.py:483 netbox/dcim/forms/model_forms.py:373 +#: netbox/dcim/forms/filtersets.py:484 netbox/dcim/forms/model_forms.py:382 #: netbox/templates/inc/panels/image_attachments.html:6 msgid "Images" msgstr "Afbeeldingen" -#: netbox/dcim/forms/filtersets.py:486 netbox/dcim/forms/filtersets.py:611 -#: netbox/dcim/forms/filtersets.py:726 +#: netbox/dcim/forms/filtersets.py:487 netbox/dcim/forms/filtersets.py:612 +#: netbox/dcim/forms/filtersets.py:727 msgid "Components" msgstr "Componenten" -#: netbox/dcim/forms/filtersets.py:506 +#: netbox/dcim/forms/filtersets.py:507 msgid "Subdevice role" msgstr "Rol van het subapparaat" -#: netbox/dcim/forms/filtersets.py:790 netbox/dcim/tables/racks.py:54 +#: netbox/dcim/forms/filtersets.py:791 netbox/dcim/tables/racks.py:54 #: netbox/templates/dcim/racktype.html:20 msgid "Model" msgstr "Model" -#: netbox/dcim/forms/filtersets.py:834 +#: netbox/dcim/forms/filtersets.py:835 msgid "Has an OOB IP" msgstr "Heeft een OOB IP" -#: netbox/dcim/forms/filtersets.py:841 +#: netbox/dcim/forms/filtersets.py:842 msgid "Virtual chassis member" msgstr "Virtueel chassislid" -#: netbox/dcim/forms/filtersets.py:890 +#: netbox/dcim/forms/filtersets.py:891 msgid "Has virtual device contexts" msgstr "Heeft contexten voor virtuele apparaten" -#: netbox/dcim/forms/filtersets.py:903 netbox/extras/filtersets.py:585 -#: netbox/ipam/forms/filtersets.py:452 -#: netbox/virtualization/forms/filtersets.py:112 +#: netbox/dcim/forms/filtersets.py:904 netbox/extras/filtersets.py:585 +#: netbox/ipam/forms/filtersets.py:455 +#: netbox/virtualization/forms/filtersets.py:117 msgid "Cluster group" msgstr "Clustergroep" -#: netbox/dcim/forms/filtersets.py:1210 +#: netbox/dcim/forms/filtersets.py:1211 msgid "Cabled" msgstr "Bekabeld" -#: netbox/dcim/forms/filtersets.py:1217 +#: netbox/dcim/forms/filtersets.py:1218 msgid "Occupied" msgstr "Bezet" -#: netbox/dcim/forms/filtersets.py:1244 netbox/dcim/forms/filtersets.py:1269 -#: netbox/dcim/forms/filtersets.py:1293 netbox/dcim/forms/filtersets.py:1313 -#: netbox/dcim/forms/filtersets.py:1336 netbox/dcim/tables/devices.py:364 +#: netbox/dcim/forms/filtersets.py:1245 netbox/dcim/forms/filtersets.py:1270 +#: netbox/dcim/forms/filtersets.py:1294 netbox/dcim/forms/filtersets.py:1314 +#: netbox/dcim/forms/filtersets.py:1341 netbox/dcim/tables/devices.py:374 +#: netbox/dcim/tables/devices.py:663 +#: netbox/templates/circuits/inc/circuit_termination_fields.html:16 #: netbox/templates/dcim/consoleport.html:55 #: netbox/templates/dcim/consoleserverport.html:55 #: netbox/templates/dcim/frontport.html:69 -#: netbox/templates/dcim/interface.html:140 +#: netbox/templates/dcim/interface.html:197 #: netbox/templates/dcim/powerfeed.html:110 -#: netbox/templates/dcim/poweroutlet.html:59 +#: netbox/templates/dcim/poweroutlet.html:69 #: netbox/templates/dcim/powerport.html:59 #: netbox/templates/dcim/rearport.html:65 msgid "Connection" msgstr "Verbinding" -#: netbox/dcim/forms/filtersets.py:1348 netbox/extras/forms/bulk_edit.py:326 +#: netbox/dcim/forms/filtersets.py:1353 netbox/extras/forms/bulk_edit.py:326 #: netbox/extras/forms/bulk_import.py:247 -#: netbox/extras/forms/filtersets.py:464 -#: netbox/extras/forms/model_forms.py:675 netbox/extras/tables/tables.py:579 +#: netbox/extras/forms/filtersets.py:472 +#: netbox/extras/forms/model_forms.py:689 netbox/extras/tables/tables.py:579 #: netbox/templates/extras/journalentry.html:30 msgid "Kind" msgstr "Soort" -#: netbox/dcim/forms/filtersets.py:1377 +#: netbox/dcim/forms/filtersets.py:1382 msgid "Mgmt only" msgstr "Alleen voor beheer" -#: netbox/dcim/forms/filtersets.py:1389 netbox/dcim/forms/model_forms.py:1390 -#: netbox/dcim/models/device_components.py:629 -#: netbox/templates/dcim/interface.html:129 +#: netbox/dcim/forms/filtersets.py:1394 netbox/dcim/forms/model_forms.py:1423 +#: netbox/dcim/models/device_components.py:677 +#: netbox/templates/dcim/interface.html:142 msgid "WWN" msgstr "WWN" -#: netbox/dcim/forms/filtersets.py:1409 +#: netbox/dcim/forms/filtersets.py:1414 msgid "Wireless channel" msgstr "Draadloos kanaal" -#: netbox/dcim/forms/filtersets.py:1413 +#: netbox/dcim/forms/filtersets.py:1418 msgid "Channel frequency (MHz)" msgstr "Kanaalfrequentie (MHz)" -#: netbox/dcim/forms/filtersets.py:1417 +#: netbox/dcim/forms/filtersets.py:1422 msgid "Channel width (MHz)" msgstr "Kanaalbreedte (MHz)" -#: netbox/dcim/forms/filtersets.py:1421 -#: netbox/templates/dcim/interface.html:85 +#: netbox/dcim/forms/filtersets.py:1426 +#: netbox/templates/dcim/interface.html:91 msgid "Transmit power (dBm)" msgstr "Zendvermogen (dBm)" -#: netbox/dcim/forms/filtersets.py:1446 netbox/dcim/forms/filtersets.py:1471 -#: netbox/dcim/tables/devices.py:327 netbox/templates/dcim/cable.html:12 +#: netbox/dcim/forms/filtersets.py:1451 netbox/dcim/forms/filtersets.py:1476 +#: netbox/dcim/tables/devices.py:337 netbox/templates/dcim/cable.html:12 #: netbox/templates/dcim/cable_trace.html:46 #: netbox/templates/dcim/frontport.html:77 #: netbox/templates/dcim/htmx/cable_edit.html:50 @@ -4830,40 +5262,77 @@ msgstr "Zendvermogen (dBm)" msgid "Cable" msgstr "Kabel" -#: netbox/dcim/forms/filtersets.py:1550 netbox/dcim/tables/devices.py:949 +#: netbox/dcim/forms/filtersets.py:1555 netbox/dcim/tables/devices.py:979 msgid "Discovered" msgstr "Ontdekt" +#: netbox/dcim/forms/filtersets.py:1596 netbox/ipam/forms/filtersets.py:350 +msgid "Assigned Device" +msgstr "Toegewezen apparaat" + +#: netbox/dcim/forms/filtersets.py:1601 netbox/ipam/forms/filtersets.py:355 +msgid "Assigned VM" +msgstr "Toegewezen VM" + #: netbox/dcim/forms/formsets.py:20 #, python-brace-format msgid "A virtual chassis member already exists in position {vc_position}." msgstr "Er bestaat al een virtueel chassislid op zijn plaats {vc_position}." -#: netbox/dcim/forms/model_forms.py:140 +#: netbox/dcim/forms/mixins.py:27 netbox/dcim/forms/mixins.py:75 +#: netbox/ipam/forms/bulk_edit.py:420 netbox/ipam/forms/model_forms.py:618 +msgid "Scope type" +msgstr "Soort bereik" + +#: netbox/dcim/forms/mixins.py:30 netbox/dcim/forms/mixins.py:78 +#: netbox/ipam/forms/bulk_edit.py:270 netbox/ipam/forms/bulk_edit.py:423 +#: netbox/ipam/forms/bulk_edit.py:437 netbox/ipam/forms/filtersets.py:175 +#: netbox/ipam/forms/model_forms.py:231 netbox/ipam/forms/model_forms.py:621 +#: netbox/ipam/forms/model_forms.py:631 netbox/ipam/tables/ip.py:194 +#: netbox/ipam/tables/vlans.py:40 netbox/templates/ipam/prefix.html:48 +#: netbox/templates/ipam/vlangroup.html:38 +#: netbox/templates/virtualization/cluster.html:42 +#: netbox/templates/wireless/wirelesslan.html:26 +#: netbox/virtualization/forms/bulk_edit.py:91 +#: netbox/virtualization/forms/filtersets.py:46 +#: netbox/virtualization/forms/model_forms.py:79 +#: netbox/virtualization/tables/clusters.py:80 +#: netbox/wireless/forms/bulk_edit.py:93 +#: netbox/wireless/forms/filtersets.py:37 +#: netbox/wireless/forms/model_forms.py:56 +#: netbox/wireless/tables/wirelesslan.py:58 +msgid "Scope" +msgstr "Toepassingsgebied" + +#: netbox/dcim/forms/mixins.py:104 netbox/ipam/forms/bulk_import.py:436 +msgid "Scope type (app & model)" +msgstr "Soort bereik (app en model)" + +#: netbox/dcim/forms/model_forms.py:144 msgid "Contact Info" msgstr "Contactgegevens" -#: netbox/dcim/forms/model_forms.py:195 netbox/templates/dcim/rackrole.html:19 +#: netbox/dcim/forms/model_forms.py:199 netbox/templates/dcim/rackrole.html:19 msgid "Rack Role" msgstr "Rol van het rek" -#: netbox/dcim/forms/model_forms.py:212 netbox/dcim/forms/model_forms.py:362 -#: netbox/dcim/forms/model_forms.py:446 +#: netbox/dcim/forms/model_forms.py:217 netbox/dcim/forms/model_forms.py:371 +#: netbox/dcim/forms/model_forms.py:456 #: netbox/utilities/forms/fields/fields.py:47 msgid "Slug" msgstr "Slug" -#: netbox/dcim/forms/model_forms.py:259 +#: netbox/dcim/forms/model_forms.py:264 msgid "Select a pre-defined rack type, or set physical characteristics below." msgstr "" "Selecteer een vooraf gedefinieerd racktype of stel hieronder de fysieke " "kenmerken in." -#: netbox/dcim/forms/model_forms.py:265 +#: netbox/dcim/forms/model_forms.py:273 msgid "Inventory Control" msgstr "Inventarisbeheer" -#: netbox/dcim/forms/model_forms.py:313 +#: netbox/dcim/forms/model_forms.py:321 msgid "" "Comma-separated list of numeric unit IDs. A range may be specified using a " "hyphen." @@ -4871,40 +5340,40 @@ msgstr "" "Door komma's gescheiden lijst van numerieke eenheid-ID's. Een bereik kan " "worden gespecificeerd met een koppelteken." -#: netbox/dcim/forms/model_forms.py:322 netbox/dcim/tables/racks.py:202 +#: netbox/dcim/forms/model_forms.py:330 netbox/dcim/tables/racks.py:201 msgid "Reservation" msgstr "Reservatie" -#: netbox/dcim/forms/model_forms.py:423 +#: netbox/dcim/forms/model_forms.py:432 #: netbox/templates/dcim/devicerole.html:23 msgid "Device Role" msgstr "Apparaat Rol" -#: netbox/dcim/forms/model_forms.py:490 netbox/dcim/models/devices.py:644 +#: netbox/dcim/forms/model_forms.py:500 netbox/dcim/models/devices.py:635 msgid "The lowest-numbered unit occupied by the device" msgstr "" "De eenheid met het laagste nummer die door het apparaat wordt gebruikt" -#: netbox/dcim/forms/model_forms.py:547 +#: netbox/dcim/forms/model_forms.py:558 msgid "The position in the virtual chassis this device is identified by" msgstr "" "De positie in het virtuele chassis waarmee dit apparaat wordt " "geïdentificeerd" -#: netbox/dcim/forms/model_forms.py:552 +#: netbox/dcim/forms/model_forms.py:563 msgid "The priority of the device in the virtual chassis" msgstr "De prioriteit van het apparaat in het virtuele chassis" -#: netbox/dcim/forms/model_forms.py:659 +#: netbox/dcim/forms/model_forms.py:670 msgid "Automatically populate components associated with this module type" msgstr "" "Componenten die aan dit moduletype zijn gekoppeld automatisch invullen" -#: netbox/dcim/forms/model_forms.py:767 +#: netbox/dcim/forms/model_forms.py:779 msgid "Characteristics" msgstr "Kenmerken" -#: netbox/dcim/forms/model_forms.py:914 +#: netbox/dcim/forms/model_forms.py:926 #, python-brace-format msgid "" "Alphanumeric ranges are supported for bulk creation. Mixed cases and types " @@ -4919,60 +5388,35 @@ msgstr "" "indien aanwezig, wordt automatisch vervangen door de positiewaarde bij het " "aanmaken van een nieuwe module." -#: netbox/dcim/forms/model_forms.py:1094 +#: netbox/dcim/forms/model_forms.py:1107 msgid "Console port template" msgstr "Sjabloon voor consolepoort" -#: netbox/dcim/forms/model_forms.py:1102 +#: netbox/dcim/forms/model_forms.py:1115 msgid "Console server port template" msgstr "Poortsjabloon voor consoleserver" -#: netbox/dcim/forms/model_forms.py:1110 +#: netbox/dcim/forms/model_forms.py:1123 msgid "Front port template" msgstr "Sjabloon voor de voorpoort" -#: netbox/dcim/forms/model_forms.py:1118 +#: netbox/dcim/forms/model_forms.py:1131 msgid "Interface template" msgstr "Interfacesjabloon" -#: netbox/dcim/forms/model_forms.py:1126 +#: netbox/dcim/forms/model_forms.py:1139 msgid "Power outlet template" msgstr "Sjabloon voor stopcontact" -#: netbox/dcim/forms/model_forms.py:1134 +#: netbox/dcim/forms/model_forms.py:1147 msgid "Power port template" msgstr "Sjabloon voor voedingspoort" -#: netbox/dcim/forms/model_forms.py:1142 +#: netbox/dcim/forms/model_forms.py:1155 msgid "Rear port template" msgstr "Sjabloon voor achterpoort" -#: netbox/dcim/forms/model_forms.py:1151 netbox/dcim/forms/model_forms.py:1395 -#: netbox/dcim/forms/model_forms.py:1558 netbox/dcim/forms/model_forms.py:1590 -#: netbox/dcim/tables/connections.py:65 netbox/ipam/forms/bulk_import.py:318 -#: netbox/ipam/forms/model_forms.py:280 netbox/ipam/forms/model_forms.py:289 -#: netbox/ipam/tables/fhrp.py:64 netbox/ipam/tables/ip.py:372 -#: netbox/ipam/tables/vlans.py:169 -#: netbox/templates/circuits/inc/circuit_termination_fields.html:51 -#: netbox/templates/dcim/frontport.html:106 -#: netbox/templates/dcim/interface.html:27 -#: netbox/templates/dcim/interface.html:184 -#: netbox/templates/dcim/interface.html:310 -#: netbox/templates/dcim/rearport.html:102 -#: netbox/templates/virtualization/vminterface.html:18 -#: netbox/templates/vpn/tunneltermination.html:31 -#: netbox/templates/wireless/inc/wirelesslink_interface.html:10 -#: netbox/templates/wireless/wirelesslink.html:10 -#: netbox/templates/wireless/wirelesslink.html:55 -#: netbox/virtualization/forms/model_forms.py:348 -#: netbox/vpn/forms/bulk_import.py:297 netbox/vpn/forms/model_forms.py:436 -#: netbox/vpn/forms/model_forms.py:445 -#: netbox/wireless/forms/model_forms.py:113 -#: netbox/wireless/forms/model_forms.py:155 -msgid "Interface" -msgstr "Interface" - -#: netbox/dcim/forms/model_forms.py:1152 netbox/dcim/forms/model_forms.py:1591 +#: netbox/dcim/forms/model_forms.py:1165 netbox/dcim/forms/model_forms.py:1636 #: netbox/dcim/tables/connections.py:27 #: netbox/templates/dcim/consoleport.html:17 #: netbox/templates/dcim/consoleserverport.html:74 @@ -4980,71 +5424,71 @@ msgstr "Interface" msgid "Console Port" msgstr "Consolepoort" -#: netbox/dcim/forms/model_forms.py:1153 netbox/dcim/forms/model_forms.py:1592 +#: netbox/dcim/forms/model_forms.py:1166 netbox/dcim/forms/model_forms.py:1637 #: netbox/templates/dcim/consoleport.html:73 #: netbox/templates/dcim/consoleserverport.html:17 #: netbox/templates/dcim/frontport.html:109 msgid "Console Server Port" msgstr "Console Server-poort" -#: netbox/dcim/forms/model_forms.py:1154 netbox/dcim/forms/model_forms.py:1593 -#: netbox/templates/circuits/inc/circuit_termination_fields.html:52 +#: netbox/dcim/forms/model_forms.py:1167 netbox/dcim/forms/model_forms.py:1638 +#: netbox/templates/circuits/inc/circuit_termination_fields.html:53 #: netbox/templates/dcim/consoleport.html:76 #: netbox/templates/dcim/consoleserverport.html:77 #: netbox/templates/dcim/frontport.html:17 #: netbox/templates/dcim/frontport.html:115 -#: netbox/templates/dcim/interface.html:187 +#: netbox/templates/dcim/interface.html:244 #: netbox/templates/dcim/rearport.html:105 msgid "Front Port" msgstr "Poort Voor" -#: netbox/dcim/forms/model_forms.py:1155 netbox/dcim/forms/model_forms.py:1594 -#: netbox/dcim/tables/devices.py:710 -#: netbox/templates/circuits/inc/circuit_termination_fields.html:53 +#: netbox/dcim/forms/model_forms.py:1168 netbox/dcim/forms/model_forms.py:1639 +#: netbox/dcim/tables/devices.py:744 +#: netbox/templates/circuits/inc/circuit_termination_fields.html:54 #: netbox/templates/dcim/consoleport.html:79 #: netbox/templates/dcim/consoleserverport.html:80 #: netbox/templates/dcim/frontport.html:50 #: netbox/templates/dcim/frontport.html:118 -#: netbox/templates/dcim/interface.html:190 +#: netbox/templates/dcim/interface.html:247 #: netbox/templates/dcim/rearport.html:17 #: netbox/templates/dcim/rearport.html:108 msgid "Rear Port" msgstr "Poort achter" -#: netbox/dcim/forms/model_forms.py:1156 netbox/dcim/forms/model_forms.py:1595 -#: netbox/dcim/tables/connections.py:46 netbox/dcim/tables/devices.py:512 -#: netbox/templates/dcim/poweroutlet.html:44 +#: netbox/dcim/forms/model_forms.py:1169 netbox/dcim/forms/model_forms.py:1640 +#: netbox/dcim/tables/connections.py:46 netbox/dcim/tables/devices.py:521 +#: netbox/templates/dcim/poweroutlet.html:54 #: netbox/templates/dcim/powerport.html:17 msgid "Power Port" msgstr "Voedingspoort" -#: netbox/dcim/forms/model_forms.py:1157 netbox/dcim/forms/model_forms.py:1596 +#: netbox/dcim/forms/model_forms.py:1170 netbox/dcim/forms/model_forms.py:1641 #: netbox/templates/dcim/poweroutlet.html:17 #: netbox/templates/dcim/powerport.html:77 msgid "Power Outlet" msgstr "Stopcontact" -#: netbox/dcim/forms/model_forms.py:1159 netbox/dcim/forms/model_forms.py:1598 +#: netbox/dcim/forms/model_forms.py:1172 netbox/dcim/forms/model_forms.py:1643 msgid "Component Assignment" msgstr "Toewijzing van componenten" -#: netbox/dcim/forms/model_forms.py:1202 netbox/dcim/forms/model_forms.py:1645 +#: netbox/dcim/forms/model_forms.py:1218 netbox/dcim/forms/model_forms.py:1690 msgid "An InventoryItem can only be assigned to a single component." msgstr "Een InventoryItem kan slechts aan één component worden toegewezen." -#: netbox/dcim/forms/model_forms.py:1339 +#: netbox/dcim/forms/model_forms.py:1355 msgid "LAG interface" msgstr "LAG-interface" -#: netbox/dcim/forms/model_forms.py:1362 +#: netbox/dcim/forms/model_forms.py:1378 msgid "Filter VLANs available for assignment by group." msgstr "Filter-VLAN's die beschikbaar zijn voor toewijzing per groep." -#: netbox/dcim/forms/model_forms.py:1491 +#: netbox/dcim/forms/model_forms.py:1533 msgid "Child Device" msgstr "Apparaat voor kinderen" -#: netbox/dcim/forms/model_forms.py:1492 +#: netbox/dcim/forms/model_forms.py:1534 msgid "" "Child devices must first be created and assigned to the site and rack of the" " parent device." @@ -5052,32 +5496,58 @@ msgstr "" "Kindapparaten moeten eerst worden aangemaakt en toegewezen aan de site en " "het rack van het ouderapparaat." -#: netbox/dcim/forms/model_forms.py:1534 +#: netbox/dcim/forms/model_forms.py:1576 msgid "Console port" msgstr "Consolepoort" -#: netbox/dcim/forms/model_forms.py:1542 +#: netbox/dcim/forms/model_forms.py:1584 msgid "Console server port" msgstr "Console-serverpoort" -#: netbox/dcim/forms/model_forms.py:1550 +#: netbox/dcim/forms/model_forms.py:1592 msgid "Front port" msgstr "Poort voor" -#: netbox/dcim/forms/model_forms.py:1566 +#: netbox/dcim/forms/model_forms.py:1608 msgid "Power outlet" msgstr "Stopcontact" -#: netbox/dcim/forms/model_forms.py:1586 +#: netbox/dcim/forms/model_forms.py:1630 #: netbox/templates/dcim/inventoryitem.html:17 msgid "Inventory Item" msgstr "Inventarisitem" -#: netbox/dcim/forms/model_forms.py:1659 +#: netbox/dcim/forms/model_forms.py:1704 #: netbox/templates/dcim/inventoryitemrole.html:15 msgid "Inventory Item Role" msgstr "Rol van het inventarisitem" +#: netbox/dcim/forms/model_forms.py:1773 +msgid "VM Interface" +msgstr "VM-interface" + +#: netbox/dcim/forms/model_forms.py:1788 netbox/ipam/forms/filtersets.py:608 +#: netbox/ipam/forms/model_forms.py:334 netbox/ipam/forms/model_forms.py:796 +#: netbox/ipam/forms/model_forms.py:822 netbox/ipam/tables/vlans.py:171 +#: netbox/templates/virtualization/virtualdisk.html:21 +#: netbox/templates/virtualization/virtualmachine.html:12 +#: netbox/templates/virtualization/vminterface.html:21 +#: netbox/templates/vpn/tunneltermination.html:25 +#: netbox/virtualization/forms/filtersets.py:202 +#: netbox/virtualization/forms/filtersets.py:247 +#: netbox/virtualization/forms/model_forms.py:227 +#: netbox/virtualization/tables/virtualmachines.py:105 +#: netbox/virtualization/tables/virtualmachines.py:161 +#: netbox/vpn/choices.py:53 netbox/vpn/forms/filtersets.py:293 +#: netbox/vpn/forms/model_forms.py:161 netbox/vpn/forms/model_forms.py:172 +#: netbox/vpn/forms/model_forms.py:274 netbox/vpn/forms/model_forms.py:457 +msgid "Virtual Machine" +msgstr "Virtuele machine" + +#: netbox/dcim/forms/model_forms.py:1827 +msgid "A MAC address can only be assigned to a single object." +msgstr "Een MAC-adres kan slechts aan één object worden toegewezen." + #: netbox/dcim/forms/object_create.py:48 #: netbox/dcim/forms/object_create.py:199 #: netbox/dcim/forms/object_create.py:347 @@ -5098,7 +5568,7 @@ msgstr "" "{pattern_count} worden verwacht." #: netbox/dcim/forms/object_create.py:110 -#: netbox/dcim/forms/object_create.py:263 netbox/dcim/tables/devices.py:252 +#: netbox/dcim/forms/object_create.py:263 netbox/dcim/tables/devices.py:263 msgid "Rear ports" msgstr "Poorten achter" @@ -5129,7 +5599,7 @@ msgstr "" "overeenkomen met het geselecteerde aantal posities aan de achterkant van de " "poort ({rearport_count})." -#: netbox/dcim/forms/object_create.py:401 netbox/dcim/tables/devices.py:1033 +#: netbox/dcim/forms/object_create.py:401 netbox/dcim/tables/devices.py:1065 #: netbox/ipam/tables/fhrp.py:31 netbox/templates/dcim/virtualchassis.html:53 #: netbox/templates/dcim/virtualchassis_edit.html:47 #: netbox/templates/ipam/fhrpgroup.html:38 @@ -5148,30 +5618,30 @@ msgstr "" "Positie van het apparaat van het eerste lid. Verhoogt met één voor elk extra" " lid." -#: netbox/dcim/forms/object_create.py:427 +#: netbox/dcim/forms/object_create.py:428 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/cables.py:62 -#: netbox/dcim/models/device_component_templates.py:55 -#: netbox/dcim/models/device_components.py:62 +#: netbox/dcim/models/cables.py:64 +#: netbox/dcim/models/device_component_templates.py:51 +#: netbox/dcim/models/device_components.py:57 #: netbox/extras/models/customfields.py:111 msgid "label" msgstr "label" -#: netbox/dcim/models/cables.py:71 +#: netbox/dcim/models/cables.py:73 msgid "length" msgstr "lengte" -#: netbox/dcim/models/cables.py:78 +#: netbox/dcim/models/cables.py:80 msgid "length unit" msgstr "lengte-eenheid" -#: netbox/dcim/models/cables.py:95 +#: netbox/dcim/models/cables.py:98 msgid "cable" msgstr "kabel" -#: netbox/dcim/models/cables.py:96 +#: netbox/dcim/models/cables.py:99 msgid "cables" msgstr "kabels" @@ -5200,19 +5670,19 @@ msgid "A and B terminations cannot connect to the same object." msgstr "" "A- en B-aansluitingen kunnen geen verbinding maken met hetzelfde object." -#: netbox/dcim/models/cables.py:260 netbox/ipam/models/asns.py:37 +#: netbox/dcim/models/cables.py:262 netbox/ipam/models/asns.py:37 msgid "end" msgstr "einde" -#: netbox/dcim/models/cables.py:313 +#: netbox/dcim/models/cables.py:315 msgid "cable termination" msgstr "kabelafsluiting" -#: netbox/dcim/models/cables.py:314 +#: netbox/dcim/models/cables.py:316 msgid "cable terminations" msgstr "kabelaansluitingen" -#: netbox/dcim/models/cables.py:333 +#: netbox/dcim/models/cables.py:335 #, python-brace-format msgid "" "Duplicate termination found for {app_label}.{model} {termination_id}: cable " @@ -5221,37 +5691,71 @@ msgstr "" "Dubbele beëindiging gevonden voor {app_label}.{model} {termination_id}: " "kabel {cable_pk}" -#: netbox/dcim/models/cables.py:343 +#: netbox/dcim/models/cables.py:345 #, python-brace-format msgid "Cables cannot be terminated to {type_display} interfaces" msgstr "Kabels kunnen niet worden aangesloten op {type_display} interfaces" -#: netbox/dcim/models/cables.py:350 +#: netbox/dcim/models/cables.py:352 msgid "Circuit terminations attached to a provider network may not be cabled." msgstr "" "Circuitafsluitingen die zijn aangesloten op het netwerk van een provider " "zijn mogelijk niet bekabeld." -#: netbox/dcim/models/cables.py:448 netbox/extras/models/configs.py:50 +#: netbox/dcim/models/cables.py:450 netbox/extras/models/configs.py:50 msgid "is active" msgstr "is actief" -#: netbox/dcim/models/cables.py:452 +#: netbox/dcim/models/cables.py:454 msgid "is complete" msgstr "is compleet" -#: netbox/dcim/models/cables.py:456 +#: netbox/dcim/models/cables.py:458 msgid "is split" msgstr "is gesplitst" -#: netbox/dcim/models/cables.py:464 +#: netbox/dcim/models/cables.py:466 msgid "cable path" msgstr "kabelpad" -#: netbox/dcim/models/cables.py:465 +#: netbox/dcim/models/cables.py:467 msgid "cable paths" msgstr "kabelpaden" +#: netbox/dcim/models/cables.py:539 +msgid "All originating terminations must be attached to the same link" +msgstr "" +"Alle oorspronkelijke beëindigingen moeten aan dezelfde link worden " +"toegevoegd" + +#: netbox/dcim/models/cables.py:551 +msgid "All mid-span terminations must have the same termination type" +msgstr "" +"Alle tussentijdse beëindigingen moeten hetzelfde beëindigingstype hebben" + +#: netbox/dcim/models/cables.py:556 +msgid "All mid-span terminations must have the same parent object" +msgstr "" +"Alle mid-span afsluitingen moeten hetzelfde bovenliggende object hebben" + +#: netbox/dcim/models/cables.py:580 +msgid "All links must be cable or wireless" +msgstr "Alle verbindingen moeten via de kabel of draadloos zijn" + +#: netbox/dcim/models/cables.py:582 +msgid "All links must match first link type" +msgstr "Alle links moeten overeenkomen met het eerste linktype" + +#: netbox/dcim/models/cables.py:665 +msgid "" +"All positions counts within the path on opposite ends of links must match" +msgstr "" +"Alle posities binnen het pad aan weerszijden van links moeten overeenkomen" + +#: netbox/dcim/models/cables.py:674 +msgid "Remote termination position filter is missing" +msgstr "Het filter voor de positie van de eindpositie op afstand ontbreekt" + #: netbox/dcim/models/device_component_templates.py:46 #, python-brace-format msgid "" @@ -5261,18 +5765,18 @@ msgstr "" "{module} wordt geaccepteerd als vervanging voor de positie van het " "modulecompartiment wanneer deze is gekoppeld aan een moduletype." -#: netbox/dcim/models/device_component_templates.py:58 -#: netbox/dcim/models/device_components.py:65 +#: netbox/dcim/models/device_component_templates.py:54 +#: netbox/dcim/models/device_components.py:60 msgid "Physical label" msgstr "Fysiek label" -#: netbox/dcim/models/device_component_templates.py:103 +#: netbox/dcim/models/device_component_templates.py:99 msgid "Component templates cannot be moved to a different device type." msgstr "" "Componentsjablonen kunnen niet naar een ander apparaattype worden " "verplaatst." -#: netbox/dcim/models/device_component_templates.py:154 +#: netbox/dcim/models/device_component_templates.py:150 msgid "" "A component template cannot be associated with both a device type and a " "module type." @@ -5280,7 +5784,7 @@ msgstr "" "Een componentsjabloon kan niet worden gekoppeld aan zowel een apparaattype " "als een moduletype." -#: netbox/dcim/models/device_component_templates.py:158 +#: netbox/dcim/models/device_component_templates.py:154 msgid "" "A component template must be associated with either a device type or a " "module type." @@ -5288,138 +5792,138 @@ msgstr "" "Een componentsjabloon moet gekoppeld zijn aan een apparaattype of een " "moduletype." -#: netbox/dcim/models/device_component_templates.py:212 +#: netbox/dcim/models/device_component_templates.py:209 msgid "console port template" msgstr "sjabloon voor consolepoort" -#: netbox/dcim/models/device_component_templates.py:213 +#: netbox/dcim/models/device_component_templates.py:210 msgid "console port templates" msgstr "sjablonen voor consolepoorten" -#: netbox/dcim/models/device_component_templates.py:246 +#: netbox/dcim/models/device_component_templates.py:244 msgid "console server port template" msgstr "poortsjabloon voor consoleserver" -#: netbox/dcim/models/device_component_templates.py:247 +#: netbox/dcim/models/device_component_templates.py:245 msgid "console server port templates" msgstr "poortsjablonen voor consoleservers" -#: netbox/dcim/models/device_component_templates.py:278 -#: netbox/dcim/models/device_components.py:352 +#: netbox/dcim/models/device_component_templates.py:277 +#: netbox/dcim/models/device_components.py:345 msgid "maximum draw" msgstr "maximale trekking" -#: netbox/dcim/models/device_component_templates.py:285 -#: netbox/dcim/models/device_components.py:359 +#: netbox/dcim/models/device_component_templates.py:284 +#: netbox/dcim/models/device_components.py:352 msgid "allocated draw" msgstr "toegewezen gelijkspel" -#: netbox/dcim/models/device_component_templates.py:295 +#: netbox/dcim/models/device_component_templates.py:294 msgid "power port template" msgstr "sjabloon voor voedingspoort" -#: netbox/dcim/models/device_component_templates.py:296 +#: netbox/dcim/models/device_component_templates.py:295 msgid "power port templates" msgstr "sjablonen voor voedingspoorten" #: netbox/dcim/models/device_component_templates.py:315 -#: netbox/dcim/models/device_components.py:382 +#: netbox/dcim/models/device_components.py:372 #, python-brace-format msgid "Allocated draw cannot exceed the maximum draw ({maximum_draw}W)." msgstr "" "De toegewezen trekking mag niet hoger zijn dan de maximale trekking " "({maximum_draw}W)." -#: netbox/dcim/models/device_component_templates.py:347 -#: netbox/dcim/models/device_components.py:477 +#: netbox/dcim/models/device_component_templates.py:349 +#: netbox/dcim/models/device_components.py:468 msgid "feed leg" msgstr "voerbeen" -#: netbox/dcim/models/device_component_templates.py:351 -#: netbox/dcim/models/device_components.py:481 +#: netbox/dcim/models/device_component_templates.py:354 +#: netbox/dcim/models/device_components.py:473 msgid "Phase (for three-phase feeds)" msgstr "Fase (voor driefasige voedingen)" -#: netbox/dcim/models/device_component_templates.py:357 +#: netbox/dcim/models/device_component_templates.py:360 msgid "power outlet template" msgstr "sjabloon voor stopcontact" -#: netbox/dcim/models/device_component_templates.py:358 +#: netbox/dcim/models/device_component_templates.py:361 msgid "power outlet templates" msgstr "sjablonen voor stopcontacten" -#: netbox/dcim/models/device_component_templates.py:367 +#: netbox/dcim/models/device_component_templates.py:370 #, python-brace-format msgid "Parent power port ({power_port}) must belong to the same device type" msgstr "" "Voedingspoort voor ouders ({power_port}) moet tot hetzelfde apparaattype " "behoren" -#: netbox/dcim/models/device_component_templates.py:371 +#: netbox/dcim/models/device_component_templates.py:376 #, python-brace-format msgid "Parent power port ({power_port}) must belong to the same module type" msgstr "" "Voedingspoort voor ouders ({power_port}) moet tot hetzelfde moduletype " "behoren" -#: netbox/dcim/models/device_component_templates.py:423 -#: netbox/dcim/models/device_components.py:611 +#: netbox/dcim/models/device_component_templates.py:430 +#: netbox/dcim/models/device_components.py:659 msgid "management only" msgstr "alleen beheer" -#: netbox/dcim/models/device_component_templates.py:431 -#: netbox/dcim/models/device_components.py:550 +#: netbox/dcim/models/device_component_templates.py:438 +#: netbox/dcim/models/device_components.py:539 msgid "bridge interface" msgstr "bridge-interface" -#: netbox/dcim/models/device_component_templates.py:449 -#: netbox/dcim/models/device_components.py:636 +#: netbox/dcim/models/device_component_templates.py:459 +#: netbox/dcim/models/device_components.py:685 msgid "wireless role" msgstr "draadloze rol" -#: netbox/dcim/models/device_component_templates.py:455 +#: netbox/dcim/models/device_component_templates.py:465 msgid "interface template" msgstr "interfacesjabloon" -#: netbox/dcim/models/device_component_templates.py:456 +#: netbox/dcim/models/device_component_templates.py:466 msgid "interface templates" msgstr "interfacesjablonen" -#: netbox/dcim/models/device_component_templates.py:463 -#: netbox/dcim/models/device_components.py:804 -#: netbox/virtualization/models/virtualmachines.py:405 +#: netbox/dcim/models/device_component_templates.py:473 +#: netbox/dcim/models/device_components.py:845 +#: netbox/virtualization/models/virtualmachines.py:385 msgid "An interface cannot be bridged to itself." msgstr "Een interface kan niet naar zichzelf worden overbrugd." -#: netbox/dcim/models/device_component_templates.py:466 +#: netbox/dcim/models/device_component_templates.py:477 #, python-brace-format msgid "Bridge interface ({bridge}) must belong to the same device type" msgstr "Bridge-interface ({bridge}) moet tot hetzelfde apparaattype behoren" -#: netbox/dcim/models/device_component_templates.py:470 +#: netbox/dcim/models/device_component_templates.py:483 #, python-brace-format msgid "Bridge interface ({bridge}) must belong to the same module type" msgstr "Bridge-interface ({bridge}) moet tot hetzelfde moduletype behoren" -#: netbox/dcim/models/device_component_templates.py:526 -#: netbox/dcim/models/device_components.py:984 +#: netbox/dcim/models/device_component_templates.py:540 +#: netbox/dcim/models/device_components.py:1035 msgid "rear port position" msgstr "positie van de achterpoort" -#: netbox/dcim/models/device_component_templates.py:551 +#: netbox/dcim/models/device_component_templates.py:565 msgid "front port template" msgstr "sjabloon voor de voorpoort" -#: netbox/dcim/models/device_component_templates.py:552 +#: netbox/dcim/models/device_component_templates.py:566 msgid "front port templates" msgstr "sjablonen voor de voorpoort" -#: netbox/dcim/models/device_component_templates.py:562 +#: netbox/dcim/models/device_component_templates.py:576 #, python-brace-format msgid "Rear port ({name}) must belong to the same device type" msgstr "Achterpoort ({name}) moet tot hetzelfde apparaattype behoren" -#: netbox/dcim/models/device_component_templates.py:568 +#: netbox/dcim/models/device_component_templates.py:582 #, python-brace-format msgid "" "Invalid rear port position ({position}); rear port {name} has only {count} " @@ -5428,48 +5932,48 @@ msgstr "" "Ongeldige positie van de achterpoort ({position}); achterpoort {name} heeft " "slechts {count} standen" -#: netbox/dcim/models/device_component_templates.py:621 -#: netbox/dcim/models/device_components.py:1053 +#: netbox/dcim/models/device_component_templates.py:635 +#: netbox/dcim/models/device_components.py:1101 msgid "positions" msgstr "standen" -#: netbox/dcim/models/device_component_templates.py:632 +#: netbox/dcim/models/device_component_templates.py:646 msgid "rear port template" msgstr "sjabloon voor de achterpoort" -#: netbox/dcim/models/device_component_templates.py:633 +#: netbox/dcim/models/device_component_templates.py:647 msgid "rear port templates" msgstr "sjablonen voor achterpoorten" -#: netbox/dcim/models/device_component_templates.py:662 -#: netbox/dcim/models/device_components.py:1103 +#: netbox/dcim/models/device_component_templates.py:676 +#: netbox/dcim/models/device_components.py:1148 msgid "position" msgstr "positie" -#: netbox/dcim/models/device_component_templates.py:665 -#: netbox/dcim/models/device_components.py:1106 +#: netbox/dcim/models/device_component_templates.py:679 +#: netbox/dcim/models/device_components.py:1151 msgid "Identifier to reference when renaming installed components" msgstr "" "Identificatie waarnaar moet worden verwezen bij het hernoemen van " "geïnstalleerde componenten" -#: netbox/dcim/models/device_component_templates.py:671 +#: netbox/dcim/models/device_component_templates.py:685 msgid "module bay template" msgstr "sjabloon voor modulebay" -#: netbox/dcim/models/device_component_templates.py:672 +#: netbox/dcim/models/device_component_templates.py:686 msgid "module bay templates" msgstr "sjablonen voor modulebay" -#: netbox/dcim/models/device_component_templates.py:699 +#: netbox/dcim/models/device_component_templates.py:713 msgid "device bay template" msgstr "sjabloon voor apparaatvak" -#: netbox/dcim/models/device_component_templates.py:700 +#: netbox/dcim/models/device_component_templates.py:714 msgid "device bay templates" msgstr "sjablonen voor apparaatruimte" -#: netbox/dcim/models/device_component_templates.py:713 +#: netbox/dcim/models/device_component_templates.py:728 #, python-brace-format msgid "" "Subdevice role of device type ({device_type}) must be set to \"parent\" to " @@ -5478,211 +5982,230 @@ msgstr "" "De rol van het apparaattype van het subapparaat ({device_type}) moet op " "„parent” zijn ingesteld om apparaatbays toe te staan." -#: netbox/dcim/models/device_component_templates.py:768 -#: netbox/dcim/models/device_components.py:1262 +#: netbox/dcim/models/device_component_templates.py:784 +#: netbox/dcim/models/device_components.py:1304 msgid "part ID" msgstr "onderdeel-ID" -#: netbox/dcim/models/device_component_templates.py:770 -#: netbox/dcim/models/device_components.py:1264 +#: netbox/dcim/models/device_component_templates.py:786 +#: netbox/dcim/models/device_components.py:1306 msgid "Manufacturer-assigned part identifier" msgstr "Onderdeel-ID toegewezen door de fabrikant" -#: netbox/dcim/models/device_component_templates.py:787 +#: netbox/dcim/models/device_component_templates.py:803 msgid "inventory item template" msgstr "sjabloon voor inventarisitems" -#: netbox/dcim/models/device_component_templates.py:788 +#: netbox/dcim/models/device_component_templates.py:804 msgid "inventory item templates" msgstr "sjablonen voor inventarisitems" -#: netbox/dcim/models/device_components.py:105 +#: netbox/dcim/models/device_components.py:100 msgid "Components cannot be moved to a different device." msgstr "Componenten kunnen niet naar een ander apparaat worden verplaatst." -#: netbox/dcim/models/device_components.py:144 +#: netbox/dcim/models/device_components.py:139 msgid "cable end" msgstr "uiteinde van de kabel" -#: netbox/dcim/models/device_components.py:150 +#: netbox/dcim/models/device_components.py:146 msgid "mark connected" msgstr "markeer verbonden" -#: netbox/dcim/models/device_components.py:152 +#: netbox/dcim/models/device_components.py:148 msgid "Treat as if a cable is connected" msgstr "Behandel alsof er een kabel is aangesloten" -#: netbox/dcim/models/device_components.py:170 +#: netbox/dcim/models/device_components.py:166 msgid "Must specify cable end (A or B) when attaching a cable." msgstr "" "Moet het kabeluiteinde (A of B) specificeren bij het aansluiten van een " "kabel." -#: netbox/dcim/models/device_components.py:174 +#: netbox/dcim/models/device_components.py:170 msgid "Cable end must not be set without a cable." msgstr "Het kabeluiteinde mag niet zonder kabel worden ingesteld." -#: netbox/dcim/models/device_components.py:178 +#: netbox/dcim/models/device_components.py:174 msgid "Cannot mark as connected with a cable attached." msgstr "Kan niet markeren als verbonden met een aangesloten kabel." -#: netbox/dcim/models/device_components.py:202 +#: netbox/dcim/models/device_components.py:198 #, python-brace-format msgid "{class_name} models must declare a parent_object property" msgstr "{class_name} modellen moeten een eigenschap parent_object declareren" -#: netbox/dcim/models/device_components.py:287 -#: netbox/dcim/models/device_components.py:316 -#: netbox/dcim/models/device_components.py:349 -#: netbox/dcim/models/device_components.py:467 +#: netbox/dcim/models/device_components.py:284 +#: netbox/dcim/models/device_components.py:311 +#: netbox/dcim/models/device_components.py:342 +#: netbox/dcim/models/device_components.py:458 msgid "Physical port type" msgstr "Fysiek poorttype" -#: netbox/dcim/models/device_components.py:290 -#: netbox/dcim/models/device_components.py:319 +#: netbox/dcim/models/device_components.py:287 +#: netbox/dcim/models/device_components.py:314 msgid "speed" msgstr "snelheid" -#: netbox/dcim/models/device_components.py:294 -#: netbox/dcim/models/device_components.py:323 +#: netbox/dcim/models/device_components.py:291 +#: netbox/dcim/models/device_components.py:318 msgid "Port speed in bits per second" msgstr "Poortsnelheid in bits per seconde" -#: netbox/dcim/models/device_components.py:300 +#: netbox/dcim/models/device_components.py:297 msgid "console port" msgstr "consolepoort" -#: netbox/dcim/models/device_components.py:301 +#: netbox/dcim/models/device_components.py:298 msgid "console ports" msgstr "consolepoorten" -#: netbox/dcim/models/device_components.py:329 +#: netbox/dcim/models/device_components.py:324 msgid "console server port" msgstr "console-serverpoort" -#: netbox/dcim/models/device_components.py:330 +#: netbox/dcim/models/device_components.py:325 msgid "console server ports" msgstr "console-serverpoorten" -#: netbox/dcim/models/device_components.py:369 +#: netbox/dcim/models/device_components.py:362 msgid "power port" msgstr "voedingspoort" -#: netbox/dcim/models/device_components.py:370 +#: netbox/dcim/models/device_components.py:363 msgid "power ports" msgstr "voedingspoorten" -#: netbox/dcim/models/device_components.py:487 +#: netbox/dcim/models/device_components.py:483 msgid "power outlet" msgstr "stopcontact" -#: netbox/dcim/models/device_components.py:488 +#: netbox/dcim/models/device_components.py:484 msgid "power outlets" msgstr "stopcontacten" -#: netbox/dcim/models/device_components.py:499 +#: netbox/dcim/models/device_components.py:492 #, python-brace-format msgid "Parent power port ({power_port}) must belong to the same device" msgstr "" "Voedingspoort voor ouders ({power_port}) moet tot hetzelfde apparaat behoren" -#: netbox/dcim/models/device_components.py:530 netbox/vpn/models/crypto.py:81 -#: netbox/vpn/models/crypto.py:226 +#: netbox/dcim/models/device_components.py:518 netbox/vpn/models/crypto.py:80 +#: netbox/vpn/models/crypto.py:222 msgid "mode" msgstr "-modus" -#: netbox/dcim/models/device_components.py:534 +#: netbox/dcim/models/device_components.py:523 msgid "IEEE 802.1Q tagging strategy" msgstr "IEEE 802.1Q-tagging-strategie" -#: netbox/dcim/models/device_components.py:542 +#: netbox/dcim/models/device_components.py:531 msgid "parent interface" msgstr "bovenliggende interface" -#: netbox/dcim/models/device_components.py:602 -msgid "parent LAG" -msgstr "LAG van de ouders" - -#: netbox/dcim/models/device_components.py:612 -msgid "This interface is used only for out-of-band management" -msgstr "Deze interface wordt alleen gebruikt voor beheer buiten de band" - -#: netbox/dcim/models/device_components.py:617 -msgid "speed (Kbps)" -msgstr "snelheid (Kbps)" - -#: netbox/dcim/models/device_components.py:620 -msgid "duplex" -msgstr "tweezijdig" - -#: netbox/dcim/models/device_components.py:630 -msgid "64-bit World Wide Name" -msgstr "64-bits wereldwijde naam" - -#: netbox/dcim/models/device_components.py:642 -msgid "wireless channel" -msgstr "draadloos kanaal" - -#: netbox/dcim/models/device_components.py:649 -msgid "channel frequency (MHz)" -msgstr "kanaalfrequentie (MHz)" - -#: netbox/dcim/models/device_components.py:650 -#: netbox/dcim/models/device_components.py:658 -msgid "Populated by selected channel (if set)" -msgstr "Ingevuld per geselecteerd kanaal (indien ingesteld)" - -#: netbox/dcim/models/device_components.py:664 -msgid "transmit power (dBm)" -msgstr "zendvermogen (dBm)" - -#: netbox/dcim/models/device_components.py:689 netbox/wireless/models.py:117 -msgid "wireless LANs" -msgstr "draadloze LAN's" - -#: netbox/dcim/models/device_components.py:697 -#: netbox/virtualization/models/virtualmachines.py:335 +#: netbox/dcim/models/device_components.py:547 msgid "untagged VLAN" msgstr "VLAN zonder label" -#: netbox/dcim/models/device_components.py:703 -#: netbox/virtualization/models/virtualmachines.py:341 +#: netbox/dcim/models/device_components.py:553 msgid "tagged VLANs" msgstr "gelabelde VLAN's" -#: netbox/dcim/models/device_components.py:745 -#: netbox/virtualization/models/virtualmachines.py:377 +#: netbox/dcim/models/device_components.py:561 +#: netbox/dcim/tables/devices.py:602 netbox/ipam/forms/bulk_edit.py:510 +#: netbox/ipam/forms/bulk_import.py:491 netbox/ipam/forms/filtersets.py:565 +#: netbox/ipam/forms/model_forms.py:692 netbox/ipam/tables/vlans.py:106 +#: netbox/templates/dcim/interface.html:86 netbox/templates/ipam/vlan.html:77 +msgid "Q-in-Q SVLAN" +msgstr "Q-in-Q SVLAN" + +#: netbox/dcim/models/device_components.py:576 +msgid "primary MAC address" +msgstr "primair MAC-adres" + +#: netbox/dcim/models/device_components.py:588 +msgid "Only Q-in-Q interfaces may specify a service VLAN." +msgstr "Alleen Q-in-Q-interfaces mogen een service-VLAN specificeren." + +#: netbox/dcim/models/device_components.py:594 +#, python-brace-format +msgid "MAC address {mac_address} is not assigned to this interface." +msgstr "MAC-adres {mac_address} is niet toegewezen aan deze interface." + +#: netbox/dcim/models/device_components.py:650 +msgid "parent LAG" +msgstr "LAG van de ouders" + +#: netbox/dcim/models/device_components.py:660 +msgid "This interface is used only for out-of-band management" +msgstr "Deze interface wordt alleen gebruikt voor beheer buiten de band" + +#: netbox/dcim/models/device_components.py:665 +msgid "speed (Kbps)" +msgstr "snelheid (Kbps)" + +#: netbox/dcim/models/device_components.py:668 +msgid "duplex" +msgstr "tweezijdig" + +#: netbox/dcim/models/device_components.py:678 +msgid "64-bit World Wide Name" +msgstr "64-bits wereldwijde naam" + +#: netbox/dcim/models/device_components.py:692 +msgid "wireless channel" +msgstr "draadloos kanaal" + +#: netbox/dcim/models/device_components.py:699 +msgid "channel frequency (MHz)" +msgstr "kanaalfrequentie (MHz)" + +#: netbox/dcim/models/device_components.py:700 +#: netbox/dcim/models/device_components.py:708 +msgid "Populated by selected channel (if set)" +msgstr "Ingevuld per geselecteerd kanaal (indien ingesteld)" + +#: netbox/dcim/models/device_components.py:714 +msgid "transmit power (dBm)" +msgstr "zendvermogen (dBm)" + +#: netbox/dcim/models/device_components.py:741 netbox/wireless/models.py:117 +msgid "wireless LANs" +msgstr "draadloze LAN's" + +#: netbox/dcim/models/device_components.py:789 +#: netbox/virtualization/models/virtualmachines.py:359 msgid "interface" msgstr "interface" -#: netbox/dcim/models/device_components.py:746 -#: netbox/virtualization/models/virtualmachines.py:378 +#: netbox/dcim/models/device_components.py:790 +#: netbox/virtualization/models/virtualmachines.py:360 msgid "interfaces" msgstr "interfaces" -#: netbox/dcim/models/device_components.py:757 +#: netbox/dcim/models/device_components.py:798 #, python-brace-format msgid "{display_type} interfaces cannot have a cable attached." msgstr "{display_type} op interfaces kan geen kabel worden aangesloten." -#: netbox/dcim/models/device_components.py:765 +#: netbox/dcim/models/device_components.py:806 #, python-brace-format msgid "{display_type} interfaces cannot be marked as connected." msgstr "" "{display_type} interfaces kunnen niet als verbonden worden gemarkeerd." -#: netbox/dcim/models/device_components.py:774 -#: netbox/virtualization/models/virtualmachines.py:390 +#: netbox/dcim/models/device_components.py:815 +#: netbox/virtualization/models/virtualmachines.py:370 msgid "An interface cannot be its own parent." msgstr "Een interface kan niet zijn eigen ouder zijn." -#: netbox/dcim/models/device_components.py:778 +#: netbox/dcim/models/device_components.py:819 msgid "Only virtual interfaces may be assigned to a parent interface." msgstr "" "Alleen virtuele interfaces mogen aan een bovenliggende interface worden " "toegewezen." -#: netbox/dcim/models/device_components.py:785 +#: netbox/dcim/models/device_components.py:826 #, python-brace-format msgid "" "The selected parent interface ({interface}) belongs to a different device " @@ -5691,7 +6214,7 @@ msgstr "" "De geselecteerde ouderinterface ({interface}) hoort bij een ander apparaat " "({device})" -#: netbox/dcim/models/device_components.py:791 +#: netbox/dcim/models/device_components.py:832 #, python-brace-format msgid "" "The selected parent interface ({interface}) belongs to {device}, which is " @@ -5700,7 +6223,7 @@ msgstr "" "De geselecteerde ouderinterface ({interface}) behoort tot {device}, dat geen" " deel uitmaakt van een virtueel chassis {virtual_chassis}." -#: netbox/dcim/models/device_components.py:811 +#: netbox/dcim/models/device_components.py:852 #, python-brace-format msgid "" "The selected bridge interface ({bridge}) belongs to a different device " @@ -5709,7 +6232,7 @@ msgstr "" "De geselecteerde bridge-interface ({bridge}) hoort bij een ander apparaat " "({device})." -#: netbox/dcim/models/device_components.py:817 +#: netbox/dcim/models/device_components.py:858 #, python-brace-format msgid "" "The selected bridge interface ({interface}) belongs to {device}, which is " @@ -5718,15 +6241,15 @@ msgstr "" "De geselecteerde bridge-interface ({interface}) behoort tot {device}, dat " "geen deel uitmaakt van een virtueel chassis {virtual_chassis}." -#: netbox/dcim/models/device_components.py:828 +#: netbox/dcim/models/device_components.py:869 msgid "Virtual interfaces cannot have a parent LAG interface." msgstr "Virtuele interfaces kunnen geen bovenliggende LAG-interface hebben." -#: netbox/dcim/models/device_components.py:832 +#: netbox/dcim/models/device_components.py:873 msgid "A LAG interface cannot be its own parent." msgstr "Een LAG-interface kan niet zijn eigen ouder zijn." -#: netbox/dcim/models/device_components.py:839 +#: netbox/dcim/models/device_components.py:880 #, python-brace-format msgid "" "The selected LAG interface ({lag}) belongs to a different device ({device})." @@ -5734,7 +6257,7 @@ msgstr "" "De geselecteerde LAG-interface ({lag}) hoort bij een ander apparaat " "({device})." -#: netbox/dcim/models/device_components.py:845 +#: netbox/dcim/models/device_components.py:886 #, python-brace-format msgid "" "The selected LAG interface ({lag}) belongs to {device}, which is not part of" @@ -5743,46 +6266,50 @@ msgstr "" "De geselecteerde LAG-interface ({lag}) behoort tot {device}, dat geen deel " "uitmaakt van een virtueel chassis {virtual_chassis}." -#: netbox/dcim/models/device_components.py:856 +#: netbox/dcim/models/device_components.py:897 msgid "Virtual interfaces cannot have a PoE mode." msgstr "Virtuele interfaces kunnen geen PoE-modus hebben." -#: netbox/dcim/models/device_components.py:860 +#: netbox/dcim/models/device_components.py:901 msgid "Virtual interfaces cannot have a PoE type." msgstr "Virtuele interfaces mogen geen PoE-type hebben." -#: netbox/dcim/models/device_components.py:866 +#: netbox/dcim/models/device_components.py:907 msgid "Must specify PoE mode when designating a PoE type." msgstr "Moet de PoE-modus specificeren bij het aanwijzen van een PoE-type." -#: netbox/dcim/models/device_components.py:873 +#: netbox/dcim/models/device_components.py:914 msgid "Wireless role may be set only on wireless interfaces." msgstr "De draadloze rol kan alleen worden ingesteld op draadloze interfaces." -#: netbox/dcim/models/device_components.py:875 +#: netbox/dcim/models/device_components.py:916 msgid "Channel may be set only on wireless interfaces." msgstr "Kanaal mag alleen worden ingesteld op draadloze interfaces." -#: netbox/dcim/models/device_components.py:881 +#: netbox/dcim/models/device_components.py:922 msgid "Channel frequency may be set only on wireless interfaces." msgstr "" "De kanaalfrequentie mag alleen worden ingesteld op draadloze interfaces." -#: netbox/dcim/models/device_components.py:885 +#: netbox/dcim/models/device_components.py:926 msgid "Cannot specify custom frequency with channel selected." msgstr "" "Kan geen aangepaste frequentie specificeren met een geselecteerd kanaal." -#: netbox/dcim/models/device_components.py:891 +#: netbox/dcim/models/device_components.py:932 msgid "Channel width may be set only on wireless interfaces." msgstr "De kanaalbreedte kan alleen worden ingesteld op draadloze interfaces." -#: netbox/dcim/models/device_components.py:893 +#: netbox/dcim/models/device_components.py:934 msgid "Cannot specify custom width with channel selected." msgstr "" "Kan geen aangepaste breedte specificeren als het kanaal is geselecteerd." -#: netbox/dcim/models/device_components.py:901 +#: netbox/dcim/models/device_components.py:938 +msgid "Interface mode does not support an untagged vlan." +msgstr "De interfacemodus ondersteunt een niet-gelabeld VLAN niet." + +#: netbox/dcim/models/device_components.py:944 #, python-brace-format msgid "" "The untagged VLAN ({untagged_vlan}) must belong to the same site as the " @@ -5791,24 +6318,24 @@ msgstr "" "Het VLAN zonder label ({untagged_vlan}) moet tot dezelfde site behoren als " "het bovenliggende apparaat van de interface, of het moet globaal zijn." -#: netbox/dcim/models/device_components.py:990 +#: netbox/dcim/models/device_components.py:1041 msgid "Mapped position on corresponding rear port" msgstr "In kaart gebrachte positie op de corresponderende achterpoort" -#: netbox/dcim/models/device_components.py:1006 +#: netbox/dcim/models/device_components.py:1057 msgid "front port" msgstr "poort voor" -#: netbox/dcim/models/device_components.py:1007 +#: netbox/dcim/models/device_components.py:1058 msgid "front ports" msgstr "poorten voor" -#: netbox/dcim/models/device_components.py:1021 +#: netbox/dcim/models/device_components.py:1069 #, python-brace-format msgid "Rear port ({rear_port}) must belong to the same device" msgstr "Achterpoort ({rear_port}) moet tot hetzelfde apparaat behoren" -#: netbox/dcim/models/device_components.py:1029 +#: netbox/dcim/models/device_components.py:1077 #, python-brace-format msgid "" "Invalid rear port position ({rear_port_position}): Rear port {name} has only" @@ -5817,19 +6344,19 @@ msgstr "" "Ongeldige positie van de achterpoort ({rear_port_position}): Achterpoort " "{name} heeft slechts {positions} posities." -#: netbox/dcim/models/device_components.py:1059 +#: netbox/dcim/models/device_components.py:1107 msgid "Number of front ports which may be mapped" msgstr "Aantal poorten aan de voorkant dat in kaart kan worden gebracht" -#: netbox/dcim/models/device_components.py:1064 +#: netbox/dcim/models/device_components.py:1112 msgid "rear port" msgstr "poort achter" -#: netbox/dcim/models/device_components.py:1065 +#: netbox/dcim/models/device_components.py:1113 msgid "rear ports" msgstr "poorten achter" -#: netbox/dcim/models/device_components.py:1079 +#: netbox/dcim/models/device_components.py:1124 #, python-brace-format msgid "" "The number of positions cannot be less than the number of mapped front ports" @@ -5838,39 +6365,39 @@ msgstr "" "Het aantal posities mag niet minder zijn dan het aantal toegewezen poorten " "aan de voorkant ({frontport_count})" -#: netbox/dcim/models/device_components.py:1120 +#: netbox/dcim/models/device_components.py:1165 msgid "module bay" msgstr "modulevak" -#: netbox/dcim/models/device_components.py:1121 +#: netbox/dcim/models/device_components.py:1166 msgid "module bays" msgstr "modulevakken" -#: netbox/dcim/models/device_components.py:1138 -#: netbox/dcim/models/devices.py:1224 +#: netbox/dcim/models/device_components.py:1180 +#: netbox/dcim/models/devices.py:1229 msgid "A module bay cannot belong to a module installed within it." msgstr "" "Een modulecompartiment mag niet behoren tot een module die erin is " "geïnstalleerd." -#: netbox/dcim/models/device_components.py:1164 +#: netbox/dcim/models/device_components.py:1206 msgid "device bay" msgstr "apparaatvak" -#: netbox/dcim/models/device_components.py:1165 +#: netbox/dcim/models/device_components.py:1207 msgid "device bays" msgstr "bays voor apparaten" -#: netbox/dcim/models/device_components.py:1175 +#: netbox/dcim/models/device_components.py:1214 #, python-brace-format msgid "This type of device ({device_type}) does not support device bays." msgstr "Dit type apparaat ({device_type}) ondersteunt geen apparaatsleuven." -#: netbox/dcim/models/device_components.py:1181 +#: netbox/dcim/models/device_components.py:1220 msgid "Cannot install a device into itself." msgstr "Kan een apparaat niet op zichzelf installeren." -#: netbox/dcim/models/device_components.py:1189 +#: netbox/dcim/models/device_components.py:1228 #, python-brace-format msgid "" "Cannot install the specified device; device is already installed in {bay}." @@ -5878,118 +6405,118 @@ msgstr "" "Kan het opgegeven apparaat niet installeren; het apparaat is al " "geïnstalleerd in {bay}." -#: netbox/dcim/models/device_components.py:1210 +#: netbox/dcim/models/device_components.py:1249 msgid "inventory item role" msgstr "Rol van het inventarisitem" -#: netbox/dcim/models/device_components.py:1211 +#: netbox/dcim/models/device_components.py:1250 msgid "inventory item roles" msgstr "Rollen van inventarisitems" -#: netbox/dcim/models/device_components.py:1268 -#: netbox/dcim/models/devices.py:607 netbox/dcim/models/devices.py:1181 -#: netbox/dcim/models/racks.py:313 -#: netbox/virtualization/models/virtualmachines.py:131 +#: netbox/dcim/models/device_components.py:1310 +#: netbox/dcim/models/devices.py:598 netbox/dcim/models/devices.py:1189 +#: netbox/dcim/models/racks.py:304 +#: netbox/virtualization/models/virtualmachines.py:126 msgid "serial number" msgstr "serienummer" -#: netbox/dcim/models/device_components.py:1276 -#: netbox/dcim/models/devices.py:615 netbox/dcim/models/devices.py:1188 -#: netbox/dcim/models/racks.py:320 +#: netbox/dcim/models/device_components.py:1318 +#: netbox/dcim/models/devices.py:606 netbox/dcim/models/devices.py:1196 +#: netbox/dcim/models/racks.py:311 msgid "asset tag" msgstr "tag voor bedrijfsmiddelen" -#: netbox/dcim/models/device_components.py:1277 +#: netbox/dcim/models/device_components.py:1319 msgid "A unique tag used to identify this item" msgstr "Een unieke tag die wordt gebruikt om dit item te identificeren" -#: netbox/dcim/models/device_components.py:1280 +#: netbox/dcim/models/device_components.py:1322 msgid "discovered" msgstr "ontdekt" -#: netbox/dcim/models/device_components.py:1282 +#: netbox/dcim/models/device_components.py:1324 msgid "This item was automatically discovered" msgstr "Dit item is automatisch ontdekt" -#: netbox/dcim/models/device_components.py:1300 +#: netbox/dcim/models/device_components.py:1342 msgid "inventory item" msgstr "inventarisitem" -#: netbox/dcim/models/device_components.py:1301 +#: netbox/dcim/models/device_components.py:1343 msgid "inventory items" msgstr "inventarisartikelen" -#: netbox/dcim/models/device_components.py:1312 +#: netbox/dcim/models/device_components.py:1351 msgid "Cannot assign self as parent." msgstr "Kan zichzelf niet als ouder toewijzen." -#: netbox/dcim/models/device_components.py:1320 +#: netbox/dcim/models/device_components.py:1359 msgid "Parent inventory item does not belong to the same device." msgstr "" "Het item van de bovenliggende inventaris behoort niet tot hetzelfde " "apparaat." -#: netbox/dcim/models/device_components.py:1326 +#: netbox/dcim/models/device_components.py:1365 msgid "Cannot move an inventory item with dependent children" msgstr "Kan een inventarisitem met afhankelijke kinderen niet verplaatsen" -#: netbox/dcim/models/device_components.py:1334 +#: netbox/dcim/models/device_components.py:1373 msgid "Cannot assign inventory item to component on another device" msgstr "Kan inventarisitem niet toewijzen aan component op een ander apparaat" -#: netbox/dcim/models/devices.py:54 +#: netbox/dcim/models/devices.py:59 msgid "manufacturer" msgstr "fabrikant" -#: netbox/dcim/models/devices.py:55 +#: netbox/dcim/models/devices.py:60 msgid "manufacturers" msgstr "fabrikanten" -#: netbox/dcim/models/devices.py:82 netbox/dcim/models/devices.py:382 +#: netbox/dcim/models/devices.py:84 netbox/dcim/models/devices.py:383 #: netbox/dcim/models/racks.py:133 msgid "model" msgstr "model-" -#: netbox/dcim/models/devices.py:95 +#: netbox/dcim/models/devices.py:97 msgid "default platform" msgstr "standaardplatform" -#: netbox/dcim/models/devices.py:98 netbox/dcim/models/devices.py:386 +#: netbox/dcim/models/devices.py:100 netbox/dcim/models/devices.py:387 msgid "part number" msgstr "onderdeelnummer" -#: netbox/dcim/models/devices.py:101 netbox/dcim/models/devices.py:389 +#: netbox/dcim/models/devices.py:103 netbox/dcim/models/devices.py:390 msgid "Discrete part number (optional)" msgstr "Discreet onderdeelnummer (optioneel)" -#: netbox/dcim/models/devices.py:107 netbox/dcim/models/racks.py:54 +#: netbox/dcim/models/devices.py:109 netbox/dcim/models/racks.py:53 msgid "height (U)" msgstr "hoogte (U)" -#: netbox/dcim/models/devices.py:111 +#: netbox/dcim/models/devices.py:113 msgid "exclude from utilization" msgstr "uitsluiten van gebruik" -#: netbox/dcim/models/devices.py:112 +#: netbox/dcim/models/devices.py:114 msgid "Devices of this type are excluded when calculating rack utilization." msgstr "" "Apparaten van dit type zijn uitgesloten bij de berekening van het " "rackgebruik." -#: netbox/dcim/models/devices.py:116 +#: netbox/dcim/models/devices.py:118 msgid "is full depth" msgstr "is volledig diep" -#: netbox/dcim/models/devices.py:117 +#: netbox/dcim/models/devices.py:119 msgid "Device consumes both front and rear rack faces." msgstr "" "Het apparaat verbruikt zowel de voorkant als de achterkant van het rack." -#: netbox/dcim/models/devices.py:123 +#: netbox/dcim/models/devices.py:126 msgid "parent/child status" msgstr "status van ouder/kind" -#: netbox/dcim/models/devices.py:124 +#: netbox/dcim/models/devices.py:127 msgid "" "Parent devices house child devices in device bays. Leave blank if this " "device type is neither a parent nor a child." @@ -5998,24 +6525,24 @@ msgstr "" "apparaatvakken. Laat dit veld leeg als dit apparaattype geen ouder of kind " "is." -#: netbox/dcim/models/devices.py:128 netbox/dcim/models/devices.py:392 -#: netbox/dcim/models/devices.py:659 netbox/dcim/models/racks.py:324 +#: netbox/dcim/models/devices.py:131 netbox/dcim/models/devices.py:393 +#: netbox/dcim/models/devices.py:651 netbox/dcim/models/racks.py:315 msgid "airflow" msgstr "luchtstroom" -#: netbox/dcim/models/devices.py:204 +#: netbox/dcim/models/devices.py:208 msgid "device type" msgstr "apparaattype" -#: netbox/dcim/models/devices.py:205 +#: netbox/dcim/models/devices.py:209 msgid "device types" msgstr "soorten apparaten" -#: netbox/dcim/models/devices.py:290 +#: netbox/dcim/models/devices.py:291 msgid "U height must be in increments of 0.5 rack units." msgstr "De U-hoogte moet in stappen van 0,5 rekeenheden zijn." -#: netbox/dcim/models/devices.py:307 +#: netbox/dcim/models/devices.py:308 #, python-brace-format msgid "" "Device {device} in rack {rack} does not have sufficient space to accommodate" @@ -6024,7 +6551,7 @@ msgstr "" "Apparaat {device} in een rek {rack} heeft niet voldoende ruimte voor een " "hoogte van {height}U" -#: netbox/dcim/models/devices.py:322 +#: netbox/dcim/models/devices.py:323 #, python-brace-format msgid "" "Unable to set 0U height: Found {racked_instance_count} " @@ -6034,7 +6561,7 @@ msgstr "" "href=\"{url}\">{racked_instance_count} instanties al in rekken " "gemonteerd." -#: netbox/dcim/models/devices.py:331 +#: netbox/dcim/models/devices.py:332 msgid "" "Must delete all device bay templates associated with this device before " "declassifying it as a parent device." @@ -6042,152 +6569,152 @@ msgstr "" "U moet alle sjablonen voor apparaatruimte verwijderen die aan dit apparaat " "zijn gekoppeld voordat u het als ouderapparaat declassificeert." -#: netbox/dcim/models/devices.py:337 +#: netbox/dcim/models/devices.py:338 msgid "Child device types must be 0U." msgstr "Apparaattypen voor kinderen moeten 0U zijn." -#: netbox/dcim/models/devices.py:411 +#: netbox/dcim/models/devices.py:413 msgid "module type" msgstr "moduletype" -#: netbox/dcim/models/devices.py:412 +#: netbox/dcim/models/devices.py:414 msgid "module types" msgstr "moduletypen" -#: netbox/dcim/models/devices.py:485 +#: netbox/dcim/models/devices.py:484 msgid "Virtual machines may be assigned to this role" msgstr "Virtuele machines kunnen aan deze rol worden toegewezen" -#: netbox/dcim/models/devices.py:497 +#: netbox/dcim/models/devices.py:496 msgid "device role" msgstr "rol van het apparaat" -#: netbox/dcim/models/devices.py:498 +#: netbox/dcim/models/devices.py:497 msgid "device roles" msgstr "rollen van het apparaat" -#: netbox/dcim/models/devices.py:515 +#: netbox/dcim/models/devices.py:511 msgid "Optionally limit this platform to devices of a certain manufacturer" msgstr "" "Beperk dit platform optioneel tot apparaten van een bepaalde fabrikant" -#: netbox/dcim/models/devices.py:527 +#: netbox/dcim/models/devices.py:523 msgid "platform" msgstr "platform" -#: netbox/dcim/models/devices.py:528 +#: netbox/dcim/models/devices.py:524 msgid "platforms" msgstr "platformen" -#: netbox/dcim/models/devices.py:576 +#: netbox/dcim/models/devices.py:572 msgid "The function this device serves" msgstr "De functie die dit apparaat dient" -#: netbox/dcim/models/devices.py:608 +#: netbox/dcim/models/devices.py:599 msgid "Chassis serial number, assigned by the manufacturer" msgstr "Serienummer van het chassis, toegekend door de fabrikant" -#: netbox/dcim/models/devices.py:616 netbox/dcim/models/devices.py:1189 +#: netbox/dcim/models/devices.py:607 netbox/dcim/models/devices.py:1197 msgid "A unique tag used to identify this device" msgstr "Een unieke tag die wordt gebruikt om dit apparaat te identificeren" -#: netbox/dcim/models/devices.py:643 +#: netbox/dcim/models/devices.py:634 msgid "position (U)" msgstr "positie (U)" -#: netbox/dcim/models/devices.py:650 +#: netbox/dcim/models/devices.py:642 msgid "rack face" msgstr "gezicht met een rekje" -#: netbox/dcim/models/devices.py:670 netbox/dcim/models/devices.py:1420 -#: netbox/virtualization/models/virtualmachines.py:100 +#: netbox/dcim/models/devices.py:663 netbox/dcim/models/devices.py:1425 +#: netbox/virtualization/models/virtualmachines.py:95 msgid "primary IPv4" msgstr "primaire IPv4" -#: netbox/dcim/models/devices.py:678 netbox/dcim/models/devices.py:1428 -#: netbox/virtualization/models/virtualmachines.py:108 +#: netbox/dcim/models/devices.py:671 netbox/dcim/models/devices.py:1433 +#: netbox/virtualization/models/virtualmachines.py:103 msgid "primary IPv6" msgstr "primaire IPv6" -#: netbox/dcim/models/devices.py:686 +#: netbox/dcim/models/devices.py:679 msgid "out-of-band IP" msgstr "IP-adres buiten de band" -#: netbox/dcim/models/devices.py:703 +#: netbox/dcim/models/devices.py:696 msgid "VC position" msgstr "VC-positie" -#: netbox/dcim/models/devices.py:706 +#: netbox/dcim/models/devices.py:699 msgid "Virtual chassis position" msgstr "Virtuele chassispositie" -#: netbox/dcim/models/devices.py:709 +#: netbox/dcim/models/devices.py:702 msgid "VC priority" msgstr "VC-prioriteit" -#: netbox/dcim/models/devices.py:713 +#: netbox/dcim/models/devices.py:706 msgid "Virtual chassis master election priority" msgstr "Verkiezingsprioriteit van het virtuele chassis" -#: netbox/dcim/models/devices.py:716 netbox/dcim/models/sites.py:207 +#: netbox/dcim/models/devices.py:709 netbox/dcim/models/sites.py:208 msgid "latitude" msgstr "breedtegraad" -#: netbox/dcim/models/devices.py:721 netbox/dcim/models/devices.py:729 -#: netbox/dcim/models/sites.py:212 netbox/dcim/models/sites.py:220 +#: netbox/dcim/models/devices.py:714 netbox/dcim/models/devices.py:722 +#: netbox/dcim/models/sites.py:213 netbox/dcim/models/sites.py:221 msgid "GPS coordinate in decimal format (xx.yyyyyy)" msgstr "GPS-coördinaat in decimaal formaat (xx.jjjjj)" -#: netbox/dcim/models/devices.py:724 netbox/dcim/models/sites.py:215 +#: netbox/dcim/models/devices.py:717 netbox/dcim/models/sites.py:216 msgid "longitude" msgstr "lengtegraad" -#: netbox/dcim/models/devices.py:797 +#: netbox/dcim/models/devices.py:790 msgid "Device name must be unique per site." msgstr "De apparaatnaam moet per site uniek zijn." -#: netbox/dcim/models/devices.py:808 netbox/ipam/models/services.py:75 +#: netbox/dcim/models/devices.py:801 netbox/ipam/models/services.py:71 msgid "device" msgstr "apparaat" -#: netbox/dcim/models/devices.py:809 +#: netbox/dcim/models/devices.py:802 msgid "devices" msgstr "apparaten" -#: netbox/dcim/models/devices.py:835 +#: netbox/dcim/models/devices.py:821 #, python-brace-format msgid "Rack {rack} does not belong to site {site}." msgstr "Rek {rack} hoort niet bij de site {site}." -#: netbox/dcim/models/devices.py:840 +#: netbox/dcim/models/devices.py:826 #, python-brace-format msgid "Location {location} does not belong to site {site}." msgstr "Locatie {location} hoort niet bij de site {site}." -#: netbox/dcim/models/devices.py:846 +#: netbox/dcim/models/devices.py:832 #, python-brace-format msgid "Rack {rack} does not belong to location {location}." msgstr "Rek {rack} hoort niet bij de locatie {location}." -#: netbox/dcim/models/devices.py:853 +#: netbox/dcim/models/devices.py:839 msgid "Cannot select a rack face without assigning a rack." msgstr "Kan geen rackface selecteren zonder een rack toe te wijzen." -#: netbox/dcim/models/devices.py:857 +#: netbox/dcim/models/devices.py:843 msgid "Cannot select a rack position without assigning a rack." msgstr "Kan geen rackpositie selecteren zonder een rack toe te wijzen." -#: netbox/dcim/models/devices.py:863 +#: netbox/dcim/models/devices.py:849 msgid "Position must be in increments of 0.5 rack units." msgstr "De positie moet in stappen van 0,5 rekeenheden zijn." -#: netbox/dcim/models/devices.py:867 +#: netbox/dcim/models/devices.py:853 msgid "Must specify rack face when defining rack position." msgstr "" "Bij het bepalen van de positie van het rek moet het oppervlak van het rack " "worden gespecificeerd." -#: netbox/dcim/models/devices.py:875 +#: netbox/dcim/models/devices.py:861 #, python-brace-format msgid "" "A 0U device type ({device_type}) cannot be assigned to a rack position." @@ -6195,7 +6722,7 @@ msgstr "" "Een 0U-apparaattype ({device_type}) kan niet worden toegewezen aan een " "rackpositie." -#: netbox/dcim/models/devices.py:886 +#: netbox/dcim/models/devices.py:872 msgid "" "Child device types cannot be assigned to a rack face. This is an attribute " "of the parent device." @@ -6203,7 +6730,7 @@ msgstr "" "Onderliggende apparaattypen kunnen niet aan een rackface worden toegewezen. " "Dit is een kenmerk van het ouderapparaat." -#: netbox/dcim/models/devices.py:893 +#: netbox/dcim/models/devices.py:879 msgid "" "Child device types cannot be assigned to a rack position. This is an " "attribute of the parent device." @@ -6211,7 +6738,7 @@ msgstr "" "Onderliggende apparaattypen kunnen niet worden toegewezen aan een " "rackpositie. Dit is een kenmerk van het ouderapparaat." -#: netbox/dcim/models/devices.py:907 +#: netbox/dcim/models/devices.py:893 #, python-brace-format msgid "" "U{position} is already occupied or does not have sufficient space to " @@ -6220,22 +6747,22 @@ msgstr "" "U{position} is al bezet of beschikt niet over voldoende ruimte voor dit " "apparaattype: {device_type} ({u_height}U)" -#: netbox/dcim/models/devices.py:922 +#: netbox/dcim/models/devices.py:908 #, python-brace-format msgid "{ip} is not an IPv4 address." msgstr "{ip} is geen IPv4-adres." -#: netbox/dcim/models/devices.py:931 netbox/dcim/models/devices.py:946 +#: netbox/dcim/models/devices.py:920 netbox/dcim/models/devices.py:938 #, python-brace-format msgid "The specified IP address ({ip}) is not assigned to this device." msgstr "Het opgegeven IP-adres ({ip}) is niet toegewezen aan dit apparaat." -#: netbox/dcim/models/devices.py:937 +#: netbox/dcim/models/devices.py:926 #, python-brace-format msgid "{ip} is not an IPv6 address." msgstr "{ip} is geen IPv6-adres." -#: netbox/dcim/models/devices.py:964 +#: netbox/dcim/models/devices.py:956 #, python-brace-format msgid "" "The assigned platform is limited to {platform_manufacturer} device types, " @@ -6245,12 +6772,17 @@ msgstr "" "apparaattypen, maar het type van dit apparaat behoort tot " "{devicetype_manufacturer}." -#: netbox/dcim/models/devices.py:975 +#: netbox/dcim/models/devices.py:967 #, python-brace-format msgid "The assigned cluster belongs to a different site ({site})" msgstr "Het toegewezen cluster behoort tot een andere site ({site})" -#: netbox/dcim/models/devices.py:983 +#: netbox/dcim/models/devices.py:974 +#, python-brace-format +msgid "The assigned cluster belongs to a different location ({location})" +msgstr "Het toegewezen cluster behoort tot een andere locatie ({location})" + +#: netbox/dcim/models/devices.py:982 msgid "A device assigned to a virtual chassis must have its position defined." msgstr "" "De positie van een apparaat dat aan een virtueel chassis is toegewezen, moet" @@ -6265,15 +6797,15 @@ msgstr "" "Het apparaat kan niet van het virtuele chassis worden verwijderd " "{virtual_chassis} omdat het momenteel is aangewezen als zijn master." -#: netbox/dcim/models/devices.py:1196 +#: netbox/dcim/models/devices.py:1204 msgid "module" msgstr "module" -#: netbox/dcim/models/devices.py:1197 +#: netbox/dcim/models/devices.py:1205 msgid "modules" msgstr "modules" -#: netbox/dcim/models/devices.py:1213 +#: netbox/dcim/models/devices.py:1218 #, python-brace-format msgid "" "Module must be installed within a module bay belonging to the assigned " @@ -6282,15 +6814,15 @@ msgstr "" "De module moet worden geïnstalleerd in een modulecompartiment dat bij het " "toegewezen apparaat hoort ({device})." -#: netbox/dcim/models/devices.py:1339 +#: netbox/dcim/models/devices.py:1346 msgid "domain" msgstr "domein" -#: netbox/dcim/models/devices.py:1352 netbox/dcim/models/devices.py:1353 +#: netbox/dcim/models/devices.py:1359 netbox/dcim/models/devices.py:1360 msgid "virtual chassis" msgstr "virtueel chassis" -#: netbox/dcim/models/devices.py:1368 +#: netbox/dcim/models/devices.py:1372 #, python-brace-format msgid "" "The selected master ({master}) is not assigned to this virtual chassis." @@ -6298,7 +6830,7 @@ msgstr "" "De geselecteerde master ({master}) is niet toegewezen aan dit virtuele " "chassis." -#: netbox/dcim/models/devices.py:1384 +#: netbox/dcim/models/devices.py:1388 #, python-brace-format msgid "" "Unable to delete virtual chassis {self}. There are member interfaces which " @@ -6307,52 +6839,63 @@ msgstr "" "Kan het virtuele chassis niet verwijderen {self}. Er zijn lidinterfaces die " "een LAG-interface tussen chassis vormen." -#: netbox/dcim/models/devices.py:1409 netbox/vpn/models/l2vpn.py:37 +#: netbox/dcim/models/devices.py:1414 netbox/vpn/models/l2vpn.py:37 msgid "identifier" msgstr "-identificatiecode" -#: netbox/dcim/models/devices.py:1410 +#: netbox/dcim/models/devices.py:1415 msgid "Numeric identifier unique to the parent device" msgstr "Numerieke identificatie die uniek is voor het ouderapparaat" -#: netbox/dcim/models/devices.py:1438 netbox/extras/models/customfields.py:225 +#: netbox/dcim/models/devices.py:1443 netbox/extras/models/customfields.py:225 #: netbox/extras/models/models.py:107 netbox/extras/models/models.py:694 -#: netbox/netbox/models/__init__.py:115 +#: netbox/netbox/models/__init__.py:120 msgid "comments" msgstr "reacties" -#: netbox/dcim/models/devices.py:1454 +#: netbox/dcim/models/devices.py:1459 msgid "virtual device context" msgstr "context van het virtuele apparaat" -#: netbox/dcim/models/devices.py:1455 +#: netbox/dcim/models/devices.py:1460 msgid "virtual device contexts" msgstr "contexten van virtuele apparaten" -#: netbox/dcim/models/devices.py:1487 +#: netbox/dcim/models/devices.py:1489 #, python-brace-format msgid "{ip} is not an IPv{family} address." msgstr "{ip} is geen IPv{family} adres." -#: netbox/dcim/models/devices.py:1493 +#: netbox/dcim/models/devices.py:1495 msgid "Primary IP address must belong to an interface on the assigned device." msgstr "" "Het primaire IP-adres moet bij een interface op het toegewezen apparaat " "horen." -#: netbox/dcim/models/mixins.py:15 netbox/extras/models/configs.py:41 -#: netbox/extras/models/models.py:313 netbox/extras/models/models.py:522 -#: netbox/extras/models/search.py:48 netbox/ipam/models/ip.py:194 -msgid "weight" -msgstr "gewicht" +#: netbox/dcim/models/devices.py:1527 +msgid "MAC addresses" +msgstr "MAC-adressen" -#: netbox/dcim/models/mixins.py:22 -msgid "weight unit" -msgstr "gewichtseenheid" +#: netbox/dcim/models/devices.py:1559 +msgid "" +"Cannot unassign MAC Address while it is designated as the primary MAC for an" +" object" +msgstr "" +"Kan de toewijzing van het MAC-adres niet ongedaan maken terwijl dit is " +"aangewezen als de primaire MAC voor een object" -#: netbox/dcim/models/mixins.py:51 -msgid "Must specify a unit when setting a weight" -msgstr "Moet een eenheid specificeren bij het instellen van een gewicht" +#: netbox/dcim/models/devices.py:1563 +msgid "" +"Cannot reassign MAC Address while it is designated as the primary MAC for an" +" object" +msgstr "" +"Kan het MAC-adres niet opnieuw toewijzen terwijl dit is aangewezen als de " +"primaire MAC voor een object" + +#: netbox/dcim/models/mixins.py:94 +#, python-brace-format +msgid "Please select a {scope_type}." +msgstr "Selecteer a.u.b. een {scope_type}." #: netbox/dcim/models/power.py:55 msgid "power panel" @@ -6362,7 +6905,7 @@ msgstr "voedingspaneel" msgid "power panels" msgstr "elektriciteitspanelen" -#: netbox/dcim/models/power.py:70 +#: netbox/dcim/models/power.py:67 #, python-brace-format msgid "" "Location {location} ({location_site}) is in a different site than {site}" @@ -6370,43 +6913,43 @@ msgstr "" "Locatie {location} ({location_site}) bevindt zich op een andere site dan " "{site}" -#: netbox/dcim/models/power.py:108 +#: netbox/dcim/models/power.py:106 msgid "supply" msgstr "bevoorrading" -#: netbox/dcim/models/power.py:114 +#: netbox/dcim/models/power.py:112 msgid "phase" msgstr "fase" -#: netbox/dcim/models/power.py:120 +#: netbox/dcim/models/power.py:118 msgid "voltage" msgstr "spanning" -#: netbox/dcim/models/power.py:125 +#: netbox/dcim/models/power.py:123 msgid "amperage" msgstr "stroomsterkte" -#: netbox/dcim/models/power.py:130 +#: netbox/dcim/models/power.py:128 msgid "max utilization" msgstr "maximale benutting" -#: netbox/dcim/models/power.py:133 +#: netbox/dcim/models/power.py:131 msgid "Maximum permissible draw (percentage)" msgstr "Maximaal toelaatbare trekking (percentage)" -#: netbox/dcim/models/power.py:136 +#: netbox/dcim/models/power.py:134 msgid "available power" msgstr "beschikbaar vermogen" -#: netbox/dcim/models/power.py:164 +#: netbox/dcim/models/power.py:162 msgid "power feed" msgstr "voeding" -#: netbox/dcim/models/power.py:165 +#: netbox/dcim/models/power.py:163 msgid "power feeds" msgstr "voedingen" -#: netbox/dcim/models/power.py:179 +#: netbox/dcim/models/power.py:174 #, python-brace-format msgid "" "Rack {rack} ({rack_site}) and power panel {powerpanel} ({powerpanel_site}) " @@ -6415,55 +6958,55 @@ msgstr "" "Rek {rack} ({rack_site}) en voedingspaneel {powerpanel} ({powerpanel_site}) " "bevinden zich op verschillende locaties." -#: netbox/dcim/models/power.py:190 +#: netbox/dcim/models/power.py:185 msgid "Voltage cannot be negative for AC supply" msgstr "De spanning kan niet negatief zijn voor de AC-voeding" -#: netbox/dcim/models/racks.py:47 +#: netbox/dcim/models/racks.py:46 msgid "width" msgstr "breedte" -#: netbox/dcim/models/racks.py:48 +#: netbox/dcim/models/racks.py:47 msgid "Rail-to-rail width" msgstr "Breedte van spoor tot spoor" -#: netbox/dcim/models/racks.py:56 +#: netbox/dcim/models/racks.py:55 msgid "Height in rack units" msgstr "Hoogte in rekeenheden" -#: netbox/dcim/models/racks.py:60 +#: netbox/dcim/models/racks.py:59 msgid "starting unit" msgstr "starteenheid" -#: netbox/dcim/models/racks.py:62 +#: netbox/dcim/models/racks.py:61 msgid "Starting unit for rack" msgstr "Starteenheid voor rack" -#: netbox/dcim/models/racks.py:66 +#: netbox/dcim/models/racks.py:65 msgid "descending units" msgstr "aflopende eenheden" -#: netbox/dcim/models/racks.py:67 +#: netbox/dcim/models/racks.py:66 msgid "Units are numbered top-to-bottom" msgstr "Eenheden zijn van boven naar beneden genummerd" -#: netbox/dcim/models/racks.py:72 +#: netbox/dcim/models/racks.py:71 msgid "outer width" msgstr "buitenbreedte" -#: netbox/dcim/models/racks.py:75 +#: netbox/dcim/models/racks.py:74 msgid "Outer dimension of rack (width)" msgstr "Buitenafmeting van het rek (breedte)" -#: netbox/dcim/models/racks.py:78 +#: netbox/dcim/models/racks.py:77 msgid "outer depth" msgstr "buitendiepte" -#: netbox/dcim/models/racks.py:81 +#: netbox/dcim/models/racks.py:80 msgid "Outer dimension of rack (depth)" msgstr "Buitenafmeting van het rek (diepte)" -#: netbox/dcim/models/racks.py:84 +#: netbox/dcim/models/racks.py:83 msgid "outer unit" msgstr "buiteneenheid" @@ -6487,7 +7030,7 @@ msgstr "maximaal gewicht" msgid "Maximum load capacity for the rack" msgstr "Maximaal draagvermogen voor het rack" -#: netbox/dcim/models/racks.py:125 netbox/dcim/models/racks.py:252 +#: netbox/dcim/models/racks.py:125 netbox/dcim/models/racks.py:247 msgid "form factor" msgstr "vormfactor" @@ -6499,57 +7042,57 @@ msgstr "type rek" msgid "rack types" msgstr "soorten rekken" -#: netbox/dcim/models/racks.py:180 netbox/dcim/models/racks.py:379 +#: netbox/dcim/models/racks.py:177 netbox/dcim/models/racks.py:368 msgid "Must specify a unit when setting an outer width/depth" msgstr "" "Moet een eenheid specificeren bij het instellen van een buitenbreedte/diepte" -#: netbox/dcim/models/racks.py:184 netbox/dcim/models/racks.py:383 +#: netbox/dcim/models/racks.py:181 netbox/dcim/models/racks.py:372 msgid "Must specify a unit when setting a maximum weight" msgstr "" "Moet een eenheid specificeren bij het instellen van een maximaal gewicht" -#: netbox/dcim/models/racks.py:230 +#: netbox/dcim/models/racks.py:227 msgid "rack role" msgstr "rack rol" -#: netbox/dcim/models/racks.py:231 +#: netbox/dcim/models/racks.py:228 msgid "rack roles" msgstr "rack rollen" -#: netbox/dcim/models/racks.py:274 +#: netbox/dcim/models/racks.py:265 msgid "facility ID" msgstr "ID van de faciliteit" -#: netbox/dcim/models/racks.py:275 +#: netbox/dcim/models/racks.py:266 msgid "Locally-assigned identifier" msgstr "Lokaal toegewezen identificatiecode" -#: netbox/dcim/models/racks.py:308 netbox/ipam/forms/bulk_import.py:201 -#: netbox/ipam/forms/bulk_import.py:266 netbox/ipam/forms/bulk_import.py:301 -#: netbox/ipam/forms/bulk_import.py:483 -#: netbox/virtualization/forms/bulk_import.py:112 +#: netbox/dcim/models/racks.py:299 netbox/ipam/forms/bulk_import.py:197 +#: netbox/ipam/forms/bulk_import.py:265 netbox/ipam/forms/bulk_import.py:300 +#: netbox/ipam/forms/bulk_import.py:482 +#: netbox/virtualization/forms/bulk_import.py:118 msgid "Functional role" msgstr "Functionele rol" -#: netbox/dcim/models/racks.py:321 +#: netbox/dcim/models/racks.py:312 msgid "A unique tag used to identify this rack" msgstr "Een unieke tag die wordt gebruikt om dit rek te identificeren" -#: netbox/dcim/models/racks.py:359 +#: netbox/dcim/models/racks.py:351 msgid "rack" msgstr "rack" -#: netbox/dcim/models/racks.py:360 +#: netbox/dcim/models/racks.py:352 msgid "racks" msgstr "racks" -#: netbox/dcim/models/racks.py:375 +#: netbox/dcim/models/racks.py:364 #, python-brace-format msgid "Assigned location must belong to parent site ({site})." msgstr "De toegewezen locatie moet bij de bovenliggende site horen ({site})." -#: netbox/dcim/models/racks.py:393 +#: netbox/dcim/models/racks.py:387 #, python-brace-format msgid "" "Rack must be at least {min_height}U tall to house currently installed " @@ -6558,7 +7101,7 @@ msgstr "" "Het rek moet minimaal {min_height}Ik praat om de momenteel geïnstalleerde " "apparaten te huisvesten." -#: netbox/dcim/models/racks.py:400 +#: netbox/dcim/models/racks.py:396 #, python-brace-format msgid "" "Rack unit numbering must begin at {position} or less to house currently " @@ -6567,118 +7110,118 @@ msgstr "" "De nummering van de rackeenheid moet beginnen bij {position} of minder om " "momenteel geïnstalleerde apparaten te huisvesten." -#: netbox/dcim/models/racks.py:408 +#: netbox/dcim/models/racks.py:404 #, python-brace-format msgid "Location must be from the same site, {site}." msgstr "De locatie moet van dezelfde locatie zijn, {site}." -#: netbox/dcim/models/racks.py:670 +#: netbox/dcim/models/racks.py:666 msgid "units" msgstr "eenheden" -#: netbox/dcim/models/racks.py:696 +#: netbox/dcim/models/racks.py:692 msgid "rack reservation" msgstr "Reserveren van de baan" -#: netbox/dcim/models/racks.py:697 +#: netbox/dcim/models/racks.py:693 msgid "rack reservations" msgstr "Reserveringen volgen" -#: netbox/dcim/models/racks.py:714 +#: netbox/dcim/models/racks.py:707 #, python-brace-format msgid "Invalid unit(s) for {height}U rack: {unit_list}" msgstr "Ongeldige eenheid (en) voor {height}U-rail: {unit_list}" -#: netbox/dcim/models/racks.py:727 +#: netbox/dcim/models/racks.py:720 #, python-brace-format msgid "The following units have already been reserved: {unit_list}" msgstr "De volgende eenheden zijn al gereserveerd: {unit_list}" -#: netbox/dcim/models/sites.py:49 +#: netbox/dcim/models/sites.py:53 msgid "A top-level region with this name already exists." msgstr "Er bestaat al een regio op het hoogste niveau met deze naam." -#: netbox/dcim/models/sites.py:59 +#: netbox/dcim/models/sites.py:63 msgid "A top-level region with this slug already exists." msgstr "Er bestaat al een regio op het hoogste niveau met deze slug." -#: netbox/dcim/models/sites.py:62 +#: netbox/dcim/models/sites.py:66 msgid "region" msgstr "regio" -#: netbox/dcim/models/sites.py:63 +#: netbox/dcim/models/sites.py:67 msgid "regions" msgstr "regio's" -#: netbox/dcim/models/sites.py:102 +#: netbox/dcim/models/sites.py:109 msgid "A top-level site group with this name already exists." msgstr "Er bestaat al een sitegroep op het hoogste niveau met deze naam." -#: netbox/dcim/models/sites.py:112 +#: netbox/dcim/models/sites.py:119 msgid "A top-level site group with this slug already exists." msgstr "Er bestaat al een sitegroep op het hoogste niveau met deze slug." -#: netbox/dcim/models/sites.py:115 +#: netbox/dcim/models/sites.py:122 msgid "site group" msgstr "sitegroep" -#: netbox/dcim/models/sites.py:116 +#: netbox/dcim/models/sites.py:123 msgid "site groups" msgstr "sitegroepen" -#: netbox/dcim/models/sites.py:141 +#: netbox/dcim/models/sites.py:145 msgid "Full name of the site" msgstr "Volledige naam van de site" -#: netbox/dcim/models/sites.py:181 netbox/dcim/models/sites.py:279 +#: netbox/dcim/models/sites.py:181 netbox/dcim/models/sites.py:283 msgid "facility" msgstr "faciliteit" -#: netbox/dcim/models/sites.py:184 netbox/dcim/models/sites.py:282 +#: netbox/dcim/models/sites.py:184 netbox/dcim/models/sites.py:286 msgid "Local facility ID or description" msgstr "ID of beschrijving van de lokale faciliteit" -#: netbox/dcim/models/sites.py:195 +#: netbox/dcim/models/sites.py:196 msgid "physical address" msgstr "fysiek adres" -#: netbox/dcim/models/sites.py:198 +#: netbox/dcim/models/sites.py:199 msgid "Physical location of the building" msgstr "Fysieke locatie van het gebouw" -#: netbox/dcim/models/sites.py:201 +#: netbox/dcim/models/sites.py:202 msgid "shipping address" msgstr "verzendadres" -#: netbox/dcim/models/sites.py:204 +#: netbox/dcim/models/sites.py:205 msgid "If different from the physical address" msgstr "Indien anders dan het fysieke adres" -#: netbox/dcim/models/sites.py:238 +#: netbox/dcim/models/sites.py:245 msgid "site" msgstr "site" -#: netbox/dcim/models/sites.py:239 +#: netbox/dcim/models/sites.py:246 msgid "sites" msgstr "sites" -#: netbox/dcim/models/sites.py:309 +#: netbox/dcim/models/sites.py:319 msgid "A location with this name already exists within the specified site." msgstr "Er bestaat al een locatie met deze naam op de opgegeven site." -#: netbox/dcim/models/sites.py:319 +#: netbox/dcim/models/sites.py:329 msgid "A location with this slug already exists within the specified site." msgstr "Er bestaat al een locatie met deze slug binnen de opgegeven site." -#: netbox/dcim/models/sites.py:322 +#: netbox/dcim/models/sites.py:332 msgid "location" msgstr "locatie" -#: netbox/dcim/models/sites.py:323 +#: netbox/dcim/models/sites.py:333 msgid "locations" msgstr "locaties" -#: netbox/dcim/models/sites.py:337 +#: netbox/dcim/models/sites.py:344 #, python-brace-format msgid "Parent location ({parent}) must belong to the same site ({site})." msgstr "" @@ -6692,11 +7235,11 @@ msgstr "Beëindiging A" msgid "Termination B" msgstr "Eindpunt B" -#: netbox/dcim/tables/cables.py:66 netbox/wireless/tables/wirelesslink.py:23 +#: netbox/dcim/tables/cables.py:66 netbox/wireless/tables/wirelesslink.py:22 msgid "Device A" msgstr "Apparaat A" -#: netbox/dcim/tables/cables.py:72 netbox/wireless/tables/wirelesslink.py:32 +#: netbox/dcim/tables/cables.py:72 netbox/wireless/tables/wirelesslink.py:31 msgid "Device B" msgstr "Apparaat B" @@ -6730,97 +7273,91 @@ msgstr "Locatie B" msgid "Reachable" msgstr "Bereikbaar" -#: netbox/dcim/tables/devices.py:58 netbox/dcim/tables/devices.py:106 -#: netbox/dcim/tables/racks.py:150 netbox/dcim/tables/sites.py:105 -#: netbox/dcim/tables/sites.py:148 netbox/extras/tables/tables.py:545 +#: netbox/dcim/tables/devices.py:69 netbox/dcim/tables/devices.py:117 +#: netbox/dcim/tables/racks.py:149 netbox/dcim/tables/sites.py:104 +#: netbox/dcim/tables/sites.py:147 netbox/extras/tables/tables.py:545 #: netbox/netbox/navigation/menu.py:69 netbox/netbox/navigation/menu.py:73 #: netbox/netbox/navigation/menu.py:75 #: netbox/virtualization/forms/model_forms.py:122 -#: netbox/virtualization/tables/clusters.py:83 -#: netbox/virtualization/views.py:204 +#: netbox/virtualization/tables/clusters.py:87 +#: netbox/virtualization/views.py:216 msgid "Devices" msgstr "Apparaten" -#: netbox/dcim/tables/devices.py:63 netbox/dcim/tables/devices.py:111 -#: netbox/virtualization/tables/clusters.py:88 +#: netbox/dcim/tables/devices.py:74 netbox/dcim/tables/devices.py:122 +#: netbox/virtualization/tables/clusters.py:92 msgid "VMs" msgstr "VM's" -#: netbox/dcim/tables/devices.py:100 netbox/dcim/tables/devices.py:216 -#: netbox/extras/forms/model_forms.py:630 +#: netbox/dcim/tables/devices.py:111 netbox/dcim/tables/devices.py:227 +#: netbox/extras/forms/model_forms.py:644 #: netbox/templates/dcim/device.html:112 -#: netbox/templates/dcim/device/render_config.html:11 -#: netbox/templates/dcim/device/render_config.html:14 #: netbox/templates/dcim/devicerole.html:44 #: netbox/templates/dcim/platform.html:41 #: netbox/templates/extras/configtemplate.html:10 +#: netbox/templates/extras/object_render_config.html:12 +#: netbox/templates/extras/object_render_config.html:15 #: netbox/templates/virtualization/virtualmachine.html:48 -#: netbox/templates/virtualization/virtualmachine/render_config.html:11 -#: netbox/templates/virtualization/virtualmachine/render_config.html:14 -#: netbox/virtualization/tables/virtualmachines.py:107 +#: netbox/virtualization/tables/virtualmachines.py:77 msgid "Config Template" msgstr "Configuratiesjabloon" -#: netbox/dcim/tables/devices.py:150 netbox/templates/dcim/sitegroup.html:26 -msgid "Site Group" -msgstr "Sitegroep" - -#: netbox/dcim/tables/devices.py:187 netbox/dcim/tables/devices.py:1068 -#: netbox/ipam/forms/bulk_import.py:527 netbox/ipam/forms/model_forms.py:306 -#: netbox/ipam/forms/model_forms.py:319 netbox/ipam/tables/ip.py:356 -#: netbox/ipam/tables/ip.py:423 netbox/ipam/tables/ip.py:446 +#: netbox/dcim/tables/devices.py:198 netbox/dcim/tables/devices.py:1100 +#: netbox/ipam/forms/bulk_import.py:562 netbox/ipam/forms/model_forms.py:316 +#: netbox/ipam/forms/model_forms.py:329 netbox/ipam/tables/ip.py:308 +#: netbox/ipam/tables/ip.py:375 netbox/ipam/tables/ip.py:398 #: netbox/templates/ipam/ipaddress.html:11 -#: netbox/virtualization/tables/virtualmachines.py:95 +#: netbox/virtualization/tables/virtualmachines.py:65 msgid "IP Address" msgstr "IP-adres" -#: netbox/dcim/tables/devices.py:191 netbox/dcim/tables/devices.py:1072 -#: netbox/virtualization/tables/virtualmachines.py:86 +#: netbox/dcim/tables/devices.py:202 netbox/dcim/tables/devices.py:1104 +#: netbox/virtualization/tables/virtualmachines.py:56 msgid "IPv4 Address" msgstr "IPv4-adres" -#: netbox/dcim/tables/devices.py:195 netbox/dcim/tables/devices.py:1076 -#: netbox/virtualization/tables/virtualmachines.py:90 +#: netbox/dcim/tables/devices.py:206 netbox/dcim/tables/devices.py:1108 +#: netbox/virtualization/tables/virtualmachines.py:60 msgid "IPv6 Address" msgstr "IPv6-adres" -#: netbox/dcim/tables/devices.py:210 +#: netbox/dcim/tables/devices.py:221 msgid "VC Position" msgstr "VC-positie" -#: netbox/dcim/tables/devices.py:213 +#: netbox/dcim/tables/devices.py:224 msgid "VC Priority" msgstr "VC-prioriteit" -#: netbox/dcim/tables/devices.py:220 netbox/templates/dcim/device_edit.html:38 +#: netbox/dcim/tables/devices.py:231 netbox/templates/dcim/device_edit.html:38 #: netbox/templates/dcim/devicebay_populate.html:16 msgid "Parent Device" msgstr "Apparaat voor ouders" -#: netbox/dcim/tables/devices.py:225 +#: netbox/dcim/tables/devices.py:236 msgid "Position (Device Bay)" msgstr "Positie (apparaatvak)" -#: netbox/dcim/tables/devices.py:234 +#: netbox/dcim/tables/devices.py:245 msgid "Console ports" msgstr "Consolepoorten" -#: netbox/dcim/tables/devices.py:237 +#: netbox/dcim/tables/devices.py:248 msgid "Console server ports" msgstr "Serverpoorten voor de console" -#: netbox/dcim/tables/devices.py:240 +#: netbox/dcim/tables/devices.py:251 msgid "Power ports" msgstr "Voedingspoorten" -#: netbox/dcim/tables/devices.py:243 +#: netbox/dcim/tables/devices.py:254 msgid "Power outlets" msgstr "Stopcontacten" -#: netbox/dcim/tables/devices.py:246 netbox/dcim/tables/devices.py:1081 -#: netbox/dcim/tables/devicetypes.py:128 netbox/dcim/views.py:1040 -#: netbox/dcim/views.py:1279 netbox/dcim/views.py:1975 -#: netbox/netbox/navigation/menu.py:94 netbox/netbox/navigation/menu.py:250 +#: netbox/dcim/tables/devices.py:257 netbox/dcim/tables/devices.py:1113 +#: netbox/dcim/tables/devicetypes.py:133 netbox/dcim/views.py:1144 +#: netbox/dcim/views.py:1388 netbox/dcim/views.py:2139 +#: netbox/netbox/navigation/menu.py:94 netbox/netbox/navigation/menu.py:258 #: netbox/templates/dcim/device/base.html:37 #: netbox/templates/dcim/device_list.html:43 #: netbox/templates/dcim/devicetype/base.html:34 @@ -6830,35 +7367,35 @@ msgstr "Stopcontacten" #: netbox/templates/dcim/virtualdevicecontext.html:81 #: netbox/templates/virtualization/virtualmachine/base.html:27 #: netbox/templates/virtualization/virtualmachine_list.html:14 -#: netbox/virtualization/tables/virtualmachines.py:101 -#: netbox/virtualization/views.py:364 netbox/wireless/tables/wirelesslan.py:55 +#: netbox/virtualization/tables/virtualmachines.py:71 +#: netbox/virtualization/views.py:381 netbox/wireless/tables/wirelesslan.py:63 msgid "Interfaces" msgstr "Interfaces" -#: netbox/dcim/tables/devices.py:249 +#: netbox/dcim/tables/devices.py:260 msgid "Front ports" msgstr "Poorten vooraan" -#: netbox/dcim/tables/devices.py:255 +#: netbox/dcim/tables/devices.py:266 msgid "Device bays" msgstr "Toestelvakken" -#: netbox/dcim/tables/devices.py:258 +#: netbox/dcim/tables/devices.py:269 msgid "Module bays" msgstr "Modulebays" -#: netbox/dcim/tables/devices.py:261 +#: netbox/dcim/tables/devices.py:272 msgid "Inventory items" msgstr "Inventarisartikelen" -#: netbox/dcim/tables/devices.py:305 netbox/dcim/tables/modules.py:57 +#: netbox/dcim/tables/devices.py:315 netbox/dcim/tables/modules.py:57 #: netbox/templates/dcim/modulebay.html:17 msgid "Module Bay" msgstr "Modulebaai" -#: netbox/dcim/tables/devices.py:318 netbox/dcim/tables/devicetypes.py:47 -#: netbox/dcim/tables/devicetypes.py:143 netbox/dcim/views.py:1115 -#: netbox/dcim/views.py:2073 netbox/netbox/navigation/menu.py:103 +#: netbox/dcim/tables/devices.py:328 netbox/dcim/tables/devicetypes.py:52 +#: netbox/dcim/tables/devicetypes.py:148 netbox/dcim/views.py:1219 +#: netbox/dcim/views.py:2237 netbox/netbox/navigation/menu.py:103 #: netbox/templates/dcim/device/base.html:52 #: netbox/templates/dcim/device_list.html:71 #: netbox/templates/dcim/devicetype/base.html:49 @@ -6867,124 +7404,133 @@ msgstr "Modulebaai" msgid "Inventory Items" msgstr "Inventarisartikelen" -#: netbox/dcim/tables/devices.py:333 +#: netbox/dcim/tables/devices.py:343 msgid "Cable Color" msgstr "Kleur van de kabel" -#: netbox/dcim/tables/devices.py:339 +#: netbox/dcim/tables/devices.py:349 msgid "Link Peers" msgstr "Peers koppelen" -#: netbox/dcim/tables/devices.py:342 +#: netbox/dcim/tables/devices.py:352 msgid "Mark Connected" msgstr "Markeer Verbonden" -#: netbox/dcim/tables/devices.py:461 +#: netbox/dcim/tables/devices.py:471 msgid "Maximum draw (W)" msgstr "Maximale trekkracht (W)" -#: netbox/dcim/tables/devices.py:464 +#: netbox/dcim/tables/devices.py:474 msgid "Allocated draw (W)" msgstr "Toegewezen trekking (W)" -#: netbox/dcim/tables/devices.py:558 netbox/ipam/forms/model_forms.py:734 -#: netbox/ipam/tables/fhrp.py:28 netbox/ipam/views.py:596 -#: netbox/ipam/views.py:696 netbox/netbox/navigation/menu.py:158 -#: netbox/netbox/navigation/menu.py:160 -#: netbox/templates/dcim/interface.html:339 +#: netbox/dcim/tables/devices.py:572 netbox/ipam/forms/model_forms.py:784 +#: netbox/ipam/tables/fhrp.py:28 netbox/ipam/views.py:633 +#: netbox/ipam/views.py:738 netbox/netbox/navigation/menu.py:164 +#: netbox/netbox/navigation/menu.py:166 +#: netbox/templates/dcim/interface.html:396 #: netbox/templates/ipam/ipaddress_bulk_add.html:15 #: netbox/templates/ipam/service.html:40 -#: netbox/templates/virtualization/vminterface.html:85 +#: netbox/templates/virtualization/vminterface.html:101 #: netbox/vpn/tables/tunnels.py:98 msgid "IP Addresses" msgstr "IP-adressen" -#: netbox/dcim/tables/devices.py:564 netbox/netbox/navigation/menu.py:202 +#: netbox/dcim/tables/devices.py:578 netbox/netbox/navigation/menu.py:210 #: netbox/templates/ipam/inc/panels/fhrp_groups.html:6 msgid "FHRP Groups" msgstr "FHRP-groepen" -#: netbox/dcim/tables/devices.py:576 netbox/templates/dcim/interface.html:89 -#: netbox/templates/virtualization/vminterface.html:67 +#: netbox/dcim/tables/devices.py:590 netbox/templates/dcim/interface.html:95 +#: netbox/templates/virtualization/vminterface.html:59 #: netbox/templates/vpn/tunnel.html:18 #: netbox/templates/vpn/tunneltermination.html:13 #: netbox/vpn/forms/bulk_edit.py:76 netbox/vpn/forms/bulk_import.py:76 #: netbox/vpn/forms/filtersets.py:42 netbox/vpn/forms/filtersets.py:82 -#: netbox/vpn/forms/model_forms.py:60 netbox/vpn/forms/model_forms.py:145 +#: netbox/vpn/forms/model_forms.py:61 netbox/vpn/forms/model_forms.py:146 #: netbox/vpn/tables/tunnels.py:78 msgid "Tunnel" msgstr "Tunnel" -#: netbox/dcim/tables/devices.py:604 netbox/dcim/tables/devicetypes.py:227 +#: netbox/dcim/tables/devices.py:626 netbox/dcim/tables/devicetypes.py:234 #: netbox/templates/dcim/interface.html:65 msgid "Management Only" msgstr "Alleen beheer" -#: netbox/dcim/tables/devices.py:623 +#: netbox/dcim/tables/devices.py:645 msgid "VDCs" msgstr "VDC's" -#: netbox/dcim/tables/devices.py:873 netbox/templates/dcim/modulebay.html:53 +#: netbox/dcim/tables/devices.py:652 netbox/templates/dcim/interface.html:163 +msgid "Virtual Circuit" +msgstr "Virtueel circuit" + +#: netbox/dcim/tables/devices.py:904 netbox/templates/dcim/modulebay.html:53 msgid "Installed Module" msgstr "Geïnstalleerde module" -#: netbox/dcim/tables/devices.py:876 +#: netbox/dcim/tables/devices.py:907 msgid "Module Serial" msgstr "Seriële module" -#: netbox/dcim/tables/devices.py:880 +#: netbox/dcim/tables/devices.py:911 msgid "Module Asset Tag" msgstr "Tag voor module-bedrijfsmiddelen" -#: netbox/dcim/tables/devices.py:889 +#: netbox/dcim/tables/devices.py:920 msgid "Module Status" msgstr "Status van de module" -#: netbox/dcim/tables/devices.py:944 netbox/dcim/tables/devicetypes.py:312 -#: netbox/templates/dcim/inventoryitem.html:40 +#: netbox/dcim/tables/devices.py:974 netbox/dcim/tables/devicetypes.py:319 +#: netbox/templates/dcim/inventoryitem.html:44 msgid "Component" msgstr "Onderdeel" -#: netbox/dcim/tables/devices.py:1000 +#: netbox/dcim/tables/devices.py:1032 msgid "Items" msgstr "Artikelen" -#: netbox/dcim/tables/devicetypes.py:37 netbox/netbox/navigation/menu.py:84 +#: netbox/dcim/tables/devicetypes.py:37 netbox/netbox/navigation/menu.py:60 +#: netbox/netbox/navigation/menu.py:62 +msgid "Rack Types" +msgstr "Soorten rekken" + +#: netbox/dcim/tables/devicetypes.py:42 netbox/netbox/navigation/menu.py:84 #: netbox/netbox/navigation/menu.py:86 msgid "Device Types" msgstr "Apparaattypen" -#: netbox/dcim/tables/devicetypes.py:42 netbox/netbox/navigation/menu.py:87 +#: netbox/dcim/tables/devicetypes.py:47 netbox/netbox/navigation/menu.py:87 msgid "Module Types" msgstr "Moduletypen" -#: netbox/dcim/tables/devicetypes.py:52 netbox/extras/forms/filtersets.py:371 -#: netbox/extras/forms/model_forms.py:537 netbox/extras/tables/tables.py:540 +#: netbox/dcim/tables/devicetypes.py:57 netbox/extras/forms/filtersets.py:378 +#: netbox/extras/forms/model_forms.py:551 netbox/extras/tables/tables.py:540 #: netbox/netbox/navigation/menu.py:78 msgid "Platforms" msgstr "Platformen" -#: netbox/dcim/tables/devicetypes.py:84 +#: netbox/dcim/tables/devicetypes.py:89 #: netbox/templates/dcim/devicetype.html:29 msgid "Default Platform" msgstr "Standaardplatform" -#: netbox/dcim/tables/devicetypes.py:88 +#: netbox/dcim/tables/devicetypes.py:93 #: netbox/templates/dcim/devicetype.html:45 msgid "Full Depth" msgstr "Volledige diepte" -#: netbox/dcim/tables/devicetypes.py:98 +#: netbox/dcim/tables/devicetypes.py:103 msgid "U Height" msgstr "U-hoogte" -#: netbox/dcim/tables/devicetypes.py:113 netbox/dcim/tables/modules.py:26 +#: netbox/dcim/tables/devicetypes.py:118 netbox/dcim/tables/modules.py:26 #: netbox/dcim/tables/racks.py:89 msgid "Instances" msgstr "Instanties" -#: netbox/dcim/tables/devicetypes.py:116 netbox/dcim/views.py:980 -#: netbox/dcim/views.py:1219 netbox/dcim/views.py:1911 +#: netbox/dcim/tables/devicetypes.py:121 netbox/dcim/views.py:1084 +#: netbox/dcim/views.py:1328 netbox/dcim/views.py:2075 #: netbox/netbox/navigation/menu.py:97 #: netbox/templates/dcim/device/base.html:25 #: netbox/templates/dcim/device_list.html:15 @@ -6994,8 +7540,8 @@ msgstr "Instanties" msgid "Console Ports" msgstr "Consolepoorten" -#: netbox/dcim/tables/devicetypes.py:119 netbox/dcim/views.py:995 -#: netbox/dcim/views.py:1234 netbox/dcim/views.py:1927 +#: netbox/dcim/tables/devicetypes.py:124 netbox/dcim/views.py:1099 +#: netbox/dcim/views.py:1343 netbox/dcim/views.py:2091 #: netbox/netbox/navigation/menu.py:98 #: netbox/templates/dcim/device/base.html:28 #: netbox/templates/dcim/device_list.html:22 @@ -7005,8 +7551,8 @@ msgstr "Consolepoorten" msgid "Console Server Ports" msgstr "Serverpoorten voor de console" -#: netbox/dcim/tables/devicetypes.py:122 netbox/dcim/views.py:1010 -#: netbox/dcim/views.py:1249 netbox/dcim/views.py:1943 +#: netbox/dcim/tables/devicetypes.py:127 netbox/dcim/views.py:1114 +#: netbox/dcim/views.py:1358 netbox/dcim/views.py:2107 #: netbox/netbox/navigation/menu.py:99 #: netbox/templates/dcim/device/base.html:31 #: netbox/templates/dcim/device_list.html:29 @@ -7016,8 +7562,8 @@ msgstr "Serverpoorten voor de console" msgid "Power Ports" msgstr "Voedingspoorten" -#: netbox/dcim/tables/devicetypes.py:125 netbox/dcim/views.py:1025 -#: netbox/dcim/views.py:1264 netbox/dcim/views.py:1959 +#: netbox/dcim/tables/devicetypes.py:130 netbox/dcim/views.py:1129 +#: netbox/dcim/views.py:1373 netbox/dcim/views.py:2123 #: netbox/netbox/navigation/menu.py:100 #: netbox/templates/dcim/device/base.html:34 #: netbox/templates/dcim/device_list.html:36 @@ -7027,8 +7573,8 @@ msgstr "Voedingspoorten" msgid "Power Outlets" msgstr "Stopcontacten" -#: netbox/dcim/tables/devicetypes.py:131 netbox/dcim/views.py:1055 -#: netbox/dcim/views.py:1294 netbox/dcim/views.py:1997 +#: netbox/dcim/tables/devicetypes.py:136 netbox/dcim/views.py:1159 +#: netbox/dcim/views.py:1403 netbox/dcim/views.py:2161 #: netbox/netbox/navigation/menu.py:95 #: netbox/templates/dcim/device/base.html:40 #: netbox/templates/dcim/devicetype/base.html:37 @@ -7037,8 +7583,8 @@ msgstr "Stopcontacten" msgid "Front Ports" msgstr "Ports aan de voorkant" -#: netbox/dcim/tables/devicetypes.py:134 netbox/dcim/views.py:1070 -#: netbox/dcim/views.py:1309 netbox/dcim/views.py:2013 +#: netbox/dcim/tables/devicetypes.py:139 netbox/dcim/views.py:1174 +#: netbox/dcim/views.py:1418 netbox/dcim/views.py:2177 #: netbox/netbox/navigation/menu.py:96 #: netbox/templates/dcim/device/base.html:43 #: netbox/templates/dcim/device_list.html:50 @@ -7048,16 +7594,16 @@ msgstr "Ports aan de voorkant" msgid "Rear Ports" msgstr "Poorten achteraan" -#: netbox/dcim/tables/devicetypes.py:137 netbox/dcim/views.py:1100 -#: netbox/dcim/views.py:2053 netbox/netbox/navigation/menu.py:102 +#: netbox/dcim/tables/devicetypes.py:142 netbox/dcim/views.py:1204 +#: netbox/dcim/views.py:2217 netbox/netbox/navigation/menu.py:102 #: netbox/templates/dcim/device/base.html:49 #: netbox/templates/dcim/device_list.html:57 #: netbox/templates/dcim/devicetype/base.html:46 msgid "Device Bays" msgstr "Apparaatvakken" -#: netbox/dcim/tables/devicetypes.py:140 netbox/dcim/views.py:1085 -#: netbox/dcim/views.py:1324 netbox/dcim/views.py:2033 +#: netbox/dcim/tables/devicetypes.py:145 netbox/dcim/views.py:1189 +#: netbox/dcim/views.py:1433 netbox/dcim/views.py:2197 #: netbox/netbox/navigation/menu.py:101 #: netbox/templates/dcim/device/base.html:46 #: netbox/templates/dcim/device_list.html:64 @@ -7067,7 +7613,7 @@ msgstr "Apparaatvakken" msgid "Module Bays" msgstr "Modulebays" -#: netbox/dcim/tables/power.py:36 netbox/netbox/navigation/menu.py:297 +#: netbox/dcim/tables/power.py:36 netbox/netbox/navigation/menu.py:318 #: netbox/templates/dcim/powerpanel.html:51 msgid "Power Feeds" msgstr "Stroomvoedingen" @@ -7080,111 +7626,105 @@ msgstr "Maximaal gebruik" msgid "Available Power (VA)" msgstr "Beschikbaar vermogen (VA)" -#: netbox/dcim/tables/racks.py:30 netbox/dcim/tables/sites.py:143 +#: netbox/dcim/tables/racks.py:30 netbox/dcim/tables/sites.py:142 #: netbox/netbox/navigation/menu.py:43 netbox/netbox/navigation/menu.py:47 #: netbox/netbox/navigation/menu.py:49 msgid "Racks" msgstr "Racks" -#: netbox/dcim/tables/racks.py:63 netbox/dcim/tables/racks.py:142 +#: netbox/dcim/tables/racks.py:63 netbox/dcim/tables/racks.py:141 #: netbox/templates/dcim/device.html:318 #: netbox/templates/dcim/inc/panels/racktype_dimensions.html:14 msgid "Height" msgstr "Hoogte" -#: netbox/dcim/tables/racks.py:67 netbox/dcim/tables/racks.py:165 +#: netbox/dcim/tables/racks.py:67 netbox/dcim/tables/racks.py:164 #: netbox/templates/dcim/inc/panels/racktype_dimensions.html:18 msgid "Outer Width" msgstr "Buitenbreedte" -#: netbox/dcim/tables/racks.py:71 netbox/dcim/tables/racks.py:169 +#: netbox/dcim/tables/racks.py:71 netbox/dcim/tables/racks.py:168 #: netbox/templates/dcim/inc/panels/racktype_dimensions.html:28 msgid "Outer Depth" msgstr "Buitendiepte" -#: netbox/dcim/tables/racks.py:79 netbox/dcim/tables/racks.py:177 +#: netbox/dcim/tables/racks.py:79 netbox/dcim/tables/racks.py:176 msgid "Max Weight" msgstr "Maximaal gewicht" -#: netbox/dcim/tables/racks.py:154 +#: netbox/dcim/tables/racks.py:153 msgid "Space" msgstr "Ruimte" #: netbox/dcim/tables/sites.py:30 netbox/dcim/tables/sites.py:57 -#: netbox/extras/forms/filtersets.py:351 -#: netbox/extras/forms/model_forms.py:517 netbox/ipam/forms/bulk_edit.py:131 -#: netbox/ipam/forms/model_forms.py:153 netbox/ipam/tables/asn.py:66 +#: netbox/extras/forms/filtersets.py:358 +#: netbox/extras/forms/model_forms.py:531 netbox/ipam/forms/bulk_edit.py:134 +#: netbox/ipam/forms/model_forms.py:159 netbox/ipam/tables/asn.py:66 #: netbox/netbox/navigation/menu.py:15 netbox/netbox/navigation/menu.py:17 msgid "Sites" msgstr "Sites" -#: netbox/dcim/tests/test_api.py:47 +#: netbox/dcim/tests/test_api.py:50 msgid "Test case must set peer_termination_type" msgstr "De testcase moet peer_termination_type instellen" -#: netbox/dcim/views.py:138 +#: netbox/dcim/views.py:137 #, python-brace-format msgid "Disconnected {count} {type}" msgstr "Verbinding verbroken {count} {type}" -#: netbox/dcim/views.py:738 netbox/netbox/navigation/menu.py:51 +#: netbox/dcim/views.py:825 netbox/netbox/navigation/menu.py:51 msgid "Reservations" msgstr "Reserveringen" -#: netbox/dcim/views.py:757 netbox/templates/dcim/location.html:90 +#: netbox/dcim/views.py:844 netbox/templates/dcim/location.html:90 #: netbox/templates/dcim/site.html:140 msgid "Non-Racked Devices" msgstr "Apparaten zonder rack" -#: netbox/dcim/views.py:2086 netbox/extras/forms/model_forms.py:577 +#: netbox/dcim/views.py:2250 netbox/extras/forms/model_forms.py:591 #: netbox/templates/extras/configcontext.html:10 -#: netbox/virtualization/forms/model_forms.py:225 -#: netbox/virtualization/views.py:405 +#: netbox/virtualization/forms/model_forms.py:232 +#: netbox/virtualization/views.py:422 msgid "Config Context" msgstr "Context van de configuratie" -#: netbox/dcim/views.py:2096 netbox/virtualization/views.py:415 +#: netbox/dcim/views.py:2260 netbox/virtualization/views.py:432 msgid "Render Config" msgstr "Render-configuratie" -#: netbox/dcim/views.py:2131 netbox/virtualization/views.py:450 -#, python-brace-format -msgid "An error occurred while rendering the template: {error}" -msgstr "" -"Er is een fout opgetreden tijdens het renderen van de sjabloon: {error}" - -#: netbox/dcim/views.py:2149 netbox/extras/tables/tables.py:550 -#: netbox/netbox/navigation/menu.py:247 netbox/netbox/navigation/menu.py:249 -#: netbox/virtualization/views.py:178 +#: netbox/dcim/views.py:2273 netbox/extras/tables/tables.py:550 +#: netbox/netbox/navigation/menu.py:255 netbox/netbox/navigation/menu.py:257 +#: netbox/virtualization/views.py:190 msgid "Virtual Machines" msgstr "Virtuele machines" -#: netbox/dcim/views.py:2907 +#: netbox/dcim/views.py:3106 #, python-brace-format msgid "Installed device {device} in bay {device_bay}." msgstr "Geïnstalleerd apparaat {device} in de baai {device_bay}." -#: netbox/dcim/views.py:2948 +#: netbox/dcim/views.py:3147 #, python-brace-format msgid "Removed device {device} from bay {device_bay}." msgstr "Apparaat verwijderd {device} van bay {device_bay}." -#: netbox/dcim/views.py:3054 netbox/ipam/tables/ip.py:234 +#: netbox/dcim/views.py:3263 netbox/ipam/tables/ip.py:180 msgid "Children" msgstr "Kinderen" -#: netbox/dcim/views.py:3520 +#: netbox/dcim/views.py:3730 #, python-brace-format msgid "Added member {device}" msgstr "Lid toegevoegd {device}" -#: netbox/dcim/views.py:3567 +#: netbox/dcim/views.py:3779 #, python-brace-format msgid "Unable to remove master device {device} from the virtual chassis." msgstr "" "Kan het masterapparaat niet verwijderen {device} vanaf het virtuele chassis." -#: netbox/dcim/views.py:3580 +#: netbox/dcim/views.py:3792 #, python-brace-format msgid "Removed {device} from virtual chassis {chassis}" msgstr "Verwijderd {device} vanaf een virtueel chassis {chassis}" @@ -7283,7 +7823,7 @@ msgstr "Nee" #: netbox/extras/choices.py:108 netbox/templates/tenancy/contact.html:57 #: netbox/tenancy/forms/bulk_edit.py:118 -#: netbox/wireless/forms/model_forms.py:168 +#: netbox/wireless/forms/model_forms.py:171 msgid "Link" msgstr "Link" @@ -7303,15 +7843,15 @@ msgstr "Alfabetisch (A-Z)" msgid "Alphabetical (Z-A)" msgstr "Alfabetisch (Z-A)" -#: netbox/extras/choices.py:144 netbox/extras/choices.py:167 +#: netbox/extras/choices.py:144 netbox/extras/choices.py:165 msgid "Info" msgstr "Informatie" -#: netbox/extras/choices.py:145 netbox/extras/choices.py:168 +#: netbox/extras/choices.py:145 netbox/extras/choices.py:166 msgid "Success" msgstr "Succes" -#: netbox/extras/choices.py:146 netbox/extras/choices.py:169 +#: netbox/extras/choices.py:146 netbox/extras/choices.py:167 msgid "Warning" msgstr "Waarschuwing" @@ -7319,52 +7859,29 @@ msgstr "Waarschuwing" msgid "Danger" msgstr "Gevaar" -#: netbox/extras/choices.py:165 +#: netbox/extras/choices.py:164 msgid "Debug" msgstr "Debuggen" -#: netbox/extras/choices.py:166 netbox/netbox/choices.py:101 -msgid "Default" -msgstr "Standaard" - -#: netbox/extras/choices.py:170 +#: netbox/extras/choices.py:168 msgid "Failure" msgstr "Mislukking" -#: netbox/extras/choices.py:186 -msgid "Hourly" -msgstr "Elk uur" - -#: netbox/extras/choices.py:187 -msgid "12 hours" -msgstr "12 uur" - -#: netbox/extras/choices.py:188 -msgid "Daily" -msgstr "Dagelijks" - -#: netbox/extras/choices.py:189 -msgid "Weekly" -msgstr "Wekelijks" - -#: netbox/extras/choices.py:190 -msgid "30 days" -msgstr "30 dagen" - -#: netbox/extras/choices.py:226 +#: netbox/extras/choices.py:213 #: netbox/templates/dcim/virtualchassis_edit.html:107 #: netbox/templates/generic/bulk_add_component.html:68 #: netbox/templates/generic/object_edit.html:47 #: netbox/templates/generic/object_edit.html:80 +#: netbox/templates/htmx/quick_add.html:24 #: netbox/templates/ipam/inc/ipaddress_edit_header.html:7 msgid "Create" msgstr "Creëren" -#: netbox/extras/choices.py:227 +#: netbox/extras/choices.py:214 msgid "Update" msgstr "Bijwerken" -#: netbox/extras/choices.py:228 +#: netbox/extras/choices.py:215 #: netbox/templates/circuits/inc/circuit_termination.html:23 #: netbox/templates/dcim/inc/panels/inventory_items.html:37 #: netbox/templates/dcim/powerpanel.html:66 @@ -7379,82 +7896,82 @@ msgstr "Bijwerken" msgid "Delete" msgstr "Verwijderen" -#: netbox/extras/choices.py:252 netbox/netbox/choices.py:57 -#: netbox/netbox/choices.py:102 +#: netbox/extras/choices.py:239 netbox/netbox/choices.py:59 +#: netbox/netbox/choices.py:104 msgid "Blue" msgstr "Blauw" -#: netbox/extras/choices.py:253 netbox/netbox/choices.py:56 -#: netbox/netbox/choices.py:103 +#: netbox/extras/choices.py:240 netbox/netbox/choices.py:58 +#: netbox/netbox/choices.py:105 msgid "Indigo" msgstr "Indigo" -#: netbox/extras/choices.py:254 netbox/netbox/choices.py:54 -#: netbox/netbox/choices.py:104 +#: netbox/extras/choices.py:241 netbox/netbox/choices.py:56 +#: netbox/netbox/choices.py:106 msgid "Purple" msgstr "Paars" -#: netbox/extras/choices.py:255 netbox/netbox/choices.py:51 -#: netbox/netbox/choices.py:105 +#: netbox/extras/choices.py:242 netbox/netbox/choices.py:53 +#: netbox/netbox/choices.py:107 msgid "Pink" msgstr "Roze" -#: netbox/extras/choices.py:256 netbox/netbox/choices.py:50 -#: netbox/netbox/choices.py:106 +#: netbox/extras/choices.py:243 netbox/netbox/choices.py:52 +#: netbox/netbox/choices.py:108 msgid "Red" msgstr "Rood" -#: netbox/extras/choices.py:257 netbox/netbox/choices.py:68 -#: netbox/netbox/choices.py:107 +#: netbox/extras/choices.py:244 netbox/netbox/choices.py:70 +#: netbox/netbox/choices.py:109 msgid "Orange" msgstr "Oranje" -#: netbox/extras/choices.py:258 netbox/netbox/choices.py:66 -#: netbox/netbox/choices.py:108 +#: netbox/extras/choices.py:245 netbox/netbox/choices.py:68 +#: netbox/netbox/choices.py:110 msgid "Yellow" msgstr "Geel" -#: netbox/extras/choices.py:259 netbox/netbox/choices.py:63 -#: netbox/netbox/choices.py:109 +#: netbox/extras/choices.py:246 netbox/netbox/choices.py:65 +#: netbox/netbox/choices.py:111 msgid "Green" msgstr "Groen" -#: netbox/extras/choices.py:260 netbox/netbox/choices.py:60 -#: netbox/netbox/choices.py:110 +#: netbox/extras/choices.py:247 netbox/netbox/choices.py:62 +#: netbox/netbox/choices.py:112 msgid "Teal" msgstr "Groenblauw" -#: netbox/extras/choices.py:261 netbox/netbox/choices.py:59 -#: netbox/netbox/choices.py:111 +#: netbox/extras/choices.py:248 netbox/netbox/choices.py:61 +#: netbox/netbox/choices.py:113 msgid "Cyan" msgstr "Cyaan" -#: netbox/extras/choices.py:262 netbox/netbox/choices.py:112 +#: netbox/extras/choices.py:249 netbox/netbox/choices.py:114 msgid "Gray" msgstr "Grijs" -#: netbox/extras/choices.py:263 netbox/netbox/choices.py:74 -#: netbox/netbox/choices.py:113 +#: netbox/extras/choices.py:250 netbox/netbox/choices.py:76 +#: netbox/netbox/choices.py:115 msgid "Black" msgstr "Zwart" -#: netbox/extras/choices.py:264 netbox/netbox/choices.py:75 -#: netbox/netbox/choices.py:114 +#: netbox/extras/choices.py:251 netbox/netbox/choices.py:77 +#: netbox/netbox/choices.py:116 msgid "White" msgstr "Wit" -#: netbox/extras/choices.py:279 netbox/extras/forms/model_forms.py:353 -#: netbox/extras/forms/model_forms.py:430 +#: netbox/extras/choices.py:266 netbox/extras/forms/model_forms.py:367 +#: netbox/extras/forms/model_forms.py:444 #: netbox/templates/extras/webhook.html:10 msgid "Webhook" msgstr "Webhook" -#: netbox/extras/choices.py:280 netbox/extras/forms/model_forms.py:418 +#: netbox/extras/choices.py:267 netbox/extras/forms/model_forms.py:432 #: netbox/templates/extras/script/base.html:29 msgid "Script" msgstr "Script" -#: netbox/extras/choices.py:281 +#: netbox/extras/choices.py:268 msgid "Notification" msgstr "Melding" @@ -7553,30 +8070,34 @@ msgstr "" msgid "RSS Feed" msgstr "RSS-feed" -#: netbox/extras/dashboard/widgets.py:279 +#: netbox/extras/dashboard/widgets.py:280 msgid "Embed an RSS feed from an external website." msgstr "Voeg een RSS-feed van een externe website in." -#: netbox/extras/dashboard/widgets.py:286 +#: netbox/extras/dashboard/widgets.py:287 msgid "Feed URL" msgstr "URL van de feed" -#: netbox/extras/dashboard/widgets.py:291 +#: netbox/extras/dashboard/widgets.py:290 +msgid "Requires external connection" +msgstr "Vereist een externe verbinding" + +#: netbox/extras/dashboard/widgets.py:296 msgid "The maximum number of objects to display" msgstr "Het maximale aantal objecten dat moet worden weergegeven" -#: netbox/extras/dashboard/widgets.py:296 +#: netbox/extras/dashboard/widgets.py:301 msgid "How long to stored the cached content (in seconds)" msgstr "Hoe lang moet de inhoud in de cache worden bewaard (in seconden)" -#: netbox/extras/dashboard/widgets.py:348 +#: netbox/extras/dashboard/widgets.py:358 #: netbox/templates/account/base.html:10 #: netbox/templates/account/bookmarks.html:7 -#: netbox/templates/inc/user_menu.html:48 +#: netbox/templates/inc/user_menu.html:43 msgid "Bookmarks" msgstr "Bladwijzers" -#: netbox/extras/dashboard/widgets.py:352 +#: netbox/extras/dashboard/widgets.py:362 msgid "Show your personal bookmarks" msgstr "Laat je persoonlijke bladwijzers zien" @@ -7606,17 +8127,17 @@ msgid "Group (name)" msgstr "Groep (naam)" #: netbox/extras/filtersets.py:574 -#: netbox/virtualization/forms/filtersets.py:118 +#: netbox/virtualization/forms/filtersets.py:123 msgid "Cluster type" msgstr "Clustertype" -#: netbox/extras/filtersets.py:580 netbox/virtualization/filtersets.py:95 -#: netbox/virtualization/filtersets.py:147 +#: netbox/extras/filtersets.py:580 netbox/virtualization/filtersets.py:61 +#: netbox/virtualization/filtersets.py:113 msgid "Cluster type (slug)" msgstr "Clustertype (slug)" #: netbox/extras/filtersets.py:601 netbox/tenancy/forms/forms.py:16 -#: netbox/tenancy/forms/forms.py:39 +#: netbox/tenancy/forms/forms.py:40 msgid "Tenant group" msgstr "Tenant groep" @@ -7625,7 +8146,7 @@ msgstr "Tenant groep" msgid "Tenant group (slug)" msgstr "Tenant groep (slug)" -#: netbox/extras/filtersets.py:623 netbox/extras/forms/model_forms.py:495 +#: netbox/extras/filtersets.py:623 netbox/extras/forms/model_forms.py:509 #: netbox/templates/extras/tag.html:11 msgid "Tag" msgstr "Tag" @@ -7634,60 +8155,60 @@ msgstr "Tag" msgid "Tag (slug)" msgstr "Label (slug)" -#: netbox/extras/filtersets.py:689 netbox/extras/forms/filtersets.py:429 +#: netbox/extras/filtersets.py:689 netbox/extras/forms/filtersets.py:437 msgid "Has local config context data" msgstr "Heeft contextgegevens voor de lokale configuratie" -#: netbox/extras/forms/bulk_edit.py:35 netbox/extras/forms/filtersets.py:60 +#: netbox/extras/forms/bulk_edit.py:35 netbox/extras/forms/filtersets.py:61 msgid "Group name" msgstr "Groepsnaam" -#: netbox/extras/forms/bulk_edit.py:43 netbox/extras/forms/filtersets.py:68 +#: netbox/extras/forms/bulk_edit.py:43 netbox/extras/forms/filtersets.py:69 #: netbox/extras/tables/tables.py:65 #: netbox/templates/extras/customfield.html:38 #: netbox/templates/generic/bulk_import.html:118 msgid "Required" msgstr "Verplicht" -#: netbox/extras/forms/bulk_edit.py:48 netbox/extras/forms/filtersets.py:75 +#: netbox/extras/forms/bulk_edit.py:48 netbox/extras/forms/filtersets.py:76 msgid "Must be unique" msgstr "Moet uniek zijn" #: netbox/extras/forms/bulk_edit.py:61 netbox/extras/forms/bulk_import.py:60 -#: netbox/extras/forms/filtersets.py:89 +#: netbox/extras/forms/filtersets.py:90 #: netbox/extras/models/customfields.py:209 msgid "UI visible" msgstr "UI zichtbaar" #: netbox/extras/forms/bulk_edit.py:66 netbox/extras/forms/bulk_import.py:66 -#: netbox/extras/forms/filtersets.py:94 +#: netbox/extras/forms/filtersets.py:95 #: netbox/extras/models/customfields.py:216 msgid "UI editable" msgstr "UI bewerkbaar" -#: netbox/extras/forms/bulk_edit.py:71 netbox/extras/forms/filtersets.py:97 +#: netbox/extras/forms/bulk_edit.py:71 netbox/extras/forms/filtersets.py:98 msgid "Is cloneable" msgstr "Is kloonbaar" -#: netbox/extras/forms/bulk_edit.py:76 netbox/extras/forms/filtersets.py:104 +#: netbox/extras/forms/bulk_edit.py:76 netbox/extras/forms/filtersets.py:105 msgid "Minimum value" msgstr "Minimumwaarde" -#: netbox/extras/forms/bulk_edit.py:80 netbox/extras/forms/filtersets.py:108 +#: netbox/extras/forms/bulk_edit.py:80 netbox/extras/forms/filtersets.py:109 msgid "Maximum value" msgstr "Maximale waarde" -#: netbox/extras/forms/bulk_edit.py:84 netbox/extras/forms/filtersets.py:112 +#: netbox/extras/forms/bulk_edit.py:84 netbox/extras/forms/filtersets.py:113 msgid "Validation regex" msgstr "Validatieregex" -#: netbox/extras/forms/bulk_edit.py:91 netbox/extras/forms/filtersets.py:46 +#: netbox/extras/forms/bulk_edit.py:91 netbox/extras/forms/filtersets.py:47 #: netbox/extras/forms/model_forms.py:76 #: netbox/templates/extras/customfield.html:70 msgid "Behavior" msgstr "Gedrag" -#: netbox/extras/forms/bulk_edit.py:128 netbox/extras/forms/filtersets.py:149 +#: netbox/extras/forms/bulk_edit.py:128 netbox/extras/forms/filtersets.py:152 msgid "New window" msgstr "Nieuw venster" @@ -7695,31 +8216,31 @@ msgstr "Nieuw venster" msgid "Button class" msgstr "Knopklasse" -#: netbox/extras/forms/bulk_edit.py:154 netbox/extras/forms/filtersets.py:187 +#: netbox/extras/forms/bulk_edit.py:154 netbox/extras/forms/filtersets.py:191 #: netbox/extras/models/models.py:409 msgid "MIME type" msgstr "MIME-type" -#: netbox/extras/forms/bulk_edit.py:159 netbox/extras/forms/filtersets.py:190 +#: netbox/extras/forms/bulk_edit.py:159 netbox/extras/forms/filtersets.py:194 msgid "File extension" msgstr "bestandsextensie" -#: netbox/extras/forms/bulk_edit.py:164 netbox/extras/forms/filtersets.py:194 +#: netbox/extras/forms/bulk_edit.py:164 netbox/extras/forms/filtersets.py:198 msgid "As attachment" msgstr "Als bijlage" -#: netbox/extras/forms/bulk_edit.py:192 netbox/extras/forms/filtersets.py:236 +#: netbox/extras/forms/bulk_edit.py:192 netbox/extras/forms/filtersets.py:242 #: netbox/extras/tables/tables.py:256 #: netbox/templates/extras/savedfilter.html:29 msgid "Shared" msgstr "Gedeeld" -#: netbox/extras/forms/bulk_edit.py:215 netbox/extras/forms/filtersets.py:265 +#: netbox/extras/forms/bulk_edit.py:215 netbox/extras/forms/filtersets.py:271 #: netbox/extras/models/models.py:174 msgid "HTTP method" msgstr "HTTP-methode" -#: netbox/extras/forms/bulk_edit.py:219 netbox/extras/forms/filtersets.py:259 +#: netbox/extras/forms/bulk_edit.py:219 netbox/extras/forms/filtersets.py:265 #: netbox/templates/extras/webhook.html:30 msgid "Payload URL" msgstr "URL van de payload" @@ -7738,7 +8259,7 @@ msgid "CA file path" msgstr "CA-bestandspad" #: netbox/extras/forms/bulk_edit.py:253 netbox/extras/forms/bulk_import.py:192 -#: netbox/extras/forms/model_forms.py:377 +#: netbox/extras/forms/model_forms.py:391 msgid "Event types" msgstr "Soorten gebeurtenis" @@ -7751,13 +8272,13 @@ msgstr "Is actief" #: netbox/extras/forms/bulk_import.py:139 #: netbox/extras/forms/bulk_import.py:162 #: netbox/extras/forms/bulk_import.py:186 -#: netbox/extras/forms/filtersets.py:137 netbox/extras/forms/filtersets.py:224 +#: netbox/extras/forms/filtersets.py:140 netbox/extras/forms/filtersets.py:230 #: netbox/extras/forms/model_forms.py:47 -#: netbox/extras/forms/model_forms.py:205 -#: netbox/extras/forms/model_forms.py:237 -#: netbox/extras/forms/model_forms.py:278 -#: netbox/extras/forms/model_forms.py:372 -#: netbox/extras/forms/model_forms.py:489 +#: netbox/extras/forms/model_forms.py:219 +#: netbox/extras/forms/model_forms.py:251 +#: netbox/extras/forms/model_forms.py:292 +#: netbox/extras/forms/model_forms.py:386 +#: netbox/extras/forms/model_forms.py:503 #: netbox/users/forms/model_forms.py:276 msgid "Object types" msgstr "Objecttypen" @@ -7775,10 +8296,10 @@ msgstr "Een of meer toegewezen objecttypen" msgid "Field data type (e.g. text, integer, etc.)" msgstr "Veldgegevenstype (bijv. tekst, geheel getal, enz.)" -#: netbox/extras/forms/bulk_import.py:47 netbox/extras/forms/filtersets.py:208 -#: netbox/extras/forms/filtersets.py:281 -#: netbox/extras/forms/model_forms.py:304 -#: netbox/extras/forms/model_forms.py:341 +#: netbox/extras/forms/bulk_import.py:47 netbox/extras/forms/filtersets.py:213 +#: netbox/extras/forms/filtersets.py:287 +#: netbox/extras/forms/model_forms.py:318 +#: netbox/extras/forms/model_forms.py:355 #: netbox/tenancy/forms/filtersets.py:92 msgid "Object type" msgstr "Soort object" @@ -7787,7 +8308,7 @@ msgstr "Soort object" msgid "Object type (for object or multi-object fields)" msgstr "Objecttype (voor velden met objecten of velden met meerdere objecten)" -#: netbox/extras/forms/bulk_import.py:53 netbox/extras/forms/filtersets.py:84 +#: netbox/extras/forms/bulk_import.py:53 netbox/extras/forms/filtersets.py:85 msgid "Choice set" msgstr "Keuze set" @@ -7860,7 +8381,7 @@ msgid "The classification of entry" msgstr "De classificatie van binnenkomst" #: netbox/extras/forms/bulk_import.py:261 -#: netbox/extras/forms/model_forms.py:320 netbox/netbox/navigation/menu.py:390 +#: netbox/extras/forms/model_forms.py:334 netbox/netbox/navigation/menu.py:411 #: netbox/templates/extras/notificationgroup.html:41 #: netbox/templates/users/group.html:29 netbox/users/forms/model_forms.py:236 #: netbox/users/forms/model_forms.py:248 netbox/users/forms/model_forms.py:300 @@ -7874,7 +8395,8 @@ msgstr "" "Gebruikersnamen gescheiden door komma's, tussen dubbele aanhalingstekens" #: netbox/extras/forms/bulk_import.py:268 -#: netbox/extras/forms/model_forms.py:315 netbox/netbox/navigation/menu.py:410 +#: netbox/extras/forms/model_forms.py:329 netbox/netbox/navigation/menu.py:294 +#: netbox/netbox/navigation/menu.py:431 #: netbox/templates/extras/notificationgroup.html:31 #: netbox/users/forms/model_forms.py:181 netbox/users/forms/model_forms.py:193 #: netbox/users/forms/model_forms.py:305 netbox/users/tables.py:35 @@ -7886,104 +8408,104 @@ msgstr "Groepen" msgid "Group names separated by commas, encased with double quotes" msgstr "Groepsnamen gescheiden door komma's, tussen dubbele aanhalingstekens" -#: netbox/extras/forms/filtersets.py:52 netbox/extras/forms/model_forms.py:56 +#: netbox/extras/forms/filtersets.py:53 netbox/extras/forms/model_forms.py:56 msgid "Related object type" msgstr "Gerelateerd objecttype" -#: netbox/extras/forms/filtersets.py:57 +#: netbox/extras/forms/filtersets.py:58 msgid "Field type" msgstr "Soort veld" -#: netbox/extras/forms/filtersets.py:120 +#: netbox/extras/forms/filtersets.py:122 #: netbox/extras/forms/model_forms.py:157 netbox/extras/tables/tables.py:91 #: netbox/templates/generic/bulk_import.html:154 msgid "Choices" msgstr "Keuzes" -#: netbox/extras/forms/filtersets.py:164 netbox/extras/forms/filtersets.py:319 -#: netbox/extras/forms/filtersets.py:408 -#: netbox/extras/forms/model_forms.py:572 netbox/templates/core/job.html:96 +#: netbox/extras/forms/filtersets.py:168 netbox/extras/forms/filtersets.py:326 +#: netbox/extras/forms/filtersets.py:416 +#: netbox/extras/forms/model_forms.py:586 netbox/templates/core/job.html:96 #: netbox/templates/extras/eventrule.html:84 msgid "Data" msgstr "Gegevens" -#: netbox/extras/forms/filtersets.py:175 netbox/extras/forms/filtersets.py:333 -#: netbox/extras/forms/filtersets.py:418 netbox/netbox/choices.py:130 +#: netbox/extras/forms/filtersets.py:179 netbox/extras/forms/filtersets.py:340 +#: netbox/extras/forms/filtersets.py:426 netbox/netbox/choices.py:132 #: netbox/utilities/forms/bulk_import.py:26 msgid "Data file" msgstr "Gegevensbestand" -#: netbox/extras/forms/filtersets.py:183 +#: netbox/extras/forms/filtersets.py:187 msgid "Content types" msgstr "Inhoudstypen" -#: netbox/extras/forms/filtersets.py:255 netbox/extras/models/models.py:179 +#: netbox/extras/forms/filtersets.py:261 netbox/extras/models/models.py:179 msgid "HTTP content type" msgstr "HTTP-inhoudstype" -#: netbox/extras/forms/filtersets.py:286 +#: netbox/extras/forms/filtersets.py:292 msgid "Event type" msgstr "Soort gebeurtenis" -#: netbox/extras/forms/filtersets.py:291 +#: netbox/extras/forms/filtersets.py:297 msgid "Action type" msgstr "Soort actie" -#: netbox/extras/forms/filtersets.py:307 +#: netbox/extras/forms/filtersets.py:313 msgid "Tagged object type" msgstr "Objecttype met tags" -#: netbox/extras/forms/filtersets.py:312 +#: netbox/extras/forms/filtersets.py:318 msgid "Allowed object type" msgstr "Toegestaan objecttype" -#: netbox/extras/forms/filtersets.py:341 -#: netbox/extras/forms/model_forms.py:507 netbox/netbox/navigation/menu.py:18 +#: netbox/extras/forms/filtersets.py:348 +#: netbox/extras/forms/model_forms.py:521 netbox/netbox/navigation/menu.py:18 msgid "Regions" msgstr "Regio's" -#: netbox/extras/forms/filtersets.py:346 -#: netbox/extras/forms/model_forms.py:512 +#: netbox/extras/forms/filtersets.py:353 +#: netbox/extras/forms/model_forms.py:526 msgid "Site groups" msgstr "Sitegroepen" -#: netbox/extras/forms/filtersets.py:356 -#: netbox/extras/forms/model_forms.py:522 netbox/netbox/navigation/menu.py:20 +#: netbox/extras/forms/filtersets.py:363 +#: netbox/extras/forms/model_forms.py:536 netbox/netbox/navigation/menu.py:20 #: netbox/templates/dcim/site.html:127 msgid "Locations" msgstr "Locaties" -#: netbox/extras/forms/filtersets.py:361 -#: netbox/extras/forms/model_forms.py:527 +#: netbox/extras/forms/filtersets.py:368 +#: netbox/extras/forms/model_forms.py:541 msgid "Device types" msgstr "Apparaattypes" -#: netbox/extras/forms/filtersets.py:366 -#: netbox/extras/forms/model_forms.py:532 +#: netbox/extras/forms/filtersets.py:373 +#: netbox/extras/forms/model_forms.py:546 msgid "Roles" msgstr "Rollen" -#: netbox/extras/forms/filtersets.py:376 -#: netbox/extras/forms/model_forms.py:542 +#: netbox/extras/forms/filtersets.py:383 +#: netbox/extras/forms/model_forms.py:556 msgid "Cluster types" msgstr "Clustertypen" -#: netbox/extras/forms/filtersets.py:381 -#: netbox/extras/forms/model_forms.py:547 +#: netbox/extras/forms/filtersets.py:388 +#: netbox/extras/forms/model_forms.py:561 msgid "Cluster groups" msgstr "Clustergroepen" -#: netbox/extras/forms/filtersets.py:386 -#: netbox/extras/forms/model_forms.py:552 netbox/netbox/navigation/menu.py:255 -#: netbox/netbox/navigation/menu.py:257 +#: netbox/extras/forms/filtersets.py:393 +#: netbox/extras/forms/model_forms.py:566 netbox/netbox/navigation/menu.py:263 +#: netbox/netbox/navigation/menu.py:265 #: netbox/templates/virtualization/clustertype.html:30 #: netbox/virtualization/tables/clusters.py:23 #: netbox/virtualization/tables/clusters.py:45 msgid "Clusters" msgstr "Clusters" -#: netbox/extras/forms/filtersets.py:391 -#: netbox/extras/forms/model_forms.py:557 +#: netbox/extras/forms/filtersets.py:398 +#: netbox/extras/forms/model_forms.py:571 msgid "Tenant groups" msgstr "Tenant groepen" @@ -8035,7 +8557,7 @@ msgstr "" msgid "Related Object" msgstr "Gerelateerd object" -#: netbox/extras/forms/model_forms.py:169 +#: netbox/extras/forms/model_forms.py:170 msgid "" "Enter one choice per line. An optional label may be specified for each " "choice by appending it with a colon. Example:" @@ -8043,16 +8565,16 @@ msgstr "" "Voer één keuze per regel in. Voor elke keuze kan een optioneel label worden " "gespecificeerd door er een dubbele punt aan toe te voegen. Voorbeeld:" -#: netbox/extras/forms/model_forms.py:212 +#: netbox/extras/forms/model_forms.py:226 #: netbox/templates/extras/customlink.html:10 msgid "Custom Link" msgstr "Aangepaste link" -#: netbox/extras/forms/model_forms.py:214 +#: netbox/extras/forms/model_forms.py:228 msgid "Templates" msgstr "Sjablonen" -#: netbox/extras/forms/model_forms.py:226 +#: netbox/extras/forms/model_forms.py:240 #, python-brace-format msgid "" "Jinja2 template code for the link text. Reference the object as {example}. " @@ -8062,68 +8584,68 @@ msgstr "" "{example}. Links die als lege tekst worden weergegeven, worden niet " "weergegeven." -#: netbox/extras/forms/model_forms.py:230 +#: netbox/extras/forms/model_forms.py:244 #, python-brace-format msgid "" "Jinja2 template code for the link URL. Reference the object as {example}." msgstr "" "Jinja2-sjablooncode voor de link-URL. Verwijs naar het object als {example}." -#: netbox/extras/forms/model_forms.py:241 -#: netbox/extras/forms/model_forms.py:624 +#: netbox/extras/forms/model_forms.py:255 +#: netbox/extras/forms/model_forms.py:638 msgid "Template code" msgstr "Sjablooncode" -#: netbox/extras/forms/model_forms.py:247 +#: netbox/extras/forms/model_forms.py:261 #: netbox/templates/extras/exporttemplate.html:12 msgid "Export Template" msgstr "Sjabloon exporteren" -#: netbox/extras/forms/model_forms.py:249 +#: netbox/extras/forms/model_forms.py:263 msgid "Rendering" msgstr "Renderen" -#: netbox/extras/forms/model_forms.py:263 -#: netbox/extras/forms/model_forms.py:649 +#: netbox/extras/forms/model_forms.py:277 +#: netbox/extras/forms/model_forms.py:663 msgid "Template content is populated from the remote source selected below." msgstr "" "De inhoud van de sjabloon wordt ingevuld via de externe bron die hieronder " "is geselecteerd." -#: netbox/extras/forms/model_forms.py:270 -#: netbox/extras/forms/model_forms.py:656 +#: netbox/extras/forms/model_forms.py:284 +#: netbox/extras/forms/model_forms.py:670 msgid "Must specify either local content or a data file" msgstr "Moet lokale inhoud of een gegevensbestand specificeren" -#: netbox/extras/forms/model_forms.py:284 netbox/netbox/forms/mixins.py:70 +#: netbox/extras/forms/model_forms.py:298 netbox/netbox/forms/mixins.py:70 #: netbox/templates/extras/savedfilter.html:10 msgid "Saved Filter" msgstr "Opgeslagen filter" -#: netbox/extras/forms/model_forms.py:334 +#: netbox/extras/forms/model_forms.py:348 msgid "A notification group specify at least one user or group." msgstr "" "In een meldingsgroep wordt ten minste één gebruiker of groep gespecificeerd." -#: netbox/extras/forms/model_forms.py:356 +#: netbox/extras/forms/model_forms.py:370 #: netbox/templates/extras/webhook.html:23 msgid "HTTP Request" msgstr "HTTP-aanvraag" -#: netbox/extras/forms/model_forms.py:358 +#: netbox/extras/forms/model_forms.py:372 #: netbox/templates/extras/webhook.html:44 msgid "SSL" msgstr "SSL" -#: netbox/extras/forms/model_forms.py:380 +#: netbox/extras/forms/model_forms.py:394 msgid "Action choice" msgstr "Keuze van de actie" -#: netbox/extras/forms/model_forms.py:385 +#: netbox/extras/forms/model_forms.py:399 msgid "Enter conditions in JSON format." msgstr "Voer de voorwaarden in JSON formaat." -#: netbox/extras/forms/model_forms.py:389 +#: netbox/extras/forms/model_forms.py:403 msgid "" "Enter parameters to pass to the action in JSON format." @@ -8131,34 +8653,34 @@ msgstr "" "Voer parameters in om door te geven aan de actie JSON formaat." -#: netbox/extras/forms/model_forms.py:394 +#: netbox/extras/forms/model_forms.py:408 #: netbox/templates/extras/eventrule.html:10 msgid "Event Rule" msgstr "Regel voor evenementen" -#: netbox/extras/forms/model_forms.py:395 +#: netbox/extras/forms/model_forms.py:409 msgid "Triggers" msgstr "Triggers" -#: netbox/extras/forms/model_forms.py:442 +#: netbox/extras/forms/model_forms.py:456 msgid "Notification group" msgstr "Meldingsgroep" -#: netbox/extras/forms/model_forms.py:562 netbox/netbox/navigation/menu.py:26 +#: netbox/extras/forms/model_forms.py:576 netbox/netbox/navigation/menu.py:26 #: netbox/tenancy/tables/tenants.py:22 msgid "Tenants" msgstr "Tenant" -#: netbox/extras/forms/model_forms.py:606 +#: netbox/extras/forms/model_forms.py:620 msgid "Data is populated from the remote source selected below." msgstr "" "Gegevens worden ingevuld via de externe bron die hieronder is geselecteerd." -#: netbox/extras/forms/model_forms.py:612 +#: netbox/extras/forms/model_forms.py:626 msgid "Must specify either local data or a data file" msgstr "Moet lokale gegevens of een gegevensbestand specificeren" -#: netbox/extras/forms/model_forms.py:631 +#: netbox/extras/forms/model_forms.py:645 #: netbox/templates/core/datafile.html:55 msgid "Content" msgstr "Inhoud" @@ -8222,10 +8744,16 @@ msgstr "Er deed zich een uitzondering voor: " msgid "Database changes have been reverted due to error." msgstr "Wijzigingen in de database zijn teruggedraaid vanwege een fout." -#: netbox/extras/management/commands/reindex.py:66 +#: netbox/extras/management/commands/reindex.py:67 msgid "No indexers found!" msgstr "Geen indexers gevonden!" +#: netbox/extras/models/configs.py:41 netbox/extras/models/models.py:313 +#: netbox/extras/models/models.py:522 netbox/extras/models/search.py:48 +#: netbox/ipam/models/ip.py:188 netbox/netbox/models/mixins.py:15 +msgid "weight" +msgstr "gewicht" + #: netbox/extras/models/configs.py:130 msgid "config context" msgstr "context van de configuratie" @@ -8596,27 +9124,27 @@ msgstr "Ongeldige object-ID gevonden: {id}" msgid "Required field cannot be empty." msgstr "Het verplichte veld mag niet leeg zijn." -#: netbox/extras/models/customfields.py:763 +#: netbox/extras/models/customfields.py:764 msgid "Base set of predefined choices (optional)" msgstr "Basisset van vooraf gedefinieerde keuzes (optioneel)" -#: netbox/extras/models/customfields.py:775 +#: netbox/extras/models/customfields.py:776 msgid "Choices are automatically ordered alphabetically" msgstr "Keuzes worden automatisch alfabetisch gerangschikt" -#: netbox/extras/models/customfields.py:782 +#: netbox/extras/models/customfields.py:783 msgid "custom field choice set" msgstr "aangepaste veldkeuzeset" -#: netbox/extras/models/customfields.py:783 +#: netbox/extras/models/customfields.py:784 msgid "custom field choice sets" msgstr "aangepaste veldkeuzesets" -#: netbox/extras/models/customfields.py:825 +#: netbox/extras/models/customfields.py:826 msgid "Must define base or extra choices." msgstr "Moet basis- of extra keuzes definiëren." -#: netbox/extras/models/customfields.py:849 +#: netbox/extras/models/customfields.py:850 #, python-brace-format msgid "" "Cannot remove choice {choice} as there are {model} objects which reference " @@ -8917,20 +9445,20 @@ msgstr "journaalpost" msgid "journal entries" msgstr "journaalposten" -#: netbox/extras/models/models.py:718 +#: netbox/extras/models/models.py:721 #, python-brace-format msgid "Journaling is not supported for this object type ({type})." msgstr "Journaling wordt niet ondersteund voor dit objecttype ({type})." -#: netbox/extras/models/models.py:760 +#: netbox/extras/models/models.py:763 msgid "bookmark" msgstr "bladwijzer" -#: netbox/extras/models/models.py:761 +#: netbox/extras/models/models.py:764 msgid "bookmarks" msgstr "bladwijzers" -#: netbox/extras/models/models.py:774 +#: netbox/extras/models/models.py:777 #, python-brace-format msgid "Bookmarks cannot be assigned to this object type ({type})." msgstr "" @@ -9023,19 +9551,19 @@ msgstr "waarde in de cache" msgid "cached values" msgstr "waarden in de cache" -#: netbox/extras/models/staging.py:44 +#: netbox/extras/models/staging.py:45 msgid "branch" msgstr "filiaal" -#: netbox/extras/models/staging.py:45 +#: netbox/extras/models/staging.py:46 msgid "branches" msgstr "takken" -#: netbox/extras/models/staging.py:97 +#: netbox/extras/models/staging.py:105 msgid "staged change" msgstr "gefaseerde verandering" -#: netbox/extras/models/staging.py:98 +#: netbox/extras/models/staging.py:106 msgid "staged changes" msgstr "gefaseerde wijzigingen" @@ -9059,11 +9587,11 @@ msgstr "item met tags" msgid "tagged items" msgstr "getagde artikelen" -#: netbox/extras/scripts.py:429 +#: netbox/extras/scripts.py:432 msgid "Script Data" msgstr "Scriptgegevens" -#: netbox/extras/scripts.py:433 +#: netbox/extras/scripts.py:436 msgid "Script Execution Parameters" msgstr "Parameters voor uitvoering van scripts" @@ -9140,12 +9668,11 @@ msgstr "Als bijlage" #: netbox/extras/tables/tables.py:195 netbox/extras/tables/tables.py:487 #: netbox/extras/tables/tables.py:522 netbox/templates/core/datafile.html:24 -#: netbox/templates/dcim/device/render_config.html:22 #: netbox/templates/extras/configcontext.html:39 #: netbox/templates/extras/configtemplate.html:31 #: netbox/templates/extras/exporttemplate.html:45 +#: netbox/templates/extras/object_render_config.html:23 #: netbox/templates/generic/bulk_import.html:35 -#: netbox/templates/virtualization/virtualmachine/render_config.html:22 msgid "Data File" msgstr "Gegevensbestand" @@ -9237,27 +9764,33 @@ msgstr "Ongeldig kenmerk”{name}„op aanvraag" msgid "Invalid attribute \"{name}\" for {model}" msgstr "Ongeldig kenmerk”{name}„voor {model}" -#: netbox/extras/views.py:960 +#: netbox/extras/views.py:933 +#, python-brace-format +msgid "An error occurred while rendering the template: {error}" +msgstr "" +"Er is een fout opgetreden tijdens het renderen van de sjabloon: {error}" + +#: netbox/extras/views.py:1085 msgid "Your dashboard has been reset." msgstr "Je dashboard is opnieuw ingesteld." -#: netbox/extras/views.py:1006 +#: netbox/extras/views.py:1131 msgid "Added widget: " msgstr "Widget toegevoegd: " -#: netbox/extras/views.py:1047 +#: netbox/extras/views.py:1172 msgid "Updated widget: " msgstr "Bijgewerkte widget: " -#: netbox/extras/views.py:1083 +#: netbox/extras/views.py:1208 msgid "Deleted widget: " msgstr "Widget verwijderd: " -#: netbox/extras/views.py:1085 +#: netbox/extras/views.py:1210 msgid "Error deleting widget: " msgstr "Fout bij het verwijderen van de widget: " -#: netbox/extras/views.py:1175 +#: netbox/extras/views.py:1308 msgid "Unable to run script: RQ worker process not running." msgstr "Kan script niet uitvoeren: het RQ-werkproces wordt niet uitgevoerd." @@ -9279,7 +9812,7 @@ msgstr "Voer een geldig IPv4- of IPv6-prefix en masker in de CIDR-notatie in." msgid "Invalid IP prefix format: {data}" msgstr "Ongeldig formaat voor IP-prefix: {data}" -#: netbox/ipam/api/views.py:358 +#: netbox/ipam/api/views.py:370 msgid "" "Insufficient space is available to accommodate the requested prefix size(s)" msgstr "" @@ -9321,182 +9854,174 @@ msgstr "Cisco" msgid "Plaintext" msgstr "Platte tekst" +#: netbox/ipam/choices.py:166 netbox/ipam/forms/model_forms.py:800 +#: netbox/ipam/forms/model_forms.py:828 netbox/templates/ipam/service.html:21 +msgid "Service" +msgstr "Service" + +#: netbox/ipam/choices.py:167 +msgid "Customer" +msgstr "Klant" + #: netbox/ipam/fields.py:36 #, python-brace-format msgid "Invalid IP address format: {address}" msgstr "Ongeldig formaat van het IP-adres: {address}" -#: netbox/ipam/filtersets.py:48 netbox/vpn/filtersets.py:304 +#: netbox/ipam/filtersets.py:51 netbox/vpn/filtersets.py:304 msgid "Import target" msgstr "Doel importeren" -#: netbox/ipam/filtersets.py:54 netbox/vpn/filtersets.py:310 +#: netbox/ipam/filtersets.py:57 netbox/vpn/filtersets.py:310 msgid "Import target (name)" msgstr "Importdoel (naam)" -#: netbox/ipam/filtersets.py:59 netbox/vpn/filtersets.py:315 +#: netbox/ipam/filtersets.py:62 netbox/vpn/filtersets.py:315 msgid "Export target" msgstr "Doel exporteren" -#: netbox/ipam/filtersets.py:65 netbox/vpn/filtersets.py:321 +#: netbox/ipam/filtersets.py:68 netbox/vpn/filtersets.py:321 msgid "Export target (name)" msgstr "Exportdoel (naam)" -#: netbox/ipam/filtersets.py:86 +#: netbox/ipam/filtersets.py:89 msgid "Importing VRF" msgstr "VRF importeren" -#: netbox/ipam/filtersets.py:92 +#: netbox/ipam/filtersets.py:95 msgid "Import VRF (RD)" msgstr "VRF (RD) importeren" -#: netbox/ipam/filtersets.py:97 +#: netbox/ipam/filtersets.py:100 msgid "Exporting VRF" msgstr "VRF exporteren" -#: netbox/ipam/filtersets.py:103 +#: netbox/ipam/filtersets.py:106 msgid "Export VRF (RD)" msgstr "VRF (RD) exporteren" -#: netbox/ipam/filtersets.py:108 +#: netbox/ipam/filtersets.py:111 msgid "Importing L2VPN" msgstr "L2VPN importeren" -#: netbox/ipam/filtersets.py:114 +#: netbox/ipam/filtersets.py:117 msgid "Importing L2VPN (identifier)" msgstr "L2VPN importeren (identifier)" -#: netbox/ipam/filtersets.py:119 +#: netbox/ipam/filtersets.py:122 msgid "Exporting L2VPN" msgstr "L2VPN exporteren" -#: netbox/ipam/filtersets.py:125 +#: netbox/ipam/filtersets.py:128 msgid "Exporting L2VPN (identifier)" msgstr "L2VPN exporteren (identifier)" -#: netbox/ipam/filtersets.py:155 netbox/ipam/filtersets.py:283 -#: netbox/ipam/forms/model_forms.py:229 netbox/ipam/tables/ip.py:212 +#: netbox/ipam/filtersets.py:158 netbox/ipam/filtersets.py:286 +#: netbox/ipam/forms/model_forms.py:229 netbox/ipam/tables/ip.py:158 #: netbox/templates/ipam/prefix.html:12 msgid "Prefix" msgstr "Prefix" -#: netbox/ipam/filtersets.py:159 netbox/ipam/filtersets.py:198 -#: netbox/ipam/filtersets.py:223 +#: netbox/ipam/filtersets.py:162 netbox/ipam/filtersets.py:201 +#: netbox/ipam/filtersets.py:226 msgid "RIR (ID)" msgstr "RIR (ID)" -#: netbox/ipam/filtersets.py:165 netbox/ipam/filtersets.py:204 -#: netbox/ipam/filtersets.py:229 +#: netbox/ipam/filtersets.py:168 netbox/ipam/filtersets.py:207 +#: netbox/ipam/filtersets.py:232 msgid "RIR (slug)" msgstr "RIR (slak)" -#: netbox/ipam/filtersets.py:287 +#: netbox/ipam/filtersets.py:290 msgid "Within prefix" msgstr "Binnen deze prefix" -#: netbox/ipam/filtersets.py:291 +#: netbox/ipam/filtersets.py:294 msgid "Within and including prefix" msgstr "Binnen en inclusief prefix" -#: netbox/ipam/filtersets.py:295 +#: netbox/ipam/filtersets.py:298 msgid "Prefixes which contain this prefix or IP" msgstr "Prefixen die deze prefix of IP-adres bevatten" -#: netbox/ipam/filtersets.py:306 netbox/ipam/filtersets.py:574 -#: netbox/ipam/forms/bulk_edit.py:343 netbox/ipam/forms/filtersets.py:196 -#: netbox/ipam/forms/filtersets.py:331 +#: netbox/ipam/filtersets.py:309 netbox/ipam/filtersets.py:541 +#: netbox/ipam/forms/bulk_edit.py:327 netbox/ipam/forms/filtersets.py:198 +#: netbox/ipam/forms/filtersets.py:334 msgid "Mask length" msgstr "Lengte van het masker" -#: netbox/ipam/filtersets.py:375 netbox/vpn/filtersets.py:427 +#: netbox/ipam/filtersets.py:342 netbox/vpn/filtersets.py:427 msgid "VLAN (ID)" msgstr "VLAN (ID)" -#: netbox/ipam/filtersets.py:379 netbox/vpn/filtersets.py:422 +#: netbox/ipam/filtersets.py:346 netbox/vpn/filtersets.py:422 msgid "VLAN number (1-4094)" msgstr "VLAN-nummer (1-4094)" -#: netbox/ipam/filtersets.py:473 netbox/ipam/filtersets.py:477 -#: netbox/ipam/filtersets.py:569 netbox/ipam/forms/model_forms.py:496 +#: netbox/ipam/filtersets.py:440 netbox/ipam/filtersets.py:444 +#: netbox/ipam/filtersets.py:536 netbox/ipam/forms/model_forms.py:506 #: netbox/templates/tenancy/contact.html:53 #: netbox/tenancy/forms/bulk_edit.py:113 msgid "Address" msgstr "Adres" -#: netbox/ipam/filtersets.py:481 +#: netbox/ipam/filtersets.py:448 msgid "Ranges which contain this prefix or IP" msgstr "Bereiken die deze prefix of IP-adres bevatten" -#: netbox/ipam/filtersets.py:509 netbox/ipam/filtersets.py:565 +#: netbox/ipam/filtersets.py:476 netbox/ipam/filtersets.py:532 msgid "Parent prefix" msgstr "Oudervoorvoegsel" -#: netbox/ipam/filtersets.py:618 netbox/ipam/filtersets.py:858 -#: netbox/ipam/filtersets.py:1133 netbox/vpn/filtersets.py:385 -msgid "Virtual machine (name)" -msgstr "Virtuele machine (naam)" - -#: netbox/ipam/filtersets.py:623 netbox/ipam/filtersets.py:863 -#: netbox/ipam/filtersets.py:1127 netbox/virtualization/filtersets.py:282 -#: netbox/virtualization/filtersets.py:321 netbox/vpn/filtersets.py:390 -msgid "Virtual machine (ID)" -msgstr "Virtuele machine (ID)" - -#: netbox/ipam/filtersets.py:629 netbox/vpn/filtersets.py:97 -#: netbox/vpn/filtersets.py:396 -msgid "Interface (name)" -msgstr "Interface (naam)" - -#: netbox/ipam/filtersets.py:640 netbox/vpn/filtersets.py:108 -#: netbox/vpn/filtersets.py:407 -msgid "VM interface (name)" -msgstr "VM-interface (naam)" - -#: netbox/ipam/filtersets.py:645 netbox/vpn/filtersets.py:113 -msgid "VM interface (ID)" -msgstr "VM-interface (ID)" - -#: netbox/ipam/filtersets.py:650 +#: netbox/ipam/filtersets.py:617 msgid "FHRP group (ID)" msgstr "FHRP-groep (ID)" -#: netbox/ipam/filtersets.py:654 +#: netbox/ipam/filtersets.py:621 msgid "Is assigned to an interface" msgstr "Is toegewezen aan een interface" -#: netbox/ipam/filtersets.py:658 +#: netbox/ipam/filtersets.py:625 msgid "Is assigned" msgstr "Is toegewezen" -#: netbox/ipam/filtersets.py:670 +#: netbox/ipam/filtersets.py:637 msgid "Service (ID)" msgstr "Service (ID)" -#: netbox/ipam/filtersets.py:675 +#: netbox/ipam/filtersets.py:642 msgid "NAT inside IP address (ID)" msgstr "NAT binnen IP-adres (ID)" -#: netbox/ipam/filtersets.py:1043 netbox/ipam/forms/bulk_import.py:322 -msgid "Assigned interface" -msgstr "Toegewezen interface" +#: netbox/ipam/filtersets.py:1001 +msgid "Q-in-Q SVLAN (ID)" +msgstr "Q-in-Q SVLAN (ID)" -#: netbox/ipam/filtersets.py:1048 +#: netbox/ipam/filtersets.py:1005 +msgid "Q-in-Q SVLAN number (1-4094)" +msgstr "Q-in-Q SVLAN nummer (1-4094)" + +#: netbox/ipam/filtersets.py:1026 msgid "Assigned VM interface" msgstr "Toegewezen VM-interface" -#: netbox/ipam/filtersets.py:1138 +#: netbox/ipam/filtersets.py:1097 +msgid "VLAN Translation Policy (name)" +msgstr "VLAN-vertaalbeleid (naam)" + +#: netbox/ipam/filtersets.py:1163 msgid "IP address (ID)" msgstr "IP-adres (ID)" -#: netbox/ipam/filtersets.py:1144 netbox/ipam/models/ip.py:788 +#: netbox/ipam/filtersets.py:1169 netbox/ipam/models/ip.py:788 msgid "IP address" msgstr "IP-adres" -#: netbox/ipam/filtersets.py:1169 +#: netbox/ipam/filtersets.py:1194 msgid "Primary IPv4 (ID)" msgstr "Primaire IPv4 (ID)" -#: netbox/ipam/filtersets.py:1174 +#: netbox/ipam/filtersets.py:1199 msgid "Primary IPv6 (ID)" msgstr "Primaire IPv6 (ID)" @@ -9529,435 +10054,408 @@ msgstr "Een CIDR-masker (bijv /24) is vereist." msgid "Address pattern" msgstr "Adrespatroon" -#: netbox/ipam/forms/bulk_edit.py:50 +#: netbox/ipam/forms/bulk_edit.py:53 msgid "Enforce unique space" msgstr "Zorg voor unieke ruimte" -#: netbox/ipam/forms/bulk_edit.py:88 +#: netbox/ipam/forms/bulk_edit.py:91 msgid "Is private" msgstr "Is privé" -#: netbox/ipam/forms/bulk_edit.py:109 netbox/ipam/forms/bulk_edit.py:138 -#: netbox/ipam/forms/bulk_edit.py:163 netbox/ipam/forms/bulk_import.py:89 -#: netbox/ipam/forms/bulk_import.py:109 netbox/ipam/forms/bulk_import.py:129 -#: netbox/ipam/forms/filtersets.py:110 netbox/ipam/forms/filtersets.py:125 -#: netbox/ipam/forms/filtersets.py:148 netbox/ipam/forms/model_forms.py:96 -#: netbox/ipam/forms/model_forms.py:109 netbox/ipam/forms/model_forms.py:131 -#: netbox/ipam/forms/model_forms.py:149 netbox/ipam/models/asns.py:31 -#: netbox/ipam/models/asns.py:103 netbox/ipam/models/ip.py:71 -#: netbox/ipam/models/ip.py:90 netbox/ipam/tables/asn.py:20 +#: netbox/ipam/forms/bulk_edit.py:112 netbox/ipam/forms/bulk_edit.py:141 +#: netbox/ipam/forms/bulk_edit.py:166 netbox/ipam/forms/bulk_import.py:92 +#: netbox/ipam/forms/bulk_import.py:112 netbox/ipam/forms/bulk_import.py:132 +#: netbox/ipam/forms/filtersets.py:112 netbox/ipam/forms/filtersets.py:127 +#: netbox/ipam/forms/filtersets.py:150 netbox/ipam/forms/model_forms.py:99 +#: netbox/ipam/forms/model_forms.py:112 netbox/ipam/forms/model_forms.py:135 +#: netbox/ipam/forms/model_forms.py:154 netbox/ipam/models/asns.py:31 +#: netbox/ipam/models/asns.py:100 netbox/ipam/models/ip.py:71 +#: netbox/ipam/models/ip.py:87 netbox/ipam/tables/asn.py:20 #: netbox/ipam/tables/asn.py:45 netbox/templates/ipam/aggregate.html:18 #: netbox/templates/ipam/asn.html:27 netbox/templates/ipam/asnrange.html:19 #: netbox/templates/ipam/rir.html:19 msgid "RIR" msgstr "RIR" -#: netbox/ipam/forms/bulk_edit.py:171 +#: netbox/ipam/forms/bulk_edit.py:174 msgid "Date added" msgstr "Datum toegevoegd" -#: netbox/ipam/forms/bulk_edit.py:229 netbox/ipam/forms/model_forms.py:619 -#: netbox/ipam/forms/model_forms.py:666 netbox/ipam/tables/ip.py:251 -#: netbox/templates/ipam/vlan_edit.html:37 +#: netbox/ipam/forms/bulk_edit.py:213 netbox/ipam/forms/model_forms.py:629 +#: netbox/ipam/forms/model_forms.py:676 netbox/ipam/tables/ip.py:201 +#: netbox/templates/ipam/vlan_edit.html:45 #: netbox/templates/ipam/vlangroup.html:27 msgid "VLAN Group" msgstr "VLAN-groep" -#: netbox/ipam/forms/bulk_edit.py:234 netbox/ipam/forms/bulk_import.py:185 -#: netbox/ipam/forms/filtersets.py:256 netbox/ipam/forms/model_forms.py:218 -#: netbox/ipam/models/vlans.py:250 netbox/ipam/tables/ip.py:255 -#: netbox/templates/ipam/prefix.html:60 netbox/templates/ipam/vlan.html:12 +#: netbox/ipam/forms/bulk_edit.py:218 netbox/ipam/forms/bulk_import.py:181 +#: netbox/ipam/forms/filtersets.py:259 netbox/ipam/forms/model_forms.py:217 +#: netbox/ipam/models/vlans.py:272 netbox/ipam/tables/ip.py:206 +#: netbox/templates/ipam/prefix.html:56 netbox/templates/ipam/vlan.html:12 #: netbox/templates/ipam/vlan/base.html:6 #: netbox/templates/ipam/vlan_edit.html:10 -#: netbox/templates/wireless/wirelesslan.html:30 +#: netbox/templates/wireless/wirelesslan.html:38 #: netbox/vpn/forms/bulk_import.py:304 netbox/vpn/forms/filtersets.py:284 -#: netbox/vpn/forms/model_forms.py:433 netbox/vpn/forms/model_forms.py:452 -#: netbox/wireless/forms/bulk_edit.py:55 -#: netbox/wireless/forms/bulk_import.py:48 -#: netbox/wireless/forms/model_forms.py:48 netbox/wireless/models.py:102 +#: netbox/vpn/forms/model_forms.py:436 netbox/vpn/forms/model_forms.py:455 +#: netbox/wireless/forms/bulk_edit.py:57 +#: netbox/wireless/forms/bulk_import.py:50 +#: netbox/wireless/forms/model_forms.py:50 netbox/wireless/models.py:102 msgid "VLAN" msgstr "VLAN" -#: netbox/ipam/forms/bulk_edit.py:245 +#: netbox/ipam/forms/bulk_edit.py:229 msgid "Prefix length" msgstr "Lengte van de prefix" -#: netbox/ipam/forms/bulk_edit.py:268 netbox/ipam/forms/filtersets.py:241 -#: netbox/templates/ipam/prefix.html:85 +#: netbox/ipam/forms/bulk_edit.py:252 netbox/ipam/forms/filtersets.py:244 +#: netbox/templates/ipam/prefix.html:81 msgid "Is a pool" msgstr "Is een pool" -#: netbox/ipam/forms/bulk_edit.py:273 netbox/ipam/forms/bulk_edit.py:318 -#: netbox/ipam/forms/filtersets.py:248 netbox/ipam/forms/filtersets.py:293 -#: netbox/ipam/models/ip.py:272 netbox/ipam/models/ip.py:539 +#: netbox/ipam/forms/bulk_edit.py:257 netbox/ipam/forms/bulk_edit.py:302 +#: netbox/ipam/forms/filtersets.py:251 netbox/ipam/forms/filtersets.py:296 +#: netbox/ipam/models/ip.py:256 netbox/ipam/models/ip.py:525 msgid "Treat as fully utilized" msgstr "Behandel als volledig gebruikt" -#: netbox/ipam/forms/bulk_edit.py:287 netbox/ipam/forms/filtersets.py:171 +#: netbox/ipam/forms/bulk_edit.py:271 netbox/ipam/forms/filtersets.py:173 +#: netbox/ipam/forms/model_forms.py:232 msgid "VLAN Assignment" msgstr "VLAN-toewijzing" -#: netbox/ipam/forms/bulk_edit.py:366 netbox/ipam/models/ip.py:772 +#: netbox/ipam/forms/bulk_edit.py:350 netbox/ipam/models/ip.py:772 msgid "DNS name" msgstr "DNS-naam" -#: netbox/ipam/forms/bulk_edit.py:387 netbox/ipam/forms/bulk_edit.py:534 -#: netbox/ipam/forms/bulk_import.py:418 netbox/ipam/forms/bulk_import.py:493 -#: netbox/ipam/forms/bulk_import.py:519 netbox/ipam/forms/filtersets.py:390 -#: netbox/ipam/forms/filtersets.py:530 netbox/templates/ipam/fhrpgroup.html:22 +#: netbox/ipam/forms/bulk_edit.py:371 netbox/ipam/forms/bulk_edit.py:562 +#: netbox/ipam/forms/bulk_import.py:417 netbox/ipam/forms/bulk_import.py:528 +#: netbox/ipam/forms/bulk_import.py:554 netbox/ipam/forms/filtersets.py:393 +#: netbox/ipam/forms/filtersets.py:582 netbox/templates/ipam/fhrpgroup.html:22 #: netbox/templates/ipam/inc/panels/fhrp_groups.html:24 #: netbox/templates/ipam/service.html:32 #: netbox/templates/ipam/servicetemplate.html:19 msgid "Protocol" msgstr "Protocol" -#: netbox/ipam/forms/bulk_edit.py:394 netbox/ipam/forms/filtersets.py:397 +#: netbox/ipam/forms/bulk_edit.py:378 netbox/ipam/forms/filtersets.py:400 #: netbox/ipam/tables/fhrp.py:22 netbox/templates/ipam/fhrpgroup.html:26 msgid "Group ID" msgstr "Groeps-ID" -#: netbox/ipam/forms/bulk_edit.py:399 netbox/ipam/forms/filtersets.py:402 -#: netbox/wireless/forms/bulk_edit.py:68 -#: netbox/wireless/forms/bulk_edit.py:115 -#: netbox/wireless/forms/bulk_import.py:62 -#: netbox/wireless/forms/bulk_import.py:65 -#: netbox/wireless/forms/bulk_import.py:104 -#: netbox/wireless/forms/bulk_import.py:107 -#: netbox/wireless/forms/filtersets.py:54 -#: netbox/wireless/forms/filtersets.py:88 +#: netbox/ipam/forms/bulk_edit.py:383 netbox/ipam/forms/filtersets.py:405 +#: netbox/wireless/forms/bulk_edit.py:70 +#: netbox/wireless/forms/bulk_edit.py:118 +#: netbox/wireless/forms/bulk_import.py:64 +#: netbox/wireless/forms/bulk_import.py:67 +#: netbox/wireless/forms/bulk_import.py:109 +#: netbox/wireless/forms/bulk_import.py:112 +#: netbox/wireless/forms/filtersets.py:57 +#: netbox/wireless/forms/filtersets.py:116 msgid "Authentication type" msgstr "Authenticatietype" -#: netbox/ipam/forms/bulk_edit.py:404 netbox/ipam/forms/filtersets.py:406 +#: netbox/ipam/forms/bulk_edit.py:388 netbox/ipam/forms/filtersets.py:409 msgid "Authentication key" msgstr "Verificatiesleutel" -#: netbox/ipam/forms/bulk_edit.py:421 netbox/ipam/forms/filtersets.py:383 -#: netbox/ipam/forms/model_forms.py:507 netbox/netbox/navigation/menu.py:386 +#: netbox/ipam/forms/bulk_edit.py:405 netbox/ipam/forms/filtersets.py:386 +#: netbox/ipam/forms/model_forms.py:517 netbox/netbox/navigation/menu.py:407 #: netbox/templates/ipam/fhrpgroup.html:49 #: netbox/templates/wireless/inc/authentication_attrs.html:5 -#: netbox/wireless/forms/bulk_edit.py:91 -#: netbox/wireless/forms/bulk_edit.py:149 -#: netbox/wireless/forms/filtersets.py:36 -#: netbox/wireless/forms/filtersets.py:76 -#: netbox/wireless/forms/model_forms.py:55 -#: netbox/wireless/forms/model_forms.py:171 +#: netbox/wireless/forms/bulk_edit.py:94 +#: netbox/wireless/forms/bulk_edit.py:152 +#: netbox/wireless/forms/filtersets.py:39 +#: netbox/wireless/forms/filtersets.py:104 +#: netbox/wireless/forms/model_forms.py:58 +#: netbox/wireless/forms/model_forms.py:174 msgid "Authentication" msgstr "Authentificatie" -#: netbox/ipam/forms/bulk_edit.py:436 netbox/ipam/forms/model_forms.py:608 -msgid "Scope type" -msgstr "Soort bereik" - -#: netbox/ipam/forms/bulk_edit.py:439 netbox/ipam/forms/bulk_edit.py:453 -#: netbox/ipam/forms/model_forms.py:611 netbox/ipam/forms/model_forms.py:621 -#: netbox/ipam/tables/vlans.py:71 netbox/templates/ipam/vlangroup.html:38 -msgid "Scope" -msgstr "Toepassingsgebied" - -#: netbox/ipam/forms/bulk_edit.py:446 netbox/ipam/models/vlans.py:60 +#: netbox/ipam/forms/bulk_edit.py:430 netbox/ipam/models/vlans.py:62 msgid "VLAN ID ranges" msgstr "VLAN-ID-bereiken" -#: netbox/ipam/forms/bulk_edit.py:525 +#: netbox/ipam/forms/bulk_edit.py:505 netbox/ipam/forms/bulk_import.py:485 +#: netbox/ipam/forms/filtersets.py:557 netbox/ipam/models/vlans.py:232 +#: netbox/ipam/tables/vlans.py:103 +msgid "Q-in-Q role" +msgstr "De rol van Q-in-Q" + +#: netbox/ipam/forms/bulk_edit.py:522 +msgid "Q-in-Q" +msgstr "Q-in-Q" + +#: netbox/ipam/forms/bulk_edit.py:523 msgid "Site & Group" msgstr "Site en groep" -#: netbox/ipam/forms/bulk_edit.py:539 netbox/ipam/forms/model_forms.py:692 -#: netbox/ipam/forms/model_forms.py:724 netbox/ipam/tables/services.py:19 +#: netbox/ipam/forms/bulk_edit.py:546 netbox/ipam/forms/bulk_import.py:515 +#: netbox/ipam/forms/model_forms.py:724 netbox/ipam/tables/vlans.py:256 +#: netbox/templates/ipam/vlantranslationrule.html:14 +#: netbox/vpn/forms/model_forms.py:322 netbox/vpn/forms/model_forms.py:359 +msgid "Policy" +msgstr "Beleid" + +#: netbox/ipam/forms/bulk_edit.py:567 netbox/ipam/forms/model_forms.py:742 +#: netbox/ipam/forms/model_forms.py:774 netbox/ipam/tables/services.py:19 #: netbox/ipam/tables/services.py:49 netbox/templates/ipam/service.html:36 #: netbox/templates/ipam/servicetemplate.html:23 msgid "Ports" msgstr "Poorten" -#: netbox/ipam/forms/bulk_import.py:48 +#: netbox/ipam/forms/bulk_import.py:51 msgid "Import route targets" msgstr "Routedoelen importeren" -#: netbox/ipam/forms/bulk_import.py:54 +#: netbox/ipam/forms/bulk_import.py:57 msgid "Export route targets" msgstr "Routedoelen exporteren" -#: netbox/ipam/forms/bulk_import.py:92 netbox/ipam/forms/bulk_import.py:112 -#: netbox/ipam/forms/bulk_import.py:132 +#: netbox/ipam/forms/bulk_import.py:95 netbox/ipam/forms/bulk_import.py:115 +#: netbox/ipam/forms/bulk_import.py:135 msgid "Assigned RIR" msgstr "Toegewezen RIR" -#: netbox/ipam/forms/bulk_import.py:182 +#: netbox/ipam/forms/bulk_import.py:178 msgid "VLAN's group (if any)" msgstr "VLAN-groep (indien aanwezig)" -#: netbox/ipam/forms/bulk_import.py:308 -msgid "Parent device of assigned interface (if any)" -msgstr "Ouderapparaat met toegewezen interface (indien aanwezig)" - -#: netbox/ipam/forms/bulk_import.py:311 netbox/ipam/forms/bulk_import.py:512 -#: netbox/ipam/forms/model_forms.py:718 -#: netbox/virtualization/filtersets.py:288 -#: netbox/virtualization/filtersets.py:327 -#: netbox/virtualization/forms/bulk_edit.py:200 -#: netbox/virtualization/forms/bulk_edit.py:326 -#: netbox/virtualization/forms/bulk_import.py:146 -#: netbox/virtualization/forms/bulk_import.py:207 -#: netbox/virtualization/forms/filtersets.py:212 -#: netbox/virtualization/forms/filtersets.py:248 -#: netbox/virtualization/forms/model_forms.py:288 -#: netbox/vpn/forms/bulk_import.py:93 netbox/vpn/forms/bulk_import.py:290 -msgid "Virtual machine" -msgstr "Virtuele machine" - -#: netbox/ipam/forms/bulk_import.py:315 -msgid "Parent VM of assigned interface (if any)" -msgstr "Bovenliggende VM van de toegewezen interface (indien aanwezig)" +#: netbox/ipam/forms/bulk_import.py:207 +#: netbox/virtualization/forms/bulk_import.py:80 +#: netbox/wireless/forms/bulk_import.py:83 +msgid "Scope ID" +msgstr "Bereik-ID" #: netbox/ipam/forms/bulk_import.py:325 -msgid "Is primary" -msgstr "Is primair" - -#: netbox/ipam/forms/bulk_import.py:326 msgid "Make this the primary IP for the assigned device" msgstr "Maak dit het primaire IP-adres voor het toegewezen apparaat" -#: netbox/ipam/forms/bulk_import.py:330 +#: netbox/ipam/forms/bulk_import.py:329 msgid "Is out-of-band" msgstr "Is buiten de band" -#: netbox/ipam/forms/bulk_import.py:331 +#: netbox/ipam/forms/bulk_import.py:330 msgid "Designate this as the out-of-band IP address for the assigned device" msgstr "" "Wijs dit aan als het out-of-band IP-adres voor het toegewezen apparaat" -#: netbox/ipam/forms/bulk_import.py:371 +#: netbox/ipam/forms/bulk_import.py:370 msgid "No device or virtual machine specified; cannot set as primary IP" msgstr "" "Geen apparaat of virtuele machine gespecificeerd; kan niet worden ingesteld " "als primair IP-adres" -#: netbox/ipam/forms/bulk_import.py:375 +#: netbox/ipam/forms/bulk_import.py:374 msgid "No device specified; cannot set as out-of-band IP" msgstr "" "Geen apparaat gespecificeerd; kan niet worden ingesteld als IP-adres buiten " "de band" -#: netbox/ipam/forms/bulk_import.py:379 +#: netbox/ipam/forms/bulk_import.py:378 msgid "Cannot set out-of-band IP for virtual machines" msgstr "Kan niet-band-IP niet instellen voor virtuele machines" -#: netbox/ipam/forms/bulk_import.py:383 +#: netbox/ipam/forms/bulk_import.py:382 msgid "No interface specified; cannot set as primary IP" msgstr "" "Geen interface gespecificeerd; kan niet worden ingesteld als primair IP-" "adres" -#: netbox/ipam/forms/bulk_import.py:387 +#: netbox/ipam/forms/bulk_import.py:386 msgid "No interface specified; cannot set as out-of-band IP" msgstr "" "Geen interface gespecificeerd; kan niet worden ingesteld als IP-adres buiten" " de band" -#: netbox/ipam/forms/bulk_import.py:422 +#: netbox/ipam/forms/bulk_import.py:421 msgid "Auth type" msgstr "Authenticatietype" -#: netbox/ipam/forms/bulk_import.py:437 -msgid "Scope type (app & model)" -msgstr "Soort bereik (app en model)" - -#: netbox/ipam/forms/bulk_import.py:464 +#: netbox/ipam/forms/bulk_import.py:463 msgid "Assigned VLAN group" msgstr "Toegewezen VLAN-groep" -#: netbox/ipam/forms/bulk_import.py:495 netbox/ipam/forms/bulk_import.py:521 +#: netbox/ipam/forms/bulk_import.py:495 +msgid "Service VLAN (for Q-in-Q/802.1ad customer VLANs)" +msgstr "Service-VLAN (voor Q-in-Q/802.1Ad-klant-VLAN's)" + +#: netbox/ipam/forms/bulk_import.py:518 netbox/ipam/models/vlans.py:343 +msgid "VLAN translation policy" +msgstr "VLAN-vertaalbeleid" + +#: netbox/ipam/forms/bulk_import.py:530 netbox/ipam/forms/bulk_import.py:556 msgid "IP protocol" msgstr "IP-protocol" -#: netbox/ipam/forms/bulk_import.py:509 +#: netbox/ipam/forms/bulk_import.py:544 msgid "Required if not assigned to a VM" msgstr "Vereist indien niet toegewezen aan een VM" -#: netbox/ipam/forms/bulk_import.py:516 +#: netbox/ipam/forms/bulk_import.py:551 msgid "Required if not assigned to a device" msgstr "Vereist indien niet toegewezen aan een apparaat" -#: netbox/ipam/forms/bulk_import.py:541 +#: netbox/ipam/forms/bulk_import.py:576 #, python-brace-format msgid "{ip} is not assigned to this device/VM." msgstr "{ip} is niet toegewezen aan dit apparaat/VM." -#: netbox/ipam/forms/filtersets.py:47 netbox/ipam/forms/model_forms.py:63 -#: netbox/netbox/navigation/menu.py:189 netbox/vpn/forms/model_forms.py:410 +#: netbox/ipam/forms/filtersets.py:49 netbox/ipam/forms/model_forms.py:66 +#: netbox/netbox/navigation/menu.py:195 netbox/vpn/forms/model_forms.py:413 msgid "Route Targets" msgstr "Routedoelen" -#: netbox/ipam/forms/filtersets.py:53 netbox/ipam/forms/model_forms.py:50 -#: netbox/vpn/forms/filtersets.py:224 netbox/vpn/forms/model_forms.py:397 +#: netbox/ipam/forms/filtersets.py:55 netbox/ipam/forms/model_forms.py:53 +#: netbox/vpn/forms/filtersets.py:224 netbox/vpn/forms/model_forms.py:400 msgid "Import targets" msgstr "Doelen importeren" -#: netbox/ipam/forms/filtersets.py:58 netbox/ipam/forms/model_forms.py:55 -#: netbox/vpn/forms/filtersets.py:229 netbox/vpn/forms/model_forms.py:402 +#: netbox/ipam/forms/filtersets.py:60 netbox/ipam/forms/model_forms.py:58 +#: netbox/vpn/forms/filtersets.py:229 netbox/vpn/forms/model_forms.py:405 msgid "Export targets" msgstr "Doelen exporteren" -#: netbox/ipam/forms/filtersets.py:73 +#: netbox/ipam/forms/filtersets.py:75 msgid "Imported by VRF" msgstr "Geïmporteerd door VRF" -#: netbox/ipam/forms/filtersets.py:78 +#: netbox/ipam/forms/filtersets.py:80 msgid "Exported by VRF" msgstr "Geëxporteerd door VRF" -#: netbox/ipam/forms/filtersets.py:87 netbox/ipam/tables/ip.py:89 +#: netbox/ipam/forms/filtersets.py:89 netbox/ipam/tables/ip.py:35 #: netbox/templates/ipam/rir.html:30 msgid "Private" msgstr "Privé" -#: netbox/ipam/forms/filtersets.py:105 netbox/ipam/forms/filtersets.py:191 -#: netbox/ipam/forms/filtersets.py:272 netbox/ipam/forms/filtersets.py:326 +#: netbox/ipam/forms/filtersets.py:107 netbox/ipam/forms/filtersets.py:193 +#: netbox/ipam/forms/filtersets.py:275 netbox/ipam/forms/filtersets.py:329 msgid "Address family" msgstr "Adres familie" -#: netbox/ipam/forms/filtersets.py:119 netbox/templates/ipam/asnrange.html:25 +#: netbox/ipam/forms/filtersets.py:121 netbox/templates/ipam/asnrange.html:25 msgid "Range" msgstr "Assortiment" -#: netbox/ipam/forms/filtersets.py:128 +#: netbox/ipam/forms/filtersets.py:130 msgid "Start" msgstr "Begin" -#: netbox/ipam/forms/filtersets.py:132 +#: netbox/ipam/forms/filtersets.py:134 msgid "End" msgstr "Einde" -#: netbox/ipam/forms/filtersets.py:186 +#: netbox/ipam/forms/filtersets.py:188 msgid "Search within" msgstr "Zoek binnen" -#: netbox/ipam/forms/filtersets.py:207 netbox/ipam/forms/filtersets.py:342 +#: netbox/ipam/forms/filtersets.py:209 netbox/ipam/forms/filtersets.py:345 msgid "Present in VRF" msgstr "Aanwezig in VRF" -#: netbox/ipam/forms/filtersets.py:311 +#: netbox/ipam/forms/filtersets.py:314 msgid "Device/VM" msgstr "Apparaat/VM" -#: netbox/ipam/forms/filtersets.py:321 +#: netbox/ipam/forms/filtersets.py:324 msgid "Parent Prefix" msgstr "Prefix voor ouders" -#: netbox/ipam/forms/filtersets.py:347 -msgid "Assigned Device" -msgstr "Toegewezen apparaat" - -#: netbox/ipam/forms/filtersets.py:352 -msgid "Assigned VM" -msgstr "Toegewezen VM" - -#: netbox/ipam/forms/filtersets.py:366 +#: netbox/ipam/forms/filtersets.py:369 msgid "Assigned to an interface" msgstr "Toegewezen aan een interface" -#: netbox/ipam/forms/filtersets.py:373 netbox/templates/ipam/ipaddress.html:51 +#: netbox/ipam/forms/filtersets.py:376 netbox/templates/ipam/ipaddress.html:51 msgid "DNS Name" msgstr "DNS-naam" -#: netbox/ipam/forms/filtersets.py:416 netbox/ipam/models/vlans.py:251 -#: netbox/ipam/tables/ip.py:176 netbox/ipam/tables/vlans.py:82 -#: netbox/ipam/views.py:971 netbox/netbox/navigation/menu.py:193 -#: netbox/netbox/navigation/menu.py:195 +#: netbox/ipam/forms/filtersets.py:419 netbox/ipam/models/vlans.py:273 +#: netbox/ipam/tables/ip.py:122 netbox/ipam/tables/vlans.py:51 +#: netbox/ipam/views.py:1036 netbox/netbox/navigation/menu.py:199 +#: netbox/netbox/navigation/menu.py:201 msgid "VLANs" msgstr "VLAN's" -#: netbox/ipam/forms/filtersets.py:457 +#: netbox/ipam/forms/filtersets.py:460 msgid "Contains VLAN ID" msgstr "Bevat VLAN-ID" -#: netbox/ipam/forms/filtersets.py:513 netbox/ipam/models/vlans.py:192 +#: netbox/ipam/forms/filtersets.py:494 netbox/ipam/models/vlans.py:363 +msgid "Local VLAN ID" +msgstr "Lokale VLAN-id" + +#: netbox/ipam/forms/filtersets.py:499 netbox/ipam/models/vlans.py:371 +msgid "Remote VLAN ID" +msgstr "VLAN-id op afstand" + +#: netbox/ipam/forms/filtersets.py:509 +msgid "Q-in-Q/802.1ad" +msgstr "Q-in-Q/802.1ad" + +#: netbox/ipam/forms/filtersets.py:554 netbox/ipam/models/vlans.py:191 #: netbox/templates/ipam/vlan.html:31 msgid "VLAN ID" msgstr "VLAN-ID" -#: netbox/ipam/forms/filtersets.py:556 netbox/ipam/forms/model_forms.py:324 -#: netbox/ipam/forms/model_forms.py:746 netbox/ipam/forms/model_forms.py:772 -#: netbox/ipam/tables/vlans.py:195 -#: netbox/templates/virtualization/virtualdisk.html:21 -#: netbox/templates/virtualization/virtualmachine.html:12 -#: netbox/templates/virtualization/vminterface.html:21 -#: netbox/templates/vpn/tunneltermination.html:25 -#: netbox/virtualization/forms/filtersets.py:197 -#: netbox/virtualization/forms/filtersets.py:242 -#: netbox/virtualization/forms/model_forms.py:220 -#: netbox/virtualization/tables/virtualmachines.py:135 -#: netbox/virtualization/tables/virtualmachines.py:190 -#: netbox/vpn/choices.py:53 netbox/vpn/forms/filtersets.py:293 -#: netbox/vpn/forms/model_forms.py:160 netbox/vpn/forms/model_forms.py:171 -#: netbox/vpn/forms/model_forms.py:273 netbox/vpn/forms/model_forms.py:454 -msgid "Virtual Machine" -msgstr "Virtuele machine" - -#: netbox/ipam/forms/model_forms.py:80 +#: netbox/ipam/forms/model_forms.py:83 #: netbox/templates/ipam/routetarget.html:10 msgid "Route Target" msgstr "Doel van de route" -#: netbox/ipam/forms/model_forms.py:114 netbox/ipam/tables/ip.py:117 +#: netbox/ipam/forms/model_forms.py:118 netbox/ipam/tables/ip.py:63 #: netbox/templates/ipam/aggregate.html:11 #: netbox/templates/ipam/prefix.html:38 msgid "Aggregate" msgstr "Aggregaat" -#: netbox/ipam/forms/model_forms.py:135 netbox/templates/ipam/asnrange.html:12 +#: netbox/ipam/forms/model_forms.py:140 netbox/templates/ipam/asnrange.html:12 msgid "ASN Range" msgstr "ASN-assortiment" -#: netbox/ipam/forms/model_forms.py:231 -msgid "Site/VLAN Assignment" -msgstr "" - -#: netbox/ipam/forms/model_forms.py:259 netbox/templates/ipam/iprange.html:10 +#: netbox/ipam/forms/model_forms.py:269 netbox/templates/ipam/iprange.html:10 msgid "IP Range" msgstr "IP-bereik" -#: netbox/ipam/forms/model_forms.py:295 netbox/ipam/forms/model_forms.py:325 -#: netbox/ipam/forms/model_forms.py:506 +#: netbox/ipam/forms/model_forms.py:305 netbox/ipam/forms/model_forms.py:335 +#: netbox/ipam/forms/model_forms.py:516 #: netbox/templates/ipam/fhrpgroup.html:19 msgid "FHRP Group" msgstr "FHRP-groep" -#: netbox/ipam/forms/model_forms.py:310 +#: netbox/ipam/forms/model_forms.py:320 msgid "Make this the primary IP for the device/VM" msgstr "Maak dit het primaire IP-adres voor het apparaat/VM" -#: netbox/ipam/forms/model_forms.py:314 +#: netbox/ipam/forms/model_forms.py:324 msgid "Make this the out-of-band IP for the device" msgstr "Maak dit het IP-adres buiten de band voor het apparaat" -#: netbox/ipam/forms/model_forms.py:329 +#: netbox/ipam/forms/model_forms.py:339 msgid "NAT IP (Inside)" msgstr "NAT IP (binnenin)" -#: netbox/ipam/forms/model_forms.py:391 +#: netbox/ipam/forms/model_forms.py:401 msgid "An IP address can only be assigned to a single object." msgstr "Een IP-adres kan slechts aan één object worden toegewezen." -#: netbox/ipam/forms/model_forms.py:398 +#: netbox/ipam/forms/model_forms.py:408 msgid "Cannot reassign primary IP address for the parent device/VM" msgstr "" "Kan het primaire IP-adres niet opnieuw toewijzen aan het ouderapparaat/de VM" -#: netbox/ipam/forms/model_forms.py:402 +#: netbox/ipam/forms/model_forms.py:412 msgid "Cannot reassign out-of-Band IP address for the parent device" msgstr "" "Kan het Out-of-Band IP-adres niet opnieuw toewijzen aan het ouderapparaat" -#: netbox/ipam/forms/model_forms.py:412 +#: netbox/ipam/forms/model_forms.py:422 msgid "" "Only IP addresses assigned to an interface can be designated as primary IPs." msgstr "" "Alleen IP-adressen die aan een interface zijn toegewezen, kunnen als " "primaire IP-adressen worden aangeduid." -#: netbox/ipam/forms/model_forms.py:420 +#: netbox/ipam/forms/model_forms.py:430 msgid "" "Only IP addresses assigned to a device interface can be designated as the " "out-of-band IP for a device." @@ -9965,24 +10463,29 @@ msgstr "" "Alleen IP-adressen die aan een apparaatinterface zijn toegewezen, kunnen " "worden aangeduid als het IP-adres buiten de band voor een apparaat." -#: netbox/ipam/forms/model_forms.py:508 +#: netbox/ipam/forms/model_forms.py:518 msgid "Virtual IP Address" msgstr "Virtueel IP-adres" -#: netbox/ipam/forms/model_forms.py:593 +#: netbox/ipam/forms/model_forms.py:603 msgid "Assignment already exists" msgstr "De opdracht bestaat al" -#: netbox/ipam/forms/model_forms.py:602 +#: netbox/ipam/forms/model_forms.py:612 #: netbox/templates/ipam/vlangroup.html:42 msgid "VLAN IDs" msgstr "VLAN-ID's" -#: netbox/ipam/forms/model_forms.py:620 +#: netbox/ipam/forms/model_forms.py:630 msgid "Child VLANs" msgstr "Kind-VLAN's" -#: netbox/ipam/forms/model_forms.py:697 netbox/ipam/forms/model_forms.py:729 +#: netbox/ipam/forms/model_forms.py:730 +#: netbox/templates/ipam/vlantranslationrule.html:11 +msgid "VLAN Translation Rule" +msgstr "VLAN-vertaalregel" + +#: netbox/ipam/forms/model_forms.py:747 netbox/ipam/forms/model_forms.py:779 msgid "" "Comma-separated list of one or more port numbers. A range may be specified " "using a hyphen." @@ -9990,33 +10493,28 @@ msgstr "" "Door komma's gescheiden lijst van een of meer poortnummers. Een bereik kan " "worden gespecificeerd met een koppelteken." -#: netbox/ipam/forms/model_forms.py:702 +#: netbox/ipam/forms/model_forms.py:752 #: netbox/templates/ipam/servicetemplate.html:12 msgid "Service Template" msgstr "Servicesjabloon" -#: netbox/ipam/forms/model_forms.py:749 +#: netbox/ipam/forms/model_forms.py:799 msgid "Port(s)" msgstr "Poort (en)" -#: netbox/ipam/forms/model_forms.py:750 netbox/ipam/forms/model_forms.py:778 -#: netbox/templates/ipam/service.html:21 -msgid "Service" -msgstr "Service" - -#: netbox/ipam/forms/model_forms.py:763 +#: netbox/ipam/forms/model_forms.py:813 msgid "Service template" msgstr "Servicesjabloon" -#: netbox/ipam/forms/model_forms.py:775 +#: netbox/ipam/forms/model_forms.py:825 msgid "From Template" msgstr "Van sjabloon" -#: netbox/ipam/forms/model_forms.py:776 +#: netbox/ipam/forms/model_forms.py:826 msgid "Custom" msgstr "Op maat" -#: netbox/ipam/forms/model_forms.py:806 +#: netbox/ipam/forms/model_forms.py:856 msgid "" "Must specify name, protocol, and port(s) if not using a service template." msgstr "" @@ -10035,29 +10533,29 @@ msgstr "ASN-assortiment" msgid "ASN ranges" msgstr "ASN-reeksen" -#: netbox/ipam/models/asns.py:72 +#: netbox/ipam/models/asns.py:69 #, python-brace-format msgid "Starting ASN ({start}) must be lower than ending ASN ({end})." msgstr "ASN starten ({start}) moet lager zijn dan het einde van ASN ({end})." -#: netbox/ipam/models/asns.py:104 +#: netbox/ipam/models/asns.py:101 msgid "Regional Internet Registry responsible for this AS number space" msgstr "" "Regionaal internetregister dat verantwoordelijk is voor deze AS-nummerruimte" -#: netbox/ipam/models/asns.py:109 +#: netbox/ipam/models/asns.py:106 msgid "16- or 32-bit autonomous system number" msgstr "16- of 32-bits autonoom systeemnummer" -#: netbox/ipam/models/fhrp.py:22 +#: netbox/ipam/models/fhrp.py:21 msgid "group ID" msgstr "groeps-ID" -#: netbox/ipam/models/fhrp.py:30 netbox/ipam/models/services.py:22 +#: netbox/ipam/models/fhrp.py:29 netbox/ipam/models/services.py:21 msgid "protocol" msgstr "protocol" -#: netbox/ipam/models/fhrp.py:38 netbox/wireless/models.py:28 +#: netbox/ipam/models/fhrp.py:38 netbox/wireless/models.py:29 msgid "authentication type" msgstr "authenticatietype" @@ -10073,11 +10571,11 @@ msgstr "FHRP-groep" msgid "FHRP groups" msgstr "FHRP-groepen" -#: netbox/ipam/models/fhrp.py:113 +#: netbox/ipam/models/fhrp.py:110 msgid "FHRP group assignment" msgstr "FHRP-groepsopdracht" -#: netbox/ipam/models/fhrp.py:114 +#: netbox/ipam/models/fhrp.py:111 msgid "FHRP group assignments" msgstr "FHRP-groepstoewijzingen" @@ -10089,36 +10587,36 @@ msgstr "privé" msgid "IP space managed by this RIR is considered private" msgstr "IP-ruimte die door deze RIR wordt beheerd, wordt als privé beschouwd" -#: netbox/ipam/models/ip.py:72 netbox/netbox/navigation/menu.py:182 +#: netbox/ipam/models/ip.py:72 netbox/netbox/navigation/menu.py:188 msgid "RIRs" msgstr "RIR's" -#: netbox/ipam/models/ip.py:84 +#: netbox/ipam/models/ip.py:81 msgid "IPv4 or IPv6 network" msgstr "IPv4- of IPv6-netwerk" -#: netbox/ipam/models/ip.py:91 +#: netbox/ipam/models/ip.py:88 msgid "Regional Internet Registry responsible for this IP space" msgstr "" "Regionaal internetregister dat verantwoordelijk is voor deze IP-ruimte" -#: netbox/ipam/models/ip.py:101 +#: netbox/ipam/models/ip.py:98 msgid "date added" msgstr "datum toegevoegd" -#: netbox/ipam/models/ip.py:115 +#: netbox/ipam/models/ip.py:112 msgid "aggregate" msgstr "totaal" -#: netbox/ipam/models/ip.py:116 +#: netbox/ipam/models/ip.py:113 msgid "aggregates" msgstr "aggregaten" -#: netbox/ipam/models/ip.py:132 +#: netbox/ipam/models/ip.py:126 msgid "Cannot create aggregate with /0 mask." msgstr "Kan geen aggregaat maken met een masker /0." -#: netbox/ipam/models/ip.py:144 +#: netbox/ipam/models/ip.py:138 #, python-brace-format msgid "" "Aggregates cannot overlap. {prefix} is already covered by an existing " @@ -10127,7 +10625,7 @@ msgstr "" "Aggregaten kunnen elkaar niet overlappen. {prefix} is al gedekt door een " "bestaand aggregaat ({aggregate})." -#: netbox/ipam/models/ip.py:158 +#: netbox/ipam/models/ip.py:152 #, python-brace-format msgid "" "Prefixes cannot overlap aggregates. {prefix} covers an existing aggregate " @@ -10136,128 +10634,123 @@ msgstr "" "Prefixen mogen aggregaten niet overlappen. {prefix} omvat een bestaand " "aggregaat ({aggregate})." -#: netbox/ipam/models/ip.py:200 netbox/ipam/models/ip.py:737 -#: netbox/vpn/models/tunnels.py:114 -msgid "role" -msgstr "functie" - -#: netbox/ipam/models/ip.py:201 +#: netbox/ipam/models/ip.py:195 msgid "roles" msgstr "rollen" -#: netbox/ipam/models/ip.py:217 netbox/ipam/models/ip.py:293 +#: netbox/ipam/models/ip.py:208 netbox/ipam/models/ip.py:277 msgid "prefix" msgstr "prefix" -#: netbox/ipam/models/ip.py:218 +#: netbox/ipam/models/ip.py:209 msgid "IPv4 or IPv6 network with mask" msgstr "IPv4- of IPv6-netwerk met masker" -#: netbox/ipam/models/ip.py:254 +#: netbox/ipam/models/ip.py:238 msgid "Operational status of this prefix" msgstr "Operationele status van deze prefix" -#: netbox/ipam/models/ip.py:262 +#: netbox/ipam/models/ip.py:246 msgid "The primary function of this prefix" msgstr "De primaire functie van deze prefix" -#: netbox/ipam/models/ip.py:265 +#: netbox/ipam/models/ip.py:249 msgid "is a pool" msgstr "is een pool" -#: netbox/ipam/models/ip.py:267 +#: netbox/ipam/models/ip.py:251 msgid "All IP addresses within this prefix are considered usable" msgstr "Alle IP-adressen binnen deze prefix worden als bruikbaar beschouwd" -#: netbox/ipam/models/ip.py:270 netbox/ipam/models/ip.py:537 +#: netbox/ipam/models/ip.py:254 netbox/ipam/models/ip.py:523 msgid "mark utilized" msgstr "merk gebruikt" -#: netbox/ipam/models/ip.py:294 +#: netbox/ipam/models/ip.py:278 msgid "prefixes" msgstr "prefixen" -#: netbox/ipam/models/ip.py:317 +#: netbox/ipam/models/ip.py:298 msgid "Cannot create prefix with /0 mask." msgstr "Kan geen prefix aanmaken met het masker /0." -#: netbox/ipam/models/ip.py:324 netbox/ipam/models/ip.py:874 +#: netbox/ipam/models/ip.py:305 netbox/ipam/models/ip.py:871 #, python-brace-format msgid "VRF {vrf}" msgstr "VRF {vrf}" -#: netbox/ipam/models/ip.py:324 netbox/ipam/models/ip.py:874 +#: netbox/ipam/models/ip.py:305 netbox/ipam/models/ip.py:871 msgid "global table" msgstr "globale tabel" -#: netbox/ipam/models/ip.py:326 +#: netbox/ipam/models/ip.py:307 #, python-brace-format msgid "Duplicate prefix found in {table}: {prefix}" msgstr "Duplicaat prefix gevonden in {table}: {prefix}" -#: netbox/ipam/models/ip.py:495 +#: netbox/ipam/models/ip.py:481 msgid "start address" msgstr "startadres" -#: netbox/ipam/models/ip.py:496 netbox/ipam/models/ip.py:500 -#: netbox/ipam/models/ip.py:712 +#: netbox/ipam/models/ip.py:482 netbox/ipam/models/ip.py:486 +#: netbox/ipam/models/ip.py:711 msgid "IPv4 or IPv6 address (with mask)" msgstr "IPv4- of IPv6-adres (met masker)" -#: netbox/ipam/models/ip.py:499 +#: netbox/ipam/models/ip.py:485 msgid "end address" msgstr "eindadres" -#: netbox/ipam/models/ip.py:526 +#: netbox/ipam/models/ip.py:512 msgid "Operational status of this range" msgstr "Operationele status van deze serie" -#: netbox/ipam/models/ip.py:534 +#: netbox/ipam/models/ip.py:520 msgid "The primary function of this range" msgstr "De primaire functie van dit assortiment" -#: netbox/ipam/models/ip.py:548 +#: netbox/ipam/models/ip.py:534 msgid "IP range" msgstr "IP-bereik" -#: netbox/ipam/models/ip.py:549 +#: netbox/ipam/models/ip.py:535 msgid "IP ranges" msgstr "IP-bereiken" -#: netbox/ipam/models/ip.py:565 +#: netbox/ipam/models/ip.py:548 msgid "Starting and ending IP address versions must match" msgstr "" "De versies van het begin- en eindpunt van het IP-adres moeten overeenkomen" -#: netbox/ipam/models/ip.py:571 +#: netbox/ipam/models/ip.py:554 msgid "Starting and ending IP address masks must match" msgstr "De IP-adresmaskers voor het begin en einde moeten overeenkomen" -#: netbox/ipam/models/ip.py:578 +#: netbox/ipam/models/ip.py:561 #, python-brace-format msgid "" "Ending address must be greater than the starting address ({start_address})" msgstr "Het eindadres moet groter zijn dan het beginadres ({start_address})" -#: netbox/ipam/models/ip.py:590 +#: netbox/ipam/models/ip.py:589 #, python-brace-format msgid "Defined addresses overlap with range {overlapping_range} in VRF {vrf}" msgstr "" "Gedefinieerde adressen overlappen met het bereik {overlapping_range} in VRF " "{vrf}" -#: netbox/ipam/models/ip.py:599 +#: netbox/ipam/models/ip.py:598 #, python-brace-format msgid "Defined range exceeds maximum supported size ({max_size})" msgstr "" "Het gedefinieerde bereik overschrijdt de maximale ondersteunde grootte " "({max_size})" -#: netbox/ipam/models/ip.py:711 netbox/tenancy/models/contacts.py:82 +#: netbox/ipam/models/ip.py:710 netbox/tenancy/models/contacts.py:77 msgid "address" msgstr "adres" -#: netbox/ipam/models/ip.py:734 +#: netbox/ipam/models/ip.py:733 msgid "The operational status of this IP" msgstr "De operationele status van dit IP-adres" @@ -10277,33 +10770,33 @@ msgstr "Het IP-adres waarvoor dit adres het „externe” IP-adres is" msgid "Hostname or FQDN (not case-sensitive)" msgstr "Hostnaam of FQDN (niet hoofdlettergevoelig)" -#: netbox/ipam/models/ip.py:789 netbox/ipam/models/services.py:94 +#: netbox/ipam/models/ip.py:789 netbox/ipam/models/services.py:90 msgid "IP addresses" msgstr "IP-adressen" -#: netbox/ipam/models/ip.py:845 +#: netbox/ipam/models/ip.py:842 msgid "Cannot create IP address with /0 mask." msgstr "Kan geen IP-adres aanmaken met een masker /0." -#: netbox/ipam/models/ip.py:851 +#: netbox/ipam/models/ip.py:848 #, python-brace-format msgid "{ip} is a network ID, which may not be assigned to an interface." msgstr "" "{ip} is een netwerk-ID, die mogelijk niet aan een interface is toegewezen." -#: netbox/ipam/models/ip.py:862 +#: netbox/ipam/models/ip.py:859 #, python-brace-format msgid "" "{ip} is a broadcast address, which may not be assigned to an interface." msgstr "" "{ip} is een uitzendadres dat mogelijk niet aan een interface is toegewezen." -#: netbox/ipam/models/ip.py:876 +#: netbox/ipam/models/ip.py:873 #, python-brace-format msgid "Duplicate IP address found in {table}: {ipaddress}" msgstr "Duplicaat IP-adres gevonden in {table}: {ipaddress}" -#: netbox/ipam/models/ip.py:897 +#: netbox/ipam/models/ip.py:896 msgid "" "Cannot reassign IP address while it is designated as the primary IP for the " "parent object" @@ -10311,74 +10804,74 @@ msgstr "" "Kan het IP-adres niet opnieuw toewijzen terwijl dit is aangewezen als het " "primaire IP-adres voor het bovenliggende object" -#: netbox/ipam/models/ip.py:903 +#: netbox/ipam/models/ip.py:902 msgid "Only IPv6 addresses can be assigned SLAAC status" msgstr "Alleen IPv6-adressen kunnen een SLAAC-status krijgen" -#: netbox/ipam/models/services.py:33 +#: netbox/ipam/models/services.py:32 msgid "port numbers" msgstr "poortnummers" -#: netbox/ipam/models/services.py:59 +#: netbox/ipam/models/services.py:58 msgid "service template" msgstr "servicesjabloon" -#: netbox/ipam/models/services.py:60 +#: netbox/ipam/models/services.py:59 msgid "service templates" msgstr "servicesjablonen" -#: netbox/ipam/models/services.py:95 +#: netbox/ipam/models/services.py:91 msgid "The specific IP addresses (if any) to which this service is bound" msgstr "" "De specifieke IP-adressen (indien aanwezig) waaraan deze service is " "gekoppeld" -#: netbox/ipam/models/services.py:102 +#: netbox/ipam/models/services.py:98 msgid "service" msgstr "service" -#: netbox/ipam/models/services.py:103 +#: netbox/ipam/models/services.py:99 msgid "services" msgstr "diensten" -#: netbox/ipam/models/services.py:117 +#: netbox/ipam/models/services.py:110 msgid "" "A service cannot be associated with both a device and a virtual machine." msgstr "" "Een service kan niet worden gekoppeld aan zowel een apparaat als een " "virtuele machine." -#: netbox/ipam/models/services.py:119 +#: netbox/ipam/models/services.py:112 msgid "" "A service must be associated with either a device or a virtual machine." msgstr "" "Een service moet gekoppeld zijn aan een apparaat of een virtuele machine." -#: netbox/ipam/models/vlans.py:85 +#: netbox/ipam/models/vlans.py:87 msgid "VLAN groups" msgstr "VLAN-groepen" -#: netbox/ipam/models/vlans.py:95 +#: netbox/ipam/models/vlans.py:94 msgid "Cannot set scope_type without scope_id." msgstr "Kan scope_type niet instellen zonder scope_id." -#: netbox/ipam/models/vlans.py:97 +#: netbox/ipam/models/vlans.py:96 msgid "Cannot set scope_id without scope_type." msgstr "Kan scope_id niet instellen zonder scope_type." -#: netbox/ipam/models/vlans.py:105 +#: netbox/ipam/models/vlans.py:104 #, python-brace-format msgid "Starting VLAN ID in range ({value}) cannot be less than {minimum}" msgstr "" "VLAN-id starten binnen bereik ({value}) kan niet minder zijn dan {minimum}" -#: netbox/ipam/models/vlans.py:111 +#: netbox/ipam/models/vlans.py:110 #, python-brace-format msgid "Ending VLAN ID in range ({value}) cannot exceed {maximum}" msgstr "" "VLAN-id binnen bereik beëindigen ({value}) kan niet hoger zijn dan {maximum}" -#: netbox/ipam/models/vlans.py:118 +#: netbox/ipam/models/vlans.py:117 #, python-brace-format msgid "" "Ending VLAN ID in range must be greater than or equal to the starting VLAN " @@ -10387,31 +10880,36 @@ msgstr "" "Het einde van de VLAN-id binnen het bereik moet groter zijn dan of gelijk " "zijn aan de start-VLAN-id ({range})" -#: netbox/ipam/models/vlans.py:124 +#: netbox/ipam/models/vlans.py:123 msgid "Ranges cannot overlap." msgstr "Bereiken kunnen elkaar niet overlappen." -#: netbox/ipam/models/vlans.py:181 +#: netbox/ipam/models/vlans.py:180 msgid "The specific site to which this VLAN is assigned (if any)" msgstr "De specifieke site waaraan dit VLAN is toegewezen (indien aanwezig)" -#: netbox/ipam/models/vlans.py:189 +#: netbox/ipam/models/vlans.py:188 msgid "VLAN group (optional)" msgstr "VLAN-groep (optioneel)" -#: netbox/ipam/models/vlans.py:197 +#: netbox/ipam/models/vlans.py:196 netbox/ipam/models/vlans.py:368 +#: netbox/ipam/models/vlans.py:376 msgid "Numeric VLAN ID (1-4094)" msgstr "Numerieke VLAN-id (1-4094)" -#: netbox/ipam/models/vlans.py:215 +#: netbox/ipam/models/vlans.py:214 msgid "Operational status of this VLAN" msgstr "Operationele status van dit VLAN" -#: netbox/ipam/models/vlans.py:223 +#: netbox/ipam/models/vlans.py:222 msgid "The primary function of this VLAN" msgstr "De primaire functie van dit VLAN" -#: netbox/ipam/models/vlans.py:266 +#: netbox/ipam/models/vlans.py:237 +msgid "Customer/service VLAN designation (for Q-in-Q/IEEE 802.1ad)" +msgstr "VLAN-aanduiding voor klant/service (voor Q-in-Q/IEEE 802.1ad)" + +#: netbox/ipam/models/vlans.py:285 #, python-brace-format msgid "" "VLAN is assigned to group {group} (scope: {scope}); cannot also assign to " @@ -10420,42 +10918,59 @@ msgstr "" "VLAN is toegewezen aan de groep {group} (toepassingsgebied: {scope}); kan " "niet ook aan de site worden toegewezen {site}." -#: netbox/ipam/models/vlans.py:275 +#: netbox/ipam/models/vlans.py:294 #, python-brace-format msgid "VID must be in ranges {ranges} for VLANs in group {group}" msgstr "VID moet binnen bereik zijn {ranges} voor VLAN's in groep {group}" -#: netbox/ipam/models/vrfs.py:30 +#: netbox/ipam/models/vlans.py:301 +msgid "Only Q-in-Q customer VLANs maybe assigned to a service VLAN." +msgstr "" +"Alleen Q-in-Q-klant-VLAN's kunnen worden toegewezen aan een service-VLAN." + +#: netbox/ipam/models/vlans.py:307 +msgid "A Q-in-Q customer VLAN must be assigned to a service VLAN." +msgstr "Een Q-in-Q-klant-VLAN moet worden toegewezen aan een service-VLAN." + +#: netbox/ipam/models/vlans.py:344 +msgid "VLAN translation policies" +msgstr "VLAN-vertaalbeleid" + +#: netbox/ipam/models/vlans.py:385 +msgid "VLAN translation rule" +msgstr "VLAN-vertaalregel" + +#: netbox/ipam/models/vrfs.py:29 msgid "route distinguisher" msgstr "route-onderscheider" -#: netbox/ipam/models/vrfs.py:31 +#: netbox/ipam/models/vrfs.py:30 msgid "Unique route distinguisher (as defined in RFC 4364)" msgstr "Unieke routedifferentiator (zoals gedefinieerd in RFC 4364)" -#: netbox/ipam/models/vrfs.py:42 +#: netbox/ipam/models/vrfs.py:41 msgid "enforce unique space" msgstr "unieke ruimte afdwingen" -#: netbox/ipam/models/vrfs.py:43 +#: netbox/ipam/models/vrfs.py:42 msgid "Prevent duplicate prefixes/IP addresses within this VRF" msgstr "Voorkom dubbele prefixen/IP-adressen in deze VRF" -#: netbox/ipam/models/vrfs.py:63 netbox/netbox/navigation/menu.py:186 -#: netbox/netbox/navigation/menu.py:188 +#: netbox/ipam/models/vrfs.py:62 netbox/netbox/navigation/menu.py:192 +#: netbox/netbox/navigation/menu.py:194 msgid "VRFs" msgstr "VRF's" -#: netbox/ipam/models/vrfs.py:82 +#: netbox/ipam/models/vrfs.py:78 msgid "Route target value (formatted in accordance with RFC 4360)" msgstr "" "Doelwaarde van de route (geformatteerd in overeenstemming met RFC 4360)" -#: netbox/ipam/models/vrfs.py:94 +#: netbox/ipam/models/vrfs.py:91 msgid "route target" msgstr "doel van de route" -#: netbox/ipam/models/vrfs.py:95 +#: netbox/ipam/models/vrfs.py:92 msgid "route targets" msgstr "routedoelen" @@ -10471,84 +10986,101 @@ msgstr "Aantal sites" msgid "Provider Count" msgstr "Aantal providers" -#: netbox/ipam/tables/ip.py:95 netbox/netbox/navigation/menu.py:179 -#: netbox/netbox/navigation/menu.py:181 +#: netbox/ipam/tables/ip.py:41 netbox/netbox/navigation/menu.py:185 +#: netbox/netbox/navigation/menu.py:187 msgid "Aggregates" msgstr "Aggregaten" -#: netbox/ipam/tables/ip.py:125 +#: netbox/ipam/tables/ip.py:71 msgid "Added" msgstr "Toegevoegd" -#: netbox/ipam/tables/ip.py:128 netbox/ipam/tables/ip.py:166 -#: netbox/ipam/tables/vlans.py:142 netbox/ipam/views.py:346 -#: netbox/netbox/navigation/menu.py:165 netbox/netbox/navigation/menu.py:167 -#: netbox/templates/ipam/vlan.html:84 +#: netbox/ipam/tables/ip.py:74 netbox/ipam/tables/ip.py:112 +#: netbox/ipam/tables/vlans.py:118 netbox/ipam/views.py:373 +#: netbox/netbox/navigation/menu.py:171 netbox/netbox/navigation/menu.py:173 +#: netbox/templates/ipam/vlan.html:100 msgid "Prefixes" msgstr "Prefixen" -#: netbox/ipam/tables/ip.py:131 netbox/ipam/tables/ip.py:270 -#: netbox/ipam/tables/ip.py:324 netbox/ipam/tables/vlans.py:86 +#: netbox/ipam/tables/ip.py:77 netbox/ipam/tables/ip.py:221 +#: netbox/ipam/tables/ip.py:276 netbox/ipam/tables/vlans.py:55 #: netbox/templates/dcim/device.html:260 #: netbox/templates/ipam/aggregate.html:24 -#: netbox/templates/ipam/iprange.html:29 netbox/templates/ipam/prefix.html:106 +#: netbox/templates/ipam/iprange.html:29 netbox/templates/ipam/prefix.html:102 msgid "Utilization" msgstr "Gebruik" -#: netbox/ipam/tables/ip.py:171 netbox/netbox/navigation/menu.py:161 +#: netbox/ipam/tables/ip.py:117 netbox/netbox/navigation/menu.py:167 msgid "IP Ranges" msgstr "IP-bereiken" -#: netbox/ipam/tables/ip.py:221 +#: netbox/ipam/tables/ip.py:167 msgid "Prefix (Flat)" msgstr "Prefix (plat)" -#: netbox/ipam/tables/ip.py:225 +#: netbox/ipam/tables/ip.py:171 msgid "Depth" msgstr "Diepte" -#: netbox/ipam/tables/ip.py:262 +#: netbox/ipam/tables/ip.py:191 netbox/ipam/tables/vlans.py:37 +#: netbox/virtualization/tables/clusters.py:77 +#: netbox/wireless/tables/wirelesslan.py:55 +msgid "Scope Type" +msgstr "Soort toepassingsgebied" + +#: netbox/ipam/tables/ip.py:213 msgid "Pool" msgstr "Pool" -#: netbox/ipam/tables/ip.py:266 netbox/ipam/tables/ip.py:320 +#: netbox/ipam/tables/ip.py:217 netbox/ipam/tables/ip.py:272 msgid "Marked Utilized" msgstr "Gemarkeerd als gebruikt" -#: netbox/ipam/tables/ip.py:304 +#: netbox/ipam/tables/ip.py:256 msgid "Start address" msgstr "Startadres" -#: netbox/ipam/tables/ip.py:383 +#: netbox/ipam/tables/ip.py:335 msgid "NAT (Inside)" msgstr "NAT (binnenkant)" -#: netbox/ipam/tables/ip.py:388 +#: netbox/ipam/tables/ip.py:340 msgid "NAT (Outside)" msgstr "NAT (buiten)" -#: netbox/ipam/tables/ip.py:393 +#: netbox/ipam/tables/ip.py:345 msgid "Assigned" msgstr "Toegewezen" -#: netbox/ipam/tables/ip.py:429 netbox/templates/vpn/l2vpntermination.html:16 +#: netbox/ipam/tables/ip.py:381 netbox/templates/vpn/l2vpntermination.html:16 #: netbox/vpn/forms/filtersets.py:240 msgid "Assigned Object" msgstr "Toegewezen object" -#: netbox/ipam/tables/vlans.py:68 -msgid "Scope Type" -msgstr "Soort toepassingsgebied" - -#: netbox/ipam/tables/vlans.py:76 +#: netbox/ipam/tables/vlans.py:45 msgid "VID Ranges" msgstr "VID-reeksen" -#: netbox/ipam/tables/vlans.py:111 netbox/ipam/tables/vlans.py:214 +#: netbox/ipam/tables/vlans.py:80 netbox/ipam/tables/vlans.py:190 #: netbox/templates/dcim/inc/interface_vlans_table.html:4 msgid "VID" msgstr "VID" +#: netbox/ipam/tables/vlans.py:237 +#: netbox/templates/ipam/vlantranslationpolicy.html:22 +msgid "Rules" +msgstr "Regels" + +#: netbox/ipam/tables/vlans.py:260 +#: netbox/templates/ipam/vlantranslationrule.html:18 +msgid "Local VID" +msgstr "Lokale VID" + +#: netbox/ipam/tables/vlans.py:264 +#: netbox/templates/ipam/vlantranslationrule.html:22 +msgid "Remote VID" +msgstr "VID op afstand" + #: netbox/ipam/tables/vrfs.py:30 msgid "RD" msgstr "RD" @@ -10591,23 +11123,23 @@ msgstr "" "Alleen alfanumerieke tekens, sterretjes, koppeltekens, punten en " "onderstrepingstekens zijn toegestaan in DNS-namen" -#: netbox/ipam/views.py:533 +#: netbox/ipam/views.py:570 msgid "Child Prefixes" msgstr "Prefixen voor kinderen" -#: netbox/ipam/views.py:569 +#: netbox/ipam/views.py:606 msgid "Child Ranges" msgstr "Ranges voor kinderen" -#: netbox/ipam/views.py:898 +#: netbox/ipam/views.py:958 msgid "Related IPs" msgstr "Gerelateerde IP's" -#: netbox/ipam/views.py:1127 +#: netbox/ipam/views.py:1315 msgid "Device Interfaces" msgstr "Interfaces voor apparaten" -#: netbox/ipam/views.py:1145 +#: netbox/ipam/views.py:1333 msgid "VM Interfaces" msgstr "VM-interfaces" @@ -10658,90 +11190,112 @@ msgstr "{class_name} moet get_view_name () implementeren" msgid "Invalid permission {permission} for model {model}" msgstr "Ongeldige toestemming {permission} voor model {model}" -#: netbox/netbox/choices.py:49 +#: netbox/netbox/choices.py:51 msgid "Dark Red" msgstr "Donkerrood" -#: netbox/netbox/choices.py:52 +#: netbox/netbox/choices.py:54 msgid "Rose" msgstr "Roos" -#: netbox/netbox/choices.py:53 +#: netbox/netbox/choices.py:55 msgid "Fuchsia" msgstr "Fuchsia" -#: netbox/netbox/choices.py:55 +#: netbox/netbox/choices.py:57 msgid "Dark Purple" msgstr "Donkerpaars" -#: netbox/netbox/choices.py:58 +#: netbox/netbox/choices.py:60 msgid "Light Blue" msgstr "Lichtblauw" -#: netbox/netbox/choices.py:61 +#: netbox/netbox/choices.py:63 msgid "Aqua" msgstr "Aqua" -#: netbox/netbox/choices.py:62 +#: netbox/netbox/choices.py:64 msgid "Dark Green" msgstr "Donkergroen" -#: netbox/netbox/choices.py:64 +#: netbox/netbox/choices.py:66 msgid "Light Green" msgstr "Lichtgroen" -#: netbox/netbox/choices.py:65 +#: netbox/netbox/choices.py:67 msgid "Lime" msgstr "Limoen" -#: netbox/netbox/choices.py:67 +#: netbox/netbox/choices.py:69 msgid "Amber" msgstr "Amber" -#: netbox/netbox/choices.py:69 +#: netbox/netbox/choices.py:71 msgid "Dark Orange" msgstr "Donkeroranje" -#: netbox/netbox/choices.py:70 +#: netbox/netbox/choices.py:72 msgid "Brown" msgstr "Bruin" -#: netbox/netbox/choices.py:71 +#: netbox/netbox/choices.py:73 msgid "Light Grey" msgstr "Lichtgrijs" -#: netbox/netbox/choices.py:72 +#: netbox/netbox/choices.py:74 msgid "Grey" msgstr "Grijs" -#: netbox/netbox/choices.py:73 +#: netbox/netbox/choices.py:75 msgid "Dark Grey" msgstr "Donkergrijs" -#: netbox/netbox/choices.py:128 +#: netbox/netbox/choices.py:103 netbox/templates/extras/script_result.html:56 +msgid "Default" +msgstr "Standaard" + +#: netbox/netbox/choices.py:130 msgid "Direct" msgstr "Rechtstreeks" -#: netbox/netbox/choices.py:129 +#: netbox/netbox/choices.py:131 msgid "Upload" msgstr "Uploaden" -#: netbox/netbox/choices.py:141 netbox/netbox/choices.py:155 +#: netbox/netbox/choices.py:143 netbox/netbox/choices.py:157 msgid "Auto-detect" msgstr "Automatisch detecteren" -#: netbox/netbox/choices.py:156 +#: netbox/netbox/choices.py:158 msgid "Comma" msgstr "Komma" -#: netbox/netbox/choices.py:157 +#: netbox/netbox/choices.py:159 msgid "Semicolon" msgstr "Puntkomma" -#: netbox/netbox/choices.py:158 +#: netbox/netbox/choices.py:160 msgid "Tab" msgstr "Tab" +#: netbox/netbox/choices.py:193 netbox/templates/dcim/device.html:327 +#: netbox/templates/dcim/rack.html:107 +msgid "Kilograms" +msgstr "Kilogrammen" + +#: netbox/netbox/choices.py:194 +msgid "Grams" +msgstr "Gram" + +#: netbox/netbox/choices.py:195 netbox/templates/dcim/device.html:328 +#: netbox/templates/dcim/rack.html:108 +msgid "Pounds" +msgstr "Ponden" + +#: netbox/netbox/choices.py:196 +msgid "Ounces" +msgstr "Ons" + #: netbox/netbox/config/__init__.py:67 #, python-brace-format msgid "Invalid configuration parameter: {item}" @@ -11033,6 +11587,26 @@ msgstr "datum gesynchroniseerd" msgid "{class_name} must implement a sync_data() method." msgstr "{class_name} moet een sync_data () -methode implementeren." +#: netbox/netbox/models/mixins.py:22 +msgid "weight unit" +msgstr "gewichtseenheid" + +#: netbox/netbox/models/mixins.py:52 +msgid "Must specify a unit when setting a weight" +msgstr "Moet een eenheid specificeren bij het instellen van een gewicht" + +#: netbox/netbox/models/mixins.py:57 +msgid "distance" +msgstr "afstand" + +#: netbox/netbox/models/mixins.py:64 +msgid "distance unit" +msgstr "afstandseenheid" + +#: netbox/netbox/models/mixins.py:99 +msgid "Must specify a unit when setting a distance" +msgstr "Moet een eenheid specificeren bij het instellen van een afstand" + #: netbox/netbox/navigation/menu.py:11 msgid "Organization" msgstr "Organisatie" @@ -11066,10 +11640,6 @@ msgstr "Rack rollen" msgid "Elevations" msgstr "Verhogingen" -#: netbox/netbox/navigation/menu.py:60 netbox/netbox/navigation/menu.py:62 -msgid "Rack Types" -msgstr "Soorten rekken" - #: netbox/netbox/navigation/menu.py:76 msgid "Modules" msgstr "Modules" @@ -11092,175 +11662,200 @@ msgstr "Onderdelen van het apparaat" msgid "Inventory Item Roles" msgstr "Rollen van inventarisitems" -#: netbox/netbox/navigation/menu.py:111 netbox/netbox/navigation/menu.py:115 +#: netbox/netbox/navigation/menu.py:110 +#: netbox/templates/dcim/interface.html:413 +#: netbox/templates/virtualization/vminterface.html:118 +msgid "MAC Addresses" +msgstr "MAC-adressen" + +#: netbox/netbox/navigation/menu.py:117 netbox/netbox/navigation/menu.py:121 +#: netbox/templates/dcim/interface.html:182 msgid "Connections" msgstr "Verbindingen" -#: netbox/netbox/navigation/menu.py:117 +#: netbox/netbox/navigation/menu.py:123 msgid "Cables" msgstr "Kabels" -#: netbox/netbox/navigation/menu.py:118 +#: netbox/netbox/navigation/menu.py:124 msgid "Wireless Links" msgstr "Draadloze links" -#: netbox/netbox/navigation/menu.py:121 +#: netbox/netbox/navigation/menu.py:127 msgid "Interface Connections" msgstr "Interface-aansluitingen" -#: netbox/netbox/navigation/menu.py:126 +#: netbox/netbox/navigation/menu.py:132 msgid "Console Connections" msgstr "Console-aansluitingen" -#: netbox/netbox/navigation/menu.py:131 +#: netbox/netbox/navigation/menu.py:137 msgid "Power Connections" msgstr "Stroomaansluitingen" -#: netbox/netbox/navigation/menu.py:147 +#: netbox/netbox/navigation/menu.py:153 msgid "Wireless LAN Groups" msgstr "Draadloze LAN-groepen" -#: netbox/netbox/navigation/menu.py:168 +#: netbox/netbox/navigation/menu.py:174 msgid "Prefix & VLAN Roles" msgstr "Prefix- en VLAN-rollen" -#: netbox/netbox/navigation/menu.py:174 +#: netbox/netbox/navigation/menu.py:180 msgid "ASN Ranges" msgstr "ASN-reeksen" -#: netbox/netbox/navigation/menu.py:196 +#: netbox/netbox/navigation/menu.py:202 msgid "VLAN Groups" msgstr "VLAN-groepen" #: netbox/netbox/navigation/menu.py:203 +msgid "VLAN Translation Policies" +msgstr "VLAN-vertaalbeleid" + +#: netbox/netbox/navigation/menu.py:204 +#: netbox/templates/ipam/vlantranslationpolicy.html:46 +msgid "VLAN Translation Rules" +msgstr "Regels voor VLAN-vertaling" + +#: netbox/netbox/navigation/menu.py:211 msgid "Service Templates" msgstr "Servicesjablonen" -#: netbox/netbox/navigation/menu.py:204 netbox/templates/dcim/device.html:302 +#: netbox/netbox/navigation/menu.py:212 netbox/templates/dcim/device.html:302 #: netbox/templates/ipam/ipaddress.html:118 #: netbox/templates/virtualization/virtualmachine.html:154 msgid "Services" msgstr "Diensten" -#: netbox/netbox/navigation/menu.py:211 +#: netbox/netbox/navigation/menu.py:219 msgid "VPN" msgstr "VPN" -#: netbox/netbox/navigation/menu.py:215 netbox/netbox/navigation/menu.py:217 +#: netbox/netbox/navigation/menu.py:223 netbox/netbox/navigation/menu.py:225 #: netbox/vpn/tables/tunnels.py:24 msgid "Tunnels" msgstr "Tunnels" -#: netbox/netbox/navigation/menu.py:218 +#: netbox/netbox/navigation/menu.py:226 #: netbox/templates/vpn/tunnelgroup.html:8 msgid "Tunnel Groups" msgstr "Tunnelgroepen" -#: netbox/netbox/navigation/menu.py:219 +#: netbox/netbox/navigation/menu.py:227 msgid "Tunnel Terminations" msgstr "Tunnelafsluitingen" -#: netbox/netbox/navigation/menu.py:223 netbox/netbox/navigation/menu.py:225 +#: netbox/netbox/navigation/menu.py:231 netbox/netbox/navigation/menu.py:233 #: netbox/vpn/models/l2vpn.py:64 msgid "L2VPNs" msgstr "L2VPN's" -#: netbox/netbox/navigation/menu.py:226 netbox/templates/vpn/l2vpn.html:56 -#: netbox/templates/vpn/tunnel.html:72 netbox/vpn/tables/tunnels.py:58 -msgid "Terminations" -msgstr "Beëindigingen" - -#: netbox/netbox/navigation/menu.py:232 +#: netbox/netbox/navigation/menu.py:240 msgid "IKE Proposals" msgstr "IKE-voorstellen" -#: netbox/netbox/navigation/menu.py:233 +#: netbox/netbox/navigation/menu.py:241 #: netbox/templates/vpn/ikeproposal.html:41 msgid "IKE Policies" msgstr "IKE-beleid" -#: netbox/netbox/navigation/menu.py:234 +#: netbox/netbox/navigation/menu.py:242 msgid "IPSec Proposals" msgstr "IPsec-voorstellen" -#: netbox/netbox/navigation/menu.py:235 +#: netbox/netbox/navigation/menu.py:243 #: netbox/templates/vpn/ipsecproposal.html:37 msgid "IPSec Policies" msgstr "IPsec-beleid" -#: netbox/netbox/navigation/menu.py:236 netbox/templates/vpn/ikepolicy.html:38 +#: netbox/netbox/navigation/menu.py:244 netbox/templates/vpn/ikepolicy.html:38 #: netbox/templates/vpn/ipsecpolicy.html:25 msgid "IPSec Profiles" msgstr "IPsec-profielen" -#: netbox/netbox/navigation/menu.py:251 +#: netbox/netbox/navigation/menu.py:259 #: netbox/templates/virtualization/virtualmachine.html:174 #: netbox/templates/virtualization/virtualmachine/base.html:32 #: netbox/templates/virtualization/virtualmachine_list.html:21 -#: netbox/virtualization/tables/virtualmachines.py:104 -#: netbox/virtualization/views.py:386 +#: netbox/virtualization/tables/virtualmachines.py:74 +#: netbox/virtualization/views.py:403 msgid "Virtual Disks" msgstr "Virtuele schijven" -#: netbox/netbox/navigation/menu.py:258 +#: netbox/netbox/navigation/menu.py:266 msgid "Cluster Types" msgstr "Clustertypen" -#: netbox/netbox/navigation/menu.py:259 +#: netbox/netbox/navigation/menu.py:267 msgid "Cluster Groups" msgstr "Clustergroepen" -#: netbox/netbox/navigation/menu.py:273 +#: netbox/netbox/navigation/menu.py:281 msgid "Circuit Types" msgstr "Circuittypes" -#: netbox/netbox/navigation/menu.py:274 -msgid "Circuit Groups" -msgstr "Circuitgroepen" - -#: netbox/netbox/navigation/menu.py:275 -#: netbox/templates/circuits/circuit.html:66 -msgid "Group Assignments" -msgstr "Groepstoewijzingen" - -#: netbox/netbox/navigation/menu.py:276 +#: netbox/netbox/navigation/menu.py:282 msgid "Circuit Terminations" msgstr "Circuitafsluitingen" -#: netbox/netbox/navigation/menu.py:280 netbox/netbox/navigation/menu.py:282 +#: netbox/netbox/navigation/menu.py:286 netbox/netbox/navigation/menu.py:288 +#: netbox/templates/circuits/providernetwork.html:55 +msgid "Virtual Circuits" +msgstr "Virtuele circuits" + +#: netbox/netbox/navigation/menu.py:289 +msgid "Virtual Circuit Types" +msgstr "Typen virtuele circuits" + +#: netbox/netbox/navigation/menu.py:290 +msgid "Virtual Circuit Terminations" +msgstr "Beëindigingen van virtuele circuits" + +#: netbox/netbox/navigation/menu.py:296 +msgid "Circuit Groups" +msgstr "Circuitgroepen" + +#: netbox/netbox/navigation/menu.py:297 +#: netbox/templates/circuits/circuit.html:76 +#: netbox/templates/circuits/virtualcircuit.html:69 +msgid "Group Assignments" +msgstr "Groepstoewijzingen" + +#: netbox/netbox/navigation/menu.py:301 netbox/netbox/navigation/menu.py:303 msgid "Providers" msgstr "Providers" -#: netbox/netbox/navigation/menu.py:283 +#: netbox/netbox/navigation/menu.py:304 #: netbox/templates/circuits/provider.html:51 msgid "Provider Accounts" msgstr "Accounts van providers" -#: netbox/netbox/navigation/menu.py:284 +#: netbox/netbox/navigation/menu.py:305 msgid "Provider Networks" msgstr "Netwerken van providers" -#: netbox/netbox/navigation/menu.py:298 +#: netbox/netbox/navigation/menu.py:319 msgid "Power Panels" msgstr "Voedingspanelen" -#: netbox/netbox/navigation/menu.py:309 +#: netbox/netbox/navigation/menu.py:330 msgid "Configurations" msgstr "Configuraties" -#: netbox/netbox/navigation/menu.py:311 +#: netbox/netbox/navigation/menu.py:332 msgid "Config Contexts" msgstr "Contexten configureren" -#: netbox/netbox/navigation/menu.py:312 +#: netbox/netbox/navigation/menu.py:333 msgid "Config Templates" msgstr "Configuratiesjablonen" -#: netbox/netbox/navigation/menu.py:319 netbox/netbox/navigation/menu.py:323 +#: netbox/netbox/navigation/menu.py:340 netbox/netbox/navigation/menu.py:344 msgid "Customization" msgstr "Aanpassing" -#: netbox/netbox/navigation/menu.py:325 +#: netbox/netbox/navigation/menu.py:346 #: netbox/templates/dcim/device_edit.html:103 #: netbox/templates/dcim/htmx/cable_edit.html:81 #: netbox/templates/dcim/virtualchassis_add.html:31 @@ -11269,96 +11864,96 @@ msgstr "Aanpassing" #: netbox/templates/htmx/form.html:19 netbox/templates/inc/filter_list.html:30 #: netbox/templates/inc/panels/custom_fields.html:7 #: netbox/templates/ipam/ipaddress_bulk_add.html:35 -#: netbox/templates/ipam/vlan_edit.html:59 +#: netbox/templates/ipam/vlan_edit.html:67 msgid "Custom Fields" msgstr "Aangepaste velden" -#: netbox/netbox/navigation/menu.py:326 +#: netbox/netbox/navigation/menu.py:347 msgid "Custom Field Choices" msgstr "Aangepaste veldkeuzes" -#: netbox/netbox/navigation/menu.py:327 +#: netbox/netbox/navigation/menu.py:348 msgid "Custom Links" msgstr "Aangepaste links" -#: netbox/netbox/navigation/menu.py:328 +#: netbox/netbox/navigation/menu.py:349 msgid "Export Templates" msgstr "Sjablonen exporteren" -#: netbox/netbox/navigation/menu.py:329 +#: netbox/netbox/navigation/menu.py:350 msgid "Saved Filters" msgstr "Opgeslagen filters" -#: netbox/netbox/navigation/menu.py:331 +#: netbox/netbox/navigation/menu.py:352 msgid "Image Attachments" msgstr "Afbeeldingsbijlagen" -#: netbox/netbox/navigation/menu.py:349 +#: netbox/netbox/navigation/menu.py:370 msgid "Operations" msgstr "Operaties" -#: netbox/netbox/navigation/menu.py:353 +#: netbox/netbox/navigation/menu.py:374 msgid "Integrations" msgstr "Integraties" -#: netbox/netbox/navigation/menu.py:355 +#: netbox/netbox/navigation/menu.py:376 msgid "Data Sources" msgstr "Gegevensbronnen" -#: netbox/netbox/navigation/menu.py:356 +#: netbox/netbox/navigation/menu.py:377 msgid "Event Rules" msgstr "Regels voor evenementen" -#: netbox/netbox/navigation/menu.py:357 +#: netbox/netbox/navigation/menu.py:378 msgid "Webhooks" msgstr "Webhooks" -#: netbox/netbox/navigation/menu.py:361 netbox/netbox/navigation/menu.py:365 -#: netbox/netbox/views/generic/feature_views.py:153 +#: netbox/netbox/navigation/menu.py:382 netbox/netbox/navigation/menu.py:386 +#: netbox/netbox/views/generic/feature_views.py:158 #: netbox/templates/extras/report/base.html:37 #: netbox/templates/extras/script/base.html:36 msgid "Jobs" msgstr "Jobs" -#: netbox/netbox/navigation/menu.py:371 +#: netbox/netbox/navigation/menu.py:392 msgid "Logging" msgstr "Loggen" -#: netbox/netbox/navigation/menu.py:373 +#: netbox/netbox/navigation/menu.py:394 msgid "Notification Groups" msgstr "Meldingsgroepen" -#: netbox/netbox/navigation/menu.py:374 +#: netbox/netbox/navigation/menu.py:395 msgid "Journal Entries" msgstr "Journaalposten" -#: netbox/netbox/navigation/menu.py:375 +#: netbox/netbox/navigation/menu.py:396 #: netbox/templates/core/objectchange.html:9 #: netbox/templates/core/objectchange_list.html:4 msgid "Change Log" msgstr "Logboek wijzigen" -#: netbox/netbox/navigation/menu.py:382 netbox/templates/inc/user_menu.html:29 +#: netbox/netbox/navigation/menu.py:403 netbox/templates/inc/user_menu.html:29 msgid "Admin" msgstr "beheerder" -#: netbox/netbox/navigation/menu.py:430 netbox/templates/account/base.html:27 -#: netbox/templates/inc/user_menu.html:57 +#: netbox/netbox/navigation/menu.py:451 netbox/templates/account/base.html:27 +#: netbox/templates/inc/user_menu.html:52 msgid "API Tokens" msgstr "API-tokens" -#: netbox/netbox/navigation/menu.py:437 netbox/users/forms/model_forms.py:187 +#: netbox/netbox/navigation/menu.py:458 netbox/users/forms/model_forms.py:187 #: netbox/users/forms/model_forms.py:195 netbox/users/forms/model_forms.py:242 #: netbox/users/forms/model_forms.py:249 msgid "Permissions" msgstr "Machtigingen" -#: netbox/netbox/navigation/menu.py:445 netbox/netbox/navigation/menu.py:449 +#: netbox/netbox/navigation/menu.py:466 netbox/netbox/navigation/menu.py:470 #: netbox/templates/core/system.html:7 msgid "System" msgstr "Systeem" -#: netbox/netbox/navigation/menu.py:454 netbox/netbox/navigation/menu.py:502 +#: netbox/netbox/navigation/menu.py:475 netbox/netbox/navigation/menu.py:523 #: netbox/templates/500.html:35 netbox/templates/account/preferences.html:22 #: netbox/templates/core/plugin.html:13 #: netbox/templates/core/plugin_list.html:7 @@ -11366,29 +11961,29 @@ msgstr "Systeem" msgid "Plugins" msgstr "Plug-ins" -#: netbox/netbox/navigation/menu.py:459 +#: netbox/netbox/navigation/menu.py:480 msgid "Configuration History" msgstr "Configuratiegeschiedenis" -#: netbox/netbox/navigation/menu.py:465 netbox/templates/core/rq_task.html:8 +#: netbox/netbox/navigation/menu.py:486 netbox/templates/core/rq_task.html:8 #: netbox/templates/core/rq_task_list.html:22 msgid "Background Tasks" msgstr "Achtergrondtaken" -#: netbox/netbox/plugins/navigation.py:47 -#: netbox/netbox/plugins/navigation.py:69 +#: netbox/netbox/plugins/navigation.py:48 +#: netbox/netbox/plugins/navigation.py:70 msgid "Permissions must be passed as a tuple or list." msgstr "Machtigingen moeten worden doorgegeven als een tuple of lijst." -#: netbox/netbox/plugins/navigation.py:51 +#: netbox/netbox/plugins/navigation.py:52 msgid "Buttons must be passed as a tuple or list." msgstr "Knoppen moeten als een tuple of lijst worden doorgegeven." -#: netbox/netbox/plugins/navigation.py:73 +#: netbox/netbox/plugins/navigation.py:74 msgid "Button color must be a choice within ButtonColorChoices." msgstr "De kleur van de knop moet een keuze zijn binnen ButtonColorChoices." -#: netbox/netbox/plugins/registration.py:25 +#: netbox/netbox/plugins/registration.py:26 #, python-brace-format msgid "" "PluginTemplateExtension class {template_extension} was passed as an " @@ -11397,7 +11992,7 @@ msgstr "" "PluginTemplateExtension-klasse {template_extension} werd als voorbeeld " "aangenomen!" -#: netbox/netbox/plugins/registration.py:31 +#: netbox/netbox/plugins/registration.py:32 #, python-brace-format msgid "" "{template_extension} is not a subclass of " @@ -11406,17 +12001,17 @@ msgstr "" "{template_extension} is geen subklasse van de " "NetBox.Plugins.PluginTemplateExtension!" -#: netbox/netbox/plugins/registration.py:51 +#: netbox/netbox/plugins/registration.py:57 #, python-brace-format msgid "{item} must be an instance of netbox.plugins.PluginMenuItem" msgstr "{item} moet een exemplaar zijn van NetBox.Plugins.PluginMenuItem" -#: netbox/netbox/plugins/registration.py:62 +#: netbox/netbox/plugins/registration.py:68 #, python-brace-format msgid "{menu_link} must be an instance of netbox.plugins.PluginMenuItem" msgstr "{menu_link} moet een exemplaar zijn van NetBox.Plugins.PluginMenuItem" -#: netbox/netbox/plugins/registration.py:67 +#: netbox/netbox/plugins/registration.py:73 #, python-brace-format msgid "{button} must be an instance of netbox.plugins.PluginMenuButton" msgstr "{button} moet een exemplaar zijn van NetBox.Plugins.PluginMenuButton" @@ -11502,93 +12097,93 @@ msgstr "Kan na initialisatie geen winkels aan het register toevoegen" msgid "Cannot delete stores from registry" msgstr "Kan winkels niet verwijderen uit het register" -#: netbox/netbox/settings.py:760 +#: netbox/netbox/settings.py:752 msgid "Czech" msgstr "Tsjechisch" -#: netbox/netbox/settings.py:761 +#: netbox/netbox/settings.py:753 msgid "Danish" msgstr "Deens" -#: netbox/netbox/settings.py:762 +#: netbox/netbox/settings.py:754 msgid "German" msgstr "Duits" -#: netbox/netbox/settings.py:763 +#: netbox/netbox/settings.py:755 msgid "English" msgstr "Engels" -#: netbox/netbox/settings.py:764 +#: netbox/netbox/settings.py:756 msgid "Spanish" msgstr "Spaans" -#: netbox/netbox/settings.py:765 +#: netbox/netbox/settings.py:757 msgid "French" msgstr "Frans" -#: netbox/netbox/settings.py:766 +#: netbox/netbox/settings.py:758 msgid "Italian" msgstr "Italiaans" -#: netbox/netbox/settings.py:767 +#: netbox/netbox/settings.py:759 msgid "Japanese" msgstr "Japans" -#: netbox/netbox/settings.py:768 +#: netbox/netbox/settings.py:760 msgid "Dutch" msgstr "Nederlands" -#: netbox/netbox/settings.py:769 +#: netbox/netbox/settings.py:761 msgid "Polish" msgstr "Pools" -#: netbox/netbox/settings.py:770 +#: netbox/netbox/settings.py:762 msgid "Portuguese" msgstr "Portugees" -#: netbox/netbox/settings.py:771 +#: netbox/netbox/settings.py:763 msgid "Russian" msgstr "Russisch" -#: netbox/netbox/settings.py:772 +#: netbox/netbox/settings.py:764 msgid "Turkish" msgstr "Turks" -#: netbox/netbox/settings.py:773 +#: netbox/netbox/settings.py:765 msgid "Ukrainian" msgstr "Oekraïens" -#: netbox/netbox/settings.py:774 +#: netbox/netbox/settings.py:766 msgid "Chinese" msgstr "Chinees" -#: netbox/netbox/tables/columns.py:176 +#: netbox/netbox/tables/columns.py:177 msgid "Select all" msgstr "Alles selecteren" -#: netbox/netbox/tables/columns.py:189 +#: netbox/netbox/tables/columns.py:190 msgid "Toggle all" msgstr "Alles omschakelen" -#: netbox/netbox/tables/columns.py:300 +#: netbox/netbox/tables/columns.py:302 msgid "Toggle Dropdown" msgstr "Dropdown in- en uitschakelen" -#: netbox/netbox/tables/columns.py:572 netbox/templates/core/job.html:53 +#: netbox/netbox/tables/columns.py:575 netbox/templates/core/job.html:53 msgid "Error" msgstr "Fout" -#: netbox/netbox/tables/tables.py:58 +#: netbox/netbox/tables/tables.py:59 #, python-brace-format msgid "No {model_name} found" msgstr "Geen {model_name} gevonden" -#: netbox/netbox/tables/tables.py:249 +#: netbox/netbox/tables/tables.py:252 #: netbox/templates/generic/bulk_import.html:117 msgid "Field" msgstr "Veld" -#: netbox/netbox/tables/tables.py:252 +#: netbox/netbox/tables/tables.py:255 msgid "Value" msgstr "Waarde" @@ -11605,24 +12200,24 @@ msgstr "" "Er is een fout opgetreden bij het weergeven van de geselecteerde " "exportsjabloon ({template}): {error}" -#: netbox/netbox/views/generic/bulk_views.py:416 +#: netbox/netbox/views/generic/bulk_views.py:421 #, python-brace-format msgid "Row {i}: Object with ID {id} does not exist" msgstr "Rij {i}: Object met ID {id} bestaat niet" -#: netbox/netbox/views/generic/bulk_views.py:709 -#: netbox/netbox/views/generic/bulk_views.py:910 -#: netbox/netbox/views/generic/bulk_views.py:958 +#: netbox/netbox/views/generic/bulk_views.py:708 +#: netbox/netbox/views/generic/bulk_views.py:909 +#: netbox/netbox/views/generic/bulk_views.py:957 #, python-brace-format msgid "No {object_type} were selected." msgstr "Geen {object_type} zijn geselecteerd." -#: netbox/netbox/views/generic/bulk_views.py:788 +#: netbox/netbox/views/generic/bulk_views.py:787 #, python-brace-format msgid "Renamed {count} {object_type}" msgstr "Hernoemd {count} {object_type}" -#: netbox/netbox/views/generic/bulk_views.py:888 +#: netbox/netbox/views/generic/bulk_views.py:887 #, python-brace-format msgid "Deleted {count} {object_type}" msgstr "Verwijderd {count} {object_type}" @@ -11635,17 +12230,17 @@ msgstr "Log met wijzigingen" msgid "Journal" msgstr "Journaal" -#: netbox/netbox/views/generic/feature_views.py:207 +#: netbox/netbox/views/generic/feature_views.py:212 msgid "Unable to synchronize data: No data file set." msgstr "" "Kan gegevens niet synchroniseren: er is geen gegevensbestand ingesteld." -#: netbox/netbox/views/generic/feature_views.py:211 +#: netbox/netbox/views/generic/feature_views.py:216 #, python-brace-format msgid "Synchronized data for {object_type} {object}." msgstr "Gesynchroniseerde gegevens voor {object_type} {object}." -#: netbox/netbox/views/generic/feature_views.py:236 +#: netbox/netbox/views/generic/feature_views.py:241 #, python-brace-format msgid "Synced {count} {object_type}" msgstr "Gesynchroniseerd {count} {object_type}" @@ -11720,9 +12315,9 @@ msgstr "op GitHub" msgid "Home Page" msgstr "Startpagina" -#: netbox/templates/account/base.html:7 netbox/templates/inc/user_menu.html:45 +#: netbox/templates/account/base.html:7 netbox/templates/inc/user_menu.html:40 #: netbox/vpn/forms/bulk_edit.py:255 netbox/vpn/forms/filtersets.py:189 -#: netbox/vpn/forms/model_forms.py:379 +#: netbox/vpn/forms/model_forms.py:382 msgid "Profile" msgstr "Profiel" @@ -11734,12 +12329,12 @@ msgstr "Meldingen" #: netbox/templates/account/base.html:16 #: netbox/templates/account/subscriptions.html:7 -#: netbox/templates/inc/user_menu.html:51 +#: netbox/templates/inc/user_menu.html:46 msgid "Subscriptions" msgstr "Abonnementen" #: netbox/templates/account/base.html:19 -#: netbox/templates/inc/user_menu.html:54 +#: netbox/templates/inc/user_menu.html:49 msgid "Preferences" msgstr "Voorkeuren" @@ -11767,6 +12362,7 @@ msgstr "Wachtwoord wijzigen" #: netbox/templates/generic/object_edit.html:72 #: netbox/templates/htmx/delete_form.html:53 #: netbox/templates/htmx/delete_form.html:55 +#: netbox/templates/htmx/quick_add.html:21 #: netbox/templates/ipam/ipaddress_assign.html:28 #: netbox/templates/virtualization/cluster_add_devices.html:30 msgid "Cancel" @@ -11865,7 +12461,7 @@ msgstr "Toegewezen groepen" #: netbox/templates/core/objectchange.html:142 #: netbox/templates/dcim/devicebay.html:59 #: netbox/templates/dcim/inc/panels/inventory_items.html:45 -#: netbox/templates/dcim/interface.html:296 +#: netbox/templates/dcim/interface.html:353 #: netbox/templates/dcim/modulebay.html:80 #: netbox/templates/extras/configcontext.html:70 #: netbox/templates/extras/eventrule.html:66 @@ -11874,6 +12470,7 @@ msgstr "Toegewezen groepen" #: netbox/templates/extras/webhook.html:75 #: netbox/templates/inc/panel_table.html:13 #: netbox/templates/inc/panels/comments.html:10 +#: netbox/templates/inc/panels/related_objects.html:23 #: netbox/templates/ipam/inc/panels/fhrp_groups.html:56 #: netbox/templates/users/group.html:34 netbox/templates/users/group.html:44 #: netbox/templates/users/objectpermission.html:77 @@ -11911,7 +12508,7 @@ msgstr "Laatst gebruikt" msgid "Add a Token" msgstr "Een token toevoegen" -#: netbox/templates/base/base.html:22 netbox/templates/home.html:27 +#: netbox/templates/base/base.html:23 netbox/templates/home.html:27 msgid "Home" msgstr "Home" @@ -11953,15 +12550,16 @@ msgstr "Broncode" msgid "Community" msgstr "Gemeenschap" -#: netbox/templates/circuits/circuit.html:47 +#: netbox/templates/circuits/circuit.html:57 msgid "Install Date" msgstr "Datum van installatie" -#: netbox/templates/circuits/circuit.html:51 +#: netbox/templates/circuits/circuit.html:61 msgid "Termination Date" msgstr "Beëindigingsdatum" -#: netbox/templates/circuits/circuit.html:70 +#: netbox/templates/circuits/circuit.html:80 +#: netbox/templates/circuits/virtualcircuit.html:73 #: netbox/templates/ipam/inc/panels/fhrp_groups.html:15 msgid "Assign Group" msgstr "Groep toewijzen" @@ -12009,7 +12607,7 @@ msgid "Add" msgstr "Toevoegen" #: netbox/templates/circuits/inc/circuit_termination.html:15 -#: netbox/templates/circuits/inc/circuit_termination_fields.html:36 +#: netbox/templates/circuits/inc/circuit_termination_fields.html:37 #: netbox/templates/dcim/inc/panels/inventory_items.html:32 #: netbox/templates/dcim/powerpanel.html:56 #: netbox/templates/extras/script_list.html:30 @@ -12024,35 +12622,39 @@ msgstr "Bewerken" msgid "Swap" msgstr "Ruil" -#: netbox/templates/circuits/inc/circuit_termination_fields.html:19 +#: netbox/templates/circuits/inc/circuit_termination_fields.html:5 +msgid "Termination point" +msgstr "Eindpunt" + +#: netbox/templates/circuits/inc/circuit_termination_fields.html:20 #: netbox/templates/dcim/consoleport.html:59 #: netbox/templates/dcim/consoleserverport.html:60 #: netbox/templates/dcim/powerfeed.html:114 msgid "Marked as connected" msgstr "Gemarkeerd als verbonden" -#: netbox/templates/circuits/inc/circuit_termination_fields.html:21 +#: netbox/templates/circuits/inc/circuit_termination_fields.html:22 msgid "to" msgstr "naar" -#: netbox/templates/circuits/inc/circuit_termination_fields.html:31 #: netbox/templates/circuits/inc/circuit_termination_fields.html:32 +#: netbox/templates/circuits/inc/circuit_termination_fields.html:33 #: netbox/templates/dcim/frontport.html:80 #: netbox/templates/dcim/inc/connection_endpoints.html:7 -#: netbox/templates/dcim/interface.html:154 +#: netbox/templates/dcim/interface.html:211 #: netbox/templates/dcim/rearport.html:76 msgid "Trace" msgstr "Spoor" -#: netbox/templates/circuits/inc/circuit_termination_fields.html:35 +#: netbox/templates/circuits/inc/circuit_termination_fields.html:36 msgid "Edit cable" msgstr "Kabel bewerken" -#: netbox/templates/circuits/inc/circuit_termination_fields.html:40 +#: netbox/templates/circuits/inc/circuit_termination_fields.html:41 msgid "Remove cable" msgstr "Kabel verwijderen" -#: netbox/templates/circuits/inc/circuit_termination_fields.html:41 +#: netbox/templates/circuits/inc/circuit_termination_fields.html:42 #: netbox/templates/dcim/bulk_disconnect.html:5 #: netbox/templates/dcim/device/consoleports.html:12 #: netbox/templates/dcim/device/consoleserverports.html:12 @@ -12065,33 +12667,33 @@ msgstr "Kabel verwijderen" msgid "Disconnect" msgstr "Verbinding verbreken" -#: netbox/templates/circuits/inc/circuit_termination_fields.html:48 +#: netbox/templates/circuits/inc/circuit_termination_fields.html:49 #: netbox/templates/dcim/consoleport.html:69 #: netbox/templates/dcim/consoleserverport.html:70 #: netbox/templates/dcim/frontport.html:102 -#: netbox/templates/dcim/interface.html:180 -#: netbox/templates/dcim/interface.html:200 +#: netbox/templates/dcim/interface.html:237 +#: netbox/templates/dcim/interface.html:257 #: netbox/templates/dcim/powerfeed.html:127 -#: netbox/templates/dcim/poweroutlet.html:71 -#: netbox/templates/dcim/poweroutlet.html:72 +#: netbox/templates/dcim/poweroutlet.html:81 +#: netbox/templates/dcim/poweroutlet.html:82 #: netbox/templates/dcim/powerport.html:73 #: netbox/templates/dcim/rearport.html:98 msgid "Connect" msgstr "Verbind" -#: netbox/templates/circuits/inc/circuit_termination_fields.html:70 +#: netbox/templates/circuits/inc/circuit_termination_fields.html:65 msgid "Downstream" msgstr "Stroomafwaarts" -#: netbox/templates/circuits/inc/circuit_termination_fields.html:71 +#: netbox/templates/circuits/inc/circuit_termination_fields.html:66 msgid "Upstream" msgstr "Stroomopwaarts" -#: netbox/templates/circuits/inc/circuit_termination_fields.html:80 +#: netbox/templates/circuits/inc/circuit_termination_fields.html:75 msgid "Cross-Connect" msgstr "Cross-connect" -#: netbox/templates/circuits/inc/circuit_termination_fields.html:84 +#: netbox/templates/circuits/inc/circuit_termination_fields.html:79 msgid "Patch Panel/Port" msgstr "Patchpaneel/poort" @@ -12103,6 +12705,27 @@ msgstr "Circuit toevoegen" msgid "Provider Account" msgstr "Account van de provider" +#: netbox/templates/circuits/providernetwork.html:59 +msgid "Add a Virtual Circuit" +msgstr "Een virtueel circuit toevoegen" + +#: netbox/templates/circuits/virtualcircuit.html:91 +#: netbox/templates/vpn/tunnel.html:9 +msgid "Add Termination" +msgstr "Beëindiging toevoegen" + +#: netbox/templates/circuits/virtualcircuittermination.html:23 +msgid "Virtual Circuit Termination" +msgstr "Beëindiging van virtuele circuits" + +#: netbox/templates/circuits/virtualcircuittype.html:10 +msgid "Add Virtual Circuit" +msgstr "Virtueel circuit toevoegen" + +#: netbox/templates/circuits/virtualcircuittype.html:19 +msgid "Virtual Circuit Type" +msgstr "Type virtueel circuit" + #: netbox/templates/core/configrevision.html:35 msgid "Configuration Data" msgstr "Configuratiegegevens" @@ -12136,7 +12759,7 @@ msgstr "Gewijzigd" #: netbox/templates/core/datafile.html:42 #: netbox/templates/ipam/iprange.html:25 #: netbox/templates/virtualization/virtualdisk.html:29 -#: netbox/virtualization/tables/virtualmachines.py:198 +#: netbox/virtualization/tables/virtualmachines.py:169 msgid "Size" msgstr "Grootte" @@ -12581,8 +13204,8 @@ msgstr "Geselecteerde naam wijzigen" #: netbox/templates/dcim/consoleport.html:65 #: netbox/templates/dcim/consoleserverport.html:66 #: netbox/templates/dcim/frontport.html:98 -#: netbox/templates/dcim/interface.html:176 -#: netbox/templates/dcim/poweroutlet.html:69 +#: netbox/templates/dcim/interface.html:233 +#: netbox/templates/dcim/poweroutlet.html:79 #: netbox/templates/dcim/powerport.html:69 msgid "Not Connected" msgstr "Niet verbonden" @@ -12605,7 +13228,7 @@ msgid "Map" msgstr "Kaart" #: netbox/templates/dcim/device.html:108 -#: netbox/templates/dcim/inventoryitem.html:56 +#: netbox/templates/dcim/inventoryitem.html:60 #: netbox/templates/dcim/module.html:81 #: netbox/templates/dcim/modulebay.html:74 netbox/templates/dcim/rack.html:61 msgid "Asset Tag" @@ -12621,7 +13244,7 @@ msgstr "VDC aanmaken" #: netbox/templates/dcim/device.html:175 #: netbox/templates/dcim/device_edit.html:64 -#: netbox/virtualization/forms/model_forms.py:223 +#: netbox/virtualization/forms/model_forms.py:230 msgid "Management" msgstr "Beheer" @@ -12738,35 +13361,6 @@ msgstr "Voedingspoort toevoegen" msgid "Add Rear Ports" msgstr "Achterpoorten toevoegen" -#: netbox/templates/dcim/device/render_config.html:5 -#: netbox/templates/virtualization/virtualmachine/render_config.html:5 -msgid "Config" -msgstr "Configuratie" - -#: netbox/templates/dcim/device/render_config.html:35 -#: netbox/templates/virtualization/virtualmachine/render_config.html:35 -msgid "Context Data" -msgstr "Contextgegevens" - -#: netbox/templates/dcim/device/render_config.html:55 -#: netbox/templates/virtualization/virtualmachine/render_config.html:55 -msgid "Rendered Config" -msgstr "Gerenderde configuratie" - -#: netbox/templates/dcim/device/render_config.html:57 -#: netbox/templates/virtualization/virtualmachine/render_config.html:57 -msgid "Download" -msgstr "Downloaden" - -#: netbox/templates/dcim/device/render_config.html:64 -#: netbox/templates/virtualization/virtualmachine/render_config.html:64 -msgid "Error rendering template" -msgstr "Sjabloon voor weergave van fouten" - -#: netbox/templates/dcim/device/render_config.html:70 -msgid "No configuration template has been assigned for this device." -msgstr "" - #: netbox/templates/dcim/device_edit.html:44 msgid "Parent Bay" msgstr "Parent Bay" @@ -12833,12 +13427,12 @@ msgid "VM Role" msgstr "VM-rol" #: netbox/templates/dcim/devicetype.html:18 -#: netbox/templates/dcim/moduletype.html:29 +#: netbox/templates/dcim/moduletype.html:31 msgid "Model Name" msgstr "Naam van het model" #: netbox/templates/dcim/devicetype.html:25 -#: netbox/templates/dcim/moduletype.html:33 +#: netbox/templates/dcim/moduletype.html:35 msgid "Part Number" msgstr "Onderdeelnummer" @@ -12863,8 +13457,8 @@ msgid "Rear Port Position" msgstr "Positie van de achterpoort" #: netbox/templates/dcim/frontport.html:72 -#: netbox/templates/dcim/interface.html:144 -#: netbox/templates/dcim/poweroutlet.html:63 +#: netbox/templates/dcim/interface.html:201 +#: netbox/templates/dcim/poweroutlet.html:73 #: netbox/templates/dcim/powerport.html:63 #: netbox/templates/dcim/rearport.html:68 msgid "Marked as Connected" @@ -12964,77 +13558,79 @@ msgid "PoE Type" msgstr "PoE-type" #: netbox/templates/dcim/interface.html:81 -#: netbox/templates/virtualization/vminterface.html:63 +#: netbox/templates/virtualization/vminterface.html:55 +#: netbox/virtualization/forms/model_forms.py:395 msgid "802.1Q Mode" msgstr "802.1Q-modus" -#: netbox/templates/dcim/interface.html:125 -#: netbox/templates/virtualization/vminterface.html:59 -msgid "MAC Address" -msgstr "MAC-adres" +#: netbox/templates/dcim/interface.html:156 +#: netbox/templates/virtualization/vminterface.html:88 +msgid "VLAN Translation" +msgstr "VLAN-vertaling" -#: netbox/templates/dcim/interface.html:151 +#: netbox/templates/dcim/interface.html:208 msgid "Wireless Link" msgstr "Draadloze link" -#: netbox/templates/dcim/interface.html:218 netbox/vpn/choices.py:63 -msgid "Peer" -msgstr "Peer" - -#: netbox/templates/dcim/interface.html:230 +#: netbox/templates/dcim/interface.html:287 #: netbox/templates/wireless/inc/wirelesslink_interface.html:26 msgid "Channel" msgstr "Kanaal" -#: netbox/templates/dcim/interface.html:239 +#: netbox/templates/dcim/interface.html:296 #: netbox/templates/wireless/inc/wirelesslink_interface.html:32 msgid "Channel Frequency" msgstr "Kanaalfrequentie" -#: netbox/templates/dcim/interface.html:242 -#: netbox/templates/dcim/interface.html:250 -#: netbox/templates/dcim/interface.html:261 -#: netbox/templates/dcim/interface.html:269 +#: netbox/templates/dcim/interface.html:299 +#: netbox/templates/dcim/interface.html:307 +#: netbox/templates/dcim/interface.html:318 +#: netbox/templates/dcim/interface.html:326 msgid "MHz" msgstr "MHz" -#: netbox/templates/dcim/interface.html:258 +#: netbox/templates/dcim/interface.html:315 #: netbox/templates/wireless/inc/wirelesslink_interface.html:42 msgid "Channel Width" msgstr "Kanaalbreedte" -#: netbox/templates/dcim/interface.html:285 +#: netbox/templates/dcim/interface.html:342 #: netbox/templates/wireless/wirelesslan.html:14 #: netbox/templates/wireless/wirelesslink.html:21 -#: netbox/wireless/forms/bulk_edit.py:60 -#: netbox/wireless/forms/bulk_edit.py:102 -#: netbox/wireless/forms/filtersets.py:40 -#: netbox/wireless/forms/filtersets.py:80 netbox/wireless/models.py:82 -#: netbox/wireless/models.py:156 netbox/wireless/tables/wirelesslan.py:44 +#: netbox/wireless/forms/bulk_edit.py:62 +#: netbox/wireless/forms/bulk_edit.py:105 +#: netbox/wireless/forms/filtersets.py:43 +#: netbox/wireless/forms/filtersets.py:108 netbox/wireless/models.py:82 +#: netbox/wireless/models.py:153 netbox/wireless/tables/wirelesslan.py:44 msgid "SSID" msgstr "SSID" -#: netbox/templates/dcim/interface.html:305 +#: netbox/templates/dcim/interface.html:362 msgid "LAG Members" msgstr "LAG-leden" -#: netbox/templates/dcim/interface.html:323 +#: netbox/templates/dcim/interface.html:380 msgid "No member interfaces" msgstr "Geen interfaces voor leden" -#: netbox/templates/dcim/interface.html:343 +#: netbox/templates/dcim/interface.html:400 #: netbox/templates/ipam/fhrpgroup.html:73 #: netbox/templates/ipam/iprange/ip_addresses.html:7 #: netbox/templates/ipam/prefix/ip_addresses.html:7 -#: netbox/templates/virtualization/vminterface.html:89 +#: netbox/templates/virtualization/vminterface.html:105 msgid "Add IP Address" msgstr "IP-adres toevoegen" +#: netbox/templates/dcim/interface.html:417 +#: netbox/templates/virtualization/vminterface.html:123 +msgid "Add MAC Address" +msgstr "MAC-adres toevoegen" + #: netbox/templates/dcim/inventoryitem.html:24 msgid "Parent Item" msgstr "Bovenliggend item" -#: netbox/templates/dcim/inventoryitem.html:48 +#: netbox/templates/dcim/inventoryitem.html:52 msgid "Part ID" msgstr "Onderdeel-ID" @@ -13054,6 +13650,10 @@ msgstr "Een locatie toevoegen" msgid "Add a Device" msgstr "Een apparaat toevoegen" +#: netbox/templates/dcim/macaddress.html:36 +msgid "Primary for interface" +msgstr "Primair voor interface" + #: netbox/templates/dcim/manufacturer.html:16 msgid "Add Device Type" msgstr "Apparaattype toevoegen" @@ -13084,7 +13684,7 @@ msgctxt "Abbreviation for amperes" msgid "A" msgstr "A" -#: netbox/templates/dcim/poweroutlet.html:48 +#: netbox/templates/dcim/poweroutlet.html:58 msgid "Feed Leg" msgstr "Voer de poot in" @@ -13518,11 +14118,19 @@ msgstr "Kan inhoud niet laden. Ongeldige weergavenaam" msgid "No content found" msgstr "Geen inhoud gevonden" -#: netbox/templates/extras/dashboard/widgets/rssfeed.html:18 +#: netbox/templates/extras/dashboard/widgets/rssfeed.html:17 +msgid "" +"This RSS feed requires an external connection. Check the ISOLATED_DEPLOYMENT" +" setting." +msgstr "" +"Deze RSS-feed vereist een externe verbinding. Controleer de " +"ISOLATED_DEPLOYMENT-instelling." + +#: netbox/templates/extras/dashboard/widgets/rssfeed.html:22 msgid "There was a problem fetching the RSS feed" msgstr "Er is een probleem opgetreden bij het ophalen van de RSS-feed" -#: netbox/templates/extras/dashboard/widgets/rssfeed.html:21 +#: netbox/templates/extras/dashboard/widgets/rssfeed.html:25 msgid "HTTP" msgstr "HTTP" @@ -13592,6 +14200,30 @@ msgstr "Broncontexten" msgid "New Journal Entry" msgstr "Nieuwe journaalpost" +#: netbox/templates/extras/object_render_config.html:6 +msgid "Config" +msgstr "Configuratie" + +#: netbox/templates/extras/object_render_config.html:36 +msgid "Context Data" +msgstr "Contextgegevens" + +#: netbox/templates/extras/object_render_config.html:56 +msgid "Rendered Config" +msgstr "Gerenderde configuratie" + +#: netbox/templates/extras/object_render_config.html:58 +msgid "Download" +msgstr "Downloaden" + +#: netbox/templates/extras/object_render_config.html:65 +msgid "Error rendering template" +msgstr "Sjabloon voor weergave van fouten" + +#: netbox/templates/extras/object_render_config.html:71 +msgid "No configuration template has been assigned." +msgstr "Er is geen configuratiesjabloon toegewezen." + #: netbox/templates/extras/report/base.html:30 msgid "Report" msgstr "Rapporteren" @@ -13679,7 +14311,7 @@ msgstr "Elke" msgid "Tagged Item Types" msgstr "Typen artikelen met tags" -#: netbox/templates/extras/tag.html:81 +#: netbox/templates/extras/tag.html:82 msgid "Tagged Objects" msgstr "Getagde objecten" @@ -13964,6 +14596,21 @@ msgstr "Alle meldingen" msgid "Select" msgstr "Selecteer" +#: netbox/templates/htmx/quick_add.html:7 +msgid "Quick Add" +msgstr "Snel toevoegen" + +#: netbox/templates/htmx/quick_add_created.html:18 +#, python-format +msgid "" +"\n" +" Created %(object_type)s %(object)s\n" +" " +msgstr "" +"\n" +" Gemaakt %(object_type)s %(object)s\n" +" " + #: netbox/templates/inc/filter_list.html:43 #: netbox/utilities/templates/helpers/table_config_form.html:39 msgid "Reset" @@ -14035,15 +14682,11 @@ msgstr "Duidelijke bestelling" msgid "Help center" msgstr "Helpcentrum" -#: netbox/templates/inc/user_menu.html:41 -msgid "Django Admin" -msgstr "" - -#: netbox/templates/inc/user_menu.html:61 +#: netbox/templates/inc/user_menu.html:56 msgid "Log Out" msgstr "Uitloggen" -#: netbox/templates/inc/user_menu.html:68 netbox/templates/login.html:38 +#: netbox/templates/inc/user_menu.html:63 netbox/templates/login.html:38 msgid "Log In" msgstr "Inloggen" @@ -14140,43 +14783,43 @@ msgstr "Startadres" msgid "Ending Address" msgstr "Eindadres" -#: netbox/templates/ipam/iprange.html:33 netbox/templates/ipam/prefix.html:110 +#: netbox/templates/ipam/iprange.html:33 netbox/templates/ipam/prefix.html:106 msgid "Marked fully utilized" msgstr "Gemarkeerd als volledig gebruikt" -#: netbox/templates/ipam/prefix.html:99 +#: netbox/templates/ipam/prefix.html:95 msgid "Addressing Details" msgstr "Adresseringsgegevens" -#: netbox/templates/ipam/prefix.html:118 +#: netbox/templates/ipam/prefix.html:114 msgid "Child IPs" msgstr "IP's voor kinderen" -#: netbox/templates/ipam/prefix.html:126 +#: netbox/templates/ipam/prefix.html:122 msgid "Available IPs" msgstr "Beschikbare IP-adressen" -#: netbox/templates/ipam/prefix.html:138 +#: netbox/templates/ipam/prefix.html:134 msgid "First available IP" msgstr "Eerste beschikbare IP" -#: netbox/templates/ipam/prefix.html:179 +#: netbox/templates/ipam/prefix.html:175 msgid "Prefix Details" msgstr "Details van de prefix" -#: netbox/templates/ipam/prefix.html:185 +#: netbox/templates/ipam/prefix.html:181 msgid "Network Address" msgstr "Netwerkadres" -#: netbox/templates/ipam/prefix.html:189 +#: netbox/templates/ipam/prefix.html:185 msgid "Network Mask" msgstr "Netwerkmasker" -#: netbox/templates/ipam/prefix.html:193 +#: netbox/templates/ipam/prefix.html:189 msgid "Wildcard Mask" msgstr "Wildcard-masker" -#: netbox/templates/ipam/prefix.html:197 +#: netbox/templates/ipam/prefix.html:193 msgid "Broadcast Address" msgstr "Adres van de uitzending" @@ -14216,14 +14859,30 @@ msgstr "L2VPN's importeren" msgid "Exporting L2VPNs" msgstr "L2VPN's exporteren" -#: netbox/templates/ipam/vlan.html:88 +#: netbox/templates/ipam/vlan.html:66 +msgid "Q-in-Q Role" +msgstr "De rol van Q-in-Q" + +#: netbox/templates/ipam/vlan.html:104 msgid "Add a Prefix" msgstr "Een prefix toevoegen" +#: netbox/templates/ipam/vlan.html:114 +msgid "Customer VLANs" +msgstr "VLAN's van klanten" + +#: netbox/templates/ipam/vlan.html:118 +msgid "Add a VLAN" +msgstr "Een VLAN toevoegen" + #: netbox/templates/ipam/vlangroup.html:18 msgid "Add VLAN" msgstr "VLAN toevoegen" +#: netbox/templates/ipam/vlantranslationpolicy.html:51 +msgid "Add Rule" +msgstr "Regel toevoegen" + #: netbox/templates/ipam/vrf.html:16 msgid "Route Distinguisher" msgstr "Routeherkenner" @@ -14302,7 +14961,7 @@ msgstr "" #: netbox/templates/tenancy/contact.html:18 netbox/tenancy/filtersets.py:147 #: netbox/tenancy/forms/bulk_edit.py:137 -#: netbox/tenancy/forms/filtersets.py:102 netbox/tenancy/forms/forms.py:56 +#: netbox/tenancy/forms/filtersets.py:102 netbox/tenancy/forms/forms.py:57 #: netbox/tenancy/forms/model_forms.py:106 #: netbox/tenancy/forms/model_forms.py:130 #: netbox/tenancy/tables/contacts.py:98 @@ -14320,7 +14979,7 @@ msgid "Phone" msgstr "Telefoon" #: netbox/templates/tenancy/contactgroup.html:18 -#: netbox/tenancy/forms/forms.py:66 netbox/tenancy/forms/model_forms.py:75 +#: netbox/tenancy/forms/forms.py:67 netbox/tenancy/forms/model_forms.py:75 msgid "Contact Group" msgstr "Contactgroep" @@ -14329,7 +14988,7 @@ msgid "Add Contact Group" msgstr "Contactgroep toevoegen" #: netbox/templates/tenancy/contactrole.html:15 -#: netbox/tenancy/filtersets.py:152 netbox/tenancy/forms/forms.py:61 +#: netbox/tenancy/filtersets.py:152 netbox/tenancy/forms/forms.py:62 #: netbox/tenancy/forms/model_forms.py:87 msgid "Contact Role" msgstr "Rol van contactpersoon" @@ -14343,8 +15002,8 @@ msgid "Add Tenant" msgstr "Tenant toevoegen" #: netbox/templates/tenancy/tenantgroup.html:26 -#: netbox/tenancy/forms/model_forms.py:32 netbox/tenancy/tables/columns.py:51 -#: netbox/tenancy/tables/columns.py:61 +#: netbox/tenancy/forms/model_forms.py:32 netbox/tenancy/tables/columns.py:36 +#: netbox/tenancy/tables/columns.py:46 msgid "Tenant Group" msgstr "Tenant Groep" @@ -14375,21 +15034,21 @@ msgstr "Beperkingen" msgid "Assigned Users" msgstr "Toegewezen gebruikers" -#: netbox/templates/virtualization/cluster.html:52 +#: netbox/templates/virtualization/cluster.html:56 msgid "Allocated Resources" msgstr "Toegewezen middelen" -#: netbox/templates/virtualization/cluster.html:55 +#: netbox/templates/virtualization/cluster.html:59 #: netbox/templates/virtualization/virtualmachine.html:125 msgid "Virtual CPUs" msgstr "Virtuele CPU's" -#: netbox/templates/virtualization/cluster.html:59 +#: netbox/templates/virtualization/cluster.html:63 #: netbox/templates/virtualization/virtualmachine.html:129 msgid "Memory" msgstr "Geheugen" -#: netbox/templates/virtualization/cluster.html:69 +#: netbox/templates/virtualization/cluster.html:73 #: netbox/templates/virtualization/virtualmachine.html:140 msgid "Disk Space" msgstr "Schijfruimte" @@ -14425,13 +15084,13 @@ msgid "Add Cluster" msgstr "Cluster toevoegen" #: netbox/templates/virtualization/clustergroup.html:19 -#: netbox/virtualization/forms/model_forms.py:50 +#: netbox/virtualization/forms/model_forms.py:53 msgid "Cluster Group" msgstr "Clustergroep" #: netbox/templates/virtualization/clustertype.html:19 #: netbox/templates/virtualization/virtualmachine.html:110 -#: netbox/virtualization/forms/model_forms.py:36 +#: netbox/virtualization/forms/model_forms.py:39 msgid "Cluster Type" msgstr "Clustertype" @@ -14440,8 +15099,8 @@ msgid "Virtual Disk" msgstr "Virtuele schijf" #: netbox/templates/virtualization/virtualmachine.html:122 -#: netbox/virtualization/forms/bulk_edit.py:190 -#: netbox/virtualization/forms/model_forms.py:224 +#: netbox/virtualization/forms/bulk_edit.py:172 +#: netbox/virtualization/forms/model_forms.py:231 msgid "Resources" msgstr "Hulpbronnen" @@ -14449,10 +15108,6 @@ msgstr "Hulpbronnen" msgid "Add Virtual Disk" msgstr "Virtuele schijf toevoegen" -#: netbox/templates/virtualization/virtualmachine/render_config.html:70 -msgid "No configuration template has been assigned for this virtual machine." -msgstr "" - #: netbox/templates/vpn/ikepolicy.html:10 #: netbox/templates/vpn/ipsecprofile.html:33 netbox/vpn/tables/crypto.py:166 msgid "IKE Policy" @@ -14475,7 +15130,7 @@ msgstr "Geheim tonen" #: netbox/templates/vpn/ipsecpolicy.html:45 #: netbox/templates/vpn/ipsecprofile.html:52 #: netbox/templates/vpn/ipsecprofile.html:77 -#: netbox/vpn/forms/model_forms.py:316 netbox/vpn/forms/model_forms.py:352 +#: netbox/vpn/forms/model_forms.py:317 netbox/vpn/forms/model_forms.py:354 #: netbox/vpn/tables/crypto.py:68 netbox/vpn/tables/crypto.py:134 msgid "Proposals" msgstr "Voorstellen" @@ -14521,12 +15176,12 @@ msgid "IPSec Policy" msgstr "IPsec-beleid" #: netbox/templates/vpn/ipsecpolicy.html:21 netbox/vpn/forms/bulk_edit.py:210 -#: netbox/vpn/models/crypto.py:193 +#: netbox/vpn/models/crypto.py:191 msgid "PFS group" msgstr "PFS-groep" #: netbox/templates/vpn/ipsecprofile.html:10 -#: netbox/vpn/forms/model_forms.py:54 +#: netbox/vpn/forms/model_forms.py:55 msgid "IPSec Profile" msgstr "IPsec-profiel" @@ -14552,10 +15207,6 @@ msgstr "L2VPN-kenmerken" msgid "Add a Termination" msgstr "Een beëindiging toevoegen" -#: netbox/templates/vpn/tunnel.html:9 -msgid "Add Termination" -msgstr "Beëindiging toevoegen" - #: netbox/templates/vpn/tunnel.html:37 netbox/vpn/forms/bulk_edit.py:49 #: netbox/vpn/forms/bulk_import.py:48 netbox/vpn/forms/filtersets.py:57 msgid "Encapsulation" @@ -14563,7 +15214,7 @@ msgstr "Inkapseling" #: netbox/templates/vpn/tunnel.html:41 netbox/vpn/forms/bulk_edit.py:55 #: netbox/vpn/forms/bulk_import.py:53 netbox/vpn/forms/filtersets.py:64 -#: netbox/vpn/models/crypto.py:250 netbox/vpn/tables/tunnels.py:51 +#: netbox/vpn/models/crypto.py:246 netbox/vpn/tables/tunnels.py:51 msgid "IPSec profile" msgstr "IPsec-profiel" @@ -14586,8 +15237,8 @@ msgid "Tunnel Termination" msgstr "Afsluiting van de tunnel" #: netbox/templates/vpn/tunneltermination.html:35 -#: netbox/vpn/forms/bulk_import.py:107 netbox/vpn/forms/model_forms.py:102 -#: netbox/vpn/forms/model_forms.py:138 netbox/vpn/forms/model_forms.py:247 +#: netbox/vpn/forms/bulk_import.py:107 netbox/vpn/forms/model_forms.py:103 +#: netbox/vpn/forms/model_forms.py:139 netbox/vpn/forms/model_forms.py:248 #: netbox/vpn/tables/tunnels.py:101 msgid "Outside IP" msgstr "Buiten IP" @@ -14610,7 +15261,7 @@ msgctxt "Abbreviation for megahertz" msgid "MHz" msgstr "MHz" -#: netbox/templates/wireless/wirelesslan.html:57 +#: netbox/templates/wireless/wirelesslan.html:65 msgid "Attached Interfaces" msgstr "Bijgevoegde interfaces" @@ -14619,7 +15270,7 @@ msgid "Add Wireless LAN" msgstr "Draadloos netwerk toevoegen" #: netbox/templates/wireless/wirelesslangroup.html:26 -#: netbox/wireless/forms/model_forms.py:28 +#: netbox/wireless/forms/model_forms.py:29 msgid "Wireless LAN Group" msgstr "Draadloze LAN-groep" @@ -14631,13 +15282,6 @@ msgstr "Draadloze LAN-groep toevoegen" msgid "Link Properties" msgstr "Eigenschappen van de link" -#: netbox/templates/wireless/wirelesslink.html:38 -#: netbox/wireless/forms/bulk_edit.py:129 -#: netbox/wireless/forms/filtersets.py:102 -#: netbox/wireless/forms/model_forms.py:165 -msgid "Distance" -msgstr "Afstand" - #: netbox/tenancy/filtersets.py:28 msgid "Parent contact group (ID)" msgstr "Contactgroep voor ouders (ID)" @@ -14708,47 +15352,47 @@ msgstr "contactgroep" msgid "contact groups" msgstr "contactgroepen" -#: netbox/tenancy/models/contacts.py:48 +#: netbox/tenancy/models/contacts.py:42 msgid "contact role" msgstr "contactrol" -#: netbox/tenancy/models/contacts.py:49 +#: netbox/tenancy/models/contacts.py:43 msgid "contact roles" msgstr "contactrollen" -#: netbox/tenancy/models/contacts.py:68 +#: netbox/tenancy/models/contacts.py:63 msgid "title" msgstr "noemen" -#: netbox/tenancy/models/contacts.py:73 +#: netbox/tenancy/models/contacts.py:68 msgid "phone" msgstr "telefoon" -#: netbox/tenancy/models/contacts.py:78 +#: netbox/tenancy/models/contacts.py:73 msgid "email" msgstr "e-mail" -#: netbox/tenancy/models/contacts.py:87 +#: netbox/tenancy/models/contacts.py:82 msgid "link" msgstr "verbinden" -#: netbox/tenancy/models/contacts.py:103 +#: netbox/tenancy/models/contacts.py:98 msgid "contact" msgstr "contact" -#: netbox/tenancy/models/contacts.py:104 +#: netbox/tenancy/models/contacts.py:99 msgid "contacts" msgstr "neemt contact op" -#: netbox/tenancy/models/contacts.py:153 +#: netbox/tenancy/models/contacts.py:146 msgid "contact assignment" msgstr "contactopdracht" -#: netbox/tenancy/models/contacts.py:154 +#: netbox/tenancy/models/contacts.py:147 msgid "contact assignments" msgstr "contacttoewijzingen" -#: netbox/tenancy/models/contacts.py:170 +#: netbox/tenancy/models/contacts.py:163 #, python-brace-format msgid "Contacts cannot be assigned to this object type ({type})." msgstr "" @@ -14762,19 +15406,19 @@ msgstr "tenant groep" msgid "tenant groups" msgstr "tenant groepen" -#: netbox/tenancy/models/tenants.py:70 +#: netbox/tenancy/models/tenants.py:68 msgid "Tenant name must be unique per group." msgstr "De naam van de tenant moet per groep uniek zijn." -#: netbox/tenancy/models/tenants.py:80 +#: netbox/tenancy/models/tenants.py:78 msgid "Tenant slug must be unique per group." msgstr "De slug van de tentant moet per groep uniek zijn." -#: netbox/tenancy/models/tenants.py:88 +#: netbox/tenancy/models/tenants.py:86 msgid "tenant" msgstr "tenant" -#: netbox/tenancy/models/tenants.py:89 +#: netbox/tenancy/models/tenants.py:87 msgid "tenants" msgstr "tenants" @@ -15006,7 +15650,7 @@ msgstr "blijk" msgid "tokens" msgstr "tokens" -#: netbox/users/models/users.py:57 netbox/vpn/models/crypto.py:42 +#: netbox/users/models/users.py:57 netbox/vpn/models/crypto.py:43 msgid "group" msgstr "groeperen" @@ -15054,26 +15698,26 @@ msgstr "" msgid "{name} has a key defined but CHOICES is not a list" msgstr "{name} heeft een sleutel gedefinieerd, maar CHOICES is geen lijst" -#: netbox/utilities/conversion.py:19 +#: netbox/utilities/conversion.py:20 msgid "Weight must be a positive number" msgstr "Gewicht moet een positief getal zijn" -#: netbox/utilities/conversion.py:21 +#: netbox/utilities/conversion.py:22 #, python-brace-format msgid "Invalid value '{weight}' for weight (must be a number)" msgstr "Ongeldige waarde '{weight}'voor gewicht (moet een getal zijn)" -#: netbox/utilities/conversion.py:32 netbox/utilities/conversion.py:62 +#: netbox/utilities/conversion.py:33 netbox/utilities/conversion.py:63 #, python-brace-format msgid "Unknown unit {unit}. Must be one of the following: {valid_units}" msgstr "" "Onbekende eenheid {unit}. Moet een van de volgende zijn: {valid_units}" -#: netbox/utilities/conversion.py:45 +#: netbox/utilities/conversion.py:46 msgid "Length must be a positive number" msgstr "De lengte moet een positief getal zijn" -#: netbox/utilities/conversion.py:47 +#: netbox/utilities/conversion.py:48 #, python-brace-format msgid "Invalid value '{length}' for length (must be a number)" msgstr "Ongeldige waarde '{length}'voor lengte (moet een getal zijn)" @@ -15091,11 +15735,11 @@ msgstr "" msgid "More than 50" msgstr "Meer dan 50" -#: netbox/utilities/fields.py:30 +#: netbox/utilities/fields.py:29 msgid "RGB color in hexadecimal. Example: " msgstr "RGB-kleur in hexadecimaal. Voorbeeld: " -#: netbox/utilities/fields.py:159 +#: netbox/utilities/fields.py:158 #, python-format msgid "" "%s(%r) is invalid. to_model parameter to CounterCacheField must be a string " @@ -15104,7 +15748,7 @@ msgstr "" "%s(%r) is ongeldig. De parameter to_model voor CounterCacheField moet een " "tekenreeks zijn in het formaat 'app.model'" -#: netbox/utilities/fields.py:169 +#: netbox/utilities/fields.py:168 #, python-format msgid "" "%s(%r) is invalid. to_field parameter to CounterCacheField must be a string " @@ -15333,14 +15977,14 @@ msgstr "Ongeldig gerelateerd objectkenmerk voor kolom”{field}„: {to_field}" msgid "Required column header \"{header}\" not found." msgstr "Vereiste kolomkop”{header}„niet gevonden." -#: netbox/utilities/forms/widgets/apiselect.py:124 +#: netbox/utilities/forms/widgets/apiselect.py:133 #, python-brace-format msgid "Missing required value for dynamic query param: '{dynamic_params}'" msgstr "" "Ontbrekende vereiste waarde voor dynamische queryparameter: " "'{dynamic_params}'" -#: netbox/utilities/forms/widgets/apiselect.py:141 +#: netbox/utilities/forms/widgets/apiselect.py:150 #, python-brace-format msgid "Missing required value for static query param: '{static_params}'" msgstr "" @@ -15467,10 +16111,14 @@ msgstr "Zoek..." msgid "Search NetBox" msgstr "Zoek in NetBox" -#: netbox/utilities/templates/widgets/apiselect.html:7 +#: netbox/utilities/templates/widgets/apiselect.html:8 msgid "Open selector" msgstr "Selector openen" +#: netbox/utilities/templates/widgets/apiselect.html:22 +msgid "Quick add" +msgstr "Snel toevoegen" + #: netbox/utilities/templates/widgets/markdown_input.html:6 msgid "Write" msgstr "Schrijf" @@ -15504,114 +16152,120 @@ msgstr "" "{class_name} heeft geen queryset gedefinieerd. ObjectPermissionRequiredMixIn" " mag alleen worden gebruikt op views die een basisqueryset definiëren" -#: netbox/virtualization/filtersets.py:79 +#: netbox/virtualization/choices.py:50 +msgid "Paused" +msgstr "Gepauzeerd" + +#: netbox/virtualization/filtersets.py:45 msgid "Parent group (ID)" msgstr "Oudergroep (ID)" -#: netbox/virtualization/filtersets.py:85 +#: netbox/virtualization/filtersets.py:51 msgid "Parent group (slug)" msgstr "Oudergroep (slug)" -#: netbox/virtualization/filtersets.py:89 -#: netbox/virtualization/filtersets.py:141 +#: netbox/virtualization/filtersets.py:55 +#: netbox/virtualization/filtersets.py:107 msgid "Cluster type (ID)" msgstr "Clustertype (ID)" -#: netbox/virtualization/filtersets.py:151 -#: netbox/virtualization/filtersets.py:271 +#: netbox/virtualization/filtersets.py:117 +#: netbox/virtualization/filtersets.py:237 msgid "Cluster (ID)" msgstr "Cluster (ID)" -#: netbox/virtualization/forms/bulk_edit.py:166 -#: netbox/virtualization/models/virtualmachines.py:115 +#: netbox/virtualization/forms/bulk_edit.py:148 +#: netbox/virtualization/models/virtualmachines.py:110 msgid "vCPUs" msgstr "vCPU's" -#: netbox/virtualization/forms/bulk_edit.py:170 +#: netbox/virtualization/forms/bulk_edit.py:152 msgid "Memory (MB)" msgstr "Geheugen (MB)" -#: netbox/virtualization/forms/bulk_edit.py:174 +#: netbox/virtualization/forms/bulk_edit.py:156 msgid "Disk (MB)" msgstr "Schijf (MB)" -#: netbox/virtualization/forms/bulk_edit.py:334 -#: netbox/virtualization/forms/filtersets.py:251 +#: netbox/virtualization/forms/bulk_edit.py:324 +#: netbox/virtualization/forms/filtersets.py:256 msgid "Size (MB)" msgstr "Grootte (MB)" -#: netbox/virtualization/forms/bulk_import.py:44 +#: netbox/virtualization/forms/bulk_import.py:45 msgid "Type of cluster" msgstr "Soort cluster" -#: netbox/virtualization/forms/bulk_import.py:51 +#: netbox/virtualization/forms/bulk_import.py:52 msgid "Assigned cluster group" msgstr "Toegewezen clustergroep" -#: netbox/virtualization/forms/bulk_import.py:96 +#: netbox/virtualization/forms/bulk_import.py:102 msgid "Assigned cluster" msgstr "Toegewezen cluster" -#: netbox/virtualization/forms/bulk_import.py:103 +#: netbox/virtualization/forms/bulk_import.py:109 msgid "Assigned device within cluster" msgstr "Toegewezen apparaat binnen cluster" -#: netbox/virtualization/forms/filtersets.py:183 +#: netbox/virtualization/forms/filtersets.py:188 msgid "Serial number" msgstr "Serienummer" -#: netbox/virtualization/forms/model_forms.py:153 +#: netbox/virtualization/forms/model_forms.py:158 #, python-brace-format msgid "" -"{device} belongs to a different site ({device_site}) than the cluster " -"({cluster_site})" +"{device} belongs to a different {scope_field} ({device_scope}) than the " +"cluster ({cluster_scope})" msgstr "" +"{device} behoort tot een andere {scope_field} ({device_scope}) dan het " +"cluster ({cluster_scope})" -#: netbox/virtualization/forms/model_forms.py:192 +#: netbox/virtualization/forms/model_forms.py:199 msgid "Optionally pin this VM to a specific host device within the cluster" msgstr "" "Optioneel kan deze VM worden vastgezet op een specifiek hostapparaat binnen " "het cluster" -#: netbox/virtualization/forms/model_forms.py:221 +#: netbox/virtualization/forms/model_forms.py:228 msgid "Site/Cluster" msgstr "Site/cluster" -#: netbox/virtualization/forms/model_forms.py:244 +#: netbox/virtualization/forms/model_forms.py:251 msgid "Disk size is managed via the attachment of virtual disks." msgstr "" "De schijfgrootte wordt beheerd via de koppeling van virtuele schijven." -#: netbox/virtualization/forms/model_forms.py:372 -#: netbox/virtualization/tables/virtualmachines.py:111 +#: netbox/virtualization/forms/model_forms.py:405 +#: netbox/virtualization/tables/virtualmachines.py:81 msgid "Disk" msgstr "Schijf" -#: netbox/virtualization/models/clusters.py:25 +#: netbox/virtualization/models/clusters.py:26 msgid "cluster type" msgstr "clustertype" -#: netbox/virtualization/models/clusters.py:26 +#: netbox/virtualization/models/clusters.py:27 msgid "cluster types" msgstr "clustertypen" -#: netbox/virtualization/models/clusters.py:45 +#: netbox/virtualization/models/clusters.py:43 msgid "cluster group" msgstr "clustergroep" -#: netbox/virtualization/models/clusters.py:46 +#: netbox/virtualization/models/clusters.py:44 msgid "cluster groups" msgstr "clustergroepen" -#: netbox/virtualization/models/clusters.py:121 +#: netbox/virtualization/models/clusters.py:110 msgid "cluster" msgstr "cluster" -#: netbox/virtualization/models/clusters.py:122 +#: netbox/virtualization/models/clusters.py:111 msgid "clusters" msgstr "clusters" -#: netbox/virtualization/models/clusters.py:141 +#: netbox/virtualization/models/clusters.py:137 #, python-brace-format msgid "" "{count} devices are assigned as hosts for this cluster but are not in site " @@ -15620,32 +16274,41 @@ msgstr "" "{count} apparaten zijn toegewezen als hosts voor dit cluster, maar bevinden " "zich niet op de locatie {site}" -#: netbox/virtualization/models/virtualmachines.py:123 +#: netbox/virtualization/models/clusters.py:144 +#, python-brace-format +msgid "" +"{count} devices are assigned as hosts for this cluster but are not in " +"location {location}" +msgstr "" +"{count} apparaten zijn toegewezen als hosts voor dit cluster, maar bevinden " +"zich niet op hun locatie {location}" + +#: netbox/virtualization/models/virtualmachines.py:118 msgid "memory (MB)" msgstr "geheugen (MB)" -#: netbox/virtualization/models/virtualmachines.py:128 +#: netbox/virtualization/models/virtualmachines.py:123 msgid "disk (MB)" msgstr "schijf (MB)" -#: netbox/virtualization/models/virtualmachines.py:166 +#: netbox/virtualization/models/virtualmachines.py:161 msgid "Virtual machine name must be unique per cluster." msgstr "De naam van de virtuele machine moet per cluster uniek zijn." -#: netbox/virtualization/models/virtualmachines.py:169 +#: netbox/virtualization/models/virtualmachines.py:164 msgid "virtual machine" msgstr "virtuele machine" -#: netbox/virtualization/models/virtualmachines.py:170 +#: netbox/virtualization/models/virtualmachines.py:165 msgid "virtual machines" msgstr "virtuele machines" -#: netbox/virtualization/models/virtualmachines.py:184 +#: netbox/virtualization/models/virtualmachines.py:176 msgid "A virtual machine must be assigned to a site and/or cluster." msgstr "" "Een virtuele machine moet worden toegewezen aan een site en/of cluster." -#: netbox/virtualization/models/virtualmachines.py:191 +#: netbox/virtualization/models/virtualmachines.py:183 #, python-brace-format msgid "" "The selected cluster ({cluster}) is not assigned to this site ({site})." @@ -15653,11 +16316,11 @@ msgstr "" "Het geselecteerde cluster ({cluster}) is niet toegewezen aan deze site " "({site})." -#: netbox/virtualization/models/virtualmachines.py:198 +#: netbox/virtualization/models/virtualmachines.py:190 msgid "Must specify a cluster when assigning a host device." msgstr "Moet een cluster specificeren bij het toewijzen van een hostapparaat." -#: netbox/virtualization/models/virtualmachines.py:203 +#: netbox/virtualization/models/virtualmachines.py:195 #, python-brace-format msgid "" "The selected device ({device}) is not assigned to this cluster ({cluster})." @@ -15665,7 +16328,7 @@ msgstr "" "Het geselecteerde apparaat ({device}) is niet toegewezen aan dit cluster " "({cluster})." -#: netbox/virtualization/models/virtualmachines.py:215 +#: netbox/virtualization/models/virtualmachines.py:207 #, python-brace-format msgid "" "The specified disk size ({size}) must match the aggregate size of assigned " @@ -15674,17 +16337,17 @@ msgstr "" "De opgegeven schijfgrootte ({size}) moet overeenkomen met de totale grootte " "van toegewezen virtuele schijven ({total_size})." -#: netbox/virtualization/models/virtualmachines.py:229 +#: netbox/virtualization/models/virtualmachines.py:221 #, python-brace-format msgid "Must be an IPv{family} address. ({ip} is an IPv{version} address.)" msgstr "Moet een IPv zijn{family} adres. ({ip} is een IPv{version} adres.)" -#: netbox/virtualization/models/virtualmachines.py:238 +#: netbox/virtualization/models/virtualmachines.py:230 #, python-brace-format msgid "The specified IP address ({ip}) is not assigned to this VM." msgstr "Het opgegeven IP-adres ({ip}) is niet toegewezen aan deze VM." -#: netbox/virtualization/models/virtualmachines.py:396 +#: netbox/virtualization/models/virtualmachines.py:376 #, python-brace-format msgid "" "The selected parent interface ({parent}) belongs to a different virtual " @@ -15693,7 +16356,7 @@ msgstr "" "De geselecteerde ouderinterface ({parent}) behoort tot een andere virtuele " "machine ({virtual_machine})." -#: netbox/virtualization/models/virtualmachines.py:411 +#: netbox/virtualization/models/virtualmachines.py:391 #, python-brace-format msgid "" "The selected bridge interface ({bridge}) belongs to a different virtual " @@ -15702,7 +16365,7 @@ msgstr "" "De geselecteerde bridge-interface ({bridge}) behoort tot een andere virtuele" " machine ({virtual_machine})." -#: netbox/virtualization/models/virtualmachines.py:422 +#: netbox/virtualization/models/virtualmachines.py:402 #, python-brace-format msgid "" "The untagged VLAN ({untagged_vlan}) must belong to the same site as the " @@ -15711,24 +16374,24 @@ msgstr "" "Het VLAN zonder label ({untagged_vlan}) moet tot dezelfde site behoren als " "de bovenliggende virtuele machine van de interface, of moet globaal zijn." -#: netbox/virtualization/models/virtualmachines.py:434 +#: netbox/virtualization/models/virtualmachines.py:414 msgid "size (MB)" msgstr "grootte (MB)" -#: netbox/virtualization/models/virtualmachines.py:438 +#: netbox/virtualization/models/virtualmachines.py:418 msgid "virtual disk" msgstr "virtuele schijf" -#: netbox/virtualization/models/virtualmachines.py:439 +#: netbox/virtualization/models/virtualmachines.py:419 msgid "virtual disks" msgstr "virtuele schijven" -#: netbox/virtualization/views.py:273 +#: netbox/virtualization/views.py:289 #, python-brace-format msgid "Added {count} devices to cluster {cluster}" msgstr "Toegevoegd {count} apparaten om te clusteren {cluster}" -#: netbox/virtualization/views.py:308 +#: netbox/virtualization/views.py:324 #, python-brace-format msgid "Removed {count} devices from cluster {cluster}" msgstr "Verwijderd {count} apparaten uit het cluster {cluster}" @@ -15765,14 +16428,6 @@ msgstr "L2TP" msgid "PPTP" msgstr "PPTP" -#: netbox/vpn/choices.py:64 -msgid "Hub" -msgstr "Hub" - -#: netbox/vpn/choices.py:65 -msgid "Spoke" -msgstr "Spoke" - #: netbox/vpn/choices.py:88 msgid "Aggressive" msgstr "Agressive" @@ -15890,26 +16545,26 @@ msgstr "VLAN (naam)" msgid "Tunnel group" msgstr "Tunnelgroep" -#: netbox/vpn/forms/bulk_edit.py:117 netbox/vpn/models/crypto.py:47 +#: netbox/vpn/forms/bulk_edit.py:117 netbox/vpn/models/crypto.py:48 msgid "SA lifetime" msgstr "Een leven lang" -#: netbox/vpn/forms/bulk_edit.py:151 netbox/wireless/forms/bulk_edit.py:79 -#: netbox/wireless/forms/bulk_edit.py:126 -#: netbox/wireless/forms/filtersets.py:64 -#: netbox/wireless/forms/filtersets.py:98 +#: netbox/vpn/forms/bulk_edit.py:151 netbox/wireless/forms/bulk_edit.py:81 +#: netbox/wireless/forms/bulk_edit.py:129 +#: netbox/wireless/forms/filtersets.py:67 +#: netbox/wireless/forms/filtersets.py:126 msgid "Pre-shared key" msgstr "Vooraf gedeelde sleutel" #: netbox/vpn/forms/bulk_edit.py:237 netbox/vpn/forms/bulk_import.py:239 -#: netbox/vpn/forms/filtersets.py:199 netbox/vpn/forms/model_forms.py:370 +#: netbox/vpn/forms/filtersets.py:199 netbox/vpn/forms/model_forms.py:373 #: netbox/vpn/models/crypto.py:104 msgid "IKE policy" msgstr "IKE-beleid" #: netbox/vpn/forms/bulk_edit.py:242 netbox/vpn/forms/bulk_import.py:244 -#: netbox/vpn/forms/filtersets.py:204 netbox/vpn/forms/model_forms.py:374 -#: netbox/vpn/models/crypto.py:209 +#: netbox/vpn/forms/filtersets.py:204 netbox/vpn/forms/model_forms.py:377 +#: netbox/vpn/models/crypto.py:207 msgid "IPSec policy" msgstr "IPsec-beleid" @@ -15917,10 +16572,6 @@ msgstr "IPsec-beleid" msgid "Tunnel encapsulation" msgstr "Inkapseling van tunnels" -#: netbox/vpn/forms/bulk_import.py:83 -msgid "Operational role" -msgstr "Operationele rol" - #: netbox/vpn/forms/bulk_import.py:90 msgid "Parent device of assigned interface" msgstr "Ouderapparaat met toegewezen interface" @@ -15937,7 +16588,7 @@ msgstr "Interface voor apparaat of virtuele machine" msgid "IKE proposal(s)" msgstr "IKE-voorstel (en)" -#: netbox/vpn/forms/bulk_import.py:215 netbox/vpn/models/crypto.py:197 +#: netbox/vpn/forms/bulk_import.py:215 netbox/vpn/models/crypto.py:195 msgid "Diffie-Hellman group for Perfect Forward Secrecy" msgstr "Diffie-Hellman-groep voor Perfect Forward Secrecy" @@ -15983,7 +16634,7 @@ msgid "IKE version" msgstr "IKE-versie" #: netbox/vpn/forms/filtersets.py:142 netbox/vpn/forms/filtersets.py:175 -#: netbox/vpn/forms/model_forms.py:298 netbox/vpn/forms/model_forms.py:334 +#: netbox/vpn/forms/model_forms.py:299 netbox/vpn/forms/model_forms.py:336 msgid "Proposal" msgstr "Voorstel" @@ -15991,32 +16642,28 @@ msgstr "Voorstel" msgid "Assigned Object Type" msgstr "Toegewezen objecttype" -#: netbox/vpn/forms/model_forms.py:95 netbox/vpn/forms/model_forms.py:130 -#: netbox/vpn/forms/model_forms.py:240 netbox/vpn/tables/tunnels.py:91 +#: netbox/vpn/forms/model_forms.py:96 netbox/vpn/forms/model_forms.py:131 +#: netbox/vpn/forms/model_forms.py:241 netbox/vpn/tables/tunnels.py:91 msgid "Tunnel interface" msgstr "Tunnelinterface" -#: netbox/vpn/forms/model_forms.py:150 +#: netbox/vpn/forms/model_forms.py:151 msgid "First Termination" msgstr "Eerste beëindiging" -#: netbox/vpn/forms/model_forms.py:153 +#: netbox/vpn/forms/model_forms.py:154 msgid "Second Termination" msgstr "Tweede beëindiging" -#: netbox/vpn/forms/model_forms.py:197 +#: netbox/vpn/forms/model_forms.py:198 msgid "This parameter is required when defining a termination." msgstr "Deze parameter is vereist voor het definiëren van een beëindiging." -#: netbox/vpn/forms/model_forms.py:320 netbox/vpn/forms/model_forms.py:356 -msgid "Policy" -msgstr "Beleid" - -#: netbox/vpn/forms/model_forms.py:487 +#: netbox/vpn/forms/model_forms.py:490 msgid "A termination must specify an interface or VLAN." msgstr "Een beëindiging moet een interface of VLAN specificeren." -#: netbox/vpn/forms/model_forms.py:489 +#: netbox/vpn/forms/model_forms.py:492 msgid "" "A termination can only have one terminating object (an interface or VLAN)." msgstr "" @@ -16031,31 +16678,31 @@ msgstr "coderingsalgoritme" msgid "authentication algorithm" msgstr "authenticatie-algoritme" -#: netbox/vpn/models/crypto.py:44 +#: netbox/vpn/models/crypto.py:45 msgid "Diffie-Hellman group ID" msgstr "Diffie-Hellman groeps-ID" -#: netbox/vpn/models/crypto.py:50 +#: netbox/vpn/models/crypto.py:51 msgid "Security association lifetime (in seconds)" msgstr "Levensduur van de beveiligingsvereniging (in seconden)" -#: netbox/vpn/models/crypto.py:59 +#: netbox/vpn/models/crypto.py:60 msgid "IKE proposal" msgstr "IKE-voorstel" -#: netbox/vpn/models/crypto.py:60 +#: netbox/vpn/models/crypto.py:61 msgid "IKE proposals" msgstr "IKE-voorstellen" -#: netbox/vpn/models/crypto.py:76 +#: netbox/vpn/models/crypto.py:75 msgid "version" msgstr "versie" -#: netbox/vpn/models/crypto.py:88 netbox/vpn/models/crypto.py:190 +#: netbox/vpn/models/crypto.py:88 netbox/vpn/models/crypto.py:188 msgid "proposals" msgstr "voorstellen" -#: netbox/vpn/models/crypto.py:91 netbox/wireless/models.py:39 +#: netbox/vpn/models/crypto.py:91 netbox/wireless/models.py:41 msgid "pre-shared key" msgstr "vooraf gedeelde sleutel" @@ -16063,19 +16710,19 @@ msgstr "vooraf gedeelde sleutel" msgid "IKE policies" msgstr "IKE-beleid" -#: netbox/vpn/models/crypto.py:118 +#: netbox/vpn/models/crypto.py:115 msgid "Mode is required for selected IKE version" msgstr "Modus is vereist voor de geselecteerde IKE-versie" -#: netbox/vpn/models/crypto.py:122 +#: netbox/vpn/models/crypto.py:119 msgid "Mode cannot be used for selected IKE version" msgstr "De modus kan niet worden gebruikt voor de geselecteerde IKE-versie" -#: netbox/vpn/models/crypto.py:136 +#: netbox/vpn/models/crypto.py:134 msgid "encryption" msgstr "encryptie" -#: netbox/vpn/models/crypto.py:141 +#: netbox/vpn/models/crypto.py:140 msgid "authentication" msgstr "authenticatie" @@ -16095,34 +16742,34 @@ msgstr "IPsec-voorstel" msgid "IPSec proposals" msgstr "IPsec-voorstellen" -#: netbox/vpn/models/crypto.py:178 +#: netbox/vpn/models/crypto.py:175 msgid "Encryption and/or authentication algorithm must be defined" msgstr "" "Het algoritme voor versleuteling en/of authenticatie moet worden " "gedefinieerd" -#: netbox/vpn/models/crypto.py:210 +#: netbox/vpn/models/crypto.py:208 msgid "IPSec policies" msgstr "IPsec-beleid" -#: netbox/vpn/models/crypto.py:251 +#: netbox/vpn/models/crypto.py:247 msgid "IPSec profiles" msgstr "IPsec-profielen" -#: netbox/vpn/models/l2vpn.py:116 +#: netbox/vpn/models/l2vpn.py:113 msgid "L2VPN termination" msgstr "L2VPN-beëindiging" -#: netbox/vpn/models/l2vpn.py:117 +#: netbox/vpn/models/l2vpn.py:114 msgid "L2VPN terminations" msgstr "L2VPN-beëindigingen" -#: netbox/vpn/models/l2vpn.py:135 +#: netbox/vpn/models/l2vpn.py:129 #, python-brace-format msgid "L2VPN Termination already assigned ({assigned_object})" msgstr "L2VPN Beëindiging is al toegewezen ({assigned_object})" -#: netbox/vpn/models/l2vpn.py:147 +#: netbox/vpn/models/l2vpn.py:141 #, python-brace-format msgid "" "{l2vpn_type} L2VPNs cannot have more than two terminations; found " @@ -16139,35 +16786,35 @@ msgstr "tunnelgroep" msgid "tunnel groups" msgstr "tunnelgroepen" -#: netbox/vpn/models/tunnels.py:53 +#: netbox/vpn/models/tunnels.py:51 msgid "encapsulation" msgstr "inkapseling" -#: netbox/vpn/models/tunnels.py:72 +#: netbox/vpn/models/tunnels.py:70 msgid "tunnel ID" msgstr "tunnel-ID" -#: netbox/vpn/models/tunnels.py:94 +#: netbox/vpn/models/tunnels.py:92 msgid "tunnel" msgstr "tunnel" -#: netbox/vpn/models/tunnels.py:95 +#: netbox/vpn/models/tunnels.py:93 msgid "tunnels" msgstr "tunnels" -#: netbox/vpn/models/tunnels.py:153 +#: netbox/vpn/models/tunnels.py:148 msgid "An object may be terminated to only one tunnel at a time." msgstr "Een object mag slechts in één tunnel tegelijk worden afgesloten." -#: netbox/vpn/models/tunnels.py:156 +#: netbox/vpn/models/tunnels.py:151 msgid "tunnel termination" msgstr "beëindiging van de tunnel" -#: netbox/vpn/models/tunnels.py:157 +#: netbox/vpn/models/tunnels.py:152 msgid "tunnel terminations" msgstr "tunnelafsluitingen" -#: netbox/vpn/models/tunnels.py:174 +#: netbox/vpn/models/tunnels.py:169 #, python-brace-format msgid "{name} is already attached to a tunnel ({tunnel})." msgstr "{name} is al bevestigd aan een tunnel ({tunnel})." @@ -16228,51 +16875,44 @@ msgstr "WPA Personal (PSK)" msgid "WPA Enterprise" msgstr "WPA Enterprise" -#: netbox/wireless/forms/bulk_edit.py:73 -#: netbox/wireless/forms/bulk_edit.py:120 -#: netbox/wireless/forms/bulk_import.py:68 -#: netbox/wireless/forms/bulk_import.py:71 -#: netbox/wireless/forms/bulk_import.py:110 -#: netbox/wireless/forms/bulk_import.py:113 -#: netbox/wireless/forms/filtersets.py:59 -#: netbox/wireless/forms/filtersets.py:93 +#: netbox/wireless/forms/bulk_edit.py:75 +#: netbox/wireless/forms/bulk_edit.py:123 +#: netbox/wireless/forms/bulk_import.py:70 +#: netbox/wireless/forms/bulk_import.py:73 +#: netbox/wireless/forms/bulk_import.py:115 +#: netbox/wireless/forms/bulk_import.py:118 +#: netbox/wireless/forms/filtersets.py:62 +#: netbox/wireless/forms/filtersets.py:121 msgid "Authentication cipher" msgstr "Authenticatiecijfer" -#: netbox/wireless/forms/bulk_edit.py:134 -#: netbox/wireless/forms/bulk_import.py:116 -#: netbox/wireless/forms/bulk_import.py:119 -#: netbox/wireless/forms/filtersets.py:106 -msgid "Distance unit" -msgstr "Afstandseenheid" - -#: netbox/wireless/forms/bulk_import.py:52 +#: netbox/wireless/forms/bulk_import.py:54 msgid "Bridged VLAN" msgstr "Overbrugd VLAN" -#: netbox/wireless/forms/bulk_import.py:89 -#: netbox/wireless/tables/wirelesslink.py:28 +#: netbox/wireless/forms/bulk_import.py:94 +#: netbox/wireless/tables/wirelesslink.py:27 msgid "Interface A" msgstr "Interface A" -#: netbox/wireless/forms/bulk_import.py:93 -#: netbox/wireless/tables/wirelesslink.py:37 +#: netbox/wireless/forms/bulk_import.py:98 +#: netbox/wireless/tables/wirelesslink.py:36 msgid "Interface B" msgstr "Interface B" -#: netbox/wireless/forms/model_forms.py:161 +#: netbox/wireless/forms/model_forms.py:164 msgid "Side B" msgstr "Kant B" -#: netbox/wireless/models.py:31 +#: netbox/wireless/models.py:32 msgid "authentication cipher" msgstr "authenticatiecijfer" -#: netbox/wireless/models.py:69 +#: netbox/wireless/models.py:72 msgid "wireless LAN group" msgstr "draadloze LAN-groep" -#: netbox/wireless/models.py:70 +#: netbox/wireless/models.py:73 msgid "wireless LAN groups" msgstr "draadloze LAN-groepen" @@ -16280,35 +16920,23 @@ msgstr "draadloze LAN-groepen" msgid "wireless LAN" msgstr "draadloos LAN" -#: netbox/wireless/models.py:144 +#: netbox/wireless/models.py:141 msgid "interface A" msgstr "interface A" -#: netbox/wireless/models.py:151 +#: netbox/wireless/models.py:148 msgid "interface B" msgstr "interface B" -#: netbox/wireless/models.py:165 -msgid "distance" -msgstr "afstand" - -#: netbox/wireless/models.py:172 -msgid "distance unit" -msgstr "afstandseenheid" - -#: netbox/wireless/models.py:219 +#: netbox/wireless/models.py:196 msgid "wireless link" msgstr "draadloze link" -#: netbox/wireless/models.py:220 +#: netbox/wireless/models.py:197 msgid "wireless links" msgstr "draadloze verbindingen" -#: netbox/wireless/models.py:236 -msgid "Must specify a unit when setting a wireless distance" -msgstr "" - -#: netbox/wireless/models.py:242 netbox/wireless/models.py:248 +#: netbox/wireless/models.py:212 netbox/wireless/models.py:218 #, python-brace-format msgid "{type} is not a wireless interface." msgstr "{type} is geen draadloze interface." diff --git a/netbox/translations/pl/LC_MESSAGES/django.mo b/netbox/translations/pl/LC_MESSAGES/django.mo index d3624c438cd257ddfea7ae82fb12874117205664..94fb80f1ce7cbf6580aba9d28bb31d24142896de 100644 GIT binary patch delta 75363 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


    51<{K*z8$Ci7=Mh?`!>^w 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 G`Tqd99-=7# delta 67129 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

    SVrvx*7A7c22IeVINTU%qnmO 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 W2s^pOn>g%PQBOR7m95?`5&sV$h02)# diff --git a/netbox/translations/pl/LC_MESSAGES/django.po b/netbox/translations/pl/LC_MESSAGES/django.po index 484c8e829..27087dde4 100644 --- a/netbox/translations/pl/LC_MESSAGES/django.po +++ b/netbox/translations/pl/LC_MESSAGES/django.po @@ -14,7 +14,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-01-04 05:02+0000\n" +"POT-Creation-Date: 2025-03-06 05:01+0000\n" "PO-Revision-Date: 2023-10-30 17:48+0000\n" "Last-Translator: Jeremy Stretch, 2025\n" "Language-Team: Polish (https://app.transifex.com/netbox-community/teams/178115/pl/)\n" @@ -34,7 +34,7 @@ msgstr "Klucz" msgid "Write Enabled" msgstr "Zapis włączony" -#: netbox/account/tables.py:35 netbox/core/choices.py:86 +#: netbox/account/tables.py:35 netbox/core/choices.py:102 #: netbox/core/tables/jobs.py:29 netbox/core/tables/tasks.py:79 #: netbox/extras/tables/tables.py:335 netbox/extras/tables/tables.py:566 #: netbox/templates/account/token.html:43 @@ -46,6 +46,7 @@ msgstr "Zapis włączony" #: netbox/templates/extras/htmx/script_result.html:12 #: netbox/templates/extras/journalentry.html:22 #: netbox/templates/generic/object.html:58 +#: netbox/templates/htmx/quick_add_created.html:7 #: netbox/templates/users/token.html:35 msgid "Created" msgstr "Utworzony" @@ -91,34 +92,35 @@ msgstr "Twoje hasło zostało pomyślnie zmienione." #: netbox/circuits/choices.py:21 netbox/dcim/choices.py:20 #: netbox/dcim/choices.py:102 netbox/dcim/choices.py:185 -#: netbox/dcim/choices.py:237 netbox/dcim/choices.py:1532 -#: netbox/dcim/choices.py:1608 netbox/dcim/choices.py:1658 -#: netbox/virtualization/choices.py:20 netbox/virtualization/choices.py:45 -#: netbox/vpn/choices.py:18 +#: netbox/dcim/choices.py:237 netbox/dcim/choices.py:1534 +#: netbox/dcim/choices.py:1592 netbox/dcim/choices.py:1642 +#: netbox/dcim/choices.py:1664 netbox/virtualization/choices.py:20 +#: netbox/virtualization/choices.py:46 netbox/vpn/choices.py:18 msgid "Planned" msgstr "Planowane" -#: netbox/circuits/choices.py:22 netbox/netbox/navigation/menu.py:305 +#: netbox/circuits/choices.py:22 netbox/netbox/navigation/menu.py:326 msgid "Provisioning" msgstr "Zaopatrzenie" #: netbox/circuits/choices.py:23 netbox/core/tables/tasks.py:22 #: netbox/dcim/choices.py:22 netbox/dcim/choices.py:103 #: netbox/dcim/choices.py:184 netbox/dcim/choices.py:236 -#: netbox/dcim/choices.py:1607 netbox/dcim/choices.py:1657 -#: netbox/extras/tables/tables.py:495 netbox/ipam/choices.py:31 -#: netbox/ipam/choices.py:49 netbox/ipam/choices.py:69 -#: netbox/ipam/choices.py:154 netbox/templates/extras/configcontext.html:25 +#: netbox/dcim/choices.py:1591 netbox/dcim/choices.py:1641 +#: netbox/dcim/choices.py:1663 netbox/extras/tables/tables.py:495 +#: netbox/ipam/choices.py:31 netbox/ipam/choices.py:49 +#: netbox/ipam/choices.py:69 netbox/ipam/choices.py:154 +#: netbox/templates/extras/configcontext.html:25 #: netbox/templates/users/user.html:37 netbox/users/forms/bulk_edit.py:38 -#: netbox/virtualization/choices.py:22 netbox/virtualization/choices.py:44 +#: netbox/virtualization/choices.py:22 netbox/virtualization/choices.py:45 #: netbox/vpn/choices.py:19 netbox/wireless/choices.py:25 msgid "Active" msgstr "Aktywny" #: netbox/circuits/choices.py:24 netbox/dcim/choices.py:183 -#: netbox/dcim/choices.py:235 netbox/dcim/choices.py:1606 -#: netbox/dcim/choices.py:1659 netbox/virtualization/choices.py:24 -#: netbox/virtualization/choices.py:43 +#: netbox/dcim/choices.py:235 netbox/dcim/choices.py:1590 +#: netbox/dcim/choices.py:1643 netbox/dcim/choices.py:1662 +#: netbox/virtualization/choices.py:24 netbox/virtualization/choices.py:44 msgid "Offline" msgstr "Nieaktywne" @@ -130,7 +132,9 @@ msgstr "Odstąpienie od zaopatrzenia" msgid "Decommissioned" msgstr "Wycofane ze służby" -#: netbox/circuits/choices.py:90 netbox/dcim/choices.py:1619 +#: netbox/circuits/choices.py:90 netbox/dcim/choices.py:1603 +#: netbox/templates/dcim/interface.html:135 +#: netbox/templates/virtualization/vminterface.html:77 #: netbox/tenancy/choices.py:17 msgid "Primary" msgstr "Pierwszorzędny" @@ -148,195 +152,207 @@ msgstr "Trzeciorzędny" msgid "Inactive" msgstr "Nieaktywny" -#: netbox/circuits/filtersets.py:31 netbox/circuits/filtersets.py:198 -#: netbox/dcim/filtersets.py:98 netbox/dcim/filtersets.py:152 -#: netbox/dcim/filtersets.py:212 netbox/dcim/filtersets.py:333 -#: netbox/dcim/filtersets.py:464 netbox/dcim/filtersets.py:1021 -#: netbox/dcim/filtersets.py:1368 netbox/dcim/filtersets.py:1903 -#: netbox/dcim/filtersets.py:2146 netbox/dcim/filtersets.py:2204 -#: netbox/ipam/filtersets.py:341 netbox/ipam/filtersets.py:961 -#: netbox/virtualization/filtersets.py:45 -#: netbox/virtualization/filtersets.py:173 netbox/vpn/filtersets.py:358 +#: netbox/circuits/choices.py:107 netbox/templates/dcim/interface.html:275 +#: netbox/vpn/choices.py:63 +msgid "Peer" +msgstr "Peer" + +#: netbox/circuits/choices.py:108 netbox/vpn/choices.py:64 +msgid "Hub" +msgstr "Piasta" + +#: netbox/circuits/choices.py:109 netbox/vpn/choices.py:65 +msgid "Spoke" +msgstr "Mówił" + +#: netbox/circuits/filtersets.py:37 netbox/circuits/filtersets.py:204 +#: netbox/circuits/filtersets.py:284 netbox/dcim/base_filtersets.py:22 +#: netbox/dcim/filtersets.py:99 netbox/dcim/filtersets.py:153 +#: netbox/dcim/filtersets.py:213 netbox/dcim/filtersets.py:334 +#: netbox/dcim/filtersets.py:465 netbox/dcim/filtersets.py:1022 +#: netbox/dcim/filtersets.py:1370 netbox/dcim/filtersets.py:2027 +#: netbox/dcim/filtersets.py:2270 netbox/dcim/filtersets.py:2328 +#: netbox/ipam/filtersets.py:928 netbox/virtualization/filtersets.py:139 +#: netbox/vpn/filtersets.py:358 msgid "Region (ID)" msgstr "Region (ID)" -#: netbox/circuits/filtersets.py:38 netbox/circuits/filtersets.py:205 -#: netbox/dcim/filtersets.py:105 netbox/dcim/filtersets.py:158 -#: netbox/dcim/filtersets.py:219 netbox/dcim/filtersets.py:340 -#: netbox/dcim/filtersets.py:471 netbox/dcim/filtersets.py:1028 -#: netbox/dcim/filtersets.py:1375 netbox/dcim/filtersets.py:1910 -#: netbox/dcim/filtersets.py:2153 netbox/dcim/filtersets.py:2211 -#: netbox/extras/filtersets.py:509 netbox/ipam/filtersets.py:348 -#: netbox/ipam/filtersets.py:968 netbox/virtualization/filtersets.py:52 -#: netbox/virtualization/filtersets.py:180 netbox/vpn/filtersets.py:353 +#: netbox/circuits/filtersets.py:44 netbox/circuits/filtersets.py:211 +#: netbox/circuits/filtersets.py:291 netbox/dcim/base_filtersets.py:29 +#: netbox/dcim/filtersets.py:106 netbox/dcim/filtersets.py:159 +#: netbox/dcim/filtersets.py:220 netbox/dcim/filtersets.py:341 +#: netbox/dcim/filtersets.py:472 netbox/dcim/filtersets.py:1029 +#: netbox/dcim/filtersets.py:1377 netbox/dcim/filtersets.py:2034 +#: netbox/dcim/filtersets.py:2277 netbox/dcim/filtersets.py:2335 +#: netbox/extras/filtersets.py:509 netbox/ipam/filtersets.py:935 +#: netbox/virtualization/filtersets.py:146 netbox/vpn/filtersets.py:353 msgid "Region (slug)" msgstr "Region (identyfikator)" -#: netbox/circuits/filtersets.py:44 netbox/circuits/filtersets.py:211 -#: netbox/dcim/filtersets.py:128 netbox/dcim/filtersets.py:225 -#: netbox/dcim/filtersets.py:346 netbox/dcim/filtersets.py:477 -#: netbox/dcim/filtersets.py:1034 netbox/dcim/filtersets.py:1381 -#: netbox/dcim/filtersets.py:1916 netbox/dcim/filtersets.py:2159 -#: netbox/dcim/filtersets.py:2217 netbox/ipam/filtersets.py:354 -#: netbox/ipam/filtersets.py:974 netbox/virtualization/filtersets.py:58 -#: netbox/virtualization/filtersets.py:186 +#: netbox/circuits/filtersets.py:50 netbox/circuits/filtersets.py:217 +#: netbox/circuits/filtersets.py:297 netbox/dcim/base_filtersets.py:35 +#: netbox/dcim/filtersets.py:129 netbox/dcim/filtersets.py:226 +#: netbox/dcim/filtersets.py:347 netbox/dcim/filtersets.py:478 +#: netbox/dcim/filtersets.py:1035 netbox/dcim/filtersets.py:1383 +#: netbox/dcim/filtersets.py:2040 netbox/dcim/filtersets.py:2283 +#: netbox/dcim/filtersets.py:2341 netbox/ipam/filtersets.py:941 +#: netbox/virtualization/filtersets.py:152 msgid "Site group (ID)" msgstr "Grupa witryn (ID)" -#: netbox/circuits/filtersets.py:51 netbox/circuits/filtersets.py:218 -#: netbox/dcim/filtersets.py:135 netbox/dcim/filtersets.py:232 -#: netbox/dcim/filtersets.py:353 netbox/dcim/filtersets.py:484 -#: netbox/dcim/filtersets.py:1041 netbox/dcim/filtersets.py:1388 -#: netbox/dcim/filtersets.py:1923 netbox/dcim/filtersets.py:2166 -#: netbox/dcim/filtersets.py:2224 netbox/extras/filtersets.py:515 -#: netbox/ipam/filtersets.py:361 netbox/ipam/filtersets.py:981 -#: netbox/virtualization/filtersets.py:65 -#: netbox/virtualization/filtersets.py:193 +#: netbox/circuits/filtersets.py:57 netbox/circuits/filtersets.py:224 +#: netbox/circuits/filtersets.py:304 netbox/dcim/base_filtersets.py:42 +#: netbox/dcim/filtersets.py:136 netbox/dcim/filtersets.py:233 +#: netbox/dcim/filtersets.py:354 netbox/dcim/filtersets.py:485 +#: netbox/dcim/filtersets.py:1042 netbox/dcim/filtersets.py:1390 +#: netbox/dcim/filtersets.py:2047 netbox/dcim/filtersets.py:2290 +#: netbox/dcim/filtersets.py:2348 netbox/extras/filtersets.py:515 +#: netbox/ipam/filtersets.py:948 netbox/virtualization/filtersets.py:159 msgid "Site group (slug)" msgstr "Grupa terenów (identyfikator)" -#: netbox/circuits/filtersets.py:56 netbox/circuits/forms/bulk_edit.py:188 -#: netbox/circuits/forms/bulk_edit.py:216 -#: netbox/circuits/forms/bulk_import.py:124 -#: netbox/circuits/forms/filtersets.py:51 -#: netbox/circuits/forms/filtersets.py:171 -#: netbox/circuits/forms/filtersets.py:209 -#: netbox/circuits/forms/model_forms.py:138 -#: netbox/circuits/forms/model_forms.py:154 -#: netbox/circuits/tables/circuits.py:113 netbox/dcim/forms/bulk_edit.py:169 -#: netbox/dcim/forms/bulk_edit.py:330 netbox/dcim/forms/bulk_edit.py:683 -#: netbox/dcim/forms/bulk_edit.py:888 netbox/dcim/forms/bulk_import.py:131 -#: netbox/dcim/forms/bulk_import.py:230 netbox/dcim/forms/bulk_import.py:331 -#: netbox/dcim/forms/bulk_import.py:562 netbox/dcim/forms/bulk_import.py:1333 -#: netbox/dcim/forms/bulk_import.py:1361 netbox/dcim/forms/filtersets.py:87 -#: netbox/dcim/forms/filtersets.py:225 netbox/dcim/forms/filtersets.py:342 -#: netbox/dcim/forms/filtersets.py:439 netbox/dcim/forms/filtersets.py:753 -#: netbox/dcim/forms/filtersets.py:997 netbox/dcim/forms/filtersets.py:1021 -#: netbox/dcim/forms/filtersets.py:1111 netbox/dcim/forms/filtersets.py:1149 -#: netbox/dcim/forms/filtersets.py:1584 netbox/dcim/forms/filtersets.py:1608 -#: netbox/dcim/forms/filtersets.py:1632 netbox/dcim/forms/model_forms.py:137 -#: netbox/dcim/forms/model_forms.py:165 netbox/dcim/forms/model_forms.py:238 -#: netbox/dcim/forms/model_forms.py:463 netbox/dcim/forms/model_forms.py:723 -#: netbox/dcim/forms/object_create.py:383 netbox/dcim/tables/devices.py:153 +#: netbox/circuits/filtersets.py:62 netbox/circuits/forms/filtersets.py:59 +#: netbox/circuits/forms/filtersets.py:182 +#: netbox/circuits/forms/filtersets.py:240 +#: netbox/circuits/tables/circuits.py:129 netbox/dcim/forms/bulk_edit.py:172 +#: netbox/dcim/forms/bulk_edit.py:333 netbox/dcim/forms/bulk_edit.py:686 +#: netbox/dcim/forms/bulk_edit.py:891 netbox/dcim/forms/bulk_import.py:133 +#: netbox/dcim/forms/bulk_import.py:232 netbox/dcim/forms/bulk_import.py:333 +#: netbox/dcim/forms/bulk_import.py:567 netbox/dcim/forms/bulk_import.py:1430 +#: netbox/dcim/forms/bulk_import.py:1458 netbox/dcim/forms/filtersets.py:88 +#: netbox/dcim/forms/filtersets.py:226 netbox/dcim/forms/filtersets.py:343 +#: netbox/dcim/forms/filtersets.py:440 netbox/dcim/forms/filtersets.py:754 +#: netbox/dcim/forms/filtersets.py:998 netbox/dcim/forms/filtersets.py:1022 +#: netbox/dcim/forms/filtersets.py:1112 netbox/dcim/forms/filtersets.py:1150 +#: netbox/dcim/forms/filtersets.py:1622 netbox/dcim/forms/filtersets.py:1646 +#: netbox/dcim/forms/filtersets.py:1670 netbox/dcim/forms/model_forms.py:141 +#: netbox/dcim/forms/model_forms.py:169 netbox/dcim/forms/model_forms.py:243 +#: netbox/dcim/forms/model_forms.py:473 netbox/dcim/forms/model_forms.py:734 +#: netbox/dcim/forms/object_create.py:383 netbox/dcim/tables/devices.py:164 #: netbox/dcim/tables/power.py:26 netbox/dcim/tables/power.py:93 -#: netbox/dcim/tables/racks.py:122 netbox/dcim/tables/racks.py:207 -#: netbox/dcim/tables/sites.py:134 netbox/extras/filtersets.py:525 -#: netbox/ipam/forms/bulk_edit.py:218 netbox/ipam/forms/bulk_edit.py:285 -#: netbox/ipam/forms/bulk_edit.py:484 netbox/ipam/forms/bulk_import.py:171 -#: netbox/ipam/forms/bulk_import.py:453 netbox/ipam/forms/filtersets.py:153 -#: netbox/ipam/forms/filtersets.py:231 netbox/ipam/forms/filtersets.py:432 -#: netbox/ipam/forms/filtersets.py:489 netbox/ipam/forms/model_forms.py:205 -#: netbox/ipam/forms/model_forms.py:669 netbox/ipam/tables/ip.py:245 -#: netbox/ipam/tables/vlans.py:118 netbox/ipam/tables/vlans.py:221 -#: netbox/templates/circuits/inc/circuit_termination_fields.html:6 -#: netbox/templates/dcim/device.html:22 +#: netbox/dcim/tables/racks.py:121 netbox/dcim/tables/racks.py:206 +#: netbox/dcim/tables/sites.py:133 netbox/extras/filtersets.py:525 +#: netbox/ipam/forms/bulk_edit.py:468 netbox/ipam/forms/bulk_import.py:452 +#: netbox/ipam/forms/filtersets.py:155 netbox/ipam/forms/filtersets.py:229 +#: netbox/ipam/forms/filtersets.py:435 netbox/ipam/forms/filtersets.py:530 +#: netbox/ipam/forms/model_forms.py:679 netbox/ipam/tables/vlans.py:87 +#: netbox/ipam/tables/vlans.py:197 netbox/templates/dcim/device.html:22 #: netbox/templates/dcim/inc/cable_termination.html:8 #: netbox/templates/dcim/inc/cable_termination.html:33 #: netbox/templates/dcim/location.html:37 #: netbox/templates/dcim/powerpanel.html:22 netbox/templates/dcim/rack.html:20 #: netbox/templates/dcim/rackreservation.html:28 -#: netbox/templates/dcim/site.html:28 netbox/templates/ipam/prefix.html:56 -#: netbox/templates/ipam/vlan.html:23 netbox/templates/ipam/vlan_edit.html:40 -#: netbox/templates/virtualization/cluster.html:42 +#: netbox/templates/dcim/site.html:28 netbox/templates/ipam/vlan.html:23 +#: netbox/templates/ipam/vlan_edit.html:48 #: netbox/templates/virtualization/virtualmachine.html:95 -#: netbox/virtualization/forms/bulk_edit.py:91 -#: netbox/virtualization/forms/bulk_edit.py:109 -#: netbox/virtualization/forms/bulk_edit.py:124 -#: netbox/virtualization/forms/bulk_import.py:59 -#: netbox/virtualization/forms/bulk_import.py:85 -#: netbox/virtualization/forms/filtersets.py:79 -#: netbox/virtualization/forms/filtersets.py:148 -#: netbox/virtualization/forms/model_forms.py:71 +#: netbox/virtualization/forms/bulk_edit.py:106 +#: netbox/virtualization/forms/bulk_import.py:60 +#: netbox/virtualization/forms/bulk_import.py:91 +#: netbox/virtualization/forms/filtersets.py:74 +#: netbox/virtualization/forms/filtersets.py:153 #: netbox/virtualization/forms/model_forms.py:104 -#: netbox/virtualization/forms/model_forms.py:171 -#: netbox/virtualization/tables/clusters.py:77 -#: netbox/virtualization/tables/virtualmachines.py:63 -#: netbox/vpn/forms/filtersets.py:266 netbox/wireless/forms/model_forms.py:76 -#: netbox/wireless/forms/model_forms.py:118 +#: netbox/virtualization/forms/model_forms.py:178 +#: netbox/virtualization/tables/virtualmachines.py:33 +#: netbox/vpn/forms/filtersets.py:266 netbox/wireless/forms/filtersets.py:88 +#: netbox/wireless/forms/model_forms.py:79 +#: netbox/wireless/forms/model_forms.py:121 msgid "Site" msgstr "Teren" -#: netbox/circuits/filtersets.py:62 netbox/circuits/filtersets.py:229 -#: netbox/circuits/filtersets.py:274 netbox/dcim/filtersets.py:242 -#: netbox/dcim/filtersets.py:363 netbox/dcim/filtersets.py:458 -#: netbox/extras/filtersets.py:531 netbox/ipam/filtersets.py:240 -#: netbox/ipam/filtersets.py:371 netbox/ipam/filtersets.py:991 -#: netbox/virtualization/filtersets.py:75 -#: netbox/virtualization/filtersets.py:203 netbox/vpn/filtersets.py:363 +#: netbox/circuits/filtersets.py:68 netbox/circuits/filtersets.py:235 +#: netbox/circuits/filtersets.py:315 netbox/dcim/base_filtersets.py:53 +#: netbox/dcim/filtersets.py:243 netbox/dcim/filtersets.py:364 +#: netbox/dcim/filtersets.py:459 netbox/extras/filtersets.py:531 +#: netbox/ipam/filtersets.py:243 netbox/ipam/filtersets.py:958 +#: netbox/virtualization/filtersets.py:169 netbox/vpn/filtersets.py:363 msgid "Site (slug)" msgstr "Teren (identyfikator)" -#: netbox/circuits/filtersets.py:67 +#: netbox/circuits/filtersets.py:73 msgid "ASN (ID)" msgstr "ASN (ID)" -#: netbox/circuits/filtersets.py:73 netbox/circuits/forms/filtersets.py:31 -#: netbox/ipam/forms/model_forms.py:159 netbox/ipam/models/asns.py:108 -#: netbox/ipam/models/asns.py:125 netbox/ipam/tables/asn.py:41 +#: netbox/circuits/filtersets.py:79 netbox/circuits/forms/filtersets.py:39 +#: netbox/ipam/forms/model_forms.py:165 netbox/ipam/models/asns.py:105 +#: netbox/ipam/models/asns.py:122 netbox/ipam/tables/asn.py:41 #: netbox/templates/ipam/asn.html:20 msgid "ASN" msgstr "ASN" -#: netbox/circuits/filtersets.py:95 netbox/circuits/filtersets.py:122 -#: netbox/circuits/filtersets.py:156 netbox/circuits/filtersets.py:283 -#: netbox/circuits/filtersets.py:325 netbox/ipam/filtersets.py:245 +#: netbox/circuits/filtersets.py:101 netbox/circuits/filtersets.py:128 +#: netbox/circuits/filtersets.py:162 netbox/circuits/filtersets.py:338 +#: netbox/circuits/filtersets.py:406 netbox/circuits/filtersets.py:482 +#: netbox/circuits/filtersets.py:550 netbox/ipam/filtersets.py:248 msgid "Provider (ID)" msgstr "Dostawca (ID)" -#: netbox/circuits/filtersets.py:101 netbox/circuits/filtersets.py:128 -#: netbox/circuits/filtersets.py:162 netbox/circuits/filtersets.py:289 -#: netbox/circuits/filtersets.py:331 netbox/ipam/filtersets.py:251 +#: netbox/circuits/filtersets.py:107 netbox/circuits/filtersets.py:134 +#: netbox/circuits/filtersets.py:168 netbox/circuits/filtersets.py:344 +#: netbox/circuits/filtersets.py:488 netbox/circuits/filtersets.py:556 +#: netbox/ipam/filtersets.py:254 msgid "Provider (slug)" msgstr "Dostawca (identyfikator)" -#: netbox/circuits/filtersets.py:167 +#: netbox/circuits/filtersets.py:173 netbox/circuits/filtersets.py:493 +#: netbox/circuits/filtersets.py:561 msgid "Provider account (ID)" msgstr "Konto dostawcy (ID)" -#: netbox/circuits/filtersets.py:173 +#: netbox/circuits/filtersets.py:179 netbox/circuits/filtersets.py:499 +#: netbox/circuits/filtersets.py:567 msgid "Provider account (account)" msgstr "Konto dostawcy (konto)" -#: netbox/circuits/filtersets.py:178 +#: netbox/circuits/filtersets.py:184 netbox/circuits/filtersets.py:503 +#: netbox/circuits/filtersets.py:572 msgid "Provider network (ID)" msgstr "Sieć dostawcy (ID)" -#: netbox/circuits/filtersets.py:182 +#: netbox/circuits/filtersets.py:188 msgid "Circuit type (ID)" msgstr "Typ obwodu (ID)" -#: netbox/circuits/filtersets.py:188 +#: netbox/circuits/filtersets.py:194 msgid "Circuit type (slug)" msgstr "Typ obwodu (identyfikator)" -#: netbox/circuits/filtersets.py:223 netbox/circuits/filtersets.py:268 -#: netbox/dcim/filtersets.py:236 netbox/dcim/filtersets.py:357 -#: netbox/dcim/filtersets.py:452 netbox/dcim/filtersets.py:1045 -#: netbox/dcim/filtersets.py:1393 netbox/dcim/filtersets.py:1928 -#: netbox/dcim/filtersets.py:2170 netbox/dcim/filtersets.py:2229 -#: netbox/ipam/filtersets.py:234 netbox/ipam/filtersets.py:365 -#: netbox/ipam/filtersets.py:985 netbox/virtualization/filtersets.py:69 -#: netbox/virtualization/filtersets.py:197 netbox/vpn/filtersets.py:368 +#: netbox/circuits/filtersets.py:229 netbox/circuits/filtersets.py:309 +#: netbox/dcim/base_filtersets.py:47 netbox/dcim/filtersets.py:237 +#: netbox/dcim/filtersets.py:358 netbox/dcim/filtersets.py:453 +#: netbox/dcim/filtersets.py:1046 netbox/dcim/filtersets.py:1395 +#: netbox/dcim/filtersets.py:2052 netbox/dcim/filtersets.py:2294 +#: netbox/dcim/filtersets.py:2353 netbox/ipam/filtersets.py:237 +#: netbox/ipam/filtersets.py:952 netbox/virtualization/filtersets.py:163 +#: netbox/vpn/filtersets.py:368 msgid "Site (ID)" msgstr "Teren (ID)" -#: netbox/circuits/filtersets.py:233 netbox/circuits/filtersets.py:237 +#: netbox/circuits/filtersets.py:239 netbox/circuits/filtersets.py:321 +#: netbox/dcim/base_filtersets.py:59 netbox/dcim/filtersets.py:259 +#: netbox/dcim/filtersets.py:370 netbox/dcim/filtersets.py:491 +#: netbox/dcim/filtersets.py:1058 netbox/dcim/filtersets.py:1406 +#: netbox/dcim/filtersets.py:2306 +msgid "Location (ID)" +msgstr "Lokalizacja (ID)" + +#: netbox/circuits/filtersets.py:244 netbox/circuits/filtersets.py:248 msgid "Termination A (ID)" msgstr "Wypowiedzenie A (ID)" -#: netbox/circuits/filtersets.py:260 netbox/circuits/filtersets.py:320 -#: netbox/core/filtersets.py:77 netbox/core/filtersets.py:136 -#: netbox/core/filtersets.py:173 netbox/dcim/filtersets.py:751 -#: netbox/dcim/filtersets.py:1362 netbox/dcim/filtersets.py:2277 -#: netbox/extras/filtersets.py:41 netbox/extras/filtersets.py:63 -#: netbox/extras/filtersets.py:92 netbox/extras/filtersets.py:132 -#: netbox/extras/filtersets.py:181 netbox/extras/filtersets.py:209 -#: netbox/extras/filtersets.py:239 netbox/extras/filtersets.py:276 -#: netbox/extras/filtersets.py:348 netbox/extras/filtersets.py:391 -#: netbox/extras/filtersets.py:438 netbox/extras/filtersets.py:498 -#: netbox/extras/filtersets.py:657 netbox/extras/filtersets.py:703 -#: netbox/ipam/forms/model_forms.py:482 netbox/netbox/filtersets.py:282 -#: netbox/netbox/forms/__init__.py:22 netbox/netbox/forms/base.py:167 +#: netbox/circuits/filtersets.py:273 netbox/circuits/filtersets.py:375 +#: netbox/circuits/filtersets.py:537 netbox/core/filtersets.py:77 +#: netbox/core/filtersets.py:136 netbox/core/filtersets.py:173 +#: netbox/dcim/filtersets.py:752 netbox/dcim/filtersets.py:1364 +#: netbox/dcim/filtersets.py:2401 netbox/extras/filtersets.py:41 +#: netbox/extras/filtersets.py:63 netbox/extras/filtersets.py:92 +#: netbox/extras/filtersets.py:132 netbox/extras/filtersets.py:181 +#: netbox/extras/filtersets.py:209 netbox/extras/filtersets.py:239 +#: netbox/extras/filtersets.py:276 netbox/extras/filtersets.py:348 +#: netbox/extras/filtersets.py:391 netbox/extras/filtersets.py:438 +#: netbox/extras/filtersets.py:498 netbox/extras/filtersets.py:657 +#: netbox/extras/filtersets.py:703 netbox/ipam/forms/model_forms.py:492 +#: netbox/netbox/filtersets.py:286 netbox/netbox/forms/__init__.py:22 +#: netbox/netbox/forms/base.py:167 #: netbox/templates/htmx/object_selector.html:28 #: netbox/templates/inc/filter_list.html:46 #: netbox/templates/ipam/ipaddress_assign.html:29 @@ -348,97 +364,150 @@ msgstr "Wypowiedzenie A (ID)" msgid "Search" msgstr "Szukaj" -#: netbox/circuits/filtersets.py:264 netbox/circuits/forms/bulk_edit.py:172 -#: netbox/circuits/forms/bulk_edit.py:246 -#: netbox/circuits/forms/bulk_import.py:115 -#: netbox/circuits/forms/filtersets.py:198 -#: netbox/circuits/forms/filtersets.py:214 -#: netbox/circuits/forms/filtersets.py:260 -#: netbox/circuits/forms/model_forms.py:111 -#: netbox/circuits/forms/model_forms.py:133 -#: netbox/circuits/forms/model_forms.py:199 -#: netbox/circuits/tables/circuits.py:104 -#: netbox/circuits/tables/circuits.py:164 netbox/dcim/forms/connections.py:73 +#: netbox/circuits/filtersets.py:277 netbox/circuits/forms/bulk_edit.py:195 +#: netbox/circuits/forms/bulk_edit.py:284 +#: netbox/circuits/forms/bulk_import.py:128 +#: netbox/circuits/forms/filtersets.py:223 +#: netbox/circuits/forms/filtersets.py:250 +#: netbox/circuits/forms/filtersets.py:296 +#: netbox/circuits/forms/model_forms.py:139 +#: netbox/circuits/forms/model_forms.py:162 +#: netbox/circuits/forms/model_forms.py:262 +#: netbox/circuits/tables/circuits.py:108 +#: netbox/circuits/tables/circuits.py:203 netbox/dcim/forms/connections.py:73 #: netbox/templates/circuits/circuit.html:15 -#: netbox/templates/circuits/circuitgroupassignment.html:26 +#: netbox/templates/circuits/circuitgroupassignment.html:30 #: netbox/templates/circuits/circuittermination.html:19 #: netbox/templates/dcim/inc/cable_termination.html:55 #: netbox/templates/dcim/trace/circuit.html:4 msgid "Circuit" msgstr "Obwód" -#: netbox/circuits/filtersets.py:278 +#: netbox/circuits/filtersets.py:328 netbox/dcim/base_filtersets.py:66 +#: netbox/dcim/filtersets.py:266 netbox/dcim/filtersets.py:377 +#: netbox/dcim/filtersets.py:498 netbox/dcim/filtersets.py:1412 +#: netbox/extras/filtersets.py:542 +msgid "Location (slug)" +msgstr "Lokalizacja (identyfikator)" + +#: netbox/circuits/filtersets.py:333 msgid "ProviderNetwork (ID)" msgstr "Sieć dostawcy (ID)" -#: netbox/circuits/filtersets.py:335 -msgid "Circuit (ID)" -msgstr "Obwód (ID)" - -#: netbox/circuits/filtersets.py:341 +#: netbox/circuits/filtersets.py:381 msgid "Circuit (CID)" msgstr "Obwód (CID)" -#: netbox/circuits/filtersets.py:345 +#: netbox/circuits/filtersets.py:386 +msgid "Circuit (ID)" +msgstr "Obwód (ID)" + +#: netbox/circuits/filtersets.py:391 +msgid "Virtual circuit (CID)" +msgstr "Obwód wirtualny (CID)" + +#: netbox/circuits/filtersets.py:396 netbox/dcim/filtersets.py:1849 +msgid "Virtual circuit (ID)" +msgstr "Obwód wirtualny (ID)" + +#: netbox/circuits/filtersets.py:401 +msgid "Provider (name)" +msgstr "Dostawca (nazwa)" + +#: netbox/circuits/filtersets.py:410 msgid "Circuit group (ID)" msgstr "Grupa obwodów (ID)" -#: netbox/circuits/filtersets.py:351 +#: netbox/circuits/filtersets.py:416 msgid "Circuit group (slug)" msgstr "Grupa obwodów (identyfikator)" -#: netbox/circuits/forms/bulk_edit.py:30 -#: netbox/circuits/forms/filtersets.py:56 -#: netbox/circuits/forms/model_forms.py:29 -#: netbox/circuits/tables/providers.py:33 netbox/dcim/forms/bulk_edit.py:129 -#: netbox/dcim/forms/filtersets.py:195 netbox/dcim/forms/model_forms.py:123 -#: netbox/dcim/tables/sites.py:94 netbox/ipam/models/asns.py:126 -#: netbox/ipam/tables/asn.py:27 netbox/ipam/views.py:213 -#: netbox/netbox/navigation/menu.py:172 netbox/netbox/navigation/menu.py:175 +#: netbox/circuits/filtersets.py:507 +msgid "Virtual circuit type (ID)" +msgstr "Typ obwodu wirtualnego (ID)" + +#: netbox/circuits/filtersets.py:513 +msgid "Virtual circuit type (slug)" +msgstr "Typ obwodu wirtualnego (ślimak)" + +#: netbox/circuits/filtersets.py:541 netbox/circuits/forms/bulk_edit.py:355 +#: netbox/circuits/forms/bulk_import.py:249 +#: netbox/circuits/forms/filtersets.py:372 +#: netbox/circuits/forms/filtersets.py:378 +#: netbox/circuits/forms/model_forms.py:343 +#: netbox/circuits/forms/model_forms.py:358 +#: netbox/circuits/tables/virtual_circuits.py:88 +#: netbox/templates/circuits/virtualcircuit.html:20 +#: netbox/templates/circuits/virtualcircuittermination.html:38 +msgid "Virtual circuit" +msgstr "Wirtualny obwód" + +#: netbox/circuits/filtersets.py:577 netbox/dcim/filtersets.py:1269 +#: netbox/dcim/filtersets.py:1634 netbox/ipam/filtersets.py:601 +#: netbox/vpn/filtersets.py:102 netbox/vpn/filtersets.py:401 +msgid "Interface (ID)" +msgstr "Interfejs (ID)" + +#: netbox/circuits/forms/bulk_edit.py:42 +#: netbox/circuits/forms/filtersets.py:64 +#: netbox/circuits/forms/model_forms.py:42 +#: netbox/circuits/tables/providers.py:32 netbox/dcim/forms/bulk_edit.py:132 +#: netbox/dcim/forms/filtersets.py:196 netbox/dcim/forms/model_forms.py:127 +#: netbox/dcim/tables/sites.py:94 netbox/ipam/models/asns.py:123 +#: netbox/ipam/tables/asn.py:27 netbox/ipam/views.py:230 +#: netbox/netbox/navigation/menu.py:178 netbox/netbox/navigation/menu.py:181 #: netbox/templates/circuits/provider.html:23 msgid "ASNs" msgstr "ASN" -#: netbox/circuits/forms/bulk_edit.py:34 netbox/circuits/forms/bulk_edit.py:56 -#: netbox/circuits/forms/bulk_edit.py:83 -#: netbox/circuits/forms/bulk_edit.py:104 -#: netbox/circuits/forms/bulk_edit.py:164 -#: netbox/circuits/forms/bulk_edit.py:183 -#: netbox/circuits/forms/bulk_edit.py:228 netbox/core/forms/bulk_edit.py:28 -#: netbox/dcim/forms/bulk_create.py:35 netbox/dcim/forms/bulk_edit.py:74 -#: netbox/dcim/forms/bulk_edit.py:93 netbox/dcim/forms/bulk_edit.py:152 -#: netbox/dcim/forms/bulk_edit.py:193 netbox/dcim/forms/bulk_edit.py:211 -#: netbox/dcim/forms/bulk_edit.py:289 netbox/dcim/forms/bulk_edit.py:438 -#: netbox/dcim/forms/bulk_edit.py:472 netbox/dcim/forms/bulk_edit.py:487 -#: netbox/dcim/forms/bulk_edit.py:546 netbox/dcim/forms/bulk_edit.py:590 -#: netbox/dcim/forms/bulk_edit.py:624 netbox/dcim/forms/bulk_edit.py:648 -#: netbox/dcim/forms/bulk_edit.py:721 netbox/dcim/forms/bulk_edit.py:782 -#: netbox/dcim/forms/bulk_edit.py:834 netbox/dcim/forms/bulk_edit.py:857 -#: netbox/dcim/forms/bulk_edit.py:905 netbox/dcim/forms/bulk_edit.py:975 -#: netbox/dcim/forms/bulk_edit.py:1028 netbox/dcim/forms/bulk_edit.py:1063 -#: netbox/dcim/forms/bulk_edit.py:1103 netbox/dcim/forms/bulk_edit.py:1147 -#: netbox/dcim/forms/bulk_edit.py:1192 netbox/dcim/forms/bulk_edit.py:1219 -#: netbox/dcim/forms/bulk_edit.py:1237 netbox/dcim/forms/bulk_edit.py:1255 -#: netbox/dcim/forms/bulk_edit.py:1273 netbox/dcim/forms/bulk_edit.py:1725 -#: netbox/extras/forms/bulk_edit.py:39 netbox/extras/forms/bulk_edit.py:149 -#: netbox/extras/forms/bulk_edit.py:178 netbox/extras/forms/bulk_edit.py:208 -#: netbox/extras/forms/bulk_edit.py:256 netbox/extras/forms/bulk_edit.py:274 -#: netbox/extras/forms/bulk_edit.py:298 netbox/extras/forms/bulk_edit.py:312 -#: netbox/extras/forms/bulk_edit.py:339 netbox/extras/tables/tables.py:79 -#: netbox/ipam/forms/bulk_edit.py:53 netbox/ipam/forms/bulk_edit.py:73 -#: netbox/ipam/forms/bulk_edit.py:93 netbox/ipam/forms/bulk_edit.py:117 -#: netbox/ipam/forms/bulk_edit.py:146 netbox/ipam/forms/bulk_edit.py:175 -#: netbox/ipam/forms/bulk_edit.py:194 netbox/ipam/forms/bulk_edit.py:276 -#: netbox/ipam/forms/bulk_edit.py:321 netbox/ipam/forms/bulk_edit.py:369 -#: netbox/ipam/forms/bulk_edit.py:412 netbox/ipam/forms/bulk_edit.py:428 -#: netbox/ipam/forms/bulk_edit.py:516 netbox/ipam/forms/bulk_edit.py:547 +#: netbox/circuits/forms/bulk_edit.py:46 netbox/circuits/forms/bulk_edit.py:68 +#: netbox/circuits/forms/bulk_edit.py:95 +#: netbox/circuits/forms/bulk_edit.py:116 +#: netbox/circuits/forms/bulk_edit.py:187 +#: netbox/circuits/forms/bulk_edit.py:207 +#: netbox/circuits/forms/bulk_edit.py:266 +#: netbox/circuits/forms/bulk_edit.py:307 +#: netbox/circuits/forms/bulk_edit.py:347 +#: netbox/circuits/forms/bulk_edit.py:371 netbox/core/forms/bulk_edit.py:28 +#: netbox/dcim/forms/bulk_create.py:35 netbox/dcim/forms/bulk_edit.py:77 +#: netbox/dcim/forms/bulk_edit.py:96 netbox/dcim/forms/bulk_edit.py:155 +#: netbox/dcim/forms/bulk_edit.py:196 netbox/dcim/forms/bulk_edit.py:214 +#: netbox/dcim/forms/bulk_edit.py:292 netbox/dcim/forms/bulk_edit.py:441 +#: netbox/dcim/forms/bulk_edit.py:475 netbox/dcim/forms/bulk_edit.py:490 +#: netbox/dcim/forms/bulk_edit.py:549 netbox/dcim/forms/bulk_edit.py:593 +#: netbox/dcim/forms/bulk_edit.py:627 netbox/dcim/forms/bulk_edit.py:651 +#: netbox/dcim/forms/bulk_edit.py:724 netbox/dcim/forms/bulk_edit.py:785 +#: netbox/dcim/forms/bulk_edit.py:837 netbox/dcim/forms/bulk_edit.py:860 +#: netbox/dcim/forms/bulk_edit.py:908 netbox/dcim/forms/bulk_edit.py:978 +#: netbox/dcim/forms/bulk_edit.py:1031 netbox/dcim/forms/bulk_edit.py:1066 +#: netbox/dcim/forms/bulk_edit.py:1106 netbox/dcim/forms/bulk_edit.py:1150 +#: netbox/dcim/forms/bulk_edit.py:1195 netbox/dcim/forms/bulk_edit.py:1222 +#: netbox/dcim/forms/bulk_edit.py:1240 netbox/dcim/forms/bulk_edit.py:1258 +#: netbox/dcim/forms/bulk_edit.py:1276 netbox/dcim/forms/bulk_edit.py:1746 +#: netbox/dcim/forms/bulk_edit.py:1787 netbox/extras/forms/bulk_edit.py:39 +#: netbox/extras/forms/bulk_edit.py:149 netbox/extras/forms/bulk_edit.py:178 +#: netbox/extras/forms/bulk_edit.py:208 netbox/extras/forms/bulk_edit.py:256 +#: netbox/extras/forms/bulk_edit.py:274 netbox/extras/forms/bulk_edit.py:298 +#: netbox/extras/forms/bulk_edit.py:312 netbox/extras/forms/bulk_edit.py:339 +#: netbox/extras/tables/tables.py:79 netbox/ipam/forms/bulk_edit.py:56 +#: netbox/ipam/forms/bulk_edit.py:76 netbox/ipam/forms/bulk_edit.py:96 +#: netbox/ipam/forms/bulk_edit.py:120 netbox/ipam/forms/bulk_edit.py:149 +#: netbox/ipam/forms/bulk_edit.py:178 netbox/ipam/forms/bulk_edit.py:197 +#: netbox/ipam/forms/bulk_edit.py:260 netbox/ipam/forms/bulk_edit.py:305 +#: netbox/ipam/forms/bulk_edit.py:353 netbox/ipam/forms/bulk_edit.py:396 +#: netbox/ipam/forms/bulk_edit.py:412 netbox/ipam/forms/bulk_edit.py:500 +#: netbox/ipam/forms/bulk_edit.py:532 netbox/ipam/forms/bulk_edit.py:575 +#: netbox/ipam/tables/vlans.py:240 netbox/ipam/tables/vlans.py:267 #: netbox/templates/account/token.html:35 -#: netbox/templates/circuits/circuit.html:59 +#: netbox/templates/circuits/circuit.html:69 #: netbox/templates/circuits/circuitgroup.html:32 #: netbox/templates/circuits/circuittype.html:26 -#: netbox/templates/circuits/inc/circuit_termination_fields.html:88 +#: netbox/templates/circuits/inc/circuit_termination_fields.html:83 #: netbox/templates/circuits/provider.html:33 #: netbox/templates/circuits/providernetwork.html:32 +#: netbox/templates/circuits/virtualcircuit.html:56 +#: netbox/templates/circuits/virtualcircuittermination.html:68 +#: netbox/templates/circuits/virtualcircuittype.html:26 #: netbox/templates/core/datasource.html:54 #: netbox/templates/core/plugin.html:80 netbox/templates/dcim/cable.html:36 #: netbox/templates/dcim/consoleport.html:44 @@ -449,13 +518,14 @@ msgstr "ASN" #: netbox/templates/dcim/devicetype.html:33 #: netbox/templates/dcim/frontport.html:58 #: netbox/templates/dcim/interface.html:69 -#: netbox/templates/dcim/inventoryitem.html:60 +#: netbox/templates/dcim/inventoryitem.html:64 #: netbox/templates/dcim/inventoryitemrole.html:22 #: netbox/templates/dcim/location.html:33 +#: netbox/templates/dcim/macaddress.html:21 #: netbox/templates/dcim/manufacturer.html:40 #: netbox/templates/dcim/module.html:73 #: netbox/templates/dcim/modulebay.html:42 -#: netbox/templates/dcim/moduletype.html:37 +#: netbox/templates/dcim/moduletype.html:39 #: netbox/templates/dcim/platform.html:33 #: netbox/templates/dcim/powerfeed.html:40 #: netbox/templates/dcim/poweroutlet.html:40 @@ -482,12 +552,14 @@ msgstr "ASN" #: netbox/templates/ipam/asnrange.html:38 #: netbox/templates/ipam/fhrpgroup.html:34 #: netbox/templates/ipam/ipaddress.html:55 -#: netbox/templates/ipam/iprange.html:67 netbox/templates/ipam/prefix.html:81 +#: netbox/templates/ipam/iprange.html:67 netbox/templates/ipam/prefix.html:77 #: netbox/templates/ipam/rir.html:26 netbox/templates/ipam/role.html:26 #: netbox/templates/ipam/routetarget.html:21 #: netbox/templates/ipam/service.html:50 #: netbox/templates/ipam/servicetemplate.html:27 #: netbox/templates/ipam/vlan.html:62 netbox/templates/ipam/vlangroup.html:34 +#: netbox/templates/ipam/vlantranslationpolicy.html:18 +#: netbox/templates/ipam/vlantranslationrule.html:26 #: netbox/templates/ipam/vrf.html:33 netbox/templates/tenancy/contact.html:67 #: netbox/templates/tenancy/contactgroup.html:25 #: netbox/templates/tenancy/contactrole.html:22 @@ -501,7 +573,7 @@ msgstr "ASN" #: netbox/templates/virtualization/clustertype.html:26 #: netbox/templates/virtualization/virtualdisk.html:39 #: netbox/templates/virtualization/virtualmachine.html:31 -#: netbox/templates/virtualization/vminterface.html:51 +#: netbox/templates/virtualization/vminterface.html:47 #: netbox/templates/vpn/ikepolicy.html:17 #: netbox/templates/vpn/ikeproposal.html:17 #: netbox/templates/vpn/ipsecpolicy.html:17 @@ -511,119 +583,142 @@ msgstr "ASN" #: netbox/templates/vpn/ipsecproposal.html:17 #: netbox/templates/vpn/l2vpn.html:26 netbox/templates/vpn/tunnel.html:33 #: netbox/templates/vpn/tunnelgroup.html:30 -#: netbox/templates/wireless/wirelesslan.html:26 +#: netbox/templates/wireless/wirelesslan.html:34 #: netbox/templates/wireless/wirelesslangroup.html:33 #: netbox/templates/wireless/wirelesslink.html:34 #: netbox/tenancy/forms/bulk_edit.py:32 netbox/tenancy/forms/bulk_edit.py:80 #: netbox/tenancy/forms/bulk_edit.py:122 netbox/users/forms/bulk_edit.py:64 #: netbox/users/forms/bulk_edit.py:82 netbox/users/forms/bulk_edit.py:112 -#: netbox/virtualization/forms/bulk_edit.py:32 -#: netbox/virtualization/forms/bulk_edit.py:46 -#: netbox/virtualization/forms/bulk_edit.py:100 -#: netbox/virtualization/forms/bulk_edit.py:177 -#: netbox/virtualization/forms/bulk_edit.py:228 -#: netbox/virtualization/forms/bulk_edit.py:337 +#: netbox/virtualization/forms/bulk_edit.py:33 +#: netbox/virtualization/forms/bulk_edit.py:47 +#: netbox/virtualization/forms/bulk_edit.py:82 +#: netbox/virtualization/forms/bulk_edit.py:159 +#: netbox/virtualization/forms/bulk_edit.py:210 +#: netbox/virtualization/forms/bulk_edit.py:327 #: netbox/vpn/forms/bulk_edit.py:28 netbox/vpn/forms/bulk_edit.py:64 #: netbox/vpn/forms/bulk_edit.py:121 netbox/vpn/forms/bulk_edit.py:155 #: netbox/vpn/forms/bulk_edit.py:190 netbox/vpn/forms/bulk_edit.py:215 #: netbox/vpn/forms/bulk_edit.py:247 netbox/vpn/forms/bulk_edit.py:274 -#: netbox/wireless/forms/bulk_edit.py:29 netbox/wireless/forms/bulk_edit.py:82 -#: netbox/wireless/forms/bulk_edit.py:140 +#: netbox/wireless/forms/bulk_edit.py:31 netbox/wireless/forms/bulk_edit.py:84 +#: netbox/wireless/forms/bulk_edit.py:143 msgid "Description" msgstr "Opis" -#: netbox/circuits/forms/bulk_edit.py:51 netbox/circuits/forms/bulk_edit.py:73 -#: netbox/circuits/forms/bulk_edit.py:123 -#: netbox/circuits/forms/bulk_import.py:36 -#: netbox/circuits/forms/bulk_import.py:51 -#: netbox/circuits/forms/bulk_import.py:74 -#: netbox/circuits/forms/filtersets.py:70 -#: netbox/circuits/forms/filtersets.py:88 -#: netbox/circuits/forms/filtersets.py:116 -#: netbox/circuits/forms/filtersets.py:131 -#: netbox/circuits/forms/filtersets.py:199 -#: netbox/circuits/forms/filtersets.py:232 -#: netbox/circuits/forms/filtersets.py:255 -#: netbox/circuits/forms/model_forms.py:47 -#: netbox/circuits/forms/model_forms.py:61 -#: netbox/circuits/forms/model_forms.py:93 -#: netbox/circuits/tables/circuits.py:58 -#: netbox/circuits/tables/circuits.py:108 -#: netbox/circuits/tables/circuits.py:160 -#: netbox/circuits/tables/providers.py:72 -#: netbox/circuits/tables/providers.py:103 +#: netbox/circuits/forms/bulk_edit.py:63 netbox/circuits/forms/bulk_edit.py:85 +#: netbox/circuits/forms/bulk_edit.py:135 +#: netbox/circuits/forms/bulk_import.py:43 +#: netbox/circuits/forms/bulk_import.py:58 +#: netbox/circuits/forms/bulk_import.py:81 +#: netbox/circuits/forms/filtersets.py:78 +#: netbox/circuits/forms/filtersets.py:96 +#: netbox/circuits/forms/filtersets.py:124 +#: netbox/circuits/forms/filtersets.py:142 +#: netbox/circuits/forms/filtersets.py:224 +#: netbox/circuits/forms/filtersets.py:268 +#: netbox/circuits/forms/filtersets.py:291 +#: netbox/circuits/forms/filtersets.py:329 +#: netbox/circuits/forms/filtersets.py:337 +#: netbox/circuits/forms/filtersets.py:373 +#: netbox/circuits/forms/filtersets.py:396 +#: netbox/circuits/forms/model_forms.py:60 +#: netbox/circuits/forms/model_forms.py:76 +#: netbox/circuits/forms/model_forms.py:110 +#: netbox/circuits/tables/circuits.py:57 +#: netbox/circuits/tables/circuits.py:112 +#: netbox/circuits/tables/circuits.py:196 +#: netbox/circuits/tables/providers.py:70 +#: netbox/circuits/tables/providers.py:101 +#: netbox/circuits/tables/virtual_circuits.py:46 +#: netbox/circuits/tables/virtual_circuits.py:93 #: netbox/templates/circuits/circuit.html:18 +#: netbox/templates/circuits/circuitgroupassignment.html:26 #: netbox/templates/circuits/circuittermination.html:25 #: netbox/templates/circuits/provider.html:20 #: netbox/templates/circuits/provideraccount.html:20 #: netbox/templates/circuits/providernetwork.html:20 +#: netbox/templates/circuits/virtualcircuit.html:23 +#: netbox/templates/circuits/virtualcircuittermination.html:26 #: netbox/templates/dcim/inc/cable_termination.html:51 +#: netbox/templates/dcim/interface.html:166 msgid "Provider" msgstr "Dostawca" -#: netbox/circuits/forms/bulk_edit.py:80 -#: netbox/circuits/forms/filtersets.py:91 +#: netbox/circuits/forms/bulk_edit.py:92 +#: netbox/circuits/forms/filtersets.py:99 #: netbox/templates/circuits/providernetwork.html:28 msgid "Service ID" msgstr "Identyfikator usługi" -#: netbox/circuits/forms/bulk_edit.py:100 -#: netbox/circuits/forms/filtersets.py:107 netbox/dcim/forms/bulk_edit.py:207 -#: netbox/dcim/forms/bulk_edit.py:610 netbox/dcim/forms/bulk_edit.py:819 -#: netbox/dcim/forms/bulk_edit.py:1188 netbox/dcim/forms/bulk_edit.py:1215 -#: netbox/dcim/forms/bulk_edit.py:1721 netbox/dcim/forms/filtersets.py:1064 -#: netbox/dcim/forms/filtersets.py:1455 netbox/dcim/forms/filtersets.py:1479 -#: netbox/dcim/tables/devices.py:704 netbox/dcim/tables/devices.py:761 -#: netbox/dcim/tables/devices.py:1003 netbox/dcim/tables/devicetypes.py:249 -#: netbox/dcim/tables/devicetypes.py:264 netbox/dcim/tables/racks.py:33 -#: netbox/extras/forms/bulk_edit.py:270 netbox/extras/tables/tables.py:443 +#: netbox/circuits/forms/bulk_edit.py:112 +#: netbox/circuits/forms/bulk_edit.py:303 +#: netbox/circuits/forms/filtersets.py:115 +#: netbox/circuits/forms/filtersets.py:320 netbox/dcim/forms/bulk_edit.py:210 +#: netbox/dcim/forms/bulk_edit.py:613 netbox/dcim/forms/bulk_edit.py:822 +#: netbox/dcim/forms/bulk_edit.py:1191 netbox/dcim/forms/bulk_edit.py:1218 +#: netbox/dcim/forms/bulk_edit.py:1742 netbox/dcim/forms/filtersets.py:1065 +#: netbox/dcim/forms/filtersets.py:1323 netbox/dcim/forms/filtersets.py:1460 +#: netbox/dcim/forms/filtersets.py:1484 netbox/dcim/tables/devices.py:738 +#: netbox/dcim/tables/devices.py:794 netbox/dcim/tables/devices.py:1035 +#: netbox/dcim/tables/devicetypes.py:256 netbox/dcim/tables/devicetypes.py:271 +#: netbox/dcim/tables/racks.py:33 netbox/extras/forms/bulk_edit.py:270 +#: netbox/extras/tables/tables.py:443 #: netbox/templates/circuits/circuittype.html:30 +#: netbox/templates/circuits/virtualcircuittype.html:30 #: netbox/templates/dcim/cable.html:40 #: netbox/templates/dcim/devicerole.html:34 #: netbox/templates/dcim/frontport.html:40 #: netbox/templates/dcim/inventoryitemrole.html:26 +#: netbox/templates/dcim/poweroutlet.html:44 #: netbox/templates/dcim/rackrole.html:30 #: netbox/templates/dcim/rearport.html:40 netbox/templates/extras/tag.html:26 msgid "Color" msgstr "Kolor" -#: netbox/circuits/forms/bulk_edit.py:118 -#: netbox/circuits/forms/bulk_import.py:87 -#: netbox/circuits/forms/filtersets.py:126 netbox/core/forms/bulk_edit.py:18 -#: netbox/core/forms/filtersets.py:33 netbox/core/tables/change_logging.py:32 -#: netbox/core/tables/data.py:20 netbox/core/tables/jobs.py:18 -#: netbox/dcim/forms/bulk_edit.py:797 netbox/dcim/forms/bulk_edit.py:936 -#: netbox/dcim/forms/bulk_edit.py:1004 netbox/dcim/forms/bulk_edit.py:1023 -#: netbox/dcim/forms/bulk_edit.py:1046 netbox/dcim/forms/bulk_edit.py:1088 -#: netbox/dcim/forms/bulk_edit.py:1132 netbox/dcim/forms/bulk_edit.py:1183 -#: netbox/dcim/forms/bulk_edit.py:1210 netbox/dcim/forms/bulk_import.py:188 -#: netbox/dcim/forms/bulk_import.py:267 netbox/dcim/forms/bulk_import.py:730 -#: netbox/dcim/forms/bulk_import.py:756 netbox/dcim/forms/bulk_import.py:782 -#: netbox/dcim/forms/bulk_import.py:802 netbox/dcim/forms/bulk_import.py:885 -#: netbox/dcim/forms/bulk_import.py:979 netbox/dcim/forms/bulk_import.py:1021 -#: netbox/dcim/forms/bulk_import.py:1235 netbox/dcim/forms/bulk_import.py:1398 -#: netbox/dcim/forms/filtersets.py:955 netbox/dcim/forms/filtersets.py:1054 -#: netbox/dcim/forms/filtersets.py:1175 netbox/dcim/forms/filtersets.py:1247 -#: netbox/dcim/forms/filtersets.py:1272 netbox/dcim/forms/filtersets.py:1296 -#: netbox/dcim/forms/filtersets.py:1316 netbox/dcim/forms/filtersets.py:1353 -#: netbox/dcim/forms/filtersets.py:1450 netbox/dcim/forms/filtersets.py:1474 -#: netbox/dcim/forms/model_forms.py:703 netbox/dcim/forms/model_forms.py:709 -#: netbox/dcim/forms/object_import.py:84 +#: netbox/circuits/forms/bulk_edit.py:130 +#: netbox/circuits/forms/bulk_edit.py:331 +#: netbox/circuits/forms/bulk_import.py:94 +#: netbox/circuits/forms/bulk_import.py:221 +#: netbox/circuits/forms/filtersets.py:137 +#: netbox/circuits/forms/filtersets.py:358 +#: netbox/circuits/tables/circuits.py:65 +#: netbox/circuits/tables/circuits.py:200 +#: netbox/circuits/tables/virtual_circuits.py:58 +#: netbox/core/forms/bulk_edit.py:18 netbox/core/forms/filtersets.py:33 +#: netbox/core/tables/change_logging.py:32 netbox/core/tables/data.py:20 +#: netbox/core/tables/jobs.py:18 netbox/dcim/forms/bulk_edit.py:800 +#: netbox/dcim/forms/bulk_edit.py:939 netbox/dcim/forms/bulk_edit.py:1007 +#: netbox/dcim/forms/bulk_edit.py:1026 netbox/dcim/forms/bulk_edit.py:1049 +#: netbox/dcim/forms/bulk_edit.py:1091 netbox/dcim/forms/bulk_edit.py:1135 +#: netbox/dcim/forms/bulk_edit.py:1186 netbox/dcim/forms/bulk_edit.py:1213 +#: netbox/dcim/forms/bulk_import.py:190 netbox/dcim/forms/bulk_import.py:269 +#: netbox/dcim/forms/bulk_import.py:735 netbox/dcim/forms/bulk_import.py:761 +#: netbox/dcim/forms/bulk_import.py:787 netbox/dcim/forms/bulk_import.py:807 +#: netbox/dcim/forms/bulk_import.py:893 netbox/dcim/forms/bulk_import.py:987 +#: netbox/dcim/forms/bulk_import.py:1029 netbox/dcim/forms/bulk_import.py:1332 +#: netbox/dcim/forms/bulk_import.py:1495 netbox/dcim/forms/filtersets.py:956 +#: netbox/dcim/forms/filtersets.py:1055 netbox/dcim/forms/filtersets.py:1176 +#: netbox/dcim/forms/filtersets.py:1248 netbox/dcim/forms/filtersets.py:1273 +#: netbox/dcim/forms/filtersets.py:1297 netbox/dcim/forms/filtersets.py:1317 +#: netbox/dcim/forms/filtersets.py:1358 netbox/dcim/forms/filtersets.py:1455 +#: netbox/dcim/forms/filtersets.py:1479 netbox/dcim/forms/model_forms.py:714 +#: netbox/dcim/forms/model_forms.py:720 netbox/dcim/forms/object_import.py:84 #: netbox/dcim/forms/object_import.py:113 -#: netbox/dcim/forms/object_import.py:145 netbox/dcim/tables/devices.py:178 -#: netbox/dcim/tables/devices.py:814 netbox/dcim/tables/power.py:77 -#: netbox/dcim/tables/racks.py:138 netbox/extras/forms/bulk_import.py:42 +#: netbox/dcim/forms/object_import.py:146 netbox/dcim/tables/devices.py:189 +#: netbox/dcim/tables/devices.py:846 netbox/dcim/tables/power.py:77 +#: netbox/dcim/tables/racks.py:137 netbox/extras/forms/bulk_import.py:42 #: netbox/extras/tables/tables.py:405 netbox/extras/tables/tables.py:465 -#: netbox/netbox/tables/tables.py:240 +#: netbox/netbox/tables/tables.py:243 #: netbox/templates/circuits/circuit.html:30 +#: netbox/templates/circuits/virtualcircuit.html:39 +#: netbox/templates/circuits/virtualcircuittermination.html:64 #: netbox/templates/core/datasource.html:38 #: netbox/templates/dcim/cable.html:15 #: netbox/templates/dcim/consoleport.html:36 #: netbox/templates/dcim/consoleserverport.html:36 #: netbox/templates/dcim/frontport.html:36 #: netbox/templates/dcim/interface.html:46 -#: netbox/templates/dcim/interface.html:169 -#: netbox/templates/dcim/interface.html:311 +#: netbox/templates/dcim/interface.html:226 +#: netbox/templates/dcim/interface.html:368 #: netbox/templates/dcim/powerfeed.html:32 #: netbox/templates/dcim/poweroutlet.html:36 #: netbox/templates/dcim/powerport.html:36 @@ -633,65 +728,78 @@ msgstr "Kolor" #: netbox/templates/vpn/l2vpn.html:22 #: netbox/templates/wireless/inc/authentication_attrs.html:8 #: netbox/templates/wireless/inc/wirelesslink_interface.html:14 -#: netbox/virtualization/forms/bulk_edit.py:60 -#: netbox/virtualization/forms/bulk_import.py:41 +#: netbox/virtualization/forms/bulk_edit.py:61 +#: netbox/virtualization/forms/bulk_import.py:42 #: netbox/virtualization/forms/filtersets.py:54 -#: netbox/virtualization/forms/model_forms.py:62 +#: netbox/virtualization/forms/model_forms.py:65 #: netbox/virtualization/tables/clusters.py:66 #: netbox/vpn/forms/bulk_edit.py:264 netbox/vpn/forms/bulk_import.py:264 -#: netbox/vpn/forms/filtersets.py:217 netbox/vpn/forms/model_forms.py:84 -#: netbox/vpn/forms/model_forms.py:119 netbox/vpn/forms/model_forms.py:231 +#: netbox/vpn/forms/filtersets.py:217 netbox/vpn/forms/model_forms.py:85 +#: netbox/vpn/forms/model_forms.py:120 netbox/vpn/forms/model_forms.py:232 msgid "Type" msgstr "Typ" -#: netbox/circuits/forms/bulk_edit.py:128 -#: netbox/circuits/forms/bulk_import.py:80 -#: netbox/circuits/forms/filtersets.py:139 -#: netbox/circuits/forms/model_forms.py:98 +#: netbox/circuits/forms/bulk_edit.py:140 +#: netbox/circuits/forms/bulk_edit.py:326 +#: netbox/circuits/forms/bulk_import.py:87 +#: netbox/circuits/forms/bulk_import.py:214 +#: netbox/circuits/forms/filtersets.py:150 +#: netbox/circuits/forms/filtersets.py:345 +#: netbox/circuits/forms/model_forms.py:116 +#: netbox/circuits/forms/model_forms.py:330 +#: netbox/templates/circuits/virtualcircuit.html:31 +#: netbox/templates/circuits/virtualcircuittermination.html:34 msgid "Provider account" msgstr "Konto dostawcy" -#: netbox/circuits/forms/bulk_edit.py:136 -#: netbox/circuits/forms/bulk_import.py:93 -#: netbox/circuits/forms/filtersets.py:150 netbox/core/forms/filtersets.py:38 -#: netbox/core/forms/filtersets.py:79 netbox/core/tables/data.py:23 +#: netbox/circuits/forms/bulk_edit.py:148 +#: netbox/circuits/forms/bulk_edit.py:336 +#: netbox/circuits/forms/bulk_import.py:100 +#: netbox/circuits/forms/bulk_import.py:227 +#: netbox/circuits/forms/filtersets.py:161 +#: netbox/circuits/forms/filtersets.py:361 netbox/core/forms/filtersets.py:38 +#: netbox/core/forms/filtersets.py:80 netbox/core/tables/data.py:23 #: netbox/core/tables/jobs.py:26 netbox/core/tables/tasks.py:88 -#: netbox/dcim/forms/bulk_edit.py:107 netbox/dcim/forms/bulk_edit.py:182 -#: netbox/dcim/forms/bulk_edit.py:352 netbox/dcim/forms/bulk_edit.py:706 -#: netbox/dcim/forms/bulk_edit.py:771 netbox/dcim/forms/bulk_edit.py:803 -#: netbox/dcim/forms/bulk_edit.py:930 netbox/dcim/forms/bulk_edit.py:1744 -#: netbox/dcim/forms/bulk_import.py:88 netbox/dcim/forms/bulk_import.py:147 -#: netbox/dcim/forms/bulk_import.py:248 netbox/dcim/forms/bulk_import.py:527 -#: netbox/dcim/forms/bulk_import.py:681 netbox/dcim/forms/bulk_import.py:1229 -#: netbox/dcim/forms/bulk_import.py:1393 netbox/dcim/forms/bulk_import.py:1457 -#: netbox/dcim/forms/filtersets.py:178 netbox/dcim/forms/filtersets.py:237 -#: netbox/dcim/forms/filtersets.py:359 netbox/dcim/forms/filtersets.py:799 -#: netbox/dcim/forms/filtersets.py:924 netbox/dcim/forms/filtersets.py:958 -#: netbox/dcim/forms/filtersets.py:1059 netbox/dcim/forms/filtersets.py:1170 -#: netbox/dcim/tables/devices.py:140 netbox/dcim/tables/devices.py:817 -#: netbox/dcim/tables/devices.py:1063 netbox/dcim/tables/modules.py:70 -#: netbox/dcim/tables/power.py:74 netbox/dcim/tables/racks.py:126 -#: netbox/dcim/tables/sites.py:82 netbox/dcim/tables/sites.py:138 -#: netbox/ipam/forms/bulk_edit.py:256 netbox/ipam/forms/bulk_edit.py:306 -#: netbox/ipam/forms/bulk_edit.py:354 netbox/ipam/forms/bulk_edit.py:506 -#: netbox/ipam/forms/bulk_import.py:192 netbox/ipam/forms/bulk_import.py:257 -#: netbox/ipam/forms/bulk_import.py:293 netbox/ipam/forms/bulk_import.py:474 -#: netbox/ipam/forms/filtersets.py:210 netbox/ipam/forms/filtersets.py:281 -#: netbox/ipam/forms/filtersets.py:355 netbox/ipam/forms/filtersets.py:501 -#: netbox/ipam/forms/model_forms.py:501 netbox/ipam/tables/ip.py:237 -#: netbox/ipam/tables/ip.py:312 netbox/ipam/tables/ip.py:363 -#: netbox/ipam/tables/ip.py:426 netbox/ipam/tables/ip.py:453 -#: netbox/ipam/tables/vlans.py:126 netbox/ipam/tables/vlans.py:232 +#: netbox/dcim/forms/bulk_edit.py:110 netbox/dcim/forms/bulk_edit.py:185 +#: netbox/dcim/forms/bulk_edit.py:355 netbox/dcim/forms/bulk_edit.py:709 +#: netbox/dcim/forms/bulk_edit.py:774 netbox/dcim/forms/bulk_edit.py:806 +#: netbox/dcim/forms/bulk_edit.py:933 netbox/dcim/forms/bulk_edit.py:1723 +#: netbox/dcim/forms/bulk_edit.py:1765 netbox/dcim/forms/bulk_import.py:90 +#: netbox/dcim/forms/bulk_import.py:149 netbox/dcim/forms/bulk_import.py:250 +#: netbox/dcim/forms/bulk_import.py:532 netbox/dcim/forms/bulk_import.py:686 +#: netbox/dcim/forms/bulk_import.py:1137 netbox/dcim/forms/bulk_import.py:1326 +#: netbox/dcim/forms/bulk_import.py:1490 netbox/dcim/forms/bulk_import.py:1554 +#: netbox/dcim/forms/filtersets.py:179 netbox/dcim/forms/filtersets.py:238 +#: netbox/dcim/forms/filtersets.py:360 netbox/dcim/forms/filtersets.py:800 +#: netbox/dcim/forms/filtersets.py:925 netbox/dcim/forms/filtersets.py:959 +#: netbox/dcim/forms/filtersets.py:1060 netbox/dcim/forms/filtersets.py:1171 +#: netbox/dcim/forms/filtersets.py:1562 netbox/dcim/tables/devices.py:151 +#: netbox/dcim/tables/devices.py:849 netbox/dcim/tables/devices.py:983 +#: netbox/dcim/tables/devices.py:1095 netbox/dcim/tables/modules.py:70 +#: netbox/dcim/tables/power.py:74 netbox/dcim/tables/racks.py:125 +#: netbox/dcim/tables/sites.py:82 netbox/dcim/tables/sites.py:137 +#: netbox/ipam/forms/bulk_edit.py:240 netbox/ipam/forms/bulk_edit.py:290 +#: netbox/ipam/forms/bulk_edit.py:338 netbox/ipam/forms/bulk_edit.py:490 +#: netbox/ipam/forms/bulk_import.py:188 netbox/ipam/forms/bulk_import.py:256 +#: netbox/ipam/forms/bulk_import.py:292 netbox/ipam/forms/bulk_import.py:473 +#: netbox/ipam/forms/filtersets.py:212 netbox/ipam/forms/filtersets.py:284 +#: netbox/ipam/forms/filtersets.py:358 netbox/ipam/forms/filtersets.py:542 +#: netbox/ipam/forms/model_forms.py:511 netbox/ipam/tables/ip.py:183 +#: netbox/ipam/tables/ip.py:264 netbox/ipam/tables/ip.py:315 +#: netbox/ipam/tables/ip.py:378 netbox/ipam/tables/ip.py:405 +#: netbox/ipam/tables/vlans.py:95 netbox/ipam/tables/vlans.py:208 #: netbox/templates/circuits/circuit.html:34 +#: netbox/templates/circuits/virtualcircuit.html:43 #: netbox/templates/core/datasource.html:46 netbox/templates/core/job.html:48 #: netbox/templates/core/rq_task.html:81 netbox/templates/core/system.html:18 #: netbox/templates/dcim/cable.html:19 netbox/templates/dcim/device.html:178 +#: netbox/templates/dcim/inventoryitem.html:36 #: netbox/templates/dcim/location.html:45 netbox/templates/dcim/module.html:69 #: netbox/templates/dcim/powerfeed.html:36 netbox/templates/dcim/rack.html:41 #: netbox/templates/dcim/site.html:43 #: netbox/templates/extras/script_list.html:48 #: netbox/templates/ipam/ipaddress.html:37 -#: netbox/templates/ipam/iprange.html:54 netbox/templates/ipam/prefix.html:73 +#: netbox/templates/ipam/iprange.html:54 netbox/templates/ipam/prefix.html:69 #: netbox/templates/ipam/vlan.html:48 #: netbox/templates/virtualization/cluster.html:21 #: netbox/templates/virtualization/virtualmachine.html:19 @@ -699,63 +807,67 @@ msgstr "Konto dostawcy" #: netbox/templates/wireless/wirelesslan.html:22 #: netbox/templates/wireless/wirelesslink.html:17 #: netbox/users/forms/filtersets.py:32 netbox/users/forms/model_forms.py:194 -#: netbox/virtualization/forms/bulk_edit.py:70 -#: netbox/virtualization/forms/bulk_edit.py:118 -#: netbox/virtualization/forms/bulk_import.py:54 -#: netbox/virtualization/forms/bulk_import.py:80 -#: netbox/virtualization/forms/filtersets.py:62 -#: netbox/virtualization/forms/filtersets.py:160 +#: netbox/virtualization/forms/bulk_edit.py:71 +#: netbox/virtualization/forms/bulk_edit.py:100 +#: netbox/virtualization/forms/bulk_import.py:55 +#: netbox/virtualization/forms/bulk_import.py:86 +#: netbox/virtualization/forms/filtersets.py:82 +#: netbox/virtualization/forms/filtersets.py:165 #: netbox/virtualization/tables/clusters.py:74 -#: netbox/virtualization/tables/virtualmachines.py:60 +#: netbox/virtualization/tables/virtualmachines.py:30 #: netbox/vpn/forms/bulk_edit.py:39 netbox/vpn/forms/bulk_import.py:37 #: netbox/vpn/forms/filtersets.py:47 netbox/vpn/tables/tunnels.py:48 -#: netbox/wireless/forms/bulk_edit.py:43 -#: netbox/wireless/forms/bulk_edit.py:105 -#: netbox/wireless/forms/bulk_import.py:43 -#: netbox/wireless/forms/bulk_import.py:84 -#: netbox/wireless/forms/filtersets.py:49 -#: netbox/wireless/forms/filtersets.py:83 +#: netbox/wireless/forms/bulk_edit.py:45 +#: netbox/wireless/forms/bulk_edit.py:108 +#: netbox/wireless/forms/bulk_import.py:45 +#: netbox/wireless/forms/bulk_import.py:89 +#: netbox/wireless/forms/filtersets.py:52 +#: netbox/wireless/forms/filtersets.py:111 #: netbox/wireless/tables/wirelesslan.py:52 -#: netbox/wireless/tables/wirelesslink.py:20 +#: netbox/wireless/tables/wirelesslink.py:19 msgid "Status" msgstr "Status" -#: netbox/circuits/forms/bulk_edit.py:142 -#: netbox/circuits/forms/bulk_edit.py:233 -#: netbox/circuits/forms/bulk_import.py:98 -#: netbox/circuits/forms/bulk_import.py:158 -#: netbox/circuits/forms/filtersets.py:119 -#: netbox/circuits/forms/filtersets.py:241 netbox/dcim/forms/bulk_edit.py:123 -#: netbox/dcim/forms/bulk_edit.py:188 netbox/dcim/forms/bulk_edit.py:347 -#: netbox/dcim/forms/bulk_edit.py:467 netbox/dcim/forms/bulk_edit.py:696 -#: netbox/dcim/forms/bulk_edit.py:809 netbox/dcim/forms/bulk_edit.py:1749 -#: netbox/dcim/forms/bulk_import.py:107 netbox/dcim/forms/bulk_import.py:152 -#: netbox/dcim/forms/bulk_import.py:241 netbox/dcim/forms/bulk_import.py:356 -#: netbox/dcim/forms/bulk_import.py:501 netbox/dcim/forms/bulk_import.py:1241 -#: netbox/dcim/forms/bulk_import.py:1450 netbox/dcim/forms/filtersets.py:173 -#: netbox/dcim/forms/filtersets.py:205 netbox/dcim/forms/filtersets.py:323 -#: netbox/dcim/forms/filtersets.py:399 netbox/dcim/forms/filtersets.py:420 -#: netbox/dcim/forms/filtersets.py:722 netbox/dcim/forms/filtersets.py:916 -#: netbox/dcim/forms/filtersets.py:978 netbox/dcim/forms/filtersets.py:1008 -#: netbox/dcim/forms/filtersets.py:1130 netbox/dcim/tables/power.py:88 -#: netbox/extras/filtersets.py:612 netbox/extras/forms/filtersets.py:323 -#: netbox/extras/forms/filtersets.py:396 netbox/ipam/forms/bulk_edit.py:43 -#: netbox/ipam/forms/bulk_edit.py:68 netbox/ipam/forms/bulk_edit.py:112 -#: netbox/ipam/forms/bulk_edit.py:141 netbox/ipam/forms/bulk_edit.py:166 -#: netbox/ipam/forms/bulk_edit.py:251 netbox/ipam/forms/bulk_edit.py:301 -#: netbox/ipam/forms/bulk_edit.py:349 netbox/ipam/forms/bulk_edit.py:501 -#: netbox/ipam/forms/bulk_import.py:38 netbox/ipam/forms/bulk_import.py:67 -#: netbox/ipam/forms/bulk_import.py:95 netbox/ipam/forms/bulk_import.py:115 -#: netbox/ipam/forms/bulk_import.py:135 netbox/ipam/forms/bulk_import.py:164 -#: netbox/ipam/forms/bulk_import.py:250 netbox/ipam/forms/bulk_import.py:286 -#: netbox/ipam/forms/bulk_import.py:467 netbox/ipam/forms/filtersets.py:48 -#: netbox/ipam/forms/filtersets.py:68 netbox/ipam/forms/filtersets.py:100 -#: netbox/ipam/forms/filtersets.py:120 netbox/ipam/forms/filtersets.py:143 -#: netbox/ipam/forms/filtersets.py:174 netbox/ipam/forms/filtersets.py:267 -#: netbox/ipam/forms/filtersets.py:310 netbox/ipam/forms/filtersets.py:469 -#: netbox/ipam/tables/ip.py:456 netbox/ipam/tables/vlans.py:229 -#: netbox/templates/circuits/circuit.html:38 +#: netbox/circuits/forms/bulk_edit.py:154 +#: netbox/circuits/forms/bulk_edit.py:271 +#: netbox/circuits/forms/bulk_edit.py:342 +#: netbox/circuits/forms/bulk_import.py:111 +#: netbox/circuits/forms/bulk_import.py:170 +#: netbox/circuits/forms/bulk_import.py:232 +#: netbox/circuits/forms/filtersets.py:130 +#: netbox/circuits/forms/filtersets.py:277 +#: netbox/circuits/forms/filtersets.py:331 netbox/dcim/forms/bulk_edit.py:126 +#: netbox/dcim/forms/bulk_edit.py:191 netbox/dcim/forms/bulk_edit.py:350 +#: netbox/dcim/forms/bulk_edit.py:470 netbox/dcim/forms/bulk_edit.py:699 +#: netbox/dcim/forms/bulk_edit.py:812 netbox/dcim/forms/bulk_edit.py:1770 +#: netbox/dcim/forms/bulk_import.py:109 netbox/dcim/forms/bulk_import.py:154 +#: netbox/dcim/forms/bulk_import.py:243 netbox/dcim/forms/bulk_import.py:358 +#: netbox/dcim/forms/bulk_import.py:506 netbox/dcim/forms/bulk_import.py:1338 +#: netbox/dcim/forms/bulk_import.py:1547 netbox/dcim/forms/filtersets.py:174 +#: netbox/dcim/forms/filtersets.py:206 netbox/dcim/forms/filtersets.py:324 +#: netbox/dcim/forms/filtersets.py:400 netbox/dcim/forms/filtersets.py:421 +#: netbox/dcim/forms/filtersets.py:723 netbox/dcim/forms/filtersets.py:917 +#: netbox/dcim/forms/filtersets.py:979 netbox/dcim/forms/filtersets.py:1009 +#: netbox/dcim/forms/filtersets.py:1131 netbox/dcim/tables/power.py:88 +#: netbox/extras/filtersets.py:612 netbox/extras/forms/filtersets.py:330 +#: netbox/extras/forms/filtersets.py:403 netbox/ipam/forms/bulk_edit.py:46 +#: netbox/ipam/forms/bulk_edit.py:71 netbox/ipam/forms/bulk_edit.py:115 +#: netbox/ipam/forms/bulk_edit.py:144 netbox/ipam/forms/bulk_edit.py:169 +#: netbox/ipam/forms/bulk_edit.py:235 netbox/ipam/forms/bulk_edit.py:285 +#: netbox/ipam/forms/bulk_edit.py:333 netbox/ipam/forms/bulk_edit.py:485 +#: netbox/ipam/forms/bulk_import.py:41 netbox/ipam/forms/bulk_import.py:70 +#: netbox/ipam/forms/bulk_import.py:98 netbox/ipam/forms/bulk_import.py:118 +#: netbox/ipam/forms/bulk_import.py:138 netbox/ipam/forms/bulk_import.py:167 +#: netbox/ipam/forms/bulk_import.py:249 netbox/ipam/forms/bulk_import.py:285 +#: netbox/ipam/forms/bulk_import.py:466 netbox/ipam/forms/filtersets.py:50 +#: netbox/ipam/forms/filtersets.py:70 netbox/ipam/forms/filtersets.py:102 +#: netbox/ipam/forms/filtersets.py:122 netbox/ipam/forms/filtersets.py:145 +#: netbox/ipam/forms/filtersets.py:176 netbox/ipam/forms/filtersets.py:270 +#: netbox/ipam/forms/filtersets.py:313 netbox/ipam/forms/filtersets.py:510 +#: netbox/ipam/tables/ip.py:408 netbox/ipam/tables/vlans.py:205 +#: netbox/templates/circuits/circuit.html:48 #: netbox/templates/circuits/circuitgroup.html:36 +#: netbox/templates/circuits/virtualcircuit.html:47 #: netbox/templates/dcim/cable.html:23 netbox/templates/dcim/device.html:79 #: netbox/templates/dcim/location.html:49 #: netbox/templates/dcim/powerfeed.html:44 netbox/templates/dcim/rack.html:32 @@ -772,114 +884,181 @@ msgstr "Status" #: netbox/templates/virtualization/cluster.html:33 #: netbox/templates/virtualization/virtualmachine.html:39 #: netbox/templates/vpn/l2vpn.html:30 netbox/templates/vpn/tunnel.html:49 -#: netbox/templates/wireless/wirelesslan.html:34 +#: netbox/templates/wireless/wirelesslan.html:42 #: netbox/templates/wireless/wirelesslink.html:25 -#: netbox/tenancy/forms/forms.py:25 netbox/tenancy/forms/forms.py:48 -#: netbox/tenancy/forms/model_forms.py:52 netbox/tenancy/tables/columns.py:64 -#: netbox/virtualization/forms/bulk_edit.py:76 -#: netbox/virtualization/forms/bulk_edit.py:155 -#: netbox/virtualization/forms/bulk_import.py:66 -#: netbox/virtualization/forms/bulk_import.py:115 +#: netbox/tenancy/forms/forms.py:25 netbox/tenancy/forms/forms.py:49 +#: netbox/tenancy/forms/model_forms.py:52 netbox/tenancy/tables/columns.py:49 +#: netbox/virtualization/forms/bulk_edit.py:77 +#: netbox/virtualization/forms/bulk_edit.py:137 +#: netbox/virtualization/forms/bulk_import.py:67 +#: netbox/virtualization/forms/bulk_import.py:121 #: netbox/virtualization/forms/filtersets.py:47 -#: netbox/virtualization/forms/filtersets.py:105 +#: netbox/virtualization/forms/filtersets.py:110 #: netbox/vpn/forms/bulk_edit.py:59 netbox/vpn/forms/bulk_edit.py:269 #: netbox/vpn/forms/bulk_import.py:59 netbox/vpn/forms/bulk_import.py:258 -#: netbox/vpn/forms/filtersets.py:214 netbox/wireless/forms/bulk_edit.py:63 -#: netbox/wireless/forms/bulk_edit.py:110 -#: netbox/wireless/forms/bulk_import.py:55 -#: netbox/wireless/forms/bulk_import.py:97 -#: netbox/wireless/forms/filtersets.py:35 -#: netbox/wireless/forms/filtersets.py:75 +#: netbox/vpn/forms/filtersets.py:214 netbox/wireless/forms/bulk_edit.py:65 +#: netbox/wireless/forms/bulk_edit.py:113 +#: netbox/wireless/forms/bulk_import.py:57 +#: netbox/wireless/forms/bulk_import.py:102 +#: netbox/wireless/forms/filtersets.py:38 +#: netbox/wireless/forms/filtersets.py:103 msgid "Tenant" msgstr "Najemca" -#: netbox/circuits/forms/bulk_edit.py:147 -#: netbox/circuits/forms/filtersets.py:174 +#: netbox/circuits/forms/bulk_edit.py:159 +#: netbox/circuits/forms/filtersets.py:190 msgid "Install date" msgstr "Data instalacji" -#: netbox/circuits/forms/bulk_edit.py:152 -#: netbox/circuits/forms/filtersets.py:179 +#: netbox/circuits/forms/bulk_edit.py:164 +#: netbox/circuits/forms/filtersets.py:195 msgid "Termination date" msgstr "Data wypowiedzenia" -#: netbox/circuits/forms/bulk_edit.py:158 -#: netbox/circuits/forms/filtersets.py:186 +#: netbox/circuits/forms/bulk_edit.py:170 +#: netbox/circuits/forms/filtersets.py:202 msgid "Commit rate (Kbps)" msgstr "Szybkość zatwierdzania (Kbps)" -#: netbox/circuits/forms/bulk_edit.py:173 -#: netbox/circuits/forms/model_forms.py:112 +#: netbox/circuits/forms/bulk_edit.py:176 +#: netbox/circuits/forms/filtersets.py:208 +#: netbox/circuits/forms/model_forms.py:136 +#: netbox/templates/circuits/circuit.html:38 +#: netbox/templates/wireless/wirelesslink.html:38 +#: netbox/wireless/forms/bulk_edit.py:132 +#: netbox/wireless/forms/filtersets.py:130 +#: netbox/wireless/forms/model_forms.py:168 +msgid "Distance" +msgstr "Dystans" + +#: netbox/circuits/forms/bulk_edit.py:181 +#: netbox/circuits/forms/bulk_import.py:105 +#: netbox/circuits/forms/bulk_import.py:108 +#: netbox/circuits/forms/filtersets.py:212 +#: netbox/wireless/forms/bulk_edit.py:137 +#: netbox/wireless/forms/bulk_import.py:121 +#: netbox/wireless/forms/bulk_import.py:124 +#: netbox/wireless/forms/filtersets.py:134 +msgid "Distance unit" +msgstr "Jednostka odległości" + +#: netbox/circuits/forms/bulk_edit.py:196 +#: netbox/circuits/forms/model_forms.py:141 msgid "Service Parameters" msgstr "Parametry serwisowe" -#: netbox/circuits/forms/bulk_edit.py:174 -#: netbox/circuits/forms/model_forms.py:113 -#: netbox/circuits/forms/model_forms.py:183 -#: netbox/dcim/forms/model_forms.py:139 netbox/dcim/forms/model_forms.py:181 -#: netbox/dcim/forms/model_forms.py:266 netbox/dcim/forms/model_forms.py:323 -#: netbox/dcim/forms/model_forms.py:768 netbox/dcim/forms/model_forms.py:1699 -#: netbox/ipam/forms/model_forms.py:64 netbox/ipam/forms/model_forms.py:81 -#: netbox/ipam/forms/model_forms.py:115 netbox/ipam/forms/model_forms.py:136 -#: netbox/ipam/forms/model_forms.py:160 netbox/ipam/forms/model_forms.py:232 -#: netbox/ipam/forms/model_forms.py:261 netbox/ipam/forms/model_forms.py:320 +#: netbox/circuits/forms/bulk_edit.py:197 +#: netbox/circuits/forms/filtersets.py:73 +#: netbox/circuits/forms/filtersets.py:91 +#: netbox/circuits/forms/filtersets.py:110 +#: netbox/circuits/forms/filtersets.py:127 +#: netbox/circuits/forms/filtersets.py:315 +#: netbox/circuits/forms/filtersets.py:330 netbox/core/forms/filtersets.py:68 +#: netbox/core/forms/filtersets.py:136 netbox/dcim/forms/bulk_edit.py:846 +#: netbox/dcim/forms/filtersets.py:173 netbox/dcim/forms/filtersets.py:205 +#: netbox/dcim/forms/filtersets.py:916 netbox/dcim/forms/filtersets.py:1008 +#: netbox/dcim/forms/filtersets.py:1132 netbox/dcim/forms/filtersets.py:1240 +#: netbox/dcim/forms/filtersets.py:1264 netbox/dcim/forms/filtersets.py:1289 +#: netbox/dcim/forms/filtersets.py:1308 netbox/dcim/forms/filtersets.py:1332 +#: netbox/dcim/forms/filtersets.py:1446 netbox/dcim/forms/filtersets.py:1470 +#: netbox/dcim/forms/filtersets.py:1494 netbox/dcim/forms/filtersets.py:1512 +#: netbox/dcim/forms/filtersets.py:1528 netbox/extras/forms/bulk_edit.py:90 +#: netbox/extras/forms/filtersets.py:45 netbox/extras/forms/filtersets.py:137 +#: netbox/extras/forms/filtersets.py:169 netbox/extras/forms/filtersets.py:210 +#: netbox/extras/forms/filtersets.py:227 netbox/extras/forms/filtersets.py:258 +#: netbox/extras/forms/filtersets.py:282 netbox/extras/forms/filtersets.py:449 +#: netbox/ipam/forms/filtersets.py:101 netbox/ipam/forms/filtersets.py:269 +#: netbox/ipam/forms/filtersets.py:310 netbox/ipam/forms/filtersets.py:385 +#: netbox/ipam/forms/filtersets.py:470 netbox/ipam/forms/filtersets.py:483 +#: netbox/ipam/forms/filtersets.py:508 netbox/ipam/forms/filtersets.py:579 +#: netbox/ipam/forms/filtersets.py:597 netbox/netbox/tables/tables.py:259 +#: netbox/virtualization/forms/filtersets.py:45 +#: netbox/virtualization/forms/filtersets.py:108 +#: netbox/virtualization/forms/filtersets.py:203 +#: netbox/virtualization/forms/filtersets.py:248 +#: netbox/vpn/forms/filtersets.py:213 netbox/wireless/forms/bulk_edit.py:153 +#: netbox/wireless/forms/filtersets.py:36 +#: netbox/wireless/forms/filtersets.py:102 +msgid "Attributes" +msgstr "Atrybuty" + +#: netbox/circuits/forms/bulk_edit.py:198 +#: netbox/circuits/forms/bulk_edit.py:356 +#: netbox/circuits/forms/model_forms.py:142 +#: netbox/circuits/forms/model_forms.py:240 +#: netbox/circuits/forms/model_forms.py:345 +#: netbox/dcim/forms/model_forms.py:143 netbox/dcim/forms/model_forms.py:185 +#: netbox/dcim/forms/model_forms.py:274 netbox/dcim/forms/model_forms.py:331 +#: netbox/dcim/forms/model_forms.py:780 netbox/dcim/forms/model_forms.py:1744 +#: netbox/ipam/forms/model_forms.py:67 netbox/ipam/forms/model_forms.py:84 +#: netbox/ipam/forms/model_forms.py:119 netbox/ipam/forms/model_forms.py:141 +#: netbox/ipam/forms/model_forms.py:166 netbox/ipam/forms/model_forms.py:233 +#: netbox/ipam/forms/model_forms.py:271 netbox/ipam/forms/model_forms.py:330 #: netbox/netbox/navigation/menu.py:24 #: netbox/templates/dcim/device_edit.html:85 #: netbox/templates/dcim/htmx/cable_edit.html:72 #: netbox/templates/ipam/ipaddress_bulk_add.html:27 -#: netbox/templates/ipam/vlan_edit.html:22 +#: netbox/templates/ipam/vlan_edit.html:30 #: netbox/virtualization/forms/model_forms.py:80 -#: netbox/virtualization/forms/model_forms.py:222 +#: netbox/virtualization/forms/model_forms.py:229 #: netbox/vpn/forms/bulk_edit.py:78 netbox/vpn/forms/filtersets.py:44 -#: netbox/vpn/forms/model_forms.py:62 netbox/vpn/forms/model_forms.py:147 -#: netbox/vpn/forms/model_forms.py:411 netbox/wireless/forms/model_forms.py:54 -#: netbox/wireless/forms/model_forms.py:170 +#: netbox/vpn/forms/model_forms.py:63 netbox/vpn/forms/model_forms.py:148 +#: netbox/vpn/forms/model_forms.py:414 netbox/wireless/forms/model_forms.py:57 +#: netbox/wireless/forms/model_forms.py:173 msgid "Tenancy" msgstr "Najem" -#: netbox/circuits/forms/bulk_edit.py:193 -#: netbox/circuits/forms/bulk_edit.py:217 -#: netbox/circuits/forms/model_forms.py:155 -#: netbox/circuits/tables/circuits.py:117 -#: netbox/templates/circuits/inc/circuit_termination_fields.html:62 -#: netbox/templates/circuits/providernetwork.html:17 -msgid "Provider Network" -msgstr "Sieć dostawców" +#: netbox/circuits/forms/bulk_edit.py:215 +#: netbox/circuits/forms/model_forms.py:170 +#: netbox/dcim/forms/bulk_import.py:1299 netbox/dcim/forms/bulk_import.py:1317 +msgid "Termination type" +msgstr "Typ zakończenia" -#: netbox/circuits/forms/bulk_edit.py:199 +#: netbox/circuits/forms/bulk_edit.py:218 +#: netbox/circuits/forms/bulk_import.py:133 +#: netbox/circuits/forms/filtersets.py:225 +#: netbox/circuits/forms/model_forms.py:173 +#: netbox/templates/circuits/inc/circuit_termination.html:6 +#: netbox/templates/dcim/cable.html:68 netbox/templates/dcim/cable.html:72 +#: netbox/vpn/forms/bulk_import.py:100 netbox/vpn/forms/filtersets.py:77 +msgid "Termination" +msgstr "Wypowiedzenie" + +#: netbox/circuits/forms/bulk_edit.py:226 msgid "Port speed (Kbps)" msgstr "Prędkość portu (Kbps)" -#: netbox/circuits/forms/bulk_edit.py:203 +#: netbox/circuits/forms/bulk_edit.py:230 msgid "Upstream speed (Kbps)" msgstr "Prędkość od klienta do serwera (Kbps)" -#: netbox/circuits/forms/bulk_edit.py:206 netbox/dcim/forms/bulk_edit.py:966 -#: netbox/dcim/forms/bulk_edit.py:1330 netbox/dcim/forms/bulk_edit.py:1347 -#: netbox/dcim/forms/bulk_edit.py:1364 netbox/dcim/forms/bulk_edit.py:1382 -#: netbox/dcim/forms/bulk_edit.py:1477 netbox/dcim/forms/bulk_edit.py:1637 -#: netbox/dcim/forms/bulk_edit.py:1654 +#: netbox/circuits/forms/bulk_edit.py:233 netbox/dcim/forms/bulk_edit.py:969 +#: netbox/dcim/forms/bulk_edit.py:1333 netbox/dcim/forms/bulk_edit.py:1350 +#: netbox/dcim/forms/bulk_edit.py:1367 netbox/dcim/forms/bulk_edit.py:1385 +#: netbox/dcim/forms/bulk_edit.py:1480 netbox/dcim/forms/bulk_edit.py:1652 +#: netbox/dcim/forms/bulk_edit.py:1669 msgid "Mark connected" msgstr "Oznacz podłączony" -#: netbox/circuits/forms/bulk_edit.py:219 -#: netbox/circuits/forms/model_forms.py:157 -#: netbox/templates/circuits/inc/circuit_termination_fields.html:54 +#: netbox/circuits/forms/bulk_edit.py:243 +#: netbox/circuits/forms/model_forms.py:184 +#: netbox/templates/circuits/inc/circuit_termination_fields.html:55 #: netbox/templates/dcim/frontport.html:121 -#: netbox/templates/dcim/interface.html:193 +#: netbox/templates/dcim/interface.html:250 #: netbox/templates/dcim/rearport.html:111 msgid "Circuit Termination" msgstr "Zakończenie obwodu" -#: netbox/circuits/forms/bulk_edit.py:221 -#: netbox/circuits/forms/model_forms.py:159 +#: netbox/circuits/forms/bulk_edit.py:245 +#: netbox/circuits/forms/model_forms.py:186 msgid "Termination Details" msgstr "Szczegóły wypowiedzenia" -#: netbox/circuits/forms/bulk_edit.py:251 -#: netbox/circuits/forms/filtersets.py:268 -#: netbox/circuits/tables/circuits.py:168 netbox/dcim/forms/model_forms.py:551 -#: netbox/templates/circuits/circuitgroupassignment.html:30 +#: netbox/circuits/forms/bulk_edit.py:289 +#: netbox/circuits/forms/bulk_import.py:188 +#: netbox/circuits/forms/filtersets.py:304 +#: netbox/circuits/tables/circuits.py:207 netbox/dcim/forms/model_forms.py:562 +#: netbox/templates/circuits/circuitgroupassignment.html:34 #: netbox/templates/dcim/device.html:133 #: netbox/templates/dcim/virtualchassis.html:68 #: netbox/templates/dcim/virtualchassis_edit.html:56 @@ -889,227 +1068,313 @@ msgstr "Szczegóły wypowiedzenia" msgid "Priority" msgstr "Priorytet" -#: netbox/circuits/forms/bulk_import.py:39 -#: netbox/circuits/forms/bulk_import.py:54 -#: netbox/circuits/forms/bulk_import.py:77 -msgid "Assigned provider" -msgstr "Przydzielony dostawca" - -#: netbox/circuits/forms/bulk_import.py:83 -msgid "Assigned provider account" -msgstr "Przydzielone konto dostawcy" - -#: netbox/circuits/forms/bulk_import.py:90 -msgid "Type of circuit" -msgstr "Rodzaj obwodu" - -#: netbox/circuits/forms/bulk_import.py:95 netbox/dcim/forms/bulk_import.py:90 -#: netbox/dcim/forms/bulk_import.py:149 netbox/dcim/forms/bulk_import.py:250 -#: netbox/dcim/forms/bulk_import.py:529 netbox/dcim/forms/bulk_import.py:683 -#: netbox/dcim/forms/bulk_import.py:1395 netbox/ipam/forms/bulk_import.py:194 -#: netbox/ipam/forms/bulk_import.py:259 netbox/ipam/forms/bulk_import.py:295 -#: netbox/ipam/forms/bulk_import.py:476 -#: netbox/virtualization/forms/bulk_import.py:56 -#: netbox/virtualization/forms/bulk_import.py:82 -#: netbox/vpn/forms/bulk_import.py:39 netbox/wireless/forms/bulk_import.py:45 -msgid "Operational status" -msgstr "Status operacyjny" - -#: netbox/circuits/forms/bulk_import.py:102 -#: netbox/circuits/forms/bulk_import.py:162 -#: netbox/dcim/forms/bulk_import.py:111 netbox/dcim/forms/bulk_import.py:156 -#: netbox/dcim/forms/bulk_import.py:360 netbox/dcim/forms/bulk_import.py:505 -#: netbox/dcim/forms/bulk_import.py:1245 netbox/dcim/forms/bulk_import.py:1390 -#: netbox/dcim/forms/bulk_import.py:1454 netbox/ipam/forms/bulk_import.py:42 -#: netbox/ipam/forms/bulk_import.py:71 netbox/ipam/forms/bulk_import.py:99 -#: netbox/ipam/forms/bulk_import.py:119 netbox/ipam/forms/bulk_import.py:139 -#: netbox/ipam/forms/bulk_import.py:168 netbox/ipam/forms/bulk_import.py:254 -#: netbox/ipam/forms/bulk_import.py:290 netbox/ipam/forms/bulk_import.py:471 -#: netbox/virtualization/forms/bulk_import.py:70 -#: netbox/virtualization/forms/bulk_import.py:119 -#: netbox/vpn/forms/bulk_import.py:63 netbox/wireless/forms/bulk_import.py:59 -#: netbox/wireless/forms/bulk_import.py:101 -msgid "Assigned tenant" -msgstr "Przydzielony najemca" - -#: netbox/circuits/forms/bulk_import.py:120 -#: netbox/templates/circuits/inc/circuit_termination.html:6 -#: netbox/templates/circuits/inc/circuit_termination_fields.html:15 -#: netbox/templates/dcim/cable.html:68 netbox/templates/dcim/cable.html:72 -#: netbox/vpn/forms/bulk_import.py:100 netbox/vpn/forms/filtersets.py:77 -msgid "Termination" -msgstr "Wypowiedzenie" - -#: netbox/circuits/forms/bulk_import.py:130 -#: netbox/circuits/forms/filtersets.py:147 -#: netbox/circuits/forms/filtersets.py:227 -#: netbox/circuits/forms/model_forms.py:144 +#: netbox/circuits/forms/bulk_edit.py:321 +#: netbox/circuits/forms/bulk_import.py:208 +#: netbox/circuits/forms/filtersets.py:158 +#: netbox/circuits/forms/filtersets.py:263 +#: netbox/circuits/forms/filtersets.py:353 +#: netbox/circuits/forms/filtersets.py:391 +#: netbox/circuits/forms/model_forms.py:325 +#: netbox/circuits/tables/virtual_circuits.py:51 +#: netbox/circuits/tables/virtual_circuits.py:99 msgid "Provider network" msgstr "Sieć dostawców" -#: netbox/circuits/forms/filtersets.py:30 -#: netbox/circuits/forms/filtersets.py:118 -#: netbox/circuits/forms/filtersets.py:200 netbox/dcim/forms/bulk_edit.py:339 -#: netbox/dcim/forms/bulk_edit.py:447 netbox/dcim/forms/bulk_edit.py:688 -#: netbox/dcim/forms/bulk_edit.py:743 netbox/dcim/forms/bulk_edit.py:897 -#: netbox/dcim/forms/bulk_import.py:235 netbox/dcim/forms/bulk_import.py:337 -#: netbox/dcim/forms/bulk_import.py:568 netbox/dcim/forms/bulk_import.py:1339 -#: netbox/dcim/forms/bulk_import.py:1373 netbox/dcim/forms/filtersets.py:95 -#: netbox/dcim/forms/filtersets.py:322 netbox/dcim/forms/filtersets.py:356 -#: netbox/dcim/forms/filtersets.py:396 netbox/dcim/forms/filtersets.py:447 -#: netbox/dcim/forms/filtersets.py:719 netbox/dcim/forms/filtersets.py:762 -#: netbox/dcim/forms/filtersets.py:977 netbox/dcim/forms/filtersets.py:1006 -#: netbox/dcim/forms/filtersets.py:1026 netbox/dcim/forms/filtersets.py:1090 -#: netbox/dcim/forms/filtersets.py:1120 netbox/dcim/forms/filtersets.py:1129 -#: netbox/dcim/forms/filtersets.py:1240 netbox/dcim/forms/filtersets.py:1264 -#: netbox/dcim/forms/filtersets.py:1289 netbox/dcim/forms/filtersets.py:1308 -#: netbox/dcim/forms/filtersets.py:1331 netbox/dcim/forms/filtersets.py:1442 -#: netbox/dcim/forms/filtersets.py:1466 netbox/dcim/forms/filtersets.py:1490 -#: netbox/dcim/forms/filtersets.py:1508 netbox/dcim/forms/filtersets.py:1525 -#: netbox/dcim/forms/model_forms.py:180 netbox/dcim/forms/model_forms.py:243 -#: netbox/dcim/forms/model_forms.py:468 netbox/dcim/forms/model_forms.py:728 -#: netbox/dcim/tables/devices.py:157 netbox/dcim/tables/power.py:30 -#: netbox/dcim/tables/racks.py:118 netbox/dcim/tables/racks.py:212 -#: netbox/extras/filtersets.py:536 netbox/extras/forms/filtersets.py:320 -#: netbox/ipam/forms/filtersets.py:173 netbox/ipam/forms/filtersets.py:414 -#: netbox/ipam/forms/filtersets.py:437 netbox/ipam/forms/filtersets.py:467 +#: netbox/circuits/forms/bulk_edit.py:365 +#: netbox/circuits/forms/bulk_import.py:254 +#: netbox/circuits/forms/filtersets.py:381 +#: netbox/circuits/forms/model_forms.py:365 netbox/dcim/forms/bulk_edit.py:361 +#: netbox/dcim/forms/bulk_edit.py:1280 netbox/dcim/forms/bulk_edit.py:1713 +#: netbox/dcim/forms/bulk_import.py:255 netbox/dcim/forms/bulk_import.py:1106 +#: netbox/dcim/forms/filtersets.py:368 netbox/dcim/forms/filtersets.py:778 +#: netbox/dcim/forms/filtersets.py:1539 netbox/dcim/forms/model_forms.py:256 +#: netbox/dcim/forms/model_forms.py:1090 netbox/dcim/forms/model_forms.py:1559 +#: netbox/dcim/forms/object_import.py:182 netbox/dcim/tables/devices.py:180 +#: netbox/dcim/tables/devices.py:841 netbox/dcim/tables/devices.py:967 +#: netbox/dcim/tables/devicetypes.py:311 netbox/dcim/tables/racks.py:128 +#: netbox/extras/filtersets.py:552 netbox/ipam/forms/bulk_edit.py:245 +#: netbox/ipam/forms/bulk_edit.py:295 netbox/ipam/forms/bulk_edit.py:343 +#: netbox/ipam/forms/bulk_edit.py:495 netbox/ipam/forms/bulk_import.py:193 +#: netbox/ipam/forms/bulk_import.py:261 netbox/ipam/forms/bulk_import.py:297 +#: netbox/ipam/forms/bulk_import.py:478 netbox/ipam/forms/filtersets.py:240 +#: netbox/ipam/forms/filtersets.py:292 netbox/ipam/forms/filtersets.py:363 +#: netbox/ipam/forms/filtersets.py:550 netbox/ipam/forms/model_forms.py:194 +#: netbox/ipam/forms/model_forms.py:220 netbox/ipam/forms/model_forms.py:259 +#: netbox/ipam/forms/model_forms.py:686 netbox/ipam/tables/ip.py:209 +#: netbox/ipam/tables/ip.py:268 netbox/ipam/tables/ip.py:319 +#: netbox/ipam/tables/vlans.py:99 netbox/ipam/tables/vlans.py:211 +#: netbox/templates/circuits/virtualcircuittermination.html:42 +#: netbox/templates/dcim/device.html:182 +#: netbox/templates/dcim/inc/panels/inventory_items.html:20 +#: netbox/templates/dcim/interface.html:178 +#: netbox/templates/dcim/interface.html:280 +#: netbox/templates/dcim/inventoryitem.html:40 +#: netbox/templates/dcim/rack.html:49 netbox/templates/ipam/ipaddress.html:41 +#: netbox/templates/ipam/iprange.html:50 netbox/templates/ipam/prefix.html:73 +#: netbox/templates/ipam/role.html:19 netbox/templates/ipam/vlan.html:52 +#: netbox/templates/virtualization/virtualmachine.html:23 +#: netbox/templates/vpn/tunneltermination.html:17 +#: netbox/templates/wireless/inc/wirelesslink_interface.html:20 +#: netbox/tenancy/forms/bulk_edit.py:142 +#: netbox/tenancy/forms/filtersets.py:107 +#: netbox/tenancy/forms/model_forms.py:137 +#: netbox/tenancy/tables/contacts.py:102 +#: netbox/virtualization/forms/bulk_edit.py:127 +#: netbox/virtualization/forms/bulk_import.py:112 +#: netbox/virtualization/forms/filtersets.py:162 +#: netbox/virtualization/forms/model_forms.py:202 +#: netbox/virtualization/tables/virtualmachines.py:45 +#: netbox/vpn/forms/bulk_edit.py:87 netbox/vpn/forms/bulk_import.py:81 +#: netbox/vpn/forms/filtersets.py:85 netbox/vpn/forms/model_forms.py:79 +#: netbox/vpn/forms/model_forms.py:114 netbox/vpn/tables/tunnels.py:82 +msgid "Role" +msgstr "Rola" + +#: netbox/circuits/forms/bulk_import.py:46 +#: netbox/circuits/forms/bulk_import.py:61 +#: netbox/circuits/forms/bulk_import.py:84 +msgid "Assigned provider" +msgstr "Przydzielony dostawca" + +#: netbox/circuits/forms/bulk_import.py:90 +msgid "Assigned provider account" +msgstr "Przydzielone konto dostawcy" + +#: netbox/circuits/forms/bulk_import.py:97 +msgid "Type of circuit" +msgstr "Rodzaj obwodu" + +#: netbox/circuits/forms/bulk_import.py:102 +#: netbox/circuits/forms/bulk_import.py:229 +#: netbox/dcim/forms/bulk_import.py:92 netbox/dcim/forms/bulk_import.py:151 +#: netbox/dcim/forms/bulk_import.py:252 netbox/dcim/forms/bulk_import.py:534 +#: netbox/dcim/forms/bulk_import.py:688 netbox/dcim/forms/bulk_import.py:1139 +#: netbox/dcim/forms/bulk_import.py:1492 netbox/ipam/forms/bulk_import.py:190 +#: netbox/ipam/forms/bulk_import.py:258 netbox/ipam/forms/bulk_import.py:294 +#: netbox/ipam/forms/bulk_import.py:475 netbox/ipam/forms/bulk_import.py:488 +#: netbox/virtualization/forms/bulk_import.py:57 +#: netbox/virtualization/forms/bulk_import.py:88 +#: netbox/vpn/forms/bulk_import.py:39 netbox/wireless/forms/bulk_import.py:47 +msgid "Operational status" +msgstr "Status operacyjny" + +#: netbox/circuits/forms/bulk_import.py:115 +#: netbox/circuits/forms/bulk_import.py:174 +#: netbox/circuits/forms/bulk_import.py:236 +#: netbox/dcim/forms/bulk_import.py:113 netbox/dcim/forms/bulk_import.py:158 +#: netbox/dcim/forms/bulk_import.py:362 netbox/dcim/forms/bulk_import.py:510 +#: netbox/dcim/forms/bulk_import.py:1342 netbox/dcim/forms/bulk_import.py:1487 +#: netbox/dcim/forms/bulk_import.py:1551 netbox/ipam/forms/bulk_import.py:45 +#: netbox/ipam/forms/bulk_import.py:74 netbox/ipam/forms/bulk_import.py:102 +#: netbox/ipam/forms/bulk_import.py:122 netbox/ipam/forms/bulk_import.py:142 +#: netbox/ipam/forms/bulk_import.py:171 netbox/ipam/forms/bulk_import.py:253 +#: netbox/ipam/forms/bulk_import.py:289 netbox/ipam/forms/bulk_import.py:470 +#: netbox/virtualization/forms/bulk_import.py:71 +#: netbox/virtualization/forms/bulk_import.py:125 +#: netbox/vpn/forms/bulk_import.py:63 netbox/wireless/forms/bulk_import.py:61 +#: netbox/wireless/forms/bulk_import.py:106 +msgid "Assigned tenant" +msgstr "Przydzielony najemca" + +#: netbox/circuits/forms/bulk_import.py:139 +msgid "Termination type (app & model)" +msgstr "Typ zakończenia (aplikacja i model)" + +#: netbox/circuits/forms/bulk_import.py:151 +#: netbox/circuits/forms/bulk_import.py:164 +msgid "Termination ID" +msgstr "Identyfikator zakończenia" + +#: netbox/circuits/forms/bulk_import.py:185 +msgid "Circuit type (app & model)" +msgstr "Typ obwodu (aplikacja i model)" + +#: netbox/circuits/forms/bulk_import.py:211 +msgid "The network to which this virtual circuit belongs" +msgstr "Sieć, do której należy ten wirtualny obwód" + +#: netbox/circuits/forms/bulk_import.py:217 +msgid "Assigned provider account (if any)" +msgstr "Przydzielone konto dostawcy (jeśli istnieje)" + +#: netbox/circuits/forms/bulk_import.py:224 +msgid "Type of virtual circuit" +msgstr "Rodzaj wirtualnego obwodu" + +#: netbox/circuits/forms/bulk_import.py:256 netbox/vpn/forms/bulk_import.py:83 +msgid "Operational role" +msgstr "Rola operacyjna" + +#: netbox/circuits/forms/bulk_import.py:259 +#: netbox/circuits/forms/model_forms.py:368 +#: netbox/circuits/tables/virtual_circuits.py:112 +#: netbox/dcim/forms/bulk_import.py:1219 netbox/dcim/forms/model_forms.py:1164 +#: netbox/dcim/forms/model_forms.py:1433 netbox/dcim/forms/model_forms.py:1600 +#: netbox/dcim/forms/model_forms.py:1635 netbox/dcim/forms/model_forms.py:1765 +#: netbox/dcim/tables/connections.py:65 netbox/dcim/tables/devices.py:1141 +#: netbox/ipam/forms/bulk_import.py:317 netbox/ipam/forms/model_forms.py:290 +#: netbox/ipam/forms/model_forms.py:299 netbox/ipam/tables/fhrp.py:64 +#: netbox/ipam/tables/ip.py:324 netbox/ipam/tables/vlans.py:145 +#: netbox/templates/circuits/inc/circuit_termination_fields.html:52 +#: netbox/templates/circuits/virtualcircuittermination.html:53 +#: netbox/templates/circuits/virtualcircuittermination.html:60 +#: netbox/templates/dcim/frontport.html:106 +#: netbox/templates/dcim/interface.html:27 +#: netbox/templates/dcim/interface.html:241 +#: netbox/templates/dcim/interface.html:367 +#: netbox/templates/dcim/rearport.html:102 +#: netbox/templates/virtualization/vminterface.html:18 +#: netbox/templates/vpn/tunneltermination.html:31 +#: netbox/templates/wireless/inc/wirelesslink_interface.html:10 +#: netbox/templates/wireless/wirelesslink.html:10 +#: netbox/templates/wireless/wirelesslink.html:55 +#: netbox/virtualization/forms/model_forms.py:377 +#: netbox/vpn/forms/bulk_import.py:297 netbox/vpn/forms/model_forms.py:439 +#: netbox/vpn/forms/model_forms.py:448 +#: netbox/wireless/forms/model_forms.py:116 +#: netbox/wireless/forms/model_forms.py:158 +msgid "Interface" +msgstr "Interfejs" + +#: netbox/circuits/forms/filtersets.py:38 +#: netbox/circuits/forms/filtersets.py:129 +#: netbox/circuits/forms/filtersets.py:187 +#: netbox/circuits/forms/filtersets.py:245 +#: netbox/circuits/tables/circuits.py:144 netbox/dcim/forms/bulk_edit.py:342 +#: netbox/dcim/forms/bulk_edit.py:450 netbox/dcim/forms/bulk_edit.py:691 +#: netbox/dcim/forms/bulk_edit.py:746 netbox/dcim/forms/bulk_edit.py:900 +#: netbox/dcim/forms/bulk_import.py:237 netbox/dcim/forms/bulk_import.py:339 +#: netbox/dcim/forms/bulk_import.py:573 netbox/dcim/forms/bulk_import.py:1436 +#: netbox/dcim/forms/bulk_import.py:1470 netbox/dcim/forms/filtersets.py:96 +#: netbox/dcim/forms/filtersets.py:323 netbox/dcim/forms/filtersets.py:357 +#: netbox/dcim/forms/filtersets.py:397 netbox/dcim/forms/filtersets.py:448 +#: netbox/dcim/forms/filtersets.py:720 netbox/dcim/forms/filtersets.py:763 +#: netbox/dcim/forms/filtersets.py:978 netbox/dcim/forms/filtersets.py:1007 +#: netbox/dcim/forms/filtersets.py:1027 netbox/dcim/forms/filtersets.py:1091 +#: netbox/dcim/forms/filtersets.py:1121 netbox/dcim/forms/filtersets.py:1130 +#: netbox/dcim/forms/filtersets.py:1241 netbox/dcim/forms/filtersets.py:1265 +#: netbox/dcim/forms/filtersets.py:1290 netbox/dcim/forms/filtersets.py:1309 +#: netbox/dcim/forms/filtersets.py:1336 netbox/dcim/forms/filtersets.py:1447 +#: netbox/dcim/forms/filtersets.py:1471 netbox/dcim/forms/filtersets.py:1495 +#: netbox/dcim/forms/filtersets.py:1513 netbox/dcim/forms/filtersets.py:1530 +#: netbox/dcim/forms/model_forms.py:184 netbox/dcim/forms/model_forms.py:248 +#: netbox/dcim/forms/model_forms.py:478 netbox/dcim/forms/model_forms.py:739 +#: netbox/dcim/tables/devices.py:168 netbox/dcim/tables/power.py:30 +#: netbox/dcim/tables/racks.py:117 netbox/dcim/tables/racks.py:211 +#: netbox/extras/filtersets.py:536 netbox/extras/forms/filtersets.py:327 +#: netbox/ipam/forms/filtersets.py:234 netbox/ipam/forms/filtersets.py:417 +#: netbox/ipam/forms/filtersets.py:440 netbox/ipam/forms/filtersets.py:507 #: netbox/templates/dcim/device.html:26 #: netbox/templates/dcim/device_edit.html:30 #: netbox/templates/dcim/inc/cable_termination.html:12 #: netbox/templates/dcim/location.html:26 #: netbox/templates/dcim/powerpanel.html:26 netbox/templates/dcim/rack.html:24 #: netbox/templates/dcim/rackreservation.html:32 -#: netbox/virtualization/forms/filtersets.py:46 -#: netbox/virtualization/forms/filtersets.py:100 -#: netbox/wireless/forms/model_forms.py:87 -#: netbox/wireless/forms/model_forms.py:129 +#: netbox/virtualization/forms/filtersets.py:79 +#: netbox/virtualization/forms/filtersets.py:105 +#: netbox/wireless/forms/filtersets.py:93 +#: netbox/wireless/forms/model_forms.py:90 +#: netbox/wireless/forms/model_forms.py:132 msgid "Location" msgstr "Lokalizacja" -#: netbox/circuits/forms/filtersets.py:32 -#: netbox/circuits/forms/filtersets.py:120 netbox/dcim/forms/filtersets.py:144 -#: netbox/dcim/forms/filtersets.py:158 netbox/dcim/forms/filtersets.py:174 -#: netbox/dcim/forms/filtersets.py:206 netbox/dcim/forms/filtersets.py:328 -#: netbox/dcim/forms/filtersets.py:400 netbox/dcim/forms/filtersets.py:471 -#: netbox/dcim/forms/filtersets.py:723 netbox/dcim/forms/filtersets.py:1091 +#: netbox/circuits/forms/filtersets.py:40 +#: netbox/circuits/forms/filtersets.py:131 netbox/dcim/forms/filtersets.py:145 +#: netbox/dcim/forms/filtersets.py:159 netbox/dcim/forms/filtersets.py:175 +#: netbox/dcim/forms/filtersets.py:207 netbox/dcim/forms/filtersets.py:329 +#: netbox/dcim/forms/filtersets.py:401 netbox/dcim/forms/filtersets.py:472 +#: netbox/dcim/forms/filtersets.py:724 netbox/dcim/forms/filtersets.py:1092 #: netbox/netbox/navigation/menu.py:31 netbox/netbox/navigation/menu.py:33 -#: netbox/tenancy/forms/filtersets.py:42 netbox/tenancy/tables/columns.py:70 +#: netbox/tenancy/forms/filtersets.py:42 netbox/tenancy/tables/columns.py:55 #: netbox/tenancy/tables/contacts.py:25 netbox/tenancy/views.py:19 #: netbox/virtualization/forms/filtersets.py:37 #: netbox/virtualization/forms/filtersets.py:48 -#: netbox/virtualization/forms/filtersets.py:106 +#: netbox/virtualization/forms/filtersets.py:111 msgid "Contacts" msgstr "Łączność" -#: netbox/circuits/forms/filtersets.py:37 -#: netbox/circuits/forms/filtersets.py:157 netbox/dcim/forms/bulk_edit.py:113 -#: netbox/dcim/forms/bulk_edit.py:314 netbox/dcim/forms/bulk_edit.py:872 -#: netbox/dcim/forms/bulk_import.py:93 netbox/dcim/forms/filtersets.py:73 -#: netbox/dcim/forms/filtersets.py:185 netbox/dcim/forms/filtersets.py:211 -#: netbox/dcim/forms/filtersets.py:334 netbox/dcim/forms/filtersets.py:425 -#: netbox/dcim/forms/filtersets.py:739 netbox/dcim/forms/filtersets.py:983 -#: netbox/dcim/forms/filtersets.py:1013 netbox/dcim/forms/filtersets.py:1097 -#: netbox/dcim/forms/filtersets.py:1136 netbox/dcim/forms/filtersets.py:1576 -#: netbox/dcim/forms/filtersets.py:1600 netbox/dcim/forms/filtersets.py:1624 -#: netbox/dcim/forms/model_forms.py:112 netbox/dcim/forms/object_create.py:367 -#: netbox/dcim/tables/devices.py:143 netbox/dcim/tables/sites.py:85 -#: netbox/extras/filtersets.py:503 netbox/ipam/forms/bulk_edit.py:208 -#: netbox/ipam/forms/bulk_edit.py:474 netbox/ipam/forms/filtersets.py:217 -#: netbox/ipam/forms/filtersets.py:422 netbox/ipam/forms/filtersets.py:475 -#: netbox/templates/dcim/device.html:18 netbox/templates/dcim/rack.html:16 +#: netbox/circuits/forms/filtersets.py:45 +#: netbox/circuits/forms/filtersets.py:168 +#: netbox/circuits/forms/filtersets.py:230 +#: netbox/circuits/tables/circuits.py:139 netbox/dcim/forms/bulk_edit.py:116 +#: netbox/dcim/forms/bulk_edit.py:317 netbox/dcim/forms/bulk_edit.py:875 +#: netbox/dcim/forms/bulk_import.py:95 netbox/dcim/forms/filtersets.py:74 +#: netbox/dcim/forms/filtersets.py:186 netbox/dcim/forms/filtersets.py:212 +#: netbox/dcim/forms/filtersets.py:335 netbox/dcim/forms/filtersets.py:426 +#: netbox/dcim/forms/filtersets.py:740 netbox/dcim/forms/filtersets.py:984 +#: netbox/dcim/forms/filtersets.py:1014 netbox/dcim/forms/filtersets.py:1098 +#: netbox/dcim/forms/filtersets.py:1137 netbox/dcim/forms/filtersets.py:1614 +#: netbox/dcim/forms/filtersets.py:1638 netbox/dcim/forms/filtersets.py:1662 +#: netbox/dcim/forms/model_forms.py:114 netbox/dcim/forms/object_create.py:367 +#: netbox/dcim/tables/devices.py:154 netbox/dcim/tables/sites.py:85 +#: netbox/extras/filtersets.py:503 netbox/ipam/forms/bulk_edit.py:458 +#: netbox/ipam/forms/filtersets.py:219 netbox/ipam/forms/filtersets.py:425 +#: netbox/ipam/forms/filtersets.py:516 netbox/templates/dcim/device.html:18 +#: netbox/templates/dcim/rack.html:16 #: netbox/templates/dcim/rackreservation.html:22 #: netbox/templates/dcim/region.html:26 netbox/templates/dcim/site.html:31 -#: netbox/templates/ipam/prefix.html:49 netbox/templates/ipam/vlan.html:16 -#: netbox/virtualization/forms/bulk_edit.py:81 +#: netbox/templates/ipam/vlan.html:16 #: netbox/virtualization/forms/filtersets.py:59 -#: netbox/virtualization/forms/filtersets.py:133 +#: netbox/virtualization/forms/filtersets.py:138 #: netbox/virtualization/forms/model_forms.py:92 -#: netbox/vpn/forms/filtersets.py:257 +#: netbox/vpn/forms/filtersets.py:257 netbox/wireless/forms/filtersets.py:73 msgid "Region" msgstr "Region" -#: netbox/circuits/forms/filtersets.py:42 -#: netbox/circuits/forms/filtersets.py:162 netbox/dcim/forms/bulk_edit.py:322 -#: netbox/dcim/forms/bulk_edit.py:880 netbox/dcim/forms/filtersets.py:78 -#: netbox/dcim/forms/filtersets.py:190 netbox/dcim/forms/filtersets.py:216 -#: netbox/dcim/forms/filtersets.py:347 netbox/dcim/forms/filtersets.py:430 -#: netbox/dcim/forms/filtersets.py:744 netbox/dcim/forms/filtersets.py:988 -#: netbox/dcim/forms/filtersets.py:1102 netbox/dcim/forms/filtersets.py:1141 +#: netbox/circuits/forms/filtersets.py:50 +#: netbox/circuits/forms/filtersets.py:173 +#: netbox/circuits/forms/filtersets.py:235 netbox/dcim/forms/bulk_edit.py:325 +#: netbox/dcim/forms/bulk_edit.py:883 netbox/dcim/forms/filtersets.py:79 +#: netbox/dcim/forms/filtersets.py:191 netbox/dcim/forms/filtersets.py:217 +#: netbox/dcim/forms/filtersets.py:348 netbox/dcim/forms/filtersets.py:431 +#: netbox/dcim/forms/filtersets.py:745 netbox/dcim/forms/filtersets.py:989 +#: netbox/dcim/forms/filtersets.py:1103 netbox/dcim/forms/filtersets.py:1142 #: netbox/dcim/forms/object_create.py:375 netbox/extras/filtersets.py:520 -#: netbox/ipam/forms/bulk_edit.py:213 netbox/ipam/forms/bulk_edit.py:479 -#: netbox/ipam/forms/filtersets.py:222 netbox/ipam/forms/filtersets.py:427 -#: netbox/ipam/forms/filtersets.py:480 -#: netbox/virtualization/forms/bulk_edit.py:86 -#: netbox/virtualization/forms/filtersets.py:69 -#: netbox/virtualization/forms/filtersets.py:138 +#: netbox/ipam/forms/bulk_edit.py:463 netbox/ipam/forms/filtersets.py:224 +#: netbox/ipam/forms/filtersets.py:430 netbox/ipam/forms/filtersets.py:521 +#: netbox/virtualization/forms/filtersets.py:64 +#: netbox/virtualization/forms/filtersets.py:143 #: netbox/virtualization/forms/model_forms.py:98 +#: netbox/wireless/forms/filtersets.py:78 msgid "Site group" msgstr "Grupa terenów" -#: netbox/circuits/forms/filtersets.py:65 -#: netbox/circuits/forms/filtersets.py:83 -#: netbox/circuits/forms/filtersets.py:102 -#: netbox/circuits/forms/filtersets.py:117 netbox/core/forms/filtersets.py:67 -#: netbox/core/forms/filtersets.py:135 netbox/dcim/forms/bulk_edit.py:843 -#: netbox/dcim/forms/filtersets.py:172 netbox/dcim/forms/filtersets.py:204 -#: netbox/dcim/forms/filtersets.py:915 netbox/dcim/forms/filtersets.py:1007 -#: netbox/dcim/forms/filtersets.py:1131 netbox/dcim/forms/filtersets.py:1239 -#: netbox/dcim/forms/filtersets.py:1263 netbox/dcim/forms/filtersets.py:1288 -#: netbox/dcim/forms/filtersets.py:1307 netbox/dcim/forms/filtersets.py:1327 -#: netbox/dcim/forms/filtersets.py:1441 netbox/dcim/forms/filtersets.py:1465 -#: netbox/dcim/forms/filtersets.py:1489 netbox/dcim/forms/filtersets.py:1507 -#: netbox/dcim/forms/filtersets.py:1523 netbox/extras/forms/bulk_edit.py:90 -#: netbox/extras/forms/filtersets.py:44 netbox/extras/forms/filtersets.py:134 -#: netbox/extras/forms/filtersets.py:165 netbox/extras/forms/filtersets.py:205 -#: netbox/extras/forms/filtersets.py:221 netbox/extras/forms/filtersets.py:252 -#: netbox/extras/forms/filtersets.py:276 netbox/extras/forms/filtersets.py:441 -#: netbox/ipam/forms/filtersets.py:99 netbox/ipam/forms/filtersets.py:266 -#: netbox/ipam/forms/filtersets.py:307 netbox/ipam/forms/filtersets.py:382 -#: netbox/ipam/forms/filtersets.py:468 netbox/ipam/forms/filtersets.py:527 -#: netbox/ipam/forms/filtersets.py:545 netbox/netbox/tables/tables.py:256 -#: netbox/virtualization/forms/filtersets.py:45 -#: netbox/virtualization/forms/filtersets.py:103 -#: netbox/virtualization/forms/filtersets.py:198 -#: netbox/virtualization/forms/filtersets.py:243 -#: netbox/vpn/forms/filtersets.py:213 netbox/wireless/forms/bulk_edit.py:150 -#: netbox/wireless/forms/filtersets.py:34 -#: netbox/wireless/forms/filtersets.py:74 -msgid "Attributes" -msgstr "Atrybuty" - -#: netbox/circuits/forms/filtersets.py:73 -#: netbox/circuits/tables/circuits.py:63 -#: netbox/circuits/tables/providers.py:66 +#: netbox/circuits/forms/filtersets.py:81 +#: netbox/circuits/tables/circuits.py:62 +#: netbox/circuits/tables/providers.py:64 +#: netbox/circuits/tables/virtual_circuits.py:55 +#: netbox/circuits/tables/virtual_circuits.py:103 #: netbox/templates/circuits/circuit.html:22 #: netbox/templates/circuits/provideraccount.html:24 msgid "Account" msgstr "Konto" -#: netbox/circuits/forms/filtersets.py:217 +#: netbox/circuits/forms/filtersets.py:253 msgid "Term Side" msgstr "Strona terminowa" -#: netbox/circuits/forms/filtersets.py:250 netbox/dcim/forms/bulk_edit.py:1557 -#: netbox/extras/forms/model_forms.py:582 netbox/ipam/forms/filtersets.py:142 -#: netbox/ipam/forms/filtersets.py:546 netbox/ipam/forms/model_forms.py:327 +#: netbox/circuits/forms/filtersets.py:286 netbox/dcim/forms/bulk_edit.py:1572 +#: netbox/extras/forms/model_forms.py:596 netbox/ipam/forms/filtersets.py:144 +#: netbox/ipam/forms/filtersets.py:598 netbox/ipam/forms/model_forms.py:337 +#: netbox/templates/dcim/macaddress.html:25 #: netbox/templates/extras/configcontext.html:60 #: netbox/templates/ipam/ipaddress.html:59 -#: netbox/templates/ipam/vlan_edit.html:30 +#: netbox/templates/ipam/vlan_edit.html:38 #: netbox/tenancy/forms/filtersets.py:87 netbox/users/forms/model_forms.py:314 msgid "Assignment" msgstr "Zlecenie" -#: netbox/circuits/forms/filtersets.py:265 -#: netbox/circuits/forms/model_forms.py:195 -#: netbox/circuits/tables/circuits.py:155 netbox/dcim/forms/bulk_edit.py:118 -#: netbox/dcim/forms/bulk_import.py:100 netbox/dcim/forms/model_forms.py:117 -#: netbox/dcim/tables/sites.py:89 netbox/extras/forms/filtersets.py:480 -#: netbox/ipam/filtersets.py:1001 netbox/ipam/forms/bulk_edit.py:493 -#: netbox/ipam/forms/bulk_import.py:460 netbox/ipam/forms/model_forms.py:561 -#: netbox/ipam/tables/fhrp.py:67 netbox/ipam/tables/vlans.py:122 -#: netbox/ipam/tables/vlans.py:226 +#: netbox/circuits/forms/filtersets.py:301 +#: netbox/circuits/forms/model_forms.py:252 +#: netbox/circuits/tables/circuits.py:191 netbox/dcim/forms/bulk_edit.py:121 +#: netbox/dcim/forms/bulk_import.py:102 netbox/dcim/forms/model_forms.py:120 +#: netbox/dcim/tables/sites.py:89 netbox/extras/forms/filtersets.py:489 +#: netbox/ipam/filtersets.py:968 netbox/ipam/forms/bulk_edit.py:477 +#: netbox/ipam/forms/bulk_import.py:459 netbox/ipam/forms/model_forms.py:571 +#: netbox/ipam/tables/fhrp.py:67 netbox/ipam/tables/vlans.py:91 +#: netbox/ipam/tables/vlans.py:202 #: netbox/templates/circuits/circuitgroupassignment.html:22 -#: netbox/templates/dcim/interface.html:284 netbox/templates/dcim/site.html:37 +#: netbox/templates/dcim/interface.html:341 netbox/templates/dcim/site.html:37 #: netbox/templates/ipam/inc/panels/fhrp_groups.html:23 #: netbox/templates/ipam/vlan.html:27 netbox/templates/tenancy/contact.html:21 #: netbox/templates/tenancy/tenant.html:20 netbox/templates/users/group.html:6 @@ -1129,226 +1394,241 @@ msgstr "Zlecenie" #: netbox/tenancy/tables/tenants.py:42 netbox/users/filtersets.py:62 #: netbox/users/filtersets.py:185 netbox/users/forms/filtersets.py:31 #: netbox/users/forms/filtersets.py:37 netbox/users/forms/filtersets.py:79 -#: netbox/virtualization/forms/bulk_edit.py:65 -#: netbox/virtualization/forms/bulk_import.py:47 -#: netbox/virtualization/forms/filtersets.py:85 -#: netbox/virtualization/forms/model_forms.py:66 +#: netbox/virtualization/forms/bulk_edit.py:66 +#: netbox/virtualization/forms/bulk_import.py:48 +#: netbox/virtualization/forms/filtersets.py:90 +#: netbox/virtualization/forms/model_forms.py:70 #: netbox/virtualization/tables/clusters.py:70 #: netbox/vpn/forms/bulk_edit.py:112 netbox/vpn/forms/bulk_import.py:158 #: netbox/vpn/forms/filtersets.py:116 netbox/vpn/tables/crypto.py:31 -#: netbox/vpn/tables/tunnels.py:44 netbox/wireless/forms/bulk_edit.py:48 -#: netbox/wireless/forms/bulk_import.py:36 -#: netbox/wireless/forms/filtersets.py:46 -#: netbox/wireless/forms/model_forms.py:40 +#: netbox/vpn/tables/tunnels.py:44 netbox/wireless/forms/bulk_edit.py:50 +#: netbox/wireless/forms/bulk_import.py:38 +#: netbox/wireless/forms/filtersets.py:49 +#: netbox/wireless/forms/model_forms.py:41 #: netbox/wireless/tables/wirelesslan.py:48 msgid "Group" msgstr "Grupa" -#: netbox/circuits/forms/model_forms.py:182 +#: netbox/circuits/forms/model_forms.py:239 #: netbox/templates/circuits/circuitgroup.html:25 msgid "Circuit Group" msgstr "Grupa obwodów" -#: netbox/circuits/models/circuits.py:27 netbox/dcim/models/cables.py:67 -#: netbox/dcim/models/device_component_templates.py:517 -#: netbox/dcim/models/device_component_templates.py:617 -#: netbox/dcim/models/device_components.py:975 -#: netbox/dcim/models/device_components.py:1049 -#: netbox/dcim/models/device_components.py:1204 -#: netbox/dcim/models/devices.py:479 netbox/dcim/models/racks.py:224 +#: netbox/circuits/forms/model_forms.py:259 +msgid "Circuit type" +msgstr "Typ obwodu" + +#: netbox/circuits/forms/model_forms.py:270 +msgid "Group Assignment" +msgstr "Przydział grupowy" + +#: netbox/circuits/models/base.py:18 netbox/dcim/models/cables.py:69 +#: netbox/dcim/models/device_component_templates.py:531 +#: netbox/dcim/models/device_component_templates.py:631 +#: netbox/dcim/models/device_components.py:476 +#: netbox/dcim/models/device_components.py:1026 +#: netbox/dcim/models/device_components.py:1097 +#: netbox/dcim/models/device_components.py:1243 +#: netbox/dcim/models/devices.py:478 netbox/dcim/models/racks.py:221 #: netbox/extras/models/tags.py:28 msgid "color" msgstr "kolor" -#: netbox/circuits/models/circuits.py:36 +#: netbox/circuits/models/circuits.py:34 msgid "circuit type" msgstr "typ obwodu" -#: netbox/circuits/models/circuits.py:37 +#: netbox/circuits/models/circuits.py:35 msgid "circuit types" msgstr "typy obwodów" -#: netbox/circuits/models/circuits.py:48 +#: netbox/circuits/models/circuits.py:46 +#: netbox/circuits/models/virtual_circuits.py:38 msgid "circuit ID" msgstr "ID obwodu" -#: netbox/circuits/models/circuits.py:49 +#: netbox/circuits/models/circuits.py:47 +#: netbox/circuits/models/virtual_circuits.py:39 msgid "Unique circuit ID" msgstr "Unikalny identyfikator obwodu" -#: netbox/circuits/models/circuits.py:69 netbox/core/models/data.py:52 -#: netbox/core/models/jobs.py:85 netbox/dcim/models/cables.py:49 -#: netbox/dcim/models/devices.py:653 netbox/dcim/models/devices.py:1173 -#: netbox/dcim/models/devices.py:1404 netbox/dcim/models/power.py:96 -#: netbox/dcim/models/racks.py:297 netbox/dcim/models/sites.py:154 -#: netbox/dcim/models/sites.py:266 netbox/ipam/models/ip.py:253 -#: netbox/ipam/models/ip.py:522 netbox/ipam/models/ip.py:730 -#: netbox/ipam/models/vlans.py:211 netbox/virtualization/models/clusters.py:74 -#: netbox/virtualization/models/virtualmachines.py:84 -#: netbox/vpn/models/tunnels.py:40 netbox/wireless/models.py:95 -#: netbox/wireless/models.py:159 +#: netbox/circuits/models/circuits.py:67 +#: netbox/circuits/models/virtual_circuits.py:59 netbox/core/models/data.py:52 +#: netbox/core/models/jobs.py:85 netbox/dcim/models/cables.py:51 +#: netbox/dcim/models/device_components.py:1283 +#: netbox/dcim/models/devices.py:645 netbox/dcim/models/devices.py:1181 +#: netbox/dcim/models/devices.py:1409 netbox/dcim/models/power.py:94 +#: netbox/dcim/models/racks.py:288 netbox/dcim/models/sites.py:154 +#: netbox/dcim/models/sites.py:270 netbox/ipam/models/ip.py:237 +#: netbox/ipam/models/ip.py:508 netbox/ipam/models/ip.py:729 +#: netbox/ipam/models/vlans.py:210 netbox/virtualization/models/clusters.py:70 +#: netbox/virtualization/models/virtualmachines.py:79 +#: netbox/vpn/models/tunnels.py:38 netbox/wireless/models.py:95 +#: netbox/wireless/models.py:156 msgid "status" msgstr "status" -#: netbox/circuits/models/circuits.py:84 netbox/templates/core/plugin.html:20 +#: netbox/circuits/models/circuits.py:82 netbox/templates/core/plugin.html:20 msgid "installed" msgstr "zainstalowany" -#: netbox/circuits/models/circuits.py:89 +#: netbox/circuits/models/circuits.py:87 msgid "terminates" msgstr "kończy się" -#: netbox/circuits/models/circuits.py:94 +#: netbox/circuits/models/circuits.py:92 msgid "commit rate (Kbps)" msgstr "szybkość zatwierdzania (Kbps)" -#: netbox/circuits/models/circuits.py:95 +#: netbox/circuits/models/circuits.py:93 msgid "Committed rate" msgstr "Stopa zobowiązań" -#: netbox/circuits/models/circuits.py:137 +#: netbox/circuits/models/circuits.py:142 msgid "circuit" msgstr "obwód" -#: netbox/circuits/models/circuits.py:138 +#: netbox/circuits/models/circuits.py:143 msgid "circuits" msgstr "obwodów" -#: netbox/circuits/models/circuits.py:170 +#: netbox/circuits/models/circuits.py:172 msgid "circuit group" msgstr "grupa obwodów" -#: netbox/circuits/models/circuits.py:171 +#: netbox/circuits/models/circuits.py:173 msgid "circuit groups" msgstr "grupy obwodów" -#: netbox/circuits/models/circuits.py:195 netbox/ipam/models/fhrp.py:93 -#: netbox/tenancy/models/contacts.py:134 +#: netbox/circuits/models/circuits.py:190 +msgid "member ID" +msgstr "ID członka" + +#: netbox/circuits/models/circuits.py:202 netbox/ipam/models/fhrp.py:90 +#: netbox/tenancy/models/contacts.py:126 msgid "priority" msgstr "priorytet" -#: netbox/circuits/models/circuits.py:213 +#: netbox/circuits/models/circuits.py:220 msgid "Circuit group assignment" msgstr "Przypisanie grupy obwodów" -#: netbox/circuits/models/circuits.py:214 +#: netbox/circuits/models/circuits.py:221 msgid "Circuit group assignments" msgstr "Przydziały grup obwodowych" -#: netbox/circuits/models/circuits.py:240 -msgid "termination" -msgstr "" +#: netbox/circuits/models/circuits.py:247 +msgid "termination side" +msgstr "strona zakończenia" -#: netbox/circuits/models/circuits.py:257 +#: netbox/circuits/models/circuits.py:266 msgid "port speed (Kbps)" msgstr "Prędkość portu (Kbps)" -#: netbox/circuits/models/circuits.py:260 +#: netbox/circuits/models/circuits.py:269 msgid "Physical circuit speed" msgstr "Prędkość obwodu fizycznego" -#: netbox/circuits/models/circuits.py:265 +#: netbox/circuits/models/circuits.py:274 msgid "upstream speed (Kbps)" msgstr "prędkość przed strumieniem (Kbps)" -#: netbox/circuits/models/circuits.py:266 +#: netbox/circuits/models/circuits.py:275 msgid "Upstream speed, if different from port speed" msgstr "Prędkość poprzedzająca, jeśli różni się od prędkości portu" -#: netbox/circuits/models/circuits.py:271 +#: netbox/circuits/models/circuits.py:280 msgid "cross-connect ID" msgstr "identyfikator połączenia krzyżowego" -#: netbox/circuits/models/circuits.py:272 +#: netbox/circuits/models/circuits.py:281 msgid "ID of the local cross-connect" msgstr "Identyfikator lokalnego połączenia krzyżowego" -#: netbox/circuits/models/circuits.py:277 +#: netbox/circuits/models/circuits.py:286 msgid "patch panel/port(s)" msgstr "panel krosowy/port (y)" -#: netbox/circuits/models/circuits.py:278 +#: netbox/circuits/models/circuits.py:287 msgid "Patch panel ID and port number(s)" msgstr "Identyfikator panelu krosowego i numer (y) portu" -#: netbox/circuits/models/circuits.py:281 -#: netbox/dcim/models/device_component_templates.py:61 -#: netbox/dcim/models/device_components.py:68 netbox/dcim/models/racks.py:685 +#: netbox/circuits/models/circuits.py:290 +#: netbox/circuits/models/virtual_circuits.py:144 +#: netbox/dcim/models/device_component_templates.py:57 +#: netbox/dcim/models/device_components.py:63 netbox/dcim/models/racks.py:681 #: netbox/extras/models/configs.py:45 netbox/extras/models/configs.py:219 #: netbox/extras/models/customfields.py:125 netbox/extras/models/models.py:61 #: netbox/extras/models/models.py:158 netbox/extras/models/models.py:396 #: netbox/extras/models/models.py:511 #: netbox/extras/models/notifications.py:131 -#: netbox/extras/models/staging.py:31 netbox/extras/models/tags.py:32 -#: netbox/netbox/models/__init__.py:110 netbox/netbox/models/__init__.py:145 -#: netbox/netbox/models/__init__.py:191 netbox/users/models/permissions.py:24 -#: netbox/users/models/tokens.py:57 netbox/users/models/users.py:33 -#: netbox/virtualization/models/virtualmachines.py:289 +#: netbox/extras/models/staging.py:32 netbox/extras/models/tags.py:32 +#: netbox/ipam/models/vlans.py:358 netbox/netbox/models/__init__.py:115 +#: netbox/netbox/models/__init__.py:150 netbox/netbox/models/__init__.py:196 +#: netbox/users/models/permissions.py:24 netbox/users/models/tokens.py:57 +#: netbox/users/models/users.py:33 +#: netbox/virtualization/models/virtualmachines.py:276 msgid "description" msgstr "opis" -#: netbox/circuits/models/circuits.py:294 +#: netbox/circuits/models/circuits.py:340 msgid "circuit termination" msgstr "zakończenie obwodu" -#: netbox/circuits/models/circuits.py:295 +#: netbox/circuits/models/circuits.py:341 msgid "circuit terminations" msgstr "zakończenia obwodu" -#: netbox/circuits/models/circuits.py:308 -msgid "" -"A circuit termination must attach to either a site or a provider network." -msgstr "" +#: netbox/circuits/models/circuits.py:353 +msgid "A circuit termination must attach to a terminating object." +msgstr "Zakończenie obwodu musi być dołączone do obiektu końcowego." -#: netbox/circuits/models/circuits.py:310 -msgid "" -"A circuit termination cannot attach to both a site and a provider network." -msgstr "" - -#: netbox/circuits/models/providers.py:22 -#: netbox/circuits/models/providers.py:66 -#: netbox/circuits/models/providers.py:104 netbox/core/models/data.py:39 +#: netbox/circuits/models/providers.py:21 +#: netbox/circuits/models/providers.py:63 +#: netbox/circuits/models/providers.py:98 netbox/core/models/data.py:39 #: netbox/core/models/jobs.py:46 #: netbox/dcim/models/device_component_templates.py:43 -#: netbox/dcim/models/device_components.py:53 -#: netbox/dcim/models/devices.py:593 netbox/dcim/models/devices.py:1335 -#: netbox/dcim/models/devices.py:1400 netbox/dcim/models/power.py:39 -#: netbox/dcim/models/power.py:92 netbox/dcim/models/racks.py:262 -#: netbox/dcim/models/sites.py:138 netbox/extras/models/configs.py:36 +#: netbox/dcim/models/device_components.py:52 +#: netbox/dcim/models/devices.py:589 netbox/dcim/models/devices.py:1341 +#: netbox/dcim/models/devices.py:1404 netbox/dcim/models/power.py:38 +#: netbox/dcim/models/power.py:89 netbox/dcim/models/racks.py:257 +#: netbox/dcim/models/sites.py:142 netbox/extras/models/configs.py:36 #: netbox/extras/models/configs.py:215 netbox/extras/models/customfields.py:92 #: netbox/extras/models/models.py:56 netbox/extras/models/models.py:153 #: netbox/extras/models/models.py:296 netbox/extras/models/models.py:392 #: netbox/extras/models/models.py:501 netbox/extras/models/models.py:596 #: netbox/extras/models/notifications.py:126 -#: netbox/extras/models/scripts.py:30 netbox/extras/models/staging.py:26 -#: netbox/ipam/models/asns.py:18 netbox/ipam/models/fhrp.py:25 -#: netbox/ipam/models/services.py:52 netbox/ipam/models/services.py:88 -#: netbox/ipam/models/vlans.py:36 netbox/ipam/models/vlans.py:200 -#: netbox/ipam/models/vrfs.py:22 netbox/ipam/models/vrfs.py:79 -#: netbox/netbox/models/__init__.py:137 netbox/netbox/models/__init__.py:181 -#: netbox/tenancy/models/contacts.py:64 netbox/tenancy/models/tenants.py:20 -#: netbox/tenancy/models/tenants.py:45 netbox/users/models/permissions.py:20 -#: netbox/users/models/users.py:28 netbox/virtualization/models/clusters.py:57 -#: netbox/virtualization/models/virtualmachines.py:72 -#: netbox/virtualization/models/virtualmachines.py:279 -#: netbox/vpn/models/crypto.py:24 netbox/vpn/models/crypto.py:71 -#: netbox/vpn/models/crypto.py:131 netbox/vpn/models/crypto.py:183 -#: netbox/vpn/models/crypto.py:221 netbox/vpn/models/l2vpn.py:22 -#: netbox/vpn/models/tunnels.py:35 netbox/wireless/models.py:51 +#: netbox/extras/models/scripts.py:30 netbox/extras/models/staging.py:27 +#: netbox/ipam/models/asns.py:17 netbox/ipam/models/fhrp.py:24 +#: netbox/ipam/models/services.py:51 netbox/ipam/models/services.py:84 +#: netbox/ipam/models/vlans.py:37 netbox/ipam/models/vlans.py:199 +#: netbox/ipam/models/vlans.py:337 netbox/ipam/models/vrfs.py:20 +#: netbox/ipam/models/vrfs.py:75 netbox/netbox/models/__init__.py:142 +#: netbox/netbox/models/__init__.py:186 netbox/tenancy/models/contacts.py:58 +#: netbox/tenancy/models/tenants.py:19 netbox/tenancy/models/tenants.py:42 +#: netbox/users/models/permissions.py:20 netbox/users/models/users.py:28 +#: netbox/virtualization/models/clusters.py:52 +#: netbox/virtualization/models/virtualmachines.py:71 +#: netbox/virtualization/models/virtualmachines.py:271 +#: netbox/virtualization/models/virtualmachines.py:305 +#: netbox/vpn/models/crypto.py:23 netbox/vpn/models/crypto.py:69 +#: netbox/vpn/models/crypto.py:128 netbox/vpn/models/crypto.py:180 +#: netbox/vpn/models/crypto.py:216 netbox/vpn/models/l2vpn.py:21 +#: netbox/vpn/models/tunnels.py:32 netbox/wireless/models.py:53 msgid "name" msgstr "nazwa" -#: netbox/circuits/models/providers.py:25 +#: netbox/circuits/models/providers.py:24 msgid "Full name of the provider" msgstr "Pełna nazwa dostawcy" -#: netbox/circuits/models/providers.py:28 netbox/dcim/models/devices.py:86 +#: netbox/circuits/models/providers.py:28 netbox/dcim/models/devices.py:88 #: netbox/dcim/models/racks.py:137 netbox/dcim/models/sites.py:149 #: netbox/extras/models/models.py:506 netbox/ipam/models/asns.py:23 -#: netbox/ipam/models/vlans.py:40 netbox/netbox/models/__init__.py:141 -#: netbox/netbox/models/__init__.py:186 netbox/tenancy/models/tenants.py:25 -#: netbox/tenancy/models/tenants.py:49 netbox/vpn/models/l2vpn.py:27 -#: netbox/wireless/models.py:56 +#: netbox/ipam/models/vlans.py:42 netbox/netbox/models/__init__.py:146 +#: netbox/netbox/models/__init__.py:191 netbox/tenancy/models/tenants.py:25 +#: netbox/tenancy/models/tenants.py:47 netbox/vpn/models/l2vpn.py:27 +#: netbox/wireless/models.py:59 msgid "slug" msgstr "identyfikator" @@ -1360,67 +1640,100 @@ msgstr "dostawca" msgid "providers" msgstr "dostawcy" -#: netbox/circuits/models/providers.py:63 +#: netbox/circuits/models/providers.py:60 msgid "account ID" msgstr "Identyfikator konta" -#: netbox/circuits/models/providers.py:86 +#: netbox/circuits/models/providers.py:83 msgid "provider account" msgstr "konto dostawcy" -#: netbox/circuits/models/providers.py:87 +#: netbox/circuits/models/providers.py:84 msgid "provider accounts" msgstr "konta dostawcy" -#: netbox/circuits/models/providers.py:115 +#: netbox/circuits/models/providers.py:110 msgid "service ID" msgstr "Identyfikator usługi" -#: netbox/circuits/models/providers.py:126 +#: netbox/circuits/models/providers.py:121 msgid "provider network" msgstr "sieć dostawców" -#: netbox/circuits/models/providers.py:127 +#: netbox/circuits/models/providers.py:122 msgid "provider networks" msgstr "sieci dostawców" -#: netbox/circuits/tables/circuits.py:32 -#: netbox/circuits/tables/circuits.py:132 +#: netbox/circuits/models/virtual_circuits.py:28 +msgid "virtual circuit type" +msgstr "typ obwodu wirtualnego" + +#: netbox/circuits/models/virtual_circuits.py:29 +msgid "virtual circuit types" +msgstr "typy obwodów wirtualnych" + +#: netbox/circuits/models/virtual_circuits.py:99 +msgid "virtual circuit" +msgstr "obwód wirtualny" + +#: netbox/circuits/models/virtual_circuits.py:100 +msgid "virtual circuits" +msgstr "obwody wirtualne" + +#: netbox/circuits/models/virtual_circuits.py:133 netbox/ipam/models/ip.py:194 +#: netbox/ipam/models/ip.py:736 netbox/vpn/models/tunnels.py:109 +msgid "role" +msgstr "roli" + +#: netbox/circuits/models/virtual_circuits.py:151 +msgid "virtual circuit termination" +msgstr "zakończenie obwodu wirtualnego" + +#: netbox/circuits/models/virtual_circuits.py:152 +msgid "virtual circuit terminations" +msgstr "zakończenia obwodu wirtualnego" + +#: netbox/circuits/tables/circuits.py:30 +#: netbox/circuits/tables/circuits.py:168 #: netbox/circuits/tables/providers.py:18 -#: netbox/circuits/tables/providers.py:69 -#: netbox/circuits/tables/providers.py:99 netbox/core/tables/data.py:16 +#: netbox/circuits/tables/providers.py:67 +#: netbox/circuits/tables/providers.py:97 +#: netbox/circuits/tables/virtual_circuits.py:18 netbox/core/tables/data.py:16 #: netbox/core/tables/jobs.py:14 netbox/core/tables/plugins.py:44 #: netbox/core/tables/tasks.py:11 netbox/core/tables/tasks.py:115 -#: netbox/dcim/forms/filtersets.py:63 netbox/dcim/forms/object_create.py:43 -#: netbox/dcim/tables/devices.py:52 netbox/dcim/tables/devices.py:92 -#: netbox/dcim/tables/devices.py:134 netbox/dcim/tables/devices.py:289 -#: netbox/dcim/tables/devices.py:392 netbox/dcim/tables/devices.py:433 -#: netbox/dcim/tables/devices.py:482 netbox/dcim/tables/devices.py:531 -#: netbox/dcim/tables/devices.py:648 netbox/dcim/tables/devices.py:731 -#: netbox/dcim/tables/devices.py:778 netbox/dcim/tables/devices.py:841 -#: netbox/dcim/tables/devices.py:911 netbox/dcim/tables/devices.py:974 -#: netbox/dcim/tables/devices.py:994 netbox/dcim/tables/devices.py:1023 -#: netbox/dcim/tables/devices.py:1053 netbox/dcim/tables/devicetypes.py:31 +#: netbox/dcim/forms/filtersets.py:64 netbox/dcim/forms/object_create.py:43 +#: netbox/dcim/tables/devices.py:63 netbox/dcim/tables/devices.py:103 +#: netbox/dcim/tables/devices.py:145 netbox/dcim/tables/devices.py:300 +#: netbox/dcim/tables/devices.py:403 netbox/dcim/tables/devices.py:444 +#: netbox/dcim/tables/devices.py:492 netbox/dcim/tables/devices.py:541 +#: netbox/dcim/tables/devices.py:562 netbox/dcim/tables/devices.py:682 +#: netbox/dcim/tables/devices.py:765 netbox/dcim/tables/devices.py:811 +#: netbox/dcim/tables/devices.py:873 netbox/dcim/tables/devices.py:942 +#: netbox/dcim/tables/devices.py:1007 netbox/dcim/tables/devices.py:1026 +#: netbox/dcim/tables/devices.py:1055 netbox/dcim/tables/devices.py:1085 +#: netbox/dcim/tables/devicetypes.py:31 netbox/dcim/tables/devicetypes.py:227 #: netbox/dcim/tables/power.py:22 netbox/dcim/tables/power.py:62 #: netbox/dcim/tables/racks.py:24 netbox/dcim/tables/racks.py:113 #: netbox/dcim/tables/sites.py:24 netbox/dcim/tables/sites.py:51 -#: netbox/dcim/tables/sites.py:78 netbox/dcim/tables/sites.py:130 -#: netbox/extras/forms/filtersets.py:213 netbox/extras/tables/tables.py:58 +#: netbox/dcim/tables/sites.py:78 netbox/dcim/tables/sites.py:129 +#: netbox/extras/forms/filtersets.py:218 netbox/extras/tables/tables.py:58 #: netbox/extras/tables/tables.py:122 netbox/extras/tables/tables.py:155 #: netbox/extras/tables/tables.py:180 netbox/extras/tables/tables.py:246 #: netbox/extras/tables/tables.py:361 netbox/extras/tables/tables.py:378 #: netbox/extras/tables/tables.py:401 netbox/extras/tables/tables.py:439 #: netbox/extras/tables/tables.py:491 netbox/extras/tables/tables.py:514 -#: netbox/ipam/forms/bulk_edit.py:407 netbox/ipam/forms/filtersets.py:386 -#: netbox/ipam/tables/asn.py:16 netbox/ipam/tables/ip.py:85 -#: netbox/ipam/tables/ip.py:160 netbox/ipam/tables/services.py:15 -#: netbox/ipam/tables/services.py:40 netbox/ipam/tables/vlans.py:64 -#: netbox/ipam/tables/vlans.py:114 netbox/ipam/tables/vrfs.py:26 +#: netbox/ipam/forms/bulk_edit.py:391 netbox/ipam/forms/filtersets.py:389 +#: netbox/ipam/forms/filtersets.py:474 netbox/ipam/tables/asn.py:16 +#: netbox/ipam/tables/ip.py:31 netbox/ipam/tables/ip.py:106 +#: netbox/ipam/tables/services.py:15 netbox/ipam/tables/services.py:40 +#: netbox/ipam/tables/vlans.py:33 netbox/ipam/tables/vlans.py:83 +#: netbox/ipam/tables/vlans.py:231 netbox/ipam/tables/vrfs.py:26 #: netbox/ipam/tables/vrfs.py:68 #: netbox/templates/circuits/circuitgroup.html:28 #: netbox/templates/circuits/circuittype.html:22 #: netbox/templates/circuits/provideraccount.html:28 #: netbox/templates/circuits/providernetwork.html:24 +#: netbox/templates/circuits/virtualcircuittype.html:22 #: netbox/templates/core/datasource.html:34 netbox/templates/core/job.html:44 #: netbox/templates/core/plugin.html:54 #: netbox/templates/core/rq_worker.html:43 @@ -1432,7 +1745,7 @@ msgstr "sieci dostawców" #: netbox/templates/dcim/inc/interface_vlans_table.html:5 #: netbox/templates/dcim/inc/panels/inventory_items.html:18 #: netbox/templates/dcim/interface.html:38 -#: netbox/templates/dcim/interface.html:165 +#: netbox/templates/dcim/interface.html:222 #: netbox/templates/dcim/inventoryitem.html:28 #: netbox/templates/dcim/inventoryitemrole.html:18 #: netbox/templates/dcim/location.html:29 @@ -1462,6 +1775,7 @@ msgstr "sieci dostawców" #: netbox/templates/ipam/service.html:24 #: netbox/templates/ipam/servicetemplate.html:15 #: netbox/templates/ipam/vlan.html:35 netbox/templates/ipam/vlangroup.html:30 +#: netbox/templates/ipam/vlantranslationpolicy.html:14 #: netbox/templates/tenancy/contact.html:25 #: netbox/templates/tenancy/contactgroup.html:21 #: netbox/templates/tenancy/contactrole.html:18 @@ -1493,106 +1807,218 @@ msgstr "sieci dostawców" #: netbox/virtualization/tables/clusters.py:17 #: netbox/virtualization/tables/clusters.py:39 #: netbox/virtualization/tables/clusters.py:62 -#: netbox/virtualization/tables/virtualmachines.py:55 -#: netbox/virtualization/tables/virtualmachines.py:139 -#: netbox/virtualization/tables/virtualmachines.py:194 +#: netbox/virtualization/tables/virtualmachines.py:26 +#: netbox/virtualization/tables/virtualmachines.py:109 +#: netbox/virtualization/tables/virtualmachines.py:165 #: netbox/vpn/tables/crypto.py:18 netbox/vpn/tables/crypto.py:57 #: netbox/vpn/tables/crypto.py:93 netbox/vpn/tables/crypto.py:129 #: netbox/vpn/tables/crypto.py:158 netbox/vpn/tables/l2vpn.py:23 #: netbox/vpn/tables/tunnels.py:18 netbox/vpn/tables/tunnels.py:40 #: netbox/wireless/tables/wirelesslan.py:18 -#: netbox/wireless/tables/wirelesslan.py:79 +#: netbox/wireless/tables/wirelesslan.py:88 msgid "Name" msgstr "Nazwa" -#: netbox/circuits/tables/circuits.py:41 -#: netbox/circuits/tables/circuits.py:138 -#: netbox/circuits/tables/providers.py:45 -#: netbox/circuits/tables/providers.py:79 netbox/netbox/navigation/menu.py:266 -#: netbox/netbox/navigation/menu.py:270 netbox/netbox/navigation/menu.py:272 +#: netbox/circuits/tables/circuits.py:39 +#: netbox/circuits/tables/circuits.py:174 +#: netbox/circuits/tables/providers.py:43 +#: netbox/circuits/tables/providers.py:77 +#: netbox/circuits/tables/virtual_circuits.py:27 +#: netbox/netbox/navigation/menu.py:274 netbox/netbox/navigation/menu.py:278 +#: netbox/netbox/navigation/menu.py:280 #: netbox/templates/circuits/provider.html:57 #: netbox/templates/circuits/provideraccount.html:44 #: netbox/templates/circuits/providernetwork.html:50 msgid "Circuits" msgstr "Obwody" -#: netbox/circuits/tables/circuits.py:55 +#: netbox/circuits/tables/circuits.py:54 +#: netbox/circuits/tables/virtual_circuits.py:42 #: netbox/templates/circuits/circuit.html:26 +#: netbox/templates/circuits/virtualcircuit.html:35 +#: netbox/templates/dcim/interface.html:174 msgid "Circuit ID" msgstr "Identyfikator obwodu" -#: netbox/circuits/tables/circuits.py:69 -#: netbox/wireless/forms/model_forms.py:160 +#: netbox/circuits/tables/circuits.py:72 +#: netbox/wireless/forms/model_forms.py:163 msgid "Side A" msgstr "Strona A" -#: netbox/circuits/tables/circuits.py:74 +#: netbox/circuits/tables/circuits.py:77 msgid "Side Z" msgstr "Strona Z" -#: netbox/circuits/tables/circuits.py:77 -#: netbox/templates/circuits/circuit.html:55 +#: netbox/circuits/tables/circuits.py:80 +#: netbox/templates/circuits/circuit.html:65 msgid "Commit Rate" msgstr "Współczynnik zatwierdzania" -#: netbox/circuits/tables/circuits.py:80 -#: netbox/circuits/tables/providers.py:48 -#: netbox/circuits/tables/providers.py:82 -#: netbox/circuits/tables/providers.py:107 netbox/dcim/tables/devices.py:1036 -#: netbox/dcim/tables/devicetypes.py:92 netbox/dcim/tables/modules.py:29 -#: netbox/dcim/tables/modules.py:73 netbox/dcim/tables/power.py:39 -#: netbox/dcim/tables/power.py:96 netbox/dcim/tables/racks.py:84 -#: netbox/dcim/tables/racks.py:145 netbox/dcim/tables/racks.py:225 -#: netbox/dcim/tables/sites.py:108 netbox/extras/tables/tables.py:582 -#: netbox/ipam/tables/asn.py:69 netbox/ipam/tables/fhrp.py:34 -#: netbox/ipam/tables/ip.py:136 netbox/ipam/tables/ip.py:275 -#: netbox/ipam/tables/ip.py:329 netbox/ipam/tables/ip.py:397 -#: netbox/ipam/tables/services.py:24 netbox/ipam/tables/services.py:54 -#: netbox/ipam/tables/vlans.py:145 netbox/ipam/tables/vrfs.py:47 -#: netbox/ipam/tables/vrfs.py:72 netbox/templates/dcim/htmx/cable_edit.html:89 +#: netbox/circuits/tables/circuits.py:84 +#: netbox/circuits/tables/providers.py:46 +#: netbox/circuits/tables/providers.py:80 +#: netbox/circuits/tables/providers.py:105 +#: netbox/circuits/tables/virtual_circuits.py:68 +#: netbox/dcim/tables/devices.py:1068 netbox/dcim/tables/devicetypes.py:97 +#: netbox/dcim/tables/modules.py:29 netbox/dcim/tables/modules.py:73 +#: netbox/dcim/tables/power.py:39 netbox/dcim/tables/power.py:96 +#: netbox/dcim/tables/racks.py:84 netbox/dcim/tables/racks.py:144 +#: netbox/dcim/tables/racks.py:224 netbox/dcim/tables/sites.py:107 +#: netbox/extras/tables/tables.py:582 netbox/ipam/tables/asn.py:69 +#: netbox/ipam/tables/fhrp.py:34 netbox/ipam/tables/ip.py:82 +#: netbox/ipam/tables/ip.py:226 netbox/ipam/tables/ip.py:281 +#: netbox/ipam/tables/ip.py:349 netbox/ipam/tables/services.py:24 +#: netbox/ipam/tables/services.py:54 netbox/ipam/tables/vlans.py:121 +#: netbox/ipam/tables/vrfs.py:47 netbox/ipam/tables/vrfs.py:72 +#: netbox/templates/dcim/htmx/cable_edit.html:89 #: netbox/templates/generic/bulk_edit.html:86 #: netbox/templates/inc/panels/comments.html:5 #: netbox/tenancy/tables/contacts.py:68 netbox/tenancy/tables/tenants.py:46 #: netbox/utilities/forms/fields/fields.py:29 -#: netbox/virtualization/tables/clusters.py:91 -#: netbox/virtualization/tables/virtualmachines.py:82 +#: netbox/virtualization/tables/clusters.py:95 +#: netbox/virtualization/tables/virtualmachines.py:52 #: netbox/vpn/tables/crypto.py:37 netbox/vpn/tables/crypto.py:74 #: netbox/vpn/tables/crypto.py:109 netbox/vpn/tables/crypto.py:140 #: netbox/vpn/tables/crypto.py:173 netbox/vpn/tables/l2vpn.py:37 #: netbox/vpn/tables/tunnels.py:61 netbox/wireless/tables/wirelesslan.py:27 -#: netbox/wireless/tables/wirelesslan.py:58 +#: netbox/wireless/tables/wirelesslan.py:66 msgid "Comments" msgstr "Komentarze" -#: netbox/circuits/tables/circuits.py:86 +#: netbox/circuits/tables/circuits.py:90 #: netbox/templates/tenancy/contact.html:84 #: netbox/tenancy/tables/contacts.py:73 msgid "Assignments" msgstr "Zadania" +#: netbox/circuits/tables/circuits.py:117 netbox/dcim/forms/connections.py:81 +msgid "Side" +msgstr "Bok" + +#: netbox/circuits/tables/circuits.py:120 +msgid "Termination Type" +msgstr "Typ zakończenia" + +#: netbox/circuits/tables/circuits.py:123 +msgid "Termination Point" +msgstr "Punkt zakończenia" + +#: netbox/circuits/tables/circuits.py:134 netbox/dcim/tables/devices.py:161 +#: netbox/templates/dcim/sitegroup.html:26 +msgid "Site Group" +msgstr "Grupa witryn" + +#: netbox/circuits/tables/circuits.py:149 +#: netbox/templates/circuits/providernetwork.html:17 +#: netbox/templates/circuits/virtualcircuit.html:27 +#: netbox/templates/circuits/virtualcircuittermination.html:30 +#: netbox/templates/dcim/interface.html:170 +msgid "Provider Network" +msgstr "Sieć dostawców" + #: netbox/circuits/tables/providers.py:23 msgid "Accounts" msgstr "Konta" -#: netbox/circuits/tables/providers.py:29 +#: netbox/circuits/tables/providers.py:28 msgid "Account Count" msgstr "Liczba kont" -#: netbox/circuits/tables/providers.py:39 netbox/dcim/tables/sites.py:100 +#: netbox/circuits/tables/providers.py:37 netbox/dcim/tables/sites.py:99 msgid "ASN Count" msgstr "Liczba ASN" -#: netbox/circuits/views.py:331 +#: netbox/circuits/tables/virtual_circuits.py:65 +#: netbox/netbox/navigation/menu.py:234 +#: netbox/templates/circuits/virtualcircuit.html:87 +#: netbox/templates/vpn/l2vpn.html:56 netbox/templates/vpn/tunnel.html:72 +#: netbox/vpn/tables/tunnels.py:58 +msgid "Terminations" +msgstr "Zakończenia" + +#: netbox/circuits/tables/virtual_circuits.py:109 +#: netbox/dcim/forms/bulk_edit.py:745 netbox/dcim/forms/bulk_edit.py:1299 +#: netbox/dcim/forms/bulk_edit.py:1708 netbox/dcim/forms/bulk_edit.py:1760 +#: netbox/dcim/forms/bulk_import.py:668 netbox/dcim/forms/bulk_import.py:730 +#: netbox/dcim/forms/bulk_import.py:756 netbox/dcim/forms/bulk_import.py:782 +#: netbox/dcim/forms/bulk_import.py:802 netbox/dcim/forms/bulk_import.py:858 +#: netbox/dcim/forms/bulk_import.py:976 netbox/dcim/forms/bulk_import.py:1024 +#: netbox/dcim/forms/bulk_import.py:1041 netbox/dcim/forms/bulk_import.py:1053 +#: netbox/dcim/forms/bulk_import.py:1101 netbox/dcim/forms/bulk_import.py:1205 +#: netbox/dcim/forms/bulk_import.py:1541 netbox/dcim/forms/connections.py:24 +#: netbox/dcim/forms/filtersets.py:132 netbox/dcim/forms/filtersets.py:922 +#: netbox/dcim/forms/filtersets.py:1052 netbox/dcim/forms/filtersets.py:1243 +#: netbox/dcim/forms/filtersets.py:1268 netbox/dcim/forms/filtersets.py:1292 +#: netbox/dcim/forms/filtersets.py:1312 netbox/dcim/forms/filtersets.py:1339 +#: netbox/dcim/forms/filtersets.py:1449 netbox/dcim/forms/filtersets.py:1474 +#: netbox/dcim/forms/filtersets.py:1498 netbox/dcim/forms/filtersets.py:1516 +#: netbox/dcim/forms/filtersets.py:1533 netbox/dcim/forms/filtersets.py:1630 +#: netbox/dcim/forms/filtersets.py:1654 netbox/dcim/forms/filtersets.py:1678 +#: netbox/dcim/forms/model_forms.py:644 netbox/dcim/forms/model_forms.py:861 +#: netbox/dcim/forms/model_forms.py:1231 netbox/dcim/forms/model_forms.py:1716 +#: netbox/dcim/forms/model_forms.py:1787 +#: netbox/dcim/forms/object_create.py:249 netbox/dcim/tables/connections.py:22 +#: netbox/dcim/tables/connections.py:41 netbox/dcim/tables/connections.py:60 +#: netbox/dcim/tables/devices.py:296 netbox/dcim/tables/devices.py:381 +#: netbox/dcim/tables/devices.py:422 netbox/dcim/tables/devices.py:464 +#: netbox/dcim/tables/devices.py:514 netbox/dcim/tables/devices.py:619 +#: netbox/dcim/tables/devices.py:731 netbox/dcim/tables/devices.py:787 +#: netbox/dcim/tables/devices.py:833 netbox/dcim/tables/devices.py:892 +#: netbox/dcim/tables/devices.py:960 netbox/dcim/tables/devices.py:1089 +#: netbox/dcim/tables/modules.py:53 netbox/extras/forms/filtersets.py:328 +#: netbox/ipam/forms/bulk_import.py:303 netbox/ipam/forms/bulk_import.py:540 +#: netbox/ipam/forms/filtersets.py:603 netbox/ipam/forms/model_forms.py:333 +#: netbox/ipam/forms/model_forms.py:762 netbox/ipam/forms/model_forms.py:795 +#: netbox/ipam/forms/model_forms.py:821 netbox/ipam/tables/vlans.py:156 +#: netbox/templates/circuits/virtualcircuittermination.html:56 +#: netbox/templates/dcim/consoleport.html:20 +#: netbox/templates/dcim/consoleserverport.html:20 +#: netbox/templates/dcim/device.html:15 netbox/templates/dcim/device.html:130 +#: netbox/templates/dcim/device_edit.html:10 +#: netbox/templates/dcim/devicebay.html:20 +#: netbox/templates/dcim/devicebay.html:48 +#: netbox/templates/dcim/frontport.html:20 +#: netbox/templates/dcim/interface.html:30 +#: netbox/templates/dcim/interface.html:218 +#: netbox/templates/dcim/inventoryitem.html:20 +#: netbox/templates/dcim/module.html:57 +#: netbox/templates/dcim/modulebay.html:20 +#: netbox/templates/dcim/poweroutlet.html:20 +#: netbox/templates/dcim/powerport.html:20 +#: netbox/templates/dcim/rearport.html:20 +#: netbox/templates/dcim/virtualchassis.html:65 +#: netbox/templates/dcim/virtualchassis_edit.html:51 +#: netbox/templates/dcim/virtualdevicecontext.html:22 +#: netbox/templates/virtualization/virtualmachine.html:114 +#: netbox/templates/vpn/tunneltermination.html:23 +#: netbox/templates/wireless/inc/wirelesslink_interface.html:6 +#: netbox/virtualization/filtersets.py:133 +#: netbox/virtualization/forms/bulk_edit.py:119 +#: netbox/virtualization/forms/bulk_import.py:105 +#: netbox/virtualization/forms/filtersets.py:133 +#: netbox/virtualization/forms/model_forms.py:192 +#: netbox/virtualization/tables/virtualmachines.py:41 netbox/vpn/choices.py:52 +#: netbox/vpn/forms/bulk_import.py:86 netbox/vpn/forms/bulk_import.py:283 +#: netbox/vpn/forms/filtersets.py:275 netbox/vpn/forms/model_forms.py:91 +#: netbox/vpn/forms/model_forms.py:126 netbox/vpn/forms/model_forms.py:237 +#: netbox/vpn/forms/model_forms.py:456 +#: netbox/wireless/forms/model_forms.py:102 +#: netbox/wireless/forms/model_forms.py:144 +#: netbox/wireless/tables/wirelesslan.py:84 +msgid "Device" +msgstr "Urządzenie" + +#: netbox/circuits/views.py:356 #, python-brace-format msgid "No terminations have been defined for circuit {circuit}." msgstr "Nie zdefiniowano zakończeń dla obwodu {circuit}." -#: netbox/circuits/views.py:380 +#: netbox/circuits/views.py:405 #, python-brace-format msgid "Swapped terminations for circuit {circuit}." msgstr "Wymienione zakończenia na obwód {circuit}." -#: netbox/core/api/views.py:39 +#: netbox/core/api/views.py:51 msgid "This user does not have permission to synchronize this data source." msgstr "Ten użytkownik nie ma uprawnień do synchronizacji tego źródła danych." @@ -1617,12 +2043,13 @@ msgstr "Zakończone" #: netbox/core/choices.py:22 netbox/core/choices.py:59 #: netbox/core/constants.py:20 netbox/core/tables/tasks.py:34 #: netbox/dcim/choices.py:187 netbox/dcim/choices.py:239 -#: netbox/dcim/choices.py:1609 netbox/virtualization/choices.py:47 +#: netbox/dcim/choices.py:1593 netbox/dcim/choices.py:1666 +#: netbox/virtualization/choices.py:48 msgid "Failed" msgstr "Nie powiodło się" -#: netbox/core/choices.py:35 netbox/netbox/navigation/menu.py:335 -#: netbox/netbox/navigation/menu.py:339 +#: netbox/core/choices.py:35 netbox/netbox/navigation/menu.py:356 +#: netbox/netbox/navigation/menu.py:360 #: netbox/templates/extras/script/base.html:14 #: netbox/templates/extras/script_list.html:7 #: netbox/templates/extras/script_list.html:12 @@ -1652,12 +2079,36 @@ msgstr "Uruchomione" msgid "Errored" msgstr "Zakończone z błędem" -#: netbox/core/choices.py:87 netbox/core/tables/plugins.py:63 +#: netbox/core/choices.py:82 +msgid "Minutely" +msgstr "Minutowo" + +#: netbox/core/choices.py:83 +msgid "Hourly" +msgstr "Godzinowe" + +#: netbox/core/choices.py:84 +msgid "12 hours" +msgstr "12 godzin" + +#: netbox/core/choices.py:85 +msgid "Daily" +msgstr "Codziennie" + +#: netbox/core/choices.py:86 +msgid "Weekly" +msgstr "Tygodniowy" + +#: netbox/core/choices.py:87 +msgid "30 days" +msgstr "30 dni" + +#: netbox/core/choices.py:103 netbox/core/tables/plugins.py:63 #: netbox/templates/generic/object.html:61 msgid "Updated" msgstr "Zaktualizowano" -#: netbox/core/choices.py:88 +#: netbox/core/choices.py:104 msgid "Deleted" msgstr "Usunięte" @@ -1685,7 +2136,7 @@ msgstr "Anulowane" #: netbox/core/data_backends.py:32 netbox/core/tables/plugins.py:51 #: netbox/templates/core/plugin.html:88 -#: netbox/templates/dcim/interface.html:216 +#: netbox/templates/dcim/interface.html:273 msgid "Local" msgstr "Lokalne" @@ -1759,7 +2210,7 @@ msgstr "Źródło danych (ID)" msgid "Data source (name)" msgstr "Źródło danych (nazwa)" -#: netbox/core/filtersets.py:145 netbox/dcim/filtersets.py:501 +#: netbox/core/filtersets.py:145 netbox/dcim/filtersets.py:502 #: netbox/extras/filtersets.py:287 netbox/extras/filtersets.py:331 #: netbox/extras/filtersets.py:353 netbox/extras/filtersets.py:413 #: netbox/users/filtersets.py:28 @@ -1771,12 +2222,12 @@ msgid "User name" msgstr "Nazwa użytkownika" #: netbox/core/forms/bulk_edit.py:25 netbox/core/forms/filtersets.py:43 -#: netbox/core/tables/data.py:26 netbox/dcim/forms/bulk_edit.py:1137 -#: netbox/dcim/forms/bulk_edit.py:1415 netbox/dcim/forms/filtersets.py:1370 -#: netbox/dcim/tables/devices.py:553 netbox/dcim/tables/devicetypes.py:224 +#: netbox/core/tables/data.py:26 netbox/dcim/forms/bulk_edit.py:1140 +#: netbox/dcim/forms/bulk_edit.py:1418 netbox/dcim/forms/filtersets.py:1375 +#: netbox/dcim/tables/devices.py:567 netbox/dcim/tables/devicetypes.py:231 #: netbox/extras/forms/bulk_edit.py:123 netbox/extras/forms/bulk_edit.py:187 -#: netbox/extras/forms/bulk_edit.py:246 netbox/extras/forms/filtersets.py:142 -#: netbox/extras/forms/filtersets.py:229 netbox/extras/forms/filtersets.py:294 +#: netbox/extras/forms/bulk_edit.py:246 netbox/extras/forms/filtersets.py:145 +#: netbox/extras/forms/filtersets.py:235 netbox/extras/forms/filtersets.py:300 #: netbox/extras/tables/tables.py:162 netbox/extras/tables/tables.py:253 #: netbox/extras/tables/tables.py:415 netbox/netbox/preferences.py:22 #: netbox/templates/core/datasource.html:42 @@ -1787,18 +2238,18 @@ msgstr "Nazwa użytkownika" #: netbox/templates/users/objectpermission.html:25 #: netbox/templates/virtualization/vminterface.html:29 #: netbox/users/forms/bulk_edit.py:89 netbox/users/forms/filtersets.py:70 -#: netbox/users/tables.py:83 netbox/virtualization/forms/bulk_edit.py:217 -#: netbox/virtualization/forms/filtersets.py:215 +#: netbox/users/tables.py:83 netbox/virtualization/forms/bulk_edit.py:199 +#: netbox/virtualization/forms/filtersets.py:220 msgid "Enabled" msgstr "Włączone" -#: netbox/core/forms/bulk_edit.py:34 netbox/extras/forms/model_forms.py:285 +#: netbox/core/forms/bulk_edit.py:34 netbox/extras/forms/model_forms.py:299 #: netbox/templates/extras/savedfilter.html:52 #: netbox/vpn/forms/filtersets.py:97 netbox/vpn/forms/filtersets.py:127 #: netbox/vpn/forms/filtersets.py:151 netbox/vpn/forms/filtersets.py:170 -#: netbox/vpn/forms/model_forms.py:301 netbox/vpn/forms/model_forms.py:321 -#: netbox/vpn/forms/model_forms.py:337 netbox/vpn/forms/model_forms.py:357 -#: netbox/vpn/forms/model_forms.py:380 +#: netbox/vpn/forms/model_forms.py:302 netbox/vpn/forms/model_forms.py:323 +#: netbox/vpn/forms/model_forms.py:339 netbox/vpn/forms/model_forms.py:360 +#: netbox/vpn/forms/model_forms.py:383 msgid "Parameters" msgstr "Parametry" @@ -1807,16 +2258,15 @@ msgid "Ignore rules" msgstr "Ignoruj reguły" #: netbox/core/forms/filtersets.py:30 netbox/core/forms/model_forms.py:97 -#: netbox/extras/forms/model_forms.py:248 -#: netbox/extras/forms/model_forms.py:578 -#: netbox/extras/forms/model_forms.py:632 netbox/extras/tables/tables.py:191 +#: netbox/extras/forms/model_forms.py:262 +#: netbox/extras/forms/model_forms.py:592 +#: netbox/extras/forms/model_forms.py:646 netbox/extras/tables/tables.py:191 #: netbox/extras/tables/tables.py:483 netbox/extras/tables/tables.py:518 #: netbox/templates/core/datasource.html:31 -#: netbox/templates/dcim/device/render_config.html:18 #: netbox/templates/extras/configcontext.html:29 #: netbox/templates/extras/configtemplate.html:21 #: netbox/templates/extras/exporttemplate.html:35 -#: netbox/templates/virtualization/virtualmachine/render_config.html:18 +#: netbox/templates/extras/object_render_config.html:19 msgid "Data Source" msgstr "Źródło danych" @@ -1825,17 +2275,17 @@ msgid "File" msgstr "Plik" #: netbox/core/forms/filtersets.py:60 netbox/core/forms/mixins.py:16 -#: netbox/extras/forms/filtersets.py:170 netbox/extras/forms/filtersets.py:328 -#: netbox/extras/forms/filtersets.py:413 +#: netbox/extras/forms/filtersets.py:174 netbox/extras/forms/filtersets.py:335 +#: netbox/extras/forms/filtersets.py:421 msgid "Data source" msgstr "Źródło danych" -#: netbox/core/forms/filtersets.py:70 netbox/extras/forms/filtersets.py:440 +#: netbox/core/forms/filtersets.py:71 netbox/extras/forms/filtersets.py:448 msgid "Creation" msgstr "Stworzenie" -#: netbox/core/forms/filtersets.py:74 netbox/core/forms/filtersets.py:160 -#: netbox/extras/forms/filtersets.py:461 netbox/extras/tables/tables.py:220 +#: netbox/core/forms/filtersets.py:75 netbox/core/forms/filtersets.py:161 +#: netbox/extras/forms/filtersets.py:469 netbox/extras/tables/tables.py:220 #: netbox/extras/tables/tables.py:294 netbox/extras/tables/tables.py:326 #: netbox/extras/tables/tables.py:571 netbox/templates/core/job.html:38 #: netbox/templates/core/objectchange.html:52 @@ -1843,42 +2293,42 @@ msgstr "Stworzenie" msgid "Object Type" msgstr "Typ obiektu" -#: netbox/core/forms/filtersets.py:84 +#: netbox/core/forms/filtersets.py:85 msgid "Created after" msgstr "Utworzone po" -#: netbox/core/forms/filtersets.py:89 +#: netbox/core/forms/filtersets.py:90 msgid "Created before" msgstr "Utworzone przed" -#: netbox/core/forms/filtersets.py:94 +#: netbox/core/forms/filtersets.py:95 msgid "Scheduled after" msgstr "Zaplanowane po" -#: netbox/core/forms/filtersets.py:99 +#: netbox/core/forms/filtersets.py:100 msgid "Scheduled before" msgstr "Zaplanowane przed" -#: netbox/core/forms/filtersets.py:104 +#: netbox/core/forms/filtersets.py:105 msgid "Started after" msgstr "Rozpoczęte po" -#: netbox/core/forms/filtersets.py:109 +#: netbox/core/forms/filtersets.py:110 msgid "Started before" msgstr "Rozpoczęte przed" -#: netbox/core/forms/filtersets.py:114 +#: netbox/core/forms/filtersets.py:115 msgid "Completed after" msgstr "Zakończone po" -#: netbox/core/forms/filtersets.py:119 +#: netbox/core/forms/filtersets.py:120 msgid "Completed before" msgstr "Zakończone przed" -#: netbox/core/forms/filtersets.py:126 netbox/core/forms/filtersets.py:155 -#: netbox/dcim/forms/bulk_edit.py:462 netbox/dcim/forms/filtersets.py:418 -#: netbox/dcim/forms/filtersets.py:462 netbox/dcim/forms/model_forms.py:316 -#: netbox/extras/forms/filtersets.py:456 netbox/extras/forms/filtersets.py:475 +#: netbox/core/forms/filtersets.py:127 netbox/core/forms/filtersets.py:156 +#: netbox/dcim/forms/bulk_edit.py:465 netbox/dcim/forms/filtersets.py:419 +#: netbox/dcim/forms/filtersets.py:463 netbox/dcim/forms/model_forms.py:324 +#: netbox/extras/forms/filtersets.py:464 netbox/extras/forms/filtersets.py:484 #: netbox/extras/tables/tables.py:302 netbox/extras/tables/tables.py:342 #: netbox/templates/core/objectchange.html:36 #: netbox/templates/dcim/rackreservation.html:58 @@ -1892,22 +2342,22 @@ msgstr "Zakończone przed" msgid "User" msgstr "Użytkownik" -#: netbox/core/forms/filtersets.py:134 netbox/core/tables/change_logging.py:15 +#: netbox/core/forms/filtersets.py:135 netbox/core/tables/change_logging.py:15 #: netbox/extras/tables/tables.py:609 netbox/extras/tables/tables.py:646 #: netbox/templates/core/objectchange.html:32 msgid "Time" msgstr "Czas" -#: netbox/core/forms/filtersets.py:139 netbox/extras/forms/filtersets.py:445 +#: netbox/core/forms/filtersets.py:140 netbox/extras/forms/filtersets.py:453 msgid "After" msgstr "Po" -#: netbox/core/forms/filtersets.py:144 netbox/extras/forms/filtersets.py:450 +#: netbox/core/forms/filtersets.py:145 netbox/extras/forms/filtersets.py:458 msgid "Before" msgstr "Wcześniej" -#: netbox/core/forms/filtersets.py:148 netbox/core/tables/change_logging.py:29 -#: netbox/extras/forms/model_forms.py:396 +#: netbox/core/forms/filtersets.py:149 netbox/core/tables/change_logging.py:29 +#: netbox/extras/forms/model_forms.py:410 #: netbox/templates/core/objectchange.html:46 #: netbox/templates/extras/eventrule.html:71 msgid "Action" @@ -1941,22 +2391,22 @@ msgstr "Musisz przesłać plik lub wybrać plik danych do synchronizacji" msgid "Rack Elevations" msgstr "Elewacje szaf" -#: netbox/core/forms/model_forms.py:157 netbox/dcim/choices.py:1520 -#: netbox/dcim/forms/bulk_edit.py:984 netbox/dcim/forms/bulk_edit.py:1372 -#: netbox/dcim/forms/bulk_edit.py:1390 netbox/dcim/tables/racks.py:158 -#: netbox/netbox/navigation/menu.py:291 netbox/netbox/navigation/menu.py:295 +#: netbox/core/forms/model_forms.py:157 netbox/dcim/choices.py:1522 +#: netbox/dcim/forms/bulk_edit.py:987 netbox/dcim/forms/bulk_edit.py:1375 +#: netbox/dcim/forms/bulk_edit.py:1393 netbox/dcim/tables/racks.py:157 +#: netbox/netbox/navigation/menu.py:312 netbox/netbox/navigation/menu.py:316 msgid "Power" msgstr "Moc" -#: netbox/core/forms/model_forms.py:159 netbox/netbox/navigation/menu.py:154 +#: netbox/core/forms/model_forms.py:159 netbox/netbox/navigation/menu.py:160 #: netbox/templates/core/inc/config_data.html:37 msgid "IPAM" msgstr "IPAM" -#: netbox/core/forms/model_forms.py:160 netbox/netbox/navigation/menu.py:230 +#: netbox/core/forms/model_forms.py:160 netbox/netbox/navigation/menu.py:238 #: netbox/templates/core/inc/config_data.html:50 #: netbox/vpn/forms/bulk_edit.py:77 netbox/vpn/forms/filtersets.py:43 -#: netbox/vpn/forms/model_forms.py:61 netbox/vpn/forms/model_forms.py:146 +#: netbox/vpn/forms/model_forms.py:62 netbox/vpn/forms/model_forms.py:147 msgid "Security" msgstr "Bezpieczeństwo" @@ -1971,7 +2421,7 @@ msgid "Pagination" msgstr "Paginacja" #: netbox/core/forms/model_forms.py:163 netbox/extras/forms/bulk_edit.py:92 -#: netbox/extras/forms/filtersets.py:47 netbox/extras/forms/model_forms.py:116 +#: netbox/extras/forms/filtersets.py:48 netbox/extras/forms/model_forms.py:116 #: netbox/extras/forms/model_forms.py:129 #: netbox/templates/core/inc/config_data.html:93 msgid "Validation" @@ -1982,7 +2432,7 @@ msgstr "Walidacja" msgid "User Preferences" msgstr "Preferencje użytkownika" -#: netbox/core/forms/model_forms.py:167 netbox/dcim/forms/filtersets.py:732 +#: netbox/core/forms/model_forms.py:167 netbox/dcim/forms/filtersets.py:733 #: netbox/templates/core/inc/config_data.html:127 #: netbox/users/forms/model_forms.py:64 msgid "Miscellaneous" @@ -2018,7 +2468,7 @@ msgstr "nazwa użytkownika" msgid "request ID" msgstr "Identyfikator żądania" -#: netbox/core/models/change_logging.py:52 netbox/extras/models/staging.py:69 +#: netbox/core/models/change_logging.py:52 netbox/extras/models/staging.py:77 msgid "action" msgstr "działanie" @@ -2044,9 +2494,9 @@ msgid "Change logging is not supported for this object type ({type})." msgstr "" "Rejestracja zmian nie jest obsługiwana dla tego typu obiektu ({type})." -#: netbox/core/models/config.py:18 netbox/core/models/data.py:266 +#: netbox/core/models/config.py:18 netbox/core/models/data.py:263 #: netbox/core/models/files.py:27 netbox/core/models/jobs.py:50 -#: netbox/extras/models/models.py:730 netbox/extras/models/notifications.py:39 +#: netbox/extras/models/models.py:733 netbox/extras/models/notifications.py:39 #: netbox/extras/models/notifications.py:186 #: netbox/netbox/models/features.py:53 netbox/users/models/tokens.py:32 msgid "created" @@ -2081,24 +2531,24 @@ msgstr "Bieżąca konfiguracja" msgid "Config revision #{id}" msgstr "Wersja konfiguracji #{id}" -#: netbox/core/models/data.py:44 netbox/dcim/models/cables.py:43 -#: netbox/dcim/models/device_component_templates.py:203 -#: netbox/dcim/models/device_component_templates.py:237 -#: netbox/dcim/models/device_component_templates.py:272 -#: netbox/dcim/models/device_component_templates.py:334 -#: netbox/dcim/models/device_component_templates.py:413 -#: netbox/dcim/models/device_component_templates.py:512 -#: netbox/dcim/models/device_component_templates.py:612 -#: netbox/dcim/models/device_components.py:283 -#: netbox/dcim/models/device_components.py:312 -#: netbox/dcim/models/device_components.py:345 -#: netbox/dcim/models/device_components.py:463 -#: netbox/dcim/models/device_components.py:605 -#: netbox/dcim/models/device_components.py:970 -#: netbox/dcim/models/device_components.py:1044 -#: netbox/dcim/models/power.py:102 netbox/extras/models/customfields.py:78 +#: netbox/core/models/data.py:44 netbox/dcim/models/cables.py:44 +#: netbox/dcim/models/device_component_templates.py:199 +#: netbox/dcim/models/device_component_templates.py:234 +#: netbox/dcim/models/device_component_templates.py:270 +#: netbox/dcim/models/device_component_templates.py:335 +#: netbox/dcim/models/device_component_templates.py:420 +#: netbox/dcim/models/device_component_templates.py:526 +#: netbox/dcim/models/device_component_templates.py:626 +#: netbox/dcim/models/device_components.py:279 +#: netbox/dcim/models/device_components.py:306 +#: netbox/dcim/models/device_components.py:337 +#: netbox/dcim/models/device_components.py:453 +#: netbox/dcim/models/device_components.py:653 +#: netbox/dcim/models/device_components.py:1021 +#: netbox/dcim/models/device_components.py:1092 +#: netbox/dcim/models/power.py:100 netbox/extras/models/customfields.py:78 #: netbox/extras/models/search.py:41 -#: netbox/virtualization/models/clusters.py:61 netbox/vpn/models/l2vpn.py:32 +#: netbox/virtualization/models/clusters.py:57 netbox/vpn/models/l2vpn.py:32 msgid "type" msgstr "typ" @@ -2110,8 +2560,8 @@ msgid "URL" msgstr "URL" #: netbox/core/models/data.py:59 -#: netbox/dcim/models/device_component_templates.py:418 -#: netbox/dcim/models/device_components.py:512 +#: netbox/dcim/models/device_component_templates.py:425 +#: netbox/dcim/models/device_components.py:505 #: netbox/extras/models/models.py:70 netbox/extras/models/models.py:301 #: netbox/extras/models/models.py:526 netbox/users/models/permissions.py:29 msgid "enabled" @@ -2143,64 +2593,64 @@ msgstr "źródło danych" msgid "data sources" msgstr "źródła danych" -#: netbox/core/models/data.py:122 +#: netbox/core/models/data.py:119 #, python-brace-format msgid "Unknown backend type: {type}" msgstr "Nieznany typ zaplecza: {type}" -#: netbox/core/models/data.py:164 +#: netbox/core/models/data.py:161 msgid "Cannot initiate sync; syncing already in progress." msgstr "Nie można zainicjować synchronizacji; synchronizacja jest już w toku." -#: netbox/core/models/data.py:177 +#: netbox/core/models/data.py:174 msgid "" "There was an error initializing the backend. A dependency needs to be " "installed: " msgstr "" "Wystąpił błąd podczas inicjowania zaplecza. Należy zainstalować zależność: " -#: netbox/core/models/data.py:270 netbox/core/models/files.py:31 +#: netbox/core/models/data.py:267 netbox/core/models/files.py:31 #: netbox/netbox/models/features.py:59 msgid "last updated" msgstr "Ostatnia aktualizacja" -#: netbox/core/models/data.py:280 netbox/dcim/models/cables.py:444 +#: netbox/core/models/data.py:277 netbox/dcim/models/cables.py:446 msgid "path" msgstr "ścieżka" -#: netbox/core/models/data.py:283 +#: netbox/core/models/data.py:280 msgid "File path relative to the data source's root" msgstr "Ścieżka pliku względem katalogu głównego źródła danych" -#: netbox/core/models/data.py:287 netbox/ipam/models/ip.py:503 +#: netbox/core/models/data.py:284 netbox/ipam/models/ip.py:489 msgid "size" msgstr "rozmiar" -#: netbox/core/models/data.py:290 +#: netbox/core/models/data.py:287 msgid "hash" msgstr "haszysz" -#: netbox/core/models/data.py:294 +#: netbox/core/models/data.py:291 msgid "Length must be 64 hexadecimal characters." msgstr "Długość musi wynosić 64 znaki szesnastkowe." -#: netbox/core/models/data.py:296 +#: netbox/core/models/data.py:293 msgid "SHA256 hash of the file data" msgstr "Skrót danych pliku SHA256" -#: netbox/core/models/data.py:313 +#: netbox/core/models/data.py:310 msgid "data file" msgstr "plik danych" -#: netbox/core/models/data.py:314 +#: netbox/core/models/data.py:311 msgid "data files" msgstr "pliki danych" -#: netbox/core/models/data.py:401 +#: netbox/core/models/data.py:398 msgid "auto sync record" msgstr "zapis automatycznej synchronizacji" -#: netbox/core/models/data.py:402 +#: netbox/core/models/data.py:399 msgid "auto sync records" msgstr "automatyczna synchronizacja rekordów" @@ -2224,6 +2674,11 @@ msgstr "plik zarządzany" msgid "managed files" msgstr "zarządzane pliki" +#: netbox/core/models/files.py:100 +#, python-brace-format +msgid "A {model} with this file path already exists ({path})." +msgstr "A {model} z tą ścieżką pliku już istnieje ({path})." + #: netbox/core/models/jobs.py:54 msgid "scheduled" msgstr "planowy" @@ -2245,7 +2700,7 @@ msgid "completed" msgstr "ukończony" #: netbox/core/models/jobs.py:91 netbox/extras/models/models.py:101 -#: netbox/extras/models/staging.py:87 +#: netbox/extras/models/staging.py:95 msgid "data" msgstr "dane" @@ -2275,7 +2730,7 @@ msgstr "Zadania nie mogą być przypisane do tego typu obiektu ({type})." msgid "Invalid status for job termination. Choices are: {choices}" msgstr "Nieprawidłowy status zakończenia pracy. Wybory to: {choices}" -#: netbox/core/models/jobs.py:221 +#: netbox/core/models/jobs.py:231 msgid "" "enqueue() cannot be called with values for both schedule_at and immediate." msgstr "" @@ -2298,7 +2753,7 @@ msgstr "Pełne imię i nazwisko" #: netbox/extras/tables/tables.py:297 netbox/extras/tables/tables.py:329 #: netbox/extras/tables/tables.py:409 netbox/extras/tables/tables.py:470 #: netbox/extras/tables/tables.py:576 netbox/extras/tables/tables.py:616 -#: netbox/extras/tables/tables.py:653 netbox/netbox/tables/tables.py:244 +#: netbox/extras/tables/tables.py:653 netbox/netbox/tables/tables.py:247 #: netbox/templates/core/objectchange.html:58 #: netbox/templates/extras/eventrule.html:78 #: netbox/templates/extras/journalentry.html:18 @@ -2326,11 +2781,11 @@ msgid "Last updated" msgstr "Ostatnia aktualizacja" #: netbox/core/tables/jobs.py:10 netbox/core/tables/tasks.py:76 -#: netbox/dcim/tables/devicetypes.py:164 netbox/extras/tables/tables.py:216 -#: netbox/extras/tables/tables.py:460 netbox/netbox/tables/tables.py:189 +#: netbox/dcim/tables/devicetypes.py:169 netbox/extras/tables/tables.py:216 +#: netbox/extras/tables/tables.py:460 netbox/netbox/tables/tables.py:192 #: netbox/templates/dcim/virtualchassis_edit.html:52 #: netbox/utilities/forms/forms.py:73 -#: netbox/wireless/tables/wirelesslink.py:17 +#: netbox/wireless/tables/wirelesslink.py:16 msgid "ID" msgstr "IDENTYFIKATOR" @@ -2396,7 +2851,7 @@ msgstr "Pracownicy" msgid "Host" msgstr "Gospodarz" -#: netbox/core/tables/tasks.py:50 netbox/ipam/forms/filtersets.py:535 +#: netbox/core/tables/tasks.py:50 netbox/ipam/forms/filtersets.py:587 msgid "Port" msgstr "Port" @@ -2444,71 +2899,84 @@ msgstr "PID" msgid "No workers found" msgstr "Nie znaleziono pracowników" -#: netbox/core/views.py:90 -#, python-brace-format -msgid "Queued job #{id} to sync {datasource}" -msgstr "Zadanie w kolejce #{id} zsynchronizować {datasource}" - -#: netbox/core/views.py:319 -#, python-brace-format -msgid "Restored configuration revision #{id}" -msgstr "Przywrócona wersja konfiguracji #{id}" - -#: netbox/core/views.py:412 netbox/core/views.py:455 netbox/core/views.py:531 +#: netbox/core/utils.py:84 netbox/core/utils.py:150 netbox/core/views.py:396 #, python-brace-format msgid "Job {job_id} not found" msgstr "Praca {job_id} nie znaleziono" -#: netbox/core/views.py:463 -#, python-brace-format -msgid "Job {id} has been deleted." -msgstr "Praca {id} został usunięty." - -#: netbox/core/views.py:465 -#, python-brace-format -msgid "Error deleting job {id}: {error}" -msgstr "Błąd usuwania zadania {id}: {error}" - -#: netbox/core/views.py:478 netbox/core/views.py:496 +#: netbox/core/utils.py:102 netbox/core/utils.py:118 #, python-brace-format msgid "Job {id} not found." msgstr "Praca {id} nie znaleziono." -#: netbox/core/views.py:484 +#: netbox/core/views.py:88 +#, python-brace-format +msgid "Queued job #{id} to sync {datasource}" +msgstr "Zadanie w kolejce #{id} zsynchronizować {datasource}" + +#: netbox/core/views.py:332 +#, python-brace-format +msgid "Restored configuration revision #{id}" +msgstr "Przywrócona wersja konfiguracji #{id}" + +#: netbox/core/views.py:435 +#, python-brace-format +msgid "Job {id} has been deleted." +msgstr "Praca {id} został usunięty." + +#: netbox/core/views.py:437 +#, python-brace-format +msgid "Error deleting job {id}: {error}" +msgstr "Błąd usuwania zadania {id}: {error}" + +#: netbox/core/views.py:446 #, python-brace-format msgid "Job {id} has been re-enqueued." msgstr "Praca {id} został ponownie ustawiony w kolejce." -#: netbox/core/views.py:519 +#: netbox/core/views.py:455 #, python-brace-format msgid "Job {id} has been enqueued." msgstr "Praca {id} został ustawiony w kolejce." -#: netbox/core/views.py:538 +#: netbox/core/views.py:464 #, python-brace-format msgid "Job {id} has been stopped." msgstr "Praca {id} został zatrzymany." -#: netbox/core/views.py:540 +#: netbox/core/views.py:466 #, python-brace-format msgid "Failed to stop job {id}" msgstr "Nie udało się zatrzymać zadania {id}" -#: netbox/core/views.py:674 +#: netbox/core/views.py:601 msgid "Plugins catalog could not be loaded" msgstr "Nie można załadować katalogu wtyczek" -#: netbox/core/views.py:708 +#: netbox/core/views.py:635 #, python-brace-format msgid "Plugin {name} not found" msgstr "Wtyczka {name} nie znaleziono" -#: netbox/dcim/api/serializers_/devices.py:49 -#: netbox/dcim/api/serializers_/devicetypes.py:25 +#: netbox/dcim/api/serializers_/device_components.py:262 +msgid "Interface mode does not support q-in-q service vlan" +msgstr "Tryb interfejsu nie obsługuje usługi q-in-q vlan" + +#: netbox/dcim/api/serializers_/device_components.py:269 +msgid "Interface mode does not support untagged vlan" +msgstr "Tryb interfejsu nie obsługuje nieoznakowanych sieci VLAN" + +#: netbox/dcim/api/serializers_/device_components.py:274 +#: netbox/dcim/api/serializers_/device_components.py:279 +msgid "Interface mode does not support tagged vlans" +msgstr "Tryb interfejsu nie obsługuje oznaczonych sieci VLAN" + +#: netbox/dcim/api/serializers_/devices.py:53 +#: netbox/dcim/api/serializers_/devicetypes.py:26 msgid "Position (U)" msgstr "Pozycja (U)" -#: netbox/dcim/api/serializers_/racks.py:112 +#: netbox/dcim/api/serializers_/racks.py:113 #: netbox/templates/dcim/rack.html:28 msgid "Facility ID" msgstr "Identyfikator obiektu" @@ -2518,8 +2986,9 @@ msgid "Staging" msgstr "Inscenizacja" #: netbox/dcim/choices.py:23 netbox/dcim/choices.py:189 -#: netbox/dcim/choices.py:240 netbox/dcim/choices.py:1533 -#: netbox/virtualization/choices.py:23 netbox/virtualization/choices.py:48 +#: netbox/dcim/choices.py:240 netbox/dcim/choices.py:1535 +#: netbox/dcim/choices.py:1667 netbox/virtualization/choices.py:23 +#: netbox/virtualization/choices.py:49 msgid "Decommissioning" msgstr "Wycofanie z eksploatacji" @@ -2582,7 +3051,7 @@ msgstr "Przestarzałe" msgid "Millimeters" msgstr "Milimetrów" -#: netbox/dcim/choices.py:115 netbox/dcim/choices.py:1555 +#: netbox/dcim/choices.py:115 netbox/dcim/choices.py:1557 msgid "Inches" msgstr "Cale" @@ -2596,21 +3065,21 @@ msgstr "Przód do tyłu" msgid "Rear to front" msgstr "Tył do przodu" -#: netbox/dcim/choices.py:151 netbox/dcim/forms/bulk_edit.py:69 -#: netbox/dcim/forms/bulk_edit.py:88 netbox/dcim/forms/bulk_edit.py:174 -#: netbox/dcim/forms/bulk_edit.py:1420 netbox/dcim/forms/bulk_import.py:60 -#: netbox/dcim/forms/bulk_import.py:74 netbox/dcim/forms/bulk_import.py:137 -#: netbox/dcim/forms/bulk_import.py:588 netbox/dcim/forms/bulk_import.py:855 -#: netbox/dcim/forms/bulk_import.py:1110 netbox/dcim/forms/filtersets.py:234 -#: netbox/dcim/forms/model_forms.py:74 netbox/dcim/forms/model_forms.py:93 -#: netbox/dcim/forms/model_forms.py:170 netbox/dcim/forms/model_forms.py:1069 -#: netbox/dcim/forms/model_forms.py:1509 -#: netbox/dcim/forms/object_import.py:176 netbox/dcim/tables/devices.py:656 -#: netbox/dcim/tables/devices.py:869 netbox/dcim/tables/devices.py:954 -#: netbox/extras/tables/tables.py:223 netbox/ipam/tables/fhrp.py:59 -#: netbox/ipam/tables/ip.py:378 netbox/ipam/tables/services.py:44 -#: netbox/templates/dcim/interface.html:102 -#: netbox/templates/dcim/interface.html:309 +#: netbox/dcim/choices.py:151 netbox/dcim/forms/bulk_edit.py:72 +#: netbox/dcim/forms/bulk_edit.py:91 netbox/dcim/forms/bulk_edit.py:177 +#: netbox/dcim/forms/bulk_edit.py:1423 netbox/dcim/forms/bulk_import.py:62 +#: netbox/dcim/forms/bulk_import.py:76 netbox/dcim/forms/bulk_import.py:139 +#: netbox/dcim/forms/bulk_import.py:593 netbox/dcim/forms/bulk_import.py:863 +#: netbox/dcim/forms/bulk_import.py:1118 netbox/dcim/forms/filtersets.py:235 +#: netbox/dcim/forms/model_forms.py:76 netbox/dcim/forms/model_forms.py:95 +#: netbox/dcim/forms/model_forms.py:174 netbox/dcim/forms/model_forms.py:1082 +#: netbox/dcim/forms/model_forms.py:1551 +#: netbox/dcim/forms/object_import.py:177 netbox/dcim/tables/devices.py:690 +#: netbox/dcim/tables/devices.py:900 netbox/dcim/tables/devices.py:987 +#: netbox/dcim/tables/devices.py:1147 netbox/extras/tables/tables.py:223 +#: netbox/ipam/tables/fhrp.py:59 netbox/ipam/tables/ip.py:330 +#: netbox/ipam/tables/services.py:44 netbox/templates/dcim/interface.html:108 +#: netbox/templates/dcim/interface.html:366 #: netbox/templates/dcim/location.html:41 netbox/templates/dcim/region.html:37 #: netbox/templates/dcim/sitegroup.html:37 #: netbox/templates/ipam/service.html:28 @@ -2623,12 +3092,12 @@ msgstr "Tył do przodu" #: netbox/tenancy/forms/bulk_import.py:58 #: netbox/tenancy/forms/model_forms.py:25 #: netbox/tenancy/forms/model_forms.py:68 -#: netbox/virtualization/forms/bulk_edit.py:207 -#: netbox/virtualization/forms/bulk_import.py:151 -#: netbox/virtualization/tables/virtualmachines.py:162 -#: netbox/wireless/forms/bulk_edit.py:24 -#: netbox/wireless/forms/bulk_import.py:21 -#: netbox/wireless/forms/model_forms.py:21 +#: netbox/virtualization/forms/bulk_edit.py:189 +#: netbox/virtualization/forms/bulk_import.py:157 +#: netbox/virtualization/tables/virtualmachines.py:132 +#: netbox/wireless/forms/bulk_edit.py:26 +#: netbox/wireless/forms/bulk_import.py:23 +#: netbox/wireless/forms/model_forms.py:22 msgid "Parent" msgstr "Rodzic" @@ -2651,7 +3120,7 @@ msgid "Rear" msgstr "Tył" #: netbox/dcim/choices.py:186 netbox/dcim/choices.py:238 -#: netbox/virtualization/choices.py:46 +#: netbox/dcim/choices.py:1665 netbox/virtualization/choices.py:47 msgid "Staged" msgstr "Inscenizowane" @@ -2684,7 +3153,7 @@ msgid "Top to bottom" msgstr "Od góry do dołu" #: netbox/dcim/choices.py:215 netbox/dcim/choices.py:259 -#: netbox/dcim/choices.py:1305 +#: netbox/dcim/choices.py:1307 msgid "Passive" msgstr "Pasywny" @@ -2714,8 +3183,8 @@ msgstr "Własnościowy" #: netbox/dcim/choices.py:581 netbox/dcim/choices.py:824 #: netbox/dcim/choices.py:1221 netbox/dcim/choices.py:1223 -#: netbox/dcim/choices.py:1449 netbox/dcim/choices.py:1451 -#: netbox/netbox/navigation/menu.py:200 +#: netbox/dcim/choices.py:1451 netbox/dcim/choices.py:1453 +#: netbox/netbox/navigation/menu.py:208 msgid "Other" msgstr "Pozostałe" @@ -2732,10 +3201,10 @@ msgid "Virtual" msgstr "Wirtualny" #: netbox/dcim/choices.py:856 netbox/dcim/choices.py:1099 -#: netbox/dcim/forms/bulk_edit.py:1563 netbox/dcim/forms/filtersets.py:1330 -#: netbox/dcim/forms/model_forms.py:995 netbox/dcim/forms/model_forms.py:1404 -#: netbox/netbox/navigation/menu.py:140 netbox/netbox/navigation/menu.py:144 -#: netbox/templates/dcim/interface.html:210 +#: netbox/dcim/forms/bulk_edit.py:1578 netbox/dcim/forms/filtersets.py:1335 +#: netbox/dcim/forms/model_forms.py:1007 netbox/dcim/forms/model_forms.py:1445 +#: netbox/netbox/navigation/menu.py:146 netbox/netbox/navigation/menu.py:150 +#: netbox/templates/dcim/interface.html:267 msgid "Wireless" msgstr "Bezprzewodowy" @@ -2743,13 +3212,13 @@ msgstr "Bezprzewodowy" msgid "Virtual interfaces" msgstr "Interfejsy wirtualne" -#: netbox/dcim/choices.py:1025 netbox/dcim/forms/bulk_edit.py:1428 -#: netbox/dcim/forms/bulk_import.py:862 netbox/dcim/forms/model_forms.py:981 -#: netbox/dcim/tables/devices.py:660 netbox/templates/dcim/interface.html:106 +#: netbox/dcim/choices.py:1025 netbox/dcim/forms/bulk_edit.py:1431 +#: netbox/dcim/forms/bulk_import.py:870 netbox/dcim/forms/model_forms.py:993 +#: netbox/dcim/tables/devices.py:694 netbox/templates/dcim/interface.html:112 #: netbox/templates/virtualization/vminterface.html:43 -#: netbox/virtualization/forms/bulk_edit.py:212 -#: netbox/virtualization/forms/bulk_import.py:158 -#: netbox/virtualization/tables/virtualmachines.py:166 +#: netbox/virtualization/forms/bulk_edit.py:194 +#: netbox/virtualization/forms/bulk_import.py:164 +#: netbox/virtualization/tables/virtualmachines.py:136 msgid "Bridge" msgstr "Most" @@ -2773,10 +3242,10 @@ msgstr "Ethernet (płaszczyzna tylna)" msgid "Cellular" msgstr "Komórkowy" -#: netbox/dcim/choices.py:1167 netbox/dcim/forms/filtersets.py:383 -#: netbox/dcim/forms/filtersets.py:809 netbox/dcim/forms/filtersets.py:963 -#: netbox/dcim/forms/filtersets.py:1542 -#: netbox/templates/dcim/inventoryitem.html:52 +#: netbox/dcim/choices.py:1167 netbox/dcim/forms/filtersets.py:384 +#: netbox/dcim/forms/filtersets.py:810 netbox/dcim/forms/filtersets.py:964 +#: netbox/dcim/forms/filtersets.py:1547 +#: netbox/templates/dcim/inventoryitem.html:56 #: netbox/templates/dcim/virtualchassis_edit.html:54 msgid "Serial" msgstr "Seryjny" @@ -2802,109 +3271,95 @@ msgstr "Pełny" msgid "Auto" msgstr "Automatyczny" -#: netbox/dcim/choices.py:1265 +#: netbox/dcim/choices.py:1266 msgid "Access" msgstr "Dostęp" -#: netbox/dcim/choices.py:1266 netbox/ipam/tables/vlans.py:172 -#: netbox/ipam/tables/vlans.py:217 +#: netbox/dcim/choices.py:1267 netbox/ipam/tables/vlans.py:148 +#: netbox/ipam/tables/vlans.py:193 #: netbox/templates/dcim/inc/interface_vlans_table.html:7 msgid "Tagged" msgstr "Oznaczone" -#: netbox/dcim/choices.py:1267 +#: netbox/dcim/choices.py:1268 msgid "Tagged (All)" msgstr "Oznaczone (Wszystkie)" -#: netbox/dcim/choices.py:1296 +#: netbox/dcim/choices.py:1269 netbox/templates/ipam/vlan_edit.html:22 +msgid "Q-in-Q (802.1ad)" +msgstr "Q w Q (802.1ad)" + +#: netbox/dcim/choices.py:1298 msgid "IEEE Standard" msgstr "Standard IEEE" -#: netbox/dcim/choices.py:1307 +#: netbox/dcim/choices.py:1309 msgid "Passive 24V (2-pair)" msgstr "Pasywny 24V (2 pary)" -#: netbox/dcim/choices.py:1308 +#: netbox/dcim/choices.py:1310 msgid "Passive 24V (4-pair)" msgstr "Pasywny 24V (4-parowy)" -#: netbox/dcim/choices.py:1309 +#: netbox/dcim/choices.py:1311 msgid "Passive 48V (2-pair)" msgstr "Pasywny 48V (2 pary)" -#: netbox/dcim/choices.py:1310 +#: netbox/dcim/choices.py:1312 msgid "Passive 48V (4-pair)" msgstr "Pasywny 48V (4 pary)" -#: netbox/dcim/choices.py:1380 netbox/dcim/choices.py:1490 +#: netbox/dcim/choices.py:1382 netbox/dcim/choices.py:1492 msgid "Copper" msgstr "Miedź" -#: netbox/dcim/choices.py:1403 +#: netbox/dcim/choices.py:1405 msgid "Fiber Optic" msgstr "Światłowód" -#: netbox/dcim/choices.py:1436 netbox/dcim/choices.py:1519 +#: netbox/dcim/choices.py:1438 netbox/dcim/choices.py:1521 msgid "USB" msgstr "USB" -#: netbox/dcim/choices.py:1506 +#: netbox/dcim/choices.py:1508 msgid "Fiber" msgstr "Włókno" -#: netbox/dcim/choices.py:1531 netbox/dcim/forms/filtersets.py:1227 +#: netbox/dcim/choices.py:1533 netbox/dcim/forms/filtersets.py:1228 msgid "Connected" msgstr "Połączony" -#: netbox/dcim/choices.py:1550 netbox/wireless/choices.py:497 +#: netbox/dcim/choices.py:1552 netbox/netbox/choices.py:175 msgid "Kilometers" msgstr "Kilometry" -#: netbox/dcim/choices.py:1551 netbox/templates/dcim/cable_trace.html:65 -#: netbox/wireless/choices.py:498 +#: netbox/dcim/choices.py:1553 netbox/netbox/choices.py:176 +#: netbox/templates/dcim/cable_trace.html:65 msgid "Meters" msgstr "Mierniki" -#: netbox/dcim/choices.py:1552 +#: netbox/dcim/choices.py:1554 msgid "Centimeters" msgstr "Centymetry" -#: netbox/dcim/choices.py:1553 netbox/wireless/choices.py:499 +#: netbox/dcim/choices.py:1555 netbox/netbox/choices.py:177 msgid "Miles" msgstr "Mile" -#: netbox/dcim/choices.py:1554 netbox/templates/dcim/cable_trace.html:66 -#: netbox/wireless/choices.py:500 +#: netbox/dcim/choices.py:1556 netbox/netbox/choices.py:178 +#: netbox/templates/dcim/cable_trace.html:66 msgid "Feet" msgstr "Stopy" -#: netbox/dcim/choices.py:1570 netbox/templates/dcim/device.html:327 -#: netbox/templates/dcim/rack.html:107 -msgid "Kilograms" -msgstr "Kilogramy" - -#: netbox/dcim/choices.py:1571 -msgid "Grams" -msgstr "Gramy" - -#: netbox/dcim/choices.py:1572 netbox/templates/dcim/device.html:328 -#: netbox/templates/dcim/rack.html:108 -msgid "Pounds" -msgstr "funty" - -#: netbox/dcim/choices.py:1573 -msgid "Ounces" -msgstr "Uncja" - -#: netbox/dcim/choices.py:1620 +#: netbox/dcim/choices.py:1604 msgid "Redundant" msgstr "Nadmiarowy" -#: netbox/dcim/choices.py:1641 +#: netbox/dcim/choices.py:1625 msgid "Single phase" msgstr "Jednofazowy" -#: netbox/dcim/choices.py:1642 +#: netbox/dcim/choices.py:1626 msgid "Three-phase" msgstr "Trójfazowy" @@ -2918,335 +3373,319 @@ msgstr "Nieprawidłowy format adresu MAC: {value}" msgid "Invalid WWN format: {value}" msgstr "Nieprawidłowy format WWN: {value}" -#: netbox/dcim/filtersets.py:86 +#: netbox/dcim/filtersets.py:87 msgid "Parent region (ID)" msgstr "Region macierzysty (ID)" -#: netbox/dcim/filtersets.py:92 +#: netbox/dcim/filtersets.py:93 msgid "Parent region (slug)" msgstr "Region macierzysty (identyfikator)" -#: netbox/dcim/filtersets.py:116 +#: netbox/dcim/filtersets.py:117 msgid "Parent site group (ID)" msgstr "Nadrzędna grupa witryn (ID)" -#: netbox/dcim/filtersets.py:122 +#: netbox/dcim/filtersets.py:123 msgid "Parent site group (slug)" msgstr "Nadrzędna grupa terenów (identyfikator)" -#: netbox/dcim/filtersets.py:164 netbox/extras/filtersets.py:364 -#: netbox/ipam/filtersets.py:843 netbox/ipam/filtersets.py:995 +#: netbox/dcim/filtersets.py:165 netbox/extras/filtersets.py:364 +#: netbox/ipam/filtersets.py:810 netbox/ipam/filtersets.py:962 msgid "Group (ID)" msgstr "Grupa (ID)" -#: netbox/dcim/filtersets.py:170 +#: netbox/dcim/filtersets.py:171 msgid "Group (slug)" msgstr "Grupa (identyfikator)" -#: netbox/dcim/filtersets.py:176 netbox/dcim/filtersets.py:181 +#: netbox/dcim/filtersets.py:177 netbox/dcim/filtersets.py:182 msgid "AS (ID)" msgstr "JAKO (ID)" -#: netbox/dcim/filtersets.py:246 +#: netbox/dcim/filtersets.py:247 msgid "Parent location (ID)" msgstr "Lokalizacja nadrzędna (ID)" -#: netbox/dcim/filtersets.py:252 +#: netbox/dcim/filtersets.py:253 msgid "Parent location (slug)" msgstr "Lokalizacja nadrzędna (identyfikator)" -#: netbox/dcim/filtersets.py:258 netbox/dcim/filtersets.py:369 -#: netbox/dcim/filtersets.py:490 netbox/dcim/filtersets.py:1057 -#: netbox/dcim/filtersets.py:1404 netbox/dcim/filtersets.py:2182 -msgid "Location (ID)" -msgstr "Lokalizacja (ID)" - -#: netbox/dcim/filtersets.py:265 netbox/dcim/filtersets.py:376 -#: netbox/dcim/filtersets.py:497 netbox/dcim/filtersets.py:1410 -#: netbox/extras/filtersets.py:542 -msgid "Location (slug)" -msgstr "Lokalizacja (identyfikator)" - -#: netbox/dcim/filtersets.py:296 netbox/dcim/filtersets.py:381 -#: netbox/dcim/filtersets.py:539 netbox/dcim/filtersets.py:678 -#: netbox/dcim/filtersets.py:882 netbox/dcim/filtersets.py:933 -#: netbox/dcim/filtersets.py:973 netbox/dcim/filtersets.py:1306 -#: netbox/dcim/filtersets.py:1840 +#: netbox/dcim/filtersets.py:297 netbox/dcim/filtersets.py:382 +#: netbox/dcim/filtersets.py:540 netbox/dcim/filtersets.py:679 +#: netbox/dcim/filtersets.py:883 netbox/dcim/filtersets.py:934 +#: netbox/dcim/filtersets.py:974 netbox/dcim/filtersets.py:1308 +#: netbox/dcim/filtersets.py:1960 msgid "Manufacturer (ID)" msgstr "Producent (ID)" -#: netbox/dcim/filtersets.py:302 netbox/dcim/filtersets.py:387 -#: netbox/dcim/filtersets.py:545 netbox/dcim/filtersets.py:684 -#: netbox/dcim/filtersets.py:888 netbox/dcim/filtersets.py:939 -#: netbox/dcim/filtersets.py:979 netbox/dcim/filtersets.py:1312 -#: netbox/dcim/filtersets.py:1846 +#: netbox/dcim/filtersets.py:303 netbox/dcim/filtersets.py:388 +#: netbox/dcim/filtersets.py:546 netbox/dcim/filtersets.py:685 +#: netbox/dcim/filtersets.py:889 netbox/dcim/filtersets.py:940 +#: netbox/dcim/filtersets.py:980 netbox/dcim/filtersets.py:1314 +#: netbox/dcim/filtersets.py:1966 msgid "Manufacturer (slug)" msgstr "Producent (identyfikator)" -#: netbox/dcim/filtersets.py:393 +#: netbox/dcim/filtersets.py:394 msgid "Rack type (slug)" msgstr "Typ szafy (identyfikator)" -#: netbox/dcim/filtersets.py:397 +#: netbox/dcim/filtersets.py:398 msgid "Rack type (ID)" msgstr "Typ szafy (numer identyfikacyjny)" -#: netbox/dcim/filtersets.py:411 netbox/dcim/filtersets.py:892 -#: netbox/dcim/filtersets.py:994 netbox/dcim/filtersets.py:1850 -#: netbox/ipam/filtersets.py:383 netbox/ipam/filtersets.py:495 -#: netbox/ipam/filtersets.py:1005 netbox/virtualization/filtersets.py:210 +#: netbox/dcim/filtersets.py:412 netbox/dcim/filtersets.py:893 +#: netbox/dcim/filtersets.py:995 netbox/dcim/filtersets.py:1970 +#: netbox/ipam/filtersets.py:350 netbox/ipam/filtersets.py:462 +#: netbox/ipam/filtersets.py:972 netbox/virtualization/filtersets.py:176 msgid "Role (ID)" msgstr "Rola (ID)" -#: netbox/dcim/filtersets.py:417 netbox/dcim/filtersets.py:898 -#: netbox/dcim/filtersets.py:1000 netbox/dcim/filtersets.py:1856 -#: netbox/extras/filtersets.py:558 netbox/ipam/filtersets.py:389 -#: netbox/ipam/filtersets.py:501 netbox/ipam/filtersets.py:1011 -#: netbox/virtualization/filtersets.py:216 +#: netbox/dcim/filtersets.py:418 netbox/dcim/filtersets.py:899 +#: netbox/dcim/filtersets.py:1001 netbox/dcim/filtersets.py:1976 +#: netbox/extras/filtersets.py:558 netbox/ipam/filtersets.py:356 +#: netbox/ipam/filtersets.py:468 netbox/ipam/filtersets.py:978 +#: netbox/virtualization/filtersets.py:182 msgid "Role (slug)" msgstr "Rola (identyfikator)" -#: netbox/dcim/filtersets.py:447 netbox/dcim/filtersets.py:1062 -#: netbox/dcim/filtersets.py:1415 netbox/dcim/filtersets.py:2244 +#: netbox/dcim/filtersets.py:448 netbox/dcim/filtersets.py:1063 +#: netbox/dcim/filtersets.py:1417 netbox/dcim/filtersets.py:2368 msgid "Rack (ID)" msgstr "Szafa (numer identyfikacyjny)" -#: netbox/dcim/filtersets.py:507 netbox/extras/filtersets.py:293 +#: netbox/dcim/filtersets.py:508 netbox/extras/filtersets.py:293 #: netbox/extras/filtersets.py:337 netbox/extras/filtersets.py:359 #: netbox/extras/filtersets.py:419 netbox/users/filtersets.py:113 #: netbox/users/filtersets.py:180 msgid "User (name)" msgstr "Użytkownik (nazwa)" -#: netbox/dcim/filtersets.py:549 +#: netbox/dcim/filtersets.py:550 msgid "Default platform (ID)" msgstr "Domyślna platforma (ID)" -#: netbox/dcim/filtersets.py:555 +#: netbox/dcim/filtersets.py:556 msgid "Default platform (slug)" msgstr "Domyślna platforma (identyfikator)" -#: netbox/dcim/filtersets.py:558 netbox/dcim/forms/filtersets.py:517 +#: netbox/dcim/filtersets.py:559 netbox/dcim/forms/filtersets.py:518 msgid "Has a front image" msgstr "Posiada obraz z przodu" -#: netbox/dcim/filtersets.py:562 netbox/dcim/forms/filtersets.py:524 +#: netbox/dcim/filtersets.py:563 netbox/dcim/forms/filtersets.py:525 msgid "Has a rear image" msgstr "Posiada tylny obraz" -#: netbox/dcim/filtersets.py:567 netbox/dcim/filtersets.py:688 -#: netbox/dcim/filtersets.py:1131 netbox/dcim/forms/filtersets.py:531 -#: netbox/dcim/forms/filtersets.py:627 netbox/dcim/forms/filtersets.py:848 +#: netbox/dcim/filtersets.py:568 netbox/dcim/filtersets.py:689 +#: netbox/dcim/filtersets.py:1132 netbox/dcim/forms/filtersets.py:532 +#: netbox/dcim/forms/filtersets.py:628 netbox/dcim/forms/filtersets.py:849 msgid "Has console ports" msgstr "Posiada porty konsoli" -#: netbox/dcim/filtersets.py:571 netbox/dcim/filtersets.py:692 -#: netbox/dcim/filtersets.py:1135 netbox/dcim/forms/filtersets.py:538 -#: netbox/dcim/forms/filtersets.py:634 netbox/dcim/forms/filtersets.py:855 +#: netbox/dcim/filtersets.py:572 netbox/dcim/filtersets.py:693 +#: netbox/dcim/filtersets.py:1136 netbox/dcim/forms/filtersets.py:539 +#: netbox/dcim/forms/filtersets.py:635 netbox/dcim/forms/filtersets.py:856 msgid "Has console server ports" msgstr "Posiada porty serwera konsoli" -#: netbox/dcim/filtersets.py:575 netbox/dcim/filtersets.py:696 -#: netbox/dcim/filtersets.py:1139 netbox/dcim/forms/filtersets.py:545 -#: netbox/dcim/forms/filtersets.py:641 netbox/dcim/forms/filtersets.py:862 +#: netbox/dcim/filtersets.py:576 netbox/dcim/filtersets.py:697 +#: netbox/dcim/filtersets.py:1140 netbox/dcim/forms/filtersets.py:546 +#: netbox/dcim/forms/filtersets.py:642 netbox/dcim/forms/filtersets.py:863 msgid "Has power ports" msgstr "Posiada porty zasilania" -#: netbox/dcim/filtersets.py:579 netbox/dcim/filtersets.py:700 -#: netbox/dcim/filtersets.py:1143 netbox/dcim/forms/filtersets.py:552 -#: netbox/dcim/forms/filtersets.py:648 netbox/dcim/forms/filtersets.py:869 +#: netbox/dcim/filtersets.py:580 netbox/dcim/filtersets.py:701 +#: netbox/dcim/filtersets.py:1144 netbox/dcim/forms/filtersets.py:553 +#: netbox/dcim/forms/filtersets.py:649 netbox/dcim/forms/filtersets.py:870 msgid "Has power outlets" msgstr "Posiada gniazdka elektryczne" -#: netbox/dcim/filtersets.py:583 netbox/dcim/filtersets.py:704 -#: netbox/dcim/filtersets.py:1147 netbox/dcim/forms/filtersets.py:559 -#: netbox/dcim/forms/filtersets.py:655 netbox/dcim/forms/filtersets.py:876 +#: netbox/dcim/filtersets.py:584 netbox/dcim/filtersets.py:705 +#: netbox/dcim/filtersets.py:1148 netbox/dcim/forms/filtersets.py:560 +#: netbox/dcim/forms/filtersets.py:656 netbox/dcim/forms/filtersets.py:877 msgid "Has interfaces" msgstr "Posiada interfejsy" -#: netbox/dcim/filtersets.py:587 netbox/dcim/filtersets.py:708 -#: netbox/dcim/filtersets.py:1151 netbox/dcim/forms/filtersets.py:566 -#: netbox/dcim/forms/filtersets.py:662 netbox/dcim/forms/filtersets.py:883 +#: netbox/dcim/filtersets.py:588 netbox/dcim/filtersets.py:709 +#: netbox/dcim/filtersets.py:1152 netbox/dcim/forms/filtersets.py:567 +#: netbox/dcim/forms/filtersets.py:663 netbox/dcim/forms/filtersets.py:884 msgid "Has pass-through ports" msgstr "Posiada porty przelotowe" -#: netbox/dcim/filtersets.py:591 netbox/dcim/filtersets.py:1155 -#: netbox/dcim/forms/filtersets.py:580 +#: netbox/dcim/filtersets.py:592 netbox/dcim/filtersets.py:1156 +#: netbox/dcim/forms/filtersets.py:581 msgid "Has module bays" msgstr "Posiada kieszenie modułowe" -#: netbox/dcim/filtersets.py:595 netbox/dcim/filtersets.py:1159 -#: netbox/dcim/forms/filtersets.py:573 +#: netbox/dcim/filtersets.py:596 netbox/dcim/filtersets.py:1160 +#: netbox/dcim/forms/filtersets.py:574 msgid "Has device bays" msgstr "Posiada zatoki na urządzenia" -#: netbox/dcim/filtersets.py:599 netbox/dcim/forms/filtersets.py:587 +#: netbox/dcim/filtersets.py:600 netbox/dcim/forms/filtersets.py:588 msgid "Has inventory items" msgstr "Posiada pozycje inwentaryzacyjne" -#: netbox/dcim/filtersets.py:756 netbox/dcim/filtersets.py:989 -#: netbox/dcim/filtersets.py:1436 +#: netbox/dcim/filtersets.py:757 netbox/dcim/filtersets.py:990 +#: netbox/dcim/filtersets.py:1438 msgid "Device type (ID)" msgstr "Typ urządzenia (ID)" -#: netbox/dcim/filtersets.py:772 netbox/dcim/filtersets.py:1317 +#: netbox/dcim/filtersets.py:773 netbox/dcim/filtersets.py:1319 msgid "Module type (ID)" msgstr "Typ modułu (ID)" -#: netbox/dcim/filtersets.py:804 netbox/dcim/filtersets.py:1591 +#: netbox/dcim/filtersets.py:805 netbox/dcim/filtersets.py:1593 msgid "Power port (ID)" msgstr "Port zasilania (ID)" -#: netbox/dcim/filtersets.py:878 netbox/dcim/filtersets.py:1836 +#: netbox/dcim/filtersets.py:879 netbox/dcim/filtersets.py:1956 msgid "Parent inventory item (ID)" msgstr "Nadrzędny element zapasów (ID)" -#: netbox/dcim/filtersets.py:921 netbox/dcim/filtersets.py:947 -#: netbox/dcim/filtersets.py:1127 netbox/virtualization/filtersets.py:238 +#: netbox/dcim/filtersets.py:922 netbox/dcim/filtersets.py:948 +#: netbox/dcim/filtersets.py:1128 netbox/virtualization/filtersets.py:204 msgid "Config template (ID)" msgstr "Szablon konfiguracji (ID)" -#: netbox/dcim/filtersets.py:985 +#: netbox/dcim/filtersets.py:986 msgid "Device type (slug)" msgstr "Typ urządzenia (identyfikator)" -#: netbox/dcim/filtersets.py:1005 +#: netbox/dcim/filtersets.py:1006 msgid "Parent Device (ID)" msgstr "Urządzenie nadrzędne (ID)" -#: netbox/dcim/filtersets.py:1009 netbox/virtualization/filtersets.py:220 +#: netbox/dcim/filtersets.py:1010 netbox/virtualization/filtersets.py:186 msgid "Platform (ID)" msgstr "Platforma (ID)" -#: netbox/dcim/filtersets.py:1015 netbox/extras/filtersets.py:569 -#: netbox/virtualization/filtersets.py:226 +#: netbox/dcim/filtersets.py:1016 netbox/extras/filtersets.py:569 +#: netbox/virtualization/filtersets.py:192 msgid "Platform (slug)" msgstr "Platforma (identyfikator)" -#: netbox/dcim/filtersets.py:1051 netbox/dcim/filtersets.py:1399 -#: netbox/dcim/filtersets.py:1934 netbox/dcim/filtersets.py:2176 -#: netbox/dcim/filtersets.py:2235 +#: netbox/dcim/filtersets.py:1052 netbox/dcim/filtersets.py:1401 +#: netbox/dcim/filtersets.py:2058 netbox/dcim/filtersets.py:2300 +#: netbox/dcim/filtersets.py:2359 msgid "Site name (slug)" msgstr "Nazwa terenu (identyfikator)" -#: netbox/dcim/filtersets.py:1067 +#: netbox/dcim/filtersets.py:1068 msgid "Parent bay (ID)" msgstr "Zatoka macierzysta (ID)" -#: netbox/dcim/filtersets.py:1071 +#: netbox/dcim/filtersets.py:1072 msgid "VM cluster (ID)" msgstr "Klaster maszyn wirtualnych (ID)" -#: netbox/dcim/filtersets.py:1077 netbox/extras/filtersets.py:591 -#: netbox/virtualization/filtersets.py:136 +#: netbox/dcim/filtersets.py:1078 netbox/extras/filtersets.py:591 +#: netbox/virtualization/filtersets.py:102 msgid "Cluster group (slug)" msgstr "Grupa klastra (identyfikator)" -#: netbox/dcim/filtersets.py:1082 netbox/virtualization/filtersets.py:130 +#: netbox/dcim/filtersets.py:1083 netbox/virtualization/filtersets.py:96 msgid "Cluster group (ID)" msgstr "Grupa klastra (ID)" -#: netbox/dcim/filtersets.py:1088 +#: netbox/dcim/filtersets.py:1089 msgid "Device model (slug)" msgstr "Model urządzenia (identyfikator)" -#: netbox/dcim/filtersets.py:1099 netbox/dcim/forms/bulk_edit.py:522 +#: netbox/dcim/filtersets.py:1100 netbox/dcim/forms/bulk_edit.py:525 msgid "Is full depth" msgstr "Jest pełna głębokość" -#: netbox/dcim/filtersets.py:1103 netbox/dcim/forms/common.py:18 -#: netbox/dcim/forms/filtersets.py:818 netbox/dcim/forms/filtersets.py:1385 -#: netbox/dcim/models/device_components.py:518 -#: netbox/virtualization/filtersets.py:230 -#: netbox/virtualization/filtersets.py:301 -#: netbox/virtualization/forms/filtersets.py:172 -#: netbox/virtualization/forms/filtersets.py:223 +#: netbox/dcim/filtersets.py:1104 netbox/dcim/forms/filtersets.py:819 +#: netbox/dcim/forms/filtersets.py:1390 netbox/dcim/forms/filtersets.py:1586 +#: netbox/dcim/forms/filtersets.py:1591 netbox/dcim/forms/model_forms.py:1762 +#: netbox/dcim/models/devices.py:1505 netbox/dcim/models/devices.py:1526 +#: netbox/virtualization/filtersets.py:196 +#: netbox/virtualization/filtersets.py:268 +#: netbox/virtualization/forms/filtersets.py:177 +#: netbox/virtualization/forms/filtersets.py:228 msgid "MAC address" msgstr "Adres MAC" -#: netbox/dcim/filtersets.py:1110 netbox/dcim/filtersets.py:1274 -#: netbox/dcim/forms/filtersets.py:827 netbox/dcim/forms/filtersets.py:930 -#: netbox/virtualization/filtersets.py:234 -#: netbox/virtualization/forms/filtersets.py:176 +#: netbox/dcim/filtersets.py:1111 netbox/dcim/filtersets.py:1276 +#: netbox/dcim/forms/filtersets.py:828 netbox/dcim/forms/filtersets.py:931 +#: netbox/virtualization/filtersets.py:200 +#: netbox/virtualization/forms/filtersets.py:181 msgid "Has a primary IP" msgstr "Posiada podstawowy adres IP" -#: netbox/dcim/filtersets.py:1114 +#: netbox/dcim/filtersets.py:1115 msgid "Has an out-of-band IP" msgstr "Posiada adres IP poza pasmem" -#: netbox/dcim/filtersets.py:1119 +#: netbox/dcim/filtersets.py:1120 msgid "Virtual chassis (ID)" msgstr "Wirtualne podwozie (ID)" -#: netbox/dcim/filtersets.py:1123 +#: netbox/dcim/filtersets.py:1124 msgid "Is a virtual chassis member" msgstr "Jest członkiem wirtualnego podwozia" -#: netbox/dcim/filtersets.py:1164 +#: netbox/dcim/filtersets.py:1165 msgid "OOB IP (ID)" msgstr "OOB IP (ID)" -#: netbox/dcim/filtersets.py:1168 +#: netbox/dcim/filtersets.py:1169 msgid "Has virtual device context" msgstr "Posiada kontekst urządzenia wirtualnego" -#: netbox/dcim/filtersets.py:1257 +#: netbox/dcim/filtersets.py:1259 msgid "VDC (ID)" msgstr "VDC (ID)" -#: netbox/dcim/filtersets.py:1262 +#: netbox/dcim/filtersets.py:1264 msgid "Device model" msgstr "Model urządzenia" -#: netbox/dcim/filtersets.py:1267 netbox/ipam/filtersets.py:634 -#: netbox/vpn/filtersets.py:102 netbox/vpn/filtersets.py:401 -msgid "Interface (ID)" -msgstr "Interfejs (ID)" - -#: netbox/dcim/filtersets.py:1323 +#: netbox/dcim/filtersets.py:1325 msgid "Module type (model)" msgstr "Typ modułu (model)" -#: netbox/dcim/filtersets.py:1329 +#: netbox/dcim/filtersets.py:1331 msgid "Module bay (ID)" msgstr "Osłona modułu (ID)" -#: netbox/dcim/filtersets.py:1333 netbox/dcim/filtersets.py:1425 -#: netbox/ipam/filtersets.py:613 netbox/ipam/filtersets.py:853 -#: netbox/ipam/filtersets.py:1117 netbox/virtualization/filtersets.py:161 -#: netbox/vpn/filtersets.py:379 +#: netbox/dcim/filtersets.py:1335 netbox/dcim/filtersets.py:1427 +#: netbox/dcim/filtersets.py:1613 netbox/ipam/filtersets.py:580 +#: netbox/ipam/filtersets.py:820 netbox/ipam/filtersets.py:1142 +#: netbox/virtualization/filtersets.py:127 netbox/vpn/filtersets.py:379 msgid "Device (ID)" msgstr "Urządzenie (ID)" -#: netbox/dcim/filtersets.py:1421 +#: netbox/dcim/filtersets.py:1423 msgid "Rack (name)" msgstr "Szafa (nazwa)" -#: netbox/dcim/filtersets.py:1431 netbox/ipam/filtersets.py:608 -#: netbox/ipam/filtersets.py:848 netbox/ipam/filtersets.py:1123 -#: netbox/vpn/filtersets.py:374 +#: netbox/dcim/filtersets.py:1433 netbox/dcim/filtersets.py:1608 +#: netbox/ipam/filtersets.py:575 netbox/ipam/filtersets.py:815 +#: netbox/ipam/filtersets.py:1148 netbox/vpn/filtersets.py:374 msgid "Device (name)" msgstr "Urządzenie (nazwa)" -#: netbox/dcim/filtersets.py:1442 +#: netbox/dcim/filtersets.py:1444 msgid "Device type (model)" msgstr "Typ urządzenia (model)" -#: netbox/dcim/filtersets.py:1447 +#: netbox/dcim/filtersets.py:1449 msgid "Device role (ID)" msgstr "Rola urządzenia (ID)" -#: netbox/dcim/filtersets.py:1453 +#: netbox/dcim/filtersets.py:1455 msgid "Device role (slug)" msgstr "Rola urządzenia (identyfikator)" -#: netbox/dcim/filtersets.py:1458 +#: netbox/dcim/filtersets.py:1460 msgid "Virtual Chassis (ID)" msgstr "Wirtualne podwozie (ID)" -#: netbox/dcim/filtersets.py:1464 netbox/dcim/forms/filtersets.py:109 -#: netbox/dcim/tables/devices.py:206 netbox/netbox/navigation/menu.py:79 +#: netbox/dcim/filtersets.py:1466 netbox/dcim/forms/filtersets.py:110 +#: netbox/dcim/tables/devices.py:217 netbox/netbox/navigation/menu.py:79 #: netbox/templates/dcim/device.html:120 #: netbox/templates/dcim/device_edit.html:93 #: netbox/templates/dcim/virtualchassis.html:20 @@ -3255,168 +3694,231 @@ msgstr "Wirtualne podwozie (ID)" msgid "Virtual Chassis" msgstr "Wirtualne podwozie" -#: netbox/dcim/filtersets.py:1488 +#: netbox/dcim/filtersets.py:1490 msgid "Module (ID)" msgstr "Moduł (ID)" -#: netbox/dcim/filtersets.py:1495 +#: netbox/dcim/filtersets.py:1497 msgid "Cable (ID)" msgstr "Kabel (ID)" -#: netbox/dcim/filtersets.py:1604 netbox/ipam/forms/bulk_import.py:189 +#: netbox/dcim/filtersets.py:1618 netbox/ipam/filtersets.py:585 +#: netbox/ipam/filtersets.py:825 netbox/ipam/filtersets.py:1158 +#: netbox/vpn/filtersets.py:385 +msgid "Virtual machine (name)" +msgstr "Maszyna wirtualna (nazwa)" + +#: netbox/dcim/filtersets.py:1623 netbox/ipam/filtersets.py:590 +#: netbox/ipam/filtersets.py:830 netbox/ipam/filtersets.py:1152 +#: netbox/virtualization/filtersets.py:248 +#: netbox/virtualization/filtersets.py:299 netbox/vpn/filtersets.py:390 +msgid "Virtual machine (ID)" +msgstr "Maszyna wirtualna (ID)" + +#: netbox/dcim/filtersets.py:1629 netbox/ipam/filtersets.py:596 +#: netbox/vpn/filtersets.py:97 netbox/vpn/filtersets.py:396 +msgid "Interface (name)" +msgstr "Interfejs (nazwa)" + +#: netbox/dcim/filtersets.py:1640 netbox/ipam/filtersets.py:607 +#: netbox/vpn/filtersets.py:108 netbox/vpn/filtersets.py:407 +msgid "VM interface (name)" +msgstr "Interfejs maszyny wirtualnej (nazwa)" + +#: netbox/dcim/filtersets.py:1645 netbox/ipam/filtersets.py:612 +#: netbox/vpn/filtersets.py:113 +msgid "VM interface (ID)" +msgstr "Interfejs maszyny wirtualnej (ID)" + +#: netbox/dcim/filtersets.py:1687 netbox/ipam/forms/bulk_import.py:185 #: netbox/vpn/forms/bulk_import.py:308 msgid "Assigned VLAN" msgstr "Przypisana sieć VLAN" -#: netbox/dcim/filtersets.py:1608 +#: netbox/dcim/filtersets.py:1691 msgid "Assigned VID" msgstr "Przypisany VID" -#: netbox/dcim/filtersets.py:1613 netbox/dcim/forms/bulk_edit.py:1531 -#: netbox/dcim/forms/bulk_import.py:913 netbox/dcim/forms/filtersets.py:1428 -#: netbox/dcim/forms/model_forms.py:1385 -#: netbox/dcim/models/device_components.py:711 -#: netbox/dcim/tables/devices.py:626 netbox/ipam/filtersets.py:318 -#: netbox/ipam/filtersets.py:329 netbox/ipam/filtersets.py:485 -#: netbox/ipam/filtersets.py:586 netbox/ipam/filtersets.py:597 -#: netbox/ipam/forms/bulk_edit.py:242 netbox/ipam/forms/bulk_edit.py:298 -#: netbox/ipam/forms/bulk_edit.py:340 netbox/ipam/forms/bulk_import.py:157 -#: netbox/ipam/forms/bulk_import.py:243 netbox/ipam/forms/bulk_import.py:279 -#: netbox/ipam/forms/filtersets.py:67 netbox/ipam/forms/filtersets.py:172 -#: netbox/ipam/forms/filtersets.py:309 netbox/ipam/forms/model_forms.py:62 -#: netbox/ipam/forms/model_forms.py:202 netbox/ipam/forms/model_forms.py:247 -#: netbox/ipam/forms/model_forms.py:300 netbox/ipam/forms/model_forms.py:464 -#: netbox/ipam/forms/model_forms.py:478 netbox/ipam/forms/model_forms.py:492 -#: netbox/ipam/models/ip.py:233 netbox/ipam/models/ip.py:512 -#: netbox/ipam/models/ip.py:720 netbox/ipam/models/vrfs.py:62 -#: netbox/ipam/tables/ip.py:242 netbox/ipam/tables/ip.py:309 -#: netbox/ipam/tables/ip.py:360 netbox/ipam/tables/ip.py:450 -#: netbox/templates/dcim/interface.html:133 +#: netbox/dcim/filtersets.py:1696 netbox/dcim/forms/bulk_edit.py:1544 +#: netbox/dcim/forms/bulk_import.py:921 netbox/dcim/forms/filtersets.py:1433 +#: netbox/dcim/forms/model_forms.py:1411 +#: netbox/dcim/models/device_components.py:749 +#: netbox/dcim/tables/devices.py:648 netbox/ipam/filtersets.py:321 +#: netbox/ipam/filtersets.py:332 netbox/ipam/filtersets.py:452 +#: netbox/ipam/filtersets.py:553 netbox/ipam/filtersets.py:564 +#: netbox/ipam/forms/bulk_edit.py:226 netbox/ipam/forms/bulk_edit.py:282 +#: netbox/ipam/forms/bulk_edit.py:324 netbox/ipam/forms/bulk_import.py:160 +#: netbox/ipam/forms/bulk_import.py:242 netbox/ipam/forms/bulk_import.py:278 +#: netbox/ipam/forms/filtersets.py:69 netbox/ipam/forms/filtersets.py:174 +#: netbox/ipam/forms/filtersets.py:312 netbox/ipam/forms/model_forms.py:65 +#: netbox/ipam/forms/model_forms.py:208 netbox/ipam/forms/model_forms.py:256 +#: netbox/ipam/forms/model_forms.py:310 netbox/ipam/forms/model_forms.py:474 +#: netbox/ipam/forms/model_forms.py:488 netbox/ipam/forms/model_forms.py:502 +#: netbox/ipam/models/ip.py:217 netbox/ipam/models/ip.py:498 +#: netbox/ipam/models/ip.py:719 netbox/ipam/models/vrfs.py:61 +#: netbox/ipam/tables/ip.py:188 netbox/ipam/tables/ip.py:261 +#: netbox/ipam/tables/ip.py:312 netbox/ipam/tables/ip.py:402 +#: netbox/templates/dcim/interface.html:152 #: netbox/templates/ipam/ipaddress.html:18 #: netbox/templates/ipam/iprange.html:40 netbox/templates/ipam/prefix.html:19 #: netbox/templates/ipam/vrf.html:7 netbox/templates/ipam/vrf.html:13 -#: netbox/templates/virtualization/vminterface.html:47 -#: netbox/virtualization/forms/bulk_edit.py:261 -#: netbox/virtualization/forms/bulk_import.py:171 -#: netbox/virtualization/forms/filtersets.py:228 -#: netbox/virtualization/forms/model_forms.py:344 -#: netbox/virtualization/models/virtualmachines.py:355 -#: netbox/virtualization/tables/virtualmachines.py:143 +#: netbox/templates/virtualization/vminterface.html:84 +#: netbox/virtualization/forms/bulk_edit.py:243 +#: netbox/virtualization/forms/bulk_import.py:177 +#: netbox/virtualization/forms/filtersets.py:233 +#: netbox/virtualization/forms/model_forms.py:368 +#: netbox/virtualization/models/virtualmachines.py:331 +#: netbox/virtualization/tables/virtualmachines.py:113 msgid "VRF" msgstr "VRF" -#: netbox/dcim/filtersets.py:1619 netbox/ipam/filtersets.py:324 -#: netbox/ipam/filtersets.py:335 netbox/ipam/filtersets.py:491 -#: netbox/ipam/filtersets.py:592 netbox/ipam/filtersets.py:603 +#: netbox/dcim/filtersets.py:1702 netbox/ipam/filtersets.py:327 +#: netbox/ipam/filtersets.py:338 netbox/ipam/filtersets.py:458 +#: netbox/ipam/filtersets.py:559 netbox/ipam/filtersets.py:570 msgid "VRF (RD)" msgstr "VRF (RD)" -#: netbox/dcim/filtersets.py:1624 netbox/ipam/filtersets.py:1032 +#: netbox/dcim/filtersets.py:1707 netbox/ipam/filtersets.py:1010 #: netbox/vpn/filtersets.py:342 msgid "L2VPN (ID)" msgstr "L2VPN (ID)" -#: netbox/dcim/filtersets.py:1630 netbox/dcim/forms/filtersets.py:1433 -#: netbox/dcim/tables/devices.py:570 netbox/ipam/filtersets.py:1038 -#: netbox/ipam/forms/filtersets.py:518 netbox/ipam/tables/vlans.py:137 -#: netbox/templates/dcim/interface.html:93 netbox/templates/ipam/vlan.html:66 +#: netbox/dcim/filtersets.py:1713 netbox/dcim/forms/filtersets.py:1438 +#: netbox/dcim/tables/devices.py:584 netbox/ipam/filtersets.py:1016 +#: netbox/ipam/forms/filtersets.py:570 netbox/ipam/tables/vlans.py:113 +#: netbox/templates/dcim/interface.html:99 netbox/templates/ipam/vlan.html:82 #: netbox/templates/vpn/l2vpntermination.html:12 -#: netbox/virtualization/forms/filtersets.py:233 +#: netbox/virtualization/forms/filtersets.py:238 #: netbox/vpn/forms/bulk_import.py:280 netbox/vpn/forms/filtersets.py:246 -#: netbox/vpn/forms/model_forms.py:409 netbox/vpn/forms/model_forms.py:427 +#: netbox/vpn/forms/model_forms.py:412 netbox/vpn/forms/model_forms.py:430 #: netbox/vpn/models/l2vpn.py:63 netbox/vpn/tables/l2vpn.py:55 msgid "L2VPN" msgstr "L2VPN" -#: netbox/dcim/filtersets.py:1662 +#: netbox/dcim/filtersets.py:1718 netbox/ipam/filtersets.py:1091 +msgid "VLAN Translation Policy (ID)" +msgstr "Zasady tłumaczenia sieci VLAN (ID)" + +#: netbox/dcim/filtersets.py:1724 netbox/dcim/forms/model_forms.py:1428 +#: netbox/dcim/models/device_components.py:568 +#: netbox/ipam/forms/filtersets.py:489 netbox/ipam/forms/model_forms.py:712 +#: netbox/templates/ipam/vlantranslationpolicy.html:11 +#: netbox/virtualization/forms/bulk_edit.py:248 +#: netbox/virtualization/forms/model_forms.py:373 +msgid "VLAN Translation Policy" +msgstr "Polityka tłumaczeń VLAN" + +#: netbox/dcim/filtersets.py:1758 msgid "Virtual Chassis Interfaces for Device" msgstr "Interfejsy wirtualnej obudowy dla urządzenia" -#: netbox/dcim/filtersets.py:1667 +#: netbox/dcim/filtersets.py:1763 msgid "Virtual Chassis Interfaces for Device (ID)" msgstr "Interfejsy wirtualnej obudowy dla urządzenia (ID)" -#: netbox/dcim/filtersets.py:1671 +#: netbox/dcim/filtersets.py:1767 msgid "Kind of interface" msgstr "Rodzaj interfejsu" -#: netbox/dcim/filtersets.py:1676 netbox/virtualization/filtersets.py:293 +#: netbox/dcim/filtersets.py:1772 netbox/virtualization/filtersets.py:259 msgid "Parent interface (ID)" msgstr "Interfejs nadrzędny (ID)" -#: netbox/dcim/filtersets.py:1681 netbox/virtualization/filtersets.py:298 +#: netbox/dcim/filtersets.py:1777 netbox/virtualization/filtersets.py:264 msgid "Bridged interface (ID)" msgstr "Interfejs mostkowy (ID)" -#: netbox/dcim/filtersets.py:1686 +#: netbox/dcim/filtersets.py:1782 msgid "LAG interface (ID)" msgstr "Interfejs LAG (ID)" -#: netbox/dcim/filtersets.py:1713 netbox/dcim/filtersets.py:1725 -#: netbox/dcim/forms/filtersets.py:1345 netbox/dcim/forms/model_forms.py:1697 +#: netbox/dcim/filtersets.py:1790 netbox/dcim/tables/devices.py:606 +#: netbox/dcim/tables/devices.py:1136 netbox/templates/dcim/interface.html:131 +#: netbox/templates/dcim/macaddress.html:11 +#: netbox/templates/dcim/macaddress.html:14 +#: netbox/templates/virtualization/vminterface.html:73 +msgid "MAC Address" +msgstr "Adres MAC" + +#: netbox/dcim/filtersets.py:1795 netbox/virtualization/filtersets.py:273 +msgid "Primary MAC address (ID)" +msgstr "Podstawowy adres MAC (ID)" + +#: netbox/dcim/filtersets.py:1801 netbox/dcim/forms/model_forms.py:1415 +#: netbox/virtualization/filtersets.py:279 +#: netbox/virtualization/forms/model_forms.py:311 +msgid "Primary MAC address" +msgstr "Podstawowy adres MAC" + +#: netbox/dcim/filtersets.py:1823 netbox/dcim/filtersets.py:1835 +#: netbox/dcim/forms/filtersets.py:1350 netbox/dcim/forms/model_forms.py:1742 #: netbox/templates/dcim/virtualdevicecontext.html:15 msgid "Virtual Device Context" msgstr "Kontekst urządzenia wirtualnego" -#: netbox/dcim/filtersets.py:1719 +#: netbox/dcim/filtersets.py:1829 msgid "Virtual Device Context (Identifier)" msgstr "Kontekst urządzenia wirtualnego (identyfikator)" -#: netbox/dcim/filtersets.py:1730 +#: netbox/dcim/filtersets.py:1840 #: netbox/templates/wireless/wirelesslan.html:11 -#: netbox/wireless/forms/model_forms.py:53 +#: netbox/wireless/forms/model_forms.py:55 msgid "Wireless LAN" msgstr "Bezprzewodowa sieć LAN" -#: netbox/dcim/filtersets.py:1734 netbox/dcim/tables/devices.py:613 +#: netbox/dcim/filtersets.py:1844 netbox/dcim/tables/devices.py:635 msgid "Wireless link" msgstr "Połączenie bezprzewodowe" -#: netbox/dcim/filtersets.py:1803 +#: netbox/dcim/filtersets.py:1854 +msgid "Virtual circuit termination (ID)" +msgstr "Zakończenie obwodu wirtualnego (ID)" + +#: netbox/dcim/filtersets.py:1923 msgid "Parent module bay (ID)" msgstr "Osłona modułu nadrzędnego (ID)" -#: netbox/dcim/filtersets.py:1808 +#: netbox/dcim/filtersets.py:1928 msgid "Installed module (ID)" msgstr "Zainstalowany moduł (ID)" -#: netbox/dcim/filtersets.py:1819 +#: netbox/dcim/filtersets.py:1939 msgid "Installed device (ID)" msgstr "Zainstalowane urządzenie (ID)" -#: netbox/dcim/filtersets.py:1825 +#: netbox/dcim/filtersets.py:1945 msgid "Installed device (name)" msgstr "Zainstalowane urządzenie (nazwa)" -#: netbox/dcim/filtersets.py:1891 +#: netbox/dcim/filtersets.py:2015 msgid "Master (ID)" msgstr "Mistrz (ID)" -#: netbox/dcim/filtersets.py:1897 +#: netbox/dcim/filtersets.py:2021 msgid "Master (name)" msgstr "Mistrz (imię)" -#: netbox/dcim/filtersets.py:1939 netbox/tenancy/filtersets.py:245 +#: netbox/dcim/filtersets.py:2063 netbox/tenancy/filtersets.py:245 msgid "Tenant (ID)" msgstr "Najemca (ID)" -#: netbox/dcim/filtersets.py:1945 netbox/extras/filtersets.py:618 +#: netbox/dcim/filtersets.py:2069 netbox/extras/filtersets.py:618 #: netbox/tenancy/filtersets.py:251 msgid "Tenant (slug)" msgstr "Najemca (identyfikator)" -#: netbox/dcim/filtersets.py:1981 netbox/dcim/forms/filtersets.py:1077 +#: netbox/dcim/filtersets.py:2105 netbox/dcim/forms/filtersets.py:1078 msgid "Unterminated" msgstr "Nieskończony" -#: netbox/dcim/filtersets.py:2239 +#: netbox/dcim/filtersets.py:2363 msgid "Power panel (ID)" msgstr "Panel zasilania (ID)" -#: netbox/dcim/forms/bulk_create.py:40 netbox/extras/forms/filtersets.py:401 -#: netbox/extras/forms/model_forms.py:567 -#: netbox/extras/forms/model_forms.py:619 netbox/netbox/forms/base.py:86 -#: netbox/netbox/forms/mixins.py:81 netbox/netbox/tables/columns.py:478 +#: netbox/dcim/forms/bulk_create.py:40 netbox/extras/forms/filtersets.py:408 +#: netbox/extras/forms/model_forms.py:581 +#: netbox/extras/forms/model_forms.py:633 netbox/netbox/forms/base.py:86 +#: netbox/netbox/forms/mixins.py:91 netbox/netbox/tables/columns.py:481 #: netbox/templates/circuits/inc/circuit_termination.html:32 #: netbox/templates/generic/bulk_edit.html:65 #: netbox/templates/inc/panels/tags.html:5 @@ -3424,11 +3926,11 @@ msgstr "Panel zasilania (ID)" msgid "Tags" msgstr "Tagi" -#: netbox/dcim/forms/bulk_create.py:112 netbox/dcim/forms/filtersets.py:1498 -#: netbox/dcim/forms/model_forms.py:488 netbox/dcim/forms/model_forms.py:546 +#: netbox/dcim/forms/bulk_create.py:112 netbox/dcim/forms/filtersets.py:1503 +#: netbox/dcim/forms/model_forms.py:498 netbox/dcim/forms/model_forms.py:557 #: netbox/dcim/forms/object_create.py:197 -#: netbox/dcim/forms/object_create.py:345 netbox/dcim/tables/devices.py:165 -#: netbox/dcim/tables/devices.py:707 netbox/dcim/tables/devicetypes.py:246 +#: netbox/dcim/forms/object_create.py:345 netbox/dcim/tables/devices.py:176 +#: netbox/dcim/tables/devices.py:741 netbox/dcim/tables/devicetypes.py:253 #: netbox/templates/dcim/device.html:43 netbox/templates/dcim/device.html:131 #: netbox/templates/dcim/modulebay.html:38 #: netbox/templates/dcim/virtualchassis.html:66 @@ -3444,114 +3946,114 @@ msgstr "" "Obsługiwane są zakresy alfanumeryczne. (Musi odpowiadać liczbie tworzonych " "nazw.)" -#: netbox/dcim/forms/bulk_edit.py:133 +#: netbox/dcim/forms/bulk_edit.py:136 msgid "Contact name" msgstr "Nazwa kontaktu" -#: netbox/dcim/forms/bulk_edit.py:138 +#: netbox/dcim/forms/bulk_edit.py:141 msgid "Contact phone" msgstr "Telefon kontaktowy" -#: netbox/dcim/forms/bulk_edit.py:144 +#: netbox/dcim/forms/bulk_edit.py:147 msgid "Contact E-mail" msgstr "Kontakt E-mail" -#: netbox/dcim/forms/bulk_edit.py:147 netbox/dcim/forms/bulk_import.py:123 -#: netbox/dcim/forms/model_forms.py:128 +#: netbox/dcim/forms/bulk_edit.py:150 netbox/dcim/forms/bulk_import.py:125 +#: netbox/dcim/forms/model_forms.py:132 msgid "Time zone" msgstr "Strefa czasowa" -#: netbox/dcim/forms/bulk_edit.py:225 netbox/dcim/forms/bulk_edit.py:501 -#: netbox/dcim/forms/bulk_edit.py:565 netbox/dcim/forms/bulk_edit.py:638 -#: netbox/dcim/forms/bulk_edit.py:662 netbox/dcim/forms/bulk_edit.py:755 -#: netbox/dcim/forms/bulk_edit.py:1282 netbox/dcim/forms/bulk_edit.py:1703 -#: netbox/dcim/forms/bulk_import.py:182 netbox/dcim/forms/bulk_import.py:393 -#: netbox/dcim/forms/bulk_import.py:427 netbox/dcim/forms/bulk_import.py:472 -#: netbox/dcim/forms/bulk_import.py:508 netbox/dcim/forms/bulk_import.py:1104 -#: netbox/dcim/forms/filtersets.py:313 netbox/dcim/forms/filtersets.py:372 -#: netbox/dcim/forms/filtersets.py:494 netbox/dcim/forms/filtersets.py:619 -#: netbox/dcim/forms/filtersets.py:700 netbox/dcim/forms/filtersets.py:782 -#: netbox/dcim/forms/filtersets.py:947 netbox/dcim/forms/filtersets.py:1539 -#: netbox/dcim/forms/model_forms.py:207 netbox/dcim/forms/model_forms.py:337 -#: netbox/dcim/forms/model_forms.py:349 netbox/dcim/forms/model_forms.py:395 -#: netbox/dcim/forms/model_forms.py:436 netbox/dcim/forms/model_forms.py:1082 -#: netbox/dcim/forms/model_forms.py:1522 -#: netbox/dcim/forms/object_import.py:187 netbox/dcim/tables/devices.py:96 -#: netbox/dcim/tables/devices.py:172 netbox/dcim/tables/devices.py:940 -#: netbox/dcim/tables/devicetypes.py:80 netbox/dcim/tables/devicetypes.py:308 +#: netbox/dcim/forms/bulk_edit.py:228 netbox/dcim/forms/bulk_edit.py:504 +#: netbox/dcim/forms/bulk_edit.py:568 netbox/dcim/forms/bulk_edit.py:641 +#: netbox/dcim/forms/bulk_edit.py:665 netbox/dcim/forms/bulk_edit.py:758 +#: netbox/dcim/forms/bulk_edit.py:1285 netbox/dcim/forms/bulk_edit.py:1718 +#: netbox/dcim/forms/bulk_import.py:184 netbox/dcim/forms/bulk_import.py:395 +#: netbox/dcim/forms/bulk_import.py:429 netbox/dcim/forms/bulk_import.py:477 +#: netbox/dcim/forms/bulk_import.py:513 netbox/dcim/forms/bulk_import.py:1112 +#: netbox/dcim/forms/filtersets.py:314 netbox/dcim/forms/filtersets.py:373 +#: netbox/dcim/forms/filtersets.py:495 netbox/dcim/forms/filtersets.py:620 +#: netbox/dcim/forms/filtersets.py:701 netbox/dcim/forms/filtersets.py:783 +#: netbox/dcim/forms/filtersets.py:948 netbox/dcim/forms/filtersets.py:1544 +#: netbox/dcim/forms/model_forms.py:211 netbox/dcim/forms/model_forms.py:345 +#: netbox/dcim/forms/model_forms.py:357 netbox/dcim/forms/model_forms.py:404 +#: netbox/dcim/forms/model_forms.py:445 netbox/dcim/forms/model_forms.py:1095 +#: netbox/dcim/forms/model_forms.py:1564 +#: netbox/dcim/forms/object_import.py:188 netbox/dcim/tables/devices.py:107 +#: netbox/dcim/tables/devices.py:183 netbox/dcim/tables/devices.py:970 +#: netbox/dcim/tables/devicetypes.py:85 netbox/dcim/tables/devicetypes.py:315 #: netbox/dcim/tables/modules.py:20 netbox/dcim/tables/modules.py:61 -#: netbox/dcim/tables/racks.py:58 netbox/dcim/tables/racks.py:132 +#: netbox/dcim/tables/racks.py:58 netbox/dcim/tables/racks.py:131 #: netbox/templates/dcim/devicetype.html:14 -#: netbox/templates/dcim/inventoryitem.html:44 +#: netbox/templates/dcim/inventoryitem.html:48 #: netbox/templates/dcim/manufacturer.html:33 #: netbox/templates/dcim/modulebay.html:62 -#: netbox/templates/dcim/moduletype.html:25 +#: netbox/templates/dcim/moduletype.html:27 #: netbox/templates/dcim/platform.html:37 #: netbox/templates/dcim/racktype.html:16 msgid "Manufacturer" msgstr "Producent" -#: netbox/dcim/forms/bulk_edit.py:230 netbox/dcim/forms/bulk_edit.py:378 -#: netbox/dcim/forms/bulk_import.py:191 netbox/dcim/forms/bulk_import.py:270 -#: netbox/dcim/forms/filtersets.py:255 +#: netbox/dcim/forms/bulk_edit.py:233 netbox/dcim/forms/bulk_edit.py:381 +#: netbox/dcim/forms/bulk_import.py:193 netbox/dcim/forms/bulk_import.py:272 +#: netbox/dcim/forms/filtersets.py:256 #: netbox/templates/dcim/inc/panels/racktype_dimensions.html:6 msgid "Form factor" msgstr "Współczynnik kształtu" -#: netbox/dcim/forms/bulk_edit.py:235 netbox/dcim/forms/bulk_edit.py:383 -#: netbox/dcim/forms/bulk_import.py:199 netbox/dcim/forms/bulk_import.py:273 -#: netbox/dcim/forms/filtersets.py:260 +#: netbox/dcim/forms/bulk_edit.py:238 netbox/dcim/forms/bulk_edit.py:386 +#: netbox/dcim/forms/bulk_import.py:201 netbox/dcim/forms/bulk_import.py:275 +#: netbox/dcim/forms/filtersets.py:261 #: netbox/templates/dcim/inc/panels/racktype_dimensions.html:10 msgid "Width" msgstr "Szerokość" -#: netbox/dcim/forms/bulk_edit.py:241 netbox/dcim/forms/bulk_edit.py:389 -#: netbox/dcim/forms/bulk_import.py:280 +#: netbox/dcim/forms/bulk_edit.py:244 netbox/dcim/forms/bulk_edit.py:392 +#: netbox/dcim/forms/bulk_import.py:282 #: netbox/templates/dcim/devicetype.html:37 msgid "Height (U)" msgstr "Wysokość (U)" -#: netbox/dcim/forms/bulk_edit.py:250 netbox/dcim/forms/bulk_edit.py:394 -#: netbox/dcim/forms/filtersets.py:274 +#: netbox/dcim/forms/bulk_edit.py:253 netbox/dcim/forms/bulk_edit.py:397 +#: netbox/dcim/forms/filtersets.py:275 msgid "Descending units" msgstr "Jednostki malejące" -#: netbox/dcim/forms/bulk_edit.py:253 netbox/dcim/forms/bulk_edit.py:397 +#: netbox/dcim/forms/bulk_edit.py:256 netbox/dcim/forms/bulk_edit.py:400 msgid "Outer width" msgstr "Szerokość zewnętrzna" -#: netbox/dcim/forms/bulk_edit.py:258 netbox/dcim/forms/bulk_edit.py:402 +#: netbox/dcim/forms/bulk_edit.py:261 netbox/dcim/forms/bulk_edit.py:405 msgid "Outer depth" msgstr "Głębokość zewnętrzna" -#: netbox/dcim/forms/bulk_edit.py:263 netbox/dcim/forms/bulk_edit.py:407 -#: netbox/dcim/forms/bulk_import.py:204 netbox/dcim/forms/bulk_import.py:283 +#: netbox/dcim/forms/bulk_edit.py:266 netbox/dcim/forms/bulk_edit.py:410 +#: netbox/dcim/forms/bulk_import.py:206 netbox/dcim/forms/bulk_import.py:285 msgid "Outer unit" msgstr "Jednostka zewnętrzna" -#: netbox/dcim/forms/bulk_edit.py:268 netbox/dcim/forms/bulk_edit.py:412 +#: netbox/dcim/forms/bulk_edit.py:271 netbox/dcim/forms/bulk_edit.py:415 msgid "Mounting depth" msgstr "Głębokość montażu" -#: netbox/dcim/forms/bulk_edit.py:273 netbox/dcim/forms/bulk_edit.py:300 -#: netbox/dcim/forms/bulk_edit.py:422 netbox/dcim/forms/bulk_edit.py:452 -#: netbox/dcim/forms/bulk_edit.py:535 netbox/dcim/forms/bulk_edit.py:558 -#: netbox/dcim/forms/bulk_edit.py:579 netbox/dcim/forms/bulk_edit.py:601 -#: netbox/dcim/forms/bulk_import.py:406 netbox/dcim/forms/bulk_import.py:438 -#: netbox/dcim/forms/filtersets.py:285 netbox/dcim/forms/filtersets.py:307 -#: netbox/dcim/forms/filtersets.py:327 netbox/dcim/forms/filtersets.py:401 -#: netbox/dcim/forms/filtersets.py:488 netbox/dcim/forms/filtersets.py:594 -#: netbox/dcim/forms/filtersets.py:613 netbox/dcim/forms/filtersets.py:674 -#: netbox/dcim/forms/model_forms.py:221 netbox/dcim/forms/model_forms.py:298 -#: netbox/dcim/tables/devicetypes.py:106 netbox/dcim/tables/modules.py:35 -#: netbox/dcim/tables/racks.py:74 netbox/dcim/tables/racks.py:172 +#: netbox/dcim/forms/bulk_edit.py:276 netbox/dcim/forms/bulk_edit.py:303 +#: netbox/dcim/forms/bulk_edit.py:425 netbox/dcim/forms/bulk_edit.py:455 +#: netbox/dcim/forms/bulk_edit.py:538 netbox/dcim/forms/bulk_edit.py:561 +#: netbox/dcim/forms/bulk_edit.py:582 netbox/dcim/forms/bulk_edit.py:604 +#: netbox/dcim/forms/bulk_import.py:408 netbox/dcim/forms/bulk_import.py:440 +#: netbox/dcim/forms/filtersets.py:286 netbox/dcim/forms/filtersets.py:308 +#: netbox/dcim/forms/filtersets.py:328 netbox/dcim/forms/filtersets.py:402 +#: netbox/dcim/forms/filtersets.py:489 netbox/dcim/forms/filtersets.py:595 +#: netbox/dcim/forms/filtersets.py:614 netbox/dcim/forms/filtersets.py:675 +#: netbox/dcim/forms/model_forms.py:226 netbox/dcim/forms/model_forms.py:306 +#: netbox/dcim/tables/devicetypes.py:111 netbox/dcim/tables/modules.py:35 +#: netbox/dcim/tables/racks.py:74 netbox/dcim/tables/racks.py:171 #: netbox/extras/forms/bulk_edit.py:53 netbox/extras/forms/bulk_edit.py:133 #: netbox/extras/forms/bulk_edit.py:183 netbox/extras/forms/bulk_edit.py:288 -#: netbox/extras/forms/filtersets.py:64 netbox/extras/forms/filtersets.py:156 -#: netbox/extras/forms/filtersets.py:243 netbox/ipam/forms/bulk_edit.py:190 +#: netbox/extras/forms/filtersets.py:65 netbox/extras/forms/filtersets.py:159 +#: netbox/extras/forms/filtersets.py:249 netbox/ipam/forms/bulk_edit.py:193 #: netbox/templates/dcim/device.html:324 #: netbox/templates/dcim/devicetype.html:49 -#: netbox/templates/dcim/moduletype.html:45 netbox/templates/dcim/rack.html:81 +#: netbox/templates/dcim/moduletype.html:47 netbox/templates/dcim/rack.html:81 #: netbox/templates/dcim/racktype.html:41 #: netbox/templates/extras/configcontext.html:17 #: netbox/templates/extras/customlink.html:25 @@ -3560,131 +4062,86 @@ msgstr "Głębokość montażu" msgid "Weight" msgstr "Waga" -#: netbox/dcim/forms/bulk_edit.py:278 netbox/dcim/forms/bulk_edit.py:427 -#: netbox/dcim/forms/filtersets.py:290 +#: netbox/dcim/forms/bulk_edit.py:281 netbox/dcim/forms/bulk_edit.py:430 +#: netbox/dcim/forms/filtersets.py:291 msgid "Max weight" msgstr "Maksymalna waga" -#: netbox/dcim/forms/bulk_edit.py:283 netbox/dcim/forms/bulk_edit.py:432 -#: netbox/dcim/forms/bulk_edit.py:540 netbox/dcim/forms/bulk_edit.py:584 -#: netbox/dcim/forms/bulk_import.py:210 netbox/dcim/forms/bulk_import.py:295 -#: netbox/dcim/forms/bulk_import.py:411 netbox/dcim/forms/bulk_import.py:443 -#: netbox/dcim/forms/filtersets.py:295 netbox/dcim/forms/filtersets.py:598 -#: netbox/dcim/forms/filtersets.py:678 +#: netbox/dcim/forms/bulk_edit.py:286 netbox/dcim/forms/bulk_edit.py:435 +#: netbox/dcim/forms/bulk_edit.py:543 netbox/dcim/forms/bulk_edit.py:587 +#: netbox/dcim/forms/bulk_import.py:212 netbox/dcim/forms/bulk_import.py:297 +#: netbox/dcim/forms/bulk_import.py:413 netbox/dcim/forms/bulk_import.py:445 +#: netbox/dcim/forms/filtersets.py:296 netbox/dcim/forms/filtersets.py:599 +#: netbox/dcim/forms/filtersets.py:679 msgid "Weight unit" msgstr "Jednostka wagowa" -#: netbox/dcim/forms/bulk_edit.py:297 netbox/dcim/forms/filtersets.py:305 -#: netbox/dcim/forms/model_forms.py:217 netbox/dcim/forms/model_forms.py:256 +#: netbox/dcim/forms/bulk_edit.py:300 netbox/dcim/forms/filtersets.py:306 +#: netbox/dcim/forms/model_forms.py:222 netbox/dcim/forms/model_forms.py:261 #: netbox/templates/dcim/rack.html:45 netbox/templates/dcim/racktype.html:13 msgid "Rack Type" msgstr "Typ szafy" -#: netbox/dcim/forms/bulk_edit.py:299 netbox/dcim/forms/model_forms.py:220 -#: netbox/dcim/forms/model_forms.py:297 +#: netbox/dcim/forms/bulk_edit.py:302 netbox/dcim/forms/model_forms.py:225 +#: netbox/dcim/forms/model_forms.py:305 msgid "Outer Dimensions" msgstr "Wymiary zewnętrzne" -#: netbox/dcim/forms/bulk_edit.py:302 netbox/dcim/forms/model_forms.py:222 -#: netbox/dcim/forms/model_forms.py:299 netbox/templates/dcim/device.html:315 +#: netbox/dcim/forms/bulk_edit.py:305 netbox/dcim/forms/model_forms.py:227 +#: netbox/dcim/forms/model_forms.py:307 netbox/templates/dcim/device.html:315 #: netbox/templates/dcim/inc/panels/racktype_dimensions.html:3 msgid "Dimensions" msgstr "Wymiary" -#: netbox/dcim/forms/bulk_edit.py:304 netbox/dcim/forms/filtersets.py:306 -#: netbox/dcim/forms/filtersets.py:326 netbox/dcim/forms/model_forms.py:224 +#: netbox/dcim/forms/bulk_edit.py:307 netbox/dcim/forms/filtersets.py:307 +#: netbox/dcim/forms/filtersets.py:327 netbox/dcim/forms/model_forms.py:229 #: netbox/templates/dcim/inc/panels/racktype_numbering.html:3 msgid "Numbering" msgstr "Numeracja" -#: netbox/dcim/forms/bulk_edit.py:358 netbox/dcim/forms/bulk_edit.py:1277 -#: netbox/dcim/forms/bulk_edit.py:1698 netbox/dcim/forms/bulk_import.py:253 -#: netbox/dcim/forms/bulk_import.py:1098 netbox/dcim/forms/filtersets.py:367 -#: netbox/dcim/forms/filtersets.py:777 netbox/dcim/forms/filtersets.py:1534 -#: netbox/dcim/forms/model_forms.py:251 netbox/dcim/forms/model_forms.py:1077 -#: netbox/dcim/forms/model_forms.py:1517 -#: netbox/dcim/forms/object_import.py:181 netbox/dcim/tables/devices.py:169 -#: netbox/dcim/tables/devices.py:809 netbox/dcim/tables/devices.py:937 -#: netbox/dcim/tables/devicetypes.py:304 netbox/dcim/tables/racks.py:129 -#: netbox/extras/filtersets.py:552 netbox/ipam/forms/bulk_edit.py:261 -#: netbox/ipam/forms/bulk_edit.py:311 netbox/ipam/forms/bulk_edit.py:359 -#: netbox/ipam/forms/bulk_edit.py:511 netbox/ipam/forms/bulk_import.py:197 -#: netbox/ipam/forms/bulk_import.py:262 netbox/ipam/forms/bulk_import.py:298 -#: netbox/ipam/forms/bulk_import.py:479 netbox/ipam/forms/filtersets.py:237 -#: netbox/ipam/forms/filtersets.py:289 netbox/ipam/forms/filtersets.py:360 -#: netbox/ipam/forms/filtersets.py:509 netbox/ipam/forms/model_forms.py:188 -#: netbox/ipam/forms/model_forms.py:221 netbox/ipam/forms/model_forms.py:250 -#: netbox/ipam/forms/model_forms.py:676 netbox/ipam/tables/ip.py:258 -#: netbox/ipam/tables/ip.py:316 netbox/ipam/tables/ip.py:367 -#: netbox/ipam/tables/vlans.py:130 netbox/ipam/tables/vlans.py:235 -#: netbox/templates/dcim/device.html:182 -#: netbox/templates/dcim/inc/panels/inventory_items.html:20 -#: netbox/templates/dcim/interface.html:223 -#: netbox/templates/dcim/inventoryitem.html:36 -#: netbox/templates/dcim/rack.html:49 netbox/templates/ipam/ipaddress.html:41 -#: netbox/templates/ipam/iprange.html:50 netbox/templates/ipam/prefix.html:77 -#: netbox/templates/ipam/role.html:19 netbox/templates/ipam/vlan.html:52 -#: netbox/templates/virtualization/virtualmachine.html:23 -#: netbox/templates/vpn/tunneltermination.html:17 -#: netbox/templates/wireless/inc/wirelesslink_interface.html:20 -#: netbox/tenancy/forms/bulk_edit.py:142 -#: netbox/tenancy/forms/filtersets.py:107 -#: netbox/tenancy/forms/model_forms.py:137 -#: netbox/tenancy/tables/contacts.py:102 -#: netbox/virtualization/forms/bulk_edit.py:145 -#: netbox/virtualization/forms/bulk_import.py:106 -#: netbox/virtualization/forms/filtersets.py:157 -#: netbox/virtualization/forms/model_forms.py:195 -#: netbox/virtualization/tables/virtualmachines.py:75 -#: netbox/vpn/forms/bulk_edit.py:87 netbox/vpn/forms/bulk_import.py:81 -#: netbox/vpn/forms/filtersets.py:85 netbox/vpn/forms/model_forms.py:78 -#: netbox/vpn/forms/model_forms.py:113 netbox/vpn/tables/tunnels.py:82 -msgid "Role" -msgstr "Rola" - -#: netbox/dcim/forms/bulk_edit.py:363 netbox/dcim/forms/bulk_import.py:260 -#: netbox/dcim/forms/filtersets.py:380 +#: netbox/dcim/forms/bulk_edit.py:366 netbox/dcim/forms/bulk_import.py:262 +#: netbox/dcim/forms/filtersets.py:381 msgid "Rack type" msgstr "Typ szafy" -#: netbox/dcim/forms/bulk_edit.py:370 netbox/dcim/forms/bulk_edit.py:718 -#: netbox/dcim/forms/bulk_edit.py:779 netbox/templates/dcim/device.html:104 +#: netbox/dcim/forms/bulk_edit.py:373 netbox/dcim/forms/bulk_edit.py:721 +#: netbox/dcim/forms/bulk_edit.py:782 netbox/templates/dcim/device.html:104 #: netbox/templates/dcim/module.html:77 #: netbox/templates/dcim/modulebay.html:70 netbox/templates/dcim/rack.html:57 #: netbox/templates/virtualization/virtualmachine.html:35 msgid "Serial Number" msgstr "Numer seryjny" -#: netbox/dcim/forms/bulk_edit.py:373 netbox/dcim/forms/filtersets.py:387 -#: netbox/dcim/forms/filtersets.py:813 netbox/dcim/forms/filtersets.py:967 -#: netbox/dcim/forms/filtersets.py:1546 +#: netbox/dcim/forms/bulk_edit.py:376 netbox/dcim/forms/filtersets.py:388 +#: netbox/dcim/forms/filtersets.py:814 netbox/dcim/forms/filtersets.py:968 +#: netbox/dcim/forms/filtersets.py:1551 msgid "Asset tag" msgstr "Etykieta zasobu" -#: netbox/dcim/forms/bulk_edit.py:417 netbox/dcim/forms/bulk_edit.py:530 -#: netbox/dcim/forms/bulk_edit.py:574 netbox/dcim/forms/bulk_edit.py:711 -#: netbox/dcim/forms/bulk_import.py:289 netbox/dcim/forms/bulk_import.py:432 -#: netbox/dcim/forms/bulk_import.py:602 netbox/dcim/forms/filtersets.py:280 -#: netbox/dcim/forms/filtersets.py:511 netbox/dcim/forms/filtersets.py:669 -#: netbox/dcim/forms/filtersets.py:804 netbox/templates/dcim/device.html:98 +#: netbox/dcim/forms/bulk_edit.py:420 netbox/dcim/forms/bulk_edit.py:533 +#: netbox/dcim/forms/bulk_edit.py:577 netbox/dcim/forms/bulk_edit.py:714 +#: netbox/dcim/forms/bulk_import.py:291 netbox/dcim/forms/bulk_import.py:434 +#: netbox/dcim/forms/bulk_import.py:607 netbox/dcim/forms/filtersets.py:281 +#: netbox/dcim/forms/filtersets.py:512 netbox/dcim/forms/filtersets.py:670 +#: netbox/dcim/forms/filtersets.py:805 netbox/templates/dcim/device.html:98 #: netbox/templates/dcim/devicetype.html:65 -#: netbox/templates/dcim/moduletype.html:41 netbox/templates/dcim/rack.html:65 +#: netbox/templates/dcim/moduletype.html:43 netbox/templates/dcim/rack.html:65 #: netbox/templates/dcim/racktype.html:28 msgid "Airflow" msgstr "Przepływ powietrza" -#: netbox/dcim/forms/bulk_edit.py:446 netbox/dcim/forms/bulk_edit.py:925 -#: netbox/dcim/forms/bulk_import.py:344 netbox/dcim/forms/bulk_import.py:347 -#: netbox/dcim/forms/bulk_import.py:575 netbox/dcim/forms/bulk_import.py:1380 -#: netbox/dcim/forms/bulk_import.py:1384 netbox/dcim/forms/filtersets.py:104 -#: netbox/dcim/forms/filtersets.py:324 netbox/dcim/forms/filtersets.py:405 -#: netbox/dcim/forms/filtersets.py:419 netbox/dcim/forms/filtersets.py:457 -#: netbox/dcim/forms/filtersets.py:772 netbox/dcim/forms/filtersets.py:1035 -#: netbox/dcim/forms/filtersets.py:1167 netbox/dcim/forms/model_forms.py:264 -#: netbox/dcim/forms/model_forms.py:306 netbox/dcim/forms/model_forms.py:479 -#: netbox/dcim/forms/model_forms.py:755 netbox/dcim/forms/object_create.py:392 -#: netbox/dcim/tables/devices.py:161 netbox/dcim/tables/power.py:70 -#: netbox/dcim/tables/racks.py:217 netbox/ipam/forms/filtersets.py:442 +#: netbox/dcim/forms/bulk_edit.py:449 netbox/dcim/forms/bulk_edit.py:928 +#: netbox/dcim/forms/bulk_import.py:346 netbox/dcim/forms/bulk_import.py:349 +#: netbox/dcim/forms/bulk_import.py:580 netbox/dcim/forms/bulk_import.py:1477 +#: netbox/dcim/forms/bulk_import.py:1481 netbox/dcim/forms/filtersets.py:105 +#: netbox/dcim/forms/filtersets.py:325 netbox/dcim/forms/filtersets.py:406 +#: netbox/dcim/forms/filtersets.py:420 netbox/dcim/forms/filtersets.py:458 +#: netbox/dcim/forms/filtersets.py:773 netbox/dcim/forms/filtersets.py:1036 +#: netbox/dcim/forms/filtersets.py:1168 netbox/dcim/forms/model_forms.py:271 +#: netbox/dcim/forms/model_forms.py:314 netbox/dcim/forms/model_forms.py:489 +#: netbox/dcim/forms/model_forms.py:767 netbox/dcim/forms/object_create.py:392 +#: netbox/dcim/tables/devices.py:172 netbox/dcim/tables/power.py:70 +#: netbox/dcim/tables/racks.py:216 netbox/ipam/forms/filtersets.py:445 #: netbox/templates/dcim/device.html:30 #: netbox/templates/dcim/inc/cable_termination.html:16 #: netbox/templates/dcim/powerfeed.html:28 netbox/templates/dcim/rack.html:13 @@ -3695,212 +4152,144 @@ msgstr "Przepływ powietrza" msgid "Rack" msgstr "Szafa" -#: netbox/dcim/forms/bulk_edit.py:450 netbox/dcim/forms/bulk_edit.py:744 -#: netbox/dcim/forms/filtersets.py:325 netbox/dcim/forms/filtersets.py:398 -#: netbox/dcim/forms/filtersets.py:481 netbox/dcim/forms/filtersets.py:608 -#: netbox/dcim/forms/filtersets.py:721 netbox/dcim/forms/filtersets.py:942 -#: netbox/dcim/forms/model_forms.py:670 netbox/dcim/forms/model_forms.py:1587 +#: netbox/dcim/forms/bulk_edit.py:453 netbox/dcim/forms/bulk_edit.py:747 +#: netbox/dcim/forms/filtersets.py:326 netbox/dcim/forms/filtersets.py:399 +#: netbox/dcim/forms/filtersets.py:482 netbox/dcim/forms/filtersets.py:609 +#: netbox/dcim/forms/filtersets.py:722 netbox/dcim/forms/filtersets.py:943 +#: netbox/dcim/forms/model_forms.py:681 netbox/dcim/forms/model_forms.py:1632 #: netbox/templates/dcim/device_edit.html:20 msgid "Hardware" msgstr "Sprzęt" -#: netbox/dcim/forms/bulk_edit.py:506 netbox/dcim/forms/bulk_import.py:399 -#: netbox/dcim/forms/filtersets.py:499 netbox/dcim/forms/model_forms.py:353 +#: netbox/dcim/forms/bulk_edit.py:509 netbox/dcim/forms/bulk_import.py:401 +#: netbox/dcim/forms/filtersets.py:500 netbox/dcim/forms/model_forms.py:362 msgid "Default platform" msgstr "Domyślna platforma" -#: netbox/dcim/forms/bulk_edit.py:511 netbox/dcim/forms/bulk_edit.py:570 -#: netbox/dcim/forms/filtersets.py:502 netbox/dcim/forms/filtersets.py:622 +#: netbox/dcim/forms/bulk_edit.py:514 netbox/dcim/forms/bulk_edit.py:573 +#: netbox/dcim/forms/filtersets.py:503 netbox/dcim/forms/filtersets.py:623 msgid "Part number" msgstr "Numer części" -#: netbox/dcim/forms/bulk_edit.py:515 +#: netbox/dcim/forms/bulk_edit.py:518 msgid "U height" msgstr "Wysokość U" -#: netbox/dcim/forms/bulk_edit.py:527 netbox/dcim/tables/devicetypes.py:102 +#: netbox/dcim/forms/bulk_edit.py:530 netbox/dcim/tables/devicetypes.py:107 msgid "Exclude from utilization" msgstr "Wyklucz z wykorzystania" -#: netbox/dcim/forms/bulk_edit.py:556 netbox/dcim/forms/model_forms.py:368 -#: netbox/dcim/tables/devicetypes.py:77 netbox/templates/dcim/device.html:88 +#: netbox/dcim/forms/bulk_edit.py:559 netbox/dcim/forms/model_forms.py:377 +#: netbox/dcim/tables/devicetypes.py:82 netbox/templates/dcim/device.html:88 #: netbox/templates/dcim/devicebay.html:52 #: netbox/templates/dcim/module.html:61 msgid "Device Type" msgstr "Typ urządzenia" -#: netbox/dcim/forms/bulk_edit.py:598 netbox/dcim/forms/model_forms.py:401 +#: netbox/dcim/forms/bulk_edit.py:601 netbox/dcim/forms/model_forms.py:410 #: netbox/dcim/tables/modules.py:17 netbox/dcim/tables/modules.py:66 #: netbox/templates/dcim/module.html:65 #: netbox/templates/dcim/modulebay.html:66 -#: netbox/templates/dcim/moduletype.html:22 +#: netbox/templates/dcim/moduletype.html:24 msgid "Module Type" msgstr "Typ modułu" -#: netbox/dcim/forms/bulk_edit.py:602 netbox/dcim/forms/model_forms.py:371 -#: netbox/dcim/forms/model_forms.py:402 +#: netbox/dcim/forms/bulk_edit.py:605 netbox/dcim/forms/model_forms.py:380 +#: netbox/dcim/forms/model_forms.py:411 #: netbox/templates/dcim/devicetype.html:11 msgid "Chassis" msgstr "Podwozie" -#: netbox/dcim/forms/bulk_edit.py:616 netbox/dcim/models/devices.py:484 -#: netbox/dcim/tables/devices.py:67 +#: netbox/dcim/forms/bulk_edit.py:619 netbox/dcim/models/devices.py:483 +#: netbox/dcim/tables/devices.py:78 msgid "VM role" msgstr "Rola maszyny wirtualnej" -#: netbox/dcim/forms/bulk_edit.py:619 netbox/dcim/forms/bulk_edit.py:643 -#: netbox/dcim/forms/bulk_edit.py:726 netbox/dcim/forms/bulk_import.py:456 -#: netbox/dcim/forms/bulk_import.py:460 netbox/dcim/forms/bulk_import.py:479 -#: netbox/dcim/forms/bulk_import.py:483 netbox/dcim/forms/bulk_import.py:608 -#: netbox/dcim/forms/bulk_import.py:612 netbox/dcim/forms/filtersets.py:689 -#: netbox/dcim/forms/filtersets.py:705 netbox/dcim/forms/filtersets.py:823 -#: netbox/dcim/forms/model_forms.py:415 netbox/dcim/forms/model_forms.py:441 -#: netbox/dcim/forms/model_forms.py:555 -#: netbox/virtualization/forms/bulk_import.py:132 -#: netbox/virtualization/forms/bulk_import.py:133 -#: netbox/virtualization/forms/filtersets.py:188 -#: netbox/virtualization/forms/model_forms.py:215 +#: netbox/dcim/forms/bulk_edit.py:622 netbox/dcim/forms/bulk_edit.py:646 +#: netbox/dcim/forms/bulk_edit.py:729 netbox/dcim/forms/bulk_import.py:461 +#: netbox/dcim/forms/bulk_import.py:465 netbox/dcim/forms/bulk_import.py:484 +#: netbox/dcim/forms/bulk_import.py:488 netbox/dcim/forms/bulk_import.py:613 +#: netbox/dcim/forms/bulk_import.py:617 netbox/dcim/forms/filtersets.py:690 +#: netbox/dcim/forms/filtersets.py:706 netbox/dcim/forms/filtersets.py:824 +#: netbox/dcim/forms/model_forms.py:424 netbox/dcim/forms/model_forms.py:451 +#: netbox/dcim/forms/model_forms.py:566 +#: netbox/virtualization/forms/bulk_import.py:138 +#: netbox/virtualization/forms/bulk_import.py:139 +#: netbox/virtualization/forms/filtersets.py:193 +#: netbox/virtualization/forms/model_forms.py:222 msgid "Config template" msgstr "Szablon konfiguracji" -#: netbox/dcim/forms/bulk_edit.py:667 netbox/dcim/forms/bulk_edit.py:1076 -#: netbox/dcim/forms/bulk_import.py:514 netbox/dcim/forms/filtersets.py:114 -#: netbox/dcim/forms/model_forms.py:501 netbox/dcim/forms/model_forms.py:872 -#: netbox/dcim/forms/model_forms.py:889 netbox/extras/filtersets.py:547 +#: netbox/dcim/forms/bulk_edit.py:670 netbox/dcim/forms/bulk_edit.py:1079 +#: netbox/dcim/forms/bulk_import.py:519 netbox/dcim/forms/filtersets.py:115 +#: netbox/dcim/forms/model_forms.py:511 netbox/dcim/forms/model_forms.py:884 +#: netbox/dcim/forms/model_forms.py:901 netbox/extras/filtersets.py:547 msgid "Device type" msgstr "Typ urządzenia" -#: netbox/dcim/forms/bulk_edit.py:678 netbox/dcim/forms/bulk_import.py:495 -#: netbox/dcim/forms/filtersets.py:119 netbox/dcim/forms/model_forms.py:509 +#: netbox/dcim/forms/bulk_edit.py:681 netbox/dcim/forms/bulk_import.py:500 +#: netbox/dcim/forms/filtersets.py:120 netbox/dcim/forms/model_forms.py:519 msgid "Device role" msgstr "Rola urządzenia" -#: netbox/dcim/forms/bulk_edit.py:701 netbox/dcim/forms/bulk_import.py:520 -#: netbox/dcim/forms/filtersets.py:796 netbox/dcim/forms/model_forms.py:451 -#: netbox/dcim/forms/model_forms.py:513 netbox/dcim/tables/devices.py:182 +#: netbox/dcim/forms/bulk_edit.py:704 netbox/dcim/forms/bulk_import.py:525 +#: netbox/dcim/forms/filtersets.py:797 netbox/dcim/forms/model_forms.py:461 +#: netbox/dcim/forms/model_forms.py:524 netbox/dcim/tables/devices.py:193 #: netbox/extras/filtersets.py:563 netbox/templates/dcim/device.html:186 #: netbox/templates/dcim/platform.html:26 #: netbox/templates/virtualization/virtualmachine.html:27 -#: netbox/virtualization/forms/bulk_edit.py:160 -#: netbox/virtualization/forms/bulk_import.py:122 -#: netbox/virtualization/forms/filtersets.py:168 -#: netbox/virtualization/forms/model_forms.py:203 -#: netbox/virtualization/tables/virtualmachines.py:79 +#: netbox/virtualization/forms/bulk_edit.py:142 +#: netbox/virtualization/forms/bulk_import.py:128 +#: netbox/virtualization/forms/filtersets.py:173 +#: netbox/virtualization/forms/model_forms.py:210 +#: netbox/virtualization/tables/virtualmachines.py:49 msgid "Platform" msgstr "Platforma" -#: netbox/dcim/forms/bulk_edit.py:731 netbox/dcim/forms/bulk_import.py:539 -#: netbox/dcim/forms/filtersets.py:728 netbox/dcim/forms/filtersets.py:898 -#: netbox/dcim/forms/model_forms.py:522 netbox/dcim/tables/devices.py:202 -#: netbox/extras/filtersets.py:596 netbox/extras/forms/filtersets.py:322 -#: netbox/ipam/forms/filtersets.py:415 netbox/ipam/forms/filtersets.py:447 +#: netbox/dcim/forms/bulk_edit.py:734 netbox/dcim/forms/bulk_import.py:544 +#: netbox/dcim/forms/filtersets.py:729 netbox/dcim/forms/filtersets.py:899 +#: netbox/dcim/forms/model_forms.py:533 netbox/dcim/tables/devices.py:213 +#: netbox/extras/filtersets.py:596 netbox/extras/forms/filtersets.py:329 +#: netbox/ipam/forms/filtersets.py:418 netbox/ipam/forms/filtersets.py:450 #: netbox/templates/dcim/device.html:239 #: netbox/templates/virtualization/cluster.html:10 #: netbox/templates/virtualization/virtualmachine.html:92 #: netbox/templates/virtualization/virtualmachine.html:101 -#: netbox/virtualization/filtersets.py:157 -#: netbox/virtualization/filtersets.py:277 -#: netbox/virtualization/forms/bulk_edit.py:129 -#: netbox/virtualization/forms/bulk_import.py:92 -#: netbox/virtualization/forms/filtersets.py:99 -#: netbox/virtualization/forms/filtersets.py:123 -#: netbox/virtualization/forms/filtersets.py:204 -#: netbox/virtualization/forms/model_forms.py:79 -#: netbox/virtualization/forms/model_forms.py:176 -#: netbox/virtualization/tables/virtualmachines.py:67 +#: netbox/virtualization/filtersets.py:123 +#: netbox/virtualization/filtersets.py:243 +#: netbox/virtualization/forms/bulk_edit.py:111 +#: netbox/virtualization/forms/bulk_import.py:98 +#: netbox/virtualization/forms/filtersets.py:104 +#: netbox/virtualization/forms/filtersets.py:128 +#: netbox/virtualization/forms/filtersets.py:209 +#: netbox/virtualization/forms/model_forms.py:78 +#: netbox/virtualization/forms/model_forms.py:183 +#: netbox/virtualization/tables/virtualmachines.py:37 msgid "Cluster" msgstr "Klaster" -#: netbox/dcim/forms/bulk_edit.py:742 netbox/dcim/forms/bulk_edit.py:1296 -#: netbox/dcim/forms/bulk_edit.py:1693 netbox/dcim/forms/bulk_edit.py:1739 -#: netbox/dcim/forms/bulk_import.py:663 netbox/dcim/forms/bulk_import.py:725 -#: netbox/dcim/forms/bulk_import.py:751 netbox/dcim/forms/bulk_import.py:777 -#: netbox/dcim/forms/bulk_import.py:797 netbox/dcim/forms/bulk_import.py:850 -#: netbox/dcim/forms/bulk_import.py:968 netbox/dcim/forms/bulk_import.py:1016 -#: netbox/dcim/forms/bulk_import.py:1033 netbox/dcim/forms/bulk_import.py:1045 -#: netbox/dcim/forms/bulk_import.py:1093 netbox/dcim/forms/bulk_import.py:1444 -#: netbox/dcim/forms/connections.py:24 netbox/dcim/forms/filtersets.py:131 -#: netbox/dcim/forms/filtersets.py:921 netbox/dcim/forms/filtersets.py:1051 -#: netbox/dcim/forms/filtersets.py:1242 netbox/dcim/forms/filtersets.py:1267 -#: netbox/dcim/forms/filtersets.py:1291 netbox/dcim/forms/filtersets.py:1311 -#: netbox/dcim/forms/filtersets.py:1334 netbox/dcim/forms/filtersets.py:1444 -#: netbox/dcim/forms/filtersets.py:1469 netbox/dcim/forms/filtersets.py:1493 -#: netbox/dcim/forms/filtersets.py:1511 netbox/dcim/forms/filtersets.py:1528 -#: netbox/dcim/forms/filtersets.py:1592 netbox/dcim/forms/filtersets.py:1616 -#: netbox/dcim/forms/filtersets.py:1640 netbox/dcim/forms/model_forms.py:633 -#: netbox/dcim/forms/model_forms.py:849 netbox/dcim/forms/model_forms.py:1215 -#: netbox/dcim/forms/model_forms.py:1671 -#: netbox/dcim/forms/object_create.py:249 netbox/dcim/tables/connections.py:22 -#: netbox/dcim/tables/connections.py:41 netbox/dcim/tables/connections.py:60 -#: netbox/dcim/tables/devices.py:285 netbox/dcim/tables/devices.py:371 -#: netbox/dcim/tables/devices.py:412 netbox/dcim/tables/devices.py:454 -#: netbox/dcim/tables/devices.py:505 netbox/dcim/tables/devices.py:597 -#: netbox/dcim/tables/devices.py:697 netbox/dcim/tables/devices.py:754 -#: netbox/dcim/tables/devices.py:801 netbox/dcim/tables/devices.py:861 -#: netbox/dcim/tables/devices.py:930 netbox/dcim/tables/devices.py:1057 -#: netbox/dcim/tables/modules.py:53 netbox/extras/forms/filtersets.py:321 -#: netbox/ipam/forms/bulk_import.py:304 netbox/ipam/forms/bulk_import.py:505 -#: netbox/ipam/forms/filtersets.py:551 netbox/ipam/forms/model_forms.py:323 -#: netbox/ipam/forms/model_forms.py:712 netbox/ipam/forms/model_forms.py:745 -#: netbox/ipam/forms/model_forms.py:771 netbox/ipam/tables/vlans.py:180 -#: netbox/templates/dcim/consoleport.html:20 -#: netbox/templates/dcim/consoleserverport.html:20 -#: netbox/templates/dcim/device.html:15 netbox/templates/dcim/device.html:130 -#: netbox/templates/dcim/device_edit.html:10 -#: netbox/templates/dcim/devicebay.html:20 -#: netbox/templates/dcim/devicebay.html:48 -#: netbox/templates/dcim/frontport.html:20 -#: netbox/templates/dcim/interface.html:30 -#: netbox/templates/dcim/interface.html:161 -#: netbox/templates/dcim/inventoryitem.html:20 -#: netbox/templates/dcim/module.html:57 -#: netbox/templates/dcim/modulebay.html:20 -#: netbox/templates/dcim/poweroutlet.html:20 -#: netbox/templates/dcim/powerport.html:20 -#: netbox/templates/dcim/rearport.html:20 -#: netbox/templates/dcim/virtualchassis.html:65 -#: netbox/templates/dcim/virtualchassis_edit.html:51 -#: netbox/templates/dcim/virtualdevicecontext.html:22 -#: netbox/templates/virtualization/virtualmachine.html:114 -#: netbox/templates/vpn/tunneltermination.html:23 -#: netbox/templates/wireless/inc/wirelesslink_interface.html:6 -#: netbox/virtualization/filtersets.py:167 -#: netbox/virtualization/forms/bulk_edit.py:137 -#: netbox/virtualization/forms/bulk_import.py:99 -#: netbox/virtualization/forms/filtersets.py:128 -#: netbox/virtualization/forms/model_forms.py:185 -#: netbox/virtualization/tables/virtualmachines.py:71 netbox/vpn/choices.py:52 -#: netbox/vpn/forms/bulk_import.py:86 netbox/vpn/forms/bulk_import.py:283 -#: netbox/vpn/forms/filtersets.py:275 netbox/vpn/forms/model_forms.py:90 -#: netbox/vpn/forms/model_forms.py:125 netbox/vpn/forms/model_forms.py:236 -#: netbox/vpn/forms/model_forms.py:453 netbox/wireless/forms/model_forms.py:99 -#: netbox/wireless/forms/model_forms.py:141 -#: netbox/wireless/tables/wirelesslan.py:75 -msgid "Device" -msgstr "Urządzenie" - -#: netbox/dcim/forms/bulk_edit.py:745 +#: netbox/dcim/forms/bulk_edit.py:748 #: netbox/templates/extras/dashboard/widget_config.html:7 -#: netbox/virtualization/forms/bulk_edit.py:191 +#: netbox/virtualization/forms/bulk_edit.py:173 msgid "Configuration" msgstr "Konfiguracja" -#: netbox/dcim/forms/bulk_edit.py:746 netbox/netbox/navigation/menu.py:243 +#: netbox/dcim/forms/bulk_edit.py:749 netbox/netbox/navigation/menu.py:251 #: netbox/templates/dcim/device_edit.html:78 msgid "Virtualization" msgstr "Wirtualizacja" -#: netbox/dcim/forms/bulk_edit.py:760 netbox/dcim/forms/bulk_import.py:675 -#: netbox/dcim/forms/model_forms.py:647 netbox/dcim/forms/model_forms.py:897 +#: netbox/dcim/forms/bulk_edit.py:763 netbox/dcim/forms/bulk_import.py:680 +#: netbox/dcim/forms/model_forms.py:658 netbox/dcim/forms/model_forms.py:909 msgid "Module type" msgstr "Rodzaj modułu" -#: netbox/dcim/forms/bulk_edit.py:814 netbox/dcim/forms/bulk_edit.py:999 -#: netbox/dcim/forms/bulk_edit.py:1018 netbox/dcim/forms/bulk_edit.py:1041 -#: netbox/dcim/forms/bulk_edit.py:1083 netbox/dcim/forms/bulk_edit.py:1127 -#: netbox/dcim/forms/bulk_edit.py:1178 netbox/dcim/forms/bulk_edit.py:1205 -#: netbox/dcim/forms/bulk_edit.py:1232 netbox/dcim/forms/bulk_edit.py:1250 -#: netbox/dcim/forms/bulk_edit.py:1268 netbox/dcim/forms/filtersets.py:67 +#: netbox/dcim/forms/bulk_edit.py:817 netbox/dcim/forms/bulk_edit.py:1002 +#: netbox/dcim/forms/bulk_edit.py:1021 netbox/dcim/forms/bulk_edit.py:1044 +#: netbox/dcim/forms/bulk_edit.py:1086 netbox/dcim/forms/bulk_edit.py:1130 +#: netbox/dcim/forms/bulk_edit.py:1181 netbox/dcim/forms/bulk_edit.py:1208 +#: netbox/dcim/forms/bulk_edit.py:1235 netbox/dcim/forms/bulk_edit.py:1253 +#: netbox/dcim/forms/bulk_edit.py:1271 netbox/dcim/forms/filtersets.py:68 #: netbox/dcim/forms/object_create.py:46 netbox/templates/dcim/cable.html:32 #: netbox/templates/dcim/consoleport.html:32 #: netbox/templates/dcim/consoleserverport.html:32 @@ -3918,109 +4307,109 @@ msgstr "Rodzaj modułu" msgid "Label" msgstr "Etykieta" -#: netbox/dcim/forms/bulk_edit.py:823 netbox/dcim/forms/filtersets.py:1068 +#: netbox/dcim/forms/bulk_edit.py:826 netbox/dcim/forms/filtersets.py:1069 #: netbox/templates/dcim/cable.html:50 msgid "Length" msgstr "Długość" -#: netbox/dcim/forms/bulk_edit.py:828 netbox/dcim/forms/bulk_import.py:1248 -#: netbox/dcim/forms/bulk_import.py:1251 netbox/dcim/forms/filtersets.py:1072 +#: netbox/dcim/forms/bulk_edit.py:831 netbox/dcim/forms/bulk_import.py:1345 +#: netbox/dcim/forms/bulk_import.py:1348 netbox/dcim/forms/filtersets.py:1073 msgid "Length unit" msgstr "Jednostka długości" -#: netbox/dcim/forms/bulk_edit.py:852 +#: netbox/dcim/forms/bulk_edit.py:855 #: netbox/templates/dcim/virtualchassis.html:23 msgid "Domain" msgstr "Domena" -#: netbox/dcim/forms/bulk_edit.py:920 netbox/dcim/forms/bulk_import.py:1367 -#: netbox/dcim/forms/filtersets.py:1158 netbox/dcim/forms/model_forms.py:750 +#: netbox/dcim/forms/bulk_edit.py:923 netbox/dcim/forms/bulk_import.py:1464 +#: netbox/dcim/forms/filtersets.py:1159 netbox/dcim/forms/model_forms.py:761 msgid "Power panel" msgstr "Panel zasilania" -#: netbox/dcim/forms/bulk_edit.py:942 netbox/dcim/forms/bulk_import.py:1403 -#: netbox/dcim/forms/filtersets.py:1180 +#: netbox/dcim/forms/bulk_edit.py:945 netbox/dcim/forms/bulk_import.py:1500 +#: netbox/dcim/forms/filtersets.py:1181 #: netbox/templates/dcim/powerfeed.html:83 msgid "Supply" msgstr "Dostawa" -#: netbox/dcim/forms/bulk_edit.py:948 netbox/dcim/forms/bulk_import.py:1408 -#: netbox/dcim/forms/filtersets.py:1185 +#: netbox/dcim/forms/bulk_edit.py:951 netbox/dcim/forms/bulk_import.py:1505 +#: netbox/dcim/forms/filtersets.py:1186 #: netbox/templates/dcim/powerfeed.html:95 msgid "Phase" msgstr "Faza" -#: netbox/dcim/forms/bulk_edit.py:954 netbox/dcim/forms/filtersets.py:1190 +#: netbox/dcim/forms/bulk_edit.py:957 netbox/dcim/forms/filtersets.py:1191 #: netbox/templates/dcim/powerfeed.html:87 msgid "Voltage" msgstr "Napięcie" -#: netbox/dcim/forms/bulk_edit.py:958 netbox/dcim/forms/filtersets.py:1194 +#: netbox/dcim/forms/bulk_edit.py:961 netbox/dcim/forms/filtersets.py:1195 #: netbox/templates/dcim/powerfeed.html:91 msgid "Amperage" msgstr "Natężenie prądu" -#: netbox/dcim/forms/bulk_edit.py:962 netbox/dcim/forms/filtersets.py:1198 +#: netbox/dcim/forms/bulk_edit.py:965 netbox/dcim/forms/filtersets.py:1199 msgid "Max utilization" msgstr "Maksymalne wykorzystanie" -#: netbox/dcim/forms/bulk_edit.py:1051 +#: netbox/dcim/forms/bulk_edit.py:1054 msgid "Maximum draw" msgstr "Maksymalne losowanie" -#: netbox/dcim/forms/bulk_edit.py:1054 -#: netbox/dcim/models/device_component_templates.py:282 -#: netbox/dcim/models/device_components.py:356 +#: netbox/dcim/forms/bulk_edit.py:1057 +#: netbox/dcim/models/device_component_templates.py:281 +#: netbox/dcim/models/device_components.py:349 msgid "Maximum power draw (watts)" msgstr "Maksymalny pobór mocy (waty)" -#: netbox/dcim/forms/bulk_edit.py:1057 +#: netbox/dcim/forms/bulk_edit.py:1060 msgid "Allocated draw" msgstr "Przydzielone losowanie" -#: netbox/dcim/forms/bulk_edit.py:1060 -#: netbox/dcim/models/device_component_templates.py:289 -#: netbox/dcim/models/device_components.py:363 +#: netbox/dcim/forms/bulk_edit.py:1063 +#: netbox/dcim/models/device_component_templates.py:288 +#: netbox/dcim/models/device_components.py:356 msgid "Allocated power draw (watts)" msgstr "Przydzielony pobór mocy (waty)" -#: netbox/dcim/forms/bulk_edit.py:1093 netbox/dcim/forms/bulk_import.py:808 -#: netbox/dcim/forms/model_forms.py:960 netbox/dcim/forms/model_forms.py:1285 -#: netbox/dcim/forms/model_forms.py:1574 netbox/dcim/forms/object_import.py:55 +#: netbox/dcim/forms/bulk_edit.py:1096 netbox/dcim/forms/bulk_import.py:813 +#: netbox/dcim/forms/model_forms.py:972 netbox/dcim/forms/model_forms.py:1301 +#: netbox/dcim/forms/model_forms.py:1616 netbox/dcim/forms/object_import.py:55 msgid "Power port" msgstr "Port zasilania" -#: netbox/dcim/forms/bulk_edit.py:1098 netbox/dcim/forms/bulk_import.py:815 +#: netbox/dcim/forms/bulk_edit.py:1101 netbox/dcim/forms/bulk_import.py:820 msgid "Feed leg" msgstr "Noga do karmienia" -#: netbox/dcim/forms/bulk_edit.py:1144 netbox/dcim/forms/bulk_edit.py:1462 +#: netbox/dcim/forms/bulk_edit.py:1147 netbox/dcim/forms/bulk_edit.py:1465 msgid "Management only" msgstr "Tylko zarządzanie" -#: netbox/dcim/forms/bulk_edit.py:1154 netbox/dcim/forms/bulk_edit.py:1468 -#: netbox/dcim/forms/bulk_import.py:898 netbox/dcim/forms/filtersets.py:1394 +#: netbox/dcim/forms/bulk_edit.py:1157 netbox/dcim/forms/bulk_edit.py:1471 +#: netbox/dcim/forms/bulk_import.py:906 netbox/dcim/forms/filtersets.py:1399 #: netbox/dcim/forms/object_import.py:90 -#: netbox/dcim/models/device_component_templates.py:437 -#: netbox/dcim/models/device_components.py:670 +#: netbox/dcim/models/device_component_templates.py:445 +#: netbox/dcim/models/device_components.py:721 msgid "PoE mode" msgstr "Tryb PoE" -#: netbox/dcim/forms/bulk_edit.py:1160 netbox/dcim/forms/bulk_edit.py:1474 -#: netbox/dcim/forms/bulk_import.py:904 netbox/dcim/forms/filtersets.py:1399 +#: netbox/dcim/forms/bulk_edit.py:1163 netbox/dcim/forms/bulk_edit.py:1477 +#: netbox/dcim/forms/bulk_import.py:912 netbox/dcim/forms/filtersets.py:1404 #: netbox/dcim/forms/object_import.py:95 -#: netbox/dcim/models/device_component_templates.py:443 -#: netbox/dcim/models/device_components.py:676 +#: netbox/dcim/models/device_component_templates.py:452 +#: netbox/dcim/models/device_components.py:728 msgid "PoE type" msgstr "Typ PoE" -#: netbox/dcim/forms/bulk_edit.py:1166 netbox/dcim/forms/filtersets.py:1404 +#: netbox/dcim/forms/bulk_edit.py:1169 netbox/dcim/forms/filtersets.py:1409 #: netbox/dcim/forms/object_import.py:100 msgid "Wireless role" msgstr "Rola sieci bezprzewodowej" -#: netbox/dcim/forms/bulk_edit.py:1303 netbox/dcim/forms/model_forms.py:669 -#: netbox/dcim/forms/model_forms.py:1230 netbox/dcim/tables/devices.py:313 +#: netbox/dcim/forms/bulk_edit.py:1306 netbox/dcim/forms/model_forms.py:680 +#: netbox/dcim/forms/model_forms.py:1246 netbox/dcim/tables/devices.py:323 #: netbox/templates/dcim/consoleport.html:24 #: netbox/templates/dcim/consoleserverport.html:24 #: netbox/templates/dcim/frontport.html:24 @@ -4034,31 +4423,31 @@ msgstr "Rola sieci bezprzewodowej" msgid "Module" msgstr "Moduł" -#: netbox/dcim/forms/bulk_edit.py:1442 netbox/dcim/tables/devices.py:665 -#: netbox/templates/dcim/interface.html:110 +#: netbox/dcim/forms/bulk_edit.py:1445 netbox/dcim/tables/devices.py:699 +#: netbox/templates/dcim/interface.html:116 msgid "LAG" msgstr "OPÓŹNIENIE" -#: netbox/dcim/forms/bulk_edit.py:1447 netbox/dcim/forms/model_forms.py:1312 +#: netbox/dcim/forms/bulk_edit.py:1450 netbox/dcim/forms/model_forms.py:1328 msgid "Virtual device contexts" msgstr "Konteksty urządzeń wirtualnych" -#: netbox/dcim/forms/bulk_edit.py:1453 netbox/dcim/forms/bulk_import.py:736 -#: netbox/dcim/forms/bulk_import.py:762 netbox/dcim/forms/filtersets.py:1252 -#: netbox/dcim/forms/filtersets.py:1277 netbox/dcim/forms/filtersets.py:1358 -#: netbox/dcim/tables/devices.py:610 -#: netbox/templates/circuits/inc/circuit_termination_fields.html:67 +#: netbox/dcim/forms/bulk_edit.py:1456 netbox/dcim/forms/bulk_import.py:741 +#: netbox/dcim/forms/bulk_import.py:767 netbox/dcim/forms/filtersets.py:1253 +#: netbox/dcim/forms/filtersets.py:1278 netbox/dcim/forms/filtersets.py:1363 +#: netbox/dcim/tables/devices.py:632 +#: netbox/templates/circuits/inc/circuit_termination_fields.html:62 #: netbox/templates/dcim/consoleport.html:40 #: netbox/templates/dcim/consoleserverport.html:40 msgid "Speed" msgstr "Prędkość" -#: netbox/dcim/forms/bulk_edit.py:1482 netbox/dcim/forms/bulk_import.py:907 +#: netbox/dcim/forms/bulk_edit.py:1485 netbox/dcim/forms/bulk_import.py:915 #: netbox/templates/vpn/ikepolicy.html:25 #: netbox/templates/vpn/ipsecprofile.html:21 #: netbox/templates/vpn/ipsecprofile.html:48 -#: netbox/virtualization/forms/bulk_edit.py:233 -#: netbox/virtualization/forms/bulk_import.py:165 +#: netbox/virtualization/forms/bulk_edit.py:215 +#: netbox/virtualization/forms/bulk_import.py:171 #: netbox/vpn/forms/bulk_edit.py:146 netbox/vpn/forms/bulk_edit.py:232 #: netbox/vpn/forms/bulk_import.py:176 netbox/vpn/forms/bulk_import.py:234 #: netbox/vpn/forms/filtersets.py:135 netbox/vpn/forms/filtersets.py:178 @@ -4067,299 +4456,305 @@ msgstr "Prędkość" msgid "Mode" msgstr "Tryb" -#: netbox/dcim/forms/bulk_edit.py:1490 netbox/dcim/forms/model_forms.py:1361 -#: netbox/ipam/forms/bulk_import.py:178 netbox/ipam/forms/filtersets.py:498 -#: netbox/ipam/models/vlans.py:84 netbox/virtualization/forms/bulk_edit.py:240 -#: netbox/virtualization/forms/model_forms.py:321 +#: netbox/dcim/forms/bulk_edit.py:1493 netbox/dcim/forms/model_forms.py:1377 +#: netbox/ipam/forms/bulk_import.py:174 netbox/ipam/forms/filtersets.py:539 +#: netbox/ipam/models/vlans.py:86 netbox/virtualization/forms/bulk_edit.py:222 +#: netbox/virtualization/forms/model_forms.py:335 msgid "VLAN group" msgstr "Grupa VLAN" -#: netbox/dcim/forms/bulk_edit.py:1499 netbox/dcim/forms/model_forms.py:1367 -#: netbox/dcim/tables/devices.py:579 -#: netbox/virtualization/forms/bulk_edit.py:248 -#: netbox/virtualization/forms/model_forms.py:326 +#: netbox/dcim/forms/bulk_edit.py:1502 netbox/dcim/forms/model_forms.py:1383 +#: netbox/dcim/tables/devices.py:593 +#: netbox/virtualization/forms/bulk_edit.py:230 +#: netbox/virtualization/forms/model_forms.py:340 msgid "Untagged VLAN" msgstr "Nieoznaczone sieci VLAN" -#: netbox/dcim/forms/bulk_edit.py:1508 netbox/dcim/forms/model_forms.py:1376 -#: netbox/dcim/tables/devices.py:585 -#: netbox/virtualization/forms/bulk_edit.py:256 -#: netbox/virtualization/forms/model_forms.py:335 +#: netbox/dcim/forms/bulk_edit.py:1511 netbox/dcim/forms/model_forms.py:1392 +#: netbox/dcim/tables/devices.py:599 +#: netbox/virtualization/forms/bulk_edit.py:238 +#: netbox/virtualization/forms/model_forms.py:349 msgid "Tagged VLANs" msgstr "Oznaczone sieci VLAN" -#: netbox/dcim/forms/bulk_edit.py:1511 +#: netbox/dcim/forms/bulk_edit.py:1514 msgid "Add tagged VLANs" msgstr "Dodaj oznaczone sieci VLAN" -#: netbox/dcim/forms/bulk_edit.py:1520 +#: netbox/dcim/forms/bulk_edit.py:1523 msgid "Remove tagged VLANs" msgstr "Usuń oznaczone sieci VLAN" -#: netbox/dcim/forms/bulk_edit.py:1536 netbox/dcim/forms/model_forms.py:1348 +#: netbox/dcim/forms/bulk_edit.py:1534 netbox/dcim/forms/model_forms.py:1401 +#: netbox/virtualization/forms/model_forms.py:358 +msgid "Q-in-Q Service VLAN" +msgstr "Usługa Q-in-Q Usługa VLAN" + +#: netbox/dcim/forms/bulk_edit.py:1549 netbox/dcim/forms/model_forms.py:1364 msgid "Wireless LAN group" msgstr "Grupa sieci bezprzewodowej sieci LAN" -#: netbox/dcim/forms/bulk_edit.py:1541 netbox/dcim/forms/model_forms.py:1353 -#: netbox/dcim/tables/devices.py:619 netbox/netbox/navigation/menu.py:146 -#: netbox/templates/dcim/interface.html:280 +#: netbox/dcim/forms/bulk_edit.py:1554 netbox/dcim/forms/model_forms.py:1369 +#: netbox/dcim/tables/devices.py:641 netbox/netbox/navigation/menu.py:152 +#: netbox/templates/dcim/interface.html:337 #: netbox/wireless/tables/wirelesslan.py:24 msgid "Wireless LANs" msgstr "Bezprzewodowe sieci LAN" -#: netbox/dcim/forms/bulk_edit.py:1550 netbox/dcim/forms/filtersets.py:1328 -#: netbox/dcim/forms/model_forms.py:1397 netbox/ipam/forms/bulk_edit.py:286 -#: netbox/ipam/forms/bulk_edit.py:378 netbox/ipam/forms/filtersets.py:169 -#: netbox/templates/dcim/interface.html:122 -#: netbox/templates/ipam/prefix.html:95 -#: netbox/virtualization/forms/model_forms.py:349 +#: netbox/dcim/forms/bulk_edit.py:1563 netbox/dcim/forms/filtersets.py:1333 +#: netbox/dcim/forms/model_forms.py:1435 netbox/ipam/forms/bulk_edit.py:269 +#: netbox/ipam/forms/bulk_edit.py:362 netbox/ipam/forms/filtersets.py:171 +#: netbox/netbox/navigation/menu.py:108 +#: netbox/templates/dcim/interface.html:128 +#: netbox/templates/ipam/prefix.html:91 +#: netbox/templates/virtualization/vminterface.html:70 +#: netbox/virtualization/forms/model_forms.py:378 msgid "Addressing" msgstr "Adresowanie" -#: netbox/dcim/forms/bulk_edit.py:1551 netbox/dcim/forms/filtersets.py:720 -#: netbox/dcim/forms/model_forms.py:1398 -#: netbox/virtualization/forms/model_forms.py:350 +#: netbox/dcim/forms/bulk_edit.py:1564 netbox/dcim/forms/filtersets.py:721 +#: netbox/dcim/forms/model_forms.py:1436 +#: netbox/virtualization/forms/model_forms.py:379 msgid "Operation" msgstr "Operacja" -#: netbox/dcim/forms/bulk_edit.py:1552 netbox/dcim/forms/filtersets.py:1329 -#: netbox/dcim/forms/model_forms.py:994 netbox/dcim/forms/model_forms.py:1400 +#: netbox/dcim/forms/bulk_edit.py:1565 netbox/dcim/forms/filtersets.py:1334 +#: netbox/dcim/forms/model_forms.py:1006 netbox/dcim/forms/model_forms.py:1438 msgid "PoE" msgstr "PoE" -#: netbox/dcim/forms/bulk_edit.py:1553 netbox/dcim/forms/model_forms.py:1399 -#: netbox/templates/dcim/interface.html:99 -#: netbox/virtualization/forms/bulk_edit.py:267 -#: netbox/virtualization/forms/model_forms.py:351 +#: netbox/dcim/forms/bulk_edit.py:1566 netbox/dcim/forms/model_forms.py:1437 +#: netbox/templates/dcim/interface.html:105 +#: netbox/virtualization/forms/bulk_edit.py:254 +#: netbox/virtualization/forms/model_forms.py:380 msgid "Related Interfaces" msgstr "Powiązane interfejsy" -#: netbox/dcim/forms/bulk_edit.py:1554 netbox/dcim/forms/model_forms.py:1401 -#: netbox/virtualization/forms/bulk_edit.py:268 -#: netbox/virtualization/forms/model_forms.py:352 +#: netbox/dcim/forms/bulk_edit.py:1568 netbox/dcim/forms/model_forms.py:1441 +#: netbox/virtualization/forms/bulk_edit.py:257 +#: netbox/virtualization/forms/model_forms.py:383 msgid "802.1Q Switching" msgstr "Przełączanie 802.1Q" -#: netbox/dcim/forms/bulk_edit.py:1558 +#: netbox/dcim/forms/bulk_edit.py:1573 msgid "Add/Remove" msgstr "Dodaj/Usuń" -#: netbox/dcim/forms/bulk_edit.py:1617 netbox/dcim/forms/bulk_edit.py:1619 +#: netbox/dcim/forms/bulk_edit.py:1632 netbox/dcim/forms/bulk_edit.py:1634 msgid "Interface mode must be specified to assign VLANs" msgstr "Tryb interfejsu musi być określony, aby przypisać sieci VLAN" -#: netbox/dcim/forms/bulk_edit.py:1624 netbox/dcim/forms/common.py:50 +#: netbox/dcim/forms/bulk_edit.py:1639 msgid "An access interface cannot have tagged VLANs assigned." msgstr "Interfejs dostępu nie może mieć przypisanych oznakowanych sieci VLAN." -#: netbox/dcim/forms/bulk_import.py:64 +#: netbox/dcim/forms/bulk_import.py:66 msgid "Name of parent region" msgstr "Nazwa regionu macierzystego" -#: netbox/dcim/forms/bulk_import.py:78 +#: netbox/dcim/forms/bulk_import.py:80 msgid "Name of parent site group" msgstr "Nazwa nadrzędnej grupy witryn" -#: netbox/dcim/forms/bulk_import.py:97 +#: netbox/dcim/forms/bulk_import.py:99 msgid "Assigned region" msgstr "Przypisany region" -#: netbox/dcim/forms/bulk_import.py:104 netbox/tenancy/forms/bulk_import.py:44 +#: netbox/dcim/forms/bulk_import.py:106 netbox/tenancy/forms/bulk_import.py:44 #: netbox/tenancy/forms/bulk_import.py:85 -#: netbox/wireless/forms/bulk_import.py:40 +#: netbox/wireless/forms/bulk_import.py:42 msgid "Assigned group" msgstr "Przydzielona grupa" -#: netbox/dcim/forms/bulk_import.py:123 +#: netbox/dcim/forms/bulk_import.py:125 msgid "available options" msgstr "dostępne opcje" -#: netbox/dcim/forms/bulk_import.py:134 netbox/dcim/forms/bulk_import.py:565 -#: netbox/dcim/forms/bulk_import.py:1364 netbox/ipam/forms/bulk_import.py:175 -#: netbox/ipam/forms/bulk_import.py:457 -#: netbox/virtualization/forms/bulk_import.py:63 -#: netbox/virtualization/forms/bulk_import.py:89 +#: netbox/dcim/forms/bulk_import.py:136 netbox/dcim/forms/bulk_import.py:570 +#: netbox/dcim/forms/bulk_import.py:1461 netbox/ipam/forms/bulk_import.py:456 +#: netbox/virtualization/forms/bulk_import.py:64 +#: netbox/virtualization/forms/bulk_import.py:95 msgid "Assigned site" msgstr "Przydzielona witryna" -#: netbox/dcim/forms/bulk_import.py:141 +#: netbox/dcim/forms/bulk_import.py:143 msgid "Parent location" msgstr "Lokalizacja nadrzędna" -#: netbox/dcim/forms/bulk_import.py:143 +#: netbox/dcim/forms/bulk_import.py:145 msgid "Location not found." msgstr "Lokalizacja nie została znaleziona." -#: netbox/dcim/forms/bulk_import.py:185 +#: netbox/dcim/forms/bulk_import.py:187 msgid "The manufacturer of this rack type" msgstr "Producent tego typu szaf" -#: netbox/dcim/forms/bulk_import.py:196 +#: netbox/dcim/forms/bulk_import.py:198 msgid "The lowest-numbered position in the rack" msgstr "Najniższy numer pozycji w szafie" -#: netbox/dcim/forms/bulk_import.py:201 netbox/dcim/forms/bulk_import.py:276 +#: netbox/dcim/forms/bulk_import.py:203 netbox/dcim/forms/bulk_import.py:278 msgid "Rail-to-rail width (in inches)" msgstr "Szerokość szyny do szyny (w calach)" -#: netbox/dcim/forms/bulk_import.py:207 netbox/dcim/forms/bulk_import.py:286 +#: netbox/dcim/forms/bulk_import.py:209 netbox/dcim/forms/bulk_import.py:288 msgid "Unit for outer dimensions" msgstr "Jednostka do wymiarów zewnętrznych" -#: netbox/dcim/forms/bulk_import.py:213 netbox/dcim/forms/bulk_import.py:298 +#: netbox/dcim/forms/bulk_import.py:215 netbox/dcim/forms/bulk_import.py:300 msgid "Unit for rack weights" msgstr "Jednostka masy w szafach" -#: netbox/dcim/forms/bulk_import.py:245 +#: netbox/dcim/forms/bulk_import.py:247 msgid "Name of assigned tenant" msgstr "Nazwa przydzielonego najemcy" -#: netbox/dcim/forms/bulk_import.py:257 +#: netbox/dcim/forms/bulk_import.py:259 msgid "Name of assigned role" msgstr "Nazwa przypisanej roli" -#: netbox/dcim/forms/bulk_import.py:264 +#: netbox/dcim/forms/bulk_import.py:266 msgid "Rack type model" msgstr "Model typu stelaża" -#: netbox/dcim/forms/bulk_import.py:292 netbox/dcim/forms/bulk_import.py:435 -#: netbox/dcim/forms/bulk_import.py:605 +#: netbox/dcim/forms/bulk_import.py:294 netbox/dcim/forms/bulk_import.py:437 +#: netbox/dcim/forms/bulk_import.py:610 msgid "Airflow direction" msgstr "Kierunek przepływu powietrza" -#: netbox/dcim/forms/bulk_import.py:324 +#: netbox/dcim/forms/bulk_import.py:326 msgid "Width must be set if not specifying a rack type." msgstr "Szerokość musi być ustawiona, jeśli nie określa się typu stelaża." -#: netbox/dcim/forms/bulk_import.py:326 +#: netbox/dcim/forms/bulk_import.py:328 msgid "U height must be set if not specifying a rack type." msgstr "Wysokość U musi być ustawiona, jeśli nie określa się typu stelaża." -#: netbox/dcim/forms/bulk_import.py:334 +#: netbox/dcim/forms/bulk_import.py:336 msgid "Parent site" msgstr "Witryna nadrzędna" -#: netbox/dcim/forms/bulk_import.py:341 netbox/dcim/forms/bulk_import.py:1377 +#: netbox/dcim/forms/bulk_import.py:343 netbox/dcim/forms/bulk_import.py:1474 msgid "Rack's location (if any)" msgstr "Lokalizacja szafy (jeśli określona)" -#: netbox/dcim/forms/bulk_import.py:350 netbox/dcim/forms/model_forms.py:311 -#: netbox/dcim/tables/racks.py:222 +#: netbox/dcim/forms/bulk_import.py:352 netbox/dcim/forms/model_forms.py:319 +#: netbox/dcim/tables/racks.py:221 #: netbox/templates/dcim/rackreservation.html:12 #: netbox/templates/dcim/rackreservation.html:45 msgid "Units" msgstr "Jednostki" -#: netbox/dcim/forms/bulk_import.py:353 +#: netbox/dcim/forms/bulk_import.py:355 msgid "Comma-separated list of individual unit numbers" msgstr "Lista poszczególnych numerów jednostek oddzielona przecinkami" -#: netbox/dcim/forms/bulk_import.py:396 +#: netbox/dcim/forms/bulk_import.py:398 msgid "The manufacturer which produces this device type" msgstr "Producent, który produkuje ten typ urządzenia" -#: netbox/dcim/forms/bulk_import.py:403 +#: netbox/dcim/forms/bulk_import.py:405 msgid "The default platform for devices of this type (optional)" msgstr "Domyślna platforma dla urządzeń tego typu (opcjonalnie)" -#: netbox/dcim/forms/bulk_import.py:408 +#: netbox/dcim/forms/bulk_import.py:410 msgid "Device weight" msgstr "Waga urządzenia" -#: netbox/dcim/forms/bulk_import.py:414 +#: netbox/dcim/forms/bulk_import.py:416 msgid "Unit for device weight" msgstr "Jednostka do wagi urządzenia" -#: netbox/dcim/forms/bulk_import.py:440 +#: netbox/dcim/forms/bulk_import.py:442 msgid "Module weight" msgstr "Waga modułu" -#: netbox/dcim/forms/bulk_import.py:446 +#: netbox/dcim/forms/bulk_import.py:448 msgid "Unit for module weight" msgstr "Jednostka do ciężaru modułu" -#: netbox/dcim/forms/bulk_import.py:476 +#: netbox/dcim/forms/bulk_import.py:481 msgid "Limit platform assignments to this manufacturer" msgstr "Ogranicz przypisania platformy do tego producenta" -#: netbox/dcim/forms/bulk_import.py:498 netbox/dcim/forms/bulk_import.py:1447 +#: netbox/dcim/forms/bulk_import.py:503 netbox/dcim/forms/bulk_import.py:1544 #: netbox/tenancy/forms/bulk_import.py:106 msgid "Assigned role" msgstr "Przypisana rola" -#: netbox/dcim/forms/bulk_import.py:511 +#: netbox/dcim/forms/bulk_import.py:516 msgid "Device type manufacturer" msgstr "Producent typu urządzenia" -#: netbox/dcim/forms/bulk_import.py:517 +#: netbox/dcim/forms/bulk_import.py:522 msgid "Device type model" msgstr "Model typu urządzenia" -#: netbox/dcim/forms/bulk_import.py:524 -#: netbox/virtualization/forms/bulk_import.py:126 +#: netbox/dcim/forms/bulk_import.py:529 +#: netbox/virtualization/forms/bulk_import.py:132 msgid "Assigned platform" msgstr "Przydzielona platforma" -#: netbox/dcim/forms/bulk_import.py:532 netbox/dcim/forms/bulk_import.py:536 -#: netbox/dcim/forms/model_forms.py:536 +#: netbox/dcim/forms/bulk_import.py:537 netbox/dcim/forms/bulk_import.py:541 +#: netbox/dcim/forms/model_forms.py:547 msgid "Virtual chassis" msgstr "Wirtualne podwozie" -#: netbox/dcim/forms/bulk_import.py:543 +#: netbox/dcim/forms/bulk_import.py:548 msgid "Virtualization cluster" msgstr "Klaster wirtualizacji" -#: netbox/dcim/forms/bulk_import.py:572 +#: netbox/dcim/forms/bulk_import.py:577 msgid "Assigned location (if any)" msgstr "Przypisana lokalizacja (jeśli istnieje)" -#: netbox/dcim/forms/bulk_import.py:579 +#: netbox/dcim/forms/bulk_import.py:584 msgid "Assigned rack (if any)" msgstr "Przypisana szafa (jeśli określona)" -#: netbox/dcim/forms/bulk_import.py:582 +#: netbox/dcim/forms/bulk_import.py:587 msgid "Face" msgstr "Twarz" -#: netbox/dcim/forms/bulk_import.py:585 +#: netbox/dcim/forms/bulk_import.py:590 msgid "Mounted rack face" msgstr "Powierzchnia montażu w szafie" -#: netbox/dcim/forms/bulk_import.py:592 +#: netbox/dcim/forms/bulk_import.py:597 msgid "Parent device (for child devices)" msgstr "Urządzenie nadrzędne (dla urządzeń podrzędnych)" -#: netbox/dcim/forms/bulk_import.py:595 +#: netbox/dcim/forms/bulk_import.py:600 msgid "Device bay" msgstr "Osłona urządzenia" -#: netbox/dcim/forms/bulk_import.py:599 +#: netbox/dcim/forms/bulk_import.py:604 msgid "Device bay in which this device is installed (for child devices)" msgstr "" "Osłona urządzenia, w której to urządzenie jest zainstalowane (dla urządzeń " "podrzędnych)" -#: netbox/dcim/forms/bulk_import.py:666 +#: netbox/dcim/forms/bulk_import.py:671 msgid "The device in which this module is installed" msgstr "Urządzenie, w którym zainstalowany jest ten moduł" -#: netbox/dcim/forms/bulk_import.py:669 netbox/dcim/forms/model_forms.py:640 +#: netbox/dcim/forms/bulk_import.py:674 netbox/dcim/forms/model_forms.py:651 msgid "Module bay" msgstr "Wnęka modułu" -#: netbox/dcim/forms/bulk_import.py:672 +#: netbox/dcim/forms/bulk_import.py:677 msgid "The module bay in which this module is installed" msgstr "Wnęka modułu, w której ten moduł jest zainstalowany" -#: netbox/dcim/forms/bulk_import.py:678 +#: netbox/dcim/forms/bulk_import.py:683 msgid "The type of module" msgstr "Rodzaj modułu" -#: netbox/dcim/forms/bulk_import.py:686 netbox/dcim/forms/model_forms.py:656 +#: netbox/dcim/forms/bulk_import.py:691 netbox/dcim/forms/model_forms.py:667 msgid "Replicate components" msgstr "Replikacja komponentów" -#: netbox/dcim/forms/bulk_import.py:688 +#: netbox/dcim/forms/bulk_import.py:693 msgid "" "Automatically populate components associated with this module type (enabled " "by default)" @@ -4367,271 +4762,309 @@ msgstr "" "Automatyczne wypełnianie komponentów powiązanych z tym typem modułu " "(domyślnie włączone)" -#: netbox/dcim/forms/bulk_import.py:691 netbox/dcim/forms/model_forms.py:662 +#: netbox/dcim/forms/bulk_import.py:696 netbox/dcim/forms/model_forms.py:673 msgid "Adopt components" msgstr "Zastosuj komponenty" -#: netbox/dcim/forms/bulk_import.py:693 netbox/dcim/forms/model_forms.py:665 +#: netbox/dcim/forms/bulk_import.py:698 netbox/dcim/forms/model_forms.py:676 msgid "Adopt already existing components" msgstr "Zastosuj już istniejące komponenty" -#: netbox/dcim/forms/bulk_import.py:733 netbox/dcim/forms/bulk_import.py:759 -#: netbox/dcim/forms/bulk_import.py:785 +#: netbox/dcim/forms/bulk_import.py:738 netbox/dcim/forms/bulk_import.py:764 +#: netbox/dcim/forms/bulk_import.py:790 msgid "Port type" msgstr "Typ portu" -#: netbox/dcim/forms/bulk_import.py:741 netbox/dcim/forms/bulk_import.py:767 +#: netbox/dcim/forms/bulk_import.py:746 netbox/dcim/forms/bulk_import.py:772 msgid "Port speed in bps" msgstr "Prędkość portu w bps" -#: netbox/dcim/forms/bulk_import.py:805 +#: netbox/dcim/forms/bulk_import.py:810 msgid "Outlet type" msgstr "Rodzaj wylotu" -#: netbox/dcim/forms/bulk_import.py:812 +#: netbox/dcim/forms/bulk_import.py:817 msgid "Local power port which feeds this outlet" msgstr "Lokalny port zasilania zasilający to gniazdko" -#: netbox/dcim/forms/bulk_import.py:818 +#: netbox/dcim/forms/bulk_import.py:823 msgid "Electrical phase (for three-phase circuits)" msgstr "Faza elektryczna (dla obwodów trójfazowych)" -#: netbox/dcim/forms/bulk_import.py:859 netbox/dcim/forms/model_forms.py:1323 -#: netbox/virtualization/forms/bulk_import.py:155 -#: netbox/virtualization/forms/model_forms.py:305 +#: netbox/dcim/forms/bulk_import.py:867 netbox/dcim/forms/model_forms.py:1339 +#: netbox/virtualization/forms/bulk_import.py:161 +#: netbox/virtualization/forms/model_forms.py:319 msgid "Parent interface" msgstr "Interfejs nadrzędny" -#: netbox/dcim/forms/bulk_import.py:866 netbox/dcim/forms/model_forms.py:1331 -#: netbox/virtualization/forms/bulk_import.py:162 -#: netbox/virtualization/forms/model_forms.py:313 +#: netbox/dcim/forms/bulk_import.py:874 netbox/dcim/forms/model_forms.py:1347 +#: netbox/virtualization/forms/bulk_import.py:168 +#: netbox/virtualization/forms/model_forms.py:327 msgid "Bridged interface" msgstr "Interfejs mostkowy" -#: netbox/dcim/forms/bulk_import.py:869 +#: netbox/dcim/forms/bulk_import.py:877 msgid "Lag" msgstr "Opóźnienie" -#: netbox/dcim/forms/bulk_import.py:873 +#: netbox/dcim/forms/bulk_import.py:881 msgid "Parent LAG interface" msgstr "Nadrzędny interfejs LAG" -#: netbox/dcim/forms/bulk_import.py:876 +#: netbox/dcim/forms/bulk_import.py:884 msgid "Vdcs" msgstr "Vdc" -#: netbox/dcim/forms/bulk_import.py:881 +#: netbox/dcim/forms/bulk_import.py:889 msgid "VDC names separated by commas, encased with double quotes. Example:" msgstr "" "Nazwy VDC oddzielone przecinkami, otoczone podwójnymi cudzysłowami. " "Przykład:" -#: netbox/dcim/forms/bulk_import.py:887 +#: netbox/dcim/forms/bulk_import.py:895 msgid "Physical medium" msgstr "Medium fizyczne" -#: netbox/dcim/forms/bulk_import.py:890 netbox/dcim/forms/filtersets.py:1365 +#: netbox/dcim/forms/bulk_import.py:898 netbox/dcim/forms/filtersets.py:1370 msgid "Duplex" msgstr "Dwupoziomowy" -#: netbox/dcim/forms/bulk_import.py:895 +#: netbox/dcim/forms/bulk_import.py:903 msgid "Poe mode" msgstr "Tryb PoE" -#: netbox/dcim/forms/bulk_import.py:901 +#: netbox/dcim/forms/bulk_import.py:909 msgid "Poe type" msgstr "Typ PoE" -#: netbox/dcim/forms/bulk_import.py:910 -#: netbox/virtualization/forms/bulk_import.py:168 +#: netbox/dcim/forms/bulk_import.py:918 +#: netbox/virtualization/forms/bulk_import.py:174 msgid "IEEE 802.1Q operational mode (for L2 interfaces)" msgstr "Tryb pracy IEEE 802.1Q (dla interfejsów L2)" -#: netbox/dcim/forms/bulk_import.py:917 netbox/ipam/forms/bulk_import.py:161 -#: netbox/ipam/forms/bulk_import.py:247 netbox/ipam/forms/bulk_import.py:283 -#: netbox/ipam/forms/filtersets.py:201 netbox/ipam/forms/filtersets.py:277 -#: netbox/ipam/forms/filtersets.py:336 -#: netbox/virtualization/forms/bulk_import.py:175 +#: netbox/dcim/forms/bulk_import.py:925 netbox/ipam/forms/bulk_import.py:164 +#: netbox/ipam/forms/bulk_import.py:246 netbox/ipam/forms/bulk_import.py:282 +#: netbox/ipam/forms/filtersets.py:203 netbox/ipam/forms/filtersets.py:280 +#: netbox/ipam/forms/filtersets.py:339 +#: netbox/virtualization/forms/bulk_import.py:181 msgid "Assigned VRF" msgstr "Przypisany VRF" -#: netbox/dcim/forms/bulk_import.py:920 +#: netbox/dcim/forms/bulk_import.py:928 msgid "Rf role" msgstr "Rola Rf" -#: netbox/dcim/forms/bulk_import.py:923 +#: netbox/dcim/forms/bulk_import.py:931 msgid "Wireless role (AP/station)" msgstr "Rola bezprzewodowa (AP/stacja)" -#: netbox/dcim/forms/bulk_import.py:959 +#: netbox/dcim/forms/bulk_import.py:967 #, python-brace-format msgid "VDC {vdc} is not assigned to device {device}" msgstr "VDC {vdc} nie jest przypisany do urządzenia {device}" -#: netbox/dcim/forms/bulk_import.py:973 netbox/dcim/forms/model_forms.py:1007 -#: netbox/dcim/forms/model_forms.py:1582 +#: netbox/dcim/forms/bulk_import.py:981 netbox/dcim/forms/model_forms.py:1020 +#: netbox/dcim/forms/model_forms.py:1624 #: netbox/dcim/forms/object_import.py:117 msgid "Rear port" msgstr "Tylny port" -#: netbox/dcim/forms/bulk_import.py:976 +#: netbox/dcim/forms/bulk_import.py:984 msgid "Corresponding rear port" msgstr "Odpowiedni tylny port" -#: netbox/dcim/forms/bulk_import.py:981 netbox/dcim/forms/bulk_import.py:1022 -#: netbox/dcim/forms/bulk_import.py:1238 +#: netbox/dcim/forms/bulk_import.py:989 netbox/dcim/forms/bulk_import.py:1030 +#: netbox/dcim/forms/bulk_import.py:1335 msgid "Physical medium classification" msgstr "Klasyfikacja medium fizycznego" -#: netbox/dcim/forms/bulk_import.py:1050 netbox/dcim/tables/devices.py:822 +#: netbox/dcim/forms/bulk_import.py:1058 netbox/dcim/tables/devices.py:854 msgid "Installed device" msgstr "Zainstalowane urządzenie" -#: netbox/dcim/forms/bulk_import.py:1054 +#: netbox/dcim/forms/bulk_import.py:1062 msgid "Child device installed within this bay" msgstr "Urządzenie dziecięce zainstalowane w tej wnęce" -#: netbox/dcim/forms/bulk_import.py:1056 +#: netbox/dcim/forms/bulk_import.py:1064 msgid "Child device not found." msgstr "Nie znaleziono urządzenia dziecięcego." -#: netbox/dcim/forms/bulk_import.py:1114 +#: netbox/dcim/forms/bulk_import.py:1122 msgid "Parent inventory item" msgstr "Nadrzędny element zapasów" -#: netbox/dcim/forms/bulk_import.py:1117 +#: netbox/dcim/forms/bulk_import.py:1125 msgid "Component type" msgstr "Typ komponentu" -#: netbox/dcim/forms/bulk_import.py:1121 +#: netbox/dcim/forms/bulk_import.py:1129 msgid "Component Type" msgstr "Typ komponentu" -#: netbox/dcim/forms/bulk_import.py:1124 +#: netbox/dcim/forms/bulk_import.py:1132 msgid "Compnent name" msgstr "Nazwa firmy" -#: netbox/dcim/forms/bulk_import.py:1126 +#: netbox/dcim/forms/bulk_import.py:1134 msgid "Component Name" msgstr "Nazwa komponentu" -#: netbox/dcim/forms/bulk_import.py:1168 +#: netbox/dcim/forms/bulk_import.py:1181 #, python-brace-format msgid "Component not found: {device} - {component_name}" msgstr "Nie znaleziono komponentu: {device} - {component_name}" -#: netbox/dcim/forms/bulk_import.py:1193 +#: netbox/dcim/forms/bulk_import.py:1209 netbox/ipam/forms/bulk_import.py:307 +msgid "Parent device of assigned interface (if any)" +msgstr "Urządzenie nadrzędne przypisanego interfejsu (jeśli istnieje)" + +#: netbox/dcim/forms/bulk_import.py:1212 netbox/ipam/forms/bulk_import.py:310 +#: netbox/ipam/forms/bulk_import.py:547 netbox/ipam/forms/model_forms.py:768 +#: netbox/virtualization/filtersets.py:254 +#: netbox/virtualization/filtersets.py:305 +#: netbox/virtualization/forms/bulk_edit.py:182 +#: netbox/virtualization/forms/bulk_edit.py:316 +#: netbox/virtualization/forms/bulk_import.py:152 +#: netbox/virtualization/forms/bulk_import.py:213 +#: netbox/virtualization/forms/filtersets.py:217 +#: netbox/virtualization/forms/filtersets.py:253 +#: netbox/virtualization/forms/model_forms.py:295 +#: netbox/vpn/forms/bulk_import.py:93 netbox/vpn/forms/bulk_import.py:290 +msgid "Virtual machine" +msgstr "Maszyna wirtualna" + +#: netbox/dcim/forms/bulk_import.py:1216 netbox/ipam/forms/bulk_import.py:314 +msgid "Parent VM of assigned interface (if any)" +msgstr "Nadrzędna maszyna wirtualna przypisanego interfejsu (jeśli istnieje)" + +#: netbox/dcim/forms/bulk_import.py:1223 netbox/ipam/filtersets.py:1021 +#: netbox/ipam/forms/bulk_import.py:321 +msgid "Assigned interface" +msgstr "Przypisany interfejs" + +#: netbox/dcim/forms/bulk_import.py:1226 netbox/ipam/forms/bulk_import.py:324 +msgid "Is primary" +msgstr "Jest podstawowy" + +#: netbox/dcim/forms/bulk_import.py:1227 +msgid "Make this the primary MAC address for the assigned interface" +msgstr "Ustaw to główny adres MAC dla przypisanego interfejsu" + +#: netbox/dcim/forms/bulk_import.py:1264 +msgid "Must specify the parent device or VM when assigning an interface" +msgstr "" +"Należy określić urządzenie nadrzędne lub maszynę wirtualną podczas " +"przypisywania interfejsu" + +#: netbox/dcim/forms/bulk_import.py:1290 msgid "Side A device" msgstr "Urządzenie boczne A" -#: netbox/dcim/forms/bulk_import.py:1196 netbox/dcim/forms/bulk_import.py:1214 +#: netbox/dcim/forms/bulk_import.py:1293 netbox/dcim/forms/bulk_import.py:1311 msgid "Device name" msgstr "Nazwa urządzenia" -#: netbox/dcim/forms/bulk_import.py:1199 +#: netbox/dcim/forms/bulk_import.py:1296 msgid "Side A type" msgstr "Typ strony A" -#: netbox/dcim/forms/bulk_import.py:1202 netbox/dcim/forms/bulk_import.py:1220 -msgid "Termination type" -msgstr "Typ zakończenia" - -#: netbox/dcim/forms/bulk_import.py:1205 +#: netbox/dcim/forms/bulk_import.py:1302 msgid "Side A name" msgstr "Nazwa strony A" -#: netbox/dcim/forms/bulk_import.py:1206 netbox/dcim/forms/bulk_import.py:1224 +#: netbox/dcim/forms/bulk_import.py:1303 netbox/dcim/forms/bulk_import.py:1321 msgid "Termination name" msgstr "Nazwa zakończenia" -#: netbox/dcim/forms/bulk_import.py:1211 +#: netbox/dcim/forms/bulk_import.py:1308 msgid "Side B device" msgstr "Urządzenie boczne B" -#: netbox/dcim/forms/bulk_import.py:1217 +#: netbox/dcim/forms/bulk_import.py:1314 msgid "Side B type" msgstr "Strona typu B" -#: netbox/dcim/forms/bulk_import.py:1223 +#: netbox/dcim/forms/bulk_import.py:1320 msgid "Side B name" msgstr "Nazwa strony B" -#: netbox/dcim/forms/bulk_import.py:1232 -#: netbox/wireless/forms/bulk_import.py:86 +#: netbox/dcim/forms/bulk_import.py:1329 +#: netbox/wireless/forms/bulk_import.py:91 msgid "Connection status" msgstr "Status połączenia" -#: netbox/dcim/forms/bulk_import.py:1284 +#: netbox/dcim/forms/bulk_import.py:1381 #, python-brace-format msgid "Side {side_upper}: {device} {termination_object} is already connected" msgstr "Bok {side_upper}: {device} {termination_object} jest już połączony" -#: netbox/dcim/forms/bulk_import.py:1290 +#: netbox/dcim/forms/bulk_import.py:1387 #, python-brace-format msgid "{side_upper} side termination not found: {device} {name}" msgstr "{side_upper} Nie znaleziono zakończenia bocznego: {device} {name}" -#: netbox/dcim/forms/bulk_import.py:1315 netbox/dcim/forms/model_forms.py:785 -#: netbox/dcim/tables/devices.py:1027 netbox/templates/dcim/device.html:132 +#: netbox/dcim/forms/bulk_import.py:1412 netbox/dcim/forms/model_forms.py:797 +#: netbox/dcim/tables/devices.py:1059 netbox/templates/dcim/device.html:132 #: netbox/templates/dcim/virtualchassis.html:27 #: netbox/templates/dcim/virtualchassis.html:67 msgid "Master" msgstr "Mistrzu" -#: netbox/dcim/forms/bulk_import.py:1319 +#: netbox/dcim/forms/bulk_import.py:1416 msgid "Master device" msgstr "Urządzenie główne" -#: netbox/dcim/forms/bulk_import.py:1336 +#: netbox/dcim/forms/bulk_import.py:1433 msgid "Name of parent site" msgstr "Nazwa witryny nadrzędnej" -#: netbox/dcim/forms/bulk_import.py:1370 +#: netbox/dcim/forms/bulk_import.py:1467 msgid "Upstream power panel" msgstr "Panel zasilania przed strumieniem" -#: netbox/dcim/forms/bulk_import.py:1400 +#: netbox/dcim/forms/bulk_import.py:1497 msgid "Primary or redundant" msgstr "Podstawowy lub nadmiarowy" -#: netbox/dcim/forms/bulk_import.py:1405 +#: netbox/dcim/forms/bulk_import.py:1502 msgid "Supply type (AC/DC)" msgstr "Rodzaj zasilania (AC/DC)" -#: netbox/dcim/forms/bulk_import.py:1410 +#: netbox/dcim/forms/bulk_import.py:1507 msgid "Single or three-phase" msgstr "Pojedynczy lub trójfazowy" -#: netbox/dcim/forms/bulk_import.py:1461 netbox/dcim/forms/model_forms.py:1677 +#: netbox/dcim/forms/bulk_import.py:1558 netbox/dcim/forms/model_forms.py:1722 #: netbox/templates/dcim/device.html:190 #: netbox/templates/dcim/virtualdevicecontext.html:30 #: netbox/templates/virtualization/virtualmachine.html:52 msgid "Primary IPv4" msgstr "Podstawowy IPv4" -#: netbox/dcim/forms/bulk_import.py:1465 +#: netbox/dcim/forms/bulk_import.py:1562 msgid "IPv4 address with mask, e.g. 1.2.3.4/24" msgstr "Adres IPv4 z maską, np. 1.2.3.4/24" -#: netbox/dcim/forms/bulk_import.py:1468 netbox/dcim/forms/model_forms.py:1686 +#: netbox/dcim/forms/bulk_import.py:1565 netbox/dcim/forms/model_forms.py:1731 #: netbox/templates/dcim/device.html:206 #: netbox/templates/dcim/virtualdevicecontext.html:41 #: netbox/templates/virtualization/virtualmachine.html:68 msgid "Primary IPv6" msgstr "Podstawowy IPv6" -#: netbox/dcim/forms/bulk_import.py:1472 +#: netbox/dcim/forms/bulk_import.py:1569 msgid "IPv6 address with prefix length, e.g. 2001:db8::1/64" msgstr "Adres IPv6 z prefiksem, np. 2001:db8::1/64" -#: netbox/dcim/forms/common.py:24 netbox/dcim/models/device_components.py:527 +#: netbox/dcim/forms/common.py:19 netbox/dcim/models/device_components.py:515 #: netbox/templates/dcim/interface.html:57 -#: netbox/templates/virtualization/vminterface.html:55 -#: netbox/virtualization/forms/bulk_edit.py:225 +#: netbox/templates/virtualization/vminterface.html:51 +#: netbox/virtualization/forms/bulk_edit.py:207 msgid "MTU" msgstr "MTU" -#: netbox/dcim/forms/common.py:65 +#: netbox/dcim/forms/common.py:60 #, python-brace-format msgid "" "The tagged VLANs ({vlans}) must belong to the same site as the interface's " @@ -4640,7 +5073,7 @@ msgstr "" "Oznaczone sieci VLAN ({vlans}) muszą należeć do tej samej witryny co " "urządzenie nadrzędne/maszyna wirtualna interfejsu lub muszą być globalne" -#: netbox/dcim/forms/common.py:126 +#: netbox/dcim/forms/common.py:121 msgid "" "Cannot install module with placeholder values in a module bay with no " "position defined." @@ -4648,7 +5081,7 @@ msgstr "" "Nie można zainstalować modułu z wartościami zastępczymi w kieszeni modułu " "bez zdefiniowanej pozycji." -#: netbox/dcim/forms/common.py:131 +#: netbox/dcim/forms/common.py:127 #, python-brace-format msgid "" "Cannot install module with placeholder values in a module bay tree {level} " @@ -4657,17 +5090,17 @@ msgstr "" "Nie można zainstalować modułu z wartościami zastępczymi w drzewie laurowym " "modułu {level} na drzewie, ale {tokens} podane symbole zastępcze." -#: netbox/dcim/forms/common.py:144 +#: netbox/dcim/forms/common.py:142 #, python-brace-format msgid "Cannot adopt {model} {name} as it already belongs to a module" msgstr "Nie można adoptować {model} {name} ponieważ już należy do modułu" -#: netbox/dcim/forms/common.py:153 +#: netbox/dcim/forms/common.py:151 #, python-brace-format msgid "A {model} named {name} already exists" msgstr "A {model} o nazwie {name} już istnieje" -#: netbox/dcim/forms/connections.py:49 netbox/dcim/forms/model_forms.py:738 +#: netbox/dcim/forms/connections.py:49 netbox/dcim/forms/model_forms.py:749 #: netbox/dcim/tables/power.py:66 #: netbox/templates/dcim/inc/cable_termination.html:37 #: netbox/templates/dcim/powerfeed.html:24 @@ -4676,137 +5109,135 @@ msgstr "A {model} o nazwie {name} już istnieje" msgid "Power Panel" msgstr "Panel zasilania" -#: netbox/dcim/forms/connections.py:58 netbox/dcim/forms/model_forms.py:765 +#: netbox/dcim/forms/connections.py:58 netbox/dcim/forms/model_forms.py:777 #: netbox/templates/dcim/powerfeed.html:21 #: netbox/templates/dcim/powerport.html:80 msgid "Power Feed" msgstr "Zasilanie zasilania" -#: netbox/dcim/forms/connections.py:81 -msgid "Side" -msgstr "Bok" - -#: netbox/dcim/forms/filtersets.py:136 netbox/dcim/tables/devices.py:295 +#: netbox/dcim/forms/filtersets.py:137 netbox/dcim/tables/devices.py:305 msgid "Device Status" msgstr "Status urządzenia" -#: netbox/dcim/forms/filtersets.py:149 +#: netbox/dcim/forms/filtersets.py:150 msgid "Parent region" msgstr "Region macierzysty" -#: netbox/dcim/forms/filtersets.py:163 netbox/tenancy/forms/bulk_import.py:28 +#: netbox/dcim/forms/filtersets.py:164 netbox/tenancy/forms/bulk_import.py:28 #: netbox/tenancy/forms/bulk_import.py:62 #: netbox/tenancy/forms/filtersets.py:33 netbox/tenancy/forms/filtersets.py:62 -#: netbox/wireless/forms/bulk_import.py:25 -#: netbox/wireless/forms/filtersets.py:25 +#: netbox/wireless/forms/bulk_import.py:27 +#: netbox/wireless/forms/filtersets.py:27 msgid "Parent group" msgstr "Grupa nadrzędna" -#: netbox/dcim/forms/filtersets.py:242 netbox/templates/dcim/location.html:58 +#: netbox/dcim/forms/filtersets.py:243 netbox/templates/dcim/location.html:58 #: netbox/templates/dcim/site.html:56 msgid "Facility" msgstr "Obiekty" -#: netbox/dcim/forms/filtersets.py:397 +#: netbox/dcim/forms/filtersets.py:398 msgid "Function" msgstr "Funkcja" -#: netbox/dcim/forms/filtersets.py:483 netbox/dcim/forms/model_forms.py:373 +#: netbox/dcim/forms/filtersets.py:484 netbox/dcim/forms/model_forms.py:382 #: netbox/templates/inc/panels/image_attachments.html:6 msgid "Images" msgstr "Obrazy" -#: netbox/dcim/forms/filtersets.py:486 netbox/dcim/forms/filtersets.py:611 -#: netbox/dcim/forms/filtersets.py:726 +#: netbox/dcim/forms/filtersets.py:487 netbox/dcim/forms/filtersets.py:612 +#: netbox/dcim/forms/filtersets.py:727 msgid "Components" msgstr "Komponenty" -#: netbox/dcim/forms/filtersets.py:506 +#: netbox/dcim/forms/filtersets.py:507 msgid "Subdevice role" msgstr "Rola urządzenia podrzędnego" -#: netbox/dcim/forms/filtersets.py:790 netbox/dcim/tables/racks.py:54 +#: netbox/dcim/forms/filtersets.py:791 netbox/dcim/tables/racks.py:54 #: netbox/templates/dcim/racktype.html:20 msgid "Model" msgstr "Model" -#: netbox/dcim/forms/filtersets.py:834 +#: netbox/dcim/forms/filtersets.py:835 msgid "Has an OOB IP" msgstr "Posiada adres IP OOB" -#: netbox/dcim/forms/filtersets.py:841 +#: netbox/dcim/forms/filtersets.py:842 msgid "Virtual chassis member" msgstr "Wirtualny element podwozia" -#: netbox/dcim/forms/filtersets.py:890 +#: netbox/dcim/forms/filtersets.py:891 msgid "Has virtual device contexts" msgstr "Posiada konteksty urządzeń wirtualnych" -#: netbox/dcim/forms/filtersets.py:903 netbox/extras/filtersets.py:585 -#: netbox/ipam/forms/filtersets.py:452 -#: netbox/virtualization/forms/filtersets.py:112 +#: netbox/dcim/forms/filtersets.py:904 netbox/extras/filtersets.py:585 +#: netbox/ipam/forms/filtersets.py:455 +#: netbox/virtualization/forms/filtersets.py:117 msgid "Cluster group" msgstr "Grupa klastra" -#: netbox/dcim/forms/filtersets.py:1210 +#: netbox/dcim/forms/filtersets.py:1211 msgid "Cabled" msgstr "Okablowany" -#: netbox/dcim/forms/filtersets.py:1217 +#: netbox/dcim/forms/filtersets.py:1218 msgid "Occupied" msgstr "Zajęty" -#: netbox/dcim/forms/filtersets.py:1244 netbox/dcim/forms/filtersets.py:1269 -#: netbox/dcim/forms/filtersets.py:1293 netbox/dcim/forms/filtersets.py:1313 -#: netbox/dcim/forms/filtersets.py:1336 netbox/dcim/tables/devices.py:364 +#: netbox/dcim/forms/filtersets.py:1245 netbox/dcim/forms/filtersets.py:1270 +#: netbox/dcim/forms/filtersets.py:1294 netbox/dcim/forms/filtersets.py:1314 +#: netbox/dcim/forms/filtersets.py:1341 netbox/dcim/tables/devices.py:374 +#: netbox/dcim/tables/devices.py:663 +#: netbox/templates/circuits/inc/circuit_termination_fields.html:16 #: netbox/templates/dcim/consoleport.html:55 #: netbox/templates/dcim/consoleserverport.html:55 #: netbox/templates/dcim/frontport.html:69 -#: netbox/templates/dcim/interface.html:140 +#: netbox/templates/dcim/interface.html:197 #: netbox/templates/dcim/powerfeed.html:110 -#: netbox/templates/dcim/poweroutlet.html:59 +#: netbox/templates/dcim/poweroutlet.html:69 #: netbox/templates/dcim/powerport.html:59 #: netbox/templates/dcim/rearport.html:65 msgid "Connection" msgstr "Połączenie" -#: netbox/dcim/forms/filtersets.py:1348 netbox/extras/forms/bulk_edit.py:326 +#: netbox/dcim/forms/filtersets.py:1353 netbox/extras/forms/bulk_edit.py:326 #: netbox/extras/forms/bulk_import.py:247 -#: netbox/extras/forms/filtersets.py:464 -#: netbox/extras/forms/model_forms.py:675 netbox/extras/tables/tables.py:579 +#: netbox/extras/forms/filtersets.py:472 +#: netbox/extras/forms/model_forms.py:689 netbox/extras/tables/tables.py:579 #: netbox/templates/extras/journalentry.html:30 msgid "Kind" msgstr "Uprzejmy" -#: netbox/dcim/forms/filtersets.py:1377 +#: netbox/dcim/forms/filtersets.py:1382 msgid "Mgmt only" msgstr "Tylko MGMT" -#: netbox/dcim/forms/filtersets.py:1389 netbox/dcim/forms/model_forms.py:1390 -#: netbox/dcim/models/device_components.py:629 -#: netbox/templates/dcim/interface.html:129 +#: netbox/dcim/forms/filtersets.py:1394 netbox/dcim/forms/model_forms.py:1423 +#: netbox/dcim/models/device_components.py:677 +#: netbox/templates/dcim/interface.html:142 msgid "WWN" msgstr "WWN" -#: netbox/dcim/forms/filtersets.py:1409 +#: netbox/dcim/forms/filtersets.py:1414 msgid "Wireless channel" msgstr "Kanał bezprzewodowy" -#: netbox/dcim/forms/filtersets.py:1413 +#: netbox/dcim/forms/filtersets.py:1418 msgid "Channel frequency (MHz)" msgstr "Częstotliwość kanału (MHz)" -#: netbox/dcim/forms/filtersets.py:1417 +#: netbox/dcim/forms/filtersets.py:1422 msgid "Channel width (MHz)" msgstr "Szerokość kanału (MHz)" -#: netbox/dcim/forms/filtersets.py:1421 -#: netbox/templates/dcim/interface.html:85 +#: netbox/dcim/forms/filtersets.py:1426 +#: netbox/templates/dcim/interface.html:91 msgid "Transmit power (dBm)" msgstr "Moc transmisji (dBm)" -#: netbox/dcim/forms/filtersets.py:1446 netbox/dcim/forms/filtersets.py:1471 -#: netbox/dcim/tables/devices.py:327 netbox/templates/dcim/cable.html:12 +#: netbox/dcim/forms/filtersets.py:1451 netbox/dcim/forms/filtersets.py:1476 +#: netbox/dcim/tables/devices.py:337 netbox/templates/dcim/cable.html:12 #: netbox/templates/dcim/cable_trace.html:46 #: netbox/templates/dcim/frontport.html:77 #: netbox/templates/dcim/htmx/cable_edit.html:50 @@ -4816,39 +5247,76 @@ msgstr "Moc transmisji (dBm)" msgid "Cable" msgstr "Kabel" -#: netbox/dcim/forms/filtersets.py:1550 netbox/dcim/tables/devices.py:949 +#: netbox/dcim/forms/filtersets.py:1555 netbox/dcim/tables/devices.py:979 msgid "Discovered" msgstr "Odkryte" +#: netbox/dcim/forms/filtersets.py:1596 netbox/ipam/forms/filtersets.py:350 +msgid "Assigned Device" +msgstr "Przypisane urządzenie" + +#: netbox/dcim/forms/filtersets.py:1601 netbox/ipam/forms/filtersets.py:355 +msgid "Assigned VM" +msgstr "Przypisana maszyna maszynowa" + #: netbox/dcim/forms/formsets.py:20 #, python-brace-format msgid "A virtual chassis member already exists in position {vc_position}." msgstr "Wirtualny element podwozia istnieje już na pozycji {vc_position}." -#: netbox/dcim/forms/model_forms.py:140 +#: netbox/dcim/forms/mixins.py:27 netbox/dcim/forms/mixins.py:75 +#: netbox/ipam/forms/bulk_edit.py:420 netbox/ipam/forms/model_forms.py:618 +msgid "Scope type" +msgstr "Rodzaj zakresu" + +#: netbox/dcim/forms/mixins.py:30 netbox/dcim/forms/mixins.py:78 +#: netbox/ipam/forms/bulk_edit.py:270 netbox/ipam/forms/bulk_edit.py:423 +#: netbox/ipam/forms/bulk_edit.py:437 netbox/ipam/forms/filtersets.py:175 +#: netbox/ipam/forms/model_forms.py:231 netbox/ipam/forms/model_forms.py:621 +#: netbox/ipam/forms/model_forms.py:631 netbox/ipam/tables/ip.py:194 +#: netbox/ipam/tables/vlans.py:40 netbox/templates/ipam/prefix.html:48 +#: netbox/templates/ipam/vlangroup.html:38 +#: netbox/templates/virtualization/cluster.html:42 +#: netbox/templates/wireless/wirelesslan.html:26 +#: netbox/virtualization/forms/bulk_edit.py:91 +#: netbox/virtualization/forms/filtersets.py:46 +#: netbox/virtualization/forms/model_forms.py:79 +#: netbox/virtualization/tables/clusters.py:80 +#: netbox/wireless/forms/bulk_edit.py:93 +#: netbox/wireless/forms/filtersets.py:37 +#: netbox/wireless/forms/model_forms.py:56 +#: netbox/wireless/tables/wirelesslan.py:58 +msgid "Scope" +msgstr "Zakres" + +#: netbox/dcim/forms/mixins.py:104 netbox/ipam/forms/bulk_import.py:436 +msgid "Scope type (app & model)" +msgstr "Typ zakresu (aplikacja i model)" + +#: netbox/dcim/forms/model_forms.py:144 msgid "Contact Info" msgstr "Dane kontaktowe" -#: netbox/dcim/forms/model_forms.py:195 netbox/templates/dcim/rackrole.html:19 +#: netbox/dcim/forms/model_forms.py:199 netbox/templates/dcim/rackrole.html:19 msgid "Rack Role" msgstr "Rola szafy" -#: netbox/dcim/forms/model_forms.py:212 netbox/dcim/forms/model_forms.py:362 -#: netbox/dcim/forms/model_forms.py:446 +#: netbox/dcim/forms/model_forms.py:217 netbox/dcim/forms/model_forms.py:371 +#: netbox/dcim/forms/model_forms.py:456 #: netbox/utilities/forms/fields/fields.py:47 msgid "Slug" msgstr "Identyfikator" -#: netbox/dcim/forms/model_forms.py:259 +#: netbox/dcim/forms/model_forms.py:264 msgid "Select a pre-defined rack type, or set physical characteristics below." msgstr "" "Wybierz predefiniowany typ szafy lub ustaw parametry fizyczne poniżej." -#: netbox/dcim/forms/model_forms.py:265 +#: netbox/dcim/forms/model_forms.py:273 msgid "Inventory Control" msgstr "Kontrola zapasów" -#: netbox/dcim/forms/model_forms.py:313 +#: netbox/dcim/forms/model_forms.py:321 msgid "" "Comma-separated list of numeric unit IDs. A range may be specified using a " "hyphen." @@ -4856,37 +5324,37 @@ msgstr "" "Lista numerycznych identyfikatorów jednostek oddzielonych przecinkami. " "Zakres można określić za pomocą myślnika." -#: netbox/dcim/forms/model_forms.py:322 netbox/dcim/tables/racks.py:202 +#: netbox/dcim/forms/model_forms.py:330 netbox/dcim/tables/racks.py:201 msgid "Reservation" msgstr "Rezerwacje" -#: netbox/dcim/forms/model_forms.py:423 +#: netbox/dcim/forms/model_forms.py:432 #: netbox/templates/dcim/devicerole.html:23 msgid "Device Role" msgstr "Rola urządzenia" -#: netbox/dcim/forms/model_forms.py:490 netbox/dcim/models/devices.py:644 +#: netbox/dcim/forms/model_forms.py:500 netbox/dcim/models/devices.py:635 msgid "The lowest-numbered unit occupied by the device" msgstr "Jednostka o najniższej liczbie zajmowana przez urządzenie" -#: netbox/dcim/forms/model_forms.py:547 +#: netbox/dcim/forms/model_forms.py:558 msgid "The position in the virtual chassis this device is identified by" msgstr "" "Pozycja w wirtualnej obudowie tego urządzenia jest identyfikowana przez" -#: netbox/dcim/forms/model_forms.py:552 +#: netbox/dcim/forms/model_forms.py:563 msgid "The priority of the device in the virtual chassis" msgstr "Priorytet urządzenia w wirtualnej obudowie" -#: netbox/dcim/forms/model_forms.py:659 +#: netbox/dcim/forms/model_forms.py:670 msgid "Automatically populate components associated with this module type" msgstr "Automatyczne wypełnianie komponentów powiązanych z tym typem modułu" -#: netbox/dcim/forms/model_forms.py:767 +#: netbox/dcim/forms/model_forms.py:779 msgid "Characteristics" msgstr "Charakterystyka" -#: netbox/dcim/forms/model_forms.py:914 +#: netbox/dcim/forms/model_forms.py:926 #, python-brace-format msgid "" "Alphanumeric ranges are supported for bulk creation. Mixed cases and types " @@ -4901,60 +5369,35 @@ msgstr "" "zostanie automatycznie zastąpiony wartością pozycji podczas tworzenia nowego" " modułu." -#: netbox/dcim/forms/model_forms.py:1094 +#: netbox/dcim/forms/model_forms.py:1107 msgid "Console port template" msgstr "Szablon portu konsoli" -#: netbox/dcim/forms/model_forms.py:1102 +#: netbox/dcim/forms/model_forms.py:1115 msgid "Console server port template" msgstr "Szablon portu serwera konsoli" -#: netbox/dcim/forms/model_forms.py:1110 +#: netbox/dcim/forms/model_forms.py:1123 msgid "Front port template" msgstr "Szablon portu przedniego" -#: netbox/dcim/forms/model_forms.py:1118 +#: netbox/dcim/forms/model_forms.py:1131 msgid "Interface template" msgstr "Szablon interfejsu" -#: netbox/dcim/forms/model_forms.py:1126 +#: netbox/dcim/forms/model_forms.py:1139 msgid "Power outlet template" msgstr "Szablon gniazdka elektrycznego" -#: netbox/dcim/forms/model_forms.py:1134 +#: netbox/dcim/forms/model_forms.py:1147 msgid "Power port template" msgstr "Szablon portu zasilania" -#: netbox/dcim/forms/model_forms.py:1142 +#: netbox/dcim/forms/model_forms.py:1155 msgid "Rear port template" msgstr "Szablon tylnego portu" -#: netbox/dcim/forms/model_forms.py:1151 netbox/dcim/forms/model_forms.py:1395 -#: netbox/dcim/forms/model_forms.py:1558 netbox/dcim/forms/model_forms.py:1590 -#: netbox/dcim/tables/connections.py:65 netbox/ipam/forms/bulk_import.py:318 -#: netbox/ipam/forms/model_forms.py:280 netbox/ipam/forms/model_forms.py:289 -#: netbox/ipam/tables/fhrp.py:64 netbox/ipam/tables/ip.py:372 -#: netbox/ipam/tables/vlans.py:169 -#: netbox/templates/circuits/inc/circuit_termination_fields.html:51 -#: netbox/templates/dcim/frontport.html:106 -#: netbox/templates/dcim/interface.html:27 -#: netbox/templates/dcim/interface.html:184 -#: netbox/templates/dcim/interface.html:310 -#: netbox/templates/dcim/rearport.html:102 -#: netbox/templates/virtualization/vminterface.html:18 -#: netbox/templates/vpn/tunneltermination.html:31 -#: netbox/templates/wireless/inc/wirelesslink_interface.html:10 -#: netbox/templates/wireless/wirelesslink.html:10 -#: netbox/templates/wireless/wirelesslink.html:55 -#: netbox/virtualization/forms/model_forms.py:348 -#: netbox/vpn/forms/bulk_import.py:297 netbox/vpn/forms/model_forms.py:436 -#: netbox/vpn/forms/model_forms.py:445 -#: netbox/wireless/forms/model_forms.py:113 -#: netbox/wireless/forms/model_forms.py:155 -msgid "Interface" -msgstr "Interfejs" - -#: netbox/dcim/forms/model_forms.py:1152 netbox/dcim/forms/model_forms.py:1591 +#: netbox/dcim/forms/model_forms.py:1165 netbox/dcim/forms/model_forms.py:1636 #: netbox/dcim/tables/connections.py:27 #: netbox/templates/dcim/consoleport.html:17 #: netbox/templates/dcim/consoleserverport.html:74 @@ -4962,71 +5405,71 @@ msgstr "Interfejs" msgid "Console Port" msgstr "Port konsoli" -#: netbox/dcim/forms/model_forms.py:1153 netbox/dcim/forms/model_forms.py:1592 +#: netbox/dcim/forms/model_forms.py:1166 netbox/dcim/forms/model_forms.py:1637 #: netbox/templates/dcim/consoleport.html:73 #: netbox/templates/dcim/consoleserverport.html:17 #: netbox/templates/dcim/frontport.html:109 msgid "Console Server Port" msgstr "Port serwera konsoli" -#: netbox/dcim/forms/model_forms.py:1154 netbox/dcim/forms/model_forms.py:1593 -#: netbox/templates/circuits/inc/circuit_termination_fields.html:52 +#: netbox/dcim/forms/model_forms.py:1167 netbox/dcim/forms/model_forms.py:1638 +#: netbox/templates/circuits/inc/circuit_termination_fields.html:53 #: netbox/templates/dcim/consoleport.html:76 #: netbox/templates/dcim/consoleserverport.html:77 #: netbox/templates/dcim/frontport.html:17 #: netbox/templates/dcim/frontport.html:115 -#: netbox/templates/dcim/interface.html:187 +#: netbox/templates/dcim/interface.html:244 #: netbox/templates/dcim/rearport.html:105 msgid "Front Port" msgstr "Port przedni" -#: netbox/dcim/forms/model_forms.py:1155 netbox/dcim/forms/model_forms.py:1594 -#: netbox/dcim/tables/devices.py:710 -#: netbox/templates/circuits/inc/circuit_termination_fields.html:53 +#: netbox/dcim/forms/model_forms.py:1168 netbox/dcim/forms/model_forms.py:1639 +#: netbox/dcim/tables/devices.py:744 +#: netbox/templates/circuits/inc/circuit_termination_fields.html:54 #: netbox/templates/dcim/consoleport.html:79 #: netbox/templates/dcim/consoleserverport.html:80 #: netbox/templates/dcim/frontport.html:50 #: netbox/templates/dcim/frontport.html:118 -#: netbox/templates/dcim/interface.html:190 +#: netbox/templates/dcim/interface.html:247 #: netbox/templates/dcim/rearport.html:17 #: netbox/templates/dcim/rearport.html:108 msgid "Rear Port" msgstr "Tylny port" -#: netbox/dcim/forms/model_forms.py:1156 netbox/dcim/forms/model_forms.py:1595 -#: netbox/dcim/tables/connections.py:46 netbox/dcim/tables/devices.py:512 -#: netbox/templates/dcim/poweroutlet.html:44 +#: netbox/dcim/forms/model_forms.py:1169 netbox/dcim/forms/model_forms.py:1640 +#: netbox/dcim/tables/connections.py:46 netbox/dcim/tables/devices.py:521 +#: netbox/templates/dcim/poweroutlet.html:54 #: netbox/templates/dcim/powerport.html:17 msgid "Power Port" msgstr "Port zasilania" -#: netbox/dcim/forms/model_forms.py:1157 netbox/dcim/forms/model_forms.py:1596 +#: netbox/dcim/forms/model_forms.py:1170 netbox/dcim/forms/model_forms.py:1641 #: netbox/templates/dcim/poweroutlet.html:17 #: netbox/templates/dcim/powerport.html:77 msgid "Power Outlet" msgstr "Gniazdo zasilania" -#: netbox/dcim/forms/model_forms.py:1159 netbox/dcim/forms/model_forms.py:1598 +#: netbox/dcim/forms/model_forms.py:1172 netbox/dcim/forms/model_forms.py:1643 msgid "Component Assignment" msgstr "Przypisywanie komponentów" -#: netbox/dcim/forms/model_forms.py:1202 netbox/dcim/forms/model_forms.py:1645 +#: netbox/dcim/forms/model_forms.py:1218 netbox/dcim/forms/model_forms.py:1690 msgid "An InventoryItem can only be assigned to a single component." msgstr "InventoryItem można przypisać tylko do pojedynczego komponentu." -#: netbox/dcim/forms/model_forms.py:1339 +#: netbox/dcim/forms/model_forms.py:1355 msgid "LAG interface" msgstr "Interfejs LAG" -#: netbox/dcim/forms/model_forms.py:1362 +#: netbox/dcim/forms/model_forms.py:1378 msgid "Filter VLANs available for assignment by group." msgstr "Filtruj sieci VLAN dostępne do przypisania według grup." -#: netbox/dcim/forms/model_forms.py:1491 +#: netbox/dcim/forms/model_forms.py:1533 msgid "Child Device" msgstr "Urządzenie dziecięce" -#: netbox/dcim/forms/model_forms.py:1492 +#: netbox/dcim/forms/model_forms.py:1534 msgid "" "Child devices must first be created and assigned to the site and rack of the" " parent device." @@ -5034,32 +5477,58 @@ msgstr "" "Urządzenia podrzędne muszą być najpierw utworzone i przypisane do terenu " "i szafy urządzenia nadrzędnego." -#: netbox/dcim/forms/model_forms.py:1534 +#: netbox/dcim/forms/model_forms.py:1576 msgid "Console port" msgstr "Port konsoli" -#: netbox/dcim/forms/model_forms.py:1542 +#: netbox/dcim/forms/model_forms.py:1584 msgid "Console server port" msgstr "Port serwera konsoli" -#: netbox/dcim/forms/model_forms.py:1550 +#: netbox/dcim/forms/model_forms.py:1592 msgid "Front port" msgstr "Port przedni" -#: netbox/dcim/forms/model_forms.py:1566 +#: netbox/dcim/forms/model_forms.py:1608 msgid "Power outlet" msgstr "Gniazdo zasilania" -#: netbox/dcim/forms/model_forms.py:1586 +#: netbox/dcim/forms/model_forms.py:1630 #: netbox/templates/dcim/inventoryitem.html:17 msgid "Inventory Item" msgstr "Przedmiot zapasów" -#: netbox/dcim/forms/model_forms.py:1659 +#: netbox/dcim/forms/model_forms.py:1704 #: netbox/templates/dcim/inventoryitemrole.html:15 msgid "Inventory Item Role" msgstr "Rola pozycji zapasów" +#: netbox/dcim/forms/model_forms.py:1773 +msgid "VM Interface" +msgstr "Interfejs VM" + +#: netbox/dcim/forms/model_forms.py:1788 netbox/ipam/forms/filtersets.py:608 +#: netbox/ipam/forms/model_forms.py:334 netbox/ipam/forms/model_forms.py:796 +#: netbox/ipam/forms/model_forms.py:822 netbox/ipam/tables/vlans.py:171 +#: netbox/templates/virtualization/virtualdisk.html:21 +#: netbox/templates/virtualization/virtualmachine.html:12 +#: netbox/templates/virtualization/vminterface.html:21 +#: netbox/templates/vpn/tunneltermination.html:25 +#: netbox/virtualization/forms/filtersets.py:202 +#: netbox/virtualization/forms/filtersets.py:247 +#: netbox/virtualization/forms/model_forms.py:227 +#: netbox/virtualization/tables/virtualmachines.py:105 +#: netbox/virtualization/tables/virtualmachines.py:161 +#: netbox/vpn/choices.py:53 netbox/vpn/forms/filtersets.py:293 +#: netbox/vpn/forms/model_forms.py:161 netbox/vpn/forms/model_forms.py:172 +#: netbox/vpn/forms/model_forms.py:274 netbox/vpn/forms/model_forms.py:457 +msgid "Virtual Machine" +msgstr "Maszyna wirtualna" + +#: netbox/dcim/forms/model_forms.py:1827 +msgid "A MAC address can only be assigned to a single object." +msgstr "Adres MAC można przypisać tylko do jednego obiektu." + #: netbox/dcim/forms/object_create.py:48 #: netbox/dcim/forms/object_create.py:199 #: netbox/dcim/forms/object_create.py:347 @@ -5080,7 +5549,7 @@ msgstr "" "oczekiwane." #: netbox/dcim/forms/object_create.py:110 -#: netbox/dcim/forms/object_create.py:263 netbox/dcim/tables/devices.py:252 +#: netbox/dcim/forms/object_create.py:263 netbox/dcim/tables/devices.py:263 msgid "Rear ports" msgstr "Tylne porty" @@ -5109,7 +5578,7 @@ msgstr "" "Liczba portów przednich do utworzenia ({frontport_count}) musi odpowiadać " "wybranej liczbie pozycji tylnych portów ({rearport_count})." -#: netbox/dcim/forms/object_create.py:401 netbox/dcim/tables/devices.py:1033 +#: netbox/dcim/forms/object_create.py:401 netbox/dcim/tables/devices.py:1065 #: netbox/ipam/tables/fhrp.py:31 netbox/templates/dcim/virtualchassis.html:53 #: netbox/templates/dcim/virtualchassis_edit.html:47 #: netbox/templates/ipam/fhrpgroup.html:38 @@ -5128,30 +5597,30 @@ msgstr "" "Położenie pierwszego urządzenia członkowskiego. Zwiększa się o jeden dla " "każdego dodatkowego członka." -#: netbox/dcim/forms/object_create.py:427 +#: netbox/dcim/forms/object_create.py:428 msgid "A position must be specified for the first VC member." msgstr "Pozycja musi być określona dla pierwszego członka VC." -#: netbox/dcim/models/cables.py:62 -#: netbox/dcim/models/device_component_templates.py:55 -#: netbox/dcim/models/device_components.py:62 +#: netbox/dcim/models/cables.py:64 +#: netbox/dcim/models/device_component_templates.py:51 +#: netbox/dcim/models/device_components.py:57 #: netbox/extras/models/customfields.py:111 msgid "label" msgstr "marka" -#: netbox/dcim/models/cables.py:71 +#: netbox/dcim/models/cables.py:73 msgid "length" msgstr "długość" -#: netbox/dcim/models/cables.py:78 +#: netbox/dcim/models/cables.py:80 msgid "length unit" msgstr "jednostka długości" -#: netbox/dcim/models/cables.py:95 +#: netbox/dcim/models/cables.py:98 msgid "cable" msgstr "kabel" -#: netbox/dcim/models/cables.py:96 +#: netbox/dcim/models/cables.py:99 msgid "cables" msgstr "linki" @@ -5177,19 +5646,19 @@ msgstr "Niekompatybilne typy zakończeń: {type_a} a {type_b}" msgid "A and B terminations cannot connect to the same object." msgstr "Zakończenia A i B nie mogą łączyć się z tym samym obiektem." -#: netbox/dcim/models/cables.py:260 netbox/ipam/models/asns.py:37 +#: netbox/dcim/models/cables.py:262 netbox/ipam/models/asns.py:37 msgid "end" msgstr "zakończyć" -#: netbox/dcim/models/cables.py:313 +#: netbox/dcim/models/cables.py:315 msgid "cable termination" msgstr "zakończenie kabla" -#: netbox/dcim/models/cables.py:314 +#: netbox/dcim/models/cables.py:316 msgid "cable terminations" msgstr "zakończenia kabli" -#: netbox/dcim/models/cables.py:333 +#: netbox/dcim/models/cables.py:335 #, python-brace-format msgid "" "Duplicate termination found for {app_label}.{model} {termination_id}: cable " @@ -5198,36 +5667,71 @@ msgstr "" "Znaleziono duplikat zakończenia {app_label}.{model} {termination_id}: kabel " "{cable_pk}" -#: netbox/dcim/models/cables.py:343 +#: netbox/dcim/models/cables.py:345 #, python-brace-format msgid "Cables cannot be terminated to {type_display} interfaces" msgstr "Kable nie mogą być zakończone {type_display} interfejsy" -#: netbox/dcim/models/cables.py:350 +#: netbox/dcim/models/cables.py:352 msgid "Circuit terminations attached to a provider network may not be cabled." msgstr "" "Zakończenia obwodów podłączone do sieci dostawcy nie mogą być okablowane." -#: netbox/dcim/models/cables.py:448 netbox/extras/models/configs.py:50 +#: netbox/dcim/models/cables.py:450 netbox/extras/models/configs.py:50 msgid "is active" msgstr "jest aktywny" -#: netbox/dcim/models/cables.py:452 +#: netbox/dcim/models/cables.py:454 msgid "is complete" msgstr "jest kompletny" -#: netbox/dcim/models/cables.py:456 +#: netbox/dcim/models/cables.py:458 msgid "is split" msgstr "jest podzielony" -#: netbox/dcim/models/cables.py:464 +#: netbox/dcim/models/cables.py:466 msgid "cable path" msgstr "ścieżka kabla" -#: netbox/dcim/models/cables.py:465 +#: netbox/dcim/models/cables.py:467 msgid "cable paths" msgstr "ścieżki kablowe" +#: netbox/dcim/models/cables.py:539 +msgid "All originating terminations must be attached to the same link" +msgstr "" +"Wszystkie początkowe zakończenia muszą być dołączone do tego samego łącza" + +#: netbox/dcim/models/cables.py:551 +msgid "All mid-span terminations must have the same termination type" +msgstr "" +"Wszystkie zakończenia w średnim przedziale muszą mieć ten sam typ " +"zakończenia" + +#: netbox/dcim/models/cables.py:556 +msgid "All mid-span terminations must have the same parent object" +msgstr "" +"Wszystkie zakończenia średniego zakresu muszą mieć ten sam obiekt nadrzędny" + +#: netbox/dcim/models/cables.py:580 +msgid "All links must be cable or wireless" +msgstr "Wszystkie łącza muszą być kablowe lub bezprzewodowe" + +#: netbox/dcim/models/cables.py:582 +msgid "All links must match first link type" +msgstr "Wszystkie linki muszą być zgodne z pierwszym typem łącza" + +#: netbox/dcim/models/cables.py:665 +msgid "" +"All positions counts within the path on opposite ends of links must match" +msgstr "" +"Wszystkie pozycje zliczane w ścieżce na przeciwległych końcach łączy muszą " +"być zgodne" + +#: netbox/dcim/models/cables.py:674 +msgid "Remote termination position filter is missing" +msgstr "Brak filtra pozycji zdalnego zakończenia" + #: netbox/dcim/models/device_component_templates.py:46 #, python-brace-format msgid "" @@ -5237,17 +5741,17 @@ msgstr "" "{module} jest akceptowany jako substytucja położenia wnęki modułu po " "dołączeniu do typu modułu." -#: netbox/dcim/models/device_component_templates.py:58 -#: netbox/dcim/models/device_components.py:65 +#: netbox/dcim/models/device_component_templates.py:54 +#: netbox/dcim/models/device_components.py:60 msgid "Physical label" msgstr "Etykieta fizyczna" -#: netbox/dcim/models/device_component_templates.py:103 +#: netbox/dcim/models/device_component_templates.py:99 msgid "Component templates cannot be moved to a different device type." msgstr "" "Szablony komponentów nie mogą być przenoszone do innego typu urządzenia." -#: netbox/dcim/models/device_component_templates.py:154 +#: netbox/dcim/models/device_component_templates.py:150 msgid "" "A component template cannot be associated with both a device type and a " "module type." @@ -5255,146 +5759,146 @@ msgstr "" "Szablonu komponentu nie można skojarzyć zarówno z typem urządzenia, jak i " "typem modułu." -#: netbox/dcim/models/device_component_templates.py:158 +#: netbox/dcim/models/device_component_templates.py:154 msgid "" "A component template must be associated with either a device type or a " "module type." msgstr "" "Szablon komponentu musi być skojarzony z typem urządzenia lub typem modułu." -#: netbox/dcim/models/device_component_templates.py:212 +#: netbox/dcim/models/device_component_templates.py:209 msgid "console port template" msgstr "szablon portu konsoli" -#: netbox/dcim/models/device_component_templates.py:213 +#: netbox/dcim/models/device_component_templates.py:210 msgid "console port templates" msgstr "szablony portów konsoli" -#: netbox/dcim/models/device_component_templates.py:246 +#: netbox/dcim/models/device_component_templates.py:244 msgid "console server port template" msgstr "szablon portu serwera konsoli" -#: netbox/dcim/models/device_component_templates.py:247 +#: netbox/dcim/models/device_component_templates.py:245 msgid "console server port templates" msgstr "szablony portów serwera konsoli" -#: netbox/dcim/models/device_component_templates.py:278 -#: netbox/dcim/models/device_components.py:352 +#: netbox/dcim/models/device_component_templates.py:277 +#: netbox/dcim/models/device_components.py:345 msgid "maximum draw" msgstr "maksymalne losowanie" -#: netbox/dcim/models/device_component_templates.py:285 -#: netbox/dcim/models/device_components.py:359 +#: netbox/dcim/models/device_component_templates.py:284 +#: netbox/dcim/models/device_components.py:352 msgid "allocated draw" msgstr "przydzielone losowanie" -#: netbox/dcim/models/device_component_templates.py:295 +#: netbox/dcim/models/device_component_templates.py:294 msgid "power port template" msgstr "szablon portu zasilania" -#: netbox/dcim/models/device_component_templates.py:296 +#: netbox/dcim/models/device_component_templates.py:295 msgid "power port templates" msgstr "szablony portów zasilania" #: netbox/dcim/models/device_component_templates.py:315 -#: netbox/dcim/models/device_components.py:382 +#: netbox/dcim/models/device_components.py:372 #, python-brace-format msgid "Allocated draw cannot exceed the maximum draw ({maximum_draw}W)." msgstr "" "Przydzielone losowanie nie może przekroczyć maksymalnego losowania " "({maximum_draw}W)." -#: netbox/dcim/models/device_component_templates.py:347 -#: netbox/dcim/models/device_components.py:477 +#: netbox/dcim/models/device_component_templates.py:349 +#: netbox/dcim/models/device_components.py:468 msgid "feed leg" msgstr "noga karmiąca" -#: netbox/dcim/models/device_component_templates.py:351 -#: netbox/dcim/models/device_components.py:481 +#: netbox/dcim/models/device_component_templates.py:354 +#: netbox/dcim/models/device_components.py:473 msgid "Phase (for three-phase feeds)" msgstr "Faza (dla zasilania trójfazowego)" -#: netbox/dcim/models/device_component_templates.py:357 +#: netbox/dcim/models/device_component_templates.py:360 msgid "power outlet template" msgstr "szablon gniazdka elektrycznego" -#: netbox/dcim/models/device_component_templates.py:358 +#: netbox/dcim/models/device_component_templates.py:361 msgid "power outlet templates" msgstr "szablony gniazdek elektrycznych" -#: netbox/dcim/models/device_component_templates.py:367 +#: netbox/dcim/models/device_component_templates.py:370 #, python-brace-format msgid "Parent power port ({power_port}) must belong to the same device type" msgstr "" "Nadrzędny port zasilania ({power_port}) musi należeć do tego samego typu " "urządzenia" -#: netbox/dcim/models/device_component_templates.py:371 +#: netbox/dcim/models/device_component_templates.py:376 #, python-brace-format msgid "Parent power port ({power_port}) must belong to the same module type" msgstr "" "Nadrzędny port zasilania ({power_port}) musi należeć do tego samego typu " "modułu" -#: netbox/dcim/models/device_component_templates.py:423 -#: netbox/dcim/models/device_components.py:611 +#: netbox/dcim/models/device_component_templates.py:430 +#: netbox/dcim/models/device_components.py:659 msgid "management only" msgstr "Tylko zarządzanie" -#: netbox/dcim/models/device_component_templates.py:431 -#: netbox/dcim/models/device_components.py:550 +#: netbox/dcim/models/device_component_templates.py:438 +#: netbox/dcim/models/device_components.py:539 msgid "bridge interface" msgstr "interfejs mostka" -#: netbox/dcim/models/device_component_templates.py:449 -#: netbox/dcim/models/device_components.py:636 +#: netbox/dcim/models/device_component_templates.py:459 +#: netbox/dcim/models/device_components.py:685 msgid "wireless role" msgstr "rola bezprzewodowa" -#: netbox/dcim/models/device_component_templates.py:455 +#: netbox/dcim/models/device_component_templates.py:465 msgid "interface template" msgstr "szablon interfejsu" -#: netbox/dcim/models/device_component_templates.py:456 +#: netbox/dcim/models/device_component_templates.py:466 msgid "interface templates" msgstr "szablony interfejsu" -#: netbox/dcim/models/device_component_templates.py:463 -#: netbox/dcim/models/device_components.py:804 -#: netbox/virtualization/models/virtualmachines.py:405 +#: netbox/dcim/models/device_component_templates.py:473 +#: netbox/dcim/models/device_components.py:845 +#: netbox/virtualization/models/virtualmachines.py:385 msgid "An interface cannot be bridged to itself." msgstr "Interfejs nie może być połączony z samym sobą." -#: netbox/dcim/models/device_component_templates.py:466 +#: netbox/dcim/models/device_component_templates.py:477 #, python-brace-format msgid "Bridge interface ({bridge}) must belong to the same device type" msgstr "" "Interfejs mostka ({bridge}) musi należeć do tego samego typu urządzenia" -#: netbox/dcim/models/device_component_templates.py:470 +#: netbox/dcim/models/device_component_templates.py:483 #, python-brace-format msgid "Bridge interface ({bridge}) must belong to the same module type" msgstr "Interfejs mostka ({bridge}) musi należeć do tego samego typu modułu" -#: netbox/dcim/models/device_component_templates.py:526 -#: netbox/dcim/models/device_components.py:984 +#: netbox/dcim/models/device_component_templates.py:540 +#: netbox/dcim/models/device_components.py:1035 msgid "rear port position" msgstr "pozycja tylnego portu" -#: netbox/dcim/models/device_component_templates.py:551 +#: netbox/dcim/models/device_component_templates.py:565 msgid "front port template" msgstr "szablon portu przedniego" -#: netbox/dcim/models/device_component_templates.py:552 +#: netbox/dcim/models/device_component_templates.py:566 msgid "front port templates" msgstr "szablony portów przednich" -#: netbox/dcim/models/device_component_templates.py:562 +#: netbox/dcim/models/device_component_templates.py:576 #, python-brace-format msgid "Rear port ({name}) must belong to the same device type" msgstr "Tylny port ({name}) musi należeć do tego samego typu urządzenia" -#: netbox/dcim/models/device_component_templates.py:568 +#: netbox/dcim/models/device_component_templates.py:582 #, python-brace-format msgid "" "Invalid rear port position ({position}); rear port {name} has only {count} " @@ -5403,48 +5907,48 @@ msgstr "" "Nieprawidłowa pozycja tylnego portu ({position}); tylny port {name} ma tylko" " {count} położenia" -#: netbox/dcim/models/device_component_templates.py:621 -#: netbox/dcim/models/device_components.py:1053 +#: netbox/dcim/models/device_component_templates.py:635 +#: netbox/dcim/models/device_components.py:1101 msgid "positions" msgstr "położenia" -#: netbox/dcim/models/device_component_templates.py:632 +#: netbox/dcim/models/device_component_templates.py:646 msgid "rear port template" msgstr "szablon tylnego portu" -#: netbox/dcim/models/device_component_templates.py:633 +#: netbox/dcim/models/device_component_templates.py:647 msgid "rear port templates" msgstr "szablony tylnych portów" -#: netbox/dcim/models/device_component_templates.py:662 -#: netbox/dcim/models/device_components.py:1103 +#: netbox/dcim/models/device_component_templates.py:676 +#: netbox/dcim/models/device_components.py:1148 msgid "position" msgstr "położenie" -#: netbox/dcim/models/device_component_templates.py:665 -#: netbox/dcim/models/device_components.py:1106 +#: netbox/dcim/models/device_component_templates.py:679 +#: netbox/dcim/models/device_components.py:1151 msgid "Identifier to reference when renaming installed components" msgstr "" "Identyfikator, do którego należy odwołać się podczas zmiany nazwy " "zainstalowanych komponentów" -#: netbox/dcim/models/device_component_templates.py:671 +#: netbox/dcim/models/device_component_templates.py:685 msgid "module bay template" msgstr "szablon modułu wnęki" -#: netbox/dcim/models/device_component_templates.py:672 +#: netbox/dcim/models/device_component_templates.py:686 msgid "module bay templates" msgstr "szablony modułów" -#: netbox/dcim/models/device_component_templates.py:699 +#: netbox/dcim/models/device_component_templates.py:713 msgid "device bay template" msgstr "szablon kieszeni urządzenia" -#: netbox/dcim/models/device_component_templates.py:700 +#: netbox/dcim/models/device_component_templates.py:714 msgid "device bay templates" msgstr "szablony kieszeni urządzeń" -#: netbox/dcim/models/device_component_templates.py:713 +#: netbox/dcim/models/device_component_templates.py:728 #, python-brace-format msgid "" "Subdevice role of device type ({device_type}) must be set to \"parent\" to " @@ -5453,207 +5957,226 @@ msgstr "" "Rola podurządzenia typu urządzenia ({device_type}) musi być ustawiony na " "„rodzic”, aby zezwolić na gniazda urządzeń." -#: netbox/dcim/models/device_component_templates.py:768 -#: netbox/dcim/models/device_components.py:1262 +#: netbox/dcim/models/device_component_templates.py:784 +#: netbox/dcim/models/device_components.py:1304 msgid "part ID" msgstr "ID części" -#: netbox/dcim/models/device_component_templates.py:770 -#: netbox/dcim/models/device_components.py:1264 +#: netbox/dcim/models/device_component_templates.py:786 +#: netbox/dcim/models/device_components.py:1306 msgid "Manufacturer-assigned part identifier" msgstr "Identyfikator części przypisany przez producenta" -#: netbox/dcim/models/device_component_templates.py:787 +#: netbox/dcim/models/device_component_templates.py:803 msgid "inventory item template" msgstr "szablon pozycji inwentaryzacji" -#: netbox/dcim/models/device_component_templates.py:788 +#: netbox/dcim/models/device_component_templates.py:804 msgid "inventory item templates" msgstr "szablony pozycji inwentaryzacji" -#: netbox/dcim/models/device_components.py:105 +#: netbox/dcim/models/device_components.py:100 msgid "Components cannot be moved to a different device." msgstr "Komponentów nie można przenieść na inne urządzenie." -#: netbox/dcim/models/device_components.py:144 +#: netbox/dcim/models/device_components.py:139 msgid "cable end" msgstr "koniec kabla" -#: netbox/dcim/models/device_components.py:150 +#: netbox/dcim/models/device_components.py:146 msgid "mark connected" msgstr "znak połączony" -#: netbox/dcim/models/device_components.py:152 +#: netbox/dcim/models/device_components.py:148 msgid "Treat as if a cable is connected" msgstr "Traktuj tak, jakby kabel był podłączony" -#: netbox/dcim/models/device_components.py:170 +#: netbox/dcim/models/device_components.py:166 msgid "Must specify cable end (A or B) when attaching a cable." msgstr "Należy określić koniec kabla (A lub B) podczas mocowania kabla." -#: netbox/dcim/models/device_components.py:174 +#: netbox/dcim/models/device_components.py:170 msgid "Cable end must not be set without a cable." msgstr "Końcówka kabla nie może być ustawiona bez kabla." -#: netbox/dcim/models/device_components.py:178 +#: netbox/dcim/models/device_components.py:174 msgid "Cannot mark as connected with a cable attached." msgstr "Nie można oznaczyć jako podłączonego za pomocą podłączonego kabla." -#: netbox/dcim/models/device_components.py:202 +#: netbox/dcim/models/device_components.py:198 #, python-brace-format msgid "{class_name} models must declare a parent_object property" msgstr "{class_name} modele muszą zadeklarować właściwość parent_object" -#: netbox/dcim/models/device_components.py:287 -#: netbox/dcim/models/device_components.py:316 -#: netbox/dcim/models/device_components.py:349 -#: netbox/dcim/models/device_components.py:467 +#: netbox/dcim/models/device_components.py:284 +#: netbox/dcim/models/device_components.py:311 +#: netbox/dcim/models/device_components.py:342 +#: netbox/dcim/models/device_components.py:458 msgid "Physical port type" msgstr "Typ portu fizycznego" -#: netbox/dcim/models/device_components.py:290 -#: netbox/dcim/models/device_components.py:319 +#: netbox/dcim/models/device_components.py:287 +#: netbox/dcim/models/device_components.py:314 msgid "speed" msgstr "prędkość" -#: netbox/dcim/models/device_components.py:294 -#: netbox/dcim/models/device_components.py:323 +#: netbox/dcim/models/device_components.py:291 +#: netbox/dcim/models/device_components.py:318 msgid "Port speed in bits per second" msgstr "Prędkość portu w bitach na sekundę" -#: netbox/dcim/models/device_components.py:300 +#: netbox/dcim/models/device_components.py:297 msgid "console port" msgstr "port konsoli" -#: netbox/dcim/models/device_components.py:301 +#: netbox/dcim/models/device_components.py:298 msgid "console ports" msgstr "porty konsoli" -#: netbox/dcim/models/device_components.py:329 +#: netbox/dcim/models/device_components.py:324 msgid "console server port" msgstr "port serwera konsoli" -#: netbox/dcim/models/device_components.py:330 +#: netbox/dcim/models/device_components.py:325 msgid "console server ports" msgstr "porty serwera konsoli" -#: netbox/dcim/models/device_components.py:369 +#: netbox/dcim/models/device_components.py:362 msgid "power port" msgstr "port zasilania" -#: netbox/dcim/models/device_components.py:370 +#: netbox/dcim/models/device_components.py:363 msgid "power ports" msgstr "porty zasilania" -#: netbox/dcim/models/device_components.py:487 +#: netbox/dcim/models/device_components.py:483 msgid "power outlet" msgstr "gniazdo zasilania" -#: netbox/dcim/models/device_components.py:488 +#: netbox/dcim/models/device_components.py:484 msgid "power outlets" msgstr "gniazdka elektryczne" -#: netbox/dcim/models/device_components.py:499 +#: netbox/dcim/models/device_components.py:492 #, python-brace-format msgid "Parent power port ({power_port}) must belong to the same device" msgstr "" "Nadrzędny port zasilania ({power_port}) musi należeć do tego samego " "urządzenia" -#: netbox/dcim/models/device_components.py:530 netbox/vpn/models/crypto.py:81 -#: netbox/vpn/models/crypto.py:226 +#: netbox/dcim/models/device_components.py:518 netbox/vpn/models/crypto.py:80 +#: netbox/vpn/models/crypto.py:222 msgid "mode" msgstr "tryb" -#: netbox/dcim/models/device_components.py:534 +#: netbox/dcim/models/device_components.py:523 msgid "IEEE 802.1Q tagging strategy" msgstr "Strategia tagowania IEEE 802.1Q" -#: netbox/dcim/models/device_components.py:542 +#: netbox/dcim/models/device_components.py:531 msgid "parent interface" msgstr "interfejs macierzysty" -#: netbox/dcim/models/device_components.py:602 -msgid "parent LAG" -msgstr "macierzysta LGD" - -#: netbox/dcim/models/device_components.py:612 -msgid "This interface is used only for out-of-band management" -msgstr "Ten interfejs jest używany tylko do zarządzania poza pasmem" - -#: netbox/dcim/models/device_components.py:617 -msgid "speed (Kbps)" -msgstr "Prędkość (Kbps)" - -#: netbox/dcim/models/device_components.py:620 -msgid "duplex" -msgstr "dupleks" - -#: netbox/dcim/models/device_components.py:630 -msgid "64-bit World Wide Name" -msgstr "64-bitowa nazwa światowa" - -#: netbox/dcim/models/device_components.py:642 -msgid "wireless channel" -msgstr "kanał bezprzewodowy" - -#: netbox/dcim/models/device_components.py:649 -msgid "channel frequency (MHz)" -msgstr "częstotliwość kanału (MHz)" - -#: netbox/dcim/models/device_components.py:650 -#: netbox/dcim/models/device_components.py:658 -msgid "Populated by selected channel (if set)" -msgstr "Wypełnione przez wybrany kanał (jeśli ustawiony)" - -#: netbox/dcim/models/device_components.py:664 -msgid "transmit power (dBm)" -msgstr "moc nadawania (dBm)" - -#: netbox/dcim/models/device_components.py:689 netbox/wireless/models.py:117 -msgid "wireless LANs" -msgstr "bezprzewodowe sieci LAN" - -#: netbox/dcim/models/device_components.py:697 -#: netbox/virtualization/models/virtualmachines.py:335 +#: netbox/dcim/models/device_components.py:547 msgid "untagged VLAN" msgstr "nieoznaczone sieci VLAN" -#: netbox/dcim/models/device_components.py:703 -#: netbox/virtualization/models/virtualmachines.py:341 +#: netbox/dcim/models/device_components.py:553 msgid "tagged VLANs" msgstr "oznaczone sieci VLAN" -#: netbox/dcim/models/device_components.py:745 -#: netbox/virtualization/models/virtualmachines.py:377 +#: netbox/dcim/models/device_components.py:561 +#: netbox/dcim/tables/devices.py:602 netbox/ipam/forms/bulk_edit.py:510 +#: netbox/ipam/forms/bulk_import.py:491 netbox/ipam/forms/filtersets.py:565 +#: netbox/ipam/forms/model_forms.py:692 netbox/ipam/tables/vlans.py:106 +#: netbox/templates/dcim/interface.html:86 netbox/templates/ipam/vlan.html:77 +msgid "Q-in-Q SVLAN" +msgstr "Q-in-Q SVLAN" + +#: netbox/dcim/models/device_components.py:576 +msgid "primary MAC address" +msgstr "główny adres MAC" + +#: netbox/dcim/models/device_components.py:588 +msgid "Only Q-in-Q interfaces may specify a service VLAN." +msgstr "Tylko interfejsy Q-in-Q mogą określać usługę VLAN." + +#: netbox/dcim/models/device_components.py:594 +#, python-brace-format +msgid "MAC address {mac_address} is not assigned to this interface." +msgstr "Adres MAC {mac_address} nie jest przypisany do tego interfejsu." + +#: netbox/dcim/models/device_components.py:650 +msgid "parent LAG" +msgstr "macierzysta LGD" + +#: netbox/dcim/models/device_components.py:660 +msgid "This interface is used only for out-of-band management" +msgstr "Ten interfejs jest używany tylko do zarządzania poza pasmem" + +#: netbox/dcim/models/device_components.py:665 +msgid "speed (Kbps)" +msgstr "Prędkość (Kbps)" + +#: netbox/dcim/models/device_components.py:668 +msgid "duplex" +msgstr "dupleks" + +#: netbox/dcim/models/device_components.py:678 +msgid "64-bit World Wide Name" +msgstr "64-bitowa nazwa światowa" + +#: netbox/dcim/models/device_components.py:692 +msgid "wireless channel" +msgstr "kanał bezprzewodowy" + +#: netbox/dcim/models/device_components.py:699 +msgid "channel frequency (MHz)" +msgstr "częstotliwość kanału (MHz)" + +#: netbox/dcim/models/device_components.py:700 +#: netbox/dcim/models/device_components.py:708 +msgid "Populated by selected channel (if set)" +msgstr "Wypełnione przez wybrany kanał (jeśli ustawiony)" + +#: netbox/dcim/models/device_components.py:714 +msgid "transmit power (dBm)" +msgstr "moc nadawania (dBm)" + +#: netbox/dcim/models/device_components.py:741 netbox/wireless/models.py:117 +msgid "wireless LANs" +msgstr "bezprzewodowe sieci LAN" + +#: netbox/dcim/models/device_components.py:789 +#: netbox/virtualization/models/virtualmachines.py:359 msgid "interface" msgstr "interfejs" -#: netbox/dcim/models/device_components.py:746 -#: netbox/virtualization/models/virtualmachines.py:378 +#: netbox/dcim/models/device_components.py:790 +#: netbox/virtualization/models/virtualmachines.py:360 msgid "interfaces" msgstr "interfejsy" -#: netbox/dcim/models/device_components.py:757 +#: netbox/dcim/models/device_components.py:798 #, python-brace-format msgid "{display_type} interfaces cannot have a cable attached." msgstr "{display_type} Interfejsy nie mogą mieć podłączonego kabla." -#: netbox/dcim/models/device_components.py:765 +#: netbox/dcim/models/device_components.py:806 #, python-brace-format msgid "{display_type} interfaces cannot be marked as connected." msgstr "{display_type} interfejsów nie można oznaczyć jako połączonych." -#: netbox/dcim/models/device_components.py:774 -#: netbox/virtualization/models/virtualmachines.py:390 +#: netbox/dcim/models/device_components.py:815 +#: netbox/virtualization/models/virtualmachines.py:370 msgid "An interface cannot be its own parent." msgstr "Interfejs nie może być własnym rodzicem." -#: netbox/dcim/models/device_components.py:778 +#: netbox/dcim/models/device_components.py:819 msgid "Only virtual interfaces may be assigned to a parent interface." msgstr "Do interfejsu nadrzędnego można przypisać tylko interfejsy wirtualne." -#: netbox/dcim/models/device_components.py:785 +#: netbox/dcim/models/device_components.py:826 #, python-brace-format msgid "" "The selected parent interface ({interface}) belongs to a different device " @@ -5662,7 +6185,7 @@ msgstr "" "Wybrany interfejs nadrzędny ({interface}) należy do innego urządzenia " "({device})" -#: netbox/dcim/models/device_components.py:791 +#: netbox/dcim/models/device_components.py:832 #, python-brace-format msgid "" "The selected parent interface ({interface}) belongs to {device}, which is " @@ -5671,7 +6194,7 @@ msgstr "" "Wybrany interfejs nadrzędny ({interface}) należy do {device}, która nie jest" " częścią wirtualnej obudowy {virtual_chassis}." -#: netbox/dcim/models/device_components.py:811 +#: netbox/dcim/models/device_components.py:852 #, python-brace-format msgid "" "The selected bridge interface ({bridge}) belongs to a different device " @@ -5679,7 +6202,7 @@ msgid "" msgstr "" "Wybrany interfejs mostu ({bridge}) należy do innego urządzenia ({device})." -#: netbox/dcim/models/device_components.py:817 +#: netbox/dcim/models/device_components.py:858 #, python-brace-format msgid "" "The selected bridge interface ({interface}) belongs to {device}, which is " @@ -5688,21 +6211,21 @@ msgstr "" "Wybrany interfejs mostu ({interface}) należy do {device}, która nie jest " "częścią wirtualnej obudowy {virtual_chassis}." -#: netbox/dcim/models/device_components.py:828 +#: netbox/dcim/models/device_components.py:869 msgid "Virtual interfaces cannot have a parent LAG interface." msgstr "Interfejsy wirtualne nie mogą mieć nadrzędnego interfejsu LAG." -#: netbox/dcim/models/device_components.py:832 +#: netbox/dcim/models/device_components.py:873 msgid "A LAG interface cannot be its own parent." msgstr "Interfejs LAG nie może być własnym rodzicem." -#: netbox/dcim/models/device_components.py:839 +#: netbox/dcim/models/device_components.py:880 #, python-brace-format msgid "" "The selected LAG interface ({lag}) belongs to a different device ({device})." msgstr "Wybrany interfejs LAG ({lag}) należy do innego urządzenia ({device})." -#: netbox/dcim/models/device_components.py:845 +#: netbox/dcim/models/device_components.py:886 #, python-brace-format msgid "" "The selected LAG interface ({lag}) belongs to {device}, which is not part of" @@ -5711,49 +6234,53 @@ msgstr "" "Wybrany interfejs LAG ({lag}) należy do {device}, która nie jest częścią " "wirtualnej obudowy {virtual_chassis}." -#: netbox/dcim/models/device_components.py:856 +#: netbox/dcim/models/device_components.py:897 msgid "Virtual interfaces cannot have a PoE mode." msgstr "Interfejsy wirtualne nie mogą mieć trybu PoE." -#: netbox/dcim/models/device_components.py:860 +#: netbox/dcim/models/device_components.py:901 msgid "Virtual interfaces cannot have a PoE type." msgstr "Interfejsy wirtualne nie mogą mieć typu PoE." -#: netbox/dcim/models/device_components.py:866 +#: netbox/dcim/models/device_components.py:907 msgid "Must specify PoE mode when designating a PoE type." msgstr "Musi określić tryb PoE podczas wyznaczania typu PoE." -#: netbox/dcim/models/device_components.py:873 +#: netbox/dcim/models/device_components.py:914 msgid "Wireless role may be set only on wireless interfaces." msgstr "" "Rola sieci bezprzewodowej może być ustawiona tylko na interfejsach " "bezprzewodowych." -#: netbox/dcim/models/device_components.py:875 +#: netbox/dcim/models/device_components.py:916 msgid "Channel may be set only on wireless interfaces." msgstr "Kanał można ustawić tylko na interfejsach bezprzewodowych." -#: netbox/dcim/models/device_components.py:881 +#: netbox/dcim/models/device_components.py:922 msgid "Channel frequency may be set only on wireless interfaces." msgstr "" "Częstotliwość kanału może być ustawiona tylko na interfejsach " "bezprzewodowych." -#: netbox/dcim/models/device_components.py:885 +#: netbox/dcim/models/device_components.py:926 msgid "Cannot specify custom frequency with channel selected." msgstr "Nie można określić niestandardowej częstotliwości z wybranym kanałem." -#: netbox/dcim/models/device_components.py:891 +#: netbox/dcim/models/device_components.py:932 msgid "Channel width may be set only on wireless interfaces." msgstr "" "Szerokość kanału może być ustawiona tylko na interfejsach bezprzewodowych." -#: netbox/dcim/models/device_components.py:893 +#: netbox/dcim/models/device_components.py:934 msgid "Cannot specify custom width with channel selected." msgstr "" "Nie można określić niestandardowej szerokości przy zaznaczonym kanale." -#: netbox/dcim/models/device_components.py:901 +#: netbox/dcim/models/device_components.py:938 +msgid "Interface mode does not support an untagged vlan." +msgstr "Tryb interfejsu nie obsługuje nieoznaczonej sieci VLAN." + +#: netbox/dcim/models/device_components.py:944 #, python-brace-format msgid "" "The untagged VLAN ({untagged_vlan}) must belong to the same site as the " @@ -5762,24 +6289,24 @@ msgstr "" "Nieoznaczona sieć VLAN ({untagged_vlan}) musi należeć do tej samej witryny " "co urządzenie nadrzędne interfejsu lub musi być globalne." -#: netbox/dcim/models/device_components.py:990 +#: netbox/dcim/models/device_components.py:1041 msgid "Mapped position on corresponding rear port" msgstr "Zmapowana pozycja na odpowiednim tylnym porcie" -#: netbox/dcim/models/device_components.py:1006 +#: netbox/dcim/models/device_components.py:1057 msgid "front port" msgstr "port przedni" -#: netbox/dcim/models/device_components.py:1007 +#: netbox/dcim/models/device_components.py:1058 msgid "front ports" msgstr "porty przednie" -#: netbox/dcim/models/device_components.py:1021 +#: netbox/dcim/models/device_components.py:1069 #, python-brace-format msgid "Rear port ({rear_port}) must belong to the same device" msgstr "Tylny port ({rear_port}) musi należeć do tego samego urządzenia" -#: netbox/dcim/models/device_components.py:1029 +#: netbox/dcim/models/device_components.py:1077 #, python-brace-format msgid "" "Invalid rear port position ({rear_port_position}): Rear port {name} has only" @@ -5788,19 +6315,19 @@ msgstr "" "Nieprawidłowa pozycja tylnego portu ({rear_port_position}): Tylny port " "{name} ma tylko {positions} pozycje." -#: netbox/dcim/models/device_components.py:1059 +#: netbox/dcim/models/device_components.py:1107 msgid "Number of front ports which may be mapped" msgstr "Liczba portów przednich, które mogą być mapowane" -#: netbox/dcim/models/device_components.py:1064 +#: netbox/dcim/models/device_components.py:1112 msgid "rear port" msgstr "tylny port" -#: netbox/dcim/models/device_components.py:1065 +#: netbox/dcim/models/device_components.py:1113 msgid "rear ports" msgstr "tylne porty" -#: netbox/dcim/models/device_components.py:1079 +#: netbox/dcim/models/device_components.py:1124 #, python-brace-format msgid "" "The number of positions cannot be less than the number of mapped front ports" @@ -5809,37 +6336,37 @@ msgstr "" "Liczba pozycji nie może być mniejsza niż liczba zmapowanych portów przednich" " ({frontport_count})" -#: netbox/dcim/models/device_components.py:1120 +#: netbox/dcim/models/device_components.py:1165 msgid "module bay" msgstr "wnęka modułu" -#: netbox/dcim/models/device_components.py:1121 +#: netbox/dcim/models/device_components.py:1166 msgid "module bays" msgstr "kieszenie modułowe" -#: netbox/dcim/models/device_components.py:1138 -#: netbox/dcim/models/devices.py:1224 +#: netbox/dcim/models/device_components.py:1180 +#: netbox/dcim/models/devices.py:1229 msgid "A module bay cannot belong to a module installed within it." msgstr "Wnęka modułu nie może należeć do zainstalowanego w nim modułu." -#: netbox/dcim/models/device_components.py:1164 +#: netbox/dcim/models/device_components.py:1206 msgid "device bay" msgstr "wnęka urządzenia" -#: netbox/dcim/models/device_components.py:1165 +#: netbox/dcim/models/device_components.py:1207 msgid "device bays" msgstr "kieszenie na urządzenia" -#: netbox/dcim/models/device_components.py:1175 +#: netbox/dcim/models/device_components.py:1214 #, python-brace-format msgid "This type of device ({device_type}) does not support device bays." msgstr "Ten typ urządzenia ({device_type}) nie obsługuje wnęk na urządzenia." -#: netbox/dcim/models/device_components.py:1181 +#: netbox/dcim/models/device_components.py:1220 msgid "Cannot install a device into itself." msgstr "Nie można zainstalować urządzenia w sobie." -#: netbox/dcim/models/device_components.py:1189 +#: netbox/dcim/models/device_components.py:1228 #, python-brace-format msgid "" "Cannot install the specified device; device is already installed in {bay}." @@ -5847,116 +6374,116 @@ msgstr "" "Nie można zainstalować określonego urządzenia; urządzenie jest już " "zainstalowane w {bay}." -#: netbox/dcim/models/device_components.py:1210 +#: netbox/dcim/models/device_components.py:1249 msgid "inventory item role" msgstr "rola pozycji zapasów" -#: netbox/dcim/models/device_components.py:1211 +#: netbox/dcim/models/device_components.py:1250 msgid "inventory item roles" msgstr "role pozycji zapasów" -#: netbox/dcim/models/device_components.py:1268 -#: netbox/dcim/models/devices.py:607 netbox/dcim/models/devices.py:1181 -#: netbox/dcim/models/racks.py:313 -#: netbox/virtualization/models/virtualmachines.py:131 +#: netbox/dcim/models/device_components.py:1310 +#: netbox/dcim/models/devices.py:598 netbox/dcim/models/devices.py:1189 +#: netbox/dcim/models/racks.py:304 +#: netbox/virtualization/models/virtualmachines.py:126 msgid "serial number" msgstr "numer seryjny" -#: netbox/dcim/models/device_components.py:1276 -#: netbox/dcim/models/devices.py:615 netbox/dcim/models/devices.py:1188 -#: netbox/dcim/models/racks.py:320 +#: netbox/dcim/models/device_components.py:1318 +#: netbox/dcim/models/devices.py:606 netbox/dcim/models/devices.py:1196 +#: netbox/dcim/models/racks.py:311 msgid "asset tag" msgstr "znacznik zasobu" -#: netbox/dcim/models/device_components.py:1277 +#: netbox/dcim/models/device_components.py:1319 msgid "A unique tag used to identify this item" msgstr "Unikalny znacznik używany do identyfikacji tego elementu" -#: netbox/dcim/models/device_components.py:1280 +#: netbox/dcim/models/device_components.py:1322 msgid "discovered" msgstr "odkryty" -#: netbox/dcim/models/device_components.py:1282 +#: netbox/dcim/models/device_components.py:1324 msgid "This item was automatically discovered" msgstr "Ten przedmiot został automatycznie wykryty" -#: netbox/dcim/models/device_components.py:1300 +#: netbox/dcim/models/device_components.py:1342 msgid "inventory item" msgstr "pozycja inwentaryzacyjna" -#: netbox/dcim/models/device_components.py:1301 +#: netbox/dcim/models/device_components.py:1343 msgid "inventory items" msgstr "pozycje inwentaryzacyjne" -#: netbox/dcim/models/device_components.py:1312 +#: netbox/dcim/models/device_components.py:1351 msgid "Cannot assign self as parent." msgstr "Nie można przypisać siebie jako rodzica." -#: netbox/dcim/models/device_components.py:1320 +#: netbox/dcim/models/device_components.py:1359 msgid "Parent inventory item does not belong to the same device." msgstr "Nadrzędny element ekwipunku nie należy do tego samego urządzenia." -#: netbox/dcim/models/device_components.py:1326 +#: netbox/dcim/models/device_components.py:1365 msgid "Cannot move an inventory item with dependent children" msgstr "" "Nie można przenieść pozycji inwentarza z pozostałymi dziećmi na utrzymaniu" -#: netbox/dcim/models/device_components.py:1334 +#: netbox/dcim/models/device_components.py:1373 msgid "Cannot assign inventory item to component on another device" msgstr "" "Nie można przypisać elementu zapasów do komponentu na innym urządzeniu" -#: netbox/dcim/models/devices.py:54 +#: netbox/dcim/models/devices.py:59 msgid "manufacturer" msgstr "producenta" -#: netbox/dcim/models/devices.py:55 +#: netbox/dcim/models/devices.py:60 msgid "manufacturers" msgstr "producentów" -#: netbox/dcim/models/devices.py:82 netbox/dcim/models/devices.py:382 +#: netbox/dcim/models/devices.py:84 netbox/dcim/models/devices.py:383 #: netbox/dcim/models/racks.py:133 msgid "model" msgstr "model" -#: netbox/dcim/models/devices.py:95 +#: netbox/dcim/models/devices.py:97 msgid "default platform" msgstr "domyślna platforma" -#: netbox/dcim/models/devices.py:98 netbox/dcim/models/devices.py:386 +#: netbox/dcim/models/devices.py:100 netbox/dcim/models/devices.py:387 msgid "part number" msgstr "numer części" -#: netbox/dcim/models/devices.py:101 netbox/dcim/models/devices.py:389 +#: netbox/dcim/models/devices.py:103 netbox/dcim/models/devices.py:390 msgid "Discrete part number (optional)" msgstr "Dyskretny numer części (opcjonalnie)" -#: netbox/dcim/models/devices.py:107 netbox/dcim/models/racks.py:54 +#: netbox/dcim/models/devices.py:109 netbox/dcim/models/racks.py:53 msgid "height (U)" msgstr "wysokość (U)" -#: netbox/dcim/models/devices.py:111 +#: netbox/dcim/models/devices.py:113 msgid "exclude from utilization" msgstr "wykluczyć z wykorzystania" -#: netbox/dcim/models/devices.py:112 +#: netbox/dcim/models/devices.py:114 msgid "Devices of this type are excluded when calculating rack utilization." msgstr "" "Urządzenia tego typu są wykluczone przy obliczaniu wykorzystania szafy." -#: netbox/dcim/models/devices.py:116 +#: netbox/dcim/models/devices.py:118 msgid "is full depth" msgstr "jest pełna głębokość" -#: netbox/dcim/models/devices.py:117 +#: netbox/dcim/models/devices.py:119 msgid "Device consumes both front and rear rack faces." msgstr "Urządzenie zajmuje zarówno przednią, jak i tylną powierzchnię szafy." -#: netbox/dcim/models/devices.py:123 +#: netbox/dcim/models/devices.py:126 msgid "parent/child status" msgstr "status rodzica/dziecka" -#: netbox/dcim/models/devices.py:124 +#: netbox/dcim/models/devices.py:127 msgid "" "Parent devices house child devices in device bays. Leave blank if this " "device type is neither a parent nor a child." @@ -5965,24 +6492,24 @@ msgstr "" " Pozostaw puste, jeśli ten typ urządzenia nie jest ani rodzicem, ani " "dzieckiem." -#: netbox/dcim/models/devices.py:128 netbox/dcim/models/devices.py:392 -#: netbox/dcim/models/devices.py:659 netbox/dcim/models/racks.py:324 +#: netbox/dcim/models/devices.py:131 netbox/dcim/models/devices.py:393 +#: netbox/dcim/models/devices.py:651 netbox/dcim/models/racks.py:315 msgid "airflow" msgstr "przepływ powietrza" -#: netbox/dcim/models/devices.py:204 +#: netbox/dcim/models/devices.py:208 msgid "device type" msgstr "typ urządzenia" -#: netbox/dcim/models/devices.py:205 +#: netbox/dcim/models/devices.py:209 msgid "device types" msgstr "typy urządzeń" -#: netbox/dcim/models/devices.py:290 +#: netbox/dcim/models/devices.py:291 msgid "U height must be in increments of 0.5 rack units." msgstr "Wysokość U musi być w odstępach co 0,5 jednostki szafy." -#: netbox/dcim/models/devices.py:307 +#: netbox/dcim/models/devices.py:308 #, python-brace-format msgid "" "Device {device} in rack {rack} does not have sufficient space to accommodate" @@ -5991,7 +6518,7 @@ msgstr "" "Urządzenie {device} w szafie {rack} nie ma wystarczającej ilości miejsca, " "aby pomieścić wysokość {height}U" -#: netbox/dcim/models/devices.py:322 +#: netbox/dcim/models/devices.py:323 #, python-brace-format msgid "" "Unable to set 0U height: Found {racked_instance_count} " @@ -6001,7 +6528,7 @@ msgstr "" "href=\"{url}\">{racked_instance_count} instancji już zamontowanych " "w szafach." -#: netbox/dcim/models/devices.py:331 +#: netbox/dcim/models/devices.py:332 msgid "" "Must delete all device bay templates associated with this device before " "declassifying it as a parent device." @@ -6009,157 +6536,157 @@ msgstr "" "Przed odtajnieniem go jako urządzenia nadrzędnego należy usunąć wszystkie " "szablony kieszeni urządzeń powiązane z tym urządzeniem." -#: netbox/dcim/models/devices.py:337 +#: netbox/dcim/models/devices.py:338 msgid "Child device types must be 0U." msgstr "Typy urządzeń podrzędnych muszą mieć wartość 0U." -#: netbox/dcim/models/devices.py:411 +#: netbox/dcim/models/devices.py:413 msgid "module type" msgstr "typ modułu" -#: netbox/dcim/models/devices.py:412 +#: netbox/dcim/models/devices.py:414 msgid "module types" msgstr "typy modułów" -#: netbox/dcim/models/devices.py:485 +#: netbox/dcim/models/devices.py:484 msgid "Virtual machines may be assigned to this role" msgstr "Maszyny wirtualne mogą być przypisane do tej roli" -#: netbox/dcim/models/devices.py:497 +#: netbox/dcim/models/devices.py:496 msgid "device role" msgstr "rola urządzenia" -#: netbox/dcim/models/devices.py:498 +#: netbox/dcim/models/devices.py:497 msgid "device roles" msgstr "role urządzenia" -#: netbox/dcim/models/devices.py:515 +#: netbox/dcim/models/devices.py:511 msgid "Optionally limit this platform to devices of a certain manufacturer" msgstr "Opcjonalnie ogranicz tę platformę do urządzeń określonego producenta" -#: netbox/dcim/models/devices.py:527 +#: netbox/dcim/models/devices.py:523 msgid "platform" msgstr "platforma" -#: netbox/dcim/models/devices.py:528 +#: netbox/dcim/models/devices.py:524 msgid "platforms" msgstr "platformy" -#: netbox/dcim/models/devices.py:576 +#: netbox/dcim/models/devices.py:572 msgid "The function this device serves" msgstr "Funkcja, jaką spełnia to urządzenie" -#: netbox/dcim/models/devices.py:608 +#: netbox/dcim/models/devices.py:599 msgid "Chassis serial number, assigned by the manufacturer" msgstr "Numer seryjny podwozia, przypisany przez producenta" -#: netbox/dcim/models/devices.py:616 netbox/dcim/models/devices.py:1189 +#: netbox/dcim/models/devices.py:607 netbox/dcim/models/devices.py:1197 msgid "A unique tag used to identify this device" msgstr "Unikalny znacznik używany do identyfikacji tego urządzenia" -#: netbox/dcim/models/devices.py:643 +#: netbox/dcim/models/devices.py:634 msgid "position (U)" msgstr "pozycja (U)" -#: netbox/dcim/models/devices.py:650 +#: netbox/dcim/models/devices.py:642 msgid "rack face" msgstr "powierzchnia szafy" -#: netbox/dcim/models/devices.py:670 netbox/dcim/models/devices.py:1420 -#: netbox/virtualization/models/virtualmachines.py:100 +#: netbox/dcim/models/devices.py:663 netbox/dcim/models/devices.py:1425 +#: netbox/virtualization/models/virtualmachines.py:95 msgid "primary IPv4" msgstr "podstawowy IPv4" -#: netbox/dcim/models/devices.py:678 netbox/dcim/models/devices.py:1428 -#: netbox/virtualization/models/virtualmachines.py:108 +#: netbox/dcim/models/devices.py:671 netbox/dcim/models/devices.py:1433 +#: netbox/virtualization/models/virtualmachines.py:103 msgid "primary IPv6" msgstr "podstawowy IPv6" -#: netbox/dcim/models/devices.py:686 +#: netbox/dcim/models/devices.py:679 msgid "out-of-band IP" msgstr "Poza pasmem IP" -#: netbox/dcim/models/devices.py:703 +#: netbox/dcim/models/devices.py:696 msgid "VC position" msgstr "Pozycja VC" -#: netbox/dcim/models/devices.py:706 +#: netbox/dcim/models/devices.py:699 msgid "Virtual chassis position" msgstr "Wirtualna pozycja podwozia" -#: netbox/dcim/models/devices.py:709 +#: netbox/dcim/models/devices.py:702 msgid "VC priority" msgstr "Priorytet VC" -#: netbox/dcim/models/devices.py:713 +#: netbox/dcim/models/devices.py:706 msgid "Virtual chassis master election priority" msgstr "Priorytet wyboru głównego wirtualnego podwozia" -#: netbox/dcim/models/devices.py:716 netbox/dcim/models/sites.py:207 +#: netbox/dcim/models/devices.py:709 netbox/dcim/models/sites.py:208 msgid "latitude" msgstr "swoboda" -#: netbox/dcim/models/devices.py:721 netbox/dcim/models/devices.py:729 -#: netbox/dcim/models/sites.py:212 netbox/dcim/models/sites.py:220 +#: netbox/dcim/models/devices.py:714 netbox/dcim/models/devices.py:722 +#: netbox/dcim/models/sites.py:213 netbox/dcim/models/sites.py:221 msgid "GPS coordinate in decimal format (xx.yyyyyy)" msgstr "Współrzędne GPS w formacie dziesiętnym (xx.rrrr)" -#: netbox/dcim/models/devices.py:724 netbox/dcim/models/sites.py:215 +#: netbox/dcim/models/devices.py:717 netbox/dcim/models/sites.py:216 msgid "longitude" msgstr "długość geograficzna" -#: netbox/dcim/models/devices.py:797 +#: netbox/dcim/models/devices.py:790 msgid "Device name must be unique per site." msgstr "Nazwa urządzenia musi być niepowtarzalna dla każdej witryny." -#: netbox/dcim/models/devices.py:808 netbox/ipam/models/services.py:75 +#: netbox/dcim/models/devices.py:801 netbox/ipam/models/services.py:71 msgid "device" msgstr "urządzenie" -#: netbox/dcim/models/devices.py:809 +#: netbox/dcim/models/devices.py:802 msgid "devices" msgstr "urządzenia" -#: netbox/dcim/models/devices.py:835 +#: netbox/dcim/models/devices.py:821 #, python-brace-format msgid "Rack {rack} does not belong to site {site}." msgstr "Szafa {rack} nie należy do terenu {site}." -#: netbox/dcim/models/devices.py:840 +#: netbox/dcim/models/devices.py:826 #, python-brace-format msgid "Location {location} does not belong to site {site}." msgstr "Lokalizacja {location} nie należy do strony {site}." -#: netbox/dcim/models/devices.py:846 +#: netbox/dcim/models/devices.py:832 #, python-brace-format msgid "Rack {rack} does not belong to location {location}." msgstr "Szafa {rack} nie należy do lokalizacji {location}." -#: netbox/dcim/models/devices.py:853 +#: netbox/dcim/models/devices.py:839 msgid "Cannot select a rack face without assigning a rack." msgstr "Nie można wybrać powierzchni szafy bez przypisania szafy." -#: netbox/dcim/models/devices.py:857 +#: netbox/dcim/models/devices.py:843 msgid "Cannot select a rack position without assigning a rack." msgstr "Nie można wybrać pozycji w szafie bez przypisania szafy." -#: netbox/dcim/models/devices.py:863 +#: netbox/dcim/models/devices.py:849 msgid "Position must be in increments of 0.5 rack units." msgstr "Pozycja musi być w odstępach co 0,5 jednostek regałowych." -#: netbox/dcim/models/devices.py:867 +#: netbox/dcim/models/devices.py:853 msgid "Must specify rack face when defining rack position." msgstr "" "Należy określić powierzchnię szafy podczas definiowania pozycji w szafie." -#: netbox/dcim/models/devices.py:875 +#: netbox/dcim/models/devices.py:861 #, python-brace-format msgid "" "A 0U device type ({device_type}) cannot be assigned to a rack position." msgstr "" "Typ urządzenia 0U ({device_type}) nie może być przypisany do pozycji szafy." -#: netbox/dcim/models/devices.py:886 +#: netbox/dcim/models/devices.py:872 msgid "" "Child device types cannot be assigned to a rack face. This is an attribute " "of the parent device." @@ -6167,7 +6694,7 @@ msgstr "" "Typy urządzeń podrzędnych nie mogą być przypisane do powierzchni szafy. Jest" " to atrybut urządzenia nadrzędnego." -#: netbox/dcim/models/devices.py:893 +#: netbox/dcim/models/devices.py:879 msgid "" "Child device types cannot be assigned to a rack position. This is an " "attribute of the parent device." @@ -6175,7 +6702,7 @@ msgstr "" "Typy urządzeń podrzędnych nie mogą być przypisane do pozycji szafy. Jest to " "atrybut urządzenia nadrzędnego." -#: netbox/dcim/models/devices.py:907 +#: netbox/dcim/models/devices.py:893 #, python-brace-format msgid "" "U{position} is already occupied or does not have sufficient space to " @@ -6184,22 +6711,22 @@ msgstr "" "U{position} jest już zajęty lub nie ma wystarczającej ilości miejsca, aby " "pomieścić ten typ urządzenia: {device_type} ({u_height}U)" -#: netbox/dcim/models/devices.py:922 +#: netbox/dcim/models/devices.py:908 #, python-brace-format msgid "{ip} is not an IPv4 address." msgstr "{ip} nie jest adresem IPv4." -#: netbox/dcim/models/devices.py:931 netbox/dcim/models/devices.py:946 +#: netbox/dcim/models/devices.py:920 netbox/dcim/models/devices.py:938 #, python-brace-format msgid "The specified IP address ({ip}) is not assigned to this device." msgstr "Podany adres IP ({ip}) nie jest przypisany do tego urządzenia." -#: netbox/dcim/models/devices.py:937 +#: netbox/dcim/models/devices.py:926 #, python-brace-format msgid "{ip} is not an IPv6 address." msgstr "{ip} nie jest adresem IPv6." -#: netbox/dcim/models/devices.py:964 +#: netbox/dcim/models/devices.py:956 #, python-brace-format msgid "" "The assigned platform is limited to {platform_manufacturer} device types, " @@ -6208,12 +6735,17 @@ msgstr "" "Przydzielona platforma jest ograniczona do {platform_manufacturer} typy " "urządzeń, ale typ tego urządzenia należy do {devicetype_manufacturer}." -#: netbox/dcim/models/devices.py:975 +#: netbox/dcim/models/devices.py:967 #, python-brace-format msgid "The assigned cluster belongs to a different site ({site})" msgstr "Przypisany klaster należy do innej lokalizacji ({site})" -#: netbox/dcim/models/devices.py:983 +#: netbox/dcim/models/devices.py:974 +#, python-brace-format +msgid "The assigned cluster belongs to a different location ({location})" +msgstr "Przypisany klaster należy do innej lokalizacji ({location})" + +#: netbox/dcim/models/devices.py:982 msgid "A device assigned to a virtual chassis must have its position defined." msgstr "" "Urządzenie przypisane do wirtualnej obudowy musi mieć zdefiniowane " @@ -6228,15 +6760,15 @@ msgstr "" "Nie można usunąć urządzenia z wirtualnej obudowy {virtual_chassis} ponieważ " "jest obecnie wyznaczony jako jego mistrz." -#: netbox/dcim/models/devices.py:1196 +#: netbox/dcim/models/devices.py:1204 msgid "module" msgstr "moduł" -#: netbox/dcim/models/devices.py:1197 +#: netbox/dcim/models/devices.py:1205 msgid "modules" msgstr "modułów" -#: netbox/dcim/models/devices.py:1213 +#: netbox/dcim/models/devices.py:1218 #, python-brace-format msgid "" "Module must be installed within a module bay belonging to the assigned " @@ -6245,22 +6777,22 @@ msgstr "" "Moduł musi być zainstalowany w wnęce modułowej należącej do przypisanego " "urządzenia ({device})." -#: netbox/dcim/models/devices.py:1339 +#: netbox/dcim/models/devices.py:1346 msgid "domain" msgstr "domena" -#: netbox/dcim/models/devices.py:1352 netbox/dcim/models/devices.py:1353 +#: netbox/dcim/models/devices.py:1359 netbox/dcim/models/devices.py:1360 msgid "virtual chassis" msgstr "wirtualne podwozie" -#: netbox/dcim/models/devices.py:1368 +#: netbox/dcim/models/devices.py:1372 #, python-brace-format msgid "" "The selected master ({master}) is not assigned to this virtual chassis." msgstr "" "Wybrany mistrz ({master}) nie jest przypisany do tej wirtualnej obudowy." -#: netbox/dcim/models/devices.py:1384 +#: netbox/dcim/models/devices.py:1388 #, python-brace-format msgid "" "Unable to delete virtual chassis {self}. There are member interfaces which " @@ -6269,51 +6801,62 @@ msgstr "" "Nie można usunąć wirtualnej obudowy {self}. Istnieją interfejsy członów, " "które tworzą interfejsy LAG między podwoziami." -#: netbox/dcim/models/devices.py:1409 netbox/vpn/models/l2vpn.py:37 +#: netbox/dcim/models/devices.py:1414 netbox/vpn/models/l2vpn.py:37 msgid "identifier" msgstr "identyfikator" -#: netbox/dcim/models/devices.py:1410 +#: netbox/dcim/models/devices.py:1415 msgid "Numeric identifier unique to the parent device" msgstr "Identyfikator numeryczny unikalny dla urządzenia nadrzędnego" -#: netbox/dcim/models/devices.py:1438 netbox/extras/models/customfields.py:225 +#: netbox/dcim/models/devices.py:1443 netbox/extras/models/customfields.py:225 #: netbox/extras/models/models.py:107 netbox/extras/models/models.py:694 -#: netbox/netbox/models/__init__.py:115 +#: netbox/netbox/models/__init__.py:120 msgid "comments" msgstr "komentarzy" -#: netbox/dcim/models/devices.py:1454 +#: netbox/dcim/models/devices.py:1459 msgid "virtual device context" msgstr "kontekst urządzenia wirtualnego" -#: netbox/dcim/models/devices.py:1455 +#: netbox/dcim/models/devices.py:1460 msgid "virtual device contexts" msgstr "konteksty urządzeń wirtualnych" -#: netbox/dcim/models/devices.py:1487 +#: netbox/dcim/models/devices.py:1489 #, python-brace-format msgid "{ip} is not an IPv{family} address." msgstr "{ip} nie jest IPV{family} adres." -#: netbox/dcim/models/devices.py:1493 +#: netbox/dcim/models/devices.py:1495 msgid "Primary IP address must belong to an interface on the assigned device." msgstr "" "Podstawowy adres IP musi należeć do interfejsu na przypisanym urządzeniu." -#: netbox/dcim/models/mixins.py:15 netbox/extras/models/configs.py:41 -#: netbox/extras/models/models.py:313 netbox/extras/models/models.py:522 -#: netbox/extras/models/search.py:48 netbox/ipam/models/ip.py:194 -msgid "weight" -msgstr "waga" +#: netbox/dcim/models/devices.py:1527 +msgid "MAC addresses" +msgstr "Adresy MAC" -#: netbox/dcim/models/mixins.py:22 -msgid "weight unit" -msgstr "jednostka wagowa" +#: netbox/dcim/models/devices.py:1559 +msgid "" +"Cannot unassign MAC Address while it is designated as the primary MAC for an" +" object" +msgstr "" +"Nie można anulować przypisania adresu MAC, gdy jest on wyznaczony jako " +"główny MAC dla obiektu" -#: netbox/dcim/models/mixins.py:51 -msgid "Must specify a unit when setting a weight" -msgstr "Należy określić jednostkę podczas ustawiania wagi" +#: netbox/dcim/models/devices.py:1563 +msgid "" +"Cannot reassign MAC Address while it is designated as the primary MAC for an" +" object" +msgstr "" +"Nie można ponownie przypisać adresu MAC, gdy jest on wyznaczony jako główny " +"MAC dla obiektu" + +#: netbox/dcim/models/mixins.py:94 +#, python-brace-format +msgid "Please select a {scope_type}." +msgstr "Proszę wybrać {scope_type}." #: netbox/dcim/models/power.py:55 msgid "power panel" @@ -6323,7 +6866,7 @@ msgstr "panel zasilania" msgid "power panels" msgstr "panele zasilające" -#: netbox/dcim/models/power.py:70 +#: netbox/dcim/models/power.py:67 #, python-brace-format msgid "" "Location {location} ({location_site}) is in a different site than {site}" @@ -6331,43 +6874,43 @@ msgstr "" "Lokalizacja {location} ({location_site}) znajduje się w innej witrynie niż " "{site}" -#: netbox/dcim/models/power.py:108 +#: netbox/dcim/models/power.py:106 msgid "supply" msgstr "zapas" -#: netbox/dcim/models/power.py:114 +#: netbox/dcim/models/power.py:112 msgid "phase" msgstr "etap" -#: netbox/dcim/models/power.py:120 +#: netbox/dcim/models/power.py:118 msgid "voltage" msgstr "napięcie" -#: netbox/dcim/models/power.py:125 +#: netbox/dcim/models/power.py:123 msgid "amperage" msgstr "natężenie prądu" -#: netbox/dcim/models/power.py:130 +#: netbox/dcim/models/power.py:128 msgid "max utilization" msgstr "maksymalne wykorzystanie" -#: netbox/dcim/models/power.py:133 +#: netbox/dcim/models/power.py:131 msgid "Maximum permissible draw (percentage)" msgstr "Maksymalne dopuszczalne losowanie (procent)" -#: netbox/dcim/models/power.py:136 +#: netbox/dcim/models/power.py:134 msgid "available power" msgstr "dostępna moc" -#: netbox/dcim/models/power.py:164 +#: netbox/dcim/models/power.py:162 msgid "power feed" msgstr "zasilanie" -#: netbox/dcim/models/power.py:165 +#: netbox/dcim/models/power.py:163 msgid "power feeds" msgstr "zasilanie" -#: netbox/dcim/models/power.py:179 +#: netbox/dcim/models/power.py:174 #, python-brace-format msgid "" "Rack {rack} ({rack_site}) and power panel {powerpanel} ({powerpanel_site}) " @@ -6376,55 +6919,55 @@ msgstr "" "Szafa {rack} ({rack_site}) i panel zasilania {powerpanel} " "({powerpanel_site}) znajdują się na różnych terenach." -#: netbox/dcim/models/power.py:190 +#: netbox/dcim/models/power.py:185 msgid "Voltage cannot be negative for AC supply" msgstr "Napięcie nie może być ujemne dla zasilania prądem przemiennym" -#: netbox/dcim/models/racks.py:47 +#: netbox/dcim/models/racks.py:46 msgid "width" msgstr "szerokość" -#: netbox/dcim/models/racks.py:48 +#: netbox/dcim/models/racks.py:47 msgid "Rail-to-rail width" msgstr "Szerokość szyny do szyny" -#: netbox/dcim/models/racks.py:56 +#: netbox/dcim/models/racks.py:55 msgid "Height in rack units" msgstr "Wysokość w jednostkach szafy" -#: netbox/dcim/models/racks.py:60 +#: netbox/dcim/models/racks.py:59 msgid "starting unit" msgstr "jednostka startowa" -#: netbox/dcim/models/racks.py:62 +#: netbox/dcim/models/racks.py:61 msgid "Starting unit for rack" msgstr "Jednostka początkowa szafy" -#: netbox/dcim/models/racks.py:66 +#: netbox/dcim/models/racks.py:65 msgid "descending units" msgstr "jednostki malejące" -#: netbox/dcim/models/racks.py:67 +#: netbox/dcim/models/racks.py:66 msgid "Units are numbered top-to-bottom" msgstr "Jednostki są ponumerowane od góry do dołu" -#: netbox/dcim/models/racks.py:72 +#: netbox/dcim/models/racks.py:71 msgid "outer width" msgstr "szerokość zewnętrzna" -#: netbox/dcim/models/racks.py:75 +#: netbox/dcim/models/racks.py:74 msgid "Outer dimension of rack (width)" msgstr "Wymiar zewnętrzny szafy (szerokość)" -#: netbox/dcim/models/racks.py:78 +#: netbox/dcim/models/racks.py:77 msgid "outer depth" msgstr "głębokość zewnętrzna" -#: netbox/dcim/models/racks.py:81 +#: netbox/dcim/models/racks.py:80 msgid "Outer dimension of rack (depth)" msgstr "Wymiar zewnętrzny szafy (głębokość)" -#: netbox/dcim/models/racks.py:84 +#: netbox/dcim/models/racks.py:83 msgid "outer unit" msgstr "jednostka zewnętrzna" @@ -6448,7 +6991,7 @@ msgstr "maksymalna waga" msgid "Maximum load capacity for the rack" msgstr "Maksymalna nośność regału" -#: netbox/dcim/models/racks.py:125 netbox/dcim/models/racks.py:252 +#: netbox/dcim/models/racks.py:125 netbox/dcim/models/racks.py:247 msgid "form factor" msgstr "współczynnik kształtu" @@ -6460,57 +7003,57 @@ msgstr "typ szafy" msgid "rack types" msgstr "typy szaf" -#: netbox/dcim/models/racks.py:180 netbox/dcim/models/racks.py:379 +#: netbox/dcim/models/racks.py:177 netbox/dcim/models/racks.py:368 msgid "Must specify a unit when setting an outer width/depth" msgstr "" "Należy określić jednostkę podczas ustawiania szerokości/głębokości " "zewnętrznej" -#: netbox/dcim/models/racks.py:184 netbox/dcim/models/racks.py:383 +#: netbox/dcim/models/racks.py:181 netbox/dcim/models/racks.py:372 msgid "Must specify a unit when setting a maximum weight" msgstr "Należy określić jednostkę podczas ustawiania maksymalnej wagi" -#: netbox/dcim/models/racks.py:230 +#: netbox/dcim/models/racks.py:227 msgid "rack role" msgstr "rola szafy" -#: netbox/dcim/models/racks.py:231 +#: netbox/dcim/models/racks.py:228 msgid "rack roles" msgstr "role szafy" -#: netbox/dcim/models/racks.py:274 +#: netbox/dcim/models/racks.py:265 msgid "facility ID" msgstr "Identyfikator obiektu" -#: netbox/dcim/models/racks.py:275 +#: netbox/dcim/models/racks.py:266 msgid "Locally-assigned identifier" msgstr "Lokalnie przypisany identyfikator" -#: netbox/dcim/models/racks.py:308 netbox/ipam/forms/bulk_import.py:201 -#: netbox/ipam/forms/bulk_import.py:266 netbox/ipam/forms/bulk_import.py:301 -#: netbox/ipam/forms/bulk_import.py:483 -#: netbox/virtualization/forms/bulk_import.py:112 +#: netbox/dcim/models/racks.py:299 netbox/ipam/forms/bulk_import.py:197 +#: netbox/ipam/forms/bulk_import.py:265 netbox/ipam/forms/bulk_import.py:300 +#: netbox/ipam/forms/bulk_import.py:482 +#: netbox/virtualization/forms/bulk_import.py:118 msgid "Functional role" msgstr "Funkcjonalna rola" -#: netbox/dcim/models/racks.py:321 +#: netbox/dcim/models/racks.py:312 msgid "A unique tag used to identify this rack" msgstr "Unikalny tag używany do identyfikacji tej szafy" -#: netbox/dcim/models/racks.py:359 +#: netbox/dcim/models/racks.py:351 msgid "rack" msgstr "szafa" -#: netbox/dcim/models/racks.py:360 +#: netbox/dcim/models/racks.py:352 msgid "racks" msgstr "szafy" -#: netbox/dcim/models/racks.py:375 +#: netbox/dcim/models/racks.py:364 #, python-brace-format msgid "Assigned location must belong to parent site ({site})." msgstr "Przypisana lokalizacja musi należeć do witryny nadrzędnej ({site})." -#: netbox/dcim/models/racks.py:393 +#: netbox/dcim/models/racks.py:387 #, python-brace-format msgid "" "Rack must be at least {min_height}U tall to house currently installed " @@ -6519,7 +7062,7 @@ msgstr "" "Szafa musi być mieć najmniej {min_height}U wysokości aby pomieścić aktualnie" " zainstalowane urządzeń." -#: netbox/dcim/models/racks.py:400 +#: netbox/dcim/models/racks.py:396 #, python-brace-format msgid "" "Rack unit numbering must begin at {position} or less to house currently " @@ -6528,118 +7071,118 @@ msgstr "" "Numeracja jednostek szafy musi rozpoczynać się od {position} lub mniej, aby " "pomieścić aktualnie zainstalowane urządzenia." -#: netbox/dcim/models/racks.py:408 +#: netbox/dcim/models/racks.py:404 #, python-brace-format msgid "Location must be from the same site, {site}." msgstr "Lokalizacja musi pochodzić z tego samego miejsca, {site}." -#: netbox/dcim/models/racks.py:670 +#: netbox/dcim/models/racks.py:666 msgid "units" msgstr "jednostki" -#: netbox/dcim/models/racks.py:696 +#: netbox/dcim/models/racks.py:692 msgid "rack reservation" msgstr "rezerwacja szafy" -#: netbox/dcim/models/racks.py:697 +#: netbox/dcim/models/racks.py:693 msgid "rack reservations" msgstr "rezerwacje szafy" -#: netbox/dcim/models/racks.py:714 +#: netbox/dcim/models/racks.py:707 #, python-brace-format msgid "Invalid unit(s) for {height}U rack: {unit_list}" msgstr "Nieprawidłowa jednostka (jednostki) dla szafy {height}U: {unit_list}" -#: netbox/dcim/models/racks.py:727 +#: netbox/dcim/models/racks.py:720 #, python-brace-format msgid "The following units have already been reserved: {unit_list}" msgstr "Następujące jednostki zostały już zarezerwowane: {unit_list}" -#: netbox/dcim/models/sites.py:49 +#: netbox/dcim/models/sites.py:53 msgid "A top-level region with this name already exists." msgstr "Region najwyższego poziomu o tej nazwie już istnieje." -#: netbox/dcim/models/sites.py:59 +#: netbox/dcim/models/sites.py:63 msgid "A top-level region with this slug already exists." msgstr "Region najwyższego poziomu z tym identyfikatorem już istnieje." -#: netbox/dcim/models/sites.py:62 +#: netbox/dcim/models/sites.py:66 msgid "region" msgstr "regionu" -#: netbox/dcim/models/sites.py:63 +#: netbox/dcim/models/sites.py:67 msgid "regions" msgstr "regionów" -#: netbox/dcim/models/sites.py:102 +#: netbox/dcim/models/sites.py:109 msgid "A top-level site group with this name already exists." msgstr "Grupa witryn najwyższego poziomu o tej nazwie już istnieje." -#: netbox/dcim/models/sites.py:112 +#: netbox/dcim/models/sites.py:119 msgid "A top-level site group with this slug already exists." msgstr "Grupa terenów najwyższego poziomu z tym identyfikatorem już istnieje." -#: netbox/dcim/models/sites.py:115 +#: netbox/dcim/models/sites.py:122 msgid "site group" msgstr "grupa witryn" -#: netbox/dcim/models/sites.py:116 +#: netbox/dcim/models/sites.py:123 msgid "site groups" msgstr "grupy witryn" -#: netbox/dcim/models/sites.py:141 +#: netbox/dcim/models/sites.py:145 msgid "Full name of the site" msgstr "Pełna nazwa strony" -#: netbox/dcim/models/sites.py:181 netbox/dcim/models/sites.py:279 +#: netbox/dcim/models/sites.py:181 netbox/dcim/models/sites.py:283 msgid "facility" msgstr "obiekt" -#: netbox/dcim/models/sites.py:184 netbox/dcim/models/sites.py:282 +#: netbox/dcim/models/sites.py:184 netbox/dcim/models/sites.py:286 msgid "Local facility ID or description" msgstr "Identyfikator lub opis lokalnego obiektu" -#: netbox/dcim/models/sites.py:195 +#: netbox/dcim/models/sites.py:196 msgid "physical address" msgstr "adres fizyczny" -#: netbox/dcim/models/sites.py:198 +#: netbox/dcim/models/sites.py:199 msgid "Physical location of the building" msgstr "Fizyczne położenie budynku" -#: netbox/dcim/models/sites.py:201 +#: netbox/dcim/models/sites.py:202 msgid "shipping address" msgstr "adres wysyłki" -#: netbox/dcim/models/sites.py:204 +#: netbox/dcim/models/sites.py:205 msgid "If different from the physical address" msgstr "Jeśli różni się od adresu fizycznego" -#: netbox/dcim/models/sites.py:238 +#: netbox/dcim/models/sites.py:245 msgid "site" msgstr "miejsce" -#: netbox/dcim/models/sites.py:239 +#: netbox/dcim/models/sites.py:246 msgid "sites" msgstr "witryny" -#: netbox/dcim/models/sites.py:309 +#: netbox/dcim/models/sites.py:319 msgid "A location with this name already exists within the specified site." msgstr "Lokalizacja o tej nazwie istnieje już w określonej witrynie." -#: netbox/dcim/models/sites.py:319 +#: netbox/dcim/models/sites.py:329 msgid "A location with this slug already exists within the specified site." msgstr "Lokalizacja z tym identyfikatorem już istnieje na określonym terenie." -#: netbox/dcim/models/sites.py:322 +#: netbox/dcim/models/sites.py:332 msgid "location" msgstr "lokalizacja" -#: netbox/dcim/models/sites.py:323 +#: netbox/dcim/models/sites.py:333 msgid "locations" msgstr "lokalizacje" -#: netbox/dcim/models/sites.py:337 +#: netbox/dcim/models/sites.py:344 #, python-brace-format msgid "Parent location ({parent}) must belong to the same site ({site})." msgstr "" @@ -6654,11 +7197,11 @@ msgstr "Wypowiedzenie A" msgid "Termination B" msgstr "Wypowiedzenie B" -#: netbox/dcim/tables/cables.py:66 netbox/wireless/tables/wirelesslink.py:23 +#: netbox/dcim/tables/cables.py:66 netbox/wireless/tables/wirelesslink.py:22 msgid "Device A" msgstr "Urządzenie A" -#: netbox/dcim/tables/cables.py:72 netbox/wireless/tables/wirelesslink.py:32 +#: netbox/dcim/tables/cables.py:72 netbox/wireless/tables/wirelesslink.py:31 msgid "Device B" msgstr "Urządzenie B" @@ -6692,97 +7235,91 @@ msgstr "Strona B" msgid "Reachable" msgstr "Osiągnięty" -#: netbox/dcim/tables/devices.py:58 netbox/dcim/tables/devices.py:106 -#: netbox/dcim/tables/racks.py:150 netbox/dcim/tables/sites.py:105 -#: netbox/dcim/tables/sites.py:148 netbox/extras/tables/tables.py:545 +#: netbox/dcim/tables/devices.py:69 netbox/dcim/tables/devices.py:117 +#: netbox/dcim/tables/racks.py:149 netbox/dcim/tables/sites.py:104 +#: netbox/dcim/tables/sites.py:147 netbox/extras/tables/tables.py:545 #: netbox/netbox/navigation/menu.py:69 netbox/netbox/navigation/menu.py:73 #: netbox/netbox/navigation/menu.py:75 #: netbox/virtualization/forms/model_forms.py:122 -#: netbox/virtualization/tables/clusters.py:83 -#: netbox/virtualization/views.py:204 +#: netbox/virtualization/tables/clusters.py:87 +#: netbox/virtualization/views.py:216 msgid "Devices" msgstr "Urządzenia" -#: netbox/dcim/tables/devices.py:63 netbox/dcim/tables/devices.py:111 -#: netbox/virtualization/tables/clusters.py:88 +#: netbox/dcim/tables/devices.py:74 netbox/dcim/tables/devices.py:122 +#: netbox/virtualization/tables/clusters.py:92 msgid "VMs" msgstr "maszyny wirtualne" -#: netbox/dcim/tables/devices.py:100 netbox/dcim/tables/devices.py:216 -#: netbox/extras/forms/model_forms.py:630 +#: netbox/dcim/tables/devices.py:111 netbox/dcim/tables/devices.py:227 +#: netbox/extras/forms/model_forms.py:644 #: netbox/templates/dcim/device.html:112 -#: netbox/templates/dcim/device/render_config.html:11 -#: netbox/templates/dcim/device/render_config.html:14 #: netbox/templates/dcim/devicerole.html:44 #: netbox/templates/dcim/platform.html:41 #: netbox/templates/extras/configtemplate.html:10 +#: netbox/templates/extras/object_render_config.html:12 +#: netbox/templates/extras/object_render_config.html:15 #: netbox/templates/virtualization/virtualmachine.html:48 -#: netbox/templates/virtualization/virtualmachine/render_config.html:11 -#: netbox/templates/virtualization/virtualmachine/render_config.html:14 -#: netbox/virtualization/tables/virtualmachines.py:107 +#: netbox/virtualization/tables/virtualmachines.py:77 msgid "Config Template" msgstr "Szablon konfiguracji" -#: netbox/dcim/tables/devices.py:150 netbox/templates/dcim/sitegroup.html:26 -msgid "Site Group" -msgstr "Grupa witryn" - -#: netbox/dcim/tables/devices.py:187 netbox/dcim/tables/devices.py:1068 -#: netbox/ipam/forms/bulk_import.py:527 netbox/ipam/forms/model_forms.py:306 -#: netbox/ipam/forms/model_forms.py:319 netbox/ipam/tables/ip.py:356 -#: netbox/ipam/tables/ip.py:423 netbox/ipam/tables/ip.py:446 +#: netbox/dcim/tables/devices.py:198 netbox/dcim/tables/devices.py:1100 +#: netbox/ipam/forms/bulk_import.py:562 netbox/ipam/forms/model_forms.py:316 +#: netbox/ipam/forms/model_forms.py:329 netbox/ipam/tables/ip.py:308 +#: netbox/ipam/tables/ip.py:375 netbox/ipam/tables/ip.py:398 #: netbox/templates/ipam/ipaddress.html:11 -#: netbox/virtualization/tables/virtualmachines.py:95 +#: netbox/virtualization/tables/virtualmachines.py:65 msgid "IP Address" msgstr "Adres IP" -#: netbox/dcim/tables/devices.py:191 netbox/dcim/tables/devices.py:1072 -#: netbox/virtualization/tables/virtualmachines.py:86 +#: netbox/dcim/tables/devices.py:202 netbox/dcim/tables/devices.py:1104 +#: netbox/virtualization/tables/virtualmachines.py:56 msgid "IPv4 Address" msgstr "Adres IPv4" -#: netbox/dcim/tables/devices.py:195 netbox/dcim/tables/devices.py:1076 -#: netbox/virtualization/tables/virtualmachines.py:90 +#: netbox/dcim/tables/devices.py:206 netbox/dcim/tables/devices.py:1108 +#: netbox/virtualization/tables/virtualmachines.py:60 msgid "IPv6 Address" msgstr "Adres IPv6" -#: netbox/dcim/tables/devices.py:210 +#: netbox/dcim/tables/devices.py:221 msgid "VC Position" msgstr "Pozycja VC" -#: netbox/dcim/tables/devices.py:213 +#: netbox/dcim/tables/devices.py:224 msgid "VC Priority" msgstr "Priorytet VC" -#: netbox/dcim/tables/devices.py:220 netbox/templates/dcim/device_edit.html:38 +#: netbox/dcim/tables/devices.py:231 netbox/templates/dcim/device_edit.html:38 #: netbox/templates/dcim/devicebay_populate.html:16 msgid "Parent Device" msgstr "Urządzenie nadrzędne" -#: netbox/dcim/tables/devices.py:225 +#: netbox/dcim/tables/devices.py:236 msgid "Position (Device Bay)" msgstr "Pozycja (gniazdo urządzenia)" -#: netbox/dcim/tables/devices.py:234 +#: netbox/dcim/tables/devices.py:245 msgid "Console ports" msgstr "Porty konsoli" -#: netbox/dcim/tables/devices.py:237 +#: netbox/dcim/tables/devices.py:248 msgid "Console server ports" msgstr "Porty serwera konsoli" -#: netbox/dcim/tables/devices.py:240 +#: netbox/dcim/tables/devices.py:251 msgid "Power ports" msgstr "Porty zasilania" -#: netbox/dcim/tables/devices.py:243 +#: netbox/dcim/tables/devices.py:254 msgid "Power outlets" msgstr "Gniazdka elektryczne" -#: netbox/dcim/tables/devices.py:246 netbox/dcim/tables/devices.py:1081 -#: netbox/dcim/tables/devicetypes.py:128 netbox/dcim/views.py:1040 -#: netbox/dcim/views.py:1279 netbox/dcim/views.py:1975 -#: netbox/netbox/navigation/menu.py:94 netbox/netbox/navigation/menu.py:250 +#: netbox/dcim/tables/devices.py:257 netbox/dcim/tables/devices.py:1113 +#: netbox/dcim/tables/devicetypes.py:133 netbox/dcim/views.py:1144 +#: netbox/dcim/views.py:1388 netbox/dcim/views.py:2139 +#: netbox/netbox/navigation/menu.py:94 netbox/netbox/navigation/menu.py:258 #: netbox/templates/dcim/device/base.html:37 #: netbox/templates/dcim/device_list.html:43 #: netbox/templates/dcim/devicetype/base.html:34 @@ -6792,35 +7329,35 @@ msgstr "Gniazdka elektryczne" #: netbox/templates/dcim/virtualdevicecontext.html:81 #: netbox/templates/virtualization/virtualmachine/base.html:27 #: netbox/templates/virtualization/virtualmachine_list.html:14 -#: netbox/virtualization/tables/virtualmachines.py:101 -#: netbox/virtualization/views.py:364 netbox/wireless/tables/wirelesslan.py:55 +#: netbox/virtualization/tables/virtualmachines.py:71 +#: netbox/virtualization/views.py:381 netbox/wireless/tables/wirelesslan.py:63 msgid "Interfaces" msgstr "Interfejsy" -#: netbox/dcim/tables/devices.py:249 +#: netbox/dcim/tables/devices.py:260 msgid "Front ports" msgstr "Porty przednie" -#: netbox/dcim/tables/devices.py:255 +#: netbox/dcim/tables/devices.py:266 msgid "Device bays" msgstr "Wnęsy na urządzenia" -#: netbox/dcim/tables/devices.py:258 +#: netbox/dcim/tables/devices.py:269 msgid "Module bays" msgstr "Wnęsy modułowe" -#: netbox/dcim/tables/devices.py:261 +#: netbox/dcim/tables/devices.py:272 msgid "Inventory items" msgstr "Elementy inwentaryzacyjne" -#: netbox/dcim/tables/devices.py:305 netbox/dcim/tables/modules.py:57 +#: netbox/dcim/tables/devices.py:315 netbox/dcim/tables/modules.py:57 #: netbox/templates/dcim/modulebay.html:17 msgid "Module Bay" msgstr "Moduł Bay" -#: netbox/dcim/tables/devices.py:318 netbox/dcim/tables/devicetypes.py:47 -#: netbox/dcim/tables/devicetypes.py:143 netbox/dcim/views.py:1115 -#: netbox/dcim/views.py:2073 netbox/netbox/navigation/menu.py:103 +#: netbox/dcim/tables/devices.py:328 netbox/dcim/tables/devicetypes.py:52 +#: netbox/dcim/tables/devicetypes.py:148 netbox/dcim/views.py:1219 +#: netbox/dcim/views.py:2237 netbox/netbox/navigation/menu.py:103 #: netbox/templates/dcim/device/base.html:52 #: netbox/templates/dcim/device_list.html:71 #: netbox/templates/dcim/devicetype/base.html:49 @@ -6829,124 +7366,133 @@ msgstr "Moduł Bay" msgid "Inventory Items" msgstr "Przedmioty magazynowe" -#: netbox/dcim/tables/devices.py:333 +#: netbox/dcim/tables/devices.py:343 msgid "Cable Color" msgstr "Kolor kabla" -#: netbox/dcim/tables/devices.py:339 +#: netbox/dcim/tables/devices.py:349 msgid "Link Peers" msgstr "Łącz rówieśników" -#: netbox/dcim/tables/devices.py:342 +#: netbox/dcim/tables/devices.py:352 msgid "Mark Connected" msgstr "Oznacz Połączony" -#: netbox/dcim/tables/devices.py:461 +#: netbox/dcim/tables/devices.py:471 msgid "Maximum draw (W)" msgstr "Maksymalne wyciąganie (W)" -#: netbox/dcim/tables/devices.py:464 +#: netbox/dcim/tables/devices.py:474 msgid "Allocated draw (W)" msgstr "Przydzielone losowanie (W)" -#: netbox/dcim/tables/devices.py:558 netbox/ipam/forms/model_forms.py:734 -#: netbox/ipam/tables/fhrp.py:28 netbox/ipam/views.py:596 -#: netbox/ipam/views.py:696 netbox/netbox/navigation/menu.py:158 -#: netbox/netbox/navigation/menu.py:160 -#: netbox/templates/dcim/interface.html:339 +#: netbox/dcim/tables/devices.py:572 netbox/ipam/forms/model_forms.py:784 +#: netbox/ipam/tables/fhrp.py:28 netbox/ipam/views.py:633 +#: netbox/ipam/views.py:738 netbox/netbox/navigation/menu.py:164 +#: netbox/netbox/navigation/menu.py:166 +#: netbox/templates/dcim/interface.html:396 #: netbox/templates/ipam/ipaddress_bulk_add.html:15 #: netbox/templates/ipam/service.html:40 -#: netbox/templates/virtualization/vminterface.html:85 +#: netbox/templates/virtualization/vminterface.html:101 #: netbox/vpn/tables/tunnels.py:98 msgid "IP Addresses" msgstr "Adresy IP" -#: netbox/dcim/tables/devices.py:564 netbox/netbox/navigation/menu.py:202 +#: netbox/dcim/tables/devices.py:578 netbox/netbox/navigation/menu.py:210 #: netbox/templates/ipam/inc/panels/fhrp_groups.html:6 msgid "FHRP Groups" msgstr "Grupy FHRP" -#: netbox/dcim/tables/devices.py:576 netbox/templates/dcim/interface.html:89 -#: netbox/templates/virtualization/vminterface.html:67 +#: netbox/dcim/tables/devices.py:590 netbox/templates/dcim/interface.html:95 +#: netbox/templates/virtualization/vminterface.html:59 #: netbox/templates/vpn/tunnel.html:18 #: netbox/templates/vpn/tunneltermination.html:13 #: netbox/vpn/forms/bulk_edit.py:76 netbox/vpn/forms/bulk_import.py:76 #: netbox/vpn/forms/filtersets.py:42 netbox/vpn/forms/filtersets.py:82 -#: netbox/vpn/forms/model_forms.py:60 netbox/vpn/forms/model_forms.py:145 +#: netbox/vpn/forms/model_forms.py:61 netbox/vpn/forms/model_forms.py:146 #: netbox/vpn/tables/tunnels.py:78 msgid "Tunnel" msgstr "Tunel" -#: netbox/dcim/tables/devices.py:604 netbox/dcim/tables/devicetypes.py:227 +#: netbox/dcim/tables/devices.py:626 netbox/dcim/tables/devicetypes.py:234 #: netbox/templates/dcim/interface.html:65 msgid "Management Only" msgstr "Tylko zarządzanie" -#: netbox/dcim/tables/devices.py:623 +#: netbox/dcim/tables/devices.py:645 msgid "VDCs" msgstr "VDC" -#: netbox/dcim/tables/devices.py:873 netbox/templates/dcim/modulebay.html:53 +#: netbox/dcim/tables/devices.py:652 netbox/templates/dcim/interface.html:163 +msgid "Virtual Circuit" +msgstr "Wirtualny obwód" + +#: netbox/dcim/tables/devices.py:904 netbox/templates/dcim/modulebay.html:53 msgid "Installed Module" msgstr "Zainstalowany moduł" -#: netbox/dcim/tables/devices.py:876 +#: netbox/dcim/tables/devices.py:907 msgid "Module Serial" msgstr "Moduł szeregowy" -#: netbox/dcim/tables/devices.py:880 +#: netbox/dcim/tables/devices.py:911 msgid "Module Asset Tag" msgstr "Etykietka zasobów modułu" -#: netbox/dcim/tables/devices.py:889 +#: netbox/dcim/tables/devices.py:920 msgid "Module Status" msgstr "Status modułu" -#: netbox/dcim/tables/devices.py:944 netbox/dcim/tables/devicetypes.py:312 -#: netbox/templates/dcim/inventoryitem.html:40 +#: netbox/dcim/tables/devices.py:974 netbox/dcim/tables/devicetypes.py:319 +#: netbox/templates/dcim/inventoryitem.html:44 msgid "Component" msgstr "Komponent" -#: netbox/dcim/tables/devices.py:1000 +#: netbox/dcim/tables/devices.py:1032 msgid "Items" msgstr "Przedmioty" -#: netbox/dcim/tables/devicetypes.py:37 netbox/netbox/navigation/menu.py:84 +#: netbox/dcim/tables/devicetypes.py:37 netbox/netbox/navigation/menu.py:60 +#: netbox/netbox/navigation/menu.py:62 +msgid "Rack Types" +msgstr "Rodzaje szaf" + +#: netbox/dcim/tables/devicetypes.py:42 netbox/netbox/navigation/menu.py:84 #: netbox/netbox/navigation/menu.py:86 msgid "Device Types" msgstr "Rodzaje urządzeń" -#: netbox/dcim/tables/devicetypes.py:42 netbox/netbox/navigation/menu.py:87 +#: netbox/dcim/tables/devicetypes.py:47 netbox/netbox/navigation/menu.py:87 msgid "Module Types" msgstr "Rodzaje modułów" -#: netbox/dcim/tables/devicetypes.py:52 netbox/extras/forms/filtersets.py:371 -#: netbox/extras/forms/model_forms.py:537 netbox/extras/tables/tables.py:540 +#: netbox/dcim/tables/devicetypes.py:57 netbox/extras/forms/filtersets.py:378 +#: netbox/extras/forms/model_forms.py:551 netbox/extras/tables/tables.py:540 #: netbox/netbox/navigation/menu.py:78 msgid "Platforms" msgstr "Platformy" -#: netbox/dcim/tables/devicetypes.py:84 +#: netbox/dcim/tables/devicetypes.py:89 #: netbox/templates/dcim/devicetype.html:29 msgid "Default Platform" msgstr "Domyślna platforma" -#: netbox/dcim/tables/devicetypes.py:88 +#: netbox/dcim/tables/devicetypes.py:93 #: netbox/templates/dcim/devicetype.html:45 msgid "Full Depth" msgstr "Pełna głębokość" -#: netbox/dcim/tables/devicetypes.py:98 +#: netbox/dcim/tables/devicetypes.py:103 msgid "U Height" msgstr "Wysokość U" -#: netbox/dcim/tables/devicetypes.py:113 netbox/dcim/tables/modules.py:26 +#: netbox/dcim/tables/devicetypes.py:118 netbox/dcim/tables/modules.py:26 #: netbox/dcim/tables/racks.py:89 msgid "Instances" msgstr "Instancje" -#: netbox/dcim/tables/devicetypes.py:116 netbox/dcim/views.py:980 -#: netbox/dcim/views.py:1219 netbox/dcim/views.py:1911 +#: netbox/dcim/tables/devicetypes.py:121 netbox/dcim/views.py:1084 +#: netbox/dcim/views.py:1328 netbox/dcim/views.py:2075 #: netbox/netbox/navigation/menu.py:97 #: netbox/templates/dcim/device/base.html:25 #: netbox/templates/dcim/device_list.html:15 @@ -6956,8 +7502,8 @@ msgstr "Instancje" msgid "Console Ports" msgstr "Porty konsoli" -#: netbox/dcim/tables/devicetypes.py:119 netbox/dcim/views.py:995 -#: netbox/dcim/views.py:1234 netbox/dcim/views.py:1927 +#: netbox/dcim/tables/devicetypes.py:124 netbox/dcim/views.py:1099 +#: netbox/dcim/views.py:1343 netbox/dcim/views.py:2091 #: netbox/netbox/navigation/menu.py:98 #: netbox/templates/dcim/device/base.html:28 #: netbox/templates/dcim/device_list.html:22 @@ -6967,8 +7513,8 @@ msgstr "Porty konsoli" msgid "Console Server Ports" msgstr "Porty serwera konsoli" -#: netbox/dcim/tables/devicetypes.py:122 netbox/dcim/views.py:1010 -#: netbox/dcim/views.py:1249 netbox/dcim/views.py:1943 +#: netbox/dcim/tables/devicetypes.py:127 netbox/dcim/views.py:1114 +#: netbox/dcim/views.py:1358 netbox/dcim/views.py:2107 #: netbox/netbox/navigation/menu.py:99 #: netbox/templates/dcim/device/base.html:31 #: netbox/templates/dcim/device_list.html:29 @@ -6978,8 +7524,8 @@ msgstr "Porty serwera konsoli" msgid "Power Ports" msgstr "Porty zasilania" -#: netbox/dcim/tables/devicetypes.py:125 netbox/dcim/views.py:1025 -#: netbox/dcim/views.py:1264 netbox/dcim/views.py:1959 +#: netbox/dcim/tables/devicetypes.py:130 netbox/dcim/views.py:1129 +#: netbox/dcim/views.py:1373 netbox/dcim/views.py:2123 #: netbox/netbox/navigation/menu.py:100 #: netbox/templates/dcim/device/base.html:34 #: netbox/templates/dcim/device_list.html:36 @@ -6989,8 +7535,8 @@ msgstr "Porty zasilania" msgid "Power Outlets" msgstr "Gniazdka elektryczne" -#: netbox/dcim/tables/devicetypes.py:131 netbox/dcim/views.py:1055 -#: netbox/dcim/views.py:1294 netbox/dcim/views.py:1997 +#: netbox/dcim/tables/devicetypes.py:136 netbox/dcim/views.py:1159 +#: netbox/dcim/views.py:1403 netbox/dcim/views.py:2161 #: netbox/netbox/navigation/menu.py:95 #: netbox/templates/dcim/device/base.html:40 #: netbox/templates/dcim/devicetype/base.html:37 @@ -6999,8 +7545,8 @@ msgstr "Gniazdka elektryczne" msgid "Front Ports" msgstr "Porty przednie" -#: netbox/dcim/tables/devicetypes.py:134 netbox/dcim/views.py:1070 -#: netbox/dcim/views.py:1309 netbox/dcim/views.py:2013 +#: netbox/dcim/tables/devicetypes.py:139 netbox/dcim/views.py:1174 +#: netbox/dcim/views.py:1418 netbox/dcim/views.py:2177 #: netbox/netbox/navigation/menu.py:96 #: netbox/templates/dcim/device/base.html:43 #: netbox/templates/dcim/device_list.html:50 @@ -7010,16 +7556,16 @@ msgstr "Porty przednie" msgid "Rear Ports" msgstr "Tylne porty" -#: netbox/dcim/tables/devicetypes.py:137 netbox/dcim/views.py:1100 -#: netbox/dcim/views.py:2053 netbox/netbox/navigation/menu.py:102 +#: netbox/dcim/tables/devicetypes.py:142 netbox/dcim/views.py:1204 +#: netbox/dcim/views.py:2217 netbox/netbox/navigation/menu.py:102 #: netbox/templates/dcim/device/base.html:49 #: netbox/templates/dcim/device_list.html:57 #: netbox/templates/dcim/devicetype/base.html:46 msgid "Device Bays" msgstr "Wnęsy na urządzenia" -#: netbox/dcim/tables/devicetypes.py:140 netbox/dcim/views.py:1085 -#: netbox/dcim/views.py:1324 netbox/dcim/views.py:2033 +#: netbox/dcim/tables/devicetypes.py:145 netbox/dcim/views.py:1189 +#: netbox/dcim/views.py:1433 netbox/dcim/views.py:2197 #: netbox/netbox/navigation/menu.py:101 #: netbox/templates/dcim/device/base.html:46 #: netbox/templates/dcim/device_list.html:64 @@ -7029,7 +7575,7 @@ msgstr "Wnęsy na urządzenia" msgid "Module Bays" msgstr "Wnęsy modułowe" -#: netbox/dcim/tables/power.py:36 netbox/netbox/navigation/menu.py:297 +#: netbox/dcim/tables/power.py:36 netbox/netbox/navigation/menu.py:318 #: netbox/templates/dcim/powerpanel.html:51 msgid "Power Feeds" msgstr "Zasilanie zasilania" @@ -7042,109 +7588,104 @@ msgstr "Maksymalne wykorzystanie" msgid "Available Power (VA)" msgstr "Dostępna moc (VA)" -#: netbox/dcim/tables/racks.py:30 netbox/dcim/tables/sites.py:143 +#: netbox/dcim/tables/racks.py:30 netbox/dcim/tables/sites.py:142 #: netbox/netbox/navigation/menu.py:43 netbox/netbox/navigation/menu.py:47 #: netbox/netbox/navigation/menu.py:49 msgid "Racks" msgstr "Szafy" -#: netbox/dcim/tables/racks.py:63 netbox/dcim/tables/racks.py:142 +#: netbox/dcim/tables/racks.py:63 netbox/dcim/tables/racks.py:141 #: netbox/templates/dcim/device.html:318 #: netbox/templates/dcim/inc/panels/racktype_dimensions.html:14 msgid "Height" msgstr "Wysokość" -#: netbox/dcim/tables/racks.py:67 netbox/dcim/tables/racks.py:165 +#: netbox/dcim/tables/racks.py:67 netbox/dcim/tables/racks.py:164 #: netbox/templates/dcim/inc/panels/racktype_dimensions.html:18 msgid "Outer Width" msgstr "Szerokość zewnętrzna" -#: netbox/dcim/tables/racks.py:71 netbox/dcim/tables/racks.py:169 +#: netbox/dcim/tables/racks.py:71 netbox/dcim/tables/racks.py:168 #: netbox/templates/dcim/inc/panels/racktype_dimensions.html:28 msgid "Outer Depth" msgstr "Głębokość zewnętrzna" -#: netbox/dcim/tables/racks.py:79 netbox/dcim/tables/racks.py:177 +#: netbox/dcim/tables/racks.py:79 netbox/dcim/tables/racks.py:176 msgid "Max Weight" msgstr "Maksymalna waga" -#: netbox/dcim/tables/racks.py:154 +#: netbox/dcim/tables/racks.py:153 msgid "Space" msgstr "Przestrzeń" #: netbox/dcim/tables/sites.py:30 netbox/dcim/tables/sites.py:57 -#: netbox/extras/forms/filtersets.py:351 -#: netbox/extras/forms/model_forms.py:517 netbox/ipam/forms/bulk_edit.py:131 -#: netbox/ipam/forms/model_forms.py:153 netbox/ipam/tables/asn.py:66 +#: netbox/extras/forms/filtersets.py:358 +#: netbox/extras/forms/model_forms.py:531 netbox/ipam/forms/bulk_edit.py:134 +#: netbox/ipam/forms/model_forms.py:159 netbox/ipam/tables/asn.py:66 #: netbox/netbox/navigation/menu.py:15 netbox/netbox/navigation/menu.py:17 msgid "Sites" msgstr "Witryny" -#: netbox/dcim/tests/test_api.py:47 +#: netbox/dcim/tests/test_api.py:50 msgid "Test case must set peer_termination_type" msgstr "Przypadek testowy musi ustawić peer_termination_type" -#: netbox/dcim/views.py:138 +#: netbox/dcim/views.py:137 #, python-brace-format msgid "Disconnected {count} {type}" msgstr "Odłączony {count} {type}" -#: netbox/dcim/views.py:738 netbox/netbox/navigation/menu.py:51 +#: netbox/dcim/views.py:825 netbox/netbox/navigation/menu.py:51 msgid "Reservations" msgstr "Rezerwacje" -#: netbox/dcim/views.py:757 netbox/templates/dcim/location.html:90 +#: netbox/dcim/views.py:844 netbox/templates/dcim/location.html:90 #: netbox/templates/dcim/site.html:140 msgid "Non-Racked Devices" msgstr "Urządzenia poza szafami" -#: netbox/dcim/views.py:2086 netbox/extras/forms/model_forms.py:577 +#: netbox/dcim/views.py:2250 netbox/extras/forms/model_forms.py:591 #: netbox/templates/extras/configcontext.html:10 -#: netbox/virtualization/forms/model_forms.py:225 -#: netbox/virtualization/views.py:405 +#: netbox/virtualization/forms/model_forms.py:232 +#: netbox/virtualization/views.py:422 msgid "Config Context" msgstr "Kontekst konfiguracji" -#: netbox/dcim/views.py:2096 netbox/virtualization/views.py:415 +#: netbox/dcim/views.py:2260 netbox/virtualization/views.py:432 msgid "Render Config" msgstr "Konfiguracja renderowania" -#: netbox/dcim/views.py:2131 netbox/virtualization/views.py:450 -#, python-brace-format -msgid "An error occurred while rendering the template: {error}" -msgstr "Wystąpił błąd podczas renderowania szablonu: {error}" - -#: netbox/dcim/views.py:2149 netbox/extras/tables/tables.py:550 -#: netbox/netbox/navigation/menu.py:247 netbox/netbox/navigation/menu.py:249 -#: netbox/virtualization/views.py:178 +#: netbox/dcim/views.py:2273 netbox/extras/tables/tables.py:550 +#: netbox/netbox/navigation/menu.py:255 netbox/netbox/navigation/menu.py:257 +#: netbox/virtualization/views.py:190 msgid "Virtual Machines" msgstr "Maszyny wirtualne" -#: netbox/dcim/views.py:2907 +#: netbox/dcim/views.py:3106 #, python-brace-format msgid "Installed device {device} in bay {device_bay}." msgstr "Zainstalowane urządzenie {device} w zatoce {device_bay}." -#: netbox/dcim/views.py:2948 +#: netbox/dcim/views.py:3147 #, python-brace-format msgid "Removed device {device} from bay {device_bay}." msgstr "Usunięte urządzenie {device} z zatoki {device_bay}." -#: netbox/dcim/views.py:3054 netbox/ipam/tables/ip.py:234 +#: netbox/dcim/views.py:3263 netbox/ipam/tables/ip.py:180 msgid "Children" msgstr "Dzieci" -#: netbox/dcim/views.py:3520 +#: netbox/dcim/views.py:3730 #, python-brace-format msgid "Added member {device}" msgstr "Dodano członka {device}" -#: netbox/dcim/views.py:3567 +#: netbox/dcim/views.py:3779 #, python-brace-format msgid "Unable to remove master device {device} from the virtual chassis." msgstr "Nie można usunąć urządzenia głównego {device} z wirtualnego podwozia." -#: netbox/dcim/views.py:3580 +#: netbox/dcim/views.py:3792 #, python-brace-format msgid "Removed {device} from virtual chassis {chassis}" msgstr "Usunięto {device} z wirtualnego podwozia {chassis}" @@ -7243,7 +7784,7 @@ msgstr "Nie" #: netbox/extras/choices.py:108 netbox/templates/tenancy/contact.html:57 #: netbox/tenancy/forms/bulk_edit.py:118 -#: netbox/wireless/forms/model_forms.py:168 +#: netbox/wireless/forms/model_forms.py:171 msgid "Link" msgstr "Link" @@ -7263,15 +7804,15 @@ msgstr "Alfabetycznie (A-Z)" msgid "Alphabetical (Z-A)" msgstr "Alfabetycznie (Z-A)" -#: netbox/extras/choices.py:144 netbox/extras/choices.py:167 +#: netbox/extras/choices.py:144 netbox/extras/choices.py:165 msgid "Info" msgstr "Informacja" -#: netbox/extras/choices.py:145 netbox/extras/choices.py:168 +#: netbox/extras/choices.py:145 netbox/extras/choices.py:166 msgid "Success" msgstr "Sukces" -#: netbox/extras/choices.py:146 netbox/extras/choices.py:169 +#: netbox/extras/choices.py:146 netbox/extras/choices.py:167 msgid "Warning" msgstr "Ostrzeżenie" @@ -7279,52 +7820,29 @@ msgstr "Ostrzeżenie" msgid "Danger" msgstr "Niebezpieczeństwo" -#: netbox/extras/choices.py:165 +#: netbox/extras/choices.py:164 msgid "Debug" msgstr "Debugowanie" -#: netbox/extras/choices.py:166 netbox/netbox/choices.py:101 -msgid "Default" -msgstr "Domyślnie" - -#: netbox/extras/choices.py:170 +#: netbox/extras/choices.py:168 msgid "Failure" msgstr "Niepowodzenie" -#: netbox/extras/choices.py:186 -msgid "Hourly" -msgstr "Godzinowe" - -#: netbox/extras/choices.py:187 -msgid "12 hours" -msgstr "12 godzin" - -#: netbox/extras/choices.py:188 -msgid "Daily" -msgstr "Codziennie" - -#: netbox/extras/choices.py:189 -msgid "Weekly" -msgstr "Tygodniowy" - -#: netbox/extras/choices.py:190 -msgid "30 days" -msgstr "30 dni" - -#: netbox/extras/choices.py:226 +#: netbox/extras/choices.py:213 #: netbox/templates/dcim/virtualchassis_edit.html:107 #: netbox/templates/generic/bulk_add_component.html:68 #: netbox/templates/generic/object_edit.html:47 #: netbox/templates/generic/object_edit.html:80 +#: netbox/templates/htmx/quick_add.html:24 #: netbox/templates/ipam/inc/ipaddress_edit_header.html:7 msgid "Create" msgstr "Utwórz" -#: netbox/extras/choices.py:227 +#: netbox/extras/choices.py:214 msgid "Update" msgstr "Aktualizacja" -#: netbox/extras/choices.py:228 +#: netbox/extras/choices.py:215 #: netbox/templates/circuits/inc/circuit_termination.html:23 #: netbox/templates/dcim/inc/panels/inventory_items.html:37 #: netbox/templates/dcim/powerpanel.html:66 @@ -7339,82 +7857,82 @@ msgstr "Aktualizacja" msgid "Delete" msgstr "Usuń" -#: netbox/extras/choices.py:252 netbox/netbox/choices.py:57 -#: netbox/netbox/choices.py:102 +#: netbox/extras/choices.py:239 netbox/netbox/choices.py:59 +#: netbox/netbox/choices.py:104 msgid "Blue" msgstr "Niebieska" -#: netbox/extras/choices.py:253 netbox/netbox/choices.py:56 -#: netbox/netbox/choices.py:103 +#: netbox/extras/choices.py:240 netbox/netbox/choices.py:58 +#: netbox/netbox/choices.py:105 msgid "Indigo" msgstr "Indygo" -#: netbox/extras/choices.py:254 netbox/netbox/choices.py:54 -#: netbox/netbox/choices.py:104 +#: netbox/extras/choices.py:241 netbox/netbox/choices.py:56 +#: netbox/netbox/choices.py:106 msgid "Purple" msgstr "Fioletowy" -#: netbox/extras/choices.py:255 netbox/netbox/choices.py:51 -#: netbox/netbox/choices.py:105 +#: netbox/extras/choices.py:242 netbox/netbox/choices.py:53 +#: netbox/netbox/choices.py:107 msgid "Pink" msgstr "Różowy" -#: netbox/extras/choices.py:256 netbox/netbox/choices.py:50 -#: netbox/netbox/choices.py:106 +#: netbox/extras/choices.py:243 netbox/netbox/choices.py:52 +#: netbox/netbox/choices.py:108 msgid "Red" msgstr "Czerwony" -#: netbox/extras/choices.py:257 netbox/netbox/choices.py:68 -#: netbox/netbox/choices.py:107 +#: netbox/extras/choices.py:244 netbox/netbox/choices.py:70 +#: netbox/netbox/choices.py:109 msgid "Orange" msgstr "Pomarańczowy" -#: netbox/extras/choices.py:258 netbox/netbox/choices.py:66 -#: netbox/netbox/choices.py:108 +#: netbox/extras/choices.py:245 netbox/netbox/choices.py:68 +#: netbox/netbox/choices.py:110 msgid "Yellow" msgstr "Żółty" -#: netbox/extras/choices.py:259 netbox/netbox/choices.py:63 -#: netbox/netbox/choices.py:109 +#: netbox/extras/choices.py:246 netbox/netbox/choices.py:65 +#: netbox/netbox/choices.py:111 msgid "Green" msgstr "Zielony" -#: netbox/extras/choices.py:260 netbox/netbox/choices.py:60 -#: netbox/netbox/choices.py:110 +#: netbox/extras/choices.py:247 netbox/netbox/choices.py:62 +#: netbox/netbox/choices.py:112 msgid "Teal" msgstr "Cyraneczka" -#: netbox/extras/choices.py:261 netbox/netbox/choices.py:59 -#: netbox/netbox/choices.py:111 +#: netbox/extras/choices.py:248 netbox/netbox/choices.py:61 +#: netbox/netbox/choices.py:113 msgid "Cyan" msgstr "Niebieski" -#: netbox/extras/choices.py:262 netbox/netbox/choices.py:112 +#: netbox/extras/choices.py:249 netbox/netbox/choices.py:114 msgid "Gray" msgstr "Szary" -#: netbox/extras/choices.py:263 netbox/netbox/choices.py:74 -#: netbox/netbox/choices.py:113 +#: netbox/extras/choices.py:250 netbox/netbox/choices.py:76 +#: netbox/netbox/choices.py:115 msgid "Black" msgstr "Czarny" -#: netbox/extras/choices.py:264 netbox/netbox/choices.py:75 -#: netbox/netbox/choices.py:114 +#: netbox/extras/choices.py:251 netbox/netbox/choices.py:77 +#: netbox/netbox/choices.py:116 msgid "White" msgstr "Biały" -#: netbox/extras/choices.py:279 netbox/extras/forms/model_forms.py:353 -#: netbox/extras/forms/model_forms.py:430 +#: netbox/extras/choices.py:266 netbox/extras/forms/model_forms.py:367 +#: netbox/extras/forms/model_forms.py:444 #: netbox/templates/extras/webhook.html:10 msgid "Webhook" msgstr "Hook internetowy" -#: netbox/extras/choices.py:280 netbox/extras/forms/model_forms.py:418 +#: netbox/extras/choices.py:267 netbox/extras/forms/model_forms.py:432 #: netbox/templates/extras/script/base.html:29 msgid "Script" msgstr "Skrypt" -#: netbox/extras/choices.py:281 +#: netbox/extras/choices.py:268 msgid "Notification" msgstr "Powiadomienie" @@ -7513,30 +8031,34 @@ msgstr "" msgid "RSS Feed" msgstr "Kanał RSS" -#: netbox/extras/dashboard/widgets.py:279 +#: netbox/extras/dashboard/widgets.py:280 msgid "Embed an RSS feed from an external website." msgstr "Osadź kanał RSS z zewnętrznej strony internetowej." -#: netbox/extras/dashboard/widgets.py:286 +#: netbox/extras/dashboard/widgets.py:287 msgid "Feed URL" msgstr "Adres URL kanału" -#: netbox/extras/dashboard/widgets.py:291 +#: netbox/extras/dashboard/widgets.py:290 +msgid "Requires external connection" +msgstr "Wymaga połączenia zewnętrznego" + +#: netbox/extras/dashboard/widgets.py:296 msgid "The maximum number of objects to display" msgstr "Maksymalna liczba obiektów do wyświetlenia" -#: netbox/extras/dashboard/widgets.py:296 +#: netbox/extras/dashboard/widgets.py:301 msgid "How long to stored the cached content (in seconds)" msgstr "Jak długo przechowywać zawartość w pamięci podręcznej (w sekundach)" -#: netbox/extras/dashboard/widgets.py:348 +#: netbox/extras/dashboard/widgets.py:358 #: netbox/templates/account/base.html:10 #: netbox/templates/account/bookmarks.html:7 -#: netbox/templates/inc/user_menu.html:48 +#: netbox/templates/inc/user_menu.html:43 msgid "Bookmarks" msgstr "Zakładki" -#: netbox/extras/dashboard/widgets.py:352 +#: netbox/extras/dashboard/widgets.py:362 msgid "Show your personal bookmarks" msgstr "Pokaż swoje osobiste zakładki" @@ -7565,17 +8087,17 @@ msgid "Group (name)" msgstr "Grupa (nazwa)" #: netbox/extras/filtersets.py:574 -#: netbox/virtualization/forms/filtersets.py:118 +#: netbox/virtualization/forms/filtersets.py:123 msgid "Cluster type" msgstr "Typ klastra" -#: netbox/extras/filtersets.py:580 netbox/virtualization/filtersets.py:95 -#: netbox/virtualization/filtersets.py:147 +#: netbox/extras/filtersets.py:580 netbox/virtualization/filtersets.py:61 +#: netbox/virtualization/filtersets.py:113 msgid "Cluster type (slug)" msgstr "Typ klastra (identyfikator)" #: netbox/extras/filtersets.py:601 netbox/tenancy/forms/forms.py:16 -#: netbox/tenancy/forms/forms.py:39 +#: netbox/tenancy/forms/forms.py:40 msgid "Tenant group" msgstr "Grupa najemców" @@ -7584,7 +8106,7 @@ msgstr "Grupa najemców" msgid "Tenant group (slug)" msgstr "Grupa najemców (identyfikator)" -#: netbox/extras/filtersets.py:623 netbox/extras/forms/model_forms.py:495 +#: netbox/extras/filtersets.py:623 netbox/extras/forms/model_forms.py:509 #: netbox/templates/extras/tag.html:11 msgid "Tag" msgstr "Etykietka" @@ -7593,60 +8115,60 @@ msgstr "Etykietka" msgid "Tag (slug)" msgstr "Tag (identyfikator)" -#: netbox/extras/filtersets.py:689 netbox/extras/forms/filtersets.py:429 +#: netbox/extras/filtersets.py:689 netbox/extras/forms/filtersets.py:437 msgid "Has local config context data" msgstr "Posiada lokalne dane kontekstowe konfiguracji" -#: netbox/extras/forms/bulk_edit.py:35 netbox/extras/forms/filtersets.py:60 +#: netbox/extras/forms/bulk_edit.py:35 netbox/extras/forms/filtersets.py:61 msgid "Group name" msgstr "Nazwa grupy" -#: netbox/extras/forms/bulk_edit.py:43 netbox/extras/forms/filtersets.py:68 +#: netbox/extras/forms/bulk_edit.py:43 netbox/extras/forms/filtersets.py:69 #: netbox/extras/tables/tables.py:65 #: netbox/templates/extras/customfield.html:38 #: netbox/templates/generic/bulk_import.html:118 msgid "Required" msgstr "Wymagane" -#: netbox/extras/forms/bulk_edit.py:48 netbox/extras/forms/filtersets.py:75 +#: netbox/extras/forms/bulk_edit.py:48 netbox/extras/forms/filtersets.py:76 msgid "Must be unique" msgstr "Musi być wyjątkowy" #: netbox/extras/forms/bulk_edit.py:61 netbox/extras/forms/bulk_import.py:60 -#: netbox/extras/forms/filtersets.py:89 +#: netbox/extras/forms/filtersets.py:90 #: netbox/extras/models/customfields.py:209 msgid "UI visible" msgstr "Widoczny interfejs użytkownika" #: netbox/extras/forms/bulk_edit.py:66 netbox/extras/forms/bulk_import.py:66 -#: netbox/extras/forms/filtersets.py:94 +#: netbox/extras/forms/filtersets.py:95 #: netbox/extras/models/customfields.py:216 msgid "UI editable" msgstr "Edytowalny interfejs użytkownika" -#: netbox/extras/forms/bulk_edit.py:71 netbox/extras/forms/filtersets.py:97 +#: netbox/extras/forms/bulk_edit.py:71 netbox/extras/forms/filtersets.py:98 msgid "Is cloneable" msgstr "Jest klonowalny" -#: netbox/extras/forms/bulk_edit.py:76 netbox/extras/forms/filtersets.py:104 +#: netbox/extras/forms/bulk_edit.py:76 netbox/extras/forms/filtersets.py:105 msgid "Minimum value" msgstr "Minimalna wartość" -#: netbox/extras/forms/bulk_edit.py:80 netbox/extras/forms/filtersets.py:108 +#: netbox/extras/forms/bulk_edit.py:80 netbox/extras/forms/filtersets.py:109 msgid "Maximum value" msgstr "Maksymalna wartość" -#: netbox/extras/forms/bulk_edit.py:84 netbox/extras/forms/filtersets.py:112 +#: netbox/extras/forms/bulk_edit.py:84 netbox/extras/forms/filtersets.py:113 msgid "Validation regex" msgstr "Walidacja regex" -#: netbox/extras/forms/bulk_edit.py:91 netbox/extras/forms/filtersets.py:46 +#: netbox/extras/forms/bulk_edit.py:91 netbox/extras/forms/filtersets.py:47 #: netbox/extras/forms/model_forms.py:76 #: netbox/templates/extras/customfield.html:70 msgid "Behavior" msgstr "Zachowanie" -#: netbox/extras/forms/bulk_edit.py:128 netbox/extras/forms/filtersets.py:149 +#: netbox/extras/forms/bulk_edit.py:128 netbox/extras/forms/filtersets.py:152 msgid "New window" msgstr "Nowe okno" @@ -7654,31 +8176,31 @@ msgstr "Nowe okno" msgid "Button class" msgstr "Klasa przycisków" -#: netbox/extras/forms/bulk_edit.py:154 netbox/extras/forms/filtersets.py:187 +#: netbox/extras/forms/bulk_edit.py:154 netbox/extras/forms/filtersets.py:191 #: netbox/extras/models/models.py:409 msgid "MIME type" msgstr "Typ MIME" -#: netbox/extras/forms/bulk_edit.py:159 netbox/extras/forms/filtersets.py:190 +#: netbox/extras/forms/bulk_edit.py:159 netbox/extras/forms/filtersets.py:194 msgid "File extension" msgstr "Rozszerzenie pliku" -#: netbox/extras/forms/bulk_edit.py:164 netbox/extras/forms/filtersets.py:194 +#: netbox/extras/forms/bulk_edit.py:164 netbox/extras/forms/filtersets.py:198 msgid "As attachment" msgstr "Jako załącznik" -#: netbox/extras/forms/bulk_edit.py:192 netbox/extras/forms/filtersets.py:236 +#: netbox/extras/forms/bulk_edit.py:192 netbox/extras/forms/filtersets.py:242 #: netbox/extras/tables/tables.py:256 #: netbox/templates/extras/savedfilter.html:29 msgid "Shared" msgstr "Udostępnione" -#: netbox/extras/forms/bulk_edit.py:215 netbox/extras/forms/filtersets.py:265 +#: netbox/extras/forms/bulk_edit.py:215 netbox/extras/forms/filtersets.py:271 #: netbox/extras/models/models.py:174 msgid "HTTP method" msgstr "Metoda HTTP" -#: netbox/extras/forms/bulk_edit.py:219 netbox/extras/forms/filtersets.py:259 +#: netbox/extras/forms/bulk_edit.py:219 netbox/extras/forms/filtersets.py:265 #: netbox/templates/extras/webhook.html:30 msgid "Payload URL" msgstr "Adres URL ładunku" @@ -7697,7 +8219,7 @@ msgid "CA file path" msgstr "Ścieżka pliku CA" #: netbox/extras/forms/bulk_edit.py:253 netbox/extras/forms/bulk_import.py:192 -#: netbox/extras/forms/model_forms.py:377 +#: netbox/extras/forms/model_forms.py:391 msgid "Event types" msgstr "Rodzaje zdarzeń" @@ -7710,13 +8232,13 @@ msgstr "Jest aktywny" #: netbox/extras/forms/bulk_import.py:139 #: netbox/extras/forms/bulk_import.py:162 #: netbox/extras/forms/bulk_import.py:186 -#: netbox/extras/forms/filtersets.py:137 netbox/extras/forms/filtersets.py:224 +#: netbox/extras/forms/filtersets.py:140 netbox/extras/forms/filtersets.py:230 #: netbox/extras/forms/model_forms.py:47 -#: netbox/extras/forms/model_forms.py:205 -#: netbox/extras/forms/model_forms.py:237 -#: netbox/extras/forms/model_forms.py:278 -#: netbox/extras/forms/model_forms.py:372 -#: netbox/extras/forms/model_forms.py:489 +#: netbox/extras/forms/model_forms.py:219 +#: netbox/extras/forms/model_forms.py:251 +#: netbox/extras/forms/model_forms.py:292 +#: netbox/extras/forms/model_forms.py:386 +#: netbox/extras/forms/model_forms.py:503 #: netbox/users/forms/model_forms.py:276 msgid "Object types" msgstr "Typy obiektów" @@ -7734,10 +8256,10 @@ msgstr "Jeden lub więcej przypisanych typów obiektów" msgid "Field data type (e.g. text, integer, etc.)" msgstr "Typ danych pola (np. tekst, liczba całkowita itp.)" -#: netbox/extras/forms/bulk_import.py:47 netbox/extras/forms/filtersets.py:208 -#: netbox/extras/forms/filtersets.py:281 -#: netbox/extras/forms/model_forms.py:304 -#: netbox/extras/forms/model_forms.py:341 +#: netbox/extras/forms/bulk_import.py:47 netbox/extras/forms/filtersets.py:213 +#: netbox/extras/forms/filtersets.py:287 +#: netbox/extras/forms/model_forms.py:318 +#: netbox/extras/forms/model_forms.py:355 #: netbox/tenancy/forms/filtersets.py:92 msgid "Object type" msgstr "Typ obiektu" @@ -7746,7 +8268,7 @@ msgstr "Typ obiektu" msgid "Object type (for object or multi-object fields)" msgstr "Typ obiektu (dla pól obiektu lub wielu obiektów)" -#: netbox/extras/forms/bulk_import.py:53 netbox/extras/forms/filtersets.py:84 +#: netbox/extras/forms/bulk_import.py:53 netbox/extras/forms/filtersets.py:85 msgid "Choice set" msgstr "Zestaw do wyboru" @@ -7815,7 +8337,7 @@ msgid "The classification of entry" msgstr "Klasyfikacja wpisu" #: netbox/extras/forms/bulk_import.py:261 -#: netbox/extras/forms/model_forms.py:320 netbox/netbox/navigation/menu.py:390 +#: netbox/extras/forms/model_forms.py:334 netbox/netbox/navigation/menu.py:411 #: netbox/templates/extras/notificationgroup.html:41 #: netbox/templates/users/group.html:29 netbox/users/forms/model_forms.py:236 #: netbox/users/forms/model_forms.py:248 netbox/users/forms/model_forms.py:300 @@ -7829,7 +8351,8 @@ msgstr "" "Nazwy użytkowników oddzielone przecinkami, otoczone podwójnymi cudzysłowami" #: netbox/extras/forms/bulk_import.py:268 -#: netbox/extras/forms/model_forms.py:315 netbox/netbox/navigation/menu.py:410 +#: netbox/extras/forms/model_forms.py:329 netbox/netbox/navigation/menu.py:294 +#: netbox/netbox/navigation/menu.py:431 #: netbox/templates/extras/notificationgroup.html:31 #: netbox/users/forms/model_forms.py:181 netbox/users/forms/model_forms.py:193 #: netbox/users/forms/model_forms.py:305 netbox/users/tables.py:35 @@ -7841,104 +8364,104 @@ msgstr "Grupy" msgid "Group names separated by commas, encased with double quotes" msgstr "Nazwy grup oddzielone przecinkami, otoczone podwójnymi cudzysłowami" -#: netbox/extras/forms/filtersets.py:52 netbox/extras/forms/model_forms.py:56 +#: netbox/extras/forms/filtersets.py:53 netbox/extras/forms/model_forms.py:56 msgid "Related object type" msgstr "Powiązany typ obiektu" -#: netbox/extras/forms/filtersets.py:57 +#: netbox/extras/forms/filtersets.py:58 msgid "Field type" msgstr "Typ pola" -#: netbox/extras/forms/filtersets.py:120 +#: netbox/extras/forms/filtersets.py:122 #: netbox/extras/forms/model_forms.py:157 netbox/extras/tables/tables.py:91 #: netbox/templates/generic/bulk_import.html:154 msgid "Choices" msgstr "Wybory" -#: netbox/extras/forms/filtersets.py:164 netbox/extras/forms/filtersets.py:319 -#: netbox/extras/forms/filtersets.py:408 -#: netbox/extras/forms/model_forms.py:572 netbox/templates/core/job.html:96 +#: netbox/extras/forms/filtersets.py:168 netbox/extras/forms/filtersets.py:326 +#: netbox/extras/forms/filtersets.py:416 +#: netbox/extras/forms/model_forms.py:586 netbox/templates/core/job.html:96 #: netbox/templates/extras/eventrule.html:84 msgid "Data" msgstr "Dane" -#: netbox/extras/forms/filtersets.py:175 netbox/extras/forms/filtersets.py:333 -#: netbox/extras/forms/filtersets.py:418 netbox/netbox/choices.py:130 +#: netbox/extras/forms/filtersets.py:179 netbox/extras/forms/filtersets.py:340 +#: netbox/extras/forms/filtersets.py:426 netbox/netbox/choices.py:132 #: netbox/utilities/forms/bulk_import.py:26 msgid "Data file" msgstr "Plik danych" -#: netbox/extras/forms/filtersets.py:183 +#: netbox/extras/forms/filtersets.py:187 msgid "Content types" msgstr "Typy treści" -#: netbox/extras/forms/filtersets.py:255 netbox/extras/models/models.py:179 +#: netbox/extras/forms/filtersets.py:261 netbox/extras/models/models.py:179 msgid "HTTP content type" msgstr "Typ zawartości HTTP" -#: netbox/extras/forms/filtersets.py:286 +#: netbox/extras/forms/filtersets.py:292 msgid "Event type" msgstr "Typ zdarzenia" -#: netbox/extras/forms/filtersets.py:291 +#: netbox/extras/forms/filtersets.py:297 msgid "Action type" msgstr "Rodzaj akcji" -#: netbox/extras/forms/filtersets.py:307 +#: netbox/extras/forms/filtersets.py:313 msgid "Tagged object type" msgstr "Typ obiektu oznaczonego" -#: netbox/extras/forms/filtersets.py:312 +#: netbox/extras/forms/filtersets.py:318 msgid "Allowed object type" msgstr "Dozwolony typ obiektu" -#: netbox/extras/forms/filtersets.py:341 -#: netbox/extras/forms/model_forms.py:507 netbox/netbox/navigation/menu.py:18 +#: netbox/extras/forms/filtersets.py:348 +#: netbox/extras/forms/model_forms.py:521 netbox/netbox/navigation/menu.py:18 msgid "Regions" msgstr "Regiony" -#: netbox/extras/forms/filtersets.py:346 -#: netbox/extras/forms/model_forms.py:512 +#: netbox/extras/forms/filtersets.py:353 +#: netbox/extras/forms/model_forms.py:526 msgid "Site groups" msgstr "Grupy witryn" -#: netbox/extras/forms/filtersets.py:356 -#: netbox/extras/forms/model_forms.py:522 netbox/netbox/navigation/menu.py:20 +#: netbox/extras/forms/filtersets.py:363 +#: netbox/extras/forms/model_forms.py:536 netbox/netbox/navigation/menu.py:20 #: netbox/templates/dcim/site.html:127 msgid "Locations" msgstr "Lokalizacje" -#: netbox/extras/forms/filtersets.py:361 -#: netbox/extras/forms/model_forms.py:527 +#: netbox/extras/forms/filtersets.py:368 +#: netbox/extras/forms/model_forms.py:541 msgid "Device types" msgstr "Rodzaje urządzeń" -#: netbox/extras/forms/filtersets.py:366 -#: netbox/extras/forms/model_forms.py:532 +#: netbox/extras/forms/filtersets.py:373 +#: netbox/extras/forms/model_forms.py:546 msgid "Roles" msgstr "Role" -#: netbox/extras/forms/filtersets.py:376 -#: netbox/extras/forms/model_forms.py:542 +#: netbox/extras/forms/filtersets.py:383 +#: netbox/extras/forms/model_forms.py:556 msgid "Cluster types" msgstr "Typy klastrów" -#: netbox/extras/forms/filtersets.py:381 -#: netbox/extras/forms/model_forms.py:547 +#: netbox/extras/forms/filtersets.py:388 +#: netbox/extras/forms/model_forms.py:561 msgid "Cluster groups" msgstr "Grupy klastrów" -#: netbox/extras/forms/filtersets.py:386 -#: netbox/extras/forms/model_forms.py:552 netbox/netbox/navigation/menu.py:255 -#: netbox/netbox/navigation/menu.py:257 +#: netbox/extras/forms/filtersets.py:393 +#: netbox/extras/forms/model_forms.py:566 netbox/netbox/navigation/menu.py:263 +#: netbox/netbox/navigation/menu.py:265 #: netbox/templates/virtualization/clustertype.html:30 #: netbox/virtualization/tables/clusters.py:23 #: netbox/virtualization/tables/clusters.py:45 msgid "Clusters" msgstr "Klastry" -#: netbox/extras/forms/filtersets.py:391 -#: netbox/extras/forms/model_forms.py:557 +#: netbox/extras/forms/filtersets.py:398 +#: netbox/extras/forms/model_forms.py:571 msgid "Tenant groups" msgstr "Grupy najemców" @@ -7988,7 +8511,7 @@ msgstr "" msgid "Related Object" msgstr "Powiązany obiekt" -#: netbox/extras/forms/model_forms.py:169 +#: netbox/extras/forms/model_forms.py:170 msgid "" "Enter one choice per line. An optional label may be specified for each " "choice by appending it with a colon. Example:" @@ -7996,16 +8519,16 @@ msgstr "" "Wprowadź jeden wybór na linię. Opcjonalną etykietę można określić dla " "każdego wyboru, dodając ją dwukropkiem. Przykład:" -#: netbox/extras/forms/model_forms.py:212 +#: netbox/extras/forms/model_forms.py:226 #: netbox/templates/extras/customlink.html:10 msgid "Custom Link" msgstr "Niestandardowe łącze" -#: netbox/extras/forms/model_forms.py:214 +#: netbox/extras/forms/model_forms.py:228 msgid "Templates" msgstr "Szablony" -#: netbox/extras/forms/model_forms.py:226 +#: netbox/extras/forms/model_forms.py:240 #, python-brace-format msgid "" "Jinja2 template code for the link text. Reference the object as {example}. " @@ -8014,66 +8537,66 @@ msgstr "" "Kod szablonu Jinja2 dla tekstu łącza. Odwołaj obiekt jako {example}. Linki " "renderowane jako pusty tekst nie będą wyświetlane." -#: netbox/extras/forms/model_forms.py:230 +#: netbox/extras/forms/model_forms.py:244 #, python-brace-format msgid "" "Jinja2 template code for the link URL. Reference the object as {example}." msgstr "" "Kod szablonu Jinja2 dla adresu URL linku. Odwołaj obiekt jako {example}." -#: netbox/extras/forms/model_forms.py:241 -#: netbox/extras/forms/model_forms.py:624 +#: netbox/extras/forms/model_forms.py:255 +#: netbox/extras/forms/model_forms.py:638 msgid "Template code" msgstr "Kod szablonu" -#: netbox/extras/forms/model_forms.py:247 +#: netbox/extras/forms/model_forms.py:261 #: netbox/templates/extras/exporttemplate.html:12 msgid "Export Template" msgstr "Szablon eksportu" -#: netbox/extras/forms/model_forms.py:249 +#: netbox/extras/forms/model_forms.py:263 msgid "Rendering" msgstr "Renderowanie" -#: netbox/extras/forms/model_forms.py:263 -#: netbox/extras/forms/model_forms.py:649 +#: netbox/extras/forms/model_forms.py:277 +#: netbox/extras/forms/model_forms.py:663 msgid "Template content is populated from the remote source selected below." msgstr "" "Zawartość szablonu jest wypełniana ze zdalnego źródła wybranego poniżej." -#: netbox/extras/forms/model_forms.py:270 -#: netbox/extras/forms/model_forms.py:656 +#: netbox/extras/forms/model_forms.py:284 +#: netbox/extras/forms/model_forms.py:670 msgid "Must specify either local content or a data file" msgstr "Musi określić zawartość lokalną lub plik danych" -#: netbox/extras/forms/model_forms.py:284 netbox/netbox/forms/mixins.py:70 +#: netbox/extras/forms/model_forms.py:298 netbox/netbox/forms/mixins.py:70 #: netbox/templates/extras/savedfilter.html:10 msgid "Saved Filter" msgstr "Zapisany filtr" -#: netbox/extras/forms/model_forms.py:334 +#: netbox/extras/forms/model_forms.py:348 msgid "A notification group specify at least one user or group." msgstr "Grupa powiadomień określa co najmniej jednego użytkownika lub grupę." -#: netbox/extras/forms/model_forms.py:356 +#: netbox/extras/forms/model_forms.py:370 #: netbox/templates/extras/webhook.html:23 msgid "HTTP Request" msgstr "Żądanie HTTP" -#: netbox/extras/forms/model_forms.py:358 +#: netbox/extras/forms/model_forms.py:372 #: netbox/templates/extras/webhook.html:44 msgid "SSL" msgstr "SSL" -#: netbox/extras/forms/model_forms.py:380 +#: netbox/extras/forms/model_forms.py:394 msgid "Action choice" msgstr "Wybór działania" -#: netbox/extras/forms/model_forms.py:385 +#: netbox/extras/forms/model_forms.py:399 msgid "Enter conditions in JSON format." msgstr "Wprowadź warunki w JSON format." -#: netbox/extras/forms/model_forms.py:389 +#: netbox/extras/forms/model_forms.py:403 msgid "" "Enter parameters to pass to the action in JSON format." @@ -8081,33 +8604,33 @@ msgstr "" "Wprowadź parametry, które mają zostać przekazane do akcji w JSON format." -#: netbox/extras/forms/model_forms.py:394 +#: netbox/extras/forms/model_forms.py:408 #: netbox/templates/extras/eventrule.html:10 msgid "Event Rule" msgstr "Reguła zdarzenia" -#: netbox/extras/forms/model_forms.py:395 +#: netbox/extras/forms/model_forms.py:409 msgid "Triggers" msgstr "Wyzwalacze" -#: netbox/extras/forms/model_forms.py:442 +#: netbox/extras/forms/model_forms.py:456 msgid "Notification group" msgstr "Grupa powiadomień" -#: netbox/extras/forms/model_forms.py:562 netbox/netbox/navigation/menu.py:26 +#: netbox/extras/forms/model_forms.py:576 netbox/netbox/navigation/menu.py:26 #: netbox/tenancy/tables/tenants.py:22 msgid "Tenants" msgstr "Najemcy" -#: netbox/extras/forms/model_forms.py:606 +#: netbox/extras/forms/model_forms.py:620 msgid "Data is populated from the remote source selected below." msgstr "Dane są wypełniane ze zdalnego źródła wybranego poniżej." -#: netbox/extras/forms/model_forms.py:612 +#: netbox/extras/forms/model_forms.py:626 msgid "Must specify either local data or a data file" msgstr "Musi określić dane lokalne lub plik danych" -#: netbox/extras/forms/model_forms.py:631 +#: netbox/extras/forms/model_forms.py:645 #: netbox/templates/core/datafile.html:55 msgid "Content" msgstr "Zawartość" @@ -8170,10 +8693,16 @@ msgstr "Wystąpił wyjątek: " msgid "Database changes have been reverted due to error." msgstr "Zmiany bazy danych zostały cofnięte z powodu błędu." -#: netbox/extras/management/commands/reindex.py:66 +#: netbox/extras/management/commands/reindex.py:67 msgid "No indexers found!" msgstr "Nie znaleziono indeksatorów!" +#: netbox/extras/models/configs.py:41 netbox/extras/models/models.py:313 +#: netbox/extras/models/models.py:522 netbox/extras/models/search.py:48 +#: netbox/ipam/models/ip.py:188 netbox/netbox/models/mixins.py:15 +msgid "weight" +msgstr "waga" + #: netbox/extras/models/configs.py:130 msgid "config context" msgstr "Kontekst konfiguracji" @@ -8535,27 +9064,27 @@ msgstr "Znaleziono nieprawidłowy identyfikator obiektu: {id}" msgid "Required field cannot be empty." msgstr "Pole wymagane nie może być puste." -#: netbox/extras/models/customfields.py:763 +#: netbox/extras/models/customfields.py:764 msgid "Base set of predefined choices (optional)" msgstr "Podstawowy zestaw predefiniowanych opcji (opcjonalnie)" -#: netbox/extras/models/customfields.py:775 +#: netbox/extras/models/customfields.py:776 msgid "Choices are automatically ordered alphabetically" msgstr "Wybory są automatycznie uporządkowane alfabetycznie" -#: netbox/extras/models/customfields.py:782 +#: netbox/extras/models/customfields.py:783 msgid "custom field choice set" msgstr "niestandardowy zestaw wyboru pola" -#: netbox/extras/models/customfields.py:783 +#: netbox/extras/models/customfields.py:784 msgid "custom field choice sets" msgstr "niestandardowe zestawy wyboru pól" -#: netbox/extras/models/customfields.py:825 +#: netbox/extras/models/customfields.py:826 msgid "Must define base or extra choices." msgstr "Musi zdefiniować opcje bazowe lub dodatkowe." -#: netbox/extras/models/customfields.py:849 +#: netbox/extras/models/customfields.py:850 #, python-brace-format msgid "" "Cannot remove choice {choice} as there are {model} objects which reference " @@ -8855,20 +9384,20 @@ msgstr "wpis do dziennika" msgid "journal entries" msgstr "wpisy do dziennika" -#: netbox/extras/models/models.py:718 +#: netbox/extras/models/models.py:721 #, python-brace-format msgid "Journaling is not supported for this object type ({type})." msgstr "Rejestracja nie jest obsługiwana dla tego typu obiektu ({type})." -#: netbox/extras/models/models.py:760 +#: netbox/extras/models/models.py:763 msgid "bookmark" msgstr "zakładka" -#: netbox/extras/models/models.py:761 +#: netbox/extras/models/models.py:764 msgid "bookmarks" msgstr "zakładki" -#: netbox/extras/models/models.py:774 +#: netbox/extras/models/models.py:777 #, python-brace-format msgid "Bookmarks cannot be assigned to this object type ({type})." msgstr "Zakładki nie mogą być przypisane do tego typu obiektu ({type})." @@ -8960,19 +9489,19 @@ msgstr "wartość buforowana" msgid "cached values" msgstr "wartości buforowane" -#: netbox/extras/models/staging.py:44 +#: netbox/extras/models/staging.py:45 msgid "branch" msgstr "oddział" -#: netbox/extras/models/staging.py:45 +#: netbox/extras/models/staging.py:46 msgid "branches" msgstr "oddziałów" -#: netbox/extras/models/staging.py:97 +#: netbox/extras/models/staging.py:105 msgid "staged change" msgstr "zmiana etapowa" -#: netbox/extras/models/staging.py:98 +#: netbox/extras/models/staging.py:106 msgid "staged changes" msgstr "zmiany etapowe" @@ -8996,11 +9525,11 @@ msgstr "przedmiot oznaczony" msgid "tagged items" msgstr "przedmioty oznaczone" -#: netbox/extras/scripts.py:429 +#: netbox/extras/scripts.py:432 msgid "Script Data" msgstr "Dane skryptu" -#: netbox/extras/scripts.py:433 +#: netbox/extras/scripts.py:436 msgid "Script Execution Parameters" msgstr "Parametry wykonywania skryptów" @@ -9077,12 +9606,11 @@ msgstr "Jako załącznik" #: netbox/extras/tables/tables.py:195 netbox/extras/tables/tables.py:487 #: netbox/extras/tables/tables.py:522 netbox/templates/core/datafile.html:24 -#: netbox/templates/dcim/device/render_config.html:22 #: netbox/templates/extras/configcontext.html:39 #: netbox/templates/extras/configtemplate.html:31 #: netbox/templates/extras/exporttemplate.html:45 +#: netbox/templates/extras/object_render_config.html:23 #: netbox/templates/generic/bulk_import.html:35 -#: netbox/templates/virtualization/virtualmachine/render_config.html:22 msgid "Data File" msgstr "Plik danych" @@ -9174,27 +9702,32 @@ msgstr "Nieprawidłowy atrybut”{name}„na żądanie" msgid "Invalid attribute \"{name}\" for {model}" msgstr "Nieprawidłowy atrybut”{name}„dla {model}" -#: netbox/extras/views.py:960 +#: netbox/extras/views.py:933 +#, python-brace-format +msgid "An error occurred while rendering the template: {error}" +msgstr "Wystąpił błąd podczas renderowania szablonu: {error}" + +#: netbox/extras/views.py:1085 msgid "Your dashboard has been reset." msgstr "Twój pulpit nawigacyjny został zresetowany." -#: netbox/extras/views.py:1006 +#: netbox/extras/views.py:1131 msgid "Added widget: " msgstr "Dodano widżet: " -#: netbox/extras/views.py:1047 +#: netbox/extras/views.py:1172 msgid "Updated widget: " msgstr "Zaktualizowano widżet: " -#: netbox/extras/views.py:1083 +#: netbox/extras/views.py:1208 msgid "Deleted widget: " msgstr "Usunięty widget: " -#: netbox/extras/views.py:1085 +#: netbox/extras/views.py:1210 msgid "Error deleting widget: " msgstr "Błąd usuwania widżetu: " -#: netbox/extras/views.py:1175 +#: netbox/extras/views.py:1308 msgid "Unable to run script: RQ worker process not running." msgstr "Nie można uruchomić skryptu: proces roboczy RQ nie działa." @@ -9216,7 +9749,7 @@ msgstr "Wprowadź prawidłowy prefiks IPv4 lub IPv6 i maskę w notacji CIDR." msgid "Invalid IP prefix format: {data}" msgstr "Nieprawidłowy format prefiksu IP: {data}" -#: netbox/ipam/api/views.py:358 +#: netbox/ipam/api/views.py:370 msgid "" "Insufficient space is available to accommodate the requested prefix size(s)" msgstr "" @@ -9259,182 +9792,174 @@ msgstr "Cisco" msgid "Plaintext" msgstr "Zwykły tekst" +#: netbox/ipam/choices.py:166 netbox/ipam/forms/model_forms.py:800 +#: netbox/ipam/forms/model_forms.py:828 netbox/templates/ipam/service.html:21 +msgid "Service" +msgstr "Serwis" + +#: netbox/ipam/choices.py:167 +msgid "Customer" +msgstr "Klient" + #: netbox/ipam/fields.py:36 #, python-brace-format msgid "Invalid IP address format: {address}" msgstr "Nieprawidłowy format adresu IP: {address}" -#: netbox/ipam/filtersets.py:48 netbox/vpn/filtersets.py:304 +#: netbox/ipam/filtersets.py:51 netbox/vpn/filtersets.py:304 msgid "Import target" msgstr "Importuj cel" -#: netbox/ipam/filtersets.py:54 netbox/vpn/filtersets.py:310 +#: netbox/ipam/filtersets.py:57 netbox/vpn/filtersets.py:310 msgid "Import target (name)" msgstr "Import docelowy (nazwa)" -#: netbox/ipam/filtersets.py:59 netbox/vpn/filtersets.py:315 +#: netbox/ipam/filtersets.py:62 netbox/vpn/filtersets.py:315 msgid "Export target" msgstr "Cel eksportu" -#: netbox/ipam/filtersets.py:65 netbox/vpn/filtersets.py:321 +#: netbox/ipam/filtersets.py:68 netbox/vpn/filtersets.py:321 msgid "Export target (name)" msgstr "Eksportuj cel (nazwa)" -#: netbox/ipam/filtersets.py:86 +#: netbox/ipam/filtersets.py:89 msgid "Importing VRF" msgstr "Importowanie VRF" -#: netbox/ipam/filtersets.py:92 +#: netbox/ipam/filtersets.py:95 msgid "Import VRF (RD)" msgstr "Import VRF (RD)" -#: netbox/ipam/filtersets.py:97 +#: netbox/ipam/filtersets.py:100 msgid "Exporting VRF" msgstr "Eksportowanie VRF" -#: netbox/ipam/filtersets.py:103 +#: netbox/ipam/filtersets.py:106 msgid "Export VRF (RD)" msgstr "Eksportuj VRF (RD)" -#: netbox/ipam/filtersets.py:108 +#: netbox/ipam/filtersets.py:111 msgid "Importing L2VPN" msgstr "Importowanie L2VPN" -#: netbox/ipam/filtersets.py:114 +#: netbox/ipam/filtersets.py:117 msgid "Importing L2VPN (identifier)" msgstr "Importowanie L2VPN (identyfikator)" -#: netbox/ipam/filtersets.py:119 +#: netbox/ipam/filtersets.py:122 msgid "Exporting L2VPN" msgstr "Eksportowanie L2VPN" -#: netbox/ipam/filtersets.py:125 +#: netbox/ipam/filtersets.py:128 msgid "Exporting L2VPN (identifier)" msgstr "Eksportowanie L2VPN (identyfikator)" -#: netbox/ipam/filtersets.py:155 netbox/ipam/filtersets.py:283 -#: netbox/ipam/forms/model_forms.py:229 netbox/ipam/tables/ip.py:212 +#: netbox/ipam/filtersets.py:158 netbox/ipam/filtersets.py:286 +#: netbox/ipam/forms/model_forms.py:229 netbox/ipam/tables/ip.py:158 #: netbox/templates/ipam/prefix.html:12 msgid "Prefix" msgstr "Prefiks" -#: netbox/ipam/filtersets.py:159 netbox/ipam/filtersets.py:198 -#: netbox/ipam/filtersets.py:223 +#: netbox/ipam/filtersets.py:162 netbox/ipam/filtersets.py:201 +#: netbox/ipam/filtersets.py:226 msgid "RIR (ID)" msgstr "RIR (ID)" -#: netbox/ipam/filtersets.py:165 netbox/ipam/filtersets.py:204 -#: netbox/ipam/filtersets.py:229 +#: netbox/ipam/filtersets.py:168 netbox/ipam/filtersets.py:207 +#: netbox/ipam/filtersets.py:232 msgid "RIR (slug)" msgstr "RIR (identyfikator)" -#: netbox/ipam/filtersets.py:287 +#: netbox/ipam/filtersets.py:290 msgid "Within prefix" msgstr "W prefiksie" -#: netbox/ipam/filtersets.py:291 +#: netbox/ipam/filtersets.py:294 msgid "Within and including prefix" msgstr "W i włącznie z prefiksem" -#: netbox/ipam/filtersets.py:295 +#: netbox/ipam/filtersets.py:298 msgid "Prefixes which contain this prefix or IP" msgstr "Prefiksy zawierające ten prefiks lub adres IP" -#: netbox/ipam/filtersets.py:306 netbox/ipam/filtersets.py:574 -#: netbox/ipam/forms/bulk_edit.py:343 netbox/ipam/forms/filtersets.py:196 -#: netbox/ipam/forms/filtersets.py:331 +#: netbox/ipam/filtersets.py:309 netbox/ipam/filtersets.py:541 +#: netbox/ipam/forms/bulk_edit.py:327 netbox/ipam/forms/filtersets.py:198 +#: netbox/ipam/forms/filtersets.py:334 msgid "Mask length" msgstr "Długość maski" -#: netbox/ipam/filtersets.py:375 netbox/vpn/filtersets.py:427 +#: netbox/ipam/filtersets.py:342 netbox/vpn/filtersets.py:427 msgid "VLAN (ID)" msgstr "VLAN (ID)" -#: netbox/ipam/filtersets.py:379 netbox/vpn/filtersets.py:422 +#: netbox/ipam/filtersets.py:346 netbox/vpn/filtersets.py:422 msgid "VLAN number (1-4094)" msgstr "Numer VLAN (1-4094)" -#: netbox/ipam/filtersets.py:473 netbox/ipam/filtersets.py:477 -#: netbox/ipam/filtersets.py:569 netbox/ipam/forms/model_forms.py:496 +#: netbox/ipam/filtersets.py:440 netbox/ipam/filtersets.py:444 +#: netbox/ipam/filtersets.py:536 netbox/ipam/forms/model_forms.py:506 #: netbox/templates/tenancy/contact.html:53 #: netbox/tenancy/forms/bulk_edit.py:113 msgid "Address" msgstr "Adres" -#: netbox/ipam/filtersets.py:481 +#: netbox/ipam/filtersets.py:448 msgid "Ranges which contain this prefix or IP" msgstr "Zakresy zawierające ten prefiks lub adres IP" -#: netbox/ipam/filtersets.py:509 netbox/ipam/filtersets.py:565 +#: netbox/ipam/filtersets.py:476 netbox/ipam/filtersets.py:532 msgid "Parent prefix" msgstr "Prefiks nadrzędny" -#: netbox/ipam/filtersets.py:618 netbox/ipam/filtersets.py:858 -#: netbox/ipam/filtersets.py:1133 netbox/vpn/filtersets.py:385 -msgid "Virtual machine (name)" -msgstr "Maszyna wirtualna (nazwa)" - -#: netbox/ipam/filtersets.py:623 netbox/ipam/filtersets.py:863 -#: netbox/ipam/filtersets.py:1127 netbox/virtualization/filtersets.py:282 -#: netbox/virtualization/filtersets.py:321 netbox/vpn/filtersets.py:390 -msgid "Virtual machine (ID)" -msgstr "Maszyna wirtualna (ID)" - -#: netbox/ipam/filtersets.py:629 netbox/vpn/filtersets.py:97 -#: netbox/vpn/filtersets.py:396 -msgid "Interface (name)" -msgstr "Interfejs (nazwa)" - -#: netbox/ipam/filtersets.py:640 netbox/vpn/filtersets.py:108 -#: netbox/vpn/filtersets.py:407 -msgid "VM interface (name)" -msgstr "Interfejs maszyny wirtualnej (nazwa)" - -#: netbox/ipam/filtersets.py:645 netbox/vpn/filtersets.py:113 -msgid "VM interface (ID)" -msgstr "Interfejs maszyny wirtualnej (ID)" - -#: netbox/ipam/filtersets.py:650 +#: netbox/ipam/filtersets.py:617 msgid "FHRP group (ID)" msgstr "Grupa FHRP (ID)" -#: netbox/ipam/filtersets.py:654 +#: netbox/ipam/filtersets.py:621 msgid "Is assigned to an interface" msgstr "Jest przypisany do interfejsu" -#: netbox/ipam/filtersets.py:658 +#: netbox/ipam/filtersets.py:625 msgid "Is assigned" msgstr "Jest przypisany" -#: netbox/ipam/filtersets.py:670 +#: netbox/ipam/filtersets.py:637 msgid "Service (ID)" msgstr "Usługa (ID)" -#: netbox/ipam/filtersets.py:675 +#: netbox/ipam/filtersets.py:642 msgid "NAT inside IP address (ID)" msgstr "NAT wewnątrz adresu IP (ID)" -#: netbox/ipam/filtersets.py:1043 netbox/ipam/forms/bulk_import.py:322 -msgid "Assigned interface" -msgstr "Przypisany interfejs" +#: netbox/ipam/filtersets.py:1001 +msgid "Q-in-Q SVLAN (ID)" +msgstr "Q-in-Q SVLAN (ID)" -#: netbox/ipam/filtersets.py:1048 +#: netbox/ipam/filtersets.py:1005 +msgid "Q-in-Q SVLAN number (1-4094)" +msgstr "Numer SVLAN Q-in-Q (1-4094)" + +#: netbox/ipam/filtersets.py:1026 msgid "Assigned VM interface" msgstr "Przypisany interfejs maszyny wirtualnej" -#: netbox/ipam/filtersets.py:1138 +#: netbox/ipam/filtersets.py:1097 +msgid "VLAN Translation Policy (name)" +msgstr "Zasady tłumaczenia sieci VLAN (nazwa)" + +#: netbox/ipam/filtersets.py:1163 msgid "IP address (ID)" msgstr "Adres IP (ID)" -#: netbox/ipam/filtersets.py:1144 netbox/ipam/models/ip.py:788 +#: netbox/ipam/filtersets.py:1169 netbox/ipam/models/ip.py:788 msgid "IP address" msgstr "Adres IP" -#: netbox/ipam/filtersets.py:1169 +#: netbox/ipam/filtersets.py:1194 msgid "Primary IPv4 (ID)" msgstr "Podstawowy IPv4 (ID)" -#: netbox/ipam/filtersets.py:1174 +#: netbox/ipam/filtersets.py:1199 msgid "Primary IPv6 (ID)" msgstr "Podstawowy IPv6 (ID)" @@ -9467,431 +9992,404 @@ msgstr "Wymagana jest maska CIDR (np. /24)." msgid "Address pattern" msgstr "Wzór adresu" -#: netbox/ipam/forms/bulk_edit.py:50 +#: netbox/ipam/forms/bulk_edit.py:53 msgid "Enforce unique space" msgstr "Wymuszaj unikalną przestrzeń" -#: netbox/ipam/forms/bulk_edit.py:88 +#: netbox/ipam/forms/bulk_edit.py:91 msgid "Is private" msgstr "Jest prywatny" -#: netbox/ipam/forms/bulk_edit.py:109 netbox/ipam/forms/bulk_edit.py:138 -#: netbox/ipam/forms/bulk_edit.py:163 netbox/ipam/forms/bulk_import.py:89 -#: netbox/ipam/forms/bulk_import.py:109 netbox/ipam/forms/bulk_import.py:129 -#: netbox/ipam/forms/filtersets.py:110 netbox/ipam/forms/filtersets.py:125 -#: netbox/ipam/forms/filtersets.py:148 netbox/ipam/forms/model_forms.py:96 -#: netbox/ipam/forms/model_forms.py:109 netbox/ipam/forms/model_forms.py:131 -#: netbox/ipam/forms/model_forms.py:149 netbox/ipam/models/asns.py:31 -#: netbox/ipam/models/asns.py:103 netbox/ipam/models/ip.py:71 -#: netbox/ipam/models/ip.py:90 netbox/ipam/tables/asn.py:20 +#: netbox/ipam/forms/bulk_edit.py:112 netbox/ipam/forms/bulk_edit.py:141 +#: netbox/ipam/forms/bulk_edit.py:166 netbox/ipam/forms/bulk_import.py:92 +#: netbox/ipam/forms/bulk_import.py:112 netbox/ipam/forms/bulk_import.py:132 +#: netbox/ipam/forms/filtersets.py:112 netbox/ipam/forms/filtersets.py:127 +#: netbox/ipam/forms/filtersets.py:150 netbox/ipam/forms/model_forms.py:99 +#: netbox/ipam/forms/model_forms.py:112 netbox/ipam/forms/model_forms.py:135 +#: netbox/ipam/forms/model_forms.py:154 netbox/ipam/models/asns.py:31 +#: netbox/ipam/models/asns.py:100 netbox/ipam/models/ip.py:71 +#: netbox/ipam/models/ip.py:87 netbox/ipam/tables/asn.py:20 #: netbox/ipam/tables/asn.py:45 netbox/templates/ipam/aggregate.html:18 #: netbox/templates/ipam/asn.html:27 netbox/templates/ipam/asnrange.html:19 #: netbox/templates/ipam/rir.html:19 msgid "RIR" msgstr "WRZUCIĆ" -#: netbox/ipam/forms/bulk_edit.py:171 +#: netbox/ipam/forms/bulk_edit.py:174 msgid "Date added" msgstr "Data dodania" -#: netbox/ipam/forms/bulk_edit.py:229 netbox/ipam/forms/model_forms.py:619 -#: netbox/ipam/forms/model_forms.py:666 netbox/ipam/tables/ip.py:251 -#: netbox/templates/ipam/vlan_edit.html:37 +#: netbox/ipam/forms/bulk_edit.py:213 netbox/ipam/forms/model_forms.py:629 +#: netbox/ipam/forms/model_forms.py:676 netbox/ipam/tables/ip.py:201 +#: netbox/templates/ipam/vlan_edit.html:45 #: netbox/templates/ipam/vlangroup.html:27 msgid "VLAN Group" msgstr "Grupa VLAN" -#: netbox/ipam/forms/bulk_edit.py:234 netbox/ipam/forms/bulk_import.py:185 -#: netbox/ipam/forms/filtersets.py:256 netbox/ipam/forms/model_forms.py:218 -#: netbox/ipam/models/vlans.py:250 netbox/ipam/tables/ip.py:255 -#: netbox/templates/ipam/prefix.html:60 netbox/templates/ipam/vlan.html:12 +#: netbox/ipam/forms/bulk_edit.py:218 netbox/ipam/forms/bulk_import.py:181 +#: netbox/ipam/forms/filtersets.py:259 netbox/ipam/forms/model_forms.py:217 +#: netbox/ipam/models/vlans.py:272 netbox/ipam/tables/ip.py:206 +#: netbox/templates/ipam/prefix.html:56 netbox/templates/ipam/vlan.html:12 #: netbox/templates/ipam/vlan/base.html:6 #: netbox/templates/ipam/vlan_edit.html:10 -#: netbox/templates/wireless/wirelesslan.html:30 +#: netbox/templates/wireless/wirelesslan.html:38 #: netbox/vpn/forms/bulk_import.py:304 netbox/vpn/forms/filtersets.py:284 -#: netbox/vpn/forms/model_forms.py:433 netbox/vpn/forms/model_forms.py:452 -#: netbox/wireless/forms/bulk_edit.py:55 -#: netbox/wireless/forms/bulk_import.py:48 -#: netbox/wireless/forms/model_forms.py:48 netbox/wireless/models.py:102 +#: netbox/vpn/forms/model_forms.py:436 netbox/vpn/forms/model_forms.py:455 +#: netbox/wireless/forms/bulk_edit.py:57 +#: netbox/wireless/forms/bulk_import.py:50 +#: netbox/wireless/forms/model_forms.py:50 netbox/wireless/models.py:102 msgid "VLAN" msgstr "VLAN" -#: netbox/ipam/forms/bulk_edit.py:245 +#: netbox/ipam/forms/bulk_edit.py:229 msgid "Prefix length" msgstr "Długość prefiksu" -#: netbox/ipam/forms/bulk_edit.py:268 netbox/ipam/forms/filtersets.py:241 -#: netbox/templates/ipam/prefix.html:85 +#: netbox/ipam/forms/bulk_edit.py:252 netbox/ipam/forms/filtersets.py:244 +#: netbox/templates/ipam/prefix.html:81 msgid "Is a pool" msgstr "Jest basenem" -#: netbox/ipam/forms/bulk_edit.py:273 netbox/ipam/forms/bulk_edit.py:318 -#: netbox/ipam/forms/filtersets.py:248 netbox/ipam/forms/filtersets.py:293 -#: netbox/ipam/models/ip.py:272 netbox/ipam/models/ip.py:539 +#: netbox/ipam/forms/bulk_edit.py:257 netbox/ipam/forms/bulk_edit.py:302 +#: netbox/ipam/forms/filtersets.py:251 netbox/ipam/forms/filtersets.py:296 +#: netbox/ipam/models/ip.py:256 netbox/ipam/models/ip.py:525 msgid "Treat as fully utilized" msgstr "Traktuj jako w pełni wykorzystany" -#: netbox/ipam/forms/bulk_edit.py:287 netbox/ipam/forms/filtersets.py:171 +#: netbox/ipam/forms/bulk_edit.py:271 netbox/ipam/forms/filtersets.py:173 +#: netbox/ipam/forms/model_forms.py:232 msgid "VLAN Assignment" msgstr "Przypisanie sieci VLAN" -#: netbox/ipam/forms/bulk_edit.py:366 netbox/ipam/models/ip.py:772 +#: netbox/ipam/forms/bulk_edit.py:350 netbox/ipam/models/ip.py:772 msgid "DNS name" msgstr "Nazwa DNS" -#: netbox/ipam/forms/bulk_edit.py:387 netbox/ipam/forms/bulk_edit.py:534 -#: netbox/ipam/forms/bulk_import.py:418 netbox/ipam/forms/bulk_import.py:493 -#: netbox/ipam/forms/bulk_import.py:519 netbox/ipam/forms/filtersets.py:390 -#: netbox/ipam/forms/filtersets.py:530 netbox/templates/ipam/fhrpgroup.html:22 +#: netbox/ipam/forms/bulk_edit.py:371 netbox/ipam/forms/bulk_edit.py:562 +#: netbox/ipam/forms/bulk_import.py:417 netbox/ipam/forms/bulk_import.py:528 +#: netbox/ipam/forms/bulk_import.py:554 netbox/ipam/forms/filtersets.py:393 +#: netbox/ipam/forms/filtersets.py:582 netbox/templates/ipam/fhrpgroup.html:22 #: netbox/templates/ipam/inc/panels/fhrp_groups.html:24 #: netbox/templates/ipam/service.html:32 #: netbox/templates/ipam/servicetemplate.html:19 msgid "Protocol" msgstr "Protokół" -#: netbox/ipam/forms/bulk_edit.py:394 netbox/ipam/forms/filtersets.py:397 +#: netbox/ipam/forms/bulk_edit.py:378 netbox/ipam/forms/filtersets.py:400 #: netbox/ipam/tables/fhrp.py:22 netbox/templates/ipam/fhrpgroup.html:26 msgid "Group ID" msgstr "Identyfikator grupy" -#: netbox/ipam/forms/bulk_edit.py:399 netbox/ipam/forms/filtersets.py:402 -#: netbox/wireless/forms/bulk_edit.py:68 -#: netbox/wireless/forms/bulk_edit.py:115 -#: netbox/wireless/forms/bulk_import.py:62 -#: netbox/wireless/forms/bulk_import.py:65 -#: netbox/wireless/forms/bulk_import.py:104 -#: netbox/wireless/forms/bulk_import.py:107 -#: netbox/wireless/forms/filtersets.py:54 -#: netbox/wireless/forms/filtersets.py:88 +#: netbox/ipam/forms/bulk_edit.py:383 netbox/ipam/forms/filtersets.py:405 +#: netbox/wireless/forms/bulk_edit.py:70 +#: netbox/wireless/forms/bulk_edit.py:118 +#: netbox/wireless/forms/bulk_import.py:64 +#: netbox/wireless/forms/bulk_import.py:67 +#: netbox/wireless/forms/bulk_import.py:109 +#: netbox/wireless/forms/bulk_import.py:112 +#: netbox/wireless/forms/filtersets.py:57 +#: netbox/wireless/forms/filtersets.py:116 msgid "Authentication type" msgstr "Typ uwierzytelniania" -#: netbox/ipam/forms/bulk_edit.py:404 netbox/ipam/forms/filtersets.py:406 +#: netbox/ipam/forms/bulk_edit.py:388 netbox/ipam/forms/filtersets.py:409 msgid "Authentication key" msgstr "klucz uwierzytelniania" -#: netbox/ipam/forms/bulk_edit.py:421 netbox/ipam/forms/filtersets.py:383 -#: netbox/ipam/forms/model_forms.py:507 netbox/netbox/navigation/menu.py:386 +#: netbox/ipam/forms/bulk_edit.py:405 netbox/ipam/forms/filtersets.py:386 +#: netbox/ipam/forms/model_forms.py:517 netbox/netbox/navigation/menu.py:407 #: netbox/templates/ipam/fhrpgroup.html:49 #: netbox/templates/wireless/inc/authentication_attrs.html:5 -#: netbox/wireless/forms/bulk_edit.py:91 -#: netbox/wireless/forms/bulk_edit.py:149 -#: netbox/wireless/forms/filtersets.py:36 -#: netbox/wireless/forms/filtersets.py:76 -#: netbox/wireless/forms/model_forms.py:55 -#: netbox/wireless/forms/model_forms.py:171 +#: netbox/wireless/forms/bulk_edit.py:94 +#: netbox/wireless/forms/bulk_edit.py:152 +#: netbox/wireless/forms/filtersets.py:39 +#: netbox/wireless/forms/filtersets.py:104 +#: netbox/wireless/forms/model_forms.py:58 +#: netbox/wireless/forms/model_forms.py:174 msgid "Authentication" msgstr "Uwierzytelnienie" -#: netbox/ipam/forms/bulk_edit.py:436 netbox/ipam/forms/model_forms.py:608 -msgid "Scope type" -msgstr "Rodzaj zakresu" - -#: netbox/ipam/forms/bulk_edit.py:439 netbox/ipam/forms/bulk_edit.py:453 -#: netbox/ipam/forms/model_forms.py:611 netbox/ipam/forms/model_forms.py:621 -#: netbox/ipam/tables/vlans.py:71 netbox/templates/ipam/vlangroup.html:38 -msgid "Scope" -msgstr "Zakres" - -#: netbox/ipam/forms/bulk_edit.py:446 netbox/ipam/models/vlans.py:60 +#: netbox/ipam/forms/bulk_edit.py:430 netbox/ipam/models/vlans.py:62 msgid "VLAN ID ranges" msgstr "Zakresy identyfikatorów VLAN" -#: netbox/ipam/forms/bulk_edit.py:525 +#: netbox/ipam/forms/bulk_edit.py:505 netbox/ipam/forms/bulk_import.py:485 +#: netbox/ipam/forms/filtersets.py:557 netbox/ipam/models/vlans.py:232 +#: netbox/ipam/tables/vlans.py:103 +msgid "Q-in-Q role" +msgstr "Rola Q w Q" + +#: netbox/ipam/forms/bulk_edit.py:522 +msgid "Q-in-Q" +msgstr "Q w Q" + +#: netbox/ipam/forms/bulk_edit.py:523 msgid "Site & Group" msgstr "Strona & Grupa" -#: netbox/ipam/forms/bulk_edit.py:539 netbox/ipam/forms/model_forms.py:692 -#: netbox/ipam/forms/model_forms.py:724 netbox/ipam/tables/services.py:19 +#: netbox/ipam/forms/bulk_edit.py:546 netbox/ipam/forms/bulk_import.py:515 +#: netbox/ipam/forms/model_forms.py:724 netbox/ipam/tables/vlans.py:256 +#: netbox/templates/ipam/vlantranslationrule.html:14 +#: netbox/vpn/forms/model_forms.py:322 netbox/vpn/forms/model_forms.py:359 +msgid "Policy" +msgstr "Polityka" + +#: netbox/ipam/forms/bulk_edit.py:567 netbox/ipam/forms/model_forms.py:742 +#: netbox/ipam/forms/model_forms.py:774 netbox/ipam/tables/services.py:19 #: netbox/ipam/tables/services.py:49 netbox/templates/ipam/service.html:36 #: netbox/templates/ipam/servicetemplate.html:23 msgid "Ports" msgstr "Porty" -#: netbox/ipam/forms/bulk_import.py:48 +#: netbox/ipam/forms/bulk_import.py:51 msgid "Import route targets" msgstr "Importuj cele trasy" -#: netbox/ipam/forms/bulk_import.py:54 +#: netbox/ipam/forms/bulk_import.py:57 msgid "Export route targets" msgstr "Cele trasy eksportu" -#: netbox/ipam/forms/bulk_import.py:92 netbox/ipam/forms/bulk_import.py:112 -#: netbox/ipam/forms/bulk_import.py:132 +#: netbox/ipam/forms/bulk_import.py:95 netbox/ipam/forms/bulk_import.py:115 +#: netbox/ipam/forms/bulk_import.py:135 msgid "Assigned RIR" msgstr "Przypisany RIR" -#: netbox/ipam/forms/bulk_import.py:182 +#: netbox/ipam/forms/bulk_import.py:178 msgid "VLAN's group (if any)" msgstr "Grupa sieci VLAN (jeśli istnieje)" -#: netbox/ipam/forms/bulk_import.py:308 -msgid "Parent device of assigned interface (if any)" -msgstr "Urządzenie nadrzędne przypisanego interfejsu (jeśli istnieje)" - -#: netbox/ipam/forms/bulk_import.py:311 netbox/ipam/forms/bulk_import.py:512 -#: netbox/ipam/forms/model_forms.py:718 -#: netbox/virtualization/filtersets.py:288 -#: netbox/virtualization/filtersets.py:327 -#: netbox/virtualization/forms/bulk_edit.py:200 -#: netbox/virtualization/forms/bulk_edit.py:326 -#: netbox/virtualization/forms/bulk_import.py:146 -#: netbox/virtualization/forms/bulk_import.py:207 -#: netbox/virtualization/forms/filtersets.py:212 -#: netbox/virtualization/forms/filtersets.py:248 -#: netbox/virtualization/forms/model_forms.py:288 -#: netbox/vpn/forms/bulk_import.py:93 netbox/vpn/forms/bulk_import.py:290 -msgid "Virtual machine" -msgstr "Maszyna wirtualna" - -#: netbox/ipam/forms/bulk_import.py:315 -msgid "Parent VM of assigned interface (if any)" -msgstr "Nadrzędna maszyna wirtualna przypisanego interfejsu (jeśli istnieje)" +#: netbox/ipam/forms/bulk_import.py:207 +#: netbox/virtualization/forms/bulk_import.py:80 +#: netbox/wireless/forms/bulk_import.py:83 +msgid "Scope ID" +msgstr "Identyfikator zakresu" #: netbox/ipam/forms/bulk_import.py:325 -msgid "Is primary" -msgstr "Jest podstawowy" - -#: netbox/ipam/forms/bulk_import.py:326 msgid "Make this the primary IP for the assigned device" msgstr "Ustaw to podstawowy adres IP przypisanego urządzenia" -#: netbox/ipam/forms/bulk_import.py:330 +#: netbox/ipam/forms/bulk_import.py:329 msgid "Is out-of-band" msgstr "Jest poza pasmem" -#: netbox/ipam/forms/bulk_import.py:331 +#: netbox/ipam/forms/bulk_import.py:330 msgid "Designate this as the out-of-band IP address for the assigned device" msgstr "Oznacz to jako adres IP poza pasmem przypisanego urządzenia" -#: netbox/ipam/forms/bulk_import.py:371 +#: netbox/ipam/forms/bulk_import.py:370 msgid "No device or virtual machine specified; cannot set as primary IP" msgstr "" "Nie określono urządzenia ani maszyny wirtualnej; nie można ustawić jako " "podstawowego adresu IP" -#: netbox/ipam/forms/bulk_import.py:375 +#: netbox/ipam/forms/bulk_import.py:374 msgid "No device specified; cannot set as out-of-band IP" msgstr "Brak określonego urządzenia; nie można ustawić jako IP poza pasmem" -#: netbox/ipam/forms/bulk_import.py:379 +#: netbox/ipam/forms/bulk_import.py:378 msgid "Cannot set out-of-band IP for virtual machines" msgstr "Nie można ustawić adresu IP poza pasmem dla maszyn wirtualnych" -#: netbox/ipam/forms/bulk_import.py:383 +#: netbox/ipam/forms/bulk_import.py:382 msgid "No interface specified; cannot set as primary IP" msgstr "" "Nie określono interfejsu; nie można ustawić jako podstawowego adresu IP" -#: netbox/ipam/forms/bulk_import.py:387 +#: netbox/ipam/forms/bulk_import.py:386 msgid "No interface specified; cannot set as out-of-band IP" msgstr "Nie określono interfejsu; nie można ustawić jako IP poza pasmem" -#: netbox/ipam/forms/bulk_import.py:422 +#: netbox/ipam/forms/bulk_import.py:421 msgid "Auth type" msgstr "Rodzaj auth" -#: netbox/ipam/forms/bulk_import.py:437 -msgid "Scope type (app & model)" -msgstr "Typ zakresu (aplikacja i model)" - -#: netbox/ipam/forms/bulk_import.py:464 +#: netbox/ipam/forms/bulk_import.py:463 msgid "Assigned VLAN group" msgstr "Przypisana grupa VLAN" -#: netbox/ipam/forms/bulk_import.py:495 netbox/ipam/forms/bulk_import.py:521 +#: netbox/ipam/forms/bulk_import.py:495 +msgid "Service VLAN (for Q-in-Q/802.1ad customer VLANs)" +msgstr "Usługa VLAN (dla sieci VLAN klienta Q-in-Q/802.1ad)" + +#: netbox/ipam/forms/bulk_import.py:518 netbox/ipam/models/vlans.py:343 +msgid "VLAN translation policy" +msgstr "Zasady tłumaczenia sieci VLAN" + +#: netbox/ipam/forms/bulk_import.py:530 netbox/ipam/forms/bulk_import.py:556 msgid "IP protocol" msgstr "protokół IP" -#: netbox/ipam/forms/bulk_import.py:509 +#: netbox/ipam/forms/bulk_import.py:544 msgid "Required if not assigned to a VM" msgstr "Wymagane, jeśli nie jest przypisane do maszyny wirtualnej" -#: netbox/ipam/forms/bulk_import.py:516 +#: netbox/ipam/forms/bulk_import.py:551 msgid "Required if not assigned to a device" msgstr "Wymagane, jeśli nie jest przypisane do urządzenia" -#: netbox/ipam/forms/bulk_import.py:541 +#: netbox/ipam/forms/bulk_import.py:576 #, python-brace-format msgid "{ip} is not assigned to this device/VM." msgstr "{ip} nie jest przypisany do tego urządzenia/maszyny wirtualnej." -#: netbox/ipam/forms/filtersets.py:47 netbox/ipam/forms/model_forms.py:63 -#: netbox/netbox/navigation/menu.py:189 netbox/vpn/forms/model_forms.py:410 +#: netbox/ipam/forms/filtersets.py:49 netbox/ipam/forms/model_forms.py:66 +#: netbox/netbox/navigation/menu.py:195 netbox/vpn/forms/model_forms.py:413 msgid "Route Targets" msgstr "Cele trasy" -#: netbox/ipam/forms/filtersets.py:53 netbox/ipam/forms/model_forms.py:50 -#: netbox/vpn/forms/filtersets.py:224 netbox/vpn/forms/model_forms.py:397 +#: netbox/ipam/forms/filtersets.py:55 netbox/ipam/forms/model_forms.py:53 +#: netbox/vpn/forms/filtersets.py:224 netbox/vpn/forms/model_forms.py:400 msgid "Import targets" msgstr "Importuj cele" -#: netbox/ipam/forms/filtersets.py:58 netbox/ipam/forms/model_forms.py:55 -#: netbox/vpn/forms/filtersets.py:229 netbox/vpn/forms/model_forms.py:402 +#: netbox/ipam/forms/filtersets.py:60 netbox/ipam/forms/model_forms.py:58 +#: netbox/vpn/forms/filtersets.py:229 netbox/vpn/forms/model_forms.py:405 msgid "Export targets" msgstr "Cele eksportowe" -#: netbox/ipam/forms/filtersets.py:73 +#: netbox/ipam/forms/filtersets.py:75 msgid "Imported by VRF" msgstr "Importowane przez VRF" -#: netbox/ipam/forms/filtersets.py:78 +#: netbox/ipam/forms/filtersets.py:80 msgid "Exported by VRF" msgstr "Eksportowane przez VRF" -#: netbox/ipam/forms/filtersets.py:87 netbox/ipam/tables/ip.py:89 +#: netbox/ipam/forms/filtersets.py:89 netbox/ipam/tables/ip.py:35 #: netbox/templates/ipam/rir.html:30 msgid "Private" msgstr "Prywatny" -#: netbox/ipam/forms/filtersets.py:105 netbox/ipam/forms/filtersets.py:191 -#: netbox/ipam/forms/filtersets.py:272 netbox/ipam/forms/filtersets.py:326 +#: netbox/ipam/forms/filtersets.py:107 netbox/ipam/forms/filtersets.py:193 +#: netbox/ipam/forms/filtersets.py:275 netbox/ipam/forms/filtersets.py:329 msgid "Address family" msgstr "Rodzina adresu" -#: netbox/ipam/forms/filtersets.py:119 netbox/templates/ipam/asnrange.html:25 +#: netbox/ipam/forms/filtersets.py:121 netbox/templates/ipam/asnrange.html:25 msgid "Range" msgstr "Zasięg" -#: netbox/ipam/forms/filtersets.py:128 +#: netbox/ipam/forms/filtersets.py:130 msgid "Start" msgstr "Rozpocznij" -#: netbox/ipam/forms/filtersets.py:132 +#: netbox/ipam/forms/filtersets.py:134 msgid "End" msgstr "Koniec" -#: netbox/ipam/forms/filtersets.py:186 +#: netbox/ipam/forms/filtersets.py:188 msgid "Search within" msgstr "Szukaj w obrębie" -#: netbox/ipam/forms/filtersets.py:207 netbox/ipam/forms/filtersets.py:342 +#: netbox/ipam/forms/filtersets.py:209 netbox/ipam/forms/filtersets.py:345 msgid "Present in VRF" msgstr "Obecny w VRF" -#: netbox/ipam/forms/filtersets.py:311 +#: netbox/ipam/forms/filtersets.py:314 msgid "Device/VM" msgstr "Urządzenie/VM" -#: netbox/ipam/forms/filtersets.py:321 +#: netbox/ipam/forms/filtersets.py:324 msgid "Parent Prefix" msgstr "Prefiks nadrzędny" -#: netbox/ipam/forms/filtersets.py:347 -msgid "Assigned Device" -msgstr "Przypisane urządzenie" - -#: netbox/ipam/forms/filtersets.py:352 -msgid "Assigned VM" -msgstr "Przypisana maszyna maszynowa" - -#: netbox/ipam/forms/filtersets.py:366 +#: netbox/ipam/forms/filtersets.py:369 msgid "Assigned to an interface" msgstr "Przypisany do interfejsu" -#: netbox/ipam/forms/filtersets.py:373 netbox/templates/ipam/ipaddress.html:51 +#: netbox/ipam/forms/filtersets.py:376 netbox/templates/ipam/ipaddress.html:51 msgid "DNS Name" msgstr "Nazwa DNS" -#: netbox/ipam/forms/filtersets.py:416 netbox/ipam/models/vlans.py:251 -#: netbox/ipam/tables/ip.py:176 netbox/ipam/tables/vlans.py:82 -#: netbox/ipam/views.py:971 netbox/netbox/navigation/menu.py:193 -#: netbox/netbox/navigation/menu.py:195 +#: netbox/ipam/forms/filtersets.py:419 netbox/ipam/models/vlans.py:273 +#: netbox/ipam/tables/ip.py:122 netbox/ipam/tables/vlans.py:51 +#: netbox/ipam/views.py:1036 netbox/netbox/navigation/menu.py:199 +#: netbox/netbox/navigation/menu.py:201 msgid "VLANs" msgstr "sieci VLAN" -#: netbox/ipam/forms/filtersets.py:457 +#: netbox/ipam/forms/filtersets.py:460 msgid "Contains VLAN ID" msgstr "Zawiera identyfikator VLAN" -#: netbox/ipam/forms/filtersets.py:513 netbox/ipam/models/vlans.py:192 +#: netbox/ipam/forms/filtersets.py:494 netbox/ipam/models/vlans.py:363 +msgid "Local VLAN ID" +msgstr "Lokalny identyfikator sieci VLAN" + +#: netbox/ipam/forms/filtersets.py:499 netbox/ipam/models/vlans.py:371 +msgid "Remote VLAN ID" +msgstr "Zdalny identyfikator sieci VLAN" + +#: netbox/ipam/forms/filtersets.py:509 +msgid "Q-in-Q/802.1ad" +msgstr "Q w Q/802.1ad" + +#: netbox/ipam/forms/filtersets.py:554 netbox/ipam/models/vlans.py:191 #: netbox/templates/ipam/vlan.html:31 msgid "VLAN ID" msgstr "IDENTYFIKATOR VLAN" -#: netbox/ipam/forms/filtersets.py:556 netbox/ipam/forms/model_forms.py:324 -#: netbox/ipam/forms/model_forms.py:746 netbox/ipam/forms/model_forms.py:772 -#: netbox/ipam/tables/vlans.py:195 -#: netbox/templates/virtualization/virtualdisk.html:21 -#: netbox/templates/virtualization/virtualmachine.html:12 -#: netbox/templates/virtualization/vminterface.html:21 -#: netbox/templates/vpn/tunneltermination.html:25 -#: netbox/virtualization/forms/filtersets.py:197 -#: netbox/virtualization/forms/filtersets.py:242 -#: netbox/virtualization/forms/model_forms.py:220 -#: netbox/virtualization/tables/virtualmachines.py:135 -#: netbox/virtualization/tables/virtualmachines.py:190 -#: netbox/vpn/choices.py:53 netbox/vpn/forms/filtersets.py:293 -#: netbox/vpn/forms/model_forms.py:160 netbox/vpn/forms/model_forms.py:171 -#: netbox/vpn/forms/model_forms.py:273 netbox/vpn/forms/model_forms.py:454 -msgid "Virtual Machine" -msgstr "Maszyna wirtualna" - -#: netbox/ipam/forms/model_forms.py:80 +#: netbox/ipam/forms/model_forms.py:83 #: netbox/templates/ipam/routetarget.html:10 msgid "Route Target" msgstr "Cel trasy" -#: netbox/ipam/forms/model_forms.py:114 netbox/ipam/tables/ip.py:117 +#: netbox/ipam/forms/model_forms.py:118 netbox/ipam/tables/ip.py:63 #: netbox/templates/ipam/aggregate.html:11 #: netbox/templates/ipam/prefix.html:38 msgid "Aggregate" msgstr "agregat" -#: netbox/ipam/forms/model_forms.py:135 netbox/templates/ipam/asnrange.html:12 +#: netbox/ipam/forms/model_forms.py:140 netbox/templates/ipam/asnrange.html:12 msgid "ASN Range" msgstr "Zakres ASN" -#: netbox/ipam/forms/model_forms.py:231 -msgid "Site/VLAN Assignment" -msgstr "" - -#: netbox/ipam/forms/model_forms.py:259 netbox/templates/ipam/iprange.html:10 +#: netbox/ipam/forms/model_forms.py:269 netbox/templates/ipam/iprange.html:10 msgid "IP Range" msgstr "Zakres IP" -#: netbox/ipam/forms/model_forms.py:295 netbox/ipam/forms/model_forms.py:325 -#: netbox/ipam/forms/model_forms.py:506 +#: netbox/ipam/forms/model_forms.py:305 netbox/ipam/forms/model_forms.py:335 +#: netbox/ipam/forms/model_forms.py:516 #: netbox/templates/ipam/fhrpgroup.html:19 msgid "FHRP Group" msgstr "Grupa FHRP" -#: netbox/ipam/forms/model_forms.py:310 +#: netbox/ipam/forms/model_forms.py:320 msgid "Make this the primary IP for the device/VM" msgstr "Ustaw to podstawowy adres IP urządzenia/maszyny wirtualnej" -#: netbox/ipam/forms/model_forms.py:314 +#: netbox/ipam/forms/model_forms.py:324 msgid "Make this the out-of-band IP for the device" msgstr "Ustaw to poza pasmem IP urządzenia" -#: netbox/ipam/forms/model_forms.py:329 +#: netbox/ipam/forms/model_forms.py:339 msgid "NAT IP (Inside)" msgstr "NAT IP (wewnątrz)" -#: netbox/ipam/forms/model_forms.py:391 +#: netbox/ipam/forms/model_forms.py:401 msgid "An IP address can only be assigned to a single object." msgstr "Adres IP może być przypisany tylko do jednego obiektu." -#: netbox/ipam/forms/model_forms.py:398 +#: netbox/ipam/forms/model_forms.py:408 msgid "Cannot reassign primary IP address for the parent device/VM" msgstr "" "Nie można ponownie przypisać głównego adresu IP urządzenia " "nadrzędnego/maszyny wirtualnej" -#: netbox/ipam/forms/model_forms.py:402 +#: netbox/ipam/forms/model_forms.py:412 msgid "Cannot reassign out-of-Band IP address for the parent device" msgstr "" "Nie można ponownie przypisać adresu IP poza pasmem dla urządzenia " "nadrzędnego" -#: netbox/ipam/forms/model_forms.py:412 +#: netbox/ipam/forms/model_forms.py:422 msgid "" "Only IP addresses assigned to an interface can be designated as primary IPs." msgstr "" "Tylko adresy IP przypisane do interfejsu mogą być oznaczone jako podstawowe " "adresy IP." -#: netbox/ipam/forms/model_forms.py:420 +#: netbox/ipam/forms/model_forms.py:430 msgid "" "Only IP addresses assigned to a device interface can be designated as the " "out-of-band IP for a device." @@ -9899,24 +10397,29 @@ msgstr "" "Tylko adresy IP przypisane do interfejsu urządzenia mogą być oznaczone jako " "adres IP poza pasmem dla urządzenia." -#: netbox/ipam/forms/model_forms.py:508 +#: netbox/ipam/forms/model_forms.py:518 msgid "Virtual IP Address" msgstr "Wirtualny adres IP" -#: netbox/ipam/forms/model_forms.py:593 +#: netbox/ipam/forms/model_forms.py:603 msgid "Assignment already exists" msgstr "Przydział już istnieje" -#: netbox/ipam/forms/model_forms.py:602 +#: netbox/ipam/forms/model_forms.py:612 #: netbox/templates/ipam/vlangroup.html:42 msgid "VLAN IDs" msgstr "Identyfikatory sieci VLAN" -#: netbox/ipam/forms/model_forms.py:620 +#: netbox/ipam/forms/model_forms.py:630 msgid "Child VLANs" msgstr "Dziecięce sieci VLAN" -#: netbox/ipam/forms/model_forms.py:697 netbox/ipam/forms/model_forms.py:729 +#: netbox/ipam/forms/model_forms.py:730 +#: netbox/templates/ipam/vlantranslationrule.html:11 +msgid "VLAN Translation Rule" +msgstr "Reguła tłumaczenia VLAN" + +#: netbox/ipam/forms/model_forms.py:747 netbox/ipam/forms/model_forms.py:779 msgid "" "Comma-separated list of one or more port numbers. A range may be specified " "using a hyphen." @@ -9924,33 +10427,28 @@ msgstr "" "Oddzielona przecinkami lista jednego lub więcej numerów portów. Zakres można" " określić za pomocą myślnika." -#: netbox/ipam/forms/model_forms.py:702 +#: netbox/ipam/forms/model_forms.py:752 #: netbox/templates/ipam/servicetemplate.html:12 msgid "Service Template" msgstr "Szablon usługi" -#: netbox/ipam/forms/model_forms.py:749 +#: netbox/ipam/forms/model_forms.py:799 msgid "Port(s)" msgstr "Port (y)" -#: netbox/ipam/forms/model_forms.py:750 netbox/ipam/forms/model_forms.py:778 -#: netbox/templates/ipam/service.html:21 -msgid "Service" -msgstr "Serwis" - -#: netbox/ipam/forms/model_forms.py:763 +#: netbox/ipam/forms/model_forms.py:813 msgid "Service template" msgstr "Szablon usługi" -#: netbox/ipam/forms/model_forms.py:775 +#: netbox/ipam/forms/model_forms.py:825 msgid "From Template" msgstr "Z szablonu" -#: netbox/ipam/forms/model_forms.py:776 +#: netbox/ipam/forms/model_forms.py:826 msgid "Custom" msgstr "Niestandardowe" -#: netbox/ipam/forms/model_forms.py:806 +#: netbox/ipam/forms/model_forms.py:856 msgid "" "Must specify name, protocol, and port(s) if not using a service template." msgstr "" @@ -9968,30 +10466,30 @@ msgstr "Zakres ASN" msgid "ASN ranges" msgstr "Zakresy ASN" -#: netbox/ipam/models/asns.py:72 +#: netbox/ipam/models/asns.py:69 #, python-brace-format msgid "Starting ASN ({start}) must be lower than ending ASN ({end})." msgstr "" "Rozpoczęcie ASN ({start}) musi być niższy niż kończący się ASN ({end})." -#: netbox/ipam/models/asns.py:104 +#: netbox/ipam/models/asns.py:101 msgid "Regional Internet Registry responsible for this AS number space" msgstr "" "Regionalny Rejestr Internetowy odpowiedzialny za tę przestrzeń numeryczną AS" -#: netbox/ipam/models/asns.py:109 +#: netbox/ipam/models/asns.py:106 msgid "16- or 32-bit autonomous system number" msgstr "16- lub 32-bitowy autonomiczny numer systemu" -#: netbox/ipam/models/fhrp.py:22 +#: netbox/ipam/models/fhrp.py:21 msgid "group ID" msgstr "ID grupy" -#: netbox/ipam/models/fhrp.py:30 netbox/ipam/models/services.py:22 +#: netbox/ipam/models/fhrp.py:29 netbox/ipam/models/services.py:21 msgid "protocol" msgstr "protokół" -#: netbox/ipam/models/fhrp.py:38 netbox/wireless/models.py:28 +#: netbox/ipam/models/fhrp.py:38 netbox/wireless/models.py:29 msgid "authentication type" msgstr "typ uwierzytelniania" @@ -10007,11 +10505,11 @@ msgstr "Grupa FHRP" msgid "FHRP groups" msgstr "Grupy FHRP" -#: netbox/ipam/models/fhrp.py:113 +#: netbox/ipam/models/fhrp.py:110 msgid "FHRP group assignment" msgstr "Przydział grupy FHRP" -#: netbox/ipam/models/fhrp.py:114 +#: netbox/ipam/models/fhrp.py:111 msgid "FHRP group assignments" msgstr "Zadania grupowe FHRP" @@ -10023,35 +10521,35 @@ msgstr "prywatny" msgid "IP space managed by this RIR is considered private" msgstr "Przestrzeń IP zarządzana przez ten RIR jest uważana za prywatną" -#: netbox/ipam/models/ip.py:72 netbox/netbox/navigation/menu.py:182 +#: netbox/ipam/models/ip.py:72 netbox/netbox/navigation/menu.py:188 msgid "RIRs" msgstr "RIR" -#: netbox/ipam/models/ip.py:84 +#: netbox/ipam/models/ip.py:81 msgid "IPv4 or IPv6 network" msgstr "Sieć IPv4 lub IPv6" -#: netbox/ipam/models/ip.py:91 +#: netbox/ipam/models/ip.py:88 msgid "Regional Internet Registry responsible for this IP space" msgstr "Regionalny Rejestr Internetowy odpowiedzialny za tę przestrzeń IP" -#: netbox/ipam/models/ip.py:101 +#: netbox/ipam/models/ip.py:98 msgid "date added" msgstr "data dodania" -#: netbox/ipam/models/ip.py:115 +#: netbox/ipam/models/ip.py:112 msgid "aggregate" msgstr "agregat" -#: netbox/ipam/models/ip.py:116 +#: netbox/ipam/models/ip.py:113 msgid "aggregates" msgstr "agregaty" -#: netbox/ipam/models/ip.py:132 +#: netbox/ipam/models/ip.py:126 msgid "Cannot create aggregate with /0 mask." msgstr "Nie można utworzyć agregatu z maską /0." -#: netbox/ipam/models/ip.py:144 +#: netbox/ipam/models/ip.py:138 #, python-brace-format msgid "" "Aggregates cannot overlap. {prefix} is already covered by an existing " @@ -10060,7 +10558,7 @@ msgstr "" "Agregaty nie mogą się nakładać. {prefix} jest już objęty istniejącym " "agregatem ({aggregate})." -#: netbox/ipam/models/ip.py:158 +#: netbox/ipam/models/ip.py:152 #, python-brace-format msgid "" "Prefixes cannot overlap aggregates. {prefix} covers an existing aggregate " @@ -10069,125 +10567,120 @@ msgstr "" "Prefiksy nie mogą nakładać się na agregaty. {prefix} obejmuje istniejące " "kruszywo ({aggregate})." -#: netbox/ipam/models/ip.py:200 netbox/ipam/models/ip.py:737 -#: netbox/vpn/models/tunnels.py:114 -msgid "role" -msgstr "roli" - -#: netbox/ipam/models/ip.py:201 +#: netbox/ipam/models/ip.py:195 msgid "roles" msgstr "ról" -#: netbox/ipam/models/ip.py:217 netbox/ipam/models/ip.py:293 +#: netbox/ipam/models/ip.py:208 netbox/ipam/models/ip.py:277 msgid "prefix" msgstr "prefiks" -#: netbox/ipam/models/ip.py:218 +#: netbox/ipam/models/ip.py:209 msgid "IPv4 or IPv6 network with mask" msgstr "Sieć IPv4 lub IPv6 z maską" -#: netbox/ipam/models/ip.py:254 +#: netbox/ipam/models/ip.py:238 msgid "Operational status of this prefix" msgstr "Status operacyjny tego prefiksu" -#: netbox/ipam/models/ip.py:262 +#: netbox/ipam/models/ip.py:246 msgid "The primary function of this prefix" msgstr "Podstawowa funkcja tego prefiksu" -#: netbox/ipam/models/ip.py:265 +#: netbox/ipam/models/ip.py:249 msgid "is a pool" msgstr "jest basenem" -#: netbox/ipam/models/ip.py:267 +#: netbox/ipam/models/ip.py:251 msgid "All IP addresses within this prefix are considered usable" msgstr "Wszystkie adresy IP w tym prefiksie są uważane za użyteczne" -#: netbox/ipam/models/ip.py:270 netbox/ipam/models/ip.py:537 +#: netbox/ipam/models/ip.py:254 netbox/ipam/models/ip.py:523 msgid "mark utilized" msgstr "użyty znak" -#: netbox/ipam/models/ip.py:294 +#: netbox/ipam/models/ip.py:278 msgid "prefixes" msgstr "prefiksy" -#: netbox/ipam/models/ip.py:317 +#: netbox/ipam/models/ip.py:298 msgid "Cannot create prefix with /0 mask." msgstr "Nie można utworzyć prefiksu z maską /0." -#: netbox/ipam/models/ip.py:324 netbox/ipam/models/ip.py:874 +#: netbox/ipam/models/ip.py:305 netbox/ipam/models/ip.py:871 #, python-brace-format msgid "VRF {vrf}" msgstr "VRF {vrf}" -#: netbox/ipam/models/ip.py:324 netbox/ipam/models/ip.py:874 +#: netbox/ipam/models/ip.py:305 netbox/ipam/models/ip.py:871 msgid "global table" msgstr "tabela globalna" -#: netbox/ipam/models/ip.py:326 +#: netbox/ipam/models/ip.py:307 #, python-brace-format msgid "Duplicate prefix found in {table}: {prefix}" msgstr "Zduplikowany prefiks znaleziony w {table}: {prefix}" -#: netbox/ipam/models/ip.py:495 +#: netbox/ipam/models/ip.py:481 msgid "start address" msgstr "adres początkowy" -#: netbox/ipam/models/ip.py:496 netbox/ipam/models/ip.py:500 -#: netbox/ipam/models/ip.py:712 +#: netbox/ipam/models/ip.py:482 netbox/ipam/models/ip.py:486 +#: netbox/ipam/models/ip.py:711 msgid "IPv4 or IPv6 address (with mask)" msgstr "Adres IPv4 lub IPv6 (z maską)" -#: netbox/ipam/models/ip.py:499 +#: netbox/ipam/models/ip.py:485 msgid "end address" msgstr "adres końcowy" -#: netbox/ipam/models/ip.py:526 +#: netbox/ipam/models/ip.py:512 msgid "Operational status of this range" msgstr "Stan operacyjny tego zakresu" -#: netbox/ipam/models/ip.py:534 +#: netbox/ipam/models/ip.py:520 msgid "The primary function of this range" msgstr "Podstawowa funkcja tego zakresu" -#: netbox/ipam/models/ip.py:548 +#: netbox/ipam/models/ip.py:534 msgid "IP range" msgstr "Zakres IP" -#: netbox/ipam/models/ip.py:549 +#: netbox/ipam/models/ip.py:535 msgid "IP ranges" msgstr "Zakresy IP" -#: netbox/ipam/models/ip.py:565 +#: netbox/ipam/models/ip.py:548 msgid "Starting and ending IP address versions must match" msgstr "Początkowe i kończące wersje adresu IP muszą być zgodne" -#: netbox/ipam/models/ip.py:571 +#: netbox/ipam/models/ip.py:554 msgid "Starting and ending IP address masks must match" msgstr "Początkowe i kończące maski adresów IP muszą być zgodne" -#: netbox/ipam/models/ip.py:578 +#: netbox/ipam/models/ip.py:561 #, python-brace-format msgid "" "Ending address must be greater than the starting address ({start_address})" msgstr "Adres końcowy musi być większy niż adres początkowy ({start_address})" -#: netbox/ipam/models/ip.py:590 +#: netbox/ipam/models/ip.py:589 #, python-brace-format msgid "Defined addresses overlap with range {overlapping_range} in VRF {vrf}" msgstr "" "Zdefiniowane adresy pokrywają się z zakresem {overlapping_range} w VRF {vrf}" -#: netbox/ipam/models/ip.py:599 +#: netbox/ipam/models/ip.py:598 #, python-brace-format msgid "Defined range exceeds maximum supported size ({max_size})" msgstr "" "Zdefiniowany zakres przekracza maksymalny obsługiwany rozmiar ({max_size})" -#: netbox/ipam/models/ip.py:711 netbox/tenancy/models/contacts.py:82 +#: netbox/ipam/models/ip.py:710 netbox/tenancy/models/contacts.py:77 msgid "address" msgstr "przemawiać" -#: netbox/ipam/models/ip.py:734 +#: netbox/ipam/models/ip.py:733 msgid "The operational status of this IP" msgstr "Status operacyjny niniejszego IP" @@ -10207,34 +10700,34 @@ msgstr "IP, dla którego ten adres jest „zewnętrznym” adresem IP" msgid "Hostname or FQDN (not case-sensitive)" msgstr "Nazwa hosta lub FQDN (nie rozróżnia wielkości liter)" -#: netbox/ipam/models/ip.py:789 netbox/ipam/models/services.py:94 +#: netbox/ipam/models/ip.py:789 netbox/ipam/models/services.py:90 msgid "IP addresses" msgstr "Adresy IP" -#: netbox/ipam/models/ip.py:845 +#: netbox/ipam/models/ip.py:842 msgid "Cannot create IP address with /0 mask." msgstr "Nie można utworzyć adresu IP z maską /0." -#: netbox/ipam/models/ip.py:851 +#: netbox/ipam/models/ip.py:848 #, python-brace-format msgid "{ip} is a network ID, which may not be assigned to an interface." msgstr "" "{ip} jest identyfikatorem sieci, który może nie być przypisany do " "interfejsu." -#: netbox/ipam/models/ip.py:862 +#: netbox/ipam/models/ip.py:859 #, python-brace-format msgid "" "{ip} is a broadcast address, which may not be assigned to an interface." msgstr "" "{ip} jest adresem nadawczym, który nie może być przypisany do interfejsu." -#: netbox/ipam/models/ip.py:876 +#: netbox/ipam/models/ip.py:873 #, python-brace-format msgid "Duplicate IP address found in {table}: {ipaddress}" msgstr "Zduplikowany adres IP znaleziony w {table}: {ipaddress}" -#: netbox/ipam/models/ip.py:897 +#: netbox/ipam/models/ip.py:896 msgid "" "Cannot reassign IP address while it is designated as the primary IP for the " "parent object" @@ -10242,74 +10735,74 @@ msgstr "" "Nie można ponownie przypisać adresu IP, gdy jest on wyznaczony jako główny " "adres IP dla obiektu nadrzędnego" -#: netbox/ipam/models/ip.py:903 +#: netbox/ipam/models/ip.py:902 msgid "Only IPv6 addresses can be assigned SLAAC status" msgstr "Tylko adresy IPv6 mogą mieć przypisany status SLAAC" -#: netbox/ipam/models/services.py:33 +#: netbox/ipam/models/services.py:32 msgid "port numbers" msgstr "numery portów" -#: netbox/ipam/models/services.py:59 +#: netbox/ipam/models/services.py:58 msgid "service template" msgstr "szablon usługi" -#: netbox/ipam/models/services.py:60 +#: netbox/ipam/models/services.py:59 msgid "service templates" msgstr "szablony usług" -#: netbox/ipam/models/services.py:95 +#: netbox/ipam/models/services.py:91 msgid "The specific IP addresses (if any) to which this service is bound" msgstr "" "Konkretne adresy IP (jeśli istnieją), z którymi ta usługa jest związana" -#: netbox/ipam/models/services.py:102 +#: netbox/ipam/models/services.py:98 msgid "service" msgstr "usługi" -#: netbox/ipam/models/services.py:103 +#: netbox/ipam/models/services.py:99 msgid "services" msgstr "usług" -#: netbox/ipam/models/services.py:117 +#: netbox/ipam/models/services.py:110 msgid "" "A service cannot be associated with both a device and a virtual machine." msgstr "" "Usługa nie może być powiązana zarówno z urządzeniem, jak i maszyną " "wirtualną." -#: netbox/ipam/models/services.py:119 +#: netbox/ipam/models/services.py:112 msgid "" "A service must be associated with either a device or a virtual machine." msgstr "Usługa musi być powiązana z urządzeniem lub maszyną wirtualną." -#: netbox/ipam/models/vlans.py:85 +#: netbox/ipam/models/vlans.py:87 msgid "VLAN groups" msgstr "Grupy VLAN" -#: netbox/ipam/models/vlans.py:95 +#: netbox/ipam/models/vlans.py:94 msgid "Cannot set scope_type without scope_id." msgstr "Nie można ustawić typu skope_bez identyfikatora scope_id." -#: netbox/ipam/models/vlans.py:97 +#: netbox/ipam/models/vlans.py:96 msgid "Cannot set scope_id without scope_type." msgstr "Nie można ustawić scope_id bez scope_type." -#: netbox/ipam/models/vlans.py:105 +#: netbox/ipam/models/vlans.py:104 #, python-brace-format msgid "Starting VLAN ID in range ({value}) cannot be less than {minimum}" msgstr "" "Uruchamianie identyfikatora VLAN w zakresie ({value}) nie może być mniejszy " "niż {minimum}" -#: netbox/ipam/models/vlans.py:111 +#: netbox/ipam/models/vlans.py:110 #, python-brace-format msgid "Ending VLAN ID in range ({value}) cannot exceed {maximum}" msgstr "" "Zakończenie identyfikatora VLAN w zakresie ({value}) nie może przekroczyć " "{maximum}" -#: netbox/ipam/models/vlans.py:118 +#: netbox/ipam/models/vlans.py:117 #, python-brace-format msgid "" "Ending VLAN ID in range must be greater than or equal to the starting VLAN " @@ -10318,32 +10811,37 @@ msgstr "" "Kończący identyfikator VLAN w zakresie musi być większy lub równy " "początkowemu identyfikatorowi VLAN ({range})" -#: netbox/ipam/models/vlans.py:124 +#: netbox/ipam/models/vlans.py:123 msgid "Ranges cannot overlap." msgstr "Zakresy nie mogą się nakładać." -#: netbox/ipam/models/vlans.py:181 +#: netbox/ipam/models/vlans.py:180 msgid "The specific site to which this VLAN is assigned (if any)" msgstr "" "Określona strona, do której przypisana jest ta sieć VLAN (jeśli istnieje)" -#: netbox/ipam/models/vlans.py:189 +#: netbox/ipam/models/vlans.py:188 msgid "VLAN group (optional)" msgstr "Grupa VLAN (opcjonalnie)" -#: netbox/ipam/models/vlans.py:197 +#: netbox/ipam/models/vlans.py:196 netbox/ipam/models/vlans.py:368 +#: netbox/ipam/models/vlans.py:376 msgid "Numeric VLAN ID (1-4094)" msgstr "Numeryczny identyfikator sieci VLAN (1-4094)" -#: netbox/ipam/models/vlans.py:215 +#: netbox/ipam/models/vlans.py:214 msgid "Operational status of this VLAN" msgstr "Stan operacyjny tej sieci VLAN" -#: netbox/ipam/models/vlans.py:223 +#: netbox/ipam/models/vlans.py:222 msgid "The primary function of this VLAN" msgstr "Podstawowa funkcja tej VLAN" -#: netbox/ipam/models/vlans.py:266 +#: netbox/ipam/models/vlans.py:237 +msgid "Customer/service VLAN designation (for Q-in-Q/IEEE 802.1ad)" +msgstr "Oznaczenie sieci VLAN klienta/usługi (dla Q-in-Q/IEEE 802.1ad)" + +#: netbox/ipam/models/vlans.py:285 #, python-brace-format msgid "" "VLAN is assigned to group {group} (scope: {scope}); cannot also assign to " @@ -10352,41 +10850,57 @@ msgstr "" "VLAN jest przypisana do grupy {group} (zakres: {scope}); nie można również " "przypisać do witryny {site}." -#: netbox/ipam/models/vlans.py:275 +#: netbox/ipam/models/vlans.py:294 #, python-brace-format msgid "VID must be in ranges {ranges} for VLANs in group {group}" msgstr "VID musi być w zakresach {ranges} dla sieci VLAN w grupie {group}" -#: netbox/ipam/models/vrfs.py:30 +#: netbox/ipam/models/vlans.py:301 +msgid "Only Q-in-Q customer VLANs maybe assigned to a service VLAN." +msgstr "Tylko sieci VLAN klientów Q-in-Q mogą być przypisane do usługi VLAN." + +#: netbox/ipam/models/vlans.py:307 +msgid "A Q-in-Q customer VLAN must be assigned to a service VLAN." +msgstr "Usługa VLAN klienta Q-in-Q musi być przypisana do sieci VLAN usługi." + +#: netbox/ipam/models/vlans.py:344 +msgid "VLAN translation policies" +msgstr "Zasady tłumaczenia sieci VLAN" + +#: netbox/ipam/models/vlans.py:385 +msgid "VLAN translation rule" +msgstr "Reguła tłumaczenia VLAN" + +#: netbox/ipam/models/vrfs.py:29 msgid "route distinguisher" msgstr "rozróżniacz trasy" -#: netbox/ipam/models/vrfs.py:31 +#: netbox/ipam/models/vrfs.py:30 msgid "Unique route distinguisher (as defined in RFC 4364)" msgstr "Unikalny rozróżniacz trasy (zgodnie z definicją w RFC 4364)" -#: netbox/ipam/models/vrfs.py:42 +#: netbox/ipam/models/vrfs.py:41 msgid "enforce unique space" msgstr "egzekwuj unikalną przestrzeń" -#: netbox/ipam/models/vrfs.py:43 +#: netbox/ipam/models/vrfs.py:42 msgid "Prevent duplicate prefixes/IP addresses within this VRF" msgstr "Zapobiegaj duplikowaniu prefiksów / adresów IP w tym VRF" -#: netbox/ipam/models/vrfs.py:63 netbox/netbox/navigation/menu.py:186 -#: netbox/netbox/navigation/menu.py:188 +#: netbox/ipam/models/vrfs.py:62 netbox/netbox/navigation/menu.py:192 +#: netbox/netbox/navigation/menu.py:194 msgid "VRFs" msgstr "VRF" -#: netbox/ipam/models/vrfs.py:82 +#: netbox/ipam/models/vrfs.py:78 msgid "Route target value (formatted in accordance with RFC 4360)" msgstr "Wartość docelowa trasy (sformatowana zgodnie z RFC 4360)" -#: netbox/ipam/models/vrfs.py:94 +#: netbox/ipam/models/vrfs.py:91 msgid "route target" msgstr "cel trasy" -#: netbox/ipam/models/vrfs.py:95 +#: netbox/ipam/models/vrfs.py:92 msgid "route targets" msgstr "cele trasy" @@ -10402,84 +10916,101 @@ msgstr "Liczba witryn" msgid "Provider Count" msgstr "Liczba dostawców" -#: netbox/ipam/tables/ip.py:95 netbox/netbox/navigation/menu.py:179 -#: netbox/netbox/navigation/menu.py:181 +#: netbox/ipam/tables/ip.py:41 netbox/netbox/navigation/menu.py:185 +#: netbox/netbox/navigation/menu.py:187 msgid "Aggregates" msgstr "Agregaty" -#: netbox/ipam/tables/ip.py:125 +#: netbox/ipam/tables/ip.py:71 msgid "Added" msgstr "Dodano" -#: netbox/ipam/tables/ip.py:128 netbox/ipam/tables/ip.py:166 -#: netbox/ipam/tables/vlans.py:142 netbox/ipam/views.py:346 -#: netbox/netbox/navigation/menu.py:165 netbox/netbox/navigation/menu.py:167 -#: netbox/templates/ipam/vlan.html:84 +#: netbox/ipam/tables/ip.py:74 netbox/ipam/tables/ip.py:112 +#: netbox/ipam/tables/vlans.py:118 netbox/ipam/views.py:373 +#: netbox/netbox/navigation/menu.py:171 netbox/netbox/navigation/menu.py:173 +#: netbox/templates/ipam/vlan.html:100 msgid "Prefixes" msgstr "Prefiksy" -#: netbox/ipam/tables/ip.py:131 netbox/ipam/tables/ip.py:270 -#: netbox/ipam/tables/ip.py:324 netbox/ipam/tables/vlans.py:86 +#: netbox/ipam/tables/ip.py:77 netbox/ipam/tables/ip.py:221 +#: netbox/ipam/tables/ip.py:276 netbox/ipam/tables/vlans.py:55 #: netbox/templates/dcim/device.html:260 #: netbox/templates/ipam/aggregate.html:24 -#: netbox/templates/ipam/iprange.html:29 netbox/templates/ipam/prefix.html:106 +#: netbox/templates/ipam/iprange.html:29 netbox/templates/ipam/prefix.html:102 msgid "Utilization" msgstr "Wykorzystanie" -#: netbox/ipam/tables/ip.py:171 netbox/netbox/navigation/menu.py:161 +#: netbox/ipam/tables/ip.py:117 netbox/netbox/navigation/menu.py:167 msgid "IP Ranges" msgstr "Zakresy IP" -#: netbox/ipam/tables/ip.py:221 +#: netbox/ipam/tables/ip.py:167 msgid "Prefix (Flat)" msgstr "Prefiks (płaski)" -#: netbox/ipam/tables/ip.py:225 +#: netbox/ipam/tables/ip.py:171 msgid "Depth" msgstr "Głębokość" -#: netbox/ipam/tables/ip.py:262 +#: netbox/ipam/tables/ip.py:191 netbox/ipam/tables/vlans.py:37 +#: netbox/virtualization/tables/clusters.py:77 +#: netbox/wireless/tables/wirelesslan.py:55 +msgid "Scope Type" +msgstr "Rodzaj zakresu" + +#: netbox/ipam/tables/ip.py:213 msgid "Pool" msgstr "Basen" -#: netbox/ipam/tables/ip.py:266 netbox/ipam/tables/ip.py:320 +#: netbox/ipam/tables/ip.py:217 netbox/ipam/tables/ip.py:272 msgid "Marked Utilized" msgstr "Oznaczone Używane" -#: netbox/ipam/tables/ip.py:304 +#: netbox/ipam/tables/ip.py:256 msgid "Start address" msgstr "Adres początkowy" -#: netbox/ipam/tables/ip.py:383 +#: netbox/ipam/tables/ip.py:335 msgid "NAT (Inside)" msgstr "NAT (Wewnątrz)" -#: netbox/ipam/tables/ip.py:388 +#: netbox/ipam/tables/ip.py:340 msgid "NAT (Outside)" msgstr "NAT (na zewnątrz)" -#: netbox/ipam/tables/ip.py:393 +#: netbox/ipam/tables/ip.py:345 msgid "Assigned" msgstr "Przypisany" -#: netbox/ipam/tables/ip.py:429 netbox/templates/vpn/l2vpntermination.html:16 +#: netbox/ipam/tables/ip.py:381 netbox/templates/vpn/l2vpntermination.html:16 #: netbox/vpn/forms/filtersets.py:240 msgid "Assigned Object" msgstr "Przypisany obiekt" -#: netbox/ipam/tables/vlans.py:68 -msgid "Scope Type" -msgstr "Rodzaj zakresu" - -#: netbox/ipam/tables/vlans.py:76 +#: netbox/ipam/tables/vlans.py:45 msgid "VID Ranges" msgstr "Zakresy VID" -#: netbox/ipam/tables/vlans.py:111 netbox/ipam/tables/vlans.py:214 +#: netbox/ipam/tables/vlans.py:80 netbox/ipam/tables/vlans.py:190 #: netbox/templates/dcim/inc/interface_vlans_table.html:4 msgid "VID" msgstr "VIDEO" +#: netbox/ipam/tables/vlans.py:237 +#: netbox/templates/ipam/vlantranslationpolicy.html:22 +msgid "Rules" +msgstr "Zasady" + +#: netbox/ipam/tables/vlans.py:260 +#: netbox/templates/ipam/vlantranslationrule.html:18 +msgid "Local VID" +msgstr "Lokalny VID" + +#: netbox/ipam/tables/vlans.py:264 +#: netbox/templates/ipam/vlantranslationrule.html:22 +msgid "Remote VID" +msgstr "Zdalny VID" + #: netbox/ipam/tables/vrfs.py:30 msgid "RD" msgstr "RD." @@ -10520,23 +11051,23 @@ msgstr "" "W nazwach DNS dozwolone są tylko znaki alfanumeryczne, gwiazdki, łączniki, " "kropki i podkreślenia" -#: netbox/ipam/views.py:533 +#: netbox/ipam/views.py:570 msgid "Child Prefixes" msgstr "Prefiksy podrzędne" -#: netbox/ipam/views.py:569 +#: netbox/ipam/views.py:606 msgid "Child Ranges" msgstr "Zakresy dla dzieci" -#: netbox/ipam/views.py:898 +#: netbox/ipam/views.py:958 msgid "Related IPs" msgstr "Powiązane adresy IP" -#: netbox/ipam/views.py:1127 +#: netbox/ipam/views.py:1315 msgid "Device Interfaces" msgstr "Interfejsy urządzeń" -#: netbox/ipam/views.py:1145 +#: netbox/ipam/views.py:1333 msgid "VM Interfaces" msgstr "Interfejsy VM" @@ -10586,90 +11117,112 @@ msgstr "{class_name} musi zaimplementować get_view_name ()" msgid "Invalid permission {permission} for model {model}" msgstr "Nieprawidłowe uprawnienia {permission} dla modelu {model}" -#: netbox/netbox/choices.py:49 +#: netbox/netbox/choices.py:51 msgid "Dark Red" msgstr "Ciemny czerwony" -#: netbox/netbox/choices.py:52 +#: netbox/netbox/choices.py:54 msgid "Rose" msgstr "Róża" -#: netbox/netbox/choices.py:53 +#: netbox/netbox/choices.py:55 msgid "Fuchsia" msgstr "Fuksja" -#: netbox/netbox/choices.py:55 +#: netbox/netbox/choices.py:57 msgid "Dark Purple" msgstr "Ciemnofioletowy" -#: netbox/netbox/choices.py:58 +#: netbox/netbox/choices.py:60 msgid "Light Blue" msgstr "Jasnoniebieski" -#: netbox/netbox/choices.py:61 +#: netbox/netbox/choices.py:63 msgid "Aqua" msgstr "wodny" -#: netbox/netbox/choices.py:62 +#: netbox/netbox/choices.py:64 msgid "Dark Green" msgstr "Ciemnozielony" -#: netbox/netbox/choices.py:64 +#: netbox/netbox/choices.py:66 msgid "Light Green" msgstr "Jasnozielony" -#: netbox/netbox/choices.py:65 +#: netbox/netbox/choices.py:67 msgid "Lime" msgstr "Wapno" -#: netbox/netbox/choices.py:67 +#: netbox/netbox/choices.py:69 msgid "Amber" msgstr "Amber" -#: netbox/netbox/choices.py:69 +#: netbox/netbox/choices.py:71 msgid "Dark Orange" msgstr "Ciemny Pomarańczowy" -#: netbox/netbox/choices.py:70 +#: netbox/netbox/choices.py:72 msgid "Brown" msgstr "Brązowy" -#: netbox/netbox/choices.py:71 +#: netbox/netbox/choices.py:73 msgid "Light Grey" msgstr "Jasnoszary" -#: netbox/netbox/choices.py:72 +#: netbox/netbox/choices.py:74 msgid "Grey" msgstr "Szary" -#: netbox/netbox/choices.py:73 +#: netbox/netbox/choices.py:75 msgid "Dark Grey" msgstr "Ciemny szary" -#: netbox/netbox/choices.py:128 +#: netbox/netbox/choices.py:103 netbox/templates/extras/script_result.html:56 +msgid "Default" +msgstr "Domyślnie" + +#: netbox/netbox/choices.py:130 msgid "Direct" msgstr "Bezpośredni" -#: netbox/netbox/choices.py:129 +#: netbox/netbox/choices.py:131 msgid "Upload" msgstr "Przesyłanie" -#: netbox/netbox/choices.py:141 netbox/netbox/choices.py:155 +#: netbox/netbox/choices.py:143 netbox/netbox/choices.py:157 msgid "Auto-detect" msgstr "Automatyczne wykrywanie" -#: netbox/netbox/choices.py:156 +#: netbox/netbox/choices.py:158 msgid "Comma" msgstr "przecinek" -#: netbox/netbox/choices.py:157 +#: netbox/netbox/choices.py:159 msgid "Semicolon" msgstr "Średnik" -#: netbox/netbox/choices.py:158 +#: netbox/netbox/choices.py:160 msgid "Tab" msgstr "Zakładka" +#: netbox/netbox/choices.py:193 netbox/templates/dcim/device.html:327 +#: netbox/templates/dcim/rack.html:107 +msgid "Kilograms" +msgstr "Kilogramy" + +#: netbox/netbox/choices.py:194 +msgid "Grams" +msgstr "Gramy" + +#: netbox/netbox/choices.py:195 netbox/templates/dcim/device.html:328 +#: netbox/templates/dcim/rack.html:108 +msgid "Pounds" +msgstr "funty" + +#: netbox/netbox/choices.py:196 +msgid "Ounces" +msgstr "Uncja" + #: netbox/netbox/config/__init__.py:67 #, python-brace-format msgid "Invalid configuration parameter: {item}" @@ -10959,6 +11512,26 @@ msgstr "data zsynchronizowana" msgid "{class_name} must implement a sync_data() method." msgstr "{class_name} musi wdrożyć metodę sync_data ()." +#: netbox/netbox/models/mixins.py:22 +msgid "weight unit" +msgstr "jednostka wagowa" + +#: netbox/netbox/models/mixins.py:52 +msgid "Must specify a unit when setting a weight" +msgstr "Należy określić jednostkę podczas ustawiania wagi" + +#: netbox/netbox/models/mixins.py:57 +msgid "distance" +msgstr "odstęp" + +#: netbox/netbox/models/mixins.py:64 +msgid "distance unit" +msgstr "jednostka odległości" + +#: netbox/netbox/models/mixins.py:99 +msgid "Must specify a unit when setting a distance" +msgstr "Należy określić jednostkę podczas ustawiania odległości" + #: netbox/netbox/navigation/menu.py:11 msgid "Organization" msgstr "Organizacja" @@ -10992,10 +11565,6 @@ msgstr "Role szafy" msgid "Elevations" msgstr "Elewacje" -#: netbox/netbox/navigation/menu.py:60 netbox/netbox/navigation/menu.py:62 -msgid "Rack Types" -msgstr "Rodzaje szaf" - #: netbox/netbox/navigation/menu.py:76 msgid "Modules" msgstr "Moduły" @@ -11018,175 +11587,200 @@ msgstr "Komponenty urządzenia" msgid "Inventory Item Roles" msgstr "Role pozycji zapasów" -#: netbox/netbox/navigation/menu.py:111 netbox/netbox/navigation/menu.py:115 +#: netbox/netbox/navigation/menu.py:110 +#: netbox/templates/dcim/interface.html:413 +#: netbox/templates/virtualization/vminterface.html:118 +msgid "MAC Addresses" +msgstr "Adresy MAC" + +#: netbox/netbox/navigation/menu.py:117 netbox/netbox/navigation/menu.py:121 +#: netbox/templates/dcim/interface.html:182 msgid "Connections" msgstr "Połączenia" -#: netbox/netbox/navigation/menu.py:117 +#: netbox/netbox/navigation/menu.py:123 msgid "Cables" msgstr "Kable" -#: netbox/netbox/navigation/menu.py:118 +#: netbox/netbox/navigation/menu.py:124 msgid "Wireless Links" msgstr "Linki bezprzewodowe" -#: netbox/netbox/navigation/menu.py:121 +#: netbox/netbox/navigation/menu.py:127 msgid "Interface Connections" msgstr "Połączenia interfejsu" -#: netbox/netbox/navigation/menu.py:126 +#: netbox/netbox/navigation/menu.py:132 msgid "Console Connections" msgstr "Połączenia konsoli" -#: netbox/netbox/navigation/menu.py:131 +#: netbox/netbox/navigation/menu.py:137 msgid "Power Connections" msgstr "Połączenia zasilania" -#: netbox/netbox/navigation/menu.py:147 +#: netbox/netbox/navigation/menu.py:153 msgid "Wireless LAN Groups" msgstr "Grupy sieci bezprzewodowej sieci LAN" -#: netbox/netbox/navigation/menu.py:168 +#: netbox/netbox/navigation/menu.py:174 msgid "Prefix & VLAN Roles" msgstr "Role prefiksów i VLAN" -#: netbox/netbox/navigation/menu.py:174 +#: netbox/netbox/navigation/menu.py:180 msgid "ASN Ranges" msgstr "Zakresy ASN" -#: netbox/netbox/navigation/menu.py:196 +#: netbox/netbox/navigation/menu.py:202 msgid "VLAN Groups" msgstr "Grupy VLAN" #: netbox/netbox/navigation/menu.py:203 +msgid "VLAN Translation Policies" +msgstr "Zasady tłumaczeń VLAN" + +#: netbox/netbox/navigation/menu.py:204 +#: netbox/templates/ipam/vlantranslationpolicy.html:46 +msgid "VLAN Translation Rules" +msgstr "Zasady tłumaczenia VLAN" + +#: netbox/netbox/navigation/menu.py:211 msgid "Service Templates" msgstr "Szablony usług" -#: netbox/netbox/navigation/menu.py:204 netbox/templates/dcim/device.html:302 +#: netbox/netbox/navigation/menu.py:212 netbox/templates/dcim/device.html:302 #: netbox/templates/ipam/ipaddress.html:118 #: netbox/templates/virtualization/virtualmachine.html:154 msgid "Services" msgstr "Usługi" -#: netbox/netbox/navigation/menu.py:211 +#: netbox/netbox/navigation/menu.py:219 msgid "VPN" msgstr "VPN" -#: netbox/netbox/navigation/menu.py:215 netbox/netbox/navigation/menu.py:217 +#: netbox/netbox/navigation/menu.py:223 netbox/netbox/navigation/menu.py:225 #: netbox/vpn/tables/tunnels.py:24 msgid "Tunnels" msgstr "Tunele" -#: netbox/netbox/navigation/menu.py:218 +#: netbox/netbox/navigation/menu.py:226 #: netbox/templates/vpn/tunnelgroup.html:8 msgid "Tunnel Groups" msgstr "Grupy tuneli" -#: netbox/netbox/navigation/menu.py:219 +#: netbox/netbox/navigation/menu.py:227 msgid "Tunnel Terminations" msgstr "Zakończenia tunelu" -#: netbox/netbox/navigation/menu.py:223 netbox/netbox/navigation/menu.py:225 +#: netbox/netbox/navigation/menu.py:231 netbox/netbox/navigation/menu.py:233 #: netbox/vpn/models/l2vpn.py:64 msgid "L2VPNs" msgstr "L2VPN" -#: netbox/netbox/navigation/menu.py:226 netbox/templates/vpn/l2vpn.html:56 -#: netbox/templates/vpn/tunnel.html:72 netbox/vpn/tables/tunnels.py:58 -msgid "Terminations" -msgstr "Zakończenia" - -#: netbox/netbox/navigation/menu.py:232 +#: netbox/netbox/navigation/menu.py:240 msgid "IKE Proposals" msgstr "Propozycje IKE" -#: netbox/netbox/navigation/menu.py:233 +#: netbox/netbox/navigation/menu.py:241 #: netbox/templates/vpn/ikeproposal.html:41 msgid "IKE Policies" msgstr "IKE Zasady działalności" -#: netbox/netbox/navigation/menu.py:234 +#: netbox/netbox/navigation/menu.py:242 msgid "IPSec Proposals" msgstr "Propozycje IPsec" -#: netbox/netbox/navigation/menu.py:235 +#: netbox/netbox/navigation/menu.py:243 #: netbox/templates/vpn/ipsecproposal.html:37 msgid "IPSec Policies" msgstr "Zasady IPsec" -#: netbox/netbox/navigation/menu.py:236 netbox/templates/vpn/ikepolicy.html:38 +#: netbox/netbox/navigation/menu.py:244 netbox/templates/vpn/ikepolicy.html:38 #: netbox/templates/vpn/ipsecpolicy.html:25 msgid "IPSec Profiles" msgstr "Profile IPsec" -#: netbox/netbox/navigation/menu.py:251 +#: netbox/netbox/navigation/menu.py:259 #: netbox/templates/virtualization/virtualmachine.html:174 #: netbox/templates/virtualization/virtualmachine/base.html:32 #: netbox/templates/virtualization/virtualmachine_list.html:21 -#: netbox/virtualization/tables/virtualmachines.py:104 -#: netbox/virtualization/views.py:386 +#: netbox/virtualization/tables/virtualmachines.py:74 +#: netbox/virtualization/views.py:403 msgid "Virtual Disks" msgstr "Wirtualne dyski" -#: netbox/netbox/navigation/menu.py:258 +#: netbox/netbox/navigation/menu.py:266 msgid "Cluster Types" msgstr "Typy klastrów" -#: netbox/netbox/navigation/menu.py:259 +#: netbox/netbox/navigation/menu.py:267 msgid "Cluster Groups" msgstr "Grupy klastrów" -#: netbox/netbox/navigation/menu.py:273 +#: netbox/netbox/navigation/menu.py:281 msgid "Circuit Types" msgstr "Typy obwodów" -#: netbox/netbox/navigation/menu.py:274 -msgid "Circuit Groups" -msgstr "Grupy obwodów" - -#: netbox/netbox/navigation/menu.py:275 -#: netbox/templates/circuits/circuit.html:66 -msgid "Group Assignments" -msgstr "Zadania grupowe" - -#: netbox/netbox/navigation/menu.py:276 +#: netbox/netbox/navigation/menu.py:282 msgid "Circuit Terminations" msgstr "Zakończenia obwodów" -#: netbox/netbox/navigation/menu.py:280 netbox/netbox/navigation/menu.py:282 +#: netbox/netbox/navigation/menu.py:286 netbox/netbox/navigation/menu.py:288 +#: netbox/templates/circuits/providernetwork.html:55 +msgid "Virtual Circuits" +msgstr "Wirtualne obwody" + +#: netbox/netbox/navigation/menu.py:289 +msgid "Virtual Circuit Types" +msgstr "Typy obwodów wirtualnych" + +#: netbox/netbox/navigation/menu.py:290 +msgid "Virtual Circuit Terminations" +msgstr "Zakończenia obwodu wirtualnego" + +#: netbox/netbox/navigation/menu.py:296 +msgid "Circuit Groups" +msgstr "Grupy obwodów" + +#: netbox/netbox/navigation/menu.py:297 +#: netbox/templates/circuits/circuit.html:76 +#: netbox/templates/circuits/virtualcircuit.html:69 +msgid "Group Assignments" +msgstr "Zadania grupowe" + +#: netbox/netbox/navigation/menu.py:301 netbox/netbox/navigation/menu.py:303 msgid "Providers" msgstr "Dostawcy" -#: netbox/netbox/navigation/menu.py:283 +#: netbox/netbox/navigation/menu.py:304 #: netbox/templates/circuits/provider.html:51 msgid "Provider Accounts" msgstr "Konta dostawców" -#: netbox/netbox/navigation/menu.py:284 +#: netbox/netbox/navigation/menu.py:305 msgid "Provider Networks" msgstr "Sieci dostawców" -#: netbox/netbox/navigation/menu.py:298 +#: netbox/netbox/navigation/menu.py:319 msgid "Power Panels" msgstr "Panele zasilające" -#: netbox/netbox/navigation/menu.py:309 +#: netbox/netbox/navigation/menu.py:330 msgid "Configurations" msgstr "Konfiguracje" -#: netbox/netbox/navigation/menu.py:311 +#: netbox/netbox/navigation/menu.py:332 msgid "Config Contexts" msgstr "Konteksty konfiguracji" -#: netbox/netbox/navigation/menu.py:312 +#: netbox/netbox/navigation/menu.py:333 msgid "Config Templates" msgstr "Szablony konfiguracji" -#: netbox/netbox/navigation/menu.py:319 netbox/netbox/navigation/menu.py:323 +#: netbox/netbox/navigation/menu.py:340 netbox/netbox/navigation/menu.py:344 msgid "Customization" msgstr "Dostosowywanie" -#: netbox/netbox/navigation/menu.py:325 +#: netbox/netbox/navigation/menu.py:346 #: netbox/templates/dcim/device_edit.html:103 #: netbox/templates/dcim/htmx/cable_edit.html:81 #: netbox/templates/dcim/virtualchassis_add.html:31 @@ -11195,96 +11789,96 @@ msgstr "Dostosowywanie" #: netbox/templates/htmx/form.html:19 netbox/templates/inc/filter_list.html:30 #: netbox/templates/inc/panels/custom_fields.html:7 #: netbox/templates/ipam/ipaddress_bulk_add.html:35 -#: netbox/templates/ipam/vlan_edit.html:59 +#: netbox/templates/ipam/vlan_edit.html:67 msgid "Custom Fields" msgstr "Pola niestandardowe" -#: netbox/netbox/navigation/menu.py:326 +#: netbox/netbox/navigation/menu.py:347 msgid "Custom Field Choices" msgstr "Niestandardowe opcje pól" -#: netbox/netbox/navigation/menu.py:327 +#: netbox/netbox/navigation/menu.py:348 msgid "Custom Links" msgstr "Linki niestandardowe" -#: netbox/netbox/navigation/menu.py:328 +#: netbox/netbox/navigation/menu.py:349 msgid "Export Templates" msgstr "Szablony eksportu" -#: netbox/netbox/navigation/menu.py:329 +#: netbox/netbox/navigation/menu.py:350 msgid "Saved Filters" msgstr "Zapisane filtry" -#: netbox/netbox/navigation/menu.py:331 +#: netbox/netbox/navigation/menu.py:352 msgid "Image Attachments" msgstr "Załączniki do obrazów" -#: netbox/netbox/navigation/menu.py:349 +#: netbox/netbox/navigation/menu.py:370 msgid "Operations" msgstr "Operacje" -#: netbox/netbox/navigation/menu.py:353 +#: netbox/netbox/navigation/menu.py:374 msgid "Integrations" msgstr "Integracje" -#: netbox/netbox/navigation/menu.py:355 +#: netbox/netbox/navigation/menu.py:376 msgid "Data Sources" msgstr "Źródła danych" -#: netbox/netbox/navigation/menu.py:356 +#: netbox/netbox/navigation/menu.py:377 msgid "Event Rules" msgstr "Zasady zdarzeń" -#: netbox/netbox/navigation/menu.py:357 +#: netbox/netbox/navigation/menu.py:378 msgid "Webhooks" msgstr "Haczyki internetowe" -#: netbox/netbox/navigation/menu.py:361 netbox/netbox/navigation/menu.py:365 -#: netbox/netbox/views/generic/feature_views.py:153 +#: netbox/netbox/navigation/menu.py:382 netbox/netbox/navigation/menu.py:386 +#: netbox/netbox/views/generic/feature_views.py:158 #: netbox/templates/extras/report/base.html:37 #: netbox/templates/extras/script/base.html:36 msgid "Jobs" msgstr "Oferty pracy" -#: netbox/netbox/navigation/menu.py:371 +#: netbox/netbox/navigation/menu.py:392 msgid "Logging" msgstr "Rejestracja" -#: netbox/netbox/navigation/menu.py:373 +#: netbox/netbox/navigation/menu.py:394 msgid "Notification Groups" msgstr "Grupy powiadomień" -#: netbox/netbox/navigation/menu.py:374 +#: netbox/netbox/navigation/menu.py:395 msgid "Journal Entries" msgstr "Wpisy do czasopism" -#: netbox/netbox/navigation/menu.py:375 +#: netbox/netbox/navigation/menu.py:396 #: netbox/templates/core/objectchange.html:9 #: netbox/templates/core/objectchange_list.html:4 msgid "Change Log" msgstr "Dziennik zmian" -#: netbox/netbox/navigation/menu.py:382 netbox/templates/inc/user_menu.html:29 +#: netbox/netbox/navigation/menu.py:403 netbox/templates/inc/user_menu.html:29 msgid "Admin" msgstr "Administrator" -#: netbox/netbox/navigation/menu.py:430 netbox/templates/account/base.html:27 -#: netbox/templates/inc/user_menu.html:57 +#: netbox/netbox/navigation/menu.py:451 netbox/templates/account/base.html:27 +#: netbox/templates/inc/user_menu.html:52 msgid "API Tokens" msgstr "Tokeny API" -#: netbox/netbox/navigation/menu.py:437 netbox/users/forms/model_forms.py:187 +#: netbox/netbox/navigation/menu.py:458 netbox/users/forms/model_forms.py:187 #: netbox/users/forms/model_forms.py:195 netbox/users/forms/model_forms.py:242 #: netbox/users/forms/model_forms.py:249 msgid "Permissions" msgstr "Uprawnienia" -#: netbox/netbox/navigation/menu.py:445 netbox/netbox/navigation/menu.py:449 +#: netbox/netbox/navigation/menu.py:466 netbox/netbox/navigation/menu.py:470 #: netbox/templates/core/system.html:7 msgid "System" msgstr "System" -#: netbox/netbox/navigation/menu.py:454 netbox/netbox/navigation/menu.py:502 +#: netbox/netbox/navigation/menu.py:475 netbox/netbox/navigation/menu.py:523 #: netbox/templates/500.html:35 netbox/templates/account/preferences.html:22 #: netbox/templates/core/plugin.html:13 #: netbox/templates/core/plugin_list.html:7 @@ -11292,29 +11886,29 @@ msgstr "System" msgid "Plugins" msgstr "Wtyczki" -#: netbox/netbox/navigation/menu.py:459 +#: netbox/netbox/navigation/menu.py:480 msgid "Configuration History" msgstr "Historia konfiguracji" -#: netbox/netbox/navigation/menu.py:465 netbox/templates/core/rq_task.html:8 +#: netbox/netbox/navigation/menu.py:486 netbox/templates/core/rq_task.html:8 #: netbox/templates/core/rq_task_list.html:22 msgid "Background Tasks" msgstr "Zadania w tle" -#: netbox/netbox/plugins/navigation.py:47 -#: netbox/netbox/plugins/navigation.py:69 +#: netbox/netbox/plugins/navigation.py:48 +#: netbox/netbox/plugins/navigation.py:70 msgid "Permissions must be passed as a tuple or list." msgstr "Uprawnienia muszą być przekazywane jako kropka lub lista." -#: netbox/netbox/plugins/navigation.py:51 +#: netbox/netbox/plugins/navigation.py:52 msgid "Buttons must be passed as a tuple or list." msgstr "Przyciski muszą być przekazywane jako kółka lub lista." -#: netbox/netbox/plugins/navigation.py:73 +#: netbox/netbox/plugins/navigation.py:74 msgid "Button color must be a choice within ButtonColorChoices." msgstr "Kolor przycisku musi być wybrany w ButtonColorChoices." -#: netbox/netbox/plugins/registration.py:25 +#: netbox/netbox/plugins/registration.py:26 #, python-brace-format msgid "" "PluginTemplateExtension class {template_extension} was passed as an " @@ -11323,7 +11917,7 @@ msgstr "" "PluginTemplateExtension class {template_extension} Został przekazany jako " "przykład!" -#: netbox/netbox/plugins/registration.py:31 +#: netbox/netbox/plugins/registration.py:32 #, python-brace-format msgid "" "{template_extension} is not a subclass of " @@ -11332,18 +11926,18 @@ msgstr "" "{template_extension} nie jest podklasą " "Netbox.Plugins.Plugins.PluginTemplateExtension!" -#: netbox/netbox/plugins/registration.py:51 +#: netbox/netbox/plugins/registration.py:57 #, python-brace-format msgid "{item} must be an instance of netbox.plugins.PluginMenuItem" msgstr "{item} musi być wystąpieniem Netbox.Plugins.Plugins.PluginMenuItem" -#: netbox/netbox/plugins/registration.py:62 +#: netbox/netbox/plugins/registration.py:68 #, python-brace-format msgid "{menu_link} must be an instance of netbox.plugins.PluginMenuItem" msgstr "" "{menu_link} musi być wystąpieniem Netbox.Plugins.Plugins.PluginMenuItem" -#: netbox/netbox/plugins/registration.py:67 +#: netbox/netbox/plugins/registration.py:73 #, python-brace-format msgid "{button} must be an instance of netbox.plugins.PluginMenuButton" msgstr "" @@ -11428,93 +12022,93 @@ msgstr "Nie można dodać sklepów do rejestru po zainicjowaniu" msgid "Cannot delete stores from registry" msgstr "Nie można usunąć sklepów z rejestru" -#: netbox/netbox/settings.py:760 +#: netbox/netbox/settings.py:752 msgid "Czech" msgstr "czeski" -#: netbox/netbox/settings.py:761 +#: netbox/netbox/settings.py:753 msgid "Danish" msgstr "duński" -#: netbox/netbox/settings.py:762 +#: netbox/netbox/settings.py:754 msgid "German" msgstr "niemiecki" -#: netbox/netbox/settings.py:763 +#: netbox/netbox/settings.py:755 msgid "English" msgstr "angielski" -#: netbox/netbox/settings.py:764 +#: netbox/netbox/settings.py:756 msgid "Spanish" msgstr "hiszpański" -#: netbox/netbox/settings.py:765 +#: netbox/netbox/settings.py:757 msgid "French" msgstr "francuski" -#: netbox/netbox/settings.py:766 +#: netbox/netbox/settings.py:758 msgid "Italian" msgstr "włoski" -#: netbox/netbox/settings.py:767 +#: netbox/netbox/settings.py:759 msgid "Japanese" msgstr "japoński" -#: netbox/netbox/settings.py:768 +#: netbox/netbox/settings.py:760 msgid "Dutch" msgstr "holenderski" -#: netbox/netbox/settings.py:769 +#: netbox/netbox/settings.py:761 msgid "Polish" msgstr "polski" -#: netbox/netbox/settings.py:770 +#: netbox/netbox/settings.py:762 msgid "Portuguese" msgstr "portugalski" -#: netbox/netbox/settings.py:771 +#: netbox/netbox/settings.py:763 msgid "Russian" msgstr "rosyjski" -#: netbox/netbox/settings.py:772 +#: netbox/netbox/settings.py:764 msgid "Turkish" msgstr "turecki" -#: netbox/netbox/settings.py:773 +#: netbox/netbox/settings.py:765 msgid "Ukrainian" msgstr "ukraiński" -#: netbox/netbox/settings.py:774 +#: netbox/netbox/settings.py:766 msgid "Chinese" msgstr "chiński" -#: netbox/netbox/tables/columns.py:176 +#: netbox/netbox/tables/columns.py:177 msgid "Select all" msgstr "Zaznacz wszystko" -#: netbox/netbox/tables/columns.py:189 +#: netbox/netbox/tables/columns.py:190 msgid "Toggle all" msgstr "Przełącz wszystko" -#: netbox/netbox/tables/columns.py:300 +#: netbox/netbox/tables/columns.py:302 msgid "Toggle Dropdown" msgstr "Przełącz menu rozwijane" -#: netbox/netbox/tables/columns.py:572 netbox/templates/core/job.html:53 +#: netbox/netbox/tables/columns.py:575 netbox/templates/core/job.html:53 msgid "Error" msgstr "Błąd" -#: netbox/netbox/tables/tables.py:58 +#: netbox/netbox/tables/tables.py:59 #, python-brace-format msgid "No {model_name} found" msgstr "Nie znaleziono {model_name} " -#: netbox/netbox/tables/tables.py:249 +#: netbox/netbox/tables/tables.py:252 #: netbox/templates/generic/bulk_import.html:117 msgid "Field" msgstr "Pole" -#: netbox/netbox/tables/tables.py:252 +#: netbox/netbox/tables/tables.py:255 msgid "Value" msgstr "Wartość" @@ -11530,24 +12124,24 @@ msgid "" msgstr "" "Wystąpił błąd renderowania wybranego szablonu eksportu ({template}): {error}" -#: netbox/netbox/views/generic/bulk_views.py:416 +#: netbox/netbox/views/generic/bulk_views.py:421 #, python-brace-format msgid "Row {i}: Object with ID {id} does not exist" msgstr "Wiersz {i}: Obiekt z identyfikatorem {id} nie istnieje" -#: netbox/netbox/views/generic/bulk_views.py:709 -#: netbox/netbox/views/generic/bulk_views.py:910 -#: netbox/netbox/views/generic/bulk_views.py:958 +#: netbox/netbox/views/generic/bulk_views.py:708 +#: netbox/netbox/views/generic/bulk_views.py:909 +#: netbox/netbox/views/generic/bulk_views.py:957 #, python-brace-format msgid "No {object_type} were selected." msgstr "Nie {object_type} zostały wybrane." -#: netbox/netbox/views/generic/bulk_views.py:788 +#: netbox/netbox/views/generic/bulk_views.py:787 #, python-brace-format msgid "Renamed {count} {object_type}" msgstr "Zmiana nazwy {count} {object_type}" -#: netbox/netbox/views/generic/bulk_views.py:888 +#: netbox/netbox/views/generic/bulk_views.py:887 #, python-brace-format msgid "Deleted {count} {object_type}" msgstr "Usunięte {count} {object_type}" @@ -11560,16 +12154,16 @@ msgstr "Dziennik zmian" msgid "Journal" msgstr "Dziennik" -#: netbox/netbox/views/generic/feature_views.py:207 +#: netbox/netbox/views/generic/feature_views.py:212 msgid "Unable to synchronize data: No data file set." msgstr "Nie można zsynchronizować danych: Brak zestawu plików danych." -#: netbox/netbox/views/generic/feature_views.py:211 +#: netbox/netbox/views/generic/feature_views.py:216 #, python-brace-format msgid "Synchronized data for {object_type} {object}." msgstr "Zsynchronizowane dane dla {object_type} {object}." -#: netbox/netbox/views/generic/feature_views.py:236 +#: netbox/netbox/views/generic/feature_views.py:241 #, python-brace-format msgid "Synced {count} {object_type}" msgstr "Zsynchronizowane {count} {object_type}" @@ -11643,9 +12237,9 @@ msgstr "na GitHub" msgid "Home Page" msgstr "Strona główna" -#: netbox/templates/account/base.html:7 netbox/templates/inc/user_menu.html:45 +#: netbox/templates/account/base.html:7 netbox/templates/inc/user_menu.html:40 #: netbox/vpn/forms/bulk_edit.py:255 netbox/vpn/forms/filtersets.py:189 -#: netbox/vpn/forms/model_forms.py:379 +#: netbox/vpn/forms/model_forms.py:382 msgid "Profile" msgstr "Profil" @@ -11657,12 +12251,12 @@ msgstr "Powiadomienia" #: netbox/templates/account/base.html:16 #: netbox/templates/account/subscriptions.html:7 -#: netbox/templates/inc/user_menu.html:51 +#: netbox/templates/inc/user_menu.html:46 msgid "Subscriptions" msgstr "Subskrypcje" #: netbox/templates/account/base.html:19 -#: netbox/templates/inc/user_menu.html:54 +#: netbox/templates/inc/user_menu.html:49 msgid "Preferences" msgstr "Preferencje" @@ -11690,6 +12284,7 @@ msgstr "Zmień hasło" #: netbox/templates/generic/object_edit.html:72 #: netbox/templates/htmx/delete_form.html:53 #: netbox/templates/htmx/delete_form.html:55 +#: netbox/templates/htmx/quick_add.html:21 #: netbox/templates/ipam/ipaddress_assign.html:28 #: netbox/templates/virtualization/cluster_add_devices.html:30 msgid "Cancel" @@ -11788,7 +12383,7 @@ msgstr "Przydzielone grupy" #: netbox/templates/core/objectchange.html:142 #: netbox/templates/dcim/devicebay.html:59 #: netbox/templates/dcim/inc/panels/inventory_items.html:45 -#: netbox/templates/dcim/interface.html:296 +#: netbox/templates/dcim/interface.html:353 #: netbox/templates/dcim/modulebay.html:80 #: netbox/templates/extras/configcontext.html:70 #: netbox/templates/extras/eventrule.html:66 @@ -11797,6 +12392,7 @@ msgstr "Przydzielone grupy" #: netbox/templates/extras/webhook.html:75 #: netbox/templates/inc/panel_table.html:13 #: netbox/templates/inc/panels/comments.html:10 +#: netbox/templates/inc/panels/related_objects.html:23 #: netbox/templates/ipam/inc/panels/fhrp_groups.html:56 #: netbox/templates/users/group.html:34 netbox/templates/users/group.html:44 #: netbox/templates/users/objectpermission.html:77 @@ -11834,7 +12430,7 @@ msgstr "Ostatnio używane" msgid "Add a Token" msgstr "Dodaj token" -#: netbox/templates/base/base.html:22 netbox/templates/home.html:27 +#: netbox/templates/base/base.html:23 netbox/templates/home.html:27 msgid "Home" msgstr "Strona główna" @@ -11876,15 +12472,16 @@ msgstr "Kod źródłowy" msgid "Community" msgstr "Społeczność" -#: netbox/templates/circuits/circuit.html:47 +#: netbox/templates/circuits/circuit.html:57 msgid "Install Date" msgstr "Data instalacji" -#: netbox/templates/circuits/circuit.html:51 +#: netbox/templates/circuits/circuit.html:61 msgid "Termination Date" msgstr "Data wypowiedzenia" -#: netbox/templates/circuits/circuit.html:70 +#: netbox/templates/circuits/circuit.html:80 +#: netbox/templates/circuits/virtualcircuit.html:73 #: netbox/templates/ipam/inc/panels/fhrp_groups.html:15 msgid "Assign Group" msgstr "Przypisz grupę" @@ -11932,7 +12529,7 @@ msgid "Add" msgstr "Dodaj" #: netbox/templates/circuits/inc/circuit_termination.html:15 -#: netbox/templates/circuits/inc/circuit_termination_fields.html:36 +#: netbox/templates/circuits/inc/circuit_termination_fields.html:37 #: netbox/templates/dcim/inc/panels/inventory_items.html:32 #: netbox/templates/dcim/powerpanel.html:56 #: netbox/templates/extras/script_list.html:30 @@ -11947,35 +12544,39 @@ msgstr "Edytuj" msgid "Swap" msgstr "Zamień" -#: netbox/templates/circuits/inc/circuit_termination_fields.html:19 +#: netbox/templates/circuits/inc/circuit_termination_fields.html:5 +msgid "Termination point" +msgstr "Punkt zakończenia" + +#: netbox/templates/circuits/inc/circuit_termination_fields.html:20 #: netbox/templates/dcim/consoleport.html:59 #: netbox/templates/dcim/consoleserverport.html:60 #: netbox/templates/dcim/powerfeed.html:114 msgid "Marked as connected" msgstr "Oznaczony jako połączony" -#: netbox/templates/circuits/inc/circuit_termination_fields.html:21 +#: netbox/templates/circuits/inc/circuit_termination_fields.html:22 msgid "to" msgstr "do" -#: netbox/templates/circuits/inc/circuit_termination_fields.html:31 #: netbox/templates/circuits/inc/circuit_termination_fields.html:32 +#: netbox/templates/circuits/inc/circuit_termination_fields.html:33 #: netbox/templates/dcim/frontport.html:80 #: netbox/templates/dcim/inc/connection_endpoints.html:7 -#: netbox/templates/dcim/interface.html:154 +#: netbox/templates/dcim/interface.html:211 #: netbox/templates/dcim/rearport.html:76 msgid "Trace" msgstr "Ślad" -#: netbox/templates/circuits/inc/circuit_termination_fields.html:35 +#: netbox/templates/circuits/inc/circuit_termination_fields.html:36 msgid "Edit cable" msgstr "Edytuj kabel" -#: netbox/templates/circuits/inc/circuit_termination_fields.html:40 +#: netbox/templates/circuits/inc/circuit_termination_fields.html:41 msgid "Remove cable" msgstr "Wyjmij kabel" -#: netbox/templates/circuits/inc/circuit_termination_fields.html:41 +#: netbox/templates/circuits/inc/circuit_termination_fields.html:42 #: netbox/templates/dcim/bulk_disconnect.html:5 #: netbox/templates/dcim/device/consoleports.html:12 #: netbox/templates/dcim/device/consoleserverports.html:12 @@ -11988,33 +12589,33 @@ msgstr "Wyjmij kabel" msgid "Disconnect" msgstr "Odłącz" -#: netbox/templates/circuits/inc/circuit_termination_fields.html:48 +#: netbox/templates/circuits/inc/circuit_termination_fields.html:49 #: netbox/templates/dcim/consoleport.html:69 #: netbox/templates/dcim/consoleserverport.html:70 #: netbox/templates/dcim/frontport.html:102 -#: netbox/templates/dcim/interface.html:180 -#: netbox/templates/dcim/interface.html:200 +#: netbox/templates/dcim/interface.html:237 +#: netbox/templates/dcim/interface.html:257 #: netbox/templates/dcim/powerfeed.html:127 -#: netbox/templates/dcim/poweroutlet.html:71 -#: netbox/templates/dcim/poweroutlet.html:72 +#: netbox/templates/dcim/poweroutlet.html:81 +#: netbox/templates/dcim/poweroutlet.html:82 #: netbox/templates/dcim/powerport.html:73 #: netbox/templates/dcim/rearport.html:98 msgid "Connect" msgstr "Połącz" -#: netbox/templates/circuits/inc/circuit_termination_fields.html:70 +#: netbox/templates/circuits/inc/circuit_termination_fields.html:65 msgid "Downstream" msgstr "W dalszej części" -#: netbox/templates/circuits/inc/circuit_termination_fields.html:71 +#: netbox/templates/circuits/inc/circuit_termination_fields.html:66 msgid "Upstream" msgstr "W górę rzeki" -#: netbox/templates/circuits/inc/circuit_termination_fields.html:80 +#: netbox/templates/circuits/inc/circuit_termination_fields.html:75 msgid "Cross-Connect" msgstr "Połączenie krzyżowe" -#: netbox/templates/circuits/inc/circuit_termination_fields.html:84 +#: netbox/templates/circuits/inc/circuit_termination_fields.html:79 msgid "Patch Panel/Port" msgstr "Panel krosowy/port" @@ -12026,6 +12627,27 @@ msgstr "Dodaj obwód" msgid "Provider Account" msgstr "Konto dostawcy" +#: netbox/templates/circuits/providernetwork.html:59 +msgid "Add a Virtual Circuit" +msgstr "Dodaj obwód wirtualny" + +#: netbox/templates/circuits/virtualcircuit.html:91 +#: netbox/templates/vpn/tunnel.html:9 +msgid "Add Termination" +msgstr "Dodaj zakończenie" + +#: netbox/templates/circuits/virtualcircuittermination.html:23 +msgid "Virtual Circuit Termination" +msgstr "Zakończenie obwodu wirtualnego" + +#: netbox/templates/circuits/virtualcircuittype.html:10 +msgid "Add Virtual Circuit" +msgstr "Dodaj obwód wirtualny" + +#: netbox/templates/circuits/virtualcircuittype.html:19 +msgid "Virtual Circuit Type" +msgstr "Typ obwodu wirtualnego" + #: netbox/templates/core/configrevision.html:35 msgid "Configuration Data" msgstr "Dane konfiguracyjne" @@ -12059,7 +12681,7 @@ msgstr "Zmieniono" #: netbox/templates/core/datafile.html:42 #: netbox/templates/ipam/iprange.html:25 #: netbox/templates/virtualization/virtualdisk.html:29 -#: netbox/virtualization/tables/virtualmachines.py:198 +#: netbox/virtualization/tables/virtualmachines.py:169 msgid "Size" msgstr "Rozmiar" @@ -12500,8 +13122,8 @@ msgstr "Zmień nazwę Wybrano" #: netbox/templates/dcim/consoleport.html:65 #: netbox/templates/dcim/consoleserverport.html:66 #: netbox/templates/dcim/frontport.html:98 -#: netbox/templates/dcim/interface.html:176 -#: netbox/templates/dcim/poweroutlet.html:69 +#: netbox/templates/dcim/interface.html:233 +#: netbox/templates/dcim/poweroutlet.html:79 #: netbox/templates/dcim/powerport.html:69 msgid "Not Connected" msgstr "Nie jest połączony" @@ -12524,7 +13146,7 @@ msgid "Map" msgstr "Mapa" #: netbox/templates/dcim/device.html:108 -#: netbox/templates/dcim/inventoryitem.html:56 +#: netbox/templates/dcim/inventoryitem.html:60 #: netbox/templates/dcim/module.html:81 #: netbox/templates/dcim/modulebay.html:74 netbox/templates/dcim/rack.html:61 msgid "Asset Tag" @@ -12540,7 +13162,7 @@ msgstr "Utwórz VDC" #: netbox/templates/dcim/device.html:175 #: netbox/templates/dcim/device_edit.html:64 -#: netbox/virtualization/forms/model_forms.py:223 +#: netbox/virtualization/forms/model_forms.py:230 msgid "Management" msgstr "Zarządzanie" @@ -12657,35 +13279,6 @@ msgstr "Dodaj port zasilania" msgid "Add Rear Ports" msgstr "Dodaj tylne porty" -#: netbox/templates/dcim/device/render_config.html:5 -#: netbox/templates/virtualization/virtualmachine/render_config.html:5 -msgid "Config" -msgstr "Konfiguracja" - -#: netbox/templates/dcim/device/render_config.html:35 -#: netbox/templates/virtualization/virtualmachine/render_config.html:35 -msgid "Context Data" -msgstr "Dane kontekstowe" - -#: netbox/templates/dcim/device/render_config.html:55 -#: netbox/templates/virtualization/virtualmachine/render_config.html:55 -msgid "Rendered Config" -msgstr "Wyrenderowana konfiguracja" - -#: netbox/templates/dcim/device/render_config.html:57 -#: netbox/templates/virtualization/virtualmachine/render_config.html:57 -msgid "Download" -msgstr "Ściągnij" - -#: netbox/templates/dcim/device/render_config.html:64 -#: netbox/templates/virtualization/virtualmachine/render_config.html:64 -msgid "Error rendering template" -msgstr "Szablon renderowania błędu" - -#: netbox/templates/dcim/device/render_config.html:70 -msgid "No configuration template has been assigned for this device." -msgstr "" - #: netbox/templates/dcim/device_edit.html:44 msgid "Parent Bay" msgstr "Zatoka Parent" @@ -12752,12 +13345,12 @@ msgid "VM Role" msgstr "Rola maszyny wirtualnej" #: netbox/templates/dcim/devicetype.html:18 -#: netbox/templates/dcim/moduletype.html:29 +#: netbox/templates/dcim/moduletype.html:31 msgid "Model Name" msgstr "Nazwa modelu" #: netbox/templates/dcim/devicetype.html:25 -#: netbox/templates/dcim/moduletype.html:33 +#: netbox/templates/dcim/moduletype.html:35 msgid "Part Number" msgstr "Numer części" @@ -12782,8 +13375,8 @@ msgid "Rear Port Position" msgstr "Pozycja tylnego portu" #: netbox/templates/dcim/frontport.html:72 -#: netbox/templates/dcim/interface.html:144 -#: netbox/templates/dcim/poweroutlet.html:63 +#: netbox/templates/dcim/interface.html:201 +#: netbox/templates/dcim/poweroutlet.html:73 #: netbox/templates/dcim/powerport.html:63 #: netbox/templates/dcim/rearport.html:68 msgid "Marked as Connected" @@ -12883,77 +13476,79 @@ msgid "PoE Type" msgstr "Typ PoE" #: netbox/templates/dcim/interface.html:81 -#: netbox/templates/virtualization/vminterface.html:63 +#: netbox/templates/virtualization/vminterface.html:55 +#: netbox/virtualization/forms/model_forms.py:395 msgid "802.1Q Mode" msgstr "Tryb 802.1Q" -#: netbox/templates/dcim/interface.html:125 -#: netbox/templates/virtualization/vminterface.html:59 -msgid "MAC Address" -msgstr "Adres MAC" +#: netbox/templates/dcim/interface.html:156 +#: netbox/templates/virtualization/vminterface.html:88 +msgid "VLAN Translation" +msgstr "Tłumaczenie VLAN" -#: netbox/templates/dcim/interface.html:151 +#: netbox/templates/dcim/interface.html:208 msgid "Wireless Link" msgstr "Bezprzewodowe łącze" -#: netbox/templates/dcim/interface.html:218 netbox/vpn/choices.py:63 -msgid "Peer" -msgstr "Peer" - -#: netbox/templates/dcim/interface.html:230 +#: netbox/templates/dcim/interface.html:287 #: netbox/templates/wireless/inc/wirelesslink_interface.html:26 msgid "Channel" msgstr "Kanał" -#: netbox/templates/dcim/interface.html:239 +#: netbox/templates/dcim/interface.html:296 #: netbox/templates/wireless/inc/wirelesslink_interface.html:32 msgid "Channel Frequency" msgstr "Częstotliwość kanału" -#: netbox/templates/dcim/interface.html:242 -#: netbox/templates/dcim/interface.html:250 -#: netbox/templates/dcim/interface.html:261 -#: netbox/templates/dcim/interface.html:269 +#: netbox/templates/dcim/interface.html:299 +#: netbox/templates/dcim/interface.html:307 +#: netbox/templates/dcim/interface.html:318 +#: netbox/templates/dcim/interface.html:326 msgid "MHz" msgstr "MHz" -#: netbox/templates/dcim/interface.html:258 +#: netbox/templates/dcim/interface.html:315 #: netbox/templates/wireless/inc/wirelesslink_interface.html:42 msgid "Channel Width" msgstr "Szerokość kanału" -#: netbox/templates/dcim/interface.html:285 +#: netbox/templates/dcim/interface.html:342 #: netbox/templates/wireless/wirelesslan.html:14 #: netbox/templates/wireless/wirelesslink.html:21 -#: netbox/wireless/forms/bulk_edit.py:60 -#: netbox/wireless/forms/bulk_edit.py:102 -#: netbox/wireless/forms/filtersets.py:40 -#: netbox/wireless/forms/filtersets.py:80 netbox/wireless/models.py:82 -#: netbox/wireless/models.py:156 netbox/wireless/tables/wirelesslan.py:44 +#: netbox/wireless/forms/bulk_edit.py:62 +#: netbox/wireless/forms/bulk_edit.py:105 +#: netbox/wireless/forms/filtersets.py:43 +#: netbox/wireless/forms/filtersets.py:108 netbox/wireless/models.py:82 +#: netbox/wireless/models.py:153 netbox/wireless/tables/wirelesslan.py:44 msgid "SSID" msgstr "SSID" -#: netbox/templates/dcim/interface.html:305 +#: netbox/templates/dcim/interface.html:362 msgid "LAG Members" msgstr "Członkowie LGD" -#: netbox/templates/dcim/interface.html:323 +#: netbox/templates/dcim/interface.html:380 msgid "No member interfaces" msgstr "Brak interfejsów członka" -#: netbox/templates/dcim/interface.html:343 +#: netbox/templates/dcim/interface.html:400 #: netbox/templates/ipam/fhrpgroup.html:73 #: netbox/templates/ipam/iprange/ip_addresses.html:7 #: netbox/templates/ipam/prefix/ip_addresses.html:7 -#: netbox/templates/virtualization/vminterface.html:89 +#: netbox/templates/virtualization/vminterface.html:105 msgid "Add IP Address" msgstr "Dodaj adres IP" +#: netbox/templates/dcim/interface.html:417 +#: netbox/templates/virtualization/vminterface.html:123 +msgid "Add MAC Address" +msgstr "Dodaj adres MAC" + #: netbox/templates/dcim/inventoryitem.html:24 msgid "Parent Item" msgstr "Element nadrzędny" -#: netbox/templates/dcim/inventoryitem.html:48 +#: netbox/templates/dcim/inventoryitem.html:52 msgid "Part ID" msgstr "Identyfikator części" @@ -12973,6 +13568,10 @@ msgstr "Dodawanie lokalizacji" msgid "Add a Device" msgstr "Dodawanie urządzenia" +#: netbox/templates/dcim/macaddress.html:36 +msgid "Primary for interface" +msgstr "Podstawowy interfejs" + #: netbox/templates/dcim/manufacturer.html:16 msgid "Add Device Type" msgstr "Dodaj typ urządzenia" @@ -13003,7 +13602,7 @@ msgctxt "Abbreviation for amperes" msgid "A" msgstr "A" -#: netbox/templates/dcim/poweroutlet.html:48 +#: netbox/templates/dcim/poweroutlet.html:58 msgid "Feed Leg" msgstr "Noga karmienia" @@ -13435,11 +14034,19 @@ msgstr "Nie można załadować treści. Nieprawidłowa nazwa widoku" msgid "No content found" msgstr "Nie znaleziono treści" -#: netbox/templates/extras/dashboard/widgets/rssfeed.html:18 +#: netbox/templates/extras/dashboard/widgets/rssfeed.html:17 +msgid "" +"This RSS feed requires an external connection. Check the ISOLATED_DEPLOYMENT" +" setting." +msgstr "" +"Ten kanał RSS wymaga połączenia zewnętrznego. Sprawdź ustawienie " +"ISOLATED_DEPLOYMENT." + +#: netbox/templates/extras/dashboard/widgets/rssfeed.html:22 msgid "There was a problem fetching the RSS feed" msgstr "Wystąpił problem z pobieraniem kanału RSS" -#: netbox/templates/extras/dashboard/widgets/rssfeed.html:21 +#: netbox/templates/extras/dashboard/widgets/rssfeed.html:25 msgid "HTTP" msgstr "HTTP" @@ -13509,6 +14116,30 @@ msgstr "Konteksty źródłowe" msgid "New Journal Entry" msgstr "Nowy wpis do dziennika" +#: netbox/templates/extras/object_render_config.html:6 +msgid "Config" +msgstr "Konfiguracja" + +#: netbox/templates/extras/object_render_config.html:36 +msgid "Context Data" +msgstr "Dane kontekstowe" + +#: netbox/templates/extras/object_render_config.html:56 +msgid "Rendered Config" +msgstr "Wyrenderowana konfiguracja" + +#: netbox/templates/extras/object_render_config.html:58 +msgid "Download" +msgstr "Ściągnij" + +#: netbox/templates/extras/object_render_config.html:65 +msgid "Error rendering template" +msgstr "Szablon renderowania błędu" + +#: netbox/templates/extras/object_render_config.html:71 +msgid "No configuration template has been assigned." +msgstr "Nie przypisano szablonu konfiguracji." + #: netbox/templates/extras/report/base.html:30 msgid "Report" msgstr "Zgłoś" @@ -13596,7 +14227,7 @@ msgstr "Dowolny" msgid "Tagged Item Types" msgstr "Oznaczone typy przedmiotów" -#: netbox/templates/extras/tag.html:81 +#: netbox/templates/extras/tag.html:82 msgid "Tagged Objects" msgstr "Oznaczone obiekty" @@ -13879,6 +14510,21 @@ msgstr "Wszystkie powiadomienia" msgid "Select" msgstr "Wybierz" +#: netbox/templates/htmx/quick_add.html:7 +msgid "Quick Add" +msgstr "Szybkie dodawanie" + +#: netbox/templates/htmx/quick_add_created.html:18 +#, python-format +msgid "" +"\n" +" Created %(object_type)s %(object)s\n" +" " +msgstr "" +"\n" +" Utworzony %(object_type)s %(object)s\n" +" " + #: netbox/templates/inc/filter_list.html:43 #: netbox/utilities/templates/helpers/table_config_form.html:39 msgid "Reset" @@ -13950,15 +14596,11 @@ msgstr "Wyraźne zamawianie" msgid "Help center" msgstr "Centrum pomocy" -#: netbox/templates/inc/user_menu.html:41 -msgid "Django Admin" -msgstr "" - -#: netbox/templates/inc/user_menu.html:61 +#: netbox/templates/inc/user_menu.html:56 msgid "Log Out" msgstr "Wyloguj się" -#: netbox/templates/inc/user_menu.html:68 netbox/templates/login.html:38 +#: netbox/templates/inc/user_menu.html:63 netbox/templates/login.html:38 msgid "Log In" msgstr "Zaloguj się" @@ -14055,43 +14697,43 @@ msgstr "Adres początkowy" msgid "Ending Address" msgstr "Adres końcowy" -#: netbox/templates/ipam/iprange.html:33 netbox/templates/ipam/prefix.html:110 +#: netbox/templates/ipam/iprange.html:33 netbox/templates/ipam/prefix.html:106 msgid "Marked fully utilized" msgstr "Oznaczone w pełni wykorzystane" -#: netbox/templates/ipam/prefix.html:99 +#: netbox/templates/ipam/prefix.html:95 msgid "Addressing Details" msgstr "Szczegóły adresowania" -#: netbox/templates/ipam/prefix.html:118 +#: netbox/templates/ipam/prefix.html:114 msgid "Child IPs" msgstr "Adresy IP dla dzieci" -#: netbox/templates/ipam/prefix.html:126 +#: netbox/templates/ipam/prefix.html:122 msgid "Available IPs" msgstr "Dostępne adresy IP" -#: netbox/templates/ipam/prefix.html:138 +#: netbox/templates/ipam/prefix.html:134 msgid "First available IP" msgstr "Pierwszy dostępny adres IP" -#: netbox/templates/ipam/prefix.html:179 +#: netbox/templates/ipam/prefix.html:175 msgid "Prefix Details" msgstr "Szczegóły prefiksu" -#: netbox/templates/ipam/prefix.html:185 +#: netbox/templates/ipam/prefix.html:181 msgid "Network Address" msgstr "Adres sieciowy" -#: netbox/templates/ipam/prefix.html:189 +#: netbox/templates/ipam/prefix.html:185 msgid "Network Mask" msgstr "Maska sieciowa" -#: netbox/templates/ipam/prefix.html:193 +#: netbox/templates/ipam/prefix.html:189 msgid "Wildcard Mask" msgstr "Maska wieloznaczna" -#: netbox/templates/ipam/prefix.html:197 +#: netbox/templates/ipam/prefix.html:193 msgid "Broadcast Address" msgstr "Adres transmisji" @@ -14131,14 +14773,30 @@ msgstr "Importowanie L2VPN" msgid "Exporting L2VPNs" msgstr "Eksportowanie L2VPN" -#: netbox/templates/ipam/vlan.html:88 +#: netbox/templates/ipam/vlan.html:66 +msgid "Q-in-Q Role" +msgstr "Rola Q w Q" + +#: netbox/templates/ipam/vlan.html:104 msgid "Add a Prefix" msgstr "Dodaj prefiks" +#: netbox/templates/ipam/vlan.html:114 +msgid "Customer VLANs" +msgstr "VLAN klientów" + +#: netbox/templates/ipam/vlan.html:118 +msgid "Add a VLAN" +msgstr "Dodawanie sieci VLAN" + #: netbox/templates/ipam/vlangroup.html:18 msgid "Add VLAN" msgstr "Dodaj VLAN" +#: netbox/templates/ipam/vlantranslationpolicy.html:51 +msgid "Add Rule" +msgstr "Dodaj regułę" + #: netbox/templates/ipam/vrf.html:16 msgid "Route Distinguisher" msgstr "Rozróżniacz trasy" @@ -14217,7 +14875,7 @@ msgstr "" #: netbox/templates/tenancy/contact.html:18 netbox/tenancy/filtersets.py:147 #: netbox/tenancy/forms/bulk_edit.py:137 -#: netbox/tenancy/forms/filtersets.py:102 netbox/tenancy/forms/forms.py:56 +#: netbox/tenancy/forms/filtersets.py:102 netbox/tenancy/forms/forms.py:57 #: netbox/tenancy/forms/model_forms.py:106 #: netbox/tenancy/forms/model_forms.py:130 #: netbox/tenancy/tables/contacts.py:98 @@ -14235,7 +14893,7 @@ msgid "Phone" msgstr "Telefon" #: netbox/templates/tenancy/contactgroup.html:18 -#: netbox/tenancy/forms/forms.py:66 netbox/tenancy/forms/model_forms.py:75 +#: netbox/tenancy/forms/forms.py:67 netbox/tenancy/forms/model_forms.py:75 msgid "Contact Group" msgstr "Grupa kontaktowa" @@ -14244,7 +14902,7 @@ msgid "Add Contact Group" msgstr "Dodaj grupę kontaktów" #: netbox/templates/tenancy/contactrole.html:15 -#: netbox/tenancy/filtersets.py:152 netbox/tenancy/forms/forms.py:61 +#: netbox/tenancy/filtersets.py:152 netbox/tenancy/forms/forms.py:62 #: netbox/tenancy/forms/model_forms.py:87 msgid "Contact Role" msgstr "Rola kontaktowa" @@ -14258,8 +14916,8 @@ msgid "Add Tenant" msgstr "Dodaj najemcę" #: netbox/templates/tenancy/tenantgroup.html:26 -#: netbox/tenancy/forms/model_forms.py:32 netbox/tenancy/tables/columns.py:51 -#: netbox/tenancy/tables/columns.py:61 +#: netbox/tenancy/forms/model_forms.py:32 netbox/tenancy/tables/columns.py:36 +#: netbox/tenancy/tables/columns.py:46 msgid "Tenant Group" msgstr "Grupa Najemców" @@ -14290,21 +14948,21 @@ msgstr "Ograniczenia" msgid "Assigned Users" msgstr "Przydzieleni użytkownicy" -#: netbox/templates/virtualization/cluster.html:52 +#: netbox/templates/virtualization/cluster.html:56 msgid "Allocated Resources" msgstr "Przydzielone zasoby" -#: netbox/templates/virtualization/cluster.html:55 +#: netbox/templates/virtualization/cluster.html:59 #: netbox/templates/virtualization/virtualmachine.html:125 msgid "Virtual CPUs" msgstr "Wirtualne procesory" -#: netbox/templates/virtualization/cluster.html:59 +#: netbox/templates/virtualization/cluster.html:63 #: netbox/templates/virtualization/virtualmachine.html:129 msgid "Memory" msgstr "Pamięć" -#: netbox/templates/virtualization/cluster.html:69 +#: netbox/templates/virtualization/cluster.html:73 #: netbox/templates/virtualization/virtualmachine.html:140 msgid "Disk Space" msgstr "Miejsce na dysku" @@ -14340,13 +14998,13 @@ msgid "Add Cluster" msgstr "Dodaj klaster" #: netbox/templates/virtualization/clustergroup.html:19 -#: netbox/virtualization/forms/model_forms.py:50 +#: netbox/virtualization/forms/model_forms.py:53 msgid "Cluster Group" msgstr "Grupa klastrów" #: netbox/templates/virtualization/clustertype.html:19 #: netbox/templates/virtualization/virtualmachine.html:110 -#: netbox/virtualization/forms/model_forms.py:36 +#: netbox/virtualization/forms/model_forms.py:39 msgid "Cluster Type" msgstr "Typ klastra" @@ -14355,8 +15013,8 @@ msgid "Virtual Disk" msgstr "Wirtualny dysk" #: netbox/templates/virtualization/virtualmachine.html:122 -#: netbox/virtualization/forms/bulk_edit.py:190 -#: netbox/virtualization/forms/model_forms.py:224 +#: netbox/virtualization/forms/bulk_edit.py:172 +#: netbox/virtualization/forms/model_forms.py:231 msgid "Resources" msgstr "Zasoby" @@ -14364,10 +15022,6 @@ msgstr "Zasoby" msgid "Add Virtual Disk" msgstr "Dodaj dysk wirtualny" -#: netbox/templates/virtualization/virtualmachine/render_config.html:70 -msgid "No configuration template has been assigned for this virtual machine." -msgstr "" - #: netbox/templates/vpn/ikepolicy.html:10 #: netbox/templates/vpn/ipsecprofile.html:33 netbox/vpn/tables/crypto.py:166 msgid "IKE Policy" @@ -14390,7 +15044,7 @@ msgstr "Pokaż sekret" #: netbox/templates/vpn/ipsecpolicy.html:45 #: netbox/templates/vpn/ipsecprofile.html:52 #: netbox/templates/vpn/ipsecprofile.html:77 -#: netbox/vpn/forms/model_forms.py:316 netbox/vpn/forms/model_forms.py:352 +#: netbox/vpn/forms/model_forms.py:317 netbox/vpn/forms/model_forms.py:354 #: netbox/vpn/tables/crypto.py:68 netbox/vpn/tables/crypto.py:134 msgid "Proposals" msgstr "Propozycje" @@ -14436,12 +15090,12 @@ msgid "IPSec Policy" msgstr "Polityka IPsec" #: netbox/templates/vpn/ipsecpolicy.html:21 netbox/vpn/forms/bulk_edit.py:210 -#: netbox/vpn/models/crypto.py:193 +#: netbox/vpn/models/crypto.py:191 msgid "PFS group" msgstr "Grupa PFS" #: netbox/templates/vpn/ipsecprofile.html:10 -#: netbox/vpn/forms/model_forms.py:54 +#: netbox/vpn/forms/model_forms.py:55 msgid "IPSec Profile" msgstr "Profil IPsec" @@ -14467,10 +15121,6 @@ msgstr "L2VPN Atrybuty" msgid "Add a Termination" msgstr "Dodaj zakończenie" -#: netbox/templates/vpn/tunnel.html:9 -msgid "Add Termination" -msgstr "Dodaj zakończenie" - #: netbox/templates/vpn/tunnel.html:37 netbox/vpn/forms/bulk_edit.py:49 #: netbox/vpn/forms/bulk_import.py:48 netbox/vpn/forms/filtersets.py:57 msgid "Encapsulation" @@ -14478,7 +15128,7 @@ msgstr "Enkapsulacja" #: netbox/templates/vpn/tunnel.html:41 netbox/vpn/forms/bulk_edit.py:55 #: netbox/vpn/forms/bulk_import.py:53 netbox/vpn/forms/filtersets.py:64 -#: netbox/vpn/models/crypto.py:250 netbox/vpn/tables/tunnels.py:51 +#: netbox/vpn/models/crypto.py:246 netbox/vpn/tables/tunnels.py:51 msgid "IPSec profile" msgstr "Profil IPsec" @@ -14501,8 +15151,8 @@ msgid "Tunnel Termination" msgstr "Zakończenie tunelu" #: netbox/templates/vpn/tunneltermination.html:35 -#: netbox/vpn/forms/bulk_import.py:107 netbox/vpn/forms/model_forms.py:102 -#: netbox/vpn/forms/model_forms.py:138 netbox/vpn/forms/model_forms.py:247 +#: netbox/vpn/forms/bulk_import.py:107 netbox/vpn/forms/model_forms.py:103 +#: netbox/vpn/forms/model_forms.py:139 netbox/vpn/forms/model_forms.py:248 #: netbox/vpn/tables/tunnels.py:101 msgid "Outside IP" msgstr "Zewnętrzny adres IP" @@ -14525,7 +15175,7 @@ msgctxt "Abbreviation for megahertz" msgid "MHz" msgstr "MHz" -#: netbox/templates/wireless/wirelesslan.html:57 +#: netbox/templates/wireless/wirelesslan.html:65 msgid "Attached Interfaces" msgstr "Dołączone interfejsy" @@ -14534,7 +15184,7 @@ msgid "Add Wireless LAN" msgstr "Dodaj bezprzewodową sieć LAN" #: netbox/templates/wireless/wirelesslangroup.html:26 -#: netbox/wireless/forms/model_forms.py:28 +#: netbox/wireless/forms/model_forms.py:29 msgid "Wireless LAN Group" msgstr "Grupa sieci bezprzewodowej sieci LAN" @@ -14546,13 +15196,6 @@ msgstr "Dodaj grupę sieci bezprzewodowej sieci LAN" msgid "Link Properties" msgstr "Właściwości łącza" -#: netbox/templates/wireless/wirelesslink.html:38 -#: netbox/wireless/forms/bulk_edit.py:129 -#: netbox/wireless/forms/filtersets.py:102 -#: netbox/wireless/forms/model_forms.py:165 -msgid "Distance" -msgstr "Dystans" - #: netbox/tenancy/filtersets.py:28 msgid "Parent contact group (ID)" msgstr "Nadrzędna grupa kontaktów (ID)" @@ -14623,47 +15266,47 @@ msgstr "grupa kontaktowa" msgid "contact groups" msgstr "grupy kontaktowe" -#: netbox/tenancy/models/contacts.py:48 +#: netbox/tenancy/models/contacts.py:42 msgid "contact role" msgstr "rola kontaktowa" -#: netbox/tenancy/models/contacts.py:49 +#: netbox/tenancy/models/contacts.py:43 msgid "contact roles" msgstr "role kontaktowe" -#: netbox/tenancy/models/contacts.py:68 +#: netbox/tenancy/models/contacts.py:63 msgid "title" msgstr "tytuł" -#: netbox/tenancy/models/contacts.py:73 +#: netbox/tenancy/models/contacts.py:68 msgid "phone" msgstr "telefon" -#: netbox/tenancy/models/contacts.py:78 +#: netbox/tenancy/models/contacts.py:73 msgid "email" msgstr "e-mail" -#: netbox/tenancy/models/contacts.py:87 +#: netbox/tenancy/models/contacts.py:82 msgid "link" msgstr "link" -#: netbox/tenancy/models/contacts.py:103 +#: netbox/tenancy/models/contacts.py:98 msgid "contact" msgstr "kontakt" -#: netbox/tenancy/models/contacts.py:104 +#: netbox/tenancy/models/contacts.py:99 msgid "contacts" msgstr "łączność" -#: netbox/tenancy/models/contacts.py:153 +#: netbox/tenancy/models/contacts.py:146 msgid "contact assignment" msgstr "przypisanie kontaktu" -#: netbox/tenancy/models/contacts.py:154 +#: netbox/tenancy/models/contacts.py:147 msgid "contact assignments" msgstr "zadania kontaktowe" -#: netbox/tenancy/models/contacts.py:170 +#: netbox/tenancy/models/contacts.py:163 #, python-brace-format msgid "Contacts cannot be assigned to this object type ({type})." msgstr "Kontakty nie mogą być przypisane do tego typu obiektu ({type})." @@ -14676,19 +15319,19 @@ msgstr "grupa najemców" msgid "tenant groups" msgstr "grupy najemców" -#: netbox/tenancy/models/tenants.py:70 +#: netbox/tenancy/models/tenants.py:68 msgid "Tenant name must be unique per group." msgstr "Nazwa najemcy musi być niepowtarzalna dla każdej grupy." -#: netbox/tenancy/models/tenants.py:80 +#: netbox/tenancy/models/tenants.py:78 msgid "Tenant slug must be unique per group." msgstr "Identyfikator najemcy musi być unikalny dla każdej grupy." -#: netbox/tenancy/models/tenants.py:88 +#: netbox/tenancy/models/tenants.py:86 msgid "tenant" msgstr "najemcy" -#: netbox/tenancy/models/tenants.py:89 +#: netbox/tenancy/models/tenants.py:87 msgid "tenants" msgstr "najemcy" @@ -14915,7 +15558,7 @@ msgstr "żeton" msgid "tokens" msgstr "tokeny" -#: netbox/users/models/users.py:57 netbox/vpn/models/crypto.py:42 +#: netbox/users/models/users.py:57 netbox/vpn/models/crypto.py:43 msgid "group" msgstr "grupa" @@ -14965,27 +15608,27 @@ msgstr "" msgid "{name} has a key defined but CHOICES is not a list" msgstr "{name} ma zdefiniowany klucz, ale CHOICES nie jest listą" -#: netbox/utilities/conversion.py:19 +#: netbox/utilities/conversion.py:20 msgid "Weight must be a positive number" msgstr "Waga musi być liczbą dodatnią" -#: netbox/utilities/conversion.py:21 +#: netbox/utilities/conversion.py:22 #, python-brace-format msgid "Invalid value '{weight}' for weight (must be a number)" msgstr "Nieprawidłowa wartość '{weight}„dla wagi (musi być liczbą)" -#: netbox/utilities/conversion.py:32 netbox/utilities/conversion.py:62 +#: netbox/utilities/conversion.py:33 netbox/utilities/conversion.py:63 #, python-brace-format msgid "Unknown unit {unit}. Must be one of the following: {valid_units}" msgstr "" "Nieznana jednostka {unit}. Musi być jednym z następujących elementów: " "{valid_units}" -#: netbox/utilities/conversion.py:45 +#: netbox/utilities/conversion.py:46 msgid "Length must be a positive number" msgstr "Długość musi być liczbą dodatnią" -#: netbox/utilities/conversion.py:47 +#: netbox/utilities/conversion.py:48 #, python-brace-format msgid "Invalid value '{length}' for length (must be a number)" msgstr "Nieprawidłowa wartość '{length}„dla długości (musi być liczbą)" @@ -15003,11 +15646,11 @@ msgstr "" msgid "More than 50" msgstr "Ponad 50" -#: netbox/utilities/fields.py:30 +#: netbox/utilities/fields.py:29 msgid "RGB color in hexadecimal. Example: " msgstr "Kolor RGB w wersji szesnastkowej. Przykład: " -#: netbox/utilities/fields.py:159 +#: netbox/utilities/fields.py:158 #, python-format msgid "" "%s(%r) is invalid. to_model parameter to CounterCacheField must be a string " @@ -15016,7 +15659,7 @@ msgstr "" "%s(%r) jest nieprawidłowy. parametr to_model do CounterCacheField musi być " "ciągiem w formacie „app.model”" -#: netbox/utilities/fields.py:169 +#: netbox/utilities/fields.py:168 #, python-format msgid "" "%s(%r) is invalid. to_field parameter to CounterCacheField must be a string " @@ -15245,14 +15888,14 @@ msgstr "" msgid "Required column header \"{header}\" not found." msgstr "Wymagany nagłówek kolumny”{header}„Nie znaleziono." -#: netbox/utilities/forms/widgets/apiselect.py:124 +#: netbox/utilities/forms/widgets/apiselect.py:133 #, python-brace-format msgid "Missing required value for dynamic query param: '{dynamic_params}'" msgstr "" "Brak wymaganej wartości dla parametru zapytania dynamicznego: " "'{dynamic_params}”" -#: netbox/utilities/forms/widgets/apiselect.py:141 +#: netbox/utilities/forms/widgets/apiselect.py:150 #, python-brace-format msgid "Missing required value for static query param: '{static_params}'" msgstr "" @@ -15379,10 +16022,14 @@ msgstr "Szukaj..." msgid "Search NetBox" msgstr "Szukaj NetBox" -#: netbox/utilities/templates/widgets/apiselect.html:7 +#: netbox/utilities/templates/widgets/apiselect.html:8 msgid "Open selector" msgstr "Otwórz selektor" +#: netbox/utilities/templates/widgets/apiselect.html:22 +msgid "Quick add" +msgstr "Szybkie dodawanie" + #: netbox/utilities/templates/widgets/markdown_input.html:6 msgid "Write" msgstr "Napisz" @@ -15416,113 +16063,119 @@ msgstr "" "ObjectPermissionRequiredMixIn może być używany tylko w widokach, które " "definiują podstawowy zestaw zapytań" -#: netbox/virtualization/filtersets.py:79 +#: netbox/virtualization/choices.py:50 +msgid "Paused" +msgstr "Zatrzymany" + +#: netbox/virtualization/filtersets.py:45 msgid "Parent group (ID)" msgstr "Grupa nadrzędna (ID)" -#: netbox/virtualization/filtersets.py:85 +#: netbox/virtualization/filtersets.py:51 msgid "Parent group (slug)" msgstr "Grupa nadrzędna (identyfikator)" -#: netbox/virtualization/filtersets.py:89 -#: netbox/virtualization/filtersets.py:141 +#: netbox/virtualization/filtersets.py:55 +#: netbox/virtualization/filtersets.py:107 msgid "Cluster type (ID)" msgstr "Typ klastra (ID)" -#: netbox/virtualization/filtersets.py:151 -#: netbox/virtualization/filtersets.py:271 +#: netbox/virtualization/filtersets.py:117 +#: netbox/virtualization/filtersets.py:237 msgid "Cluster (ID)" msgstr "Klaster (ID)" -#: netbox/virtualization/forms/bulk_edit.py:166 -#: netbox/virtualization/models/virtualmachines.py:115 +#: netbox/virtualization/forms/bulk_edit.py:148 +#: netbox/virtualization/models/virtualmachines.py:110 msgid "vCPUs" msgstr "VCPU" -#: netbox/virtualization/forms/bulk_edit.py:170 +#: netbox/virtualization/forms/bulk_edit.py:152 msgid "Memory (MB)" msgstr "Pamięć (MB)" -#: netbox/virtualization/forms/bulk_edit.py:174 +#: netbox/virtualization/forms/bulk_edit.py:156 msgid "Disk (MB)" msgstr "Dysk (MB)" -#: netbox/virtualization/forms/bulk_edit.py:334 -#: netbox/virtualization/forms/filtersets.py:251 +#: netbox/virtualization/forms/bulk_edit.py:324 +#: netbox/virtualization/forms/filtersets.py:256 msgid "Size (MB)" msgstr "Rozmiar (MB)" -#: netbox/virtualization/forms/bulk_import.py:44 +#: netbox/virtualization/forms/bulk_import.py:45 msgid "Type of cluster" msgstr "Rodzaj klastra" -#: netbox/virtualization/forms/bulk_import.py:51 +#: netbox/virtualization/forms/bulk_import.py:52 msgid "Assigned cluster group" msgstr "Przypisana grupa klastrów" -#: netbox/virtualization/forms/bulk_import.py:96 +#: netbox/virtualization/forms/bulk_import.py:102 msgid "Assigned cluster" msgstr "Przypisany klaster" -#: netbox/virtualization/forms/bulk_import.py:103 +#: netbox/virtualization/forms/bulk_import.py:109 msgid "Assigned device within cluster" msgstr "Przypisane urządzenie w klastrze" -#: netbox/virtualization/forms/filtersets.py:183 +#: netbox/virtualization/forms/filtersets.py:188 msgid "Serial number" msgstr "Numer seryjny" -#: netbox/virtualization/forms/model_forms.py:153 +#: netbox/virtualization/forms/model_forms.py:158 #, python-brace-format msgid "" -"{device} belongs to a different site ({device_site}) than the cluster " -"({cluster_site})" +"{device} belongs to a different {scope_field} ({device_scope}) than the " +"cluster ({cluster_scope})" msgstr "" +"{device} należy do innego {scope_field} ({device_scope}) niż klaster " +"({cluster_scope})" -#: netbox/virtualization/forms/model_forms.py:192 +#: netbox/virtualization/forms/model_forms.py:199 msgid "Optionally pin this VM to a specific host device within the cluster" msgstr "" "Opcjonalnie przypiąć tę maszynę wirtualną do określonego urządzenia hosta w " "klastrze" -#: netbox/virtualization/forms/model_forms.py:221 +#: netbox/virtualization/forms/model_forms.py:228 msgid "Site/Cluster" msgstr "Witryna/Klaster" -#: netbox/virtualization/forms/model_forms.py:244 +#: netbox/virtualization/forms/model_forms.py:251 msgid "Disk size is managed via the attachment of virtual disks." msgstr "Rozmiar dysku jest zarządzany poprzez załączenie dysków wirtualnych." -#: netbox/virtualization/forms/model_forms.py:372 -#: netbox/virtualization/tables/virtualmachines.py:111 +#: netbox/virtualization/forms/model_forms.py:405 +#: netbox/virtualization/tables/virtualmachines.py:81 msgid "Disk" msgstr "Dysk" -#: netbox/virtualization/models/clusters.py:25 +#: netbox/virtualization/models/clusters.py:26 msgid "cluster type" msgstr "typ klastra" -#: netbox/virtualization/models/clusters.py:26 +#: netbox/virtualization/models/clusters.py:27 msgid "cluster types" msgstr "typy klastrów" -#: netbox/virtualization/models/clusters.py:45 +#: netbox/virtualization/models/clusters.py:43 msgid "cluster group" msgstr "grupa klastra" -#: netbox/virtualization/models/clusters.py:46 +#: netbox/virtualization/models/clusters.py:44 msgid "cluster groups" msgstr "grupy klastrów" -#: netbox/virtualization/models/clusters.py:121 +#: netbox/virtualization/models/clusters.py:110 msgid "cluster" msgstr "klastra" -#: netbox/virtualization/models/clusters.py:122 +#: netbox/virtualization/models/clusters.py:111 msgid "clusters" msgstr "gromady" -#: netbox/virtualization/models/clusters.py:141 +#: netbox/virtualization/models/clusters.py:137 #, python-brace-format msgid "" "{count} devices are assigned as hosts for this cluster but are not in site " @@ -15531,42 +16184,51 @@ msgstr "" "{count} urządzenia są przypisane jako hosty dla tego klastra, ale nie są w " "witrynie {site}" -#: netbox/virtualization/models/virtualmachines.py:123 +#: netbox/virtualization/models/clusters.py:144 +#, python-brace-format +msgid "" +"{count} devices are assigned as hosts for this cluster but are not in " +"location {location}" +msgstr "" +"{count} urządzenia są przypisane jako hosty dla tego klastra, ale nie " +"znajdują się w lokalizacji {location}" + +#: netbox/virtualization/models/virtualmachines.py:118 msgid "memory (MB)" msgstr "pamięć (MB)" -#: netbox/virtualization/models/virtualmachines.py:128 +#: netbox/virtualization/models/virtualmachines.py:123 msgid "disk (MB)" msgstr "dysk (MB)" -#: netbox/virtualization/models/virtualmachines.py:166 +#: netbox/virtualization/models/virtualmachines.py:161 msgid "Virtual machine name must be unique per cluster." msgstr "Nazwa maszyny wirtualnej musi być unikatowa dla każdego klastra." -#: netbox/virtualization/models/virtualmachines.py:169 +#: netbox/virtualization/models/virtualmachines.py:164 msgid "virtual machine" msgstr "maszyna wirtualna" -#: netbox/virtualization/models/virtualmachines.py:170 +#: netbox/virtualization/models/virtualmachines.py:165 msgid "virtual machines" msgstr "maszyny wirtualne" -#: netbox/virtualization/models/virtualmachines.py:184 +#: netbox/virtualization/models/virtualmachines.py:176 msgid "A virtual machine must be assigned to a site and/or cluster." msgstr "Maszyna wirtualna musi być przypisana do witryny i/lub klastra." -#: netbox/virtualization/models/virtualmachines.py:191 +#: netbox/virtualization/models/virtualmachines.py:183 #, python-brace-format msgid "" "The selected cluster ({cluster}) is not assigned to this site ({site})." msgstr "" "Wybrany klaster ({cluster}) nie jest przypisany do tej witryny ({site})." -#: netbox/virtualization/models/virtualmachines.py:198 +#: netbox/virtualization/models/virtualmachines.py:190 msgid "Must specify a cluster when assigning a host device." msgstr "Musi określić klaster podczas przypisywania urządzenia hosta." -#: netbox/virtualization/models/virtualmachines.py:203 +#: netbox/virtualization/models/virtualmachines.py:195 #, python-brace-format msgid "" "The selected device ({device}) is not assigned to this cluster ({cluster})." @@ -15574,7 +16236,7 @@ msgstr "" "Wybrane urządzenie ({device}) nie jest przypisany do tego klastra " "({cluster})." -#: netbox/virtualization/models/virtualmachines.py:215 +#: netbox/virtualization/models/virtualmachines.py:207 #, python-brace-format msgid "" "The specified disk size ({size}) must match the aggregate size of assigned " @@ -15583,17 +16245,17 @@ msgstr "" "Określony rozmiar dysku ({size}) musi odpowiadać zagregowanemu rozmiarowi " "przypisanych dysków wirtualnych ({total_size})." -#: netbox/virtualization/models/virtualmachines.py:229 +#: netbox/virtualization/models/virtualmachines.py:221 #, python-brace-format msgid "Must be an IPv{family} address. ({ip} is an IPv{version} address.)" msgstr "Musi być IPV{family} adres. ({ip} jest IPV{version} adres.)" -#: netbox/virtualization/models/virtualmachines.py:238 +#: netbox/virtualization/models/virtualmachines.py:230 #, python-brace-format msgid "The specified IP address ({ip}) is not assigned to this VM." msgstr "Podany adres IP ({ip}) nie jest przypisany do tej maszyny wirtualnej." -#: netbox/virtualization/models/virtualmachines.py:396 +#: netbox/virtualization/models/virtualmachines.py:376 #, python-brace-format msgid "" "The selected parent interface ({parent}) belongs to a different virtual " @@ -15602,7 +16264,7 @@ msgstr "" "Wybrany interfejs nadrzędny ({parent}) należy do innej maszyny wirtualnej " "({virtual_machine})." -#: netbox/virtualization/models/virtualmachines.py:411 +#: netbox/virtualization/models/virtualmachines.py:391 #, python-brace-format msgid "" "The selected bridge interface ({bridge}) belongs to a different virtual " @@ -15611,7 +16273,7 @@ msgstr "" "Wybrany interfejs mostu ({bridge}) należy do innej maszyny wirtualnej " "({virtual_machine})." -#: netbox/virtualization/models/virtualmachines.py:422 +#: netbox/virtualization/models/virtualmachines.py:402 #, python-brace-format msgid "" "The untagged VLAN ({untagged_vlan}) must belong to the same site as the " @@ -15620,24 +16282,24 @@ msgstr "" "Nieoznaczona sieć VLAN ({untagged_vlan}) musi należeć do tej samej witryny " "co macierzysta maszyna wirtualna interfejsu lub musi być globalna." -#: netbox/virtualization/models/virtualmachines.py:434 +#: netbox/virtualization/models/virtualmachines.py:414 msgid "size (MB)" msgstr "rozmiar (MB)" -#: netbox/virtualization/models/virtualmachines.py:438 +#: netbox/virtualization/models/virtualmachines.py:418 msgid "virtual disk" msgstr "dysk wirtualny" -#: netbox/virtualization/models/virtualmachines.py:439 +#: netbox/virtualization/models/virtualmachines.py:419 msgid "virtual disks" msgstr "dyski wirtualne" -#: netbox/virtualization/views.py:273 +#: netbox/virtualization/views.py:289 #, python-brace-format msgid "Added {count} devices to cluster {cluster}" msgstr "Dodano {count} urządzenia do klastrowania {cluster}" -#: netbox/virtualization/views.py:308 +#: netbox/virtualization/views.py:324 #, python-brace-format msgid "Removed {count} devices from cluster {cluster}" msgstr "Usunięto {count} urządzenia z klastra {cluster}" @@ -15674,14 +16336,6 @@ msgstr "L2TP" msgid "PPTP" msgstr "PPTP" -#: netbox/vpn/choices.py:64 -msgid "Hub" -msgstr "Piasta" - -#: netbox/vpn/choices.py:65 -msgid "Spoke" -msgstr "Mówił" - #: netbox/vpn/choices.py:88 msgid "Aggressive" msgstr "Agresywny" @@ -15799,26 +16453,26 @@ msgstr "VLAN (nazwa)" msgid "Tunnel group" msgstr "Grupa tuneli" -#: netbox/vpn/forms/bulk_edit.py:117 netbox/vpn/models/crypto.py:47 +#: netbox/vpn/forms/bulk_edit.py:117 netbox/vpn/models/crypto.py:48 msgid "SA lifetime" msgstr "Żywotność SA" -#: netbox/vpn/forms/bulk_edit.py:151 netbox/wireless/forms/bulk_edit.py:79 -#: netbox/wireless/forms/bulk_edit.py:126 -#: netbox/wireless/forms/filtersets.py:64 -#: netbox/wireless/forms/filtersets.py:98 +#: netbox/vpn/forms/bulk_edit.py:151 netbox/wireless/forms/bulk_edit.py:81 +#: netbox/wireless/forms/bulk_edit.py:129 +#: netbox/wireless/forms/filtersets.py:67 +#: netbox/wireless/forms/filtersets.py:126 msgid "Pre-shared key" msgstr "Klucz wstępnie udostępniony" #: netbox/vpn/forms/bulk_edit.py:237 netbox/vpn/forms/bulk_import.py:239 -#: netbox/vpn/forms/filtersets.py:199 netbox/vpn/forms/model_forms.py:370 +#: netbox/vpn/forms/filtersets.py:199 netbox/vpn/forms/model_forms.py:373 #: netbox/vpn/models/crypto.py:104 msgid "IKE policy" msgstr "Polityka IKE" #: netbox/vpn/forms/bulk_edit.py:242 netbox/vpn/forms/bulk_import.py:244 -#: netbox/vpn/forms/filtersets.py:204 netbox/vpn/forms/model_forms.py:374 -#: netbox/vpn/models/crypto.py:209 +#: netbox/vpn/forms/filtersets.py:204 netbox/vpn/forms/model_forms.py:377 +#: netbox/vpn/models/crypto.py:207 msgid "IPSec policy" msgstr "Polityka IPsec" @@ -15826,10 +16480,6 @@ msgstr "Polityka IPsec" msgid "Tunnel encapsulation" msgstr "Enkapsulacja tunelu" -#: netbox/vpn/forms/bulk_import.py:83 -msgid "Operational role" -msgstr "Rola operacyjna" - #: netbox/vpn/forms/bulk_import.py:90 msgid "Parent device of assigned interface" msgstr "Urządzenie nadrzędne przypisanego interfejsu" @@ -15846,7 +16496,7 @@ msgstr "Interfejs urządzenia lub maszyny wirtualnej" msgid "IKE proposal(s)" msgstr "Propozycje IKE" -#: netbox/vpn/forms/bulk_import.py:215 netbox/vpn/models/crypto.py:197 +#: netbox/vpn/forms/bulk_import.py:215 netbox/vpn/models/crypto.py:195 msgid "Diffie-Hellman group for Perfect Forward Secrecy" msgstr "Grupa Diffie-Hellman dla Perfect Forward Secretary" @@ -15893,7 +16543,7 @@ msgid "IKE version" msgstr "Wersja IKE" #: netbox/vpn/forms/filtersets.py:142 netbox/vpn/forms/filtersets.py:175 -#: netbox/vpn/forms/model_forms.py:298 netbox/vpn/forms/model_forms.py:334 +#: netbox/vpn/forms/model_forms.py:299 netbox/vpn/forms/model_forms.py:336 msgid "Proposal" msgstr "Propozycja" @@ -15901,32 +16551,28 @@ msgstr "Propozycja" msgid "Assigned Object Type" msgstr "Przypisany typ obiektu" -#: netbox/vpn/forms/model_forms.py:95 netbox/vpn/forms/model_forms.py:130 -#: netbox/vpn/forms/model_forms.py:240 netbox/vpn/tables/tunnels.py:91 +#: netbox/vpn/forms/model_forms.py:96 netbox/vpn/forms/model_forms.py:131 +#: netbox/vpn/forms/model_forms.py:241 netbox/vpn/tables/tunnels.py:91 msgid "Tunnel interface" msgstr "Interfejs tunelu" -#: netbox/vpn/forms/model_forms.py:150 +#: netbox/vpn/forms/model_forms.py:151 msgid "First Termination" msgstr "Pierwsze zakończenie" -#: netbox/vpn/forms/model_forms.py:153 +#: netbox/vpn/forms/model_forms.py:154 msgid "Second Termination" msgstr "Drugie zakończenie" -#: netbox/vpn/forms/model_forms.py:197 +#: netbox/vpn/forms/model_forms.py:198 msgid "This parameter is required when defining a termination." msgstr "Ten parametr jest wymagany przy definiowaniu zakończenia." -#: netbox/vpn/forms/model_forms.py:320 netbox/vpn/forms/model_forms.py:356 -msgid "Policy" -msgstr "Polityka" - -#: netbox/vpn/forms/model_forms.py:487 +#: netbox/vpn/forms/model_forms.py:490 msgid "A termination must specify an interface or VLAN." msgstr "Zakończenie musi określać interfejs lub sieć VLAN." -#: netbox/vpn/forms/model_forms.py:489 +#: netbox/vpn/forms/model_forms.py:492 msgid "" "A termination can only have one terminating object (an interface or VLAN)." msgstr "" @@ -15940,31 +16586,31 @@ msgstr "algorytm szyfrowania" msgid "authentication algorithm" msgstr "algoritm uwierzytelniania" -#: netbox/vpn/models/crypto.py:44 +#: netbox/vpn/models/crypto.py:45 msgid "Diffie-Hellman group ID" msgstr "Identyfikator grupy Diffie-Hellman" -#: netbox/vpn/models/crypto.py:50 +#: netbox/vpn/models/crypto.py:51 msgid "Security association lifetime (in seconds)" msgstr "Żywotność skojarzenia zabezpieczeń (w sekundach)" -#: netbox/vpn/models/crypto.py:59 +#: netbox/vpn/models/crypto.py:60 msgid "IKE proposal" msgstr "Propozycja IKE" -#: netbox/vpn/models/crypto.py:60 +#: netbox/vpn/models/crypto.py:61 msgid "IKE proposals" msgstr "Propozycje IKE" -#: netbox/vpn/models/crypto.py:76 +#: netbox/vpn/models/crypto.py:75 msgid "version" msgstr "wersji" -#: netbox/vpn/models/crypto.py:88 netbox/vpn/models/crypto.py:190 +#: netbox/vpn/models/crypto.py:88 netbox/vpn/models/crypto.py:188 msgid "proposals" msgstr "oferty" -#: netbox/vpn/models/crypto.py:91 netbox/wireless/models.py:39 +#: netbox/vpn/models/crypto.py:91 netbox/wireless/models.py:41 msgid "pre-shared key" msgstr "klucz wstępnie udostępniony" @@ -15972,19 +16618,19 @@ msgstr "klucz wstępnie udostępniony" msgid "IKE policies" msgstr "Zasady IKE" -#: netbox/vpn/models/crypto.py:118 +#: netbox/vpn/models/crypto.py:115 msgid "Mode is required for selected IKE version" msgstr "Tryb jest wymagany dla wybranej wersji IKE" -#: netbox/vpn/models/crypto.py:122 +#: netbox/vpn/models/crypto.py:119 msgid "Mode cannot be used for selected IKE version" msgstr "Tryb nie może być używany dla wybranej wersji IKE" -#: netbox/vpn/models/crypto.py:136 +#: netbox/vpn/models/crypto.py:134 msgid "encryption" msgstr "szyfrowanie" -#: netbox/vpn/models/crypto.py:141 +#: netbox/vpn/models/crypto.py:140 msgid "authentication" msgstr "poświadczenie" @@ -16004,32 +16650,32 @@ msgstr "Propozycja IPsec" msgid "IPSec proposals" msgstr "Propozycje IPsec" -#: netbox/vpn/models/crypto.py:178 +#: netbox/vpn/models/crypto.py:175 msgid "Encryption and/or authentication algorithm must be defined" msgstr "Należy zdefiniować algorytm szyfrowania i/lub uwierzytelniania" -#: netbox/vpn/models/crypto.py:210 +#: netbox/vpn/models/crypto.py:208 msgid "IPSec policies" msgstr "Zasady IPsec" -#: netbox/vpn/models/crypto.py:251 +#: netbox/vpn/models/crypto.py:247 msgid "IPSec profiles" msgstr "Profile IPsec" -#: netbox/vpn/models/l2vpn.py:116 +#: netbox/vpn/models/l2vpn.py:113 msgid "L2VPN termination" msgstr "Zakończenie L2VPN" -#: netbox/vpn/models/l2vpn.py:117 +#: netbox/vpn/models/l2vpn.py:114 msgid "L2VPN terminations" msgstr "Zakończenia L2VPN" -#: netbox/vpn/models/l2vpn.py:135 +#: netbox/vpn/models/l2vpn.py:129 #, python-brace-format msgid "L2VPN Termination already assigned ({assigned_object})" msgstr "Zakończenie L2VPN już przypisane ({assigned_object})" -#: netbox/vpn/models/l2vpn.py:147 +#: netbox/vpn/models/l2vpn.py:141 #, python-brace-format msgid "" "{l2vpn_type} L2VPNs cannot have more than two terminations; found " @@ -16046,35 +16692,35 @@ msgstr "grupa tuneli" msgid "tunnel groups" msgstr "grupy tuneli" -#: netbox/vpn/models/tunnels.py:53 +#: netbox/vpn/models/tunnels.py:51 msgid "encapsulation" msgstr "hermetyzacja" -#: netbox/vpn/models/tunnels.py:72 +#: netbox/vpn/models/tunnels.py:70 msgid "tunnel ID" msgstr "Identyfikator tunelu" -#: netbox/vpn/models/tunnels.py:94 +#: netbox/vpn/models/tunnels.py:92 msgid "tunnel" msgstr "tunel" -#: netbox/vpn/models/tunnels.py:95 +#: netbox/vpn/models/tunnels.py:93 msgid "tunnels" msgstr "tunele" -#: netbox/vpn/models/tunnels.py:153 +#: netbox/vpn/models/tunnels.py:148 msgid "An object may be terminated to only one tunnel at a time." msgstr "Obiekt może zostać zakończony tylko jednym tunelem naraz." -#: netbox/vpn/models/tunnels.py:156 +#: netbox/vpn/models/tunnels.py:151 msgid "tunnel termination" msgstr "zakończenie tunelu" -#: netbox/vpn/models/tunnels.py:157 +#: netbox/vpn/models/tunnels.py:152 msgid "tunnel terminations" msgstr "zakończenia tunelu" -#: netbox/vpn/models/tunnels.py:174 +#: netbox/vpn/models/tunnels.py:169 #, python-brace-format msgid "{name} is already attached to a tunnel ({tunnel})." msgstr "{name} jest już przymocowany do tunelu ({tunnel})." @@ -16135,51 +16781,44 @@ msgstr "WPA Personal (PSK)" msgid "WPA Enterprise" msgstr "WPA Przedsiębiorstwo" -#: netbox/wireless/forms/bulk_edit.py:73 -#: netbox/wireless/forms/bulk_edit.py:120 -#: netbox/wireless/forms/bulk_import.py:68 -#: netbox/wireless/forms/bulk_import.py:71 -#: netbox/wireless/forms/bulk_import.py:110 -#: netbox/wireless/forms/bulk_import.py:113 -#: netbox/wireless/forms/filtersets.py:59 -#: netbox/wireless/forms/filtersets.py:93 +#: netbox/wireless/forms/bulk_edit.py:75 +#: netbox/wireless/forms/bulk_edit.py:123 +#: netbox/wireless/forms/bulk_import.py:70 +#: netbox/wireless/forms/bulk_import.py:73 +#: netbox/wireless/forms/bulk_import.py:115 +#: netbox/wireless/forms/bulk_import.py:118 +#: netbox/wireless/forms/filtersets.py:62 +#: netbox/wireless/forms/filtersets.py:121 msgid "Authentication cipher" msgstr "Szyfr uwierzytelniania" -#: netbox/wireless/forms/bulk_edit.py:134 -#: netbox/wireless/forms/bulk_import.py:116 -#: netbox/wireless/forms/bulk_import.py:119 -#: netbox/wireless/forms/filtersets.py:106 -msgid "Distance unit" -msgstr "Jednostka odległości" - -#: netbox/wireless/forms/bulk_import.py:52 +#: netbox/wireless/forms/bulk_import.py:54 msgid "Bridged VLAN" msgstr "Zmostkowana sieć VLAN" -#: netbox/wireless/forms/bulk_import.py:89 -#: netbox/wireless/tables/wirelesslink.py:28 +#: netbox/wireless/forms/bulk_import.py:94 +#: netbox/wireless/tables/wirelesslink.py:27 msgid "Interface A" msgstr "Interfejs A" -#: netbox/wireless/forms/bulk_import.py:93 -#: netbox/wireless/tables/wirelesslink.py:37 +#: netbox/wireless/forms/bulk_import.py:98 +#: netbox/wireless/tables/wirelesslink.py:36 msgid "Interface B" msgstr "Interfejs B" -#: netbox/wireless/forms/model_forms.py:161 +#: netbox/wireless/forms/model_forms.py:164 msgid "Side B" msgstr "Strona B" -#: netbox/wireless/models.py:31 +#: netbox/wireless/models.py:32 msgid "authentication cipher" msgstr "szyfr uwierzytelniania" -#: netbox/wireless/models.py:69 +#: netbox/wireless/models.py:72 msgid "wireless LAN group" msgstr "grupa sieci bezprzewodowej LAN" -#: netbox/wireless/models.py:70 +#: netbox/wireless/models.py:73 msgid "wireless LAN groups" msgstr "grupy sieci bezprzewodowej LAN" @@ -16187,35 +16826,23 @@ msgstr "grupy sieci bezprzewodowej LAN" msgid "wireless LAN" msgstr "bezprzewodowa sieć LAN" -#: netbox/wireless/models.py:144 +#: netbox/wireless/models.py:141 msgid "interface A" msgstr "interfejs A" -#: netbox/wireless/models.py:151 +#: netbox/wireless/models.py:148 msgid "interface B" msgstr "interfejs B" -#: netbox/wireless/models.py:165 -msgid "distance" -msgstr "odstęp" - -#: netbox/wireless/models.py:172 -msgid "distance unit" -msgstr "jednostka odległości" - -#: netbox/wireless/models.py:219 +#: netbox/wireless/models.py:196 msgid "wireless link" msgstr "łącze bezprzewodowe" -#: netbox/wireless/models.py:220 +#: netbox/wireless/models.py:197 msgid "wireless links" msgstr "łącza bezprzewodowe" -#: netbox/wireless/models.py:236 -msgid "Must specify a unit when setting a wireless distance" -msgstr "" - -#: netbox/wireless/models.py:242 netbox/wireless/models.py:248 +#: netbox/wireless/models.py:212 netbox/wireless/models.py:218 #, python-brace-format msgid "{type} is not a wireless interface." msgstr "{type} nie jest interfejsem bezprzewodowym." diff --git a/netbox/translations/ru/LC_MESSAGES/django.mo b/netbox/translations/ru/LC_MESSAGES/django.mo index 8bd637287ead187fd68f81ed2308dde999902547..923eb56acd1779b3c5a9088d0795bcffa498bf14 100644 GIT binary patch delta 76272 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�r)Ee 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[ge, xe]-0/0/[0-9]). Переменная {module} будет " "автоматически заменена значением позиции при создании нового модуля." -#: netbox/dcim/forms/model_forms.py:1094 +#: netbox/dcim/forms/model_forms.py:1107 msgid "Console port template" msgstr "Шаблон консольного порта" -#: netbox/dcim/forms/model_forms.py:1102 +#: netbox/dcim/forms/model_forms.py:1115 msgid "Console server port template" msgstr "Шаблон порта консольного сервера" -#: netbox/dcim/forms/model_forms.py:1110 +#: netbox/dcim/forms/model_forms.py:1123 msgid "Front port template" msgstr "Шаблон переднего порта" -#: netbox/dcim/forms/model_forms.py:1118 +#: netbox/dcim/forms/model_forms.py:1131 msgid "Interface template" msgstr "Шаблон интерфейса" -#: netbox/dcim/forms/model_forms.py:1126 +#: netbox/dcim/forms/model_forms.py:1139 msgid "Power outlet template" msgstr "Шаблон розетки питания" -#: netbox/dcim/forms/model_forms.py:1134 +#: netbox/dcim/forms/model_forms.py:1147 msgid "Power port template" msgstr "Шаблон порта питания" -#: netbox/dcim/forms/model_forms.py:1142 +#: netbox/dcim/forms/model_forms.py:1155 msgid "Rear port template" msgstr "Шаблон заднего порта" -#: netbox/dcim/forms/model_forms.py:1151 netbox/dcim/forms/model_forms.py:1395 -#: netbox/dcim/forms/model_forms.py:1558 netbox/dcim/forms/model_forms.py:1590 -#: netbox/dcim/tables/connections.py:65 netbox/ipam/forms/bulk_import.py:318 -#: netbox/ipam/forms/model_forms.py:280 netbox/ipam/forms/model_forms.py:289 -#: netbox/ipam/tables/fhrp.py:64 netbox/ipam/tables/ip.py:372 -#: netbox/ipam/tables/vlans.py:169 -#: netbox/templates/circuits/inc/circuit_termination_fields.html:51 -#: netbox/templates/dcim/frontport.html:106 -#: netbox/templates/dcim/interface.html:27 -#: netbox/templates/dcim/interface.html:184 -#: netbox/templates/dcim/interface.html:310 -#: netbox/templates/dcim/rearport.html:102 -#: netbox/templates/virtualization/vminterface.html:18 -#: netbox/templates/vpn/tunneltermination.html:31 -#: netbox/templates/wireless/inc/wirelesslink_interface.html:10 -#: netbox/templates/wireless/wirelesslink.html:10 -#: netbox/templates/wireless/wirelesslink.html:55 -#: netbox/virtualization/forms/model_forms.py:348 -#: netbox/vpn/forms/bulk_import.py:297 netbox/vpn/forms/model_forms.py:436 -#: netbox/vpn/forms/model_forms.py:445 -#: netbox/wireless/forms/model_forms.py:113 -#: netbox/wireless/forms/model_forms.py:155 -msgid "Interface" -msgstr "Интерфейс" - -#: netbox/dcim/forms/model_forms.py:1152 netbox/dcim/forms/model_forms.py:1591 +#: netbox/dcim/forms/model_forms.py:1165 netbox/dcim/forms/model_forms.py:1636 #: netbox/dcim/tables/connections.py:27 #: netbox/templates/dcim/consoleport.html:17 #: netbox/templates/dcim/consoleserverport.html:74 @@ -4970,71 +5413,71 @@ msgstr "Интерфейс" msgid "Console Port" msgstr "Консольный порт" -#: netbox/dcim/forms/model_forms.py:1153 netbox/dcim/forms/model_forms.py:1592 +#: netbox/dcim/forms/model_forms.py:1166 netbox/dcim/forms/model_forms.py:1637 #: netbox/templates/dcim/consoleport.html:73 #: netbox/templates/dcim/consoleserverport.html:17 #: netbox/templates/dcim/frontport.html:109 msgid "Console Server Port" msgstr "Порт консольного сервера" -#: netbox/dcim/forms/model_forms.py:1154 netbox/dcim/forms/model_forms.py:1593 -#: netbox/templates/circuits/inc/circuit_termination_fields.html:52 +#: netbox/dcim/forms/model_forms.py:1167 netbox/dcim/forms/model_forms.py:1638 +#: netbox/templates/circuits/inc/circuit_termination_fields.html:53 #: netbox/templates/dcim/consoleport.html:76 #: netbox/templates/dcim/consoleserverport.html:77 #: netbox/templates/dcim/frontport.html:17 #: netbox/templates/dcim/frontport.html:115 -#: netbox/templates/dcim/interface.html:187 +#: netbox/templates/dcim/interface.html:244 #: netbox/templates/dcim/rearport.html:105 msgid "Front Port" msgstr "Передний порт" -#: netbox/dcim/forms/model_forms.py:1155 netbox/dcim/forms/model_forms.py:1594 -#: netbox/dcim/tables/devices.py:710 -#: netbox/templates/circuits/inc/circuit_termination_fields.html:53 +#: netbox/dcim/forms/model_forms.py:1168 netbox/dcim/forms/model_forms.py:1639 +#: netbox/dcim/tables/devices.py:744 +#: netbox/templates/circuits/inc/circuit_termination_fields.html:54 #: netbox/templates/dcim/consoleport.html:79 #: netbox/templates/dcim/consoleserverport.html:80 #: netbox/templates/dcim/frontport.html:50 #: netbox/templates/dcim/frontport.html:118 -#: netbox/templates/dcim/interface.html:190 +#: netbox/templates/dcim/interface.html:247 #: netbox/templates/dcim/rearport.html:17 #: netbox/templates/dcim/rearport.html:108 msgid "Rear Port" msgstr "Задний порт" -#: netbox/dcim/forms/model_forms.py:1156 netbox/dcim/forms/model_forms.py:1595 -#: netbox/dcim/tables/connections.py:46 netbox/dcim/tables/devices.py:512 -#: netbox/templates/dcim/poweroutlet.html:44 +#: netbox/dcim/forms/model_forms.py:1169 netbox/dcim/forms/model_forms.py:1640 +#: netbox/dcim/tables/connections.py:46 netbox/dcim/tables/devices.py:521 +#: netbox/templates/dcim/poweroutlet.html:54 #: netbox/templates/dcim/powerport.html:17 msgid "Power Port" msgstr "Порт питания" -#: netbox/dcim/forms/model_forms.py:1157 netbox/dcim/forms/model_forms.py:1596 +#: netbox/dcim/forms/model_forms.py:1170 netbox/dcim/forms/model_forms.py:1641 #: netbox/templates/dcim/poweroutlet.html:17 #: netbox/templates/dcim/powerport.html:77 msgid "Power Outlet" msgstr "Розетка питания" -#: netbox/dcim/forms/model_forms.py:1159 netbox/dcim/forms/model_forms.py:1598 +#: netbox/dcim/forms/model_forms.py:1172 netbox/dcim/forms/model_forms.py:1643 msgid "Component Assignment" msgstr "Назначение компонентов" -#: netbox/dcim/forms/model_forms.py:1202 netbox/dcim/forms/model_forms.py:1645 +#: netbox/dcim/forms/model_forms.py:1218 netbox/dcim/forms/model_forms.py:1690 msgid "An InventoryItem can only be assigned to a single component." msgstr "Инвентарный номер можно присвоить только одному компоненту." -#: netbox/dcim/forms/model_forms.py:1339 +#: netbox/dcim/forms/model_forms.py:1355 msgid "LAG interface" msgstr "Интерфейс LAG" -#: netbox/dcim/forms/model_forms.py:1362 +#: netbox/dcim/forms/model_forms.py:1378 msgid "Filter VLANs available for assignment by group." msgstr "Фильтровать доступные к назначению VLAN-ы по группе." -#: netbox/dcim/forms/model_forms.py:1491 +#: netbox/dcim/forms/model_forms.py:1533 msgid "Child Device" msgstr "Дочернее устройство" -#: netbox/dcim/forms/model_forms.py:1492 +#: netbox/dcim/forms/model_forms.py:1534 msgid "" "Child devices must first be created and assigned to the site and rack of the" " parent device." @@ -5042,32 +5485,58 @@ msgstr "" "Сначала необходимо создать дочерние устройства и назначить их сайту и стойке" " родительского устройства." -#: netbox/dcim/forms/model_forms.py:1534 +#: netbox/dcim/forms/model_forms.py:1576 msgid "Console port" msgstr "Консольный порт" -#: netbox/dcim/forms/model_forms.py:1542 +#: netbox/dcim/forms/model_forms.py:1584 msgid "Console server port" msgstr "Порт консольного сервера" -#: netbox/dcim/forms/model_forms.py:1550 +#: netbox/dcim/forms/model_forms.py:1592 msgid "Front port" msgstr "Передний порт" -#: netbox/dcim/forms/model_forms.py:1566 +#: netbox/dcim/forms/model_forms.py:1608 msgid "Power outlet" msgstr "Розетка питания" -#: netbox/dcim/forms/model_forms.py:1586 +#: netbox/dcim/forms/model_forms.py:1630 #: netbox/templates/dcim/inventoryitem.html:17 msgid "Inventory Item" msgstr "Комплектующие" -#: netbox/dcim/forms/model_forms.py:1659 +#: netbox/dcim/forms/model_forms.py:1704 #: netbox/templates/dcim/inventoryitemrole.html:15 msgid "Inventory Item Role" msgstr "Роли комплектующих" +#: netbox/dcim/forms/model_forms.py:1773 +msgid "VM Interface" +msgstr "Интерфейс виртуальной машины" + +#: netbox/dcim/forms/model_forms.py:1788 netbox/ipam/forms/filtersets.py:608 +#: netbox/ipam/forms/model_forms.py:334 netbox/ipam/forms/model_forms.py:796 +#: netbox/ipam/forms/model_forms.py:822 netbox/ipam/tables/vlans.py:171 +#: netbox/templates/virtualization/virtualdisk.html:21 +#: netbox/templates/virtualization/virtualmachine.html:12 +#: netbox/templates/virtualization/vminterface.html:21 +#: netbox/templates/vpn/tunneltermination.html:25 +#: netbox/virtualization/forms/filtersets.py:202 +#: netbox/virtualization/forms/filtersets.py:247 +#: netbox/virtualization/forms/model_forms.py:227 +#: netbox/virtualization/tables/virtualmachines.py:105 +#: netbox/virtualization/tables/virtualmachines.py:161 +#: netbox/vpn/choices.py:53 netbox/vpn/forms/filtersets.py:293 +#: netbox/vpn/forms/model_forms.py:161 netbox/vpn/forms/model_forms.py:172 +#: netbox/vpn/forms/model_forms.py:274 netbox/vpn/forms/model_forms.py:457 +msgid "Virtual Machine" +msgstr "Виртуальная машина" + +#: netbox/dcim/forms/model_forms.py:1827 +msgid "A MAC address can only be assigned to a single object." +msgstr "MAC-адрес можно присвоить только одному объекту." + #: netbox/dcim/forms/object_create.py:48 #: netbox/dcim/forms/object_create.py:199 #: netbox/dcim/forms/object_create.py:347 @@ -5088,7 +5557,7 @@ msgstr "" " ожидаются." #: netbox/dcim/forms/object_create.py:110 -#: netbox/dcim/forms/object_create.py:263 netbox/dcim/tables/devices.py:252 +#: netbox/dcim/forms/object_create.py:263 netbox/dcim/tables/devices.py:263 msgid "Rear ports" msgstr "Задние порты" @@ -5119,7 +5588,7 @@ msgstr "" "соответствовать выбранному количеству положений задних портов " "({rearport_count})." -#: netbox/dcim/forms/object_create.py:401 netbox/dcim/tables/devices.py:1033 +#: netbox/dcim/forms/object_create.py:401 netbox/dcim/tables/devices.py:1065 #: netbox/ipam/tables/fhrp.py:31 netbox/templates/dcim/virtualchassis.html:53 #: netbox/templates/dcim/virtualchassis_edit.html:47 #: netbox/templates/ipam/fhrpgroup.html:38 @@ -5138,30 +5607,30 @@ msgstr "" "Положение первого элементного устройства. Увеличивается на единицу за каждый" " дополнительный элемент." -#: netbox/dcim/forms/object_create.py:427 +#: netbox/dcim/forms/object_create.py:428 msgid "A position must be specified for the first VC member." msgstr "Должность должна быть указана для первого члена VC." -#: netbox/dcim/models/cables.py:62 -#: netbox/dcim/models/device_component_templates.py:55 -#: netbox/dcim/models/device_components.py:62 +#: netbox/dcim/models/cables.py:64 +#: netbox/dcim/models/device_component_templates.py:51 +#: netbox/dcim/models/device_components.py:57 #: netbox/extras/models/customfields.py:111 msgid "label" msgstr " лейбл" -#: netbox/dcim/models/cables.py:71 +#: netbox/dcim/models/cables.py:73 msgid "length" msgstr "Длина" -#: netbox/dcim/models/cables.py:78 +#: netbox/dcim/models/cables.py:80 msgid "length unit" msgstr "единица длины" -#: netbox/dcim/models/cables.py:95 +#: netbox/dcim/models/cables.py:98 msgid "cable" msgstr "кабель" -#: netbox/dcim/models/cables.py:96 +#: netbox/dcim/models/cables.py:99 msgid "cables" msgstr "кабели" @@ -5188,19 +5657,19 @@ msgstr "Несовместимые типы терминации: {type_a} а т msgid "A and B terminations cannot connect to the same object." msgstr "Окончания A и B не могут подключаться к одному и тому же объекту." -#: netbox/dcim/models/cables.py:260 netbox/ipam/models/asns.py:37 +#: netbox/dcim/models/cables.py:262 netbox/ipam/models/asns.py:37 msgid "end" msgstr "конец" -#: netbox/dcim/models/cables.py:313 +#: netbox/dcim/models/cables.py:315 msgid "cable termination" msgstr "точка подключения кабеля" -#: netbox/dcim/models/cables.py:314 +#: netbox/dcim/models/cables.py:316 msgid "cable terminations" msgstr "точки подключения кабеля" -#: netbox/dcim/models/cables.py:333 +#: netbox/dcim/models/cables.py:335 #, python-brace-format msgid "" "Duplicate termination found for {app_label}.{model} {termination_id}: cable " @@ -5209,37 +5678,71 @@ msgstr "" "Обнаружен дубликат подключения для {app_label}.{model} {termination_id}: " "кабель {cable_pk}" -#: netbox/dcim/models/cables.py:343 +#: netbox/dcim/models/cables.py:345 #, python-brace-format msgid "Cables cannot be terminated to {type_display} interfaces" msgstr "Кабели не могут быть подключены к {type_display} интерфейсов" -#: netbox/dcim/models/cables.py:350 +#: netbox/dcim/models/cables.py:352 msgid "Circuit terminations attached to a provider network may not be cabled." msgstr "" "Концевые разъемы, подключенные к сети провайдера, могут не подключаться к " "кабелям." -#: netbox/dcim/models/cables.py:448 netbox/extras/models/configs.py:50 +#: netbox/dcim/models/cables.py:450 netbox/extras/models/configs.py:50 msgid "is active" msgstr "активен" -#: netbox/dcim/models/cables.py:452 +#: netbox/dcim/models/cables.py:454 msgid "is complete" msgstr "завершен" -#: netbox/dcim/models/cables.py:456 +#: netbox/dcim/models/cables.py:458 msgid "is split" msgstr "разделен" -#: netbox/dcim/models/cables.py:464 +#: netbox/dcim/models/cables.py:466 msgid "cable path" msgstr "кабельная трасса" -#: netbox/dcim/models/cables.py:465 +#: netbox/dcim/models/cables.py:467 msgid "cable paths" msgstr "кабельные трассы" +#: netbox/dcim/models/cables.py:539 +msgid "All originating terminations must be attached to the same link" +msgstr "" +"Все исходные терминалы должны быть прикреплены к одной и той же ссылке" + +#: netbox/dcim/models/cables.py:551 +msgid "All mid-span terminations must have the same termination type" +msgstr "Все промежуточные терминалы должны иметь один и тот же тип терминации" + +#: netbox/dcim/models/cables.py:556 +msgid "All mid-span terminations must have the same parent object" +msgstr "" +"Все терминалы среднего диапазона должны иметь один и тот же родительский " +"объект" + +#: netbox/dcim/models/cables.py:580 +msgid "All links must be cable or wireless" +msgstr "Все каналы должны быть кабельными или беспроводными" + +#: netbox/dcim/models/cables.py:582 +msgid "All links must match first link type" +msgstr "Все ссылки должны соответствовать первому типу ссылки" + +#: netbox/dcim/models/cables.py:665 +msgid "" +"All positions counts within the path on opposite ends of links must match" +msgstr "" +"Количество всех позиций на пути на противоположных концах ссылок должно " +"совпадать" + +#: netbox/dcim/models/cables.py:674 +msgid "Remote termination position filter is missing" +msgstr "Фильтр положения удаленного оконечного устройства отсутствует" + #: netbox/dcim/models/device_component_templates.py:46 #, python-brace-format msgid "" @@ -5249,16 +5752,16 @@ msgstr "" "{module} принимается в качестве замены положения отсека для модулей при " "подключении к модулю того или иного типа." -#: netbox/dcim/models/device_component_templates.py:58 -#: netbox/dcim/models/device_components.py:65 +#: netbox/dcim/models/device_component_templates.py:54 +#: netbox/dcim/models/device_components.py:60 msgid "Physical label" msgstr "Физический лейбл" -#: netbox/dcim/models/device_component_templates.py:103 +#: netbox/dcim/models/device_component_templates.py:99 msgid "Component templates cannot be moved to a different device type." msgstr "Шаблоны компонентов нельзя перемещать на устройства другого типа." -#: netbox/dcim/models/device_component_templates.py:154 +#: netbox/dcim/models/device_component_templates.py:150 msgid "" "A component template cannot be associated with both a device type and a " "module type." @@ -5266,145 +5769,145 @@ msgstr "" "Шаблон компонента нельзя связать как с типом устройства, так и с типом " "модуля." -#: netbox/dcim/models/device_component_templates.py:158 +#: netbox/dcim/models/device_component_templates.py:154 msgid "" "A component template must be associated with either a device type or a " "module type." msgstr "" "Шаблон компонента должен быть связан с типом устройства или типом модуля." -#: netbox/dcim/models/device_component_templates.py:212 +#: netbox/dcim/models/device_component_templates.py:209 msgid "console port template" msgstr "шаблон консольного порта" -#: netbox/dcim/models/device_component_templates.py:213 +#: netbox/dcim/models/device_component_templates.py:210 msgid "console port templates" msgstr "шаблоны консольных портов" -#: netbox/dcim/models/device_component_templates.py:246 +#: netbox/dcim/models/device_component_templates.py:244 msgid "console server port template" msgstr "шаблон порта консольного сервера" -#: netbox/dcim/models/device_component_templates.py:247 +#: netbox/dcim/models/device_component_templates.py:245 msgid "console server port templates" msgstr "шаблоны портов консольного сервера" -#: netbox/dcim/models/device_component_templates.py:278 -#: netbox/dcim/models/device_components.py:352 +#: netbox/dcim/models/device_component_templates.py:277 +#: netbox/dcim/models/device_components.py:345 msgid "maximum draw" msgstr "максимальное потребление" -#: netbox/dcim/models/device_component_templates.py:285 -#: netbox/dcim/models/device_components.py:359 +#: netbox/dcim/models/device_component_templates.py:284 +#: netbox/dcim/models/device_components.py:352 msgid "allocated draw" msgstr "выделенное потребление" -#: netbox/dcim/models/device_component_templates.py:295 +#: netbox/dcim/models/device_component_templates.py:294 msgid "power port template" msgstr "шаблон порта питания" -#: netbox/dcim/models/device_component_templates.py:296 +#: netbox/dcim/models/device_component_templates.py:295 msgid "power port templates" msgstr "шаблоны портов питания" #: netbox/dcim/models/device_component_templates.py:315 -#: netbox/dcim/models/device_components.py:382 +#: netbox/dcim/models/device_components.py:372 #, python-brace-format msgid "Allocated draw cannot exceed the maximum draw ({maximum_draw}W)." msgstr "" "Выделенная мощность не может превышать максимальную ({maximum_draw}Вт)." -#: netbox/dcim/models/device_component_templates.py:347 -#: netbox/dcim/models/device_components.py:477 +#: netbox/dcim/models/device_component_templates.py:349 +#: netbox/dcim/models/device_components.py:468 msgid "feed leg" msgstr "фаза электропитания" -#: netbox/dcim/models/device_component_templates.py:351 -#: netbox/dcim/models/device_components.py:481 +#: netbox/dcim/models/device_component_templates.py:354 +#: netbox/dcim/models/device_components.py:473 msgid "Phase (for three-phase feeds)" msgstr "Фаза (для трехфазных)" -#: netbox/dcim/models/device_component_templates.py:357 +#: netbox/dcim/models/device_component_templates.py:360 msgid "power outlet template" msgstr "шаблон розетки питания" -#: netbox/dcim/models/device_component_templates.py:358 +#: netbox/dcim/models/device_component_templates.py:361 msgid "power outlet templates" msgstr "шаблоны розеток питания" -#: netbox/dcim/models/device_component_templates.py:367 +#: netbox/dcim/models/device_component_templates.py:370 #, python-brace-format msgid "Parent power port ({power_port}) must belong to the same device type" msgstr "" "Родительский порт питания ({power_port}) должен принадлежать тому же типу " "устройства" -#: netbox/dcim/models/device_component_templates.py:371 +#: netbox/dcim/models/device_component_templates.py:376 #, python-brace-format msgid "Parent power port ({power_port}) must belong to the same module type" msgstr "" "Родительский порт питания ({power_port}) должен принадлежать тому же типу " "модулей" -#: netbox/dcim/models/device_component_templates.py:423 -#: netbox/dcim/models/device_components.py:611 +#: netbox/dcim/models/device_component_templates.py:430 +#: netbox/dcim/models/device_components.py:659 msgid "management only" msgstr "только управление" -#: netbox/dcim/models/device_component_templates.py:431 -#: netbox/dcim/models/device_components.py:550 +#: netbox/dcim/models/device_component_templates.py:438 +#: netbox/dcim/models/device_components.py:539 msgid "bridge interface" msgstr "интерфейс моста" -#: netbox/dcim/models/device_component_templates.py:449 -#: netbox/dcim/models/device_components.py:636 +#: netbox/dcim/models/device_component_templates.py:459 +#: netbox/dcim/models/device_components.py:685 msgid "wireless role" msgstr "роль беспроводной сети" -#: netbox/dcim/models/device_component_templates.py:455 +#: netbox/dcim/models/device_component_templates.py:465 msgid "interface template" msgstr "шаблон интерфейса" -#: netbox/dcim/models/device_component_templates.py:456 +#: netbox/dcim/models/device_component_templates.py:466 msgid "interface templates" msgstr "шаблоны интерфейсов" -#: netbox/dcim/models/device_component_templates.py:463 -#: netbox/dcim/models/device_components.py:804 -#: netbox/virtualization/models/virtualmachines.py:405 +#: netbox/dcim/models/device_component_templates.py:473 +#: netbox/dcim/models/device_components.py:845 +#: netbox/virtualization/models/virtualmachines.py:385 msgid "An interface cannot be bridged to itself." msgstr "Интерфейс не может быть подключен к самому себе." -#: netbox/dcim/models/device_component_templates.py:466 +#: netbox/dcim/models/device_component_templates.py:477 #, python-brace-format msgid "Bridge interface ({bridge}) must belong to the same device type" msgstr "" "Интерфейс моста ({bridge}) должно принадлежать к тому же типу устройства" -#: netbox/dcim/models/device_component_templates.py:470 +#: netbox/dcim/models/device_component_templates.py:483 #, python-brace-format msgid "Bridge interface ({bridge}) must belong to the same module type" msgstr "Интерфейс моста ({bridge}) должен принадлежать к одному типу модулей" -#: netbox/dcim/models/device_component_templates.py:526 -#: netbox/dcim/models/device_components.py:984 +#: netbox/dcim/models/device_component_templates.py:540 +#: netbox/dcim/models/device_components.py:1035 msgid "rear port position" msgstr "положение заднего порта" -#: netbox/dcim/models/device_component_templates.py:551 +#: netbox/dcim/models/device_component_templates.py:565 msgid "front port template" msgstr "шаблон переднего порта" -#: netbox/dcim/models/device_component_templates.py:552 +#: netbox/dcim/models/device_component_templates.py:566 msgid "front port templates" msgstr "шаблоны передних портов" -#: netbox/dcim/models/device_component_templates.py:562 +#: netbox/dcim/models/device_component_templates.py:576 #, python-brace-format msgid "Rear port ({name}) must belong to the same device type" msgstr "Задний порт ({name}) должно принадлежать к тому же типу устройства" -#: netbox/dcim/models/device_component_templates.py:568 +#: netbox/dcim/models/device_component_templates.py:582 #, python-brace-format msgid "" "Invalid rear port position ({position}); rear port {name} has only {count} " @@ -5413,48 +5916,48 @@ msgstr "" "Неверное положение заднего порта ({position}); задний порт {name} имеет " "только {count} позиции" -#: netbox/dcim/models/device_component_templates.py:621 -#: netbox/dcim/models/device_components.py:1053 +#: netbox/dcim/models/device_component_templates.py:635 +#: netbox/dcim/models/device_components.py:1101 msgid "positions" msgstr "позиция" -#: netbox/dcim/models/device_component_templates.py:632 +#: netbox/dcim/models/device_component_templates.py:646 msgid "rear port template" msgstr "шаблон заднего порта" -#: netbox/dcim/models/device_component_templates.py:633 +#: netbox/dcim/models/device_component_templates.py:647 msgid "rear port templates" msgstr "шаблоны задних портов" -#: netbox/dcim/models/device_component_templates.py:662 -#: netbox/dcim/models/device_components.py:1103 +#: netbox/dcim/models/device_component_templates.py:676 +#: netbox/dcim/models/device_components.py:1148 msgid "position" msgstr "позиция" -#: netbox/dcim/models/device_component_templates.py:665 -#: netbox/dcim/models/device_components.py:1106 +#: netbox/dcim/models/device_component_templates.py:679 +#: netbox/dcim/models/device_components.py:1151 msgid "Identifier to reference when renaming installed components" msgstr "" "Идентификатор, на который следует ссылаться при переименовании установленных" " компонентов" -#: netbox/dcim/models/device_component_templates.py:671 +#: netbox/dcim/models/device_component_templates.py:685 msgid "module bay template" msgstr "шаблон модульного отсека" -#: netbox/dcim/models/device_component_templates.py:672 +#: netbox/dcim/models/device_component_templates.py:686 msgid "module bay templates" msgstr "шаблоны модульных отсеков" -#: netbox/dcim/models/device_component_templates.py:699 +#: netbox/dcim/models/device_component_templates.py:713 msgid "device bay template" msgstr "шаблон отсека для устройств" -#: netbox/dcim/models/device_component_templates.py:700 +#: netbox/dcim/models/device_component_templates.py:714 msgid "device bay templates" msgstr "шаблоны отсеков для устройств" -#: netbox/dcim/models/device_component_templates.py:713 +#: netbox/dcim/models/device_component_templates.py:728 #, python-brace-format msgid "" "Subdevice role of device type ({device_type}) must be set to \"parent\" to " @@ -5463,208 +5966,227 @@ msgstr "" "Роль подустройства типа устройства ({device_type}) должно быть установлено " "значение «родительский», чтобы разрешить отсеки для устройств." -#: netbox/dcim/models/device_component_templates.py:768 -#: netbox/dcim/models/device_components.py:1262 +#: netbox/dcim/models/device_component_templates.py:784 +#: netbox/dcim/models/device_components.py:1304 msgid "part ID" msgstr "номер модели" -#: netbox/dcim/models/device_component_templates.py:770 -#: netbox/dcim/models/device_components.py:1264 +#: netbox/dcim/models/device_component_templates.py:786 +#: netbox/dcim/models/device_components.py:1306 msgid "Manufacturer-assigned part identifier" msgstr "Номер модели, присвоенный производителем" -#: netbox/dcim/models/device_component_templates.py:787 +#: netbox/dcim/models/device_component_templates.py:803 msgid "inventory item template" msgstr "шаблон инвентарного товара" -#: netbox/dcim/models/device_component_templates.py:788 +#: netbox/dcim/models/device_component_templates.py:804 msgid "inventory item templates" msgstr "шаблоны товаров инвентаря" -#: netbox/dcim/models/device_components.py:105 +#: netbox/dcim/models/device_components.py:100 msgid "Components cannot be moved to a different device." msgstr "Компоненты нельзя перемещать на другое устройство." -#: netbox/dcim/models/device_components.py:144 +#: netbox/dcim/models/device_components.py:139 msgid "cable end" msgstr "конец кабеля" -#: netbox/dcim/models/device_components.py:150 +#: netbox/dcim/models/device_components.py:146 msgid "mark connected" msgstr "отметка подключена" -#: netbox/dcim/models/device_components.py:152 +#: netbox/dcim/models/device_components.py:148 msgid "Treat as if a cable is connected" msgstr "Обращайтесь так, как будто кабель подключен" -#: netbox/dcim/models/device_components.py:170 +#: netbox/dcim/models/device_components.py:166 msgid "Must specify cable end (A or B) when attaching a cable." msgstr "При подключении кабеля необходимо указать конец кабеля (A или B)." -#: netbox/dcim/models/device_components.py:174 +#: netbox/dcim/models/device_components.py:170 msgid "Cable end must not be set without a cable." msgstr "Нельзя указывать конец кабеля без указания самого кабеля." -#: netbox/dcim/models/device_components.py:178 +#: netbox/dcim/models/device_components.py:174 msgid "Cannot mark as connected with a cable attached." msgstr "Невозможно отметить как подключенный, если присоединен кабель." -#: netbox/dcim/models/device_components.py:202 +#: netbox/dcim/models/device_components.py:198 #, python-brace-format msgid "{class_name} models must declare a parent_object property" msgstr "{class_name} модели должны объявить свойство parent_object" -#: netbox/dcim/models/device_components.py:287 -#: netbox/dcim/models/device_components.py:316 -#: netbox/dcim/models/device_components.py:349 -#: netbox/dcim/models/device_components.py:467 +#: netbox/dcim/models/device_components.py:284 +#: netbox/dcim/models/device_components.py:311 +#: netbox/dcim/models/device_components.py:342 +#: netbox/dcim/models/device_components.py:458 msgid "Physical port type" msgstr "Тип физического порта" -#: netbox/dcim/models/device_components.py:290 -#: netbox/dcim/models/device_components.py:319 +#: netbox/dcim/models/device_components.py:287 +#: netbox/dcim/models/device_components.py:314 msgid "speed" msgstr "скорость" -#: netbox/dcim/models/device_components.py:294 -#: netbox/dcim/models/device_components.py:323 +#: netbox/dcim/models/device_components.py:291 +#: netbox/dcim/models/device_components.py:318 msgid "Port speed in bits per second" msgstr "Скорость порта в битах в секунду" -#: netbox/dcim/models/device_components.py:300 +#: netbox/dcim/models/device_components.py:297 msgid "console port" msgstr "консольный порт" -#: netbox/dcim/models/device_components.py:301 +#: netbox/dcim/models/device_components.py:298 msgid "console ports" msgstr "консольные порты" -#: netbox/dcim/models/device_components.py:329 +#: netbox/dcim/models/device_components.py:324 msgid "console server port" msgstr "порт консольного сервера" -#: netbox/dcim/models/device_components.py:330 +#: netbox/dcim/models/device_components.py:325 msgid "console server ports" msgstr "порты консольного сервера" -#: netbox/dcim/models/device_components.py:369 +#: netbox/dcim/models/device_components.py:362 msgid "power port" msgstr "порт питания" -#: netbox/dcim/models/device_components.py:370 +#: netbox/dcim/models/device_components.py:363 msgid "power ports" msgstr "порты питания" -#: netbox/dcim/models/device_components.py:487 +#: netbox/dcim/models/device_components.py:483 msgid "power outlet" msgstr "розетка питания" -#: netbox/dcim/models/device_components.py:488 +#: netbox/dcim/models/device_components.py:484 msgid "power outlets" msgstr "розетки питания" -#: netbox/dcim/models/device_components.py:499 +#: netbox/dcim/models/device_components.py:492 #, python-brace-format msgid "Parent power port ({power_port}) must belong to the same device" msgstr "" "Родительский порт питания ({power_port}) должен принадлежать тому же " "устройству" -#: netbox/dcim/models/device_components.py:530 netbox/vpn/models/crypto.py:81 -#: netbox/vpn/models/crypto.py:226 +#: netbox/dcim/models/device_components.py:518 netbox/vpn/models/crypto.py:80 +#: netbox/vpn/models/crypto.py:222 msgid "mode" msgstr "режим" -#: netbox/dcim/models/device_components.py:534 +#: netbox/dcim/models/device_components.py:523 msgid "IEEE 802.1Q tagging strategy" msgstr "Стратегия маркировки IEEE 802.1Q" -#: netbox/dcim/models/device_components.py:542 +#: netbox/dcim/models/device_components.py:531 msgid "parent interface" msgstr "родительский интерфейс" -#: netbox/dcim/models/device_components.py:602 -msgid "parent LAG" -msgstr "родительский LAG" - -#: netbox/dcim/models/device_components.py:612 -msgid "This interface is used only for out-of-band management" -msgstr "Этот интерфейс используется только для внеполосного управления" - -#: netbox/dcim/models/device_components.py:617 -msgid "speed (Kbps)" -msgstr "скорость (Кбит/с)" - -#: netbox/dcim/models/device_components.py:620 -msgid "duplex" -msgstr "дуплекс" - -#: netbox/dcim/models/device_components.py:630 -msgid "64-bit World Wide Name" -msgstr "64-битное всемирное имя" - -#: netbox/dcim/models/device_components.py:642 -msgid "wireless channel" -msgstr "беспроводной канал" - -#: netbox/dcim/models/device_components.py:649 -msgid "channel frequency (MHz)" -msgstr "частота канала (МГц)" - -#: netbox/dcim/models/device_components.py:650 -#: netbox/dcim/models/device_components.py:658 -msgid "Populated by selected channel (if set)" -msgstr "Заполнено выбранным каналом (если задано)" - -#: netbox/dcim/models/device_components.py:664 -msgid "transmit power (dBm)" -msgstr "мощность передачи (дБм)" - -#: netbox/dcim/models/device_components.py:689 netbox/wireless/models.py:117 -msgid "wireless LANs" -msgstr "беспроводные LANs" - -#: netbox/dcim/models/device_components.py:697 -#: netbox/virtualization/models/virtualmachines.py:335 +#: netbox/dcim/models/device_components.py:547 msgid "untagged VLAN" msgstr "VLAN без тегов" -#: netbox/dcim/models/device_components.py:703 -#: netbox/virtualization/models/virtualmachines.py:341 +#: netbox/dcim/models/device_components.py:553 msgid "tagged VLANs" msgstr "тегированные VLAN" -#: netbox/dcim/models/device_components.py:745 -#: netbox/virtualization/models/virtualmachines.py:377 +#: netbox/dcim/models/device_components.py:561 +#: netbox/dcim/tables/devices.py:602 netbox/ipam/forms/bulk_edit.py:510 +#: netbox/ipam/forms/bulk_import.py:491 netbox/ipam/forms/filtersets.py:565 +#: netbox/ipam/forms/model_forms.py:692 netbox/ipam/tables/vlans.py:106 +#: netbox/templates/dcim/interface.html:86 netbox/templates/ipam/vlan.html:77 +msgid "Q-in-Q SVLAN" +msgstr "Сеть Q-in-Q" + +#: netbox/dcim/models/device_components.py:576 +msgid "primary MAC address" +msgstr "основной MAC-адрес" + +#: netbox/dcim/models/device_components.py:588 +msgid "Only Q-in-Q interfaces may specify a service VLAN." +msgstr "Только интерфейсы Q-in-Q могут указывать служебную VLAN." + +#: netbox/dcim/models/device_components.py:594 +#, python-brace-format +msgid "MAC address {mac_address} is not assigned to this interface." +msgstr "MAC-адрес {mac_address} не назначен этому интерфейсу." + +#: netbox/dcim/models/device_components.py:650 +msgid "parent LAG" +msgstr "родительский LAG" + +#: netbox/dcim/models/device_components.py:660 +msgid "This interface is used only for out-of-band management" +msgstr "Этот интерфейс используется только для внеполосного управления" + +#: netbox/dcim/models/device_components.py:665 +msgid "speed (Kbps)" +msgstr "скорость (Кбит/с)" + +#: netbox/dcim/models/device_components.py:668 +msgid "duplex" +msgstr "дуплекс" + +#: netbox/dcim/models/device_components.py:678 +msgid "64-bit World Wide Name" +msgstr "64-битное всемирное имя" + +#: netbox/dcim/models/device_components.py:692 +msgid "wireless channel" +msgstr "беспроводной канал" + +#: netbox/dcim/models/device_components.py:699 +msgid "channel frequency (MHz)" +msgstr "частота канала (МГц)" + +#: netbox/dcim/models/device_components.py:700 +#: netbox/dcim/models/device_components.py:708 +msgid "Populated by selected channel (if set)" +msgstr "Заполнено выбранным каналом (если задано)" + +#: netbox/dcim/models/device_components.py:714 +msgid "transmit power (dBm)" +msgstr "мощность передачи (дБм)" + +#: netbox/dcim/models/device_components.py:741 netbox/wireless/models.py:117 +msgid "wireless LANs" +msgstr "беспроводные LANs" + +#: netbox/dcim/models/device_components.py:789 +#: netbox/virtualization/models/virtualmachines.py:359 msgid "interface" msgstr "интерфейс" -#: netbox/dcim/models/device_components.py:746 -#: netbox/virtualization/models/virtualmachines.py:378 +#: netbox/dcim/models/device_components.py:790 +#: netbox/virtualization/models/virtualmachines.py:360 msgid "interfaces" msgstr "интерфейсы" -#: netbox/dcim/models/device_components.py:757 +#: netbox/dcim/models/device_components.py:798 #, python-brace-format msgid "{display_type} interfaces cannot have a cable attached." msgstr "{display_type} к интерфейсам нельзя подключать кабель." -#: netbox/dcim/models/device_components.py:765 +#: netbox/dcim/models/device_components.py:806 #, python-brace-format msgid "{display_type} interfaces cannot be marked as connected." msgstr "{display_type} интерфейсы нельзя пометить как подключенные." -#: netbox/dcim/models/device_components.py:774 -#: netbox/virtualization/models/virtualmachines.py:390 +#: netbox/dcim/models/device_components.py:815 +#: netbox/virtualization/models/virtualmachines.py:370 msgid "An interface cannot be its own parent." msgstr "Интерфейс не может быть собственным родителем." -#: netbox/dcim/models/device_components.py:778 +#: netbox/dcim/models/device_components.py:819 msgid "Only virtual interfaces may be assigned to a parent interface." msgstr "" "Родительскому интерфейсу могут быть назначены только виртуальные интерфейсы." -#: netbox/dcim/models/device_components.py:785 +#: netbox/dcim/models/device_components.py:826 #, python-brace-format msgid "" "The selected parent interface ({interface}) belongs to a different device " @@ -5673,7 +6195,7 @@ msgstr "" "Выбранный родительский интерфейс ({interface}) принадлежит другому " "устройству ({device})" -#: netbox/dcim/models/device_components.py:791 +#: netbox/dcim/models/device_components.py:832 #, python-brace-format msgid "" "The selected parent interface ({interface}) belongs to {device}, which is " @@ -5682,7 +6204,7 @@ msgstr "" "Выбранный родительский интерфейс ({interface}) принадлежит {device}, который" " не является частью виртуального шасси {virtual_chassis}." -#: netbox/dcim/models/device_components.py:811 +#: netbox/dcim/models/device_components.py:852 #, python-brace-format msgid "" "The selected bridge interface ({bridge}) belongs to a different device " @@ -5691,7 +6213,7 @@ msgstr "" "Выбранный интерфейс моста ({bridge}) принадлежит другому устройству " "({device})." -#: netbox/dcim/models/device_components.py:817 +#: netbox/dcim/models/device_components.py:858 #, python-brace-format msgid "" "The selected bridge interface ({interface}) belongs to {device}, which is " @@ -5700,22 +6222,22 @@ msgstr "" "Выбранный интерфейс моста ({interface}) принадлежит {device}, который не " "является частью виртуального шасси {virtual_chassis}." -#: netbox/dcim/models/device_components.py:828 +#: netbox/dcim/models/device_components.py:869 msgid "Virtual interfaces cannot have a parent LAG interface." msgstr "Виртуальные интерфейсы не могут иметь родительский интерфейс LAG." -#: netbox/dcim/models/device_components.py:832 +#: netbox/dcim/models/device_components.py:873 msgid "A LAG interface cannot be its own parent." msgstr "Интерфейс LAG не может быть собственным родителем." -#: netbox/dcim/models/device_components.py:839 +#: netbox/dcim/models/device_components.py:880 #, python-brace-format msgid "" "The selected LAG interface ({lag}) belongs to a different device ({device})." msgstr "" "Выбранный интерфейс LAG ({lag}) принадлежит другому устройству ({device})." -#: netbox/dcim/models/device_components.py:845 +#: netbox/dcim/models/device_components.py:886 #, python-brace-format msgid "" "The selected LAG interface ({lag}) belongs to {device}, which is not part of" @@ -5724,47 +6246,52 @@ msgstr "" "Выбранный интерфейс LAG ({lag}) принадлежит {device}, который не является " "частью виртуального шасси {virtual_chassis}." -#: netbox/dcim/models/device_components.py:856 +#: netbox/dcim/models/device_components.py:897 msgid "Virtual interfaces cannot have a PoE mode." msgstr "Виртуальные интерфейсы не могут иметь режим PoE." -#: netbox/dcim/models/device_components.py:860 +#: netbox/dcim/models/device_components.py:901 msgid "Virtual interfaces cannot have a PoE type." msgstr "Виртуальные интерфейсы не могут иметь тип PoE." -#: netbox/dcim/models/device_components.py:866 +#: netbox/dcim/models/device_components.py:907 msgid "Must specify PoE mode when designating a PoE type." msgstr "При назначении типа PoE необходимо указать режим PoE." -#: netbox/dcim/models/device_components.py:873 +#: netbox/dcim/models/device_components.py:914 msgid "Wireless role may be set only on wireless interfaces." msgstr "" "Роль беспроводной связи может быть установлена только на беспроводных " "интерфейсах." -#: netbox/dcim/models/device_components.py:875 +#: netbox/dcim/models/device_components.py:916 msgid "Channel may be set only on wireless interfaces." msgstr "Канал можно настроить только на беспроводных интерфейсах." -#: netbox/dcim/models/device_components.py:881 +#: netbox/dcim/models/device_components.py:922 msgid "Channel frequency may be set only on wireless interfaces." msgstr "" "Частота канала может быть установлена только на беспроводных интерфейсах." -#: netbox/dcim/models/device_components.py:885 +#: netbox/dcim/models/device_components.py:926 msgid "Cannot specify custom frequency with channel selected." msgstr "Невозможно указать произвольную частоту для выбранного канала." -#: netbox/dcim/models/device_components.py:891 +#: netbox/dcim/models/device_components.py:932 msgid "Channel width may be set only on wireless interfaces." msgstr "" "Ширина канала может быть установлена только на беспроводных интерфейсах." -#: netbox/dcim/models/device_components.py:893 +#: netbox/dcim/models/device_components.py:934 msgid "Cannot specify custom width with channel selected." msgstr "Невозможно указать произвольную ширину полосы для выбранного канала." -#: netbox/dcim/models/device_components.py:901 +#: netbox/dcim/models/device_components.py:938 +msgid "Interface mode does not support an untagged vlan." +msgstr "" +"Режим интерфейса не поддерживает виртуальную локальную сеть без тегов." + +#: netbox/dcim/models/device_components.py:944 #, python-brace-format msgid "" "The untagged VLAN ({untagged_vlan}) must belong to the same site as the " @@ -5773,25 +6300,25 @@ msgstr "" "VLAN без тегов ({untagged_vlan}) должно принадлежать тому же сайту, что и " "родительское устройство интерфейса, или оно должно быть глобальным." -#: netbox/dcim/models/device_components.py:990 +#: netbox/dcim/models/device_components.py:1041 msgid "Mapped position on corresponding rear port" msgstr "Нанесенное на карту положение на соответствующем заднем порту" -#: netbox/dcim/models/device_components.py:1006 +#: netbox/dcim/models/device_components.py:1057 msgid "front port" msgstr "фронтальный порт" -#: netbox/dcim/models/device_components.py:1007 +#: netbox/dcim/models/device_components.py:1058 msgid "front ports" msgstr "фронтальные порты" -#: netbox/dcim/models/device_components.py:1021 +#: netbox/dcim/models/device_components.py:1069 #, python-brace-format msgid "Rear port ({rear_port}) must belong to the same device" msgstr "" "Задний порт ({rear_port}) должно принадлежать одному и тому же устройству" -#: netbox/dcim/models/device_components.py:1029 +#: netbox/dcim/models/device_components.py:1077 #, python-brace-format msgid "" "Invalid rear port position ({rear_port_position}): Rear port {name} has only" @@ -5800,19 +6327,19 @@ msgstr "" "Неверное положение заднего порта ({rear_port_position}): Задний порт {name} " "имеет только {positions} позиции." -#: netbox/dcim/models/device_components.py:1059 +#: netbox/dcim/models/device_components.py:1107 msgid "Number of front ports which may be mapped" msgstr "Количество передних портов, которые можно сопоставить" -#: netbox/dcim/models/device_components.py:1064 +#: netbox/dcim/models/device_components.py:1112 msgid "rear port" msgstr "задний порт" -#: netbox/dcim/models/device_components.py:1065 +#: netbox/dcim/models/device_components.py:1113 msgid "rear ports" msgstr "задние порты" -#: netbox/dcim/models/device_components.py:1079 +#: netbox/dcim/models/device_components.py:1124 #, python-brace-format msgid "" "The number of positions cannot be less than the number of mapped front ports" @@ -5821,38 +6348,38 @@ msgstr "" "Количество позиций не может быть меньше количества сопоставленных передних " "портов ({frontport_count})" -#: netbox/dcim/models/device_components.py:1120 +#: netbox/dcim/models/device_components.py:1165 msgid "module bay" msgstr "модульный отсек" -#: netbox/dcim/models/device_components.py:1121 +#: netbox/dcim/models/device_components.py:1166 msgid "module bays" msgstr "отсеки для модулей" -#: netbox/dcim/models/device_components.py:1138 -#: netbox/dcim/models/devices.py:1224 +#: netbox/dcim/models/device_components.py:1180 +#: netbox/dcim/models/devices.py:1229 msgid "A module bay cannot belong to a module installed within it." msgstr "Отсек для модулей не может принадлежать установленному в нем модулю." -#: netbox/dcim/models/device_components.py:1164 +#: netbox/dcim/models/device_components.py:1206 msgid "device bay" msgstr "отсек для устройств" -#: netbox/dcim/models/device_components.py:1165 +#: netbox/dcim/models/device_components.py:1207 msgid "device bays" msgstr "отсеки для устройств" -#: netbox/dcim/models/device_components.py:1175 +#: netbox/dcim/models/device_components.py:1214 #, python-brace-format msgid "This type of device ({device_type}) does not support device bays." msgstr "" "Этот тип устройства ({device_type}) не поддерживает отсеки для устройств." -#: netbox/dcim/models/device_components.py:1181 +#: netbox/dcim/models/device_components.py:1220 msgid "Cannot install a device into itself." msgstr "Невозможно установить устройство в само по себе." -#: netbox/dcim/models/device_components.py:1189 +#: netbox/dcim/models/device_components.py:1228 #, python-brace-format msgid "" "Cannot install the specified device; device is already installed in {bay}." @@ -5860,116 +6387,116 @@ msgstr "" "Невозможно установить указанное устройство; устройство уже установлено в " "{bay}." -#: netbox/dcim/models/device_components.py:1210 +#: netbox/dcim/models/device_components.py:1249 msgid "inventory item role" msgstr "роль элемента инвентаря" -#: netbox/dcim/models/device_components.py:1211 +#: netbox/dcim/models/device_components.py:1250 msgid "inventory item roles" msgstr "роли элементов инвентаря" -#: netbox/dcim/models/device_components.py:1268 -#: netbox/dcim/models/devices.py:607 netbox/dcim/models/devices.py:1181 -#: netbox/dcim/models/racks.py:313 -#: netbox/virtualization/models/virtualmachines.py:131 +#: netbox/dcim/models/device_components.py:1310 +#: netbox/dcim/models/devices.py:598 netbox/dcim/models/devices.py:1189 +#: netbox/dcim/models/racks.py:304 +#: netbox/virtualization/models/virtualmachines.py:126 msgid "serial number" msgstr "серийный номер" -#: netbox/dcim/models/device_components.py:1276 -#: netbox/dcim/models/devices.py:615 netbox/dcim/models/devices.py:1188 -#: netbox/dcim/models/racks.py:320 +#: netbox/dcim/models/device_components.py:1318 +#: netbox/dcim/models/devices.py:606 netbox/dcim/models/devices.py:1196 +#: netbox/dcim/models/racks.py:311 msgid "asset tag" msgstr "инвентарный номер" -#: netbox/dcim/models/device_components.py:1277 +#: netbox/dcim/models/device_components.py:1319 msgid "A unique tag used to identify this item" msgstr "Инвентарный номер, используемый для идентификации этого элемента" -#: netbox/dcim/models/device_components.py:1280 +#: netbox/dcim/models/device_components.py:1322 msgid "discovered" msgstr "обнаружено" -#: netbox/dcim/models/device_components.py:1282 +#: netbox/dcim/models/device_components.py:1324 msgid "This item was automatically discovered" msgstr "Этот элемент был обнаружен автоматически" -#: netbox/dcim/models/device_components.py:1300 +#: netbox/dcim/models/device_components.py:1342 msgid "inventory item" msgstr "элемент инвентаря" -#: netbox/dcim/models/device_components.py:1301 +#: netbox/dcim/models/device_components.py:1343 msgid "inventory items" msgstr "элементы инвентаря" -#: netbox/dcim/models/device_components.py:1312 +#: netbox/dcim/models/device_components.py:1351 msgid "Cannot assign self as parent." msgstr "Невозможно назначить себя родителем." -#: netbox/dcim/models/device_components.py:1320 +#: netbox/dcim/models/device_components.py:1359 msgid "Parent inventory item does not belong to the same device." msgstr "" "Предмет родительского инвентаря не принадлежит одному и тому же устройству." -#: netbox/dcim/models/device_components.py:1326 +#: netbox/dcim/models/device_components.py:1365 msgid "Cannot move an inventory item with dependent children" msgstr "Невозможно переместить инвентарь вместе с дочерней зависимостью" -#: netbox/dcim/models/device_components.py:1334 +#: netbox/dcim/models/device_components.py:1373 msgid "Cannot assign inventory item to component on another device" msgstr "" "Невозможно присвоить инвентарный предмет компоненту на другом устройстве" -#: netbox/dcim/models/devices.py:54 +#: netbox/dcim/models/devices.py:59 msgid "manufacturer" msgstr "производитель" -#: netbox/dcim/models/devices.py:55 +#: netbox/dcim/models/devices.py:60 msgid "manufacturers" msgstr "производители" -#: netbox/dcim/models/devices.py:82 netbox/dcim/models/devices.py:382 +#: netbox/dcim/models/devices.py:84 netbox/dcim/models/devices.py:383 #: netbox/dcim/models/racks.py:133 msgid "model" msgstr "модель" -#: netbox/dcim/models/devices.py:95 +#: netbox/dcim/models/devices.py:97 msgid "default platform" msgstr "платформа по умолчанию" -#: netbox/dcim/models/devices.py:98 netbox/dcim/models/devices.py:386 +#: netbox/dcim/models/devices.py:100 netbox/dcim/models/devices.py:387 msgid "part number" msgstr "номер модели" -#: netbox/dcim/models/devices.py:101 netbox/dcim/models/devices.py:389 +#: netbox/dcim/models/devices.py:103 netbox/dcim/models/devices.py:390 msgid "Discrete part number (optional)" msgstr "Дискретный номер детали (опционально)" -#: netbox/dcim/models/devices.py:107 netbox/dcim/models/racks.py:54 +#: netbox/dcim/models/devices.py:109 netbox/dcim/models/racks.py:53 msgid "height (U)" msgstr "высота (U)" -#: netbox/dcim/models/devices.py:111 +#: netbox/dcim/models/devices.py:113 msgid "exclude from utilization" msgstr "исключить из использования" -#: netbox/dcim/models/devices.py:112 +#: netbox/dcim/models/devices.py:114 msgid "Devices of this type are excluded when calculating rack utilization." msgstr "Устройства этого типа исключаются при расчёте загруженности стоек." -#: netbox/dcim/models/devices.py:116 +#: netbox/dcim/models/devices.py:118 msgid "is full depth" msgstr "полная глубина" -#: netbox/dcim/models/devices.py:117 +#: netbox/dcim/models/devices.py:119 msgid "Device consumes both front and rear rack faces." msgstr "" "Устройство занимает/блокирует юниты с обоих сторон стойки (спереди и сзади)." -#: netbox/dcim/models/devices.py:123 +#: netbox/dcim/models/devices.py:126 msgid "parent/child status" msgstr "статус родителя/потомка" -#: netbox/dcim/models/devices.py:124 +#: netbox/dcim/models/devices.py:127 msgid "" "Parent devices house child devices in device bays. Leave blank if this " "device type is neither a parent nor a child." @@ -5978,24 +6505,24 @@ msgstr "" "устройств. Оставьте поле пустым, если этот тип устройства не относится ни к " "родительскому, ни к дочернему." -#: netbox/dcim/models/devices.py:128 netbox/dcim/models/devices.py:392 -#: netbox/dcim/models/devices.py:659 netbox/dcim/models/racks.py:324 +#: netbox/dcim/models/devices.py:131 netbox/dcim/models/devices.py:393 +#: netbox/dcim/models/devices.py:651 netbox/dcim/models/racks.py:315 msgid "airflow" msgstr "воздушный поток" -#: netbox/dcim/models/devices.py:204 +#: netbox/dcim/models/devices.py:208 msgid "device type" msgstr "тип устройства" -#: netbox/dcim/models/devices.py:205 +#: netbox/dcim/models/devices.py:209 msgid "device types" msgstr "типы устройств" -#: netbox/dcim/models/devices.py:290 +#: netbox/dcim/models/devices.py:291 msgid "U height must be in increments of 0.5 rack units." msgstr "Высоту в юнитах нужно указывать с шагом 0.5 юнита." -#: netbox/dcim/models/devices.py:307 +#: netbox/dcim/models/devices.py:308 #, python-brace-format msgid "" "Device {device} in rack {rack} does not have sufficient space to accommodate" @@ -6004,7 +6531,7 @@ msgstr "" "Устройству {device} в стойке {rack} для размещения на высоте {height}U не " "хватет свободных юнитов." -#: netbox/dcim/models/devices.py:322 +#: netbox/dcim/models/devices.py:323 #, python-brace-format msgid "" "Unable to set 0U height: Found {racked_instance_count} " @@ -6014,7 +6541,7 @@ msgstr "" "href=\"{url}\">{racked_instance_count} экземпляр(ов) уже смонтированых в" " стойках." -#: netbox/dcim/models/devices.py:331 +#: netbox/dcim/models/devices.py:332 msgid "" "Must delete all device bay templates associated with this device before " "declassifying it as a parent device." @@ -6022,156 +6549,156 @@ msgstr "" "Необходимо удалить все шаблоны отсеков устройств, связанные с этим " "устройством, прежде чем рассекретить его как родительское устройство." -#: netbox/dcim/models/devices.py:337 +#: netbox/dcim/models/devices.py:338 msgid "Child device types must be 0U." msgstr "Типы дочерних устройств должны быть 0U." -#: netbox/dcim/models/devices.py:411 +#: netbox/dcim/models/devices.py:413 msgid "module type" msgstr "тип модуля" -#: netbox/dcim/models/devices.py:412 +#: netbox/dcim/models/devices.py:414 msgid "module types" msgstr "типы модулей" -#: netbox/dcim/models/devices.py:485 +#: netbox/dcim/models/devices.py:484 msgid "Virtual machines may be assigned to this role" msgstr "Эта роль может быть назначена виртуальным машинам." -#: netbox/dcim/models/devices.py:497 +#: netbox/dcim/models/devices.py:496 msgid "device role" msgstr "роль устройства" -#: netbox/dcim/models/devices.py:498 +#: netbox/dcim/models/devices.py:497 msgid "device roles" msgstr "роли устройств" -#: netbox/dcim/models/devices.py:515 +#: netbox/dcim/models/devices.py:511 msgid "Optionally limit this platform to devices of a certain manufacturer" msgstr "" "Опционально ограничьте эту платформу устройствам определенного производителя" -#: netbox/dcim/models/devices.py:527 +#: netbox/dcim/models/devices.py:523 msgid "platform" msgstr "платформа" -#: netbox/dcim/models/devices.py:528 +#: netbox/dcim/models/devices.py:524 msgid "platforms" msgstr "платформы" -#: netbox/dcim/models/devices.py:576 +#: netbox/dcim/models/devices.py:572 msgid "The function this device serves" msgstr "Функция, которую выполняет это устройство" -#: netbox/dcim/models/devices.py:608 +#: netbox/dcim/models/devices.py:599 msgid "Chassis serial number, assigned by the manufacturer" msgstr "Серийный номер шасси, присвоенный производителем" -#: netbox/dcim/models/devices.py:616 netbox/dcim/models/devices.py:1189 +#: netbox/dcim/models/devices.py:607 netbox/dcim/models/devices.py:1197 msgid "A unique tag used to identify this device" msgstr "Уникальный тег, используемый для идентификации этого устройства" -#: netbox/dcim/models/devices.py:643 +#: netbox/dcim/models/devices.py:634 msgid "position (U)" msgstr "положение (U)" -#: netbox/dcim/models/devices.py:650 +#: netbox/dcim/models/devices.py:642 msgid "rack face" msgstr "лицевая сторона стойки" -#: netbox/dcim/models/devices.py:670 netbox/dcim/models/devices.py:1420 -#: netbox/virtualization/models/virtualmachines.py:100 +#: netbox/dcim/models/devices.py:663 netbox/dcim/models/devices.py:1425 +#: netbox/virtualization/models/virtualmachines.py:95 msgid "primary IPv4" msgstr "основной IPv4" -#: netbox/dcim/models/devices.py:678 netbox/dcim/models/devices.py:1428 -#: netbox/virtualization/models/virtualmachines.py:108 +#: netbox/dcim/models/devices.py:671 netbox/dcim/models/devices.py:1433 +#: netbox/virtualization/models/virtualmachines.py:103 msgid "primary IPv6" msgstr "основной IPv6" -#: netbox/dcim/models/devices.py:686 +#: netbox/dcim/models/devices.py:679 msgid "out-of-band IP" msgstr "внеполосный IP-адрес" -#: netbox/dcim/models/devices.py:703 +#: netbox/dcim/models/devices.py:696 msgid "VC position" msgstr "Позиция VC" -#: netbox/dcim/models/devices.py:706 +#: netbox/dcim/models/devices.py:699 msgid "Virtual chassis position" msgstr "Положение виртуального шасси" -#: netbox/dcim/models/devices.py:709 +#: netbox/dcim/models/devices.py:702 msgid "VC priority" msgstr "Приоритет VC" -#: netbox/dcim/models/devices.py:713 +#: netbox/dcim/models/devices.py:706 msgid "Virtual chassis master election priority" msgstr "Приоритет выбора основного виртуального шасси" -#: netbox/dcim/models/devices.py:716 netbox/dcim/models/sites.py:207 +#: netbox/dcim/models/devices.py:709 netbox/dcim/models/sites.py:208 msgid "latitude" msgstr "широта" -#: netbox/dcim/models/devices.py:721 netbox/dcim/models/devices.py:729 -#: netbox/dcim/models/sites.py:212 netbox/dcim/models/sites.py:220 +#: netbox/dcim/models/devices.py:714 netbox/dcim/models/devices.py:722 +#: netbox/dcim/models/sites.py:213 netbox/dcim/models/sites.py:221 msgid "GPS coordinate in decimal format (xx.yyyyyy)" msgstr "GPS координата в десятичном формате (xx.yyyyyy)" -#: netbox/dcim/models/devices.py:724 netbox/dcim/models/sites.py:215 +#: netbox/dcim/models/devices.py:717 netbox/dcim/models/sites.py:216 msgid "longitude" msgstr "долгота" -#: netbox/dcim/models/devices.py:797 +#: netbox/dcim/models/devices.py:790 msgid "Device name must be unique per site." msgstr "Имя устройства должно быть уникальным для каждого сайта." -#: netbox/dcim/models/devices.py:808 netbox/ipam/models/services.py:75 +#: netbox/dcim/models/devices.py:801 netbox/ipam/models/services.py:71 msgid "device" msgstr "устройство" -#: netbox/dcim/models/devices.py:809 +#: netbox/dcim/models/devices.py:802 msgid "devices" msgstr "устройства" -#: netbox/dcim/models/devices.py:835 +#: netbox/dcim/models/devices.py:821 #, python-brace-format msgid "Rack {rack} does not belong to site {site}." msgstr "Стойка {rack} не принадлежит сайту {site}." -#: netbox/dcim/models/devices.py:840 +#: netbox/dcim/models/devices.py:826 #, python-brace-format msgid "Location {location} does not belong to site {site}." msgstr "Локация {location} не принадлежит сайту {site}." -#: netbox/dcim/models/devices.py:846 +#: netbox/dcim/models/devices.py:832 #, python-brace-format msgid "Rack {rack} does not belong to location {location}." msgstr "Стойка {rack} не принадлежит локации {location}." -#: netbox/dcim/models/devices.py:853 +#: netbox/dcim/models/devices.py:839 msgid "Cannot select a rack face without assigning a rack." msgstr "Невозможно выбрать лицевую сторону стойки, не выбрав саму стойку." -#: netbox/dcim/models/devices.py:857 +#: netbox/dcim/models/devices.py:843 msgid "Cannot select a rack position without assigning a rack." msgstr "Невозможно выбрать позицию в стойке, не выбрав саму стойку." -#: netbox/dcim/models/devices.py:863 +#: netbox/dcim/models/devices.py:849 msgid "Position must be in increments of 0.5 rack units." msgstr "Позиция должна быть указана с шагом 0,5 единицы стойки." -#: netbox/dcim/models/devices.py:867 +#: netbox/dcim/models/devices.py:853 msgid "Must specify rack face when defining rack position." msgstr "При определении лицевой стороны необходимо указать позицию в стойке." -#: netbox/dcim/models/devices.py:875 +#: netbox/dcim/models/devices.py:861 #, python-brace-format msgid "" "A 0U device type ({device_type}) cannot be assigned to a rack position." msgstr "Тип устройства 0U ({device_type}) не может быть отнесено к стойке." -#: netbox/dcim/models/devices.py:886 +#: netbox/dcim/models/devices.py:872 msgid "" "Child device types cannot be assigned to a rack face. This is an attribute " "of the parent device." @@ -6179,7 +6706,7 @@ msgstr "" "Устройствам с указанным в типе свойством \"дочернее\" нельзя выбрать лицевую" " сторону стойки. Этот атрибут указывается для \"родительского\" устройства." -#: netbox/dcim/models/devices.py:893 +#: netbox/dcim/models/devices.py:879 msgid "" "Child device types cannot be assigned to a rack position. This is an " "attribute of the parent device." @@ -6187,7 +6714,7 @@ msgstr "" "Типы дочерних устройств нельзя отнести к позиции в стойке. Это атрибут " "родительского устройства." -#: netbox/dcim/models/devices.py:907 +#: netbox/dcim/models/devices.py:893 #, python-brace-format msgid "" "U{position} is already occupied or does not have sufficient space to " @@ -6196,22 +6723,22 @@ msgstr "" "U{position} уже занят или в нем недостаточно места для размещения этого типа" " устройств: {device_type} ({u_height}U)" -#: netbox/dcim/models/devices.py:922 +#: netbox/dcim/models/devices.py:908 #, python-brace-format msgid "{ip} is not an IPv4 address." msgstr "{ip} не является адресом IPv4." -#: netbox/dcim/models/devices.py:931 netbox/dcim/models/devices.py:946 +#: netbox/dcim/models/devices.py:920 netbox/dcim/models/devices.py:938 #, python-brace-format msgid "The specified IP address ({ip}) is not assigned to this device." msgstr "Указанный IP-адрес ({ip}) не назначено этому устройству." -#: netbox/dcim/models/devices.py:937 +#: netbox/dcim/models/devices.py:926 #, python-brace-format msgid "{ip} is not an IPv6 address." msgstr "{ip} не является адресом IPv6." -#: netbox/dcim/models/devices.py:964 +#: netbox/dcim/models/devices.py:956 #, python-brace-format msgid "" "The assigned platform is limited to {platform_manufacturer} device types, " @@ -6220,12 +6747,17 @@ msgstr "" "Назначенная платформа ограничена {platform_manufacturer} типы устройств, но " "данный тип устройства относится к {devicetype_manufacturer}." -#: netbox/dcim/models/devices.py:975 +#: netbox/dcim/models/devices.py:967 #, python-brace-format msgid "The assigned cluster belongs to a different site ({site})" msgstr "Назначенный кластер принадлежит другому сайту ({site})" -#: netbox/dcim/models/devices.py:983 +#: netbox/dcim/models/devices.py:974 +#, python-brace-format +msgid "The assigned cluster belongs to a different location ({location})" +msgstr "Назначенный кластер находится в другом месте ({location})" + +#: netbox/dcim/models/devices.py:982 msgid "A device assigned to a virtual chassis must have its position defined." msgstr "" "Положение устройства, назначенного виртуальному шасси, должно быть " @@ -6240,15 +6772,15 @@ msgstr "" "Устройство нельзя удалить из виртуального корпуса {virtual_chassis} потому " "что в настоящее время оно назначено его хозяином." -#: netbox/dcim/models/devices.py:1196 +#: netbox/dcim/models/devices.py:1204 msgid "module" msgstr "модуль" -#: netbox/dcim/models/devices.py:1197 +#: netbox/dcim/models/devices.py:1205 msgid "modules" msgstr "модули" -#: netbox/dcim/models/devices.py:1213 +#: netbox/dcim/models/devices.py:1218 #, python-brace-format msgid "" "Module must be installed within a module bay belonging to the assigned " @@ -6257,21 +6789,21 @@ msgstr "" "Модуль должен быть установлен в модульном отсеке, принадлежащем назначенному" " устройству ({device})." -#: netbox/dcim/models/devices.py:1339 +#: netbox/dcim/models/devices.py:1346 msgid "domain" msgstr "Домен" -#: netbox/dcim/models/devices.py:1352 netbox/dcim/models/devices.py:1353 +#: netbox/dcim/models/devices.py:1359 netbox/dcim/models/devices.py:1360 msgid "virtual chassis" msgstr "виртуальное шасси" -#: netbox/dcim/models/devices.py:1368 +#: netbox/dcim/models/devices.py:1372 #, python-brace-format msgid "" "The selected master ({master}) is not assigned to this virtual chassis." msgstr "Выбранный мастер ({master}) не назначено этому виртуальному шасси." -#: netbox/dcim/models/devices.py:1384 +#: netbox/dcim/models/devices.py:1388 #, python-brace-format msgid "" "Unable to delete virtual chassis {self}. There are member interfaces which " @@ -6280,51 +6812,62 @@ msgstr "" "Невозможно удалить виртуальное шасси {self}. Существуют интерфейсы-члены, " "которые образуют межкорпусные интерфейсы LAG." -#: netbox/dcim/models/devices.py:1409 netbox/vpn/models/l2vpn.py:37 +#: netbox/dcim/models/devices.py:1414 netbox/vpn/models/l2vpn.py:37 msgid "identifier" msgstr "идентификатор" -#: netbox/dcim/models/devices.py:1410 +#: netbox/dcim/models/devices.py:1415 msgid "Numeric identifier unique to the parent device" msgstr "Цифровой идентификатор, уникальный для родительского устройства" -#: netbox/dcim/models/devices.py:1438 netbox/extras/models/customfields.py:225 +#: netbox/dcim/models/devices.py:1443 netbox/extras/models/customfields.py:225 #: netbox/extras/models/models.py:107 netbox/extras/models/models.py:694 -#: netbox/netbox/models/__init__.py:115 +#: netbox/netbox/models/__init__.py:120 msgid "comments" msgstr "комментарии" -#: netbox/dcim/models/devices.py:1454 +#: netbox/dcim/models/devices.py:1459 msgid "virtual device context" msgstr "виртуальный контекст" -#: netbox/dcim/models/devices.py:1455 +#: netbox/dcim/models/devices.py:1460 msgid "virtual device contexts" msgstr "виртуальные контексты" -#: netbox/dcim/models/devices.py:1487 +#: netbox/dcim/models/devices.py:1489 #, python-brace-format msgid "{ip} is not an IPv{family} address." msgstr "{ip} не является IPV{family} адрес." -#: netbox/dcim/models/devices.py:1493 +#: netbox/dcim/models/devices.py:1495 msgid "Primary IP address must belong to an interface on the assigned device." msgstr "" "Основной IP-адрес должен принадлежать интерфейсу на назначенном устройстве." -#: netbox/dcim/models/mixins.py:15 netbox/extras/models/configs.py:41 -#: netbox/extras/models/models.py:313 netbox/extras/models/models.py:522 -#: netbox/extras/models/search.py:48 netbox/ipam/models/ip.py:194 -msgid "weight" -msgstr "вес" +#: netbox/dcim/models/devices.py:1527 +msgid "MAC addresses" +msgstr "MAC-адреса" -#: netbox/dcim/models/mixins.py:22 -msgid "weight unit" -msgstr "весовая единица" +#: netbox/dcim/models/devices.py:1559 +msgid "" +"Cannot unassign MAC Address while it is designated as the primary MAC for an" +" object" +msgstr "" +"Невозможно отменить назначение MAC-адреса, если он назначен основным MAC-" +"адресом объекта" -#: netbox/dcim/models/mixins.py:51 -msgid "Must specify a unit when setting a weight" -msgstr "При установке веса необходимо указать единицу измерения" +#: netbox/dcim/models/devices.py:1563 +msgid "" +"Cannot reassign MAC Address while it is designated as the primary MAC for an" +" object" +msgstr "" +"Невозможно переназначить MAC-адрес, если он назначен основным MAC-адресом " +"объекта" + +#: netbox/dcim/models/mixins.py:94 +#, python-brace-format +msgid "Please select a {scope_type}." +msgstr "Пожалуйста, выберите {scope_type}." #: netbox/dcim/models/power.py:55 msgid "power panel" @@ -6334,7 +6877,7 @@ msgstr "распределительный щит" msgid "power panels" msgstr "распределительные щиты" -#: netbox/dcim/models/power.py:70 +#: netbox/dcim/models/power.py:67 #, python-brace-format msgid "" "Location {location} ({location_site}) is in a different site than {site}" @@ -6342,43 +6885,43 @@ msgstr "" "Расположение локации{location} ({location_site}) не соответствует " "требующемуся сайту {site}" -#: netbox/dcim/models/power.py:108 +#: netbox/dcim/models/power.py:106 msgid "supply" msgstr "запас" -#: netbox/dcim/models/power.py:114 +#: netbox/dcim/models/power.py:112 msgid "phase" msgstr "фаза" -#: netbox/dcim/models/power.py:120 +#: netbox/dcim/models/power.py:118 msgid "voltage" msgstr "напряжение" -#: netbox/dcim/models/power.py:125 +#: netbox/dcim/models/power.py:123 msgid "amperage" msgstr "сила тока" -#: netbox/dcim/models/power.py:130 +#: netbox/dcim/models/power.py:128 msgid "max utilization" msgstr "максимальное использование" -#: netbox/dcim/models/power.py:133 +#: netbox/dcim/models/power.py:131 msgid "Maximum permissible draw (percentage)" msgstr "Максимально допустимое потребление (в процентах)" -#: netbox/dcim/models/power.py:136 +#: netbox/dcim/models/power.py:134 msgid "available power" msgstr "доступная мощность" -#: netbox/dcim/models/power.py:164 +#: netbox/dcim/models/power.py:162 msgid "power feed" msgstr "Кабель питания" -#: netbox/dcim/models/power.py:165 +#: netbox/dcim/models/power.py:163 msgid "power feeds" msgstr "кабели питания" -#: netbox/dcim/models/power.py:179 +#: netbox/dcim/models/power.py:174 #, python-brace-format msgid "" "Rack {rack} ({rack_site}) and power panel {powerpanel} ({powerpanel_site}) " @@ -6387,55 +6930,55 @@ msgstr "" "Стойка {rack} ({rack_site}) и распределительный щит {powerpanel} " "({powerpanel_site}) расположены на разных сайтах." -#: netbox/dcim/models/power.py:190 +#: netbox/dcim/models/power.py:185 msgid "Voltage cannot be negative for AC supply" msgstr "Напряжение питания переменного тока не может быть отрицательным" -#: netbox/dcim/models/racks.py:47 +#: netbox/dcim/models/racks.py:46 msgid "width" msgstr "ширина" -#: netbox/dcim/models/racks.py:48 +#: netbox/dcim/models/racks.py:47 msgid "Rail-to-rail width" msgstr "Ширина от рельса до рельса" -#: netbox/dcim/models/racks.py:56 +#: netbox/dcim/models/racks.py:55 msgid "Height in rack units" msgstr "Высота в юнитах стойки" -#: netbox/dcim/models/racks.py:60 +#: netbox/dcim/models/racks.py:59 msgid "starting unit" msgstr "начальный юнит" -#: netbox/dcim/models/racks.py:62 +#: netbox/dcim/models/racks.py:61 msgid "Starting unit for rack" msgstr "Начальный юнит для стойки" -#: netbox/dcim/models/racks.py:66 +#: netbox/dcim/models/racks.py:65 msgid "descending units" msgstr "единицы по убыванию" -#: netbox/dcim/models/racks.py:67 +#: netbox/dcim/models/racks.py:66 msgid "Units are numbered top-to-bottom" msgstr "Единицы нумеруются сверху вниз" -#: netbox/dcim/models/racks.py:72 +#: netbox/dcim/models/racks.py:71 msgid "outer width" msgstr "внешняя ширина" -#: netbox/dcim/models/racks.py:75 +#: netbox/dcim/models/racks.py:74 msgid "Outer dimension of rack (width)" msgstr "Наружный размер стойки (ширина)" -#: netbox/dcim/models/racks.py:78 +#: netbox/dcim/models/racks.py:77 msgid "outer depth" msgstr "внешняя глубина" -#: netbox/dcim/models/racks.py:81 +#: netbox/dcim/models/racks.py:80 msgid "Outer dimension of rack (depth)" msgstr "Внешний размер стойки (глубина)" -#: netbox/dcim/models/racks.py:84 +#: netbox/dcim/models/racks.py:83 msgid "outer unit" msgstr "внешний юнит" @@ -6460,7 +7003,7 @@ msgstr "максимальный вес" msgid "Maximum load capacity for the rack" msgstr "Максимальная грузоподъемность стойки" -#: netbox/dcim/models/racks.py:125 netbox/dcim/models/racks.py:252 +#: netbox/dcim/models/racks.py:125 netbox/dcim/models/racks.py:247 msgid "form factor" msgstr "форм-фактор" @@ -6472,56 +7015,56 @@ msgstr "тип стойки" msgid "rack types" msgstr "типы стоек" -#: netbox/dcim/models/racks.py:180 netbox/dcim/models/racks.py:379 +#: netbox/dcim/models/racks.py:177 netbox/dcim/models/racks.py:368 msgid "Must specify a unit when setting an outer width/depth" msgstr "" "При настройке внешней ширины/глубины необходимо указать единицу измерения" -#: netbox/dcim/models/racks.py:184 netbox/dcim/models/racks.py:383 +#: netbox/dcim/models/racks.py:181 netbox/dcim/models/racks.py:372 msgid "Must specify a unit when setting a maximum weight" msgstr "При установке максимального веса необходимо указать единицу измерения" -#: netbox/dcim/models/racks.py:230 +#: netbox/dcim/models/racks.py:227 msgid "rack role" msgstr "назначение стойки" -#: netbox/dcim/models/racks.py:231 +#: netbox/dcim/models/racks.py:228 msgid "rack roles" msgstr "назначение стоек" -#: netbox/dcim/models/racks.py:274 +#: netbox/dcim/models/racks.py:265 msgid "facility ID" msgstr "идентификатор объекта" -#: netbox/dcim/models/racks.py:275 +#: netbox/dcim/models/racks.py:266 msgid "Locally-assigned identifier" msgstr "Локально назначенный идентификатор" -#: netbox/dcim/models/racks.py:308 netbox/ipam/forms/bulk_import.py:201 -#: netbox/ipam/forms/bulk_import.py:266 netbox/ipam/forms/bulk_import.py:301 -#: netbox/ipam/forms/bulk_import.py:483 -#: netbox/virtualization/forms/bulk_import.py:112 +#: netbox/dcim/models/racks.py:299 netbox/ipam/forms/bulk_import.py:197 +#: netbox/ipam/forms/bulk_import.py:265 netbox/ipam/forms/bulk_import.py:300 +#: netbox/ipam/forms/bulk_import.py:482 +#: netbox/virtualization/forms/bulk_import.py:118 msgid "Functional role" msgstr "Функциональная роль" -#: netbox/dcim/models/racks.py:321 +#: netbox/dcim/models/racks.py:312 msgid "A unique tag used to identify this rack" msgstr "Инвентарный номер, используемый для идентификации этой стойки" -#: netbox/dcim/models/racks.py:359 +#: netbox/dcim/models/racks.py:351 msgid "rack" msgstr "стойка" -#: netbox/dcim/models/racks.py:360 +#: netbox/dcim/models/racks.py:352 msgid "racks" msgstr "стойки" -#: netbox/dcim/models/racks.py:375 +#: netbox/dcim/models/racks.py:364 #, python-brace-format msgid "Assigned location must belong to parent site ({site})." msgstr "Назначенная локация должна принадлежать родительскому сайту ({site})." -#: netbox/dcim/models/racks.py:393 +#: netbox/dcim/models/racks.py:387 #, python-brace-format msgid "" "Rack must be at least {min_height}U tall to house currently installed " @@ -6530,7 +7073,7 @@ msgstr "" "Стойка должна иметь высоту не менее {min_height}чтобы разместить, " "установленные в настоящее время устройства." -#: netbox/dcim/models/racks.py:400 +#: netbox/dcim/models/racks.py:396 #, python-brace-format msgid "" "Rack unit numbering must begin at {position} or less to house currently " @@ -6539,119 +7082,119 @@ msgstr "" "Нумерация стоек должна начинаться с {position} или меньше для размещения " "установленных в настоящее время устройств." -#: netbox/dcim/models/racks.py:408 +#: netbox/dcim/models/racks.py:404 #, python-brace-format msgid "Location must be from the same site, {site}." msgstr "Локация должна располагаться в том-же сайте, {site}." -#: netbox/dcim/models/racks.py:670 +#: netbox/dcim/models/racks.py:666 msgid "units" msgstr "юниты" -#: netbox/dcim/models/racks.py:696 +#: netbox/dcim/models/racks.py:692 msgid "rack reservation" msgstr "Резервирование стойки" -#: netbox/dcim/models/racks.py:697 +#: netbox/dcim/models/racks.py:693 msgid "rack reservations" msgstr "Резервирование стоек" -#: netbox/dcim/models/racks.py:714 +#: netbox/dcim/models/racks.py:707 #, python-brace-format msgid "Invalid unit(s) for {height}U rack: {unit_list}" msgstr "" "Неверные единицы измерения для стоек высотой{height}U по списку: {unit_list}" -#: netbox/dcim/models/racks.py:727 +#: netbox/dcim/models/racks.py:720 #, python-brace-format msgid "The following units have already been reserved: {unit_list}" msgstr "Следующие юниты уже зарезервированы: {unit_list}" -#: netbox/dcim/models/sites.py:49 +#: netbox/dcim/models/sites.py:53 msgid "A top-level region with this name already exists." msgstr "Регион верхнего уровня с таким названием уже существует." -#: netbox/dcim/models/sites.py:59 +#: netbox/dcim/models/sites.py:63 msgid "A top-level region with this slug already exists." msgstr "Регион верхнего уровня с этой подстрокой уже существует." -#: netbox/dcim/models/sites.py:62 +#: netbox/dcim/models/sites.py:66 msgid "region" msgstr "регион" -#: netbox/dcim/models/sites.py:63 +#: netbox/dcim/models/sites.py:67 msgid "regions" msgstr "регионы" -#: netbox/dcim/models/sites.py:102 +#: netbox/dcim/models/sites.py:109 msgid "A top-level site group with this name already exists." msgstr "Группа сайтов верхнего уровня с таким именем уже существует." -#: netbox/dcim/models/sites.py:112 +#: netbox/dcim/models/sites.py:119 msgid "A top-level site group with this slug already exists." msgstr "Группа сайтов верхнего уровня с этой подстрокой уже существует." -#: netbox/dcim/models/sites.py:115 +#: netbox/dcim/models/sites.py:122 msgid "site group" msgstr "группа сайта" -#: netbox/dcim/models/sites.py:116 +#: netbox/dcim/models/sites.py:123 msgid "site groups" msgstr "группы сайтов" -#: netbox/dcim/models/sites.py:141 +#: netbox/dcim/models/sites.py:145 msgid "Full name of the site" msgstr "Полное имя сайта" -#: netbox/dcim/models/sites.py:181 netbox/dcim/models/sites.py:279 +#: netbox/dcim/models/sites.py:181 netbox/dcim/models/sites.py:283 msgid "facility" msgstr "объект" -#: netbox/dcim/models/sites.py:184 netbox/dcim/models/sites.py:282 +#: netbox/dcim/models/sites.py:184 netbox/dcim/models/sites.py:286 msgid "Local facility ID or description" msgstr "Идентификатор или описание местного объекта" -#: netbox/dcim/models/sites.py:195 +#: netbox/dcim/models/sites.py:196 msgid "physical address" msgstr "физический адрес" -#: netbox/dcim/models/sites.py:198 +#: netbox/dcim/models/sites.py:199 msgid "Physical location of the building" msgstr "Физическое местоположение здания" -#: netbox/dcim/models/sites.py:201 +#: netbox/dcim/models/sites.py:202 msgid "shipping address" msgstr "адрес доставки" -#: netbox/dcim/models/sites.py:204 +#: netbox/dcim/models/sites.py:205 msgid "If different from the physical address" msgstr "Если отличается от физического адреса" -#: netbox/dcim/models/sites.py:238 +#: netbox/dcim/models/sites.py:245 msgid "site" msgstr "сайт" -#: netbox/dcim/models/sites.py:239 +#: netbox/dcim/models/sites.py:246 msgid "sites" msgstr "сайты" -#: netbox/dcim/models/sites.py:309 +#: netbox/dcim/models/sites.py:319 msgid "A location with this name already exists within the specified site." msgstr "Локация с таким именем уже существует в указанном сайте." -#: netbox/dcim/models/sites.py:319 +#: netbox/dcim/models/sites.py:329 msgid "A location with this slug already exists within the specified site." msgstr "Локация с этой подстрокой уже существует в указанном сайте." -#: netbox/dcim/models/sites.py:322 +#: netbox/dcim/models/sites.py:332 msgid "location" msgstr "локация" -#: netbox/dcim/models/sites.py:323 +#: netbox/dcim/models/sites.py:333 msgid "locations" msgstr "локации" -#: netbox/dcim/models/sites.py:337 +#: netbox/dcim/models/sites.py:344 #, python-brace-format msgid "Parent location ({parent}) must belong to the same site ({site})." msgstr "" @@ -6665,11 +7208,11 @@ msgstr "Точка подключения A" msgid "Termination B" msgstr "Точка подключения Б" -#: netbox/dcim/tables/cables.py:66 netbox/wireless/tables/wirelesslink.py:23 +#: netbox/dcim/tables/cables.py:66 netbox/wireless/tables/wirelesslink.py:22 msgid "Device A" msgstr "Устройство A" -#: netbox/dcim/tables/cables.py:72 netbox/wireless/tables/wirelesslink.py:32 +#: netbox/dcim/tables/cables.py:72 netbox/wireless/tables/wirelesslink.py:31 msgid "Device B" msgstr "Устройство Б" @@ -6703,97 +7246,91 @@ msgstr "Сайт Б" msgid "Reachable" msgstr "Доступен" -#: netbox/dcim/tables/devices.py:58 netbox/dcim/tables/devices.py:106 -#: netbox/dcim/tables/racks.py:150 netbox/dcim/tables/sites.py:105 -#: netbox/dcim/tables/sites.py:148 netbox/extras/tables/tables.py:545 +#: netbox/dcim/tables/devices.py:69 netbox/dcim/tables/devices.py:117 +#: netbox/dcim/tables/racks.py:149 netbox/dcim/tables/sites.py:104 +#: netbox/dcim/tables/sites.py:147 netbox/extras/tables/tables.py:545 #: netbox/netbox/navigation/menu.py:69 netbox/netbox/navigation/menu.py:73 #: netbox/netbox/navigation/menu.py:75 #: netbox/virtualization/forms/model_forms.py:122 -#: netbox/virtualization/tables/clusters.py:83 -#: netbox/virtualization/views.py:204 +#: netbox/virtualization/tables/clusters.py:87 +#: netbox/virtualization/views.py:216 msgid "Devices" msgstr "Устройства" -#: netbox/dcim/tables/devices.py:63 netbox/dcim/tables/devices.py:111 -#: netbox/virtualization/tables/clusters.py:88 +#: netbox/dcim/tables/devices.py:74 netbox/dcim/tables/devices.py:122 +#: netbox/virtualization/tables/clusters.py:92 msgid "VMs" msgstr "Виртуальные машины" -#: netbox/dcim/tables/devices.py:100 netbox/dcim/tables/devices.py:216 -#: netbox/extras/forms/model_forms.py:630 +#: netbox/dcim/tables/devices.py:111 netbox/dcim/tables/devices.py:227 +#: netbox/extras/forms/model_forms.py:644 #: netbox/templates/dcim/device.html:112 -#: netbox/templates/dcim/device/render_config.html:11 -#: netbox/templates/dcim/device/render_config.html:14 #: netbox/templates/dcim/devicerole.html:44 #: netbox/templates/dcim/platform.html:41 #: netbox/templates/extras/configtemplate.html:10 +#: netbox/templates/extras/object_render_config.html:12 +#: netbox/templates/extras/object_render_config.html:15 #: netbox/templates/virtualization/virtualmachine.html:48 -#: netbox/templates/virtualization/virtualmachine/render_config.html:11 -#: netbox/templates/virtualization/virtualmachine/render_config.html:14 -#: netbox/virtualization/tables/virtualmachines.py:107 +#: netbox/virtualization/tables/virtualmachines.py:77 msgid "Config Template" msgstr "Шаблон конфигурации" -#: netbox/dcim/tables/devices.py:150 netbox/templates/dcim/sitegroup.html:26 -msgid "Site Group" -msgstr "Группа сайтов" - -#: netbox/dcim/tables/devices.py:187 netbox/dcim/tables/devices.py:1068 -#: netbox/ipam/forms/bulk_import.py:527 netbox/ipam/forms/model_forms.py:306 -#: netbox/ipam/forms/model_forms.py:319 netbox/ipam/tables/ip.py:356 -#: netbox/ipam/tables/ip.py:423 netbox/ipam/tables/ip.py:446 +#: netbox/dcim/tables/devices.py:198 netbox/dcim/tables/devices.py:1100 +#: netbox/ipam/forms/bulk_import.py:562 netbox/ipam/forms/model_forms.py:316 +#: netbox/ipam/forms/model_forms.py:329 netbox/ipam/tables/ip.py:308 +#: netbox/ipam/tables/ip.py:375 netbox/ipam/tables/ip.py:398 #: netbox/templates/ipam/ipaddress.html:11 -#: netbox/virtualization/tables/virtualmachines.py:95 +#: netbox/virtualization/tables/virtualmachines.py:65 msgid "IP Address" msgstr "IP-адрес" -#: netbox/dcim/tables/devices.py:191 netbox/dcim/tables/devices.py:1072 -#: netbox/virtualization/tables/virtualmachines.py:86 +#: netbox/dcim/tables/devices.py:202 netbox/dcim/tables/devices.py:1104 +#: netbox/virtualization/tables/virtualmachines.py:56 msgid "IPv4 Address" msgstr "Адрес IPv4" -#: netbox/dcim/tables/devices.py:195 netbox/dcim/tables/devices.py:1076 -#: netbox/virtualization/tables/virtualmachines.py:90 +#: netbox/dcim/tables/devices.py:206 netbox/dcim/tables/devices.py:1108 +#: netbox/virtualization/tables/virtualmachines.py:60 msgid "IPv6 Address" msgstr "Адрес IPv6" -#: netbox/dcim/tables/devices.py:210 +#: netbox/dcim/tables/devices.py:221 msgid "VC Position" msgstr "Позиция в шасси" -#: netbox/dcim/tables/devices.py:213 +#: netbox/dcim/tables/devices.py:224 msgid "VC Priority" msgstr "Приоритет шасси" -#: netbox/dcim/tables/devices.py:220 netbox/templates/dcim/device_edit.html:38 +#: netbox/dcim/tables/devices.py:231 netbox/templates/dcim/device_edit.html:38 #: netbox/templates/dcim/devicebay_populate.html:16 msgid "Parent Device" msgstr "Родительское устройство" -#: netbox/dcim/tables/devices.py:225 +#: netbox/dcim/tables/devices.py:236 msgid "Position (Device Bay)" msgstr "Положение (отсек для устройств)" -#: netbox/dcim/tables/devices.py:234 +#: netbox/dcim/tables/devices.py:245 msgid "Console ports" msgstr "Консольные порты" -#: netbox/dcim/tables/devices.py:237 +#: netbox/dcim/tables/devices.py:248 msgid "Console server ports" msgstr "Порты консольного сервера" -#: netbox/dcim/tables/devices.py:240 +#: netbox/dcim/tables/devices.py:251 msgid "Power ports" msgstr "Порты питания" -#: netbox/dcim/tables/devices.py:243 +#: netbox/dcim/tables/devices.py:254 msgid "Power outlets" msgstr "Розетки питания" -#: netbox/dcim/tables/devices.py:246 netbox/dcim/tables/devices.py:1081 -#: netbox/dcim/tables/devicetypes.py:128 netbox/dcim/views.py:1040 -#: netbox/dcim/views.py:1279 netbox/dcim/views.py:1975 -#: netbox/netbox/navigation/menu.py:94 netbox/netbox/navigation/menu.py:250 +#: netbox/dcim/tables/devices.py:257 netbox/dcim/tables/devices.py:1113 +#: netbox/dcim/tables/devicetypes.py:133 netbox/dcim/views.py:1144 +#: netbox/dcim/views.py:1388 netbox/dcim/views.py:2139 +#: netbox/netbox/navigation/menu.py:94 netbox/netbox/navigation/menu.py:258 #: netbox/templates/dcim/device/base.html:37 #: netbox/templates/dcim/device_list.html:43 #: netbox/templates/dcim/devicetype/base.html:34 @@ -6803,35 +7340,35 @@ msgstr "Розетки питания" #: netbox/templates/dcim/virtualdevicecontext.html:81 #: netbox/templates/virtualization/virtualmachine/base.html:27 #: netbox/templates/virtualization/virtualmachine_list.html:14 -#: netbox/virtualization/tables/virtualmachines.py:101 -#: netbox/virtualization/views.py:364 netbox/wireless/tables/wirelesslan.py:55 +#: netbox/virtualization/tables/virtualmachines.py:71 +#: netbox/virtualization/views.py:381 netbox/wireless/tables/wirelesslan.py:63 msgid "Interfaces" msgstr "Интерфейсы" -#: netbox/dcim/tables/devices.py:249 +#: netbox/dcim/tables/devices.py:260 msgid "Front ports" msgstr "Фронтальные порты" -#: netbox/dcim/tables/devices.py:255 +#: netbox/dcim/tables/devices.py:266 msgid "Device bays" msgstr "Отсеки для устройств" -#: netbox/dcim/tables/devices.py:258 +#: netbox/dcim/tables/devices.py:269 msgid "Module bays" msgstr "Отсеки для модулей" -#: netbox/dcim/tables/devices.py:261 +#: netbox/dcim/tables/devices.py:272 msgid "Inventory items" msgstr "Комплектующие" -#: netbox/dcim/tables/devices.py:305 netbox/dcim/tables/modules.py:57 +#: netbox/dcim/tables/devices.py:315 netbox/dcim/tables/modules.py:57 #: netbox/templates/dcim/modulebay.html:17 msgid "Module Bay" msgstr "Модульный отсек" -#: netbox/dcim/tables/devices.py:318 netbox/dcim/tables/devicetypes.py:47 -#: netbox/dcim/tables/devicetypes.py:143 netbox/dcim/views.py:1115 -#: netbox/dcim/views.py:2073 netbox/netbox/navigation/menu.py:103 +#: netbox/dcim/tables/devices.py:328 netbox/dcim/tables/devicetypes.py:52 +#: netbox/dcim/tables/devicetypes.py:148 netbox/dcim/views.py:1219 +#: netbox/dcim/views.py:2237 netbox/netbox/navigation/menu.py:103 #: netbox/templates/dcim/device/base.html:52 #: netbox/templates/dcim/device_list.html:71 #: netbox/templates/dcim/devicetype/base.html:49 @@ -6840,124 +7377,133 @@ msgstr "Модульный отсек" msgid "Inventory Items" msgstr "Предметы инвентаря" -#: netbox/dcim/tables/devices.py:333 +#: netbox/dcim/tables/devices.py:343 msgid "Cable Color" msgstr "Цвет кабеля" -#: netbox/dcim/tables/devices.py:339 +#: netbox/dcim/tables/devices.py:349 msgid "Link Peers" msgstr "Связать узлы" -#: netbox/dcim/tables/devices.py:342 +#: netbox/dcim/tables/devices.py:352 msgid "Mark Connected" msgstr "Отметить подключение" -#: netbox/dcim/tables/devices.py:461 +#: netbox/dcim/tables/devices.py:471 msgid "Maximum draw (W)" msgstr "Максимальная потребляемая мощность (Вт)" -#: netbox/dcim/tables/devices.py:464 +#: netbox/dcim/tables/devices.py:474 msgid "Allocated draw (W)" msgstr "Выделенная мощность (Вт)" -#: netbox/dcim/tables/devices.py:558 netbox/ipam/forms/model_forms.py:734 -#: netbox/ipam/tables/fhrp.py:28 netbox/ipam/views.py:596 -#: netbox/ipam/views.py:696 netbox/netbox/navigation/menu.py:158 -#: netbox/netbox/navigation/menu.py:160 -#: netbox/templates/dcim/interface.html:339 +#: netbox/dcim/tables/devices.py:572 netbox/ipam/forms/model_forms.py:784 +#: netbox/ipam/tables/fhrp.py:28 netbox/ipam/views.py:633 +#: netbox/ipam/views.py:738 netbox/netbox/navigation/menu.py:164 +#: netbox/netbox/navigation/menu.py:166 +#: netbox/templates/dcim/interface.html:396 #: netbox/templates/ipam/ipaddress_bulk_add.html:15 #: netbox/templates/ipam/service.html:40 -#: netbox/templates/virtualization/vminterface.html:85 +#: netbox/templates/virtualization/vminterface.html:101 #: netbox/vpn/tables/tunnels.py:98 msgid "IP Addresses" msgstr "IP-адреса" -#: netbox/dcim/tables/devices.py:564 netbox/netbox/navigation/menu.py:202 +#: netbox/dcim/tables/devices.py:578 netbox/netbox/navigation/menu.py:210 #: netbox/templates/ipam/inc/panels/fhrp_groups.html:6 msgid "FHRP Groups" msgstr "Группы FHRP" -#: netbox/dcim/tables/devices.py:576 netbox/templates/dcim/interface.html:89 -#: netbox/templates/virtualization/vminterface.html:67 +#: netbox/dcim/tables/devices.py:590 netbox/templates/dcim/interface.html:95 +#: netbox/templates/virtualization/vminterface.html:59 #: netbox/templates/vpn/tunnel.html:18 #: netbox/templates/vpn/tunneltermination.html:13 #: netbox/vpn/forms/bulk_edit.py:76 netbox/vpn/forms/bulk_import.py:76 #: netbox/vpn/forms/filtersets.py:42 netbox/vpn/forms/filtersets.py:82 -#: netbox/vpn/forms/model_forms.py:60 netbox/vpn/forms/model_forms.py:145 +#: netbox/vpn/forms/model_forms.py:61 netbox/vpn/forms/model_forms.py:146 #: netbox/vpn/tables/tunnels.py:78 msgid "Tunnel" msgstr "Туннель" -#: netbox/dcim/tables/devices.py:604 netbox/dcim/tables/devicetypes.py:227 +#: netbox/dcim/tables/devices.py:626 netbox/dcim/tables/devicetypes.py:234 #: netbox/templates/dcim/interface.html:65 msgid "Management Only" msgstr "Только управление" -#: netbox/dcim/tables/devices.py:623 +#: netbox/dcim/tables/devices.py:645 msgid "VDCs" msgstr "Виртуальные контексты устройств(VDCs)" -#: netbox/dcim/tables/devices.py:873 netbox/templates/dcim/modulebay.html:53 +#: netbox/dcim/tables/devices.py:652 netbox/templates/dcim/interface.html:163 +msgid "Virtual Circuit" +msgstr "Виртуальный канал" + +#: netbox/dcim/tables/devices.py:904 netbox/templates/dcim/modulebay.html:53 msgid "Installed Module" msgstr "Установленный модуль" -#: netbox/dcim/tables/devices.py:876 +#: netbox/dcim/tables/devices.py:907 msgid "Module Serial" msgstr "Серийный номер модуля" -#: netbox/dcim/tables/devices.py:880 +#: netbox/dcim/tables/devices.py:911 msgid "Module Asset Tag" msgstr "Тег активов модуля" -#: netbox/dcim/tables/devices.py:889 +#: netbox/dcim/tables/devices.py:920 msgid "Module Status" msgstr "Состояние модуля" -#: netbox/dcim/tables/devices.py:944 netbox/dcim/tables/devicetypes.py:312 -#: netbox/templates/dcim/inventoryitem.html:40 +#: netbox/dcim/tables/devices.py:974 netbox/dcim/tables/devicetypes.py:319 +#: netbox/templates/dcim/inventoryitem.html:44 msgid "Component" msgstr "Компонент" -#: netbox/dcim/tables/devices.py:1000 +#: netbox/dcim/tables/devices.py:1032 msgid "Items" msgstr "Предметы" -#: netbox/dcim/tables/devicetypes.py:37 netbox/netbox/navigation/menu.py:84 +#: netbox/dcim/tables/devicetypes.py:37 netbox/netbox/navigation/menu.py:60 +#: netbox/netbox/navigation/menu.py:62 +msgid "Rack Types" +msgstr "Типы стоек" + +#: netbox/dcim/tables/devicetypes.py:42 netbox/netbox/navigation/menu.py:84 #: netbox/netbox/navigation/menu.py:86 msgid "Device Types" msgstr "Типы устройств" -#: netbox/dcim/tables/devicetypes.py:42 netbox/netbox/navigation/menu.py:87 +#: netbox/dcim/tables/devicetypes.py:47 netbox/netbox/navigation/menu.py:87 msgid "Module Types" msgstr "Типы модулей" -#: netbox/dcim/tables/devicetypes.py:52 netbox/extras/forms/filtersets.py:371 -#: netbox/extras/forms/model_forms.py:537 netbox/extras/tables/tables.py:540 +#: netbox/dcim/tables/devicetypes.py:57 netbox/extras/forms/filtersets.py:378 +#: netbox/extras/forms/model_forms.py:551 netbox/extras/tables/tables.py:540 #: netbox/netbox/navigation/menu.py:78 msgid "Platforms" msgstr "Платформы" -#: netbox/dcim/tables/devicetypes.py:84 +#: netbox/dcim/tables/devicetypes.py:89 #: netbox/templates/dcim/devicetype.html:29 msgid "Default Platform" msgstr "Платформа по умолчанию" -#: netbox/dcim/tables/devicetypes.py:88 +#: netbox/dcim/tables/devicetypes.py:93 #: netbox/templates/dcim/devicetype.html:45 msgid "Full Depth" msgstr "Полная глубина" -#: netbox/dcim/tables/devicetypes.py:98 +#: netbox/dcim/tables/devicetypes.py:103 msgid "U Height" msgstr "Высота U" -#: netbox/dcim/tables/devicetypes.py:113 netbox/dcim/tables/modules.py:26 +#: netbox/dcim/tables/devicetypes.py:118 netbox/dcim/tables/modules.py:26 #: netbox/dcim/tables/racks.py:89 msgid "Instances" msgstr "Инстансы" -#: netbox/dcim/tables/devicetypes.py:116 netbox/dcim/views.py:980 -#: netbox/dcim/views.py:1219 netbox/dcim/views.py:1911 +#: netbox/dcim/tables/devicetypes.py:121 netbox/dcim/views.py:1084 +#: netbox/dcim/views.py:1328 netbox/dcim/views.py:2075 #: netbox/netbox/navigation/menu.py:97 #: netbox/templates/dcim/device/base.html:25 #: netbox/templates/dcim/device_list.html:15 @@ -6967,8 +7513,8 @@ msgstr "Инстансы" msgid "Console Ports" msgstr "Порты консоли" -#: netbox/dcim/tables/devicetypes.py:119 netbox/dcim/views.py:995 -#: netbox/dcim/views.py:1234 netbox/dcim/views.py:1927 +#: netbox/dcim/tables/devicetypes.py:124 netbox/dcim/views.py:1099 +#: netbox/dcim/views.py:1343 netbox/dcim/views.py:2091 #: netbox/netbox/navigation/menu.py:98 #: netbox/templates/dcim/device/base.html:28 #: netbox/templates/dcim/device_list.html:22 @@ -6978,8 +7524,8 @@ msgstr "Порты консоли" msgid "Console Server Ports" msgstr "Порты консольного сервера" -#: netbox/dcim/tables/devicetypes.py:122 netbox/dcim/views.py:1010 -#: netbox/dcim/views.py:1249 netbox/dcim/views.py:1943 +#: netbox/dcim/tables/devicetypes.py:127 netbox/dcim/views.py:1114 +#: netbox/dcim/views.py:1358 netbox/dcim/views.py:2107 #: netbox/netbox/navigation/menu.py:99 #: netbox/templates/dcim/device/base.html:31 #: netbox/templates/dcim/device_list.html:29 @@ -6989,8 +7535,8 @@ msgstr "Порты консольного сервера" msgid "Power Ports" msgstr "Порты питания" -#: netbox/dcim/tables/devicetypes.py:125 netbox/dcim/views.py:1025 -#: netbox/dcim/views.py:1264 netbox/dcim/views.py:1959 +#: netbox/dcim/tables/devicetypes.py:130 netbox/dcim/views.py:1129 +#: netbox/dcim/views.py:1373 netbox/dcim/views.py:2123 #: netbox/netbox/navigation/menu.py:100 #: netbox/templates/dcim/device/base.html:34 #: netbox/templates/dcim/device_list.html:36 @@ -7000,8 +7546,8 @@ msgstr "Порты питания" msgid "Power Outlets" msgstr "Розетки питания" -#: netbox/dcim/tables/devicetypes.py:131 netbox/dcim/views.py:1055 -#: netbox/dcim/views.py:1294 netbox/dcim/views.py:1997 +#: netbox/dcim/tables/devicetypes.py:136 netbox/dcim/views.py:1159 +#: netbox/dcim/views.py:1403 netbox/dcim/views.py:2161 #: netbox/netbox/navigation/menu.py:95 #: netbox/templates/dcim/device/base.html:40 #: netbox/templates/dcim/devicetype/base.html:37 @@ -7010,8 +7556,8 @@ msgstr "Розетки питания" msgid "Front Ports" msgstr "Фронтальные порты" -#: netbox/dcim/tables/devicetypes.py:134 netbox/dcim/views.py:1070 -#: netbox/dcim/views.py:1309 netbox/dcim/views.py:2013 +#: netbox/dcim/tables/devicetypes.py:139 netbox/dcim/views.py:1174 +#: netbox/dcim/views.py:1418 netbox/dcim/views.py:2177 #: netbox/netbox/navigation/menu.py:96 #: netbox/templates/dcim/device/base.html:43 #: netbox/templates/dcim/device_list.html:50 @@ -7021,16 +7567,16 @@ msgstr "Фронтальные порты" msgid "Rear Ports" msgstr "Задние порты" -#: netbox/dcim/tables/devicetypes.py:137 netbox/dcim/views.py:1100 -#: netbox/dcim/views.py:2053 netbox/netbox/navigation/menu.py:102 +#: netbox/dcim/tables/devicetypes.py:142 netbox/dcim/views.py:1204 +#: netbox/dcim/views.py:2217 netbox/netbox/navigation/menu.py:102 #: netbox/templates/dcim/device/base.html:49 #: netbox/templates/dcim/device_list.html:57 #: netbox/templates/dcim/devicetype/base.html:46 msgid "Device Bays" msgstr "Отсеки для устройств" -#: netbox/dcim/tables/devicetypes.py:140 netbox/dcim/views.py:1085 -#: netbox/dcim/views.py:1324 netbox/dcim/views.py:2033 +#: netbox/dcim/tables/devicetypes.py:145 netbox/dcim/views.py:1189 +#: netbox/dcim/views.py:1433 netbox/dcim/views.py:2197 #: netbox/netbox/navigation/menu.py:101 #: netbox/templates/dcim/device/base.html:46 #: netbox/templates/dcim/device_list.html:64 @@ -7040,7 +7586,7 @@ msgstr "Отсеки для устройств" msgid "Module Bays" msgstr "Отсеки для модулей" -#: netbox/dcim/tables/power.py:36 netbox/netbox/navigation/menu.py:297 +#: netbox/dcim/tables/power.py:36 netbox/netbox/navigation/menu.py:318 #: netbox/templates/dcim/powerpanel.html:51 msgid "Power Feeds" msgstr "Кабели питания" @@ -7053,110 +7599,105 @@ msgstr "Максимальное использование" msgid "Available Power (VA)" msgstr "Доступная мощность (ВА)" -#: netbox/dcim/tables/racks.py:30 netbox/dcim/tables/sites.py:143 +#: netbox/dcim/tables/racks.py:30 netbox/dcim/tables/sites.py:142 #: netbox/netbox/navigation/menu.py:43 netbox/netbox/navigation/menu.py:47 #: netbox/netbox/navigation/menu.py:49 msgid "Racks" msgstr "Стойки" -#: netbox/dcim/tables/racks.py:63 netbox/dcim/tables/racks.py:142 +#: netbox/dcim/tables/racks.py:63 netbox/dcim/tables/racks.py:141 #: netbox/templates/dcim/device.html:318 #: netbox/templates/dcim/inc/panels/racktype_dimensions.html:14 msgid "Height" msgstr "Высота" -#: netbox/dcim/tables/racks.py:67 netbox/dcim/tables/racks.py:165 +#: netbox/dcim/tables/racks.py:67 netbox/dcim/tables/racks.py:164 #: netbox/templates/dcim/inc/panels/racktype_dimensions.html:18 msgid "Outer Width" msgstr "Внешняя ширина" -#: netbox/dcim/tables/racks.py:71 netbox/dcim/tables/racks.py:169 +#: netbox/dcim/tables/racks.py:71 netbox/dcim/tables/racks.py:168 #: netbox/templates/dcim/inc/panels/racktype_dimensions.html:28 msgid "Outer Depth" msgstr "Внешняя глубина" -#: netbox/dcim/tables/racks.py:79 netbox/dcim/tables/racks.py:177 +#: netbox/dcim/tables/racks.py:79 netbox/dcim/tables/racks.py:176 msgid "Max Weight" msgstr "Максимальный вес" -#: netbox/dcim/tables/racks.py:154 +#: netbox/dcim/tables/racks.py:153 msgid "Space" msgstr "Пространство" #: netbox/dcim/tables/sites.py:30 netbox/dcim/tables/sites.py:57 -#: netbox/extras/forms/filtersets.py:351 -#: netbox/extras/forms/model_forms.py:517 netbox/ipam/forms/bulk_edit.py:131 -#: netbox/ipam/forms/model_forms.py:153 netbox/ipam/tables/asn.py:66 +#: netbox/extras/forms/filtersets.py:358 +#: netbox/extras/forms/model_forms.py:531 netbox/ipam/forms/bulk_edit.py:134 +#: netbox/ipam/forms/model_forms.py:159 netbox/ipam/tables/asn.py:66 #: netbox/netbox/navigation/menu.py:15 netbox/netbox/navigation/menu.py:17 msgid "Sites" msgstr "Сайты" -#: netbox/dcim/tests/test_api.py:47 +#: netbox/dcim/tests/test_api.py:50 msgid "Test case must set peer_termination_type" msgstr "" "В тестовом примере должно быть установлено значение peer_termination_type" -#: netbox/dcim/views.py:138 +#: netbox/dcim/views.py:137 #, python-brace-format msgid "Disconnected {count} {type}" msgstr "Отключен {count} {type}" -#: netbox/dcim/views.py:738 netbox/netbox/navigation/menu.py:51 +#: netbox/dcim/views.py:825 netbox/netbox/navigation/menu.py:51 msgid "Reservations" msgstr "Резервирование" -#: netbox/dcim/views.py:757 netbox/templates/dcim/location.html:90 +#: netbox/dcim/views.py:844 netbox/templates/dcim/location.html:90 #: netbox/templates/dcim/site.html:140 msgid "Non-Racked Devices" msgstr "Устройства без стоек" -#: netbox/dcim/views.py:2086 netbox/extras/forms/model_forms.py:577 +#: netbox/dcim/views.py:2250 netbox/extras/forms/model_forms.py:591 #: netbox/templates/extras/configcontext.html:10 -#: netbox/virtualization/forms/model_forms.py:225 -#: netbox/virtualization/views.py:405 +#: netbox/virtualization/forms/model_forms.py:232 +#: netbox/virtualization/views.py:422 msgid "Config Context" msgstr "Контекст конфигурации" -#: netbox/dcim/views.py:2096 netbox/virtualization/views.py:415 +#: netbox/dcim/views.py:2260 netbox/virtualization/views.py:432 msgid "Render Config" msgstr "Конфигурация рендера" -#: netbox/dcim/views.py:2131 netbox/virtualization/views.py:450 -#, python-brace-format -msgid "An error occurred while rendering the template: {error}" -msgstr "Во время рендеринга шаблона произошла ошибка: {error}" - -#: netbox/dcim/views.py:2149 netbox/extras/tables/tables.py:550 -#: netbox/netbox/navigation/menu.py:247 netbox/netbox/navigation/menu.py:249 -#: netbox/virtualization/views.py:178 +#: netbox/dcim/views.py:2273 netbox/extras/tables/tables.py:550 +#: netbox/netbox/navigation/menu.py:255 netbox/netbox/navigation/menu.py:257 +#: netbox/virtualization/views.py:190 msgid "Virtual Machines" msgstr "Виртуальные машины" -#: netbox/dcim/views.py:2907 +#: netbox/dcim/views.py:3106 #, python-brace-format msgid "Installed device {device} in bay {device_bay}." msgstr "Установлено устройство {device} в отсек {device_bay}." -#: netbox/dcim/views.py:2948 +#: netbox/dcim/views.py:3147 #, python-brace-format msgid "Removed device {device} from bay {device_bay}." msgstr "Удалено устройство {device} из отсека {device_bay}." -#: netbox/dcim/views.py:3054 netbox/ipam/tables/ip.py:234 +#: netbox/dcim/views.py:3263 netbox/ipam/tables/ip.py:180 msgid "Children" msgstr "Потомки" -#: netbox/dcim/views.py:3520 +#: netbox/dcim/views.py:3730 #, python-brace-format msgid "Added member {device}" msgstr "Добавлен участник {device}" -#: netbox/dcim/views.py:3567 +#: netbox/dcim/views.py:3779 #, python-brace-format msgid "Unable to remove master device {device} from the virtual chassis." msgstr "Невозможно удалить главное устройство {device} из виртуального шасси." -#: netbox/dcim/views.py:3580 +#: netbox/dcim/views.py:3792 #, python-brace-format msgid "Removed {device} from virtual chassis {chassis}" msgstr "{device} удалено из виртуального шасси {chassis}" @@ -7255,7 +7796,7 @@ msgstr "Нет" #: netbox/extras/choices.py:108 netbox/templates/tenancy/contact.html:57 #: netbox/tenancy/forms/bulk_edit.py:118 -#: netbox/wireless/forms/model_forms.py:168 +#: netbox/wireless/forms/model_forms.py:171 msgid "Link" msgstr "Ссылка" @@ -7275,15 +7816,15 @@ msgstr "В алфавитном порядке (А-Я)" msgid "Alphabetical (Z-A)" msgstr "В обратном алфавитном порядке (Я-А)" -#: netbox/extras/choices.py:144 netbox/extras/choices.py:167 +#: netbox/extras/choices.py:144 netbox/extras/choices.py:165 msgid "Info" msgstr "Информация" -#: netbox/extras/choices.py:145 netbox/extras/choices.py:168 +#: netbox/extras/choices.py:145 netbox/extras/choices.py:166 msgid "Success" msgstr "Успех" -#: netbox/extras/choices.py:146 netbox/extras/choices.py:169 +#: netbox/extras/choices.py:146 netbox/extras/choices.py:167 msgid "Warning" msgstr "Предупреждение" @@ -7291,52 +7832,29 @@ msgstr "Предупреждение" msgid "Danger" msgstr "Опасность" -#: netbox/extras/choices.py:165 +#: netbox/extras/choices.py:164 msgid "Debug" msgstr "Отладка" -#: netbox/extras/choices.py:166 netbox/netbox/choices.py:101 -msgid "Default" -msgstr "По умолчанию" - -#: netbox/extras/choices.py:170 +#: netbox/extras/choices.py:168 msgid "Failure" msgstr "Неудача" -#: netbox/extras/choices.py:186 -msgid "Hourly" -msgstr "Ежечасно" - -#: netbox/extras/choices.py:187 -msgid "12 hours" -msgstr "12 часов" - -#: netbox/extras/choices.py:188 -msgid "Daily" -msgstr "Ежедневно" - -#: netbox/extras/choices.py:189 -msgid "Weekly" -msgstr "Еженедельно" - -#: netbox/extras/choices.py:190 -msgid "30 days" -msgstr "30 дней" - -#: netbox/extras/choices.py:226 +#: netbox/extras/choices.py:213 #: netbox/templates/dcim/virtualchassis_edit.html:107 #: netbox/templates/generic/bulk_add_component.html:68 #: netbox/templates/generic/object_edit.html:47 #: netbox/templates/generic/object_edit.html:80 +#: netbox/templates/htmx/quick_add.html:24 #: netbox/templates/ipam/inc/ipaddress_edit_header.html:7 msgid "Create" msgstr "Создать" -#: netbox/extras/choices.py:227 +#: netbox/extras/choices.py:214 msgid "Update" msgstr "Обновить" -#: netbox/extras/choices.py:228 +#: netbox/extras/choices.py:215 #: netbox/templates/circuits/inc/circuit_termination.html:23 #: netbox/templates/dcim/inc/panels/inventory_items.html:37 #: netbox/templates/dcim/powerpanel.html:66 @@ -7351,82 +7869,82 @@ msgstr "Обновить" msgid "Delete" msgstr "Удалить" -#: netbox/extras/choices.py:252 netbox/netbox/choices.py:57 -#: netbox/netbox/choices.py:102 +#: netbox/extras/choices.py:239 netbox/netbox/choices.py:59 +#: netbox/netbox/choices.py:104 msgid "Blue" msgstr "Синий" -#: netbox/extras/choices.py:253 netbox/netbox/choices.py:56 -#: netbox/netbox/choices.py:103 +#: netbox/extras/choices.py:240 netbox/netbox/choices.py:58 +#: netbox/netbox/choices.py:105 msgid "Indigo" msgstr "Темно-синий" -#: netbox/extras/choices.py:254 netbox/netbox/choices.py:54 -#: netbox/netbox/choices.py:104 +#: netbox/extras/choices.py:241 netbox/netbox/choices.py:56 +#: netbox/netbox/choices.py:106 msgid "Purple" msgstr "Фиолетовый" -#: netbox/extras/choices.py:255 netbox/netbox/choices.py:51 -#: netbox/netbox/choices.py:105 +#: netbox/extras/choices.py:242 netbox/netbox/choices.py:53 +#: netbox/netbox/choices.py:107 msgid "Pink" msgstr "Розовый" -#: netbox/extras/choices.py:256 netbox/netbox/choices.py:50 -#: netbox/netbox/choices.py:106 +#: netbox/extras/choices.py:243 netbox/netbox/choices.py:52 +#: netbox/netbox/choices.py:108 msgid "Red" msgstr "Красный" -#: netbox/extras/choices.py:257 netbox/netbox/choices.py:68 -#: netbox/netbox/choices.py:107 +#: netbox/extras/choices.py:244 netbox/netbox/choices.py:70 +#: netbox/netbox/choices.py:109 msgid "Orange" msgstr "Оранжевый" -#: netbox/extras/choices.py:258 netbox/netbox/choices.py:66 -#: netbox/netbox/choices.py:108 +#: netbox/extras/choices.py:245 netbox/netbox/choices.py:68 +#: netbox/netbox/choices.py:110 msgid "Yellow" msgstr "Желтый" -#: netbox/extras/choices.py:259 netbox/netbox/choices.py:63 -#: netbox/netbox/choices.py:109 +#: netbox/extras/choices.py:246 netbox/netbox/choices.py:65 +#: netbox/netbox/choices.py:111 msgid "Green" msgstr "Зелёный" -#: netbox/extras/choices.py:260 netbox/netbox/choices.py:60 -#: netbox/netbox/choices.py:110 +#: netbox/extras/choices.py:247 netbox/netbox/choices.py:62 +#: netbox/netbox/choices.py:112 msgid "Teal" msgstr "Cине-зеленый" -#: netbox/extras/choices.py:261 netbox/netbox/choices.py:59 -#: netbox/netbox/choices.py:111 +#: netbox/extras/choices.py:248 netbox/netbox/choices.py:61 +#: netbox/netbox/choices.py:113 msgid "Cyan" msgstr "Голубой" -#: netbox/extras/choices.py:262 netbox/netbox/choices.py:112 +#: netbox/extras/choices.py:249 netbox/netbox/choices.py:114 msgid "Gray" msgstr "Серый" -#: netbox/extras/choices.py:263 netbox/netbox/choices.py:74 -#: netbox/netbox/choices.py:113 +#: netbox/extras/choices.py:250 netbox/netbox/choices.py:76 +#: netbox/netbox/choices.py:115 msgid "Black" msgstr "Черный" -#: netbox/extras/choices.py:264 netbox/netbox/choices.py:75 -#: netbox/netbox/choices.py:114 +#: netbox/extras/choices.py:251 netbox/netbox/choices.py:77 +#: netbox/netbox/choices.py:116 msgid "White" msgstr "Белый" -#: netbox/extras/choices.py:279 netbox/extras/forms/model_forms.py:353 -#: netbox/extras/forms/model_forms.py:430 +#: netbox/extras/choices.py:266 netbox/extras/forms/model_forms.py:367 +#: netbox/extras/forms/model_forms.py:444 #: netbox/templates/extras/webhook.html:10 msgid "Webhook" msgstr "Вебхук" -#: netbox/extras/choices.py:280 netbox/extras/forms/model_forms.py:418 +#: netbox/extras/choices.py:267 netbox/extras/forms/model_forms.py:432 #: netbox/templates/extras/script/base.html:29 msgid "Script" msgstr "Сценарий" -#: netbox/extras/choices.py:281 +#: netbox/extras/choices.py:268 msgid "Notification" msgstr "Уведомление" @@ -7526,30 +8044,34 @@ msgstr "Неверный формат. Параметры URL должны бы msgid "RSS Feed" msgstr "RSS-канал" -#: netbox/extras/dashboard/widgets.py:279 +#: netbox/extras/dashboard/widgets.py:280 msgid "Embed an RSS feed from an external website." msgstr "Вставьте RSS-канал с внешнего веб-сайта." -#: netbox/extras/dashboard/widgets.py:286 +#: netbox/extras/dashboard/widgets.py:287 msgid "Feed URL" msgstr "URL-адрес ленты" -#: netbox/extras/dashboard/widgets.py:291 +#: netbox/extras/dashboard/widgets.py:290 +msgid "Requires external connection" +msgstr "Требуется внешнее подключение" + +#: netbox/extras/dashboard/widgets.py:296 msgid "The maximum number of objects to display" msgstr "Максимальное количество отображаемых объектов" -#: netbox/extras/dashboard/widgets.py:296 +#: netbox/extras/dashboard/widgets.py:301 msgid "How long to stored the cached content (in seconds)" msgstr "Как долго хранить кэшированный контент (в секундах)" -#: netbox/extras/dashboard/widgets.py:348 +#: netbox/extras/dashboard/widgets.py:358 #: netbox/templates/account/base.html:10 #: netbox/templates/account/bookmarks.html:7 -#: netbox/templates/inc/user_menu.html:48 +#: netbox/templates/inc/user_menu.html:43 msgid "Bookmarks" msgstr "Закладки" -#: netbox/extras/dashboard/widgets.py:352 +#: netbox/extras/dashboard/widgets.py:362 msgid "Show your personal bookmarks" msgstr "Покажите свои личные закладки" @@ -7578,17 +8100,17 @@ msgid "Group (name)" msgstr "Группа (название)" #: netbox/extras/filtersets.py:574 -#: netbox/virtualization/forms/filtersets.py:118 +#: netbox/virtualization/forms/filtersets.py:123 msgid "Cluster type" msgstr "Тип кластера" -#: netbox/extras/filtersets.py:580 netbox/virtualization/filtersets.py:95 -#: netbox/virtualization/filtersets.py:147 +#: netbox/extras/filtersets.py:580 netbox/virtualization/filtersets.py:61 +#: netbox/virtualization/filtersets.py:113 msgid "Cluster type (slug)" msgstr "Тип кластера (подстрока)" #: netbox/extras/filtersets.py:601 netbox/tenancy/forms/forms.py:16 -#: netbox/tenancy/forms/forms.py:39 +#: netbox/tenancy/forms/forms.py:40 msgid "Tenant group" msgstr "Группы арендаторов" @@ -7597,7 +8119,7 @@ msgstr "Группы арендаторов" msgid "Tenant group (slug)" msgstr "Группа арендаторов (подстрока)" -#: netbox/extras/filtersets.py:623 netbox/extras/forms/model_forms.py:495 +#: netbox/extras/filtersets.py:623 netbox/extras/forms/model_forms.py:509 #: netbox/templates/extras/tag.html:11 msgid "Tag" msgstr "Тег" @@ -7606,60 +8128,60 @@ msgstr "Тег" msgid "Tag (slug)" msgstr "Тег (подстрока)" -#: netbox/extras/filtersets.py:689 netbox/extras/forms/filtersets.py:429 +#: netbox/extras/filtersets.py:689 netbox/extras/forms/filtersets.py:437 msgid "Has local config context data" msgstr "Имеет локальные контекстные данные конфигурации" -#: netbox/extras/forms/bulk_edit.py:35 netbox/extras/forms/filtersets.py:60 +#: netbox/extras/forms/bulk_edit.py:35 netbox/extras/forms/filtersets.py:61 msgid "Group name" msgstr "Название группы" -#: netbox/extras/forms/bulk_edit.py:43 netbox/extras/forms/filtersets.py:68 +#: netbox/extras/forms/bulk_edit.py:43 netbox/extras/forms/filtersets.py:69 #: netbox/extras/tables/tables.py:65 #: netbox/templates/extras/customfield.html:38 #: netbox/templates/generic/bulk_import.html:118 msgid "Required" msgstr "Обязательно" -#: netbox/extras/forms/bulk_edit.py:48 netbox/extras/forms/filtersets.py:75 +#: netbox/extras/forms/bulk_edit.py:48 netbox/extras/forms/filtersets.py:76 msgid "Must be unique" msgstr "Должно быть уникальным" #: netbox/extras/forms/bulk_edit.py:61 netbox/extras/forms/bulk_import.py:60 -#: netbox/extras/forms/filtersets.py:89 +#: netbox/extras/forms/filtersets.py:90 #: netbox/extras/models/customfields.py:209 msgid "UI visible" msgstr "Видимый пользовательский интерфейс" #: netbox/extras/forms/bulk_edit.py:66 netbox/extras/forms/bulk_import.py:66 -#: netbox/extras/forms/filtersets.py:94 +#: netbox/extras/forms/filtersets.py:95 #: netbox/extras/models/customfields.py:216 msgid "UI editable" msgstr "Редактируемый UI" -#: netbox/extras/forms/bulk_edit.py:71 netbox/extras/forms/filtersets.py:97 +#: netbox/extras/forms/bulk_edit.py:71 netbox/extras/forms/filtersets.py:98 msgid "Is cloneable" msgstr "Можно клонировать" -#: netbox/extras/forms/bulk_edit.py:76 netbox/extras/forms/filtersets.py:104 +#: netbox/extras/forms/bulk_edit.py:76 netbox/extras/forms/filtersets.py:105 msgid "Minimum value" msgstr "Минимальное значение" -#: netbox/extras/forms/bulk_edit.py:80 netbox/extras/forms/filtersets.py:108 +#: netbox/extras/forms/bulk_edit.py:80 netbox/extras/forms/filtersets.py:109 msgid "Maximum value" msgstr "Максимальное значение" -#: netbox/extras/forms/bulk_edit.py:84 netbox/extras/forms/filtersets.py:112 +#: netbox/extras/forms/bulk_edit.py:84 netbox/extras/forms/filtersets.py:113 msgid "Validation regex" msgstr "Регулярное выражение валидации" -#: netbox/extras/forms/bulk_edit.py:91 netbox/extras/forms/filtersets.py:46 +#: netbox/extras/forms/bulk_edit.py:91 netbox/extras/forms/filtersets.py:47 #: netbox/extras/forms/model_forms.py:76 #: netbox/templates/extras/customfield.html:70 msgid "Behavior" msgstr "Поведение" -#: netbox/extras/forms/bulk_edit.py:128 netbox/extras/forms/filtersets.py:149 +#: netbox/extras/forms/bulk_edit.py:128 netbox/extras/forms/filtersets.py:152 msgid "New window" msgstr "Новое окно" @@ -7667,31 +8189,31 @@ msgstr "Новое окно" msgid "Button class" msgstr "Класс кнопки" -#: netbox/extras/forms/bulk_edit.py:154 netbox/extras/forms/filtersets.py:187 +#: netbox/extras/forms/bulk_edit.py:154 netbox/extras/forms/filtersets.py:191 #: netbox/extras/models/models.py:409 msgid "MIME type" msgstr "Тип MIME" -#: netbox/extras/forms/bulk_edit.py:159 netbox/extras/forms/filtersets.py:190 +#: netbox/extras/forms/bulk_edit.py:159 netbox/extras/forms/filtersets.py:194 msgid "File extension" msgstr "Расширение файла" -#: netbox/extras/forms/bulk_edit.py:164 netbox/extras/forms/filtersets.py:194 +#: netbox/extras/forms/bulk_edit.py:164 netbox/extras/forms/filtersets.py:198 msgid "As attachment" msgstr "В качестве вложения" -#: netbox/extras/forms/bulk_edit.py:192 netbox/extras/forms/filtersets.py:236 +#: netbox/extras/forms/bulk_edit.py:192 netbox/extras/forms/filtersets.py:242 #: netbox/extras/tables/tables.py:256 #: netbox/templates/extras/savedfilter.html:29 msgid "Shared" msgstr "Общий" -#: netbox/extras/forms/bulk_edit.py:215 netbox/extras/forms/filtersets.py:265 +#: netbox/extras/forms/bulk_edit.py:215 netbox/extras/forms/filtersets.py:271 #: netbox/extras/models/models.py:174 msgid "HTTP method" msgstr "Метод HTTP" -#: netbox/extras/forms/bulk_edit.py:219 netbox/extras/forms/filtersets.py:259 +#: netbox/extras/forms/bulk_edit.py:219 netbox/extras/forms/filtersets.py:265 #: netbox/templates/extras/webhook.html:30 msgid "Payload URL" msgstr "URL-адрес полезной нагрузки" @@ -7710,7 +8232,7 @@ msgid "CA file path" msgstr "Путь к файлу CA" #: netbox/extras/forms/bulk_edit.py:253 netbox/extras/forms/bulk_import.py:192 -#: netbox/extras/forms/model_forms.py:377 +#: netbox/extras/forms/model_forms.py:391 msgid "Event types" msgstr "Типы событий" @@ -7723,13 +8245,13 @@ msgstr "Активен" #: netbox/extras/forms/bulk_import.py:139 #: netbox/extras/forms/bulk_import.py:162 #: netbox/extras/forms/bulk_import.py:186 -#: netbox/extras/forms/filtersets.py:137 netbox/extras/forms/filtersets.py:224 +#: netbox/extras/forms/filtersets.py:140 netbox/extras/forms/filtersets.py:230 #: netbox/extras/forms/model_forms.py:47 -#: netbox/extras/forms/model_forms.py:205 -#: netbox/extras/forms/model_forms.py:237 -#: netbox/extras/forms/model_forms.py:278 -#: netbox/extras/forms/model_forms.py:372 -#: netbox/extras/forms/model_forms.py:489 +#: netbox/extras/forms/model_forms.py:219 +#: netbox/extras/forms/model_forms.py:251 +#: netbox/extras/forms/model_forms.py:292 +#: netbox/extras/forms/model_forms.py:386 +#: netbox/extras/forms/model_forms.py:503 #: netbox/users/forms/model_forms.py:276 msgid "Object types" msgstr "Типы объектов" @@ -7747,10 +8269,10 @@ msgstr "Один или несколько назначенных типов о msgid "Field data type (e.g. text, integer, etc.)" msgstr "Тип данных поля (например, текст, целое число и т. д.)" -#: netbox/extras/forms/bulk_import.py:47 netbox/extras/forms/filtersets.py:208 -#: netbox/extras/forms/filtersets.py:281 -#: netbox/extras/forms/model_forms.py:304 -#: netbox/extras/forms/model_forms.py:341 +#: netbox/extras/forms/bulk_import.py:47 netbox/extras/forms/filtersets.py:213 +#: netbox/extras/forms/filtersets.py:287 +#: netbox/extras/forms/model_forms.py:318 +#: netbox/extras/forms/model_forms.py:355 #: netbox/tenancy/forms/filtersets.py:92 msgid "Object type" msgstr "Тип объекта" @@ -7760,7 +8282,7 @@ msgid "Object type (for object or multi-object fields)" msgstr "" "Тип объекта (для полей объектов или полей, состоящих из нескольких объектов)" -#: netbox/extras/forms/bulk_import.py:53 netbox/extras/forms/filtersets.py:84 +#: netbox/extras/forms/bulk_import.py:53 netbox/extras/forms/filtersets.py:85 msgid "Choice set" msgstr "Набор для выбора" @@ -7832,7 +8354,7 @@ msgid "The classification of entry" msgstr "Классификация записей" #: netbox/extras/forms/bulk_import.py:261 -#: netbox/extras/forms/model_forms.py:320 netbox/netbox/navigation/menu.py:390 +#: netbox/extras/forms/model_forms.py:334 netbox/netbox/navigation/menu.py:411 #: netbox/templates/extras/notificationgroup.html:41 #: netbox/templates/users/group.html:29 netbox/users/forms/model_forms.py:236 #: netbox/users/forms/model_forms.py:248 netbox/users/forms/model_forms.py:300 @@ -7846,7 +8368,8 @@ msgstr "" "Имена пользователей, разделенные запятыми и заключенные в двойные кавычки" #: netbox/extras/forms/bulk_import.py:268 -#: netbox/extras/forms/model_forms.py:315 netbox/netbox/navigation/menu.py:410 +#: netbox/extras/forms/model_forms.py:329 netbox/netbox/navigation/menu.py:294 +#: netbox/netbox/navigation/menu.py:431 #: netbox/templates/extras/notificationgroup.html:31 #: netbox/users/forms/model_forms.py:181 netbox/users/forms/model_forms.py:193 #: netbox/users/forms/model_forms.py:305 netbox/users/tables.py:35 @@ -7858,104 +8381,104 @@ msgstr "Группы" msgid "Group names separated by commas, encased with double quotes" msgstr "Имена групп, разделенные запятыми и заключенные в двойные кавычки" -#: netbox/extras/forms/filtersets.py:52 netbox/extras/forms/model_forms.py:56 +#: netbox/extras/forms/filtersets.py:53 netbox/extras/forms/model_forms.py:56 msgid "Related object type" msgstr "Тип связанного объекта" -#: netbox/extras/forms/filtersets.py:57 +#: netbox/extras/forms/filtersets.py:58 msgid "Field type" msgstr "Тип поля" -#: netbox/extras/forms/filtersets.py:120 +#: netbox/extras/forms/filtersets.py:122 #: netbox/extras/forms/model_forms.py:157 netbox/extras/tables/tables.py:91 #: netbox/templates/generic/bulk_import.html:154 msgid "Choices" msgstr "Варианты" -#: netbox/extras/forms/filtersets.py:164 netbox/extras/forms/filtersets.py:319 -#: netbox/extras/forms/filtersets.py:408 -#: netbox/extras/forms/model_forms.py:572 netbox/templates/core/job.html:96 +#: netbox/extras/forms/filtersets.py:168 netbox/extras/forms/filtersets.py:326 +#: netbox/extras/forms/filtersets.py:416 +#: netbox/extras/forms/model_forms.py:586 netbox/templates/core/job.html:96 #: netbox/templates/extras/eventrule.html:84 msgid "Data" msgstr "Данные" -#: netbox/extras/forms/filtersets.py:175 netbox/extras/forms/filtersets.py:333 -#: netbox/extras/forms/filtersets.py:418 netbox/netbox/choices.py:130 +#: netbox/extras/forms/filtersets.py:179 netbox/extras/forms/filtersets.py:340 +#: netbox/extras/forms/filtersets.py:426 netbox/netbox/choices.py:132 #: netbox/utilities/forms/bulk_import.py:26 msgid "Data file" msgstr "Файл данных" -#: netbox/extras/forms/filtersets.py:183 +#: netbox/extras/forms/filtersets.py:187 msgid "Content types" msgstr "Типы контента" -#: netbox/extras/forms/filtersets.py:255 netbox/extras/models/models.py:179 +#: netbox/extras/forms/filtersets.py:261 netbox/extras/models/models.py:179 msgid "HTTP content type" msgstr "Тип содержимого HTTP" -#: netbox/extras/forms/filtersets.py:286 +#: netbox/extras/forms/filtersets.py:292 msgid "Event type" msgstr "Тип события" -#: netbox/extras/forms/filtersets.py:291 +#: netbox/extras/forms/filtersets.py:297 msgid "Action type" msgstr "Тип действия" -#: netbox/extras/forms/filtersets.py:307 +#: netbox/extras/forms/filtersets.py:313 msgid "Tagged object type" msgstr "Тип объекта с тегами" -#: netbox/extras/forms/filtersets.py:312 +#: netbox/extras/forms/filtersets.py:318 msgid "Allowed object type" msgstr "Разрешенный тип объекта" -#: netbox/extras/forms/filtersets.py:341 -#: netbox/extras/forms/model_forms.py:507 netbox/netbox/navigation/menu.py:18 +#: netbox/extras/forms/filtersets.py:348 +#: netbox/extras/forms/model_forms.py:521 netbox/netbox/navigation/menu.py:18 msgid "Regions" msgstr "Регионы" -#: netbox/extras/forms/filtersets.py:346 -#: netbox/extras/forms/model_forms.py:512 +#: netbox/extras/forms/filtersets.py:353 +#: netbox/extras/forms/model_forms.py:526 msgid "Site groups" msgstr "Группы сайтов" -#: netbox/extras/forms/filtersets.py:356 -#: netbox/extras/forms/model_forms.py:522 netbox/netbox/navigation/menu.py:20 +#: netbox/extras/forms/filtersets.py:363 +#: netbox/extras/forms/model_forms.py:536 netbox/netbox/navigation/menu.py:20 #: netbox/templates/dcim/site.html:127 msgid "Locations" msgstr "Локации" -#: netbox/extras/forms/filtersets.py:361 -#: netbox/extras/forms/model_forms.py:527 +#: netbox/extras/forms/filtersets.py:368 +#: netbox/extras/forms/model_forms.py:541 msgid "Device types" msgstr "Типы устройств" -#: netbox/extras/forms/filtersets.py:366 -#: netbox/extras/forms/model_forms.py:532 +#: netbox/extras/forms/filtersets.py:373 +#: netbox/extras/forms/model_forms.py:546 msgid "Roles" msgstr "Роли" -#: netbox/extras/forms/filtersets.py:376 -#: netbox/extras/forms/model_forms.py:542 +#: netbox/extras/forms/filtersets.py:383 +#: netbox/extras/forms/model_forms.py:556 msgid "Cluster types" msgstr "Типы кластеров" -#: netbox/extras/forms/filtersets.py:381 -#: netbox/extras/forms/model_forms.py:547 +#: netbox/extras/forms/filtersets.py:388 +#: netbox/extras/forms/model_forms.py:561 msgid "Cluster groups" msgstr "Кластерные группы" -#: netbox/extras/forms/filtersets.py:386 -#: netbox/extras/forms/model_forms.py:552 netbox/netbox/navigation/menu.py:255 -#: netbox/netbox/navigation/menu.py:257 +#: netbox/extras/forms/filtersets.py:393 +#: netbox/extras/forms/model_forms.py:566 netbox/netbox/navigation/menu.py:263 +#: netbox/netbox/navigation/menu.py:265 #: netbox/templates/virtualization/clustertype.html:30 #: netbox/virtualization/tables/clusters.py:23 #: netbox/virtualization/tables/clusters.py:45 msgid "Clusters" msgstr "Кластеры" -#: netbox/extras/forms/filtersets.py:391 -#: netbox/extras/forms/model_forms.py:557 +#: netbox/extras/forms/filtersets.py:398 +#: netbox/extras/forms/model_forms.py:571 msgid "Tenant groups" msgstr "Группы арендаторов" @@ -8006,7 +8529,7 @@ msgstr "" msgid "Related Object" msgstr "Связанный объект" -#: netbox/extras/forms/model_forms.py:169 +#: netbox/extras/forms/model_forms.py:170 msgid "" "Enter one choice per line. An optional label may be specified for each " "choice by appending it with a colon. Example:" @@ -8014,16 +8537,16 @@ msgstr "" "Введите по одному варианту в строке. Для каждого варианта можно указать " "дополнительный лейбл через двоеточие. Пример:" -#: netbox/extras/forms/model_forms.py:212 +#: netbox/extras/forms/model_forms.py:226 #: netbox/templates/extras/customlink.html:10 msgid "Custom Link" msgstr "Настраиваемая Ссылка" -#: netbox/extras/forms/model_forms.py:214 +#: netbox/extras/forms/model_forms.py:228 msgid "Templates" msgstr "Шаблоны" -#: netbox/extras/forms/model_forms.py:226 +#: netbox/extras/forms/model_forms.py:240 #, python-brace-format msgid "" "Jinja2 template code for the link text. Reference the object as {example}. " @@ -8032,66 +8555,66 @@ msgstr "" "Код Jinja2 шаблона для текста ссылки. Ссылайтесь на объект как {example}. " "Ссылки с пустым текстом отображены не будут." -#: netbox/extras/forms/model_forms.py:230 +#: netbox/extras/forms/model_forms.py:244 #, python-brace-format msgid "" "Jinja2 template code for the link URL. Reference the object as {example}." msgstr "" "Код Jinja2 шаблона для URL-адреса. Ссылайтесь на объект как {example}." -#: netbox/extras/forms/model_forms.py:241 -#: netbox/extras/forms/model_forms.py:624 +#: netbox/extras/forms/model_forms.py:255 +#: netbox/extras/forms/model_forms.py:638 msgid "Template code" msgstr "Код шаблона" -#: netbox/extras/forms/model_forms.py:247 +#: netbox/extras/forms/model_forms.py:261 #: netbox/templates/extras/exporttemplate.html:12 msgid "Export Template" msgstr "Шаблон экспорта" -#: netbox/extras/forms/model_forms.py:249 +#: netbox/extras/forms/model_forms.py:263 msgid "Rendering" msgstr "Рендеринг" -#: netbox/extras/forms/model_forms.py:263 -#: netbox/extras/forms/model_forms.py:649 +#: netbox/extras/forms/model_forms.py:277 +#: netbox/extras/forms/model_forms.py:663 msgid "Template content is populated from the remote source selected below." msgstr "" "Содержимое шаблона заполняется из удаленного источника, выбранного ниже." -#: netbox/extras/forms/model_forms.py:270 -#: netbox/extras/forms/model_forms.py:656 +#: netbox/extras/forms/model_forms.py:284 +#: netbox/extras/forms/model_forms.py:670 msgid "Must specify either local content or a data file" msgstr "Необходимо указать локальное содержимое или файл данных" -#: netbox/extras/forms/model_forms.py:284 netbox/netbox/forms/mixins.py:70 +#: netbox/extras/forms/model_forms.py:298 netbox/netbox/forms/mixins.py:70 #: netbox/templates/extras/savedfilter.html:10 msgid "Saved Filter" msgstr "Сохраненный фильтр" -#: netbox/extras/forms/model_forms.py:334 +#: netbox/extras/forms/model_forms.py:348 msgid "A notification group specify at least one user or group." msgstr "В группе уведомлений укажите хотя бы одного пользователя или группу." -#: netbox/extras/forms/model_forms.py:356 +#: netbox/extras/forms/model_forms.py:370 #: netbox/templates/extras/webhook.html:23 msgid "HTTP Request" msgstr "HTTP-запрос" -#: netbox/extras/forms/model_forms.py:358 +#: netbox/extras/forms/model_forms.py:372 #: netbox/templates/extras/webhook.html:44 msgid "SSL" msgstr "SSL" -#: netbox/extras/forms/model_forms.py:380 +#: netbox/extras/forms/model_forms.py:394 msgid "Action choice" msgstr "Выбор действия" -#: netbox/extras/forms/model_forms.py:385 +#: netbox/extras/forms/model_forms.py:399 msgid "Enter conditions in JSON format." msgstr "Введите условия в JSON формат." -#: netbox/extras/forms/model_forms.py:389 +#: netbox/extras/forms/model_forms.py:403 msgid "" "Enter parameters to pass to the action in JSON format." @@ -8099,33 +8622,33 @@ msgstr "" "Введите параметры для перехода к действию в JSON формат." -#: netbox/extras/forms/model_forms.py:394 +#: netbox/extras/forms/model_forms.py:408 #: netbox/templates/extras/eventrule.html:10 msgid "Event Rule" msgstr "Правило мероприятия" -#: netbox/extras/forms/model_forms.py:395 +#: netbox/extras/forms/model_forms.py:409 msgid "Triggers" msgstr "Триггеры" -#: netbox/extras/forms/model_forms.py:442 +#: netbox/extras/forms/model_forms.py:456 msgid "Notification group" msgstr "Группа уведомлений" -#: netbox/extras/forms/model_forms.py:562 netbox/netbox/navigation/menu.py:26 +#: netbox/extras/forms/model_forms.py:576 netbox/netbox/navigation/menu.py:26 #: netbox/tenancy/tables/tenants.py:22 msgid "Tenants" msgstr "Арендаторы" -#: netbox/extras/forms/model_forms.py:606 +#: netbox/extras/forms/model_forms.py:620 msgid "Data is populated from the remote source selected below." msgstr "Данные заполняются из удаленного источника, выбранного ниже." -#: netbox/extras/forms/model_forms.py:612 +#: netbox/extras/forms/model_forms.py:626 msgid "Must specify either local data or a data file" msgstr "Необходимо указать локальные данные или файл данных" -#: netbox/extras/forms/model_forms.py:631 +#: netbox/extras/forms/model_forms.py:645 #: netbox/templates/core/datafile.html:55 msgid "Content" msgstr "Контент" @@ -8188,10 +8711,16 @@ msgstr "Возникло исключение: " msgid "Database changes have been reverted due to error." msgstr "Изменения в базе данных отменены из-за ошибки." -#: netbox/extras/management/commands/reindex.py:66 +#: netbox/extras/management/commands/reindex.py:67 msgid "No indexers found!" msgstr "Индексаторы не найдены!" +#: netbox/extras/models/configs.py:41 netbox/extras/models/models.py:313 +#: netbox/extras/models/models.py:522 netbox/extras/models/search.py:48 +#: netbox/ipam/models/ip.py:188 netbox/netbox/models/mixins.py:15 +msgid "weight" +msgstr "вес" + #: netbox/extras/models/configs.py:130 msgid "config context" msgstr "контекст конфигурации" @@ -8558,27 +9087,27 @@ msgstr "Обнаружен неправильный идентификатор msgid "Required field cannot be empty." msgstr "Обязательное поле не может быть пустым." -#: netbox/extras/models/customfields.py:763 +#: netbox/extras/models/customfields.py:764 msgid "Base set of predefined choices (optional)" msgstr "Базовый набор предопределенных вариантов (опционально)" -#: netbox/extras/models/customfields.py:775 +#: netbox/extras/models/customfields.py:776 msgid "Choices are automatically ordered alphabetically" msgstr "Варианты автоматически упорядочены в алфавитном порядке" -#: netbox/extras/models/customfields.py:782 +#: netbox/extras/models/customfields.py:783 msgid "custom field choice set" msgstr "набор вариантов для настраиваемых полей" -#: netbox/extras/models/customfields.py:783 +#: netbox/extras/models/customfields.py:784 msgid "custom field choice sets" msgstr "наборы вариантов для настраиваемых полей" -#: netbox/extras/models/customfields.py:825 +#: netbox/extras/models/customfields.py:826 msgid "Must define base or extra choices." msgstr "Должен определить базовые или дополнительные варианты." -#: netbox/extras/models/customfields.py:849 +#: netbox/extras/models/customfields.py:850 #, python-brace-format msgid "" "Cannot remove choice {choice} as there are {model} objects which reference " @@ -8874,20 +9403,20 @@ msgstr "запись в журнале" msgid "journal entries" msgstr "записи в журнале" -#: netbox/extras/models/models.py:718 +#: netbox/extras/models/models.py:721 #, python-brace-format msgid "Journaling is not supported for this object type ({type})." msgstr "Ведение журнала не поддерживается для этого типа объектов ({type})." -#: netbox/extras/models/models.py:760 +#: netbox/extras/models/models.py:763 msgid "bookmark" msgstr "закладка" -#: netbox/extras/models/models.py:761 +#: netbox/extras/models/models.py:764 msgid "bookmarks" msgstr "закладки" -#: netbox/extras/models/models.py:774 +#: netbox/extras/models/models.py:777 #, python-brace-format msgid "Bookmarks cannot be assigned to this object type ({type})." msgstr "Закладки нельзя присвоить этому типу объекта ({type})." @@ -8979,19 +9508,19 @@ msgstr "кэшированное значение" msgid "cached values" msgstr "кэшированные значения" -#: netbox/extras/models/staging.py:44 +#: netbox/extras/models/staging.py:45 msgid "branch" msgstr "ветка" -#: netbox/extras/models/staging.py:45 +#: netbox/extras/models/staging.py:46 msgid "branches" msgstr "ветки" -#: netbox/extras/models/staging.py:97 +#: netbox/extras/models/staging.py:105 msgid "staged change" msgstr "поэтапное изменение" -#: netbox/extras/models/staging.py:98 +#: netbox/extras/models/staging.py:106 msgid "staged changes" msgstr "поэтапные изменения" @@ -9015,11 +9544,11 @@ msgstr "помеченный товар" msgid "tagged items" msgstr "помеченные товары" -#: netbox/extras/scripts.py:429 +#: netbox/extras/scripts.py:432 msgid "Script Data" msgstr "Данные скрипта" -#: netbox/extras/scripts.py:433 +#: netbox/extras/scripts.py:436 msgid "Script Execution Parameters" msgstr "Параметры выполнения сценария" @@ -9096,12 +9625,11 @@ msgstr "В качестве вложения" #: netbox/extras/tables/tables.py:195 netbox/extras/tables/tables.py:487 #: netbox/extras/tables/tables.py:522 netbox/templates/core/datafile.html:24 -#: netbox/templates/dcim/device/render_config.html:22 #: netbox/templates/extras/configcontext.html:39 #: netbox/templates/extras/configtemplate.html:31 #: netbox/templates/extras/exporttemplate.html:45 +#: netbox/templates/extras/object_render_config.html:23 #: netbox/templates/generic/bulk_import.html:35 -#: netbox/templates/virtualization/virtualmachine/render_config.html:22 msgid "Data File" msgstr "Файл данных" @@ -9193,27 +9721,32 @@ msgstr "Неверный атрибут»{name}\"по запросу" msgid "Invalid attribute \"{name}\" for {model}" msgstr "Недопустимый атрибут \"{name}\" для {model}" -#: netbox/extras/views.py:960 +#: netbox/extras/views.py:933 +#, python-brace-format +msgid "An error occurred while rendering the template: {error}" +msgstr "Во время рендеринга шаблона произошла ошибка: {error}" + +#: netbox/extras/views.py:1085 msgid "Your dashboard has been reset." msgstr "Панель виджетов была сброшена." -#: netbox/extras/views.py:1006 +#: netbox/extras/views.py:1131 msgid "Added widget: " msgstr "Добавлен виджет: " -#: netbox/extras/views.py:1047 +#: netbox/extras/views.py:1172 msgid "Updated widget: " msgstr "Обновлен виджет: " -#: netbox/extras/views.py:1083 +#: netbox/extras/views.py:1208 msgid "Deleted widget: " msgstr "Удален виджет: " -#: netbox/extras/views.py:1085 +#: netbox/extras/views.py:1210 msgid "Error deleting widget: " msgstr "Ошибка при удалении виджета: " -#: netbox/extras/views.py:1175 +#: netbox/extras/views.py:1308 msgid "Unable to run script: RQ worker process not running." msgstr "Невозможно запустить скрипт: процесс RQ не запущен." @@ -9235,7 +9768,7 @@ msgstr "Введите действительный префикс и маску msgid "Invalid IP prefix format: {data}" msgstr "Неверный формат IP-префикса: {data}" -#: netbox/ipam/api/views.py:358 +#: netbox/ipam/api/views.py:370 msgid "" "Insufficient space is available to accommodate the requested prefix size(s)" msgstr "Недостаточно места для размещения запрошенных размеров префиксов" @@ -9276,182 +9809,174 @@ msgstr "Cisco" msgid "Plaintext" msgstr "Обычный текст" +#: netbox/ipam/choices.py:166 netbox/ipam/forms/model_forms.py:800 +#: netbox/ipam/forms/model_forms.py:828 netbox/templates/ipam/service.html:21 +msgid "Service" +msgstr "Служба" + +#: netbox/ipam/choices.py:167 +msgid "Customer" +msgstr "Клиент" + #: netbox/ipam/fields.py:36 #, python-brace-format msgid "Invalid IP address format: {address}" msgstr "Неверный формат IP-адреса: {address}" -#: netbox/ipam/filtersets.py:48 netbox/vpn/filtersets.py:304 +#: netbox/ipam/filtersets.py:51 netbox/vpn/filtersets.py:304 msgid "Import target" msgstr "Цель импорта" -#: netbox/ipam/filtersets.py:54 netbox/vpn/filtersets.py:310 +#: netbox/ipam/filtersets.py:57 netbox/vpn/filtersets.py:310 msgid "Import target (name)" msgstr "Цель импорта (имя)" -#: netbox/ipam/filtersets.py:59 netbox/vpn/filtersets.py:315 +#: netbox/ipam/filtersets.py:62 netbox/vpn/filtersets.py:315 msgid "Export target" msgstr "Цель экспорта" -#: netbox/ipam/filtersets.py:65 netbox/vpn/filtersets.py:321 +#: netbox/ipam/filtersets.py:68 netbox/vpn/filtersets.py:321 msgid "Export target (name)" msgstr "Цель экспорта (имя)" -#: netbox/ipam/filtersets.py:86 +#: netbox/ipam/filtersets.py:89 msgid "Importing VRF" msgstr "Импорт VRF" -#: netbox/ipam/filtersets.py:92 +#: netbox/ipam/filtersets.py:95 msgid "Import VRF (RD)" msgstr "Импорт VRF (RD)" -#: netbox/ipam/filtersets.py:97 +#: netbox/ipam/filtersets.py:100 msgid "Exporting VRF" msgstr "Экспорт VRF" -#: netbox/ipam/filtersets.py:103 +#: netbox/ipam/filtersets.py:106 msgid "Export VRF (RD)" msgstr "Экспорт VRF (RD)" -#: netbox/ipam/filtersets.py:108 +#: netbox/ipam/filtersets.py:111 msgid "Importing L2VPN" msgstr "Импорт L2VPN" -#: netbox/ipam/filtersets.py:114 +#: netbox/ipam/filtersets.py:117 msgid "Importing L2VPN (identifier)" msgstr "Импорт L2VPN (идентификатор)" -#: netbox/ipam/filtersets.py:119 +#: netbox/ipam/filtersets.py:122 msgid "Exporting L2VPN" msgstr "Экспорт L2VPN" -#: netbox/ipam/filtersets.py:125 +#: netbox/ipam/filtersets.py:128 msgid "Exporting L2VPN (identifier)" msgstr "Экспорт L2VPN (идентификатор)" -#: netbox/ipam/filtersets.py:155 netbox/ipam/filtersets.py:283 -#: netbox/ipam/forms/model_forms.py:229 netbox/ipam/tables/ip.py:212 +#: netbox/ipam/filtersets.py:158 netbox/ipam/filtersets.py:286 +#: netbox/ipam/forms/model_forms.py:229 netbox/ipam/tables/ip.py:158 #: netbox/templates/ipam/prefix.html:12 msgid "Prefix" msgstr "Префикс" -#: netbox/ipam/filtersets.py:159 netbox/ipam/filtersets.py:198 -#: netbox/ipam/filtersets.py:223 +#: netbox/ipam/filtersets.py:162 netbox/ipam/filtersets.py:201 +#: netbox/ipam/filtersets.py:226 msgid "RIR (ID)" msgstr "RIR (ID)" -#: netbox/ipam/filtersets.py:165 netbox/ipam/filtersets.py:204 -#: netbox/ipam/filtersets.py:229 +#: netbox/ipam/filtersets.py:168 netbox/ipam/filtersets.py:207 +#: netbox/ipam/filtersets.py:232 msgid "RIR (slug)" msgstr "RIR (подстрока)" -#: netbox/ipam/filtersets.py:287 +#: netbox/ipam/filtersets.py:290 msgid "Within prefix" msgstr "В префиксе" -#: netbox/ipam/filtersets.py:291 +#: netbox/ipam/filtersets.py:294 msgid "Within and including prefix" msgstr "В префиксе и включительно" -#: netbox/ipam/filtersets.py:295 +#: netbox/ipam/filtersets.py:298 msgid "Prefixes which contain this prefix or IP" msgstr "Префиксы, содержащие этот префикс или IP-адрес" -#: netbox/ipam/filtersets.py:306 netbox/ipam/filtersets.py:574 -#: netbox/ipam/forms/bulk_edit.py:343 netbox/ipam/forms/filtersets.py:196 -#: netbox/ipam/forms/filtersets.py:331 +#: netbox/ipam/filtersets.py:309 netbox/ipam/filtersets.py:541 +#: netbox/ipam/forms/bulk_edit.py:327 netbox/ipam/forms/filtersets.py:198 +#: netbox/ipam/forms/filtersets.py:334 msgid "Mask length" msgstr "Длина маски" -#: netbox/ipam/filtersets.py:375 netbox/vpn/filtersets.py:427 +#: netbox/ipam/filtersets.py:342 netbox/vpn/filtersets.py:427 msgid "VLAN (ID)" msgstr "VLAN (ID)" -#: netbox/ipam/filtersets.py:379 netbox/vpn/filtersets.py:422 +#: netbox/ipam/filtersets.py:346 netbox/vpn/filtersets.py:422 msgid "VLAN number (1-4094)" msgstr "Номер VLAN (1-4094)" -#: netbox/ipam/filtersets.py:473 netbox/ipam/filtersets.py:477 -#: netbox/ipam/filtersets.py:569 netbox/ipam/forms/model_forms.py:496 +#: netbox/ipam/filtersets.py:440 netbox/ipam/filtersets.py:444 +#: netbox/ipam/filtersets.py:536 netbox/ipam/forms/model_forms.py:506 #: netbox/templates/tenancy/contact.html:53 #: netbox/tenancy/forms/bulk_edit.py:113 msgid "Address" msgstr "Адрес" -#: netbox/ipam/filtersets.py:481 +#: netbox/ipam/filtersets.py:448 msgid "Ranges which contain this prefix or IP" msgstr "Диапазоны, содержащие этот префикс или IP-адрес" -#: netbox/ipam/filtersets.py:509 netbox/ipam/filtersets.py:565 +#: netbox/ipam/filtersets.py:476 netbox/ipam/filtersets.py:532 msgid "Parent prefix" msgstr "Родительский префикс" -#: netbox/ipam/filtersets.py:618 netbox/ipam/filtersets.py:858 -#: netbox/ipam/filtersets.py:1133 netbox/vpn/filtersets.py:385 -msgid "Virtual machine (name)" -msgstr "Виртуальная машина (имя)" - -#: netbox/ipam/filtersets.py:623 netbox/ipam/filtersets.py:863 -#: netbox/ipam/filtersets.py:1127 netbox/virtualization/filtersets.py:282 -#: netbox/virtualization/filtersets.py:321 netbox/vpn/filtersets.py:390 -msgid "Virtual machine (ID)" -msgstr "Виртуальная машина (ID)" - -#: netbox/ipam/filtersets.py:629 netbox/vpn/filtersets.py:97 -#: netbox/vpn/filtersets.py:396 -msgid "Interface (name)" -msgstr "Интерфейс (имя)" - -#: netbox/ipam/filtersets.py:640 netbox/vpn/filtersets.py:108 -#: netbox/vpn/filtersets.py:407 -msgid "VM interface (name)" -msgstr "Интерфейс виртуальной машины (имя)" - -#: netbox/ipam/filtersets.py:645 netbox/vpn/filtersets.py:113 -msgid "VM interface (ID)" -msgstr "Интерфейс виртуальной машины (ID)" - -#: netbox/ipam/filtersets.py:650 +#: netbox/ipam/filtersets.py:617 msgid "FHRP group (ID)" msgstr "FHRP группа (ID)" -#: netbox/ipam/filtersets.py:654 +#: netbox/ipam/filtersets.py:621 msgid "Is assigned to an interface" msgstr "Присвоен интерфейсу" -#: netbox/ipam/filtersets.py:658 +#: netbox/ipam/filtersets.py:625 msgid "Is assigned" msgstr "Назначено" -#: netbox/ipam/filtersets.py:670 +#: netbox/ipam/filtersets.py:637 msgid "Service (ID)" msgstr "Сервис (ID)" -#: netbox/ipam/filtersets.py:675 +#: netbox/ipam/filtersets.py:642 msgid "NAT inside IP address (ID)" msgstr "Внутренний NAT IP-адрес (ID)" -#: netbox/ipam/filtersets.py:1043 netbox/ipam/forms/bulk_import.py:322 -msgid "Assigned interface" -msgstr "Назначенный интерфейс" +#: netbox/ipam/filtersets.py:1001 +msgid "Q-in-Q SVLAN (ID)" +msgstr "Сетевая локальная сеть Q-in-Q (ID)" -#: netbox/ipam/filtersets.py:1048 +#: netbox/ipam/filtersets.py:1005 +msgid "Q-in-Q SVLAN number (1-4094)" +msgstr "Номер виртуальной локальной сети Q-in-Q (1-4094)" + +#: netbox/ipam/filtersets.py:1026 msgid "Assigned VM interface" msgstr "Назначенный интерфейс виртуальной машины" -#: netbox/ipam/filtersets.py:1138 +#: netbox/ipam/filtersets.py:1097 +msgid "VLAN Translation Policy (name)" +msgstr "Политика трансляции VLAN (название)" + +#: netbox/ipam/filtersets.py:1163 msgid "IP address (ID)" msgstr "IP-адрес (ID)" -#: netbox/ipam/filtersets.py:1144 netbox/ipam/models/ip.py:788 +#: netbox/ipam/filtersets.py:1169 netbox/ipam/models/ip.py:788 msgid "IP address" msgstr "IP-адрес" -#: netbox/ipam/filtersets.py:1169 +#: netbox/ipam/filtersets.py:1194 msgid "Primary IPv4 (ID)" msgstr "Основной IPv4 (ID)" -#: netbox/ipam/filtersets.py:1174 +#: netbox/ipam/filtersets.py:1199 msgid "Primary IPv6 (ID)" msgstr "Основной IPv6 (ID)" @@ -9484,430 +10009,403 @@ msgstr "Требуется маска CIDR (например, /24)." msgid "Address pattern" msgstr "Шаблон адреса" -#: netbox/ipam/forms/bulk_edit.py:50 +#: netbox/ipam/forms/bulk_edit.py:53 msgid "Enforce unique space" msgstr "Обеспечить уникальное пространство" -#: netbox/ipam/forms/bulk_edit.py:88 +#: netbox/ipam/forms/bulk_edit.py:91 msgid "Is private" msgstr "Является приватным" -#: netbox/ipam/forms/bulk_edit.py:109 netbox/ipam/forms/bulk_edit.py:138 -#: netbox/ipam/forms/bulk_edit.py:163 netbox/ipam/forms/bulk_import.py:89 -#: netbox/ipam/forms/bulk_import.py:109 netbox/ipam/forms/bulk_import.py:129 -#: netbox/ipam/forms/filtersets.py:110 netbox/ipam/forms/filtersets.py:125 -#: netbox/ipam/forms/filtersets.py:148 netbox/ipam/forms/model_forms.py:96 -#: netbox/ipam/forms/model_forms.py:109 netbox/ipam/forms/model_forms.py:131 -#: netbox/ipam/forms/model_forms.py:149 netbox/ipam/models/asns.py:31 -#: netbox/ipam/models/asns.py:103 netbox/ipam/models/ip.py:71 -#: netbox/ipam/models/ip.py:90 netbox/ipam/tables/asn.py:20 +#: netbox/ipam/forms/bulk_edit.py:112 netbox/ipam/forms/bulk_edit.py:141 +#: netbox/ipam/forms/bulk_edit.py:166 netbox/ipam/forms/bulk_import.py:92 +#: netbox/ipam/forms/bulk_import.py:112 netbox/ipam/forms/bulk_import.py:132 +#: netbox/ipam/forms/filtersets.py:112 netbox/ipam/forms/filtersets.py:127 +#: netbox/ipam/forms/filtersets.py:150 netbox/ipam/forms/model_forms.py:99 +#: netbox/ipam/forms/model_forms.py:112 netbox/ipam/forms/model_forms.py:135 +#: netbox/ipam/forms/model_forms.py:154 netbox/ipam/models/asns.py:31 +#: netbox/ipam/models/asns.py:100 netbox/ipam/models/ip.py:71 +#: netbox/ipam/models/ip.py:87 netbox/ipam/tables/asn.py:20 #: netbox/ipam/tables/asn.py:45 netbox/templates/ipam/aggregate.html:18 #: netbox/templates/ipam/asn.html:27 netbox/templates/ipam/asnrange.html:19 #: netbox/templates/ipam/rir.html:19 msgid "RIR" msgstr "RIR" -#: netbox/ipam/forms/bulk_edit.py:171 +#: netbox/ipam/forms/bulk_edit.py:174 msgid "Date added" msgstr "Дата добавления" -#: netbox/ipam/forms/bulk_edit.py:229 netbox/ipam/forms/model_forms.py:619 -#: netbox/ipam/forms/model_forms.py:666 netbox/ipam/tables/ip.py:251 -#: netbox/templates/ipam/vlan_edit.html:37 +#: netbox/ipam/forms/bulk_edit.py:213 netbox/ipam/forms/model_forms.py:629 +#: netbox/ipam/forms/model_forms.py:676 netbox/ipam/tables/ip.py:201 +#: netbox/templates/ipam/vlan_edit.html:45 #: netbox/templates/ipam/vlangroup.html:27 msgid "VLAN Group" msgstr "VLAN группа" -#: netbox/ipam/forms/bulk_edit.py:234 netbox/ipam/forms/bulk_import.py:185 -#: netbox/ipam/forms/filtersets.py:256 netbox/ipam/forms/model_forms.py:218 -#: netbox/ipam/models/vlans.py:250 netbox/ipam/tables/ip.py:255 -#: netbox/templates/ipam/prefix.html:60 netbox/templates/ipam/vlan.html:12 +#: netbox/ipam/forms/bulk_edit.py:218 netbox/ipam/forms/bulk_import.py:181 +#: netbox/ipam/forms/filtersets.py:259 netbox/ipam/forms/model_forms.py:217 +#: netbox/ipam/models/vlans.py:272 netbox/ipam/tables/ip.py:206 +#: netbox/templates/ipam/prefix.html:56 netbox/templates/ipam/vlan.html:12 #: netbox/templates/ipam/vlan/base.html:6 #: netbox/templates/ipam/vlan_edit.html:10 -#: netbox/templates/wireless/wirelesslan.html:30 +#: netbox/templates/wireless/wirelesslan.html:38 #: netbox/vpn/forms/bulk_import.py:304 netbox/vpn/forms/filtersets.py:284 -#: netbox/vpn/forms/model_forms.py:433 netbox/vpn/forms/model_forms.py:452 -#: netbox/wireless/forms/bulk_edit.py:55 -#: netbox/wireless/forms/bulk_import.py:48 -#: netbox/wireless/forms/model_forms.py:48 netbox/wireless/models.py:102 +#: netbox/vpn/forms/model_forms.py:436 netbox/vpn/forms/model_forms.py:455 +#: netbox/wireless/forms/bulk_edit.py:57 +#: netbox/wireless/forms/bulk_import.py:50 +#: netbox/wireless/forms/model_forms.py:50 netbox/wireless/models.py:102 msgid "VLAN" msgstr "VLAN" -#: netbox/ipam/forms/bulk_edit.py:245 +#: netbox/ipam/forms/bulk_edit.py:229 msgid "Prefix length" msgstr "Длина префикса" -#: netbox/ipam/forms/bulk_edit.py:268 netbox/ipam/forms/filtersets.py:241 -#: netbox/templates/ipam/prefix.html:85 +#: netbox/ipam/forms/bulk_edit.py:252 netbox/ipam/forms/filtersets.py:244 +#: netbox/templates/ipam/prefix.html:81 msgid "Is a pool" msgstr "Является пулом" -#: netbox/ipam/forms/bulk_edit.py:273 netbox/ipam/forms/bulk_edit.py:318 -#: netbox/ipam/forms/filtersets.py:248 netbox/ipam/forms/filtersets.py:293 -#: netbox/ipam/models/ip.py:272 netbox/ipam/models/ip.py:539 +#: netbox/ipam/forms/bulk_edit.py:257 netbox/ipam/forms/bulk_edit.py:302 +#: netbox/ipam/forms/filtersets.py:251 netbox/ipam/forms/filtersets.py:296 +#: netbox/ipam/models/ip.py:256 netbox/ipam/models/ip.py:525 msgid "Treat as fully utilized" msgstr "Считать полностью использованным" -#: netbox/ipam/forms/bulk_edit.py:287 netbox/ipam/forms/filtersets.py:171 +#: netbox/ipam/forms/bulk_edit.py:271 netbox/ipam/forms/filtersets.py:173 +#: netbox/ipam/forms/model_forms.py:232 msgid "VLAN Assignment" msgstr "Назначение VLAN" -#: netbox/ipam/forms/bulk_edit.py:366 netbox/ipam/models/ip.py:772 +#: netbox/ipam/forms/bulk_edit.py:350 netbox/ipam/models/ip.py:772 msgid "DNS name" msgstr "DNS-имя" -#: netbox/ipam/forms/bulk_edit.py:387 netbox/ipam/forms/bulk_edit.py:534 -#: netbox/ipam/forms/bulk_import.py:418 netbox/ipam/forms/bulk_import.py:493 -#: netbox/ipam/forms/bulk_import.py:519 netbox/ipam/forms/filtersets.py:390 -#: netbox/ipam/forms/filtersets.py:530 netbox/templates/ipam/fhrpgroup.html:22 +#: netbox/ipam/forms/bulk_edit.py:371 netbox/ipam/forms/bulk_edit.py:562 +#: netbox/ipam/forms/bulk_import.py:417 netbox/ipam/forms/bulk_import.py:528 +#: netbox/ipam/forms/bulk_import.py:554 netbox/ipam/forms/filtersets.py:393 +#: netbox/ipam/forms/filtersets.py:582 netbox/templates/ipam/fhrpgroup.html:22 #: netbox/templates/ipam/inc/panels/fhrp_groups.html:24 #: netbox/templates/ipam/service.html:32 #: netbox/templates/ipam/servicetemplate.html:19 msgid "Protocol" msgstr "Протокол" -#: netbox/ipam/forms/bulk_edit.py:394 netbox/ipam/forms/filtersets.py:397 +#: netbox/ipam/forms/bulk_edit.py:378 netbox/ipam/forms/filtersets.py:400 #: netbox/ipam/tables/fhrp.py:22 netbox/templates/ipam/fhrpgroup.html:26 msgid "Group ID" msgstr "Идентификатор группы" -#: netbox/ipam/forms/bulk_edit.py:399 netbox/ipam/forms/filtersets.py:402 -#: netbox/wireless/forms/bulk_edit.py:68 -#: netbox/wireless/forms/bulk_edit.py:115 -#: netbox/wireless/forms/bulk_import.py:62 -#: netbox/wireless/forms/bulk_import.py:65 -#: netbox/wireless/forms/bulk_import.py:104 -#: netbox/wireless/forms/bulk_import.py:107 -#: netbox/wireless/forms/filtersets.py:54 -#: netbox/wireless/forms/filtersets.py:88 +#: netbox/ipam/forms/bulk_edit.py:383 netbox/ipam/forms/filtersets.py:405 +#: netbox/wireless/forms/bulk_edit.py:70 +#: netbox/wireless/forms/bulk_edit.py:118 +#: netbox/wireless/forms/bulk_import.py:64 +#: netbox/wireless/forms/bulk_import.py:67 +#: netbox/wireless/forms/bulk_import.py:109 +#: netbox/wireless/forms/bulk_import.py:112 +#: netbox/wireless/forms/filtersets.py:57 +#: netbox/wireless/forms/filtersets.py:116 msgid "Authentication type" msgstr "Тип аутентификации" -#: netbox/ipam/forms/bulk_edit.py:404 netbox/ipam/forms/filtersets.py:406 +#: netbox/ipam/forms/bulk_edit.py:388 netbox/ipam/forms/filtersets.py:409 msgid "Authentication key" msgstr "Ключ аутентификации" -#: netbox/ipam/forms/bulk_edit.py:421 netbox/ipam/forms/filtersets.py:383 -#: netbox/ipam/forms/model_forms.py:507 netbox/netbox/navigation/menu.py:386 +#: netbox/ipam/forms/bulk_edit.py:405 netbox/ipam/forms/filtersets.py:386 +#: netbox/ipam/forms/model_forms.py:517 netbox/netbox/navigation/menu.py:407 #: netbox/templates/ipam/fhrpgroup.html:49 #: netbox/templates/wireless/inc/authentication_attrs.html:5 -#: netbox/wireless/forms/bulk_edit.py:91 -#: netbox/wireless/forms/bulk_edit.py:149 -#: netbox/wireless/forms/filtersets.py:36 -#: netbox/wireless/forms/filtersets.py:76 -#: netbox/wireless/forms/model_forms.py:55 -#: netbox/wireless/forms/model_forms.py:171 +#: netbox/wireless/forms/bulk_edit.py:94 +#: netbox/wireless/forms/bulk_edit.py:152 +#: netbox/wireless/forms/filtersets.py:39 +#: netbox/wireless/forms/filtersets.py:104 +#: netbox/wireless/forms/model_forms.py:58 +#: netbox/wireless/forms/model_forms.py:174 msgid "Authentication" msgstr "Аутентификация" -#: netbox/ipam/forms/bulk_edit.py:436 netbox/ipam/forms/model_forms.py:608 -msgid "Scope type" -msgstr "Тип прицела" - -#: netbox/ipam/forms/bulk_edit.py:439 netbox/ipam/forms/bulk_edit.py:453 -#: netbox/ipam/forms/model_forms.py:611 netbox/ipam/forms/model_forms.py:621 -#: netbox/ipam/tables/vlans.py:71 netbox/templates/ipam/vlangroup.html:38 -msgid "Scope" -msgstr "Область применения" - -#: netbox/ipam/forms/bulk_edit.py:446 netbox/ipam/models/vlans.py:60 +#: netbox/ipam/forms/bulk_edit.py:430 netbox/ipam/models/vlans.py:62 msgid "VLAN ID ranges" msgstr "Диапазоны идентификаторов VLAN" -#: netbox/ipam/forms/bulk_edit.py:525 +#: netbox/ipam/forms/bulk_edit.py:505 netbox/ipam/forms/bulk_import.py:485 +#: netbox/ipam/forms/filtersets.py:557 netbox/ipam/models/vlans.py:232 +#: netbox/ipam/tables/vlans.py:103 +msgid "Q-in-Q role" +msgstr "Роль Q-in-Q" + +#: netbox/ipam/forms/bulk_edit.py:522 +msgid "Q-in-Q" +msgstr "Q-in-Q" + +#: netbox/ipam/forms/bulk_edit.py:523 msgid "Site & Group" msgstr "Сайт и группа" -#: netbox/ipam/forms/bulk_edit.py:539 netbox/ipam/forms/model_forms.py:692 -#: netbox/ipam/forms/model_forms.py:724 netbox/ipam/tables/services.py:19 +#: netbox/ipam/forms/bulk_edit.py:546 netbox/ipam/forms/bulk_import.py:515 +#: netbox/ipam/forms/model_forms.py:724 netbox/ipam/tables/vlans.py:256 +#: netbox/templates/ipam/vlantranslationrule.html:14 +#: netbox/vpn/forms/model_forms.py:322 netbox/vpn/forms/model_forms.py:359 +msgid "Policy" +msgstr "Политика" + +#: netbox/ipam/forms/bulk_edit.py:567 netbox/ipam/forms/model_forms.py:742 +#: netbox/ipam/forms/model_forms.py:774 netbox/ipam/tables/services.py:19 #: netbox/ipam/tables/services.py:49 netbox/templates/ipam/service.html:36 #: netbox/templates/ipam/servicetemplate.html:23 msgid "Ports" msgstr "Порты" -#: netbox/ipam/forms/bulk_import.py:48 +#: netbox/ipam/forms/bulk_import.py:51 msgid "Import route targets" msgstr "Импортируйте цели маршрута" -#: netbox/ipam/forms/bulk_import.py:54 +#: netbox/ipam/forms/bulk_import.py:57 msgid "Export route targets" msgstr "Экспортные цели маршрута" -#: netbox/ipam/forms/bulk_import.py:92 netbox/ipam/forms/bulk_import.py:112 -#: netbox/ipam/forms/bulk_import.py:132 +#: netbox/ipam/forms/bulk_import.py:95 netbox/ipam/forms/bulk_import.py:115 +#: netbox/ipam/forms/bulk_import.py:135 msgid "Assigned RIR" msgstr "Назначенный RIR" -#: netbox/ipam/forms/bulk_import.py:182 +#: netbox/ipam/forms/bulk_import.py:178 msgid "VLAN's group (if any)" msgstr "Группа VLAN (если есть)" -#: netbox/ipam/forms/bulk_import.py:308 -msgid "Parent device of assigned interface (if any)" -msgstr "Родительское устройство назначенного интерфейса (если есть)" - -#: netbox/ipam/forms/bulk_import.py:311 netbox/ipam/forms/bulk_import.py:512 -#: netbox/ipam/forms/model_forms.py:718 -#: netbox/virtualization/filtersets.py:288 -#: netbox/virtualization/filtersets.py:327 -#: netbox/virtualization/forms/bulk_edit.py:200 -#: netbox/virtualization/forms/bulk_edit.py:326 -#: netbox/virtualization/forms/bulk_import.py:146 -#: netbox/virtualization/forms/bulk_import.py:207 -#: netbox/virtualization/forms/filtersets.py:212 -#: netbox/virtualization/forms/filtersets.py:248 -#: netbox/virtualization/forms/model_forms.py:288 -#: netbox/vpn/forms/bulk_import.py:93 netbox/vpn/forms/bulk_import.py:290 -msgid "Virtual machine" -msgstr "Виртуальная машина" - -#: netbox/ipam/forms/bulk_import.py:315 -msgid "Parent VM of assigned interface (if any)" -msgstr "Родительская виртуальная машина назначенного интерфейса (если есть)" +#: netbox/ipam/forms/bulk_import.py:207 +#: netbox/virtualization/forms/bulk_import.py:80 +#: netbox/wireless/forms/bulk_import.py:83 +msgid "Scope ID" +msgstr "Идентификатор области" #: netbox/ipam/forms/bulk_import.py:325 -msgid "Is primary" -msgstr "Является основным" - -#: netbox/ipam/forms/bulk_import.py:326 msgid "Make this the primary IP for the assigned device" msgstr "Сделайте этот IP-адрес основным для назначенного устройства" -#: netbox/ipam/forms/bulk_import.py:330 +#: netbox/ipam/forms/bulk_import.py:329 msgid "Is out-of-band" msgstr "Внеполосный IP-адрес" -#: netbox/ipam/forms/bulk_import.py:331 +#: netbox/ipam/forms/bulk_import.py:330 msgid "Designate this as the out-of-band IP address for the assigned device" msgstr "Назначьте это как внеполосный IP-адрес для указанного устройства" -#: netbox/ipam/forms/bulk_import.py:371 +#: netbox/ipam/forms/bulk_import.py:370 msgid "No device or virtual machine specified; cannot set as primary IP" msgstr "" "Не указано устройство или виртуальная машина; невозможно установить в " "качестве основного IP-адреса" -#: netbox/ipam/forms/bulk_import.py:375 +#: netbox/ipam/forms/bulk_import.py:374 msgid "No device specified; cannot set as out-of-band IP" msgstr "Устройство не указано; невозможно установить как внеполосный IP-адрес" -#: netbox/ipam/forms/bulk_import.py:379 +#: netbox/ipam/forms/bulk_import.py:378 msgid "Cannot set out-of-band IP for virtual machines" msgstr "Невозможно установить внеполосный IP-адрес для виртуальных машин" -#: netbox/ipam/forms/bulk_import.py:383 +#: netbox/ipam/forms/bulk_import.py:382 msgid "No interface specified; cannot set as primary IP" msgstr "" "Интерфейс не указан; невозможно установить в качестве основного IP-адреса" -#: netbox/ipam/forms/bulk_import.py:387 +#: netbox/ipam/forms/bulk_import.py:386 msgid "No interface specified; cannot set as out-of-band IP" msgstr "Интерфейс не указан; невозможно установить как внеполосный IP-адрес" -#: netbox/ipam/forms/bulk_import.py:422 +#: netbox/ipam/forms/bulk_import.py:421 msgid "Auth type" msgstr "Тип авторизации" -#: netbox/ipam/forms/bulk_import.py:437 -msgid "Scope type (app & model)" -msgstr "Тип прицела (приложение и модель)" - -#: netbox/ipam/forms/bulk_import.py:464 +#: netbox/ipam/forms/bulk_import.py:463 msgid "Assigned VLAN group" msgstr "Назначенная VLAN группа" -#: netbox/ipam/forms/bulk_import.py:495 netbox/ipam/forms/bulk_import.py:521 +#: netbox/ipam/forms/bulk_import.py:495 +msgid "Service VLAN (for Q-in-Q/802.1ad customer VLANs)" +msgstr "Сервисная VLAN (для клиентских виртуальных сетей Q-in-Q/802.1ad)" + +#: netbox/ipam/forms/bulk_import.py:518 netbox/ipam/models/vlans.py:343 +msgid "VLAN translation policy" +msgstr "Политика трансляции VLAN" + +#: netbox/ipam/forms/bulk_import.py:530 netbox/ipam/forms/bulk_import.py:556 msgid "IP protocol" msgstr "протокол IP" -#: netbox/ipam/forms/bulk_import.py:509 +#: netbox/ipam/forms/bulk_import.py:544 msgid "Required if not assigned to a VM" msgstr "Требуется, если не назначено виртуальной машине" -#: netbox/ipam/forms/bulk_import.py:516 +#: netbox/ipam/forms/bulk_import.py:551 msgid "Required if not assigned to a device" msgstr "Требуется, если не назначено устройству" -#: netbox/ipam/forms/bulk_import.py:541 +#: netbox/ipam/forms/bulk_import.py:576 #, python-brace-format msgid "{ip} is not assigned to this device/VM." msgstr "{ip} не назначено этому устройству/виртуальной машине." -#: netbox/ipam/forms/filtersets.py:47 netbox/ipam/forms/model_forms.py:63 -#: netbox/netbox/navigation/menu.py:189 netbox/vpn/forms/model_forms.py:410 +#: netbox/ipam/forms/filtersets.py:49 netbox/ipam/forms/model_forms.py:66 +#: netbox/netbox/navigation/menu.py:195 netbox/vpn/forms/model_forms.py:413 msgid "Route Targets" msgstr "Цели маршрута" -#: netbox/ipam/forms/filtersets.py:53 netbox/ipam/forms/model_forms.py:50 -#: netbox/vpn/forms/filtersets.py:224 netbox/vpn/forms/model_forms.py:397 +#: netbox/ipam/forms/filtersets.py:55 netbox/ipam/forms/model_forms.py:53 +#: netbox/vpn/forms/filtersets.py:224 netbox/vpn/forms/model_forms.py:400 msgid "Import targets" msgstr "Цели импорта" -#: netbox/ipam/forms/filtersets.py:58 netbox/ipam/forms/model_forms.py:55 -#: netbox/vpn/forms/filtersets.py:229 netbox/vpn/forms/model_forms.py:402 +#: netbox/ipam/forms/filtersets.py:60 netbox/ipam/forms/model_forms.py:58 +#: netbox/vpn/forms/filtersets.py:229 netbox/vpn/forms/model_forms.py:405 msgid "Export targets" msgstr "Экспортные цели" -#: netbox/ipam/forms/filtersets.py:73 +#: netbox/ipam/forms/filtersets.py:75 msgid "Imported by VRF" msgstr "Импортировано компанией VRF" -#: netbox/ipam/forms/filtersets.py:78 +#: netbox/ipam/forms/filtersets.py:80 msgid "Exported by VRF" msgstr "Экспортируется компанией VRF" -#: netbox/ipam/forms/filtersets.py:87 netbox/ipam/tables/ip.py:89 +#: netbox/ipam/forms/filtersets.py:89 netbox/ipam/tables/ip.py:35 #: netbox/templates/ipam/rir.html:30 msgid "Private" msgstr "Частное" -#: netbox/ipam/forms/filtersets.py:105 netbox/ipam/forms/filtersets.py:191 -#: netbox/ipam/forms/filtersets.py:272 netbox/ipam/forms/filtersets.py:326 +#: netbox/ipam/forms/filtersets.py:107 netbox/ipam/forms/filtersets.py:193 +#: netbox/ipam/forms/filtersets.py:275 netbox/ipam/forms/filtersets.py:329 msgid "Address family" msgstr "Семейство адресов" -#: netbox/ipam/forms/filtersets.py:119 netbox/templates/ipam/asnrange.html:25 +#: netbox/ipam/forms/filtersets.py:121 netbox/templates/ipam/asnrange.html:25 msgid "Range" msgstr "Диапозон" -#: netbox/ipam/forms/filtersets.py:128 +#: netbox/ipam/forms/filtersets.py:130 msgid "Start" msgstr "Начало" -#: netbox/ipam/forms/filtersets.py:132 +#: netbox/ipam/forms/filtersets.py:134 msgid "End" msgstr "Конец" -#: netbox/ipam/forms/filtersets.py:186 +#: netbox/ipam/forms/filtersets.py:188 msgid "Search within" msgstr "Поиск внутри" -#: netbox/ipam/forms/filtersets.py:207 netbox/ipam/forms/filtersets.py:342 +#: netbox/ipam/forms/filtersets.py:209 netbox/ipam/forms/filtersets.py:345 msgid "Present in VRF" msgstr "Присутствует в VRF" -#: netbox/ipam/forms/filtersets.py:311 +#: netbox/ipam/forms/filtersets.py:314 msgid "Device/VM" msgstr "Устройство/виртуальная машина" -#: netbox/ipam/forms/filtersets.py:321 +#: netbox/ipam/forms/filtersets.py:324 msgid "Parent Prefix" msgstr "Родительский префикс" -#: netbox/ipam/forms/filtersets.py:347 -msgid "Assigned Device" -msgstr "Назначенное устройство" - -#: netbox/ipam/forms/filtersets.py:352 -msgid "Assigned VM" -msgstr "Назначенная виртуальная машина" - -#: netbox/ipam/forms/filtersets.py:366 +#: netbox/ipam/forms/filtersets.py:369 msgid "Assigned to an interface" msgstr "Назначено интерфейсу" -#: netbox/ipam/forms/filtersets.py:373 netbox/templates/ipam/ipaddress.html:51 +#: netbox/ipam/forms/filtersets.py:376 netbox/templates/ipam/ipaddress.html:51 msgid "DNS Name" msgstr "DNS-имя" -#: netbox/ipam/forms/filtersets.py:416 netbox/ipam/models/vlans.py:251 -#: netbox/ipam/tables/ip.py:176 netbox/ipam/tables/vlans.py:82 -#: netbox/ipam/views.py:971 netbox/netbox/navigation/menu.py:193 -#: netbox/netbox/navigation/menu.py:195 +#: netbox/ipam/forms/filtersets.py:419 netbox/ipam/models/vlans.py:273 +#: netbox/ipam/tables/ip.py:122 netbox/ipam/tables/vlans.py:51 +#: netbox/ipam/views.py:1036 netbox/netbox/navigation/menu.py:199 +#: netbox/netbox/navigation/menu.py:201 msgid "VLANs" msgstr "VLAN-ы" -#: netbox/ipam/forms/filtersets.py:457 +#: netbox/ipam/forms/filtersets.py:460 msgid "Contains VLAN ID" msgstr "Содержит идентификатор VLAN" -#: netbox/ipam/forms/filtersets.py:513 netbox/ipam/models/vlans.py:192 +#: netbox/ipam/forms/filtersets.py:494 netbox/ipam/models/vlans.py:363 +msgid "Local VLAN ID" +msgstr "Идентификатор локальной сети VLAN" + +#: netbox/ipam/forms/filtersets.py:499 netbox/ipam/models/vlans.py:371 +msgid "Remote VLAN ID" +msgstr "Идентификатор удаленной сети VLAN" + +#: netbox/ipam/forms/filtersets.py:509 +msgid "Q-in-Q/802.1ad" +msgstr "Q-in-Q/802.1ad" + +#: netbox/ipam/forms/filtersets.py:554 netbox/ipam/models/vlans.py:191 #: netbox/templates/ipam/vlan.html:31 msgid "VLAN ID" msgstr "VLAN ID" -#: netbox/ipam/forms/filtersets.py:556 netbox/ipam/forms/model_forms.py:324 -#: netbox/ipam/forms/model_forms.py:746 netbox/ipam/forms/model_forms.py:772 -#: netbox/ipam/tables/vlans.py:195 -#: netbox/templates/virtualization/virtualdisk.html:21 -#: netbox/templates/virtualization/virtualmachine.html:12 -#: netbox/templates/virtualization/vminterface.html:21 -#: netbox/templates/vpn/tunneltermination.html:25 -#: netbox/virtualization/forms/filtersets.py:197 -#: netbox/virtualization/forms/filtersets.py:242 -#: netbox/virtualization/forms/model_forms.py:220 -#: netbox/virtualization/tables/virtualmachines.py:135 -#: netbox/virtualization/tables/virtualmachines.py:190 -#: netbox/vpn/choices.py:53 netbox/vpn/forms/filtersets.py:293 -#: netbox/vpn/forms/model_forms.py:160 netbox/vpn/forms/model_forms.py:171 -#: netbox/vpn/forms/model_forms.py:273 netbox/vpn/forms/model_forms.py:454 -msgid "Virtual Machine" -msgstr "Виртуальная машина" - -#: netbox/ipam/forms/model_forms.py:80 +#: netbox/ipam/forms/model_forms.py:83 #: netbox/templates/ipam/routetarget.html:10 msgid "Route Target" msgstr "Цель маршрута" -#: netbox/ipam/forms/model_forms.py:114 netbox/ipam/tables/ip.py:117 +#: netbox/ipam/forms/model_forms.py:118 netbox/ipam/tables/ip.py:63 #: netbox/templates/ipam/aggregate.html:11 #: netbox/templates/ipam/prefix.html:38 msgid "Aggregate" msgstr "агрегат" -#: netbox/ipam/forms/model_forms.py:135 netbox/templates/ipam/asnrange.html:12 +#: netbox/ipam/forms/model_forms.py:140 netbox/templates/ipam/asnrange.html:12 msgid "ASN Range" msgstr "Диапазон ASN" -#: netbox/ipam/forms/model_forms.py:231 -msgid "Site/VLAN Assignment" -msgstr "" - -#: netbox/ipam/forms/model_forms.py:259 netbox/templates/ipam/iprange.html:10 +#: netbox/ipam/forms/model_forms.py:269 netbox/templates/ipam/iprange.html:10 msgid "IP Range" msgstr "Диапазон IP-адресов" -#: netbox/ipam/forms/model_forms.py:295 netbox/ipam/forms/model_forms.py:325 -#: netbox/ipam/forms/model_forms.py:506 +#: netbox/ipam/forms/model_forms.py:305 netbox/ipam/forms/model_forms.py:335 +#: netbox/ipam/forms/model_forms.py:516 #: netbox/templates/ipam/fhrpgroup.html:19 msgid "FHRP Group" msgstr "Группа компаний FHRP" -#: netbox/ipam/forms/model_forms.py:310 +#: netbox/ipam/forms/model_forms.py:320 msgid "Make this the primary IP for the device/VM" msgstr "Сделайте этот IP-адрес основным для устройства/виртуальной машины" -#: netbox/ipam/forms/model_forms.py:314 +#: netbox/ipam/forms/model_forms.py:324 msgid "Make this the out-of-band IP for the device" msgstr "Назначить внеполосным IP-адресом устройства" -#: netbox/ipam/forms/model_forms.py:329 +#: netbox/ipam/forms/model_forms.py:339 msgid "NAT IP (Inside)" msgstr "IP-адрес NAT (внутренний)" -#: netbox/ipam/forms/model_forms.py:391 +#: netbox/ipam/forms/model_forms.py:401 msgid "An IP address can only be assigned to a single object." msgstr "IP-адрес можно присвоить только одному объекту." -#: netbox/ipam/forms/model_forms.py:398 +#: netbox/ipam/forms/model_forms.py:408 msgid "Cannot reassign primary IP address for the parent device/VM" msgstr "" "Невозможно переназначить основной IP-адрес родительского " "устройства/виртуальной машины" -#: netbox/ipam/forms/model_forms.py:402 +#: netbox/ipam/forms/model_forms.py:412 msgid "Cannot reassign out-of-Band IP address for the parent device" msgstr "" "Невозможно переназначить внеполосный IP-адрес родительскому устройству" -#: netbox/ipam/forms/model_forms.py:412 +#: netbox/ipam/forms/model_forms.py:422 msgid "" "Only IP addresses assigned to an interface can be designated as primary IPs." msgstr "" "В качестве основных IP-адресов можно назначить только IP-адреса, назначенные" " интерфейсу." -#: netbox/ipam/forms/model_forms.py:420 +#: netbox/ipam/forms/model_forms.py:430 msgid "" "Only IP addresses assigned to a device interface can be designated as the " "out-of-band IP for a device." @@ -9915,24 +10413,29 @@ msgstr "" "В качестве внеполосного IP-адреса устройства можно указать только IP-адреса," " назначенные интерфейсу устройства." -#: netbox/ipam/forms/model_forms.py:508 +#: netbox/ipam/forms/model_forms.py:518 msgid "Virtual IP Address" msgstr "Виртуальный IP-адрес" -#: netbox/ipam/forms/model_forms.py:593 +#: netbox/ipam/forms/model_forms.py:603 msgid "Assignment already exists" msgstr "Задание уже существует" -#: netbox/ipam/forms/model_forms.py:602 +#: netbox/ipam/forms/model_forms.py:612 #: netbox/templates/ipam/vlangroup.html:42 msgid "VLAN IDs" msgstr "Идентификаторы VLAN" -#: netbox/ipam/forms/model_forms.py:620 +#: netbox/ipam/forms/model_forms.py:630 msgid "Child VLANs" msgstr "Дочерние VLAN" -#: netbox/ipam/forms/model_forms.py:697 netbox/ipam/forms/model_forms.py:729 +#: netbox/ipam/forms/model_forms.py:730 +#: netbox/templates/ipam/vlantranslationrule.html:11 +msgid "VLAN Translation Rule" +msgstr "Правило трансляции VLAN" + +#: netbox/ipam/forms/model_forms.py:747 netbox/ipam/forms/model_forms.py:779 msgid "" "Comma-separated list of one or more port numbers. A range may be specified " "using a hyphen." @@ -9940,33 +10443,28 @@ msgstr "" "Список одного или нескольких номеров портов, разделенных запятыми. Диапазон " "можно указать с помощью дефиса." -#: netbox/ipam/forms/model_forms.py:702 +#: netbox/ipam/forms/model_forms.py:752 #: netbox/templates/ipam/servicetemplate.html:12 msgid "Service Template" msgstr "Шаблон Службы" -#: netbox/ipam/forms/model_forms.py:749 +#: netbox/ipam/forms/model_forms.py:799 msgid "Port(s)" msgstr "Порт(ы)" -#: netbox/ipam/forms/model_forms.py:750 netbox/ipam/forms/model_forms.py:778 -#: netbox/templates/ipam/service.html:21 -msgid "Service" -msgstr "Служба" - -#: netbox/ipam/forms/model_forms.py:763 +#: netbox/ipam/forms/model_forms.py:813 msgid "Service template" msgstr "Шаблон службы" -#: netbox/ipam/forms/model_forms.py:775 +#: netbox/ipam/forms/model_forms.py:825 msgid "From Template" msgstr "Из шаблона" -#: netbox/ipam/forms/model_forms.py:776 +#: netbox/ipam/forms/model_forms.py:826 msgid "Custom" msgstr "Настраиваемый" -#: netbox/ipam/forms/model_forms.py:806 +#: netbox/ipam/forms/model_forms.py:856 msgid "" "Must specify name, protocol, and port(s) if not using a service template." msgstr "" @@ -9985,29 +10483,29 @@ msgstr "Диапазон ASN" msgid "ASN ranges" msgstr "Диапазоны ASN" -#: netbox/ipam/models/asns.py:72 +#: netbox/ipam/models/asns.py:69 #, python-brace-format msgid "Starting ASN ({start}) must be lower than ending ASN ({end})." msgstr "Запуск ASN ({start}) должно быть меньше, чем конечный ASN ({end})." -#: netbox/ipam/models/asns.py:104 +#: netbox/ipam/models/asns.py:101 msgid "Regional Internet Registry responsible for this AS number space" msgstr "" "Региональный интернет-реестр, отвечающий за это номерное пространство AS" -#: netbox/ipam/models/asns.py:109 +#: netbox/ipam/models/asns.py:106 msgid "16- or 32-bit autonomous system number" msgstr "16- или 32-разрядный номер автономной системы" -#: netbox/ipam/models/fhrp.py:22 +#: netbox/ipam/models/fhrp.py:21 msgid "group ID" msgstr "идентификатор группы" -#: netbox/ipam/models/fhrp.py:30 netbox/ipam/models/services.py:22 +#: netbox/ipam/models/fhrp.py:29 netbox/ipam/models/services.py:21 msgid "protocol" msgstr "протокол" -#: netbox/ipam/models/fhrp.py:38 netbox/wireless/models.py:28 +#: netbox/ipam/models/fhrp.py:38 netbox/wireless/models.py:29 msgid "authentication type" msgstr "тип аутентификации" @@ -10023,11 +10521,11 @@ msgstr "Группа FHRP" msgid "FHRP groups" msgstr "Группы FHRP" -#: netbox/ipam/models/fhrp.py:113 +#: netbox/ipam/models/fhrp.py:110 msgid "FHRP group assignment" msgstr "Групповое назначение FHRP" -#: netbox/ipam/models/fhrp.py:114 +#: netbox/ipam/models/fhrp.py:111 msgid "FHRP group assignments" msgstr "Групповые задания FHRP" @@ -10039,35 +10537,35 @@ msgstr "частного" msgid "IP space managed by this RIR is considered private" msgstr "IP-пространство, управляемое этим RIR, считается частным" -#: netbox/ipam/models/ip.py:72 netbox/netbox/navigation/menu.py:182 +#: netbox/ipam/models/ip.py:72 netbox/netbox/navigation/menu.py:188 msgid "RIRs" msgstr "RIR's" -#: netbox/ipam/models/ip.py:84 +#: netbox/ipam/models/ip.py:81 msgid "IPv4 or IPv6 network" msgstr "Сеть IPv4 или IPv6" -#: netbox/ipam/models/ip.py:91 +#: netbox/ipam/models/ip.py:88 msgid "Regional Internet Registry responsible for this IP space" msgstr "Региональный реестр Интернета, отвечающий за это IP-пространство" -#: netbox/ipam/models/ip.py:101 +#: netbox/ipam/models/ip.py:98 msgid "date added" msgstr "дата добавления" -#: netbox/ipam/models/ip.py:115 +#: netbox/ipam/models/ip.py:112 msgid "aggregate" msgstr "совокупный" -#: netbox/ipam/models/ip.py:116 +#: netbox/ipam/models/ip.py:113 msgid "aggregates" msgstr "сводные показатели" -#: netbox/ipam/models/ip.py:132 +#: netbox/ipam/models/ip.py:126 msgid "Cannot create aggregate with /0 mask." msgstr "Невозможно создать агрегат с маской /0." -#: netbox/ipam/models/ip.py:144 +#: netbox/ipam/models/ip.py:138 #, python-brace-format msgid "" "Aggregates cannot overlap. {prefix} is already covered by an existing " @@ -10076,7 +10574,7 @@ msgstr "" "Агрегаты не могут перекрываться. {prefix} уже покрывается существующим " "агрегатом ({aggregate})." -#: netbox/ipam/models/ip.py:158 +#: netbox/ipam/models/ip.py:152 #, python-brace-format msgid "" "Prefixes cannot overlap aggregates. {prefix} covers an existing aggregate " @@ -10085,126 +10583,121 @@ msgstr "" "Префиксы не могут перекрывать агрегаты. {prefix} охватывает существующий " "агрегат ({aggregate})." -#: netbox/ipam/models/ip.py:200 netbox/ipam/models/ip.py:737 -#: netbox/vpn/models/tunnels.py:114 -msgid "role" -msgstr "роль" - -#: netbox/ipam/models/ip.py:201 +#: netbox/ipam/models/ip.py:195 msgid "roles" msgstr "ролей" -#: netbox/ipam/models/ip.py:217 netbox/ipam/models/ip.py:293 +#: netbox/ipam/models/ip.py:208 netbox/ipam/models/ip.py:277 msgid "prefix" msgstr "префикс" -#: netbox/ipam/models/ip.py:218 +#: netbox/ipam/models/ip.py:209 msgid "IPv4 or IPv6 network with mask" msgstr "Сеть IPv4 или IPv6 с маской" -#: netbox/ipam/models/ip.py:254 +#: netbox/ipam/models/ip.py:238 msgid "Operational status of this prefix" msgstr "Рабочий статус этого префикса" -#: netbox/ipam/models/ip.py:262 +#: netbox/ipam/models/ip.py:246 msgid "The primary function of this prefix" msgstr "Основная функция этого префикса" -#: netbox/ipam/models/ip.py:265 +#: netbox/ipam/models/ip.py:249 msgid "is a pool" msgstr "это пул" -#: netbox/ipam/models/ip.py:267 +#: netbox/ipam/models/ip.py:251 msgid "All IP addresses within this prefix are considered usable" msgstr "Все IP-адреса в этом префиксе считаются пригодными для использования" -#: netbox/ipam/models/ip.py:270 netbox/ipam/models/ip.py:537 +#: netbox/ipam/models/ip.py:254 netbox/ipam/models/ip.py:523 msgid "mark utilized" msgstr "использованная марка" -#: netbox/ipam/models/ip.py:294 +#: netbox/ipam/models/ip.py:278 msgid "prefixes" msgstr "префиксы" -#: netbox/ipam/models/ip.py:317 +#: netbox/ipam/models/ip.py:298 msgid "Cannot create prefix with /0 mask." msgstr "Невозможно создать префикс с маской /0." -#: netbox/ipam/models/ip.py:324 netbox/ipam/models/ip.py:874 +#: netbox/ipam/models/ip.py:305 netbox/ipam/models/ip.py:871 #, python-brace-format msgid "VRF {vrf}" msgstr "VRF {vrf}" -#: netbox/ipam/models/ip.py:324 netbox/ipam/models/ip.py:874 +#: netbox/ipam/models/ip.py:305 netbox/ipam/models/ip.py:871 msgid "global table" msgstr "глобальная таблица" -#: netbox/ipam/models/ip.py:326 +#: netbox/ipam/models/ip.py:307 #, python-brace-format msgid "Duplicate prefix found in {table}: {prefix}" msgstr "Дубликат префикса обнаружен в {table}: {prefix}" -#: netbox/ipam/models/ip.py:495 +#: netbox/ipam/models/ip.py:481 msgid "start address" msgstr "начальный адрес" -#: netbox/ipam/models/ip.py:496 netbox/ipam/models/ip.py:500 -#: netbox/ipam/models/ip.py:712 +#: netbox/ipam/models/ip.py:482 netbox/ipam/models/ip.py:486 +#: netbox/ipam/models/ip.py:711 msgid "IPv4 or IPv6 address (with mask)" msgstr "Адрес IPv4 или IPv6 (с маской)" -#: netbox/ipam/models/ip.py:499 +#: netbox/ipam/models/ip.py:485 msgid "end address" msgstr "конечный адрес" -#: netbox/ipam/models/ip.py:526 +#: netbox/ipam/models/ip.py:512 msgid "Operational status of this range" msgstr "Эксплуатационное состояние этой линейки" -#: netbox/ipam/models/ip.py:534 +#: netbox/ipam/models/ip.py:520 msgid "The primary function of this range" msgstr "Основная функция этого диапазона" -#: netbox/ipam/models/ip.py:548 +#: netbox/ipam/models/ip.py:534 msgid "IP range" msgstr "Диапазон IP-адресов" -#: netbox/ipam/models/ip.py:549 +#: netbox/ipam/models/ip.py:535 msgid "IP ranges" msgstr "Диапазоны IP-адресов" -#: netbox/ipam/models/ip.py:565 +#: netbox/ipam/models/ip.py:548 msgid "Starting and ending IP address versions must match" msgstr "Начальная и конечная версии IP-адресов должны совпадать" -#: netbox/ipam/models/ip.py:571 +#: netbox/ipam/models/ip.py:554 msgid "Starting and ending IP address masks must match" msgstr "Маски начального и конечного IP-адресов должны совпадать" -#: netbox/ipam/models/ip.py:578 +#: netbox/ipam/models/ip.py:561 #, python-brace-format msgid "" "Ending address must be greater than the starting address ({start_address})" msgstr "Конечный адрес должен быть больше начального адреса ({start_address})" -#: netbox/ipam/models/ip.py:590 +#: netbox/ipam/models/ip.py:589 #, python-brace-format msgid "Defined addresses overlap with range {overlapping_range} in VRF {vrf}" msgstr "" "Определенные адреса пересекаются с диапазоном {overlapping_range} в формате " "VRF {vrf}" -#: netbox/ipam/models/ip.py:599 +#: netbox/ipam/models/ip.py:598 #, python-brace-format msgid "Defined range exceeds maximum supported size ({max_size})" msgstr "" "Заданный диапазон превышает максимальный поддерживаемый размер ({max_size})" -#: netbox/ipam/models/ip.py:711 netbox/tenancy/models/contacts.py:82 +#: netbox/ipam/models/ip.py:710 netbox/tenancy/models/contacts.py:77 msgid "address" msgstr "адрес" -#: netbox/ipam/models/ip.py:734 +#: netbox/ipam/models/ip.py:733 msgid "The operational status of this IP" msgstr "Рабочий статус этого IP-адреса" @@ -10224,33 +10717,33 @@ msgstr "IP-адрес, для которого этот адрес являет msgid "Hostname or FQDN (not case-sensitive)" msgstr "Имя хоста или полное доменное имя (регистр не учитывается)" -#: netbox/ipam/models/ip.py:789 netbox/ipam/models/services.py:94 +#: netbox/ipam/models/ip.py:789 netbox/ipam/models/services.py:90 msgid "IP addresses" msgstr "IP-адреса" -#: netbox/ipam/models/ip.py:845 +#: netbox/ipam/models/ip.py:842 msgid "Cannot create IP address with /0 mask." msgstr "Невозможно создать IP-адрес с маской /0." -#: netbox/ipam/models/ip.py:851 +#: netbox/ipam/models/ip.py:848 #, python-brace-format msgid "{ip} is a network ID, which may not be assigned to an interface." msgstr "" "{ip} это идентификатор сети, который не может быть присвоен интерфейсу." -#: netbox/ipam/models/ip.py:862 +#: netbox/ipam/models/ip.py:859 #, python-brace-format msgid "" "{ip} is a broadcast address, which may not be assigned to an interface." msgstr "" "{ip} это широковещательный адрес, который может не быть присвоен интерфейсу." -#: netbox/ipam/models/ip.py:876 +#: netbox/ipam/models/ip.py:873 #, python-brace-format msgid "Duplicate IP address found in {table}: {ipaddress}" msgstr "Дубликат IP-адреса обнаружен в {table}: {ipaddress}" -#: netbox/ipam/models/ip.py:897 +#: netbox/ipam/models/ip.py:896 msgid "" "Cannot reassign IP address while it is designated as the primary IP for the " "parent object" @@ -10258,71 +10751,71 @@ msgstr "" "Невозможно переназначить IP-адрес, если он назначен основным IP-адресом " "родительского объекта" -#: netbox/ipam/models/ip.py:903 +#: netbox/ipam/models/ip.py:902 msgid "Only IPv6 addresses can be assigned SLAAC status" msgstr "Только адресам IPv6 можно присвоить статус SLAAC" -#: netbox/ipam/models/services.py:33 +#: netbox/ipam/models/services.py:32 msgid "port numbers" msgstr "номера портов" -#: netbox/ipam/models/services.py:59 +#: netbox/ipam/models/services.py:58 msgid "service template" msgstr "шаблон службы" -#: netbox/ipam/models/services.py:60 +#: netbox/ipam/models/services.py:59 msgid "service templates" msgstr "шаблоны служб" -#: netbox/ipam/models/services.py:95 +#: netbox/ipam/models/services.py:91 msgid "The specific IP addresses (if any) to which this service is bound" msgstr "Конкретные IP-адреса (если есть), к которым привязана эта служба" -#: netbox/ipam/models/services.py:102 +#: netbox/ipam/models/services.py:98 msgid "service" msgstr "служба" -#: netbox/ipam/models/services.py:103 +#: netbox/ipam/models/services.py:99 msgid "services" msgstr "службы" -#: netbox/ipam/models/services.py:117 +#: netbox/ipam/models/services.py:110 msgid "" "A service cannot be associated with both a device and a virtual machine." msgstr "Службу нельзя связать как с устройством, так и с виртуальной машиной." -#: netbox/ipam/models/services.py:119 +#: netbox/ipam/models/services.py:112 msgid "" "A service must be associated with either a device or a virtual machine." msgstr "Служба должна быть связана с устройством или виртуальной машиной." -#: netbox/ipam/models/vlans.py:85 +#: netbox/ipam/models/vlans.py:87 msgid "VLAN groups" msgstr "Группы VLAN" -#: netbox/ipam/models/vlans.py:95 +#: netbox/ipam/models/vlans.py:94 msgid "Cannot set scope_type without scope_id." msgstr "Невозможно установить scope_type без scope_id." -#: netbox/ipam/models/vlans.py:97 +#: netbox/ipam/models/vlans.py:96 msgid "Cannot set scope_id without scope_type." msgstr "Невозможно установить scope_id без scope_type." -#: netbox/ipam/models/vlans.py:105 +#: netbox/ipam/models/vlans.py:104 #, python-brace-format msgid "Starting VLAN ID in range ({value}) cannot be less than {minimum}" msgstr "" "Начальный идентификатор VLAN в диапазоне ({value}) не может быть меньше " "{minimum}" -#: netbox/ipam/models/vlans.py:111 +#: netbox/ipam/models/vlans.py:110 #, python-brace-format msgid "Ending VLAN ID in range ({value}) cannot exceed {maximum}" msgstr "" "Последний идентификатор VLAN в диапазоне ({value}) не может превышать " "{maximum}" -#: netbox/ipam/models/vlans.py:118 +#: netbox/ipam/models/vlans.py:117 #, python-brace-format msgid "" "Ending VLAN ID in range must be greater than or equal to the starting VLAN " @@ -10331,31 +10824,36 @@ msgstr "" "Последний идентификатор VLAN в диапазоне должен быть больше или равен " "начальному идентификатору VLAN ({range})" -#: netbox/ipam/models/vlans.py:124 +#: netbox/ipam/models/vlans.py:123 msgid "Ranges cannot overlap." msgstr "Диапазоны не могут перекрываться." -#: netbox/ipam/models/vlans.py:181 +#: netbox/ipam/models/vlans.py:180 msgid "The specific site to which this VLAN is assigned (if any)" msgstr "Конкретный сайт, которому назначена эта VLAN (если есть)" -#: netbox/ipam/models/vlans.py:189 +#: netbox/ipam/models/vlans.py:188 msgid "VLAN group (optional)" msgstr "Группа VLAN (опционально)" -#: netbox/ipam/models/vlans.py:197 +#: netbox/ipam/models/vlans.py:196 netbox/ipam/models/vlans.py:368 +#: netbox/ipam/models/vlans.py:376 msgid "Numeric VLAN ID (1-4094)" msgstr "Цифровой VLAN ID (1-4094)" -#: netbox/ipam/models/vlans.py:215 +#: netbox/ipam/models/vlans.py:214 msgid "Operational status of this VLAN" msgstr "Рабочее состояние этой VLAN" -#: netbox/ipam/models/vlans.py:223 +#: netbox/ipam/models/vlans.py:222 msgid "The primary function of this VLAN" msgstr "Основная функция этой VLAN" -#: netbox/ipam/models/vlans.py:266 +#: netbox/ipam/models/vlans.py:237 +msgid "Customer/service VLAN designation (for Q-in-Q/IEEE 802.1ad)" +msgstr "Обозначение VLAN для клиентов/служб (для Q-in-Q/IEEE 802.1ad)" + +#: netbox/ipam/models/vlans.py:285 #, python-brace-format msgid "" "VLAN is assigned to group {group} (scope: {scope}); cannot also assign to " @@ -10364,43 +10862,60 @@ msgstr "" "VLAN назначена группе {group} (область применения: {scope}); также не может " "быть присвоено сайту {site}." -#: netbox/ipam/models/vlans.py:275 +#: netbox/ipam/models/vlans.py:294 #, python-brace-format msgid "VID must be in ranges {ranges} for VLANs in group {group}" msgstr "" "VID должен быть в диапазонах {ranges} для виртуальных локальных сетей в " "группе {group}" -#: netbox/ipam/models/vrfs.py:30 +#: netbox/ipam/models/vlans.py:301 +msgid "Only Q-in-Q customer VLANs maybe assigned to a service VLAN." +msgstr "" +"Только клиентские VLAN Q-in-Q могут быть отнесены к служебной сети VLAN." + +#: netbox/ipam/models/vlans.py:307 +msgid "A Q-in-Q customer VLAN must be assigned to a service VLAN." +msgstr "VLAN клиента Q-in-Q должна быть отнесена к служебной VLAN." + +#: netbox/ipam/models/vlans.py:344 +msgid "VLAN translation policies" +msgstr "Политики трансляции VLAN" + +#: netbox/ipam/models/vlans.py:385 +msgid "VLAN translation rule" +msgstr "Правило трансляции VLAN" + +#: netbox/ipam/models/vrfs.py:29 msgid "route distinguisher" msgstr "разграничитель маршрута" -#: netbox/ipam/models/vrfs.py:31 +#: netbox/ipam/models/vrfs.py:30 msgid "Unique route distinguisher (as defined in RFC 4364)" msgstr "Уникальный отличитель маршрута (как определено в RFC 4364)" -#: netbox/ipam/models/vrfs.py:42 +#: netbox/ipam/models/vrfs.py:41 msgid "enforce unique space" msgstr "создайте уникальное пространство" -#: netbox/ipam/models/vrfs.py:43 +#: netbox/ipam/models/vrfs.py:42 msgid "Prevent duplicate prefixes/IP addresses within this VRF" msgstr "Предотвращение дублирования префиксов/IP-адресов в этом VRF" -#: netbox/ipam/models/vrfs.py:63 netbox/netbox/navigation/menu.py:186 -#: netbox/netbox/navigation/menu.py:188 +#: netbox/ipam/models/vrfs.py:62 netbox/netbox/navigation/menu.py:192 +#: netbox/netbox/navigation/menu.py:194 msgid "VRFs" msgstr "VRF" -#: netbox/ipam/models/vrfs.py:82 +#: netbox/ipam/models/vrfs.py:78 msgid "Route target value (formatted in accordance with RFC 4360)" msgstr "Целевое значение маршрута (отформатировано в соответствии с RFC 4360)" -#: netbox/ipam/models/vrfs.py:94 +#: netbox/ipam/models/vrfs.py:91 msgid "route target" msgstr "цель маршрута" -#: netbox/ipam/models/vrfs.py:95 +#: netbox/ipam/models/vrfs.py:92 msgid "route targets" msgstr "цели маршрута" @@ -10416,84 +10931,101 @@ msgstr "Количество сайтов" msgid "Provider Count" msgstr "Количество провайдеров" -#: netbox/ipam/tables/ip.py:95 netbox/netbox/navigation/menu.py:179 -#: netbox/netbox/navigation/menu.py:181 +#: netbox/ipam/tables/ip.py:41 netbox/netbox/navigation/menu.py:185 +#: netbox/netbox/navigation/menu.py:187 msgid "Aggregates" msgstr "Агрегаты" -#: netbox/ipam/tables/ip.py:125 +#: netbox/ipam/tables/ip.py:71 msgid "Added" msgstr "Добавлено" -#: netbox/ipam/tables/ip.py:128 netbox/ipam/tables/ip.py:166 -#: netbox/ipam/tables/vlans.py:142 netbox/ipam/views.py:346 -#: netbox/netbox/navigation/menu.py:165 netbox/netbox/navigation/menu.py:167 -#: netbox/templates/ipam/vlan.html:84 +#: netbox/ipam/tables/ip.py:74 netbox/ipam/tables/ip.py:112 +#: netbox/ipam/tables/vlans.py:118 netbox/ipam/views.py:373 +#: netbox/netbox/navigation/menu.py:171 netbox/netbox/navigation/menu.py:173 +#: netbox/templates/ipam/vlan.html:100 msgid "Prefixes" msgstr "Префиксы" -#: netbox/ipam/tables/ip.py:131 netbox/ipam/tables/ip.py:270 -#: netbox/ipam/tables/ip.py:324 netbox/ipam/tables/vlans.py:86 +#: netbox/ipam/tables/ip.py:77 netbox/ipam/tables/ip.py:221 +#: netbox/ipam/tables/ip.py:276 netbox/ipam/tables/vlans.py:55 #: netbox/templates/dcim/device.html:260 #: netbox/templates/ipam/aggregate.html:24 -#: netbox/templates/ipam/iprange.html:29 netbox/templates/ipam/prefix.html:106 +#: netbox/templates/ipam/iprange.html:29 netbox/templates/ipam/prefix.html:102 msgid "Utilization" msgstr "Использование" -#: netbox/ipam/tables/ip.py:171 netbox/netbox/navigation/menu.py:161 +#: netbox/ipam/tables/ip.py:117 netbox/netbox/navigation/menu.py:167 msgid "IP Ranges" msgstr "Диапазоны IP-адресов" -#: netbox/ipam/tables/ip.py:221 +#: netbox/ipam/tables/ip.py:167 msgid "Prefix (Flat)" msgstr "Префикс (плоский)" -#: netbox/ipam/tables/ip.py:225 +#: netbox/ipam/tables/ip.py:171 msgid "Depth" msgstr "Глубина" -#: netbox/ipam/tables/ip.py:262 +#: netbox/ipam/tables/ip.py:191 netbox/ipam/tables/vlans.py:37 +#: netbox/virtualization/tables/clusters.py:77 +#: netbox/wireless/tables/wirelesslan.py:55 +msgid "Scope Type" +msgstr "Тип прицела" + +#: netbox/ipam/tables/ip.py:213 msgid "Pool" msgstr "Пул" -#: netbox/ipam/tables/ip.py:266 netbox/ipam/tables/ip.py:320 +#: netbox/ipam/tables/ip.py:217 netbox/ipam/tables/ip.py:272 msgid "Marked Utilized" msgstr "Отмечено как использованный" -#: netbox/ipam/tables/ip.py:304 +#: netbox/ipam/tables/ip.py:256 msgid "Start address" msgstr "Начальный адрес" -#: netbox/ipam/tables/ip.py:383 +#: netbox/ipam/tables/ip.py:335 msgid "NAT (Inside)" msgstr "NAT (внутри)" -#: netbox/ipam/tables/ip.py:388 +#: netbox/ipam/tables/ip.py:340 msgid "NAT (Outside)" msgstr "NAT (за пределами сети)" -#: netbox/ipam/tables/ip.py:393 +#: netbox/ipam/tables/ip.py:345 msgid "Assigned" msgstr "Назначено" -#: netbox/ipam/tables/ip.py:429 netbox/templates/vpn/l2vpntermination.html:16 +#: netbox/ipam/tables/ip.py:381 netbox/templates/vpn/l2vpntermination.html:16 #: netbox/vpn/forms/filtersets.py:240 msgid "Assigned Object" msgstr "Назначенный объект" -#: netbox/ipam/tables/vlans.py:68 -msgid "Scope Type" -msgstr "Тип прицела" - -#: netbox/ipam/tables/vlans.py:76 +#: netbox/ipam/tables/vlans.py:45 msgid "VID Ranges" msgstr "Диапазоны VID" -#: netbox/ipam/tables/vlans.py:111 netbox/ipam/tables/vlans.py:214 +#: netbox/ipam/tables/vlans.py:80 netbox/ipam/tables/vlans.py:190 #: netbox/templates/dcim/inc/interface_vlans_table.html:4 msgid "VID" msgstr "VID" +#: netbox/ipam/tables/vlans.py:237 +#: netbox/templates/ipam/vlantranslationpolicy.html:22 +msgid "Rules" +msgstr "Правила" + +#: netbox/ipam/tables/vlans.py:260 +#: netbox/templates/ipam/vlantranslationrule.html:18 +msgid "Local VID" +msgstr "Местный VID" + +#: netbox/ipam/tables/vlans.py:264 +#: netbox/templates/ipam/vlantranslationrule.html:22 +msgid "Remote VID" +msgstr "Удаленный VID" + #: netbox/ipam/tables/vrfs.py:30 msgid "RD" msgstr "КРАСНЫЙ" @@ -10534,23 +11066,23 @@ msgstr "" "В именах DNS разрешены только буквенно-цифровые символы, звездочки, дефисы, " "точки и символы подчеркивания" -#: netbox/ipam/views.py:533 +#: netbox/ipam/views.py:570 msgid "Child Prefixes" msgstr "Дочерние префиксы" -#: netbox/ipam/views.py:569 +#: netbox/ipam/views.py:606 msgid "Child Ranges" msgstr "Детские диапазоны" -#: netbox/ipam/views.py:898 +#: netbox/ipam/views.py:958 msgid "Related IPs" msgstr "Связанные IP-адреса" -#: netbox/ipam/views.py:1127 +#: netbox/ipam/views.py:1315 msgid "Device Interfaces" msgstr "Интерфейсы устройств" -#: netbox/ipam/views.py:1145 +#: netbox/ipam/views.py:1333 msgid "VM Interfaces" msgstr "Интерфейсы виртуальных машин" @@ -10599,90 +11131,112 @@ msgstr "{class_name} должен реализовать функцию get_view msgid "Invalid permission {permission} for model {model}" msgstr "Неверное разрешение {permission} для модели {model}" -#: netbox/netbox/choices.py:49 +#: netbox/netbox/choices.py:51 msgid "Dark Red" msgstr "Темно-красный" -#: netbox/netbox/choices.py:52 +#: netbox/netbox/choices.py:54 msgid "Rose" msgstr "Роза" -#: netbox/netbox/choices.py:53 +#: netbox/netbox/choices.py:55 msgid "Fuchsia" msgstr "Фуксия" -#: netbox/netbox/choices.py:55 +#: netbox/netbox/choices.py:57 msgid "Dark Purple" msgstr "Темно-фиолетовый" -#: netbox/netbox/choices.py:58 +#: netbox/netbox/choices.py:60 msgid "Light Blue" msgstr "Светло-синий" -#: netbox/netbox/choices.py:61 +#: netbox/netbox/choices.py:63 msgid "Aqua" msgstr "Бирюзовый" -#: netbox/netbox/choices.py:62 +#: netbox/netbox/choices.py:64 msgid "Dark Green" msgstr "Темно-зеленый" -#: netbox/netbox/choices.py:64 +#: netbox/netbox/choices.py:66 msgid "Light Green" msgstr "Светло-зеленый" -#: netbox/netbox/choices.py:65 +#: netbox/netbox/choices.py:67 msgid "Lime" msgstr "Лайм" -#: netbox/netbox/choices.py:67 +#: netbox/netbox/choices.py:69 msgid "Amber" msgstr "Янтарь" -#: netbox/netbox/choices.py:69 +#: netbox/netbox/choices.py:71 msgid "Dark Orange" msgstr "Темно-оранжевый" -#: netbox/netbox/choices.py:70 +#: netbox/netbox/choices.py:72 msgid "Brown" msgstr "Коричневый" -#: netbox/netbox/choices.py:71 +#: netbox/netbox/choices.py:73 msgid "Light Grey" msgstr "Светло-серый" -#: netbox/netbox/choices.py:72 +#: netbox/netbox/choices.py:74 msgid "Grey" msgstr "Серый" -#: netbox/netbox/choices.py:73 +#: netbox/netbox/choices.py:75 msgid "Dark Grey" msgstr "Темно-серый" -#: netbox/netbox/choices.py:128 +#: netbox/netbox/choices.py:103 netbox/templates/extras/script_result.html:56 +msgid "Default" +msgstr "По умолчанию" + +#: netbox/netbox/choices.py:130 msgid "Direct" msgstr "Прямой" -#: netbox/netbox/choices.py:129 +#: netbox/netbox/choices.py:131 msgid "Upload" msgstr "Загрузить" -#: netbox/netbox/choices.py:141 netbox/netbox/choices.py:155 +#: netbox/netbox/choices.py:143 netbox/netbox/choices.py:157 msgid "Auto-detect" msgstr "Автоматическое обнаружение" -#: netbox/netbox/choices.py:156 +#: netbox/netbox/choices.py:158 msgid "Comma" msgstr "Запятая" -#: netbox/netbox/choices.py:157 +#: netbox/netbox/choices.py:159 msgid "Semicolon" msgstr "Точка с запятой" -#: netbox/netbox/choices.py:158 +#: netbox/netbox/choices.py:160 msgid "Tab" msgstr "Вкладка" +#: netbox/netbox/choices.py:193 netbox/templates/dcim/device.html:327 +#: netbox/templates/dcim/rack.html:107 +msgid "Kilograms" +msgstr "Килограммы" + +#: netbox/netbox/choices.py:194 +msgid "Grams" +msgstr "Граммы" + +#: netbox/netbox/choices.py:195 netbox/templates/dcim/device.html:328 +#: netbox/templates/dcim/rack.html:108 +msgid "Pounds" +msgstr "Фунты" + +#: netbox/netbox/choices.py:196 +msgid "Ounces" +msgstr "Унции" + #: netbox/netbox/config/__init__.py:67 #, python-brace-format msgid "Invalid configuration parameter: {item}" @@ -10974,6 +11528,26 @@ msgstr "дата синхронизирована" msgid "{class_name} must implement a sync_data() method." msgstr "{class_name} должен реализовать метод sync_data ()." +#: netbox/netbox/models/mixins.py:22 +msgid "weight unit" +msgstr "весовая единица" + +#: netbox/netbox/models/mixins.py:52 +msgid "Must specify a unit when setting a weight" +msgstr "При установке веса необходимо указать единицу измерения" + +#: netbox/netbox/models/mixins.py:57 +msgid "distance" +msgstr "расстояние" + +#: netbox/netbox/models/mixins.py:64 +msgid "distance unit" +msgstr "единица измерения расстояний" + +#: netbox/netbox/models/mixins.py:99 +msgid "Must specify a unit when setting a distance" +msgstr "При задании расстояния необходимо указать единицу измерения" + #: netbox/netbox/navigation/menu.py:11 msgid "Organization" msgstr "Организация" @@ -11007,10 +11581,6 @@ msgstr "Роли стоек" msgid "Elevations" msgstr "Возвышения" -#: netbox/netbox/navigation/menu.py:60 netbox/netbox/navigation/menu.py:62 -msgid "Rack Types" -msgstr "Типы стоек" - #: netbox/netbox/navigation/menu.py:76 msgid "Modules" msgstr "Модули" @@ -11033,175 +11603,200 @@ msgstr "Компоненты устройства" msgid "Inventory Item Roles" msgstr "Роли предметов" -#: netbox/netbox/navigation/menu.py:111 netbox/netbox/navigation/menu.py:115 +#: netbox/netbox/navigation/menu.py:110 +#: netbox/templates/dcim/interface.html:413 +#: netbox/templates/virtualization/vminterface.html:118 +msgid "MAC Addresses" +msgstr "MAC-адреса" + +#: netbox/netbox/navigation/menu.py:117 netbox/netbox/navigation/menu.py:121 +#: netbox/templates/dcim/interface.html:182 msgid "Connections" msgstr "Подключения" -#: netbox/netbox/navigation/menu.py:117 +#: netbox/netbox/navigation/menu.py:123 msgid "Cables" msgstr "Кабели" -#: netbox/netbox/navigation/menu.py:118 +#: netbox/netbox/navigation/menu.py:124 msgid "Wireless Links" msgstr "Беспроводные каналы" -#: netbox/netbox/navigation/menu.py:121 +#: netbox/netbox/navigation/menu.py:127 msgid "Interface Connections" msgstr "Интерфейсные подключения" -#: netbox/netbox/navigation/menu.py:126 +#: netbox/netbox/navigation/menu.py:132 msgid "Console Connections" msgstr "Консольные подключения" -#: netbox/netbox/navigation/menu.py:131 +#: netbox/netbox/navigation/menu.py:137 msgid "Power Connections" msgstr "Подключения кабелей питания" -#: netbox/netbox/navigation/menu.py:147 +#: netbox/netbox/navigation/menu.py:153 msgid "Wireless LAN Groups" msgstr "Группы WLAN" -#: netbox/netbox/navigation/menu.py:168 +#: netbox/netbox/navigation/menu.py:174 msgid "Prefix & VLAN Roles" msgstr "Роли префиксов и VLAN" -#: netbox/netbox/navigation/menu.py:174 +#: netbox/netbox/navigation/menu.py:180 msgid "ASN Ranges" msgstr "Диапазоны ASN" -#: netbox/netbox/navigation/menu.py:196 +#: netbox/netbox/navigation/menu.py:202 msgid "VLAN Groups" msgstr "Группы VLAN" #: netbox/netbox/navigation/menu.py:203 +msgid "VLAN Translation Policies" +msgstr "Политики трансляции VLAN" + +#: netbox/netbox/navigation/menu.py:204 +#: netbox/templates/ipam/vlantranslationpolicy.html:46 +msgid "VLAN Translation Rules" +msgstr "Правила трансляции VLAN" + +#: netbox/netbox/navigation/menu.py:211 msgid "Service Templates" msgstr "Шаблоны Служб" -#: netbox/netbox/navigation/menu.py:204 netbox/templates/dcim/device.html:302 +#: netbox/netbox/navigation/menu.py:212 netbox/templates/dcim/device.html:302 #: netbox/templates/ipam/ipaddress.html:118 #: netbox/templates/virtualization/virtualmachine.html:154 msgid "Services" msgstr "Службы" -#: netbox/netbox/navigation/menu.py:211 +#: netbox/netbox/navigation/menu.py:219 msgid "VPN" msgstr "VPN" -#: netbox/netbox/navigation/menu.py:215 netbox/netbox/navigation/menu.py:217 +#: netbox/netbox/navigation/menu.py:223 netbox/netbox/navigation/menu.py:225 #: netbox/vpn/tables/tunnels.py:24 msgid "Tunnels" msgstr "Туннели" -#: netbox/netbox/navigation/menu.py:218 +#: netbox/netbox/navigation/menu.py:226 #: netbox/templates/vpn/tunnelgroup.html:8 msgid "Tunnel Groups" msgstr "Группы туннелей" -#: netbox/netbox/navigation/menu.py:219 +#: netbox/netbox/navigation/menu.py:227 msgid "Tunnel Terminations" msgstr "Окончание туннелей" -#: netbox/netbox/navigation/menu.py:223 netbox/netbox/navigation/menu.py:225 +#: netbox/netbox/navigation/menu.py:231 netbox/netbox/navigation/menu.py:233 #: netbox/vpn/models/l2vpn.py:64 msgid "L2VPNs" msgstr "L2VPN" -#: netbox/netbox/navigation/menu.py:226 netbox/templates/vpn/l2vpn.html:56 -#: netbox/templates/vpn/tunnel.html:72 netbox/vpn/tables/tunnels.py:58 -msgid "Terminations" -msgstr "Соединения" - -#: netbox/netbox/navigation/menu.py:232 +#: netbox/netbox/navigation/menu.py:240 msgid "IKE Proposals" msgstr "Предложения IKE" -#: netbox/netbox/navigation/menu.py:233 +#: netbox/netbox/navigation/menu.py:241 #: netbox/templates/vpn/ikeproposal.html:41 msgid "IKE Policies" msgstr "Политики IKE" -#: netbox/netbox/navigation/menu.py:234 +#: netbox/netbox/navigation/menu.py:242 msgid "IPSec Proposals" msgstr "Предложения IPsec" -#: netbox/netbox/navigation/menu.py:235 +#: netbox/netbox/navigation/menu.py:243 #: netbox/templates/vpn/ipsecproposal.html:37 msgid "IPSec Policies" msgstr "Политики IPsec" -#: netbox/netbox/navigation/menu.py:236 netbox/templates/vpn/ikepolicy.html:38 +#: netbox/netbox/navigation/menu.py:244 netbox/templates/vpn/ikepolicy.html:38 #: netbox/templates/vpn/ipsecpolicy.html:25 msgid "IPSec Profiles" msgstr "Профили IPsec" -#: netbox/netbox/navigation/menu.py:251 +#: netbox/netbox/navigation/menu.py:259 #: netbox/templates/virtualization/virtualmachine.html:174 #: netbox/templates/virtualization/virtualmachine/base.html:32 #: netbox/templates/virtualization/virtualmachine_list.html:21 -#: netbox/virtualization/tables/virtualmachines.py:104 -#: netbox/virtualization/views.py:386 +#: netbox/virtualization/tables/virtualmachines.py:74 +#: netbox/virtualization/views.py:403 msgid "Virtual Disks" msgstr "Виртуальные диски" -#: netbox/netbox/navigation/menu.py:258 +#: netbox/netbox/navigation/menu.py:266 msgid "Cluster Types" msgstr "Типы кластеров" -#: netbox/netbox/navigation/menu.py:259 +#: netbox/netbox/navigation/menu.py:267 msgid "Cluster Groups" msgstr "Группы кластеров" -#: netbox/netbox/navigation/menu.py:273 +#: netbox/netbox/navigation/menu.py:281 msgid "Circuit Types" msgstr "Типы каналов связи" -#: netbox/netbox/navigation/menu.py:274 -msgid "Circuit Groups" -msgstr "Группы каналов связей" - -#: netbox/netbox/navigation/menu.py:275 -#: netbox/templates/circuits/circuit.html:66 -msgid "Group Assignments" -msgstr "Групповые задания" - -#: netbox/netbox/navigation/menu.py:276 +#: netbox/netbox/navigation/menu.py:282 msgid "Circuit Terminations" msgstr "Точка подключения канала связи" -#: netbox/netbox/navigation/menu.py:280 netbox/netbox/navigation/menu.py:282 +#: netbox/netbox/navigation/menu.py:286 netbox/netbox/navigation/menu.py:288 +#: netbox/templates/circuits/providernetwork.html:55 +msgid "Virtual Circuits" +msgstr "Виртуальные схемы" + +#: netbox/netbox/navigation/menu.py:289 +msgid "Virtual Circuit Types" +msgstr "Типы виртуальных каналов" + +#: netbox/netbox/navigation/menu.py:290 +msgid "Virtual Circuit Terminations" +msgstr "Прерывания виртуальных каналов" + +#: netbox/netbox/navigation/menu.py:296 +msgid "Circuit Groups" +msgstr "Группы каналов связей" + +#: netbox/netbox/navigation/menu.py:297 +#: netbox/templates/circuits/circuit.html:76 +#: netbox/templates/circuits/virtualcircuit.html:69 +msgid "Group Assignments" +msgstr "Групповые задания" + +#: netbox/netbox/navigation/menu.py:301 netbox/netbox/navigation/menu.py:303 msgid "Providers" msgstr "Провайдеры" -#: netbox/netbox/navigation/menu.py:283 +#: netbox/netbox/navigation/menu.py:304 #: netbox/templates/circuits/provider.html:51 msgid "Provider Accounts" msgstr "Аккаунты провайдеров" -#: netbox/netbox/navigation/menu.py:284 +#: netbox/netbox/navigation/menu.py:305 msgid "Provider Networks" msgstr "Сети провайдеров" -#: netbox/netbox/navigation/menu.py:298 +#: netbox/netbox/navigation/menu.py:319 msgid "Power Panels" msgstr "Распределительные щиты" -#: netbox/netbox/navigation/menu.py:309 +#: netbox/netbox/navigation/menu.py:330 msgid "Configurations" msgstr "Конфигурации" -#: netbox/netbox/navigation/menu.py:311 +#: netbox/netbox/navigation/menu.py:332 msgid "Config Contexts" msgstr "Контексты конфигурации" -#: netbox/netbox/navigation/menu.py:312 +#: netbox/netbox/navigation/menu.py:333 msgid "Config Templates" msgstr "Шаблоны конфигурации" -#: netbox/netbox/navigation/menu.py:319 netbox/netbox/navigation/menu.py:323 +#: netbox/netbox/navigation/menu.py:340 netbox/netbox/navigation/menu.py:344 msgid "Customization" msgstr "Настройка" -#: netbox/netbox/navigation/menu.py:325 +#: netbox/netbox/navigation/menu.py:346 #: netbox/templates/dcim/device_edit.html:103 #: netbox/templates/dcim/htmx/cable_edit.html:81 #: netbox/templates/dcim/virtualchassis_add.html:31 @@ -11210,96 +11805,96 @@ msgstr "Настройка" #: netbox/templates/htmx/form.html:19 netbox/templates/inc/filter_list.html:30 #: netbox/templates/inc/panels/custom_fields.html:7 #: netbox/templates/ipam/ipaddress_bulk_add.html:35 -#: netbox/templates/ipam/vlan_edit.html:59 +#: netbox/templates/ipam/vlan_edit.html:67 msgid "Custom Fields" msgstr "Настраиваемые Поля" -#: netbox/netbox/navigation/menu.py:326 +#: netbox/netbox/navigation/menu.py:347 msgid "Custom Field Choices" msgstr "Варианты для Настраиваемых Полей" -#: netbox/netbox/navigation/menu.py:327 +#: netbox/netbox/navigation/menu.py:348 msgid "Custom Links" msgstr "Настраиваемые Ссылки" -#: netbox/netbox/navigation/menu.py:328 +#: netbox/netbox/navigation/menu.py:349 msgid "Export Templates" msgstr "Шаблоны экспорта" -#: netbox/netbox/navigation/menu.py:329 +#: netbox/netbox/navigation/menu.py:350 msgid "Saved Filters" msgstr "Сохраненные фильтры" -#: netbox/netbox/navigation/menu.py:331 +#: netbox/netbox/navigation/menu.py:352 msgid "Image Attachments" msgstr "Прикрепленные Изображения" -#: netbox/netbox/navigation/menu.py:349 +#: netbox/netbox/navigation/menu.py:370 msgid "Operations" msgstr "Операции" -#: netbox/netbox/navigation/menu.py:353 +#: netbox/netbox/navigation/menu.py:374 msgid "Integrations" msgstr "Интеграции" -#: netbox/netbox/navigation/menu.py:355 +#: netbox/netbox/navigation/menu.py:376 msgid "Data Sources" msgstr "Источники данных" -#: netbox/netbox/navigation/menu.py:356 +#: netbox/netbox/navigation/menu.py:377 msgid "Event Rules" msgstr "Правила мероприятия" -#: netbox/netbox/navigation/menu.py:357 +#: netbox/netbox/navigation/menu.py:378 msgid "Webhooks" msgstr "Вебхуки" -#: netbox/netbox/navigation/menu.py:361 netbox/netbox/navigation/menu.py:365 -#: netbox/netbox/views/generic/feature_views.py:153 +#: netbox/netbox/navigation/menu.py:382 netbox/netbox/navigation/menu.py:386 +#: netbox/netbox/views/generic/feature_views.py:158 #: netbox/templates/extras/report/base.html:37 #: netbox/templates/extras/script/base.html:36 msgid "Jobs" msgstr "Задачи" -#: netbox/netbox/navigation/menu.py:371 +#: netbox/netbox/navigation/menu.py:392 msgid "Logging" msgstr "Ведение журнала" -#: netbox/netbox/navigation/menu.py:373 +#: netbox/netbox/navigation/menu.py:394 msgid "Notification Groups" msgstr "Группы уведомлений" -#: netbox/netbox/navigation/menu.py:374 +#: netbox/netbox/navigation/menu.py:395 msgid "Journal Entries" msgstr "Записи в журнале" -#: netbox/netbox/navigation/menu.py:375 +#: netbox/netbox/navigation/menu.py:396 #: netbox/templates/core/objectchange.html:9 #: netbox/templates/core/objectchange_list.html:4 msgid "Change Log" msgstr "Журнал изменений" -#: netbox/netbox/navigation/menu.py:382 netbox/templates/inc/user_menu.html:29 +#: netbox/netbox/navigation/menu.py:403 netbox/templates/inc/user_menu.html:29 msgid "Admin" msgstr "Администратор" -#: netbox/netbox/navigation/menu.py:430 netbox/templates/account/base.html:27 -#: netbox/templates/inc/user_menu.html:57 +#: netbox/netbox/navigation/menu.py:451 netbox/templates/account/base.html:27 +#: netbox/templates/inc/user_menu.html:52 msgid "API Tokens" msgstr "Токены API" -#: netbox/netbox/navigation/menu.py:437 netbox/users/forms/model_forms.py:187 +#: netbox/netbox/navigation/menu.py:458 netbox/users/forms/model_forms.py:187 #: netbox/users/forms/model_forms.py:195 netbox/users/forms/model_forms.py:242 #: netbox/users/forms/model_forms.py:249 msgid "Permissions" msgstr "Разрешения" -#: netbox/netbox/navigation/menu.py:445 netbox/netbox/navigation/menu.py:449 +#: netbox/netbox/navigation/menu.py:466 netbox/netbox/navigation/menu.py:470 #: netbox/templates/core/system.html:7 msgid "System" msgstr "система" -#: netbox/netbox/navigation/menu.py:454 netbox/netbox/navigation/menu.py:502 +#: netbox/netbox/navigation/menu.py:475 netbox/netbox/navigation/menu.py:523 #: netbox/templates/500.html:35 netbox/templates/account/preferences.html:22 #: netbox/templates/core/plugin.html:13 #: netbox/templates/core/plugin_list.html:7 @@ -11307,29 +11902,29 @@ msgstr "система" msgid "Plugins" msgstr "Плагины" -#: netbox/netbox/navigation/menu.py:459 +#: netbox/netbox/navigation/menu.py:480 msgid "Configuration History" msgstr "История конфигурации" -#: netbox/netbox/navigation/menu.py:465 netbox/templates/core/rq_task.html:8 +#: netbox/netbox/navigation/menu.py:486 netbox/templates/core/rq_task.html:8 #: netbox/templates/core/rq_task_list.html:22 msgid "Background Tasks" msgstr "Фоновые задачи" -#: netbox/netbox/plugins/navigation.py:47 -#: netbox/netbox/plugins/navigation.py:69 +#: netbox/netbox/plugins/navigation.py:48 +#: netbox/netbox/plugins/navigation.py:70 msgid "Permissions must be passed as a tuple or list." msgstr "Разрешения должны передаваться в виде кортежа или списка." -#: netbox/netbox/plugins/navigation.py:51 +#: netbox/netbox/plugins/navigation.py:52 msgid "Buttons must be passed as a tuple or list." msgstr "Кнопки должны передаваться в виде кортежа или списка." -#: netbox/netbox/plugins/navigation.py:73 +#: netbox/netbox/plugins/navigation.py:74 msgid "Button color must be a choice within ButtonColorChoices." msgstr "Цвет кнопки должен быть выбран в ButtonColorChoices." -#: netbox/netbox/plugins/registration.py:25 +#: netbox/netbox/plugins/registration.py:26 #, python-brace-format msgid "" "PluginTemplateExtension class {template_extension} was passed as an " @@ -11338,7 +11933,7 @@ msgstr "" "Класс расширения шаблонов плагинов {template_extension} было принято в " "качестве экземпляра!" -#: netbox/netbox/plugins/registration.py:31 +#: netbox/netbox/plugins/registration.py:32 #, python-brace-format msgid "" "{template_extension} is not a subclass of " @@ -11347,17 +11942,17 @@ msgstr "" "{template_extension} не является подклассом расширения " "Netbox.Plugins.Plugins.PluginstemplateExtension!" -#: netbox/netbox/plugins/registration.py:51 +#: netbox/netbox/plugins/registration.py:57 #, python-brace-format msgid "{item} must be an instance of netbox.plugins.PluginMenuItem" msgstr "{item} должен быть экземпляром Netbox.plugins.pluginmenuItem" -#: netbox/netbox/plugins/registration.py:62 +#: netbox/netbox/plugins/registration.py:68 #, python-brace-format msgid "{menu_link} must be an instance of netbox.plugins.PluginMenuItem" msgstr "{menu_link} должен быть экземпляром Netbox.plugins.pluginmenuItem" -#: netbox/netbox/plugins/registration.py:67 +#: netbox/netbox/plugins/registration.py:73 #, python-brace-format msgid "{button} must be an instance of netbox.plugins.PluginMenuButton" msgstr "" @@ -11443,93 +12038,93 @@ msgstr "Невозможно добавить хранилище в реестр msgid "Cannot delete stores from registry" msgstr "Невозможно удалить хранилище из реестра" -#: netbox/netbox/settings.py:760 +#: netbox/netbox/settings.py:752 msgid "Czech" msgstr "Чешский" -#: netbox/netbox/settings.py:761 +#: netbox/netbox/settings.py:753 msgid "Danish" msgstr "Датский" -#: netbox/netbox/settings.py:762 +#: netbox/netbox/settings.py:754 msgid "German" msgstr "Немецкий" -#: netbox/netbox/settings.py:763 +#: netbox/netbox/settings.py:755 msgid "English" msgstr "Английский" -#: netbox/netbox/settings.py:764 +#: netbox/netbox/settings.py:756 msgid "Spanish" msgstr "Испанский" -#: netbox/netbox/settings.py:765 +#: netbox/netbox/settings.py:757 msgid "French" msgstr "Французский" -#: netbox/netbox/settings.py:766 +#: netbox/netbox/settings.py:758 msgid "Italian" msgstr "Итальянский" -#: netbox/netbox/settings.py:767 +#: netbox/netbox/settings.py:759 msgid "Japanese" msgstr "Японский" -#: netbox/netbox/settings.py:768 +#: netbox/netbox/settings.py:760 msgid "Dutch" msgstr "Голландский" -#: netbox/netbox/settings.py:769 +#: netbox/netbox/settings.py:761 msgid "Polish" msgstr "Польский" -#: netbox/netbox/settings.py:770 +#: netbox/netbox/settings.py:762 msgid "Portuguese" msgstr "Португальский" -#: netbox/netbox/settings.py:771 +#: netbox/netbox/settings.py:763 msgid "Russian" msgstr "Русский" -#: netbox/netbox/settings.py:772 +#: netbox/netbox/settings.py:764 msgid "Turkish" msgstr "Турецкий" -#: netbox/netbox/settings.py:773 +#: netbox/netbox/settings.py:765 msgid "Ukrainian" msgstr "Украинский" -#: netbox/netbox/settings.py:774 +#: netbox/netbox/settings.py:766 msgid "Chinese" msgstr "Китайский" -#: netbox/netbox/tables/columns.py:176 +#: netbox/netbox/tables/columns.py:177 msgid "Select all" msgstr "Выбрать все" -#: netbox/netbox/tables/columns.py:189 +#: netbox/netbox/tables/columns.py:190 msgid "Toggle all" msgstr "Переключить все" -#: netbox/netbox/tables/columns.py:300 +#: netbox/netbox/tables/columns.py:302 msgid "Toggle Dropdown" msgstr "Переключить выпадающий список" -#: netbox/netbox/tables/columns.py:572 netbox/templates/core/job.html:53 +#: netbox/netbox/tables/columns.py:575 netbox/templates/core/job.html:53 msgid "Error" msgstr "Ошибка" -#: netbox/netbox/tables/tables.py:58 +#: netbox/netbox/tables/tables.py:59 #, python-brace-format msgid "No {model_name} found" msgstr "{model_name} не найдена" -#: netbox/netbox/tables/tables.py:249 +#: netbox/netbox/tables/tables.py:252 #: netbox/templates/generic/bulk_import.html:117 msgid "Field" msgstr "Поле" -#: netbox/netbox/tables/tables.py:252 +#: netbox/netbox/tables/tables.py:255 msgid "Value" msgstr "Значение" @@ -11545,24 +12140,24 @@ msgid "" msgstr "" "Произошла ошибка при рендеринге выбранного шаблона ({template}): {error}" -#: netbox/netbox/views/generic/bulk_views.py:416 +#: netbox/netbox/views/generic/bulk_views.py:421 #, python-brace-format msgid "Row {i}: Object with ID {id} does not exist" msgstr "Ряд {i}: Объект с идентификатором {id} не существует" -#: netbox/netbox/views/generic/bulk_views.py:709 -#: netbox/netbox/views/generic/bulk_views.py:910 -#: netbox/netbox/views/generic/bulk_views.py:958 +#: netbox/netbox/views/generic/bulk_views.py:708 +#: netbox/netbox/views/generic/bulk_views.py:909 +#: netbox/netbox/views/generic/bulk_views.py:957 #, python-brace-format msgid "No {object_type} were selected." msgstr "{object_type} не были выбраны." -#: netbox/netbox/views/generic/bulk_views.py:788 +#: netbox/netbox/views/generic/bulk_views.py:787 #, python-brace-format msgid "Renamed {count} {object_type}" msgstr "Переименован(-о) {count} {object_type}" -#: netbox/netbox/views/generic/bulk_views.py:888 +#: netbox/netbox/views/generic/bulk_views.py:887 #, python-brace-format msgid "Deleted {count} {object_type}" msgstr "Удален(-о) {count} {object_type}" @@ -11575,16 +12170,16 @@ msgstr "Журнал изменений" msgid "Journal" msgstr "Журнал" -#: netbox/netbox/views/generic/feature_views.py:207 +#: netbox/netbox/views/generic/feature_views.py:212 msgid "Unable to synchronize data: No data file set." msgstr "Невозможно синхронизировать данные: не указан файл данных." -#: netbox/netbox/views/generic/feature_views.py:211 +#: netbox/netbox/views/generic/feature_views.py:216 #, python-brace-format msgid "Synchronized data for {object_type} {object}." msgstr "Синхронизированы данные для {object_type} {object}." -#: netbox/netbox/views/generic/feature_views.py:236 +#: netbox/netbox/views/generic/feature_views.py:241 #, python-brace-format msgid "Synced {count} {object_type}" msgstr "Синхронизирован(-о) {count} {object_type}" @@ -11658,9 +12253,9 @@ msgstr "на GitHub" msgid "Home Page" msgstr "Домашняя страница" -#: netbox/templates/account/base.html:7 netbox/templates/inc/user_menu.html:45 +#: netbox/templates/account/base.html:7 netbox/templates/inc/user_menu.html:40 #: netbox/vpn/forms/bulk_edit.py:255 netbox/vpn/forms/filtersets.py:189 -#: netbox/vpn/forms/model_forms.py:379 +#: netbox/vpn/forms/model_forms.py:382 msgid "Profile" msgstr "Профиль" @@ -11672,12 +12267,12 @@ msgstr "Уведомления" #: netbox/templates/account/base.html:16 #: netbox/templates/account/subscriptions.html:7 -#: netbox/templates/inc/user_menu.html:51 +#: netbox/templates/inc/user_menu.html:46 msgid "Subscriptions" msgstr "Подписки" #: netbox/templates/account/base.html:19 -#: netbox/templates/inc/user_menu.html:54 +#: netbox/templates/inc/user_menu.html:49 msgid "Preferences" msgstr "Настройки" @@ -11705,6 +12300,7 @@ msgstr "Изменить пароль" #: netbox/templates/generic/object_edit.html:72 #: netbox/templates/htmx/delete_form.html:53 #: netbox/templates/htmx/delete_form.html:55 +#: netbox/templates/htmx/quick_add.html:21 #: netbox/templates/ipam/ipaddress_assign.html:28 #: netbox/templates/virtualization/cluster_add_devices.html:30 msgid "Cancel" @@ -11803,7 +12399,7 @@ msgstr "Назначенные группы" #: netbox/templates/core/objectchange.html:142 #: netbox/templates/dcim/devicebay.html:59 #: netbox/templates/dcim/inc/panels/inventory_items.html:45 -#: netbox/templates/dcim/interface.html:296 +#: netbox/templates/dcim/interface.html:353 #: netbox/templates/dcim/modulebay.html:80 #: netbox/templates/extras/configcontext.html:70 #: netbox/templates/extras/eventrule.html:66 @@ -11812,6 +12408,7 @@ msgstr "Назначенные группы" #: netbox/templates/extras/webhook.html:75 #: netbox/templates/inc/panel_table.html:13 #: netbox/templates/inc/panels/comments.html:10 +#: netbox/templates/inc/panels/related_objects.html:23 #: netbox/templates/ipam/inc/panels/fhrp_groups.html:56 #: netbox/templates/users/group.html:34 netbox/templates/users/group.html:44 #: netbox/templates/users/objectpermission.html:77 @@ -11849,7 +12446,7 @@ msgstr "Последний раз использованный" msgid "Add a Token" msgstr "Добавить токен" -#: netbox/templates/base/base.html:22 netbox/templates/home.html:27 +#: netbox/templates/base/base.html:23 netbox/templates/home.html:27 msgid "Home" msgstr "Главная" @@ -11891,15 +12488,16 @@ msgstr "Исходный код" msgid "Community" msgstr "Сообщество" -#: netbox/templates/circuits/circuit.html:47 +#: netbox/templates/circuits/circuit.html:57 msgid "Install Date" msgstr "Дата установки" -#: netbox/templates/circuits/circuit.html:51 +#: netbox/templates/circuits/circuit.html:61 msgid "Termination Date" msgstr "Дата отключения" -#: netbox/templates/circuits/circuit.html:70 +#: netbox/templates/circuits/circuit.html:80 +#: netbox/templates/circuits/virtualcircuit.html:73 #: netbox/templates/ipam/inc/panels/fhrp_groups.html:15 msgid "Assign Group" msgstr "Назначить группу" @@ -11948,7 +12546,7 @@ msgid "Add" msgstr "Добавить" #: netbox/templates/circuits/inc/circuit_termination.html:15 -#: netbox/templates/circuits/inc/circuit_termination_fields.html:36 +#: netbox/templates/circuits/inc/circuit_termination_fields.html:37 #: netbox/templates/dcim/inc/panels/inventory_items.html:32 #: netbox/templates/dcim/powerpanel.html:56 #: netbox/templates/extras/script_list.html:30 @@ -11963,35 +12561,39 @@ msgstr "Редактировать" msgid "Swap" msgstr "Обмен" -#: netbox/templates/circuits/inc/circuit_termination_fields.html:19 +#: netbox/templates/circuits/inc/circuit_termination_fields.html:5 +msgid "Termination point" +msgstr "Точка прекращения" + +#: netbox/templates/circuits/inc/circuit_termination_fields.html:20 #: netbox/templates/dcim/consoleport.html:59 #: netbox/templates/dcim/consoleserverport.html:60 #: netbox/templates/dcim/powerfeed.html:114 msgid "Marked as connected" msgstr "Отмечено как подключенное" -#: netbox/templates/circuits/inc/circuit_termination_fields.html:21 +#: netbox/templates/circuits/inc/circuit_termination_fields.html:22 msgid "to" msgstr "к" -#: netbox/templates/circuits/inc/circuit_termination_fields.html:31 #: netbox/templates/circuits/inc/circuit_termination_fields.html:32 +#: netbox/templates/circuits/inc/circuit_termination_fields.html:33 #: netbox/templates/dcim/frontport.html:80 #: netbox/templates/dcim/inc/connection_endpoints.html:7 -#: netbox/templates/dcim/interface.html:154 +#: netbox/templates/dcim/interface.html:211 #: netbox/templates/dcim/rearport.html:76 msgid "Trace" msgstr "Следить" -#: netbox/templates/circuits/inc/circuit_termination_fields.html:35 +#: netbox/templates/circuits/inc/circuit_termination_fields.html:36 msgid "Edit cable" msgstr "Редактирование кабеля" -#: netbox/templates/circuits/inc/circuit_termination_fields.html:40 +#: netbox/templates/circuits/inc/circuit_termination_fields.html:41 msgid "Remove cable" msgstr "Извлеките кабель" -#: netbox/templates/circuits/inc/circuit_termination_fields.html:41 +#: netbox/templates/circuits/inc/circuit_termination_fields.html:42 #: netbox/templates/dcim/bulk_disconnect.html:5 #: netbox/templates/dcim/device/consoleports.html:12 #: netbox/templates/dcim/device/consoleserverports.html:12 @@ -12004,33 +12606,33 @@ msgstr "Извлеките кабель" msgid "Disconnect" msgstr "Отключить" -#: netbox/templates/circuits/inc/circuit_termination_fields.html:48 +#: netbox/templates/circuits/inc/circuit_termination_fields.html:49 #: netbox/templates/dcim/consoleport.html:69 #: netbox/templates/dcim/consoleserverport.html:70 #: netbox/templates/dcim/frontport.html:102 -#: netbox/templates/dcim/interface.html:180 -#: netbox/templates/dcim/interface.html:200 +#: netbox/templates/dcim/interface.html:237 +#: netbox/templates/dcim/interface.html:257 #: netbox/templates/dcim/powerfeed.html:127 -#: netbox/templates/dcim/poweroutlet.html:71 -#: netbox/templates/dcim/poweroutlet.html:72 +#: netbox/templates/dcim/poweroutlet.html:81 +#: netbox/templates/dcim/poweroutlet.html:82 #: netbox/templates/dcim/powerport.html:73 #: netbox/templates/dcim/rearport.html:98 msgid "Connect" msgstr "Подключить" -#: netbox/templates/circuits/inc/circuit_termination_fields.html:70 +#: netbox/templates/circuits/inc/circuit_termination_fields.html:65 msgid "Downstream" msgstr "Ниже по течению" -#: netbox/templates/circuits/inc/circuit_termination_fields.html:71 +#: netbox/templates/circuits/inc/circuit_termination_fields.html:66 msgid "Upstream" msgstr "Вверх по течению" -#: netbox/templates/circuits/inc/circuit_termination_fields.html:80 +#: netbox/templates/circuits/inc/circuit_termination_fields.html:75 msgid "Cross-Connect" msgstr "Кросс-коннект" -#: netbox/templates/circuits/inc/circuit_termination_fields.html:84 +#: netbox/templates/circuits/inc/circuit_termination_fields.html:79 msgid "Patch Panel/Port" msgstr "Патч-панель/порт" @@ -12042,6 +12644,27 @@ msgstr "Добавить канал связи" msgid "Provider Account" msgstr "Учетная запись поставщика" +#: netbox/templates/circuits/providernetwork.html:59 +msgid "Add a Virtual Circuit" +msgstr "Добавить виртуальный канал" + +#: netbox/templates/circuits/virtualcircuit.html:91 +#: netbox/templates/vpn/tunnel.html:9 +msgid "Add Termination" +msgstr "Добавить окончание" + +#: netbox/templates/circuits/virtualcircuittermination.html:23 +msgid "Virtual Circuit Termination" +msgstr "Завершение работы виртуального канала" + +#: netbox/templates/circuits/virtualcircuittype.html:10 +msgid "Add Virtual Circuit" +msgstr "Добавить виртуальный канал" + +#: netbox/templates/circuits/virtualcircuittype.html:19 +msgid "Virtual Circuit Type" +msgstr "Тип виртуального канала" + #: netbox/templates/core/configrevision.html:35 msgid "Configuration Data" msgstr "Конфигурационные данные" @@ -12075,7 +12698,7 @@ msgstr "Изменено" #: netbox/templates/core/datafile.html:42 #: netbox/templates/ipam/iprange.html:25 #: netbox/templates/virtualization/virtualdisk.html:29 -#: netbox/virtualization/tables/virtualmachines.py:198 +#: netbox/virtualization/tables/virtualmachines.py:169 msgid "Size" msgstr "Размер" @@ -12518,8 +13141,8 @@ msgstr "Переименовать Выбранное" #: netbox/templates/dcim/consoleport.html:65 #: netbox/templates/dcim/consoleserverport.html:66 #: netbox/templates/dcim/frontport.html:98 -#: netbox/templates/dcim/interface.html:176 -#: netbox/templates/dcim/poweroutlet.html:69 +#: netbox/templates/dcim/interface.html:233 +#: netbox/templates/dcim/poweroutlet.html:79 #: netbox/templates/dcim/powerport.html:69 msgid "Not Connected" msgstr "Не подключено" @@ -12542,7 +13165,7 @@ msgid "Map" msgstr "Карта" #: netbox/templates/dcim/device.html:108 -#: netbox/templates/dcim/inventoryitem.html:56 +#: netbox/templates/dcim/inventoryitem.html:60 #: netbox/templates/dcim/module.html:81 #: netbox/templates/dcim/modulebay.html:74 netbox/templates/dcim/rack.html:61 msgid "Asset Tag" @@ -12558,7 +13181,7 @@ msgstr "Создайте VDC" #: netbox/templates/dcim/device.html:175 #: netbox/templates/dcim/device_edit.html:64 -#: netbox/virtualization/forms/model_forms.py:223 +#: netbox/virtualization/forms/model_forms.py:230 msgid "Management" msgstr "Управление" @@ -12675,35 +13298,6 @@ msgstr "Добавить порт питания" msgid "Add Rear Ports" msgstr "Добавить задние порты" -#: netbox/templates/dcim/device/render_config.html:5 -#: netbox/templates/virtualization/virtualmachine/render_config.html:5 -msgid "Config" -msgstr "Конфигурация" - -#: netbox/templates/dcim/device/render_config.html:35 -#: netbox/templates/virtualization/virtualmachine/render_config.html:35 -msgid "Context Data" -msgstr "Контекстные данные" - -#: netbox/templates/dcim/device/render_config.html:55 -#: netbox/templates/virtualization/virtualmachine/render_config.html:55 -msgid "Rendered Config" -msgstr "Отображенная конфигурация" - -#: netbox/templates/dcim/device/render_config.html:57 -#: netbox/templates/virtualization/virtualmachine/render_config.html:57 -msgid "Download" -msgstr "Скачать" - -#: netbox/templates/dcim/device/render_config.html:64 -#: netbox/templates/virtualization/virtualmachine/render_config.html:64 -msgid "Error rendering template" -msgstr "Ошибка при отображении шаблона" - -#: netbox/templates/dcim/device/render_config.html:70 -msgid "No configuration template has been assigned for this device." -msgstr "" - #: netbox/templates/dcim/device_edit.html:44 msgid "Parent Bay" msgstr "Родительский залив" @@ -12770,12 +13364,12 @@ msgid "VM Role" msgstr "Роль виртуальной машины" #: netbox/templates/dcim/devicetype.html:18 -#: netbox/templates/dcim/moduletype.html:29 +#: netbox/templates/dcim/moduletype.html:31 msgid "Model Name" msgstr "Название модели" #: netbox/templates/dcim/devicetype.html:25 -#: netbox/templates/dcim/moduletype.html:33 +#: netbox/templates/dcim/moduletype.html:35 msgid "Part Number" msgstr "Номер детали" @@ -12800,8 +13394,8 @@ msgid "Rear Port Position" msgstr "Положение заднего порта" #: netbox/templates/dcim/frontport.html:72 -#: netbox/templates/dcim/interface.html:144 -#: netbox/templates/dcim/poweroutlet.html:63 +#: netbox/templates/dcim/interface.html:201 +#: netbox/templates/dcim/poweroutlet.html:73 #: netbox/templates/dcim/powerport.html:63 #: netbox/templates/dcim/rearport.html:68 msgid "Marked as Connected" @@ -12901,77 +13495,79 @@ msgid "PoE Type" msgstr "Тип PoE" #: netbox/templates/dcim/interface.html:81 -#: netbox/templates/virtualization/vminterface.html:63 +#: netbox/templates/virtualization/vminterface.html:55 +#: netbox/virtualization/forms/model_forms.py:395 msgid "802.1Q Mode" msgstr "Режим 802.1Q" -#: netbox/templates/dcim/interface.html:125 -#: netbox/templates/virtualization/vminterface.html:59 -msgid "MAC Address" -msgstr "MAC-адрес" +#: netbox/templates/dcim/interface.html:156 +#: netbox/templates/virtualization/vminterface.html:88 +msgid "VLAN Translation" +msgstr "Трансляция VLAN" -#: netbox/templates/dcim/interface.html:151 +#: netbox/templates/dcim/interface.html:208 msgid "Wireless Link" msgstr "Беспроводная связь" -#: netbox/templates/dcim/interface.html:218 netbox/vpn/choices.py:63 -msgid "Peer" -msgstr "Peer" - -#: netbox/templates/dcim/interface.html:230 +#: netbox/templates/dcim/interface.html:287 #: netbox/templates/wireless/inc/wirelesslink_interface.html:26 msgid "Channel" msgstr "Канал" -#: netbox/templates/dcim/interface.html:239 +#: netbox/templates/dcim/interface.html:296 #: netbox/templates/wireless/inc/wirelesslink_interface.html:32 msgid "Channel Frequency" msgstr "Частота канала" -#: netbox/templates/dcim/interface.html:242 -#: netbox/templates/dcim/interface.html:250 -#: netbox/templates/dcim/interface.html:261 -#: netbox/templates/dcim/interface.html:269 +#: netbox/templates/dcim/interface.html:299 +#: netbox/templates/dcim/interface.html:307 +#: netbox/templates/dcim/interface.html:318 +#: netbox/templates/dcim/interface.html:326 msgid "MHz" msgstr "МГц" -#: netbox/templates/dcim/interface.html:258 +#: netbox/templates/dcim/interface.html:315 #: netbox/templates/wireless/inc/wirelesslink_interface.html:42 msgid "Channel Width" msgstr "Ширина канала" -#: netbox/templates/dcim/interface.html:285 +#: netbox/templates/dcim/interface.html:342 #: netbox/templates/wireless/wirelesslan.html:14 #: netbox/templates/wireless/wirelesslink.html:21 -#: netbox/wireless/forms/bulk_edit.py:60 -#: netbox/wireless/forms/bulk_edit.py:102 -#: netbox/wireless/forms/filtersets.py:40 -#: netbox/wireless/forms/filtersets.py:80 netbox/wireless/models.py:82 -#: netbox/wireless/models.py:156 netbox/wireless/tables/wirelesslan.py:44 +#: netbox/wireless/forms/bulk_edit.py:62 +#: netbox/wireless/forms/bulk_edit.py:105 +#: netbox/wireless/forms/filtersets.py:43 +#: netbox/wireless/forms/filtersets.py:108 netbox/wireless/models.py:82 +#: netbox/wireless/models.py:153 netbox/wireless/tables/wirelesslan.py:44 msgid "SSID" msgstr "SSID" -#: netbox/templates/dcim/interface.html:305 +#: netbox/templates/dcim/interface.html:362 msgid "LAG Members" msgstr "Члены LAG" -#: netbox/templates/dcim/interface.html:323 +#: netbox/templates/dcim/interface.html:380 msgid "No member interfaces" msgstr "Нет интерфейсов участников" -#: netbox/templates/dcim/interface.html:343 +#: netbox/templates/dcim/interface.html:400 #: netbox/templates/ipam/fhrpgroup.html:73 #: netbox/templates/ipam/iprange/ip_addresses.html:7 #: netbox/templates/ipam/prefix/ip_addresses.html:7 -#: netbox/templates/virtualization/vminterface.html:89 +#: netbox/templates/virtualization/vminterface.html:105 msgid "Add IP Address" msgstr "Добавить IP-адрес" +#: netbox/templates/dcim/interface.html:417 +#: netbox/templates/virtualization/vminterface.html:123 +msgid "Add MAC Address" +msgstr "Добавить MAC-адрес" + #: netbox/templates/dcim/inventoryitem.html:24 msgid "Parent Item" msgstr "Родительский товар" -#: netbox/templates/dcim/inventoryitem.html:48 +#: netbox/templates/dcim/inventoryitem.html:52 msgid "Part ID" msgstr "Номер модели" @@ -12991,6 +13587,10 @@ msgstr "Добавить Локацию" msgid "Add a Device" msgstr "Добавить устройство" +#: netbox/templates/dcim/macaddress.html:36 +msgid "Primary for interface" +msgstr "Основное для интерфейса" + #: netbox/templates/dcim/manufacturer.html:16 msgid "Add Device Type" msgstr "Добавить тип устройства" @@ -13021,7 +13621,7 @@ msgctxt "Abbreviation for amperes" msgid "A" msgstr "A" -#: netbox/templates/dcim/poweroutlet.html:48 +#: netbox/templates/dcim/poweroutlet.html:58 msgid "Feed Leg" msgstr "Фаза электропитания" @@ -13453,11 +14053,19 @@ msgstr "Невозможно загрузить содержимое. Невер msgid "No content found" msgstr "Контент не найден" -#: netbox/templates/extras/dashboard/widgets/rssfeed.html:18 +#: netbox/templates/extras/dashboard/widgets/rssfeed.html:17 +msgid "" +"This RSS feed requires an external connection. Check the ISOLATED_DEPLOYMENT" +" setting." +msgstr "" +"Для этого RSS-канала требуется внешнее подключение. Проверьте настройку " +"ISOLATED_DEPLOYMENT." + +#: netbox/templates/extras/dashboard/widgets/rssfeed.html:22 msgid "There was a problem fetching the RSS feed" msgstr "Возникла проблема при загрузке RSS-канала" -#: netbox/templates/extras/dashboard/widgets/rssfeed.html:21 +#: netbox/templates/extras/dashboard/widgets/rssfeed.html:25 msgid "HTTP" msgstr "HTTP" @@ -13527,6 +14135,30 @@ msgstr "Исходные контексты" msgid "New Journal Entry" msgstr "Новая запись в журнале" +#: netbox/templates/extras/object_render_config.html:6 +msgid "Config" +msgstr "Конфигурация" + +#: netbox/templates/extras/object_render_config.html:36 +msgid "Context Data" +msgstr "Контекстные данные" + +#: netbox/templates/extras/object_render_config.html:56 +msgid "Rendered Config" +msgstr "Отображенная конфигурация" + +#: netbox/templates/extras/object_render_config.html:58 +msgid "Download" +msgstr "Скачать" + +#: netbox/templates/extras/object_render_config.html:65 +msgid "Error rendering template" +msgstr "Ошибка при отображении шаблона" + +#: netbox/templates/extras/object_render_config.html:71 +msgid "No configuration template has been assigned." +msgstr "Шаблон конфигурации не назначен." + #: netbox/templates/extras/report/base.html:30 msgid "Report" msgstr "Отчет" @@ -13614,7 +14246,7 @@ msgstr "Любое" msgid "Tagged Item Types" msgstr "Типы товаров с тегами" -#: netbox/templates/extras/tag.html:81 +#: netbox/templates/extras/tag.html:82 msgid "Tagged Objects" msgstr "Объекты с тегами" @@ -13898,6 +14530,21 @@ msgstr "Все уведомления" msgid "Select" msgstr "Выберите" +#: netbox/templates/htmx/quick_add.html:7 +msgid "Quick Add" +msgstr "Быстрое добавление" + +#: netbox/templates/htmx/quick_add_created.html:18 +#, python-format +msgid "" +"\n" +" Created %(object_type)s %(object)s\n" +" " +msgstr "" +"\n" +" Создан %(object_type)s %(object)s\n" +" " + #: netbox/templates/inc/filter_list.html:43 #: netbox/utilities/templates/helpers/table_config_form.html:39 msgid "Reset" @@ -13969,15 +14616,11 @@ msgstr "Очистить сортировку" msgid "Help center" msgstr "Справочный центр" -#: netbox/templates/inc/user_menu.html:41 -msgid "Django Admin" -msgstr "" - -#: netbox/templates/inc/user_menu.html:61 +#: netbox/templates/inc/user_menu.html:56 msgid "Log Out" msgstr "Выйти" -#: netbox/templates/inc/user_menu.html:68 netbox/templates/login.html:38 +#: netbox/templates/inc/user_menu.html:63 netbox/templates/login.html:38 msgid "Log In" msgstr "Войти" @@ -14074,43 +14717,43 @@ msgstr "Начальный адрес" msgid "Ending Address" msgstr "Конечный адрес" -#: netbox/templates/ipam/iprange.html:33 netbox/templates/ipam/prefix.html:110 +#: netbox/templates/ipam/iprange.html:33 netbox/templates/ipam/prefix.html:106 msgid "Marked fully utilized" msgstr "Отмечено как полностью использованное" -#: netbox/templates/ipam/prefix.html:99 +#: netbox/templates/ipam/prefix.html:95 msgid "Addressing Details" msgstr "Детали адресации" -#: netbox/templates/ipam/prefix.html:118 +#: netbox/templates/ipam/prefix.html:114 msgid "Child IPs" msgstr "Зависимые IP-адреса" -#: netbox/templates/ipam/prefix.html:126 +#: netbox/templates/ipam/prefix.html:122 msgid "Available IPs" msgstr "Доступные IP-адреса" -#: netbox/templates/ipam/prefix.html:138 +#: netbox/templates/ipam/prefix.html:134 msgid "First available IP" msgstr "Первый доступный IP-адрес" -#: netbox/templates/ipam/prefix.html:179 +#: netbox/templates/ipam/prefix.html:175 msgid "Prefix Details" msgstr "Детали префикса" -#: netbox/templates/ipam/prefix.html:185 +#: netbox/templates/ipam/prefix.html:181 msgid "Network Address" msgstr "Сетевой адрес" -#: netbox/templates/ipam/prefix.html:189 +#: netbox/templates/ipam/prefix.html:185 msgid "Network Mask" msgstr "Сетевая маска" -#: netbox/templates/ipam/prefix.html:193 +#: netbox/templates/ipam/prefix.html:189 msgid "Wildcard Mask" msgstr "Обратная маска" -#: netbox/templates/ipam/prefix.html:197 +#: netbox/templates/ipam/prefix.html:193 msgid "Broadcast Address" msgstr "Адрес вещания" @@ -14150,14 +14793,30 @@ msgstr "Импорт L2VPN" msgid "Exporting L2VPNs" msgstr "Экспорт L2VPN" -#: netbox/templates/ipam/vlan.html:88 +#: netbox/templates/ipam/vlan.html:66 +msgid "Q-in-Q Role" +msgstr "Роль Q-in-Q" + +#: netbox/templates/ipam/vlan.html:104 msgid "Add a Prefix" msgstr "Добавить префикс" +#: netbox/templates/ipam/vlan.html:114 +msgid "Customer VLANs" +msgstr "VLAN клиентов" + +#: netbox/templates/ipam/vlan.html:118 +msgid "Add a VLAN" +msgstr "Добавить VLAN" + #: netbox/templates/ipam/vlangroup.html:18 msgid "Add VLAN" msgstr "Добавить VLAN" +#: netbox/templates/ipam/vlantranslationpolicy.html:51 +msgid "Add Rule" +msgstr "Добавить правило" + #: netbox/templates/ipam/vrf.html:16 msgid "Route Distinguisher" msgstr "RD" @@ -14234,7 +14893,7 @@ msgstr "" #: netbox/templates/tenancy/contact.html:18 netbox/tenancy/filtersets.py:147 #: netbox/tenancy/forms/bulk_edit.py:137 -#: netbox/tenancy/forms/filtersets.py:102 netbox/tenancy/forms/forms.py:56 +#: netbox/tenancy/forms/filtersets.py:102 netbox/tenancy/forms/forms.py:57 #: netbox/tenancy/forms/model_forms.py:106 #: netbox/tenancy/forms/model_forms.py:130 #: netbox/tenancy/tables/contacts.py:98 @@ -14252,7 +14911,7 @@ msgid "Phone" msgstr "Телефон" #: netbox/templates/tenancy/contactgroup.html:18 -#: netbox/tenancy/forms/forms.py:66 netbox/tenancy/forms/model_forms.py:75 +#: netbox/tenancy/forms/forms.py:67 netbox/tenancy/forms/model_forms.py:75 msgid "Contact Group" msgstr "Контактная группа" @@ -14261,7 +14920,7 @@ msgid "Add Contact Group" msgstr "Добавить контактную группу" #: netbox/templates/tenancy/contactrole.html:15 -#: netbox/tenancy/filtersets.py:152 netbox/tenancy/forms/forms.py:61 +#: netbox/tenancy/filtersets.py:152 netbox/tenancy/forms/forms.py:62 #: netbox/tenancy/forms/model_forms.py:87 msgid "Contact Role" msgstr "Роль контакта" @@ -14275,8 +14934,8 @@ msgid "Add Tenant" msgstr "Добавить арендатора" #: netbox/templates/tenancy/tenantgroup.html:26 -#: netbox/tenancy/forms/model_forms.py:32 netbox/tenancy/tables/columns.py:51 -#: netbox/tenancy/tables/columns.py:61 +#: netbox/tenancy/forms/model_forms.py:32 netbox/tenancy/tables/columns.py:36 +#: netbox/tenancy/tables/columns.py:46 msgid "Tenant Group" msgstr "Группа арендаторов" @@ -14307,21 +14966,21 @@ msgstr "Ограничения" msgid "Assigned Users" msgstr "Назначенные пользователи" -#: netbox/templates/virtualization/cluster.html:52 +#: netbox/templates/virtualization/cluster.html:56 msgid "Allocated Resources" msgstr "Выделенные ресурсы" -#: netbox/templates/virtualization/cluster.html:55 +#: netbox/templates/virtualization/cluster.html:59 #: netbox/templates/virtualization/virtualmachine.html:125 msgid "Virtual CPUs" msgstr "Виртуальные процессоры" -#: netbox/templates/virtualization/cluster.html:59 +#: netbox/templates/virtualization/cluster.html:63 #: netbox/templates/virtualization/virtualmachine.html:129 msgid "Memory" msgstr "Память" -#: netbox/templates/virtualization/cluster.html:69 +#: netbox/templates/virtualization/cluster.html:73 #: netbox/templates/virtualization/virtualmachine.html:140 msgid "Disk Space" msgstr "Дисковое пространство" @@ -14357,13 +15016,13 @@ msgid "Add Cluster" msgstr "Добавить кластер" #: netbox/templates/virtualization/clustergroup.html:19 -#: netbox/virtualization/forms/model_forms.py:50 +#: netbox/virtualization/forms/model_forms.py:53 msgid "Cluster Group" msgstr "Кластерная группа" #: netbox/templates/virtualization/clustertype.html:19 #: netbox/templates/virtualization/virtualmachine.html:110 -#: netbox/virtualization/forms/model_forms.py:36 +#: netbox/virtualization/forms/model_forms.py:39 msgid "Cluster Type" msgstr "Тип кластера" @@ -14372,8 +15031,8 @@ msgid "Virtual Disk" msgstr "Виртуальный диск" #: netbox/templates/virtualization/virtualmachine.html:122 -#: netbox/virtualization/forms/bulk_edit.py:190 -#: netbox/virtualization/forms/model_forms.py:224 +#: netbox/virtualization/forms/bulk_edit.py:172 +#: netbox/virtualization/forms/model_forms.py:231 msgid "Resources" msgstr "Ресурсы" @@ -14381,10 +15040,6 @@ msgstr "Ресурсы" msgid "Add Virtual Disk" msgstr "Добавить виртуальный диск" -#: netbox/templates/virtualization/virtualmachine/render_config.html:70 -msgid "No configuration template has been assigned for this virtual machine." -msgstr "" - #: netbox/templates/vpn/ikepolicy.html:10 #: netbox/templates/vpn/ipsecprofile.html:33 netbox/vpn/tables/crypto.py:166 msgid "IKE Policy" @@ -14407,7 +15062,7 @@ msgstr "Показать секрет" #: netbox/templates/vpn/ipsecpolicy.html:45 #: netbox/templates/vpn/ipsecprofile.html:52 #: netbox/templates/vpn/ipsecprofile.html:77 -#: netbox/vpn/forms/model_forms.py:316 netbox/vpn/forms/model_forms.py:352 +#: netbox/vpn/forms/model_forms.py:317 netbox/vpn/forms/model_forms.py:354 #: netbox/vpn/tables/crypto.py:68 netbox/vpn/tables/crypto.py:134 msgid "Proposals" msgstr "Предложения" @@ -14453,12 +15108,12 @@ msgid "IPSec Policy" msgstr "Политика IPsec" #: netbox/templates/vpn/ipsecpolicy.html:21 netbox/vpn/forms/bulk_edit.py:210 -#: netbox/vpn/models/crypto.py:193 +#: netbox/vpn/models/crypto.py:191 msgid "PFS group" msgstr "Группа PFS" #: netbox/templates/vpn/ipsecprofile.html:10 -#: netbox/vpn/forms/model_forms.py:54 +#: netbox/vpn/forms/model_forms.py:55 msgid "IPSec Profile" msgstr "Профиль IPsec" @@ -14484,10 +15139,6 @@ msgstr "Атрибуты L2VPN" msgid "Add a Termination" msgstr "Добавить окончание" -#: netbox/templates/vpn/tunnel.html:9 -msgid "Add Termination" -msgstr "Добавить окончание" - #: netbox/templates/vpn/tunnel.html:37 netbox/vpn/forms/bulk_edit.py:49 #: netbox/vpn/forms/bulk_import.py:48 netbox/vpn/forms/filtersets.py:57 msgid "Encapsulation" @@ -14495,7 +15146,7 @@ msgstr "Инкапсуляция" #: netbox/templates/vpn/tunnel.html:41 netbox/vpn/forms/bulk_edit.py:55 #: netbox/vpn/forms/bulk_import.py:53 netbox/vpn/forms/filtersets.py:64 -#: netbox/vpn/models/crypto.py:250 netbox/vpn/tables/tunnels.py:51 +#: netbox/vpn/models/crypto.py:246 netbox/vpn/tables/tunnels.py:51 msgid "IPSec profile" msgstr "Профиль IPsec" @@ -14518,8 +15169,8 @@ msgid "Tunnel Termination" msgstr "Окончание Туннеля" #: netbox/templates/vpn/tunneltermination.html:35 -#: netbox/vpn/forms/bulk_import.py:107 netbox/vpn/forms/model_forms.py:102 -#: netbox/vpn/forms/model_forms.py:138 netbox/vpn/forms/model_forms.py:247 +#: netbox/vpn/forms/bulk_import.py:107 netbox/vpn/forms/model_forms.py:103 +#: netbox/vpn/forms/model_forms.py:139 netbox/vpn/forms/model_forms.py:248 #: netbox/vpn/tables/tunnels.py:101 msgid "Outside IP" msgstr "Внешний IP-адрес" @@ -14542,7 +15193,7 @@ msgctxt "Abbreviation for megahertz" msgid "MHz" msgstr "МГц" -#: netbox/templates/wireless/wirelesslan.html:57 +#: netbox/templates/wireless/wirelesslan.html:65 msgid "Attached Interfaces" msgstr "Подключенные интерфейсы" @@ -14551,7 +15202,7 @@ msgid "Add Wireless LAN" msgstr "Добавить беспроводную локальную сеть" #: netbox/templates/wireless/wirelesslangroup.html:26 -#: netbox/wireless/forms/model_forms.py:28 +#: netbox/wireless/forms/model_forms.py:29 msgid "Wireless LAN Group" msgstr "Группа беспроводных локальных сетей" @@ -14563,13 +15214,6 @@ msgstr "Добавить группу беспроводной локально msgid "Link Properties" msgstr "Свойства ссылки" -#: netbox/templates/wireless/wirelesslink.html:38 -#: netbox/wireless/forms/bulk_edit.py:129 -#: netbox/wireless/forms/filtersets.py:102 -#: netbox/wireless/forms/model_forms.py:165 -msgid "Distance" -msgstr "Расстояние" - #: netbox/tenancy/filtersets.py:28 msgid "Parent contact group (ID)" msgstr "Контактная группа родителей (ID)" @@ -14640,47 +15284,47 @@ msgstr "контактная группа" msgid "contact groups" msgstr "контактные группы" -#: netbox/tenancy/models/contacts.py:48 +#: netbox/tenancy/models/contacts.py:42 msgid "contact role" msgstr "роль контакта" -#: netbox/tenancy/models/contacts.py:49 +#: netbox/tenancy/models/contacts.py:43 msgid "contact roles" msgstr "контактные роли" -#: netbox/tenancy/models/contacts.py:68 +#: netbox/tenancy/models/contacts.py:63 msgid "title" msgstr "название" -#: netbox/tenancy/models/contacts.py:73 +#: netbox/tenancy/models/contacts.py:68 msgid "phone" msgstr "телефон" -#: netbox/tenancy/models/contacts.py:78 +#: netbox/tenancy/models/contacts.py:73 msgid "email" msgstr "email" -#: netbox/tenancy/models/contacts.py:87 +#: netbox/tenancy/models/contacts.py:82 msgid "link" msgstr "ссылка на сайт" -#: netbox/tenancy/models/contacts.py:103 +#: netbox/tenancy/models/contacts.py:98 msgid "contact" msgstr "контакт" -#: netbox/tenancy/models/contacts.py:104 +#: netbox/tenancy/models/contacts.py:99 msgid "contacts" msgstr "контакты" -#: netbox/tenancy/models/contacts.py:153 +#: netbox/tenancy/models/contacts.py:146 msgid "contact assignment" msgstr "назначение контакта" -#: netbox/tenancy/models/contacts.py:154 +#: netbox/tenancy/models/contacts.py:147 msgid "contact assignments" msgstr "назначение контактов" -#: netbox/tenancy/models/contacts.py:170 +#: netbox/tenancy/models/contacts.py:163 #, python-brace-format msgid "Contacts cannot be assigned to this object type ({type})." msgstr "Контакты не могут быть присвоены этому типу объекта ({type})." @@ -14693,19 +15337,19 @@ msgstr "группа арендаторов" msgid "tenant groups" msgstr "группы арендаторов" -#: netbox/tenancy/models/tenants.py:70 +#: netbox/tenancy/models/tenants.py:68 msgid "Tenant name must be unique per group." msgstr "Имя арендатора должно быть уникальным для каждой группы." -#: netbox/tenancy/models/tenants.py:80 +#: netbox/tenancy/models/tenants.py:78 msgid "Tenant slug must be unique per group." msgstr "Подстрока арендатора должна быть уникальной для каждой группы." -#: netbox/tenancy/models/tenants.py:88 +#: netbox/tenancy/models/tenants.py:86 msgid "tenant" msgstr "арендатор" -#: netbox/tenancy/models/tenants.py:89 +#: netbox/tenancy/models/tenants.py:87 msgid "tenants" msgstr "арендаторы" @@ -14933,7 +15577,7 @@ msgstr "токен" msgid "tokens" msgstr "токены" -#: netbox/users/models/users.py:57 netbox/vpn/models/crypto.py:42 +#: netbox/users/models/users.py:57 netbox/vpn/models/crypto.py:43 msgid "group" msgstr "группа" @@ -14982,26 +15626,26 @@ msgstr "" msgid "{name} has a key defined but CHOICES is not a list" msgstr "{name} имеет определенный ключ, но CHOICES не является списком" -#: netbox/utilities/conversion.py:19 +#: netbox/utilities/conversion.py:20 msgid "Weight must be a positive number" msgstr "Вес должен быть положительным числом" -#: netbox/utilities/conversion.py:21 +#: netbox/utilities/conversion.py:22 #, python-brace-format msgid "Invalid value '{weight}' for weight (must be a number)" msgstr "Неверное значение '{weight}'для веса (должно быть число)" -#: netbox/utilities/conversion.py:32 netbox/utilities/conversion.py:62 +#: netbox/utilities/conversion.py:33 netbox/utilities/conversion.py:63 #, python-brace-format msgid "Unknown unit {unit}. Must be one of the following: {valid_units}" msgstr "" "Неизвестная единица {unit}. Должно быть одно из следующих: {valid_units}" -#: netbox/utilities/conversion.py:45 +#: netbox/utilities/conversion.py:46 msgid "Length must be a positive number" msgstr "Длина должна быть положительным числом" -#: netbox/utilities/conversion.py:47 +#: netbox/utilities/conversion.py:48 #, python-brace-format msgid "Invalid value '{length}' for length (must be a number)" msgstr "Неверное значение '{length}'для длины (должно быть число)" @@ -15019,11 +15663,11 @@ msgstr "" msgid "More than 50" msgstr "Более 50" -#: netbox/utilities/fields.py:30 +#: netbox/utilities/fields.py:29 msgid "RGB color in hexadecimal. Example: " msgstr "Цвет RGB в шестнадцатеричном формате. Пример:" -#: netbox/utilities/fields.py:159 +#: netbox/utilities/fields.py:158 #, python-format msgid "" "%s(%r) is invalid. to_model parameter to CounterCacheField must be a string " @@ -15032,7 +15676,7 @@ msgstr "" "%s(%r) недействителен. Параметр to_model для CounterCacheField должен быть " "строкой в формате app.model" -#: netbox/utilities/fields.py:169 +#: netbox/utilities/fields.py:168 #, python-format msgid "" "%s(%r) is invalid. to_field parameter to CounterCacheField must be a string " @@ -15260,14 +15904,14 @@ msgstr "Неверный атрибут связанного объекта дл msgid "Required column header \"{header}\" not found." msgstr "Обязательный заголовок столбца»{header}\"не найден." -#: netbox/utilities/forms/widgets/apiselect.py:124 +#: netbox/utilities/forms/widgets/apiselect.py:133 #, python-brace-format msgid "Missing required value for dynamic query param: '{dynamic_params}'" msgstr "" "Отсутствует обязательное значение параметра динамического запроса: " "'{dynamic_params}'" -#: netbox/utilities/forms/widgets/apiselect.py:141 +#: netbox/utilities/forms/widgets/apiselect.py:150 #, python-brace-format msgid "Missing required value for static query param: '{static_params}'" msgstr "" @@ -15394,10 +16038,14 @@ msgstr "Поиск..." msgid "Search NetBox" msgstr "Поиск в NetBox" -#: netbox/utilities/templates/widgets/apiselect.html:7 +#: netbox/utilities/templates/widgets/apiselect.html:8 msgid "Open selector" msgstr "Открыть селектор" +#: netbox/utilities/templates/widgets/apiselect.html:22 +msgid "Quick add" +msgstr "Быстрое добавление" + #: netbox/utilities/templates/widgets/markdown_input.html:6 msgid "Write" msgstr "Текст" @@ -15433,113 +16081,119 @@ msgstr "" "ObjectPermissionRequiredMixin можно использовать только в представлениях, " "определяющих базовый набор запросов" -#: netbox/virtualization/filtersets.py:79 +#: netbox/virtualization/choices.py:50 +msgid "Paused" +msgstr "Приостановлено" + +#: netbox/virtualization/filtersets.py:45 msgid "Parent group (ID)" msgstr "Родительская группа (ID)" -#: netbox/virtualization/filtersets.py:85 +#: netbox/virtualization/filtersets.py:51 msgid "Parent group (slug)" msgstr "Родительская группа (подстрока)" -#: netbox/virtualization/filtersets.py:89 -#: netbox/virtualization/filtersets.py:141 +#: netbox/virtualization/filtersets.py:55 +#: netbox/virtualization/filtersets.py:107 msgid "Cluster type (ID)" msgstr "Тип кластера (ID)" -#: netbox/virtualization/filtersets.py:151 -#: netbox/virtualization/filtersets.py:271 +#: netbox/virtualization/filtersets.py:117 +#: netbox/virtualization/filtersets.py:237 msgid "Cluster (ID)" msgstr "Кластер (ID)" -#: netbox/virtualization/forms/bulk_edit.py:166 -#: netbox/virtualization/models/virtualmachines.py:115 +#: netbox/virtualization/forms/bulk_edit.py:148 +#: netbox/virtualization/models/virtualmachines.py:110 msgid "vCPUs" msgstr "Виртуальные процессоры" -#: netbox/virtualization/forms/bulk_edit.py:170 +#: netbox/virtualization/forms/bulk_edit.py:152 msgid "Memory (MB)" msgstr "Память (МБ)" -#: netbox/virtualization/forms/bulk_edit.py:174 +#: netbox/virtualization/forms/bulk_edit.py:156 msgid "Disk (MB)" msgstr "Диск (МБ)" -#: netbox/virtualization/forms/bulk_edit.py:334 -#: netbox/virtualization/forms/filtersets.py:251 +#: netbox/virtualization/forms/bulk_edit.py:324 +#: netbox/virtualization/forms/filtersets.py:256 msgid "Size (MB)" msgstr "Размер (МБ)" -#: netbox/virtualization/forms/bulk_import.py:44 +#: netbox/virtualization/forms/bulk_import.py:45 msgid "Type of cluster" msgstr "Тип кластера" -#: netbox/virtualization/forms/bulk_import.py:51 +#: netbox/virtualization/forms/bulk_import.py:52 msgid "Assigned cluster group" msgstr "Назначенная кластерная группа" -#: netbox/virtualization/forms/bulk_import.py:96 +#: netbox/virtualization/forms/bulk_import.py:102 msgid "Assigned cluster" msgstr "Назначенный кластер" -#: netbox/virtualization/forms/bulk_import.py:103 +#: netbox/virtualization/forms/bulk_import.py:109 msgid "Assigned device within cluster" msgstr "Назначенное устройство в кластере" -#: netbox/virtualization/forms/filtersets.py:183 +#: netbox/virtualization/forms/filtersets.py:188 msgid "Serial number" msgstr "Серийный номер" -#: netbox/virtualization/forms/model_forms.py:153 +#: netbox/virtualization/forms/model_forms.py:158 #, python-brace-format msgid "" -"{device} belongs to a different site ({device_site}) than the cluster " -"({cluster_site})" +"{device} belongs to a different {scope_field} ({device_scope}) than the " +"cluster ({cluster_scope})" msgstr "" +"{device} принадлежит другому {scope_field} ({device_scope}), чем кластер " +"({cluster_scope})" -#: netbox/virtualization/forms/model_forms.py:192 +#: netbox/virtualization/forms/model_forms.py:199 msgid "Optionally pin this VM to a specific host device within the cluster" msgstr "" "Дополнительно подключите эту виртуальную машину к определенному хост-" "устройству в кластере." -#: netbox/virtualization/forms/model_forms.py:221 +#: netbox/virtualization/forms/model_forms.py:228 msgid "Site/Cluster" msgstr "Сайт/кластер" -#: netbox/virtualization/forms/model_forms.py:244 +#: netbox/virtualization/forms/model_forms.py:251 msgid "Disk size is managed via the attachment of virtual disks." msgstr "Размер диска регулируется путем вложения виртуальных дисков." -#: netbox/virtualization/forms/model_forms.py:372 -#: netbox/virtualization/tables/virtualmachines.py:111 +#: netbox/virtualization/forms/model_forms.py:405 +#: netbox/virtualization/tables/virtualmachines.py:81 msgid "Disk" msgstr "Диск" -#: netbox/virtualization/models/clusters.py:25 +#: netbox/virtualization/models/clusters.py:26 msgid "cluster type" msgstr "тип кластера" -#: netbox/virtualization/models/clusters.py:26 +#: netbox/virtualization/models/clusters.py:27 msgid "cluster types" msgstr "типы кластеров" -#: netbox/virtualization/models/clusters.py:45 +#: netbox/virtualization/models/clusters.py:43 msgid "cluster group" msgstr "кластерная группа" -#: netbox/virtualization/models/clusters.py:46 +#: netbox/virtualization/models/clusters.py:44 msgid "cluster groups" msgstr "кластерные группы" -#: netbox/virtualization/models/clusters.py:121 +#: netbox/virtualization/models/clusters.py:110 msgid "cluster" msgstr "кластер" -#: netbox/virtualization/models/clusters.py:122 +#: netbox/virtualization/models/clusters.py:111 msgid "clusters" msgstr "кластеры" -#: netbox/virtualization/models/clusters.py:141 +#: netbox/virtualization/models/clusters.py:137 #, python-brace-format msgid "" "{count} devices are assigned as hosts for this cluster but are not in site " @@ -15548,48 +16202,57 @@ msgstr "" "{count} устройства назначены в качестве хостов для этого кластера, но их нет" " на сайте {site}" -#: netbox/virtualization/models/virtualmachines.py:123 +#: netbox/virtualization/models/clusters.py:144 +#, python-brace-format +msgid "" +"{count} devices are assigned as hosts for this cluster but are not in " +"location {location}" +msgstr "" +"{count} устройства назначены в качестве хостов для этого кластера, но не " +"находятся на месте {location}" + +#: netbox/virtualization/models/virtualmachines.py:118 msgid "memory (MB)" msgstr "память (МБ)" -#: netbox/virtualization/models/virtualmachines.py:128 +#: netbox/virtualization/models/virtualmachines.py:123 msgid "disk (MB)" msgstr "диск (МБ)" -#: netbox/virtualization/models/virtualmachines.py:166 +#: netbox/virtualization/models/virtualmachines.py:161 msgid "Virtual machine name must be unique per cluster." msgstr "Имя виртуальной машины должно быть уникальным для каждого кластера." -#: netbox/virtualization/models/virtualmachines.py:169 +#: netbox/virtualization/models/virtualmachines.py:164 msgid "virtual machine" msgstr "виртуальная машина" -#: netbox/virtualization/models/virtualmachines.py:170 +#: netbox/virtualization/models/virtualmachines.py:165 msgid "virtual machines" msgstr "виртуальные машины" -#: netbox/virtualization/models/virtualmachines.py:184 +#: netbox/virtualization/models/virtualmachines.py:176 msgid "A virtual machine must be assigned to a site and/or cluster." msgstr "Виртуальная машина должна быть назначена сайту и/или кластеру." -#: netbox/virtualization/models/virtualmachines.py:191 +#: netbox/virtualization/models/virtualmachines.py:183 #, python-brace-format msgid "" "The selected cluster ({cluster}) is not assigned to this site ({site})." msgstr "Выбранный кластер ({cluster}) не относится к этому сайту ({site})." -#: netbox/virtualization/models/virtualmachines.py:198 +#: netbox/virtualization/models/virtualmachines.py:190 msgid "Must specify a cluster when assigning a host device." msgstr "При назначении хост-устройства необходимо указать кластер." -#: netbox/virtualization/models/virtualmachines.py:203 +#: netbox/virtualization/models/virtualmachines.py:195 #, python-brace-format msgid "" "The selected device ({device}) is not assigned to this cluster ({cluster})." msgstr "" "Выбранное устройство ({device}) не относится к этому кластеру ({cluster})." -#: netbox/virtualization/models/virtualmachines.py:215 +#: netbox/virtualization/models/virtualmachines.py:207 #, python-brace-format msgid "" "The specified disk size ({size}) must match the aggregate size of assigned " @@ -15598,18 +16261,18 @@ msgstr "" "Указанный размер диска ({size}) должен соответствовать совокупному размеру " "назначенных виртуальных дисков ({total_size})." -#: netbox/virtualization/models/virtualmachines.py:229 +#: netbox/virtualization/models/virtualmachines.py:221 #, python-brace-format msgid "Must be an IPv{family} address. ({ip} is an IPv{version} address.)" msgstr "" "Должен быть IPV{family} адрес. ({ip} является IP-адресом{version} адрес.)" -#: netbox/virtualization/models/virtualmachines.py:238 +#: netbox/virtualization/models/virtualmachines.py:230 #, python-brace-format msgid "The specified IP address ({ip}) is not assigned to this VM." msgstr "Указанный IP-адрес ({ip}) не назначено этой виртуальной машине." -#: netbox/virtualization/models/virtualmachines.py:396 +#: netbox/virtualization/models/virtualmachines.py:376 #, python-brace-format msgid "" "The selected parent interface ({parent}) belongs to a different virtual " @@ -15618,7 +16281,7 @@ msgstr "" "Выбранный родительский интерфейс ({parent}) принадлежит другой виртуальной " "машине ({virtual_machine})." -#: netbox/virtualization/models/virtualmachines.py:411 +#: netbox/virtualization/models/virtualmachines.py:391 #, python-brace-format msgid "" "The selected bridge interface ({bridge}) belongs to a different virtual " @@ -15627,7 +16290,7 @@ msgstr "" "Выбранный интерфейс моста ({bridge}) принадлежит другой виртуальной машине " "({virtual_machine})." -#: netbox/virtualization/models/virtualmachines.py:422 +#: netbox/virtualization/models/virtualmachines.py:402 #, python-brace-format msgid "" "The untagged VLAN ({untagged_vlan}) must belong to the same site as the " @@ -15636,24 +16299,24 @@ msgstr "" "VLAN без тегов ({untagged_vlan}) должна принадлежать тому же сайту, что и " "родительская виртуальная машина интерфейса, или она должна быть глобальной." -#: netbox/virtualization/models/virtualmachines.py:434 +#: netbox/virtualization/models/virtualmachines.py:414 msgid "size (MB)" msgstr "размер (МБ)" -#: netbox/virtualization/models/virtualmachines.py:438 +#: netbox/virtualization/models/virtualmachines.py:418 msgid "virtual disk" msgstr "виртуальный диск" -#: netbox/virtualization/models/virtualmachines.py:439 +#: netbox/virtualization/models/virtualmachines.py:419 msgid "virtual disks" msgstr "виртуальные диски" -#: netbox/virtualization/views.py:273 +#: netbox/virtualization/views.py:289 #, python-brace-format msgid "Added {count} devices to cluster {cluster}" msgstr "Добавлено {count} устройств(-а) для кластеризации {cluster}" -#: netbox/virtualization/views.py:308 +#: netbox/virtualization/views.py:324 #, python-brace-format msgid "Removed {count} devices from cluster {cluster}" msgstr "Удалено {count} устройств(-а) из кластера {cluster}" @@ -15690,14 +16353,6 @@ msgstr "L2TP" msgid "PPTP" msgstr "PPTP" -#: netbox/vpn/choices.py:64 -msgid "Hub" -msgstr "Hub" - -#: netbox/vpn/choices.py:65 -msgid "Spoke" -msgstr "Spoke" - #: netbox/vpn/choices.py:88 msgid "Aggressive" msgstr "Агрессивный" @@ -15815,26 +16470,26 @@ msgstr "VLAN (название)" msgid "Tunnel group" msgstr "Группа туннелей" -#: netbox/vpn/forms/bulk_edit.py:117 netbox/vpn/models/crypto.py:47 +#: netbox/vpn/forms/bulk_edit.py:117 netbox/vpn/models/crypto.py:48 msgid "SA lifetime" msgstr "Время жизни SA" -#: netbox/vpn/forms/bulk_edit.py:151 netbox/wireless/forms/bulk_edit.py:79 -#: netbox/wireless/forms/bulk_edit.py:126 -#: netbox/wireless/forms/filtersets.py:64 -#: netbox/wireless/forms/filtersets.py:98 +#: netbox/vpn/forms/bulk_edit.py:151 netbox/wireless/forms/bulk_edit.py:81 +#: netbox/wireless/forms/bulk_edit.py:129 +#: netbox/wireless/forms/filtersets.py:67 +#: netbox/wireless/forms/filtersets.py:126 msgid "Pre-shared key" msgstr "Предварительный общий ключ" #: netbox/vpn/forms/bulk_edit.py:237 netbox/vpn/forms/bulk_import.py:239 -#: netbox/vpn/forms/filtersets.py:199 netbox/vpn/forms/model_forms.py:370 +#: netbox/vpn/forms/filtersets.py:199 netbox/vpn/forms/model_forms.py:373 #: netbox/vpn/models/crypto.py:104 msgid "IKE policy" msgstr "Политика IKE" #: netbox/vpn/forms/bulk_edit.py:242 netbox/vpn/forms/bulk_import.py:244 -#: netbox/vpn/forms/filtersets.py:204 netbox/vpn/forms/model_forms.py:374 -#: netbox/vpn/models/crypto.py:209 +#: netbox/vpn/forms/filtersets.py:204 netbox/vpn/forms/model_forms.py:377 +#: netbox/vpn/models/crypto.py:207 msgid "IPSec policy" msgstr "Политика IPsec" @@ -15842,10 +16497,6 @@ msgstr "Политика IPsec" msgid "Tunnel encapsulation" msgstr "Инкапсуляция туннелей" -#: netbox/vpn/forms/bulk_import.py:83 -msgid "Operational role" -msgstr "Операционная роль" - #: netbox/vpn/forms/bulk_import.py:90 msgid "Parent device of assigned interface" msgstr "Родительское устройство назначенного интерфейса" @@ -15862,7 +16513,7 @@ msgstr "Интерфейс устройства или виртуальной м msgid "IKE proposal(s)" msgstr "Предложение (предложения) IKE" -#: netbox/vpn/forms/bulk_import.py:215 netbox/vpn/models/crypto.py:197 +#: netbox/vpn/forms/bulk_import.py:215 netbox/vpn/models/crypto.py:195 msgid "Diffie-Hellman group for Perfect Forward Secrecy" msgstr "Группа Диффи-Хеллмана за Perfect Forward Secrecy" @@ -15909,7 +16560,7 @@ msgid "IKE version" msgstr "Версия IKE" #: netbox/vpn/forms/filtersets.py:142 netbox/vpn/forms/filtersets.py:175 -#: netbox/vpn/forms/model_forms.py:298 netbox/vpn/forms/model_forms.py:334 +#: netbox/vpn/forms/model_forms.py:299 netbox/vpn/forms/model_forms.py:336 msgid "Proposal" msgstr "Предложение" @@ -15917,32 +16568,28 @@ msgstr "Предложение" msgid "Assigned Object Type" msgstr "Назначенный тип объекта" -#: netbox/vpn/forms/model_forms.py:95 netbox/vpn/forms/model_forms.py:130 -#: netbox/vpn/forms/model_forms.py:240 netbox/vpn/tables/tunnels.py:91 +#: netbox/vpn/forms/model_forms.py:96 netbox/vpn/forms/model_forms.py:131 +#: netbox/vpn/forms/model_forms.py:241 netbox/vpn/tables/tunnels.py:91 msgid "Tunnel interface" msgstr "Туннельный интерфейс" -#: netbox/vpn/forms/model_forms.py:150 +#: netbox/vpn/forms/model_forms.py:151 msgid "First Termination" msgstr "Первая точка" -#: netbox/vpn/forms/model_forms.py:153 +#: netbox/vpn/forms/model_forms.py:154 msgid "Second Termination" msgstr "Вторая точка" -#: netbox/vpn/forms/model_forms.py:197 +#: netbox/vpn/forms/model_forms.py:198 msgid "This parameter is required when defining a termination." msgstr "Этот параметр необходим при определении точки." -#: netbox/vpn/forms/model_forms.py:320 netbox/vpn/forms/model_forms.py:356 -msgid "Policy" -msgstr "Политика" - -#: netbox/vpn/forms/model_forms.py:487 +#: netbox/vpn/forms/model_forms.py:490 msgid "A termination must specify an interface or VLAN." msgstr "В терминации должен быть указан интерфейс или VLAN." -#: netbox/vpn/forms/model_forms.py:489 +#: netbox/vpn/forms/model_forms.py:492 msgid "" "A termination can only have one terminating object (an interface or VLAN)." msgstr "" @@ -15956,31 +16603,31 @@ msgstr "алгоритм шифрования" msgid "authentication algorithm" msgstr "алгоритм аутентификации" -#: netbox/vpn/models/crypto.py:44 +#: netbox/vpn/models/crypto.py:45 msgid "Diffie-Hellman group ID" msgstr "Идентификатор группы Диффи-Хеллман" -#: netbox/vpn/models/crypto.py:50 +#: netbox/vpn/models/crypto.py:51 msgid "Security association lifetime (in seconds)" msgstr "Срок службы охранной ассоциации (в секундах)" -#: netbox/vpn/models/crypto.py:59 +#: netbox/vpn/models/crypto.py:60 msgid "IKE proposal" msgstr "Предложение IKE" -#: netbox/vpn/models/crypto.py:60 +#: netbox/vpn/models/crypto.py:61 msgid "IKE proposals" msgstr "Предложения IKE" -#: netbox/vpn/models/crypto.py:76 +#: netbox/vpn/models/crypto.py:75 msgid "version" msgstr "версия" -#: netbox/vpn/models/crypto.py:88 netbox/vpn/models/crypto.py:190 +#: netbox/vpn/models/crypto.py:88 netbox/vpn/models/crypto.py:188 msgid "proposals" msgstr "предложений" -#: netbox/vpn/models/crypto.py:91 netbox/wireless/models.py:39 +#: netbox/vpn/models/crypto.py:91 netbox/wireless/models.py:41 msgid "pre-shared key" msgstr "предварительный общий ключ" @@ -15988,19 +16635,19 @@ msgstr "предварительный общий ключ" msgid "IKE policies" msgstr "Политики IKE" -#: netbox/vpn/models/crypto.py:118 +#: netbox/vpn/models/crypto.py:115 msgid "Mode is required for selected IKE version" msgstr "Режим необходим для выбранной версии IKE" -#: netbox/vpn/models/crypto.py:122 +#: netbox/vpn/models/crypto.py:119 msgid "Mode cannot be used for selected IKE version" msgstr "Режим не может быть использован для выбранной версии IKE" -#: netbox/vpn/models/crypto.py:136 +#: netbox/vpn/models/crypto.py:134 msgid "encryption" msgstr "шифрование" -#: netbox/vpn/models/crypto.py:141 +#: netbox/vpn/models/crypto.py:140 msgid "authentication" msgstr "аутентификация" @@ -16020,32 +16667,32 @@ msgstr "Предложение IPsec" msgid "IPSec proposals" msgstr "Предложения IPsec" -#: netbox/vpn/models/crypto.py:178 +#: netbox/vpn/models/crypto.py:175 msgid "Encryption and/or authentication algorithm must be defined" msgstr "Необходимо определить алгоритм шифрования и/или аутентификации" -#: netbox/vpn/models/crypto.py:210 +#: netbox/vpn/models/crypto.py:208 msgid "IPSec policies" msgstr "Политики IPsec" -#: netbox/vpn/models/crypto.py:251 +#: netbox/vpn/models/crypto.py:247 msgid "IPSec profiles" msgstr "Профили IPsec" -#: netbox/vpn/models/l2vpn.py:116 +#: netbox/vpn/models/l2vpn.py:113 msgid "L2VPN termination" msgstr "L2VPN соединение" -#: netbox/vpn/models/l2vpn.py:117 +#: netbox/vpn/models/l2vpn.py:114 msgid "L2VPN terminations" msgstr "L2VPN соединения" -#: netbox/vpn/models/l2vpn.py:135 +#: netbox/vpn/models/l2vpn.py:129 #, python-brace-format msgid "L2VPN Termination already assigned ({assigned_object})" msgstr "Терминация L2VPN уже назначена ({assigned_object})" -#: netbox/vpn/models/l2vpn.py:147 +#: netbox/vpn/models/l2vpn.py:141 #, python-brace-format msgid "" "{l2vpn_type} L2VPNs cannot have more than two terminations; found " @@ -16062,35 +16709,35 @@ msgstr "группа туннелей" msgid "tunnel groups" msgstr "группы туннелей" -#: netbox/vpn/models/tunnels.py:53 +#: netbox/vpn/models/tunnels.py:51 msgid "encapsulation" msgstr "инкапсуляция" -#: netbox/vpn/models/tunnels.py:72 +#: netbox/vpn/models/tunnels.py:70 msgid "tunnel ID" msgstr "идентификатор туннеля" -#: netbox/vpn/models/tunnels.py:94 +#: netbox/vpn/models/tunnels.py:92 msgid "tunnel" msgstr "туннель" -#: netbox/vpn/models/tunnels.py:95 +#: netbox/vpn/models/tunnels.py:93 msgid "tunnels" msgstr "туннели" -#: netbox/vpn/models/tunnels.py:153 +#: netbox/vpn/models/tunnels.py:148 msgid "An object may be terminated to only one tunnel at a time." msgstr "Одновременно объект может быть отправлен только в один туннель." -#: netbox/vpn/models/tunnels.py:156 +#: netbox/vpn/models/tunnels.py:151 msgid "tunnel termination" msgstr "точка подключения туннеля" -#: netbox/vpn/models/tunnels.py:157 +#: netbox/vpn/models/tunnels.py:152 msgid "tunnel terminations" msgstr "точки подключения туннеля" -#: netbox/vpn/models/tunnels.py:174 +#: netbox/vpn/models/tunnels.py:169 #, python-brace-format msgid "{name} is already attached to a tunnel ({tunnel})." msgstr "{name} уже подключен к туннелю ({tunnel})." @@ -16151,51 +16798,44 @@ msgstr "Персонал WPA (PSK)" msgid "WPA Enterprise" msgstr "Предприятие WPA" -#: netbox/wireless/forms/bulk_edit.py:73 -#: netbox/wireless/forms/bulk_edit.py:120 -#: netbox/wireless/forms/bulk_import.py:68 -#: netbox/wireless/forms/bulk_import.py:71 -#: netbox/wireless/forms/bulk_import.py:110 -#: netbox/wireless/forms/bulk_import.py:113 -#: netbox/wireless/forms/filtersets.py:59 -#: netbox/wireless/forms/filtersets.py:93 +#: netbox/wireless/forms/bulk_edit.py:75 +#: netbox/wireless/forms/bulk_edit.py:123 +#: netbox/wireless/forms/bulk_import.py:70 +#: netbox/wireless/forms/bulk_import.py:73 +#: netbox/wireless/forms/bulk_import.py:115 +#: netbox/wireless/forms/bulk_import.py:118 +#: netbox/wireless/forms/filtersets.py:62 +#: netbox/wireless/forms/filtersets.py:121 msgid "Authentication cipher" msgstr "Шифр аутентификации" -#: netbox/wireless/forms/bulk_edit.py:134 -#: netbox/wireless/forms/bulk_import.py:116 -#: netbox/wireless/forms/bulk_import.py:119 -#: netbox/wireless/forms/filtersets.py:106 -msgid "Distance unit" -msgstr "Единица измерения расстояний" - -#: netbox/wireless/forms/bulk_import.py:52 +#: netbox/wireless/forms/bulk_import.py:54 msgid "Bridged VLAN" msgstr "Мостовая VLAN" -#: netbox/wireless/forms/bulk_import.py:89 -#: netbox/wireless/tables/wirelesslink.py:28 +#: netbox/wireless/forms/bulk_import.py:94 +#: netbox/wireless/tables/wirelesslink.py:27 msgid "Interface A" msgstr "Интерфейс A" -#: netbox/wireless/forms/bulk_import.py:93 -#: netbox/wireless/tables/wirelesslink.py:37 +#: netbox/wireless/forms/bulk_import.py:98 +#: netbox/wireless/tables/wirelesslink.py:36 msgid "Interface B" msgstr "Интерфейс B" -#: netbox/wireless/forms/model_forms.py:161 +#: netbox/wireless/forms/model_forms.py:164 msgid "Side B" msgstr "Сторона B" -#: netbox/wireless/models.py:31 +#: netbox/wireless/models.py:32 msgid "authentication cipher" msgstr "шифр аутентификации" -#: netbox/wireless/models.py:69 +#: netbox/wireless/models.py:72 msgid "wireless LAN group" msgstr "группа беспроводной локальной сети" -#: netbox/wireless/models.py:70 +#: netbox/wireless/models.py:73 msgid "wireless LAN groups" msgstr "группы беспроводной локальной сети" @@ -16203,35 +16843,23 @@ msgstr "группы беспроводной локальной сети" msgid "wireless LAN" msgstr "беспроводная локальная сеть" -#: netbox/wireless/models.py:144 +#: netbox/wireless/models.py:141 msgid "interface A" msgstr "Интерфейс A" -#: netbox/wireless/models.py:151 +#: netbox/wireless/models.py:148 msgid "interface B" msgstr "Интерфейс B" -#: netbox/wireless/models.py:165 -msgid "distance" -msgstr "расстояние" - -#: netbox/wireless/models.py:172 -msgid "distance unit" -msgstr "единица измерения расстояний" - -#: netbox/wireless/models.py:219 +#: netbox/wireless/models.py:196 msgid "wireless link" msgstr "беспроводное соединение" -#: netbox/wireless/models.py:220 +#: netbox/wireless/models.py:197 msgid "wireless links" msgstr "беспроводные соединения" -#: netbox/wireless/models.py:236 -msgid "Must specify a unit when setting a wireless distance" -msgstr "" - -#: netbox/wireless/models.py:242 netbox/wireless/models.py:248 +#: netbox/wireless/models.py:212 netbox/wireless/models.py:218 #, python-brace-format msgid "{type} is not a wireless interface." msgstr "{type} не является беспроводным интерфейсом." diff --git a/netbox/translations/tr/LC_MESSAGES/django.mo b/netbox/translations/tr/LC_MESSAGES/django.mo index c10c3adff035879a465c6bf282a51d34902a32f3..308babab8ce37281ce1093e9c72d6c0412327411 100644 GIT binary patch delta 75159 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%0Dfo4k@vbVCRpCexL!&iVNQiFoq(oz^iW7)T4o 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 diff --git a/netbox/translations/tr/LC_MESSAGES/django.po b/netbox/translations/tr/LC_MESSAGES/django.po index f13bec2f9..cce1a44b7 100644 --- a/netbox/translations/tr/LC_MESSAGES/django.po +++ b/netbox/translations/tr/LC_MESSAGES/django.po @@ -13,7 +13,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-01-04 05:02+0000\n" +"POT-Creation-Date: 2025-03-06 05:01+0000\n" "PO-Revision-Date: 2023-10-30 17:48+0000\n" "Last-Translator: Jeremy Stretch, 2025\n" "Language-Team: Turkish (https://app.transifex.com/netbox-community/teams/178115/tr/)\n" @@ -33,7 +33,7 @@ msgstr "Anahtar" msgid "Write Enabled" msgstr "Yazma Etkin" -#: netbox/account/tables.py:35 netbox/core/choices.py:86 +#: netbox/account/tables.py:35 netbox/core/choices.py:102 #: netbox/core/tables/jobs.py:29 netbox/core/tables/tasks.py:79 #: netbox/extras/tables/tables.py:335 netbox/extras/tables/tables.py:566 #: netbox/templates/account/token.html:43 @@ -45,6 +45,7 @@ msgstr "Yazma Etkin" #: netbox/templates/extras/htmx/script_result.html:12 #: netbox/templates/extras/journalentry.html:22 #: netbox/templates/generic/object.html:58 +#: netbox/templates/htmx/quick_add_created.html:7 #: netbox/templates/users/token.html:35 msgid "Created" msgstr "Oluşturuldu" @@ -90,34 +91,35 @@ msgstr "Şifreniz başarıyla değiştirildi." #: netbox/circuits/choices.py:21 netbox/dcim/choices.py:20 #: netbox/dcim/choices.py:102 netbox/dcim/choices.py:185 -#: netbox/dcim/choices.py:237 netbox/dcim/choices.py:1532 -#: netbox/dcim/choices.py:1608 netbox/dcim/choices.py:1658 -#: netbox/virtualization/choices.py:20 netbox/virtualization/choices.py:45 -#: netbox/vpn/choices.py:18 +#: netbox/dcim/choices.py:237 netbox/dcim/choices.py:1534 +#: netbox/dcim/choices.py:1592 netbox/dcim/choices.py:1642 +#: netbox/dcim/choices.py:1664 netbox/virtualization/choices.py:20 +#: netbox/virtualization/choices.py:46 netbox/vpn/choices.py:18 msgid "Planned" msgstr "Planlanan" -#: netbox/circuits/choices.py:22 netbox/netbox/navigation/menu.py:305 +#: netbox/circuits/choices.py:22 netbox/netbox/navigation/menu.py:326 msgid "Provisioning" msgstr "Tedarik" #: netbox/circuits/choices.py:23 netbox/core/tables/tasks.py:22 #: netbox/dcim/choices.py:22 netbox/dcim/choices.py:103 #: netbox/dcim/choices.py:184 netbox/dcim/choices.py:236 -#: netbox/dcim/choices.py:1607 netbox/dcim/choices.py:1657 -#: netbox/extras/tables/tables.py:495 netbox/ipam/choices.py:31 -#: netbox/ipam/choices.py:49 netbox/ipam/choices.py:69 -#: netbox/ipam/choices.py:154 netbox/templates/extras/configcontext.html:25 +#: netbox/dcim/choices.py:1591 netbox/dcim/choices.py:1641 +#: netbox/dcim/choices.py:1663 netbox/extras/tables/tables.py:495 +#: netbox/ipam/choices.py:31 netbox/ipam/choices.py:49 +#: netbox/ipam/choices.py:69 netbox/ipam/choices.py:154 +#: netbox/templates/extras/configcontext.html:25 #: netbox/templates/users/user.html:37 netbox/users/forms/bulk_edit.py:38 -#: netbox/virtualization/choices.py:22 netbox/virtualization/choices.py:44 +#: netbox/virtualization/choices.py:22 netbox/virtualization/choices.py:45 #: netbox/vpn/choices.py:19 netbox/wireless/choices.py:25 msgid "Active" msgstr "Aktif" #: netbox/circuits/choices.py:24 netbox/dcim/choices.py:183 -#: netbox/dcim/choices.py:235 netbox/dcim/choices.py:1606 -#: netbox/dcim/choices.py:1659 netbox/virtualization/choices.py:24 -#: netbox/virtualization/choices.py:43 +#: netbox/dcim/choices.py:235 netbox/dcim/choices.py:1590 +#: netbox/dcim/choices.py:1643 netbox/dcim/choices.py:1662 +#: netbox/virtualization/choices.py:24 netbox/virtualization/choices.py:44 msgid "Offline" msgstr "Çevrim dışı" @@ -129,7 +131,9 @@ msgstr "Hazırlıktan Kaldırma" msgid "Decommissioned" msgstr "Hizmet dışı bırakıldı" -#: netbox/circuits/choices.py:90 netbox/dcim/choices.py:1619 +#: netbox/circuits/choices.py:90 netbox/dcim/choices.py:1603 +#: netbox/templates/dcim/interface.html:135 +#: netbox/templates/virtualization/vminterface.html:77 #: netbox/tenancy/choices.py:17 msgid "Primary" msgstr "Birincil" @@ -147,195 +151,207 @@ msgstr "Üçüncül" msgid "Inactive" msgstr "Etkin Olmayan" -#: netbox/circuits/filtersets.py:31 netbox/circuits/filtersets.py:198 -#: netbox/dcim/filtersets.py:98 netbox/dcim/filtersets.py:152 -#: netbox/dcim/filtersets.py:212 netbox/dcim/filtersets.py:333 -#: netbox/dcim/filtersets.py:464 netbox/dcim/filtersets.py:1021 -#: netbox/dcim/filtersets.py:1368 netbox/dcim/filtersets.py:1903 -#: netbox/dcim/filtersets.py:2146 netbox/dcim/filtersets.py:2204 -#: netbox/ipam/filtersets.py:341 netbox/ipam/filtersets.py:961 -#: netbox/virtualization/filtersets.py:45 -#: netbox/virtualization/filtersets.py:173 netbox/vpn/filtersets.py:358 +#: netbox/circuits/choices.py:107 netbox/templates/dcim/interface.html:275 +#: netbox/vpn/choices.py:63 +msgid "Peer" +msgstr "Akran" + +#: netbox/circuits/choices.py:108 netbox/vpn/choices.py:64 +msgid "Hub" +msgstr "göbek" + +#: netbox/circuits/choices.py:109 netbox/vpn/choices.py:65 +msgid "Spoke" +msgstr "konuştu" + +#: netbox/circuits/filtersets.py:37 netbox/circuits/filtersets.py:204 +#: netbox/circuits/filtersets.py:284 netbox/dcim/base_filtersets.py:22 +#: netbox/dcim/filtersets.py:99 netbox/dcim/filtersets.py:153 +#: netbox/dcim/filtersets.py:213 netbox/dcim/filtersets.py:334 +#: netbox/dcim/filtersets.py:465 netbox/dcim/filtersets.py:1022 +#: netbox/dcim/filtersets.py:1370 netbox/dcim/filtersets.py:2027 +#: netbox/dcim/filtersets.py:2270 netbox/dcim/filtersets.py:2328 +#: netbox/ipam/filtersets.py:928 netbox/virtualization/filtersets.py:139 +#: netbox/vpn/filtersets.py:358 msgid "Region (ID)" msgstr "Bölge (ID)" -#: netbox/circuits/filtersets.py:38 netbox/circuits/filtersets.py:205 -#: netbox/dcim/filtersets.py:105 netbox/dcim/filtersets.py:158 -#: netbox/dcim/filtersets.py:219 netbox/dcim/filtersets.py:340 -#: netbox/dcim/filtersets.py:471 netbox/dcim/filtersets.py:1028 -#: netbox/dcim/filtersets.py:1375 netbox/dcim/filtersets.py:1910 -#: netbox/dcim/filtersets.py:2153 netbox/dcim/filtersets.py:2211 -#: netbox/extras/filtersets.py:509 netbox/ipam/filtersets.py:348 -#: netbox/ipam/filtersets.py:968 netbox/virtualization/filtersets.py:52 -#: netbox/virtualization/filtersets.py:180 netbox/vpn/filtersets.py:353 +#: netbox/circuits/filtersets.py:44 netbox/circuits/filtersets.py:211 +#: netbox/circuits/filtersets.py:291 netbox/dcim/base_filtersets.py:29 +#: netbox/dcim/filtersets.py:106 netbox/dcim/filtersets.py:159 +#: netbox/dcim/filtersets.py:220 netbox/dcim/filtersets.py:341 +#: netbox/dcim/filtersets.py:472 netbox/dcim/filtersets.py:1029 +#: netbox/dcim/filtersets.py:1377 netbox/dcim/filtersets.py:2034 +#: netbox/dcim/filtersets.py:2277 netbox/dcim/filtersets.py:2335 +#: netbox/extras/filtersets.py:509 netbox/ipam/filtersets.py:935 +#: netbox/virtualization/filtersets.py:146 netbox/vpn/filtersets.py:353 msgid "Region (slug)" msgstr "Bölge (kısa ad)" -#: netbox/circuits/filtersets.py:44 netbox/circuits/filtersets.py:211 -#: netbox/dcim/filtersets.py:128 netbox/dcim/filtersets.py:225 -#: netbox/dcim/filtersets.py:346 netbox/dcim/filtersets.py:477 -#: netbox/dcim/filtersets.py:1034 netbox/dcim/filtersets.py:1381 -#: netbox/dcim/filtersets.py:1916 netbox/dcim/filtersets.py:2159 -#: netbox/dcim/filtersets.py:2217 netbox/ipam/filtersets.py:354 -#: netbox/ipam/filtersets.py:974 netbox/virtualization/filtersets.py:58 -#: netbox/virtualization/filtersets.py:186 +#: netbox/circuits/filtersets.py:50 netbox/circuits/filtersets.py:217 +#: netbox/circuits/filtersets.py:297 netbox/dcim/base_filtersets.py:35 +#: netbox/dcim/filtersets.py:129 netbox/dcim/filtersets.py:226 +#: netbox/dcim/filtersets.py:347 netbox/dcim/filtersets.py:478 +#: netbox/dcim/filtersets.py:1035 netbox/dcim/filtersets.py:1383 +#: netbox/dcim/filtersets.py:2040 netbox/dcim/filtersets.py:2283 +#: netbox/dcim/filtersets.py:2341 netbox/ipam/filtersets.py:941 +#: netbox/virtualization/filtersets.py:152 msgid "Site group (ID)" msgstr "Site grubu (ID)" -#: netbox/circuits/filtersets.py:51 netbox/circuits/filtersets.py:218 -#: netbox/dcim/filtersets.py:135 netbox/dcim/filtersets.py:232 -#: netbox/dcim/filtersets.py:353 netbox/dcim/filtersets.py:484 -#: netbox/dcim/filtersets.py:1041 netbox/dcim/filtersets.py:1388 -#: netbox/dcim/filtersets.py:1923 netbox/dcim/filtersets.py:2166 -#: netbox/dcim/filtersets.py:2224 netbox/extras/filtersets.py:515 -#: netbox/ipam/filtersets.py:361 netbox/ipam/filtersets.py:981 -#: netbox/virtualization/filtersets.py:65 -#: netbox/virtualization/filtersets.py:193 +#: netbox/circuits/filtersets.py:57 netbox/circuits/filtersets.py:224 +#: netbox/circuits/filtersets.py:304 netbox/dcim/base_filtersets.py:42 +#: netbox/dcim/filtersets.py:136 netbox/dcim/filtersets.py:233 +#: netbox/dcim/filtersets.py:354 netbox/dcim/filtersets.py:485 +#: netbox/dcim/filtersets.py:1042 netbox/dcim/filtersets.py:1390 +#: netbox/dcim/filtersets.py:2047 netbox/dcim/filtersets.py:2290 +#: netbox/dcim/filtersets.py:2348 netbox/extras/filtersets.py:515 +#: netbox/ipam/filtersets.py:948 netbox/virtualization/filtersets.py:159 msgid "Site group (slug)" msgstr "Site grubu (kısa ad)" -#: netbox/circuits/filtersets.py:56 netbox/circuits/forms/bulk_edit.py:188 -#: netbox/circuits/forms/bulk_edit.py:216 -#: netbox/circuits/forms/bulk_import.py:124 -#: netbox/circuits/forms/filtersets.py:51 -#: netbox/circuits/forms/filtersets.py:171 -#: netbox/circuits/forms/filtersets.py:209 -#: netbox/circuits/forms/model_forms.py:138 -#: netbox/circuits/forms/model_forms.py:154 -#: netbox/circuits/tables/circuits.py:113 netbox/dcim/forms/bulk_edit.py:169 -#: netbox/dcim/forms/bulk_edit.py:330 netbox/dcim/forms/bulk_edit.py:683 -#: netbox/dcim/forms/bulk_edit.py:888 netbox/dcim/forms/bulk_import.py:131 -#: netbox/dcim/forms/bulk_import.py:230 netbox/dcim/forms/bulk_import.py:331 -#: netbox/dcim/forms/bulk_import.py:562 netbox/dcim/forms/bulk_import.py:1333 -#: netbox/dcim/forms/bulk_import.py:1361 netbox/dcim/forms/filtersets.py:87 -#: netbox/dcim/forms/filtersets.py:225 netbox/dcim/forms/filtersets.py:342 -#: netbox/dcim/forms/filtersets.py:439 netbox/dcim/forms/filtersets.py:753 -#: netbox/dcim/forms/filtersets.py:997 netbox/dcim/forms/filtersets.py:1021 -#: netbox/dcim/forms/filtersets.py:1111 netbox/dcim/forms/filtersets.py:1149 -#: netbox/dcim/forms/filtersets.py:1584 netbox/dcim/forms/filtersets.py:1608 -#: netbox/dcim/forms/filtersets.py:1632 netbox/dcim/forms/model_forms.py:137 -#: netbox/dcim/forms/model_forms.py:165 netbox/dcim/forms/model_forms.py:238 -#: netbox/dcim/forms/model_forms.py:463 netbox/dcim/forms/model_forms.py:723 -#: netbox/dcim/forms/object_create.py:383 netbox/dcim/tables/devices.py:153 +#: netbox/circuits/filtersets.py:62 netbox/circuits/forms/filtersets.py:59 +#: netbox/circuits/forms/filtersets.py:182 +#: netbox/circuits/forms/filtersets.py:240 +#: netbox/circuits/tables/circuits.py:129 netbox/dcim/forms/bulk_edit.py:172 +#: netbox/dcim/forms/bulk_edit.py:333 netbox/dcim/forms/bulk_edit.py:686 +#: netbox/dcim/forms/bulk_edit.py:891 netbox/dcim/forms/bulk_import.py:133 +#: netbox/dcim/forms/bulk_import.py:232 netbox/dcim/forms/bulk_import.py:333 +#: netbox/dcim/forms/bulk_import.py:567 netbox/dcim/forms/bulk_import.py:1430 +#: netbox/dcim/forms/bulk_import.py:1458 netbox/dcim/forms/filtersets.py:88 +#: netbox/dcim/forms/filtersets.py:226 netbox/dcim/forms/filtersets.py:343 +#: netbox/dcim/forms/filtersets.py:440 netbox/dcim/forms/filtersets.py:754 +#: netbox/dcim/forms/filtersets.py:998 netbox/dcim/forms/filtersets.py:1022 +#: netbox/dcim/forms/filtersets.py:1112 netbox/dcim/forms/filtersets.py:1150 +#: netbox/dcim/forms/filtersets.py:1622 netbox/dcim/forms/filtersets.py:1646 +#: netbox/dcim/forms/filtersets.py:1670 netbox/dcim/forms/model_forms.py:141 +#: netbox/dcim/forms/model_forms.py:169 netbox/dcim/forms/model_forms.py:243 +#: netbox/dcim/forms/model_forms.py:473 netbox/dcim/forms/model_forms.py:734 +#: netbox/dcim/forms/object_create.py:383 netbox/dcim/tables/devices.py:164 #: netbox/dcim/tables/power.py:26 netbox/dcim/tables/power.py:93 -#: netbox/dcim/tables/racks.py:122 netbox/dcim/tables/racks.py:207 -#: netbox/dcim/tables/sites.py:134 netbox/extras/filtersets.py:525 -#: netbox/ipam/forms/bulk_edit.py:218 netbox/ipam/forms/bulk_edit.py:285 -#: netbox/ipam/forms/bulk_edit.py:484 netbox/ipam/forms/bulk_import.py:171 -#: netbox/ipam/forms/bulk_import.py:453 netbox/ipam/forms/filtersets.py:153 -#: netbox/ipam/forms/filtersets.py:231 netbox/ipam/forms/filtersets.py:432 -#: netbox/ipam/forms/filtersets.py:489 netbox/ipam/forms/model_forms.py:205 -#: netbox/ipam/forms/model_forms.py:669 netbox/ipam/tables/ip.py:245 -#: netbox/ipam/tables/vlans.py:118 netbox/ipam/tables/vlans.py:221 -#: netbox/templates/circuits/inc/circuit_termination_fields.html:6 -#: netbox/templates/dcim/device.html:22 +#: netbox/dcim/tables/racks.py:121 netbox/dcim/tables/racks.py:206 +#: netbox/dcim/tables/sites.py:133 netbox/extras/filtersets.py:525 +#: netbox/ipam/forms/bulk_edit.py:468 netbox/ipam/forms/bulk_import.py:452 +#: netbox/ipam/forms/filtersets.py:155 netbox/ipam/forms/filtersets.py:229 +#: netbox/ipam/forms/filtersets.py:435 netbox/ipam/forms/filtersets.py:530 +#: netbox/ipam/forms/model_forms.py:679 netbox/ipam/tables/vlans.py:87 +#: netbox/ipam/tables/vlans.py:197 netbox/templates/dcim/device.html:22 #: netbox/templates/dcim/inc/cable_termination.html:8 #: netbox/templates/dcim/inc/cable_termination.html:33 #: netbox/templates/dcim/location.html:37 #: netbox/templates/dcim/powerpanel.html:22 netbox/templates/dcim/rack.html:20 #: netbox/templates/dcim/rackreservation.html:28 -#: netbox/templates/dcim/site.html:28 netbox/templates/ipam/prefix.html:56 -#: netbox/templates/ipam/vlan.html:23 netbox/templates/ipam/vlan_edit.html:40 -#: netbox/templates/virtualization/cluster.html:42 +#: netbox/templates/dcim/site.html:28 netbox/templates/ipam/vlan.html:23 +#: netbox/templates/ipam/vlan_edit.html:48 #: netbox/templates/virtualization/virtualmachine.html:95 -#: netbox/virtualization/forms/bulk_edit.py:91 -#: netbox/virtualization/forms/bulk_edit.py:109 -#: netbox/virtualization/forms/bulk_edit.py:124 -#: netbox/virtualization/forms/bulk_import.py:59 -#: netbox/virtualization/forms/bulk_import.py:85 -#: netbox/virtualization/forms/filtersets.py:79 -#: netbox/virtualization/forms/filtersets.py:148 -#: netbox/virtualization/forms/model_forms.py:71 +#: netbox/virtualization/forms/bulk_edit.py:106 +#: netbox/virtualization/forms/bulk_import.py:60 +#: netbox/virtualization/forms/bulk_import.py:91 +#: netbox/virtualization/forms/filtersets.py:74 +#: netbox/virtualization/forms/filtersets.py:153 #: netbox/virtualization/forms/model_forms.py:104 -#: netbox/virtualization/forms/model_forms.py:171 -#: netbox/virtualization/tables/clusters.py:77 -#: netbox/virtualization/tables/virtualmachines.py:63 -#: netbox/vpn/forms/filtersets.py:266 netbox/wireless/forms/model_forms.py:76 -#: netbox/wireless/forms/model_forms.py:118 +#: netbox/virtualization/forms/model_forms.py:178 +#: netbox/virtualization/tables/virtualmachines.py:33 +#: netbox/vpn/forms/filtersets.py:266 netbox/wireless/forms/filtersets.py:88 +#: netbox/wireless/forms/model_forms.py:79 +#: netbox/wireless/forms/model_forms.py:121 msgid "Site" msgstr "Site" -#: netbox/circuits/filtersets.py:62 netbox/circuits/filtersets.py:229 -#: netbox/circuits/filtersets.py:274 netbox/dcim/filtersets.py:242 -#: netbox/dcim/filtersets.py:363 netbox/dcim/filtersets.py:458 -#: netbox/extras/filtersets.py:531 netbox/ipam/filtersets.py:240 -#: netbox/ipam/filtersets.py:371 netbox/ipam/filtersets.py:991 -#: netbox/virtualization/filtersets.py:75 -#: netbox/virtualization/filtersets.py:203 netbox/vpn/filtersets.py:363 +#: netbox/circuits/filtersets.py:68 netbox/circuits/filtersets.py:235 +#: netbox/circuits/filtersets.py:315 netbox/dcim/base_filtersets.py:53 +#: netbox/dcim/filtersets.py:243 netbox/dcim/filtersets.py:364 +#: netbox/dcim/filtersets.py:459 netbox/extras/filtersets.py:531 +#: netbox/ipam/filtersets.py:243 netbox/ipam/filtersets.py:958 +#: netbox/virtualization/filtersets.py:169 netbox/vpn/filtersets.py:363 msgid "Site (slug)" msgstr "Site (kısa ad)" -#: netbox/circuits/filtersets.py:67 +#: netbox/circuits/filtersets.py:73 msgid "ASN (ID)" msgstr "ASN (ID)" -#: netbox/circuits/filtersets.py:73 netbox/circuits/forms/filtersets.py:31 -#: netbox/ipam/forms/model_forms.py:159 netbox/ipam/models/asns.py:108 -#: netbox/ipam/models/asns.py:125 netbox/ipam/tables/asn.py:41 +#: netbox/circuits/filtersets.py:79 netbox/circuits/forms/filtersets.py:39 +#: netbox/ipam/forms/model_forms.py:165 netbox/ipam/models/asns.py:105 +#: netbox/ipam/models/asns.py:122 netbox/ipam/tables/asn.py:41 #: netbox/templates/ipam/asn.html:20 msgid "ASN" msgstr "ASN" -#: netbox/circuits/filtersets.py:95 netbox/circuits/filtersets.py:122 -#: netbox/circuits/filtersets.py:156 netbox/circuits/filtersets.py:283 -#: netbox/circuits/filtersets.py:325 netbox/ipam/filtersets.py:245 +#: netbox/circuits/filtersets.py:101 netbox/circuits/filtersets.py:128 +#: netbox/circuits/filtersets.py:162 netbox/circuits/filtersets.py:338 +#: netbox/circuits/filtersets.py:406 netbox/circuits/filtersets.py:482 +#: netbox/circuits/filtersets.py:550 netbox/ipam/filtersets.py:248 msgid "Provider (ID)" msgstr "Sağlayıcı (ID)" -#: netbox/circuits/filtersets.py:101 netbox/circuits/filtersets.py:128 -#: netbox/circuits/filtersets.py:162 netbox/circuits/filtersets.py:289 -#: netbox/circuits/filtersets.py:331 netbox/ipam/filtersets.py:251 +#: netbox/circuits/filtersets.py:107 netbox/circuits/filtersets.py:134 +#: netbox/circuits/filtersets.py:168 netbox/circuits/filtersets.py:344 +#: netbox/circuits/filtersets.py:488 netbox/circuits/filtersets.py:556 +#: netbox/ipam/filtersets.py:254 msgid "Provider (slug)" msgstr "Sağlayıcı (kısa ad)" -#: netbox/circuits/filtersets.py:167 +#: netbox/circuits/filtersets.py:173 netbox/circuits/filtersets.py:493 +#: netbox/circuits/filtersets.py:561 msgid "Provider account (ID)" msgstr "Sağlayıcı hesabı (ID)" -#: netbox/circuits/filtersets.py:173 +#: netbox/circuits/filtersets.py:179 netbox/circuits/filtersets.py:499 +#: netbox/circuits/filtersets.py:567 msgid "Provider account (account)" msgstr "Sağlayıcı hesabı (hesap)" -#: netbox/circuits/filtersets.py:178 +#: netbox/circuits/filtersets.py:184 netbox/circuits/filtersets.py:503 +#: netbox/circuits/filtersets.py:572 msgid "Provider network (ID)" msgstr "Sağlayıcı ağı (ID)" -#: netbox/circuits/filtersets.py:182 +#: netbox/circuits/filtersets.py:188 msgid "Circuit type (ID)" msgstr "Devre tipi (ID)" -#: netbox/circuits/filtersets.py:188 +#: netbox/circuits/filtersets.py:194 msgid "Circuit type (slug)" msgstr "Devre tipi (kısa ad)" -#: netbox/circuits/filtersets.py:223 netbox/circuits/filtersets.py:268 -#: netbox/dcim/filtersets.py:236 netbox/dcim/filtersets.py:357 -#: netbox/dcim/filtersets.py:452 netbox/dcim/filtersets.py:1045 -#: netbox/dcim/filtersets.py:1393 netbox/dcim/filtersets.py:1928 -#: netbox/dcim/filtersets.py:2170 netbox/dcim/filtersets.py:2229 -#: netbox/ipam/filtersets.py:234 netbox/ipam/filtersets.py:365 -#: netbox/ipam/filtersets.py:985 netbox/virtualization/filtersets.py:69 -#: netbox/virtualization/filtersets.py:197 netbox/vpn/filtersets.py:368 +#: netbox/circuits/filtersets.py:229 netbox/circuits/filtersets.py:309 +#: netbox/dcim/base_filtersets.py:47 netbox/dcim/filtersets.py:237 +#: netbox/dcim/filtersets.py:358 netbox/dcim/filtersets.py:453 +#: netbox/dcim/filtersets.py:1046 netbox/dcim/filtersets.py:1395 +#: netbox/dcim/filtersets.py:2052 netbox/dcim/filtersets.py:2294 +#: netbox/dcim/filtersets.py:2353 netbox/ipam/filtersets.py:237 +#: netbox/ipam/filtersets.py:952 netbox/virtualization/filtersets.py:163 +#: netbox/vpn/filtersets.py:368 msgid "Site (ID)" msgstr "Site (ID)" -#: netbox/circuits/filtersets.py:233 netbox/circuits/filtersets.py:237 +#: netbox/circuits/filtersets.py:239 netbox/circuits/filtersets.py:321 +#: netbox/dcim/base_filtersets.py:59 netbox/dcim/filtersets.py:259 +#: netbox/dcim/filtersets.py:370 netbox/dcim/filtersets.py:491 +#: netbox/dcim/filtersets.py:1058 netbox/dcim/filtersets.py:1406 +#: netbox/dcim/filtersets.py:2306 +msgid "Location (ID)" +msgstr "Konum (ID)" + +#: netbox/circuits/filtersets.py:244 netbox/circuits/filtersets.py:248 msgid "Termination A (ID)" msgstr "Fesih A (ID)" -#: netbox/circuits/filtersets.py:260 netbox/circuits/filtersets.py:320 -#: netbox/core/filtersets.py:77 netbox/core/filtersets.py:136 -#: netbox/core/filtersets.py:173 netbox/dcim/filtersets.py:751 -#: netbox/dcim/filtersets.py:1362 netbox/dcim/filtersets.py:2277 -#: netbox/extras/filtersets.py:41 netbox/extras/filtersets.py:63 -#: netbox/extras/filtersets.py:92 netbox/extras/filtersets.py:132 -#: netbox/extras/filtersets.py:181 netbox/extras/filtersets.py:209 -#: netbox/extras/filtersets.py:239 netbox/extras/filtersets.py:276 -#: netbox/extras/filtersets.py:348 netbox/extras/filtersets.py:391 -#: netbox/extras/filtersets.py:438 netbox/extras/filtersets.py:498 -#: netbox/extras/filtersets.py:657 netbox/extras/filtersets.py:703 -#: netbox/ipam/forms/model_forms.py:482 netbox/netbox/filtersets.py:282 -#: netbox/netbox/forms/__init__.py:22 netbox/netbox/forms/base.py:167 +#: netbox/circuits/filtersets.py:273 netbox/circuits/filtersets.py:375 +#: netbox/circuits/filtersets.py:537 netbox/core/filtersets.py:77 +#: netbox/core/filtersets.py:136 netbox/core/filtersets.py:173 +#: netbox/dcim/filtersets.py:752 netbox/dcim/filtersets.py:1364 +#: netbox/dcim/filtersets.py:2401 netbox/extras/filtersets.py:41 +#: netbox/extras/filtersets.py:63 netbox/extras/filtersets.py:92 +#: netbox/extras/filtersets.py:132 netbox/extras/filtersets.py:181 +#: netbox/extras/filtersets.py:209 netbox/extras/filtersets.py:239 +#: netbox/extras/filtersets.py:276 netbox/extras/filtersets.py:348 +#: netbox/extras/filtersets.py:391 netbox/extras/filtersets.py:438 +#: netbox/extras/filtersets.py:498 netbox/extras/filtersets.py:657 +#: netbox/extras/filtersets.py:703 netbox/ipam/forms/model_forms.py:492 +#: netbox/netbox/filtersets.py:286 netbox/netbox/forms/__init__.py:22 +#: netbox/netbox/forms/base.py:167 #: netbox/templates/htmx/object_selector.html:28 #: netbox/templates/inc/filter_list.html:46 #: netbox/templates/ipam/ipaddress_assign.html:29 @@ -347,97 +363,150 @@ msgstr "Fesih A (ID)" msgid "Search" msgstr "Arama" -#: netbox/circuits/filtersets.py:264 netbox/circuits/forms/bulk_edit.py:172 -#: netbox/circuits/forms/bulk_edit.py:246 -#: netbox/circuits/forms/bulk_import.py:115 -#: netbox/circuits/forms/filtersets.py:198 -#: netbox/circuits/forms/filtersets.py:214 -#: netbox/circuits/forms/filtersets.py:260 -#: netbox/circuits/forms/model_forms.py:111 -#: netbox/circuits/forms/model_forms.py:133 -#: netbox/circuits/forms/model_forms.py:199 -#: netbox/circuits/tables/circuits.py:104 -#: netbox/circuits/tables/circuits.py:164 netbox/dcim/forms/connections.py:73 +#: netbox/circuits/filtersets.py:277 netbox/circuits/forms/bulk_edit.py:195 +#: netbox/circuits/forms/bulk_edit.py:284 +#: netbox/circuits/forms/bulk_import.py:128 +#: netbox/circuits/forms/filtersets.py:223 +#: netbox/circuits/forms/filtersets.py:250 +#: netbox/circuits/forms/filtersets.py:296 +#: netbox/circuits/forms/model_forms.py:139 +#: netbox/circuits/forms/model_forms.py:162 +#: netbox/circuits/forms/model_forms.py:262 +#: netbox/circuits/tables/circuits.py:108 +#: netbox/circuits/tables/circuits.py:203 netbox/dcim/forms/connections.py:73 #: netbox/templates/circuits/circuit.html:15 -#: netbox/templates/circuits/circuitgroupassignment.html:26 +#: netbox/templates/circuits/circuitgroupassignment.html:30 #: netbox/templates/circuits/circuittermination.html:19 #: netbox/templates/dcim/inc/cable_termination.html:55 #: netbox/templates/dcim/trace/circuit.html:4 msgid "Circuit" msgstr "Devre" -#: netbox/circuits/filtersets.py:278 +#: netbox/circuits/filtersets.py:328 netbox/dcim/base_filtersets.py:66 +#: netbox/dcim/filtersets.py:266 netbox/dcim/filtersets.py:377 +#: netbox/dcim/filtersets.py:498 netbox/dcim/filtersets.py:1412 +#: netbox/extras/filtersets.py:542 +msgid "Location (slug)" +msgstr "Konum (kısa ad)" + +#: netbox/circuits/filtersets.py:333 msgid "ProviderNetwork (ID)" msgstr "Sağlayıcı Ağı (ID)" -#: netbox/circuits/filtersets.py:335 -msgid "Circuit (ID)" -msgstr "Devre (ID)" - -#: netbox/circuits/filtersets.py:341 +#: netbox/circuits/filtersets.py:381 msgid "Circuit (CID)" msgstr "Devre (CID)" -#: netbox/circuits/filtersets.py:345 +#: netbox/circuits/filtersets.py:386 +msgid "Circuit (ID)" +msgstr "Devre (ID)" + +#: netbox/circuits/filtersets.py:391 +msgid "Virtual circuit (CID)" +msgstr "Sanal devre (CID)" + +#: netbox/circuits/filtersets.py:396 netbox/dcim/filtersets.py:1849 +msgid "Virtual circuit (ID)" +msgstr "Sanal devre (ID)" + +#: netbox/circuits/filtersets.py:401 +msgid "Provider (name)" +msgstr "Sağlayıcı (isim)" + +#: netbox/circuits/filtersets.py:410 msgid "Circuit group (ID)" msgstr "Devre grubu (ID)" -#: netbox/circuits/filtersets.py:351 +#: netbox/circuits/filtersets.py:416 msgid "Circuit group (slug)" msgstr "Devre grubu (sümüklü böcek)" -#: netbox/circuits/forms/bulk_edit.py:30 -#: netbox/circuits/forms/filtersets.py:56 -#: netbox/circuits/forms/model_forms.py:29 -#: netbox/circuits/tables/providers.py:33 netbox/dcim/forms/bulk_edit.py:129 -#: netbox/dcim/forms/filtersets.py:195 netbox/dcim/forms/model_forms.py:123 -#: netbox/dcim/tables/sites.py:94 netbox/ipam/models/asns.py:126 -#: netbox/ipam/tables/asn.py:27 netbox/ipam/views.py:213 -#: netbox/netbox/navigation/menu.py:172 netbox/netbox/navigation/menu.py:175 +#: netbox/circuits/filtersets.py:507 +msgid "Virtual circuit type (ID)" +msgstr "Sanal devre tipi (ID)" + +#: netbox/circuits/filtersets.py:513 +msgid "Virtual circuit type (slug)" +msgstr "Sanal devre tipi (sümüklü böcek)" + +#: netbox/circuits/filtersets.py:541 netbox/circuits/forms/bulk_edit.py:355 +#: netbox/circuits/forms/bulk_import.py:249 +#: netbox/circuits/forms/filtersets.py:372 +#: netbox/circuits/forms/filtersets.py:378 +#: netbox/circuits/forms/model_forms.py:343 +#: netbox/circuits/forms/model_forms.py:358 +#: netbox/circuits/tables/virtual_circuits.py:88 +#: netbox/templates/circuits/virtualcircuit.html:20 +#: netbox/templates/circuits/virtualcircuittermination.html:38 +msgid "Virtual circuit" +msgstr "Sanal devre" + +#: netbox/circuits/filtersets.py:577 netbox/dcim/filtersets.py:1269 +#: netbox/dcim/filtersets.py:1634 netbox/ipam/filtersets.py:601 +#: netbox/vpn/filtersets.py:102 netbox/vpn/filtersets.py:401 +msgid "Interface (ID)" +msgstr "Arayüz (ID)" + +#: netbox/circuits/forms/bulk_edit.py:42 +#: netbox/circuits/forms/filtersets.py:64 +#: netbox/circuits/forms/model_forms.py:42 +#: netbox/circuits/tables/providers.py:32 netbox/dcim/forms/bulk_edit.py:132 +#: netbox/dcim/forms/filtersets.py:196 netbox/dcim/forms/model_forms.py:127 +#: netbox/dcim/tables/sites.py:94 netbox/ipam/models/asns.py:123 +#: netbox/ipam/tables/asn.py:27 netbox/ipam/views.py:230 +#: netbox/netbox/navigation/menu.py:178 netbox/netbox/navigation/menu.py:181 #: netbox/templates/circuits/provider.html:23 msgid "ASNs" msgstr "ASN'ler" -#: netbox/circuits/forms/bulk_edit.py:34 netbox/circuits/forms/bulk_edit.py:56 -#: netbox/circuits/forms/bulk_edit.py:83 -#: netbox/circuits/forms/bulk_edit.py:104 -#: netbox/circuits/forms/bulk_edit.py:164 -#: netbox/circuits/forms/bulk_edit.py:183 -#: netbox/circuits/forms/bulk_edit.py:228 netbox/core/forms/bulk_edit.py:28 -#: netbox/dcim/forms/bulk_create.py:35 netbox/dcim/forms/bulk_edit.py:74 -#: netbox/dcim/forms/bulk_edit.py:93 netbox/dcim/forms/bulk_edit.py:152 -#: netbox/dcim/forms/bulk_edit.py:193 netbox/dcim/forms/bulk_edit.py:211 -#: netbox/dcim/forms/bulk_edit.py:289 netbox/dcim/forms/bulk_edit.py:438 -#: netbox/dcim/forms/bulk_edit.py:472 netbox/dcim/forms/bulk_edit.py:487 -#: netbox/dcim/forms/bulk_edit.py:546 netbox/dcim/forms/bulk_edit.py:590 -#: netbox/dcim/forms/bulk_edit.py:624 netbox/dcim/forms/bulk_edit.py:648 -#: netbox/dcim/forms/bulk_edit.py:721 netbox/dcim/forms/bulk_edit.py:782 -#: netbox/dcim/forms/bulk_edit.py:834 netbox/dcim/forms/bulk_edit.py:857 -#: netbox/dcim/forms/bulk_edit.py:905 netbox/dcim/forms/bulk_edit.py:975 -#: netbox/dcim/forms/bulk_edit.py:1028 netbox/dcim/forms/bulk_edit.py:1063 -#: netbox/dcim/forms/bulk_edit.py:1103 netbox/dcim/forms/bulk_edit.py:1147 -#: netbox/dcim/forms/bulk_edit.py:1192 netbox/dcim/forms/bulk_edit.py:1219 -#: netbox/dcim/forms/bulk_edit.py:1237 netbox/dcim/forms/bulk_edit.py:1255 -#: netbox/dcim/forms/bulk_edit.py:1273 netbox/dcim/forms/bulk_edit.py:1725 -#: netbox/extras/forms/bulk_edit.py:39 netbox/extras/forms/bulk_edit.py:149 -#: netbox/extras/forms/bulk_edit.py:178 netbox/extras/forms/bulk_edit.py:208 -#: netbox/extras/forms/bulk_edit.py:256 netbox/extras/forms/bulk_edit.py:274 -#: netbox/extras/forms/bulk_edit.py:298 netbox/extras/forms/bulk_edit.py:312 -#: netbox/extras/forms/bulk_edit.py:339 netbox/extras/tables/tables.py:79 -#: netbox/ipam/forms/bulk_edit.py:53 netbox/ipam/forms/bulk_edit.py:73 -#: netbox/ipam/forms/bulk_edit.py:93 netbox/ipam/forms/bulk_edit.py:117 -#: netbox/ipam/forms/bulk_edit.py:146 netbox/ipam/forms/bulk_edit.py:175 -#: netbox/ipam/forms/bulk_edit.py:194 netbox/ipam/forms/bulk_edit.py:276 -#: netbox/ipam/forms/bulk_edit.py:321 netbox/ipam/forms/bulk_edit.py:369 -#: netbox/ipam/forms/bulk_edit.py:412 netbox/ipam/forms/bulk_edit.py:428 -#: netbox/ipam/forms/bulk_edit.py:516 netbox/ipam/forms/bulk_edit.py:547 +#: netbox/circuits/forms/bulk_edit.py:46 netbox/circuits/forms/bulk_edit.py:68 +#: netbox/circuits/forms/bulk_edit.py:95 +#: netbox/circuits/forms/bulk_edit.py:116 +#: netbox/circuits/forms/bulk_edit.py:187 +#: netbox/circuits/forms/bulk_edit.py:207 +#: netbox/circuits/forms/bulk_edit.py:266 +#: netbox/circuits/forms/bulk_edit.py:307 +#: netbox/circuits/forms/bulk_edit.py:347 +#: netbox/circuits/forms/bulk_edit.py:371 netbox/core/forms/bulk_edit.py:28 +#: netbox/dcim/forms/bulk_create.py:35 netbox/dcim/forms/bulk_edit.py:77 +#: netbox/dcim/forms/bulk_edit.py:96 netbox/dcim/forms/bulk_edit.py:155 +#: netbox/dcim/forms/bulk_edit.py:196 netbox/dcim/forms/bulk_edit.py:214 +#: netbox/dcim/forms/bulk_edit.py:292 netbox/dcim/forms/bulk_edit.py:441 +#: netbox/dcim/forms/bulk_edit.py:475 netbox/dcim/forms/bulk_edit.py:490 +#: netbox/dcim/forms/bulk_edit.py:549 netbox/dcim/forms/bulk_edit.py:593 +#: netbox/dcim/forms/bulk_edit.py:627 netbox/dcim/forms/bulk_edit.py:651 +#: netbox/dcim/forms/bulk_edit.py:724 netbox/dcim/forms/bulk_edit.py:785 +#: netbox/dcim/forms/bulk_edit.py:837 netbox/dcim/forms/bulk_edit.py:860 +#: netbox/dcim/forms/bulk_edit.py:908 netbox/dcim/forms/bulk_edit.py:978 +#: netbox/dcim/forms/bulk_edit.py:1031 netbox/dcim/forms/bulk_edit.py:1066 +#: netbox/dcim/forms/bulk_edit.py:1106 netbox/dcim/forms/bulk_edit.py:1150 +#: netbox/dcim/forms/bulk_edit.py:1195 netbox/dcim/forms/bulk_edit.py:1222 +#: netbox/dcim/forms/bulk_edit.py:1240 netbox/dcim/forms/bulk_edit.py:1258 +#: netbox/dcim/forms/bulk_edit.py:1276 netbox/dcim/forms/bulk_edit.py:1746 +#: netbox/dcim/forms/bulk_edit.py:1787 netbox/extras/forms/bulk_edit.py:39 +#: netbox/extras/forms/bulk_edit.py:149 netbox/extras/forms/bulk_edit.py:178 +#: netbox/extras/forms/bulk_edit.py:208 netbox/extras/forms/bulk_edit.py:256 +#: netbox/extras/forms/bulk_edit.py:274 netbox/extras/forms/bulk_edit.py:298 +#: netbox/extras/forms/bulk_edit.py:312 netbox/extras/forms/bulk_edit.py:339 +#: netbox/extras/tables/tables.py:79 netbox/ipam/forms/bulk_edit.py:56 +#: netbox/ipam/forms/bulk_edit.py:76 netbox/ipam/forms/bulk_edit.py:96 +#: netbox/ipam/forms/bulk_edit.py:120 netbox/ipam/forms/bulk_edit.py:149 +#: netbox/ipam/forms/bulk_edit.py:178 netbox/ipam/forms/bulk_edit.py:197 +#: netbox/ipam/forms/bulk_edit.py:260 netbox/ipam/forms/bulk_edit.py:305 +#: netbox/ipam/forms/bulk_edit.py:353 netbox/ipam/forms/bulk_edit.py:396 +#: netbox/ipam/forms/bulk_edit.py:412 netbox/ipam/forms/bulk_edit.py:500 +#: netbox/ipam/forms/bulk_edit.py:532 netbox/ipam/forms/bulk_edit.py:575 +#: netbox/ipam/tables/vlans.py:240 netbox/ipam/tables/vlans.py:267 #: netbox/templates/account/token.html:35 -#: netbox/templates/circuits/circuit.html:59 +#: netbox/templates/circuits/circuit.html:69 #: netbox/templates/circuits/circuitgroup.html:32 #: netbox/templates/circuits/circuittype.html:26 -#: netbox/templates/circuits/inc/circuit_termination_fields.html:88 +#: netbox/templates/circuits/inc/circuit_termination_fields.html:83 #: netbox/templates/circuits/provider.html:33 #: netbox/templates/circuits/providernetwork.html:32 +#: netbox/templates/circuits/virtualcircuit.html:56 +#: netbox/templates/circuits/virtualcircuittermination.html:68 +#: netbox/templates/circuits/virtualcircuittype.html:26 #: netbox/templates/core/datasource.html:54 #: netbox/templates/core/plugin.html:80 netbox/templates/dcim/cable.html:36 #: netbox/templates/dcim/consoleport.html:44 @@ -448,13 +517,14 @@ msgstr "ASN'ler" #: netbox/templates/dcim/devicetype.html:33 #: netbox/templates/dcim/frontport.html:58 #: netbox/templates/dcim/interface.html:69 -#: netbox/templates/dcim/inventoryitem.html:60 +#: netbox/templates/dcim/inventoryitem.html:64 #: netbox/templates/dcim/inventoryitemrole.html:22 #: netbox/templates/dcim/location.html:33 +#: netbox/templates/dcim/macaddress.html:21 #: netbox/templates/dcim/manufacturer.html:40 #: netbox/templates/dcim/module.html:73 #: netbox/templates/dcim/modulebay.html:42 -#: netbox/templates/dcim/moduletype.html:37 +#: netbox/templates/dcim/moduletype.html:39 #: netbox/templates/dcim/platform.html:33 #: netbox/templates/dcim/powerfeed.html:40 #: netbox/templates/dcim/poweroutlet.html:40 @@ -481,12 +551,14 @@ msgstr "ASN'ler" #: netbox/templates/ipam/asnrange.html:38 #: netbox/templates/ipam/fhrpgroup.html:34 #: netbox/templates/ipam/ipaddress.html:55 -#: netbox/templates/ipam/iprange.html:67 netbox/templates/ipam/prefix.html:81 +#: netbox/templates/ipam/iprange.html:67 netbox/templates/ipam/prefix.html:77 #: netbox/templates/ipam/rir.html:26 netbox/templates/ipam/role.html:26 #: netbox/templates/ipam/routetarget.html:21 #: netbox/templates/ipam/service.html:50 #: netbox/templates/ipam/servicetemplate.html:27 #: netbox/templates/ipam/vlan.html:62 netbox/templates/ipam/vlangroup.html:34 +#: netbox/templates/ipam/vlantranslationpolicy.html:18 +#: netbox/templates/ipam/vlantranslationrule.html:26 #: netbox/templates/ipam/vrf.html:33 netbox/templates/tenancy/contact.html:67 #: netbox/templates/tenancy/contactgroup.html:25 #: netbox/templates/tenancy/contactrole.html:22 @@ -500,7 +572,7 @@ msgstr "ASN'ler" #: netbox/templates/virtualization/clustertype.html:26 #: netbox/templates/virtualization/virtualdisk.html:39 #: netbox/templates/virtualization/virtualmachine.html:31 -#: netbox/templates/virtualization/vminterface.html:51 +#: netbox/templates/virtualization/vminterface.html:47 #: netbox/templates/vpn/ikepolicy.html:17 #: netbox/templates/vpn/ikeproposal.html:17 #: netbox/templates/vpn/ipsecpolicy.html:17 @@ -510,119 +582,142 @@ msgstr "ASN'ler" #: netbox/templates/vpn/ipsecproposal.html:17 #: netbox/templates/vpn/l2vpn.html:26 netbox/templates/vpn/tunnel.html:33 #: netbox/templates/vpn/tunnelgroup.html:30 -#: netbox/templates/wireless/wirelesslan.html:26 +#: netbox/templates/wireless/wirelesslan.html:34 #: netbox/templates/wireless/wirelesslangroup.html:33 #: netbox/templates/wireless/wirelesslink.html:34 #: netbox/tenancy/forms/bulk_edit.py:32 netbox/tenancy/forms/bulk_edit.py:80 #: netbox/tenancy/forms/bulk_edit.py:122 netbox/users/forms/bulk_edit.py:64 #: netbox/users/forms/bulk_edit.py:82 netbox/users/forms/bulk_edit.py:112 -#: netbox/virtualization/forms/bulk_edit.py:32 -#: netbox/virtualization/forms/bulk_edit.py:46 -#: netbox/virtualization/forms/bulk_edit.py:100 -#: netbox/virtualization/forms/bulk_edit.py:177 -#: netbox/virtualization/forms/bulk_edit.py:228 -#: netbox/virtualization/forms/bulk_edit.py:337 +#: netbox/virtualization/forms/bulk_edit.py:33 +#: netbox/virtualization/forms/bulk_edit.py:47 +#: netbox/virtualization/forms/bulk_edit.py:82 +#: netbox/virtualization/forms/bulk_edit.py:159 +#: netbox/virtualization/forms/bulk_edit.py:210 +#: netbox/virtualization/forms/bulk_edit.py:327 #: netbox/vpn/forms/bulk_edit.py:28 netbox/vpn/forms/bulk_edit.py:64 #: netbox/vpn/forms/bulk_edit.py:121 netbox/vpn/forms/bulk_edit.py:155 #: netbox/vpn/forms/bulk_edit.py:190 netbox/vpn/forms/bulk_edit.py:215 #: netbox/vpn/forms/bulk_edit.py:247 netbox/vpn/forms/bulk_edit.py:274 -#: netbox/wireless/forms/bulk_edit.py:29 netbox/wireless/forms/bulk_edit.py:82 -#: netbox/wireless/forms/bulk_edit.py:140 +#: netbox/wireless/forms/bulk_edit.py:31 netbox/wireless/forms/bulk_edit.py:84 +#: netbox/wireless/forms/bulk_edit.py:143 msgid "Description" msgstr "Açıklama" -#: netbox/circuits/forms/bulk_edit.py:51 netbox/circuits/forms/bulk_edit.py:73 -#: netbox/circuits/forms/bulk_edit.py:123 -#: netbox/circuits/forms/bulk_import.py:36 -#: netbox/circuits/forms/bulk_import.py:51 -#: netbox/circuits/forms/bulk_import.py:74 -#: netbox/circuits/forms/filtersets.py:70 -#: netbox/circuits/forms/filtersets.py:88 -#: netbox/circuits/forms/filtersets.py:116 -#: netbox/circuits/forms/filtersets.py:131 -#: netbox/circuits/forms/filtersets.py:199 -#: netbox/circuits/forms/filtersets.py:232 -#: netbox/circuits/forms/filtersets.py:255 -#: netbox/circuits/forms/model_forms.py:47 -#: netbox/circuits/forms/model_forms.py:61 -#: netbox/circuits/forms/model_forms.py:93 -#: netbox/circuits/tables/circuits.py:58 -#: netbox/circuits/tables/circuits.py:108 -#: netbox/circuits/tables/circuits.py:160 -#: netbox/circuits/tables/providers.py:72 -#: netbox/circuits/tables/providers.py:103 +#: netbox/circuits/forms/bulk_edit.py:63 netbox/circuits/forms/bulk_edit.py:85 +#: netbox/circuits/forms/bulk_edit.py:135 +#: netbox/circuits/forms/bulk_import.py:43 +#: netbox/circuits/forms/bulk_import.py:58 +#: netbox/circuits/forms/bulk_import.py:81 +#: netbox/circuits/forms/filtersets.py:78 +#: netbox/circuits/forms/filtersets.py:96 +#: netbox/circuits/forms/filtersets.py:124 +#: netbox/circuits/forms/filtersets.py:142 +#: netbox/circuits/forms/filtersets.py:224 +#: netbox/circuits/forms/filtersets.py:268 +#: netbox/circuits/forms/filtersets.py:291 +#: netbox/circuits/forms/filtersets.py:329 +#: netbox/circuits/forms/filtersets.py:337 +#: netbox/circuits/forms/filtersets.py:373 +#: netbox/circuits/forms/filtersets.py:396 +#: netbox/circuits/forms/model_forms.py:60 +#: netbox/circuits/forms/model_forms.py:76 +#: netbox/circuits/forms/model_forms.py:110 +#: netbox/circuits/tables/circuits.py:57 +#: netbox/circuits/tables/circuits.py:112 +#: netbox/circuits/tables/circuits.py:196 +#: netbox/circuits/tables/providers.py:70 +#: netbox/circuits/tables/providers.py:101 +#: netbox/circuits/tables/virtual_circuits.py:46 +#: netbox/circuits/tables/virtual_circuits.py:93 #: netbox/templates/circuits/circuit.html:18 +#: netbox/templates/circuits/circuitgroupassignment.html:26 #: netbox/templates/circuits/circuittermination.html:25 #: netbox/templates/circuits/provider.html:20 #: netbox/templates/circuits/provideraccount.html:20 #: netbox/templates/circuits/providernetwork.html:20 +#: netbox/templates/circuits/virtualcircuit.html:23 +#: netbox/templates/circuits/virtualcircuittermination.html:26 #: netbox/templates/dcim/inc/cable_termination.html:51 +#: netbox/templates/dcim/interface.html:166 msgid "Provider" msgstr "Sağlayıcı" -#: netbox/circuits/forms/bulk_edit.py:80 -#: netbox/circuits/forms/filtersets.py:91 +#: netbox/circuits/forms/bulk_edit.py:92 +#: netbox/circuits/forms/filtersets.py:99 #: netbox/templates/circuits/providernetwork.html:28 msgid "Service ID" msgstr "Servis ID" -#: netbox/circuits/forms/bulk_edit.py:100 -#: netbox/circuits/forms/filtersets.py:107 netbox/dcim/forms/bulk_edit.py:207 -#: netbox/dcim/forms/bulk_edit.py:610 netbox/dcim/forms/bulk_edit.py:819 -#: netbox/dcim/forms/bulk_edit.py:1188 netbox/dcim/forms/bulk_edit.py:1215 -#: netbox/dcim/forms/bulk_edit.py:1721 netbox/dcim/forms/filtersets.py:1064 -#: netbox/dcim/forms/filtersets.py:1455 netbox/dcim/forms/filtersets.py:1479 -#: netbox/dcim/tables/devices.py:704 netbox/dcim/tables/devices.py:761 -#: netbox/dcim/tables/devices.py:1003 netbox/dcim/tables/devicetypes.py:249 -#: netbox/dcim/tables/devicetypes.py:264 netbox/dcim/tables/racks.py:33 -#: netbox/extras/forms/bulk_edit.py:270 netbox/extras/tables/tables.py:443 +#: netbox/circuits/forms/bulk_edit.py:112 +#: netbox/circuits/forms/bulk_edit.py:303 +#: netbox/circuits/forms/filtersets.py:115 +#: netbox/circuits/forms/filtersets.py:320 netbox/dcim/forms/bulk_edit.py:210 +#: netbox/dcim/forms/bulk_edit.py:613 netbox/dcim/forms/bulk_edit.py:822 +#: netbox/dcim/forms/bulk_edit.py:1191 netbox/dcim/forms/bulk_edit.py:1218 +#: netbox/dcim/forms/bulk_edit.py:1742 netbox/dcim/forms/filtersets.py:1065 +#: netbox/dcim/forms/filtersets.py:1323 netbox/dcim/forms/filtersets.py:1460 +#: netbox/dcim/forms/filtersets.py:1484 netbox/dcim/tables/devices.py:738 +#: netbox/dcim/tables/devices.py:794 netbox/dcim/tables/devices.py:1035 +#: netbox/dcim/tables/devicetypes.py:256 netbox/dcim/tables/devicetypes.py:271 +#: netbox/dcim/tables/racks.py:33 netbox/extras/forms/bulk_edit.py:270 +#: netbox/extras/tables/tables.py:443 #: netbox/templates/circuits/circuittype.html:30 +#: netbox/templates/circuits/virtualcircuittype.html:30 #: netbox/templates/dcim/cable.html:40 #: netbox/templates/dcim/devicerole.html:34 #: netbox/templates/dcim/frontport.html:40 #: netbox/templates/dcim/inventoryitemrole.html:26 +#: netbox/templates/dcim/poweroutlet.html:44 #: netbox/templates/dcim/rackrole.html:30 #: netbox/templates/dcim/rearport.html:40 netbox/templates/extras/tag.html:26 msgid "Color" msgstr "Renk" -#: netbox/circuits/forms/bulk_edit.py:118 -#: netbox/circuits/forms/bulk_import.py:87 -#: netbox/circuits/forms/filtersets.py:126 netbox/core/forms/bulk_edit.py:18 -#: netbox/core/forms/filtersets.py:33 netbox/core/tables/change_logging.py:32 -#: netbox/core/tables/data.py:20 netbox/core/tables/jobs.py:18 -#: netbox/dcim/forms/bulk_edit.py:797 netbox/dcim/forms/bulk_edit.py:936 -#: netbox/dcim/forms/bulk_edit.py:1004 netbox/dcim/forms/bulk_edit.py:1023 -#: netbox/dcim/forms/bulk_edit.py:1046 netbox/dcim/forms/bulk_edit.py:1088 -#: netbox/dcim/forms/bulk_edit.py:1132 netbox/dcim/forms/bulk_edit.py:1183 -#: netbox/dcim/forms/bulk_edit.py:1210 netbox/dcim/forms/bulk_import.py:188 -#: netbox/dcim/forms/bulk_import.py:267 netbox/dcim/forms/bulk_import.py:730 -#: netbox/dcim/forms/bulk_import.py:756 netbox/dcim/forms/bulk_import.py:782 -#: netbox/dcim/forms/bulk_import.py:802 netbox/dcim/forms/bulk_import.py:885 -#: netbox/dcim/forms/bulk_import.py:979 netbox/dcim/forms/bulk_import.py:1021 -#: netbox/dcim/forms/bulk_import.py:1235 netbox/dcim/forms/bulk_import.py:1398 -#: netbox/dcim/forms/filtersets.py:955 netbox/dcim/forms/filtersets.py:1054 -#: netbox/dcim/forms/filtersets.py:1175 netbox/dcim/forms/filtersets.py:1247 -#: netbox/dcim/forms/filtersets.py:1272 netbox/dcim/forms/filtersets.py:1296 -#: netbox/dcim/forms/filtersets.py:1316 netbox/dcim/forms/filtersets.py:1353 -#: netbox/dcim/forms/filtersets.py:1450 netbox/dcim/forms/filtersets.py:1474 -#: netbox/dcim/forms/model_forms.py:703 netbox/dcim/forms/model_forms.py:709 -#: netbox/dcim/forms/object_import.py:84 +#: netbox/circuits/forms/bulk_edit.py:130 +#: netbox/circuits/forms/bulk_edit.py:331 +#: netbox/circuits/forms/bulk_import.py:94 +#: netbox/circuits/forms/bulk_import.py:221 +#: netbox/circuits/forms/filtersets.py:137 +#: netbox/circuits/forms/filtersets.py:358 +#: netbox/circuits/tables/circuits.py:65 +#: netbox/circuits/tables/circuits.py:200 +#: netbox/circuits/tables/virtual_circuits.py:58 +#: netbox/core/forms/bulk_edit.py:18 netbox/core/forms/filtersets.py:33 +#: netbox/core/tables/change_logging.py:32 netbox/core/tables/data.py:20 +#: netbox/core/tables/jobs.py:18 netbox/dcim/forms/bulk_edit.py:800 +#: netbox/dcim/forms/bulk_edit.py:939 netbox/dcim/forms/bulk_edit.py:1007 +#: netbox/dcim/forms/bulk_edit.py:1026 netbox/dcim/forms/bulk_edit.py:1049 +#: netbox/dcim/forms/bulk_edit.py:1091 netbox/dcim/forms/bulk_edit.py:1135 +#: netbox/dcim/forms/bulk_edit.py:1186 netbox/dcim/forms/bulk_edit.py:1213 +#: netbox/dcim/forms/bulk_import.py:190 netbox/dcim/forms/bulk_import.py:269 +#: netbox/dcim/forms/bulk_import.py:735 netbox/dcim/forms/bulk_import.py:761 +#: netbox/dcim/forms/bulk_import.py:787 netbox/dcim/forms/bulk_import.py:807 +#: netbox/dcim/forms/bulk_import.py:893 netbox/dcim/forms/bulk_import.py:987 +#: netbox/dcim/forms/bulk_import.py:1029 netbox/dcim/forms/bulk_import.py:1332 +#: netbox/dcim/forms/bulk_import.py:1495 netbox/dcim/forms/filtersets.py:956 +#: netbox/dcim/forms/filtersets.py:1055 netbox/dcim/forms/filtersets.py:1176 +#: netbox/dcim/forms/filtersets.py:1248 netbox/dcim/forms/filtersets.py:1273 +#: netbox/dcim/forms/filtersets.py:1297 netbox/dcim/forms/filtersets.py:1317 +#: netbox/dcim/forms/filtersets.py:1358 netbox/dcim/forms/filtersets.py:1455 +#: netbox/dcim/forms/filtersets.py:1479 netbox/dcim/forms/model_forms.py:714 +#: netbox/dcim/forms/model_forms.py:720 netbox/dcim/forms/object_import.py:84 #: netbox/dcim/forms/object_import.py:113 -#: netbox/dcim/forms/object_import.py:145 netbox/dcim/tables/devices.py:178 -#: netbox/dcim/tables/devices.py:814 netbox/dcim/tables/power.py:77 -#: netbox/dcim/tables/racks.py:138 netbox/extras/forms/bulk_import.py:42 +#: netbox/dcim/forms/object_import.py:146 netbox/dcim/tables/devices.py:189 +#: netbox/dcim/tables/devices.py:846 netbox/dcim/tables/power.py:77 +#: netbox/dcim/tables/racks.py:137 netbox/extras/forms/bulk_import.py:42 #: netbox/extras/tables/tables.py:405 netbox/extras/tables/tables.py:465 -#: netbox/netbox/tables/tables.py:240 +#: netbox/netbox/tables/tables.py:243 #: netbox/templates/circuits/circuit.html:30 +#: netbox/templates/circuits/virtualcircuit.html:39 +#: netbox/templates/circuits/virtualcircuittermination.html:64 #: netbox/templates/core/datasource.html:38 #: netbox/templates/dcim/cable.html:15 #: netbox/templates/dcim/consoleport.html:36 #: netbox/templates/dcim/consoleserverport.html:36 #: netbox/templates/dcim/frontport.html:36 #: netbox/templates/dcim/interface.html:46 -#: netbox/templates/dcim/interface.html:169 -#: netbox/templates/dcim/interface.html:311 +#: netbox/templates/dcim/interface.html:226 +#: netbox/templates/dcim/interface.html:368 #: netbox/templates/dcim/powerfeed.html:32 #: netbox/templates/dcim/poweroutlet.html:36 #: netbox/templates/dcim/powerport.html:36 @@ -632,65 +727,78 @@ msgstr "Renk" #: netbox/templates/vpn/l2vpn.html:22 #: netbox/templates/wireless/inc/authentication_attrs.html:8 #: netbox/templates/wireless/inc/wirelesslink_interface.html:14 -#: netbox/virtualization/forms/bulk_edit.py:60 -#: netbox/virtualization/forms/bulk_import.py:41 +#: netbox/virtualization/forms/bulk_edit.py:61 +#: netbox/virtualization/forms/bulk_import.py:42 #: netbox/virtualization/forms/filtersets.py:54 -#: netbox/virtualization/forms/model_forms.py:62 +#: netbox/virtualization/forms/model_forms.py:65 #: netbox/virtualization/tables/clusters.py:66 #: netbox/vpn/forms/bulk_edit.py:264 netbox/vpn/forms/bulk_import.py:264 -#: netbox/vpn/forms/filtersets.py:217 netbox/vpn/forms/model_forms.py:84 -#: netbox/vpn/forms/model_forms.py:119 netbox/vpn/forms/model_forms.py:231 +#: netbox/vpn/forms/filtersets.py:217 netbox/vpn/forms/model_forms.py:85 +#: netbox/vpn/forms/model_forms.py:120 netbox/vpn/forms/model_forms.py:232 msgid "Type" msgstr "Tür" -#: netbox/circuits/forms/bulk_edit.py:128 -#: netbox/circuits/forms/bulk_import.py:80 -#: netbox/circuits/forms/filtersets.py:139 -#: netbox/circuits/forms/model_forms.py:98 +#: netbox/circuits/forms/bulk_edit.py:140 +#: netbox/circuits/forms/bulk_edit.py:326 +#: netbox/circuits/forms/bulk_import.py:87 +#: netbox/circuits/forms/bulk_import.py:214 +#: netbox/circuits/forms/filtersets.py:150 +#: netbox/circuits/forms/filtersets.py:345 +#: netbox/circuits/forms/model_forms.py:116 +#: netbox/circuits/forms/model_forms.py:330 +#: netbox/templates/circuits/virtualcircuit.html:31 +#: netbox/templates/circuits/virtualcircuittermination.html:34 msgid "Provider account" msgstr "Sağlayıcı hesabı" -#: netbox/circuits/forms/bulk_edit.py:136 -#: netbox/circuits/forms/bulk_import.py:93 -#: netbox/circuits/forms/filtersets.py:150 netbox/core/forms/filtersets.py:38 -#: netbox/core/forms/filtersets.py:79 netbox/core/tables/data.py:23 +#: netbox/circuits/forms/bulk_edit.py:148 +#: netbox/circuits/forms/bulk_edit.py:336 +#: netbox/circuits/forms/bulk_import.py:100 +#: netbox/circuits/forms/bulk_import.py:227 +#: netbox/circuits/forms/filtersets.py:161 +#: netbox/circuits/forms/filtersets.py:361 netbox/core/forms/filtersets.py:38 +#: netbox/core/forms/filtersets.py:80 netbox/core/tables/data.py:23 #: netbox/core/tables/jobs.py:26 netbox/core/tables/tasks.py:88 -#: netbox/dcim/forms/bulk_edit.py:107 netbox/dcim/forms/bulk_edit.py:182 -#: netbox/dcim/forms/bulk_edit.py:352 netbox/dcim/forms/bulk_edit.py:706 -#: netbox/dcim/forms/bulk_edit.py:771 netbox/dcim/forms/bulk_edit.py:803 -#: netbox/dcim/forms/bulk_edit.py:930 netbox/dcim/forms/bulk_edit.py:1744 -#: netbox/dcim/forms/bulk_import.py:88 netbox/dcim/forms/bulk_import.py:147 -#: netbox/dcim/forms/bulk_import.py:248 netbox/dcim/forms/bulk_import.py:527 -#: netbox/dcim/forms/bulk_import.py:681 netbox/dcim/forms/bulk_import.py:1229 -#: netbox/dcim/forms/bulk_import.py:1393 netbox/dcim/forms/bulk_import.py:1457 -#: netbox/dcim/forms/filtersets.py:178 netbox/dcim/forms/filtersets.py:237 -#: netbox/dcim/forms/filtersets.py:359 netbox/dcim/forms/filtersets.py:799 -#: netbox/dcim/forms/filtersets.py:924 netbox/dcim/forms/filtersets.py:958 -#: netbox/dcim/forms/filtersets.py:1059 netbox/dcim/forms/filtersets.py:1170 -#: netbox/dcim/tables/devices.py:140 netbox/dcim/tables/devices.py:817 -#: netbox/dcim/tables/devices.py:1063 netbox/dcim/tables/modules.py:70 -#: netbox/dcim/tables/power.py:74 netbox/dcim/tables/racks.py:126 -#: netbox/dcim/tables/sites.py:82 netbox/dcim/tables/sites.py:138 -#: netbox/ipam/forms/bulk_edit.py:256 netbox/ipam/forms/bulk_edit.py:306 -#: netbox/ipam/forms/bulk_edit.py:354 netbox/ipam/forms/bulk_edit.py:506 -#: netbox/ipam/forms/bulk_import.py:192 netbox/ipam/forms/bulk_import.py:257 -#: netbox/ipam/forms/bulk_import.py:293 netbox/ipam/forms/bulk_import.py:474 -#: netbox/ipam/forms/filtersets.py:210 netbox/ipam/forms/filtersets.py:281 -#: netbox/ipam/forms/filtersets.py:355 netbox/ipam/forms/filtersets.py:501 -#: netbox/ipam/forms/model_forms.py:501 netbox/ipam/tables/ip.py:237 -#: netbox/ipam/tables/ip.py:312 netbox/ipam/tables/ip.py:363 -#: netbox/ipam/tables/ip.py:426 netbox/ipam/tables/ip.py:453 -#: netbox/ipam/tables/vlans.py:126 netbox/ipam/tables/vlans.py:232 +#: netbox/dcim/forms/bulk_edit.py:110 netbox/dcim/forms/bulk_edit.py:185 +#: netbox/dcim/forms/bulk_edit.py:355 netbox/dcim/forms/bulk_edit.py:709 +#: netbox/dcim/forms/bulk_edit.py:774 netbox/dcim/forms/bulk_edit.py:806 +#: netbox/dcim/forms/bulk_edit.py:933 netbox/dcim/forms/bulk_edit.py:1723 +#: netbox/dcim/forms/bulk_edit.py:1765 netbox/dcim/forms/bulk_import.py:90 +#: netbox/dcim/forms/bulk_import.py:149 netbox/dcim/forms/bulk_import.py:250 +#: netbox/dcim/forms/bulk_import.py:532 netbox/dcim/forms/bulk_import.py:686 +#: netbox/dcim/forms/bulk_import.py:1137 netbox/dcim/forms/bulk_import.py:1326 +#: netbox/dcim/forms/bulk_import.py:1490 netbox/dcim/forms/bulk_import.py:1554 +#: netbox/dcim/forms/filtersets.py:179 netbox/dcim/forms/filtersets.py:238 +#: netbox/dcim/forms/filtersets.py:360 netbox/dcim/forms/filtersets.py:800 +#: netbox/dcim/forms/filtersets.py:925 netbox/dcim/forms/filtersets.py:959 +#: netbox/dcim/forms/filtersets.py:1060 netbox/dcim/forms/filtersets.py:1171 +#: netbox/dcim/forms/filtersets.py:1562 netbox/dcim/tables/devices.py:151 +#: netbox/dcim/tables/devices.py:849 netbox/dcim/tables/devices.py:983 +#: netbox/dcim/tables/devices.py:1095 netbox/dcim/tables/modules.py:70 +#: netbox/dcim/tables/power.py:74 netbox/dcim/tables/racks.py:125 +#: netbox/dcim/tables/sites.py:82 netbox/dcim/tables/sites.py:137 +#: netbox/ipam/forms/bulk_edit.py:240 netbox/ipam/forms/bulk_edit.py:290 +#: netbox/ipam/forms/bulk_edit.py:338 netbox/ipam/forms/bulk_edit.py:490 +#: netbox/ipam/forms/bulk_import.py:188 netbox/ipam/forms/bulk_import.py:256 +#: netbox/ipam/forms/bulk_import.py:292 netbox/ipam/forms/bulk_import.py:473 +#: netbox/ipam/forms/filtersets.py:212 netbox/ipam/forms/filtersets.py:284 +#: netbox/ipam/forms/filtersets.py:358 netbox/ipam/forms/filtersets.py:542 +#: netbox/ipam/forms/model_forms.py:511 netbox/ipam/tables/ip.py:183 +#: netbox/ipam/tables/ip.py:264 netbox/ipam/tables/ip.py:315 +#: netbox/ipam/tables/ip.py:378 netbox/ipam/tables/ip.py:405 +#: netbox/ipam/tables/vlans.py:95 netbox/ipam/tables/vlans.py:208 #: netbox/templates/circuits/circuit.html:34 +#: netbox/templates/circuits/virtualcircuit.html:43 #: netbox/templates/core/datasource.html:46 netbox/templates/core/job.html:48 #: netbox/templates/core/rq_task.html:81 netbox/templates/core/system.html:18 #: netbox/templates/dcim/cable.html:19 netbox/templates/dcim/device.html:178 +#: netbox/templates/dcim/inventoryitem.html:36 #: netbox/templates/dcim/location.html:45 netbox/templates/dcim/module.html:69 #: netbox/templates/dcim/powerfeed.html:36 netbox/templates/dcim/rack.html:41 #: netbox/templates/dcim/site.html:43 #: netbox/templates/extras/script_list.html:48 #: netbox/templates/ipam/ipaddress.html:37 -#: netbox/templates/ipam/iprange.html:54 netbox/templates/ipam/prefix.html:73 +#: netbox/templates/ipam/iprange.html:54 netbox/templates/ipam/prefix.html:69 #: netbox/templates/ipam/vlan.html:48 #: netbox/templates/virtualization/cluster.html:21 #: netbox/templates/virtualization/virtualmachine.html:19 @@ -698,63 +806,67 @@ msgstr "Sağlayıcı hesabı" #: netbox/templates/wireless/wirelesslan.html:22 #: netbox/templates/wireless/wirelesslink.html:17 #: netbox/users/forms/filtersets.py:32 netbox/users/forms/model_forms.py:194 -#: netbox/virtualization/forms/bulk_edit.py:70 -#: netbox/virtualization/forms/bulk_edit.py:118 -#: netbox/virtualization/forms/bulk_import.py:54 -#: netbox/virtualization/forms/bulk_import.py:80 -#: netbox/virtualization/forms/filtersets.py:62 -#: netbox/virtualization/forms/filtersets.py:160 +#: netbox/virtualization/forms/bulk_edit.py:71 +#: netbox/virtualization/forms/bulk_edit.py:100 +#: netbox/virtualization/forms/bulk_import.py:55 +#: netbox/virtualization/forms/bulk_import.py:86 +#: netbox/virtualization/forms/filtersets.py:82 +#: netbox/virtualization/forms/filtersets.py:165 #: netbox/virtualization/tables/clusters.py:74 -#: netbox/virtualization/tables/virtualmachines.py:60 +#: netbox/virtualization/tables/virtualmachines.py:30 #: netbox/vpn/forms/bulk_edit.py:39 netbox/vpn/forms/bulk_import.py:37 #: netbox/vpn/forms/filtersets.py:47 netbox/vpn/tables/tunnels.py:48 -#: netbox/wireless/forms/bulk_edit.py:43 -#: netbox/wireless/forms/bulk_edit.py:105 -#: netbox/wireless/forms/bulk_import.py:43 -#: netbox/wireless/forms/bulk_import.py:84 -#: netbox/wireless/forms/filtersets.py:49 -#: netbox/wireless/forms/filtersets.py:83 +#: netbox/wireless/forms/bulk_edit.py:45 +#: netbox/wireless/forms/bulk_edit.py:108 +#: netbox/wireless/forms/bulk_import.py:45 +#: netbox/wireless/forms/bulk_import.py:89 +#: netbox/wireless/forms/filtersets.py:52 +#: netbox/wireless/forms/filtersets.py:111 #: netbox/wireless/tables/wirelesslan.py:52 -#: netbox/wireless/tables/wirelesslink.py:20 +#: netbox/wireless/tables/wirelesslink.py:19 msgid "Status" msgstr "Durum" -#: netbox/circuits/forms/bulk_edit.py:142 -#: netbox/circuits/forms/bulk_edit.py:233 -#: netbox/circuits/forms/bulk_import.py:98 -#: netbox/circuits/forms/bulk_import.py:158 -#: netbox/circuits/forms/filtersets.py:119 -#: netbox/circuits/forms/filtersets.py:241 netbox/dcim/forms/bulk_edit.py:123 -#: netbox/dcim/forms/bulk_edit.py:188 netbox/dcim/forms/bulk_edit.py:347 -#: netbox/dcim/forms/bulk_edit.py:467 netbox/dcim/forms/bulk_edit.py:696 -#: netbox/dcim/forms/bulk_edit.py:809 netbox/dcim/forms/bulk_edit.py:1749 -#: netbox/dcim/forms/bulk_import.py:107 netbox/dcim/forms/bulk_import.py:152 -#: netbox/dcim/forms/bulk_import.py:241 netbox/dcim/forms/bulk_import.py:356 -#: netbox/dcim/forms/bulk_import.py:501 netbox/dcim/forms/bulk_import.py:1241 -#: netbox/dcim/forms/bulk_import.py:1450 netbox/dcim/forms/filtersets.py:173 -#: netbox/dcim/forms/filtersets.py:205 netbox/dcim/forms/filtersets.py:323 -#: netbox/dcim/forms/filtersets.py:399 netbox/dcim/forms/filtersets.py:420 -#: netbox/dcim/forms/filtersets.py:722 netbox/dcim/forms/filtersets.py:916 -#: netbox/dcim/forms/filtersets.py:978 netbox/dcim/forms/filtersets.py:1008 -#: netbox/dcim/forms/filtersets.py:1130 netbox/dcim/tables/power.py:88 -#: netbox/extras/filtersets.py:612 netbox/extras/forms/filtersets.py:323 -#: netbox/extras/forms/filtersets.py:396 netbox/ipam/forms/bulk_edit.py:43 -#: netbox/ipam/forms/bulk_edit.py:68 netbox/ipam/forms/bulk_edit.py:112 -#: netbox/ipam/forms/bulk_edit.py:141 netbox/ipam/forms/bulk_edit.py:166 -#: netbox/ipam/forms/bulk_edit.py:251 netbox/ipam/forms/bulk_edit.py:301 -#: netbox/ipam/forms/bulk_edit.py:349 netbox/ipam/forms/bulk_edit.py:501 -#: netbox/ipam/forms/bulk_import.py:38 netbox/ipam/forms/bulk_import.py:67 -#: netbox/ipam/forms/bulk_import.py:95 netbox/ipam/forms/bulk_import.py:115 -#: netbox/ipam/forms/bulk_import.py:135 netbox/ipam/forms/bulk_import.py:164 -#: netbox/ipam/forms/bulk_import.py:250 netbox/ipam/forms/bulk_import.py:286 -#: netbox/ipam/forms/bulk_import.py:467 netbox/ipam/forms/filtersets.py:48 -#: netbox/ipam/forms/filtersets.py:68 netbox/ipam/forms/filtersets.py:100 -#: netbox/ipam/forms/filtersets.py:120 netbox/ipam/forms/filtersets.py:143 -#: netbox/ipam/forms/filtersets.py:174 netbox/ipam/forms/filtersets.py:267 -#: netbox/ipam/forms/filtersets.py:310 netbox/ipam/forms/filtersets.py:469 -#: netbox/ipam/tables/ip.py:456 netbox/ipam/tables/vlans.py:229 -#: netbox/templates/circuits/circuit.html:38 +#: netbox/circuits/forms/bulk_edit.py:154 +#: netbox/circuits/forms/bulk_edit.py:271 +#: netbox/circuits/forms/bulk_edit.py:342 +#: netbox/circuits/forms/bulk_import.py:111 +#: netbox/circuits/forms/bulk_import.py:170 +#: netbox/circuits/forms/bulk_import.py:232 +#: netbox/circuits/forms/filtersets.py:130 +#: netbox/circuits/forms/filtersets.py:277 +#: netbox/circuits/forms/filtersets.py:331 netbox/dcim/forms/bulk_edit.py:126 +#: netbox/dcim/forms/bulk_edit.py:191 netbox/dcim/forms/bulk_edit.py:350 +#: netbox/dcim/forms/bulk_edit.py:470 netbox/dcim/forms/bulk_edit.py:699 +#: netbox/dcim/forms/bulk_edit.py:812 netbox/dcim/forms/bulk_edit.py:1770 +#: netbox/dcim/forms/bulk_import.py:109 netbox/dcim/forms/bulk_import.py:154 +#: netbox/dcim/forms/bulk_import.py:243 netbox/dcim/forms/bulk_import.py:358 +#: netbox/dcim/forms/bulk_import.py:506 netbox/dcim/forms/bulk_import.py:1338 +#: netbox/dcim/forms/bulk_import.py:1547 netbox/dcim/forms/filtersets.py:174 +#: netbox/dcim/forms/filtersets.py:206 netbox/dcim/forms/filtersets.py:324 +#: netbox/dcim/forms/filtersets.py:400 netbox/dcim/forms/filtersets.py:421 +#: netbox/dcim/forms/filtersets.py:723 netbox/dcim/forms/filtersets.py:917 +#: netbox/dcim/forms/filtersets.py:979 netbox/dcim/forms/filtersets.py:1009 +#: netbox/dcim/forms/filtersets.py:1131 netbox/dcim/tables/power.py:88 +#: netbox/extras/filtersets.py:612 netbox/extras/forms/filtersets.py:330 +#: netbox/extras/forms/filtersets.py:403 netbox/ipam/forms/bulk_edit.py:46 +#: netbox/ipam/forms/bulk_edit.py:71 netbox/ipam/forms/bulk_edit.py:115 +#: netbox/ipam/forms/bulk_edit.py:144 netbox/ipam/forms/bulk_edit.py:169 +#: netbox/ipam/forms/bulk_edit.py:235 netbox/ipam/forms/bulk_edit.py:285 +#: netbox/ipam/forms/bulk_edit.py:333 netbox/ipam/forms/bulk_edit.py:485 +#: netbox/ipam/forms/bulk_import.py:41 netbox/ipam/forms/bulk_import.py:70 +#: netbox/ipam/forms/bulk_import.py:98 netbox/ipam/forms/bulk_import.py:118 +#: netbox/ipam/forms/bulk_import.py:138 netbox/ipam/forms/bulk_import.py:167 +#: netbox/ipam/forms/bulk_import.py:249 netbox/ipam/forms/bulk_import.py:285 +#: netbox/ipam/forms/bulk_import.py:466 netbox/ipam/forms/filtersets.py:50 +#: netbox/ipam/forms/filtersets.py:70 netbox/ipam/forms/filtersets.py:102 +#: netbox/ipam/forms/filtersets.py:122 netbox/ipam/forms/filtersets.py:145 +#: netbox/ipam/forms/filtersets.py:176 netbox/ipam/forms/filtersets.py:270 +#: netbox/ipam/forms/filtersets.py:313 netbox/ipam/forms/filtersets.py:510 +#: netbox/ipam/tables/ip.py:408 netbox/ipam/tables/vlans.py:205 +#: netbox/templates/circuits/circuit.html:48 #: netbox/templates/circuits/circuitgroup.html:36 +#: netbox/templates/circuits/virtualcircuit.html:47 #: netbox/templates/dcim/cable.html:23 netbox/templates/dcim/device.html:79 #: netbox/templates/dcim/location.html:49 #: netbox/templates/dcim/powerfeed.html:44 netbox/templates/dcim/rack.html:32 @@ -771,114 +883,181 @@ msgstr "Durum" #: netbox/templates/virtualization/cluster.html:33 #: netbox/templates/virtualization/virtualmachine.html:39 #: netbox/templates/vpn/l2vpn.html:30 netbox/templates/vpn/tunnel.html:49 -#: netbox/templates/wireless/wirelesslan.html:34 +#: netbox/templates/wireless/wirelesslan.html:42 #: netbox/templates/wireless/wirelesslink.html:25 -#: netbox/tenancy/forms/forms.py:25 netbox/tenancy/forms/forms.py:48 -#: netbox/tenancy/forms/model_forms.py:52 netbox/tenancy/tables/columns.py:64 -#: netbox/virtualization/forms/bulk_edit.py:76 -#: netbox/virtualization/forms/bulk_edit.py:155 -#: netbox/virtualization/forms/bulk_import.py:66 -#: netbox/virtualization/forms/bulk_import.py:115 +#: netbox/tenancy/forms/forms.py:25 netbox/tenancy/forms/forms.py:49 +#: netbox/tenancy/forms/model_forms.py:52 netbox/tenancy/tables/columns.py:49 +#: netbox/virtualization/forms/bulk_edit.py:77 +#: netbox/virtualization/forms/bulk_edit.py:137 +#: netbox/virtualization/forms/bulk_import.py:67 +#: netbox/virtualization/forms/bulk_import.py:121 #: netbox/virtualization/forms/filtersets.py:47 -#: netbox/virtualization/forms/filtersets.py:105 +#: netbox/virtualization/forms/filtersets.py:110 #: netbox/vpn/forms/bulk_edit.py:59 netbox/vpn/forms/bulk_edit.py:269 #: netbox/vpn/forms/bulk_import.py:59 netbox/vpn/forms/bulk_import.py:258 -#: netbox/vpn/forms/filtersets.py:214 netbox/wireless/forms/bulk_edit.py:63 -#: netbox/wireless/forms/bulk_edit.py:110 -#: netbox/wireless/forms/bulk_import.py:55 -#: netbox/wireless/forms/bulk_import.py:97 -#: netbox/wireless/forms/filtersets.py:35 -#: netbox/wireless/forms/filtersets.py:75 +#: netbox/vpn/forms/filtersets.py:214 netbox/wireless/forms/bulk_edit.py:65 +#: netbox/wireless/forms/bulk_edit.py:113 +#: netbox/wireless/forms/bulk_import.py:57 +#: netbox/wireless/forms/bulk_import.py:102 +#: netbox/wireless/forms/filtersets.py:38 +#: netbox/wireless/forms/filtersets.py:103 msgid "Tenant" msgstr "Kiracı" -#: netbox/circuits/forms/bulk_edit.py:147 -#: netbox/circuits/forms/filtersets.py:174 +#: netbox/circuits/forms/bulk_edit.py:159 +#: netbox/circuits/forms/filtersets.py:190 msgid "Install date" msgstr "Yükleme tarihi" -#: netbox/circuits/forms/bulk_edit.py:152 -#: netbox/circuits/forms/filtersets.py:179 +#: netbox/circuits/forms/bulk_edit.py:164 +#: netbox/circuits/forms/filtersets.py:195 msgid "Termination date" msgstr "Fesih tarihi" -#: netbox/circuits/forms/bulk_edit.py:158 -#: netbox/circuits/forms/filtersets.py:186 +#: netbox/circuits/forms/bulk_edit.py:170 +#: netbox/circuits/forms/filtersets.py:202 msgid "Commit rate (Kbps)" msgstr "Taahhüt oranı (Kbps)" -#: netbox/circuits/forms/bulk_edit.py:173 -#: netbox/circuits/forms/model_forms.py:112 +#: netbox/circuits/forms/bulk_edit.py:176 +#: netbox/circuits/forms/filtersets.py:208 +#: netbox/circuits/forms/model_forms.py:136 +#: netbox/templates/circuits/circuit.html:38 +#: netbox/templates/wireless/wirelesslink.html:38 +#: netbox/wireless/forms/bulk_edit.py:132 +#: netbox/wireless/forms/filtersets.py:130 +#: netbox/wireless/forms/model_forms.py:168 +msgid "Distance" +msgstr "Mesafe" + +#: netbox/circuits/forms/bulk_edit.py:181 +#: netbox/circuits/forms/bulk_import.py:105 +#: netbox/circuits/forms/bulk_import.py:108 +#: netbox/circuits/forms/filtersets.py:212 +#: netbox/wireless/forms/bulk_edit.py:137 +#: netbox/wireless/forms/bulk_import.py:121 +#: netbox/wireless/forms/bulk_import.py:124 +#: netbox/wireless/forms/filtersets.py:134 +msgid "Distance unit" +msgstr "Mesafe birimi" + +#: netbox/circuits/forms/bulk_edit.py:196 +#: netbox/circuits/forms/model_forms.py:141 msgid "Service Parameters" msgstr "Servis Parametreleri" -#: netbox/circuits/forms/bulk_edit.py:174 -#: netbox/circuits/forms/model_forms.py:113 -#: netbox/circuits/forms/model_forms.py:183 -#: netbox/dcim/forms/model_forms.py:139 netbox/dcim/forms/model_forms.py:181 -#: netbox/dcim/forms/model_forms.py:266 netbox/dcim/forms/model_forms.py:323 -#: netbox/dcim/forms/model_forms.py:768 netbox/dcim/forms/model_forms.py:1699 -#: netbox/ipam/forms/model_forms.py:64 netbox/ipam/forms/model_forms.py:81 -#: netbox/ipam/forms/model_forms.py:115 netbox/ipam/forms/model_forms.py:136 -#: netbox/ipam/forms/model_forms.py:160 netbox/ipam/forms/model_forms.py:232 -#: netbox/ipam/forms/model_forms.py:261 netbox/ipam/forms/model_forms.py:320 +#: netbox/circuits/forms/bulk_edit.py:197 +#: netbox/circuits/forms/filtersets.py:73 +#: netbox/circuits/forms/filtersets.py:91 +#: netbox/circuits/forms/filtersets.py:110 +#: netbox/circuits/forms/filtersets.py:127 +#: netbox/circuits/forms/filtersets.py:315 +#: netbox/circuits/forms/filtersets.py:330 netbox/core/forms/filtersets.py:68 +#: netbox/core/forms/filtersets.py:136 netbox/dcim/forms/bulk_edit.py:846 +#: netbox/dcim/forms/filtersets.py:173 netbox/dcim/forms/filtersets.py:205 +#: netbox/dcim/forms/filtersets.py:916 netbox/dcim/forms/filtersets.py:1008 +#: netbox/dcim/forms/filtersets.py:1132 netbox/dcim/forms/filtersets.py:1240 +#: netbox/dcim/forms/filtersets.py:1264 netbox/dcim/forms/filtersets.py:1289 +#: netbox/dcim/forms/filtersets.py:1308 netbox/dcim/forms/filtersets.py:1332 +#: netbox/dcim/forms/filtersets.py:1446 netbox/dcim/forms/filtersets.py:1470 +#: netbox/dcim/forms/filtersets.py:1494 netbox/dcim/forms/filtersets.py:1512 +#: netbox/dcim/forms/filtersets.py:1528 netbox/extras/forms/bulk_edit.py:90 +#: netbox/extras/forms/filtersets.py:45 netbox/extras/forms/filtersets.py:137 +#: netbox/extras/forms/filtersets.py:169 netbox/extras/forms/filtersets.py:210 +#: netbox/extras/forms/filtersets.py:227 netbox/extras/forms/filtersets.py:258 +#: netbox/extras/forms/filtersets.py:282 netbox/extras/forms/filtersets.py:449 +#: netbox/ipam/forms/filtersets.py:101 netbox/ipam/forms/filtersets.py:269 +#: netbox/ipam/forms/filtersets.py:310 netbox/ipam/forms/filtersets.py:385 +#: netbox/ipam/forms/filtersets.py:470 netbox/ipam/forms/filtersets.py:483 +#: netbox/ipam/forms/filtersets.py:508 netbox/ipam/forms/filtersets.py:579 +#: netbox/ipam/forms/filtersets.py:597 netbox/netbox/tables/tables.py:259 +#: netbox/virtualization/forms/filtersets.py:45 +#: netbox/virtualization/forms/filtersets.py:108 +#: netbox/virtualization/forms/filtersets.py:203 +#: netbox/virtualization/forms/filtersets.py:248 +#: netbox/vpn/forms/filtersets.py:213 netbox/wireless/forms/bulk_edit.py:153 +#: netbox/wireless/forms/filtersets.py:36 +#: netbox/wireless/forms/filtersets.py:102 +msgid "Attributes" +msgstr "Öznitellikler" + +#: netbox/circuits/forms/bulk_edit.py:198 +#: netbox/circuits/forms/bulk_edit.py:356 +#: netbox/circuits/forms/model_forms.py:142 +#: netbox/circuits/forms/model_forms.py:240 +#: netbox/circuits/forms/model_forms.py:345 +#: netbox/dcim/forms/model_forms.py:143 netbox/dcim/forms/model_forms.py:185 +#: netbox/dcim/forms/model_forms.py:274 netbox/dcim/forms/model_forms.py:331 +#: netbox/dcim/forms/model_forms.py:780 netbox/dcim/forms/model_forms.py:1744 +#: netbox/ipam/forms/model_forms.py:67 netbox/ipam/forms/model_forms.py:84 +#: netbox/ipam/forms/model_forms.py:119 netbox/ipam/forms/model_forms.py:141 +#: netbox/ipam/forms/model_forms.py:166 netbox/ipam/forms/model_forms.py:233 +#: netbox/ipam/forms/model_forms.py:271 netbox/ipam/forms/model_forms.py:330 #: netbox/netbox/navigation/menu.py:24 #: netbox/templates/dcim/device_edit.html:85 #: netbox/templates/dcim/htmx/cable_edit.html:72 #: netbox/templates/ipam/ipaddress_bulk_add.html:27 -#: netbox/templates/ipam/vlan_edit.html:22 +#: netbox/templates/ipam/vlan_edit.html:30 #: netbox/virtualization/forms/model_forms.py:80 -#: netbox/virtualization/forms/model_forms.py:222 +#: netbox/virtualization/forms/model_forms.py:229 #: netbox/vpn/forms/bulk_edit.py:78 netbox/vpn/forms/filtersets.py:44 -#: netbox/vpn/forms/model_forms.py:62 netbox/vpn/forms/model_forms.py:147 -#: netbox/vpn/forms/model_forms.py:411 netbox/wireless/forms/model_forms.py:54 -#: netbox/wireless/forms/model_forms.py:170 +#: netbox/vpn/forms/model_forms.py:63 netbox/vpn/forms/model_forms.py:148 +#: netbox/vpn/forms/model_forms.py:414 netbox/wireless/forms/model_forms.py:57 +#: netbox/wireless/forms/model_forms.py:173 msgid "Tenancy" msgstr "Kiracılık" -#: netbox/circuits/forms/bulk_edit.py:193 -#: netbox/circuits/forms/bulk_edit.py:217 -#: netbox/circuits/forms/model_forms.py:155 -#: netbox/circuits/tables/circuits.py:117 -#: netbox/templates/circuits/inc/circuit_termination_fields.html:62 -#: netbox/templates/circuits/providernetwork.html:17 -msgid "Provider Network" -msgstr "Sağlayıcı Ağı" +#: netbox/circuits/forms/bulk_edit.py:215 +#: netbox/circuits/forms/model_forms.py:170 +#: netbox/dcim/forms/bulk_import.py:1299 netbox/dcim/forms/bulk_import.py:1317 +msgid "Termination type" +msgstr "Sonlandırma türü" -#: netbox/circuits/forms/bulk_edit.py:199 +#: netbox/circuits/forms/bulk_edit.py:218 +#: netbox/circuits/forms/bulk_import.py:133 +#: netbox/circuits/forms/filtersets.py:225 +#: netbox/circuits/forms/model_forms.py:173 +#: netbox/templates/circuits/inc/circuit_termination.html:6 +#: netbox/templates/dcim/cable.html:68 netbox/templates/dcim/cable.html:72 +#: netbox/vpn/forms/bulk_import.py:100 netbox/vpn/forms/filtersets.py:77 +msgid "Termination" +msgstr "Fesih" + +#: netbox/circuits/forms/bulk_edit.py:226 msgid "Port speed (Kbps)" msgstr "Bağlantı noktası hızı (Kbps)" -#: netbox/circuits/forms/bulk_edit.py:203 +#: netbox/circuits/forms/bulk_edit.py:230 msgid "Upstream speed (Kbps)" msgstr "Yukarı akış hızı (Kbps)" -#: netbox/circuits/forms/bulk_edit.py:206 netbox/dcim/forms/bulk_edit.py:966 -#: netbox/dcim/forms/bulk_edit.py:1330 netbox/dcim/forms/bulk_edit.py:1347 -#: netbox/dcim/forms/bulk_edit.py:1364 netbox/dcim/forms/bulk_edit.py:1382 -#: netbox/dcim/forms/bulk_edit.py:1477 netbox/dcim/forms/bulk_edit.py:1637 -#: netbox/dcim/forms/bulk_edit.py:1654 +#: netbox/circuits/forms/bulk_edit.py:233 netbox/dcim/forms/bulk_edit.py:969 +#: netbox/dcim/forms/bulk_edit.py:1333 netbox/dcim/forms/bulk_edit.py:1350 +#: netbox/dcim/forms/bulk_edit.py:1367 netbox/dcim/forms/bulk_edit.py:1385 +#: netbox/dcim/forms/bulk_edit.py:1480 netbox/dcim/forms/bulk_edit.py:1652 +#: netbox/dcim/forms/bulk_edit.py:1669 msgid "Mark connected" msgstr "Bağlı olarak işaretle" -#: netbox/circuits/forms/bulk_edit.py:219 -#: netbox/circuits/forms/model_forms.py:157 -#: netbox/templates/circuits/inc/circuit_termination_fields.html:54 +#: netbox/circuits/forms/bulk_edit.py:243 +#: netbox/circuits/forms/model_forms.py:184 +#: netbox/templates/circuits/inc/circuit_termination_fields.html:55 #: netbox/templates/dcim/frontport.html:121 -#: netbox/templates/dcim/interface.html:193 +#: netbox/templates/dcim/interface.html:250 #: netbox/templates/dcim/rearport.html:111 msgid "Circuit Termination" msgstr "Devre Sonlandırma" -#: netbox/circuits/forms/bulk_edit.py:221 -#: netbox/circuits/forms/model_forms.py:159 +#: netbox/circuits/forms/bulk_edit.py:245 +#: netbox/circuits/forms/model_forms.py:186 msgid "Termination Details" msgstr "Fesih Ayrıntıları" -#: netbox/circuits/forms/bulk_edit.py:251 -#: netbox/circuits/forms/filtersets.py:268 -#: netbox/circuits/tables/circuits.py:168 netbox/dcim/forms/model_forms.py:551 -#: netbox/templates/circuits/circuitgroupassignment.html:30 +#: netbox/circuits/forms/bulk_edit.py:289 +#: netbox/circuits/forms/bulk_import.py:188 +#: netbox/circuits/forms/filtersets.py:304 +#: netbox/circuits/tables/circuits.py:207 netbox/dcim/forms/model_forms.py:562 +#: netbox/templates/circuits/circuitgroupassignment.html:34 #: netbox/templates/dcim/device.html:133 #: netbox/templates/dcim/virtualchassis.html:68 #: netbox/templates/dcim/virtualchassis_edit.html:56 @@ -888,227 +1067,313 @@ msgstr "Fesih Ayrıntıları" msgid "Priority" msgstr "Öncelik" -#: netbox/circuits/forms/bulk_import.py:39 -#: netbox/circuits/forms/bulk_import.py:54 -#: netbox/circuits/forms/bulk_import.py:77 -msgid "Assigned provider" -msgstr "Atanan sağlayıcı" - -#: netbox/circuits/forms/bulk_import.py:83 -msgid "Assigned provider account" -msgstr "Atanan sağlayıcı hesabı" - -#: netbox/circuits/forms/bulk_import.py:90 -msgid "Type of circuit" -msgstr "Devre tipi" - -#: netbox/circuits/forms/bulk_import.py:95 netbox/dcim/forms/bulk_import.py:90 -#: netbox/dcim/forms/bulk_import.py:149 netbox/dcim/forms/bulk_import.py:250 -#: netbox/dcim/forms/bulk_import.py:529 netbox/dcim/forms/bulk_import.py:683 -#: netbox/dcim/forms/bulk_import.py:1395 netbox/ipam/forms/bulk_import.py:194 -#: netbox/ipam/forms/bulk_import.py:259 netbox/ipam/forms/bulk_import.py:295 -#: netbox/ipam/forms/bulk_import.py:476 -#: netbox/virtualization/forms/bulk_import.py:56 -#: netbox/virtualization/forms/bulk_import.py:82 -#: netbox/vpn/forms/bulk_import.py:39 netbox/wireless/forms/bulk_import.py:45 -msgid "Operational status" -msgstr "Operasyonel durum" - -#: netbox/circuits/forms/bulk_import.py:102 -#: netbox/circuits/forms/bulk_import.py:162 -#: netbox/dcim/forms/bulk_import.py:111 netbox/dcim/forms/bulk_import.py:156 -#: netbox/dcim/forms/bulk_import.py:360 netbox/dcim/forms/bulk_import.py:505 -#: netbox/dcim/forms/bulk_import.py:1245 netbox/dcim/forms/bulk_import.py:1390 -#: netbox/dcim/forms/bulk_import.py:1454 netbox/ipam/forms/bulk_import.py:42 -#: netbox/ipam/forms/bulk_import.py:71 netbox/ipam/forms/bulk_import.py:99 -#: netbox/ipam/forms/bulk_import.py:119 netbox/ipam/forms/bulk_import.py:139 -#: netbox/ipam/forms/bulk_import.py:168 netbox/ipam/forms/bulk_import.py:254 -#: netbox/ipam/forms/bulk_import.py:290 netbox/ipam/forms/bulk_import.py:471 -#: netbox/virtualization/forms/bulk_import.py:70 -#: netbox/virtualization/forms/bulk_import.py:119 -#: netbox/vpn/forms/bulk_import.py:63 netbox/wireless/forms/bulk_import.py:59 -#: netbox/wireless/forms/bulk_import.py:101 -msgid "Assigned tenant" -msgstr "Atanan kiracı" - -#: netbox/circuits/forms/bulk_import.py:120 -#: netbox/templates/circuits/inc/circuit_termination.html:6 -#: netbox/templates/circuits/inc/circuit_termination_fields.html:15 -#: netbox/templates/dcim/cable.html:68 netbox/templates/dcim/cable.html:72 -#: netbox/vpn/forms/bulk_import.py:100 netbox/vpn/forms/filtersets.py:77 -msgid "Termination" -msgstr "Fesih" - -#: netbox/circuits/forms/bulk_import.py:130 -#: netbox/circuits/forms/filtersets.py:147 -#: netbox/circuits/forms/filtersets.py:227 -#: netbox/circuits/forms/model_forms.py:144 +#: netbox/circuits/forms/bulk_edit.py:321 +#: netbox/circuits/forms/bulk_import.py:208 +#: netbox/circuits/forms/filtersets.py:158 +#: netbox/circuits/forms/filtersets.py:263 +#: netbox/circuits/forms/filtersets.py:353 +#: netbox/circuits/forms/filtersets.py:391 +#: netbox/circuits/forms/model_forms.py:325 +#: netbox/circuits/tables/virtual_circuits.py:51 +#: netbox/circuits/tables/virtual_circuits.py:99 msgid "Provider network" msgstr "Sağlayıcı ağı" -#: netbox/circuits/forms/filtersets.py:30 -#: netbox/circuits/forms/filtersets.py:118 -#: netbox/circuits/forms/filtersets.py:200 netbox/dcim/forms/bulk_edit.py:339 -#: netbox/dcim/forms/bulk_edit.py:447 netbox/dcim/forms/bulk_edit.py:688 -#: netbox/dcim/forms/bulk_edit.py:743 netbox/dcim/forms/bulk_edit.py:897 -#: netbox/dcim/forms/bulk_import.py:235 netbox/dcim/forms/bulk_import.py:337 -#: netbox/dcim/forms/bulk_import.py:568 netbox/dcim/forms/bulk_import.py:1339 -#: netbox/dcim/forms/bulk_import.py:1373 netbox/dcim/forms/filtersets.py:95 -#: netbox/dcim/forms/filtersets.py:322 netbox/dcim/forms/filtersets.py:356 -#: netbox/dcim/forms/filtersets.py:396 netbox/dcim/forms/filtersets.py:447 -#: netbox/dcim/forms/filtersets.py:719 netbox/dcim/forms/filtersets.py:762 -#: netbox/dcim/forms/filtersets.py:977 netbox/dcim/forms/filtersets.py:1006 -#: netbox/dcim/forms/filtersets.py:1026 netbox/dcim/forms/filtersets.py:1090 -#: netbox/dcim/forms/filtersets.py:1120 netbox/dcim/forms/filtersets.py:1129 -#: netbox/dcim/forms/filtersets.py:1240 netbox/dcim/forms/filtersets.py:1264 -#: netbox/dcim/forms/filtersets.py:1289 netbox/dcim/forms/filtersets.py:1308 -#: netbox/dcim/forms/filtersets.py:1331 netbox/dcim/forms/filtersets.py:1442 -#: netbox/dcim/forms/filtersets.py:1466 netbox/dcim/forms/filtersets.py:1490 -#: netbox/dcim/forms/filtersets.py:1508 netbox/dcim/forms/filtersets.py:1525 -#: netbox/dcim/forms/model_forms.py:180 netbox/dcim/forms/model_forms.py:243 -#: netbox/dcim/forms/model_forms.py:468 netbox/dcim/forms/model_forms.py:728 -#: netbox/dcim/tables/devices.py:157 netbox/dcim/tables/power.py:30 -#: netbox/dcim/tables/racks.py:118 netbox/dcim/tables/racks.py:212 -#: netbox/extras/filtersets.py:536 netbox/extras/forms/filtersets.py:320 -#: netbox/ipam/forms/filtersets.py:173 netbox/ipam/forms/filtersets.py:414 -#: netbox/ipam/forms/filtersets.py:437 netbox/ipam/forms/filtersets.py:467 +#: netbox/circuits/forms/bulk_edit.py:365 +#: netbox/circuits/forms/bulk_import.py:254 +#: netbox/circuits/forms/filtersets.py:381 +#: netbox/circuits/forms/model_forms.py:365 netbox/dcim/forms/bulk_edit.py:361 +#: netbox/dcim/forms/bulk_edit.py:1280 netbox/dcim/forms/bulk_edit.py:1713 +#: netbox/dcim/forms/bulk_import.py:255 netbox/dcim/forms/bulk_import.py:1106 +#: netbox/dcim/forms/filtersets.py:368 netbox/dcim/forms/filtersets.py:778 +#: netbox/dcim/forms/filtersets.py:1539 netbox/dcim/forms/model_forms.py:256 +#: netbox/dcim/forms/model_forms.py:1090 netbox/dcim/forms/model_forms.py:1559 +#: netbox/dcim/forms/object_import.py:182 netbox/dcim/tables/devices.py:180 +#: netbox/dcim/tables/devices.py:841 netbox/dcim/tables/devices.py:967 +#: netbox/dcim/tables/devicetypes.py:311 netbox/dcim/tables/racks.py:128 +#: netbox/extras/filtersets.py:552 netbox/ipam/forms/bulk_edit.py:245 +#: netbox/ipam/forms/bulk_edit.py:295 netbox/ipam/forms/bulk_edit.py:343 +#: netbox/ipam/forms/bulk_edit.py:495 netbox/ipam/forms/bulk_import.py:193 +#: netbox/ipam/forms/bulk_import.py:261 netbox/ipam/forms/bulk_import.py:297 +#: netbox/ipam/forms/bulk_import.py:478 netbox/ipam/forms/filtersets.py:240 +#: netbox/ipam/forms/filtersets.py:292 netbox/ipam/forms/filtersets.py:363 +#: netbox/ipam/forms/filtersets.py:550 netbox/ipam/forms/model_forms.py:194 +#: netbox/ipam/forms/model_forms.py:220 netbox/ipam/forms/model_forms.py:259 +#: netbox/ipam/forms/model_forms.py:686 netbox/ipam/tables/ip.py:209 +#: netbox/ipam/tables/ip.py:268 netbox/ipam/tables/ip.py:319 +#: netbox/ipam/tables/vlans.py:99 netbox/ipam/tables/vlans.py:211 +#: netbox/templates/circuits/virtualcircuittermination.html:42 +#: netbox/templates/dcim/device.html:182 +#: netbox/templates/dcim/inc/panels/inventory_items.html:20 +#: netbox/templates/dcim/interface.html:178 +#: netbox/templates/dcim/interface.html:280 +#: netbox/templates/dcim/inventoryitem.html:40 +#: netbox/templates/dcim/rack.html:49 netbox/templates/ipam/ipaddress.html:41 +#: netbox/templates/ipam/iprange.html:50 netbox/templates/ipam/prefix.html:73 +#: netbox/templates/ipam/role.html:19 netbox/templates/ipam/vlan.html:52 +#: netbox/templates/virtualization/virtualmachine.html:23 +#: netbox/templates/vpn/tunneltermination.html:17 +#: netbox/templates/wireless/inc/wirelesslink_interface.html:20 +#: netbox/tenancy/forms/bulk_edit.py:142 +#: netbox/tenancy/forms/filtersets.py:107 +#: netbox/tenancy/forms/model_forms.py:137 +#: netbox/tenancy/tables/contacts.py:102 +#: netbox/virtualization/forms/bulk_edit.py:127 +#: netbox/virtualization/forms/bulk_import.py:112 +#: netbox/virtualization/forms/filtersets.py:162 +#: netbox/virtualization/forms/model_forms.py:202 +#: netbox/virtualization/tables/virtualmachines.py:45 +#: netbox/vpn/forms/bulk_edit.py:87 netbox/vpn/forms/bulk_import.py:81 +#: netbox/vpn/forms/filtersets.py:85 netbox/vpn/forms/model_forms.py:79 +#: netbox/vpn/forms/model_forms.py:114 netbox/vpn/tables/tunnels.py:82 +msgid "Role" +msgstr "Rol" + +#: netbox/circuits/forms/bulk_import.py:46 +#: netbox/circuits/forms/bulk_import.py:61 +#: netbox/circuits/forms/bulk_import.py:84 +msgid "Assigned provider" +msgstr "Atanan sağlayıcı" + +#: netbox/circuits/forms/bulk_import.py:90 +msgid "Assigned provider account" +msgstr "Atanan sağlayıcı hesabı" + +#: netbox/circuits/forms/bulk_import.py:97 +msgid "Type of circuit" +msgstr "Devre tipi" + +#: netbox/circuits/forms/bulk_import.py:102 +#: netbox/circuits/forms/bulk_import.py:229 +#: netbox/dcim/forms/bulk_import.py:92 netbox/dcim/forms/bulk_import.py:151 +#: netbox/dcim/forms/bulk_import.py:252 netbox/dcim/forms/bulk_import.py:534 +#: netbox/dcim/forms/bulk_import.py:688 netbox/dcim/forms/bulk_import.py:1139 +#: netbox/dcim/forms/bulk_import.py:1492 netbox/ipam/forms/bulk_import.py:190 +#: netbox/ipam/forms/bulk_import.py:258 netbox/ipam/forms/bulk_import.py:294 +#: netbox/ipam/forms/bulk_import.py:475 netbox/ipam/forms/bulk_import.py:488 +#: netbox/virtualization/forms/bulk_import.py:57 +#: netbox/virtualization/forms/bulk_import.py:88 +#: netbox/vpn/forms/bulk_import.py:39 netbox/wireless/forms/bulk_import.py:47 +msgid "Operational status" +msgstr "Operasyonel durum" + +#: netbox/circuits/forms/bulk_import.py:115 +#: netbox/circuits/forms/bulk_import.py:174 +#: netbox/circuits/forms/bulk_import.py:236 +#: netbox/dcim/forms/bulk_import.py:113 netbox/dcim/forms/bulk_import.py:158 +#: netbox/dcim/forms/bulk_import.py:362 netbox/dcim/forms/bulk_import.py:510 +#: netbox/dcim/forms/bulk_import.py:1342 netbox/dcim/forms/bulk_import.py:1487 +#: netbox/dcim/forms/bulk_import.py:1551 netbox/ipam/forms/bulk_import.py:45 +#: netbox/ipam/forms/bulk_import.py:74 netbox/ipam/forms/bulk_import.py:102 +#: netbox/ipam/forms/bulk_import.py:122 netbox/ipam/forms/bulk_import.py:142 +#: netbox/ipam/forms/bulk_import.py:171 netbox/ipam/forms/bulk_import.py:253 +#: netbox/ipam/forms/bulk_import.py:289 netbox/ipam/forms/bulk_import.py:470 +#: netbox/virtualization/forms/bulk_import.py:71 +#: netbox/virtualization/forms/bulk_import.py:125 +#: netbox/vpn/forms/bulk_import.py:63 netbox/wireless/forms/bulk_import.py:61 +#: netbox/wireless/forms/bulk_import.py:106 +msgid "Assigned tenant" +msgstr "Atanan kiracı" + +#: netbox/circuits/forms/bulk_import.py:139 +msgid "Termination type (app & model)" +msgstr "Sonlandırma türü (uygulama ve model)" + +#: netbox/circuits/forms/bulk_import.py:151 +#: netbox/circuits/forms/bulk_import.py:164 +msgid "Termination ID" +msgstr "Sonlandırma Kimliği" + +#: netbox/circuits/forms/bulk_import.py:185 +msgid "Circuit type (app & model)" +msgstr "Devre tipi (uygulama ve model)" + +#: netbox/circuits/forms/bulk_import.py:211 +msgid "The network to which this virtual circuit belongs" +msgstr "Bu sanal devrenin ait olduğu ağ" + +#: netbox/circuits/forms/bulk_import.py:217 +msgid "Assigned provider account (if any)" +msgstr "Atanmış sağlayıcı hesabı (varsa)" + +#: netbox/circuits/forms/bulk_import.py:224 +msgid "Type of virtual circuit" +msgstr "Sanal devre türü" + +#: netbox/circuits/forms/bulk_import.py:256 netbox/vpn/forms/bulk_import.py:83 +msgid "Operational role" +msgstr "Operasyonel rol" + +#: netbox/circuits/forms/bulk_import.py:259 +#: netbox/circuits/forms/model_forms.py:368 +#: netbox/circuits/tables/virtual_circuits.py:112 +#: netbox/dcim/forms/bulk_import.py:1219 netbox/dcim/forms/model_forms.py:1164 +#: netbox/dcim/forms/model_forms.py:1433 netbox/dcim/forms/model_forms.py:1600 +#: netbox/dcim/forms/model_forms.py:1635 netbox/dcim/forms/model_forms.py:1765 +#: netbox/dcim/tables/connections.py:65 netbox/dcim/tables/devices.py:1141 +#: netbox/ipam/forms/bulk_import.py:317 netbox/ipam/forms/model_forms.py:290 +#: netbox/ipam/forms/model_forms.py:299 netbox/ipam/tables/fhrp.py:64 +#: netbox/ipam/tables/ip.py:324 netbox/ipam/tables/vlans.py:145 +#: netbox/templates/circuits/inc/circuit_termination_fields.html:52 +#: netbox/templates/circuits/virtualcircuittermination.html:53 +#: netbox/templates/circuits/virtualcircuittermination.html:60 +#: netbox/templates/dcim/frontport.html:106 +#: netbox/templates/dcim/interface.html:27 +#: netbox/templates/dcim/interface.html:241 +#: netbox/templates/dcim/interface.html:367 +#: netbox/templates/dcim/rearport.html:102 +#: netbox/templates/virtualization/vminterface.html:18 +#: netbox/templates/vpn/tunneltermination.html:31 +#: netbox/templates/wireless/inc/wirelesslink_interface.html:10 +#: netbox/templates/wireless/wirelesslink.html:10 +#: netbox/templates/wireless/wirelesslink.html:55 +#: netbox/virtualization/forms/model_forms.py:377 +#: netbox/vpn/forms/bulk_import.py:297 netbox/vpn/forms/model_forms.py:439 +#: netbox/vpn/forms/model_forms.py:448 +#: netbox/wireless/forms/model_forms.py:116 +#: netbox/wireless/forms/model_forms.py:158 +msgid "Interface" +msgstr "Arayüz" + +#: netbox/circuits/forms/filtersets.py:38 +#: netbox/circuits/forms/filtersets.py:129 +#: netbox/circuits/forms/filtersets.py:187 +#: netbox/circuits/forms/filtersets.py:245 +#: netbox/circuits/tables/circuits.py:144 netbox/dcim/forms/bulk_edit.py:342 +#: netbox/dcim/forms/bulk_edit.py:450 netbox/dcim/forms/bulk_edit.py:691 +#: netbox/dcim/forms/bulk_edit.py:746 netbox/dcim/forms/bulk_edit.py:900 +#: netbox/dcim/forms/bulk_import.py:237 netbox/dcim/forms/bulk_import.py:339 +#: netbox/dcim/forms/bulk_import.py:573 netbox/dcim/forms/bulk_import.py:1436 +#: netbox/dcim/forms/bulk_import.py:1470 netbox/dcim/forms/filtersets.py:96 +#: netbox/dcim/forms/filtersets.py:323 netbox/dcim/forms/filtersets.py:357 +#: netbox/dcim/forms/filtersets.py:397 netbox/dcim/forms/filtersets.py:448 +#: netbox/dcim/forms/filtersets.py:720 netbox/dcim/forms/filtersets.py:763 +#: netbox/dcim/forms/filtersets.py:978 netbox/dcim/forms/filtersets.py:1007 +#: netbox/dcim/forms/filtersets.py:1027 netbox/dcim/forms/filtersets.py:1091 +#: netbox/dcim/forms/filtersets.py:1121 netbox/dcim/forms/filtersets.py:1130 +#: netbox/dcim/forms/filtersets.py:1241 netbox/dcim/forms/filtersets.py:1265 +#: netbox/dcim/forms/filtersets.py:1290 netbox/dcim/forms/filtersets.py:1309 +#: netbox/dcim/forms/filtersets.py:1336 netbox/dcim/forms/filtersets.py:1447 +#: netbox/dcim/forms/filtersets.py:1471 netbox/dcim/forms/filtersets.py:1495 +#: netbox/dcim/forms/filtersets.py:1513 netbox/dcim/forms/filtersets.py:1530 +#: netbox/dcim/forms/model_forms.py:184 netbox/dcim/forms/model_forms.py:248 +#: netbox/dcim/forms/model_forms.py:478 netbox/dcim/forms/model_forms.py:739 +#: netbox/dcim/tables/devices.py:168 netbox/dcim/tables/power.py:30 +#: netbox/dcim/tables/racks.py:117 netbox/dcim/tables/racks.py:211 +#: netbox/extras/filtersets.py:536 netbox/extras/forms/filtersets.py:327 +#: netbox/ipam/forms/filtersets.py:234 netbox/ipam/forms/filtersets.py:417 +#: netbox/ipam/forms/filtersets.py:440 netbox/ipam/forms/filtersets.py:507 #: netbox/templates/dcim/device.html:26 #: netbox/templates/dcim/device_edit.html:30 #: netbox/templates/dcim/inc/cable_termination.html:12 #: netbox/templates/dcim/location.html:26 #: netbox/templates/dcim/powerpanel.html:26 netbox/templates/dcim/rack.html:24 #: netbox/templates/dcim/rackreservation.html:32 -#: netbox/virtualization/forms/filtersets.py:46 -#: netbox/virtualization/forms/filtersets.py:100 -#: netbox/wireless/forms/model_forms.py:87 -#: netbox/wireless/forms/model_forms.py:129 +#: netbox/virtualization/forms/filtersets.py:79 +#: netbox/virtualization/forms/filtersets.py:105 +#: netbox/wireless/forms/filtersets.py:93 +#: netbox/wireless/forms/model_forms.py:90 +#: netbox/wireless/forms/model_forms.py:132 msgid "Location" msgstr "Konum" -#: netbox/circuits/forms/filtersets.py:32 -#: netbox/circuits/forms/filtersets.py:120 netbox/dcim/forms/filtersets.py:144 -#: netbox/dcim/forms/filtersets.py:158 netbox/dcim/forms/filtersets.py:174 -#: netbox/dcim/forms/filtersets.py:206 netbox/dcim/forms/filtersets.py:328 -#: netbox/dcim/forms/filtersets.py:400 netbox/dcim/forms/filtersets.py:471 -#: netbox/dcim/forms/filtersets.py:723 netbox/dcim/forms/filtersets.py:1091 +#: netbox/circuits/forms/filtersets.py:40 +#: netbox/circuits/forms/filtersets.py:131 netbox/dcim/forms/filtersets.py:145 +#: netbox/dcim/forms/filtersets.py:159 netbox/dcim/forms/filtersets.py:175 +#: netbox/dcim/forms/filtersets.py:207 netbox/dcim/forms/filtersets.py:329 +#: netbox/dcim/forms/filtersets.py:401 netbox/dcim/forms/filtersets.py:472 +#: netbox/dcim/forms/filtersets.py:724 netbox/dcim/forms/filtersets.py:1092 #: netbox/netbox/navigation/menu.py:31 netbox/netbox/navigation/menu.py:33 -#: netbox/tenancy/forms/filtersets.py:42 netbox/tenancy/tables/columns.py:70 +#: netbox/tenancy/forms/filtersets.py:42 netbox/tenancy/tables/columns.py:55 #: netbox/tenancy/tables/contacts.py:25 netbox/tenancy/views.py:19 #: netbox/virtualization/forms/filtersets.py:37 #: netbox/virtualization/forms/filtersets.py:48 -#: netbox/virtualization/forms/filtersets.py:106 +#: netbox/virtualization/forms/filtersets.py:111 msgid "Contacts" msgstr "İletişim" -#: netbox/circuits/forms/filtersets.py:37 -#: netbox/circuits/forms/filtersets.py:157 netbox/dcim/forms/bulk_edit.py:113 -#: netbox/dcim/forms/bulk_edit.py:314 netbox/dcim/forms/bulk_edit.py:872 -#: netbox/dcim/forms/bulk_import.py:93 netbox/dcim/forms/filtersets.py:73 -#: netbox/dcim/forms/filtersets.py:185 netbox/dcim/forms/filtersets.py:211 -#: netbox/dcim/forms/filtersets.py:334 netbox/dcim/forms/filtersets.py:425 -#: netbox/dcim/forms/filtersets.py:739 netbox/dcim/forms/filtersets.py:983 -#: netbox/dcim/forms/filtersets.py:1013 netbox/dcim/forms/filtersets.py:1097 -#: netbox/dcim/forms/filtersets.py:1136 netbox/dcim/forms/filtersets.py:1576 -#: netbox/dcim/forms/filtersets.py:1600 netbox/dcim/forms/filtersets.py:1624 -#: netbox/dcim/forms/model_forms.py:112 netbox/dcim/forms/object_create.py:367 -#: netbox/dcim/tables/devices.py:143 netbox/dcim/tables/sites.py:85 -#: netbox/extras/filtersets.py:503 netbox/ipam/forms/bulk_edit.py:208 -#: netbox/ipam/forms/bulk_edit.py:474 netbox/ipam/forms/filtersets.py:217 -#: netbox/ipam/forms/filtersets.py:422 netbox/ipam/forms/filtersets.py:475 -#: netbox/templates/dcim/device.html:18 netbox/templates/dcim/rack.html:16 +#: netbox/circuits/forms/filtersets.py:45 +#: netbox/circuits/forms/filtersets.py:168 +#: netbox/circuits/forms/filtersets.py:230 +#: netbox/circuits/tables/circuits.py:139 netbox/dcim/forms/bulk_edit.py:116 +#: netbox/dcim/forms/bulk_edit.py:317 netbox/dcim/forms/bulk_edit.py:875 +#: netbox/dcim/forms/bulk_import.py:95 netbox/dcim/forms/filtersets.py:74 +#: netbox/dcim/forms/filtersets.py:186 netbox/dcim/forms/filtersets.py:212 +#: netbox/dcim/forms/filtersets.py:335 netbox/dcim/forms/filtersets.py:426 +#: netbox/dcim/forms/filtersets.py:740 netbox/dcim/forms/filtersets.py:984 +#: netbox/dcim/forms/filtersets.py:1014 netbox/dcim/forms/filtersets.py:1098 +#: netbox/dcim/forms/filtersets.py:1137 netbox/dcim/forms/filtersets.py:1614 +#: netbox/dcim/forms/filtersets.py:1638 netbox/dcim/forms/filtersets.py:1662 +#: netbox/dcim/forms/model_forms.py:114 netbox/dcim/forms/object_create.py:367 +#: netbox/dcim/tables/devices.py:154 netbox/dcim/tables/sites.py:85 +#: netbox/extras/filtersets.py:503 netbox/ipam/forms/bulk_edit.py:458 +#: netbox/ipam/forms/filtersets.py:219 netbox/ipam/forms/filtersets.py:425 +#: netbox/ipam/forms/filtersets.py:516 netbox/templates/dcim/device.html:18 +#: netbox/templates/dcim/rack.html:16 #: netbox/templates/dcim/rackreservation.html:22 #: netbox/templates/dcim/region.html:26 netbox/templates/dcim/site.html:31 -#: netbox/templates/ipam/prefix.html:49 netbox/templates/ipam/vlan.html:16 -#: netbox/virtualization/forms/bulk_edit.py:81 +#: netbox/templates/ipam/vlan.html:16 #: netbox/virtualization/forms/filtersets.py:59 -#: netbox/virtualization/forms/filtersets.py:133 +#: netbox/virtualization/forms/filtersets.py:138 #: netbox/virtualization/forms/model_forms.py:92 -#: netbox/vpn/forms/filtersets.py:257 +#: netbox/vpn/forms/filtersets.py:257 netbox/wireless/forms/filtersets.py:73 msgid "Region" msgstr "Bölge" -#: netbox/circuits/forms/filtersets.py:42 -#: netbox/circuits/forms/filtersets.py:162 netbox/dcim/forms/bulk_edit.py:322 -#: netbox/dcim/forms/bulk_edit.py:880 netbox/dcim/forms/filtersets.py:78 -#: netbox/dcim/forms/filtersets.py:190 netbox/dcim/forms/filtersets.py:216 -#: netbox/dcim/forms/filtersets.py:347 netbox/dcim/forms/filtersets.py:430 -#: netbox/dcim/forms/filtersets.py:744 netbox/dcim/forms/filtersets.py:988 -#: netbox/dcim/forms/filtersets.py:1102 netbox/dcim/forms/filtersets.py:1141 +#: netbox/circuits/forms/filtersets.py:50 +#: netbox/circuits/forms/filtersets.py:173 +#: netbox/circuits/forms/filtersets.py:235 netbox/dcim/forms/bulk_edit.py:325 +#: netbox/dcim/forms/bulk_edit.py:883 netbox/dcim/forms/filtersets.py:79 +#: netbox/dcim/forms/filtersets.py:191 netbox/dcim/forms/filtersets.py:217 +#: netbox/dcim/forms/filtersets.py:348 netbox/dcim/forms/filtersets.py:431 +#: netbox/dcim/forms/filtersets.py:745 netbox/dcim/forms/filtersets.py:989 +#: netbox/dcim/forms/filtersets.py:1103 netbox/dcim/forms/filtersets.py:1142 #: netbox/dcim/forms/object_create.py:375 netbox/extras/filtersets.py:520 -#: netbox/ipam/forms/bulk_edit.py:213 netbox/ipam/forms/bulk_edit.py:479 -#: netbox/ipam/forms/filtersets.py:222 netbox/ipam/forms/filtersets.py:427 -#: netbox/ipam/forms/filtersets.py:480 -#: netbox/virtualization/forms/bulk_edit.py:86 -#: netbox/virtualization/forms/filtersets.py:69 -#: netbox/virtualization/forms/filtersets.py:138 +#: netbox/ipam/forms/bulk_edit.py:463 netbox/ipam/forms/filtersets.py:224 +#: netbox/ipam/forms/filtersets.py:430 netbox/ipam/forms/filtersets.py:521 +#: netbox/virtualization/forms/filtersets.py:64 +#: netbox/virtualization/forms/filtersets.py:143 #: netbox/virtualization/forms/model_forms.py:98 +#: netbox/wireless/forms/filtersets.py:78 msgid "Site group" msgstr "Site grubu" -#: netbox/circuits/forms/filtersets.py:65 -#: netbox/circuits/forms/filtersets.py:83 -#: netbox/circuits/forms/filtersets.py:102 -#: netbox/circuits/forms/filtersets.py:117 netbox/core/forms/filtersets.py:67 -#: netbox/core/forms/filtersets.py:135 netbox/dcim/forms/bulk_edit.py:843 -#: netbox/dcim/forms/filtersets.py:172 netbox/dcim/forms/filtersets.py:204 -#: netbox/dcim/forms/filtersets.py:915 netbox/dcim/forms/filtersets.py:1007 -#: netbox/dcim/forms/filtersets.py:1131 netbox/dcim/forms/filtersets.py:1239 -#: netbox/dcim/forms/filtersets.py:1263 netbox/dcim/forms/filtersets.py:1288 -#: netbox/dcim/forms/filtersets.py:1307 netbox/dcim/forms/filtersets.py:1327 -#: netbox/dcim/forms/filtersets.py:1441 netbox/dcim/forms/filtersets.py:1465 -#: netbox/dcim/forms/filtersets.py:1489 netbox/dcim/forms/filtersets.py:1507 -#: netbox/dcim/forms/filtersets.py:1523 netbox/extras/forms/bulk_edit.py:90 -#: netbox/extras/forms/filtersets.py:44 netbox/extras/forms/filtersets.py:134 -#: netbox/extras/forms/filtersets.py:165 netbox/extras/forms/filtersets.py:205 -#: netbox/extras/forms/filtersets.py:221 netbox/extras/forms/filtersets.py:252 -#: netbox/extras/forms/filtersets.py:276 netbox/extras/forms/filtersets.py:441 -#: netbox/ipam/forms/filtersets.py:99 netbox/ipam/forms/filtersets.py:266 -#: netbox/ipam/forms/filtersets.py:307 netbox/ipam/forms/filtersets.py:382 -#: netbox/ipam/forms/filtersets.py:468 netbox/ipam/forms/filtersets.py:527 -#: netbox/ipam/forms/filtersets.py:545 netbox/netbox/tables/tables.py:256 -#: netbox/virtualization/forms/filtersets.py:45 -#: netbox/virtualization/forms/filtersets.py:103 -#: netbox/virtualization/forms/filtersets.py:198 -#: netbox/virtualization/forms/filtersets.py:243 -#: netbox/vpn/forms/filtersets.py:213 netbox/wireless/forms/bulk_edit.py:150 -#: netbox/wireless/forms/filtersets.py:34 -#: netbox/wireless/forms/filtersets.py:74 -msgid "Attributes" -msgstr "Öznitellikler" - -#: netbox/circuits/forms/filtersets.py:73 -#: netbox/circuits/tables/circuits.py:63 -#: netbox/circuits/tables/providers.py:66 +#: netbox/circuits/forms/filtersets.py:81 +#: netbox/circuits/tables/circuits.py:62 +#: netbox/circuits/tables/providers.py:64 +#: netbox/circuits/tables/virtual_circuits.py:55 +#: netbox/circuits/tables/virtual_circuits.py:103 #: netbox/templates/circuits/circuit.html:22 #: netbox/templates/circuits/provideraccount.html:24 msgid "Account" msgstr "Hesap" -#: netbox/circuits/forms/filtersets.py:217 +#: netbox/circuits/forms/filtersets.py:253 msgid "Term Side" msgstr "Dönem Tarafı" -#: netbox/circuits/forms/filtersets.py:250 netbox/dcim/forms/bulk_edit.py:1557 -#: netbox/extras/forms/model_forms.py:582 netbox/ipam/forms/filtersets.py:142 -#: netbox/ipam/forms/filtersets.py:546 netbox/ipam/forms/model_forms.py:327 +#: netbox/circuits/forms/filtersets.py:286 netbox/dcim/forms/bulk_edit.py:1572 +#: netbox/extras/forms/model_forms.py:596 netbox/ipam/forms/filtersets.py:144 +#: netbox/ipam/forms/filtersets.py:598 netbox/ipam/forms/model_forms.py:337 +#: netbox/templates/dcim/macaddress.html:25 #: netbox/templates/extras/configcontext.html:60 #: netbox/templates/ipam/ipaddress.html:59 -#: netbox/templates/ipam/vlan_edit.html:30 +#: netbox/templates/ipam/vlan_edit.html:38 #: netbox/tenancy/forms/filtersets.py:87 netbox/users/forms/model_forms.py:314 msgid "Assignment" msgstr "Ödev" -#: netbox/circuits/forms/filtersets.py:265 -#: netbox/circuits/forms/model_forms.py:195 -#: netbox/circuits/tables/circuits.py:155 netbox/dcim/forms/bulk_edit.py:118 -#: netbox/dcim/forms/bulk_import.py:100 netbox/dcim/forms/model_forms.py:117 -#: netbox/dcim/tables/sites.py:89 netbox/extras/forms/filtersets.py:480 -#: netbox/ipam/filtersets.py:1001 netbox/ipam/forms/bulk_edit.py:493 -#: netbox/ipam/forms/bulk_import.py:460 netbox/ipam/forms/model_forms.py:561 -#: netbox/ipam/tables/fhrp.py:67 netbox/ipam/tables/vlans.py:122 -#: netbox/ipam/tables/vlans.py:226 +#: netbox/circuits/forms/filtersets.py:301 +#: netbox/circuits/forms/model_forms.py:252 +#: netbox/circuits/tables/circuits.py:191 netbox/dcim/forms/bulk_edit.py:121 +#: netbox/dcim/forms/bulk_import.py:102 netbox/dcim/forms/model_forms.py:120 +#: netbox/dcim/tables/sites.py:89 netbox/extras/forms/filtersets.py:489 +#: netbox/ipam/filtersets.py:968 netbox/ipam/forms/bulk_edit.py:477 +#: netbox/ipam/forms/bulk_import.py:459 netbox/ipam/forms/model_forms.py:571 +#: netbox/ipam/tables/fhrp.py:67 netbox/ipam/tables/vlans.py:91 +#: netbox/ipam/tables/vlans.py:202 #: netbox/templates/circuits/circuitgroupassignment.html:22 -#: netbox/templates/dcim/interface.html:284 netbox/templates/dcim/site.html:37 +#: netbox/templates/dcim/interface.html:341 netbox/templates/dcim/site.html:37 #: netbox/templates/ipam/inc/panels/fhrp_groups.html:23 #: netbox/templates/ipam/vlan.html:27 netbox/templates/tenancy/contact.html:21 #: netbox/templates/tenancy/tenant.html:20 netbox/templates/users/group.html:6 @@ -1128,226 +1393,241 @@ msgstr "Ödev" #: netbox/tenancy/tables/tenants.py:42 netbox/users/filtersets.py:62 #: netbox/users/filtersets.py:185 netbox/users/forms/filtersets.py:31 #: netbox/users/forms/filtersets.py:37 netbox/users/forms/filtersets.py:79 -#: netbox/virtualization/forms/bulk_edit.py:65 -#: netbox/virtualization/forms/bulk_import.py:47 -#: netbox/virtualization/forms/filtersets.py:85 -#: netbox/virtualization/forms/model_forms.py:66 +#: netbox/virtualization/forms/bulk_edit.py:66 +#: netbox/virtualization/forms/bulk_import.py:48 +#: netbox/virtualization/forms/filtersets.py:90 +#: netbox/virtualization/forms/model_forms.py:70 #: netbox/virtualization/tables/clusters.py:70 #: netbox/vpn/forms/bulk_edit.py:112 netbox/vpn/forms/bulk_import.py:158 #: netbox/vpn/forms/filtersets.py:116 netbox/vpn/tables/crypto.py:31 -#: netbox/vpn/tables/tunnels.py:44 netbox/wireless/forms/bulk_edit.py:48 -#: netbox/wireless/forms/bulk_import.py:36 -#: netbox/wireless/forms/filtersets.py:46 -#: netbox/wireless/forms/model_forms.py:40 +#: netbox/vpn/tables/tunnels.py:44 netbox/wireless/forms/bulk_edit.py:50 +#: netbox/wireless/forms/bulk_import.py:38 +#: netbox/wireless/forms/filtersets.py:49 +#: netbox/wireless/forms/model_forms.py:41 #: netbox/wireless/tables/wirelesslan.py:48 msgid "Group" msgstr "Grup" -#: netbox/circuits/forms/model_forms.py:182 +#: netbox/circuits/forms/model_forms.py:239 #: netbox/templates/circuits/circuitgroup.html:25 msgid "Circuit Group" msgstr "Devre Grubu" -#: netbox/circuits/models/circuits.py:27 netbox/dcim/models/cables.py:67 -#: netbox/dcim/models/device_component_templates.py:517 -#: netbox/dcim/models/device_component_templates.py:617 -#: netbox/dcim/models/device_components.py:975 -#: netbox/dcim/models/device_components.py:1049 -#: netbox/dcim/models/device_components.py:1204 -#: netbox/dcim/models/devices.py:479 netbox/dcim/models/racks.py:224 +#: netbox/circuits/forms/model_forms.py:259 +msgid "Circuit type" +msgstr "Devre tipi" + +#: netbox/circuits/forms/model_forms.py:270 +msgid "Group Assignment" +msgstr "Grup Ödevi" + +#: netbox/circuits/models/base.py:18 netbox/dcim/models/cables.py:69 +#: netbox/dcim/models/device_component_templates.py:531 +#: netbox/dcim/models/device_component_templates.py:631 +#: netbox/dcim/models/device_components.py:476 +#: netbox/dcim/models/device_components.py:1026 +#: netbox/dcim/models/device_components.py:1097 +#: netbox/dcim/models/device_components.py:1243 +#: netbox/dcim/models/devices.py:478 netbox/dcim/models/racks.py:221 #: netbox/extras/models/tags.py:28 msgid "color" msgstr "renk" -#: netbox/circuits/models/circuits.py:36 +#: netbox/circuits/models/circuits.py:34 msgid "circuit type" msgstr "devre tipi" -#: netbox/circuits/models/circuits.py:37 +#: netbox/circuits/models/circuits.py:35 msgid "circuit types" msgstr "devre türleri" -#: netbox/circuits/models/circuits.py:48 +#: netbox/circuits/models/circuits.py:46 +#: netbox/circuits/models/virtual_circuits.py:38 msgid "circuit ID" msgstr "devre ID" -#: netbox/circuits/models/circuits.py:49 +#: netbox/circuits/models/circuits.py:47 +#: netbox/circuits/models/virtual_circuits.py:39 msgid "Unique circuit ID" msgstr "Benzersiz devre ID" -#: netbox/circuits/models/circuits.py:69 netbox/core/models/data.py:52 -#: netbox/core/models/jobs.py:85 netbox/dcim/models/cables.py:49 -#: netbox/dcim/models/devices.py:653 netbox/dcim/models/devices.py:1173 -#: netbox/dcim/models/devices.py:1404 netbox/dcim/models/power.py:96 -#: netbox/dcim/models/racks.py:297 netbox/dcim/models/sites.py:154 -#: netbox/dcim/models/sites.py:266 netbox/ipam/models/ip.py:253 -#: netbox/ipam/models/ip.py:522 netbox/ipam/models/ip.py:730 -#: netbox/ipam/models/vlans.py:211 netbox/virtualization/models/clusters.py:74 -#: netbox/virtualization/models/virtualmachines.py:84 -#: netbox/vpn/models/tunnels.py:40 netbox/wireless/models.py:95 -#: netbox/wireless/models.py:159 +#: netbox/circuits/models/circuits.py:67 +#: netbox/circuits/models/virtual_circuits.py:59 netbox/core/models/data.py:52 +#: netbox/core/models/jobs.py:85 netbox/dcim/models/cables.py:51 +#: netbox/dcim/models/device_components.py:1283 +#: netbox/dcim/models/devices.py:645 netbox/dcim/models/devices.py:1181 +#: netbox/dcim/models/devices.py:1409 netbox/dcim/models/power.py:94 +#: netbox/dcim/models/racks.py:288 netbox/dcim/models/sites.py:154 +#: netbox/dcim/models/sites.py:270 netbox/ipam/models/ip.py:237 +#: netbox/ipam/models/ip.py:508 netbox/ipam/models/ip.py:729 +#: netbox/ipam/models/vlans.py:210 netbox/virtualization/models/clusters.py:70 +#: netbox/virtualization/models/virtualmachines.py:79 +#: netbox/vpn/models/tunnels.py:38 netbox/wireless/models.py:95 +#: netbox/wireless/models.py:156 msgid "status" msgstr "durum" -#: netbox/circuits/models/circuits.py:84 netbox/templates/core/plugin.html:20 +#: netbox/circuits/models/circuits.py:82 netbox/templates/core/plugin.html:20 msgid "installed" msgstr "kurulmuş" -#: netbox/circuits/models/circuits.py:89 +#: netbox/circuits/models/circuits.py:87 msgid "terminates" msgstr "sonlandırır" -#: netbox/circuits/models/circuits.py:94 +#: netbox/circuits/models/circuits.py:92 msgid "commit rate (Kbps)" msgstr "taahhüt oranı (Kbps)" -#: netbox/circuits/models/circuits.py:95 +#: netbox/circuits/models/circuits.py:93 msgid "Committed rate" msgstr "Taahhüt oranı" -#: netbox/circuits/models/circuits.py:137 +#: netbox/circuits/models/circuits.py:142 msgid "circuit" msgstr "devre" -#: netbox/circuits/models/circuits.py:138 +#: netbox/circuits/models/circuits.py:143 msgid "circuits" msgstr "devreler" -#: netbox/circuits/models/circuits.py:170 +#: netbox/circuits/models/circuits.py:172 msgid "circuit group" msgstr "devre grubu" -#: netbox/circuits/models/circuits.py:171 +#: netbox/circuits/models/circuits.py:173 msgid "circuit groups" msgstr "devre grupları" -#: netbox/circuits/models/circuits.py:195 netbox/ipam/models/fhrp.py:93 -#: netbox/tenancy/models/contacts.py:134 +#: netbox/circuits/models/circuits.py:190 +msgid "member ID" +msgstr "Üye Kimliği" + +#: netbox/circuits/models/circuits.py:202 netbox/ipam/models/fhrp.py:90 +#: netbox/tenancy/models/contacts.py:126 msgid "priority" msgstr "öncelik" -#: netbox/circuits/models/circuits.py:213 +#: netbox/circuits/models/circuits.py:220 msgid "Circuit group assignment" msgstr "Devre grubu ataması" -#: netbox/circuits/models/circuits.py:214 +#: netbox/circuits/models/circuits.py:221 msgid "Circuit group assignments" msgstr "Devre grubu atamaları" -#: netbox/circuits/models/circuits.py:240 -msgid "termination" -msgstr "" +#: netbox/circuits/models/circuits.py:247 +msgid "termination side" +msgstr "sonlandırma tarafı" -#: netbox/circuits/models/circuits.py:257 +#: netbox/circuits/models/circuits.py:266 msgid "port speed (Kbps)" msgstr "bağlantı noktası hızı (Kbps)" -#: netbox/circuits/models/circuits.py:260 +#: netbox/circuits/models/circuits.py:269 msgid "Physical circuit speed" msgstr "Fiziksel devre hızı" -#: netbox/circuits/models/circuits.py:265 +#: netbox/circuits/models/circuits.py:274 msgid "upstream speed (Kbps)" msgstr "yukarı akış hızı (Kbps)" -#: netbox/circuits/models/circuits.py:266 +#: netbox/circuits/models/circuits.py:275 msgid "Upstream speed, if different from port speed" msgstr "Bağlantı noktası hızından farklıysa yukarı akış hızı" -#: netbox/circuits/models/circuits.py:271 +#: netbox/circuits/models/circuits.py:280 msgid "cross-connect ID" msgstr "çapraz bağlantı kimliği" -#: netbox/circuits/models/circuits.py:272 +#: netbox/circuits/models/circuits.py:281 msgid "ID of the local cross-connect" msgstr "Yerel çapraz bağlantının kimliği" -#: netbox/circuits/models/circuits.py:277 +#: netbox/circuits/models/circuits.py:286 msgid "patch panel/port(s)" msgstr "bağlantı paneli/port(lar)" -#: netbox/circuits/models/circuits.py:278 +#: netbox/circuits/models/circuits.py:287 msgid "Patch panel ID and port number(s)" msgstr "Bağlantı paneli ID ve port numaraları" -#: netbox/circuits/models/circuits.py:281 -#: netbox/dcim/models/device_component_templates.py:61 -#: netbox/dcim/models/device_components.py:68 netbox/dcim/models/racks.py:685 +#: netbox/circuits/models/circuits.py:290 +#: netbox/circuits/models/virtual_circuits.py:144 +#: netbox/dcim/models/device_component_templates.py:57 +#: netbox/dcim/models/device_components.py:63 netbox/dcim/models/racks.py:681 #: netbox/extras/models/configs.py:45 netbox/extras/models/configs.py:219 #: netbox/extras/models/customfields.py:125 netbox/extras/models/models.py:61 #: netbox/extras/models/models.py:158 netbox/extras/models/models.py:396 #: netbox/extras/models/models.py:511 #: netbox/extras/models/notifications.py:131 -#: netbox/extras/models/staging.py:31 netbox/extras/models/tags.py:32 -#: netbox/netbox/models/__init__.py:110 netbox/netbox/models/__init__.py:145 -#: netbox/netbox/models/__init__.py:191 netbox/users/models/permissions.py:24 -#: netbox/users/models/tokens.py:57 netbox/users/models/users.py:33 -#: netbox/virtualization/models/virtualmachines.py:289 +#: netbox/extras/models/staging.py:32 netbox/extras/models/tags.py:32 +#: netbox/ipam/models/vlans.py:358 netbox/netbox/models/__init__.py:115 +#: netbox/netbox/models/__init__.py:150 netbox/netbox/models/__init__.py:196 +#: netbox/users/models/permissions.py:24 netbox/users/models/tokens.py:57 +#: netbox/users/models/users.py:33 +#: netbox/virtualization/models/virtualmachines.py:276 msgid "description" msgstr "açıklama" -#: netbox/circuits/models/circuits.py:294 +#: netbox/circuits/models/circuits.py:340 msgid "circuit termination" msgstr "devre sonlandırma" -#: netbox/circuits/models/circuits.py:295 +#: netbox/circuits/models/circuits.py:341 msgid "circuit terminations" msgstr "devre sonlandırmaları" -#: netbox/circuits/models/circuits.py:308 -msgid "" -"A circuit termination must attach to either a site or a provider network." -msgstr "" +#: netbox/circuits/models/circuits.py:353 +msgid "A circuit termination must attach to a terminating object." +msgstr "Bir devre sonlandırma, sonlandırma nesnesine bağlanmalıdır." -#: netbox/circuits/models/circuits.py:310 -msgid "" -"A circuit termination cannot attach to both a site and a provider network." -msgstr "" - -#: netbox/circuits/models/providers.py:22 -#: netbox/circuits/models/providers.py:66 -#: netbox/circuits/models/providers.py:104 netbox/core/models/data.py:39 +#: netbox/circuits/models/providers.py:21 +#: netbox/circuits/models/providers.py:63 +#: netbox/circuits/models/providers.py:98 netbox/core/models/data.py:39 #: netbox/core/models/jobs.py:46 #: netbox/dcim/models/device_component_templates.py:43 -#: netbox/dcim/models/device_components.py:53 -#: netbox/dcim/models/devices.py:593 netbox/dcim/models/devices.py:1335 -#: netbox/dcim/models/devices.py:1400 netbox/dcim/models/power.py:39 -#: netbox/dcim/models/power.py:92 netbox/dcim/models/racks.py:262 -#: netbox/dcim/models/sites.py:138 netbox/extras/models/configs.py:36 +#: netbox/dcim/models/device_components.py:52 +#: netbox/dcim/models/devices.py:589 netbox/dcim/models/devices.py:1341 +#: netbox/dcim/models/devices.py:1404 netbox/dcim/models/power.py:38 +#: netbox/dcim/models/power.py:89 netbox/dcim/models/racks.py:257 +#: netbox/dcim/models/sites.py:142 netbox/extras/models/configs.py:36 #: netbox/extras/models/configs.py:215 netbox/extras/models/customfields.py:92 #: netbox/extras/models/models.py:56 netbox/extras/models/models.py:153 #: netbox/extras/models/models.py:296 netbox/extras/models/models.py:392 #: netbox/extras/models/models.py:501 netbox/extras/models/models.py:596 #: netbox/extras/models/notifications.py:126 -#: netbox/extras/models/scripts.py:30 netbox/extras/models/staging.py:26 -#: netbox/ipam/models/asns.py:18 netbox/ipam/models/fhrp.py:25 -#: netbox/ipam/models/services.py:52 netbox/ipam/models/services.py:88 -#: netbox/ipam/models/vlans.py:36 netbox/ipam/models/vlans.py:200 -#: netbox/ipam/models/vrfs.py:22 netbox/ipam/models/vrfs.py:79 -#: netbox/netbox/models/__init__.py:137 netbox/netbox/models/__init__.py:181 -#: netbox/tenancy/models/contacts.py:64 netbox/tenancy/models/tenants.py:20 -#: netbox/tenancy/models/tenants.py:45 netbox/users/models/permissions.py:20 -#: netbox/users/models/users.py:28 netbox/virtualization/models/clusters.py:57 -#: netbox/virtualization/models/virtualmachines.py:72 -#: netbox/virtualization/models/virtualmachines.py:279 -#: netbox/vpn/models/crypto.py:24 netbox/vpn/models/crypto.py:71 -#: netbox/vpn/models/crypto.py:131 netbox/vpn/models/crypto.py:183 -#: netbox/vpn/models/crypto.py:221 netbox/vpn/models/l2vpn.py:22 -#: netbox/vpn/models/tunnels.py:35 netbox/wireless/models.py:51 +#: netbox/extras/models/scripts.py:30 netbox/extras/models/staging.py:27 +#: netbox/ipam/models/asns.py:17 netbox/ipam/models/fhrp.py:24 +#: netbox/ipam/models/services.py:51 netbox/ipam/models/services.py:84 +#: netbox/ipam/models/vlans.py:37 netbox/ipam/models/vlans.py:199 +#: netbox/ipam/models/vlans.py:337 netbox/ipam/models/vrfs.py:20 +#: netbox/ipam/models/vrfs.py:75 netbox/netbox/models/__init__.py:142 +#: netbox/netbox/models/__init__.py:186 netbox/tenancy/models/contacts.py:58 +#: netbox/tenancy/models/tenants.py:19 netbox/tenancy/models/tenants.py:42 +#: netbox/users/models/permissions.py:20 netbox/users/models/users.py:28 +#: netbox/virtualization/models/clusters.py:52 +#: netbox/virtualization/models/virtualmachines.py:71 +#: netbox/virtualization/models/virtualmachines.py:271 +#: netbox/virtualization/models/virtualmachines.py:305 +#: netbox/vpn/models/crypto.py:23 netbox/vpn/models/crypto.py:69 +#: netbox/vpn/models/crypto.py:128 netbox/vpn/models/crypto.py:180 +#: netbox/vpn/models/crypto.py:216 netbox/vpn/models/l2vpn.py:21 +#: netbox/vpn/models/tunnels.py:32 netbox/wireless/models.py:53 msgid "name" msgstr "ad" -#: netbox/circuits/models/providers.py:25 +#: netbox/circuits/models/providers.py:24 msgid "Full name of the provider" msgstr "Sağlayıcının tam adı" -#: netbox/circuits/models/providers.py:28 netbox/dcim/models/devices.py:86 +#: netbox/circuits/models/providers.py:28 netbox/dcim/models/devices.py:88 #: netbox/dcim/models/racks.py:137 netbox/dcim/models/sites.py:149 #: netbox/extras/models/models.py:506 netbox/ipam/models/asns.py:23 -#: netbox/ipam/models/vlans.py:40 netbox/netbox/models/__init__.py:141 -#: netbox/netbox/models/__init__.py:186 netbox/tenancy/models/tenants.py:25 -#: netbox/tenancy/models/tenants.py:49 netbox/vpn/models/l2vpn.py:27 -#: netbox/wireless/models.py:56 +#: netbox/ipam/models/vlans.py:42 netbox/netbox/models/__init__.py:146 +#: netbox/netbox/models/__init__.py:191 netbox/tenancy/models/tenants.py:25 +#: netbox/tenancy/models/tenants.py:47 netbox/vpn/models/l2vpn.py:27 +#: netbox/wireless/models.py:59 msgid "slug" msgstr "kısa ad" @@ -1359,67 +1639,100 @@ msgstr "sağlayıcı" msgid "providers" msgstr "sağlayıcılar" -#: netbox/circuits/models/providers.py:63 +#: netbox/circuits/models/providers.py:60 msgid "account ID" msgstr "hesap kimliği" -#: netbox/circuits/models/providers.py:86 +#: netbox/circuits/models/providers.py:83 msgid "provider account" msgstr "sağlayıcı hesabı" -#: netbox/circuits/models/providers.py:87 +#: netbox/circuits/models/providers.py:84 msgid "provider accounts" msgstr "sağlayıcı hesapları" -#: netbox/circuits/models/providers.py:115 +#: netbox/circuits/models/providers.py:110 msgid "service ID" msgstr "servis kimliği" -#: netbox/circuits/models/providers.py:126 +#: netbox/circuits/models/providers.py:121 msgid "provider network" msgstr "sağlayıcı ağı" -#: netbox/circuits/models/providers.py:127 +#: netbox/circuits/models/providers.py:122 msgid "provider networks" msgstr "sağlayıcı ağları" -#: netbox/circuits/tables/circuits.py:32 -#: netbox/circuits/tables/circuits.py:132 +#: netbox/circuits/models/virtual_circuits.py:28 +msgid "virtual circuit type" +msgstr "sanal devre tipi" + +#: netbox/circuits/models/virtual_circuits.py:29 +msgid "virtual circuit types" +msgstr "sanal devre türleri" + +#: netbox/circuits/models/virtual_circuits.py:99 +msgid "virtual circuit" +msgstr "sanal devre" + +#: netbox/circuits/models/virtual_circuits.py:100 +msgid "virtual circuits" +msgstr "sanal devreler" + +#: netbox/circuits/models/virtual_circuits.py:133 netbox/ipam/models/ip.py:194 +#: netbox/ipam/models/ip.py:736 netbox/vpn/models/tunnels.py:109 +msgid "role" +msgstr "rol" + +#: netbox/circuits/models/virtual_circuits.py:151 +msgid "virtual circuit termination" +msgstr "sanal devre sonlandırma" + +#: netbox/circuits/models/virtual_circuits.py:152 +msgid "virtual circuit terminations" +msgstr "sanal devre sonlandırmaları" + +#: netbox/circuits/tables/circuits.py:30 +#: netbox/circuits/tables/circuits.py:168 #: netbox/circuits/tables/providers.py:18 -#: netbox/circuits/tables/providers.py:69 -#: netbox/circuits/tables/providers.py:99 netbox/core/tables/data.py:16 +#: netbox/circuits/tables/providers.py:67 +#: netbox/circuits/tables/providers.py:97 +#: netbox/circuits/tables/virtual_circuits.py:18 netbox/core/tables/data.py:16 #: netbox/core/tables/jobs.py:14 netbox/core/tables/plugins.py:44 #: netbox/core/tables/tasks.py:11 netbox/core/tables/tasks.py:115 -#: netbox/dcim/forms/filtersets.py:63 netbox/dcim/forms/object_create.py:43 -#: netbox/dcim/tables/devices.py:52 netbox/dcim/tables/devices.py:92 -#: netbox/dcim/tables/devices.py:134 netbox/dcim/tables/devices.py:289 -#: netbox/dcim/tables/devices.py:392 netbox/dcim/tables/devices.py:433 -#: netbox/dcim/tables/devices.py:482 netbox/dcim/tables/devices.py:531 -#: netbox/dcim/tables/devices.py:648 netbox/dcim/tables/devices.py:731 -#: netbox/dcim/tables/devices.py:778 netbox/dcim/tables/devices.py:841 -#: netbox/dcim/tables/devices.py:911 netbox/dcim/tables/devices.py:974 -#: netbox/dcim/tables/devices.py:994 netbox/dcim/tables/devices.py:1023 -#: netbox/dcim/tables/devices.py:1053 netbox/dcim/tables/devicetypes.py:31 +#: netbox/dcim/forms/filtersets.py:64 netbox/dcim/forms/object_create.py:43 +#: netbox/dcim/tables/devices.py:63 netbox/dcim/tables/devices.py:103 +#: netbox/dcim/tables/devices.py:145 netbox/dcim/tables/devices.py:300 +#: netbox/dcim/tables/devices.py:403 netbox/dcim/tables/devices.py:444 +#: netbox/dcim/tables/devices.py:492 netbox/dcim/tables/devices.py:541 +#: netbox/dcim/tables/devices.py:562 netbox/dcim/tables/devices.py:682 +#: netbox/dcim/tables/devices.py:765 netbox/dcim/tables/devices.py:811 +#: netbox/dcim/tables/devices.py:873 netbox/dcim/tables/devices.py:942 +#: netbox/dcim/tables/devices.py:1007 netbox/dcim/tables/devices.py:1026 +#: netbox/dcim/tables/devices.py:1055 netbox/dcim/tables/devices.py:1085 +#: netbox/dcim/tables/devicetypes.py:31 netbox/dcim/tables/devicetypes.py:227 #: netbox/dcim/tables/power.py:22 netbox/dcim/tables/power.py:62 #: netbox/dcim/tables/racks.py:24 netbox/dcim/tables/racks.py:113 #: netbox/dcim/tables/sites.py:24 netbox/dcim/tables/sites.py:51 -#: netbox/dcim/tables/sites.py:78 netbox/dcim/tables/sites.py:130 -#: netbox/extras/forms/filtersets.py:213 netbox/extras/tables/tables.py:58 +#: netbox/dcim/tables/sites.py:78 netbox/dcim/tables/sites.py:129 +#: netbox/extras/forms/filtersets.py:218 netbox/extras/tables/tables.py:58 #: netbox/extras/tables/tables.py:122 netbox/extras/tables/tables.py:155 #: netbox/extras/tables/tables.py:180 netbox/extras/tables/tables.py:246 #: netbox/extras/tables/tables.py:361 netbox/extras/tables/tables.py:378 #: netbox/extras/tables/tables.py:401 netbox/extras/tables/tables.py:439 #: netbox/extras/tables/tables.py:491 netbox/extras/tables/tables.py:514 -#: netbox/ipam/forms/bulk_edit.py:407 netbox/ipam/forms/filtersets.py:386 -#: netbox/ipam/tables/asn.py:16 netbox/ipam/tables/ip.py:85 -#: netbox/ipam/tables/ip.py:160 netbox/ipam/tables/services.py:15 -#: netbox/ipam/tables/services.py:40 netbox/ipam/tables/vlans.py:64 -#: netbox/ipam/tables/vlans.py:114 netbox/ipam/tables/vrfs.py:26 +#: netbox/ipam/forms/bulk_edit.py:391 netbox/ipam/forms/filtersets.py:389 +#: netbox/ipam/forms/filtersets.py:474 netbox/ipam/tables/asn.py:16 +#: netbox/ipam/tables/ip.py:31 netbox/ipam/tables/ip.py:106 +#: netbox/ipam/tables/services.py:15 netbox/ipam/tables/services.py:40 +#: netbox/ipam/tables/vlans.py:33 netbox/ipam/tables/vlans.py:83 +#: netbox/ipam/tables/vlans.py:231 netbox/ipam/tables/vrfs.py:26 #: netbox/ipam/tables/vrfs.py:68 #: netbox/templates/circuits/circuitgroup.html:28 #: netbox/templates/circuits/circuittype.html:22 #: netbox/templates/circuits/provideraccount.html:28 #: netbox/templates/circuits/providernetwork.html:24 +#: netbox/templates/circuits/virtualcircuittype.html:22 #: netbox/templates/core/datasource.html:34 netbox/templates/core/job.html:44 #: netbox/templates/core/plugin.html:54 #: netbox/templates/core/rq_worker.html:43 @@ -1431,7 +1744,7 @@ msgstr "sağlayıcı ağları" #: netbox/templates/dcim/inc/interface_vlans_table.html:5 #: netbox/templates/dcim/inc/panels/inventory_items.html:18 #: netbox/templates/dcim/interface.html:38 -#: netbox/templates/dcim/interface.html:165 +#: netbox/templates/dcim/interface.html:222 #: netbox/templates/dcim/inventoryitem.html:28 #: netbox/templates/dcim/inventoryitemrole.html:18 #: netbox/templates/dcim/location.html:29 @@ -1461,6 +1774,7 @@ msgstr "sağlayıcı ağları" #: netbox/templates/ipam/service.html:24 #: netbox/templates/ipam/servicetemplate.html:15 #: netbox/templates/ipam/vlan.html:35 netbox/templates/ipam/vlangroup.html:30 +#: netbox/templates/ipam/vlantranslationpolicy.html:14 #: netbox/templates/tenancy/contact.html:25 #: netbox/templates/tenancy/contactgroup.html:21 #: netbox/templates/tenancy/contactrole.html:18 @@ -1492,106 +1806,218 @@ msgstr "sağlayıcı ağları" #: netbox/virtualization/tables/clusters.py:17 #: netbox/virtualization/tables/clusters.py:39 #: netbox/virtualization/tables/clusters.py:62 -#: netbox/virtualization/tables/virtualmachines.py:55 -#: netbox/virtualization/tables/virtualmachines.py:139 -#: netbox/virtualization/tables/virtualmachines.py:194 +#: netbox/virtualization/tables/virtualmachines.py:26 +#: netbox/virtualization/tables/virtualmachines.py:109 +#: netbox/virtualization/tables/virtualmachines.py:165 #: netbox/vpn/tables/crypto.py:18 netbox/vpn/tables/crypto.py:57 #: netbox/vpn/tables/crypto.py:93 netbox/vpn/tables/crypto.py:129 #: netbox/vpn/tables/crypto.py:158 netbox/vpn/tables/l2vpn.py:23 #: netbox/vpn/tables/tunnels.py:18 netbox/vpn/tables/tunnels.py:40 #: netbox/wireless/tables/wirelesslan.py:18 -#: netbox/wireless/tables/wirelesslan.py:79 +#: netbox/wireless/tables/wirelesslan.py:88 msgid "Name" msgstr "İsim" -#: netbox/circuits/tables/circuits.py:41 -#: netbox/circuits/tables/circuits.py:138 -#: netbox/circuits/tables/providers.py:45 -#: netbox/circuits/tables/providers.py:79 netbox/netbox/navigation/menu.py:266 -#: netbox/netbox/navigation/menu.py:270 netbox/netbox/navigation/menu.py:272 +#: netbox/circuits/tables/circuits.py:39 +#: netbox/circuits/tables/circuits.py:174 +#: netbox/circuits/tables/providers.py:43 +#: netbox/circuits/tables/providers.py:77 +#: netbox/circuits/tables/virtual_circuits.py:27 +#: netbox/netbox/navigation/menu.py:274 netbox/netbox/navigation/menu.py:278 +#: netbox/netbox/navigation/menu.py:280 #: netbox/templates/circuits/provider.html:57 #: netbox/templates/circuits/provideraccount.html:44 #: netbox/templates/circuits/providernetwork.html:50 msgid "Circuits" msgstr "Devreler" -#: netbox/circuits/tables/circuits.py:55 +#: netbox/circuits/tables/circuits.py:54 +#: netbox/circuits/tables/virtual_circuits.py:42 #: netbox/templates/circuits/circuit.html:26 +#: netbox/templates/circuits/virtualcircuit.html:35 +#: netbox/templates/dcim/interface.html:174 msgid "Circuit ID" msgstr "Devre ID" -#: netbox/circuits/tables/circuits.py:69 -#: netbox/wireless/forms/model_forms.py:160 +#: netbox/circuits/tables/circuits.py:72 +#: netbox/wireless/forms/model_forms.py:163 msgid "Side A" msgstr "A Tarafı" -#: netbox/circuits/tables/circuits.py:74 +#: netbox/circuits/tables/circuits.py:77 msgid "Side Z" msgstr "Z Tarafı" -#: netbox/circuits/tables/circuits.py:77 -#: netbox/templates/circuits/circuit.html:55 +#: netbox/circuits/tables/circuits.py:80 +#: netbox/templates/circuits/circuit.html:65 msgid "Commit Rate" msgstr "Taahhüt Oranı" -#: netbox/circuits/tables/circuits.py:80 -#: netbox/circuits/tables/providers.py:48 -#: netbox/circuits/tables/providers.py:82 -#: netbox/circuits/tables/providers.py:107 netbox/dcim/tables/devices.py:1036 -#: netbox/dcim/tables/devicetypes.py:92 netbox/dcim/tables/modules.py:29 -#: netbox/dcim/tables/modules.py:73 netbox/dcim/tables/power.py:39 -#: netbox/dcim/tables/power.py:96 netbox/dcim/tables/racks.py:84 -#: netbox/dcim/tables/racks.py:145 netbox/dcim/tables/racks.py:225 -#: netbox/dcim/tables/sites.py:108 netbox/extras/tables/tables.py:582 -#: netbox/ipam/tables/asn.py:69 netbox/ipam/tables/fhrp.py:34 -#: netbox/ipam/tables/ip.py:136 netbox/ipam/tables/ip.py:275 -#: netbox/ipam/tables/ip.py:329 netbox/ipam/tables/ip.py:397 -#: netbox/ipam/tables/services.py:24 netbox/ipam/tables/services.py:54 -#: netbox/ipam/tables/vlans.py:145 netbox/ipam/tables/vrfs.py:47 -#: netbox/ipam/tables/vrfs.py:72 netbox/templates/dcim/htmx/cable_edit.html:89 +#: netbox/circuits/tables/circuits.py:84 +#: netbox/circuits/tables/providers.py:46 +#: netbox/circuits/tables/providers.py:80 +#: netbox/circuits/tables/providers.py:105 +#: netbox/circuits/tables/virtual_circuits.py:68 +#: netbox/dcim/tables/devices.py:1068 netbox/dcim/tables/devicetypes.py:97 +#: netbox/dcim/tables/modules.py:29 netbox/dcim/tables/modules.py:73 +#: netbox/dcim/tables/power.py:39 netbox/dcim/tables/power.py:96 +#: netbox/dcim/tables/racks.py:84 netbox/dcim/tables/racks.py:144 +#: netbox/dcim/tables/racks.py:224 netbox/dcim/tables/sites.py:107 +#: netbox/extras/tables/tables.py:582 netbox/ipam/tables/asn.py:69 +#: netbox/ipam/tables/fhrp.py:34 netbox/ipam/tables/ip.py:82 +#: netbox/ipam/tables/ip.py:226 netbox/ipam/tables/ip.py:281 +#: netbox/ipam/tables/ip.py:349 netbox/ipam/tables/services.py:24 +#: netbox/ipam/tables/services.py:54 netbox/ipam/tables/vlans.py:121 +#: netbox/ipam/tables/vrfs.py:47 netbox/ipam/tables/vrfs.py:72 +#: netbox/templates/dcim/htmx/cable_edit.html:89 #: netbox/templates/generic/bulk_edit.html:86 #: netbox/templates/inc/panels/comments.html:5 #: netbox/tenancy/tables/contacts.py:68 netbox/tenancy/tables/tenants.py:46 #: netbox/utilities/forms/fields/fields.py:29 -#: netbox/virtualization/tables/clusters.py:91 -#: netbox/virtualization/tables/virtualmachines.py:82 +#: netbox/virtualization/tables/clusters.py:95 +#: netbox/virtualization/tables/virtualmachines.py:52 #: netbox/vpn/tables/crypto.py:37 netbox/vpn/tables/crypto.py:74 #: netbox/vpn/tables/crypto.py:109 netbox/vpn/tables/crypto.py:140 #: netbox/vpn/tables/crypto.py:173 netbox/vpn/tables/l2vpn.py:37 #: netbox/vpn/tables/tunnels.py:61 netbox/wireless/tables/wirelesslan.py:27 -#: netbox/wireless/tables/wirelesslan.py:58 +#: netbox/wireless/tables/wirelesslan.py:66 msgid "Comments" msgstr "Yorumlar" -#: netbox/circuits/tables/circuits.py:86 +#: netbox/circuits/tables/circuits.py:90 #: netbox/templates/tenancy/contact.html:84 #: netbox/tenancy/tables/contacts.py:73 msgid "Assignments" msgstr "Ödevler" +#: netbox/circuits/tables/circuits.py:117 netbox/dcim/forms/connections.py:81 +msgid "Side" +msgstr "Yan" + +#: netbox/circuits/tables/circuits.py:120 +msgid "Termination Type" +msgstr "Sonlandırma Türü" + +#: netbox/circuits/tables/circuits.py:123 +msgid "Termination Point" +msgstr "Sonlandırma Noktası" + +#: netbox/circuits/tables/circuits.py:134 netbox/dcim/tables/devices.py:161 +#: netbox/templates/dcim/sitegroup.html:26 +msgid "Site Group" +msgstr "Site Grubu" + +#: netbox/circuits/tables/circuits.py:149 +#: netbox/templates/circuits/providernetwork.html:17 +#: netbox/templates/circuits/virtualcircuit.html:27 +#: netbox/templates/circuits/virtualcircuittermination.html:30 +#: netbox/templates/dcim/interface.html:170 +msgid "Provider Network" +msgstr "Sağlayıcı Ağı" + #: netbox/circuits/tables/providers.py:23 msgid "Accounts" msgstr "Hesaplar" -#: netbox/circuits/tables/providers.py:29 +#: netbox/circuits/tables/providers.py:28 msgid "Account Count" msgstr "Hesap Sayısı" -#: netbox/circuits/tables/providers.py:39 netbox/dcim/tables/sites.py:100 +#: netbox/circuits/tables/providers.py:37 netbox/dcim/tables/sites.py:99 msgid "ASN Count" msgstr "ASN Sayısı" -#: netbox/circuits/views.py:331 +#: netbox/circuits/tables/virtual_circuits.py:65 +#: netbox/netbox/navigation/menu.py:234 +#: netbox/templates/circuits/virtualcircuit.html:87 +#: netbox/templates/vpn/l2vpn.html:56 netbox/templates/vpn/tunnel.html:72 +#: netbox/vpn/tables/tunnels.py:58 +msgid "Terminations" +msgstr "Fesih" + +#: netbox/circuits/tables/virtual_circuits.py:109 +#: netbox/dcim/forms/bulk_edit.py:745 netbox/dcim/forms/bulk_edit.py:1299 +#: netbox/dcim/forms/bulk_edit.py:1708 netbox/dcim/forms/bulk_edit.py:1760 +#: netbox/dcim/forms/bulk_import.py:668 netbox/dcim/forms/bulk_import.py:730 +#: netbox/dcim/forms/bulk_import.py:756 netbox/dcim/forms/bulk_import.py:782 +#: netbox/dcim/forms/bulk_import.py:802 netbox/dcim/forms/bulk_import.py:858 +#: netbox/dcim/forms/bulk_import.py:976 netbox/dcim/forms/bulk_import.py:1024 +#: netbox/dcim/forms/bulk_import.py:1041 netbox/dcim/forms/bulk_import.py:1053 +#: netbox/dcim/forms/bulk_import.py:1101 netbox/dcim/forms/bulk_import.py:1205 +#: netbox/dcim/forms/bulk_import.py:1541 netbox/dcim/forms/connections.py:24 +#: netbox/dcim/forms/filtersets.py:132 netbox/dcim/forms/filtersets.py:922 +#: netbox/dcim/forms/filtersets.py:1052 netbox/dcim/forms/filtersets.py:1243 +#: netbox/dcim/forms/filtersets.py:1268 netbox/dcim/forms/filtersets.py:1292 +#: netbox/dcim/forms/filtersets.py:1312 netbox/dcim/forms/filtersets.py:1339 +#: netbox/dcim/forms/filtersets.py:1449 netbox/dcim/forms/filtersets.py:1474 +#: netbox/dcim/forms/filtersets.py:1498 netbox/dcim/forms/filtersets.py:1516 +#: netbox/dcim/forms/filtersets.py:1533 netbox/dcim/forms/filtersets.py:1630 +#: netbox/dcim/forms/filtersets.py:1654 netbox/dcim/forms/filtersets.py:1678 +#: netbox/dcim/forms/model_forms.py:644 netbox/dcim/forms/model_forms.py:861 +#: netbox/dcim/forms/model_forms.py:1231 netbox/dcim/forms/model_forms.py:1716 +#: netbox/dcim/forms/model_forms.py:1787 +#: netbox/dcim/forms/object_create.py:249 netbox/dcim/tables/connections.py:22 +#: netbox/dcim/tables/connections.py:41 netbox/dcim/tables/connections.py:60 +#: netbox/dcim/tables/devices.py:296 netbox/dcim/tables/devices.py:381 +#: netbox/dcim/tables/devices.py:422 netbox/dcim/tables/devices.py:464 +#: netbox/dcim/tables/devices.py:514 netbox/dcim/tables/devices.py:619 +#: netbox/dcim/tables/devices.py:731 netbox/dcim/tables/devices.py:787 +#: netbox/dcim/tables/devices.py:833 netbox/dcim/tables/devices.py:892 +#: netbox/dcim/tables/devices.py:960 netbox/dcim/tables/devices.py:1089 +#: netbox/dcim/tables/modules.py:53 netbox/extras/forms/filtersets.py:328 +#: netbox/ipam/forms/bulk_import.py:303 netbox/ipam/forms/bulk_import.py:540 +#: netbox/ipam/forms/filtersets.py:603 netbox/ipam/forms/model_forms.py:333 +#: netbox/ipam/forms/model_forms.py:762 netbox/ipam/forms/model_forms.py:795 +#: netbox/ipam/forms/model_forms.py:821 netbox/ipam/tables/vlans.py:156 +#: netbox/templates/circuits/virtualcircuittermination.html:56 +#: netbox/templates/dcim/consoleport.html:20 +#: netbox/templates/dcim/consoleserverport.html:20 +#: netbox/templates/dcim/device.html:15 netbox/templates/dcim/device.html:130 +#: netbox/templates/dcim/device_edit.html:10 +#: netbox/templates/dcim/devicebay.html:20 +#: netbox/templates/dcim/devicebay.html:48 +#: netbox/templates/dcim/frontport.html:20 +#: netbox/templates/dcim/interface.html:30 +#: netbox/templates/dcim/interface.html:218 +#: netbox/templates/dcim/inventoryitem.html:20 +#: netbox/templates/dcim/module.html:57 +#: netbox/templates/dcim/modulebay.html:20 +#: netbox/templates/dcim/poweroutlet.html:20 +#: netbox/templates/dcim/powerport.html:20 +#: netbox/templates/dcim/rearport.html:20 +#: netbox/templates/dcim/virtualchassis.html:65 +#: netbox/templates/dcim/virtualchassis_edit.html:51 +#: netbox/templates/dcim/virtualdevicecontext.html:22 +#: netbox/templates/virtualization/virtualmachine.html:114 +#: netbox/templates/vpn/tunneltermination.html:23 +#: netbox/templates/wireless/inc/wirelesslink_interface.html:6 +#: netbox/virtualization/filtersets.py:133 +#: netbox/virtualization/forms/bulk_edit.py:119 +#: netbox/virtualization/forms/bulk_import.py:105 +#: netbox/virtualization/forms/filtersets.py:133 +#: netbox/virtualization/forms/model_forms.py:192 +#: netbox/virtualization/tables/virtualmachines.py:41 netbox/vpn/choices.py:52 +#: netbox/vpn/forms/bulk_import.py:86 netbox/vpn/forms/bulk_import.py:283 +#: netbox/vpn/forms/filtersets.py:275 netbox/vpn/forms/model_forms.py:91 +#: netbox/vpn/forms/model_forms.py:126 netbox/vpn/forms/model_forms.py:237 +#: netbox/vpn/forms/model_forms.py:456 +#: netbox/wireless/forms/model_forms.py:102 +#: netbox/wireless/forms/model_forms.py:144 +#: netbox/wireless/tables/wirelesslan.py:84 +msgid "Device" +msgstr "Cihaz" + +#: netbox/circuits/views.py:356 #, python-brace-format msgid "No terminations have been defined for circuit {circuit}." msgstr "Devre için sonlandırma tanımlanmamıştır {circuit}." -#: netbox/circuits/views.py:380 +#: netbox/circuits/views.py:405 #, python-brace-format msgid "Swapped terminations for circuit {circuit}." msgstr "Devre için değiştirilmiş sonlandırmalar {circuit}." -#: netbox/core/api/views.py:39 +#: netbox/core/api/views.py:51 msgid "This user does not have permission to synchronize this data source." msgstr "Bu kullanıcının bu veri kaynağını senkronize etme izni yoktur." @@ -1616,12 +2042,13 @@ msgstr "Tamamlandı" #: netbox/core/choices.py:22 netbox/core/choices.py:59 #: netbox/core/constants.py:20 netbox/core/tables/tasks.py:34 #: netbox/dcim/choices.py:187 netbox/dcim/choices.py:239 -#: netbox/dcim/choices.py:1609 netbox/virtualization/choices.py:47 +#: netbox/dcim/choices.py:1593 netbox/dcim/choices.py:1666 +#: netbox/virtualization/choices.py:48 msgid "Failed" msgstr "Başarısız" -#: netbox/core/choices.py:35 netbox/netbox/navigation/menu.py:335 -#: netbox/netbox/navigation/menu.py:339 +#: netbox/core/choices.py:35 netbox/netbox/navigation/menu.py:356 +#: netbox/netbox/navigation/menu.py:360 #: netbox/templates/extras/script/base.html:14 #: netbox/templates/extras/script_list.html:7 #: netbox/templates/extras/script_list.html:12 @@ -1651,12 +2078,36 @@ msgstr "Koşu" msgid "Errored" msgstr "Hatalı" -#: netbox/core/choices.py:87 netbox/core/tables/plugins.py:63 +#: netbox/core/choices.py:82 +msgid "Minutely" +msgstr "Dakikalık" + +#: netbox/core/choices.py:83 +msgid "Hourly" +msgstr "Saatlik" + +#: netbox/core/choices.py:84 +msgid "12 hours" +msgstr "12 saat" + +#: netbox/core/choices.py:85 +msgid "Daily" +msgstr "Günlük" + +#: netbox/core/choices.py:86 +msgid "Weekly" +msgstr "Haftalık" + +#: netbox/core/choices.py:87 +msgid "30 days" +msgstr "30 gün" + +#: netbox/core/choices.py:103 netbox/core/tables/plugins.py:63 #: netbox/templates/generic/object.html:61 msgid "Updated" msgstr "Güncellendi" -#: netbox/core/choices.py:88 +#: netbox/core/choices.py:104 msgid "Deleted" msgstr "Silinmiş" @@ -1684,7 +2135,7 @@ msgstr "İptal Edildi" #: netbox/core/data_backends.py:32 netbox/core/tables/plugins.py:51 #: netbox/templates/core/plugin.html:88 -#: netbox/templates/dcim/interface.html:216 +#: netbox/templates/dcim/interface.html:273 msgid "Local" msgstr "Yerel" @@ -1758,7 +2209,7 @@ msgstr "Veri kaynağı (ID)" msgid "Data source (name)" msgstr "Veri kaynağı (isim)" -#: netbox/core/filtersets.py:145 netbox/dcim/filtersets.py:501 +#: netbox/core/filtersets.py:145 netbox/dcim/filtersets.py:502 #: netbox/extras/filtersets.py:287 netbox/extras/filtersets.py:331 #: netbox/extras/filtersets.py:353 netbox/extras/filtersets.py:413 #: netbox/users/filtersets.py:28 @@ -1770,12 +2221,12 @@ msgid "User name" msgstr "Kullanıcı adı" #: netbox/core/forms/bulk_edit.py:25 netbox/core/forms/filtersets.py:43 -#: netbox/core/tables/data.py:26 netbox/dcim/forms/bulk_edit.py:1137 -#: netbox/dcim/forms/bulk_edit.py:1415 netbox/dcim/forms/filtersets.py:1370 -#: netbox/dcim/tables/devices.py:553 netbox/dcim/tables/devicetypes.py:224 +#: netbox/core/tables/data.py:26 netbox/dcim/forms/bulk_edit.py:1140 +#: netbox/dcim/forms/bulk_edit.py:1418 netbox/dcim/forms/filtersets.py:1375 +#: netbox/dcim/tables/devices.py:567 netbox/dcim/tables/devicetypes.py:231 #: netbox/extras/forms/bulk_edit.py:123 netbox/extras/forms/bulk_edit.py:187 -#: netbox/extras/forms/bulk_edit.py:246 netbox/extras/forms/filtersets.py:142 -#: netbox/extras/forms/filtersets.py:229 netbox/extras/forms/filtersets.py:294 +#: netbox/extras/forms/bulk_edit.py:246 netbox/extras/forms/filtersets.py:145 +#: netbox/extras/forms/filtersets.py:235 netbox/extras/forms/filtersets.py:300 #: netbox/extras/tables/tables.py:162 netbox/extras/tables/tables.py:253 #: netbox/extras/tables/tables.py:415 netbox/netbox/preferences.py:22 #: netbox/templates/core/datasource.html:42 @@ -1786,18 +2237,18 @@ msgstr "Kullanıcı adı" #: netbox/templates/users/objectpermission.html:25 #: netbox/templates/virtualization/vminterface.html:29 #: netbox/users/forms/bulk_edit.py:89 netbox/users/forms/filtersets.py:70 -#: netbox/users/tables.py:83 netbox/virtualization/forms/bulk_edit.py:217 -#: netbox/virtualization/forms/filtersets.py:215 +#: netbox/users/tables.py:83 netbox/virtualization/forms/bulk_edit.py:199 +#: netbox/virtualization/forms/filtersets.py:220 msgid "Enabled" msgstr "Etkin" -#: netbox/core/forms/bulk_edit.py:34 netbox/extras/forms/model_forms.py:285 +#: netbox/core/forms/bulk_edit.py:34 netbox/extras/forms/model_forms.py:299 #: netbox/templates/extras/savedfilter.html:52 #: netbox/vpn/forms/filtersets.py:97 netbox/vpn/forms/filtersets.py:127 #: netbox/vpn/forms/filtersets.py:151 netbox/vpn/forms/filtersets.py:170 -#: netbox/vpn/forms/model_forms.py:301 netbox/vpn/forms/model_forms.py:321 -#: netbox/vpn/forms/model_forms.py:337 netbox/vpn/forms/model_forms.py:357 -#: netbox/vpn/forms/model_forms.py:380 +#: netbox/vpn/forms/model_forms.py:302 netbox/vpn/forms/model_forms.py:323 +#: netbox/vpn/forms/model_forms.py:339 netbox/vpn/forms/model_forms.py:360 +#: netbox/vpn/forms/model_forms.py:383 msgid "Parameters" msgstr "Parametreler" @@ -1806,16 +2257,15 @@ msgid "Ignore rules" msgstr "Kuralları yok sayın" #: netbox/core/forms/filtersets.py:30 netbox/core/forms/model_forms.py:97 -#: netbox/extras/forms/model_forms.py:248 -#: netbox/extras/forms/model_forms.py:578 -#: netbox/extras/forms/model_forms.py:632 netbox/extras/tables/tables.py:191 +#: netbox/extras/forms/model_forms.py:262 +#: netbox/extras/forms/model_forms.py:592 +#: netbox/extras/forms/model_forms.py:646 netbox/extras/tables/tables.py:191 #: netbox/extras/tables/tables.py:483 netbox/extras/tables/tables.py:518 #: netbox/templates/core/datasource.html:31 -#: netbox/templates/dcim/device/render_config.html:18 #: netbox/templates/extras/configcontext.html:29 #: netbox/templates/extras/configtemplate.html:21 #: netbox/templates/extras/exporttemplate.html:35 -#: netbox/templates/virtualization/virtualmachine/render_config.html:18 +#: netbox/templates/extras/object_render_config.html:19 msgid "Data Source" msgstr "Veri Kaynağı" @@ -1824,17 +2274,17 @@ msgid "File" msgstr "Dosya" #: netbox/core/forms/filtersets.py:60 netbox/core/forms/mixins.py:16 -#: netbox/extras/forms/filtersets.py:170 netbox/extras/forms/filtersets.py:328 -#: netbox/extras/forms/filtersets.py:413 +#: netbox/extras/forms/filtersets.py:174 netbox/extras/forms/filtersets.py:335 +#: netbox/extras/forms/filtersets.py:421 msgid "Data source" msgstr "Veri kaynağı" -#: netbox/core/forms/filtersets.py:70 netbox/extras/forms/filtersets.py:440 +#: netbox/core/forms/filtersets.py:71 netbox/extras/forms/filtersets.py:448 msgid "Creation" msgstr "Oluşturma" -#: netbox/core/forms/filtersets.py:74 netbox/core/forms/filtersets.py:160 -#: netbox/extras/forms/filtersets.py:461 netbox/extras/tables/tables.py:220 +#: netbox/core/forms/filtersets.py:75 netbox/core/forms/filtersets.py:161 +#: netbox/extras/forms/filtersets.py:469 netbox/extras/tables/tables.py:220 #: netbox/extras/tables/tables.py:294 netbox/extras/tables/tables.py:326 #: netbox/extras/tables/tables.py:571 netbox/templates/core/job.html:38 #: netbox/templates/core/objectchange.html:52 @@ -1842,42 +2292,42 @@ msgstr "Oluşturma" msgid "Object Type" msgstr "Nesne Türü" -#: netbox/core/forms/filtersets.py:84 +#: netbox/core/forms/filtersets.py:85 msgid "Created after" msgstr "Sonra oluşturuldu" -#: netbox/core/forms/filtersets.py:89 +#: netbox/core/forms/filtersets.py:90 msgid "Created before" msgstr "Daha önce oluşturuldu" -#: netbox/core/forms/filtersets.py:94 +#: netbox/core/forms/filtersets.py:95 msgid "Scheduled after" msgstr "Sonrasında planlandı" -#: netbox/core/forms/filtersets.py:99 +#: netbox/core/forms/filtersets.py:100 msgid "Scheduled before" msgstr "Önceden planlanmış" -#: netbox/core/forms/filtersets.py:104 +#: netbox/core/forms/filtersets.py:105 msgid "Started after" msgstr "Sonra başladı" -#: netbox/core/forms/filtersets.py:109 +#: netbox/core/forms/filtersets.py:110 msgid "Started before" msgstr "Daha önce başladı" -#: netbox/core/forms/filtersets.py:114 +#: netbox/core/forms/filtersets.py:115 msgid "Completed after" msgstr "Sonrasında tamamlandı" -#: netbox/core/forms/filtersets.py:119 +#: netbox/core/forms/filtersets.py:120 msgid "Completed before" msgstr "Daha önce tamamlandı" -#: netbox/core/forms/filtersets.py:126 netbox/core/forms/filtersets.py:155 -#: netbox/dcim/forms/bulk_edit.py:462 netbox/dcim/forms/filtersets.py:418 -#: netbox/dcim/forms/filtersets.py:462 netbox/dcim/forms/model_forms.py:316 -#: netbox/extras/forms/filtersets.py:456 netbox/extras/forms/filtersets.py:475 +#: netbox/core/forms/filtersets.py:127 netbox/core/forms/filtersets.py:156 +#: netbox/dcim/forms/bulk_edit.py:465 netbox/dcim/forms/filtersets.py:419 +#: netbox/dcim/forms/filtersets.py:463 netbox/dcim/forms/model_forms.py:324 +#: netbox/extras/forms/filtersets.py:464 netbox/extras/forms/filtersets.py:484 #: netbox/extras/tables/tables.py:302 netbox/extras/tables/tables.py:342 #: netbox/templates/core/objectchange.html:36 #: netbox/templates/dcim/rackreservation.html:58 @@ -1891,22 +2341,22 @@ msgstr "Daha önce tamamlandı" msgid "User" msgstr "Kullanıcı" -#: netbox/core/forms/filtersets.py:134 netbox/core/tables/change_logging.py:15 +#: netbox/core/forms/filtersets.py:135 netbox/core/tables/change_logging.py:15 #: netbox/extras/tables/tables.py:609 netbox/extras/tables/tables.py:646 #: netbox/templates/core/objectchange.html:32 msgid "Time" msgstr "Zaman" -#: netbox/core/forms/filtersets.py:139 netbox/extras/forms/filtersets.py:445 +#: netbox/core/forms/filtersets.py:140 netbox/extras/forms/filtersets.py:453 msgid "After" msgstr "Sonra" -#: netbox/core/forms/filtersets.py:144 netbox/extras/forms/filtersets.py:450 +#: netbox/core/forms/filtersets.py:145 netbox/extras/forms/filtersets.py:458 msgid "Before" msgstr "Önce" -#: netbox/core/forms/filtersets.py:148 netbox/core/tables/change_logging.py:29 -#: netbox/extras/forms/model_forms.py:396 +#: netbox/core/forms/filtersets.py:149 netbox/core/tables/change_logging.py:29 +#: netbox/extras/forms/model_forms.py:410 #: netbox/templates/core/objectchange.html:46 #: netbox/templates/extras/eventrule.html:71 msgid "Action" @@ -1942,22 +2392,22 @@ msgstr "" msgid "Rack Elevations" msgstr "Raf Yükseltmeleri" -#: netbox/core/forms/model_forms.py:157 netbox/dcim/choices.py:1520 -#: netbox/dcim/forms/bulk_edit.py:984 netbox/dcim/forms/bulk_edit.py:1372 -#: netbox/dcim/forms/bulk_edit.py:1390 netbox/dcim/tables/racks.py:158 -#: netbox/netbox/navigation/menu.py:291 netbox/netbox/navigation/menu.py:295 +#: netbox/core/forms/model_forms.py:157 netbox/dcim/choices.py:1522 +#: netbox/dcim/forms/bulk_edit.py:987 netbox/dcim/forms/bulk_edit.py:1375 +#: netbox/dcim/forms/bulk_edit.py:1393 netbox/dcim/tables/racks.py:157 +#: netbox/netbox/navigation/menu.py:312 netbox/netbox/navigation/menu.py:316 msgid "Power" msgstr "Güç" -#: netbox/core/forms/model_forms.py:159 netbox/netbox/navigation/menu.py:154 +#: netbox/core/forms/model_forms.py:159 netbox/netbox/navigation/menu.py:160 #: netbox/templates/core/inc/config_data.html:37 msgid "IPAM" msgstr "IPAM" -#: netbox/core/forms/model_forms.py:160 netbox/netbox/navigation/menu.py:230 +#: netbox/core/forms/model_forms.py:160 netbox/netbox/navigation/menu.py:238 #: netbox/templates/core/inc/config_data.html:50 #: netbox/vpn/forms/bulk_edit.py:77 netbox/vpn/forms/filtersets.py:43 -#: netbox/vpn/forms/model_forms.py:61 netbox/vpn/forms/model_forms.py:146 +#: netbox/vpn/forms/model_forms.py:62 netbox/vpn/forms/model_forms.py:147 msgid "Security" msgstr "Güvenlik" @@ -1972,7 +2422,7 @@ msgid "Pagination" msgstr "Sayfalandırma" #: netbox/core/forms/model_forms.py:163 netbox/extras/forms/bulk_edit.py:92 -#: netbox/extras/forms/filtersets.py:47 netbox/extras/forms/model_forms.py:116 +#: netbox/extras/forms/filtersets.py:48 netbox/extras/forms/model_forms.py:116 #: netbox/extras/forms/model_forms.py:129 #: netbox/templates/core/inc/config_data.html:93 msgid "Validation" @@ -1983,7 +2433,7 @@ msgstr "Doğrulama" msgid "User Preferences" msgstr "Kullanıcı Tercihleri" -#: netbox/core/forms/model_forms.py:167 netbox/dcim/forms/filtersets.py:732 +#: netbox/core/forms/model_forms.py:167 netbox/dcim/forms/filtersets.py:733 #: netbox/templates/core/inc/config_data.html:127 #: netbox/users/forms/model_forms.py:64 msgid "Miscellaneous" @@ -2018,7 +2468,7 @@ msgstr "kullanıcı adı" msgid "request ID" msgstr "istek kimliği" -#: netbox/core/models/change_logging.py:52 netbox/extras/models/staging.py:69 +#: netbox/core/models/change_logging.py:52 netbox/extras/models/staging.py:77 msgid "action" msgstr "aksiyon" @@ -2043,9 +2493,9 @@ msgstr "nesne değişiklikleri" msgid "Change logging is not supported for this object type ({type})." msgstr "Değişiklik günlüğü bu nesne türü için desteklenmez ({type})." -#: netbox/core/models/config.py:18 netbox/core/models/data.py:266 +#: netbox/core/models/config.py:18 netbox/core/models/data.py:263 #: netbox/core/models/files.py:27 netbox/core/models/jobs.py:50 -#: netbox/extras/models/models.py:730 netbox/extras/models/notifications.py:39 +#: netbox/extras/models/models.py:733 netbox/extras/models/notifications.py:39 #: netbox/extras/models/notifications.py:186 #: netbox/netbox/models/features.py:53 netbox/users/models/tokens.py:32 msgid "created" @@ -2080,24 +2530,24 @@ msgstr "Geçerli yapılandırma" msgid "Config revision #{id}" msgstr "Yapılandırma revizyonu #{id}" -#: netbox/core/models/data.py:44 netbox/dcim/models/cables.py:43 -#: netbox/dcim/models/device_component_templates.py:203 -#: netbox/dcim/models/device_component_templates.py:237 -#: netbox/dcim/models/device_component_templates.py:272 -#: netbox/dcim/models/device_component_templates.py:334 -#: netbox/dcim/models/device_component_templates.py:413 -#: netbox/dcim/models/device_component_templates.py:512 -#: netbox/dcim/models/device_component_templates.py:612 -#: netbox/dcim/models/device_components.py:283 -#: netbox/dcim/models/device_components.py:312 -#: netbox/dcim/models/device_components.py:345 -#: netbox/dcim/models/device_components.py:463 -#: netbox/dcim/models/device_components.py:605 -#: netbox/dcim/models/device_components.py:970 -#: netbox/dcim/models/device_components.py:1044 -#: netbox/dcim/models/power.py:102 netbox/extras/models/customfields.py:78 +#: netbox/core/models/data.py:44 netbox/dcim/models/cables.py:44 +#: netbox/dcim/models/device_component_templates.py:199 +#: netbox/dcim/models/device_component_templates.py:234 +#: netbox/dcim/models/device_component_templates.py:270 +#: netbox/dcim/models/device_component_templates.py:335 +#: netbox/dcim/models/device_component_templates.py:420 +#: netbox/dcim/models/device_component_templates.py:526 +#: netbox/dcim/models/device_component_templates.py:626 +#: netbox/dcim/models/device_components.py:279 +#: netbox/dcim/models/device_components.py:306 +#: netbox/dcim/models/device_components.py:337 +#: netbox/dcim/models/device_components.py:453 +#: netbox/dcim/models/device_components.py:653 +#: netbox/dcim/models/device_components.py:1021 +#: netbox/dcim/models/device_components.py:1092 +#: netbox/dcim/models/power.py:100 netbox/extras/models/customfields.py:78 #: netbox/extras/models/search.py:41 -#: netbox/virtualization/models/clusters.py:61 netbox/vpn/models/l2vpn.py:32 +#: netbox/virtualization/models/clusters.py:57 netbox/vpn/models/l2vpn.py:32 msgid "type" msgstr "türü" @@ -2109,8 +2559,8 @@ msgid "URL" msgstr "URL" #: netbox/core/models/data.py:59 -#: netbox/dcim/models/device_component_templates.py:418 -#: netbox/dcim/models/device_components.py:512 +#: netbox/dcim/models/device_component_templates.py:425 +#: netbox/dcim/models/device_components.py:505 #: netbox/extras/models/models.py:70 netbox/extras/models/models.py:301 #: netbox/extras/models/models.py:526 netbox/users/models/permissions.py:29 msgid "enabled" @@ -2142,16 +2592,16 @@ msgstr "veri kaynağı" msgid "data sources" msgstr "veri kaynakları" -#: netbox/core/models/data.py:122 +#: netbox/core/models/data.py:119 #, python-brace-format msgid "Unknown backend type: {type}" msgstr "Bilinmeyen arka uç türü: {type}" -#: netbox/core/models/data.py:164 +#: netbox/core/models/data.py:161 msgid "Cannot initiate sync; syncing already in progress." msgstr "Senkronizasyon başlatılamıyor; senkronizasyon zaten devam ediyor." -#: netbox/core/models/data.py:177 +#: netbox/core/models/data.py:174 msgid "" "There was an error initializing the backend. A dependency needs to be " "installed: " @@ -2159,48 +2609,48 @@ msgstr "" "Arka ucu başlatırken bir hata oluştu. Bir bağımlılığın yüklenmesi gerekiyor:" " " -#: netbox/core/models/data.py:270 netbox/core/models/files.py:31 +#: netbox/core/models/data.py:267 netbox/core/models/files.py:31 #: netbox/netbox/models/features.py:59 msgid "last updated" msgstr "son güncellendi" -#: netbox/core/models/data.py:280 netbox/dcim/models/cables.py:444 +#: netbox/core/models/data.py:277 netbox/dcim/models/cables.py:446 msgid "path" msgstr "yol" -#: netbox/core/models/data.py:283 +#: netbox/core/models/data.py:280 msgid "File path relative to the data source's root" msgstr "Veri kaynağının köküne göre dosya yolu" -#: netbox/core/models/data.py:287 netbox/ipam/models/ip.py:503 +#: netbox/core/models/data.py:284 netbox/ipam/models/ip.py:489 msgid "size" msgstr "boyut" -#: netbox/core/models/data.py:290 +#: netbox/core/models/data.py:287 msgid "hash" msgstr "kare" -#: netbox/core/models/data.py:294 +#: netbox/core/models/data.py:291 msgid "Length must be 64 hexadecimal characters." msgstr "Uzunluk 64 onaltılık karakter olmalıdır." -#: netbox/core/models/data.py:296 +#: netbox/core/models/data.py:293 msgid "SHA256 hash of the file data" msgstr "Dosya verilerinin SHA256 karması" -#: netbox/core/models/data.py:313 +#: netbox/core/models/data.py:310 msgid "data file" msgstr "veri dosyası" -#: netbox/core/models/data.py:314 +#: netbox/core/models/data.py:311 msgid "data files" msgstr "veri dosyaları" -#: netbox/core/models/data.py:401 +#: netbox/core/models/data.py:398 msgid "auto sync record" msgstr "otomatik senkronizasyon kaydı" -#: netbox/core/models/data.py:402 +#: netbox/core/models/data.py:399 msgid "auto sync records" msgstr "otomatik senkronizasyon kayıtları" @@ -2224,6 +2674,11 @@ msgstr "yönetilen dosya" msgid "managed files" msgstr "yönetilen dosyalar" +#: netbox/core/models/files.py:100 +#, python-brace-format +msgid "A {model} with this file path already exists ({path})." +msgstr "BİR {model} bu dosya yolu zaten var ({path})." + #: netbox/core/models/jobs.py:54 msgid "scheduled" msgstr "planlanmış" @@ -2245,7 +2700,7 @@ msgid "completed" msgstr "tamamlandı" #: netbox/core/models/jobs.py:91 netbox/extras/models/models.py:101 -#: netbox/extras/models/staging.py:87 +#: netbox/extras/models/staging.py:95 msgid "data" msgstr "veri" @@ -2276,7 +2731,7 @@ msgid "Invalid status for job termination. Choices are: {choices}" msgstr "" "İşin sonlandırılması için geçersiz durum. Seçenekler şunlardır: {choices}" -#: netbox/core/models/jobs.py:221 +#: netbox/core/models/jobs.py:231 msgid "" "enqueue() cannot be called with values for both schedule_at and immediate." msgstr "enqueue () hem schedule_at hem de imediat değerleriyle çağrılamaz." @@ -2297,7 +2752,7 @@ msgstr "Ad Soyad" #: netbox/extras/tables/tables.py:297 netbox/extras/tables/tables.py:329 #: netbox/extras/tables/tables.py:409 netbox/extras/tables/tables.py:470 #: netbox/extras/tables/tables.py:576 netbox/extras/tables/tables.py:616 -#: netbox/extras/tables/tables.py:653 netbox/netbox/tables/tables.py:244 +#: netbox/extras/tables/tables.py:653 netbox/netbox/tables/tables.py:247 #: netbox/templates/core/objectchange.html:58 #: netbox/templates/extras/eventrule.html:78 #: netbox/templates/extras/journalentry.html:18 @@ -2325,11 +2780,11 @@ msgid "Last updated" msgstr "Son Güncelleme" #: netbox/core/tables/jobs.py:10 netbox/core/tables/tasks.py:76 -#: netbox/dcim/tables/devicetypes.py:164 netbox/extras/tables/tables.py:216 -#: netbox/extras/tables/tables.py:460 netbox/netbox/tables/tables.py:189 +#: netbox/dcim/tables/devicetypes.py:169 netbox/extras/tables/tables.py:216 +#: netbox/extras/tables/tables.py:460 netbox/netbox/tables/tables.py:192 #: netbox/templates/dcim/virtualchassis_edit.html:52 #: netbox/utilities/forms/forms.py:73 -#: netbox/wireless/tables/wirelesslink.py:17 +#: netbox/wireless/tables/wirelesslink.py:16 msgid "ID" msgstr "KİMLİK" @@ -2395,7 +2850,7 @@ msgstr "İşçiler" msgid "Host" msgstr "Ana bilgisayar" -#: netbox/core/tables/tasks.py:50 netbox/ipam/forms/filtersets.py:535 +#: netbox/core/tables/tasks.py:50 netbox/ipam/forms/filtersets.py:587 msgid "Port" msgstr "Port" @@ -2443,71 +2898,84 @@ msgstr "PID" msgid "No workers found" msgstr "İşçi bulunamadı" -#: netbox/core/views.py:90 -#, python-brace-format -msgid "Queued job #{id} to sync {datasource}" -msgstr "Sıraya alınmış iş #{id} senkronize etmek {datasource}" - -#: netbox/core/views.py:319 -#, python-brace-format -msgid "Restored configuration revision #{id}" -msgstr "Geri yüklenen yapılandırma revizyonu #{id}" - -#: netbox/core/views.py:412 netbox/core/views.py:455 netbox/core/views.py:531 +#: netbox/core/utils.py:84 netbox/core/utils.py:150 netbox/core/views.py:396 #, python-brace-format msgid "Job {job_id} not found" msgstr "İş {job_id} bulunamadı" -#: netbox/core/views.py:463 -#, python-brace-format -msgid "Job {id} has been deleted." -msgstr "İş {id} silindi." - -#: netbox/core/views.py:465 -#, python-brace-format -msgid "Error deleting job {id}: {error}" -msgstr "İş silinirken hata oluştu {id}: {error}" - -#: netbox/core/views.py:478 netbox/core/views.py:496 +#: netbox/core/utils.py:102 netbox/core/utils.py:118 #, python-brace-format msgid "Job {id} not found." msgstr "İş {id} bulunamadı." -#: netbox/core/views.py:484 +#: netbox/core/views.py:88 +#, python-brace-format +msgid "Queued job #{id} to sync {datasource}" +msgstr "Sıraya alınmış iş #{id} senkronize etmek {datasource}" + +#: netbox/core/views.py:332 +#, python-brace-format +msgid "Restored configuration revision #{id}" +msgstr "Geri yüklenen yapılandırma revizyonu #{id}" + +#: netbox/core/views.py:435 +#, python-brace-format +msgid "Job {id} has been deleted." +msgstr "İş {id} silindi." + +#: netbox/core/views.py:437 +#, python-brace-format +msgid "Error deleting job {id}: {error}" +msgstr "İş silinirken hata oluştu {id}: {error}" + +#: netbox/core/views.py:446 #, python-brace-format msgid "Job {id} has been re-enqueued." msgstr "İş {id} yeniden sıraya alındı." -#: netbox/core/views.py:519 +#: netbox/core/views.py:455 #, python-brace-format msgid "Job {id} has been enqueued." msgstr "İş {id} sıraya alındı." -#: netbox/core/views.py:538 +#: netbox/core/views.py:464 #, python-brace-format msgid "Job {id} has been stopped." msgstr "İş {id} durduruldu." -#: netbox/core/views.py:540 +#: netbox/core/views.py:466 #, python-brace-format msgid "Failed to stop job {id}" msgstr "İş durdurulamadı {id}" -#: netbox/core/views.py:674 +#: netbox/core/views.py:601 msgid "Plugins catalog could not be loaded" msgstr "Eklentiler kataloğu yüklenemedi" -#: netbox/core/views.py:708 +#: netbox/core/views.py:635 #, python-brace-format msgid "Plugin {name} not found" msgstr "Eklenti {name} bulunamadı" -#: netbox/dcim/api/serializers_/devices.py:49 -#: netbox/dcim/api/serializers_/devicetypes.py:25 +#: netbox/dcim/api/serializers_/device_components.py:262 +msgid "Interface mode does not support q-in-q service vlan" +msgstr "Arayüz modu q-in-q servis vlan'ı desteklemiyor" + +#: netbox/dcim/api/serializers_/device_components.py:269 +msgid "Interface mode does not support untagged vlan" +msgstr "Arayüz modu etiketsiz vlan'ı desteklemiyor" + +#: netbox/dcim/api/serializers_/device_components.py:274 +#: netbox/dcim/api/serializers_/device_components.py:279 +msgid "Interface mode does not support tagged vlans" +msgstr "Arayüz modu etiketli vlanları desteklemiyor" + +#: netbox/dcim/api/serializers_/devices.py:53 +#: netbox/dcim/api/serializers_/devicetypes.py:26 msgid "Position (U)" msgstr "Pozisyon (U)" -#: netbox/dcim/api/serializers_/racks.py:112 +#: netbox/dcim/api/serializers_/racks.py:113 #: netbox/templates/dcim/rack.html:28 msgid "Facility ID" msgstr "Tesis Kimliği" @@ -2517,8 +2985,9 @@ msgid "Staging" msgstr "Sahneleme" #: netbox/dcim/choices.py:23 netbox/dcim/choices.py:189 -#: netbox/dcim/choices.py:240 netbox/dcim/choices.py:1533 -#: netbox/virtualization/choices.py:23 netbox/virtualization/choices.py:48 +#: netbox/dcim/choices.py:240 netbox/dcim/choices.py:1535 +#: netbox/dcim/choices.py:1667 netbox/virtualization/choices.py:23 +#: netbox/virtualization/choices.py:49 msgid "Decommissioning" msgstr "Hizmetten çıkarma" @@ -2581,7 +3050,7 @@ msgstr "Kullanımdan kaldırıldı" msgid "Millimeters" msgstr "Milimetre" -#: netbox/dcim/choices.py:115 netbox/dcim/choices.py:1555 +#: netbox/dcim/choices.py:115 netbox/dcim/choices.py:1557 msgid "Inches" msgstr "İnç" @@ -2595,21 +3064,21 @@ msgstr "Önden arkaya" msgid "Rear to front" msgstr "Arkadan öne" -#: netbox/dcim/choices.py:151 netbox/dcim/forms/bulk_edit.py:69 -#: netbox/dcim/forms/bulk_edit.py:88 netbox/dcim/forms/bulk_edit.py:174 -#: netbox/dcim/forms/bulk_edit.py:1420 netbox/dcim/forms/bulk_import.py:60 -#: netbox/dcim/forms/bulk_import.py:74 netbox/dcim/forms/bulk_import.py:137 -#: netbox/dcim/forms/bulk_import.py:588 netbox/dcim/forms/bulk_import.py:855 -#: netbox/dcim/forms/bulk_import.py:1110 netbox/dcim/forms/filtersets.py:234 -#: netbox/dcim/forms/model_forms.py:74 netbox/dcim/forms/model_forms.py:93 -#: netbox/dcim/forms/model_forms.py:170 netbox/dcim/forms/model_forms.py:1069 -#: netbox/dcim/forms/model_forms.py:1509 -#: netbox/dcim/forms/object_import.py:176 netbox/dcim/tables/devices.py:656 -#: netbox/dcim/tables/devices.py:869 netbox/dcim/tables/devices.py:954 -#: netbox/extras/tables/tables.py:223 netbox/ipam/tables/fhrp.py:59 -#: netbox/ipam/tables/ip.py:378 netbox/ipam/tables/services.py:44 -#: netbox/templates/dcim/interface.html:102 -#: netbox/templates/dcim/interface.html:309 +#: netbox/dcim/choices.py:151 netbox/dcim/forms/bulk_edit.py:72 +#: netbox/dcim/forms/bulk_edit.py:91 netbox/dcim/forms/bulk_edit.py:177 +#: netbox/dcim/forms/bulk_edit.py:1423 netbox/dcim/forms/bulk_import.py:62 +#: netbox/dcim/forms/bulk_import.py:76 netbox/dcim/forms/bulk_import.py:139 +#: netbox/dcim/forms/bulk_import.py:593 netbox/dcim/forms/bulk_import.py:863 +#: netbox/dcim/forms/bulk_import.py:1118 netbox/dcim/forms/filtersets.py:235 +#: netbox/dcim/forms/model_forms.py:76 netbox/dcim/forms/model_forms.py:95 +#: netbox/dcim/forms/model_forms.py:174 netbox/dcim/forms/model_forms.py:1082 +#: netbox/dcim/forms/model_forms.py:1551 +#: netbox/dcim/forms/object_import.py:177 netbox/dcim/tables/devices.py:690 +#: netbox/dcim/tables/devices.py:900 netbox/dcim/tables/devices.py:987 +#: netbox/dcim/tables/devices.py:1147 netbox/extras/tables/tables.py:223 +#: netbox/ipam/tables/fhrp.py:59 netbox/ipam/tables/ip.py:330 +#: netbox/ipam/tables/services.py:44 netbox/templates/dcim/interface.html:108 +#: netbox/templates/dcim/interface.html:366 #: netbox/templates/dcim/location.html:41 netbox/templates/dcim/region.html:37 #: netbox/templates/dcim/sitegroup.html:37 #: netbox/templates/ipam/service.html:28 @@ -2622,12 +3091,12 @@ msgstr "Arkadan öne" #: netbox/tenancy/forms/bulk_import.py:58 #: netbox/tenancy/forms/model_forms.py:25 #: netbox/tenancy/forms/model_forms.py:68 -#: netbox/virtualization/forms/bulk_edit.py:207 -#: netbox/virtualization/forms/bulk_import.py:151 -#: netbox/virtualization/tables/virtualmachines.py:162 -#: netbox/wireless/forms/bulk_edit.py:24 -#: netbox/wireless/forms/bulk_import.py:21 -#: netbox/wireless/forms/model_forms.py:21 +#: netbox/virtualization/forms/bulk_edit.py:189 +#: netbox/virtualization/forms/bulk_import.py:157 +#: netbox/virtualization/tables/virtualmachines.py:132 +#: netbox/wireless/forms/bulk_edit.py:26 +#: netbox/wireless/forms/bulk_import.py:23 +#: netbox/wireless/forms/model_forms.py:22 msgid "Parent" msgstr "Ebeveyn" @@ -2650,7 +3119,7 @@ msgid "Rear" msgstr "Arka" #: netbox/dcim/choices.py:186 netbox/dcim/choices.py:238 -#: netbox/virtualization/choices.py:46 +#: netbox/dcim/choices.py:1665 netbox/virtualization/choices.py:47 msgid "Staged" msgstr "Sahnelenmiş" @@ -2683,7 +3152,7 @@ msgid "Top to bottom" msgstr "Yukarıdan aşağıya" #: netbox/dcim/choices.py:215 netbox/dcim/choices.py:259 -#: netbox/dcim/choices.py:1305 +#: netbox/dcim/choices.py:1307 msgid "Passive" msgstr "Pasif" @@ -2713,8 +3182,8 @@ msgstr "Tescilli" #: netbox/dcim/choices.py:581 netbox/dcim/choices.py:824 #: netbox/dcim/choices.py:1221 netbox/dcim/choices.py:1223 -#: netbox/dcim/choices.py:1449 netbox/dcim/choices.py:1451 -#: netbox/netbox/navigation/menu.py:200 +#: netbox/dcim/choices.py:1451 netbox/dcim/choices.py:1453 +#: netbox/netbox/navigation/menu.py:208 msgid "Other" msgstr "Diğer" @@ -2731,10 +3200,10 @@ msgid "Virtual" msgstr "Sanal" #: netbox/dcim/choices.py:856 netbox/dcim/choices.py:1099 -#: netbox/dcim/forms/bulk_edit.py:1563 netbox/dcim/forms/filtersets.py:1330 -#: netbox/dcim/forms/model_forms.py:995 netbox/dcim/forms/model_forms.py:1404 -#: netbox/netbox/navigation/menu.py:140 netbox/netbox/navigation/menu.py:144 -#: netbox/templates/dcim/interface.html:210 +#: netbox/dcim/forms/bulk_edit.py:1578 netbox/dcim/forms/filtersets.py:1335 +#: netbox/dcim/forms/model_forms.py:1007 netbox/dcim/forms/model_forms.py:1445 +#: netbox/netbox/navigation/menu.py:146 netbox/netbox/navigation/menu.py:150 +#: netbox/templates/dcim/interface.html:267 msgid "Wireless" msgstr "Kablosuz" @@ -2742,13 +3211,13 @@ msgstr "Kablosuz" msgid "Virtual interfaces" msgstr "Sanal arayüzler" -#: netbox/dcim/choices.py:1025 netbox/dcim/forms/bulk_edit.py:1428 -#: netbox/dcim/forms/bulk_import.py:862 netbox/dcim/forms/model_forms.py:981 -#: netbox/dcim/tables/devices.py:660 netbox/templates/dcim/interface.html:106 +#: netbox/dcim/choices.py:1025 netbox/dcim/forms/bulk_edit.py:1431 +#: netbox/dcim/forms/bulk_import.py:870 netbox/dcim/forms/model_forms.py:993 +#: netbox/dcim/tables/devices.py:694 netbox/templates/dcim/interface.html:112 #: netbox/templates/virtualization/vminterface.html:43 -#: netbox/virtualization/forms/bulk_edit.py:212 -#: netbox/virtualization/forms/bulk_import.py:158 -#: netbox/virtualization/tables/virtualmachines.py:166 +#: netbox/virtualization/forms/bulk_edit.py:194 +#: netbox/virtualization/forms/bulk_import.py:164 +#: netbox/virtualization/tables/virtualmachines.py:136 msgid "Bridge" msgstr "Köprü" @@ -2772,10 +3241,10 @@ msgstr "Ethernet (arka panel)" msgid "Cellular" msgstr "Hücresel" -#: netbox/dcim/choices.py:1167 netbox/dcim/forms/filtersets.py:383 -#: netbox/dcim/forms/filtersets.py:809 netbox/dcim/forms/filtersets.py:963 -#: netbox/dcim/forms/filtersets.py:1542 -#: netbox/templates/dcim/inventoryitem.html:52 +#: netbox/dcim/choices.py:1167 netbox/dcim/forms/filtersets.py:384 +#: netbox/dcim/forms/filtersets.py:810 netbox/dcim/forms/filtersets.py:964 +#: netbox/dcim/forms/filtersets.py:1547 +#: netbox/templates/dcim/inventoryitem.html:56 #: netbox/templates/dcim/virtualchassis_edit.html:54 msgid "Serial" msgstr "Seri" @@ -2801,109 +3270,95 @@ msgstr "Dolu" msgid "Auto" msgstr "Oto" -#: netbox/dcim/choices.py:1265 +#: netbox/dcim/choices.py:1266 msgid "Access" msgstr "Erişim" -#: netbox/dcim/choices.py:1266 netbox/ipam/tables/vlans.py:172 -#: netbox/ipam/tables/vlans.py:217 +#: netbox/dcim/choices.py:1267 netbox/ipam/tables/vlans.py:148 +#: netbox/ipam/tables/vlans.py:193 #: netbox/templates/dcim/inc/interface_vlans_table.html:7 msgid "Tagged" msgstr "Etiketlenmiş" -#: netbox/dcim/choices.py:1267 +#: netbox/dcim/choices.py:1268 msgid "Tagged (All)" msgstr "Etiketlenmiş (Tümü)" -#: netbox/dcim/choices.py:1296 +#: netbox/dcim/choices.py:1269 netbox/templates/ipam/vlan_edit.html:22 +msgid "Q-in-Q (802.1ad)" +msgstr "Q-in-Q (802.1ad)" + +#: netbox/dcim/choices.py:1298 msgid "IEEE Standard" msgstr "IEEE Standardı" -#: netbox/dcim/choices.py:1307 +#: netbox/dcim/choices.py:1309 msgid "Passive 24V (2-pair)" msgstr "Pasif 24V (2 çift)" -#: netbox/dcim/choices.py:1308 +#: netbox/dcim/choices.py:1310 msgid "Passive 24V (4-pair)" msgstr "Pasif 24V (4 çift)" -#: netbox/dcim/choices.py:1309 +#: netbox/dcim/choices.py:1311 msgid "Passive 48V (2-pair)" msgstr "Pasif 48V (2 çift)" -#: netbox/dcim/choices.py:1310 +#: netbox/dcim/choices.py:1312 msgid "Passive 48V (4-pair)" msgstr "Pasif 48V (4 çift)" -#: netbox/dcim/choices.py:1380 netbox/dcim/choices.py:1490 +#: netbox/dcim/choices.py:1382 netbox/dcim/choices.py:1492 msgid "Copper" msgstr "Bakır" -#: netbox/dcim/choices.py:1403 +#: netbox/dcim/choices.py:1405 msgid "Fiber Optic" msgstr "Fiber Optik" -#: netbox/dcim/choices.py:1436 netbox/dcim/choices.py:1519 +#: netbox/dcim/choices.py:1438 netbox/dcim/choices.py:1521 msgid "USB" msgstr "USB" -#: netbox/dcim/choices.py:1506 +#: netbox/dcim/choices.py:1508 msgid "Fiber" msgstr "Fiber" -#: netbox/dcim/choices.py:1531 netbox/dcim/forms/filtersets.py:1227 +#: netbox/dcim/choices.py:1533 netbox/dcim/forms/filtersets.py:1228 msgid "Connected" msgstr "Bağlı" -#: netbox/dcim/choices.py:1550 netbox/wireless/choices.py:497 +#: netbox/dcim/choices.py:1552 netbox/netbox/choices.py:175 msgid "Kilometers" msgstr "Kilometre" -#: netbox/dcim/choices.py:1551 netbox/templates/dcim/cable_trace.html:65 -#: netbox/wireless/choices.py:498 +#: netbox/dcim/choices.py:1553 netbox/netbox/choices.py:176 +#: netbox/templates/dcim/cable_trace.html:65 msgid "Meters" msgstr "Sayaçlar" -#: netbox/dcim/choices.py:1552 +#: netbox/dcim/choices.py:1554 msgid "Centimeters" msgstr "Santimetre" -#: netbox/dcim/choices.py:1553 netbox/wireless/choices.py:499 +#: netbox/dcim/choices.py:1555 netbox/netbox/choices.py:177 msgid "Miles" msgstr "Mil" -#: netbox/dcim/choices.py:1554 netbox/templates/dcim/cable_trace.html:66 -#: netbox/wireless/choices.py:500 +#: netbox/dcim/choices.py:1556 netbox/netbox/choices.py:178 +#: netbox/templates/dcim/cable_trace.html:66 msgid "Feet" msgstr "Feet" -#: netbox/dcim/choices.py:1570 netbox/templates/dcim/device.html:327 -#: netbox/templates/dcim/rack.html:107 -msgid "Kilograms" -msgstr "Kilogram" - -#: netbox/dcim/choices.py:1571 -msgid "Grams" -msgstr "Gramlar" - -#: netbox/dcim/choices.py:1572 netbox/templates/dcim/device.html:328 -#: netbox/templates/dcim/rack.html:108 -msgid "Pounds" -msgstr "Pound'lar" - -#: netbox/dcim/choices.py:1573 -msgid "Ounces" -msgstr "ons" - -#: netbox/dcim/choices.py:1620 +#: netbox/dcim/choices.py:1604 msgid "Redundant" msgstr "Yedekli" -#: netbox/dcim/choices.py:1641 +#: netbox/dcim/choices.py:1625 msgid "Single phase" msgstr "Tek fazlı" -#: netbox/dcim/choices.py:1642 +#: netbox/dcim/choices.py:1626 msgid "Three-phase" msgstr "Üç fazlı" @@ -2917,335 +3372,319 @@ msgstr "Geçersiz MAC adresi biçimi: {value}" msgid "Invalid WWN format: {value}" msgstr "Geçersiz WWN biçimi: {value}" -#: netbox/dcim/filtersets.py:86 +#: netbox/dcim/filtersets.py:87 msgid "Parent region (ID)" msgstr "Ana bölge (ID)" -#: netbox/dcim/filtersets.py:92 +#: netbox/dcim/filtersets.py:93 msgid "Parent region (slug)" msgstr "Ana bölge (kısa ad)" -#: netbox/dcim/filtersets.py:116 +#: netbox/dcim/filtersets.py:117 msgid "Parent site group (ID)" msgstr "Ana site grubu (ID)" -#: netbox/dcim/filtersets.py:122 +#: netbox/dcim/filtersets.py:123 msgid "Parent site group (slug)" msgstr "Ana site grubu (kısa ad)" -#: netbox/dcim/filtersets.py:164 netbox/extras/filtersets.py:364 -#: netbox/ipam/filtersets.py:843 netbox/ipam/filtersets.py:995 +#: netbox/dcim/filtersets.py:165 netbox/extras/filtersets.py:364 +#: netbox/ipam/filtersets.py:810 netbox/ipam/filtersets.py:962 msgid "Group (ID)" msgstr "Grup (ID)" -#: netbox/dcim/filtersets.py:170 +#: netbox/dcim/filtersets.py:171 msgid "Group (slug)" msgstr "Grup (kısa ad)" -#: netbox/dcim/filtersets.py:176 netbox/dcim/filtersets.py:181 +#: netbox/dcim/filtersets.py:177 netbox/dcim/filtersets.py:182 msgid "AS (ID)" msgstr "AS (ID)" -#: netbox/dcim/filtersets.py:246 +#: netbox/dcim/filtersets.py:247 msgid "Parent location (ID)" msgstr "Ana konum (ID)" -#: netbox/dcim/filtersets.py:252 +#: netbox/dcim/filtersets.py:253 msgid "Parent location (slug)" msgstr "Ana konum (kısa ad)" -#: netbox/dcim/filtersets.py:258 netbox/dcim/filtersets.py:369 -#: netbox/dcim/filtersets.py:490 netbox/dcim/filtersets.py:1057 -#: netbox/dcim/filtersets.py:1404 netbox/dcim/filtersets.py:2182 -msgid "Location (ID)" -msgstr "Konum (ID)" - -#: netbox/dcim/filtersets.py:265 netbox/dcim/filtersets.py:376 -#: netbox/dcim/filtersets.py:497 netbox/dcim/filtersets.py:1410 -#: netbox/extras/filtersets.py:542 -msgid "Location (slug)" -msgstr "Konum (kısa ad)" - -#: netbox/dcim/filtersets.py:296 netbox/dcim/filtersets.py:381 -#: netbox/dcim/filtersets.py:539 netbox/dcim/filtersets.py:678 -#: netbox/dcim/filtersets.py:882 netbox/dcim/filtersets.py:933 -#: netbox/dcim/filtersets.py:973 netbox/dcim/filtersets.py:1306 -#: netbox/dcim/filtersets.py:1840 +#: netbox/dcim/filtersets.py:297 netbox/dcim/filtersets.py:382 +#: netbox/dcim/filtersets.py:540 netbox/dcim/filtersets.py:679 +#: netbox/dcim/filtersets.py:883 netbox/dcim/filtersets.py:934 +#: netbox/dcim/filtersets.py:974 netbox/dcim/filtersets.py:1308 +#: netbox/dcim/filtersets.py:1960 msgid "Manufacturer (ID)" msgstr "Üretici (ID)" -#: netbox/dcim/filtersets.py:302 netbox/dcim/filtersets.py:387 -#: netbox/dcim/filtersets.py:545 netbox/dcim/filtersets.py:684 -#: netbox/dcim/filtersets.py:888 netbox/dcim/filtersets.py:939 -#: netbox/dcim/filtersets.py:979 netbox/dcim/filtersets.py:1312 -#: netbox/dcim/filtersets.py:1846 +#: netbox/dcim/filtersets.py:303 netbox/dcim/filtersets.py:388 +#: netbox/dcim/filtersets.py:546 netbox/dcim/filtersets.py:685 +#: netbox/dcim/filtersets.py:889 netbox/dcim/filtersets.py:940 +#: netbox/dcim/filtersets.py:980 netbox/dcim/filtersets.py:1314 +#: netbox/dcim/filtersets.py:1966 msgid "Manufacturer (slug)" msgstr "Üretici (kısa ad)" -#: netbox/dcim/filtersets.py:393 +#: netbox/dcim/filtersets.py:394 msgid "Rack type (slug)" msgstr "Raf tipi (sümüklü böcek)" -#: netbox/dcim/filtersets.py:397 +#: netbox/dcim/filtersets.py:398 msgid "Rack type (ID)" msgstr "Raf tipi (ID)" -#: netbox/dcim/filtersets.py:411 netbox/dcim/filtersets.py:892 -#: netbox/dcim/filtersets.py:994 netbox/dcim/filtersets.py:1850 -#: netbox/ipam/filtersets.py:383 netbox/ipam/filtersets.py:495 -#: netbox/ipam/filtersets.py:1005 netbox/virtualization/filtersets.py:210 +#: netbox/dcim/filtersets.py:412 netbox/dcim/filtersets.py:893 +#: netbox/dcim/filtersets.py:995 netbox/dcim/filtersets.py:1970 +#: netbox/ipam/filtersets.py:350 netbox/ipam/filtersets.py:462 +#: netbox/ipam/filtersets.py:972 netbox/virtualization/filtersets.py:176 msgid "Role (ID)" msgstr "Rol (ID)" -#: netbox/dcim/filtersets.py:417 netbox/dcim/filtersets.py:898 -#: netbox/dcim/filtersets.py:1000 netbox/dcim/filtersets.py:1856 -#: netbox/extras/filtersets.py:558 netbox/ipam/filtersets.py:389 -#: netbox/ipam/filtersets.py:501 netbox/ipam/filtersets.py:1011 -#: netbox/virtualization/filtersets.py:216 +#: netbox/dcim/filtersets.py:418 netbox/dcim/filtersets.py:899 +#: netbox/dcim/filtersets.py:1001 netbox/dcim/filtersets.py:1976 +#: netbox/extras/filtersets.py:558 netbox/ipam/filtersets.py:356 +#: netbox/ipam/filtersets.py:468 netbox/ipam/filtersets.py:978 +#: netbox/virtualization/filtersets.py:182 msgid "Role (slug)" msgstr "Rol (kısa ad)" -#: netbox/dcim/filtersets.py:447 netbox/dcim/filtersets.py:1062 -#: netbox/dcim/filtersets.py:1415 netbox/dcim/filtersets.py:2244 +#: netbox/dcim/filtersets.py:448 netbox/dcim/filtersets.py:1063 +#: netbox/dcim/filtersets.py:1417 netbox/dcim/filtersets.py:2368 msgid "Rack (ID)" msgstr "Raf (ID)" -#: netbox/dcim/filtersets.py:507 netbox/extras/filtersets.py:293 +#: netbox/dcim/filtersets.py:508 netbox/extras/filtersets.py:293 #: netbox/extras/filtersets.py:337 netbox/extras/filtersets.py:359 #: netbox/extras/filtersets.py:419 netbox/users/filtersets.py:113 #: netbox/users/filtersets.py:180 msgid "User (name)" msgstr "Kullanıcı (isim)" -#: netbox/dcim/filtersets.py:549 +#: netbox/dcim/filtersets.py:550 msgid "Default platform (ID)" msgstr "Varsayılan platform (ID)" -#: netbox/dcim/filtersets.py:555 +#: netbox/dcim/filtersets.py:556 msgid "Default platform (slug)" msgstr "Varsayılan platform (kısa ad)" -#: netbox/dcim/filtersets.py:558 netbox/dcim/forms/filtersets.py:517 +#: netbox/dcim/filtersets.py:559 netbox/dcim/forms/filtersets.py:518 msgid "Has a front image" msgstr "Ön resmi var" -#: netbox/dcim/filtersets.py:562 netbox/dcim/forms/filtersets.py:524 +#: netbox/dcim/filtersets.py:563 netbox/dcim/forms/filtersets.py:525 msgid "Has a rear image" msgstr "Arka görüntüsü var" -#: netbox/dcim/filtersets.py:567 netbox/dcim/filtersets.py:688 -#: netbox/dcim/filtersets.py:1131 netbox/dcim/forms/filtersets.py:531 -#: netbox/dcim/forms/filtersets.py:627 netbox/dcim/forms/filtersets.py:848 +#: netbox/dcim/filtersets.py:568 netbox/dcim/filtersets.py:689 +#: netbox/dcim/filtersets.py:1132 netbox/dcim/forms/filtersets.py:532 +#: netbox/dcim/forms/filtersets.py:628 netbox/dcim/forms/filtersets.py:849 msgid "Has console ports" msgstr "Konsol bağlantı noktaları vardır" -#: netbox/dcim/filtersets.py:571 netbox/dcim/filtersets.py:692 -#: netbox/dcim/filtersets.py:1135 netbox/dcim/forms/filtersets.py:538 -#: netbox/dcim/forms/filtersets.py:634 netbox/dcim/forms/filtersets.py:855 +#: netbox/dcim/filtersets.py:572 netbox/dcim/filtersets.py:693 +#: netbox/dcim/filtersets.py:1136 netbox/dcim/forms/filtersets.py:539 +#: netbox/dcim/forms/filtersets.py:635 netbox/dcim/forms/filtersets.py:856 msgid "Has console server ports" msgstr "Konsol sunucusu bağlantı noktaları vardır" -#: netbox/dcim/filtersets.py:575 netbox/dcim/filtersets.py:696 -#: netbox/dcim/filtersets.py:1139 netbox/dcim/forms/filtersets.py:545 -#: netbox/dcim/forms/filtersets.py:641 netbox/dcim/forms/filtersets.py:862 +#: netbox/dcim/filtersets.py:576 netbox/dcim/filtersets.py:697 +#: netbox/dcim/filtersets.py:1140 netbox/dcim/forms/filtersets.py:546 +#: netbox/dcim/forms/filtersets.py:642 netbox/dcim/forms/filtersets.py:863 msgid "Has power ports" msgstr "Güç bağlantı noktaları vardır" -#: netbox/dcim/filtersets.py:579 netbox/dcim/filtersets.py:700 -#: netbox/dcim/filtersets.py:1143 netbox/dcim/forms/filtersets.py:552 -#: netbox/dcim/forms/filtersets.py:648 netbox/dcim/forms/filtersets.py:869 +#: netbox/dcim/filtersets.py:580 netbox/dcim/filtersets.py:701 +#: netbox/dcim/filtersets.py:1144 netbox/dcim/forms/filtersets.py:553 +#: netbox/dcim/forms/filtersets.py:649 netbox/dcim/forms/filtersets.py:870 msgid "Has power outlets" msgstr "Elektrik prizleri var" -#: netbox/dcim/filtersets.py:583 netbox/dcim/filtersets.py:704 -#: netbox/dcim/filtersets.py:1147 netbox/dcim/forms/filtersets.py:559 -#: netbox/dcim/forms/filtersets.py:655 netbox/dcim/forms/filtersets.py:876 +#: netbox/dcim/filtersets.py:584 netbox/dcim/filtersets.py:705 +#: netbox/dcim/filtersets.py:1148 netbox/dcim/forms/filtersets.py:560 +#: netbox/dcim/forms/filtersets.py:656 netbox/dcim/forms/filtersets.py:877 msgid "Has interfaces" msgstr "Arayüzleri vardır" -#: netbox/dcim/filtersets.py:587 netbox/dcim/filtersets.py:708 -#: netbox/dcim/filtersets.py:1151 netbox/dcim/forms/filtersets.py:566 -#: netbox/dcim/forms/filtersets.py:662 netbox/dcim/forms/filtersets.py:883 +#: netbox/dcim/filtersets.py:588 netbox/dcim/filtersets.py:709 +#: netbox/dcim/filtersets.py:1152 netbox/dcim/forms/filtersets.py:567 +#: netbox/dcim/forms/filtersets.py:663 netbox/dcim/forms/filtersets.py:884 msgid "Has pass-through ports" msgstr "Geçiş bağlantı noktaları vardır" -#: netbox/dcim/filtersets.py:591 netbox/dcim/filtersets.py:1155 -#: netbox/dcim/forms/filtersets.py:580 +#: netbox/dcim/filtersets.py:592 netbox/dcim/filtersets.py:1156 +#: netbox/dcim/forms/filtersets.py:581 msgid "Has module bays" msgstr "Modül yuvaları vardır" -#: netbox/dcim/filtersets.py:595 netbox/dcim/filtersets.py:1159 -#: netbox/dcim/forms/filtersets.py:573 +#: netbox/dcim/filtersets.py:596 netbox/dcim/filtersets.py:1160 +#: netbox/dcim/forms/filtersets.py:574 msgid "Has device bays" msgstr "Cihaz yuvaları var" -#: netbox/dcim/filtersets.py:599 netbox/dcim/forms/filtersets.py:587 +#: netbox/dcim/filtersets.py:600 netbox/dcim/forms/filtersets.py:588 msgid "Has inventory items" msgstr "Envanter kalemleri var" -#: netbox/dcim/filtersets.py:756 netbox/dcim/filtersets.py:989 -#: netbox/dcim/filtersets.py:1436 +#: netbox/dcim/filtersets.py:757 netbox/dcim/filtersets.py:990 +#: netbox/dcim/filtersets.py:1438 msgid "Device type (ID)" msgstr "Cihaz tipi (ID)" -#: netbox/dcim/filtersets.py:772 netbox/dcim/filtersets.py:1317 +#: netbox/dcim/filtersets.py:773 netbox/dcim/filtersets.py:1319 msgid "Module type (ID)" msgstr "Modül tipi (ID)" -#: netbox/dcim/filtersets.py:804 netbox/dcim/filtersets.py:1591 +#: netbox/dcim/filtersets.py:805 netbox/dcim/filtersets.py:1593 msgid "Power port (ID)" msgstr "Güç bağlantı noktası (ID)" -#: netbox/dcim/filtersets.py:878 netbox/dcim/filtersets.py:1836 +#: netbox/dcim/filtersets.py:879 netbox/dcim/filtersets.py:1956 msgid "Parent inventory item (ID)" msgstr "Ana envanter kalemi (ID)" -#: netbox/dcim/filtersets.py:921 netbox/dcim/filtersets.py:947 -#: netbox/dcim/filtersets.py:1127 netbox/virtualization/filtersets.py:238 +#: netbox/dcim/filtersets.py:922 netbox/dcim/filtersets.py:948 +#: netbox/dcim/filtersets.py:1128 netbox/virtualization/filtersets.py:204 msgid "Config template (ID)" msgstr "Yapılandırma şablonu (ID)" -#: netbox/dcim/filtersets.py:985 +#: netbox/dcim/filtersets.py:986 msgid "Device type (slug)" msgstr "Cihaz tipi (kısa ad)" -#: netbox/dcim/filtersets.py:1005 +#: netbox/dcim/filtersets.py:1006 msgid "Parent Device (ID)" msgstr "Ana Cihaz (ID)" -#: netbox/dcim/filtersets.py:1009 netbox/virtualization/filtersets.py:220 +#: netbox/dcim/filtersets.py:1010 netbox/virtualization/filtersets.py:186 msgid "Platform (ID)" msgstr "Platform (ID)" -#: netbox/dcim/filtersets.py:1015 netbox/extras/filtersets.py:569 -#: netbox/virtualization/filtersets.py:226 +#: netbox/dcim/filtersets.py:1016 netbox/extras/filtersets.py:569 +#: netbox/virtualization/filtersets.py:192 msgid "Platform (slug)" msgstr "Platform (kısa ad)" -#: netbox/dcim/filtersets.py:1051 netbox/dcim/filtersets.py:1399 -#: netbox/dcim/filtersets.py:1934 netbox/dcim/filtersets.py:2176 -#: netbox/dcim/filtersets.py:2235 +#: netbox/dcim/filtersets.py:1052 netbox/dcim/filtersets.py:1401 +#: netbox/dcim/filtersets.py:2058 netbox/dcim/filtersets.py:2300 +#: netbox/dcim/filtersets.py:2359 msgid "Site name (slug)" msgstr "Site adı (kısa ad)" -#: netbox/dcim/filtersets.py:1067 +#: netbox/dcim/filtersets.py:1068 msgid "Parent bay (ID)" msgstr "Ebeveyn bölmesi (ID)" -#: netbox/dcim/filtersets.py:1071 +#: netbox/dcim/filtersets.py:1072 msgid "VM cluster (ID)" msgstr "VM kümesi (ID)" -#: netbox/dcim/filtersets.py:1077 netbox/extras/filtersets.py:591 -#: netbox/virtualization/filtersets.py:136 +#: netbox/dcim/filtersets.py:1078 netbox/extras/filtersets.py:591 +#: netbox/virtualization/filtersets.py:102 msgid "Cluster group (slug)" msgstr "Küme grubu (kısa ad)" -#: netbox/dcim/filtersets.py:1082 netbox/virtualization/filtersets.py:130 +#: netbox/dcim/filtersets.py:1083 netbox/virtualization/filtersets.py:96 msgid "Cluster group (ID)" msgstr "Küme grubu (ID)" -#: netbox/dcim/filtersets.py:1088 +#: netbox/dcim/filtersets.py:1089 msgid "Device model (slug)" msgstr "Cihaz modeli (kısa ad)" -#: netbox/dcim/filtersets.py:1099 netbox/dcim/forms/bulk_edit.py:522 +#: netbox/dcim/filtersets.py:1100 netbox/dcim/forms/bulk_edit.py:525 msgid "Is full depth" msgstr "Tam derinlik mi" -#: netbox/dcim/filtersets.py:1103 netbox/dcim/forms/common.py:18 -#: netbox/dcim/forms/filtersets.py:818 netbox/dcim/forms/filtersets.py:1385 -#: netbox/dcim/models/device_components.py:518 -#: netbox/virtualization/filtersets.py:230 -#: netbox/virtualization/filtersets.py:301 -#: netbox/virtualization/forms/filtersets.py:172 -#: netbox/virtualization/forms/filtersets.py:223 +#: netbox/dcim/filtersets.py:1104 netbox/dcim/forms/filtersets.py:819 +#: netbox/dcim/forms/filtersets.py:1390 netbox/dcim/forms/filtersets.py:1586 +#: netbox/dcim/forms/filtersets.py:1591 netbox/dcim/forms/model_forms.py:1762 +#: netbox/dcim/models/devices.py:1505 netbox/dcim/models/devices.py:1526 +#: netbox/virtualization/filtersets.py:196 +#: netbox/virtualization/filtersets.py:268 +#: netbox/virtualization/forms/filtersets.py:177 +#: netbox/virtualization/forms/filtersets.py:228 msgid "MAC address" msgstr "MAC adresi" -#: netbox/dcim/filtersets.py:1110 netbox/dcim/filtersets.py:1274 -#: netbox/dcim/forms/filtersets.py:827 netbox/dcim/forms/filtersets.py:930 -#: netbox/virtualization/filtersets.py:234 -#: netbox/virtualization/forms/filtersets.py:176 +#: netbox/dcim/filtersets.py:1111 netbox/dcim/filtersets.py:1276 +#: netbox/dcim/forms/filtersets.py:828 netbox/dcim/forms/filtersets.py:931 +#: netbox/virtualization/filtersets.py:200 +#: netbox/virtualization/forms/filtersets.py:181 msgid "Has a primary IP" msgstr "Birincil IP'ye sahiptir" -#: netbox/dcim/filtersets.py:1114 +#: netbox/dcim/filtersets.py:1115 msgid "Has an out-of-band IP" msgstr "Bant dışı bir IP'ye sahiptir" -#: netbox/dcim/filtersets.py:1119 +#: netbox/dcim/filtersets.py:1120 msgid "Virtual chassis (ID)" msgstr "Sanal kasa (ID)" -#: netbox/dcim/filtersets.py:1123 +#: netbox/dcim/filtersets.py:1124 msgid "Is a virtual chassis member" msgstr "Sanal bir şasi üyesidir" -#: netbox/dcim/filtersets.py:1164 +#: netbox/dcim/filtersets.py:1165 msgid "OOB IP (ID)" msgstr "OOB İP (KİMLİĞİ)" -#: netbox/dcim/filtersets.py:1168 +#: netbox/dcim/filtersets.py:1169 msgid "Has virtual device context" msgstr "Sanal cihaz bağlamına sahiptir" -#: netbox/dcim/filtersets.py:1257 +#: netbox/dcim/filtersets.py:1259 msgid "VDC (ID)" msgstr "VDC (KİMLİK)" -#: netbox/dcim/filtersets.py:1262 +#: netbox/dcim/filtersets.py:1264 msgid "Device model" msgstr "Cihaz modeli" -#: netbox/dcim/filtersets.py:1267 netbox/ipam/filtersets.py:634 -#: netbox/vpn/filtersets.py:102 netbox/vpn/filtersets.py:401 -msgid "Interface (ID)" -msgstr "Arayüz (ID)" - -#: netbox/dcim/filtersets.py:1323 +#: netbox/dcim/filtersets.py:1325 msgid "Module type (model)" msgstr "Modül tipi (model)" -#: netbox/dcim/filtersets.py:1329 +#: netbox/dcim/filtersets.py:1331 msgid "Module bay (ID)" msgstr "Modül yuvası (ID)" -#: netbox/dcim/filtersets.py:1333 netbox/dcim/filtersets.py:1425 -#: netbox/ipam/filtersets.py:613 netbox/ipam/filtersets.py:853 -#: netbox/ipam/filtersets.py:1117 netbox/virtualization/filtersets.py:161 -#: netbox/vpn/filtersets.py:379 +#: netbox/dcim/filtersets.py:1335 netbox/dcim/filtersets.py:1427 +#: netbox/dcim/filtersets.py:1613 netbox/ipam/filtersets.py:580 +#: netbox/ipam/filtersets.py:820 netbox/ipam/filtersets.py:1142 +#: netbox/virtualization/filtersets.py:127 netbox/vpn/filtersets.py:379 msgid "Device (ID)" msgstr "Cihaz (ID)" -#: netbox/dcim/filtersets.py:1421 +#: netbox/dcim/filtersets.py:1423 msgid "Rack (name)" msgstr "Raf (isim)" -#: netbox/dcim/filtersets.py:1431 netbox/ipam/filtersets.py:608 -#: netbox/ipam/filtersets.py:848 netbox/ipam/filtersets.py:1123 -#: netbox/vpn/filtersets.py:374 +#: netbox/dcim/filtersets.py:1433 netbox/dcim/filtersets.py:1608 +#: netbox/ipam/filtersets.py:575 netbox/ipam/filtersets.py:815 +#: netbox/ipam/filtersets.py:1148 netbox/vpn/filtersets.py:374 msgid "Device (name)" msgstr "Cihaz (isim)" -#: netbox/dcim/filtersets.py:1442 +#: netbox/dcim/filtersets.py:1444 msgid "Device type (model)" msgstr "Cihaz tipi (model)" -#: netbox/dcim/filtersets.py:1447 +#: netbox/dcim/filtersets.py:1449 msgid "Device role (ID)" msgstr "Cihaz rolü (ID)" -#: netbox/dcim/filtersets.py:1453 +#: netbox/dcim/filtersets.py:1455 msgid "Device role (slug)" msgstr "Cihaz rolü (kısa ad)" -#: netbox/dcim/filtersets.py:1458 +#: netbox/dcim/filtersets.py:1460 msgid "Virtual Chassis (ID)" msgstr "Sanal Kasa (ID)" -#: netbox/dcim/filtersets.py:1464 netbox/dcim/forms/filtersets.py:109 -#: netbox/dcim/tables/devices.py:206 netbox/netbox/navigation/menu.py:79 +#: netbox/dcim/filtersets.py:1466 netbox/dcim/forms/filtersets.py:110 +#: netbox/dcim/tables/devices.py:217 netbox/netbox/navigation/menu.py:79 #: netbox/templates/dcim/device.html:120 #: netbox/templates/dcim/device_edit.html:93 #: netbox/templates/dcim/virtualchassis.html:20 @@ -3254,168 +3693,231 @@ msgstr "Sanal Kasa (ID)" msgid "Virtual Chassis" msgstr "Sanal Şasi" -#: netbox/dcim/filtersets.py:1488 +#: netbox/dcim/filtersets.py:1490 msgid "Module (ID)" msgstr "Modül (ID)" -#: netbox/dcim/filtersets.py:1495 +#: netbox/dcim/filtersets.py:1497 msgid "Cable (ID)" msgstr "Kablo (ID)" -#: netbox/dcim/filtersets.py:1604 netbox/ipam/forms/bulk_import.py:189 +#: netbox/dcim/filtersets.py:1618 netbox/ipam/filtersets.py:585 +#: netbox/ipam/filtersets.py:825 netbox/ipam/filtersets.py:1158 +#: netbox/vpn/filtersets.py:385 +msgid "Virtual machine (name)" +msgstr "Sanal makine (isim)" + +#: netbox/dcim/filtersets.py:1623 netbox/ipam/filtersets.py:590 +#: netbox/ipam/filtersets.py:830 netbox/ipam/filtersets.py:1152 +#: netbox/virtualization/filtersets.py:248 +#: netbox/virtualization/filtersets.py:299 netbox/vpn/filtersets.py:390 +msgid "Virtual machine (ID)" +msgstr "Sanal makine (ID)" + +#: netbox/dcim/filtersets.py:1629 netbox/ipam/filtersets.py:596 +#: netbox/vpn/filtersets.py:97 netbox/vpn/filtersets.py:396 +msgid "Interface (name)" +msgstr "Arayüz (isim)" + +#: netbox/dcim/filtersets.py:1640 netbox/ipam/filtersets.py:607 +#: netbox/vpn/filtersets.py:108 netbox/vpn/filtersets.py:407 +msgid "VM interface (name)" +msgstr "VM arabirimi (isim)" + +#: netbox/dcim/filtersets.py:1645 netbox/ipam/filtersets.py:612 +#: netbox/vpn/filtersets.py:113 +msgid "VM interface (ID)" +msgstr "VM arabirimi (ID)" + +#: netbox/dcim/filtersets.py:1687 netbox/ipam/forms/bulk_import.py:185 #: netbox/vpn/forms/bulk_import.py:308 msgid "Assigned VLAN" msgstr "Atanmış VLAN" -#: netbox/dcim/filtersets.py:1608 +#: netbox/dcim/filtersets.py:1691 msgid "Assigned VID" msgstr "Atanmış VID" -#: netbox/dcim/filtersets.py:1613 netbox/dcim/forms/bulk_edit.py:1531 -#: netbox/dcim/forms/bulk_import.py:913 netbox/dcim/forms/filtersets.py:1428 -#: netbox/dcim/forms/model_forms.py:1385 -#: netbox/dcim/models/device_components.py:711 -#: netbox/dcim/tables/devices.py:626 netbox/ipam/filtersets.py:318 -#: netbox/ipam/filtersets.py:329 netbox/ipam/filtersets.py:485 -#: netbox/ipam/filtersets.py:586 netbox/ipam/filtersets.py:597 -#: netbox/ipam/forms/bulk_edit.py:242 netbox/ipam/forms/bulk_edit.py:298 -#: netbox/ipam/forms/bulk_edit.py:340 netbox/ipam/forms/bulk_import.py:157 -#: netbox/ipam/forms/bulk_import.py:243 netbox/ipam/forms/bulk_import.py:279 -#: netbox/ipam/forms/filtersets.py:67 netbox/ipam/forms/filtersets.py:172 -#: netbox/ipam/forms/filtersets.py:309 netbox/ipam/forms/model_forms.py:62 -#: netbox/ipam/forms/model_forms.py:202 netbox/ipam/forms/model_forms.py:247 -#: netbox/ipam/forms/model_forms.py:300 netbox/ipam/forms/model_forms.py:464 -#: netbox/ipam/forms/model_forms.py:478 netbox/ipam/forms/model_forms.py:492 -#: netbox/ipam/models/ip.py:233 netbox/ipam/models/ip.py:512 -#: netbox/ipam/models/ip.py:720 netbox/ipam/models/vrfs.py:62 -#: netbox/ipam/tables/ip.py:242 netbox/ipam/tables/ip.py:309 -#: netbox/ipam/tables/ip.py:360 netbox/ipam/tables/ip.py:450 -#: netbox/templates/dcim/interface.html:133 +#: netbox/dcim/filtersets.py:1696 netbox/dcim/forms/bulk_edit.py:1544 +#: netbox/dcim/forms/bulk_import.py:921 netbox/dcim/forms/filtersets.py:1433 +#: netbox/dcim/forms/model_forms.py:1411 +#: netbox/dcim/models/device_components.py:749 +#: netbox/dcim/tables/devices.py:648 netbox/ipam/filtersets.py:321 +#: netbox/ipam/filtersets.py:332 netbox/ipam/filtersets.py:452 +#: netbox/ipam/filtersets.py:553 netbox/ipam/filtersets.py:564 +#: netbox/ipam/forms/bulk_edit.py:226 netbox/ipam/forms/bulk_edit.py:282 +#: netbox/ipam/forms/bulk_edit.py:324 netbox/ipam/forms/bulk_import.py:160 +#: netbox/ipam/forms/bulk_import.py:242 netbox/ipam/forms/bulk_import.py:278 +#: netbox/ipam/forms/filtersets.py:69 netbox/ipam/forms/filtersets.py:174 +#: netbox/ipam/forms/filtersets.py:312 netbox/ipam/forms/model_forms.py:65 +#: netbox/ipam/forms/model_forms.py:208 netbox/ipam/forms/model_forms.py:256 +#: netbox/ipam/forms/model_forms.py:310 netbox/ipam/forms/model_forms.py:474 +#: netbox/ipam/forms/model_forms.py:488 netbox/ipam/forms/model_forms.py:502 +#: netbox/ipam/models/ip.py:217 netbox/ipam/models/ip.py:498 +#: netbox/ipam/models/ip.py:719 netbox/ipam/models/vrfs.py:61 +#: netbox/ipam/tables/ip.py:188 netbox/ipam/tables/ip.py:261 +#: netbox/ipam/tables/ip.py:312 netbox/ipam/tables/ip.py:402 +#: netbox/templates/dcim/interface.html:152 #: netbox/templates/ipam/ipaddress.html:18 #: netbox/templates/ipam/iprange.html:40 netbox/templates/ipam/prefix.html:19 #: netbox/templates/ipam/vrf.html:7 netbox/templates/ipam/vrf.html:13 -#: netbox/templates/virtualization/vminterface.html:47 -#: netbox/virtualization/forms/bulk_edit.py:261 -#: netbox/virtualization/forms/bulk_import.py:171 -#: netbox/virtualization/forms/filtersets.py:228 -#: netbox/virtualization/forms/model_forms.py:344 -#: netbox/virtualization/models/virtualmachines.py:355 -#: netbox/virtualization/tables/virtualmachines.py:143 +#: netbox/templates/virtualization/vminterface.html:84 +#: netbox/virtualization/forms/bulk_edit.py:243 +#: netbox/virtualization/forms/bulk_import.py:177 +#: netbox/virtualization/forms/filtersets.py:233 +#: netbox/virtualization/forms/model_forms.py:368 +#: netbox/virtualization/models/virtualmachines.py:331 +#: netbox/virtualization/tables/virtualmachines.py:113 msgid "VRF" msgstr "VRF" -#: netbox/dcim/filtersets.py:1619 netbox/ipam/filtersets.py:324 -#: netbox/ipam/filtersets.py:335 netbox/ipam/filtersets.py:491 -#: netbox/ipam/filtersets.py:592 netbox/ipam/filtersets.py:603 +#: netbox/dcim/filtersets.py:1702 netbox/ipam/filtersets.py:327 +#: netbox/ipam/filtersets.py:338 netbox/ipam/filtersets.py:458 +#: netbox/ipam/filtersets.py:559 netbox/ipam/filtersets.py:570 msgid "VRF (RD)" msgstr "VRF (RD)" -#: netbox/dcim/filtersets.py:1624 netbox/ipam/filtersets.py:1032 +#: netbox/dcim/filtersets.py:1707 netbox/ipam/filtersets.py:1010 #: netbox/vpn/filtersets.py:342 msgid "L2VPN (ID)" msgstr "L2VPN (KİMLİĞİ)" -#: netbox/dcim/filtersets.py:1630 netbox/dcim/forms/filtersets.py:1433 -#: netbox/dcim/tables/devices.py:570 netbox/ipam/filtersets.py:1038 -#: netbox/ipam/forms/filtersets.py:518 netbox/ipam/tables/vlans.py:137 -#: netbox/templates/dcim/interface.html:93 netbox/templates/ipam/vlan.html:66 +#: netbox/dcim/filtersets.py:1713 netbox/dcim/forms/filtersets.py:1438 +#: netbox/dcim/tables/devices.py:584 netbox/ipam/filtersets.py:1016 +#: netbox/ipam/forms/filtersets.py:570 netbox/ipam/tables/vlans.py:113 +#: netbox/templates/dcim/interface.html:99 netbox/templates/ipam/vlan.html:82 #: netbox/templates/vpn/l2vpntermination.html:12 -#: netbox/virtualization/forms/filtersets.py:233 +#: netbox/virtualization/forms/filtersets.py:238 #: netbox/vpn/forms/bulk_import.py:280 netbox/vpn/forms/filtersets.py:246 -#: netbox/vpn/forms/model_forms.py:409 netbox/vpn/forms/model_forms.py:427 +#: netbox/vpn/forms/model_forms.py:412 netbox/vpn/forms/model_forms.py:430 #: netbox/vpn/models/l2vpn.py:63 netbox/vpn/tables/l2vpn.py:55 msgid "L2VPN" msgstr "L2VPN" -#: netbox/dcim/filtersets.py:1662 +#: netbox/dcim/filtersets.py:1718 netbox/ipam/filtersets.py:1091 +msgid "VLAN Translation Policy (ID)" +msgstr "VLAN Çeviri Politikası (ID)" + +#: netbox/dcim/filtersets.py:1724 netbox/dcim/forms/model_forms.py:1428 +#: netbox/dcim/models/device_components.py:568 +#: netbox/ipam/forms/filtersets.py:489 netbox/ipam/forms/model_forms.py:712 +#: netbox/templates/ipam/vlantranslationpolicy.html:11 +#: netbox/virtualization/forms/bulk_edit.py:248 +#: netbox/virtualization/forms/model_forms.py:373 +msgid "VLAN Translation Policy" +msgstr "VLAN Çeviri Politikası" + +#: netbox/dcim/filtersets.py:1758 msgid "Virtual Chassis Interfaces for Device" msgstr "Cihaz için Sanal Şasi Arayüzleri" -#: netbox/dcim/filtersets.py:1667 +#: netbox/dcim/filtersets.py:1763 msgid "Virtual Chassis Interfaces for Device (ID)" msgstr "Cihaz için Sanal Şasi Arayüzleri (ID)" -#: netbox/dcim/filtersets.py:1671 +#: netbox/dcim/filtersets.py:1767 msgid "Kind of interface" msgstr "Arayüz türü" -#: netbox/dcim/filtersets.py:1676 netbox/virtualization/filtersets.py:293 +#: netbox/dcim/filtersets.py:1772 netbox/virtualization/filtersets.py:259 msgid "Parent interface (ID)" msgstr "Ebeveyn arabirimi (ID)" -#: netbox/dcim/filtersets.py:1681 netbox/virtualization/filtersets.py:298 +#: netbox/dcim/filtersets.py:1777 netbox/virtualization/filtersets.py:264 msgid "Bridged interface (ID)" msgstr "Köprülü arayüz (ID)" -#: netbox/dcim/filtersets.py:1686 +#: netbox/dcim/filtersets.py:1782 msgid "LAG interface (ID)" msgstr "LAG arabirimi (ID)" -#: netbox/dcim/filtersets.py:1713 netbox/dcim/filtersets.py:1725 -#: netbox/dcim/forms/filtersets.py:1345 netbox/dcim/forms/model_forms.py:1697 +#: netbox/dcim/filtersets.py:1790 netbox/dcim/tables/devices.py:606 +#: netbox/dcim/tables/devices.py:1136 netbox/templates/dcim/interface.html:131 +#: netbox/templates/dcim/macaddress.html:11 +#: netbox/templates/dcim/macaddress.html:14 +#: netbox/templates/virtualization/vminterface.html:73 +msgid "MAC Address" +msgstr "MAC Adresi" + +#: netbox/dcim/filtersets.py:1795 netbox/virtualization/filtersets.py:273 +msgid "Primary MAC address (ID)" +msgstr "Birincil MAC adresi (ID)" + +#: netbox/dcim/filtersets.py:1801 netbox/dcim/forms/model_forms.py:1415 +#: netbox/virtualization/filtersets.py:279 +#: netbox/virtualization/forms/model_forms.py:311 +msgid "Primary MAC address" +msgstr "Birincil MAC adresi" + +#: netbox/dcim/filtersets.py:1823 netbox/dcim/filtersets.py:1835 +#: netbox/dcim/forms/filtersets.py:1350 netbox/dcim/forms/model_forms.py:1742 #: netbox/templates/dcim/virtualdevicecontext.html:15 msgid "Virtual Device Context" msgstr "Sanal Cihaz Bağlamı" -#: netbox/dcim/filtersets.py:1719 +#: netbox/dcim/filtersets.py:1829 msgid "Virtual Device Context (Identifier)" msgstr "Sanal Cihaz Bağlamı (Tanımlayıcı)" -#: netbox/dcim/filtersets.py:1730 +#: netbox/dcim/filtersets.py:1840 #: netbox/templates/wireless/wirelesslan.html:11 -#: netbox/wireless/forms/model_forms.py:53 +#: netbox/wireless/forms/model_forms.py:55 msgid "Wireless LAN" msgstr "Kablosuz LAN" -#: netbox/dcim/filtersets.py:1734 netbox/dcim/tables/devices.py:613 +#: netbox/dcim/filtersets.py:1844 netbox/dcim/tables/devices.py:635 msgid "Wireless link" msgstr "Kablosuz bağlantı" -#: netbox/dcim/filtersets.py:1803 +#: netbox/dcim/filtersets.py:1854 +msgid "Virtual circuit termination (ID)" +msgstr "Sanal devre sonlandırma (ID)" + +#: netbox/dcim/filtersets.py:1923 msgid "Parent module bay (ID)" msgstr "Ana modül yuvası (ID)" -#: netbox/dcim/filtersets.py:1808 +#: netbox/dcim/filtersets.py:1928 msgid "Installed module (ID)" msgstr "Yüklü modül (ID)" -#: netbox/dcim/filtersets.py:1819 +#: netbox/dcim/filtersets.py:1939 msgid "Installed device (ID)" msgstr "Yüklü cihaz (ID)" -#: netbox/dcim/filtersets.py:1825 +#: netbox/dcim/filtersets.py:1945 msgid "Installed device (name)" msgstr "Yüklü cihaz (isim)" -#: netbox/dcim/filtersets.py:1891 +#: netbox/dcim/filtersets.py:2015 msgid "Master (ID)" msgstr "Master (ID)" -#: netbox/dcim/filtersets.py:1897 +#: netbox/dcim/filtersets.py:2021 msgid "Master (name)" msgstr "Master (isim)" -#: netbox/dcim/filtersets.py:1939 netbox/tenancy/filtersets.py:245 +#: netbox/dcim/filtersets.py:2063 netbox/tenancy/filtersets.py:245 msgid "Tenant (ID)" msgstr "Kiracı (ID)" -#: netbox/dcim/filtersets.py:1945 netbox/extras/filtersets.py:618 +#: netbox/dcim/filtersets.py:2069 netbox/extras/filtersets.py:618 #: netbox/tenancy/filtersets.py:251 msgid "Tenant (slug)" msgstr "Kiracı (kısa ad)" -#: netbox/dcim/filtersets.py:1981 netbox/dcim/forms/filtersets.py:1077 +#: netbox/dcim/filtersets.py:2105 netbox/dcim/forms/filtersets.py:1078 msgid "Unterminated" msgstr "Sonlandırılmamış" -#: netbox/dcim/filtersets.py:2239 +#: netbox/dcim/filtersets.py:2363 msgid "Power panel (ID)" msgstr "Güç paneli (ID)" -#: netbox/dcim/forms/bulk_create.py:40 netbox/extras/forms/filtersets.py:401 -#: netbox/extras/forms/model_forms.py:567 -#: netbox/extras/forms/model_forms.py:619 netbox/netbox/forms/base.py:86 -#: netbox/netbox/forms/mixins.py:81 netbox/netbox/tables/columns.py:478 +#: netbox/dcim/forms/bulk_create.py:40 netbox/extras/forms/filtersets.py:408 +#: netbox/extras/forms/model_forms.py:581 +#: netbox/extras/forms/model_forms.py:633 netbox/netbox/forms/base.py:86 +#: netbox/netbox/forms/mixins.py:91 netbox/netbox/tables/columns.py:481 #: netbox/templates/circuits/inc/circuit_termination.html:32 #: netbox/templates/generic/bulk_edit.html:65 #: netbox/templates/inc/panels/tags.html:5 @@ -3423,11 +3925,11 @@ msgstr "Güç paneli (ID)" msgid "Tags" msgstr "Etiketler" -#: netbox/dcim/forms/bulk_create.py:112 netbox/dcim/forms/filtersets.py:1498 -#: netbox/dcim/forms/model_forms.py:488 netbox/dcim/forms/model_forms.py:546 +#: netbox/dcim/forms/bulk_create.py:112 netbox/dcim/forms/filtersets.py:1503 +#: netbox/dcim/forms/model_forms.py:498 netbox/dcim/forms/model_forms.py:557 #: netbox/dcim/forms/object_create.py:197 -#: netbox/dcim/forms/object_create.py:345 netbox/dcim/tables/devices.py:165 -#: netbox/dcim/tables/devices.py:707 netbox/dcim/tables/devicetypes.py:246 +#: netbox/dcim/forms/object_create.py:345 netbox/dcim/tables/devices.py:176 +#: netbox/dcim/tables/devices.py:741 netbox/dcim/tables/devicetypes.py:253 #: netbox/templates/dcim/device.html:43 netbox/templates/dcim/device.html:131 #: netbox/templates/dcim/modulebay.html:38 #: netbox/templates/dcim/virtualchassis.html:66 @@ -3443,114 +3945,114 @@ msgstr "" "Alfasayısal aralıklar desteklenir. (Oluşturulan isim sayısıyla " "eşleşmelidir.)" -#: netbox/dcim/forms/bulk_edit.py:133 +#: netbox/dcim/forms/bulk_edit.py:136 msgid "Contact name" msgstr "İrtibat Kişisi Adı" -#: netbox/dcim/forms/bulk_edit.py:138 +#: netbox/dcim/forms/bulk_edit.py:141 msgid "Contact phone" msgstr "İletişim telefonu" -#: netbox/dcim/forms/bulk_edit.py:144 +#: netbox/dcim/forms/bulk_edit.py:147 msgid "Contact E-mail" msgstr "İletişim E-posta" -#: netbox/dcim/forms/bulk_edit.py:147 netbox/dcim/forms/bulk_import.py:123 -#: netbox/dcim/forms/model_forms.py:128 +#: netbox/dcim/forms/bulk_edit.py:150 netbox/dcim/forms/bulk_import.py:125 +#: netbox/dcim/forms/model_forms.py:132 msgid "Time zone" msgstr "Saat dilimi" -#: netbox/dcim/forms/bulk_edit.py:225 netbox/dcim/forms/bulk_edit.py:501 -#: netbox/dcim/forms/bulk_edit.py:565 netbox/dcim/forms/bulk_edit.py:638 -#: netbox/dcim/forms/bulk_edit.py:662 netbox/dcim/forms/bulk_edit.py:755 -#: netbox/dcim/forms/bulk_edit.py:1282 netbox/dcim/forms/bulk_edit.py:1703 -#: netbox/dcim/forms/bulk_import.py:182 netbox/dcim/forms/bulk_import.py:393 -#: netbox/dcim/forms/bulk_import.py:427 netbox/dcim/forms/bulk_import.py:472 -#: netbox/dcim/forms/bulk_import.py:508 netbox/dcim/forms/bulk_import.py:1104 -#: netbox/dcim/forms/filtersets.py:313 netbox/dcim/forms/filtersets.py:372 -#: netbox/dcim/forms/filtersets.py:494 netbox/dcim/forms/filtersets.py:619 -#: netbox/dcim/forms/filtersets.py:700 netbox/dcim/forms/filtersets.py:782 -#: netbox/dcim/forms/filtersets.py:947 netbox/dcim/forms/filtersets.py:1539 -#: netbox/dcim/forms/model_forms.py:207 netbox/dcim/forms/model_forms.py:337 -#: netbox/dcim/forms/model_forms.py:349 netbox/dcim/forms/model_forms.py:395 -#: netbox/dcim/forms/model_forms.py:436 netbox/dcim/forms/model_forms.py:1082 -#: netbox/dcim/forms/model_forms.py:1522 -#: netbox/dcim/forms/object_import.py:187 netbox/dcim/tables/devices.py:96 -#: netbox/dcim/tables/devices.py:172 netbox/dcim/tables/devices.py:940 -#: netbox/dcim/tables/devicetypes.py:80 netbox/dcim/tables/devicetypes.py:308 +#: netbox/dcim/forms/bulk_edit.py:228 netbox/dcim/forms/bulk_edit.py:504 +#: netbox/dcim/forms/bulk_edit.py:568 netbox/dcim/forms/bulk_edit.py:641 +#: netbox/dcim/forms/bulk_edit.py:665 netbox/dcim/forms/bulk_edit.py:758 +#: netbox/dcim/forms/bulk_edit.py:1285 netbox/dcim/forms/bulk_edit.py:1718 +#: netbox/dcim/forms/bulk_import.py:184 netbox/dcim/forms/bulk_import.py:395 +#: netbox/dcim/forms/bulk_import.py:429 netbox/dcim/forms/bulk_import.py:477 +#: netbox/dcim/forms/bulk_import.py:513 netbox/dcim/forms/bulk_import.py:1112 +#: netbox/dcim/forms/filtersets.py:314 netbox/dcim/forms/filtersets.py:373 +#: netbox/dcim/forms/filtersets.py:495 netbox/dcim/forms/filtersets.py:620 +#: netbox/dcim/forms/filtersets.py:701 netbox/dcim/forms/filtersets.py:783 +#: netbox/dcim/forms/filtersets.py:948 netbox/dcim/forms/filtersets.py:1544 +#: netbox/dcim/forms/model_forms.py:211 netbox/dcim/forms/model_forms.py:345 +#: netbox/dcim/forms/model_forms.py:357 netbox/dcim/forms/model_forms.py:404 +#: netbox/dcim/forms/model_forms.py:445 netbox/dcim/forms/model_forms.py:1095 +#: netbox/dcim/forms/model_forms.py:1564 +#: netbox/dcim/forms/object_import.py:188 netbox/dcim/tables/devices.py:107 +#: netbox/dcim/tables/devices.py:183 netbox/dcim/tables/devices.py:970 +#: netbox/dcim/tables/devicetypes.py:85 netbox/dcim/tables/devicetypes.py:315 #: netbox/dcim/tables/modules.py:20 netbox/dcim/tables/modules.py:61 -#: netbox/dcim/tables/racks.py:58 netbox/dcim/tables/racks.py:132 +#: netbox/dcim/tables/racks.py:58 netbox/dcim/tables/racks.py:131 #: netbox/templates/dcim/devicetype.html:14 -#: netbox/templates/dcim/inventoryitem.html:44 +#: netbox/templates/dcim/inventoryitem.html:48 #: netbox/templates/dcim/manufacturer.html:33 #: netbox/templates/dcim/modulebay.html:62 -#: netbox/templates/dcim/moduletype.html:25 +#: netbox/templates/dcim/moduletype.html:27 #: netbox/templates/dcim/platform.html:37 #: netbox/templates/dcim/racktype.html:16 msgid "Manufacturer" msgstr "Üretici" -#: netbox/dcim/forms/bulk_edit.py:230 netbox/dcim/forms/bulk_edit.py:378 -#: netbox/dcim/forms/bulk_import.py:191 netbox/dcim/forms/bulk_import.py:270 -#: netbox/dcim/forms/filtersets.py:255 +#: netbox/dcim/forms/bulk_edit.py:233 netbox/dcim/forms/bulk_edit.py:381 +#: netbox/dcim/forms/bulk_import.py:193 netbox/dcim/forms/bulk_import.py:272 +#: netbox/dcim/forms/filtersets.py:256 #: netbox/templates/dcim/inc/panels/racktype_dimensions.html:6 msgid "Form factor" msgstr "Form faktörü" -#: netbox/dcim/forms/bulk_edit.py:235 netbox/dcim/forms/bulk_edit.py:383 -#: netbox/dcim/forms/bulk_import.py:199 netbox/dcim/forms/bulk_import.py:273 -#: netbox/dcim/forms/filtersets.py:260 +#: netbox/dcim/forms/bulk_edit.py:238 netbox/dcim/forms/bulk_edit.py:386 +#: netbox/dcim/forms/bulk_import.py:201 netbox/dcim/forms/bulk_import.py:275 +#: netbox/dcim/forms/filtersets.py:261 #: netbox/templates/dcim/inc/panels/racktype_dimensions.html:10 msgid "Width" msgstr "Genişlik" -#: netbox/dcim/forms/bulk_edit.py:241 netbox/dcim/forms/bulk_edit.py:389 -#: netbox/dcim/forms/bulk_import.py:280 +#: netbox/dcim/forms/bulk_edit.py:244 netbox/dcim/forms/bulk_edit.py:392 +#: netbox/dcim/forms/bulk_import.py:282 #: netbox/templates/dcim/devicetype.html:37 msgid "Height (U)" msgstr "Yükseklik (U)" -#: netbox/dcim/forms/bulk_edit.py:250 netbox/dcim/forms/bulk_edit.py:394 -#: netbox/dcim/forms/filtersets.py:274 +#: netbox/dcim/forms/bulk_edit.py:253 netbox/dcim/forms/bulk_edit.py:397 +#: netbox/dcim/forms/filtersets.py:275 msgid "Descending units" msgstr "Azalan birimler" -#: netbox/dcim/forms/bulk_edit.py:253 netbox/dcim/forms/bulk_edit.py:397 +#: netbox/dcim/forms/bulk_edit.py:256 netbox/dcim/forms/bulk_edit.py:400 msgid "Outer width" msgstr "Dış genişlik" -#: netbox/dcim/forms/bulk_edit.py:258 netbox/dcim/forms/bulk_edit.py:402 +#: netbox/dcim/forms/bulk_edit.py:261 netbox/dcim/forms/bulk_edit.py:405 msgid "Outer depth" msgstr "Dış derinlik" -#: netbox/dcim/forms/bulk_edit.py:263 netbox/dcim/forms/bulk_edit.py:407 -#: netbox/dcim/forms/bulk_import.py:204 netbox/dcim/forms/bulk_import.py:283 +#: netbox/dcim/forms/bulk_edit.py:266 netbox/dcim/forms/bulk_edit.py:410 +#: netbox/dcim/forms/bulk_import.py:206 netbox/dcim/forms/bulk_import.py:285 msgid "Outer unit" msgstr "Dış ünite" -#: netbox/dcim/forms/bulk_edit.py:268 netbox/dcim/forms/bulk_edit.py:412 +#: netbox/dcim/forms/bulk_edit.py:271 netbox/dcim/forms/bulk_edit.py:415 msgid "Mounting depth" msgstr "Montaj derinliği" -#: netbox/dcim/forms/bulk_edit.py:273 netbox/dcim/forms/bulk_edit.py:300 -#: netbox/dcim/forms/bulk_edit.py:422 netbox/dcim/forms/bulk_edit.py:452 -#: netbox/dcim/forms/bulk_edit.py:535 netbox/dcim/forms/bulk_edit.py:558 -#: netbox/dcim/forms/bulk_edit.py:579 netbox/dcim/forms/bulk_edit.py:601 -#: netbox/dcim/forms/bulk_import.py:406 netbox/dcim/forms/bulk_import.py:438 -#: netbox/dcim/forms/filtersets.py:285 netbox/dcim/forms/filtersets.py:307 -#: netbox/dcim/forms/filtersets.py:327 netbox/dcim/forms/filtersets.py:401 -#: netbox/dcim/forms/filtersets.py:488 netbox/dcim/forms/filtersets.py:594 -#: netbox/dcim/forms/filtersets.py:613 netbox/dcim/forms/filtersets.py:674 -#: netbox/dcim/forms/model_forms.py:221 netbox/dcim/forms/model_forms.py:298 -#: netbox/dcim/tables/devicetypes.py:106 netbox/dcim/tables/modules.py:35 -#: netbox/dcim/tables/racks.py:74 netbox/dcim/tables/racks.py:172 +#: netbox/dcim/forms/bulk_edit.py:276 netbox/dcim/forms/bulk_edit.py:303 +#: netbox/dcim/forms/bulk_edit.py:425 netbox/dcim/forms/bulk_edit.py:455 +#: netbox/dcim/forms/bulk_edit.py:538 netbox/dcim/forms/bulk_edit.py:561 +#: netbox/dcim/forms/bulk_edit.py:582 netbox/dcim/forms/bulk_edit.py:604 +#: netbox/dcim/forms/bulk_import.py:408 netbox/dcim/forms/bulk_import.py:440 +#: netbox/dcim/forms/filtersets.py:286 netbox/dcim/forms/filtersets.py:308 +#: netbox/dcim/forms/filtersets.py:328 netbox/dcim/forms/filtersets.py:402 +#: netbox/dcim/forms/filtersets.py:489 netbox/dcim/forms/filtersets.py:595 +#: netbox/dcim/forms/filtersets.py:614 netbox/dcim/forms/filtersets.py:675 +#: netbox/dcim/forms/model_forms.py:226 netbox/dcim/forms/model_forms.py:306 +#: netbox/dcim/tables/devicetypes.py:111 netbox/dcim/tables/modules.py:35 +#: netbox/dcim/tables/racks.py:74 netbox/dcim/tables/racks.py:171 #: netbox/extras/forms/bulk_edit.py:53 netbox/extras/forms/bulk_edit.py:133 #: netbox/extras/forms/bulk_edit.py:183 netbox/extras/forms/bulk_edit.py:288 -#: netbox/extras/forms/filtersets.py:64 netbox/extras/forms/filtersets.py:156 -#: netbox/extras/forms/filtersets.py:243 netbox/ipam/forms/bulk_edit.py:190 +#: netbox/extras/forms/filtersets.py:65 netbox/extras/forms/filtersets.py:159 +#: netbox/extras/forms/filtersets.py:249 netbox/ipam/forms/bulk_edit.py:193 #: netbox/templates/dcim/device.html:324 #: netbox/templates/dcim/devicetype.html:49 -#: netbox/templates/dcim/moduletype.html:45 netbox/templates/dcim/rack.html:81 +#: netbox/templates/dcim/moduletype.html:47 netbox/templates/dcim/rack.html:81 #: netbox/templates/dcim/racktype.html:41 #: netbox/templates/extras/configcontext.html:17 #: netbox/templates/extras/customlink.html:25 @@ -3559,131 +4061,86 @@ msgstr "Montaj derinliği" msgid "Weight" msgstr "Ağırlığı" -#: netbox/dcim/forms/bulk_edit.py:278 netbox/dcim/forms/bulk_edit.py:427 -#: netbox/dcim/forms/filtersets.py:290 +#: netbox/dcim/forms/bulk_edit.py:281 netbox/dcim/forms/bulk_edit.py:430 +#: netbox/dcim/forms/filtersets.py:291 msgid "Max weight" msgstr "Maksimum ağırlık" -#: netbox/dcim/forms/bulk_edit.py:283 netbox/dcim/forms/bulk_edit.py:432 -#: netbox/dcim/forms/bulk_edit.py:540 netbox/dcim/forms/bulk_edit.py:584 -#: netbox/dcim/forms/bulk_import.py:210 netbox/dcim/forms/bulk_import.py:295 -#: netbox/dcim/forms/bulk_import.py:411 netbox/dcim/forms/bulk_import.py:443 -#: netbox/dcim/forms/filtersets.py:295 netbox/dcim/forms/filtersets.py:598 -#: netbox/dcim/forms/filtersets.py:678 +#: netbox/dcim/forms/bulk_edit.py:286 netbox/dcim/forms/bulk_edit.py:435 +#: netbox/dcim/forms/bulk_edit.py:543 netbox/dcim/forms/bulk_edit.py:587 +#: netbox/dcim/forms/bulk_import.py:212 netbox/dcim/forms/bulk_import.py:297 +#: netbox/dcim/forms/bulk_import.py:413 netbox/dcim/forms/bulk_import.py:445 +#: netbox/dcim/forms/filtersets.py:296 netbox/dcim/forms/filtersets.py:599 +#: netbox/dcim/forms/filtersets.py:679 msgid "Weight unit" msgstr "Ağırlık birimi" -#: netbox/dcim/forms/bulk_edit.py:297 netbox/dcim/forms/filtersets.py:305 -#: netbox/dcim/forms/model_forms.py:217 netbox/dcim/forms/model_forms.py:256 +#: netbox/dcim/forms/bulk_edit.py:300 netbox/dcim/forms/filtersets.py:306 +#: netbox/dcim/forms/model_forms.py:222 netbox/dcim/forms/model_forms.py:261 #: netbox/templates/dcim/rack.html:45 netbox/templates/dcim/racktype.html:13 msgid "Rack Type" msgstr "Raf Tipi" -#: netbox/dcim/forms/bulk_edit.py:299 netbox/dcim/forms/model_forms.py:220 -#: netbox/dcim/forms/model_forms.py:297 +#: netbox/dcim/forms/bulk_edit.py:302 netbox/dcim/forms/model_forms.py:225 +#: netbox/dcim/forms/model_forms.py:305 msgid "Outer Dimensions" msgstr "Dış Ölçüler" -#: netbox/dcim/forms/bulk_edit.py:302 netbox/dcim/forms/model_forms.py:222 -#: netbox/dcim/forms/model_forms.py:299 netbox/templates/dcim/device.html:315 +#: netbox/dcim/forms/bulk_edit.py:305 netbox/dcim/forms/model_forms.py:227 +#: netbox/dcim/forms/model_forms.py:307 netbox/templates/dcim/device.html:315 #: netbox/templates/dcim/inc/panels/racktype_dimensions.html:3 msgid "Dimensions" msgstr "Ölçüler" -#: netbox/dcim/forms/bulk_edit.py:304 netbox/dcim/forms/filtersets.py:306 -#: netbox/dcim/forms/filtersets.py:326 netbox/dcim/forms/model_forms.py:224 +#: netbox/dcim/forms/bulk_edit.py:307 netbox/dcim/forms/filtersets.py:307 +#: netbox/dcim/forms/filtersets.py:327 netbox/dcim/forms/model_forms.py:229 #: netbox/templates/dcim/inc/panels/racktype_numbering.html:3 msgid "Numbering" msgstr "Numaralandırma" -#: netbox/dcim/forms/bulk_edit.py:358 netbox/dcim/forms/bulk_edit.py:1277 -#: netbox/dcim/forms/bulk_edit.py:1698 netbox/dcim/forms/bulk_import.py:253 -#: netbox/dcim/forms/bulk_import.py:1098 netbox/dcim/forms/filtersets.py:367 -#: netbox/dcim/forms/filtersets.py:777 netbox/dcim/forms/filtersets.py:1534 -#: netbox/dcim/forms/model_forms.py:251 netbox/dcim/forms/model_forms.py:1077 -#: netbox/dcim/forms/model_forms.py:1517 -#: netbox/dcim/forms/object_import.py:181 netbox/dcim/tables/devices.py:169 -#: netbox/dcim/tables/devices.py:809 netbox/dcim/tables/devices.py:937 -#: netbox/dcim/tables/devicetypes.py:304 netbox/dcim/tables/racks.py:129 -#: netbox/extras/filtersets.py:552 netbox/ipam/forms/bulk_edit.py:261 -#: netbox/ipam/forms/bulk_edit.py:311 netbox/ipam/forms/bulk_edit.py:359 -#: netbox/ipam/forms/bulk_edit.py:511 netbox/ipam/forms/bulk_import.py:197 -#: netbox/ipam/forms/bulk_import.py:262 netbox/ipam/forms/bulk_import.py:298 -#: netbox/ipam/forms/bulk_import.py:479 netbox/ipam/forms/filtersets.py:237 -#: netbox/ipam/forms/filtersets.py:289 netbox/ipam/forms/filtersets.py:360 -#: netbox/ipam/forms/filtersets.py:509 netbox/ipam/forms/model_forms.py:188 -#: netbox/ipam/forms/model_forms.py:221 netbox/ipam/forms/model_forms.py:250 -#: netbox/ipam/forms/model_forms.py:676 netbox/ipam/tables/ip.py:258 -#: netbox/ipam/tables/ip.py:316 netbox/ipam/tables/ip.py:367 -#: netbox/ipam/tables/vlans.py:130 netbox/ipam/tables/vlans.py:235 -#: netbox/templates/dcim/device.html:182 -#: netbox/templates/dcim/inc/panels/inventory_items.html:20 -#: netbox/templates/dcim/interface.html:223 -#: netbox/templates/dcim/inventoryitem.html:36 -#: netbox/templates/dcim/rack.html:49 netbox/templates/ipam/ipaddress.html:41 -#: netbox/templates/ipam/iprange.html:50 netbox/templates/ipam/prefix.html:77 -#: netbox/templates/ipam/role.html:19 netbox/templates/ipam/vlan.html:52 -#: netbox/templates/virtualization/virtualmachine.html:23 -#: netbox/templates/vpn/tunneltermination.html:17 -#: netbox/templates/wireless/inc/wirelesslink_interface.html:20 -#: netbox/tenancy/forms/bulk_edit.py:142 -#: netbox/tenancy/forms/filtersets.py:107 -#: netbox/tenancy/forms/model_forms.py:137 -#: netbox/tenancy/tables/contacts.py:102 -#: netbox/virtualization/forms/bulk_edit.py:145 -#: netbox/virtualization/forms/bulk_import.py:106 -#: netbox/virtualization/forms/filtersets.py:157 -#: netbox/virtualization/forms/model_forms.py:195 -#: netbox/virtualization/tables/virtualmachines.py:75 -#: netbox/vpn/forms/bulk_edit.py:87 netbox/vpn/forms/bulk_import.py:81 -#: netbox/vpn/forms/filtersets.py:85 netbox/vpn/forms/model_forms.py:78 -#: netbox/vpn/forms/model_forms.py:113 netbox/vpn/tables/tunnels.py:82 -msgid "Role" -msgstr "Rol" - -#: netbox/dcim/forms/bulk_edit.py:363 netbox/dcim/forms/bulk_import.py:260 -#: netbox/dcim/forms/filtersets.py:380 +#: netbox/dcim/forms/bulk_edit.py:366 netbox/dcim/forms/bulk_import.py:262 +#: netbox/dcim/forms/filtersets.py:381 msgid "Rack type" msgstr "Raf tipi" -#: netbox/dcim/forms/bulk_edit.py:370 netbox/dcim/forms/bulk_edit.py:718 -#: netbox/dcim/forms/bulk_edit.py:779 netbox/templates/dcim/device.html:104 +#: netbox/dcim/forms/bulk_edit.py:373 netbox/dcim/forms/bulk_edit.py:721 +#: netbox/dcim/forms/bulk_edit.py:782 netbox/templates/dcim/device.html:104 #: netbox/templates/dcim/module.html:77 #: netbox/templates/dcim/modulebay.html:70 netbox/templates/dcim/rack.html:57 #: netbox/templates/virtualization/virtualmachine.html:35 msgid "Serial Number" msgstr "Seri Numarası" -#: netbox/dcim/forms/bulk_edit.py:373 netbox/dcim/forms/filtersets.py:387 -#: netbox/dcim/forms/filtersets.py:813 netbox/dcim/forms/filtersets.py:967 -#: netbox/dcim/forms/filtersets.py:1546 +#: netbox/dcim/forms/bulk_edit.py:376 netbox/dcim/forms/filtersets.py:388 +#: netbox/dcim/forms/filtersets.py:814 netbox/dcim/forms/filtersets.py:968 +#: netbox/dcim/forms/filtersets.py:1551 msgid "Asset tag" msgstr "Varlık etiketi" -#: netbox/dcim/forms/bulk_edit.py:417 netbox/dcim/forms/bulk_edit.py:530 -#: netbox/dcim/forms/bulk_edit.py:574 netbox/dcim/forms/bulk_edit.py:711 -#: netbox/dcim/forms/bulk_import.py:289 netbox/dcim/forms/bulk_import.py:432 -#: netbox/dcim/forms/bulk_import.py:602 netbox/dcim/forms/filtersets.py:280 -#: netbox/dcim/forms/filtersets.py:511 netbox/dcim/forms/filtersets.py:669 -#: netbox/dcim/forms/filtersets.py:804 netbox/templates/dcim/device.html:98 +#: netbox/dcim/forms/bulk_edit.py:420 netbox/dcim/forms/bulk_edit.py:533 +#: netbox/dcim/forms/bulk_edit.py:577 netbox/dcim/forms/bulk_edit.py:714 +#: netbox/dcim/forms/bulk_import.py:291 netbox/dcim/forms/bulk_import.py:434 +#: netbox/dcim/forms/bulk_import.py:607 netbox/dcim/forms/filtersets.py:281 +#: netbox/dcim/forms/filtersets.py:512 netbox/dcim/forms/filtersets.py:670 +#: netbox/dcim/forms/filtersets.py:805 netbox/templates/dcim/device.html:98 #: netbox/templates/dcim/devicetype.html:65 -#: netbox/templates/dcim/moduletype.html:41 netbox/templates/dcim/rack.html:65 +#: netbox/templates/dcim/moduletype.html:43 netbox/templates/dcim/rack.html:65 #: netbox/templates/dcim/racktype.html:28 msgid "Airflow" msgstr "Hava akışı" -#: netbox/dcim/forms/bulk_edit.py:446 netbox/dcim/forms/bulk_edit.py:925 -#: netbox/dcim/forms/bulk_import.py:344 netbox/dcim/forms/bulk_import.py:347 -#: netbox/dcim/forms/bulk_import.py:575 netbox/dcim/forms/bulk_import.py:1380 -#: netbox/dcim/forms/bulk_import.py:1384 netbox/dcim/forms/filtersets.py:104 -#: netbox/dcim/forms/filtersets.py:324 netbox/dcim/forms/filtersets.py:405 -#: netbox/dcim/forms/filtersets.py:419 netbox/dcim/forms/filtersets.py:457 -#: netbox/dcim/forms/filtersets.py:772 netbox/dcim/forms/filtersets.py:1035 -#: netbox/dcim/forms/filtersets.py:1167 netbox/dcim/forms/model_forms.py:264 -#: netbox/dcim/forms/model_forms.py:306 netbox/dcim/forms/model_forms.py:479 -#: netbox/dcim/forms/model_forms.py:755 netbox/dcim/forms/object_create.py:392 -#: netbox/dcim/tables/devices.py:161 netbox/dcim/tables/power.py:70 -#: netbox/dcim/tables/racks.py:217 netbox/ipam/forms/filtersets.py:442 +#: netbox/dcim/forms/bulk_edit.py:449 netbox/dcim/forms/bulk_edit.py:928 +#: netbox/dcim/forms/bulk_import.py:346 netbox/dcim/forms/bulk_import.py:349 +#: netbox/dcim/forms/bulk_import.py:580 netbox/dcim/forms/bulk_import.py:1477 +#: netbox/dcim/forms/bulk_import.py:1481 netbox/dcim/forms/filtersets.py:105 +#: netbox/dcim/forms/filtersets.py:325 netbox/dcim/forms/filtersets.py:406 +#: netbox/dcim/forms/filtersets.py:420 netbox/dcim/forms/filtersets.py:458 +#: netbox/dcim/forms/filtersets.py:773 netbox/dcim/forms/filtersets.py:1036 +#: netbox/dcim/forms/filtersets.py:1168 netbox/dcim/forms/model_forms.py:271 +#: netbox/dcim/forms/model_forms.py:314 netbox/dcim/forms/model_forms.py:489 +#: netbox/dcim/forms/model_forms.py:767 netbox/dcim/forms/object_create.py:392 +#: netbox/dcim/tables/devices.py:172 netbox/dcim/tables/power.py:70 +#: netbox/dcim/tables/racks.py:216 netbox/ipam/forms/filtersets.py:445 #: netbox/templates/dcim/device.html:30 #: netbox/templates/dcim/inc/cable_termination.html:16 #: netbox/templates/dcim/powerfeed.html:28 netbox/templates/dcim/rack.html:13 @@ -3694,212 +4151,144 @@ msgstr "Hava akışı" msgid "Rack" msgstr "Raf" -#: netbox/dcim/forms/bulk_edit.py:450 netbox/dcim/forms/bulk_edit.py:744 -#: netbox/dcim/forms/filtersets.py:325 netbox/dcim/forms/filtersets.py:398 -#: netbox/dcim/forms/filtersets.py:481 netbox/dcim/forms/filtersets.py:608 -#: netbox/dcim/forms/filtersets.py:721 netbox/dcim/forms/filtersets.py:942 -#: netbox/dcim/forms/model_forms.py:670 netbox/dcim/forms/model_forms.py:1587 +#: netbox/dcim/forms/bulk_edit.py:453 netbox/dcim/forms/bulk_edit.py:747 +#: netbox/dcim/forms/filtersets.py:326 netbox/dcim/forms/filtersets.py:399 +#: netbox/dcim/forms/filtersets.py:482 netbox/dcim/forms/filtersets.py:609 +#: netbox/dcim/forms/filtersets.py:722 netbox/dcim/forms/filtersets.py:943 +#: netbox/dcim/forms/model_forms.py:681 netbox/dcim/forms/model_forms.py:1632 #: netbox/templates/dcim/device_edit.html:20 msgid "Hardware" msgstr "Donanım" -#: netbox/dcim/forms/bulk_edit.py:506 netbox/dcim/forms/bulk_import.py:399 -#: netbox/dcim/forms/filtersets.py:499 netbox/dcim/forms/model_forms.py:353 +#: netbox/dcim/forms/bulk_edit.py:509 netbox/dcim/forms/bulk_import.py:401 +#: netbox/dcim/forms/filtersets.py:500 netbox/dcim/forms/model_forms.py:362 msgid "Default platform" msgstr "Varsayılan platform" -#: netbox/dcim/forms/bulk_edit.py:511 netbox/dcim/forms/bulk_edit.py:570 -#: netbox/dcim/forms/filtersets.py:502 netbox/dcim/forms/filtersets.py:622 +#: netbox/dcim/forms/bulk_edit.py:514 netbox/dcim/forms/bulk_edit.py:573 +#: netbox/dcim/forms/filtersets.py:503 netbox/dcim/forms/filtersets.py:623 msgid "Part number" msgstr "Parça numarası" -#: netbox/dcim/forms/bulk_edit.py:515 +#: netbox/dcim/forms/bulk_edit.py:518 msgid "U height" msgstr "U yüksekliği" -#: netbox/dcim/forms/bulk_edit.py:527 netbox/dcim/tables/devicetypes.py:102 +#: netbox/dcim/forms/bulk_edit.py:530 netbox/dcim/tables/devicetypes.py:107 msgid "Exclude from utilization" msgstr "Kullanımdan hariç tut" -#: netbox/dcim/forms/bulk_edit.py:556 netbox/dcim/forms/model_forms.py:368 -#: netbox/dcim/tables/devicetypes.py:77 netbox/templates/dcim/device.html:88 +#: netbox/dcim/forms/bulk_edit.py:559 netbox/dcim/forms/model_forms.py:377 +#: netbox/dcim/tables/devicetypes.py:82 netbox/templates/dcim/device.html:88 #: netbox/templates/dcim/devicebay.html:52 #: netbox/templates/dcim/module.html:61 msgid "Device Type" msgstr "Cihaz Türü" -#: netbox/dcim/forms/bulk_edit.py:598 netbox/dcim/forms/model_forms.py:401 +#: netbox/dcim/forms/bulk_edit.py:601 netbox/dcim/forms/model_forms.py:410 #: netbox/dcim/tables/modules.py:17 netbox/dcim/tables/modules.py:66 #: netbox/templates/dcim/module.html:65 #: netbox/templates/dcim/modulebay.html:66 -#: netbox/templates/dcim/moduletype.html:22 +#: netbox/templates/dcim/moduletype.html:24 msgid "Module Type" msgstr "Modül Türü" -#: netbox/dcim/forms/bulk_edit.py:602 netbox/dcim/forms/model_forms.py:371 -#: netbox/dcim/forms/model_forms.py:402 +#: netbox/dcim/forms/bulk_edit.py:605 netbox/dcim/forms/model_forms.py:380 +#: netbox/dcim/forms/model_forms.py:411 #: netbox/templates/dcim/devicetype.html:11 msgid "Chassis" msgstr "Şasi" -#: netbox/dcim/forms/bulk_edit.py:616 netbox/dcim/models/devices.py:484 -#: netbox/dcim/tables/devices.py:67 +#: netbox/dcim/forms/bulk_edit.py:619 netbox/dcim/models/devices.py:483 +#: netbox/dcim/tables/devices.py:78 msgid "VM role" msgstr "VM rolü" -#: netbox/dcim/forms/bulk_edit.py:619 netbox/dcim/forms/bulk_edit.py:643 -#: netbox/dcim/forms/bulk_edit.py:726 netbox/dcim/forms/bulk_import.py:456 -#: netbox/dcim/forms/bulk_import.py:460 netbox/dcim/forms/bulk_import.py:479 -#: netbox/dcim/forms/bulk_import.py:483 netbox/dcim/forms/bulk_import.py:608 -#: netbox/dcim/forms/bulk_import.py:612 netbox/dcim/forms/filtersets.py:689 -#: netbox/dcim/forms/filtersets.py:705 netbox/dcim/forms/filtersets.py:823 -#: netbox/dcim/forms/model_forms.py:415 netbox/dcim/forms/model_forms.py:441 -#: netbox/dcim/forms/model_forms.py:555 -#: netbox/virtualization/forms/bulk_import.py:132 -#: netbox/virtualization/forms/bulk_import.py:133 -#: netbox/virtualization/forms/filtersets.py:188 -#: netbox/virtualization/forms/model_forms.py:215 +#: netbox/dcim/forms/bulk_edit.py:622 netbox/dcim/forms/bulk_edit.py:646 +#: netbox/dcim/forms/bulk_edit.py:729 netbox/dcim/forms/bulk_import.py:461 +#: netbox/dcim/forms/bulk_import.py:465 netbox/dcim/forms/bulk_import.py:484 +#: netbox/dcim/forms/bulk_import.py:488 netbox/dcim/forms/bulk_import.py:613 +#: netbox/dcim/forms/bulk_import.py:617 netbox/dcim/forms/filtersets.py:690 +#: netbox/dcim/forms/filtersets.py:706 netbox/dcim/forms/filtersets.py:824 +#: netbox/dcim/forms/model_forms.py:424 netbox/dcim/forms/model_forms.py:451 +#: netbox/dcim/forms/model_forms.py:566 +#: netbox/virtualization/forms/bulk_import.py:138 +#: netbox/virtualization/forms/bulk_import.py:139 +#: netbox/virtualization/forms/filtersets.py:193 +#: netbox/virtualization/forms/model_forms.py:222 msgid "Config template" msgstr "Yapılandırma şablonu" -#: netbox/dcim/forms/bulk_edit.py:667 netbox/dcim/forms/bulk_edit.py:1076 -#: netbox/dcim/forms/bulk_import.py:514 netbox/dcim/forms/filtersets.py:114 -#: netbox/dcim/forms/model_forms.py:501 netbox/dcim/forms/model_forms.py:872 -#: netbox/dcim/forms/model_forms.py:889 netbox/extras/filtersets.py:547 +#: netbox/dcim/forms/bulk_edit.py:670 netbox/dcim/forms/bulk_edit.py:1079 +#: netbox/dcim/forms/bulk_import.py:519 netbox/dcim/forms/filtersets.py:115 +#: netbox/dcim/forms/model_forms.py:511 netbox/dcim/forms/model_forms.py:884 +#: netbox/dcim/forms/model_forms.py:901 netbox/extras/filtersets.py:547 msgid "Device type" msgstr "Cihaz tipi" -#: netbox/dcim/forms/bulk_edit.py:678 netbox/dcim/forms/bulk_import.py:495 -#: netbox/dcim/forms/filtersets.py:119 netbox/dcim/forms/model_forms.py:509 +#: netbox/dcim/forms/bulk_edit.py:681 netbox/dcim/forms/bulk_import.py:500 +#: netbox/dcim/forms/filtersets.py:120 netbox/dcim/forms/model_forms.py:519 msgid "Device role" msgstr "Cihaz rolü" -#: netbox/dcim/forms/bulk_edit.py:701 netbox/dcim/forms/bulk_import.py:520 -#: netbox/dcim/forms/filtersets.py:796 netbox/dcim/forms/model_forms.py:451 -#: netbox/dcim/forms/model_forms.py:513 netbox/dcim/tables/devices.py:182 +#: netbox/dcim/forms/bulk_edit.py:704 netbox/dcim/forms/bulk_import.py:525 +#: netbox/dcim/forms/filtersets.py:797 netbox/dcim/forms/model_forms.py:461 +#: netbox/dcim/forms/model_forms.py:524 netbox/dcim/tables/devices.py:193 #: netbox/extras/filtersets.py:563 netbox/templates/dcim/device.html:186 #: netbox/templates/dcim/platform.html:26 #: netbox/templates/virtualization/virtualmachine.html:27 -#: netbox/virtualization/forms/bulk_edit.py:160 -#: netbox/virtualization/forms/bulk_import.py:122 -#: netbox/virtualization/forms/filtersets.py:168 -#: netbox/virtualization/forms/model_forms.py:203 -#: netbox/virtualization/tables/virtualmachines.py:79 +#: netbox/virtualization/forms/bulk_edit.py:142 +#: netbox/virtualization/forms/bulk_import.py:128 +#: netbox/virtualization/forms/filtersets.py:173 +#: netbox/virtualization/forms/model_forms.py:210 +#: netbox/virtualization/tables/virtualmachines.py:49 msgid "Platform" msgstr "Platform" -#: netbox/dcim/forms/bulk_edit.py:731 netbox/dcim/forms/bulk_import.py:539 -#: netbox/dcim/forms/filtersets.py:728 netbox/dcim/forms/filtersets.py:898 -#: netbox/dcim/forms/model_forms.py:522 netbox/dcim/tables/devices.py:202 -#: netbox/extras/filtersets.py:596 netbox/extras/forms/filtersets.py:322 -#: netbox/ipam/forms/filtersets.py:415 netbox/ipam/forms/filtersets.py:447 +#: netbox/dcim/forms/bulk_edit.py:734 netbox/dcim/forms/bulk_import.py:544 +#: netbox/dcim/forms/filtersets.py:729 netbox/dcim/forms/filtersets.py:899 +#: netbox/dcim/forms/model_forms.py:533 netbox/dcim/tables/devices.py:213 +#: netbox/extras/filtersets.py:596 netbox/extras/forms/filtersets.py:329 +#: netbox/ipam/forms/filtersets.py:418 netbox/ipam/forms/filtersets.py:450 #: netbox/templates/dcim/device.html:239 #: netbox/templates/virtualization/cluster.html:10 #: netbox/templates/virtualization/virtualmachine.html:92 #: netbox/templates/virtualization/virtualmachine.html:101 -#: netbox/virtualization/filtersets.py:157 -#: netbox/virtualization/filtersets.py:277 -#: netbox/virtualization/forms/bulk_edit.py:129 -#: netbox/virtualization/forms/bulk_import.py:92 -#: netbox/virtualization/forms/filtersets.py:99 -#: netbox/virtualization/forms/filtersets.py:123 -#: netbox/virtualization/forms/filtersets.py:204 -#: netbox/virtualization/forms/model_forms.py:79 -#: netbox/virtualization/forms/model_forms.py:176 -#: netbox/virtualization/tables/virtualmachines.py:67 +#: netbox/virtualization/filtersets.py:123 +#: netbox/virtualization/filtersets.py:243 +#: netbox/virtualization/forms/bulk_edit.py:111 +#: netbox/virtualization/forms/bulk_import.py:98 +#: netbox/virtualization/forms/filtersets.py:104 +#: netbox/virtualization/forms/filtersets.py:128 +#: netbox/virtualization/forms/filtersets.py:209 +#: netbox/virtualization/forms/model_forms.py:78 +#: netbox/virtualization/forms/model_forms.py:183 +#: netbox/virtualization/tables/virtualmachines.py:37 msgid "Cluster" msgstr "Küme" -#: netbox/dcim/forms/bulk_edit.py:742 netbox/dcim/forms/bulk_edit.py:1296 -#: netbox/dcim/forms/bulk_edit.py:1693 netbox/dcim/forms/bulk_edit.py:1739 -#: netbox/dcim/forms/bulk_import.py:663 netbox/dcim/forms/bulk_import.py:725 -#: netbox/dcim/forms/bulk_import.py:751 netbox/dcim/forms/bulk_import.py:777 -#: netbox/dcim/forms/bulk_import.py:797 netbox/dcim/forms/bulk_import.py:850 -#: netbox/dcim/forms/bulk_import.py:968 netbox/dcim/forms/bulk_import.py:1016 -#: netbox/dcim/forms/bulk_import.py:1033 netbox/dcim/forms/bulk_import.py:1045 -#: netbox/dcim/forms/bulk_import.py:1093 netbox/dcim/forms/bulk_import.py:1444 -#: netbox/dcim/forms/connections.py:24 netbox/dcim/forms/filtersets.py:131 -#: netbox/dcim/forms/filtersets.py:921 netbox/dcim/forms/filtersets.py:1051 -#: netbox/dcim/forms/filtersets.py:1242 netbox/dcim/forms/filtersets.py:1267 -#: netbox/dcim/forms/filtersets.py:1291 netbox/dcim/forms/filtersets.py:1311 -#: netbox/dcim/forms/filtersets.py:1334 netbox/dcim/forms/filtersets.py:1444 -#: netbox/dcim/forms/filtersets.py:1469 netbox/dcim/forms/filtersets.py:1493 -#: netbox/dcim/forms/filtersets.py:1511 netbox/dcim/forms/filtersets.py:1528 -#: netbox/dcim/forms/filtersets.py:1592 netbox/dcim/forms/filtersets.py:1616 -#: netbox/dcim/forms/filtersets.py:1640 netbox/dcim/forms/model_forms.py:633 -#: netbox/dcim/forms/model_forms.py:849 netbox/dcim/forms/model_forms.py:1215 -#: netbox/dcim/forms/model_forms.py:1671 -#: netbox/dcim/forms/object_create.py:249 netbox/dcim/tables/connections.py:22 -#: netbox/dcim/tables/connections.py:41 netbox/dcim/tables/connections.py:60 -#: netbox/dcim/tables/devices.py:285 netbox/dcim/tables/devices.py:371 -#: netbox/dcim/tables/devices.py:412 netbox/dcim/tables/devices.py:454 -#: netbox/dcim/tables/devices.py:505 netbox/dcim/tables/devices.py:597 -#: netbox/dcim/tables/devices.py:697 netbox/dcim/tables/devices.py:754 -#: netbox/dcim/tables/devices.py:801 netbox/dcim/tables/devices.py:861 -#: netbox/dcim/tables/devices.py:930 netbox/dcim/tables/devices.py:1057 -#: netbox/dcim/tables/modules.py:53 netbox/extras/forms/filtersets.py:321 -#: netbox/ipam/forms/bulk_import.py:304 netbox/ipam/forms/bulk_import.py:505 -#: netbox/ipam/forms/filtersets.py:551 netbox/ipam/forms/model_forms.py:323 -#: netbox/ipam/forms/model_forms.py:712 netbox/ipam/forms/model_forms.py:745 -#: netbox/ipam/forms/model_forms.py:771 netbox/ipam/tables/vlans.py:180 -#: netbox/templates/dcim/consoleport.html:20 -#: netbox/templates/dcim/consoleserverport.html:20 -#: netbox/templates/dcim/device.html:15 netbox/templates/dcim/device.html:130 -#: netbox/templates/dcim/device_edit.html:10 -#: netbox/templates/dcim/devicebay.html:20 -#: netbox/templates/dcim/devicebay.html:48 -#: netbox/templates/dcim/frontport.html:20 -#: netbox/templates/dcim/interface.html:30 -#: netbox/templates/dcim/interface.html:161 -#: netbox/templates/dcim/inventoryitem.html:20 -#: netbox/templates/dcim/module.html:57 -#: netbox/templates/dcim/modulebay.html:20 -#: netbox/templates/dcim/poweroutlet.html:20 -#: netbox/templates/dcim/powerport.html:20 -#: netbox/templates/dcim/rearport.html:20 -#: netbox/templates/dcim/virtualchassis.html:65 -#: netbox/templates/dcim/virtualchassis_edit.html:51 -#: netbox/templates/dcim/virtualdevicecontext.html:22 -#: netbox/templates/virtualization/virtualmachine.html:114 -#: netbox/templates/vpn/tunneltermination.html:23 -#: netbox/templates/wireless/inc/wirelesslink_interface.html:6 -#: netbox/virtualization/filtersets.py:167 -#: netbox/virtualization/forms/bulk_edit.py:137 -#: netbox/virtualization/forms/bulk_import.py:99 -#: netbox/virtualization/forms/filtersets.py:128 -#: netbox/virtualization/forms/model_forms.py:185 -#: netbox/virtualization/tables/virtualmachines.py:71 netbox/vpn/choices.py:52 -#: netbox/vpn/forms/bulk_import.py:86 netbox/vpn/forms/bulk_import.py:283 -#: netbox/vpn/forms/filtersets.py:275 netbox/vpn/forms/model_forms.py:90 -#: netbox/vpn/forms/model_forms.py:125 netbox/vpn/forms/model_forms.py:236 -#: netbox/vpn/forms/model_forms.py:453 netbox/wireless/forms/model_forms.py:99 -#: netbox/wireless/forms/model_forms.py:141 -#: netbox/wireless/tables/wirelesslan.py:75 -msgid "Device" -msgstr "Cihaz" - -#: netbox/dcim/forms/bulk_edit.py:745 +#: netbox/dcim/forms/bulk_edit.py:748 #: netbox/templates/extras/dashboard/widget_config.html:7 -#: netbox/virtualization/forms/bulk_edit.py:191 +#: netbox/virtualization/forms/bulk_edit.py:173 msgid "Configuration" msgstr "Yapılandırma" -#: netbox/dcim/forms/bulk_edit.py:746 netbox/netbox/navigation/menu.py:243 +#: netbox/dcim/forms/bulk_edit.py:749 netbox/netbox/navigation/menu.py:251 #: netbox/templates/dcim/device_edit.html:78 msgid "Virtualization" msgstr "Sanallaştırma" -#: netbox/dcim/forms/bulk_edit.py:760 netbox/dcim/forms/bulk_import.py:675 -#: netbox/dcim/forms/model_forms.py:647 netbox/dcim/forms/model_forms.py:897 +#: netbox/dcim/forms/bulk_edit.py:763 netbox/dcim/forms/bulk_import.py:680 +#: netbox/dcim/forms/model_forms.py:658 netbox/dcim/forms/model_forms.py:909 msgid "Module type" msgstr "Modül tipi" -#: netbox/dcim/forms/bulk_edit.py:814 netbox/dcim/forms/bulk_edit.py:999 -#: netbox/dcim/forms/bulk_edit.py:1018 netbox/dcim/forms/bulk_edit.py:1041 -#: netbox/dcim/forms/bulk_edit.py:1083 netbox/dcim/forms/bulk_edit.py:1127 -#: netbox/dcim/forms/bulk_edit.py:1178 netbox/dcim/forms/bulk_edit.py:1205 -#: netbox/dcim/forms/bulk_edit.py:1232 netbox/dcim/forms/bulk_edit.py:1250 -#: netbox/dcim/forms/bulk_edit.py:1268 netbox/dcim/forms/filtersets.py:67 +#: netbox/dcim/forms/bulk_edit.py:817 netbox/dcim/forms/bulk_edit.py:1002 +#: netbox/dcim/forms/bulk_edit.py:1021 netbox/dcim/forms/bulk_edit.py:1044 +#: netbox/dcim/forms/bulk_edit.py:1086 netbox/dcim/forms/bulk_edit.py:1130 +#: netbox/dcim/forms/bulk_edit.py:1181 netbox/dcim/forms/bulk_edit.py:1208 +#: netbox/dcim/forms/bulk_edit.py:1235 netbox/dcim/forms/bulk_edit.py:1253 +#: netbox/dcim/forms/bulk_edit.py:1271 netbox/dcim/forms/filtersets.py:68 #: netbox/dcim/forms/object_create.py:46 netbox/templates/dcim/cable.html:32 #: netbox/templates/dcim/consoleport.html:32 #: netbox/templates/dcim/consoleserverport.html:32 @@ -3917,109 +4306,109 @@ msgstr "Modül tipi" msgid "Label" msgstr "etiket" -#: netbox/dcim/forms/bulk_edit.py:823 netbox/dcim/forms/filtersets.py:1068 +#: netbox/dcim/forms/bulk_edit.py:826 netbox/dcim/forms/filtersets.py:1069 #: netbox/templates/dcim/cable.html:50 msgid "Length" msgstr "Uzunluk" -#: netbox/dcim/forms/bulk_edit.py:828 netbox/dcim/forms/bulk_import.py:1248 -#: netbox/dcim/forms/bulk_import.py:1251 netbox/dcim/forms/filtersets.py:1072 +#: netbox/dcim/forms/bulk_edit.py:831 netbox/dcim/forms/bulk_import.py:1345 +#: netbox/dcim/forms/bulk_import.py:1348 netbox/dcim/forms/filtersets.py:1073 msgid "Length unit" msgstr "Uzunluk birimi" -#: netbox/dcim/forms/bulk_edit.py:852 +#: netbox/dcim/forms/bulk_edit.py:855 #: netbox/templates/dcim/virtualchassis.html:23 msgid "Domain" msgstr "Alan adı" -#: netbox/dcim/forms/bulk_edit.py:920 netbox/dcim/forms/bulk_import.py:1367 -#: netbox/dcim/forms/filtersets.py:1158 netbox/dcim/forms/model_forms.py:750 +#: netbox/dcim/forms/bulk_edit.py:923 netbox/dcim/forms/bulk_import.py:1464 +#: netbox/dcim/forms/filtersets.py:1159 netbox/dcim/forms/model_forms.py:761 msgid "Power panel" msgstr "Güç paneli" -#: netbox/dcim/forms/bulk_edit.py:942 netbox/dcim/forms/bulk_import.py:1403 -#: netbox/dcim/forms/filtersets.py:1180 +#: netbox/dcim/forms/bulk_edit.py:945 netbox/dcim/forms/bulk_import.py:1500 +#: netbox/dcim/forms/filtersets.py:1181 #: netbox/templates/dcim/powerfeed.html:83 msgid "Supply" msgstr "Tedarik" -#: netbox/dcim/forms/bulk_edit.py:948 netbox/dcim/forms/bulk_import.py:1408 -#: netbox/dcim/forms/filtersets.py:1185 +#: netbox/dcim/forms/bulk_edit.py:951 netbox/dcim/forms/bulk_import.py:1505 +#: netbox/dcim/forms/filtersets.py:1186 #: netbox/templates/dcim/powerfeed.html:95 msgid "Phase" msgstr "Faz" -#: netbox/dcim/forms/bulk_edit.py:954 netbox/dcim/forms/filtersets.py:1190 +#: netbox/dcim/forms/bulk_edit.py:957 netbox/dcim/forms/filtersets.py:1191 #: netbox/templates/dcim/powerfeed.html:87 msgid "Voltage" msgstr "Gerilim" -#: netbox/dcim/forms/bulk_edit.py:958 netbox/dcim/forms/filtersets.py:1194 +#: netbox/dcim/forms/bulk_edit.py:961 netbox/dcim/forms/filtersets.py:1195 #: netbox/templates/dcim/powerfeed.html:91 msgid "Amperage" msgstr "Amper" -#: netbox/dcim/forms/bulk_edit.py:962 netbox/dcim/forms/filtersets.py:1198 +#: netbox/dcim/forms/bulk_edit.py:965 netbox/dcim/forms/filtersets.py:1199 msgid "Max utilization" msgstr "Maksimum kullanım" -#: netbox/dcim/forms/bulk_edit.py:1051 +#: netbox/dcim/forms/bulk_edit.py:1054 msgid "Maximum draw" msgstr "Maksimum çekiliş" -#: netbox/dcim/forms/bulk_edit.py:1054 -#: netbox/dcim/models/device_component_templates.py:282 -#: netbox/dcim/models/device_components.py:356 +#: netbox/dcim/forms/bulk_edit.py:1057 +#: netbox/dcim/models/device_component_templates.py:281 +#: netbox/dcim/models/device_components.py:349 msgid "Maximum power draw (watts)" msgstr "Maksimum güç çekimi (watt)" -#: netbox/dcim/forms/bulk_edit.py:1057 +#: netbox/dcim/forms/bulk_edit.py:1060 msgid "Allocated draw" msgstr "Tahsis edilen çekiliş" -#: netbox/dcim/forms/bulk_edit.py:1060 -#: netbox/dcim/models/device_component_templates.py:289 -#: netbox/dcim/models/device_components.py:363 +#: netbox/dcim/forms/bulk_edit.py:1063 +#: netbox/dcim/models/device_component_templates.py:288 +#: netbox/dcim/models/device_components.py:356 msgid "Allocated power draw (watts)" msgstr "Tahsis edilen güç çekimi (watt)" -#: netbox/dcim/forms/bulk_edit.py:1093 netbox/dcim/forms/bulk_import.py:808 -#: netbox/dcim/forms/model_forms.py:960 netbox/dcim/forms/model_forms.py:1285 -#: netbox/dcim/forms/model_forms.py:1574 netbox/dcim/forms/object_import.py:55 +#: netbox/dcim/forms/bulk_edit.py:1096 netbox/dcim/forms/bulk_import.py:813 +#: netbox/dcim/forms/model_forms.py:972 netbox/dcim/forms/model_forms.py:1301 +#: netbox/dcim/forms/model_forms.py:1616 netbox/dcim/forms/object_import.py:55 msgid "Power port" msgstr "Güç bağlantı noktası" -#: netbox/dcim/forms/bulk_edit.py:1098 netbox/dcim/forms/bulk_import.py:815 +#: netbox/dcim/forms/bulk_edit.py:1101 netbox/dcim/forms/bulk_import.py:820 msgid "Feed leg" msgstr "Besleme bacağı" -#: netbox/dcim/forms/bulk_edit.py:1144 netbox/dcim/forms/bulk_edit.py:1462 +#: netbox/dcim/forms/bulk_edit.py:1147 netbox/dcim/forms/bulk_edit.py:1465 msgid "Management only" msgstr "Yalnızca yönetim" -#: netbox/dcim/forms/bulk_edit.py:1154 netbox/dcim/forms/bulk_edit.py:1468 -#: netbox/dcim/forms/bulk_import.py:898 netbox/dcim/forms/filtersets.py:1394 +#: netbox/dcim/forms/bulk_edit.py:1157 netbox/dcim/forms/bulk_edit.py:1471 +#: netbox/dcim/forms/bulk_import.py:906 netbox/dcim/forms/filtersets.py:1399 #: netbox/dcim/forms/object_import.py:90 -#: netbox/dcim/models/device_component_templates.py:437 -#: netbox/dcim/models/device_components.py:670 +#: netbox/dcim/models/device_component_templates.py:445 +#: netbox/dcim/models/device_components.py:721 msgid "PoE mode" msgstr "PoE modu" -#: netbox/dcim/forms/bulk_edit.py:1160 netbox/dcim/forms/bulk_edit.py:1474 -#: netbox/dcim/forms/bulk_import.py:904 netbox/dcim/forms/filtersets.py:1399 +#: netbox/dcim/forms/bulk_edit.py:1163 netbox/dcim/forms/bulk_edit.py:1477 +#: netbox/dcim/forms/bulk_import.py:912 netbox/dcim/forms/filtersets.py:1404 #: netbox/dcim/forms/object_import.py:95 -#: netbox/dcim/models/device_component_templates.py:443 -#: netbox/dcim/models/device_components.py:676 +#: netbox/dcim/models/device_component_templates.py:452 +#: netbox/dcim/models/device_components.py:728 msgid "PoE type" msgstr "PoE tipi" -#: netbox/dcim/forms/bulk_edit.py:1166 netbox/dcim/forms/filtersets.py:1404 +#: netbox/dcim/forms/bulk_edit.py:1169 netbox/dcim/forms/filtersets.py:1409 #: netbox/dcim/forms/object_import.py:100 msgid "Wireless role" msgstr "Kablosuz rolü" -#: netbox/dcim/forms/bulk_edit.py:1303 netbox/dcim/forms/model_forms.py:669 -#: netbox/dcim/forms/model_forms.py:1230 netbox/dcim/tables/devices.py:313 +#: netbox/dcim/forms/bulk_edit.py:1306 netbox/dcim/forms/model_forms.py:680 +#: netbox/dcim/forms/model_forms.py:1246 netbox/dcim/tables/devices.py:323 #: netbox/templates/dcim/consoleport.html:24 #: netbox/templates/dcim/consoleserverport.html:24 #: netbox/templates/dcim/frontport.html:24 @@ -4033,31 +4422,31 @@ msgstr "Kablosuz rolü" msgid "Module" msgstr "Modül" -#: netbox/dcim/forms/bulk_edit.py:1442 netbox/dcim/tables/devices.py:665 -#: netbox/templates/dcim/interface.html:110 +#: netbox/dcim/forms/bulk_edit.py:1445 netbox/dcim/tables/devices.py:699 +#: netbox/templates/dcim/interface.html:116 msgid "LAG" msgstr "GECİKME" -#: netbox/dcim/forms/bulk_edit.py:1447 netbox/dcim/forms/model_forms.py:1312 +#: netbox/dcim/forms/bulk_edit.py:1450 netbox/dcim/forms/model_forms.py:1328 msgid "Virtual device contexts" msgstr "Sanal cihaz bağlamları" -#: netbox/dcim/forms/bulk_edit.py:1453 netbox/dcim/forms/bulk_import.py:736 -#: netbox/dcim/forms/bulk_import.py:762 netbox/dcim/forms/filtersets.py:1252 -#: netbox/dcim/forms/filtersets.py:1277 netbox/dcim/forms/filtersets.py:1358 -#: netbox/dcim/tables/devices.py:610 -#: netbox/templates/circuits/inc/circuit_termination_fields.html:67 +#: netbox/dcim/forms/bulk_edit.py:1456 netbox/dcim/forms/bulk_import.py:741 +#: netbox/dcim/forms/bulk_import.py:767 netbox/dcim/forms/filtersets.py:1253 +#: netbox/dcim/forms/filtersets.py:1278 netbox/dcim/forms/filtersets.py:1363 +#: netbox/dcim/tables/devices.py:632 +#: netbox/templates/circuits/inc/circuit_termination_fields.html:62 #: netbox/templates/dcim/consoleport.html:40 #: netbox/templates/dcim/consoleserverport.html:40 msgid "Speed" msgstr "Hız" -#: netbox/dcim/forms/bulk_edit.py:1482 netbox/dcim/forms/bulk_import.py:907 +#: netbox/dcim/forms/bulk_edit.py:1485 netbox/dcim/forms/bulk_import.py:915 #: netbox/templates/vpn/ikepolicy.html:25 #: netbox/templates/vpn/ipsecprofile.html:21 #: netbox/templates/vpn/ipsecprofile.html:48 -#: netbox/virtualization/forms/bulk_edit.py:233 -#: netbox/virtualization/forms/bulk_import.py:165 +#: netbox/virtualization/forms/bulk_edit.py:215 +#: netbox/virtualization/forms/bulk_import.py:171 #: netbox/vpn/forms/bulk_edit.py:146 netbox/vpn/forms/bulk_edit.py:232 #: netbox/vpn/forms/bulk_import.py:176 netbox/vpn/forms/bulk_import.py:234 #: netbox/vpn/forms/filtersets.py:135 netbox/vpn/forms/filtersets.py:178 @@ -4066,297 +4455,303 @@ msgstr "Hız" msgid "Mode" msgstr "Modu" -#: netbox/dcim/forms/bulk_edit.py:1490 netbox/dcim/forms/model_forms.py:1361 -#: netbox/ipam/forms/bulk_import.py:178 netbox/ipam/forms/filtersets.py:498 -#: netbox/ipam/models/vlans.py:84 netbox/virtualization/forms/bulk_edit.py:240 -#: netbox/virtualization/forms/model_forms.py:321 +#: netbox/dcim/forms/bulk_edit.py:1493 netbox/dcim/forms/model_forms.py:1377 +#: netbox/ipam/forms/bulk_import.py:174 netbox/ipam/forms/filtersets.py:539 +#: netbox/ipam/models/vlans.py:86 netbox/virtualization/forms/bulk_edit.py:222 +#: netbox/virtualization/forms/model_forms.py:335 msgid "VLAN group" msgstr "VLAN grubu" -#: netbox/dcim/forms/bulk_edit.py:1499 netbox/dcim/forms/model_forms.py:1367 -#: netbox/dcim/tables/devices.py:579 -#: netbox/virtualization/forms/bulk_edit.py:248 -#: netbox/virtualization/forms/model_forms.py:326 +#: netbox/dcim/forms/bulk_edit.py:1502 netbox/dcim/forms/model_forms.py:1383 +#: netbox/dcim/tables/devices.py:593 +#: netbox/virtualization/forms/bulk_edit.py:230 +#: netbox/virtualization/forms/model_forms.py:340 msgid "Untagged VLAN" msgstr "Etiketsiz VLAN" -#: netbox/dcim/forms/bulk_edit.py:1508 netbox/dcim/forms/model_forms.py:1376 -#: netbox/dcim/tables/devices.py:585 -#: netbox/virtualization/forms/bulk_edit.py:256 -#: netbox/virtualization/forms/model_forms.py:335 +#: netbox/dcim/forms/bulk_edit.py:1511 netbox/dcim/forms/model_forms.py:1392 +#: netbox/dcim/tables/devices.py:599 +#: netbox/virtualization/forms/bulk_edit.py:238 +#: netbox/virtualization/forms/model_forms.py:349 msgid "Tagged VLANs" msgstr "Etiketli VLAN'lar" -#: netbox/dcim/forms/bulk_edit.py:1511 +#: netbox/dcim/forms/bulk_edit.py:1514 msgid "Add tagged VLANs" msgstr "Etiketli VLAN'lar ekle" -#: netbox/dcim/forms/bulk_edit.py:1520 +#: netbox/dcim/forms/bulk_edit.py:1523 msgid "Remove tagged VLANs" msgstr "Etiketli VLAN'ları kaldır" -#: netbox/dcim/forms/bulk_edit.py:1536 netbox/dcim/forms/model_forms.py:1348 +#: netbox/dcim/forms/bulk_edit.py:1534 netbox/dcim/forms/model_forms.py:1401 +#: netbox/virtualization/forms/model_forms.py:358 +msgid "Q-in-Q Service VLAN" +msgstr "Q-in-Q Hizmeti VLAN" + +#: netbox/dcim/forms/bulk_edit.py:1549 netbox/dcim/forms/model_forms.py:1364 msgid "Wireless LAN group" msgstr "Kablosuz LAN grubu" -#: netbox/dcim/forms/bulk_edit.py:1541 netbox/dcim/forms/model_forms.py:1353 -#: netbox/dcim/tables/devices.py:619 netbox/netbox/navigation/menu.py:146 -#: netbox/templates/dcim/interface.html:280 +#: netbox/dcim/forms/bulk_edit.py:1554 netbox/dcim/forms/model_forms.py:1369 +#: netbox/dcim/tables/devices.py:641 netbox/netbox/navigation/menu.py:152 +#: netbox/templates/dcim/interface.html:337 #: netbox/wireless/tables/wirelesslan.py:24 msgid "Wireless LANs" msgstr "Kablosuz LAN'lar" -#: netbox/dcim/forms/bulk_edit.py:1550 netbox/dcim/forms/filtersets.py:1328 -#: netbox/dcim/forms/model_forms.py:1397 netbox/ipam/forms/bulk_edit.py:286 -#: netbox/ipam/forms/bulk_edit.py:378 netbox/ipam/forms/filtersets.py:169 -#: netbox/templates/dcim/interface.html:122 -#: netbox/templates/ipam/prefix.html:95 -#: netbox/virtualization/forms/model_forms.py:349 +#: netbox/dcim/forms/bulk_edit.py:1563 netbox/dcim/forms/filtersets.py:1333 +#: netbox/dcim/forms/model_forms.py:1435 netbox/ipam/forms/bulk_edit.py:269 +#: netbox/ipam/forms/bulk_edit.py:362 netbox/ipam/forms/filtersets.py:171 +#: netbox/netbox/navigation/menu.py:108 +#: netbox/templates/dcim/interface.html:128 +#: netbox/templates/ipam/prefix.html:91 +#: netbox/templates/virtualization/vminterface.html:70 +#: netbox/virtualization/forms/model_forms.py:378 msgid "Addressing" msgstr "Adresleme" -#: netbox/dcim/forms/bulk_edit.py:1551 netbox/dcim/forms/filtersets.py:720 -#: netbox/dcim/forms/model_forms.py:1398 -#: netbox/virtualization/forms/model_forms.py:350 +#: netbox/dcim/forms/bulk_edit.py:1564 netbox/dcim/forms/filtersets.py:721 +#: netbox/dcim/forms/model_forms.py:1436 +#: netbox/virtualization/forms/model_forms.py:379 msgid "Operation" msgstr "Operasyon" -#: netbox/dcim/forms/bulk_edit.py:1552 netbox/dcim/forms/filtersets.py:1329 -#: netbox/dcim/forms/model_forms.py:994 netbox/dcim/forms/model_forms.py:1400 +#: netbox/dcim/forms/bulk_edit.py:1565 netbox/dcim/forms/filtersets.py:1334 +#: netbox/dcim/forms/model_forms.py:1006 netbox/dcim/forms/model_forms.py:1438 msgid "PoE" msgstr "PoE" -#: netbox/dcim/forms/bulk_edit.py:1553 netbox/dcim/forms/model_forms.py:1399 -#: netbox/templates/dcim/interface.html:99 -#: netbox/virtualization/forms/bulk_edit.py:267 -#: netbox/virtualization/forms/model_forms.py:351 +#: netbox/dcim/forms/bulk_edit.py:1566 netbox/dcim/forms/model_forms.py:1437 +#: netbox/templates/dcim/interface.html:105 +#: netbox/virtualization/forms/bulk_edit.py:254 +#: netbox/virtualization/forms/model_forms.py:380 msgid "Related Interfaces" msgstr "İlgili Arayüzler" -#: netbox/dcim/forms/bulk_edit.py:1554 netbox/dcim/forms/model_forms.py:1401 -#: netbox/virtualization/forms/bulk_edit.py:268 -#: netbox/virtualization/forms/model_forms.py:352 +#: netbox/dcim/forms/bulk_edit.py:1568 netbox/dcim/forms/model_forms.py:1441 +#: netbox/virtualization/forms/bulk_edit.py:257 +#: netbox/virtualization/forms/model_forms.py:383 msgid "802.1Q Switching" msgstr "802.1Q Anahtarlama" -#: netbox/dcim/forms/bulk_edit.py:1558 +#: netbox/dcim/forms/bulk_edit.py:1573 msgid "Add/Remove" msgstr "Ekle/Kaldır" -#: netbox/dcim/forms/bulk_edit.py:1617 netbox/dcim/forms/bulk_edit.py:1619 +#: netbox/dcim/forms/bulk_edit.py:1632 netbox/dcim/forms/bulk_edit.py:1634 msgid "Interface mode must be specified to assign VLANs" msgstr "VLAN'ları atamak için arayüz modu belirtilmelidir" -#: netbox/dcim/forms/bulk_edit.py:1624 netbox/dcim/forms/common.py:50 +#: netbox/dcim/forms/bulk_edit.py:1639 msgid "An access interface cannot have tagged VLANs assigned." msgstr "Bir erişim arabirimi VLAN'ları etiketlemiş olamaz." -#: netbox/dcim/forms/bulk_import.py:64 +#: netbox/dcim/forms/bulk_import.py:66 msgid "Name of parent region" msgstr "Ana bölgenin adı" -#: netbox/dcim/forms/bulk_import.py:78 +#: netbox/dcim/forms/bulk_import.py:80 msgid "Name of parent site group" msgstr "Üst site grubunun adı" -#: netbox/dcim/forms/bulk_import.py:97 +#: netbox/dcim/forms/bulk_import.py:99 msgid "Assigned region" msgstr "Atanan bölge" -#: netbox/dcim/forms/bulk_import.py:104 netbox/tenancy/forms/bulk_import.py:44 +#: netbox/dcim/forms/bulk_import.py:106 netbox/tenancy/forms/bulk_import.py:44 #: netbox/tenancy/forms/bulk_import.py:85 -#: netbox/wireless/forms/bulk_import.py:40 +#: netbox/wireless/forms/bulk_import.py:42 msgid "Assigned group" msgstr "Atanan grup" -#: netbox/dcim/forms/bulk_import.py:123 +#: netbox/dcim/forms/bulk_import.py:125 msgid "available options" msgstr "mevcut seçenekler" -#: netbox/dcim/forms/bulk_import.py:134 netbox/dcim/forms/bulk_import.py:565 -#: netbox/dcim/forms/bulk_import.py:1364 netbox/ipam/forms/bulk_import.py:175 -#: netbox/ipam/forms/bulk_import.py:457 -#: netbox/virtualization/forms/bulk_import.py:63 -#: netbox/virtualization/forms/bulk_import.py:89 +#: netbox/dcim/forms/bulk_import.py:136 netbox/dcim/forms/bulk_import.py:570 +#: netbox/dcim/forms/bulk_import.py:1461 netbox/ipam/forms/bulk_import.py:456 +#: netbox/virtualization/forms/bulk_import.py:64 +#: netbox/virtualization/forms/bulk_import.py:95 msgid "Assigned site" msgstr "Atanan site" -#: netbox/dcim/forms/bulk_import.py:141 +#: netbox/dcim/forms/bulk_import.py:143 msgid "Parent location" msgstr "Ana konum" -#: netbox/dcim/forms/bulk_import.py:143 +#: netbox/dcim/forms/bulk_import.py:145 msgid "Location not found." msgstr "Konum bulunamadı." -#: netbox/dcim/forms/bulk_import.py:185 +#: netbox/dcim/forms/bulk_import.py:187 msgid "The manufacturer of this rack type" msgstr "Bu raf tipinin üreticisi" -#: netbox/dcim/forms/bulk_import.py:196 +#: netbox/dcim/forms/bulk_import.py:198 msgid "The lowest-numbered position in the rack" msgstr "Raftaki en düşük numaralı konum" -#: netbox/dcim/forms/bulk_import.py:201 netbox/dcim/forms/bulk_import.py:276 +#: netbox/dcim/forms/bulk_import.py:203 netbox/dcim/forms/bulk_import.py:278 msgid "Rail-to-rail width (in inches)" msgstr "Ray-ray genişliği (inç cinsinden)" -#: netbox/dcim/forms/bulk_import.py:207 netbox/dcim/forms/bulk_import.py:286 +#: netbox/dcim/forms/bulk_import.py:209 netbox/dcim/forms/bulk_import.py:288 msgid "Unit for outer dimensions" msgstr "Dış boyutlar için birim" -#: netbox/dcim/forms/bulk_import.py:213 netbox/dcim/forms/bulk_import.py:298 +#: netbox/dcim/forms/bulk_import.py:215 netbox/dcim/forms/bulk_import.py:300 msgid "Unit for rack weights" msgstr "Raf ağırlıkları için ünite" -#: netbox/dcim/forms/bulk_import.py:245 +#: netbox/dcim/forms/bulk_import.py:247 msgid "Name of assigned tenant" msgstr "Atanan kiracının adı" -#: netbox/dcim/forms/bulk_import.py:257 +#: netbox/dcim/forms/bulk_import.py:259 msgid "Name of assigned role" msgstr "Atanan rolün adı" -#: netbox/dcim/forms/bulk_import.py:264 +#: netbox/dcim/forms/bulk_import.py:266 msgid "Rack type model" msgstr "Raf tipi modeli" -#: netbox/dcim/forms/bulk_import.py:292 netbox/dcim/forms/bulk_import.py:435 -#: netbox/dcim/forms/bulk_import.py:605 +#: netbox/dcim/forms/bulk_import.py:294 netbox/dcim/forms/bulk_import.py:437 +#: netbox/dcim/forms/bulk_import.py:610 msgid "Airflow direction" msgstr "Hava akışı yönü" -#: netbox/dcim/forms/bulk_import.py:324 +#: netbox/dcim/forms/bulk_import.py:326 msgid "Width must be set if not specifying a rack type." msgstr "Bir raf tipi belirtilmiyorsa genişlik ayarlanmalıdır." -#: netbox/dcim/forms/bulk_import.py:326 +#: netbox/dcim/forms/bulk_import.py:328 msgid "U height must be set if not specifying a rack type." msgstr "Bir raf tipi belirtilmiyorsa U yüksekliği ayarlanmalıdır." -#: netbox/dcim/forms/bulk_import.py:334 +#: netbox/dcim/forms/bulk_import.py:336 msgid "Parent site" msgstr "Ana site" -#: netbox/dcim/forms/bulk_import.py:341 netbox/dcim/forms/bulk_import.py:1377 +#: netbox/dcim/forms/bulk_import.py:343 netbox/dcim/forms/bulk_import.py:1474 msgid "Rack's location (if any)" msgstr "Rafın konumu (varsa)" -#: netbox/dcim/forms/bulk_import.py:350 netbox/dcim/forms/model_forms.py:311 -#: netbox/dcim/tables/racks.py:222 +#: netbox/dcim/forms/bulk_import.py:352 netbox/dcim/forms/model_forms.py:319 +#: netbox/dcim/tables/racks.py:221 #: netbox/templates/dcim/rackreservation.html:12 #: netbox/templates/dcim/rackreservation.html:45 msgid "Units" msgstr "Birimler" -#: netbox/dcim/forms/bulk_import.py:353 +#: netbox/dcim/forms/bulk_import.py:355 msgid "Comma-separated list of individual unit numbers" msgstr "Bireysel birim numaralarının virgülle ayrılmış listesi" -#: netbox/dcim/forms/bulk_import.py:396 +#: netbox/dcim/forms/bulk_import.py:398 msgid "The manufacturer which produces this device type" msgstr "Bu cihaz tipini üreten üretici" -#: netbox/dcim/forms/bulk_import.py:403 +#: netbox/dcim/forms/bulk_import.py:405 msgid "The default platform for devices of this type (optional)" msgstr "Bu tür cihazlar için varsayılan platform (isteğe bağlı)" -#: netbox/dcim/forms/bulk_import.py:408 +#: netbox/dcim/forms/bulk_import.py:410 msgid "Device weight" msgstr "Cihaz ağırlığı" -#: netbox/dcim/forms/bulk_import.py:414 +#: netbox/dcim/forms/bulk_import.py:416 msgid "Unit for device weight" msgstr "Cihaz ağırlığı için birim" -#: netbox/dcim/forms/bulk_import.py:440 +#: netbox/dcim/forms/bulk_import.py:442 msgid "Module weight" msgstr "Modül ağırlığı" -#: netbox/dcim/forms/bulk_import.py:446 +#: netbox/dcim/forms/bulk_import.py:448 msgid "Unit for module weight" msgstr "Modül ağırlığı için birim" -#: netbox/dcim/forms/bulk_import.py:476 +#: netbox/dcim/forms/bulk_import.py:481 msgid "Limit platform assignments to this manufacturer" msgstr "Platform atamalarını bu üreticiye sınırlayın" -#: netbox/dcim/forms/bulk_import.py:498 netbox/dcim/forms/bulk_import.py:1447 +#: netbox/dcim/forms/bulk_import.py:503 netbox/dcim/forms/bulk_import.py:1544 #: netbox/tenancy/forms/bulk_import.py:106 msgid "Assigned role" msgstr "Atanan rol" -#: netbox/dcim/forms/bulk_import.py:511 +#: netbox/dcim/forms/bulk_import.py:516 msgid "Device type manufacturer" msgstr "Cihaz tipi üreticisi" -#: netbox/dcim/forms/bulk_import.py:517 +#: netbox/dcim/forms/bulk_import.py:522 msgid "Device type model" msgstr "Cihaz tipi modeli" -#: netbox/dcim/forms/bulk_import.py:524 -#: netbox/virtualization/forms/bulk_import.py:126 +#: netbox/dcim/forms/bulk_import.py:529 +#: netbox/virtualization/forms/bulk_import.py:132 msgid "Assigned platform" msgstr "Atanan platform" -#: netbox/dcim/forms/bulk_import.py:532 netbox/dcim/forms/bulk_import.py:536 -#: netbox/dcim/forms/model_forms.py:536 +#: netbox/dcim/forms/bulk_import.py:537 netbox/dcim/forms/bulk_import.py:541 +#: netbox/dcim/forms/model_forms.py:547 msgid "Virtual chassis" msgstr "Sanal şasi" -#: netbox/dcim/forms/bulk_import.py:543 +#: netbox/dcim/forms/bulk_import.py:548 msgid "Virtualization cluster" msgstr "Sanallaştırma kümesi" -#: netbox/dcim/forms/bulk_import.py:572 +#: netbox/dcim/forms/bulk_import.py:577 msgid "Assigned location (if any)" msgstr "Atanan konum (varsa)" -#: netbox/dcim/forms/bulk_import.py:579 +#: netbox/dcim/forms/bulk_import.py:584 msgid "Assigned rack (if any)" msgstr "Atanmış raf (varsa)" -#: netbox/dcim/forms/bulk_import.py:582 +#: netbox/dcim/forms/bulk_import.py:587 msgid "Face" msgstr "Yüz" -#: netbox/dcim/forms/bulk_import.py:585 +#: netbox/dcim/forms/bulk_import.py:590 msgid "Mounted rack face" msgstr "Monte edilmiş raf yüzü" -#: netbox/dcim/forms/bulk_import.py:592 +#: netbox/dcim/forms/bulk_import.py:597 msgid "Parent device (for child devices)" msgstr "Ana cihaz (alt cihazlar için)" -#: netbox/dcim/forms/bulk_import.py:595 +#: netbox/dcim/forms/bulk_import.py:600 msgid "Device bay" msgstr "Cihaz yuvası" -#: netbox/dcim/forms/bulk_import.py:599 +#: netbox/dcim/forms/bulk_import.py:604 msgid "Device bay in which this device is installed (for child devices)" msgstr "Bu cihazın kurulu olduğu cihaz yuvası (alt cihazlar için)" -#: netbox/dcim/forms/bulk_import.py:666 +#: netbox/dcim/forms/bulk_import.py:671 msgid "The device in which this module is installed" msgstr "Bu modülün kurulu olduğu cihaz" -#: netbox/dcim/forms/bulk_import.py:669 netbox/dcim/forms/model_forms.py:640 +#: netbox/dcim/forms/bulk_import.py:674 netbox/dcim/forms/model_forms.py:651 msgid "Module bay" msgstr "Modül yuvası" -#: netbox/dcim/forms/bulk_import.py:672 +#: netbox/dcim/forms/bulk_import.py:677 msgid "The module bay in which this module is installed" msgstr "Bu modülün kurulu olduğu modül yuvası" -#: netbox/dcim/forms/bulk_import.py:678 +#: netbox/dcim/forms/bulk_import.py:683 msgid "The type of module" msgstr "Modül türü" -#: netbox/dcim/forms/bulk_import.py:686 netbox/dcim/forms/model_forms.py:656 +#: netbox/dcim/forms/bulk_import.py:691 netbox/dcim/forms/model_forms.py:667 msgid "Replicate components" msgstr "Bileşenleri çoğaltın" -#: netbox/dcim/forms/bulk_import.py:688 +#: netbox/dcim/forms/bulk_import.py:693 msgid "" "Automatically populate components associated with this module type (enabled " "by default)" @@ -4364,271 +4759,307 @@ msgstr "" "Bu modül türüyle ilişkili bileşenleri otomatik olarak doldurun (varsayılan " "olarak etkindir)" -#: netbox/dcim/forms/bulk_import.py:691 netbox/dcim/forms/model_forms.py:662 +#: netbox/dcim/forms/bulk_import.py:696 netbox/dcim/forms/model_forms.py:673 msgid "Adopt components" msgstr "Bileşenleri benimseyin" -#: netbox/dcim/forms/bulk_import.py:693 netbox/dcim/forms/model_forms.py:665 +#: netbox/dcim/forms/bulk_import.py:698 netbox/dcim/forms/model_forms.py:676 msgid "Adopt already existing components" msgstr "Mevcut bileşenleri benimseyin" -#: netbox/dcim/forms/bulk_import.py:733 netbox/dcim/forms/bulk_import.py:759 -#: netbox/dcim/forms/bulk_import.py:785 +#: netbox/dcim/forms/bulk_import.py:738 netbox/dcim/forms/bulk_import.py:764 +#: netbox/dcim/forms/bulk_import.py:790 msgid "Port type" msgstr "Bağlantı noktası tipi" -#: netbox/dcim/forms/bulk_import.py:741 netbox/dcim/forms/bulk_import.py:767 +#: netbox/dcim/forms/bulk_import.py:746 netbox/dcim/forms/bulk_import.py:772 msgid "Port speed in bps" msgstr "Bps cinsinden bağlantı noktası hızı" -#: netbox/dcim/forms/bulk_import.py:805 +#: netbox/dcim/forms/bulk_import.py:810 msgid "Outlet type" msgstr "Çıkış tipi" -#: netbox/dcim/forms/bulk_import.py:812 +#: netbox/dcim/forms/bulk_import.py:817 msgid "Local power port which feeds this outlet" msgstr "Bu prizi besleyen yerel güç portu" -#: netbox/dcim/forms/bulk_import.py:818 +#: netbox/dcim/forms/bulk_import.py:823 msgid "Electrical phase (for three-phase circuits)" msgstr "Elektrik fazı (üç fazlı devreler için)" -#: netbox/dcim/forms/bulk_import.py:859 netbox/dcim/forms/model_forms.py:1323 -#: netbox/virtualization/forms/bulk_import.py:155 -#: netbox/virtualization/forms/model_forms.py:305 +#: netbox/dcim/forms/bulk_import.py:867 netbox/dcim/forms/model_forms.py:1339 +#: netbox/virtualization/forms/bulk_import.py:161 +#: netbox/virtualization/forms/model_forms.py:319 msgid "Parent interface" msgstr "Ebeveyn arayüzü" -#: netbox/dcim/forms/bulk_import.py:866 netbox/dcim/forms/model_forms.py:1331 -#: netbox/virtualization/forms/bulk_import.py:162 -#: netbox/virtualization/forms/model_forms.py:313 +#: netbox/dcim/forms/bulk_import.py:874 netbox/dcim/forms/model_forms.py:1347 +#: netbox/virtualization/forms/bulk_import.py:168 +#: netbox/virtualization/forms/model_forms.py:327 msgid "Bridged interface" msgstr "Köprülü arayüz" -#: netbox/dcim/forms/bulk_import.py:869 +#: netbox/dcim/forms/bulk_import.py:877 msgid "Lag" msgstr "Gecikme" -#: netbox/dcim/forms/bulk_import.py:873 +#: netbox/dcim/forms/bulk_import.py:881 msgid "Parent LAG interface" msgstr "Ebeveyn LAG arayüzü" -#: netbox/dcim/forms/bulk_import.py:876 +#: netbox/dcim/forms/bulk_import.py:884 msgid "Vdcs" msgstr "Vdcs" -#: netbox/dcim/forms/bulk_import.py:881 +#: netbox/dcim/forms/bulk_import.py:889 msgid "VDC names separated by commas, encased with double quotes. Example:" msgstr "" "VDC isimleri virgülle ayrılmış, çift tırnak işareti ile çevrelenmiştir. " "Örnek:" -#: netbox/dcim/forms/bulk_import.py:887 +#: netbox/dcim/forms/bulk_import.py:895 msgid "Physical medium" msgstr "Fiziksel ortam" -#: netbox/dcim/forms/bulk_import.py:890 netbox/dcim/forms/filtersets.py:1365 +#: netbox/dcim/forms/bulk_import.py:898 netbox/dcim/forms/filtersets.py:1370 msgid "Duplex" msgstr "Dubleks" -#: netbox/dcim/forms/bulk_import.py:895 +#: netbox/dcim/forms/bulk_import.py:903 msgid "Poe mode" msgstr "Poe modu" -#: netbox/dcim/forms/bulk_import.py:901 +#: netbox/dcim/forms/bulk_import.py:909 msgid "Poe type" msgstr "Poe tipi" -#: netbox/dcim/forms/bulk_import.py:910 -#: netbox/virtualization/forms/bulk_import.py:168 +#: netbox/dcim/forms/bulk_import.py:918 +#: netbox/virtualization/forms/bulk_import.py:174 msgid "IEEE 802.1Q operational mode (for L2 interfaces)" msgstr "IEEE 802.1Q çalışma modu (L2 arayüzleri için)" -#: netbox/dcim/forms/bulk_import.py:917 netbox/ipam/forms/bulk_import.py:161 -#: netbox/ipam/forms/bulk_import.py:247 netbox/ipam/forms/bulk_import.py:283 -#: netbox/ipam/forms/filtersets.py:201 netbox/ipam/forms/filtersets.py:277 -#: netbox/ipam/forms/filtersets.py:336 -#: netbox/virtualization/forms/bulk_import.py:175 +#: netbox/dcim/forms/bulk_import.py:925 netbox/ipam/forms/bulk_import.py:164 +#: netbox/ipam/forms/bulk_import.py:246 netbox/ipam/forms/bulk_import.py:282 +#: netbox/ipam/forms/filtersets.py:203 netbox/ipam/forms/filtersets.py:280 +#: netbox/ipam/forms/filtersets.py:339 +#: netbox/virtualization/forms/bulk_import.py:181 msgid "Assigned VRF" msgstr "Atanmış VRF" -#: netbox/dcim/forms/bulk_import.py:920 +#: netbox/dcim/forms/bulk_import.py:928 msgid "Rf role" msgstr "Rf rolü" -#: netbox/dcim/forms/bulk_import.py:923 +#: netbox/dcim/forms/bulk_import.py:931 msgid "Wireless role (AP/station)" msgstr "Kablosuz rolü (AP/istasyon)" -#: netbox/dcim/forms/bulk_import.py:959 +#: netbox/dcim/forms/bulk_import.py:967 #, python-brace-format msgid "VDC {vdc} is not assigned to device {device}" msgstr "VDC {vdc} cihaza atanmadı {device}" -#: netbox/dcim/forms/bulk_import.py:973 netbox/dcim/forms/model_forms.py:1007 -#: netbox/dcim/forms/model_forms.py:1582 +#: netbox/dcim/forms/bulk_import.py:981 netbox/dcim/forms/model_forms.py:1020 +#: netbox/dcim/forms/model_forms.py:1624 #: netbox/dcim/forms/object_import.py:117 msgid "Rear port" msgstr "Arka bağlantı noktası" -#: netbox/dcim/forms/bulk_import.py:976 +#: netbox/dcim/forms/bulk_import.py:984 msgid "Corresponding rear port" msgstr "İlgili arka bağlantı noktası" -#: netbox/dcim/forms/bulk_import.py:981 netbox/dcim/forms/bulk_import.py:1022 -#: netbox/dcim/forms/bulk_import.py:1238 +#: netbox/dcim/forms/bulk_import.py:989 netbox/dcim/forms/bulk_import.py:1030 +#: netbox/dcim/forms/bulk_import.py:1335 msgid "Physical medium classification" msgstr "Fiziksel ortam sınıflandırması" -#: netbox/dcim/forms/bulk_import.py:1050 netbox/dcim/tables/devices.py:822 +#: netbox/dcim/forms/bulk_import.py:1058 netbox/dcim/tables/devices.py:854 msgid "Installed device" msgstr "Yüklü cihaz" -#: netbox/dcim/forms/bulk_import.py:1054 +#: netbox/dcim/forms/bulk_import.py:1062 msgid "Child device installed within this bay" msgstr "Bu bölmeye takılan çocuk cihazı" -#: netbox/dcim/forms/bulk_import.py:1056 +#: netbox/dcim/forms/bulk_import.py:1064 msgid "Child device not found." msgstr "Çocuk cihazı bulunamadı." -#: netbox/dcim/forms/bulk_import.py:1114 +#: netbox/dcim/forms/bulk_import.py:1122 msgid "Parent inventory item" msgstr "Ana envanter kalemi" -#: netbox/dcim/forms/bulk_import.py:1117 +#: netbox/dcim/forms/bulk_import.py:1125 msgid "Component type" msgstr "Bileşen tipi" -#: netbox/dcim/forms/bulk_import.py:1121 +#: netbox/dcim/forms/bulk_import.py:1129 msgid "Component Type" msgstr "Bileşen Türü" -#: netbox/dcim/forms/bulk_import.py:1124 +#: netbox/dcim/forms/bulk_import.py:1132 msgid "Compnent name" msgstr "Bileşen adı" -#: netbox/dcim/forms/bulk_import.py:1126 +#: netbox/dcim/forms/bulk_import.py:1134 msgid "Component Name" msgstr "Bileşen Adı" -#: netbox/dcim/forms/bulk_import.py:1168 +#: netbox/dcim/forms/bulk_import.py:1181 #, python-brace-format msgid "Component not found: {device} - {component_name}" msgstr "Bileşen bulunamadı: {device} - {component_name}" -#: netbox/dcim/forms/bulk_import.py:1193 +#: netbox/dcim/forms/bulk_import.py:1209 netbox/ipam/forms/bulk_import.py:307 +msgid "Parent device of assigned interface (if any)" +msgstr "Atanan arayüzün ana cihazı (varsa)" + +#: netbox/dcim/forms/bulk_import.py:1212 netbox/ipam/forms/bulk_import.py:310 +#: netbox/ipam/forms/bulk_import.py:547 netbox/ipam/forms/model_forms.py:768 +#: netbox/virtualization/filtersets.py:254 +#: netbox/virtualization/filtersets.py:305 +#: netbox/virtualization/forms/bulk_edit.py:182 +#: netbox/virtualization/forms/bulk_edit.py:316 +#: netbox/virtualization/forms/bulk_import.py:152 +#: netbox/virtualization/forms/bulk_import.py:213 +#: netbox/virtualization/forms/filtersets.py:217 +#: netbox/virtualization/forms/filtersets.py:253 +#: netbox/virtualization/forms/model_forms.py:295 +#: netbox/vpn/forms/bulk_import.py:93 netbox/vpn/forms/bulk_import.py:290 +msgid "Virtual machine" +msgstr "Sanal makine" + +#: netbox/dcim/forms/bulk_import.py:1216 netbox/ipam/forms/bulk_import.py:314 +msgid "Parent VM of assigned interface (if any)" +msgstr "Atanan arabirimin üst VM'si (varsa)" + +#: netbox/dcim/forms/bulk_import.py:1223 netbox/ipam/filtersets.py:1021 +#: netbox/ipam/forms/bulk_import.py:321 +msgid "Assigned interface" +msgstr "Atanmış arayüz" + +#: netbox/dcim/forms/bulk_import.py:1226 netbox/ipam/forms/bulk_import.py:324 +msgid "Is primary" +msgstr "Birincildir" + +#: netbox/dcim/forms/bulk_import.py:1227 +msgid "Make this the primary MAC address for the assigned interface" +msgstr "Bunu atanan arayüz için birincil MAC adresi yapın" + +#: netbox/dcim/forms/bulk_import.py:1264 +msgid "Must specify the parent device or VM when assigning an interface" +msgstr "Arayüz atarken üst aygıtı veya sanal makineyi belirtmeniz gerekir" + +#: netbox/dcim/forms/bulk_import.py:1290 msgid "Side A device" msgstr "A Tarafı Cihazı" -#: netbox/dcim/forms/bulk_import.py:1196 netbox/dcim/forms/bulk_import.py:1214 +#: netbox/dcim/forms/bulk_import.py:1293 netbox/dcim/forms/bulk_import.py:1311 msgid "Device name" msgstr "Cihaz adı" -#: netbox/dcim/forms/bulk_import.py:1199 +#: netbox/dcim/forms/bulk_import.py:1296 msgid "Side A type" msgstr "Taraf A tipi" -#: netbox/dcim/forms/bulk_import.py:1202 netbox/dcim/forms/bulk_import.py:1220 -msgid "Termination type" -msgstr "Sonlandırma türü" - -#: netbox/dcim/forms/bulk_import.py:1205 +#: netbox/dcim/forms/bulk_import.py:1302 msgid "Side A name" msgstr "A Tarafı adı" -#: netbox/dcim/forms/bulk_import.py:1206 netbox/dcim/forms/bulk_import.py:1224 +#: netbox/dcim/forms/bulk_import.py:1303 netbox/dcim/forms/bulk_import.py:1321 msgid "Termination name" msgstr "Fesih adı" -#: netbox/dcim/forms/bulk_import.py:1211 +#: netbox/dcim/forms/bulk_import.py:1308 msgid "Side B device" msgstr "B tarafı cihazı" -#: netbox/dcim/forms/bulk_import.py:1217 +#: netbox/dcim/forms/bulk_import.py:1314 msgid "Side B type" msgstr "Taraf B tipi" -#: netbox/dcim/forms/bulk_import.py:1223 +#: netbox/dcim/forms/bulk_import.py:1320 msgid "Side B name" msgstr "B tarafı adı" -#: netbox/dcim/forms/bulk_import.py:1232 -#: netbox/wireless/forms/bulk_import.py:86 +#: netbox/dcim/forms/bulk_import.py:1329 +#: netbox/wireless/forms/bulk_import.py:91 msgid "Connection status" msgstr "Bağlantı durumu" -#: netbox/dcim/forms/bulk_import.py:1284 +#: netbox/dcim/forms/bulk_import.py:1381 #, python-brace-format msgid "Side {side_upper}: {device} {termination_object} is already connected" msgstr "Yan {side_upper}: {device} {termination_object} zaten bağlı" -#: netbox/dcim/forms/bulk_import.py:1290 +#: netbox/dcim/forms/bulk_import.py:1387 #, python-brace-format msgid "{side_upper} side termination not found: {device} {name}" msgstr "{side_upper} yan sonlandırma bulunamadı: {device} {name}" -#: netbox/dcim/forms/bulk_import.py:1315 netbox/dcim/forms/model_forms.py:785 -#: netbox/dcim/tables/devices.py:1027 netbox/templates/dcim/device.html:132 +#: netbox/dcim/forms/bulk_import.py:1412 netbox/dcim/forms/model_forms.py:797 +#: netbox/dcim/tables/devices.py:1059 netbox/templates/dcim/device.html:132 #: netbox/templates/dcim/virtualchassis.html:27 #: netbox/templates/dcim/virtualchassis.html:67 msgid "Master" msgstr "Usta" -#: netbox/dcim/forms/bulk_import.py:1319 +#: netbox/dcim/forms/bulk_import.py:1416 msgid "Master device" msgstr "Ana cihaz" -#: netbox/dcim/forms/bulk_import.py:1336 +#: netbox/dcim/forms/bulk_import.py:1433 msgid "Name of parent site" msgstr "Ana sitenin adı" -#: netbox/dcim/forms/bulk_import.py:1370 +#: netbox/dcim/forms/bulk_import.py:1467 msgid "Upstream power panel" msgstr "Yukarı akış güç paneli" -#: netbox/dcim/forms/bulk_import.py:1400 +#: netbox/dcim/forms/bulk_import.py:1497 msgid "Primary or redundant" msgstr "Birincil veya gereksiz" -#: netbox/dcim/forms/bulk_import.py:1405 +#: netbox/dcim/forms/bulk_import.py:1502 msgid "Supply type (AC/DC)" msgstr "Besleme tipi (AC/DC)" -#: netbox/dcim/forms/bulk_import.py:1410 +#: netbox/dcim/forms/bulk_import.py:1507 msgid "Single or three-phase" msgstr "Tek veya üç fazlı" -#: netbox/dcim/forms/bulk_import.py:1461 netbox/dcim/forms/model_forms.py:1677 +#: netbox/dcim/forms/bulk_import.py:1558 netbox/dcim/forms/model_forms.py:1722 #: netbox/templates/dcim/device.html:190 #: netbox/templates/dcim/virtualdevicecontext.html:30 #: netbox/templates/virtualization/virtualmachine.html:52 msgid "Primary IPv4" msgstr "Birincil IPv4" -#: netbox/dcim/forms/bulk_import.py:1465 +#: netbox/dcim/forms/bulk_import.py:1562 msgid "IPv4 address with mask, e.g. 1.2.3.4/24" msgstr "Maskeli IPv4 adresi, örn. 1.2.3.4/24" -#: netbox/dcim/forms/bulk_import.py:1468 netbox/dcim/forms/model_forms.py:1686 +#: netbox/dcim/forms/bulk_import.py:1565 netbox/dcim/forms/model_forms.py:1731 #: netbox/templates/dcim/device.html:206 #: netbox/templates/dcim/virtualdevicecontext.html:41 #: netbox/templates/virtualization/virtualmachine.html:68 msgid "Primary IPv6" msgstr "Birincil IPv6" -#: netbox/dcim/forms/bulk_import.py:1472 +#: netbox/dcim/forms/bulk_import.py:1569 msgid "IPv6 address with prefix length, e.g. 2001:db8::1/64" msgstr "Önek uzunluğuna sahip IPv6 adresi, örn. 2001:db8: :1/64" -#: netbox/dcim/forms/common.py:24 netbox/dcim/models/device_components.py:527 +#: netbox/dcim/forms/common.py:19 netbox/dcim/models/device_components.py:515 #: netbox/templates/dcim/interface.html:57 -#: netbox/templates/virtualization/vminterface.html:55 -#: netbox/virtualization/forms/bulk_edit.py:225 +#: netbox/templates/virtualization/vminterface.html:51 +#: netbox/virtualization/forms/bulk_edit.py:207 msgid "MTU" msgstr "MTU" -#: netbox/dcim/forms/common.py:65 +#: netbox/dcim/forms/common.py:60 #, python-brace-format msgid "" "The tagged VLANs ({vlans}) must belong to the same site as the interface's " @@ -4637,7 +5068,7 @@ msgstr "" "Etiketli VLAN'lar ({vlans}) arayüzün ana cihazı/sanal makinesiyle aynı " "siteye ait olmalı veya global olmalıdır" -#: netbox/dcim/forms/common.py:126 +#: netbox/dcim/forms/common.py:121 msgid "" "Cannot install module with placeholder values in a module bay with no " "position defined." @@ -4645,7 +5076,7 @@ msgstr "" "Konum tanımlanmamış bir modül yuvasına yer tutucu değerleri olan modül " "yüklenemiyor." -#: netbox/dcim/forms/common.py:131 +#: netbox/dcim/forms/common.py:127 #, python-brace-format msgid "" "Cannot install module with placeholder values in a module bay tree {level} " @@ -4654,17 +5085,17 @@ msgstr "" "Modül defne ağacına yer tutucu değerleri olan modül yüklenemiyor {level} " "Ağaçta ama {tokens} verilen yer tutucular." -#: netbox/dcim/forms/common.py:144 +#: netbox/dcim/forms/common.py:142 #, python-brace-format msgid "Cannot adopt {model} {name} as it already belongs to a module" msgstr "Evlat edinemiyor {model} {name} zaten bir modüle ait olduğu için" -#: netbox/dcim/forms/common.py:153 +#: netbox/dcim/forms/common.py:151 #, python-brace-format msgid "A {model} named {name} already exists" msgstr "BİR {model} adlandırmak {name} zaten var" -#: netbox/dcim/forms/connections.py:49 netbox/dcim/forms/model_forms.py:738 +#: netbox/dcim/forms/connections.py:49 netbox/dcim/forms/model_forms.py:749 #: netbox/dcim/tables/power.py:66 #: netbox/templates/dcim/inc/cable_termination.html:37 #: netbox/templates/dcim/powerfeed.html:24 @@ -4673,137 +5104,135 @@ msgstr "BİR {model} adlandırmak {name} zaten var" msgid "Power Panel" msgstr "Güç Paneli" -#: netbox/dcim/forms/connections.py:58 netbox/dcim/forms/model_forms.py:765 +#: netbox/dcim/forms/connections.py:58 netbox/dcim/forms/model_forms.py:777 #: netbox/templates/dcim/powerfeed.html:21 #: netbox/templates/dcim/powerport.html:80 msgid "Power Feed" msgstr "Güç Beslemesi" -#: netbox/dcim/forms/connections.py:81 -msgid "Side" -msgstr "Yan" - -#: netbox/dcim/forms/filtersets.py:136 netbox/dcim/tables/devices.py:295 +#: netbox/dcim/forms/filtersets.py:137 netbox/dcim/tables/devices.py:305 msgid "Device Status" msgstr "Cihaz Durumu" -#: netbox/dcim/forms/filtersets.py:149 +#: netbox/dcim/forms/filtersets.py:150 msgid "Parent region" msgstr "Ana bölge" -#: netbox/dcim/forms/filtersets.py:163 netbox/tenancy/forms/bulk_import.py:28 +#: netbox/dcim/forms/filtersets.py:164 netbox/tenancy/forms/bulk_import.py:28 #: netbox/tenancy/forms/bulk_import.py:62 #: netbox/tenancy/forms/filtersets.py:33 netbox/tenancy/forms/filtersets.py:62 -#: netbox/wireless/forms/bulk_import.py:25 -#: netbox/wireless/forms/filtersets.py:25 +#: netbox/wireless/forms/bulk_import.py:27 +#: netbox/wireless/forms/filtersets.py:27 msgid "Parent group" msgstr "Ebeveyn grubu" -#: netbox/dcim/forms/filtersets.py:242 netbox/templates/dcim/location.html:58 +#: netbox/dcim/forms/filtersets.py:243 netbox/templates/dcim/location.html:58 #: netbox/templates/dcim/site.html:56 msgid "Facility" msgstr "Tesis" -#: netbox/dcim/forms/filtersets.py:397 +#: netbox/dcim/forms/filtersets.py:398 msgid "Function" msgstr "Fonksiyon" -#: netbox/dcim/forms/filtersets.py:483 netbox/dcim/forms/model_forms.py:373 +#: netbox/dcim/forms/filtersets.py:484 netbox/dcim/forms/model_forms.py:382 #: netbox/templates/inc/panels/image_attachments.html:6 msgid "Images" msgstr "Görüntüler" -#: netbox/dcim/forms/filtersets.py:486 netbox/dcim/forms/filtersets.py:611 -#: netbox/dcim/forms/filtersets.py:726 +#: netbox/dcim/forms/filtersets.py:487 netbox/dcim/forms/filtersets.py:612 +#: netbox/dcim/forms/filtersets.py:727 msgid "Components" msgstr "Bileşenleri" -#: netbox/dcim/forms/filtersets.py:506 +#: netbox/dcim/forms/filtersets.py:507 msgid "Subdevice role" msgstr "Alt aygıt rolü" -#: netbox/dcim/forms/filtersets.py:790 netbox/dcim/tables/racks.py:54 +#: netbox/dcim/forms/filtersets.py:791 netbox/dcim/tables/racks.py:54 #: netbox/templates/dcim/racktype.html:20 msgid "Model" msgstr "Modeli" -#: netbox/dcim/forms/filtersets.py:834 +#: netbox/dcim/forms/filtersets.py:835 msgid "Has an OOB IP" msgstr "OOB IP'ye sahiptir" -#: netbox/dcim/forms/filtersets.py:841 +#: netbox/dcim/forms/filtersets.py:842 msgid "Virtual chassis member" msgstr "Sanal şasi elemanı" -#: netbox/dcim/forms/filtersets.py:890 +#: netbox/dcim/forms/filtersets.py:891 msgid "Has virtual device contexts" msgstr "Sanal cihaz bağlamlarına sahiptir" -#: netbox/dcim/forms/filtersets.py:903 netbox/extras/filtersets.py:585 -#: netbox/ipam/forms/filtersets.py:452 -#: netbox/virtualization/forms/filtersets.py:112 +#: netbox/dcim/forms/filtersets.py:904 netbox/extras/filtersets.py:585 +#: netbox/ipam/forms/filtersets.py:455 +#: netbox/virtualization/forms/filtersets.py:117 msgid "Cluster group" msgstr "Küme grubu" -#: netbox/dcim/forms/filtersets.py:1210 +#: netbox/dcim/forms/filtersets.py:1211 msgid "Cabled" msgstr "Kablolu" -#: netbox/dcim/forms/filtersets.py:1217 +#: netbox/dcim/forms/filtersets.py:1218 msgid "Occupied" msgstr "işgal" -#: netbox/dcim/forms/filtersets.py:1244 netbox/dcim/forms/filtersets.py:1269 -#: netbox/dcim/forms/filtersets.py:1293 netbox/dcim/forms/filtersets.py:1313 -#: netbox/dcim/forms/filtersets.py:1336 netbox/dcim/tables/devices.py:364 +#: netbox/dcim/forms/filtersets.py:1245 netbox/dcim/forms/filtersets.py:1270 +#: netbox/dcim/forms/filtersets.py:1294 netbox/dcim/forms/filtersets.py:1314 +#: netbox/dcim/forms/filtersets.py:1341 netbox/dcim/tables/devices.py:374 +#: netbox/dcim/tables/devices.py:663 +#: netbox/templates/circuits/inc/circuit_termination_fields.html:16 #: netbox/templates/dcim/consoleport.html:55 #: netbox/templates/dcim/consoleserverport.html:55 #: netbox/templates/dcim/frontport.html:69 -#: netbox/templates/dcim/interface.html:140 +#: netbox/templates/dcim/interface.html:197 #: netbox/templates/dcim/powerfeed.html:110 -#: netbox/templates/dcim/poweroutlet.html:59 +#: netbox/templates/dcim/poweroutlet.html:69 #: netbox/templates/dcim/powerport.html:59 #: netbox/templates/dcim/rearport.html:65 msgid "Connection" msgstr "Bağlantı" -#: netbox/dcim/forms/filtersets.py:1348 netbox/extras/forms/bulk_edit.py:326 +#: netbox/dcim/forms/filtersets.py:1353 netbox/extras/forms/bulk_edit.py:326 #: netbox/extras/forms/bulk_import.py:247 -#: netbox/extras/forms/filtersets.py:464 -#: netbox/extras/forms/model_forms.py:675 netbox/extras/tables/tables.py:579 +#: netbox/extras/forms/filtersets.py:472 +#: netbox/extras/forms/model_forms.py:689 netbox/extras/tables/tables.py:579 #: netbox/templates/extras/journalentry.html:30 msgid "Kind" msgstr "Tür" -#: netbox/dcim/forms/filtersets.py:1377 +#: netbox/dcim/forms/filtersets.py:1382 msgid "Mgmt only" msgstr "Sadece Mgmt" -#: netbox/dcim/forms/filtersets.py:1389 netbox/dcim/forms/model_forms.py:1390 -#: netbox/dcim/models/device_components.py:629 -#: netbox/templates/dcim/interface.html:129 +#: netbox/dcim/forms/filtersets.py:1394 netbox/dcim/forms/model_forms.py:1423 +#: netbox/dcim/models/device_components.py:677 +#: netbox/templates/dcim/interface.html:142 msgid "WWN" msgstr "WWN" -#: netbox/dcim/forms/filtersets.py:1409 +#: netbox/dcim/forms/filtersets.py:1414 msgid "Wireless channel" msgstr "Kablosuz kanal" -#: netbox/dcim/forms/filtersets.py:1413 +#: netbox/dcim/forms/filtersets.py:1418 msgid "Channel frequency (MHz)" msgstr "Kanal frekansı (MHz)" -#: netbox/dcim/forms/filtersets.py:1417 +#: netbox/dcim/forms/filtersets.py:1422 msgid "Channel width (MHz)" msgstr "Kanal genişliği (MHz)" -#: netbox/dcim/forms/filtersets.py:1421 -#: netbox/templates/dcim/interface.html:85 +#: netbox/dcim/forms/filtersets.py:1426 +#: netbox/templates/dcim/interface.html:91 msgid "Transmit power (dBm)" msgstr "İletim gücü (dBm)" -#: netbox/dcim/forms/filtersets.py:1446 netbox/dcim/forms/filtersets.py:1471 -#: netbox/dcim/tables/devices.py:327 netbox/templates/dcim/cable.html:12 +#: netbox/dcim/forms/filtersets.py:1451 netbox/dcim/forms/filtersets.py:1476 +#: netbox/dcim/tables/devices.py:337 netbox/templates/dcim/cable.html:12 #: netbox/templates/dcim/cable_trace.html:46 #: netbox/templates/dcim/frontport.html:77 #: netbox/templates/dcim/htmx/cable_edit.html:50 @@ -4813,40 +5242,77 @@ msgstr "İletim gücü (dBm)" msgid "Cable" msgstr "Kablo" -#: netbox/dcim/forms/filtersets.py:1550 netbox/dcim/tables/devices.py:949 +#: netbox/dcim/forms/filtersets.py:1555 netbox/dcim/tables/devices.py:979 msgid "Discovered" msgstr "Keşfedildi" +#: netbox/dcim/forms/filtersets.py:1596 netbox/ipam/forms/filtersets.py:350 +msgid "Assigned Device" +msgstr "Atanan Cihaz" + +#: netbox/dcim/forms/filtersets.py:1601 netbox/ipam/forms/filtersets.py:355 +msgid "Assigned VM" +msgstr "Atanmış VM" + #: netbox/dcim/forms/formsets.py:20 #, python-brace-format msgid "A virtual chassis member already exists in position {vc_position}." msgstr "Bir sanal kasa elemanı zaten yerinde var {vc_position}." -#: netbox/dcim/forms/model_forms.py:140 +#: netbox/dcim/forms/mixins.py:27 netbox/dcim/forms/mixins.py:75 +#: netbox/ipam/forms/bulk_edit.py:420 netbox/ipam/forms/model_forms.py:618 +msgid "Scope type" +msgstr "Kapsam türü" + +#: netbox/dcim/forms/mixins.py:30 netbox/dcim/forms/mixins.py:78 +#: netbox/ipam/forms/bulk_edit.py:270 netbox/ipam/forms/bulk_edit.py:423 +#: netbox/ipam/forms/bulk_edit.py:437 netbox/ipam/forms/filtersets.py:175 +#: netbox/ipam/forms/model_forms.py:231 netbox/ipam/forms/model_forms.py:621 +#: netbox/ipam/forms/model_forms.py:631 netbox/ipam/tables/ip.py:194 +#: netbox/ipam/tables/vlans.py:40 netbox/templates/ipam/prefix.html:48 +#: netbox/templates/ipam/vlangroup.html:38 +#: netbox/templates/virtualization/cluster.html:42 +#: netbox/templates/wireless/wirelesslan.html:26 +#: netbox/virtualization/forms/bulk_edit.py:91 +#: netbox/virtualization/forms/filtersets.py:46 +#: netbox/virtualization/forms/model_forms.py:79 +#: netbox/virtualization/tables/clusters.py:80 +#: netbox/wireless/forms/bulk_edit.py:93 +#: netbox/wireless/forms/filtersets.py:37 +#: netbox/wireless/forms/model_forms.py:56 +#: netbox/wireless/tables/wirelesslan.py:58 +msgid "Scope" +msgstr "Kapsam" + +#: netbox/dcim/forms/mixins.py:104 netbox/ipam/forms/bulk_import.py:436 +msgid "Scope type (app & model)" +msgstr "Kapsam türü (uygulama ve model)" + +#: netbox/dcim/forms/model_forms.py:144 msgid "Contact Info" msgstr "İletişim Bilgisi" -#: netbox/dcim/forms/model_forms.py:195 netbox/templates/dcim/rackrole.html:19 +#: netbox/dcim/forms/model_forms.py:199 netbox/templates/dcim/rackrole.html:19 msgid "Rack Role" msgstr "Raf Rolü" -#: netbox/dcim/forms/model_forms.py:212 netbox/dcim/forms/model_forms.py:362 -#: netbox/dcim/forms/model_forms.py:446 +#: netbox/dcim/forms/model_forms.py:217 netbox/dcim/forms/model_forms.py:371 +#: netbox/dcim/forms/model_forms.py:456 #: netbox/utilities/forms/fields/fields.py:47 msgid "Slug" msgstr "Kısa isim" -#: netbox/dcim/forms/model_forms.py:259 +#: netbox/dcim/forms/model_forms.py:264 msgid "Select a pre-defined rack type, or set physical characteristics below." msgstr "" "Önceden tanımlanmış bir raf tipi seçin veya aşağıda fiziksel özellikleri " "ayarlayın." -#: netbox/dcim/forms/model_forms.py:265 +#: netbox/dcim/forms/model_forms.py:273 msgid "Inventory Control" msgstr "Envanter Kontrolü" -#: netbox/dcim/forms/model_forms.py:313 +#: netbox/dcim/forms/model_forms.py:321 msgid "" "Comma-separated list of numeric unit IDs. A range may be specified using a " "hyphen." @@ -4854,36 +5320,36 @@ msgstr "" "Virgülle ayrılmış sayısal birim kimlikleri listesi. Bir aralık bir tire " "kullanılarak belirtilebilir." -#: netbox/dcim/forms/model_forms.py:322 netbox/dcim/tables/racks.py:202 +#: netbox/dcim/forms/model_forms.py:330 netbox/dcim/tables/racks.py:201 msgid "Reservation" msgstr "Rezervasyon" -#: netbox/dcim/forms/model_forms.py:423 +#: netbox/dcim/forms/model_forms.py:432 #: netbox/templates/dcim/devicerole.html:23 msgid "Device Role" msgstr "Cİhaz Rolü" -#: netbox/dcim/forms/model_forms.py:490 netbox/dcim/models/devices.py:644 +#: netbox/dcim/forms/model_forms.py:500 netbox/dcim/models/devices.py:635 msgid "The lowest-numbered unit occupied by the device" msgstr "Cihazın kullandığı en düşük numaralı birim" -#: netbox/dcim/forms/model_forms.py:547 +#: netbox/dcim/forms/model_forms.py:558 msgid "The position in the virtual chassis this device is identified by" msgstr "Bu cihazın sanal kasadaki konumu tanımlanır" -#: netbox/dcim/forms/model_forms.py:552 +#: netbox/dcim/forms/model_forms.py:563 msgid "The priority of the device in the virtual chassis" msgstr "Sanal kasadaki cihazın önceliği" -#: netbox/dcim/forms/model_forms.py:659 +#: netbox/dcim/forms/model_forms.py:670 msgid "Automatically populate components associated with this module type" msgstr "Bu modül türüyle ilişkili bileşenleri otomatik olarak doldurun" -#: netbox/dcim/forms/model_forms.py:767 +#: netbox/dcim/forms/model_forms.py:779 msgid "Characteristics" msgstr "ÖZELLİKLERİ" -#: netbox/dcim/forms/model_forms.py:914 +#: netbox/dcim/forms/model_forms.py:926 #, python-brace-format msgid "" "Alphanumeric ranges are supported for bulk creation. Mixed cases and types " @@ -4897,60 +5363,35 @@ msgstr "" "[0-9]). Simge {module}, varsa, yeni bir modül " "oluştururken otomatik olarak konum değeri ile değiştirilecektir." -#: netbox/dcim/forms/model_forms.py:1094 +#: netbox/dcim/forms/model_forms.py:1107 msgid "Console port template" msgstr "Konsol bağlantı noktası şablonu" -#: netbox/dcim/forms/model_forms.py:1102 +#: netbox/dcim/forms/model_forms.py:1115 msgid "Console server port template" msgstr "Konsol sunucusu bağlantı noktası şablonu" -#: netbox/dcim/forms/model_forms.py:1110 +#: netbox/dcim/forms/model_forms.py:1123 msgid "Front port template" msgstr "Ön bağlantı noktası şablonu" -#: netbox/dcim/forms/model_forms.py:1118 +#: netbox/dcim/forms/model_forms.py:1131 msgid "Interface template" msgstr "Arayüz şablonu" -#: netbox/dcim/forms/model_forms.py:1126 +#: netbox/dcim/forms/model_forms.py:1139 msgid "Power outlet template" msgstr "Elektrik prizi şablonu" -#: netbox/dcim/forms/model_forms.py:1134 +#: netbox/dcim/forms/model_forms.py:1147 msgid "Power port template" msgstr "Güç bağlantı noktası şablonu" -#: netbox/dcim/forms/model_forms.py:1142 +#: netbox/dcim/forms/model_forms.py:1155 msgid "Rear port template" msgstr "Arka bağlantı noktası şablonu" -#: netbox/dcim/forms/model_forms.py:1151 netbox/dcim/forms/model_forms.py:1395 -#: netbox/dcim/forms/model_forms.py:1558 netbox/dcim/forms/model_forms.py:1590 -#: netbox/dcim/tables/connections.py:65 netbox/ipam/forms/bulk_import.py:318 -#: netbox/ipam/forms/model_forms.py:280 netbox/ipam/forms/model_forms.py:289 -#: netbox/ipam/tables/fhrp.py:64 netbox/ipam/tables/ip.py:372 -#: netbox/ipam/tables/vlans.py:169 -#: netbox/templates/circuits/inc/circuit_termination_fields.html:51 -#: netbox/templates/dcim/frontport.html:106 -#: netbox/templates/dcim/interface.html:27 -#: netbox/templates/dcim/interface.html:184 -#: netbox/templates/dcim/interface.html:310 -#: netbox/templates/dcim/rearport.html:102 -#: netbox/templates/virtualization/vminterface.html:18 -#: netbox/templates/vpn/tunneltermination.html:31 -#: netbox/templates/wireless/inc/wirelesslink_interface.html:10 -#: netbox/templates/wireless/wirelesslink.html:10 -#: netbox/templates/wireless/wirelesslink.html:55 -#: netbox/virtualization/forms/model_forms.py:348 -#: netbox/vpn/forms/bulk_import.py:297 netbox/vpn/forms/model_forms.py:436 -#: netbox/vpn/forms/model_forms.py:445 -#: netbox/wireless/forms/model_forms.py:113 -#: netbox/wireless/forms/model_forms.py:155 -msgid "Interface" -msgstr "Arayüz" - -#: netbox/dcim/forms/model_forms.py:1152 netbox/dcim/forms/model_forms.py:1591 +#: netbox/dcim/forms/model_forms.py:1165 netbox/dcim/forms/model_forms.py:1636 #: netbox/dcim/tables/connections.py:27 #: netbox/templates/dcim/consoleport.html:17 #: netbox/templates/dcim/consoleserverport.html:74 @@ -4958,71 +5399,71 @@ msgstr "Arayüz" msgid "Console Port" msgstr "Konsol Bağlantı Noktası" -#: netbox/dcim/forms/model_forms.py:1153 netbox/dcim/forms/model_forms.py:1592 +#: netbox/dcim/forms/model_forms.py:1166 netbox/dcim/forms/model_forms.py:1637 #: netbox/templates/dcim/consoleport.html:73 #: netbox/templates/dcim/consoleserverport.html:17 #: netbox/templates/dcim/frontport.html:109 msgid "Console Server Port" msgstr "Konsol Sunucusu Bağlantı Noktası" -#: netbox/dcim/forms/model_forms.py:1154 netbox/dcim/forms/model_forms.py:1593 -#: netbox/templates/circuits/inc/circuit_termination_fields.html:52 +#: netbox/dcim/forms/model_forms.py:1167 netbox/dcim/forms/model_forms.py:1638 +#: netbox/templates/circuits/inc/circuit_termination_fields.html:53 #: netbox/templates/dcim/consoleport.html:76 #: netbox/templates/dcim/consoleserverport.html:77 #: netbox/templates/dcim/frontport.html:17 #: netbox/templates/dcim/frontport.html:115 -#: netbox/templates/dcim/interface.html:187 +#: netbox/templates/dcim/interface.html:244 #: netbox/templates/dcim/rearport.html:105 msgid "Front Port" msgstr "Ön Bağlantı Noktası" -#: netbox/dcim/forms/model_forms.py:1155 netbox/dcim/forms/model_forms.py:1594 -#: netbox/dcim/tables/devices.py:710 -#: netbox/templates/circuits/inc/circuit_termination_fields.html:53 +#: netbox/dcim/forms/model_forms.py:1168 netbox/dcim/forms/model_forms.py:1639 +#: netbox/dcim/tables/devices.py:744 +#: netbox/templates/circuits/inc/circuit_termination_fields.html:54 #: netbox/templates/dcim/consoleport.html:79 #: netbox/templates/dcim/consoleserverport.html:80 #: netbox/templates/dcim/frontport.html:50 #: netbox/templates/dcim/frontport.html:118 -#: netbox/templates/dcim/interface.html:190 +#: netbox/templates/dcim/interface.html:247 #: netbox/templates/dcim/rearport.html:17 #: netbox/templates/dcim/rearport.html:108 msgid "Rear Port" msgstr "Arka Bağlantı Noktası" -#: netbox/dcim/forms/model_forms.py:1156 netbox/dcim/forms/model_forms.py:1595 -#: netbox/dcim/tables/connections.py:46 netbox/dcim/tables/devices.py:512 -#: netbox/templates/dcim/poweroutlet.html:44 +#: netbox/dcim/forms/model_forms.py:1169 netbox/dcim/forms/model_forms.py:1640 +#: netbox/dcim/tables/connections.py:46 netbox/dcim/tables/devices.py:521 +#: netbox/templates/dcim/poweroutlet.html:54 #: netbox/templates/dcim/powerport.html:17 msgid "Power Port" msgstr "Güç Bağlantı Noktası" -#: netbox/dcim/forms/model_forms.py:1157 netbox/dcim/forms/model_forms.py:1596 +#: netbox/dcim/forms/model_forms.py:1170 netbox/dcim/forms/model_forms.py:1641 #: netbox/templates/dcim/poweroutlet.html:17 #: netbox/templates/dcim/powerport.html:77 msgid "Power Outlet" msgstr "Güç Çıkışı" -#: netbox/dcim/forms/model_forms.py:1159 netbox/dcim/forms/model_forms.py:1598 +#: netbox/dcim/forms/model_forms.py:1172 netbox/dcim/forms/model_forms.py:1643 msgid "Component Assignment" msgstr "Bileşen Ataması" -#: netbox/dcim/forms/model_forms.py:1202 netbox/dcim/forms/model_forms.py:1645 +#: netbox/dcim/forms/model_forms.py:1218 netbox/dcim/forms/model_forms.py:1690 msgid "An InventoryItem can only be assigned to a single component." msgstr "Bir InventoryItem yalnızca tek bir bileşene atanabilir." -#: netbox/dcim/forms/model_forms.py:1339 +#: netbox/dcim/forms/model_forms.py:1355 msgid "LAG interface" msgstr "LAG arayüzü" -#: netbox/dcim/forms/model_forms.py:1362 +#: netbox/dcim/forms/model_forms.py:1378 msgid "Filter VLANs available for assignment by group." msgstr "Gruba göre atama için mevcut VLAN'ları filtreleyin." -#: netbox/dcim/forms/model_forms.py:1491 +#: netbox/dcim/forms/model_forms.py:1533 msgid "Child Device" msgstr "Çocuk Cihazı" -#: netbox/dcim/forms/model_forms.py:1492 +#: netbox/dcim/forms/model_forms.py:1534 msgid "" "Child devices must first be created and assigned to the site and rack of the" " parent device." @@ -5030,32 +5471,58 @@ msgstr "" "Alt aygıtlar önce oluşturulmalı ve ana aygıtın sahasına ve rafına " "atanmalıdır." -#: netbox/dcim/forms/model_forms.py:1534 +#: netbox/dcim/forms/model_forms.py:1576 msgid "Console port" msgstr "Konsol bağlantı noktası" -#: netbox/dcim/forms/model_forms.py:1542 +#: netbox/dcim/forms/model_forms.py:1584 msgid "Console server port" msgstr "Konsol sunucusu bağlantı noktası" -#: netbox/dcim/forms/model_forms.py:1550 +#: netbox/dcim/forms/model_forms.py:1592 msgid "Front port" msgstr "Ön bağlantı noktası" -#: netbox/dcim/forms/model_forms.py:1566 +#: netbox/dcim/forms/model_forms.py:1608 msgid "Power outlet" msgstr "Güç çıkışı" -#: netbox/dcim/forms/model_forms.py:1586 +#: netbox/dcim/forms/model_forms.py:1630 #: netbox/templates/dcim/inventoryitem.html:17 msgid "Inventory Item" msgstr "Envanter Öğesi" -#: netbox/dcim/forms/model_forms.py:1659 +#: netbox/dcim/forms/model_forms.py:1704 #: netbox/templates/dcim/inventoryitemrole.html:15 msgid "Inventory Item Role" msgstr "Envanter Öğesi Rolü" +#: netbox/dcim/forms/model_forms.py:1773 +msgid "VM Interface" +msgstr "VM Arayüzü" + +#: netbox/dcim/forms/model_forms.py:1788 netbox/ipam/forms/filtersets.py:608 +#: netbox/ipam/forms/model_forms.py:334 netbox/ipam/forms/model_forms.py:796 +#: netbox/ipam/forms/model_forms.py:822 netbox/ipam/tables/vlans.py:171 +#: netbox/templates/virtualization/virtualdisk.html:21 +#: netbox/templates/virtualization/virtualmachine.html:12 +#: netbox/templates/virtualization/vminterface.html:21 +#: netbox/templates/vpn/tunneltermination.html:25 +#: netbox/virtualization/forms/filtersets.py:202 +#: netbox/virtualization/forms/filtersets.py:247 +#: netbox/virtualization/forms/model_forms.py:227 +#: netbox/virtualization/tables/virtualmachines.py:105 +#: netbox/virtualization/tables/virtualmachines.py:161 +#: netbox/vpn/choices.py:53 netbox/vpn/forms/filtersets.py:293 +#: netbox/vpn/forms/model_forms.py:161 netbox/vpn/forms/model_forms.py:172 +#: netbox/vpn/forms/model_forms.py:274 netbox/vpn/forms/model_forms.py:457 +msgid "Virtual Machine" +msgstr "Sanal Makine" + +#: netbox/dcim/forms/model_forms.py:1827 +msgid "A MAC address can only be assigned to a single object." +msgstr "MAC adresi yalnızca tek bir nesneye atanabilir." + #: netbox/dcim/forms/object_create.py:48 #: netbox/dcim/forms/object_create.py:199 #: netbox/dcim/forms/object_create.py:347 @@ -5076,7 +5543,7 @@ msgstr "" "bekleniyor." #: netbox/dcim/forms/object_create.py:110 -#: netbox/dcim/forms/object_create.py:263 netbox/dcim/tables/devices.py:252 +#: netbox/dcim/forms/object_create.py:263 netbox/dcim/tables/devices.py:263 msgid "Rear ports" msgstr "Arka bağlantı noktaları" @@ -5105,7 +5572,7 @@ msgstr "" "Oluşturulacak ön bağlantı noktalarının sayısı ({frontport_count}) seçilen " "arka port konumu sayısıyla eşleşmelidir ({rearport_count})." -#: netbox/dcim/forms/object_create.py:401 netbox/dcim/tables/devices.py:1033 +#: netbox/dcim/forms/object_create.py:401 netbox/dcim/tables/devices.py:1065 #: netbox/ipam/tables/fhrp.py:31 netbox/templates/dcim/virtualchassis.html:53 #: netbox/templates/dcim/virtualchassis_edit.html:47 #: netbox/templates/ipam/fhrpgroup.html:38 @@ -5122,30 +5589,30 @@ msgid "" "member." msgstr "İlk üye cihazın konumu. Her ek üye için bir artar." -#: netbox/dcim/forms/object_create.py:427 +#: netbox/dcim/forms/object_create.py:428 msgid "A position must be specified for the first VC member." msgstr "İlk VC üyesi için bir pozisyon belirtilmelidir." -#: netbox/dcim/models/cables.py:62 -#: netbox/dcim/models/device_component_templates.py:55 -#: netbox/dcim/models/device_components.py:62 +#: netbox/dcim/models/cables.py:64 +#: netbox/dcim/models/device_component_templates.py:51 +#: netbox/dcim/models/device_components.py:57 #: netbox/extras/models/customfields.py:111 msgid "label" msgstr "etiketlemek" -#: netbox/dcim/models/cables.py:71 +#: netbox/dcim/models/cables.py:73 msgid "length" msgstr "uzunluk" -#: netbox/dcim/models/cables.py:78 +#: netbox/dcim/models/cables.py:80 msgid "length unit" msgstr "uzunluk birimi" -#: netbox/dcim/models/cables.py:95 +#: netbox/dcim/models/cables.py:98 msgid "cable" msgstr "kablo" -#: netbox/dcim/models/cables.py:96 +#: netbox/dcim/models/cables.py:99 msgid "cables" msgstr "kablolar" @@ -5170,19 +5637,19 @@ msgstr "Uyumsuz sonlandırma türleri: {type_a} ve {type_b}" msgid "A and B terminations cannot connect to the same object." msgstr "A ve B sonlandırmaları aynı nesneye bağlanamaz." -#: netbox/dcim/models/cables.py:260 netbox/ipam/models/asns.py:37 +#: netbox/dcim/models/cables.py:262 netbox/ipam/models/asns.py:37 msgid "end" msgstr "son" -#: netbox/dcim/models/cables.py:313 +#: netbox/dcim/models/cables.py:315 msgid "cable termination" msgstr "kablo sonlandırma" -#: netbox/dcim/models/cables.py:314 +#: netbox/dcim/models/cables.py:316 msgid "cable terminations" msgstr "kablo sonlandırmaları" -#: netbox/dcim/models/cables.py:333 +#: netbox/dcim/models/cables.py:335 #, python-brace-format msgid "" "Duplicate termination found for {app_label}.{model} {termination_id}: cable " @@ -5191,35 +5658,66 @@ msgstr "" "Yinelenen sonlandırma bulundu {app_label}.{model} {termination_id}: kablo " "{cable_pk}" -#: netbox/dcim/models/cables.py:343 +#: netbox/dcim/models/cables.py:345 #, python-brace-format msgid "Cables cannot be terminated to {type_display} interfaces" msgstr "Kablolar sonlandırılamaz {type_display} arayüzleri" -#: netbox/dcim/models/cables.py:350 +#: netbox/dcim/models/cables.py:352 msgid "Circuit terminations attached to a provider network may not be cabled." msgstr "Bir sağlayıcı ağına bağlı devre sonlandırmaları kablolanmayabilir." -#: netbox/dcim/models/cables.py:448 netbox/extras/models/configs.py:50 +#: netbox/dcim/models/cables.py:450 netbox/extras/models/configs.py:50 msgid "is active" msgstr "aktiftir" -#: netbox/dcim/models/cables.py:452 +#: netbox/dcim/models/cables.py:454 msgid "is complete" msgstr "tamamlandı" -#: netbox/dcim/models/cables.py:456 +#: netbox/dcim/models/cables.py:458 msgid "is split" msgstr "bölünmüş" -#: netbox/dcim/models/cables.py:464 +#: netbox/dcim/models/cables.py:466 msgid "cable path" msgstr "kablo yolu" -#: netbox/dcim/models/cables.py:465 +#: netbox/dcim/models/cables.py:467 msgid "cable paths" msgstr "kablo yolları" +#: netbox/dcim/models/cables.py:539 +msgid "All originating terminations must be attached to the same link" +msgstr "Tüm kaynak sonlandırmalar aynı bağlantıya eklenmelidir" + +#: netbox/dcim/models/cables.py:551 +msgid "All mid-span terminations must have the same termination type" +msgstr "" +"Tüm orta açıklıklı sonlandırmalar aynı sonlandırma türüne sahip olmalıdır" + +#: netbox/dcim/models/cables.py:556 +msgid "All mid-span terminations must have the same parent object" +msgstr "Tüm orta açıklıklı sonlandırmalar aynı ana nesneye sahip olmalıdır" + +#: netbox/dcim/models/cables.py:580 +msgid "All links must be cable or wireless" +msgstr "Tüm bağlantılar kablo veya kablosuz olmalıdır" + +#: netbox/dcim/models/cables.py:582 +msgid "All links must match first link type" +msgstr "Tüm bağlantılar ilk bağlantı türüyle eşleşmelidir" + +#: netbox/dcim/models/cables.py:665 +msgid "" +"All positions counts within the path on opposite ends of links must match" +msgstr "" +"Bağlantıların zıt uçlarındaki yol içindeki tüm pozisyonlar eşleşmelidir" + +#: netbox/dcim/models/cables.py:674 +msgid "Remote termination position filter is missing" +msgstr "Uzaktan sonlandırma konum filtresi eksik" + #: netbox/dcim/models/device_component_templates.py:46 #, python-brace-format msgid "" @@ -5229,23 +5727,23 @@ msgstr "" "{module} bir modül tipine bağlandığında modül yuvası konumunun yerine kabul " "edilir." -#: netbox/dcim/models/device_component_templates.py:58 -#: netbox/dcim/models/device_components.py:65 +#: netbox/dcim/models/device_component_templates.py:54 +#: netbox/dcim/models/device_components.py:60 msgid "Physical label" msgstr "Fiziksel etiket" -#: netbox/dcim/models/device_component_templates.py:103 +#: netbox/dcim/models/device_component_templates.py:99 msgid "Component templates cannot be moved to a different device type." msgstr "Bileşen şablonları farklı bir aygıt türüne taşınamaz." -#: netbox/dcim/models/device_component_templates.py:154 +#: netbox/dcim/models/device_component_templates.py:150 msgid "" "A component template cannot be associated with both a device type and a " "module type." msgstr "" "Bir bileşen şablonu hem aygıt türü hem de modül türüyle ilişkilendirilemez." -#: netbox/dcim/models/device_component_templates.py:158 +#: netbox/dcim/models/device_component_templates.py:154 msgid "" "A component template must be associated with either a device type or a " "module type." @@ -5253,134 +5751,134 @@ msgstr "" "Bir bileşen şablonu, bir aygıt türü veya bir modül türüyle " "ilişkilendirilmelidir." -#: netbox/dcim/models/device_component_templates.py:212 +#: netbox/dcim/models/device_component_templates.py:209 msgid "console port template" msgstr "konsol bağlantı noktası şablonu" -#: netbox/dcim/models/device_component_templates.py:213 +#: netbox/dcim/models/device_component_templates.py:210 msgid "console port templates" msgstr "konsol bağlantı noktası şablonları" -#: netbox/dcim/models/device_component_templates.py:246 +#: netbox/dcim/models/device_component_templates.py:244 msgid "console server port template" msgstr "konsol sunucusu bağlantı noktası şablonu" -#: netbox/dcim/models/device_component_templates.py:247 +#: netbox/dcim/models/device_component_templates.py:245 msgid "console server port templates" msgstr "konsol sunucusu bağlantı noktası şablonları" -#: netbox/dcim/models/device_component_templates.py:278 -#: netbox/dcim/models/device_components.py:352 +#: netbox/dcim/models/device_component_templates.py:277 +#: netbox/dcim/models/device_components.py:345 msgid "maximum draw" msgstr "maksimum çekiliş" -#: netbox/dcim/models/device_component_templates.py:285 -#: netbox/dcim/models/device_components.py:359 +#: netbox/dcim/models/device_component_templates.py:284 +#: netbox/dcim/models/device_components.py:352 msgid "allocated draw" msgstr "tahsis edilen çekiliş" -#: netbox/dcim/models/device_component_templates.py:295 +#: netbox/dcim/models/device_component_templates.py:294 msgid "power port template" msgstr "güç bağlantı noktası şablonu" -#: netbox/dcim/models/device_component_templates.py:296 +#: netbox/dcim/models/device_component_templates.py:295 msgid "power port templates" msgstr "güç bağlantı noktası şablonları" #: netbox/dcim/models/device_component_templates.py:315 -#: netbox/dcim/models/device_components.py:382 +#: netbox/dcim/models/device_components.py:372 #, python-brace-format msgid "Allocated draw cannot exceed the maximum draw ({maximum_draw}W)." msgstr "Tahsis edilen çekiliş maksimum çekilişi aşamaz ({maximum_draw}W)." -#: netbox/dcim/models/device_component_templates.py:347 -#: netbox/dcim/models/device_components.py:477 +#: netbox/dcim/models/device_component_templates.py:349 +#: netbox/dcim/models/device_components.py:468 msgid "feed leg" msgstr "besleme bacağı" -#: netbox/dcim/models/device_component_templates.py:351 -#: netbox/dcim/models/device_components.py:481 +#: netbox/dcim/models/device_component_templates.py:354 +#: netbox/dcim/models/device_components.py:473 msgid "Phase (for three-phase feeds)" msgstr "Faz (üç fazlı beslemeler için)" -#: netbox/dcim/models/device_component_templates.py:357 +#: netbox/dcim/models/device_component_templates.py:360 msgid "power outlet template" msgstr "elektrik prizi şablonu" -#: netbox/dcim/models/device_component_templates.py:358 +#: netbox/dcim/models/device_component_templates.py:361 msgid "power outlet templates" msgstr "elektrik prizi şablonları" -#: netbox/dcim/models/device_component_templates.py:367 +#: netbox/dcim/models/device_component_templates.py:370 #, python-brace-format msgid "Parent power port ({power_port}) must belong to the same device type" msgstr "" "Ana güç bağlantı noktası ({power_port}) aynı cihaz türüne ait olmalıdır" -#: netbox/dcim/models/device_component_templates.py:371 +#: netbox/dcim/models/device_component_templates.py:376 #, python-brace-format msgid "Parent power port ({power_port}) must belong to the same module type" msgstr "" "Ana güç bağlantı noktası ({power_port}) aynı modül türüne ait olmalıdır" -#: netbox/dcim/models/device_component_templates.py:423 -#: netbox/dcim/models/device_components.py:611 +#: netbox/dcim/models/device_component_templates.py:430 +#: netbox/dcim/models/device_components.py:659 msgid "management only" msgstr "sadece yönetim" -#: netbox/dcim/models/device_component_templates.py:431 -#: netbox/dcim/models/device_components.py:550 +#: netbox/dcim/models/device_component_templates.py:438 +#: netbox/dcim/models/device_components.py:539 msgid "bridge interface" msgstr "köprü arayüzü" -#: netbox/dcim/models/device_component_templates.py:449 -#: netbox/dcim/models/device_components.py:636 +#: netbox/dcim/models/device_component_templates.py:459 +#: netbox/dcim/models/device_components.py:685 msgid "wireless role" msgstr "kablosuz rolü" -#: netbox/dcim/models/device_component_templates.py:455 +#: netbox/dcim/models/device_component_templates.py:465 msgid "interface template" msgstr "arayüz şablonu" -#: netbox/dcim/models/device_component_templates.py:456 +#: netbox/dcim/models/device_component_templates.py:466 msgid "interface templates" msgstr "arayüz şablonları" -#: netbox/dcim/models/device_component_templates.py:463 -#: netbox/dcim/models/device_components.py:804 -#: netbox/virtualization/models/virtualmachines.py:405 +#: netbox/dcim/models/device_component_templates.py:473 +#: netbox/dcim/models/device_components.py:845 +#: netbox/virtualization/models/virtualmachines.py:385 msgid "An interface cannot be bridged to itself." msgstr "Bir arayüz kendi başına köprülenemez." -#: netbox/dcim/models/device_component_templates.py:466 +#: netbox/dcim/models/device_component_templates.py:477 #, python-brace-format msgid "Bridge interface ({bridge}) must belong to the same device type" msgstr "Köprü arayüzü ({bridge}) aynı cihaz türüne ait olmalıdır" -#: netbox/dcim/models/device_component_templates.py:470 +#: netbox/dcim/models/device_component_templates.py:483 #, python-brace-format msgid "Bridge interface ({bridge}) must belong to the same module type" msgstr "Köprü arayüzü ({bridge}) aynı modül türüne ait olmalıdır" -#: netbox/dcim/models/device_component_templates.py:526 -#: netbox/dcim/models/device_components.py:984 +#: netbox/dcim/models/device_component_templates.py:540 +#: netbox/dcim/models/device_components.py:1035 msgid "rear port position" msgstr "arka port konumu" -#: netbox/dcim/models/device_component_templates.py:551 +#: netbox/dcim/models/device_component_templates.py:565 msgid "front port template" msgstr "ön bağlantı noktası şablonu" -#: netbox/dcim/models/device_component_templates.py:552 +#: netbox/dcim/models/device_component_templates.py:566 msgid "front port templates" msgstr "ön bağlantı noktası şablonları" -#: netbox/dcim/models/device_component_templates.py:562 +#: netbox/dcim/models/device_component_templates.py:576 #, python-brace-format msgid "Rear port ({name}) must belong to the same device type" msgstr "Arka bağlantı noktası ({name}) aynı cihaz türüne ait olmalıdır" -#: netbox/dcim/models/device_component_templates.py:568 +#: netbox/dcim/models/device_component_templates.py:582 #, python-brace-format msgid "" "Invalid rear port position ({position}); rear port {name} has only {count} " @@ -5389,46 +5887,46 @@ msgstr "" "Geçersiz arka bağlantı noktası konumu ({position}); arka bağlantı noktası " "{name} sadece var {count} pozisyonlar" -#: netbox/dcim/models/device_component_templates.py:621 -#: netbox/dcim/models/device_components.py:1053 +#: netbox/dcim/models/device_component_templates.py:635 +#: netbox/dcim/models/device_components.py:1101 msgid "positions" msgstr "pozisyonlar" -#: netbox/dcim/models/device_component_templates.py:632 +#: netbox/dcim/models/device_component_templates.py:646 msgid "rear port template" msgstr "arka bağlantı noktası şablonu" -#: netbox/dcim/models/device_component_templates.py:633 +#: netbox/dcim/models/device_component_templates.py:647 msgid "rear port templates" msgstr "arka bağlantı noktası şablonları" -#: netbox/dcim/models/device_component_templates.py:662 -#: netbox/dcim/models/device_components.py:1103 +#: netbox/dcim/models/device_component_templates.py:676 +#: netbox/dcim/models/device_components.py:1148 msgid "position" msgstr "pozisyon" -#: netbox/dcim/models/device_component_templates.py:665 -#: netbox/dcim/models/device_components.py:1106 +#: netbox/dcim/models/device_component_templates.py:679 +#: netbox/dcim/models/device_components.py:1151 msgid "Identifier to reference when renaming installed components" msgstr "Yüklü bileşenleri yeniden adlandırırken başvurulacak tanımlayıcı" -#: netbox/dcim/models/device_component_templates.py:671 +#: netbox/dcim/models/device_component_templates.py:685 msgid "module bay template" msgstr "modül bölmesi şablonu" -#: netbox/dcim/models/device_component_templates.py:672 +#: netbox/dcim/models/device_component_templates.py:686 msgid "module bay templates" msgstr "modül bölmesi şablonları" -#: netbox/dcim/models/device_component_templates.py:699 +#: netbox/dcim/models/device_component_templates.py:713 msgid "device bay template" msgstr "cihaz yuvası şablonu" -#: netbox/dcim/models/device_component_templates.py:700 +#: netbox/dcim/models/device_component_templates.py:714 msgid "device bay templates" msgstr "cihaz yuvası şablonları" -#: netbox/dcim/models/device_component_templates.py:713 +#: netbox/dcim/models/device_component_templates.py:728 #, python-brace-format msgid "" "Subdevice role of device type ({device_type}) must be set to \"parent\" to " @@ -5437,205 +5935,224 @@ msgstr "" "Aygıt türünün alt cihaz rolü ({device_type}) cihaz bölmelerine izin vermek " "için “ebeveyn” olarak ayarlanmalıdır." -#: netbox/dcim/models/device_component_templates.py:768 -#: netbox/dcim/models/device_components.py:1262 +#: netbox/dcim/models/device_component_templates.py:784 +#: netbox/dcim/models/device_components.py:1304 msgid "part ID" msgstr "parça kimliği" -#: netbox/dcim/models/device_component_templates.py:770 -#: netbox/dcim/models/device_components.py:1264 +#: netbox/dcim/models/device_component_templates.py:786 +#: netbox/dcim/models/device_components.py:1306 msgid "Manufacturer-assigned part identifier" msgstr "Üretici tarafından atanan parça tanımlayıcısı" -#: netbox/dcim/models/device_component_templates.py:787 +#: netbox/dcim/models/device_component_templates.py:803 msgid "inventory item template" msgstr "envanter öğesi şablonu" -#: netbox/dcim/models/device_component_templates.py:788 +#: netbox/dcim/models/device_component_templates.py:804 msgid "inventory item templates" msgstr "envanter öğe şablonları" -#: netbox/dcim/models/device_components.py:105 +#: netbox/dcim/models/device_components.py:100 msgid "Components cannot be moved to a different device." msgstr "Bileşenler farklı bir cihaza taşınamaz." -#: netbox/dcim/models/device_components.py:144 +#: netbox/dcim/models/device_components.py:139 msgid "cable end" msgstr "kablo ucu" -#: netbox/dcim/models/device_components.py:150 +#: netbox/dcim/models/device_components.py:146 msgid "mark connected" msgstr "bağlı olarak işaretle" -#: netbox/dcim/models/device_components.py:152 +#: netbox/dcim/models/device_components.py:148 msgid "Treat as if a cable is connected" msgstr "Bir kablo bağlıymış gibi davranın" -#: netbox/dcim/models/device_components.py:170 +#: netbox/dcim/models/device_components.py:166 msgid "Must specify cable end (A or B) when attaching a cable." msgstr "Kablo takarken kablo ucunu (A veya B) belirtmelisiniz." -#: netbox/dcim/models/device_components.py:174 +#: netbox/dcim/models/device_components.py:170 msgid "Cable end must not be set without a cable." msgstr "Kablo ucu kablo olmadan ayarlanmamalıdır." -#: netbox/dcim/models/device_components.py:178 +#: netbox/dcim/models/device_components.py:174 msgid "Cannot mark as connected with a cable attached." msgstr "Takılı bir kabloyla bağlı olarak işaretlenemiyor." -#: netbox/dcim/models/device_components.py:202 +#: netbox/dcim/models/device_components.py:198 #, python-brace-format msgid "{class_name} models must declare a parent_object property" msgstr "{class_name} modeller bir parent_object özelliği bildirmelidir" -#: netbox/dcim/models/device_components.py:287 -#: netbox/dcim/models/device_components.py:316 -#: netbox/dcim/models/device_components.py:349 -#: netbox/dcim/models/device_components.py:467 +#: netbox/dcim/models/device_components.py:284 +#: netbox/dcim/models/device_components.py:311 +#: netbox/dcim/models/device_components.py:342 +#: netbox/dcim/models/device_components.py:458 msgid "Physical port type" msgstr "Fiziksel bağlantı noktası tipi" -#: netbox/dcim/models/device_components.py:290 -#: netbox/dcim/models/device_components.py:319 +#: netbox/dcim/models/device_components.py:287 +#: netbox/dcim/models/device_components.py:314 msgid "speed" msgstr "sürat" -#: netbox/dcim/models/device_components.py:294 -#: netbox/dcim/models/device_components.py:323 +#: netbox/dcim/models/device_components.py:291 +#: netbox/dcim/models/device_components.py:318 msgid "Port speed in bits per second" msgstr "Saniyede bit cinsinden port hızı" -#: netbox/dcim/models/device_components.py:300 +#: netbox/dcim/models/device_components.py:297 msgid "console port" msgstr "konsol bağlantı noktası" -#: netbox/dcim/models/device_components.py:301 +#: netbox/dcim/models/device_components.py:298 msgid "console ports" msgstr "konsol bağlantı noktaları" -#: netbox/dcim/models/device_components.py:329 +#: netbox/dcim/models/device_components.py:324 msgid "console server port" msgstr "konsol sunucusu bağlantı noktası" -#: netbox/dcim/models/device_components.py:330 +#: netbox/dcim/models/device_components.py:325 msgid "console server ports" msgstr "konsol sunucusu bağlantı noktaları" -#: netbox/dcim/models/device_components.py:369 +#: netbox/dcim/models/device_components.py:362 msgid "power port" msgstr "güç bağlantı noktası" -#: netbox/dcim/models/device_components.py:370 +#: netbox/dcim/models/device_components.py:363 msgid "power ports" msgstr "güç bağlantı noktaları" -#: netbox/dcim/models/device_components.py:487 +#: netbox/dcim/models/device_components.py:483 msgid "power outlet" msgstr "elektrik prizi" -#: netbox/dcim/models/device_components.py:488 +#: netbox/dcim/models/device_components.py:484 msgid "power outlets" msgstr "elektrik prizleri" -#: netbox/dcim/models/device_components.py:499 +#: netbox/dcim/models/device_components.py:492 #, python-brace-format msgid "Parent power port ({power_port}) must belong to the same device" msgstr "Ana güç bağlantı noktası ({power_port}) aynı cihaza ait olmalıdır" -#: netbox/dcim/models/device_components.py:530 netbox/vpn/models/crypto.py:81 -#: netbox/vpn/models/crypto.py:226 +#: netbox/dcim/models/device_components.py:518 netbox/vpn/models/crypto.py:80 +#: netbox/vpn/models/crypto.py:222 msgid "mode" msgstr "mod" -#: netbox/dcim/models/device_components.py:534 +#: netbox/dcim/models/device_components.py:523 msgid "IEEE 802.1Q tagging strategy" msgstr "IEEE 802.1Q etiketleme stratejisi" -#: netbox/dcim/models/device_components.py:542 +#: netbox/dcim/models/device_components.py:531 msgid "parent interface" msgstr "ebeveyn arabirimi" -#: netbox/dcim/models/device_components.py:602 -msgid "parent LAG" -msgstr "ebeveyn LAG" - -#: netbox/dcim/models/device_components.py:612 -msgid "This interface is used only for out-of-band management" -msgstr "Bu arayüz yalnızca bant dışı yönetim için kullanılır" - -#: netbox/dcim/models/device_components.py:617 -msgid "speed (Kbps)" -msgstr "hız (Kbps)" - -#: netbox/dcim/models/device_components.py:620 -msgid "duplex" -msgstr "dubleks" - -#: netbox/dcim/models/device_components.py:630 -msgid "64-bit World Wide Name" -msgstr "64 bit Dünya Çapında Adı" - -#: netbox/dcim/models/device_components.py:642 -msgid "wireless channel" -msgstr "kablosuz kanal" - -#: netbox/dcim/models/device_components.py:649 -msgid "channel frequency (MHz)" -msgstr "kanal frekansı (MHz)" - -#: netbox/dcim/models/device_components.py:650 -#: netbox/dcim/models/device_components.py:658 -msgid "Populated by selected channel (if set)" -msgstr "Seçilen kanala göre doldurulur (ayarlanmışsa)" - -#: netbox/dcim/models/device_components.py:664 -msgid "transmit power (dBm)" -msgstr "iletim gücü (dBm)" - -#: netbox/dcim/models/device_components.py:689 netbox/wireless/models.py:117 -msgid "wireless LANs" -msgstr "kablosuz LAN'lar" - -#: netbox/dcim/models/device_components.py:697 -#: netbox/virtualization/models/virtualmachines.py:335 +#: netbox/dcim/models/device_components.py:547 msgid "untagged VLAN" msgstr "etiketsiz VLAN" -#: netbox/dcim/models/device_components.py:703 -#: netbox/virtualization/models/virtualmachines.py:341 +#: netbox/dcim/models/device_components.py:553 msgid "tagged VLANs" msgstr "etiketli VLAN'lar" -#: netbox/dcim/models/device_components.py:745 -#: netbox/virtualization/models/virtualmachines.py:377 +#: netbox/dcim/models/device_components.py:561 +#: netbox/dcim/tables/devices.py:602 netbox/ipam/forms/bulk_edit.py:510 +#: netbox/ipam/forms/bulk_import.py:491 netbox/ipam/forms/filtersets.py:565 +#: netbox/ipam/forms/model_forms.py:692 netbox/ipam/tables/vlans.py:106 +#: netbox/templates/dcim/interface.html:86 netbox/templates/ipam/vlan.html:77 +msgid "Q-in-Q SVLAN" +msgstr "Q-in-Q SVLAN" + +#: netbox/dcim/models/device_components.py:576 +msgid "primary MAC address" +msgstr "birincil MAC adresi" + +#: netbox/dcim/models/device_components.py:588 +msgid "Only Q-in-Q interfaces may specify a service VLAN." +msgstr "Yalnızca Q-in-Q arayüzleri bir hizmet VLAN'ı belirtebilir." + +#: netbox/dcim/models/device_components.py:594 +#, python-brace-format +msgid "MAC address {mac_address} is not assigned to this interface." +msgstr "MAC adresi {mac_address} bu arayüze atanmamıştır." + +#: netbox/dcim/models/device_components.py:650 +msgid "parent LAG" +msgstr "ebeveyn LAG" + +#: netbox/dcim/models/device_components.py:660 +msgid "This interface is used only for out-of-band management" +msgstr "Bu arayüz yalnızca bant dışı yönetim için kullanılır" + +#: netbox/dcim/models/device_components.py:665 +msgid "speed (Kbps)" +msgstr "hız (Kbps)" + +#: netbox/dcim/models/device_components.py:668 +msgid "duplex" +msgstr "dubleks" + +#: netbox/dcim/models/device_components.py:678 +msgid "64-bit World Wide Name" +msgstr "64 bit Dünya Çapında Adı" + +#: netbox/dcim/models/device_components.py:692 +msgid "wireless channel" +msgstr "kablosuz kanal" + +#: netbox/dcim/models/device_components.py:699 +msgid "channel frequency (MHz)" +msgstr "kanal frekansı (MHz)" + +#: netbox/dcim/models/device_components.py:700 +#: netbox/dcim/models/device_components.py:708 +msgid "Populated by selected channel (if set)" +msgstr "Seçilen kanala göre doldurulur (ayarlanmışsa)" + +#: netbox/dcim/models/device_components.py:714 +msgid "transmit power (dBm)" +msgstr "iletim gücü (dBm)" + +#: netbox/dcim/models/device_components.py:741 netbox/wireless/models.py:117 +msgid "wireless LANs" +msgstr "kablosuz LAN'lar" + +#: netbox/dcim/models/device_components.py:789 +#: netbox/virtualization/models/virtualmachines.py:359 msgid "interface" msgstr "arayüz" -#: netbox/dcim/models/device_components.py:746 -#: netbox/virtualization/models/virtualmachines.py:378 +#: netbox/dcim/models/device_components.py:790 +#: netbox/virtualization/models/virtualmachines.py:360 msgid "interfaces" msgstr "arayüzleri" -#: netbox/dcim/models/device_components.py:757 +#: netbox/dcim/models/device_components.py:798 #, python-brace-format msgid "{display_type} interfaces cannot have a cable attached." msgstr "{display_type} arabirimlerde kablo takılı olamaz." -#: netbox/dcim/models/device_components.py:765 +#: netbox/dcim/models/device_components.py:806 #, python-brace-format msgid "{display_type} interfaces cannot be marked as connected." msgstr "{display_type} arayüzler bağlı olarak işaretlenemez." -#: netbox/dcim/models/device_components.py:774 -#: netbox/virtualization/models/virtualmachines.py:390 +#: netbox/dcim/models/device_components.py:815 +#: netbox/virtualization/models/virtualmachines.py:370 msgid "An interface cannot be its own parent." msgstr "Bir arayüz kendi ebeveyni olamaz." -#: netbox/dcim/models/device_components.py:778 +#: netbox/dcim/models/device_components.py:819 msgid "Only virtual interfaces may be assigned to a parent interface." msgstr "Bir üst arabirime yalnızca sanal arabirimler atanabilir." -#: netbox/dcim/models/device_components.py:785 +#: netbox/dcim/models/device_components.py:826 #, python-brace-format msgid "" "The selected parent interface ({interface}) belongs to a different device " @@ -5643,7 +6160,7 @@ msgid "" msgstr "" "Seçilen üst arabirim ({interface}) farklı bir cihaza aittir ({device})" -#: netbox/dcim/models/device_components.py:791 +#: netbox/dcim/models/device_components.py:832 #, python-brace-format msgid "" "The selected parent interface ({interface}) belongs to {device}, which is " @@ -5652,14 +6169,14 @@ msgstr "" "Seçilen üst arabirim ({interface}) aittir {device}, sanal kasanın bir " "parçası olmayan {virtual_chassis}." -#: netbox/dcim/models/device_components.py:811 +#: netbox/dcim/models/device_components.py:852 #, python-brace-format msgid "" "The selected bridge interface ({bridge}) belongs to a different device " "({device})." msgstr "Seçilen köprü arayüzü ({bridge}) farklı bir cihaza aittir ({device})." -#: netbox/dcim/models/device_components.py:817 +#: netbox/dcim/models/device_components.py:858 #, python-brace-format msgid "" "The selected bridge interface ({interface}) belongs to {device}, which is " @@ -5668,21 +6185,21 @@ msgstr "" "Seçilen köprü arayüzü ({interface}) aittir {device}, sanal kasanın bir " "parçası olmayan {virtual_chassis}." -#: netbox/dcim/models/device_components.py:828 +#: netbox/dcim/models/device_components.py:869 msgid "Virtual interfaces cannot have a parent LAG interface." msgstr "Sanal arabirimlerin üst LAG arabirimi olamaz." -#: netbox/dcim/models/device_components.py:832 +#: netbox/dcim/models/device_components.py:873 msgid "A LAG interface cannot be its own parent." msgstr "Bir LAG arabirimi kendi ana arabirimi olamaz." -#: netbox/dcim/models/device_components.py:839 +#: netbox/dcim/models/device_components.py:880 #, python-brace-format msgid "" "The selected LAG interface ({lag}) belongs to a different device ({device})." msgstr "Seçilen LAG arayüzü ({lag}) farklı bir cihaza aittir ({device})." -#: netbox/dcim/models/device_components.py:845 +#: netbox/dcim/models/device_components.py:886 #, python-brace-format msgid "" "The selected LAG interface ({lag}) belongs to {device}, which is not part of" @@ -5691,43 +6208,47 @@ msgstr "" "Seçilen LAG arayüzü ({lag}) aittir {device}, sanal kasanın bir parçası " "olmayan {virtual_chassis}." -#: netbox/dcim/models/device_components.py:856 +#: netbox/dcim/models/device_components.py:897 msgid "Virtual interfaces cannot have a PoE mode." msgstr "Sanal arabirimler PoE moduna sahip olamaz." -#: netbox/dcim/models/device_components.py:860 +#: netbox/dcim/models/device_components.py:901 msgid "Virtual interfaces cannot have a PoE type." msgstr "Sanal arabirimler PoE tipine sahip olamaz." -#: netbox/dcim/models/device_components.py:866 +#: netbox/dcim/models/device_components.py:907 msgid "Must specify PoE mode when designating a PoE type." msgstr "Bir PoE türü belirlerken PoE modunu belirtmelisiniz." -#: netbox/dcim/models/device_components.py:873 +#: netbox/dcim/models/device_components.py:914 msgid "Wireless role may be set only on wireless interfaces." msgstr "Kablosuz rolü yalnızca kablosuz arayüzlerde ayarlanabilir." -#: netbox/dcim/models/device_components.py:875 +#: netbox/dcim/models/device_components.py:916 msgid "Channel may be set only on wireless interfaces." msgstr "Kanal sadece kablosuz arayüzlerde ayarlanabilir." -#: netbox/dcim/models/device_components.py:881 +#: netbox/dcim/models/device_components.py:922 msgid "Channel frequency may be set only on wireless interfaces." msgstr "Kanal frekansı yalnızca kablosuz arayüzlerde ayarlanabilir." -#: netbox/dcim/models/device_components.py:885 +#: netbox/dcim/models/device_components.py:926 msgid "Cannot specify custom frequency with channel selected." msgstr "Seçili kanal ile özel frekans belirlenemiyor." -#: netbox/dcim/models/device_components.py:891 +#: netbox/dcim/models/device_components.py:932 msgid "Channel width may be set only on wireless interfaces." msgstr "Kanal genişliği yalnızca kablosuz arayüzlerde ayarlanabilir." -#: netbox/dcim/models/device_components.py:893 +#: netbox/dcim/models/device_components.py:934 msgid "Cannot specify custom width with channel selected." msgstr "Seçili kanal ile özel genişlik belirlenemiyor." -#: netbox/dcim/models/device_components.py:901 +#: netbox/dcim/models/device_components.py:938 +msgid "Interface mode does not support an untagged vlan." +msgstr "Arayüz modu etiketsiz bir vlan'ı desteklemez." + +#: netbox/dcim/models/device_components.py:944 #, python-brace-format msgid "" "The untagged VLAN ({untagged_vlan}) must belong to the same site as the " @@ -5736,24 +6257,24 @@ msgstr "" "Etiketlenmemiş VLAN ({untagged_vlan}) arayüzün ana cihazıyla aynı siteye ait" " olmalı veya global olmalıdır." -#: netbox/dcim/models/device_components.py:990 +#: netbox/dcim/models/device_components.py:1041 msgid "Mapped position on corresponding rear port" msgstr "İlgili arka bağlantı noktasında eşlenmiş konum" -#: netbox/dcim/models/device_components.py:1006 +#: netbox/dcim/models/device_components.py:1057 msgid "front port" msgstr "ön bağlantı noktası" -#: netbox/dcim/models/device_components.py:1007 +#: netbox/dcim/models/device_components.py:1058 msgid "front ports" msgstr "ön bağlantı noktaları" -#: netbox/dcim/models/device_components.py:1021 +#: netbox/dcim/models/device_components.py:1069 #, python-brace-format msgid "Rear port ({rear_port}) must belong to the same device" msgstr "Arka bağlantı noktası ({rear_port}) aynı cihaza ait olmalıdır" -#: netbox/dcim/models/device_components.py:1029 +#: netbox/dcim/models/device_components.py:1077 #, python-brace-format msgid "" "Invalid rear port position ({rear_port_position}): Rear port {name} has only" @@ -5762,19 +6283,19 @@ msgstr "" "Geçersiz arka bağlantı noktası konumu ({rear_port_position}): Arka bağlantı " "noktası {name} sadece var {positions} pozisyonları." -#: netbox/dcim/models/device_components.py:1059 +#: netbox/dcim/models/device_components.py:1107 msgid "Number of front ports which may be mapped" msgstr "Eşlenebilecek ön bağlantı noktalarının sayısı" -#: netbox/dcim/models/device_components.py:1064 +#: netbox/dcim/models/device_components.py:1112 msgid "rear port" msgstr "arka bağlantı noktası" -#: netbox/dcim/models/device_components.py:1065 +#: netbox/dcim/models/device_components.py:1113 msgid "rear ports" msgstr "arka bağlantı noktaları" -#: netbox/dcim/models/device_components.py:1079 +#: netbox/dcim/models/device_components.py:1124 #, python-brace-format msgid "" "The number of positions cannot be less than the number of mapped front ports" @@ -5783,149 +6304,149 @@ msgstr "" "Konum sayısı, eşlenen ön bağlantı noktalarının sayısından az olamaz " "({frontport_count})" -#: netbox/dcim/models/device_components.py:1120 +#: netbox/dcim/models/device_components.py:1165 msgid "module bay" msgstr "modül yuvası" -#: netbox/dcim/models/device_components.py:1121 +#: netbox/dcim/models/device_components.py:1166 msgid "module bays" msgstr "modül bölmeleri" -#: netbox/dcim/models/device_components.py:1138 -#: netbox/dcim/models/devices.py:1224 +#: netbox/dcim/models/device_components.py:1180 +#: netbox/dcim/models/devices.py:1229 msgid "A module bay cannot belong to a module installed within it." msgstr "Bir modül yuvası, içinde kurulu bir modüle ait olamaz." -#: netbox/dcim/models/device_components.py:1164 +#: netbox/dcim/models/device_components.py:1206 msgid "device bay" msgstr "cihaz yuvası" -#: netbox/dcim/models/device_components.py:1165 +#: netbox/dcim/models/device_components.py:1207 msgid "device bays" msgstr "cihaz yuvaları" -#: netbox/dcim/models/device_components.py:1175 +#: netbox/dcim/models/device_components.py:1214 #, python-brace-format msgid "This type of device ({device_type}) does not support device bays." msgstr "Bu tür bir cihaz ({device_type}) cihaz bölmelerini desteklemez." -#: netbox/dcim/models/device_components.py:1181 +#: netbox/dcim/models/device_components.py:1220 msgid "Cannot install a device into itself." msgstr "Bir cihaz kendi içine yüklenemiyor." -#: netbox/dcim/models/device_components.py:1189 +#: netbox/dcim/models/device_components.py:1228 #, python-brace-format msgid "" "Cannot install the specified device; device is already installed in {bay}." msgstr "Belirtilen cihaz yüklenemiyor; cihaz zaten yüklü {bay}." -#: netbox/dcim/models/device_components.py:1210 +#: netbox/dcim/models/device_components.py:1249 msgid "inventory item role" msgstr "envanter kalemi rolü" -#: netbox/dcim/models/device_components.py:1211 +#: netbox/dcim/models/device_components.py:1250 msgid "inventory item roles" msgstr "envanter kalemi rolleri" -#: netbox/dcim/models/device_components.py:1268 -#: netbox/dcim/models/devices.py:607 netbox/dcim/models/devices.py:1181 -#: netbox/dcim/models/racks.py:313 -#: netbox/virtualization/models/virtualmachines.py:131 +#: netbox/dcim/models/device_components.py:1310 +#: netbox/dcim/models/devices.py:598 netbox/dcim/models/devices.py:1189 +#: netbox/dcim/models/racks.py:304 +#: netbox/virtualization/models/virtualmachines.py:126 msgid "serial number" msgstr "seri numarası" -#: netbox/dcim/models/device_components.py:1276 -#: netbox/dcim/models/devices.py:615 netbox/dcim/models/devices.py:1188 -#: netbox/dcim/models/racks.py:320 +#: netbox/dcim/models/device_components.py:1318 +#: netbox/dcim/models/devices.py:606 netbox/dcim/models/devices.py:1196 +#: netbox/dcim/models/racks.py:311 msgid "asset tag" msgstr "varlık etiketi" -#: netbox/dcim/models/device_components.py:1277 +#: netbox/dcim/models/device_components.py:1319 msgid "A unique tag used to identify this item" msgstr "Bu öğeyi tanımlamak için kullanılan benzersiz bir etiket" -#: netbox/dcim/models/device_components.py:1280 +#: netbox/dcim/models/device_components.py:1322 msgid "discovered" msgstr "keşfedilen" -#: netbox/dcim/models/device_components.py:1282 +#: netbox/dcim/models/device_components.py:1324 msgid "This item was automatically discovered" msgstr "Bu öğe otomatik olarak keşfedildi" -#: netbox/dcim/models/device_components.py:1300 +#: netbox/dcim/models/device_components.py:1342 msgid "inventory item" msgstr "envanter kalemi" -#: netbox/dcim/models/device_components.py:1301 +#: netbox/dcim/models/device_components.py:1343 msgid "inventory items" msgstr "envanter kalemleri" -#: netbox/dcim/models/device_components.py:1312 +#: netbox/dcim/models/device_components.py:1351 msgid "Cannot assign self as parent." msgstr "Kendisi ebeveyn olarak atanamıyor." -#: netbox/dcim/models/device_components.py:1320 +#: netbox/dcim/models/device_components.py:1359 msgid "Parent inventory item does not belong to the same device." msgstr "Ana envanter kalemi aynı cihaza ait değildir." -#: netbox/dcim/models/device_components.py:1326 +#: netbox/dcim/models/device_components.py:1365 msgid "Cannot move an inventory item with dependent children" msgstr "Bağımlı çocuklarla bir envanter öğesi taşınamıyor" -#: netbox/dcim/models/device_components.py:1334 +#: netbox/dcim/models/device_components.py:1373 msgid "Cannot assign inventory item to component on another device" msgstr "Başka bir cihazdaki bileşene envanter öğesi atanamıyor" -#: netbox/dcim/models/devices.py:54 +#: netbox/dcim/models/devices.py:59 msgid "manufacturer" msgstr "üretici firma" -#: netbox/dcim/models/devices.py:55 +#: netbox/dcim/models/devices.py:60 msgid "manufacturers" msgstr "üreticiler" -#: netbox/dcim/models/devices.py:82 netbox/dcim/models/devices.py:382 +#: netbox/dcim/models/devices.py:84 netbox/dcim/models/devices.py:383 #: netbox/dcim/models/racks.py:133 msgid "model" msgstr "model" -#: netbox/dcim/models/devices.py:95 +#: netbox/dcim/models/devices.py:97 msgid "default platform" msgstr "varsayılan platform" -#: netbox/dcim/models/devices.py:98 netbox/dcim/models/devices.py:386 +#: netbox/dcim/models/devices.py:100 netbox/dcim/models/devices.py:387 msgid "part number" msgstr "parça numarası" -#: netbox/dcim/models/devices.py:101 netbox/dcim/models/devices.py:389 +#: netbox/dcim/models/devices.py:103 netbox/dcim/models/devices.py:390 msgid "Discrete part number (optional)" msgstr "Ayrık parça numarası (isteğe bağlı)" -#: netbox/dcim/models/devices.py:107 netbox/dcim/models/racks.py:54 +#: netbox/dcim/models/devices.py:109 netbox/dcim/models/racks.py:53 msgid "height (U)" msgstr "yükseklik (U)" -#: netbox/dcim/models/devices.py:111 +#: netbox/dcim/models/devices.py:113 msgid "exclude from utilization" msgstr "kullanımdan hariç tut" -#: netbox/dcim/models/devices.py:112 +#: netbox/dcim/models/devices.py:114 msgid "Devices of this type are excluded when calculating rack utilization." msgstr "Raf kullanımı hesaplanırken bu tip cihazlar hariç tutulur." -#: netbox/dcim/models/devices.py:116 +#: netbox/dcim/models/devices.py:118 msgid "is full depth" msgstr "tam derinliktir" -#: netbox/dcim/models/devices.py:117 +#: netbox/dcim/models/devices.py:119 msgid "Device consumes both front and rear rack faces." msgstr "Cihaz hem ön hem de arka kabin yüzlerini tüketir." -#: netbox/dcim/models/devices.py:123 +#: netbox/dcim/models/devices.py:126 msgid "parent/child status" msgstr "ebeveyn/çocuk durumu" -#: netbox/dcim/models/devices.py:124 +#: netbox/dcim/models/devices.py:127 msgid "" "Parent devices house child devices in device bays. Leave blank if this " "device type is neither a parent nor a child." @@ -5933,24 +6454,24 @@ msgstr "" "Ana cihazlar, alt cihazarı cihaz yuvalarında barındırır. Bu cihaz türü ana " "veya alt cihaz değilse boş bırakın." -#: netbox/dcim/models/devices.py:128 netbox/dcim/models/devices.py:392 -#: netbox/dcim/models/devices.py:659 netbox/dcim/models/racks.py:324 +#: netbox/dcim/models/devices.py:131 netbox/dcim/models/devices.py:393 +#: netbox/dcim/models/devices.py:651 netbox/dcim/models/racks.py:315 msgid "airflow" msgstr "hava akımı" -#: netbox/dcim/models/devices.py:204 +#: netbox/dcim/models/devices.py:208 msgid "device type" msgstr "cihaz tipi" -#: netbox/dcim/models/devices.py:205 +#: netbox/dcim/models/devices.py:209 msgid "device types" msgstr "cihaz türleri" -#: netbox/dcim/models/devices.py:290 +#: netbox/dcim/models/devices.py:291 msgid "U height must be in increments of 0.5 rack units." msgstr "U yüksekliği 0,5 raf ünitesi artışlarla olmalıdır." -#: netbox/dcim/models/devices.py:307 +#: netbox/dcim/models/devices.py:308 #, python-brace-format msgid "" "Device {device} in rack {rack} does not have sufficient space to accommodate" @@ -5959,7 +6480,7 @@ msgstr "" "{rack} kabininde {device} cihazını {height}U yüksekliğinde barındırmak için " "yeterli alan bulunmamaktadır" -#: netbox/dcim/models/devices.py:322 +#: netbox/dcim/models/devices.py:323 #, python-brace-format msgid "" "Unable to set 0U height: Found {racked_instance_count} " @@ -5969,7 +6490,7 @@ msgstr "" "href=\"{url}\">{racked_instance_count} örnekler zaten raflara monte " "edilmiştir." -#: netbox/dcim/models/devices.py:331 +#: netbox/dcim/models/devices.py:332 msgid "" "Must delete all device bay templates associated with this device before " "declassifying it as a parent device." @@ -5977,164 +6498,164 @@ msgstr "" "Ana cihaz olarak sınıflandırmadan önce bu cihazla ilişkili tüm cihaz yuvası " "şablonlarını silmeniz gerekir." -#: netbox/dcim/models/devices.py:337 +#: netbox/dcim/models/devices.py:338 msgid "Child device types must be 0U." msgstr "Çocuk cihaz türleri 0U olmalıdır." -#: netbox/dcim/models/devices.py:411 +#: netbox/dcim/models/devices.py:413 msgid "module type" msgstr "modül tipi" -#: netbox/dcim/models/devices.py:412 +#: netbox/dcim/models/devices.py:414 msgid "module types" msgstr "modül türleri" -#: netbox/dcim/models/devices.py:485 +#: netbox/dcim/models/devices.py:484 msgid "Virtual machines may be assigned to this role" msgstr "Sanal makineler bu role atanabilir" -#: netbox/dcim/models/devices.py:497 +#: netbox/dcim/models/devices.py:496 msgid "device role" msgstr "cihaz rolü" -#: netbox/dcim/models/devices.py:498 +#: netbox/dcim/models/devices.py:497 msgid "device roles" msgstr "cihaz rolleri" -#: netbox/dcim/models/devices.py:515 +#: netbox/dcim/models/devices.py:511 msgid "Optionally limit this platform to devices of a certain manufacturer" msgstr "" "İsteğe bağlı olarak bu platformu belirli bir üreticinin cihazlarıyla " "sınırlayın" -#: netbox/dcim/models/devices.py:527 +#: netbox/dcim/models/devices.py:523 msgid "platform" msgstr "platform" -#: netbox/dcim/models/devices.py:528 +#: netbox/dcim/models/devices.py:524 msgid "platforms" msgstr "platformlar" -#: netbox/dcim/models/devices.py:576 +#: netbox/dcim/models/devices.py:572 msgid "The function this device serves" msgstr "Bu cihazın hizmet ettiği işlev" -#: netbox/dcim/models/devices.py:608 +#: netbox/dcim/models/devices.py:599 msgid "Chassis serial number, assigned by the manufacturer" msgstr "Üretici tarafından atanan şasi seri numarası" -#: netbox/dcim/models/devices.py:616 netbox/dcim/models/devices.py:1189 +#: netbox/dcim/models/devices.py:607 netbox/dcim/models/devices.py:1197 msgid "A unique tag used to identify this device" msgstr "Bu cihazı tanımlamak için kullanılan benzersiz bir etiket" -#: netbox/dcim/models/devices.py:643 +#: netbox/dcim/models/devices.py:634 msgid "position (U)" msgstr "pozisyon (U)" -#: netbox/dcim/models/devices.py:650 +#: netbox/dcim/models/devices.py:642 msgid "rack face" msgstr "raf yüzü" -#: netbox/dcim/models/devices.py:670 netbox/dcim/models/devices.py:1420 -#: netbox/virtualization/models/virtualmachines.py:100 +#: netbox/dcim/models/devices.py:663 netbox/dcim/models/devices.py:1425 +#: netbox/virtualization/models/virtualmachines.py:95 msgid "primary IPv4" msgstr "birincil IPv4" -#: netbox/dcim/models/devices.py:678 netbox/dcim/models/devices.py:1428 -#: netbox/virtualization/models/virtualmachines.py:108 +#: netbox/dcim/models/devices.py:671 netbox/dcim/models/devices.py:1433 +#: netbox/virtualization/models/virtualmachines.py:103 msgid "primary IPv6" msgstr "birincil IPv6" -#: netbox/dcim/models/devices.py:686 +#: netbox/dcim/models/devices.py:679 msgid "out-of-band IP" msgstr "bant dışı IP" -#: netbox/dcim/models/devices.py:703 +#: netbox/dcim/models/devices.py:696 msgid "VC position" msgstr "VC pozisyonu" -#: netbox/dcim/models/devices.py:706 +#: netbox/dcim/models/devices.py:699 msgid "Virtual chassis position" msgstr "Sanal şasi konumu" -#: netbox/dcim/models/devices.py:709 +#: netbox/dcim/models/devices.py:702 msgid "VC priority" msgstr "VC önceliği" -#: netbox/dcim/models/devices.py:713 +#: netbox/dcim/models/devices.py:706 msgid "Virtual chassis master election priority" msgstr "Sanal şasi ana seçim önceliği" -#: netbox/dcim/models/devices.py:716 netbox/dcim/models/sites.py:207 +#: netbox/dcim/models/devices.py:709 netbox/dcim/models/sites.py:208 msgid "latitude" msgstr "enlem" -#: netbox/dcim/models/devices.py:721 netbox/dcim/models/devices.py:729 -#: netbox/dcim/models/sites.py:212 netbox/dcim/models/sites.py:220 +#: netbox/dcim/models/devices.py:714 netbox/dcim/models/devices.py:722 +#: netbox/dcim/models/sites.py:213 netbox/dcim/models/sites.py:221 msgid "GPS coordinate in decimal format (xx.yyyyyy)" msgstr "Ondalık formatta GPS koordinatı (xx.yyyyyy)" -#: netbox/dcim/models/devices.py:724 netbox/dcim/models/sites.py:215 +#: netbox/dcim/models/devices.py:717 netbox/dcim/models/sites.py:216 msgid "longitude" msgstr "boylam" -#: netbox/dcim/models/devices.py:797 +#: netbox/dcim/models/devices.py:790 msgid "Device name must be unique per site." msgstr "Aygıt adı site başına benzersiz olmalıdır." -#: netbox/dcim/models/devices.py:808 netbox/ipam/models/services.py:75 +#: netbox/dcim/models/devices.py:801 netbox/ipam/models/services.py:71 msgid "device" msgstr "cihaz" -#: netbox/dcim/models/devices.py:809 +#: netbox/dcim/models/devices.py:802 msgid "devices" msgstr "cihazlar" -#: netbox/dcim/models/devices.py:835 +#: netbox/dcim/models/devices.py:821 #, python-brace-format msgid "Rack {rack} does not belong to site {site}." msgstr "Raf {rack} siteye ait değil {site}." -#: netbox/dcim/models/devices.py:840 +#: netbox/dcim/models/devices.py:826 #, python-brace-format msgid "Location {location} does not belong to site {site}." msgstr "{location} Konum {site} adlı siteye ait değil." -#: netbox/dcim/models/devices.py:846 +#: netbox/dcim/models/devices.py:832 #, python-brace-format msgid "Rack {rack} does not belong to location {location}." msgstr "{rack} rafı {location} adlı konuma ait değil." -#: netbox/dcim/models/devices.py:853 +#: netbox/dcim/models/devices.py:839 msgid "Cannot select a rack face without assigning a rack." msgstr "Bir raf atamadan raf yüzü seçilemez." -#: netbox/dcim/models/devices.py:857 +#: netbox/dcim/models/devices.py:843 msgid "Cannot select a rack position without assigning a rack." msgstr "Bir raf atamadan raf konumu seçilemez." -#: netbox/dcim/models/devices.py:863 +#: netbox/dcim/models/devices.py:849 msgid "Position must be in increments of 0.5 rack units." msgstr "Konum 0,5 raf ünitesinin artışlarında olmalıdır." -#: netbox/dcim/models/devices.py:867 +#: netbox/dcim/models/devices.py:853 msgid "Must specify rack face when defining rack position." msgstr "Raf konumunu tanımlarken raf yüzü belirtilmelidir." -#: netbox/dcim/models/devices.py:875 +#: netbox/dcim/models/devices.py:861 #, python-brace-format msgid "" "A 0U device type ({device_type}) cannot be assigned to a rack position." msgstr "Bir 0U cihaz tipi ({device_type}) bir raf konumuna atanamaz." -#: netbox/dcim/models/devices.py:886 +#: netbox/dcim/models/devices.py:872 msgid "" "Child device types cannot be assigned to a rack face. This is an attribute " "of the parent device." msgstr "" "Alt aygıt türleri bir raf yüzüne atanamaz. Bu, ana cihazın bir özelliğidir." -#: netbox/dcim/models/devices.py:893 +#: netbox/dcim/models/devices.py:879 msgid "" "Child device types cannot be assigned to a rack position. This is an " "attribute of the parent device." @@ -6142,7 +6663,7 @@ msgstr "" "Alt aygıt türleri bir raf konumuna atanamaz. Bu, ana aygıtın bir " "özelliğidir." -#: netbox/dcim/models/devices.py:907 +#: netbox/dcim/models/devices.py:893 #, python-brace-format msgid "" "U{position} is already occupied or does not have sufficient space to " @@ -6151,22 +6672,22 @@ msgstr "" "U{position} zaten işgal edilmiş veya bu cihaz tipini barındırmak için " "yeterli alana sahip değil: {device_type} ({u_height}U)" -#: netbox/dcim/models/devices.py:922 +#: netbox/dcim/models/devices.py:908 #, python-brace-format msgid "{ip} is not an IPv4 address." msgstr "{ip} Bu bir IPv4 adresi değildir." -#: netbox/dcim/models/devices.py:931 netbox/dcim/models/devices.py:946 +#: netbox/dcim/models/devices.py:920 netbox/dcim/models/devices.py:938 #, python-brace-format msgid "The specified IP address ({ip}) is not assigned to this device." msgstr "Belirtilen IP adresi ({ip}) bu cihaza atanmamıştır." -#: netbox/dcim/models/devices.py:937 +#: netbox/dcim/models/devices.py:926 #, python-brace-format msgid "{ip} is not an IPv6 address." msgstr "{ip} Bu bir IPv6 adresi değildir." -#: netbox/dcim/models/devices.py:964 +#: netbox/dcim/models/devices.py:956 #, python-brace-format msgid "" "The assigned platform is limited to {platform_manufacturer} device types, " @@ -6175,12 +6696,17 @@ msgstr "" "Atanan platform aşağıdakilerle sınırlıdır {platform_manufacturer} cihaz " "türleri, ancak bu cihazın türü şunlara aittir {devicetype_manufacturer}." -#: netbox/dcim/models/devices.py:975 +#: netbox/dcim/models/devices.py:967 #, python-brace-format msgid "The assigned cluster belongs to a different site ({site})" msgstr "Atanan küme farklı bir siteye aittir ({site})" -#: netbox/dcim/models/devices.py:983 +#: netbox/dcim/models/devices.py:974 +#, python-brace-format +msgid "The assigned cluster belongs to a different location ({location})" +msgstr "Atanan küme farklı bir konuma aittir ({location})" + +#: netbox/dcim/models/devices.py:982 msgid "A device assigned to a virtual chassis must have its position defined." msgstr "Sanal bir kasaya atanan bir aygıtın konumu tanımlanmış olmalıdır." @@ -6193,36 +6719,36 @@ msgstr "" "Cihaz sanal kasadan kaldırılamıyor {virtual_chassis} çünkü şu anda efendisi " "olarak belirlenmiştir." -#: netbox/dcim/models/devices.py:1196 +#: netbox/dcim/models/devices.py:1204 msgid "module" msgstr "modül" -#: netbox/dcim/models/devices.py:1197 +#: netbox/dcim/models/devices.py:1205 msgid "modules" msgstr "modülleri" -#: netbox/dcim/models/devices.py:1213 +#: netbox/dcim/models/devices.py:1218 #, python-brace-format msgid "" "Module must be installed within a module bay belonging to the assigned " "device ({device})." msgstr "Modül, atanan cihaza ait bir modül bölmesine kurulmalıdır ({device})." -#: netbox/dcim/models/devices.py:1339 +#: netbox/dcim/models/devices.py:1346 msgid "domain" msgstr "domain" -#: netbox/dcim/models/devices.py:1352 netbox/dcim/models/devices.py:1353 +#: netbox/dcim/models/devices.py:1359 netbox/dcim/models/devices.py:1360 msgid "virtual chassis" msgstr "sanal kasa" -#: netbox/dcim/models/devices.py:1368 +#: netbox/dcim/models/devices.py:1372 #, python-brace-format msgid "" "The selected master ({master}) is not assigned to this virtual chassis." msgstr "Seçilen usta ({master}) bu sanal kasaya atanmamıştır." -#: netbox/dcim/models/devices.py:1384 +#: netbox/dcim/models/devices.py:1388 #, python-brace-format msgid "" "Unable to delete virtual chassis {self}. There are member interfaces which " @@ -6231,50 +6757,61 @@ msgstr "" "Sanal kasa silinemiyor {self}. Çapraz şasi LAG arabirimleri oluşturan üye " "arayüzleri vardır." -#: netbox/dcim/models/devices.py:1409 netbox/vpn/models/l2vpn.py:37 +#: netbox/dcim/models/devices.py:1414 netbox/vpn/models/l2vpn.py:37 msgid "identifier" msgstr "belirlemek" -#: netbox/dcim/models/devices.py:1410 +#: netbox/dcim/models/devices.py:1415 msgid "Numeric identifier unique to the parent device" msgstr "Ana aygıta benzersiz sayısal tanımlayıcı" -#: netbox/dcim/models/devices.py:1438 netbox/extras/models/customfields.py:225 +#: netbox/dcim/models/devices.py:1443 netbox/extras/models/customfields.py:225 #: netbox/extras/models/models.py:107 netbox/extras/models/models.py:694 -#: netbox/netbox/models/__init__.py:115 +#: netbox/netbox/models/__init__.py:120 msgid "comments" msgstr "yorumlar" -#: netbox/dcim/models/devices.py:1454 +#: netbox/dcim/models/devices.py:1459 msgid "virtual device context" msgstr "sanal cihaz bağlamı" -#: netbox/dcim/models/devices.py:1455 +#: netbox/dcim/models/devices.py:1460 msgid "virtual device contexts" msgstr "sanal cihaz bağlamları" -#: netbox/dcim/models/devices.py:1487 +#: netbox/dcim/models/devices.py:1489 #, python-brace-format msgid "{ip} is not an IPv{family} address." msgstr "{ip} IPV değil{family} adres." -#: netbox/dcim/models/devices.py:1493 +#: netbox/dcim/models/devices.py:1495 msgid "Primary IP address must belong to an interface on the assigned device." msgstr "Birincil IP adresi, atanan cihazdaki bir arayüze ait olmalıdır." -#: netbox/dcim/models/mixins.py:15 netbox/extras/models/configs.py:41 -#: netbox/extras/models/models.py:313 netbox/extras/models/models.py:522 -#: netbox/extras/models/search.py:48 netbox/ipam/models/ip.py:194 -msgid "weight" -msgstr "ağırlık" +#: netbox/dcim/models/devices.py:1527 +msgid "MAC addresses" +msgstr "MAC adresleri" -#: netbox/dcim/models/mixins.py:22 -msgid "weight unit" -msgstr "ağırlık birimi" +#: netbox/dcim/models/devices.py:1559 +msgid "" +"Cannot unassign MAC Address while it is designated as the primary MAC for an" +" object" +msgstr "" +"Bir nesne için birincil MAC olarak belirlenmişken MAC Adresi atanması " +"kaldırılamıyor" -#: netbox/dcim/models/mixins.py:51 -msgid "Must specify a unit when setting a weight" -msgstr "Ağırlık ayarlarken bir birim belirtmelisiniz" +#: netbox/dcim/models/devices.py:1563 +msgid "" +"Cannot reassign MAC Address while it is designated as the primary MAC for an" +" object" +msgstr "" +"Bir nesne için birincil MAC olarak belirlenirken MAC Adresi yeniden " +"atanamıyor" + +#: netbox/dcim/models/mixins.py:94 +#, python-brace-format +msgid "Please select a {scope_type}." +msgstr "Lütfen bir seçin {scope_type}." #: netbox/dcim/models/power.py:55 msgid "power panel" @@ -6284,49 +6821,49 @@ msgstr "güç paneli" msgid "power panels" msgstr "güç panelleri" -#: netbox/dcim/models/power.py:70 +#: netbox/dcim/models/power.py:67 #, python-brace-format msgid "" "Location {location} ({location_site}) is in a different site than {site}" msgstr "{location} ({location_site}) adlı konum, {site} adlı sitede değil." -#: netbox/dcim/models/power.py:108 +#: netbox/dcim/models/power.py:106 msgid "supply" msgstr "sağlamak" -#: netbox/dcim/models/power.py:114 +#: netbox/dcim/models/power.py:112 msgid "phase" msgstr "faz" -#: netbox/dcim/models/power.py:120 +#: netbox/dcim/models/power.py:118 msgid "voltage" msgstr "voltaj" -#: netbox/dcim/models/power.py:125 +#: netbox/dcim/models/power.py:123 msgid "amperage" msgstr "amper" -#: netbox/dcim/models/power.py:130 +#: netbox/dcim/models/power.py:128 msgid "max utilization" msgstr "maksimum kullanım" -#: netbox/dcim/models/power.py:133 +#: netbox/dcim/models/power.py:131 msgid "Maximum permissible draw (percentage)" msgstr "İzin verilen maksimum çekiliş (yüzde)" -#: netbox/dcim/models/power.py:136 +#: netbox/dcim/models/power.py:134 msgid "available power" msgstr "mevcut güç" -#: netbox/dcim/models/power.py:164 +#: netbox/dcim/models/power.py:162 msgid "power feed" msgstr "güç beslemesi" -#: netbox/dcim/models/power.py:165 +#: netbox/dcim/models/power.py:163 msgid "power feeds" msgstr "güç beslemeleri" -#: netbox/dcim/models/power.py:179 +#: netbox/dcim/models/power.py:174 #, python-brace-format msgid "" "Rack {rack} ({rack_site}) and power panel {powerpanel} ({powerpanel_site}) " @@ -6335,55 +6872,55 @@ msgstr "" "Raf {rack} ({rack_site}) ve güç paneli {powerpanel} ({powerpanel_site}) " "farklı sitelerdedir." -#: netbox/dcim/models/power.py:190 +#: netbox/dcim/models/power.py:185 msgid "Voltage cannot be negative for AC supply" msgstr "AC beslemesi için voltaj negatif olamaz" -#: netbox/dcim/models/racks.py:47 +#: netbox/dcim/models/racks.py:46 msgid "width" msgstr "genişlik" -#: netbox/dcim/models/racks.py:48 +#: netbox/dcim/models/racks.py:47 msgid "Rail-to-rail width" msgstr "Ray-ray genişliği" -#: netbox/dcim/models/racks.py:56 +#: netbox/dcim/models/racks.py:55 msgid "Height in rack units" msgstr "Raf ünitelerinde yükseklik" -#: netbox/dcim/models/racks.py:60 +#: netbox/dcim/models/racks.py:59 msgid "starting unit" msgstr "başlangıç ünitesi" -#: netbox/dcim/models/racks.py:62 +#: netbox/dcim/models/racks.py:61 msgid "Starting unit for rack" msgstr "Raf için başlangıç ünitesi" -#: netbox/dcim/models/racks.py:66 +#: netbox/dcim/models/racks.py:65 msgid "descending units" msgstr "azalan birimler" -#: netbox/dcim/models/racks.py:67 +#: netbox/dcim/models/racks.py:66 msgid "Units are numbered top-to-bottom" msgstr "Birimler yukarıdan aşağıya numaralandırılmıştır" -#: netbox/dcim/models/racks.py:72 +#: netbox/dcim/models/racks.py:71 msgid "outer width" msgstr "dış genişlik" -#: netbox/dcim/models/racks.py:75 +#: netbox/dcim/models/racks.py:74 msgid "Outer dimension of rack (width)" msgstr "Rafın dış boyutu (genişlik)" -#: netbox/dcim/models/racks.py:78 +#: netbox/dcim/models/racks.py:77 msgid "outer depth" msgstr "dış derinlik" -#: netbox/dcim/models/racks.py:81 +#: netbox/dcim/models/racks.py:80 msgid "Outer dimension of rack (depth)" msgstr "Rafın dış boyutu (derinlik)" -#: netbox/dcim/models/racks.py:84 +#: netbox/dcim/models/racks.py:83 msgid "outer unit" msgstr "dış ünite" @@ -6407,7 +6944,7 @@ msgstr "maksimum ağırlık" msgid "Maximum load capacity for the rack" msgstr "Raf için maksimum yük kapasitesi" -#: netbox/dcim/models/racks.py:125 netbox/dcim/models/racks.py:252 +#: netbox/dcim/models/racks.py:125 netbox/dcim/models/racks.py:247 msgid "form factor" msgstr "form faktörü" @@ -6419,55 +6956,55 @@ msgstr "raf tipi" msgid "rack types" msgstr "raf türleri" -#: netbox/dcim/models/racks.py:180 netbox/dcim/models/racks.py:379 +#: netbox/dcim/models/racks.py:177 netbox/dcim/models/racks.py:368 msgid "Must specify a unit when setting an outer width/depth" msgstr "Dış genişlik/derinlik ayarlarken bir birim belirtmelidir" -#: netbox/dcim/models/racks.py:184 netbox/dcim/models/racks.py:383 +#: netbox/dcim/models/racks.py:181 netbox/dcim/models/racks.py:372 msgid "Must specify a unit when setting a maximum weight" msgstr "Maksimum ağırlık ayarlarken bir birim belirtmelisiniz" -#: netbox/dcim/models/racks.py:230 +#: netbox/dcim/models/racks.py:227 msgid "rack role" msgstr "raf rolü" -#: netbox/dcim/models/racks.py:231 +#: netbox/dcim/models/racks.py:228 msgid "rack roles" msgstr "raf rolleri" -#: netbox/dcim/models/racks.py:274 +#: netbox/dcim/models/racks.py:265 msgid "facility ID" msgstr "tesis kimliği" -#: netbox/dcim/models/racks.py:275 +#: netbox/dcim/models/racks.py:266 msgid "Locally-assigned identifier" msgstr "Yerel olarak atanmış tanımlayıcı" -#: netbox/dcim/models/racks.py:308 netbox/ipam/forms/bulk_import.py:201 -#: netbox/ipam/forms/bulk_import.py:266 netbox/ipam/forms/bulk_import.py:301 -#: netbox/ipam/forms/bulk_import.py:483 -#: netbox/virtualization/forms/bulk_import.py:112 +#: netbox/dcim/models/racks.py:299 netbox/ipam/forms/bulk_import.py:197 +#: netbox/ipam/forms/bulk_import.py:265 netbox/ipam/forms/bulk_import.py:300 +#: netbox/ipam/forms/bulk_import.py:482 +#: netbox/virtualization/forms/bulk_import.py:118 msgid "Functional role" msgstr "Fonksiyonel rol" -#: netbox/dcim/models/racks.py:321 +#: netbox/dcim/models/racks.py:312 msgid "A unique tag used to identify this rack" msgstr "Bu rafı tanımlamak için kullanılan benzersiz bir etiket" -#: netbox/dcim/models/racks.py:359 +#: netbox/dcim/models/racks.py:351 msgid "rack" msgstr "raf" -#: netbox/dcim/models/racks.py:360 +#: netbox/dcim/models/racks.py:352 msgid "racks" msgstr "rafları" -#: netbox/dcim/models/racks.py:375 +#: netbox/dcim/models/racks.py:364 #, python-brace-format msgid "Assigned location must belong to parent site ({site})." msgstr "Atanan konum üst siteye ait olmalıdır ({site})." -#: netbox/dcim/models/racks.py:393 +#: netbox/dcim/models/racks.py:387 #, python-brace-format msgid "" "Rack must be at least {min_height}U tall to house currently installed " @@ -6476,7 +7013,7 @@ msgstr "" "Raf en az olmalıdır {min_height}Şu anda yüklü cihazları barındırmak için " "yeterli." -#: netbox/dcim/models/racks.py:400 +#: netbox/dcim/models/racks.py:396 #, python-brace-format msgid "" "Rack unit numbering must begin at {position} or less to house currently " @@ -6485,118 +7022,118 @@ msgstr "" "Raf ünitesi numaralandırması şu adreste başlamalıdır: {position} veya şu " "anda yüklü cihazları barındırmak için daha az." -#: netbox/dcim/models/racks.py:408 +#: netbox/dcim/models/racks.py:404 #, python-brace-format msgid "Location must be from the same site, {site}." msgstr "Konum aynı siteden olmalı, {site}." -#: netbox/dcim/models/racks.py:670 +#: netbox/dcim/models/racks.py:666 msgid "units" msgstr "birimler" -#: netbox/dcim/models/racks.py:696 +#: netbox/dcim/models/racks.py:692 msgid "rack reservation" msgstr "raf rezervasyonu" -#: netbox/dcim/models/racks.py:697 +#: netbox/dcim/models/racks.py:693 msgid "rack reservations" msgstr "raf rezervasyonları" -#: netbox/dcim/models/racks.py:714 +#: netbox/dcim/models/racks.py:707 #, python-brace-format msgid "Invalid unit(s) for {height}U rack: {unit_list}" msgstr "Geçersiz birim (ler) i {height}U rafı: {unit_list}" -#: netbox/dcim/models/racks.py:727 +#: netbox/dcim/models/racks.py:720 #, python-brace-format msgid "The following units have already been reserved: {unit_list}" msgstr "Aşağıdaki birimler zaten rezerve edilmiştir: {unit_list}" -#: netbox/dcim/models/sites.py:49 +#: netbox/dcim/models/sites.py:53 msgid "A top-level region with this name already exists." msgstr "Bu ada sahip üst düzey bir bölge zaten var." -#: netbox/dcim/models/sites.py:59 +#: netbox/dcim/models/sites.py:63 msgid "A top-level region with this slug already exists." msgstr "Bu kısa adı içeren üst düzey bir bölge zaten var." -#: netbox/dcim/models/sites.py:62 +#: netbox/dcim/models/sites.py:66 msgid "region" msgstr "bölge" -#: netbox/dcim/models/sites.py:63 +#: netbox/dcim/models/sites.py:67 msgid "regions" msgstr "bölgeler" -#: netbox/dcim/models/sites.py:102 +#: netbox/dcim/models/sites.py:109 msgid "A top-level site group with this name already exists." msgstr "Bu ada sahip üst düzey bir site grubu zaten var." -#: netbox/dcim/models/sites.py:112 +#: netbox/dcim/models/sites.py:119 msgid "A top-level site group with this slug already exists." msgstr "Bu kısa adı içeren üst düzey bir site grubu zaten var." -#: netbox/dcim/models/sites.py:115 +#: netbox/dcim/models/sites.py:122 msgid "site group" msgstr "site grubu" -#: netbox/dcim/models/sites.py:116 +#: netbox/dcim/models/sites.py:123 msgid "site groups" msgstr "site grupları" -#: netbox/dcim/models/sites.py:141 +#: netbox/dcim/models/sites.py:145 msgid "Full name of the site" msgstr "Sitenin tam adı" -#: netbox/dcim/models/sites.py:181 netbox/dcim/models/sites.py:279 +#: netbox/dcim/models/sites.py:181 netbox/dcim/models/sites.py:283 msgid "facility" msgstr "tesise" -#: netbox/dcim/models/sites.py:184 netbox/dcim/models/sites.py:282 +#: netbox/dcim/models/sites.py:184 netbox/dcim/models/sites.py:286 msgid "Local facility ID or description" msgstr "Yerel tesis kimliği veya açıklaması" -#: netbox/dcim/models/sites.py:195 +#: netbox/dcim/models/sites.py:196 msgid "physical address" msgstr "fiziksel adres" -#: netbox/dcim/models/sites.py:198 +#: netbox/dcim/models/sites.py:199 msgid "Physical location of the building" msgstr "Binanın fiziksel konumu" -#: netbox/dcim/models/sites.py:201 +#: netbox/dcim/models/sites.py:202 msgid "shipping address" msgstr "teslimat adresi" -#: netbox/dcim/models/sites.py:204 +#: netbox/dcim/models/sites.py:205 msgid "If different from the physical address" msgstr "Fiziksel adresden farklıysa" -#: netbox/dcim/models/sites.py:238 +#: netbox/dcim/models/sites.py:245 msgid "site" msgstr "sitesi" -#: netbox/dcim/models/sites.py:239 +#: netbox/dcim/models/sites.py:246 msgid "sites" msgstr "siteler" -#: netbox/dcim/models/sites.py:309 +#: netbox/dcim/models/sites.py:319 msgid "A location with this name already exists within the specified site." msgstr "Belirtilen sitede bu ada sahip bir konum zaten var." -#: netbox/dcim/models/sites.py:319 +#: netbox/dcim/models/sites.py:329 msgid "A location with this slug already exists within the specified site." msgstr "Belirtilen sitede bu kısa ada sahip bir konum zaten var." -#: netbox/dcim/models/sites.py:322 +#: netbox/dcim/models/sites.py:332 msgid "location" msgstr "konum" -#: netbox/dcim/models/sites.py:323 +#: netbox/dcim/models/sites.py:333 msgid "locations" msgstr "konumlar" -#: netbox/dcim/models/sites.py:337 +#: netbox/dcim/models/sites.py:344 #, python-brace-format msgid "Parent location ({parent}) must belong to the same site ({site})." msgstr "Ana konum ({parent}) aynı siteye ({site}) ait olmalıdır." @@ -6609,11 +7146,11 @@ msgstr "Fesih A" msgid "Termination B" msgstr "Sonlandırma B" -#: netbox/dcim/tables/cables.py:66 netbox/wireless/tables/wirelesslink.py:23 +#: netbox/dcim/tables/cables.py:66 netbox/wireless/tables/wirelesslink.py:22 msgid "Device A" msgstr "Aygıt A" -#: netbox/dcim/tables/cables.py:72 netbox/wireless/tables/wirelesslink.py:32 +#: netbox/dcim/tables/cables.py:72 netbox/wireless/tables/wirelesslink.py:31 msgid "Device B" msgstr "Aygıt B" @@ -6647,97 +7184,91 @@ msgstr "Site B" msgid "Reachable" msgstr "Ulaşılabilir" -#: netbox/dcim/tables/devices.py:58 netbox/dcim/tables/devices.py:106 -#: netbox/dcim/tables/racks.py:150 netbox/dcim/tables/sites.py:105 -#: netbox/dcim/tables/sites.py:148 netbox/extras/tables/tables.py:545 +#: netbox/dcim/tables/devices.py:69 netbox/dcim/tables/devices.py:117 +#: netbox/dcim/tables/racks.py:149 netbox/dcim/tables/sites.py:104 +#: netbox/dcim/tables/sites.py:147 netbox/extras/tables/tables.py:545 #: netbox/netbox/navigation/menu.py:69 netbox/netbox/navigation/menu.py:73 #: netbox/netbox/navigation/menu.py:75 #: netbox/virtualization/forms/model_forms.py:122 -#: netbox/virtualization/tables/clusters.py:83 -#: netbox/virtualization/views.py:204 +#: netbox/virtualization/tables/clusters.py:87 +#: netbox/virtualization/views.py:216 msgid "Devices" msgstr "Aygıtlar" -#: netbox/dcim/tables/devices.py:63 netbox/dcim/tables/devices.py:111 -#: netbox/virtualization/tables/clusters.py:88 +#: netbox/dcim/tables/devices.py:74 netbox/dcim/tables/devices.py:122 +#: netbox/virtualization/tables/clusters.py:92 msgid "VMs" msgstr "Sanal Makineler" -#: netbox/dcim/tables/devices.py:100 netbox/dcim/tables/devices.py:216 -#: netbox/extras/forms/model_forms.py:630 +#: netbox/dcim/tables/devices.py:111 netbox/dcim/tables/devices.py:227 +#: netbox/extras/forms/model_forms.py:644 #: netbox/templates/dcim/device.html:112 -#: netbox/templates/dcim/device/render_config.html:11 -#: netbox/templates/dcim/device/render_config.html:14 #: netbox/templates/dcim/devicerole.html:44 #: netbox/templates/dcim/platform.html:41 #: netbox/templates/extras/configtemplate.html:10 +#: netbox/templates/extras/object_render_config.html:12 +#: netbox/templates/extras/object_render_config.html:15 #: netbox/templates/virtualization/virtualmachine.html:48 -#: netbox/templates/virtualization/virtualmachine/render_config.html:11 -#: netbox/templates/virtualization/virtualmachine/render_config.html:14 -#: netbox/virtualization/tables/virtualmachines.py:107 +#: netbox/virtualization/tables/virtualmachines.py:77 msgid "Config Template" msgstr "Yapılandırma Şablonu" -#: netbox/dcim/tables/devices.py:150 netbox/templates/dcim/sitegroup.html:26 -msgid "Site Group" -msgstr "Site Grubu" - -#: netbox/dcim/tables/devices.py:187 netbox/dcim/tables/devices.py:1068 -#: netbox/ipam/forms/bulk_import.py:527 netbox/ipam/forms/model_forms.py:306 -#: netbox/ipam/forms/model_forms.py:319 netbox/ipam/tables/ip.py:356 -#: netbox/ipam/tables/ip.py:423 netbox/ipam/tables/ip.py:446 +#: netbox/dcim/tables/devices.py:198 netbox/dcim/tables/devices.py:1100 +#: netbox/ipam/forms/bulk_import.py:562 netbox/ipam/forms/model_forms.py:316 +#: netbox/ipam/forms/model_forms.py:329 netbox/ipam/tables/ip.py:308 +#: netbox/ipam/tables/ip.py:375 netbox/ipam/tables/ip.py:398 #: netbox/templates/ipam/ipaddress.html:11 -#: netbox/virtualization/tables/virtualmachines.py:95 +#: netbox/virtualization/tables/virtualmachines.py:65 msgid "IP Address" msgstr "IP Adresi" -#: netbox/dcim/tables/devices.py:191 netbox/dcim/tables/devices.py:1072 -#: netbox/virtualization/tables/virtualmachines.py:86 +#: netbox/dcim/tables/devices.py:202 netbox/dcim/tables/devices.py:1104 +#: netbox/virtualization/tables/virtualmachines.py:56 msgid "IPv4 Address" msgstr "IPv4 Adresi" -#: netbox/dcim/tables/devices.py:195 netbox/dcim/tables/devices.py:1076 -#: netbox/virtualization/tables/virtualmachines.py:90 +#: netbox/dcim/tables/devices.py:206 netbox/dcim/tables/devices.py:1108 +#: netbox/virtualization/tables/virtualmachines.py:60 msgid "IPv6 Address" msgstr "IPv6 Adresi" -#: netbox/dcim/tables/devices.py:210 +#: netbox/dcim/tables/devices.py:221 msgid "VC Position" msgstr "VC Pozisyonu" -#: netbox/dcim/tables/devices.py:213 +#: netbox/dcim/tables/devices.py:224 msgid "VC Priority" msgstr "VC Önceliği" -#: netbox/dcim/tables/devices.py:220 netbox/templates/dcim/device_edit.html:38 +#: netbox/dcim/tables/devices.py:231 netbox/templates/dcim/device_edit.html:38 #: netbox/templates/dcim/devicebay_populate.html:16 msgid "Parent Device" msgstr "Ebeveyn Aygıtı" -#: netbox/dcim/tables/devices.py:225 +#: netbox/dcim/tables/devices.py:236 msgid "Position (Device Bay)" msgstr "Konum (Aygıt Yuvası)" -#: netbox/dcim/tables/devices.py:234 +#: netbox/dcim/tables/devices.py:245 msgid "Console ports" msgstr "Konsol bağlantı noktaları" -#: netbox/dcim/tables/devices.py:237 +#: netbox/dcim/tables/devices.py:248 msgid "Console server ports" msgstr "Konsol sunucusu bağlantı noktaları" -#: netbox/dcim/tables/devices.py:240 +#: netbox/dcim/tables/devices.py:251 msgid "Power ports" msgstr "Güç bağlantı noktaları" -#: netbox/dcim/tables/devices.py:243 +#: netbox/dcim/tables/devices.py:254 msgid "Power outlets" msgstr "Elektrik prizleri" -#: netbox/dcim/tables/devices.py:246 netbox/dcim/tables/devices.py:1081 -#: netbox/dcim/tables/devicetypes.py:128 netbox/dcim/views.py:1040 -#: netbox/dcim/views.py:1279 netbox/dcim/views.py:1975 -#: netbox/netbox/navigation/menu.py:94 netbox/netbox/navigation/menu.py:250 +#: netbox/dcim/tables/devices.py:257 netbox/dcim/tables/devices.py:1113 +#: netbox/dcim/tables/devicetypes.py:133 netbox/dcim/views.py:1144 +#: netbox/dcim/views.py:1388 netbox/dcim/views.py:2139 +#: netbox/netbox/navigation/menu.py:94 netbox/netbox/navigation/menu.py:258 #: netbox/templates/dcim/device/base.html:37 #: netbox/templates/dcim/device_list.html:43 #: netbox/templates/dcim/devicetype/base.html:34 @@ -6747,35 +7278,35 @@ msgstr "Elektrik prizleri" #: netbox/templates/dcim/virtualdevicecontext.html:81 #: netbox/templates/virtualization/virtualmachine/base.html:27 #: netbox/templates/virtualization/virtualmachine_list.html:14 -#: netbox/virtualization/tables/virtualmachines.py:101 -#: netbox/virtualization/views.py:364 netbox/wireless/tables/wirelesslan.py:55 +#: netbox/virtualization/tables/virtualmachines.py:71 +#: netbox/virtualization/views.py:381 netbox/wireless/tables/wirelesslan.py:63 msgid "Interfaces" msgstr "Arayüzler" -#: netbox/dcim/tables/devices.py:249 +#: netbox/dcim/tables/devices.py:260 msgid "Front ports" msgstr "Ön bağlantı noktaları" -#: netbox/dcim/tables/devices.py:255 +#: netbox/dcim/tables/devices.py:266 msgid "Device bays" msgstr "Cihaz yuvaları" -#: netbox/dcim/tables/devices.py:258 +#: netbox/dcim/tables/devices.py:269 msgid "Module bays" msgstr "Modül bölmeleri" -#: netbox/dcim/tables/devices.py:261 +#: netbox/dcim/tables/devices.py:272 msgid "Inventory items" msgstr "Envanter kalemleri" -#: netbox/dcim/tables/devices.py:305 netbox/dcim/tables/modules.py:57 +#: netbox/dcim/tables/devices.py:315 netbox/dcim/tables/modules.py:57 #: netbox/templates/dcim/modulebay.html:17 msgid "Module Bay" msgstr "Modül Yuvası" -#: netbox/dcim/tables/devices.py:318 netbox/dcim/tables/devicetypes.py:47 -#: netbox/dcim/tables/devicetypes.py:143 netbox/dcim/views.py:1115 -#: netbox/dcim/views.py:2073 netbox/netbox/navigation/menu.py:103 +#: netbox/dcim/tables/devices.py:328 netbox/dcim/tables/devicetypes.py:52 +#: netbox/dcim/tables/devicetypes.py:148 netbox/dcim/views.py:1219 +#: netbox/dcim/views.py:2237 netbox/netbox/navigation/menu.py:103 #: netbox/templates/dcim/device/base.html:52 #: netbox/templates/dcim/device_list.html:71 #: netbox/templates/dcim/devicetype/base.html:49 @@ -6784,124 +7315,133 @@ msgstr "Modül Yuvası" msgid "Inventory Items" msgstr "Envanter Öğeleri" -#: netbox/dcim/tables/devices.py:333 +#: netbox/dcim/tables/devices.py:343 msgid "Cable Color" msgstr "Kablo Rengi" -#: netbox/dcim/tables/devices.py:339 +#: netbox/dcim/tables/devices.py:349 msgid "Link Peers" msgstr "Meslektaşları Bağla" -#: netbox/dcim/tables/devices.py:342 +#: netbox/dcim/tables/devices.py:352 msgid "Mark Connected" msgstr "Bağlı İşaretle" -#: netbox/dcim/tables/devices.py:461 +#: netbox/dcim/tables/devices.py:471 msgid "Maximum draw (W)" msgstr "Maksimum çekim (W)" -#: netbox/dcim/tables/devices.py:464 +#: netbox/dcim/tables/devices.py:474 msgid "Allocated draw (W)" msgstr "Tahsis edilen çekiliş (W)" -#: netbox/dcim/tables/devices.py:558 netbox/ipam/forms/model_forms.py:734 -#: netbox/ipam/tables/fhrp.py:28 netbox/ipam/views.py:596 -#: netbox/ipam/views.py:696 netbox/netbox/navigation/menu.py:158 -#: netbox/netbox/navigation/menu.py:160 -#: netbox/templates/dcim/interface.html:339 +#: netbox/dcim/tables/devices.py:572 netbox/ipam/forms/model_forms.py:784 +#: netbox/ipam/tables/fhrp.py:28 netbox/ipam/views.py:633 +#: netbox/ipam/views.py:738 netbox/netbox/navigation/menu.py:164 +#: netbox/netbox/navigation/menu.py:166 +#: netbox/templates/dcim/interface.html:396 #: netbox/templates/ipam/ipaddress_bulk_add.html:15 #: netbox/templates/ipam/service.html:40 -#: netbox/templates/virtualization/vminterface.html:85 +#: netbox/templates/virtualization/vminterface.html:101 #: netbox/vpn/tables/tunnels.py:98 msgid "IP Addresses" msgstr "IP Adresleri" -#: netbox/dcim/tables/devices.py:564 netbox/netbox/navigation/menu.py:202 +#: netbox/dcim/tables/devices.py:578 netbox/netbox/navigation/menu.py:210 #: netbox/templates/ipam/inc/panels/fhrp_groups.html:6 msgid "FHRP Groups" msgstr "FHRP Grupları" -#: netbox/dcim/tables/devices.py:576 netbox/templates/dcim/interface.html:89 -#: netbox/templates/virtualization/vminterface.html:67 +#: netbox/dcim/tables/devices.py:590 netbox/templates/dcim/interface.html:95 +#: netbox/templates/virtualization/vminterface.html:59 #: netbox/templates/vpn/tunnel.html:18 #: netbox/templates/vpn/tunneltermination.html:13 #: netbox/vpn/forms/bulk_edit.py:76 netbox/vpn/forms/bulk_import.py:76 #: netbox/vpn/forms/filtersets.py:42 netbox/vpn/forms/filtersets.py:82 -#: netbox/vpn/forms/model_forms.py:60 netbox/vpn/forms/model_forms.py:145 +#: netbox/vpn/forms/model_forms.py:61 netbox/vpn/forms/model_forms.py:146 #: netbox/vpn/tables/tunnels.py:78 msgid "Tunnel" msgstr "Tünel" -#: netbox/dcim/tables/devices.py:604 netbox/dcim/tables/devicetypes.py:227 +#: netbox/dcim/tables/devices.py:626 netbox/dcim/tables/devicetypes.py:234 #: netbox/templates/dcim/interface.html:65 msgid "Management Only" msgstr "Yalnızca Yönetim" -#: netbox/dcim/tables/devices.py:623 +#: netbox/dcim/tables/devices.py:645 msgid "VDCs" msgstr "VDC'ler" -#: netbox/dcim/tables/devices.py:873 netbox/templates/dcim/modulebay.html:53 +#: netbox/dcim/tables/devices.py:652 netbox/templates/dcim/interface.html:163 +msgid "Virtual Circuit" +msgstr "Sanal Devre" + +#: netbox/dcim/tables/devices.py:904 netbox/templates/dcim/modulebay.html:53 msgid "Installed Module" msgstr "Yüklü Modül" -#: netbox/dcim/tables/devices.py:876 +#: netbox/dcim/tables/devices.py:907 msgid "Module Serial" msgstr "Modül Seri" -#: netbox/dcim/tables/devices.py:880 +#: netbox/dcim/tables/devices.py:911 msgid "Module Asset Tag" msgstr "Modül Varlık Etiketi" -#: netbox/dcim/tables/devices.py:889 +#: netbox/dcim/tables/devices.py:920 msgid "Module Status" msgstr "Modül Durumu" -#: netbox/dcim/tables/devices.py:944 netbox/dcim/tables/devicetypes.py:312 -#: netbox/templates/dcim/inventoryitem.html:40 +#: netbox/dcim/tables/devices.py:974 netbox/dcim/tables/devicetypes.py:319 +#: netbox/templates/dcim/inventoryitem.html:44 msgid "Component" msgstr "Bileşen" -#: netbox/dcim/tables/devices.py:1000 +#: netbox/dcim/tables/devices.py:1032 msgid "Items" msgstr "Öğeler" -#: netbox/dcim/tables/devicetypes.py:37 netbox/netbox/navigation/menu.py:84 +#: netbox/dcim/tables/devicetypes.py:37 netbox/netbox/navigation/menu.py:60 +#: netbox/netbox/navigation/menu.py:62 +msgid "Rack Types" +msgstr "Raf Çeşitleri" + +#: netbox/dcim/tables/devicetypes.py:42 netbox/netbox/navigation/menu.py:84 #: netbox/netbox/navigation/menu.py:86 msgid "Device Types" msgstr "Cihaz Türleri" -#: netbox/dcim/tables/devicetypes.py:42 netbox/netbox/navigation/menu.py:87 +#: netbox/dcim/tables/devicetypes.py:47 netbox/netbox/navigation/menu.py:87 msgid "Module Types" msgstr "Modül Çeşitleri" -#: netbox/dcim/tables/devicetypes.py:52 netbox/extras/forms/filtersets.py:371 -#: netbox/extras/forms/model_forms.py:537 netbox/extras/tables/tables.py:540 +#: netbox/dcim/tables/devicetypes.py:57 netbox/extras/forms/filtersets.py:378 +#: netbox/extras/forms/model_forms.py:551 netbox/extras/tables/tables.py:540 #: netbox/netbox/navigation/menu.py:78 msgid "Platforms" msgstr "Platformlar" -#: netbox/dcim/tables/devicetypes.py:84 +#: netbox/dcim/tables/devicetypes.py:89 #: netbox/templates/dcim/devicetype.html:29 msgid "Default Platform" msgstr "Varsayılan Platform" -#: netbox/dcim/tables/devicetypes.py:88 +#: netbox/dcim/tables/devicetypes.py:93 #: netbox/templates/dcim/devicetype.html:45 msgid "Full Depth" msgstr "Tam Derinlik" -#: netbox/dcim/tables/devicetypes.py:98 +#: netbox/dcim/tables/devicetypes.py:103 msgid "U Height" msgstr "U Yüksekliği" -#: netbox/dcim/tables/devicetypes.py:113 netbox/dcim/tables/modules.py:26 +#: netbox/dcim/tables/devicetypes.py:118 netbox/dcim/tables/modules.py:26 #: netbox/dcim/tables/racks.py:89 msgid "Instances" msgstr "Örnekler" -#: netbox/dcim/tables/devicetypes.py:116 netbox/dcim/views.py:980 -#: netbox/dcim/views.py:1219 netbox/dcim/views.py:1911 +#: netbox/dcim/tables/devicetypes.py:121 netbox/dcim/views.py:1084 +#: netbox/dcim/views.py:1328 netbox/dcim/views.py:2075 #: netbox/netbox/navigation/menu.py:97 #: netbox/templates/dcim/device/base.html:25 #: netbox/templates/dcim/device_list.html:15 @@ -6911,8 +7451,8 @@ msgstr "Örnekler" msgid "Console Ports" msgstr "Konsol Bağlantı Noktaları" -#: netbox/dcim/tables/devicetypes.py:119 netbox/dcim/views.py:995 -#: netbox/dcim/views.py:1234 netbox/dcim/views.py:1927 +#: netbox/dcim/tables/devicetypes.py:124 netbox/dcim/views.py:1099 +#: netbox/dcim/views.py:1343 netbox/dcim/views.py:2091 #: netbox/netbox/navigation/menu.py:98 #: netbox/templates/dcim/device/base.html:28 #: netbox/templates/dcim/device_list.html:22 @@ -6922,8 +7462,8 @@ msgstr "Konsol Bağlantı Noktaları" msgid "Console Server Ports" msgstr "Konsol Sunucusu Bağlantı Noktaları" -#: netbox/dcim/tables/devicetypes.py:122 netbox/dcim/views.py:1010 -#: netbox/dcim/views.py:1249 netbox/dcim/views.py:1943 +#: netbox/dcim/tables/devicetypes.py:127 netbox/dcim/views.py:1114 +#: netbox/dcim/views.py:1358 netbox/dcim/views.py:2107 #: netbox/netbox/navigation/menu.py:99 #: netbox/templates/dcim/device/base.html:31 #: netbox/templates/dcim/device_list.html:29 @@ -6933,8 +7473,8 @@ msgstr "Konsol Sunucusu Bağlantı Noktaları" msgid "Power Ports" msgstr "Güç Bağlantı Noktaları" -#: netbox/dcim/tables/devicetypes.py:125 netbox/dcim/views.py:1025 -#: netbox/dcim/views.py:1264 netbox/dcim/views.py:1959 +#: netbox/dcim/tables/devicetypes.py:130 netbox/dcim/views.py:1129 +#: netbox/dcim/views.py:1373 netbox/dcim/views.py:2123 #: netbox/netbox/navigation/menu.py:100 #: netbox/templates/dcim/device/base.html:34 #: netbox/templates/dcim/device_list.html:36 @@ -6944,8 +7484,8 @@ msgstr "Güç Bağlantı Noktaları" msgid "Power Outlets" msgstr "Elektrik Prizleri" -#: netbox/dcim/tables/devicetypes.py:131 netbox/dcim/views.py:1055 -#: netbox/dcim/views.py:1294 netbox/dcim/views.py:1997 +#: netbox/dcim/tables/devicetypes.py:136 netbox/dcim/views.py:1159 +#: netbox/dcim/views.py:1403 netbox/dcim/views.py:2161 #: netbox/netbox/navigation/menu.py:95 #: netbox/templates/dcim/device/base.html:40 #: netbox/templates/dcim/devicetype/base.html:37 @@ -6954,8 +7494,8 @@ msgstr "Elektrik Prizleri" msgid "Front Ports" msgstr "Ön Bağlantı Noktaları" -#: netbox/dcim/tables/devicetypes.py:134 netbox/dcim/views.py:1070 -#: netbox/dcim/views.py:1309 netbox/dcim/views.py:2013 +#: netbox/dcim/tables/devicetypes.py:139 netbox/dcim/views.py:1174 +#: netbox/dcim/views.py:1418 netbox/dcim/views.py:2177 #: netbox/netbox/navigation/menu.py:96 #: netbox/templates/dcim/device/base.html:43 #: netbox/templates/dcim/device_list.html:50 @@ -6965,16 +7505,16 @@ msgstr "Ön Bağlantı Noktaları" msgid "Rear Ports" msgstr "Arka Bağlantı Noktaları" -#: netbox/dcim/tables/devicetypes.py:137 netbox/dcim/views.py:1100 -#: netbox/dcim/views.py:2053 netbox/netbox/navigation/menu.py:102 +#: netbox/dcim/tables/devicetypes.py:142 netbox/dcim/views.py:1204 +#: netbox/dcim/views.py:2217 netbox/netbox/navigation/menu.py:102 #: netbox/templates/dcim/device/base.html:49 #: netbox/templates/dcim/device_list.html:57 #: netbox/templates/dcim/devicetype/base.html:46 msgid "Device Bays" msgstr "Cihaz Yuvaları" -#: netbox/dcim/tables/devicetypes.py:140 netbox/dcim/views.py:1085 -#: netbox/dcim/views.py:1324 netbox/dcim/views.py:2033 +#: netbox/dcim/tables/devicetypes.py:145 netbox/dcim/views.py:1189 +#: netbox/dcim/views.py:1433 netbox/dcim/views.py:2197 #: netbox/netbox/navigation/menu.py:101 #: netbox/templates/dcim/device/base.html:46 #: netbox/templates/dcim/device_list.html:64 @@ -6984,7 +7524,7 @@ msgstr "Cihaz Yuvaları" msgid "Module Bays" msgstr "Modül Bölmeleri" -#: netbox/dcim/tables/power.py:36 netbox/netbox/navigation/menu.py:297 +#: netbox/dcim/tables/power.py:36 netbox/netbox/navigation/menu.py:318 #: netbox/templates/dcim/powerpanel.html:51 msgid "Power Feeds" msgstr "Güç Beslemeleri" @@ -6997,109 +7537,104 @@ msgstr "Maksimum Kullanım" msgid "Available Power (VA)" msgstr "Kullanılabilir Güç (VA)" -#: netbox/dcim/tables/racks.py:30 netbox/dcim/tables/sites.py:143 +#: netbox/dcim/tables/racks.py:30 netbox/dcim/tables/sites.py:142 #: netbox/netbox/navigation/menu.py:43 netbox/netbox/navigation/menu.py:47 #: netbox/netbox/navigation/menu.py:49 msgid "Racks" msgstr "Raflar" -#: netbox/dcim/tables/racks.py:63 netbox/dcim/tables/racks.py:142 +#: netbox/dcim/tables/racks.py:63 netbox/dcim/tables/racks.py:141 #: netbox/templates/dcim/device.html:318 #: netbox/templates/dcim/inc/panels/racktype_dimensions.html:14 msgid "Height" msgstr "Yükseklik" -#: netbox/dcim/tables/racks.py:67 netbox/dcim/tables/racks.py:165 +#: netbox/dcim/tables/racks.py:67 netbox/dcim/tables/racks.py:164 #: netbox/templates/dcim/inc/panels/racktype_dimensions.html:18 msgid "Outer Width" msgstr "Dış genişlik" -#: netbox/dcim/tables/racks.py:71 netbox/dcim/tables/racks.py:169 +#: netbox/dcim/tables/racks.py:71 netbox/dcim/tables/racks.py:168 #: netbox/templates/dcim/inc/panels/racktype_dimensions.html:28 msgid "Outer Depth" msgstr "Dış Derinlik" -#: netbox/dcim/tables/racks.py:79 netbox/dcim/tables/racks.py:177 +#: netbox/dcim/tables/racks.py:79 netbox/dcim/tables/racks.py:176 msgid "Max Weight" msgstr "Maksimum Ağırlık" -#: netbox/dcim/tables/racks.py:154 +#: netbox/dcim/tables/racks.py:153 msgid "Space" msgstr "Uzay" #: netbox/dcim/tables/sites.py:30 netbox/dcim/tables/sites.py:57 -#: netbox/extras/forms/filtersets.py:351 -#: netbox/extras/forms/model_forms.py:517 netbox/ipam/forms/bulk_edit.py:131 -#: netbox/ipam/forms/model_forms.py:153 netbox/ipam/tables/asn.py:66 +#: netbox/extras/forms/filtersets.py:358 +#: netbox/extras/forms/model_forms.py:531 netbox/ipam/forms/bulk_edit.py:134 +#: netbox/ipam/forms/model_forms.py:159 netbox/ipam/tables/asn.py:66 #: netbox/netbox/navigation/menu.py:15 netbox/netbox/navigation/menu.py:17 msgid "Sites" msgstr "Siteler" -#: netbox/dcim/tests/test_api.py:47 +#: netbox/dcim/tests/test_api.py:50 msgid "Test case must set peer_termination_type" msgstr "Test senaryosu peer_termination_type ayarlamalıdır" -#: netbox/dcim/views.py:138 +#: netbox/dcim/views.py:137 #, python-brace-format msgid "Disconnected {count} {type}" msgstr "Bağlantısı kesildi {count} {type}" -#: netbox/dcim/views.py:738 netbox/netbox/navigation/menu.py:51 +#: netbox/dcim/views.py:825 netbox/netbox/navigation/menu.py:51 msgid "Reservations" msgstr "Rezervasyon" -#: netbox/dcim/views.py:757 netbox/templates/dcim/location.html:90 +#: netbox/dcim/views.py:844 netbox/templates/dcim/location.html:90 #: netbox/templates/dcim/site.html:140 msgid "Non-Racked Devices" msgstr "Raf Olmayan Cihazlar" -#: netbox/dcim/views.py:2086 netbox/extras/forms/model_forms.py:577 +#: netbox/dcim/views.py:2250 netbox/extras/forms/model_forms.py:591 #: netbox/templates/extras/configcontext.html:10 -#: netbox/virtualization/forms/model_forms.py:225 -#: netbox/virtualization/views.py:405 +#: netbox/virtualization/forms/model_forms.py:232 +#: netbox/virtualization/views.py:422 msgid "Config Context" msgstr "Yapılandırma Bağlamı" -#: netbox/dcim/views.py:2096 netbox/virtualization/views.py:415 +#: netbox/dcim/views.py:2260 netbox/virtualization/views.py:432 msgid "Render Config" msgstr "Oluştur Yapılandırması" -#: netbox/dcim/views.py:2131 netbox/virtualization/views.py:450 -#, python-brace-format -msgid "An error occurred while rendering the template: {error}" -msgstr "Şablon oluşturulurken bir hata oluştu: {error}" - -#: netbox/dcim/views.py:2149 netbox/extras/tables/tables.py:550 -#: netbox/netbox/navigation/menu.py:247 netbox/netbox/navigation/menu.py:249 -#: netbox/virtualization/views.py:178 +#: netbox/dcim/views.py:2273 netbox/extras/tables/tables.py:550 +#: netbox/netbox/navigation/menu.py:255 netbox/netbox/navigation/menu.py:257 +#: netbox/virtualization/views.py:190 msgid "Virtual Machines" msgstr "Sanal Makineler" -#: netbox/dcim/views.py:2907 +#: netbox/dcim/views.py:3106 #, python-brace-format msgid "Installed device {device} in bay {device_bay}." msgstr "Yüklü cihaz {device} körfezde {device_bay}." -#: netbox/dcim/views.py:2948 +#: netbox/dcim/views.py:3147 #, python-brace-format msgid "Removed device {device} from bay {device_bay}." msgstr "Kaldırılan cihaz {device} körfezden {device_bay}." -#: netbox/dcim/views.py:3054 netbox/ipam/tables/ip.py:234 +#: netbox/dcim/views.py:3263 netbox/ipam/tables/ip.py:180 msgid "Children" msgstr "Çocuklar" -#: netbox/dcim/views.py:3520 +#: netbox/dcim/views.py:3730 #, python-brace-format msgid "Added member {device}" msgstr "Eklenen üye {device}" -#: netbox/dcim/views.py:3567 +#: netbox/dcim/views.py:3779 #, python-brace-format msgid "Unable to remove master device {device} from the virtual chassis." msgstr "Ana aygıt kaldırılamıyor {device} sanal kasadan." -#: netbox/dcim/views.py:3580 +#: netbox/dcim/views.py:3792 #, python-brace-format msgid "Removed {device} from virtual chassis {chassis}" msgstr "Kaldırıldı {device} sanal kasadan {chassis}" @@ -7198,7 +7733,7 @@ msgstr "Hayır" #: netbox/extras/choices.py:108 netbox/templates/tenancy/contact.html:57 #: netbox/tenancy/forms/bulk_edit.py:118 -#: netbox/wireless/forms/model_forms.py:168 +#: netbox/wireless/forms/model_forms.py:171 msgid "Link" msgstr "Bağlantı" @@ -7218,15 +7753,15 @@ msgstr "Alfabetik (A-Z)" msgid "Alphabetical (Z-A)" msgstr "Alfabetik (Z-A)" -#: netbox/extras/choices.py:144 netbox/extras/choices.py:167 +#: netbox/extras/choices.py:144 netbox/extras/choices.py:165 msgid "Info" msgstr "Bilgi" -#: netbox/extras/choices.py:145 netbox/extras/choices.py:168 +#: netbox/extras/choices.py:145 netbox/extras/choices.py:166 msgid "Success" msgstr "Başarı" -#: netbox/extras/choices.py:146 netbox/extras/choices.py:169 +#: netbox/extras/choices.py:146 netbox/extras/choices.py:167 msgid "Warning" msgstr "Uyarı" @@ -7234,52 +7769,29 @@ msgstr "Uyarı" msgid "Danger" msgstr "Tehlike" -#: netbox/extras/choices.py:165 +#: netbox/extras/choices.py:164 msgid "Debug" msgstr "Hata ayıklama" -#: netbox/extras/choices.py:166 netbox/netbox/choices.py:101 -msgid "Default" -msgstr "Varsayılan" - -#: netbox/extras/choices.py:170 +#: netbox/extras/choices.py:168 msgid "Failure" msgstr "Başarısızlık" -#: netbox/extras/choices.py:186 -msgid "Hourly" -msgstr "Saatlik" - -#: netbox/extras/choices.py:187 -msgid "12 hours" -msgstr "12 saat" - -#: netbox/extras/choices.py:188 -msgid "Daily" -msgstr "Günlük" - -#: netbox/extras/choices.py:189 -msgid "Weekly" -msgstr "Haftalık" - -#: netbox/extras/choices.py:190 -msgid "30 days" -msgstr "30 gün" - -#: netbox/extras/choices.py:226 +#: netbox/extras/choices.py:213 #: netbox/templates/dcim/virtualchassis_edit.html:107 #: netbox/templates/generic/bulk_add_component.html:68 #: netbox/templates/generic/object_edit.html:47 #: netbox/templates/generic/object_edit.html:80 +#: netbox/templates/htmx/quick_add.html:24 #: netbox/templates/ipam/inc/ipaddress_edit_header.html:7 msgid "Create" msgstr "Oluştur" -#: netbox/extras/choices.py:227 +#: netbox/extras/choices.py:214 msgid "Update" msgstr "Güncelleme" -#: netbox/extras/choices.py:228 +#: netbox/extras/choices.py:215 #: netbox/templates/circuits/inc/circuit_termination.html:23 #: netbox/templates/dcim/inc/panels/inventory_items.html:37 #: netbox/templates/dcim/powerpanel.html:66 @@ -7294,82 +7806,82 @@ msgstr "Güncelleme" msgid "Delete" msgstr "Sil" -#: netbox/extras/choices.py:252 netbox/netbox/choices.py:57 -#: netbox/netbox/choices.py:102 +#: netbox/extras/choices.py:239 netbox/netbox/choices.py:59 +#: netbox/netbox/choices.py:104 msgid "Blue" msgstr "Mavi" -#: netbox/extras/choices.py:253 netbox/netbox/choices.py:56 -#: netbox/netbox/choices.py:103 +#: netbox/extras/choices.py:240 netbox/netbox/choices.py:58 +#: netbox/netbox/choices.py:105 msgid "Indigo" msgstr "çivit mavisi" -#: netbox/extras/choices.py:254 netbox/netbox/choices.py:54 -#: netbox/netbox/choices.py:104 +#: netbox/extras/choices.py:241 netbox/netbox/choices.py:56 +#: netbox/netbox/choices.py:106 msgid "Purple" msgstr "Mor" -#: netbox/extras/choices.py:255 netbox/netbox/choices.py:51 -#: netbox/netbox/choices.py:105 +#: netbox/extras/choices.py:242 netbox/netbox/choices.py:53 +#: netbox/netbox/choices.py:107 msgid "Pink" msgstr "Pembe" -#: netbox/extras/choices.py:256 netbox/netbox/choices.py:50 -#: netbox/netbox/choices.py:106 +#: netbox/extras/choices.py:243 netbox/netbox/choices.py:52 +#: netbox/netbox/choices.py:108 msgid "Red" msgstr "Kırmızı" -#: netbox/extras/choices.py:257 netbox/netbox/choices.py:68 -#: netbox/netbox/choices.py:107 +#: netbox/extras/choices.py:244 netbox/netbox/choices.py:70 +#: netbox/netbox/choices.py:109 msgid "Orange" msgstr "Portakal" -#: netbox/extras/choices.py:258 netbox/netbox/choices.py:66 -#: netbox/netbox/choices.py:108 +#: netbox/extras/choices.py:245 netbox/netbox/choices.py:68 +#: netbox/netbox/choices.py:110 msgid "Yellow" msgstr "Sarı" -#: netbox/extras/choices.py:259 netbox/netbox/choices.py:63 -#: netbox/netbox/choices.py:109 +#: netbox/extras/choices.py:246 netbox/netbox/choices.py:65 +#: netbox/netbox/choices.py:111 msgid "Green" msgstr "Yeşil" -#: netbox/extras/choices.py:260 netbox/netbox/choices.py:60 -#: netbox/netbox/choices.py:110 +#: netbox/extras/choices.py:247 netbox/netbox/choices.py:62 +#: netbox/netbox/choices.py:112 msgid "Teal" msgstr "çamurcun" -#: netbox/extras/choices.py:261 netbox/netbox/choices.py:59 -#: netbox/netbox/choices.py:111 +#: netbox/extras/choices.py:248 netbox/netbox/choices.py:61 +#: netbox/netbox/choices.py:113 msgid "Cyan" msgstr "Mavi" -#: netbox/extras/choices.py:262 netbox/netbox/choices.py:112 +#: netbox/extras/choices.py:249 netbox/netbox/choices.py:114 msgid "Gray" msgstr "Gri" -#: netbox/extras/choices.py:263 netbox/netbox/choices.py:74 -#: netbox/netbox/choices.py:113 +#: netbox/extras/choices.py:250 netbox/netbox/choices.py:76 +#: netbox/netbox/choices.py:115 msgid "Black" msgstr "Siyah" -#: netbox/extras/choices.py:264 netbox/netbox/choices.py:75 -#: netbox/netbox/choices.py:114 +#: netbox/extras/choices.py:251 netbox/netbox/choices.py:77 +#: netbox/netbox/choices.py:116 msgid "White" msgstr "Beyaz" -#: netbox/extras/choices.py:279 netbox/extras/forms/model_forms.py:353 -#: netbox/extras/forms/model_forms.py:430 +#: netbox/extras/choices.py:266 netbox/extras/forms/model_forms.py:367 +#: netbox/extras/forms/model_forms.py:444 #: netbox/templates/extras/webhook.html:10 msgid "Webhook" msgstr "Web kancası" -#: netbox/extras/choices.py:280 netbox/extras/forms/model_forms.py:418 +#: netbox/extras/choices.py:267 netbox/extras/forms/model_forms.py:432 #: netbox/templates/extras/script/base.html:29 msgid "Script" msgstr "Senaryo" -#: netbox/extras/choices.py:281 +#: netbox/extras/choices.py:268 msgid "Notification" msgstr "Bildirim" @@ -7465,31 +7977,35 @@ msgstr "Geçersiz biçim. URL parametreleri sözlük olarak iletilmelidir." msgid "RSS Feed" msgstr "RSS Beslemesi" -#: netbox/extras/dashboard/widgets.py:279 +#: netbox/extras/dashboard/widgets.py:280 msgid "Embed an RSS feed from an external website." msgstr "Harici bir web sitesinden bir RSS beslemesi ekleyin." -#: netbox/extras/dashboard/widgets.py:286 +#: netbox/extras/dashboard/widgets.py:287 msgid "Feed URL" msgstr "Akış URL'si" -#: netbox/extras/dashboard/widgets.py:291 +#: netbox/extras/dashboard/widgets.py:290 +msgid "Requires external connection" +msgstr "Harici bağlantı gerektirir" + +#: netbox/extras/dashboard/widgets.py:296 msgid "The maximum number of objects to display" msgstr "Görüntülenecek maksimum nesne sayısı" -#: netbox/extras/dashboard/widgets.py:296 +#: netbox/extras/dashboard/widgets.py:301 msgid "How long to stored the cached content (in seconds)" msgstr "" "Önbelleğe alınan içeriğin ne kadar süre saklanacağı (saniye cinsinden)" -#: netbox/extras/dashboard/widgets.py:348 +#: netbox/extras/dashboard/widgets.py:358 #: netbox/templates/account/base.html:10 #: netbox/templates/account/bookmarks.html:7 -#: netbox/templates/inc/user_menu.html:48 +#: netbox/templates/inc/user_menu.html:43 msgid "Bookmarks" msgstr "Yer İşaretleri" -#: netbox/extras/dashboard/widgets.py:352 +#: netbox/extras/dashboard/widgets.py:362 msgid "Show your personal bookmarks" msgstr "Kişisel yer imlerinizi gösterin" @@ -7518,17 +8034,17 @@ msgid "Group (name)" msgstr "Grup (isim)" #: netbox/extras/filtersets.py:574 -#: netbox/virtualization/forms/filtersets.py:118 +#: netbox/virtualization/forms/filtersets.py:123 msgid "Cluster type" msgstr "Küme türü" -#: netbox/extras/filtersets.py:580 netbox/virtualization/filtersets.py:95 -#: netbox/virtualization/filtersets.py:147 +#: netbox/extras/filtersets.py:580 netbox/virtualization/filtersets.py:61 +#: netbox/virtualization/filtersets.py:113 msgid "Cluster type (slug)" msgstr "Küme tipi (kısa ad)" #: netbox/extras/filtersets.py:601 netbox/tenancy/forms/forms.py:16 -#: netbox/tenancy/forms/forms.py:39 +#: netbox/tenancy/forms/forms.py:40 msgid "Tenant group" msgstr "Kiracı grubu" @@ -7537,7 +8053,7 @@ msgstr "Kiracı grubu" msgid "Tenant group (slug)" msgstr "Kiracı grubu (kısa ad)" -#: netbox/extras/filtersets.py:623 netbox/extras/forms/model_forms.py:495 +#: netbox/extras/filtersets.py:623 netbox/extras/forms/model_forms.py:509 #: netbox/templates/extras/tag.html:11 msgid "Tag" msgstr "etiket" @@ -7546,60 +8062,60 @@ msgstr "etiket" msgid "Tag (slug)" msgstr "Etiket (kısa ad)" -#: netbox/extras/filtersets.py:689 netbox/extras/forms/filtersets.py:429 +#: netbox/extras/filtersets.py:689 netbox/extras/forms/filtersets.py:437 msgid "Has local config context data" msgstr "Yerel yapılandırma bağlam verilerine sahiptir" -#: netbox/extras/forms/bulk_edit.py:35 netbox/extras/forms/filtersets.py:60 +#: netbox/extras/forms/bulk_edit.py:35 netbox/extras/forms/filtersets.py:61 msgid "Group name" msgstr "Grup adı" -#: netbox/extras/forms/bulk_edit.py:43 netbox/extras/forms/filtersets.py:68 +#: netbox/extras/forms/bulk_edit.py:43 netbox/extras/forms/filtersets.py:69 #: netbox/extras/tables/tables.py:65 #: netbox/templates/extras/customfield.html:38 #: netbox/templates/generic/bulk_import.html:118 msgid "Required" msgstr "Gerekli" -#: netbox/extras/forms/bulk_edit.py:48 netbox/extras/forms/filtersets.py:75 +#: netbox/extras/forms/bulk_edit.py:48 netbox/extras/forms/filtersets.py:76 msgid "Must be unique" msgstr "Benzersiz olmalı" #: netbox/extras/forms/bulk_edit.py:61 netbox/extras/forms/bulk_import.py:60 -#: netbox/extras/forms/filtersets.py:89 +#: netbox/extras/forms/filtersets.py:90 #: netbox/extras/models/customfields.py:209 msgid "UI visible" msgstr "Kullanıcı arayüzü görünür" #: netbox/extras/forms/bulk_edit.py:66 netbox/extras/forms/bulk_import.py:66 -#: netbox/extras/forms/filtersets.py:94 +#: netbox/extras/forms/filtersets.py:95 #: netbox/extras/models/customfields.py:216 msgid "UI editable" msgstr "UI düzenlenebilir" -#: netbox/extras/forms/bulk_edit.py:71 netbox/extras/forms/filtersets.py:97 +#: netbox/extras/forms/bulk_edit.py:71 netbox/extras/forms/filtersets.py:98 msgid "Is cloneable" msgstr "Klonlanabilir mi" -#: netbox/extras/forms/bulk_edit.py:76 netbox/extras/forms/filtersets.py:104 +#: netbox/extras/forms/bulk_edit.py:76 netbox/extras/forms/filtersets.py:105 msgid "Minimum value" msgstr "Minimum değer" -#: netbox/extras/forms/bulk_edit.py:80 netbox/extras/forms/filtersets.py:108 +#: netbox/extras/forms/bulk_edit.py:80 netbox/extras/forms/filtersets.py:109 msgid "Maximum value" msgstr "Maksimum değer" -#: netbox/extras/forms/bulk_edit.py:84 netbox/extras/forms/filtersets.py:112 +#: netbox/extras/forms/bulk_edit.py:84 netbox/extras/forms/filtersets.py:113 msgid "Validation regex" msgstr "Doğrulama regex" -#: netbox/extras/forms/bulk_edit.py:91 netbox/extras/forms/filtersets.py:46 +#: netbox/extras/forms/bulk_edit.py:91 netbox/extras/forms/filtersets.py:47 #: netbox/extras/forms/model_forms.py:76 #: netbox/templates/extras/customfield.html:70 msgid "Behavior" msgstr "Davranış" -#: netbox/extras/forms/bulk_edit.py:128 netbox/extras/forms/filtersets.py:149 +#: netbox/extras/forms/bulk_edit.py:128 netbox/extras/forms/filtersets.py:152 msgid "New window" msgstr "Yeni pencere" @@ -7607,31 +8123,31 @@ msgstr "Yeni pencere" msgid "Button class" msgstr "Düğme sınıfı" -#: netbox/extras/forms/bulk_edit.py:154 netbox/extras/forms/filtersets.py:187 +#: netbox/extras/forms/bulk_edit.py:154 netbox/extras/forms/filtersets.py:191 #: netbox/extras/models/models.py:409 msgid "MIME type" msgstr "MIME türü" -#: netbox/extras/forms/bulk_edit.py:159 netbox/extras/forms/filtersets.py:190 +#: netbox/extras/forms/bulk_edit.py:159 netbox/extras/forms/filtersets.py:194 msgid "File extension" msgstr "Dosya uzantısı" -#: netbox/extras/forms/bulk_edit.py:164 netbox/extras/forms/filtersets.py:194 +#: netbox/extras/forms/bulk_edit.py:164 netbox/extras/forms/filtersets.py:198 msgid "As attachment" msgstr "Ek olarak" -#: netbox/extras/forms/bulk_edit.py:192 netbox/extras/forms/filtersets.py:236 +#: netbox/extras/forms/bulk_edit.py:192 netbox/extras/forms/filtersets.py:242 #: netbox/extras/tables/tables.py:256 #: netbox/templates/extras/savedfilter.html:29 msgid "Shared" msgstr "Paylaşılan" -#: netbox/extras/forms/bulk_edit.py:215 netbox/extras/forms/filtersets.py:265 +#: netbox/extras/forms/bulk_edit.py:215 netbox/extras/forms/filtersets.py:271 #: netbox/extras/models/models.py:174 msgid "HTTP method" msgstr "HTTP yöntemi" -#: netbox/extras/forms/bulk_edit.py:219 netbox/extras/forms/filtersets.py:259 +#: netbox/extras/forms/bulk_edit.py:219 netbox/extras/forms/filtersets.py:265 #: netbox/templates/extras/webhook.html:30 msgid "Payload URL" msgstr "Yük URL'si" @@ -7650,7 +8166,7 @@ msgid "CA file path" msgstr "CA dosya yolu" #: netbox/extras/forms/bulk_edit.py:253 netbox/extras/forms/bulk_import.py:192 -#: netbox/extras/forms/model_forms.py:377 +#: netbox/extras/forms/model_forms.py:391 msgid "Event types" msgstr "Etkinlik türleri" @@ -7663,13 +8179,13 @@ msgstr "Aktif" #: netbox/extras/forms/bulk_import.py:139 #: netbox/extras/forms/bulk_import.py:162 #: netbox/extras/forms/bulk_import.py:186 -#: netbox/extras/forms/filtersets.py:137 netbox/extras/forms/filtersets.py:224 +#: netbox/extras/forms/filtersets.py:140 netbox/extras/forms/filtersets.py:230 #: netbox/extras/forms/model_forms.py:47 -#: netbox/extras/forms/model_forms.py:205 -#: netbox/extras/forms/model_forms.py:237 -#: netbox/extras/forms/model_forms.py:278 -#: netbox/extras/forms/model_forms.py:372 -#: netbox/extras/forms/model_forms.py:489 +#: netbox/extras/forms/model_forms.py:219 +#: netbox/extras/forms/model_forms.py:251 +#: netbox/extras/forms/model_forms.py:292 +#: netbox/extras/forms/model_forms.py:386 +#: netbox/extras/forms/model_forms.py:503 #: netbox/users/forms/model_forms.py:276 msgid "Object types" msgstr "Nesne türleri" @@ -7687,10 +8203,10 @@ msgstr "Bir veya daha fazla atanmış nesne türü" msgid "Field data type (e.g. text, integer, etc.)" msgstr "Alan veri türü (örn. Metin, tamsayı vb.)" -#: netbox/extras/forms/bulk_import.py:47 netbox/extras/forms/filtersets.py:208 -#: netbox/extras/forms/filtersets.py:281 -#: netbox/extras/forms/model_forms.py:304 -#: netbox/extras/forms/model_forms.py:341 +#: netbox/extras/forms/bulk_import.py:47 netbox/extras/forms/filtersets.py:213 +#: netbox/extras/forms/filtersets.py:287 +#: netbox/extras/forms/model_forms.py:318 +#: netbox/extras/forms/model_forms.py:355 #: netbox/tenancy/forms/filtersets.py:92 msgid "Object type" msgstr "Nesne türü" @@ -7699,7 +8215,7 @@ msgstr "Nesne türü" msgid "Object type (for object or multi-object fields)" msgstr "Nesne türü (nesne veya çoklu nesne alanları için)" -#: netbox/extras/forms/bulk_import.py:53 netbox/extras/forms/filtersets.py:84 +#: netbox/extras/forms/bulk_import.py:53 netbox/extras/forms/filtersets.py:85 msgid "Choice set" msgstr "Seçim seti" @@ -7769,7 +8285,7 @@ msgid "The classification of entry" msgstr "Girişin sınıflandırılması" #: netbox/extras/forms/bulk_import.py:261 -#: netbox/extras/forms/model_forms.py:320 netbox/netbox/navigation/menu.py:390 +#: netbox/extras/forms/model_forms.py:334 netbox/netbox/navigation/menu.py:411 #: netbox/templates/extras/notificationgroup.html:41 #: netbox/templates/users/group.html:29 netbox/users/forms/model_forms.py:236 #: netbox/users/forms/model_forms.py:248 netbox/users/forms/model_forms.py:300 @@ -7783,7 +8299,8 @@ msgstr "" "Virgülle ayrılmış, çift tırnak işareti ile çevrelenmiş kullanıcı adları" #: netbox/extras/forms/bulk_import.py:268 -#: netbox/extras/forms/model_forms.py:315 netbox/netbox/navigation/menu.py:410 +#: netbox/extras/forms/model_forms.py:329 netbox/netbox/navigation/menu.py:294 +#: netbox/netbox/navigation/menu.py:431 #: netbox/templates/extras/notificationgroup.html:31 #: netbox/users/forms/model_forms.py:181 netbox/users/forms/model_forms.py:193 #: netbox/users/forms/model_forms.py:305 netbox/users/tables.py:35 @@ -7795,104 +8312,104 @@ msgstr "Gruplar" msgid "Group names separated by commas, encased with double quotes" msgstr "Virgülle ayrılmış, çift tırnak işareti ile çevrelenmiş grup adları" -#: netbox/extras/forms/filtersets.py:52 netbox/extras/forms/model_forms.py:56 +#: netbox/extras/forms/filtersets.py:53 netbox/extras/forms/model_forms.py:56 msgid "Related object type" msgstr "İlgili nesne türü" -#: netbox/extras/forms/filtersets.py:57 +#: netbox/extras/forms/filtersets.py:58 msgid "Field type" msgstr "Alan tipi" -#: netbox/extras/forms/filtersets.py:120 +#: netbox/extras/forms/filtersets.py:122 #: netbox/extras/forms/model_forms.py:157 netbox/extras/tables/tables.py:91 #: netbox/templates/generic/bulk_import.html:154 msgid "Choices" msgstr "Seçenekler" -#: netbox/extras/forms/filtersets.py:164 netbox/extras/forms/filtersets.py:319 -#: netbox/extras/forms/filtersets.py:408 -#: netbox/extras/forms/model_forms.py:572 netbox/templates/core/job.html:96 +#: netbox/extras/forms/filtersets.py:168 netbox/extras/forms/filtersets.py:326 +#: netbox/extras/forms/filtersets.py:416 +#: netbox/extras/forms/model_forms.py:586 netbox/templates/core/job.html:96 #: netbox/templates/extras/eventrule.html:84 msgid "Data" msgstr "Veriler" -#: netbox/extras/forms/filtersets.py:175 netbox/extras/forms/filtersets.py:333 -#: netbox/extras/forms/filtersets.py:418 netbox/netbox/choices.py:130 +#: netbox/extras/forms/filtersets.py:179 netbox/extras/forms/filtersets.py:340 +#: netbox/extras/forms/filtersets.py:426 netbox/netbox/choices.py:132 #: netbox/utilities/forms/bulk_import.py:26 msgid "Data file" msgstr "Veri dosyası" -#: netbox/extras/forms/filtersets.py:183 +#: netbox/extras/forms/filtersets.py:187 msgid "Content types" msgstr "İçerik türleri" -#: netbox/extras/forms/filtersets.py:255 netbox/extras/models/models.py:179 +#: netbox/extras/forms/filtersets.py:261 netbox/extras/models/models.py:179 msgid "HTTP content type" msgstr "HTTP içerik türü" -#: netbox/extras/forms/filtersets.py:286 +#: netbox/extras/forms/filtersets.py:292 msgid "Event type" msgstr "Etkinlik türü" -#: netbox/extras/forms/filtersets.py:291 +#: netbox/extras/forms/filtersets.py:297 msgid "Action type" msgstr "Eylem türü" -#: netbox/extras/forms/filtersets.py:307 +#: netbox/extras/forms/filtersets.py:313 msgid "Tagged object type" msgstr "Etiketli nesne türü" -#: netbox/extras/forms/filtersets.py:312 +#: netbox/extras/forms/filtersets.py:318 msgid "Allowed object type" msgstr "İzin verilen nesne türü" -#: netbox/extras/forms/filtersets.py:341 -#: netbox/extras/forms/model_forms.py:507 netbox/netbox/navigation/menu.py:18 +#: netbox/extras/forms/filtersets.py:348 +#: netbox/extras/forms/model_forms.py:521 netbox/netbox/navigation/menu.py:18 msgid "Regions" msgstr "Bölgeler" -#: netbox/extras/forms/filtersets.py:346 -#: netbox/extras/forms/model_forms.py:512 +#: netbox/extras/forms/filtersets.py:353 +#: netbox/extras/forms/model_forms.py:526 msgid "Site groups" msgstr "Site grupları" -#: netbox/extras/forms/filtersets.py:356 -#: netbox/extras/forms/model_forms.py:522 netbox/netbox/navigation/menu.py:20 +#: netbox/extras/forms/filtersets.py:363 +#: netbox/extras/forms/model_forms.py:536 netbox/netbox/navigation/menu.py:20 #: netbox/templates/dcim/site.html:127 msgid "Locations" msgstr "Konumlar" -#: netbox/extras/forms/filtersets.py:361 -#: netbox/extras/forms/model_forms.py:527 +#: netbox/extras/forms/filtersets.py:368 +#: netbox/extras/forms/model_forms.py:541 msgid "Device types" msgstr "Cihaz türleri" -#: netbox/extras/forms/filtersets.py:366 -#: netbox/extras/forms/model_forms.py:532 +#: netbox/extras/forms/filtersets.py:373 +#: netbox/extras/forms/model_forms.py:546 msgid "Roles" msgstr "Roller" -#: netbox/extras/forms/filtersets.py:376 -#: netbox/extras/forms/model_forms.py:542 +#: netbox/extras/forms/filtersets.py:383 +#: netbox/extras/forms/model_forms.py:556 msgid "Cluster types" msgstr "Küme türleri" -#: netbox/extras/forms/filtersets.py:381 -#: netbox/extras/forms/model_forms.py:547 +#: netbox/extras/forms/filtersets.py:388 +#: netbox/extras/forms/model_forms.py:561 msgid "Cluster groups" msgstr "Küme grupları" -#: netbox/extras/forms/filtersets.py:386 -#: netbox/extras/forms/model_forms.py:552 netbox/netbox/navigation/menu.py:255 -#: netbox/netbox/navigation/menu.py:257 +#: netbox/extras/forms/filtersets.py:393 +#: netbox/extras/forms/model_forms.py:566 netbox/netbox/navigation/menu.py:263 +#: netbox/netbox/navigation/menu.py:265 #: netbox/templates/virtualization/clustertype.html:30 #: netbox/virtualization/tables/clusters.py:23 #: netbox/virtualization/tables/clusters.py:45 msgid "Clusters" msgstr "Kümeler" -#: netbox/extras/forms/filtersets.py:391 -#: netbox/extras/forms/model_forms.py:557 +#: netbox/extras/forms/filtersets.py:398 +#: netbox/extras/forms/model_forms.py:571 msgid "Tenant groups" msgstr "Kiracı grupları" @@ -7942,7 +8459,7 @@ msgstr "" msgid "Related Object" msgstr "İlgili Nesne" -#: netbox/extras/forms/model_forms.py:169 +#: netbox/extras/forms/model_forms.py:170 msgid "" "Enter one choice per line. An optional label may be specified for each " "choice by appending it with a colon. Example:" @@ -7950,16 +8467,16 @@ msgstr "" "Satır başına bir seçenek girin. Her seçim için iki nokta üst üste eklenerek " "isteğe bağlı bir etiket belirtilebilir. Örnek:" -#: netbox/extras/forms/model_forms.py:212 +#: netbox/extras/forms/model_forms.py:226 #: netbox/templates/extras/customlink.html:10 msgid "Custom Link" msgstr "Özel Bağlantı" -#: netbox/extras/forms/model_forms.py:214 +#: netbox/extras/forms/model_forms.py:228 msgid "Templates" msgstr "Şablonlar" -#: netbox/extras/forms/model_forms.py:226 +#: netbox/extras/forms/model_forms.py:240 #, python-brace-format msgid "" "Jinja2 template code for the link text. Reference the object as {example}. " @@ -7968,7 +8485,7 @@ msgstr "" "Bağlantı metni için Jinja2 şablon kodu. Nesneyi {example} şeklinde referans " "alabilirsiniz. Boş metin olarak görüntülenen bağlantılar görüntülenmez." -#: netbox/extras/forms/model_forms.py:230 +#: netbox/extras/forms/model_forms.py:244 #, python-brace-format msgid "" "Jinja2 template code for the link URL. Reference the object as {example}." @@ -7976,58 +8493,58 @@ msgstr "" "Bağlantı metni için Jinja2 şablon kodu. Nesneyi {example} şeklinde referans " "alabilirsiniz. " -#: netbox/extras/forms/model_forms.py:241 -#: netbox/extras/forms/model_forms.py:624 +#: netbox/extras/forms/model_forms.py:255 +#: netbox/extras/forms/model_forms.py:638 msgid "Template code" msgstr "Şablon kodu" -#: netbox/extras/forms/model_forms.py:247 +#: netbox/extras/forms/model_forms.py:261 #: netbox/templates/extras/exporttemplate.html:12 msgid "Export Template" msgstr "Dışa Aktarma Şablonu" -#: netbox/extras/forms/model_forms.py:249 +#: netbox/extras/forms/model_forms.py:263 msgid "Rendering" msgstr "Oluşturma" -#: netbox/extras/forms/model_forms.py:263 -#: netbox/extras/forms/model_forms.py:649 +#: netbox/extras/forms/model_forms.py:277 +#: netbox/extras/forms/model_forms.py:663 msgid "Template content is populated from the remote source selected below." msgstr "Şablon içeriği aşağıda seçilen uzak kaynaktan doldurulur." -#: netbox/extras/forms/model_forms.py:270 -#: netbox/extras/forms/model_forms.py:656 +#: netbox/extras/forms/model_forms.py:284 +#: netbox/extras/forms/model_forms.py:670 msgid "Must specify either local content or a data file" msgstr "Yerel içerik veya veri dosyası belirtmelidir" -#: netbox/extras/forms/model_forms.py:284 netbox/netbox/forms/mixins.py:70 +#: netbox/extras/forms/model_forms.py:298 netbox/netbox/forms/mixins.py:70 #: netbox/templates/extras/savedfilter.html:10 msgid "Saved Filter" msgstr "Kaydedilen Filtre" -#: netbox/extras/forms/model_forms.py:334 +#: netbox/extras/forms/model_forms.py:348 msgid "A notification group specify at least one user or group." msgstr "Bir bildirim grubu en az bir kullanıcı veya grup belirtir." -#: netbox/extras/forms/model_forms.py:356 +#: netbox/extras/forms/model_forms.py:370 #: netbox/templates/extras/webhook.html:23 msgid "HTTP Request" msgstr "HTTP isteği" -#: netbox/extras/forms/model_forms.py:358 +#: netbox/extras/forms/model_forms.py:372 #: netbox/templates/extras/webhook.html:44 msgid "SSL" msgstr "SSL" -#: netbox/extras/forms/model_forms.py:380 +#: netbox/extras/forms/model_forms.py:394 msgid "Action choice" msgstr "Eylem seçimi" -#: netbox/extras/forms/model_forms.py:385 +#: netbox/extras/forms/model_forms.py:399 msgid "Enter conditions in JSON format." msgstr "Koşulları girin JSON biçim." -#: netbox/extras/forms/model_forms.py:389 +#: netbox/extras/forms/model_forms.py:403 msgid "" "Enter parameters to pass to the action in JSON format." @@ -8035,33 +8552,33 @@ msgstr "" "Eyleme iletilecek parametreleri girin JSON" " biçim." -#: netbox/extras/forms/model_forms.py:394 +#: netbox/extras/forms/model_forms.py:408 #: netbox/templates/extras/eventrule.html:10 msgid "Event Rule" msgstr "Etkinlik Kuralı" -#: netbox/extras/forms/model_forms.py:395 +#: netbox/extras/forms/model_forms.py:409 msgid "Triggers" msgstr "Tetikleyiciler" -#: netbox/extras/forms/model_forms.py:442 +#: netbox/extras/forms/model_forms.py:456 msgid "Notification group" msgstr "Bildirim grubu" -#: netbox/extras/forms/model_forms.py:562 netbox/netbox/navigation/menu.py:26 +#: netbox/extras/forms/model_forms.py:576 netbox/netbox/navigation/menu.py:26 #: netbox/tenancy/tables/tenants.py:22 msgid "Tenants" msgstr "Kiracılar" -#: netbox/extras/forms/model_forms.py:606 +#: netbox/extras/forms/model_forms.py:620 msgid "Data is populated from the remote source selected below." msgstr "Veriler aşağıda seçilen uzak kaynaktan doldurulur." -#: netbox/extras/forms/model_forms.py:612 +#: netbox/extras/forms/model_forms.py:626 msgid "Must specify either local data or a data file" msgstr "Yerel veri veya veri dosyası belirtmelidir" -#: netbox/extras/forms/model_forms.py:631 +#: netbox/extras/forms/model_forms.py:645 #: netbox/templates/core/datafile.html:55 msgid "Content" msgstr "İçerik" @@ -8125,10 +8642,16 @@ msgstr "Bir istisna oluştu: " msgid "Database changes have been reverted due to error." msgstr "Veritabanı değişiklikleri hata nedeniyle geri alındı." -#: netbox/extras/management/commands/reindex.py:66 +#: netbox/extras/management/commands/reindex.py:67 msgid "No indexers found!" msgstr "Dizinleyici bulunamadı!" +#: netbox/extras/models/configs.py:41 netbox/extras/models/models.py:313 +#: netbox/extras/models/models.py:522 netbox/extras/models/search.py:48 +#: netbox/ipam/models/ip.py:188 netbox/netbox/models/mixins.py:15 +msgid "weight" +msgstr "ağırlık" + #: netbox/extras/models/configs.py:130 msgid "config context" msgstr "yapılandırma bağlamı" @@ -8488,27 +9011,27 @@ msgstr "Geçersiz nesne kimliği bulundu: {id}" msgid "Required field cannot be empty." msgstr "Zorunlu alan boş olamaz." -#: netbox/extras/models/customfields.py:763 +#: netbox/extras/models/customfields.py:764 msgid "Base set of predefined choices (optional)" msgstr "Önceden tanımlanmış seçeneklerin temel kümesi (isteğe bağlı)" -#: netbox/extras/models/customfields.py:775 +#: netbox/extras/models/customfields.py:776 msgid "Choices are automatically ordered alphabetically" msgstr "Seçenekler otomatik olarak alfabetik olarak sıralanır" -#: netbox/extras/models/customfields.py:782 +#: netbox/extras/models/customfields.py:783 msgid "custom field choice set" msgstr "özel alan seçim kümesi" -#: netbox/extras/models/customfields.py:783 +#: netbox/extras/models/customfields.py:784 msgid "custom field choice sets" msgstr "özel alan seçim kümeleri" -#: netbox/extras/models/customfields.py:825 +#: netbox/extras/models/customfields.py:826 msgid "Must define base or extra choices." msgstr "Temel veya ekstra seçenekleri tanımlamalıdır." -#: netbox/extras/models/customfields.py:849 +#: netbox/extras/models/customfields.py:850 #, python-brace-format msgid "" "Cannot remove choice {choice} as there are {model} objects which reference " @@ -8808,20 +9331,20 @@ msgstr "dergi girişi" msgid "journal entries" msgstr "dergi girişleri" -#: netbox/extras/models/models.py:718 +#: netbox/extras/models/models.py:721 #, python-brace-format msgid "Journaling is not supported for this object type ({type})." msgstr "Günlüğe kaydetme bu nesne türü için desteklenmez ({type})." -#: netbox/extras/models/models.py:760 +#: netbox/extras/models/models.py:763 msgid "bookmark" msgstr "yer imi" -#: netbox/extras/models/models.py:761 +#: netbox/extras/models/models.py:764 msgid "bookmarks" msgstr "yer imleri" -#: netbox/extras/models/models.py:774 +#: netbox/extras/models/models.py:777 #, python-brace-format msgid "Bookmarks cannot be assigned to this object type ({type})." msgstr "Yer imleri bu nesne türüne atanamaz ({type})." @@ -8913,19 +9436,19 @@ msgstr "önbelleğe alınan değer" msgid "cached values" msgstr "önbelleğe alınan değerler" -#: netbox/extras/models/staging.py:44 +#: netbox/extras/models/staging.py:45 msgid "branch" msgstr "şube" -#: netbox/extras/models/staging.py:45 +#: netbox/extras/models/staging.py:46 msgid "branches" msgstr "dallar" -#: netbox/extras/models/staging.py:97 +#: netbox/extras/models/staging.py:105 msgid "staged change" msgstr "aşamalı değişim" -#: netbox/extras/models/staging.py:98 +#: netbox/extras/models/staging.py:106 msgid "staged changes" msgstr "aşamalı değişiklikler" @@ -8949,11 +9472,11 @@ msgstr "etiketli öğe" msgid "tagged items" msgstr "etiketli öğeler" -#: netbox/extras/scripts.py:429 +#: netbox/extras/scripts.py:432 msgid "Script Data" msgstr "Komut Dosyası Verileri" -#: netbox/extras/scripts.py:433 +#: netbox/extras/scripts.py:436 msgid "Script Execution Parameters" msgstr "Script Yürütme Parametreleri" @@ -9030,12 +9553,11 @@ msgstr "Ek Olarak" #: netbox/extras/tables/tables.py:195 netbox/extras/tables/tables.py:487 #: netbox/extras/tables/tables.py:522 netbox/templates/core/datafile.html:24 -#: netbox/templates/dcim/device/render_config.html:22 #: netbox/templates/extras/configcontext.html:39 #: netbox/templates/extras/configtemplate.html:31 #: netbox/templates/extras/exporttemplate.html:45 +#: netbox/templates/extras/object_render_config.html:23 #: netbox/templates/generic/bulk_import.html:35 -#: netbox/templates/virtualization/virtualmachine/render_config.html:22 msgid "Data File" msgstr "Veri Dosyası" @@ -9127,27 +9649,32 @@ msgstr "Geçersiz öznitelik”{name}“istek için" msgid "Invalid attribute \"{name}\" for {model}" msgstr "\"{name}\" niteliği {model} için geçerli değil." -#: netbox/extras/views.py:960 +#: netbox/extras/views.py:933 +#, python-brace-format +msgid "An error occurred while rendering the template: {error}" +msgstr "Şablon oluşturulurken bir hata oluştu: {error}" + +#: netbox/extras/views.py:1085 msgid "Your dashboard has been reset." msgstr "Kontrol paneliniz sıfırlandı." -#: netbox/extras/views.py:1006 +#: netbox/extras/views.py:1131 msgid "Added widget: " msgstr "Eklenen widget: " -#: netbox/extras/views.py:1047 +#: netbox/extras/views.py:1172 msgid "Updated widget: " msgstr "Güncellenmiş widget: " -#: netbox/extras/views.py:1083 +#: netbox/extras/views.py:1208 msgid "Deleted widget: " msgstr "Silinen widget: " -#: netbox/extras/views.py:1085 +#: netbox/extras/views.py:1210 msgid "Error deleting widget: " msgstr "Widget silinirken hata oluştu: " -#: netbox/extras/views.py:1175 +#: netbox/extras/views.py:1308 msgid "Unable to run script: RQ worker process not running." msgstr "Komut dosyası çalıştırılamıyor: RQ işçi işlemi çalışmıyor." @@ -9169,7 +9696,7 @@ msgstr "CIDR gösteriminde geçerli bir IPv4 veya IPv6 öneki ve maske girin." msgid "Invalid IP prefix format: {data}" msgstr "Geçersiz IP önek biçimi: {data}" -#: netbox/ipam/api/views.py:358 +#: netbox/ipam/api/views.py:370 msgid "" "Insufficient space is available to accommodate the requested prefix size(s)" msgstr "İstenen önek boyutlarını barındırmak için yetersiz alan mevcut değil" @@ -9210,182 +9737,174 @@ msgstr "Cisco" msgid "Plaintext" msgstr "Düz metin" +#: netbox/ipam/choices.py:166 netbox/ipam/forms/model_forms.py:800 +#: netbox/ipam/forms/model_forms.py:828 netbox/templates/ipam/service.html:21 +msgid "Service" +msgstr "Hizmet" + +#: netbox/ipam/choices.py:167 +msgid "Customer" +msgstr "Müşteri" + #: netbox/ipam/fields.py:36 #, python-brace-format msgid "Invalid IP address format: {address}" msgstr "Geçersiz IP adresi biçimi: {address}" -#: netbox/ipam/filtersets.py:48 netbox/vpn/filtersets.py:304 +#: netbox/ipam/filtersets.py:51 netbox/vpn/filtersets.py:304 msgid "Import target" msgstr "Hedefi içe aktarma" -#: netbox/ipam/filtersets.py:54 netbox/vpn/filtersets.py:310 +#: netbox/ipam/filtersets.py:57 netbox/vpn/filtersets.py:310 msgid "Import target (name)" msgstr "Hedefi içe aktarma (isim)" -#: netbox/ipam/filtersets.py:59 netbox/vpn/filtersets.py:315 +#: netbox/ipam/filtersets.py:62 netbox/vpn/filtersets.py:315 msgid "Export target" msgstr "Dışa aktarma hedefi" -#: netbox/ipam/filtersets.py:65 netbox/vpn/filtersets.py:321 +#: netbox/ipam/filtersets.py:68 netbox/vpn/filtersets.py:321 msgid "Export target (name)" msgstr "Dışa aktarma hedefi (isim)" -#: netbox/ipam/filtersets.py:86 +#: netbox/ipam/filtersets.py:89 msgid "Importing VRF" msgstr "VRF'yi içe aktarma" -#: netbox/ipam/filtersets.py:92 +#: netbox/ipam/filtersets.py:95 msgid "Import VRF (RD)" msgstr "VRF'yi içe aktarın (RD)" -#: netbox/ipam/filtersets.py:97 +#: netbox/ipam/filtersets.py:100 msgid "Exporting VRF" msgstr "VRF'yi dışa aktarma" -#: netbox/ipam/filtersets.py:103 +#: netbox/ipam/filtersets.py:106 msgid "Export VRF (RD)" msgstr "VRF'yi (RD) dışa aktarma" -#: netbox/ipam/filtersets.py:108 +#: netbox/ipam/filtersets.py:111 msgid "Importing L2VPN" msgstr "L2VPN'i içe aktarma" -#: netbox/ipam/filtersets.py:114 +#: netbox/ipam/filtersets.py:117 msgid "Importing L2VPN (identifier)" msgstr "L2VPN'i içe aktarma (tanımlayıcı)" -#: netbox/ipam/filtersets.py:119 +#: netbox/ipam/filtersets.py:122 msgid "Exporting L2VPN" msgstr "L2VPN'i dışa aktarma" -#: netbox/ipam/filtersets.py:125 +#: netbox/ipam/filtersets.py:128 msgid "Exporting L2VPN (identifier)" msgstr "L2VPN'i dışa aktarma (tanımlayıcı)" -#: netbox/ipam/filtersets.py:155 netbox/ipam/filtersets.py:283 -#: netbox/ipam/forms/model_forms.py:229 netbox/ipam/tables/ip.py:212 +#: netbox/ipam/filtersets.py:158 netbox/ipam/filtersets.py:286 +#: netbox/ipam/forms/model_forms.py:229 netbox/ipam/tables/ip.py:158 #: netbox/templates/ipam/prefix.html:12 msgid "Prefix" msgstr "Önek" -#: netbox/ipam/filtersets.py:159 netbox/ipam/filtersets.py:198 -#: netbox/ipam/filtersets.py:223 +#: netbox/ipam/filtersets.py:162 netbox/ipam/filtersets.py:201 +#: netbox/ipam/filtersets.py:226 msgid "RIR (ID)" msgstr "RİR (İD)" -#: netbox/ipam/filtersets.py:165 netbox/ipam/filtersets.py:204 -#: netbox/ipam/filtersets.py:229 +#: netbox/ipam/filtersets.py:168 netbox/ipam/filtersets.py:207 +#: netbox/ipam/filtersets.py:232 msgid "RIR (slug)" msgstr "RIR (kısa ad)" -#: netbox/ipam/filtersets.py:287 +#: netbox/ipam/filtersets.py:290 msgid "Within prefix" msgstr "Önek içinde" -#: netbox/ipam/filtersets.py:291 +#: netbox/ipam/filtersets.py:294 msgid "Within and including prefix" msgstr "Önek içinde ve dahil olmak üzere" -#: netbox/ipam/filtersets.py:295 +#: netbox/ipam/filtersets.py:298 msgid "Prefixes which contain this prefix or IP" msgstr "Bu önek veya IP'yi içeren önekler" -#: netbox/ipam/filtersets.py:306 netbox/ipam/filtersets.py:574 -#: netbox/ipam/forms/bulk_edit.py:343 netbox/ipam/forms/filtersets.py:196 -#: netbox/ipam/forms/filtersets.py:331 +#: netbox/ipam/filtersets.py:309 netbox/ipam/filtersets.py:541 +#: netbox/ipam/forms/bulk_edit.py:327 netbox/ipam/forms/filtersets.py:198 +#: netbox/ipam/forms/filtersets.py:334 msgid "Mask length" msgstr "Maske uzunluğu" -#: netbox/ipam/filtersets.py:375 netbox/vpn/filtersets.py:427 +#: netbox/ipam/filtersets.py:342 netbox/vpn/filtersets.py:427 msgid "VLAN (ID)" msgstr "VLAN (KİMLİĞİ)" -#: netbox/ipam/filtersets.py:379 netbox/vpn/filtersets.py:422 +#: netbox/ipam/filtersets.py:346 netbox/vpn/filtersets.py:422 msgid "VLAN number (1-4094)" msgstr "VLAN numarası (1-4094)" -#: netbox/ipam/filtersets.py:473 netbox/ipam/filtersets.py:477 -#: netbox/ipam/filtersets.py:569 netbox/ipam/forms/model_forms.py:496 +#: netbox/ipam/filtersets.py:440 netbox/ipam/filtersets.py:444 +#: netbox/ipam/filtersets.py:536 netbox/ipam/forms/model_forms.py:506 #: netbox/templates/tenancy/contact.html:53 #: netbox/tenancy/forms/bulk_edit.py:113 msgid "Address" msgstr "Adres" -#: netbox/ipam/filtersets.py:481 +#: netbox/ipam/filtersets.py:448 msgid "Ranges which contain this prefix or IP" msgstr "Bu önek veya IP'yi içeren aralıklar" -#: netbox/ipam/filtersets.py:509 netbox/ipam/filtersets.py:565 +#: netbox/ipam/filtersets.py:476 netbox/ipam/filtersets.py:532 msgid "Parent prefix" msgstr "Ebeveyn öneki" -#: netbox/ipam/filtersets.py:618 netbox/ipam/filtersets.py:858 -#: netbox/ipam/filtersets.py:1133 netbox/vpn/filtersets.py:385 -msgid "Virtual machine (name)" -msgstr "Sanal makine (isim)" - -#: netbox/ipam/filtersets.py:623 netbox/ipam/filtersets.py:863 -#: netbox/ipam/filtersets.py:1127 netbox/virtualization/filtersets.py:282 -#: netbox/virtualization/filtersets.py:321 netbox/vpn/filtersets.py:390 -msgid "Virtual machine (ID)" -msgstr "Sanal makine (ID)" - -#: netbox/ipam/filtersets.py:629 netbox/vpn/filtersets.py:97 -#: netbox/vpn/filtersets.py:396 -msgid "Interface (name)" -msgstr "Arayüz (isim)" - -#: netbox/ipam/filtersets.py:640 netbox/vpn/filtersets.py:108 -#: netbox/vpn/filtersets.py:407 -msgid "VM interface (name)" -msgstr "VM arabirimi (isim)" - -#: netbox/ipam/filtersets.py:645 netbox/vpn/filtersets.py:113 -msgid "VM interface (ID)" -msgstr "VM arabirimi (ID)" - -#: netbox/ipam/filtersets.py:650 +#: netbox/ipam/filtersets.py:617 msgid "FHRP group (ID)" msgstr "FHRP grubu (ID)" -#: netbox/ipam/filtersets.py:654 +#: netbox/ipam/filtersets.py:621 msgid "Is assigned to an interface" msgstr "Bir arayüze atanır" -#: netbox/ipam/filtersets.py:658 +#: netbox/ipam/filtersets.py:625 msgid "Is assigned" msgstr "Atanmıştır" -#: netbox/ipam/filtersets.py:670 +#: netbox/ipam/filtersets.py:637 msgid "Service (ID)" msgstr "Hizmet (ID)" -#: netbox/ipam/filtersets.py:675 +#: netbox/ipam/filtersets.py:642 msgid "NAT inside IP address (ID)" msgstr "IP adresi içinde NAT (ID)" -#: netbox/ipam/filtersets.py:1043 netbox/ipam/forms/bulk_import.py:322 -msgid "Assigned interface" -msgstr "Atanmış arayüz" +#: netbox/ipam/filtersets.py:1001 +msgid "Q-in-Q SVLAN (ID)" +msgstr "Q-in-Q SVLAN (ID)" -#: netbox/ipam/filtersets.py:1048 +#: netbox/ipam/filtersets.py:1005 +msgid "Q-in-Q SVLAN number (1-4094)" +msgstr "Q-in-Q SVLAN numarası (1-4094)" + +#: netbox/ipam/filtersets.py:1026 msgid "Assigned VM interface" msgstr "Atanmış VM arabirimi" -#: netbox/ipam/filtersets.py:1138 +#: netbox/ipam/filtersets.py:1097 +msgid "VLAN Translation Policy (name)" +msgstr "VLAN Çeviri Politikası (isim)" + +#: netbox/ipam/filtersets.py:1163 msgid "IP address (ID)" msgstr "IP adresi (ID)" -#: netbox/ipam/filtersets.py:1144 netbox/ipam/models/ip.py:788 +#: netbox/ipam/filtersets.py:1169 netbox/ipam/models/ip.py:788 msgid "IP address" msgstr "IP adresi" -#: netbox/ipam/filtersets.py:1169 +#: netbox/ipam/filtersets.py:1194 msgid "Primary IPv4 (ID)" msgstr "Birincil IPv4 (ID)" -#: netbox/ipam/filtersets.py:1174 +#: netbox/ipam/filtersets.py:1199 msgid "Primary IPv6 (ID)" msgstr "Birincil IPv6 (ID)" @@ -9418,424 +9937,397 @@ msgstr "CIDR maskesi (örn. /24) gereklidir." msgid "Address pattern" msgstr "Adres deseni" -#: netbox/ipam/forms/bulk_edit.py:50 +#: netbox/ipam/forms/bulk_edit.py:53 msgid "Enforce unique space" msgstr "Benzersiz alanı uygulayın" -#: netbox/ipam/forms/bulk_edit.py:88 +#: netbox/ipam/forms/bulk_edit.py:91 msgid "Is private" msgstr "Özeldir" -#: netbox/ipam/forms/bulk_edit.py:109 netbox/ipam/forms/bulk_edit.py:138 -#: netbox/ipam/forms/bulk_edit.py:163 netbox/ipam/forms/bulk_import.py:89 -#: netbox/ipam/forms/bulk_import.py:109 netbox/ipam/forms/bulk_import.py:129 -#: netbox/ipam/forms/filtersets.py:110 netbox/ipam/forms/filtersets.py:125 -#: netbox/ipam/forms/filtersets.py:148 netbox/ipam/forms/model_forms.py:96 -#: netbox/ipam/forms/model_forms.py:109 netbox/ipam/forms/model_forms.py:131 -#: netbox/ipam/forms/model_forms.py:149 netbox/ipam/models/asns.py:31 -#: netbox/ipam/models/asns.py:103 netbox/ipam/models/ip.py:71 -#: netbox/ipam/models/ip.py:90 netbox/ipam/tables/asn.py:20 +#: netbox/ipam/forms/bulk_edit.py:112 netbox/ipam/forms/bulk_edit.py:141 +#: netbox/ipam/forms/bulk_edit.py:166 netbox/ipam/forms/bulk_import.py:92 +#: netbox/ipam/forms/bulk_import.py:112 netbox/ipam/forms/bulk_import.py:132 +#: netbox/ipam/forms/filtersets.py:112 netbox/ipam/forms/filtersets.py:127 +#: netbox/ipam/forms/filtersets.py:150 netbox/ipam/forms/model_forms.py:99 +#: netbox/ipam/forms/model_forms.py:112 netbox/ipam/forms/model_forms.py:135 +#: netbox/ipam/forms/model_forms.py:154 netbox/ipam/models/asns.py:31 +#: netbox/ipam/models/asns.py:100 netbox/ipam/models/ip.py:71 +#: netbox/ipam/models/ip.py:87 netbox/ipam/tables/asn.py:20 #: netbox/ipam/tables/asn.py:45 netbox/templates/ipam/aggregate.html:18 #: netbox/templates/ipam/asn.html:27 netbox/templates/ipam/asnrange.html:19 #: netbox/templates/ipam/rir.html:19 msgid "RIR" msgstr "ZIVIR" -#: netbox/ipam/forms/bulk_edit.py:171 +#: netbox/ipam/forms/bulk_edit.py:174 msgid "Date added" msgstr "Eklenen tarih" -#: netbox/ipam/forms/bulk_edit.py:229 netbox/ipam/forms/model_forms.py:619 -#: netbox/ipam/forms/model_forms.py:666 netbox/ipam/tables/ip.py:251 -#: netbox/templates/ipam/vlan_edit.html:37 +#: netbox/ipam/forms/bulk_edit.py:213 netbox/ipam/forms/model_forms.py:629 +#: netbox/ipam/forms/model_forms.py:676 netbox/ipam/tables/ip.py:201 +#: netbox/templates/ipam/vlan_edit.html:45 #: netbox/templates/ipam/vlangroup.html:27 msgid "VLAN Group" msgstr "VLAN Grubu" -#: netbox/ipam/forms/bulk_edit.py:234 netbox/ipam/forms/bulk_import.py:185 -#: netbox/ipam/forms/filtersets.py:256 netbox/ipam/forms/model_forms.py:218 -#: netbox/ipam/models/vlans.py:250 netbox/ipam/tables/ip.py:255 -#: netbox/templates/ipam/prefix.html:60 netbox/templates/ipam/vlan.html:12 +#: netbox/ipam/forms/bulk_edit.py:218 netbox/ipam/forms/bulk_import.py:181 +#: netbox/ipam/forms/filtersets.py:259 netbox/ipam/forms/model_forms.py:217 +#: netbox/ipam/models/vlans.py:272 netbox/ipam/tables/ip.py:206 +#: netbox/templates/ipam/prefix.html:56 netbox/templates/ipam/vlan.html:12 #: netbox/templates/ipam/vlan/base.html:6 #: netbox/templates/ipam/vlan_edit.html:10 -#: netbox/templates/wireless/wirelesslan.html:30 +#: netbox/templates/wireless/wirelesslan.html:38 #: netbox/vpn/forms/bulk_import.py:304 netbox/vpn/forms/filtersets.py:284 -#: netbox/vpn/forms/model_forms.py:433 netbox/vpn/forms/model_forms.py:452 -#: netbox/wireless/forms/bulk_edit.py:55 -#: netbox/wireless/forms/bulk_import.py:48 -#: netbox/wireless/forms/model_forms.py:48 netbox/wireless/models.py:102 +#: netbox/vpn/forms/model_forms.py:436 netbox/vpn/forms/model_forms.py:455 +#: netbox/wireless/forms/bulk_edit.py:57 +#: netbox/wireless/forms/bulk_import.py:50 +#: netbox/wireless/forms/model_forms.py:50 netbox/wireless/models.py:102 msgid "VLAN" msgstr "VLAN" -#: netbox/ipam/forms/bulk_edit.py:245 +#: netbox/ipam/forms/bulk_edit.py:229 msgid "Prefix length" msgstr "Önek uzunluğu" -#: netbox/ipam/forms/bulk_edit.py:268 netbox/ipam/forms/filtersets.py:241 -#: netbox/templates/ipam/prefix.html:85 +#: netbox/ipam/forms/bulk_edit.py:252 netbox/ipam/forms/filtersets.py:244 +#: netbox/templates/ipam/prefix.html:81 msgid "Is a pool" msgstr "Havuz mu" -#: netbox/ipam/forms/bulk_edit.py:273 netbox/ipam/forms/bulk_edit.py:318 -#: netbox/ipam/forms/filtersets.py:248 netbox/ipam/forms/filtersets.py:293 -#: netbox/ipam/models/ip.py:272 netbox/ipam/models/ip.py:539 +#: netbox/ipam/forms/bulk_edit.py:257 netbox/ipam/forms/bulk_edit.py:302 +#: netbox/ipam/forms/filtersets.py:251 netbox/ipam/forms/filtersets.py:296 +#: netbox/ipam/models/ip.py:256 netbox/ipam/models/ip.py:525 msgid "Treat as fully utilized" msgstr "Tamamen kullanılmış gibi davran" -#: netbox/ipam/forms/bulk_edit.py:287 netbox/ipam/forms/filtersets.py:171 +#: netbox/ipam/forms/bulk_edit.py:271 netbox/ipam/forms/filtersets.py:173 +#: netbox/ipam/forms/model_forms.py:232 msgid "VLAN Assignment" msgstr "VLAN Ataması" -#: netbox/ipam/forms/bulk_edit.py:366 netbox/ipam/models/ip.py:772 +#: netbox/ipam/forms/bulk_edit.py:350 netbox/ipam/models/ip.py:772 msgid "DNS name" msgstr "DNS adı" -#: netbox/ipam/forms/bulk_edit.py:387 netbox/ipam/forms/bulk_edit.py:534 -#: netbox/ipam/forms/bulk_import.py:418 netbox/ipam/forms/bulk_import.py:493 -#: netbox/ipam/forms/bulk_import.py:519 netbox/ipam/forms/filtersets.py:390 -#: netbox/ipam/forms/filtersets.py:530 netbox/templates/ipam/fhrpgroup.html:22 +#: netbox/ipam/forms/bulk_edit.py:371 netbox/ipam/forms/bulk_edit.py:562 +#: netbox/ipam/forms/bulk_import.py:417 netbox/ipam/forms/bulk_import.py:528 +#: netbox/ipam/forms/bulk_import.py:554 netbox/ipam/forms/filtersets.py:393 +#: netbox/ipam/forms/filtersets.py:582 netbox/templates/ipam/fhrpgroup.html:22 #: netbox/templates/ipam/inc/panels/fhrp_groups.html:24 #: netbox/templates/ipam/service.html:32 #: netbox/templates/ipam/servicetemplate.html:19 msgid "Protocol" msgstr "Protokol" -#: netbox/ipam/forms/bulk_edit.py:394 netbox/ipam/forms/filtersets.py:397 +#: netbox/ipam/forms/bulk_edit.py:378 netbox/ipam/forms/filtersets.py:400 #: netbox/ipam/tables/fhrp.py:22 netbox/templates/ipam/fhrpgroup.html:26 msgid "Group ID" msgstr "Grup Kimliği" -#: netbox/ipam/forms/bulk_edit.py:399 netbox/ipam/forms/filtersets.py:402 -#: netbox/wireless/forms/bulk_edit.py:68 -#: netbox/wireless/forms/bulk_edit.py:115 -#: netbox/wireless/forms/bulk_import.py:62 -#: netbox/wireless/forms/bulk_import.py:65 -#: netbox/wireless/forms/bulk_import.py:104 -#: netbox/wireless/forms/bulk_import.py:107 -#: netbox/wireless/forms/filtersets.py:54 -#: netbox/wireless/forms/filtersets.py:88 +#: netbox/ipam/forms/bulk_edit.py:383 netbox/ipam/forms/filtersets.py:405 +#: netbox/wireless/forms/bulk_edit.py:70 +#: netbox/wireless/forms/bulk_edit.py:118 +#: netbox/wireless/forms/bulk_import.py:64 +#: netbox/wireless/forms/bulk_import.py:67 +#: netbox/wireless/forms/bulk_import.py:109 +#: netbox/wireless/forms/bulk_import.py:112 +#: netbox/wireless/forms/filtersets.py:57 +#: netbox/wireless/forms/filtersets.py:116 msgid "Authentication type" msgstr "Kimlik doğrulama türü" -#: netbox/ipam/forms/bulk_edit.py:404 netbox/ipam/forms/filtersets.py:406 +#: netbox/ipam/forms/bulk_edit.py:388 netbox/ipam/forms/filtersets.py:409 msgid "Authentication key" msgstr "Kimlik doğrulama anahtarı" -#: netbox/ipam/forms/bulk_edit.py:421 netbox/ipam/forms/filtersets.py:383 -#: netbox/ipam/forms/model_forms.py:507 netbox/netbox/navigation/menu.py:386 +#: netbox/ipam/forms/bulk_edit.py:405 netbox/ipam/forms/filtersets.py:386 +#: netbox/ipam/forms/model_forms.py:517 netbox/netbox/navigation/menu.py:407 #: netbox/templates/ipam/fhrpgroup.html:49 #: netbox/templates/wireless/inc/authentication_attrs.html:5 -#: netbox/wireless/forms/bulk_edit.py:91 -#: netbox/wireless/forms/bulk_edit.py:149 -#: netbox/wireless/forms/filtersets.py:36 -#: netbox/wireless/forms/filtersets.py:76 -#: netbox/wireless/forms/model_forms.py:55 -#: netbox/wireless/forms/model_forms.py:171 +#: netbox/wireless/forms/bulk_edit.py:94 +#: netbox/wireless/forms/bulk_edit.py:152 +#: netbox/wireless/forms/filtersets.py:39 +#: netbox/wireless/forms/filtersets.py:104 +#: netbox/wireless/forms/model_forms.py:58 +#: netbox/wireless/forms/model_forms.py:174 msgid "Authentication" msgstr "Kimlik Doğrulama" -#: netbox/ipam/forms/bulk_edit.py:436 netbox/ipam/forms/model_forms.py:608 -msgid "Scope type" -msgstr "Kapsam türü" - -#: netbox/ipam/forms/bulk_edit.py:439 netbox/ipam/forms/bulk_edit.py:453 -#: netbox/ipam/forms/model_forms.py:611 netbox/ipam/forms/model_forms.py:621 -#: netbox/ipam/tables/vlans.py:71 netbox/templates/ipam/vlangroup.html:38 -msgid "Scope" -msgstr "Kapsam" - -#: netbox/ipam/forms/bulk_edit.py:446 netbox/ipam/models/vlans.py:60 +#: netbox/ipam/forms/bulk_edit.py:430 netbox/ipam/models/vlans.py:62 msgid "VLAN ID ranges" msgstr "VLAN ID aralıkları" -#: netbox/ipam/forms/bulk_edit.py:525 +#: netbox/ipam/forms/bulk_edit.py:505 netbox/ipam/forms/bulk_import.py:485 +#: netbox/ipam/forms/filtersets.py:557 netbox/ipam/models/vlans.py:232 +#: netbox/ipam/tables/vlans.py:103 +msgid "Q-in-Q role" +msgstr "Q-in-Q rolü" + +#: netbox/ipam/forms/bulk_edit.py:522 +msgid "Q-in-Q" +msgstr "Q-in-Q" + +#: netbox/ipam/forms/bulk_edit.py:523 msgid "Site & Group" msgstr "Site ve Grup" -#: netbox/ipam/forms/bulk_edit.py:539 netbox/ipam/forms/model_forms.py:692 -#: netbox/ipam/forms/model_forms.py:724 netbox/ipam/tables/services.py:19 +#: netbox/ipam/forms/bulk_edit.py:546 netbox/ipam/forms/bulk_import.py:515 +#: netbox/ipam/forms/model_forms.py:724 netbox/ipam/tables/vlans.py:256 +#: netbox/templates/ipam/vlantranslationrule.html:14 +#: netbox/vpn/forms/model_forms.py:322 netbox/vpn/forms/model_forms.py:359 +msgid "Policy" +msgstr "İlke" + +#: netbox/ipam/forms/bulk_edit.py:567 netbox/ipam/forms/model_forms.py:742 +#: netbox/ipam/forms/model_forms.py:774 netbox/ipam/tables/services.py:19 #: netbox/ipam/tables/services.py:49 netbox/templates/ipam/service.html:36 #: netbox/templates/ipam/servicetemplate.html:23 msgid "Ports" msgstr "Limanlar" -#: netbox/ipam/forms/bulk_import.py:48 +#: netbox/ipam/forms/bulk_import.py:51 msgid "Import route targets" msgstr "Rota hedeflerini içe aktarma" -#: netbox/ipam/forms/bulk_import.py:54 +#: netbox/ipam/forms/bulk_import.py:57 msgid "Export route targets" msgstr "Rota hedeflerini dışa aktarma" -#: netbox/ipam/forms/bulk_import.py:92 netbox/ipam/forms/bulk_import.py:112 -#: netbox/ipam/forms/bulk_import.py:132 +#: netbox/ipam/forms/bulk_import.py:95 netbox/ipam/forms/bulk_import.py:115 +#: netbox/ipam/forms/bulk_import.py:135 msgid "Assigned RIR" msgstr "Atanmış RIR" -#: netbox/ipam/forms/bulk_import.py:182 +#: netbox/ipam/forms/bulk_import.py:178 msgid "VLAN's group (if any)" msgstr "VLAN grubu (varsa)" -#: netbox/ipam/forms/bulk_import.py:308 -msgid "Parent device of assigned interface (if any)" -msgstr "Atanan arayüzün ana cihazı (varsa)" - -#: netbox/ipam/forms/bulk_import.py:311 netbox/ipam/forms/bulk_import.py:512 -#: netbox/ipam/forms/model_forms.py:718 -#: netbox/virtualization/filtersets.py:288 -#: netbox/virtualization/filtersets.py:327 -#: netbox/virtualization/forms/bulk_edit.py:200 -#: netbox/virtualization/forms/bulk_edit.py:326 -#: netbox/virtualization/forms/bulk_import.py:146 -#: netbox/virtualization/forms/bulk_import.py:207 -#: netbox/virtualization/forms/filtersets.py:212 -#: netbox/virtualization/forms/filtersets.py:248 -#: netbox/virtualization/forms/model_forms.py:288 -#: netbox/vpn/forms/bulk_import.py:93 netbox/vpn/forms/bulk_import.py:290 -msgid "Virtual machine" -msgstr "Sanal makine" - -#: netbox/ipam/forms/bulk_import.py:315 -msgid "Parent VM of assigned interface (if any)" -msgstr "Atanan arabirimin üst VM'si (varsa)" +#: netbox/ipam/forms/bulk_import.py:207 +#: netbox/virtualization/forms/bulk_import.py:80 +#: netbox/wireless/forms/bulk_import.py:83 +msgid "Scope ID" +msgstr "Kapsam Kimliği" #: netbox/ipam/forms/bulk_import.py:325 -msgid "Is primary" -msgstr "Birincildir" - -#: netbox/ipam/forms/bulk_import.py:326 msgid "Make this the primary IP for the assigned device" msgstr "Bunu atanan cihaz için birincil IP yapın" -#: netbox/ipam/forms/bulk_import.py:330 +#: netbox/ipam/forms/bulk_import.py:329 msgid "Is out-of-band" msgstr "Bant dışı" -#: netbox/ipam/forms/bulk_import.py:331 +#: netbox/ipam/forms/bulk_import.py:330 msgid "Designate this as the out-of-band IP address for the assigned device" msgstr "Bunu atanan aygıtın bant dışı IP adresi olarak belirleyin" -#: netbox/ipam/forms/bulk_import.py:371 +#: netbox/ipam/forms/bulk_import.py:370 msgid "No device or virtual machine specified; cannot set as primary IP" msgstr "" "Aygıt veya sanal makine belirtilmemiş; birincil IP olarak ayarlanamıyor" -#: netbox/ipam/forms/bulk_import.py:375 +#: netbox/ipam/forms/bulk_import.py:374 msgid "No device specified; cannot set as out-of-band IP" msgstr "Aygıt belirtilmemiş; bant dışı IP olarak ayarlanamıyor" -#: netbox/ipam/forms/bulk_import.py:379 +#: netbox/ipam/forms/bulk_import.py:378 msgid "Cannot set out-of-band IP for virtual machines" msgstr "Sanal makineler için bant dışı IP ayarlanamıyor" -#: netbox/ipam/forms/bulk_import.py:383 +#: netbox/ipam/forms/bulk_import.py:382 msgid "No interface specified; cannot set as primary IP" msgstr "Arayüz belirtilmedi; birincil IP olarak ayarlanamıyor" -#: netbox/ipam/forms/bulk_import.py:387 +#: netbox/ipam/forms/bulk_import.py:386 msgid "No interface specified; cannot set as out-of-band IP" msgstr "Arayüz belirtilmedi; bant dışı IP olarak ayarlanamıyor" -#: netbox/ipam/forms/bulk_import.py:422 +#: netbox/ipam/forms/bulk_import.py:421 msgid "Auth type" msgstr "Kimlik doğrulama türü" -#: netbox/ipam/forms/bulk_import.py:437 -msgid "Scope type (app & model)" -msgstr "Kapsam türü (uygulama ve model)" - -#: netbox/ipam/forms/bulk_import.py:464 +#: netbox/ipam/forms/bulk_import.py:463 msgid "Assigned VLAN group" msgstr "Atanmış VLAN grubu" -#: netbox/ipam/forms/bulk_import.py:495 netbox/ipam/forms/bulk_import.py:521 +#: netbox/ipam/forms/bulk_import.py:495 +msgid "Service VLAN (for Q-in-Q/802.1ad customer VLANs)" +msgstr "Hizmet VLAN (Q-in-Q/802.1ad müşteri VLAN'ları için)" + +#: netbox/ipam/forms/bulk_import.py:518 netbox/ipam/models/vlans.py:343 +msgid "VLAN translation policy" +msgstr "VLAN çeviri politikası" + +#: netbox/ipam/forms/bulk_import.py:530 netbox/ipam/forms/bulk_import.py:556 msgid "IP protocol" msgstr "IP protokolü" -#: netbox/ipam/forms/bulk_import.py:509 +#: netbox/ipam/forms/bulk_import.py:544 msgid "Required if not assigned to a VM" msgstr "Bir VM'ye atanmadıysa gereklidir" -#: netbox/ipam/forms/bulk_import.py:516 +#: netbox/ipam/forms/bulk_import.py:551 msgid "Required if not assigned to a device" msgstr "Bir cihaza atanmadıysa gereklidir" -#: netbox/ipam/forms/bulk_import.py:541 +#: netbox/ipam/forms/bulk_import.py:576 #, python-brace-format msgid "{ip} is not assigned to this device/VM." msgstr "{ip} bu cihaza/VM'ye atanmamıştır." -#: netbox/ipam/forms/filtersets.py:47 netbox/ipam/forms/model_forms.py:63 -#: netbox/netbox/navigation/menu.py:189 netbox/vpn/forms/model_forms.py:410 +#: netbox/ipam/forms/filtersets.py:49 netbox/ipam/forms/model_forms.py:66 +#: netbox/netbox/navigation/menu.py:195 netbox/vpn/forms/model_forms.py:413 msgid "Route Targets" msgstr "Rota Hedefleri" -#: netbox/ipam/forms/filtersets.py:53 netbox/ipam/forms/model_forms.py:50 -#: netbox/vpn/forms/filtersets.py:224 netbox/vpn/forms/model_forms.py:397 +#: netbox/ipam/forms/filtersets.py:55 netbox/ipam/forms/model_forms.py:53 +#: netbox/vpn/forms/filtersets.py:224 netbox/vpn/forms/model_forms.py:400 msgid "Import targets" msgstr "Hedefleri içe aktarma" -#: netbox/ipam/forms/filtersets.py:58 netbox/ipam/forms/model_forms.py:55 -#: netbox/vpn/forms/filtersets.py:229 netbox/vpn/forms/model_forms.py:402 +#: netbox/ipam/forms/filtersets.py:60 netbox/ipam/forms/model_forms.py:58 +#: netbox/vpn/forms/filtersets.py:229 netbox/vpn/forms/model_forms.py:405 msgid "Export targets" msgstr "İhracat hedefleri" -#: netbox/ipam/forms/filtersets.py:73 +#: netbox/ipam/forms/filtersets.py:75 msgid "Imported by VRF" msgstr "VRF tarafından ithal" -#: netbox/ipam/forms/filtersets.py:78 +#: netbox/ipam/forms/filtersets.py:80 msgid "Exported by VRF" msgstr "VRF tarafından ihraç edildi" -#: netbox/ipam/forms/filtersets.py:87 netbox/ipam/tables/ip.py:89 +#: netbox/ipam/forms/filtersets.py:89 netbox/ipam/tables/ip.py:35 #: netbox/templates/ipam/rir.html:30 msgid "Private" msgstr "Özel" -#: netbox/ipam/forms/filtersets.py:105 netbox/ipam/forms/filtersets.py:191 -#: netbox/ipam/forms/filtersets.py:272 netbox/ipam/forms/filtersets.py:326 +#: netbox/ipam/forms/filtersets.py:107 netbox/ipam/forms/filtersets.py:193 +#: netbox/ipam/forms/filtersets.py:275 netbox/ipam/forms/filtersets.py:329 msgid "Address family" msgstr "Adres ailesi" -#: netbox/ipam/forms/filtersets.py:119 netbox/templates/ipam/asnrange.html:25 +#: netbox/ipam/forms/filtersets.py:121 netbox/templates/ipam/asnrange.html:25 msgid "Range" msgstr "Menzil" -#: netbox/ipam/forms/filtersets.py:128 +#: netbox/ipam/forms/filtersets.py:130 msgid "Start" msgstr "Başlat" -#: netbox/ipam/forms/filtersets.py:132 +#: netbox/ipam/forms/filtersets.py:134 msgid "End" msgstr "Bitiş" -#: netbox/ipam/forms/filtersets.py:186 +#: netbox/ipam/forms/filtersets.py:188 msgid "Search within" msgstr "İçinde ara" -#: netbox/ipam/forms/filtersets.py:207 netbox/ipam/forms/filtersets.py:342 +#: netbox/ipam/forms/filtersets.py:209 netbox/ipam/forms/filtersets.py:345 msgid "Present in VRF" msgstr "VRF'de mevcut" -#: netbox/ipam/forms/filtersets.py:311 +#: netbox/ipam/forms/filtersets.py:314 msgid "Device/VM" msgstr "Cihaz/VM" -#: netbox/ipam/forms/filtersets.py:321 +#: netbox/ipam/forms/filtersets.py:324 msgid "Parent Prefix" msgstr "Ebeveyn Öneki" -#: netbox/ipam/forms/filtersets.py:347 -msgid "Assigned Device" -msgstr "Atanan Cihaz" - -#: netbox/ipam/forms/filtersets.py:352 -msgid "Assigned VM" -msgstr "Atanmış VM" - -#: netbox/ipam/forms/filtersets.py:366 +#: netbox/ipam/forms/filtersets.py:369 msgid "Assigned to an interface" msgstr "Bir arayüze atandı" -#: netbox/ipam/forms/filtersets.py:373 netbox/templates/ipam/ipaddress.html:51 +#: netbox/ipam/forms/filtersets.py:376 netbox/templates/ipam/ipaddress.html:51 msgid "DNS Name" msgstr "DNS Adı" -#: netbox/ipam/forms/filtersets.py:416 netbox/ipam/models/vlans.py:251 -#: netbox/ipam/tables/ip.py:176 netbox/ipam/tables/vlans.py:82 -#: netbox/ipam/views.py:971 netbox/netbox/navigation/menu.py:193 -#: netbox/netbox/navigation/menu.py:195 +#: netbox/ipam/forms/filtersets.py:419 netbox/ipam/models/vlans.py:273 +#: netbox/ipam/tables/ip.py:122 netbox/ipam/tables/vlans.py:51 +#: netbox/ipam/views.py:1036 netbox/netbox/navigation/menu.py:199 +#: netbox/netbox/navigation/menu.py:201 msgid "VLANs" msgstr "VLAN'lar" -#: netbox/ipam/forms/filtersets.py:457 +#: netbox/ipam/forms/filtersets.py:460 msgid "Contains VLAN ID" msgstr "VLAN Kimliği içerir" -#: netbox/ipam/forms/filtersets.py:513 netbox/ipam/models/vlans.py:192 +#: netbox/ipam/forms/filtersets.py:494 netbox/ipam/models/vlans.py:363 +msgid "Local VLAN ID" +msgstr "Yerel VLAN Kimliği" + +#: netbox/ipam/forms/filtersets.py:499 netbox/ipam/models/vlans.py:371 +msgid "Remote VLAN ID" +msgstr "Uzak VLAN Kimliği" + +#: netbox/ipam/forms/filtersets.py:509 +msgid "Q-in-Q/802.1ad" +msgstr "Q-in-Q/802.1ad" + +#: netbox/ipam/forms/filtersets.py:554 netbox/ipam/models/vlans.py:191 #: netbox/templates/ipam/vlan.html:31 msgid "VLAN ID" msgstr "VLAN KİMLİĞİ" -#: netbox/ipam/forms/filtersets.py:556 netbox/ipam/forms/model_forms.py:324 -#: netbox/ipam/forms/model_forms.py:746 netbox/ipam/forms/model_forms.py:772 -#: netbox/ipam/tables/vlans.py:195 -#: netbox/templates/virtualization/virtualdisk.html:21 -#: netbox/templates/virtualization/virtualmachine.html:12 -#: netbox/templates/virtualization/vminterface.html:21 -#: netbox/templates/vpn/tunneltermination.html:25 -#: netbox/virtualization/forms/filtersets.py:197 -#: netbox/virtualization/forms/filtersets.py:242 -#: netbox/virtualization/forms/model_forms.py:220 -#: netbox/virtualization/tables/virtualmachines.py:135 -#: netbox/virtualization/tables/virtualmachines.py:190 -#: netbox/vpn/choices.py:53 netbox/vpn/forms/filtersets.py:293 -#: netbox/vpn/forms/model_forms.py:160 netbox/vpn/forms/model_forms.py:171 -#: netbox/vpn/forms/model_forms.py:273 netbox/vpn/forms/model_forms.py:454 -msgid "Virtual Machine" -msgstr "Sanal Makine" - -#: netbox/ipam/forms/model_forms.py:80 +#: netbox/ipam/forms/model_forms.py:83 #: netbox/templates/ipam/routetarget.html:10 msgid "Route Target" msgstr "Rota Hedefi" -#: netbox/ipam/forms/model_forms.py:114 netbox/ipam/tables/ip.py:117 +#: netbox/ipam/forms/model_forms.py:118 netbox/ipam/tables/ip.py:63 #: netbox/templates/ipam/aggregate.html:11 #: netbox/templates/ipam/prefix.html:38 msgid "Aggregate" msgstr "Agrega" -#: netbox/ipam/forms/model_forms.py:135 netbox/templates/ipam/asnrange.html:12 +#: netbox/ipam/forms/model_forms.py:140 netbox/templates/ipam/asnrange.html:12 msgid "ASN Range" msgstr "ASN Aralığı" -#: netbox/ipam/forms/model_forms.py:231 -msgid "Site/VLAN Assignment" -msgstr "" - -#: netbox/ipam/forms/model_forms.py:259 netbox/templates/ipam/iprange.html:10 +#: netbox/ipam/forms/model_forms.py:269 netbox/templates/ipam/iprange.html:10 msgid "IP Range" msgstr "IP Aralığı" -#: netbox/ipam/forms/model_forms.py:295 netbox/ipam/forms/model_forms.py:325 -#: netbox/ipam/forms/model_forms.py:506 +#: netbox/ipam/forms/model_forms.py:305 netbox/ipam/forms/model_forms.py:335 +#: netbox/ipam/forms/model_forms.py:516 #: netbox/templates/ipam/fhrpgroup.html:19 msgid "FHRP Group" msgstr "FHRP Grubu" -#: netbox/ipam/forms/model_forms.py:310 +#: netbox/ipam/forms/model_forms.py:320 msgid "Make this the primary IP for the device/VM" msgstr "Bunu cihaz/VM için birincil IP yapın" -#: netbox/ipam/forms/model_forms.py:314 +#: netbox/ipam/forms/model_forms.py:324 msgid "Make this the out-of-band IP for the device" msgstr "Bunu cihaz için bant dışı IP yapın" -#: netbox/ipam/forms/model_forms.py:329 +#: netbox/ipam/forms/model_forms.py:339 msgid "NAT IP (Inside)" msgstr "NAT IP (İç)" -#: netbox/ipam/forms/model_forms.py:391 +#: netbox/ipam/forms/model_forms.py:401 msgid "An IP address can only be assigned to a single object." msgstr "IP adresi yalnızca tek bir nesneye atanabilir." -#: netbox/ipam/forms/model_forms.py:398 +#: netbox/ipam/forms/model_forms.py:408 msgid "Cannot reassign primary IP address for the parent device/VM" msgstr "Ana aygıt/sanal makine için birincil IP adresi yeniden atanamıyor" -#: netbox/ipam/forms/model_forms.py:402 +#: netbox/ipam/forms/model_forms.py:412 msgid "Cannot reassign out-of-Band IP address for the parent device" msgstr "Ana aygıt için bant dışı IP adresi yeniden atanamıyor" -#: netbox/ipam/forms/model_forms.py:412 +#: netbox/ipam/forms/model_forms.py:422 msgid "" "Only IP addresses assigned to an interface can be designated as primary IPs." msgstr "" "Yalnızca bir arayüze atanan IP adresleri birincil IP olarak belirlenebilir." -#: netbox/ipam/forms/model_forms.py:420 +#: netbox/ipam/forms/model_forms.py:430 msgid "" "Only IP addresses assigned to a device interface can be designated as the " "out-of-band IP for a device." @@ -9843,24 +10335,29 @@ msgstr "" "Yalnızca bir cihaz arayüzüne atanan IP adresleri, bir aygıt için bant dışı " "IP olarak belirlenebilir." -#: netbox/ipam/forms/model_forms.py:508 +#: netbox/ipam/forms/model_forms.py:518 msgid "Virtual IP Address" msgstr "Sanal IP Adresi" -#: netbox/ipam/forms/model_forms.py:593 +#: netbox/ipam/forms/model_forms.py:603 msgid "Assignment already exists" msgstr "Atama zaten var" -#: netbox/ipam/forms/model_forms.py:602 +#: netbox/ipam/forms/model_forms.py:612 #: netbox/templates/ipam/vlangroup.html:42 msgid "VLAN IDs" msgstr "VLAN kimlikleri" -#: netbox/ipam/forms/model_forms.py:620 +#: netbox/ipam/forms/model_forms.py:630 msgid "Child VLANs" msgstr "Çocuk VLAN'ları" -#: netbox/ipam/forms/model_forms.py:697 netbox/ipam/forms/model_forms.py:729 +#: netbox/ipam/forms/model_forms.py:730 +#: netbox/templates/ipam/vlantranslationrule.html:11 +msgid "VLAN Translation Rule" +msgstr "VLAN Çeviri Kuralı" + +#: netbox/ipam/forms/model_forms.py:747 netbox/ipam/forms/model_forms.py:779 msgid "" "Comma-separated list of one or more port numbers. A range may be specified " "using a hyphen." @@ -9868,33 +10365,28 @@ msgstr "" "Bir veya daha fazla bağlantı noktası numarasının virgülle ayrılmış listesi. " "Bir aralık bir tire kullanılarak belirtilebilir." -#: netbox/ipam/forms/model_forms.py:702 +#: netbox/ipam/forms/model_forms.py:752 #: netbox/templates/ipam/servicetemplate.html:12 msgid "Service Template" msgstr "Hizmet Şablonu" -#: netbox/ipam/forms/model_forms.py:749 +#: netbox/ipam/forms/model_forms.py:799 msgid "Port(s)" msgstr "Liman (lar)" -#: netbox/ipam/forms/model_forms.py:750 netbox/ipam/forms/model_forms.py:778 -#: netbox/templates/ipam/service.html:21 -msgid "Service" -msgstr "Hizmet" - -#: netbox/ipam/forms/model_forms.py:763 +#: netbox/ipam/forms/model_forms.py:813 msgid "Service template" msgstr "Hizmet şablonu" -#: netbox/ipam/forms/model_forms.py:775 +#: netbox/ipam/forms/model_forms.py:825 msgid "From Template" msgstr "Şablondan" -#: netbox/ipam/forms/model_forms.py:776 +#: netbox/ipam/forms/model_forms.py:826 msgid "Custom" msgstr "Özel" -#: netbox/ipam/forms/model_forms.py:806 +#: netbox/ipam/forms/model_forms.py:856 msgid "" "Must specify name, protocol, and port(s) if not using a service template." msgstr "" @@ -9913,28 +10405,28 @@ msgstr "ASN aralığı" msgid "ASN ranges" msgstr "ASN aralıkları" -#: netbox/ipam/models/asns.py:72 +#: netbox/ipam/models/asns.py:69 #, python-brace-format msgid "Starting ASN ({start}) must be lower than ending ASN ({end})." msgstr "Başlangıç ASN'si ({start}), son ASN'den ({end}) daha küçük olmalıdır." -#: netbox/ipam/models/asns.py:104 +#: netbox/ipam/models/asns.py:101 msgid "Regional Internet Registry responsible for this AS number space" msgstr "Bu ASN alanından sorumlu Bölgesel İnternet Kaydı" -#: netbox/ipam/models/asns.py:109 +#: netbox/ipam/models/asns.py:106 msgid "16- or 32-bit autonomous system number" msgstr "16 veya 32 bit otonom sistem numarası" -#: netbox/ipam/models/fhrp.py:22 +#: netbox/ipam/models/fhrp.py:21 msgid "group ID" msgstr "grup kimliği" -#: netbox/ipam/models/fhrp.py:30 netbox/ipam/models/services.py:22 +#: netbox/ipam/models/fhrp.py:29 netbox/ipam/models/services.py:21 msgid "protocol" msgstr "protokol" -#: netbox/ipam/models/fhrp.py:38 netbox/wireless/models.py:28 +#: netbox/ipam/models/fhrp.py:38 netbox/wireless/models.py:29 msgid "authentication type" msgstr "kimlik doğrulama türü" @@ -9950,11 +10442,11 @@ msgstr "FHRP grubu" msgid "FHRP groups" msgstr "FHRP grupları" -#: netbox/ipam/models/fhrp.py:113 +#: netbox/ipam/models/fhrp.py:110 msgid "FHRP group assignment" msgstr "FHRP grup ataması" -#: netbox/ipam/models/fhrp.py:114 +#: netbox/ipam/models/fhrp.py:111 msgid "FHRP group assignments" msgstr "FHRP grup ödevleri" @@ -9966,35 +10458,35 @@ msgstr "özel" msgid "IP space managed by this RIR is considered private" msgstr "Bu RIR tarafından yönetilen IP alanı özel olarak kabul edilir" -#: netbox/ipam/models/ip.py:72 netbox/netbox/navigation/menu.py:182 +#: netbox/ipam/models/ip.py:72 netbox/netbox/navigation/menu.py:188 msgid "RIRs" msgstr "RIR'ler" -#: netbox/ipam/models/ip.py:84 +#: netbox/ipam/models/ip.py:81 msgid "IPv4 or IPv6 network" msgstr "IPv4 veya IPv6 ağı" -#: netbox/ipam/models/ip.py:91 +#: netbox/ipam/models/ip.py:88 msgid "Regional Internet Registry responsible for this IP space" msgstr "Bu IP alanından sorumlu Bölgesel İnternet Kaydı" -#: netbox/ipam/models/ip.py:101 +#: netbox/ipam/models/ip.py:98 msgid "date added" msgstr "tarih eklendi" -#: netbox/ipam/models/ip.py:115 +#: netbox/ipam/models/ip.py:112 msgid "aggregate" msgstr "toplamak" -#: netbox/ipam/models/ip.py:116 +#: netbox/ipam/models/ip.py:113 msgid "aggregates" msgstr "toplar" -#: netbox/ipam/models/ip.py:132 +#: netbox/ipam/models/ip.py:126 msgid "Cannot create aggregate with /0 mask." msgstr "/0 maskesi ile toplama oluşturulamıyor." -#: netbox/ipam/models/ip.py:144 +#: netbox/ipam/models/ip.py:138 #, python-brace-format msgid "" "Aggregates cannot overlap. {prefix} is already covered by an existing " @@ -10003,7 +10495,7 @@ msgstr "" "Agremalar üst üste gelemez. {prefix} zaten mevcut bir toplama tarafından " "kapsanmıştır ({aggregate})." -#: netbox/ipam/models/ip.py:158 +#: netbox/ipam/models/ip.py:152 #, python-brace-format msgid "" "Prefixes cannot overlap aggregates. {prefix} covers an existing aggregate " @@ -10012,125 +10504,120 @@ msgstr "" "Önekler toplamalarla örtüşemez. {prefix} mevcut bir toplamı kapsar " "({aggregate})." -#: netbox/ipam/models/ip.py:200 netbox/ipam/models/ip.py:737 -#: netbox/vpn/models/tunnels.py:114 -msgid "role" -msgstr "rol" - -#: netbox/ipam/models/ip.py:201 +#: netbox/ipam/models/ip.py:195 msgid "roles" msgstr "rolleri" -#: netbox/ipam/models/ip.py:217 netbox/ipam/models/ip.py:293 +#: netbox/ipam/models/ip.py:208 netbox/ipam/models/ip.py:277 msgid "prefix" msgstr "önek" -#: netbox/ipam/models/ip.py:218 +#: netbox/ipam/models/ip.py:209 msgid "IPv4 or IPv6 network with mask" msgstr "Maskeli IPv4 veya IPv6 ağı" -#: netbox/ipam/models/ip.py:254 +#: netbox/ipam/models/ip.py:238 msgid "Operational status of this prefix" msgstr "Bu önekin operasyonel durumu" -#: netbox/ipam/models/ip.py:262 +#: netbox/ipam/models/ip.py:246 msgid "The primary function of this prefix" msgstr "Bu önekin birincil işlevi" -#: netbox/ipam/models/ip.py:265 +#: netbox/ipam/models/ip.py:249 msgid "is a pool" msgstr "bir havuz" -#: netbox/ipam/models/ip.py:267 +#: netbox/ipam/models/ip.py:251 msgid "All IP addresses within this prefix are considered usable" msgstr "Bu önek içindeki tüm IP adresleri kullanılabilir kabul edilir" -#: netbox/ipam/models/ip.py:270 netbox/ipam/models/ip.py:537 +#: netbox/ipam/models/ip.py:254 netbox/ipam/models/ip.py:523 msgid "mark utilized" msgstr "kullanılan işaret" -#: netbox/ipam/models/ip.py:294 +#: netbox/ipam/models/ip.py:278 msgid "prefixes" msgstr "önekleri" -#: netbox/ipam/models/ip.py:317 +#: netbox/ipam/models/ip.py:298 msgid "Cannot create prefix with /0 mask." msgstr "/0 maskesi ile önek oluşturulamıyor." -#: netbox/ipam/models/ip.py:324 netbox/ipam/models/ip.py:874 +#: netbox/ipam/models/ip.py:305 netbox/ipam/models/ip.py:871 #, python-brace-format msgid "VRF {vrf}" msgstr "VRF {vrf}" -#: netbox/ipam/models/ip.py:324 netbox/ipam/models/ip.py:874 +#: netbox/ipam/models/ip.py:305 netbox/ipam/models/ip.py:871 msgid "global table" msgstr "küresel tablo" -#: netbox/ipam/models/ip.py:326 +#: netbox/ipam/models/ip.py:307 #, python-brace-format msgid "Duplicate prefix found in {table}: {prefix}" msgstr "Yinelenen önek şurada bulundu {table}: {prefix}" -#: netbox/ipam/models/ip.py:495 +#: netbox/ipam/models/ip.py:481 msgid "start address" msgstr "başlangıç adresi" -#: netbox/ipam/models/ip.py:496 netbox/ipam/models/ip.py:500 -#: netbox/ipam/models/ip.py:712 +#: netbox/ipam/models/ip.py:482 netbox/ipam/models/ip.py:486 +#: netbox/ipam/models/ip.py:711 msgid "IPv4 or IPv6 address (with mask)" msgstr "IPv4 veya IPv6 adresi (maske ile)" -#: netbox/ipam/models/ip.py:499 +#: netbox/ipam/models/ip.py:485 msgid "end address" msgstr "bitiş adresi" -#: netbox/ipam/models/ip.py:526 +#: netbox/ipam/models/ip.py:512 msgid "Operational status of this range" msgstr "Bu aralığın çalışma durumu" -#: netbox/ipam/models/ip.py:534 +#: netbox/ipam/models/ip.py:520 msgid "The primary function of this range" msgstr "Bu aralığın birincil işlevi" -#: netbox/ipam/models/ip.py:548 +#: netbox/ipam/models/ip.py:534 msgid "IP range" msgstr "IP aralığı" -#: netbox/ipam/models/ip.py:549 +#: netbox/ipam/models/ip.py:535 msgid "IP ranges" msgstr "IP aralıkları" -#: netbox/ipam/models/ip.py:565 +#: netbox/ipam/models/ip.py:548 msgid "Starting and ending IP address versions must match" msgstr "Başlangıç ve bitiş IP adresi sürümleri eşleşmelidir" -#: netbox/ipam/models/ip.py:571 +#: netbox/ipam/models/ip.py:554 msgid "Starting and ending IP address masks must match" msgstr "Başlangıç ve bitiş IP adresi maskeleri eşleşmelidir" -#: netbox/ipam/models/ip.py:578 +#: netbox/ipam/models/ip.py:561 #, python-brace-format msgid "" "Ending address must be greater than the starting address ({start_address})" msgstr "" "Bitiş adresi başlangıç adresinden daha büyük olmalıdır ({start_address})" -#: netbox/ipam/models/ip.py:590 +#: netbox/ipam/models/ip.py:589 #, python-brace-format msgid "Defined addresses overlap with range {overlapping_range} in VRF {vrf}" msgstr "" "Tanımlanan adresler aralık ile örtüşüyor {overlapping_range} VRF'de {vrf}" -#: netbox/ipam/models/ip.py:599 +#: netbox/ipam/models/ip.py:598 #, python-brace-format msgid "Defined range exceeds maximum supported size ({max_size})" msgstr "Tanımlanan aralık maksimum desteklenen boyutu aşıyor ({max_size})" -#: netbox/ipam/models/ip.py:711 netbox/tenancy/models/contacts.py:82 +#: netbox/ipam/models/ip.py:710 netbox/tenancy/models/contacts.py:77 msgid "address" msgstr "adres" -#: netbox/ipam/models/ip.py:734 +#: netbox/ipam/models/ip.py:733 msgid "The operational status of this IP" msgstr "Bu IP'nin operasyonel durumu" @@ -10150,98 +10637,98 @@ msgstr "Bu adresin “dış” IP olduğu IP" msgid "Hostname or FQDN (not case-sensitive)" msgstr "Ana bilgisayar adı veya FQDN (büyük/küçük harfe duyarlı değil)" -#: netbox/ipam/models/ip.py:789 netbox/ipam/models/services.py:94 +#: netbox/ipam/models/ip.py:789 netbox/ipam/models/services.py:90 msgid "IP addresses" msgstr "IP adresleri" -#: netbox/ipam/models/ip.py:845 +#: netbox/ipam/models/ip.py:842 msgid "Cannot create IP address with /0 mask." msgstr "/0 maskesi ile IP adresi oluşturulamıyor." -#: netbox/ipam/models/ip.py:851 +#: netbox/ipam/models/ip.py:848 #, python-brace-format msgid "{ip} is a network ID, which may not be assigned to an interface." msgstr "{ip} bir arayüze atanamayacak bir ağ kimliğidir." -#: netbox/ipam/models/ip.py:862 +#: netbox/ipam/models/ip.py:859 #, python-brace-format msgid "" "{ip} is a broadcast address, which may not be assigned to an interface." msgstr "{ip} bir arayüze atanamayacak bir yayın adresidir." -#: netbox/ipam/models/ip.py:876 +#: netbox/ipam/models/ip.py:873 #, python-brace-format msgid "Duplicate IP address found in {table}: {ipaddress}" msgstr "Yinelenen IP adresi şurada bulundu {table}: {ipaddress}" -#: netbox/ipam/models/ip.py:897 +#: netbox/ipam/models/ip.py:896 msgid "" "Cannot reassign IP address while it is designated as the primary IP for the " "parent object" msgstr "" "Üst nesne için birincil IP olarak belirlenirken IP adresi yeniden atanamıyor" -#: netbox/ipam/models/ip.py:903 +#: netbox/ipam/models/ip.py:902 msgid "Only IPv6 addresses can be assigned SLAAC status" msgstr "Yalnızca IPv6 adreslerine SLAAC durumu atanabilir" -#: netbox/ipam/models/services.py:33 +#: netbox/ipam/models/services.py:32 msgid "port numbers" msgstr "port numaraları" -#: netbox/ipam/models/services.py:59 +#: netbox/ipam/models/services.py:58 msgid "service template" msgstr "hizmet şablonu" -#: netbox/ipam/models/services.py:60 +#: netbox/ipam/models/services.py:59 msgid "service templates" msgstr "servis şablonları" -#: netbox/ipam/models/services.py:95 +#: netbox/ipam/models/services.py:91 msgid "The specific IP addresses (if any) to which this service is bound" msgstr "Bu hizmetin bağlı olduğu belirli IP adresleri (varsa)" -#: netbox/ipam/models/services.py:102 +#: netbox/ipam/models/services.py:98 msgid "service" msgstr "hizmet" -#: netbox/ipam/models/services.py:103 +#: netbox/ipam/models/services.py:99 msgid "services" msgstr "servisler" -#: netbox/ipam/models/services.py:117 +#: netbox/ipam/models/services.py:110 msgid "" "A service cannot be associated with both a device and a virtual machine." msgstr "Bir hizmet hem cihaz hem de sanal makine ile ilişkilendirilemez." -#: netbox/ipam/models/services.py:119 +#: netbox/ipam/models/services.py:112 msgid "" "A service must be associated with either a device or a virtual machine." msgstr "Bir hizmet, bir cihaz veya sanal makine ile ilişkilendirilmelidir." -#: netbox/ipam/models/vlans.py:85 +#: netbox/ipam/models/vlans.py:87 msgid "VLAN groups" msgstr "VLAN grupları" -#: netbox/ipam/models/vlans.py:95 +#: netbox/ipam/models/vlans.py:94 msgid "Cannot set scope_type without scope_id." msgstr "scope_id olmadan scope_type ayarlanamıyor." -#: netbox/ipam/models/vlans.py:97 +#: netbox/ipam/models/vlans.py:96 msgid "Cannot set scope_id without scope_type." msgstr "scope_type olmadan scope_id ayarlanamıyor." -#: netbox/ipam/models/vlans.py:105 +#: netbox/ipam/models/vlans.py:104 #, python-brace-format msgid "Starting VLAN ID in range ({value}) cannot be less than {minimum}" msgstr "Menzilde VLAN Kimliğini Başlatma ({value}) daha az olamaz {minimum}" -#: netbox/ipam/models/vlans.py:111 +#: netbox/ipam/models/vlans.py:110 #, python-brace-format msgid "Ending VLAN ID in range ({value}) cannot exceed {maximum}" msgstr "Menzilde VLAN Kimliğini Sonlandırma ({value}) geçemez {maximum}" -#: netbox/ipam/models/vlans.py:118 +#: netbox/ipam/models/vlans.py:117 #, python-brace-format msgid "" "Ending VLAN ID in range must be greater than or equal to the starting VLAN " @@ -10250,31 +10737,36 @@ msgstr "" "Aralıktaki bitiş VLAN kimliği, başlangıç VLAN kimliğinden daha büyük veya " "ona eşit olmalıdır ({range})" -#: netbox/ipam/models/vlans.py:124 +#: netbox/ipam/models/vlans.py:123 msgid "Ranges cannot overlap." msgstr "Aralıklar üst üste gelemez." -#: netbox/ipam/models/vlans.py:181 +#: netbox/ipam/models/vlans.py:180 msgid "The specific site to which this VLAN is assigned (if any)" msgstr "Bu VLAN'ın atandığı belirli site (varsa)" -#: netbox/ipam/models/vlans.py:189 +#: netbox/ipam/models/vlans.py:188 msgid "VLAN group (optional)" msgstr "VLAN grubu (isteğe bağlı)" -#: netbox/ipam/models/vlans.py:197 +#: netbox/ipam/models/vlans.py:196 netbox/ipam/models/vlans.py:368 +#: netbox/ipam/models/vlans.py:376 msgid "Numeric VLAN ID (1-4094)" msgstr "Sayısal VLAN Kimliği (1-4094)" -#: netbox/ipam/models/vlans.py:215 +#: netbox/ipam/models/vlans.py:214 msgid "Operational status of this VLAN" msgstr "Bu VLAN'ın operasyonel durumu" -#: netbox/ipam/models/vlans.py:223 +#: netbox/ipam/models/vlans.py:222 msgid "The primary function of this VLAN" msgstr "Bu VLAN'ın birincil işlevi" -#: netbox/ipam/models/vlans.py:266 +#: netbox/ipam/models/vlans.py:237 +msgid "Customer/service VLAN designation (for Q-in-Q/IEEE 802.1ad)" +msgstr "Müşteri/hizmet VLAN tanımı (Q-in-Q/IEEE 802.1ad için)" + +#: netbox/ipam/models/vlans.py:285 #, python-brace-format msgid "" "VLAN is assigned to group {group} (scope: {scope}); cannot also assign to " @@ -10283,41 +10775,57 @@ msgstr "" "VLAN {group} adlı gruba (kapsam: {scope}) atandığı için; {site} adlı siteye " "de atanamaz ." -#: netbox/ipam/models/vlans.py:275 +#: netbox/ipam/models/vlans.py:294 #, python-brace-format msgid "VID must be in ranges {ranges} for VLANs in group {group}" msgstr "VID aralıklarda olmalıdır {ranges} gruptaki VLAN'lar için {group}" -#: netbox/ipam/models/vrfs.py:30 +#: netbox/ipam/models/vlans.py:301 +msgid "Only Q-in-Q customer VLANs maybe assigned to a service VLAN." +msgstr "Bir hizmet VLAN'ına yalnızca Q-in-Q müşteri VLAN'ları atanabilir." + +#: netbox/ipam/models/vlans.py:307 +msgid "A Q-in-Q customer VLAN must be assigned to a service VLAN." +msgstr "Bir Q-in-Q müşteri VLAN'ı bir hizmet VLAN'ına atanmalıdır." + +#: netbox/ipam/models/vlans.py:344 +msgid "VLAN translation policies" +msgstr "VLAN çeviri politikaları" + +#: netbox/ipam/models/vlans.py:385 +msgid "VLAN translation rule" +msgstr "VLAN çeviri kuralı" + +#: netbox/ipam/models/vrfs.py:29 msgid "route distinguisher" msgstr "rota ayırt edici" -#: netbox/ipam/models/vrfs.py:31 +#: netbox/ipam/models/vrfs.py:30 msgid "Unique route distinguisher (as defined in RFC 4364)" msgstr "Benzersiz rota ayırt edici (RFC 4364'te tanımlandığı gibi)" -#: netbox/ipam/models/vrfs.py:42 +#: netbox/ipam/models/vrfs.py:41 msgid "enforce unique space" msgstr "benzersiz alanı zorunlu kılmak" -#: netbox/ipam/models/vrfs.py:43 +#: netbox/ipam/models/vrfs.py:42 msgid "Prevent duplicate prefixes/IP addresses within this VRF" msgstr "Bu VRF içinde yinelenen önek/IP adreslerini önleyin" -#: netbox/ipam/models/vrfs.py:63 netbox/netbox/navigation/menu.py:186 -#: netbox/netbox/navigation/menu.py:188 +#: netbox/ipam/models/vrfs.py:62 netbox/netbox/navigation/menu.py:192 +#: netbox/netbox/navigation/menu.py:194 msgid "VRFs" msgstr "VRF'ler" -#: netbox/ipam/models/vrfs.py:82 +#: netbox/ipam/models/vrfs.py:78 msgid "Route target value (formatted in accordance with RFC 4360)" msgstr "Rota hedef değeri (RFC 4360'a göre biçimlendirilmiş)" -#: netbox/ipam/models/vrfs.py:94 +#: netbox/ipam/models/vrfs.py:91 msgid "route target" msgstr "rota hedefi" -#: netbox/ipam/models/vrfs.py:95 +#: netbox/ipam/models/vrfs.py:92 msgid "route targets" msgstr "rota hedefleri" @@ -10333,84 +10841,101 @@ msgstr "Site Sayısı" msgid "Provider Count" msgstr "Sağlayıcı Sayısı" -#: netbox/ipam/tables/ip.py:95 netbox/netbox/navigation/menu.py:179 -#: netbox/netbox/navigation/menu.py:181 +#: netbox/ipam/tables/ip.py:41 netbox/netbox/navigation/menu.py:185 +#: netbox/netbox/navigation/menu.py:187 msgid "Aggregates" msgstr "Agregalar" -#: netbox/ipam/tables/ip.py:125 +#: netbox/ipam/tables/ip.py:71 msgid "Added" msgstr "Eklendi" -#: netbox/ipam/tables/ip.py:128 netbox/ipam/tables/ip.py:166 -#: netbox/ipam/tables/vlans.py:142 netbox/ipam/views.py:346 -#: netbox/netbox/navigation/menu.py:165 netbox/netbox/navigation/menu.py:167 -#: netbox/templates/ipam/vlan.html:84 +#: netbox/ipam/tables/ip.py:74 netbox/ipam/tables/ip.py:112 +#: netbox/ipam/tables/vlans.py:118 netbox/ipam/views.py:373 +#: netbox/netbox/navigation/menu.py:171 netbox/netbox/navigation/menu.py:173 +#: netbox/templates/ipam/vlan.html:100 msgid "Prefixes" msgstr "Önekler" -#: netbox/ipam/tables/ip.py:131 netbox/ipam/tables/ip.py:270 -#: netbox/ipam/tables/ip.py:324 netbox/ipam/tables/vlans.py:86 +#: netbox/ipam/tables/ip.py:77 netbox/ipam/tables/ip.py:221 +#: netbox/ipam/tables/ip.py:276 netbox/ipam/tables/vlans.py:55 #: netbox/templates/dcim/device.html:260 #: netbox/templates/ipam/aggregate.html:24 -#: netbox/templates/ipam/iprange.html:29 netbox/templates/ipam/prefix.html:106 +#: netbox/templates/ipam/iprange.html:29 netbox/templates/ipam/prefix.html:102 msgid "Utilization" msgstr "Kullanımı" -#: netbox/ipam/tables/ip.py:171 netbox/netbox/navigation/menu.py:161 +#: netbox/ipam/tables/ip.py:117 netbox/netbox/navigation/menu.py:167 msgid "IP Ranges" msgstr "IP Aralıkları" -#: netbox/ipam/tables/ip.py:221 +#: netbox/ipam/tables/ip.py:167 msgid "Prefix (Flat)" msgstr "Önek (Düz)" -#: netbox/ipam/tables/ip.py:225 +#: netbox/ipam/tables/ip.py:171 msgid "Depth" msgstr "Derinlik" -#: netbox/ipam/tables/ip.py:262 +#: netbox/ipam/tables/ip.py:191 netbox/ipam/tables/vlans.py:37 +#: netbox/virtualization/tables/clusters.py:77 +#: netbox/wireless/tables/wirelesslan.py:55 +msgid "Scope Type" +msgstr "Kapsam Türü" + +#: netbox/ipam/tables/ip.py:213 msgid "Pool" msgstr "Havuz" -#: netbox/ipam/tables/ip.py:266 netbox/ipam/tables/ip.py:320 +#: netbox/ipam/tables/ip.py:217 netbox/ipam/tables/ip.py:272 msgid "Marked Utilized" msgstr "İşaretli Kullanıldı" -#: netbox/ipam/tables/ip.py:304 +#: netbox/ipam/tables/ip.py:256 msgid "Start address" msgstr "Başlangıç adresi" -#: netbox/ipam/tables/ip.py:383 +#: netbox/ipam/tables/ip.py:335 msgid "NAT (Inside)" msgstr "NAT (İç)" -#: netbox/ipam/tables/ip.py:388 +#: netbox/ipam/tables/ip.py:340 msgid "NAT (Outside)" msgstr "NAT (Dış)" -#: netbox/ipam/tables/ip.py:393 +#: netbox/ipam/tables/ip.py:345 msgid "Assigned" msgstr "Atanmış" -#: netbox/ipam/tables/ip.py:429 netbox/templates/vpn/l2vpntermination.html:16 +#: netbox/ipam/tables/ip.py:381 netbox/templates/vpn/l2vpntermination.html:16 #: netbox/vpn/forms/filtersets.py:240 msgid "Assigned Object" msgstr "Atanan Nesne" -#: netbox/ipam/tables/vlans.py:68 -msgid "Scope Type" -msgstr "Kapsam Türü" - -#: netbox/ipam/tables/vlans.py:76 +#: netbox/ipam/tables/vlans.py:45 msgid "VID Ranges" msgstr "VID Aralıkları" -#: netbox/ipam/tables/vlans.py:111 netbox/ipam/tables/vlans.py:214 +#: netbox/ipam/tables/vlans.py:80 netbox/ipam/tables/vlans.py:190 #: netbox/templates/dcim/inc/interface_vlans_table.html:4 msgid "VID" msgstr "VİDEO" +#: netbox/ipam/tables/vlans.py:237 +#: netbox/templates/ipam/vlantranslationpolicy.html:22 +msgid "Rules" +msgstr "Kuralları" + +#: netbox/ipam/tables/vlans.py:260 +#: netbox/templates/ipam/vlantranslationrule.html:18 +msgid "Local VID" +msgstr "Yerel VID" + +#: netbox/ipam/tables/vlans.py:264 +#: netbox/templates/ipam/vlantranslationrule.html:22 +msgid "Remote VID" +msgstr "Uzaktan VID" + #: netbox/ipam/tables/vrfs.py:30 msgid "RD" msgstr "RD" @@ -10450,23 +10975,23 @@ msgstr "" "DNS adlarında yalnızca alfanümerik karakterlere, yıldızlara, tirelere, " "noktalara ve alt çizgilere izin verilir" -#: netbox/ipam/views.py:533 +#: netbox/ipam/views.py:570 msgid "Child Prefixes" msgstr "Çocuk Önekleri" -#: netbox/ipam/views.py:569 +#: netbox/ipam/views.py:606 msgid "Child Ranges" msgstr "Çocuk Aralıkları" -#: netbox/ipam/views.py:898 +#: netbox/ipam/views.py:958 msgid "Related IPs" msgstr "İlgili IP'ler" -#: netbox/ipam/views.py:1127 +#: netbox/ipam/views.py:1315 msgid "Device Interfaces" msgstr "Cihaz Arayüzleri" -#: netbox/ipam/views.py:1145 +#: netbox/ipam/views.py:1333 msgid "VM Interfaces" msgstr "VM Arayüzleri" @@ -10515,90 +11040,112 @@ msgstr "{class_name} get_view_name () uygulamasını uygulamalıdır" msgid "Invalid permission {permission} for model {model}" msgstr "Geçersiz izin {permission} model için {model}" -#: netbox/netbox/choices.py:49 +#: netbox/netbox/choices.py:51 msgid "Dark Red" msgstr "Koyu Kırmızı" -#: netbox/netbox/choices.py:52 +#: netbox/netbox/choices.py:54 msgid "Rose" msgstr "Gül" -#: netbox/netbox/choices.py:53 +#: netbox/netbox/choices.py:55 msgid "Fuchsia" msgstr "Fuşya" -#: netbox/netbox/choices.py:55 +#: netbox/netbox/choices.py:57 msgid "Dark Purple" msgstr "Koyu Mor" -#: netbox/netbox/choices.py:58 +#: netbox/netbox/choices.py:60 msgid "Light Blue" msgstr "Açık Mavi" -#: netbox/netbox/choices.py:61 +#: netbox/netbox/choices.py:63 msgid "Aqua" msgstr "su" -#: netbox/netbox/choices.py:62 +#: netbox/netbox/choices.py:64 msgid "Dark Green" msgstr "Koyu Yeşil" -#: netbox/netbox/choices.py:64 +#: netbox/netbox/choices.py:66 msgid "Light Green" msgstr "Açık Yeşil" -#: netbox/netbox/choices.py:65 +#: netbox/netbox/choices.py:67 msgid "Lime" msgstr "Kireç" -#: netbox/netbox/choices.py:67 +#: netbox/netbox/choices.py:69 msgid "Amber" msgstr "Kehribar" -#: netbox/netbox/choices.py:69 +#: netbox/netbox/choices.py:71 msgid "Dark Orange" msgstr "Koyu Turuncu" -#: netbox/netbox/choices.py:70 +#: netbox/netbox/choices.py:72 msgid "Brown" msgstr "Kahverengi" -#: netbox/netbox/choices.py:71 +#: netbox/netbox/choices.py:73 msgid "Light Grey" msgstr "Açık gri" -#: netbox/netbox/choices.py:72 +#: netbox/netbox/choices.py:74 msgid "Grey" msgstr "Gri" -#: netbox/netbox/choices.py:73 +#: netbox/netbox/choices.py:75 msgid "Dark Grey" msgstr "Koyu gri" -#: netbox/netbox/choices.py:128 +#: netbox/netbox/choices.py:103 netbox/templates/extras/script_result.html:56 +msgid "Default" +msgstr "Varsayılan" + +#: netbox/netbox/choices.py:130 msgid "Direct" msgstr "Doğrudan" -#: netbox/netbox/choices.py:129 +#: netbox/netbox/choices.py:131 msgid "Upload" msgstr "Yükleme" -#: netbox/netbox/choices.py:141 netbox/netbox/choices.py:155 +#: netbox/netbox/choices.py:143 netbox/netbox/choices.py:157 msgid "Auto-detect" msgstr "Otomatik algılama" -#: netbox/netbox/choices.py:156 +#: netbox/netbox/choices.py:158 msgid "Comma" msgstr "Virgül" -#: netbox/netbox/choices.py:157 +#: netbox/netbox/choices.py:159 msgid "Semicolon" msgstr "Noktalı virgül" -#: netbox/netbox/choices.py:158 +#: netbox/netbox/choices.py:160 msgid "Tab" msgstr "Sekme" +#: netbox/netbox/choices.py:193 netbox/templates/dcim/device.html:327 +#: netbox/templates/dcim/rack.html:107 +msgid "Kilograms" +msgstr "Kilogram" + +#: netbox/netbox/choices.py:194 +msgid "Grams" +msgstr "Gramlar" + +#: netbox/netbox/choices.py:195 netbox/templates/dcim/device.html:328 +#: netbox/templates/dcim/rack.html:108 +msgid "Pounds" +msgstr "Pound'lar" + +#: netbox/netbox/choices.py:196 +msgid "Ounces" +msgstr "ons" + #: netbox/netbox/config/__init__.py:67 #, python-brace-format msgid "Invalid configuration parameter: {item}" @@ -10889,6 +11436,26 @@ msgstr "senkronize edilen tarih" msgid "{class_name} must implement a sync_data() method." msgstr "{class_name} bir sync_data () yöntemi uygulamalıdır." +#: netbox/netbox/models/mixins.py:22 +msgid "weight unit" +msgstr "ağırlık birimi" + +#: netbox/netbox/models/mixins.py:52 +msgid "Must specify a unit when setting a weight" +msgstr "Ağırlık ayarlarken bir birim belirtmelisiniz" + +#: netbox/netbox/models/mixins.py:57 +msgid "distance" +msgstr "uzaklık" + +#: netbox/netbox/models/mixins.py:64 +msgid "distance unit" +msgstr "mesafe birimi" + +#: netbox/netbox/models/mixins.py:99 +msgid "Must specify a unit when setting a distance" +msgstr "Mesafeyi ayarlarken bir birim belirtmelisiniz" + #: netbox/netbox/navigation/menu.py:11 msgid "Organization" msgstr "Organizasyon" @@ -10922,10 +11489,6 @@ msgstr "Raf Rolleri" msgid "Elevations" msgstr "Yükselmeler" -#: netbox/netbox/navigation/menu.py:60 netbox/netbox/navigation/menu.py:62 -msgid "Rack Types" -msgstr "Raf Çeşitleri" - #: netbox/netbox/navigation/menu.py:76 msgid "Modules" msgstr "Modüller" @@ -10948,175 +11511,200 @@ msgstr "Cihaz Bileşenleri" msgid "Inventory Item Roles" msgstr "Envanter Öğesi Rolleri" -#: netbox/netbox/navigation/menu.py:111 netbox/netbox/navigation/menu.py:115 +#: netbox/netbox/navigation/menu.py:110 +#: netbox/templates/dcim/interface.html:413 +#: netbox/templates/virtualization/vminterface.html:118 +msgid "MAC Addresses" +msgstr "MAC Adresleri" + +#: netbox/netbox/navigation/menu.py:117 netbox/netbox/navigation/menu.py:121 +#: netbox/templates/dcim/interface.html:182 msgid "Connections" msgstr "Bağlantılar" -#: netbox/netbox/navigation/menu.py:117 +#: netbox/netbox/navigation/menu.py:123 msgid "Cables" msgstr "Kablolar" -#: netbox/netbox/navigation/menu.py:118 +#: netbox/netbox/navigation/menu.py:124 msgid "Wireless Links" msgstr "Kablosuz Bağlantılar" -#: netbox/netbox/navigation/menu.py:121 +#: netbox/netbox/navigation/menu.py:127 msgid "Interface Connections" msgstr "Arayüz Bağlantıları" -#: netbox/netbox/navigation/menu.py:126 +#: netbox/netbox/navigation/menu.py:132 msgid "Console Connections" msgstr "Konsol Bağlantıları" -#: netbox/netbox/navigation/menu.py:131 +#: netbox/netbox/navigation/menu.py:137 msgid "Power Connections" msgstr "Güç Bağlantıları" -#: netbox/netbox/navigation/menu.py:147 +#: netbox/netbox/navigation/menu.py:153 msgid "Wireless LAN Groups" msgstr "Kablosuz LAN Grupları" -#: netbox/netbox/navigation/menu.py:168 +#: netbox/netbox/navigation/menu.py:174 msgid "Prefix & VLAN Roles" msgstr "Önek ve VLAN Rolleri" -#: netbox/netbox/navigation/menu.py:174 +#: netbox/netbox/navigation/menu.py:180 msgid "ASN Ranges" msgstr "ASN Aralıkları" -#: netbox/netbox/navigation/menu.py:196 +#: netbox/netbox/navigation/menu.py:202 msgid "VLAN Groups" msgstr "VLAN Grupları" #: netbox/netbox/navigation/menu.py:203 +msgid "VLAN Translation Policies" +msgstr "VLAN Çeviri Politikaları" + +#: netbox/netbox/navigation/menu.py:204 +#: netbox/templates/ipam/vlantranslationpolicy.html:46 +msgid "VLAN Translation Rules" +msgstr "VLAN Çeviri Kuralları" + +#: netbox/netbox/navigation/menu.py:211 msgid "Service Templates" msgstr "Hizmet Şablonları" -#: netbox/netbox/navigation/menu.py:204 netbox/templates/dcim/device.html:302 +#: netbox/netbox/navigation/menu.py:212 netbox/templates/dcim/device.html:302 #: netbox/templates/ipam/ipaddress.html:118 #: netbox/templates/virtualization/virtualmachine.html:154 msgid "Services" msgstr "HİZMETLER" -#: netbox/netbox/navigation/menu.py:211 +#: netbox/netbox/navigation/menu.py:219 msgid "VPN" msgstr "VPN" -#: netbox/netbox/navigation/menu.py:215 netbox/netbox/navigation/menu.py:217 +#: netbox/netbox/navigation/menu.py:223 netbox/netbox/navigation/menu.py:225 #: netbox/vpn/tables/tunnels.py:24 msgid "Tunnels" msgstr "Tüneller" -#: netbox/netbox/navigation/menu.py:218 +#: netbox/netbox/navigation/menu.py:226 #: netbox/templates/vpn/tunnelgroup.html:8 msgid "Tunnel Groups" msgstr "Tünel Grupları" -#: netbox/netbox/navigation/menu.py:219 +#: netbox/netbox/navigation/menu.py:227 msgid "Tunnel Terminations" msgstr "Tünel Sonlandırmaları" -#: netbox/netbox/navigation/menu.py:223 netbox/netbox/navigation/menu.py:225 +#: netbox/netbox/navigation/menu.py:231 netbox/netbox/navigation/menu.py:233 #: netbox/vpn/models/l2vpn.py:64 msgid "L2VPNs" msgstr "L2VPN'ler" -#: netbox/netbox/navigation/menu.py:226 netbox/templates/vpn/l2vpn.html:56 -#: netbox/templates/vpn/tunnel.html:72 netbox/vpn/tables/tunnels.py:58 -msgid "Terminations" -msgstr "Fesih" - -#: netbox/netbox/navigation/menu.py:232 +#: netbox/netbox/navigation/menu.py:240 msgid "IKE Proposals" msgstr "IKE Teklifleri" -#: netbox/netbox/navigation/menu.py:233 +#: netbox/netbox/navigation/menu.py:241 #: netbox/templates/vpn/ikeproposal.html:41 msgid "IKE Policies" msgstr "IKE Politikaları" -#: netbox/netbox/navigation/menu.py:234 +#: netbox/netbox/navigation/menu.py:242 msgid "IPSec Proposals" msgstr "IPSec Önerileri" -#: netbox/netbox/navigation/menu.py:235 +#: netbox/netbox/navigation/menu.py:243 #: netbox/templates/vpn/ipsecproposal.html:37 msgid "IPSec Policies" msgstr "IPsec İlkeleri" -#: netbox/netbox/navigation/menu.py:236 netbox/templates/vpn/ikepolicy.html:38 +#: netbox/netbox/navigation/menu.py:244 netbox/templates/vpn/ikepolicy.html:38 #: netbox/templates/vpn/ipsecpolicy.html:25 msgid "IPSec Profiles" msgstr "IPsec Profilleri" -#: netbox/netbox/navigation/menu.py:251 +#: netbox/netbox/navigation/menu.py:259 #: netbox/templates/virtualization/virtualmachine.html:174 #: netbox/templates/virtualization/virtualmachine/base.html:32 #: netbox/templates/virtualization/virtualmachine_list.html:21 -#: netbox/virtualization/tables/virtualmachines.py:104 -#: netbox/virtualization/views.py:386 +#: netbox/virtualization/tables/virtualmachines.py:74 +#: netbox/virtualization/views.py:403 msgid "Virtual Disks" msgstr "Sanal Diskler" -#: netbox/netbox/navigation/menu.py:258 +#: netbox/netbox/navigation/menu.py:266 msgid "Cluster Types" msgstr "Küme Türleri" -#: netbox/netbox/navigation/menu.py:259 +#: netbox/netbox/navigation/menu.py:267 msgid "Cluster Groups" msgstr "Küme Grupları" -#: netbox/netbox/navigation/menu.py:273 +#: netbox/netbox/navigation/menu.py:281 msgid "Circuit Types" msgstr "Devre Türleri" -#: netbox/netbox/navigation/menu.py:274 -msgid "Circuit Groups" -msgstr "Devre Grupları" - -#: netbox/netbox/navigation/menu.py:275 -#: netbox/templates/circuits/circuit.html:66 -msgid "Group Assignments" -msgstr "Grup Ödevleri" - -#: netbox/netbox/navigation/menu.py:276 +#: netbox/netbox/navigation/menu.py:282 msgid "Circuit Terminations" msgstr "Devre Sonlandırmaları" -#: netbox/netbox/navigation/menu.py:280 netbox/netbox/navigation/menu.py:282 +#: netbox/netbox/navigation/menu.py:286 netbox/netbox/navigation/menu.py:288 +#: netbox/templates/circuits/providernetwork.html:55 +msgid "Virtual Circuits" +msgstr "Sanal Devreler" + +#: netbox/netbox/navigation/menu.py:289 +msgid "Virtual Circuit Types" +msgstr "Sanal Devre Türleri" + +#: netbox/netbox/navigation/menu.py:290 +msgid "Virtual Circuit Terminations" +msgstr "Sanal Devre Sonlandırmaları" + +#: netbox/netbox/navigation/menu.py:296 +msgid "Circuit Groups" +msgstr "Devre Grupları" + +#: netbox/netbox/navigation/menu.py:297 +#: netbox/templates/circuits/circuit.html:76 +#: netbox/templates/circuits/virtualcircuit.html:69 +msgid "Group Assignments" +msgstr "Grup Ödevleri" + +#: netbox/netbox/navigation/menu.py:301 netbox/netbox/navigation/menu.py:303 msgid "Providers" msgstr "Sağlayıcılar" -#: netbox/netbox/navigation/menu.py:283 +#: netbox/netbox/navigation/menu.py:304 #: netbox/templates/circuits/provider.html:51 msgid "Provider Accounts" msgstr "Sağlayıcı Hesapları" -#: netbox/netbox/navigation/menu.py:284 +#: netbox/netbox/navigation/menu.py:305 msgid "Provider Networks" msgstr "Sağlayıcı Ağları" -#: netbox/netbox/navigation/menu.py:298 +#: netbox/netbox/navigation/menu.py:319 msgid "Power Panels" msgstr "Güç Panelleri" -#: netbox/netbox/navigation/menu.py:309 +#: netbox/netbox/navigation/menu.py:330 msgid "Configurations" msgstr "Yapılandırmalar" -#: netbox/netbox/navigation/menu.py:311 +#: netbox/netbox/navigation/menu.py:332 msgid "Config Contexts" msgstr "Yapılandırma Bağlamları" -#: netbox/netbox/navigation/menu.py:312 +#: netbox/netbox/navigation/menu.py:333 msgid "Config Templates" msgstr "Yapılandırma Şablonları" -#: netbox/netbox/navigation/menu.py:319 netbox/netbox/navigation/menu.py:323 +#: netbox/netbox/navigation/menu.py:340 netbox/netbox/navigation/menu.py:344 msgid "Customization" msgstr "Özelleştirme" -#: netbox/netbox/navigation/menu.py:325 +#: netbox/netbox/navigation/menu.py:346 #: netbox/templates/dcim/device_edit.html:103 #: netbox/templates/dcim/htmx/cable_edit.html:81 #: netbox/templates/dcim/virtualchassis_add.html:31 @@ -11125,96 +11713,96 @@ msgstr "Özelleştirme" #: netbox/templates/htmx/form.html:19 netbox/templates/inc/filter_list.html:30 #: netbox/templates/inc/panels/custom_fields.html:7 #: netbox/templates/ipam/ipaddress_bulk_add.html:35 -#: netbox/templates/ipam/vlan_edit.html:59 +#: netbox/templates/ipam/vlan_edit.html:67 msgid "Custom Fields" msgstr "Özel Alanlar" -#: netbox/netbox/navigation/menu.py:326 +#: netbox/netbox/navigation/menu.py:347 msgid "Custom Field Choices" msgstr "Özel Alan Seçenekleri" -#: netbox/netbox/navigation/menu.py:327 +#: netbox/netbox/navigation/menu.py:348 msgid "Custom Links" msgstr "Özel Bağlantılar" -#: netbox/netbox/navigation/menu.py:328 +#: netbox/netbox/navigation/menu.py:349 msgid "Export Templates" msgstr "Şablonları Dışa Aktar" -#: netbox/netbox/navigation/menu.py:329 +#: netbox/netbox/navigation/menu.py:350 msgid "Saved Filters" msgstr "Kaydedilen Filtreler" -#: netbox/netbox/navigation/menu.py:331 +#: netbox/netbox/navigation/menu.py:352 msgid "Image Attachments" msgstr "Görüntü Ekleri" -#: netbox/netbox/navigation/menu.py:349 +#: netbox/netbox/navigation/menu.py:370 msgid "Operations" msgstr "Operasyonlar" -#: netbox/netbox/navigation/menu.py:353 +#: netbox/netbox/navigation/menu.py:374 msgid "Integrations" msgstr "Entegrasyonlar" -#: netbox/netbox/navigation/menu.py:355 +#: netbox/netbox/navigation/menu.py:376 msgid "Data Sources" msgstr "Veri Kaynakları" -#: netbox/netbox/navigation/menu.py:356 +#: netbox/netbox/navigation/menu.py:377 msgid "Event Rules" msgstr "Etkinlik Kuralları" -#: netbox/netbox/navigation/menu.py:357 +#: netbox/netbox/navigation/menu.py:378 msgid "Webhooks" msgstr "Web kancaları" -#: netbox/netbox/navigation/menu.py:361 netbox/netbox/navigation/menu.py:365 -#: netbox/netbox/views/generic/feature_views.py:153 +#: netbox/netbox/navigation/menu.py:382 netbox/netbox/navigation/menu.py:386 +#: netbox/netbox/views/generic/feature_views.py:158 #: netbox/templates/extras/report/base.html:37 #: netbox/templates/extras/script/base.html:36 msgid "Jobs" msgstr "Meslekler" -#: netbox/netbox/navigation/menu.py:371 +#: netbox/netbox/navigation/menu.py:392 msgid "Logging" msgstr "Günlüğe kaydetme" -#: netbox/netbox/navigation/menu.py:373 +#: netbox/netbox/navigation/menu.py:394 msgid "Notification Groups" msgstr "Bildirim Grupları" -#: netbox/netbox/navigation/menu.py:374 +#: netbox/netbox/navigation/menu.py:395 msgid "Journal Entries" msgstr "Dergi Girişleri" -#: netbox/netbox/navigation/menu.py:375 +#: netbox/netbox/navigation/menu.py:396 #: netbox/templates/core/objectchange.html:9 #: netbox/templates/core/objectchange_list.html:4 msgid "Change Log" msgstr "Değişim Günlüğü" -#: netbox/netbox/navigation/menu.py:382 netbox/templates/inc/user_menu.html:29 +#: netbox/netbox/navigation/menu.py:403 netbox/templates/inc/user_menu.html:29 msgid "Admin" msgstr "Yönetici" -#: netbox/netbox/navigation/menu.py:430 netbox/templates/account/base.html:27 -#: netbox/templates/inc/user_menu.html:57 +#: netbox/netbox/navigation/menu.py:451 netbox/templates/account/base.html:27 +#: netbox/templates/inc/user_menu.html:52 msgid "API Tokens" msgstr "API Belirteçleri" -#: netbox/netbox/navigation/menu.py:437 netbox/users/forms/model_forms.py:187 +#: netbox/netbox/navigation/menu.py:458 netbox/users/forms/model_forms.py:187 #: netbox/users/forms/model_forms.py:195 netbox/users/forms/model_forms.py:242 #: netbox/users/forms/model_forms.py:249 msgid "Permissions" msgstr "İzinler" -#: netbox/netbox/navigation/menu.py:445 netbox/netbox/navigation/menu.py:449 +#: netbox/netbox/navigation/menu.py:466 netbox/netbox/navigation/menu.py:470 #: netbox/templates/core/system.html:7 msgid "System" msgstr "Sistem" -#: netbox/netbox/navigation/menu.py:454 netbox/netbox/navigation/menu.py:502 +#: netbox/netbox/navigation/menu.py:475 netbox/netbox/navigation/menu.py:523 #: netbox/templates/500.html:35 netbox/templates/account/preferences.html:22 #: netbox/templates/core/plugin.html:13 #: netbox/templates/core/plugin_list.html:7 @@ -11222,29 +11810,29 @@ msgstr "Sistem" msgid "Plugins" msgstr "Eklentiler" -#: netbox/netbox/navigation/menu.py:459 +#: netbox/netbox/navigation/menu.py:480 msgid "Configuration History" msgstr "Yapılandırma Geçmişi" -#: netbox/netbox/navigation/menu.py:465 netbox/templates/core/rq_task.html:8 +#: netbox/netbox/navigation/menu.py:486 netbox/templates/core/rq_task.html:8 #: netbox/templates/core/rq_task_list.html:22 msgid "Background Tasks" msgstr "Arka Plan Görevleri" -#: netbox/netbox/plugins/navigation.py:47 -#: netbox/netbox/plugins/navigation.py:69 +#: netbox/netbox/plugins/navigation.py:48 +#: netbox/netbox/plugins/navigation.py:70 msgid "Permissions must be passed as a tuple or list." msgstr "İzinler bir küme veya liste olarak iletilmelidir." -#: netbox/netbox/plugins/navigation.py:51 +#: netbox/netbox/plugins/navigation.py:52 msgid "Buttons must be passed as a tuple or list." msgstr "Düğmeler bir küme veya liste olarak iletilmelidir." -#: netbox/netbox/plugins/navigation.py:73 +#: netbox/netbox/plugins/navigation.py:74 msgid "Button color must be a choice within ButtonColorChoices." msgstr "Düğme rengi ButtonColorChoices içinde bir seçim olmalıdır." -#: netbox/netbox/plugins/registration.py:25 +#: netbox/netbox/plugins/registration.py:26 #, python-brace-format msgid "" "PluginTemplateExtension class {template_extension} was passed as an " @@ -11253,7 +11841,7 @@ msgstr "" "PluginTemplateExtension sınıfı {template_extension} Örnek olarak kabul " "edildi!" -#: netbox/netbox/plugins/registration.py:31 +#: netbox/netbox/plugins/registration.py:32 #, python-brace-format msgid "" "{template_extension} is not a subclass of " @@ -11262,17 +11850,17 @@ msgstr "" "{template_extension} Netbox.plugins.pluginTemplateExtension'ın bir alt " "sınıfı değildir!" -#: netbox/netbox/plugins/registration.py:51 +#: netbox/netbox/plugins/registration.py:57 #, python-brace-format msgid "{item} must be an instance of netbox.plugins.PluginMenuItem" msgstr "{item} Netbox.Plugins.PluginMenuItem örneği olmalıdır" -#: netbox/netbox/plugins/registration.py:62 +#: netbox/netbox/plugins/registration.py:68 #, python-brace-format msgid "{menu_link} must be an instance of netbox.plugins.PluginMenuItem" msgstr "{menu_link} Netbox.Plugins.PluginMenuItem örneği olmalıdır" -#: netbox/netbox/plugins/registration.py:67 +#: netbox/netbox/plugins/registration.py:73 #, python-brace-format msgid "{button} must be an instance of netbox.plugins.PluginMenuButton" msgstr "{button} Netbox.Plugins.PluginMenuButton örneği olmalıdır" @@ -11356,93 +11944,93 @@ msgstr "Başlatıldıktan sonra kayıt defterine mağazalar eklenemiyor" msgid "Cannot delete stores from registry" msgstr "Mağazalar kayıt defterinden silinemiyor" -#: netbox/netbox/settings.py:760 +#: netbox/netbox/settings.py:752 msgid "Czech" msgstr "Çek" -#: netbox/netbox/settings.py:761 +#: netbox/netbox/settings.py:753 msgid "Danish" msgstr "Danca" -#: netbox/netbox/settings.py:762 +#: netbox/netbox/settings.py:754 msgid "German" msgstr "Alman" -#: netbox/netbox/settings.py:763 +#: netbox/netbox/settings.py:755 msgid "English" msgstr "İngilizce" -#: netbox/netbox/settings.py:764 +#: netbox/netbox/settings.py:756 msgid "Spanish" msgstr "İspanyolca" -#: netbox/netbox/settings.py:765 +#: netbox/netbox/settings.py:757 msgid "French" msgstr "Fransızca" -#: netbox/netbox/settings.py:766 +#: netbox/netbox/settings.py:758 msgid "Italian" msgstr "İtalyan" -#: netbox/netbox/settings.py:767 +#: netbox/netbox/settings.py:759 msgid "Japanese" msgstr "Japonca" -#: netbox/netbox/settings.py:768 +#: netbox/netbox/settings.py:760 msgid "Dutch" msgstr "Hollandalı" -#: netbox/netbox/settings.py:769 +#: netbox/netbox/settings.py:761 msgid "Polish" msgstr "Lehçe" -#: netbox/netbox/settings.py:770 +#: netbox/netbox/settings.py:762 msgid "Portuguese" msgstr "Portekizce" -#: netbox/netbox/settings.py:771 +#: netbox/netbox/settings.py:763 msgid "Russian" msgstr "Rusça" -#: netbox/netbox/settings.py:772 +#: netbox/netbox/settings.py:764 msgid "Turkish" msgstr "Türkçe" -#: netbox/netbox/settings.py:773 +#: netbox/netbox/settings.py:765 msgid "Ukrainian" msgstr "Ukraynalı" -#: netbox/netbox/settings.py:774 +#: netbox/netbox/settings.py:766 msgid "Chinese" msgstr "Çince" -#: netbox/netbox/tables/columns.py:176 +#: netbox/netbox/tables/columns.py:177 msgid "Select all" msgstr "Tümünü seç" -#: netbox/netbox/tables/columns.py:189 +#: netbox/netbox/tables/columns.py:190 msgid "Toggle all" msgstr "Tümünü değiştir" -#: netbox/netbox/tables/columns.py:300 +#: netbox/netbox/tables/columns.py:302 msgid "Toggle Dropdown" msgstr "Açılır menüyü Aç/Kapat" -#: netbox/netbox/tables/columns.py:572 netbox/templates/core/job.html:53 +#: netbox/netbox/tables/columns.py:575 netbox/templates/core/job.html:53 msgid "Error" msgstr "Hata" -#: netbox/netbox/tables/tables.py:58 +#: netbox/netbox/tables/tables.py:59 #, python-brace-format msgid "No {model_name} found" msgstr "Hayır {model_name} bulunan" -#: netbox/netbox/tables/tables.py:249 +#: netbox/netbox/tables/tables.py:252 #: netbox/templates/generic/bulk_import.html:117 msgid "Field" msgstr "Tarla" -#: netbox/netbox/tables/tables.py:252 +#: netbox/netbox/tables/tables.py:255 msgid "Value" msgstr "Değer" @@ -11459,24 +12047,24 @@ msgstr "" "Seçilen dışa aktarma şablonunu oluştururken bir hata oluştu ({template}): " "{error}" -#: netbox/netbox/views/generic/bulk_views.py:416 +#: netbox/netbox/views/generic/bulk_views.py:421 #, python-brace-format msgid "Row {i}: Object with ID {id} does not exist" msgstr "Satır {i}: Kimliği olan nesne {id} mevcut değil" -#: netbox/netbox/views/generic/bulk_views.py:709 -#: netbox/netbox/views/generic/bulk_views.py:910 -#: netbox/netbox/views/generic/bulk_views.py:958 +#: netbox/netbox/views/generic/bulk_views.py:708 +#: netbox/netbox/views/generic/bulk_views.py:909 +#: netbox/netbox/views/generic/bulk_views.py:957 #, python-brace-format msgid "No {object_type} were selected." msgstr "Hayır {object_type} seçildi." -#: netbox/netbox/views/generic/bulk_views.py:788 +#: netbox/netbox/views/generic/bulk_views.py:787 #, python-brace-format msgid "Renamed {count} {object_type}" msgstr "Yeniden adlandırıldı {count} {object_type}" -#: netbox/netbox/views/generic/bulk_views.py:888 +#: netbox/netbox/views/generic/bulk_views.py:887 #, python-brace-format msgid "Deleted {count} {object_type}" msgstr "Silinmiş {count} {object_type}" @@ -11489,16 +12077,16 @@ msgstr "Değişiklik Günlüğü" msgid "Journal" msgstr "dergi" -#: netbox/netbox/views/generic/feature_views.py:207 +#: netbox/netbox/views/generic/feature_views.py:212 msgid "Unable to synchronize data: No data file set." msgstr "Veriler senkronize edilemiyor: Veri dosyası kümesi yok." -#: netbox/netbox/views/generic/feature_views.py:211 +#: netbox/netbox/views/generic/feature_views.py:216 #, python-brace-format msgid "Synchronized data for {object_type} {object}." msgstr "Senkronize edilmiş veriler {object_type} {object}." -#: netbox/netbox/views/generic/feature_views.py:236 +#: netbox/netbox/views/generic/feature_views.py:241 #, python-brace-format msgid "Synced {count} {object_type}" msgstr "Senkronize {count} {object_type}" @@ -11572,9 +12160,9 @@ msgstr "GitHub'da" msgid "Home Page" msgstr "Ana Sayfa" -#: netbox/templates/account/base.html:7 netbox/templates/inc/user_menu.html:45 +#: netbox/templates/account/base.html:7 netbox/templates/inc/user_menu.html:40 #: netbox/vpn/forms/bulk_edit.py:255 netbox/vpn/forms/filtersets.py:189 -#: netbox/vpn/forms/model_forms.py:379 +#: netbox/vpn/forms/model_forms.py:382 msgid "Profile" msgstr "Profil" @@ -11586,12 +12174,12 @@ msgstr "Bildirimler" #: netbox/templates/account/base.html:16 #: netbox/templates/account/subscriptions.html:7 -#: netbox/templates/inc/user_menu.html:51 +#: netbox/templates/inc/user_menu.html:46 msgid "Subscriptions" msgstr "Abonelikler" #: netbox/templates/account/base.html:19 -#: netbox/templates/inc/user_menu.html:54 +#: netbox/templates/inc/user_menu.html:49 msgid "Preferences" msgstr "Tercihler" @@ -11619,6 +12207,7 @@ msgstr "Şifreyi Değiştir" #: netbox/templates/generic/object_edit.html:72 #: netbox/templates/htmx/delete_form.html:53 #: netbox/templates/htmx/delete_form.html:55 +#: netbox/templates/htmx/quick_add.html:21 #: netbox/templates/ipam/ipaddress_assign.html:28 #: netbox/templates/virtualization/cluster_add_devices.html:30 msgid "Cancel" @@ -11717,7 +12306,7 @@ msgstr "Atanan Gruplar" #: netbox/templates/core/objectchange.html:142 #: netbox/templates/dcim/devicebay.html:59 #: netbox/templates/dcim/inc/panels/inventory_items.html:45 -#: netbox/templates/dcim/interface.html:296 +#: netbox/templates/dcim/interface.html:353 #: netbox/templates/dcim/modulebay.html:80 #: netbox/templates/extras/configcontext.html:70 #: netbox/templates/extras/eventrule.html:66 @@ -11726,6 +12315,7 @@ msgstr "Atanan Gruplar" #: netbox/templates/extras/webhook.html:75 #: netbox/templates/inc/panel_table.html:13 #: netbox/templates/inc/panels/comments.html:10 +#: netbox/templates/inc/panels/related_objects.html:23 #: netbox/templates/ipam/inc/panels/fhrp_groups.html:56 #: netbox/templates/users/group.html:34 netbox/templates/users/group.html:44 #: netbox/templates/users/objectpermission.html:77 @@ -11763,7 +12353,7 @@ msgstr "En son kullanılmış" msgid "Add a Token" msgstr "Bir Jeton Ekle" -#: netbox/templates/base/base.html:22 netbox/templates/home.html:27 +#: netbox/templates/base/base.html:23 netbox/templates/home.html:27 msgid "Home" msgstr "Ana Sayfa" @@ -11805,15 +12395,16 @@ msgstr "Kaynak Kodu" msgid "Community" msgstr "Topluluk" -#: netbox/templates/circuits/circuit.html:47 +#: netbox/templates/circuits/circuit.html:57 msgid "Install Date" msgstr "Yükleme Tarihi" -#: netbox/templates/circuits/circuit.html:51 +#: netbox/templates/circuits/circuit.html:61 msgid "Termination Date" msgstr "Fesih Tarihi" -#: netbox/templates/circuits/circuit.html:70 +#: netbox/templates/circuits/circuit.html:80 +#: netbox/templates/circuits/virtualcircuit.html:73 #: netbox/templates/ipam/inc/panels/fhrp_groups.html:15 msgid "Assign Group" msgstr "Grup Atama" @@ -11861,7 +12452,7 @@ msgid "Add" msgstr "Ekle" #: netbox/templates/circuits/inc/circuit_termination.html:15 -#: netbox/templates/circuits/inc/circuit_termination_fields.html:36 +#: netbox/templates/circuits/inc/circuit_termination_fields.html:37 #: netbox/templates/dcim/inc/panels/inventory_items.html:32 #: netbox/templates/dcim/powerpanel.html:56 #: netbox/templates/extras/script_list.html:30 @@ -11876,35 +12467,39 @@ msgstr "Düzenle" msgid "Swap" msgstr "Takas" -#: netbox/templates/circuits/inc/circuit_termination_fields.html:19 +#: netbox/templates/circuits/inc/circuit_termination_fields.html:5 +msgid "Termination point" +msgstr "Sonlandırma noktası" + +#: netbox/templates/circuits/inc/circuit_termination_fields.html:20 #: netbox/templates/dcim/consoleport.html:59 #: netbox/templates/dcim/consoleserverport.html:60 #: netbox/templates/dcim/powerfeed.html:114 msgid "Marked as connected" msgstr "Bağlı olarak işaretlendi" -#: netbox/templates/circuits/inc/circuit_termination_fields.html:21 +#: netbox/templates/circuits/inc/circuit_termination_fields.html:22 msgid "to" msgstr "doğru" -#: netbox/templates/circuits/inc/circuit_termination_fields.html:31 #: netbox/templates/circuits/inc/circuit_termination_fields.html:32 +#: netbox/templates/circuits/inc/circuit_termination_fields.html:33 #: netbox/templates/dcim/frontport.html:80 #: netbox/templates/dcim/inc/connection_endpoints.html:7 -#: netbox/templates/dcim/interface.html:154 +#: netbox/templates/dcim/interface.html:211 #: netbox/templates/dcim/rearport.html:76 msgid "Trace" msgstr "İzleme" -#: netbox/templates/circuits/inc/circuit_termination_fields.html:35 +#: netbox/templates/circuits/inc/circuit_termination_fields.html:36 msgid "Edit cable" msgstr "Kabloyu düzenle" -#: netbox/templates/circuits/inc/circuit_termination_fields.html:40 +#: netbox/templates/circuits/inc/circuit_termination_fields.html:41 msgid "Remove cable" msgstr "Kabloyu çıkarın" -#: netbox/templates/circuits/inc/circuit_termination_fields.html:41 +#: netbox/templates/circuits/inc/circuit_termination_fields.html:42 #: netbox/templates/dcim/bulk_disconnect.html:5 #: netbox/templates/dcim/device/consoleports.html:12 #: netbox/templates/dcim/device/consoleserverports.html:12 @@ -11917,33 +12512,33 @@ msgstr "Kabloyu çıkarın" msgid "Disconnect" msgstr "Bağlantıyı kes" -#: netbox/templates/circuits/inc/circuit_termination_fields.html:48 +#: netbox/templates/circuits/inc/circuit_termination_fields.html:49 #: netbox/templates/dcim/consoleport.html:69 #: netbox/templates/dcim/consoleserverport.html:70 #: netbox/templates/dcim/frontport.html:102 -#: netbox/templates/dcim/interface.html:180 -#: netbox/templates/dcim/interface.html:200 +#: netbox/templates/dcim/interface.html:237 +#: netbox/templates/dcim/interface.html:257 #: netbox/templates/dcim/powerfeed.html:127 -#: netbox/templates/dcim/poweroutlet.html:71 -#: netbox/templates/dcim/poweroutlet.html:72 +#: netbox/templates/dcim/poweroutlet.html:81 +#: netbox/templates/dcim/poweroutlet.html:82 #: netbox/templates/dcim/powerport.html:73 #: netbox/templates/dcim/rearport.html:98 msgid "Connect" msgstr "Bağlan" -#: netbox/templates/circuits/inc/circuit_termination_fields.html:70 +#: netbox/templates/circuits/inc/circuit_termination_fields.html:65 msgid "Downstream" msgstr "Aşağı doğru" -#: netbox/templates/circuits/inc/circuit_termination_fields.html:71 +#: netbox/templates/circuits/inc/circuit_termination_fields.html:66 msgid "Upstream" msgstr "Yukarı akış" -#: netbox/templates/circuits/inc/circuit_termination_fields.html:80 +#: netbox/templates/circuits/inc/circuit_termination_fields.html:75 msgid "Cross-Connect" msgstr "Çapraz Bağlantı" -#: netbox/templates/circuits/inc/circuit_termination_fields.html:84 +#: netbox/templates/circuits/inc/circuit_termination_fields.html:79 msgid "Patch Panel/Port" msgstr "Yama Paneli/Bağlantı Noktası" @@ -11955,6 +12550,27 @@ msgstr "Devre ekle" msgid "Provider Account" msgstr "Sağlayıcı Hesabı" +#: netbox/templates/circuits/providernetwork.html:59 +msgid "Add a Virtual Circuit" +msgstr "Sanal Devre Ekle" + +#: netbox/templates/circuits/virtualcircuit.html:91 +#: netbox/templates/vpn/tunnel.html:9 +msgid "Add Termination" +msgstr "Sonlandırma Ekle" + +#: netbox/templates/circuits/virtualcircuittermination.html:23 +msgid "Virtual Circuit Termination" +msgstr "Sanal Devre Sonlandırma" + +#: netbox/templates/circuits/virtualcircuittype.html:10 +msgid "Add Virtual Circuit" +msgstr "Sanal Devre Ekle" + +#: netbox/templates/circuits/virtualcircuittype.html:19 +msgid "Virtual Circuit Type" +msgstr "Sanal Devre Türü" + #: netbox/templates/core/configrevision.html:35 msgid "Configuration Data" msgstr "Yapılandırma Verileri" @@ -11988,7 +12604,7 @@ msgstr "Değişti" #: netbox/templates/core/datafile.html:42 #: netbox/templates/ipam/iprange.html:25 #: netbox/templates/virtualization/virtualdisk.html:29 -#: netbox/virtualization/tables/virtualmachines.py:198 +#: netbox/virtualization/tables/virtualmachines.py:169 msgid "Size" msgstr "Boyut" @@ -12432,8 +13048,8 @@ msgstr "Seçili Yeniden Adlandır" #: netbox/templates/dcim/consoleport.html:65 #: netbox/templates/dcim/consoleserverport.html:66 #: netbox/templates/dcim/frontport.html:98 -#: netbox/templates/dcim/interface.html:176 -#: netbox/templates/dcim/poweroutlet.html:69 +#: netbox/templates/dcim/interface.html:233 +#: netbox/templates/dcim/poweroutlet.html:79 #: netbox/templates/dcim/powerport.html:69 msgid "Not Connected" msgstr "Bağlı Değil" @@ -12456,7 +13072,7 @@ msgid "Map" msgstr "Harita" #: netbox/templates/dcim/device.html:108 -#: netbox/templates/dcim/inventoryitem.html:56 +#: netbox/templates/dcim/inventoryitem.html:60 #: netbox/templates/dcim/module.html:81 #: netbox/templates/dcim/modulebay.html:74 netbox/templates/dcim/rack.html:61 msgid "Asset Tag" @@ -12472,7 +13088,7 @@ msgstr "VDC oluştur" #: netbox/templates/dcim/device.html:175 #: netbox/templates/dcim/device_edit.html:64 -#: netbox/virtualization/forms/model_forms.py:223 +#: netbox/virtualization/forms/model_forms.py:230 msgid "Management" msgstr "Yönetim" @@ -12589,35 +13205,6 @@ msgstr "Güç Bağlantı Noktası Ekle" msgid "Add Rear Ports" msgstr "Arka Bağlantı Noktaları Ekle" -#: netbox/templates/dcim/device/render_config.html:5 -#: netbox/templates/virtualization/virtualmachine/render_config.html:5 -msgid "Config" -msgstr "Yapılandırma" - -#: netbox/templates/dcim/device/render_config.html:35 -#: netbox/templates/virtualization/virtualmachine/render_config.html:35 -msgid "Context Data" -msgstr "Bağlam Verileri" - -#: netbox/templates/dcim/device/render_config.html:55 -#: netbox/templates/virtualization/virtualmachine/render_config.html:55 -msgid "Rendered Config" -msgstr "Oluşturulan Yapılandırma" - -#: netbox/templates/dcim/device/render_config.html:57 -#: netbox/templates/virtualization/virtualmachine/render_config.html:57 -msgid "Download" -msgstr "İndir" - -#: netbox/templates/dcim/device/render_config.html:64 -#: netbox/templates/virtualization/virtualmachine/render_config.html:64 -msgid "Error rendering template" -msgstr "Hata oluşturma şablonu" - -#: netbox/templates/dcim/device/render_config.html:70 -msgid "No configuration template has been assigned for this device." -msgstr "" - #: netbox/templates/dcim/device_edit.html:44 msgid "Parent Bay" msgstr "Ebeveyn Körfezi" @@ -12684,12 +13271,12 @@ msgid "VM Role" msgstr "VM Rolü" #: netbox/templates/dcim/devicetype.html:18 -#: netbox/templates/dcim/moduletype.html:29 +#: netbox/templates/dcim/moduletype.html:31 msgid "Model Name" msgstr "Model Adı" #: netbox/templates/dcim/devicetype.html:25 -#: netbox/templates/dcim/moduletype.html:33 +#: netbox/templates/dcim/moduletype.html:35 msgid "Part Number" msgstr "Parça Numarası" @@ -12714,8 +13301,8 @@ msgid "Rear Port Position" msgstr "Arka Bağlantı Noktası Konumu" #: netbox/templates/dcim/frontport.html:72 -#: netbox/templates/dcim/interface.html:144 -#: netbox/templates/dcim/poweroutlet.html:63 +#: netbox/templates/dcim/interface.html:201 +#: netbox/templates/dcim/poweroutlet.html:73 #: netbox/templates/dcim/powerport.html:63 #: netbox/templates/dcim/rearport.html:68 msgid "Marked as Connected" @@ -12815,77 +13402,79 @@ msgid "PoE Type" msgstr "PoE Tipi" #: netbox/templates/dcim/interface.html:81 -#: netbox/templates/virtualization/vminterface.html:63 +#: netbox/templates/virtualization/vminterface.html:55 +#: netbox/virtualization/forms/model_forms.py:395 msgid "802.1Q Mode" msgstr "802.1Q Modu" -#: netbox/templates/dcim/interface.html:125 -#: netbox/templates/virtualization/vminterface.html:59 -msgid "MAC Address" -msgstr "MAC Adresi" +#: netbox/templates/dcim/interface.html:156 +#: netbox/templates/virtualization/vminterface.html:88 +msgid "VLAN Translation" +msgstr "VLAN Çeviri" -#: netbox/templates/dcim/interface.html:151 +#: netbox/templates/dcim/interface.html:208 msgid "Wireless Link" msgstr "Kablosuz Bağlantı" -#: netbox/templates/dcim/interface.html:218 netbox/vpn/choices.py:63 -msgid "Peer" -msgstr "Akran" - -#: netbox/templates/dcim/interface.html:230 +#: netbox/templates/dcim/interface.html:287 #: netbox/templates/wireless/inc/wirelesslink_interface.html:26 msgid "Channel" msgstr "Kanal" -#: netbox/templates/dcim/interface.html:239 +#: netbox/templates/dcim/interface.html:296 #: netbox/templates/wireless/inc/wirelesslink_interface.html:32 msgid "Channel Frequency" msgstr "Kanal Frekansı" -#: netbox/templates/dcim/interface.html:242 -#: netbox/templates/dcim/interface.html:250 -#: netbox/templates/dcim/interface.html:261 -#: netbox/templates/dcim/interface.html:269 +#: netbox/templates/dcim/interface.html:299 +#: netbox/templates/dcim/interface.html:307 +#: netbox/templates/dcim/interface.html:318 +#: netbox/templates/dcim/interface.html:326 msgid "MHz" msgstr "MHz" -#: netbox/templates/dcim/interface.html:258 +#: netbox/templates/dcim/interface.html:315 #: netbox/templates/wireless/inc/wirelesslink_interface.html:42 msgid "Channel Width" msgstr "Kanal Genişliği" -#: netbox/templates/dcim/interface.html:285 +#: netbox/templates/dcim/interface.html:342 #: netbox/templates/wireless/wirelesslan.html:14 #: netbox/templates/wireless/wirelesslink.html:21 -#: netbox/wireless/forms/bulk_edit.py:60 -#: netbox/wireless/forms/bulk_edit.py:102 -#: netbox/wireless/forms/filtersets.py:40 -#: netbox/wireless/forms/filtersets.py:80 netbox/wireless/models.py:82 -#: netbox/wireless/models.py:156 netbox/wireless/tables/wirelesslan.py:44 +#: netbox/wireless/forms/bulk_edit.py:62 +#: netbox/wireless/forms/bulk_edit.py:105 +#: netbox/wireless/forms/filtersets.py:43 +#: netbox/wireless/forms/filtersets.py:108 netbox/wireless/models.py:82 +#: netbox/wireless/models.py:153 netbox/wireless/tables/wirelesslan.py:44 msgid "SSID" msgstr "SSID" -#: netbox/templates/dcim/interface.html:305 +#: netbox/templates/dcim/interface.html:362 msgid "LAG Members" msgstr "LAG Üyeleri" -#: netbox/templates/dcim/interface.html:323 +#: netbox/templates/dcim/interface.html:380 msgid "No member interfaces" msgstr "Üye arabirimi yok" -#: netbox/templates/dcim/interface.html:343 +#: netbox/templates/dcim/interface.html:400 #: netbox/templates/ipam/fhrpgroup.html:73 #: netbox/templates/ipam/iprange/ip_addresses.html:7 #: netbox/templates/ipam/prefix/ip_addresses.html:7 -#: netbox/templates/virtualization/vminterface.html:89 +#: netbox/templates/virtualization/vminterface.html:105 msgid "Add IP Address" msgstr "IP Adresi Ekle" +#: netbox/templates/dcim/interface.html:417 +#: netbox/templates/virtualization/vminterface.html:123 +msgid "Add MAC Address" +msgstr "MAC Adresi Ekle" + #: netbox/templates/dcim/inventoryitem.html:24 msgid "Parent Item" msgstr "Ana Öğe" -#: netbox/templates/dcim/inventoryitem.html:48 +#: netbox/templates/dcim/inventoryitem.html:52 msgid "Part ID" msgstr "Parça Kimliği" @@ -12905,6 +13494,10 @@ msgstr "Konum Ekle" msgid "Add a Device" msgstr "Cihaz Ekle" +#: netbox/templates/dcim/macaddress.html:36 +msgid "Primary for interface" +msgstr "Arayüz için birincil" + #: netbox/templates/dcim/manufacturer.html:16 msgid "Add Device Type" msgstr "Cihaz Türü Ekle" @@ -12935,7 +13528,7 @@ msgctxt "Abbreviation for amperes" msgid "A" msgstr "A" -#: netbox/templates/dcim/poweroutlet.html:48 +#: netbox/templates/dcim/poweroutlet.html:58 msgid "Feed Leg" msgstr "Besleme ayağı" @@ -13367,11 +13960,19 @@ msgstr "İçerik yüklenemiyor. Geçersiz görünüm adı" msgid "No content found" msgstr "İçerik bulunamadı" -#: netbox/templates/extras/dashboard/widgets/rssfeed.html:18 +#: netbox/templates/extras/dashboard/widgets/rssfeed.html:17 +msgid "" +"This RSS feed requires an external connection. Check the ISOLATED_DEPLOYMENT" +" setting." +msgstr "" +"Bu RSS beslemesi harici bir bağlantı gerektirir. ISOLATED_DEPLOYMENT ayarını" +" kontrol edin." + +#: netbox/templates/extras/dashboard/widgets/rssfeed.html:22 msgid "There was a problem fetching the RSS feed" msgstr "RSS beslemesini getirirken bir sorun oluştu" -#: netbox/templates/extras/dashboard/widgets/rssfeed.html:21 +#: netbox/templates/extras/dashboard/widgets/rssfeed.html:25 msgid "HTTP" msgstr "HTTP" @@ -13441,6 +14042,30 @@ msgstr "Kaynak Bağlamları" msgid "New Journal Entry" msgstr "Yeni Dergi Girişi" +#: netbox/templates/extras/object_render_config.html:6 +msgid "Config" +msgstr "Yapılandırma" + +#: netbox/templates/extras/object_render_config.html:36 +msgid "Context Data" +msgstr "Bağlam Verileri" + +#: netbox/templates/extras/object_render_config.html:56 +msgid "Rendered Config" +msgstr "Oluşturulan Yapılandırma" + +#: netbox/templates/extras/object_render_config.html:58 +msgid "Download" +msgstr "İndir" + +#: netbox/templates/extras/object_render_config.html:65 +msgid "Error rendering template" +msgstr "Hata oluşturma şablonu" + +#: netbox/templates/extras/object_render_config.html:71 +msgid "No configuration template has been assigned." +msgstr "Hiçbir yapılandırma şablonu atanmadı." + #: netbox/templates/extras/report/base.html:30 msgid "Report" msgstr "Rapor" @@ -13528,7 +14153,7 @@ msgstr "Herhangi bir" msgid "Tagged Item Types" msgstr "Etiketli Öğe Türleri" -#: netbox/templates/extras/tag.html:81 +#: netbox/templates/extras/tag.html:82 msgid "Tagged Objects" msgstr "Etiketli Nesneler" @@ -13809,6 +14434,21 @@ msgstr "Tüm bildirimler" msgid "Select" msgstr "Seçiniz" +#: netbox/templates/htmx/quick_add.html:7 +msgid "Quick Add" +msgstr "Hızlı Ekle" + +#: netbox/templates/htmx/quick_add_created.html:18 +#, python-format +msgid "" +"\n" +" Created %(object_type)s %(object)s\n" +" " +msgstr "" +"\n" +" Oluşturuldu %(object_type)s %(object)s\n" +" " + #: netbox/templates/inc/filter_list.html:43 #: netbox/utilities/templates/helpers/table_config_form.html:39 msgid "Reset" @@ -13880,15 +14520,11 @@ msgstr "Net sipariş" msgid "Help center" msgstr "Yardım Merkezi" -#: netbox/templates/inc/user_menu.html:41 -msgid "Django Admin" -msgstr "" - -#: netbox/templates/inc/user_menu.html:61 +#: netbox/templates/inc/user_menu.html:56 msgid "Log Out" msgstr "Oturumu Kapat" -#: netbox/templates/inc/user_menu.html:68 netbox/templates/login.html:38 +#: netbox/templates/inc/user_menu.html:63 netbox/templates/login.html:38 msgid "Log In" msgstr "Oturum aç" @@ -13985,43 +14621,43 @@ msgstr "Başlangıç Adresi" msgid "Ending Address" msgstr "Bitiş Adresi" -#: netbox/templates/ipam/iprange.html:33 netbox/templates/ipam/prefix.html:110 +#: netbox/templates/ipam/iprange.html:33 netbox/templates/ipam/prefix.html:106 msgid "Marked fully utilized" msgstr "Tamamen kullanılmış olarak işaretlenmiş" -#: netbox/templates/ipam/prefix.html:99 +#: netbox/templates/ipam/prefix.html:95 msgid "Addressing Details" msgstr "Adresleme Ayrıntıları" -#: netbox/templates/ipam/prefix.html:118 +#: netbox/templates/ipam/prefix.html:114 msgid "Child IPs" msgstr "Çocuk IP'leri" -#: netbox/templates/ipam/prefix.html:126 +#: netbox/templates/ipam/prefix.html:122 msgid "Available IPs" msgstr "Kullanılabilir IP'ler" -#: netbox/templates/ipam/prefix.html:138 +#: netbox/templates/ipam/prefix.html:134 msgid "First available IP" msgstr "İlk kullanılabilir IP" -#: netbox/templates/ipam/prefix.html:179 +#: netbox/templates/ipam/prefix.html:175 msgid "Prefix Details" msgstr "Önek Ayrıntıları" -#: netbox/templates/ipam/prefix.html:185 +#: netbox/templates/ipam/prefix.html:181 msgid "Network Address" msgstr "Ağ Adresi" -#: netbox/templates/ipam/prefix.html:189 +#: netbox/templates/ipam/prefix.html:185 msgid "Network Mask" msgstr "Ağ Maskesi" -#: netbox/templates/ipam/prefix.html:193 +#: netbox/templates/ipam/prefix.html:189 msgid "Wildcard Mask" msgstr "Joker Karakter Maskesi" -#: netbox/templates/ipam/prefix.html:197 +#: netbox/templates/ipam/prefix.html:193 msgid "Broadcast Address" msgstr "Yayın Adresi" @@ -14061,14 +14697,30 @@ msgstr "L2VPN'leri içe aktarma" msgid "Exporting L2VPNs" msgstr "L2VPN'leri Dışa Aktarma" -#: netbox/templates/ipam/vlan.html:88 +#: netbox/templates/ipam/vlan.html:66 +msgid "Q-in-Q Role" +msgstr "Q-in-Q Rolü" + +#: netbox/templates/ipam/vlan.html:104 msgid "Add a Prefix" msgstr "Önek Ekle" +#: netbox/templates/ipam/vlan.html:114 +msgid "Customer VLANs" +msgstr "Müşteri VLAN'ları" + +#: netbox/templates/ipam/vlan.html:118 +msgid "Add a VLAN" +msgstr "VLAN ekleme" + #: netbox/templates/ipam/vlangroup.html:18 msgid "Add VLAN" msgstr "VLAN ekle" +#: netbox/templates/ipam/vlantranslationpolicy.html:51 +msgid "Add Rule" +msgstr "Kural Ekle" + #: netbox/templates/ipam/vrf.html:16 msgid "Route Distinguisher" msgstr "Rota Ayırt Edici" @@ -14146,7 +14798,7 @@ msgstr "" #: netbox/templates/tenancy/contact.html:18 netbox/tenancy/filtersets.py:147 #: netbox/tenancy/forms/bulk_edit.py:137 -#: netbox/tenancy/forms/filtersets.py:102 netbox/tenancy/forms/forms.py:56 +#: netbox/tenancy/forms/filtersets.py:102 netbox/tenancy/forms/forms.py:57 #: netbox/tenancy/forms/model_forms.py:106 #: netbox/tenancy/forms/model_forms.py:130 #: netbox/tenancy/tables/contacts.py:98 @@ -14164,7 +14816,7 @@ msgid "Phone" msgstr "Telefon" #: netbox/templates/tenancy/contactgroup.html:18 -#: netbox/tenancy/forms/forms.py:66 netbox/tenancy/forms/model_forms.py:75 +#: netbox/tenancy/forms/forms.py:67 netbox/tenancy/forms/model_forms.py:75 msgid "Contact Group" msgstr "İletişim Grubu" @@ -14173,7 +14825,7 @@ msgid "Add Contact Group" msgstr "Kişi Grubu Ekle" #: netbox/templates/tenancy/contactrole.html:15 -#: netbox/tenancy/filtersets.py:152 netbox/tenancy/forms/forms.py:61 +#: netbox/tenancy/filtersets.py:152 netbox/tenancy/forms/forms.py:62 #: netbox/tenancy/forms/model_forms.py:87 msgid "Contact Role" msgstr "İletişim Rolü" @@ -14187,8 +14839,8 @@ msgid "Add Tenant" msgstr "Kiracı Ekle" #: netbox/templates/tenancy/tenantgroup.html:26 -#: netbox/tenancy/forms/model_forms.py:32 netbox/tenancy/tables/columns.py:51 -#: netbox/tenancy/tables/columns.py:61 +#: netbox/tenancy/forms/model_forms.py:32 netbox/tenancy/tables/columns.py:36 +#: netbox/tenancy/tables/columns.py:46 msgid "Tenant Group" msgstr "Kiracı Grubu" @@ -14219,21 +14871,21 @@ msgstr "Kısıtlamalar" msgid "Assigned Users" msgstr "Atanan Kullanıcılar" -#: netbox/templates/virtualization/cluster.html:52 +#: netbox/templates/virtualization/cluster.html:56 msgid "Allocated Resources" msgstr "Tahsis Edilen Kaynaklar" -#: netbox/templates/virtualization/cluster.html:55 +#: netbox/templates/virtualization/cluster.html:59 #: netbox/templates/virtualization/virtualmachine.html:125 msgid "Virtual CPUs" msgstr "Sanal CPU'lar" -#: netbox/templates/virtualization/cluster.html:59 +#: netbox/templates/virtualization/cluster.html:63 #: netbox/templates/virtualization/virtualmachine.html:129 msgid "Memory" msgstr "Bellek" -#: netbox/templates/virtualization/cluster.html:69 +#: netbox/templates/virtualization/cluster.html:73 #: netbox/templates/virtualization/virtualmachine.html:140 msgid "Disk Space" msgstr "Disk Alanı" @@ -14269,13 +14921,13 @@ msgid "Add Cluster" msgstr "Küme Ekle" #: netbox/templates/virtualization/clustergroup.html:19 -#: netbox/virtualization/forms/model_forms.py:50 +#: netbox/virtualization/forms/model_forms.py:53 msgid "Cluster Group" msgstr "Küme Grubu" #: netbox/templates/virtualization/clustertype.html:19 #: netbox/templates/virtualization/virtualmachine.html:110 -#: netbox/virtualization/forms/model_forms.py:36 +#: netbox/virtualization/forms/model_forms.py:39 msgid "Cluster Type" msgstr "Küme Türü" @@ -14284,8 +14936,8 @@ msgid "Virtual Disk" msgstr "Sanal Disk" #: netbox/templates/virtualization/virtualmachine.html:122 -#: netbox/virtualization/forms/bulk_edit.py:190 -#: netbox/virtualization/forms/model_forms.py:224 +#: netbox/virtualization/forms/bulk_edit.py:172 +#: netbox/virtualization/forms/model_forms.py:231 msgid "Resources" msgstr "Kaynaklar" @@ -14293,10 +14945,6 @@ msgstr "Kaynaklar" msgid "Add Virtual Disk" msgstr "Sanal Disk Ekle" -#: netbox/templates/virtualization/virtualmachine/render_config.html:70 -msgid "No configuration template has been assigned for this virtual machine." -msgstr "" - #: netbox/templates/vpn/ikepolicy.html:10 #: netbox/templates/vpn/ipsecprofile.html:33 netbox/vpn/tables/crypto.py:166 msgid "IKE Policy" @@ -14319,7 +14967,7 @@ msgstr "Sırrı Göster" #: netbox/templates/vpn/ipsecpolicy.html:45 #: netbox/templates/vpn/ipsecprofile.html:52 #: netbox/templates/vpn/ipsecprofile.html:77 -#: netbox/vpn/forms/model_forms.py:316 netbox/vpn/forms/model_forms.py:352 +#: netbox/vpn/forms/model_forms.py:317 netbox/vpn/forms/model_forms.py:354 #: netbox/vpn/tables/crypto.py:68 netbox/vpn/tables/crypto.py:134 msgid "Proposals" msgstr "Teklifler" @@ -14365,12 +15013,12 @@ msgid "IPSec Policy" msgstr "IPSec İlkesi" #: netbox/templates/vpn/ipsecpolicy.html:21 netbox/vpn/forms/bulk_edit.py:210 -#: netbox/vpn/models/crypto.py:193 +#: netbox/vpn/models/crypto.py:191 msgid "PFS group" msgstr "PFS grubu" #: netbox/templates/vpn/ipsecprofile.html:10 -#: netbox/vpn/forms/model_forms.py:54 +#: netbox/vpn/forms/model_forms.py:55 msgid "IPSec Profile" msgstr "IPsec Profili" @@ -14396,10 +15044,6 @@ msgstr "L2VPN Öznitellikler" msgid "Add a Termination" msgstr "Sonlandırma Ekle" -#: netbox/templates/vpn/tunnel.html:9 -msgid "Add Termination" -msgstr "Sonlandırma Ekle" - #: netbox/templates/vpn/tunnel.html:37 netbox/vpn/forms/bulk_edit.py:49 #: netbox/vpn/forms/bulk_import.py:48 netbox/vpn/forms/filtersets.py:57 msgid "Encapsulation" @@ -14407,7 +15051,7 @@ msgstr "Kapsülleme" #: netbox/templates/vpn/tunnel.html:41 netbox/vpn/forms/bulk_edit.py:55 #: netbox/vpn/forms/bulk_import.py:53 netbox/vpn/forms/filtersets.py:64 -#: netbox/vpn/models/crypto.py:250 netbox/vpn/tables/tunnels.py:51 +#: netbox/vpn/models/crypto.py:246 netbox/vpn/tables/tunnels.py:51 msgid "IPSec profile" msgstr "IPsec profili" @@ -14430,8 +15074,8 @@ msgid "Tunnel Termination" msgstr "Tünel Sonlandırma" #: netbox/templates/vpn/tunneltermination.html:35 -#: netbox/vpn/forms/bulk_import.py:107 netbox/vpn/forms/model_forms.py:102 -#: netbox/vpn/forms/model_forms.py:138 netbox/vpn/forms/model_forms.py:247 +#: netbox/vpn/forms/bulk_import.py:107 netbox/vpn/forms/model_forms.py:103 +#: netbox/vpn/forms/model_forms.py:139 netbox/vpn/forms/model_forms.py:248 #: netbox/vpn/tables/tunnels.py:101 msgid "Outside IP" msgstr "Dış IP" @@ -14454,7 +15098,7 @@ msgctxt "Abbreviation for megahertz" msgid "MHz" msgstr "MHz" -#: netbox/templates/wireless/wirelesslan.html:57 +#: netbox/templates/wireless/wirelesslan.html:65 msgid "Attached Interfaces" msgstr "Ekli Arayüzler" @@ -14463,7 +15107,7 @@ msgid "Add Wireless LAN" msgstr "Kablosuz LAN Ekle" #: netbox/templates/wireless/wirelesslangroup.html:26 -#: netbox/wireless/forms/model_forms.py:28 +#: netbox/wireless/forms/model_forms.py:29 msgid "Wireless LAN Group" msgstr "Kablosuz LAN Grubu" @@ -14475,13 +15119,6 @@ msgstr "Kablosuz LAN Grubu Ekle" msgid "Link Properties" msgstr "Bağlantı Özellikleri" -#: netbox/templates/wireless/wirelesslink.html:38 -#: netbox/wireless/forms/bulk_edit.py:129 -#: netbox/wireless/forms/filtersets.py:102 -#: netbox/wireless/forms/model_forms.py:165 -msgid "Distance" -msgstr "Mesafe" - #: netbox/tenancy/filtersets.py:28 msgid "Parent contact group (ID)" msgstr "Ebeveyn iletişim grubu (ID)" @@ -14552,47 +15189,47 @@ msgstr "iletişim grubu" msgid "contact groups" msgstr "iletişim grupları" -#: netbox/tenancy/models/contacts.py:48 +#: netbox/tenancy/models/contacts.py:42 msgid "contact role" msgstr "iletişim rolü" -#: netbox/tenancy/models/contacts.py:49 +#: netbox/tenancy/models/contacts.py:43 msgid "contact roles" msgstr "iletişim rolleri" -#: netbox/tenancy/models/contacts.py:68 +#: netbox/tenancy/models/contacts.py:63 msgid "title" msgstr "başlık" -#: netbox/tenancy/models/contacts.py:73 +#: netbox/tenancy/models/contacts.py:68 msgid "phone" msgstr "telefon" -#: netbox/tenancy/models/contacts.py:78 +#: netbox/tenancy/models/contacts.py:73 msgid "email" msgstr "E-posta" -#: netbox/tenancy/models/contacts.py:87 +#: netbox/tenancy/models/contacts.py:82 msgid "link" msgstr "bağlantı" -#: netbox/tenancy/models/contacts.py:103 +#: netbox/tenancy/models/contacts.py:98 msgid "contact" msgstr "temas" -#: netbox/tenancy/models/contacts.py:104 +#: netbox/tenancy/models/contacts.py:99 msgid "contacts" msgstr "kişileri" -#: netbox/tenancy/models/contacts.py:153 +#: netbox/tenancy/models/contacts.py:146 msgid "contact assignment" msgstr "iletişim ataması" -#: netbox/tenancy/models/contacts.py:154 +#: netbox/tenancy/models/contacts.py:147 msgid "contact assignments" msgstr "iletişim atamaları" -#: netbox/tenancy/models/contacts.py:170 +#: netbox/tenancy/models/contacts.py:163 #, python-brace-format msgid "Contacts cannot be assigned to this object type ({type})." msgstr "Kişiler bu nesne türüne atanamaz ({type})." @@ -14605,19 +15242,19 @@ msgstr "kiracı grubu" msgid "tenant groups" msgstr "kiracı grupları" -#: netbox/tenancy/models/tenants.py:70 +#: netbox/tenancy/models/tenants.py:68 msgid "Tenant name must be unique per group." msgstr "Kiracı adı, her grup için benzersiz olmalıdır." -#: netbox/tenancy/models/tenants.py:80 +#: netbox/tenancy/models/tenants.py:78 msgid "Tenant slug must be unique per group." msgstr "Kiracı kısa adı, her grup için benzersiz olmalıdır." -#: netbox/tenancy/models/tenants.py:88 +#: netbox/tenancy/models/tenants.py:86 msgid "tenant" msgstr "kiracı" -#: netbox/tenancy/models/tenants.py:89 +#: netbox/tenancy/models/tenants.py:87 msgid "tenants" msgstr "kiracılar" @@ -14842,7 +15479,7 @@ msgstr "jeton" msgid "tokens" msgstr "jetonlar" -#: netbox/users/models/users.py:57 netbox/vpn/models/crypto.py:42 +#: netbox/users/models/users.py:57 netbox/vpn/models/crypto.py:43 msgid "group" msgstr "grup" @@ -14887,26 +15524,26 @@ msgstr "Sağlanan sayısal kimlik kullanılarak ilgili nesne bulunamadı: {id}" msgid "{name} has a key defined but CHOICES is not a list" msgstr "{name} tanımlanmış bir anahtarı var ama SEÇENEKLER bir liste değil" -#: netbox/utilities/conversion.py:19 +#: netbox/utilities/conversion.py:20 msgid "Weight must be a positive number" msgstr "Ağırlık pozitif bir sayı olmalıdır" -#: netbox/utilities/conversion.py:21 +#: netbox/utilities/conversion.py:22 #, python-brace-format msgid "Invalid value '{weight}' for weight (must be a number)" msgstr "Geçersiz değer '{weight}'ağırlık için (bir sayı olmalıdır)" -#: netbox/utilities/conversion.py:32 netbox/utilities/conversion.py:62 +#: netbox/utilities/conversion.py:33 netbox/utilities/conversion.py:63 #, python-brace-format msgid "Unknown unit {unit}. Must be one of the following: {valid_units}" msgstr "" "Bilinmeyen birim {unit}. Aşağıdakilerden biri olmalıdır: {valid_units}" -#: netbox/utilities/conversion.py:45 +#: netbox/utilities/conversion.py:46 msgid "Length must be a positive number" msgstr "Uzunluk pozitif bir sayı olmalıdır" -#: netbox/utilities/conversion.py:47 +#: netbox/utilities/conversion.py:48 #, python-brace-format msgid "Invalid value '{length}' for length (must be a number)" msgstr "Geçersiz değer '{length}'uzunluk için (bir sayı olmalıdır)" @@ -14923,11 +15560,11 @@ msgstr "" msgid "More than 50" msgstr "50'den fazla" -#: netbox/utilities/fields.py:30 +#: netbox/utilities/fields.py:29 msgid "RGB color in hexadecimal. Example: " msgstr "Onaltılık olarak RGB rengi. Örnek: " -#: netbox/utilities/fields.py:159 +#: netbox/utilities/fields.py:158 #, python-format msgid "" "%s(%r) is invalid. to_model parameter to CounterCacheField must be a string " @@ -14936,7 +15573,7 @@ msgstr "" "%s(%r) geçersiz. counterCacheField için to_model parametresi 'app.model' " "biçiminde bir dize olmalıdır" -#: netbox/utilities/fields.py:169 +#: netbox/utilities/fields.py:168 #, python-format msgid "" "%s(%r) is invalid. to_field parameter to CounterCacheField must be a string " @@ -15163,13 +15800,13 @@ msgstr "Sütun için geçersiz ilgili nesne özniteliği”{field}“: {to_field msgid "Required column header \"{header}\" not found." msgstr "Gerekli sütun başlığı”{header}“Bulunamadı." -#: netbox/utilities/forms/widgets/apiselect.py:124 +#: netbox/utilities/forms/widgets/apiselect.py:133 #, python-brace-format msgid "Missing required value for dynamic query param: '{dynamic_params}'" msgstr "" "Dinamik sorgu parametresi için gerekli değer eksik: '{dynamic_params}'" -#: netbox/utilities/forms/widgets/apiselect.py:141 +#: netbox/utilities/forms/widgets/apiselect.py:150 #, python-brace-format msgid "Missing required value for static query param: '{static_params}'" msgstr "Statik sorgu parametresi için gerekli değer eksik: '{static_params}'" @@ -15292,10 +15929,14 @@ msgstr "Arama..." msgid "Search NetBox" msgstr "Arama NetBox" -#: netbox/utilities/templates/widgets/apiselect.html:7 +#: netbox/utilities/templates/widgets/apiselect.html:8 msgid "Open selector" msgstr "Seçiciyi aç" +#: netbox/utilities/templates/widgets/apiselect.html:22 +msgid "Quick add" +msgstr "Hızlı ekleme" + #: netbox/utilities/templates/widgets/markdown_input.html:6 msgid "Write" msgstr "Yazmak" @@ -15330,113 +15971,119 @@ msgstr "" "{class_name} tanımlanmış bir sorgu seti yok. ObjectPermissionRequiredMixin " "yalnızca temel sorgu kümesini tanımlayan görünümlerde kullanılabilir" -#: netbox/virtualization/filtersets.py:79 +#: netbox/virtualization/choices.py:50 +msgid "Paused" +msgstr "Duraklatıldı" + +#: netbox/virtualization/filtersets.py:45 msgid "Parent group (ID)" msgstr "Ana grup (ID)" -#: netbox/virtualization/filtersets.py:85 +#: netbox/virtualization/filtersets.py:51 msgid "Parent group (slug)" msgstr "Ebeveyn grubu (kısa ad)" -#: netbox/virtualization/filtersets.py:89 -#: netbox/virtualization/filtersets.py:141 +#: netbox/virtualization/filtersets.py:55 +#: netbox/virtualization/filtersets.py:107 msgid "Cluster type (ID)" msgstr "Küme türü (ID)" -#: netbox/virtualization/filtersets.py:151 -#: netbox/virtualization/filtersets.py:271 +#: netbox/virtualization/filtersets.py:117 +#: netbox/virtualization/filtersets.py:237 msgid "Cluster (ID)" msgstr "Küme (ID)" -#: netbox/virtualization/forms/bulk_edit.py:166 -#: netbox/virtualization/models/virtualmachines.py:115 +#: netbox/virtualization/forms/bulk_edit.py:148 +#: netbox/virtualization/models/virtualmachines.py:110 msgid "vCPUs" msgstr "vCPU'lar" -#: netbox/virtualization/forms/bulk_edit.py:170 +#: netbox/virtualization/forms/bulk_edit.py:152 msgid "Memory (MB)" msgstr "Bellek (MB)" -#: netbox/virtualization/forms/bulk_edit.py:174 +#: netbox/virtualization/forms/bulk_edit.py:156 msgid "Disk (MB)" msgstr "Disk (MB)" -#: netbox/virtualization/forms/bulk_edit.py:334 -#: netbox/virtualization/forms/filtersets.py:251 +#: netbox/virtualization/forms/bulk_edit.py:324 +#: netbox/virtualization/forms/filtersets.py:256 msgid "Size (MB)" msgstr "Boyut (MB)" -#: netbox/virtualization/forms/bulk_import.py:44 +#: netbox/virtualization/forms/bulk_import.py:45 msgid "Type of cluster" msgstr "Küme türü" -#: netbox/virtualization/forms/bulk_import.py:51 +#: netbox/virtualization/forms/bulk_import.py:52 msgid "Assigned cluster group" msgstr "Atanmış küme grubu" -#: netbox/virtualization/forms/bulk_import.py:96 +#: netbox/virtualization/forms/bulk_import.py:102 msgid "Assigned cluster" msgstr "Atanmış küme" -#: netbox/virtualization/forms/bulk_import.py:103 +#: netbox/virtualization/forms/bulk_import.py:109 msgid "Assigned device within cluster" msgstr "Küme içinde atanan aygıt" -#: netbox/virtualization/forms/filtersets.py:183 +#: netbox/virtualization/forms/filtersets.py:188 msgid "Serial number" msgstr "Seri numarası" -#: netbox/virtualization/forms/model_forms.py:153 +#: netbox/virtualization/forms/model_forms.py:158 #, python-brace-format msgid "" -"{device} belongs to a different site ({device_site}) than the cluster " -"({cluster_site})" +"{device} belongs to a different {scope_field} ({device_scope}) than the " +"cluster ({cluster_scope})" msgstr "" +"{device} farklı birine aittir {scope_field} ({device_scope}) kümeden " +"({cluster_scope})" -#: netbox/virtualization/forms/model_forms.py:192 +#: netbox/virtualization/forms/model_forms.py:199 msgid "Optionally pin this VM to a specific host device within the cluster" msgstr "" "İsteğe bağlı olarak bu sanal makineyi küme içindeki belirli bir ana aygıta " "sabitleyin" -#: netbox/virtualization/forms/model_forms.py:221 +#: netbox/virtualization/forms/model_forms.py:228 msgid "Site/Cluster" msgstr "Site/Küme" -#: netbox/virtualization/forms/model_forms.py:244 +#: netbox/virtualization/forms/model_forms.py:251 msgid "Disk size is managed via the attachment of virtual disks." msgstr "Disk boyutu sanal disklerin eklenmesiyle yönetilir." -#: netbox/virtualization/forms/model_forms.py:372 -#: netbox/virtualization/tables/virtualmachines.py:111 +#: netbox/virtualization/forms/model_forms.py:405 +#: netbox/virtualization/tables/virtualmachines.py:81 msgid "Disk" msgstr "Disk" -#: netbox/virtualization/models/clusters.py:25 +#: netbox/virtualization/models/clusters.py:26 msgid "cluster type" msgstr "küme türü" -#: netbox/virtualization/models/clusters.py:26 +#: netbox/virtualization/models/clusters.py:27 msgid "cluster types" msgstr "küme türleri" -#: netbox/virtualization/models/clusters.py:45 +#: netbox/virtualization/models/clusters.py:43 msgid "cluster group" msgstr "küme grubu" -#: netbox/virtualization/models/clusters.py:46 +#: netbox/virtualization/models/clusters.py:44 msgid "cluster groups" msgstr "küme grupları" -#: netbox/virtualization/models/clusters.py:121 +#: netbox/virtualization/models/clusters.py:110 msgid "cluster" msgstr "küme" -#: netbox/virtualization/models/clusters.py:122 +#: netbox/virtualization/models/clusters.py:111 msgid "clusters" msgstr "kümeleri" -#: netbox/virtualization/models/clusters.py:141 +#: netbox/virtualization/models/clusters.py:137 #, python-brace-format msgid "" "{count} devices are assigned as hosts for this cluster but are not in site " @@ -15445,47 +16092,56 @@ msgstr "" "{count} aygıt bu küme için ana bilgisayar olarak atanır, ancak {site} isimli" " site için için atanmaz" -#: netbox/virtualization/models/virtualmachines.py:123 +#: netbox/virtualization/models/clusters.py:144 +#, python-brace-format +msgid "" +"{count} devices are assigned as hosts for this cluster but are not in " +"location {location}" +msgstr "" +"{count} aygıtlar bu küme için ana bilgisayar olarak atanır ancak konumda " +"değildir {location}" + +#: netbox/virtualization/models/virtualmachines.py:118 msgid "memory (MB)" msgstr "bellek (MB)" -#: netbox/virtualization/models/virtualmachines.py:128 +#: netbox/virtualization/models/virtualmachines.py:123 msgid "disk (MB)" msgstr "disk (MB)" -#: netbox/virtualization/models/virtualmachines.py:166 +#: netbox/virtualization/models/virtualmachines.py:161 msgid "Virtual machine name must be unique per cluster." msgstr "Sanal makine adı küme başına benzersiz olmalıdır." -#: netbox/virtualization/models/virtualmachines.py:169 +#: netbox/virtualization/models/virtualmachines.py:164 msgid "virtual machine" msgstr "sanal makine" -#: netbox/virtualization/models/virtualmachines.py:170 +#: netbox/virtualization/models/virtualmachines.py:165 msgid "virtual machines" msgstr "sanal makineler" -#: netbox/virtualization/models/virtualmachines.py:184 +#: netbox/virtualization/models/virtualmachines.py:176 msgid "A virtual machine must be assigned to a site and/or cluster." msgstr "Bir sanal makine bir siteye ve/veya kümeye atanmalıdır." -#: netbox/virtualization/models/virtualmachines.py:191 +#: netbox/virtualization/models/virtualmachines.py:183 #, python-brace-format msgid "" "The selected cluster ({cluster}) is not assigned to this site ({site})." msgstr "Seçilen küme ({cluster}) bu siteye atanmamıştır ({site})." -#: netbox/virtualization/models/virtualmachines.py:198 +#: netbox/virtualization/models/virtualmachines.py:190 msgid "Must specify a cluster when assigning a host device." msgstr "Ana aygıt atarken bir küme belirtmeniz gerekir." -#: netbox/virtualization/models/virtualmachines.py:203 +#: netbox/virtualization/models/virtualmachines.py:195 #, python-brace-format msgid "" "The selected device ({device}) is not assigned to this cluster ({cluster})." msgstr "Seçilen cihaz ({device}) bu kümeye atanmadı ({cluster})." -#: netbox/virtualization/models/virtualmachines.py:215 +#: netbox/virtualization/models/virtualmachines.py:207 #, python-brace-format msgid "" "The specified disk size ({size}) must match the aggregate size of assigned " @@ -15494,17 +16150,17 @@ msgstr "" "Belirtilen disk boyutu ({size}) atanmış sanal disklerin toplam boyutuyla " "eşleşmelidir ({total_size})." -#: netbox/virtualization/models/virtualmachines.py:229 +#: netbox/virtualization/models/virtualmachines.py:221 #, python-brace-format msgid "Must be an IPv{family} address. ({ip} is an IPv{version} address.)" msgstr "IPV olmalı{family} adres. ({ip} bir IPV{version} adres.)" -#: netbox/virtualization/models/virtualmachines.py:238 +#: netbox/virtualization/models/virtualmachines.py:230 #, python-brace-format msgid "The specified IP address ({ip}) is not assigned to this VM." msgstr "Belirtilen IP adresi ({ip}) bu VM'ye atanmadı." -#: netbox/virtualization/models/virtualmachines.py:396 +#: netbox/virtualization/models/virtualmachines.py:376 #, python-brace-format msgid "" "The selected parent interface ({parent}) belongs to a different virtual " @@ -15513,7 +16169,7 @@ msgstr "" "Seçilen üst arabirim ({parent}) farklı bir sanal makineye aittir " "({virtual_machine})." -#: netbox/virtualization/models/virtualmachines.py:411 +#: netbox/virtualization/models/virtualmachines.py:391 #, python-brace-format msgid "" "The selected bridge interface ({bridge}) belongs to a different virtual " @@ -15522,7 +16178,7 @@ msgstr "" "Seçilen köprü arayüzü ({bridge}) farklı bir sanal makineye aittir " "({virtual_machine})." -#: netbox/virtualization/models/virtualmachines.py:422 +#: netbox/virtualization/models/virtualmachines.py:402 #, python-brace-format msgid "" "The untagged VLAN ({untagged_vlan}) must belong to the same site as the " @@ -15531,24 +16187,24 @@ msgstr "" "Etiketlenmemiş VLAN ({untagged_vlan}) arabirimin ana sanal makinesiyle aynı " "siteye ait olmalı veya global olmalıdır." -#: netbox/virtualization/models/virtualmachines.py:434 +#: netbox/virtualization/models/virtualmachines.py:414 msgid "size (MB)" msgstr "boyut (MB)" -#: netbox/virtualization/models/virtualmachines.py:438 +#: netbox/virtualization/models/virtualmachines.py:418 msgid "virtual disk" msgstr "sanal disk" -#: netbox/virtualization/models/virtualmachines.py:439 +#: netbox/virtualization/models/virtualmachines.py:419 msgid "virtual disks" msgstr "sanal diskler" -#: netbox/virtualization/views.py:273 +#: netbox/virtualization/views.py:289 #, python-brace-format msgid "Added {count} devices to cluster {cluster}" msgstr "Eklendi {count} kümelenecek cihazlar {cluster}" -#: netbox/virtualization/views.py:308 +#: netbox/virtualization/views.py:324 #, python-brace-format msgid "Removed {count} devices from cluster {cluster}" msgstr "Kaldırıldı {count} kümeden aygıtlar {cluster}" @@ -15585,14 +16241,6 @@ msgstr "L2TP" msgid "PPTP" msgstr "PPTP" -#: netbox/vpn/choices.py:64 -msgid "Hub" -msgstr "göbek" - -#: netbox/vpn/choices.py:65 -msgid "Spoke" -msgstr "konuştu" - #: netbox/vpn/choices.py:88 msgid "Aggressive" msgstr "Agresif" @@ -15710,26 +16358,26 @@ msgstr "VLAN (isim)" msgid "Tunnel group" msgstr "Tünel grubu" -#: netbox/vpn/forms/bulk_edit.py:117 netbox/vpn/models/crypto.py:47 +#: netbox/vpn/forms/bulk_edit.py:117 netbox/vpn/models/crypto.py:48 msgid "SA lifetime" msgstr "SA ömrü" -#: netbox/vpn/forms/bulk_edit.py:151 netbox/wireless/forms/bulk_edit.py:79 -#: netbox/wireless/forms/bulk_edit.py:126 -#: netbox/wireless/forms/filtersets.py:64 -#: netbox/wireless/forms/filtersets.py:98 +#: netbox/vpn/forms/bulk_edit.py:151 netbox/wireless/forms/bulk_edit.py:81 +#: netbox/wireless/forms/bulk_edit.py:129 +#: netbox/wireless/forms/filtersets.py:67 +#: netbox/wireless/forms/filtersets.py:126 msgid "Pre-shared key" msgstr "Önceden paylaşılan anahtar" #: netbox/vpn/forms/bulk_edit.py:237 netbox/vpn/forms/bulk_import.py:239 -#: netbox/vpn/forms/filtersets.py:199 netbox/vpn/forms/model_forms.py:370 +#: netbox/vpn/forms/filtersets.py:199 netbox/vpn/forms/model_forms.py:373 #: netbox/vpn/models/crypto.py:104 msgid "IKE policy" msgstr "IKE ilkesi" #: netbox/vpn/forms/bulk_edit.py:242 netbox/vpn/forms/bulk_import.py:244 -#: netbox/vpn/forms/filtersets.py:204 netbox/vpn/forms/model_forms.py:374 -#: netbox/vpn/models/crypto.py:209 +#: netbox/vpn/forms/filtersets.py:204 netbox/vpn/forms/model_forms.py:377 +#: netbox/vpn/models/crypto.py:207 msgid "IPSec policy" msgstr "IPsec ilkesi" @@ -15737,10 +16385,6 @@ msgstr "IPsec ilkesi" msgid "Tunnel encapsulation" msgstr "Tünel kapsülleme" -#: netbox/vpn/forms/bulk_import.py:83 -msgid "Operational role" -msgstr "Operasyonel rol" - #: netbox/vpn/forms/bulk_import.py:90 msgid "Parent device of assigned interface" msgstr "Atanan arayüzün ana aygıtı" @@ -15757,7 +16401,7 @@ msgstr "Aygıt veya sanal makine arayüzü" msgid "IKE proposal(s)" msgstr "IKE teklifi (lar)" -#: netbox/vpn/forms/bulk_import.py:215 netbox/vpn/models/crypto.py:197 +#: netbox/vpn/forms/bulk_import.py:215 netbox/vpn/models/crypto.py:195 msgid "Diffie-Hellman group for Perfect Forward Secrecy" msgstr "Perfect Forward Secrecy için Diffie-Hellman grubu" @@ -15802,7 +16446,7 @@ msgid "IKE version" msgstr "IKE versiyonu" #: netbox/vpn/forms/filtersets.py:142 netbox/vpn/forms/filtersets.py:175 -#: netbox/vpn/forms/model_forms.py:298 netbox/vpn/forms/model_forms.py:334 +#: netbox/vpn/forms/model_forms.py:299 netbox/vpn/forms/model_forms.py:336 msgid "Proposal" msgstr "Teklif" @@ -15810,32 +16454,28 @@ msgstr "Teklif" msgid "Assigned Object Type" msgstr "Atanan Nesne Türü" -#: netbox/vpn/forms/model_forms.py:95 netbox/vpn/forms/model_forms.py:130 -#: netbox/vpn/forms/model_forms.py:240 netbox/vpn/tables/tunnels.py:91 +#: netbox/vpn/forms/model_forms.py:96 netbox/vpn/forms/model_forms.py:131 +#: netbox/vpn/forms/model_forms.py:241 netbox/vpn/tables/tunnels.py:91 msgid "Tunnel interface" msgstr "Tünel arayüzü" -#: netbox/vpn/forms/model_forms.py:150 +#: netbox/vpn/forms/model_forms.py:151 msgid "First Termination" msgstr "İlk Fesih" -#: netbox/vpn/forms/model_forms.py:153 +#: netbox/vpn/forms/model_forms.py:154 msgid "Second Termination" msgstr "İkinci Sonlandırma" -#: netbox/vpn/forms/model_forms.py:197 +#: netbox/vpn/forms/model_forms.py:198 msgid "This parameter is required when defining a termination." msgstr "Bir sonlandırma tanımlarken bu parametre gereklidir." -#: netbox/vpn/forms/model_forms.py:320 netbox/vpn/forms/model_forms.py:356 -msgid "Policy" -msgstr "İlke" - -#: netbox/vpn/forms/model_forms.py:487 +#: netbox/vpn/forms/model_forms.py:490 msgid "A termination must specify an interface or VLAN." msgstr "Bir sonlandırma bir arayüz veya VLAN belirtmelidir." -#: netbox/vpn/forms/model_forms.py:489 +#: netbox/vpn/forms/model_forms.py:492 msgid "" "A termination can only have one terminating object (an interface or VLAN)." msgstr "" @@ -15850,31 +16490,31 @@ msgstr "şifreleme algoritması" msgid "authentication algorithm" msgstr "kimlik doğrulama algoritması" -#: netbox/vpn/models/crypto.py:44 +#: netbox/vpn/models/crypto.py:45 msgid "Diffie-Hellman group ID" msgstr "Diffie-Hellman grup kimliği" -#: netbox/vpn/models/crypto.py:50 +#: netbox/vpn/models/crypto.py:51 msgid "Security association lifetime (in seconds)" msgstr "Güvenlik ilişkilendirmesi ömrü (saniye cinsinden)" -#: netbox/vpn/models/crypto.py:59 +#: netbox/vpn/models/crypto.py:60 msgid "IKE proposal" msgstr "IKE teklifi" -#: netbox/vpn/models/crypto.py:60 +#: netbox/vpn/models/crypto.py:61 msgid "IKE proposals" msgstr "IKE teklifleri" -#: netbox/vpn/models/crypto.py:76 +#: netbox/vpn/models/crypto.py:75 msgid "version" msgstr "versiyon" -#: netbox/vpn/models/crypto.py:88 netbox/vpn/models/crypto.py:190 +#: netbox/vpn/models/crypto.py:88 netbox/vpn/models/crypto.py:188 msgid "proposals" msgstr "öneriler" -#: netbox/vpn/models/crypto.py:91 netbox/wireless/models.py:39 +#: netbox/vpn/models/crypto.py:91 netbox/wireless/models.py:41 msgid "pre-shared key" msgstr "önceden paylaşılan anahtar" @@ -15882,19 +16522,19 @@ msgstr "önceden paylaşılan anahtar" msgid "IKE policies" msgstr "IKE politikaları" -#: netbox/vpn/models/crypto.py:118 +#: netbox/vpn/models/crypto.py:115 msgid "Mode is required for selected IKE version" msgstr "Seçilen IKE sürümü için mod gereklidir" -#: netbox/vpn/models/crypto.py:122 +#: netbox/vpn/models/crypto.py:119 msgid "Mode cannot be used for selected IKE version" msgstr "Seçilen IKE sürümü için mod kullanılamaz" -#: netbox/vpn/models/crypto.py:136 +#: netbox/vpn/models/crypto.py:134 msgid "encryption" msgstr "şifreleme" -#: netbox/vpn/models/crypto.py:141 +#: netbox/vpn/models/crypto.py:140 msgid "authentication" msgstr "onaylama" @@ -15914,32 +16554,32 @@ msgstr "IPsec teklifi" msgid "IPSec proposals" msgstr "IPsec önerileri" -#: netbox/vpn/models/crypto.py:178 +#: netbox/vpn/models/crypto.py:175 msgid "Encryption and/or authentication algorithm must be defined" msgstr "Şifreleme ve/veya kimlik doğrulama algoritması tanımlanmalıdır" -#: netbox/vpn/models/crypto.py:210 +#: netbox/vpn/models/crypto.py:208 msgid "IPSec policies" msgstr "IPsec ilkeleri" -#: netbox/vpn/models/crypto.py:251 +#: netbox/vpn/models/crypto.py:247 msgid "IPSec profiles" msgstr "IPsec profilleri" -#: netbox/vpn/models/l2vpn.py:116 +#: netbox/vpn/models/l2vpn.py:113 msgid "L2VPN termination" msgstr "L2VPN sonlandırma" -#: netbox/vpn/models/l2vpn.py:117 +#: netbox/vpn/models/l2vpn.py:114 msgid "L2VPN terminations" msgstr "L2VPN sonlandırmaları" -#: netbox/vpn/models/l2vpn.py:135 +#: netbox/vpn/models/l2vpn.py:129 #, python-brace-format msgid "L2VPN Termination already assigned ({assigned_object})" msgstr "L2VPN Sonlandırma zaten atanmış ({assigned_object})" -#: netbox/vpn/models/l2vpn.py:147 +#: netbox/vpn/models/l2vpn.py:141 #, python-brace-format msgid "" "{l2vpn_type} L2VPNs cannot have more than two terminations; found " @@ -15956,35 +16596,35 @@ msgstr "tünel grubu" msgid "tunnel groups" msgstr "tünel grupları" -#: netbox/vpn/models/tunnels.py:53 +#: netbox/vpn/models/tunnels.py:51 msgid "encapsulation" msgstr "kapsülleme" -#: netbox/vpn/models/tunnels.py:72 +#: netbox/vpn/models/tunnels.py:70 msgid "tunnel ID" msgstr "tünel kimliği" -#: netbox/vpn/models/tunnels.py:94 +#: netbox/vpn/models/tunnels.py:92 msgid "tunnel" msgstr "tünel" -#: netbox/vpn/models/tunnels.py:95 +#: netbox/vpn/models/tunnels.py:93 msgid "tunnels" msgstr "tüneller" -#: netbox/vpn/models/tunnels.py:153 +#: netbox/vpn/models/tunnels.py:148 msgid "An object may be terminated to only one tunnel at a time." msgstr "Bir nesne aynı anda yalnızca bir tünele sonlandırılabilir." -#: netbox/vpn/models/tunnels.py:156 +#: netbox/vpn/models/tunnels.py:151 msgid "tunnel termination" msgstr "tünel sonlandırma" -#: netbox/vpn/models/tunnels.py:157 +#: netbox/vpn/models/tunnels.py:152 msgid "tunnel terminations" msgstr "tünel sonlandırmaları" -#: netbox/vpn/models/tunnels.py:174 +#: netbox/vpn/models/tunnels.py:169 #, python-brace-format msgid "{name} is already attached to a tunnel ({tunnel})." msgstr "{name} zaten bir tünele bağlı ({tunnel})." @@ -16045,51 +16685,44 @@ msgstr "WPA Kişisel (PSK)" msgid "WPA Enterprise" msgstr "WPA Kurumsal" -#: netbox/wireless/forms/bulk_edit.py:73 -#: netbox/wireless/forms/bulk_edit.py:120 -#: netbox/wireless/forms/bulk_import.py:68 -#: netbox/wireless/forms/bulk_import.py:71 -#: netbox/wireless/forms/bulk_import.py:110 -#: netbox/wireless/forms/bulk_import.py:113 -#: netbox/wireless/forms/filtersets.py:59 -#: netbox/wireless/forms/filtersets.py:93 +#: netbox/wireless/forms/bulk_edit.py:75 +#: netbox/wireless/forms/bulk_edit.py:123 +#: netbox/wireless/forms/bulk_import.py:70 +#: netbox/wireless/forms/bulk_import.py:73 +#: netbox/wireless/forms/bulk_import.py:115 +#: netbox/wireless/forms/bulk_import.py:118 +#: netbox/wireless/forms/filtersets.py:62 +#: netbox/wireless/forms/filtersets.py:121 msgid "Authentication cipher" msgstr "Kimlik doğrulama şifresi" -#: netbox/wireless/forms/bulk_edit.py:134 -#: netbox/wireless/forms/bulk_import.py:116 -#: netbox/wireless/forms/bulk_import.py:119 -#: netbox/wireless/forms/filtersets.py:106 -msgid "Distance unit" -msgstr "Mesafe birimi" - -#: netbox/wireless/forms/bulk_import.py:52 +#: netbox/wireless/forms/bulk_import.py:54 msgid "Bridged VLAN" msgstr "Köprülü VLAN" -#: netbox/wireless/forms/bulk_import.py:89 -#: netbox/wireless/tables/wirelesslink.py:28 +#: netbox/wireless/forms/bulk_import.py:94 +#: netbox/wireless/tables/wirelesslink.py:27 msgid "Interface A" msgstr "Arayüz A" -#: netbox/wireless/forms/bulk_import.py:93 -#: netbox/wireless/tables/wirelesslink.py:37 +#: netbox/wireless/forms/bulk_import.py:98 +#: netbox/wireless/tables/wirelesslink.py:36 msgid "Interface B" msgstr "Arayüz B" -#: netbox/wireless/forms/model_forms.py:161 +#: netbox/wireless/forms/model_forms.py:164 msgid "Side B" msgstr "B Tarafı" -#: netbox/wireless/models.py:31 +#: netbox/wireless/models.py:32 msgid "authentication cipher" msgstr "kimlik doğrulama şifresi" -#: netbox/wireless/models.py:69 +#: netbox/wireless/models.py:72 msgid "wireless LAN group" msgstr "kablosuz LAN grubu" -#: netbox/wireless/models.py:70 +#: netbox/wireless/models.py:73 msgid "wireless LAN groups" msgstr "kablosuz LAN grupları" @@ -16097,35 +16730,23 @@ msgstr "kablosuz LAN grupları" msgid "wireless LAN" msgstr "kablosuz LAN" -#: netbox/wireless/models.py:144 +#: netbox/wireless/models.py:141 msgid "interface A" msgstr "arayüz A" -#: netbox/wireless/models.py:151 +#: netbox/wireless/models.py:148 msgid "interface B" msgstr "arayüz B" -#: netbox/wireless/models.py:165 -msgid "distance" -msgstr "uzaklık" - -#: netbox/wireless/models.py:172 -msgid "distance unit" -msgstr "mesafe birimi" - -#: netbox/wireless/models.py:219 +#: netbox/wireless/models.py:196 msgid "wireless link" msgstr "kablosuz bağlantı" -#: netbox/wireless/models.py:220 +#: netbox/wireless/models.py:197 msgid "wireless links" msgstr "kablosuz bağlantılar" -#: netbox/wireless/models.py:236 -msgid "Must specify a unit when setting a wireless distance" -msgstr "" - -#: netbox/wireless/models.py:242 netbox/wireless/models.py:248 +#: netbox/wireless/models.py:212 netbox/wireless/models.py:218 #, python-brace-format msgid "{type} is not a wireless interface." msgstr "{type} kablosuz bir arayüz değildir." diff --git a/netbox/translations/uk/LC_MESSAGES/django.mo b/netbox/translations/uk/LC_MESSAGES/django.mo index fae7136089ac05ec0cc3721ad506d943792ba9ab..65f379fc52aada44ac02e11fd8e1130cfb6daf75 100644 GIT binary patch delta 76065 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

    dM4Qv1!$n8lI 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 D!`qZV delta 67260 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 diff --git a/netbox/translations/uk/LC_MESSAGES/django.po b/netbox/translations/uk/LC_MESSAGES/django.po index 4f7bf0cba..64f38eddd 100644 --- a/netbox/translations/uk/LC_MESSAGES/django.po +++ b/netbox/translations/uk/LC_MESSAGES/django.po @@ -5,17 +5,17 @@ # # Translators: # Volodymyr Pidgornyi, 2024 -# Jeremy Stretch, 2024 # Vladyslav V. Prodan, 2024 +# Jeremy Stretch, 2025 # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-01-04 05:02+0000\n" +"POT-Creation-Date: 2025-03-06 05:01+0000\n" "PO-Revision-Date: 2023-10-30 17:48+0000\n" -"Last-Translator: Vladyslav V. Prodan, 2024\n" +"Last-Translator: Jeremy Stretch, 2025\n" "Language-Team: Ukrainian (https://app.transifex.com/netbox-community/teams/178115/uk/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -33,7 +33,7 @@ msgstr "Ключ" msgid "Write Enabled" msgstr "Запис дозволено" -#: netbox/account/tables.py:35 netbox/core/choices.py:86 +#: netbox/account/tables.py:35 netbox/core/choices.py:102 #: netbox/core/tables/jobs.py:29 netbox/core/tables/tasks.py:79 #: netbox/extras/tables/tables.py:335 netbox/extras/tables/tables.py:566 #: netbox/templates/account/token.html:43 @@ -45,6 +45,7 @@ msgstr "Запис дозволено" #: netbox/templates/extras/htmx/script_result.html:12 #: netbox/templates/extras/journalentry.html:22 #: netbox/templates/generic/object.html:58 +#: netbox/templates/htmx/quick_add_created.html:7 #: netbox/templates/users/token.html:35 msgid "Created" msgstr "Створено" @@ -89,34 +90,35 @@ msgstr "Ваш пароль успішно змінено." #: netbox/circuits/choices.py:21 netbox/dcim/choices.py:20 #: netbox/dcim/choices.py:102 netbox/dcim/choices.py:185 -#: netbox/dcim/choices.py:237 netbox/dcim/choices.py:1532 -#: netbox/dcim/choices.py:1608 netbox/dcim/choices.py:1658 -#: netbox/virtualization/choices.py:20 netbox/virtualization/choices.py:45 -#: netbox/vpn/choices.py:18 +#: netbox/dcim/choices.py:237 netbox/dcim/choices.py:1534 +#: netbox/dcim/choices.py:1592 netbox/dcim/choices.py:1642 +#: netbox/dcim/choices.py:1664 netbox/virtualization/choices.py:20 +#: netbox/virtualization/choices.py:46 netbox/vpn/choices.py:18 msgid "Planned" msgstr "Заплановано" -#: netbox/circuits/choices.py:22 netbox/netbox/navigation/menu.py:305 +#: netbox/circuits/choices.py:22 netbox/netbox/navigation/menu.py:326 msgid "Provisioning" msgstr "Забезпечення" #: netbox/circuits/choices.py:23 netbox/core/tables/tasks.py:22 #: netbox/dcim/choices.py:22 netbox/dcim/choices.py:103 #: netbox/dcim/choices.py:184 netbox/dcim/choices.py:236 -#: netbox/dcim/choices.py:1607 netbox/dcim/choices.py:1657 -#: netbox/extras/tables/tables.py:495 netbox/ipam/choices.py:31 -#: netbox/ipam/choices.py:49 netbox/ipam/choices.py:69 -#: netbox/ipam/choices.py:154 netbox/templates/extras/configcontext.html:25 +#: netbox/dcim/choices.py:1591 netbox/dcim/choices.py:1641 +#: netbox/dcim/choices.py:1663 netbox/extras/tables/tables.py:495 +#: netbox/ipam/choices.py:31 netbox/ipam/choices.py:49 +#: netbox/ipam/choices.py:69 netbox/ipam/choices.py:154 +#: netbox/templates/extras/configcontext.html:25 #: netbox/templates/users/user.html:37 netbox/users/forms/bulk_edit.py:38 -#: netbox/virtualization/choices.py:22 netbox/virtualization/choices.py:44 +#: netbox/virtualization/choices.py:22 netbox/virtualization/choices.py:45 #: netbox/vpn/choices.py:19 netbox/wireless/choices.py:25 msgid "Active" msgstr "Активний" #: netbox/circuits/choices.py:24 netbox/dcim/choices.py:183 -#: netbox/dcim/choices.py:235 netbox/dcim/choices.py:1606 -#: netbox/dcim/choices.py:1659 netbox/virtualization/choices.py:24 -#: netbox/virtualization/choices.py:43 +#: netbox/dcim/choices.py:235 netbox/dcim/choices.py:1590 +#: netbox/dcim/choices.py:1643 netbox/dcim/choices.py:1662 +#: netbox/virtualization/choices.py:24 netbox/virtualization/choices.py:44 msgid "Offline" msgstr "Офлайн" @@ -128,7 +130,9 @@ msgstr "Зняття з експлуатації" msgid "Decommissioned" msgstr "Виведені з експлуатації" -#: netbox/circuits/choices.py:90 netbox/dcim/choices.py:1619 +#: netbox/circuits/choices.py:90 netbox/dcim/choices.py:1603 +#: netbox/templates/dcim/interface.html:135 +#: netbox/templates/virtualization/vminterface.html:77 #: netbox/tenancy/choices.py:17 msgid "Primary" msgstr "Первинний" @@ -146,195 +150,207 @@ msgstr "Третинний" msgid "Inactive" msgstr "Неактивний" -#: netbox/circuits/filtersets.py:31 netbox/circuits/filtersets.py:198 -#: netbox/dcim/filtersets.py:98 netbox/dcim/filtersets.py:152 -#: netbox/dcim/filtersets.py:212 netbox/dcim/filtersets.py:333 -#: netbox/dcim/filtersets.py:464 netbox/dcim/filtersets.py:1021 -#: netbox/dcim/filtersets.py:1368 netbox/dcim/filtersets.py:1903 -#: netbox/dcim/filtersets.py:2146 netbox/dcim/filtersets.py:2204 -#: netbox/ipam/filtersets.py:341 netbox/ipam/filtersets.py:961 -#: netbox/virtualization/filtersets.py:45 -#: netbox/virtualization/filtersets.py:173 netbox/vpn/filtersets.py:358 +#: netbox/circuits/choices.py:107 netbox/templates/dcim/interface.html:275 +#: netbox/vpn/choices.py:63 +msgid "Peer" +msgstr "Мережевий сусід" + +#: netbox/circuits/choices.py:108 netbox/vpn/choices.py:64 +msgid "Hub" +msgstr "Хаб" + +#: netbox/circuits/choices.py:109 netbox/vpn/choices.py:65 +msgid "Spoke" +msgstr "Спиця (в колесі)" + +#: netbox/circuits/filtersets.py:37 netbox/circuits/filtersets.py:204 +#: netbox/circuits/filtersets.py:284 netbox/dcim/base_filtersets.py:22 +#: netbox/dcim/filtersets.py:99 netbox/dcim/filtersets.py:153 +#: netbox/dcim/filtersets.py:213 netbox/dcim/filtersets.py:334 +#: netbox/dcim/filtersets.py:465 netbox/dcim/filtersets.py:1022 +#: netbox/dcim/filtersets.py:1370 netbox/dcim/filtersets.py:2027 +#: netbox/dcim/filtersets.py:2270 netbox/dcim/filtersets.py:2328 +#: netbox/ipam/filtersets.py:928 netbox/virtualization/filtersets.py:139 +#: netbox/vpn/filtersets.py:358 msgid "Region (ID)" msgstr "Регіон (ідентифікатор)" -#: netbox/circuits/filtersets.py:38 netbox/circuits/filtersets.py:205 -#: netbox/dcim/filtersets.py:105 netbox/dcim/filtersets.py:158 -#: netbox/dcim/filtersets.py:219 netbox/dcim/filtersets.py:340 -#: netbox/dcim/filtersets.py:471 netbox/dcim/filtersets.py:1028 -#: netbox/dcim/filtersets.py:1375 netbox/dcim/filtersets.py:1910 -#: netbox/dcim/filtersets.py:2153 netbox/dcim/filtersets.py:2211 -#: netbox/extras/filtersets.py:509 netbox/ipam/filtersets.py:348 -#: netbox/ipam/filtersets.py:968 netbox/virtualization/filtersets.py:52 -#: netbox/virtualization/filtersets.py:180 netbox/vpn/filtersets.py:353 +#: netbox/circuits/filtersets.py:44 netbox/circuits/filtersets.py:211 +#: netbox/circuits/filtersets.py:291 netbox/dcim/base_filtersets.py:29 +#: netbox/dcim/filtersets.py:106 netbox/dcim/filtersets.py:159 +#: netbox/dcim/filtersets.py:220 netbox/dcim/filtersets.py:341 +#: netbox/dcim/filtersets.py:472 netbox/dcim/filtersets.py:1029 +#: netbox/dcim/filtersets.py:1377 netbox/dcim/filtersets.py:2034 +#: netbox/dcim/filtersets.py:2277 netbox/dcim/filtersets.py:2335 +#: netbox/extras/filtersets.py:509 netbox/ipam/filtersets.py:935 +#: netbox/virtualization/filtersets.py:146 netbox/vpn/filtersets.py:353 msgid "Region (slug)" msgstr "Регіон (скорочення)" -#: netbox/circuits/filtersets.py:44 netbox/circuits/filtersets.py:211 -#: netbox/dcim/filtersets.py:128 netbox/dcim/filtersets.py:225 -#: netbox/dcim/filtersets.py:346 netbox/dcim/filtersets.py:477 -#: netbox/dcim/filtersets.py:1034 netbox/dcim/filtersets.py:1381 -#: netbox/dcim/filtersets.py:1916 netbox/dcim/filtersets.py:2159 -#: netbox/dcim/filtersets.py:2217 netbox/ipam/filtersets.py:354 -#: netbox/ipam/filtersets.py:974 netbox/virtualization/filtersets.py:58 -#: netbox/virtualization/filtersets.py:186 +#: netbox/circuits/filtersets.py:50 netbox/circuits/filtersets.py:217 +#: netbox/circuits/filtersets.py:297 netbox/dcim/base_filtersets.py:35 +#: netbox/dcim/filtersets.py:129 netbox/dcim/filtersets.py:226 +#: netbox/dcim/filtersets.py:347 netbox/dcim/filtersets.py:478 +#: netbox/dcim/filtersets.py:1035 netbox/dcim/filtersets.py:1383 +#: netbox/dcim/filtersets.py:2040 netbox/dcim/filtersets.py:2283 +#: netbox/dcim/filtersets.py:2341 netbox/ipam/filtersets.py:941 +#: netbox/virtualization/filtersets.py:152 msgid "Site group (ID)" msgstr "Група тех. майданчиків (ідентифікатор)" -#: netbox/circuits/filtersets.py:51 netbox/circuits/filtersets.py:218 -#: netbox/dcim/filtersets.py:135 netbox/dcim/filtersets.py:232 -#: netbox/dcim/filtersets.py:353 netbox/dcim/filtersets.py:484 -#: netbox/dcim/filtersets.py:1041 netbox/dcim/filtersets.py:1388 -#: netbox/dcim/filtersets.py:1923 netbox/dcim/filtersets.py:2166 -#: netbox/dcim/filtersets.py:2224 netbox/extras/filtersets.py:515 -#: netbox/ipam/filtersets.py:361 netbox/ipam/filtersets.py:981 -#: netbox/virtualization/filtersets.py:65 -#: netbox/virtualization/filtersets.py:193 +#: netbox/circuits/filtersets.py:57 netbox/circuits/filtersets.py:224 +#: netbox/circuits/filtersets.py:304 netbox/dcim/base_filtersets.py:42 +#: netbox/dcim/filtersets.py:136 netbox/dcim/filtersets.py:233 +#: netbox/dcim/filtersets.py:354 netbox/dcim/filtersets.py:485 +#: netbox/dcim/filtersets.py:1042 netbox/dcim/filtersets.py:1390 +#: netbox/dcim/filtersets.py:2047 netbox/dcim/filtersets.py:2290 +#: netbox/dcim/filtersets.py:2348 netbox/extras/filtersets.py:515 +#: netbox/ipam/filtersets.py:948 netbox/virtualization/filtersets.py:159 msgid "Site group (slug)" msgstr "Група тех. майданчиків (скорочення)" -#: netbox/circuits/filtersets.py:56 netbox/circuits/forms/bulk_edit.py:188 -#: netbox/circuits/forms/bulk_edit.py:216 -#: netbox/circuits/forms/bulk_import.py:124 -#: netbox/circuits/forms/filtersets.py:51 -#: netbox/circuits/forms/filtersets.py:171 -#: netbox/circuits/forms/filtersets.py:209 -#: netbox/circuits/forms/model_forms.py:138 -#: netbox/circuits/forms/model_forms.py:154 -#: netbox/circuits/tables/circuits.py:113 netbox/dcim/forms/bulk_edit.py:169 -#: netbox/dcim/forms/bulk_edit.py:330 netbox/dcim/forms/bulk_edit.py:683 -#: netbox/dcim/forms/bulk_edit.py:888 netbox/dcim/forms/bulk_import.py:131 -#: netbox/dcim/forms/bulk_import.py:230 netbox/dcim/forms/bulk_import.py:331 -#: netbox/dcim/forms/bulk_import.py:562 netbox/dcim/forms/bulk_import.py:1333 -#: netbox/dcim/forms/bulk_import.py:1361 netbox/dcim/forms/filtersets.py:87 -#: netbox/dcim/forms/filtersets.py:225 netbox/dcim/forms/filtersets.py:342 -#: netbox/dcim/forms/filtersets.py:439 netbox/dcim/forms/filtersets.py:753 -#: netbox/dcim/forms/filtersets.py:997 netbox/dcim/forms/filtersets.py:1021 -#: netbox/dcim/forms/filtersets.py:1111 netbox/dcim/forms/filtersets.py:1149 -#: netbox/dcim/forms/filtersets.py:1584 netbox/dcim/forms/filtersets.py:1608 -#: netbox/dcim/forms/filtersets.py:1632 netbox/dcim/forms/model_forms.py:137 -#: netbox/dcim/forms/model_forms.py:165 netbox/dcim/forms/model_forms.py:238 -#: netbox/dcim/forms/model_forms.py:463 netbox/dcim/forms/model_forms.py:723 -#: netbox/dcim/forms/object_create.py:383 netbox/dcim/tables/devices.py:153 +#: netbox/circuits/filtersets.py:62 netbox/circuits/forms/filtersets.py:59 +#: netbox/circuits/forms/filtersets.py:182 +#: netbox/circuits/forms/filtersets.py:240 +#: netbox/circuits/tables/circuits.py:129 netbox/dcim/forms/bulk_edit.py:172 +#: netbox/dcim/forms/bulk_edit.py:333 netbox/dcim/forms/bulk_edit.py:686 +#: netbox/dcim/forms/bulk_edit.py:891 netbox/dcim/forms/bulk_import.py:133 +#: netbox/dcim/forms/bulk_import.py:232 netbox/dcim/forms/bulk_import.py:333 +#: netbox/dcim/forms/bulk_import.py:567 netbox/dcim/forms/bulk_import.py:1430 +#: netbox/dcim/forms/bulk_import.py:1458 netbox/dcim/forms/filtersets.py:88 +#: netbox/dcim/forms/filtersets.py:226 netbox/dcim/forms/filtersets.py:343 +#: netbox/dcim/forms/filtersets.py:440 netbox/dcim/forms/filtersets.py:754 +#: netbox/dcim/forms/filtersets.py:998 netbox/dcim/forms/filtersets.py:1022 +#: netbox/dcim/forms/filtersets.py:1112 netbox/dcim/forms/filtersets.py:1150 +#: netbox/dcim/forms/filtersets.py:1622 netbox/dcim/forms/filtersets.py:1646 +#: netbox/dcim/forms/filtersets.py:1670 netbox/dcim/forms/model_forms.py:141 +#: netbox/dcim/forms/model_forms.py:169 netbox/dcim/forms/model_forms.py:243 +#: netbox/dcim/forms/model_forms.py:473 netbox/dcim/forms/model_forms.py:734 +#: netbox/dcim/forms/object_create.py:383 netbox/dcim/tables/devices.py:164 #: netbox/dcim/tables/power.py:26 netbox/dcim/tables/power.py:93 -#: netbox/dcim/tables/racks.py:122 netbox/dcim/tables/racks.py:207 -#: netbox/dcim/tables/sites.py:134 netbox/extras/filtersets.py:525 -#: netbox/ipam/forms/bulk_edit.py:218 netbox/ipam/forms/bulk_edit.py:285 -#: netbox/ipam/forms/bulk_edit.py:484 netbox/ipam/forms/bulk_import.py:171 -#: netbox/ipam/forms/bulk_import.py:453 netbox/ipam/forms/filtersets.py:153 -#: netbox/ipam/forms/filtersets.py:231 netbox/ipam/forms/filtersets.py:432 -#: netbox/ipam/forms/filtersets.py:489 netbox/ipam/forms/model_forms.py:205 -#: netbox/ipam/forms/model_forms.py:669 netbox/ipam/tables/ip.py:245 -#: netbox/ipam/tables/vlans.py:118 netbox/ipam/tables/vlans.py:221 -#: netbox/templates/circuits/inc/circuit_termination_fields.html:6 -#: netbox/templates/dcim/device.html:22 +#: netbox/dcim/tables/racks.py:121 netbox/dcim/tables/racks.py:206 +#: netbox/dcim/tables/sites.py:133 netbox/extras/filtersets.py:525 +#: netbox/ipam/forms/bulk_edit.py:468 netbox/ipam/forms/bulk_import.py:452 +#: netbox/ipam/forms/filtersets.py:155 netbox/ipam/forms/filtersets.py:229 +#: netbox/ipam/forms/filtersets.py:435 netbox/ipam/forms/filtersets.py:530 +#: netbox/ipam/forms/model_forms.py:679 netbox/ipam/tables/vlans.py:87 +#: netbox/ipam/tables/vlans.py:197 netbox/templates/dcim/device.html:22 #: netbox/templates/dcim/inc/cable_termination.html:8 #: netbox/templates/dcim/inc/cable_termination.html:33 #: netbox/templates/dcim/location.html:37 #: netbox/templates/dcim/powerpanel.html:22 netbox/templates/dcim/rack.html:20 #: netbox/templates/dcim/rackreservation.html:28 -#: netbox/templates/dcim/site.html:28 netbox/templates/ipam/prefix.html:56 -#: netbox/templates/ipam/vlan.html:23 netbox/templates/ipam/vlan_edit.html:40 -#: netbox/templates/virtualization/cluster.html:42 +#: netbox/templates/dcim/site.html:28 netbox/templates/ipam/vlan.html:23 +#: netbox/templates/ipam/vlan_edit.html:48 #: netbox/templates/virtualization/virtualmachine.html:95 -#: netbox/virtualization/forms/bulk_edit.py:91 -#: netbox/virtualization/forms/bulk_edit.py:109 -#: netbox/virtualization/forms/bulk_edit.py:124 -#: netbox/virtualization/forms/bulk_import.py:59 -#: netbox/virtualization/forms/bulk_import.py:85 -#: netbox/virtualization/forms/filtersets.py:79 -#: netbox/virtualization/forms/filtersets.py:148 -#: netbox/virtualization/forms/model_forms.py:71 +#: netbox/virtualization/forms/bulk_edit.py:106 +#: netbox/virtualization/forms/bulk_import.py:60 +#: netbox/virtualization/forms/bulk_import.py:91 +#: netbox/virtualization/forms/filtersets.py:74 +#: netbox/virtualization/forms/filtersets.py:153 #: netbox/virtualization/forms/model_forms.py:104 -#: netbox/virtualization/forms/model_forms.py:171 -#: netbox/virtualization/tables/clusters.py:77 -#: netbox/virtualization/tables/virtualmachines.py:63 -#: netbox/vpn/forms/filtersets.py:266 netbox/wireless/forms/model_forms.py:76 -#: netbox/wireless/forms/model_forms.py:118 +#: netbox/virtualization/forms/model_forms.py:178 +#: netbox/virtualization/tables/virtualmachines.py:33 +#: netbox/vpn/forms/filtersets.py:266 netbox/wireless/forms/filtersets.py:88 +#: netbox/wireless/forms/model_forms.py:79 +#: netbox/wireless/forms/model_forms.py:121 msgid "Site" msgstr "Тех. майданчик" -#: netbox/circuits/filtersets.py:62 netbox/circuits/filtersets.py:229 -#: netbox/circuits/filtersets.py:274 netbox/dcim/filtersets.py:242 -#: netbox/dcim/filtersets.py:363 netbox/dcim/filtersets.py:458 -#: netbox/extras/filtersets.py:531 netbox/ipam/filtersets.py:240 -#: netbox/ipam/filtersets.py:371 netbox/ipam/filtersets.py:991 -#: netbox/virtualization/filtersets.py:75 -#: netbox/virtualization/filtersets.py:203 netbox/vpn/filtersets.py:363 +#: netbox/circuits/filtersets.py:68 netbox/circuits/filtersets.py:235 +#: netbox/circuits/filtersets.py:315 netbox/dcim/base_filtersets.py:53 +#: netbox/dcim/filtersets.py:243 netbox/dcim/filtersets.py:364 +#: netbox/dcim/filtersets.py:459 netbox/extras/filtersets.py:531 +#: netbox/ipam/filtersets.py:243 netbox/ipam/filtersets.py:958 +#: netbox/virtualization/filtersets.py:169 netbox/vpn/filtersets.py:363 msgid "Site (slug)" msgstr "Тех. майданчик (скорочення)" -#: netbox/circuits/filtersets.py:67 +#: netbox/circuits/filtersets.py:73 msgid "ASN (ID)" msgstr "ASN (ідентифікатор)" -#: netbox/circuits/filtersets.py:73 netbox/circuits/forms/filtersets.py:31 -#: netbox/ipam/forms/model_forms.py:159 netbox/ipam/models/asns.py:108 -#: netbox/ipam/models/asns.py:125 netbox/ipam/tables/asn.py:41 +#: netbox/circuits/filtersets.py:79 netbox/circuits/forms/filtersets.py:39 +#: netbox/ipam/forms/model_forms.py:165 netbox/ipam/models/asns.py:105 +#: netbox/ipam/models/asns.py:122 netbox/ipam/tables/asn.py:41 #: netbox/templates/ipam/asn.html:20 msgid "ASN" msgstr "ASN" -#: netbox/circuits/filtersets.py:95 netbox/circuits/filtersets.py:122 -#: netbox/circuits/filtersets.py:156 netbox/circuits/filtersets.py:283 -#: netbox/circuits/filtersets.py:325 netbox/ipam/filtersets.py:245 +#: netbox/circuits/filtersets.py:101 netbox/circuits/filtersets.py:128 +#: netbox/circuits/filtersets.py:162 netbox/circuits/filtersets.py:338 +#: netbox/circuits/filtersets.py:406 netbox/circuits/filtersets.py:482 +#: netbox/circuits/filtersets.py:550 netbox/ipam/filtersets.py:248 msgid "Provider (ID)" msgstr "Провайдер (ідентифікатор)" -#: netbox/circuits/filtersets.py:101 netbox/circuits/filtersets.py:128 -#: netbox/circuits/filtersets.py:162 netbox/circuits/filtersets.py:289 -#: netbox/circuits/filtersets.py:331 netbox/ipam/filtersets.py:251 +#: netbox/circuits/filtersets.py:107 netbox/circuits/filtersets.py:134 +#: netbox/circuits/filtersets.py:168 netbox/circuits/filtersets.py:344 +#: netbox/circuits/filtersets.py:488 netbox/circuits/filtersets.py:556 +#: netbox/ipam/filtersets.py:254 msgid "Provider (slug)" msgstr "Провайдер (скорочення)" -#: netbox/circuits/filtersets.py:167 +#: netbox/circuits/filtersets.py:173 netbox/circuits/filtersets.py:493 +#: netbox/circuits/filtersets.py:561 msgid "Provider account (ID)" msgstr "Обліковий запис провайдера (ідентифікатор)" -#: netbox/circuits/filtersets.py:173 +#: netbox/circuits/filtersets.py:179 netbox/circuits/filtersets.py:499 +#: netbox/circuits/filtersets.py:567 msgid "Provider account (account)" msgstr "Обліковий запис провайдера (обліковий запис)" -#: netbox/circuits/filtersets.py:178 +#: netbox/circuits/filtersets.py:184 netbox/circuits/filtersets.py:503 +#: netbox/circuits/filtersets.py:572 msgid "Provider network (ID)" msgstr "Мережа провайдера (ідентифікатор)" -#: netbox/circuits/filtersets.py:182 +#: netbox/circuits/filtersets.py:188 msgid "Circuit type (ID)" msgstr "Тип каналу зв'язку (ідентифікатор)" -#: netbox/circuits/filtersets.py:188 +#: netbox/circuits/filtersets.py:194 msgid "Circuit type (slug)" msgstr "Тип каналу зв'язку (скорочення)" -#: netbox/circuits/filtersets.py:223 netbox/circuits/filtersets.py:268 -#: netbox/dcim/filtersets.py:236 netbox/dcim/filtersets.py:357 -#: netbox/dcim/filtersets.py:452 netbox/dcim/filtersets.py:1045 -#: netbox/dcim/filtersets.py:1393 netbox/dcim/filtersets.py:1928 -#: netbox/dcim/filtersets.py:2170 netbox/dcim/filtersets.py:2229 -#: netbox/ipam/filtersets.py:234 netbox/ipam/filtersets.py:365 -#: netbox/ipam/filtersets.py:985 netbox/virtualization/filtersets.py:69 -#: netbox/virtualization/filtersets.py:197 netbox/vpn/filtersets.py:368 +#: netbox/circuits/filtersets.py:229 netbox/circuits/filtersets.py:309 +#: netbox/dcim/base_filtersets.py:47 netbox/dcim/filtersets.py:237 +#: netbox/dcim/filtersets.py:358 netbox/dcim/filtersets.py:453 +#: netbox/dcim/filtersets.py:1046 netbox/dcim/filtersets.py:1395 +#: netbox/dcim/filtersets.py:2052 netbox/dcim/filtersets.py:2294 +#: netbox/dcim/filtersets.py:2353 netbox/ipam/filtersets.py:237 +#: netbox/ipam/filtersets.py:952 netbox/virtualization/filtersets.py:163 +#: netbox/vpn/filtersets.py:368 msgid "Site (ID)" msgstr "Тех. майданчик (ідентифікатор)" -#: netbox/circuits/filtersets.py:233 netbox/circuits/filtersets.py:237 +#: netbox/circuits/filtersets.py:239 netbox/circuits/filtersets.py:321 +#: netbox/dcim/base_filtersets.py:59 netbox/dcim/filtersets.py:259 +#: netbox/dcim/filtersets.py:370 netbox/dcim/filtersets.py:491 +#: netbox/dcim/filtersets.py:1058 netbox/dcim/filtersets.py:1406 +#: netbox/dcim/filtersets.py:2306 +msgid "Location (ID)" +msgstr "Місцезнаходження (ідентифікатор)" + +#: netbox/circuits/filtersets.py:244 netbox/circuits/filtersets.py:248 msgid "Termination A (ID)" msgstr "Припинення A (ідентифікатор)" -#: netbox/circuits/filtersets.py:260 netbox/circuits/filtersets.py:320 -#: netbox/core/filtersets.py:77 netbox/core/filtersets.py:136 -#: netbox/core/filtersets.py:173 netbox/dcim/filtersets.py:751 -#: netbox/dcim/filtersets.py:1362 netbox/dcim/filtersets.py:2277 -#: netbox/extras/filtersets.py:41 netbox/extras/filtersets.py:63 -#: netbox/extras/filtersets.py:92 netbox/extras/filtersets.py:132 -#: netbox/extras/filtersets.py:181 netbox/extras/filtersets.py:209 -#: netbox/extras/filtersets.py:239 netbox/extras/filtersets.py:276 -#: netbox/extras/filtersets.py:348 netbox/extras/filtersets.py:391 -#: netbox/extras/filtersets.py:438 netbox/extras/filtersets.py:498 -#: netbox/extras/filtersets.py:657 netbox/extras/filtersets.py:703 -#: netbox/ipam/forms/model_forms.py:482 netbox/netbox/filtersets.py:282 -#: netbox/netbox/forms/__init__.py:22 netbox/netbox/forms/base.py:167 +#: netbox/circuits/filtersets.py:273 netbox/circuits/filtersets.py:375 +#: netbox/circuits/filtersets.py:537 netbox/core/filtersets.py:77 +#: netbox/core/filtersets.py:136 netbox/core/filtersets.py:173 +#: netbox/dcim/filtersets.py:752 netbox/dcim/filtersets.py:1364 +#: netbox/dcim/filtersets.py:2401 netbox/extras/filtersets.py:41 +#: netbox/extras/filtersets.py:63 netbox/extras/filtersets.py:92 +#: netbox/extras/filtersets.py:132 netbox/extras/filtersets.py:181 +#: netbox/extras/filtersets.py:209 netbox/extras/filtersets.py:239 +#: netbox/extras/filtersets.py:276 netbox/extras/filtersets.py:348 +#: netbox/extras/filtersets.py:391 netbox/extras/filtersets.py:438 +#: netbox/extras/filtersets.py:498 netbox/extras/filtersets.py:657 +#: netbox/extras/filtersets.py:703 netbox/ipam/forms/model_forms.py:492 +#: netbox/netbox/filtersets.py:286 netbox/netbox/forms/__init__.py:22 +#: netbox/netbox/forms/base.py:167 #: netbox/templates/htmx/object_selector.html:28 #: netbox/templates/inc/filter_list.html:46 #: netbox/templates/ipam/ipaddress_assign.html:29 @@ -346,97 +362,150 @@ msgstr "Припинення A (ідентифікатор)" msgid "Search" msgstr "Пошук" -#: netbox/circuits/filtersets.py:264 netbox/circuits/forms/bulk_edit.py:172 -#: netbox/circuits/forms/bulk_edit.py:246 -#: netbox/circuits/forms/bulk_import.py:115 -#: netbox/circuits/forms/filtersets.py:198 -#: netbox/circuits/forms/filtersets.py:214 -#: netbox/circuits/forms/filtersets.py:260 -#: netbox/circuits/forms/model_forms.py:111 -#: netbox/circuits/forms/model_forms.py:133 -#: netbox/circuits/forms/model_forms.py:199 -#: netbox/circuits/tables/circuits.py:104 -#: netbox/circuits/tables/circuits.py:164 netbox/dcim/forms/connections.py:73 +#: netbox/circuits/filtersets.py:277 netbox/circuits/forms/bulk_edit.py:195 +#: netbox/circuits/forms/bulk_edit.py:284 +#: netbox/circuits/forms/bulk_import.py:128 +#: netbox/circuits/forms/filtersets.py:223 +#: netbox/circuits/forms/filtersets.py:250 +#: netbox/circuits/forms/filtersets.py:296 +#: netbox/circuits/forms/model_forms.py:139 +#: netbox/circuits/forms/model_forms.py:162 +#: netbox/circuits/forms/model_forms.py:262 +#: netbox/circuits/tables/circuits.py:108 +#: netbox/circuits/tables/circuits.py:203 netbox/dcim/forms/connections.py:73 #: netbox/templates/circuits/circuit.html:15 -#: netbox/templates/circuits/circuitgroupassignment.html:26 +#: netbox/templates/circuits/circuitgroupassignment.html:30 #: netbox/templates/circuits/circuittermination.html:19 #: netbox/templates/dcim/inc/cable_termination.html:55 #: netbox/templates/dcim/trace/circuit.html:4 msgid "Circuit" msgstr "Канал зв'язку" -#: netbox/circuits/filtersets.py:278 +#: netbox/circuits/filtersets.py:328 netbox/dcim/base_filtersets.py:66 +#: netbox/dcim/filtersets.py:266 netbox/dcim/filtersets.py:377 +#: netbox/dcim/filtersets.py:498 netbox/dcim/filtersets.py:1412 +#: netbox/extras/filtersets.py:542 +msgid "Location (slug)" +msgstr "Місцезнаходження (скорочення)" + +#: netbox/circuits/filtersets.py:333 msgid "ProviderNetwork (ID)" msgstr "Мережа провайдера (ідентифікатор)" -#: netbox/circuits/filtersets.py:335 -msgid "Circuit (ID)" -msgstr "Канал зв'язку (ідентифікатор)" - -#: netbox/circuits/filtersets.py:341 +#: netbox/circuits/filtersets.py:381 msgid "Circuit (CID)" msgstr "Канал зв'язку (ідентифікатор вмісту)" -#: netbox/circuits/filtersets.py:345 +#: netbox/circuits/filtersets.py:386 +msgid "Circuit (ID)" +msgstr "Канал зв'язку (ідентифікатор)" + +#: netbox/circuits/filtersets.py:391 +msgid "Virtual circuit (CID)" +msgstr "Віртуальна схема (CID)" + +#: netbox/circuits/filtersets.py:396 netbox/dcim/filtersets.py:1849 +msgid "Virtual circuit (ID)" +msgstr "Віртуальна схема (ID)" + +#: netbox/circuits/filtersets.py:401 +msgid "Provider (name)" +msgstr "Провайдер (ім'я)" + +#: netbox/circuits/filtersets.py:410 msgid "Circuit group (ID)" msgstr "Група каналів зв'язку (ідентифікатор)" -#: netbox/circuits/filtersets.py:351 +#: netbox/circuits/filtersets.py:416 msgid "Circuit group (slug)" msgstr "Група каналів зв'язку (скорочення)" -#: netbox/circuits/forms/bulk_edit.py:30 -#: netbox/circuits/forms/filtersets.py:56 -#: netbox/circuits/forms/model_forms.py:29 -#: netbox/circuits/tables/providers.py:33 netbox/dcim/forms/bulk_edit.py:129 -#: netbox/dcim/forms/filtersets.py:195 netbox/dcim/forms/model_forms.py:123 -#: netbox/dcim/tables/sites.py:94 netbox/ipam/models/asns.py:126 -#: netbox/ipam/tables/asn.py:27 netbox/ipam/views.py:213 -#: netbox/netbox/navigation/menu.py:172 netbox/netbox/navigation/menu.py:175 +#: netbox/circuits/filtersets.py:507 +msgid "Virtual circuit type (ID)" +msgstr "Тип віртуальної схеми (ID)" + +#: netbox/circuits/filtersets.py:513 +msgid "Virtual circuit type (slug)" +msgstr "Тип віртуальної схеми (слимак)" + +#: netbox/circuits/filtersets.py:541 netbox/circuits/forms/bulk_edit.py:355 +#: netbox/circuits/forms/bulk_import.py:249 +#: netbox/circuits/forms/filtersets.py:372 +#: netbox/circuits/forms/filtersets.py:378 +#: netbox/circuits/forms/model_forms.py:343 +#: netbox/circuits/forms/model_forms.py:358 +#: netbox/circuits/tables/virtual_circuits.py:88 +#: netbox/templates/circuits/virtualcircuit.html:20 +#: netbox/templates/circuits/virtualcircuittermination.html:38 +msgid "Virtual circuit" +msgstr "Віртуальна схема" + +#: netbox/circuits/filtersets.py:577 netbox/dcim/filtersets.py:1269 +#: netbox/dcim/filtersets.py:1634 netbox/ipam/filtersets.py:601 +#: netbox/vpn/filtersets.py:102 netbox/vpn/filtersets.py:401 +msgid "Interface (ID)" +msgstr "Інтерфейс (ідентифікатор)" + +#: netbox/circuits/forms/bulk_edit.py:42 +#: netbox/circuits/forms/filtersets.py:64 +#: netbox/circuits/forms/model_forms.py:42 +#: netbox/circuits/tables/providers.py:32 netbox/dcim/forms/bulk_edit.py:132 +#: netbox/dcim/forms/filtersets.py:196 netbox/dcim/forms/model_forms.py:127 +#: netbox/dcim/tables/sites.py:94 netbox/ipam/models/asns.py:123 +#: netbox/ipam/tables/asn.py:27 netbox/ipam/views.py:230 +#: netbox/netbox/navigation/menu.py:178 netbox/netbox/navigation/menu.py:181 #: netbox/templates/circuits/provider.html:23 msgid "ASNs" msgstr "ASNs" -#: netbox/circuits/forms/bulk_edit.py:34 netbox/circuits/forms/bulk_edit.py:56 -#: netbox/circuits/forms/bulk_edit.py:83 -#: netbox/circuits/forms/bulk_edit.py:104 -#: netbox/circuits/forms/bulk_edit.py:164 -#: netbox/circuits/forms/bulk_edit.py:183 -#: netbox/circuits/forms/bulk_edit.py:228 netbox/core/forms/bulk_edit.py:28 -#: netbox/dcim/forms/bulk_create.py:35 netbox/dcim/forms/bulk_edit.py:74 -#: netbox/dcim/forms/bulk_edit.py:93 netbox/dcim/forms/bulk_edit.py:152 -#: netbox/dcim/forms/bulk_edit.py:193 netbox/dcim/forms/bulk_edit.py:211 -#: netbox/dcim/forms/bulk_edit.py:289 netbox/dcim/forms/bulk_edit.py:438 -#: netbox/dcim/forms/bulk_edit.py:472 netbox/dcim/forms/bulk_edit.py:487 -#: netbox/dcim/forms/bulk_edit.py:546 netbox/dcim/forms/bulk_edit.py:590 -#: netbox/dcim/forms/bulk_edit.py:624 netbox/dcim/forms/bulk_edit.py:648 -#: netbox/dcim/forms/bulk_edit.py:721 netbox/dcim/forms/bulk_edit.py:782 -#: netbox/dcim/forms/bulk_edit.py:834 netbox/dcim/forms/bulk_edit.py:857 -#: netbox/dcim/forms/bulk_edit.py:905 netbox/dcim/forms/bulk_edit.py:975 -#: netbox/dcim/forms/bulk_edit.py:1028 netbox/dcim/forms/bulk_edit.py:1063 -#: netbox/dcim/forms/bulk_edit.py:1103 netbox/dcim/forms/bulk_edit.py:1147 -#: netbox/dcim/forms/bulk_edit.py:1192 netbox/dcim/forms/bulk_edit.py:1219 -#: netbox/dcim/forms/bulk_edit.py:1237 netbox/dcim/forms/bulk_edit.py:1255 -#: netbox/dcim/forms/bulk_edit.py:1273 netbox/dcim/forms/bulk_edit.py:1725 -#: netbox/extras/forms/bulk_edit.py:39 netbox/extras/forms/bulk_edit.py:149 -#: netbox/extras/forms/bulk_edit.py:178 netbox/extras/forms/bulk_edit.py:208 -#: netbox/extras/forms/bulk_edit.py:256 netbox/extras/forms/bulk_edit.py:274 -#: netbox/extras/forms/bulk_edit.py:298 netbox/extras/forms/bulk_edit.py:312 -#: netbox/extras/forms/bulk_edit.py:339 netbox/extras/tables/tables.py:79 -#: netbox/ipam/forms/bulk_edit.py:53 netbox/ipam/forms/bulk_edit.py:73 -#: netbox/ipam/forms/bulk_edit.py:93 netbox/ipam/forms/bulk_edit.py:117 -#: netbox/ipam/forms/bulk_edit.py:146 netbox/ipam/forms/bulk_edit.py:175 -#: netbox/ipam/forms/bulk_edit.py:194 netbox/ipam/forms/bulk_edit.py:276 -#: netbox/ipam/forms/bulk_edit.py:321 netbox/ipam/forms/bulk_edit.py:369 -#: netbox/ipam/forms/bulk_edit.py:412 netbox/ipam/forms/bulk_edit.py:428 -#: netbox/ipam/forms/bulk_edit.py:516 netbox/ipam/forms/bulk_edit.py:547 +#: netbox/circuits/forms/bulk_edit.py:46 netbox/circuits/forms/bulk_edit.py:68 +#: netbox/circuits/forms/bulk_edit.py:95 +#: netbox/circuits/forms/bulk_edit.py:116 +#: netbox/circuits/forms/bulk_edit.py:187 +#: netbox/circuits/forms/bulk_edit.py:207 +#: netbox/circuits/forms/bulk_edit.py:266 +#: netbox/circuits/forms/bulk_edit.py:307 +#: netbox/circuits/forms/bulk_edit.py:347 +#: netbox/circuits/forms/bulk_edit.py:371 netbox/core/forms/bulk_edit.py:28 +#: netbox/dcim/forms/bulk_create.py:35 netbox/dcim/forms/bulk_edit.py:77 +#: netbox/dcim/forms/bulk_edit.py:96 netbox/dcim/forms/bulk_edit.py:155 +#: netbox/dcim/forms/bulk_edit.py:196 netbox/dcim/forms/bulk_edit.py:214 +#: netbox/dcim/forms/bulk_edit.py:292 netbox/dcim/forms/bulk_edit.py:441 +#: netbox/dcim/forms/bulk_edit.py:475 netbox/dcim/forms/bulk_edit.py:490 +#: netbox/dcim/forms/bulk_edit.py:549 netbox/dcim/forms/bulk_edit.py:593 +#: netbox/dcim/forms/bulk_edit.py:627 netbox/dcim/forms/bulk_edit.py:651 +#: netbox/dcim/forms/bulk_edit.py:724 netbox/dcim/forms/bulk_edit.py:785 +#: netbox/dcim/forms/bulk_edit.py:837 netbox/dcim/forms/bulk_edit.py:860 +#: netbox/dcim/forms/bulk_edit.py:908 netbox/dcim/forms/bulk_edit.py:978 +#: netbox/dcim/forms/bulk_edit.py:1031 netbox/dcim/forms/bulk_edit.py:1066 +#: netbox/dcim/forms/bulk_edit.py:1106 netbox/dcim/forms/bulk_edit.py:1150 +#: netbox/dcim/forms/bulk_edit.py:1195 netbox/dcim/forms/bulk_edit.py:1222 +#: netbox/dcim/forms/bulk_edit.py:1240 netbox/dcim/forms/bulk_edit.py:1258 +#: netbox/dcim/forms/bulk_edit.py:1276 netbox/dcim/forms/bulk_edit.py:1746 +#: netbox/dcim/forms/bulk_edit.py:1787 netbox/extras/forms/bulk_edit.py:39 +#: netbox/extras/forms/bulk_edit.py:149 netbox/extras/forms/bulk_edit.py:178 +#: netbox/extras/forms/bulk_edit.py:208 netbox/extras/forms/bulk_edit.py:256 +#: netbox/extras/forms/bulk_edit.py:274 netbox/extras/forms/bulk_edit.py:298 +#: netbox/extras/forms/bulk_edit.py:312 netbox/extras/forms/bulk_edit.py:339 +#: netbox/extras/tables/tables.py:79 netbox/ipam/forms/bulk_edit.py:56 +#: netbox/ipam/forms/bulk_edit.py:76 netbox/ipam/forms/bulk_edit.py:96 +#: netbox/ipam/forms/bulk_edit.py:120 netbox/ipam/forms/bulk_edit.py:149 +#: netbox/ipam/forms/bulk_edit.py:178 netbox/ipam/forms/bulk_edit.py:197 +#: netbox/ipam/forms/bulk_edit.py:260 netbox/ipam/forms/bulk_edit.py:305 +#: netbox/ipam/forms/bulk_edit.py:353 netbox/ipam/forms/bulk_edit.py:396 +#: netbox/ipam/forms/bulk_edit.py:412 netbox/ipam/forms/bulk_edit.py:500 +#: netbox/ipam/forms/bulk_edit.py:532 netbox/ipam/forms/bulk_edit.py:575 +#: netbox/ipam/tables/vlans.py:240 netbox/ipam/tables/vlans.py:267 #: netbox/templates/account/token.html:35 -#: netbox/templates/circuits/circuit.html:59 +#: netbox/templates/circuits/circuit.html:69 #: netbox/templates/circuits/circuitgroup.html:32 #: netbox/templates/circuits/circuittype.html:26 -#: netbox/templates/circuits/inc/circuit_termination_fields.html:88 +#: netbox/templates/circuits/inc/circuit_termination_fields.html:83 #: netbox/templates/circuits/provider.html:33 #: netbox/templates/circuits/providernetwork.html:32 +#: netbox/templates/circuits/virtualcircuit.html:56 +#: netbox/templates/circuits/virtualcircuittermination.html:68 +#: netbox/templates/circuits/virtualcircuittype.html:26 #: netbox/templates/core/datasource.html:54 #: netbox/templates/core/plugin.html:80 netbox/templates/dcim/cable.html:36 #: netbox/templates/dcim/consoleport.html:44 @@ -447,13 +516,14 @@ msgstr "ASNs" #: netbox/templates/dcim/devicetype.html:33 #: netbox/templates/dcim/frontport.html:58 #: netbox/templates/dcim/interface.html:69 -#: netbox/templates/dcim/inventoryitem.html:60 +#: netbox/templates/dcim/inventoryitem.html:64 #: netbox/templates/dcim/inventoryitemrole.html:22 #: netbox/templates/dcim/location.html:33 +#: netbox/templates/dcim/macaddress.html:21 #: netbox/templates/dcim/manufacturer.html:40 #: netbox/templates/dcim/module.html:73 #: netbox/templates/dcim/modulebay.html:42 -#: netbox/templates/dcim/moduletype.html:37 +#: netbox/templates/dcim/moduletype.html:39 #: netbox/templates/dcim/platform.html:33 #: netbox/templates/dcim/powerfeed.html:40 #: netbox/templates/dcim/poweroutlet.html:40 @@ -480,12 +550,14 @@ msgstr "ASNs" #: netbox/templates/ipam/asnrange.html:38 #: netbox/templates/ipam/fhrpgroup.html:34 #: netbox/templates/ipam/ipaddress.html:55 -#: netbox/templates/ipam/iprange.html:67 netbox/templates/ipam/prefix.html:81 +#: netbox/templates/ipam/iprange.html:67 netbox/templates/ipam/prefix.html:77 #: netbox/templates/ipam/rir.html:26 netbox/templates/ipam/role.html:26 #: netbox/templates/ipam/routetarget.html:21 #: netbox/templates/ipam/service.html:50 #: netbox/templates/ipam/servicetemplate.html:27 #: netbox/templates/ipam/vlan.html:62 netbox/templates/ipam/vlangroup.html:34 +#: netbox/templates/ipam/vlantranslationpolicy.html:18 +#: netbox/templates/ipam/vlantranslationrule.html:26 #: netbox/templates/ipam/vrf.html:33 netbox/templates/tenancy/contact.html:67 #: netbox/templates/tenancy/contactgroup.html:25 #: netbox/templates/tenancy/contactrole.html:22 @@ -499,7 +571,7 @@ msgstr "ASNs" #: netbox/templates/virtualization/clustertype.html:26 #: netbox/templates/virtualization/virtualdisk.html:39 #: netbox/templates/virtualization/virtualmachine.html:31 -#: netbox/templates/virtualization/vminterface.html:51 +#: netbox/templates/virtualization/vminterface.html:47 #: netbox/templates/vpn/ikepolicy.html:17 #: netbox/templates/vpn/ikeproposal.html:17 #: netbox/templates/vpn/ipsecpolicy.html:17 @@ -509,119 +581,142 @@ msgstr "ASNs" #: netbox/templates/vpn/ipsecproposal.html:17 #: netbox/templates/vpn/l2vpn.html:26 netbox/templates/vpn/tunnel.html:33 #: netbox/templates/vpn/tunnelgroup.html:30 -#: netbox/templates/wireless/wirelesslan.html:26 +#: netbox/templates/wireless/wirelesslan.html:34 #: netbox/templates/wireless/wirelesslangroup.html:33 #: netbox/templates/wireless/wirelesslink.html:34 #: netbox/tenancy/forms/bulk_edit.py:32 netbox/tenancy/forms/bulk_edit.py:80 #: netbox/tenancy/forms/bulk_edit.py:122 netbox/users/forms/bulk_edit.py:64 #: netbox/users/forms/bulk_edit.py:82 netbox/users/forms/bulk_edit.py:112 -#: netbox/virtualization/forms/bulk_edit.py:32 -#: netbox/virtualization/forms/bulk_edit.py:46 -#: netbox/virtualization/forms/bulk_edit.py:100 -#: netbox/virtualization/forms/bulk_edit.py:177 -#: netbox/virtualization/forms/bulk_edit.py:228 -#: netbox/virtualization/forms/bulk_edit.py:337 +#: netbox/virtualization/forms/bulk_edit.py:33 +#: netbox/virtualization/forms/bulk_edit.py:47 +#: netbox/virtualization/forms/bulk_edit.py:82 +#: netbox/virtualization/forms/bulk_edit.py:159 +#: netbox/virtualization/forms/bulk_edit.py:210 +#: netbox/virtualization/forms/bulk_edit.py:327 #: netbox/vpn/forms/bulk_edit.py:28 netbox/vpn/forms/bulk_edit.py:64 #: netbox/vpn/forms/bulk_edit.py:121 netbox/vpn/forms/bulk_edit.py:155 #: netbox/vpn/forms/bulk_edit.py:190 netbox/vpn/forms/bulk_edit.py:215 #: netbox/vpn/forms/bulk_edit.py:247 netbox/vpn/forms/bulk_edit.py:274 -#: netbox/wireless/forms/bulk_edit.py:29 netbox/wireless/forms/bulk_edit.py:82 -#: netbox/wireless/forms/bulk_edit.py:140 +#: netbox/wireless/forms/bulk_edit.py:31 netbox/wireless/forms/bulk_edit.py:84 +#: netbox/wireless/forms/bulk_edit.py:143 msgid "Description" msgstr "Опис" -#: netbox/circuits/forms/bulk_edit.py:51 netbox/circuits/forms/bulk_edit.py:73 -#: netbox/circuits/forms/bulk_edit.py:123 -#: netbox/circuits/forms/bulk_import.py:36 -#: netbox/circuits/forms/bulk_import.py:51 -#: netbox/circuits/forms/bulk_import.py:74 -#: netbox/circuits/forms/filtersets.py:70 -#: netbox/circuits/forms/filtersets.py:88 -#: netbox/circuits/forms/filtersets.py:116 -#: netbox/circuits/forms/filtersets.py:131 -#: netbox/circuits/forms/filtersets.py:199 -#: netbox/circuits/forms/filtersets.py:232 -#: netbox/circuits/forms/filtersets.py:255 -#: netbox/circuits/forms/model_forms.py:47 -#: netbox/circuits/forms/model_forms.py:61 -#: netbox/circuits/forms/model_forms.py:93 -#: netbox/circuits/tables/circuits.py:58 -#: netbox/circuits/tables/circuits.py:108 -#: netbox/circuits/tables/circuits.py:160 -#: netbox/circuits/tables/providers.py:72 -#: netbox/circuits/tables/providers.py:103 +#: netbox/circuits/forms/bulk_edit.py:63 netbox/circuits/forms/bulk_edit.py:85 +#: netbox/circuits/forms/bulk_edit.py:135 +#: netbox/circuits/forms/bulk_import.py:43 +#: netbox/circuits/forms/bulk_import.py:58 +#: netbox/circuits/forms/bulk_import.py:81 +#: netbox/circuits/forms/filtersets.py:78 +#: netbox/circuits/forms/filtersets.py:96 +#: netbox/circuits/forms/filtersets.py:124 +#: netbox/circuits/forms/filtersets.py:142 +#: netbox/circuits/forms/filtersets.py:224 +#: netbox/circuits/forms/filtersets.py:268 +#: netbox/circuits/forms/filtersets.py:291 +#: netbox/circuits/forms/filtersets.py:329 +#: netbox/circuits/forms/filtersets.py:337 +#: netbox/circuits/forms/filtersets.py:373 +#: netbox/circuits/forms/filtersets.py:396 +#: netbox/circuits/forms/model_forms.py:60 +#: netbox/circuits/forms/model_forms.py:76 +#: netbox/circuits/forms/model_forms.py:110 +#: netbox/circuits/tables/circuits.py:57 +#: netbox/circuits/tables/circuits.py:112 +#: netbox/circuits/tables/circuits.py:196 +#: netbox/circuits/tables/providers.py:70 +#: netbox/circuits/tables/providers.py:101 +#: netbox/circuits/tables/virtual_circuits.py:46 +#: netbox/circuits/tables/virtual_circuits.py:93 #: netbox/templates/circuits/circuit.html:18 +#: netbox/templates/circuits/circuitgroupassignment.html:26 #: netbox/templates/circuits/circuittermination.html:25 #: netbox/templates/circuits/provider.html:20 #: netbox/templates/circuits/provideraccount.html:20 #: netbox/templates/circuits/providernetwork.html:20 +#: netbox/templates/circuits/virtualcircuit.html:23 +#: netbox/templates/circuits/virtualcircuittermination.html:26 #: netbox/templates/dcim/inc/cable_termination.html:51 +#: netbox/templates/dcim/interface.html:166 msgid "Provider" msgstr "Провайдер" -#: netbox/circuits/forms/bulk_edit.py:80 -#: netbox/circuits/forms/filtersets.py:91 +#: netbox/circuits/forms/bulk_edit.py:92 +#: netbox/circuits/forms/filtersets.py:99 #: netbox/templates/circuits/providernetwork.html:28 msgid "Service ID" msgstr "Ідентифікатор служби" -#: netbox/circuits/forms/bulk_edit.py:100 -#: netbox/circuits/forms/filtersets.py:107 netbox/dcim/forms/bulk_edit.py:207 -#: netbox/dcim/forms/bulk_edit.py:610 netbox/dcim/forms/bulk_edit.py:819 -#: netbox/dcim/forms/bulk_edit.py:1188 netbox/dcim/forms/bulk_edit.py:1215 -#: netbox/dcim/forms/bulk_edit.py:1721 netbox/dcim/forms/filtersets.py:1064 -#: netbox/dcim/forms/filtersets.py:1455 netbox/dcim/forms/filtersets.py:1479 -#: netbox/dcim/tables/devices.py:704 netbox/dcim/tables/devices.py:761 -#: netbox/dcim/tables/devices.py:1003 netbox/dcim/tables/devicetypes.py:249 -#: netbox/dcim/tables/devicetypes.py:264 netbox/dcim/tables/racks.py:33 -#: netbox/extras/forms/bulk_edit.py:270 netbox/extras/tables/tables.py:443 +#: netbox/circuits/forms/bulk_edit.py:112 +#: netbox/circuits/forms/bulk_edit.py:303 +#: netbox/circuits/forms/filtersets.py:115 +#: netbox/circuits/forms/filtersets.py:320 netbox/dcim/forms/bulk_edit.py:210 +#: netbox/dcim/forms/bulk_edit.py:613 netbox/dcim/forms/bulk_edit.py:822 +#: netbox/dcim/forms/bulk_edit.py:1191 netbox/dcim/forms/bulk_edit.py:1218 +#: netbox/dcim/forms/bulk_edit.py:1742 netbox/dcim/forms/filtersets.py:1065 +#: netbox/dcim/forms/filtersets.py:1323 netbox/dcim/forms/filtersets.py:1460 +#: netbox/dcim/forms/filtersets.py:1484 netbox/dcim/tables/devices.py:738 +#: netbox/dcim/tables/devices.py:794 netbox/dcim/tables/devices.py:1035 +#: netbox/dcim/tables/devicetypes.py:256 netbox/dcim/tables/devicetypes.py:271 +#: netbox/dcim/tables/racks.py:33 netbox/extras/forms/bulk_edit.py:270 +#: netbox/extras/tables/tables.py:443 #: netbox/templates/circuits/circuittype.html:30 +#: netbox/templates/circuits/virtualcircuittype.html:30 #: netbox/templates/dcim/cable.html:40 #: netbox/templates/dcim/devicerole.html:34 #: netbox/templates/dcim/frontport.html:40 #: netbox/templates/dcim/inventoryitemrole.html:26 +#: netbox/templates/dcim/poweroutlet.html:44 #: netbox/templates/dcim/rackrole.html:30 #: netbox/templates/dcim/rearport.html:40 netbox/templates/extras/tag.html:26 msgid "Color" msgstr "Колір" -#: netbox/circuits/forms/bulk_edit.py:118 -#: netbox/circuits/forms/bulk_import.py:87 -#: netbox/circuits/forms/filtersets.py:126 netbox/core/forms/bulk_edit.py:18 -#: netbox/core/forms/filtersets.py:33 netbox/core/tables/change_logging.py:32 -#: netbox/core/tables/data.py:20 netbox/core/tables/jobs.py:18 -#: netbox/dcim/forms/bulk_edit.py:797 netbox/dcim/forms/bulk_edit.py:936 -#: netbox/dcim/forms/bulk_edit.py:1004 netbox/dcim/forms/bulk_edit.py:1023 -#: netbox/dcim/forms/bulk_edit.py:1046 netbox/dcim/forms/bulk_edit.py:1088 -#: netbox/dcim/forms/bulk_edit.py:1132 netbox/dcim/forms/bulk_edit.py:1183 -#: netbox/dcim/forms/bulk_edit.py:1210 netbox/dcim/forms/bulk_import.py:188 -#: netbox/dcim/forms/bulk_import.py:267 netbox/dcim/forms/bulk_import.py:730 -#: netbox/dcim/forms/bulk_import.py:756 netbox/dcim/forms/bulk_import.py:782 -#: netbox/dcim/forms/bulk_import.py:802 netbox/dcim/forms/bulk_import.py:885 -#: netbox/dcim/forms/bulk_import.py:979 netbox/dcim/forms/bulk_import.py:1021 -#: netbox/dcim/forms/bulk_import.py:1235 netbox/dcim/forms/bulk_import.py:1398 -#: netbox/dcim/forms/filtersets.py:955 netbox/dcim/forms/filtersets.py:1054 -#: netbox/dcim/forms/filtersets.py:1175 netbox/dcim/forms/filtersets.py:1247 -#: netbox/dcim/forms/filtersets.py:1272 netbox/dcim/forms/filtersets.py:1296 -#: netbox/dcim/forms/filtersets.py:1316 netbox/dcim/forms/filtersets.py:1353 -#: netbox/dcim/forms/filtersets.py:1450 netbox/dcim/forms/filtersets.py:1474 -#: netbox/dcim/forms/model_forms.py:703 netbox/dcim/forms/model_forms.py:709 -#: netbox/dcim/forms/object_import.py:84 +#: netbox/circuits/forms/bulk_edit.py:130 +#: netbox/circuits/forms/bulk_edit.py:331 +#: netbox/circuits/forms/bulk_import.py:94 +#: netbox/circuits/forms/bulk_import.py:221 +#: netbox/circuits/forms/filtersets.py:137 +#: netbox/circuits/forms/filtersets.py:358 +#: netbox/circuits/tables/circuits.py:65 +#: netbox/circuits/tables/circuits.py:200 +#: netbox/circuits/tables/virtual_circuits.py:58 +#: netbox/core/forms/bulk_edit.py:18 netbox/core/forms/filtersets.py:33 +#: netbox/core/tables/change_logging.py:32 netbox/core/tables/data.py:20 +#: netbox/core/tables/jobs.py:18 netbox/dcim/forms/bulk_edit.py:800 +#: netbox/dcim/forms/bulk_edit.py:939 netbox/dcim/forms/bulk_edit.py:1007 +#: netbox/dcim/forms/bulk_edit.py:1026 netbox/dcim/forms/bulk_edit.py:1049 +#: netbox/dcim/forms/bulk_edit.py:1091 netbox/dcim/forms/bulk_edit.py:1135 +#: netbox/dcim/forms/bulk_edit.py:1186 netbox/dcim/forms/bulk_edit.py:1213 +#: netbox/dcim/forms/bulk_import.py:190 netbox/dcim/forms/bulk_import.py:269 +#: netbox/dcim/forms/bulk_import.py:735 netbox/dcim/forms/bulk_import.py:761 +#: netbox/dcim/forms/bulk_import.py:787 netbox/dcim/forms/bulk_import.py:807 +#: netbox/dcim/forms/bulk_import.py:893 netbox/dcim/forms/bulk_import.py:987 +#: netbox/dcim/forms/bulk_import.py:1029 netbox/dcim/forms/bulk_import.py:1332 +#: netbox/dcim/forms/bulk_import.py:1495 netbox/dcim/forms/filtersets.py:956 +#: netbox/dcim/forms/filtersets.py:1055 netbox/dcim/forms/filtersets.py:1176 +#: netbox/dcim/forms/filtersets.py:1248 netbox/dcim/forms/filtersets.py:1273 +#: netbox/dcim/forms/filtersets.py:1297 netbox/dcim/forms/filtersets.py:1317 +#: netbox/dcim/forms/filtersets.py:1358 netbox/dcim/forms/filtersets.py:1455 +#: netbox/dcim/forms/filtersets.py:1479 netbox/dcim/forms/model_forms.py:714 +#: netbox/dcim/forms/model_forms.py:720 netbox/dcim/forms/object_import.py:84 #: netbox/dcim/forms/object_import.py:113 -#: netbox/dcim/forms/object_import.py:145 netbox/dcim/tables/devices.py:178 -#: netbox/dcim/tables/devices.py:814 netbox/dcim/tables/power.py:77 -#: netbox/dcim/tables/racks.py:138 netbox/extras/forms/bulk_import.py:42 +#: netbox/dcim/forms/object_import.py:146 netbox/dcim/tables/devices.py:189 +#: netbox/dcim/tables/devices.py:846 netbox/dcim/tables/power.py:77 +#: netbox/dcim/tables/racks.py:137 netbox/extras/forms/bulk_import.py:42 #: netbox/extras/tables/tables.py:405 netbox/extras/tables/tables.py:465 -#: netbox/netbox/tables/tables.py:240 +#: netbox/netbox/tables/tables.py:243 #: netbox/templates/circuits/circuit.html:30 +#: netbox/templates/circuits/virtualcircuit.html:39 +#: netbox/templates/circuits/virtualcircuittermination.html:64 #: netbox/templates/core/datasource.html:38 #: netbox/templates/dcim/cable.html:15 #: netbox/templates/dcim/consoleport.html:36 #: netbox/templates/dcim/consoleserverport.html:36 #: netbox/templates/dcim/frontport.html:36 #: netbox/templates/dcim/interface.html:46 -#: netbox/templates/dcim/interface.html:169 -#: netbox/templates/dcim/interface.html:311 +#: netbox/templates/dcim/interface.html:226 +#: netbox/templates/dcim/interface.html:368 #: netbox/templates/dcim/powerfeed.html:32 #: netbox/templates/dcim/poweroutlet.html:36 #: netbox/templates/dcim/powerport.html:36 @@ -631,65 +726,78 @@ msgstr "Колір" #: netbox/templates/vpn/l2vpn.html:22 #: netbox/templates/wireless/inc/authentication_attrs.html:8 #: netbox/templates/wireless/inc/wirelesslink_interface.html:14 -#: netbox/virtualization/forms/bulk_edit.py:60 -#: netbox/virtualization/forms/bulk_import.py:41 +#: netbox/virtualization/forms/bulk_edit.py:61 +#: netbox/virtualization/forms/bulk_import.py:42 #: netbox/virtualization/forms/filtersets.py:54 -#: netbox/virtualization/forms/model_forms.py:62 +#: netbox/virtualization/forms/model_forms.py:65 #: netbox/virtualization/tables/clusters.py:66 #: netbox/vpn/forms/bulk_edit.py:264 netbox/vpn/forms/bulk_import.py:264 -#: netbox/vpn/forms/filtersets.py:217 netbox/vpn/forms/model_forms.py:84 -#: netbox/vpn/forms/model_forms.py:119 netbox/vpn/forms/model_forms.py:231 +#: netbox/vpn/forms/filtersets.py:217 netbox/vpn/forms/model_forms.py:85 +#: netbox/vpn/forms/model_forms.py:120 netbox/vpn/forms/model_forms.py:232 msgid "Type" msgstr "Тип" -#: netbox/circuits/forms/bulk_edit.py:128 -#: netbox/circuits/forms/bulk_import.py:80 -#: netbox/circuits/forms/filtersets.py:139 -#: netbox/circuits/forms/model_forms.py:98 +#: netbox/circuits/forms/bulk_edit.py:140 +#: netbox/circuits/forms/bulk_edit.py:326 +#: netbox/circuits/forms/bulk_import.py:87 +#: netbox/circuits/forms/bulk_import.py:214 +#: netbox/circuits/forms/filtersets.py:150 +#: netbox/circuits/forms/filtersets.py:345 +#: netbox/circuits/forms/model_forms.py:116 +#: netbox/circuits/forms/model_forms.py:330 +#: netbox/templates/circuits/virtualcircuit.html:31 +#: netbox/templates/circuits/virtualcircuittermination.html:34 msgid "Provider account" msgstr "Обліковий запис постачальника" -#: netbox/circuits/forms/bulk_edit.py:136 -#: netbox/circuits/forms/bulk_import.py:93 -#: netbox/circuits/forms/filtersets.py:150 netbox/core/forms/filtersets.py:38 -#: netbox/core/forms/filtersets.py:79 netbox/core/tables/data.py:23 +#: netbox/circuits/forms/bulk_edit.py:148 +#: netbox/circuits/forms/bulk_edit.py:336 +#: netbox/circuits/forms/bulk_import.py:100 +#: netbox/circuits/forms/bulk_import.py:227 +#: netbox/circuits/forms/filtersets.py:161 +#: netbox/circuits/forms/filtersets.py:361 netbox/core/forms/filtersets.py:38 +#: netbox/core/forms/filtersets.py:80 netbox/core/tables/data.py:23 #: netbox/core/tables/jobs.py:26 netbox/core/tables/tasks.py:88 -#: netbox/dcim/forms/bulk_edit.py:107 netbox/dcim/forms/bulk_edit.py:182 -#: netbox/dcim/forms/bulk_edit.py:352 netbox/dcim/forms/bulk_edit.py:706 -#: netbox/dcim/forms/bulk_edit.py:771 netbox/dcim/forms/bulk_edit.py:803 -#: netbox/dcim/forms/bulk_edit.py:930 netbox/dcim/forms/bulk_edit.py:1744 -#: netbox/dcim/forms/bulk_import.py:88 netbox/dcim/forms/bulk_import.py:147 -#: netbox/dcim/forms/bulk_import.py:248 netbox/dcim/forms/bulk_import.py:527 -#: netbox/dcim/forms/bulk_import.py:681 netbox/dcim/forms/bulk_import.py:1229 -#: netbox/dcim/forms/bulk_import.py:1393 netbox/dcim/forms/bulk_import.py:1457 -#: netbox/dcim/forms/filtersets.py:178 netbox/dcim/forms/filtersets.py:237 -#: netbox/dcim/forms/filtersets.py:359 netbox/dcim/forms/filtersets.py:799 -#: netbox/dcim/forms/filtersets.py:924 netbox/dcim/forms/filtersets.py:958 -#: netbox/dcim/forms/filtersets.py:1059 netbox/dcim/forms/filtersets.py:1170 -#: netbox/dcim/tables/devices.py:140 netbox/dcim/tables/devices.py:817 -#: netbox/dcim/tables/devices.py:1063 netbox/dcim/tables/modules.py:70 -#: netbox/dcim/tables/power.py:74 netbox/dcim/tables/racks.py:126 -#: netbox/dcim/tables/sites.py:82 netbox/dcim/tables/sites.py:138 -#: netbox/ipam/forms/bulk_edit.py:256 netbox/ipam/forms/bulk_edit.py:306 -#: netbox/ipam/forms/bulk_edit.py:354 netbox/ipam/forms/bulk_edit.py:506 -#: netbox/ipam/forms/bulk_import.py:192 netbox/ipam/forms/bulk_import.py:257 -#: netbox/ipam/forms/bulk_import.py:293 netbox/ipam/forms/bulk_import.py:474 -#: netbox/ipam/forms/filtersets.py:210 netbox/ipam/forms/filtersets.py:281 -#: netbox/ipam/forms/filtersets.py:355 netbox/ipam/forms/filtersets.py:501 -#: netbox/ipam/forms/model_forms.py:501 netbox/ipam/tables/ip.py:237 -#: netbox/ipam/tables/ip.py:312 netbox/ipam/tables/ip.py:363 -#: netbox/ipam/tables/ip.py:426 netbox/ipam/tables/ip.py:453 -#: netbox/ipam/tables/vlans.py:126 netbox/ipam/tables/vlans.py:232 +#: netbox/dcim/forms/bulk_edit.py:110 netbox/dcim/forms/bulk_edit.py:185 +#: netbox/dcim/forms/bulk_edit.py:355 netbox/dcim/forms/bulk_edit.py:709 +#: netbox/dcim/forms/bulk_edit.py:774 netbox/dcim/forms/bulk_edit.py:806 +#: netbox/dcim/forms/bulk_edit.py:933 netbox/dcim/forms/bulk_edit.py:1723 +#: netbox/dcim/forms/bulk_edit.py:1765 netbox/dcim/forms/bulk_import.py:90 +#: netbox/dcim/forms/bulk_import.py:149 netbox/dcim/forms/bulk_import.py:250 +#: netbox/dcim/forms/bulk_import.py:532 netbox/dcim/forms/bulk_import.py:686 +#: netbox/dcim/forms/bulk_import.py:1137 netbox/dcim/forms/bulk_import.py:1326 +#: netbox/dcim/forms/bulk_import.py:1490 netbox/dcim/forms/bulk_import.py:1554 +#: netbox/dcim/forms/filtersets.py:179 netbox/dcim/forms/filtersets.py:238 +#: netbox/dcim/forms/filtersets.py:360 netbox/dcim/forms/filtersets.py:800 +#: netbox/dcim/forms/filtersets.py:925 netbox/dcim/forms/filtersets.py:959 +#: netbox/dcim/forms/filtersets.py:1060 netbox/dcim/forms/filtersets.py:1171 +#: netbox/dcim/forms/filtersets.py:1562 netbox/dcim/tables/devices.py:151 +#: netbox/dcim/tables/devices.py:849 netbox/dcim/tables/devices.py:983 +#: netbox/dcim/tables/devices.py:1095 netbox/dcim/tables/modules.py:70 +#: netbox/dcim/tables/power.py:74 netbox/dcim/tables/racks.py:125 +#: netbox/dcim/tables/sites.py:82 netbox/dcim/tables/sites.py:137 +#: netbox/ipam/forms/bulk_edit.py:240 netbox/ipam/forms/bulk_edit.py:290 +#: netbox/ipam/forms/bulk_edit.py:338 netbox/ipam/forms/bulk_edit.py:490 +#: netbox/ipam/forms/bulk_import.py:188 netbox/ipam/forms/bulk_import.py:256 +#: netbox/ipam/forms/bulk_import.py:292 netbox/ipam/forms/bulk_import.py:473 +#: netbox/ipam/forms/filtersets.py:212 netbox/ipam/forms/filtersets.py:284 +#: netbox/ipam/forms/filtersets.py:358 netbox/ipam/forms/filtersets.py:542 +#: netbox/ipam/forms/model_forms.py:511 netbox/ipam/tables/ip.py:183 +#: netbox/ipam/tables/ip.py:264 netbox/ipam/tables/ip.py:315 +#: netbox/ipam/tables/ip.py:378 netbox/ipam/tables/ip.py:405 +#: netbox/ipam/tables/vlans.py:95 netbox/ipam/tables/vlans.py:208 #: netbox/templates/circuits/circuit.html:34 +#: netbox/templates/circuits/virtualcircuit.html:43 #: netbox/templates/core/datasource.html:46 netbox/templates/core/job.html:48 #: netbox/templates/core/rq_task.html:81 netbox/templates/core/system.html:18 #: netbox/templates/dcim/cable.html:19 netbox/templates/dcim/device.html:178 +#: netbox/templates/dcim/inventoryitem.html:36 #: netbox/templates/dcim/location.html:45 netbox/templates/dcim/module.html:69 #: netbox/templates/dcim/powerfeed.html:36 netbox/templates/dcim/rack.html:41 #: netbox/templates/dcim/site.html:43 #: netbox/templates/extras/script_list.html:48 #: netbox/templates/ipam/ipaddress.html:37 -#: netbox/templates/ipam/iprange.html:54 netbox/templates/ipam/prefix.html:73 +#: netbox/templates/ipam/iprange.html:54 netbox/templates/ipam/prefix.html:69 #: netbox/templates/ipam/vlan.html:48 #: netbox/templates/virtualization/cluster.html:21 #: netbox/templates/virtualization/virtualmachine.html:19 @@ -697,63 +805,67 @@ msgstr "Обліковий запис постачальника" #: netbox/templates/wireless/wirelesslan.html:22 #: netbox/templates/wireless/wirelesslink.html:17 #: netbox/users/forms/filtersets.py:32 netbox/users/forms/model_forms.py:194 -#: netbox/virtualization/forms/bulk_edit.py:70 -#: netbox/virtualization/forms/bulk_edit.py:118 -#: netbox/virtualization/forms/bulk_import.py:54 -#: netbox/virtualization/forms/bulk_import.py:80 -#: netbox/virtualization/forms/filtersets.py:62 -#: netbox/virtualization/forms/filtersets.py:160 +#: netbox/virtualization/forms/bulk_edit.py:71 +#: netbox/virtualization/forms/bulk_edit.py:100 +#: netbox/virtualization/forms/bulk_import.py:55 +#: netbox/virtualization/forms/bulk_import.py:86 +#: netbox/virtualization/forms/filtersets.py:82 +#: netbox/virtualization/forms/filtersets.py:165 #: netbox/virtualization/tables/clusters.py:74 -#: netbox/virtualization/tables/virtualmachines.py:60 +#: netbox/virtualization/tables/virtualmachines.py:30 #: netbox/vpn/forms/bulk_edit.py:39 netbox/vpn/forms/bulk_import.py:37 #: netbox/vpn/forms/filtersets.py:47 netbox/vpn/tables/tunnels.py:48 -#: netbox/wireless/forms/bulk_edit.py:43 -#: netbox/wireless/forms/bulk_edit.py:105 -#: netbox/wireless/forms/bulk_import.py:43 -#: netbox/wireless/forms/bulk_import.py:84 -#: netbox/wireless/forms/filtersets.py:49 -#: netbox/wireless/forms/filtersets.py:83 +#: netbox/wireless/forms/bulk_edit.py:45 +#: netbox/wireless/forms/bulk_edit.py:108 +#: netbox/wireless/forms/bulk_import.py:45 +#: netbox/wireless/forms/bulk_import.py:89 +#: netbox/wireless/forms/filtersets.py:52 +#: netbox/wireless/forms/filtersets.py:111 #: netbox/wireless/tables/wirelesslan.py:52 -#: netbox/wireless/tables/wirelesslink.py:20 +#: netbox/wireless/tables/wirelesslink.py:19 msgid "Status" msgstr "Статус" -#: netbox/circuits/forms/bulk_edit.py:142 -#: netbox/circuits/forms/bulk_edit.py:233 -#: netbox/circuits/forms/bulk_import.py:98 -#: netbox/circuits/forms/bulk_import.py:158 -#: netbox/circuits/forms/filtersets.py:119 -#: netbox/circuits/forms/filtersets.py:241 netbox/dcim/forms/bulk_edit.py:123 -#: netbox/dcim/forms/bulk_edit.py:188 netbox/dcim/forms/bulk_edit.py:347 -#: netbox/dcim/forms/bulk_edit.py:467 netbox/dcim/forms/bulk_edit.py:696 -#: netbox/dcim/forms/bulk_edit.py:809 netbox/dcim/forms/bulk_edit.py:1749 -#: netbox/dcim/forms/bulk_import.py:107 netbox/dcim/forms/bulk_import.py:152 -#: netbox/dcim/forms/bulk_import.py:241 netbox/dcim/forms/bulk_import.py:356 -#: netbox/dcim/forms/bulk_import.py:501 netbox/dcim/forms/bulk_import.py:1241 -#: netbox/dcim/forms/bulk_import.py:1450 netbox/dcim/forms/filtersets.py:173 -#: netbox/dcim/forms/filtersets.py:205 netbox/dcim/forms/filtersets.py:323 -#: netbox/dcim/forms/filtersets.py:399 netbox/dcim/forms/filtersets.py:420 -#: netbox/dcim/forms/filtersets.py:722 netbox/dcim/forms/filtersets.py:916 -#: netbox/dcim/forms/filtersets.py:978 netbox/dcim/forms/filtersets.py:1008 -#: netbox/dcim/forms/filtersets.py:1130 netbox/dcim/tables/power.py:88 -#: netbox/extras/filtersets.py:612 netbox/extras/forms/filtersets.py:323 -#: netbox/extras/forms/filtersets.py:396 netbox/ipam/forms/bulk_edit.py:43 -#: netbox/ipam/forms/bulk_edit.py:68 netbox/ipam/forms/bulk_edit.py:112 -#: netbox/ipam/forms/bulk_edit.py:141 netbox/ipam/forms/bulk_edit.py:166 -#: netbox/ipam/forms/bulk_edit.py:251 netbox/ipam/forms/bulk_edit.py:301 -#: netbox/ipam/forms/bulk_edit.py:349 netbox/ipam/forms/bulk_edit.py:501 -#: netbox/ipam/forms/bulk_import.py:38 netbox/ipam/forms/bulk_import.py:67 -#: netbox/ipam/forms/bulk_import.py:95 netbox/ipam/forms/bulk_import.py:115 -#: netbox/ipam/forms/bulk_import.py:135 netbox/ipam/forms/bulk_import.py:164 -#: netbox/ipam/forms/bulk_import.py:250 netbox/ipam/forms/bulk_import.py:286 -#: netbox/ipam/forms/bulk_import.py:467 netbox/ipam/forms/filtersets.py:48 -#: netbox/ipam/forms/filtersets.py:68 netbox/ipam/forms/filtersets.py:100 -#: netbox/ipam/forms/filtersets.py:120 netbox/ipam/forms/filtersets.py:143 -#: netbox/ipam/forms/filtersets.py:174 netbox/ipam/forms/filtersets.py:267 -#: netbox/ipam/forms/filtersets.py:310 netbox/ipam/forms/filtersets.py:469 -#: netbox/ipam/tables/ip.py:456 netbox/ipam/tables/vlans.py:229 -#: netbox/templates/circuits/circuit.html:38 +#: netbox/circuits/forms/bulk_edit.py:154 +#: netbox/circuits/forms/bulk_edit.py:271 +#: netbox/circuits/forms/bulk_edit.py:342 +#: netbox/circuits/forms/bulk_import.py:111 +#: netbox/circuits/forms/bulk_import.py:170 +#: netbox/circuits/forms/bulk_import.py:232 +#: netbox/circuits/forms/filtersets.py:130 +#: netbox/circuits/forms/filtersets.py:277 +#: netbox/circuits/forms/filtersets.py:331 netbox/dcim/forms/bulk_edit.py:126 +#: netbox/dcim/forms/bulk_edit.py:191 netbox/dcim/forms/bulk_edit.py:350 +#: netbox/dcim/forms/bulk_edit.py:470 netbox/dcim/forms/bulk_edit.py:699 +#: netbox/dcim/forms/bulk_edit.py:812 netbox/dcim/forms/bulk_edit.py:1770 +#: netbox/dcim/forms/bulk_import.py:109 netbox/dcim/forms/bulk_import.py:154 +#: netbox/dcim/forms/bulk_import.py:243 netbox/dcim/forms/bulk_import.py:358 +#: netbox/dcim/forms/bulk_import.py:506 netbox/dcim/forms/bulk_import.py:1338 +#: netbox/dcim/forms/bulk_import.py:1547 netbox/dcim/forms/filtersets.py:174 +#: netbox/dcim/forms/filtersets.py:206 netbox/dcim/forms/filtersets.py:324 +#: netbox/dcim/forms/filtersets.py:400 netbox/dcim/forms/filtersets.py:421 +#: netbox/dcim/forms/filtersets.py:723 netbox/dcim/forms/filtersets.py:917 +#: netbox/dcim/forms/filtersets.py:979 netbox/dcim/forms/filtersets.py:1009 +#: netbox/dcim/forms/filtersets.py:1131 netbox/dcim/tables/power.py:88 +#: netbox/extras/filtersets.py:612 netbox/extras/forms/filtersets.py:330 +#: netbox/extras/forms/filtersets.py:403 netbox/ipam/forms/bulk_edit.py:46 +#: netbox/ipam/forms/bulk_edit.py:71 netbox/ipam/forms/bulk_edit.py:115 +#: netbox/ipam/forms/bulk_edit.py:144 netbox/ipam/forms/bulk_edit.py:169 +#: netbox/ipam/forms/bulk_edit.py:235 netbox/ipam/forms/bulk_edit.py:285 +#: netbox/ipam/forms/bulk_edit.py:333 netbox/ipam/forms/bulk_edit.py:485 +#: netbox/ipam/forms/bulk_import.py:41 netbox/ipam/forms/bulk_import.py:70 +#: netbox/ipam/forms/bulk_import.py:98 netbox/ipam/forms/bulk_import.py:118 +#: netbox/ipam/forms/bulk_import.py:138 netbox/ipam/forms/bulk_import.py:167 +#: netbox/ipam/forms/bulk_import.py:249 netbox/ipam/forms/bulk_import.py:285 +#: netbox/ipam/forms/bulk_import.py:466 netbox/ipam/forms/filtersets.py:50 +#: netbox/ipam/forms/filtersets.py:70 netbox/ipam/forms/filtersets.py:102 +#: netbox/ipam/forms/filtersets.py:122 netbox/ipam/forms/filtersets.py:145 +#: netbox/ipam/forms/filtersets.py:176 netbox/ipam/forms/filtersets.py:270 +#: netbox/ipam/forms/filtersets.py:313 netbox/ipam/forms/filtersets.py:510 +#: netbox/ipam/tables/ip.py:408 netbox/ipam/tables/vlans.py:205 +#: netbox/templates/circuits/circuit.html:48 #: netbox/templates/circuits/circuitgroup.html:36 +#: netbox/templates/circuits/virtualcircuit.html:47 #: netbox/templates/dcim/cable.html:23 netbox/templates/dcim/device.html:79 #: netbox/templates/dcim/location.html:49 #: netbox/templates/dcim/powerfeed.html:44 netbox/templates/dcim/rack.html:32 @@ -770,114 +882,181 @@ msgstr "Статус" #: netbox/templates/virtualization/cluster.html:33 #: netbox/templates/virtualization/virtualmachine.html:39 #: netbox/templates/vpn/l2vpn.html:30 netbox/templates/vpn/tunnel.html:49 -#: netbox/templates/wireless/wirelesslan.html:34 +#: netbox/templates/wireless/wirelesslan.html:42 #: netbox/templates/wireless/wirelesslink.html:25 -#: netbox/tenancy/forms/forms.py:25 netbox/tenancy/forms/forms.py:48 -#: netbox/tenancy/forms/model_forms.py:52 netbox/tenancy/tables/columns.py:64 -#: netbox/virtualization/forms/bulk_edit.py:76 -#: netbox/virtualization/forms/bulk_edit.py:155 -#: netbox/virtualization/forms/bulk_import.py:66 -#: netbox/virtualization/forms/bulk_import.py:115 +#: netbox/tenancy/forms/forms.py:25 netbox/tenancy/forms/forms.py:49 +#: netbox/tenancy/forms/model_forms.py:52 netbox/tenancy/tables/columns.py:49 +#: netbox/virtualization/forms/bulk_edit.py:77 +#: netbox/virtualization/forms/bulk_edit.py:137 +#: netbox/virtualization/forms/bulk_import.py:67 +#: netbox/virtualization/forms/bulk_import.py:121 #: netbox/virtualization/forms/filtersets.py:47 -#: netbox/virtualization/forms/filtersets.py:105 +#: netbox/virtualization/forms/filtersets.py:110 #: netbox/vpn/forms/bulk_edit.py:59 netbox/vpn/forms/bulk_edit.py:269 #: netbox/vpn/forms/bulk_import.py:59 netbox/vpn/forms/bulk_import.py:258 -#: netbox/vpn/forms/filtersets.py:214 netbox/wireless/forms/bulk_edit.py:63 -#: netbox/wireless/forms/bulk_edit.py:110 -#: netbox/wireless/forms/bulk_import.py:55 -#: netbox/wireless/forms/bulk_import.py:97 -#: netbox/wireless/forms/filtersets.py:35 -#: netbox/wireless/forms/filtersets.py:75 +#: netbox/vpn/forms/filtersets.py:214 netbox/wireless/forms/bulk_edit.py:65 +#: netbox/wireless/forms/bulk_edit.py:113 +#: netbox/wireless/forms/bulk_import.py:57 +#: netbox/wireless/forms/bulk_import.py:102 +#: netbox/wireless/forms/filtersets.py:38 +#: netbox/wireless/forms/filtersets.py:103 msgid "Tenant" msgstr "Орендар" -#: netbox/circuits/forms/bulk_edit.py:147 -#: netbox/circuits/forms/filtersets.py:174 +#: netbox/circuits/forms/bulk_edit.py:159 +#: netbox/circuits/forms/filtersets.py:190 msgid "Install date" msgstr "Дата встановлення" -#: netbox/circuits/forms/bulk_edit.py:152 -#: netbox/circuits/forms/filtersets.py:179 +#: netbox/circuits/forms/bulk_edit.py:164 +#: netbox/circuits/forms/filtersets.py:195 msgid "Termination date" msgstr "Дата припинення дії" -#: netbox/circuits/forms/bulk_edit.py:158 -#: netbox/circuits/forms/filtersets.py:186 +#: netbox/circuits/forms/bulk_edit.py:170 +#: netbox/circuits/forms/filtersets.py:202 msgid "Commit rate (Kbps)" msgstr "Гарантована мінімальна швидкість (Кбіт/с)" -#: netbox/circuits/forms/bulk_edit.py:173 -#: netbox/circuits/forms/model_forms.py:112 +#: netbox/circuits/forms/bulk_edit.py:176 +#: netbox/circuits/forms/filtersets.py:208 +#: netbox/circuits/forms/model_forms.py:136 +#: netbox/templates/circuits/circuit.html:38 +#: netbox/templates/wireless/wirelesslink.html:38 +#: netbox/wireless/forms/bulk_edit.py:132 +#: netbox/wireless/forms/filtersets.py:130 +#: netbox/wireless/forms/model_forms.py:168 +msgid "Distance" +msgstr "Відстань" + +#: netbox/circuits/forms/bulk_edit.py:181 +#: netbox/circuits/forms/bulk_import.py:105 +#: netbox/circuits/forms/bulk_import.py:108 +#: netbox/circuits/forms/filtersets.py:212 +#: netbox/wireless/forms/bulk_edit.py:137 +#: netbox/wireless/forms/bulk_import.py:121 +#: netbox/wireless/forms/bulk_import.py:124 +#: netbox/wireless/forms/filtersets.py:134 +msgid "Distance unit" +msgstr "Одиниця відстані" + +#: netbox/circuits/forms/bulk_edit.py:196 +#: netbox/circuits/forms/model_forms.py:141 msgid "Service Parameters" msgstr "Параметри обслуговування" -#: netbox/circuits/forms/bulk_edit.py:174 -#: netbox/circuits/forms/model_forms.py:113 -#: netbox/circuits/forms/model_forms.py:183 -#: netbox/dcim/forms/model_forms.py:139 netbox/dcim/forms/model_forms.py:181 -#: netbox/dcim/forms/model_forms.py:266 netbox/dcim/forms/model_forms.py:323 -#: netbox/dcim/forms/model_forms.py:768 netbox/dcim/forms/model_forms.py:1699 -#: netbox/ipam/forms/model_forms.py:64 netbox/ipam/forms/model_forms.py:81 -#: netbox/ipam/forms/model_forms.py:115 netbox/ipam/forms/model_forms.py:136 -#: netbox/ipam/forms/model_forms.py:160 netbox/ipam/forms/model_forms.py:232 -#: netbox/ipam/forms/model_forms.py:261 netbox/ipam/forms/model_forms.py:320 +#: netbox/circuits/forms/bulk_edit.py:197 +#: netbox/circuits/forms/filtersets.py:73 +#: netbox/circuits/forms/filtersets.py:91 +#: netbox/circuits/forms/filtersets.py:110 +#: netbox/circuits/forms/filtersets.py:127 +#: netbox/circuits/forms/filtersets.py:315 +#: netbox/circuits/forms/filtersets.py:330 netbox/core/forms/filtersets.py:68 +#: netbox/core/forms/filtersets.py:136 netbox/dcim/forms/bulk_edit.py:846 +#: netbox/dcim/forms/filtersets.py:173 netbox/dcim/forms/filtersets.py:205 +#: netbox/dcim/forms/filtersets.py:916 netbox/dcim/forms/filtersets.py:1008 +#: netbox/dcim/forms/filtersets.py:1132 netbox/dcim/forms/filtersets.py:1240 +#: netbox/dcim/forms/filtersets.py:1264 netbox/dcim/forms/filtersets.py:1289 +#: netbox/dcim/forms/filtersets.py:1308 netbox/dcim/forms/filtersets.py:1332 +#: netbox/dcim/forms/filtersets.py:1446 netbox/dcim/forms/filtersets.py:1470 +#: netbox/dcim/forms/filtersets.py:1494 netbox/dcim/forms/filtersets.py:1512 +#: netbox/dcim/forms/filtersets.py:1528 netbox/extras/forms/bulk_edit.py:90 +#: netbox/extras/forms/filtersets.py:45 netbox/extras/forms/filtersets.py:137 +#: netbox/extras/forms/filtersets.py:169 netbox/extras/forms/filtersets.py:210 +#: netbox/extras/forms/filtersets.py:227 netbox/extras/forms/filtersets.py:258 +#: netbox/extras/forms/filtersets.py:282 netbox/extras/forms/filtersets.py:449 +#: netbox/ipam/forms/filtersets.py:101 netbox/ipam/forms/filtersets.py:269 +#: netbox/ipam/forms/filtersets.py:310 netbox/ipam/forms/filtersets.py:385 +#: netbox/ipam/forms/filtersets.py:470 netbox/ipam/forms/filtersets.py:483 +#: netbox/ipam/forms/filtersets.py:508 netbox/ipam/forms/filtersets.py:579 +#: netbox/ipam/forms/filtersets.py:597 netbox/netbox/tables/tables.py:259 +#: netbox/virtualization/forms/filtersets.py:45 +#: netbox/virtualization/forms/filtersets.py:108 +#: netbox/virtualization/forms/filtersets.py:203 +#: netbox/virtualization/forms/filtersets.py:248 +#: netbox/vpn/forms/filtersets.py:213 netbox/wireless/forms/bulk_edit.py:153 +#: netbox/wireless/forms/filtersets.py:36 +#: netbox/wireless/forms/filtersets.py:102 +msgid "Attributes" +msgstr "Атрибути" + +#: netbox/circuits/forms/bulk_edit.py:198 +#: netbox/circuits/forms/bulk_edit.py:356 +#: netbox/circuits/forms/model_forms.py:142 +#: netbox/circuits/forms/model_forms.py:240 +#: netbox/circuits/forms/model_forms.py:345 +#: netbox/dcim/forms/model_forms.py:143 netbox/dcim/forms/model_forms.py:185 +#: netbox/dcim/forms/model_forms.py:274 netbox/dcim/forms/model_forms.py:331 +#: netbox/dcim/forms/model_forms.py:780 netbox/dcim/forms/model_forms.py:1744 +#: netbox/ipam/forms/model_forms.py:67 netbox/ipam/forms/model_forms.py:84 +#: netbox/ipam/forms/model_forms.py:119 netbox/ipam/forms/model_forms.py:141 +#: netbox/ipam/forms/model_forms.py:166 netbox/ipam/forms/model_forms.py:233 +#: netbox/ipam/forms/model_forms.py:271 netbox/ipam/forms/model_forms.py:330 #: netbox/netbox/navigation/menu.py:24 #: netbox/templates/dcim/device_edit.html:85 #: netbox/templates/dcim/htmx/cable_edit.html:72 #: netbox/templates/ipam/ipaddress_bulk_add.html:27 -#: netbox/templates/ipam/vlan_edit.html:22 +#: netbox/templates/ipam/vlan_edit.html:30 #: netbox/virtualization/forms/model_forms.py:80 -#: netbox/virtualization/forms/model_forms.py:222 +#: netbox/virtualization/forms/model_forms.py:229 #: netbox/vpn/forms/bulk_edit.py:78 netbox/vpn/forms/filtersets.py:44 -#: netbox/vpn/forms/model_forms.py:62 netbox/vpn/forms/model_forms.py:147 -#: netbox/vpn/forms/model_forms.py:411 netbox/wireless/forms/model_forms.py:54 -#: netbox/wireless/forms/model_forms.py:170 +#: netbox/vpn/forms/model_forms.py:63 netbox/vpn/forms/model_forms.py:148 +#: netbox/vpn/forms/model_forms.py:414 netbox/wireless/forms/model_forms.py:57 +#: netbox/wireless/forms/model_forms.py:173 msgid "Tenancy" msgstr "Оренда" -#: netbox/circuits/forms/bulk_edit.py:193 -#: netbox/circuits/forms/bulk_edit.py:217 -#: netbox/circuits/forms/model_forms.py:155 -#: netbox/circuits/tables/circuits.py:117 -#: netbox/templates/circuits/inc/circuit_termination_fields.html:62 -#: netbox/templates/circuits/providernetwork.html:17 -msgid "Provider Network" -msgstr "Мережа провайдера" +#: netbox/circuits/forms/bulk_edit.py:215 +#: netbox/circuits/forms/model_forms.py:170 +#: netbox/dcim/forms/bulk_import.py:1299 netbox/dcim/forms/bulk_import.py:1317 +msgid "Termination type" +msgstr "Тип кінця" -#: netbox/circuits/forms/bulk_edit.py:199 +#: netbox/circuits/forms/bulk_edit.py:218 +#: netbox/circuits/forms/bulk_import.py:133 +#: netbox/circuits/forms/filtersets.py:225 +#: netbox/circuits/forms/model_forms.py:173 +#: netbox/templates/circuits/inc/circuit_termination.html:6 +#: netbox/templates/dcim/cable.html:68 netbox/templates/dcim/cable.html:72 +#: netbox/vpn/forms/bulk_import.py:100 netbox/vpn/forms/filtersets.py:77 +msgid "Termination" +msgstr "Кінець" + +#: netbox/circuits/forms/bulk_edit.py:226 msgid "Port speed (Kbps)" msgstr "Швидкість порту (Кбіт/с)" -#: netbox/circuits/forms/bulk_edit.py:203 +#: netbox/circuits/forms/bulk_edit.py:230 msgid "Upstream speed (Kbps)" msgstr "Швидкість висхідного потоку (Кбіт/с)" -#: netbox/circuits/forms/bulk_edit.py:206 netbox/dcim/forms/bulk_edit.py:966 -#: netbox/dcim/forms/bulk_edit.py:1330 netbox/dcim/forms/bulk_edit.py:1347 -#: netbox/dcim/forms/bulk_edit.py:1364 netbox/dcim/forms/bulk_edit.py:1382 -#: netbox/dcim/forms/bulk_edit.py:1477 netbox/dcim/forms/bulk_edit.py:1637 -#: netbox/dcim/forms/bulk_edit.py:1654 +#: netbox/circuits/forms/bulk_edit.py:233 netbox/dcim/forms/bulk_edit.py:969 +#: netbox/dcim/forms/bulk_edit.py:1333 netbox/dcim/forms/bulk_edit.py:1350 +#: netbox/dcim/forms/bulk_edit.py:1367 netbox/dcim/forms/bulk_edit.py:1385 +#: netbox/dcim/forms/bulk_edit.py:1480 netbox/dcim/forms/bulk_edit.py:1652 +#: netbox/dcim/forms/bulk_edit.py:1669 msgid "Mark connected" msgstr "Позначити з'єднаним" -#: netbox/circuits/forms/bulk_edit.py:219 -#: netbox/circuits/forms/model_forms.py:157 -#: netbox/templates/circuits/inc/circuit_termination_fields.html:54 +#: netbox/circuits/forms/bulk_edit.py:243 +#: netbox/circuits/forms/model_forms.py:184 +#: netbox/templates/circuits/inc/circuit_termination_fields.html:55 #: netbox/templates/dcim/frontport.html:121 -#: netbox/templates/dcim/interface.html:193 +#: netbox/templates/dcim/interface.html:250 #: netbox/templates/dcim/rearport.html:111 msgid "Circuit Termination" msgstr "Кінець каналу зв'язку" -#: netbox/circuits/forms/bulk_edit.py:221 -#: netbox/circuits/forms/model_forms.py:159 +#: netbox/circuits/forms/bulk_edit.py:245 +#: netbox/circuits/forms/model_forms.py:186 msgid "Termination Details" msgstr "Деталі кінця" -#: netbox/circuits/forms/bulk_edit.py:251 -#: netbox/circuits/forms/filtersets.py:268 -#: netbox/circuits/tables/circuits.py:168 netbox/dcim/forms/model_forms.py:551 -#: netbox/templates/circuits/circuitgroupassignment.html:30 +#: netbox/circuits/forms/bulk_edit.py:289 +#: netbox/circuits/forms/bulk_import.py:188 +#: netbox/circuits/forms/filtersets.py:304 +#: netbox/circuits/tables/circuits.py:207 netbox/dcim/forms/model_forms.py:562 +#: netbox/templates/circuits/circuitgroupassignment.html:34 #: netbox/templates/dcim/device.html:133 #: netbox/templates/dcim/virtualchassis.html:68 #: netbox/templates/dcim/virtualchassis_edit.html:56 @@ -887,227 +1066,313 @@ msgstr "Деталі кінця" msgid "Priority" msgstr "Пріоритет" -#: netbox/circuits/forms/bulk_import.py:39 -#: netbox/circuits/forms/bulk_import.py:54 -#: netbox/circuits/forms/bulk_import.py:77 -msgid "Assigned provider" -msgstr "Призначений провайдер" - -#: netbox/circuits/forms/bulk_import.py:83 -msgid "Assigned provider account" -msgstr "Призначений обліковий запис провайдера" - -#: netbox/circuits/forms/bulk_import.py:90 -msgid "Type of circuit" -msgstr "Тип каналу зв'язку" - -#: netbox/circuits/forms/bulk_import.py:95 netbox/dcim/forms/bulk_import.py:90 -#: netbox/dcim/forms/bulk_import.py:149 netbox/dcim/forms/bulk_import.py:250 -#: netbox/dcim/forms/bulk_import.py:529 netbox/dcim/forms/bulk_import.py:683 -#: netbox/dcim/forms/bulk_import.py:1395 netbox/ipam/forms/bulk_import.py:194 -#: netbox/ipam/forms/bulk_import.py:259 netbox/ipam/forms/bulk_import.py:295 -#: netbox/ipam/forms/bulk_import.py:476 -#: netbox/virtualization/forms/bulk_import.py:56 -#: netbox/virtualization/forms/bulk_import.py:82 -#: netbox/vpn/forms/bulk_import.py:39 netbox/wireless/forms/bulk_import.py:45 -msgid "Operational status" -msgstr "Операційний стан" - -#: netbox/circuits/forms/bulk_import.py:102 -#: netbox/circuits/forms/bulk_import.py:162 -#: netbox/dcim/forms/bulk_import.py:111 netbox/dcim/forms/bulk_import.py:156 -#: netbox/dcim/forms/bulk_import.py:360 netbox/dcim/forms/bulk_import.py:505 -#: netbox/dcim/forms/bulk_import.py:1245 netbox/dcim/forms/bulk_import.py:1390 -#: netbox/dcim/forms/bulk_import.py:1454 netbox/ipam/forms/bulk_import.py:42 -#: netbox/ipam/forms/bulk_import.py:71 netbox/ipam/forms/bulk_import.py:99 -#: netbox/ipam/forms/bulk_import.py:119 netbox/ipam/forms/bulk_import.py:139 -#: netbox/ipam/forms/bulk_import.py:168 netbox/ipam/forms/bulk_import.py:254 -#: netbox/ipam/forms/bulk_import.py:290 netbox/ipam/forms/bulk_import.py:471 -#: netbox/virtualization/forms/bulk_import.py:70 -#: netbox/virtualization/forms/bulk_import.py:119 -#: netbox/vpn/forms/bulk_import.py:63 netbox/wireless/forms/bulk_import.py:59 -#: netbox/wireless/forms/bulk_import.py:101 -msgid "Assigned tenant" -msgstr "Призначений орендар" - -#: netbox/circuits/forms/bulk_import.py:120 -#: netbox/templates/circuits/inc/circuit_termination.html:6 -#: netbox/templates/circuits/inc/circuit_termination_fields.html:15 -#: netbox/templates/dcim/cable.html:68 netbox/templates/dcim/cable.html:72 -#: netbox/vpn/forms/bulk_import.py:100 netbox/vpn/forms/filtersets.py:77 -msgid "Termination" -msgstr "Кінець" - -#: netbox/circuits/forms/bulk_import.py:130 -#: netbox/circuits/forms/filtersets.py:147 -#: netbox/circuits/forms/filtersets.py:227 -#: netbox/circuits/forms/model_forms.py:144 +#: netbox/circuits/forms/bulk_edit.py:321 +#: netbox/circuits/forms/bulk_import.py:208 +#: netbox/circuits/forms/filtersets.py:158 +#: netbox/circuits/forms/filtersets.py:263 +#: netbox/circuits/forms/filtersets.py:353 +#: netbox/circuits/forms/filtersets.py:391 +#: netbox/circuits/forms/model_forms.py:325 +#: netbox/circuits/tables/virtual_circuits.py:51 +#: netbox/circuits/tables/virtual_circuits.py:99 msgid "Provider network" msgstr "Мережа провайдера" -#: netbox/circuits/forms/filtersets.py:30 -#: netbox/circuits/forms/filtersets.py:118 -#: netbox/circuits/forms/filtersets.py:200 netbox/dcim/forms/bulk_edit.py:339 -#: netbox/dcim/forms/bulk_edit.py:447 netbox/dcim/forms/bulk_edit.py:688 -#: netbox/dcim/forms/bulk_edit.py:743 netbox/dcim/forms/bulk_edit.py:897 -#: netbox/dcim/forms/bulk_import.py:235 netbox/dcim/forms/bulk_import.py:337 -#: netbox/dcim/forms/bulk_import.py:568 netbox/dcim/forms/bulk_import.py:1339 -#: netbox/dcim/forms/bulk_import.py:1373 netbox/dcim/forms/filtersets.py:95 -#: netbox/dcim/forms/filtersets.py:322 netbox/dcim/forms/filtersets.py:356 -#: netbox/dcim/forms/filtersets.py:396 netbox/dcim/forms/filtersets.py:447 -#: netbox/dcim/forms/filtersets.py:719 netbox/dcim/forms/filtersets.py:762 -#: netbox/dcim/forms/filtersets.py:977 netbox/dcim/forms/filtersets.py:1006 -#: netbox/dcim/forms/filtersets.py:1026 netbox/dcim/forms/filtersets.py:1090 -#: netbox/dcim/forms/filtersets.py:1120 netbox/dcim/forms/filtersets.py:1129 -#: netbox/dcim/forms/filtersets.py:1240 netbox/dcim/forms/filtersets.py:1264 -#: netbox/dcim/forms/filtersets.py:1289 netbox/dcim/forms/filtersets.py:1308 -#: netbox/dcim/forms/filtersets.py:1331 netbox/dcim/forms/filtersets.py:1442 -#: netbox/dcim/forms/filtersets.py:1466 netbox/dcim/forms/filtersets.py:1490 -#: netbox/dcim/forms/filtersets.py:1508 netbox/dcim/forms/filtersets.py:1525 -#: netbox/dcim/forms/model_forms.py:180 netbox/dcim/forms/model_forms.py:243 -#: netbox/dcim/forms/model_forms.py:468 netbox/dcim/forms/model_forms.py:728 -#: netbox/dcim/tables/devices.py:157 netbox/dcim/tables/power.py:30 -#: netbox/dcim/tables/racks.py:118 netbox/dcim/tables/racks.py:212 -#: netbox/extras/filtersets.py:536 netbox/extras/forms/filtersets.py:320 -#: netbox/ipam/forms/filtersets.py:173 netbox/ipam/forms/filtersets.py:414 -#: netbox/ipam/forms/filtersets.py:437 netbox/ipam/forms/filtersets.py:467 +#: netbox/circuits/forms/bulk_edit.py:365 +#: netbox/circuits/forms/bulk_import.py:254 +#: netbox/circuits/forms/filtersets.py:381 +#: netbox/circuits/forms/model_forms.py:365 netbox/dcim/forms/bulk_edit.py:361 +#: netbox/dcim/forms/bulk_edit.py:1280 netbox/dcim/forms/bulk_edit.py:1713 +#: netbox/dcim/forms/bulk_import.py:255 netbox/dcim/forms/bulk_import.py:1106 +#: netbox/dcim/forms/filtersets.py:368 netbox/dcim/forms/filtersets.py:778 +#: netbox/dcim/forms/filtersets.py:1539 netbox/dcim/forms/model_forms.py:256 +#: netbox/dcim/forms/model_forms.py:1090 netbox/dcim/forms/model_forms.py:1559 +#: netbox/dcim/forms/object_import.py:182 netbox/dcim/tables/devices.py:180 +#: netbox/dcim/tables/devices.py:841 netbox/dcim/tables/devices.py:967 +#: netbox/dcim/tables/devicetypes.py:311 netbox/dcim/tables/racks.py:128 +#: netbox/extras/filtersets.py:552 netbox/ipam/forms/bulk_edit.py:245 +#: netbox/ipam/forms/bulk_edit.py:295 netbox/ipam/forms/bulk_edit.py:343 +#: netbox/ipam/forms/bulk_edit.py:495 netbox/ipam/forms/bulk_import.py:193 +#: netbox/ipam/forms/bulk_import.py:261 netbox/ipam/forms/bulk_import.py:297 +#: netbox/ipam/forms/bulk_import.py:478 netbox/ipam/forms/filtersets.py:240 +#: netbox/ipam/forms/filtersets.py:292 netbox/ipam/forms/filtersets.py:363 +#: netbox/ipam/forms/filtersets.py:550 netbox/ipam/forms/model_forms.py:194 +#: netbox/ipam/forms/model_forms.py:220 netbox/ipam/forms/model_forms.py:259 +#: netbox/ipam/forms/model_forms.py:686 netbox/ipam/tables/ip.py:209 +#: netbox/ipam/tables/ip.py:268 netbox/ipam/tables/ip.py:319 +#: netbox/ipam/tables/vlans.py:99 netbox/ipam/tables/vlans.py:211 +#: netbox/templates/circuits/virtualcircuittermination.html:42 +#: netbox/templates/dcim/device.html:182 +#: netbox/templates/dcim/inc/panels/inventory_items.html:20 +#: netbox/templates/dcim/interface.html:178 +#: netbox/templates/dcim/interface.html:280 +#: netbox/templates/dcim/inventoryitem.html:40 +#: netbox/templates/dcim/rack.html:49 netbox/templates/ipam/ipaddress.html:41 +#: netbox/templates/ipam/iprange.html:50 netbox/templates/ipam/prefix.html:73 +#: netbox/templates/ipam/role.html:19 netbox/templates/ipam/vlan.html:52 +#: netbox/templates/virtualization/virtualmachine.html:23 +#: netbox/templates/vpn/tunneltermination.html:17 +#: netbox/templates/wireless/inc/wirelesslink_interface.html:20 +#: netbox/tenancy/forms/bulk_edit.py:142 +#: netbox/tenancy/forms/filtersets.py:107 +#: netbox/tenancy/forms/model_forms.py:137 +#: netbox/tenancy/tables/contacts.py:102 +#: netbox/virtualization/forms/bulk_edit.py:127 +#: netbox/virtualization/forms/bulk_import.py:112 +#: netbox/virtualization/forms/filtersets.py:162 +#: netbox/virtualization/forms/model_forms.py:202 +#: netbox/virtualization/tables/virtualmachines.py:45 +#: netbox/vpn/forms/bulk_edit.py:87 netbox/vpn/forms/bulk_import.py:81 +#: netbox/vpn/forms/filtersets.py:85 netbox/vpn/forms/model_forms.py:79 +#: netbox/vpn/forms/model_forms.py:114 netbox/vpn/tables/tunnels.py:82 +msgid "Role" +msgstr "Роль" + +#: netbox/circuits/forms/bulk_import.py:46 +#: netbox/circuits/forms/bulk_import.py:61 +#: netbox/circuits/forms/bulk_import.py:84 +msgid "Assigned provider" +msgstr "Призначений провайдер" + +#: netbox/circuits/forms/bulk_import.py:90 +msgid "Assigned provider account" +msgstr "Призначений обліковий запис провайдера" + +#: netbox/circuits/forms/bulk_import.py:97 +msgid "Type of circuit" +msgstr "Тип каналу зв'язку" + +#: netbox/circuits/forms/bulk_import.py:102 +#: netbox/circuits/forms/bulk_import.py:229 +#: netbox/dcim/forms/bulk_import.py:92 netbox/dcim/forms/bulk_import.py:151 +#: netbox/dcim/forms/bulk_import.py:252 netbox/dcim/forms/bulk_import.py:534 +#: netbox/dcim/forms/bulk_import.py:688 netbox/dcim/forms/bulk_import.py:1139 +#: netbox/dcim/forms/bulk_import.py:1492 netbox/ipam/forms/bulk_import.py:190 +#: netbox/ipam/forms/bulk_import.py:258 netbox/ipam/forms/bulk_import.py:294 +#: netbox/ipam/forms/bulk_import.py:475 netbox/ipam/forms/bulk_import.py:488 +#: netbox/virtualization/forms/bulk_import.py:57 +#: netbox/virtualization/forms/bulk_import.py:88 +#: netbox/vpn/forms/bulk_import.py:39 netbox/wireless/forms/bulk_import.py:47 +msgid "Operational status" +msgstr "Операційний стан" + +#: netbox/circuits/forms/bulk_import.py:115 +#: netbox/circuits/forms/bulk_import.py:174 +#: netbox/circuits/forms/bulk_import.py:236 +#: netbox/dcim/forms/bulk_import.py:113 netbox/dcim/forms/bulk_import.py:158 +#: netbox/dcim/forms/bulk_import.py:362 netbox/dcim/forms/bulk_import.py:510 +#: netbox/dcim/forms/bulk_import.py:1342 netbox/dcim/forms/bulk_import.py:1487 +#: netbox/dcim/forms/bulk_import.py:1551 netbox/ipam/forms/bulk_import.py:45 +#: netbox/ipam/forms/bulk_import.py:74 netbox/ipam/forms/bulk_import.py:102 +#: netbox/ipam/forms/bulk_import.py:122 netbox/ipam/forms/bulk_import.py:142 +#: netbox/ipam/forms/bulk_import.py:171 netbox/ipam/forms/bulk_import.py:253 +#: netbox/ipam/forms/bulk_import.py:289 netbox/ipam/forms/bulk_import.py:470 +#: netbox/virtualization/forms/bulk_import.py:71 +#: netbox/virtualization/forms/bulk_import.py:125 +#: netbox/vpn/forms/bulk_import.py:63 netbox/wireless/forms/bulk_import.py:61 +#: netbox/wireless/forms/bulk_import.py:106 +msgid "Assigned tenant" +msgstr "Призначений орендар" + +#: netbox/circuits/forms/bulk_import.py:139 +msgid "Termination type (app & model)" +msgstr "Тип припинення (додаток і модель)" + +#: netbox/circuits/forms/bulk_import.py:151 +#: netbox/circuits/forms/bulk_import.py:164 +msgid "Termination ID" +msgstr "Ідентифікатор припинення" + +#: netbox/circuits/forms/bulk_import.py:185 +msgid "Circuit type (app & model)" +msgstr "Тип схеми (додаток та модель)" + +#: netbox/circuits/forms/bulk_import.py:211 +msgid "The network to which this virtual circuit belongs" +msgstr "Мережа, до якої належить ця віртуальна схема" + +#: netbox/circuits/forms/bulk_import.py:217 +msgid "Assigned provider account (if any)" +msgstr "Призначений обліковий запис провайдера (якщо такий є)" + +#: netbox/circuits/forms/bulk_import.py:224 +msgid "Type of virtual circuit" +msgstr "Тип віртуальної схеми" + +#: netbox/circuits/forms/bulk_import.py:256 netbox/vpn/forms/bulk_import.py:83 +msgid "Operational role" +msgstr "Операційна роль" + +#: netbox/circuits/forms/bulk_import.py:259 +#: netbox/circuits/forms/model_forms.py:368 +#: netbox/circuits/tables/virtual_circuits.py:112 +#: netbox/dcim/forms/bulk_import.py:1219 netbox/dcim/forms/model_forms.py:1164 +#: netbox/dcim/forms/model_forms.py:1433 netbox/dcim/forms/model_forms.py:1600 +#: netbox/dcim/forms/model_forms.py:1635 netbox/dcim/forms/model_forms.py:1765 +#: netbox/dcim/tables/connections.py:65 netbox/dcim/tables/devices.py:1141 +#: netbox/ipam/forms/bulk_import.py:317 netbox/ipam/forms/model_forms.py:290 +#: netbox/ipam/forms/model_forms.py:299 netbox/ipam/tables/fhrp.py:64 +#: netbox/ipam/tables/ip.py:324 netbox/ipam/tables/vlans.py:145 +#: netbox/templates/circuits/inc/circuit_termination_fields.html:52 +#: netbox/templates/circuits/virtualcircuittermination.html:53 +#: netbox/templates/circuits/virtualcircuittermination.html:60 +#: netbox/templates/dcim/frontport.html:106 +#: netbox/templates/dcim/interface.html:27 +#: netbox/templates/dcim/interface.html:241 +#: netbox/templates/dcim/interface.html:367 +#: netbox/templates/dcim/rearport.html:102 +#: netbox/templates/virtualization/vminterface.html:18 +#: netbox/templates/vpn/tunneltermination.html:31 +#: netbox/templates/wireless/inc/wirelesslink_interface.html:10 +#: netbox/templates/wireless/wirelesslink.html:10 +#: netbox/templates/wireless/wirelesslink.html:55 +#: netbox/virtualization/forms/model_forms.py:377 +#: netbox/vpn/forms/bulk_import.py:297 netbox/vpn/forms/model_forms.py:439 +#: netbox/vpn/forms/model_forms.py:448 +#: netbox/wireless/forms/model_forms.py:116 +#: netbox/wireless/forms/model_forms.py:158 +msgid "Interface" +msgstr "Інтерфейс" + +#: netbox/circuits/forms/filtersets.py:38 +#: netbox/circuits/forms/filtersets.py:129 +#: netbox/circuits/forms/filtersets.py:187 +#: netbox/circuits/forms/filtersets.py:245 +#: netbox/circuits/tables/circuits.py:144 netbox/dcim/forms/bulk_edit.py:342 +#: netbox/dcim/forms/bulk_edit.py:450 netbox/dcim/forms/bulk_edit.py:691 +#: netbox/dcim/forms/bulk_edit.py:746 netbox/dcim/forms/bulk_edit.py:900 +#: netbox/dcim/forms/bulk_import.py:237 netbox/dcim/forms/bulk_import.py:339 +#: netbox/dcim/forms/bulk_import.py:573 netbox/dcim/forms/bulk_import.py:1436 +#: netbox/dcim/forms/bulk_import.py:1470 netbox/dcim/forms/filtersets.py:96 +#: netbox/dcim/forms/filtersets.py:323 netbox/dcim/forms/filtersets.py:357 +#: netbox/dcim/forms/filtersets.py:397 netbox/dcim/forms/filtersets.py:448 +#: netbox/dcim/forms/filtersets.py:720 netbox/dcim/forms/filtersets.py:763 +#: netbox/dcim/forms/filtersets.py:978 netbox/dcim/forms/filtersets.py:1007 +#: netbox/dcim/forms/filtersets.py:1027 netbox/dcim/forms/filtersets.py:1091 +#: netbox/dcim/forms/filtersets.py:1121 netbox/dcim/forms/filtersets.py:1130 +#: netbox/dcim/forms/filtersets.py:1241 netbox/dcim/forms/filtersets.py:1265 +#: netbox/dcim/forms/filtersets.py:1290 netbox/dcim/forms/filtersets.py:1309 +#: netbox/dcim/forms/filtersets.py:1336 netbox/dcim/forms/filtersets.py:1447 +#: netbox/dcim/forms/filtersets.py:1471 netbox/dcim/forms/filtersets.py:1495 +#: netbox/dcim/forms/filtersets.py:1513 netbox/dcim/forms/filtersets.py:1530 +#: netbox/dcim/forms/model_forms.py:184 netbox/dcim/forms/model_forms.py:248 +#: netbox/dcim/forms/model_forms.py:478 netbox/dcim/forms/model_forms.py:739 +#: netbox/dcim/tables/devices.py:168 netbox/dcim/tables/power.py:30 +#: netbox/dcim/tables/racks.py:117 netbox/dcim/tables/racks.py:211 +#: netbox/extras/filtersets.py:536 netbox/extras/forms/filtersets.py:327 +#: netbox/ipam/forms/filtersets.py:234 netbox/ipam/forms/filtersets.py:417 +#: netbox/ipam/forms/filtersets.py:440 netbox/ipam/forms/filtersets.py:507 #: netbox/templates/dcim/device.html:26 #: netbox/templates/dcim/device_edit.html:30 #: netbox/templates/dcim/inc/cable_termination.html:12 #: netbox/templates/dcim/location.html:26 #: netbox/templates/dcim/powerpanel.html:26 netbox/templates/dcim/rack.html:24 #: netbox/templates/dcim/rackreservation.html:32 -#: netbox/virtualization/forms/filtersets.py:46 -#: netbox/virtualization/forms/filtersets.py:100 -#: netbox/wireless/forms/model_forms.py:87 -#: netbox/wireless/forms/model_forms.py:129 +#: netbox/virtualization/forms/filtersets.py:79 +#: netbox/virtualization/forms/filtersets.py:105 +#: netbox/wireless/forms/filtersets.py:93 +#: netbox/wireless/forms/model_forms.py:90 +#: netbox/wireless/forms/model_forms.py:132 msgid "Location" msgstr "Розташування" -#: netbox/circuits/forms/filtersets.py:32 -#: netbox/circuits/forms/filtersets.py:120 netbox/dcim/forms/filtersets.py:144 -#: netbox/dcim/forms/filtersets.py:158 netbox/dcim/forms/filtersets.py:174 -#: netbox/dcim/forms/filtersets.py:206 netbox/dcim/forms/filtersets.py:328 -#: netbox/dcim/forms/filtersets.py:400 netbox/dcim/forms/filtersets.py:471 -#: netbox/dcim/forms/filtersets.py:723 netbox/dcim/forms/filtersets.py:1091 +#: netbox/circuits/forms/filtersets.py:40 +#: netbox/circuits/forms/filtersets.py:131 netbox/dcim/forms/filtersets.py:145 +#: netbox/dcim/forms/filtersets.py:159 netbox/dcim/forms/filtersets.py:175 +#: netbox/dcim/forms/filtersets.py:207 netbox/dcim/forms/filtersets.py:329 +#: netbox/dcim/forms/filtersets.py:401 netbox/dcim/forms/filtersets.py:472 +#: netbox/dcim/forms/filtersets.py:724 netbox/dcim/forms/filtersets.py:1092 #: netbox/netbox/navigation/menu.py:31 netbox/netbox/navigation/menu.py:33 -#: netbox/tenancy/forms/filtersets.py:42 netbox/tenancy/tables/columns.py:70 +#: netbox/tenancy/forms/filtersets.py:42 netbox/tenancy/tables/columns.py:55 #: netbox/tenancy/tables/contacts.py:25 netbox/tenancy/views.py:19 #: netbox/virtualization/forms/filtersets.py:37 #: netbox/virtualization/forms/filtersets.py:48 -#: netbox/virtualization/forms/filtersets.py:106 +#: netbox/virtualization/forms/filtersets.py:111 msgid "Contacts" msgstr "Контакти" -#: netbox/circuits/forms/filtersets.py:37 -#: netbox/circuits/forms/filtersets.py:157 netbox/dcim/forms/bulk_edit.py:113 -#: netbox/dcim/forms/bulk_edit.py:314 netbox/dcim/forms/bulk_edit.py:872 -#: netbox/dcim/forms/bulk_import.py:93 netbox/dcim/forms/filtersets.py:73 -#: netbox/dcim/forms/filtersets.py:185 netbox/dcim/forms/filtersets.py:211 -#: netbox/dcim/forms/filtersets.py:334 netbox/dcim/forms/filtersets.py:425 -#: netbox/dcim/forms/filtersets.py:739 netbox/dcim/forms/filtersets.py:983 -#: netbox/dcim/forms/filtersets.py:1013 netbox/dcim/forms/filtersets.py:1097 -#: netbox/dcim/forms/filtersets.py:1136 netbox/dcim/forms/filtersets.py:1576 -#: netbox/dcim/forms/filtersets.py:1600 netbox/dcim/forms/filtersets.py:1624 -#: netbox/dcim/forms/model_forms.py:112 netbox/dcim/forms/object_create.py:367 -#: netbox/dcim/tables/devices.py:143 netbox/dcim/tables/sites.py:85 -#: netbox/extras/filtersets.py:503 netbox/ipam/forms/bulk_edit.py:208 -#: netbox/ipam/forms/bulk_edit.py:474 netbox/ipam/forms/filtersets.py:217 -#: netbox/ipam/forms/filtersets.py:422 netbox/ipam/forms/filtersets.py:475 -#: netbox/templates/dcim/device.html:18 netbox/templates/dcim/rack.html:16 +#: netbox/circuits/forms/filtersets.py:45 +#: netbox/circuits/forms/filtersets.py:168 +#: netbox/circuits/forms/filtersets.py:230 +#: netbox/circuits/tables/circuits.py:139 netbox/dcim/forms/bulk_edit.py:116 +#: netbox/dcim/forms/bulk_edit.py:317 netbox/dcim/forms/bulk_edit.py:875 +#: netbox/dcim/forms/bulk_import.py:95 netbox/dcim/forms/filtersets.py:74 +#: netbox/dcim/forms/filtersets.py:186 netbox/dcim/forms/filtersets.py:212 +#: netbox/dcim/forms/filtersets.py:335 netbox/dcim/forms/filtersets.py:426 +#: netbox/dcim/forms/filtersets.py:740 netbox/dcim/forms/filtersets.py:984 +#: netbox/dcim/forms/filtersets.py:1014 netbox/dcim/forms/filtersets.py:1098 +#: netbox/dcim/forms/filtersets.py:1137 netbox/dcim/forms/filtersets.py:1614 +#: netbox/dcim/forms/filtersets.py:1638 netbox/dcim/forms/filtersets.py:1662 +#: netbox/dcim/forms/model_forms.py:114 netbox/dcim/forms/object_create.py:367 +#: netbox/dcim/tables/devices.py:154 netbox/dcim/tables/sites.py:85 +#: netbox/extras/filtersets.py:503 netbox/ipam/forms/bulk_edit.py:458 +#: netbox/ipam/forms/filtersets.py:219 netbox/ipam/forms/filtersets.py:425 +#: netbox/ipam/forms/filtersets.py:516 netbox/templates/dcim/device.html:18 +#: netbox/templates/dcim/rack.html:16 #: netbox/templates/dcim/rackreservation.html:22 #: netbox/templates/dcim/region.html:26 netbox/templates/dcim/site.html:31 -#: netbox/templates/ipam/prefix.html:49 netbox/templates/ipam/vlan.html:16 -#: netbox/virtualization/forms/bulk_edit.py:81 +#: netbox/templates/ipam/vlan.html:16 #: netbox/virtualization/forms/filtersets.py:59 -#: netbox/virtualization/forms/filtersets.py:133 +#: netbox/virtualization/forms/filtersets.py:138 #: netbox/virtualization/forms/model_forms.py:92 -#: netbox/vpn/forms/filtersets.py:257 +#: netbox/vpn/forms/filtersets.py:257 netbox/wireless/forms/filtersets.py:73 msgid "Region" msgstr "Регіон" -#: netbox/circuits/forms/filtersets.py:42 -#: netbox/circuits/forms/filtersets.py:162 netbox/dcim/forms/bulk_edit.py:322 -#: netbox/dcim/forms/bulk_edit.py:880 netbox/dcim/forms/filtersets.py:78 -#: netbox/dcim/forms/filtersets.py:190 netbox/dcim/forms/filtersets.py:216 -#: netbox/dcim/forms/filtersets.py:347 netbox/dcim/forms/filtersets.py:430 -#: netbox/dcim/forms/filtersets.py:744 netbox/dcim/forms/filtersets.py:988 -#: netbox/dcim/forms/filtersets.py:1102 netbox/dcim/forms/filtersets.py:1141 +#: netbox/circuits/forms/filtersets.py:50 +#: netbox/circuits/forms/filtersets.py:173 +#: netbox/circuits/forms/filtersets.py:235 netbox/dcim/forms/bulk_edit.py:325 +#: netbox/dcim/forms/bulk_edit.py:883 netbox/dcim/forms/filtersets.py:79 +#: netbox/dcim/forms/filtersets.py:191 netbox/dcim/forms/filtersets.py:217 +#: netbox/dcim/forms/filtersets.py:348 netbox/dcim/forms/filtersets.py:431 +#: netbox/dcim/forms/filtersets.py:745 netbox/dcim/forms/filtersets.py:989 +#: netbox/dcim/forms/filtersets.py:1103 netbox/dcim/forms/filtersets.py:1142 #: netbox/dcim/forms/object_create.py:375 netbox/extras/filtersets.py:520 -#: netbox/ipam/forms/bulk_edit.py:213 netbox/ipam/forms/bulk_edit.py:479 -#: netbox/ipam/forms/filtersets.py:222 netbox/ipam/forms/filtersets.py:427 -#: netbox/ipam/forms/filtersets.py:480 -#: netbox/virtualization/forms/bulk_edit.py:86 -#: netbox/virtualization/forms/filtersets.py:69 -#: netbox/virtualization/forms/filtersets.py:138 +#: netbox/ipam/forms/bulk_edit.py:463 netbox/ipam/forms/filtersets.py:224 +#: netbox/ipam/forms/filtersets.py:430 netbox/ipam/forms/filtersets.py:521 +#: netbox/virtualization/forms/filtersets.py:64 +#: netbox/virtualization/forms/filtersets.py:143 #: netbox/virtualization/forms/model_forms.py:98 +#: netbox/wireless/forms/filtersets.py:78 msgid "Site group" msgstr "Група тех. майданчиків" -#: netbox/circuits/forms/filtersets.py:65 -#: netbox/circuits/forms/filtersets.py:83 -#: netbox/circuits/forms/filtersets.py:102 -#: netbox/circuits/forms/filtersets.py:117 netbox/core/forms/filtersets.py:67 -#: netbox/core/forms/filtersets.py:135 netbox/dcim/forms/bulk_edit.py:843 -#: netbox/dcim/forms/filtersets.py:172 netbox/dcim/forms/filtersets.py:204 -#: netbox/dcim/forms/filtersets.py:915 netbox/dcim/forms/filtersets.py:1007 -#: netbox/dcim/forms/filtersets.py:1131 netbox/dcim/forms/filtersets.py:1239 -#: netbox/dcim/forms/filtersets.py:1263 netbox/dcim/forms/filtersets.py:1288 -#: netbox/dcim/forms/filtersets.py:1307 netbox/dcim/forms/filtersets.py:1327 -#: netbox/dcim/forms/filtersets.py:1441 netbox/dcim/forms/filtersets.py:1465 -#: netbox/dcim/forms/filtersets.py:1489 netbox/dcim/forms/filtersets.py:1507 -#: netbox/dcim/forms/filtersets.py:1523 netbox/extras/forms/bulk_edit.py:90 -#: netbox/extras/forms/filtersets.py:44 netbox/extras/forms/filtersets.py:134 -#: netbox/extras/forms/filtersets.py:165 netbox/extras/forms/filtersets.py:205 -#: netbox/extras/forms/filtersets.py:221 netbox/extras/forms/filtersets.py:252 -#: netbox/extras/forms/filtersets.py:276 netbox/extras/forms/filtersets.py:441 -#: netbox/ipam/forms/filtersets.py:99 netbox/ipam/forms/filtersets.py:266 -#: netbox/ipam/forms/filtersets.py:307 netbox/ipam/forms/filtersets.py:382 -#: netbox/ipam/forms/filtersets.py:468 netbox/ipam/forms/filtersets.py:527 -#: netbox/ipam/forms/filtersets.py:545 netbox/netbox/tables/tables.py:256 -#: netbox/virtualization/forms/filtersets.py:45 -#: netbox/virtualization/forms/filtersets.py:103 -#: netbox/virtualization/forms/filtersets.py:198 -#: netbox/virtualization/forms/filtersets.py:243 -#: netbox/vpn/forms/filtersets.py:213 netbox/wireless/forms/bulk_edit.py:150 -#: netbox/wireless/forms/filtersets.py:34 -#: netbox/wireless/forms/filtersets.py:74 -msgid "Attributes" -msgstr "Атрибути" - -#: netbox/circuits/forms/filtersets.py:73 -#: netbox/circuits/tables/circuits.py:63 -#: netbox/circuits/tables/providers.py:66 +#: netbox/circuits/forms/filtersets.py:81 +#: netbox/circuits/tables/circuits.py:62 +#: netbox/circuits/tables/providers.py:64 +#: netbox/circuits/tables/virtual_circuits.py:55 +#: netbox/circuits/tables/virtual_circuits.py:103 #: netbox/templates/circuits/circuit.html:22 #: netbox/templates/circuits/provideraccount.html:24 msgid "Account" msgstr "Обліковий запис" -#: netbox/circuits/forms/filtersets.py:217 +#: netbox/circuits/forms/filtersets.py:253 msgid "Term Side" msgstr "Сторона завершення" -#: netbox/circuits/forms/filtersets.py:250 netbox/dcim/forms/bulk_edit.py:1557 -#: netbox/extras/forms/model_forms.py:582 netbox/ipam/forms/filtersets.py:142 -#: netbox/ipam/forms/filtersets.py:546 netbox/ipam/forms/model_forms.py:327 +#: netbox/circuits/forms/filtersets.py:286 netbox/dcim/forms/bulk_edit.py:1572 +#: netbox/extras/forms/model_forms.py:596 netbox/ipam/forms/filtersets.py:144 +#: netbox/ipam/forms/filtersets.py:598 netbox/ipam/forms/model_forms.py:337 +#: netbox/templates/dcim/macaddress.html:25 #: netbox/templates/extras/configcontext.html:60 #: netbox/templates/ipam/ipaddress.html:59 -#: netbox/templates/ipam/vlan_edit.html:30 +#: netbox/templates/ipam/vlan_edit.html:38 #: netbox/tenancy/forms/filtersets.py:87 netbox/users/forms/model_forms.py:314 msgid "Assignment" msgstr "Призначення" -#: netbox/circuits/forms/filtersets.py:265 -#: netbox/circuits/forms/model_forms.py:195 -#: netbox/circuits/tables/circuits.py:155 netbox/dcim/forms/bulk_edit.py:118 -#: netbox/dcim/forms/bulk_import.py:100 netbox/dcim/forms/model_forms.py:117 -#: netbox/dcim/tables/sites.py:89 netbox/extras/forms/filtersets.py:480 -#: netbox/ipam/filtersets.py:1001 netbox/ipam/forms/bulk_edit.py:493 -#: netbox/ipam/forms/bulk_import.py:460 netbox/ipam/forms/model_forms.py:561 -#: netbox/ipam/tables/fhrp.py:67 netbox/ipam/tables/vlans.py:122 -#: netbox/ipam/tables/vlans.py:226 +#: netbox/circuits/forms/filtersets.py:301 +#: netbox/circuits/forms/model_forms.py:252 +#: netbox/circuits/tables/circuits.py:191 netbox/dcim/forms/bulk_edit.py:121 +#: netbox/dcim/forms/bulk_import.py:102 netbox/dcim/forms/model_forms.py:120 +#: netbox/dcim/tables/sites.py:89 netbox/extras/forms/filtersets.py:489 +#: netbox/ipam/filtersets.py:968 netbox/ipam/forms/bulk_edit.py:477 +#: netbox/ipam/forms/bulk_import.py:459 netbox/ipam/forms/model_forms.py:571 +#: netbox/ipam/tables/fhrp.py:67 netbox/ipam/tables/vlans.py:91 +#: netbox/ipam/tables/vlans.py:202 #: netbox/templates/circuits/circuitgroupassignment.html:22 -#: netbox/templates/dcim/interface.html:284 netbox/templates/dcim/site.html:37 +#: netbox/templates/dcim/interface.html:341 netbox/templates/dcim/site.html:37 #: netbox/templates/ipam/inc/panels/fhrp_groups.html:23 #: netbox/templates/ipam/vlan.html:27 netbox/templates/tenancy/contact.html:21 #: netbox/templates/tenancy/tenant.html:20 netbox/templates/users/group.html:6 @@ -1127,227 +1392,242 @@ msgstr "Призначення" #: netbox/tenancy/tables/tenants.py:42 netbox/users/filtersets.py:62 #: netbox/users/filtersets.py:185 netbox/users/forms/filtersets.py:31 #: netbox/users/forms/filtersets.py:37 netbox/users/forms/filtersets.py:79 -#: netbox/virtualization/forms/bulk_edit.py:65 -#: netbox/virtualization/forms/bulk_import.py:47 -#: netbox/virtualization/forms/filtersets.py:85 -#: netbox/virtualization/forms/model_forms.py:66 +#: netbox/virtualization/forms/bulk_edit.py:66 +#: netbox/virtualization/forms/bulk_import.py:48 +#: netbox/virtualization/forms/filtersets.py:90 +#: netbox/virtualization/forms/model_forms.py:70 #: netbox/virtualization/tables/clusters.py:70 #: netbox/vpn/forms/bulk_edit.py:112 netbox/vpn/forms/bulk_import.py:158 #: netbox/vpn/forms/filtersets.py:116 netbox/vpn/tables/crypto.py:31 -#: netbox/vpn/tables/tunnels.py:44 netbox/wireless/forms/bulk_edit.py:48 -#: netbox/wireless/forms/bulk_import.py:36 -#: netbox/wireless/forms/filtersets.py:46 -#: netbox/wireless/forms/model_forms.py:40 +#: netbox/vpn/tables/tunnels.py:44 netbox/wireless/forms/bulk_edit.py:50 +#: netbox/wireless/forms/bulk_import.py:38 +#: netbox/wireless/forms/filtersets.py:49 +#: netbox/wireless/forms/model_forms.py:41 #: netbox/wireless/tables/wirelesslan.py:48 msgid "Group" msgstr "Група" -#: netbox/circuits/forms/model_forms.py:182 +#: netbox/circuits/forms/model_forms.py:239 #: netbox/templates/circuits/circuitgroup.html:25 msgid "Circuit Group" msgstr "Група каналів зв'язку" -#: netbox/circuits/models/circuits.py:27 netbox/dcim/models/cables.py:67 -#: netbox/dcim/models/device_component_templates.py:517 -#: netbox/dcim/models/device_component_templates.py:617 -#: netbox/dcim/models/device_components.py:975 -#: netbox/dcim/models/device_components.py:1049 -#: netbox/dcim/models/device_components.py:1204 -#: netbox/dcim/models/devices.py:479 netbox/dcim/models/racks.py:224 +#: netbox/circuits/forms/model_forms.py:259 +msgid "Circuit type" +msgstr "Тип схеми" + +#: netbox/circuits/forms/model_forms.py:270 +msgid "Group Assignment" +msgstr "Групове завдання" + +#: netbox/circuits/models/base.py:18 netbox/dcim/models/cables.py:69 +#: netbox/dcim/models/device_component_templates.py:531 +#: netbox/dcim/models/device_component_templates.py:631 +#: netbox/dcim/models/device_components.py:476 +#: netbox/dcim/models/device_components.py:1026 +#: netbox/dcim/models/device_components.py:1097 +#: netbox/dcim/models/device_components.py:1243 +#: netbox/dcim/models/devices.py:478 netbox/dcim/models/racks.py:221 #: netbox/extras/models/tags.py:28 msgid "color" msgstr "колір" -#: netbox/circuits/models/circuits.py:36 +#: netbox/circuits/models/circuits.py:34 msgid "circuit type" msgstr "тип каналу зв'язку" -#: netbox/circuits/models/circuits.py:37 +#: netbox/circuits/models/circuits.py:35 msgid "circuit types" msgstr "типи каналів зв'язку" -#: netbox/circuits/models/circuits.py:48 +#: netbox/circuits/models/circuits.py:46 +#: netbox/circuits/models/virtual_circuits.py:38 msgid "circuit ID" msgstr "ідентифікатор каналу зв'язку" -#: netbox/circuits/models/circuits.py:49 +#: netbox/circuits/models/circuits.py:47 +#: netbox/circuits/models/virtual_circuits.py:39 msgid "Unique circuit ID" msgstr "Унікальний ідентифікатор каналу зв'язку" -#: netbox/circuits/models/circuits.py:69 netbox/core/models/data.py:52 -#: netbox/core/models/jobs.py:85 netbox/dcim/models/cables.py:49 -#: netbox/dcim/models/devices.py:653 netbox/dcim/models/devices.py:1173 -#: netbox/dcim/models/devices.py:1404 netbox/dcim/models/power.py:96 -#: netbox/dcim/models/racks.py:297 netbox/dcim/models/sites.py:154 -#: netbox/dcim/models/sites.py:266 netbox/ipam/models/ip.py:253 -#: netbox/ipam/models/ip.py:522 netbox/ipam/models/ip.py:730 -#: netbox/ipam/models/vlans.py:211 netbox/virtualization/models/clusters.py:74 -#: netbox/virtualization/models/virtualmachines.py:84 -#: netbox/vpn/models/tunnels.py:40 netbox/wireless/models.py:95 -#: netbox/wireless/models.py:159 +#: netbox/circuits/models/circuits.py:67 +#: netbox/circuits/models/virtual_circuits.py:59 netbox/core/models/data.py:52 +#: netbox/core/models/jobs.py:85 netbox/dcim/models/cables.py:51 +#: netbox/dcim/models/device_components.py:1283 +#: netbox/dcim/models/devices.py:645 netbox/dcim/models/devices.py:1181 +#: netbox/dcim/models/devices.py:1409 netbox/dcim/models/power.py:94 +#: netbox/dcim/models/racks.py:288 netbox/dcim/models/sites.py:154 +#: netbox/dcim/models/sites.py:270 netbox/ipam/models/ip.py:237 +#: netbox/ipam/models/ip.py:508 netbox/ipam/models/ip.py:729 +#: netbox/ipam/models/vlans.py:210 netbox/virtualization/models/clusters.py:70 +#: netbox/virtualization/models/virtualmachines.py:79 +#: netbox/vpn/models/tunnels.py:38 netbox/wireless/models.py:95 +#: netbox/wireless/models.py:156 msgid "status" msgstr "статус" -#: netbox/circuits/models/circuits.py:84 netbox/templates/core/plugin.html:20 +#: netbox/circuits/models/circuits.py:82 netbox/templates/core/plugin.html:20 msgid "installed" msgstr "встановлено" -#: netbox/circuits/models/circuits.py:89 +#: netbox/circuits/models/circuits.py:87 msgid "terminates" msgstr "припинється" -#: netbox/circuits/models/circuits.py:94 +#: netbox/circuits/models/circuits.py:92 msgid "commit rate (Kbps)" msgstr "гарантована швидкість (Кбіт/с)" -#: netbox/circuits/models/circuits.py:95 +#: netbox/circuits/models/circuits.py:93 msgid "Committed rate" msgstr "Гарантована швидкість" -#: netbox/circuits/models/circuits.py:137 +#: netbox/circuits/models/circuits.py:142 msgid "circuit" msgstr "канал зв'язку" -#: netbox/circuits/models/circuits.py:138 +#: netbox/circuits/models/circuits.py:143 msgid "circuits" msgstr "канали зв'язку" -#: netbox/circuits/models/circuits.py:170 +#: netbox/circuits/models/circuits.py:172 msgid "circuit group" msgstr "група каналів зв'язку" -#: netbox/circuits/models/circuits.py:171 +#: netbox/circuits/models/circuits.py:173 msgid "circuit groups" msgstr "групи каналів зв'язку" -#: netbox/circuits/models/circuits.py:195 netbox/ipam/models/fhrp.py:93 -#: netbox/tenancy/models/contacts.py:134 +#: netbox/circuits/models/circuits.py:190 +msgid "member ID" +msgstr "Ідентифікатор учасника" + +#: netbox/circuits/models/circuits.py:202 netbox/ipam/models/fhrp.py:90 +#: netbox/tenancy/models/contacts.py:126 msgid "priority" msgstr "пріоритет" -#: netbox/circuits/models/circuits.py:213 +#: netbox/circuits/models/circuits.py:220 msgid "Circuit group assignment" msgstr "Призначення групи каналів зв'язку" -#: netbox/circuits/models/circuits.py:214 +#: netbox/circuits/models/circuits.py:221 msgid "Circuit group assignments" msgstr "Призначення групи каналів зв'язку" -#: netbox/circuits/models/circuits.py:240 -msgid "termination" -msgstr "" +#: netbox/circuits/models/circuits.py:247 +msgid "termination side" +msgstr "сторона припинення" -#: netbox/circuits/models/circuits.py:257 +#: netbox/circuits/models/circuits.py:266 msgid "port speed (Kbps)" msgstr "швидкість порту (Кбіт/с)" -#: netbox/circuits/models/circuits.py:260 +#: netbox/circuits/models/circuits.py:269 msgid "Physical circuit speed" msgstr "Фізична швидкість каналу зв'язку" -#: netbox/circuits/models/circuits.py:265 +#: netbox/circuits/models/circuits.py:274 msgid "upstream speed (Kbps)" msgstr "швидкість висхідного потоку (Кбіт/с)" -#: netbox/circuits/models/circuits.py:266 +#: netbox/circuits/models/circuits.py:275 msgid "Upstream speed, if different from port speed" msgstr "" "Швидкість висхідного потоку, якщо вона відрізняється від швидкості порту" -#: netbox/circuits/models/circuits.py:271 +#: netbox/circuits/models/circuits.py:280 msgid "cross-connect ID" msgstr "ідентифікатор перехресного з'єднання" -#: netbox/circuits/models/circuits.py:272 +#: netbox/circuits/models/circuits.py:281 msgid "ID of the local cross-connect" msgstr "Ідентифікатор локального перехресного з'єднання" -#: netbox/circuits/models/circuits.py:277 +#: netbox/circuits/models/circuits.py:286 msgid "patch panel/port(s)" msgstr "патч-панель/порт(и)" -#: netbox/circuits/models/circuits.py:278 +#: netbox/circuits/models/circuits.py:287 msgid "Patch panel ID and port number(s)" msgstr "Ідентифікатор патч-панелі та номер(и) порту" -#: netbox/circuits/models/circuits.py:281 -#: netbox/dcim/models/device_component_templates.py:61 -#: netbox/dcim/models/device_components.py:68 netbox/dcim/models/racks.py:685 +#: netbox/circuits/models/circuits.py:290 +#: netbox/circuits/models/virtual_circuits.py:144 +#: netbox/dcim/models/device_component_templates.py:57 +#: netbox/dcim/models/device_components.py:63 netbox/dcim/models/racks.py:681 #: netbox/extras/models/configs.py:45 netbox/extras/models/configs.py:219 #: netbox/extras/models/customfields.py:125 netbox/extras/models/models.py:61 #: netbox/extras/models/models.py:158 netbox/extras/models/models.py:396 #: netbox/extras/models/models.py:511 #: netbox/extras/models/notifications.py:131 -#: netbox/extras/models/staging.py:31 netbox/extras/models/tags.py:32 -#: netbox/netbox/models/__init__.py:110 netbox/netbox/models/__init__.py:145 -#: netbox/netbox/models/__init__.py:191 netbox/users/models/permissions.py:24 -#: netbox/users/models/tokens.py:57 netbox/users/models/users.py:33 -#: netbox/virtualization/models/virtualmachines.py:289 +#: netbox/extras/models/staging.py:32 netbox/extras/models/tags.py:32 +#: netbox/ipam/models/vlans.py:358 netbox/netbox/models/__init__.py:115 +#: netbox/netbox/models/__init__.py:150 netbox/netbox/models/__init__.py:196 +#: netbox/users/models/permissions.py:24 netbox/users/models/tokens.py:57 +#: netbox/users/models/users.py:33 +#: netbox/virtualization/models/virtualmachines.py:276 msgid "description" msgstr "опис" -#: netbox/circuits/models/circuits.py:294 +#: netbox/circuits/models/circuits.py:340 msgid "circuit termination" msgstr "кінець каналу зв'язку" -#: netbox/circuits/models/circuits.py:295 +#: netbox/circuits/models/circuits.py:341 msgid "circuit terminations" msgstr "кінці каналу зв'язку" -#: netbox/circuits/models/circuits.py:308 -msgid "" -"A circuit termination must attach to either a site or a provider network." -msgstr "" +#: netbox/circuits/models/circuits.py:353 +msgid "A circuit termination must attach to a terminating object." +msgstr "Закриття ланцюга повинно приєднатися до кінцевого об'єкта." -#: netbox/circuits/models/circuits.py:310 -msgid "" -"A circuit termination cannot attach to both a site and a provider network." -msgstr "" - -#: netbox/circuits/models/providers.py:22 -#: netbox/circuits/models/providers.py:66 -#: netbox/circuits/models/providers.py:104 netbox/core/models/data.py:39 +#: netbox/circuits/models/providers.py:21 +#: netbox/circuits/models/providers.py:63 +#: netbox/circuits/models/providers.py:98 netbox/core/models/data.py:39 #: netbox/core/models/jobs.py:46 #: netbox/dcim/models/device_component_templates.py:43 -#: netbox/dcim/models/device_components.py:53 -#: netbox/dcim/models/devices.py:593 netbox/dcim/models/devices.py:1335 -#: netbox/dcim/models/devices.py:1400 netbox/dcim/models/power.py:39 -#: netbox/dcim/models/power.py:92 netbox/dcim/models/racks.py:262 -#: netbox/dcim/models/sites.py:138 netbox/extras/models/configs.py:36 +#: netbox/dcim/models/device_components.py:52 +#: netbox/dcim/models/devices.py:589 netbox/dcim/models/devices.py:1341 +#: netbox/dcim/models/devices.py:1404 netbox/dcim/models/power.py:38 +#: netbox/dcim/models/power.py:89 netbox/dcim/models/racks.py:257 +#: netbox/dcim/models/sites.py:142 netbox/extras/models/configs.py:36 #: netbox/extras/models/configs.py:215 netbox/extras/models/customfields.py:92 #: netbox/extras/models/models.py:56 netbox/extras/models/models.py:153 #: netbox/extras/models/models.py:296 netbox/extras/models/models.py:392 #: netbox/extras/models/models.py:501 netbox/extras/models/models.py:596 #: netbox/extras/models/notifications.py:126 -#: netbox/extras/models/scripts.py:30 netbox/extras/models/staging.py:26 -#: netbox/ipam/models/asns.py:18 netbox/ipam/models/fhrp.py:25 -#: netbox/ipam/models/services.py:52 netbox/ipam/models/services.py:88 -#: netbox/ipam/models/vlans.py:36 netbox/ipam/models/vlans.py:200 -#: netbox/ipam/models/vrfs.py:22 netbox/ipam/models/vrfs.py:79 -#: netbox/netbox/models/__init__.py:137 netbox/netbox/models/__init__.py:181 -#: netbox/tenancy/models/contacts.py:64 netbox/tenancy/models/tenants.py:20 -#: netbox/tenancy/models/tenants.py:45 netbox/users/models/permissions.py:20 -#: netbox/users/models/users.py:28 netbox/virtualization/models/clusters.py:57 -#: netbox/virtualization/models/virtualmachines.py:72 -#: netbox/virtualization/models/virtualmachines.py:279 -#: netbox/vpn/models/crypto.py:24 netbox/vpn/models/crypto.py:71 -#: netbox/vpn/models/crypto.py:131 netbox/vpn/models/crypto.py:183 -#: netbox/vpn/models/crypto.py:221 netbox/vpn/models/l2vpn.py:22 -#: netbox/vpn/models/tunnels.py:35 netbox/wireless/models.py:51 +#: netbox/extras/models/scripts.py:30 netbox/extras/models/staging.py:27 +#: netbox/ipam/models/asns.py:17 netbox/ipam/models/fhrp.py:24 +#: netbox/ipam/models/services.py:51 netbox/ipam/models/services.py:84 +#: netbox/ipam/models/vlans.py:37 netbox/ipam/models/vlans.py:199 +#: netbox/ipam/models/vlans.py:337 netbox/ipam/models/vrfs.py:20 +#: netbox/ipam/models/vrfs.py:75 netbox/netbox/models/__init__.py:142 +#: netbox/netbox/models/__init__.py:186 netbox/tenancy/models/contacts.py:58 +#: netbox/tenancy/models/tenants.py:19 netbox/tenancy/models/tenants.py:42 +#: netbox/users/models/permissions.py:20 netbox/users/models/users.py:28 +#: netbox/virtualization/models/clusters.py:52 +#: netbox/virtualization/models/virtualmachines.py:71 +#: netbox/virtualization/models/virtualmachines.py:271 +#: netbox/virtualization/models/virtualmachines.py:305 +#: netbox/vpn/models/crypto.py:23 netbox/vpn/models/crypto.py:69 +#: netbox/vpn/models/crypto.py:128 netbox/vpn/models/crypto.py:180 +#: netbox/vpn/models/crypto.py:216 netbox/vpn/models/l2vpn.py:21 +#: netbox/vpn/models/tunnels.py:32 netbox/wireless/models.py:53 msgid "name" msgstr "назва" -#: netbox/circuits/models/providers.py:25 +#: netbox/circuits/models/providers.py:24 msgid "Full name of the provider" msgstr "Повна назва провайдера" -#: netbox/circuits/models/providers.py:28 netbox/dcim/models/devices.py:86 +#: netbox/circuits/models/providers.py:28 netbox/dcim/models/devices.py:88 #: netbox/dcim/models/racks.py:137 netbox/dcim/models/sites.py:149 #: netbox/extras/models/models.py:506 netbox/ipam/models/asns.py:23 -#: netbox/ipam/models/vlans.py:40 netbox/netbox/models/__init__.py:141 -#: netbox/netbox/models/__init__.py:186 netbox/tenancy/models/tenants.py:25 -#: netbox/tenancy/models/tenants.py:49 netbox/vpn/models/l2vpn.py:27 -#: netbox/wireless/models.py:56 +#: netbox/ipam/models/vlans.py:42 netbox/netbox/models/__init__.py:146 +#: netbox/netbox/models/__init__.py:191 netbox/tenancy/models/tenants.py:25 +#: netbox/tenancy/models/tenants.py:47 netbox/vpn/models/l2vpn.py:27 +#: netbox/wireless/models.py:59 msgid "slug" msgstr "скорочення" @@ -1359,67 +1639,100 @@ msgstr "провайдер" msgid "providers" msgstr "провайдери" -#: netbox/circuits/models/providers.py:63 +#: netbox/circuits/models/providers.py:60 msgid "account ID" msgstr "ідентифікатор облікового запису" -#: netbox/circuits/models/providers.py:86 +#: netbox/circuits/models/providers.py:83 msgid "provider account" msgstr "обліковий запис провайдера" -#: netbox/circuits/models/providers.py:87 +#: netbox/circuits/models/providers.py:84 msgid "provider accounts" msgstr "облікові записи провайдера" -#: netbox/circuits/models/providers.py:115 +#: netbox/circuits/models/providers.py:110 msgid "service ID" msgstr "ідентифікатор послуги" -#: netbox/circuits/models/providers.py:126 +#: netbox/circuits/models/providers.py:121 msgid "provider network" msgstr "мережа провайдера" -#: netbox/circuits/models/providers.py:127 +#: netbox/circuits/models/providers.py:122 msgid "provider networks" msgstr "мережі провайдера" -#: netbox/circuits/tables/circuits.py:32 -#: netbox/circuits/tables/circuits.py:132 +#: netbox/circuits/models/virtual_circuits.py:28 +msgid "virtual circuit type" +msgstr "тип віртуальної схеми" + +#: netbox/circuits/models/virtual_circuits.py:29 +msgid "virtual circuit types" +msgstr "типи віртуальних схем" + +#: netbox/circuits/models/virtual_circuits.py:99 +msgid "virtual circuit" +msgstr "віртуальна схема" + +#: netbox/circuits/models/virtual_circuits.py:100 +msgid "virtual circuits" +msgstr "віртуальні схеми" + +#: netbox/circuits/models/virtual_circuits.py:133 netbox/ipam/models/ip.py:194 +#: netbox/ipam/models/ip.py:736 netbox/vpn/models/tunnels.py:109 +msgid "role" +msgstr "роль" + +#: netbox/circuits/models/virtual_circuits.py:151 +msgid "virtual circuit termination" +msgstr "припинення віртуальної схеми" + +#: netbox/circuits/models/virtual_circuits.py:152 +msgid "virtual circuit terminations" +msgstr "завершення віртуальних схем" + +#: netbox/circuits/tables/circuits.py:30 +#: netbox/circuits/tables/circuits.py:168 #: netbox/circuits/tables/providers.py:18 -#: netbox/circuits/tables/providers.py:69 -#: netbox/circuits/tables/providers.py:99 netbox/core/tables/data.py:16 +#: netbox/circuits/tables/providers.py:67 +#: netbox/circuits/tables/providers.py:97 +#: netbox/circuits/tables/virtual_circuits.py:18 netbox/core/tables/data.py:16 #: netbox/core/tables/jobs.py:14 netbox/core/tables/plugins.py:44 #: netbox/core/tables/tasks.py:11 netbox/core/tables/tasks.py:115 -#: netbox/dcim/forms/filtersets.py:63 netbox/dcim/forms/object_create.py:43 -#: netbox/dcim/tables/devices.py:52 netbox/dcim/tables/devices.py:92 -#: netbox/dcim/tables/devices.py:134 netbox/dcim/tables/devices.py:289 -#: netbox/dcim/tables/devices.py:392 netbox/dcim/tables/devices.py:433 -#: netbox/dcim/tables/devices.py:482 netbox/dcim/tables/devices.py:531 -#: netbox/dcim/tables/devices.py:648 netbox/dcim/tables/devices.py:731 -#: netbox/dcim/tables/devices.py:778 netbox/dcim/tables/devices.py:841 -#: netbox/dcim/tables/devices.py:911 netbox/dcim/tables/devices.py:974 -#: netbox/dcim/tables/devices.py:994 netbox/dcim/tables/devices.py:1023 -#: netbox/dcim/tables/devices.py:1053 netbox/dcim/tables/devicetypes.py:31 +#: netbox/dcim/forms/filtersets.py:64 netbox/dcim/forms/object_create.py:43 +#: netbox/dcim/tables/devices.py:63 netbox/dcim/tables/devices.py:103 +#: netbox/dcim/tables/devices.py:145 netbox/dcim/tables/devices.py:300 +#: netbox/dcim/tables/devices.py:403 netbox/dcim/tables/devices.py:444 +#: netbox/dcim/tables/devices.py:492 netbox/dcim/tables/devices.py:541 +#: netbox/dcim/tables/devices.py:562 netbox/dcim/tables/devices.py:682 +#: netbox/dcim/tables/devices.py:765 netbox/dcim/tables/devices.py:811 +#: netbox/dcim/tables/devices.py:873 netbox/dcim/tables/devices.py:942 +#: netbox/dcim/tables/devices.py:1007 netbox/dcim/tables/devices.py:1026 +#: netbox/dcim/tables/devices.py:1055 netbox/dcim/tables/devices.py:1085 +#: netbox/dcim/tables/devicetypes.py:31 netbox/dcim/tables/devicetypes.py:227 #: netbox/dcim/tables/power.py:22 netbox/dcim/tables/power.py:62 #: netbox/dcim/tables/racks.py:24 netbox/dcim/tables/racks.py:113 #: netbox/dcim/tables/sites.py:24 netbox/dcim/tables/sites.py:51 -#: netbox/dcim/tables/sites.py:78 netbox/dcim/tables/sites.py:130 -#: netbox/extras/forms/filtersets.py:213 netbox/extras/tables/tables.py:58 +#: netbox/dcim/tables/sites.py:78 netbox/dcim/tables/sites.py:129 +#: netbox/extras/forms/filtersets.py:218 netbox/extras/tables/tables.py:58 #: netbox/extras/tables/tables.py:122 netbox/extras/tables/tables.py:155 #: netbox/extras/tables/tables.py:180 netbox/extras/tables/tables.py:246 #: netbox/extras/tables/tables.py:361 netbox/extras/tables/tables.py:378 #: netbox/extras/tables/tables.py:401 netbox/extras/tables/tables.py:439 #: netbox/extras/tables/tables.py:491 netbox/extras/tables/tables.py:514 -#: netbox/ipam/forms/bulk_edit.py:407 netbox/ipam/forms/filtersets.py:386 -#: netbox/ipam/tables/asn.py:16 netbox/ipam/tables/ip.py:85 -#: netbox/ipam/tables/ip.py:160 netbox/ipam/tables/services.py:15 -#: netbox/ipam/tables/services.py:40 netbox/ipam/tables/vlans.py:64 -#: netbox/ipam/tables/vlans.py:114 netbox/ipam/tables/vrfs.py:26 +#: netbox/ipam/forms/bulk_edit.py:391 netbox/ipam/forms/filtersets.py:389 +#: netbox/ipam/forms/filtersets.py:474 netbox/ipam/tables/asn.py:16 +#: netbox/ipam/tables/ip.py:31 netbox/ipam/tables/ip.py:106 +#: netbox/ipam/tables/services.py:15 netbox/ipam/tables/services.py:40 +#: netbox/ipam/tables/vlans.py:33 netbox/ipam/tables/vlans.py:83 +#: netbox/ipam/tables/vlans.py:231 netbox/ipam/tables/vrfs.py:26 #: netbox/ipam/tables/vrfs.py:68 #: netbox/templates/circuits/circuitgroup.html:28 #: netbox/templates/circuits/circuittype.html:22 #: netbox/templates/circuits/provideraccount.html:28 #: netbox/templates/circuits/providernetwork.html:24 +#: netbox/templates/circuits/virtualcircuittype.html:22 #: netbox/templates/core/datasource.html:34 netbox/templates/core/job.html:44 #: netbox/templates/core/plugin.html:54 #: netbox/templates/core/rq_worker.html:43 @@ -1431,7 +1744,7 @@ msgstr "мережі провайдера" #: netbox/templates/dcim/inc/interface_vlans_table.html:5 #: netbox/templates/dcim/inc/panels/inventory_items.html:18 #: netbox/templates/dcim/interface.html:38 -#: netbox/templates/dcim/interface.html:165 +#: netbox/templates/dcim/interface.html:222 #: netbox/templates/dcim/inventoryitem.html:28 #: netbox/templates/dcim/inventoryitemrole.html:18 #: netbox/templates/dcim/location.html:29 @@ -1461,6 +1774,7 @@ msgstr "мережі провайдера" #: netbox/templates/ipam/service.html:24 #: netbox/templates/ipam/servicetemplate.html:15 #: netbox/templates/ipam/vlan.html:35 netbox/templates/ipam/vlangroup.html:30 +#: netbox/templates/ipam/vlantranslationpolicy.html:14 #: netbox/templates/tenancy/contact.html:25 #: netbox/templates/tenancy/contactgroup.html:21 #: netbox/templates/tenancy/contactrole.html:18 @@ -1492,106 +1806,218 @@ msgstr "мережі провайдера" #: netbox/virtualization/tables/clusters.py:17 #: netbox/virtualization/tables/clusters.py:39 #: netbox/virtualization/tables/clusters.py:62 -#: netbox/virtualization/tables/virtualmachines.py:55 -#: netbox/virtualization/tables/virtualmachines.py:139 -#: netbox/virtualization/tables/virtualmachines.py:194 +#: netbox/virtualization/tables/virtualmachines.py:26 +#: netbox/virtualization/tables/virtualmachines.py:109 +#: netbox/virtualization/tables/virtualmachines.py:165 #: netbox/vpn/tables/crypto.py:18 netbox/vpn/tables/crypto.py:57 #: netbox/vpn/tables/crypto.py:93 netbox/vpn/tables/crypto.py:129 #: netbox/vpn/tables/crypto.py:158 netbox/vpn/tables/l2vpn.py:23 #: netbox/vpn/tables/tunnels.py:18 netbox/vpn/tables/tunnels.py:40 #: netbox/wireless/tables/wirelesslan.py:18 -#: netbox/wireless/tables/wirelesslan.py:79 +#: netbox/wireless/tables/wirelesslan.py:88 msgid "Name" msgstr "Назва" -#: netbox/circuits/tables/circuits.py:41 -#: netbox/circuits/tables/circuits.py:138 -#: netbox/circuits/tables/providers.py:45 -#: netbox/circuits/tables/providers.py:79 netbox/netbox/navigation/menu.py:266 -#: netbox/netbox/navigation/menu.py:270 netbox/netbox/navigation/menu.py:272 +#: netbox/circuits/tables/circuits.py:39 +#: netbox/circuits/tables/circuits.py:174 +#: netbox/circuits/tables/providers.py:43 +#: netbox/circuits/tables/providers.py:77 +#: netbox/circuits/tables/virtual_circuits.py:27 +#: netbox/netbox/navigation/menu.py:274 netbox/netbox/navigation/menu.py:278 +#: netbox/netbox/navigation/menu.py:280 #: netbox/templates/circuits/provider.html:57 #: netbox/templates/circuits/provideraccount.html:44 #: netbox/templates/circuits/providernetwork.html:50 msgid "Circuits" msgstr "Канали зв'язку" -#: netbox/circuits/tables/circuits.py:55 +#: netbox/circuits/tables/circuits.py:54 +#: netbox/circuits/tables/virtual_circuits.py:42 #: netbox/templates/circuits/circuit.html:26 +#: netbox/templates/circuits/virtualcircuit.html:35 +#: netbox/templates/dcim/interface.html:174 msgid "Circuit ID" msgstr "Ідентифікатор каналу зв'язку" -#: netbox/circuits/tables/circuits.py:69 -#: netbox/wireless/forms/model_forms.py:160 +#: netbox/circuits/tables/circuits.py:72 +#: netbox/wireless/forms/model_forms.py:163 msgid "Side A" msgstr "Сторона А" -#: netbox/circuits/tables/circuits.py:74 +#: netbox/circuits/tables/circuits.py:77 msgid "Side Z" msgstr "Сторона Б" -#: netbox/circuits/tables/circuits.py:77 -#: netbox/templates/circuits/circuit.html:55 +#: netbox/circuits/tables/circuits.py:80 +#: netbox/templates/circuits/circuit.html:65 msgid "Commit Rate" msgstr "Гарантований процент чи коефіцієнт доступності" -#: netbox/circuits/tables/circuits.py:80 -#: netbox/circuits/tables/providers.py:48 -#: netbox/circuits/tables/providers.py:82 -#: netbox/circuits/tables/providers.py:107 netbox/dcim/tables/devices.py:1036 -#: netbox/dcim/tables/devicetypes.py:92 netbox/dcim/tables/modules.py:29 -#: netbox/dcim/tables/modules.py:73 netbox/dcim/tables/power.py:39 -#: netbox/dcim/tables/power.py:96 netbox/dcim/tables/racks.py:84 -#: netbox/dcim/tables/racks.py:145 netbox/dcim/tables/racks.py:225 -#: netbox/dcim/tables/sites.py:108 netbox/extras/tables/tables.py:582 -#: netbox/ipam/tables/asn.py:69 netbox/ipam/tables/fhrp.py:34 -#: netbox/ipam/tables/ip.py:136 netbox/ipam/tables/ip.py:275 -#: netbox/ipam/tables/ip.py:329 netbox/ipam/tables/ip.py:397 -#: netbox/ipam/tables/services.py:24 netbox/ipam/tables/services.py:54 -#: netbox/ipam/tables/vlans.py:145 netbox/ipam/tables/vrfs.py:47 -#: netbox/ipam/tables/vrfs.py:72 netbox/templates/dcim/htmx/cable_edit.html:89 +#: netbox/circuits/tables/circuits.py:84 +#: netbox/circuits/tables/providers.py:46 +#: netbox/circuits/tables/providers.py:80 +#: netbox/circuits/tables/providers.py:105 +#: netbox/circuits/tables/virtual_circuits.py:68 +#: netbox/dcim/tables/devices.py:1068 netbox/dcim/tables/devicetypes.py:97 +#: netbox/dcim/tables/modules.py:29 netbox/dcim/tables/modules.py:73 +#: netbox/dcim/tables/power.py:39 netbox/dcim/tables/power.py:96 +#: netbox/dcim/tables/racks.py:84 netbox/dcim/tables/racks.py:144 +#: netbox/dcim/tables/racks.py:224 netbox/dcim/tables/sites.py:107 +#: netbox/extras/tables/tables.py:582 netbox/ipam/tables/asn.py:69 +#: netbox/ipam/tables/fhrp.py:34 netbox/ipam/tables/ip.py:82 +#: netbox/ipam/tables/ip.py:226 netbox/ipam/tables/ip.py:281 +#: netbox/ipam/tables/ip.py:349 netbox/ipam/tables/services.py:24 +#: netbox/ipam/tables/services.py:54 netbox/ipam/tables/vlans.py:121 +#: netbox/ipam/tables/vrfs.py:47 netbox/ipam/tables/vrfs.py:72 +#: netbox/templates/dcim/htmx/cable_edit.html:89 #: netbox/templates/generic/bulk_edit.html:86 #: netbox/templates/inc/panels/comments.html:5 #: netbox/tenancy/tables/contacts.py:68 netbox/tenancy/tables/tenants.py:46 #: netbox/utilities/forms/fields/fields.py:29 -#: netbox/virtualization/tables/clusters.py:91 -#: netbox/virtualization/tables/virtualmachines.py:82 +#: netbox/virtualization/tables/clusters.py:95 +#: netbox/virtualization/tables/virtualmachines.py:52 #: netbox/vpn/tables/crypto.py:37 netbox/vpn/tables/crypto.py:74 #: netbox/vpn/tables/crypto.py:109 netbox/vpn/tables/crypto.py:140 #: netbox/vpn/tables/crypto.py:173 netbox/vpn/tables/l2vpn.py:37 #: netbox/vpn/tables/tunnels.py:61 netbox/wireless/tables/wirelesslan.py:27 -#: netbox/wireless/tables/wirelesslan.py:58 +#: netbox/wireless/tables/wirelesslan.py:66 msgid "Comments" msgstr "Коментарі" -#: netbox/circuits/tables/circuits.py:86 +#: netbox/circuits/tables/circuits.py:90 #: netbox/templates/tenancy/contact.html:84 #: netbox/tenancy/tables/contacts.py:73 msgid "Assignments" msgstr "Завдання" +#: netbox/circuits/tables/circuits.py:117 netbox/dcim/forms/connections.py:81 +msgid "Side" +msgstr "Сторона" + +#: netbox/circuits/tables/circuits.py:120 +msgid "Termination Type" +msgstr "Тип припинення" + +#: netbox/circuits/tables/circuits.py:123 +msgid "Termination Point" +msgstr "Точка припинення" + +#: netbox/circuits/tables/circuits.py:134 netbox/dcim/tables/devices.py:161 +#: netbox/templates/dcim/sitegroup.html:26 +msgid "Site Group" +msgstr "Група тех. майданчиків" + +#: netbox/circuits/tables/circuits.py:149 +#: netbox/templates/circuits/providernetwork.html:17 +#: netbox/templates/circuits/virtualcircuit.html:27 +#: netbox/templates/circuits/virtualcircuittermination.html:30 +#: netbox/templates/dcim/interface.html:170 +msgid "Provider Network" +msgstr "Мережа провайдера" + #: netbox/circuits/tables/providers.py:23 msgid "Accounts" msgstr "Рахунки" -#: netbox/circuits/tables/providers.py:29 +#: netbox/circuits/tables/providers.py:28 msgid "Account Count" msgstr "Кількість рахунків" -#: netbox/circuits/tables/providers.py:39 netbox/dcim/tables/sites.py:100 +#: netbox/circuits/tables/providers.py:37 netbox/dcim/tables/sites.py:99 msgid "ASN Count" msgstr "Кількість ASN" -#: netbox/circuits/views.py:331 +#: netbox/circuits/tables/virtual_circuits.py:65 +#: netbox/netbox/navigation/menu.py:234 +#: netbox/templates/circuits/virtualcircuit.html:87 +#: netbox/templates/vpn/l2vpn.html:56 netbox/templates/vpn/tunnel.html:72 +#: netbox/vpn/tables/tunnels.py:58 +msgid "Terminations" +msgstr "Кінці" + +#: netbox/circuits/tables/virtual_circuits.py:109 +#: netbox/dcim/forms/bulk_edit.py:745 netbox/dcim/forms/bulk_edit.py:1299 +#: netbox/dcim/forms/bulk_edit.py:1708 netbox/dcim/forms/bulk_edit.py:1760 +#: netbox/dcim/forms/bulk_import.py:668 netbox/dcim/forms/bulk_import.py:730 +#: netbox/dcim/forms/bulk_import.py:756 netbox/dcim/forms/bulk_import.py:782 +#: netbox/dcim/forms/bulk_import.py:802 netbox/dcim/forms/bulk_import.py:858 +#: netbox/dcim/forms/bulk_import.py:976 netbox/dcim/forms/bulk_import.py:1024 +#: netbox/dcim/forms/bulk_import.py:1041 netbox/dcim/forms/bulk_import.py:1053 +#: netbox/dcim/forms/bulk_import.py:1101 netbox/dcim/forms/bulk_import.py:1205 +#: netbox/dcim/forms/bulk_import.py:1541 netbox/dcim/forms/connections.py:24 +#: netbox/dcim/forms/filtersets.py:132 netbox/dcim/forms/filtersets.py:922 +#: netbox/dcim/forms/filtersets.py:1052 netbox/dcim/forms/filtersets.py:1243 +#: netbox/dcim/forms/filtersets.py:1268 netbox/dcim/forms/filtersets.py:1292 +#: netbox/dcim/forms/filtersets.py:1312 netbox/dcim/forms/filtersets.py:1339 +#: netbox/dcim/forms/filtersets.py:1449 netbox/dcim/forms/filtersets.py:1474 +#: netbox/dcim/forms/filtersets.py:1498 netbox/dcim/forms/filtersets.py:1516 +#: netbox/dcim/forms/filtersets.py:1533 netbox/dcim/forms/filtersets.py:1630 +#: netbox/dcim/forms/filtersets.py:1654 netbox/dcim/forms/filtersets.py:1678 +#: netbox/dcim/forms/model_forms.py:644 netbox/dcim/forms/model_forms.py:861 +#: netbox/dcim/forms/model_forms.py:1231 netbox/dcim/forms/model_forms.py:1716 +#: netbox/dcim/forms/model_forms.py:1787 +#: netbox/dcim/forms/object_create.py:249 netbox/dcim/tables/connections.py:22 +#: netbox/dcim/tables/connections.py:41 netbox/dcim/tables/connections.py:60 +#: netbox/dcim/tables/devices.py:296 netbox/dcim/tables/devices.py:381 +#: netbox/dcim/tables/devices.py:422 netbox/dcim/tables/devices.py:464 +#: netbox/dcim/tables/devices.py:514 netbox/dcim/tables/devices.py:619 +#: netbox/dcim/tables/devices.py:731 netbox/dcim/tables/devices.py:787 +#: netbox/dcim/tables/devices.py:833 netbox/dcim/tables/devices.py:892 +#: netbox/dcim/tables/devices.py:960 netbox/dcim/tables/devices.py:1089 +#: netbox/dcim/tables/modules.py:53 netbox/extras/forms/filtersets.py:328 +#: netbox/ipam/forms/bulk_import.py:303 netbox/ipam/forms/bulk_import.py:540 +#: netbox/ipam/forms/filtersets.py:603 netbox/ipam/forms/model_forms.py:333 +#: netbox/ipam/forms/model_forms.py:762 netbox/ipam/forms/model_forms.py:795 +#: netbox/ipam/forms/model_forms.py:821 netbox/ipam/tables/vlans.py:156 +#: netbox/templates/circuits/virtualcircuittermination.html:56 +#: netbox/templates/dcim/consoleport.html:20 +#: netbox/templates/dcim/consoleserverport.html:20 +#: netbox/templates/dcim/device.html:15 netbox/templates/dcim/device.html:130 +#: netbox/templates/dcim/device_edit.html:10 +#: netbox/templates/dcim/devicebay.html:20 +#: netbox/templates/dcim/devicebay.html:48 +#: netbox/templates/dcim/frontport.html:20 +#: netbox/templates/dcim/interface.html:30 +#: netbox/templates/dcim/interface.html:218 +#: netbox/templates/dcim/inventoryitem.html:20 +#: netbox/templates/dcim/module.html:57 +#: netbox/templates/dcim/modulebay.html:20 +#: netbox/templates/dcim/poweroutlet.html:20 +#: netbox/templates/dcim/powerport.html:20 +#: netbox/templates/dcim/rearport.html:20 +#: netbox/templates/dcim/virtualchassis.html:65 +#: netbox/templates/dcim/virtualchassis_edit.html:51 +#: netbox/templates/dcim/virtualdevicecontext.html:22 +#: netbox/templates/virtualization/virtualmachine.html:114 +#: netbox/templates/vpn/tunneltermination.html:23 +#: netbox/templates/wireless/inc/wirelesslink_interface.html:6 +#: netbox/virtualization/filtersets.py:133 +#: netbox/virtualization/forms/bulk_edit.py:119 +#: netbox/virtualization/forms/bulk_import.py:105 +#: netbox/virtualization/forms/filtersets.py:133 +#: netbox/virtualization/forms/model_forms.py:192 +#: netbox/virtualization/tables/virtualmachines.py:41 netbox/vpn/choices.py:52 +#: netbox/vpn/forms/bulk_import.py:86 netbox/vpn/forms/bulk_import.py:283 +#: netbox/vpn/forms/filtersets.py:275 netbox/vpn/forms/model_forms.py:91 +#: netbox/vpn/forms/model_forms.py:126 netbox/vpn/forms/model_forms.py:237 +#: netbox/vpn/forms/model_forms.py:456 +#: netbox/wireless/forms/model_forms.py:102 +#: netbox/wireless/forms/model_forms.py:144 +#: netbox/wireless/tables/wirelesslan.py:84 +msgid "Device" +msgstr "Пристрій" + +#: netbox/circuits/views.py:356 #, python-brace-format msgid "No terminations have been defined for circuit {circuit}." msgstr "Не визначено кінців для каналу зв'язку {circuit}." -#: netbox/circuits/views.py:380 +#: netbox/circuits/views.py:405 #, python-brace-format msgid "Swapped terminations for circuit {circuit}." msgstr "Замінені місцями кінці для каналу зв'язку {circuit}." -#: netbox/core/api/views.py:39 +#: netbox/core/api/views.py:51 msgid "This user does not have permission to synchronize this data source." msgstr "Цей користувач не має дозволу на синхронізацію цього джерела даних." @@ -1616,12 +2042,13 @@ msgstr "Завершено" #: netbox/core/choices.py:22 netbox/core/choices.py:59 #: netbox/core/constants.py:20 netbox/core/tables/tasks.py:34 #: netbox/dcim/choices.py:187 netbox/dcim/choices.py:239 -#: netbox/dcim/choices.py:1609 netbox/virtualization/choices.py:47 +#: netbox/dcim/choices.py:1593 netbox/dcim/choices.py:1666 +#: netbox/virtualization/choices.py:48 msgid "Failed" msgstr "Збій" -#: netbox/core/choices.py:35 netbox/netbox/navigation/menu.py:335 -#: netbox/netbox/navigation/menu.py:339 +#: netbox/core/choices.py:35 netbox/netbox/navigation/menu.py:356 +#: netbox/netbox/navigation/menu.py:360 #: netbox/templates/extras/script/base.html:14 #: netbox/templates/extras/script_list.html:7 #: netbox/templates/extras/script_list.html:12 @@ -1651,12 +2078,36 @@ msgstr "Запущено" msgid "Errored" msgstr "Помилка" -#: netbox/core/choices.py:87 netbox/core/tables/plugins.py:63 +#: netbox/core/choices.py:82 +msgid "Minutely" +msgstr "Хвилинно" + +#: netbox/core/choices.py:83 +msgid "Hourly" +msgstr "Погодинно" + +#: netbox/core/choices.py:84 +msgid "12 hours" +msgstr "12 годин" + +#: netbox/core/choices.py:85 +msgid "Daily" +msgstr "Щодня" + +#: netbox/core/choices.py:86 +msgid "Weekly" +msgstr "Щотижневий" + +#: netbox/core/choices.py:87 +msgid "30 days" +msgstr "30 днів" + +#: netbox/core/choices.py:103 netbox/core/tables/plugins.py:63 #: netbox/templates/generic/object.html:61 msgid "Updated" msgstr "Оновлено" -#: netbox/core/choices.py:88 +#: netbox/core/choices.py:104 msgid "Deleted" msgstr "Видалено" @@ -1684,7 +2135,7 @@ msgstr "Скасовано" #: netbox/core/data_backends.py:32 netbox/core/tables/plugins.py:51 #: netbox/templates/core/plugin.html:88 -#: netbox/templates/dcim/interface.html:216 +#: netbox/templates/dcim/interface.html:273 msgid "Local" msgstr "Місцеві" @@ -1758,7 +2209,7 @@ msgstr "Джерело даних (ідентифікатор)" msgid "Data source (name)" msgstr "Джерело даних (назва)" -#: netbox/core/filtersets.py:145 netbox/dcim/filtersets.py:501 +#: netbox/core/filtersets.py:145 netbox/dcim/filtersets.py:502 #: netbox/extras/filtersets.py:287 netbox/extras/filtersets.py:331 #: netbox/extras/filtersets.py:353 netbox/extras/filtersets.py:413 #: netbox/users/filtersets.py:28 @@ -1770,12 +2221,12 @@ msgid "User name" msgstr "Ім'я користувача" #: netbox/core/forms/bulk_edit.py:25 netbox/core/forms/filtersets.py:43 -#: netbox/core/tables/data.py:26 netbox/dcim/forms/bulk_edit.py:1137 -#: netbox/dcim/forms/bulk_edit.py:1415 netbox/dcim/forms/filtersets.py:1370 -#: netbox/dcim/tables/devices.py:553 netbox/dcim/tables/devicetypes.py:224 +#: netbox/core/tables/data.py:26 netbox/dcim/forms/bulk_edit.py:1140 +#: netbox/dcim/forms/bulk_edit.py:1418 netbox/dcim/forms/filtersets.py:1375 +#: netbox/dcim/tables/devices.py:567 netbox/dcim/tables/devicetypes.py:231 #: netbox/extras/forms/bulk_edit.py:123 netbox/extras/forms/bulk_edit.py:187 -#: netbox/extras/forms/bulk_edit.py:246 netbox/extras/forms/filtersets.py:142 -#: netbox/extras/forms/filtersets.py:229 netbox/extras/forms/filtersets.py:294 +#: netbox/extras/forms/bulk_edit.py:246 netbox/extras/forms/filtersets.py:145 +#: netbox/extras/forms/filtersets.py:235 netbox/extras/forms/filtersets.py:300 #: netbox/extras/tables/tables.py:162 netbox/extras/tables/tables.py:253 #: netbox/extras/tables/tables.py:415 netbox/netbox/preferences.py:22 #: netbox/templates/core/datasource.html:42 @@ -1786,18 +2237,18 @@ msgstr "Ім'я користувача" #: netbox/templates/users/objectpermission.html:25 #: netbox/templates/virtualization/vminterface.html:29 #: netbox/users/forms/bulk_edit.py:89 netbox/users/forms/filtersets.py:70 -#: netbox/users/tables.py:83 netbox/virtualization/forms/bulk_edit.py:217 -#: netbox/virtualization/forms/filtersets.py:215 +#: netbox/users/tables.py:83 netbox/virtualization/forms/bulk_edit.py:199 +#: netbox/virtualization/forms/filtersets.py:220 msgid "Enabled" msgstr "Увімкнено" -#: netbox/core/forms/bulk_edit.py:34 netbox/extras/forms/model_forms.py:285 +#: netbox/core/forms/bulk_edit.py:34 netbox/extras/forms/model_forms.py:299 #: netbox/templates/extras/savedfilter.html:52 #: netbox/vpn/forms/filtersets.py:97 netbox/vpn/forms/filtersets.py:127 #: netbox/vpn/forms/filtersets.py:151 netbox/vpn/forms/filtersets.py:170 -#: netbox/vpn/forms/model_forms.py:301 netbox/vpn/forms/model_forms.py:321 -#: netbox/vpn/forms/model_forms.py:337 netbox/vpn/forms/model_forms.py:357 -#: netbox/vpn/forms/model_forms.py:380 +#: netbox/vpn/forms/model_forms.py:302 netbox/vpn/forms/model_forms.py:323 +#: netbox/vpn/forms/model_forms.py:339 netbox/vpn/forms/model_forms.py:360 +#: netbox/vpn/forms/model_forms.py:383 msgid "Parameters" msgstr "Параметри" @@ -1806,16 +2257,15 @@ msgid "Ignore rules" msgstr "Ігнорувати правила" #: netbox/core/forms/filtersets.py:30 netbox/core/forms/model_forms.py:97 -#: netbox/extras/forms/model_forms.py:248 -#: netbox/extras/forms/model_forms.py:578 -#: netbox/extras/forms/model_forms.py:632 netbox/extras/tables/tables.py:191 +#: netbox/extras/forms/model_forms.py:262 +#: netbox/extras/forms/model_forms.py:592 +#: netbox/extras/forms/model_forms.py:646 netbox/extras/tables/tables.py:191 #: netbox/extras/tables/tables.py:483 netbox/extras/tables/tables.py:518 #: netbox/templates/core/datasource.html:31 -#: netbox/templates/dcim/device/render_config.html:18 #: netbox/templates/extras/configcontext.html:29 #: netbox/templates/extras/configtemplate.html:21 #: netbox/templates/extras/exporttemplate.html:35 -#: netbox/templates/virtualization/virtualmachine/render_config.html:18 +#: netbox/templates/extras/object_render_config.html:19 msgid "Data Source" msgstr "Джерело даних" @@ -1824,17 +2274,17 @@ msgid "File" msgstr "Файл" #: netbox/core/forms/filtersets.py:60 netbox/core/forms/mixins.py:16 -#: netbox/extras/forms/filtersets.py:170 netbox/extras/forms/filtersets.py:328 -#: netbox/extras/forms/filtersets.py:413 +#: netbox/extras/forms/filtersets.py:174 netbox/extras/forms/filtersets.py:335 +#: netbox/extras/forms/filtersets.py:421 msgid "Data source" msgstr "Джерело даних" -#: netbox/core/forms/filtersets.py:70 netbox/extras/forms/filtersets.py:440 +#: netbox/core/forms/filtersets.py:71 netbox/extras/forms/filtersets.py:448 msgid "Creation" msgstr "Творчість" -#: netbox/core/forms/filtersets.py:74 netbox/core/forms/filtersets.py:160 -#: netbox/extras/forms/filtersets.py:461 netbox/extras/tables/tables.py:220 +#: netbox/core/forms/filtersets.py:75 netbox/core/forms/filtersets.py:161 +#: netbox/extras/forms/filtersets.py:469 netbox/extras/tables/tables.py:220 #: netbox/extras/tables/tables.py:294 netbox/extras/tables/tables.py:326 #: netbox/extras/tables/tables.py:571 netbox/templates/core/job.html:38 #: netbox/templates/core/objectchange.html:52 @@ -1842,42 +2292,42 @@ msgstr "Творчість" msgid "Object Type" msgstr "Тип об'єкта" -#: netbox/core/forms/filtersets.py:84 +#: netbox/core/forms/filtersets.py:85 msgid "Created after" msgstr "Створено після" -#: netbox/core/forms/filtersets.py:89 +#: netbox/core/forms/filtersets.py:90 msgid "Created before" msgstr "Створено раніше" -#: netbox/core/forms/filtersets.py:94 +#: netbox/core/forms/filtersets.py:95 msgid "Scheduled after" msgstr "Заплановано після" -#: netbox/core/forms/filtersets.py:99 +#: netbox/core/forms/filtersets.py:100 msgid "Scheduled before" msgstr "Заплановано раніше" -#: netbox/core/forms/filtersets.py:104 +#: netbox/core/forms/filtersets.py:105 msgid "Started after" msgstr "Почнється після" -#: netbox/core/forms/filtersets.py:109 +#: netbox/core/forms/filtersets.py:110 msgid "Started before" msgstr "Почнється раніше" -#: netbox/core/forms/filtersets.py:114 +#: netbox/core/forms/filtersets.py:115 msgid "Completed after" msgstr "Завершено після" -#: netbox/core/forms/filtersets.py:119 +#: netbox/core/forms/filtersets.py:120 msgid "Completed before" msgstr "Завершено раніше" -#: netbox/core/forms/filtersets.py:126 netbox/core/forms/filtersets.py:155 -#: netbox/dcim/forms/bulk_edit.py:462 netbox/dcim/forms/filtersets.py:418 -#: netbox/dcim/forms/filtersets.py:462 netbox/dcim/forms/model_forms.py:316 -#: netbox/extras/forms/filtersets.py:456 netbox/extras/forms/filtersets.py:475 +#: netbox/core/forms/filtersets.py:127 netbox/core/forms/filtersets.py:156 +#: netbox/dcim/forms/bulk_edit.py:465 netbox/dcim/forms/filtersets.py:419 +#: netbox/dcim/forms/filtersets.py:463 netbox/dcim/forms/model_forms.py:324 +#: netbox/extras/forms/filtersets.py:464 netbox/extras/forms/filtersets.py:484 #: netbox/extras/tables/tables.py:302 netbox/extras/tables/tables.py:342 #: netbox/templates/core/objectchange.html:36 #: netbox/templates/dcim/rackreservation.html:58 @@ -1891,22 +2341,22 @@ msgstr "Завершено раніше" msgid "User" msgstr "Користувач" -#: netbox/core/forms/filtersets.py:134 netbox/core/tables/change_logging.py:15 +#: netbox/core/forms/filtersets.py:135 netbox/core/tables/change_logging.py:15 #: netbox/extras/tables/tables.py:609 netbox/extras/tables/tables.py:646 #: netbox/templates/core/objectchange.html:32 msgid "Time" msgstr "Час" -#: netbox/core/forms/filtersets.py:139 netbox/extras/forms/filtersets.py:445 +#: netbox/core/forms/filtersets.py:140 netbox/extras/forms/filtersets.py:453 msgid "After" msgstr "Після" -#: netbox/core/forms/filtersets.py:144 netbox/extras/forms/filtersets.py:450 +#: netbox/core/forms/filtersets.py:145 netbox/extras/forms/filtersets.py:458 msgid "Before" msgstr "Раніше" -#: netbox/core/forms/filtersets.py:148 netbox/core/tables/change_logging.py:29 -#: netbox/extras/forms/model_forms.py:396 +#: netbox/core/forms/filtersets.py:149 netbox/core/tables/change_logging.py:29 +#: netbox/extras/forms/model_forms.py:410 #: netbox/templates/core/objectchange.html:46 #: netbox/templates/extras/eventrule.html:71 msgid "Action" @@ -1940,22 +2390,22 @@ msgstr "Потрібно вивантажити файл або вибрати msgid "Rack Elevations" msgstr "Висота стійки" -#: netbox/core/forms/model_forms.py:157 netbox/dcim/choices.py:1520 -#: netbox/dcim/forms/bulk_edit.py:984 netbox/dcim/forms/bulk_edit.py:1372 -#: netbox/dcim/forms/bulk_edit.py:1390 netbox/dcim/tables/racks.py:158 -#: netbox/netbox/navigation/menu.py:291 netbox/netbox/navigation/menu.py:295 +#: netbox/core/forms/model_forms.py:157 netbox/dcim/choices.py:1522 +#: netbox/dcim/forms/bulk_edit.py:987 netbox/dcim/forms/bulk_edit.py:1375 +#: netbox/dcim/forms/bulk_edit.py:1393 netbox/dcim/tables/racks.py:157 +#: netbox/netbox/navigation/menu.py:312 netbox/netbox/navigation/menu.py:316 msgid "Power" msgstr "Електрика" -#: netbox/core/forms/model_forms.py:159 netbox/netbox/navigation/menu.py:154 +#: netbox/core/forms/model_forms.py:159 netbox/netbox/navigation/menu.py:160 #: netbox/templates/core/inc/config_data.html:37 msgid "IPAM" msgstr "IPAM" -#: netbox/core/forms/model_forms.py:160 netbox/netbox/navigation/menu.py:230 +#: netbox/core/forms/model_forms.py:160 netbox/netbox/navigation/menu.py:238 #: netbox/templates/core/inc/config_data.html:50 #: netbox/vpn/forms/bulk_edit.py:77 netbox/vpn/forms/filtersets.py:43 -#: netbox/vpn/forms/model_forms.py:61 netbox/vpn/forms/model_forms.py:146 +#: netbox/vpn/forms/model_forms.py:62 netbox/vpn/forms/model_forms.py:147 msgid "Security" msgstr "Безпека" @@ -1970,7 +2420,7 @@ msgid "Pagination" msgstr "Нумерація сторінок" #: netbox/core/forms/model_forms.py:163 netbox/extras/forms/bulk_edit.py:92 -#: netbox/extras/forms/filtersets.py:47 netbox/extras/forms/model_forms.py:116 +#: netbox/extras/forms/filtersets.py:48 netbox/extras/forms/model_forms.py:116 #: netbox/extras/forms/model_forms.py:129 #: netbox/templates/core/inc/config_data.html:93 msgid "Validation" @@ -1981,7 +2431,7 @@ msgstr "Перевірка" msgid "User Preferences" msgstr "Параметри користувача" -#: netbox/core/forms/model_forms.py:167 netbox/dcim/forms/filtersets.py:732 +#: netbox/core/forms/model_forms.py:167 netbox/dcim/forms/filtersets.py:733 #: netbox/templates/core/inc/config_data.html:127 #: netbox/users/forms/model_forms.py:64 msgid "Miscellaneous" @@ -2016,7 +2466,7 @@ msgstr "ім'я користувача" msgid "request ID" msgstr "Ідентифікатор запиту" -#: netbox/core/models/change_logging.py:52 netbox/extras/models/staging.py:69 +#: netbox/core/models/change_logging.py:52 netbox/extras/models/staging.py:77 msgid "action" msgstr "дія" @@ -2041,9 +2491,9 @@ msgstr "змін об'єкта" msgid "Change logging is not supported for this object type ({type})." msgstr "Журнал змін не підтримується для цього типу об'єктів ({type})." -#: netbox/core/models/config.py:18 netbox/core/models/data.py:266 +#: netbox/core/models/config.py:18 netbox/core/models/data.py:263 #: netbox/core/models/files.py:27 netbox/core/models/jobs.py:50 -#: netbox/extras/models/models.py:730 netbox/extras/models/notifications.py:39 +#: netbox/extras/models/models.py:733 netbox/extras/models/notifications.py:39 #: netbox/extras/models/notifications.py:186 #: netbox/netbox/models/features.py:53 netbox/users/models/tokens.py:32 msgid "created" @@ -2078,24 +2528,24 @@ msgstr "Поточне налаштування" msgid "Config revision #{id}" msgstr "Ревізія конфігурації #{id}" -#: netbox/core/models/data.py:44 netbox/dcim/models/cables.py:43 -#: netbox/dcim/models/device_component_templates.py:203 -#: netbox/dcim/models/device_component_templates.py:237 -#: netbox/dcim/models/device_component_templates.py:272 -#: netbox/dcim/models/device_component_templates.py:334 -#: netbox/dcim/models/device_component_templates.py:413 -#: netbox/dcim/models/device_component_templates.py:512 -#: netbox/dcim/models/device_component_templates.py:612 -#: netbox/dcim/models/device_components.py:283 -#: netbox/dcim/models/device_components.py:312 -#: netbox/dcim/models/device_components.py:345 -#: netbox/dcim/models/device_components.py:463 -#: netbox/dcim/models/device_components.py:605 -#: netbox/dcim/models/device_components.py:970 -#: netbox/dcim/models/device_components.py:1044 -#: netbox/dcim/models/power.py:102 netbox/extras/models/customfields.py:78 +#: netbox/core/models/data.py:44 netbox/dcim/models/cables.py:44 +#: netbox/dcim/models/device_component_templates.py:199 +#: netbox/dcim/models/device_component_templates.py:234 +#: netbox/dcim/models/device_component_templates.py:270 +#: netbox/dcim/models/device_component_templates.py:335 +#: netbox/dcim/models/device_component_templates.py:420 +#: netbox/dcim/models/device_component_templates.py:526 +#: netbox/dcim/models/device_component_templates.py:626 +#: netbox/dcim/models/device_components.py:279 +#: netbox/dcim/models/device_components.py:306 +#: netbox/dcim/models/device_components.py:337 +#: netbox/dcim/models/device_components.py:453 +#: netbox/dcim/models/device_components.py:653 +#: netbox/dcim/models/device_components.py:1021 +#: netbox/dcim/models/device_components.py:1092 +#: netbox/dcim/models/power.py:100 netbox/extras/models/customfields.py:78 #: netbox/extras/models/search.py:41 -#: netbox/virtualization/models/clusters.py:61 netbox/vpn/models/l2vpn.py:32 +#: netbox/virtualization/models/clusters.py:57 netbox/vpn/models/l2vpn.py:32 msgid "type" msgstr "тип" @@ -2107,8 +2557,8 @@ msgid "URL" msgstr "URL" #: netbox/core/models/data.py:59 -#: netbox/dcim/models/device_component_templates.py:418 -#: netbox/dcim/models/device_components.py:512 +#: netbox/dcim/models/device_component_templates.py:425 +#: netbox/dcim/models/device_components.py:505 #: netbox/extras/models/models.py:70 netbox/extras/models/models.py:301 #: netbox/extras/models/models.py:526 netbox/users/models/permissions.py:29 msgid "enabled" @@ -2140,64 +2590,64 @@ msgstr "джерело даних" msgid "data sources" msgstr "джерела даних" -#: netbox/core/models/data.py:122 +#: netbox/core/models/data.py:119 #, python-brace-format msgid "Unknown backend type: {type}" msgstr "Невідомий тип бекенда: {type}" -#: netbox/core/models/data.py:164 +#: netbox/core/models/data.py:161 msgid "Cannot initiate sync; syncing already in progress." msgstr "Не вдається ініціювати синхронізацію; бо синхронізація вже триває." -#: netbox/core/models/data.py:177 +#: netbox/core/models/data.py:174 msgid "" "There was an error initializing the backend. A dependency needs to be " "installed: " msgstr "" "Виникла помилка при ініціалізації бекенду. Необхідно встановити залежність: " -#: netbox/core/models/data.py:270 netbox/core/models/files.py:31 +#: netbox/core/models/data.py:267 netbox/core/models/files.py:31 #: netbox/netbox/models/features.py:59 msgid "last updated" msgstr "останнє оновлення" -#: netbox/core/models/data.py:280 netbox/dcim/models/cables.py:444 +#: netbox/core/models/data.py:277 netbox/dcim/models/cables.py:446 msgid "path" msgstr "доріжка" -#: netbox/core/models/data.py:283 +#: netbox/core/models/data.py:280 msgid "File path relative to the data source's root" msgstr "Шлях до файлу відносно кореня джерела даних" -#: netbox/core/models/data.py:287 netbox/ipam/models/ip.py:503 +#: netbox/core/models/data.py:284 netbox/ipam/models/ip.py:489 msgid "size" msgstr "розмір" -#: netbox/core/models/data.py:290 +#: netbox/core/models/data.py:287 msgid "hash" msgstr "хеш" -#: netbox/core/models/data.py:294 +#: netbox/core/models/data.py:291 msgid "Length must be 64 hexadecimal characters." msgstr "Довжина повинна становити 64 шістнадцяткові символи." -#: netbox/core/models/data.py:296 +#: netbox/core/models/data.py:293 msgid "SHA256 hash of the file data" msgstr "SHA256 хеш даних файлу" -#: netbox/core/models/data.py:313 +#: netbox/core/models/data.py:310 msgid "data file" msgstr "файл даних" -#: netbox/core/models/data.py:314 +#: netbox/core/models/data.py:311 msgid "data files" msgstr "файли даних" -#: netbox/core/models/data.py:401 +#: netbox/core/models/data.py:398 msgid "auto sync record" msgstr "автоматична синхронізація запису" -#: netbox/core/models/data.py:402 +#: netbox/core/models/data.py:399 msgid "auto sync records" msgstr "автоматична синхронізація записів" @@ -2221,6 +2671,11 @@ msgstr "керований файл" msgid "managed files" msgstr "керовані файли" +#: netbox/core/models/files.py:100 +#, python-brace-format +msgid "A {model} with this file path already exists ({path})." +msgstr "А {model} з цим файлом шлях вже існує ({path})." + #: netbox/core/models/jobs.py:54 msgid "scheduled" msgstr "заплановано" @@ -2242,7 +2697,7 @@ msgid "completed" msgstr "завершено" #: netbox/core/models/jobs.py:91 netbox/extras/models/models.py:101 -#: netbox/extras/models/staging.py:87 +#: netbox/extras/models/staging.py:95 msgid "data" msgstr "дані" @@ -2273,7 +2728,7 @@ msgid "Invalid status for job termination. Choices are: {choices}" msgstr "" "Невірний статус для припинення виконання завдання. Треба вибрати: {choices}" -#: netbox/core/models/jobs.py:221 +#: netbox/core/models/jobs.py:231 msgid "" "enqueue() cannot be called with values for both schedule_at and immediate." msgstr "" @@ -2296,7 +2751,7 @@ msgstr "П.І.Б." #: netbox/extras/tables/tables.py:297 netbox/extras/tables/tables.py:329 #: netbox/extras/tables/tables.py:409 netbox/extras/tables/tables.py:470 #: netbox/extras/tables/tables.py:576 netbox/extras/tables/tables.py:616 -#: netbox/extras/tables/tables.py:653 netbox/netbox/tables/tables.py:244 +#: netbox/extras/tables/tables.py:653 netbox/netbox/tables/tables.py:247 #: netbox/templates/core/objectchange.html:58 #: netbox/templates/extras/eventrule.html:78 #: netbox/templates/extras/journalentry.html:18 @@ -2324,11 +2779,11 @@ msgid "Last updated" msgstr "Останнє оновлення" #: netbox/core/tables/jobs.py:10 netbox/core/tables/tasks.py:76 -#: netbox/dcim/tables/devicetypes.py:164 netbox/extras/tables/tables.py:216 -#: netbox/extras/tables/tables.py:460 netbox/netbox/tables/tables.py:189 +#: netbox/dcim/tables/devicetypes.py:169 netbox/extras/tables/tables.py:216 +#: netbox/extras/tables/tables.py:460 netbox/netbox/tables/tables.py:192 #: netbox/templates/dcim/virtualchassis_edit.html:52 #: netbox/utilities/forms/forms.py:73 -#: netbox/wireless/tables/wirelesslink.py:17 +#: netbox/wireless/tables/wirelesslink.py:16 msgid "ID" msgstr "Ідентифікатор" @@ -2394,7 +2849,7 @@ msgstr "Робочі процеси" msgid "Host" msgstr "Ведучий" -#: netbox/core/tables/tasks.py:50 netbox/ipam/forms/filtersets.py:535 +#: netbox/core/tables/tasks.py:50 netbox/ipam/forms/filtersets.py:587 msgid "Port" msgstr "Порт" @@ -2442,71 +2897,84 @@ msgstr "PID" msgid "No workers found" msgstr "Робочих процессів не знайдено" -#: netbox/core/views.py:90 -#, python-brace-format -msgid "Queued job #{id} to sync {datasource}" -msgstr "Завдання у черзі #{id} синхронізовано з {datasource}" - -#: netbox/core/views.py:319 -#, python-brace-format -msgid "Restored configuration revision #{id}" -msgstr "Відновлена версія конфігурації #{id}" - -#: netbox/core/views.py:412 netbox/core/views.py:455 netbox/core/views.py:531 +#: netbox/core/utils.py:84 netbox/core/utils.py:150 netbox/core/views.py:396 #, python-brace-format msgid "Job {job_id} not found" msgstr "Завдання {job_id} не знайдено" -#: netbox/core/views.py:463 -#, python-brace-format -msgid "Job {id} has been deleted." -msgstr "Завдання {id} було видалено." - -#: netbox/core/views.py:465 -#, python-brace-format -msgid "Error deleting job {id}: {error}" -msgstr "Помилка при видаленні завдання {id}: {error}" - -#: netbox/core/views.py:478 netbox/core/views.py:496 +#: netbox/core/utils.py:102 netbox/core/utils.py:118 #, python-brace-format msgid "Job {id} not found." msgstr "Завдання {id} не знайдено." -#: netbox/core/views.py:484 +#: netbox/core/views.py:88 +#, python-brace-format +msgid "Queued job #{id} to sync {datasource}" +msgstr "Завдання у черзі #{id} синхронізовано з {datasource}" + +#: netbox/core/views.py:332 +#, python-brace-format +msgid "Restored configuration revision #{id}" +msgstr "Відновлена версія конфігурації #{id}" + +#: netbox/core/views.py:435 +#, python-brace-format +msgid "Job {id} has been deleted." +msgstr "Завдання {id} було видалено." + +#: netbox/core/views.py:437 +#, python-brace-format +msgid "Error deleting job {id}: {error}" +msgstr "Помилка при видаленні завдання {id}: {error}" + +#: netbox/core/views.py:446 #, python-brace-format msgid "Job {id} has been re-enqueued." msgstr "Завдання {id} було знову поставлено в чергу." -#: netbox/core/views.py:519 +#: netbox/core/views.py:455 #, python-brace-format msgid "Job {id} has been enqueued." msgstr "Завдання {id} був поставлений у чергу." -#: netbox/core/views.py:538 +#: netbox/core/views.py:464 #, python-brace-format msgid "Job {id} has been stopped." msgstr "Завдання {id} було зупинено." -#: netbox/core/views.py:540 +#: netbox/core/views.py:466 #, python-brace-format msgid "Failed to stop job {id}" msgstr "Не вдалося зупинити завдання {id}" -#: netbox/core/views.py:674 +#: netbox/core/views.py:601 msgid "Plugins catalog could not be loaded" msgstr "Не вдалося завантажити каталог плагінів" -#: netbox/core/views.py:708 +#: netbox/core/views.py:635 #, python-brace-format msgid "Plugin {name} not found" msgstr "Плагін {name} не знайдено" -#: netbox/dcim/api/serializers_/devices.py:49 -#: netbox/dcim/api/serializers_/devicetypes.py:25 +#: netbox/dcim/api/serializers_/device_components.py:262 +msgid "Interface mode does not support q-in-q service vlan" +msgstr "Режим інтерфейсу не підтримує службу q-in-q vlan" + +#: netbox/dcim/api/serializers_/device_components.py:269 +msgid "Interface mode does not support untagged vlan" +msgstr "Режим інтерфейсу не підтримує vlan без тегів" + +#: netbox/dcim/api/serializers_/device_components.py:274 +#: netbox/dcim/api/serializers_/device_components.py:279 +msgid "Interface mode does not support tagged vlans" +msgstr "Режим інтерфейсу не підтримує теговані vlans" + +#: netbox/dcim/api/serializers_/devices.py:53 +#: netbox/dcim/api/serializers_/devicetypes.py:26 msgid "Position (U)" msgstr "Позиція (U)" -#: netbox/dcim/api/serializers_/racks.py:112 +#: netbox/dcim/api/serializers_/racks.py:113 #: netbox/templates/dcim/rack.html:28 msgid "Facility ID" msgstr "Ідентифікатор об'єкта" @@ -2516,8 +2984,9 @@ msgid "Staging" msgstr "Підготовка" #: netbox/dcim/choices.py:23 netbox/dcim/choices.py:189 -#: netbox/dcim/choices.py:240 netbox/dcim/choices.py:1533 -#: netbox/virtualization/choices.py:23 netbox/virtualization/choices.py:48 +#: netbox/dcim/choices.py:240 netbox/dcim/choices.py:1535 +#: netbox/dcim/choices.py:1667 netbox/virtualization/choices.py:23 +#: netbox/virtualization/choices.py:49 msgid "Decommissioning" msgstr "Виведення з експлуатації" @@ -2580,7 +3049,7 @@ msgstr "Застарілий" msgid "Millimeters" msgstr "Міліметри" -#: netbox/dcim/choices.py:115 netbox/dcim/choices.py:1555 +#: netbox/dcim/choices.py:115 netbox/dcim/choices.py:1557 msgid "Inches" msgstr "Дюйми" @@ -2594,21 +3063,21 @@ msgstr "Спереду ззаду" msgid "Rear to front" msgstr "Ззаду спереду" -#: netbox/dcim/choices.py:151 netbox/dcim/forms/bulk_edit.py:69 -#: netbox/dcim/forms/bulk_edit.py:88 netbox/dcim/forms/bulk_edit.py:174 -#: netbox/dcim/forms/bulk_edit.py:1420 netbox/dcim/forms/bulk_import.py:60 -#: netbox/dcim/forms/bulk_import.py:74 netbox/dcim/forms/bulk_import.py:137 -#: netbox/dcim/forms/bulk_import.py:588 netbox/dcim/forms/bulk_import.py:855 -#: netbox/dcim/forms/bulk_import.py:1110 netbox/dcim/forms/filtersets.py:234 -#: netbox/dcim/forms/model_forms.py:74 netbox/dcim/forms/model_forms.py:93 -#: netbox/dcim/forms/model_forms.py:170 netbox/dcim/forms/model_forms.py:1069 -#: netbox/dcim/forms/model_forms.py:1509 -#: netbox/dcim/forms/object_import.py:176 netbox/dcim/tables/devices.py:656 -#: netbox/dcim/tables/devices.py:869 netbox/dcim/tables/devices.py:954 -#: netbox/extras/tables/tables.py:223 netbox/ipam/tables/fhrp.py:59 -#: netbox/ipam/tables/ip.py:378 netbox/ipam/tables/services.py:44 -#: netbox/templates/dcim/interface.html:102 -#: netbox/templates/dcim/interface.html:309 +#: netbox/dcim/choices.py:151 netbox/dcim/forms/bulk_edit.py:72 +#: netbox/dcim/forms/bulk_edit.py:91 netbox/dcim/forms/bulk_edit.py:177 +#: netbox/dcim/forms/bulk_edit.py:1423 netbox/dcim/forms/bulk_import.py:62 +#: netbox/dcim/forms/bulk_import.py:76 netbox/dcim/forms/bulk_import.py:139 +#: netbox/dcim/forms/bulk_import.py:593 netbox/dcim/forms/bulk_import.py:863 +#: netbox/dcim/forms/bulk_import.py:1118 netbox/dcim/forms/filtersets.py:235 +#: netbox/dcim/forms/model_forms.py:76 netbox/dcim/forms/model_forms.py:95 +#: netbox/dcim/forms/model_forms.py:174 netbox/dcim/forms/model_forms.py:1082 +#: netbox/dcim/forms/model_forms.py:1551 +#: netbox/dcim/forms/object_import.py:177 netbox/dcim/tables/devices.py:690 +#: netbox/dcim/tables/devices.py:900 netbox/dcim/tables/devices.py:987 +#: netbox/dcim/tables/devices.py:1147 netbox/extras/tables/tables.py:223 +#: netbox/ipam/tables/fhrp.py:59 netbox/ipam/tables/ip.py:330 +#: netbox/ipam/tables/services.py:44 netbox/templates/dcim/interface.html:108 +#: netbox/templates/dcim/interface.html:366 #: netbox/templates/dcim/location.html:41 netbox/templates/dcim/region.html:37 #: netbox/templates/dcim/sitegroup.html:37 #: netbox/templates/ipam/service.html:28 @@ -2621,12 +3090,12 @@ msgstr "Ззаду спереду" #: netbox/tenancy/forms/bulk_import.py:58 #: netbox/tenancy/forms/model_forms.py:25 #: netbox/tenancy/forms/model_forms.py:68 -#: netbox/virtualization/forms/bulk_edit.py:207 -#: netbox/virtualization/forms/bulk_import.py:151 -#: netbox/virtualization/tables/virtualmachines.py:162 -#: netbox/wireless/forms/bulk_edit.py:24 -#: netbox/wireless/forms/bulk_import.py:21 -#: netbox/wireless/forms/model_forms.py:21 +#: netbox/virtualization/forms/bulk_edit.py:189 +#: netbox/virtualization/forms/bulk_import.py:157 +#: netbox/virtualization/tables/virtualmachines.py:132 +#: netbox/wireless/forms/bulk_edit.py:26 +#: netbox/wireless/forms/bulk_import.py:23 +#: netbox/wireless/forms/model_forms.py:22 msgid "Parent" msgstr "Прабатько" @@ -2649,7 +3118,7 @@ msgid "Rear" msgstr "Ззаду" #: netbox/dcim/choices.py:186 netbox/dcim/choices.py:238 -#: netbox/virtualization/choices.py:46 +#: netbox/dcim/choices.py:1665 netbox/virtualization/choices.py:47 msgid "Staged" msgstr "Підготовлено" @@ -2682,7 +3151,7 @@ msgid "Top to bottom" msgstr "Зверху вниз" #: netbox/dcim/choices.py:215 netbox/dcim/choices.py:259 -#: netbox/dcim/choices.py:1305 +#: netbox/dcim/choices.py:1307 msgid "Passive" msgstr "Пасивний" @@ -2712,8 +3181,8 @@ msgstr "Пропрієтарний" #: netbox/dcim/choices.py:581 netbox/dcim/choices.py:824 #: netbox/dcim/choices.py:1221 netbox/dcim/choices.py:1223 -#: netbox/dcim/choices.py:1449 netbox/dcim/choices.py:1451 -#: netbox/netbox/navigation/menu.py:200 +#: netbox/dcim/choices.py:1451 netbox/dcim/choices.py:1453 +#: netbox/netbox/navigation/menu.py:208 msgid "Other" msgstr "Інше" @@ -2730,10 +3199,10 @@ msgid "Virtual" msgstr "Віртуальний" #: netbox/dcim/choices.py:856 netbox/dcim/choices.py:1099 -#: netbox/dcim/forms/bulk_edit.py:1563 netbox/dcim/forms/filtersets.py:1330 -#: netbox/dcim/forms/model_forms.py:995 netbox/dcim/forms/model_forms.py:1404 -#: netbox/netbox/navigation/menu.py:140 netbox/netbox/navigation/menu.py:144 -#: netbox/templates/dcim/interface.html:210 +#: netbox/dcim/forms/bulk_edit.py:1578 netbox/dcim/forms/filtersets.py:1335 +#: netbox/dcim/forms/model_forms.py:1007 netbox/dcim/forms/model_forms.py:1445 +#: netbox/netbox/navigation/menu.py:146 netbox/netbox/navigation/menu.py:150 +#: netbox/templates/dcim/interface.html:267 msgid "Wireless" msgstr "Бездротові мережі" @@ -2741,13 +3210,13 @@ msgstr "Бездротові мережі" msgid "Virtual interfaces" msgstr "Віртуальні інтерфейси" -#: netbox/dcim/choices.py:1025 netbox/dcim/forms/bulk_edit.py:1428 -#: netbox/dcim/forms/bulk_import.py:862 netbox/dcim/forms/model_forms.py:981 -#: netbox/dcim/tables/devices.py:660 netbox/templates/dcim/interface.html:106 +#: netbox/dcim/choices.py:1025 netbox/dcim/forms/bulk_edit.py:1431 +#: netbox/dcim/forms/bulk_import.py:870 netbox/dcim/forms/model_forms.py:993 +#: netbox/dcim/tables/devices.py:694 netbox/templates/dcim/interface.html:112 #: netbox/templates/virtualization/vminterface.html:43 -#: netbox/virtualization/forms/bulk_edit.py:212 -#: netbox/virtualization/forms/bulk_import.py:158 -#: netbox/virtualization/tables/virtualmachines.py:166 +#: netbox/virtualization/forms/bulk_edit.py:194 +#: netbox/virtualization/forms/bulk_import.py:164 +#: netbox/virtualization/tables/virtualmachines.py:136 msgid "Bridge" msgstr "Міст" @@ -2771,10 +3240,10 @@ msgstr "Ethernet (панель)" msgid "Cellular" msgstr "Стільниковий" -#: netbox/dcim/choices.py:1167 netbox/dcim/forms/filtersets.py:383 -#: netbox/dcim/forms/filtersets.py:809 netbox/dcim/forms/filtersets.py:963 -#: netbox/dcim/forms/filtersets.py:1542 -#: netbox/templates/dcim/inventoryitem.html:52 +#: netbox/dcim/choices.py:1167 netbox/dcim/forms/filtersets.py:384 +#: netbox/dcim/forms/filtersets.py:810 netbox/dcim/forms/filtersets.py:964 +#: netbox/dcim/forms/filtersets.py:1547 +#: netbox/templates/dcim/inventoryitem.html:56 #: netbox/templates/dcim/virtualchassis_edit.html:54 msgid "Serial" msgstr "Серійний" @@ -2800,109 +3269,95 @@ msgstr "Повний" msgid "Auto" msgstr "Авто" -#: netbox/dcim/choices.py:1265 +#: netbox/dcim/choices.py:1266 msgid "Access" msgstr "Доступ" -#: netbox/dcim/choices.py:1266 netbox/ipam/tables/vlans.py:172 -#: netbox/ipam/tables/vlans.py:217 +#: netbox/dcim/choices.py:1267 netbox/ipam/tables/vlans.py:148 +#: netbox/ipam/tables/vlans.py:193 #: netbox/templates/dcim/inc/interface_vlans_table.html:7 msgid "Tagged" msgstr "З мітками" -#: netbox/dcim/choices.py:1267 +#: netbox/dcim/choices.py:1268 msgid "Tagged (All)" msgstr "З мітками (Усі)" -#: netbox/dcim/choices.py:1296 +#: netbox/dcim/choices.py:1269 netbox/templates/ipam/vlan_edit.html:22 +msgid "Q-in-Q (802.1ad)" +msgstr "К-в-кв. (802.1ad)" + +#: netbox/dcim/choices.py:1298 msgid "IEEE Standard" msgstr "Стандарт IEEE" -#: netbox/dcim/choices.py:1307 +#: netbox/dcim/choices.py:1309 msgid "Passive 24V (2-pair)" msgstr "Пасивний 24В (2-парний)" -#: netbox/dcim/choices.py:1308 +#: netbox/dcim/choices.py:1310 msgid "Passive 24V (4-pair)" msgstr "Пасивний 24В (4-парний)" -#: netbox/dcim/choices.py:1309 +#: netbox/dcim/choices.py:1311 msgid "Passive 48V (2-pair)" msgstr "Пасивний 48В (2-парний)" -#: netbox/dcim/choices.py:1310 +#: netbox/dcim/choices.py:1312 msgid "Passive 48V (4-pair)" msgstr "Пасивний 48В (4-парний)" -#: netbox/dcim/choices.py:1380 netbox/dcim/choices.py:1490 +#: netbox/dcim/choices.py:1382 netbox/dcim/choices.py:1492 msgid "Copper" msgstr "Мідний" -#: netbox/dcim/choices.py:1403 +#: netbox/dcim/choices.py:1405 msgid "Fiber Optic" msgstr "Волоконно-оптичний" -#: netbox/dcim/choices.py:1436 netbox/dcim/choices.py:1519 +#: netbox/dcim/choices.py:1438 netbox/dcim/choices.py:1521 msgid "USB" msgstr "USB" -#: netbox/dcim/choices.py:1506 +#: netbox/dcim/choices.py:1508 msgid "Fiber" msgstr "Волоконний" -#: netbox/dcim/choices.py:1531 netbox/dcim/forms/filtersets.py:1227 +#: netbox/dcim/choices.py:1533 netbox/dcim/forms/filtersets.py:1228 msgid "Connected" msgstr "Підключений" -#: netbox/dcim/choices.py:1550 netbox/wireless/choices.py:497 +#: netbox/dcim/choices.py:1552 netbox/netbox/choices.py:175 msgid "Kilometers" msgstr "Кілометри" -#: netbox/dcim/choices.py:1551 netbox/templates/dcim/cable_trace.html:65 -#: netbox/wireless/choices.py:498 +#: netbox/dcim/choices.py:1553 netbox/netbox/choices.py:176 +#: netbox/templates/dcim/cable_trace.html:65 msgid "Meters" msgstr "Метри" -#: netbox/dcim/choices.py:1552 +#: netbox/dcim/choices.py:1554 msgid "Centimeters" msgstr "Сантиметри" -#: netbox/dcim/choices.py:1553 netbox/wireless/choices.py:499 +#: netbox/dcim/choices.py:1555 netbox/netbox/choices.py:177 msgid "Miles" msgstr "Милі" -#: netbox/dcim/choices.py:1554 netbox/templates/dcim/cable_trace.html:66 -#: netbox/wireless/choices.py:500 +#: netbox/dcim/choices.py:1556 netbox/netbox/choices.py:178 +#: netbox/templates/dcim/cable_trace.html:66 msgid "Feet" msgstr "Фути" -#: netbox/dcim/choices.py:1570 netbox/templates/dcim/device.html:327 -#: netbox/templates/dcim/rack.html:107 -msgid "Kilograms" -msgstr "Кілограми" - -#: netbox/dcim/choices.py:1571 -msgid "Grams" -msgstr "Грами" - -#: netbox/dcim/choices.py:1572 netbox/templates/dcim/device.html:328 -#: netbox/templates/dcim/rack.html:108 -msgid "Pounds" -msgstr "Фунтів" - -#: netbox/dcim/choices.py:1573 -msgid "Ounces" -msgstr "Унцій" - -#: netbox/dcim/choices.py:1620 +#: netbox/dcim/choices.py:1604 msgid "Redundant" msgstr "Надлишковий" -#: netbox/dcim/choices.py:1641 +#: netbox/dcim/choices.py:1625 msgid "Single phase" msgstr "Однофазний" -#: netbox/dcim/choices.py:1642 +#: netbox/dcim/choices.py:1626 msgid "Three-phase" msgstr "Трифазний" @@ -2916,335 +3371,319 @@ msgstr "Невірний формат MAC-адреси: {value}" msgid "Invalid WWN format: {value}" msgstr "Невірний формат WWN: {value}" -#: netbox/dcim/filtersets.py:86 +#: netbox/dcim/filtersets.py:87 msgid "Parent region (ID)" msgstr "Батьківський регіон (ідентифікатор)" -#: netbox/dcim/filtersets.py:92 +#: netbox/dcim/filtersets.py:93 msgid "Parent region (slug)" msgstr "Батьківський регіон (скорочення)" -#: netbox/dcim/filtersets.py:116 +#: netbox/dcim/filtersets.py:117 msgid "Parent site group (ID)" msgstr "Батьківська група тех. майданчиків (ідентифікатор)" -#: netbox/dcim/filtersets.py:122 +#: netbox/dcim/filtersets.py:123 msgid "Parent site group (slug)" msgstr "Батьківська група тех. майданчиків (скорочення)" -#: netbox/dcim/filtersets.py:164 netbox/extras/filtersets.py:364 -#: netbox/ipam/filtersets.py:843 netbox/ipam/filtersets.py:995 +#: netbox/dcim/filtersets.py:165 netbox/extras/filtersets.py:364 +#: netbox/ipam/filtersets.py:810 netbox/ipam/filtersets.py:962 msgid "Group (ID)" msgstr "Група (ідентифікатор)" -#: netbox/dcim/filtersets.py:170 +#: netbox/dcim/filtersets.py:171 msgid "Group (slug)" msgstr "Група (скорочення)" -#: netbox/dcim/filtersets.py:176 netbox/dcim/filtersets.py:181 +#: netbox/dcim/filtersets.py:177 netbox/dcim/filtersets.py:182 msgid "AS (ID)" msgstr "AS (ідентифікатор)" -#: netbox/dcim/filtersets.py:246 +#: netbox/dcim/filtersets.py:247 msgid "Parent location (ID)" msgstr "Батьківське місцезнаходження (ідентифікатор)" -#: netbox/dcim/filtersets.py:252 +#: netbox/dcim/filtersets.py:253 msgid "Parent location (slug)" msgstr "Батьківське розташування (скорочення)" -#: netbox/dcim/filtersets.py:258 netbox/dcim/filtersets.py:369 -#: netbox/dcim/filtersets.py:490 netbox/dcim/filtersets.py:1057 -#: netbox/dcim/filtersets.py:1404 netbox/dcim/filtersets.py:2182 -msgid "Location (ID)" -msgstr "Місцезнаходження (ідентифікатор)" - -#: netbox/dcim/filtersets.py:265 netbox/dcim/filtersets.py:376 -#: netbox/dcim/filtersets.py:497 netbox/dcim/filtersets.py:1410 -#: netbox/extras/filtersets.py:542 -msgid "Location (slug)" -msgstr "Місцезнаходження (скорочення)" - -#: netbox/dcim/filtersets.py:296 netbox/dcim/filtersets.py:381 -#: netbox/dcim/filtersets.py:539 netbox/dcim/filtersets.py:678 -#: netbox/dcim/filtersets.py:882 netbox/dcim/filtersets.py:933 -#: netbox/dcim/filtersets.py:973 netbox/dcim/filtersets.py:1306 -#: netbox/dcim/filtersets.py:1840 +#: netbox/dcim/filtersets.py:297 netbox/dcim/filtersets.py:382 +#: netbox/dcim/filtersets.py:540 netbox/dcim/filtersets.py:679 +#: netbox/dcim/filtersets.py:883 netbox/dcim/filtersets.py:934 +#: netbox/dcim/filtersets.py:974 netbox/dcim/filtersets.py:1308 +#: netbox/dcim/filtersets.py:1960 msgid "Manufacturer (ID)" msgstr "Виробник (ідентифікатор)" -#: netbox/dcim/filtersets.py:302 netbox/dcim/filtersets.py:387 -#: netbox/dcim/filtersets.py:545 netbox/dcim/filtersets.py:684 -#: netbox/dcim/filtersets.py:888 netbox/dcim/filtersets.py:939 -#: netbox/dcim/filtersets.py:979 netbox/dcim/filtersets.py:1312 -#: netbox/dcim/filtersets.py:1846 +#: netbox/dcim/filtersets.py:303 netbox/dcim/filtersets.py:388 +#: netbox/dcim/filtersets.py:546 netbox/dcim/filtersets.py:685 +#: netbox/dcim/filtersets.py:889 netbox/dcim/filtersets.py:940 +#: netbox/dcim/filtersets.py:980 netbox/dcim/filtersets.py:1314 +#: netbox/dcim/filtersets.py:1966 msgid "Manufacturer (slug)" msgstr "Виробник (скорочення)" -#: netbox/dcim/filtersets.py:393 +#: netbox/dcim/filtersets.py:394 msgid "Rack type (slug)" msgstr "Тип стійки (скорочення)" -#: netbox/dcim/filtersets.py:397 +#: netbox/dcim/filtersets.py:398 msgid "Rack type (ID)" msgstr "Тип стійки (ідентифікатор)" -#: netbox/dcim/filtersets.py:411 netbox/dcim/filtersets.py:892 -#: netbox/dcim/filtersets.py:994 netbox/dcim/filtersets.py:1850 -#: netbox/ipam/filtersets.py:383 netbox/ipam/filtersets.py:495 -#: netbox/ipam/filtersets.py:1005 netbox/virtualization/filtersets.py:210 +#: netbox/dcim/filtersets.py:412 netbox/dcim/filtersets.py:893 +#: netbox/dcim/filtersets.py:995 netbox/dcim/filtersets.py:1970 +#: netbox/ipam/filtersets.py:350 netbox/ipam/filtersets.py:462 +#: netbox/ipam/filtersets.py:972 netbox/virtualization/filtersets.py:176 msgid "Role (ID)" msgstr "Роль (ідентифікатор)" -#: netbox/dcim/filtersets.py:417 netbox/dcim/filtersets.py:898 -#: netbox/dcim/filtersets.py:1000 netbox/dcim/filtersets.py:1856 -#: netbox/extras/filtersets.py:558 netbox/ipam/filtersets.py:389 -#: netbox/ipam/filtersets.py:501 netbox/ipam/filtersets.py:1011 -#: netbox/virtualization/filtersets.py:216 +#: netbox/dcim/filtersets.py:418 netbox/dcim/filtersets.py:899 +#: netbox/dcim/filtersets.py:1001 netbox/dcim/filtersets.py:1976 +#: netbox/extras/filtersets.py:558 netbox/ipam/filtersets.py:356 +#: netbox/ipam/filtersets.py:468 netbox/ipam/filtersets.py:978 +#: netbox/virtualization/filtersets.py:182 msgid "Role (slug)" msgstr "Роль (скорочення)" -#: netbox/dcim/filtersets.py:447 netbox/dcim/filtersets.py:1062 -#: netbox/dcim/filtersets.py:1415 netbox/dcim/filtersets.py:2244 +#: netbox/dcim/filtersets.py:448 netbox/dcim/filtersets.py:1063 +#: netbox/dcim/filtersets.py:1417 netbox/dcim/filtersets.py:2368 msgid "Rack (ID)" msgstr "Стійка (ідентифікатор)" -#: netbox/dcim/filtersets.py:507 netbox/extras/filtersets.py:293 +#: netbox/dcim/filtersets.py:508 netbox/extras/filtersets.py:293 #: netbox/extras/filtersets.py:337 netbox/extras/filtersets.py:359 #: netbox/extras/filtersets.py:419 netbox/users/filtersets.py:113 #: netbox/users/filtersets.py:180 msgid "User (name)" msgstr "Користувач (ім'я)" -#: netbox/dcim/filtersets.py:549 +#: netbox/dcim/filtersets.py:550 msgid "Default platform (ID)" msgstr "Платформа за замовчуванням (ідентифікатор)" -#: netbox/dcim/filtersets.py:555 +#: netbox/dcim/filtersets.py:556 msgid "Default platform (slug)" msgstr "Платформа за замовчуванням (скорочення)" -#: netbox/dcim/filtersets.py:558 netbox/dcim/forms/filtersets.py:517 +#: netbox/dcim/filtersets.py:559 netbox/dcim/forms/filtersets.py:518 msgid "Has a front image" msgstr "Має фронтальне зображення" -#: netbox/dcim/filtersets.py:562 netbox/dcim/forms/filtersets.py:524 +#: netbox/dcim/filtersets.py:563 netbox/dcim/forms/filtersets.py:525 msgid "Has a rear image" msgstr "Має зображення ззаду" -#: netbox/dcim/filtersets.py:567 netbox/dcim/filtersets.py:688 -#: netbox/dcim/filtersets.py:1131 netbox/dcim/forms/filtersets.py:531 -#: netbox/dcim/forms/filtersets.py:627 netbox/dcim/forms/filtersets.py:848 +#: netbox/dcim/filtersets.py:568 netbox/dcim/filtersets.py:689 +#: netbox/dcim/filtersets.py:1132 netbox/dcim/forms/filtersets.py:532 +#: netbox/dcim/forms/filtersets.py:628 netbox/dcim/forms/filtersets.py:849 msgid "Has console ports" msgstr "Має консольні порти" -#: netbox/dcim/filtersets.py:571 netbox/dcim/filtersets.py:692 -#: netbox/dcim/filtersets.py:1135 netbox/dcim/forms/filtersets.py:538 -#: netbox/dcim/forms/filtersets.py:634 netbox/dcim/forms/filtersets.py:855 +#: netbox/dcim/filtersets.py:572 netbox/dcim/filtersets.py:693 +#: netbox/dcim/filtersets.py:1136 netbox/dcim/forms/filtersets.py:539 +#: netbox/dcim/forms/filtersets.py:635 netbox/dcim/forms/filtersets.py:856 msgid "Has console server ports" msgstr "Має порти консольного сервера" -#: netbox/dcim/filtersets.py:575 netbox/dcim/filtersets.py:696 -#: netbox/dcim/filtersets.py:1139 netbox/dcim/forms/filtersets.py:545 -#: netbox/dcim/forms/filtersets.py:641 netbox/dcim/forms/filtersets.py:862 +#: netbox/dcim/filtersets.py:576 netbox/dcim/filtersets.py:697 +#: netbox/dcim/filtersets.py:1140 netbox/dcim/forms/filtersets.py:546 +#: netbox/dcim/forms/filtersets.py:642 netbox/dcim/forms/filtersets.py:863 msgid "Has power ports" msgstr "Має порти живлення" -#: netbox/dcim/filtersets.py:579 netbox/dcim/filtersets.py:700 -#: netbox/dcim/filtersets.py:1143 netbox/dcim/forms/filtersets.py:552 -#: netbox/dcim/forms/filtersets.py:648 netbox/dcim/forms/filtersets.py:869 +#: netbox/dcim/filtersets.py:580 netbox/dcim/filtersets.py:701 +#: netbox/dcim/filtersets.py:1144 netbox/dcim/forms/filtersets.py:553 +#: netbox/dcim/forms/filtersets.py:649 netbox/dcim/forms/filtersets.py:870 msgid "Has power outlets" msgstr "Має розетки" -#: netbox/dcim/filtersets.py:583 netbox/dcim/filtersets.py:704 -#: netbox/dcim/filtersets.py:1147 netbox/dcim/forms/filtersets.py:559 -#: netbox/dcim/forms/filtersets.py:655 netbox/dcim/forms/filtersets.py:876 +#: netbox/dcim/filtersets.py:584 netbox/dcim/filtersets.py:705 +#: netbox/dcim/filtersets.py:1148 netbox/dcim/forms/filtersets.py:560 +#: netbox/dcim/forms/filtersets.py:656 netbox/dcim/forms/filtersets.py:877 msgid "Has interfaces" msgstr "Має інтерфейси" -#: netbox/dcim/filtersets.py:587 netbox/dcim/filtersets.py:708 -#: netbox/dcim/filtersets.py:1151 netbox/dcim/forms/filtersets.py:566 -#: netbox/dcim/forms/filtersets.py:662 netbox/dcim/forms/filtersets.py:883 +#: netbox/dcim/filtersets.py:588 netbox/dcim/filtersets.py:709 +#: netbox/dcim/filtersets.py:1152 netbox/dcim/forms/filtersets.py:567 +#: netbox/dcim/forms/filtersets.py:663 netbox/dcim/forms/filtersets.py:884 msgid "Has pass-through ports" msgstr "Має прохідні порти" -#: netbox/dcim/filtersets.py:591 netbox/dcim/filtersets.py:1155 -#: netbox/dcim/forms/filtersets.py:580 +#: netbox/dcim/filtersets.py:592 netbox/dcim/filtersets.py:1156 +#: netbox/dcim/forms/filtersets.py:581 msgid "Has module bays" msgstr "Має модульні відсіки" -#: netbox/dcim/filtersets.py:595 netbox/dcim/filtersets.py:1159 -#: netbox/dcim/forms/filtersets.py:573 +#: netbox/dcim/filtersets.py:596 netbox/dcim/filtersets.py:1160 +#: netbox/dcim/forms/filtersets.py:574 msgid "Has device bays" msgstr "Має відсіки для пристроїв" -#: netbox/dcim/filtersets.py:599 netbox/dcim/forms/filtersets.py:587 +#: netbox/dcim/filtersets.py:600 netbox/dcim/forms/filtersets.py:588 msgid "Has inventory items" msgstr "Має предмети інвентарю" -#: netbox/dcim/filtersets.py:756 netbox/dcim/filtersets.py:989 -#: netbox/dcim/filtersets.py:1436 +#: netbox/dcim/filtersets.py:757 netbox/dcim/filtersets.py:990 +#: netbox/dcim/filtersets.py:1438 msgid "Device type (ID)" msgstr "Тип пристрою (ідентифікатор)" -#: netbox/dcim/filtersets.py:772 netbox/dcim/filtersets.py:1317 +#: netbox/dcim/filtersets.py:773 netbox/dcim/filtersets.py:1319 msgid "Module type (ID)" msgstr "Тип модуля (ідентифікатор)" -#: netbox/dcim/filtersets.py:804 netbox/dcim/filtersets.py:1591 +#: netbox/dcim/filtersets.py:805 netbox/dcim/filtersets.py:1593 msgid "Power port (ID)" msgstr "Порт живлення (ідентифікатор)" -#: netbox/dcim/filtersets.py:878 netbox/dcim/filtersets.py:1836 +#: netbox/dcim/filtersets.py:879 netbox/dcim/filtersets.py:1956 msgid "Parent inventory item (ID)" msgstr "Батьківський предмет інвентарю (ідентифікатор)" -#: netbox/dcim/filtersets.py:921 netbox/dcim/filtersets.py:947 -#: netbox/dcim/filtersets.py:1127 netbox/virtualization/filtersets.py:238 +#: netbox/dcim/filtersets.py:922 netbox/dcim/filtersets.py:948 +#: netbox/dcim/filtersets.py:1128 netbox/virtualization/filtersets.py:204 msgid "Config template (ID)" msgstr "Шаблон конфігурації (ідентифікатор)" -#: netbox/dcim/filtersets.py:985 +#: netbox/dcim/filtersets.py:986 msgid "Device type (slug)" msgstr "Тип пристрою (скорочення)" -#: netbox/dcim/filtersets.py:1005 +#: netbox/dcim/filtersets.py:1006 msgid "Parent Device (ID)" msgstr "Батьківський пристрій (ідентифікатор)" -#: netbox/dcim/filtersets.py:1009 netbox/virtualization/filtersets.py:220 +#: netbox/dcim/filtersets.py:1010 netbox/virtualization/filtersets.py:186 msgid "Platform (ID)" msgstr "Платформа (ідентифікатор)" -#: netbox/dcim/filtersets.py:1015 netbox/extras/filtersets.py:569 -#: netbox/virtualization/filtersets.py:226 +#: netbox/dcim/filtersets.py:1016 netbox/extras/filtersets.py:569 +#: netbox/virtualization/filtersets.py:192 msgid "Platform (slug)" msgstr "Платформа (скорочення)" -#: netbox/dcim/filtersets.py:1051 netbox/dcim/filtersets.py:1399 -#: netbox/dcim/filtersets.py:1934 netbox/dcim/filtersets.py:2176 -#: netbox/dcim/filtersets.py:2235 +#: netbox/dcim/filtersets.py:1052 netbox/dcim/filtersets.py:1401 +#: netbox/dcim/filtersets.py:2058 netbox/dcim/filtersets.py:2300 +#: netbox/dcim/filtersets.py:2359 msgid "Site name (slug)" msgstr "Назва тех. майданчика (скорочення)" -#: netbox/dcim/filtersets.py:1067 +#: netbox/dcim/filtersets.py:1068 msgid "Parent bay (ID)" msgstr "Батьківський відсік (ідентифікатор)" -#: netbox/dcim/filtersets.py:1071 +#: netbox/dcim/filtersets.py:1072 msgid "VM cluster (ID)" msgstr "Кластер віртуальних машини (ідентифікатор)" -#: netbox/dcim/filtersets.py:1077 netbox/extras/filtersets.py:591 -#: netbox/virtualization/filtersets.py:136 +#: netbox/dcim/filtersets.py:1078 netbox/extras/filtersets.py:591 +#: netbox/virtualization/filtersets.py:102 msgid "Cluster group (slug)" msgstr "Кластерна група (скорочення)" -#: netbox/dcim/filtersets.py:1082 netbox/virtualization/filtersets.py:130 +#: netbox/dcim/filtersets.py:1083 netbox/virtualization/filtersets.py:96 msgid "Cluster group (ID)" msgstr "Група кластерів (ідентифікатор)" -#: netbox/dcim/filtersets.py:1088 +#: netbox/dcim/filtersets.py:1089 msgid "Device model (slug)" msgstr "Модель пристрою (скорочення)" -#: netbox/dcim/filtersets.py:1099 netbox/dcim/forms/bulk_edit.py:522 +#: netbox/dcim/filtersets.py:1100 netbox/dcim/forms/bulk_edit.py:525 msgid "Is full depth" msgstr "Це повна глибина" -#: netbox/dcim/filtersets.py:1103 netbox/dcim/forms/common.py:18 -#: netbox/dcim/forms/filtersets.py:818 netbox/dcim/forms/filtersets.py:1385 -#: netbox/dcim/models/device_components.py:518 -#: netbox/virtualization/filtersets.py:230 -#: netbox/virtualization/filtersets.py:301 -#: netbox/virtualization/forms/filtersets.py:172 -#: netbox/virtualization/forms/filtersets.py:223 +#: netbox/dcim/filtersets.py:1104 netbox/dcim/forms/filtersets.py:819 +#: netbox/dcim/forms/filtersets.py:1390 netbox/dcim/forms/filtersets.py:1586 +#: netbox/dcim/forms/filtersets.py:1591 netbox/dcim/forms/model_forms.py:1762 +#: netbox/dcim/models/devices.py:1505 netbox/dcim/models/devices.py:1526 +#: netbox/virtualization/filtersets.py:196 +#: netbox/virtualization/filtersets.py:268 +#: netbox/virtualization/forms/filtersets.py:177 +#: netbox/virtualization/forms/filtersets.py:228 msgid "MAC address" msgstr "MAC-адреса" -#: netbox/dcim/filtersets.py:1110 netbox/dcim/filtersets.py:1274 -#: netbox/dcim/forms/filtersets.py:827 netbox/dcim/forms/filtersets.py:930 -#: netbox/virtualization/filtersets.py:234 -#: netbox/virtualization/forms/filtersets.py:176 +#: netbox/dcim/filtersets.py:1111 netbox/dcim/filtersets.py:1276 +#: netbox/dcim/forms/filtersets.py:828 netbox/dcim/forms/filtersets.py:931 +#: netbox/virtualization/filtersets.py:200 +#: netbox/virtualization/forms/filtersets.py:181 msgid "Has a primary IP" msgstr "Має основний IP" -#: netbox/dcim/filtersets.py:1114 +#: netbox/dcim/filtersets.py:1115 msgid "Has an out-of-band IP" msgstr "Має IP для зовнішнього незалежного керування" -#: netbox/dcim/filtersets.py:1119 +#: netbox/dcim/filtersets.py:1120 msgid "Virtual chassis (ID)" msgstr "Віртуальне шасі (ідентифікатор)" -#: netbox/dcim/filtersets.py:1123 +#: netbox/dcim/filtersets.py:1124 msgid "Is a virtual chassis member" msgstr "Є віртуальним членом шасі" -#: netbox/dcim/filtersets.py:1164 +#: netbox/dcim/filtersets.py:1165 msgid "OOB IP (ID)" msgstr "IP для зовнішнього незалежного керування (ідентифікатор)" -#: netbox/dcim/filtersets.py:1168 +#: netbox/dcim/filtersets.py:1169 msgid "Has virtual device context" msgstr "Має контекст віртуального пристрою" -#: netbox/dcim/filtersets.py:1257 +#: netbox/dcim/filtersets.py:1259 msgid "VDC (ID)" msgstr "Імпульсне джерело живлення (ідентифікатор)" -#: netbox/dcim/filtersets.py:1262 +#: netbox/dcim/filtersets.py:1264 msgid "Device model" msgstr "Модель пристрою" -#: netbox/dcim/filtersets.py:1267 netbox/ipam/filtersets.py:634 -#: netbox/vpn/filtersets.py:102 netbox/vpn/filtersets.py:401 -msgid "Interface (ID)" -msgstr "Інтерфейс (ідентифікатор)" - -#: netbox/dcim/filtersets.py:1323 +#: netbox/dcim/filtersets.py:1325 msgid "Module type (model)" msgstr "Тип модуля (модель)" -#: netbox/dcim/filtersets.py:1329 +#: netbox/dcim/filtersets.py:1331 msgid "Module bay (ID)" msgstr "Відсік модуля (ідентифікатор)" -#: netbox/dcim/filtersets.py:1333 netbox/dcim/filtersets.py:1425 -#: netbox/ipam/filtersets.py:613 netbox/ipam/filtersets.py:853 -#: netbox/ipam/filtersets.py:1117 netbox/virtualization/filtersets.py:161 -#: netbox/vpn/filtersets.py:379 +#: netbox/dcim/filtersets.py:1335 netbox/dcim/filtersets.py:1427 +#: netbox/dcim/filtersets.py:1613 netbox/ipam/filtersets.py:580 +#: netbox/ipam/filtersets.py:820 netbox/ipam/filtersets.py:1142 +#: netbox/virtualization/filtersets.py:127 netbox/vpn/filtersets.py:379 msgid "Device (ID)" msgstr "Пристрій (ідентифікатор)" -#: netbox/dcim/filtersets.py:1421 +#: netbox/dcim/filtersets.py:1423 msgid "Rack (name)" msgstr "Стійка (назва)" -#: netbox/dcim/filtersets.py:1431 netbox/ipam/filtersets.py:608 -#: netbox/ipam/filtersets.py:848 netbox/ipam/filtersets.py:1123 -#: netbox/vpn/filtersets.py:374 +#: netbox/dcim/filtersets.py:1433 netbox/dcim/filtersets.py:1608 +#: netbox/ipam/filtersets.py:575 netbox/ipam/filtersets.py:815 +#: netbox/ipam/filtersets.py:1148 netbox/vpn/filtersets.py:374 msgid "Device (name)" msgstr "Пристрій (назва)" -#: netbox/dcim/filtersets.py:1442 +#: netbox/dcim/filtersets.py:1444 msgid "Device type (model)" msgstr "Тип пристрою (модель)" -#: netbox/dcim/filtersets.py:1447 +#: netbox/dcim/filtersets.py:1449 msgid "Device role (ID)" msgstr "Роль пристрою (ідентифікатор)" -#: netbox/dcim/filtersets.py:1453 +#: netbox/dcim/filtersets.py:1455 msgid "Device role (slug)" msgstr "Роль пристрою (скорочення)" -#: netbox/dcim/filtersets.py:1458 +#: netbox/dcim/filtersets.py:1460 msgid "Virtual Chassis (ID)" msgstr "Віртуальне шасі (ідентифікатор)" -#: netbox/dcim/filtersets.py:1464 netbox/dcim/forms/filtersets.py:109 -#: netbox/dcim/tables/devices.py:206 netbox/netbox/navigation/menu.py:79 +#: netbox/dcim/filtersets.py:1466 netbox/dcim/forms/filtersets.py:110 +#: netbox/dcim/tables/devices.py:217 netbox/netbox/navigation/menu.py:79 #: netbox/templates/dcim/device.html:120 #: netbox/templates/dcim/device_edit.html:93 #: netbox/templates/dcim/virtualchassis.html:20 @@ -3253,168 +3692,231 @@ msgstr "Віртуальне шасі (ідентифікатор)" msgid "Virtual Chassis" msgstr "Віртуальне шасі" -#: netbox/dcim/filtersets.py:1488 +#: netbox/dcim/filtersets.py:1490 msgid "Module (ID)" msgstr "Модуль (ідентифікатор)" -#: netbox/dcim/filtersets.py:1495 +#: netbox/dcim/filtersets.py:1497 msgid "Cable (ID)" msgstr "Кабель (ідентифікатор)" -#: netbox/dcim/filtersets.py:1604 netbox/ipam/forms/bulk_import.py:189 +#: netbox/dcim/filtersets.py:1618 netbox/ipam/filtersets.py:585 +#: netbox/ipam/filtersets.py:825 netbox/ipam/filtersets.py:1158 +#: netbox/vpn/filtersets.py:385 +msgid "Virtual machine (name)" +msgstr "Віртуальна машина (назва)" + +#: netbox/dcim/filtersets.py:1623 netbox/ipam/filtersets.py:590 +#: netbox/ipam/filtersets.py:830 netbox/ipam/filtersets.py:1152 +#: netbox/virtualization/filtersets.py:248 +#: netbox/virtualization/filtersets.py:299 netbox/vpn/filtersets.py:390 +msgid "Virtual machine (ID)" +msgstr "Віртуальна машина (ідентифікатор)" + +#: netbox/dcim/filtersets.py:1629 netbox/ipam/filtersets.py:596 +#: netbox/vpn/filtersets.py:97 netbox/vpn/filtersets.py:396 +msgid "Interface (name)" +msgstr "Інтерфейс (назва)" + +#: netbox/dcim/filtersets.py:1640 netbox/ipam/filtersets.py:607 +#: netbox/vpn/filtersets.py:108 netbox/vpn/filtersets.py:407 +msgid "VM interface (name)" +msgstr "Інтерфейс віртуальної машини (назва)" + +#: netbox/dcim/filtersets.py:1645 netbox/ipam/filtersets.py:612 +#: netbox/vpn/filtersets.py:113 +msgid "VM interface (ID)" +msgstr "Інтерфейс віртуальної машини (ідентифікатор)" + +#: netbox/dcim/filtersets.py:1687 netbox/ipam/forms/bulk_import.py:185 #: netbox/vpn/forms/bulk_import.py:308 msgid "Assigned VLAN" msgstr "Призначений VLAN" -#: netbox/dcim/filtersets.py:1608 +#: netbox/dcim/filtersets.py:1691 msgid "Assigned VID" msgstr "Призначений VID" -#: netbox/dcim/filtersets.py:1613 netbox/dcim/forms/bulk_edit.py:1531 -#: netbox/dcim/forms/bulk_import.py:913 netbox/dcim/forms/filtersets.py:1428 -#: netbox/dcim/forms/model_forms.py:1385 -#: netbox/dcim/models/device_components.py:711 -#: netbox/dcim/tables/devices.py:626 netbox/ipam/filtersets.py:318 -#: netbox/ipam/filtersets.py:329 netbox/ipam/filtersets.py:485 -#: netbox/ipam/filtersets.py:586 netbox/ipam/filtersets.py:597 -#: netbox/ipam/forms/bulk_edit.py:242 netbox/ipam/forms/bulk_edit.py:298 -#: netbox/ipam/forms/bulk_edit.py:340 netbox/ipam/forms/bulk_import.py:157 -#: netbox/ipam/forms/bulk_import.py:243 netbox/ipam/forms/bulk_import.py:279 -#: netbox/ipam/forms/filtersets.py:67 netbox/ipam/forms/filtersets.py:172 -#: netbox/ipam/forms/filtersets.py:309 netbox/ipam/forms/model_forms.py:62 -#: netbox/ipam/forms/model_forms.py:202 netbox/ipam/forms/model_forms.py:247 -#: netbox/ipam/forms/model_forms.py:300 netbox/ipam/forms/model_forms.py:464 -#: netbox/ipam/forms/model_forms.py:478 netbox/ipam/forms/model_forms.py:492 -#: netbox/ipam/models/ip.py:233 netbox/ipam/models/ip.py:512 -#: netbox/ipam/models/ip.py:720 netbox/ipam/models/vrfs.py:62 -#: netbox/ipam/tables/ip.py:242 netbox/ipam/tables/ip.py:309 -#: netbox/ipam/tables/ip.py:360 netbox/ipam/tables/ip.py:450 -#: netbox/templates/dcim/interface.html:133 +#: netbox/dcim/filtersets.py:1696 netbox/dcim/forms/bulk_edit.py:1544 +#: netbox/dcim/forms/bulk_import.py:921 netbox/dcim/forms/filtersets.py:1433 +#: netbox/dcim/forms/model_forms.py:1411 +#: netbox/dcim/models/device_components.py:749 +#: netbox/dcim/tables/devices.py:648 netbox/ipam/filtersets.py:321 +#: netbox/ipam/filtersets.py:332 netbox/ipam/filtersets.py:452 +#: netbox/ipam/filtersets.py:553 netbox/ipam/filtersets.py:564 +#: netbox/ipam/forms/bulk_edit.py:226 netbox/ipam/forms/bulk_edit.py:282 +#: netbox/ipam/forms/bulk_edit.py:324 netbox/ipam/forms/bulk_import.py:160 +#: netbox/ipam/forms/bulk_import.py:242 netbox/ipam/forms/bulk_import.py:278 +#: netbox/ipam/forms/filtersets.py:69 netbox/ipam/forms/filtersets.py:174 +#: netbox/ipam/forms/filtersets.py:312 netbox/ipam/forms/model_forms.py:65 +#: netbox/ipam/forms/model_forms.py:208 netbox/ipam/forms/model_forms.py:256 +#: netbox/ipam/forms/model_forms.py:310 netbox/ipam/forms/model_forms.py:474 +#: netbox/ipam/forms/model_forms.py:488 netbox/ipam/forms/model_forms.py:502 +#: netbox/ipam/models/ip.py:217 netbox/ipam/models/ip.py:498 +#: netbox/ipam/models/ip.py:719 netbox/ipam/models/vrfs.py:61 +#: netbox/ipam/tables/ip.py:188 netbox/ipam/tables/ip.py:261 +#: netbox/ipam/tables/ip.py:312 netbox/ipam/tables/ip.py:402 +#: netbox/templates/dcim/interface.html:152 #: netbox/templates/ipam/ipaddress.html:18 #: netbox/templates/ipam/iprange.html:40 netbox/templates/ipam/prefix.html:19 #: netbox/templates/ipam/vrf.html:7 netbox/templates/ipam/vrf.html:13 -#: netbox/templates/virtualization/vminterface.html:47 -#: netbox/virtualization/forms/bulk_edit.py:261 -#: netbox/virtualization/forms/bulk_import.py:171 -#: netbox/virtualization/forms/filtersets.py:228 -#: netbox/virtualization/forms/model_forms.py:344 -#: netbox/virtualization/models/virtualmachines.py:355 -#: netbox/virtualization/tables/virtualmachines.py:143 +#: netbox/templates/virtualization/vminterface.html:84 +#: netbox/virtualization/forms/bulk_edit.py:243 +#: netbox/virtualization/forms/bulk_import.py:177 +#: netbox/virtualization/forms/filtersets.py:233 +#: netbox/virtualization/forms/model_forms.py:368 +#: netbox/virtualization/models/virtualmachines.py:331 +#: netbox/virtualization/tables/virtualmachines.py:113 msgid "VRF" msgstr "VRF" -#: netbox/dcim/filtersets.py:1619 netbox/ipam/filtersets.py:324 -#: netbox/ipam/filtersets.py:335 netbox/ipam/filtersets.py:491 -#: netbox/ipam/filtersets.py:592 netbox/ipam/filtersets.py:603 +#: netbox/dcim/filtersets.py:1702 netbox/ipam/filtersets.py:327 +#: netbox/ipam/filtersets.py:338 netbox/ipam/filtersets.py:458 +#: netbox/ipam/filtersets.py:559 netbox/ipam/filtersets.py:570 msgid "VRF (RD)" msgstr "VRF (RD)" -#: netbox/dcim/filtersets.py:1624 netbox/ipam/filtersets.py:1032 +#: netbox/dcim/filtersets.py:1707 netbox/ipam/filtersets.py:1010 #: netbox/vpn/filtersets.py:342 msgid "L2VPN (ID)" msgstr "L2VPN (ідентифікатор)" -#: netbox/dcim/filtersets.py:1630 netbox/dcim/forms/filtersets.py:1433 -#: netbox/dcim/tables/devices.py:570 netbox/ipam/filtersets.py:1038 -#: netbox/ipam/forms/filtersets.py:518 netbox/ipam/tables/vlans.py:137 -#: netbox/templates/dcim/interface.html:93 netbox/templates/ipam/vlan.html:66 +#: netbox/dcim/filtersets.py:1713 netbox/dcim/forms/filtersets.py:1438 +#: netbox/dcim/tables/devices.py:584 netbox/ipam/filtersets.py:1016 +#: netbox/ipam/forms/filtersets.py:570 netbox/ipam/tables/vlans.py:113 +#: netbox/templates/dcim/interface.html:99 netbox/templates/ipam/vlan.html:82 #: netbox/templates/vpn/l2vpntermination.html:12 -#: netbox/virtualization/forms/filtersets.py:233 +#: netbox/virtualization/forms/filtersets.py:238 #: netbox/vpn/forms/bulk_import.py:280 netbox/vpn/forms/filtersets.py:246 -#: netbox/vpn/forms/model_forms.py:409 netbox/vpn/forms/model_forms.py:427 +#: netbox/vpn/forms/model_forms.py:412 netbox/vpn/forms/model_forms.py:430 #: netbox/vpn/models/l2vpn.py:63 netbox/vpn/tables/l2vpn.py:55 msgid "L2VPN" msgstr "L2VPN" -#: netbox/dcim/filtersets.py:1662 +#: netbox/dcim/filtersets.py:1718 netbox/ipam/filtersets.py:1091 +msgid "VLAN Translation Policy (ID)" +msgstr "Політика перекладу VLAN (ID)" + +#: netbox/dcim/filtersets.py:1724 netbox/dcim/forms/model_forms.py:1428 +#: netbox/dcim/models/device_components.py:568 +#: netbox/ipam/forms/filtersets.py:489 netbox/ipam/forms/model_forms.py:712 +#: netbox/templates/ipam/vlantranslationpolicy.html:11 +#: netbox/virtualization/forms/bulk_edit.py:248 +#: netbox/virtualization/forms/model_forms.py:373 +msgid "VLAN Translation Policy" +msgstr "Політика перекладу VLAN" + +#: netbox/dcim/filtersets.py:1758 msgid "Virtual Chassis Interfaces for Device" msgstr "Віртуальні інтерфейси шасі для пристрою" -#: netbox/dcim/filtersets.py:1667 +#: netbox/dcim/filtersets.py:1763 msgid "Virtual Chassis Interfaces for Device (ID)" msgstr "Віртуальні інтерфейси шасі для пристрою (ідентифікатор)" -#: netbox/dcim/filtersets.py:1671 +#: netbox/dcim/filtersets.py:1767 msgid "Kind of interface" msgstr "Вид інтерфейсу" -#: netbox/dcim/filtersets.py:1676 netbox/virtualization/filtersets.py:293 +#: netbox/dcim/filtersets.py:1772 netbox/virtualization/filtersets.py:259 msgid "Parent interface (ID)" msgstr "Батьківський інтерфейс (ідентифікатор)" -#: netbox/dcim/filtersets.py:1681 netbox/virtualization/filtersets.py:298 +#: netbox/dcim/filtersets.py:1777 netbox/virtualization/filtersets.py:264 msgid "Bridged interface (ID)" msgstr "Мостовий інтерфейс (ідентифікатор)" -#: netbox/dcim/filtersets.py:1686 +#: netbox/dcim/filtersets.py:1782 msgid "LAG interface (ID)" msgstr "Інтерфейс LAG (ідентифікатор)" -#: netbox/dcim/filtersets.py:1713 netbox/dcim/filtersets.py:1725 -#: netbox/dcim/forms/filtersets.py:1345 netbox/dcim/forms/model_forms.py:1697 +#: netbox/dcim/filtersets.py:1790 netbox/dcim/tables/devices.py:606 +#: netbox/dcim/tables/devices.py:1136 netbox/templates/dcim/interface.html:131 +#: netbox/templates/dcim/macaddress.html:11 +#: netbox/templates/dcim/macaddress.html:14 +#: netbox/templates/virtualization/vminterface.html:73 +msgid "MAC Address" +msgstr "MAC-адреса" + +#: netbox/dcim/filtersets.py:1795 netbox/virtualization/filtersets.py:273 +msgid "Primary MAC address (ID)" +msgstr "Основна MAC-адреса (ID)" + +#: netbox/dcim/filtersets.py:1801 netbox/dcim/forms/model_forms.py:1415 +#: netbox/virtualization/filtersets.py:279 +#: netbox/virtualization/forms/model_forms.py:311 +msgid "Primary MAC address" +msgstr "Основна MAC-адреса" + +#: netbox/dcim/filtersets.py:1823 netbox/dcim/filtersets.py:1835 +#: netbox/dcim/forms/filtersets.py:1350 netbox/dcim/forms/model_forms.py:1742 #: netbox/templates/dcim/virtualdevicecontext.html:15 msgid "Virtual Device Context" msgstr "Контекст віртуального пристрою" -#: netbox/dcim/filtersets.py:1719 +#: netbox/dcim/filtersets.py:1829 msgid "Virtual Device Context (Identifier)" msgstr "Контекст віртуального пристрою (ідентифікатор)" -#: netbox/dcim/filtersets.py:1730 +#: netbox/dcim/filtersets.py:1840 #: netbox/templates/wireless/wirelesslan.html:11 -#: netbox/wireless/forms/model_forms.py:53 +#: netbox/wireless/forms/model_forms.py:55 msgid "Wireless LAN" msgstr "Бездротова локальна мережа" -#: netbox/dcim/filtersets.py:1734 netbox/dcim/tables/devices.py:613 +#: netbox/dcim/filtersets.py:1844 netbox/dcim/tables/devices.py:635 msgid "Wireless link" msgstr "Бездротова зв'язок" -#: netbox/dcim/filtersets.py:1803 +#: netbox/dcim/filtersets.py:1854 +msgid "Virtual circuit termination (ID)" +msgstr "Припинення віртуальної схеми (ID)" + +#: netbox/dcim/filtersets.py:1923 msgid "Parent module bay (ID)" msgstr "Відсік батьківського модуля (ідентифікатор)" -#: netbox/dcim/filtersets.py:1808 +#: netbox/dcim/filtersets.py:1928 msgid "Installed module (ID)" msgstr "Встановлений модуль (ідентифікатор)" -#: netbox/dcim/filtersets.py:1819 +#: netbox/dcim/filtersets.py:1939 msgid "Installed device (ID)" msgstr "Встановлений пристрій (ідентифікатор)" -#: netbox/dcim/filtersets.py:1825 +#: netbox/dcim/filtersets.py:1945 msgid "Installed device (name)" msgstr "Встановлений пристрій (назва)" -#: netbox/dcim/filtersets.py:1891 +#: netbox/dcim/filtersets.py:2015 msgid "Master (ID)" msgstr "Майстер (ідентифікатор)" -#: netbox/dcim/filtersets.py:1897 +#: netbox/dcim/filtersets.py:2021 msgid "Master (name)" msgstr "Майстер (ім'я)" -#: netbox/dcim/filtersets.py:1939 netbox/tenancy/filtersets.py:245 +#: netbox/dcim/filtersets.py:2063 netbox/tenancy/filtersets.py:245 msgid "Tenant (ID)" msgstr "Орендар (ідентифікатор)" -#: netbox/dcim/filtersets.py:1945 netbox/extras/filtersets.py:618 +#: netbox/dcim/filtersets.py:2069 netbox/extras/filtersets.py:618 #: netbox/tenancy/filtersets.py:251 msgid "Tenant (slug)" msgstr "Орендар (скорочення)" -#: netbox/dcim/filtersets.py:1981 netbox/dcim/forms/filtersets.py:1077 +#: netbox/dcim/filtersets.py:2105 netbox/dcim/forms/filtersets.py:1078 msgid "Unterminated" msgstr "Незакінчений" -#: netbox/dcim/filtersets.py:2239 +#: netbox/dcim/filtersets.py:2363 msgid "Power panel (ID)" msgstr "Панель живлення (ідентифікатор)" -#: netbox/dcim/forms/bulk_create.py:40 netbox/extras/forms/filtersets.py:401 -#: netbox/extras/forms/model_forms.py:567 -#: netbox/extras/forms/model_forms.py:619 netbox/netbox/forms/base.py:86 -#: netbox/netbox/forms/mixins.py:81 netbox/netbox/tables/columns.py:478 +#: netbox/dcim/forms/bulk_create.py:40 netbox/extras/forms/filtersets.py:408 +#: netbox/extras/forms/model_forms.py:581 +#: netbox/extras/forms/model_forms.py:633 netbox/netbox/forms/base.py:86 +#: netbox/netbox/forms/mixins.py:91 netbox/netbox/tables/columns.py:481 #: netbox/templates/circuits/inc/circuit_termination.html:32 #: netbox/templates/generic/bulk_edit.html:65 #: netbox/templates/inc/panels/tags.html:5 @@ -3422,11 +3924,11 @@ msgstr "Панель живлення (ідентифікатор)" msgid "Tags" msgstr "Мітки" -#: netbox/dcim/forms/bulk_create.py:112 netbox/dcim/forms/filtersets.py:1498 -#: netbox/dcim/forms/model_forms.py:488 netbox/dcim/forms/model_forms.py:546 +#: netbox/dcim/forms/bulk_create.py:112 netbox/dcim/forms/filtersets.py:1503 +#: netbox/dcim/forms/model_forms.py:498 netbox/dcim/forms/model_forms.py:557 #: netbox/dcim/forms/object_create.py:197 -#: netbox/dcim/forms/object_create.py:345 netbox/dcim/tables/devices.py:165 -#: netbox/dcim/tables/devices.py:707 netbox/dcim/tables/devicetypes.py:246 +#: netbox/dcim/forms/object_create.py:345 netbox/dcim/tables/devices.py:176 +#: netbox/dcim/tables/devices.py:741 netbox/dcim/tables/devicetypes.py:253 #: netbox/templates/dcim/device.html:43 netbox/templates/dcim/device.html:131 #: netbox/templates/dcim/modulebay.html:38 #: netbox/templates/dcim/virtualchassis.html:66 @@ -3442,114 +3944,114 @@ msgstr "" "Підтримуються буквено-цифрові діапазони. (Повинен збігатися з кількістю " "створених імен.)" -#: netbox/dcim/forms/bulk_edit.py:133 +#: netbox/dcim/forms/bulk_edit.py:136 msgid "Contact name" msgstr "Ім'я контакту" -#: netbox/dcim/forms/bulk_edit.py:138 +#: netbox/dcim/forms/bulk_edit.py:141 msgid "Contact phone" msgstr "Контактний телефон" -#: netbox/dcim/forms/bulk_edit.py:144 +#: netbox/dcim/forms/bulk_edit.py:147 msgid "Contact E-mail" msgstr "Контактна адреса електронної пошти" -#: netbox/dcim/forms/bulk_edit.py:147 netbox/dcim/forms/bulk_import.py:123 -#: netbox/dcim/forms/model_forms.py:128 +#: netbox/dcim/forms/bulk_edit.py:150 netbox/dcim/forms/bulk_import.py:125 +#: netbox/dcim/forms/model_forms.py:132 msgid "Time zone" msgstr "Часовий пояс" -#: netbox/dcim/forms/bulk_edit.py:225 netbox/dcim/forms/bulk_edit.py:501 -#: netbox/dcim/forms/bulk_edit.py:565 netbox/dcim/forms/bulk_edit.py:638 -#: netbox/dcim/forms/bulk_edit.py:662 netbox/dcim/forms/bulk_edit.py:755 -#: netbox/dcim/forms/bulk_edit.py:1282 netbox/dcim/forms/bulk_edit.py:1703 -#: netbox/dcim/forms/bulk_import.py:182 netbox/dcim/forms/bulk_import.py:393 -#: netbox/dcim/forms/bulk_import.py:427 netbox/dcim/forms/bulk_import.py:472 -#: netbox/dcim/forms/bulk_import.py:508 netbox/dcim/forms/bulk_import.py:1104 -#: netbox/dcim/forms/filtersets.py:313 netbox/dcim/forms/filtersets.py:372 -#: netbox/dcim/forms/filtersets.py:494 netbox/dcim/forms/filtersets.py:619 -#: netbox/dcim/forms/filtersets.py:700 netbox/dcim/forms/filtersets.py:782 -#: netbox/dcim/forms/filtersets.py:947 netbox/dcim/forms/filtersets.py:1539 -#: netbox/dcim/forms/model_forms.py:207 netbox/dcim/forms/model_forms.py:337 -#: netbox/dcim/forms/model_forms.py:349 netbox/dcim/forms/model_forms.py:395 -#: netbox/dcim/forms/model_forms.py:436 netbox/dcim/forms/model_forms.py:1082 -#: netbox/dcim/forms/model_forms.py:1522 -#: netbox/dcim/forms/object_import.py:187 netbox/dcim/tables/devices.py:96 -#: netbox/dcim/tables/devices.py:172 netbox/dcim/tables/devices.py:940 -#: netbox/dcim/tables/devicetypes.py:80 netbox/dcim/tables/devicetypes.py:308 +#: netbox/dcim/forms/bulk_edit.py:228 netbox/dcim/forms/bulk_edit.py:504 +#: netbox/dcim/forms/bulk_edit.py:568 netbox/dcim/forms/bulk_edit.py:641 +#: netbox/dcim/forms/bulk_edit.py:665 netbox/dcim/forms/bulk_edit.py:758 +#: netbox/dcim/forms/bulk_edit.py:1285 netbox/dcim/forms/bulk_edit.py:1718 +#: netbox/dcim/forms/bulk_import.py:184 netbox/dcim/forms/bulk_import.py:395 +#: netbox/dcim/forms/bulk_import.py:429 netbox/dcim/forms/bulk_import.py:477 +#: netbox/dcim/forms/bulk_import.py:513 netbox/dcim/forms/bulk_import.py:1112 +#: netbox/dcim/forms/filtersets.py:314 netbox/dcim/forms/filtersets.py:373 +#: netbox/dcim/forms/filtersets.py:495 netbox/dcim/forms/filtersets.py:620 +#: netbox/dcim/forms/filtersets.py:701 netbox/dcim/forms/filtersets.py:783 +#: netbox/dcim/forms/filtersets.py:948 netbox/dcim/forms/filtersets.py:1544 +#: netbox/dcim/forms/model_forms.py:211 netbox/dcim/forms/model_forms.py:345 +#: netbox/dcim/forms/model_forms.py:357 netbox/dcim/forms/model_forms.py:404 +#: netbox/dcim/forms/model_forms.py:445 netbox/dcim/forms/model_forms.py:1095 +#: netbox/dcim/forms/model_forms.py:1564 +#: netbox/dcim/forms/object_import.py:188 netbox/dcim/tables/devices.py:107 +#: netbox/dcim/tables/devices.py:183 netbox/dcim/tables/devices.py:970 +#: netbox/dcim/tables/devicetypes.py:85 netbox/dcim/tables/devicetypes.py:315 #: netbox/dcim/tables/modules.py:20 netbox/dcim/tables/modules.py:61 -#: netbox/dcim/tables/racks.py:58 netbox/dcim/tables/racks.py:132 +#: netbox/dcim/tables/racks.py:58 netbox/dcim/tables/racks.py:131 #: netbox/templates/dcim/devicetype.html:14 -#: netbox/templates/dcim/inventoryitem.html:44 +#: netbox/templates/dcim/inventoryitem.html:48 #: netbox/templates/dcim/manufacturer.html:33 #: netbox/templates/dcim/modulebay.html:62 -#: netbox/templates/dcim/moduletype.html:25 +#: netbox/templates/dcim/moduletype.html:27 #: netbox/templates/dcim/platform.html:37 #: netbox/templates/dcim/racktype.html:16 msgid "Manufacturer" msgstr "Виробник" -#: netbox/dcim/forms/bulk_edit.py:230 netbox/dcim/forms/bulk_edit.py:378 -#: netbox/dcim/forms/bulk_import.py:191 netbox/dcim/forms/bulk_import.py:270 -#: netbox/dcim/forms/filtersets.py:255 +#: netbox/dcim/forms/bulk_edit.py:233 netbox/dcim/forms/bulk_edit.py:381 +#: netbox/dcim/forms/bulk_import.py:193 netbox/dcim/forms/bulk_import.py:272 +#: netbox/dcim/forms/filtersets.py:256 #: netbox/templates/dcim/inc/panels/racktype_dimensions.html:6 msgid "Form factor" msgstr "Форм-фактор" -#: netbox/dcim/forms/bulk_edit.py:235 netbox/dcim/forms/bulk_edit.py:383 -#: netbox/dcim/forms/bulk_import.py:199 netbox/dcim/forms/bulk_import.py:273 -#: netbox/dcim/forms/filtersets.py:260 +#: netbox/dcim/forms/bulk_edit.py:238 netbox/dcim/forms/bulk_edit.py:386 +#: netbox/dcim/forms/bulk_import.py:201 netbox/dcim/forms/bulk_import.py:275 +#: netbox/dcim/forms/filtersets.py:261 #: netbox/templates/dcim/inc/panels/racktype_dimensions.html:10 msgid "Width" msgstr "Ширина" -#: netbox/dcim/forms/bulk_edit.py:241 netbox/dcim/forms/bulk_edit.py:389 -#: netbox/dcim/forms/bulk_import.py:280 +#: netbox/dcim/forms/bulk_edit.py:244 netbox/dcim/forms/bulk_edit.py:392 +#: netbox/dcim/forms/bulk_import.py:282 #: netbox/templates/dcim/devicetype.html:37 msgid "Height (U)" msgstr "Висота (U)" -#: netbox/dcim/forms/bulk_edit.py:250 netbox/dcim/forms/bulk_edit.py:394 -#: netbox/dcim/forms/filtersets.py:274 +#: netbox/dcim/forms/bulk_edit.py:253 netbox/dcim/forms/bulk_edit.py:397 +#: netbox/dcim/forms/filtersets.py:275 msgid "Descending units" msgstr "Юніти у низхідному порядку" -#: netbox/dcim/forms/bulk_edit.py:253 netbox/dcim/forms/bulk_edit.py:397 +#: netbox/dcim/forms/bulk_edit.py:256 netbox/dcim/forms/bulk_edit.py:400 msgid "Outer width" msgstr "Зовнішня ширина" -#: netbox/dcim/forms/bulk_edit.py:258 netbox/dcim/forms/bulk_edit.py:402 +#: netbox/dcim/forms/bulk_edit.py:261 netbox/dcim/forms/bulk_edit.py:405 msgid "Outer depth" msgstr "Зовнішня глибина" -#: netbox/dcim/forms/bulk_edit.py:263 netbox/dcim/forms/bulk_edit.py:407 -#: netbox/dcim/forms/bulk_import.py:204 netbox/dcim/forms/bulk_import.py:283 +#: netbox/dcim/forms/bulk_edit.py:266 netbox/dcim/forms/bulk_edit.py:410 +#: netbox/dcim/forms/bulk_import.py:206 netbox/dcim/forms/bulk_import.py:285 msgid "Outer unit" msgstr "Зовнішній блок" -#: netbox/dcim/forms/bulk_edit.py:268 netbox/dcim/forms/bulk_edit.py:412 +#: netbox/dcim/forms/bulk_edit.py:271 netbox/dcim/forms/bulk_edit.py:415 msgid "Mounting depth" msgstr "Глибина монтажу" -#: netbox/dcim/forms/bulk_edit.py:273 netbox/dcim/forms/bulk_edit.py:300 -#: netbox/dcim/forms/bulk_edit.py:422 netbox/dcim/forms/bulk_edit.py:452 -#: netbox/dcim/forms/bulk_edit.py:535 netbox/dcim/forms/bulk_edit.py:558 -#: netbox/dcim/forms/bulk_edit.py:579 netbox/dcim/forms/bulk_edit.py:601 -#: netbox/dcim/forms/bulk_import.py:406 netbox/dcim/forms/bulk_import.py:438 -#: netbox/dcim/forms/filtersets.py:285 netbox/dcim/forms/filtersets.py:307 -#: netbox/dcim/forms/filtersets.py:327 netbox/dcim/forms/filtersets.py:401 -#: netbox/dcim/forms/filtersets.py:488 netbox/dcim/forms/filtersets.py:594 -#: netbox/dcim/forms/filtersets.py:613 netbox/dcim/forms/filtersets.py:674 -#: netbox/dcim/forms/model_forms.py:221 netbox/dcim/forms/model_forms.py:298 -#: netbox/dcim/tables/devicetypes.py:106 netbox/dcim/tables/modules.py:35 -#: netbox/dcim/tables/racks.py:74 netbox/dcim/tables/racks.py:172 +#: netbox/dcim/forms/bulk_edit.py:276 netbox/dcim/forms/bulk_edit.py:303 +#: netbox/dcim/forms/bulk_edit.py:425 netbox/dcim/forms/bulk_edit.py:455 +#: netbox/dcim/forms/bulk_edit.py:538 netbox/dcim/forms/bulk_edit.py:561 +#: netbox/dcim/forms/bulk_edit.py:582 netbox/dcim/forms/bulk_edit.py:604 +#: netbox/dcim/forms/bulk_import.py:408 netbox/dcim/forms/bulk_import.py:440 +#: netbox/dcim/forms/filtersets.py:286 netbox/dcim/forms/filtersets.py:308 +#: netbox/dcim/forms/filtersets.py:328 netbox/dcim/forms/filtersets.py:402 +#: netbox/dcim/forms/filtersets.py:489 netbox/dcim/forms/filtersets.py:595 +#: netbox/dcim/forms/filtersets.py:614 netbox/dcim/forms/filtersets.py:675 +#: netbox/dcim/forms/model_forms.py:226 netbox/dcim/forms/model_forms.py:306 +#: netbox/dcim/tables/devicetypes.py:111 netbox/dcim/tables/modules.py:35 +#: netbox/dcim/tables/racks.py:74 netbox/dcim/tables/racks.py:171 #: netbox/extras/forms/bulk_edit.py:53 netbox/extras/forms/bulk_edit.py:133 #: netbox/extras/forms/bulk_edit.py:183 netbox/extras/forms/bulk_edit.py:288 -#: netbox/extras/forms/filtersets.py:64 netbox/extras/forms/filtersets.py:156 -#: netbox/extras/forms/filtersets.py:243 netbox/ipam/forms/bulk_edit.py:190 +#: netbox/extras/forms/filtersets.py:65 netbox/extras/forms/filtersets.py:159 +#: netbox/extras/forms/filtersets.py:249 netbox/ipam/forms/bulk_edit.py:193 #: netbox/templates/dcim/device.html:324 #: netbox/templates/dcim/devicetype.html:49 -#: netbox/templates/dcim/moduletype.html:45 netbox/templates/dcim/rack.html:81 +#: netbox/templates/dcim/moduletype.html:47 netbox/templates/dcim/rack.html:81 #: netbox/templates/dcim/racktype.html:41 #: netbox/templates/extras/configcontext.html:17 #: netbox/templates/extras/customlink.html:25 @@ -3558,131 +4060,86 @@ msgstr "Глибина монтажу" msgid "Weight" msgstr "Вага" -#: netbox/dcim/forms/bulk_edit.py:278 netbox/dcim/forms/bulk_edit.py:427 -#: netbox/dcim/forms/filtersets.py:290 +#: netbox/dcim/forms/bulk_edit.py:281 netbox/dcim/forms/bulk_edit.py:430 +#: netbox/dcim/forms/filtersets.py:291 msgid "Max weight" msgstr "Максимальна вага" -#: netbox/dcim/forms/bulk_edit.py:283 netbox/dcim/forms/bulk_edit.py:432 -#: netbox/dcim/forms/bulk_edit.py:540 netbox/dcim/forms/bulk_edit.py:584 -#: netbox/dcim/forms/bulk_import.py:210 netbox/dcim/forms/bulk_import.py:295 -#: netbox/dcim/forms/bulk_import.py:411 netbox/dcim/forms/bulk_import.py:443 -#: netbox/dcim/forms/filtersets.py:295 netbox/dcim/forms/filtersets.py:598 -#: netbox/dcim/forms/filtersets.py:678 +#: netbox/dcim/forms/bulk_edit.py:286 netbox/dcim/forms/bulk_edit.py:435 +#: netbox/dcim/forms/bulk_edit.py:543 netbox/dcim/forms/bulk_edit.py:587 +#: netbox/dcim/forms/bulk_import.py:212 netbox/dcim/forms/bulk_import.py:297 +#: netbox/dcim/forms/bulk_import.py:413 netbox/dcim/forms/bulk_import.py:445 +#: netbox/dcim/forms/filtersets.py:296 netbox/dcim/forms/filtersets.py:599 +#: netbox/dcim/forms/filtersets.py:679 msgid "Weight unit" msgstr "Вага юніта" -#: netbox/dcim/forms/bulk_edit.py:297 netbox/dcim/forms/filtersets.py:305 -#: netbox/dcim/forms/model_forms.py:217 netbox/dcim/forms/model_forms.py:256 +#: netbox/dcim/forms/bulk_edit.py:300 netbox/dcim/forms/filtersets.py:306 +#: netbox/dcim/forms/model_forms.py:222 netbox/dcim/forms/model_forms.py:261 #: netbox/templates/dcim/rack.html:45 netbox/templates/dcim/racktype.html:13 msgid "Rack Type" msgstr "Тип стійки" -#: netbox/dcim/forms/bulk_edit.py:299 netbox/dcim/forms/model_forms.py:220 -#: netbox/dcim/forms/model_forms.py:297 +#: netbox/dcim/forms/bulk_edit.py:302 netbox/dcim/forms/model_forms.py:225 +#: netbox/dcim/forms/model_forms.py:305 msgid "Outer Dimensions" msgstr "Зовнішні розміри" -#: netbox/dcim/forms/bulk_edit.py:302 netbox/dcim/forms/model_forms.py:222 -#: netbox/dcim/forms/model_forms.py:299 netbox/templates/dcim/device.html:315 +#: netbox/dcim/forms/bulk_edit.py:305 netbox/dcim/forms/model_forms.py:227 +#: netbox/dcim/forms/model_forms.py:307 netbox/templates/dcim/device.html:315 #: netbox/templates/dcim/inc/panels/racktype_dimensions.html:3 msgid "Dimensions" msgstr "Габарити" -#: netbox/dcim/forms/bulk_edit.py:304 netbox/dcim/forms/filtersets.py:306 -#: netbox/dcim/forms/filtersets.py:326 netbox/dcim/forms/model_forms.py:224 +#: netbox/dcim/forms/bulk_edit.py:307 netbox/dcim/forms/filtersets.py:307 +#: netbox/dcim/forms/filtersets.py:327 netbox/dcim/forms/model_forms.py:229 #: netbox/templates/dcim/inc/panels/racktype_numbering.html:3 msgid "Numbering" msgstr "Нумерація" -#: netbox/dcim/forms/bulk_edit.py:358 netbox/dcim/forms/bulk_edit.py:1277 -#: netbox/dcim/forms/bulk_edit.py:1698 netbox/dcim/forms/bulk_import.py:253 -#: netbox/dcim/forms/bulk_import.py:1098 netbox/dcim/forms/filtersets.py:367 -#: netbox/dcim/forms/filtersets.py:777 netbox/dcim/forms/filtersets.py:1534 -#: netbox/dcim/forms/model_forms.py:251 netbox/dcim/forms/model_forms.py:1077 -#: netbox/dcim/forms/model_forms.py:1517 -#: netbox/dcim/forms/object_import.py:181 netbox/dcim/tables/devices.py:169 -#: netbox/dcim/tables/devices.py:809 netbox/dcim/tables/devices.py:937 -#: netbox/dcim/tables/devicetypes.py:304 netbox/dcim/tables/racks.py:129 -#: netbox/extras/filtersets.py:552 netbox/ipam/forms/bulk_edit.py:261 -#: netbox/ipam/forms/bulk_edit.py:311 netbox/ipam/forms/bulk_edit.py:359 -#: netbox/ipam/forms/bulk_edit.py:511 netbox/ipam/forms/bulk_import.py:197 -#: netbox/ipam/forms/bulk_import.py:262 netbox/ipam/forms/bulk_import.py:298 -#: netbox/ipam/forms/bulk_import.py:479 netbox/ipam/forms/filtersets.py:237 -#: netbox/ipam/forms/filtersets.py:289 netbox/ipam/forms/filtersets.py:360 -#: netbox/ipam/forms/filtersets.py:509 netbox/ipam/forms/model_forms.py:188 -#: netbox/ipam/forms/model_forms.py:221 netbox/ipam/forms/model_forms.py:250 -#: netbox/ipam/forms/model_forms.py:676 netbox/ipam/tables/ip.py:258 -#: netbox/ipam/tables/ip.py:316 netbox/ipam/tables/ip.py:367 -#: netbox/ipam/tables/vlans.py:130 netbox/ipam/tables/vlans.py:235 -#: netbox/templates/dcim/device.html:182 -#: netbox/templates/dcim/inc/panels/inventory_items.html:20 -#: netbox/templates/dcim/interface.html:223 -#: netbox/templates/dcim/inventoryitem.html:36 -#: netbox/templates/dcim/rack.html:49 netbox/templates/ipam/ipaddress.html:41 -#: netbox/templates/ipam/iprange.html:50 netbox/templates/ipam/prefix.html:77 -#: netbox/templates/ipam/role.html:19 netbox/templates/ipam/vlan.html:52 -#: netbox/templates/virtualization/virtualmachine.html:23 -#: netbox/templates/vpn/tunneltermination.html:17 -#: netbox/templates/wireless/inc/wirelesslink_interface.html:20 -#: netbox/tenancy/forms/bulk_edit.py:142 -#: netbox/tenancy/forms/filtersets.py:107 -#: netbox/tenancy/forms/model_forms.py:137 -#: netbox/tenancy/tables/contacts.py:102 -#: netbox/virtualization/forms/bulk_edit.py:145 -#: netbox/virtualization/forms/bulk_import.py:106 -#: netbox/virtualization/forms/filtersets.py:157 -#: netbox/virtualization/forms/model_forms.py:195 -#: netbox/virtualization/tables/virtualmachines.py:75 -#: netbox/vpn/forms/bulk_edit.py:87 netbox/vpn/forms/bulk_import.py:81 -#: netbox/vpn/forms/filtersets.py:85 netbox/vpn/forms/model_forms.py:78 -#: netbox/vpn/forms/model_forms.py:113 netbox/vpn/tables/tunnels.py:82 -msgid "Role" -msgstr "Роль" - -#: netbox/dcim/forms/bulk_edit.py:363 netbox/dcim/forms/bulk_import.py:260 -#: netbox/dcim/forms/filtersets.py:380 +#: netbox/dcim/forms/bulk_edit.py:366 netbox/dcim/forms/bulk_import.py:262 +#: netbox/dcim/forms/filtersets.py:381 msgid "Rack type" msgstr "Тип стійки" -#: netbox/dcim/forms/bulk_edit.py:370 netbox/dcim/forms/bulk_edit.py:718 -#: netbox/dcim/forms/bulk_edit.py:779 netbox/templates/dcim/device.html:104 +#: netbox/dcim/forms/bulk_edit.py:373 netbox/dcim/forms/bulk_edit.py:721 +#: netbox/dcim/forms/bulk_edit.py:782 netbox/templates/dcim/device.html:104 #: netbox/templates/dcim/module.html:77 #: netbox/templates/dcim/modulebay.html:70 netbox/templates/dcim/rack.html:57 #: netbox/templates/virtualization/virtualmachine.html:35 msgid "Serial Number" msgstr "Серійний номер" -#: netbox/dcim/forms/bulk_edit.py:373 netbox/dcim/forms/filtersets.py:387 -#: netbox/dcim/forms/filtersets.py:813 netbox/dcim/forms/filtersets.py:967 -#: netbox/dcim/forms/filtersets.py:1546 +#: netbox/dcim/forms/bulk_edit.py:376 netbox/dcim/forms/filtersets.py:388 +#: netbox/dcim/forms/filtersets.py:814 netbox/dcim/forms/filtersets.py:968 +#: netbox/dcim/forms/filtersets.py:1551 msgid "Asset tag" msgstr "Призначеня міток" -#: netbox/dcim/forms/bulk_edit.py:417 netbox/dcim/forms/bulk_edit.py:530 -#: netbox/dcim/forms/bulk_edit.py:574 netbox/dcim/forms/bulk_edit.py:711 -#: netbox/dcim/forms/bulk_import.py:289 netbox/dcim/forms/bulk_import.py:432 -#: netbox/dcim/forms/bulk_import.py:602 netbox/dcim/forms/filtersets.py:280 -#: netbox/dcim/forms/filtersets.py:511 netbox/dcim/forms/filtersets.py:669 -#: netbox/dcim/forms/filtersets.py:804 netbox/templates/dcim/device.html:98 +#: netbox/dcim/forms/bulk_edit.py:420 netbox/dcim/forms/bulk_edit.py:533 +#: netbox/dcim/forms/bulk_edit.py:577 netbox/dcim/forms/bulk_edit.py:714 +#: netbox/dcim/forms/bulk_import.py:291 netbox/dcim/forms/bulk_import.py:434 +#: netbox/dcim/forms/bulk_import.py:607 netbox/dcim/forms/filtersets.py:281 +#: netbox/dcim/forms/filtersets.py:512 netbox/dcim/forms/filtersets.py:670 +#: netbox/dcim/forms/filtersets.py:805 netbox/templates/dcim/device.html:98 #: netbox/templates/dcim/devicetype.html:65 -#: netbox/templates/dcim/moduletype.html:41 netbox/templates/dcim/rack.html:65 +#: netbox/templates/dcim/moduletype.html:43 netbox/templates/dcim/rack.html:65 #: netbox/templates/dcim/racktype.html:28 msgid "Airflow" msgstr "Потік повітря" -#: netbox/dcim/forms/bulk_edit.py:446 netbox/dcim/forms/bulk_edit.py:925 -#: netbox/dcim/forms/bulk_import.py:344 netbox/dcim/forms/bulk_import.py:347 -#: netbox/dcim/forms/bulk_import.py:575 netbox/dcim/forms/bulk_import.py:1380 -#: netbox/dcim/forms/bulk_import.py:1384 netbox/dcim/forms/filtersets.py:104 -#: netbox/dcim/forms/filtersets.py:324 netbox/dcim/forms/filtersets.py:405 -#: netbox/dcim/forms/filtersets.py:419 netbox/dcim/forms/filtersets.py:457 -#: netbox/dcim/forms/filtersets.py:772 netbox/dcim/forms/filtersets.py:1035 -#: netbox/dcim/forms/filtersets.py:1167 netbox/dcim/forms/model_forms.py:264 -#: netbox/dcim/forms/model_forms.py:306 netbox/dcim/forms/model_forms.py:479 -#: netbox/dcim/forms/model_forms.py:755 netbox/dcim/forms/object_create.py:392 -#: netbox/dcim/tables/devices.py:161 netbox/dcim/tables/power.py:70 -#: netbox/dcim/tables/racks.py:217 netbox/ipam/forms/filtersets.py:442 +#: netbox/dcim/forms/bulk_edit.py:449 netbox/dcim/forms/bulk_edit.py:928 +#: netbox/dcim/forms/bulk_import.py:346 netbox/dcim/forms/bulk_import.py:349 +#: netbox/dcim/forms/bulk_import.py:580 netbox/dcim/forms/bulk_import.py:1477 +#: netbox/dcim/forms/bulk_import.py:1481 netbox/dcim/forms/filtersets.py:105 +#: netbox/dcim/forms/filtersets.py:325 netbox/dcim/forms/filtersets.py:406 +#: netbox/dcim/forms/filtersets.py:420 netbox/dcim/forms/filtersets.py:458 +#: netbox/dcim/forms/filtersets.py:773 netbox/dcim/forms/filtersets.py:1036 +#: netbox/dcim/forms/filtersets.py:1168 netbox/dcim/forms/model_forms.py:271 +#: netbox/dcim/forms/model_forms.py:314 netbox/dcim/forms/model_forms.py:489 +#: netbox/dcim/forms/model_forms.py:767 netbox/dcim/forms/object_create.py:392 +#: netbox/dcim/tables/devices.py:172 netbox/dcim/tables/power.py:70 +#: netbox/dcim/tables/racks.py:216 netbox/ipam/forms/filtersets.py:445 #: netbox/templates/dcim/device.html:30 #: netbox/templates/dcim/inc/cable_termination.html:16 #: netbox/templates/dcim/powerfeed.html:28 netbox/templates/dcim/rack.html:13 @@ -3693,212 +4150,144 @@ msgstr "Потік повітря" msgid "Rack" msgstr "Стійка" -#: netbox/dcim/forms/bulk_edit.py:450 netbox/dcim/forms/bulk_edit.py:744 -#: netbox/dcim/forms/filtersets.py:325 netbox/dcim/forms/filtersets.py:398 -#: netbox/dcim/forms/filtersets.py:481 netbox/dcim/forms/filtersets.py:608 -#: netbox/dcim/forms/filtersets.py:721 netbox/dcim/forms/filtersets.py:942 -#: netbox/dcim/forms/model_forms.py:670 netbox/dcim/forms/model_forms.py:1587 +#: netbox/dcim/forms/bulk_edit.py:453 netbox/dcim/forms/bulk_edit.py:747 +#: netbox/dcim/forms/filtersets.py:326 netbox/dcim/forms/filtersets.py:399 +#: netbox/dcim/forms/filtersets.py:482 netbox/dcim/forms/filtersets.py:609 +#: netbox/dcim/forms/filtersets.py:722 netbox/dcim/forms/filtersets.py:943 +#: netbox/dcim/forms/model_forms.py:681 netbox/dcim/forms/model_forms.py:1632 #: netbox/templates/dcim/device_edit.html:20 msgid "Hardware" msgstr "Апаратне забезпечення" -#: netbox/dcim/forms/bulk_edit.py:506 netbox/dcim/forms/bulk_import.py:399 -#: netbox/dcim/forms/filtersets.py:499 netbox/dcim/forms/model_forms.py:353 +#: netbox/dcim/forms/bulk_edit.py:509 netbox/dcim/forms/bulk_import.py:401 +#: netbox/dcim/forms/filtersets.py:500 netbox/dcim/forms/model_forms.py:362 msgid "Default platform" msgstr "Платформа за замовчуванням" -#: netbox/dcim/forms/bulk_edit.py:511 netbox/dcim/forms/bulk_edit.py:570 -#: netbox/dcim/forms/filtersets.py:502 netbox/dcim/forms/filtersets.py:622 +#: netbox/dcim/forms/bulk_edit.py:514 netbox/dcim/forms/bulk_edit.py:573 +#: netbox/dcim/forms/filtersets.py:503 netbox/dcim/forms/filtersets.py:623 msgid "Part number" msgstr "Номер партії" -#: netbox/dcim/forms/bulk_edit.py:515 +#: netbox/dcim/forms/bulk_edit.py:518 msgid "U height" msgstr "Висота U" -#: netbox/dcim/forms/bulk_edit.py:527 netbox/dcim/tables/devicetypes.py:102 +#: netbox/dcim/forms/bulk_edit.py:530 netbox/dcim/tables/devicetypes.py:107 msgid "Exclude from utilization" msgstr "Виключити з утилізації" -#: netbox/dcim/forms/bulk_edit.py:556 netbox/dcim/forms/model_forms.py:368 -#: netbox/dcim/tables/devicetypes.py:77 netbox/templates/dcim/device.html:88 +#: netbox/dcim/forms/bulk_edit.py:559 netbox/dcim/forms/model_forms.py:377 +#: netbox/dcim/tables/devicetypes.py:82 netbox/templates/dcim/device.html:88 #: netbox/templates/dcim/devicebay.html:52 #: netbox/templates/dcim/module.html:61 msgid "Device Type" msgstr "Тип пристрою" -#: netbox/dcim/forms/bulk_edit.py:598 netbox/dcim/forms/model_forms.py:401 +#: netbox/dcim/forms/bulk_edit.py:601 netbox/dcim/forms/model_forms.py:410 #: netbox/dcim/tables/modules.py:17 netbox/dcim/tables/modules.py:66 #: netbox/templates/dcim/module.html:65 #: netbox/templates/dcim/modulebay.html:66 -#: netbox/templates/dcim/moduletype.html:22 +#: netbox/templates/dcim/moduletype.html:24 msgid "Module Type" msgstr "Тип модуля" -#: netbox/dcim/forms/bulk_edit.py:602 netbox/dcim/forms/model_forms.py:371 -#: netbox/dcim/forms/model_forms.py:402 +#: netbox/dcim/forms/bulk_edit.py:605 netbox/dcim/forms/model_forms.py:380 +#: netbox/dcim/forms/model_forms.py:411 #: netbox/templates/dcim/devicetype.html:11 msgid "Chassis" msgstr "Шасі" -#: netbox/dcim/forms/bulk_edit.py:616 netbox/dcim/models/devices.py:484 -#: netbox/dcim/tables/devices.py:67 +#: netbox/dcim/forms/bulk_edit.py:619 netbox/dcim/models/devices.py:483 +#: netbox/dcim/tables/devices.py:78 msgid "VM role" msgstr "Роль віртуальної машини" -#: netbox/dcim/forms/bulk_edit.py:619 netbox/dcim/forms/bulk_edit.py:643 -#: netbox/dcim/forms/bulk_edit.py:726 netbox/dcim/forms/bulk_import.py:456 -#: netbox/dcim/forms/bulk_import.py:460 netbox/dcim/forms/bulk_import.py:479 -#: netbox/dcim/forms/bulk_import.py:483 netbox/dcim/forms/bulk_import.py:608 -#: netbox/dcim/forms/bulk_import.py:612 netbox/dcim/forms/filtersets.py:689 -#: netbox/dcim/forms/filtersets.py:705 netbox/dcim/forms/filtersets.py:823 -#: netbox/dcim/forms/model_forms.py:415 netbox/dcim/forms/model_forms.py:441 -#: netbox/dcim/forms/model_forms.py:555 -#: netbox/virtualization/forms/bulk_import.py:132 -#: netbox/virtualization/forms/bulk_import.py:133 -#: netbox/virtualization/forms/filtersets.py:188 -#: netbox/virtualization/forms/model_forms.py:215 +#: netbox/dcim/forms/bulk_edit.py:622 netbox/dcim/forms/bulk_edit.py:646 +#: netbox/dcim/forms/bulk_edit.py:729 netbox/dcim/forms/bulk_import.py:461 +#: netbox/dcim/forms/bulk_import.py:465 netbox/dcim/forms/bulk_import.py:484 +#: netbox/dcim/forms/bulk_import.py:488 netbox/dcim/forms/bulk_import.py:613 +#: netbox/dcim/forms/bulk_import.py:617 netbox/dcim/forms/filtersets.py:690 +#: netbox/dcim/forms/filtersets.py:706 netbox/dcim/forms/filtersets.py:824 +#: netbox/dcim/forms/model_forms.py:424 netbox/dcim/forms/model_forms.py:451 +#: netbox/dcim/forms/model_forms.py:566 +#: netbox/virtualization/forms/bulk_import.py:138 +#: netbox/virtualization/forms/bulk_import.py:139 +#: netbox/virtualization/forms/filtersets.py:193 +#: netbox/virtualization/forms/model_forms.py:222 msgid "Config template" msgstr "Шаблон конфігурації" -#: netbox/dcim/forms/bulk_edit.py:667 netbox/dcim/forms/bulk_edit.py:1076 -#: netbox/dcim/forms/bulk_import.py:514 netbox/dcim/forms/filtersets.py:114 -#: netbox/dcim/forms/model_forms.py:501 netbox/dcim/forms/model_forms.py:872 -#: netbox/dcim/forms/model_forms.py:889 netbox/extras/filtersets.py:547 +#: netbox/dcim/forms/bulk_edit.py:670 netbox/dcim/forms/bulk_edit.py:1079 +#: netbox/dcim/forms/bulk_import.py:519 netbox/dcim/forms/filtersets.py:115 +#: netbox/dcim/forms/model_forms.py:511 netbox/dcim/forms/model_forms.py:884 +#: netbox/dcim/forms/model_forms.py:901 netbox/extras/filtersets.py:547 msgid "Device type" msgstr "Тип пристрою" -#: netbox/dcim/forms/bulk_edit.py:678 netbox/dcim/forms/bulk_import.py:495 -#: netbox/dcim/forms/filtersets.py:119 netbox/dcim/forms/model_forms.py:509 +#: netbox/dcim/forms/bulk_edit.py:681 netbox/dcim/forms/bulk_import.py:500 +#: netbox/dcim/forms/filtersets.py:120 netbox/dcim/forms/model_forms.py:519 msgid "Device role" msgstr "Роль пристрою" -#: netbox/dcim/forms/bulk_edit.py:701 netbox/dcim/forms/bulk_import.py:520 -#: netbox/dcim/forms/filtersets.py:796 netbox/dcim/forms/model_forms.py:451 -#: netbox/dcim/forms/model_forms.py:513 netbox/dcim/tables/devices.py:182 +#: netbox/dcim/forms/bulk_edit.py:704 netbox/dcim/forms/bulk_import.py:525 +#: netbox/dcim/forms/filtersets.py:797 netbox/dcim/forms/model_forms.py:461 +#: netbox/dcim/forms/model_forms.py:524 netbox/dcim/tables/devices.py:193 #: netbox/extras/filtersets.py:563 netbox/templates/dcim/device.html:186 #: netbox/templates/dcim/platform.html:26 #: netbox/templates/virtualization/virtualmachine.html:27 -#: netbox/virtualization/forms/bulk_edit.py:160 -#: netbox/virtualization/forms/bulk_import.py:122 -#: netbox/virtualization/forms/filtersets.py:168 -#: netbox/virtualization/forms/model_forms.py:203 -#: netbox/virtualization/tables/virtualmachines.py:79 +#: netbox/virtualization/forms/bulk_edit.py:142 +#: netbox/virtualization/forms/bulk_import.py:128 +#: netbox/virtualization/forms/filtersets.py:173 +#: netbox/virtualization/forms/model_forms.py:210 +#: netbox/virtualization/tables/virtualmachines.py:49 msgid "Platform" msgstr "Платформа" -#: netbox/dcim/forms/bulk_edit.py:731 netbox/dcim/forms/bulk_import.py:539 -#: netbox/dcim/forms/filtersets.py:728 netbox/dcim/forms/filtersets.py:898 -#: netbox/dcim/forms/model_forms.py:522 netbox/dcim/tables/devices.py:202 -#: netbox/extras/filtersets.py:596 netbox/extras/forms/filtersets.py:322 -#: netbox/ipam/forms/filtersets.py:415 netbox/ipam/forms/filtersets.py:447 +#: netbox/dcim/forms/bulk_edit.py:734 netbox/dcim/forms/bulk_import.py:544 +#: netbox/dcim/forms/filtersets.py:729 netbox/dcim/forms/filtersets.py:899 +#: netbox/dcim/forms/model_forms.py:533 netbox/dcim/tables/devices.py:213 +#: netbox/extras/filtersets.py:596 netbox/extras/forms/filtersets.py:329 +#: netbox/ipam/forms/filtersets.py:418 netbox/ipam/forms/filtersets.py:450 #: netbox/templates/dcim/device.html:239 #: netbox/templates/virtualization/cluster.html:10 #: netbox/templates/virtualization/virtualmachine.html:92 #: netbox/templates/virtualization/virtualmachine.html:101 -#: netbox/virtualization/filtersets.py:157 -#: netbox/virtualization/filtersets.py:277 -#: netbox/virtualization/forms/bulk_edit.py:129 -#: netbox/virtualization/forms/bulk_import.py:92 -#: netbox/virtualization/forms/filtersets.py:99 -#: netbox/virtualization/forms/filtersets.py:123 -#: netbox/virtualization/forms/filtersets.py:204 -#: netbox/virtualization/forms/model_forms.py:79 -#: netbox/virtualization/forms/model_forms.py:176 -#: netbox/virtualization/tables/virtualmachines.py:67 +#: netbox/virtualization/filtersets.py:123 +#: netbox/virtualization/filtersets.py:243 +#: netbox/virtualization/forms/bulk_edit.py:111 +#: netbox/virtualization/forms/bulk_import.py:98 +#: netbox/virtualization/forms/filtersets.py:104 +#: netbox/virtualization/forms/filtersets.py:128 +#: netbox/virtualization/forms/filtersets.py:209 +#: netbox/virtualization/forms/model_forms.py:78 +#: netbox/virtualization/forms/model_forms.py:183 +#: netbox/virtualization/tables/virtualmachines.py:37 msgid "Cluster" msgstr "Кластер" -#: netbox/dcim/forms/bulk_edit.py:742 netbox/dcim/forms/bulk_edit.py:1296 -#: netbox/dcim/forms/bulk_edit.py:1693 netbox/dcim/forms/bulk_edit.py:1739 -#: netbox/dcim/forms/bulk_import.py:663 netbox/dcim/forms/bulk_import.py:725 -#: netbox/dcim/forms/bulk_import.py:751 netbox/dcim/forms/bulk_import.py:777 -#: netbox/dcim/forms/bulk_import.py:797 netbox/dcim/forms/bulk_import.py:850 -#: netbox/dcim/forms/bulk_import.py:968 netbox/dcim/forms/bulk_import.py:1016 -#: netbox/dcim/forms/bulk_import.py:1033 netbox/dcim/forms/bulk_import.py:1045 -#: netbox/dcim/forms/bulk_import.py:1093 netbox/dcim/forms/bulk_import.py:1444 -#: netbox/dcim/forms/connections.py:24 netbox/dcim/forms/filtersets.py:131 -#: netbox/dcim/forms/filtersets.py:921 netbox/dcim/forms/filtersets.py:1051 -#: netbox/dcim/forms/filtersets.py:1242 netbox/dcim/forms/filtersets.py:1267 -#: netbox/dcim/forms/filtersets.py:1291 netbox/dcim/forms/filtersets.py:1311 -#: netbox/dcim/forms/filtersets.py:1334 netbox/dcim/forms/filtersets.py:1444 -#: netbox/dcim/forms/filtersets.py:1469 netbox/dcim/forms/filtersets.py:1493 -#: netbox/dcim/forms/filtersets.py:1511 netbox/dcim/forms/filtersets.py:1528 -#: netbox/dcim/forms/filtersets.py:1592 netbox/dcim/forms/filtersets.py:1616 -#: netbox/dcim/forms/filtersets.py:1640 netbox/dcim/forms/model_forms.py:633 -#: netbox/dcim/forms/model_forms.py:849 netbox/dcim/forms/model_forms.py:1215 -#: netbox/dcim/forms/model_forms.py:1671 -#: netbox/dcim/forms/object_create.py:249 netbox/dcim/tables/connections.py:22 -#: netbox/dcim/tables/connections.py:41 netbox/dcim/tables/connections.py:60 -#: netbox/dcim/tables/devices.py:285 netbox/dcim/tables/devices.py:371 -#: netbox/dcim/tables/devices.py:412 netbox/dcim/tables/devices.py:454 -#: netbox/dcim/tables/devices.py:505 netbox/dcim/tables/devices.py:597 -#: netbox/dcim/tables/devices.py:697 netbox/dcim/tables/devices.py:754 -#: netbox/dcim/tables/devices.py:801 netbox/dcim/tables/devices.py:861 -#: netbox/dcim/tables/devices.py:930 netbox/dcim/tables/devices.py:1057 -#: netbox/dcim/tables/modules.py:53 netbox/extras/forms/filtersets.py:321 -#: netbox/ipam/forms/bulk_import.py:304 netbox/ipam/forms/bulk_import.py:505 -#: netbox/ipam/forms/filtersets.py:551 netbox/ipam/forms/model_forms.py:323 -#: netbox/ipam/forms/model_forms.py:712 netbox/ipam/forms/model_forms.py:745 -#: netbox/ipam/forms/model_forms.py:771 netbox/ipam/tables/vlans.py:180 -#: netbox/templates/dcim/consoleport.html:20 -#: netbox/templates/dcim/consoleserverport.html:20 -#: netbox/templates/dcim/device.html:15 netbox/templates/dcim/device.html:130 -#: netbox/templates/dcim/device_edit.html:10 -#: netbox/templates/dcim/devicebay.html:20 -#: netbox/templates/dcim/devicebay.html:48 -#: netbox/templates/dcim/frontport.html:20 -#: netbox/templates/dcim/interface.html:30 -#: netbox/templates/dcim/interface.html:161 -#: netbox/templates/dcim/inventoryitem.html:20 -#: netbox/templates/dcim/module.html:57 -#: netbox/templates/dcim/modulebay.html:20 -#: netbox/templates/dcim/poweroutlet.html:20 -#: netbox/templates/dcim/powerport.html:20 -#: netbox/templates/dcim/rearport.html:20 -#: netbox/templates/dcim/virtualchassis.html:65 -#: netbox/templates/dcim/virtualchassis_edit.html:51 -#: netbox/templates/dcim/virtualdevicecontext.html:22 -#: netbox/templates/virtualization/virtualmachine.html:114 -#: netbox/templates/vpn/tunneltermination.html:23 -#: netbox/templates/wireless/inc/wirelesslink_interface.html:6 -#: netbox/virtualization/filtersets.py:167 -#: netbox/virtualization/forms/bulk_edit.py:137 -#: netbox/virtualization/forms/bulk_import.py:99 -#: netbox/virtualization/forms/filtersets.py:128 -#: netbox/virtualization/forms/model_forms.py:185 -#: netbox/virtualization/tables/virtualmachines.py:71 netbox/vpn/choices.py:52 -#: netbox/vpn/forms/bulk_import.py:86 netbox/vpn/forms/bulk_import.py:283 -#: netbox/vpn/forms/filtersets.py:275 netbox/vpn/forms/model_forms.py:90 -#: netbox/vpn/forms/model_forms.py:125 netbox/vpn/forms/model_forms.py:236 -#: netbox/vpn/forms/model_forms.py:453 netbox/wireless/forms/model_forms.py:99 -#: netbox/wireless/forms/model_forms.py:141 -#: netbox/wireless/tables/wirelesslan.py:75 -msgid "Device" -msgstr "Пристрій" - -#: netbox/dcim/forms/bulk_edit.py:745 +#: netbox/dcim/forms/bulk_edit.py:748 #: netbox/templates/extras/dashboard/widget_config.html:7 -#: netbox/virtualization/forms/bulk_edit.py:191 +#: netbox/virtualization/forms/bulk_edit.py:173 msgid "Configuration" msgstr "Конфігурація" -#: netbox/dcim/forms/bulk_edit.py:746 netbox/netbox/navigation/menu.py:243 +#: netbox/dcim/forms/bulk_edit.py:749 netbox/netbox/navigation/menu.py:251 #: netbox/templates/dcim/device_edit.html:78 msgid "Virtualization" msgstr "Віртуалізація" -#: netbox/dcim/forms/bulk_edit.py:760 netbox/dcim/forms/bulk_import.py:675 -#: netbox/dcim/forms/model_forms.py:647 netbox/dcim/forms/model_forms.py:897 +#: netbox/dcim/forms/bulk_edit.py:763 netbox/dcim/forms/bulk_import.py:680 +#: netbox/dcim/forms/model_forms.py:658 netbox/dcim/forms/model_forms.py:909 msgid "Module type" msgstr "Тип модуля" -#: netbox/dcim/forms/bulk_edit.py:814 netbox/dcim/forms/bulk_edit.py:999 -#: netbox/dcim/forms/bulk_edit.py:1018 netbox/dcim/forms/bulk_edit.py:1041 -#: netbox/dcim/forms/bulk_edit.py:1083 netbox/dcim/forms/bulk_edit.py:1127 -#: netbox/dcim/forms/bulk_edit.py:1178 netbox/dcim/forms/bulk_edit.py:1205 -#: netbox/dcim/forms/bulk_edit.py:1232 netbox/dcim/forms/bulk_edit.py:1250 -#: netbox/dcim/forms/bulk_edit.py:1268 netbox/dcim/forms/filtersets.py:67 +#: netbox/dcim/forms/bulk_edit.py:817 netbox/dcim/forms/bulk_edit.py:1002 +#: netbox/dcim/forms/bulk_edit.py:1021 netbox/dcim/forms/bulk_edit.py:1044 +#: netbox/dcim/forms/bulk_edit.py:1086 netbox/dcim/forms/bulk_edit.py:1130 +#: netbox/dcim/forms/bulk_edit.py:1181 netbox/dcim/forms/bulk_edit.py:1208 +#: netbox/dcim/forms/bulk_edit.py:1235 netbox/dcim/forms/bulk_edit.py:1253 +#: netbox/dcim/forms/bulk_edit.py:1271 netbox/dcim/forms/filtersets.py:68 #: netbox/dcim/forms/object_create.py:46 netbox/templates/dcim/cable.html:32 #: netbox/templates/dcim/consoleport.html:32 #: netbox/templates/dcim/consoleserverport.html:32 @@ -3916,109 +4305,109 @@ msgstr "Тип модуля" msgid "Label" msgstr "Етикетка" -#: netbox/dcim/forms/bulk_edit.py:823 netbox/dcim/forms/filtersets.py:1068 +#: netbox/dcim/forms/bulk_edit.py:826 netbox/dcim/forms/filtersets.py:1069 #: netbox/templates/dcim/cable.html:50 msgid "Length" msgstr "Довжина" -#: netbox/dcim/forms/bulk_edit.py:828 netbox/dcim/forms/bulk_import.py:1248 -#: netbox/dcim/forms/bulk_import.py:1251 netbox/dcim/forms/filtersets.py:1072 +#: netbox/dcim/forms/bulk_edit.py:831 netbox/dcim/forms/bulk_import.py:1345 +#: netbox/dcim/forms/bulk_import.py:1348 netbox/dcim/forms/filtersets.py:1073 msgid "Length unit" msgstr "Довжина юніта" -#: netbox/dcim/forms/bulk_edit.py:852 +#: netbox/dcim/forms/bulk_edit.py:855 #: netbox/templates/dcim/virtualchassis.html:23 msgid "Domain" msgstr "Домен" -#: netbox/dcim/forms/bulk_edit.py:920 netbox/dcim/forms/bulk_import.py:1367 -#: netbox/dcim/forms/filtersets.py:1158 netbox/dcim/forms/model_forms.py:750 +#: netbox/dcim/forms/bulk_edit.py:923 netbox/dcim/forms/bulk_import.py:1464 +#: netbox/dcim/forms/filtersets.py:1159 netbox/dcim/forms/model_forms.py:761 msgid "Power panel" msgstr "Панель живлення" -#: netbox/dcim/forms/bulk_edit.py:942 netbox/dcim/forms/bulk_import.py:1403 -#: netbox/dcim/forms/filtersets.py:1180 +#: netbox/dcim/forms/bulk_edit.py:945 netbox/dcim/forms/bulk_import.py:1500 +#: netbox/dcim/forms/filtersets.py:1181 #: netbox/templates/dcim/powerfeed.html:83 msgid "Supply" msgstr "Постачання" -#: netbox/dcim/forms/bulk_edit.py:948 netbox/dcim/forms/bulk_import.py:1408 -#: netbox/dcim/forms/filtersets.py:1185 +#: netbox/dcim/forms/bulk_edit.py:951 netbox/dcim/forms/bulk_import.py:1505 +#: netbox/dcim/forms/filtersets.py:1186 #: netbox/templates/dcim/powerfeed.html:95 msgid "Phase" msgstr "Фаза" -#: netbox/dcim/forms/bulk_edit.py:954 netbox/dcim/forms/filtersets.py:1190 +#: netbox/dcim/forms/bulk_edit.py:957 netbox/dcim/forms/filtersets.py:1191 #: netbox/templates/dcim/powerfeed.html:87 msgid "Voltage" msgstr "Напруга" -#: netbox/dcim/forms/bulk_edit.py:958 netbox/dcim/forms/filtersets.py:1194 +#: netbox/dcim/forms/bulk_edit.py:961 netbox/dcim/forms/filtersets.py:1195 #: netbox/templates/dcim/powerfeed.html:91 msgid "Amperage" msgstr "Сила струму" -#: netbox/dcim/forms/bulk_edit.py:962 netbox/dcim/forms/filtersets.py:1198 +#: netbox/dcim/forms/bulk_edit.py:965 netbox/dcim/forms/filtersets.py:1199 msgid "Max utilization" msgstr "Максимальне використання" -#: netbox/dcim/forms/bulk_edit.py:1051 +#: netbox/dcim/forms/bulk_edit.py:1054 msgid "Maximum draw" msgstr "Максимальна потужність" -#: netbox/dcim/forms/bulk_edit.py:1054 -#: netbox/dcim/models/device_component_templates.py:282 -#: netbox/dcim/models/device_components.py:356 +#: netbox/dcim/forms/bulk_edit.py:1057 +#: netbox/dcim/models/device_component_templates.py:281 +#: netbox/dcim/models/device_components.py:349 msgid "Maximum power draw (watts)" msgstr "Максимальна споживана потужність (Вт)" -#: netbox/dcim/forms/bulk_edit.py:1057 +#: netbox/dcim/forms/bulk_edit.py:1060 msgid "Allocated draw" msgstr "Виділена потужність" -#: netbox/dcim/forms/bulk_edit.py:1060 -#: netbox/dcim/models/device_component_templates.py:289 -#: netbox/dcim/models/device_components.py:363 +#: netbox/dcim/forms/bulk_edit.py:1063 +#: netbox/dcim/models/device_component_templates.py:288 +#: netbox/dcim/models/device_components.py:356 msgid "Allocated power draw (watts)" msgstr "Виділена споживана потужність (Вт)" -#: netbox/dcim/forms/bulk_edit.py:1093 netbox/dcim/forms/bulk_import.py:808 -#: netbox/dcim/forms/model_forms.py:960 netbox/dcim/forms/model_forms.py:1285 -#: netbox/dcim/forms/model_forms.py:1574 netbox/dcim/forms/object_import.py:55 +#: netbox/dcim/forms/bulk_edit.py:1096 netbox/dcim/forms/bulk_import.py:813 +#: netbox/dcim/forms/model_forms.py:972 netbox/dcim/forms/model_forms.py:1301 +#: netbox/dcim/forms/model_forms.py:1616 netbox/dcim/forms/object_import.py:55 msgid "Power port" msgstr "Порт живлення" -#: netbox/dcim/forms/bulk_edit.py:1098 netbox/dcim/forms/bulk_import.py:815 +#: netbox/dcim/forms/bulk_edit.py:1101 netbox/dcim/forms/bulk_import.py:820 msgid "Feed leg" msgstr "Фідер живлення" -#: netbox/dcim/forms/bulk_edit.py:1144 netbox/dcim/forms/bulk_edit.py:1462 +#: netbox/dcim/forms/bulk_edit.py:1147 netbox/dcim/forms/bulk_edit.py:1465 msgid "Management only" msgstr "Тільки управління" -#: netbox/dcim/forms/bulk_edit.py:1154 netbox/dcim/forms/bulk_edit.py:1468 -#: netbox/dcim/forms/bulk_import.py:898 netbox/dcim/forms/filtersets.py:1394 +#: netbox/dcim/forms/bulk_edit.py:1157 netbox/dcim/forms/bulk_edit.py:1471 +#: netbox/dcim/forms/bulk_import.py:906 netbox/dcim/forms/filtersets.py:1399 #: netbox/dcim/forms/object_import.py:90 -#: netbox/dcim/models/device_component_templates.py:437 -#: netbox/dcim/models/device_components.py:670 +#: netbox/dcim/models/device_component_templates.py:445 +#: netbox/dcim/models/device_components.py:721 msgid "PoE mode" msgstr "Режим PoE" -#: netbox/dcim/forms/bulk_edit.py:1160 netbox/dcim/forms/bulk_edit.py:1474 -#: netbox/dcim/forms/bulk_import.py:904 netbox/dcim/forms/filtersets.py:1399 +#: netbox/dcim/forms/bulk_edit.py:1163 netbox/dcim/forms/bulk_edit.py:1477 +#: netbox/dcim/forms/bulk_import.py:912 netbox/dcim/forms/filtersets.py:1404 #: netbox/dcim/forms/object_import.py:95 -#: netbox/dcim/models/device_component_templates.py:443 -#: netbox/dcim/models/device_components.py:676 +#: netbox/dcim/models/device_component_templates.py:452 +#: netbox/dcim/models/device_components.py:728 msgid "PoE type" msgstr "Тип PoE" -#: netbox/dcim/forms/bulk_edit.py:1166 netbox/dcim/forms/filtersets.py:1404 +#: netbox/dcim/forms/bulk_edit.py:1169 netbox/dcim/forms/filtersets.py:1409 #: netbox/dcim/forms/object_import.py:100 msgid "Wireless role" msgstr "Бездротова роль" -#: netbox/dcim/forms/bulk_edit.py:1303 netbox/dcim/forms/model_forms.py:669 -#: netbox/dcim/forms/model_forms.py:1230 netbox/dcim/tables/devices.py:313 +#: netbox/dcim/forms/bulk_edit.py:1306 netbox/dcim/forms/model_forms.py:680 +#: netbox/dcim/forms/model_forms.py:1246 netbox/dcim/tables/devices.py:323 #: netbox/templates/dcim/consoleport.html:24 #: netbox/templates/dcim/consoleserverport.html:24 #: netbox/templates/dcim/frontport.html:24 @@ -4032,31 +4421,31 @@ msgstr "Бездротова роль" msgid "Module" msgstr "Модуль" -#: netbox/dcim/forms/bulk_edit.py:1442 netbox/dcim/tables/devices.py:665 -#: netbox/templates/dcim/interface.html:110 +#: netbox/dcim/forms/bulk_edit.py:1445 netbox/dcim/tables/devices.py:699 +#: netbox/templates/dcim/interface.html:116 msgid "LAG" msgstr "LAG" -#: netbox/dcim/forms/bulk_edit.py:1447 netbox/dcim/forms/model_forms.py:1312 +#: netbox/dcim/forms/bulk_edit.py:1450 netbox/dcim/forms/model_forms.py:1328 msgid "Virtual device contexts" msgstr "Контексти віртуальних пристроїв" -#: netbox/dcim/forms/bulk_edit.py:1453 netbox/dcim/forms/bulk_import.py:736 -#: netbox/dcim/forms/bulk_import.py:762 netbox/dcim/forms/filtersets.py:1252 -#: netbox/dcim/forms/filtersets.py:1277 netbox/dcim/forms/filtersets.py:1358 -#: netbox/dcim/tables/devices.py:610 -#: netbox/templates/circuits/inc/circuit_termination_fields.html:67 +#: netbox/dcim/forms/bulk_edit.py:1456 netbox/dcim/forms/bulk_import.py:741 +#: netbox/dcim/forms/bulk_import.py:767 netbox/dcim/forms/filtersets.py:1253 +#: netbox/dcim/forms/filtersets.py:1278 netbox/dcim/forms/filtersets.py:1363 +#: netbox/dcim/tables/devices.py:632 +#: netbox/templates/circuits/inc/circuit_termination_fields.html:62 #: netbox/templates/dcim/consoleport.html:40 #: netbox/templates/dcim/consoleserverport.html:40 msgid "Speed" msgstr "Швидкість" -#: netbox/dcim/forms/bulk_edit.py:1482 netbox/dcim/forms/bulk_import.py:907 +#: netbox/dcim/forms/bulk_edit.py:1485 netbox/dcim/forms/bulk_import.py:915 #: netbox/templates/vpn/ikepolicy.html:25 #: netbox/templates/vpn/ipsecprofile.html:21 #: netbox/templates/vpn/ipsecprofile.html:48 -#: netbox/virtualization/forms/bulk_edit.py:233 -#: netbox/virtualization/forms/bulk_import.py:165 +#: netbox/virtualization/forms/bulk_edit.py:215 +#: netbox/virtualization/forms/bulk_import.py:171 #: netbox/vpn/forms/bulk_edit.py:146 netbox/vpn/forms/bulk_edit.py:232 #: netbox/vpn/forms/bulk_import.py:176 netbox/vpn/forms/bulk_import.py:234 #: netbox/vpn/forms/filtersets.py:135 netbox/vpn/forms/filtersets.py:178 @@ -4065,299 +4454,305 @@ msgstr "Швидкість" msgid "Mode" msgstr "Режим" -#: netbox/dcim/forms/bulk_edit.py:1490 netbox/dcim/forms/model_forms.py:1361 -#: netbox/ipam/forms/bulk_import.py:178 netbox/ipam/forms/filtersets.py:498 -#: netbox/ipam/models/vlans.py:84 netbox/virtualization/forms/bulk_edit.py:240 -#: netbox/virtualization/forms/model_forms.py:321 +#: netbox/dcim/forms/bulk_edit.py:1493 netbox/dcim/forms/model_forms.py:1377 +#: netbox/ipam/forms/bulk_import.py:174 netbox/ipam/forms/filtersets.py:539 +#: netbox/ipam/models/vlans.py:86 netbox/virtualization/forms/bulk_edit.py:222 +#: netbox/virtualization/forms/model_forms.py:335 msgid "VLAN group" msgstr "Група VLAN" -#: netbox/dcim/forms/bulk_edit.py:1499 netbox/dcim/forms/model_forms.py:1367 -#: netbox/dcim/tables/devices.py:579 -#: netbox/virtualization/forms/bulk_edit.py:248 -#: netbox/virtualization/forms/model_forms.py:326 +#: netbox/dcim/forms/bulk_edit.py:1502 netbox/dcim/forms/model_forms.py:1383 +#: netbox/dcim/tables/devices.py:593 +#: netbox/virtualization/forms/bulk_edit.py:230 +#: netbox/virtualization/forms/model_forms.py:340 msgid "Untagged VLAN" msgstr "VLAN без міток" -#: netbox/dcim/forms/bulk_edit.py:1508 netbox/dcim/forms/model_forms.py:1376 -#: netbox/dcim/tables/devices.py:585 -#: netbox/virtualization/forms/bulk_edit.py:256 -#: netbox/virtualization/forms/model_forms.py:335 +#: netbox/dcim/forms/bulk_edit.py:1511 netbox/dcim/forms/model_forms.py:1392 +#: netbox/dcim/tables/devices.py:599 +#: netbox/virtualization/forms/bulk_edit.py:238 +#: netbox/virtualization/forms/model_forms.py:349 msgid "Tagged VLANs" msgstr "VLAN'и з мітками" -#: netbox/dcim/forms/bulk_edit.py:1511 +#: netbox/dcim/forms/bulk_edit.py:1514 msgid "Add tagged VLANs" msgstr "Додати VLAN'и з мітками" -#: netbox/dcim/forms/bulk_edit.py:1520 +#: netbox/dcim/forms/bulk_edit.py:1523 msgid "Remove tagged VLANs" msgstr "Видалити мітки з VLAN'ів" -#: netbox/dcim/forms/bulk_edit.py:1536 netbox/dcim/forms/model_forms.py:1348 +#: netbox/dcim/forms/bulk_edit.py:1534 netbox/dcim/forms/model_forms.py:1401 +#: netbox/virtualization/forms/model_forms.py:358 +msgid "Q-in-Q Service VLAN" +msgstr "Сервісна локальна мережа Q-in-Q" + +#: netbox/dcim/forms/bulk_edit.py:1549 netbox/dcim/forms/model_forms.py:1364 msgid "Wireless LAN group" msgstr "Група бездротової локальної мережі" -#: netbox/dcim/forms/bulk_edit.py:1541 netbox/dcim/forms/model_forms.py:1353 -#: netbox/dcim/tables/devices.py:619 netbox/netbox/navigation/menu.py:146 -#: netbox/templates/dcim/interface.html:280 +#: netbox/dcim/forms/bulk_edit.py:1554 netbox/dcim/forms/model_forms.py:1369 +#: netbox/dcim/tables/devices.py:641 netbox/netbox/navigation/menu.py:152 +#: netbox/templates/dcim/interface.html:337 #: netbox/wireless/tables/wirelesslan.py:24 msgid "Wireless LANs" msgstr "Бездротові локальні мережі" -#: netbox/dcim/forms/bulk_edit.py:1550 netbox/dcim/forms/filtersets.py:1328 -#: netbox/dcim/forms/model_forms.py:1397 netbox/ipam/forms/bulk_edit.py:286 -#: netbox/ipam/forms/bulk_edit.py:378 netbox/ipam/forms/filtersets.py:169 -#: netbox/templates/dcim/interface.html:122 -#: netbox/templates/ipam/prefix.html:95 -#: netbox/virtualization/forms/model_forms.py:349 +#: netbox/dcim/forms/bulk_edit.py:1563 netbox/dcim/forms/filtersets.py:1333 +#: netbox/dcim/forms/model_forms.py:1435 netbox/ipam/forms/bulk_edit.py:269 +#: netbox/ipam/forms/bulk_edit.py:362 netbox/ipam/forms/filtersets.py:171 +#: netbox/netbox/navigation/menu.py:108 +#: netbox/templates/dcim/interface.html:128 +#: netbox/templates/ipam/prefix.html:91 +#: netbox/templates/virtualization/vminterface.html:70 +#: netbox/virtualization/forms/model_forms.py:378 msgid "Addressing" msgstr "Адресація" -#: netbox/dcim/forms/bulk_edit.py:1551 netbox/dcim/forms/filtersets.py:720 -#: netbox/dcim/forms/model_forms.py:1398 -#: netbox/virtualization/forms/model_forms.py:350 +#: netbox/dcim/forms/bulk_edit.py:1564 netbox/dcim/forms/filtersets.py:721 +#: netbox/dcim/forms/model_forms.py:1436 +#: netbox/virtualization/forms/model_forms.py:379 msgid "Operation" msgstr "Операція" -#: netbox/dcim/forms/bulk_edit.py:1552 netbox/dcim/forms/filtersets.py:1329 -#: netbox/dcim/forms/model_forms.py:994 netbox/dcim/forms/model_forms.py:1400 +#: netbox/dcim/forms/bulk_edit.py:1565 netbox/dcim/forms/filtersets.py:1334 +#: netbox/dcim/forms/model_forms.py:1006 netbox/dcim/forms/model_forms.py:1438 msgid "PoE" msgstr "PoE" -#: netbox/dcim/forms/bulk_edit.py:1553 netbox/dcim/forms/model_forms.py:1399 -#: netbox/templates/dcim/interface.html:99 -#: netbox/virtualization/forms/bulk_edit.py:267 -#: netbox/virtualization/forms/model_forms.py:351 +#: netbox/dcim/forms/bulk_edit.py:1566 netbox/dcim/forms/model_forms.py:1437 +#: netbox/templates/dcim/interface.html:105 +#: netbox/virtualization/forms/bulk_edit.py:254 +#: netbox/virtualization/forms/model_forms.py:380 msgid "Related Interfaces" msgstr "Пов'язані інтерфейси" -#: netbox/dcim/forms/bulk_edit.py:1554 netbox/dcim/forms/model_forms.py:1401 -#: netbox/virtualization/forms/bulk_edit.py:268 -#: netbox/virtualization/forms/model_forms.py:352 +#: netbox/dcim/forms/bulk_edit.py:1568 netbox/dcim/forms/model_forms.py:1441 +#: netbox/virtualization/forms/bulk_edit.py:257 +#: netbox/virtualization/forms/model_forms.py:383 msgid "802.1Q Switching" msgstr "Комутація 802.1Q" -#: netbox/dcim/forms/bulk_edit.py:1558 +#: netbox/dcim/forms/bulk_edit.py:1573 msgid "Add/Remove" msgstr "Додати/Видалити" -#: netbox/dcim/forms/bulk_edit.py:1617 netbox/dcim/forms/bulk_edit.py:1619 +#: netbox/dcim/forms/bulk_edit.py:1632 netbox/dcim/forms/bulk_edit.py:1634 msgid "Interface mode must be specified to assign VLANs" msgstr "Для призначення VLAN'ів необхідно вказати режим інтерфейсу" -#: netbox/dcim/forms/bulk_edit.py:1624 netbox/dcim/forms/common.py:50 +#: netbox/dcim/forms/bulk_edit.py:1639 msgid "An access interface cannot have tagged VLANs assigned." msgstr "Інтерфейс доступу не може призначити VLAN'и з мітками." -#: netbox/dcim/forms/bulk_import.py:64 +#: netbox/dcim/forms/bulk_import.py:66 msgid "Name of parent region" msgstr "Назва батьківського регіону" -#: netbox/dcim/forms/bulk_import.py:78 +#: netbox/dcim/forms/bulk_import.py:80 msgid "Name of parent site group" msgstr "Назва батьківської групи тех. майданчиків" -#: netbox/dcim/forms/bulk_import.py:97 +#: netbox/dcim/forms/bulk_import.py:99 msgid "Assigned region" msgstr "Призначений регіон" -#: netbox/dcim/forms/bulk_import.py:104 netbox/tenancy/forms/bulk_import.py:44 +#: netbox/dcim/forms/bulk_import.py:106 netbox/tenancy/forms/bulk_import.py:44 #: netbox/tenancy/forms/bulk_import.py:85 -#: netbox/wireless/forms/bulk_import.py:40 +#: netbox/wireless/forms/bulk_import.py:42 msgid "Assigned group" msgstr "Призначена група" -#: netbox/dcim/forms/bulk_import.py:123 +#: netbox/dcim/forms/bulk_import.py:125 msgid "available options" msgstr "доступні опції" -#: netbox/dcim/forms/bulk_import.py:134 netbox/dcim/forms/bulk_import.py:565 -#: netbox/dcim/forms/bulk_import.py:1364 netbox/ipam/forms/bulk_import.py:175 -#: netbox/ipam/forms/bulk_import.py:457 -#: netbox/virtualization/forms/bulk_import.py:63 -#: netbox/virtualization/forms/bulk_import.py:89 +#: netbox/dcim/forms/bulk_import.py:136 netbox/dcim/forms/bulk_import.py:570 +#: netbox/dcim/forms/bulk_import.py:1461 netbox/ipam/forms/bulk_import.py:456 +#: netbox/virtualization/forms/bulk_import.py:64 +#: netbox/virtualization/forms/bulk_import.py:95 msgid "Assigned site" msgstr "Призначений тех. майданчик" -#: netbox/dcim/forms/bulk_import.py:141 +#: netbox/dcim/forms/bulk_import.py:143 msgid "Parent location" msgstr "Місцезнаходження прабатька" -#: netbox/dcim/forms/bulk_import.py:143 +#: netbox/dcim/forms/bulk_import.py:145 msgid "Location not found." msgstr "Місцезнаходження не знайдено." -#: netbox/dcim/forms/bulk_import.py:185 +#: netbox/dcim/forms/bulk_import.py:187 msgid "The manufacturer of this rack type" msgstr "Виробник даного стелажного типу" -#: netbox/dcim/forms/bulk_import.py:196 +#: netbox/dcim/forms/bulk_import.py:198 msgid "The lowest-numbered position in the rack" msgstr "Позиція з найменшою нумерованістю в стійці" -#: netbox/dcim/forms/bulk_import.py:201 netbox/dcim/forms/bulk_import.py:276 +#: netbox/dcim/forms/bulk_import.py:203 netbox/dcim/forms/bulk_import.py:278 msgid "Rail-to-rail width (in inches)" msgstr "Ширина рейки до рейки (у дюймах)" -#: netbox/dcim/forms/bulk_import.py:207 netbox/dcim/forms/bulk_import.py:286 +#: netbox/dcim/forms/bulk_import.py:209 netbox/dcim/forms/bulk_import.py:288 msgid "Unit for outer dimensions" msgstr "Блок для зовнішніх розмірів" -#: netbox/dcim/forms/bulk_import.py:213 netbox/dcim/forms/bulk_import.py:298 +#: netbox/dcim/forms/bulk_import.py:215 netbox/dcim/forms/bulk_import.py:300 msgid "Unit for rack weights" msgstr "Блок для стелажних ваг" -#: netbox/dcim/forms/bulk_import.py:245 +#: netbox/dcim/forms/bulk_import.py:247 msgid "Name of assigned tenant" msgstr "ПІБ призначеного орендаря" -#: netbox/dcim/forms/bulk_import.py:257 +#: netbox/dcim/forms/bulk_import.py:259 msgid "Name of assigned role" msgstr "Назва призначеної ролі" -#: netbox/dcim/forms/bulk_import.py:264 +#: netbox/dcim/forms/bulk_import.py:266 msgid "Rack type model" msgstr "Модель типу стійки" -#: netbox/dcim/forms/bulk_import.py:292 netbox/dcim/forms/bulk_import.py:435 -#: netbox/dcim/forms/bulk_import.py:605 +#: netbox/dcim/forms/bulk_import.py:294 netbox/dcim/forms/bulk_import.py:437 +#: netbox/dcim/forms/bulk_import.py:610 msgid "Airflow direction" msgstr "Напрямок повітряного потоку" -#: netbox/dcim/forms/bulk_import.py:324 +#: netbox/dcim/forms/bulk_import.py:326 msgid "Width must be set if not specifying a rack type." msgstr "Ширина повинна бути встановлена, якщо не вказано тип стійки." -#: netbox/dcim/forms/bulk_import.py:326 +#: netbox/dcim/forms/bulk_import.py:328 msgid "U height must be set if not specifying a rack type." msgstr "Висота U повинна бути встановлена, якщо не вказано тип стійки." -#: netbox/dcim/forms/bulk_import.py:334 +#: netbox/dcim/forms/bulk_import.py:336 msgid "Parent site" msgstr "Батьківський тех. майданчик" -#: netbox/dcim/forms/bulk_import.py:341 netbox/dcim/forms/bulk_import.py:1377 +#: netbox/dcim/forms/bulk_import.py:343 netbox/dcim/forms/bulk_import.py:1474 msgid "Rack's location (if any)" msgstr "Розташування стійки (якщо є)" -#: netbox/dcim/forms/bulk_import.py:350 netbox/dcim/forms/model_forms.py:311 -#: netbox/dcim/tables/racks.py:222 +#: netbox/dcim/forms/bulk_import.py:352 netbox/dcim/forms/model_forms.py:319 +#: netbox/dcim/tables/racks.py:221 #: netbox/templates/dcim/rackreservation.html:12 #: netbox/templates/dcim/rackreservation.html:45 msgid "Units" msgstr "Юніти" -#: netbox/dcim/forms/bulk_import.py:353 +#: netbox/dcim/forms/bulk_import.py:355 msgid "Comma-separated list of individual unit numbers" msgstr "Список окремих номерів юнітів, розділених комами" -#: netbox/dcim/forms/bulk_import.py:396 +#: netbox/dcim/forms/bulk_import.py:398 msgid "The manufacturer which produces this device type" msgstr "Виробник, який випускає цей тип пристрою" -#: netbox/dcim/forms/bulk_import.py:403 +#: netbox/dcim/forms/bulk_import.py:405 msgid "The default platform for devices of this type (optional)" msgstr "Платформа за замовчуванням для пристроїв такого типу (опціонально)" -#: netbox/dcim/forms/bulk_import.py:408 +#: netbox/dcim/forms/bulk_import.py:410 msgid "Device weight" msgstr "Вага пристрою" -#: netbox/dcim/forms/bulk_import.py:414 +#: netbox/dcim/forms/bulk_import.py:416 msgid "Unit for device weight" msgstr "Вага пристрою на 1 юніт" -#: netbox/dcim/forms/bulk_import.py:440 +#: netbox/dcim/forms/bulk_import.py:442 msgid "Module weight" msgstr "Вага модуля" -#: netbox/dcim/forms/bulk_import.py:446 +#: netbox/dcim/forms/bulk_import.py:448 msgid "Unit for module weight" msgstr "Вага модуля на 1 юніт" -#: netbox/dcim/forms/bulk_import.py:476 +#: netbox/dcim/forms/bulk_import.py:481 msgid "Limit platform assignments to this manufacturer" msgstr "Обмежте призначення платформи цьому виробнику" -#: netbox/dcim/forms/bulk_import.py:498 netbox/dcim/forms/bulk_import.py:1447 +#: netbox/dcim/forms/bulk_import.py:503 netbox/dcim/forms/bulk_import.py:1544 #: netbox/tenancy/forms/bulk_import.py:106 msgid "Assigned role" msgstr "Призначена роль" -#: netbox/dcim/forms/bulk_import.py:511 +#: netbox/dcim/forms/bulk_import.py:516 msgid "Device type manufacturer" msgstr "Тип пристрою виробник" -#: netbox/dcim/forms/bulk_import.py:517 +#: netbox/dcim/forms/bulk_import.py:522 msgid "Device type model" msgstr "Модель типу пристрою" -#: netbox/dcim/forms/bulk_import.py:524 -#: netbox/virtualization/forms/bulk_import.py:126 +#: netbox/dcim/forms/bulk_import.py:529 +#: netbox/virtualization/forms/bulk_import.py:132 msgid "Assigned platform" msgstr "Призначена платформа" -#: netbox/dcim/forms/bulk_import.py:532 netbox/dcim/forms/bulk_import.py:536 -#: netbox/dcim/forms/model_forms.py:536 +#: netbox/dcim/forms/bulk_import.py:537 netbox/dcim/forms/bulk_import.py:541 +#: netbox/dcim/forms/model_forms.py:547 msgid "Virtual chassis" msgstr "Віртуальне шасі" -#: netbox/dcim/forms/bulk_import.py:543 +#: netbox/dcim/forms/bulk_import.py:548 msgid "Virtualization cluster" msgstr "Кластер віртуалізації" -#: netbox/dcim/forms/bulk_import.py:572 +#: netbox/dcim/forms/bulk_import.py:577 msgid "Assigned location (if any)" msgstr "Призначене місце розташування (якщо є)" -#: netbox/dcim/forms/bulk_import.py:579 +#: netbox/dcim/forms/bulk_import.py:584 msgid "Assigned rack (if any)" msgstr "Призначена стійка (якщо така є)" -#: netbox/dcim/forms/bulk_import.py:582 +#: netbox/dcim/forms/bulk_import.py:587 msgid "Face" msgstr "Лицева сторона" -#: netbox/dcim/forms/bulk_import.py:585 +#: netbox/dcim/forms/bulk_import.py:590 msgid "Mounted rack face" msgstr "Змонтована лицева сторона стійки" -#: netbox/dcim/forms/bulk_import.py:592 +#: netbox/dcim/forms/bulk_import.py:597 msgid "Parent device (for child devices)" msgstr "Батьківський пристрій (для підпорядкованих пристроїв)" -#: netbox/dcim/forms/bulk_import.py:595 +#: netbox/dcim/forms/bulk_import.py:600 msgid "Device bay" msgstr "Відсік для пристроїв" -#: netbox/dcim/forms/bulk_import.py:599 +#: netbox/dcim/forms/bulk_import.py:604 msgid "Device bay in which this device is installed (for child devices)" msgstr "" "Відсік для пристрою, в якому встановлено цей пристрій (для підпорядкованих " "пристроїв)" -#: netbox/dcim/forms/bulk_import.py:666 +#: netbox/dcim/forms/bulk_import.py:671 msgid "The device in which this module is installed" msgstr "Пристрій, в якому встановлений даний модуль" -#: netbox/dcim/forms/bulk_import.py:669 netbox/dcim/forms/model_forms.py:640 +#: netbox/dcim/forms/bulk_import.py:674 netbox/dcim/forms/model_forms.py:651 msgid "Module bay" msgstr "Відсік для модулів" -#: netbox/dcim/forms/bulk_import.py:672 +#: netbox/dcim/forms/bulk_import.py:677 msgid "The module bay in which this module is installed" msgstr "Відсік для модуля, в якому встановлений цей модуль" -#: netbox/dcim/forms/bulk_import.py:678 +#: netbox/dcim/forms/bulk_import.py:683 msgid "The type of module" msgstr "Тип модуля" -#: netbox/dcim/forms/bulk_import.py:686 netbox/dcim/forms/model_forms.py:656 +#: netbox/dcim/forms/bulk_import.py:691 netbox/dcim/forms/model_forms.py:667 msgid "Replicate components" msgstr "Повторювання компонентів" -#: netbox/dcim/forms/bulk_import.py:688 +#: netbox/dcim/forms/bulk_import.py:693 msgid "" "Automatically populate components associated with this module type (enabled " "by default)" @@ -4365,273 +4760,311 @@ msgstr "" "Автоматично заповнювати компоненти, пов'язані з цим типом модуля (увімкнено " "за замовчуванням)" -#: netbox/dcim/forms/bulk_import.py:691 netbox/dcim/forms/model_forms.py:662 +#: netbox/dcim/forms/bulk_import.py:696 netbox/dcim/forms/model_forms.py:673 msgid "Adopt components" msgstr "Прийняти компоненти" -#: netbox/dcim/forms/bulk_import.py:693 netbox/dcim/forms/model_forms.py:665 +#: netbox/dcim/forms/bulk_import.py:698 netbox/dcim/forms/model_forms.py:676 msgid "Adopt already existing components" msgstr "Прийняти вже існуючі компоненти" -#: netbox/dcim/forms/bulk_import.py:733 netbox/dcim/forms/bulk_import.py:759 -#: netbox/dcim/forms/bulk_import.py:785 +#: netbox/dcim/forms/bulk_import.py:738 netbox/dcim/forms/bulk_import.py:764 +#: netbox/dcim/forms/bulk_import.py:790 msgid "Port type" msgstr "Тип порту" -#: netbox/dcim/forms/bulk_import.py:741 netbox/dcim/forms/bulk_import.py:767 +#: netbox/dcim/forms/bulk_import.py:746 netbox/dcim/forms/bulk_import.py:772 msgid "Port speed in bps" msgstr "Швидкість порту в біт/с" -#: netbox/dcim/forms/bulk_import.py:805 +#: netbox/dcim/forms/bulk_import.py:810 msgid "Outlet type" msgstr "Тип розетки (живлення)" -#: netbox/dcim/forms/bulk_import.py:812 +#: netbox/dcim/forms/bulk_import.py:817 msgid "Local power port which feeds this outlet" msgstr "Локальний порт живлення, який живить цю розетку" -#: netbox/dcim/forms/bulk_import.py:818 +#: netbox/dcim/forms/bulk_import.py:823 msgid "Electrical phase (for three-phase circuits)" msgstr "Електрична фаза (для трифазних ланцюгів)" -#: netbox/dcim/forms/bulk_import.py:859 netbox/dcim/forms/model_forms.py:1323 -#: netbox/virtualization/forms/bulk_import.py:155 -#: netbox/virtualization/forms/model_forms.py:305 +#: netbox/dcim/forms/bulk_import.py:867 netbox/dcim/forms/model_forms.py:1339 +#: netbox/virtualization/forms/bulk_import.py:161 +#: netbox/virtualization/forms/model_forms.py:319 msgid "Parent interface" msgstr "Батьківський інтерфейс" -#: netbox/dcim/forms/bulk_import.py:866 netbox/dcim/forms/model_forms.py:1331 -#: netbox/virtualization/forms/bulk_import.py:162 -#: netbox/virtualization/forms/model_forms.py:313 +#: netbox/dcim/forms/bulk_import.py:874 netbox/dcim/forms/model_forms.py:1347 +#: netbox/virtualization/forms/bulk_import.py:168 +#: netbox/virtualization/forms/model_forms.py:327 msgid "Bridged interface" msgstr "Інтерфейс типу мост" -#: netbox/dcim/forms/bulk_import.py:869 +#: netbox/dcim/forms/bulk_import.py:877 msgid "Lag" msgstr "LAG" -#: netbox/dcim/forms/bulk_import.py:873 +#: netbox/dcim/forms/bulk_import.py:881 msgid "Parent LAG interface" msgstr "Батьківський інтерфейс LAG" -#: netbox/dcim/forms/bulk_import.py:876 +#: netbox/dcim/forms/bulk_import.py:884 msgid "Vdcs" msgstr "Джерела живлення постійного струму" -#: netbox/dcim/forms/bulk_import.py:881 +#: netbox/dcim/forms/bulk_import.py:889 msgid "VDC names separated by commas, encased with double quotes. Example:" msgstr "" "Імена джерел живлення постійного струму, розділені комами, укладені " "подвійними лапками. Приклад:" -#: netbox/dcim/forms/bulk_import.py:887 +#: netbox/dcim/forms/bulk_import.py:895 msgid "Physical medium" msgstr "Фізичне середовище" -#: netbox/dcim/forms/bulk_import.py:890 netbox/dcim/forms/filtersets.py:1365 +#: netbox/dcim/forms/bulk_import.py:898 netbox/dcim/forms/filtersets.py:1370 msgid "Duplex" msgstr "Дуплекс" -#: netbox/dcim/forms/bulk_import.py:895 +#: netbox/dcim/forms/bulk_import.py:903 msgid "Poe mode" msgstr "Режим PoE" -#: netbox/dcim/forms/bulk_import.py:901 +#: netbox/dcim/forms/bulk_import.py:909 msgid "Poe type" msgstr "Тип PoE" -#: netbox/dcim/forms/bulk_import.py:910 -#: netbox/virtualization/forms/bulk_import.py:168 +#: netbox/dcim/forms/bulk_import.py:918 +#: netbox/virtualization/forms/bulk_import.py:174 msgid "IEEE 802.1Q operational mode (for L2 interfaces)" msgstr "Режим роботи IEEE 802.1Q (для інтерфейсів L2)" -#: netbox/dcim/forms/bulk_import.py:917 netbox/ipam/forms/bulk_import.py:161 -#: netbox/ipam/forms/bulk_import.py:247 netbox/ipam/forms/bulk_import.py:283 -#: netbox/ipam/forms/filtersets.py:201 netbox/ipam/forms/filtersets.py:277 -#: netbox/ipam/forms/filtersets.py:336 -#: netbox/virtualization/forms/bulk_import.py:175 +#: netbox/dcim/forms/bulk_import.py:925 netbox/ipam/forms/bulk_import.py:164 +#: netbox/ipam/forms/bulk_import.py:246 netbox/ipam/forms/bulk_import.py:282 +#: netbox/ipam/forms/filtersets.py:203 netbox/ipam/forms/filtersets.py:280 +#: netbox/ipam/forms/filtersets.py:339 +#: netbox/virtualization/forms/bulk_import.py:181 msgid "Assigned VRF" msgstr "Призначений VRF" -#: netbox/dcim/forms/bulk_import.py:920 +#: netbox/dcim/forms/bulk_import.py:928 msgid "Rf role" msgstr "роль RF" -#: netbox/dcim/forms/bulk_import.py:923 +#: netbox/dcim/forms/bulk_import.py:931 msgid "Wireless role (AP/station)" msgstr "Бездротова роль (AP/станція)" -#: netbox/dcim/forms/bulk_import.py:959 +#: netbox/dcim/forms/bulk_import.py:967 #, python-brace-format msgid "VDC {vdc} is not assigned to device {device}" msgstr "" "Джерело живлення постійного струму {vdc} не призначається до пристрою " "{device}" -#: netbox/dcim/forms/bulk_import.py:973 netbox/dcim/forms/model_forms.py:1007 -#: netbox/dcim/forms/model_forms.py:1582 +#: netbox/dcim/forms/bulk_import.py:981 netbox/dcim/forms/model_forms.py:1020 +#: netbox/dcim/forms/model_forms.py:1624 #: netbox/dcim/forms/object_import.py:117 msgid "Rear port" msgstr "Задній порт" -#: netbox/dcim/forms/bulk_import.py:976 +#: netbox/dcim/forms/bulk_import.py:984 msgid "Corresponding rear port" msgstr "Відповідний задній порт" -#: netbox/dcim/forms/bulk_import.py:981 netbox/dcim/forms/bulk_import.py:1022 -#: netbox/dcim/forms/bulk_import.py:1238 +#: netbox/dcim/forms/bulk_import.py:989 netbox/dcim/forms/bulk_import.py:1030 +#: netbox/dcim/forms/bulk_import.py:1335 msgid "Physical medium classification" msgstr "Класифікація фізичного середовища" -#: netbox/dcim/forms/bulk_import.py:1050 netbox/dcim/tables/devices.py:822 +#: netbox/dcim/forms/bulk_import.py:1058 netbox/dcim/tables/devices.py:854 msgid "Installed device" msgstr "Встановлений пристрій" -#: netbox/dcim/forms/bulk_import.py:1054 +#: netbox/dcim/forms/bulk_import.py:1062 msgid "Child device installed within this bay" msgstr "Підпорядкований пристрій, встановлений у цьому відсіку" -#: netbox/dcim/forms/bulk_import.py:1056 +#: netbox/dcim/forms/bulk_import.py:1064 msgid "Child device not found." msgstr "Підпорядкований пристрій не знайдено." -#: netbox/dcim/forms/bulk_import.py:1114 +#: netbox/dcim/forms/bulk_import.py:1122 msgid "Parent inventory item" msgstr "Батьківський предмет інвентарю" -#: netbox/dcim/forms/bulk_import.py:1117 +#: netbox/dcim/forms/bulk_import.py:1125 msgid "Component type" msgstr "Тип компонента" -#: netbox/dcim/forms/bulk_import.py:1121 +#: netbox/dcim/forms/bulk_import.py:1129 msgid "Component Type" msgstr "Тип компонента" -#: netbox/dcim/forms/bulk_import.py:1124 +#: netbox/dcim/forms/bulk_import.py:1132 msgid "Compnent name" msgstr "Назва компонента" -#: netbox/dcim/forms/bulk_import.py:1126 +#: netbox/dcim/forms/bulk_import.py:1134 msgid "Component Name" msgstr "Назва компонента" -#: netbox/dcim/forms/bulk_import.py:1168 +#: netbox/dcim/forms/bulk_import.py:1181 #, python-brace-format msgid "Component not found: {device} - {component_name}" msgstr "Компонент не знайдено: {device} - {component_name}" -#: netbox/dcim/forms/bulk_import.py:1193 +#: netbox/dcim/forms/bulk_import.py:1209 netbox/ipam/forms/bulk_import.py:307 +msgid "Parent device of assigned interface (if any)" +msgstr "Батьківський пристрій призначеного інтерфейсу (якщо є)" + +#: netbox/dcim/forms/bulk_import.py:1212 netbox/ipam/forms/bulk_import.py:310 +#: netbox/ipam/forms/bulk_import.py:547 netbox/ipam/forms/model_forms.py:768 +#: netbox/virtualization/filtersets.py:254 +#: netbox/virtualization/filtersets.py:305 +#: netbox/virtualization/forms/bulk_edit.py:182 +#: netbox/virtualization/forms/bulk_edit.py:316 +#: netbox/virtualization/forms/bulk_import.py:152 +#: netbox/virtualization/forms/bulk_import.py:213 +#: netbox/virtualization/forms/filtersets.py:217 +#: netbox/virtualization/forms/filtersets.py:253 +#: netbox/virtualization/forms/model_forms.py:295 +#: netbox/vpn/forms/bulk_import.py:93 netbox/vpn/forms/bulk_import.py:290 +msgid "Virtual machine" +msgstr "Віртуальна машина" + +#: netbox/dcim/forms/bulk_import.py:1216 netbox/ipam/forms/bulk_import.py:314 +msgid "Parent VM of assigned interface (if any)" +msgstr "Батьківська віртуальна машина призначеного інтерфейсу (якщо є)" + +#: netbox/dcim/forms/bulk_import.py:1223 netbox/ipam/filtersets.py:1021 +#: netbox/ipam/forms/bulk_import.py:321 +msgid "Assigned interface" +msgstr "Призначений інтерфейс" + +#: netbox/dcim/forms/bulk_import.py:1226 netbox/ipam/forms/bulk_import.py:324 +msgid "Is primary" +msgstr "Є первинним" + +#: netbox/dcim/forms/bulk_import.py:1227 +msgid "Make this the primary MAC address for the assigned interface" +msgstr "Зробіть це основною MAC-адресою для призначеного інтерфейсу" + +#: netbox/dcim/forms/bulk_import.py:1264 +msgid "Must specify the parent device or VM when assigning an interface" +msgstr "" +"Необхідно вказати батьківський пристрій або віртуальну машину при " +"призначенні інтерфейсу" + +#: netbox/dcim/forms/bulk_import.py:1290 msgid "Side A device" msgstr "Сторона А пристрою" -#: netbox/dcim/forms/bulk_import.py:1196 netbox/dcim/forms/bulk_import.py:1214 +#: netbox/dcim/forms/bulk_import.py:1293 netbox/dcim/forms/bulk_import.py:1311 msgid "Device name" msgstr "Назва пристрою" -#: netbox/dcim/forms/bulk_import.py:1199 +#: netbox/dcim/forms/bulk_import.py:1296 msgid "Side A type" msgstr "Тип сторони А" -#: netbox/dcim/forms/bulk_import.py:1202 netbox/dcim/forms/bulk_import.py:1220 -msgid "Termination type" -msgstr "Тип кінця" - -#: netbox/dcim/forms/bulk_import.py:1205 +#: netbox/dcim/forms/bulk_import.py:1302 msgid "Side A name" msgstr "Назва сторони A" -#: netbox/dcim/forms/bulk_import.py:1206 netbox/dcim/forms/bulk_import.py:1224 +#: netbox/dcim/forms/bulk_import.py:1303 netbox/dcim/forms/bulk_import.py:1321 msgid "Termination name" msgstr "Назва кінця" -#: netbox/dcim/forms/bulk_import.py:1211 +#: netbox/dcim/forms/bulk_import.py:1308 msgid "Side B device" msgstr "Сторона Б пристрою" -#: netbox/dcim/forms/bulk_import.py:1217 +#: netbox/dcim/forms/bulk_import.py:1314 msgid "Side B type" msgstr "Тип сторони Б" -#: netbox/dcim/forms/bulk_import.py:1223 +#: netbox/dcim/forms/bulk_import.py:1320 msgid "Side B name" msgstr "Назва сторони B" -#: netbox/dcim/forms/bulk_import.py:1232 -#: netbox/wireless/forms/bulk_import.py:86 +#: netbox/dcim/forms/bulk_import.py:1329 +#: netbox/wireless/forms/bulk_import.py:91 msgid "Connection status" msgstr "Статус підключення" -#: netbox/dcim/forms/bulk_import.py:1284 +#: netbox/dcim/forms/bulk_import.py:1381 #, 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:1290 +#: netbox/dcim/forms/bulk_import.py:1387 #, python-brace-format msgid "{side_upper} side termination not found: {device} {name}" msgstr "{side_upper} кінцева сторона не знайдена: {device} {name}" -#: netbox/dcim/forms/bulk_import.py:1315 netbox/dcim/forms/model_forms.py:785 -#: netbox/dcim/tables/devices.py:1027 netbox/templates/dcim/device.html:132 +#: netbox/dcim/forms/bulk_import.py:1412 netbox/dcim/forms/model_forms.py:797 +#: netbox/dcim/tables/devices.py:1059 netbox/templates/dcim/device.html:132 #: netbox/templates/dcim/virtualchassis.html:27 #: netbox/templates/dcim/virtualchassis.html:67 msgid "Master" msgstr "Майстер" -#: netbox/dcim/forms/bulk_import.py:1319 +#: netbox/dcim/forms/bulk_import.py:1416 msgid "Master device" msgstr "Головний пристрій" -#: netbox/dcim/forms/bulk_import.py:1336 +#: netbox/dcim/forms/bulk_import.py:1433 msgid "Name of parent site" msgstr "Назва батьківського тех. майданчика" -#: netbox/dcim/forms/bulk_import.py:1370 +#: netbox/dcim/forms/bulk_import.py:1467 msgid "Upstream power panel" msgstr "Вища за течією панель живлення" -#: netbox/dcim/forms/bulk_import.py:1400 +#: netbox/dcim/forms/bulk_import.py:1497 msgid "Primary or redundant" msgstr "Первинний або надлишковий" -#: netbox/dcim/forms/bulk_import.py:1405 +#: netbox/dcim/forms/bulk_import.py:1502 msgid "Supply type (AC/DC)" msgstr "Тип живлення (змінній/постійний струм)" -#: netbox/dcim/forms/bulk_import.py:1410 +#: netbox/dcim/forms/bulk_import.py:1507 msgid "Single or three-phase" msgstr "Однофазний або трифазний (струм)" -#: netbox/dcim/forms/bulk_import.py:1461 netbox/dcim/forms/model_forms.py:1677 +#: netbox/dcim/forms/bulk_import.py:1558 netbox/dcim/forms/model_forms.py:1722 #: netbox/templates/dcim/device.html:190 #: netbox/templates/dcim/virtualdevicecontext.html:30 #: netbox/templates/virtualization/virtualmachine.html:52 msgid "Primary IPv4" msgstr "Первинна адреса IPv4" -#: netbox/dcim/forms/bulk_import.py:1465 +#: netbox/dcim/forms/bulk_import.py:1562 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:1468 netbox/dcim/forms/model_forms.py:1686 +#: netbox/dcim/forms/bulk_import.py:1565 netbox/dcim/forms/model_forms.py:1731 #: netbox/templates/dcim/device.html:206 #: netbox/templates/dcim/virtualdevicecontext.html:41 #: netbox/templates/virtualization/virtualmachine.html:68 msgid "Primary IPv6" msgstr "Первинна адреса IPv6" -#: netbox/dcim/forms/bulk_import.py:1472 +#: netbox/dcim/forms/bulk_import.py:1569 msgid "IPv6 address with prefix length, e.g. 2001:db8::1/64" msgstr "IPv6 адреса з довжиною префікса, наприклад 2001:db8::1/64" -#: netbox/dcim/forms/common.py:24 netbox/dcim/models/device_components.py:527 +#: netbox/dcim/forms/common.py:19 netbox/dcim/models/device_components.py:515 #: netbox/templates/dcim/interface.html:57 -#: netbox/templates/virtualization/vminterface.html:55 -#: netbox/virtualization/forms/bulk_edit.py:225 +#: netbox/templates/virtualization/vminterface.html:51 +#: netbox/virtualization/forms/bulk_edit.py:207 msgid "MTU" msgstr "MTU" -#: netbox/dcim/forms/common.py:65 +#: netbox/dcim/forms/common.py:60 #, python-brace-format msgid "" "The tagged VLANs ({vlans}) must belong to the same site as the interface's " @@ -4641,7 +5074,7 @@ msgstr "" " і батьківський пристрій/інтерфейсу віртуальної машини, або вони повинні " "бути глобальними" -#: netbox/dcim/forms/common.py:126 +#: netbox/dcim/forms/common.py:121 msgid "" "Cannot install module with placeholder values in a module bay with no " "position defined." @@ -4649,7 +5082,7 @@ msgstr "" "Не вдається встановити модуль із значеннями заповнювачів у відсіку модуля " "без визначеної позиції." -#: netbox/dcim/forms/common.py:131 +#: netbox/dcim/forms/common.py:127 #, python-brace-format msgid "" "Cannot install module with placeholder values in a module bay tree {level} " @@ -4658,18 +5091,18 @@ msgstr "" "Не вдається встановити модуль із значеннями відсік модуля у дереві відсіків " "модуля {level} на дереві, у якому усього{tokens} місця для встановлення." -#: netbox/dcim/forms/common.py:144 +#: netbox/dcim/forms/common.py:142 #, python-brace-format msgid "Cannot adopt {model} {name} as it already belongs to a module" msgstr "" "Не можна усиновити {model} {name}, оскільки він вже належить до модуля" -#: netbox/dcim/forms/common.py:153 +#: netbox/dcim/forms/common.py:151 #, python-brace-format msgid "A {model} named {name} already exists" msgstr "А {model} названий {name} вже існує" -#: netbox/dcim/forms/connections.py:49 netbox/dcim/forms/model_forms.py:738 +#: netbox/dcim/forms/connections.py:49 netbox/dcim/forms/model_forms.py:749 #: netbox/dcim/tables/power.py:66 #: netbox/templates/dcim/inc/cable_termination.html:37 #: netbox/templates/dcim/powerfeed.html:24 @@ -4678,137 +5111,135 @@ msgstr "А {model} названий {name} вже існує" msgid "Power Panel" msgstr "Панель живлення" -#: netbox/dcim/forms/connections.py:58 netbox/dcim/forms/model_forms.py:765 +#: netbox/dcim/forms/connections.py:58 netbox/dcim/forms/model_forms.py:777 #: netbox/templates/dcim/powerfeed.html:21 #: netbox/templates/dcim/powerport.html:80 msgid "Power Feed" msgstr "Живлення живлення" -#: netbox/dcim/forms/connections.py:81 -msgid "Side" -msgstr "Сторона" - -#: netbox/dcim/forms/filtersets.py:136 netbox/dcim/tables/devices.py:295 +#: netbox/dcim/forms/filtersets.py:137 netbox/dcim/tables/devices.py:305 msgid "Device Status" msgstr "Статус пристрою" -#: netbox/dcim/forms/filtersets.py:149 +#: netbox/dcim/forms/filtersets.py:150 msgid "Parent region" msgstr "Батьківський регіон" -#: netbox/dcim/forms/filtersets.py:163 netbox/tenancy/forms/bulk_import.py:28 +#: netbox/dcim/forms/filtersets.py:164 netbox/tenancy/forms/bulk_import.py:28 #: netbox/tenancy/forms/bulk_import.py:62 #: netbox/tenancy/forms/filtersets.py:33 netbox/tenancy/forms/filtersets.py:62 -#: netbox/wireless/forms/bulk_import.py:25 -#: netbox/wireless/forms/filtersets.py:25 +#: netbox/wireless/forms/bulk_import.py:27 +#: netbox/wireless/forms/filtersets.py:27 msgid "Parent group" msgstr "Батьківська група" -#: netbox/dcim/forms/filtersets.py:242 netbox/templates/dcim/location.html:58 +#: netbox/dcim/forms/filtersets.py:243 netbox/templates/dcim/location.html:58 #: netbox/templates/dcim/site.html:56 msgid "Facility" msgstr "Об'єкт" -#: netbox/dcim/forms/filtersets.py:397 +#: netbox/dcim/forms/filtersets.py:398 msgid "Function" msgstr "Функція" -#: netbox/dcim/forms/filtersets.py:483 netbox/dcim/forms/model_forms.py:373 +#: netbox/dcim/forms/filtersets.py:484 netbox/dcim/forms/model_forms.py:382 #: netbox/templates/inc/panels/image_attachments.html:6 msgid "Images" msgstr "Зображення" -#: netbox/dcim/forms/filtersets.py:486 netbox/dcim/forms/filtersets.py:611 -#: netbox/dcim/forms/filtersets.py:726 +#: netbox/dcim/forms/filtersets.py:487 netbox/dcim/forms/filtersets.py:612 +#: netbox/dcim/forms/filtersets.py:727 msgid "Components" msgstr "Компоненти" -#: netbox/dcim/forms/filtersets.py:506 +#: netbox/dcim/forms/filtersets.py:507 msgid "Subdevice role" msgstr "Роль підпристрою" -#: netbox/dcim/forms/filtersets.py:790 netbox/dcim/tables/racks.py:54 +#: netbox/dcim/forms/filtersets.py:791 netbox/dcim/tables/racks.py:54 #: netbox/templates/dcim/racktype.html:20 msgid "Model" msgstr "Модель" -#: netbox/dcim/forms/filtersets.py:834 +#: netbox/dcim/forms/filtersets.py:835 msgid "Has an OOB IP" msgstr "Має IP-адресу для зовнішнього незалежного керування" -#: netbox/dcim/forms/filtersets.py:841 +#: netbox/dcim/forms/filtersets.py:842 msgid "Virtual chassis member" msgstr "Віртуальний елемент шасі" -#: netbox/dcim/forms/filtersets.py:890 +#: netbox/dcim/forms/filtersets.py:891 msgid "Has virtual device contexts" msgstr "Має контексти віртуальних пристроїв" -#: netbox/dcim/forms/filtersets.py:903 netbox/extras/filtersets.py:585 -#: netbox/ipam/forms/filtersets.py:452 -#: netbox/virtualization/forms/filtersets.py:112 +#: netbox/dcim/forms/filtersets.py:904 netbox/extras/filtersets.py:585 +#: netbox/ipam/forms/filtersets.py:455 +#: netbox/virtualization/forms/filtersets.py:117 msgid "Cluster group" msgstr "Кластерна група" -#: netbox/dcim/forms/filtersets.py:1210 +#: netbox/dcim/forms/filtersets.py:1211 msgid "Cabled" msgstr "Кабельний" -#: netbox/dcim/forms/filtersets.py:1217 +#: netbox/dcim/forms/filtersets.py:1218 msgid "Occupied" msgstr "Зайнятий" -#: netbox/dcim/forms/filtersets.py:1244 netbox/dcim/forms/filtersets.py:1269 -#: netbox/dcim/forms/filtersets.py:1293 netbox/dcim/forms/filtersets.py:1313 -#: netbox/dcim/forms/filtersets.py:1336 netbox/dcim/tables/devices.py:364 +#: netbox/dcim/forms/filtersets.py:1245 netbox/dcim/forms/filtersets.py:1270 +#: netbox/dcim/forms/filtersets.py:1294 netbox/dcim/forms/filtersets.py:1314 +#: netbox/dcim/forms/filtersets.py:1341 netbox/dcim/tables/devices.py:374 +#: netbox/dcim/tables/devices.py:663 +#: netbox/templates/circuits/inc/circuit_termination_fields.html:16 #: netbox/templates/dcim/consoleport.html:55 #: netbox/templates/dcim/consoleserverport.html:55 #: netbox/templates/dcim/frontport.html:69 -#: netbox/templates/dcim/interface.html:140 +#: netbox/templates/dcim/interface.html:197 #: netbox/templates/dcim/powerfeed.html:110 -#: netbox/templates/dcim/poweroutlet.html:59 +#: netbox/templates/dcim/poweroutlet.html:69 #: netbox/templates/dcim/powerport.html:59 #: netbox/templates/dcim/rearport.html:65 msgid "Connection" msgstr "Підключення" -#: netbox/dcim/forms/filtersets.py:1348 netbox/extras/forms/bulk_edit.py:326 +#: netbox/dcim/forms/filtersets.py:1353 netbox/extras/forms/bulk_edit.py:326 #: netbox/extras/forms/bulk_import.py:247 -#: netbox/extras/forms/filtersets.py:464 -#: netbox/extras/forms/model_forms.py:675 netbox/extras/tables/tables.py:579 +#: netbox/extras/forms/filtersets.py:472 +#: netbox/extras/forms/model_forms.py:689 netbox/extras/tables/tables.py:579 #: netbox/templates/extras/journalentry.html:30 msgid "Kind" msgstr "Вид" -#: netbox/dcim/forms/filtersets.py:1377 +#: netbox/dcim/forms/filtersets.py:1382 msgid "Mgmt only" msgstr "Тільки управління" -#: netbox/dcim/forms/filtersets.py:1389 netbox/dcim/forms/model_forms.py:1390 -#: netbox/dcim/models/device_components.py:629 -#: netbox/templates/dcim/interface.html:129 +#: netbox/dcim/forms/filtersets.py:1394 netbox/dcim/forms/model_forms.py:1423 +#: netbox/dcim/models/device_components.py:677 +#: netbox/templates/dcim/interface.html:142 msgid "WWN" msgstr "WWN (унікальний ідентифікатор)" -#: netbox/dcim/forms/filtersets.py:1409 +#: netbox/dcim/forms/filtersets.py:1414 msgid "Wireless channel" msgstr "Бездротовий канал" -#: netbox/dcim/forms/filtersets.py:1413 +#: netbox/dcim/forms/filtersets.py:1418 msgid "Channel frequency (MHz)" msgstr "Частота каналу (МГц)" -#: netbox/dcim/forms/filtersets.py:1417 +#: netbox/dcim/forms/filtersets.py:1422 msgid "Channel width (MHz)" msgstr "Ширина каналу (МГц)" -#: netbox/dcim/forms/filtersets.py:1421 -#: netbox/templates/dcim/interface.html:85 +#: netbox/dcim/forms/filtersets.py:1426 +#: netbox/templates/dcim/interface.html:91 msgid "Transmit power (dBm)" msgstr "Потужність передачі (дБм)" -#: netbox/dcim/forms/filtersets.py:1446 netbox/dcim/forms/filtersets.py:1471 -#: netbox/dcim/tables/devices.py:327 netbox/templates/dcim/cable.html:12 +#: netbox/dcim/forms/filtersets.py:1451 netbox/dcim/forms/filtersets.py:1476 +#: netbox/dcim/tables/devices.py:337 netbox/templates/dcim/cable.html:12 #: netbox/templates/dcim/cable_trace.html:46 #: netbox/templates/dcim/frontport.html:77 #: netbox/templates/dcim/htmx/cable_edit.html:50 @@ -4818,40 +5249,77 @@ msgstr "Потужність передачі (дБм)" msgid "Cable" msgstr "Кабель" -#: netbox/dcim/forms/filtersets.py:1550 netbox/dcim/tables/devices.py:949 +#: netbox/dcim/forms/filtersets.py:1555 netbox/dcim/tables/devices.py:979 msgid "Discovered" msgstr "Виявлено" +#: netbox/dcim/forms/filtersets.py:1596 netbox/ipam/forms/filtersets.py:350 +msgid "Assigned Device" +msgstr "Призначено на пристрій" + +#: netbox/dcim/forms/filtersets.py:1601 netbox/ipam/forms/filtersets.py:355 +msgid "Assigned VM" +msgstr "Призначено на віртуальну машину" + #: netbox/dcim/forms/formsets.py:20 #, python-brace-format msgid "A virtual chassis member already exists in position {vc_position}." msgstr "Віртуальний елемент шасі вже існує на {vc_position} місці." -#: netbox/dcim/forms/model_forms.py:140 +#: netbox/dcim/forms/mixins.py:27 netbox/dcim/forms/mixins.py:75 +#: netbox/ipam/forms/bulk_edit.py:420 netbox/ipam/forms/model_forms.py:618 +msgid "Scope type" +msgstr "Тип сфери застосування" + +#: netbox/dcim/forms/mixins.py:30 netbox/dcim/forms/mixins.py:78 +#: netbox/ipam/forms/bulk_edit.py:270 netbox/ipam/forms/bulk_edit.py:423 +#: netbox/ipam/forms/bulk_edit.py:437 netbox/ipam/forms/filtersets.py:175 +#: netbox/ipam/forms/model_forms.py:231 netbox/ipam/forms/model_forms.py:621 +#: netbox/ipam/forms/model_forms.py:631 netbox/ipam/tables/ip.py:194 +#: netbox/ipam/tables/vlans.py:40 netbox/templates/ipam/prefix.html:48 +#: netbox/templates/ipam/vlangroup.html:38 +#: netbox/templates/virtualization/cluster.html:42 +#: netbox/templates/wireless/wirelesslan.html:26 +#: netbox/virtualization/forms/bulk_edit.py:91 +#: netbox/virtualization/forms/filtersets.py:46 +#: netbox/virtualization/forms/model_forms.py:79 +#: netbox/virtualization/tables/clusters.py:80 +#: netbox/wireless/forms/bulk_edit.py:93 +#: netbox/wireless/forms/filtersets.py:37 +#: netbox/wireless/forms/model_forms.py:56 +#: netbox/wireless/tables/wirelesslan.py:58 +msgid "Scope" +msgstr "Сфера застосування" + +#: netbox/dcim/forms/mixins.py:104 netbox/ipam/forms/bulk_import.py:436 +msgid "Scope type (app & model)" +msgstr "Тип сфери застосування (додаток і модель)" + +#: netbox/dcim/forms/model_forms.py:144 msgid "Contact Info" msgstr "Контактна інформація" -#: netbox/dcim/forms/model_forms.py:195 netbox/templates/dcim/rackrole.html:19 +#: netbox/dcim/forms/model_forms.py:199 netbox/templates/dcim/rackrole.html:19 msgid "Rack Role" msgstr "Роль стійки" -#: netbox/dcim/forms/model_forms.py:212 netbox/dcim/forms/model_forms.py:362 -#: netbox/dcim/forms/model_forms.py:446 +#: netbox/dcim/forms/model_forms.py:217 netbox/dcim/forms/model_forms.py:371 +#: netbox/dcim/forms/model_forms.py:456 #: netbox/utilities/forms/fields/fields.py:47 msgid "Slug" msgstr "Скорочення" -#: netbox/dcim/forms/model_forms.py:259 +#: netbox/dcim/forms/model_forms.py:264 msgid "Select a pre-defined rack type, or set physical characteristics below." msgstr "" "Виберіть попередньо визначений тип стійки або встановіть фізичні " "характеристики нижче." -#: netbox/dcim/forms/model_forms.py:265 +#: netbox/dcim/forms/model_forms.py:273 msgid "Inventory Control" msgstr "Контроль запасів" -#: netbox/dcim/forms/model_forms.py:313 +#: netbox/dcim/forms/model_forms.py:321 msgid "" "Comma-separated list of numeric unit IDs. A range may be specified using a " "hyphen." @@ -4859,36 +5327,36 @@ msgstr "" "Список ідентифікаторів числових юнітів, розділених комами. Діапазон можна " "вказати за допомогою дефіса." -#: netbox/dcim/forms/model_forms.py:322 netbox/dcim/tables/racks.py:202 +#: netbox/dcim/forms/model_forms.py:330 netbox/dcim/tables/racks.py:201 msgid "Reservation" msgstr "Бронювання" -#: netbox/dcim/forms/model_forms.py:423 +#: netbox/dcim/forms/model_forms.py:432 #: netbox/templates/dcim/devicerole.html:23 msgid "Device Role" msgstr "Роль пристрою" -#: netbox/dcim/forms/model_forms.py:490 netbox/dcim/models/devices.py:644 +#: netbox/dcim/forms/model_forms.py:500 netbox/dcim/models/devices.py:635 msgid "The lowest-numbered unit occupied by the device" msgstr "Юніт з найменшим номером, зайнятим пристроєм" -#: netbox/dcim/forms/model_forms.py:547 +#: netbox/dcim/forms/model_forms.py:558 msgid "The position in the virtual chassis this device is identified by" msgstr "Положення у віртуальному шасі цього пристрою визначається" -#: netbox/dcim/forms/model_forms.py:552 +#: netbox/dcim/forms/model_forms.py:563 msgid "The priority of the device in the virtual chassis" msgstr "Пріоритет пристрою в віртуальному шасі" -#: netbox/dcim/forms/model_forms.py:659 +#: netbox/dcim/forms/model_forms.py:670 msgid "Automatically populate components associated with this module type" msgstr "Автоматично заповнювати компоненти, пов'язані з цим типом модуля" -#: netbox/dcim/forms/model_forms.py:767 +#: netbox/dcim/forms/model_forms.py:779 msgid "Characteristics" msgstr "Характеристики" -#: netbox/dcim/forms/model_forms.py:914 +#: netbox/dcim/forms/model_forms.py:926 #, python-brace-format msgid "" "Alphanumeric ranges are supported for bulk creation. Mixed cases and types " @@ -4902,60 +5370,35 @@ msgstr "" "[ге, хе] -0/0/ [0-9]). Жетон {module}, якщо є, " "буде автоматично замінено значенням позиції при створенні нового модуля." -#: netbox/dcim/forms/model_forms.py:1094 +#: netbox/dcim/forms/model_forms.py:1107 msgid "Console port template" msgstr "Шаблон порту консолі" -#: netbox/dcim/forms/model_forms.py:1102 +#: netbox/dcim/forms/model_forms.py:1115 msgid "Console server port template" msgstr "Шаблон порту консольного сервера" -#: netbox/dcim/forms/model_forms.py:1110 +#: netbox/dcim/forms/model_forms.py:1123 msgid "Front port template" msgstr "Шаблон фронтального порту" -#: netbox/dcim/forms/model_forms.py:1118 +#: netbox/dcim/forms/model_forms.py:1131 msgid "Interface template" msgstr "Шаблон інтерфейсу" -#: netbox/dcim/forms/model_forms.py:1126 +#: netbox/dcim/forms/model_forms.py:1139 msgid "Power outlet template" msgstr "Шаблон електрічної розетки" -#: netbox/dcim/forms/model_forms.py:1134 +#: netbox/dcim/forms/model_forms.py:1147 msgid "Power port template" msgstr "Шаблон порту живлення" -#: netbox/dcim/forms/model_forms.py:1142 +#: netbox/dcim/forms/model_forms.py:1155 msgid "Rear port template" msgstr "Шаблон порту ззаду" -#: netbox/dcim/forms/model_forms.py:1151 netbox/dcim/forms/model_forms.py:1395 -#: netbox/dcim/forms/model_forms.py:1558 netbox/dcim/forms/model_forms.py:1590 -#: netbox/dcim/tables/connections.py:65 netbox/ipam/forms/bulk_import.py:318 -#: netbox/ipam/forms/model_forms.py:280 netbox/ipam/forms/model_forms.py:289 -#: netbox/ipam/tables/fhrp.py:64 netbox/ipam/tables/ip.py:372 -#: netbox/ipam/tables/vlans.py:169 -#: netbox/templates/circuits/inc/circuit_termination_fields.html:51 -#: netbox/templates/dcim/frontport.html:106 -#: netbox/templates/dcim/interface.html:27 -#: netbox/templates/dcim/interface.html:184 -#: netbox/templates/dcim/interface.html:310 -#: netbox/templates/dcim/rearport.html:102 -#: netbox/templates/virtualization/vminterface.html:18 -#: netbox/templates/vpn/tunneltermination.html:31 -#: netbox/templates/wireless/inc/wirelesslink_interface.html:10 -#: netbox/templates/wireless/wirelesslink.html:10 -#: netbox/templates/wireless/wirelesslink.html:55 -#: netbox/virtualization/forms/model_forms.py:348 -#: netbox/vpn/forms/bulk_import.py:297 netbox/vpn/forms/model_forms.py:436 -#: netbox/vpn/forms/model_forms.py:445 -#: netbox/wireless/forms/model_forms.py:113 -#: netbox/wireless/forms/model_forms.py:155 -msgid "Interface" -msgstr "Інтерфейс" - -#: netbox/dcim/forms/model_forms.py:1152 netbox/dcim/forms/model_forms.py:1591 +#: netbox/dcim/forms/model_forms.py:1165 netbox/dcim/forms/model_forms.py:1636 #: netbox/dcim/tables/connections.py:27 #: netbox/templates/dcim/consoleport.html:17 #: netbox/templates/dcim/consoleserverport.html:74 @@ -4963,71 +5406,71 @@ msgstr "Інтерфейс" msgid "Console Port" msgstr "Порт консолі" -#: netbox/dcim/forms/model_forms.py:1153 netbox/dcim/forms/model_forms.py:1592 +#: netbox/dcim/forms/model_forms.py:1166 netbox/dcim/forms/model_forms.py:1637 #: netbox/templates/dcim/consoleport.html:73 #: netbox/templates/dcim/consoleserverport.html:17 #: netbox/templates/dcim/frontport.html:109 msgid "Console Server Port" msgstr "Порт консольного сервера" -#: netbox/dcim/forms/model_forms.py:1154 netbox/dcim/forms/model_forms.py:1593 -#: netbox/templates/circuits/inc/circuit_termination_fields.html:52 +#: netbox/dcim/forms/model_forms.py:1167 netbox/dcim/forms/model_forms.py:1638 +#: netbox/templates/circuits/inc/circuit_termination_fields.html:53 #: netbox/templates/dcim/consoleport.html:76 #: netbox/templates/dcim/consoleserverport.html:77 #: netbox/templates/dcim/frontport.html:17 #: netbox/templates/dcim/frontport.html:115 -#: netbox/templates/dcim/interface.html:187 +#: netbox/templates/dcim/interface.html:244 #: netbox/templates/dcim/rearport.html:105 msgid "Front Port" msgstr "Передній порт" -#: netbox/dcim/forms/model_forms.py:1155 netbox/dcim/forms/model_forms.py:1594 -#: netbox/dcim/tables/devices.py:710 -#: netbox/templates/circuits/inc/circuit_termination_fields.html:53 +#: netbox/dcim/forms/model_forms.py:1168 netbox/dcim/forms/model_forms.py:1639 +#: netbox/dcim/tables/devices.py:744 +#: netbox/templates/circuits/inc/circuit_termination_fields.html:54 #: netbox/templates/dcim/consoleport.html:79 #: netbox/templates/dcim/consoleserverport.html:80 #: netbox/templates/dcim/frontport.html:50 #: netbox/templates/dcim/frontport.html:118 -#: netbox/templates/dcim/interface.html:190 +#: netbox/templates/dcim/interface.html:247 #: netbox/templates/dcim/rearport.html:17 #: netbox/templates/dcim/rearport.html:108 msgid "Rear Port" msgstr "Порт ззаду" -#: netbox/dcim/forms/model_forms.py:1156 netbox/dcim/forms/model_forms.py:1595 -#: netbox/dcim/tables/connections.py:46 netbox/dcim/tables/devices.py:512 -#: netbox/templates/dcim/poweroutlet.html:44 +#: netbox/dcim/forms/model_forms.py:1169 netbox/dcim/forms/model_forms.py:1640 +#: netbox/dcim/tables/connections.py:46 netbox/dcim/tables/devices.py:521 +#: netbox/templates/dcim/poweroutlet.html:54 #: netbox/templates/dcim/powerport.html:17 msgid "Power Port" msgstr "Порт живлення" -#: netbox/dcim/forms/model_forms.py:1157 netbox/dcim/forms/model_forms.py:1596 +#: netbox/dcim/forms/model_forms.py:1170 netbox/dcim/forms/model_forms.py:1641 #: netbox/templates/dcim/poweroutlet.html:17 #: netbox/templates/dcim/powerport.html:77 msgid "Power Outlet" msgstr "Електрична розетка" -#: netbox/dcim/forms/model_forms.py:1159 netbox/dcim/forms/model_forms.py:1598 +#: netbox/dcim/forms/model_forms.py:1172 netbox/dcim/forms/model_forms.py:1643 msgid "Component Assignment" msgstr "Призначення компонентів" -#: netbox/dcim/forms/model_forms.py:1202 netbox/dcim/forms/model_forms.py:1645 +#: netbox/dcim/forms/model_forms.py:1218 netbox/dcim/forms/model_forms.py:1690 msgid "An InventoryItem can only be assigned to a single component." msgstr "Елемент інвентаря можна призначити лише одному компоненту." -#: netbox/dcim/forms/model_forms.py:1339 +#: netbox/dcim/forms/model_forms.py:1355 msgid "LAG interface" msgstr "Інтерфейс LAG" -#: netbox/dcim/forms/model_forms.py:1362 +#: netbox/dcim/forms/model_forms.py:1378 msgid "Filter VLANs available for assignment by group." msgstr "Фільтр VLAN'ів, доступних для призначення за групами." -#: netbox/dcim/forms/model_forms.py:1491 +#: netbox/dcim/forms/model_forms.py:1533 msgid "Child Device" msgstr "Підпорядкований пристрій" -#: netbox/dcim/forms/model_forms.py:1492 +#: netbox/dcim/forms/model_forms.py:1534 msgid "" "Child devices must first be created and assigned to the site and rack of the" " parent device." @@ -5035,32 +5478,58 @@ msgstr "" "Підпорядковані пристрої спочатку повинні бути створені та присвоєні до тех. " "майданчику та стійки батьківського пристрою." -#: netbox/dcim/forms/model_forms.py:1534 +#: netbox/dcim/forms/model_forms.py:1576 msgid "Console port" msgstr "Консольний порт" -#: netbox/dcim/forms/model_forms.py:1542 +#: netbox/dcim/forms/model_forms.py:1584 msgid "Console server port" msgstr "Порт консольного сервера" -#: netbox/dcim/forms/model_forms.py:1550 +#: netbox/dcim/forms/model_forms.py:1592 msgid "Front port" msgstr "Передній порт" -#: netbox/dcim/forms/model_forms.py:1566 +#: netbox/dcim/forms/model_forms.py:1608 msgid "Power outlet" msgstr "Розетка живлення" -#: netbox/dcim/forms/model_forms.py:1586 +#: netbox/dcim/forms/model_forms.py:1630 #: netbox/templates/dcim/inventoryitem.html:17 msgid "Inventory Item" msgstr "Елемент інвентаря" -#: netbox/dcim/forms/model_forms.py:1659 +#: netbox/dcim/forms/model_forms.py:1704 #: netbox/templates/dcim/inventoryitemrole.html:15 msgid "Inventory Item Role" msgstr "Роль елемента інвентаря" +#: netbox/dcim/forms/model_forms.py:1773 +msgid "VM Interface" +msgstr "Інтерфейс VM" + +#: netbox/dcim/forms/model_forms.py:1788 netbox/ipam/forms/filtersets.py:608 +#: netbox/ipam/forms/model_forms.py:334 netbox/ipam/forms/model_forms.py:796 +#: netbox/ipam/forms/model_forms.py:822 netbox/ipam/tables/vlans.py:171 +#: netbox/templates/virtualization/virtualdisk.html:21 +#: netbox/templates/virtualization/virtualmachine.html:12 +#: netbox/templates/virtualization/vminterface.html:21 +#: netbox/templates/vpn/tunneltermination.html:25 +#: netbox/virtualization/forms/filtersets.py:202 +#: netbox/virtualization/forms/filtersets.py:247 +#: netbox/virtualization/forms/model_forms.py:227 +#: netbox/virtualization/tables/virtualmachines.py:105 +#: netbox/virtualization/tables/virtualmachines.py:161 +#: netbox/vpn/choices.py:53 netbox/vpn/forms/filtersets.py:293 +#: netbox/vpn/forms/model_forms.py:161 netbox/vpn/forms/model_forms.py:172 +#: netbox/vpn/forms/model_forms.py:274 netbox/vpn/forms/model_forms.py:457 +msgid "Virtual Machine" +msgstr "Віртуальна машина" + +#: netbox/dcim/forms/model_forms.py:1827 +msgid "A MAC address can only be assigned to a single object." +msgstr "MAC-адресу можна призначити лише одному об'єкту." + #: netbox/dcim/forms/object_create.py:48 #: netbox/dcim/forms/object_create.py:199 #: netbox/dcim/forms/object_create.py:347 @@ -5081,7 +5550,7 @@ msgstr "" "очікуються." #: netbox/dcim/forms/object_create.py:110 -#: netbox/dcim/forms/object_create.py:263 netbox/dcim/tables/devices.py:252 +#: netbox/dcim/forms/object_create.py:263 netbox/dcim/tables/devices.py:263 msgid "Rear ports" msgstr "Порти ззаду" @@ -5111,7 +5580,7 @@ msgstr "" "Кількість передніх портів, які потрібно створити ({frontport_count}) повинна" " відповідати вибраній кількості позицій портів ззаду ({rearport_count})." -#: netbox/dcim/forms/object_create.py:401 netbox/dcim/tables/devices.py:1033 +#: netbox/dcim/forms/object_create.py:401 netbox/dcim/tables/devices.py:1065 #: netbox/ipam/tables/fhrp.py:31 netbox/templates/dcim/virtualchassis.html:53 #: netbox/templates/dcim/virtualchassis_edit.html:47 #: netbox/templates/ipam/fhrpgroup.html:38 @@ -5130,30 +5599,30 @@ msgstr "" "Положення пристрою першого члена. Збільшується на одного для кожного " "додаткового члена." -#: netbox/dcim/forms/object_create.py:427 +#: netbox/dcim/forms/object_create.py:428 msgid "A position must be specified for the first VC member." msgstr "Позиція повинна бути вказана для першого члена VC." -#: netbox/dcim/models/cables.py:62 -#: netbox/dcim/models/device_component_templates.py:55 -#: netbox/dcim/models/device_components.py:62 +#: netbox/dcim/models/cables.py:64 +#: netbox/dcim/models/device_component_templates.py:51 +#: netbox/dcim/models/device_components.py:57 #: netbox/extras/models/customfields.py:111 msgid "label" msgstr "етикетка" -#: netbox/dcim/models/cables.py:71 +#: netbox/dcim/models/cables.py:73 msgid "length" msgstr "довжина" -#: netbox/dcim/models/cables.py:78 +#: netbox/dcim/models/cables.py:80 msgid "length unit" msgstr "довжина юніта" -#: netbox/dcim/models/cables.py:95 +#: netbox/dcim/models/cables.py:98 msgid "cable" msgstr "кабель" -#: netbox/dcim/models/cables.py:96 +#: netbox/dcim/models/cables.py:99 msgid "cables" msgstr "кабелів" @@ -5178,19 +5647,19 @@ msgstr "Несумісні типи з'єднання: {type_a} і {type_b}" msgid "A and B terminations cannot connect to the same object." msgstr "Кінцевки A і Б не можуть з'єднуватися з одним об'єктом." -#: netbox/dcim/models/cables.py:260 netbox/ipam/models/asns.py:37 +#: netbox/dcim/models/cables.py:262 netbox/ipam/models/asns.py:37 msgid "end" msgstr "кінець" -#: netbox/dcim/models/cables.py:313 +#: netbox/dcim/models/cables.py:315 msgid "cable termination" msgstr "кабельний кінець" -#: netbox/dcim/models/cables.py:314 +#: netbox/dcim/models/cables.py:316 msgid "cable terminations" msgstr "кабельні кінці" -#: netbox/dcim/models/cables.py:333 +#: netbox/dcim/models/cables.py:335 #, python-brace-format msgid "" "Duplicate termination found for {app_label}.{model} {termination_id}: cable " @@ -5199,37 +5668,71 @@ msgstr "" "Знайдено дублікат кінця {app_label}.{model} {termination_id}: кабель " "{cable_pk}" -#: netbox/dcim/models/cables.py:343 +#: netbox/dcim/models/cables.py:345 #, python-brace-format msgid "Cables cannot be terminated to {type_display} interfaces" msgstr "Кабелі не можуть бути підключені в {type_display} інтерфейси" -#: netbox/dcim/models/cables.py:350 +#: netbox/dcim/models/cables.py:352 msgid "Circuit terminations attached to a provider network may not be cabled." msgstr "" "Кінці каналу зв'язку, приєднані до мережі провайдера, не можуть бути " "кабельними." -#: netbox/dcim/models/cables.py:448 netbox/extras/models/configs.py:50 +#: netbox/dcim/models/cables.py:450 netbox/extras/models/configs.py:50 msgid "is active" msgstr "активний" -#: netbox/dcim/models/cables.py:452 +#: netbox/dcim/models/cables.py:454 msgid "is complete" msgstr "завершено" -#: netbox/dcim/models/cables.py:456 +#: netbox/dcim/models/cables.py:458 msgid "is split" msgstr "розщеплюється" -#: netbox/dcim/models/cables.py:464 +#: netbox/dcim/models/cables.py:466 msgid "cable path" msgstr "кабельний шлях" -#: netbox/dcim/models/cables.py:465 +#: netbox/dcim/models/cables.py:467 msgid "cable paths" msgstr "кабельні шляхи" +#: netbox/dcim/models/cables.py:539 +msgid "All originating terminations must be attached to the same link" +msgstr "Усі початкові закінчення повинні бути приєднані до одного посилання" + +#: netbox/dcim/models/cables.py:551 +msgid "All mid-span terminations must have the same termination type" +msgstr "" +"Усі закінчення середнього прольоту повинні мати однаковий тип закінчення" + +#: netbox/dcim/models/cables.py:556 +msgid "All mid-span terminations must have the same parent object" +msgstr "" +"Усі закінчення середнього прольоту повинні мати однаковий батьківський " +"об'єкт" + +#: netbox/dcim/models/cables.py:580 +msgid "All links must be cable or wireless" +msgstr "Всі посилання повинні бути кабельними або бездротовими" + +#: netbox/dcim/models/cables.py:582 +msgid "All links must match first link type" +msgstr "Усі посилання повинні відповідати першому типу посилання" + +#: netbox/dcim/models/cables.py:665 +msgid "" +"All positions counts within the path on opposite ends of links must match" +msgstr "" +"Усі позиції, що підраховуються в межах шляху на протилежних кінцях посилань," +" повинні збігатися" + +#: netbox/dcim/models/cables.py:674 +msgid "Remote termination position filter is missing" +msgstr "Відсутній фільтр положення віддаленого завершення" + #: netbox/dcim/models/device_component_templates.py:46 #, python-brace-format msgid "" @@ -5239,16 +5742,16 @@ msgstr "" "{module} приймається як заміна позиції відсіку модуля при приєднанні до типу" " модуля." -#: netbox/dcim/models/device_component_templates.py:58 -#: netbox/dcim/models/device_components.py:65 +#: netbox/dcim/models/device_component_templates.py:54 +#: netbox/dcim/models/device_components.py:60 msgid "Physical label" msgstr "Фізична етикетка" -#: netbox/dcim/models/device_component_templates.py:103 +#: netbox/dcim/models/device_component_templates.py:99 msgid "Component templates cannot be moved to a different device type." msgstr "Шаблони компонентів не можна переміщати на інший тип пристрою." -#: netbox/dcim/models/device_component_templates.py:154 +#: netbox/dcim/models/device_component_templates.py:150 msgid "" "A component template cannot be associated with both a device type and a " "module type." @@ -5256,146 +5759,146 @@ msgstr "" "Шаблон компонента не може бути пов'язаний як з типом пристрою, так і з типом" " модуля." -#: netbox/dcim/models/device_component_templates.py:158 +#: netbox/dcim/models/device_component_templates.py:154 msgid "" "A component template must be associated with either a device type or a " "module type." msgstr "" "Шаблон компонента повинен бути пов'язаний з типом пристрою або типом модуля." -#: netbox/dcim/models/device_component_templates.py:212 +#: netbox/dcim/models/device_component_templates.py:209 msgid "console port template" msgstr "шаблон порту консолі" -#: netbox/dcim/models/device_component_templates.py:213 +#: netbox/dcim/models/device_component_templates.py:210 msgid "console port templates" msgstr "шаблони портів консолі" -#: netbox/dcim/models/device_component_templates.py:246 +#: netbox/dcim/models/device_component_templates.py:244 msgid "console server port template" msgstr "шаблон порту консольного сервера" -#: netbox/dcim/models/device_component_templates.py:247 +#: netbox/dcim/models/device_component_templates.py:245 msgid "console server port templates" msgstr "шаблони портів консольного сервера" -#: netbox/dcim/models/device_component_templates.py:278 -#: netbox/dcim/models/device_components.py:352 +#: netbox/dcim/models/device_component_templates.py:277 +#: netbox/dcim/models/device_components.py:345 msgid "maximum draw" msgstr "максимальна потужність" -#: netbox/dcim/models/device_component_templates.py:285 -#: netbox/dcim/models/device_components.py:359 +#: netbox/dcim/models/device_component_templates.py:284 +#: netbox/dcim/models/device_components.py:352 msgid "allocated draw" msgstr "виділена потужність" -#: netbox/dcim/models/device_component_templates.py:295 +#: netbox/dcim/models/device_component_templates.py:294 msgid "power port template" msgstr "шаблон порту живлення" -#: netbox/dcim/models/device_component_templates.py:296 +#: netbox/dcim/models/device_component_templates.py:295 msgid "power port templates" msgstr "шаблони портів живлення" #: netbox/dcim/models/device_component_templates.py:315 -#: netbox/dcim/models/device_components.py:382 +#: netbox/dcim/models/device_components.py:372 #, python-brace-format msgid "Allocated draw cannot exceed the maximum draw ({maximum_draw}W)." msgstr "" "Виділена потужність не може перевищувати максимальну потужність " "({maximum_draw}Вт)." -#: netbox/dcim/models/device_component_templates.py:347 -#: netbox/dcim/models/device_components.py:477 +#: netbox/dcim/models/device_component_templates.py:349 +#: netbox/dcim/models/device_components.py:468 msgid "feed leg" msgstr "фідер живлення" -#: netbox/dcim/models/device_component_templates.py:351 -#: netbox/dcim/models/device_components.py:481 +#: netbox/dcim/models/device_component_templates.py:354 +#: netbox/dcim/models/device_components.py:473 msgid "Phase (for three-phase feeds)" msgstr "Фаза (для трифазних подач)" -#: netbox/dcim/models/device_component_templates.py:357 +#: netbox/dcim/models/device_component_templates.py:360 msgid "power outlet template" msgstr "шаблон розетки" -#: netbox/dcim/models/device_component_templates.py:358 +#: netbox/dcim/models/device_component_templates.py:361 msgid "power outlet templates" msgstr "шаблони розеток" -#: netbox/dcim/models/device_component_templates.py:367 +#: netbox/dcim/models/device_component_templates.py:370 #, python-brace-format msgid "Parent power port ({power_port}) must belong to the same device type" msgstr "" "Батьківський порт живлення ({power_port}) повинен належати до одного типу " "пристрою" -#: netbox/dcim/models/device_component_templates.py:371 +#: netbox/dcim/models/device_component_templates.py:376 #, python-brace-format msgid "Parent power port ({power_port}) must belong to the same module type" msgstr "" "Батьківський порт живлення ({power_port}) повинен належати до одного типу " "модуля" -#: netbox/dcim/models/device_component_templates.py:423 -#: netbox/dcim/models/device_components.py:611 +#: netbox/dcim/models/device_component_templates.py:430 +#: netbox/dcim/models/device_components.py:659 msgid "management only" msgstr "тільки управління" -#: netbox/dcim/models/device_component_templates.py:431 -#: netbox/dcim/models/device_components.py:550 +#: netbox/dcim/models/device_component_templates.py:438 +#: netbox/dcim/models/device_components.py:539 msgid "bridge interface" msgstr "інтерфейс моста" -#: netbox/dcim/models/device_component_templates.py:449 -#: netbox/dcim/models/device_components.py:636 +#: netbox/dcim/models/device_component_templates.py:459 +#: netbox/dcim/models/device_components.py:685 msgid "wireless role" msgstr "бездротова роль" -#: netbox/dcim/models/device_component_templates.py:455 +#: netbox/dcim/models/device_component_templates.py:465 msgid "interface template" msgstr "шаблон інтерфейсу" -#: netbox/dcim/models/device_component_templates.py:456 +#: netbox/dcim/models/device_component_templates.py:466 msgid "interface templates" msgstr "шаблони інтерфейсу" -#: netbox/dcim/models/device_component_templates.py:463 -#: netbox/dcim/models/device_components.py:804 -#: netbox/virtualization/models/virtualmachines.py:405 +#: netbox/dcim/models/device_component_templates.py:473 +#: netbox/dcim/models/device_components.py:845 +#: netbox/virtualization/models/virtualmachines.py:385 msgid "An interface cannot be bridged to itself." msgstr "Інтерфейс не може бути з'єднаний мостом з собою." -#: netbox/dcim/models/device_component_templates.py:466 +#: netbox/dcim/models/device_component_templates.py:477 #, python-brace-format msgid "Bridge interface ({bridge}) must belong to the same device type" msgstr "" "Інтерфейс моста ({bridge}) повинні складатися з пристроїв одного типу " -#: netbox/dcim/models/device_component_templates.py:470 +#: netbox/dcim/models/device_component_templates.py:483 #, python-brace-format msgid "Bridge interface ({bridge}) must belong to the same module type" msgstr "Інтерфейс моста ({bridge}) повинні складатися з модулів одного типу " -#: netbox/dcim/models/device_component_templates.py:526 -#: netbox/dcim/models/device_components.py:984 +#: netbox/dcim/models/device_component_templates.py:540 +#: netbox/dcim/models/device_components.py:1035 msgid "rear port position" msgstr "положення порту ззаду" -#: netbox/dcim/models/device_component_templates.py:551 +#: netbox/dcim/models/device_component_templates.py:565 msgid "front port template" msgstr "шаблон переднього порту" -#: netbox/dcim/models/device_component_templates.py:552 +#: netbox/dcim/models/device_component_templates.py:566 msgid "front port templates" msgstr "шаблони передніх портів" -#: netbox/dcim/models/device_component_templates.py:562 +#: netbox/dcim/models/device_component_templates.py:576 #, python-brace-format msgid "Rear port ({name}) must belong to the same device type" msgstr "Задній порт ({name}) повинні належати до одного типу пристрою" -#: netbox/dcim/models/device_component_templates.py:568 +#: netbox/dcim/models/device_component_templates.py:582 #, python-brace-format msgid "" "Invalid rear port position ({position}); rear port {name} has only {count} " @@ -5404,47 +5907,47 @@ msgstr "" "Невірна позиція порту ззаду ({position}); порт ззаду {name} має тільки " "{count} позиції" -#: netbox/dcim/models/device_component_templates.py:621 -#: netbox/dcim/models/device_components.py:1053 +#: netbox/dcim/models/device_component_templates.py:635 +#: netbox/dcim/models/device_components.py:1101 msgid "positions" msgstr "позиції" -#: netbox/dcim/models/device_component_templates.py:632 +#: netbox/dcim/models/device_component_templates.py:646 msgid "rear port template" msgstr "шаблон порту ззаду" -#: netbox/dcim/models/device_component_templates.py:633 +#: netbox/dcim/models/device_component_templates.py:647 msgid "rear port templates" msgstr "шаблони портів ззаду" -#: netbox/dcim/models/device_component_templates.py:662 -#: netbox/dcim/models/device_components.py:1103 +#: netbox/dcim/models/device_component_templates.py:676 +#: netbox/dcim/models/device_components.py:1148 msgid "position" msgstr "позиція" -#: netbox/dcim/models/device_component_templates.py:665 -#: netbox/dcim/models/device_components.py:1106 +#: netbox/dcim/models/device_component_templates.py:679 +#: netbox/dcim/models/device_components.py:1151 msgid "Identifier to reference when renaming installed components" msgstr "" "Ідентифікатор для посилання при перейменуванні встановлених компонентів" -#: netbox/dcim/models/device_component_templates.py:671 +#: netbox/dcim/models/device_component_templates.py:685 msgid "module bay template" msgstr "шаблон відсіку модуля" -#: netbox/dcim/models/device_component_templates.py:672 +#: netbox/dcim/models/device_component_templates.py:686 msgid "module bay templates" msgstr "шаблони відсіків модулів" -#: netbox/dcim/models/device_component_templates.py:699 +#: netbox/dcim/models/device_component_templates.py:713 msgid "device bay template" msgstr "шаблон відсіку пристрою" -#: netbox/dcim/models/device_component_templates.py:700 +#: netbox/dcim/models/device_component_templates.py:714 msgid "device bay templates" msgstr "шаблони відсіків пристроїв" -#: netbox/dcim/models/device_component_templates.py:713 +#: netbox/dcim/models/device_component_templates.py:728 #, python-brace-format msgid "" "Subdevice role of device type ({device_type}) must be set to \"parent\" to " @@ -5453,211 +5956,230 @@ msgstr "" "Роль підпристрою типу пристрою ({device_type}) має бути встановлено значення" " \"батько\", щоб дозволити відсіки пристрою." -#: netbox/dcim/models/device_component_templates.py:768 -#: netbox/dcim/models/device_components.py:1262 +#: netbox/dcim/models/device_component_templates.py:784 +#: netbox/dcim/models/device_components.py:1304 msgid "part ID" msgstr "Ідентифікатор частини" -#: netbox/dcim/models/device_component_templates.py:770 -#: netbox/dcim/models/device_components.py:1264 +#: netbox/dcim/models/device_component_templates.py:786 +#: netbox/dcim/models/device_components.py:1306 msgid "Manufacturer-assigned part identifier" msgstr "Ідентифікатор деталі, призначений виробником" -#: netbox/dcim/models/device_component_templates.py:787 +#: netbox/dcim/models/device_component_templates.py:803 msgid "inventory item template" msgstr "шаблон елемента інвентаря" -#: netbox/dcim/models/device_component_templates.py:788 +#: netbox/dcim/models/device_component_templates.py:804 msgid "inventory item templates" msgstr "шаблони елемента інвентаря" -#: netbox/dcim/models/device_components.py:105 +#: netbox/dcim/models/device_components.py:100 msgid "Components cannot be moved to a different device." msgstr "Компоненти не можна переміщати на інший пристрій." -#: netbox/dcim/models/device_components.py:144 +#: netbox/dcim/models/device_components.py:139 msgid "cable end" msgstr "кінець кабелю" -#: netbox/dcim/models/device_components.py:150 +#: netbox/dcim/models/device_components.py:146 msgid "mark connected" msgstr "позначка підключена" -#: netbox/dcim/models/device_components.py:152 +#: netbox/dcim/models/device_components.py:148 msgid "Treat as if a cable is connected" msgstr "Ставтеся так, ніби підключений кабель" -#: netbox/dcim/models/device_components.py:170 +#: netbox/dcim/models/device_components.py:166 msgid "Must specify cable end (A or B) when attaching a cable." msgstr "Необхідно вказати кінець кабелю (А або Б) при приєднанні кабелю." -#: netbox/dcim/models/device_components.py:174 +#: netbox/dcim/models/device_components.py:170 msgid "Cable end must not be set without a cable." msgstr "Кінець кабелю не можна встановлювати без кабелю." -#: netbox/dcim/models/device_components.py:178 +#: netbox/dcim/models/device_components.py:174 msgid "Cannot mark as connected with a cable attached." msgstr "Не можна позначити як з'єднаний із приєднаним вже кабелем." -#: netbox/dcim/models/device_components.py:202 +#: netbox/dcim/models/device_components.py:198 #, python-brace-format msgid "{class_name} models must declare a parent_object property" msgstr "" "{class_name} моделі повинні спочатку оголосити властивість parent_object" -#: netbox/dcim/models/device_components.py:287 -#: netbox/dcim/models/device_components.py:316 -#: netbox/dcim/models/device_components.py:349 -#: netbox/dcim/models/device_components.py:467 +#: netbox/dcim/models/device_components.py:284 +#: netbox/dcim/models/device_components.py:311 +#: netbox/dcim/models/device_components.py:342 +#: netbox/dcim/models/device_components.py:458 msgid "Physical port type" msgstr "Фізичний тип порту" -#: netbox/dcim/models/device_components.py:290 -#: netbox/dcim/models/device_components.py:319 +#: netbox/dcim/models/device_components.py:287 +#: netbox/dcim/models/device_components.py:314 msgid "speed" msgstr "швидкість" -#: netbox/dcim/models/device_components.py:294 -#: netbox/dcim/models/device_components.py:323 +#: netbox/dcim/models/device_components.py:291 +#: netbox/dcim/models/device_components.py:318 msgid "Port speed in bits per second" msgstr "Швидкість порту в бітах в секунду" -#: netbox/dcim/models/device_components.py:300 +#: netbox/dcim/models/device_components.py:297 msgid "console port" msgstr "консольний порт" -#: netbox/dcim/models/device_components.py:301 +#: netbox/dcim/models/device_components.py:298 msgid "console ports" msgstr "консольні порти" -#: netbox/dcim/models/device_components.py:329 +#: netbox/dcim/models/device_components.py:324 msgid "console server port" msgstr "порт консольного сервера" -#: netbox/dcim/models/device_components.py:330 +#: netbox/dcim/models/device_components.py:325 msgid "console server ports" msgstr "порти консольного сервера" -#: netbox/dcim/models/device_components.py:369 +#: netbox/dcim/models/device_components.py:362 msgid "power port" msgstr "порт живлення" -#: netbox/dcim/models/device_components.py:370 +#: netbox/dcim/models/device_components.py:363 msgid "power ports" msgstr "порти живлення" -#: netbox/dcim/models/device_components.py:487 +#: netbox/dcim/models/device_components.py:483 msgid "power outlet" msgstr "розетка" -#: netbox/dcim/models/device_components.py:488 +#: netbox/dcim/models/device_components.py:484 msgid "power outlets" msgstr "розетки" -#: netbox/dcim/models/device_components.py:499 +#: netbox/dcim/models/device_components.py:492 #, python-brace-format msgid "Parent power port ({power_port}) must belong to the same device" msgstr "" "Батьківський порт живлення ({power_port}) повинні належати до одного і того " "ж пристрою" -#: netbox/dcim/models/device_components.py:530 netbox/vpn/models/crypto.py:81 -#: netbox/vpn/models/crypto.py:226 +#: netbox/dcim/models/device_components.py:518 netbox/vpn/models/crypto.py:80 +#: netbox/vpn/models/crypto.py:222 msgid "mode" msgstr "режим" -#: netbox/dcim/models/device_components.py:534 +#: netbox/dcim/models/device_components.py:523 msgid "IEEE 802.1Q tagging strategy" msgstr "Стратегія міток IEEE 802.1Q" -#: netbox/dcim/models/device_components.py:542 +#: netbox/dcim/models/device_components.py:531 msgid "parent interface" msgstr "батьківський інтерфейс" -#: netbox/dcim/models/device_components.py:602 +#: netbox/dcim/models/device_components.py:547 +msgid "untagged VLAN" +msgstr "VLAN без міток" + +#: netbox/dcim/models/device_components.py:553 +msgid "tagged VLANs" +msgstr "VLAN'и з мітками" + +#: netbox/dcim/models/device_components.py:561 +#: netbox/dcim/tables/devices.py:602 netbox/ipam/forms/bulk_edit.py:510 +#: netbox/ipam/forms/bulk_import.py:491 netbox/ipam/forms/filtersets.py:565 +#: netbox/ipam/forms/model_forms.py:692 netbox/ipam/tables/vlans.py:106 +#: netbox/templates/dcim/interface.html:86 netbox/templates/ipam/vlan.html:77 +msgid "Q-in-Q SVLAN" +msgstr "Q-в-Q SVLAN" + +#: netbox/dcim/models/device_components.py:576 +msgid "primary MAC address" +msgstr "основна MAC-адреса" + +#: netbox/dcim/models/device_components.py:588 +msgid "Only Q-in-Q interfaces may specify a service VLAN." +msgstr "Тільки інтерфейси Q-in-Q можуть вказувати службовий VLAN." + +#: netbox/dcim/models/device_components.py:594 +#, python-brace-format +msgid "MAC address {mac_address} is not assigned to this interface." +msgstr "MAC-адреса {mac_address} не призначений для цього інтерфейсу." + +#: netbox/dcim/models/device_components.py:650 msgid "parent LAG" msgstr "батьківський LAG" -#: netbox/dcim/models/device_components.py:612 +#: netbox/dcim/models/device_components.py:660 msgid "This interface is used only for out-of-band management" msgstr "" "Цей інтерфейс використовується лише для зовнішнього незалежного керування" -#: netbox/dcim/models/device_components.py:617 +#: netbox/dcim/models/device_components.py:665 msgid "speed (Kbps)" msgstr "швидкість (Кбіт/с)" -#: netbox/dcim/models/device_components.py:620 +#: netbox/dcim/models/device_components.py:668 msgid "duplex" msgstr "дуплекс" -#: netbox/dcim/models/device_components.py:630 +#: netbox/dcim/models/device_components.py:678 msgid "64-bit World Wide Name" msgstr "64-розрядна всесвітня назва" -#: netbox/dcim/models/device_components.py:642 +#: netbox/dcim/models/device_components.py:692 msgid "wireless channel" msgstr "бездротовий канал" -#: netbox/dcim/models/device_components.py:649 +#: netbox/dcim/models/device_components.py:699 msgid "channel frequency (MHz)" msgstr "частота каналу (МГц)" -#: netbox/dcim/models/device_components.py:650 -#: netbox/dcim/models/device_components.py:658 +#: netbox/dcim/models/device_components.py:700 +#: netbox/dcim/models/device_components.py:708 msgid "Populated by selected channel (if set)" msgstr "Заповнюється вибраним каналом (якщо встановлено)" -#: netbox/dcim/models/device_components.py:664 +#: netbox/dcim/models/device_components.py:714 msgid "transmit power (dBm)" msgstr "потужність передачі (дБм)" -#: netbox/dcim/models/device_components.py:689 netbox/wireless/models.py:117 +#: netbox/dcim/models/device_components.py:741 netbox/wireless/models.py:117 msgid "wireless LANs" msgstr "бездротові локальні мережі" -#: netbox/dcim/models/device_components.py:697 -#: netbox/virtualization/models/virtualmachines.py:335 -msgid "untagged VLAN" -msgstr "VLAN без міток" - -#: netbox/dcim/models/device_components.py:703 -#: netbox/virtualization/models/virtualmachines.py:341 -msgid "tagged VLANs" -msgstr "VLAN'и з мітками" - -#: netbox/dcim/models/device_components.py:745 -#: netbox/virtualization/models/virtualmachines.py:377 +#: netbox/dcim/models/device_components.py:789 +#: netbox/virtualization/models/virtualmachines.py:359 msgid "interface" msgstr "інтерфейс" -#: netbox/dcim/models/device_components.py:746 -#: netbox/virtualization/models/virtualmachines.py:378 +#: netbox/dcim/models/device_components.py:790 +#: netbox/virtualization/models/virtualmachines.py:360 msgid "interfaces" msgstr "інтерфейси" -#: netbox/dcim/models/device_components.py:757 +#: netbox/dcim/models/device_components.py:798 #, python-brace-format msgid "{display_type} interfaces cannot have a cable attached." msgstr "{display_type} інтерфейси не можуть мати приєднаний кабель." -#: netbox/dcim/models/device_components.py:765 +#: netbox/dcim/models/device_components.py:806 #, python-brace-format msgid "{display_type} interfaces cannot be marked as connected." msgstr "{display_type} інтерфейси не можуть бути позначені як підключені." -#: netbox/dcim/models/device_components.py:774 -#: netbox/virtualization/models/virtualmachines.py:390 +#: netbox/dcim/models/device_components.py:815 +#: netbox/virtualization/models/virtualmachines.py:370 msgid "An interface cannot be its own parent." msgstr "Інтерфейс не може бути власним батьківським." -#: netbox/dcim/models/device_components.py:778 +#: netbox/dcim/models/device_components.py:819 msgid "Only virtual interfaces may be assigned to a parent interface." msgstr "" "Тільки віртуальні інтерфейси можуть бути призначені батьківському " "інтерфейсу." -#: netbox/dcim/models/device_components.py:785 +#: netbox/dcim/models/device_components.py:826 #, python-brace-format msgid "" "The selected parent interface ({interface}) belongs to a different device " @@ -5666,7 +6188,7 @@ msgstr "" "Вибраний батьківський інтерфейс ({interface}) належить до іншого пристрою " "({device})" -#: netbox/dcim/models/device_components.py:791 +#: netbox/dcim/models/device_components.py:832 #, python-brace-format msgid "" "The selected parent interface ({interface}) belongs to {device}, which is " @@ -5675,7 +6197,7 @@ msgstr "" "Вибраний батьківський інтерфейс ({interface}) належить {device}, яка не є " "частиною віртуального шасі {virtual_chassis}." -#: netbox/dcim/models/device_components.py:811 +#: netbox/dcim/models/device_components.py:852 #, python-brace-format msgid "" "The selected bridge interface ({bridge}) belongs to a different device " @@ -5683,7 +6205,7 @@ msgid "" msgstr "" "Вибраний інтерфейс моста ({bridge}) належить до іншого пристрою ({device})." -#: netbox/dcim/models/device_components.py:817 +#: netbox/dcim/models/device_components.py:858 #, python-brace-format msgid "" "The selected bridge interface ({interface}) belongs to {device}, which is " @@ -5692,22 +6214,22 @@ msgstr "" "Вибраний інтерфейс моста ({interface}) належить {device}, який не є частиною" " віртуального шасі {virtual_chassis}." -#: netbox/dcim/models/device_components.py:828 +#: netbox/dcim/models/device_components.py:869 msgid "Virtual interfaces cannot have a parent LAG interface." msgstr "Віртуальні інтерфейси не можуть бути батьківським інтерфейсом LAG." -#: netbox/dcim/models/device_components.py:832 +#: netbox/dcim/models/device_components.py:873 msgid "A LAG interface cannot be its own parent." msgstr "Інтерфейс LAG не може бути власним батьківським інтерфейсом." -#: netbox/dcim/models/device_components.py:839 +#: netbox/dcim/models/device_components.py:880 #, python-brace-format msgid "" "The selected LAG interface ({lag}) belongs to a different device ({device})." msgstr "" "Вибраний інтерфейс LAG ({lag}) належить до іншого пристрою ({device})." -#: netbox/dcim/models/device_components.py:845 +#: netbox/dcim/models/device_components.py:886 #, python-brace-format msgid "" "The selected LAG interface ({lag}) belongs to {device}, which is not part of" @@ -5716,49 +6238,53 @@ msgstr "" "Вибраний інтерфейс LAG ({lag}) належить {device}, який не є частиною " "віртуального шасі {virtual_chassis}." -#: netbox/dcim/models/device_components.py:856 +#: netbox/dcim/models/device_components.py:897 msgid "Virtual interfaces cannot have a PoE mode." msgstr "Віртуальні інтерфейси не можуть мати режим PoE." -#: netbox/dcim/models/device_components.py:860 +#: netbox/dcim/models/device_components.py:901 msgid "Virtual interfaces cannot have a PoE type." msgstr "Віртуальні інтерфейси не можуть мати тип PoE." -#: netbox/dcim/models/device_components.py:866 +#: netbox/dcim/models/device_components.py:907 msgid "Must specify PoE mode when designating a PoE type." msgstr "Необхідно вказати режим PoE при створенні інтерфейсу типу PoE." -#: netbox/dcim/models/device_components.py:873 +#: netbox/dcim/models/device_components.py:914 msgid "Wireless role may be set only on wireless interfaces." msgstr "" "Роль бездротового зв'язку може бути встановлена тільки на бездротових " "інтерфейсах." -#: netbox/dcim/models/device_components.py:875 +#: netbox/dcim/models/device_components.py:916 msgid "Channel may be set only on wireless interfaces." msgstr "Канал (Wi-Fi) можна встановлювати тільки на бездротових інтерфейсах." -#: netbox/dcim/models/device_components.py:881 +#: netbox/dcim/models/device_components.py:922 msgid "Channel frequency may be set only on wireless interfaces." msgstr "" "Частота каналу (Wi-Fi) може встановлюватися тільки на бездротових " "інтерфейсах." -#: netbox/dcim/models/device_components.py:885 +#: netbox/dcim/models/device_components.py:926 msgid "Cannot specify custom frequency with channel selected." msgstr "Неможливо вказати користувацьку частоту при вибраному каналі (Wi-Fi)." -#: netbox/dcim/models/device_components.py:891 +#: netbox/dcim/models/device_components.py:932 msgid "Channel width may be set only on wireless interfaces." msgstr "" "Ширина каналу (Wi-Fi) може бути встановлена тільки на бездротових " "інтерфейсах." -#: netbox/dcim/models/device_components.py:893 +#: netbox/dcim/models/device_components.py:934 msgid "Cannot specify custom width with channel selected." msgstr "Неможливо вказати користувацьку ширину при вибраному каналі." -#: netbox/dcim/models/device_components.py:901 +#: netbox/dcim/models/device_components.py:938 +msgid "Interface mode does not support an untagged vlan." +msgstr "Режим інтерфейсу не підтримує vlan без тегів." + +#: netbox/dcim/models/device_components.py:944 #, python-brace-format msgid "" "The untagged VLAN ({untagged_vlan}) must belong to the same site as the " @@ -5767,24 +6293,24 @@ msgstr "" "VLAN без міток ({untagged_vlan}) повинен належати тому ж тех. майданчику, що" " і батьківський пристрій інтерфейсу, або ж він повинен бути глобальним." -#: netbox/dcim/models/device_components.py:990 +#: netbox/dcim/models/device_components.py:1041 msgid "Mapped position on corresponding rear port" msgstr "Відображене положення на відповідному порті ззаду" -#: netbox/dcim/models/device_components.py:1006 +#: netbox/dcim/models/device_components.py:1057 msgid "front port" msgstr "передній порт" -#: netbox/dcim/models/device_components.py:1007 +#: netbox/dcim/models/device_components.py:1058 msgid "front ports" msgstr "передні порти" -#: netbox/dcim/models/device_components.py:1021 +#: netbox/dcim/models/device_components.py:1069 #, python-brace-format msgid "Rear port ({rear_port}) must belong to the same device" msgstr "Порт ззаду ({rear_port}) повинні належати до одного і того ж пристрою" -#: netbox/dcim/models/device_components.py:1029 +#: netbox/dcim/models/device_components.py:1077 #, python-brace-format msgid "" "Invalid rear port position ({rear_port_position}): Rear port {name} has only" @@ -5793,19 +6319,19 @@ msgstr "" "Невірна позиція порту ззаду ({rear_port_position}): порт ззаду {name} має " "тільки {positions} позицій." -#: netbox/dcim/models/device_components.py:1059 +#: netbox/dcim/models/device_components.py:1107 msgid "Number of front ports which may be mapped" msgstr "Кількість передніх портів, які можуть бути відображені" -#: netbox/dcim/models/device_components.py:1064 +#: netbox/dcim/models/device_components.py:1112 msgid "rear port" msgstr "порт ззаду" -#: netbox/dcim/models/device_components.py:1065 +#: netbox/dcim/models/device_components.py:1113 msgid "rear ports" msgstr "порти ззаду" -#: netbox/dcim/models/device_components.py:1079 +#: netbox/dcim/models/device_components.py:1124 #, python-brace-format msgid "" "The number of positions cannot be less than the number of mapped front ports" @@ -5814,38 +6340,38 @@ msgstr "" "Кількість позицій не може бути меншою за кількість відображених фронтальних " "портів ({frontport_count})" -#: netbox/dcim/models/device_components.py:1120 +#: netbox/dcim/models/device_components.py:1165 msgid "module bay" msgstr "відсік модуля" -#: netbox/dcim/models/device_components.py:1121 +#: netbox/dcim/models/device_components.py:1166 msgid "module bays" msgstr "відсіки модуля" -#: netbox/dcim/models/device_components.py:1138 -#: netbox/dcim/models/devices.py:1224 +#: netbox/dcim/models/device_components.py:1180 +#: netbox/dcim/models/devices.py:1229 msgid "A module bay cannot belong to a module installed within it." msgstr "Відсік модуля не може належати модулю, встановленому в ньому." -#: netbox/dcim/models/device_components.py:1164 +#: netbox/dcim/models/device_components.py:1206 msgid "device bay" msgstr "відсік пристрою" -#: netbox/dcim/models/device_components.py:1165 +#: netbox/dcim/models/device_components.py:1207 msgid "device bays" msgstr "відсіки для пристроїв" -#: netbox/dcim/models/device_components.py:1175 +#: netbox/dcim/models/device_components.py:1214 #, python-brace-format msgid "This type of device ({device_type}) does not support device bays." msgstr "" "Даний тип пристрою ({device_type}) не підтримує відсіки для пристроїв." -#: netbox/dcim/models/device_components.py:1181 +#: netbox/dcim/models/device_components.py:1220 msgid "Cannot install a device into itself." msgstr "Не вдається встановити пристрій в себе." -#: netbox/dcim/models/device_components.py:1189 +#: netbox/dcim/models/device_components.py:1228 #, python-brace-format msgid "" "Cannot install the specified device; device is already installed in {bay}." @@ -5853,114 +6379,114 @@ msgstr "" "Не вдається встановити вказаний пристрій, бо пристрій вже встановлено в " "{bay}." -#: netbox/dcim/models/device_components.py:1210 +#: netbox/dcim/models/device_components.py:1249 msgid "inventory item role" msgstr "роль елемента інвентаря" -#: netbox/dcim/models/device_components.py:1211 +#: netbox/dcim/models/device_components.py:1250 msgid "inventory item roles" msgstr "ролі елемента інвентаря" -#: netbox/dcim/models/device_components.py:1268 -#: netbox/dcim/models/devices.py:607 netbox/dcim/models/devices.py:1181 -#: netbox/dcim/models/racks.py:313 -#: netbox/virtualization/models/virtualmachines.py:131 +#: netbox/dcim/models/device_components.py:1310 +#: netbox/dcim/models/devices.py:598 netbox/dcim/models/devices.py:1189 +#: netbox/dcim/models/racks.py:304 +#: netbox/virtualization/models/virtualmachines.py:126 msgid "serial number" msgstr "серійний номер" -#: netbox/dcim/models/device_components.py:1276 -#: netbox/dcim/models/devices.py:615 netbox/dcim/models/devices.py:1188 -#: netbox/dcim/models/racks.py:320 +#: netbox/dcim/models/device_components.py:1318 +#: netbox/dcim/models/devices.py:606 netbox/dcim/models/devices.py:1196 +#: netbox/dcim/models/racks.py:311 msgid "asset tag" msgstr "призначеня мітки" -#: netbox/dcim/models/device_components.py:1277 +#: netbox/dcim/models/device_components.py:1319 msgid "A unique tag used to identify this item" msgstr "" "Унікальна мітка, яка використовується для ідентифікації цього елемента" -#: netbox/dcim/models/device_components.py:1280 +#: netbox/dcim/models/device_components.py:1322 msgid "discovered" msgstr "виявлено" -#: netbox/dcim/models/device_components.py:1282 +#: netbox/dcim/models/device_components.py:1324 msgid "This item was automatically discovered" msgstr "Цей елемент був автоматично виявлений" -#: netbox/dcim/models/device_components.py:1300 +#: netbox/dcim/models/device_components.py:1342 msgid "inventory item" msgstr "елемент інвентаря" -#: netbox/dcim/models/device_components.py:1301 +#: netbox/dcim/models/device_components.py:1343 msgid "inventory items" msgstr "елементи інвентаря" -#: netbox/dcim/models/device_components.py:1312 +#: netbox/dcim/models/device_components.py:1351 msgid "Cannot assign self as parent." msgstr "Не вдається призначити себе батьком." -#: netbox/dcim/models/device_components.py:1320 +#: netbox/dcim/models/device_components.py:1359 msgid "Parent inventory item does not belong to the same device." msgstr "Батьківський елемент інвентаря не належить до одного пристрою." -#: netbox/dcim/models/device_components.py:1326 +#: netbox/dcim/models/device_components.py:1365 msgid "Cannot move an inventory item with dependent children" msgstr "Не можливо переміщати елемент інвентаря з підпорядкованим елементом" -#: netbox/dcim/models/device_components.py:1334 +#: netbox/dcim/models/device_components.py:1373 msgid "Cannot assign inventory item to component on another device" msgstr "Не можливо призначати елемент інвентаря компоненту у іншому пристрої" -#: netbox/dcim/models/devices.py:54 +#: netbox/dcim/models/devices.py:59 msgid "manufacturer" msgstr "виробник" -#: netbox/dcim/models/devices.py:55 +#: netbox/dcim/models/devices.py:60 msgid "manufacturers" msgstr "виробники" -#: netbox/dcim/models/devices.py:82 netbox/dcim/models/devices.py:382 +#: netbox/dcim/models/devices.py:84 netbox/dcim/models/devices.py:383 #: netbox/dcim/models/racks.py:133 msgid "model" msgstr "модель" -#: netbox/dcim/models/devices.py:95 +#: netbox/dcim/models/devices.py:97 msgid "default platform" msgstr "платформа за замовчуванням" -#: netbox/dcim/models/devices.py:98 netbox/dcim/models/devices.py:386 +#: netbox/dcim/models/devices.py:100 netbox/dcim/models/devices.py:387 msgid "part number" msgstr "номер деталі" -#: netbox/dcim/models/devices.py:101 netbox/dcim/models/devices.py:389 +#: netbox/dcim/models/devices.py:103 netbox/dcim/models/devices.py:390 msgid "Discrete part number (optional)" msgstr "Дискретний номер деталі (необов'язково)" -#: netbox/dcim/models/devices.py:107 netbox/dcim/models/racks.py:54 +#: netbox/dcim/models/devices.py:109 netbox/dcim/models/racks.py:53 msgid "height (U)" msgstr "висота (U)" -#: netbox/dcim/models/devices.py:111 +#: netbox/dcim/models/devices.py:113 msgid "exclude from utilization" msgstr "виключити з підрахунку утилізації" -#: netbox/dcim/models/devices.py:112 +#: netbox/dcim/models/devices.py:114 msgid "Devices of this type are excluded when calculating rack utilization." msgstr "Пристрої такого типу виключаються при підрахунку утилізації стійки." -#: netbox/dcim/models/devices.py:116 +#: netbox/dcim/models/devices.py:118 msgid "is full depth" msgstr "є повною глибиною" -#: netbox/dcim/models/devices.py:117 +#: netbox/dcim/models/devices.py:119 msgid "Device consumes both front and rear rack faces." msgstr "Пристрій споживає як передні, так і задні грані стійки." -#: netbox/dcim/models/devices.py:123 +#: netbox/dcim/models/devices.py:126 msgid "parent/child status" msgstr "статус батька/дитини" -#: netbox/dcim/models/devices.py:124 +#: netbox/dcim/models/devices.py:127 msgid "" "Parent devices house child devices in device bays. Leave blank if this " "device type is neither a parent nor a child." @@ -5968,24 +6494,24 @@ msgstr "" "Батьківські пристрої розміщують дочірні пристрої в відсіках пристроїв. " "Залиште порожнім, якщо цей тип пристрою не є ані батьком, ані дитиною." -#: netbox/dcim/models/devices.py:128 netbox/dcim/models/devices.py:392 -#: netbox/dcim/models/devices.py:659 netbox/dcim/models/racks.py:324 +#: netbox/dcim/models/devices.py:131 netbox/dcim/models/devices.py:393 +#: netbox/dcim/models/devices.py:651 netbox/dcim/models/racks.py:315 msgid "airflow" msgstr "повітряний потік" -#: netbox/dcim/models/devices.py:204 +#: netbox/dcim/models/devices.py:208 msgid "device type" msgstr "тип пристрою" -#: netbox/dcim/models/devices.py:205 +#: netbox/dcim/models/devices.py:209 msgid "device types" msgstr "типи пристроїв" -#: netbox/dcim/models/devices.py:290 +#: netbox/dcim/models/devices.py:291 msgid "U height must be in increments of 0.5 rack units." msgstr "Висота має зазначатись з точністю до 0,5 юніта." -#: netbox/dcim/models/devices.py:307 +#: netbox/dcim/models/devices.py:308 #, python-brace-format msgid "" "Device {device} in rack {rack} does not have sufficient space to accommodate" @@ -5994,7 +6520,7 @@ msgstr "" "В стійці {rack} не має достатньо вільного місця для розміщення " "пристрою{device}висотою {height}юніта" -#: netbox/dcim/models/devices.py:322 +#: netbox/dcim/models/devices.py:323 #, python-brace-format msgid "" "Unable to set 0U height: Found {racked_instance_count} " @@ -6003,7 +6529,7 @@ msgstr "" "Не вдалося встановити висоту 0 юніта, бо в стійці вже змонтовано {racked_instance_count} пристроїв." -#: netbox/dcim/models/devices.py:331 +#: netbox/dcim/models/devices.py:332 msgid "" "Must delete all device bay templates associated with this device before " "declassifying it as a parent device." @@ -6011,152 +6537,152 @@ msgstr "" "Необхідно видалити всі шаблони відсіків пристроїв, пов'язані з цим " "пристроєм, перш ніж перевизначати його як батьківський пристрій." -#: netbox/dcim/models/devices.py:337 +#: netbox/dcim/models/devices.py:338 msgid "Child device types must be 0U." msgstr "Підпорядковані типи пристроїв повинні бути висоту 0 юніт." -#: netbox/dcim/models/devices.py:411 +#: netbox/dcim/models/devices.py:413 msgid "module type" msgstr "тип модуля" -#: netbox/dcim/models/devices.py:412 +#: netbox/dcim/models/devices.py:414 msgid "module types" msgstr "типи модулів" -#: netbox/dcim/models/devices.py:485 +#: netbox/dcim/models/devices.py:484 msgid "Virtual machines may be assigned to this role" msgstr "Віртуальні машини можуть бути призначені для цієї ролі" -#: netbox/dcim/models/devices.py:497 +#: netbox/dcim/models/devices.py:496 msgid "device role" msgstr "роль пристрою" -#: netbox/dcim/models/devices.py:498 +#: netbox/dcim/models/devices.py:497 msgid "device roles" msgstr "ролі пристрою" -#: netbox/dcim/models/devices.py:515 +#: netbox/dcim/models/devices.py:511 msgid "Optionally limit this platform to devices of a certain manufacturer" msgstr "Опціонально обмежити цю платформу пристроями певного виробника" -#: netbox/dcim/models/devices.py:527 +#: netbox/dcim/models/devices.py:523 msgid "platform" msgstr "платформа" -#: netbox/dcim/models/devices.py:528 +#: netbox/dcim/models/devices.py:524 msgid "platforms" msgstr "платформи" -#: netbox/dcim/models/devices.py:576 +#: netbox/dcim/models/devices.py:572 msgid "The function this device serves" msgstr "Функція, яку виконує цей пристрій" -#: netbox/dcim/models/devices.py:608 +#: netbox/dcim/models/devices.py:599 msgid "Chassis serial number, assigned by the manufacturer" msgstr "Серійний номер шасі, наданий виробником" -#: netbox/dcim/models/devices.py:616 netbox/dcim/models/devices.py:1189 +#: netbox/dcim/models/devices.py:607 netbox/dcim/models/devices.py:1197 msgid "A unique tag used to identify this device" msgstr "" "Унікальна мітка, яка використовується для ідентифікації цього пристрою" -#: netbox/dcim/models/devices.py:643 +#: netbox/dcim/models/devices.py:634 msgid "position (U)" msgstr "позиція (юніт)" -#: netbox/dcim/models/devices.py:650 +#: netbox/dcim/models/devices.py:642 msgid "rack face" msgstr "лицева частина стійки" -#: netbox/dcim/models/devices.py:670 netbox/dcim/models/devices.py:1420 -#: netbox/virtualization/models/virtualmachines.py:100 +#: netbox/dcim/models/devices.py:663 netbox/dcim/models/devices.py:1425 +#: netbox/virtualization/models/virtualmachines.py:95 msgid "primary IPv4" msgstr "первинна адреса IPv4" -#: netbox/dcim/models/devices.py:678 netbox/dcim/models/devices.py:1428 -#: netbox/virtualization/models/virtualmachines.py:108 +#: netbox/dcim/models/devices.py:671 netbox/dcim/models/devices.py:1433 +#: netbox/virtualization/models/virtualmachines.py:103 msgid "primary IPv6" msgstr "первинна адреса IPv6" -#: netbox/dcim/models/devices.py:686 +#: netbox/dcim/models/devices.py:679 msgid "out-of-band IP" msgstr "IP для зовнішнього незалежного керування" -#: netbox/dcim/models/devices.py:703 +#: netbox/dcim/models/devices.py:696 msgid "VC position" msgstr "Позиція віртуального шасі" -#: netbox/dcim/models/devices.py:706 +#: netbox/dcim/models/devices.py:699 msgid "Virtual chassis position" msgstr "Позиція віртуального шасі" -#: netbox/dcim/models/devices.py:709 +#: netbox/dcim/models/devices.py:702 msgid "VC priority" msgstr "Пріоритет віртуального шасі" -#: netbox/dcim/models/devices.py:713 +#: netbox/dcim/models/devices.py:706 msgid "Virtual chassis master election priority" msgstr "Пріоритет виборів майстра віртуального шасі" -#: netbox/dcim/models/devices.py:716 netbox/dcim/models/sites.py:207 +#: netbox/dcim/models/devices.py:709 netbox/dcim/models/sites.py:208 msgid "latitude" msgstr "широта" -#: netbox/dcim/models/devices.py:721 netbox/dcim/models/devices.py:729 -#: netbox/dcim/models/sites.py:212 netbox/dcim/models/sites.py:220 +#: netbox/dcim/models/devices.py:714 netbox/dcim/models/devices.py:722 +#: netbox/dcim/models/sites.py:213 netbox/dcim/models/sites.py:221 msgid "GPS coordinate in decimal format (xx.yyyyyy)" msgstr "GPS-координата в десятковому форматі (xx.yyyyyy)" -#: netbox/dcim/models/devices.py:724 netbox/dcim/models/sites.py:215 +#: netbox/dcim/models/devices.py:717 netbox/dcim/models/sites.py:216 msgid "longitude" msgstr "довгота" -#: netbox/dcim/models/devices.py:797 +#: netbox/dcim/models/devices.py:790 msgid "Device name must be unique per site." msgstr "Ім'я пристрою має бути унікальним для кожного тех. майданчика." -#: netbox/dcim/models/devices.py:808 netbox/ipam/models/services.py:75 +#: netbox/dcim/models/devices.py:801 netbox/ipam/models/services.py:71 msgid "device" msgstr "пристрій" -#: netbox/dcim/models/devices.py:809 +#: netbox/dcim/models/devices.py:802 msgid "devices" msgstr "пристрої" -#: netbox/dcim/models/devices.py:835 +#: netbox/dcim/models/devices.py:821 #, python-brace-format msgid "Rack {rack} does not belong to site {site}." msgstr "Стійка {rack} не належить до тех. майданчику {site}." -#: netbox/dcim/models/devices.py:840 +#: netbox/dcim/models/devices.py:826 #, python-brace-format msgid "Location {location} does not belong to site {site}." msgstr "Розташування {location} не належить до тех. майданчика {site}." -#: netbox/dcim/models/devices.py:846 +#: netbox/dcim/models/devices.py:832 #, python-brace-format msgid "Rack {rack} does not belong to location {location}." msgstr "Стійка {rack} не належить до місцезнаходження {location}." -#: netbox/dcim/models/devices.py:853 +#: netbox/dcim/models/devices.py:839 msgid "Cannot select a rack face without assigning a rack." msgstr "" "Не вдається вибрати лицеву частину стійки без призначення самої стійки." -#: netbox/dcim/models/devices.py:857 +#: netbox/dcim/models/devices.py:843 msgid "Cannot select a rack position without assigning a rack." msgstr "Не вдається вибрати положення стійки без призначення самої стійки." -#: netbox/dcim/models/devices.py:863 +#: netbox/dcim/models/devices.py:849 msgid "Position must be in increments of 0.5 rack units." msgstr "Положення повинно бути з кроком в 0,5 юніта." -#: netbox/dcim/models/devices.py:867 +#: netbox/dcim/models/devices.py:853 msgid "Must specify rack face when defining rack position." msgstr "" "Необхідно вказати лицеву частину стійки при визначенні положення стійки." -#: netbox/dcim/models/devices.py:875 +#: netbox/dcim/models/devices.py:861 #, python-brace-format msgid "" "A 0U device type ({device_type}) cannot be assigned to a rack position." @@ -6164,7 +6690,7 @@ msgstr "" "Тип пристрою 0 юніта ({device_type}) не може бути призначений для положення " "стійки." -#: netbox/dcim/models/devices.py:886 +#: netbox/dcim/models/devices.py:872 msgid "" "Child device types cannot be assigned to a rack face. This is an attribute " "of the parent device." @@ -6172,7 +6698,7 @@ msgstr "" "Підпорядковані типи пристроїв не можуть бути призначені для лицевої частини " "стійки. Це атрибут батьківського пристрою." -#: netbox/dcim/models/devices.py:893 +#: netbox/dcim/models/devices.py:879 msgid "" "Child device types cannot be assigned to a rack position. This is an " "attribute of the parent device." @@ -6180,7 +6706,7 @@ msgstr "" "Підпорядковані типи пристроїв не можуть бути призначені для розміщення у " "стійки. Це атрибут батьківського пристрою." -#: netbox/dcim/models/devices.py:907 +#: netbox/dcim/models/devices.py:893 #, python-brace-format msgid "" "U{position} is already occupied or does not have sufficient space to " @@ -6189,22 +6715,22 @@ msgstr "" "Монтажна позиція{position}юніт вже зайнята або не має достатньо вільного " "місця для розміщення цього пристрою: {device_type} ({u_height}юніта)" -#: netbox/dcim/models/devices.py:922 +#: netbox/dcim/models/devices.py:908 #, python-brace-format msgid "{ip} is not an IPv4 address." msgstr "{ip} Це не IPv4 адреса." -#: netbox/dcim/models/devices.py:931 netbox/dcim/models/devices.py:946 +#: netbox/dcim/models/devices.py:920 netbox/dcim/models/devices.py:938 #, python-brace-format msgid "The specified IP address ({ip}) is not assigned to this device." msgstr "Зазначена IP-адреса ({ip}) не призначається до цього пристрою." -#: netbox/dcim/models/devices.py:937 +#: netbox/dcim/models/devices.py:926 #, python-brace-format msgid "{ip} is not an IPv6 address." msgstr "{ip} Це не IPv6 адреса." -#: netbox/dcim/models/devices.py:964 +#: netbox/dcim/models/devices.py:956 #, python-brace-format msgid "" "The assigned platform is limited to {platform_manufacturer} device types, " @@ -6213,12 +6739,17 @@ msgstr "" "Призначена платформа обмежена {platform_manufacturer} типом пристроїв, але " "цей тип пристрою належить до {devicetype_manufacturer}." -#: netbox/dcim/models/devices.py:975 +#: netbox/dcim/models/devices.py:967 #, python-brace-format msgid "The assigned cluster belongs to a different site ({site})" msgstr "Призначений кластер належить іншому тех. майданчику ({site})" -#: netbox/dcim/models/devices.py:983 +#: netbox/dcim/models/devices.py:974 +#, python-brace-format +msgid "The assigned cluster belongs to a different location ({location})" +msgstr "Призначений кластер належить до іншого місця ({location})" + +#: netbox/dcim/models/devices.py:982 msgid "A device assigned to a virtual chassis must have its position defined." msgstr "" "Для пристрія, призначеного для віртуального шасі, повинно бути задане " @@ -6233,15 +6764,15 @@ msgstr "" "Пристрій неможливо видалити з віртуального шасі {virtual_chassis} тому, що в" " даний час він призначений майстром." -#: netbox/dcim/models/devices.py:1196 +#: netbox/dcim/models/devices.py:1204 msgid "module" msgstr "модуль" -#: netbox/dcim/models/devices.py:1197 +#: netbox/dcim/models/devices.py:1205 msgid "modules" msgstr "модулі" -#: netbox/dcim/models/devices.py:1213 +#: netbox/dcim/models/devices.py:1218 #, python-brace-format msgid "" "Module must be installed within a module bay belonging to the assigned " @@ -6250,21 +6781,21 @@ msgstr "" "Модуль повинен бути встановлений у відсіку модуля, що належить призначеному " "пристрою ({device})." -#: netbox/dcim/models/devices.py:1339 +#: netbox/dcim/models/devices.py:1346 msgid "domain" msgstr "домен" -#: netbox/dcim/models/devices.py:1352 netbox/dcim/models/devices.py:1353 +#: netbox/dcim/models/devices.py:1359 netbox/dcim/models/devices.py:1360 msgid "virtual chassis" msgstr "віртуальні шасі" -#: netbox/dcim/models/devices.py:1368 +#: netbox/dcim/models/devices.py:1372 #, python-brace-format msgid "" "The selected master ({master}) is not assigned to this virtual chassis." msgstr "Обраний майстер ({master}) не присвоюється цьому віртуальному шасі." -#: netbox/dcim/models/devices.py:1384 +#: netbox/dcim/models/devices.py:1388 #, python-brace-format msgid "" "Unable to delete virtual chassis {self}. There are member interfaces which " @@ -6273,51 +6804,62 @@ msgstr "" "Неможливо видалити віртуальне шасі {self}. Існують мережеві інтерфейси, які " "утворюють інтерфейси LAG між шасі." -#: netbox/dcim/models/devices.py:1409 netbox/vpn/models/l2vpn.py:37 +#: netbox/dcim/models/devices.py:1414 netbox/vpn/models/l2vpn.py:37 msgid "identifier" msgstr "ідентифікатор" -#: netbox/dcim/models/devices.py:1410 +#: netbox/dcim/models/devices.py:1415 msgid "Numeric identifier unique to the parent device" msgstr "Числовий ідентифікатор, унікальний для батьківського пристрою" -#: netbox/dcim/models/devices.py:1438 netbox/extras/models/customfields.py:225 +#: netbox/dcim/models/devices.py:1443 netbox/extras/models/customfields.py:225 #: netbox/extras/models/models.py:107 netbox/extras/models/models.py:694 -#: netbox/netbox/models/__init__.py:115 +#: netbox/netbox/models/__init__.py:120 msgid "comments" msgstr "коментарі" -#: netbox/dcim/models/devices.py:1454 +#: netbox/dcim/models/devices.py:1459 msgid "virtual device context" msgstr "контекст віртуального пристрою" -#: netbox/dcim/models/devices.py:1455 +#: netbox/dcim/models/devices.py:1460 msgid "virtual device contexts" msgstr "контексти віртуальних пристроїв" -#: netbox/dcim/models/devices.py:1487 +#: netbox/dcim/models/devices.py:1489 #, python-brace-format msgid "{ip} is not an IPv{family} address." msgstr "{ip} не є IPv{family} адресою." -#: netbox/dcim/models/devices.py:1493 +#: netbox/dcim/models/devices.py:1495 msgid "Primary IP address must belong to an interface on the assigned device." msgstr "" "Первинна IP-адреса повинна належати інтерфейсу на призначеному пристрої." -#: netbox/dcim/models/mixins.py:15 netbox/extras/models/configs.py:41 -#: netbox/extras/models/models.py:313 netbox/extras/models/models.py:522 -#: netbox/extras/models/search.py:48 netbox/ipam/models/ip.py:194 -msgid "weight" -msgstr "вага" +#: netbox/dcim/models/devices.py:1527 +msgid "MAC addresses" +msgstr "MAC-адреси" -#: netbox/dcim/models/mixins.py:22 -msgid "weight unit" -msgstr "одиниця ваги" +#: netbox/dcim/models/devices.py:1559 +msgid "" +"Cannot unassign MAC Address while it is designated as the primary MAC for an" +" object" +msgstr "" +"Не вдається скасувати присвоєння MAC-адреси, якщо вона призначена як " +"основний MAC для об'єкта" -#: netbox/dcim/models/mixins.py:51 -msgid "Must specify a unit when setting a weight" -msgstr "Необхідно вказати одиницю виміру при установці ваги" +#: netbox/dcim/models/devices.py:1563 +msgid "" +"Cannot reassign MAC Address while it is designated as the primary MAC for an" +" object" +msgstr "" +"Не вдається перепризначити MAC-адресу, якщо вона призначена як основний MAC " +"для об'єкта" + +#: netbox/dcim/models/mixins.py:94 +#, python-brace-format +msgid "Please select a {scope_type}." +msgstr "Будь ласка, виберіть {scope_type}." #: netbox/dcim/models/power.py:55 msgid "power panel" @@ -6327,7 +6869,7 @@ msgstr "панель живлення" msgid "power panels" msgstr "панелі живлення" -#: netbox/dcim/models/power.py:70 +#: netbox/dcim/models/power.py:67 #, python-brace-format msgid "" "Location {location} ({location_site}) is in a different site than {site}" @@ -6335,43 +6877,43 @@ msgstr "" "Розташування {location} ({location_site}) знаходиться на іншому тех. " "майданчику, ніж {site}" -#: netbox/dcim/models/power.py:108 +#: netbox/dcim/models/power.py:106 msgid "supply" msgstr "постачання" -#: netbox/dcim/models/power.py:114 +#: netbox/dcim/models/power.py:112 msgid "phase" msgstr "фаза" -#: netbox/dcim/models/power.py:120 +#: netbox/dcim/models/power.py:118 msgid "voltage" msgstr "напруга" -#: netbox/dcim/models/power.py:125 +#: netbox/dcim/models/power.py:123 msgid "amperage" msgstr "сила струму" -#: netbox/dcim/models/power.py:130 +#: netbox/dcim/models/power.py:128 msgid "max utilization" msgstr "максимальне використання" -#: netbox/dcim/models/power.py:133 +#: netbox/dcim/models/power.py:131 msgid "Maximum permissible draw (percentage)" msgstr "Максимальна допустима потужність (відсоток)" -#: netbox/dcim/models/power.py:136 +#: netbox/dcim/models/power.py:134 msgid "available power" msgstr "доступна потужність" -#: netbox/dcim/models/power.py:164 +#: netbox/dcim/models/power.py:162 msgid "power feed" msgstr "подача живлення" -#: netbox/dcim/models/power.py:165 +#: netbox/dcim/models/power.py:163 msgid "power feeds" msgstr "подачі живлення" -#: netbox/dcim/models/power.py:179 +#: netbox/dcim/models/power.py:174 #, python-brace-format msgid "" "Rack {rack} ({rack_site}) and power panel {powerpanel} ({powerpanel_site}) " @@ -6380,55 +6922,55 @@ msgstr "" "Стійка {rack} ({rack_site}) та панель живлення {powerpanel} " "({powerpanel_site}) знаходяться на різних тех. майданчиках." -#: netbox/dcim/models/power.py:190 +#: netbox/dcim/models/power.py:185 msgid "Voltage cannot be negative for AC supply" msgstr "Напруга не може бути негативною для живлення змінного струму" -#: netbox/dcim/models/racks.py:47 +#: netbox/dcim/models/racks.py:46 msgid "width" msgstr "ширина" -#: netbox/dcim/models/racks.py:48 +#: netbox/dcim/models/racks.py:47 msgid "Rail-to-rail width" msgstr "Ширина рейки до рейки" -#: netbox/dcim/models/racks.py:56 +#: netbox/dcim/models/racks.py:55 msgid "Height in rack units" msgstr "Висота стійки у юнітах" -#: netbox/dcim/models/racks.py:60 +#: netbox/dcim/models/racks.py:59 msgid "starting unit" msgstr "начальний юніт" -#: netbox/dcim/models/racks.py:62 +#: netbox/dcim/models/racks.py:61 msgid "Starting unit for rack" msgstr "Начальний юніт для стійки" -#: netbox/dcim/models/racks.py:66 +#: netbox/dcim/models/racks.py:65 msgid "descending units" msgstr "юніти у низхідному порядку" -#: netbox/dcim/models/racks.py:67 +#: netbox/dcim/models/racks.py:66 msgid "Units are numbered top-to-bottom" msgstr "Юніти нумеруються зверху вниз" -#: netbox/dcim/models/racks.py:72 +#: netbox/dcim/models/racks.py:71 msgid "outer width" msgstr "зовнішня ширина" -#: netbox/dcim/models/racks.py:75 +#: netbox/dcim/models/racks.py:74 msgid "Outer dimension of rack (width)" msgstr "Зовнішній розмір стійки (ширина)" -#: netbox/dcim/models/racks.py:78 +#: netbox/dcim/models/racks.py:77 msgid "outer depth" msgstr "зовнішня глибина" -#: netbox/dcim/models/racks.py:81 +#: netbox/dcim/models/racks.py:80 msgid "Outer dimension of rack (depth)" msgstr "Зовнішній розмір стійки (глибина)" -#: netbox/dcim/models/racks.py:84 +#: netbox/dcim/models/racks.py:83 msgid "outer unit" msgstr "зовнішній блок" @@ -6452,7 +6994,7 @@ msgstr "макс. вага" msgid "Maximum load capacity for the rack" msgstr "Максимальна вантажопідйомність для стійки" -#: netbox/dcim/models/racks.py:125 netbox/dcim/models/racks.py:252 +#: netbox/dcim/models/racks.py:125 netbox/dcim/models/racks.py:247 msgid "form factor" msgstr "форм-фактор" @@ -6464,58 +7006,58 @@ msgstr "тип стійки" msgid "rack types" msgstr "типи стійки" -#: netbox/dcim/models/racks.py:180 netbox/dcim/models/racks.py:379 +#: netbox/dcim/models/racks.py:177 netbox/dcim/models/racks.py:368 msgid "Must specify a unit when setting an outer width/depth" msgstr "" "Необхідно вказати одиницю виміру при встановленні зовнішньої ширини/глибини" -#: netbox/dcim/models/racks.py:184 netbox/dcim/models/racks.py:383 +#: netbox/dcim/models/racks.py:181 netbox/dcim/models/racks.py:372 msgid "Must specify a unit when setting a maximum weight" msgstr "Необхідно вказати одиницю виміру при встановленні максимальної ваги" -#: netbox/dcim/models/racks.py:230 +#: netbox/dcim/models/racks.py:227 msgid "rack role" msgstr "роль стійки" -#: netbox/dcim/models/racks.py:231 +#: netbox/dcim/models/racks.py:228 msgid "rack roles" msgstr "ролі стійки" -#: netbox/dcim/models/racks.py:274 +#: netbox/dcim/models/racks.py:265 msgid "facility ID" msgstr "Ідентифікатор об'єкта" -#: netbox/dcim/models/racks.py:275 +#: netbox/dcim/models/racks.py:266 msgid "Locally-assigned identifier" msgstr "Локально призначений ідентифікатор" -#: netbox/dcim/models/racks.py:308 netbox/ipam/forms/bulk_import.py:201 -#: netbox/ipam/forms/bulk_import.py:266 netbox/ipam/forms/bulk_import.py:301 -#: netbox/ipam/forms/bulk_import.py:483 -#: netbox/virtualization/forms/bulk_import.py:112 +#: netbox/dcim/models/racks.py:299 netbox/ipam/forms/bulk_import.py:197 +#: netbox/ipam/forms/bulk_import.py:265 netbox/ipam/forms/bulk_import.py:300 +#: netbox/ipam/forms/bulk_import.py:482 +#: netbox/virtualization/forms/bulk_import.py:118 msgid "Functional role" msgstr "Функціональна роль" -#: netbox/dcim/models/racks.py:321 +#: netbox/dcim/models/racks.py:312 msgid "A unique tag used to identify this rack" msgstr "Унікальна мітка, який використовується для ідентифікації цієї стійки" -#: netbox/dcim/models/racks.py:359 +#: netbox/dcim/models/racks.py:351 msgid "rack" msgstr "стійка" -#: netbox/dcim/models/racks.py:360 +#: netbox/dcim/models/racks.py:352 msgid "racks" msgstr "стійки" -#: netbox/dcim/models/racks.py:375 +#: netbox/dcim/models/racks.py:364 #, python-brace-format msgid "Assigned location must belong to parent site ({site})." msgstr "" "Призначене місце розташування повинно належати батьківському тех. майданчику" " ({site})." -#: netbox/dcim/models/racks.py:393 +#: netbox/dcim/models/racks.py:387 #, python-brace-format msgid "" "Rack must be at least {min_height}U tall to house currently installed " @@ -6524,7 +7066,7 @@ msgstr "" "Стійка має бути не нижча, ніж {min_height}юніт, щоб місця було достатньо для" " розміщення вже встановлених пристроїв." -#: netbox/dcim/models/racks.py:400 +#: netbox/dcim/models/racks.py:396 #, python-brace-format msgid "" "Rack unit numbering must begin at {position} or less to house currently " @@ -6533,122 +7075,122 @@ msgstr "" "Нумерація стійок повинна починатися з {position} або не менше для розміщення" " встановлених на даний момент пристроїв." -#: netbox/dcim/models/racks.py:408 +#: netbox/dcim/models/racks.py:404 #, python-brace-format msgid "Location must be from the same site, {site}." msgstr "Розташування повинно бути з одного і того ж тех. майданчика, {site}." -#: netbox/dcim/models/racks.py:670 +#: netbox/dcim/models/racks.py:666 msgid "units" msgstr "юнітів" -#: netbox/dcim/models/racks.py:696 +#: netbox/dcim/models/racks.py:692 msgid "rack reservation" msgstr "резервування стійки" -#: netbox/dcim/models/racks.py:697 +#: netbox/dcim/models/racks.py:693 msgid "rack reservations" msgstr "бронювання стійки" -#: netbox/dcim/models/racks.py:714 +#: netbox/dcim/models/racks.py:707 #, python-brace-format msgid "Invalid unit(s) for {height}U rack: {unit_list}" msgstr "" "Недійсне монтажне місце для стійки висотою {height} юнітів: {unit_list}" -#: netbox/dcim/models/racks.py:727 +#: netbox/dcim/models/racks.py:720 #, python-brace-format msgid "The following units have already been reserved: {unit_list}" msgstr "Наступні юніти вже зарезервовані: {unit_list}" -#: netbox/dcim/models/sites.py:49 +#: netbox/dcim/models/sites.py:53 msgid "A top-level region with this name already exists." msgstr "Регіон верхнього рівня з такою назвою вже існує." -#: netbox/dcim/models/sites.py:59 +#: netbox/dcim/models/sites.py:63 msgid "A top-level region with this slug already exists." msgstr "Регіон верхнього рівня з цим скореченням вже існує." -#: netbox/dcim/models/sites.py:62 +#: netbox/dcim/models/sites.py:66 msgid "region" msgstr "регіон" -#: netbox/dcim/models/sites.py:63 +#: netbox/dcim/models/sites.py:67 msgid "regions" msgstr "регіони" -#: netbox/dcim/models/sites.py:102 +#: netbox/dcim/models/sites.py:109 msgid "A top-level site group with this name already exists." msgstr "Група тех. майданчиків верхнього рівня з такою назвою вже існує." -#: netbox/dcim/models/sites.py:112 +#: netbox/dcim/models/sites.py:119 msgid "A top-level site group with this slug already exists." msgstr "Група тех. майданчиків верхнього рівня з цим скореченням вже існує." -#: netbox/dcim/models/sites.py:115 +#: netbox/dcim/models/sites.py:122 msgid "site group" msgstr "група тех. майданчиків" -#: netbox/dcim/models/sites.py:116 +#: netbox/dcim/models/sites.py:123 msgid "site groups" msgstr "групи тех. майданчиків" -#: netbox/dcim/models/sites.py:141 +#: netbox/dcim/models/sites.py:145 msgid "Full name of the site" msgstr "Повна назва тех. майданчику" -#: netbox/dcim/models/sites.py:181 netbox/dcim/models/sites.py:279 +#: netbox/dcim/models/sites.py:181 netbox/dcim/models/sites.py:283 msgid "facility" msgstr "об'єкт" -#: netbox/dcim/models/sites.py:184 netbox/dcim/models/sites.py:282 +#: netbox/dcim/models/sites.py:184 netbox/dcim/models/sites.py:286 msgid "Local facility ID or description" msgstr "Ідентифікатор або опис місцевого об'єкта" -#: netbox/dcim/models/sites.py:195 +#: netbox/dcim/models/sites.py:196 msgid "physical address" msgstr "фізична адреса" -#: netbox/dcim/models/sites.py:198 +#: netbox/dcim/models/sites.py:199 msgid "Physical location of the building" msgstr "Фізичне розташування будівлі" -#: netbox/dcim/models/sites.py:201 +#: netbox/dcim/models/sites.py:202 msgid "shipping address" msgstr "адреса доставки" -#: netbox/dcim/models/sites.py:204 +#: netbox/dcim/models/sites.py:205 msgid "If different from the physical address" msgstr "Якщо відрізняється від фізичної адреси" -#: netbox/dcim/models/sites.py:238 +#: netbox/dcim/models/sites.py:245 msgid "site" msgstr "тех. майданчик" -#: netbox/dcim/models/sites.py:239 +#: netbox/dcim/models/sites.py:246 msgid "sites" msgstr "тех. майданчики" -#: netbox/dcim/models/sites.py:309 +#: netbox/dcim/models/sites.py:319 msgid "A location with this name already exists within the specified site." msgstr "" "Місцезнаходження з цим ім'ям вже існує в межах зазначеного тех. майданчика." -#: netbox/dcim/models/sites.py:319 +#: netbox/dcim/models/sites.py:329 msgid "A location with this slug already exists within the specified site." msgstr "" "Місцезнаходження з цим скороченням вже існує в межах зазначеного тех. " "майданчику." -#: netbox/dcim/models/sites.py:322 +#: netbox/dcim/models/sites.py:332 msgid "location" msgstr "локація" -#: netbox/dcim/models/sites.py:323 +#: netbox/dcim/models/sites.py:333 msgid "locations" msgstr "локації" -#: netbox/dcim/models/sites.py:337 +#: netbox/dcim/models/sites.py:344 #, python-brace-format msgid "Parent location ({parent}) must belong to the same site ({site})." msgstr "" @@ -6663,11 +7205,11 @@ msgstr "Кінець А" msgid "Termination B" msgstr "Кінець Б" -#: netbox/dcim/tables/cables.py:66 netbox/wireless/tables/wirelesslink.py:23 +#: netbox/dcim/tables/cables.py:66 netbox/wireless/tables/wirelesslink.py:22 msgid "Device A" msgstr "Пристрій А" -#: netbox/dcim/tables/cables.py:72 netbox/wireless/tables/wirelesslink.py:32 +#: netbox/dcim/tables/cables.py:72 netbox/wireless/tables/wirelesslink.py:31 msgid "Device B" msgstr "Пристрій Б" @@ -6701,97 +7243,91 @@ msgstr "Тех. майданчик Б" msgid "Reachable" msgstr "Доступний" -#: netbox/dcim/tables/devices.py:58 netbox/dcim/tables/devices.py:106 -#: netbox/dcim/tables/racks.py:150 netbox/dcim/tables/sites.py:105 -#: netbox/dcim/tables/sites.py:148 netbox/extras/tables/tables.py:545 +#: netbox/dcim/tables/devices.py:69 netbox/dcim/tables/devices.py:117 +#: netbox/dcim/tables/racks.py:149 netbox/dcim/tables/sites.py:104 +#: netbox/dcim/tables/sites.py:147 netbox/extras/tables/tables.py:545 #: netbox/netbox/navigation/menu.py:69 netbox/netbox/navigation/menu.py:73 #: netbox/netbox/navigation/menu.py:75 #: netbox/virtualization/forms/model_forms.py:122 -#: netbox/virtualization/tables/clusters.py:83 -#: netbox/virtualization/views.py:204 +#: netbox/virtualization/tables/clusters.py:87 +#: netbox/virtualization/views.py:216 msgid "Devices" msgstr "Пристрої" -#: netbox/dcim/tables/devices.py:63 netbox/dcim/tables/devices.py:111 -#: netbox/virtualization/tables/clusters.py:88 +#: netbox/dcim/tables/devices.py:74 netbox/dcim/tables/devices.py:122 +#: netbox/virtualization/tables/clusters.py:92 msgid "VMs" msgstr "Віртуальні машини" -#: netbox/dcim/tables/devices.py:100 netbox/dcim/tables/devices.py:216 -#: netbox/extras/forms/model_forms.py:630 +#: netbox/dcim/tables/devices.py:111 netbox/dcim/tables/devices.py:227 +#: netbox/extras/forms/model_forms.py:644 #: netbox/templates/dcim/device.html:112 -#: netbox/templates/dcim/device/render_config.html:11 -#: netbox/templates/dcim/device/render_config.html:14 #: netbox/templates/dcim/devicerole.html:44 #: netbox/templates/dcim/platform.html:41 #: netbox/templates/extras/configtemplate.html:10 +#: netbox/templates/extras/object_render_config.html:12 +#: netbox/templates/extras/object_render_config.html:15 #: netbox/templates/virtualization/virtualmachine.html:48 -#: netbox/templates/virtualization/virtualmachine/render_config.html:11 -#: netbox/templates/virtualization/virtualmachine/render_config.html:14 -#: netbox/virtualization/tables/virtualmachines.py:107 +#: netbox/virtualization/tables/virtualmachines.py:77 msgid "Config Template" msgstr "Шаблон конфігурації" -#: netbox/dcim/tables/devices.py:150 netbox/templates/dcim/sitegroup.html:26 -msgid "Site Group" -msgstr "Група тех. майданчиків" - -#: netbox/dcim/tables/devices.py:187 netbox/dcim/tables/devices.py:1068 -#: netbox/ipam/forms/bulk_import.py:527 netbox/ipam/forms/model_forms.py:306 -#: netbox/ipam/forms/model_forms.py:319 netbox/ipam/tables/ip.py:356 -#: netbox/ipam/tables/ip.py:423 netbox/ipam/tables/ip.py:446 +#: netbox/dcim/tables/devices.py:198 netbox/dcim/tables/devices.py:1100 +#: netbox/ipam/forms/bulk_import.py:562 netbox/ipam/forms/model_forms.py:316 +#: netbox/ipam/forms/model_forms.py:329 netbox/ipam/tables/ip.py:308 +#: netbox/ipam/tables/ip.py:375 netbox/ipam/tables/ip.py:398 #: netbox/templates/ipam/ipaddress.html:11 -#: netbox/virtualization/tables/virtualmachines.py:95 +#: netbox/virtualization/tables/virtualmachines.py:65 msgid "IP Address" msgstr "IP-адреса" -#: netbox/dcim/tables/devices.py:191 netbox/dcim/tables/devices.py:1072 -#: netbox/virtualization/tables/virtualmachines.py:86 +#: netbox/dcim/tables/devices.py:202 netbox/dcim/tables/devices.py:1104 +#: netbox/virtualization/tables/virtualmachines.py:56 msgid "IPv4 Address" msgstr "Адреса IPv4" -#: netbox/dcim/tables/devices.py:195 netbox/dcim/tables/devices.py:1076 -#: netbox/virtualization/tables/virtualmachines.py:90 +#: netbox/dcim/tables/devices.py:206 netbox/dcim/tables/devices.py:1108 +#: netbox/virtualization/tables/virtualmachines.py:60 msgid "IPv6 Address" msgstr "Адреса IPv6" -#: netbox/dcim/tables/devices.py:210 +#: netbox/dcim/tables/devices.py:221 msgid "VC Position" msgstr "Позиція віртуальної шасі" -#: netbox/dcim/tables/devices.py:213 +#: netbox/dcim/tables/devices.py:224 msgid "VC Priority" msgstr "Пріоритет віртуальної шасі" -#: netbox/dcim/tables/devices.py:220 netbox/templates/dcim/device_edit.html:38 +#: netbox/dcim/tables/devices.py:231 netbox/templates/dcim/device_edit.html:38 #: netbox/templates/dcim/devicebay_populate.html:16 msgid "Parent Device" msgstr "Батьківський пристрій" -#: netbox/dcim/tables/devices.py:225 +#: netbox/dcim/tables/devices.py:236 msgid "Position (Device Bay)" msgstr "Позиція (відсік пристрою)" -#: netbox/dcim/tables/devices.py:234 +#: netbox/dcim/tables/devices.py:245 msgid "Console ports" msgstr "Консольні порти" -#: netbox/dcim/tables/devices.py:237 +#: netbox/dcim/tables/devices.py:248 msgid "Console server ports" msgstr "Порти консольного сервера" -#: netbox/dcim/tables/devices.py:240 +#: netbox/dcim/tables/devices.py:251 msgid "Power ports" msgstr "Порти живлення" -#: netbox/dcim/tables/devices.py:243 +#: netbox/dcim/tables/devices.py:254 msgid "Power outlets" msgstr "Розетки" -#: netbox/dcim/tables/devices.py:246 netbox/dcim/tables/devices.py:1081 -#: netbox/dcim/tables/devicetypes.py:128 netbox/dcim/views.py:1040 -#: netbox/dcim/views.py:1279 netbox/dcim/views.py:1975 -#: netbox/netbox/navigation/menu.py:94 netbox/netbox/navigation/menu.py:250 +#: netbox/dcim/tables/devices.py:257 netbox/dcim/tables/devices.py:1113 +#: netbox/dcim/tables/devicetypes.py:133 netbox/dcim/views.py:1144 +#: netbox/dcim/views.py:1388 netbox/dcim/views.py:2139 +#: netbox/netbox/navigation/menu.py:94 netbox/netbox/navigation/menu.py:258 #: netbox/templates/dcim/device/base.html:37 #: netbox/templates/dcim/device_list.html:43 #: netbox/templates/dcim/devicetype/base.html:34 @@ -6801,35 +7337,35 @@ msgstr "Розетки" #: netbox/templates/dcim/virtualdevicecontext.html:81 #: netbox/templates/virtualization/virtualmachine/base.html:27 #: netbox/templates/virtualization/virtualmachine_list.html:14 -#: netbox/virtualization/tables/virtualmachines.py:101 -#: netbox/virtualization/views.py:364 netbox/wireless/tables/wirelesslan.py:55 +#: netbox/virtualization/tables/virtualmachines.py:71 +#: netbox/virtualization/views.py:381 netbox/wireless/tables/wirelesslan.py:63 msgid "Interfaces" msgstr "Інтерфейси" -#: netbox/dcim/tables/devices.py:249 +#: netbox/dcim/tables/devices.py:260 msgid "Front ports" msgstr "Передні порти" -#: netbox/dcim/tables/devices.py:255 +#: netbox/dcim/tables/devices.py:266 msgid "Device bays" msgstr "Відсіки для пристроїв" -#: netbox/dcim/tables/devices.py:258 +#: netbox/dcim/tables/devices.py:269 msgid "Module bays" msgstr "Модульні відсіки" -#: netbox/dcim/tables/devices.py:261 +#: netbox/dcim/tables/devices.py:272 msgid "Inventory items" msgstr "Елементи інвентаря" -#: netbox/dcim/tables/devices.py:305 netbox/dcim/tables/modules.py:57 +#: netbox/dcim/tables/devices.py:315 netbox/dcim/tables/modules.py:57 #: netbox/templates/dcim/modulebay.html:17 msgid "Module Bay" msgstr "Резервуар модулів" -#: netbox/dcim/tables/devices.py:318 netbox/dcim/tables/devicetypes.py:47 -#: netbox/dcim/tables/devicetypes.py:143 netbox/dcim/views.py:1115 -#: netbox/dcim/views.py:2073 netbox/netbox/navigation/menu.py:103 +#: netbox/dcim/tables/devices.py:328 netbox/dcim/tables/devicetypes.py:52 +#: netbox/dcim/tables/devicetypes.py:148 netbox/dcim/views.py:1219 +#: netbox/dcim/views.py:2237 netbox/netbox/navigation/menu.py:103 #: netbox/templates/dcim/device/base.html:52 #: netbox/templates/dcim/device_list.html:71 #: netbox/templates/dcim/devicetype/base.html:49 @@ -6838,124 +7374,133 @@ msgstr "Резервуар модулів" msgid "Inventory Items" msgstr "Елементи інвентаря" -#: netbox/dcim/tables/devices.py:333 +#: netbox/dcim/tables/devices.py:343 msgid "Cable Color" msgstr "Колір кабелю" -#: netbox/dcim/tables/devices.py:339 +#: netbox/dcim/tables/devices.py:349 msgid "Link Peers" msgstr "З'єднання мережевих сусідів" -#: netbox/dcim/tables/devices.py:342 +#: netbox/dcim/tables/devices.py:352 msgid "Mark Connected" msgstr "Позначене підключення" -#: netbox/dcim/tables/devices.py:461 +#: netbox/dcim/tables/devices.py:471 msgid "Maximum draw (W)" msgstr "Максимальна потужність (Вт)" -#: netbox/dcim/tables/devices.py:464 +#: netbox/dcim/tables/devices.py:474 msgid "Allocated draw (W)" msgstr "Виділена потужність (Вт)" -#: netbox/dcim/tables/devices.py:558 netbox/ipam/forms/model_forms.py:734 -#: netbox/ipam/tables/fhrp.py:28 netbox/ipam/views.py:596 -#: netbox/ipam/views.py:696 netbox/netbox/navigation/menu.py:158 -#: netbox/netbox/navigation/menu.py:160 -#: netbox/templates/dcim/interface.html:339 +#: netbox/dcim/tables/devices.py:572 netbox/ipam/forms/model_forms.py:784 +#: netbox/ipam/tables/fhrp.py:28 netbox/ipam/views.py:633 +#: netbox/ipam/views.py:738 netbox/netbox/navigation/menu.py:164 +#: netbox/netbox/navigation/menu.py:166 +#: netbox/templates/dcim/interface.html:396 #: netbox/templates/ipam/ipaddress_bulk_add.html:15 #: netbox/templates/ipam/service.html:40 -#: netbox/templates/virtualization/vminterface.html:85 +#: netbox/templates/virtualization/vminterface.html:101 #: netbox/vpn/tables/tunnels.py:98 msgid "IP Addresses" msgstr "IP-адреси" -#: netbox/dcim/tables/devices.py:564 netbox/netbox/navigation/menu.py:202 +#: netbox/dcim/tables/devices.py:578 netbox/netbox/navigation/menu.py:210 #: netbox/templates/ipam/inc/panels/fhrp_groups.html:6 msgid "FHRP Groups" msgstr "Групи FHRP/VRRP" -#: netbox/dcim/tables/devices.py:576 netbox/templates/dcim/interface.html:89 -#: netbox/templates/virtualization/vminterface.html:67 +#: netbox/dcim/tables/devices.py:590 netbox/templates/dcim/interface.html:95 +#: netbox/templates/virtualization/vminterface.html:59 #: netbox/templates/vpn/tunnel.html:18 #: netbox/templates/vpn/tunneltermination.html:13 #: netbox/vpn/forms/bulk_edit.py:76 netbox/vpn/forms/bulk_import.py:76 #: netbox/vpn/forms/filtersets.py:42 netbox/vpn/forms/filtersets.py:82 -#: netbox/vpn/forms/model_forms.py:60 netbox/vpn/forms/model_forms.py:145 +#: netbox/vpn/forms/model_forms.py:61 netbox/vpn/forms/model_forms.py:146 #: netbox/vpn/tables/tunnels.py:78 msgid "Tunnel" msgstr "Тунель" -#: netbox/dcim/tables/devices.py:604 netbox/dcim/tables/devicetypes.py:227 +#: netbox/dcim/tables/devices.py:626 netbox/dcim/tables/devicetypes.py:234 #: netbox/templates/dcim/interface.html:65 msgid "Management Only" msgstr "Тільки управління" -#: netbox/dcim/tables/devices.py:623 +#: netbox/dcim/tables/devices.py:645 msgid "VDCs" msgstr "Джерела живлення постійного струму" -#: netbox/dcim/tables/devices.py:873 netbox/templates/dcim/modulebay.html:53 +#: netbox/dcim/tables/devices.py:652 netbox/templates/dcim/interface.html:163 +msgid "Virtual Circuit" +msgstr "Віртуальна схема" + +#: netbox/dcim/tables/devices.py:904 netbox/templates/dcim/modulebay.html:53 msgid "Installed Module" msgstr "Встановлений модуль" -#: netbox/dcim/tables/devices.py:876 +#: netbox/dcim/tables/devices.py:907 msgid "Module Serial" msgstr "Послідовний модуль" -#: netbox/dcim/tables/devices.py:880 +#: netbox/dcim/tables/devices.py:911 msgid "Module Asset Tag" msgstr "Призначеня мітки на модуль" -#: netbox/dcim/tables/devices.py:889 +#: netbox/dcim/tables/devices.py:920 msgid "Module Status" msgstr "Статус модуля" -#: netbox/dcim/tables/devices.py:944 netbox/dcim/tables/devicetypes.py:312 -#: netbox/templates/dcim/inventoryitem.html:40 +#: netbox/dcim/tables/devices.py:974 netbox/dcim/tables/devicetypes.py:319 +#: netbox/templates/dcim/inventoryitem.html:44 msgid "Component" msgstr "Компонент" -#: netbox/dcim/tables/devices.py:1000 +#: netbox/dcim/tables/devices.py:1032 msgid "Items" msgstr "Предмети" -#: netbox/dcim/tables/devicetypes.py:37 netbox/netbox/navigation/menu.py:84 +#: netbox/dcim/tables/devicetypes.py:37 netbox/netbox/navigation/menu.py:60 +#: netbox/netbox/navigation/menu.py:62 +msgid "Rack Types" +msgstr "Типи стійки" + +#: netbox/dcim/tables/devicetypes.py:42 netbox/netbox/navigation/menu.py:84 #: netbox/netbox/navigation/menu.py:86 msgid "Device Types" msgstr "Типи пристроїв" -#: netbox/dcim/tables/devicetypes.py:42 netbox/netbox/navigation/menu.py:87 +#: netbox/dcim/tables/devicetypes.py:47 netbox/netbox/navigation/menu.py:87 msgid "Module Types" msgstr "Типи модулів" -#: netbox/dcim/tables/devicetypes.py:52 netbox/extras/forms/filtersets.py:371 -#: netbox/extras/forms/model_forms.py:537 netbox/extras/tables/tables.py:540 +#: netbox/dcim/tables/devicetypes.py:57 netbox/extras/forms/filtersets.py:378 +#: netbox/extras/forms/model_forms.py:551 netbox/extras/tables/tables.py:540 #: netbox/netbox/navigation/menu.py:78 msgid "Platforms" msgstr "Платформи" -#: netbox/dcim/tables/devicetypes.py:84 +#: netbox/dcim/tables/devicetypes.py:89 #: netbox/templates/dcim/devicetype.html:29 msgid "Default Platform" msgstr "Платформа за замовчуванням" -#: netbox/dcim/tables/devicetypes.py:88 +#: netbox/dcim/tables/devicetypes.py:93 #: netbox/templates/dcim/devicetype.html:45 msgid "Full Depth" msgstr "Повна глибина" -#: netbox/dcim/tables/devicetypes.py:98 +#: netbox/dcim/tables/devicetypes.py:103 msgid "U Height" msgstr "Висота юніта(U)" -#: netbox/dcim/tables/devicetypes.py:113 netbox/dcim/tables/modules.py:26 +#: netbox/dcim/tables/devicetypes.py:118 netbox/dcim/tables/modules.py:26 #: netbox/dcim/tables/racks.py:89 msgid "Instances" msgstr "Екземпляри" -#: netbox/dcim/tables/devicetypes.py:116 netbox/dcim/views.py:980 -#: netbox/dcim/views.py:1219 netbox/dcim/views.py:1911 +#: netbox/dcim/tables/devicetypes.py:121 netbox/dcim/views.py:1084 +#: netbox/dcim/views.py:1328 netbox/dcim/views.py:2075 #: netbox/netbox/navigation/menu.py:97 #: netbox/templates/dcim/device/base.html:25 #: netbox/templates/dcim/device_list.html:15 @@ -6965,8 +7510,8 @@ msgstr "Екземпляри" msgid "Console Ports" msgstr "Консольні порти" -#: netbox/dcim/tables/devicetypes.py:119 netbox/dcim/views.py:995 -#: netbox/dcim/views.py:1234 netbox/dcim/views.py:1927 +#: netbox/dcim/tables/devicetypes.py:124 netbox/dcim/views.py:1099 +#: netbox/dcim/views.py:1343 netbox/dcim/views.py:2091 #: netbox/netbox/navigation/menu.py:98 #: netbox/templates/dcim/device/base.html:28 #: netbox/templates/dcim/device_list.html:22 @@ -6976,8 +7521,8 @@ msgstr "Консольні порти" msgid "Console Server Ports" msgstr "Порти консольного сервера" -#: netbox/dcim/tables/devicetypes.py:122 netbox/dcim/views.py:1010 -#: netbox/dcim/views.py:1249 netbox/dcim/views.py:1943 +#: netbox/dcim/tables/devicetypes.py:127 netbox/dcim/views.py:1114 +#: netbox/dcim/views.py:1358 netbox/dcim/views.py:2107 #: netbox/netbox/navigation/menu.py:99 #: netbox/templates/dcim/device/base.html:31 #: netbox/templates/dcim/device_list.html:29 @@ -6987,8 +7532,8 @@ msgstr "Порти консольного сервера" msgid "Power Ports" msgstr "Порти живлення" -#: netbox/dcim/tables/devicetypes.py:125 netbox/dcim/views.py:1025 -#: netbox/dcim/views.py:1264 netbox/dcim/views.py:1959 +#: netbox/dcim/tables/devicetypes.py:130 netbox/dcim/views.py:1129 +#: netbox/dcim/views.py:1373 netbox/dcim/views.py:2123 #: netbox/netbox/navigation/menu.py:100 #: netbox/templates/dcim/device/base.html:34 #: netbox/templates/dcim/device_list.html:36 @@ -6998,8 +7543,8 @@ msgstr "Порти живлення" msgid "Power Outlets" msgstr "Розетки" -#: netbox/dcim/tables/devicetypes.py:131 netbox/dcim/views.py:1055 -#: netbox/dcim/views.py:1294 netbox/dcim/views.py:1997 +#: netbox/dcim/tables/devicetypes.py:136 netbox/dcim/views.py:1159 +#: netbox/dcim/views.py:1403 netbox/dcim/views.py:2161 #: netbox/netbox/navigation/menu.py:95 #: netbox/templates/dcim/device/base.html:40 #: netbox/templates/dcim/devicetype/base.html:37 @@ -7008,8 +7553,8 @@ msgstr "Розетки" msgid "Front Ports" msgstr "Передні порти" -#: netbox/dcim/tables/devicetypes.py:134 netbox/dcim/views.py:1070 -#: netbox/dcim/views.py:1309 netbox/dcim/views.py:2013 +#: netbox/dcim/tables/devicetypes.py:139 netbox/dcim/views.py:1174 +#: netbox/dcim/views.py:1418 netbox/dcim/views.py:2177 #: netbox/netbox/navigation/menu.py:96 #: netbox/templates/dcim/device/base.html:43 #: netbox/templates/dcim/device_list.html:50 @@ -7019,16 +7564,16 @@ msgstr "Передні порти" msgid "Rear Ports" msgstr "Задні порти" -#: netbox/dcim/tables/devicetypes.py:137 netbox/dcim/views.py:1100 -#: netbox/dcim/views.py:2053 netbox/netbox/navigation/menu.py:102 +#: netbox/dcim/tables/devicetypes.py:142 netbox/dcim/views.py:1204 +#: netbox/dcim/views.py:2217 netbox/netbox/navigation/menu.py:102 #: netbox/templates/dcim/device/base.html:49 #: netbox/templates/dcim/device_list.html:57 #: netbox/templates/dcim/devicetype/base.html:46 msgid "Device Bays" msgstr "Відсіки для пристроїв" -#: netbox/dcim/tables/devicetypes.py:140 netbox/dcim/views.py:1085 -#: netbox/dcim/views.py:1324 netbox/dcim/views.py:2033 +#: netbox/dcim/tables/devicetypes.py:145 netbox/dcim/views.py:1189 +#: netbox/dcim/views.py:1433 netbox/dcim/views.py:2197 #: netbox/netbox/navigation/menu.py:101 #: netbox/templates/dcim/device/base.html:46 #: netbox/templates/dcim/device_list.html:64 @@ -7038,7 +7583,7 @@ msgstr "Відсіки для пристроїв" msgid "Module Bays" msgstr "Модульні відсіки" -#: netbox/dcim/tables/power.py:36 netbox/netbox/navigation/menu.py:297 +#: netbox/dcim/tables/power.py:36 netbox/netbox/navigation/menu.py:318 #: netbox/templates/dcim/powerpanel.html:51 msgid "Power Feeds" msgstr "Подачі живлення" @@ -7051,109 +7596,104 @@ msgstr "Максимальне використання (живлення)" msgid "Available Power (VA)" msgstr "Доступна потужність (ВА)" -#: netbox/dcim/tables/racks.py:30 netbox/dcim/tables/sites.py:143 +#: netbox/dcim/tables/racks.py:30 netbox/dcim/tables/sites.py:142 #: netbox/netbox/navigation/menu.py:43 netbox/netbox/navigation/menu.py:47 #: netbox/netbox/navigation/menu.py:49 msgid "Racks" msgstr "Стійки" -#: netbox/dcim/tables/racks.py:63 netbox/dcim/tables/racks.py:142 +#: netbox/dcim/tables/racks.py:63 netbox/dcim/tables/racks.py:141 #: netbox/templates/dcim/device.html:318 #: netbox/templates/dcim/inc/panels/racktype_dimensions.html:14 msgid "Height" msgstr "Висота" -#: netbox/dcim/tables/racks.py:67 netbox/dcim/tables/racks.py:165 +#: netbox/dcim/tables/racks.py:67 netbox/dcim/tables/racks.py:164 #: netbox/templates/dcim/inc/panels/racktype_dimensions.html:18 msgid "Outer Width" msgstr "Зовнішня ширина" -#: netbox/dcim/tables/racks.py:71 netbox/dcim/tables/racks.py:169 +#: netbox/dcim/tables/racks.py:71 netbox/dcim/tables/racks.py:168 #: netbox/templates/dcim/inc/panels/racktype_dimensions.html:28 msgid "Outer Depth" msgstr "Зовнішня глибина" -#: netbox/dcim/tables/racks.py:79 netbox/dcim/tables/racks.py:177 +#: netbox/dcim/tables/racks.py:79 netbox/dcim/tables/racks.py:176 msgid "Max Weight" msgstr "Максимальна вага" -#: netbox/dcim/tables/racks.py:154 +#: netbox/dcim/tables/racks.py:153 msgid "Space" msgstr "Простір" #: netbox/dcim/tables/sites.py:30 netbox/dcim/tables/sites.py:57 -#: netbox/extras/forms/filtersets.py:351 -#: netbox/extras/forms/model_forms.py:517 netbox/ipam/forms/bulk_edit.py:131 -#: netbox/ipam/forms/model_forms.py:153 netbox/ipam/tables/asn.py:66 +#: netbox/extras/forms/filtersets.py:358 +#: netbox/extras/forms/model_forms.py:531 netbox/ipam/forms/bulk_edit.py:134 +#: netbox/ipam/forms/model_forms.py:159 netbox/ipam/tables/asn.py:66 #: netbox/netbox/navigation/menu.py:15 netbox/netbox/navigation/menu.py:17 msgid "Sites" msgstr "Тех. майданчики" -#: netbox/dcim/tests/test_api.py:47 +#: netbox/dcim/tests/test_api.py:50 msgid "Test case must set peer_termination_type" msgstr "Тестовий випадок повинен встановити peer_termination_type" -#: netbox/dcim/views.py:138 +#: netbox/dcim/views.py:137 #, python-brace-format msgid "Disconnected {count} {type}" msgstr "Відключено {count} {type}" -#: netbox/dcim/views.py:738 netbox/netbox/navigation/menu.py:51 +#: netbox/dcim/views.py:825 netbox/netbox/navigation/menu.py:51 msgid "Reservations" msgstr "Бронювання" -#: netbox/dcim/views.py:757 netbox/templates/dcim/location.html:90 +#: netbox/dcim/views.py:844 netbox/templates/dcim/location.html:90 #: netbox/templates/dcim/site.html:140 msgid "Non-Racked Devices" msgstr "Пристрої без можливості кріплення у стійку" -#: netbox/dcim/views.py:2086 netbox/extras/forms/model_forms.py:577 +#: netbox/dcim/views.py:2250 netbox/extras/forms/model_forms.py:591 #: netbox/templates/extras/configcontext.html:10 -#: netbox/virtualization/forms/model_forms.py:225 -#: netbox/virtualization/views.py:405 +#: netbox/virtualization/forms/model_forms.py:232 +#: netbox/virtualization/views.py:422 msgid "Config Context" msgstr "Контекст конфігурації" -#: netbox/dcim/views.py:2096 netbox/virtualization/views.py:415 +#: netbox/dcim/views.py:2260 netbox/virtualization/views.py:432 msgid "Render Config" msgstr "Відтворення конфігурації" -#: netbox/dcim/views.py:2131 netbox/virtualization/views.py:450 -#, python-brace-format -msgid "An error occurred while rendering the template: {error}" -msgstr "Під час візуалізації шаблону сталася помилка: {error}" - -#: netbox/dcim/views.py:2149 netbox/extras/tables/tables.py:550 -#: netbox/netbox/navigation/menu.py:247 netbox/netbox/navigation/menu.py:249 -#: netbox/virtualization/views.py:178 +#: netbox/dcim/views.py:2273 netbox/extras/tables/tables.py:550 +#: netbox/netbox/navigation/menu.py:255 netbox/netbox/navigation/menu.py:257 +#: netbox/virtualization/views.py:190 msgid "Virtual Machines" msgstr "Віртуальні машини" -#: netbox/dcim/views.py:2907 +#: netbox/dcim/views.py:3106 #, python-brace-format msgid "Installed device {device} in bay {device_bay}." msgstr "Встановлений пристрій {device} в бухті {device_bay}." -#: netbox/dcim/views.py:2948 +#: netbox/dcim/views.py:3147 #, python-brace-format msgid "Removed device {device} from bay {device_bay}." msgstr "Видалений пристрій {device} з бухти {device_bay}." -#: netbox/dcim/views.py:3054 netbox/ipam/tables/ip.py:234 +#: netbox/dcim/views.py:3263 netbox/ipam/tables/ip.py:180 msgid "Children" msgstr "Підпорядкований" -#: netbox/dcim/views.py:3520 +#: netbox/dcim/views.py:3730 #, python-brace-format msgid "Added member {device}" msgstr "Доданий член {device}" -#: netbox/dcim/views.py:3567 +#: netbox/dcim/views.py:3779 #, python-brace-format msgid "Unable to remove master device {device} from the virtual chassis." msgstr "Неможливо видалити головний пристрій {device} від віртуального шасі." -#: netbox/dcim/views.py:3580 +#: netbox/dcim/views.py:3792 #, python-brace-format msgid "Removed {device} from virtual chassis {chassis}" msgstr "Вилучено {device} з віртуального шасі {chassis}" @@ -7252,7 +7792,7 @@ msgstr "Ні" #: netbox/extras/choices.py:108 netbox/templates/tenancy/contact.html:57 #: netbox/tenancy/forms/bulk_edit.py:118 -#: netbox/wireless/forms/model_forms.py:168 +#: netbox/wireless/forms/model_forms.py:171 msgid "Link" msgstr "Посилання" @@ -7272,15 +7812,15 @@ msgstr "Зростання за алфавітом (A-Z)" msgid "Alphabetical (Z-A)" msgstr "Спадання за алфавітом (Z-A)" -#: netbox/extras/choices.py:144 netbox/extras/choices.py:167 +#: netbox/extras/choices.py:144 netbox/extras/choices.py:165 msgid "Info" msgstr "Інформація" -#: netbox/extras/choices.py:145 netbox/extras/choices.py:168 +#: netbox/extras/choices.py:145 netbox/extras/choices.py:166 msgid "Success" msgstr "Успіх" -#: netbox/extras/choices.py:146 netbox/extras/choices.py:169 +#: netbox/extras/choices.py:146 netbox/extras/choices.py:167 msgid "Warning" msgstr "Попередження" @@ -7288,52 +7828,29 @@ msgstr "Попередження" msgid "Danger" msgstr "Небезпека" -#: netbox/extras/choices.py:165 +#: netbox/extras/choices.py:164 msgid "Debug" msgstr "Налагодження" -#: netbox/extras/choices.py:166 netbox/netbox/choices.py:101 -msgid "Default" -msgstr "За замовчуванням" - -#: netbox/extras/choices.py:170 +#: netbox/extras/choices.py:168 msgid "Failure" msgstr "Невдача" -#: netbox/extras/choices.py:186 -msgid "Hourly" -msgstr "Погодинно" - -#: netbox/extras/choices.py:187 -msgid "12 hours" -msgstr "12 годин" - -#: netbox/extras/choices.py:188 -msgid "Daily" -msgstr "Щодня" - -#: netbox/extras/choices.py:189 -msgid "Weekly" -msgstr "Щотижневий" - -#: netbox/extras/choices.py:190 -msgid "30 days" -msgstr "30 днів" - -#: netbox/extras/choices.py:226 +#: netbox/extras/choices.py:213 #: netbox/templates/dcim/virtualchassis_edit.html:107 #: netbox/templates/generic/bulk_add_component.html:68 #: netbox/templates/generic/object_edit.html:47 #: netbox/templates/generic/object_edit.html:80 +#: netbox/templates/htmx/quick_add.html:24 #: netbox/templates/ipam/inc/ipaddress_edit_header.html:7 msgid "Create" msgstr "Створити" -#: netbox/extras/choices.py:227 +#: netbox/extras/choices.py:214 msgid "Update" msgstr "Оновити" -#: netbox/extras/choices.py:228 +#: netbox/extras/choices.py:215 #: netbox/templates/circuits/inc/circuit_termination.html:23 #: netbox/templates/dcim/inc/panels/inventory_items.html:37 #: netbox/templates/dcim/powerpanel.html:66 @@ -7348,82 +7865,82 @@ msgstr "Оновити" msgid "Delete" msgstr "Видалити" -#: netbox/extras/choices.py:252 netbox/netbox/choices.py:57 -#: netbox/netbox/choices.py:102 +#: netbox/extras/choices.py:239 netbox/netbox/choices.py:59 +#: netbox/netbox/choices.py:104 msgid "Blue" msgstr "Синій" -#: netbox/extras/choices.py:253 netbox/netbox/choices.py:56 -#: netbox/netbox/choices.py:103 +#: netbox/extras/choices.py:240 netbox/netbox/choices.py:58 +#: netbox/netbox/choices.py:105 msgid "Indigo" msgstr "Індиго" -#: netbox/extras/choices.py:254 netbox/netbox/choices.py:54 -#: netbox/netbox/choices.py:104 +#: netbox/extras/choices.py:241 netbox/netbox/choices.py:56 +#: netbox/netbox/choices.py:106 msgid "Purple" msgstr "Фіолетовий" -#: netbox/extras/choices.py:255 netbox/netbox/choices.py:51 -#: netbox/netbox/choices.py:105 +#: netbox/extras/choices.py:242 netbox/netbox/choices.py:53 +#: netbox/netbox/choices.py:107 msgid "Pink" msgstr "Рожевий" -#: netbox/extras/choices.py:256 netbox/netbox/choices.py:50 -#: netbox/netbox/choices.py:106 +#: netbox/extras/choices.py:243 netbox/netbox/choices.py:52 +#: netbox/netbox/choices.py:108 msgid "Red" msgstr "Червоний" -#: netbox/extras/choices.py:257 netbox/netbox/choices.py:68 -#: netbox/netbox/choices.py:107 +#: netbox/extras/choices.py:244 netbox/netbox/choices.py:70 +#: netbox/netbox/choices.py:109 msgid "Orange" msgstr "Помаранчевий" -#: netbox/extras/choices.py:258 netbox/netbox/choices.py:66 -#: netbox/netbox/choices.py:108 +#: netbox/extras/choices.py:245 netbox/netbox/choices.py:68 +#: netbox/netbox/choices.py:110 msgid "Yellow" msgstr "Жовтий" -#: netbox/extras/choices.py:259 netbox/netbox/choices.py:63 -#: netbox/netbox/choices.py:109 +#: netbox/extras/choices.py:246 netbox/netbox/choices.py:65 +#: netbox/netbox/choices.py:111 msgid "Green" msgstr "Зелений" -#: netbox/extras/choices.py:260 netbox/netbox/choices.py:60 -#: netbox/netbox/choices.py:110 +#: netbox/extras/choices.py:247 netbox/netbox/choices.py:62 +#: netbox/netbox/choices.py:112 msgid "Teal" msgstr "Бірюзовий" -#: netbox/extras/choices.py:261 netbox/netbox/choices.py:59 -#: netbox/netbox/choices.py:111 +#: netbox/extras/choices.py:248 netbox/netbox/choices.py:61 +#: netbox/netbox/choices.py:113 msgid "Cyan" msgstr "Блакитний" -#: netbox/extras/choices.py:262 netbox/netbox/choices.py:112 +#: netbox/extras/choices.py:249 netbox/netbox/choices.py:114 msgid "Gray" msgstr "Сірий" -#: netbox/extras/choices.py:263 netbox/netbox/choices.py:74 -#: netbox/netbox/choices.py:113 +#: netbox/extras/choices.py:250 netbox/netbox/choices.py:76 +#: netbox/netbox/choices.py:115 msgid "Black" msgstr "Чорний" -#: netbox/extras/choices.py:264 netbox/netbox/choices.py:75 -#: netbox/netbox/choices.py:114 +#: netbox/extras/choices.py:251 netbox/netbox/choices.py:77 +#: netbox/netbox/choices.py:116 msgid "White" msgstr "Білий" -#: netbox/extras/choices.py:279 netbox/extras/forms/model_forms.py:353 -#: netbox/extras/forms/model_forms.py:430 +#: netbox/extras/choices.py:266 netbox/extras/forms/model_forms.py:367 +#: netbox/extras/forms/model_forms.py:444 #: netbox/templates/extras/webhook.html:10 msgid "Webhook" msgstr "Веб-хук" -#: netbox/extras/choices.py:280 netbox/extras/forms/model_forms.py:418 +#: netbox/extras/choices.py:267 netbox/extras/forms/model_forms.py:432 #: netbox/templates/extras/script/base.html:29 msgid "Script" msgstr "Сценарій" -#: netbox/extras/choices.py:281 +#: netbox/extras/choices.py:268 msgid "Notification" msgstr "Повідомлення" @@ -7523,30 +8040,34 @@ msgstr "" msgid "RSS Feed" msgstr "RSS-канал" -#: netbox/extras/dashboard/widgets.py:279 +#: netbox/extras/dashboard/widgets.py:280 msgid "Embed an RSS feed from an external website." msgstr "Вбудовувати RSS-канал із зовнішнього веб-сайту." -#: netbox/extras/dashboard/widgets.py:286 +#: netbox/extras/dashboard/widgets.py:287 msgid "Feed URL" msgstr "URL-адреса каналу" -#: netbox/extras/dashboard/widgets.py:291 +#: netbox/extras/dashboard/widgets.py:290 +msgid "Requires external connection" +msgstr "Потрібне зовнішнє підключення" + +#: netbox/extras/dashboard/widgets.py:296 msgid "The maximum number of objects to display" msgstr "Максимальна кількість об'єктів для відображення" -#: netbox/extras/dashboard/widgets.py:296 +#: netbox/extras/dashboard/widgets.py:301 msgid "How long to stored the cached content (in seconds)" msgstr "Як довго зберігати кешований вміст (в секундах)" -#: netbox/extras/dashboard/widgets.py:348 +#: netbox/extras/dashboard/widgets.py:358 #: netbox/templates/account/base.html:10 #: netbox/templates/account/bookmarks.html:7 -#: netbox/templates/inc/user_menu.html:48 +#: netbox/templates/inc/user_menu.html:43 msgid "Bookmarks" msgstr "Закладки" -#: netbox/extras/dashboard/widgets.py:352 +#: netbox/extras/dashboard/widgets.py:362 msgid "Show your personal bookmarks" msgstr "Показувати особисті закладки" @@ -7575,17 +8096,17 @@ msgid "Group (name)" msgstr "Група (назва)" #: netbox/extras/filtersets.py:574 -#: netbox/virtualization/forms/filtersets.py:118 +#: netbox/virtualization/forms/filtersets.py:123 msgid "Cluster type" msgstr "Тип кластера" -#: netbox/extras/filtersets.py:580 netbox/virtualization/filtersets.py:95 -#: netbox/virtualization/filtersets.py:147 +#: netbox/extras/filtersets.py:580 netbox/virtualization/filtersets.py:61 +#: netbox/virtualization/filtersets.py:113 msgid "Cluster type (slug)" msgstr "Кластерний тип (скорочення)" #: netbox/extras/filtersets.py:601 netbox/tenancy/forms/forms.py:16 -#: netbox/tenancy/forms/forms.py:39 +#: netbox/tenancy/forms/forms.py:40 msgid "Tenant group" msgstr "Група орендарів" @@ -7594,7 +8115,7 @@ msgstr "Група орендарів" msgid "Tenant group (slug)" msgstr "Група орендарів (скорочення)" -#: netbox/extras/filtersets.py:623 netbox/extras/forms/model_forms.py:495 +#: netbox/extras/filtersets.py:623 netbox/extras/forms/model_forms.py:509 #: netbox/templates/extras/tag.html:11 msgid "Tag" msgstr "Мітка" @@ -7603,60 +8124,60 @@ msgstr "Мітка" msgid "Tag (slug)" msgstr "Мітка (скорочення)" -#: netbox/extras/filtersets.py:689 netbox/extras/forms/filtersets.py:429 +#: netbox/extras/filtersets.py:689 netbox/extras/forms/filtersets.py:437 msgid "Has local config context data" msgstr "Має локальні контекстні дані конфігурації" -#: netbox/extras/forms/bulk_edit.py:35 netbox/extras/forms/filtersets.py:60 +#: netbox/extras/forms/bulk_edit.py:35 netbox/extras/forms/filtersets.py:61 msgid "Group name" msgstr "Назва групи" -#: netbox/extras/forms/bulk_edit.py:43 netbox/extras/forms/filtersets.py:68 +#: netbox/extras/forms/bulk_edit.py:43 netbox/extras/forms/filtersets.py:69 #: netbox/extras/tables/tables.py:65 #: netbox/templates/extras/customfield.html:38 #: netbox/templates/generic/bulk_import.html:118 msgid "Required" msgstr "Обов'язково" -#: netbox/extras/forms/bulk_edit.py:48 netbox/extras/forms/filtersets.py:75 +#: netbox/extras/forms/bulk_edit.py:48 netbox/extras/forms/filtersets.py:76 msgid "Must be unique" msgstr "Повинен бути унікальним" #: netbox/extras/forms/bulk_edit.py:61 netbox/extras/forms/bulk_import.py:60 -#: netbox/extras/forms/filtersets.py:89 +#: netbox/extras/forms/filtersets.py:90 #: netbox/extras/models/customfields.py:209 msgid "UI visible" msgstr "Видимий інтерфейс користувача" #: netbox/extras/forms/bulk_edit.py:66 netbox/extras/forms/bulk_import.py:66 -#: netbox/extras/forms/filtersets.py:94 +#: netbox/extras/forms/filtersets.py:95 #: netbox/extras/models/customfields.py:216 msgid "UI editable" msgstr "Редагований інтерфейс користувача" -#: netbox/extras/forms/bulk_edit.py:71 netbox/extras/forms/filtersets.py:97 +#: netbox/extras/forms/bulk_edit.py:71 netbox/extras/forms/filtersets.py:98 msgid "Is cloneable" msgstr "Чи можна клонувати" -#: netbox/extras/forms/bulk_edit.py:76 netbox/extras/forms/filtersets.py:104 +#: netbox/extras/forms/bulk_edit.py:76 netbox/extras/forms/filtersets.py:105 msgid "Minimum value" msgstr "Мінімальне значення" -#: netbox/extras/forms/bulk_edit.py:80 netbox/extras/forms/filtersets.py:108 +#: netbox/extras/forms/bulk_edit.py:80 netbox/extras/forms/filtersets.py:109 msgid "Maximum value" msgstr "Максимальне значення" -#: netbox/extras/forms/bulk_edit.py:84 netbox/extras/forms/filtersets.py:112 +#: netbox/extras/forms/bulk_edit.py:84 netbox/extras/forms/filtersets.py:113 msgid "Validation regex" msgstr "Регулярний вираз перевірки" -#: netbox/extras/forms/bulk_edit.py:91 netbox/extras/forms/filtersets.py:46 +#: netbox/extras/forms/bulk_edit.py:91 netbox/extras/forms/filtersets.py:47 #: netbox/extras/forms/model_forms.py:76 #: netbox/templates/extras/customfield.html:70 msgid "Behavior" msgstr "Поведінка" -#: netbox/extras/forms/bulk_edit.py:128 netbox/extras/forms/filtersets.py:149 +#: netbox/extras/forms/bulk_edit.py:128 netbox/extras/forms/filtersets.py:152 msgid "New window" msgstr "Нове вікно" @@ -7664,31 +8185,31 @@ msgstr "Нове вікно" msgid "Button class" msgstr "Клас кнопок" -#: netbox/extras/forms/bulk_edit.py:154 netbox/extras/forms/filtersets.py:187 +#: netbox/extras/forms/bulk_edit.py:154 netbox/extras/forms/filtersets.py:191 #: netbox/extras/models/models.py:409 msgid "MIME type" msgstr "Тип MIME" -#: netbox/extras/forms/bulk_edit.py:159 netbox/extras/forms/filtersets.py:190 +#: netbox/extras/forms/bulk_edit.py:159 netbox/extras/forms/filtersets.py:194 msgid "File extension" msgstr "Розширення файлу" -#: netbox/extras/forms/bulk_edit.py:164 netbox/extras/forms/filtersets.py:194 +#: netbox/extras/forms/bulk_edit.py:164 netbox/extras/forms/filtersets.py:198 msgid "As attachment" msgstr "Як вкладення" -#: netbox/extras/forms/bulk_edit.py:192 netbox/extras/forms/filtersets.py:236 +#: netbox/extras/forms/bulk_edit.py:192 netbox/extras/forms/filtersets.py:242 #: netbox/extras/tables/tables.py:256 #: netbox/templates/extras/savedfilter.html:29 msgid "Shared" msgstr "Спільний" -#: netbox/extras/forms/bulk_edit.py:215 netbox/extras/forms/filtersets.py:265 +#: netbox/extras/forms/bulk_edit.py:215 netbox/extras/forms/filtersets.py:271 #: netbox/extras/models/models.py:174 msgid "HTTP method" msgstr "Метод HTTP" -#: netbox/extras/forms/bulk_edit.py:219 netbox/extras/forms/filtersets.py:259 +#: netbox/extras/forms/bulk_edit.py:219 netbox/extras/forms/filtersets.py:265 #: netbox/templates/extras/webhook.html:30 msgid "Payload URL" msgstr "URL-адреса корисного навантаження" @@ -7707,7 +8228,7 @@ msgid "CA file path" msgstr "Шляхи до файлу CA" #: netbox/extras/forms/bulk_edit.py:253 netbox/extras/forms/bulk_import.py:192 -#: netbox/extras/forms/model_forms.py:377 +#: netbox/extras/forms/model_forms.py:391 msgid "Event types" msgstr "Типи подій" @@ -7720,13 +8241,13 @@ msgstr "Активний" #: netbox/extras/forms/bulk_import.py:139 #: netbox/extras/forms/bulk_import.py:162 #: netbox/extras/forms/bulk_import.py:186 -#: netbox/extras/forms/filtersets.py:137 netbox/extras/forms/filtersets.py:224 +#: netbox/extras/forms/filtersets.py:140 netbox/extras/forms/filtersets.py:230 #: netbox/extras/forms/model_forms.py:47 -#: netbox/extras/forms/model_forms.py:205 -#: netbox/extras/forms/model_forms.py:237 -#: netbox/extras/forms/model_forms.py:278 -#: netbox/extras/forms/model_forms.py:372 -#: netbox/extras/forms/model_forms.py:489 +#: netbox/extras/forms/model_forms.py:219 +#: netbox/extras/forms/model_forms.py:251 +#: netbox/extras/forms/model_forms.py:292 +#: netbox/extras/forms/model_forms.py:386 +#: netbox/extras/forms/model_forms.py:503 #: netbox/users/forms/model_forms.py:276 msgid "Object types" msgstr "Типи об'єктів" @@ -7744,10 +8265,10 @@ msgstr "Один або кілька присвоєних типів об'єкт msgid "Field data type (e.g. text, integer, etc.)" msgstr "Тип даних поля (наприклад, текст, ціле число тощо)" -#: netbox/extras/forms/bulk_import.py:47 netbox/extras/forms/filtersets.py:208 -#: netbox/extras/forms/filtersets.py:281 -#: netbox/extras/forms/model_forms.py:304 -#: netbox/extras/forms/model_forms.py:341 +#: netbox/extras/forms/bulk_import.py:47 netbox/extras/forms/filtersets.py:213 +#: netbox/extras/forms/filtersets.py:287 +#: netbox/extras/forms/model_forms.py:318 +#: netbox/extras/forms/model_forms.py:355 #: netbox/tenancy/forms/filtersets.py:92 msgid "Object type" msgstr "Тип об'єкта" @@ -7756,7 +8277,7 @@ msgstr "Тип об'єкта" msgid "Object type (for object or multi-object fields)" msgstr "Тип об'єкта (для об'єктів або полів з кількома об'єктами)" -#: netbox/extras/forms/bulk_import.py:53 netbox/extras/forms/filtersets.py:84 +#: netbox/extras/forms/bulk_import.py:53 netbox/extras/forms/filtersets.py:85 msgid "Choice set" msgstr "Набір для вибору" @@ -7827,7 +8348,7 @@ msgid "The classification of entry" msgstr "Класифікація вступу" #: netbox/extras/forms/bulk_import.py:261 -#: netbox/extras/forms/model_forms.py:320 netbox/netbox/navigation/menu.py:390 +#: netbox/extras/forms/model_forms.py:334 netbox/netbox/navigation/menu.py:411 #: netbox/templates/extras/notificationgroup.html:41 #: netbox/templates/users/group.html:29 netbox/users/forms/model_forms.py:236 #: netbox/users/forms/model_forms.py:248 netbox/users/forms/model_forms.py:300 @@ -7840,7 +8361,8 @@ msgid "User names separated by commas, encased with double quotes" msgstr "Імена користувачів, розділені комами, укладені подвійними лапками" #: netbox/extras/forms/bulk_import.py:268 -#: netbox/extras/forms/model_forms.py:315 netbox/netbox/navigation/menu.py:410 +#: netbox/extras/forms/model_forms.py:329 netbox/netbox/navigation/menu.py:294 +#: netbox/netbox/navigation/menu.py:431 #: netbox/templates/extras/notificationgroup.html:31 #: netbox/users/forms/model_forms.py:181 netbox/users/forms/model_forms.py:193 #: netbox/users/forms/model_forms.py:305 netbox/users/tables.py:35 @@ -7852,104 +8374,104 @@ msgstr "Групи" msgid "Group names separated by commas, encased with double quotes" msgstr "Імена груп, розділені комами, укладені подвійними лапками" -#: netbox/extras/forms/filtersets.py:52 netbox/extras/forms/model_forms.py:56 +#: netbox/extras/forms/filtersets.py:53 netbox/extras/forms/model_forms.py:56 msgid "Related object type" msgstr "Пов'язаний тип об'єкта" -#: netbox/extras/forms/filtersets.py:57 +#: netbox/extras/forms/filtersets.py:58 msgid "Field type" msgstr "Тип поля" -#: netbox/extras/forms/filtersets.py:120 +#: netbox/extras/forms/filtersets.py:122 #: netbox/extras/forms/model_forms.py:157 netbox/extras/tables/tables.py:91 #: netbox/templates/generic/bulk_import.html:154 msgid "Choices" msgstr "Вибір" -#: netbox/extras/forms/filtersets.py:164 netbox/extras/forms/filtersets.py:319 -#: netbox/extras/forms/filtersets.py:408 -#: netbox/extras/forms/model_forms.py:572 netbox/templates/core/job.html:96 +#: netbox/extras/forms/filtersets.py:168 netbox/extras/forms/filtersets.py:326 +#: netbox/extras/forms/filtersets.py:416 +#: netbox/extras/forms/model_forms.py:586 netbox/templates/core/job.html:96 #: netbox/templates/extras/eventrule.html:84 msgid "Data" msgstr "Дані" -#: netbox/extras/forms/filtersets.py:175 netbox/extras/forms/filtersets.py:333 -#: netbox/extras/forms/filtersets.py:418 netbox/netbox/choices.py:130 +#: netbox/extras/forms/filtersets.py:179 netbox/extras/forms/filtersets.py:340 +#: netbox/extras/forms/filtersets.py:426 netbox/netbox/choices.py:132 #: netbox/utilities/forms/bulk_import.py:26 msgid "Data file" msgstr "Файл даних" -#: netbox/extras/forms/filtersets.py:183 +#: netbox/extras/forms/filtersets.py:187 msgid "Content types" msgstr "Типи контенту" -#: netbox/extras/forms/filtersets.py:255 netbox/extras/models/models.py:179 +#: netbox/extras/forms/filtersets.py:261 netbox/extras/models/models.py:179 msgid "HTTP content type" msgstr "Тип вмісту HTTP" -#: netbox/extras/forms/filtersets.py:286 +#: netbox/extras/forms/filtersets.py:292 msgid "Event type" msgstr "Тип події" -#: netbox/extras/forms/filtersets.py:291 +#: netbox/extras/forms/filtersets.py:297 msgid "Action type" msgstr "Тип дії" -#: netbox/extras/forms/filtersets.py:307 +#: netbox/extras/forms/filtersets.py:313 msgid "Tagged object type" msgstr "Тип об'єкта з позначкою" -#: netbox/extras/forms/filtersets.py:312 +#: netbox/extras/forms/filtersets.py:318 msgid "Allowed object type" msgstr "Дозволений тип об'єкта" -#: netbox/extras/forms/filtersets.py:341 -#: netbox/extras/forms/model_forms.py:507 netbox/netbox/navigation/menu.py:18 +#: netbox/extras/forms/filtersets.py:348 +#: netbox/extras/forms/model_forms.py:521 netbox/netbox/navigation/menu.py:18 msgid "Regions" msgstr "Регіони" -#: netbox/extras/forms/filtersets.py:346 -#: netbox/extras/forms/model_forms.py:512 +#: netbox/extras/forms/filtersets.py:353 +#: netbox/extras/forms/model_forms.py:526 msgid "Site groups" msgstr "Групи тех. майданчиків" -#: netbox/extras/forms/filtersets.py:356 -#: netbox/extras/forms/model_forms.py:522 netbox/netbox/navigation/menu.py:20 +#: netbox/extras/forms/filtersets.py:363 +#: netbox/extras/forms/model_forms.py:536 netbox/netbox/navigation/menu.py:20 #: netbox/templates/dcim/site.html:127 msgid "Locations" msgstr "Локації" -#: netbox/extras/forms/filtersets.py:361 -#: netbox/extras/forms/model_forms.py:527 +#: netbox/extras/forms/filtersets.py:368 +#: netbox/extras/forms/model_forms.py:541 msgid "Device types" msgstr "Типи пристроїв" -#: netbox/extras/forms/filtersets.py:366 -#: netbox/extras/forms/model_forms.py:532 +#: netbox/extras/forms/filtersets.py:373 +#: netbox/extras/forms/model_forms.py:546 msgid "Roles" msgstr "Ролі" -#: netbox/extras/forms/filtersets.py:376 -#: netbox/extras/forms/model_forms.py:542 +#: netbox/extras/forms/filtersets.py:383 +#: netbox/extras/forms/model_forms.py:556 msgid "Cluster types" msgstr "Типи кластерів" -#: netbox/extras/forms/filtersets.py:381 -#: netbox/extras/forms/model_forms.py:547 +#: netbox/extras/forms/filtersets.py:388 +#: netbox/extras/forms/model_forms.py:561 msgid "Cluster groups" msgstr "Кластерні групи" -#: netbox/extras/forms/filtersets.py:386 -#: netbox/extras/forms/model_forms.py:552 netbox/netbox/navigation/menu.py:255 -#: netbox/netbox/navigation/menu.py:257 +#: netbox/extras/forms/filtersets.py:393 +#: netbox/extras/forms/model_forms.py:566 netbox/netbox/navigation/menu.py:263 +#: netbox/netbox/navigation/menu.py:265 #: netbox/templates/virtualization/clustertype.html:30 #: netbox/virtualization/tables/clusters.py:23 #: netbox/virtualization/tables/clusters.py:45 msgid "Clusters" msgstr "Кластери" -#: netbox/extras/forms/filtersets.py:391 -#: netbox/extras/forms/model_forms.py:557 +#: netbox/extras/forms/filtersets.py:398 +#: netbox/extras/forms/model_forms.py:571 msgid "Tenant groups" msgstr "Групи орендарів" @@ -7999,7 +8521,7 @@ msgstr "" msgid "Related Object" msgstr "Пов'язаний об'єкт" -#: netbox/extras/forms/model_forms.py:169 +#: netbox/extras/forms/model_forms.py:170 msgid "" "Enter one choice per line. An optional label may be specified for each " "choice by appending it with a colon. Example:" @@ -8007,16 +8529,16 @@ msgstr "" "Введіть один вибір на рядок. Додаткову мітку можна вказати для кожного " "вибору, додавши її двокрапкою. Приклад:" -#: netbox/extras/forms/model_forms.py:212 +#: netbox/extras/forms/model_forms.py:226 #: netbox/templates/extras/customlink.html:10 msgid "Custom Link" msgstr "Користувацьке посилання" -#: netbox/extras/forms/model_forms.py:214 +#: netbox/extras/forms/model_forms.py:228 msgid "Templates" msgstr "Шаблони" -#: netbox/extras/forms/model_forms.py:226 +#: netbox/extras/forms/model_forms.py:240 #, python-brace-format msgid "" "Jinja2 template code for the link text. Reference the object as {example}. " @@ -8025,7 +8547,7 @@ msgstr "" "Код шаблону Jinja2 для тексту посилання. Посилання на об'єкт як {example}. " "Посилання, які відображаються як порожній текст, не відображатимуться." -#: netbox/extras/forms/model_forms.py:230 +#: netbox/extras/forms/model_forms.py:244 #, python-brace-format msgid "" "Jinja2 template code for the link URL. Reference the object as {example}." @@ -8033,58 +8555,58 @@ msgstr "" "Код шаблону Jinja2 для URL-адреси посилання. Посилання на об'єкт як " "{example}." -#: netbox/extras/forms/model_forms.py:241 -#: netbox/extras/forms/model_forms.py:624 +#: netbox/extras/forms/model_forms.py:255 +#: netbox/extras/forms/model_forms.py:638 msgid "Template code" msgstr "Код шаблону" -#: netbox/extras/forms/model_forms.py:247 +#: netbox/extras/forms/model_forms.py:261 #: netbox/templates/extras/exporttemplate.html:12 msgid "Export Template" msgstr "Експортувати шаблон" -#: netbox/extras/forms/model_forms.py:249 +#: netbox/extras/forms/model_forms.py:263 msgid "Rendering" msgstr "Відтворювати" -#: netbox/extras/forms/model_forms.py:263 -#: netbox/extras/forms/model_forms.py:649 +#: netbox/extras/forms/model_forms.py:277 +#: netbox/extras/forms/model_forms.py:663 msgid "Template content is populated from the remote source selected below." msgstr "Вміст шаблону заповнюється з віддаленого джерела, вибраного нижче." -#: netbox/extras/forms/model_forms.py:270 -#: netbox/extras/forms/model_forms.py:656 +#: netbox/extras/forms/model_forms.py:284 +#: netbox/extras/forms/model_forms.py:670 msgid "Must specify either local content or a data file" msgstr "Повинен вказати локальний вміст або файл даних" -#: netbox/extras/forms/model_forms.py:284 netbox/netbox/forms/mixins.py:70 +#: netbox/extras/forms/model_forms.py:298 netbox/netbox/forms/mixins.py:70 #: netbox/templates/extras/savedfilter.html:10 msgid "Saved Filter" msgstr "Збережений фільтр" -#: netbox/extras/forms/model_forms.py:334 +#: netbox/extras/forms/model_forms.py:348 msgid "A notification group specify at least one user or group." msgstr "Група сповіщень вказує принаймні одного користувача або групи." -#: netbox/extras/forms/model_forms.py:356 +#: netbox/extras/forms/model_forms.py:370 #: netbox/templates/extras/webhook.html:23 msgid "HTTP Request" msgstr "Запит HTTP" -#: netbox/extras/forms/model_forms.py:358 +#: netbox/extras/forms/model_forms.py:372 #: netbox/templates/extras/webhook.html:44 msgid "SSL" msgstr "SSL" -#: netbox/extras/forms/model_forms.py:380 +#: netbox/extras/forms/model_forms.py:394 msgid "Action choice" msgstr "Вибір дії" -#: netbox/extras/forms/model_forms.py:385 +#: netbox/extras/forms/model_forms.py:399 msgid "Enter conditions in JSON format." msgstr "Введіть умови в JSON форматі." -#: netbox/extras/forms/model_forms.py:389 +#: netbox/extras/forms/model_forms.py:403 msgid "" "Enter parameters to pass to the action in JSON format." @@ -8092,33 +8614,33 @@ msgstr "" "Введіть параметри для переходу до дії у JSON форматі." -#: netbox/extras/forms/model_forms.py:394 +#: netbox/extras/forms/model_forms.py:408 #: netbox/templates/extras/eventrule.html:10 msgid "Event Rule" msgstr "Правило події" -#: netbox/extras/forms/model_forms.py:395 +#: netbox/extras/forms/model_forms.py:409 msgid "Triggers" msgstr "Тригери" -#: netbox/extras/forms/model_forms.py:442 +#: netbox/extras/forms/model_forms.py:456 msgid "Notification group" msgstr "Група повідомлень" -#: netbox/extras/forms/model_forms.py:562 netbox/netbox/navigation/menu.py:26 +#: netbox/extras/forms/model_forms.py:576 netbox/netbox/navigation/menu.py:26 #: netbox/tenancy/tables/tenants.py:22 msgid "Tenants" msgstr "Орендарі" -#: netbox/extras/forms/model_forms.py:606 +#: netbox/extras/forms/model_forms.py:620 msgid "Data is populated from the remote source selected below." msgstr "Дані заповнюються з віддаленого джерела, вибраного нижче." -#: netbox/extras/forms/model_forms.py:612 +#: netbox/extras/forms/model_forms.py:626 msgid "Must specify either local data or a data file" msgstr "Необхідно вказати локальні дані або файл даних" -#: netbox/extras/forms/model_forms.py:631 +#: netbox/extras/forms/model_forms.py:645 #: netbox/templates/core/datafile.html:55 msgid "Content" msgstr "Зміст" @@ -8181,10 +8703,16 @@ msgstr "Виняток стався: " msgid "Database changes have been reverted due to error." msgstr "Зміни бази даних були скасовані через помилку." -#: netbox/extras/management/commands/reindex.py:66 +#: netbox/extras/management/commands/reindex.py:67 msgid "No indexers found!" msgstr "Індексаторів не знайдено!" +#: netbox/extras/models/configs.py:41 netbox/extras/models/models.py:313 +#: netbox/extras/models/models.py:522 netbox/extras/models/search.py:48 +#: netbox/ipam/models/ip.py:188 netbox/netbox/models/mixins.py:15 +msgid "weight" +msgstr "вага" + #: netbox/extras/models/configs.py:130 msgid "config context" msgstr "контекст конфігурації" @@ -8545,27 +9073,27 @@ msgstr "Знайдено недійсний ідентифікатор об'єк msgid "Required field cannot be empty." msgstr "Обов'язкове поле не може бути порожнім." -#: netbox/extras/models/customfields.py:763 +#: netbox/extras/models/customfields.py:764 msgid "Base set of predefined choices (optional)" msgstr "Базовий набір попередньо визначених варіантів (необов'язково)" -#: netbox/extras/models/customfields.py:775 +#: netbox/extras/models/customfields.py:776 msgid "Choices are automatically ordered alphabetically" msgstr "Вибір автоматично впорядковується за алфавітом" -#: netbox/extras/models/customfields.py:782 +#: netbox/extras/models/customfields.py:783 msgid "custom field choice set" msgstr "набір вибору користувацького поля" -#: netbox/extras/models/customfields.py:783 +#: netbox/extras/models/customfields.py:784 msgid "custom field choice sets" msgstr "набори вибору користувацького поля" -#: netbox/extras/models/customfields.py:825 +#: netbox/extras/models/customfields.py:826 msgid "Must define base or extra choices." msgstr "Повинен визначити базовий або додатковий вибори." -#: netbox/extras/models/customfields.py:849 +#: netbox/extras/models/customfields.py:850 #, python-brace-format msgid "" "Cannot remove choice {choice} as there are {model} objects which reference " @@ -8863,20 +9391,20 @@ msgstr "запис журналу" msgid "journal entries" msgstr "записи журналу" -#: netbox/extras/models/models.py:718 +#: netbox/extras/models/models.py:721 #, python-brace-format msgid "Journaling is not supported for this object type ({type})." msgstr "Журналізація не підтримується для цього типу об'єктів ({type})." -#: netbox/extras/models/models.py:760 +#: netbox/extras/models/models.py:763 msgid "bookmark" msgstr "закладка" -#: netbox/extras/models/models.py:761 +#: netbox/extras/models/models.py:764 msgid "bookmarks" msgstr "закладки" -#: netbox/extras/models/models.py:774 +#: netbox/extras/models/models.py:777 #, python-brace-format msgid "Bookmarks cannot be assigned to this object type ({type})." msgstr "Закладки не можуть бути призначені для цього типу об'єкта ({type})." @@ -8968,19 +9496,19 @@ msgstr "кешоване значення" msgid "cached values" msgstr "кешовані значення" -#: netbox/extras/models/staging.py:44 +#: netbox/extras/models/staging.py:45 msgid "branch" msgstr "гілка" -#: netbox/extras/models/staging.py:45 +#: netbox/extras/models/staging.py:46 msgid "branches" msgstr "гілки" -#: netbox/extras/models/staging.py:97 +#: netbox/extras/models/staging.py:105 msgid "staged change" msgstr "поетапна зміна" -#: netbox/extras/models/staging.py:98 +#: netbox/extras/models/staging.py:106 msgid "staged changes" msgstr "поетапні зміни" @@ -9004,11 +9532,11 @@ msgstr "позначений предмет" msgid "tagged items" msgstr "позначені предмети" -#: netbox/extras/scripts.py:429 +#: netbox/extras/scripts.py:432 msgid "Script Data" msgstr "Дані сценарію" -#: netbox/extras/scripts.py:433 +#: netbox/extras/scripts.py:436 msgid "Script Execution Parameters" msgstr "Параметри виконання сценарію" @@ -9085,12 +9613,11 @@ msgstr "Як вкладення" #: netbox/extras/tables/tables.py:195 netbox/extras/tables/tables.py:487 #: netbox/extras/tables/tables.py:522 netbox/templates/core/datafile.html:24 -#: netbox/templates/dcim/device/render_config.html:22 #: netbox/templates/extras/configcontext.html:39 #: netbox/templates/extras/configtemplate.html:31 #: netbox/templates/extras/exporttemplate.html:45 +#: netbox/templates/extras/object_render_config.html:23 #: netbox/templates/generic/bulk_import.html:35 -#: netbox/templates/virtualization/virtualmachine/render_config.html:22 msgid "Data File" msgstr "Файл даних" @@ -9183,27 +9710,32 @@ msgstr "Невірний атрибут \"{name}\" за запитом" msgid "Invalid attribute \"{name}\" for {model}" msgstr "Невірний атрибут \"{name}\" для {model}" -#: netbox/extras/views.py:960 +#: netbox/extras/views.py:933 +#, python-brace-format +msgid "An error occurred while rendering the template: {error}" +msgstr "Під час візуалізації шаблону сталася помилка: {error}" + +#: netbox/extras/views.py:1085 msgid "Your dashboard has been reset." msgstr "Ваша інформаційна панель була скинута." -#: netbox/extras/views.py:1006 +#: netbox/extras/views.py:1131 msgid "Added widget: " msgstr "Доданий віджет: " -#: netbox/extras/views.py:1047 +#: netbox/extras/views.py:1172 msgid "Updated widget: " msgstr "Оновлений віджет: " -#: netbox/extras/views.py:1083 +#: netbox/extras/views.py:1208 msgid "Deleted widget: " msgstr "Видалений віджет: " -#: netbox/extras/views.py:1085 +#: netbox/extras/views.py:1210 msgid "Error deleting widget: " msgstr "Помилка при видаленні віджета: " -#: netbox/extras/views.py:1175 +#: netbox/extras/views.py:1308 msgid "Unable to run script: RQ worker process not running." msgstr "Неможливо запустити скрипт: робочий процес RQ не запущений." @@ -9226,7 +9758,7 @@ msgstr "" msgid "Invalid IP prefix format: {data}" msgstr "Невірний формат префікса IP: {data}" -#: netbox/ipam/api/views.py:358 +#: netbox/ipam/api/views.py:370 msgid "" "Insufficient space is available to accommodate the requested prefix size(s)" msgstr "Недостатньо місця для розміщення запитуваного розміру префікса" @@ -9267,182 +9799,174 @@ msgstr "Cisco" msgid "Plaintext" msgstr "Простий текст" +#: netbox/ipam/choices.py:166 netbox/ipam/forms/model_forms.py:800 +#: netbox/ipam/forms/model_forms.py:828 netbox/templates/ipam/service.html:21 +msgid "Service" +msgstr "Сервіс" + +#: netbox/ipam/choices.py:167 +msgid "Customer" +msgstr "Клієнт" + #: netbox/ipam/fields.py:36 #, python-brace-format msgid "Invalid IP address format: {address}" msgstr "Невірний формат IP-адреси: {address}" -#: netbox/ipam/filtersets.py:48 netbox/vpn/filtersets.py:304 +#: netbox/ipam/filtersets.py:51 netbox/vpn/filtersets.py:304 msgid "Import target" msgstr "Імпортувати ціль" -#: netbox/ipam/filtersets.py:54 netbox/vpn/filtersets.py:310 +#: netbox/ipam/filtersets.py:57 netbox/vpn/filtersets.py:310 msgid "Import target (name)" msgstr "Імпорт цілі (назва)" -#: netbox/ipam/filtersets.py:59 netbox/vpn/filtersets.py:315 +#: netbox/ipam/filtersets.py:62 netbox/vpn/filtersets.py:315 msgid "Export target" msgstr "Ціль експорту" -#: netbox/ipam/filtersets.py:65 netbox/vpn/filtersets.py:321 +#: netbox/ipam/filtersets.py:68 netbox/vpn/filtersets.py:321 msgid "Export target (name)" msgstr "Ціль експорту (назва)" -#: netbox/ipam/filtersets.py:86 +#: netbox/ipam/filtersets.py:89 msgid "Importing VRF" msgstr "Імпортування VRF" -#: netbox/ipam/filtersets.py:92 +#: netbox/ipam/filtersets.py:95 msgid "Import VRF (RD)" msgstr "Імпорт VRF (RD)" -#: netbox/ipam/filtersets.py:97 +#: netbox/ipam/filtersets.py:100 msgid "Exporting VRF" msgstr "Експорт VRF" -#: netbox/ipam/filtersets.py:103 +#: netbox/ipam/filtersets.py:106 msgid "Export VRF (RD)" msgstr "Експорт VRF (RD)" -#: netbox/ipam/filtersets.py:108 +#: netbox/ipam/filtersets.py:111 msgid "Importing L2VPN" msgstr "Імпорт L2VPN" -#: netbox/ipam/filtersets.py:114 +#: netbox/ipam/filtersets.py:117 msgid "Importing L2VPN (identifier)" msgstr "Імпорт L2VPN (ідентифікатор)" -#: netbox/ipam/filtersets.py:119 +#: netbox/ipam/filtersets.py:122 msgid "Exporting L2VPN" msgstr "Експорт L2VPN" -#: netbox/ipam/filtersets.py:125 +#: netbox/ipam/filtersets.py:128 msgid "Exporting L2VPN (identifier)" msgstr "Експорт L2VPN (ідентифікатор)" -#: netbox/ipam/filtersets.py:155 netbox/ipam/filtersets.py:283 -#: netbox/ipam/forms/model_forms.py:229 netbox/ipam/tables/ip.py:212 +#: netbox/ipam/filtersets.py:158 netbox/ipam/filtersets.py:286 +#: netbox/ipam/forms/model_forms.py:229 netbox/ipam/tables/ip.py:158 #: netbox/templates/ipam/prefix.html:12 msgid "Prefix" msgstr "Префікс" -#: netbox/ipam/filtersets.py:159 netbox/ipam/filtersets.py:198 -#: netbox/ipam/filtersets.py:223 +#: netbox/ipam/filtersets.py:162 netbox/ipam/filtersets.py:201 +#: netbox/ipam/filtersets.py:226 msgid "RIR (ID)" msgstr "RIR (ідентифікатор)" -#: netbox/ipam/filtersets.py:165 netbox/ipam/filtersets.py:204 -#: netbox/ipam/filtersets.py:229 +#: netbox/ipam/filtersets.py:168 netbox/ipam/filtersets.py:207 +#: netbox/ipam/filtersets.py:232 msgid "RIR (slug)" msgstr "RIR (скорочення)" -#: netbox/ipam/filtersets.py:287 +#: netbox/ipam/filtersets.py:290 msgid "Within prefix" msgstr "У межах префікса" -#: netbox/ipam/filtersets.py:291 +#: netbox/ipam/filtersets.py:294 msgid "Within and including prefix" msgstr "У межах та включаючи префікс" -#: netbox/ipam/filtersets.py:295 +#: netbox/ipam/filtersets.py:298 msgid "Prefixes which contain this prefix or IP" msgstr "Мережеві префікси, які містять цей префікс або IP" -#: netbox/ipam/filtersets.py:306 netbox/ipam/filtersets.py:574 -#: netbox/ipam/forms/bulk_edit.py:343 netbox/ipam/forms/filtersets.py:196 -#: netbox/ipam/forms/filtersets.py:331 +#: netbox/ipam/filtersets.py:309 netbox/ipam/filtersets.py:541 +#: netbox/ipam/forms/bulk_edit.py:327 netbox/ipam/forms/filtersets.py:198 +#: netbox/ipam/forms/filtersets.py:334 msgid "Mask length" msgstr "Довжина маски" -#: netbox/ipam/filtersets.py:375 netbox/vpn/filtersets.py:427 +#: netbox/ipam/filtersets.py:342 netbox/vpn/filtersets.py:427 msgid "VLAN (ID)" msgstr "VLAN (ідентифікатор)" -#: netbox/ipam/filtersets.py:379 netbox/vpn/filtersets.py:422 +#: netbox/ipam/filtersets.py:346 netbox/vpn/filtersets.py:422 msgid "VLAN number (1-4094)" msgstr "Номер VLAN (1-4094)" -#: netbox/ipam/filtersets.py:473 netbox/ipam/filtersets.py:477 -#: netbox/ipam/filtersets.py:569 netbox/ipam/forms/model_forms.py:496 +#: netbox/ipam/filtersets.py:440 netbox/ipam/filtersets.py:444 +#: netbox/ipam/filtersets.py:536 netbox/ipam/forms/model_forms.py:506 #: netbox/templates/tenancy/contact.html:53 #: netbox/tenancy/forms/bulk_edit.py:113 msgid "Address" msgstr "Адреса" -#: netbox/ipam/filtersets.py:481 +#: netbox/ipam/filtersets.py:448 msgid "Ranges which contain this prefix or IP" msgstr "Діапазони, які містять цей префікс або IP" -#: netbox/ipam/filtersets.py:509 netbox/ipam/filtersets.py:565 +#: netbox/ipam/filtersets.py:476 netbox/ipam/filtersets.py:532 msgid "Parent prefix" msgstr "Батьківський префікс" -#: netbox/ipam/filtersets.py:618 netbox/ipam/filtersets.py:858 -#: netbox/ipam/filtersets.py:1133 netbox/vpn/filtersets.py:385 -msgid "Virtual machine (name)" -msgstr "Віртуальна машина (назва)" - -#: netbox/ipam/filtersets.py:623 netbox/ipam/filtersets.py:863 -#: netbox/ipam/filtersets.py:1127 netbox/virtualization/filtersets.py:282 -#: netbox/virtualization/filtersets.py:321 netbox/vpn/filtersets.py:390 -msgid "Virtual machine (ID)" -msgstr "Віртуальна машина (ідентифікатор)" - -#: netbox/ipam/filtersets.py:629 netbox/vpn/filtersets.py:97 -#: netbox/vpn/filtersets.py:396 -msgid "Interface (name)" -msgstr "Інтерфейс (назва)" - -#: netbox/ipam/filtersets.py:640 netbox/vpn/filtersets.py:108 -#: netbox/vpn/filtersets.py:407 -msgid "VM interface (name)" -msgstr "Інтерфейс віртуальної машини (назва)" - -#: netbox/ipam/filtersets.py:645 netbox/vpn/filtersets.py:113 -msgid "VM interface (ID)" -msgstr "Інтерфейс віртуальної машини (ідентифікатор)" - -#: netbox/ipam/filtersets.py:650 +#: netbox/ipam/filtersets.py:617 msgid "FHRP group (ID)" msgstr "Група FHRP/VRRP (ідентифікатор)" -#: netbox/ipam/filtersets.py:654 +#: netbox/ipam/filtersets.py:621 msgid "Is assigned to an interface" msgstr "Призначений до інтерфейсу" -#: netbox/ipam/filtersets.py:658 +#: netbox/ipam/filtersets.py:625 msgid "Is assigned" msgstr "призначається" -#: netbox/ipam/filtersets.py:670 +#: netbox/ipam/filtersets.py:637 msgid "Service (ID)" msgstr "Сервіс (ідентифікатор)" -#: netbox/ipam/filtersets.py:675 +#: netbox/ipam/filtersets.py:642 msgid "NAT inside IP address (ID)" msgstr "NAT внутрішня IP-адреса (ідентифікатор)" -#: netbox/ipam/filtersets.py:1043 netbox/ipam/forms/bulk_import.py:322 -msgid "Assigned interface" -msgstr "Призначений інтерфейс" +#: netbox/ipam/filtersets.py:1001 +msgid "Q-in-Q SVLAN (ID)" +msgstr "Q-in-Q SVLAN (Ідентифікатор)" -#: netbox/ipam/filtersets.py:1048 +#: netbox/ipam/filtersets.py:1005 +msgid "Q-in-Q SVLAN number (1-4094)" +msgstr "Q-in-Q номер SVLAN (1-4094)" + +#: netbox/ipam/filtersets.py:1026 msgid "Assigned VM interface" msgstr "Призначений інтерфейс віртуальної машини" -#: netbox/ipam/filtersets.py:1138 +#: netbox/ipam/filtersets.py:1097 +msgid "VLAN Translation Policy (name)" +msgstr "Політика перекладу VLAN (назва)" + +#: netbox/ipam/filtersets.py:1163 msgid "IP address (ID)" msgstr "IP-адреса (ідентифікатор)" -#: netbox/ipam/filtersets.py:1144 netbox/ipam/models/ip.py:788 +#: netbox/ipam/filtersets.py:1169 netbox/ipam/models/ip.py:788 msgid "IP address" msgstr "IP-адреса" -#: netbox/ipam/filtersets.py:1169 +#: netbox/ipam/filtersets.py:1194 msgid "Primary IPv4 (ID)" msgstr "Первинна адреса IPv4 (ідентифікатор)" -#: netbox/ipam/filtersets.py:1174 +#: netbox/ipam/filtersets.py:1199 msgid "Primary IPv6 (ID)" msgstr "Первинна адреса IPv6 (ідентифікатор)" @@ -9475,438 +9999,411 @@ msgstr "Потрібна маска CIDR (наприклад, /24)." msgid "Address pattern" msgstr "Адресний шаблон" -#: netbox/ipam/forms/bulk_edit.py:50 +#: netbox/ipam/forms/bulk_edit.py:53 msgid "Enforce unique space" msgstr "Забезпечте унікальність простору" -#: netbox/ipam/forms/bulk_edit.py:88 +#: netbox/ipam/forms/bulk_edit.py:91 msgid "Is private" msgstr "Є приватним" -#: netbox/ipam/forms/bulk_edit.py:109 netbox/ipam/forms/bulk_edit.py:138 -#: netbox/ipam/forms/bulk_edit.py:163 netbox/ipam/forms/bulk_import.py:89 -#: netbox/ipam/forms/bulk_import.py:109 netbox/ipam/forms/bulk_import.py:129 -#: netbox/ipam/forms/filtersets.py:110 netbox/ipam/forms/filtersets.py:125 -#: netbox/ipam/forms/filtersets.py:148 netbox/ipam/forms/model_forms.py:96 -#: netbox/ipam/forms/model_forms.py:109 netbox/ipam/forms/model_forms.py:131 -#: netbox/ipam/forms/model_forms.py:149 netbox/ipam/models/asns.py:31 -#: netbox/ipam/models/asns.py:103 netbox/ipam/models/ip.py:71 -#: netbox/ipam/models/ip.py:90 netbox/ipam/tables/asn.py:20 +#: netbox/ipam/forms/bulk_edit.py:112 netbox/ipam/forms/bulk_edit.py:141 +#: netbox/ipam/forms/bulk_edit.py:166 netbox/ipam/forms/bulk_import.py:92 +#: netbox/ipam/forms/bulk_import.py:112 netbox/ipam/forms/bulk_import.py:132 +#: netbox/ipam/forms/filtersets.py:112 netbox/ipam/forms/filtersets.py:127 +#: netbox/ipam/forms/filtersets.py:150 netbox/ipam/forms/model_forms.py:99 +#: netbox/ipam/forms/model_forms.py:112 netbox/ipam/forms/model_forms.py:135 +#: netbox/ipam/forms/model_forms.py:154 netbox/ipam/models/asns.py:31 +#: netbox/ipam/models/asns.py:100 netbox/ipam/models/ip.py:71 +#: netbox/ipam/models/ip.py:87 netbox/ipam/tables/asn.py:20 #: netbox/ipam/tables/asn.py:45 netbox/templates/ipam/aggregate.html:18 #: netbox/templates/ipam/asn.html:27 netbox/templates/ipam/asnrange.html:19 #: netbox/templates/ipam/rir.html:19 msgid "RIR" msgstr "RIR" -#: netbox/ipam/forms/bulk_edit.py:171 +#: netbox/ipam/forms/bulk_edit.py:174 msgid "Date added" msgstr "Дата додавання" -#: netbox/ipam/forms/bulk_edit.py:229 netbox/ipam/forms/model_forms.py:619 -#: netbox/ipam/forms/model_forms.py:666 netbox/ipam/tables/ip.py:251 -#: netbox/templates/ipam/vlan_edit.html:37 +#: netbox/ipam/forms/bulk_edit.py:213 netbox/ipam/forms/model_forms.py:629 +#: netbox/ipam/forms/model_forms.py:676 netbox/ipam/tables/ip.py:201 +#: netbox/templates/ipam/vlan_edit.html:45 #: netbox/templates/ipam/vlangroup.html:27 msgid "VLAN Group" msgstr "Група VLAN" -#: netbox/ipam/forms/bulk_edit.py:234 netbox/ipam/forms/bulk_import.py:185 -#: netbox/ipam/forms/filtersets.py:256 netbox/ipam/forms/model_forms.py:218 -#: netbox/ipam/models/vlans.py:250 netbox/ipam/tables/ip.py:255 -#: netbox/templates/ipam/prefix.html:60 netbox/templates/ipam/vlan.html:12 +#: netbox/ipam/forms/bulk_edit.py:218 netbox/ipam/forms/bulk_import.py:181 +#: netbox/ipam/forms/filtersets.py:259 netbox/ipam/forms/model_forms.py:217 +#: netbox/ipam/models/vlans.py:272 netbox/ipam/tables/ip.py:206 +#: netbox/templates/ipam/prefix.html:56 netbox/templates/ipam/vlan.html:12 #: netbox/templates/ipam/vlan/base.html:6 #: netbox/templates/ipam/vlan_edit.html:10 -#: netbox/templates/wireless/wirelesslan.html:30 +#: netbox/templates/wireless/wirelesslan.html:38 #: netbox/vpn/forms/bulk_import.py:304 netbox/vpn/forms/filtersets.py:284 -#: netbox/vpn/forms/model_forms.py:433 netbox/vpn/forms/model_forms.py:452 -#: netbox/wireless/forms/bulk_edit.py:55 -#: netbox/wireless/forms/bulk_import.py:48 -#: netbox/wireless/forms/model_forms.py:48 netbox/wireless/models.py:102 +#: netbox/vpn/forms/model_forms.py:436 netbox/vpn/forms/model_forms.py:455 +#: netbox/wireless/forms/bulk_edit.py:57 +#: netbox/wireless/forms/bulk_import.py:50 +#: netbox/wireless/forms/model_forms.py:50 netbox/wireless/models.py:102 msgid "VLAN" msgstr "VLAN" -#: netbox/ipam/forms/bulk_edit.py:245 +#: netbox/ipam/forms/bulk_edit.py:229 msgid "Prefix length" msgstr "Довжина префікса" -#: netbox/ipam/forms/bulk_edit.py:268 netbox/ipam/forms/filtersets.py:241 -#: netbox/templates/ipam/prefix.html:85 +#: netbox/ipam/forms/bulk_edit.py:252 netbox/ipam/forms/filtersets.py:244 +#: netbox/templates/ipam/prefix.html:81 msgid "Is a pool" msgstr "Чи є пулом" -#: netbox/ipam/forms/bulk_edit.py:273 netbox/ipam/forms/bulk_edit.py:318 -#: netbox/ipam/forms/filtersets.py:248 netbox/ipam/forms/filtersets.py:293 -#: netbox/ipam/models/ip.py:272 netbox/ipam/models/ip.py:539 +#: netbox/ipam/forms/bulk_edit.py:257 netbox/ipam/forms/bulk_edit.py:302 +#: netbox/ipam/forms/filtersets.py:251 netbox/ipam/forms/filtersets.py:296 +#: netbox/ipam/models/ip.py:256 netbox/ipam/models/ip.py:525 msgid "Treat as fully utilized" msgstr "Вважати повністю використаним" -#: netbox/ipam/forms/bulk_edit.py:287 netbox/ipam/forms/filtersets.py:171 +#: netbox/ipam/forms/bulk_edit.py:271 netbox/ipam/forms/filtersets.py:173 +#: netbox/ipam/forms/model_forms.py:232 msgid "VLAN Assignment" msgstr "Призначення VLAN" -#: netbox/ipam/forms/bulk_edit.py:366 netbox/ipam/models/ip.py:772 +#: netbox/ipam/forms/bulk_edit.py:350 netbox/ipam/models/ip.py:772 msgid "DNS name" msgstr "Ім'я DNS" -#: netbox/ipam/forms/bulk_edit.py:387 netbox/ipam/forms/bulk_edit.py:534 -#: netbox/ipam/forms/bulk_import.py:418 netbox/ipam/forms/bulk_import.py:493 -#: netbox/ipam/forms/bulk_import.py:519 netbox/ipam/forms/filtersets.py:390 -#: netbox/ipam/forms/filtersets.py:530 netbox/templates/ipam/fhrpgroup.html:22 +#: netbox/ipam/forms/bulk_edit.py:371 netbox/ipam/forms/bulk_edit.py:562 +#: netbox/ipam/forms/bulk_import.py:417 netbox/ipam/forms/bulk_import.py:528 +#: netbox/ipam/forms/bulk_import.py:554 netbox/ipam/forms/filtersets.py:393 +#: netbox/ipam/forms/filtersets.py:582 netbox/templates/ipam/fhrpgroup.html:22 #: netbox/templates/ipam/inc/panels/fhrp_groups.html:24 #: netbox/templates/ipam/service.html:32 #: netbox/templates/ipam/servicetemplate.html:19 msgid "Protocol" msgstr "Протокол" -#: netbox/ipam/forms/bulk_edit.py:394 netbox/ipam/forms/filtersets.py:397 +#: netbox/ipam/forms/bulk_edit.py:378 netbox/ipam/forms/filtersets.py:400 #: netbox/ipam/tables/fhrp.py:22 netbox/templates/ipam/fhrpgroup.html:26 msgid "Group ID" msgstr "Ідентифікатор групи" -#: netbox/ipam/forms/bulk_edit.py:399 netbox/ipam/forms/filtersets.py:402 -#: netbox/wireless/forms/bulk_edit.py:68 -#: netbox/wireless/forms/bulk_edit.py:115 -#: netbox/wireless/forms/bulk_import.py:62 -#: netbox/wireless/forms/bulk_import.py:65 -#: netbox/wireless/forms/bulk_import.py:104 -#: netbox/wireless/forms/bulk_import.py:107 -#: netbox/wireless/forms/filtersets.py:54 -#: netbox/wireless/forms/filtersets.py:88 +#: netbox/ipam/forms/bulk_edit.py:383 netbox/ipam/forms/filtersets.py:405 +#: netbox/wireless/forms/bulk_edit.py:70 +#: netbox/wireless/forms/bulk_edit.py:118 +#: netbox/wireless/forms/bulk_import.py:64 +#: netbox/wireless/forms/bulk_import.py:67 +#: netbox/wireless/forms/bulk_import.py:109 +#: netbox/wireless/forms/bulk_import.py:112 +#: netbox/wireless/forms/filtersets.py:57 +#: netbox/wireless/forms/filtersets.py:116 msgid "Authentication type" msgstr "Тип аутентифікації" -#: netbox/ipam/forms/bulk_edit.py:404 netbox/ipam/forms/filtersets.py:406 +#: netbox/ipam/forms/bulk_edit.py:388 netbox/ipam/forms/filtersets.py:409 msgid "Authentication key" msgstr "Ключ аутентифікації" -#: netbox/ipam/forms/bulk_edit.py:421 netbox/ipam/forms/filtersets.py:383 -#: netbox/ipam/forms/model_forms.py:507 netbox/netbox/navigation/menu.py:386 +#: netbox/ipam/forms/bulk_edit.py:405 netbox/ipam/forms/filtersets.py:386 +#: netbox/ipam/forms/model_forms.py:517 netbox/netbox/navigation/menu.py:407 #: netbox/templates/ipam/fhrpgroup.html:49 #: netbox/templates/wireless/inc/authentication_attrs.html:5 -#: netbox/wireless/forms/bulk_edit.py:91 -#: netbox/wireless/forms/bulk_edit.py:149 -#: netbox/wireless/forms/filtersets.py:36 -#: netbox/wireless/forms/filtersets.py:76 -#: netbox/wireless/forms/model_forms.py:55 -#: netbox/wireless/forms/model_forms.py:171 +#: netbox/wireless/forms/bulk_edit.py:94 +#: netbox/wireless/forms/bulk_edit.py:152 +#: netbox/wireless/forms/filtersets.py:39 +#: netbox/wireless/forms/filtersets.py:104 +#: netbox/wireless/forms/model_forms.py:58 +#: netbox/wireless/forms/model_forms.py:174 msgid "Authentication" msgstr "Аутентифікація" -#: netbox/ipam/forms/bulk_edit.py:436 netbox/ipam/forms/model_forms.py:608 -msgid "Scope type" -msgstr "Тип сфери застосування" - -#: netbox/ipam/forms/bulk_edit.py:439 netbox/ipam/forms/bulk_edit.py:453 -#: netbox/ipam/forms/model_forms.py:611 netbox/ipam/forms/model_forms.py:621 -#: netbox/ipam/tables/vlans.py:71 netbox/templates/ipam/vlangroup.html:38 -msgid "Scope" -msgstr "Сфера застосування" - -#: netbox/ipam/forms/bulk_edit.py:446 netbox/ipam/models/vlans.py:60 +#: netbox/ipam/forms/bulk_edit.py:430 netbox/ipam/models/vlans.py:62 msgid "VLAN ID ranges" msgstr "Діапазони ідентифікаторів VLAN" -#: netbox/ipam/forms/bulk_edit.py:525 +#: netbox/ipam/forms/bulk_edit.py:505 netbox/ipam/forms/bulk_import.py:485 +#: netbox/ipam/forms/filtersets.py:557 netbox/ipam/models/vlans.py:232 +#: netbox/ipam/tables/vlans.py:103 +msgid "Q-in-Q role" +msgstr "Роль Q-in-Q" + +#: netbox/ipam/forms/bulk_edit.py:522 +msgid "Q-in-Q" +msgstr "Q-в-Q" + +#: netbox/ipam/forms/bulk_edit.py:523 msgid "Site & Group" msgstr "Тех. майданчик і група" -#: netbox/ipam/forms/bulk_edit.py:539 netbox/ipam/forms/model_forms.py:692 -#: netbox/ipam/forms/model_forms.py:724 netbox/ipam/tables/services.py:19 +#: netbox/ipam/forms/bulk_edit.py:546 netbox/ipam/forms/bulk_import.py:515 +#: netbox/ipam/forms/model_forms.py:724 netbox/ipam/tables/vlans.py:256 +#: netbox/templates/ipam/vlantranslationrule.html:14 +#: netbox/vpn/forms/model_forms.py:322 netbox/vpn/forms/model_forms.py:359 +msgid "Policy" +msgstr "Політика" + +#: netbox/ipam/forms/bulk_edit.py:567 netbox/ipam/forms/model_forms.py:742 +#: netbox/ipam/forms/model_forms.py:774 netbox/ipam/tables/services.py:19 #: netbox/ipam/tables/services.py:49 netbox/templates/ipam/service.html:36 #: netbox/templates/ipam/servicetemplate.html:23 msgid "Ports" msgstr "Порти" -#: netbox/ipam/forms/bulk_import.py:48 +#: netbox/ipam/forms/bulk_import.py:51 msgid "Import route targets" msgstr "Імпортувати маршрути до цілей" -#: netbox/ipam/forms/bulk_import.py:54 +#: netbox/ipam/forms/bulk_import.py:57 msgid "Export route targets" msgstr "Експортувати маршрути до цілей" -#: netbox/ipam/forms/bulk_import.py:92 netbox/ipam/forms/bulk_import.py:112 -#: netbox/ipam/forms/bulk_import.py:132 +#: netbox/ipam/forms/bulk_import.py:95 netbox/ipam/forms/bulk_import.py:115 +#: netbox/ipam/forms/bulk_import.py:135 msgid "Assigned RIR" msgstr "Призначений RIR" -#: netbox/ipam/forms/bulk_import.py:182 +#: netbox/ipam/forms/bulk_import.py:178 msgid "VLAN's group (if any)" msgstr "Група VLAN'ів (якщо така є)" -#: netbox/ipam/forms/bulk_import.py:308 -msgid "Parent device of assigned interface (if any)" -msgstr "Батьківський пристрій призначеного інтерфейсу (якщо є)" - -#: netbox/ipam/forms/bulk_import.py:311 netbox/ipam/forms/bulk_import.py:512 -#: netbox/ipam/forms/model_forms.py:718 -#: netbox/virtualization/filtersets.py:288 -#: netbox/virtualization/filtersets.py:327 -#: netbox/virtualization/forms/bulk_edit.py:200 -#: netbox/virtualization/forms/bulk_edit.py:326 -#: netbox/virtualization/forms/bulk_import.py:146 -#: netbox/virtualization/forms/bulk_import.py:207 -#: netbox/virtualization/forms/filtersets.py:212 -#: netbox/virtualization/forms/filtersets.py:248 -#: netbox/virtualization/forms/model_forms.py:288 -#: netbox/vpn/forms/bulk_import.py:93 netbox/vpn/forms/bulk_import.py:290 -msgid "Virtual machine" -msgstr "Віртуальна машина" - -#: netbox/ipam/forms/bulk_import.py:315 -msgid "Parent VM of assigned interface (if any)" -msgstr "Батьківська віртуальна машина призначеного інтерфейсу (якщо є)" +#: netbox/ipam/forms/bulk_import.py:207 +#: netbox/virtualization/forms/bulk_import.py:80 +#: netbox/wireless/forms/bulk_import.py:83 +msgid "Scope ID" +msgstr "Ідентифікатор області застосування" #: netbox/ipam/forms/bulk_import.py:325 -msgid "Is primary" -msgstr "Є первинним" - -#: netbox/ipam/forms/bulk_import.py:326 msgid "Make this the primary IP for the assigned device" msgstr "Зробіть це основним IP для призначеного пристрою" -#: netbox/ipam/forms/bulk_import.py:330 +#: netbox/ipam/forms/bulk_import.py:329 msgid "Is out-of-band" msgstr "Це для зовнішнього незалежного керування" -#: netbox/ipam/forms/bulk_import.py:331 +#: netbox/ipam/forms/bulk_import.py:330 msgid "Designate this as the out-of-band IP address for the assigned device" msgstr "" "Позначте це як IP-адресу для зовнішнього незалежного керування призначеного " "пристрою" -#: netbox/ipam/forms/bulk_import.py:371 +#: netbox/ipam/forms/bulk_import.py:370 msgid "No device or virtual machine specified; cannot set as primary IP" msgstr "" "Пристрій або віртуальна машина не вказано; неможливо встановити як первинний" " IP" -#: netbox/ipam/forms/bulk_import.py:375 +#: netbox/ipam/forms/bulk_import.py:374 msgid "No device specified; cannot set as out-of-band IP" msgstr "" "Пристрій не вказано; неможливо встановити IP для зовнішнього незалежного " "керування" -#: netbox/ipam/forms/bulk_import.py:379 +#: netbox/ipam/forms/bulk_import.py:378 msgid "Cannot set out-of-band IP for virtual machines" msgstr "" "Не вдається встановити IP для зовнішнього незалежного керування віртуальних " "машин" -#: netbox/ipam/forms/bulk_import.py:383 +#: netbox/ipam/forms/bulk_import.py:382 msgid "No interface specified; cannot set as primary IP" msgstr "Інтерфейс не вказано; неможливо встановити як первинний IP" -#: netbox/ipam/forms/bulk_import.py:387 +#: netbox/ipam/forms/bulk_import.py:386 msgid "No interface specified; cannot set as out-of-band IP" msgstr "" "Інтерфейс не вказано; неможливо встановити як IP для зовнішнього незалежного" " керування" -#: netbox/ipam/forms/bulk_import.py:422 +#: netbox/ipam/forms/bulk_import.py:421 msgid "Auth type" msgstr "Тип авторизації" -#: netbox/ipam/forms/bulk_import.py:437 -msgid "Scope type (app & model)" -msgstr "Тип сфери застосування (додаток і модель)" - -#: netbox/ipam/forms/bulk_import.py:464 +#: netbox/ipam/forms/bulk_import.py:463 msgid "Assigned VLAN group" msgstr "Призначена група VLAN" -#: netbox/ipam/forms/bulk_import.py:495 netbox/ipam/forms/bulk_import.py:521 +#: netbox/ipam/forms/bulk_import.py:495 +msgid "Service VLAN (for Q-in-Q/802.1ad customer VLANs)" +msgstr "Сервісна VLAN (для VLAN клієнтів Q-in-Q/802.1ad)" + +#: netbox/ipam/forms/bulk_import.py:518 netbox/ipam/models/vlans.py:343 +msgid "VLAN translation policy" +msgstr "Політика перекладу VLAN" + +#: netbox/ipam/forms/bulk_import.py:530 netbox/ipam/forms/bulk_import.py:556 msgid "IP protocol" msgstr "протокол IP" -#: netbox/ipam/forms/bulk_import.py:509 +#: netbox/ipam/forms/bulk_import.py:544 msgid "Required if not assigned to a VM" msgstr "Необхідний, якщо він не був призначений для віртуальної машини" -#: netbox/ipam/forms/bulk_import.py:516 +#: netbox/ipam/forms/bulk_import.py:551 msgid "Required if not assigned to a device" msgstr "Обов'язково, якщо він не був призначений для пристрою" -#: netbox/ipam/forms/bulk_import.py:541 +#: netbox/ipam/forms/bulk_import.py:576 #, python-brace-format msgid "{ip} is not assigned to this device/VM." msgstr "{ip} не призначається цьому пристрою/віртуальній машині." -#: netbox/ipam/forms/filtersets.py:47 netbox/ipam/forms/model_forms.py:63 -#: netbox/netbox/navigation/menu.py:189 netbox/vpn/forms/model_forms.py:410 +#: netbox/ipam/forms/filtersets.py:49 netbox/ipam/forms/model_forms.py:66 +#: netbox/netbox/navigation/menu.py:195 netbox/vpn/forms/model_forms.py:413 msgid "Route Targets" msgstr "Маршрути до цілей" -#: netbox/ipam/forms/filtersets.py:53 netbox/ipam/forms/model_forms.py:50 -#: netbox/vpn/forms/filtersets.py:224 netbox/vpn/forms/model_forms.py:397 +#: netbox/ipam/forms/filtersets.py:55 netbox/ipam/forms/model_forms.py:53 +#: netbox/vpn/forms/filtersets.py:224 netbox/vpn/forms/model_forms.py:400 msgid "Import targets" msgstr "Імпортувати цілі" -#: netbox/ipam/forms/filtersets.py:58 netbox/ipam/forms/model_forms.py:55 -#: netbox/vpn/forms/filtersets.py:229 netbox/vpn/forms/model_forms.py:402 +#: netbox/ipam/forms/filtersets.py:60 netbox/ipam/forms/model_forms.py:58 +#: netbox/vpn/forms/filtersets.py:229 netbox/vpn/forms/model_forms.py:405 msgid "Export targets" msgstr "Експортувати цілі" -#: netbox/ipam/forms/filtersets.py:73 +#: netbox/ipam/forms/filtersets.py:75 msgid "Imported by VRF" msgstr "Імпортований до VRF" -#: netbox/ipam/forms/filtersets.py:78 +#: netbox/ipam/forms/filtersets.py:80 msgid "Exported by VRF" msgstr "Експортувати з VRF" -#: netbox/ipam/forms/filtersets.py:87 netbox/ipam/tables/ip.py:89 +#: netbox/ipam/forms/filtersets.py:89 netbox/ipam/tables/ip.py:35 #: netbox/templates/ipam/rir.html:30 msgid "Private" msgstr "Приватний" -#: netbox/ipam/forms/filtersets.py:105 netbox/ipam/forms/filtersets.py:191 -#: netbox/ipam/forms/filtersets.py:272 netbox/ipam/forms/filtersets.py:326 +#: netbox/ipam/forms/filtersets.py:107 netbox/ipam/forms/filtersets.py:193 +#: netbox/ipam/forms/filtersets.py:275 netbox/ipam/forms/filtersets.py:329 msgid "Address family" msgstr "Сімейство адрес" -#: netbox/ipam/forms/filtersets.py:119 netbox/templates/ipam/asnrange.html:25 +#: netbox/ipam/forms/filtersets.py:121 netbox/templates/ipam/asnrange.html:25 msgid "Range" msgstr "Діапазон" -#: netbox/ipam/forms/filtersets.py:128 +#: netbox/ipam/forms/filtersets.py:130 msgid "Start" msgstr "Початок" -#: netbox/ipam/forms/filtersets.py:132 +#: netbox/ipam/forms/filtersets.py:134 msgid "End" msgstr "Кінець" -#: netbox/ipam/forms/filtersets.py:186 +#: netbox/ipam/forms/filtersets.py:188 msgid "Search within" msgstr "Пошук в межах" -#: netbox/ipam/forms/filtersets.py:207 netbox/ipam/forms/filtersets.py:342 +#: netbox/ipam/forms/filtersets.py:209 netbox/ipam/forms/filtersets.py:345 msgid "Present in VRF" msgstr "Присутній у VRF" -#: netbox/ipam/forms/filtersets.py:311 +#: netbox/ipam/forms/filtersets.py:314 msgid "Device/VM" msgstr "Пристрій/віртуальна машина" -#: netbox/ipam/forms/filtersets.py:321 +#: netbox/ipam/forms/filtersets.py:324 msgid "Parent Prefix" msgstr "Батьківський префікс" -#: netbox/ipam/forms/filtersets.py:347 -msgid "Assigned Device" -msgstr "Призначено на пристрій" - -#: netbox/ipam/forms/filtersets.py:352 -msgid "Assigned VM" -msgstr "Призначено на віртуальну машину" - -#: netbox/ipam/forms/filtersets.py:366 +#: netbox/ipam/forms/filtersets.py:369 msgid "Assigned to an interface" msgstr "Призначено на інтерфейс" -#: netbox/ipam/forms/filtersets.py:373 netbox/templates/ipam/ipaddress.html:51 +#: netbox/ipam/forms/filtersets.py:376 netbox/templates/ipam/ipaddress.html:51 msgid "DNS Name" msgstr "Ім'я DNS" -#: netbox/ipam/forms/filtersets.py:416 netbox/ipam/models/vlans.py:251 -#: netbox/ipam/tables/ip.py:176 netbox/ipam/tables/vlans.py:82 -#: netbox/ipam/views.py:971 netbox/netbox/navigation/menu.py:193 -#: netbox/netbox/navigation/menu.py:195 +#: netbox/ipam/forms/filtersets.py:419 netbox/ipam/models/vlans.py:273 +#: netbox/ipam/tables/ip.py:122 netbox/ipam/tables/vlans.py:51 +#: netbox/ipam/views.py:1036 netbox/netbox/navigation/menu.py:199 +#: netbox/netbox/navigation/menu.py:201 msgid "VLANs" msgstr "VLAN'и" -#: netbox/ipam/forms/filtersets.py:457 +#: netbox/ipam/forms/filtersets.py:460 msgid "Contains VLAN ID" msgstr "Містить ідентифікатор VLAN" -#: netbox/ipam/forms/filtersets.py:513 netbox/ipam/models/vlans.py:192 +#: netbox/ipam/forms/filtersets.py:494 netbox/ipam/models/vlans.py:363 +msgid "Local VLAN ID" +msgstr "Локальний ідентифікатор VLAN" + +#: netbox/ipam/forms/filtersets.py:499 netbox/ipam/models/vlans.py:371 +msgid "Remote VLAN ID" +msgstr "Віддалений ідентифікатор VLAN" + +#: netbox/ipam/forms/filtersets.py:509 +msgid "Q-in-Q/802.1ad" +msgstr "Контроль Q/802.1ad" + +#: netbox/ipam/forms/filtersets.py:554 netbox/ipam/models/vlans.py:191 #: netbox/templates/ipam/vlan.html:31 msgid "VLAN ID" msgstr "Ідентифікатор VLAN" -#: netbox/ipam/forms/filtersets.py:556 netbox/ipam/forms/model_forms.py:324 -#: netbox/ipam/forms/model_forms.py:746 netbox/ipam/forms/model_forms.py:772 -#: netbox/ipam/tables/vlans.py:195 -#: netbox/templates/virtualization/virtualdisk.html:21 -#: netbox/templates/virtualization/virtualmachine.html:12 -#: netbox/templates/virtualization/vminterface.html:21 -#: netbox/templates/vpn/tunneltermination.html:25 -#: netbox/virtualization/forms/filtersets.py:197 -#: netbox/virtualization/forms/filtersets.py:242 -#: netbox/virtualization/forms/model_forms.py:220 -#: netbox/virtualization/tables/virtualmachines.py:135 -#: netbox/virtualization/tables/virtualmachines.py:190 -#: netbox/vpn/choices.py:53 netbox/vpn/forms/filtersets.py:293 -#: netbox/vpn/forms/model_forms.py:160 netbox/vpn/forms/model_forms.py:171 -#: netbox/vpn/forms/model_forms.py:273 netbox/vpn/forms/model_forms.py:454 -msgid "Virtual Machine" -msgstr "Віртуальна машина" - -#: netbox/ipam/forms/model_forms.py:80 +#: netbox/ipam/forms/model_forms.py:83 #: netbox/templates/ipam/routetarget.html:10 msgid "Route Target" msgstr "Маршрут до цілі" -#: netbox/ipam/forms/model_forms.py:114 netbox/ipam/tables/ip.py:117 +#: netbox/ipam/forms/model_forms.py:118 netbox/ipam/tables/ip.py:63 #: netbox/templates/ipam/aggregate.html:11 #: netbox/templates/ipam/prefix.html:38 msgid "Aggregate" msgstr "Агрегат" -#: netbox/ipam/forms/model_forms.py:135 netbox/templates/ipam/asnrange.html:12 +#: netbox/ipam/forms/model_forms.py:140 netbox/templates/ipam/asnrange.html:12 msgid "ASN Range" msgstr "Діапазон ASN" -#: netbox/ipam/forms/model_forms.py:231 -msgid "Site/VLAN Assignment" -msgstr "" - -#: netbox/ipam/forms/model_forms.py:259 netbox/templates/ipam/iprange.html:10 +#: netbox/ipam/forms/model_forms.py:269 netbox/templates/ipam/iprange.html:10 msgid "IP Range" msgstr "Діапазон IP" -#: netbox/ipam/forms/model_forms.py:295 netbox/ipam/forms/model_forms.py:325 -#: netbox/ipam/forms/model_forms.py:506 +#: netbox/ipam/forms/model_forms.py:305 netbox/ipam/forms/model_forms.py:335 +#: netbox/ipam/forms/model_forms.py:516 #: netbox/templates/ipam/fhrpgroup.html:19 msgid "FHRP Group" msgstr "Група FHRP/VRRP" -#: netbox/ipam/forms/model_forms.py:310 +#: netbox/ipam/forms/model_forms.py:320 msgid "Make this the primary IP for the device/VM" msgstr "Зробіть це основним IP для пристрою/віртуальної машини" -#: netbox/ipam/forms/model_forms.py:314 +#: netbox/ipam/forms/model_forms.py:324 msgid "Make this the out-of-band IP for the device" msgstr "Зробіть це IP для зовнішнього незалежного керування пристрою" -#: netbox/ipam/forms/model_forms.py:329 +#: netbox/ipam/forms/model_forms.py:339 msgid "NAT IP (Inside)" msgstr "NAT IP (внутрішній)" -#: netbox/ipam/forms/model_forms.py:391 +#: netbox/ipam/forms/model_forms.py:401 msgid "An IP address can only be assigned to a single object." msgstr "IP-адреса може бути призначена лише одному об'єкту." -#: netbox/ipam/forms/model_forms.py:398 +#: netbox/ipam/forms/model_forms.py:408 msgid "Cannot reassign primary IP address for the parent device/VM" msgstr "" "Не вдається перепризначити первинну IP-адресу для батьківського " "пристрою/віртуальної машини" -#: netbox/ipam/forms/model_forms.py:402 +#: netbox/ipam/forms/model_forms.py:412 msgid "Cannot reassign out-of-Band IP address for the parent device" msgstr "" "Не вдається перепризначити IP-адресу для зовнішнього незалежного керування " "батьківського пристрою" -#: netbox/ipam/forms/model_forms.py:412 +#: netbox/ipam/forms/model_forms.py:422 msgid "" "Only IP addresses assigned to an interface can be designated as primary IPs." msgstr "" "Тільки IP-адреси, призначені інтерфейсу, можуть бути визначені первинними " "IP-адресами." -#: netbox/ipam/forms/model_forms.py:420 +#: netbox/ipam/forms/model_forms.py:430 msgid "" "Only IP addresses assigned to a device interface can be designated as the " "out-of-band IP for a device." @@ -9914,24 +10411,29 @@ msgstr "" "Лише IP-адреси, призначені інтерфейсу пристрою, можуть бути позначені як IP " "для зовнішнього незалежного керування пристрою." -#: netbox/ipam/forms/model_forms.py:508 +#: netbox/ipam/forms/model_forms.py:518 msgid "Virtual IP Address" msgstr "Віртуальна IP-адреса" -#: netbox/ipam/forms/model_forms.py:593 +#: netbox/ipam/forms/model_forms.py:603 msgid "Assignment already exists" msgstr "Призначення вже існує" -#: netbox/ipam/forms/model_forms.py:602 +#: netbox/ipam/forms/model_forms.py:612 #: netbox/templates/ipam/vlangroup.html:42 msgid "VLAN IDs" msgstr "Ідентифікатори VLAN" -#: netbox/ipam/forms/model_forms.py:620 +#: netbox/ipam/forms/model_forms.py:630 msgid "Child VLANs" msgstr "Підпорядковані VLAN'и" -#: netbox/ipam/forms/model_forms.py:697 netbox/ipam/forms/model_forms.py:729 +#: netbox/ipam/forms/model_forms.py:730 +#: netbox/templates/ipam/vlantranslationrule.html:11 +msgid "VLAN Translation Rule" +msgstr "Правило перекладу VLAN" + +#: netbox/ipam/forms/model_forms.py:747 netbox/ipam/forms/model_forms.py:779 msgid "" "Comma-separated list of one or more port numbers. A range may be specified " "using a hyphen." @@ -9939,33 +10441,28 @@ msgstr "" "Список одного або декількох номерів портів, розділених комами. Діапазон " "можна вказати за допомогою дефіса." -#: netbox/ipam/forms/model_forms.py:702 +#: netbox/ipam/forms/model_forms.py:752 #: netbox/templates/ipam/servicetemplate.html:12 msgid "Service Template" msgstr "Шаблон сервісу" -#: netbox/ipam/forms/model_forms.py:749 +#: netbox/ipam/forms/model_forms.py:799 msgid "Port(s)" msgstr "Порт (и)" -#: netbox/ipam/forms/model_forms.py:750 netbox/ipam/forms/model_forms.py:778 -#: netbox/templates/ipam/service.html:21 -msgid "Service" -msgstr "Сервіс" - -#: netbox/ipam/forms/model_forms.py:763 +#: netbox/ipam/forms/model_forms.py:813 msgid "Service template" msgstr "Шаблон сервісу" -#: netbox/ipam/forms/model_forms.py:775 +#: netbox/ipam/forms/model_forms.py:825 msgid "From Template" msgstr "З шаблону" -#: netbox/ipam/forms/model_forms.py:776 +#: netbox/ipam/forms/model_forms.py:826 msgid "Custom" msgstr "Користувацький" -#: netbox/ipam/forms/model_forms.py:806 +#: netbox/ipam/forms/model_forms.py:856 msgid "" "Must specify name, protocol, and port(s) if not using a service template." msgstr "" @@ -9984,28 +10481,28 @@ msgstr "Діапазон ASN" msgid "ASN ranges" msgstr "Діапазони ASN" -#: netbox/ipam/models/asns.py:72 +#: netbox/ipam/models/asns.py:69 #, python-brace-format msgid "Starting ASN ({start}) must be lower than ending ASN ({end})." msgstr "Початковий ASN ({start}) повинен бути нижчим за кінцевий ASN ({end})." -#: netbox/ipam/models/asns.py:104 +#: netbox/ipam/models/asns.py:101 msgid "Regional Internet Registry responsible for this AS number space" msgstr "Регіональний інтернет-реєстр(RIR), відповідальний за цей номер AS" -#: netbox/ipam/models/asns.py:109 +#: netbox/ipam/models/asns.py:106 msgid "16- or 32-bit autonomous system number" msgstr "16- або 32-розрядний номер автономної системи" -#: netbox/ipam/models/fhrp.py:22 +#: netbox/ipam/models/fhrp.py:21 msgid "group ID" msgstr "ідентифікатор групи" -#: netbox/ipam/models/fhrp.py:30 netbox/ipam/models/services.py:22 +#: netbox/ipam/models/fhrp.py:29 netbox/ipam/models/services.py:21 msgid "protocol" msgstr "протокол" -#: netbox/ipam/models/fhrp.py:38 netbox/wireless/models.py:28 +#: netbox/ipam/models/fhrp.py:38 netbox/wireless/models.py:29 msgid "authentication type" msgstr "тип аутентифікації" @@ -10021,11 +10518,11 @@ msgstr "Група FHRP/VRRP" msgid "FHRP groups" msgstr "Групи FHRP/VRRP" -#: netbox/ipam/models/fhrp.py:113 +#: netbox/ipam/models/fhrp.py:110 msgid "FHRP group assignment" msgstr "Групове призначення FHRP/VRRP" -#: netbox/ipam/models/fhrp.py:114 +#: netbox/ipam/models/fhrp.py:111 msgid "FHRP group assignments" msgstr "Групові призначення FHRP/VRRP" @@ -10037,35 +10534,35 @@ msgstr "приватне" msgid "IP space managed by this RIR is considered private" msgstr "Простір IP, керований цим RIR, вважається приватним" -#: netbox/ipam/models/ip.py:72 netbox/netbox/navigation/menu.py:182 +#: netbox/ipam/models/ip.py:72 netbox/netbox/navigation/menu.py:188 msgid "RIRs" msgstr "RIRи" -#: netbox/ipam/models/ip.py:84 +#: netbox/ipam/models/ip.py:81 msgid "IPv4 or IPv6 network" msgstr "Мережа IPv4 або IPv6" -#: netbox/ipam/models/ip.py:91 +#: netbox/ipam/models/ip.py:88 msgid "Regional Internet Registry responsible for this IP space" msgstr "Регіональний Інтернет-реєстр(RIR), відповідальний за цей IP-простір" -#: netbox/ipam/models/ip.py:101 +#: netbox/ipam/models/ip.py:98 msgid "date added" msgstr "дата додавання" -#: netbox/ipam/models/ip.py:115 +#: netbox/ipam/models/ip.py:112 msgid "aggregate" msgstr "сукупний" -#: netbox/ipam/models/ip.py:116 +#: netbox/ipam/models/ip.py:113 msgid "aggregates" msgstr "сукупні мережі" -#: netbox/ipam/models/ip.py:132 +#: netbox/ipam/models/ip.py:126 msgid "Cannot create aggregate with /0 mask." msgstr "Не вдається створити сукупну мережу з маскою /0." -#: netbox/ipam/models/ip.py:144 +#: netbox/ipam/models/ip.py:138 #, python-brace-format msgid "" "Aggregates cannot overlap. {prefix} is already covered by an existing " @@ -10074,7 +10571,7 @@ msgstr "" "Сукупні мережі не можуть перекриватися. {prefix} вже покривається існуючим " "сукупною мережею ({aggregate})." -#: netbox/ipam/models/ip.py:158 +#: netbox/ipam/models/ip.py:152 #, python-brace-format msgid "" "Prefixes cannot overlap aggregates. {prefix} covers an existing aggregate " @@ -10083,126 +10580,121 @@ msgstr "" "Мережеві префікси не можуть перекривати сукупні мережі. {prefix} охоплює " "існуючий сукупну мережу ({aggregate})." -#: netbox/ipam/models/ip.py:200 netbox/ipam/models/ip.py:737 -#: netbox/vpn/models/tunnels.py:114 -msgid "role" -msgstr "роль" - -#: netbox/ipam/models/ip.py:201 +#: netbox/ipam/models/ip.py:195 msgid "roles" msgstr "ролі" -#: netbox/ipam/models/ip.py:217 netbox/ipam/models/ip.py:293 +#: netbox/ipam/models/ip.py:208 netbox/ipam/models/ip.py:277 msgid "prefix" msgstr "префікс" -#: netbox/ipam/models/ip.py:218 +#: netbox/ipam/models/ip.py:209 msgid "IPv4 or IPv6 network with mask" msgstr "Мережа IPv4 або IPv6 з маскою" -#: netbox/ipam/models/ip.py:254 +#: netbox/ipam/models/ip.py:238 msgid "Operational status of this prefix" msgstr "Операційний стан цього префікса" -#: netbox/ipam/models/ip.py:262 +#: netbox/ipam/models/ip.py:246 msgid "The primary function of this prefix" msgstr "Основна функція цього префікса" -#: netbox/ipam/models/ip.py:265 +#: netbox/ipam/models/ip.py:249 msgid "is a pool" msgstr "є у пулі" -#: netbox/ipam/models/ip.py:267 +#: netbox/ipam/models/ip.py:251 msgid "All IP addresses within this prefix are considered usable" msgstr "Усі IP-адреси в цьому префіксі вважаються придатними для використання" -#: netbox/ipam/models/ip.py:270 netbox/ipam/models/ip.py:537 +#: netbox/ipam/models/ip.py:254 netbox/ipam/models/ip.py:523 msgid "mark utilized" msgstr "використовувана марка" -#: netbox/ipam/models/ip.py:294 +#: netbox/ipam/models/ip.py:278 msgid "prefixes" msgstr "мережеві префікси" -#: netbox/ipam/models/ip.py:317 +#: netbox/ipam/models/ip.py:298 msgid "Cannot create prefix with /0 mask." msgstr "Неможливо створити префікс з маскою /0." -#: netbox/ipam/models/ip.py:324 netbox/ipam/models/ip.py:874 +#: netbox/ipam/models/ip.py:305 netbox/ipam/models/ip.py:871 #, python-brace-format msgid "VRF {vrf}" msgstr "VRF {vrf}" -#: netbox/ipam/models/ip.py:324 netbox/ipam/models/ip.py:874 +#: netbox/ipam/models/ip.py:305 netbox/ipam/models/ip.py:871 msgid "global table" msgstr "глобальна таблиця" -#: netbox/ipam/models/ip.py:326 +#: netbox/ipam/models/ip.py:307 #, python-brace-format msgid "Duplicate prefix found in {table}: {prefix}" msgstr "Дублікат префікса знайдений у {table}: {prefix}" -#: netbox/ipam/models/ip.py:495 +#: netbox/ipam/models/ip.py:481 msgid "start address" msgstr "стартова адреса" -#: netbox/ipam/models/ip.py:496 netbox/ipam/models/ip.py:500 -#: netbox/ipam/models/ip.py:712 +#: netbox/ipam/models/ip.py:482 netbox/ipam/models/ip.py:486 +#: netbox/ipam/models/ip.py:711 msgid "IPv4 or IPv6 address (with mask)" msgstr "Адреса IPv4 або IPv6 (з маскою)" -#: netbox/ipam/models/ip.py:499 +#: netbox/ipam/models/ip.py:485 msgid "end address" msgstr "кінцева адреса" -#: netbox/ipam/models/ip.py:526 +#: netbox/ipam/models/ip.py:512 msgid "Operational status of this range" msgstr "Експлуатаційний стан даного діапазону" -#: netbox/ipam/models/ip.py:534 +#: netbox/ipam/models/ip.py:520 msgid "The primary function of this range" msgstr "Основна функція цього діапазону" -#: netbox/ipam/models/ip.py:548 +#: netbox/ipam/models/ip.py:534 msgid "IP range" msgstr "Діапазон IP" -#: netbox/ipam/models/ip.py:549 +#: netbox/ipam/models/ip.py:535 msgid "IP ranges" msgstr "Діапазони IP" -#: netbox/ipam/models/ip.py:565 +#: netbox/ipam/models/ip.py:548 msgid "Starting and ending IP address versions must match" msgstr "Початкова та кінцева версії IP-адреси повинні збігатися" -#: netbox/ipam/models/ip.py:571 +#: netbox/ipam/models/ip.py:554 msgid "Starting and ending IP address masks must match" msgstr "Початкові та кінцеві маски IP-адреси повинні збігатися" -#: netbox/ipam/models/ip.py:578 +#: netbox/ipam/models/ip.py:561 #, python-brace-format msgid "" "Ending address must be greater than the starting address ({start_address})" msgstr "" "Кінцева адреса повинна бути більшою за початкову адресу ({start_address})" -#: netbox/ipam/models/ip.py:590 +#: netbox/ipam/models/ip.py:589 #, python-brace-format msgid "Defined addresses overlap with range {overlapping_range} in VRF {vrf}" msgstr "" "Визначені адреси перекриваються з діапазоном {overlapping_range} в VRF {vrf}" -#: netbox/ipam/models/ip.py:599 +#: netbox/ipam/models/ip.py:598 #, python-brace-format msgid "Defined range exceeds maximum supported size ({max_size})" msgstr "" "Визначений діапазон перевищує максимальний підтримуваний розмір ({max_size})" -#: netbox/ipam/models/ip.py:711 netbox/tenancy/models/contacts.py:82 +#: netbox/ipam/models/ip.py:710 netbox/tenancy/models/contacts.py:77 msgid "address" msgstr "адреса" -#: netbox/ipam/models/ip.py:734 +#: netbox/ipam/models/ip.py:733 msgid "The operational status of this IP" msgstr "Операційний стан цього IP" @@ -10222,32 +10714,32 @@ msgstr "IP, для якого ця адреса є \"зовнішньою\"" msgid "Hostname or FQDN (not case-sensitive)" msgstr "Ім'я хоста або FQDN (не залежить від регістру регістру)" -#: netbox/ipam/models/ip.py:789 netbox/ipam/models/services.py:94 +#: netbox/ipam/models/ip.py:789 netbox/ipam/models/services.py:90 msgid "IP addresses" msgstr "IP-адреси" -#: netbox/ipam/models/ip.py:845 +#: netbox/ipam/models/ip.py:842 msgid "Cannot create IP address with /0 mask." msgstr "Не вдається створити IP-адресу з маскою /0." -#: netbox/ipam/models/ip.py:851 +#: netbox/ipam/models/ip.py:848 #, python-brace-format msgid "{ip} is a network ID, which may not be assigned to an interface." msgstr "" "{ip} це ідентифікатор мережі, який не може бути присвоєний інтерфейсу." -#: netbox/ipam/models/ip.py:862 +#: netbox/ipam/models/ip.py:859 #, python-brace-format msgid "" "{ip} is a broadcast address, which may not be assigned to an interface." msgstr "{ip} це широкомовна адреса, яка може не бути присвоєна інтерфейсу." -#: netbox/ipam/models/ip.py:876 +#: netbox/ipam/models/ip.py:873 #, python-brace-format msgid "Duplicate IP address found in {table}: {ipaddress}" msgstr "Дублікати IP-адреси знайдено в {table}: {ipaddress}" -#: netbox/ipam/models/ip.py:897 +#: netbox/ipam/models/ip.py:896 msgid "" "Cannot reassign IP address while it is designated as the primary IP for the " "parent object" @@ -10255,73 +10747,73 @@ msgstr "" "Не вдається перепризначити IP-адресу, поки вона призначена як первинний IP " "для батьківського об'єкта" -#: netbox/ipam/models/ip.py:903 +#: netbox/ipam/models/ip.py:902 msgid "Only IPv6 addresses can be assigned SLAAC status" msgstr "Статус SLAAC може бути призначений лише адресам IPv6" -#: netbox/ipam/models/services.py:33 +#: netbox/ipam/models/services.py:32 msgid "port numbers" msgstr "номери портів" -#: netbox/ipam/models/services.py:59 +#: netbox/ipam/models/services.py:58 msgid "service template" msgstr "шаблон сервісу" -#: netbox/ipam/models/services.py:60 +#: netbox/ipam/models/services.py:59 msgid "service templates" msgstr "шаблони послуг" -#: netbox/ipam/models/services.py:95 +#: netbox/ipam/models/services.py:91 msgid "The specific IP addresses (if any) to which this service is bound" msgstr "Конкретні IP-адреси (якщо такі є), до яких прив'язана ця послуга" -#: netbox/ipam/models/services.py:102 +#: netbox/ipam/models/services.py:98 msgid "service" msgstr "послуга" -#: netbox/ipam/models/services.py:103 +#: netbox/ipam/models/services.py:99 msgid "services" msgstr "послуги" -#: netbox/ipam/models/services.py:117 +#: netbox/ipam/models/services.py:110 msgid "" "A service cannot be associated with both a device and a virtual machine." msgstr "" "Сервіс не може бути пов'язаний як з пристроєм, так і з віртуальною машиною." -#: netbox/ipam/models/services.py:119 +#: netbox/ipam/models/services.py:112 msgid "" "A service must be associated with either a device or a virtual machine." msgstr "" "Служба повинна бути пов'язана або з пристроєм, або з віртуальною машиною." -#: netbox/ipam/models/vlans.py:85 +#: netbox/ipam/models/vlans.py:87 msgid "VLAN groups" msgstr "Групи VLAN" -#: netbox/ipam/models/vlans.py:95 +#: netbox/ipam/models/vlans.py:94 msgid "Cannot set scope_type without scope_id." msgstr "Не вдається встановити scope_type без scope_id." -#: netbox/ipam/models/vlans.py:97 +#: netbox/ipam/models/vlans.py:96 msgid "Cannot set scope_id without scope_type." msgstr "Не вдається встановити scope_id без scope_type." -#: netbox/ipam/models/vlans.py:105 +#: netbox/ipam/models/vlans.py:104 #, python-brace-format msgid "Starting VLAN ID in range ({value}) cannot be less than {minimum}" msgstr "" "Початковий ідентифікатор VLAN в діапазоні ({value}) не може бути менше " "{minimum}" -#: netbox/ipam/models/vlans.py:111 +#: netbox/ipam/models/vlans.py:110 #, python-brace-format msgid "Ending VLAN ID in range ({value}) cannot exceed {maximum}" msgstr "" "Кінцевий ідентифікатор VLAN в діапазоні ({value}) не може перевищувати " "{maximum}" -#: netbox/ipam/models/vlans.py:118 +#: netbox/ipam/models/vlans.py:117 #, python-brace-format msgid "" "Ending VLAN ID in range must be greater than or equal to the starting VLAN " @@ -10330,31 +10822,36 @@ msgstr "" "Кінцевий ідентифікатор VLAN в діапазоні повинен бути більшим або дорівнювати" " початковому ідентифікатору VLAN ({range})" -#: netbox/ipam/models/vlans.py:124 +#: netbox/ipam/models/vlans.py:123 msgid "Ranges cannot overlap." msgstr "Діапазони не можуть перекриватися." -#: netbox/ipam/models/vlans.py:181 +#: netbox/ipam/models/vlans.py:180 msgid "The specific site to which this VLAN is assigned (if any)" msgstr "Конкретний тех. майданчик, якому присвоєно цей VLAN (якщо такий є)" -#: netbox/ipam/models/vlans.py:189 +#: netbox/ipam/models/vlans.py:188 msgid "VLAN group (optional)" msgstr "Група VLAN (необов'язково)" -#: netbox/ipam/models/vlans.py:197 +#: netbox/ipam/models/vlans.py:196 netbox/ipam/models/vlans.py:368 +#: netbox/ipam/models/vlans.py:376 msgid "Numeric VLAN ID (1-4094)" msgstr "Числовий ідентифікатор VLAN (1-4094)" -#: netbox/ipam/models/vlans.py:215 +#: netbox/ipam/models/vlans.py:214 msgid "Operational status of this VLAN" msgstr "Операційний стан цього VLAN" -#: netbox/ipam/models/vlans.py:223 +#: netbox/ipam/models/vlans.py:222 msgid "The primary function of this VLAN" msgstr "Основна функція цього VLAN" -#: netbox/ipam/models/vlans.py:266 +#: netbox/ipam/models/vlans.py:237 +msgid "Customer/service VLAN designation (for Q-in-Q/IEEE 802.1ad)" +msgstr "Позначення VLAN клієнта/служби (для Q-in-Q/IEEE 802.1ad)" + +#: netbox/ipam/models/vlans.py:285 #, python-brace-format msgid "" "VLAN is assigned to group {group} (scope: {scope}); cannot also assign to " @@ -10363,42 +10860,60 @@ msgstr "" "VLAN присвоюється групі {group} (сфера застосування: {scope}); також не може" " призначатися до тех. майданчику {site}." -#: netbox/ipam/models/vlans.py:275 +#: netbox/ipam/models/vlans.py:294 #, python-brace-format msgid "VID must be in ranges {ranges} for VLANs in group {group}" msgstr "" "VID повинен знаходитися в діапазоні {ranges} для VLAN'ів у групі {group}" -#: netbox/ipam/models/vrfs.py:30 +#: netbox/ipam/models/vlans.py:301 +msgid "Only Q-in-Q customer VLANs maybe assigned to a service VLAN." +msgstr "" +"Тільки VLAN клієнтів Q-in-Q можуть бути призначені для обслуговування VLAN." + +#: netbox/ipam/models/vlans.py:307 +msgid "A Q-in-Q customer VLAN must be assigned to a service VLAN." +msgstr "" +"Клієнтська VLAN клієнта Q-in-Q повинна бути призначена для службової VLAN." + +#: netbox/ipam/models/vlans.py:344 +msgid "VLAN translation policies" +msgstr "Політика перекладу VLAN" + +#: netbox/ipam/models/vlans.py:385 +msgid "VLAN translation rule" +msgstr "Правило перекладу VLAN" + +#: netbox/ipam/models/vrfs.py:29 msgid "route distinguisher" msgstr "розрізнювач маршруту (RD)" -#: netbox/ipam/models/vrfs.py:31 +#: netbox/ipam/models/vrfs.py:30 msgid "Unique route distinguisher (as defined in RFC 4364)" msgstr "Унікальний розрізнювач маршруту (RD) (як визначено в RFC 4364)" -#: netbox/ipam/models/vrfs.py:42 +#: netbox/ipam/models/vrfs.py:41 msgid "enforce unique space" msgstr "забезпечити унікальний простір" -#: netbox/ipam/models/vrfs.py:43 +#: netbox/ipam/models/vrfs.py:42 msgid "Prevent duplicate prefixes/IP addresses within this VRF" msgstr "Запобігання дублікуванню префіксів/IP-адрес у цьому VRF" -#: netbox/ipam/models/vrfs.py:63 netbox/netbox/navigation/menu.py:186 -#: netbox/netbox/navigation/menu.py:188 +#: netbox/ipam/models/vrfs.py:62 netbox/netbox/navigation/menu.py:192 +#: netbox/netbox/navigation/menu.py:194 msgid "VRFs" msgstr "VRFи" -#: netbox/ipam/models/vrfs.py:82 +#: netbox/ipam/models/vrfs.py:78 msgid "Route target value (formatted in accordance with RFC 4360)" msgstr "Цільове значення маршруту (відформатоване відповідно до RFC 4360)" -#: netbox/ipam/models/vrfs.py:94 +#: netbox/ipam/models/vrfs.py:91 msgid "route target" msgstr "маршрут до цілі" -#: netbox/ipam/models/vrfs.py:95 +#: netbox/ipam/models/vrfs.py:92 msgid "route targets" msgstr "маршрут до цілей" @@ -10414,84 +10929,101 @@ msgstr "Кількість тех. майданчиків" msgid "Provider Count" msgstr "Кількість провайдерів" -#: netbox/ipam/tables/ip.py:95 netbox/netbox/navigation/menu.py:179 -#: netbox/netbox/navigation/menu.py:181 +#: netbox/ipam/tables/ip.py:41 netbox/netbox/navigation/menu.py:185 +#: netbox/netbox/navigation/menu.py:187 msgid "Aggregates" msgstr "Сукупні мережі" -#: netbox/ipam/tables/ip.py:125 +#: netbox/ipam/tables/ip.py:71 msgid "Added" msgstr "Додано" -#: netbox/ipam/tables/ip.py:128 netbox/ipam/tables/ip.py:166 -#: netbox/ipam/tables/vlans.py:142 netbox/ipam/views.py:346 -#: netbox/netbox/navigation/menu.py:165 netbox/netbox/navigation/menu.py:167 -#: netbox/templates/ipam/vlan.html:84 +#: netbox/ipam/tables/ip.py:74 netbox/ipam/tables/ip.py:112 +#: netbox/ipam/tables/vlans.py:118 netbox/ipam/views.py:373 +#: netbox/netbox/navigation/menu.py:171 netbox/netbox/navigation/menu.py:173 +#: netbox/templates/ipam/vlan.html:100 msgid "Prefixes" msgstr "Мережеві префікси" -#: netbox/ipam/tables/ip.py:131 netbox/ipam/tables/ip.py:270 -#: netbox/ipam/tables/ip.py:324 netbox/ipam/tables/vlans.py:86 +#: netbox/ipam/tables/ip.py:77 netbox/ipam/tables/ip.py:221 +#: netbox/ipam/tables/ip.py:276 netbox/ipam/tables/vlans.py:55 #: netbox/templates/dcim/device.html:260 #: netbox/templates/ipam/aggregate.html:24 -#: netbox/templates/ipam/iprange.html:29 netbox/templates/ipam/prefix.html:106 +#: netbox/templates/ipam/iprange.html:29 netbox/templates/ipam/prefix.html:102 msgid "Utilization" msgstr "Утилізація" -#: netbox/ipam/tables/ip.py:171 netbox/netbox/navigation/menu.py:161 +#: netbox/ipam/tables/ip.py:117 netbox/netbox/navigation/menu.py:167 msgid "IP Ranges" msgstr "Діапазони IP" -#: netbox/ipam/tables/ip.py:221 +#: netbox/ipam/tables/ip.py:167 msgid "Prefix (Flat)" msgstr "Префікс (Плоский)" -#: netbox/ipam/tables/ip.py:225 +#: netbox/ipam/tables/ip.py:171 msgid "Depth" msgstr "Глибина" -#: netbox/ipam/tables/ip.py:262 +#: netbox/ipam/tables/ip.py:191 netbox/ipam/tables/vlans.py:37 +#: netbox/virtualization/tables/clusters.py:77 +#: netbox/wireless/tables/wirelesslan.py:55 +msgid "Scope Type" +msgstr "Тип сфери застосування" + +#: netbox/ipam/tables/ip.py:213 msgid "Pool" msgstr "Пул" -#: netbox/ipam/tables/ip.py:266 netbox/ipam/tables/ip.py:320 +#: netbox/ipam/tables/ip.py:217 netbox/ipam/tables/ip.py:272 msgid "Marked Utilized" msgstr "Позначено як використане" -#: netbox/ipam/tables/ip.py:304 +#: netbox/ipam/tables/ip.py:256 msgid "Start address" msgstr "Початкова адреса" -#: netbox/ipam/tables/ip.py:383 +#: netbox/ipam/tables/ip.py:335 msgid "NAT (Inside)" msgstr "NAT (внутрішній)" -#: netbox/ipam/tables/ip.py:388 +#: netbox/ipam/tables/ip.py:340 msgid "NAT (Outside)" msgstr "NAT (зовнішній)" -#: netbox/ipam/tables/ip.py:393 +#: netbox/ipam/tables/ip.py:345 msgid "Assigned" msgstr "Призначений" -#: netbox/ipam/tables/ip.py:429 netbox/templates/vpn/l2vpntermination.html:16 +#: netbox/ipam/tables/ip.py:381 netbox/templates/vpn/l2vpntermination.html:16 #: netbox/vpn/forms/filtersets.py:240 msgid "Assigned Object" msgstr "Призначений об'єкт" -#: netbox/ipam/tables/vlans.py:68 -msgid "Scope Type" -msgstr "Тип сфери застосування" - -#: netbox/ipam/tables/vlans.py:76 +#: netbox/ipam/tables/vlans.py:45 msgid "VID Ranges" msgstr "Діапазони VID" -#: netbox/ipam/tables/vlans.py:111 netbox/ipam/tables/vlans.py:214 +#: netbox/ipam/tables/vlans.py:80 netbox/ipam/tables/vlans.py:190 #: netbox/templates/dcim/inc/interface_vlans_table.html:4 msgid "VID" msgstr "VID" +#: netbox/ipam/tables/vlans.py:237 +#: netbox/templates/ipam/vlantranslationpolicy.html:22 +msgid "Rules" +msgstr "Правила" + +#: netbox/ipam/tables/vlans.py:260 +#: netbox/templates/ipam/vlantranslationrule.html:18 +msgid "Local VID" +msgstr "Локальний VID" + +#: netbox/ipam/tables/vlans.py:264 +#: netbox/templates/ipam/vlantranslationrule.html:22 +msgid "Remote VID" +msgstr "Віддалений VID" + #: netbox/ipam/tables/vrfs.py:30 msgid "RD" msgstr "RD" @@ -10531,23 +11063,23 @@ msgstr "" "У назвах DNS дозволені лише буквено-цифрові символи, зірочки, дефіси, крапки" " та підкреслення" -#: netbox/ipam/views.py:533 +#: netbox/ipam/views.py:570 msgid "Child Prefixes" msgstr "Підпорядковані мережеві префікси" -#: netbox/ipam/views.py:569 +#: netbox/ipam/views.py:606 msgid "Child Ranges" msgstr "Підпорядковані діапазони" -#: netbox/ipam/views.py:898 +#: netbox/ipam/views.py:958 msgid "Related IPs" msgstr "Пов'язані IP-адреси" -#: netbox/ipam/views.py:1127 +#: netbox/ipam/views.py:1315 msgid "Device Interfaces" msgstr "Інтерфейси пристрою" -#: netbox/ipam/views.py:1145 +#: netbox/ipam/views.py:1333 msgid "VM Interfaces" msgstr "Інтерфейси віртуальної машини" @@ -10595,90 +11127,112 @@ msgstr "{class_name} повинен реалізувати get_view_name()" msgid "Invalid permission {permission} for model {model}" msgstr "Невірний дозвіл {permission} для моделі {model}" -#: netbox/netbox/choices.py:49 +#: netbox/netbox/choices.py:51 msgid "Dark Red" msgstr "Темно-червоний" -#: netbox/netbox/choices.py:52 +#: netbox/netbox/choices.py:54 msgid "Rose" msgstr "Трояндовий" -#: netbox/netbox/choices.py:53 +#: netbox/netbox/choices.py:55 msgid "Fuchsia" msgstr "Малиновий" -#: netbox/netbox/choices.py:55 +#: netbox/netbox/choices.py:57 msgid "Dark Purple" msgstr "Темно-фіолетовий" -#: netbox/netbox/choices.py:58 +#: netbox/netbox/choices.py:60 msgid "Light Blue" msgstr "Світло-блакитний" -#: netbox/netbox/choices.py:61 +#: netbox/netbox/choices.py:63 msgid "Aqua" msgstr "Бирюзовый" -#: netbox/netbox/choices.py:62 +#: netbox/netbox/choices.py:64 msgid "Dark Green" msgstr "Темно-зелений" -#: netbox/netbox/choices.py:64 +#: netbox/netbox/choices.py:66 msgid "Light Green" msgstr "Світло-зелений" -#: netbox/netbox/choices.py:65 +#: netbox/netbox/choices.py:67 msgid "Lime" msgstr "Кислотно-зелений" -#: netbox/netbox/choices.py:67 +#: netbox/netbox/choices.py:69 msgid "Amber" msgstr "Бурштиновий" -#: netbox/netbox/choices.py:69 +#: netbox/netbox/choices.py:71 msgid "Dark Orange" msgstr "Темно-помаранчевий" -#: netbox/netbox/choices.py:70 +#: netbox/netbox/choices.py:72 msgid "Brown" msgstr "Коричневий" -#: netbox/netbox/choices.py:71 +#: netbox/netbox/choices.py:73 msgid "Light Grey" msgstr "Сріблясто-сірий" -#: netbox/netbox/choices.py:72 +#: netbox/netbox/choices.py:74 msgid "Grey" msgstr "Сірий" -#: netbox/netbox/choices.py:73 +#: netbox/netbox/choices.py:75 msgid "Dark Grey" msgstr "Антрацитовий" -#: netbox/netbox/choices.py:128 +#: netbox/netbox/choices.py:103 netbox/templates/extras/script_result.html:56 +msgid "Default" +msgstr "За замовчуванням" + +#: netbox/netbox/choices.py:130 msgid "Direct" msgstr "прямий" -#: netbox/netbox/choices.py:129 +#: netbox/netbox/choices.py:131 msgid "Upload" msgstr "Вивантажити" -#: netbox/netbox/choices.py:141 netbox/netbox/choices.py:155 +#: netbox/netbox/choices.py:143 netbox/netbox/choices.py:157 msgid "Auto-detect" msgstr "Автоматичне виявлення" -#: netbox/netbox/choices.py:156 +#: netbox/netbox/choices.py:158 msgid "Comma" msgstr "Кома" -#: netbox/netbox/choices.py:157 +#: netbox/netbox/choices.py:159 msgid "Semicolon" msgstr "Крапка з комою" -#: netbox/netbox/choices.py:158 +#: netbox/netbox/choices.py:160 msgid "Tab" msgstr "Табуляція" +#: netbox/netbox/choices.py:193 netbox/templates/dcim/device.html:327 +#: netbox/templates/dcim/rack.html:107 +msgid "Kilograms" +msgstr "Кілограми" + +#: netbox/netbox/choices.py:194 +msgid "Grams" +msgstr "Грами" + +#: netbox/netbox/choices.py:195 netbox/templates/dcim/device.html:328 +#: netbox/templates/dcim/rack.html:108 +msgid "Pounds" +msgstr "Фунтів" + +#: netbox/netbox/choices.py:196 +msgid "Ounces" +msgstr "Унцій" + #: netbox/netbox/config/__init__.py:67 #, python-brace-format msgid "Invalid configuration parameter: {item}" @@ -10967,6 +11521,26 @@ msgstr "дата синхронізована" msgid "{class_name} must implement a sync_data() method." msgstr "{class_name} повинен реалізувати метод sync_data()." +#: netbox/netbox/models/mixins.py:22 +msgid "weight unit" +msgstr "одиниця ваги" + +#: netbox/netbox/models/mixins.py:52 +msgid "Must specify a unit when setting a weight" +msgstr "Необхідно вказати одиницю виміру при установці ваги" + +#: netbox/netbox/models/mixins.py:57 +msgid "distance" +msgstr "відстань" + +#: netbox/netbox/models/mixins.py:64 +msgid "distance unit" +msgstr "одиниця відстані" + +#: netbox/netbox/models/mixins.py:99 +msgid "Must specify a unit when setting a distance" +msgstr "Необхідно вказати одиницю при установці відстані" + #: netbox/netbox/navigation/menu.py:11 msgid "Organization" msgstr "Організація" @@ -11000,10 +11574,6 @@ msgstr "Ролі в стійці" msgid "Elevations" msgstr "Графічний вид" -#: netbox/netbox/navigation/menu.py:60 netbox/netbox/navigation/menu.py:62 -msgid "Rack Types" -msgstr "Типи стійки" - #: netbox/netbox/navigation/menu.py:76 msgid "Modules" msgstr "Модулі" @@ -11026,175 +11596,200 @@ msgstr "Компоненти пристрою" msgid "Inventory Item Roles" msgstr "Ролі елементів інвентаря" -#: netbox/netbox/navigation/menu.py:111 netbox/netbox/navigation/menu.py:115 +#: netbox/netbox/navigation/menu.py:110 +#: netbox/templates/dcim/interface.html:413 +#: netbox/templates/virtualization/vminterface.html:118 +msgid "MAC Addresses" +msgstr "MAC-адреси" + +#: netbox/netbox/navigation/menu.py:117 netbox/netbox/navigation/menu.py:121 +#: netbox/templates/dcim/interface.html:182 msgid "Connections" msgstr "З'єднання" -#: netbox/netbox/navigation/menu.py:117 +#: netbox/netbox/navigation/menu.py:123 msgid "Cables" msgstr "Кабелі" -#: netbox/netbox/navigation/menu.py:118 +#: netbox/netbox/navigation/menu.py:124 msgid "Wireless Links" msgstr "Бездротові зв'язки" -#: netbox/netbox/navigation/menu.py:121 +#: netbox/netbox/navigation/menu.py:127 msgid "Interface Connections" msgstr "Інтерфейсні підключення" -#: netbox/netbox/navigation/menu.py:126 +#: netbox/netbox/navigation/menu.py:132 msgid "Console Connections" msgstr "Консольні підключення" -#: netbox/netbox/navigation/menu.py:131 +#: netbox/netbox/navigation/menu.py:137 msgid "Power Connections" msgstr "Підключення живлення" -#: netbox/netbox/navigation/menu.py:147 +#: netbox/netbox/navigation/menu.py:153 msgid "Wireless LAN Groups" msgstr "Групи WLAN" -#: netbox/netbox/navigation/menu.py:168 +#: netbox/netbox/navigation/menu.py:174 msgid "Prefix & VLAN Roles" msgstr "Префікс і ролі VLAN" -#: netbox/netbox/navigation/menu.py:174 +#: netbox/netbox/navigation/menu.py:180 msgid "ASN Ranges" msgstr "Діапазони ASN" -#: netbox/netbox/navigation/menu.py:196 +#: netbox/netbox/navigation/menu.py:202 msgid "VLAN Groups" msgstr "Групи VLAN" #: netbox/netbox/navigation/menu.py:203 +msgid "VLAN Translation Policies" +msgstr "Політика перекладу VLAN" + +#: netbox/netbox/navigation/menu.py:204 +#: netbox/templates/ipam/vlantranslationpolicy.html:46 +msgid "VLAN Translation Rules" +msgstr "Правила перекладу VLAN" + +#: netbox/netbox/navigation/menu.py:211 msgid "Service Templates" msgstr "Шаблони послуг" -#: netbox/netbox/navigation/menu.py:204 netbox/templates/dcim/device.html:302 +#: netbox/netbox/navigation/menu.py:212 netbox/templates/dcim/device.html:302 #: netbox/templates/ipam/ipaddress.html:118 #: netbox/templates/virtualization/virtualmachine.html:154 msgid "Services" msgstr "Послуги" -#: netbox/netbox/navigation/menu.py:211 +#: netbox/netbox/navigation/menu.py:219 msgid "VPN" msgstr "VPN" -#: netbox/netbox/navigation/menu.py:215 netbox/netbox/navigation/menu.py:217 +#: netbox/netbox/navigation/menu.py:223 netbox/netbox/navigation/menu.py:225 #: netbox/vpn/tables/tunnels.py:24 msgid "Tunnels" msgstr "Тунелі" -#: netbox/netbox/navigation/menu.py:218 +#: netbox/netbox/navigation/menu.py:226 #: netbox/templates/vpn/tunnelgroup.html:8 msgid "Tunnel Groups" msgstr "Тунельні групи" -#: netbox/netbox/navigation/menu.py:219 +#: netbox/netbox/navigation/menu.py:227 msgid "Tunnel Terminations" msgstr "Кінці тунелів" -#: netbox/netbox/navigation/menu.py:223 netbox/netbox/navigation/menu.py:225 +#: netbox/netbox/navigation/menu.py:231 netbox/netbox/navigation/menu.py:233 #: netbox/vpn/models/l2vpn.py:64 msgid "L2VPNs" msgstr "L2VPN" -#: netbox/netbox/navigation/menu.py:226 netbox/templates/vpn/l2vpn.html:56 -#: netbox/templates/vpn/tunnel.html:72 netbox/vpn/tables/tunnels.py:58 -msgid "Terminations" -msgstr "Кінці" - -#: netbox/netbox/navigation/menu.py:232 +#: netbox/netbox/navigation/menu.py:240 msgid "IKE Proposals" msgstr "Налаштування IKE" -#: netbox/netbox/navigation/menu.py:233 +#: netbox/netbox/navigation/menu.py:241 #: netbox/templates/vpn/ikeproposal.html:41 msgid "IKE Policies" msgstr "Політика IKE" -#: netbox/netbox/navigation/menu.py:234 +#: netbox/netbox/navigation/menu.py:242 msgid "IPSec Proposals" msgstr "Налаштування IPsec" -#: netbox/netbox/navigation/menu.py:235 +#: netbox/netbox/navigation/menu.py:243 #: netbox/templates/vpn/ipsecproposal.html:37 msgid "IPSec Policies" msgstr "Політика IPsec" -#: netbox/netbox/navigation/menu.py:236 netbox/templates/vpn/ikepolicy.html:38 +#: netbox/netbox/navigation/menu.py:244 netbox/templates/vpn/ikepolicy.html:38 #: netbox/templates/vpn/ipsecpolicy.html:25 msgid "IPSec Profiles" msgstr "Профілі IPsec" -#: netbox/netbox/navigation/menu.py:251 +#: netbox/netbox/navigation/menu.py:259 #: netbox/templates/virtualization/virtualmachine.html:174 #: netbox/templates/virtualization/virtualmachine/base.html:32 #: netbox/templates/virtualization/virtualmachine_list.html:21 -#: netbox/virtualization/tables/virtualmachines.py:104 -#: netbox/virtualization/views.py:386 +#: netbox/virtualization/tables/virtualmachines.py:74 +#: netbox/virtualization/views.py:403 msgid "Virtual Disks" msgstr "Віртуальні диски" -#: netbox/netbox/navigation/menu.py:258 +#: netbox/netbox/navigation/menu.py:266 msgid "Cluster Types" msgstr "Типи кластерів" -#: netbox/netbox/navigation/menu.py:259 +#: netbox/netbox/navigation/menu.py:267 msgid "Cluster Groups" msgstr "Кластерні групи" -#: netbox/netbox/navigation/menu.py:273 +#: netbox/netbox/navigation/menu.py:281 msgid "Circuit Types" msgstr "Типи схем" -#: netbox/netbox/navigation/menu.py:274 -msgid "Circuit Groups" -msgstr "Групи каналів зв'язку" - -#: netbox/netbox/navigation/menu.py:275 -#: netbox/templates/circuits/circuit.html:66 -msgid "Group Assignments" -msgstr "Групи завдань" - -#: netbox/netbox/navigation/menu.py:276 +#: netbox/netbox/navigation/menu.py:282 msgid "Circuit Terminations" msgstr "Кінці каналу зв'язку" -#: netbox/netbox/navigation/menu.py:280 netbox/netbox/navigation/menu.py:282 +#: netbox/netbox/navigation/menu.py:286 netbox/netbox/navigation/menu.py:288 +#: netbox/templates/circuits/providernetwork.html:55 +msgid "Virtual Circuits" +msgstr "Віртуальні схеми" + +#: netbox/netbox/navigation/menu.py:289 +msgid "Virtual Circuit Types" +msgstr "Типи віртуальних схем" + +#: netbox/netbox/navigation/menu.py:290 +msgid "Virtual Circuit Terminations" +msgstr "Закінчення віртуальних схем" + +#: netbox/netbox/navigation/menu.py:296 +msgid "Circuit Groups" +msgstr "Групи каналів зв'язку" + +#: netbox/netbox/navigation/menu.py:297 +#: netbox/templates/circuits/circuit.html:76 +#: netbox/templates/circuits/virtualcircuit.html:69 +msgid "Group Assignments" +msgstr "Групи завдань" + +#: netbox/netbox/navigation/menu.py:301 netbox/netbox/navigation/menu.py:303 msgid "Providers" msgstr "Провайдери" -#: netbox/netbox/navigation/menu.py:283 +#: netbox/netbox/navigation/menu.py:304 #: netbox/templates/circuits/provider.html:51 msgid "Provider Accounts" msgstr "Облікові записи провайдера" -#: netbox/netbox/navigation/menu.py:284 +#: netbox/netbox/navigation/menu.py:305 msgid "Provider Networks" msgstr "Мережі провайдерів" -#: netbox/netbox/navigation/menu.py:298 +#: netbox/netbox/navigation/menu.py:319 msgid "Power Panels" msgstr "Панелі живлення" -#: netbox/netbox/navigation/menu.py:309 +#: netbox/netbox/navigation/menu.py:330 msgid "Configurations" msgstr "Конфігурації" -#: netbox/netbox/navigation/menu.py:311 +#: netbox/netbox/navigation/menu.py:332 msgid "Config Contexts" msgstr "Контексти конфігурації" -#: netbox/netbox/navigation/menu.py:312 +#: netbox/netbox/navigation/menu.py:333 msgid "Config Templates" msgstr "Конфігураційні шаблони" -#: netbox/netbox/navigation/menu.py:319 netbox/netbox/navigation/menu.py:323 +#: netbox/netbox/navigation/menu.py:340 netbox/netbox/navigation/menu.py:344 msgid "Customization" msgstr "Персоналізація" -#: netbox/netbox/navigation/menu.py:325 +#: netbox/netbox/navigation/menu.py:346 #: netbox/templates/dcim/device_edit.html:103 #: netbox/templates/dcim/htmx/cable_edit.html:81 #: netbox/templates/dcim/virtualchassis_add.html:31 @@ -11203,96 +11798,96 @@ msgstr "Персоналізація" #: netbox/templates/htmx/form.html:19 netbox/templates/inc/filter_list.html:30 #: netbox/templates/inc/panels/custom_fields.html:7 #: netbox/templates/ipam/ipaddress_bulk_add.html:35 -#: netbox/templates/ipam/vlan_edit.html:59 +#: netbox/templates/ipam/vlan_edit.html:67 msgid "Custom Fields" msgstr "Користувацькі поля" -#: netbox/netbox/navigation/menu.py:326 +#: netbox/netbox/navigation/menu.py:347 msgid "Custom Field Choices" msgstr "Вибір користувацьких полів" -#: netbox/netbox/navigation/menu.py:327 +#: netbox/netbox/navigation/menu.py:348 msgid "Custom Links" msgstr "Користувацькі посилання" -#: netbox/netbox/navigation/menu.py:328 +#: netbox/netbox/navigation/menu.py:349 msgid "Export Templates" msgstr "Експортувати шаблони" -#: netbox/netbox/navigation/menu.py:329 +#: netbox/netbox/navigation/menu.py:350 msgid "Saved Filters" msgstr "Збережені фільтри" -#: netbox/netbox/navigation/menu.py:331 +#: netbox/netbox/navigation/menu.py:352 msgid "Image Attachments" msgstr "Вкладення зображень" -#: netbox/netbox/navigation/menu.py:349 +#: netbox/netbox/navigation/menu.py:370 msgid "Operations" msgstr "Операції" -#: netbox/netbox/navigation/menu.py:353 +#: netbox/netbox/navigation/menu.py:374 msgid "Integrations" msgstr "Інтеграція" -#: netbox/netbox/navigation/menu.py:355 +#: netbox/netbox/navigation/menu.py:376 msgid "Data Sources" msgstr "Джерела даних" -#: netbox/netbox/navigation/menu.py:356 +#: netbox/netbox/navigation/menu.py:377 msgid "Event Rules" msgstr "Правила події" -#: netbox/netbox/navigation/menu.py:357 +#: netbox/netbox/navigation/menu.py:378 msgid "Webhooks" msgstr "Веб-хуки" -#: netbox/netbox/navigation/menu.py:361 netbox/netbox/navigation/menu.py:365 -#: netbox/netbox/views/generic/feature_views.py:153 +#: netbox/netbox/navigation/menu.py:382 netbox/netbox/navigation/menu.py:386 +#: netbox/netbox/views/generic/feature_views.py:158 #: netbox/templates/extras/report/base.html:37 #: netbox/templates/extras/script/base.html:36 msgid "Jobs" msgstr "Завдання" -#: netbox/netbox/navigation/menu.py:371 +#: netbox/netbox/navigation/menu.py:392 msgid "Logging" msgstr "Ведення журналу" -#: netbox/netbox/navigation/menu.py:373 +#: netbox/netbox/navigation/menu.py:394 msgid "Notification Groups" msgstr "Групи сповіщень" -#: netbox/netbox/navigation/menu.py:374 +#: netbox/netbox/navigation/menu.py:395 msgid "Journal Entries" msgstr "Записи журналу" -#: netbox/netbox/navigation/menu.py:375 +#: netbox/netbox/navigation/menu.py:396 #: netbox/templates/core/objectchange.html:9 #: netbox/templates/core/objectchange_list.html:4 msgid "Change Log" msgstr "Журнал змін" -#: netbox/netbox/navigation/menu.py:382 netbox/templates/inc/user_menu.html:29 +#: netbox/netbox/navigation/menu.py:403 netbox/templates/inc/user_menu.html:29 msgid "Admin" msgstr "Адміністратор" -#: netbox/netbox/navigation/menu.py:430 netbox/templates/account/base.html:27 -#: netbox/templates/inc/user_menu.html:57 +#: netbox/netbox/navigation/menu.py:451 netbox/templates/account/base.html:27 +#: netbox/templates/inc/user_menu.html:52 msgid "API Tokens" msgstr "Жетони API" -#: netbox/netbox/navigation/menu.py:437 netbox/users/forms/model_forms.py:187 +#: netbox/netbox/navigation/menu.py:458 netbox/users/forms/model_forms.py:187 #: netbox/users/forms/model_forms.py:195 netbox/users/forms/model_forms.py:242 #: netbox/users/forms/model_forms.py:249 msgid "Permissions" msgstr "Дозволи" -#: netbox/netbox/navigation/menu.py:445 netbox/netbox/navigation/menu.py:449 +#: netbox/netbox/navigation/menu.py:466 netbox/netbox/navigation/menu.py:470 #: netbox/templates/core/system.html:7 msgid "System" msgstr "Система" -#: netbox/netbox/navigation/menu.py:454 netbox/netbox/navigation/menu.py:502 +#: netbox/netbox/navigation/menu.py:475 netbox/netbox/navigation/menu.py:523 #: netbox/templates/500.html:35 netbox/templates/account/preferences.html:22 #: netbox/templates/core/plugin.html:13 #: netbox/templates/core/plugin_list.html:7 @@ -11300,29 +11895,29 @@ msgstr "Система" msgid "Plugins" msgstr "Плагіни" -#: netbox/netbox/navigation/menu.py:459 +#: netbox/netbox/navigation/menu.py:480 msgid "Configuration History" msgstr "Історія налаштувань" -#: netbox/netbox/navigation/menu.py:465 netbox/templates/core/rq_task.html:8 +#: netbox/netbox/navigation/menu.py:486 netbox/templates/core/rq_task.html:8 #: netbox/templates/core/rq_task_list.html:22 msgid "Background Tasks" msgstr "Фонові завдання" -#: netbox/netbox/plugins/navigation.py:47 -#: netbox/netbox/plugins/navigation.py:69 +#: netbox/netbox/plugins/navigation.py:48 +#: netbox/netbox/plugins/navigation.py:70 msgid "Permissions must be passed as a tuple or list." msgstr "Дозволи повинні бути передані у вигляді кортежу або списку." -#: netbox/netbox/plugins/navigation.py:51 +#: netbox/netbox/plugins/navigation.py:52 msgid "Buttons must be passed as a tuple or list." msgstr "Кнопки повинні бути передані у вигляді кортежу або списку." -#: netbox/netbox/plugins/navigation.py:73 +#: netbox/netbox/plugins/navigation.py:74 msgid "Button color must be a choice within ButtonColorChoices." msgstr "Колір кнопки повинен бути вибором у ButtonColorChoices." -#: netbox/netbox/plugins/registration.py:25 +#: netbox/netbox/plugins/registration.py:26 #, python-brace-format msgid "" "PluginTemplateExtension class {template_extension} was passed as an " @@ -11331,7 +11926,7 @@ msgstr "" "Клас PluginTemplateExtension {template_extension} був переданий як " "екземпляр!" -#: netbox/netbox/plugins/registration.py:31 +#: netbox/netbox/plugins/registration.py:32 #, python-brace-format msgid "" "{template_extension} is not a subclass of " @@ -11339,17 +11934,17 @@ msgid "" msgstr "" "{template_extension} не є підкласом netbox.plugins.PluginTemplateExtension!" -#: netbox/netbox/plugins/registration.py:51 +#: netbox/netbox/plugins/registration.py:57 #, python-brace-format msgid "{item} must be an instance of netbox.plugins.PluginMenuItem" msgstr "{item} повинен бути екземпляром netbox.plugins.PluginMenuItem" -#: netbox/netbox/plugins/registration.py:62 +#: netbox/netbox/plugins/registration.py:68 #, python-brace-format msgid "{menu_link} must be an instance of netbox.plugins.PluginMenuItem" msgstr "{menu_link} повинен бути екземпляром netbox.plugins.PluginMenuItem" -#: netbox/netbox/plugins/registration.py:67 +#: netbox/netbox/plugins/registration.py:73 #, python-brace-format msgid "{button} must be an instance of netbox.plugins.PluginMenuButton" msgstr "{button} повинен бути екземпляром netbox.plugins.PluginMenuButton" @@ -11432,93 +12027,93 @@ msgstr "Не вдається додати магазини до реєстру msgid "Cannot delete stores from registry" msgstr "Неможливо видалити магазини з реєстру" -#: netbox/netbox/settings.py:760 +#: netbox/netbox/settings.py:752 msgid "Czech" msgstr "Чеська мова" -#: netbox/netbox/settings.py:761 +#: netbox/netbox/settings.py:753 msgid "Danish" msgstr "Данська мова" -#: netbox/netbox/settings.py:762 +#: netbox/netbox/settings.py:754 msgid "German" msgstr "Німецька мова" -#: netbox/netbox/settings.py:763 +#: netbox/netbox/settings.py:755 msgid "English" msgstr "Англійська мова" -#: netbox/netbox/settings.py:764 +#: netbox/netbox/settings.py:756 msgid "Spanish" msgstr "Іспанська мова" -#: netbox/netbox/settings.py:765 +#: netbox/netbox/settings.py:757 msgid "French" msgstr "Французька мова" -#: netbox/netbox/settings.py:766 +#: netbox/netbox/settings.py:758 msgid "Italian" msgstr "Італійська мова" -#: netbox/netbox/settings.py:767 +#: netbox/netbox/settings.py:759 msgid "Japanese" msgstr "Японська мова" -#: netbox/netbox/settings.py:768 +#: netbox/netbox/settings.py:760 msgid "Dutch" msgstr "Голландська мова" -#: netbox/netbox/settings.py:769 +#: netbox/netbox/settings.py:761 msgid "Polish" msgstr "Польська мова" -#: netbox/netbox/settings.py:770 +#: netbox/netbox/settings.py:762 msgid "Portuguese" msgstr "Португальська мова" -#: netbox/netbox/settings.py:771 +#: netbox/netbox/settings.py:763 msgid "Russian" msgstr "Російська мова" -#: netbox/netbox/settings.py:772 +#: netbox/netbox/settings.py:764 msgid "Turkish" msgstr "Турецька мова" -#: netbox/netbox/settings.py:773 +#: netbox/netbox/settings.py:765 msgid "Ukrainian" msgstr "Українська мова" -#: netbox/netbox/settings.py:774 +#: netbox/netbox/settings.py:766 msgid "Chinese" msgstr "Китайська мова" -#: netbox/netbox/tables/columns.py:176 +#: netbox/netbox/tables/columns.py:177 msgid "Select all" msgstr "Вибрати все" -#: netbox/netbox/tables/columns.py:189 +#: netbox/netbox/tables/columns.py:190 msgid "Toggle all" msgstr "Перемкнути всі" -#: netbox/netbox/tables/columns.py:300 +#: netbox/netbox/tables/columns.py:302 msgid "Toggle Dropdown" msgstr "Переключити випадаюче меню" -#: netbox/netbox/tables/columns.py:572 netbox/templates/core/job.html:53 +#: netbox/netbox/tables/columns.py:575 netbox/templates/core/job.html:53 msgid "Error" msgstr "Помилка" -#: netbox/netbox/tables/tables.py:58 +#: netbox/netbox/tables/tables.py:59 #, python-brace-format msgid "No {model_name} found" msgstr "{model_name} не знайдено" -#: netbox/netbox/tables/tables.py:249 +#: netbox/netbox/tables/tables.py:252 #: netbox/templates/generic/bulk_import.html:117 msgid "Field" msgstr "Поле" -#: netbox/netbox/tables/tables.py:252 +#: netbox/netbox/tables/tables.py:255 msgid "Value" msgstr "Значення" @@ -11535,24 +12130,24 @@ msgstr "" "Виникла помилка при рендерингу вибраного шаблону експорту ({template}): " "{error}" -#: netbox/netbox/views/generic/bulk_views.py:416 +#: netbox/netbox/views/generic/bulk_views.py:421 #, python-brace-format msgid "Row {i}: Object with ID {id} does not exist" msgstr "Ряд {i}: Об'єкт з ідентифікатором {id} не існує" -#: netbox/netbox/views/generic/bulk_views.py:709 -#: netbox/netbox/views/generic/bulk_views.py:910 -#: netbox/netbox/views/generic/bulk_views.py:958 +#: netbox/netbox/views/generic/bulk_views.py:708 +#: netbox/netbox/views/generic/bulk_views.py:909 +#: netbox/netbox/views/generic/bulk_views.py:957 #, python-brace-format msgid "No {object_type} were selected." msgstr "Ні {object_type} були обрані." -#: netbox/netbox/views/generic/bulk_views.py:788 +#: netbox/netbox/views/generic/bulk_views.py:787 #, python-brace-format msgid "Renamed {count} {object_type}" msgstr "Перейменовано {count} {object_type}" -#: netbox/netbox/views/generic/bulk_views.py:888 +#: netbox/netbox/views/generic/bulk_views.py:887 #, python-brace-format msgid "Deleted {count} {object_type}" msgstr "Видалено {count} {object_type}" @@ -11565,16 +12160,16 @@ msgstr "Журнал змін" msgid "Journal" msgstr "Журнал" -#: netbox/netbox/views/generic/feature_views.py:207 +#: netbox/netbox/views/generic/feature_views.py:212 msgid "Unable to synchronize data: No data file set." msgstr "Неможливо синхронізувати дані: Файл даних не встановлено." -#: netbox/netbox/views/generic/feature_views.py:211 +#: netbox/netbox/views/generic/feature_views.py:216 #, python-brace-format msgid "Synchronized data for {object_type} {object}." msgstr "Синхронізовані дані для {object_type} {object}." -#: netbox/netbox/views/generic/feature_views.py:236 +#: netbox/netbox/views/generic/feature_views.py:241 #, python-brace-format msgid "Synced {count} {object_type}" msgstr "Синхронізовано {count} {object_type}" @@ -11650,9 +12245,9 @@ msgstr "на GitHub" msgid "Home Page" msgstr "Головна сторінка" -#: netbox/templates/account/base.html:7 netbox/templates/inc/user_menu.html:45 +#: netbox/templates/account/base.html:7 netbox/templates/inc/user_menu.html:40 #: netbox/vpn/forms/bulk_edit.py:255 netbox/vpn/forms/filtersets.py:189 -#: netbox/vpn/forms/model_forms.py:379 +#: netbox/vpn/forms/model_forms.py:382 msgid "Profile" msgstr "Профіль" @@ -11664,12 +12259,12 @@ msgstr "Повідомлення" #: netbox/templates/account/base.html:16 #: netbox/templates/account/subscriptions.html:7 -#: netbox/templates/inc/user_menu.html:51 +#: netbox/templates/inc/user_menu.html:46 msgid "Subscriptions" msgstr "Підписки" #: netbox/templates/account/base.html:19 -#: netbox/templates/inc/user_menu.html:54 +#: netbox/templates/inc/user_menu.html:49 msgid "Preferences" msgstr "Налаштування" @@ -11697,6 +12292,7 @@ msgstr "Змінити пароль" #: netbox/templates/generic/object_edit.html:72 #: netbox/templates/htmx/delete_form.html:53 #: netbox/templates/htmx/delete_form.html:55 +#: netbox/templates/htmx/quick_add.html:21 #: netbox/templates/ipam/ipaddress_assign.html:28 #: netbox/templates/virtualization/cluster_add_devices.html:30 msgid "Cancel" @@ -11795,7 +12391,7 @@ msgstr "Призначені групи" #: netbox/templates/core/objectchange.html:142 #: netbox/templates/dcim/devicebay.html:59 #: netbox/templates/dcim/inc/panels/inventory_items.html:45 -#: netbox/templates/dcim/interface.html:296 +#: netbox/templates/dcim/interface.html:353 #: netbox/templates/dcim/modulebay.html:80 #: netbox/templates/extras/configcontext.html:70 #: netbox/templates/extras/eventrule.html:66 @@ -11804,6 +12400,7 @@ msgstr "Призначені групи" #: netbox/templates/extras/webhook.html:75 #: netbox/templates/inc/panel_table.html:13 #: netbox/templates/inc/panels/comments.html:10 +#: netbox/templates/inc/panels/related_objects.html:23 #: netbox/templates/ipam/inc/panels/fhrp_groups.html:56 #: netbox/templates/users/group.html:34 netbox/templates/users/group.html:44 #: netbox/templates/users/objectpermission.html:77 @@ -11841,7 +12438,7 @@ msgstr "Востаннє використано" msgid "Add a Token" msgstr "Додати Жетон" -#: netbox/templates/base/base.html:22 netbox/templates/home.html:27 +#: netbox/templates/base/base.html:23 netbox/templates/home.html:27 msgid "Home" msgstr "Головна" @@ -11883,15 +12480,16 @@ msgstr "Вихідний код" msgid "Community" msgstr "Спільнота" -#: netbox/templates/circuits/circuit.html:47 +#: netbox/templates/circuits/circuit.html:57 msgid "Install Date" msgstr "Дата встановлення" -#: netbox/templates/circuits/circuit.html:51 +#: netbox/templates/circuits/circuit.html:61 msgid "Termination Date" msgstr "Дата припинення" -#: netbox/templates/circuits/circuit.html:70 +#: netbox/templates/circuits/circuit.html:80 +#: netbox/templates/circuits/virtualcircuit.html:73 #: netbox/templates/ipam/inc/panels/fhrp_groups.html:15 msgid "Assign Group" msgstr "Призначити у групу" @@ -11939,7 +12537,7 @@ msgid "Add" msgstr "Додати" #: netbox/templates/circuits/inc/circuit_termination.html:15 -#: netbox/templates/circuits/inc/circuit_termination_fields.html:36 +#: netbox/templates/circuits/inc/circuit_termination_fields.html:37 #: netbox/templates/dcim/inc/panels/inventory_items.html:32 #: netbox/templates/dcim/powerpanel.html:56 #: netbox/templates/extras/script_list.html:30 @@ -11954,35 +12552,39 @@ msgstr "Редагувати" msgid "Swap" msgstr "Поміняти місцями" -#: netbox/templates/circuits/inc/circuit_termination_fields.html:19 +#: netbox/templates/circuits/inc/circuit_termination_fields.html:5 +msgid "Termination point" +msgstr "Точка закінчення" + +#: netbox/templates/circuits/inc/circuit_termination_fields.html:20 #: netbox/templates/dcim/consoleport.html:59 #: netbox/templates/dcim/consoleserverport.html:60 #: netbox/templates/dcim/powerfeed.html:114 msgid "Marked as connected" msgstr "Позначено як підключений" -#: netbox/templates/circuits/inc/circuit_termination_fields.html:21 +#: netbox/templates/circuits/inc/circuit_termination_fields.html:22 msgid "to" msgstr "до" -#: netbox/templates/circuits/inc/circuit_termination_fields.html:31 #: netbox/templates/circuits/inc/circuit_termination_fields.html:32 +#: netbox/templates/circuits/inc/circuit_termination_fields.html:33 #: netbox/templates/dcim/frontport.html:80 #: netbox/templates/dcim/inc/connection_endpoints.html:7 -#: netbox/templates/dcim/interface.html:154 +#: netbox/templates/dcim/interface.html:211 #: netbox/templates/dcim/rearport.html:76 msgid "Trace" msgstr "Слід" -#: netbox/templates/circuits/inc/circuit_termination_fields.html:35 +#: netbox/templates/circuits/inc/circuit_termination_fields.html:36 msgid "Edit cable" msgstr "Редагувати кабель" -#: netbox/templates/circuits/inc/circuit_termination_fields.html:40 +#: netbox/templates/circuits/inc/circuit_termination_fields.html:41 msgid "Remove cable" msgstr "Видаліть кабель" -#: netbox/templates/circuits/inc/circuit_termination_fields.html:41 +#: netbox/templates/circuits/inc/circuit_termination_fields.html:42 #: netbox/templates/dcim/bulk_disconnect.html:5 #: netbox/templates/dcim/device/consoleports.html:12 #: netbox/templates/dcim/device/consoleserverports.html:12 @@ -11995,33 +12597,33 @@ msgstr "Видаліть кабель" msgid "Disconnect" msgstr "Відключити" -#: netbox/templates/circuits/inc/circuit_termination_fields.html:48 +#: netbox/templates/circuits/inc/circuit_termination_fields.html:49 #: netbox/templates/dcim/consoleport.html:69 #: netbox/templates/dcim/consoleserverport.html:70 #: netbox/templates/dcim/frontport.html:102 -#: netbox/templates/dcim/interface.html:180 -#: netbox/templates/dcim/interface.html:200 +#: netbox/templates/dcim/interface.html:237 +#: netbox/templates/dcim/interface.html:257 #: netbox/templates/dcim/powerfeed.html:127 -#: netbox/templates/dcim/poweroutlet.html:71 -#: netbox/templates/dcim/poweroutlet.html:72 +#: netbox/templates/dcim/poweroutlet.html:81 +#: netbox/templates/dcim/poweroutlet.html:82 #: netbox/templates/dcim/powerport.html:73 #: netbox/templates/dcim/rearport.html:98 msgid "Connect" msgstr "Підключити" -#: netbox/templates/circuits/inc/circuit_termination_fields.html:70 +#: netbox/templates/circuits/inc/circuit_termination_fields.html:65 msgid "Downstream" msgstr "За течією" -#: netbox/templates/circuits/inc/circuit_termination_fields.html:71 +#: netbox/templates/circuits/inc/circuit_termination_fields.html:66 msgid "Upstream" msgstr "Вгору за течією" -#: netbox/templates/circuits/inc/circuit_termination_fields.html:80 +#: netbox/templates/circuits/inc/circuit_termination_fields.html:75 msgid "Cross-Connect" msgstr "Перехресне з'єднання" -#: netbox/templates/circuits/inc/circuit_termination_fields.html:84 +#: netbox/templates/circuits/inc/circuit_termination_fields.html:79 msgid "Patch Panel/Port" msgstr "Патч-панель/порт" @@ -12033,6 +12635,27 @@ msgstr "Додати канал зв'язку" msgid "Provider Account" msgstr "Обліковий запис постачальника" +#: netbox/templates/circuits/providernetwork.html:59 +msgid "Add a Virtual Circuit" +msgstr "Додати віртуальну схему" + +#: netbox/templates/circuits/virtualcircuit.html:91 +#: netbox/templates/vpn/tunnel.html:9 +msgid "Add Termination" +msgstr "Додати кінець" + +#: netbox/templates/circuits/virtualcircuittermination.html:23 +msgid "Virtual Circuit Termination" +msgstr "Припинення віртуальної схеми" + +#: netbox/templates/circuits/virtualcircuittype.html:10 +msgid "Add Virtual Circuit" +msgstr "Додати віртуальну схему" + +#: netbox/templates/circuits/virtualcircuittype.html:19 +msgid "Virtual Circuit Type" +msgstr "Тип віртуальної схеми" + #: netbox/templates/core/configrevision.html:35 msgid "Configuration Data" msgstr "Дані конфігурації" @@ -12066,7 +12689,7 @@ msgstr "Змінено" #: netbox/templates/core/datafile.html:42 #: netbox/templates/ipam/iprange.html:25 #: netbox/templates/virtualization/virtualdisk.html:29 -#: netbox/virtualization/tables/virtualmachines.py:198 +#: netbox/virtualization/tables/virtualmachines.py:169 msgid "Size" msgstr "Розмір" @@ -12505,8 +13128,8 @@ msgstr "Перейменувати вибране" #: netbox/templates/dcim/consoleport.html:65 #: netbox/templates/dcim/consoleserverport.html:66 #: netbox/templates/dcim/frontport.html:98 -#: netbox/templates/dcim/interface.html:176 -#: netbox/templates/dcim/poweroutlet.html:69 +#: netbox/templates/dcim/interface.html:233 +#: netbox/templates/dcim/poweroutlet.html:79 #: netbox/templates/dcim/powerport.html:69 msgid "Not Connected" msgstr "Не підключено" @@ -12529,7 +13152,7 @@ msgid "Map" msgstr "Карта" #: netbox/templates/dcim/device.html:108 -#: netbox/templates/dcim/inventoryitem.html:56 +#: netbox/templates/dcim/inventoryitem.html:60 #: netbox/templates/dcim/module.html:81 #: netbox/templates/dcim/modulebay.html:74 netbox/templates/dcim/rack.html:61 msgid "Asset Tag" @@ -12545,7 +13168,7 @@ msgstr "Створіть джерело живлення постійного с #: netbox/templates/dcim/device.html:175 #: netbox/templates/dcim/device_edit.html:64 -#: netbox/virtualization/forms/model_forms.py:223 +#: netbox/virtualization/forms/model_forms.py:230 msgid "Management" msgstr "Керування" @@ -12662,35 +13285,6 @@ msgstr "Додати порт живлення" msgid "Add Rear Ports" msgstr "Додати задні порти" -#: netbox/templates/dcim/device/render_config.html:5 -#: netbox/templates/virtualization/virtualmachine/render_config.html:5 -msgid "Config" -msgstr "Конфігурація" - -#: netbox/templates/dcim/device/render_config.html:35 -#: netbox/templates/virtualization/virtualmachine/render_config.html:35 -msgid "Context Data" -msgstr "Контекстні дані" - -#: netbox/templates/dcim/device/render_config.html:55 -#: netbox/templates/virtualization/virtualmachine/render_config.html:55 -msgid "Rendered Config" -msgstr "Відтворена конфігурація" - -#: netbox/templates/dcim/device/render_config.html:57 -#: netbox/templates/virtualization/virtualmachine/render_config.html:57 -msgid "Download" -msgstr "Завантажити" - -#: netbox/templates/dcim/device/render_config.html:64 -#: netbox/templates/virtualization/virtualmachine/render_config.html:64 -msgid "Error rendering template" -msgstr "Помилка візуалізації шаблону" - -#: netbox/templates/dcim/device/render_config.html:70 -msgid "No configuration template has been assigned for this device." -msgstr "" - #: netbox/templates/dcim/device_edit.html:44 msgid "Parent Bay" msgstr "Батьківський відсік" @@ -12757,12 +13351,12 @@ msgid "VM Role" msgstr "Роль віртуальної машини" #: netbox/templates/dcim/devicetype.html:18 -#: netbox/templates/dcim/moduletype.html:29 +#: netbox/templates/dcim/moduletype.html:31 msgid "Model Name" msgstr "Назва моделі" #: netbox/templates/dcim/devicetype.html:25 -#: netbox/templates/dcim/moduletype.html:33 +#: netbox/templates/dcim/moduletype.html:35 msgid "Part Number" msgstr "Номер частини" @@ -12787,8 +13381,8 @@ msgid "Rear Port Position" msgstr "Положення порту ззаду" #: netbox/templates/dcim/frontport.html:72 -#: netbox/templates/dcim/interface.html:144 -#: netbox/templates/dcim/poweroutlet.html:63 +#: netbox/templates/dcim/interface.html:201 +#: netbox/templates/dcim/poweroutlet.html:73 #: netbox/templates/dcim/powerport.html:63 #: netbox/templates/dcim/rearport.html:68 msgid "Marked as Connected" @@ -12888,77 +13482,79 @@ msgid "PoE Type" msgstr "Тип PoE" #: netbox/templates/dcim/interface.html:81 -#: netbox/templates/virtualization/vminterface.html:63 +#: netbox/templates/virtualization/vminterface.html:55 +#: netbox/virtualization/forms/model_forms.py:395 msgid "802.1Q Mode" msgstr "Режим 802.1Q" -#: netbox/templates/dcim/interface.html:125 -#: netbox/templates/virtualization/vminterface.html:59 -msgid "MAC Address" -msgstr "MAC-адреса" +#: netbox/templates/dcim/interface.html:156 +#: netbox/templates/virtualization/vminterface.html:88 +msgid "VLAN Translation" +msgstr "Переклад VLAN" -#: netbox/templates/dcim/interface.html:151 +#: netbox/templates/dcim/interface.html:208 msgid "Wireless Link" msgstr "Бездротове з'єднання" -#: netbox/templates/dcim/interface.html:218 netbox/vpn/choices.py:63 -msgid "Peer" -msgstr "Мережевий сусід" - -#: netbox/templates/dcim/interface.html:230 +#: netbox/templates/dcim/interface.html:287 #: netbox/templates/wireless/inc/wirelesslink_interface.html:26 msgid "Channel" msgstr "Канал" -#: netbox/templates/dcim/interface.html:239 +#: netbox/templates/dcim/interface.html:296 #: netbox/templates/wireless/inc/wirelesslink_interface.html:32 msgid "Channel Frequency" msgstr "Частота каналу" -#: netbox/templates/dcim/interface.html:242 -#: netbox/templates/dcim/interface.html:250 -#: netbox/templates/dcim/interface.html:261 -#: netbox/templates/dcim/interface.html:269 +#: netbox/templates/dcim/interface.html:299 +#: netbox/templates/dcim/interface.html:307 +#: netbox/templates/dcim/interface.html:318 +#: netbox/templates/dcim/interface.html:326 msgid "MHz" msgstr "МГц" -#: netbox/templates/dcim/interface.html:258 +#: netbox/templates/dcim/interface.html:315 #: netbox/templates/wireless/inc/wirelesslink_interface.html:42 msgid "Channel Width" msgstr "Ширина каналу" -#: netbox/templates/dcim/interface.html:285 +#: netbox/templates/dcim/interface.html:342 #: netbox/templates/wireless/wirelesslan.html:14 #: netbox/templates/wireless/wirelesslink.html:21 -#: netbox/wireless/forms/bulk_edit.py:60 -#: netbox/wireless/forms/bulk_edit.py:102 -#: netbox/wireless/forms/filtersets.py:40 -#: netbox/wireless/forms/filtersets.py:80 netbox/wireless/models.py:82 -#: netbox/wireless/models.py:156 netbox/wireless/tables/wirelesslan.py:44 +#: netbox/wireless/forms/bulk_edit.py:62 +#: netbox/wireless/forms/bulk_edit.py:105 +#: netbox/wireless/forms/filtersets.py:43 +#: netbox/wireless/forms/filtersets.py:108 netbox/wireless/models.py:82 +#: netbox/wireless/models.py:153 netbox/wireless/tables/wirelesslan.py:44 msgid "SSID" msgstr "SSID" -#: netbox/templates/dcim/interface.html:305 +#: netbox/templates/dcim/interface.html:362 msgid "LAG Members" msgstr "Члени LAG" -#: netbox/templates/dcim/interface.html:323 +#: netbox/templates/dcim/interface.html:380 msgid "No member interfaces" msgstr "Немає інтерфейсів учасників" -#: netbox/templates/dcim/interface.html:343 +#: netbox/templates/dcim/interface.html:400 #: netbox/templates/ipam/fhrpgroup.html:73 #: netbox/templates/ipam/iprange/ip_addresses.html:7 #: netbox/templates/ipam/prefix/ip_addresses.html:7 -#: netbox/templates/virtualization/vminterface.html:89 +#: netbox/templates/virtualization/vminterface.html:105 msgid "Add IP Address" msgstr "Додати IP-адресу" +#: netbox/templates/dcim/interface.html:417 +#: netbox/templates/virtualization/vminterface.html:123 +msgid "Add MAC Address" +msgstr "Додати MAC-адресу" + #: netbox/templates/dcim/inventoryitem.html:24 msgid "Parent Item" msgstr "Батьківський елемент" -#: netbox/templates/dcim/inventoryitem.html:48 +#: netbox/templates/dcim/inventoryitem.html:52 msgid "Part ID" msgstr "Ідентифікатор частини" @@ -12978,6 +13574,10 @@ msgstr "Додати місцезнаходження" msgid "Add a Device" msgstr "Додати пристрою" +#: netbox/templates/dcim/macaddress.html:36 +msgid "Primary for interface" +msgstr "Основний для інтерфейсу" + #: netbox/templates/dcim/manufacturer.html:16 msgid "Add Device Type" msgstr "Додати тип пристрою" @@ -13008,7 +13608,7 @@ msgctxt "Abbreviation for amperes" msgid "A" msgstr "А" -#: netbox/templates/dcim/poweroutlet.html:48 +#: netbox/templates/dcim/poweroutlet.html:58 msgid "Feed Leg" msgstr "Фідер живлення" @@ -13439,11 +14039,19 @@ msgstr "Не вдається завантажити вміст. Невірна msgid "No content found" msgstr "Вмісту не знайдено" -#: netbox/templates/extras/dashboard/widgets/rssfeed.html:18 +#: netbox/templates/extras/dashboard/widgets/rssfeed.html:17 +msgid "" +"This RSS feed requires an external connection. Check the ISOLATED_DEPLOYMENT" +" setting." +msgstr "" +"Цей RSS-канал вимагає зовнішнього підключення. Перевірте налаштування " +"ISOLATED_DEPLOYMENT." + +#: netbox/templates/extras/dashboard/widgets/rssfeed.html:22 msgid "There was a problem fetching the RSS feed" msgstr "Виникла проблема з отриманням RSS-каналу" -#: netbox/templates/extras/dashboard/widgets/rssfeed.html:21 +#: netbox/templates/extras/dashboard/widgets/rssfeed.html:25 msgid "HTTP" msgstr "HTTP" @@ -13513,6 +14121,30 @@ msgstr "Джерело контекстів" msgid "New Journal Entry" msgstr "Новий запис журналу" +#: netbox/templates/extras/object_render_config.html:6 +msgid "Config" +msgstr "Конфігурація" + +#: netbox/templates/extras/object_render_config.html:36 +msgid "Context Data" +msgstr "Контекстні дані" + +#: netbox/templates/extras/object_render_config.html:56 +msgid "Rendered Config" +msgstr "Відтворена конфігурація" + +#: netbox/templates/extras/object_render_config.html:58 +msgid "Download" +msgstr "Завантажити" + +#: netbox/templates/extras/object_render_config.html:65 +msgid "Error rendering template" +msgstr "Помилка візуалізації шаблону" + +#: netbox/templates/extras/object_render_config.html:71 +msgid "No configuration template has been assigned." +msgstr "Жоден шаблон конфігурації не призначено." + #: netbox/templates/extras/report/base.html:30 msgid "Report" msgstr "Звіт" @@ -13600,7 +14232,7 @@ msgstr "Будь-який" msgid "Tagged Item Types" msgstr "Позначені типи предметів" -#: netbox/templates/extras/tag.html:81 +#: netbox/templates/extras/tag.html:82 msgid "Tagged Objects" msgstr "Позначені об'єкти" @@ -13882,6 +14514,21 @@ msgstr "Усі повідомлення" msgid "Select" msgstr "Вибрати" +#: netbox/templates/htmx/quick_add.html:7 +msgid "Quick Add" +msgstr "Швидке додавання" + +#: netbox/templates/htmx/quick_add_created.html:18 +#, python-format +msgid "" +"\n" +" Created %(object_type)s %(object)s\n" +" " +msgstr "" +"\n" +" Створено %(object_type)s %(object)s\n" +" " + #: netbox/templates/inc/filter_list.html:43 #: netbox/utilities/templates/helpers/table_config_form.html:39 msgid "Reset" @@ -13953,15 +14600,11 @@ msgstr "Почистити замовлення" msgid "Help center" msgstr "Довідковий центр" -#: netbox/templates/inc/user_menu.html:41 -msgid "Django Admin" -msgstr "" - -#: netbox/templates/inc/user_menu.html:61 +#: netbox/templates/inc/user_menu.html:56 msgid "Log Out" msgstr "Вийти" -#: netbox/templates/inc/user_menu.html:68 netbox/templates/login.html:38 +#: netbox/templates/inc/user_menu.html:63 netbox/templates/login.html:38 msgid "Log In" msgstr "Увійти" @@ -14058,43 +14701,43 @@ msgstr "Початкова адреса" msgid "Ending Address" msgstr "Кінцева адреса" -#: netbox/templates/ipam/iprange.html:33 netbox/templates/ipam/prefix.html:110 +#: netbox/templates/ipam/iprange.html:33 netbox/templates/ipam/prefix.html:106 msgid "Marked fully utilized" msgstr "Позначений повністю використаний" -#: netbox/templates/ipam/prefix.html:99 +#: netbox/templates/ipam/prefix.html:95 msgid "Addressing Details" msgstr "Деталі адресації" -#: netbox/templates/ipam/prefix.html:118 +#: netbox/templates/ipam/prefix.html:114 msgid "Child IPs" msgstr "Підпорядковані IP-адреси" -#: netbox/templates/ipam/prefix.html:126 +#: netbox/templates/ipam/prefix.html:122 msgid "Available IPs" msgstr "Доступні IP-адреси" -#: netbox/templates/ipam/prefix.html:138 +#: netbox/templates/ipam/prefix.html:134 msgid "First available IP" msgstr "Перший доступний IP" -#: netbox/templates/ipam/prefix.html:179 +#: netbox/templates/ipam/prefix.html:175 msgid "Prefix Details" msgstr "Деталі префікса" -#: netbox/templates/ipam/prefix.html:185 +#: netbox/templates/ipam/prefix.html:181 msgid "Network Address" msgstr "Мережева адреса" -#: netbox/templates/ipam/prefix.html:189 +#: netbox/templates/ipam/prefix.html:185 msgid "Network Mask" msgstr "Мережева маска" -#: netbox/templates/ipam/prefix.html:193 +#: netbox/templates/ipam/prefix.html:189 msgid "Wildcard Mask" msgstr "Маска підстановки" -#: netbox/templates/ipam/prefix.html:197 +#: netbox/templates/ipam/prefix.html:193 msgid "Broadcast Address" msgstr "Широкомовна адреса" @@ -14134,14 +14777,30 @@ msgstr "Імпорт L2VPN'ів" msgid "Exporting L2VPNs" msgstr "Експорт L2VPN'ів" -#: netbox/templates/ipam/vlan.html:88 +#: netbox/templates/ipam/vlan.html:66 +msgid "Q-in-Q Role" +msgstr "Роль Q-in-Q" + +#: netbox/templates/ipam/vlan.html:104 msgid "Add a Prefix" msgstr "Додати префікс" +#: netbox/templates/ipam/vlan.html:114 +msgid "Customer VLANs" +msgstr "Клієнтські VLAN" + +#: netbox/templates/ipam/vlan.html:118 +msgid "Add a VLAN" +msgstr "Додати VLAN" + #: netbox/templates/ipam/vlangroup.html:18 msgid "Add VLAN" msgstr "Додати VLAN" +#: netbox/templates/ipam/vlantranslationpolicy.html:51 +msgid "Add Rule" +msgstr "Додати правило" + #: netbox/templates/ipam/vrf.html:16 msgid "Route Distinguisher" msgstr "Розрізнювач маршруту" @@ -14219,7 +14878,7 @@ msgstr "" #: netbox/templates/tenancy/contact.html:18 netbox/tenancy/filtersets.py:147 #: netbox/tenancy/forms/bulk_edit.py:137 -#: netbox/tenancy/forms/filtersets.py:102 netbox/tenancy/forms/forms.py:56 +#: netbox/tenancy/forms/filtersets.py:102 netbox/tenancy/forms/forms.py:57 #: netbox/tenancy/forms/model_forms.py:106 #: netbox/tenancy/forms/model_forms.py:130 #: netbox/tenancy/tables/contacts.py:98 @@ -14237,7 +14896,7 @@ msgid "Phone" msgstr "Телефон" #: netbox/templates/tenancy/contactgroup.html:18 -#: netbox/tenancy/forms/forms.py:66 netbox/tenancy/forms/model_forms.py:75 +#: netbox/tenancy/forms/forms.py:67 netbox/tenancy/forms/model_forms.py:75 msgid "Contact Group" msgstr "Контактна група" @@ -14246,7 +14905,7 @@ msgid "Add Contact Group" msgstr "Додати групу контактів" #: netbox/templates/tenancy/contactrole.html:15 -#: netbox/tenancy/filtersets.py:152 netbox/tenancy/forms/forms.py:61 +#: netbox/tenancy/filtersets.py:152 netbox/tenancy/forms/forms.py:62 #: netbox/tenancy/forms/model_forms.py:87 msgid "Contact Role" msgstr "Контактна роль" @@ -14260,8 +14919,8 @@ msgid "Add Tenant" msgstr "Додати орендаря" #: netbox/templates/tenancy/tenantgroup.html:26 -#: netbox/tenancy/forms/model_forms.py:32 netbox/tenancy/tables/columns.py:51 -#: netbox/tenancy/tables/columns.py:61 +#: netbox/tenancy/forms/model_forms.py:32 netbox/tenancy/tables/columns.py:36 +#: netbox/tenancy/tables/columns.py:46 msgid "Tenant Group" msgstr "Група орендарів" @@ -14292,21 +14951,21 @@ msgstr "Обмеження" msgid "Assigned Users" msgstr "Призначені користувачі" -#: netbox/templates/virtualization/cluster.html:52 +#: netbox/templates/virtualization/cluster.html:56 msgid "Allocated Resources" msgstr "Виділені ресурси" -#: netbox/templates/virtualization/cluster.html:55 +#: netbox/templates/virtualization/cluster.html:59 #: netbox/templates/virtualization/virtualmachine.html:125 msgid "Virtual CPUs" msgstr "Віртуальні процесори" -#: netbox/templates/virtualization/cluster.html:59 +#: netbox/templates/virtualization/cluster.html:63 #: netbox/templates/virtualization/virtualmachine.html:129 msgid "Memory" msgstr "Пам'ять" -#: netbox/templates/virtualization/cluster.html:69 +#: netbox/templates/virtualization/cluster.html:73 #: netbox/templates/virtualization/virtualmachine.html:140 msgid "Disk Space" msgstr "Місце на диску" @@ -14342,13 +15001,13 @@ msgid "Add Cluster" msgstr "Додати кластер" #: netbox/templates/virtualization/clustergroup.html:19 -#: netbox/virtualization/forms/model_forms.py:50 +#: netbox/virtualization/forms/model_forms.py:53 msgid "Cluster Group" msgstr "Кластерна група" #: netbox/templates/virtualization/clustertype.html:19 #: netbox/templates/virtualization/virtualmachine.html:110 -#: netbox/virtualization/forms/model_forms.py:36 +#: netbox/virtualization/forms/model_forms.py:39 msgid "Cluster Type" msgstr "Тип кластера" @@ -14357,8 +15016,8 @@ msgid "Virtual Disk" msgstr "Віртуальний диск" #: netbox/templates/virtualization/virtualmachine.html:122 -#: netbox/virtualization/forms/bulk_edit.py:190 -#: netbox/virtualization/forms/model_forms.py:224 +#: netbox/virtualization/forms/bulk_edit.py:172 +#: netbox/virtualization/forms/model_forms.py:231 msgid "Resources" msgstr "Ресурси" @@ -14366,10 +15025,6 @@ msgstr "Ресурси" msgid "Add Virtual Disk" msgstr "Додати віртуальний диск" -#: netbox/templates/virtualization/virtualmachine/render_config.html:70 -msgid "No configuration template has been assigned for this virtual machine." -msgstr "" - #: netbox/templates/vpn/ikepolicy.html:10 #: netbox/templates/vpn/ipsecprofile.html:33 netbox/vpn/tables/crypto.py:166 msgid "IKE Policy" @@ -14392,7 +15047,7 @@ msgstr "Показати таємницю" #: netbox/templates/vpn/ipsecpolicy.html:45 #: netbox/templates/vpn/ipsecprofile.html:52 #: netbox/templates/vpn/ipsecprofile.html:77 -#: netbox/vpn/forms/model_forms.py:316 netbox/vpn/forms/model_forms.py:352 +#: netbox/vpn/forms/model_forms.py:317 netbox/vpn/forms/model_forms.py:354 #: netbox/vpn/tables/crypto.py:68 netbox/vpn/tables/crypto.py:134 msgid "Proposals" msgstr "Налаштування" @@ -14438,12 +15093,12 @@ msgid "IPSec Policy" msgstr "Політика IPsec" #: netbox/templates/vpn/ipsecpolicy.html:21 netbox/vpn/forms/bulk_edit.py:210 -#: netbox/vpn/models/crypto.py:193 +#: netbox/vpn/models/crypto.py:191 msgid "PFS group" msgstr "Група PFS" #: netbox/templates/vpn/ipsecprofile.html:10 -#: netbox/vpn/forms/model_forms.py:54 +#: netbox/vpn/forms/model_forms.py:55 msgid "IPSec Profile" msgstr "Профіль IPsec" @@ -14469,10 +15124,6 @@ msgstr "L2VPN Атрибути" msgid "Add a Termination" msgstr "Додати кінець" -#: netbox/templates/vpn/tunnel.html:9 -msgid "Add Termination" -msgstr "Додати кінець" - #: netbox/templates/vpn/tunnel.html:37 netbox/vpn/forms/bulk_edit.py:49 #: netbox/vpn/forms/bulk_import.py:48 netbox/vpn/forms/filtersets.py:57 msgid "Encapsulation" @@ -14480,7 +15131,7 @@ msgstr "Інкапсуляція" #: netbox/templates/vpn/tunnel.html:41 netbox/vpn/forms/bulk_edit.py:55 #: netbox/vpn/forms/bulk_import.py:53 netbox/vpn/forms/filtersets.py:64 -#: netbox/vpn/models/crypto.py:250 netbox/vpn/tables/tunnels.py:51 +#: netbox/vpn/models/crypto.py:246 netbox/vpn/tables/tunnels.py:51 msgid "IPSec profile" msgstr "Профіль IPsec" @@ -14503,8 +15154,8 @@ msgid "Tunnel Termination" msgstr "Кінець тунелю" #: netbox/templates/vpn/tunneltermination.html:35 -#: netbox/vpn/forms/bulk_import.py:107 netbox/vpn/forms/model_forms.py:102 -#: netbox/vpn/forms/model_forms.py:138 netbox/vpn/forms/model_forms.py:247 +#: netbox/vpn/forms/bulk_import.py:107 netbox/vpn/forms/model_forms.py:103 +#: netbox/vpn/forms/model_forms.py:139 netbox/vpn/forms/model_forms.py:248 #: netbox/vpn/tables/tunnels.py:101 msgid "Outside IP" msgstr "За межами IP" @@ -14527,7 +15178,7 @@ msgctxt "Abbreviation for megahertz" msgid "MHz" msgstr "МГц" -#: netbox/templates/wireless/wirelesslan.html:57 +#: netbox/templates/wireless/wirelesslan.html:65 msgid "Attached Interfaces" msgstr "Прикріплені інтерфейси" @@ -14536,7 +15187,7 @@ msgid "Add Wireless LAN" msgstr "Додати бездротову локальну мережу" #: netbox/templates/wireless/wirelesslangroup.html:26 -#: netbox/wireless/forms/model_forms.py:28 +#: netbox/wireless/forms/model_forms.py:29 msgid "Wireless LAN Group" msgstr "Група бездротової локальної мережі" @@ -14548,13 +15199,6 @@ msgstr "Додати групу бездротової локальної мер msgid "Link Properties" msgstr "Властивості посилання" -#: netbox/templates/wireless/wirelesslink.html:38 -#: netbox/wireless/forms/bulk_edit.py:129 -#: netbox/wireless/forms/filtersets.py:102 -#: netbox/wireless/forms/model_forms.py:165 -msgid "Distance" -msgstr "Відстань" - #: netbox/tenancy/filtersets.py:28 msgid "Parent contact group (ID)" msgstr "Батьківська контактна група (ідентифікатор)" @@ -14625,47 +15269,47 @@ msgstr "контактна група" msgid "contact groups" msgstr "контактні групи" -#: netbox/tenancy/models/contacts.py:48 +#: netbox/tenancy/models/contacts.py:42 msgid "contact role" msgstr "контактна роль" -#: netbox/tenancy/models/contacts.py:49 +#: netbox/tenancy/models/contacts.py:43 msgid "contact roles" msgstr "контактні ролі" -#: netbox/tenancy/models/contacts.py:68 +#: netbox/tenancy/models/contacts.py:63 msgid "title" msgstr "назва" -#: netbox/tenancy/models/contacts.py:73 +#: netbox/tenancy/models/contacts.py:68 msgid "phone" msgstr "телефон" -#: netbox/tenancy/models/contacts.py:78 +#: netbox/tenancy/models/contacts.py:73 msgid "email" msgstr "електронна скринька" -#: netbox/tenancy/models/contacts.py:87 +#: netbox/tenancy/models/contacts.py:82 msgid "link" msgstr "посилання" -#: netbox/tenancy/models/contacts.py:103 +#: netbox/tenancy/models/contacts.py:98 msgid "contact" msgstr "контакт" -#: netbox/tenancy/models/contacts.py:104 +#: netbox/tenancy/models/contacts.py:99 msgid "contacts" msgstr "контакти" -#: netbox/tenancy/models/contacts.py:153 +#: netbox/tenancy/models/contacts.py:146 msgid "contact assignment" msgstr "призначення контакта" -#: netbox/tenancy/models/contacts.py:154 +#: netbox/tenancy/models/contacts.py:147 msgid "contact assignments" msgstr "призначення контакта" -#: netbox/tenancy/models/contacts.py:170 +#: netbox/tenancy/models/contacts.py:163 #, python-brace-format msgid "Contacts cannot be assigned to this object type ({type})." msgstr "Контакти не можуть бути призначені для цього типу об'єкта ({type})." @@ -14678,19 +15322,19 @@ msgstr "група орендарів" msgid "tenant groups" msgstr "групи орендарів" -#: netbox/tenancy/models/tenants.py:70 +#: netbox/tenancy/models/tenants.py:68 msgid "Tenant name must be unique per group." msgstr "Ім'я орендаря має бути унікальним для кожної групи." -#: netbox/tenancy/models/tenants.py:80 +#: netbox/tenancy/models/tenants.py:78 msgid "Tenant slug must be unique per group." msgstr "Скоречення орендаря повинен бути унікальним для кожної групи." -#: netbox/tenancy/models/tenants.py:88 +#: netbox/tenancy/models/tenants.py:86 msgid "tenant" msgstr "орендар" -#: netbox/tenancy/models/tenants.py:89 +#: netbox/tenancy/models/tenants.py:87 msgid "tenants" msgstr "орендарі" @@ -14916,7 +15560,7 @@ msgstr "жетон" msgid "tokens" msgstr "жетонів" -#: netbox/users/models/users.py:57 netbox/vpn/models/crypto.py:42 +#: netbox/users/models/users.py:57 netbox/vpn/models/crypto.py:43 msgid "group" msgstr "групи" @@ -14964,25 +15608,25 @@ msgstr "" msgid "{name} has a key defined but CHOICES is not a list" msgstr "{name} має визначений ключ, але ВИБІР не є списком" -#: netbox/utilities/conversion.py:19 +#: netbox/utilities/conversion.py:20 msgid "Weight must be a positive number" msgstr "Вага повинна бути додатним числом" -#: netbox/utilities/conversion.py:21 +#: netbox/utilities/conversion.py:22 #, python-brace-format msgid "Invalid value '{weight}' for weight (must be a number)" msgstr "Невірне значення '{weight}' для ваги (має бути число)" -#: netbox/utilities/conversion.py:32 netbox/utilities/conversion.py:62 +#: netbox/utilities/conversion.py:33 netbox/utilities/conversion.py:63 #, python-brace-format msgid "Unknown unit {unit}. Must be one of the following: {valid_units}" msgstr "Невідома одиниця {unit}. Повинна бути одна з наступних: {valid_units}" -#: netbox/utilities/conversion.py:45 +#: netbox/utilities/conversion.py:46 msgid "Length must be a positive number" msgstr "Довжина повинна бути додатним числом" -#: netbox/utilities/conversion.py:47 +#: netbox/utilities/conversion.py:48 #, python-brace-format msgid "Invalid value '{length}' for length (must be a number)" msgstr "Невірне значення '{length}' для довжини (має бути число)" @@ -15000,11 +15644,11 @@ msgstr "" msgid "More than 50" msgstr "Більше 50" -#: netbox/utilities/fields.py:30 +#: netbox/utilities/fields.py:29 msgid "RGB color in hexadecimal. Example: " msgstr "RGB-колір шістнадцятковим представленням. Приклад: " -#: netbox/utilities/fields.py:159 +#: netbox/utilities/fields.py:158 #, python-format msgid "" "%s(%r) is invalid. to_model parameter to CounterCacheField must be a string " @@ -15013,7 +15657,7 @@ msgstr "" "%s(%r) невірний. Параметр to_model до CounterCacheField повинен бути рядком " "у форматі 'app.model'" -#: netbox/utilities/fields.py:169 +#: netbox/utilities/fields.py:168 #, python-format msgid "" "%s(%r) is invalid. to_field parameter to CounterCacheField must be a string " @@ -15241,14 +15885,14 @@ msgstr "Невірний атрибут пов'язаного об'єкта дл msgid "Required column header \"{header}\" not found." msgstr "Не знайдено необхідний заголовок стовпця \"{header}\"." -#: netbox/utilities/forms/widgets/apiselect.py:124 +#: netbox/utilities/forms/widgets/apiselect.py:133 #, python-brace-format msgid "Missing required value for dynamic query param: '{dynamic_params}'" msgstr "" "Відсутнє необхідне значення для параметра динамічного запиту: " "'{dynamic_params}'" -#: netbox/utilities/forms/widgets/apiselect.py:141 +#: netbox/utilities/forms/widgets/apiselect.py:150 #, python-brace-format msgid "Missing required value for static query param: '{static_params}'" msgstr "" @@ -15375,10 +16019,14 @@ msgstr "Пошук…" msgid "Search NetBox" msgstr "Пошук у NetBox" -#: netbox/utilities/templates/widgets/apiselect.html:7 +#: netbox/utilities/templates/widgets/apiselect.html:8 msgid "Open selector" msgstr "Відкрити селектор" +#: netbox/utilities/templates/widgets/apiselect.html:22 +msgid "Quick add" +msgstr "Швидке додавання" + #: netbox/utilities/templates/widgets/markdown_input.html:6 msgid "Write" msgstr "Написати" @@ -15413,115 +16061,121 @@ msgstr "" "ObjectPermissionRequiredMixin можна використовувати лише у представленнях, " "які визначають базовий набір запитів" -#: netbox/virtualization/filtersets.py:79 +#: netbox/virtualization/choices.py:50 +msgid "Paused" +msgstr "Призупинено" + +#: netbox/virtualization/filtersets.py:45 msgid "Parent group (ID)" msgstr "Батьківська група (ідентифікатор)" -#: netbox/virtualization/filtersets.py:85 +#: netbox/virtualization/filtersets.py:51 msgid "Parent group (slug)" msgstr "Батьківська група (скорочення)" -#: netbox/virtualization/filtersets.py:89 -#: netbox/virtualization/filtersets.py:141 +#: netbox/virtualization/filtersets.py:55 +#: netbox/virtualization/filtersets.py:107 msgid "Cluster type (ID)" msgstr "Тип кластера (ідентифікатор)" -#: netbox/virtualization/filtersets.py:151 -#: netbox/virtualization/filtersets.py:271 +#: netbox/virtualization/filtersets.py:117 +#: netbox/virtualization/filtersets.py:237 msgid "Cluster (ID)" msgstr "Кластер (ідентифікатор)" -#: netbox/virtualization/forms/bulk_edit.py:166 -#: netbox/virtualization/models/virtualmachines.py:115 +#: netbox/virtualization/forms/bulk_edit.py:148 +#: netbox/virtualization/models/virtualmachines.py:110 msgid "vCPUs" msgstr "vCPU" -#: netbox/virtualization/forms/bulk_edit.py:170 +#: netbox/virtualization/forms/bulk_edit.py:152 msgid "Memory (MB)" msgstr "Пам'ять (МБ)" -#: netbox/virtualization/forms/bulk_edit.py:174 +#: netbox/virtualization/forms/bulk_edit.py:156 msgid "Disk (MB)" msgstr "Диск (МБ)" -#: netbox/virtualization/forms/bulk_edit.py:334 -#: netbox/virtualization/forms/filtersets.py:251 +#: netbox/virtualization/forms/bulk_edit.py:324 +#: netbox/virtualization/forms/filtersets.py:256 msgid "Size (MB)" msgstr "Розмір (МБ)" -#: netbox/virtualization/forms/bulk_import.py:44 +#: netbox/virtualization/forms/bulk_import.py:45 msgid "Type of cluster" msgstr "Тип кластера" -#: netbox/virtualization/forms/bulk_import.py:51 +#: netbox/virtualization/forms/bulk_import.py:52 msgid "Assigned cluster group" msgstr "Призначена група кластерів" -#: netbox/virtualization/forms/bulk_import.py:96 +#: netbox/virtualization/forms/bulk_import.py:102 msgid "Assigned cluster" msgstr "Призначений кластер" -#: netbox/virtualization/forms/bulk_import.py:103 +#: netbox/virtualization/forms/bulk_import.py:109 msgid "Assigned device within cluster" msgstr "Призначений пристрій у кластері" -#: netbox/virtualization/forms/filtersets.py:183 +#: netbox/virtualization/forms/filtersets.py:188 msgid "Serial number" msgstr "Серійний номер" -#: netbox/virtualization/forms/model_forms.py:153 +#: netbox/virtualization/forms/model_forms.py:158 #, python-brace-format msgid "" -"{device} belongs to a different site ({device_site}) than the cluster " -"({cluster_site})" +"{device} belongs to a different {scope_field} ({device_scope}) than the " +"cluster ({cluster_scope})" msgstr "" +"{device} належить до іншого {scope_field} ({device_scope}) ніж кластер " +"({cluster_scope})" -#: netbox/virtualization/forms/model_forms.py:192 +#: netbox/virtualization/forms/model_forms.py:199 msgid "Optionally pin this VM to a specific host device within the cluster" msgstr "" "За бажанням прикріпити цю віртуальну машину до певного хост-пристрою в " "кластері" -#: netbox/virtualization/forms/model_forms.py:221 +#: netbox/virtualization/forms/model_forms.py:228 msgid "Site/Cluster" msgstr "Тех. майданчик/Кластер" -#: netbox/virtualization/forms/model_forms.py:244 +#: netbox/virtualization/forms/model_forms.py:251 msgid "Disk size is managed via the attachment of virtual disks." msgstr "" "Управління розміром диска здійснюється за допомогою приєднання віртуальних " "дисків." -#: netbox/virtualization/forms/model_forms.py:372 -#: netbox/virtualization/tables/virtualmachines.py:111 +#: netbox/virtualization/forms/model_forms.py:405 +#: netbox/virtualization/tables/virtualmachines.py:81 msgid "Disk" msgstr "Диск" -#: netbox/virtualization/models/clusters.py:25 +#: netbox/virtualization/models/clusters.py:26 msgid "cluster type" msgstr "тип кластера" -#: netbox/virtualization/models/clusters.py:26 +#: netbox/virtualization/models/clusters.py:27 msgid "cluster types" msgstr "типи кластерів" -#: netbox/virtualization/models/clusters.py:45 +#: netbox/virtualization/models/clusters.py:43 msgid "cluster group" msgstr "кластерна група" -#: netbox/virtualization/models/clusters.py:46 +#: netbox/virtualization/models/clusters.py:44 msgid "cluster groups" msgstr "кластерні групи" -#: netbox/virtualization/models/clusters.py:121 +#: netbox/virtualization/models/clusters.py:110 msgid "cluster" msgstr "кластер" -#: netbox/virtualization/models/clusters.py:122 +#: netbox/virtualization/models/clusters.py:111 msgid "clusters" msgstr "кластери" -#: netbox/virtualization/models/clusters.py:141 +#: netbox/virtualization/models/clusters.py:137 #, python-brace-format msgid "" "{count} devices are assigned as hosts for this cluster but are not in site " @@ -15530,51 +16184,60 @@ msgstr "" "{count} пристрої призначені як хости для цього кластера, але не знаходяться " "на тех. майданчику{site}" -#: netbox/virtualization/models/virtualmachines.py:123 +#: netbox/virtualization/models/clusters.py:144 +#, python-brace-format +msgid "" +"{count} devices are assigned as hosts for this cluster but are not in " +"location {location}" +msgstr "" +"{count} пристрої призначені як хости для цього кластера, але не знаходяться " +"на місці {location}" + +#: netbox/virtualization/models/virtualmachines.py:118 msgid "memory (MB)" msgstr "пам'ять (МБ)" -#: netbox/virtualization/models/virtualmachines.py:128 +#: netbox/virtualization/models/virtualmachines.py:123 msgid "disk (MB)" msgstr "диск (МБ)" -#: netbox/virtualization/models/virtualmachines.py:166 +#: netbox/virtualization/models/virtualmachines.py:161 msgid "Virtual machine name must be unique per cluster." msgstr "Ім'я віртуальної машини має бути унікальним для кожного кластера." -#: netbox/virtualization/models/virtualmachines.py:169 +#: netbox/virtualization/models/virtualmachines.py:164 msgid "virtual machine" msgstr "віртуальна машина" -#: netbox/virtualization/models/virtualmachines.py:170 +#: netbox/virtualization/models/virtualmachines.py:165 msgid "virtual machines" msgstr "віртуальні машини" -#: netbox/virtualization/models/virtualmachines.py:184 +#: netbox/virtualization/models/virtualmachines.py:176 msgid "A virtual machine must be assigned to a site and/or cluster." msgstr "" "Віртуальна машина повинна бути призначена для тех. майданчику та/або " "кластеру." -#: netbox/virtualization/models/virtualmachines.py:191 +#: netbox/virtualization/models/virtualmachines.py:183 #, python-brace-format msgid "" "The selected cluster ({cluster}) is not assigned to this site ({site})." msgstr "" "Вибраний кластер ({cluster}) не присвоюється цьому тех. майданчику ({site})." -#: netbox/virtualization/models/virtualmachines.py:198 +#: netbox/virtualization/models/virtualmachines.py:190 msgid "Must specify a cluster when assigning a host device." msgstr "Необхідно вказати кластер при призначенні хост-пристрою." -#: netbox/virtualization/models/virtualmachines.py:203 +#: netbox/virtualization/models/virtualmachines.py:195 #, python-brace-format msgid "" "The selected device ({device}) is not assigned to this cluster ({cluster})." msgstr "" "Обраний пристрій ({device}) не присвоюється цьому кластеру ({cluster})." -#: netbox/virtualization/models/virtualmachines.py:215 +#: netbox/virtualization/models/virtualmachines.py:207 #, python-brace-format msgid "" "The specified disk size ({size}) must match the aggregate size of assigned " @@ -15583,17 +16246,17 @@ msgstr "" "Зазначений розмір диска ({size}) повинен відповідати сукупному розміру " "призначених віртуальних дисків ({total_size})." -#: netbox/virtualization/models/virtualmachines.py:229 +#: netbox/virtualization/models/virtualmachines.py:221 #, python-brace-format msgid "Must be an IPv{family} address. ({ip} is an IPv{version} address.)" msgstr "Повинен бути IPv{family} адреса. ({ip} є IPv{version} адреса.)" -#: netbox/virtualization/models/virtualmachines.py:238 +#: netbox/virtualization/models/virtualmachines.py:230 #, python-brace-format msgid "The specified IP address ({ip}) is not assigned to this VM." msgstr "Зазначена IP-адреса ({ip}) не присвоюється цієї віртуальній машині." -#: netbox/virtualization/models/virtualmachines.py:396 +#: netbox/virtualization/models/virtualmachines.py:376 #, python-brace-format msgid "" "The selected parent interface ({parent}) belongs to a different virtual " @@ -15602,7 +16265,7 @@ msgstr "" "Вибраний батьківський інтерфейс ({parent}) належить до іншої віртуальної " "машини ({virtual_machine})." -#: netbox/virtualization/models/virtualmachines.py:411 +#: netbox/virtualization/models/virtualmachines.py:391 #, python-brace-format msgid "" "The selected bridge interface ({bridge}) belongs to a different virtual " @@ -15611,7 +16274,7 @@ msgstr "" "Вибраний інтерфейс моста ({bridge}) належить до іншої віртуальної машини " "({virtual_machine})." -#: netbox/virtualization/models/virtualmachines.py:422 +#: netbox/virtualization/models/virtualmachines.py:402 #, python-brace-format msgid "" "The untagged VLAN ({untagged_vlan}) must belong to the same site as the " @@ -15621,24 +16284,24 @@ msgstr "" " і батьківська віртуальна машина інтерфейсу, або ж вона повинна бути " "глобальною." -#: netbox/virtualization/models/virtualmachines.py:434 +#: netbox/virtualization/models/virtualmachines.py:414 msgid "size (MB)" msgstr "розмір (МБ)" -#: netbox/virtualization/models/virtualmachines.py:438 +#: netbox/virtualization/models/virtualmachines.py:418 msgid "virtual disk" msgstr "віртуальний диск" -#: netbox/virtualization/models/virtualmachines.py:439 +#: netbox/virtualization/models/virtualmachines.py:419 msgid "virtual disks" msgstr "віртуальні диски" -#: netbox/virtualization/views.py:273 +#: netbox/virtualization/views.py:289 #, python-brace-format msgid "Added {count} devices to cluster {cluster}" msgstr "Додано {count} пристроїв для кластеризації {cluster}" -#: netbox/virtualization/views.py:308 +#: netbox/virtualization/views.py:324 #, python-brace-format msgid "Removed {count} devices from cluster {cluster}" msgstr "Вилучено {count} пристроїв з кластера {cluster}" @@ -15675,14 +16338,6 @@ msgstr "L2TP" msgid "PPTP" msgstr "PPTP" -#: netbox/vpn/choices.py:64 -msgid "Hub" -msgstr "Хаб" - -#: netbox/vpn/choices.py:65 -msgid "Spoke" -msgstr "Спиця (в колесі)" - #: netbox/vpn/choices.py:88 msgid "Aggressive" msgstr "Агресивно" @@ -15800,26 +16455,26 @@ msgstr "VLAN (назва)" msgid "Tunnel group" msgstr "Тунельна група" -#: netbox/vpn/forms/bulk_edit.py:117 netbox/vpn/models/crypto.py:47 +#: netbox/vpn/forms/bulk_edit.py:117 netbox/vpn/models/crypto.py:48 msgid "SA lifetime" msgstr "Термін служби SA" -#: netbox/vpn/forms/bulk_edit.py:151 netbox/wireless/forms/bulk_edit.py:79 -#: netbox/wireless/forms/bulk_edit.py:126 -#: netbox/wireless/forms/filtersets.py:64 -#: netbox/wireless/forms/filtersets.py:98 +#: netbox/vpn/forms/bulk_edit.py:151 netbox/wireless/forms/bulk_edit.py:81 +#: netbox/wireless/forms/bulk_edit.py:129 +#: netbox/wireless/forms/filtersets.py:67 +#: netbox/wireless/forms/filtersets.py:126 msgid "Pre-shared key" msgstr "Попередньо спільний ключ" #: netbox/vpn/forms/bulk_edit.py:237 netbox/vpn/forms/bulk_import.py:239 -#: netbox/vpn/forms/filtersets.py:199 netbox/vpn/forms/model_forms.py:370 +#: netbox/vpn/forms/filtersets.py:199 netbox/vpn/forms/model_forms.py:373 #: netbox/vpn/models/crypto.py:104 msgid "IKE policy" msgstr "Політика IKE" #: netbox/vpn/forms/bulk_edit.py:242 netbox/vpn/forms/bulk_import.py:244 -#: netbox/vpn/forms/filtersets.py:204 netbox/vpn/forms/model_forms.py:374 -#: netbox/vpn/models/crypto.py:209 +#: netbox/vpn/forms/filtersets.py:204 netbox/vpn/forms/model_forms.py:377 +#: netbox/vpn/models/crypto.py:207 msgid "IPSec policy" msgstr "Політика IPsec" @@ -15827,10 +16482,6 @@ msgstr "Політика IPsec" msgid "Tunnel encapsulation" msgstr "Інкапсуляція тунелю" -#: netbox/vpn/forms/bulk_import.py:83 -msgid "Operational role" -msgstr "Операційна роль" - #: netbox/vpn/forms/bulk_import.py:90 msgid "Parent device of assigned interface" msgstr "Батьківський пристрій призначеного інтерфейсу" @@ -15847,7 +16498,7 @@ msgstr "Інтерфейс пристрою або віртуальної маш msgid "IKE proposal(s)" msgstr "Пропозиція/iї IKE" -#: netbox/vpn/forms/bulk_import.py:215 netbox/vpn/models/crypto.py:197 +#: netbox/vpn/forms/bulk_import.py:215 netbox/vpn/models/crypto.py:195 msgid "Diffie-Hellman group for Perfect Forward Secrecy" msgstr "Група Діффі-Хеллмана для Perfect Forward Secrecy" @@ -15894,7 +16545,7 @@ msgid "IKE version" msgstr "Версія IKE" #: netbox/vpn/forms/filtersets.py:142 netbox/vpn/forms/filtersets.py:175 -#: netbox/vpn/forms/model_forms.py:298 netbox/vpn/forms/model_forms.py:334 +#: netbox/vpn/forms/model_forms.py:299 netbox/vpn/forms/model_forms.py:336 msgid "Proposal" msgstr "Пропозиція" @@ -15902,32 +16553,28 @@ msgstr "Пропозиція" msgid "Assigned Object Type" msgstr "Призначений тип об'єкта" -#: netbox/vpn/forms/model_forms.py:95 netbox/vpn/forms/model_forms.py:130 -#: netbox/vpn/forms/model_forms.py:240 netbox/vpn/tables/tunnels.py:91 +#: netbox/vpn/forms/model_forms.py:96 netbox/vpn/forms/model_forms.py:131 +#: netbox/vpn/forms/model_forms.py:241 netbox/vpn/tables/tunnels.py:91 msgid "Tunnel interface" msgstr "Інтерфейс тунелю" -#: netbox/vpn/forms/model_forms.py:150 +#: netbox/vpn/forms/model_forms.py:151 msgid "First Termination" msgstr "Перший кінець" -#: netbox/vpn/forms/model_forms.py:153 +#: netbox/vpn/forms/model_forms.py:154 msgid "Second Termination" msgstr "Другий кінець" -#: netbox/vpn/forms/model_forms.py:197 +#: netbox/vpn/forms/model_forms.py:198 msgid "This parameter is required when defining a termination." msgstr "Цей параметр обов'язковий при визначенні кінця." -#: netbox/vpn/forms/model_forms.py:320 netbox/vpn/forms/model_forms.py:356 -msgid "Policy" -msgstr "Політика" - -#: netbox/vpn/forms/model_forms.py:487 +#: netbox/vpn/forms/model_forms.py:490 msgid "A termination must specify an interface or VLAN." msgstr "Кінець повинен підключатися до інтерфейсу або VLAN." -#: netbox/vpn/forms/model_forms.py:489 +#: netbox/vpn/forms/model_forms.py:492 msgid "" "A termination can only have one terminating object (an interface or VLAN)." msgstr "Кінець може мати лише один кінцевий об'єкт (інтерфейс або VLAN)." @@ -15940,31 +16587,31 @@ msgstr "алгоритм шифрування" msgid "authentication algorithm" msgstr "алгоритм аутентифікації" -#: netbox/vpn/models/crypto.py:44 +#: netbox/vpn/models/crypto.py:45 msgid "Diffie-Hellman group ID" msgstr "Ідентифікатор групи Діффі-Хеллмана" -#: netbox/vpn/models/crypto.py:50 +#: netbox/vpn/models/crypto.py:51 msgid "Security association lifetime (in seconds)" msgstr "Термін служби асоціації безпеки (в секундах)" -#: netbox/vpn/models/crypto.py:59 +#: netbox/vpn/models/crypto.py:60 msgid "IKE proposal" msgstr "Пропозиція IKE" -#: netbox/vpn/models/crypto.py:60 +#: netbox/vpn/models/crypto.py:61 msgid "IKE proposals" msgstr "Налаштування IKE" -#: netbox/vpn/models/crypto.py:76 +#: netbox/vpn/models/crypto.py:75 msgid "version" msgstr "версія" -#: netbox/vpn/models/crypto.py:88 netbox/vpn/models/crypto.py:190 +#: netbox/vpn/models/crypto.py:88 netbox/vpn/models/crypto.py:188 msgid "proposals" msgstr "налаштування" -#: netbox/vpn/models/crypto.py:91 netbox/wireless/models.py:39 +#: netbox/vpn/models/crypto.py:91 netbox/wireless/models.py:41 msgid "pre-shared key" msgstr "попередньо спільний ключ" @@ -15972,19 +16619,19 @@ msgstr "попередньо спільний ключ" msgid "IKE policies" msgstr "Політика IKE" -#: netbox/vpn/models/crypto.py:118 +#: netbox/vpn/models/crypto.py:115 msgid "Mode is required for selected IKE version" msgstr "Режим необхідний для вибраної версії IKE" -#: netbox/vpn/models/crypto.py:122 +#: netbox/vpn/models/crypto.py:119 msgid "Mode cannot be used for selected IKE version" msgstr "Режим не може бути використаний для вибраної версії IKE" -#: netbox/vpn/models/crypto.py:136 +#: netbox/vpn/models/crypto.py:134 msgid "encryption" msgstr "шифрування" -#: netbox/vpn/models/crypto.py:141 +#: netbox/vpn/models/crypto.py:140 msgid "authentication" msgstr "аутентифікація" @@ -16004,32 +16651,32 @@ msgstr "Пропозиція IPsec" msgid "IPSec proposals" msgstr "Пропозиції IPsec" -#: netbox/vpn/models/crypto.py:178 +#: netbox/vpn/models/crypto.py:175 msgid "Encryption and/or authentication algorithm must be defined" msgstr "Необхідно визначити алгоритм шифрування та/або аутентифікації" -#: netbox/vpn/models/crypto.py:210 +#: netbox/vpn/models/crypto.py:208 msgid "IPSec policies" msgstr "Політики IPsec" -#: netbox/vpn/models/crypto.py:251 +#: netbox/vpn/models/crypto.py:247 msgid "IPSec profiles" msgstr "Профілі IPsec" -#: netbox/vpn/models/l2vpn.py:116 +#: netbox/vpn/models/l2vpn.py:113 msgid "L2VPN termination" msgstr "Кінець L2VPN" -#: netbox/vpn/models/l2vpn.py:117 +#: netbox/vpn/models/l2vpn.py:114 msgid "L2VPN terminations" msgstr "Кінці L2VPN" -#: netbox/vpn/models/l2vpn.py:135 +#: netbox/vpn/models/l2vpn.py:129 #, python-brace-format msgid "L2VPN Termination already assigned ({assigned_object})" msgstr "Кінець L2VPN вже призначено ({assigned_object})" -#: netbox/vpn/models/l2vpn.py:147 +#: netbox/vpn/models/l2vpn.py:141 #, python-brace-format msgid "" "{l2vpn_type} L2VPNs cannot have more than two terminations; found " @@ -16046,35 +16693,35 @@ msgstr "тунельна група" msgid "tunnel groups" msgstr "тунельні групи" -#: netbox/vpn/models/tunnels.py:53 +#: netbox/vpn/models/tunnels.py:51 msgid "encapsulation" msgstr "інкапсуляція" -#: netbox/vpn/models/tunnels.py:72 +#: netbox/vpn/models/tunnels.py:70 msgid "tunnel ID" msgstr "ідентифікатор тунелю" -#: netbox/vpn/models/tunnels.py:94 +#: netbox/vpn/models/tunnels.py:92 msgid "tunnel" msgstr "тунель" -#: netbox/vpn/models/tunnels.py:95 +#: netbox/vpn/models/tunnels.py:93 msgid "tunnels" msgstr "тунелі" -#: netbox/vpn/models/tunnels.py:153 +#: netbox/vpn/models/tunnels.py:148 msgid "An object may be terminated to only one tunnel at a time." msgstr "Об'єкт може бути кінцем лише в одному тунелі одночасно." -#: netbox/vpn/models/tunnels.py:156 +#: netbox/vpn/models/tunnels.py:151 msgid "tunnel termination" msgstr "кинець тунелю" -#: netbox/vpn/models/tunnels.py:157 +#: netbox/vpn/models/tunnels.py:152 msgid "tunnel terminations" msgstr "кінці тунелів" -#: netbox/vpn/models/tunnels.py:174 +#: netbox/vpn/models/tunnels.py:169 #, python-brace-format msgid "{name} is already attached to a tunnel ({tunnel})." msgstr "{name} вже прикріплений до тунелю ({tunnel})." @@ -16135,51 +16782,44 @@ msgstr "Персональний WPA (PSK)" msgid "WPA Enterprise" msgstr "WPA для підприємства" -#: netbox/wireless/forms/bulk_edit.py:73 -#: netbox/wireless/forms/bulk_edit.py:120 -#: netbox/wireless/forms/bulk_import.py:68 -#: netbox/wireless/forms/bulk_import.py:71 -#: netbox/wireless/forms/bulk_import.py:110 -#: netbox/wireless/forms/bulk_import.py:113 -#: netbox/wireless/forms/filtersets.py:59 -#: netbox/wireless/forms/filtersets.py:93 +#: netbox/wireless/forms/bulk_edit.py:75 +#: netbox/wireless/forms/bulk_edit.py:123 +#: netbox/wireless/forms/bulk_import.py:70 +#: netbox/wireless/forms/bulk_import.py:73 +#: netbox/wireless/forms/bulk_import.py:115 +#: netbox/wireless/forms/bulk_import.py:118 +#: netbox/wireless/forms/filtersets.py:62 +#: netbox/wireless/forms/filtersets.py:121 msgid "Authentication cipher" msgstr "Аутентифікаційний шифр" -#: netbox/wireless/forms/bulk_edit.py:134 -#: netbox/wireless/forms/bulk_import.py:116 -#: netbox/wireless/forms/bulk_import.py:119 -#: netbox/wireless/forms/filtersets.py:106 -msgid "Distance unit" -msgstr "Одиниця відстані" - -#: netbox/wireless/forms/bulk_import.py:52 +#: netbox/wireless/forms/bulk_import.py:54 msgid "Bridged VLAN" msgstr "Мостові VLAN" -#: netbox/wireless/forms/bulk_import.py:89 -#: netbox/wireless/tables/wirelesslink.py:28 +#: netbox/wireless/forms/bulk_import.py:94 +#: netbox/wireless/tables/wirelesslink.py:27 msgid "Interface A" msgstr "Інтерфейс A" -#: netbox/wireless/forms/bulk_import.py:93 -#: netbox/wireless/tables/wirelesslink.py:37 +#: netbox/wireless/forms/bulk_import.py:98 +#: netbox/wireless/tables/wirelesslink.py:36 msgid "Interface B" msgstr "Інтерфейс Б" -#: netbox/wireless/forms/model_forms.py:161 +#: netbox/wireless/forms/model_forms.py:164 msgid "Side B" msgstr "Сторона Б" -#: netbox/wireless/models.py:31 +#: netbox/wireless/models.py:32 msgid "authentication cipher" msgstr "шифр аутентифікації" -#: netbox/wireless/models.py:69 +#: netbox/wireless/models.py:72 msgid "wireless LAN group" msgstr "група бездротової локальної мережі" -#: netbox/wireless/models.py:70 +#: netbox/wireless/models.py:73 msgid "wireless LAN groups" msgstr "групи бездротових локальних мереж" @@ -16187,35 +16827,23 @@ msgstr "групи бездротових локальних мереж" msgid "wireless LAN" msgstr "бездротова локальна мережа" -#: netbox/wireless/models.py:144 +#: netbox/wireless/models.py:141 msgid "interface A" msgstr "інтерфейс А" -#: netbox/wireless/models.py:151 +#: netbox/wireless/models.py:148 msgid "interface B" msgstr "інтерфейс Б" -#: netbox/wireless/models.py:165 -msgid "distance" -msgstr "відстань" - -#: netbox/wireless/models.py:172 -msgid "distance unit" -msgstr "одиниця відстані" - -#: netbox/wireless/models.py:219 +#: netbox/wireless/models.py:196 msgid "wireless link" msgstr "бездротовий канал зв'язок" -#: netbox/wireless/models.py:220 +#: netbox/wireless/models.py:197 msgid "wireless links" msgstr "бездротові канали зв'язку" -#: netbox/wireless/models.py:236 -msgid "Must specify a unit when setting a wireless distance" -msgstr "" - -#: netbox/wireless/models.py:242 netbox/wireless/models.py:248 +#: netbox/wireless/models.py:212 netbox/wireless/models.py:218 #, python-brace-format msgid "{type} is not a wireless interface." msgstr "{type} не є бездротовим інтерфейсом." diff --git a/netbox/translations/zh/LC_MESSAGES/django.mo b/netbox/translations/zh/LC_MESSAGES/django.mo index 97ea60b7f2fce357e7979bc4fa122a7ccd24f09a..42de6176f3d228f1fae3d7aaa7789040a6eadad7 100644 GIT binary patch delta 74702 zcmXWkci>M|AHeaiQB+ou5kmIfQZll#BSH!hLeii?^lgwtLsF8IqD83`l@>`uRC+3< zjLImbp+b`9{r;ZM^Uv#?bI(2JbJo50_ao1NgN2SRFPz< zy2@wGKrY6qAX1Es5 z#KU+jHY=JZb2_#}%df%K_&oNZ|IBYBdQ;G$Sf0$~_#k$~0w?CljKm(;4p)YUu@U*! zCnc}O7UUOWf82r1@yz0RGEH$Dw!){e6YfC+Z&-pn{bweSFw!;H1wX(BSmNX~#T~-y z&<39lx1l3Hxnx?J*5RdS`Q6wSUqzSbU#yB}lu9!-7_+YB{Ulh6%tAa4pT=WwIp)Jx z(KUP{uCEI}LGS-M@;f8{E9R&CA3PC{;>mbo={%WJusWWKZA<6LW=fM7LV+_d5ewtZ z=q9-v?RY*K;NrOcEEXldDqN4&+k&?91KQ5s@DRF}3Y1Ch6vy1=Et5?*bf>_P_Cas# zkHv8Wo`e(82JQ?WL^thXbc8RV16ddOZRpJWjt2T~Sm=~InM&l#q3yNGlCVM-w7~)B z$VWx~S~P&EXuY{;!%szidH4=`|7YkP`7X*!mrViIK(C*P-rpIWv235XFfcBRi3`_- zH^ueoaeXd&93MvmdMV1+q78nG&fI3S-p`Rgf_8jjxl~>bIp*0+T@sGCJsM%J$X|?3 z?d9lHWzhy^pquG_^uDF&lD&#$@V&_IK=1n%4d^f$aMAK9fC^a9^WT7k4WEJT`u6DY z>4F9{9&6#P=u$ivuEsOS{||le6gf3drapE+^VeV_#-3;Z^U#qjLZ^0l(CRZTKZVO#UZiwllX^$&)#c{1a7uhG#N|&~x9TTAIQ0 z(Gg#WF2ykP3HVUtH>2-_qSdo`GNnkIQ$4NuV5~-dIyzO)qf_`3&c}V|6wj!UI+~3> z=^jKk;{v=2mtZF>Uo*W8N8kYR@1rwVxmMb=b+eIZfnMkw_C}|8U|b)Ab}%unPeW&J z7CO==&`q^0d@KAo+=kZwHOyZ-wU;eJ!j7s%K~wZNwMEyqCwh#Ap~vn@G?3fS%{d!6 z$C*WuUxhx~KSJBxi!S9q=%y}QC%pseBTJLbbRl76H=~>G{_rXEJimsg;s4N%4xl3~ zQa1&9YFGy?KNEcvcR^3dC1^Wi(Sh8K*1Hd@dj1zh!H4LGzeaD|7al^FCV#y&q9SMq z<!$$jMQ3O} zxRGxs{W`#(iD=Vr9S?P&e|=u#ciAeEOy>(#_;O%e@B=!NKRpNcj(9S7q*=qCFO zeLx)wkD`Ge(=Y{eJX)_bI%Ad4=Spof&=F|;8_@P|YRLI_B-1F+IdS3f@EL4P`3vFi z=;mwKD2=QYx+i)@{!%o+3Fwk!(HWhCw!bj)%g_K+M91Y|JbT6$$`&omvaASBVOTwwB(j-|M?WhsDW|yH;Itg8~ zsc3_DhI8Zk<7hie(UC33M)(H$NdFCMW4)&7V|4(QC!f8aL>m$>VKw{DaXm zhohVFc5IC6(GHGc6>M~Rp3FGxhi=;S*aa&$PjAJs*p&PNya4})y*>Z+&PdPZThPzw zx3C8uMmy?qW_niNi1o;?!0Na&EZibJmQ*3 zeT8nu-I#UF_meQfQ(EWAT#Suy7|uqYcDldj*>V0GQs78hqY-vPAF%__5sX7Sx&@tyJJF?Ch~BpXz3(0L$@gho z{{e015c&={scrhvt`2(NxVG7}RyR@LPbT-G9XyL}n$_r3e;9s(PVpDvb~M1B&>1|0 z9r46=>AwDG{XuAlBhi_=Ci0WBB#itHw4u3i;mIg}DO`h&>=Sh4-=p;pq74^lp9WF_ z9Y8g--80dFbV57sg%0QfbTeiL$At&u!a{U+K8feym*|&Etq!Sysc3_Dq7SJ1(arQE z8qjj&y`EWv27D;W3w2C0Q8uiKY|?C|J_#FYjYixvDhxtLIudPoayS#+R1cx=hL57W z&^c+3l*NXWSBrdqbkkjewlf+%9TReL{-#I4gJ>X6qc4xwqWlvyknL!If1xAG*D2L2 zi8fpZZMX$G)m`IyZ}k3AX!|#YcVhw1|Dz<_Bu~YK7t!7R4*LGy7;ZwVDyU4jl^0$OhxX8k^Yh=e!1f_AV09l=*<13S=>?ZaHh;YnT6 z$g80ZHx1iGc`x+-i^I#~`ozfJ-X+feoVf6K_yRh`Z=r#0LL1s0*Z)LkCU4giPziKX z)9-H@_?A-_7wf1vdCRdXCp%UHlq7E(N=#dPUHHPDUH3 zg)Y_UXa{X0-v#aHd~|PIf(CeXl;42fH$6+jwYd*%@R_KvGV<@n^-Wlv>wD0Ei*-*8 zmqPEWh6dIc?YI-Vlzrp+P^?e>3iM_62>Q;+ZYAL}zC@2S1C7y0JD`#GKwrxP(S{#H zzu}%lXJ#qp#TU{0UXJT;M*f}fBecEG(ffWt29nMEloFZW(J48Iu3f%!(+CQOWzY_) zq5;%H>otz+Ezz0i9QnR+eJI-Tm?*yitC63E&3*qr7Z-M;n`J+``SSNn9~7m~2TB(# zi<8iqm>WKU2J{j-<*%Xxc{lt7JCfgmP4Ki{>4T>qw)FhpN5U!Dgl?kEXvEvmWA|&6 zA4LN!a9#?aG@7r574UR)FZDw=@#W}9r=pvCDO&$cwBE;mCw{MojmQr{m+U_5fDfa`^Lu3NGv&|c{Ci`S^V7(i zpb?&hew}tlcj;wV5f_GQ&?){t+=tHCA#^4S_D$^+2`ixW8=y{NAPO625o3Pdfyl5)P5KK8Rf_JOPlc|bU+o*_8Oq~wTkOqvLtMjCiu^Kk$}9Cx4faBpY7pAc)mQ~@#LD=1l)r~|{297*KScR~D9?96YA0KQgcWL_ zpGqyz5%ocj(+D*3aX1ujMvvVO=w{uAPUYX|Kw1n)o3A6fcLt&5ccU{r4{dKDGPBvt zvZ(M1dc59={5Et~|AZc|<1b7d7eyN^gKnlOXdr{oJum{##cQxCzKi|@v=?2~u6k?+EaxDWk^Ejl=LPz$Z! z7j1V)lwXSeSUwxG9Z75?;buAc;`IBvYUmzlhdv+9M}N$|9PMxl8qiGir86&FhBmww z{XN1_wBvk3($XAUp(Y~x|+v|TwYn|`W&fr5Hm_!Gxt<>9Oi&P5yg6`g@9 zBhrXkU`6t0qcb!VOW;KG6y1#m{1mzuo{#G*(V6}TJ$2t^rjwJ|Xf`(5b#B^7o@N`WPC}((qk0(5+~I+5IGp@GyFO@{UZ;@)OZWD@DE$ zdShF3?fXT3IC|ei^ie)Nd=UM%d>U6ZA_x$f6!Bk`pU_GpIS?Z`a z`Ut)NeFu!d_IN*fY`5TaJZ(%G*-~_~zJw0wNAwu~fo`_^m#4r=;c4Vg!>kQ=AkiGJ zK_hz(z2P-<6K+7KbT2y6KhT-Tj7{~AMMr#6Df* zfel=N?%Ii12B)BFzW^Q4OX!|>Biw+_+_&fh=lCm9pha*r`I94m6M71!p@Bb&4)lpD zIR7^IA_WGrCMvua`3;fZga)`7U6Sv^-_T8V1fA+4SEfKKqV;QrP0)8pYjl7&pffr( zOTqwVq5;fD8(N4)xE$^9ttkH}%D1BRe?n*G*SLNV4e0o*l4a2;uY=CynP~ex(HY4O zC1C(Jpu2Mhx@PmxwSO+Ie}o>tZ_ozzNBJ>Vr{`yh0ZgXAj%H$Yd=M+*YP8|+&>vC{p!G^#m!5Q$(GL2fGc_9h0J#RM;q%xO zzeJB;;p@}h=!}cV_q?9-Z-akP;DaIWgw$X`Y)k$WbTbW%@?q%IUmNAOpaYnWj&Ls8 z-cxAcFQYT{VdOWX^?yO@|C^0Op^0e|mP60)8R(5&&>Q-rYkDaf(3R-Ou0u!uEH=Ye zBL6E|?;msz=Cvi4@fF7R{ zrl#H75e?u%bnT{~o9v}Fx1meA9^Esaqf5IR4e)RDbR0h|e*Uj8 zEggsY=#8z>P1zaU^?f5hIIfRDr~2B+-;3^*`BDB9djDGV6n%;YunpY{`@%!hSR;31 z{@c^BD1;uDldu++!Z)xj8c1e(TEpYePpI1Hl=i?|a4x!c%HEMDa}74c5_$M-8Tt}> zeMSoCZ8YGGSrSI{H993bqryK?q2SE)dM$yDxIX$M>>A~x(J7sZzMdaM2k<;L#h1|m z?nNIs`_UQ6cV}Aa?1?0dtQ-2o>xqqVHolJUp=&thuCz4wqX9pPcC-Y&{(R)upbwb$ z(0UutrPz!f>z(Kx`Wv~AzyEW0I;XAC8_q+YTm#X-hM`k65{-O3daiFlH`^Sv!>`eL z+tK@eMwje2wB19I&woz}s4(XK{O^=pg7b_vP%kQ+8Rh4oo2M5Vz{ThjZ!8+b*O1K&V5-7d6)ytC5`oPY*U z1`ViY*aYj4Z;fusG1v)jLif}MXvas;87*)h=ijv|d0(2!Q_#pOVJA&@&~%s z|Dp{Sn49vY(E6vLv zXf{2W>Mu-dbO~B<5jyhE(c||$I`Z97{%7R#K9=egMW?nrI`X>cCT)t2v?n_9!RXpw zjUL16vLt+&+!+On(WzgBZlaITCHgVS+dZDvydN6SCFuQEq8;5HK7a=F1X^zey1Cy$ z2lN5DgxL)w+{N3_i1wgs_#e7y3NA_(M>pfC=m@G}UaS?@>!JZPN7wuuw1fUw2}ffc zoEg_&#WwVx`H+Nbcf#T{MJ>@a?ujnNRP-IN0u69I+R+YliGD-(%719RN>8MbH$wyI zh}Q2HjzBl#HCT%NGtZH*;ySd0FVWZJFX);Telm@?BHCe9bY>c(4Y!K&?%{>uDD>D~ z7x`P!`(~jtI3Ejn{uh$4qvz1IUmf|+(Y4)!cAR-C?d~Gz5;aG6aa;5^BQvocE=D{4 zAG&1Q(ffC!0sj@|f12}e#o{EaPyx-?4bMO~PY3kI^THumll+zF_rW~$z7<#>*Pu)H z2YO%SXHq+j(0pt3l=OIp^WTC*UkcoW_r`^X(8wQ08-51eL@RIvZpLoddP(YNCi=R4 z1AR{XgJ)pfrFk-!;HBsuS&#k%wGUl_y3ca{9eJZ?Q$%ghsqKXBiSy81YINi`VGVo~ z9mxmilkzKcGww&1sOSsn_k0bpGWm1S2hcbihmT?*&wq&*)03(a8gXNE>d!%+2mQmb z=rer^y15=f1NaIJ^hfl2;XgbZPhOt#{jfFpvDhA;3-@DT`p-0fDa}AfbO!pM4PJ`Q z#3Z!g+tG9WNcajG(5F}pe?~V~@t4!uS48ix5jH_*x=mc~fmu81OF}OTZwlw2o8%ev z5xpFp`kj$4vLYR)Ht39H(W$=&-8(O$duAmX$U1b7Y{EwP?F!C+OA^IarcKcUt$04# zz!3B$G6LPr*P{X5gf=uCU4r}2`xaq6d>)(PHf)S1zmiT_XY_Z!=SKeWS2+JRIF15G zFbSRNJJHA&p(9$3cJw*=;u zm6Op9pFyAbuVQ!n6m77=YiSo(M~`P$w1acQ{^5{tbT}@YgdV%8;Y@Ufv$LbZTyzsH zj0^9hQ@;U?bX(+)pd%={Dg{;seSlR$m!vuxSR?fGv_LmyFLVzL!d`d}(oQz>9SNuY zXLL%Bpph1PJvCek4WvBUL49vp^1q=o@h|#d%J*gpuoT*0)yOwNr@Srp$F5id7oqhw;OY1cx|d44mFkzntOZp` zbi}&ol#WM7aC78mNB&VXkQdPh(K>YIwxQ3DztBLAe>-(lJS>ZrS4Q_v9dy9W-sb!} z#ciWP@9-jYDTbp{I4-;utv?$La1lDf6;b|flz$QVJ!pW3&?jZl)#?6PnA@DIvnldk z6d2hEbOx@B{A6?qrlB3(75RtJKo+4Rc^SQLH5%AP^j9|9(HT2});n=cYNtG&L%vRy zgvVz*+R;R`;>}nU?~L;0Xn?PUYtarj;uPG1evV)KPMYdV&BS`p6pAZ-3q8}0qur9uaPURkKf=96$HhC{Kcp*B2!^6?&$gha&6Vd0x zlqi27${)jKp8usL@O!l4DetES>Y}HhIl9&z(HZEC74ecNpMtLKEOdl((0Y%cBVC3r z)ywGAzmB&1K4x2!_<}@pEcrn?x96gP^usrCG`d@BewZ4#3cWrV-7EK?yZjNf4%T$n(?^?1TZY2;JThVMo@T7WLa3+PC;p-Zp}?Xd8M z^pYx%&QuFDpibzBFTz?l66@jYaLoqJe|-vmr@)3QZA=Z;K;L@J(NoYD9ns*pemOeT zlhG&NG^~m9(RS9MPu30SUidun+tK#+U>*EDOTuUVsUN2wAX;HX^0#0Wd>nm{ypN7# zCpxm<(UBhWNow#Ubgj#xGg1i+upt^q3-o!?4h?8jlxN42@P|GmXL5NUO+q8ibl8xjeLK2 z80|RUrt~~0if*ooXnC_JZyV*kqkI%PgV&$|--`}tF6Q(6KTN{Swh(>LJRhz`D{ewJ z;g@JfKcOT18y#W3&r<$G^!lmjW~&vRj}Gi6bf)h>`J67G)c`{VjQQC{%tRIdbjf3_kCM_L^_U=wu2 z6Vc;!OI)9ecDy+9&!B6+676_3+Te!pf9OnY33s9OevkYS4e&;+jmzTt7PP_bXdpkKr{s66i$!*%K+Zz1w?_l)iq6CZ z=oi!Q9oaM`qbM+tE6~VqjS6$oT|6Iq;ge{ChtM_8e3v$FVKiR>ovAvJZ-G81I-vu* zFuWMuBg3;KjBG5n$4ThOR-;q79_{cmH1e;}`n%8$|3n`=dA?5rD2`sQj$UtyUT+)M z`^5E;Se5eZwUL;QcDM!&;6t>-|Dg?TM@Oo1h)Gi|glyBf{(A z`t2#7&CDa==l2pc;t$cO`7-j`u?G2H&?zjrGX+)_-z8ri8+si*1r>IsV>|?JBmWS3 z8cy4tX83&UN`4-e_5AN5VF!8l9yJe zN0Xn72C@g|V6DA*GEd^$SPw`3oc@sO0j%Kp|BQq)upg~((l6=f^|R5yCZOl~F+2@7 zp{L@nxL$2v%Abn{coVk57x6Cq9j99UYo5%-c7>i?d; zY6oB?@>8%4K7n?y8{1*EKT`Q-yODT{f-A7l zpXon3orJ^4e~kWI(B!Z51IV-J+Wi&zv;R(ilW96yZ!3CVzXRzXpL!i#iqj6JJuwVh zkY9kU@#}+}|B)n4Ig~y$Zbgs90c?Zi|4DxUIS5^f_2?=16CF{3!)YqdKm!;e#PhMpf9Y=~4#S@0k2{*4;RDcmSD{b3)#wv) zEBXjOhz3-W-vUg{!vhEXnQ~*Eyt(g&WAf(Bj3r+O+u}p$?}V~jNjOC%^X1L0Wq<5J zem;)Ez36k`{QP-y$8QMwd>9d4i9Rzlwwre-?g&uH{Z_jHL>s$h)Fb+b{A%BR>|M(h2BZm>l_s!bi}7J&wKcS-b-C z6wI5+)+KQjiJJHbx)(k`p9d!#mp5}Ywn6JHN2hQH8pto`eFxDgKJEB4(wcZ8`7_V~ zbVVOnS@eVC`S88t^QQ0rtrYmNc@SOWA}6G^EP)2n6szNCbobwjj&vD1Qyb8Zj$$Qj zTqsTP`RLNzkNza|BzpZFbRatmW%K49y}wgXfr4U%(^51*H^~|3nxBJ?un)S%7orVc z66NF325&%@avHj4?m-8(80+9FbhGY3_XdCeI<3tyXahyjU0)XMpcWcH3v>-TVeX|A z*YCtblrKO#o?A4{;6k*$C($WijyK|mm=`-2OV_jABGEq_7G8-qI0=2mPen)Y0UG(= z=%zc2?uDc1*Yoiwrt9s|fIFjs^hQs?V6^@fsXUvRNWv+-4ITMiXvYtuGw=lZq+5wj z-KXdt_z_RVV^2y`TooN@3$%mtqI@74z&PxSS#)W>z%su7_mZ&TV~VGS%7=~7&Da@T zf^*SbeG$4h#-f2wLPs_wuHT2n$v+X-UqfeVO}H-n5Od%E8%a1-U!qgH18razI+B0T znK-6IvSe5t>r>tw4Rj=y#<5rrr=bH|fzIGYtcH8AA{ITF^WTd^0}@W@E$D?u(9`fX zHp1;_V8u(O5tl|sToEmA5c#I)KsumPd@dT$Fm$FSqcb@bz5m{loPR4mMnP3viM8{-0P8k1La=z83lbYL5nXF&fDASrU$T zMz{i-k>7zfT>6yMU=6h6me>IMppWFK=&4yA*Vmv^{Z+UF4g5#6-brOs$Cc3XY!edh z&Vgv;L(sLq7LD+J^ilgX+VFemm(9nKFH$b;k&@_)bViTwQ1pp;S$H*8BtHS2@p*VH z{b!ya@gW7}%jeB}iF?p5l($b!yE|Wnw3{2FyL>3xz{tptM`vUry2eY;P53Gr$UEpB z_y`@)SLo^bIhW`BXDX%}i-(oasj83eg;r61Za5H6q5LvzinpO_`+8j8jE;O48t5%PY zV(3~|Lib9&unBtKndku9qXRj&N;XAuAq7TwIoj||XhYM`0PaK2?PF*Iuc0&ZZnz=J zKS%3tM`vOmI^rYf(w$f}wOb9X*EmbUk)4e;*d;EUhc<9A8pstqTAJtEz&y98H$bUem{16)OG1YVJ^6$Tq@WzU0Lru^K+oB!zit<6|$j6`!T!RKU z8Lf90xHt2P1z>&6Gb8 z?eJ7I;A-f|8lp4U0-dogXdu1Oj)#OJG3zF}f<$gg(TbDN24|oF-H$#GmY{(xi}F?2 zh5RSzUMO2DZOTSrbF`gS=zX2hC+GR-5?xt~^KZw~DR4K=LZ@yao`x@?BlsL`U~A-m zLIdBAj`R>Z@`AOKC!sS|4!y4?8c0)grrV$c>rgaK6j7HiK4PXEo&~S9b zW8?Z{bR@IT-TwqSwQr&``X$=o?(las(8FQ2VBHkJ$>`cw3hSdCwnW#yBRT_J&>853 zcF-5SZv zRp?0HMhCJEZD#|zgqzVN`Wd}HPyJ+J%>Dh}G9)|&)zHZ5g)Pwzx}gpBLIb-9-6NyW z4kn=^yC+22j`gQ2c+!{_t+q)ZG(nlL`{*CNu3XF6)dTic~3Y(&Q3tDdv+Q1)ZNBJ72 zK#HLEpMt)es$=eJ8J(FvXuw0!dSlW1Z)nK*cVxFw;2O<~ip$VFu?n5a_2}AujYhr$ zZRn@)0NPIeM(KKKbfzkyf!B=k#^G7$KssbeIO4uhFf#HJ&>Lr*`ZV(2M1B{#1iz#09Ej`xqI)QNY~z$DgN~pM+E5#G#9h&moEPN-&>0wxHaHgT zU>th?1axNZM5lgUs3Jm zu7l3Z>FCUKLIWLu4&;)!J{k@D2F$(xZzAF5n1PPufvE5>8tG$^UmDk6Ku5R|4P-4E z_@=nNBg%K90sa;FBWNHeG)?!Pgt_nk3M9Nx7kz{_i3-ipz&b>}7aI8>G_Xt104_)G zzX1*GmMFg)4d7vPh8CkU^gP$l-&aafg({OKeq*vppJnVXGK)yiR6i{w1+NUKc5T1;F-Byl# ztFRm1NBIC8kH4ZbIjjSL(SK$s3D@F(*aVND$D~omyt%&vb~-w;i?A_HLuY0co`wHK zzQs9d#5ZCG%9lm{udrID)Ly@E5@v01AqgA&9POxd=k%+WcIfqS;geXG{FcZc*Chqo z5?fN<7OUY+Xgg1$^*4o?t|?y+t5AMXSI)nQo1@?f^jxmTMz{m(VTo>Ot=nM>@|U8| zhsUu1K8vpH%jnX)iJtqlaeX^le^2-a9#8(?Zk&HF6zHBj5xuc2`Vu)E4X87+r!s@l zNA!@$4@b}YrRcdHi+S+|G@u*f`n0%ySNKr)R5mKS9KIeG-U&Ymzm4lZp;P*M4pY2I2;pBKnIq+jfBT%K6=BdsIW2eTf%+ln&vq-HCP9&e+K%% z>V^g|Fs_e51DSx%k)&sbn^@Ixc*TuJvxT;gUU*HN&&e4$ehKG$_h1i~Nn@ zjBqX*z~aci9QifjCM@jv|Bi&4;WxD7!(owLsewviLv+f{Mn}*O4dhDnzRBS|XvdGo z_2uYuzML+K{CM=8a5K7z@5Va#Am(0D z=!|}ewtH;vWN~y4Rm7~%>K-Iq+iSyxX!%Fz?*0>P;BZ*5PbxndeY=%I189hzo)&2R ze(3$f(9>{PF|-*&UmUHbvLc3bc^+>N*5*nVj*{DCe}!Tu>< zHf$K4gHyOZ5P!q(uswcuLHbkn(%AtifJ@OS9FI=fjp#_HqEE#Oj--I65d(e7MqxUV(U1x6I&L#NzMJsMcD;|pSe1p>yvN*cC8)1Fy zfj$pzMEAgb;ge`Puc1r$8G7GgwBu42C#$Gy(~yLbwn7{1fv(*!E8u03zaFiZMc4Z7 zxc)-;CVJoca8s0j748c6hnXSl4Lc}ILQe^+hfTt>(Gm8D{1CLGvEemQJ_&uWOh-RV zR>t)|(HT9A?tx>5rqfkqDCa*v1r;f15ol*W$xC*;d zz9#a;E=lc{Lhr8<*1ja0E;NdQ)?r6%M8)ptlH7y_c7I%dJo3+kE2DgExE`BRe^YqE zu=E^hkG9hj-J}DvQ7{&b><09adP|f)5H1Q|2;U6Xhnvy8u`}|2g?Wdk=Rr~Q5#J7N ze{7h&m4usVE_$q9Lj!pqJ*OX|5pPA;b}#xoC^I6hX-~BN0JMW4k)IjYXQTH&9QkL$ zmy+4cnFwAREgy>p{22Ok!rHk0AG#+hjZ9zD=b-hjL<7GU zeH*?V{)$z6Hl8{vZ|*Odx5FM(Scxt0*wLwhw&*z?hW-FD6FcHow85&Er5~;OU_0`6 zU{~CTws*>y)XpgMWiRhLT6h=Q-khsA|0W)xz@OcojtXnh*Y0|Bgug|3>8n#i70^Jc zq2C9M(RNy+$FOtcFF>Dom!S2>gcHKsvXPjLMX2y77RP01L+^y2p}Y8dw4oEnr6o8O z4X^=vuKT0+U5<`;aySLOZw9&~b0eQ!Lc+JxE9g(b|3hyqIzEl4B-&s_w7da2;?v`L zyRbXjLBDWVlwXBDS8l-E&jC^X5K=#zSxmx5;fv@9-boiSo6!z;q7nZb`J?ErKK7b) zy;ax&J^$UXGhU7T@b$P};@VWdEIQMtVeaq$HOwV={bFk_bVYv`G$YC%LjzeBu0YrN zjqp8m^^2@>%Xa{eEABJCsKZL)d zQ~Y1#i(Q{)v^?5=Beb0}&>8KBSub2b!Vz7J=0`_`tHLShjSqy2(0VVR_q`J3Yoh$) z$bS)jALYNHQ-2^lb^_=BcnVIQkbbhMi0*;rXvOa6>-VC_UyY^6-;8d`2P6M98sKU) zppEGLo6&l^h zH_SIFeUu)L4zO~Vts9Bc!?V$jx`zGH0Eb6@OgJIDEu0-b8a^Aoh6eN=+VMVgMh_hd!Vn)LFg0kZft~aUS;}{h?|=Ui ziVf96XP|jh=!8BQ&yV~F^sP4zosoOd``$tK$_BLlH|Xp47qni{o6-!oLEG;ej=FA2|LO+HF-Q5(1~b+r$%}Guo>2)yk+FagyYaXFcBTdbS!}L!$oMjOT$;g z?7B#N7H$uJ3I7QT+?E(P(U zP2pxV(yeiQZ{+`o{L%2(>FIAe6-L*#Ho6Czq8*)&K9DX#+Z%}u@EWgs{-1~o&!SJP z*U;U602^V+J5ocP(FS^k1JNH;M#uFhqWoEOv%QA?sP<-D{|lXgf6-6A!ZYIh*Cb)X z4bX^Nq8+zKzk;trKdt6t9bAJw@K^M{Rx{JcyP`k!o{zS37rHca(0Yr}8G12%eJ1DM zwO$t$wxGvl4|?PAccvRp!D{5IqXG0lA4E5xyZvc&54|4w&%#~dA++N{ccs8eq5+k^ zE6#r{3VdLk9u)?oH;jmiSE5rr89U*t=+x%DJJmY_4Wu1zqW+vfz*bzTQXQ<@tG}88H zAidBBQ-5^EvXe-7jAn;VqZQu@*P&lD8_-X$ZIM5KF5PkWrTb6Ca^#z!fA6msI>lFn zlfvoY{mE?R@hEscd;<;OLo~2Y!`gg?ghzp*CQk3_!u1F7SBVN=Zg z{_iXjK9M@34NgQi-!wGR)#y~dAJ;cWekbw_&-{g+o{Do*{Z458bJ5K<7;W#?@D03~ z{DHZge><4)U~1qdbc&w}Uqmu9}===0%o^iNC(M3H9QnQBLG;FB9!eGs%b*=qMn_%?oyjx9bHYC8{X?)O zUX~?cM03yv9z=g?eKhh1(PMQKtygY-+A9^&nW=-`*DCA~c0=p;M)y`fG@wf&e`Vye zlOi!4ZRmb9!iU2r(Fe>6k>80n{43hyd~OxC#1h@ z<~$Nk^#$l>_?XCFgO2d_a2^&XzZ6~Dx6!HIiZ-|p9pORr(R<8-bp6z@Uf3$^fu()_ z56UHYAfPjF4|;wdK&O6jl&?WM_#pCMpaFav{(=tVNaTw>lJXVN=S5?*{qw>L)boEa z2{*%~=tyRvuib~x4&TPSxB=bWpPBAFH}e0X^$S0i_RuNlo~VP~-vOP; z-j8L|g^?84(9PjJ=;nI_otYQV23MmUZ$#_wKm+^@>)^jw8EZbC?(dE+(O|URWc25V z>F7+a&604cwqR~e(MU@!N{`n1=Mc&2ss);Fi_P%dD8CK8?@qLz zhok&SbSARTMTOU+!bj*!=L@vKedtsjMsFzgL@GZutc_(TZ;p=eJhY=h;mGi6boWm} z2YPEN&t_gCQI~=@(GGu37cz&?8}dDw%8y6$rNUFAylU78?YK2M;?9_Ru7qRI_Os{! zXJYQZ|6fF+IR$UWg+pjZCq9*a(O4Q?)1GMgc(kD#B7Zx2D(*%*oQKZTv*9YV{s&kS zzrY%pd74i@&wou5*c1KCz7D)eLUgU3nmh<0-#Ag)vX;kC6^hYPH&2M*efO{k$)5{;g2^h179>bQ3K?m*Ba`uR@pL-EebU z-y7EthIwC1_ZLDpVac!>+FrBBw?q5sosGo6xNvFYuZ#T6XveeAy|5^*FF_l8Im*|d zui+2SO|}uA#e;GEiRI}f^ej3vA7LBJ?jtdfME#diM|Yw>zdwq_^6*|qJ1({&ji?mb zarLkX8sOQH?}Ltf2>L_jRpFiJTkvW00r!3~o7q9a2gpBYMfLqY^?+qVW#re14r4;xiTY=_xpbhLr8~6hq*$J6>48uh?dWW5gMHA=HV19! zEp#O7BL7ABZTJH^!o6rf2c!I?H&b~Tw4G{L5bI{+LNoLjwnHOb7%mN0qThsT&?nyR zC@=F?n(`{>eKo?yQQiuj(Y9z{-NFmdnaYkJ;W?d(xkn_{A^$lVY2LTfjmL#0(eldZ zRMtXgIqu2abbigN4?l21}xwwK7h^ z9#Os??O-#yhxUYru_E~*@1y|hqwSrIxj+BwO2U!!4+o>4QX?XNHG0DY^myGG<1ac}(9JXyouO;d z1}BI2pnK+VbTht=9@CGoEABzxdQCn`OVAbVxL-1x86E}W!kf{xyBiH;KHBk$@C`J8 zwdj(38TlQN|1yj|?Gs7oEgqX16hiv(tl_CAB^CI+zw`z ztydLoxDL9D&WQ4sVS9AkU^XkZO6KQ=+1SlKg3xE5W|$OeR$hU3wWZjSuzX#F`+zBpVOE=N0lEnJI^ zd}Cby4n0>tA^~SJM@cy1BAe41)0VuTL0xJ{}kP{KjDpd(pPC9 zv(WeH0(54cMgxBZZU24DebRhI!aeXa+EBi)Q^ne7#TIBF-O#--B=U2yDfwry4SpY1 z*^&Ynj&^u8Is><$PoDdu{5dS?BkfHRZo1FW7x!=I!#wXdX-||xcX12!Q=}alShsK> zx^!dFrMdy__?GbA@UiekwB8!b{gY-NkZ|M&&`+5P-=>jvM?0E=1~dn~aT(g-itrt@ z!%wg>Zbwf`{;g>*v66ue>(wq{R_2K4lCwjvlk^ei)_k9YqSXdri%UY3d6Lv?}d_d$c z4=19VdRi{e`I{RBi_sfaEvHT zpBq1+YrjA81$J@%?XVaL1E`EvXoQw`M4yZopbcLcPDBHo63&Y91(AO$d>IXFO4ZGrwVS9f%VMx*s6qcb=Iee%tl{psUnvvo)v zro^sm{Fqv*AD$I<##^}F7xUs*=wf|?PRUNJkAI;Dx#~~pWpECN zm|Mp_n*sxP7!7d|8v1hdt+FoMh<5k|I^!QIrq3DgVoR{PF=LTAvzN+(7-!I{=#r1Hl_R;Y=}$H zdf&$N>~E1c5+46+YOoXEBZzmBM;xhb9_8EdGV*`p1vvDN zvU!ZHa3yrYg{`A%;icWEJG=L6~?~fkv;gO$=)yUt0&G7|v%74Q8 zSnkiXWZlqq`eN>%iyjphrlTFr4j)AWc{cJdp#iRr^6$f+&>8zZ^8bW+{z?NVh`vV~ zqJecsU;MXW?mriOfrJr#g?9Ke8p!@I^LHvQ9F{<5tZd|KhmFu55Y9l)dH*QC1Z{70 z7u`IMpdCCHYU4n6Ll9pL=i@Xt~4Z}f?E1f7xN4yNZoIkdbkT7E{9cZ>3YSdsEk=pPx}f&K_{ z4|-hZp#3};J{~@sC1Hds(TLteNB$+ct9OS-qP+N_)KFz~s_TZ`&~`3E@4q^{1?~7= z^s{+B`nvoOor&xY5_Y@~tytino{x`cEzS#?;rWQ(2gF8{9|Y!%Od}3 zxDE~Uv&essxxX&<8wp2z1gl}mqiNT+M0fGo=y~plPHnGnXj~r`*RPNATf_U}`eJm( zp26n$1{(0+M>+pSbc6yUF3e%^LMe3Qr=rh;+Toe#_dw^c7h3NE^!^dymElD6lV}RM zm+p`9rIBBe$)*NAqQFh~6&k?qa331LU+B{0&y%hfLpv^op6@DX05#A7HA35Ii+0=@ ztv?ujt&hQqct@7RU=mBPFP@M$U+%};p_tpvXhRR9pS_FFhF*#CcO(B1TK_9Fke}oF z-;qBO`2zXU{YB7v*|JekHEe`_9k!1A1a$3hL*L)Cunukr|3M!p)$^wYTcH7WLIXM% z{n8m4<&(l&liAE2B#dMh=8h4LBEKY6$eeskYOq{bIjn_t&@l4t(W&klBVO@Vy5kH*gE$cCXaG%>s*oEO)hK?8j|d@tOH?wQZA z8GaY#WeW0tm*ou=NoaL6ka}TDbZNRpzAt*5hDZ5z;mvV931croeMuD=svOd|Nc~E@8iL7#i4Bk-s6l9i7@aas8>tzla9%E*iiu zQU2#~asCS&pD*`GR06Hg8ttGXzJ@)~U4Fs|`EuWMr=feG4^F@vu^JvkpKuilrS|%x zOLi+7*lfHOpFod&`E21dHIvcT=Mwbw`5xNfF7(k{xJbU-TdW#-W2eYJh2zM7h!0?^ zqUruG(B1wQ+VLsH^5uTotc$ka7M+pokSLgrr%~`!zp-oXnXJdf9rX6-o2N+ zYwdmZK67R!0Z+f)c+=@fIivzku>`oF|pR z=d{$LBQx&-%KPEbpxl7wfwII`Kv{{;iaAr8m!bhEh53N;)@m>)JafQW;C8jY1Lb#> zlBMyobOjrMRl&_*LwWswK_?hR`Lt%@^RRtIaQ z_c9(X$Aa=+a4#rtMDBwUpDKfwr5jiqbb#wXS(&66y(~4zZz)M95bO`i5=DZt>l0@( zH&F&q0&0PML4QyRz5~iiHOy?zd@LxJa5*T6Pl7Vjcc6U6QYMR8cn~<4@gC4whfeXV z<}Muw)@B?I%Fu51Js7_N<-E7eZeHuLpuBdh z1!W>nz$#$;9Gw4_bn50XkKIDW6^iQ>w<)?54}-Eor$E`=S9BZ&%H#JNFfRB(^?xcR z&S@U&44}m4%*pweb6yOE5LEyrurVm-wiTEH^aEvc^#^4|W`Yv84wQTR4p8FufbyJh z2o%1vpuBqC1;sx`@iiz3RP~vZb@xYgg??5|a=NCG%iL&K3D{c?U%mWmMf>PjQP-Z$GtOG9Aain4_D1OgD zN&FG436{;{Wqd6*1T4UK11P8CI>=t)&xP}vySWl5HMMalSX0N%K)JSU!Bk)%D93K3>bHWjS5ATQvVIAtn~-rxXGcI{A5j?oxU?&Z_eejbzpE`zdCcR(S24ochyQ1~rH&2a)y zRw9Lt?L|5N5|9st9Jf-6bwGK&ZwJaX4OaaW#igJSZwF;&`*nN{?8x{kCcGPHaB5BP?k0oC}^OrRGiGamuA1*d=qz$owtxV*f%d3`Ey{$+Pht6(mP z3lyTqpcM90#~(p?>tv~Du0&bI>Y(^H1jWAvC^PS-*iSKB?F&IEY@^~{r*=*$UQv7i z$`U;X<(PR_GLKaWP!hBOC9yx41ndLKiVO$kn2l5W3dQxHB;KauL!hjj^CTU4RXPJo zU<@cT@v3YtWhzkY`9WFAdZ73%1La0?5R~1043vV-fs*L5;(gWstoTOpqlvu!RWSqN zDW+D;4hmrr9hX+Dq57seZlma{*hg^~D0^WdC@Z#1ai`k9H<0{SRq+s%gfA4|Dt=P5 zRW%Du0Lp1d3(BqA4oX}ewHF2@VFks;s_&{82#Wt;8I#{KQVmlH1ZBw|E51_vteBvhc}dfPMxmha7Y2>?rD4Y4J;uE$1s>u5<(;-O>6SIKE(kPY%qDL!**=RGI^-Zf233W{TTP-c)Dl=E5|6r%E=T!Lz#__YM( zxuC1s`zj7pyAu@u$%;$e`W@OiqIh2MmSQw034aBpz~4c6V)CwKCQc5DJ&TTWfl_F3 z)t6R%B~aq)tG=bFck-_&n?ya-5T@fHpe%JbSRGuh`X`_y{6+D->c1!^s%_pm(}QyU zi-F=_2b7g+tk?lG{#>kwI*bNoW)sz6uIg8UatSu5em^KPIj#E3s(+;T5|pL>q?ojh znK(NraYaB`p>kjxIscW^P(uxkblgm_gQ6cOGYC=~q8P3?M{$MXR#0Ys5S07I3B~hj zzYZFo|39W9j;|Eofl}!opv)v*T@y2cvJ!3$ub0A`5&}v5Qt<;Qo6uI@)F%a{ z!1RjQ6!U;`X$mV=Q*5c&9h8+Dq&N-~o>@9x07|@bts3@&QphnK|DfY5ig#5X4a&@3 zDEP_lgM{nY>v**0w^=Auh zP-Ze56#sA?Pt);y9WMiAA{!L^XQs6s9uO{Xu zORks)6uwG|H9_%jpx9RReoZ+4V(5)RDj%qZp`a}BXdO=hrLftc_%Bx6pmrB1{)bh6 zM)lWKe^)VD^}i^-chZq-{6!TBo0^rU03}g+#oUS|)LvD`brf5I@(D>-wf9yGQ5>W= zLUBAOE9so7oh6D})Zws>Pk~a%b=5xxWu{LRe^vb-p!j(=GwmrrxdfSXoI}TjKw0UM z=GbW|OGh4~tEfXQP@aMt>bNr~3H=m<6bFKmaFpUSP!cXuT&cJLl!w>tpq%?7s=omy zkn?|!jx0rt8s39a&=*kdT;9#iiZg z^?$EAoC0O0R}}Apk}w*S_jWHp*@VBT{tGC?aax!YNC}F64jtzQjlvWgslE#+alxSR z`ae_^6BOqvt_0=dwrya4@C7KJ-T1XMaT-{N@qWb^uq@-$txS6(#Q|V_^ee!+;B&Ae zSgJMWzbKvQtoc%8n5~WZ=CiqCAJBNauIK{g!|Mm25N2p=ezDLGY|eNW zSOkpQ&io*wG$^N}BPem*+j0JD(OHI~3>XDA1~a!e6ZHb+jmAt+J_*?h<_E8XR?scC z<+>nFu(Vt&WHy;zvXORhO}c`z$3)K3zl&}fACVp<|2NVD<9j6#!xggZ;eB=_WGCo9 zmkpw_Ui;gWBaYliRATTQ4i~>nC%@xhxsGpNc;-`JEI5|}toY0RGo%bj-=kax?k3JRI@q5B%FC*AR1!Lek6UZ+jql zhhiy?IS87PFo zLHsrFI{GkpX3F#TNE~x8gM28m6SzW2=Hb)tUzJ%b#kn;rQV!is zA%(001*ITnn)I#X@H}90HL(9(mg}liGXA?R4{K^j!!fRh;Gq`vozA)r<4cg% zr-)S)ky?|M)!F}qPNWt7^RypM0WP>ib`d)a?q0-;JVxJK{=3f3bY@be4?!g$txkUh zg$#uF0gkt^uTa7{n)F8<3sE)I$(`~g3Ei>~eQDZ0d}m5h3YbFy)9GGguY9{sy|W6dH!T2|Sf3d^q~_=yK~U#ZP1q zWBwY#kXpK;GH@1Sc99UbBX|Jh>2bq`Ug(kP92e$si zf3L~P!Lb>B5ie}3DU{p4r7p22`290WR}#CWB+gwh9!K{*v)Dyo5r`hpniI&c@EUSQ z19CDRhL0V8`AwGiG#_jO;7EvnYYO=t9uYg^?o6Z%J|e!vc+2%)gtJ@L;?$JER&XNZ zD+%6-V+sNnlIS@4`Rczvdv|m(T1;5ht)6%Nw%B5ps9f_?D7Nvku=noTLSzdor zzE5#t}_{MR5@B#%~?ghXj@nv8xl?YPczAN@ZdU4~yE z2_BIsKVy+v_~eFAWET32Bz34Q0Y$_?cL94o{90hUN{;WDOaq=jEN3w$(d9jDa#$Xa zKqLi@U9gK()k3>b+;@;{CP6U8)WDtvvhj?k5$Df%zD_2Pn0{~^)?$RGHvK$0j*$C* zG6+k6{RrL#u}Dt}`WZ}#ttuEt^?o|bPg+z6iMA2zPwYNo%Fq{is#q5N82U4qc^{7= zuAomqtg|14%L&LrB9S{d+i^aCLwlK}CN!;VG7>*xR%ao5kM9nA{P6DrrbnL`|8ZLE zJ!YO&S9UU(mxSl>9YWiO?NuVKe}Gnc7sA;j-3Z=?s0}!WaatwYNkDFrhpK-r3Qn%8 zut9ZF7adF^Td+G#nIJNYZBXH&DbW#x_WXkgO@~ zkdn`1HZjDk#dZ?Xo-~nF#Ks}6JLoC*bQMJRi{_DjP2<07r*i_bcHjgY7vWHVW%SZy zL&2vcs)$cVR$~^)mT7|06y=3~TgID+KSgqHnn+WL*Tnn59W48MumC6`?}nTgAr|5N zr{yWeF_32!2N_A zSFjOcIW8+E`IqY~cVHCxs3>o!ydk;G_$>Xo_+@9jiJ9er>;Np6DYggXB7@Og#rHnr z^b~Xl-*Yl!Z2StmWgY8H9#{B!yxnWT7`Uc@m9Pgql1yL;3PKI>6REvZV zERvq&e1vMb3-LW#W#Sg#D-zClBA5n_y!doP{{_xs;3N`fqYZ+)th_88qjQPiYb3}| zqLL(d112Xh9{p)3 zwAUohOD_4vygKr+z*q`!O9qU&2si;gAo*PSf2ch|6IRugkhiNMmnfK)C>(`b z(x7X?I1z0F#PaD-Hj-3@s5Il36tF^<`X>5%jDM4O;?ildEZDc8>Y~NiRiB^ncle8B zwQ~I%U^wWpJk`~)F;$9OCShIe%V#Abk7>nqrIL8W{-XU`_*bT&y!b7nKoLH_H{=nv zo5bdmv7EoET8(^owutJMg739zx|R|w`8@)P;#ZcSgv@fBCeMg2F^vy|EK_6!kOm|u zNBj|dZctEm`h`7;Jde+KbX8a(XJ*J9DDL9C7lJGVUr?g%I1Hfwj0COFi}a;!Wkm*n z^YqfahRmA+o{;1qei7)a5$l#N#Eax3mq-Qti^BU>9!q8tRD`w}MFp_0EDPeRMXc1s z+pvj*qVG+D33{1ElBgC5n&LN({&Do#NmQS){2s->$x`JGmFv%M9azReuos-B$tLQ| zM&Q_36AMvqS|x0IS*^Sz>V*G(X7fdh7N4u=64D0Kdf=CqV#>e~pH&m-kM66;^{;|M zRTAB!h$p&iT}a}D_%g&chz60Ysm?ehwpzp`Am%h7k#6!H#KjUn1l}9UJCfvl z>0ro6_?$}^jK`rbq^Tgu3YMT!zEd^+-$pl?FV17}8>oqjLNpiB7fM!`xI6UU5?hm? zOZ2}3<(s82Y;IXgOeO}Y@#`%6KMS+mqDvB=l_-YsdvvXEXwLXMwbdbUC^IS#CWG)I zv)&1r4c~ke*A?F$#D;>I@Og>vUhKcYGaURxK_zJ-&Cvybv*mvgNkZ@-oSPAt5#pls zhoE!N{{;D93aDd*nLqBKyF@DvDZg7|sYLln*ize|-CH{%{HjC zF4_kI3o2nk5{R^fWIVQf^dHjtqmRpY2)>=bd$f)uu1Val*fYQ@a)WU_lGVh<-|ZXH zS|&+hPuy=yhM3D?TKQQY@&gdNWgp}%sQP!>dsQZccqlU$xd8Dh{O{3kp}LKXyJ-<~ z=$EE|h00kOy)2S*3kp9-8_Edz9?}fxn$d=m^o8nEDQO7y&&(zm{DY!Pn_-r+_`la= z1<=Q#zYCw*=*KXbp0WaPJYeRv=ntb`Qa+Xn!f6T0={SyJ7KcbG(uDB@9EVasOE9VG z#pcI&4>8B+_r&iz5|qV0n#P~kTav?B5uZxvKhSSPvW)1bQ&=kanYh{Yw0VWP1r{4SLFK{05;IOiX!j0^?9fJ2K<)_`gFRL|?=o{TUL8 zB*#x=BX*H$H0MYX)+WeP@-X|x1O}<&JIHdX!$5GG679i04f667yp!gyOZybg;mls# zQqvbH2;XY$|1ADy-)XU95II5cdJ<*E;0LLVXnxbka*^>D?0;f=t_iZTBE2Cw25!d( zXb(Ouu|pdrLV(H$fvF0C3#E>h5P`p0PV;Ss3@kBG~uoqRaOCFv}1 z8)Or~Pmoon{e=E7fmG^EhOKM?F}u2l{}07H2U#cd|bF*YH>%2{U8J$ z;(U!`eF8!t$V;%uLi)|o7bGyFF0bgDk{~&a@8m2Fe7n&);oAzoR1_&v5Uy3AH@0&W znj8Oy_*6lEjJOZ@%>|1x@l|sEo8vGHpIuk) zM{pYnMEaoT9|^H^r0^H4*m-PQDWEXAtJuCHUk&)1(DumJQuXLe!;!x}x1PhPZXai3}pHCw$ZKy@lNeTXs<7DU%S{ z?SxolB*dNQ2jUP#%c;v=pNd7AVi#!!skg?=gj{3-#A!SV>cLp#4KXETHO!%KFU!3PNQ;}5~DE+JGT9SA%MV`~yR3OnWw2^StBz7kHTllu1 zf1Cn(=wv=%KL*zf^fvlw<<|nHDalldXa~tz0{+B7WITxmvz!gk$H#93{gpPRz*qjmh>iIDivL=;M3Ttse+H@v z1Vw5P^a{tN5Q!uOyD%Fsh~{A%O#yAeBVaqQHTGiIIzn8Uv50)JFY-(`qB&v(=xil% zIxwD2tb76uayzBP(1QX-K-x!@$sxa^70<_>7JG>~BdzJ2@>Tvp%AXEPJ+y`C?`JB1 z(pD*RCcXNJ6feMZL`zEu+YtP!k!>8YNmW0HaV_{J=`vKqCK9Oj#BkiPvU~pE!nIeY z=Xw#sbZ#yPhT(XKVt&O({*p2sln1czcgt20l`j7vjOSF0bZSOAjWXere1d&o}`msrOqOnQ08Jg@8e*Wm%sQw{&`VrHUf{ppdWtJ6CG{>Pa338FNA}Eqli}{`E z`xBU!CX#{HAA-%aUrC%9jD|zxAmhR6ml4j4==Y*K3)fIB+VmuU77|Uw@Eg@u(WGj$ z$X1(6xvxZ{w5xAO}bk~Fd_->#%h>gZ~gwFaj6FG|i9sEy=KU|~echQ0l(l0Kj zN%B8oAhMgF^AI1U%5wBSqklzzEWmwbTSc62BQHlhyq^luJtuxt9vT_tC(o%6L z*oK&=_=jz)y8y$8tWbH}%0jCw{ zb}R9EEuw+WWHde^bHO(1BV&J(KBeU*UZj{7ngQKh<%pP-;#DeVCAGN75~Zy7VDg~? zk)-HT5+yQ;_K0azVm(Cy@HxiR9%&V#+lT*S>|a1%>|-_CZhZD@+>hkxjJ~Wqu^rW< z5?qDm!f~q%kOu^uWc-TOfI_`=ib<7dvBv%h*?fG~nqkJz^m_f?;Ijk!O_t(1x<5Sf z)s|l*cn#?tj6o2zq3Uir+Y3sN1zjYRO~D!@zUr~gk|~h5-*laa(vKqk0^?mCi5d_a zt9g=HjHnA#aZ?_`0bXRg}7+* zu;uV5t~H776I(zNm%x9xOh(63i81auXLZJnDdJaV*bD4P+k$>7&ilbMjNcGYf+R=L zz0*WNkdD*%fl9m@Y>QuSxB|4mSQ6hQek}er3KJPA-`JHwu>i--1c;ezbAGo34Xw*7wt5y8SMZ*4L~3GZ^3t(T(PW3Fl{&b(Q^Ig5ol%b z7?ND{PZIQnaZ!R6Fza;mHxM9F7TX8LA}=7jYIZH1h-*rMrs(3}vx&?4p7?|`k-YE> z(G{Cad|xJ+0z58{aXkq*2!TjNuo#BSx*ApjgBWjx=p?><7`x>HokjSsMK@Si?W10T zIOx_XXD*6KLSZ6tv3zVu|1p>CXgm;Ol1&Et9o~MCgqDe+`Epb*Uyn{yl{(Avl2c ziv}&hxd8fljAw#=*s_xNl#+>?)SLysbDFr5Vp;q$!*8Xy>=a&*@$a;EGGUp2Hl0~* z$chk@jp{`*LH0YvO{R(L(IUqvvFN7Y>xW+i+0W392r2SHQTjKCTZrEV`qS_Y14n^l z@p1k}MrvW9hg}b4E^1X5Jll2ato4R+IoWf zP(%}K&9S|wl_q8<7>0eB68DEIma$s~=_K6a$Hc$D=QD~e?hhSa6A+8CH%+7{PHlBo zNl1JYePfb~WJ3RdLOT_%d5(-NcG zk9{0|J`|qE@HT!pEoV^vK!s^&X>tBU6X`-xG0aG$0PPm!5AaQ+N&m!tfmV+u(%b~g z0FAkdUpo5B;2lHKOUf&5yLB=;e>3t6L{l+z!0|3Ku#+rOXR;p>k?^m9=J*WySFGA1 zd;^I)Pok%$$@rOqB7URy2D@9H<5wO1SW%e!-);H}7i*&5b#_A`=tIy$)t@BMOOmH% zoQaibLFjyneFFIw_4%SGte=$n7hN40PR4HJf5r?ZK{(mN*jFpwi&F=ky#%!)naEi5 zjlik+9nvBv=>|=Je+vr9jr|fumBHSRmIUAG8lMT@BJ#0;$OOo;V$2GbrjV5o6k@hN zYe5$YPK8Y*JMD-jYR4|#h;4xu`#t{kiJhVL^!PSKx0_-Pf!{N31P&)|3x$+(um1tP z&e$!{^shmfkV5j%&q#v&1YMxDM<q=61*I2&V6NORMlL~sa>KjX8V;5X=_=!?{*e~THM z#jga#j8O8n=tTVCoJDg{*l2W<(fw#xcs&3&VjC%MVd_EDowf#onhcpiYE)Dntx{0)=6fRPUM%g z2|kF!9{M#X#!f&A0>dC*OTZ3vBF7*QSqd(3_pv3Tt)mS^7eM0q#O2XME#Y2De>>bF zE#N+mZWjE`?Q|lwQa^&*;N(S7nIXFeNhh3N(lX+l5R#nutiyjDGu^In*C7q0T_d)F zCLPcC4nEsx{%qzva2C>nr{EI`=UVw&NC zASKE~!b|jb)8fgDNHWI^x4fd?kD}|qag;b;^eyq*0ovg+e%(Xv|6x>jQfIP^Br^#N z#IX;FDnlURi>?#4XH+fH7yJyd$P)T9uw|rQn7HHM74@5=D1MtYM@5P`q5ASt#W{jS zE|ajE8iH~1lw<@uu#I4r%kis2zn~Ik(HQYxj$Nd_#;>NxAGFZq;5%&ZShZc?5qzD) zA!|kJO63)BSd8Hz0g zFGxXs;J>K;%PD#oZH0X4c$I*=I40DfeFc?!) zT?~m%X?0m4D4>;RA)t~HPNCn4R+j=>fsY_;MqB~xKY*LydErqEE|$K^nFad|+6-d7 z@rkB@lk)n1oX&NvY#RYNXssm@Sx7)_3TZ}=NP7Ycf@3vFGm8JaJcDZyO}|SG5SC0 zyCA=h-A22B&uDma(sHB!O$&DOpQDpiicCvjcAdpewXPxAGufiZ6fgwGpDCoPCVawd zilLV`uMc|LYWWnelcC?F&akd_=m@Z$V*p zgOmI_m9(A`ZX&6b;GY;@GGi=<6>s93P5tZQ(_J^|V~-UO*VDRszvA19A}WH7Dc~K6 zMKWQ3F9pf`?Iem;f>}D#k2v%r@HW-%RNX5L7J`}h-=R>E4y-_3a63sdtM4OpB7YJu zl9xj3t8KdS42Hv4|6nRfrxhpGWoo43CM4-aKnnDSDCif0@@e8;jNLK`T^Ve%C}Jm= ziDVf_+J}Bl`e(Et@gD~FUHGi>OXng9FrK5*0D^y2@@Dkc(W;A1XCb~Nb;)Z{R5?f{ zLhg-^h_5C&K!SGIic{cm)g{62uok=tT?g_kkY765gmV?hhC^~g9U5v8Ga;QzzZhh7 z@bSU-9hWOo_evx5BJm&>@uASF_=qHhtEv{>n*IxTo}e$N#r7g*wH%?*8Z1E-7#CNE zB0AHPB=gf*h))v8HsMnl-?a3_eU%m>_O|GX(nN;nL}Kyvrr!t7$>bZa6L97uupY)* zs(3~JKFQALSV)p7S!q__3H|n3nAlP>E`YulJaNHjX8%c7zyVK5l4jH*qEw$=i`^h! zVXgG2{5oWvbv4>jh)7N?BsJujw2*;ps>G1L)m2&Sj$tVxh?zk9Owx65RKa#xxpGr@ zN@52y?g5{dd~MtY(q|q;#8J|^ko}6&Wrzmj^P7^q(IP79Y^o{x;GaQx65tzO_3bro zD7^KEt)=?>j6>x5r=yb+98U0OX6vBJ-#wN;6~yV3L{{V?Gsr3(qz`1@X~8mnqkf&i zMiej782`Co26X4>_k_QYu9)+HB&DiS7)xO&rewZ2EF$Ozg`CmrCuEHv5Z+|O6~Z@G zXFLbx7>Y@z#PRVH35It$wo_V+=$ih;$MZkQPZ6}7fB`t$bmns)YX*5q0u!+UD?L_Z z79^*18B5_4L!3xWFuoS_6MPLtr4qp(Jn2fmsfSpDFOY(iVRdkF0dp7tEhCE zX)=BuqYz6%yCF4096n(VzldhdY?RMxp(&H(?Q-l6tDW@GQ>u>1OSBY$uR6@@qgAh%Qx z2(Wwj1p0*e_N2-X{6%dK8`Q^PI0gFq6%Os=6ZF?~gM*Z~r%!(e({tEEeF9~6A&#Ih zT?yy^U+mYV3?`2|b5L-Ye|LXh7MP3%UvP+j5BG|Dg#0y6pRh0=-<}RXdxx;#zbcan z8S#CBL;VdlyKiv6AXZ;4kUuGzgK=?4AKb_Aa@ZX~exdf@?*CXNSAlfaT8ScB<*+7? zxSZXZ$`zEuS|xEDc9Ok%M4KYk!U?6@oyGPEa?NIJOA_Q08tUI8$o`j4iobl^duMMk z>y)?=<;q&KC-Ujj$DYS-Y$8|vvespZ8aqNPH9dD`=+|M

    =m-_j5=hW6A9Kqy}?a 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 delta 67769 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[ge,xe] -0/0/ [0-9])。代币 " "{module},如果存在,将在创建新模块时自动替换为位置值。" -#: netbox/dcim/forms/model_forms.py:1094 +#: netbox/dcim/forms/model_forms.py:1107 msgid "Console port template" msgstr "控制台端口模板" -#: netbox/dcim/forms/model_forms.py:1102 +#: netbox/dcim/forms/model_forms.py:1115 msgid "Console server port template" msgstr "控制口模版" -#: netbox/dcim/forms/model_forms.py:1110 +#: netbox/dcim/forms/model_forms.py:1123 msgid "Front port template" msgstr "前向端口模版" -#: netbox/dcim/forms/model_forms.py:1118 +#: netbox/dcim/forms/model_forms.py:1131 msgid "Interface template" msgstr "接口模版" -#: netbox/dcim/forms/model_forms.py:1126 +#: netbox/dcim/forms/model_forms.py:1139 msgid "Power outlet template" msgstr "电源插座模版" -#: netbox/dcim/forms/model_forms.py:1134 +#: netbox/dcim/forms/model_forms.py:1147 msgid "Power port template" msgstr "电源接口模版" -#: netbox/dcim/forms/model_forms.py:1142 +#: netbox/dcim/forms/model_forms.py:1155 msgid "Rear port template" msgstr "后置接口模版" -#: netbox/dcim/forms/model_forms.py:1151 netbox/dcim/forms/model_forms.py:1395 -#: netbox/dcim/forms/model_forms.py:1558 netbox/dcim/forms/model_forms.py:1590 -#: netbox/dcim/tables/connections.py:65 netbox/ipam/forms/bulk_import.py:318 -#: netbox/ipam/forms/model_forms.py:280 netbox/ipam/forms/model_forms.py:289 -#: netbox/ipam/tables/fhrp.py:64 netbox/ipam/tables/ip.py:372 -#: netbox/ipam/tables/vlans.py:169 -#: netbox/templates/circuits/inc/circuit_termination_fields.html:51 -#: netbox/templates/dcim/frontport.html:106 -#: netbox/templates/dcim/interface.html:27 -#: netbox/templates/dcim/interface.html:184 -#: netbox/templates/dcim/interface.html:310 -#: netbox/templates/dcim/rearport.html:102 -#: netbox/templates/virtualization/vminterface.html:18 -#: netbox/templates/vpn/tunneltermination.html:31 -#: netbox/templates/wireless/inc/wirelesslink_interface.html:10 -#: netbox/templates/wireless/wirelesslink.html:10 -#: netbox/templates/wireless/wirelesslink.html:55 -#: netbox/virtualization/forms/model_forms.py:348 -#: netbox/vpn/forms/bulk_import.py:297 netbox/vpn/forms/model_forms.py:436 -#: netbox/vpn/forms/model_forms.py:445 -#: netbox/wireless/forms/model_forms.py:113 -#: netbox/wireless/forms/model_forms.py:155 -msgid "Interface" -msgstr "接口" - -#: netbox/dcim/forms/model_forms.py:1152 netbox/dcim/forms/model_forms.py:1591 +#: netbox/dcim/forms/model_forms.py:1165 netbox/dcim/forms/model_forms.py:1636 #: netbox/dcim/tables/connections.py:27 #: netbox/templates/dcim/consoleport.html:17 #: netbox/templates/dcim/consoleserverport.html:74 @@ -4940,102 +5381,128 @@ msgstr "接口" msgid "Console Port" msgstr "Console 端口" -#: netbox/dcim/forms/model_forms.py:1153 netbox/dcim/forms/model_forms.py:1592 +#: netbox/dcim/forms/model_forms.py:1166 netbox/dcim/forms/model_forms.py:1637 #: netbox/templates/dcim/consoleport.html:73 #: netbox/templates/dcim/consoleserverport.html:17 #: netbox/templates/dcim/frontport.html:109 msgid "Console Server Port" msgstr "Console 服务器端口" -#: netbox/dcim/forms/model_forms.py:1154 netbox/dcim/forms/model_forms.py:1593 -#: netbox/templates/circuits/inc/circuit_termination_fields.html:52 +#: netbox/dcim/forms/model_forms.py:1167 netbox/dcim/forms/model_forms.py:1638 +#: netbox/templates/circuits/inc/circuit_termination_fields.html:53 #: netbox/templates/dcim/consoleport.html:76 #: netbox/templates/dcim/consoleserverport.html:77 #: netbox/templates/dcim/frontport.html:17 #: netbox/templates/dcim/frontport.html:115 -#: netbox/templates/dcim/interface.html:187 +#: netbox/templates/dcim/interface.html:244 #: netbox/templates/dcim/rearport.html:105 msgid "Front Port" msgstr "前置接口" -#: netbox/dcim/forms/model_forms.py:1155 netbox/dcim/forms/model_forms.py:1594 -#: netbox/dcim/tables/devices.py:710 -#: netbox/templates/circuits/inc/circuit_termination_fields.html:53 +#: netbox/dcim/forms/model_forms.py:1168 netbox/dcim/forms/model_forms.py:1639 +#: netbox/dcim/tables/devices.py:744 +#: netbox/templates/circuits/inc/circuit_termination_fields.html:54 #: netbox/templates/dcim/consoleport.html:79 #: netbox/templates/dcim/consoleserverport.html:80 #: netbox/templates/dcim/frontport.html:50 #: netbox/templates/dcim/frontport.html:118 -#: netbox/templates/dcim/interface.html:190 +#: netbox/templates/dcim/interface.html:247 #: netbox/templates/dcim/rearport.html:17 #: netbox/templates/dcim/rearport.html:108 msgid "Rear Port" msgstr "后置接口" -#: netbox/dcim/forms/model_forms.py:1156 netbox/dcim/forms/model_forms.py:1595 -#: netbox/dcim/tables/connections.py:46 netbox/dcim/tables/devices.py:512 -#: netbox/templates/dcim/poweroutlet.html:44 +#: netbox/dcim/forms/model_forms.py:1169 netbox/dcim/forms/model_forms.py:1640 +#: netbox/dcim/tables/connections.py:46 netbox/dcim/tables/devices.py:521 +#: netbox/templates/dcim/poweroutlet.html:54 #: netbox/templates/dcim/powerport.html:17 msgid "Power Port" msgstr "电源接口" -#: netbox/dcim/forms/model_forms.py:1157 netbox/dcim/forms/model_forms.py:1596 +#: netbox/dcim/forms/model_forms.py:1170 netbox/dcim/forms/model_forms.py:1641 #: netbox/templates/dcim/poweroutlet.html:17 #: netbox/templates/dcim/powerport.html:77 msgid "Power Outlet" msgstr "电源插座" -#: netbox/dcim/forms/model_forms.py:1159 netbox/dcim/forms/model_forms.py:1598 +#: netbox/dcim/forms/model_forms.py:1172 netbox/dcim/forms/model_forms.py:1643 msgid "Component Assignment" msgstr "组件分配" -#: netbox/dcim/forms/model_forms.py:1202 netbox/dcim/forms/model_forms.py:1645 +#: netbox/dcim/forms/model_forms.py:1218 netbox/dcim/forms/model_forms.py:1690 msgid "An InventoryItem can only be assigned to a single component." msgstr "库存项只能分配给单个组件" -#: netbox/dcim/forms/model_forms.py:1339 +#: netbox/dcim/forms/model_forms.py:1355 msgid "LAG interface" msgstr "链路聚合接口" -#: netbox/dcim/forms/model_forms.py:1362 +#: netbox/dcim/forms/model_forms.py:1378 msgid "Filter VLANs available for assignment by group." msgstr "按组筛选可供分配的 VLAN。" -#: netbox/dcim/forms/model_forms.py:1491 +#: netbox/dcim/forms/model_forms.py:1533 msgid "Child Device" msgstr "子设备" -#: netbox/dcim/forms/model_forms.py:1492 +#: netbox/dcim/forms/model_forms.py:1534 msgid "" "Child devices must first be created and assigned to the site and rack of the" " parent device." msgstr "必须首先创建子设备,并将其分配给父设备的站点和机柜。" -#: netbox/dcim/forms/model_forms.py:1534 +#: netbox/dcim/forms/model_forms.py:1576 msgid "Console port" msgstr "Console 接口" -#: netbox/dcim/forms/model_forms.py:1542 +#: netbox/dcim/forms/model_forms.py:1584 msgid "Console server port" msgstr "Console 服务器端口" -#: netbox/dcim/forms/model_forms.py:1550 +#: netbox/dcim/forms/model_forms.py:1592 msgid "Front port" msgstr "前置接口" -#: netbox/dcim/forms/model_forms.py:1566 +#: netbox/dcim/forms/model_forms.py:1608 msgid "Power outlet" msgstr "电源插座" -#: netbox/dcim/forms/model_forms.py:1586 +#: netbox/dcim/forms/model_forms.py:1630 #: netbox/templates/dcim/inventoryitem.html:17 msgid "Inventory Item" msgstr "库存项" -#: netbox/dcim/forms/model_forms.py:1659 +#: netbox/dcim/forms/model_forms.py:1704 #: netbox/templates/dcim/inventoryitemrole.html:15 msgid "Inventory Item Role" msgstr "库存物品分类" +#: netbox/dcim/forms/model_forms.py:1773 +msgid "VM Interface" +msgstr "虚拟机接口" + +#: netbox/dcim/forms/model_forms.py:1788 netbox/ipam/forms/filtersets.py:608 +#: netbox/ipam/forms/model_forms.py:334 netbox/ipam/forms/model_forms.py:796 +#: netbox/ipam/forms/model_forms.py:822 netbox/ipam/tables/vlans.py:171 +#: netbox/templates/virtualization/virtualdisk.html:21 +#: netbox/templates/virtualization/virtualmachine.html:12 +#: netbox/templates/virtualization/vminterface.html:21 +#: netbox/templates/vpn/tunneltermination.html:25 +#: netbox/virtualization/forms/filtersets.py:202 +#: netbox/virtualization/forms/filtersets.py:247 +#: netbox/virtualization/forms/model_forms.py:227 +#: netbox/virtualization/tables/virtualmachines.py:105 +#: netbox/virtualization/tables/virtualmachines.py:161 +#: netbox/vpn/choices.py:53 netbox/vpn/forms/filtersets.py:293 +#: netbox/vpn/forms/model_forms.py:161 netbox/vpn/forms/model_forms.py:172 +#: netbox/vpn/forms/model_forms.py:274 netbox/vpn/forms/model_forms.py:457 +msgid "Virtual Machine" +msgstr "虚拟机" + +#: netbox/dcim/forms/model_forms.py:1827 +msgid "A MAC address can only be assigned to a single object." +msgstr "MAC 地址只能分配给单个对象。" + #: netbox/dcim/forms/object_create.py:48 #: netbox/dcim/forms/object_create.py:199 #: netbox/dcim/forms/object_create.py:347 @@ -5052,7 +5519,7 @@ msgid "" msgstr "提供了 {value_count}个参数,实际需要{pattern_count}个。" #: netbox/dcim/forms/object_create.py:110 -#: netbox/dcim/forms/object_create.py:263 netbox/dcim/tables/devices.py:252 +#: netbox/dcim/forms/object_create.py:263 netbox/dcim/tables/devices.py:263 msgid "Rear ports" msgstr "后置接口" @@ -5075,7 +5542,7 @@ msgid "" "selected number of rear port positions ({rearport_count})." msgstr "要创建的前置端口数 ({frontport_count}) 必须与所选的后置端口数({rearport_count})匹配。" -#: netbox/dcim/forms/object_create.py:401 netbox/dcim/tables/devices.py:1033 +#: netbox/dcim/forms/object_create.py:401 netbox/dcim/tables/devices.py:1065 #: netbox/ipam/tables/fhrp.py:31 netbox/templates/dcim/virtualchassis.html:53 #: netbox/templates/dcim/virtualchassis_edit.html:47 #: netbox/templates/ipam/fhrpgroup.html:38 @@ -5092,30 +5559,30 @@ msgid "" "member." msgstr "第一个成员设备的位置。每增加一个成员增加一个。" -#: netbox/dcim/forms/object_create.py:427 +#: netbox/dcim/forms/object_create.py:428 msgid "A position must be specified for the first VC member." msgstr "必须为第一个VC成员指定一个位置。" -#: netbox/dcim/models/cables.py:62 -#: netbox/dcim/models/device_component_templates.py:55 -#: netbox/dcim/models/device_components.py:62 +#: netbox/dcim/models/cables.py:64 +#: netbox/dcim/models/device_component_templates.py:51 +#: netbox/dcim/models/device_components.py:57 #: netbox/extras/models/customfields.py:111 msgid "label" msgstr "标记" -#: netbox/dcim/models/cables.py:71 +#: netbox/dcim/models/cables.py:73 msgid "length" msgstr "长度" -#: netbox/dcim/models/cables.py:78 +#: netbox/dcim/models/cables.py:80 msgid "length unit" msgstr "长度单位" -#: netbox/dcim/models/cables.py:95 +#: netbox/dcim/models/cables.py:98 msgid "cable" msgstr "线缆" -#: netbox/dcim/models/cables.py:96 +#: netbox/dcim/models/cables.py:99 msgid "cables" msgstr "线缆" @@ -5140,54 +5607,83 @@ msgstr "不兼容的端点类型: {type_a} 和{type_b}" msgid "A and B terminations cannot connect to the same object." msgstr "A B端不能连接到同一个对象" -#: netbox/dcim/models/cables.py:260 netbox/ipam/models/asns.py:37 +#: netbox/dcim/models/cables.py:262 netbox/ipam/models/asns.py:37 msgid "end" msgstr "结束" -#: netbox/dcim/models/cables.py:313 +#: netbox/dcim/models/cables.py:315 msgid "cable termination" msgstr "线缆端点" -#: netbox/dcim/models/cables.py:314 +#: netbox/dcim/models/cables.py:316 msgid "cable terminations" msgstr "线缆端点" -#: netbox/dcim/models/cables.py:333 +#: netbox/dcim/models/cables.py:335 #, python-brace-format msgid "" "Duplicate termination found for {app_label}.{model} {termination_id}: cable " "{cable_pk}" msgstr "发现{app_label}重复的终端:{model} {termination_id}: 线缆 {cable_pk}" -#: netbox/dcim/models/cables.py:343 +#: netbox/dcim/models/cables.py:345 #, python-brace-format msgid "Cables cannot be terminated to {type_display} interfaces" msgstr "线缆不能连接至{type_display} 接口" -#: netbox/dcim/models/cables.py:350 +#: netbox/dcim/models/cables.py:352 msgid "Circuit terminations attached to a provider network may not be cabled." msgstr "运营商网络的线路可能没有连接。" -#: netbox/dcim/models/cables.py:448 netbox/extras/models/configs.py:50 +#: netbox/dcim/models/cables.py:450 netbox/extras/models/configs.py:50 msgid "is active" msgstr "激活的" -#: netbox/dcim/models/cables.py:452 +#: netbox/dcim/models/cables.py:454 msgid "is complete" msgstr "完成的" -#: netbox/dcim/models/cables.py:456 +#: netbox/dcim/models/cables.py:458 msgid "is split" msgstr "被拆分的" -#: netbox/dcim/models/cables.py:464 +#: netbox/dcim/models/cables.py:466 msgid "cable path" msgstr "线缆连接路径" -#: netbox/dcim/models/cables.py:465 +#: netbox/dcim/models/cables.py:467 msgid "cable paths" msgstr "线缆连接路径" +#: netbox/dcim/models/cables.py:539 +msgid "All originating terminations must be attached to the same link" +msgstr "所有原始终端必须连接到同一个链接" + +#: netbox/dcim/models/cables.py:551 +msgid "All mid-span terminations must have the same termination type" +msgstr "所有中跨端子必须具有相同的端接类型" + +#: netbox/dcim/models/cables.py:556 +msgid "All mid-span terminations must have the same parent object" +msgstr "所有中跨终端必须具有相同的父对象" + +#: netbox/dcim/models/cables.py:580 +msgid "All links must be cable or wireless" +msgstr "所有链路必须是有线或无线的" + +#: netbox/dcim/models/cables.py:582 +msgid "All links must match first link type" +msgstr "所有链接必须匹配第一个链接类型" + +#: netbox/dcim/models/cables.py:665 +msgid "" +"All positions counts within the path on opposite ends of links must match" +msgstr "链路两端路径内的所有位置都必须匹配" + +#: netbox/dcim/models/cables.py:674 +msgid "Remote termination position filter is missing" +msgstr "缺少远程终端位置过滤器" + #: netbox/dcim/models/device_component_templates.py:46 #, python-brace-format msgid "" @@ -5195,906 +5691,929 @@ msgid "" "attached to a module type." msgstr "当连接到模块类型时,{module} 被认定为模块托架位置的替代。" -#: netbox/dcim/models/device_component_templates.py:58 -#: netbox/dcim/models/device_components.py:65 +#: netbox/dcim/models/device_component_templates.py:54 +#: netbox/dcim/models/device_components.py:60 msgid "Physical label" msgstr "物理标签" -#: netbox/dcim/models/device_component_templates.py:103 +#: netbox/dcim/models/device_component_templates.py:99 msgid "Component templates cannot be moved to a different device type." msgstr "组件模板无法移动到其他设备类型。" -#: netbox/dcim/models/device_component_templates.py:154 +#: netbox/dcim/models/device_component_templates.py:150 msgid "" "A component template cannot be associated with both a device type and a " "module type." msgstr "组件模板不能同时与设备类型和模块类型相关联。" -#: netbox/dcim/models/device_component_templates.py:158 +#: netbox/dcim/models/device_component_templates.py:154 msgid "" "A component template must be associated with either a device type or a " "module type." msgstr "组件模板必须与设备类型或模块类型相关联。" -#: netbox/dcim/models/device_component_templates.py:212 +#: netbox/dcim/models/device_component_templates.py:209 msgid "console port template" msgstr "console端口模板" -#: netbox/dcim/models/device_component_templates.py:213 +#: netbox/dcim/models/device_component_templates.py:210 msgid "console port templates" msgstr "console端口模板" -#: netbox/dcim/models/device_component_templates.py:246 +#: netbox/dcim/models/device_component_templates.py:244 msgid "console server port template" msgstr "console服务器端口模板" -#: netbox/dcim/models/device_component_templates.py:247 +#: netbox/dcim/models/device_component_templates.py:245 msgid "console server port templates" msgstr "console服务器端口模板" -#: netbox/dcim/models/device_component_templates.py:278 -#: netbox/dcim/models/device_components.py:352 +#: netbox/dcim/models/device_component_templates.py:277 +#: netbox/dcim/models/device_components.py:345 msgid "maximum draw" msgstr "最大功率" -#: netbox/dcim/models/device_component_templates.py:285 -#: netbox/dcim/models/device_components.py:359 +#: netbox/dcim/models/device_component_templates.py:284 +#: netbox/dcim/models/device_components.py:352 msgid "allocated draw" msgstr "分配功率" -#: netbox/dcim/models/device_component_templates.py:295 +#: netbox/dcim/models/device_component_templates.py:294 msgid "power port template" msgstr "电源端口模版" -#: netbox/dcim/models/device_component_templates.py:296 +#: netbox/dcim/models/device_component_templates.py:295 msgid "power port templates" msgstr "电源端口模版" #: netbox/dcim/models/device_component_templates.py:315 -#: netbox/dcim/models/device_components.py:382 +#: netbox/dcim/models/device_components.py:372 #, python-brace-format msgid "Allocated draw cannot exceed the maximum draw ({maximum_draw}W)." msgstr "分配功率不能超过最大功率({maximum_draw}瓦)" -#: netbox/dcim/models/device_component_templates.py:347 -#: netbox/dcim/models/device_components.py:477 +#: netbox/dcim/models/device_component_templates.py:349 +#: netbox/dcim/models/device_components.py:468 msgid "feed leg" msgstr "馈电线路" -#: netbox/dcim/models/device_component_templates.py:351 -#: netbox/dcim/models/device_components.py:481 +#: netbox/dcim/models/device_component_templates.py:354 +#: netbox/dcim/models/device_components.py:473 msgid "Phase (for three-phase feeds)" msgstr "相位(用于三相电)" -#: netbox/dcim/models/device_component_templates.py:357 +#: netbox/dcim/models/device_component_templates.py:360 msgid "power outlet template" msgstr "电源插座模版" -#: netbox/dcim/models/device_component_templates.py:358 +#: netbox/dcim/models/device_component_templates.py:361 msgid "power outlet templates" msgstr "电源插座模版" -#: netbox/dcim/models/device_component_templates.py:367 +#: netbox/dcim/models/device_component_templates.py:370 #, python-brace-format msgid "Parent power port ({power_port}) must belong to the same device type" msgstr "父电源端口 ({power_port}) 必须属于相同的设备类型" -#: netbox/dcim/models/device_component_templates.py:371 +#: netbox/dcim/models/device_component_templates.py:376 #, python-brace-format msgid "Parent power port ({power_port}) must belong to the same module type" msgstr "父电源端口 ({power_port}) 必须属于相同的设备类型" -#: netbox/dcim/models/device_component_templates.py:423 -#: netbox/dcim/models/device_components.py:611 +#: netbox/dcim/models/device_component_templates.py:430 +#: netbox/dcim/models/device_components.py:659 msgid "management only" msgstr "仅限管理" -#: netbox/dcim/models/device_component_templates.py:431 -#: netbox/dcim/models/device_components.py:550 +#: netbox/dcim/models/device_component_templates.py:438 +#: netbox/dcim/models/device_components.py:539 msgid "bridge interface" msgstr "桥接接口" -#: netbox/dcim/models/device_component_templates.py:449 -#: netbox/dcim/models/device_components.py:636 +#: netbox/dcim/models/device_component_templates.py:459 +#: netbox/dcim/models/device_components.py:685 msgid "wireless role" msgstr "无线角色" -#: netbox/dcim/models/device_component_templates.py:455 +#: netbox/dcim/models/device_component_templates.py:465 msgid "interface template" msgstr "接口模版" -#: netbox/dcim/models/device_component_templates.py:456 +#: netbox/dcim/models/device_component_templates.py:466 msgid "interface templates" msgstr "接口模版" -#: netbox/dcim/models/device_component_templates.py:463 -#: netbox/dcim/models/device_components.py:804 -#: netbox/virtualization/models/virtualmachines.py:405 +#: netbox/dcim/models/device_component_templates.py:473 +#: netbox/dcim/models/device_components.py:845 +#: netbox/virtualization/models/virtualmachines.py:385 msgid "An interface cannot be bridged to itself." msgstr "接口不能桥接到自己" -#: netbox/dcim/models/device_component_templates.py:466 +#: netbox/dcim/models/device_component_templates.py:477 #, python-brace-format msgid "Bridge interface ({bridge}) must belong to the same device type" msgstr "桥接接口({bridge}) 必须属于相同的设备类型" -#: netbox/dcim/models/device_component_templates.py:470 +#: netbox/dcim/models/device_component_templates.py:483 #, python-brace-format msgid "Bridge interface ({bridge}) must belong to the same module type" msgstr "桥接接口({bridge}) 必须属于相同的模块类型" -#: netbox/dcim/models/device_component_templates.py:526 -#: netbox/dcim/models/device_components.py:984 +#: netbox/dcim/models/device_component_templates.py:540 +#: netbox/dcim/models/device_components.py:1035 msgid "rear port position" msgstr "后置接口位置" -#: netbox/dcim/models/device_component_templates.py:551 +#: netbox/dcim/models/device_component_templates.py:565 msgid "front port template" msgstr "前置接口模板" -#: netbox/dcim/models/device_component_templates.py:552 +#: netbox/dcim/models/device_component_templates.py:566 msgid "front port templates" msgstr "前置接口模板" -#: netbox/dcim/models/device_component_templates.py:562 +#: netbox/dcim/models/device_component_templates.py:576 #, python-brace-format msgid "Rear port ({name}) must belong to the same device type" msgstr "后置接口({name})必须属于相同的设备类型" -#: netbox/dcim/models/device_component_templates.py:568 +#: netbox/dcim/models/device_component_templates.py:582 #, python-brace-format msgid "" "Invalid rear port position ({position}); rear port {name} has only {count} " "positions" msgstr "无效的后端口位置 ({position});后端口{name}只有{count}个" -#: netbox/dcim/models/device_component_templates.py:621 -#: netbox/dcim/models/device_components.py:1053 +#: netbox/dcim/models/device_component_templates.py:635 +#: netbox/dcim/models/device_components.py:1101 msgid "positions" msgstr "位置" -#: netbox/dcim/models/device_component_templates.py:632 +#: netbox/dcim/models/device_component_templates.py:646 msgid "rear port template" msgstr "后置端口模版" -#: netbox/dcim/models/device_component_templates.py:633 +#: netbox/dcim/models/device_component_templates.py:647 msgid "rear port templates" msgstr "后置端口模版" -#: netbox/dcim/models/device_component_templates.py:662 -#: netbox/dcim/models/device_components.py:1103 +#: netbox/dcim/models/device_component_templates.py:676 +#: netbox/dcim/models/device_components.py:1148 msgid "position" msgstr "位置" -#: netbox/dcim/models/device_component_templates.py:665 -#: netbox/dcim/models/device_components.py:1106 +#: netbox/dcim/models/device_component_templates.py:679 +#: netbox/dcim/models/device_components.py:1151 msgid "Identifier to reference when renaming installed components" msgstr "重命名已安装组件时要引用的标识符" -#: netbox/dcim/models/device_component_templates.py:671 +#: netbox/dcim/models/device_component_templates.py:685 msgid "module bay template" msgstr "模块托架模版" -#: netbox/dcim/models/device_component_templates.py:672 +#: netbox/dcim/models/device_component_templates.py:686 msgid "module bay templates" msgstr "模块托架模版" -#: netbox/dcim/models/device_component_templates.py:699 +#: netbox/dcim/models/device_component_templates.py:713 msgid "device bay template" msgstr "设备托架模版" -#: netbox/dcim/models/device_component_templates.py:700 +#: netbox/dcim/models/device_component_templates.py:714 msgid "device bay templates" msgstr "设备托架模版" -#: netbox/dcim/models/device_component_templates.py:713 +#: netbox/dcim/models/device_component_templates.py:728 #, python-brace-format msgid "" "Subdevice role of device type ({device_type}) must be set to \"parent\" to " "allow device bays." msgstr "设备类型({device_type})的子设备角色必须设置为“父设备”,才能允许设备托架。" -#: netbox/dcim/models/device_component_templates.py:768 -#: netbox/dcim/models/device_components.py:1262 +#: netbox/dcim/models/device_component_templates.py:784 +#: netbox/dcim/models/device_components.py:1304 msgid "part ID" msgstr "零件ID" -#: netbox/dcim/models/device_component_templates.py:770 -#: netbox/dcim/models/device_components.py:1264 +#: netbox/dcim/models/device_component_templates.py:786 +#: netbox/dcim/models/device_components.py:1306 msgid "Manufacturer-assigned part identifier" msgstr "制造商指定的零件标识符" -#: netbox/dcim/models/device_component_templates.py:787 +#: netbox/dcim/models/device_component_templates.py:803 msgid "inventory item template" msgstr "库存项模版" -#: netbox/dcim/models/device_component_templates.py:788 +#: netbox/dcim/models/device_component_templates.py:804 msgid "inventory item templates" msgstr "库存项模版" -#: netbox/dcim/models/device_components.py:105 +#: netbox/dcim/models/device_components.py:100 msgid "Components cannot be moved to a different device." msgstr "组件模板无法移动到其他设备类型。" -#: netbox/dcim/models/device_components.py:144 +#: netbox/dcim/models/device_components.py:139 msgid "cable end" msgstr "线缆终点" -#: netbox/dcim/models/device_components.py:150 +#: netbox/dcim/models/device_components.py:146 msgid "mark connected" msgstr "标记已连接" -#: netbox/dcim/models/device_components.py:152 +#: netbox/dcim/models/device_components.py:148 msgid "Treat as if a cable is connected" msgstr "视为电缆已连接" -#: netbox/dcim/models/device_components.py:170 +#: netbox/dcim/models/device_components.py:166 msgid "Must specify cable end (A or B) when attaching a cable." msgstr "连接电缆时必须指定电缆末端(A或B)。" -#: netbox/dcim/models/device_components.py:174 +#: netbox/dcim/models/device_components.py:170 msgid "Cable end must not be set without a cable." msgstr "不得在没有线缆的情况下设置线缆末端。" -#: netbox/dcim/models/device_components.py:178 +#: netbox/dcim/models/device_components.py:174 msgid "Cannot mark as connected with a cable attached." msgstr "无法标记为已连接线缆。" -#: netbox/dcim/models/device_components.py:202 +#: netbox/dcim/models/device_components.py:198 #, python-brace-format msgid "{class_name} models must declare a parent_object property" msgstr "{class_name}模块必须声明上架类型" -#: netbox/dcim/models/device_components.py:287 -#: netbox/dcim/models/device_components.py:316 -#: netbox/dcim/models/device_components.py:349 -#: netbox/dcim/models/device_components.py:467 +#: netbox/dcim/models/device_components.py:284 +#: netbox/dcim/models/device_components.py:311 +#: netbox/dcim/models/device_components.py:342 +#: netbox/dcim/models/device_components.py:458 msgid "Physical port type" msgstr "物理端口类型" -#: netbox/dcim/models/device_components.py:290 -#: netbox/dcim/models/device_components.py:319 +#: netbox/dcim/models/device_components.py:287 +#: netbox/dcim/models/device_components.py:314 msgid "speed" msgstr "速率" -#: netbox/dcim/models/device_components.py:294 -#: netbox/dcim/models/device_components.py:323 +#: netbox/dcim/models/device_components.py:291 +#: netbox/dcim/models/device_components.py:318 msgid "Port speed in bits per second" msgstr "端口速度(单位bps)" -#: netbox/dcim/models/device_components.py:300 +#: netbox/dcim/models/device_components.py:297 msgid "console port" msgstr "console端口" -#: netbox/dcim/models/device_components.py:301 +#: netbox/dcim/models/device_components.py:298 msgid "console ports" msgstr "console端口" -#: netbox/dcim/models/device_components.py:329 +#: netbox/dcim/models/device_components.py:324 msgid "console server port" msgstr "console服务器端口" -#: netbox/dcim/models/device_components.py:330 +#: netbox/dcim/models/device_components.py:325 msgid "console server ports" msgstr "console服务器端口" -#: netbox/dcim/models/device_components.py:369 +#: netbox/dcim/models/device_components.py:362 msgid "power port" msgstr "电源接口" -#: netbox/dcim/models/device_components.py:370 +#: netbox/dcim/models/device_components.py:363 msgid "power ports" msgstr "电源接口" -#: netbox/dcim/models/device_components.py:487 +#: netbox/dcim/models/device_components.py:483 msgid "power outlet" msgstr "电源插座" -#: netbox/dcim/models/device_components.py:488 +#: netbox/dcim/models/device_components.py:484 msgid "power outlets" msgstr "电源插座" -#: netbox/dcim/models/device_components.py:499 +#: netbox/dcim/models/device_components.py:492 #, python-brace-format msgid "Parent power port ({power_port}) must belong to the same device" msgstr "父电源端口({power_port})必须属于同一设备" -#: netbox/dcim/models/device_components.py:530 netbox/vpn/models/crypto.py:81 -#: netbox/vpn/models/crypto.py:226 +#: netbox/dcim/models/device_components.py:518 netbox/vpn/models/crypto.py:80 +#: netbox/vpn/models/crypto.py:222 msgid "mode" msgstr "模式" -#: netbox/dcim/models/device_components.py:534 +#: netbox/dcim/models/device_components.py:523 msgid "IEEE 802.1Q tagging strategy" msgstr "IEEE 802.1Q VLAN 标记策略" -#: netbox/dcim/models/device_components.py:542 +#: netbox/dcim/models/device_components.py:531 msgid "parent interface" msgstr "父接口" -#: netbox/dcim/models/device_components.py:602 -msgid "parent LAG" -msgstr "父聚合组" - -#: netbox/dcim/models/device_components.py:612 -msgid "This interface is used only for out-of-band management" -msgstr "该接口仅用于带外管理" - -#: netbox/dcim/models/device_components.py:617 -msgid "speed (Kbps)" -msgstr "速率(Kbps)" - -#: netbox/dcim/models/device_components.py:620 -msgid "duplex" -msgstr "双工" - -#: netbox/dcim/models/device_components.py:630 -msgid "64-bit World Wide Name" -msgstr "64位全球唯一标识符" - -#: netbox/dcim/models/device_components.py:642 -msgid "wireless channel" -msgstr "无线信道" - -#: netbox/dcim/models/device_components.py:649 -msgid "channel frequency (MHz)" -msgstr "信道频率(MHz)" - -#: netbox/dcim/models/device_components.py:650 -#: netbox/dcim/models/device_components.py:658 -msgid "Populated by selected channel (if set)" -msgstr "由所选通道填充(如有)" - -#: netbox/dcim/models/device_components.py:664 -msgid "transmit power (dBm)" -msgstr "发射功率(dBm)" - -#: netbox/dcim/models/device_components.py:689 netbox/wireless/models.py:117 -msgid "wireless LANs" -msgstr "无线局域网" - -#: netbox/dcim/models/device_components.py:697 -#: netbox/virtualization/models/virtualmachines.py:335 +#: netbox/dcim/models/device_components.py:547 msgid "untagged VLAN" msgstr "未标记VLAN" -#: netbox/dcim/models/device_components.py:703 -#: netbox/virtualization/models/virtualmachines.py:341 +#: netbox/dcim/models/device_components.py:553 msgid "tagged VLANs" msgstr "已标记 VLANs" -#: netbox/dcim/models/device_components.py:745 -#: netbox/virtualization/models/virtualmachines.py:377 +#: netbox/dcim/models/device_components.py:561 +#: netbox/dcim/tables/devices.py:602 netbox/ipam/forms/bulk_edit.py:510 +#: netbox/ipam/forms/bulk_import.py:491 netbox/ipam/forms/filtersets.py:565 +#: netbox/ipam/forms/model_forms.py:692 netbox/ipam/tables/vlans.py:106 +#: netbox/templates/dcim/interface.html:86 netbox/templates/ipam/vlan.html:77 +msgid "Q-in-Q SVLAN" +msgstr "Q-in-Q SVLAN" + +#: netbox/dcim/models/device_components.py:576 +msgid "primary MAC address" +msgstr "主 MAC 地址" + +#: netbox/dcim/models/device_components.py:588 +msgid "Only Q-in-Q interfaces may specify a service VLAN." +msgstr "只有 Q-in-Q 接口可以指定服务 VLAN。" + +#: netbox/dcim/models/device_components.py:594 +#, python-brace-format +msgid "MAC address {mac_address} is not assigned to this interface." +msgstr "MAC 地址 {mac_address} 未分配给此接口。" + +#: netbox/dcim/models/device_components.py:650 +msgid "parent LAG" +msgstr "父聚合组" + +#: netbox/dcim/models/device_components.py:660 +msgid "This interface is used only for out-of-band management" +msgstr "该接口仅用于带外管理" + +#: netbox/dcim/models/device_components.py:665 +msgid "speed (Kbps)" +msgstr "速率(Kbps)" + +#: netbox/dcim/models/device_components.py:668 +msgid "duplex" +msgstr "双工" + +#: netbox/dcim/models/device_components.py:678 +msgid "64-bit World Wide Name" +msgstr "64位全球唯一标识符" + +#: netbox/dcim/models/device_components.py:692 +msgid "wireless channel" +msgstr "无线信道" + +#: netbox/dcim/models/device_components.py:699 +msgid "channel frequency (MHz)" +msgstr "信道频率(MHz)" + +#: netbox/dcim/models/device_components.py:700 +#: netbox/dcim/models/device_components.py:708 +msgid "Populated by selected channel (if set)" +msgstr "由所选通道填充(如有)" + +#: netbox/dcim/models/device_components.py:714 +msgid "transmit power (dBm)" +msgstr "发射功率(dBm)" + +#: netbox/dcim/models/device_components.py:741 netbox/wireless/models.py:117 +msgid "wireless LANs" +msgstr "无线局域网" + +#: netbox/dcim/models/device_components.py:789 +#: netbox/virtualization/models/virtualmachines.py:359 msgid "interface" msgstr "接口" -#: netbox/dcim/models/device_components.py:746 -#: netbox/virtualization/models/virtualmachines.py:378 +#: netbox/dcim/models/device_components.py:790 +#: netbox/virtualization/models/virtualmachines.py:360 msgid "interfaces" msgstr "接口" -#: netbox/dcim/models/device_components.py:757 +#: netbox/dcim/models/device_components.py:798 #, python-brace-format msgid "{display_type} interfaces cannot have a cable attached." msgstr "{display_type}接口不能连接线缆。" -#: netbox/dcim/models/device_components.py:765 +#: netbox/dcim/models/device_components.py:806 #, python-brace-format msgid "{display_type} interfaces cannot be marked as connected." msgstr "{display_type}接口不能标记为已连接。" -#: netbox/dcim/models/device_components.py:774 -#: netbox/virtualization/models/virtualmachines.py:390 +#: netbox/dcim/models/device_components.py:815 +#: netbox/virtualization/models/virtualmachines.py:370 msgid "An interface cannot be its own parent." msgstr "接口不能是自己的父级。" -#: netbox/dcim/models/device_components.py:778 +#: netbox/dcim/models/device_components.py:819 msgid "Only virtual interfaces may be assigned to a parent interface." msgstr "只能将虚拟接口分配给父接口。" -#: netbox/dcim/models/device_components.py:785 +#: netbox/dcim/models/device_components.py:826 #, python-brace-format msgid "" "The selected parent interface ({interface}) belongs to a different device " "({device})" msgstr "所选父接口({interface}) 属于另一个设备 ({device})" -#: netbox/dcim/models/device_components.py:791 +#: netbox/dcim/models/device_components.py:832 #, python-brace-format msgid "" "The selected parent interface ({interface}) belongs to {device}, which is " "not part of virtual chassis {virtual_chassis}." msgstr "所选的父接口({interface})属于 {device},该设备不是虚拟机箱{virtual_chassis}的一部分。" -#: netbox/dcim/models/device_components.py:811 +#: netbox/dcim/models/device_components.py:852 #, python-brace-format msgid "" "The selected bridge interface ({bridge}) belongs to a different device " "({device})." msgstr "所选桥接接口 ({bridge})属于另一个设备({device})。" -#: netbox/dcim/models/device_components.py:817 +#: netbox/dcim/models/device_components.py:858 #, python-brace-format msgid "" "The selected bridge interface ({interface}) belongs to {device}, which is " "not part of virtual chassis {virtual_chassis}." msgstr "所选的桥接接口({interface})属于 {device},该设备不是虚拟机箱{virtual_chassis}的一部分。" -#: netbox/dcim/models/device_components.py:828 +#: netbox/dcim/models/device_components.py:869 msgid "Virtual interfaces cannot have a parent LAG interface." msgstr "虚拟接口不能具有父聚合接口。" -#: netbox/dcim/models/device_components.py:832 +#: netbox/dcim/models/device_components.py:873 msgid "A LAG interface cannot be its own parent." msgstr "聚合接口不能是自己的父级。" -#: netbox/dcim/models/device_components.py:839 +#: netbox/dcim/models/device_components.py:880 #, python-brace-format msgid "" "The selected LAG interface ({lag}) belongs to a different device ({device})." msgstr "选择的LAG接口 ({lag}) 属于不同的设备 ({device})." -#: netbox/dcim/models/device_components.py:845 +#: netbox/dcim/models/device_components.py:886 #, python-brace-format msgid "" "The selected LAG interface ({lag}) belongs to {device}, which is not part of" " virtual chassis {virtual_chassis}." msgstr "选择的LAG接口 ({lag}) 属于 {device}, 它不是虚拟机箱的一部分 {virtual_chassis}." -#: netbox/dcim/models/device_components.py:856 +#: netbox/dcim/models/device_components.py:897 msgid "Virtual interfaces cannot have a PoE mode." msgstr "虚拟接口不能具有PoE模式。" -#: netbox/dcim/models/device_components.py:860 +#: netbox/dcim/models/device_components.py:901 msgid "Virtual interfaces cannot have a PoE type." msgstr "虚拟接口不能是PoE类型。" -#: netbox/dcim/models/device_components.py:866 +#: netbox/dcim/models/device_components.py:907 msgid "Must specify PoE mode when designating a PoE type." msgstr "指定PoE类型时必须指定PoE模式。" -#: netbox/dcim/models/device_components.py:873 +#: netbox/dcim/models/device_components.py:914 msgid "Wireless role may be set only on wireless interfaces." msgstr "只能在无线接口上设置无线角色。" -#: netbox/dcim/models/device_components.py:875 +#: netbox/dcim/models/device_components.py:916 msgid "Channel may be set only on wireless interfaces." msgstr "只能在无线接口上设置信道。" -#: netbox/dcim/models/device_components.py:881 +#: netbox/dcim/models/device_components.py:922 msgid "Channel frequency may be set only on wireless interfaces." msgstr "信道频率仅在无线接口上设置。" -#: netbox/dcim/models/device_components.py:885 +#: netbox/dcim/models/device_components.py:926 msgid "Cannot specify custom frequency with channel selected." msgstr "无法在选定频道的情况下指定自定义频率。" -#: netbox/dcim/models/device_components.py:891 +#: netbox/dcim/models/device_components.py:932 msgid "Channel width may be set only on wireless interfaces." msgstr "只能在无线接口上设置频宽。" -#: netbox/dcim/models/device_components.py:893 +#: netbox/dcim/models/device_components.py:934 msgid "Cannot specify custom width with channel selected." msgstr "无法在选定通道的情况下指定自定义频宽。" -#: netbox/dcim/models/device_components.py:901 +#: netbox/dcim/models/device_components.py:938 +msgid "Interface mode does not support an untagged vlan." +msgstr "接口模式不支持未标记的 VLAN。" + +#: netbox/dcim/models/device_components.py:944 #, python-brace-format msgid "" "The untagged VLAN ({untagged_vlan}) must belong to the same site as the " "interface's parent device, or it must be global." msgstr "不打标记的VLAN({untagged_vlan})必须与接口所属设备/虚拟机属于同一站点,或者是全局VLAN" -#: netbox/dcim/models/device_components.py:990 +#: netbox/dcim/models/device_components.py:1041 msgid "Mapped position on corresponding rear port" msgstr "对应后置端口上的映射位置" -#: netbox/dcim/models/device_components.py:1006 +#: netbox/dcim/models/device_components.py:1057 msgid "front port" msgstr "前置端口" -#: netbox/dcim/models/device_components.py:1007 +#: netbox/dcim/models/device_components.py:1058 msgid "front ports" msgstr "前置端口" -#: netbox/dcim/models/device_components.py:1021 +#: netbox/dcim/models/device_components.py:1069 #, python-brace-format msgid "Rear port ({rear_port}) must belong to the same device" msgstr "后置端口({rear_port})必须属于同一设备" -#: netbox/dcim/models/device_components.py:1029 +#: netbox/dcim/models/device_components.py:1077 #, 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/device_components.py:1059 +#: netbox/dcim/models/device_components.py:1107 msgid "Number of front ports which may be mapped" msgstr "可以映射的前置端口数" -#: netbox/dcim/models/device_components.py:1064 +#: netbox/dcim/models/device_components.py:1112 msgid "rear port" msgstr "后置端口" -#: netbox/dcim/models/device_components.py:1065 +#: netbox/dcim/models/device_components.py:1113 msgid "rear ports" msgstr "后置端口" -#: netbox/dcim/models/device_components.py:1079 +#: netbox/dcim/models/device_components.py:1124 #, python-brace-format msgid "" "The number of positions cannot be less than the number of mapped front ports" " ({frontport_count})" msgstr "位置数不能小于映射的前置端口数({frontport_count})" -#: netbox/dcim/models/device_components.py:1120 +#: netbox/dcim/models/device_components.py:1165 msgid "module bay" msgstr "设备板卡插槽" -#: netbox/dcim/models/device_components.py:1121 +#: netbox/dcim/models/device_components.py:1166 msgid "module bays" msgstr "设备板卡插槽" -#: netbox/dcim/models/device_components.py:1138 -#: netbox/dcim/models/devices.py:1224 +#: netbox/dcim/models/device_components.py:1180 +#: netbox/dcim/models/devices.py:1229 msgid "A module bay cannot belong to a module installed within it." msgstr "模块托架不能属于安装在其中的模块。" -#: netbox/dcim/models/device_components.py:1164 +#: netbox/dcim/models/device_components.py:1206 msgid "device bay" msgstr "设备托架" -#: netbox/dcim/models/device_components.py:1165 +#: netbox/dcim/models/device_components.py:1207 msgid "device bays" msgstr "设备托架" -#: netbox/dcim/models/device_components.py:1175 +#: netbox/dcim/models/device_components.py:1214 #, python-brace-format msgid "This type of device ({device_type}) does not support device bays." msgstr "此类型的设备 ({device_type}) 不支持设备托架。" -#: netbox/dcim/models/device_components.py:1181 +#: netbox/dcim/models/device_components.py:1220 msgid "Cannot install a device into itself." msgstr "无法将设备安装到自身中。" -#: netbox/dcim/models/device_components.py:1189 +#: netbox/dcim/models/device_components.py:1228 #, python-brace-format msgid "" "Cannot install the specified device; device is already installed in {bay}." msgstr "无法安装指定的设备;设备已安装在{bay}中。" -#: netbox/dcim/models/device_components.py:1210 +#: netbox/dcim/models/device_components.py:1249 msgid "inventory item role" msgstr "库存物品分类" -#: netbox/dcim/models/device_components.py:1211 +#: netbox/dcim/models/device_components.py:1250 msgid "inventory item roles" msgstr "库存物品分类" -#: netbox/dcim/models/device_components.py:1268 -#: netbox/dcim/models/devices.py:607 netbox/dcim/models/devices.py:1181 -#: netbox/dcim/models/racks.py:313 -#: netbox/virtualization/models/virtualmachines.py:131 +#: netbox/dcim/models/device_components.py:1310 +#: netbox/dcim/models/devices.py:598 netbox/dcim/models/devices.py:1189 +#: netbox/dcim/models/racks.py:304 +#: netbox/virtualization/models/virtualmachines.py:126 msgid "serial number" msgstr "序列号" -#: netbox/dcim/models/device_components.py:1276 -#: netbox/dcim/models/devices.py:615 netbox/dcim/models/devices.py:1188 -#: netbox/dcim/models/racks.py:320 +#: netbox/dcim/models/device_components.py:1318 +#: netbox/dcim/models/devices.py:606 netbox/dcim/models/devices.py:1196 +#: netbox/dcim/models/racks.py:311 msgid "asset tag" msgstr "资产标签" -#: netbox/dcim/models/device_components.py:1277 +#: netbox/dcim/models/device_components.py:1319 msgid "A unique tag used to identify this item" msgstr "用于识别该项目的唯一标识" -#: netbox/dcim/models/device_components.py:1280 +#: netbox/dcim/models/device_components.py:1322 msgid "discovered" msgstr "已发现" -#: netbox/dcim/models/device_components.py:1282 +#: netbox/dcim/models/device_components.py:1324 msgid "This item was automatically discovered" msgstr "此项目是自动发现的" -#: netbox/dcim/models/device_components.py:1300 +#: netbox/dcim/models/device_components.py:1342 msgid "inventory item" msgstr "库存项" -#: netbox/dcim/models/device_components.py:1301 +#: netbox/dcim/models/device_components.py:1343 msgid "inventory items" msgstr "库存项" -#: netbox/dcim/models/device_components.py:1312 +#: netbox/dcim/models/device_components.py:1351 msgid "Cannot assign self as parent." msgstr "无法将自身分配为父级。" -#: netbox/dcim/models/device_components.py:1320 +#: netbox/dcim/models/device_components.py:1359 msgid "Parent inventory item does not belong to the same device." msgstr "父库存项不能属于同一设备。" -#: netbox/dcim/models/device_components.py:1326 +#: netbox/dcim/models/device_components.py:1365 msgid "Cannot move an inventory item with dependent children" msgstr "无法移动具有子项的库存项目" -#: netbox/dcim/models/device_components.py:1334 +#: netbox/dcim/models/device_components.py:1373 msgid "Cannot assign inventory item to component on another device" msgstr "无法将库存项分配给其他设备上的组件" -#: netbox/dcim/models/devices.py:54 +#: netbox/dcim/models/devices.py:59 msgid "manufacturer" msgstr "厂商" -#: netbox/dcim/models/devices.py:55 +#: netbox/dcim/models/devices.py:60 msgid "manufacturers" msgstr "厂商" -#: netbox/dcim/models/devices.py:82 netbox/dcim/models/devices.py:382 +#: netbox/dcim/models/devices.py:84 netbox/dcim/models/devices.py:383 #: netbox/dcim/models/racks.py:133 msgid "model" msgstr "型号" -#: netbox/dcim/models/devices.py:95 +#: netbox/dcim/models/devices.py:97 msgid "default platform" msgstr "默认系统平台" -#: netbox/dcim/models/devices.py:98 netbox/dcim/models/devices.py:386 +#: netbox/dcim/models/devices.py:100 netbox/dcim/models/devices.py:387 msgid "part number" msgstr "部件编码(PN)" -#: netbox/dcim/models/devices.py:101 netbox/dcim/models/devices.py:389 +#: netbox/dcim/models/devices.py:103 netbox/dcim/models/devices.py:390 msgid "Discrete part number (optional)" msgstr "独立部件编码(PN) (可选)" -#: netbox/dcim/models/devices.py:107 netbox/dcim/models/racks.py:54 +#: netbox/dcim/models/devices.py:109 netbox/dcim/models/racks.py:53 msgid "height (U)" msgstr "高度(U)" -#: netbox/dcim/models/devices.py:111 +#: netbox/dcim/models/devices.py:113 msgid "exclude from utilization" msgstr "从利用率中排除" -#: netbox/dcim/models/devices.py:112 +#: netbox/dcim/models/devices.py:114 msgid "Devices of this type are excluded when calculating rack utilization." msgstr "计算机柜利用率时,不包括此类设备。" -#: netbox/dcim/models/devices.py:116 +#: netbox/dcim/models/devices.py:118 msgid "is full depth" msgstr "是否全尺寸" -#: netbox/dcim/models/devices.py:117 +#: netbox/dcim/models/devices.py:119 msgid "Device consumes both front and rear rack faces." msgstr "设备同时使用机柜的前面板和后面板。" -#: netbox/dcim/models/devices.py:123 +#: netbox/dcim/models/devices.py:126 msgid "parent/child status" msgstr "父设备/子设备状态" -#: netbox/dcim/models/devices.py:124 +#: netbox/dcim/models/devices.py:127 msgid "" "Parent devices house child devices in device bays. Leave blank if this " "device type is neither a parent nor a child." msgstr "父设备将子设备放置在设备托架中。如果此设备类型既不是父设备也不是子设备,请保留为空。" -#: netbox/dcim/models/devices.py:128 netbox/dcim/models/devices.py:392 -#: netbox/dcim/models/devices.py:659 netbox/dcim/models/racks.py:324 +#: netbox/dcim/models/devices.py:131 netbox/dcim/models/devices.py:393 +#: netbox/dcim/models/devices.py:651 netbox/dcim/models/racks.py:315 msgid "airflow" msgstr "气流方向" -#: netbox/dcim/models/devices.py:204 +#: netbox/dcim/models/devices.py:208 msgid "device type" msgstr "设备型号" -#: netbox/dcim/models/devices.py:205 +#: netbox/dcim/models/devices.py:209 msgid "device types" msgstr "设备型号" -#: netbox/dcim/models/devices.py:290 +#: netbox/dcim/models/devices.py:291 msgid "U height must be in increments of 0.5 rack units." msgstr "U位数必须以0.5U为增量。" -#: netbox/dcim/models/devices.py:307 +#: netbox/dcim/models/devices.py:308 #, python-brace-format msgid "" "Device {device} in rack {rack} does not have sufficient space to accommodate" " a height of {height}U" msgstr "机柜 {rack}没有足够的空间容纳{height}U的设备 {device}" -#: netbox/dcim/models/devices.py:322 +#: netbox/dcim/models/devices.py:323 #, python-brace-format msgid "" "Unable to set 0U height: Found {racked_instance_count} " "instances already mounted within racks." msgstr "无法设置高度为0U: 发现 {racked_instance_count}个设备已经安装在机柜中。" -#: netbox/dcim/models/devices.py:331 +#: netbox/dcim/models/devices.py:332 msgid "" "Must delete all device bay templates associated with this device before " "declassifying it as a parent device." msgstr "必须删除与此设备关联的所有设备托架模板,然后才能将其修改为父设备。" -#: netbox/dcim/models/devices.py:337 +#: netbox/dcim/models/devices.py:338 msgid "Child device types must be 0U." msgstr "子设备类型高度必须为0U。" -#: netbox/dcim/models/devices.py:411 +#: netbox/dcim/models/devices.py:413 msgid "module type" msgstr "模块类型" -#: netbox/dcim/models/devices.py:412 +#: netbox/dcim/models/devices.py:414 msgid "module types" msgstr "模块类型" -#: netbox/dcim/models/devices.py:485 +#: netbox/dcim/models/devices.py:484 msgid "Virtual machines may be assigned to this role" msgstr "虚拟机可以使用该型号/角色" -#: netbox/dcim/models/devices.py:497 +#: netbox/dcim/models/devices.py:496 msgid "device role" msgstr "设备角色" -#: netbox/dcim/models/devices.py:498 +#: netbox/dcim/models/devices.py:497 msgid "device roles" msgstr "设备角色" -#: netbox/dcim/models/devices.py:515 +#: netbox/dcim/models/devices.py:511 msgid "Optionally limit this platform to devices of a certain manufacturer" msgstr "可选择将此平台限定为特定制造商的设备" -#: netbox/dcim/models/devices.py:527 +#: netbox/dcim/models/devices.py:523 msgid "platform" msgstr "操作系统" -#: netbox/dcim/models/devices.py:528 +#: netbox/dcim/models/devices.py:524 msgid "platforms" msgstr "操作系统" -#: netbox/dcim/models/devices.py:576 +#: netbox/dcim/models/devices.py:572 msgid "The function this device serves" msgstr "该设备的功能" -#: netbox/dcim/models/devices.py:608 +#: netbox/dcim/models/devices.py:599 msgid "Chassis serial number, assigned by the manufacturer" msgstr "制造商分配的机箱序列号" -#: netbox/dcim/models/devices.py:616 netbox/dcim/models/devices.py:1189 +#: netbox/dcim/models/devices.py:607 netbox/dcim/models/devices.py:1197 msgid "A unique tag used to identify this device" msgstr "用于识别该设备的唯一标签" -#: netbox/dcim/models/devices.py:643 +#: netbox/dcim/models/devices.py:634 msgid "position (U)" msgstr "机柜位置(U)" -#: netbox/dcim/models/devices.py:650 +#: netbox/dcim/models/devices.py:642 msgid "rack face" msgstr "机柜安装方向" -#: netbox/dcim/models/devices.py:670 netbox/dcim/models/devices.py:1420 -#: netbox/virtualization/models/virtualmachines.py:100 +#: netbox/dcim/models/devices.py:663 netbox/dcim/models/devices.py:1425 +#: netbox/virtualization/models/virtualmachines.py:95 msgid "primary IPv4" msgstr "首选 IPv4" -#: netbox/dcim/models/devices.py:678 netbox/dcim/models/devices.py:1428 -#: netbox/virtualization/models/virtualmachines.py:108 +#: netbox/dcim/models/devices.py:671 netbox/dcim/models/devices.py:1433 +#: netbox/virtualization/models/virtualmachines.py:103 msgid "primary IPv6" msgstr "首选 IPv6" -#: netbox/dcim/models/devices.py:686 +#: netbox/dcim/models/devices.py:679 msgid "out-of-band IP" msgstr "带外管理IP地址" -#: netbox/dcim/models/devices.py:703 +#: netbox/dcim/models/devices.py:696 msgid "VC position" msgstr "堆叠位置" -#: netbox/dcim/models/devices.py:706 +#: netbox/dcim/models/devices.py:699 msgid "Virtual chassis position" msgstr "堆叠位置" -#: netbox/dcim/models/devices.py:709 +#: netbox/dcim/models/devices.py:702 msgid "VC priority" msgstr "VC优先级" -#: netbox/dcim/models/devices.py:713 +#: netbox/dcim/models/devices.py:706 msgid "Virtual chassis master election priority" msgstr "堆叠主设备优先级" -#: netbox/dcim/models/devices.py:716 netbox/dcim/models/sites.py:207 +#: netbox/dcim/models/devices.py:709 netbox/dcim/models/sites.py:208 msgid "latitude" msgstr "纬度" -#: netbox/dcim/models/devices.py:721 netbox/dcim/models/devices.py:729 -#: netbox/dcim/models/sites.py:212 netbox/dcim/models/sites.py:220 +#: netbox/dcim/models/devices.py:714 netbox/dcim/models/devices.py:722 +#: netbox/dcim/models/sites.py:213 netbox/dcim/models/sites.py:221 msgid "GPS coordinate in decimal format (xx.yyyyyy)" msgstr "GPS坐标(十进制格式, xx.yyyyyy)" -#: netbox/dcim/models/devices.py:724 netbox/dcim/models/sites.py:215 +#: netbox/dcim/models/devices.py:717 netbox/dcim/models/sites.py:216 msgid "longitude" msgstr "经度" -#: netbox/dcim/models/devices.py:797 +#: netbox/dcim/models/devices.py:790 msgid "Device name must be unique per site." msgstr "每个站点的设备名称必须唯一。" -#: netbox/dcim/models/devices.py:808 netbox/ipam/models/services.py:75 +#: netbox/dcim/models/devices.py:801 netbox/ipam/models/services.py:71 msgid "device" msgstr "设备" -#: netbox/dcim/models/devices.py:809 +#: netbox/dcim/models/devices.py:802 msgid "devices" msgstr "设备" -#: netbox/dcim/models/devices.py:835 +#: netbox/dcim/models/devices.py:821 #, python-brace-format msgid "Rack {rack} does not belong to site {site}." msgstr "机柜 {rack} 不属于 {site}站点." -#: netbox/dcim/models/devices.py:840 +#: netbox/dcim/models/devices.py:826 #, python-brace-format msgid "Location {location} does not belong to site {site}." msgstr "地点 {location} 不属于 {site}站点." -#: netbox/dcim/models/devices.py:846 +#: netbox/dcim/models/devices.py:832 #, python-brace-format msgid "Rack {rack} does not belong to location {location}." msgstr "机柜{rack}不属于{location}地点." -#: netbox/dcim/models/devices.py:853 +#: netbox/dcim/models/devices.py:839 msgid "Cannot select a rack face without assigning a rack." msgstr "在未分配机柜的情况下,无法选择安装在机柜的哪一面。" -#: netbox/dcim/models/devices.py:857 +#: netbox/dcim/models/devices.py:843 msgid "Cannot select a rack position without assigning a rack." msgstr "在未分配机柜的情况下,无法选择安装在机柜的哪个位置。" -#: netbox/dcim/models/devices.py:863 +#: netbox/dcim/models/devices.py:849 msgid "Position must be in increments of 0.5 rack units." msgstr "机柜位置必须以0.5个U位递增。" -#: netbox/dcim/models/devices.py:867 +#: netbox/dcim/models/devices.py:853 msgid "Must specify rack face when defining rack position." msgstr "指定机柜安装位置时必须指定安装在机柜的哪一面。" -#: netbox/dcim/models/devices.py:875 +#: netbox/dcim/models/devices.py:861 #, python-brace-format msgid "" "A 0U device type ({device_type}) cannot be assigned to a rack position." msgstr "无法将0U的设备类型({device_type})的设备安装在机柜中。" -#: netbox/dcim/models/devices.py:886 +#: netbox/dcim/models/devices.py:872 msgid "" "Child device types cannot be assigned to a rack face. This is an attribute " "of the parent device." msgstr "子设备类型不能安装到机柜的前/后面。这是父设备的一个属性。" -#: netbox/dcim/models/devices.py:893 +#: netbox/dcim/models/devices.py:879 msgid "" "Child device types cannot be assigned to a rack position. This is an " "attribute of the parent device." msgstr "子设备类型不能安装到机柜某个位置。这是父设备的一个属性。" -#: netbox/dcim/models/devices.py:907 +#: netbox/dcim/models/devices.py:893 #, python-brace-format msgid "" "U{position} is already occupied or does not have sufficient space to " "accommodate this device type: {device_type} ({u_height}U)" msgstr "{position}U已被占用或没有足够的空间容纳此设备类型:{device_type} ({u_height}U)" -#: netbox/dcim/models/devices.py:922 +#: netbox/dcim/models/devices.py:908 #, python-brace-format msgid "{ip} is not an IPv4 address." msgstr "{ip} 不是有效的IPv4地址" -#: netbox/dcim/models/devices.py:931 netbox/dcim/models/devices.py:946 +#: netbox/dcim/models/devices.py:920 netbox/dcim/models/devices.py:938 #, python-brace-format msgid "The specified IP address ({ip}) is not assigned to this device." msgstr "指定的IP地址 ({ip}) 未分配给该设备。" -#: netbox/dcim/models/devices.py:937 +#: netbox/dcim/models/devices.py:926 #, python-brace-format msgid "{ip} is not an IPv6 address." msgstr "{ip} 不是有效的IPv6地址" -#: netbox/dcim/models/devices.py:964 +#: netbox/dcim/models/devices.py:956 #, python-brace-format msgid "" "The assigned platform is limited to {platform_manufacturer} device types, " @@ -6102,12 +6621,17 @@ msgid "" msgstr "" "指定的平台仅限于{platform_manufacturer} 的设备类型,但此设备的类型属于{devicetype_manufacturer}。" -#: netbox/dcim/models/devices.py:975 +#: netbox/dcim/models/devices.py:967 #, python-brace-format msgid "The assigned cluster belongs to a different site ({site})" msgstr "分配的群集属于其他站点({site})" -#: netbox/dcim/models/devices.py:983 +#: netbox/dcim/models/devices.py:974 +#, python-brace-format +msgid "The assigned cluster belongs to a different location ({location})" +msgstr "分配的集群属于不同的位置 ({location})" + +#: netbox/dcim/models/devices.py:982 msgid "A device assigned to a virtual chassis must have its position defined." msgstr "分配给集群的设备必须定义其位置。" @@ -6118,86 +6642,93 @@ msgid "" "is currently designated as its master." msgstr "无法从虚拟机箱中移除设备 {virtual_chassis} 因为它目前被指定为主节点。" -#: netbox/dcim/models/devices.py:1196 +#: netbox/dcim/models/devices.py:1204 msgid "module" msgstr "模块" -#: netbox/dcim/models/devices.py:1197 +#: netbox/dcim/models/devices.py:1205 msgid "modules" msgstr "模块" -#: netbox/dcim/models/devices.py:1213 +#: netbox/dcim/models/devices.py:1218 #, python-brace-format msgid "" "Module must be installed within a module bay belonging to the assigned " "device ({device})." msgstr "模块必须安装在属于指定设备({device})的模块托架内。" -#: netbox/dcim/models/devices.py:1339 +#: netbox/dcim/models/devices.py:1346 msgid "domain" msgstr "域" -#: netbox/dcim/models/devices.py:1352 netbox/dcim/models/devices.py:1353 +#: netbox/dcim/models/devices.py:1359 netbox/dcim/models/devices.py:1360 msgid "virtual chassis" msgstr "堆叠" -#: netbox/dcim/models/devices.py:1368 +#: netbox/dcim/models/devices.py:1372 #, python-brace-format msgid "" "The selected master ({master}) is not assigned to this virtual chassis." msgstr "所选主设备({master})未分配给此堆叠。" -#: netbox/dcim/models/devices.py:1384 +#: netbox/dcim/models/devices.py:1388 #, python-brace-format msgid "" "Unable to delete virtual chassis {self}. There are member interfaces which " "form a cross-chassis LAG interfaces." msgstr "无法删除堆叠 {self}。有成员接口属于跨机箱聚合。" -#: netbox/dcim/models/devices.py:1409 netbox/vpn/models/l2vpn.py:37 +#: netbox/dcim/models/devices.py:1414 netbox/vpn/models/l2vpn.py:37 msgid "identifier" msgstr "标识符" -#: netbox/dcim/models/devices.py:1410 +#: netbox/dcim/models/devices.py:1415 msgid "Numeric identifier unique to the parent device" msgstr "父设备唯一的标识符" -#: netbox/dcim/models/devices.py:1438 netbox/extras/models/customfields.py:225 +#: netbox/dcim/models/devices.py:1443 netbox/extras/models/customfields.py:225 #: netbox/extras/models/models.py:107 netbox/extras/models/models.py:694 -#: netbox/netbox/models/__init__.py:115 +#: netbox/netbox/models/__init__.py:120 msgid "comments" msgstr "评论" -#: netbox/dcim/models/devices.py:1454 +#: netbox/dcim/models/devices.py:1459 msgid "virtual device context" msgstr "设备虚拟实例" -#: netbox/dcim/models/devices.py:1455 +#: netbox/dcim/models/devices.py:1460 msgid "virtual device contexts" msgstr "设备虚拟实例" -#: netbox/dcim/models/devices.py:1487 +#: netbox/dcim/models/devices.py:1489 #, python-brace-format msgid "{ip} is not an IPv{family} address." msgstr "{ip} 不是有效的 IPv{family} 地址" -#: netbox/dcim/models/devices.py:1493 +#: netbox/dcim/models/devices.py:1495 msgid "Primary IP address must belong to an interface on the assigned device." msgstr "首选 IP 地址必须属于指定设备上的接口。" -#: netbox/dcim/models/mixins.py:15 netbox/extras/models/configs.py:41 -#: netbox/extras/models/models.py:313 netbox/extras/models/models.py:522 -#: netbox/extras/models/search.py:48 netbox/ipam/models/ip.py:194 -msgid "weight" -msgstr "重量" +#: netbox/dcim/models/devices.py:1527 +msgid "MAC addresses" +msgstr "MAC 地址" -#: netbox/dcim/models/mixins.py:22 -msgid "weight unit" -msgstr "重量单位" +#: netbox/dcim/models/devices.py:1559 +msgid "" +"Cannot unassign MAC Address while it is designated as the primary MAC for an" +" object" +msgstr "当 MAC 地址被指定为对象的主 MAC 时,无法取消分配" -#: netbox/dcim/models/mixins.py:51 -msgid "Must specify a unit when setting a weight" -msgstr "设置重量时必须指定单位" +#: netbox/dcim/models/devices.py:1563 +msgid "" +"Cannot reassign MAC Address while it is designated as the primary MAC for an" +" object" +msgstr "当它被指定为对象的主 MAC 时,无法重新分配 MAC 地址" + +#: netbox/dcim/models/mixins.py:94 +#, python-brace-format +msgid "Please select a {scope_type}." +msgstr "请选择一个 {scope_type}。" #: netbox/dcim/models/power.py:55 msgid "power panel" @@ -6207,104 +6738,104 @@ msgstr "电源面板" msgid "power panels" msgstr "电源面板" -#: netbox/dcim/models/power.py:70 +#: netbox/dcim/models/power.py:67 #, python-brace-format msgid "" "Location {location} ({location_site}) is in a different site than {site}" msgstr "位置 {location} ({location_site}) 位于不同的站点 {site}" -#: netbox/dcim/models/power.py:108 +#: netbox/dcim/models/power.py:106 msgid "supply" msgstr "供应" -#: netbox/dcim/models/power.py:114 +#: netbox/dcim/models/power.py:112 msgid "phase" msgstr "相位" -#: netbox/dcim/models/power.py:120 +#: netbox/dcim/models/power.py:118 msgid "voltage" msgstr "电压" -#: netbox/dcim/models/power.py:125 +#: netbox/dcim/models/power.py:123 msgid "amperage" msgstr "电流" -#: netbox/dcim/models/power.py:130 +#: netbox/dcim/models/power.py:128 msgid "max utilization" msgstr "最大利用率" -#: netbox/dcim/models/power.py:133 +#: netbox/dcim/models/power.py:131 msgid "Maximum permissible draw (percentage)" msgstr "最大允许利用率(百分比)" -#: netbox/dcim/models/power.py:136 +#: netbox/dcim/models/power.py:134 msgid "available power" msgstr "可用功率" -#: netbox/dcim/models/power.py:164 +#: netbox/dcim/models/power.py:162 msgid "power feed" msgstr "电力来源" -#: netbox/dcim/models/power.py:165 +#: netbox/dcim/models/power.py:163 msgid "power feeds" msgstr "电力来源" -#: netbox/dcim/models/power.py:179 +#: netbox/dcim/models/power.py:174 #, python-brace-format msgid "" "Rack {rack} ({rack_site}) and power panel {powerpanel} ({powerpanel_site}) " "are in different sites." msgstr "机柜{rack} ({rack_site})和电源面板{powerpanel} ({powerpanel_site})位于不同的站点。" -#: netbox/dcim/models/power.py:190 +#: netbox/dcim/models/power.py:185 msgid "Voltage cannot be negative for AC supply" msgstr "交流电源的电压不能为负" -#: netbox/dcim/models/racks.py:47 +#: netbox/dcim/models/racks.py:46 msgid "width" msgstr "宽度" -#: netbox/dcim/models/racks.py:48 +#: netbox/dcim/models/racks.py:47 msgid "Rail-to-rail width" msgstr "机柜间宽度" -#: netbox/dcim/models/racks.py:56 +#: netbox/dcim/models/racks.py:55 msgid "Height in rack units" msgstr "以U为单位的机柜高度" -#: netbox/dcim/models/racks.py:60 +#: netbox/dcim/models/racks.py:59 msgid "starting unit" msgstr "起始U位" -#: netbox/dcim/models/racks.py:62 +#: netbox/dcim/models/racks.py:61 msgid "Starting unit for rack" msgstr "此机柜的起始U位" -#: netbox/dcim/models/racks.py:66 +#: netbox/dcim/models/racks.py:65 msgid "descending units" msgstr "U位显示降序" -#: netbox/dcim/models/racks.py:67 +#: netbox/dcim/models/racks.py:66 msgid "Units are numbered top-to-bottom" msgstr "U位从上到下编号" -#: netbox/dcim/models/racks.py:72 +#: netbox/dcim/models/racks.py:71 msgid "outer width" msgstr "外部宽度" -#: netbox/dcim/models/racks.py:75 +#: netbox/dcim/models/racks.py:74 msgid "Outer dimension of rack (width)" msgstr "机柜外部尺寸(宽)" -#: netbox/dcim/models/racks.py:78 +#: netbox/dcim/models/racks.py:77 msgid "outer depth" msgstr "外部长度/深度" -#: netbox/dcim/models/racks.py:81 +#: netbox/dcim/models/racks.py:80 msgid "Outer dimension of rack (depth)" msgstr "机架外形尺寸(深度)" -#: netbox/dcim/models/racks.py:84 +#: netbox/dcim/models/racks.py:83 msgid "outer unit" msgstr "外框尺寸的单位" @@ -6326,7 +6857,7 @@ msgstr "最大承重" msgid "Maximum load capacity for the rack" msgstr "机柜最大承重" -#: netbox/dcim/models/racks.py:125 netbox/dcim/models/racks.py:252 +#: netbox/dcim/models/racks.py:125 netbox/dcim/models/racks.py:247 msgid "form factor" msgstr "外形规格" @@ -6338,180 +6869,180 @@ msgstr "机架类型" msgid "rack types" msgstr "机架类型" -#: netbox/dcim/models/racks.py:180 netbox/dcim/models/racks.py:379 +#: netbox/dcim/models/racks.py:177 netbox/dcim/models/racks.py:368 msgid "Must specify a unit when setting an outer width/depth" msgstr "设置外部宽度/深度时必须指定单位" -#: netbox/dcim/models/racks.py:184 netbox/dcim/models/racks.py:383 +#: netbox/dcim/models/racks.py:181 netbox/dcim/models/racks.py:372 msgid "Must specify a unit when setting a maximum weight" msgstr "设置最大承重时必须指定单位" -#: netbox/dcim/models/racks.py:230 +#: netbox/dcim/models/racks.py:227 msgid "rack role" msgstr "机柜角色" -#: netbox/dcim/models/racks.py:231 +#: netbox/dcim/models/racks.py:228 msgid "rack roles" msgstr "机柜角色" -#: netbox/dcim/models/racks.py:274 +#: netbox/dcim/models/racks.py:265 msgid "facility ID" msgstr "标识符ID" -#: netbox/dcim/models/racks.py:275 +#: netbox/dcim/models/racks.py:266 msgid "Locally-assigned identifier" msgstr "本地分配的标识符" -#: netbox/dcim/models/racks.py:308 netbox/ipam/forms/bulk_import.py:201 -#: netbox/ipam/forms/bulk_import.py:266 netbox/ipam/forms/bulk_import.py:301 -#: netbox/ipam/forms/bulk_import.py:483 -#: netbox/virtualization/forms/bulk_import.py:112 +#: netbox/dcim/models/racks.py:299 netbox/ipam/forms/bulk_import.py:197 +#: netbox/ipam/forms/bulk_import.py:265 netbox/ipam/forms/bulk_import.py:300 +#: netbox/ipam/forms/bulk_import.py:482 +#: netbox/virtualization/forms/bulk_import.py:118 msgid "Functional role" msgstr "功能角色" -#: netbox/dcim/models/racks.py:321 +#: netbox/dcim/models/racks.py:312 msgid "A unique tag used to identify this rack" msgstr "用于识别该机柜的唯一标识" -#: netbox/dcim/models/racks.py:359 +#: netbox/dcim/models/racks.py:351 msgid "rack" msgstr "机柜" -#: netbox/dcim/models/racks.py:360 +#: netbox/dcim/models/racks.py:352 msgid "racks" msgstr "机柜" -#: netbox/dcim/models/racks.py:375 +#: netbox/dcim/models/racks.py:364 #, python-brace-format msgid "Assigned location must belong to parent site ({site})." msgstr "指定的位置必须属于父站点({site})。" -#: netbox/dcim/models/racks.py:393 +#: netbox/dcim/models/racks.py:387 #, python-brace-format msgid "" "Rack must be at least {min_height}U tall to house currently installed " "devices." msgstr "机柜必须有至少{min_height}U高,才可以容纳当前安装的设备。" -#: netbox/dcim/models/racks.py:400 +#: netbox/dcim/models/racks.py:396 #, python-brace-format msgid "" "Rack unit numbering must begin at {position} or less to house currently " "installed devices." msgstr "机柜单元编号必须从{position}或以上开始,才能容纳当前安装的设备。" -#: netbox/dcim/models/racks.py:408 +#: netbox/dcim/models/racks.py:404 #, python-brace-format msgid "Location must be from the same site, {site}." msgstr "位置必须来自同一站点 {site}。" -#: netbox/dcim/models/racks.py:670 +#: netbox/dcim/models/racks.py:666 msgid "units" msgstr "位置" -#: netbox/dcim/models/racks.py:696 +#: netbox/dcim/models/racks.py:692 msgid "rack reservation" msgstr "机柜预留" -#: netbox/dcim/models/racks.py:697 +#: netbox/dcim/models/racks.py:693 msgid "rack reservations" msgstr "机柜预留" -#: netbox/dcim/models/racks.py:714 +#: netbox/dcim/models/racks.py:707 #, python-brace-format msgid "Invalid unit(s) for {height}U rack: {unit_list}" msgstr "{height}U机柜中无效的U位: {unit_list}" -#: netbox/dcim/models/racks.py:727 +#: netbox/dcim/models/racks.py:720 #, python-brace-format msgid "The following units have already been reserved: {unit_list}" msgstr "以下U位已被保留:{unit_list}" -#: netbox/dcim/models/sites.py:49 +#: netbox/dcim/models/sites.py:53 msgid "A top-level region with this name already exists." msgstr "具有此名称的顶级区域已存在。" -#: netbox/dcim/models/sites.py:59 +#: netbox/dcim/models/sites.py:63 msgid "A top-level region with this slug already exists." msgstr "具有此缩写的顶级区域已经存在。" -#: netbox/dcim/models/sites.py:62 +#: netbox/dcim/models/sites.py:66 msgid "region" msgstr "地区" -#: netbox/dcim/models/sites.py:63 +#: netbox/dcim/models/sites.py:67 msgid "regions" msgstr "地区" -#: netbox/dcim/models/sites.py:102 +#: netbox/dcim/models/sites.py:109 msgid "A top-level site group with this name already exists." msgstr "具有此名称的顶级站点组已存在。" -#: netbox/dcim/models/sites.py:112 +#: netbox/dcim/models/sites.py:119 msgid "A top-level site group with this slug already exists." msgstr "具有此缩写的顶级站点组已存在。" -#: netbox/dcim/models/sites.py:115 +#: netbox/dcim/models/sites.py:122 msgid "site group" msgstr "站点组" -#: netbox/dcim/models/sites.py:116 +#: netbox/dcim/models/sites.py:123 msgid "site groups" msgstr "站点组" -#: netbox/dcim/models/sites.py:141 +#: netbox/dcim/models/sites.py:145 msgid "Full name of the site" msgstr "站点全名" -#: netbox/dcim/models/sites.py:181 netbox/dcim/models/sites.py:279 +#: netbox/dcim/models/sites.py:181 netbox/dcim/models/sites.py:283 msgid "facility" msgstr "设施" -#: netbox/dcim/models/sites.py:184 netbox/dcim/models/sites.py:282 +#: netbox/dcim/models/sites.py:184 netbox/dcim/models/sites.py:286 msgid "Local facility ID or description" msgstr "本地设施 ID 或描述" -#: netbox/dcim/models/sites.py:195 +#: netbox/dcim/models/sites.py:196 msgid "physical address" msgstr "物理地址" -#: netbox/dcim/models/sites.py:198 +#: netbox/dcim/models/sites.py:199 msgid "Physical location of the building" msgstr "机房的实体位置" -#: netbox/dcim/models/sites.py:201 +#: netbox/dcim/models/sites.py:202 msgid "shipping address" msgstr "快递地址" -#: netbox/dcim/models/sites.py:204 +#: netbox/dcim/models/sites.py:205 msgid "If different from the physical address" msgstr "若与实体地址不同" -#: netbox/dcim/models/sites.py:238 +#: netbox/dcim/models/sites.py:245 msgid "site" msgstr "站点" -#: netbox/dcim/models/sites.py:239 +#: netbox/dcim/models/sites.py:246 msgid "sites" msgstr "站点" -#: netbox/dcim/models/sites.py:309 +#: netbox/dcim/models/sites.py:319 msgid "A location with this name already exists within the specified site." msgstr "指定的站点中已存在此名称的位置。" -#: netbox/dcim/models/sites.py:319 +#: netbox/dcim/models/sites.py:329 msgid "A location with this slug already exists within the specified site." msgstr "指定的站点中已存在此缩写的位置。" -#: netbox/dcim/models/sites.py:322 +#: netbox/dcim/models/sites.py:332 msgid "location" msgstr "位置" -#: netbox/dcim/models/sites.py:323 +#: netbox/dcim/models/sites.py:333 msgid "locations" msgstr "位置" -#: netbox/dcim/models/sites.py:337 +#: netbox/dcim/models/sites.py:344 #, python-brace-format msgid "Parent location ({parent}) must belong to the same site ({site})." msgstr "父位置({parent})必须属于同一站点({site})。" @@ -6524,11 +7055,11 @@ msgstr "本端A" msgid "Termination B" msgstr "对端B" -#: netbox/dcim/tables/cables.py:66 netbox/wireless/tables/wirelesslink.py:23 +#: netbox/dcim/tables/cables.py:66 netbox/wireless/tables/wirelesslink.py:22 msgid "Device A" msgstr "设备A" -#: netbox/dcim/tables/cables.py:72 netbox/wireless/tables/wirelesslink.py:32 +#: netbox/dcim/tables/cables.py:72 netbox/wireless/tables/wirelesslink.py:31 msgid "Device B" msgstr "设备B" @@ -6562,97 +7093,91 @@ msgstr "站点B" msgid "Reachable" msgstr "可达性" -#: netbox/dcim/tables/devices.py:58 netbox/dcim/tables/devices.py:106 -#: netbox/dcim/tables/racks.py:150 netbox/dcim/tables/sites.py:105 -#: netbox/dcim/tables/sites.py:148 netbox/extras/tables/tables.py:545 +#: netbox/dcim/tables/devices.py:69 netbox/dcim/tables/devices.py:117 +#: netbox/dcim/tables/racks.py:149 netbox/dcim/tables/sites.py:104 +#: netbox/dcim/tables/sites.py:147 netbox/extras/tables/tables.py:545 #: netbox/netbox/navigation/menu.py:69 netbox/netbox/navigation/menu.py:73 #: netbox/netbox/navigation/menu.py:75 #: netbox/virtualization/forms/model_forms.py:122 -#: netbox/virtualization/tables/clusters.py:83 -#: netbox/virtualization/views.py:204 +#: netbox/virtualization/tables/clusters.py:87 +#: netbox/virtualization/views.py:216 msgid "Devices" msgstr "设备" -#: netbox/dcim/tables/devices.py:63 netbox/dcim/tables/devices.py:111 -#: netbox/virtualization/tables/clusters.py:88 +#: netbox/dcim/tables/devices.py:74 netbox/dcim/tables/devices.py:122 +#: netbox/virtualization/tables/clusters.py:92 msgid "VMs" msgstr "VMs" -#: netbox/dcim/tables/devices.py:100 netbox/dcim/tables/devices.py:216 -#: netbox/extras/forms/model_forms.py:630 +#: netbox/dcim/tables/devices.py:111 netbox/dcim/tables/devices.py:227 +#: netbox/extras/forms/model_forms.py:644 #: netbox/templates/dcim/device.html:112 -#: netbox/templates/dcim/device/render_config.html:11 -#: netbox/templates/dcim/device/render_config.html:14 #: netbox/templates/dcim/devicerole.html:44 #: netbox/templates/dcim/platform.html:41 #: netbox/templates/extras/configtemplate.html:10 +#: netbox/templates/extras/object_render_config.html:12 +#: netbox/templates/extras/object_render_config.html:15 #: netbox/templates/virtualization/virtualmachine.html:48 -#: netbox/templates/virtualization/virtualmachine/render_config.html:11 -#: netbox/templates/virtualization/virtualmachine/render_config.html:14 -#: netbox/virtualization/tables/virtualmachines.py:107 +#: netbox/virtualization/tables/virtualmachines.py:77 msgid "Config Template" msgstr "配置模版" -#: netbox/dcim/tables/devices.py:150 netbox/templates/dcim/sitegroup.html:26 -msgid "Site Group" -msgstr "站点组" - -#: netbox/dcim/tables/devices.py:187 netbox/dcim/tables/devices.py:1068 -#: netbox/ipam/forms/bulk_import.py:527 netbox/ipam/forms/model_forms.py:306 -#: netbox/ipam/forms/model_forms.py:319 netbox/ipam/tables/ip.py:356 -#: netbox/ipam/tables/ip.py:423 netbox/ipam/tables/ip.py:446 +#: netbox/dcim/tables/devices.py:198 netbox/dcim/tables/devices.py:1100 +#: netbox/ipam/forms/bulk_import.py:562 netbox/ipam/forms/model_forms.py:316 +#: netbox/ipam/forms/model_forms.py:329 netbox/ipam/tables/ip.py:308 +#: netbox/ipam/tables/ip.py:375 netbox/ipam/tables/ip.py:398 #: netbox/templates/ipam/ipaddress.html:11 -#: netbox/virtualization/tables/virtualmachines.py:95 +#: netbox/virtualization/tables/virtualmachines.py:65 msgid "IP Address" msgstr "IP地址" -#: netbox/dcim/tables/devices.py:191 netbox/dcim/tables/devices.py:1072 -#: netbox/virtualization/tables/virtualmachines.py:86 +#: netbox/dcim/tables/devices.py:202 netbox/dcim/tables/devices.py:1104 +#: netbox/virtualization/tables/virtualmachines.py:56 msgid "IPv4 Address" msgstr "IPv4 地址" -#: netbox/dcim/tables/devices.py:195 netbox/dcim/tables/devices.py:1076 -#: netbox/virtualization/tables/virtualmachines.py:90 +#: netbox/dcim/tables/devices.py:206 netbox/dcim/tables/devices.py:1108 +#: netbox/virtualization/tables/virtualmachines.py:60 msgid "IPv6 Address" msgstr "IPv6 地址" -#: netbox/dcim/tables/devices.py:210 +#: netbox/dcim/tables/devices.py:221 msgid "VC Position" msgstr "堆叠位置" -#: netbox/dcim/tables/devices.py:213 +#: netbox/dcim/tables/devices.py:224 msgid "VC Priority" msgstr "堆叠优先级" -#: netbox/dcim/tables/devices.py:220 netbox/templates/dcim/device_edit.html:38 +#: netbox/dcim/tables/devices.py:231 netbox/templates/dcim/device_edit.html:38 #: netbox/templates/dcim/devicebay_populate.html:16 msgid "Parent Device" msgstr "父设备" -#: netbox/dcim/tables/devices.py:225 +#: netbox/dcim/tables/devices.py:236 msgid "Position (Device Bay)" msgstr "位置(设备托架)" -#: netbox/dcim/tables/devices.py:234 +#: netbox/dcim/tables/devices.py:245 msgid "Console ports" msgstr "Console 端口" -#: netbox/dcim/tables/devices.py:237 +#: netbox/dcim/tables/devices.py:248 msgid "Console server ports" msgstr "Console 服务器端口" -#: netbox/dcim/tables/devices.py:240 +#: netbox/dcim/tables/devices.py:251 msgid "Power ports" msgstr "电源接口" -#: netbox/dcim/tables/devices.py:243 +#: netbox/dcim/tables/devices.py:254 msgid "Power outlets" msgstr "电源插座" -#: netbox/dcim/tables/devices.py:246 netbox/dcim/tables/devices.py:1081 -#: netbox/dcim/tables/devicetypes.py:128 netbox/dcim/views.py:1040 -#: netbox/dcim/views.py:1279 netbox/dcim/views.py:1975 -#: netbox/netbox/navigation/menu.py:94 netbox/netbox/navigation/menu.py:250 +#: netbox/dcim/tables/devices.py:257 netbox/dcim/tables/devices.py:1113 +#: netbox/dcim/tables/devicetypes.py:133 netbox/dcim/views.py:1144 +#: netbox/dcim/views.py:1388 netbox/dcim/views.py:2139 +#: netbox/netbox/navigation/menu.py:94 netbox/netbox/navigation/menu.py:258 #: netbox/templates/dcim/device/base.html:37 #: netbox/templates/dcim/device_list.html:43 #: netbox/templates/dcim/devicetype/base.html:34 @@ -6662,35 +7187,35 @@ msgstr "电源插座" #: netbox/templates/dcim/virtualdevicecontext.html:81 #: netbox/templates/virtualization/virtualmachine/base.html:27 #: netbox/templates/virtualization/virtualmachine_list.html:14 -#: netbox/virtualization/tables/virtualmachines.py:101 -#: netbox/virtualization/views.py:364 netbox/wireless/tables/wirelesslan.py:55 +#: netbox/virtualization/tables/virtualmachines.py:71 +#: netbox/virtualization/views.py:381 netbox/wireless/tables/wirelesslan.py:63 msgid "Interfaces" msgstr "接口" -#: netbox/dcim/tables/devices.py:249 +#: netbox/dcim/tables/devices.py:260 msgid "Front ports" msgstr "前置端口" -#: netbox/dcim/tables/devices.py:255 +#: netbox/dcim/tables/devices.py:266 msgid "Device bays" msgstr "设备托架" -#: netbox/dcim/tables/devices.py:258 +#: netbox/dcim/tables/devices.py:269 msgid "Module bays" msgstr "设备板卡插槽" -#: netbox/dcim/tables/devices.py:261 +#: netbox/dcim/tables/devices.py:272 msgid "Inventory items" msgstr "库存项" -#: netbox/dcim/tables/devices.py:305 netbox/dcim/tables/modules.py:57 +#: netbox/dcim/tables/devices.py:315 netbox/dcim/tables/modules.py:57 #: netbox/templates/dcim/modulebay.html:17 msgid "Module Bay" msgstr "设备板卡插槽" -#: netbox/dcim/tables/devices.py:318 netbox/dcim/tables/devicetypes.py:47 -#: netbox/dcim/tables/devicetypes.py:143 netbox/dcim/views.py:1115 -#: netbox/dcim/views.py:2073 netbox/netbox/navigation/menu.py:103 +#: netbox/dcim/tables/devices.py:328 netbox/dcim/tables/devicetypes.py:52 +#: netbox/dcim/tables/devicetypes.py:148 netbox/dcim/views.py:1219 +#: netbox/dcim/views.py:2237 netbox/netbox/navigation/menu.py:103 #: netbox/templates/dcim/device/base.html:52 #: netbox/templates/dcim/device_list.html:71 #: netbox/templates/dcim/devicetype/base.html:49 @@ -6699,124 +7224,133 @@ msgstr "设备板卡插槽" msgid "Inventory Items" msgstr "库存项目" -#: netbox/dcim/tables/devices.py:333 +#: netbox/dcim/tables/devices.py:343 msgid "Cable Color" msgstr "线缆颜色" -#: netbox/dcim/tables/devices.py:339 +#: netbox/dcim/tables/devices.py:349 msgid "Link Peers" msgstr "链接对等体" -#: netbox/dcim/tables/devices.py:342 +#: netbox/dcim/tables/devices.py:352 msgid "Mark Connected" msgstr "标记已连接" -#: netbox/dcim/tables/devices.py:461 +#: netbox/dcim/tables/devices.py:471 msgid "Maximum draw (W)" msgstr "最大功率(W)" -#: netbox/dcim/tables/devices.py:464 +#: netbox/dcim/tables/devices.py:474 msgid "Allocated draw (W)" msgstr "分配功率(W)" -#: netbox/dcim/tables/devices.py:558 netbox/ipam/forms/model_forms.py:734 -#: netbox/ipam/tables/fhrp.py:28 netbox/ipam/views.py:596 -#: netbox/ipam/views.py:696 netbox/netbox/navigation/menu.py:158 -#: netbox/netbox/navigation/menu.py:160 -#: netbox/templates/dcim/interface.html:339 +#: netbox/dcim/tables/devices.py:572 netbox/ipam/forms/model_forms.py:784 +#: netbox/ipam/tables/fhrp.py:28 netbox/ipam/views.py:633 +#: netbox/ipam/views.py:738 netbox/netbox/navigation/menu.py:164 +#: netbox/netbox/navigation/menu.py:166 +#: netbox/templates/dcim/interface.html:396 #: netbox/templates/ipam/ipaddress_bulk_add.html:15 #: netbox/templates/ipam/service.html:40 -#: netbox/templates/virtualization/vminterface.html:85 +#: netbox/templates/virtualization/vminterface.html:101 #: netbox/vpn/tables/tunnels.py:98 msgid "IP Addresses" msgstr "IP地址" -#: netbox/dcim/tables/devices.py:564 netbox/netbox/navigation/menu.py:202 +#: netbox/dcim/tables/devices.py:578 netbox/netbox/navigation/menu.py:210 #: netbox/templates/ipam/inc/panels/fhrp_groups.html:6 msgid "FHRP Groups" msgstr "网关冗余协议组" -#: netbox/dcim/tables/devices.py:576 netbox/templates/dcim/interface.html:89 -#: netbox/templates/virtualization/vminterface.html:67 +#: netbox/dcim/tables/devices.py:590 netbox/templates/dcim/interface.html:95 +#: netbox/templates/virtualization/vminterface.html:59 #: netbox/templates/vpn/tunnel.html:18 #: netbox/templates/vpn/tunneltermination.html:13 #: netbox/vpn/forms/bulk_edit.py:76 netbox/vpn/forms/bulk_import.py:76 #: netbox/vpn/forms/filtersets.py:42 netbox/vpn/forms/filtersets.py:82 -#: netbox/vpn/forms/model_forms.py:60 netbox/vpn/forms/model_forms.py:145 +#: netbox/vpn/forms/model_forms.py:61 netbox/vpn/forms/model_forms.py:146 #: netbox/vpn/tables/tunnels.py:78 msgid "Tunnel" msgstr "隧道" -#: netbox/dcim/tables/devices.py:604 netbox/dcim/tables/devicetypes.py:227 +#: netbox/dcim/tables/devices.py:626 netbox/dcim/tables/devicetypes.py:234 #: netbox/templates/dcim/interface.html:65 msgid "Management Only" msgstr "仅限管理" -#: netbox/dcim/tables/devices.py:623 +#: netbox/dcim/tables/devices.py:645 msgid "VDCs" msgstr "VDCs" -#: netbox/dcim/tables/devices.py:873 netbox/templates/dcim/modulebay.html:53 +#: netbox/dcim/tables/devices.py:652 netbox/templates/dcim/interface.html:163 +msgid "Virtual Circuit" +msgstr "虚拟电路" + +#: netbox/dcim/tables/devices.py:904 netbox/templates/dcim/modulebay.html:53 msgid "Installed Module" msgstr "已安装的模块" -#: netbox/dcim/tables/devices.py:876 +#: netbox/dcim/tables/devices.py:907 msgid "Module Serial" msgstr "模块状态" -#: netbox/dcim/tables/devices.py:880 +#: netbox/dcim/tables/devices.py:911 msgid "Module Asset Tag" msgstr "模块资产标签" -#: netbox/dcim/tables/devices.py:889 +#: netbox/dcim/tables/devices.py:920 msgid "Module Status" msgstr "模块状态" -#: netbox/dcim/tables/devices.py:944 netbox/dcim/tables/devicetypes.py:312 -#: netbox/templates/dcim/inventoryitem.html:40 +#: netbox/dcim/tables/devices.py:974 netbox/dcim/tables/devicetypes.py:319 +#: netbox/templates/dcim/inventoryitem.html:44 msgid "Component" msgstr "组件" -#: netbox/dcim/tables/devices.py:1000 +#: netbox/dcim/tables/devices.py:1032 msgid "Items" msgstr "项目" -#: netbox/dcim/tables/devicetypes.py:37 netbox/netbox/navigation/menu.py:84 +#: netbox/dcim/tables/devicetypes.py:37 netbox/netbox/navigation/menu.py:60 +#: netbox/netbox/navigation/menu.py:62 +msgid "Rack Types" +msgstr "机架类型" + +#: netbox/dcim/tables/devicetypes.py:42 netbox/netbox/navigation/menu.py:84 #: netbox/netbox/navigation/menu.py:86 msgid "Device Types" msgstr "设备型号" -#: netbox/dcim/tables/devicetypes.py:42 netbox/netbox/navigation/menu.py:87 +#: netbox/dcim/tables/devicetypes.py:47 netbox/netbox/navigation/menu.py:87 msgid "Module Types" msgstr "设备配件类型" -#: netbox/dcim/tables/devicetypes.py:52 netbox/extras/forms/filtersets.py:371 -#: netbox/extras/forms/model_forms.py:537 netbox/extras/tables/tables.py:540 +#: netbox/dcim/tables/devicetypes.py:57 netbox/extras/forms/filtersets.py:378 +#: netbox/extras/forms/model_forms.py:551 netbox/extras/tables/tables.py:540 #: netbox/netbox/navigation/menu.py:78 msgid "Platforms" msgstr "操作系统" -#: netbox/dcim/tables/devicetypes.py:84 +#: netbox/dcim/tables/devicetypes.py:89 #: netbox/templates/dcim/devicetype.html:29 msgid "Default Platform" msgstr "默认系统平台" -#: netbox/dcim/tables/devicetypes.py:88 +#: netbox/dcim/tables/devicetypes.py:93 #: netbox/templates/dcim/devicetype.html:45 msgid "Full Depth" msgstr "全尺寸" -#: netbox/dcim/tables/devicetypes.py:98 +#: netbox/dcim/tables/devicetypes.py:103 msgid "U Height" msgstr "U高度" -#: netbox/dcim/tables/devicetypes.py:113 netbox/dcim/tables/modules.py:26 +#: netbox/dcim/tables/devicetypes.py:118 netbox/dcim/tables/modules.py:26 #: netbox/dcim/tables/racks.py:89 msgid "Instances" msgstr "实例" -#: netbox/dcim/tables/devicetypes.py:116 netbox/dcim/views.py:980 -#: netbox/dcim/views.py:1219 netbox/dcim/views.py:1911 +#: netbox/dcim/tables/devicetypes.py:121 netbox/dcim/views.py:1084 +#: netbox/dcim/views.py:1328 netbox/dcim/views.py:2075 #: netbox/netbox/navigation/menu.py:97 #: netbox/templates/dcim/device/base.html:25 #: netbox/templates/dcim/device_list.html:15 @@ -6826,8 +7360,8 @@ msgstr "实例" msgid "Console Ports" msgstr "Console口" -#: netbox/dcim/tables/devicetypes.py:119 netbox/dcim/views.py:995 -#: netbox/dcim/views.py:1234 netbox/dcim/views.py:1927 +#: netbox/dcim/tables/devicetypes.py:124 netbox/dcim/views.py:1099 +#: netbox/dcim/views.py:1343 netbox/dcim/views.py:2091 #: netbox/netbox/navigation/menu.py:98 #: netbox/templates/dcim/device/base.html:28 #: netbox/templates/dcim/device_list.html:22 @@ -6837,8 +7371,8 @@ msgstr "Console口" msgid "Console Server Ports" msgstr "Console 服务端口" -#: netbox/dcim/tables/devicetypes.py:122 netbox/dcim/views.py:1010 -#: netbox/dcim/views.py:1249 netbox/dcim/views.py:1943 +#: netbox/dcim/tables/devicetypes.py:127 netbox/dcim/views.py:1114 +#: netbox/dcim/views.py:1358 netbox/dcim/views.py:2107 #: netbox/netbox/navigation/menu.py:99 #: netbox/templates/dcim/device/base.html:31 #: netbox/templates/dcim/device_list.html:29 @@ -6848,8 +7382,8 @@ msgstr "Console 服务端口" msgid "Power Ports" msgstr "电源接口" -#: netbox/dcim/tables/devicetypes.py:125 netbox/dcim/views.py:1025 -#: netbox/dcim/views.py:1264 netbox/dcim/views.py:1959 +#: netbox/dcim/tables/devicetypes.py:130 netbox/dcim/views.py:1129 +#: netbox/dcim/views.py:1373 netbox/dcim/views.py:2123 #: netbox/netbox/navigation/menu.py:100 #: netbox/templates/dcim/device/base.html:34 #: netbox/templates/dcim/device_list.html:36 @@ -6859,8 +7393,8 @@ msgstr "电源接口" msgid "Power Outlets" msgstr "PDU" -#: netbox/dcim/tables/devicetypes.py:131 netbox/dcim/views.py:1055 -#: netbox/dcim/views.py:1294 netbox/dcim/views.py:1997 +#: netbox/dcim/tables/devicetypes.py:136 netbox/dcim/views.py:1159 +#: netbox/dcim/views.py:1403 netbox/dcim/views.py:2161 #: netbox/netbox/navigation/menu.py:95 #: netbox/templates/dcim/device/base.html:40 #: netbox/templates/dcim/devicetype/base.html:37 @@ -6869,8 +7403,8 @@ msgstr "PDU" msgid "Front Ports" msgstr "前置端口" -#: netbox/dcim/tables/devicetypes.py:134 netbox/dcim/views.py:1070 -#: netbox/dcim/views.py:1309 netbox/dcim/views.py:2013 +#: netbox/dcim/tables/devicetypes.py:139 netbox/dcim/views.py:1174 +#: netbox/dcim/views.py:1418 netbox/dcim/views.py:2177 #: netbox/netbox/navigation/menu.py:96 #: netbox/templates/dcim/device/base.html:43 #: netbox/templates/dcim/device_list.html:50 @@ -6880,16 +7414,16 @@ msgstr "前置端口" msgid "Rear Ports" msgstr "后置端口" -#: netbox/dcim/tables/devicetypes.py:137 netbox/dcim/views.py:1100 -#: netbox/dcim/views.py:2053 netbox/netbox/navigation/menu.py:102 +#: netbox/dcim/tables/devicetypes.py:142 netbox/dcim/views.py:1204 +#: netbox/dcim/views.py:2217 netbox/netbox/navigation/menu.py:102 #: netbox/templates/dcim/device/base.html:49 #: netbox/templates/dcim/device_list.html:57 #: netbox/templates/dcim/devicetype/base.html:46 msgid "Device Bays" msgstr "机柜托架" -#: netbox/dcim/tables/devicetypes.py:140 netbox/dcim/views.py:1085 -#: netbox/dcim/views.py:1324 netbox/dcim/views.py:2033 +#: netbox/dcim/tables/devicetypes.py:145 netbox/dcim/views.py:1189 +#: netbox/dcim/views.py:1433 netbox/dcim/views.py:2197 #: netbox/netbox/navigation/menu.py:101 #: netbox/templates/dcim/device/base.html:46 #: netbox/templates/dcim/device_list.html:64 @@ -6899,7 +7433,7 @@ msgstr "机柜托架" msgid "Module Bays" msgstr "设备板卡插槽" -#: netbox/dcim/tables/power.py:36 netbox/netbox/navigation/menu.py:297 +#: netbox/dcim/tables/power.py:36 netbox/netbox/navigation/menu.py:318 #: netbox/templates/dcim/powerpanel.html:51 msgid "Power Feeds" msgstr "电力来源" @@ -6912,109 +7446,104 @@ msgstr "最大利用率" msgid "Available Power (VA)" msgstr "可用功率 (VA)" -#: netbox/dcim/tables/racks.py:30 netbox/dcim/tables/sites.py:143 +#: netbox/dcim/tables/racks.py:30 netbox/dcim/tables/sites.py:142 #: netbox/netbox/navigation/menu.py:43 netbox/netbox/navigation/menu.py:47 #: netbox/netbox/navigation/menu.py:49 msgid "Racks" msgstr "机柜" -#: netbox/dcim/tables/racks.py:63 netbox/dcim/tables/racks.py:142 +#: netbox/dcim/tables/racks.py:63 netbox/dcim/tables/racks.py:141 #: netbox/templates/dcim/device.html:318 #: netbox/templates/dcim/inc/panels/racktype_dimensions.html:14 msgid "Height" msgstr "高度" -#: netbox/dcim/tables/racks.py:67 netbox/dcim/tables/racks.py:165 +#: netbox/dcim/tables/racks.py:67 netbox/dcim/tables/racks.py:164 #: netbox/templates/dcim/inc/panels/racktype_dimensions.html:18 msgid "Outer Width" msgstr "外部宽度" -#: netbox/dcim/tables/racks.py:71 netbox/dcim/tables/racks.py:169 +#: netbox/dcim/tables/racks.py:71 netbox/dcim/tables/racks.py:168 #: netbox/templates/dcim/inc/panels/racktype_dimensions.html:28 msgid "Outer Depth" msgstr "外部长度/深度" -#: netbox/dcim/tables/racks.py:79 netbox/dcim/tables/racks.py:177 +#: netbox/dcim/tables/racks.py:79 netbox/dcim/tables/racks.py:176 msgid "Max Weight" msgstr "最大承重" -#: netbox/dcim/tables/racks.py:154 +#: netbox/dcim/tables/racks.py:153 msgid "Space" msgstr "空间" #: netbox/dcim/tables/sites.py:30 netbox/dcim/tables/sites.py:57 -#: netbox/extras/forms/filtersets.py:351 -#: netbox/extras/forms/model_forms.py:517 netbox/ipam/forms/bulk_edit.py:131 -#: netbox/ipam/forms/model_forms.py:153 netbox/ipam/tables/asn.py:66 +#: netbox/extras/forms/filtersets.py:358 +#: netbox/extras/forms/model_forms.py:531 netbox/ipam/forms/bulk_edit.py:134 +#: netbox/ipam/forms/model_forms.py:159 netbox/ipam/tables/asn.py:66 #: netbox/netbox/navigation/menu.py:15 netbox/netbox/navigation/menu.py:17 msgid "Sites" msgstr "站点" -#: netbox/dcim/tests/test_api.py:47 +#: netbox/dcim/tests/test_api.py:50 msgid "Test case must set peer_termination_type" msgstr "测试用例必须设置对端端点类型" -#: netbox/dcim/views.py:138 +#: netbox/dcim/views.py:137 #, python-brace-format msgid "Disconnected {count} {type}" msgstr "已断开连接{count} {type}" -#: netbox/dcim/views.py:738 netbox/netbox/navigation/menu.py:51 +#: netbox/dcim/views.py:825 netbox/netbox/navigation/menu.py:51 msgid "Reservations" msgstr "机柜预留" -#: netbox/dcim/views.py:757 netbox/templates/dcim/location.html:90 +#: netbox/dcim/views.py:844 netbox/templates/dcim/location.html:90 #: netbox/templates/dcim/site.html:140 msgid "Non-Racked Devices" msgstr "未上架设备" -#: netbox/dcim/views.py:2086 netbox/extras/forms/model_forms.py:577 +#: netbox/dcim/views.py:2250 netbox/extras/forms/model_forms.py:591 #: netbox/templates/extras/configcontext.html:10 -#: netbox/virtualization/forms/model_forms.py:225 -#: netbox/virtualization/views.py:405 +#: netbox/virtualization/forms/model_forms.py:232 +#: netbox/virtualization/views.py:422 msgid "Config Context" msgstr "配置实例" -#: netbox/dcim/views.py:2096 netbox/virtualization/views.py:415 +#: netbox/dcim/views.py:2260 netbox/virtualization/views.py:432 msgid "Render Config" msgstr "提交配置" -#: netbox/dcim/views.py:2131 netbox/virtualization/views.py:450 -#, python-brace-format -msgid "An error occurred while rendering the template: {error}" -msgstr "渲染模板时出错: {error}" - -#: netbox/dcim/views.py:2149 netbox/extras/tables/tables.py:550 -#: netbox/netbox/navigation/menu.py:247 netbox/netbox/navigation/menu.py:249 -#: netbox/virtualization/views.py:178 +#: netbox/dcim/views.py:2273 netbox/extras/tables/tables.py:550 +#: netbox/netbox/navigation/menu.py:255 netbox/netbox/navigation/menu.py:257 +#: netbox/virtualization/views.py:190 msgid "Virtual Machines" msgstr "虚拟机" -#: netbox/dcim/views.py:2907 +#: netbox/dcim/views.py:3106 #, python-brace-format msgid "Installed device {device} in bay {device_bay}." msgstr "已安装的设备 {device} 在海湾里 {device_bay}。" -#: netbox/dcim/views.py:2948 +#: netbox/dcim/views.py:3147 #, python-brace-format msgid "Removed device {device} from bay {device_bay}." msgstr "已移除的设备 {device} 来自海湾 {device_bay}。" -#: netbox/dcim/views.py:3054 netbox/ipam/tables/ip.py:234 +#: netbox/dcim/views.py:3263 netbox/ipam/tables/ip.py:180 msgid "Children" msgstr "子网" -#: netbox/dcim/views.py:3520 +#: netbox/dcim/views.py:3730 #, python-brace-format msgid "Added member {device}" msgstr "已添加成员 {device}" -#: netbox/dcim/views.py:3567 +#: netbox/dcim/views.py:3779 #, python-brace-format msgid "Unable to remove master device {device} from the virtual chassis." msgstr "无法移除主设备 {device} 来自虚拟机箱。" -#: netbox/dcim/views.py:3580 +#: netbox/dcim/views.py:3792 #, python-brace-format msgid "Removed {device} from virtual chassis {chassis}" msgstr "已移除 {device} 来自虚拟机箱 {chassis}" @@ -7113,7 +7642,7 @@ msgstr "否" #: netbox/extras/choices.py:108 netbox/templates/tenancy/contact.html:57 #: netbox/tenancy/forms/bulk_edit.py:118 -#: netbox/wireless/forms/model_forms.py:168 +#: netbox/wireless/forms/model_forms.py:171 msgid "Link" msgstr "链接" @@ -7133,15 +7662,15 @@ msgstr "按字母顺序 (A-Z)" msgid "Alphabetical (Z-A)" msgstr "按字母顺序 (Z-A)" -#: netbox/extras/choices.py:144 netbox/extras/choices.py:167 +#: netbox/extras/choices.py:144 netbox/extras/choices.py:165 msgid "Info" msgstr "信息" -#: netbox/extras/choices.py:145 netbox/extras/choices.py:168 +#: netbox/extras/choices.py:145 netbox/extras/choices.py:166 msgid "Success" msgstr "成功" -#: netbox/extras/choices.py:146 netbox/extras/choices.py:169 +#: netbox/extras/choices.py:146 netbox/extras/choices.py:167 msgid "Warning" msgstr "警告" @@ -7149,52 +7678,29 @@ msgstr "警告" msgid "Danger" msgstr "危急" -#: netbox/extras/choices.py:165 +#: netbox/extras/choices.py:164 msgid "Debug" msgstr "调试" -#: netbox/extras/choices.py:166 netbox/netbox/choices.py:101 -msgid "Default" -msgstr "默认" - -#: netbox/extras/choices.py:170 +#: netbox/extras/choices.py:168 msgid "Failure" msgstr "失败" -#: netbox/extras/choices.py:186 -msgid "Hourly" -msgstr "每小时" - -#: netbox/extras/choices.py:187 -msgid "12 hours" -msgstr "12小时制" - -#: netbox/extras/choices.py:188 -msgid "Daily" -msgstr "每天" - -#: netbox/extras/choices.py:189 -msgid "Weekly" -msgstr "周" - -#: netbox/extras/choices.py:190 -msgid "30 days" -msgstr "30天" - -#: netbox/extras/choices.py:226 +#: netbox/extras/choices.py:213 #: netbox/templates/dcim/virtualchassis_edit.html:107 #: netbox/templates/generic/bulk_add_component.html:68 #: netbox/templates/generic/object_edit.html:47 #: netbox/templates/generic/object_edit.html:80 +#: netbox/templates/htmx/quick_add.html:24 #: netbox/templates/ipam/inc/ipaddress_edit_header.html:7 msgid "Create" msgstr "创建" -#: netbox/extras/choices.py:227 +#: netbox/extras/choices.py:214 msgid "Update" msgstr "更新" -#: netbox/extras/choices.py:228 +#: netbox/extras/choices.py:215 #: netbox/templates/circuits/inc/circuit_termination.html:23 #: netbox/templates/dcim/inc/panels/inventory_items.html:37 #: netbox/templates/dcim/powerpanel.html:66 @@ -7209,82 +7715,82 @@ msgstr "更新" msgid "Delete" msgstr "删除" -#: netbox/extras/choices.py:252 netbox/netbox/choices.py:57 -#: netbox/netbox/choices.py:102 +#: netbox/extras/choices.py:239 netbox/netbox/choices.py:59 +#: netbox/netbox/choices.py:104 msgid "Blue" msgstr "蓝色" -#: netbox/extras/choices.py:253 netbox/netbox/choices.py:56 -#: netbox/netbox/choices.py:103 +#: netbox/extras/choices.py:240 netbox/netbox/choices.py:58 +#: netbox/netbox/choices.py:105 msgid "Indigo" msgstr "靛青色" -#: netbox/extras/choices.py:254 netbox/netbox/choices.py:54 -#: netbox/netbox/choices.py:104 +#: netbox/extras/choices.py:241 netbox/netbox/choices.py:56 +#: netbox/netbox/choices.py:106 msgid "Purple" msgstr "紫色" -#: netbox/extras/choices.py:255 netbox/netbox/choices.py:51 -#: netbox/netbox/choices.py:105 +#: netbox/extras/choices.py:242 netbox/netbox/choices.py:53 +#: netbox/netbox/choices.py:107 msgid "Pink" msgstr "粉红色" -#: netbox/extras/choices.py:256 netbox/netbox/choices.py:50 -#: netbox/netbox/choices.py:106 +#: netbox/extras/choices.py:243 netbox/netbox/choices.py:52 +#: netbox/netbox/choices.py:108 msgid "Red" msgstr "红色" -#: netbox/extras/choices.py:257 netbox/netbox/choices.py:68 -#: netbox/netbox/choices.py:107 +#: netbox/extras/choices.py:244 netbox/netbox/choices.py:70 +#: netbox/netbox/choices.py:109 msgid "Orange" msgstr "橙色" -#: netbox/extras/choices.py:258 netbox/netbox/choices.py:66 -#: netbox/netbox/choices.py:108 +#: netbox/extras/choices.py:245 netbox/netbox/choices.py:68 +#: netbox/netbox/choices.py:110 msgid "Yellow" msgstr "黄色" -#: netbox/extras/choices.py:259 netbox/netbox/choices.py:63 -#: netbox/netbox/choices.py:109 +#: netbox/extras/choices.py:246 netbox/netbox/choices.py:65 +#: netbox/netbox/choices.py:111 msgid "Green" msgstr "绿色" -#: netbox/extras/choices.py:260 netbox/netbox/choices.py:60 -#: netbox/netbox/choices.py:110 +#: netbox/extras/choices.py:247 netbox/netbox/choices.py:62 +#: netbox/netbox/choices.py:112 msgid "Teal" msgstr "蓝色" -#: netbox/extras/choices.py:261 netbox/netbox/choices.py:59 -#: netbox/netbox/choices.py:111 +#: netbox/extras/choices.py:248 netbox/netbox/choices.py:61 +#: netbox/netbox/choices.py:113 msgid "Cyan" msgstr "蓝绿色" -#: netbox/extras/choices.py:262 netbox/netbox/choices.py:112 +#: netbox/extras/choices.py:249 netbox/netbox/choices.py:114 msgid "Gray" msgstr "灰色" -#: netbox/extras/choices.py:263 netbox/netbox/choices.py:74 -#: netbox/netbox/choices.py:113 +#: netbox/extras/choices.py:250 netbox/netbox/choices.py:76 +#: netbox/netbox/choices.py:115 msgid "Black" msgstr "黑色" -#: netbox/extras/choices.py:264 netbox/netbox/choices.py:75 -#: netbox/netbox/choices.py:114 +#: netbox/extras/choices.py:251 netbox/netbox/choices.py:77 +#: netbox/netbox/choices.py:116 msgid "White" msgstr "白色" -#: netbox/extras/choices.py:279 netbox/extras/forms/model_forms.py:353 -#: netbox/extras/forms/model_forms.py:430 +#: netbox/extras/choices.py:266 netbox/extras/forms/model_forms.py:367 +#: netbox/extras/forms/model_forms.py:444 #: netbox/templates/extras/webhook.html:10 msgid "Webhook" msgstr "Webhook" -#: netbox/extras/choices.py:280 netbox/extras/forms/model_forms.py:418 +#: netbox/extras/choices.py:267 netbox/extras/forms/model_forms.py:432 #: netbox/templates/extras/script/base.html:29 msgid "Script" msgstr "脚本" -#: netbox/extras/choices.py:281 +#: netbox/extras/choices.py:268 msgid "Notification" msgstr "通知" @@ -7376,30 +7882,34 @@ msgstr "无效的格式。URL参数必须作为字典传递。" msgid "RSS Feed" msgstr "RSS订阅" -#: netbox/extras/dashboard/widgets.py:279 +#: netbox/extras/dashboard/widgets.py:280 msgid "Embed an RSS feed from an external website." msgstr "嵌入来自外部网站的 RSS 源。" -#: netbox/extras/dashboard/widgets.py:286 +#: netbox/extras/dashboard/widgets.py:287 msgid "Feed URL" msgstr "订阅链接" -#: netbox/extras/dashboard/widgets.py:291 +#: netbox/extras/dashboard/widgets.py:290 +msgid "Requires external connection" +msgstr "需要外部连接" + +#: netbox/extras/dashboard/widgets.py:296 msgid "The maximum number of objects to display" msgstr "要多显示的对象数" -#: netbox/extras/dashboard/widgets.py:296 +#: netbox/extras/dashboard/widgets.py:301 msgid "How long to stored the cached content (in seconds)" msgstr "存储缓存内容的时间(秒)" -#: netbox/extras/dashboard/widgets.py:348 +#: netbox/extras/dashboard/widgets.py:358 #: netbox/templates/account/base.html:10 #: netbox/templates/account/bookmarks.html:7 -#: netbox/templates/inc/user_menu.html:48 +#: netbox/templates/inc/user_menu.html:43 msgid "Bookmarks" msgstr "书签" -#: netbox/extras/dashboard/widgets.py:352 +#: netbox/extras/dashboard/widgets.py:362 msgid "Show your personal bookmarks" msgstr "显示您的个人书签" @@ -7428,17 +7938,17 @@ msgid "Group (name)" msgstr "组 (名字)" #: netbox/extras/filtersets.py:574 -#: netbox/virtualization/forms/filtersets.py:118 +#: netbox/virtualization/forms/filtersets.py:123 msgid "Cluster type" msgstr "堆叠类型" -#: netbox/extras/filtersets.py:580 netbox/virtualization/filtersets.py:95 -#: netbox/virtualization/filtersets.py:147 +#: netbox/extras/filtersets.py:580 netbox/virtualization/filtersets.py:61 +#: netbox/virtualization/filtersets.py:113 msgid "Cluster type (slug)" msgstr "堆叠类型(缩写)" #: netbox/extras/filtersets.py:601 netbox/tenancy/forms/forms.py:16 -#: netbox/tenancy/forms/forms.py:39 +#: netbox/tenancy/forms/forms.py:40 msgid "Tenant group" msgstr "租户组" @@ -7447,7 +7957,7 @@ msgstr "租户组" msgid "Tenant group (slug)" msgstr "租户组(缩写)" -#: netbox/extras/filtersets.py:623 netbox/extras/forms/model_forms.py:495 +#: netbox/extras/filtersets.py:623 netbox/extras/forms/model_forms.py:509 #: netbox/templates/extras/tag.html:11 msgid "Tag" msgstr "标签" @@ -7456,60 +7966,60 @@ msgstr "标签" msgid "Tag (slug)" msgstr "标签(缩写)" -#: netbox/extras/filtersets.py:689 netbox/extras/forms/filtersets.py:429 +#: netbox/extras/filtersets.py:689 netbox/extras/forms/filtersets.py:437 msgid "Has local config context data" msgstr "具有本地配置实例" -#: netbox/extras/forms/bulk_edit.py:35 netbox/extras/forms/filtersets.py:60 +#: netbox/extras/forms/bulk_edit.py:35 netbox/extras/forms/filtersets.py:61 msgid "Group name" msgstr "组名称" -#: netbox/extras/forms/bulk_edit.py:43 netbox/extras/forms/filtersets.py:68 +#: netbox/extras/forms/bulk_edit.py:43 netbox/extras/forms/filtersets.py:69 #: netbox/extras/tables/tables.py:65 #: netbox/templates/extras/customfield.html:38 #: netbox/templates/generic/bulk_import.html:118 msgid "Required" msgstr "必须" -#: netbox/extras/forms/bulk_edit.py:48 netbox/extras/forms/filtersets.py:75 +#: netbox/extras/forms/bulk_edit.py:48 netbox/extras/forms/filtersets.py:76 msgid "Must be unique" msgstr "必须是唯一的" #: netbox/extras/forms/bulk_edit.py:61 netbox/extras/forms/bulk_import.py:60 -#: netbox/extras/forms/filtersets.py:89 +#: netbox/extras/forms/filtersets.py:90 #: netbox/extras/models/customfields.py:209 msgid "UI visible" msgstr "页面可见" #: netbox/extras/forms/bulk_edit.py:66 netbox/extras/forms/bulk_import.py:66 -#: netbox/extras/forms/filtersets.py:94 +#: netbox/extras/forms/filtersets.py:95 #: netbox/extras/models/customfields.py:216 msgid "UI editable" msgstr "页面可编辑" -#: netbox/extras/forms/bulk_edit.py:71 netbox/extras/forms/filtersets.py:97 +#: netbox/extras/forms/bulk_edit.py:71 netbox/extras/forms/filtersets.py:98 msgid "Is cloneable" msgstr "可复制" -#: netbox/extras/forms/bulk_edit.py:76 netbox/extras/forms/filtersets.py:104 +#: netbox/extras/forms/bulk_edit.py:76 netbox/extras/forms/filtersets.py:105 msgid "Minimum value" msgstr "最小值" -#: netbox/extras/forms/bulk_edit.py:80 netbox/extras/forms/filtersets.py:108 +#: netbox/extras/forms/bulk_edit.py:80 netbox/extras/forms/filtersets.py:109 msgid "Maximum value" msgstr "最大值" -#: netbox/extras/forms/bulk_edit.py:84 netbox/extras/forms/filtersets.py:112 +#: netbox/extras/forms/bulk_edit.py:84 netbox/extras/forms/filtersets.py:113 msgid "Validation regex" msgstr "验证正则表达式" -#: netbox/extras/forms/bulk_edit.py:91 netbox/extras/forms/filtersets.py:46 +#: netbox/extras/forms/bulk_edit.py:91 netbox/extras/forms/filtersets.py:47 #: netbox/extras/forms/model_forms.py:76 #: netbox/templates/extras/customfield.html:70 msgid "Behavior" msgstr "行为" -#: netbox/extras/forms/bulk_edit.py:128 netbox/extras/forms/filtersets.py:149 +#: netbox/extras/forms/bulk_edit.py:128 netbox/extras/forms/filtersets.py:152 msgid "New window" msgstr "新窗口" @@ -7517,31 +8027,31 @@ msgstr "新窗口" msgid "Button class" msgstr "按钮类型" -#: netbox/extras/forms/bulk_edit.py:154 netbox/extras/forms/filtersets.py:187 +#: netbox/extras/forms/bulk_edit.py:154 netbox/extras/forms/filtersets.py:191 #: netbox/extras/models/models.py:409 msgid "MIME type" msgstr "MIME类型" -#: netbox/extras/forms/bulk_edit.py:159 netbox/extras/forms/filtersets.py:190 +#: netbox/extras/forms/bulk_edit.py:159 netbox/extras/forms/filtersets.py:194 msgid "File extension" msgstr "文件扩展名" -#: netbox/extras/forms/bulk_edit.py:164 netbox/extras/forms/filtersets.py:194 +#: netbox/extras/forms/bulk_edit.py:164 netbox/extras/forms/filtersets.py:198 msgid "As attachment" msgstr "作为附件" -#: netbox/extras/forms/bulk_edit.py:192 netbox/extras/forms/filtersets.py:236 +#: netbox/extras/forms/bulk_edit.py:192 netbox/extras/forms/filtersets.py:242 #: netbox/extras/tables/tables.py:256 #: netbox/templates/extras/savedfilter.html:29 msgid "Shared" msgstr "共享性" -#: netbox/extras/forms/bulk_edit.py:215 netbox/extras/forms/filtersets.py:265 +#: netbox/extras/forms/bulk_edit.py:215 netbox/extras/forms/filtersets.py:271 #: netbox/extras/models/models.py:174 msgid "HTTP method" msgstr "HTTP方法" -#: netbox/extras/forms/bulk_edit.py:219 netbox/extras/forms/filtersets.py:259 +#: netbox/extras/forms/bulk_edit.py:219 netbox/extras/forms/filtersets.py:265 #: netbox/templates/extras/webhook.html:30 msgid "Payload URL" msgstr "有效URL" @@ -7560,7 +8070,7 @@ msgid "CA file path" msgstr "CA证书文件路径" #: netbox/extras/forms/bulk_edit.py:253 netbox/extras/forms/bulk_import.py:192 -#: netbox/extras/forms/model_forms.py:377 +#: netbox/extras/forms/model_forms.py:391 msgid "Event types" msgstr "事件类型" @@ -7573,13 +8083,13 @@ msgstr "激活的" #: netbox/extras/forms/bulk_import.py:139 #: netbox/extras/forms/bulk_import.py:162 #: netbox/extras/forms/bulk_import.py:186 -#: netbox/extras/forms/filtersets.py:137 netbox/extras/forms/filtersets.py:224 +#: netbox/extras/forms/filtersets.py:140 netbox/extras/forms/filtersets.py:230 #: netbox/extras/forms/model_forms.py:47 -#: netbox/extras/forms/model_forms.py:205 -#: netbox/extras/forms/model_forms.py:237 -#: netbox/extras/forms/model_forms.py:278 -#: netbox/extras/forms/model_forms.py:372 -#: netbox/extras/forms/model_forms.py:489 +#: netbox/extras/forms/model_forms.py:219 +#: netbox/extras/forms/model_forms.py:251 +#: netbox/extras/forms/model_forms.py:292 +#: netbox/extras/forms/model_forms.py:386 +#: netbox/extras/forms/model_forms.py:503 #: netbox/users/forms/model_forms.py:276 msgid "Object types" msgstr "对象类型" @@ -7597,10 +8107,10 @@ msgstr "一个或多个分配对象类型" msgid "Field data type (e.g. text, integer, etc.)" msgstr "字段数据类型(例如文本、整数等)" -#: netbox/extras/forms/bulk_import.py:47 netbox/extras/forms/filtersets.py:208 -#: netbox/extras/forms/filtersets.py:281 -#: netbox/extras/forms/model_forms.py:304 -#: netbox/extras/forms/model_forms.py:341 +#: netbox/extras/forms/bulk_import.py:47 netbox/extras/forms/filtersets.py:213 +#: netbox/extras/forms/filtersets.py:287 +#: netbox/extras/forms/model_forms.py:318 +#: netbox/extras/forms/model_forms.py:355 #: netbox/tenancy/forms/filtersets.py:92 msgid "Object type" msgstr "对象类型" @@ -7609,7 +8119,7 @@ msgstr "对象类型" msgid "Object type (for object or multi-object fields)" msgstr "对象类型(用于对象或多对象字段)" -#: netbox/extras/forms/bulk_import.py:53 netbox/extras/forms/filtersets.py:84 +#: netbox/extras/forms/bulk_import.py:53 netbox/extras/forms/filtersets.py:85 msgid "Choice set" msgstr "可选项" @@ -7675,7 +8185,7 @@ msgid "The classification of entry" msgstr "条目的分类" #: netbox/extras/forms/bulk_import.py:261 -#: netbox/extras/forms/model_forms.py:320 netbox/netbox/navigation/menu.py:390 +#: netbox/extras/forms/model_forms.py:334 netbox/netbox/navigation/menu.py:411 #: netbox/templates/extras/notificationgroup.html:41 #: netbox/templates/users/group.html:29 netbox/users/forms/model_forms.py:236 #: netbox/users/forms/model_forms.py:248 netbox/users/forms/model_forms.py:300 @@ -7688,7 +8198,8 @@ msgid "User names separated by commas, encased with double quotes" msgstr "用户名用逗号分隔,用双引号括起来" #: netbox/extras/forms/bulk_import.py:268 -#: netbox/extras/forms/model_forms.py:315 netbox/netbox/navigation/menu.py:410 +#: netbox/extras/forms/model_forms.py:329 netbox/netbox/navigation/menu.py:294 +#: netbox/netbox/navigation/menu.py:431 #: netbox/templates/extras/notificationgroup.html:31 #: netbox/users/forms/model_forms.py:181 netbox/users/forms/model_forms.py:193 #: netbox/users/forms/model_forms.py:305 netbox/users/tables.py:35 @@ -7700,104 +8211,104 @@ msgstr "组" msgid "Group names separated by commas, encased with double quotes" msgstr "群组名称用逗号分隔,用双引号括起来" -#: netbox/extras/forms/filtersets.py:52 netbox/extras/forms/model_forms.py:56 +#: netbox/extras/forms/filtersets.py:53 netbox/extras/forms/model_forms.py:56 msgid "Related object type" msgstr "连接的对象类型" -#: netbox/extras/forms/filtersets.py:57 +#: netbox/extras/forms/filtersets.py:58 msgid "Field type" msgstr "字段类型" -#: netbox/extras/forms/filtersets.py:120 +#: netbox/extras/forms/filtersets.py:122 #: netbox/extras/forms/model_forms.py:157 netbox/extras/tables/tables.py:91 #: netbox/templates/generic/bulk_import.html:154 msgid "Choices" msgstr "选项" -#: netbox/extras/forms/filtersets.py:164 netbox/extras/forms/filtersets.py:319 -#: netbox/extras/forms/filtersets.py:408 -#: netbox/extras/forms/model_forms.py:572 netbox/templates/core/job.html:96 +#: netbox/extras/forms/filtersets.py:168 netbox/extras/forms/filtersets.py:326 +#: netbox/extras/forms/filtersets.py:416 +#: netbox/extras/forms/model_forms.py:586 netbox/templates/core/job.html:96 #: netbox/templates/extras/eventrule.html:84 msgid "Data" msgstr "数据" -#: netbox/extras/forms/filtersets.py:175 netbox/extras/forms/filtersets.py:333 -#: netbox/extras/forms/filtersets.py:418 netbox/netbox/choices.py:130 +#: netbox/extras/forms/filtersets.py:179 netbox/extras/forms/filtersets.py:340 +#: netbox/extras/forms/filtersets.py:426 netbox/netbox/choices.py:132 #: netbox/utilities/forms/bulk_import.py:26 msgid "Data file" msgstr "数据文件" -#: netbox/extras/forms/filtersets.py:183 +#: netbox/extras/forms/filtersets.py:187 msgid "Content types" msgstr "内容类型" -#: netbox/extras/forms/filtersets.py:255 netbox/extras/models/models.py:179 +#: netbox/extras/forms/filtersets.py:261 netbox/extras/models/models.py:179 msgid "HTTP content type" msgstr "HTTP内容类型" -#: netbox/extras/forms/filtersets.py:286 +#: netbox/extras/forms/filtersets.py:292 msgid "Event type" msgstr "事件类型" -#: netbox/extras/forms/filtersets.py:291 +#: netbox/extras/forms/filtersets.py:297 msgid "Action type" msgstr "动作类型" -#: netbox/extras/forms/filtersets.py:307 +#: netbox/extras/forms/filtersets.py:313 msgid "Tagged object type" msgstr "标记的对象类型" -#: netbox/extras/forms/filtersets.py:312 +#: netbox/extras/forms/filtersets.py:318 msgid "Allowed object type" msgstr "允许的对象类型" -#: netbox/extras/forms/filtersets.py:341 -#: netbox/extras/forms/model_forms.py:507 netbox/netbox/navigation/menu.py:18 +#: netbox/extras/forms/filtersets.py:348 +#: netbox/extras/forms/model_forms.py:521 netbox/netbox/navigation/menu.py:18 msgid "Regions" msgstr "地区" -#: netbox/extras/forms/filtersets.py:346 -#: netbox/extras/forms/model_forms.py:512 +#: netbox/extras/forms/filtersets.py:353 +#: netbox/extras/forms/model_forms.py:526 msgid "Site groups" msgstr "站点组" -#: netbox/extras/forms/filtersets.py:356 -#: netbox/extras/forms/model_forms.py:522 netbox/netbox/navigation/menu.py:20 +#: netbox/extras/forms/filtersets.py:363 +#: netbox/extras/forms/model_forms.py:536 netbox/netbox/navigation/menu.py:20 #: netbox/templates/dcim/site.html:127 msgid "Locations" msgstr "位置" -#: netbox/extras/forms/filtersets.py:361 -#: netbox/extras/forms/model_forms.py:527 +#: netbox/extras/forms/filtersets.py:368 +#: netbox/extras/forms/model_forms.py:541 msgid "Device types" msgstr "设备型号" -#: netbox/extras/forms/filtersets.py:366 -#: netbox/extras/forms/model_forms.py:532 +#: netbox/extras/forms/filtersets.py:373 +#: netbox/extras/forms/model_forms.py:546 msgid "Roles" msgstr "角色" -#: netbox/extras/forms/filtersets.py:376 -#: netbox/extras/forms/model_forms.py:542 +#: netbox/extras/forms/filtersets.py:383 +#: netbox/extras/forms/model_forms.py:556 msgid "Cluster types" msgstr "集群类型" -#: netbox/extras/forms/filtersets.py:381 -#: netbox/extras/forms/model_forms.py:547 +#: netbox/extras/forms/filtersets.py:388 +#: netbox/extras/forms/model_forms.py:561 msgid "Cluster groups" msgstr "集群组" -#: netbox/extras/forms/filtersets.py:386 -#: netbox/extras/forms/model_forms.py:552 netbox/netbox/navigation/menu.py:255 -#: netbox/netbox/navigation/menu.py:257 +#: netbox/extras/forms/filtersets.py:393 +#: netbox/extras/forms/model_forms.py:566 netbox/netbox/navigation/menu.py:263 +#: netbox/netbox/navigation/menu.py:265 #: netbox/templates/virtualization/clustertype.html:30 #: netbox/virtualization/tables/clusters.py:23 #: netbox/virtualization/tables/clusters.py:45 msgid "Clusters" msgstr "集群" -#: netbox/extras/forms/filtersets.py:391 -#: netbox/extras/forms/model_forms.py:557 +#: netbox/extras/forms/filtersets.py:398 +#: netbox/extras/forms/model_forms.py:571 msgid "Tenant groups" msgstr "租户组" @@ -7843,118 +8354,118 @@ msgstr "这将显示为表单字段的帮助文本。支持Markdown。" msgid "Related Object" msgstr "相关对象" -#: netbox/extras/forms/model_forms.py:169 +#: netbox/extras/forms/model_forms.py:170 msgid "" "Enter one choice per line. An optional label may be specified for each " "choice by appending it with a colon. Example:" msgstr "每行输入一个选项。可以为每个选项指定一个可选标签,方法是在其后面附加一个冒号。例如:" -#: netbox/extras/forms/model_forms.py:212 +#: netbox/extras/forms/model_forms.py:226 #: netbox/templates/extras/customlink.html:10 msgid "Custom Link" msgstr "自定义链接" -#: netbox/extras/forms/model_forms.py:214 +#: netbox/extras/forms/model_forms.py:228 msgid "Templates" msgstr "模版" -#: netbox/extras/forms/model_forms.py:226 +#: netbox/extras/forms/model_forms.py:240 #, python-brace-format msgid "" "Jinja2 template code for the link text. Reference the object as {example}. " "Links which render as empty text will not be displayed." msgstr "用于链接的Jinja2模板代码。将对象引用为{example}。空链接将不会显示。" -#: netbox/extras/forms/model_forms.py:230 +#: netbox/extras/forms/model_forms.py:244 #, python-brace-format msgid "" "Jinja2 template code for the link URL. Reference the object as {example}." msgstr "URL链接的Jinja2模板代码。将对象引用为 {example}。" -#: netbox/extras/forms/model_forms.py:241 -#: netbox/extras/forms/model_forms.py:624 +#: netbox/extras/forms/model_forms.py:255 +#: netbox/extras/forms/model_forms.py:638 msgid "Template code" msgstr "模版代码" -#: netbox/extras/forms/model_forms.py:247 +#: netbox/extras/forms/model_forms.py:261 #: netbox/templates/extras/exporttemplate.html:12 msgid "Export Template" msgstr "导出模版" -#: netbox/extras/forms/model_forms.py:249 +#: netbox/extras/forms/model_forms.py:263 msgid "Rendering" msgstr "转换" -#: netbox/extras/forms/model_forms.py:263 -#: netbox/extras/forms/model_forms.py:649 +#: netbox/extras/forms/model_forms.py:277 +#: netbox/extras/forms/model_forms.py:663 msgid "Template content is populated from the remote source selected below." msgstr "模板内容是从下面选择的远程源填充的。" -#: netbox/extras/forms/model_forms.py:270 -#: netbox/extras/forms/model_forms.py:656 +#: netbox/extras/forms/model_forms.py:284 +#: netbox/extras/forms/model_forms.py:670 msgid "Must specify either local content or a data file" msgstr "必须指定本地内容或数据文件" -#: netbox/extras/forms/model_forms.py:284 netbox/netbox/forms/mixins.py:70 +#: netbox/extras/forms/model_forms.py:298 netbox/netbox/forms/mixins.py:70 #: netbox/templates/extras/savedfilter.html:10 msgid "Saved Filter" msgstr "已保存的过滤器" -#: netbox/extras/forms/model_forms.py:334 +#: netbox/extras/forms/model_forms.py:348 msgid "A notification group specify at least one user or group." msgstr "通知组至少指定一个用户或组。" -#: netbox/extras/forms/model_forms.py:356 +#: netbox/extras/forms/model_forms.py:370 #: netbox/templates/extras/webhook.html:23 msgid "HTTP Request" msgstr "HTTP 请求" -#: netbox/extras/forms/model_forms.py:358 +#: netbox/extras/forms/model_forms.py:372 #: netbox/templates/extras/webhook.html:44 msgid "SSL" msgstr "SSL" -#: netbox/extras/forms/model_forms.py:380 +#: netbox/extras/forms/model_forms.py:394 msgid "Action choice" msgstr "选择动作" -#: netbox/extras/forms/model_forms.py:385 +#: netbox/extras/forms/model_forms.py:399 msgid "Enter conditions in JSON format." msgstr "已JSON格式输入条件。" -#: netbox/extras/forms/model_forms.py:389 +#: netbox/extras/forms/model_forms.py:403 msgid "" "Enter parameters to pass to the action in JSON format." msgstr "输入以 JSON格式传递的参数。" -#: netbox/extras/forms/model_forms.py:394 +#: netbox/extras/forms/model_forms.py:408 #: netbox/templates/extras/eventrule.html:10 msgid "Event Rule" msgstr "事件规则" -#: netbox/extras/forms/model_forms.py:395 +#: netbox/extras/forms/model_forms.py:409 msgid "Triggers" msgstr "触发器" -#: netbox/extras/forms/model_forms.py:442 +#: netbox/extras/forms/model_forms.py:456 msgid "Notification group" msgstr "通知组" -#: netbox/extras/forms/model_forms.py:562 netbox/netbox/navigation/menu.py:26 +#: netbox/extras/forms/model_forms.py:576 netbox/netbox/navigation/menu.py:26 #: netbox/tenancy/tables/tenants.py:22 msgid "Tenants" msgstr "租户" -#: netbox/extras/forms/model_forms.py:606 +#: netbox/extras/forms/model_forms.py:620 msgid "Data is populated from the remote source selected below." msgstr "数据是从下面选择的远程源填充的。" -#: netbox/extras/forms/model_forms.py:612 +#: netbox/extras/forms/model_forms.py:626 msgid "Must specify either local data or a data file" msgstr "必须指定本地内容或数据文件" -#: netbox/extras/forms/model_forms.py:631 +#: netbox/extras/forms/model_forms.py:645 #: netbox/templates/core/datafile.html:55 msgid "Content" msgstr "内容" @@ -8016,10 +8527,16 @@ msgstr "出现异常:" msgid "Database changes have been reverted due to error." msgstr "由于出现错误,数据库更改已回滚。" -#: netbox/extras/management/commands/reindex.py:66 +#: netbox/extras/management/commands/reindex.py:67 msgid "No indexers found!" msgstr "找不到索引!" +#: netbox/extras/models/configs.py:41 netbox/extras/models/models.py:313 +#: netbox/extras/models/models.py:522 netbox/extras/models/search.py:48 +#: netbox/ipam/models/ip.py:188 netbox/netbox/models/mixins.py:15 +msgid "weight" +msgstr "重量" + #: netbox/extras/models/configs.py:130 msgid "config context" msgstr "配置实例" @@ -8355,27 +8872,27 @@ msgstr "发现错误的对象ID: {id}" msgid "Required field cannot be empty." msgstr "必填字段不能为空。" -#: netbox/extras/models/customfields.py:763 +#: netbox/extras/models/customfields.py:764 msgid "Base set of predefined choices (optional)" msgstr "预定义选项的基本集合(可选)" -#: netbox/extras/models/customfields.py:775 +#: netbox/extras/models/customfields.py:776 msgid "Choices are automatically ordered alphabetically" msgstr "选项会自动按字母顺序排列" -#: netbox/extras/models/customfields.py:782 +#: netbox/extras/models/customfields.py:783 msgid "custom field choice set" msgstr "自定义字段选择集" -#: netbox/extras/models/customfields.py:783 +#: netbox/extras/models/customfields.py:784 msgid "custom field choice sets" msgstr "自定义字段选择集" -#: netbox/extras/models/customfields.py:825 +#: netbox/extras/models/customfields.py:826 msgid "Must define base or extra choices." msgstr "必须定义基本选项或额外选项。" -#: netbox/extras/models/customfields.py:849 +#: netbox/extras/models/customfields.py:850 #, python-brace-format msgid "" "Cannot remove choice {choice} as there are {model} objects which reference " @@ -8655,20 +9172,20 @@ msgstr "日志条目" msgid "journal entries" msgstr "日志条目" -#: netbox/extras/models/models.py:718 +#: netbox/extras/models/models.py:721 #, python-brace-format msgid "Journaling is not supported for this object type ({type})." msgstr "此对象类型({type})不支持备忘。" -#: netbox/extras/models/models.py:760 +#: netbox/extras/models/models.py:763 msgid "bookmark" msgstr "书签" -#: netbox/extras/models/models.py:761 +#: netbox/extras/models/models.py:764 msgid "bookmarks" msgstr "书签" -#: netbox/extras/models/models.py:774 +#: netbox/extras/models/models.py:777 #, python-brace-format msgid "Bookmarks cannot be assigned to this object type ({type})." msgstr "无法将书签分配给此对象类型({type})。" @@ -8760,19 +9277,19 @@ msgstr "缓存的值" msgid "cached values" msgstr "缓存的值" -#: netbox/extras/models/staging.py:44 +#: netbox/extras/models/staging.py:45 msgid "branch" msgstr "分支" -#: netbox/extras/models/staging.py:45 +#: netbox/extras/models/staging.py:46 msgid "branches" msgstr "分支" -#: netbox/extras/models/staging.py:97 +#: netbox/extras/models/staging.py:105 msgid "staged change" msgstr "暂存变更" -#: netbox/extras/models/staging.py:98 +#: netbox/extras/models/staging.py:106 msgid "staged changes" msgstr "暂存变更" @@ -8796,11 +9313,11 @@ msgstr "标记的项目" msgid "tagged items" msgstr "标记的项目" -#: netbox/extras/scripts.py:429 +#: netbox/extras/scripts.py:432 msgid "Script Data" msgstr "脚本数据" -#: netbox/extras/scripts.py:433 +#: netbox/extras/scripts.py:436 msgid "Script Execution Parameters" msgstr "脚本执行参数" @@ -8877,12 +9394,11 @@ msgstr "作为附件" #: netbox/extras/tables/tables.py:195 netbox/extras/tables/tables.py:487 #: netbox/extras/tables/tables.py:522 netbox/templates/core/datafile.html:24 -#: netbox/templates/dcim/device/render_config.html:22 #: netbox/templates/extras/configcontext.html:39 #: netbox/templates/extras/configtemplate.html:31 #: netbox/templates/extras/exporttemplate.html:45 +#: netbox/templates/extras/object_render_config.html:23 #: netbox/templates/generic/bulk_import.html:35 -#: netbox/templates/virtualization/virtualmachine/render_config.html:22 msgid "Data File" msgstr "数据文件" @@ -8974,27 +9490,32 @@ msgstr "请求的属性“{name}”无效" msgid "Invalid attribute \"{name}\" for {model}" msgstr "{model}的属性 \"{name}\"无效" -#: netbox/extras/views.py:960 +#: netbox/extras/views.py:933 +#, python-brace-format +msgid "An error occurred while rendering the template: {error}" +msgstr "渲染模板时出错: {error}" + +#: netbox/extras/views.py:1085 msgid "Your dashboard has been reset." msgstr "仪表盘已重置。" -#: netbox/extras/views.py:1006 +#: netbox/extras/views.py:1131 msgid "Added widget: " msgstr "添加小组件:" -#: netbox/extras/views.py:1047 +#: netbox/extras/views.py:1172 msgid "Updated widget: " msgstr "更新小组件:" -#: netbox/extras/views.py:1083 +#: netbox/extras/views.py:1208 msgid "Deleted widget: " msgstr "删除小组件:" -#: netbox/extras/views.py:1085 +#: netbox/extras/views.py:1210 msgid "Error deleting widget: " msgstr "删除小组件错误:" -#: netbox/extras/views.py:1175 +#: netbox/extras/views.py:1308 msgid "Unable to run script: RQ worker process not running." msgstr "无法运行脚本:RQ worker 进程未运行。" @@ -9016,7 +9537,7 @@ msgstr "请输入有效的IPv4或IPv6前缀和掩码(格式为 CIDR)。" msgid "Invalid IP prefix format: {data}" msgstr "无效的IP前缀格式: {data}" -#: netbox/ipam/api/views.py:358 +#: netbox/ipam/api/views.py:370 msgid "" "Insufficient space is available to accommodate the requested prefix size(s)" msgstr "可用 IP 不足,无法容纳此请求的前缀大小" @@ -9057,182 +9578,174 @@ msgstr "思科" msgid "Plaintext" msgstr "明文" +#: netbox/ipam/choices.py:166 netbox/ipam/forms/model_forms.py:800 +#: netbox/ipam/forms/model_forms.py:828 netbox/templates/ipam/service.html:21 +msgid "Service" +msgstr "服务" + +#: netbox/ipam/choices.py:167 +msgid "Customer" +msgstr "顾客" + #: netbox/ipam/fields.py:36 #, python-brace-format msgid "Invalid IP address format: {address}" msgstr "IP 地址格式无效: {address}" -#: netbox/ipam/filtersets.py:48 netbox/vpn/filtersets.py:304 +#: netbox/ipam/filtersets.py:51 netbox/vpn/filtersets.py:304 msgid "Import target" msgstr "引入target" -#: netbox/ipam/filtersets.py:54 netbox/vpn/filtersets.py:310 +#: netbox/ipam/filtersets.py:57 netbox/vpn/filtersets.py:310 msgid "Import target (name)" msgstr "引入target(名称)" -#: netbox/ipam/filtersets.py:59 netbox/vpn/filtersets.py:315 +#: netbox/ipam/filtersets.py:62 netbox/vpn/filtersets.py:315 msgid "Export target" msgstr "输出target" -#: netbox/ipam/filtersets.py:65 netbox/vpn/filtersets.py:321 +#: netbox/ipam/filtersets.py:68 netbox/vpn/filtersets.py:321 msgid "Export target (name)" msgstr "输出target(名称)" -#: netbox/ipam/filtersets.py:86 +#: netbox/ipam/filtersets.py:89 msgid "Importing VRF" msgstr "导入VRF" -#: netbox/ipam/filtersets.py:92 +#: netbox/ipam/filtersets.py:95 msgid "Import VRF (RD)" msgstr "导入 VRF (RD)" -#: netbox/ipam/filtersets.py:97 +#: netbox/ipam/filtersets.py:100 msgid "Exporting VRF" msgstr "导出 VRF" -#: netbox/ipam/filtersets.py:103 +#: netbox/ipam/filtersets.py:106 msgid "Export VRF (RD)" msgstr "导出 VRF (RD)" -#: netbox/ipam/filtersets.py:108 +#: netbox/ipam/filtersets.py:111 msgid "Importing L2VPN" msgstr "导入 L2VPN" -#: netbox/ipam/filtersets.py:114 +#: netbox/ipam/filtersets.py:117 msgid "Importing L2VPN (identifier)" msgstr "导入 L2VPN (identifier)" -#: netbox/ipam/filtersets.py:119 +#: netbox/ipam/filtersets.py:122 msgid "Exporting L2VPN" msgstr "导出 L2VPN" -#: netbox/ipam/filtersets.py:125 +#: netbox/ipam/filtersets.py:128 msgid "Exporting L2VPN (identifier)" msgstr "导出L2VPN(标识符)" -#: netbox/ipam/filtersets.py:155 netbox/ipam/filtersets.py:283 -#: netbox/ipam/forms/model_forms.py:229 netbox/ipam/tables/ip.py:212 +#: netbox/ipam/filtersets.py:158 netbox/ipam/filtersets.py:286 +#: netbox/ipam/forms/model_forms.py:229 netbox/ipam/tables/ip.py:158 #: netbox/templates/ipam/prefix.html:12 msgid "Prefix" msgstr "前缀" -#: netbox/ipam/filtersets.py:159 netbox/ipam/filtersets.py:198 -#: netbox/ipam/filtersets.py:223 +#: netbox/ipam/filtersets.py:162 netbox/ipam/filtersets.py:201 +#: netbox/ipam/filtersets.py:226 msgid "RIR (ID)" msgstr "RIR(ID)" -#: netbox/ipam/filtersets.py:165 netbox/ipam/filtersets.py:204 -#: netbox/ipam/filtersets.py:229 +#: netbox/ipam/filtersets.py:168 netbox/ipam/filtersets.py:207 +#: netbox/ipam/filtersets.py:232 msgid "RIR (slug)" msgstr "RIP(缩写)" -#: netbox/ipam/filtersets.py:287 +#: netbox/ipam/filtersets.py:290 msgid "Within prefix" msgstr "此前缀包含的" -#: netbox/ipam/filtersets.py:291 +#: netbox/ipam/filtersets.py:294 msgid "Within and including prefix" msgstr "此前缀包含的(包含此前缀)" -#: netbox/ipam/filtersets.py:295 +#: netbox/ipam/filtersets.py:298 msgid "Prefixes which contain this prefix or IP" msgstr "包含此前缀或IP的前缀" -#: netbox/ipam/filtersets.py:306 netbox/ipam/filtersets.py:574 -#: netbox/ipam/forms/bulk_edit.py:343 netbox/ipam/forms/filtersets.py:196 -#: netbox/ipam/forms/filtersets.py:331 +#: netbox/ipam/filtersets.py:309 netbox/ipam/filtersets.py:541 +#: netbox/ipam/forms/bulk_edit.py:327 netbox/ipam/forms/filtersets.py:198 +#: netbox/ipam/forms/filtersets.py:334 msgid "Mask length" msgstr "掩码长度" -#: netbox/ipam/filtersets.py:375 netbox/vpn/filtersets.py:427 +#: netbox/ipam/filtersets.py:342 netbox/vpn/filtersets.py:427 msgid "VLAN (ID)" msgstr "VLAN (ID)" -#: netbox/ipam/filtersets.py:379 netbox/vpn/filtersets.py:422 +#: netbox/ipam/filtersets.py:346 netbox/vpn/filtersets.py:422 msgid "VLAN number (1-4094)" msgstr "VLAN 号(1-4094)" -#: netbox/ipam/filtersets.py:473 netbox/ipam/filtersets.py:477 -#: netbox/ipam/filtersets.py:569 netbox/ipam/forms/model_forms.py:496 +#: netbox/ipam/filtersets.py:440 netbox/ipam/filtersets.py:444 +#: netbox/ipam/filtersets.py:536 netbox/ipam/forms/model_forms.py:506 #: netbox/templates/tenancy/contact.html:53 #: netbox/tenancy/forms/bulk_edit.py:113 msgid "Address" msgstr "地址" -#: netbox/ipam/filtersets.py:481 +#: netbox/ipam/filtersets.py:448 msgid "Ranges which contain this prefix or IP" msgstr "包含此前缀或IP的范围" -#: netbox/ipam/filtersets.py:509 netbox/ipam/filtersets.py:565 +#: netbox/ipam/filtersets.py:476 netbox/ipam/filtersets.py:532 msgid "Parent prefix" msgstr "上级前缀" -#: netbox/ipam/filtersets.py:618 netbox/ipam/filtersets.py:858 -#: netbox/ipam/filtersets.py:1133 netbox/vpn/filtersets.py:385 -msgid "Virtual machine (name)" -msgstr "虚拟机(名称)" - -#: netbox/ipam/filtersets.py:623 netbox/ipam/filtersets.py:863 -#: netbox/ipam/filtersets.py:1127 netbox/virtualization/filtersets.py:282 -#: netbox/virtualization/filtersets.py:321 netbox/vpn/filtersets.py:390 -msgid "Virtual machine (ID)" -msgstr "虚拟机(ID)" - -#: netbox/ipam/filtersets.py:629 netbox/vpn/filtersets.py:97 -#: netbox/vpn/filtersets.py:396 -msgid "Interface (name)" -msgstr "接口(名称)" - -#: netbox/ipam/filtersets.py:640 netbox/vpn/filtersets.py:108 -#: netbox/vpn/filtersets.py:407 -msgid "VM interface (name)" -msgstr "虚拟接口(名称)" - -#: netbox/ipam/filtersets.py:645 netbox/vpn/filtersets.py:113 -msgid "VM interface (ID)" -msgstr "虚拟接口(ID)" - -#: netbox/ipam/filtersets.py:650 +#: netbox/ipam/filtersets.py:617 msgid "FHRP group (ID)" msgstr "FHRP 组 (ID)" -#: netbox/ipam/filtersets.py:654 +#: netbox/ipam/filtersets.py:621 msgid "Is assigned to an interface" msgstr "分配给接口" -#: netbox/ipam/filtersets.py:658 +#: netbox/ipam/filtersets.py:625 msgid "Is assigned" msgstr "已分配" -#: netbox/ipam/filtersets.py:670 +#: netbox/ipam/filtersets.py:637 msgid "Service (ID)" msgstr "服务 (ID)" -#: netbox/ipam/filtersets.py:675 +#: netbox/ipam/filtersets.py:642 msgid "NAT inside IP address (ID)" msgstr "NAT 内部 IP 地址 (ID)" -#: netbox/ipam/filtersets.py:1043 netbox/ipam/forms/bulk_import.py:322 -msgid "Assigned interface" -msgstr "分配的接口" +#: netbox/ipam/filtersets.py:1001 +msgid "Q-in-Q SVLAN (ID)" +msgstr "Q-in-Q SVLAN (ID)" -#: netbox/ipam/filtersets.py:1048 +#: netbox/ipam/filtersets.py:1005 +msgid "Q-in-Q SVLAN number (1-4094)" +msgstr "Q-in-Q SVLAN 号码 (1-4094)" + +#: netbox/ipam/filtersets.py:1026 msgid "Assigned VM interface" msgstr "分配的虚拟机接口" -#: netbox/ipam/filtersets.py:1138 +#: netbox/ipam/filtersets.py:1097 +msgid "VLAN Translation Policy (name)" +msgstr "VLAN 转换策略(名称)" + +#: netbox/ipam/filtersets.py:1163 msgid "IP address (ID)" msgstr "IP 地址 (ID)" -#: netbox/ipam/filtersets.py:1144 netbox/ipam/models/ip.py:788 +#: netbox/ipam/filtersets.py:1169 netbox/ipam/models/ip.py:788 msgid "IP address" msgstr "IP 地址" -#: netbox/ipam/filtersets.py:1169 +#: netbox/ipam/filtersets.py:1194 msgid "Primary IPv4 (ID)" msgstr "首选 IPv4(ID)" -#: netbox/ipam/filtersets.py:1174 +#: netbox/ipam/filtersets.py:1199 msgid "Primary IPv6 (ID)" msgstr "首选IPv6(ID)" @@ -9265,477 +9778,450 @@ msgstr "需要 CIDR 掩码(例如/24)" msgid "Address pattern" msgstr "地址模式" -#: netbox/ipam/forms/bulk_edit.py:50 +#: netbox/ipam/forms/bulk_edit.py:53 msgid "Enforce unique space" msgstr "强制使用唯一空间" -#: netbox/ipam/forms/bulk_edit.py:88 +#: netbox/ipam/forms/bulk_edit.py:91 msgid "Is private" msgstr "私有的" -#: netbox/ipam/forms/bulk_edit.py:109 netbox/ipam/forms/bulk_edit.py:138 -#: netbox/ipam/forms/bulk_edit.py:163 netbox/ipam/forms/bulk_import.py:89 -#: netbox/ipam/forms/bulk_import.py:109 netbox/ipam/forms/bulk_import.py:129 -#: netbox/ipam/forms/filtersets.py:110 netbox/ipam/forms/filtersets.py:125 -#: netbox/ipam/forms/filtersets.py:148 netbox/ipam/forms/model_forms.py:96 -#: netbox/ipam/forms/model_forms.py:109 netbox/ipam/forms/model_forms.py:131 -#: netbox/ipam/forms/model_forms.py:149 netbox/ipam/models/asns.py:31 -#: netbox/ipam/models/asns.py:103 netbox/ipam/models/ip.py:71 -#: netbox/ipam/models/ip.py:90 netbox/ipam/tables/asn.py:20 +#: netbox/ipam/forms/bulk_edit.py:112 netbox/ipam/forms/bulk_edit.py:141 +#: netbox/ipam/forms/bulk_edit.py:166 netbox/ipam/forms/bulk_import.py:92 +#: netbox/ipam/forms/bulk_import.py:112 netbox/ipam/forms/bulk_import.py:132 +#: netbox/ipam/forms/filtersets.py:112 netbox/ipam/forms/filtersets.py:127 +#: netbox/ipam/forms/filtersets.py:150 netbox/ipam/forms/model_forms.py:99 +#: netbox/ipam/forms/model_forms.py:112 netbox/ipam/forms/model_forms.py:135 +#: netbox/ipam/forms/model_forms.py:154 netbox/ipam/models/asns.py:31 +#: netbox/ipam/models/asns.py:100 netbox/ipam/models/ip.py:71 +#: netbox/ipam/models/ip.py:87 netbox/ipam/tables/asn.py:20 #: netbox/ipam/tables/asn.py:45 netbox/templates/ipam/aggregate.html:18 #: netbox/templates/ipam/asn.html:27 netbox/templates/ipam/asnrange.html:19 #: netbox/templates/ipam/rir.html:19 msgid "RIR" msgstr "区域互联网注册管理机构" -#: netbox/ipam/forms/bulk_edit.py:171 +#: netbox/ipam/forms/bulk_edit.py:174 msgid "Date added" msgstr "添加日期" -#: netbox/ipam/forms/bulk_edit.py:229 netbox/ipam/forms/model_forms.py:619 -#: netbox/ipam/forms/model_forms.py:666 netbox/ipam/tables/ip.py:251 -#: netbox/templates/ipam/vlan_edit.html:37 +#: netbox/ipam/forms/bulk_edit.py:213 netbox/ipam/forms/model_forms.py:629 +#: netbox/ipam/forms/model_forms.py:676 netbox/ipam/tables/ip.py:201 +#: netbox/templates/ipam/vlan_edit.html:45 #: netbox/templates/ipam/vlangroup.html:27 msgid "VLAN Group" msgstr "VLAN组" -#: netbox/ipam/forms/bulk_edit.py:234 netbox/ipam/forms/bulk_import.py:185 -#: netbox/ipam/forms/filtersets.py:256 netbox/ipam/forms/model_forms.py:218 -#: netbox/ipam/models/vlans.py:250 netbox/ipam/tables/ip.py:255 -#: netbox/templates/ipam/prefix.html:60 netbox/templates/ipam/vlan.html:12 +#: netbox/ipam/forms/bulk_edit.py:218 netbox/ipam/forms/bulk_import.py:181 +#: netbox/ipam/forms/filtersets.py:259 netbox/ipam/forms/model_forms.py:217 +#: netbox/ipam/models/vlans.py:272 netbox/ipam/tables/ip.py:206 +#: netbox/templates/ipam/prefix.html:56 netbox/templates/ipam/vlan.html:12 #: netbox/templates/ipam/vlan/base.html:6 #: netbox/templates/ipam/vlan_edit.html:10 -#: netbox/templates/wireless/wirelesslan.html:30 +#: netbox/templates/wireless/wirelesslan.html:38 #: netbox/vpn/forms/bulk_import.py:304 netbox/vpn/forms/filtersets.py:284 -#: netbox/vpn/forms/model_forms.py:433 netbox/vpn/forms/model_forms.py:452 -#: netbox/wireless/forms/bulk_edit.py:55 -#: netbox/wireless/forms/bulk_import.py:48 -#: netbox/wireless/forms/model_forms.py:48 netbox/wireless/models.py:102 +#: netbox/vpn/forms/model_forms.py:436 netbox/vpn/forms/model_forms.py:455 +#: netbox/wireless/forms/bulk_edit.py:57 +#: netbox/wireless/forms/bulk_import.py:50 +#: netbox/wireless/forms/model_forms.py:50 netbox/wireless/models.py:102 msgid "VLAN" msgstr "VLAN" -#: netbox/ipam/forms/bulk_edit.py:245 +#: netbox/ipam/forms/bulk_edit.py:229 msgid "Prefix length" msgstr "前缀长度" -#: netbox/ipam/forms/bulk_edit.py:268 netbox/ipam/forms/filtersets.py:241 -#: netbox/templates/ipam/prefix.html:85 +#: netbox/ipam/forms/bulk_edit.py:252 netbox/ipam/forms/filtersets.py:244 +#: netbox/templates/ipam/prefix.html:81 msgid "Is a pool" msgstr "是一个池" -#: netbox/ipam/forms/bulk_edit.py:273 netbox/ipam/forms/bulk_edit.py:318 -#: netbox/ipam/forms/filtersets.py:248 netbox/ipam/forms/filtersets.py:293 -#: netbox/ipam/models/ip.py:272 netbox/ipam/models/ip.py:539 +#: netbox/ipam/forms/bulk_edit.py:257 netbox/ipam/forms/bulk_edit.py:302 +#: netbox/ipam/forms/filtersets.py:251 netbox/ipam/forms/filtersets.py:296 +#: netbox/ipam/models/ip.py:256 netbox/ipam/models/ip.py:525 msgid "Treat as fully utilized" msgstr "设置为已被全部占用" -#: netbox/ipam/forms/bulk_edit.py:287 netbox/ipam/forms/filtersets.py:171 +#: netbox/ipam/forms/bulk_edit.py:271 netbox/ipam/forms/filtersets.py:173 +#: netbox/ipam/forms/model_forms.py:232 msgid "VLAN Assignment" msgstr "VLAN 分配" -#: netbox/ipam/forms/bulk_edit.py:366 netbox/ipam/models/ip.py:772 +#: netbox/ipam/forms/bulk_edit.py:350 netbox/ipam/models/ip.py:772 msgid "DNS name" msgstr "DNS 名称" -#: netbox/ipam/forms/bulk_edit.py:387 netbox/ipam/forms/bulk_edit.py:534 -#: netbox/ipam/forms/bulk_import.py:418 netbox/ipam/forms/bulk_import.py:493 -#: netbox/ipam/forms/bulk_import.py:519 netbox/ipam/forms/filtersets.py:390 -#: netbox/ipam/forms/filtersets.py:530 netbox/templates/ipam/fhrpgroup.html:22 +#: netbox/ipam/forms/bulk_edit.py:371 netbox/ipam/forms/bulk_edit.py:562 +#: netbox/ipam/forms/bulk_import.py:417 netbox/ipam/forms/bulk_import.py:528 +#: netbox/ipam/forms/bulk_import.py:554 netbox/ipam/forms/filtersets.py:393 +#: netbox/ipam/forms/filtersets.py:582 netbox/templates/ipam/fhrpgroup.html:22 #: netbox/templates/ipam/inc/panels/fhrp_groups.html:24 #: netbox/templates/ipam/service.html:32 #: netbox/templates/ipam/servicetemplate.html:19 msgid "Protocol" msgstr "协议" -#: netbox/ipam/forms/bulk_edit.py:394 netbox/ipam/forms/filtersets.py:397 +#: netbox/ipam/forms/bulk_edit.py:378 netbox/ipam/forms/filtersets.py:400 #: netbox/ipam/tables/fhrp.py:22 netbox/templates/ipam/fhrpgroup.html:26 msgid "Group ID" msgstr "组 ID" -#: netbox/ipam/forms/bulk_edit.py:399 netbox/ipam/forms/filtersets.py:402 -#: netbox/wireless/forms/bulk_edit.py:68 -#: netbox/wireless/forms/bulk_edit.py:115 -#: netbox/wireless/forms/bulk_import.py:62 -#: netbox/wireless/forms/bulk_import.py:65 -#: netbox/wireless/forms/bulk_import.py:104 -#: netbox/wireless/forms/bulk_import.py:107 -#: netbox/wireless/forms/filtersets.py:54 -#: netbox/wireless/forms/filtersets.py:88 +#: netbox/ipam/forms/bulk_edit.py:383 netbox/ipam/forms/filtersets.py:405 +#: netbox/wireless/forms/bulk_edit.py:70 +#: netbox/wireless/forms/bulk_edit.py:118 +#: netbox/wireless/forms/bulk_import.py:64 +#: netbox/wireless/forms/bulk_import.py:67 +#: netbox/wireless/forms/bulk_import.py:109 +#: netbox/wireless/forms/bulk_import.py:112 +#: netbox/wireless/forms/filtersets.py:57 +#: netbox/wireless/forms/filtersets.py:116 msgid "Authentication type" msgstr "认证类型" -#: netbox/ipam/forms/bulk_edit.py:404 netbox/ipam/forms/filtersets.py:406 +#: netbox/ipam/forms/bulk_edit.py:388 netbox/ipam/forms/filtersets.py:409 msgid "Authentication key" msgstr "认证秘钥" -#: netbox/ipam/forms/bulk_edit.py:421 netbox/ipam/forms/filtersets.py:383 -#: netbox/ipam/forms/model_forms.py:507 netbox/netbox/navigation/menu.py:386 +#: netbox/ipam/forms/bulk_edit.py:405 netbox/ipam/forms/filtersets.py:386 +#: netbox/ipam/forms/model_forms.py:517 netbox/netbox/navigation/menu.py:407 #: netbox/templates/ipam/fhrpgroup.html:49 #: netbox/templates/wireless/inc/authentication_attrs.html:5 -#: netbox/wireless/forms/bulk_edit.py:91 -#: netbox/wireless/forms/bulk_edit.py:149 -#: netbox/wireless/forms/filtersets.py:36 -#: netbox/wireless/forms/filtersets.py:76 -#: netbox/wireless/forms/model_forms.py:55 -#: netbox/wireless/forms/model_forms.py:171 +#: netbox/wireless/forms/bulk_edit.py:94 +#: netbox/wireless/forms/bulk_edit.py:152 +#: netbox/wireless/forms/filtersets.py:39 +#: netbox/wireless/forms/filtersets.py:104 +#: netbox/wireless/forms/model_forms.py:58 +#: netbox/wireless/forms/model_forms.py:174 msgid "Authentication" msgstr "身份验证" -#: netbox/ipam/forms/bulk_edit.py:436 netbox/ipam/forms/model_forms.py:608 -msgid "Scope type" -msgstr "作用域类型" - -#: netbox/ipam/forms/bulk_edit.py:439 netbox/ipam/forms/bulk_edit.py:453 -#: netbox/ipam/forms/model_forms.py:611 netbox/ipam/forms/model_forms.py:621 -#: netbox/ipam/tables/vlans.py:71 netbox/templates/ipam/vlangroup.html:38 -msgid "Scope" -msgstr "作用域" - -#: netbox/ipam/forms/bulk_edit.py:446 netbox/ipam/models/vlans.py:60 +#: netbox/ipam/forms/bulk_edit.py:430 netbox/ipam/models/vlans.py:62 msgid "VLAN ID ranges" msgstr "VLAN ID 范围" -#: netbox/ipam/forms/bulk_edit.py:525 +#: netbox/ipam/forms/bulk_edit.py:505 netbox/ipam/forms/bulk_import.py:485 +#: netbox/ipam/forms/filtersets.py:557 netbox/ipam/models/vlans.py:232 +#: netbox/ipam/tables/vlans.py:103 +msgid "Q-in-Q role" +msgstr "Q-in-Q 角色" + +#: netbox/ipam/forms/bulk_edit.py:522 +msgid "Q-in-Q" +msgstr "Q-in-Q" + +#: netbox/ipam/forms/bulk_edit.py:523 msgid "Site & Group" msgstr "站点 & 组" -#: netbox/ipam/forms/bulk_edit.py:539 netbox/ipam/forms/model_forms.py:692 -#: netbox/ipam/forms/model_forms.py:724 netbox/ipam/tables/services.py:19 +#: netbox/ipam/forms/bulk_edit.py:546 netbox/ipam/forms/bulk_import.py:515 +#: netbox/ipam/forms/model_forms.py:724 netbox/ipam/tables/vlans.py:256 +#: netbox/templates/ipam/vlantranslationrule.html:14 +#: netbox/vpn/forms/model_forms.py:322 netbox/vpn/forms/model_forms.py:359 +msgid "Policy" +msgstr "策略" + +#: netbox/ipam/forms/bulk_edit.py:567 netbox/ipam/forms/model_forms.py:742 +#: netbox/ipam/forms/model_forms.py:774 netbox/ipam/tables/services.py:19 #: netbox/ipam/tables/services.py:49 netbox/templates/ipam/service.html:36 #: netbox/templates/ipam/servicetemplate.html:23 msgid "Ports" msgstr "端口" -#: netbox/ipam/forms/bulk_import.py:48 +#: netbox/ipam/forms/bulk_import.py:51 msgid "Import route targets" msgstr "导入的 Route Targets" -#: netbox/ipam/forms/bulk_import.py:54 +#: netbox/ipam/forms/bulk_import.py:57 msgid "Export route targets" msgstr "导出的Route Targets" -#: netbox/ipam/forms/bulk_import.py:92 netbox/ipam/forms/bulk_import.py:112 -#: netbox/ipam/forms/bulk_import.py:132 +#: netbox/ipam/forms/bulk_import.py:95 netbox/ipam/forms/bulk_import.py:115 +#: netbox/ipam/forms/bulk_import.py:135 msgid "Assigned RIR" msgstr "指定的 RIR" -#: netbox/ipam/forms/bulk_import.py:182 +#: netbox/ipam/forms/bulk_import.py:178 msgid "VLAN's group (if any)" msgstr "VLAN 组(若存在)" -#: netbox/ipam/forms/bulk_import.py:308 -msgid "Parent device of assigned interface (if any)" -msgstr "指定接口的父设备(如果有)" - -#: netbox/ipam/forms/bulk_import.py:311 netbox/ipam/forms/bulk_import.py:512 -#: netbox/ipam/forms/model_forms.py:718 -#: netbox/virtualization/filtersets.py:288 -#: netbox/virtualization/filtersets.py:327 -#: netbox/virtualization/forms/bulk_edit.py:200 -#: netbox/virtualization/forms/bulk_edit.py:326 -#: netbox/virtualization/forms/bulk_import.py:146 -#: netbox/virtualization/forms/bulk_import.py:207 -#: netbox/virtualization/forms/filtersets.py:212 -#: netbox/virtualization/forms/filtersets.py:248 -#: netbox/virtualization/forms/model_forms.py:288 -#: netbox/vpn/forms/bulk_import.py:93 netbox/vpn/forms/bulk_import.py:290 -msgid "Virtual machine" -msgstr "虚拟机" - -#: netbox/ipam/forms/bulk_import.py:315 -msgid "Parent VM of assigned interface (if any)" -msgstr "指定接口的父虚拟机(如果有)" +#: netbox/ipam/forms/bulk_import.py:207 +#: netbox/virtualization/forms/bulk_import.py:80 +#: netbox/wireless/forms/bulk_import.py:83 +msgid "Scope ID" +msgstr "范围 ID" #: netbox/ipam/forms/bulk_import.py:325 -msgid "Is primary" -msgstr "首选" - -#: netbox/ipam/forms/bulk_import.py:326 msgid "Make this the primary IP for the assigned device" msgstr "设置为设备的首选 IP" -#: netbox/ipam/forms/bulk_import.py:330 +#: netbox/ipam/forms/bulk_import.py:329 msgid "Is out-of-band" msgstr "处于带外状态" -#: netbox/ipam/forms/bulk_import.py:331 +#: netbox/ipam/forms/bulk_import.py:330 msgid "Designate this as the out-of-band IP address for the assigned device" msgstr "将其指定为分配设备的带外 IP 地址" -#: netbox/ipam/forms/bulk_import.py:371 +#: netbox/ipam/forms/bulk_import.py:370 msgid "No device or virtual machine specified; cannot set as primary IP" msgstr "未指定设备或虚拟机;无法设置为首选 IP" -#: netbox/ipam/forms/bulk_import.py:375 +#: netbox/ipam/forms/bulk_import.py:374 msgid "No device specified; cannot set as out-of-band IP" msgstr "未指定设备;无法设置为带外 IP" -#: netbox/ipam/forms/bulk_import.py:379 +#: netbox/ipam/forms/bulk_import.py:378 msgid "Cannot set out-of-band IP for virtual machines" msgstr "无法为虚拟机设置带外 IP" -#: netbox/ipam/forms/bulk_import.py:383 +#: netbox/ipam/forms/bulk_import.py:382 msgid "No interface specified; cannot set as primary IP" msgstr "未指定接口;无法设置为首选 IP" -#: netbox/ipam/forms/bulk_import.py:387 +#: netbox/ipam/forms/bulk_import.py:386 msgid "No interface specified; cannot set as out-of-band IP" msgstr "未指定接口;无法设置为带外 IP" -#: netbox/ipam/forms/bulk_import.py:422 +#: netbox/ipam/forms/bulk_import.py:421 msgid "Auth type" msgstr "认证类型" -#: netbox/ipam/forms/bulk_import.py:437 -msgid "Scope type (app & model)" -msgstr "作用域类型(应用程序&型号)" - -#: netbox/ipam/forms/bulk_import.py:464 +#: netbox/ipam/forms/bulk_import.py:463 msgid "Assigned VLAN group" msgstr "分配的VLAN组" -#: netbox/ipam/forms/bulk_import.py:495 netbox/ipam/forms/bulk_import.py:521 +#: netbox/ipam/forms/bulk_import.py:495 +msgid "Service VLAN (for Q-in-Q/802.1ad customer VLANs)" +msgstr "服务 VLAN(适用于 q-in-q/802.1ad 客户 VLAN)" + +#: netbox/ipam/forms/bulk_import.py:518 netbox/ipam/models/vlans.py:343 +msgid "VLAN translation policy" +msgstr "VLAN 转换策略" + +#: netbox/ipam/forms/bulk_import.py:530 netbox/ipam/forms/bulk_import.py:556 msgid "IP protocol" msgstr "IP 协议" -#: netbox/ipam/forms/bulk_import.py:509 +#: netbox/ipam/forms/bulk_import.py:544 msgid "Required if not assigned to a VM" msgstr "如果未分配给虚拟机,则为必需" -#: netbox/ipam/forms/bulk_import.py:516 +#: netbox/ipam/forms/bulk_import.py:551 msgid "Required if not assigned to a device" msgstr "如果未分配给设备,则为必需" -#: netbox/ipam/forms/bulk_import.py:541 +#: netbox/ipam/forms/bulk_import.py:576 #, python-brace-format msgid "{ip} is not assigned to this device/VM." msgstr "{ip} 未分配给此设备/虚拟机。" -#: netbox/ipam/forms/filtersets.py:47 netbox/ipam/forms/model_forms.py:63 -#: netbox/netbox/navigation/menu.py:189 netbox/vpn/forms/model_forms.py:410 +#: netbox/ipam/forms/filtersets.py:49 netbox/ipam/forms/model_forms.py:66 +#: netbox/netbox/navigation/menu.py:195 netbox/vpn/forms/model_forms.py:413 msgid "Route Targets" msgstr "Route Targets" -#: netbox/ipam/forms/filtersets.py:53 netbox/ipam/forms/model_forms.py:50 -#: netbox/vpn/forms/filtersets.py:224 netbox/vpn/forms/model_forms.py:397 +#: netbox/ipam/forms/filtersets.py:55 netbox/ipam/forms/model_forms.py:53 +#: netbox/vpn/forms/filtersets.py:224 netbox/vpn/forms/model_forms.py:400 msgid "Import targets" msgstr "导入 target" -#: netbox/ipam/forms/filtersets.py:58 netbox/ipam/forms/model_forms.py:55 -#: netbox/vpn/forms/filtersets.py:229 netbox/vpn/forms/model_forms.py:402 +#: netbox/ipam/forms/filtersets.py:60 netbox/ipam/forms/model_forms.py:58 +#: netbox/vpn/forms/filtersets.py:229 netbox/vpn/forms/model_forms.py:405 msgid "Export targets" msgstr "导出 target" -#: netbox/ipam/forms/filtersets.py:73 +#: netbox/ipam/forms/filtersets.py:75 msgid "Imported by VRF" msgstr "由VRF引入" -#: netbox/ipam/forms/filtersets.py:78 +#: netbox/ipam/forms/filtersets.py:80 msgid "Exported by VRF" msgstr "由VRF输出" -#: netbox/ipam/forms/filtersets.py:87 netbox/ipam/tables/ip.py:89 +#: netbox/ipam/forms/filtersets.py:89 netbox/ipam/tables/ip.py:35 #: netbox/templates/ipam/rir.html:30 msgid "Private" msgstr "私有的" -#: netbox/ipam/forms/filtersets.py:105 netbox/ipam/forms/filtersets.py:191 -#: netbox/ipam/forms/filtersets.py:272 netbox/ipam/forms/filtersets.py:326 +#: netbox/ipam/forms/filtersets.py:107 netbox/ipam/forms/filtersets.py:193 +#: netbox/ipam/forms/filtersets.py:275 netbox/ipam/forms/filtersets.py:329 msgid "Address family" msgstr "地址类型" -#: netbox/ipam/forms/filtersets.py:119 netbox/templates/ipam/asnrange.html:25 +#: netbox/ipam/forms/filtersets.py:121 netbox/templates/ipam/asnrange.html:25 msgid "Range" msgstr "范围" -#: netbox/ipam/forms/filtersets.py:128 +#: netbox/ipam/forms/filtersets.py:130 msgid "Start" msgstr "开始" -#: netbox/ipam/forms/filtersets.py:132 +#: netbox/ipam/forms/filtersets.py:134 msgid "End" msgstr "结束" -#: netbox/ipam/forms/filtersets.py:186 +#: netbox/ipam/forms/filtersets.py:188 msgid "Search within" msgstr "在此前缀内查找" -#: netbox/ipam/forms/filtersets.py:207 netbox/ipam/forms/filtersets.py:342 +#: netbox/ipam/forms/filtersets.py:209 netbox/ipam/forms/filtersets.py:345 msgid "Present in VRF" msgstr "存在于VRF中" -#: netbox/ipam/forms/filtersets.py:311 +#: netbox/ipam/forms/filtersets.py:314 msgid "Device/VM" msgstr "设备/虚拟机" -#: netbox/ipam/forms/filtersets.py:321 +#: netbox/ipam/forms/filtersets.py:324 msgid "Parent Prefix" msgstr "上级IP前缀" -#: netbox/ipam/forms/filtersets.py:347 -msgid "Assigned Device" -msgstr "指定设备" - -#: netbox/ipam/forms/filtersets.py:352 -msgid "Assigned VM" -msgstr "指定虚拟机" - -#: netbox/ipam/forms/filtersets.py:366 +#: netbox/ipam/forms/filtersets.py:369 msgid "Assigned to an interface" msgstr "指定给一个接口" -#: netbox/ipam/forms/filtersets.py:373 netbox/templates/ipam/ipaddress.html:51 +#: netbox/ipam/forms/filtersets.py:376 netbox/templates/ipam/ipaddress.html:51 msgid "DNS Name" msgstr "DNS名称" -#: netbox/ipam/forms/filtersets.py:416 netbox/ipam/models/vlans.py:251 -#: netbox/ipam/tables/ip.py:176 netbox/ipam/tables/vlans.py:82 -#: netbox/ipam/views.py:971 netbox/netbox/navigation/menu.py:193 -#: netbox/netbox/navigation/menu.py:195 +#: netbox/ipam/forms/filtersets.py:419 netbox/ipam/models/vlans.py:273 +#: netbox/ipam/tables/ip.py:122 netbox/ipam/tables/vlans.py:51 +#: netbox/ipam/views.py:1036 netbox/netbox/navigation/menu.py:199 +#: netbox/netbox/navigation/menu.py:201 msgid "VLANs" msgstr "VLANs" -#: netbox/ipam/forms/filtersets.py:457 +#: netbox/ipam/forms/filtersets.py:460 msgid "Contains VLAN ID" msgstr "包含 VLAN ID" -#: netbox/ipam/forms/filtersets.py:513 netbox/ipam/models/vlans.py:192 +#: netbox/ipam/forms/filtersets.py:494 netbox/ipam/models/vlans.py:363 +msgid "Local VLAN ID" +msgstr "本地 VLAN ID" + +#: netbox/ipam/forms/filtersets.py:499 netbox/ipam/models/vlans.py:371 +msgid "Remote VLAN ID" +msgstr "远程 VLAN ID" + +#: netbox/ipam/forms/filtersets.py:509 +msgid "Q-in-Q/802.1ad" +msgstr "q-in-q/802.1ad" + +#: netbox/ipam/forms/filtersets.py:554 netbox/ipam/models/vlans.py:191 #: netbox/templates/ipam/vlan.html:31 msgid "VLAN ID" msgstr "VLAN ID" -#: netbox/ipam/forms/filtersets.py:556 netbox/ipam/forms/model_forms.py:324 -#: netbox/ipam/forms/model_forms.py:746 netbox/ipam/forms/model_forms.py:772 -#: netbox/ipam/tables/vlans.py:195 -#: netbox/templates/virtualization/virtualdisk.html:21 -#: netbox/templates/virtualization/virtualmachine.html:12 -#: netbox/templates/virtualization/vminterface.html:21 -#: netbox/templates/vpn/tunneltermination.html:25 -#: netbox/virtualization/forms/filtersets.py:197 -#: netbox/virtualization/forms/filtersets.py:242 -#: netbox/virtualization/forms/model_forms.py:220 -#: netbox/virtualization/tables/virtualmachines.py:135 -#: netbox/virtualization/tables/virtualmachines.py:190 -#: netbox/vpn/choices.py:53 netbox/vpn/forms/filtersets.py:293 -#: netbox/vpn/forms/model_forms.py:160 netbox/vpn/forms/model_forms.py:171 -#: netbox/vpn/forms/model_forms.py:273 netbox/vpn/forms/model_forms.py:454 -msgid "Virtual Machine" -msgstr "虚拟机" - -#: netbox/ipam/forms/model_forms.py:80 +#: netbox/ipam/forms/model_forms.py:83 #: netbox/templates/ipam/routetarget.html:10 msgid "Route Target" msgstr "路由目标" -#: netbox/ipam/forms/model_forms.py:114 netbox/ipam/tables/ip.py:117 +#: netbox/ipam/forms/model_forms.py:118 netbox/ipam/tables/ip.py:63 #: netbox/templates/ipam/aggregate.html:11 #: netbox/templates/ipam/prefix.html:38 msgid "Aggregate" msgstr "聚合IP" -#: netbox/ipam/forms/model_forms.py:135 netbox/templates/ipam/asnrange.html:12 +#: netbox/ipam/forms/model_forms.py:140 netbox/templates/ipam/asnrange.html:12 msgid "ASN Range" msgstr "ASN范围" -#: netbox/ipam/forms/model_forms.py:231 -msgid "Site/VLAN Assignment" -msgstr "站点/VLAN 关联" - -#: netbox/ipam/forms/model_forms.py:259 netbox/templates/ipam/iprange.html:10 +#: netbox/ipam/forms/model_forms.py:269 netbox/templates/ipam/iprange.html:10 msgid "IP Range" msgstr "IP范围" -#: netbox/ipam/forms/model_forms.py:295 netbox/ipam/forms/model_forms.py:325 -#: netbox/ipam/forms/model_forms.py:506 +#: netbox/ipam/forms/model_forms.py:305 netbox/ipam/forms/model_forms.py:335 +#: netbox/ipam/forms/model_forms.py:516 #: netbox/templates/ipam/fhrpgroup.html:19 msgid "FHRP Group" msgstr "FHRP组" -#: netbox/ipam/forms/model_forms.py:310 +#: netbox/ipam/forms/model_forms.py:320 msgid "Make this the primary IP for the device/VM" msgstr "将此IP设置为分配设备/虚拟机的首选 IP" -#: netbox/ipam/forms/model_forms.py:314 +#: netbox/ipam/forms/model_forms.py:324 msgid "Make this the out-of-band IP for the device" msgstr "将此设为设备的带外 IP" -#: netbox/ipam/forms/model_forms.py:329 +#: netbox/ipam/forms/model_forms.py:339 msgid "NAT IP (Inside)" msgstr "NAT IP(内部)地址" -#: netbox/ipam/forms/model_forms.py:391 +#: netbox/ipam/forms/model_forms.py:401 msgid "An IP address can only be assigned to a single object." msgstr "IP 地址只能分配给单个对象。" -#: netbox/ipam/forms/model_forms.py:398 +#: netbox/ipam/forms/model_forms.py:408 msgid "Cannot reassign primary IP address for the parent device/VM" msgstr "无法为父设备/虚拟机重新分配主 IP 地址" -#: netbox/ipam/forms/model_forms.py:402 +#: netbox/ipam/forms/model_forms.py:412 msgid "Cannot reassign out-of-Band IP address for the parent device" msgstr "无法为父设备重新分配带外 IP 地址" -#: netbox/ipam/forms/model_forms.py:412 +#: netbox/ipam/forms/model_forms.py:422 msgid "" "Only IP addresses assigned to an interface can be designated as primary IPs." msgstr "只有分配给接口的 IP 地址才能指定为首选 IP。" -#: netbox/ipam/forms/model_forms.py:420 +#: netbox/ipam/forms/model_forms.py:430 msgid "" "Only IP addresses assigned to a device interface can be designated as the " "out-of-band IP for a device." msgstr "只有分配给设备接口的 IP 地址才能指定为设备的带外 IP。" -#: netbox/ipam/forms/model_forms.py:508 +#: netbox/ipam/forms/model_forms.py:518 msgid "Virtual IP Address" msgstr "虚拟IP地址" -#: netbox/ipam/forms/model_forms.py:593 +#: netbox/ipam/forms/model_forms.py:603 msgid "Assignment already exists" msgstr "已被分配" -#: netbox/ipam/forms/model_forms.py:602 +#: netbox/ipam/forms/model_forms.py:612 #: netbox/templates/ipam/vlangroup.html:42 msgid "VLAN IDs" msgstr "VLAN ID" -#: netbox/ipam/forms/model_forms.py:620 +#: netbox/ipam/forms/model_forms.py:630 msgid "Child VLANs" msgstr "子类 VLANs" -#: netbox/ipam/forms/model_forms.py:697 netbox/ipam/forms/model_forms.py:729 +#: netbox/ipam/forms/model_forms.py:730 +#: netbox/templates/ipam/vlantranslationrule.html:11 +msgid "VLAN Translation Rule" +msgstr "VLAN 转换规则" + +#: netbox/ipam/forms/model_forms.py:747 netbox/ipam/forms/model_forms.py:779 msgid "" "Comma-separated list of one or more port numbers. A range may be specified " "using a hyphen." msgstr "一个或多个端口号的列表,逗号分隔。可以使用连字符指定范围。" -#: netbox/ipam/forms/model_forms.py:702 +#: netbox/ipam/forms/model_forms.py:752 #: netbox/templates/ipam/servicetemplate.html:12 msgid "Service Template" msgstr "服务模版" -#: netbox/ipam/forms/model_forms.py:749 +#: netbox/ipam/forms/model_forms.py:799 msgid "Port(s)" msgstr "端口" -#: netbox/ipam/forms/model_forms.py:750 netbox/ipam/forms/model_forms.py:778 -#: netbox/templates/ipam/service.html:21 -msgid "Service" -msgstr "服务" - -#: netbox/ipam/forms/model_forms.py:763 +#: netbox/ipam/forms/model_forms.py:813 msgid "Service template" msgstr "服务模版" -#: netbox/ipam/forms/model_forms.py:775 +#: netbox/ipam/forms/model_forms.py:825 msgid "From Template" msgstr "来自模版" -#: netbox/ipam/forms/model_forms.py:776 +#: netbox/ipam/forms/model_forms.py:826 msgid "Custom" msgstr "自定义" -#: netbox/ipam/forms/model_forms.py:806 +#: netbox/ipam/forms/model_forms.py:856 msgid "" "Must specify name, protocol, and port(s) if not using a service template." msgstr "如果不使用服务模板,则必须指定名称、协议和端口。" @@ -9752,28 +10238,28 @@ msgstr "ASN范围" msgid "ASN ranges" msgstr "ASN范围" -#: netbox/ipam/models/asns.py:72 +#: netbox/ipam/models/asns.py:69 #, python-brace-format msgid "Starting ASN ({start}) must be lower than ending ASN ({end})." msgstr "开始的ASN ({start}) 必须低于结束的ASN({end})。" -#: netbox/ipam/models/asns.py:104 +#: netbox/ipam/models/asns.py:101 msgid "Regional Internet Registry responsible for this AS number space" msgstr "负责此AS号码的区域互联网注册处" -#: netbox/ipam/models/asns.py:109 +#: netbox/ipam/models/asns.py:106 msgid "16- or 32-bit autonomous system number" msgstr "16或32位自主系统编号" -#: netbox/ipam/models/fhrp.py:22 +#: netbox/ipam/models/fhrp.py:21 msgid "group ID" msgstr "组ID" -#: netbox/ipam/models/fhrp.py:30 netbox/ipam/models/services.py:22 +#: netbox/ipam/models/fhrp.py:29 netbox/ipam/models/services.py:21 msgid "protocol" msgstr "协议" -#: netbox/ipam/models/fhrp.py:38 netbox/wireless/models.py:28 +#: netbox/ipam/models/fhrp.py:38 netbox/wireless/models.py:29 msgid "authentication type" msgstr "认证类型" @@ -9789,11 +10275,11 @@ msgstr "FHRP组" msgid "FHRP groups" msgstr "网关冗余协议组" -#: netbox/ipam/models/fhrp.py:113 +#: netbox/ipam/models/fhrp.py:110 msgid "FHRP group assignment" msgstr "指定FHRP组" -#: netbox/ipam/models/fhrp.py:114 +#: netbox/ipam/models/fhrp.py:111 msgid "FHRP group assignments" msgstr "指定FHRP组" @@ -9805,165 +10291,160 @@ msgstr "私有" msgid "IP space managed by this RIR is considered private" msgstr "由该RIR管理的IP地址空间被认为是私有的" -#: netbox/ipam/models/ip.py:72 netbox/netbox/navigation/menu.py:182 +#: netbox/ipam/models/ip.py:72 netbox/netbox/navigation/menu.py:188 msgid "RIRs" msgstr "区域互联网注册管理机构" -#: netbox/ipam/models/ip.py:84 +#: netbox/ipam/models/ip.py:81 msgid "IPv4 or IPv6 network" msgstr "IPv4或IPv6网络" -#: netbox/ipam/models/ip.py:91 +#: netbox/ipam/models/ip.py:88 msgid "Regional Internet Registry responsible for this IP space" msgstr "负责此IP地址空间的区域互联网注册管理机构" -#: netbox/ipam/models/ip.py:101 +#: netbox/ipam/models/ip.py:98 msgid "date added" msgstr "添加日期" -#: netbox/ipam/models/ip.py:115 +#: netbox/ipam/models/ip.py:112 msgid "aggregate" msgstr "聚合" -#: netbox/ipam/models/ip.py:116 +#: netbox/ipam/models/ip.py:113 msgid "aggregates" msgstr "聚合" -#: netbox/ipam/models/ip.py:132 +#: netbox/ipam/models/ip.py:126 msgid "Cannot create aggregate with /0 mask." msgstr "无法使用/0掩码创建聚合IP。" -#: netbox/ipam/models/ip.py:144 +#: netbox/ipam/models/ip.py:138 #, python-brace-format msgid "" "Aggregates cannot overlap. {prefix} is already covered by an existing " "aggregate ({aggregate})." msgstr "聚合不能重叠。{prefix}已被现有聚合({aggregate})包含。" -#: netbox/ipam/models/ip.py:158 +#: netbox/ipam/models/ip.py:152 #, python-brace-format msgid "" "Prefixes cannot overlap aggregates. {prefix} covers an existing aggregate " "({aggregate})." msgstr "前缀不能与聚合重叠。{prefix} 包含现有聚合({aggregate})。" -#: netbox/ipam/models/ip.py:200 netbox/ipam/models/ip.py:737 -#: netbox/vpn/models/tunnels.py:114 -msgid "role" -msgstr "角色" - -#: netbox/ipam/models/ip.py:201 +#: netbox/ipam/models/ip.py:195 msgid "roles" msgstr "角色" -#: netbox/ipam/models/ip.py:217 netbox/ipam/models/ip.py:293 +#: netbox/ipam/models/ip.py:208 netbox/ipam/models/ip.py:277 msgid "prefix" msgstr "前缀" -#: netbox/ipam/models/ip.py:218 +#: netbox/ipam/models/ip.py:209 msgid "IPv4 or IPv6 network with mask" msgstr "带掩码的IPv4或IPv6网络" -#: netbox/ipam/models/ip.py:254 +#: netbox/ipam/models/ip.py:238 msgid "Operational status of this prefix" msgstr "此前缀的操作状态" -#: netbox/ipam/models/ip.py:262 +#: netbox/ipam/models/ip.py:246 msgid "The primary function of this prefix" msgstr "此前缀的主要功能" -#: netbox/ipam/models/ip.py:265 +#: netbox/ipam/models/ip.py:249 msgid "is a pool" msgstr "地址池" -#: netbox/ipam/models/ip.py:267 +#: netbox/ipam/models/ip.py:251 msgid "All IP addresses within this prefix are considered usable" msgstr "此前缀内的所有IP地址都可用" -#: netbox/ipam/models/ip.py:270 netbox/ipam/models/ip.py:537 +#: netbox/ipam/models/ip.py:254 netbox/ipam/models/ip.py:523 msgid "mark utilized" msgstr "使用标记" -#: netbox/ipam/models/ip.py:294 +#: netbox/ipam/models/ip.py:278 msgid "prefixes" msgstr "前缀" -#: netbox/ipam/models/ip.py:317 +#: netbox/ipam/models/ip.py:298 msgid "Cannot create prefix with /0 mask." msgstr "无法创建/0掩码的IP地址前缀。" -#: netbox/ipam/models/ip.py:324 netbox/ipam/models/ip.py:874 +#: netbox/ipam/models/ip.py:305 netbox/ipam/models/ip.py:871 #, python-brace-format msgid "VRF {vrf}" msgstr "VRF {vrf}" -#: netbox/ipam/models/ip.py:324 netbox/ipam/models/ip.py:874 +#: netbox/ipam/models/ip.py:305 netbox/ipam/models/ip.py:871 msgid "global table" msgstr "全局表" -#: netbox/ipam/models/ip.py:326 +#: netbox/ipam/models/ip.py:307 #, python-brace-format msgid "Duplicate prefix found in {table}: {prefix}" msgstr "在{table}中发现重复的前缀: {prefix}" -#: netbox/ipam/models/ip.py:495 +#: netbox/ipam/models/ip.py:481 msgid "start address" msgstr "起始地址" -#: netbox/ipam/models/ip.py:496 netbox/ipam/models/ip.py:500 -#: netbox/ipam/models/ip.py:712 +#: netbox/ipam/models/ip.py:482 netbox/ipam/models/ip.py:486 +#: netbox/ipam/models/ip.py:711 msgid "IPv4 or IPv6 address (with mask)" msgstr "IPv4 或 IPv6 地址(带掩码)" -#: netbox/ipam/models/ip.py:499 +#: netbox/ipam/models/ip.py:485 msgid "end address" msgstr "结束地址" -#: netbox/ipam/models/ip.py:526 +#: netbox/ipam/models/ip.py:512 msgid "Operational status of this range" msgstr "此IP范围的操作状态" -#: netbox/ipam/models/ip.py:534 +#: netbox/ipam/models/ip.py:520 msgid "The primary function of this range" msgstr "此IP范围的主要功能" -#: netbox/ipam/models/ip.py:548 +#: netbox/ipam/models/ip.py:534 msgid "IP range" msgstr "IP范围" -#: netbox/ipam/models/ip.py:549 +#: netbox/ipam/models/ip.py:535 msgid "IP ranges" msgstr "IP范围" -#: netbox/ipam/models/ip.py:565 +#: netbox/ipam/models/ip.py:548 msgid "Starting and ending IP address versions must match" msgstr "起始和结束IP地址的版本必须一致" -#: netbox/ipam/models/ip.py:571 +#: netbox/ipam/models/ip.py:554 msgid "Starting and ending IP address masks must match" msgstr "起始和结束IP地址的掩码必须一致" -#: netbox/ipam/models/ip.py:578 +#: netbox/ipam/models/ip.py:561 #, python-brace-format msgid "" "Ending address must be greater than the starting address ({start_address})" msgstr "结束地址必须大于起始地址 ({start_address})" -#: netbox/ipam/models/ip.py:590 +#: netbox/ipam/models/ip.py:589 #, python-brace-format msgid "Defined addresses overlap with range {overlapping_range} in VRF {vrf}" msgstr "定义的地址与 VRF {vrf} 中的范围 {overlapping_range} 重叠" -#: netbox/ipam/models/ip.py:599 +#: netbox/ipam/models/ip.py:598 #, python-brace-format msgid "Defined range exceeds maximum supported size ({max_size})" msgstr "定义的范围超过了支持的最大大小 ({max_size})" -#: netbox/ipam/models/ip.py:711 netbox/tenancy/models/contacts.py:82 +#: netbox/ipam/models/ip.py:710 netbox/tenancy/models/contacts.py:77 msgid "address" msgstr "地址" -#: netbox/ipam/models/ip.py:734 +#: netbox/ipam/models/ip.py:733 msgid "The operational status of this IP" msgstr "此IP的运行状态" @@ -9983,169 +10464,190 @@ msgstr "此IP地址为外部IP" msgid "Hostname or FQDN (not case-sensitive)" msgstr "主机名或 FQDN(不区分大小写)" -#: netbox/ipam/models/ip.py:789 netbox/ipam/models/services.py:94 +#: netbox/ipam/models/ip.py:789 netbox/ipam/models/services.py:90 msgid "IP addresses" msgstr "IP地址" -#: netbox/ipam/models/ip.py:845 +#: netbox/ipam/models/ip.py:842 msgid "Cannot create IP address with /0 mask." msgstr "无法创建/0掩码的IP地址。" -#: netbox/ipam/models/ip.py:851 +#: netbox/ipam/models/ip.py:848 #, python-brace-format msgid "{ip} is a network ID, which may not be assigned to an interface." msgstr "{ip}是一个网络号,不能分配给接口。" -#: netbox/ipam/models/ip.py:862 +#: netbox/ipam/models/ip.py:859 #, python-brace-format msgid "" "{ip} is a broadcast address, which may not be assigned to an interface." msgstr "{ip}是一个广播地址,不能分配给接口。" -#: netbox/ipam/models/ip.py:876 +#: netbox/ipam/models/ip.py:873 #, python-brace-format msgid "Duplicate IP address found in {table}: {ipaddress}" msgstr "在 {table}中发现重复的IP地址: {ipaddress}" -#: netbox/ipam/models/ip.py:897 +#: netbox/ipam/models/ip.py:896 msgid "" "Cannot reassign IP address while it is designated as the primary IP for the " "parent object" msgstr "当 IP 地址被指定为父对象的首选 IP 时,无法重新分配 IP 地址" -#: netbox/ipam/models/ip.py:903 +#: netbox/ipam/models/ip.py:902 msgid "Only IPv6 addresses can be assigned SLAAC status" msgstr "只能为IPv6地址分配SLAAC状态" -#: netbox/ipam/models/services.py:33 +#: netbox/ipam/models/services.py:32 msgid "port numbers" msgstr "端口号" -#: netbox/ipam/models/services.py:59 +#: netbox/ipam/models/services.py:58 msgid "service template" msgstr "服务模版" -#: netbox/ipam/models/services.py:60 +#: netbox/ipam/models/services.py:59 msgid "service templates" msgstr "服务模板" -#: netbox/ipam/models/services.py:95 +#: netbox/ipam/models/services.py:91 msgid "The specific IP addresses (if any) to which this service is bound" msgstr "此服务绑定到的特定IP地址(如果有)" -#: netbox/ipam/models/services.py:102 +#: netbox/ipam/models/services.py:98 msgid "service" msgstr "服务" -#: netbox/ipam/models/services.py:103 +#: netbox/ipam/models/services.py:99 msgid "services" msgstr "服务" -#: netbox/ipam/models/services.py:117 +#: netbox/ipam/models/services.py:110 msgid "" "A service cannot be associated with both a device and a virtual machine." msgstr "服务不能同时与设备和虚拟机相关联。" -#: netbox/ipam/models/services.py:119 +#: netbox/ipam/models/services.py:112 msgid "" "A service must be associated with either a device or a virtual machine." msgstr "服务必须与设备或虚拟机相关联。" -#: netbox/ipam/models/vlans.py:85 +#: netbox/ipam/models/vlans.py:87 msgid "VLAN groups" msgstr "VLAN 组" -#: netbox/ipam/models/vlans.py:95 +#: netbox/ipam/models/vlans.py:94 msgid "Cannot set scope_type without scope_id." msgstr "没有作用域id,无法设置作用域。" -#: netbox/ipam/models/vlans.py:97 +#: netbox/ipam/models/vlans.py:96 msgid "Cannot set scope_id without scope_type." msgstr "没有作用域类型,无法设置作用域。" -#: netbox/ipam/models/vlans.py:105 +#: netbox/ipam/models/vlans.py:104 #, python-brace-format msgid "Starting VLAN ID in range ({value}) cannot be less than {minimum}" msgstr "范围内的起始 VLAN ID ({value}) 不能小于 {minimum}" -#: netbox/ipam/models/vlans.py:111 +#: netbox/ipam/models/vlans.py:110 #, python-brace-format msgid "Ending VLAN ID in range ({value}) cannot exceed {maximum}" msgstr "在范围内结束 VLAN ID ({value}) 不能超过 {maximum}" -#: netbox/ipam/models/vlans.py:118 +#: netbox/ipam/models/vlans.py:117 #, python-brace-format msgid "" "Ending VLAN ID in range must be greater than or equal to the starting VLAN " "ID ({range})" msgstr "范围内的结束 VLAN ID 必须大于或等于起始 VLAN ID ({range})" -#: netbox/ipam/models/vlans.py:124 +#: netbox/ipam/models/vlans.py:123 msgid "Ranges cannot overlap." msgstr "范围不能重叠。" -#: netbox/ipam/models/vlans.py:181 +#: netbox/ipam/models/vlans.py:180 msgid "The specific site to which this VLAN is assigned (if any)" msgstr "此VLAN所属的站点(如果有)" -#: netbox/ipam/models/vlans.py:189 +#: netbox/ipam/models/vlans.py:188 msgid "VLAN group (optional)" msgstr "VLAN组(可选)" -#: netbox/ipam/models/vlans.py:197 +#: netbox/ipam/models/vlans.py:196 netbox/ipam/models/vlans.py:368 +#: netbox/ipam/models/vlans.py:376 msgid "Numeric VLAN ID (1-4094)" msgstr "VLAN ID(1-4094)" -#: netbox/ipam/models/vlans.py:215 +#: netbox/ipam/models/vlans.py:214 msgid "Operational status of this VLAN" msgstr "此VLAN的操作状态" -#: netbox/ipam/models/vlans.py:223 +#: netbox/ipam/models/vlans.py:222 msgid "The primary function of this VLAN" msgstr "此VLAN的主要功能" -#: netbox/ipam/models/vlans.py:266 +#: netbox/ipam/models/vlans.py:237 +msgid "Customer/service VLAN designation (for Q-in-Q/IEEE 802.1ad)" +msgstr "客户/服务 VLAN 指定(适用于 q-in-q/IEEE 802.1ad)" + +#: netbox/ipam/models/vlans.py:285 #, python-brace-format msgid "" "VLAN is assigned to group {group} (scope: {scope}); cannot also assign to " "site {site}." msgstr "VLAN 已分配给组 {group}(作用域:{scope}); 不能再分配给站点:{site}。" -#: netbox/ipam/models/vlans.py:275 +#: netbox/ipam/models/vlans.py:294 #, python-brace-format msgid "VID must be in ranges {ranges} for VLANs in group {group}" msgstr "VID 必须在范围内 {ranges} 对于组中的 VLAN {group}" -#: netbox/ipam/models/vrfs.py:30 +#: netbox/ipam/models/vlans.py:301 +msgid "Only Q-in-Q customer VLANs maybe assigned to a service VLAN." +msgstr "只能将 Q-in-Q 客户 VLAN 分配给服务 VLAN。" + +#: netbox/ipam/models/vlans.py:307 +msgid "A Q-in-Q customer VLAN must be assigned to a service VLAN." +msgstr "必须将 Q-in-Q 客户 VLAN 分配给服务 VLAN。" + +#: netbox/ipam/models/vlans.py:344 +msgid "VLAN translation policies" +msgstr "VLAN 转换策略" + +#: netbox/ipam/models/vlans.py:385 +msgid "VLAN translation rule" +msgstr "VLAN 转换规则" + +#: netbox/ipam/models/vrfs.py:29 msgid "route distinguisher" msgstr "路由区分符" -#: netbox/ipam/models/vrfs.py:31 +#: netbox/ipam/models/vrfs.py:30 msgid "Unique route distinguisher (as defined in RFC 4364)" msgstr "唯一的路由区分符(如 RFC 4364 中定义)" -#: netbox/ipam/models/vrfs.py:42 +#: netbox/ipam/models/vrfs.py:41 msgid "enforce unique space" msgstr "强制使用唯一空间" -#: netbox/ipam/models/vrfs.py:43 +#: netbox/ipam/models/vrfs.py:42 msgid "Prevent duplicate prefixes/IP addresses within this VRF" msgstr "防止此 VRF 内出现重复的前缀/IP 地址" -#: netbox/ipam/models/vrfs.py:63 netbox/netbox/navigation/menu.py:186 -#: netbox/netbox/navigation/menu.py:188 +#: netbox/ipam/models/vrfs.py:62 netbox/netbox/navigation/menu.py:192 +#: netbox/netbox/navigation/menu.py:194 msgid "VRFs" msgstr "VRFs" -#: netbox/ipam/models/vrfs.py:82 +#: netbox/ipam/models/vrfs.py:78 msgid "Route target value (formatted in accordance with RFC 4360)" msgstr "RT值(按照 RFC 4360 格式)" -#: netbox/ipam/models/vrfs.py:94 +#: netbox/ipam/models/vrfs.py:91 msgid "route target" msgstr "路由目标" -#: netbox/ipam/models/vrfs.py:95 +#: netbox/ipam/models/vrfs.py:92 msgid "route targets" msgstr "路由目标" @@ -10161,84 +10663,101 @@ msgstr "站点统计" msgid "Provider Count" msgstr "运营商统计" -#: netbox/ipam/tables/ip.py:95 netbox/netbox/navigation/menu.py:179 -#: netbox/netbox/navigation/menu.py:181 +#: netbox/ipam/tables/ip.py:41 netbox/netbox/navigation/menu.py:185 +#: netbox/netbox/navigation/menu.py:187 msgid "Aggregates" msgstr "聚合" -#: netbox/ipam/tables/ip.py:125 +#: netbox/ipam/tables/ip.py:71 msgid "Added" msgstr "已添加" -#: netbox/ipam/tables/ip.py:128 netbox/ipam/tables/ip.py:166 -#: netbox/ipam/tables/vlans.py:142 netbox/ipam/views.py:346 -#: netbox/netbox/navigation/menu.py:165 netbox/netbox/navigation/menu.py:167 -#: netbox/templates/ipam/vlan.html:84 +#: netbox/ipam/tables/ip.py:74 netbox/ipam/tables/ip.py:112 +#: netbox/ipam/tables/vlans.py:118 netbox/ipam/views.py:373 +#: netbox/netbox/navigation/menu.py:171 netbox/netbox/navigation/menu.py:173 +#: netbox/templates/ipam/vlan.html:100 msgid "Prefixes" msgstr "前缀" -#: netbox/ipam/tables/ip.py:131 netbox/ipam/tables/ip.py:270 -#: netbox/ipam/tables/ip.py:324 netbox/ipam/tables/vlans.py:86 +#: netbox/ipam/tables/ip.py:77 netbox/ipam/tables/ip.py:221 +#: netbox/ipam/tables/ip.py:276 netbox/ipam/tables/vlans.py:55 #: netbox/templates/dcim/device.html:260 #: netbox/templates/ipam/aggregate.html:24 -#: netbox/templates/ipam/iprange.html:29 netbox/templates/ipam/prefix.html:106 +#: netbox/templates/ipam/iprange.html:29 netbox/templates/ipam/prefix.html:102 msgid "Utilization" msgstr "利用率" -#: netbox/ipam/tables/ip.py:171 netbox/netbox/navigation/menu.py:161 +#: netbox/ipam/tables/ip.py:117 netbox/netbox/navigation/menu.py:167 msgid "IP Ranges" msgstr "IP范围" -#: netbox/ipam/tables/ip.py:221 +#: netbox/ipam/tables/ip.py:167 msgid "Prefix (Flat)" msgstr "前缀(标记)" -#: netbox/ipam/tables/ip.py:225 +#: netbox/ipam/tables/ip.py:171 msgid "Depth" msgstr "深度" -#: netbox/ipam/tables/ip.py:262 +#: netbox/ipam/tables/ip.py:191 netbox/ipam/tables/vlans.py:37 +#: netbox/virtualization/tables/clusters.py:77 +#: netbox/wireless/tables/wirelesslan.py:55 +msgid "Scope Type" +msgstr "作用域类型" + +#: netbox/ipam/tables/ip.py:213 msgid "Pool" msgstr "地址池" -#: netbox/ipam/tables/ip.py:266 netbox/ipam/tables/ip.py:320 +#: netbox/ipam/tables/ip.py:217 netbox/ipam/tables/ip.py:272 msgid "Marked Utilized" msgstr "标记为已使用" -#: netbox/ipam/tables/ip.py:304 +#: netbox/ipam/tables/ip.py:256 msgid "Start address" msgstr "起始地址" -#: netbox/ipam/tables/ip.py:383 +#: netbox/ipam/tables/ip.py:335 msgid "NAT (Inside)" msgstr "NAT (内部地址)" -#: netbox/ipam/tables/ip.py:388 +#: netbox/ipam/tables/ip.py:340 msgid "NAT (Outside)" msgstr "NAT (外部地址)" -#: netbox/ipam/tables/ip.py:393 +#: netbox/ipam/tables/ip.py:345 msgid "Assigned" msgstr "分配" -#: netbox/ipam/tables/ip.py:429 netbox/templates/vpn/l2vpntermination.html:16 +#: netbox/ipam/tables/ip.py:381 netbox/templates/vpn/l2vpntermination.html:16 #: netbox/vpn/forms/filtersets.py:240 msgid "Assigned Object" msgstr "指定对象" -#: netbox/ipam/tables/vlans.py:68 -msgid "Scope Type" -msgstr "作用域类型" - -#: netbox/ipam/tables/vlans.py:76 +#: netbox/ipam/tables/vlans.py:45 msgid "VID Ranges" msgstr "VID 范围" -#: netbox/ipam/tables/vlans.py:111 netbox/ipam/tables/vlans.py:214 +#: netbox/ipam/tables/vlans.py:80 netbox/ipam/tables/vlans.py:190 #: netbox/templates/dcim/inc/interface_vlans_table.html:4 msgid "VID" msgstr "VLAN号" +#: netbox/ipam/tables/vlans.py:237 +#: netbox/templates/ipam/vlantranslationpolicy.html:22 +msgid "Rules" +msgstr "规则" + +#: netbox/ipam/tables/vlans.py:260 +#: netbox/templates/ipam/vlantranslationrule.html:18 +msgid "Local VID" +msgstr "本地视频" + +#: netbox/ipam/tables/vlans.py:264 +#: netbox/templates/ipam/vlantranslationrule.html:22 +msgid "Remote VID" +msgstr "远程 VID" + #: netbox/ipam/tables/vrfs.py:30 msgid "RD" msgstr "RD" @@ -10276,23 +10795,23 @@ msgid "" "are allowed in DNS names" msgstr "DNS 名称中仅允许使用字母数字字符、星号、连字符、句点和下划线" -#: netbox/ipam/views.py:533 +#: netbox/ipam/views.py:570 msgid "Child Prefixes" msgstr "下级前缀" -#: netbox/ipam/views.py:569 +#: netbox/ipam/views.py:606 msgid "Child Ranges" msgstr "子类地址访问" -#: netbox/ipam/views.py:898 +#: netbox/ipam/views.py:958 msgid "Related IPs" msgstr "关联IP" -#: netbox/ipam/views.py:1127 +#: netbox/ipam/views.py:1315 msgid "Device Interfaces" msgstr "设备接口" -#: netbox/ipam/views.py:1145 +#: netbox/ipam/views.py:1333 msgid "VM Interfaces" msgstr "VM接口" @@ -10338,90 +10857,112 @@ msgstr "{class_name} 必须实现 get_view_name ()" msgid "Invalid permission {permission} for model {model}" msgstr "模型{model}的权限{permission}无效" -#: netbox/netbox/choices.py:49 +#: netbox/netbox/choices.py:51 msgid "Dark Red" msgstr "深红" -#: netbox/netbox/choices.py:52 +#: netbox/netbox/choices.py:54 msgid "Rose" msgstr "玫瑰红" -#: netbox/netbox/choices.py:53 +#: netbox/netbox/choices.py:55 msgid "Fuchsia" msgstr "紫红色" -#: netbox/netbox/choices.py:55 +#: netbox/netbox/choices.py:57 msgid "Dark Purple" msgstr "深紫色" -#: netbox/netbox/choices.py:58 +#: netbox/netbox/choices.py:60 msgid "Light Blue" msgstr "浅蓝色" -#: netbox/netbox/choices.py:61 +#: netbox/netbox/choices.py:63 msgid "Aqua" msgstr "水绿色" -#: netbox/netbox/choices.py:62 +#: netbox/netbox/choices.py:64 msgid "Dark Green" msgstr "深绿色" -#: netbox/netbox/choices.py:64 +#: netbox/netbox/choices.py:66 msgid "Light Green" msgstr "浅绿色" -#: netbox/netbox/choices.py:65 +#: netbox/netbox/choices.py:67 msgid "Lime" msgstr "草绿色" -#: netbox/netbox/choices.py:67 +#: netbox/netbox/choices.py:69 msgid "Amber" msgstr "琥珀色" -#: netbox/netbox/choices.py:69 +#: netbox/netbox/choices.py:71 msgid "Dark Orange" msgstr "深橙色" -#: netbox/netbox/choices.py:70 +#: netbox/netbox/choices.py:72 msgid "Brown" msgstr "棕色" -#: netbox/netbox/choices.py:71 +#: netbox/netbox/choices.py:73 msgid "Light Grey" msgstr "浅灰色" -#: netbox/netbox/choices.py:72 +#: netbox/netbox/choices.py:74 msgid "Grey" msgstr "灰色" -#: netbox/netbox/choices.py:73 +#: netbox/netbox/choices.py:75 msgid "Dark Grey" msgstr "深灰色" -#: netbox/netbox/choices.py:128 +#: netbox/netbox/choices.py:103 netbox/templates/extras/script_result.html:56 +msgid "Default" +msgstr "默认" + +#: netbox/netbox/choices.py:130 msgid "Direct" msgstr "直连" -#: netbox/netbox/choices.py:129 +#: netbox/netbox/choices.py:131 msgid "Upload" msgstr "上传" -#: netbox/netbox/choices.py:141 netbox/netbox/choices.py:155 +#: netbox/netbox/choices.py:143 netbox/netbox/choices.py:157 msgid "Auto-detect" msgstr "自动检测" -#: netbox/netbox/choices.py:156 +#: netbox/netbox/choices.py:158 msgid "Comma" msgstr "逗号" -#: netbox/netbox/choices.py:157 +#: netbox/netbox/choices.py:159 msgid "Semicolon" msgstr "分号" -#: netbox/netbox/choices.py:158 +#: netbox/netbox/choices.py:160 msgid "Tab" msgstr "Tab" +#: netbox/netbox/choices.py:193 netbox/templates/dcim/device.html:327 +#: netbox/templates/dcim/rack.html:107 +msgid "Kilograms" +msgstr "千克" + +#: netbox/netbox/choices.py:194 +msgid "Grams" +msgstr "克" + +#: netbox/netbox/choices.py:195 netbox/templates/dcim/device.html:328 +#: netbox/templates/dcim/rack.html:108 +msgid "Pounds" +msgstr "磅" + +#: netbox/netbox/choices.py:196 +msgid "Ounces" +msgstr "盎司" + #: netbox/netbox/config/__init__.py:67 #, python-brace-format msgid "Invalid configuration parameter: {item}" @@ -10704,6 +11245,26 @@ msgstr "数据已同步" msgid "{class_name} must implement a sync_data() method." msgstr "{class_name}必须包含sync_data()方法。" +#: netbox/netbox/models/mixins.py:22 +msgid "weight unit" +msgstr "重量单位" + +#: netbox/netbox/models/mixins.py:52 +msgid "Must specify a unit when setting a weight" +msgstr "设置重量时必须指定单位" + +#: netbox/netbox/models/mixins.py:57 +msgid "distance" +msgstr "距离" + +#: netbox/netbox/models/mixins.py:64 +msgid "distance unit" +msgstr "距离单位" + +#: netbox/netbox/models/mixins.py:99 +msgid "Must specify a unit when setting a distance" +msgstr "设置距离时必须指定单位" + #: netbox/netbox/navigation/menu.py:11 msgid "Organization" msgstr "组织机构" @@ -10737,10 +11298,6 @@ msgstr "机柜角色" msgid "Elevations" msgstr "机柜立面图" -#: netbox/netbox/navigation/menu.py:60 netbox/netbox/navigation/menu.py:62 -msgid "Rack Types" -msgstr "机架类型" - #: netbox/netbox/navigation/menu.py:76 msgid "Modules" msgstr "设备板卡" @@ -10763,175 +11320,200 @@ msgstr "设备详情" msgid "Inventory Item Roles" msgstr "库存物品分类" -#: netbox/netbox/navigation/menu.py:111 netbox/netbox/navigation/menu.py:115 +#: netbox/netbox/navigation/menu.py:110 +#: netbox/templates/dcim/interface.html:413 +#: netbox/templates/virtualization/vminterface.html:118 +msgid "MAC Addresses" +msgstr "MAC 地址" + +#: netbox/netbox/navigation/menu.py:117 netbox/netbox/navigation/menu.py:121 +#: netbox/templates/dcim/interface.html:182 msgid "Connections" msgstr "连接" -#: netbox/netbox/navigation/menu.py:117 +#: netbox/netbox/navigation/menu.py:123 msgid "Cables" msgstr "链路" -#: netbox/netbox/navigation/menu.py:118 +#: netbox/netbox/navigation/menu.py:124 msgid "Wireless Links" msgstr "无线连接" -#: netbox/netbox/navigation/menu.py:121 +#: netbox/netbox/navigation/menu.py:127 msgid "Interface Connections" msgstr "接口连接" -#: netbox/netbox/navigation/menu.py:126 +#: netbox/netbox/navigation/menu.py:132 msgid "Console Connections" msgstr "Console 连接" -#: netbox/netbox/navigation/menu.py:131 +#: netbox/netbox/navigation/menu.py:137 msgid "Power Connections" msgstr "电源连接" -#: netbox/netbox/navigation/menu.py:147 +#: netbox/netbox/navigation/menu.py:153 msgid "Wireless LAN Groups" msgstr "无线局域网组" -#: netbox/netbox/navigation/menu.py:168 +#: netbox/netbox/navigation/menu.py:174 msgid "Prefix & VLAN Roles" msgstr "前缀和VLAN角色" -#: netbox/netbox/navigation/menu.py:174 +#: netbox/netbox/navigation/menu.py:180 msgid "ASN Ranges" msgstr "ASN 范围" -#: netbox/netbox/navigation/menu.py:196 +#: netbox/netbox/navigation/menu.py:202 msgid "VLAN Groups" msgstr "VLAN 组" #: netbox/netbox/navigation/menu.py:203 +msgid "VLAN Translation Policies" +msgstr "VLAN 转换策略" + +#: netbox/netbox/navigation/menu.py:204 +#: netbox/templates/ipam/vlantranslationpolicy.html:46 +msgid "VLAN Translation Rules" +msgstr "VLAN 转换规则" + +#: netbox/netbox/navigation/menu.py:211 msgid "Service Templates" msgstr "服务模版" -#: netbox/netbox/navigation/menu.py:204 netbox/templates/dcim/device.html:302 +#: netbox/netbox/navigation/menu.py:212 netbox/templates/dcim/device.html:302 #: netbox/templates/ipam/ipaddress.html:118 #: netbox/templates/virtualization/virtualmachine.html:154 msgid "Services" msgstr "服务" -#: netbox/netbox/navigation/menu.py:211 +#: netbox/netbox/navigation/menu.py:219 msgid "VPN" msgstr "VPN" -#: netbox/netbox/navigation/menu.py:215 netbox/netbox/navigation/menu.py:217 +#: netbox/netbox/navigation/menu.py:223 netbox/netbox/navigation/menu.py:225 #: netbox/vpn/tables/tunnels.py:24 msgid "Tunnels" msgstr "隧道" -#: netbox/netbox/navigation/menu.py:218 +#: netbox/netbox/navigation/menu.py:226 #: netbox/templates/vpn/tunnelgroup.html:8 msgid "Tunnel Groups" msgstr "隧道组" -#: netbox/netbox/navigation/menu.py:219 +#: netbox/netbox/navigation/menu.py:227 msgid "Tunnel Terminations" msgstr "隧道终端" -#: netbox/netbox/navigation/menu.py:223 netbox/netbox/navigation/menu.py:225 +#: netbox/netbox/navigation/menu.py:231 netbox/netbox/navigation/menu.py:233 #: netbox/vpn/models/l2vpn.py:64 msgid "L2VPNs" msgstr "L2VPN" -#: netbox/netbox/navigation/menu.py:226 netbox/templates/vpn/l2vpn.html:56 -#: netbox/templates/vpn/tunnel.html:72 netbox/vpn/tables/tunnels.py:58 -msgid "Terminations" -msgstr "终端" - -#: netbox/netbox/navigation/menu.py:232 +#: netbox/netbox/navigation/menu.py:240 msgid "IKE Proposals" msgstr "IKE 协议提案" -#: netbox/netbox/navigation/menu.py:233 +#: netbox/netbox/navigation/menu.py:241 #: netbox/templates/vpn/ikeproposal.html:41 msgid "IKE Policies" msgstr "IKE策略" -#: netbox/netbox/navigation/menu.py:234 +#: netbox/netbox/navigation/menu.py:242 msgid "IPSec Proposals" msgstr "IPSec 协议提案" -#: netbox/netbox/navigation/menu.py:235 +#: netbox/netbox/navigation/menu.py:243 #: netbox/templates/vpn/ipsecproposal.html:37 msgid "IPSec Policies" msgstr "IPSec策略" -#: netbox/netbox/navigation/menu.py:236 netbox/templates/vpn/ikepolicy.html:38 +#: netbox/netbox/navigation/menu.py:244 netbox/templates/vpn/ikepolicy.html:38 #: netbox/templates/vpn/ipsecpolicy.html:25 msgid "IPSec Profiles" msgstr "IPSec 配置文件" -#: netbox/netbox/navigation/menu.py:251 +#: netbox/netbox/navigation/menu.py:259 #: netbox/templates/virtualization/virtualmachine.html:174 #: netbox/templates/virtualization/virtualmachine/base.html:32 #: netbox/templates/virtualization/virtualmachine_list.html:21 -#: netbox/virtualization/tables/virtualmachines.py:104 -#: netbox/virtualization/views.py:386 +#: netbox/virtualization/tables/virtualmachines.py:74 +#: netbox/virtualization/views.py:403 msgid "Virtual Disks" msgstr "虚拟磁盘" -#: netbox/netbox/navigation/menu.py:258 +#: netbox/netbox/navigation/menu.py:266 msgid "Cluster Types" msgstr "集群类型" -#: netbox/netbox/navigation/menu.py:259 +#: netbox/netbox/navigation/menu.py:267 msgid "Cluster Groups" msgstr "集群组" -#: netbox/netbox/navigation/menu.py:273 +#: netbox/netbox/navigation/menu.py:281 msgid "Circuit Types" msgstr "链路类型" -#: netbox/netbox/navigation/menu.py:274 -msgid "Circuit Groups" -msgstr "电路组" - -#: netbox/netbox/navigation/menu.py:275 -#: netbox/templates/circuits/circuit.html:66 -msgid "Group Assignments" -msgstr "小组作业" - -#: netbox/netbox/navigation/menu.py:276 +#: netbox/netbox/navigation/menu.py:282 msgid "Circuit Terminations" msgstr "链路终端" -#: netbox/netbox/navigation/menu.py:280 netbox/netbox/navigation/menu.py:282 +#: netbox/netbox/navigation/menu.py:286 netbox/netbox/navigation/menu.py:288 +#: netbox/templates/circuits/providernetwork.html:55 +msgid "Virtual Circuits" +msgstr "虚拟电路" + +#: netbox/netbox/navigation/menu.py:289 +msgid "Virtual Circuit Types" +msgstr "虚拟电路类型" + +#: netbox/netbox/navigation/menu.py:290 +msgid "Virtual Circuit Terminations" +msgstr "虚拟电路终端" + +#: netbox/netbox/navigation/menu.py:296 +msgid "Circuit Groups" +msgstr "电路组" + +#: netbox/netbox/navigation/menu.py:297 +#: netbox/templates/circuits/circuit.html:76 +#: netbox/templates/circuits/virtualcircuit.html:69 +msgid "Group Assignments" +msgstr "小组作业" + +#: netbox/netbox/navigation/menu.py:301 netbox/netbox/navigation/menu.py:303 msgid "Providers" msgstr "运营商" -#: netbox/netbox/navigation/menu.py:283 +#: netbox/netbox/navigation/menu.py:304 #: netbox/templates/circuits/provider.html:51 msgid "Provider Accounts" msgstr "运营商账户" -#: netbox/netbox/navigation/menu.py:284 +#: netbox/netbox/navigation/menu.py:305 msgid "Provider Networks" msgstr "运营商网络" -#: netbox/netbox/navigation/menu.py:298 +#: netbox/netbox/navigation/menu.py:319 msgid "Power Panels" msgstr "电源面板" -#: netbox/netbox/navigation/menu.py:309 +#: netbox/netbox/navigation/menu.py:330 msgid "Configurations" msgstr "配置" -#: netbox/netbox/navigation/menu.py:311 +#: netbox/netbox/navigation/menu.py:332 msgid "Config Contexts" msgstr "配置实例" -#: netbox/netbox/navigation/menu.py:312 +#: netbox/netbox/navigation/menu.py:333 msgid "Config Templates" msgstr "配置模板" -#: netbox/netbox/navigation/menu.py:319 netbox/netbox/navigation/menu.py:323 +#: netbox/netbox/navigation/menu.py:340 netbox/netbox/navigation/menu.py:344 msgid "Customization" msgstr "自定义" -#: netbox/netbox/navigation/menu.py:325 +#: netbox/netbox/navigation/menu.py:346 #: netbox/templates/dcim/device_edit.html:103 #: netbox/templates/dcim/htmx/cable_edit.html:81 #: netbox/templates/dcim/virtualchassis_add.html:31 @@ -10940,96 +11522,96 @@ msgstr "自定义" #: netbox/templates/htmx/form.html:19 netbox/templates/inc/filter_list.html:30 #: netbox/templates/inc/panels/custom_fields.html:7 #: netbox/templates/ipam/ipaddress_bulk_add.html:35 -#: netbox/templates/ipam/vlan_edit.html:59 +#: netbox/templates/ipam/vlan_edit.html:67 msgid "Custom Fields" msgstr "自定义字段" -#: netbox/netbox/navigation/menu.py:326 +#: netbox/netbox/navigation/menu.py:347 msgid "Custom Field Choices" msgstr "自定义字段选项" -#: netbox/netbox/navigation/menu.py:327 +#: netbox/netbox/navigation/menu.py:348 msgid "Custom Links" msgstr "自定义链接" -#: netbox/netbox/navigation/menu.py:328 +#: netbox/netbox/navigation/menu.py:349 msgid "Export Templates" msgstr "导出模板" -#: netbox/netbox/navigation/menu.py:329 +#: netbox/netbox/navigation/menu.py:350 msgid "Saved Filters" msgstr "已保存的过滤器" -#: netbox/netbox/navigation/menu.py:331 +#: netbox/netbox/navigation/menu.py:352 msgid "Image Attachments" msgstr "图片附件" -#: netbox/netbox/navigation/menu.py:349 +#: netbox/netbox/navigation/menu.py:370 msgid "Operations" msgstr "操作" -#: netbox/netbox/navigation/menu.py:353 +#: netbox/netbox/navigation/menu.py:374 msgid "Integrations" msgstr "系统集成" -#: netbox/netbox/navigation/menu.py:355 +#: netbox/netbox/navigation/menu.py:376 msgid "Data Sources" msgstr "数据源" -#: netbox/netbox/navigation/menu.py:356 +#: netbox/netbox/navigation/menu.py:377 msgid "Event Rules" msgstr "事件规则" -#: netbox/netbox/navigation/menu.py:357 +#: netbox/netbox/navigation/menu.py:378 msgid "Webhooks" msgstr "Webhook" -#: netbox/netbox/navigation/menu.py:361 netbox/netbox/navigation/menu.py:365 -#: netbox/netbox/views/generic/feature_views.py:153 +#: netbox/netbox/navigation/menu.py:382 netbox/netbox/navigation/menu.py:386 +#: netbox/netbox/views/generic/feature_views.py:158 #: netbox/templates/extras/report/base.html:37 #: netbox/templates/extras/script/base.html:36 msgid "Jobs" msgstr "任务" -#: netbox/netbox/navigation/menu.py:371 +#: netbox/netbox/navigation/menu.py:392 msgid "Logging" msgstr "日志" -#: netbox/netbox/navigation/menu.py:373 +#: netbox/netbox/navigation/menu.py:394 msgid "Notification Groups" msgstr "通知组" -#: netbox/netbox/navigation/menu.py:374 +#: netbox/netbox/navigation/menu.py:395 msgid "Journal Entries" msgstr "日志条目" -#: netbox/netbox/navigation/menu.py:375 +#: netbox/netbox/navigation/menu.py:396 #: netbox/templates/core/objectchange.html:9 #: netbox/templates/core/objectchange_list.html:4 msgid "Change Log" msgstr "修改日志" -#: netbox/netbox/navigation/menu.py:382 netbox/templates/inc/user_menu.html:29 +#: netbox/netbox/navigation/menu.py:403 netbox/templates/inc/user_menu.html:29 msgid "Admin" msgstr "管理员" -#: netbox/netbox/navigation/menu.py:430 netbox/templates/account/base.html:27 -#: netbox/templates/inc/user_menu.html:57 +#: netbox/netbox/navigation/menu.py:451 netbox/templates/account/base.html:27 +#: netbox/templates/inc/user_menu.html:52 msgid "API Tokens" msgstr "API Token" -#: netbox/netbox/navigation/menu.py:437 netbox/users/forms/model_forms.py:187 +#: netbox/netbox/navigation/menu.py:458 netbox/users/forms/model_forms.py:187 #: netbox/users/forms/model_forms.py:195 netbox/users/forms/model_forms.py:242 #: netbox/users/forms/model_forms.py:249 msgid "Permissions" msgstr "权限" -#: netbox/netbox/navigation/menu.py:445 netbox/netbox/navigation/menu.py:449 +#: netbox/netbox/navigation/menu.py:466 netbox/netbox/navigation/menu.py:470 #: netbox/templates/core/system.html:7 msgid "System" msgstr "系统" -#: netbox/netbox/navigation/menu.py:454 netbox/netbox/navigation/menu.py:502 +#: netbox/netbox/navigation/menu.py:475 netbox/netbox/navigation/menu.py:523 #: netbox/templates/500.html:35 netbox/templates/account/preferences.html:22 #: netbox/templates/core/plugin.html:13 #: netbox/templates/core/plugin_list.html:7 @@ -11037,53 +11619,53 @@ msgstr "系统" msgid "Plugins" msgstr "插件" -#: netbox/netbox/navigation/menu.py:459 +#: netbox/netbox/navigation/menu.py:480 msgid "Configuration History" msgstr "配置历史记录" -#: netbox/netbox/navigation/menu.py:465 netbox/templates/core/rq_task.html:8 +#: netbox/netbox/navigation/menu.py:486 netbox/templates/core/rq_task.html:8 #: netbox/templates/core/rq_task_list.html:22 msgid "Background Tasks" msgstr "后台任务" -#: netbox/netbox/plugins/navigation.py:47 -#: netbox/netbox/plugins/navigation.py:69 +#: netbox/netbox/plugins/navigation.py:48 +#: netbox/netbox/plugins/navigation.py:70 msgid "Permissions must be passed as a tuple or list." msgstr "权限必须以元组或列表的形式传递。" -#: netbox/netbox/plugins/navigation.py:51 +#: netbox/netbox/plugins/navigation.py:52 msgid "Buttons must be passed as a tuple or list." msgstr "按钮必须作为元组或列表传递。" -#: netbox/netbox/plugins/navigation.py:73 +#: netbox/netbox/plugins/navigation.py:74 msgid "Button color must be a choice within ButtonColorChoices." msgstr "按钮颜色必须是颜色可选项中的一个。" -#: netbox/netbox/plugins/registration.py:25 +#: netbox/netbox/plugins/registration.py:26 #, python-brace-format msgid "" "PluginTemplateExtension class {template_extension} was passed as an " "instance!" msgstr "PluginTemplateExtension类{template_extension}已作为实例传递!" -#: netbox/netbox/plugins/registration.py:31 +#: netbox/netbox/plugins/registration.py:32 #, python-brace-format msgid "" "{template_extension} is not a subclass of " "netbox.plugins.PluginTemplateExtension!" msgstr "{template_extension} 不是netbox.plugins.PluginTemplateExtension的子类。" -#: netbox/netbox/plugins/registration.py:51 +#: netbox/netbox/plugins/registration.py:57 #, python-brace-format msgid "{item} must be an instance of netbox.plugins.PluginMenuItem" msgstr "{item} 必须是netbox.plugins.PluginMenuItem的实例。" -#: netbox/netbox/plugins/registration.py:62 +#: netbox/netbox/plugins/registration.py:68 #, python-brace-format msgid "{menu_link} must be an instance of netbox.plugins.PluginMenuItem" msgstr "{menu_link} 必须是netbox.plugins.PluginMenuItem的实例。" -#: netbox/netbox/plugins/registration.py:67 +#: netbox/netbox/plugins/registration.py:73 #, python-brace-format msgid "{button} must be an instance of netbox.plugins.PluginMenuButton" msgstr "{button}必须是netbox.plugins.PluginMenuButton的实例。" @@ -11165,93 +11747,93 @@ msgstr "初始化后无法在注册表中添加存储空间" msgid "Cannot delete stores from registry" msgstr "无法从注册表中删除存储" -#: netbox/netbox/settings.py:760 +#: netbox/netbox/settings.py:752 msgid "Czech" msgstr "捷克语" -#: netbox/netbox/settings.py:761 +#: netbox/netbox/settings.py:753 msgid "Danish" msgstr "丹麦语" -#: netbox/netbox/settings.py:762 +#: netbox/netbox/settings.py:754 msgid "German" msgstr "德语" -#: netbox/netbox/settings.py:763 +#: netbox/netbox/settings.py:755 msgid "English" msgstr "英语" -#: netbox/netbox/settings.py:764 +#: netbox/netbox/settings.py:756 msgid "Spanish" msgstr "西班牙语" -#: netbox/netbox/settings.py:765 +#: netbox/netbox/settings.py:757 msgid "French" msgstr "法语" -#: netbox/netbox/settings.py:766 +#: netbox/netbox/settings.py:758 msgid "Italian" msgstr "意大利语" -#: netbox/netbox/settings.py:767 +#: netbox/netbox/settings.py:759 msgid "Japanese" msgstr "日语" -#: netbox/netbox/settings.py:768 +#: netbox/netbox/settings.py:760 msgid "Dutch" msgstr "荷兰语" -#: netbox/netbox/settings.py:769 +#: netbox/netbox/settings.py:761 msgid "Polish" msgstr "波兰语" -#: netbox/netbox/settings.py:770 +#: netbox/netbox/settings.py:762 msgid "Portuguese" msgstr "葡萄牙语" -#: netbox/netbox/settings.py:771 +#: netbox/netbox/settings.py:763 msgid "Russian" msgstr "俄语" -#: netbox/netbox/settings.py:772 +#: netbox/netbox/settings.py:764 msgid "Turkish" msgstr "土耳其语" -#: netbox/netbox/settings.py:773 +#: netbox/netbox/settings.py:765 msgid "Ukrainian" msgstr "乌克兰语" -#: netbox/netbox/settings.py:774 +#: netbox/netbox/settings.py:766 msgid "Chinese" msgstr "中文" -#: netbox/netbox/tables/columns.py:176 +#: netbox/netbox/tables/columns.py:177 msgid "Select all" msgstr "选择全部" -#: netbox/netbox/tables/columns.py:189 +#: netbox/netbox/tables/columns.py:190 msgid "Toggle all" msgstr "全部切换" -#: netbox/netbox/tables/columns.py:300 +#: netbox/netbox/tables/columns.py:302 msgid "Toggle Dropdown" msgstr "切换下拉菜单" -#: netbox/netbox/tables/columns.py:572 netbox/templates/core/job.html:53 +#: netbox/netbox/tables/columns.py:575 netbox/templates/core/job.html:53 msgid "Error" msgstr "错误" -#: netbox/netbox/tables/tables.py:58 +#: netbox/netbox/tables/tables.py:59 #, python-brace-format msgid "No {model_name} found" msgstr "找不到 {model_name} " -#: netbox/netbox/tables/tables.py:249 +#: netbox/netbox/tables/tables.py:252 #: netbox/templates/generic/bulk_import.html:117 msgid "Field" msgstr "字段" -#: netbox/netbox/tables/tables.py:252 +#: netbox/netbox/tables/tables.py:255 msgid "Value" msgstr "值" @@ -11266,24 +11848,24 @@ msgid "" "{error}" msgstr "渲染所选导出模板时出错 ({template}): {error}" -#: netbox/netbox/views/generic/bulk_views.py:416 +#: netbox/netbox/views/generic/bulk_views.py:421 #, python-brace-format msgid "Row {i}: Object with ID {id} does not exist" msgstr "第{i}行: ID为{id}的对象不存在" -#: netbox/netbox/views/generic/bulk_views.py:709 -#: netbox/netbox/views/generic/bulk_views.py:910 -#: netbox/netbox/views/generic/bulk_views.py:958 +#: netbox/netbox/views/generic/bulk_views.py:708 +#: netbox/netbox/views/generic/bulk_views.py:909 +#: netbox/netbox/views/generic/bulk_views.py:957 #, python-brace-format msgid "No {object_type} were selected." msgstr "没有 {object_type} 被选中。" -#: netbox/netbox/views/generic/bulk_views.py:788 +#: netbox/netbox/views/generic/bulk_views.py:787 #, python-brace-format msgid "Renamed {count} {object_type}" msgstr "重命名 {count} {object_type}" -#: netbox/netbox/views/generic/bulk_views.py:888 +#: netbox/netbox/views/generic/bulk_views.py:887 #, python-brace-format msgid "Deleted {count} {object_type}" msgstr "已删除 {count} {object_type}" @@ -11296,16 +11878,16 @@ msgstr "变更日志" msgid "Journal" msgstr "日志" -#: netbox/netbox/views/generic/feature_views.py:207 +#: netbox/netbox/views/generic/feature_views.py:212 msgid "Unable to synchronize data: No data file set." msgstr "无法同步数据:未设置任何数据文件。" -#: netbox/netbox/views/generic/feature_views.py:211 +#: netbox/netbox/views/generic/feature_views.py:216 #, python-brace-format msgid "Synchronized data for {object_type} {object}." msgstr "的同步数据 {object_type} {object}。" -#: netbox/netbox/views/generic/feature_views.py:236 +#: netbox/netbox/views/generic/feature_views.py:241 #, python-brace-format msgid "Synced {count} {object_type}" msgstr "已同步 {count} {object_type}" @@ -11377,9 +11959,9 @@ msgstr "在GitHub上" msgid "Home Page" msgstr "主页" -#: netbox/templates/account/base.html:7 netbox/templates/inc/user_menu.html:45 +#: netbox/templates/account/base.html:7 netbox/templates/inc/user_menu.html:40 #: netbox/vpn/forms/bulk_edit.py:255 netbox/vpn/forms/filtersets.py:189 -#: netbox/vpn/forms/model_forms.py:379 +#: netbox/vpn/forms/model_forms.py:382 msgid "Profile" msgstr "个人资料" @@ -11391,12 +11973,12 @@ msgstr "通知" #: netbox/templates/account/base.html:16 #: netbox/templates/account/subscriptions.html:7 -#: netbox/templates/inc/user_menu.html:51 +#: netbox/templates/inc/user_menu.html:46 msgid "Subscriptions" msgstr "订阅" #: netbox/templates/account/base.html:19 -#: netbox/templates/inc/user_menu.html:54 +#: netbox/templates/inc/user_menu.html:49 msgid "Preferences" msgstr "首选项" @@ -11424,6 +12006,7 @@ msgstr "修改密码" #: netbox/templates/generic/object_edit.html:72 #: netbox/templates/htmx/delete_form.html:53 #: netbox/templates/htmx/delete_form.html:55 +#: netbox/templates/htmx/quick_add.html:21 #: netbox/templates/ipam/ipaddress_assign.html:28 #: netbox/templates/virtualization/cluster_add_devices.html:30 msgid "Cancel" @@ -11522,7 +12105,7 @@ msgstr "指定用户组" #: netbox/templates/core/objectchange.html:142 #: netbox/templates/dcim/devicebay.html:59 #: netbox/templates/dcim/inc/panels/inventory_items.html:45 -#: netbox/templates/dcim/interface.html:296 +#: netbox/templates/dcim/interface.html:353 #: netbox/templates/dcim/modulebay.html:80 #: netbox/templates/extras/configcontext.html:70 #: netbox/templates/extras/eventrule.html:66 @@ -11531,6 +12114,7 @@ msgstr "指定用户组" #: netbox/templates/extras/webhook.html:75 #: netbox/templates/inc/panel_table.html:13 #: netbox/templates/inc/panels/comments.html:10 +#: netbox/templates/inc/panels/related_objects.html:23 #: netbox/templates/ipam/inc/panels/fhrp_groups.html:56 #: netbox/templates/users/group.html:34 netbox/templates/users/group.html:44 #: netbox/templates/users/objectpermission.html:77 @@ -11568,7 +12152,7 @@ msgstr "最后使用" msgid "Add a Token" msgstr "添加 Token" -#: netbox/templates/base/base.html:22 netbox/templates/home.html:27 +#: netbox/templates/base/base.html:23 netbox/templates/home.html:27 msgid "Home" msgstr "主页" @@ -11610,15 +12194,16 @@ msgstr "源代码" msgid "Community" msgstr "社区" -#: netbox/templates/circuits/circuit.html:47 +#: netbox/templates/circuits/circuit.html:57 msgid "Install Date" msgstr "安装时间" -#: netbox/templates/circuits/circuit.html:51 +#: netbox/templates/circuits/circuit.html:61 msgid "Termination Date" msgstr "维护模式" -#: netbox/templates/circuits/circuit.html:70 +#: netbox/templates/circuits/circuit.html:80 +#: netbox/templates/circuits/virtualcircuit.html:73 #: netbox/templates/ipam/inc/panels/fhrp_groups.html:15 msgid "Assign Group" msgstr "分配组" @@ -11666,7 +12251,7 @@ msgid "Add" msgstr "添加" #: netbox/templates/circuits/inc/circuit_termination.html:15 -#: netbox/templates/circuits/inc/circuit_termination_fields.html:36 +#: netbox/templates/circuits/inc/circuit_termination_fields.html:37 #: netbox/templates/dcim/inc/panels/inventory_items.html:32 #: netbox/templates/dcim/powerpanel.html:56 #: netbox/templates/extras/script_list.html:30 @@ -11681,35 +12266,39 @@ msgstr "编辑" msgid "Swap" msgstr "交换" -#: netbox/templates/circuits/inc/circuit_termination_fields.html:19 +#: netbox/templates/circuits/inc/circuit_termination_fields.html:5 +msgid "Termination point" +msgstr "终止点" + +#: netbox/templates/circuits/inc/circuit_termination_fields.html:20 #: netbox/templates/dcim/consoleport.html:59 #: netbox/templates/dcim/consoleserverport.html:60 #: netbox/templates/dcim/powerfeed.html:114 msgid "Marked as connected" msgstr "标记为已连接" -#: netbox/templates/circuits/inc/circuit_termination_fields.html:21 +#: netbox/templates/circuits/inc/circuit_termination_fields.html:22 msgid "to" msgstr "到" -#: netbox/templates/circuits/inc/circuit_termination_fields.html:31 #: netbox/templates/circuits/inc/circuit_termination_fields.html:32 +#: netbox/templates/circuits/inc/circuit_termination_fields.html:33 #: netbox/templates/dcim/frontport.html:80 #: netbox/templates/dcim/inc/connection_endpoints.html:7 -#: netbox/templates/dcim/interface.html:154 +#: netbox/templates/dcim/interface.html:211 #: netbox/templates/dcim/rearport.html:76 msgid "Trace" msgstr "跟踪" -#: netbox/templates/circuits/inc/circuit_termination_fields.html:35 +#: netbox/templates/circuits/inc/circuit_termination_fields.html:36 msgid "Edit cable" msgstr "编辑线缆" -#: netbox/templates/circuits/inc/circuit_termination_fields.html:40 +#: netbox/templates/circuits/inc/circuit_termination_fields.html:41 msgid "Remove cable" msgstr "删除线缆" -#: netbox/templates/circuits/inc/circuit_termination_fields.html:41 +#: netbox/templates/circuits/inc/circuit_termination_fields.html:42 #: netbox/templates/dcim/bulk_disconnect.html:5 #: netbox/templates/dcim/device/consoleports.html:12 #: netbox/templates/dcim/device/consoleserverports.html:12 @@ -11722,33 +12311,33 @@ msgstr "删除线缆" msgid "Disconnect" msgstr "断开" -#: netbox/templates/circuits/inc/circuit_termination_fields.html:48 +#: netbox/templates/circuits/inc/circuit_termination_fields.html:49 #: netbox/templates/dcim/consoleport.html:69 #: netbox/templates/dcim/consoleserverport.html:70 #: netbox/templates/dcim/frontport.html:102 -#: netbox/templates/dcim/interface.html:180 -#: netbox/templates/dcim/interface.html:200 +#: netbox/templates/dcim/interface.html:237 +#: netbox/templates/dcim/interface.html:257 #: netbox/templates/dcim/powerfeed.html:127 -#: netbox/templates/dcim/poweroutlet.html:71 -#: netbox/templates/dcim/poweroutlet.html:72 +#: netbox/templates/dcim/poweroutlet.html:81 +#: netbox/templates/dcim/poweroutlet.html:82 #: netbox/templates/dcim/powerport.html:73 #: netbox/templates/dcim/rearport.html:98 msgid "Connect" msgstr "连接" -#: netbox/templates/circuits/inc/circuit_termination_fields.html:70 +#: netbox/templates/circuits/inc/circuit_termination_fields.html:65 msgid "Downstream" msgstr "下游" -#: netbox/templates/circuits/inc/circuit_termination_fields.html:71 +#: netbox/templates/circuits/inc/circuit_termination_fields.html:66 msgid "Upstream" msgstr "上游" -#: netbox/templates/circuits/inc/circuit_termination_fields.html:80 +#: netbox/templates/circuits/inc/circuit_termination_fields.html:75 msgid "Cross-Connect" msgstr "交叉连接" -#: netbox/templates/circuits/inc/circuit_termination_fields.html:84 +#: netbox/templates/circuits/inc/circuit_termination_fields.html:79 msgid "Patch Panel/Port" msgstr "配线架/端口" @@ -11760,6 +12349,27 @@ msgstr "添加线路" msgid "Provider Account" msgstr "运营商帐户" +#: netbox/templates/circuits/providernetwork.html:59 +msgid "Add a Virtual Circuit" +msgstr "添加虚拟电路" + +#: netbox/templates/circuits/virtualcircuit.html:91 +#: netbox/templates/vpn/tunnel.html:9 +msgid "Add Termination" +msgstr "增加接入点" + +#: netbox/templates/circuits/virtualcircuittermination.html:23 +msgid "Virtual Circuit Termination" +msgstr "虚拟电路终止" + +#: netbox/templates/circuits/virtualcircuittype.html:10 +msgid "Add Virtual Circuit" +msgstr "添加虚拟电路" + +#: netbox/templates/circuits/virtualcircuittype.html:19 +msgid "Virtual Circuit Type" +msgstr "虚拟电路类型" + #: netbox/templates/core/configrevision.html:35 msgid "Configuration Data" msgstr "配置数据" @@ -11793,7 +12403,7 @@ msgstr "已更改" #: netbox/templates/core/datafile.html:42 #: netbox/templates/ipam/iprange.html:25 #: netbox/templates/virtualization/virtualdisk.html:29 -#: netbox/virtualization/tables/virtualmachines.py:198 +#: netbox/virtualization/tables/virtualmachines.py:169 msgid "Size" msgstr "大小" @@ -12231,8 +12841,8 @@ msgstr "重命名选中项" #: netbox/templates/dcim/consoleport.html:65 #: netbox/templates/dcim/consoleserverport.html:66 #: netbox/templates/dcim/frontport.html:98 -#: netbox/templates/dcim/interface.html:176 -#: netbox/templates/dcim/poweroutlet.html:69 +#: netbox/templates/dcim/interface.html:233 +#: netbox/templates/dcim/poweroutlet.html:79 #: netbox/templates/dcim/powerport.html:69 msgid "Not Connected" msgstr "未连接" @@ -12255,7 +12865,7 @@ msgid "Map" msgstr "地图" #: netbox/templates/dcim/device.html:108 -#: netbox/templates/dcim/inventoryitem.html:56 +#: netbox/templates/dcim/inventoryitem.html:60 #: netbox/templates/dcim/module.html:81 #: netbox/templates/dcim/modulebay.html:74 netbox/templates/dcim/rack.html:61 msgid "Asset Tag" @@ -12271,7 +12881,7 @@ msgstr "创建VDC" #: netbox/templates/dcim/device.html:175 #: netbox/templates/dcim/device_edit.html:64 -#: netbox/virtualization/forms/model_forms.py:223 +#: netbox/virtualization/forms/model_forms.py:230 msgid "Management" msgstr "管理" @@ -12388,35 +12998,6 @@ msgstr "添加电源接口" msgid "Add Rear Ports" msgstr "添加后置端口" -#: netbox/templates/dcim/device/render_config.html:5 -#: netbox/templates/virtualization/virtualmachine/render_config.html:5 -msgid "Config" -msgstr "配置" - -#: netbox/templates/dcim/device/render_config.html:35 -#: netbox/templates/virtualization/virtualmachine/render_config.html:35 -msgid "Context Data" -msgstr "实例数据" - -#: netbox/templates/dcim/device/render_config.html:55 -#: netbox/templates/virtualization/virtualmachine/render_config.html:55 -msgid "Rendered Config" -msgstr "提交配置" - -#: netbox/templates/dcim/device/render_config.html:57 -#: netbox/templates/virtualization/virtualmachine/render_config.html:57 -msgid "Download" -msgstr "下载" - -#: netbox/templates/dcim/device/render_config.html:64 -#: netbox/templates/virtualization/virtualmachine/render_config.html:64 -msgid "Error rendering template" -msgstr "渲染模板时出错" - -#: netbox/templates/dcim/device/render_config.html:70 -msgid "No configuration template has been assigned for this device." -msgstr "尚未为该设备分配配置模板。" - #: netbox/templates/dcim/device_edit.html:44 msgid "Parent Bay" msgstr "父托架" @@ -12481,12 +13062,12 @@ msgid "VM Role" msgstr "虚拟机角色" #: netbox/templates/dcim/devicetype.html:18 -#: netbox/templates/dcim/moduletype.html:29 +#: netbox/templates/dcim/moduletype.html:31 msgid "Model Name" msgstr "模块名称" #: netbox/templates/dcim/devicetype.html:25 -#: netbox/templates/dcim/moduletype.html:33 +#: netbox/templates/dcim/moduletype.html:35 msgid "Part Number" msgstr "部件编码(PN)" @@ -12511,8 +13092,8 @@ msgid "Rear Port Position" msgstr "后置端口位置" #: netbox/templates/dcim/frontport.html:72 -#: netbox/templates/dcim/interface.html:144 -#: netbox/templates/dcim/poweroutlet.html:63 +#: netbox/templates/dcim/interface.html:201 +#: netbox/templates/dcim/poweroutlet.html:73 #: netbox/templates/dcim/powerport.html:63 #: netbox/templates/dcim/rearport.html:68 msgid "Marked as Connected" @@ -12612,77 +13193,79 @@ msgid "PoE Type" msgstr "PoE类型" #: netbox/templates/dcim/interface.html:81 -#: netbox/templates/virtualization/vminterface.html:63 +#: netbox/templates/virtualization/vminterface.html:55 +#: netbox/virtualization/forms/model_forms.py:395 msgid "802.1Q Mode" msgstr "802.1Q 模式" -#: netbox/templates/dcim/interface.html:125 -#: netbox/templates/virtualization/vminterface.html:59 -msgid "MAC Address" -msgstr "MAC 地址" +#: netbox/templates/dcim/interface.html:156 +#: netbox/templates/virtualization/vminterface.html:88 +msgid "VLAN Translation" +msgstr "VLAN 转换" -#: netbox/templates/dcim/interface.html:151 +#: netbox/templates/dcim/interface.html:208 msgid "Wireless Link" msgstr "无线连接" -#: netbox/templates/dcim/interface.html:218 netbox/vpn/choices.py:63 -msgid "Peer" -msgstr "对端" - -#: netbox/templates/dcim/interface.html:230 +#: netbox/templates/dcim/interface.html:287 #: netbox/templates/wireless/inc/wirelesslink_interface.html:26 msgid "Channel" msgstr "通道" -#: netbox/templates/dcim/interface.html:239 +#: netbox/templates/dcim/interface.html:296 #: netbox/templates/wireless/inc/wirelesslink_interface.html:32 msgid "Channel Frequency" msgstr "通道频率" -#: netbox/templates/dcim/interface.html:242 -#: netbox/templates/dcim/interface.html:250 -#: netbox/templates/dcim/interface.html:261 -#: netbox/templates/dcim/interface.html:269 +#: netbox/templates/dcim/interface.html:299 +#: netbox/templates/dcim/interface.html:307 +#: netbox/templates/dcim/interface.html:318 +#: netbox/templates/dcim/interface.html:326 msgid "MHz" msgstr "MHz" -#: netbox/templates/dcim/interface.html:258 +#: netbox/templates/dcim/interface.html:315 #: netbox/templates/wireless/inc/wirelesslink_interface.html:42 msgid "Channel Width" msgstr "信道频率" -#: netbox/templates/dcim/interface.html:285 +#: netbox/templates/dcim/interface.html:342 #: netbox/templates/wireless/wirelesslan.html:14 #: netbox/templates/wireless/wirelesslink.html:21 -#: netbox/wireless/forms/bulk_edit.py:60 -#: netbox/wireless/forms/bulk_edit.py:102 -#: netbox/wireless/forms/filtersets.py:40 -#: netbox/wireless/forms/filtersets.py:80 netbox/wireless/models.py:82 -#: netbox/wireless/models.py:156 netbox/wireless/tables/wirelesslan.py:44 +#: netbox/wireless/forms/bulk_edit.py:62 +#: netbox/wireless/forms/bulk_edit.py:105 +#: netbox/wireless/forms/filtersets.py:43 +#: netbox/wireless/forms/filtersets.py:108 netbox/wireless/models.py:82 +#: netbox/wireless/models.py:153 netbox/wireless/tables/wirelesslan.py:44 msgid "SSID" msgstr "SSID" -#: netbox/templates/dcim/interface.html:305 +#: netbox/templates/dcim/interface.html:362 msgid "LAG Members" msgstr "聚合组成员" -#: netbox/templates/dcim/interface.html:323 +#: netbox/templates/dcim/interface.html:380 msgid "No member interfaces" msgstr "无成员接口" -#: netbox/templates/dcim/interface.html:343 +#: netbox/templates/dcim/interface.html:400 #: netbox/templates/ipam/fhrpgroup.html:73 #: netbox/templates/ipam/iprange/ip_addresses.html:7 #: netbox/templates/ipam/prefix/ip_addresses.html:7 -#: netbox/templates/virtualization/vminterface.html:89 +#: netbox/templates/virtualization/vminterface.html:105 msgid "Add IP Address" msgstr "增加 IP 地址" +#: netbox/templates/dcim/interface.html:417 +#: netbox/templates/virtualization/vminterface.html:123 +msgid "Add MAC Address" +msgstr "添加 MAC 地址" + #: netbox/templates/dcim/inventoryitem.html:24 msgid "Parent Item" msgstr "父项" -#: netbox/templates/dcim/inventoryitem.html:48 +#: netbox/templates/dcim/inventoryitem.html:52 msgid "Part ID" msgstr "零件ID" @@ -12702,6 +13285,10 @@ msgstr "添加一个位置" msgid "Add a Device" msgstr "增加设备" +#: netbox/templates/dcim/macaddress.html:36 +msgid "Primary for interface" +msgstr "主要用于接口" + #: netbox/templates/dcim/manufacturer.html:16 msgid "Add Device Type" msgstr "增加设备型号" @@ -12732,7 +13319,7 @@ msgctxt "Abbreviation for amperes" msgid "A" msgstr "A" -#: netbox/templates/dcim/poweroutlet.html:48 +#: netbox/templates/dcim/poweroutlet.html:58 msgid "Feed Leg" msgstr "电源针脚" @@ -13142,11 +13729,17 @@ msgstr "无法加载内容。无效的视图名称" msgid "No content found" msgstr "未找到内容" -#: netbox/templates/extras/dashboard/widgets/rssfeed.html:18 +#: netbox/templates/extras/dashboard/widgets/rssfeed.html:17 +msgid "" +"This RSS feed requires an external connection. Check the ISOLATED_DEPLOYMENT" +" setting." +msgstr "此 RSS 提要需要外部连接。检查 ISOLATED_DEPLOYMENT 设置。" + +#: netbox/templates/extras/dashboard/widgets/rssfeed.html:22 msgid "There was a problem fetching the RSS feed" msgstr "获取RSS源时出现问题" -#: netbox/templates/extras/dashboard/widgets/rssfeed.html:21 +#: netbox/templates/extras/dashboard/widgets/rssfeed.html:25 msgid "HTTP" msgstr "HTTP" @@ -13216,6 +13809,30 @@ msgstr "数据源实例" msgid "New Journal Entry" msgstr "新的日志条目" +#: netbox/templates/extras/object_render_config.html:6 +msgid "Config" +msgstr "配置" + +#: netbox/templates/extras/object_render_config.html:36 +msgid "Context Data" +msgstr "实例数据" + +#: netbox/templates/extras/object_render_config.html:56 +msgid "Rendered Config" +msgstr "提交配置" + +#: netbox/templates/extras/object_render_config.html:58 +msgid "Download" +msgstr "下载" + +#: netbox/templates/extras/object_render_config.html:65 +msgid "Error rendering template" +msgstr "渲染模板时出错" + +#: netbox/templates/extras/object_render_config.html:71 +msgid "No configuration template has been assigned." +msgstr "尚未分配任何配置模板。" + #: netbox/templates/extras/report/base.html:30 msgid "Report" msgstr "报告" @@ -13301,7 +13918,7 @@ msgstr "所有" msgid "Tagged Item Types" msgstr "标记的项目类型" -#: netbox/templates/extras/tag.html:81 +#: netbox/templates/extras/tag.html:82 msgid "Tagged Objects" msgstr "标记的对象" @@ -13575,6 +14192,21 @@ msgstr "所有通知" msgid "Select" msgstr "选择" +#: netbox/templates/htmx/quick_add.html:7 +msgid "Quick Add" +msgstr "快速添加" + +#: netbox/templates/htmx/quick_add_created.html:18 +#, python-format +msgid "" +"\n" +" Created %(object_type)s %(object)s\n" +" " +msgstr "" +"\n" +" 已创建 %(object_type)s %(object)s\n" +" " + #: netbox/templates/inc/filter_list.html:43 #: netbox/utilities/templates/helpers/table_config_form.html:39 msgid "Reset" @@ -13644,15 +14276,11 @@ msgstr "清除订单" msgid "Help center" msgstr "帮助中心" -#: netbox/templates/inc/user_menu.html:41 -msgid "Django Admin" -msgstr "Django 管理员" - -#: netbox/templates/inc/user_menu.html:61 +#: netbox/templates/inc/user_menu.html:56 msgid "Log Out" msgstr "登出" -#: netbox/templates/inc/user_menu.html:68 netbox/templates/login.html:38 +#: netbox/templates/inc/user_menu.html:63 netbox/templates/login.html:38 msgid "Log In" msgstr "登录" @@ -13749,43 +14377,43 @@ msgstr "开始地址" msgid "Ending Address" msgstr "结束地址" -#: netbox/templates/ipam/iprange.html:33 netbox/templates/ipam/prefix.html:110 +#: netbox/templates/ipam/iprange.html:33 netbox/templates/ipam/prefix.html:106 msgid "Marked fully utilized" msgstr "标记为已全部被使用" -#: netbox/templates/ipam/prefix.html:99 +#: netbox/templates/ipam/prefix.html:95 msgid "Addressing Details" msgstr "IP地址详细信息" -#: netbox/templates/ipam/prefix.html:118 +#: netbox/templates/ipam/prefix.html:114 msgid "Child IPs" msgstr "子IP" -#: netbox/templates/ipam/prefix.html:126 +#: netbox/templates/ipam/prefix.html:122 msgid "Available IPs" msgstr "可用IP" -#: netbox/templates/ipam/prefix.html:138 +#: netbox/templates/ipam/prefix.html:134 msgid "First available IP" msgstr "第一个可用IP" -#: netbox/templates/ipam/prefix.html:179 +#: netbox/templates/ipam/prefix.html:175 msgid "Prefix Details" msgstr "前缀详细信息" -#: netbox/templates/ipam/prefix.html:185 +#: netbox/templates/ipam/prefix.html:181 msgid "Network Address" msgstr "网络地址" -#: netbox/templates/ipam/prefix.html:189 +#: netbox/templates/ipam/prefix.html:185 msgid "Network Mask" msgstr "网络掩码/子网掩码" -#: netbox/templates/ipam/prefix.html:193 +#: netbox/templates/ipam/prefix.html:189 msgid "Wildcard Mask" msgstr "反掩码" -#: netbox/templates/ipam/prefix.html:197 +#: netbox/templates/ipam/prefix.html:193 msgid "Broadcast Address" msgstr "广播地址" @@ -13825,14 +14453,30 @@ msgstr "导入L2VPN" msgid "Exporting L2VPNs" msgstr "导出L2VPN" -#: netbox/templates/ipam/vlan.html:88 +#: netbox/templates/ipam/vlan.html:66 +msgid "Q-in-Q Role" +msgstr "Q-in-Q 角色" + +#: netbox/templates/ipam/vlan.html:104 msgid "Add a Prefix" msgstr "添加一个前缀" +#: netbox/templates/ipam/vlan.html:114 +msgid "Customer VLANs" +msgstr "客户 VLAN" + +#: netbox/templates/ipam/vlan.html:118 +msgid "Add a VLAN" +msgstr "添加 VLAN" + #: netbox/templates/ipam/vlangroup.html:18 msgid "Add VLAN" msgstr "添加VLAN" +#: netbox/templates/ipam/vlantranslationpolicy.html:51 +msgid "Add Rule" +msgstr "添加规则" + #: netbox/templates/ipam/vrf.html:16 msgid "Route Distinguisher" msgstr "路由实例" @@ -13903,7 +14547,7 @@ msgstr "点击 这里重新加载NetBox" #: netbox/templates/tenancy/contact.html:18 netbox/tenancy/filtersets.py:147 #: netbox/tenancy/forms/bulk_edit.py:137 -#: netbox/tenancy/forms/filtersets.py:102 netbox/tenancy/forms/forms.py:56 +#: netbox/tenancy/forms/filtersets.py:102 netbox/tenancy/forms/forms.py:57 #: netbox/tenancy/forms/model_forms.py:106 #: netbox/tenancy/forms/model_forms.py:130 #: netbox/tenancy/tables/contacts.py:98 @@ -13921,7 +14565,7 @@ msgid "Phone" msgstr "手机号" #: netbox/templates/tenancy/contactgroup.html:18 -#: netbox/tenancy/forms/forms.py:66 netbox/tenancy/forms/model_forms.py:75 +#: netbox/tenancy/forms/forms.py:67 netbox/tenancy/forms/model_forms.py:75 msgid "Contact Group" msgstr "联系人组" @@ -13930,7 +14574,7 @@ msgid "Add Contact Group" msgstr "增加联系人组" #: netbox/templates/tenancy/contactrole.html:15 -#: netbox/tenancy/filtersets.py:152 netbox/tenancy/forms/forms.py:61 +#: netbox/tenancy/filtersets.py:152 netbox/tenancy/forms/forms.py:62 #: netbox/tenancy/forms/model_forms.py:87 msgid "Contact Role" msgstr "联系人角色" @@ -13944,8 +14588,8 @@ msgid "Add Tenant" msgstr "增加租户" #: netbox/templates/tenancy/tenantgroup.html:26 -#: netbox/tenancy/forms/model_forms.py:32 netbox/tenancy/tables/columns.py:51 -#: netbox/tenancy/tables/columns.py:61 +#: netbox/tenancy/forms/model_forms.py:32 netbox/tenancy/tables/columns.py:36 +#: netbox/tenancy/tables/columns.py:46 msgid "Tenant Group" msgstr "租户组" @@ -13976,21 +14620,21 @@ msgstr "限制因素" msgid "Assigned Users" msgstr "分配用户" -#: netbox/templates/virtualization/cluster.html:52 +#: netbox/templates/virtualization/cluster.html:56 msgid "Allocated Resources" msgstr "已分配资源" -#: netbox/templates/virtualization/cluster.html:55 +#: netbox/templates/virtualization/cluster.html:59 #: netbox/templates/virtualization/virtualmachine.html:125 msgid "Virtual CPUs" msgstr "虚拟CPU" -#: netbox/templates/virtualization/cluster.html:59 +#: netbox/templates/virtualization/cluster.html:63 #: netbox/templates/virtualization/virtualmachine.html:129 msgid "Memory" msgstr "内存" -#: netbox/templates/virtualization/cluster.html:69 +#: netbox/templates/virtualization/cluster.html:73 #: netbox/templates/virtualization/virtualmachine.html:140 msgid "Disk Space" msgstr "磁盘空间" @@ -14026,13 +14670,13 @@ msgid "Add Cluster" msgstr "增加集群" #: netbox/templates/virtualization/clustergroup.html:19 -#: netbox/virtualization/forms/model_forms.py:50 +#: netbox/virtualization/forms/model_forms.py:53 msgid "Cluster Group" msgstr "集群组" #: netbox/templates/virtualization/clustertype.html:19 #: netbox/templates/virtualization/virtualmachine.html:110 -#: netbox/virtualization/forms/model_forms.py:36 +#: netbox/virtualization/forms/model_forms.py:39 msgid "Cluster Type" msgstr "集群类型" @@ -14041,8 +14685,8 @@ msgid "Virtual Disk" msgstr "虚拟硬盘" #: netbox/templates/virtualization/virtualmachine.html:122 -#: netbox/virtualization/forms/bulk_edit.py:190 -#: netbox/virtualization/forms/model_forms.py:224 +#: netbox/virtualization/forms/bulk_edit.py:172 +#: netbox/virtualization/forms/model_forms.py:231 msgid "Resources" msgstr "资源" @@ -14050,10 +14694,6 @@ msgstr "资源" msgid "Add Virtual Disk" msgstr "增加虚拟硬盘" -#: netbox/templates/virtualization/virtualmachine/render_config.html:70 -msgid "No configuration template has been assigned for this virtual machine." -msgstr "尚未为该虚拟机分配配置模板。" - #: netbox/templates/vpn/ikepolicy.html:10 #: netbox/templates/vpn/ipsecprofile.html:33 netbox/vpn/tables/crypto.py:166 msgid "IKE Policy" @@ -14076,7 +14716,7 @@ msgstr "显示密码" #: netbox/templates/vpn/ipsecpolicy.html:45 #: netbox/templates/vpn/ipsecprofile.html:52 #: netbox/templates/vpn/ipsecprofile.html:77 -#: netbox/vpn/forms/model_forms.py:316 netbox/vpn/forms/model_forms.py:352 +#: netbox/vpn/forms/model_forms.py:317 netbox/vpn/forms/model_forms.py:354 #: netbox/vpn/tables/crypto.py:68 netbox/vpn/tables/crypto.py:134 msgid "Proposals" msgstr "Proposals" @@ -14122,12 +14762,12 @@ msgid "IPSec Policy" msgstr "IPSec Policy" #: netbox/templates/vpn/ipsecpolicy.html:21 netbox/vpn/forms/bulk_edit.py:210 -#: netbox/vpn/models/crypto.py:193 +#: netbox/vpn/models/crypto.py:191 msgid "PFS group" msgstr "PFS group" #: netbox/templates/vpn/ipsecprofile.html:10 -#: netbox/vpn/forms/model_forms.py:54 +#: netbox/vpn/forms/model_forms.py:55 msgid "IPSec Profile" msgstr "IPSec Profile" @@ -14153,10 +14793,6 @@ msgstr "L2VPN 属性" msgid "Add a Termination" msgstr "增加接入点" -#: netbox/templates/vpn/tunnel.html:9 -msgid "Add Termination" -msgstr "增加接入点" - #: netbox/templates/vpn/tunnel.html:37 netbox/vpn/forms/bulk_edit.py:49 #: netbox/vpn/forms/bulk_import.py:48 netbox/vpn/forms/filtersets.py:57 msgid "Encapsulation" @@ -14164,7 +14800,7 @@ msgstr "封装" #: netbox/templates/vpn/tunnel.html:41 netbox/vpn/forms/bulk_edit.py:55 #: netbox/vpn/forms/bulk_import.py:53 netbox/vpn/forms/filtersets.py:64 -#: netbox/vpn/models/crypto.py:250 netbox/vpn/tables/tunnels.py:51 +#: netbox/vpn/models/crypto.py:246 netbox/vpn/tables/tunnels.py:51 msgid "IPSec profile" msgstr "IPSec profile" @@ -14187,8 +14823,8 @@ msgid "Tunnel Termination" msgstr "Tunnel 接入点" #: netbox/templates/vpn/tunneltermination.html:35 -#: netbox/vpn/forms/bulk_import.py:107 netbox/vpn/forms/model_forms.py:102 -#: netbox/vpn/forms/model_forms.py:138 netbox/vpn/forms/model_forms.py:247 +#: netbox/vpn/forms/bulk_import.py:107 netbox/vpn/forms/model_forms.py:103 +#: netbox/vpn/forms/model_forms.py:139 netbox/vpn/forms/model_forms.py:248 #: netbox/vpn/tables/tunnels.py:101 msgid "Outside IP" msgstr "外部 IP" @@ -14211,7 +14847,7 @@ msgctxt "Abbreviation for megahertz" msgid "MHz" msgstr "MHz" -#: netbox/templates/wireless/wirelesslan.html:57 +#: netbox/templates/wireless/wirelesslan.html:65 msgid "Attached Interfaces" msgstr "附加接口" @@ -14220,7 +14856,7 @@ msgid "Add Wireless LAN" msgstr "增加无线局域网" #: netbox/templates/wireless/wirelesslangroup.html:26 -#: netbox/wireless/forms/model_forms.py:28 +#: netbox/wireless/forms/model_forms.py:29 msgid "Wireless LAN Group" msgstr "无线局域网组" @@ -14232,13 +14868,6 @@ msgstr "增加无线局域网组" msgid "Link Properties" msgstr "链接属性" -#: netbox/templates/wireless/wirelesslink.html:38 -#: netbox/wireless/forms/bulk_edit.py:129 -#: netbox/wireless/forms/filtersets.py:102 -#: netbox/wireless/forms/model_forms.py:165 -msgid "Distance" -msgstr "距离" - #: netbox/tenancy/filtersets.py:28 msgid "Parent contact group (ID)" msgstr "父联系人组 (ID)" @@ -14309,47 +14938,47 @@ msgstr "联系人组" msgid "contact groups" msgstr "联系人组" -#: netbox/tenancy/models/contacts.py:48 +#: netbox/tenancy/models/contacts.py:42 msgid "contact role" msgstr "联系人角色" -#: netbox/tenancy/models/contacts.py:49 +#: netbox/tenancy/models/contacts.py:43 msgid "contact roles" msgstr "联系人角色" -#: netbox/tenancy/models/contacts.py:68 +#: netbox/tenancy/models/contacts.py:63 msgid "title" msgstr "职位" -#: netbox/tenancy/models/contacts.py:73 +#: netbox/tenancy/models/contacts.py:68 msgid "phone" msgstr "电话号" -#: netbox/tenancy/models/contacts.py:78 +#: netbox/tenancy/models/contacts.py:73 msgid "email" msgstr "电子邮箱" -#: netbox/tenancy/models/contacts.py:87 +#: netbox/tenancy/models/contacts.py:82 msgid "link" msgstr "链接" -#: netbox/tenancy/models/contacts.py:103 +#: netbox/tenancy/models/contacts.py:98 msgid "contact" msgstr "联系人" -#: netbox/tenancy/models/contacts.py:104 +#: netbox/tenancy/models/contacts.py:99 msgid "contacts" msgstr "联系人" -#: netbox/tenancy/models/contacts.py:153 +#: netbox/tenancy/models/contacts.py:146 msgid "contact assignment" msgstr "联系人分配" -#: netbox/tenancy/models/contacts.py:154 +#: netbox/tenancy/models/contacts.py:147 msgid "contact assignments" msgstr "联系人分配" -#: netbox/tenancy/models/contacts.py:170 +#: netbox/tenancy/models/contacts.py:163 #, python-brace-format msgid "Contacts cannot be assigned to this object type ({type})." msgstr "无法将联系人分配给此对象类型 ({type})." @@ -14362,19 +14991,19 @@ msgstr "租户组" msgid "tenant groups" msgstr "租户组" -#: netbox/tenancy/models/tenants.py:70 +#: netbox/tenancy/models/tenants.py:68 msgid "Tenant name must be unique per group." msgstr "每个组的租户名称必须唯一。" -#: netbox/tenancy/models/tenants.py:80 +#: netbox/tenancy/models/tenants.py:78 msgid "Tenant slug must be unique per group." msgstr "每个组的租户缩写必须是唯一的。" -#: netbox/tenancy/models/tenants.py:88 +#: netbox/tenancy/models/tenants.py:86 msgid "tenant" msgstr "租户" -#: netbox/tenancy/models/tenants.py:89 +#: netbox/tenancy/models/tenants.py:87 msgid "tenants" msgstr "租户" @@ -14590,7 +15219,7 @@ msgstr "token" msgid "tokens" msgstr "tokens" -#: netbox/users/models/users.py:57 netbox/vpn/models/crypto.py:42 +#: netbox/users/models/users.py:57 netbox/vpn/models/crypto.py:43 msgid "group" msgstr "组" @@ -14633,25 +15262,25 @@ msgstr "使用提供的ID找不到相关对象: {id}" msgid "{name} has a key defined but CHOICES is not a list" msgstr "{name} 已定义键,但 CHOICES 不是列表" -#: netbox/utilities/conversion.py:19 +#: netbox/utilities/conversion.py:20 msgid "Weight must be a positive number" msgstr "重量必须是正数" -#: netbox/utilities/conversion.py:21 +#: netbox/utilities/conversion.py:22 #, python-brace-format msgid "Invalid value '{weight}' for weight (must be a number)" msgstr " '{weight}' 为无效重量(必须是数字)" -#: netbox/utilities/conversion.py:32 netbox/utilities/conversion.py:62 +#: netbox/utilities/conversion.py:33 netbox/utilities/conversion.py:63 #, python-brace-format msgid "Unknown unit {unit}. Must be one of the following: {valid_units}" msgstr "{unit}无效。请使用 {valid_units}" -#: netbox/utilities/conversion.py:45 +#: netbox/utilities/conversion.py:46 msgid "Length must be a positive number" msgstr "长度必须是正数" -#: netbox/utilities/conversion.py:47 +#: netbox/utilities/conversion.py:48 #, python-brace-format msgid "Invalid value '{length}' for length (must be a number)" msgstr " '{length}' 为无效的长度(必须是数字)" @@ -14667,18 +15296,18 @@ msgstr "无法删除{objects}。 找到了 {count} 个依赖对象:" msgid "More than 50" msgstr "超过50个" -#: netbox/utilities/fields.py:30 +#: netbox/utilities/fields.py:29 msgid "RGB color in hexadecimal. Example: " msgstr "以十六进制表示的 RGB 颜色。例如:" -#: netbox/utilities/fields.py:159 +#: netbox/utilities/fields.py:158 #, python-format msgid "" "%s(%r) is invalid. to_model parameter to CounterCacheField must be a string " "in the format 'app.model'" msgstr "%s(%r)无效。CounterCacheField的to_model参数必须是格式为“app.model”的字符串" -#: netbox/utilities/fields.py:169 +#: netbox/utilities/fields.py:168 #, python-format msgid "" "%s(%r) is invalid. to_field parameter to CounterCacheField must be a string " @@ -14880,12 +15509,12 @@ msgstr "对象的属性关联无效 \"{field}\": {to_field}" msgid "Required column header \"{header}\" not found." msgstr "找不到必需的列标题\"{header}\"。" -#: netbox/utilities/forms/widgets/apiselect.py:124 +#: netbox/utilities/forms/widgets/apiselect.py:133 #, python-brace-format msgid "Missing required value for dynamic query param: '{dynamic_params}'" msgstr "缺少动态查询参数:'{dynamic_params}'" -#: netbox/utilities/forms/widgets/apiselect.py:141 +#: netbox/utilities/forms/widgets/apiselect.py:150 #, python-brace-format msgid "Missing required value for static query param: '{static_params}'" msgstr "缺少静态查询参数:'{static_params}'" @@ -15006,10 +15635,14 @@ msgstr "搜索…" msgid "Search NetBox" msgstr "搜索 NetBox" -#: netbox/utilities/templates/widgets/apiselect.html:7 +#: netbox/utilities/templates/widgets/apiselect.html:8 msgid "Open selector" msgstr "打开选择框" +#: netbox/utilities/templates/widgets/apiselect.html:22 +msgid "Quick add" +msgstr "快速添加" + #: netbox/utilities/templates/widgets/markdown_input.html:6 msgid "Write" msgstr "编写" @@ -15040,213 +15673,224 @@ msgid "" " be used on views which define a base queryset" msgstr "{class_name} 没有定义查询集。ObjectPermissionRequiredMixin 只能在定义了基本查询集的视图中使用" -#: netbox/virtualization/filtersets.py:79 +#: netbox/virtualization/choices.py:50 +msgid "Paused" +msgstr "已暂停" + +#: netbox/virtualization/filtersets.py:45 msgid "Parent group (ID)" msgstr "父组(ID)" -#: netbox/virtualization/filtersets.py:85 +#: netbox/virtualization/filtersets.py:51 msgid "Parent group (slug)" msgstr "父组(缩写)" -#: netbox/virtualization/filtersets.py:89 -#: netbox/virtualization/filtersets.py:141 +#: netbox/virtualization/filtersets.py:55 +#: netbox/virtualization/filtersets.py:107 msgid "Cluster type (ID)" msgstr "集群类型(ID)" -#: netbox/virtualization/filtersets.py:151 -#: netbox/virtualization/filtersets.py:271 +#: netbox/virtualization/filtersets.py:117 +#: netbox/virtualization/filtersets.py:237 msgid "Cluster (ID)" msgstr "集群 (ID)" -#: netbox/virtualization/forms/bulk_edit.py:166 -#: netbox/virtualization/models/virtualmachines.py:115 +#: netbox/virtualization/forms/bulk_edit.py:148 +#: netbox/virtualization/models/virtualmachines.py:110 msgid "vCPUs" msgstr "vCPUs" -#: netbox/virtualization/forms/bulk_edit.py:170 +#: netbox/virtualization/forms/bulk_edit.py:152 msgid "Memory (MB)" msgstr "内存 (MB)" -#: netbox/virtualization/forms/bulk_edit.py:174 +#: netbox/virtualization/forms/bulk_edit.py:156 msgid "Disk (MB)" msgstr "磁盘 (MB)" -#: netbox/virtualization/forms/bulk_edit.py:334 -#: netbox/virtualization/forms/filtersets.py:251 +#: netbox/virtualization/forms/bulk_edit.py:324 +#: netbox/virtualization/forms/filtersets.py:256 msgid "Size (MB)" msgstr "大小 (MB)" -#: netbox/virtualization/forms/bulk_import.py:44 +#: netbox/virtualization/forms/bulk_import.py:45 msgid "Type of cluster" msgstr "集群类型" -#: netbox/virtualization/forms/bulk_import.py:51 +#: netbox/virtualization/forms/bulk_import.py:52 msgid "Assigned cluster group" msgstr "指定集群组" -#: netbox/virtualization/forms/bulk_import.py:96 +#: netbox/virtualization/forms/bulk_import.py:102 msgid "Assigned cluster" msgstr "指定集群" -#: netbox/virtualization/forms/bulk_import.py:103 +#: netbox/virtualization/forms/bulk_import.py:109 msgid "Assigned device within cluster" msgstr "指定集群内部设备" -#: netbox/virtualization/forms/filtersets.py:183 +#: netbox/virtualization/forms/filtersets.py:188 msgid "Serial number" msgstr "序列号" -#: netbox/virtualization/forms/model_forms.py:153 +#: netbox/virtualization/forms/model_forms.py:158 #, python-brace-format msgid "" -"{device} belongs to a different site ({device_site}) than the cluster " -"({cluster_site})" -msgstr "{device} 属于与集群 ({cluster_site}) 不同的站点 ({device_site})" +"{device} belongs to a different {scope_field} ({device_scope}) than the " +"cluster ({cluster_scope})" +msgstr "{device} 属于不同的 {scope_field} ({device_scope}) 而不是集群 ({cluster_scope})" -#: netbox/virtualization/forms/model_forms.py:192 +#: netbox/virtualization/forms/model_forms.py:199 msgid "Optionally pin this VM to a specific host device within the cluster" msgstr "可将此虚拟机固定到集群中的特定主机设备" -#: netbox/virtualization/forms/model_forms.py:221 +#: netbox/virtualization/forms/model_forms.py:228 msgid "Site/Cluster" msgstr "站点/集群" -#: netbox/virtualization/forms/model_forms.py:244 +#: netbox/virtualization/forms/model_forms.py:251 msgid "Disk size is managed via the attachment of virtual disks." msgstr "通过附加虚拟磁盘来管理磁盘大小。" -#: netbox/virtualization/forms/model_forms.py:372 -#: netbox/virtualization/tables/virtualmachines.py:111 +#: netbox/virtualization/forms/model_forms.py:405 +#: netbox/virtualization/tables/virtualmachines.py:81 msgid "Disk" msgstr "硬盘" -#: netbox/virtualization/models/clusters.py:25 +#: netbox/virtualization/models/clusters.py:26 msgid "cluster type" msgstr "集群类型" -#: netbox/virtualization/models/clusters.py:26 +#: netbox/virtualization/models/clusters.py:27 msgid "cluster types" msgstr "集群类型" -#: netbox/virtualization/models/clusters.py:45 +#: netbox/virtualization/models/clusters.py:43 msgid "cluster group" msgstr "集群组" -#: netbox/virtualization/models/clusters.py:46 +#: netbox/virtualization/models/clusters.py:44 msgid "cluster groups" msgstr "集群组" -#: netbox/virtualization/models/clusters.py:121 +#: netbox/virtualization/models/clusters.py:110 msgid "cluster" msgstr "集群" -#: netbox/virtualization/models/clusters.py:122 +#: netbox/virtualization/models/clusters.py:111 msgid "clusters" msgstr "集群组" -#: netbox/virtualization/models/clusters.py:141 +#: netbox/virtualization/models/clusters.py:137 #, python-brace-format msgid "" "{count} devices are assigned as hosts for this cluster but are not in site " "{site}" msgstr "{count} 个设备被分配为此集群的主机,但不在站点{site}" -#: netbox/virtualization/models/virtualmachines.py:123 +#: netbox/virtualization/models/clusters.py:144 +#, python-brace-format +msgid "" +"{count} devices are assigned as hosts for this cluster but are not in " +"location {location}" +msgstr "{count} 设备被指定为该群集的主机,但不在原处 {location}" + +#: netbox/virtualization/models/virtualmachines.py:118 msgid "memory (MB)" msgstr "内存 (MB)" -#: netbox/virtualization/models/virtualmachines.py:128 +#: netbox/virtualization/models/virtualmachines.py:123 msgid "disk (MB)" msgstr "磁盘 (MB)" -#: netbox/virtualization/models/virtualmachines.py:166 +#: netbox/virtualization/models/virtualmachines.py:161 msgid "Virtual machine name must be unique per cluster." msgstr "集群中的虚拟机名称必须唯一。" -#: netbox/virtualization/models/virtualmachines.py:169 +#: netbox/virtualization/models/virtualmachines.py:164 msgid "virtual machine" msgstr "虚拟机" -#: netbox/virtualization/models/virtualmachines.py:170 +#: netbox/virtualization/models/virtualmachines.py:165 msgid "virtual machines" msgstr "虚拟机" -#: netbox/virtualization/models/virtualmachines.py:184 +#: netbox/virtualization/models/virtualmachines.py:176 msgid "A virtual machine must be assigned to a site and/or cluster." msgstr "虚拟机必须分配给站点和/或集群。" -#: netbox/virtualization/models/virtualmachines.py:191 +#: netbox/virtualization/models/virtualmachines.py:183 #, python-brace-format msgid "" "The selected cluster ({cluster}) is not assigned to this site ({site})." msgstr "所选集群({cluster}) 未分配给此站点 ({site})。" -#: netbox/virtualization/models/virtualmachines.py:198 +#: netbox/virtualization/models/virtualmachines.py:190 msgid "Must specify a cluster when assigning a host device." msgstr "分配主机设备时必须指定集群。" -#: netbox/virtualization/models/virtualmachines.py:203 +#: netbox/virtualization/models/virtualmachines.py:195 #, python-brace-format msgid "" "The selected device ({device}) is not assigned to this cluster ({cluster})." msgstr "所选设备 ({device})未分配给此集群({cluster})。" -#: netbox/virtualization/models/virtualmachines.py:215 +#: netbox/virtualization/models/virtualmachines.py:207 #, python-brace-format msgid "" "The specified disk size ({size}) must match the aggregate size of assigned " "virtual disks ({total_size})." msgstr "指定的磁盘大小 ({size}) 必须与分配的虚拟磁盘的总大小相匹配 ({total_size})." -#: netbox/virtualization/models/virtualmachines.py:229 +#: netbox/virtualization/models/virtualmachines.py:221 #, python-brace-format msgid "Must be an IPv{family} address. ({ip} is an IPv{version} address.)" msgstr "必须是 IPv{family} 地址。 ({ip} 是 IPv{version} 地址。)" -#: netbox/virtualization/models/virtualmachines.py:238 +#: netbox/virtualization/models/virtualmachines.py:230 #, python-brace-format msgid "The specified IP address ({ip}) is not assigned to this VM." msgstr "指定的IP地址 ({ip}) 未分配给该虚拟机。" -#: netbox/virtualization/models/virtualmachines.py:396 +#: netbox/virtualization/models/virtualmachines.py:376 #, python-brace-format msgid "" "The selected parent interface ({parent}) belongs to a different virtual " "machine ({virtual_machine})." msgstr "所选父接口 ({parent}) 属于另一个虚拟机 ({virtual_machine})" -#: netbox/virtualization/models/virtualmachines.py:411 +#: netbox/virtualization/models/virtualmachines.py:391 #, python-brace-format msgid "" "The selected bridge interface ({bridge}) belongs to a different virtual " "machine ({virtual_machine})." msgstr "所选桥接接口 ({bridge})属于另一个虚拟机({virtual_machine})。" -#: netbox/virtualization/models/virtualmachines.py:422 +#: netbox/virtualization/models/virtualmachines.py:402 #, python-brace-format msgid "" "The untagged VLAN ({untagged_vlan}) must belong to the same site as the " "interface's parent virtual machine, or it must be global." msgstr "未标记 VLAN ({untagged_vlan}) 必须与接口的父虚拟机属于同一站点,或者必须是全局的。" -#: netbox/virtualization/models/virtualmachines.py:434 +#: netbox/virtualization/models/virtualmachines.py:414 msgid "size (MB)" msgstr "大小 (MB)" -#: netbox/virtualization/models/virtualmachines.py:438 +#: netbox/virtualization/models/virtualmachines.py:418 msgid "virtual disk" msgstr "虚拟磁盘" -#: netbox/virtualization/models/virtualmachines.py:439 +#: netbox/virtualization/models/virtualmachines.py:419 msgid "virtual disks" msgstr "虚拟磁盘" -#: netbox/virtualization/views.py:273 +#: netbox/virtualization/views.py:289 #, python-brace-format msgid "Added {count} devices to cluster {cluster}" msgstr "已添加 {count} 要集群的设备 {cluster}" -#: netbox/virtualization/views.py:308 +#: netbox/virtualization/views.py:324 #, python-brace-format msgid "Removed {count} devices from cluster {cluster}" msgstr "已移除 {count} 来自集群的设备 {cluster}" @@ -15283,14 +15927,6 @@ msgstr "L2TP" msgid "PPTP" msgstr "PPTP" -#: netbox/vpn/choices.py:64 -msgid "Hub" -msgstr "中心节点" - -#: netbox/vpn/choices.py:65 -msgid "Spoke" -msgstr "分支节点" - #: netbox/vpn/choices.py:88 msgid "Aggressive" msgstr "野蛮模式" @@ -15408,26 +16044,26 @@ msgstr "VLAN(名称)" msgid "Tunnel group" msgstr "隧道组" -#: netbox/vpn/forms/bulk_edit.py:117 netbox/vpn/models/crypto.py:47 +#: netbox/vpn/forms/bulk_edit.py:117 netbox/vpn/models/crypto.py:48 msgid "SA lifetime" msgstr "SA生存期" -#: netbox/vpn/forms/bulk_edit.py:151 netbox/wireless/forms/bulk_edit.py:79 -#: netbox/wireless/forms/bulk_edit.py:126 -#: netbox/wireless/forms/filtersets.py:64 -#: netbox/wireless/forms/filtersets.py:98 +#: netbox/vpn/forms/bulk_edit.py:151 netbox/wireless/forms/bulk_edit.py:81 +#: netbox/wireless/forms/bulk_edit.py:129 +#: netbox/wireless/forms/filtersets.py:67 +#: netbox/wireless/forms/filtersets.py:126 msgid "Pre-shared key" msgstr "预共享密钥" #: netbox/vpn/forms/bulk_edit.py:237 netbox/vpn/forms/bulk_import.py:239 -#: netbox/vpn/forms/filtersets.py:199 netbox/vpn/forms/model_forms.py:370 +#: netbox/vpn/forms/filtersets.py:199 netbox/vpn/forms/model_forms.py:373 #: netbox/vpn/models/crypto.py:104 msgid "IKE policy" msgstr "IKE 策略" #: netbox/vpn/forms/bulk_edit.py:242 netbox/vpn/forms/bulk_import.py:244 -#: netbox/vpn/forms/filtersets.py:204 netbox/vpn/forms/model_forms.py:374 -#: netbox/vpn/models/crypto.py:209 +#: netbox/vpn/forms/filtersets.py:204 netbox/vpn/forms/model_forms.py:377 +#: netbox/vpn/models/crypto.py:207 msgid "IPSec policy" msgstr "IPSec 策略" @@ -15435,10 +16071,6 @@ msgstr "IPSec 策略" msgid "Tunnel encapsulation" msgstr "隧道封装" -#: netbox/vpn/forms/bulk_import.py:83 -msgid "Operational role" -msgstr "操作角色" - #: netbox/vpn/forms/bulk_import.py:90 msgid "Parent device of assigned interface" msgstr "指定接口的父设备" @@ -15455,7 +16087,7 @@ msgstr "设备/虚拟机接口" msgid "IKE proposal(s)" msgstr "IKE安全提议" -#: netbox/vpn/forms/bulk_import.py:215 netbox/vpn/models/crypto.py:197 +#: netbox/vpn/forms/bulk_import.py:215 netbox/vpn/models/crypto.py:195 msgid "Diffie-Hellman group for Perfect Forward Secrecy" msgstr "DH组" @@ -15500,7 +16132,7 @@ msgid "IKE version" msgstr "IKE 版本" #: netbox/vpn/forms/filtersets.py:142 netbox/vpn/forms/filtersets.py:175 -#: netbox/vpn/forms/model_forms.py:298 netbox/vpn/forms/model_forms.py:334 +#: netbox/vpn/forms/model_forms.py:299 netbox/vpn/forms/model_forms.py:336 msgid "Proposal" msgstr "安全提议" @@ -15508,32 +16140,28 @@ msgstr "安全提议" msgid "Assigned Object Type" msgstr "指定的对象类型" -#: netbox/vpn/forms/model_forms.py:95 netbox/vpn/forms/model_forms.py:130 -#: netbox/vpn/forms/model_forms.py:240 netbox/vpn/tables/tunnels.py:91 +#: netbox/vpn/forms/model_forms.py:96 netbox/vpn/forms/model_forms.py:131 +#: netbox/vpn/forms/model_forms.py:241 netbox/vpn/tables/tunnels.py:91 msgid "Tunnel interface" msgstr "隧道接口" -#: netbox/vpn/forms/model_forms.py:150 +#: netbox/vpn/forms/model_forms.py:151 msgid "First Termination" msgstr "第一端" -#: netbox/vpn/forms/model_forms.py:153 +#: netbox/vpn/forms/model_forms.py:154 msgid "Second Termination" msgstr "第二端" -#: netbox/vpn/forms/model_forms.py:197 +#: netbox/vpn/forms/model_forms.py:198 msgid "This parameter is required when defining a termination." msgstr "定义端点时需要此参数。" -#: netbox/vpn/forms/model_forms.py:320 netbox/vpn/forms/model_forms.py:356 -msgid "Policy" -msgstr "策略" - -#: netbox/vpn/forms/model_forms.py:487 +#: netbox/vpn/forms/model_forms.py:490 msgid "A termination must specify an interface or VLAN." msgstr "接入点必须指定接口或 VLAN。" -#: netbox/vpn/forms/model_forms.py:489 +#: netbox/vpn/forms/model_forms.py:492 msgid "" "A termination can only have one terminating object (an interface or VLAN)." msgstr "一个终端只能有一个终端对象(接口或VLAN)。" @@ -15546,31 +16174,31 @@ msgstr "加密算法" msgid "authentication algorithm" msgstr "认证算法" -#: netbox/vpn/models/crypto.py:44 +#: netbox/vpn/models/crypto.py:45 msgid "Diffie-Hellman group ID" msgstr "DH组" -#: netbox/vpn/models/crypto.py:50 +#: netbox/vpn/models/crypto.py:51 msgid "Security association lifetime (in seconds)" msgstr "SA生存期(秒)" -#: netbox/vpn/models/crypto.py:59 +#: netbox/vpn/models/crypto.py:60 msgid "IKE proposal" msgstr "IKE proposal" -#: netbox/vpn/models/crypto.py:60 +#: netbox/vpn/models/crypto.py:61 msgid "IKE proposals" msgstr "IKE proposals" -#: netbox/vpn/models/crypto.py:76 +#: netbox/vpn/models/crypto.py:75 msgid "version" msgstr "版本" -#: netbox/vpn/models/crypto.py:88 netbox/vpn/models/crypto.py:190 +#: netbox/vpn/models/crypto.py:88 netbox/vpn/models/crypto.py:188 msgid "proposals" msgstr "proposals" -#: netbox/vpn/models/crypto.py:91 netbox/wireless/models.py:39 +#: netbox/vpn/models/crypto.py:91 netbox/wireless/models.py:41 msgid "pre-shared key" msgstr "pre-shared key" @@ -15578,19 +16206,19 @@ msgstr "pre-shared key" msgid "IKE policies" msgstr "IKE policies" -#: netbox/vpn/models/crypto.py:118 +#: netbox/vpn/models/crypto.py:115 msgid "Mode is required for selected IKE version" msgstr "所选IKE版本需要配置模式" -#: netbox/vpn/models/crypto.py:122 +#: netbox/vpn/models/crypto.py:119 msgid "Mode cannot be used for selected IKE version" msgstr "该模式不能用于所选的IKE版本" -#: netbox/vpn/models/crypto.py:136 +#: netbox/vpn/models/crypto.py:134 msgid "encryption" msgstr "加密算法" -#: netbox/vpn/models/crypto.py:141 +#: netbox/vpn/models/crypto.py:140 msgid "authentication" msgstr "认证" @@ -15610,32 +16238,32 @@ msgstr "IPSec proposal" msgid "IPSec proposals" msgstr "IPSec proposals" -#: netbox/vpn/models/crypto.py:178 +#: netbox/vpn/models/crypto.py:175 msgid "Encryption and/or authentication algorithm must be defined" msgstr "必须定义加密和身份验证算法" -#: netbox/vpn/models/crypto.py:210 +#: netbox/vpn/models/crypto.py:208 msgid "IPSec policies" msgstr "IPSec policies" -#: netbox/vpn/models/crypto.py:251 +#: netbox/vpn/models/crypto.py:247 msgid "IPSec profiles" msgstr "IPSec profiles" -#: netbox/vpn/models/l2vpn.py:116 +#: netbox/vpn/models/l2vpn.py:113 msgid "L2VPN termination" msgstr "L2VPN 终点" -#: netbox/vpn/models/l2vpn.py:117 +#: netbox/vpn/models/l2vpn.py:114 msgid "L2VPN terminations" msgstr "L2VPN 终点" -#: netbox/vpn/models/l2vpn.py:135 +#: netbox/vpn/models/l2vpn.py:129 #, python-brace-format msgid "L2VPN Termination already assigned ({assigned_object})" msgstr "L2VPN终端已分配({assigned_object})" -#: netbox/vpn/models/l2vpn.py:147 +#: netbox/vpn/models/l2vpn.py:141 #, python-brace-format msgid "" "{l2vpn_type} L2VPNs cannot have more than two terminations; found " @@ -15650,35 +16278,35 @@ msgstr "隧道组" msgid "tunnel groups" msgstr "隧道组" -#: netbox/vpn/models/tunnels.py:53 +#: netbox/vpn/models/tunnels.py:51 msgid "encapsulation" msgstr "封装" -#: netbox/vpn/models/tunnels.py:72 +#: netbox/vpn/models/tunnels.py:70 msgid "tunnel ID" msgstr "隧道 ID" -#: netbox/vpn/models/tunnels.py:94 +#: netbox/vpn/models/tunnels.py:92 msgid "tunnel" msgstr "隧道" -#: netbox/vpn/models/tunnels.py:95 +#: netbox/vpn/models/tunnels.py:93 msgid "tunnels" msgstr "隧道" -#: netbox/vpn/models/tunnels.py:153 +#: netbox/vpn/models/tunnels.py:148 msgid "An object may be terminated to only one tunnel at a time." msgstr "一个对象一次只能被终止到一个隧道。" -#: netbox/vpn/models/tunnels.py:156 +#: netbox/vpn/models/tunnels.py:151 msgid "tunnel termination" msgstr "隧道终点" -#: netbox/vpn/models/tunnels.py:157 +#: netbox/vpn/models/tunnels.py:152 msgid "tunnel terminations" msgstr "隧道终点" -#: netbox/vpn/models/tunnels.py:174 +#: netbox/vpn/models/tunnels.py:169 #, python-brace-format msgid "{name} is already attached to a tunnel ({tunnel})." msgstr "{name}已附加到隧道({tunnel})。" @@ -15739,51 +16367,44 @@ msgstr "WPA Personal (PSK)" msgid "WPA Enterprise" msgstr "WPA Enterprise" -#: netbox/wireless/forms/bulk_edit.py:73 -#: netbox/wireless/forms/bulk_edit.py:120 -#: netbox/wireless/forms/bulk_import.py:68 -#: netbox/wireless/forms/bulk_import.py:71 -#: netbox/wireless/forms/bulk_import.py:110 -#: netbox/wireless/forms/bulk_import.py:113 -#: netbox/wireless/forms/filtersets.py:59 -#: netbox/wireless/forms/filtersets.py:93 +#: netbox/wireless/forms/bulk_edit.py:75 +#: netbox/wireless/forms/bulk_edit.py:123 +#: netbox/wireless/forms/bulk_import.py:70 +#: netbox/wireless/forms/bulk_import.py:73 +#: netbox/wireless/forms/bulk_import.py:115 +#: netbox/wireless/forms/bulk_import.py:118 +#: netbox/wireless/forms/filtersets.py:62 +#: netbox/wireless/forms/filtersets.py:121 msgid "Authentication cipher" msgstr "认证密码" -#: netbox/wireless/forms/bulk_edit.py:134 -#: netbox/wireless/forms/bulk_import.py:116 -#: netbox/wireless/forms/bulk_import.py:119 -#: netbox/wireless/forms/filtersets.py:106 -msgid "Distance unit" -msgstr "距离单位" - -#: netbox/wireless/forms/bulk_import.py:52 +#: netbox/wireless/forms/bulk_import.py:54 msgid "Bridged VLAN" msgstr "桥接 VLAN" -#: netbox/wireless/forms/bulk_import.py:89 -#: netbox/wireless/tables/wirelesslink.py:28 +#: netbox/wireless/forms/bulk_import.py:94 +#: netbox/wireless/tables/wirelesslink.py:27 msgid "Interface A" msgstr "网络接口A" -#: netbox/wireless/forms/bulk_import.py:93 -#: netbox/wireless/tables/wirelesslink.py:37 +#: netbox/wireless/forms/bulk_import.py:98 +#: netbox/wireless/tables/wirelesslink.py:36 msgid "Interface B" msgstr "网络接口B" -#: netbox/wireless/forms/model_forms.py:161 +#: netbox/wireless/forms/model_forms.py:164 msgid "Side B" msgstr "B端" -#: netbox/wireless/models.py:31 +#: netbox/wireless/models.py:32 msgid "authentication cipher" msgstr "认证密码" -#: netbox/wireless/models.py:69 +#: netbox/wireless/models.py:72 msgid "wireless LAN group" msgstr "无线局域网组" -#: netbox/wireless/models.py:70 +#: netbox/wireless/models.py:73 msgid "wireless LAN groups" msgstr "无线局域网组" @@ -15791,35 +16412,23 @@ msgstr "无线局域网组" msgid "wireless LAN" msgstr "无线局域网" -#: netbox/wireless/models.py:144 +#: netbox/wireless/models.py:141 msgid "interface A" msgstr "接口 A" -#: netbox/wireless/models.py:151 +#: netbox/wireless/models.py:148 msgid "interface B" msgstr "接口 B" -#: netbox/wireless/models.py:165 -msgid "distance" -msgstr "距离" - -#: netbox/wireless/models.py:172 -msgid "distance unit" -msgstr "距离单位" - -#: netbox/wireless/models.py:219 +#: netbox/wireless/models.py:196 msgid "wireless link" msgstr "无线连接" -#: netbox/wireless/models.py:220 +#: netbox/wireless/models.py:197 msgid "wireless links" msgstr "无线连接" -#: netbox/wireless/models.py:236 -msgid "Must specify a unit when setting a wireless distance" -msgstr "设置无线距离时必须指定单位" - -#: netbox/wireless/models.py:242 netbox/wireless/models.py:248 +#: netbox/wireless/models.py:212 netbox/wireless/models.py:218 #, python-brace-format msgid "{type} is not a wireless interface." msgstr "{type} 不是无线接口。" From e72b0606ba205954926772e7b7d7de8daca34bc6 Mon Sep 17 00:00:00 2001 From: Brian Tiemann Date: Thu, 6 Mar 2025 09:27:44 -0500 Subject: [PATCH 139/152] Bump Django and add missing PRs --- docs/release-notes/version-4.2.md | 30 ++++++++++++++++-------------- netbox/release.yaml | 2 +- requirements.txt | 2 +- 3 files changed, 18 insertions(+), 16 deletions(-) diff --git a/docs/release-notes/version-4.2.md b/docs/release-notes/version-4.2.md index 75e992cca..600795895 100644 --- a/docs/release-notes/version-4.2.md +++ b/docs/release-notes/version-4.2.md @@ -1,31 +1,33 @@ # NetBox v4.2 -## v4.2.5 (2025-03-05) +## v4.2.5 (2025-03-06) ### Enhancements +* [#17357](https://github.com/netbox-community/netbox/issues/17357) - Use VirtualChassis name as fallback for unnamed devices +* [#17542](https://github.com/netbox-community/netbox/issues/17542) - Add contact assignments to VPN tunnels +* [#17944](https://github.com/netbox-community/netbox/issues/17944) - Allow script inputs to be filtered on ObjectVar and MultiObjectVar selections +* [#18024](https://github.com/netbox-community/netbox/issues/18024) - Add permalink URL pattern to match a custom script by module and class name +* [#18095](https://github.com/netbox-community/netbox/issues/18095) - Ensure contacts are shown on children of objects with contacts * [#18141](https://github.com/netbox-community/netbox/issues/18141) - Support "Quick Add" for plugins * [#18403](https://github.com/netbox-community/netbox/issues/18403) - Improve performance of job list views -* [#18095](https://github.com/netbox-community/netbox/issues/18095) - Ensure contacts are shown on children of objects with contacts -* [#17944](https://github.com/netbox-community/netbox/issues/17944) - Allow script inputs to be filtered on ObjectVar and MultiObjectVar selections -* [#17357](https://github.com/netbox-community/netbox/issues/17357) - Use VirtualChassis name as fallback for unnamed devices -* [#18772](https://github.com/netbox-community/netbox/issues/18772) - Add "type" filter for virtual circuits * [#18693](https://github.com/netbox-community/netbox/issues/18693) - Support setting VLAN translation on bulk edit of interfaces -* [#18024](https://github.com/netbox-community/netbox/issues/18024) - Add permalink URL pattern to match a custom script by module and class name -* [#17542](https://github.com/netbox-community/netbox/issues/17542) - Add contact assignments to VPN tunnels +* [#18772](https://github.com/netbox-community/netbox/issues/18772) - Add "type" filter for virtual circuits +* [#18774](https://github.com/netbox-community/netbox/issues/18774) - Add tooltip preview of tag descriptions when hovering over tags ### Bug Fixes -* [#18768](https://github.com/netbox-community/netbox/issues/18768) - Fix removing a secondary MAC address from an interface -* [#18722](https://github.com/netbox-community/netbox/issues/18722) - Improve UI feedback on failed script execution -* [#18605](https://github.com/netbox-community/netbox/issues/18605) - Limit VLAN selection dropdown to choices appropriate to site * [#15016](https://github.com/netbox-community/netbox/issues/15016) - Prevent AssertionError when adding multiple devices "mid-span" in a cable trace -* [#17796](https://github.com/netbox-community/netbox/issues/17796) - Fix IndexError on "Create & Add Another" operation on custom field choices * [#15924](https://github.com/netbox-community/netbox/issues/15924) - Prevent setting tagged VLANs on interfaces with mode: tagged-all -* [#18758](https://github.com/netbox-community/netbox/issues/18758) - Fix FieldError when sorting by account count field in providers list -* [#18753](https://github.com/netbox-community/netbox/issues/18753) - Prevent webhooks from being triggered on a script dry-run * [#17488](https://github.com/netbox-community/netbox/issues/17488) - Ensure VLANGroup.vid_ranges shows up in API results -* [#18451](https://github.com/netbox-community/netbox/pull/18451) - Allow primary key for nested models in OpenAPI request schemas +* [#17796](https://github.com/netbox-community/netbox/issues/17796) - Fix IndexError on "Create & Add Another" operation on custom field choices +* [#17709](https://github.com/netbox-community/netbox/issues/17709) - Allow primary key for nested models in OpenAPI request schemas +* [#18605](https://github.com/netbox-community/netbox/issues/18605) - Limit VLAN selection dropdown to choices appropriate to site +* [#18722](https://github.com/netbox-community/netbox/issues/18722) - Improve UI feedback on failed script execution +* [#18729](https://github.com/netbox-community/netbox/issues/18729) - Fix unpredictable ordering on querysets with annotations/groupings +* [#18753](https://github.com/netbox-community/netbox/issues/18753) - Prevent webhooks from being triggered on a script dry-run +* [#18758](https://github.com/netbox-community/netbox/issues/18758) - Fix FieldError when sorting by account count field in providers list +* [#18768](https://github.com/netbox-community/netbox/issues/18768) - Fix removing a secondary MAC address from an interface --- diff --git a/netbox/release.yaml b/netbox/release.yaml index 89259f8f5..4653aeec2 100644 --- a/netbox/release.yaml +++ b/netbox/release.yaml @@ -1,3 +1,3 @@ version: "4.2.5" edition: "Community" -published: "2025-03-05" +published: "2025-03-06" diff --git a/requirements.txt b/requirements.txt index 8bd8f8073..4a9ac2aa0 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,4 +1,4 @@ -Django==5.1.6 +Django==5.1.7 django-cors-headers==4.7.0 django-debug-toolbar==5.0.1 django-filter==25.1 From dffa380e5ca63cf34bc9b5b2bc0e8b16bea4c200 Mon Sep 17 00:00:00 2001 From: Jeremy Stretch Date: Thu, 6 Mar 2025 09:50:32 -0500 Subject: [PATCH 140/152] Tweak issue ordering --- docs/release-notes/version-4.2.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/release-notes/version-4.2.md b/docs/release-notes/version-4.2.md index 600795895..67493806b 100644 --- a/docs/release-notes/version-4.2.md +++ b/docs/release-notes/version-4.2.md @@ -20,8 +20,8 @@ * [#15016](https://github.com/netbox-community/netbox/issues/15016) - Prevent AssertionError when adding multiple devices "mid-span" in a cable trace * [#15924](https://github.com/netbox-community/netbox/issues/15924) - Prevent setting tagged VLANs on interfaces with mode: tagged-all * [#17488](https://github.com/netbox-community/netbox/issues/17488) - Ensure VLANGroup.vid_ranges shows up in API results -* [#17796](https://github.com/netbox-community/netbox/issues/17796) - Fix IndexError on "Create & Add Another" operation on custom field choices * [#17709](https://github.com/netbox-community/netbox/issues/17709) - Allow primary key for nested models in OpenAPI request schemas +* [#17796](https://github.com/netbox-community/netbox/issues/17796) - Fix IndexError on "Create & Add Another" operation on custom field choices * [#18605](https://github.com/netbox-community/netbox/issues/18605) - Limit VLAN selection dropdown to choices appropriate to site * [#18722](https://github.com/netbox-community/netbox/issues/18722) - Improve UI feedback on failed script execution * [#18729](https://github.com/netbox-community/netbox/issues/18729) - Fix unpredictable ordering on querysets with annotations/groupings From 3ef7ab4416bb33c3216526b1bb5e2b4cabeb7edd Mon Sep 17 00:00:00 2001 From: Renato Almeida de Oliveira Date: Thu, 6 Mar 2025 12:41:41 -0300 Subject: [PATCH 141/152] Fixes: #18579 Add contact filters to services (#18818) * Add Contact filter to Services * Add ContactModelFilterForm to ProviderAccountFilterForm * Add Contact filter support for Aggregate * Add Contact filter support for Prefix * Add Contact filter to IPRange * Add Contact filter to IPAddress * Add Contact filter to L2VPN * Add Contact filter to TunnelGroup * Add Contact filter to Tunnel * Add ContactModelFilterSet to ProviderAccountFilterSet * Fixes classes inheritance order Setup NetBoxModelFilterSetForm as the last inherited class Co-authored-by: Jason Novinger --------- Co-authored-by: Jason Novinger --- netbox/circuits/filtersets.py | 2 +- netbox/circuits/forms/filtersets.py | 3 ++- netbox/ipam/filtersets.py | 13 +++++++------ netbox/ipam/forms/filtersets.py | 17 +++++++++++------ netbox/vpn/filtersets.py | 8 ++++---- netbox/vpn/forms/filtersets.py | 14 ++++++++++---- 6 files changed, 35 insertions(+), 22 deletions(-) diff --git a/netbox/circuits/filtersets.py b/netbox/circuits/filtersets.py index 188b5343e..7775255fc 100644 --- a/netbox/circuits/filtersets.py +++ b/netbox/circuits/filtersets.py @@ -95,7 +95,7 @@ class ProviderFilterSet(NetBoxModelFilterSet, ContactModelFilterSet): ) -class ProviderAccountFilterSet(NetBoxModelFilterSet): +class ProviderAccountFilterSet(NetBoxModelFilterSet, ContactModelFilterSet): provider_id = django_filters.ModelMultipleChoiceFilter( queryset=Provider.objects.all(), label=_('Provider (ID)'), diff --git a/netbox/circuits/forms/filtersets.py b/netbox/circuits/forms/filtersets.py index a75684ef5..9b2129989 100644 --- a/netbox/circuits/forms/filtersets.py +++ b/netbox/circuits/forms/filtersets.py @@ -66,11 +66,12 @@ class ProviderFilterForm(ContactModelFilterForm, NetBoxModelFilterSetForm): tag = TagFilterField(model) -class ProviderAccountFilterForm(NetBoxModelFilterSetForm): +class ProviderAccountFilterForm(ContactModelFilterForm, NetBoxModelFilterSetForm): model = ProviderAccount fieldsets = ( FieldSet('q', 'filter_id', 'tag'), FieldSet('provider_id', 'account', name=_('Attributes')), + FieldSet('contact', 'contact_role', 'contact_group', name=_('Contacts')), ) provider_id = DynamicModelMultipleChoiceField( queryset=Provider.objects.all(), diff --git a/netbox/ipam/filtersets.py b/netbox/ipam/filtersets.py index 81cbd2ef8..b23322a22 100644 --- a/netbox/ipam/filtersets.py +++ b/netbox/ipam/filtersets.py @@ -12,7 +12,8 @@ from netaddr.core import AddrFormatError from circuits.models import Provider from dcim.models import Device, Interface, Region, Site, SiteGroup from netbox.filtersets import ChangeLoggedModelFilterSet, OrganizationalModelFilterSet, NetBoxModelFilterSet -from tenancy.filtersets import TenancyFilterSet +from tenancy.filtersets import ContactModelFilterSet, TenancyFilterSet + from utilities.filters import ( ContentTypeFilter, MultiValueCharFilter, MultiValueNumberFilter, NumericArrayFilter, TreeNodeMultipleChoiceFilter, ) @@ -148,7 +149,7 @@ class RIRFilterSet(OrganizationalModelFilterSet): fields = ('id', 'name', 'slug', 'is_private', 'description') -class AggregateFilterSet(NetBoxModelFilterSet, TenancyFilterSet): +class AggregateFilterSet(NetBoxModelFilterSet, TenancyFilterSet, ContactModelFilterSet): family = django_filters.NumberFilter( field_name='prefix', lookup_expr='family' @@ -276,7 +277,7 @@ class RoleFilterSet(OrganizationalModelFilterSet): fields = ('id', 'name', 'slug', 'description', 'weight') -class PrefixFilterSet(NetBoxModelFilterSet, ScopedFilterSet, TenancyFilterSet): +class PrefixFilterSet(NetBoxModelFilterSet, ScopedFilterSet, TenancyFilterSet, ContactModelFilterSet): family = django_filters.NumberFilter( field_name='prefix', lookup_expr='family' @@ -430,7 +431,7 @@ class PrefixFilterSet(NetBoxModelFilterSet, ScopedFilterSet, TenancyFilterSet): ).distinct() -class IPRangeFilterSet(TenancyFilterSet, NetBoxModelFilterSet): +class IPRangeFilterSet(TenancyFilterSet, NetBoxModelFilterSet, ContactModelFilterSet): family = django_filters.NumberFilter( field_name='start_address', lookup_expr='family' @@ -522,7 +523,7 @@ class IPRangeFilterSet(TenancyFilterSet, NetBoxModelFilterSet): return queryset.filter(q) -class IPAddressFilterSet(NetBoxModelFilterSet, TenancyFilterSet): +class IPAddressFilterSet(NetBoxModelFilterSet, TenancyFilterSet, ContactModelFilterSet): family = django_filters.NumberFilter( field_name='address', lookup_expr='family' @@ -1136,7 +1137,7 @@ class ServiceTemplateFilterSet(NetBoxModelFilterSet): return queryset.filter(qs_filter) -class ServiceFilterSet(NetBoxModelFilterSet): +class ServiceFilterSet(ContactModelFilterSet, NetBoxModelFilterSet): device_id = django_filters.ModelMultipleChoiceFilter( queryset=Device.objects.all(), label=_('Device (ID)'), diff --git a/netbox/ipam/forms/filtersets.py b/netbox/ipam/forms/filtersets.py index 3f951512b..a4faa18ed 100644 --- a/netbox/ipam/forms/filtersets.py +++ b/netbox/ipam/forms/filtersets.py @@ -6,7 +6,7 @@ from ipam.choices import * from ipam.constants import * from ipam.models import * from netbox.forms import NetBoxModelFilterSetForm -from tenancy.forms import TenancyFilterForm +from tenancy.forms import ContactModelFilterForm, TenancyFilterForm from utilities.forms import BOOLEAN_WITH_BLANK_CHOICES, add_blank_choice from utilities.forms.fields import DynamicModelChoiceField, DynamicModelMultipleChoiceField, TagFilterField from utilities.forms.rendering import FieldSet @@ -94,12 +94,13 @@ class RIRFilterForm(NetBoxModelFilterSetForm): tag = TagFilterField(model) -class AggregateFilterForm(TenancyFilterForm, NetBoxModelFilterSetForm): +class AggregateFilterForm(ContactModelFilterForm, TenancyFilterForm, NetBoxModelFilterSetForm): model = Aggregate fieldsets = ( FieldSet('q', 'filter_id', 'tag'), FieldSet('family', 'rir_id', name=_('Attributes')), FieldSet('tenant_group_id', 'tenant_id', name=_('Tenant')), + FieldSet('contact', 'contact_role', 'contact_group', name=_('Contacts')), ) family = forms.ChoiceField( required=False, @@ -162,7 +163,7 @@ class RoleFilterForm(NetBoxModelFilterSetForm): tag = TagFilterField(model) -class PrefixFilterForm(TenancyFilterForm, NetBoxModelFilterSetForm): +class PrefixFilterForm(ContactModelFilterForm, TenancyFilterForm, NetBoxModelFilterSetForm, ): model = Prefix fieldsets = ( FieldSet('q', 'filter_id', 'tag'), @@ -174,6 +175,7 @@ class PrefixFilterForm(TenancyFilterForm, NetBoxModelFilterSetForm): FieldSet('vrf_id', 'present_in_vrf_id', name=_('VRF')), FieldSet('region_id', 'site_group_id', 'site_id', 'location_id', name=_('Scope')), FieldSet('tenant_group_id', 'tenant_id', name=_('Tenant')), + FieldSet('contact', 'contact_role', 'contact_group', name=_('Contacts')), ) mask_length__lte = forms.IntegerField( widget=forms.HiddenInput() @@ -262,12 +264,13 @@ class PrefixFilterForm(TenancyFilterForm, NetBoxModelFilterSetForm): tag = TagFilterField(model) -class IPRangeFilterForm(TenancyFilterForm, NetBoxModelFilterSetForm): +class IPRangeFilterForm(ContactModelFilterForm, TenancyFilterForm, NetBoxModelFilterSetForm): model = IPRange fieldsets = ( FieldSet('q', 'filter_id', 'tag'), FieldSet('family', 'vrf_id', 'status', 'role_id', 'mark_utilized', name=_('Attributes')), FieldSet('tenant_group_id', 'tenant_id', name=_('Tenant')), + FieldSet('contact', 'contact_role', 'contact_group', name=_('Contacts')), ) family = forms.ChoiceField( required=False, @@ -301,7 +304,7 @@ class IPRangeFilterForm(TenancyFilterForm, NetBoxModelFilterSetForm): tag = TagFilterField(model) -class IPAddressFilterForm(TenancyFilterForm, NetBoxModelFilterSetForm): +class IPAddressFilterForm(ContactModelFilterForm, TenancyFilterForm, NetBoxModelFilterSetForm): model = IPAddress fieldsets = ( FieldSet('q', 'filter_id', 'tag'), @@ -312,6 +315,7 @@ class IPAddressFilterForm(TenancyFilterForm, NetBoxModelFilterSetForm): FieldSet('vrf_id', 'present_in_vrf_id', name=_('VRF')), FieldSet('tenant_group_id', 'tenant_id', name=_('Tenant')), FieldSet('device_id', 'virtual_machine_id', name=_('Device/VM')), + FieldSet('contact', 'contact_role', 'contact_group', name=_('Contacts')), ) selector_fields = ('filter_id', 'q', 'region_id', 'group_id', 'parent', 'status', 'role') parent = forms.CharField( @@ -590,12 +594,13 @@ class ServiceTemplateFilterForm(NetBoxModelFilterSetForm): tag = TagFilterField(model) -class ServiceFilterForm(ServiceTemplateFilterForm): +class ServiceFilterForm(ContactModelFilterForm, ServiceTemplateFilterForm): model = Service fieldsets = ( FieldSet('q', 'filter_id', 'tag'), FieldSet('protocol', 'port', name=_('Attributes')), FieldSet('device_id', 'virtual_machine_id', name=_('Assignment')), + FieldSet('contact', 'contact_role', 'contact_group', name=_('Contacts')), ) device_id = DynamicModelMultipleChoiceField( queryset=Device.objects.all(), diff --git a/netbox/vpn/filtersets.py b/netbox/vpn/filtersets.py index 6403b662f..5b8d1899b 100644 --- a/netbox/vpn/filtersets.py +++ b/netbox/vpn/filtersets.py @@ -5,7 +5,7 @@ from django.utils.translation import gettext as _ from dcim.models import Device, Interface from ipam.models import IPAddress, RouteTarget, VLAN from netbox.filtersets import NetBoxModelFilterSet, OrganizationalModelFilterSet -from tenancy.filtersets import TenancyFilterSet +from tenancy.filtersets import ContactModelFilterSet, TenancyFilterSet from utilities.filters import ContentTypeFilter, MultiValueCharFilter, MultiValueNumberFilter from virtualization.models import VirtualMachine, VMInterface from .choices import * @@ -25,14 +25,14 @@ __all__ = ( ) -class TunnelGroupFilterSet(OrganizationalModelFilterSet): +class TunnelGroupFilterSet(OrganizationalModelFilterSet, ContactModelFilterSet): class Meta: model = TunnelGroup fields = ('id', 'name', 'slug', 'description') -class TunnelFilterSet(NetBoxModelFilterSet, TenancyFilterSet): +class TunnelFilterSet(NetBoxModelFilterSet, TenancyFilterSet, ContactModelFilterSet): status = django_filters.MultipleChoiceFilter( choices=TunnelStatusChoices ) @@ -293,7 +293,7 @@ class IPSecProfileFilterSet(NetBoxModelFilterSet): ) -class L2VPNFilterSet(NetBoxModelFilterSet, TenancyFilterSet): +class L2VPNFilterSet(NetBoxModelFilterSet, TenancyFilterSet, ContactModelFilterSet): type = django_filters.MultipleChoiceFilter( choices=L2VPNTypeChoices, null_value=None diff --git a/netbox/vpn/forms/filtersets.py b/netbox/vpn/forms/filtersets.py index 10dc441e2..619956156 100644 --- a/netbox/vpn/forms/filtersets.py +++ b/netbox/vpn/forms/filtersets.py @@ -5,7 +5,7 @@ from django.utils.translation import gettext as _ from dcim.models import Device, Region, Site from ipam.models import RouteTarget, VLAN from netbox.forms import NetBoxModelFilterSetForm -from tenancy.forms import TenancyFilterForm +from tenancy.forms import ContactModelFilterForm, TenancyFilterForm from utilities.forms.fields import ( ContentTypeMultipleChoiceField, DynamicModelChoiceField, DynamicModelMultipleChoiceField, TagFilterField, ) @@ -30,18 +30,23 @@ __all__ = ( ) -class TunnelGroupFilterForm(NetBoxModelFilterSetForm): +class TunnelGroupFilterForm(ContactModelFilterForm, NetBoxModelFilterSetForm): model = TunnelGroup + fieldsets = ( + FieldSet('q', 'filter_id', 'tag'), + FieldSet('contact', 'contact_role', 'contact_group', name=_('Contacts')), + ) tag = TagFilterField(model) -class TunnelFilterForm(TenancyFilterForm, NetBoxModelFilterSetForm): +class TunnelFilterForm(ContactModelFilterForm, TenancyFilterForm, NetBoxModelFilterSetForm): model = Tunnel fieldsets = ( FieldSet('q', 'filter_id', 'tag'), FieldSet('status', 'encapsulation', 'tunnel_id', name=_('Tunnel')), FieldSet('ipsec_profile_id', name=_('Security')), FieldSet('tenant_group_id', 'tenant_id', name=_('Tenancy')), + FieldSet('contact', 'contact_role', 'contact_group', name=_('Contacts')), ) status = forms.MultipleChoiceField( label=_('Status'), @@ -206,12 +211,13 @@ class IPSecProfileFilterForm(NetBoxModelFilterSetForm): tag = TagFilterField(model) -class L2VPNFilterForm(TenancyFilterForm, NetBoxModelFilterSetForm): +class L2VPNFilterForm(ContactModelFilterForm, TenancyFilterForm, NetBoxModelFilterSetForm): model = L2VPN fieldsets = ( FieldSet('q', 'filter_id', 'tag'), FieldSet('type', 'import_target_id', 'export_target_id', name=_('Attributes')), FieldSet('tenant_group_id', 'tenant_id', name=_('Tenant')), + FieldSet('contact', 'contact_role', 'contact_group', name=_('Contacts')), ) type = forms.ChoiceField( label=_('Type'), From f9c8d12a5173fa68372c2ef15bece25a9d0dcaa2 Mon Sep 17 00:00:00 2001 From: bctiemann Date: Thu, 6 Mar 2025 12:11:55 -0500 Subject: [PATCH 142/152] Add docstrings for get_queryset base class methods (#18832) --- netbox/netbox/api/viewsets/__init__.py | 4 ++++ netbox/netbox/views/generic/bulk_views.py | 4 ++++ 2 files changed, 8 insertions(+) diff --git a/netbox/netbox/api/viewsets/__init__.py b/netbox/netbox/api/viewsets/__init__.py index e5993828e..76fc7e0b1 100644 --- a/netbox/netbox/api/viewsets/__init__.py +++ b/netbox/netbox/api/viewsets/__init__.py @@ -122,6 +122,10 @@ class NetBoxModelViewSet( return obj def get_queryset(self): + """ + Reapply model-level ordering in case it has been lost through .annotate(). + https://code.djangoproject.com/ticket/32811 + """ qs = super().get_queryset() ordering = qs.model._meta.ordering return qs.order_by(*ordering) diff --git a/netbox/netbox/views/generic/bulk_views.py b/netbox/netbox/views/generic/bulk_views.py index 72eaf6f1a..967c0eadb 100644 --- a/netbox/netbox/views/generic/bulk_views.py +++ b/netbox/netbox/views/generic/bulk_views.py @@ -126,6 +126,10 @@ class ObjectListView(BaseMultiObjectView, ActionsMixin, TableMixin): # def get_queryset(self, request): + """ + Reapply model-level ordering in case it has been lost through .annotate(). + https://code.djangoproject.com/ticket/32811 + """ qs = super().get_queryset(request) ordering = qs.model._meta.ordering return qs.order_by(*ordering) From 6d69c76b83caaab1da59e04153448a1128294a88 Mon Sep 17 00:00:00 2001 From: github-actions <41898282+github-actions[bot]@users.noreply.github.com> Date: Fri, 7 Mar 2025 05:02:48 +0000 Subject: [PATCH 143/152] Update source translation strings --- netbox/translations/en/LC_MESSAGES/django.po | 526 ++++++++++--------- 1 file changed, 266 insertions(+), 260 deletions(-) diff --git a/netbox/translations/en/LC_MESSAGES/django.po b/netbox/translations/en/LC_MESSAGES/django.po index 30f0bf926..185ef47f7 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: 2025-03-06 05:01+0000\n" +"POT-Creation-Date: 2025-03-07 05:02+0000\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -164,7 +164,7 @@ msgstr "" #: netbox/dcim/filtersets.py:465 netbox/dcim/filtersets.py:1022 #: netbox/dcim/filtersets.py:1370 netbox/dcim/filtersets.py:2027 #: netbox/dcim/filtersets.py:2270 netbox/dcim/filtersets.py:2328 -#: netbox/ipam/filtersets.py:928 netbox/virtualization/filtersets.py:139 +#: netbox/ipam/filtersets.py:929 netbox/virtualization/filtersets.py:139 #: netbox/vpn/filtersets.py:358 msgid "Region (ID)" msgstr "" @@ -176,7 +176,7 @@ msgstr "" #: netbox/dcim/filtersets.py:472 netbox/dcim/filtersets.py:1029 #: netbox/dcim/filtersets.py:1377 netbox/dcim/filtersets.py:2034 #: netbox/dcim/filtersets.py:2277 netbox/dcim/filtersets.py:2335 -#: netbox/extras/filtersets.py:509 netbox/ipam/filtersets.py:935 +#: netbox/extras/filtersets.py:509 netbox/ipam/filtersets.py:936 #: netbox/virtualization/filtersets.py:146 netbox/vpn/filtersets.py:353 msgid "Region (slug)" msgstr "" @@ -187,7 +187,7 @@ msgstr "" #: netbox/dcim/filtersets.py:347 netbox/dcim/filtersets.py:478 #: netbox/dcim/filtersets.py:1035 netbox/dcim/filtersets.py:1383 #: netbox/dcim/filtersets.py:2040 netbox/dcim/filtersets.py:2283 -#: netbox/dcim/filtersets.py:2341 netbox/ipam/filtersets.py:941 +#: netbox/dcim/filtersets.py:2341 netbox/ipam/filtersets.py:942 #: netbox/virtualization/filtersets.py:152 msgid "Site group (ID)" msgstr "" @@ -199,13 +199,13 @@ msgstr "" #: netbox/dcim/filtersets.py:1042 netbox/dcim/filtersets.py:1390 #: netbox/dcim/filtersets.py:2047 netbox/dcim/filtersets.py:2290 #: netbox/dcim/filtersets.py:2348 netbox/extras/filtersets.py:515 -#: netbox/ipam/filtersets.py:948 netbox/virtualization/filtersets.py:159 +#: netbox/ipam/filtersets.py:949 netbox/virtualization/filtersets.py:159 msgid "Site group (slug)" msgstr "" #: netbox/circuits/filtersets.py:62 netbox/circuits/forms/filtersets.py:59 -#: netbox/circuits/forms/filtersets.py:182 -#: netbox/circuits/forms/filtersets.py:240 +#: netbox/circuits/forms/filtersets.py:183 +#: netbox/circuits/forms/filtersets.py:241 #: netbox/circuits/tables/circuits.py:129 netbox/dcim/forms/bulk_edit.py:172 #: netbox/dcim/forms/bulk_edit.py:333 netbox/dcim/forms/bulk_edit.py:686 #: netbox/dcim/forms/bulk_edit.py:891 netbox/dcim/forms/bulk_import.py:133 @@ -225,8 +225,8 @@ msgstr "" #: netbox/dcim/tables/racks.py:121 netbox/dcim/tables/racks.py:206 #: netbox/dcim/tables/sites.py:133 netbox/extras/filtersets.py:525 #: netbox/ipam/forms/bulk_edit.py:468 netbox/ipam/forms/bulk_import.py:452 -#: netbox/ipam/forms/filtersets.py:155 netbox/ipam/forms/filtersets.py:229 -#: netbox/ipam/forms/filtersets.py:435 netbox/ipam/forms/filtersets.py:530 +#: netbox/ipam/forms/filtersets.py:156 netbox/ipam/forms/filtersets.py:231 +#: netbox/ipam/forms/filtersets.py:439 netbox/ipam/forms/filtersets.py:534 #: netbox/ipam/forms/model_forms.py:679 netbox/ipam/tables/vlans.py:87 #: netbox/ipam/tables/vlans.py:197 netbox/templates/dcim/device.html:22 #: netbox/templates/dcim/inc/cable_termination.html:8 @@ -245,7 +245,7 @@ msgstr "" #: netbox/virtualization/forms/model_forms.py:104 #: netbox/virtualization/forms/model_forms.py:178 #: netbox/virtualization/tables/virtualmachines.py:33 -#: netbox/vpn/forms/filtersets.py:266 netbox/wireless/forms/filtersets.py:88 +#: netbox/vpn/forms/filtersets.py:272 netbox/wireless/forms/filtersets.py:88 #: netbox/wireless/forms/model_forms.py:79 #: netbox/wireless/forms/model_forms.py:121 msgid "Site" @@ -255,7 +255,7 @@ msgstr "" #: netbox/circuits/filtersets.py:315 netbox/dcim/base_filtersets.py:53 #: netbox/dcim/filtersets.py:243 netbox/dcim/filtersets.py:364 #: netbox/dcim/filtersets.py:459 netbox/extras/filtersets.py:531 -#: netbox/ipam/filtersets.py:243 netbox/ipam/filtersets.py:958 +#: netbox/ipam/filtersets.py:244 netbox/ipam/filtersets.py:959 #: netbox/virtualization/filtersets.py:169 netbox/vpn/filtersets.py:363 msgid "Site (slug)" msgstr "" @@ -274,14 +274,14 @@ msgstr "" #: netbox/circuits/filtersets.py:101 netbox/circuits/filtersets.py:128 #: netbox/circuits/filtersets.py:162 netbox/circuits/filtersets.py:338 #: netbox/circuits/filtersets.py:406 netbox/circuits/filtersets.py:482 -#: netbox/circuits/filtersets.py:550 netbox/ipam/filtersets.py:248 +#: netbox/circuits/filtersets.py:550 netbox/ipam/filtersets.py:249 msgid "Provider (ID)" msgstr "" #: netbox/circuits/filtersets.py:107 netbox/circuits/filtersets.py:134 #: netbox/circuits/filtersets.py:168 netbox/circuits/filtersets.py:344 #: netbox/circuits/filtersets.py:488 netbox/circuits/filtersets.py:556 -#: netbox/ipam/filtersets.py:254 +#: netbox/ipam/filtersets.py:255 msgid "Provider (slug)" msgstr "" @@ -313,8 +313,8 @@ msgstr "" #: netbox/dcim/filtersets.py:358 netbox/dcim/filtersets.py:453 #: netbox/dcim/filtersets.py:1046 netbox/dcim/filtersets.py:1395 #: netbox/dcim/filtersets.py:2052 netbox/dcim/filtersets.py:2294 -#: netbox/dcim/filtersets.py:2353 netbox/ipam/filtersets.py:237 -#: netbox/ipam/filtersets.py:952 netbox/virtualization/filtersets.py:163 +#: netbox/dcim/filtersets.py:2353 netbox/ipam/filtersets.py:238 +#: netbox/ipam/filtersets.py:953 netbox/virtualization/filtersets.py:163 #: netbox/vpn/filtersets.py:368 msgid "Site (ID)" msgstr "" @@ -359,9 +359,9 @@ msgstr "" #: netbox/circuits/filtersets.py:277 netbox/circuits/forms/bulk_edit.py:195 #: netbox/circuits/forms/bulk_edit.py:284 #: netbox/circuits/forms/bulk_import.py:128 -#: netbox/circuits/forms/filtersets.py:223 -#: netbox/circuits/forms/filtersets.py:250 -#: netbox/circuits/forms/filtersets.py:296 +#: netbox/circuits/forms/filtersets.py:224 +#: netbox/circuits/forms/filtersets.py:251 +#: netbox/circuits/forms/filtersets.py:297 #: netbox/circuits/forms/model_forms.py:139 #: netbox/circuits/forms/model_forms.py:162 #: netbox/circuits/forms/model_forms.py:262 @@ -424,8 +424,8 @@ msgstr "" #: netbox/circuits/filtersets.py:541 netbox/circuits/forms/bulk_edit.py:355 #: netbox/circuits/forms/bulk_import.py:249 -#: netbox/circuits/forms/filtersets.py:372 -#: netbox/circuits/forms/filtersets.py:378 +#: netbox/circuits/forms/filtersets.py:373 +#: netbox/circuits/forms/filtersets.py:379 #: netbox/circuits/forms/model_forms.py:343 #: netbox/circuits/forms/model_forms.py:358 #: netbox/circuits/tables/virtual_circuits.py:88 @@ -435,7 +435,7 @@ msgid "Virtual circuit" msgstr "" #: netbox/circuits/filtersets.py:577 netbox/dcim/filtersets.py:1269 -#: netbox/dcim/filtersets.py:1634 netbox/ipam/filtersets.py:601 +#: netbox/dcim/filtersets.py:1634 netbox/ipam/filtersets.py:602 #: netbox/vpn/filtersets.py:102 netbox/vpn/filtersets.py:401 msgid "Interface (ID)" msgstr "" @@ -597,17 +597,17 @@ msgstr "" #: netbox/circuits/forms/bulk_import.py:43 #: netbox/circuits/forms/bulk_import.py:58 #: netbox/circuits/forms/bulk_import.py:81 -#: netbox/circuits/forms/filtersets.py:78 -#: netbox/circuits/forms/filtersets.py:96 -#: netbox/circuits/forms/filtersets.py:124 -#: netbox/circuits/forms/filtersets.py:142 -#: netbox/circuits/forms/filtersets.py:224 -#: netbox/circuits/forms/filtersets.py:268 -#: netbox/circuits/forms/filtersets.py:291 -#: netbox/circuits/forms/filtersets.py:329 -#: netbox/circuits/forms/filtersets.py:337 -#: netbox/circuits/forms/filtersets.py:373 -#: netbox/circuits/forms/filtersets.py:396 +#: netbox/circuits/forms/filtersets.py:79 +#: netbox/circuits/forms/filtersets.py:97 +#: netbox/circuits/forms/filtersets.py:125 +#: netbox/circuits/forms/filtersets.py:143 +#: netbox/circuits/forms/filtersets.py:225 +#: netbox/circuits/forms/filtersets.py:269 +#: netbox/circuits/forms/filtersets.py:292 +#: netbox/circuits/forms/filtersets.py:330 +#: netbox/circuits/forms/filtersets.py:338 +#: netbox/circuits/forms/filtersets.py:374 +#: netbox/circuits/forms/filtersets.py:397 #: netbox/circuits/forms/model_forms.py:60 #: netbox/circuits/forms/model_forms.py:76 #: netbox/circuits/forms/model_forms.py:110 @@ -630,15 +630,16 @@ msgstr "" msgid "Provider" msgstr "" -#: netbox/circuits/forms/bulk_edit.py:92 netbox/circuits/forms/filtersets.py:99 +#: netbox/circuits/forms/bulk_edit.py:92 +#: netbox/circuits/forms/filtersets.py:100 #: netbox/templates/circuits/providernetwork.html:28 msgid "Service ID" msgstr "" #: netbox/circuits/forms/bulk_edit.py:112 #: netbox/circuits/forms/bulk_edit.py:303 -#: netbox/circuits/forms/filtersets.py:115 -#: netbox/circuits/forms/filtersets.py:320 netbox/dcim/forms/bulk_edit.py:210 +#: netbox/circuits/forms/filtersets.py:116 +#: netbox/circuits/forms/filtersets.py:321 netbox/dcim/forms/bulk_edit.py:210 #: netbox/dcim/forms/bulk_edit.py:613 netbox/dcim/forms/bulk_edit.py:822 #: netbox/dcim/forms/bulk_edit.py:1191 netbox/dcim/forms/bulk_edit.py:1218 #: netbox/dcim/forms/bulk_edit.py:1742 netbox/dcim/forms/filtersets.py:1065 @@ -663,8 +664,8 @@ msgstr "" #: netbox/circuits/forms/bulk_edit.py:331 #: netbox/circuits/forms/bulk_import.py:94 #: netbox/circuits/forms/bulk_import.py:221 -#: netbox/circuits/forms/filtersets.py:137 -#: netbox/circuits/forms/filtersets.py:358 +#: netbox/circuits/forms/filtersets.py:138 +#: netbox/circuits/forms/filtersets.py:359 #: netbox/circuits/tables/circuits.py:65 netbox/circuits/tables/circuits.py:200 #: netbox/circuits/tables/virtual_circuits.py:58 #: netbox/core/forms/bulk_edit.py:18 netbox/core/forms/filtersets.py:33 @@ -716,7 +717,7 @@ msgstr "" #: netbox/virtualization/forms/model_forms.py:65 #: netbox/virtualization/tables/clusters.py:66 #: netbox/vpn/forms/bulk_edit.py:264 netbox/vpn/forms/bulk_import.py:264 -#: netbox/vpn/forms/filtersets.py:217 netbox/vpn/forms/model_forms.py:85 +#: netbox/vpn/forms/filtersets.py:223 netbox/vpn/forms/model_forms.py:85 #: netbox/vpn/forms/model_forms.py:120 netbox/vpn/forms/model_forms.py:232 msgid "Type" msgstr "" @@ -725,8 +726,8 @@ msgstr "" #: netbox/circuits/forms/bulk_edit.py:326 #: netbox/circuits/forms/bulk_import.py:87 #: netbox/circuits/forms/bulk_import.py:214 -#: netbox/circuits/forms/filtersets.py:150 -#: netbox/circuits/forms/filtersets.py:345 +#: netbox/circuits/forms/filtersets.py:151 +#: netbox/circuits/forms/filtersets.py:346 #: netbox/circuits/forms/model_forms.py:116 #: netbox/circuits/forms/model_forms.py:330 #: netbox/templates/circuits/virtualcircuit.html:31 @@ -738,8 +739,8 @@ msgstr "" #: netbox/circuits/forms/bulk_edit.py:336 #: netbox/circuits/forms/bulk_import.py:100 #: netbox/circuits/forms/bulk_import.py:227 -#: netbox/circuits/forms/filtersets.py:161 -#: netbox/circuits/forms/filtersets.py:361 netbox/core/forms/filtersets.py:38 +#: netbox/circuits/forms/filtersets.py:162 +#: netbox/circuits/forms/filtersets.py:362 netbox/core/forms/filtersets.py:38 #: netbox/core/forms/filtersets.py:80 netbox/core/tables/data.py:23 #: netbox/core/tables/jobs.py:26 netbox/core/tables/tasks.py:88 #: netbox/dcim/forms/bulk_edit.py:110 netbox/dcim/forms/bulk_edit.py:185 @@ -764,8 +765,8 @@ msgstr "" #: netbox/ipam/forms/bulk_edit.py:338 netbox/ipam/forms/bulk_edit.py:490 #: netbox/ipam/forms/bulk_import.py:188 netbox/ipam/forms/bulk_import.py:256 #: netbox/ipam/forms/bulk_import.py:292 netbox/ipam/forms/bulk_import.py:473 -#: netbox/ipam/forms/filtersets.py:212 netbox/ipam/forms/filtersets.py:284 -#: netbox/ipam/forms/filtersets.py:358 netbox/ipam/forms/filtersets.py:542 +#: netbox/ipam/forms/filtersets.py:214 netbox/ipam/forms/filtersets.py:287 +#: netbox/ipam/forms/filtersets.py:362 netbox/ipam/forms/filtersets.py:546 #: netbox/ipam/forms/model_forms.py:511 netbox/ipam/tables/ip.py:183 #: netbox/ipam/tables/ip.py:264 netbox/ipam/tables/ip.py:315 #: netbox/ipam/tables/ip.py:378 netbox/ipam/tables/ip.py:405 @@ -798,7 +799,7 @@ msgstr "" #: netbox/virtualization/tables/clusters.py:74 #: netbox/virtualization/tables/virtualmachines.py:30 #: netbox/vpn/forms/bulk_edit.py:39 netbox/vpn/forms/bulk_import.py:37 -#: netbox/vpn/forms/filtersets.py:47 netbox/vpn/tables/tunnels.py:48 +#: netbox/vpn/forms/filtersets.py:52 netbox/vpn/tables/tunnels.py:48 #: netbox/wireless/forms/bulk_edit.py:45 netbox/wireless/forms/bulk_edit.py:108 #: netbox/wireless/forms/bulk_import.py:45 #: netbox/wireless/forms/bulk_import.py:89 @@ -815,9 +816,9 @@ msgstr "" #: netbox/circuits/forms/bulk_import.py:111 #: netbox/circuits/forms/bulk_import.py:170 #: netbox/circuits/forms/bulk_import.py:232 -#: netbox/circuits/forms/filtersets.py:130 -#: netbox/circuits/forms/filtersets.py:277 -#: netbox/circuits/forms/filtersets.py:331 netbox/dcim/forms/bulk_edit.py:126 +#: netbox/circuits/forms/filtersets.py:131 +#: netbox/circuits/forms/filtersets.py:278 +#: netbox/circuits/forms/filtersets.py:332 netbox/dcim/forms/bulk_edit.py:126 #: netbox/dcim/forms/bulk_edit.py:191 netbox/dcim/forms/bulk_edit.py:350 #: netbox/dcim/forms/bulk_edit.py:470 netbox/dcim/forms/bulk_edit.py:699 #: netbox/dcim/forms/bulk_edit.py:812 netbox/dcim/forms/bulk_edit.py:1770 @@ -842,9 +843,9 @@ msgstr "" #: netbox/ipam/forms/bulk_import.py:249 netbox/ipam/forms/bulk_import.py:285 #: netbox/ipam/forms/bulk_import.py:466 netbox/ipam/forms/filtersets.py:50 #: netbox/ipam/forms/filtersets.py:70 netbox/ipam/forms/filtersets.py:102 -#: netbox/ipam/forms/filtersets.py:122 netbox/ipam/forms/filtersets.py:145 -#: netbox/ipam/forms/filtersets.py:176 netbox/ipam/forms/filtersets.py:270 -#: netbox/ipam/forms/filtersets.py:313 netbox/ipam/forms/filtersets.py:510 +#: netbox/ipam/forms/filtersets.py:123 netbox/ipam/forms/filtersets.py:146 +#: netbox/ipam/forms/filtersets.py:177 netbox/ipam/forms/filtersets.py:272 +#: netbox/ipam/forms/filtersets.py:316 netbox/ipam/forms/filtersets.py:514 #: netbox/ipam/tables/ip.py:408 netbox/ipam/tables/vlans.py:205 #: netbox/templates/circuits/circuit.html:48 #: netbox/templates/circuits/circuitgroup.html:36 @@ -876,7 +877,7 @@ msgstr "" #: netbox/virtualization/forms/filtersets.py:110 #: netbox/vpn/forms/bulk_edit.py:59 netbox/vpn/forms/bulk_edit.py:269 #: netbox/vpn/forms/bulk_import.py:59 netbox/vpn/forms/bulk_import.py:258 -#: netbox/vpn/forms/filtersets.py:214 netbox/wireless/forms/bulk_edit.py:65 +#: netbox/vpn/forms/filtersets.py:219 netbox/wireless/forms/bulk_edit.py:65 #: netbox/wireless/forms/bulk_edit.py:113 #: netbox/wireless/forms/bulk_import.py:57 #: netbox/wireless/forms/bulk_import.py:102 @@ -886,22 +887,22 @@ msgid "Tenant" msgstr "" #: netbox/circuits/forms/bulk_edit.py:159 -#: netbox/circuits/forms/filtersets.py:190 +#: netbox/circuits/forms/filtersets.py:191 msgid "Install date" msgstr "" #: netbox/circuits/forms/bulk_edit.py:164 -#: netbox/circuits/forms/filtersets.py:195 +#: netbox/circuits/forms/filtersets.py:196 msgid "Termination date" msgstr "" #: netbox/circuits/forms/bulk_edit.py:170 -#: netbox/circuits/forms/filtersets.py:202 +#: netbox/circuits/forms/filtersets.py:203 msgid "Commit rate (Kbps)" msgstr "" #: netbox/circuits/forms/bulk_edit.py:176 -#: netbox/circuits/forms/filtersets.py:208 +#: netbox/circuits/forms/filtersets.py:209 #: netbox/circuits/forms/model_forms.py:136 #: netbox/templates/circuits/circuit.html:38 #: netbox/templates/wireless/wirelesslink.html:38 @@ -914,7 +915,7 @@ msgstr "" #: netbox/circuits/forms/bulk_edit.py:181 #: netbox/circuits/forms/bulk_import.py:105 #: netbox/circuits/forms/bulk_import.py:108 -#: netbox/circuits/forms/filtersets.py:212 +#: netbox/circuits/forms/filtersets.py:213 #: netbox/wireless/forms/bulk_edit.py:137 #: netbox/wireless/forms/bulk_import.py:121 #: netbox/wireless/forms/bulk_import.py:124 @@ -929,11 +930,11 @@ msgstr "" #: netbox/circuits/forms/bulk_edit.py:197 #: netbox/circuits/forms/filtersets.py:73 -#: netbox/circuits/forms/filtersets.py:91 -#: netbox/circuits/forms/filtersets.py:110 -#: netbox/circuits/forms/filtersets.py:127 -#: netbox/circuits/forms/filtersets.py:315 -#: netbox/circuits/forms/filtersets.py:330 netbox/core/forms/filtersets.py:68 +#: netbox/circuits/forms/filtersets.py:92 +#: netbox/circuits/forms/filtersets.py:111 +#: netbox/circuits/forms/filtersets.py:128 +#: netbox/circuits/forms/filtersets.py:316 +#: netbox/circuits/forms/filtersets.py:331 netbox/core/forms/filtersets.py:68 #: netbox/core/forms/filtersets.py:136 netbox/dcim/forms/bulk_edit.py:846 #: netbox/dcim/forms/filtersets.py:173 netbox/dcim/forms/filtersets.py:205 #: netbox/dcim/forms/filtersets.py:916 netbox/dcim/forms/filtersets.py:1008 @@ -947,16 +948,16 @@ msgstr "" #: netbox/extras/forms/filtersets.py:169 netbox/extras/forms/filtersets.py:210 #: netbox/extras/forms/filtersets.py:227 netbox/extras/forms/filtersets.py:258 #: netbox/extras/forms/filtersets.py:282 netbox/extras/forms/filtersets.py:449 -#: netbox/ipam/forms/filtersets.py:101 netbox/ipam/forms/filtersets.py:269 -#: netbox/ipam/forms/filtersets.py:310 netbox/ipam/forms/filtersets.py:385 -#: netbox/ipam/forms/filtersets.py:470 netbox/ipam/forms/filtersets.py:483 -#: netbox/ipam/forms/filtersets.py:508 netbox/ipam/forms/filtersets.py:579 -#: netbox/ipam/forms/filtersets.py:597 netbox/netbox/tables/tables.py:259 +#: netbox/ipam/forms/filtersets.py:101 netbox/ipam/forms/filtersets.py:271 +#: netbox/ipam/forms/filtersets.py:313 netbox/ipam/forms/filtersets.py:389 +#: netbox/ipam/forms/filtersets.py:474 netbox/ipam/forms/filtersets.py:487 +#: netbox/ipam/forms/filtersets.py:512 netbox/ipam/forms/filtersets.py:583 +#: netbox/ipam/forms/filtersets.py:601 netbox/netbox/tables/tables.py:259 #: netbox/virtualization/forms/filtersets.py:45 #: netbox/virtualization/forms/filtersets.py:108 #: netbox/virtualization/forms/filtersets.py:203 #: netbox/virtualization/forms/filtersets.py:248 -#: netbox/vpn/forms/filtersets.py:213 netbox/wireless/forms/bulk_edit.py:153 +#: netbox/vpn/forms/filtersets.py:218 netbox/wireless/forms/bulk_edit.py:153 #: netbox/wireless/forms/filtersets.py:36 #: netbox/wireless/forms/filtersets.py:102 msgid "Attributes" @@ -981,7 +982,7 @@ msgstr "" #: netbox/templates/ipam/vlan_edit.html:30 #: netbox/virtualization/forms/model_forms.py:80 #: netbox/virtualization/forms/model_forms.py:229 -#: netbox/vpn/forms/bulk_edit.py:78 netbox/vpn/forms/filtersets.py:44 +#: netbox/vpn/forms/bulk_edit.py:78 netbox/vpn/forms/filtersets.py:48 #: netbox/vpn/forms/model_forms.py:63 netbox/vpn/forms/model_forms.py:148 #: netbox/vpn/forms/model_forms.py:414 netbox/wireless/forms/model_forms.py:57 #: netbox/wireless/forms/model_forms.py:173 @@ -996,11 +997,11 @@ msgstr "" #: netbox/circuits/forms/bulk_edit.py:218 #: netbox/circuits/forms/bulk_import.py:133 -#: netbox/circuits/forms/filtersets.py:225 +#: netbox/circuits/forms/filtersets.py:226 #: netbox/circuits/forms/model_forms.py:173 #: netbox/templates/circuits/inc/circuit_termination.html:6 #: netbox/templates/dcim/cable.html:68 netbox/templates/dcim/cable.html:72 -#: netbox/vpn/forms/bulk_import.py:100 netbox/vpn/forms/filtersets.py:77 +#: netbox/vpn/forms/bulk_import.py:100 netbox/vpn/forms/filtersets.py:82 msgid "Termination" msgstr "" @@ -1036,7 +1037,7 @@ msgstr "" #: netbox/circuits/forms/bulk_edit.py:289 #: netbox/circuits/forms/bulk_import.py:188 -#: netbox/circuits/forms/filtersets.py:304 +#: netbox/circuits/forms/filtersets.py:305 #: netbox/circuits/tables/circuits.py:207 netbox/dcim/forms/model_forms.py:562 #: netbox/templates/circuits/circuitgroupassignment.html:34 #: netbox/templates/dcim/device.html:133 @@ -1049,10 +1050,10 @@ msgstr "" #: netbox/circuits/forms/bulk_edit.py:321 #: netbox/circuits/forms/bulk_import.py:208 -#: netbox/circuits/forms/filtersets.py:158 -#: netbox/circuits/forms/filtersets.py:263 -#: netbox/circuits/forms/filtersets.py:353 -#: netbox/circuits/forms/filtersets.py:391 +#: netbox/circuits/forms/filtersets.py:159 +#: netbox/circuits/forms/filtersets.py:264 +#: netbox/circuits/forms/filtersets.py:354 +#: netbox/circuits/forms/filtersets.py:392 #: netbox/circuits/forms/model_forms.py:325 #: netbox/circuits/tables/virtual_circuits.py:51 #: netbox/circuits/tables/virtual_circuits.py:99 @@ -1061,7 +1062,7 @@ msgstr "" #: netbox/circuits/forms/bulk_edit.py:365 #: netbox/circuits/forms/bulk_import.py:254 -#: netbox/circuits/forms/filtersets.py:381 +#: netbox/circuits/forms/filtersets.py:382 #: netbox/circuits/forms/model_forms.py:365 netbox/dcim/forms/bulk_edit.py:361 #: netbox/dcim/forms/bulk_edit.py:1280 netbox/dcim/forms/bulk_edit.py:1713 #: netbox/dcim/forms/bulk_import.py:255 netbox/dcim/forms/bulk_import.py:1106 @@ -1075,9 +1076,9 @@ msgstr "" #: netbox/ipam/forms/bulk_edit.py:295 netbox/ipam/forms/bulk_edit.py:343 #: netbox/ipam/forms/bulk_edit.py:495 netbox/ipam/forms/bulk_import.py:193 #: netbox/ipam/forms/bulk_import.py:261 netbox/ipam/forms/bulk_import.py:297 -#: netbox/ipam/forms/bulk_import.py:478 netbox/ipam/forms/filtersets.py:240 -#: netbox/ipam/forms/filtersets.py:292 netbox/ipam/forms/filtersets.py:363 -#: netbox/ipam/forms/filtersets.py:550 netbox/ipam/forms/model_forms.py:194 +#: netbox/ipam/forms/bulk_import.py:478 netbox/ipam/forms/filtersets.py:242 +#: netbox/ipam/forms/filtersets.py:295 netbox/ipam/forms/filtersets.py:367 +#: netbox/ipam/forms/filtersets.py:554 netbox/ipam/forms/model_forms.py:194 #: netbox/ipam/forms/model_forms.py:220 netbox/ipam/forms/model_forms.py:259 #: netbox/ipam/forms/model_forms.py:686 netbox/ipam/tables/ip.py:209 #: netbox/ipam/tables/ip.py:268 netbox/ipam/tables/ip.py:319 @@ -1103,7 +1104,7 @@ msgstr "" #: netbox/virtualization/forms/model_forms.py:202 #: netbox/virtualization/tables/virtualmachines.py:45 #: netbox/vpn/forms/bulk_edit.py:87 netbox/vpn/forms/bulk_import.py:81 -#: netbox/vpn/forms/filtersets.py:85 netbox/vpn/forms/model_forms.py:79 +#: netbox/vpn/forms/filtersets.py:90 netbox/vpn/forms/model_forms.py:79 #: netbox/vpn/forms/model_forms.py:114 netbox/vpn/tables/tunnels.py:82 msgid "Role" msgstr "" @@ -1214,9 +1215,9 @@ msgid "Interface" msgstr "" #: netbox/circuits/forms/filtersets.py:38 -#: netbox/circuits/forms/filtersets.py:129 -#: netbox/circuits/forms/filtersets.py:187 -#: netbox/circuits/forms/filtersets.py:245 +#: netbox/circuits/forms/filtersets.py:130 +#: netbox/circuits/forms/filtersets.py:188 +#: netbox/circuits/forms/filtersets.py:246 #: netbox/circuits/tables/circuits.py:144 netbox/dcim/forms/bulk_edit.py:342 #: netbox/dcim/forms/bulk_edit.py:450 netbox/dcim/forms/bulk_edit.py:691 #: netbox/dcim/forms/bulk_edit.py:746 netbox/dcim/forms/bulk_edit.py:900 @@ -1239,8 +1240,8 @@ msgstr "" #: netbox/dcim/tables/devices.py:168 netbox/dcim/tables/power.py:30 #: netbox/dcim/tables/racks.py:117 netbox/dcim/tables/racks.py:211 #: netbox/extras/filtersets.py:536 netbox/extras/forms/filtersets.py:327 -#: netbox/ipam/forms/filtersets.py:234 netbox/ipam/forms/filtersets.py:417 -#: netbox/ipam/forms/filtersets.py:440 netbox/ipam/forms/filtersets.py:507 +#: netbox/ipam/forms/filtersets.py:236 netbox/ipam/forms/filtersets.py:421 +#: netbox/ipam/forms/filtersets.py:444 netbox/ipam/forms/filtersets.py:511 #: netbox/templates/dcim/device.html:26 #: netbox/templates/dcim/device_edit.html:30 #: netbox/templates/dcim/inc/cable_termination.html:12 @@ -1256,23 +1257,28 @@ msgid "Location" msgstr "" #: netbox/circuits/forms/filtersets.py:40 -#: netbox/circuits/forms/filtersets.py:131 netbox/dcim/forms/filtersets.py:145 +#: netbox/circuits/forms/filtersets.py:74 +#: netbox/circuits/forms/filtersets.py:132 netbox/dcim/forms/filtersets.py:145 #: netbox/dcim/forms/filtersets.py:159 netbox/dcim/forms/filtersets.py:175 #: netbox/dcim/forms/filtersets.py:207 netbox/dcim/forms/filtersets.py:329 #: netbox/dcim/forms/filtersets.py:401 netbox/dcim/forms/filtersets.py:472 #: netbox/dcim/forms/filtersets.py:724 netbox/dcim/forms/filtersets.py:1092 -#: netbox/netbox/navigation/menu.py:31 netbox/netbox/navigation/menu.py:33 -#: netbox/tenancy/forms/filtersets.py:42 netbox/tenancy/tables/columns.py:55 -#: netbox/tenancy/tables/contacts.py:25 netbox/tenancy/views.py:19 -#: netbox/virtualization/forms/filtersets.py:37 +#: netbox/ipam/forms/filtersets.py:103 netbox/ipam/forms/filtersets.py:178 +#: netbox/ipam/forms/filtersets.py:273 netbox/ipam/forms/filtersets.py:318 +#: netbox/ipam/forms/filtersets.py:603 netbox/netbox/navigation/menu.py:31 +#: netbox/netbox/navigation/menu.py:33 netbox/tenancy/forms/filtersets.py:42 +#: netbox/tenancy/tables/columns.py:55 netbox/tenancy/tables/contacts.py:25 +#: netbox/tenancy/views.py:19 netbox/virtualization/forms/filtersets.py:37 #: netbox/virtualization/forms/filtersets.py:48 #: netbox/virtualization/forms/filtersets.py:111 +#: netbox/vpn/forms/filtersets.py:37 netbox/vpn/forms/filtersets.py:49 +#: netbox/vpn/forms/filtersets.py:220 msgid "Contacts" msgstr "" #: netbox/circuits/forms/filtersets.py:45 -#: netbox/circuits/forms/filtersets.py:168 -#: netbox/circuits/forms/filtersets.py:230 +#: netbox/circuits/forms/filtersets.py:169 +#: netbox/circuits/forms/filtersets.py:231 #: netbox/circuits/tables/circuits.py:139 netbox/dcim/forms/bulk_edit.py:116 #: netbox/dcim/forms/bulk_edit.py:317 netbox/dcim/forms/bulk_edit.py:875 #: netbox/dcim/forms/bulk_import.py:95 netbox/dcim/forms/filtersets.py:74 @@ -1285,8 +1291,8 @@ msgstr "" #: netbox/dcim/forms/model_forms.py:114 netbox/dcim/forms/object_create.py:367 #: netbox/dcim/tables/devices.py:154 netbox/dcim/tables/sites.py:85 #: netbox/extras/filtersets.py:503 netbox/ipam/forms/bulk_edit.py:458 -#: netbox/ipam/forms/filtersets.py:219 netbox/ipam/forms/filtersets.py:425 -#: netbox/ipam/forms/filtersets.py:516 netbox/templates/dcim/device.html:18 +#: netbox/ipam/forms/filtersets.py:221 netbox/ipam/forms/filtersets.py:429 +#: netbox/ipam/forms/filtersets.py:520 netbox/templates/dcim/device.html:18 #: netbox/templates/dcim/rack.html:16 #: netbox/templates/dcim/rackreservation.html:22 #: netbox/templates/dcim/region.html:26 netbox/templates/dcim/site.html:31 @@ -1294,21 +1300,21 @@ msgstr "" #: netbox/virtualization/forms/filtersets.py:59 #: netbox/virtualization/forms/filtersets.py:138 #: netbox/virtualization/forms/model_forms.py:92 -#: netbox/vpn/forms/filtersets.py:257 netbox/wireless/forms/filtersets.py:73 +#: netbox/vpn/forms/filtersets.py:263 netbox/wireless/forms/filtersets.py:73 msgid "Region" msgstr "" #: netbox/circuits/forms/filtersets.py:50 -#: netbox/circuits/forms/filtersets.py:173 -#: netbox/circuits/forms/filtersets.py:235 netbox/dcim/forms/bulk_edit.py:325 +#: netbox/circuits/forms/filtersets.py:174 +#: netbox/circuits/forms/filtersets.py:236 netbox/dcim/forms/bulk_edit.py:325 #: netbox/dcim/forms/bulk_edit.py:883 netbox/dcim/forms/filtersets.py:79 #: netbox/dcim/forms/filtersets.py:191 netbox/dcim/forms/filtersets.py:217 #: netbox/dcim/forms/filtersets.py:348 netbox/dcim/forms/filtersets.py:431 #: netbox/dcim/forms/filtersets.py:745 netbox/dcim/forms/filtersets.py:989 #: netbox/dcim/forms/filtersets.py:1103 netbox/dcim/forms/filtersets.py:1142 #: netbox/dcim/forms/object_create.py:375 netbox/extras/filtersets.py:520 -#: netbox/ipam/forms/bulk_edit.py:463 netbox/ipam/forms/filtersets.py:224 -#: netbox/ipam/forms/filtersets.py:430 netbox/ipam/forms/filtersets.py:521 +#: netbox/ipam/forms/bulk_edit.py:463 netbox/ipam/forms/filtersets.py:226 +#: netbox/ipam/forms/filtersets.py:434 netbox/ipam/forms/filtersets.py:525 #: netbox/virtualization/forms/filtersets.py:64 #: netbox/virtualization/forms/filtersets.py:143 #: netbox/virtualization/forms/model_forms.py:98 @@ -1316,7 +1322,7 @@ msgstr "" msgid "Site group" msgstr "" -#: netbox/circuits/forms/filtersets.py:81 netbox/circuits/tables/circuits.py:62 +#: netbox/circuits/forms/filtersets.py:82 netbox/circuits/tables/circuits.py:62 #: netbox/circuits/tables/providers.py:64 #: netbox/circuits/tables/virtual_circuits.py:55 #: netbox/circuits/tables/virtual_circuits.py:103 @@ -1325,13 +1331,13 @@ msgstr "" msgid "Account" msgstr "" -#: netbox/circuits/forms/filtersets.py:253 +#: netbox/circuits/forms/filtersets.py:254 msgid "Term Side" msgstr "" -#: netbox/circuits/forms/filtersets.py:286 netbox/dcim/forms/bulk_edit.py:1572 -#: netbox/extras/forms/model_forms.py:596 netbox/ipam/forms/filtersets.py:144 -#: netbox/ipam/forms/filtersets.py:598 netbox/ipam/forms/model_forms.py:337 +#: netbox/circuits/forms/filtersets.py:287 netbox/dcim/forms/bulk_edit.py:1572 +#: netbox/extras/forms/model_forms.py:596 netbox/ipam/forms/filtersets.py:145 +#: netbox/ipam/forms/filtersets.py:602 netbox/ipam/forms/model_forms.py:337 #: netbox/templates/dcim/macaddress.html:25 #: netbox/templates/extras/configcontext.html:60 #: netbox/templates/ipam/ipaddress.html:59 @@ -1340,12 +1346,12 @@ msgstr "" msgid "Assignment" msgstr "" -#: netbox/circuits/forms/filtersets.py:301 +#: netbox/circuits/forms/filtersets.py:302 #: netbox/circuits/forms/model_forms.py:252 #: netbox/circuits/tables/circuits.py:191 netbox/dcim/forms/bulk_edit.py:121 #: netbox/dcim/forms/bulk_import.py:102 netbox/dcim/forms/model_forms.py:120 #: netbox/dcim/tables/sites.py:89 netbox/extras/forms/filtersets.py:489 -#: netbox/ipam/filtersets.py:968 netbox/ipam/forms/bulk_edit.py:477 +#: netbox/ipam/filtersets.py:969 netbox/ipam/forms/bulk_edit.py:477 #: netbox/ipam/forms/bulk_import.py:459 netbox/ipam/forms/model_forms.py:571 #: netbox/ipam/tables/fhrp.py:67 netbox/ipam/tables/vlans.py:91 #: netbox/ipam/tables/vlans.py:202 @@ -1375,7 +1381,7 @@ msgstr "" #: netbox/virtualization/forms/model_forms.py:70 #: netbox/virtualization/tables/clusters.py:70 #: netbox/vpn/forms/bulk_edit.py:112 netbox/vpn/forms/bulk_import.py:158 -#: netbox/vpn/forms/filtersets.py:116 netbox/vpn/tables/crypto.py:31 +#: netbox/vpn/forms/filtersets.py:121 netbox/vpn/tables/crypto.py:31 #: netbox/vpn/tables/tunnels.py:44 netbox/wireless/forms/bulk_edit.py:50 #: netbox/wireless/forms/bulk_import.py:38 #: netbox/wireless/forms/filtersets.py:49 @@ -1694,8 +1700,8 @@ msgstr "" #: netbox/extras/tables/tables.py:361 netbox/extras/tables/tables.py:378 #: netbox/extras/tables/tables.py:401 netbox/extras/tables/tables.py:439 #: netbox/extras/tables/tables.py:491 netbox/extras/tables/tables.py:514 -#: netbox/ipam/forms/bulk_edit.py:391 netbox/ipam/forms/filtersets.py:389 -#: netbox/ipam/forms/filtersets.py:474 netbox/ipam/tables/asn.py:16 +#: netbox/ipam/forms/bulk_edit.py:391 netbox/ipam/forms/filtersets.py:393 +#: netbox/ipam/forms/filtersets.py:478 netbox/ipam/tables/asn.py:16 #: netbox/ipam/tables/ip.py:31 netbox/ipam/tables/ip.py:106 #: netbox/ipam/tables/services.py:15 netbox/ipam/tables/services.py:40 #: netbox/ipam/tables/vlans.py:33 netbox/ipam/tables/vlans.py:83 @@ -1933,7 +1939,7 @@ msgstr "" #: netbox/dcim/tables/devices.py:892 netbox/dcim/tables/devices.py:960 #: netbox/dcim/tables/devices.py:1089 netbox/dcim/tables/modules.py:53 #: netbox/extras/forms/filtersets.py:328 netbox/ipam/forms/bulk_import.py:303 -#: netbox/ipam/forms/bulk_import.py:540 netbox/ipam/forms/filtersets.py:603 +#: netbox/ipam/forms/bulk_import.py:540 netbox/ipam/forms/filtersets.py:608 #: netbox/ipam/forms/model_forms.py:333 netbox/ipam/forms/model_forms.py:762 #: netbox/ipam/forms/model_forms.py:795 netbox/ipam/forms/model_forms.py:821 #: netbox/ipam/tables/vlans.py:156 @@ -1965,7 +1971,7 @@ msgstr "" #: netbox/virtualization/forms/model_forms.py:192 #: netbox/virtualization/tables/virtualmachines.py:41 netbox/vpn/choices.py:52 #: netbox/vpn/forms/bulk_import.py:86 netbox/vpn/forms/bulk_import.py:283 -#: netbox/vpn/forms/filtersets.py:275 netbox/vpn/forms/model_forms.py:91 +#: netbox/vpn/forms/filtersets.py:281 netbox/vpn/forms/model_forms.py:91 #: netbox/vpn/forms/model_forms.py:126 netbox/vpn/forms/model_forms.py:237 #: netbox/vpn/forms/model_forms.py:456 netbox/wireless/forms/model_forms.py:102 #: netbox/wireless/forms/model_forms.py:144 @@ -2210,8 +2216,8 @@ msgstr "" #: netbox/core/forms/bulk_edit.py:34 netbox/extras/forms/model_forms.py:299 #: netbox/templates/extras/savedfilter.html:52 -#: netbox/vpn/forms/filtersets.py:97 netbox/vpn/forms/filtersets.py:127 -#: netbox/vpn/forms/filtersets.py:151 netbox/vpn/forms/filtersets.py:170 +#: netbox/vpn/forms/filtersets.py:102 netbox/vpn/forms/filtersets.py:132 +#: netbox/vpn/forms/filtersets.py:156 netbox/vpn/forms/filtersets.py:175 #: netbox/vpn/forms/model_forms.py:302 netbox/vpn/forms/model_forms.py:323 #: netbox/vpn/forms/model_forms.py:339 netbox/vpn/forms/model_forms.py:360 #: netbox/vpn/forms/model_forms.py:383 @@ -2370,7 +2376,7 @@ msgstr "" #: netbox/core/forms/model_forms.py:160 netbox/netbox/navigation/menu.py:238 #: netbox/templates/core/inc/config_data.html:50 -#: netbox/vpn/forms/bulk_edit.py:77 netbox/vpn/forms/filtersets.py:43 +#: netbox/vpn/forms/bulk_edit.py:77 netbox/vpn/forms/filtersets.py:47 #: netbox/vpn/forms/model_forms.py:62 netbox/vpn/forms/model_forms.py:147 msgid "Security" msgstr "" @@ -2806,7 +2812,7 @@ msgstr "" msgid "Host" msgstr "" -#: netbox/core/tables/tasks.py:50 netbox/ipam/forms/filtersets.py:587 +#: netbox/core/tables/tasks.py:50 netbox/ipam/forms/filtersets.py:591 msgid "Port" msgstr "" @@ -3344,7 +3350,7 @@ msgid "Parent site group (slug)" msgstr "" #: netbox/dcim/filtersets.py:165 netbox/extras/filtersets.py:364 -#: netbox/ipam/filtersets.py:810 netbox/ipam/filtersets.py:962 +#: netbox/ipam/filtersets.py:811 netbox/ipam/filtersets.py:963 msgid "Group (ID)" msgstr "" @@ -3390,15 +3396,15 @@ msgstr "" #: netbox/dcim/filtersets.py:412 netbox/dcim/filtersets.py:893 #: netbox/dcim/filtersets.py:995 netbox/dcim/filtersets.py:1970 -#: netbox/ipam/filtersets.py:350 netbox/ipam/filtersets.py:462 -#: netbox/ipam/filtersets.py:972 netbox/virtualization/filtersets.py:176 +#: netbox/ipam/filtersets.py:351 netbox/ipam/filtersets.py:463 +#: netbox/ipam/filtersets.py:973 netbox/virtualization/filtersets.py:176 msgid "Role (ID)" msgstr "" #: netbox/dcim/filtersets.py:418 netbox/dcim/filtersets.py:899 #: netbox/dcim/filtersets.py:1001 netbox/dcim/filtersets.py:1976 -#: netbox/extras/filtersets.py:558 netbox/ipam/filtersets.py:356 -#: netbox/ipam/filtersets.py:468 netbox/ipam/filtersets.py:978 +#: netbox/extras/filtersets.py:558 netbox/ipam/filtersets.py:357 +#: netbox/ipam/filtersets.py:469 netbox/ipam/filtersets.py:979 #: netbox/virtualization/filtersets.py:182 msgid "Role (slug)" msgstr "" @@ -3606,8 +3612,8 @@ msgid "Module bay (ID)" msgstr "" #: netbox/dcim/filtersets.py:1335 netbox/dcim/filtersets.py:1427 -#: netbox/dcim/filtersets.py:1613 netbox/ipam/filtersets.py:580 -#: netbox/ipam/filtersets.py:820 netbox/ipam/filtersets.py:1142 +#: netbox/dcim/filtersets.py:1613 netbox/ipam/filtersets.py:581 +#: netbox/ipam/filtersets.py:821 netbox/ipam/filtersets.py:1143 #: netbox/virtualization/filtersets.py:127 netbox/vpn/filtersets.py:379 msgid "Device (ID)" msgstr "" @@ -3617,8 +3623,8 @@ msgid "Rack (name)" msgstr "" #: netbox/dcim/filtersets.py:1433 netbox/dcim/filtersets.py:1608 -#: netbox/ipam/filtersets.py:575 netbox/ipam/filtersets.py:815 -#: netbox/ipam/filtersets.py:1148 netbox/vpn/filtersets.py:374 +#: netbox/ipam/filtersets.py:576 netbox/ipam/filtersets.py:816 +#: netbox/ipam/filtersets.py:1149 netbox/vpn/filtersets.py:374 msgid "Device (name)" msgstr "" @@ -3656,30 +3662,30 @@ msgstr "" msgid "Cable (ID)" msgstr "" -#: netbox/dcim/filtersets.py:1618 netbox/ipam/filtersets.py:585 -#: netbox/ipam/filtersets.py:825 netbox/ipam/filtersets.py:1158 +#: netbox/dcim/filtersets.py:1618 netbox/ipam/filtersets.py:586 +#: netbox/ipam/filtersets.py:826 netbox/ipam/filtersets.py:1159 #: netbox/vpn/filtersets.py:385 msgid "Virtual machine (name)" msgstr "" -#: netbox/dcim/filtersets.py:1623 netbox/ipam/filtersets.py:590 -#: netbox/ipam/filtersets.py:830 netbox/ipam/filtersets.py:1152 +#: netbox/dcim/filtersets.py:1623 netbox/ipam/filtersets.py:591 +#: netbox/ipam/filtersets.py:831 netbox/ipam/filtersets.py:1153 #: netbox/virtualization/filtersets.py:248 #: netbox/virtualization/filtersets.py:299 netbox/vpn/filtersets.py:390 msgid "Virtual machine (ID)" msgstr "" -#: netbox/dcim/filtersets.py:1629 netbox/ipam/filtersets.py:596 +#: netbox/dcim/filtersets.py:1629 netbox/ipam/filtersets.py:597 #: netbox/vpn/filtersets.py:97 netbox/vpn/filtersets.py:396 msgid "Interface (name)" msgstr "" -#: netbox/dcim/filtersets.py:1640 netbox/ipam/filtersets.py:607 +#: netbox/dcim/filtersets.py:1640 netbox/ipam/filtersets.py:608 #: netbox/vpn/filtersets.py:108 netbox/vpn/filtersets.py:407 msgid "VM interface (name)" msgstr "" -#: netbox/dcim/filtersets.py:1645 netbox/ipam/filtersets.py:612 +#: netbox/dcim/filtersets.py:1645 netbox/ipam/filtersets.py:613 #: netbox/vpn/filtersets.py:113 msgid "VM interface (ID)" msgstr "" @@ -3697,14 +3703,14 @@ msgstr "" #: netbox/dcim/forms/bulk_import.py:921 netbox/dcim/forms/filtersets.py:1433 #: netbox/dcim/forms/model_forms.py:1411 #: netbox/dcim/models/device_components.py:749 -#: netbox/dcim/tables/devices.py:648 netbox/ipam/filtersets.py:321 -#: netbox/ipam/filtersets.py:332 netbox/ipam/filtersets.py:452 -#: netbox/ipam/filtersets.py:553 netbox/ipam/filtersets.py:564 +#: netbox/dcim/tables/devices.py:648 netbox/ipam/filtersets.py:322 +#: netbox/ipam/filtersets.py:333 netbox/ipam/filtersets.py:453 +#: netbox/ipam/filtersets.py:554 netbox/ipam/filtersets.py:565 #: netbox/ipam/forms/bulk_edit.py:226 netbox/ipam/forms/bulk_edit.py:282 #: netbox/ipam/forms/bulk_edit.py:324 netbox/ipam/forms/bulk_import.py:160 #: netbox/ipam/forms/bulk_import.py:242 netbox/ipam/forms/bulk_import.py:278 -#: netbox/ipam/forms/filtersets.py:69 netbox/ipam/forms/filtersets.py:174 -#: netbox/ipam/forms/filtersets.py:312 netbox/ipam/forms/model_forms.py:65 +#: netbox/ipam/forms/filtersets.py:69 netbox/ipam/forms/filtersets.py:175 +#: netbox/ipam/forms/filtersets.py:315 netbox/ipam/forms/model_forms.py:65 #: netbox/ipam/forms/model_forms.py:208 netbox/ipam/forms/model_forms.py:256 #: netbox/ipam/forms/model_forms.py:310 netbox/ipam/forms/model_forms.py:474 #: netbox/ipam/forms/model_forms.py:488 netbox/ipam/forms/model_forms.py:502 @@ -3726,36 +3732,36 @@ msgstr "" msgid "VRF" msgstr "" -#: netbox/dcim/filtersets.py:1702 netbox/ipam/filtersets.py:327 -#: netbox/ipam/filtersets.py:338 netbox/ipam/filtersets.py:458 -#: netbox/ipam/filtersets.py:559 netbox/ipam/filtersets.py:570 +#: netbox/dcim/filtersets.py:1702 netbox/ipam/filtersets.py:328 +#: netbox/ipam/filtersets.py:339 netbox/ipam/filtersets.py:459 +#: netbox/ipam/filtersets.py:560 netbox/ipam/filtersets.py:571 msgid "VRF (RD)" msgstr "" -#: netbox/dcim/filtersets.py:1707 netbox/ipam/filtersets.py:1010 +#: netbox/dcim/filtersets.py:1707 netbox/ipam/filtersets.py:1011 #: netbox/vpn/filtersets.py:342 msgid "L2VPN (ID)" msgstr "" #: netbox/dcim/filtersets.py:1713 netbox/dcim/forms/filtersets.py:1438 -#: netbox/dcim/tables/devices.py:584 netbox/ipam/filtersets.py:1016 -#: netbox/ipam/forms/filtersets.py:570 netbox/ipam/tables/vlans.py:113 +#: netbox/dcim/tables/devices.py:584 netbox/ipam/filtersets.py:1017 +#: netbox/ipam/forms/filtersets.py:574 netbox/ipam/tables/vlans.py:113 #: netbox/templates/dcim/interface.html:99 netbox/templates/ipam/vlan.html:82 #: netbox/templates/vpn/l2vpntermination.html:12 #: netbox/virtualization/forms/filtersets.py:238 -#: netbox/vpn/forms/bulk_import.py:280 netbox/vpn/forms/filtersets.py:246 +#: netbox/vpn/forms/bulk_import.py:280 netbox/vpn/forms/filtersets.py:252 #: netbox/vpn/forms/model_forms.py:412 netbox/vpn/forms/model_forms.py:430 #: netbox/vpn/models/l2vpn.py:63 netbox/vpn/tables/l2vpn.py:55 msgid "L2VPN" msgstr "" -#: netbox/dcim/filtersets.py:1718 netbox/ipam/filtersets.py:1091 +#: netbox/dcim/filtersets.py:1718 netbox/ipam/filtersets.py:1092 msgid "VLAN Translation Policy (ID)" msgstr "" #: netbox/dcim/filtersets.py:1724 netbox/dcim/forms/model_forms.py:1428 #: netbox/dcim/models/device_components.py:568 -#: netbox/ipam/forms/filtersets.py:489 netbox/ipam/forms/model_forms.py:712 +#: netbox/ipam/forms/filtersets.py:493 netbox/ipam/forms/model_forms.py:712 #: netbox/templates/ipam/vlantranslationpolicy.html:11 #: netbox/virtualization/forms/bulk_edit.py:248 #: netbox/virtualization/forms/model_forms.py:373 @@ -4091,7 +4097,7 @@ msgstr "" #: netbox/dcim/forms/model_forms.py:314 netbox/dcim/forms/model_forms.py:489 #: netbox/dcim/forms/model_forms.py:767 netbox/dcim/forms/object_create.py:392 #: netbox/dcim/tables/devices.py:172 netbox/dcim/tables/power.py:70 -#: netbox/dcim/tables/racks.py:216 netbox/ipam/forms/filtersets.py:445 +#: netbox/dcim/tables/racks.py:216 netbox/ipam/forms/filtersets.py:449 #: netbox/templates/dcim/device.html:30 #: netbox/templates/dcim/inc/cable_termination.html:16 #: netbox/templates/dcim/powerfeed.html:28 netbox/templates/dcim/rack.html:13 @@ -4198,7 +4204,7 @@ msgstr "" #: netbox/dcim/forms/filtersets.py:729 netbox/dcim/forms/filtersets.py:899 #: netbox/dcim/forms/model_forms.py:533 netbox/dcim/tables/devices.py:213 #: netbox/extras/filtersets.py:596 netbox/extras/forms/filtersets.py:329 -#: netbox/ipam/forms/filtersets.py:418 netbox/ipam/forms/filtersets.py:450 +#: netbox/ipam/forms/filtersets.py:422 netbox/ipam/forms/filtersets.py:454 #: netbox/templates/dcim/device.html:239 #: netbox/templates/virtualization/cluster.html:10 #: netbox/templates/virtualization/virtualmachine.html:92 @@ -4395,14 +4401,14 @@ msgstr "" #: netbox/virtualization/forms/bulk_import.py:171 #: netbox/vpn/forms/bulk_edit.py:146 netbox/vpn/forms/bulk_edit.py:232 #: netbox/vpn/forms/bulk_import.py:176 netbox/vpn/forms/bulk_import.py:234 -#: netbox/vpn/forms/filtersets.py:135 netbox/vpn/forms/filtersets.py:178 -#: netbox/vpn/forms/filtersets.py:192 netbox/vpn/tables/crypto.py:64 +#: netbox/vpn/forms/filtersets.py:140 netbox/vpn/forms/filtersets.py:183 +#: netbox/vpn/forms/filtersets.py:197 netbox/vpn/tables/crypto.py:64 #: netbox/vpn/tables/crypto.py:162 msgid "Mode" msgstr "" #: netbox/dcim/forms/bulk_edit.py:1493 netbox/dcim/forms/model_forms.py:1377 -#: netbox/ipam/forms/bulk_import.py:174 netbox/ipam/forms/filtersets.py:539 +#: netbox/ipam/forms/bulk_import.py:174 netbox/ipam/forms/filtersets.py:543 #: netbox/ipam/models/vlans.py:86 netbox/virtualization/forms/bulk_edit.py:222 #: netbox/virtualization/forms/model_forms.py:335 msgid "VLAN group" @@ -4448,7 +4454,7 @@ msgstr "" #: netbox/dcim/forms/bulk_edit.py:1563 netbox/dcim/forms/filtersets.py:1333 #: netbox/dcim/forms/model_forms.py:1435 netbox/ipam/forms/bulk_edit.py:269 -#: netbox/ipam/forms/bulk_edit.py:362 netbox/ipam/forms/filtersets.py:171 +#: netbox/ipam/forms/bulk_edit.py:362 netbox/ipam/forms/filtersets.py:172 #: netbox/netbox/navigation/menu.py:108 #: netbox/templates/dcim/interface.html:128 #: netbox/templates/ipam/prefix.html:91 @@ -4783,8 +4789,8 @@ msgstr "" #: netbox/dcim/forms/bulk_import.py:925 netbox/ipam/forms/bulk_import.py:164 #: netbox/ipam/forms/bulk_import.py:246 netbox/ipam/forms/bulk_import.py:282 -#: netbox/ipam/forms/filtersets.py:203 netbox/ipam/forms/filtersets.py:280 -#: netbox/ipam/forms/filtersets.py:339 +#: netbox/ipam/forms/filtersets.py:205 netbox/ipam/forms/filtersets.py:283 +#: netbox/ipam/forms/filtersets.py:343 #: netbox/virtualization/forms/bulk_import.py:181 msgid "Assigned VRF" msgstr "" @@ -4876,7 +4882,7 @@ msgstr "" msgid "Parent VM of assigned interface (if any)" msgstr "" -#: netbox/dcim/forms/bulk_import.py:1223 netbox/ipam/filtersets.py:1021 +#: netbox/dcim/forms/bulk_import.py:1223 netbox/ipam/filtersets.py:1022 #: netbox/ipam/forms/bulk_import.py:321 msgid "Assigned interface" msgstr "" @@ -5102,7 +5108,7 @@ msgid "Has virtual device contexts" msgstr "" #: netbox/dcim/forms/filtersets.py:904 netbox/extras/filtersets.py:585 -#: netbox/ipam/forms/filtersets.py:455 +#: netbox/ipam/forms/filtersets.py:459 #: netbox/virtualization/forms/filtersets.py:117 msgid "Cluster group" msgstr "" @@ -5179,11 +5185,11 @@ msgstr "" msgid "Discovered" msgstr "" -#: netbox/dcim/forms/filtersets.py:1596 netbox/ipam/forms/filtersets.py:350 +#: netbox/dcim/forms/filtersets.py:1596 netbox/ipam/forms/filtersets.py:354 msgid "Assigned Device" msgstr "" -#: netbox/dcim/forms/filtersets.py:1601 netbox/ipam/forms/filtersets.py:355 +#: netbox/dcim/forms/filtersets.py:1601 netbox/ipam/forms/filtersets.py:359 msgid "Assigned VM" msgstr "" @@ -5199,7 +5205,7 @@ msgstr "" #: netbox/dcim/forms/mixins.py:30 netbox/dcim/forms/mixins.py:78 #: netbox/ipam/forms/bulk_edit.py:270 netbox/ipam/forms/bulk_edit.py:423 -#: netbox/ipam/forms/bulk_edit.py:437 netbox/ipam/forms/filtersets.py:175 +#: netbox/ipam/forms/bulk_edit.py:437 netbox/ipam/forms/filtersets.py:176 #: netbox/ipam/forms/model_forms.py:231 netbox/ipam/forms/model_forms.py:621 #: netbox/ipam/forms/model_forms.py:631 netbox/ipam/tables/ip.py:194 #: netbox/ipam/tables/vlans.py:40 netbox/templates/ipam/prefix.html:48 @@ -5422,7 +5428,7 @@ msgstr "" msgid "VM Interface" msgstr "" -#: netbox/dcim/forms/model_forms.py:1788 netbox/ipam/forms/filtersets.py:608 +#: netbox/dcim/forms/model_forms.py:1788 netbox/ipam/forms/filtersets.py:613 #: netbox/ipam/forms/model_forms.py:334 netbox/ipam/forms/model_forms.py:796 #: netbox/ipam/forms/model_forms.py:822 netbox/ipam/tables/vlans.py:171 #: netbox/templates/virtualization/virtualdisk.html:21 @@ -5434,7 +5440,7 @@ msgstr "" #: netbox/virtualization/forms/model_forms.py:227 #: netbox/virtualization/tables/virtualmachines.py:105 #: netbox/virtualization/tables/virtualmachines.py:161 netbox/vpn/choices.py:53 -#: netbox/vpn/forms/filtersets.py:293 netbox/vpn/forms/model_forms.py:161 +#: netbox/vpn/forms/filtersets.py:299 netbox/vpn/forms/model_forms.py:161 #: netbox/vpn/forms/model_forms.py:172 netbox/vpn/forms/model_forms.py:274 #: netbox/vpn/forms/model_forms.py:457 msgid "Virtual Machine" @@ -5958,7 +5964,7 @@ msgstr "" #: netbox/dcim/models/device_components.py:561 #: netbox/dcim/tables/devices.py:602 netbox/ipam/forms/bulk_edit.py:510 -#: netbox/ipam/forms/bulk_import.py:491 netbox/ipam/forms/filtersets.py:565 +#: netbox/ipam/forms/bulk_import.py:491 netbox/ipam/forms/filtersets.py:569 #: netbox/ipam/forms/model_forms.py:692 netbox/ipam/tables/vlans.py:106 #: netbox/templates/dcim/interface.html:86 netbox/templates/ipam/vlan.html:77 msgid "Q-in-Q SVLAN" @@ -7202,7 +7208,7 @@ msgstr "" #: netbox/templates/vpn/tunnel.html:18 #: netbox/templates/vpn/tunneltermination.html:13 #: netbox/vpn/forms/bulk_edit.py:76 netbox/vpn/forms/bulk_import.py:76 -#: netbox/vpn/forms/filtersets.py:42 netbox/vpn/forms/filtersets.py:82 +#: netbox/vpn/forms/filtersets.py:46 netbox/vpn/forms/filtersets.py:87 #: netbox/vpn/forms/model_forms.py:61 netbox/vpn/forms/model_forms.py:146 #: netbox/vpn/tables/tunnels.py:78 msgid "Tunnel" @@ -9494,160 +9500,160 @@ msgstr "" msgid "Invalid IP address format: {address}" msgstr "" -#: netbox/ipam/filtersets.py:51 netbox/vpn/filtersets.py:304 +#: netbox/ipam/filtersets.py:52 netbox/vpn/filtersets.py:304 msgid "Import target" msgstr "" -#: netbox/ipam/filtersets.py:57 netbox/vpn/filtersets.py:310 +#: netbox/ipam/filtersets.py:58 netbox/vpn/filtersets.py:310 msgid "Import target (name)" msgstr "" -#: netbox/ipam/filtersets.py:62 netbox/vpn/filtersets.py:315 +#: netbox/ipam/filtersets.py:63 netbox/vpn/filtersets.py:315 msgid "Export target" msgstr "" -#: netbox/ipam/filtersets.py:68 netbox/vpn/filtersets.py:321 +#: netbox/ipam/filtersets.py:69 netbox/vpn/filtersets.py:321 msgid "Export target (name)" msgstr "" -#: netbox/ipam/filtersets.py:89 +#: netbox/ipam/filtersets.py:90 msgid "Importing VRF" msgstr "" -#: netbox/ipam/filtersets.py:95 +#: netbox/ipam/filtersets.py:96 msgid "Import VRF (RD)" msgstr "" -#: netbox/ipam/filtersets.py:100 +#: netbox/ipam/filtersets.py:101 msgid "Exporting VRF" msgstr "" -#: netbox/ipam/filtersets.py:106 +#: netbox/ipam/filtersets.py:107 msgid "Export VRF (RD)" msgstr "" -#: netbox/ipam/filtersets.py:111 +#: netbox/ipam/filtersets.py:112 msgid "Importing L2VPN" msgstr "" -#: netbox/ipam/filtersets.py:117 +#: netbox/ipam/filtersets.py:118 msgid "Importing L2VPN (identifier)" msgstr "" -#: netbox/ipam/filtersets.py:122 +#: netbox/ipam/filtersets.py:123 msgid "Exporting L2VPN" msgstr "" -#: netbox/ipam/filtersets.py:128 +#: netbox/ipam/filtersets.py:129 msgid "Exporting L2VPN (identifier)" msgstr "" -#: netbox/ipam/filtersets.py:158 netbox/ipam/filtersets.py:286 +#: netbox/ipam/filtersets.py:159 netbox/ipam/filtersets.py:287 #: netbox/ipam/forms/model_forms.py:229 netbox/ipam/tables/ip.py:158 #: netbox/templates/ipam/prefix.html:12 msgid "Prefix" msgstr "" -#: netbox/ipam/filtersets.py:162 netbox/ipam/filtersets.py:201 -#: netbox/ipam/filtersets.py:226 +#: netbox/ipam/filtersets.py:163 netbox/ipam/filtersets.py:202 +#: netbox/ipam/filtersets.py:227 msgid "RIR (ID)" msgstr "" -#: netbox/ipam/filtersets.py:168 netbox/ipam/filtersets.py:207 -#: netbox/ipam/filtersets.py:232 +#: netbox/ipam/filtersets.py:169 netbox/ipam/filtersets.py:208 +#: netbox/ipam/filtersets.py:233 msgid "RIR (slug)" msgstr "" -#: netbox/ipam/filtersets.py:290 +#: netbox/ipam/filtersets.py:291 msgid "Within prefix" msgstr "" -#: netbox/ipam/filtersets.py:294 +#: netbox/ipam/filtersets.py:295 msgid "Within and including prefix" msgstr "" -#: netbox/ipam/filtersets.py:298 +#: netbox/ipam/filtersets.py:299 msgid "Prefixes which contain this prefix or IP" msgstr "" -#: netbox/ipam/filtersets.py:309 netbox/ipam/filtersets.py:541 -#: netbox/ipam/forms/bulk_edit.py:327 netbox/ipam/forms/filtersets.py:198 -#: netbox/ipam/forms/filtersets.py:334 +#: netbox/ipam/filtersets.py:310 netbox/ipam/filtersets.py:542 +#: netbox/ipam/forms/bulk_edit.py:327 netbox/ipam/forms/filtersets.py:200 +#: netbox/ipam/forms/filtersets.py:338 msgid "Mask length" msgstr "" -#: netbox/ipam/filtersets.py:342 netbox/vpn/filtersets.py:427 +#: netbox/ipam/filtersets.py:343 netbox/vpn/filtersets.py:427 msgid "VLAN (ID)" msgstr "" -#: netbox/ipam/filtersets.py:346 netbox/vpn/filtersets.py:422 +#: netbox/ipam/filtersets.py:347 netbox/vpn/filtersets.py:422 msgid "VLAN number (1-4094)" msgstr "" -#: netbox/ipam/filtersets.py:440 netbox/ipam/filtersets.py:444 -#: netbox/ipam/filtersets.py:536 netbox/ipam/forms/model_forms.py:506 +#: netbox/ipam/filtersets.py:441 netbox/ipam/filtersets.py:445 +#: netbox/ipam/filtersets.py:537 netbox/ipam/forms/model_forms.py:506 #: netbox/templates/tenancy/contact.html:53 #: netbox/tenancy/forms/bulk_edit.py:113 msgid "Address" msgstr "" -#: netbox/ipam/filtersets.py:448 +#: netbox/ipam/filtersets.py:449 msgid "Ranges which contain this prefix or IP" msgstr "" -#: netbox/ipam/filtersets.py:476 netbox/ipam/filtersets.py:532 +#: netbox/ipam/filtersets.py:477 netbox/ipam/filtersets.py:533 msgid "Parent prefix" msgstr "" -#: netbox/ipam/filtersets.py:617 +#: netbox/ipam/filtersets.py:618 msgid "FHRP group (ID)" msgstr "" -#: netbox/ipam/filtersets.py:621 +#: netbox/ipam/filtersets.py:622 msgid "Is assigned to an interface" msgstr "" -#: netbox/ipam/filtersets.py:625 +#: netbox/ipam/filtersets.py:626 msgid "Is assigned" msgstr "" -#: netbox/ipam/filtersets.py:637 +#: netbox/ipam/filtersets.py:638 msgid "Service (ID)" msgstr "" -#: netbox/ipam/filtersets.py:642 +#: netbox/ipam/filtersets.py:643 msgid "NAT inside IP address (ID)" msgstr "" -#: netbox/ipam/filtersets.py:1001 +#: netbox/ipam/filtersets.py:1002 msgid "Q-in-Q SVLAN (ID)" msgstr "" -#: netbox/ipam/filtersets.py:1005 +#: netbox/ipam/filtersets.py:1006 msgid "Q-in-Q SVLAN number (1-4094)" msgstr "" -#: netbox/ipam/filtersets.py:1026 +#: netbox/ipam/filtersets.py:1027 msgid "Assigned VM interface" msgstr "" -#: netbox/ipam/filtersets.py:1097 +#: netbox/ipam/filtersets.py:1098 msgid "VLAN Translation Policy (name)" msgstr "" -#: netbox/ipam/filtersets.py:1163 +#: netbox/ipam/filtersets.py:1164 msgid "IP address (ID)" msgstr "" -#: netbox/ipam/filtersets.py:1169 netbox/ipam/models/ip.py:788 +#: netbox/ipam/filtersets.py:1170 netbox/ipam/models/ip.py:788 msgid "IP address" msgstr "" -#: netbox/ipam/filtersets.py:1194 +#: netbox/ipam/filtersets.py:1195 msgid "Primary IPv4 (ID)" msgstr "" -#: netbox/ipam/filtersets.py:1199 +#: netbox/ipam/filtersets.py:1200 msgid "Primary IPv6 (ID)" msgstr "" @@ -9691,8 +9697,8 @@ msgstr "" #: netbox/ipam/forms/bulk_edit.py:112 netbox/ipam/forms/bulk_edit.py:141 #: netbox/ipam/forms/bulk_edit.py:166 netbox/ipam/forms/bulk_import.py:92 #: netbox/ipam/forms/bulk_import.py:112 netbox/ipam/forms/bulk_import.py:132 -#: netbox/ipam/forms/filtersets.py:112 netbox/ipam/forms/filtersets.py:127 -#: netbox/ipam/forms/filtersets.py:150 netbox/ipam/forms/model_forms.py:99 +#: netbox/ipam/forms/filtersets.py:113 netbox/ipam/forms/filtersets.py:128 +#: netbox/ipam/forms/filtersets.py:151 netbox/ipam/forms/model_forms.py:99 #: netbox/ipam/forms/model_forms.py:112 netbox/ipam/forms/model_forms.py:135 #: netbox/ipam/forms/model_forms.py:154 netbox/ipam/models/asns.py:31 #: netbox/ipam/models/asns.py:100 netbox/ipam/models/ip.py:71 @@ -9715,13 +9721,13 @@ msgid "VLAN Group" msgstr "" #: netbox/ipam/forms/bulk_edit.py:218 netbox/ipam/forms/bulk_import.py:181 -#: netbox/ipam/forms/filtersets.py:259 netbox/ipam/forms/model_forms.py:217 +#: netbox/ipam/forms/filtersets.py:261 netbox/ipam/forms/model_forms.py:217 #: netbox/ipam/models/vlans.py:272 netbox/ipam/tables/ip.py:206 #: netbox/templates/ipam/prefix.html:56 netbox/templates/ipam/vlan.html:12 #: netbox/templates/ipam/vlan/base.html:6 #: netbox/templates/ipam/vlan_edit.html:10 #: netbox/templates/wireless/wirelesslan.html:38 -#: netbox/vpn/forms/bulk_import.py:304 netbox/vpn/forms/filtersets.py:284 +#: netbox/vpn/forms/bulk_import.py:304 netbox/vpn/forms/filtersets.py:290 #: netbox/vpn/forms/model_forms.py:436 netbox/vpn/forms/model_forms.py:455 #: netbox/wireless/forms/bulk_edit.py:57 #: netbox/wireless/forms/bulk_import.py:50 @@ -9733,18 +9739,18 @@ msgstr "" msgid "Prefix length" msgstr "" -#: netbox/ipam/forms/bulk_edit.py:252 netbox/ipam/forms/filtersets.py:244 +#: netbox/ipam/forms/bulk_edit.py:252 netbox/ipam/forms/filtersets.py:246 #: netbox/templates/ipam/prefix.html:81 msgid "Is a pool" msgstr "" #: netbox/ipam/forms/bulk_edit.py:257 netbox/ipam/forms/bulk_edit.py:302 -#: netbox/ipam/forms/filtersets.py:251 netbox/ipam/forms/filtersets.py:296 +#: netbox/ipam/forms/filtersets.py:253 netbox/ipam/forms/filtersets.py:299 #: netbox/ipam/models/ip.py:256 netbox/ipam/models/ip.py:525 msgid "Treat as fully utilized" msgstr "" -#: netbox/ipam/forms/bulk_edit.py:271 netbox/ipam/forms/filtersets.py:173 +#: netbox/ipam/forms/bulk_edit.py:271 netbox/ipam/forms/filtersets.py:174 #: netbox/ipam/forms/model_forms.py:232 msgid "VLAN Assignment" msgstr "" @@ -9755,20 +9761,20 @@ msgstr "" #: netbox/ipam/forms/bulk_edit.py:371 netbox/ipam/forms/bulk_edit.py:562 #: netbox/ipam/forms/bulk_import.py:417 netbox/ipam/forms/bulk_import.py:528 -#: netbox/ipam/forms/bulk_import.py:554 netbox/ipam/forms/filtersets.py:393 -#: netbox/ipam/forms/filtersets.py:582 netbox/templates/ipam/fhrpgroup.html:22 +#: netbox/ipam/forms/bulk_import.py:554 netbox/ipam/forms/filtersets.py:397 +#: netbox/ipam/forms/filtersets.py:586 netbox/templates/ipam/fhrpgroup.html:22 #: netbox/templates/ipam/inc/panels/fhrp_groups.html:24 #: netbox/templates/ipam/service.html:32 #: netbox/templates/ipam/servicetemplate.html:19 msgid "Protocol" msgstr "" -#: netbox/ipam/forms/bulk_edit.py:378 netbox/ipam/forms/filtersets.py:400 +#: netbox/ipam/forms/bulk_edit.py:378 netbox/ipam/forms/filtersets.py:404 #: netbox/ipam/tables/fhrp.py:22 netbox/templates/ipam/fhrpgroup.html:26 msgid "Group ID" msgstr "" -#: netbox/ipam/forms/bulk_edit.py:383 netbox/ipam/forms/filtersets.py:405 +#: netbox/ipam/forms/bulk_edit.py:383 netbox/ipam/forms/filtersets.py:409 #: netbox/wireless/forms/bulk_edit.py:70 netbox/wireless/forms/bulk_edit.py:118 #: netbox/wireless/forms/bulk_import.py:64 #: netbox/wireless/forms/bulk_import.py:67 @@ -9779,11 +9785,11 @@ msgstr "" msgid "Authentication type" msgstr "" -#: netbox/ipam/forms/bulk_edit.py:388 netbox/ipam/forms/filtersets.py:409 +#: netbox/ipam/forms/bulk_edit.py:388 netbox/ipam/forms/filtersets.py:413 msgid "Authentication key" msgstr "" -#: netbox/ipam/forms/bulk_edit.py:405 netbox/ipam/forms/filtersets.py:386 +#: netbox/ipam/forms/bulk_edit.py:405 netbox/ipam/forms/filtersets.py:390 #: netbox/ipam/forms/model_forms.py:517 netbox/netbox/navigation/menu.py:407 #: netbox/templates/ipam/fhrpgroup.html:49 #: netbox/templates/wireless/inc/authentication_attrs.html:5 @@ -9800,7 +9806,7 @@ msgid "VLAN ID ranges" msgstr "" #: netbox/ipam/forms/bulk_edit.py:505 netbox/ipam/forms/bulk_import.py:485 -#: netbox/ipam/forms/filtersets.py:557 netbox/ipam/models/vlans.py:232 +#: netbox/ipam/forms/filtersets.py:561 netbox/ipam/models/vlans.py:232 #: netbox/ipam/tables/vlans.py:103 msgid "Q-in-Q role" msgstr "" @@ -9921,12 +9927,12 @@ msgid "Route Targets" msgstr "" #: netbox/ipam/forms/filtersets.py:55 netbox/ipam/forms/model_forms.py:53 -#: netbox/vpn/forms/filtersets.py:224 netbox/vpn/forms/model_forms.py:400 +#: netbox/vpn/forms/filtersets.py:230 netbox/vpn/forms/model_forms.py:400 msgid "Import targets" msgstr "" #: netbox/ipam/forms/filtersets.py:60 netbox/ipam/forms/model_forms.py:58 -#: netbox/vpn/forms/filtersets.py:229 netbox/vpn/forms/model_forms.py:405 +#: netbox/vpn/forms/filtersets.py:235 netbox/vpn/forms/model_forms.py:405 msgid "Export targets" msgstr "" @@ -9943,71 +9949,71 @@ msgstr "" msgid "Private" msgstr "" -#: netbox/ipam/forms/filtersets.py:107 netbox/ipam/forms/filtersets.py:193 -#: netbox/ipam/forms/filtersets.py:275 netbox/ipam/forms/filtersets.py:329 +#: netbox/ipam/forms/filtersets.py:108 netbox/ipam/forms/filtersets.py:195 +#: netbox/ipam/forms/filtersets.py:278 netbox/ipam/forms/filtersets.py:333 msgid "Address family" msgstr "" -#: netbox/ipam/forms/filtersets.py:121 netbox/templates/ipam/asnrange.html:25 +#: netbox/ipam/forms/filtersets.py:122 netbox/templates/ipam/asnrange.html:25 msgid "Range" msgstr "" -#: netbox/ipam/forms/filtersets.py:130 +#: netbox/ipam/forms/filtersets.py:131 msgid "Start" msgstr "" -#: netbox/ipam/forms/filtersets.py:134 +#: netbox/ipam/forms/filtersets.py:135 msgid "End" msgstr "" -#: netbox/ipam/forms/filtersets.py:188 +#: netbox/ipam/forms/filtersets.py:190 msgid "Search within" msgstr "" -#: netbox/ipam/forms/filtersets.py:209 netbox/ipam/forms/filtersets.py:345 +#: netbox/ipam/forms/filtersets.py:211 netbox/ipam/forms/filtersets.py:349 msgid "Present in VRF" msgstr "" -#: netbox/ipam/forms/filtersets.py:314 +#: netbox/ipam/forms/filtersets.py:317 msgid "Device/VM" msgstr "" -#: netbox/ipam/forms/filtersets.py:324 +#: netbox/ipam/forms/filtersets.py:328 msgid "Parent Prefix" msgstr "" -#: netbox/ipam/forms/filtersets.py:369 +#: netbox/ipam/forms/filtersets.py:373 msgid "Assigned to an interface" msgstr "" -#: netbox/ipam/forms/filtersets.py:376 netbox/templates/ipam/ipaddress.html:51 +#: netbox/ipam/forms/filtersets.py:380 netbox/templates/ipam/ipaddress.html:51 msgid "DNS Name" msgstr "" -#: netbox/ipam/forms/filtersets.py:419 netbox/ipam/models/vlans.py:273 +#: netbox/ipam/forms/filtersets.py:423 netbox/ipam/models/vlans.py:273 #: netbox/ipam/tables/ip.py:122 netbox/ipam/tables/vlans.py:51 #: netbox/ipam/views.py:1036 netbox/netbox/navigation/menu.py:199 #: netbox/netbox/navigation/menu.py:201 msgid "VLANs" msgstr "" -#: netbox/ipam/forms/filtersets.py:460 +#: netbox/ipam/forms/filtersets.py:464 msgid "Contains VLAN ID" msgstr "" -#: netbox/ipam/forms/filtersets.py:494 netbox/ipam/models/vlans.py:363 +#: netbox/ipam/forms/filtersets.py:498 netbox/ipam/models/vlans.py:363 msgid "Local VLAN ID" msgstr "" -#: netbox/ipam/forms/filtersets.py:499 netbox/ipam/models/vlans.py:371 +#: netbox/ipam/forms/filtersets.py:503 netbox/ipam/models/vlans.py:371 msgid "Remote VLAN ID" msgstr "" -#: netbox/ipam/forms/filtersets.py:509 +#: netbox/ipam/forms/filtersets.py:513 msgid "Q-in-Q/802.1ad" msgstr "" -#: netbox/ipam/forms/filtersets.py:554 netbox/ipam/models/vlans.py:191 +#: netbox/ipam/forms/filtersets.py:558 netbox/ipam/models/vlans.py:191 #: netbox/templates/ipam/vlan.html:31 msgid "VLAN ID" msgstr "" @@ -10625,7 +10631,7 @@ msgid "Assigned" msgstr "" #: netbox/ipam/tables/ip.py:381 netbox/templates/vpn/l2vpntermination.html:16 -#: netbox/vpn/forms/filtersets.py:240 +#: netbox/vpn/forms/filtersets.py:246 msgid "Assigned Object" msgstr "" @@ -11741,24 +11747,24 @@ msgid "" "{error}" msgstr "" -#: netbox/netbox/views/generic/bulk_views.py:421 +#: netbox/netbox/views/generic/bulk_views.py:425 #, python-brace-format msgid "Row {i}: Object with ID {id} does not exist" msgstr "" -#: netbox/netbox/views/generic/bulk_views.py:708 -#: netbox/netbox/views/generic/bulk_views.py:909 -#: netbox/netbox/views/generic/bulk_views.py:957 +#: netbox/netbox/views/generic/bulk_views.py:712 +#: netbox/netbox/views/generic/bulk_views.py:913 +#: netbox/netbox/views/generic/bulk_views.py:961 #, python-brace-format msgid "No {object_type} were selected." msgstr "" -#: netbox/netbox/views/generic/bulk_views.py:787 +#: netbox/netbox/views/generic/bulk_views.py:791 #, python-brace-format msgid "Renamed {count} {object_type}" msgstr "" -#: netbox/netbox/views/generic/bulk_views.py:887 +#: netbox/netbox/views/generic/bulk_views.py:891 #, python-brace-format msgid "Deleted {count} {object_type}" msgstr "" @@ -11853,7 +11859,7 @@ msgid "Home Page" msgstr "" #: netbox/templates/account/base.html:7 netbox/templates/inc/user_menu.html:40 -#: netbox/vpn/forms/bulk_edit.py:255 netbox/vpn/forms/filtersets.py:189 +#: netbox/vpn/forms/bulk_edit.py:255 netbox/vpn/forms/filtersets.py:194 #: netbox/vpn/forms/model_forms.py:382 msgid "Profile" msgstr "" @@ -14588,23 +14594,23 @@ msgid "IKE Proposal" msgstr "" #: netbox/templates/vpn/ikeproposal.html:21 netbox/vpn/forms/bulk_edit.py:97 -#: netbox/vpn/forms/bulk_import.py:145 netbox/vpn/forms/filtersets.py:101 +#: netbox/vpn/forms/bulk_import.py:145 netbox/vpn/forms/filtersets.py:106 msgid "Authentication method" msgstr "" #: netbox/templates/vpn/ikeproposal.html:25 #: netbox/templates/vpn/ipsecproposal.html:21 netbox/vpn/forms/bulk_edit.py:102 #: netbox/vpn/forms/bulk_edit.py:172 netbox/vpn/forms/bulk_import.py:149 -#: netbox/vpn/forms/bulk_import.py:195 netbox/vpn/forms/filtersets.py:106 -#: netbox/vpn/forms/filtersets.py:154 +#: netbox/vpn/forms/bulk_import.py:195 netbox/vpn/forms/filtersets.py:111 +#: netbox/vpn/forms/filtersets.py:159 msgid "Encryption algorithm" msgstr "" #: netbox/templates/vpn/ikeproposal.html:29 #: netbox/templates/vpn/ipsecproposal.html:25 netbox/vpn/forms/bulk_edit.py:107 #: netbox/vpn/forms/bulk_edit.py:177 netbox/vpn/forms/bulk_import.py:153 -#: netbox/vpn/forms/bulk_import.py:200 netbox/vpn/forms/filtersets.py:111 -#: netbox/vpn/forms/filtersets.py:159 +#: netbox/vpn/forms/bulk_import.py:200 netbox/vpn/forms/filtersets.py:116 +#: netbox/vpn/forms/filtersets.py:164 msgid "Authentication algorithm" msgstr "" @@ -14655,18 +14661,18 @@ msgid "Add a Termination" msgstr "" #: netbox/templates/vpn/tunnel.html:37 netbox/vpn/forms/bulk_edit.py:49 -#: netbox/vpn/forms/bulk_import.py:48 netbox/vpn/forms/filtersets.py:57 +#: netbox/vpn/forms/bulk_import.py:48 netbox/vpn/forms/filtersets.py:62 msgid "Encapsulation" msgstr "" #: netbox/templates/vpn/tunnel.html:41 netbox/vpn/forms/bulk_edit.py:55 -#: netbox/vpn/forms/bulk_import.py:53 netbox/vpn/forms/filtersets.py:64 +#: netbox/vpn/forms/bulk_import.py:53 netbox/vpn/forms/filtersets.py:69 #: netbox/vpn/models/crypto.py:246 netbox/vpn/tables/tunnels.py:51 msgid "IPSec profile" msgstr "" #: netbox/templates/vpn/tunnel.html:45 netbox/vpn/forms/bulk_edit.py:69 -#: netbox/vpn/forms/filtersets.py:68 +#: netbox/vpn/forms/filtersets.py:73 msgid "Tunnel ID" msgstr "" @@ -15891,7 +15897,7 @@ msgid "VLAN (name)" msgstr "" #: netbox/vpn/forms/bulk_edit.py:45 netbox/vpn/forms/bulk_import.py:42 -#: netbox/vpn/forms/filtersets.py:54 +#: netbox/vpn/forms/filtersets.py:59 msgid "Tunnel group" msgstr "" @@ -15907,13 +15913,13 @@ msgid "Pre-shared key" msgstr "" #: netbox/vpn/forms/bulk_edit.py:237 netbox/vpn/forms/bulk_import.py:239 -#: netbox/vpn/forms/filtersets.py:199 netbox/vpn/forms/model_forms.py:373 +#: netbox/vpn/forms/filtersets.py:204 netbox/vpn/forms/model_forms.py:373 #: netbox/vpn/models/crypto.py:104 msgid "IKE policy" msgstr "" #: netbox/vpn/forms/bulk_edit.py:242 netbox/vpn/forms/bulk_import.py:244 -#: netbox/vpn/forms/filtersets.py:204 netbox/vpn/forms/model_forms.py:377 +#: netbox/vpn/forms/filtersets.py:209 netbox/vpn/forms/model_forms.py:377 #: netbox/vpn/models/crypto.py:207 msgid "IPSec policy" msgstr "" @@ -15978,16 +15984,16 @@ msgstr "" msgid "Cannot assign both an interface and a VLAN." msgstr "" -#: netbox/vpn/forms/filtersets.py:130 +#: netbox/vpn/forms/filtersets.py:135 msgid "IKE version" msgstr "" -#: netbox/vpn/forms/filtersets.py:142 netbox/vpn/forms/filtersets.py:175 +#: netbox/vpn/forms/filtersets.py:147 netbox/vpn/forms/filtersets.py:180 #: netbox/vpn/forms/model_forms.py:299 netbox/vpn/forms/model_forms.py:336 msgid "Proposal" msgstr "" -#: netbox/vpn/forms/filtersets.py:251 +#: netbox/vpn/forms/filtersets.py:257 msgid "Assigned Object Type" msgstr "" From 29c25e39fce5b549d4d960bcc7a65379059855ac Mon Sep 17 00:00:00 2001 From: Mika Busch Date: Fri, 7 Mar 2025 19:47:27 +0100 Subject: [PATCH 144/152] 17686 config option for disk divider (#18011) --- docs/configuration/miscellaneous.md | 12 +++++++ netbox/netbox/configuration_example.py | 5 +++ netbox/netbox/settings.py | 6 ++++ netbox/templates/virtualization/cluster.html | 4 +-- .../templates/virtualization/virtualdisk.html | 2 +- .../virtualization/virtualmachine.html | 4 +-- netbox/utilities/templatetags/helpers.py | 31 +++++++++++++++---- .../migrations/0040_convert_disk_size.py | 5 +-- .../virtualization/tables/virtualmachines.py | 6 ++-- 9 files changed, 59 insertions(+), 16 deletions(-) diff --git a/docs/configuration/miscellaneous.md b/docs/configuration/miscellaneous.md index c14c0ac77..b9d079564 100644 --- a/docs/configuration/miscellaneous.md +++ b/docs/configuration/miscellaneous.md @@ -233,3 +233,15 @@ This parameter controls how frequently a failed job is retried, up to the maximu Default: `0` (retries disabled) The maximum number of times a background task will be retried before being marked as failed. + +## DISK_BASE_UNIT + +Default: `1000` + +The base unit for disk sizes. Set this to `1024` to use binary prefixes (MiB, GiB, etc.) instead of decimal prefixes (MB, GB, etc.). + +## RAM_BASE_UNIT + +Default: `1000` + +The base unit for RAM sizes. Set this to `1024` to use binary prefixes (MiB, GiB, etc.) instead of decimal prefixes (MB, GB, etc.). diff --git a/netbox/netbox/configuration_example.py b/netbox/netbox/configuration_example.py index 84ead5339..d9861545c 100644 --- a/netbox/netbox/configuration_example.py +++ b/netbox/netbox/configuration_example.py @@ -221,6 +221,11 @@ SESSION_COOKIE_NAME = 'sessionid' # database access.) Note that the user as which NetBox runs must have read and write permissions to this path. SESSION_FILE_PATH = None +# By default the memory and disk sizes are displayed using base 10 (e.g. 1000 MB = 1 GB). +# If you would like to use base 2 (e.g. 1024 MB = 1 GB) set this to 1024. +# DISK_BASE_UNIT = 1024 +# RAM_BASE_UNIT = 1024 + # By default, uploaded media is stored on the local filesystem. Using Django-storages is also supported. Provide the # class path of the storage driver in STORAGE_BACKEND and any configuration options in STORAGE_CONFIG. For example: # STORAGE_BACKEND = 'storages.backends.s3boto3.S3Boto3Storage' diff --git a/netbox/netbox/settings.py b/netbox/netbox/settings.py index 84b86ba13..0248fa888 100644 --- a/netbox/netbox/settings.py +++ b/netbox/netbox/settings.py @@ -176,6 +176,12 @@ STORAGE_BACKEND = getattr(configuration, 'STORAGE_BACKEND', None) STORAGE_CONFIG = getattr(configuration, 'STORAGE_CONFIG', {}) TIME_ZONE = getattr(configuration, 'TIME_ZONE', 'UTC') TRANSLATION_ENABLED = getattr(configuration, 'TRANSLATION_ENABLED', True) +DISK_BASE_UNIT = getattr(configuration, 'DISK_BASE_UNIT', 1000) +if DISK_BASE_UNIT not in [1000, 1024]: + raise ImproperlyConfigured(f"DISK_BASE_UNIT must be 1000 or 1024 (found {DISK_BASE_UNIT})") +RAM_BASE_UNIT = getattr(configuration, 'RAM_BASE_UNIT', 1000) +if RAM_BASE_UNIT not in [1000, 1024]: + raise ImproperlyConfigured(f"RAM_BASE_UNIT must be 1000 or 1024 (found {RAM_BASE_UNIT})") # Load any dynamic configuration parameters which have been hard-coded in the configuration file for param in CONFIG_PARAMS: diff --git a/netbox/templates/virtualization/cluster.html b/netbox/templates/virtualization/cluster.html index 4155dacb2..f4d88f3d4 100644 --- a/netbox/templates/virtualization/cluster.html +++ b/netbox/templates/virtualization/cluster.html @@ -63,7 +63,7 @@ {% trans "Memory" %} {% if memory_sum %} - {{ memory_sum|humanize_megabytes }} + {{ memory_sum|humanize_ram_megabytes }} {% else %} {{ ''|placeholder }} {% endif %} @@ -73,7 +73,7 @@ {% trans "Disk Space" %} {% if disk_sum %} - {{ disk_sum|humanize_megabytes }} + {{ disk_sum|humanize_disk_megabytes }} {% else %} {{ ''|placeholder }} {% endif %} diff --git a/netbox/templates/virtualization/virtualdisk.html b/netbox/templates/virtualization/virtualdisk.html index 3284d1668..805d779a9 100644 --- a/netbox/templates/virtualization/virtualdisk.html +++ b/netbox/templates/virtualization/virtualdisk.html @@ -29,7 +29,7 @@ {% trans "Size" %} {% if object.size %} - {{ object.size|humanize_megabytes }} + {{ object.size|humanize_disk_megabytes }} {% else %} {{ ''|placeholder }} {% endif %} diff --git a/netbox/templates/virtualization/virtualmachine.html b/netbox/templates/virtualization/virtualmachine.html index 2bff51870..37a42b1d4 100644 --- a/netbox/templates/virtualization/virtualmachine.html +++ b/netbox/templates/virtualization/virtualmachine.html @@ -129,7 +129,7 @@ {% trans "Memory" %} {% if object.memory %} - {{ object.memory|humanize_megabytes }} + {{ object.memory|humanize_ram_megabytes }} {% else %} {{ ''|placeholder }} {% endif %} @@ -141,7 +141,7 @@ {% if object.disk %} - {{ object.disk|humanize_megabytes }} + {{ object.disk|humanize_disk_megabytes }} {% else %} {{ ''|placeholder }} {% endif %} diff --git a/netbox/utilities/templatetags/helpers.py b/netbox/utilities/templatetags/helpers.py index 3595c0666..2f175d2b6 100644 --- a/netbox/utilities/templatetags/helpers.py +++ b/netbox/utilities/templatetags/helpers.py @@ -8,6 +8,7 @@ from django.urls import NoReverseMatch, reverse from core.models import ObjectType from utilities.forms import get_selected_values, TableConfigForm from utilities.views import get_viewname +from netbox.settings import DISK_BASE_UNIT, RAM_BASE_UNIT __all__ = ( 'applied_filters', @@ -15,7 +16,8 @@ __all__ = ( 'divide', 'get_item', 'get_key', - 'humanize_megabytes', + 'humanize_disk_megabytes', + 'humanize_ram_megabytes', 'humanize_speed', 'icon_from_status', 'kg_to_pounds', @@ -84,17 +86,16 @@ def humanize_speed(speed): return '{} Kbps'.format(speed) -@register.filter() -def humanize_megabytes(mb): +def _humanize_megabytes(mb, divisor=1000): """ Express a number of megabytes in the most suitable unit (e.g. gigabytes, terabytes, etc.). """ if not mb: return "" - PB_SIZE = 1000000000 - TB_SIZE = 1000000 - GB_SIZE = 1000 + PB_SIZE = divisor**3 + TB_SIZE = divisor**2 + GB_SIZE = divisor if mb >= PB_SIZE: return f"{mb / PB_SIZE:.2f} PB" @@ -105,6 +106,24 @@ def humanize_megabytes(mb): return f"{mb} MB" +@register.filter() +def humanize_disk_megabytes(mb): + """ + Express a number of megabytes in the most suitable unit (e.g. gigabytes, terabytes, etc.). + Use the DISK_BASE_UNIT setting to determine the divisor. Default is 1000. + """ + return _humanize_megabytes(mb, DISK_BASE_UNIT) + + +@register.filter() +def humanize_ram_megabytes(mb): + """ + Express a number of megabytes in the most suitable unit (e.g. gigabytes, terabytes, etc.). + Use the RAM_BASE_UNIT setting to determine the divisor. Default is 1000. + """ + return _humanize_megabytes(mb, RAM_BASE_UNIT) + + @register.filter() def divide(x, y): """ diff --git a/netbox/virtualization/migrations/0040_convert_disk_size.py b/netbox/virtualization/migrations/0040_convert_disk_size.py index 4b0aec7bd..20153f7a0 100644 --- a/netbox/virtualization/migrations/0040_convert_disk_size.py +++ b/netbox/virtualization/migrations/0040_convert_disk_size.py @@ -1,13 +1,14 @@ from django.db import migrations from django.db.models import F, Sum +from netbox.settings import DISK_BASE_UNIT def convert_disk_size(apps, schema_editor): VirtualMachine = apps.get_model('virtualization', 'VirtualMachine') - VirtualMachine.objects.filter(disk__isnull=False).update(disk=F('disk') * 1000) + VirtualMachine.objects.filter(disk__isnull=False).update(disk=F('disk') * DISK_BASE_UNIT) VirtualDisk = apps.get_model('virtualization', 'VirtualDisk') - VirtualDisk.objects.filter(size__isnull=False).update(size=F('size') * 1000) + VirtualDisk.objects.filter(size__isnull=False).update(size=F('size') * DISK_BASE_UNIT) # Recalculate disk size on all VMs with virtual disks id_list = VirtualDisk.objects.values_list('virtual_machine_id').distinct() diff --git a/netbox/virtualization/tables/virtualmachines.py b/netbox/virtualization/tables/virtualmachines.py index 20cfdd6d1..d56fe668a 100644 --- a/netbox/virtualization/tables/virtualmachines.py +++ b/netbox/virtualization/tables/virtualmachines.py @@ -4,7 +4,7 @@ from django.utils.translation import gettext_lazy as _ from dcim.tables.devices import BaseInterfaceTable from netbox.tables import NetBoxTable, columns from tenancy.tables import ContactsColumnMixin, TenancyColumnsMixin -from utilities.templatetags.helpers import humanize_megabytes +from utilities.templatetags.helpers import humanize_disk_megabytes from virtualization.models import VirtualDisk, VirtualMachine, VMInterface from .template_code import * @@ -93,7 +93,7 @@ class VirtualMachineTable(TenancyColumnsMixin, ContactsColumnMixin, NetBoxTable) ) def render_disk(self, value): - return humanize_megabytes(value) + return humanize_disk_megabytes(value) # @@ -183,7 +183,7 @@ class VirtualDiskTable(NetBoxTable): } def render_size(self, value): - return humanize_megabytes(value) + return humanize_disk_megabytes(value) class VirtualMachineVirtualDiskTable(VirtualDiskTable): From 8823b07745ef962c60b680eabae70902d2628a42 Mon Sep 17 00:00:00 2001 From: github-actions <41898282+github-actions[bot]@users.noreply.github.com> Date: Sat, 8 Mar 2025 05:02:21 +0000 Subject: [PATCH 145/152] Update source translation strings --- netbox/translations/en/LC_MESSAGES/django.po | 32 ++++++++++---------- 1 file changed, 16 insertions(+), 16 deletions(-) diff --git a/netbox/translations/en/LC_MESSAGES/django.po b/netbox/translations/en/LC_MESSAGES/django.po index 185ef47f7..582026f07 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: 2025-03-07 05:02+0000\n" +"POT-Creation-Date: 2025-03-08 05:01+0000\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -11646,63 +11646,63 @@ msgstr "" msgid "Cannot delete stores from registry" msgstr "" -#: netbox/netbox/settings.py:752 +#: netbox/netbox/settings.py:758 msgid "Czech" msgstr "" -#: netbox/netbox/settings.py:753 +#: netbox/netbox/settings.py:759 msgid "Danish" msgstr "" -#: netbox/netbox/settings.py:754 +#: netbox/netbox/settings.py:760 msgid "German" msgstr "" -#: netbox/netbox/settings.py:755 +#: netbox/netbox/settings.py:761 msgid "English" msgstr "" -#: netbox/netbox/settings.py:756 +#: netbox/netbox/settings.py:762 msgid "Spanish" msgstr "" -#: netbox/netbox/settings.py:757 +#: netbox/netbox/settings.py:763 msgid "French" msgstr "" -#: netbox/netbox/settings.py:758 +#: netbox/netbox/settings.py:764 msgid "Italian" msgstr "" -#: netbox/netbox/settings.py:759 +#: netbox/netbox/settings.py:765 msgid "Japanese" msgstr "" -#: netbox/netbox/settings.py:760 +#: netbox/netbox/settings.py:766 msgid "Dutch" msgstr "" -#: netbox/netbox/settings.py:761 +#: netbox/netbox/settings.py:767 msgid "Polish" msgstr "" -#: netbox/netbox/settings.py:762 +#: netbox/netbox/settings.py:768 msgid "Portuguese" msgstr "" -#: netbox/netbox/settings.py:763 +#: netbox/netbox/settings.py:769 msgid "Russian" msgstr "" -#: netbox/netbox/settings.py:764 +#: netbox/netbox/settings.py:770 msgid "Turkish" msgstr "" -#: netbox/netbox/settings.py:765 +#: netbox/netbox/settings.py:771 msgid "Ukrainian" msgstr "" -#: netbox/netbox/settings.py:766 +#: netbox/netbox/settings.py:772 msgid "Chinese" msgstr "" From 1a60cb98840bb5a85950a5e7087ff79628643200 Mon Sep 17 00:00:00 2001 From: Tobias Genannt Date: Mon, 10 Mar 2025 18:11:35 +0100 Subject: [PATCH 146/152] Fixes: #18568 Update mkdocstrings and adapt config (#18841) * Fixes: #18568 Update mkdocstrings and adapt config * Fixed some output formatting errors When trying to compare the output from "mkdocstrings[python-legacy]==0.27.0" and "mkdocstrings[python]==0.28.2" I encountered some HTML errors: -

    inside a

    - unescaped non-tags --- docs/administration/authentication/overview.md | 1 + docs/customization/export-templates.md | 1 + docs/integrations/graphql-api.md | 3 ++- docs/plugins/development/index.md | 1 + docs/release-notes/version-2.1.md | 2 +- mkdocs.yml | 7 +------ requirements.txt | 2 +- 7 files changed, 8 insertions(+), 9 deletions(-) diff --git a/docs/administration/authentication/overview.md b/docs/administration/authentication/overview.md index e582f009e..19c86a4c0 100644 --- a/docs/administration/authentication/overview.md +++ b/docs/administration/authentication/overview.md @@ -54,6 +54,7 @@ Icons](https://github.com/google/material-design-icons) icon's name; or be `None` for no icon. For instance, the OIDC backend may be customized with + ```python SOCIAL_AUTH_BACKEND_ATTRS = { 'oidc': ("My awesome SSO", "login"), diff --git a/docs/customization/export-templates.md b/docs/customization/export-templates.md index 640a97531..4fc2fabf2 100644 --- a/docs/customization/export-templates.md +++ b/docs/customization/export-templates.md @@ -25,6 +25,7 @@ Height: {{ rack.u_height }}U To access custom fields of an object within a template, use the `cf` attribute. For example, `{{ obj.cf.color }}` will return the value (if any) for a custom field named `color` on `obj`. If you need to use the config context data in an export template, you'll should use the function `get_config_context` to get all the config context data. For example: + ``` {% for server in queryset %} {% set data = server.get_config_context() %} diff --git a/docs/integrations/graphql-api.md b/docs/integrations/graphql-api.md index c02045f34..87d9d8c49 100644 --- a/docs/integrations/graphql-api.md +++ b/docs/integrations/graphql-api.md @@ -60,6 +60,7 @@ query { } } ``` + In addition, filtering can be done on list of related objects as shown in the following query: ``` @@ -98,8 +99,8 @@ Certain queries can return multiple types of objects, for example cable terminat } } } - ``` + The field "class_type" is an easy way to distinguish what type of object it is when viewing the returned data, or when filtering. It contains the class name, for example "CircuitTermination" or "ConsoleServerPort". ## Authentication diff --git a/docs/plugins/development/index.md b/docs/plugins/development/index.md index 246816349..9dbf23e84 100644 --- a/docs/plugins/development/index.md +++ b/docs/plugins/development/index.md @@ -204,6 +204,7 @@ To ease development, it is recommended to go ahead and install the plugin at thi ```no-highlight $ pip install -e . ``` + More information on editable builds can be found at [Editable installs for pyproject.toml ](https://peps.python.org/pep-0660/). ## Configure NetBox diff --git a/docs/release-notes/version-2.1.md b/docs/release-notes/version-2.1.md index 7ec172b1f..0f84c80d9 100644 --- a/docs/release-notes/version-2.1.md +++ b/docs/release-notes/version-2.1.md @@ -150,5 +150,5 @@ The [NAPALM automation](https://github.com/napalm-automation/napalm) library pro * Modified the interface serializer to include three discrete fields relating to connections: `is_connected` (boolean), `interface_connection`, and `circuit_termination` * Added two new fields to the inventory item serializer: `asset_tag` and `description` * Added "wireless" to interface type filter (in addition to physical, virtual, and LAG) -* Added a new endpoint at /api/ipam/prefixes//available-ips/ to retrieve or create available IPs within a prefix +* Added a new endpoint at /api/ipam/prefixes//available-ips/ to retrieve or create available IPs within a prefix * Extended `parent_device` on DeviceSerializer to include the `url` and `display_name` of the parent Device, and the `url` of the DeviceBay diff --git a/mkdocs.yml b/mkdocs.yml index 193d10700..75020d122 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -28,12 +28,7 @@ plugins: - mkdocstrings: handlers: python: - setup_commands: - - import os - - import django - - os.chdir('netbox/') - - os.environ.setdefault("DJANGO_SETTINGS_MODULE", "netbox.settings") - - django.setup() + paths: ["netbox"] options: heading_level: 3 members_order: source diff --git a/requirements.txt b/requirements.txt index 4a9ac2aa0..19715f23a 100644 --- a/requirements.txt +++ b/requirements.txt @@ -21,7 +21,7 @@ gunicorn==23.0.0 Jinja2==3.1.6 Markdown==3.7 mkdocs-material==9.6.7 -mkdocstrings[python-legacy]==0.27.0 +mkdocstrings[python]==0.28.2 netaddr==1.3.0 nh3==0.2.21 Pillow==11.1.0 From a9fd191086bc8c6d85170e893a765e3268a6baad Mon Sep 17 00:00:00 2001 From: Antoine Keranflec'h <52744345+antoinekh@users.noreply.github.com> Date: Mon, 10 Mar 2025 18:49:24 +0100 Subject: [PATCH 147/152] Fixes: #18744 Add Contact link as hyperlink (#18847) * contact link as hyperlink * fix(lint) add missing blank lines * simplify by using lambda function --- netbox/tenancy/tables/contacts.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/netbox/tenancy/tables/contacts.py b/netbox/tenancy/tables/contacts.py index c4e35ab1b..5af15a97b 100644 --- a/netbox/tenancy/tables/contacts.py +++ b/netbox/tenancy/tables/contacts.py @@ -126,7 +126,8 @@ class ContactAssignmentTable(NetBoxTable): ) contact_link = tables.Column( accessor=Accessor('contact__link'), - verbose_name=_('Contact Link') + verbose_name=_('Contact Link'), + linkify=lambda value: value, ) contact_description = tables.Column( accessor=Accessor('contact__description'), From 292463c0dee73f8582e688eef1ec2343b0e1e94a Mon Sep 17 00:00:00 2001 From: Jeremy Stretch Date: Mon, 10 Mar 2025 17:40:08 -0400 Subject: [PATCH 148/152] Closes #18857: Fix deprecation warnings (#18858) --- netbox/circuits/tables/circuits.py | 2 +- netbox/extras/dashboard/widgets.py | 3 ++- netbox/extras/models/customfields.py | 2 +- netbox/tenancy/forms/bulk_edit.py | 1 + 4 files changed, 5 insertions(+), 3 deletions(-) diff --git a/netbox/circuits/tables/circuits.py b/netbox/circuits/tables/circuits.py index 9e59ec019..b568d0e90 100644 --- a/netbox/circuits/tables/circuits.py +++ b/netbox/circuits/tables/circuits.py @@ -111,7 +111,7 @@ class CircuitTerminationTable(NetBoxTable): provider = tables.Column( verbose_name=_('Provider'), linkify=True, - accessor='circuit.provider' + accessor='circuit__provider' ) term_side = tables.Column( verbose_name=_('Side') diff --git a/netbox/extras/dashboard/widgets.py b/netbox/extras/dashboard/widgets.py index eeed5414f..4338f74d6 100644 --- a/netbox/extras/dashboard/widgets.py +++ b/netbox/extras/dashboard/widgets.py @@ -284,7 +284,8 @@ class RSSFeedWidget(DashboardWidget): class ConfigForm(WidgetConfigForm): feed_url = forms.URLField( - label=_('Feed URL') + label=_('Feed URL'), + assume_scheme='https' ) requires_internet = forms.BooleanField( label=_('Requires external connection'), diff --git a/netbox/extras/models/customfields.py b/netbox/extras/models/customfields.py index e1ceaf7a6..79b01b6ab 100644 --- a/netbox/extras/models/customfields.py +++ b/netbox/extras/models/customfields.py @@ -515,7 +515,7 @@ class CustomField(CloningMixin, ExportTemplatesMixin, ChangeLoggedModel): # URL elif self.type == CustomFieldTypeChoices.TYPE_URL: - field = LaxURLField(required=required, initial=initial) + field = LaxURLField(assume_scheme='https', required=required, initial=initial) # JSON elif self.type == CustomFieldTypeChoices.TYPE_JSON: diff --git a/netbox/tenancy/forms/bulk_edit.py b/netbox/tenancy/forms/bulk_edit.py index 5af3f22ac..d3a63fdcd 100644 --- a/netbox/tenancy/forms/bulk_edit.py +++ b/netbox/tenancy/forms/bulk_edit.py @@ -116,6 +116,7 @@ class ContactBulkEditForm(NetBoxModelBulkEditForm): ) link = forms.URLField( label=_('Link'), + assume_scheme='https', required=False ) description = forms.CharField( From 89e3f3d3e952f1e4cd7ad9fefe3221d638337923 Mon Sep 17 00:00:00 2001 From: github-actions <41898282+github-actions[bot]@users.noreply.github.com> Date: Tue, 11 Mar 2025 05:02:10 +0000 Subject: [PATCH 149/152] Update source translation strings --- netbox/translations/en/LC_MESSAGES/django.po | 22 ++++++++++---------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/netbox/translations/en/LC_MESSAGES/django.po b/netbox/translations/en/LC_MESSAGES/django.po index 582026f07..5c7f3c514 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: 2025-03-08 05:01+0000\n" +"POT-Creation-Date: 2025-03-11 05:01+0000\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -575,7 +575,7 @@ msgstr "" #: netbox/templates/wireless/wirelesslangroup.html:33 #: netbox/templates/wireless/wirelesslink.html:34 #: netbox/tenancy/forms/bulk_edit.py:32 netbox/tenancy/forms/bulk_edit.py:80 -#: netbox/tenancy/forms/bulk_edit.py:122 netbox/users/forms/bulk_edit.py:64 +#: netbox/tenancy/forms/bulk_edit.py:123 netbox/users/forms/bulk_edit.py:64 #: netbox/users/forms/bulk_edit.py:82 netbox/users/forms/bulk_edit.py:112 #: netbox/virtualization/forms/bulk_edit.py:33 #: netbox/virtualization/forms/bulk_edit.py:47 @@ -1044,7 +1044,7 @@ msgstr "" #: netbox/templates/dcim/virtualchassis.html:68 #: netbox/templates/dcim/virtualchassis_edit.html:56 #: netbox/templates/ipam/inc/panels/fhrp_groups.html:26 -#: netbox/tenancy/forms/bulk_edit.py:147 netbox/tenancy/forms/filtersets.py:110 +#: netbox/tenancy/forms/bulk_edit.py:148 netbox/tenancy/forms/filtersets.py:110 msgid "Priority" msgstr "" @@ -1095,7 +1095,7 @@ msgstr "" #: netbox/templates/virtualization/virtualmachine.html:23 #: netbox/templates/vpn/tunneltermination.html:17 #: netbox/templates/wireless/inc/wirelesslink_interface.html:20 -#: netbox/tenancy/forms/bulk_edit.py:142 netbox/tenancy/forms/filtersets.py:107 +#: netbox/tenancy/forms/bulk_edit.py:143 netbox/tenancy/forms/filtersets.py:107 #: netbox/tenancy/forms/model_forms.py:137 #: netbox/tenancy/tables/contacts.py:102 #: netbox/virtualization/forms/bulk_edit.py:127 @@ -7832,25 +7832,25 @@ msgstr "" msgid "Feed URL" msgstr "" -#: netbox/extras/dashboard/widgets.py:290 +#: netbox/extras/dashboard/widgets.py:291 msgid "Requires external connection" msgstr "" -#: netbox/extras/dashboard/widgets.py:296 +#: netbox/extras/dashboard/widgets.py:297 msgid "The maximum number of objects to display" msgstr "" -#: netbox/extras/dashboard/widgets.py:301 +#: netbox/extras/dashboard/widgets.py:302 msgid "How long to stored the cached content (in seconds)" msgstr "" -#: netbox/extras/dashboard/widgets.py:358 netbox/templates/account/base.html:10 +#: netbox/extras/dashboard/widgets.py:359 netbox/templates/account/base.html:10 #: netbox/templates/account/bookmarks.html:7 #: netbox/templates/inc/user_menu.html:43 msgid "Bookmarks" msgstr "" -#: netbox/extras/dashboard/widgets.py:362 +#: netbox/extras/dashboard/widgets.py:363 msgid "Show your personal bookmarks" msgstr "" @@ -14416,7 +14416,7 @@ msgid "" msgstr "" #: netbox/templates/tenancy/contact.html:18 netbox/tenancy/filtersets.py:147 -#: netbox/tenancy/forms/bulk_edit.py:137 netbox/tenancy/forms/filtersets.py:102 +#: netbox/tenancy/forms/bulk_edit.py:138 netbox/tenancy/forms/filtersets.py:102 #: netbox/tenancy/forms/forms.py:57 netbox/tenancy/forms/model_forms.py:106 #: netbox/tenancy/forms/model_forms.py:130 netbox/tenancy/tables/contacts.py:98 msgid "Contact" @@ -14894,7 +14894,7 @@ msgstr "" msgid "Contact Link" msgstr "" -#: netbox/tenancy/tables/contacts.py:133 +#: netbox/tenancy/tables/contacts.py:134 msgid "Contact Description" msgstr "" From 5d81f911d6203ef4129d926229d28aee875e4d72 Mon Sep 17 00:00:00 2001 From: Renato Almeida de Oliveira Date: Tue, 11 Mar 2025 09:46:46 -0300 Subject: [PATCH 150/152] Fixes: #18582 Bulk import prefixes with associated VLAN not working when multiple VLANs with the same vid exist. (#18844) * Add site CSVModelChoiceField * Change site field to vlan_site --- netbox/ipam/forms/bulk_import.py | 19 +++++++++++++------ 1 file changed, 13 insertions(+), 6 deletions(-) diff --git a/netbox/ipam/forms/bulk_import.py b/netbox/ipam/forms/bulk_import.py index c1f2dedd7..a672fd641 100644 --- a/netbox/ipam/forms/bulk_import.py +++ b/netbox/ipam/forms/bulk_import.py @@ -177,6 +177,13 @@ class PrefixImportForm(ScopedImportForm, NetBoxModelImportForm): to_field_name='name', help_text=_("VLAN's group (if any)") ) + vlan_site = CSVModelChoiceField( + label=_('VLAN Site'), + queryset=Site.objects.all(), + required=False, + to_field_name='name', + help_text=_("VLAN's site (if any)") + ) vlan = CSVModelChoiceField( label=_('VLAN'), queryset=VLAN.objects.all(), @@ -200,8 +207,8 @@ class PrefixImportForm(ScopedImportForm, NetBoxModelImportForm): class Meta: model = Prefix fields = ( - 'prefix', 'vrf', 'tenant', 'vlan_group', 'vlan', 'status', 'role', 'scope_type', 'scope_id', 'is_pool', - 'mark_utilized', 'description', 'comments', 'tags', + 'prefix', 'vrf', 'tenant', 'vlan_group', 'vlan_site', 'vlan', 'status', 'role', 'scope_type', 'scope_id', + 'is_pool', 'mark_utilized', 'description', 'comments', 'tags', ) labels = { 'scope_id': _('Scope ID'), @@ -213,19 +220,19 @@ class PrefixImportForm(ScopedImportForm, NetBoxModelImportForm): if not data: return - site = data.get('site') + vlan_site = data.get('vlan_site') vlan_group = data.get('vlan_group') # Limit VLAN queryset by assigned site and/or group (if specified) query = Q() - if site: + if vlan_site: query |= Q(**{ - f"site__{self.fields['site'].to_field_name}": site + f"site__{self.fields['vlan_site'].to_field_name}": vlan_site }) # Don't Forget to include VLANs without a site in the filter query |= Q(**{ - f"site__{self.fields['site'].to_field_name}__isnull": True + f"site__{self.fields['vlan_site'].to_field_name}__isnull": True }) if vlan_group: From 19d12826837e723f5b4cea8735b3ea06d0567c12 Mon Sep 17 00:00:00 2001 From: Fabi <18670690+fabi125@users.noreply.github.com> Date: Tue, 11 Mar 2025 15:18:42 -0400 Subject: [PATCH 151/152] Fixes #18838: Correctly reject invalid falsy local context data (#18860) * Correctly reject invalid falsy local context data. * move tests --- netbox/extras/models/configs.py | 2 +- netbox/extras/tests/test_models.py | 28 ++++++++++++++++++++++++++++ 2 files changed, 29 insertions(+), 1 deletion(-) diff --git a/netbox/extras/models/configs.py b/netbox/extras/models/configs.py index 6b52d4c02..773f5a70e 100644 --- a/netbox/extras/models/configs.py +++ b/netbox/extras/models/configs.py @@ -200,7 +200,7 @@ class ConfigContextModel(models.Model): super().clean() # Verify that JSON data is provided as an object - if self.local_context_data and type(self.local_context_data) is not dict: + if self.local_context_data is not None and type(self.local_context_data) is not dict: raise ValidationError( {'local_context_data': _('JSON data must be in object form. Example:') + ' {"foo": 123}'} ) diff --git a/netbox/extras/tests/test_models.py b/netbox/extras/tests/test_models.py index c90390dd1..34882537d 100644 --- a/netbox/extras/tests/test_models.py +++ b/netbox/extras/tests/test_models.py @@ -1,3 +1,4 @@ +from django.forms import ValidationError from django.test import TestCase from core.models import ObjectType @@ -478,3 +479,30 @@ class ConfigContextTest(TestCase): annotated_queryset = Device.objects.filter(name=device.name).annotate_config_context_data() self.assertEqual(ConfigContext.objects.get_for_object(device).count(), 2) self.assertEqual(device.get_config_context(), annotated_queryset[0].get_config_context()) + + def test_valid_local_context_data(self): + device = Device.objects.first() + device.local_context_data = None + device.clean() + + device.local_context_data = {"foo": "bar"} + device.clean() + + def test_invalid_local_context_data(self): + device = Device.objects.first() + + device.local_context_data = "" + with self.assertRaises(ValidationError): + device.clean() + + device.local_context_data = 0 + with self.assertRaises(ValidationError): + device.clean() + + device.local_context_data = False + with self.assertRaises(ValidationError): + device.clean() + + device.local_context_data = 'foo' + with self.assertRaises(ValidationError): + device.clean() From 5e22ef59c551773970cc3ba1fd585b843c4f3790 Mon Sep 17 00:00:00 2001 From: github-actions <41898282+github-actions[bot]@users.noreply.github.com> Date: Wed, 12 Mar 2025 05:02:02 +0000 Subject: [PATCH 152/152] Update source translation strings --- netbox/translations/en/LC_MESSAGES/django.po | 190 ++++++++++--------- 1 file changed, 99 insertions(+), 91 deletions(-) diff --git a/netbox/translations/en/LC_MESSAGES/django.po b/netbox/translations/en/LC_MESSAGES/django.po index 5c7f3c514..81addd701 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: 2025-03-11 05:01+0000\n" +"POT-Creation-Date: 2025-03-12 05:01+0000\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -224,7 +224,7 @@ msgstr "" #: netbox/dcim/tables/power.py:26 netbox/dcim/tables/power.py:93 #: netbox/dcim/tables/racks.py:121 netbox/dcim/tables/racks.py:206 #: netbox/dcim/tables/sites.py:133 netbox/extras/filtersets.py:525 -#: netbox/ipam/forms/bulk_edit.py:468 netbox/ipam/forms/bulk_import.py:452 +#: netbox/ipam/forms/bulk_edit.py:468 netbox/ipam/forms/bulk_import.py:459 #: netbox/ipam/forms/filtersets.py:156 netbox/ipam/forms/filtersets.py:231 #: netbox/ipam/forms/filtersets.py:439 netbox/ipam/forms/filtersets.py:534 #: netbox/ipam/forms/model_forms.py:679 netbox/ipam/tables/vlans.py:87 @@ -763,8 +763,8 @@ msgstr "" #: netbox/dcim/tables/sites.py:82 netbox/dcim/tables/sites.py:137 #: netbox/ipam/forms/bulk_edit.py:240 netbox/ipam/forms/bulk_edit.py:290 #: netbox/ipam/forms/bulk_edit.py:338 netbox/ipam/forms/bulk_edit.py:490 -#: netbox/ipam/forms/bulk_import.py:188 netbox/ipam/forms/bulk_import.py:256 -#: netbox/ipam/forms/bulk_import.py:292 netbox/ipam/forms/bulk_import.py:473 +#: netbox/ipam/forms/bulk_import.py:195 netbox/ipam/forms/bulk_import.py:263 +#: netbox/ipam/forms/bulk_import.py:299 netbox/ipam/forms/bulk_import.py:480 #: netbox/ipam/forms/filtersets.py:214 netbox/ipam/forms/filtersets.py:287 #: netbox/ipam/forms/filtersets.py:362 netbox/ipam/forms/filtersets.py:546 #: netbox/ipam/forms/model_forms.py:511 netbox/ipam/tables/ip.py:183 @@ -840,8 +840,8 @@ msgstr "" #: netbox/ipam/forms/bulk_import.py:41 netbox/ipam/forms/bulk_import.py:70 #: netbox/ipam/forms/bulk_import.py:98 netbox/ipam/forms/bulk_import.py:118 #: netbox/ipam/forms/bulk_import.py:138 netbox/ipam/forms/bulk_import.py:167 -#: netbox/ipam/forms/bulk_import.py:249 netbox/ipam/forms/bulk_import.py:285 -#: netbox/ipam/forms/bulk_import.py:466 netbox/ipam/forms/filtersets.py:50 +#: netbox/ipam/forms/bulk_import.py:256 netbox/ipam/forms/bulk_import.py:292 +#: netbox/ipam/forms/bulk_import.py:473 netbox/ipam/forms/filtersets.py:50 #: netbox/ipam/forms/filtersets.py:70 netbox/ipam/forms/filtersets.py:102 #: netbox/ipam/forms/filtersets.py:123 netbox/ipam/forms/filtersets.py:146 #: netbox/ipam/forms/filtersets.py:177 netbox/ipam/forms/filtersets.py:272 @@ -1074,9 +1074,9 @@ msgstr "" #: netbox/dcim/tables/devicetypes.py:311 netbox/dcim/tables/racks.py:128 #: netbox/extras/filtersets.py:552 netbox/ipam/forms/bulk_edit.py:245 #: netbox/ipam/forms/bulk_edit.py:295 netbox/ipam/forms/bulk_edit.py:343 -#: netbox/ipam/forms/bulk_edit.py:495 netbox/ipam/forms/bulk_import.py:193 -#: netbox/ipam/forms/bulk_import.py:261 netbox/ipam/forms/bulk_import.py:297 -#: netbox/ipam/forms/bulk_import.py:478 netbox/ipam/forms/filtersets.py:242 +#: netbox/ipam/forms/bulk_edit.py:495 netbox/ipam/forms/bulk_import.py:200 +#: netbox/ipam/forms/bulk_import.py:268 netbox/ipam/forms/bulk_import.py:304 +#: netbox/ipam/forms/bulk_import.py:485 netbox/ipam/forms/filtersets.py:242 #: netbox/ipam/forms/filtersets.py:295 netbox/ipam/forms/filtersets.py:367 #: netbox/ipam/forms/filtersets.py:554 netbox/ipam/forms/model_forms.py:194 #: netbox/ipam/forms/model_forms.py:220 netbox/ipam/forms/model_forms.py:259 @@ -1128,9 +1128,9 @@ msgstr "" #: netbox/dcim/forms/bulk_import.py:151 netbox/dcim/forms/bulk_import.py:252 #: netbox/dcim/forms/bulk_import.py:534 netbox/dcim/forms/bulk_import.py:688 #: netbox/dcim/forms/bulk_import.py:1139 netbox/dcim/forms/bulk_import.py:1492 -#: netbox/ipam/forms/bulk_import.py:190 netbox/ipam/forms/bulk_import.py:258 -#: netbox/ipam/forms/bulk_import.py:294 netbox/ipam/forms/bulk_import.py:475 -#: netbox/ipam/forms/bulk_import.py:488 +#: netbox/ipam/forms/bulk_import.py:197 netbox/ipam/forms/bulk_import.py:265 +#: netbox/ipam/forms/bulk_import.py:301 netbox/ipam/forms/bulk_import.py:482 +#: netbox/ipam/forms/bulk_import.py:495 #: netbox/virtualization/forms/bulk_import.py:57 #: netbox/virtualization/forms/bulk_import.py:88 #: netbox/vpn/forms/bulk_import.py:39 netbox/wireless/forms/bulk_import.py:47 @@ -1146,8 +1146,8 @@ msgstr "" #: netbox/dcim/forms/bulk_import.py:1551 netbox/ipam/forms/bulk_import.py:45 #: netbox/ipam/forms/bulk_import.py:74 netbox/ipam/forms/bulk_import.py:102 #: netbox/ipam/forms/bulk_import.py:122 netbox/ipam/forms/bulk_import.py:142 -#: netbox/ipam/forms/bulk_import.py:171 netbox/ipam/forms/bulk_import.py:253 -#: netbox/ipam/forms/bulk_import.py:289 netbox/ipam/forms/bulk_import.py:470 +#: netbox/ipam/forms/bulk_import.py:171 netbox/ipam/forms/bulk_import.py:260 +#: netbox/ipam/forms/bulk_import.py:296 netbox/ipam/forms/bulk_import.py:477 #: netbox/virtualization/forms/bulk_import.py:71 #: netbox/virtualization/forms/bulk_import.py:125 #: netbox/vpn/forms/bulk_import.py:63 netbox/wireless/forms/bulk_import.py:61 @@ -1191,7 +1191,7 @@ msgstr "" #: netbox/dcim/forms/model_forms.py:1433 netbox/dcim/forms/model_forms.py:1600 #: netbox/dcim/forms/model_forms.py:1635 netbox/dcim/forms/model_forms.py:1765 #: netbox/dcim/tables/connections.py:65 netbox/dcim/tables/devices.py:1141 -#: netbox/ipam/forms/bulk_import.py:317 netbox/ipam/forms/model_forms.py:290 +#: netbox/ipam/forms/bulk_import.py:324 netbox/ipam/forms/model_forms.py:290 #: netbox/ipam/forms/model_forms.py:299 netbox/ipam/tables/fhrp.py:64 #: netbox/ipam/tables/ip.py:324 netbox/ipam/tables/vlans.py:145 #: netbox/templates/circuits/inc/circuit_termination_fields.html:52 @@ -1352,7 +1352,7 @@ msgstr "" #: netbox/dcim/forms/bulk_import.py:102 netbox/dcim/forms/model_forms.py:120 #: netbox/dcim/tables/sites.py:89 netbox/extras/forms/filtersets.py:489 #: netbox/ipam/filtersets.py:969 netbox/ipam/forms/bulk_edit.py:477 -#: netbox/ipam/forms/bulk_import.py:459 netbox/ipam/forms/model_forms.py:571 +#: netbox/ipam/forms/bulk_import.py:466 netbox/ipam/forms/model_forms.py:571 #: netbox/ipam/tables/fhrp.py:67 netbox/ipam/tables/vlans.py:91 #: netbox/ipam/tables/vlans.py:202 #: netbox/templates/circuits/circuitgroupassignment.html:22 @@ -1938,8 +1938,8 @@ msgstr "" #: netbox/dcim/tables/devices.py:787 netbox/dcim/tables/devices.py:833 #: netbox/dcim/tables/devices.py:892 netbox/dcim/tables/devices.py:960 #: netbox/dcim/tables/devices.py:1089 netbox/dcim/tables/modules.py:53 -#: netbox/extras/forms/filtersets.py:328 netbox/ipam/forms/bulk_import.py:303 -#: netbox/ipam/forms/bulk_import.py:540 netbox/ipam/forms/filtersets.py:608 +#: netbox/extras/forms/filtersets.py:328 netbox/ipam/forms/bulk_import.py:310 +#: netbox/ipam/forms/bulk_import.py:547 netbox/ipam/forms/filtersets.py:608 #: netbox/ipam/forms/model_forms.py:333 netbox/ipam/forms/model_forms.py:762 #: netbox/ipam/forms/model_forms.py:795 netbox/ipam/forms/model_forms.py:821 #: netbox/ipam/tables/vlans.py:156 @@ -3690,7 +3690,7 @@ msgstr "" msgid "VM interface (ID)" msgstr "" -#: netbox/dcim/filtersets.py:1687 netbox/ipam/forms/bulk_import.py:185 +#: netbox/dcim/filtersets.py:1687 netbox/ipam/forms/bulk_import.py:192 #: netbox/vpn/forms/bulk_import.py:308 msgid "Assigned VLAN" msgstr "" @@ -3708,7 +3708,7 @@ msgstr "" #: netbox/ipam/filtersets.py:554 netbox/ipam/filtersets.py:565 #: netbox/ipam/forms/bulk_edit.py:226 netbox/ipam/forms/bulk_edit.py:282 #: netbox/ipam/forms/bulk_edit.py:324 netbox/ipam/forms/bulk_import.py:160 -#: netbox/ipam/forms/bulk_import.py:242 netbox/ipam/forms/bulk_import.py:278 +#: netbox/ipam/forms/bulk_import.py:249 netbox/ipam/forms/bulk_import.py:285 #: netbox/ipam/forms/filtersets.py:69 netbox/ipam/forms/filtersets.py:175 #: netbox/ipam/forms/filtersets.py:315 netbox/ipam/forms/model_forms.py:65 #: netbox/ipam/forms/model_forms.py:208 netbox/ipam/forms/model_forms.py:256 @@ -4522,7 +4522,7 @@ msgid "available options" msgstr "" #: netbox/dcim/forms/bulk_import.py:136 netbox/dcim/forms/bulk_import.py:570 -#: netbox/dcim/forms/bulk_import.py:1461 netbox/ipam/forms/bulk_import.py:456 +#: netbox/dcim/forms/bulk_import.py:1461 netbox/ipam/forms/bulk_import.py:463 #: netbox/virtualization/forms/bulk_import.py:64 #: netbox/virtualization/forms/bulk_import.py:95 msgid "Assigned site" @@ -4788,7 +4788,7 @@ msgid "IEEE 802.1Q operational mode (for L2 interfaces)" msgstr "" #: netbox/dcim/forms/bulk_import.py:925 netbox/ipam/forms/bulk_import.py:164 -#: netbox/ipam/forms/bulk_import.py:246 netbox/ipam/forms/bulk_import.py:282 +#: netbox/ipam/forms/bulk_import.py:253 netbox/ipam/forms/bulk_import.py:289 #: netbox/ipam/forms/filtersets.py:205 netbox/ipam/forms/filtersets.py:283 #: netbox/ipam/forms/filtersets.py:343 #: netbox/virtualization/forms/bulk_import.py:181 @@ -4859,12 +4859,12 @@ msgstr "" msgid "Component not found: {device} - {component_name}" msgstr "" -#: netbox/dcim/forms/bulk_import.py:1209 netbox/ipam/forms/bulk_import.py:307 +#: netbox/dcim/forms/bulk_import.py:1209 netbox/ipam/forms/bulk_import.py:314 msgid "Parent device of assigned interface (if any)" msgstr "" -#: netbox/dcim/forms/bulk_import.py:1212 netbox/ipam/forms/bulk_import.py:310 -#: netbox/ipam/forms/bulk_import.py:547 netbox/ipam/forms/model_forms.py:768 +#: netbox/dcim/forms/bulk_import.py:1212 netbox/ipam/forms/bulk_import.py:317 +#: netbox/ipam/forms/bulk_import.py:554 netbox/ipam/forms/model_forms.py:768 #: netbox/virtualization/filtersets.py:254 #: netbox/virtualization/filtersets.py:305 #: netbox/virtualization/forms/bulk_edit.py:182 @@ -4878,16 +4878,16 @@ msgstr "" msgid "Virtual machine" msgstr "" -#: netbox/dcim/forms/bulk_import.py:1216 netbox/ipam/forms/bulk_import.py:314 +#: netbox/dcim/forms/bulk_import.py:1216 netbox/ipam/forms/bulk_import.py:321 msgid "Parent VM of assigned interface (if any)" msgstr "" #: netbox/dcim/forms/bulk_import.py:1223 netbox/ipam/filtersets.py:1022 -#: netbox/ipam/forms/bulk_import.py:321 +#: netbox/ipam/forms/bulk_import.py:328 msgid "Assigned interface" msgstr "" -#: netbox/dcim/forms/bulk_import.py:1226 netbox/ipam/forms/bulk_import.py:324 +#: netbox/dcim/forms/bulk_import.py:1226 netbox/ipam/forms/bulk_import.py:331 msgid "Is primary" msgstr "" @@ -5222,7 +5222,7 @@ msgstr "" msgid "Scope" msgstr "" -#: netbox/dcim/forms/mixins.py:104 netbox/ipam/forms/bulk_import.py:436 +#: netbox/dcim/forms/mixins.py:104 netbox/ipam/forms/bulk_import.py:443 msgid "Scope type (app & model)" msgstr "" @@ -5964,7 +5964,7 @@ msgstr "" #: netbox/dcim/models/device_components.py:561 #: netbox/dcim/tables/devices.py:602 netbox/ipam/forms/bulk_edit.py:510 -#: netbox/ipam/forms/bulk_import.py:491 netbox/ipam/forms/filtersets.py:569 +#: netbox/ipam/forms/bulk_import.py:498 netbox/ipam/forms/filtersets.py:569 #: netbox/ipam/forms/model_forms.py:692 netbox/ipam/tables/vlans.py:106 #: netbox/templates/dcim/interface.html:86 netbox/templates/ipam/vlan.html:77 msgid "Q-in-Q SVLAN" @@ -6836,9 +6836,9 @@ msgstr "" msgid "Locally-assigned identifier" msgstr "" -#: netbox/dcim/models/racks.py:299 netbox/ipam/forms/bulk_import.py:197 -#: netbox/ipam/forms/bulk_import.py:265 netbox/ipam/forms/bulk_import.py:300 -#: netbox/ipam/forms/bulk_import.py:482 +#: netbox/dcim/models/racks.py:299 netbox/ipam/forms/bulk_import.py:204 +#: netbox/ipam/forms/bulk_import.py:272 netbox/ipam/forms/bulk_import.py:307 +#: netbox/ipam/forms/bulk_import.py:489 #: netbox/virtualization/forms/bulk_import.py:118 msgid "Functional role" msgstr "" @@ -7065,7 +7065,7 @@ msgid "Config Template" msgstr "" #: netbox/dcim/tables/devices.py:198 netbox/dcim/tables/devices.py:1100 -#: netbox/ipam/forms/bulk_import.py:562 netbox/ipam/forms/model_forms.py:316 +#: netbox/ipam/forms/bulk_import.py:569 netbox/ipam/forms/model_forms.py:316 #: netbox/ipam/forms/model_forms.py:329 netbox/ipam/tables/ip.py:308 #: netbox/ipam/tables/ip.py:375 netbox/ipam/tables/ip.py:398 #: netbox/templates/ipam/ipaddress.html:11 @@ -7117,8 +7117,8 @@ msgid "Power outlets" msgstr "" #: netbox/dcim/tables/devices.py:257 netbox/dcim/tables/devices.py:1113 -#: netbox/dcim/tables/devicetypes.py:133 netbox/dcim/views.py:1144 -#: netbox/dcim/views.py:1388 netbox/dcim/views.py:2139 +#: netbox/dcim/tables/devicetypes.py:133 netbox/dcim/views.py:1153 +#: netbox/dcim/views.py:1397 netbox/dcim/views.py:2148 #: netbox/netbox/navigation/menu.py:94 netbox/netbox/navigation/menu.py:258 #: netbox/templates/dcim/device/base.html:37 #: netbox/templates/dcim/device_list.html:43 @@ -7156,8 +7156,8 @@ msgid "Module Bay" msgstr "" #: netbox/dcim/tables/devices.py:328 netbox/dcim/tables/devicetypes.py:52 -#: netbox/dcim/tables/devicetypes.py:148 netbox/dcim/views.py:1219 -#: netbox/dcim/views.py:2237 netbox/netbox/navigation/menu.py:103 +#: netbox/dcim/tables/devicetypes.py:148 netbox/dcim/views.py:1228 +#: netbox/dcim/views.py:2246 netbox/netbox/navigation/menu.py:103 #: netbox/templates/dcim/device/base.html:52 #: netbox/templates/dcim/device_list.html:71 #: netbox/templates/dcim/devicetype/base.html:49 @@ -7291,8 +7291,8 @@ msgstr "" msgid "Instances" msgstr "" -#: netbox/dcim/tables/devicetypes.py:121 netbox/dcim/views.py:1084 -#: netbox/dcim/views.py:1328 netbox/dcim/views.py:2075 +#: netbox/dcim/tables/devicetypes.py:121 netbox/dcim/views.py:1093 +#: netbox/dcim/views.py:1337 netbox/dcim/views.py:2084 #: netbox/netbox/navigation/menu.py:97 #: netbox/templates/dcim/device/base.html:25 #: netbox/templates/dcim/device_list.html:15 @@ -7302,8 +7302,8 @@ msgstr "" msgid "Console Ports" msgstr "" -#: netbox/dcim/tables/devicetypes.py:124 netbox/dcim/views.py:1099 -#: netbox/dcim/views.py:1343 netbox/dcim/views.py:2091 +#: netbox/dcim/tables/devicetypes.py:124 netbox/dcim/views.py:1108 +#: netbox/dcim/views.py:1352 netbox/dcim/views.py:2100 #: netbox/netbox/navigation/menu.py:98 #: netbox/templates/dcim/device/base.html:28 #: netbox/templates/dcim/device_list.html:22 @@ -7313,8 +7313,8 @@ msgstr "" msgid "Console Server Ports" msgstr "" -#: netbox/dcim/tables/devicetypes.py:127 netbox/dcim/views.py:1114 -#: netbox/dcim/views.py:1358 netbox/dcim/views.py:2107 +#: netbox/dcim/tables/devicetypes.py:127 netbox/dcim/views.py:1123 +#: netbox/dcim/views.py:1367 netbox/dcim/views.py:2116 #: netbox/netbox/navigation/menu.py:99 #: netbox/templates/dcim/device/base.html:31 #: netbox/templates/dcim/device_list.html:29 @@ -7324,8 +7324,8 @@ msgstr "" msgid "Power Ports" msgstr "" -#: netbox/dcim/tables/devicetypes.py:130 netbox/dcim/views.py:1129 -#: netbox/dcim/views.py:1373 netbox/dcim/views.py:2123 +#: netbox/dcim/tables/devicetypes.py:130 netbox/dcim/views.py:1138 +#: netbox/dcim/views.py:1382 netbox/dcim/views.py:2132 #: netbox/netbox/navigation/menu.py:100 #: netbox/templates/dcim/device/base.html:34 #: netbox/templates/dcim/device_list.html:36 @@ -7335,8 +7335,8 @@ msgstr "" msgid "Power Outlets" msgstr "" -#: netbox/dcim/tables/devicetypes.py:136 netbox/dcim/views.py:1159 -#: netbox/dcim/views.py:1403 netbox/dcim/views.py:2161 +#: netbox/dcim/tables/devicetypes.py:136 netbox/dcim/views.py:1168 +#: netbox/dcim/views.py:1412 netbox/dcim/views.py:2170 #: netbox/netbox/navigation/menu.py:95 #: netbox/templates/dcim/device/base.html:40 #: netbox/templates/dcim/devicetype/base.html:37 @@ -7345,8 +7345,8 @@ msgstr "" msgid "Front Ports" msgstr "" -#: netbox/dcim/tables/devicetypes.py:139 netbox/dcim/views.py:1174 -#: netbox/dcim/views.py:1418 netbox/dcim/views.py:2177 +#: netbox/dcim/tables/devicetypes.py:139 netbox/dcim/views.py:1183 +#: netbox/dcim/views.py:1427 netbox/dcim/views.py:2186 #: netbox/netbox/navigation/menu.py:96 #: netbox/templates/dcim/device/base.html:43 #: netbox/templates/dcim/device_list.html:50 @@ -7356,16 +7356,16 @@ msgstr "" msgid "Rear Ports" msgstr "" -#: netbox/dcim/tables/devicetypes.py:142 netbox/dcim/views.py:1204 -#: netbox/dcim/views.py:2217 netbox/netbox/navigation/menu.py:102 +#: netbox/dcim/tables/devicetypes.py:142 netbox/dcim/views.py:1213 +#: netbox/dcim/views.py:2226 netbox/netbox/navigation/menu.py:102 #: netbox/templates/dcim/device/base.html:49 #: netbox/templates/dcim/device_list.html:57 #: netbox/templates/dcim/devicetype/base.html:46 msgid "Device Bays" msgstr "" -#: netbox/dcim/tables/devicetypes.py:145 netbox/dcim/views.py:1189 -#: netbox/dcim/views.py:1433 netbox/dcim/views.py:2197 +#: netbox/dcim/tables/devicetypes.py:145 netbox/dcim/views.py:1198 +#: netbox/dcim/views.py:1442 netbox/dcim/views.py:2206 #: netbox/netbox/navigation/menu.py:101 #: netbox/templates/dcim/device/base.html:46 #: netbox/templates/dcim/device_list.html:64 @@ -7426,6 +7426,10 @@ msgstr "" msgid "Sites" msgstr "" +#: netbox/dcim/tables/sites.py:152 netbox/netbox/navigation/menu.py:202 +msgid "VLAN Groups" +msgstr "" + #: netbox/dcim/tests/test_api.py:50 msgid "Test case must set peer_termination_type" msgstr "" @@ -7435,57 +7439,57 @@ msgstr "" msgid "Disconnected {count} {type}" msgstr "" -#: netbox/dcim/views.py:825 netbox/netbox/navigation/menu.py:51 +#: netbox/dcim/views.py:834 netbox/netbox/navigation/menu.py:51 msgid "Reservations" msgstr "" -#: netbox/dcim/views.py:844 netbox/templates/dcim/location.html:90 +#: netbox/dcim/views.py:853 netbox/templates/dcim/location.html:90 #: netbox/templates/dcim/site.html:140 msgid "Non-Racked Devices" msgstr "" -#: netbox/dcim/views.py:2250 netbox/extras/forms/model_forms.py:591 +#: netbox/dcim/views.py:2259 netbox/extras/forms/model_forms.py:591 #: netbox/templates/extras/configcontext.html:10 #: netbox/virtualization/forms/model_forms.py:232 #: netbox/virtualization/views.py:422 msgid "Config Context" msgstr "" -#: netbox/dcim/views.py:2260 netbox/virtualization/views.py:432 +#: netbox/dcim/views.py:2269 netbox/virtualization/views.py:432 msgid "Render Config" msgstr "" -#: netbox/dcim/views.py:2273 netbox/extras/tables/tables.py:550 +#: netbox/dcim/views.py:2282 netbox/extras/tables/tables.py:550 #: netbox/netbox/navigation/menu.py:255 netbox/netbox/navigation/menu.py:257 #: netbox/virtualization/views.py:190 msgid "Virtual Machines" msgstr "" -#: netbox/dcim/views.py:3106 +#: netbox/dcim/views.py:3115 #, python-brace-format msgid "Installed device {device} in bay {device_bay}." msgstr "" -#: netbox/dcim/views.py:3147 +#: netbox/dcim/views.py:3156 #, python-brace-format msgid "Removed device {device} from bay {device_bay}." msgstr "" -#: netbox/dcim/views.py:3263 netbox/ipam/tables/ip.py:180 +#: netbox/dcim/views.py:3272 netbox/ipam/tables/ip.py:180 msgid "Children" msgstr "" -#: netbox/dcim/views.py:3730 +#: netbox/dcim/views.py:3739 #, python-brace-format msgid "Added member {device}" msgstr "" -#: netbox/dcim/views.py:3779 +#: netbox/dcim/views.py:3788 #, python-brace-format msgid "Unable to remove master device {device} from the virtual chassis." msgstr "" -#: netbox/dcim/views.py:3792 +#: netbox/dcim/views.py:3801 #, python-brace-format msgid "Removed {device} from virtual chassis {chassis}" msgstr "" @@ -9720,7 +9724,7 @@ msgstr "" msgid "VLAN Group" msgstr "" -#: netbox/ipam/forms/bulk_edit.py:218 netbox/ipam/forms/bulk_import.py:181 +#: netbox/ipam/forms/bulk_edit.py:218 netbox/ipam/forms/bulk_import.py:188 #: netbox/ipam/forms/filtersets.py:261 netbox/ipam/forms/model_forms.py:217 #: netbox/ipam/models/vlans.py:272 netbox/ipam/tables/ip.py:206 #: netbox/templates/ipam/prefix.html:56 netbox/templates/ipam/vlan.html:12 @@ -9760,8 +9764,8 @@ msgid "DNS name" msgstr "" #: netbox/ipam/forms/bulk_edit.py:371 netbox/ipam/forms/bulk_edit.py:562 -#: netbox/ipam/forms/bulk_import.py:417 netbox/ipam/forms/bulk_import.py:528 -#: netbox/ipam/forms/bulk_import.py:554 netbox/ipam/forms/filtersets.py:397 +#: netbox/ipam/forms/bulk_import.py:424 netbox/ipam/forms/bulk_import.py:535 +#: netbox/ipam/forms/bulk_import.py:561 netbox/ipam/forms/filtersets.py:397 #: netbox/ipam/forms/filtersets.py:586 netbox/templates/ipam/fhrpgroup.html:22 #: netbox/templates/ipam/inc/panels/fhrp_groups.html:24 #: netbox/templates/ipam/service.html:32 @@ -9805,7 +9809,7 @@ msgstr "" msgid "VLAN ID ranges" msgstr "" -#: netbox/ipam/forms/bulk_edit.py:505 netbox/ipam/forms/bulk_import.py:485 +#: netbox/ipam/forms/bulk_edit.py:505 netbox/ipam/forms/bulk_import.py:492 #: netbox/ipam/forms/filtersets.py:561 netbox/ipam/models/vlans.py:232 #: netbox/ipam/tables/vlans.py:103 msgid "Q-in-Q role" @@ -9819,7 +9823,7 @@ msgstr "" msgid "Site & Group" msgstr "" -#: netbox/ipam/forms/bulk_edit.py:546 netbox/ipam/forms/bulk_import.py:515 +#: netbox/ipam/forms/bulk_edit.py:546 netbox/ipam/forms/bulk_import.py:522 #: netbox/ipam/forms/model_forms.py:724 netbox/ipam/tables/vlans.py:256 #: netbox/templates/ipam/vlantranslationrule.html:14 #: netbox/vpn/forms/model_forms.py:322 netbox/vpn/forms/model_forms.py:359 @@ -9850,73 +9854,81 @@ msgstr "" msgid "VLAN's group (if any)" msgstr "" -#: netbox/ipam/forms/bulk_import.py:207 +#: netbox/ipam/forms/bulk_import.py:181 +msgid "VLAN Site" +msgstr "" + +#: netbox/ipam/forms/bulk_import.py:185 +msgid "VLAN's site (if any)" +msgstr "" + +#: netbox/ipam/forms/bulk_import.py:214 #: netbox/virtualization/forms/bulk_import.py:80 #: netbox/wireless/forms/bulk_import.py:83 msgid "Scope ID" msgstr "" -#: netbox/ipam/forms/bulk_import.py:325 +#: netbox/ipam/forms/bulk_import.py:332 msgid "Make this the primary IP for the assigned device" msgstr "" -#: netbox/ipam/forms/bulk_import.py:329 +#: netbox/ipam/forms/bulk_import.py:336 msgid "Is out-of-band" msgstr "" -#: netbox/ipam/forms/bulk_import.py:330 +#: netbox/ipam/forms/bulk_import.py:337 msgid "Designate this as the out-of-band IP address for the assigned device" msgstr "" -#: netbox/ipam/forms/bulk_import.py:370 +#: netbox/ipam/forms/bulk_import.py:377 msgid "No device or virtual machine specified; cannot set as primary IP" msgstr "" -#: netbox/ipam/forms/bulk_import.py:374 +#: netbox/ipam/forms/bulk_import.py:381 msgid "No device specified; cannot set as out-of-band IP" msgstr "" -#: netbox/ipam/forms/bulk_import.py:378 +#: netbox/ipam/forms/bulk_import.py:385 msgid "Cannot set out-of-band IP for virtual machines" msgstr "" -#: netbox/ipam/forms/bulk_import.py:382 +#: netbox/ipam/forms/bulk_import.py:389 msgid "No interface specified; cannot set as primary IP" msgstr "" -#: netbox/ipam/forms/bulk_import.py:386 +#: netbox/ipam/forms/bulk_import.py:393 msgid "No interface specified; cannot set as out-of-band IP" msgstr "" -#: netbox/ipam/forms/bulk_import.py:421 +#: netbox/ipam/forms/bulk_import.py:428 msgid "Auth type" msgstr "" -#: netbox/ipam/forms/bulk_import.py:463 +#: netbox/ipam/forms/bulk_import.py:470 msgid "Assigned VLAN group" msgstr "" -#: netbox/ipam/forms/bulk_import.py:495 +#: netbox/ipam/forms/bulk_import.py:502 msgid "Service VLAN (for Q-in-Q/802.1ad customer VLANs)" msgstr "" -#: netbox/ipam/forms/bulk_import.py:518 netbox/ipam/models/vlans.py:343 +#: netbox/ipam/forms/bulk_import.py:525 netbox/ipam/models/vlans.py:343 msgid "VLAN translation policy" msgstr "" -#: netbox/ipam/forms/bulk_import.py:530 netbox/ipam/forms/bulk_import.py:556 +#: netbox/ipam/forms/bulk_import.py:537 netbox/ipam/forms/bulk_import.py:563 msgid "IP protocol" msgstr "" -#: netbox/ipam/forms/bulk_import.py:544 +#: netbox/ipam/forms/bulk_import.py:551 msgid "Required if not assigned to a VM" msgstr "" -#: netbox/ipam/forms/bulk_import.py:551 +#: netbox/ipam/forms/bulk_import.py:558 msgid "Required if not assigned to a device" msgstr "" -#: netbox/ipam/forms/bulk_import.py:576 +#: netbox/ipam/forms/bulk_import.py:583 #, python-brace-format msgid "{ip} is not assigned to this device/VM." msgstr "" @@ -11264,10 +11276,6 @@ msgstr "" msgid "ASN Ranges" msgstr "" -#: netbox/netbox/navigation/menu.py:202 -msgid "VLAN Groups" -msgstr "" - #: netbox/netbox/navigation/menu.py:203 msgid "VLAN Translation Policies" msgstr ""